{"id":"270e0ae3bee7c568df25b3eed8a73b4d","_format":"hh-sol-build-info-1","solcVersion":"0.8.17","solcLongVersion":"0.8.17+commit.8df45f5f","input":{"language":"Solidity","sources":{"@gelatonetwork/relay-context/contracts/base/GelatoRelayBase.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.1;\n\nimport {GELATO_RELAY} from \"../constants/GelatoRelay.sol\";\n\nabstract contract GelatoRelayBase {\n    modifier onlyGelatoRelay() {\n        require(_isGelatoRelay(msg.sender), \"onlyGelatoRelay\");\n        _;\n    }\n\n    function _isGelatoRelay(address _forwarder) internal pure returns (bool) {\n        return _forwarder == GELATO_RELAY;\n    }\n}\n"},"@gelatonetwork/relay-context/contracts/constants/GelatoRelay.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.1;\n\naddress constant GELATO_RELAY = 0xaBcC9b596420A9E9172FD5938620E265a0f9Df92;\naddress constant GELATO_RELAY_ERC2771 = 0xBf175FCC7086b4f9bd59d5EAE8eA67b8f940DE0d;\n"},"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.1;\n\nimport {GelatoRelayBase} from \"./base/GelatoRelayBase.sol\";\n\nuint256 constant _FEE_COLLECTOR_START = 20;\n\n// WARNING: Do not use this free fn by itself, always inherit GelatoRelayFeeCollector\n// solhint-disable-next-line func-visibility, private-vars-leading-underscore\nfunction __getFeeCollector() pure returns (address feeCollector) {\n    assembly {\n        feeCollector := shr(\n            96,\n            calldataload(sub(calldatasize(), _FEE_COLLECTOR_START))\n        )\n    }\n}\n\n/**\n * @dev Context variant with only feeCollector appended to msg.data\n * Expects calldata encoding:\n *   abi.encodePacked(bytes data, address feeCollectorAddress)\n * Therefore, we're expecting 20bytes to be appended to normal msgData\n * 20bytes start offsets from calldatasize:\n *    feeCollector: -20\n */\n/// @dev Do not use with GelatoRelayContext - pick only one\nabstract contract GelatoRelayFeeCollector is GelatoRelayBase {\n    function _getMsgData() internal view returns (bytes calldata) {\n        return\n            _isGelatoRelay(msg.sender)\n                ? msg.data[:msg.data.length - _FEE_COLLECTOR_START]\n                : msg.data;\n    }\n\n    // Only use with GelatoRelayBase onlyGelatoRelay or `_isGelatoRelay` checks\n    function _getFeeCollector() internal pure returns (address) {\n        return __getFeeCollector();\n    }\n}\n"},"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IAllowList.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8.0;\n\ninterface IAllowList {\n    /*//////////////////////////////////////////////////////////////\n                            EVENTS\n    //////////////////////////////////////////////////////////////*/\n\n    /// @notice public access is changed\n    event UpdatePublicAccess(address indexed target, bool newStatus);\n\n    /// @notice permission to call is changed\n    event UpdateCallPermission(address indexed caller, address indexed target, bytes4 indexed functionSig, bool status);\n\n    /// @notice pendingOwner is changed\n    /// @dev Also emitted when the new owner is accepted and in this case, `newPendingOwner` would be zero address\n    event NewPendingOwner(address indexed oldPendingOwner, address indexed newPendingOwner);\n\n    /// @notice Owner changed\n    event NewOwner(address indexed newOwner);\n\n    /*//////////////////////////////////////////////////////////////\n                            GETTERS\n    //////////////////////////////////////////////////////////////*/\n\n    function pendingOwner() external view returns (address);\n\n    function owner() external view returns (address);\n\n    function isAccessPublic(address _target) external view returns (bool);\n\n    function hasSpecialAccessToCall(\n        address _caller,\n        address _target,\n        bytes4 _functionSig\n    ) external view returns (bool);\n\n    function canCall(\n        address _caller,\n        address _target,\n        bytes4 _functionSig\n    ) external view returns (bool);\n\n    /*//////////////////////////////////////////////////////////////\n                           ALLOW LIST LOGIC\n    //////////////////////////////////////////////////////////////*/\n\n    function setBatchPublicAccess(address[] calldata _targets, bool[] calldata _enables) external;\n\n    function setPublicAccess(address _target, bool _enable) external;\n\n    function setBatchPermissionToCall(\n        address[] calldata _callers,\n        address[] calldata _targets,\n        bytes4[] calldata _functionSigs,\n        bool[] calldata _enables\n    ) external;\n\n    function setPermissionToCall(\n        address _caller,\n        address _target,\n        bytes4 _functionSig,\n        bool _enable\n    ) external;\n\n    function setPendingOwner(address _newPendingOwner) external;\n\n    function acceptOwner() external;\n}\n"},"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IERC20.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n * @dev Unlike EIP-20 standard \"transfer\" and \"transferFrom\" functions do not return any value.\n * This is made to be compatible with popular tokens that are implemented standard incorrectly.\n */\ninterface IERC20 {\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the symbol of the token.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the decimals places of the token.\n     */\n    function decimals() external view returns (uint8);\n\n    /**\n     * @dev Returns the amount of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the amount of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address recipient, uint256 amount) external;\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\n     * allowance mechanism. `amount` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(\n        address sender,\n        address recipient,\n        uint256 amount\n    ) external;\n\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n"},"@matterlabs/zksync-contracts/l1/contracts/common/libraries/UncheckedMath.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8.0;\n\nlibrary UncheckedMath {\n    function uncheckedInc(uint256 _number) internal pure returns (uint256) {\n        unchecked {\n            return _number + 1;\n        }\n    }\n\n    function uncheckedAdd(uint256 _lhs, uint256 _rhs) internal pure returns (uint256) {\n        unchecked {\n            return _lhs + _rhs;\n        }\n    }\n}\n"},"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IDiamondCut.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8;\n\nimport \"../libraries/Diamond.sol\";\n\ninterface IDiamondCut {\n    function proposeDiamondCut(Diamond.FacetCut[] calldata _facetCuts, address _initAddress) external;\n\n    function cancelDiamondCutProposal() external;\n\n    function executeDiamondCutProposal(Diamond.DiamondCutData calldata _diamondCut) external;\n\n    function emergencyFreezeDiamond() external;\n\n    function unfreezeDiamond() external;\n\n    function approveEmergencyDiamondCutAsSecurityCouncilMember(bytes32 _diamondCutHash) external;\n\n    // FIXME: token holders should have the ability to cancel the upgrade\n\n    event DiamondCutProposal(Diamond.FacetCut[] _facetCuts, address _initAddress);\n\n    event DiamondCutProposalCancelation();\n\n    event DiamondCutProposalExecution(Diamond.DiamondCutData _diamondCut);\n\n    event EmergencyFreeze();\n\n    event Unfreeze();\n\n    event EmergencyDiamondCutApproved(address _address);\n}\n"},"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IExecutor.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8;\n\ninterface IExecutor {\n    /// @notice Rollup block stored data\n    /// @param blockNumber Rollup block number\n    /// @param blockHash Hash of L2 block\n    /// @param indexRepeatedStorageChanges The serial number of the shortcut index that's used as a unique identifier for storage keys that were used twice or more\n    /// @param numberOfLayer1Txs Number of priority operations to be processed\n    /// @param priorityOperationsHash Hash of all priority operations from this block\n    /// @param l2LogsTreeRoot Root hash of tree that contains L2 -> L1 messages from this block\n    /// @param timestamp Rollup block timestamp, have the same format as Ethereum block constant\n    /// @param stateRoot Merkle root of the rollup state tree\n    /// @param commitment Verified input for the zkSync circuit\n    struct StoredBlockInfo {\n        uint64 blockNumber;\n        bytes32 blockHash;\n        uint64 indexRepeatedStorageChanges;\n        uint256 numberOfLayer1Txs;\n        bytes32 priorityOperationsHash;\n        bytes32 l2LogsTreeRoot;\n        uint256 timestamp;\n        bytes32 commitment;\n    }\n\n    /// @notice Data needed to commit new block\n    /// @param blockNumber Number of the committed block\n    /// @param timestamp Unix timestamp denoting the start of the block execution\n    /// @param indexRepeatedStorageChanges The serial number of the shortcut index that's used as a unique identifier for storage keys that were used twice or more\n    /// @param newStateRoot The state root of the full state tree\n    /// @param ergsPerPubdataByteInBlock Price in ergs per one byte of published pubdata in block\n    /// @param ergsPerCodeDecommittmentWord Price in ergs per decommittment of one machine word from l2 bytecode\n    /// @param numberOfLayer1Txs Number of priority operations to be processed\n    /// @param l2LogsTreeRoot The root hash of the tree that contains all L2 -> L1 logs in the block\n    /// @param priorityOperationsHash Hash of all priority operations from this block\n    /// @param initialStorageChanges Storage write access as a concatenation key-value\n    /// @param repeatedStorageChanges Storage write access as a concatenation index-value\n    /// @param l2Logs concatenation of all L2 -> L1 logs in the block\n    /// @param l2ArbitraryLengthMessages array of hash preimages that were sent as value of L2 logs by special system L2 contract\n    /// @param factoryDeps array of l2 bytecodes that were marked as known on L2\n    struct CommitBlockInfo {\n        uint64 blockNumber;\n        uint64 timestamp;\n        uint64 indexRepeatedStorageChanges;\n        bytes32 newStateRoot;\n        uint16 ergsPerCodeDecommittmentWord;\n        uint256 numberOfLayer1Txs;\n        bytes32 l2LogsTreeRoot;\n        bytes32 priorityOperationsHash;\n        bytes initialStorageChanges;\n        bytes repeatedStorageChanges;\n        bytes l2Logs;\n        bytes[] l2ArbitraryLengthMessages;\n        bytes[] factoryDeps;\n    }\n\n    /// @notice Recursive proof input data (individual commitments are constructed onchain)\n    /// TODO: The verifier integration is not finished yet, change the structure for compatibility later\n    struct ProofInput {\n        uint256[] recurisiveAggregationInput;\n        uint256[] serializedProof;\n    }\n\n    function commitBlocks(StoredBlockInfo calldata _lastCommittedBlockData, CommitBlockInfo[] calldata _newBlocksData)\n        external;\n\n    function proveBlocks(\n        StoredBlockInfo calldata _prevBlock,\n        StoredBlockInfo[] calldata _committedBlocks,\n        ProofInput calldata _proof\n    ) external;\n\n    function executeBlocks(StoredBlockInfo[] calldata _blocksData) external;\n\n    function revertBlocks(uint256 _blocksToRevert) external;\n\n    /// @notice Event emitted when a block is committed\n    event BlockCommit(uint256 indexed blockNumber);\n\n    /// @notice Event emitted when a block is executed\n    event BlockExecution(uint256 indexed blockNumber);\n\n    /// @notice Event emitted when blocks are reverted\n    event BlocksRevert(uint256 totalBlocksCommitted, uint256 totalBlocksVerified, uint256 totalBlocksExecuted);\n}\n"},"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IGetters.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8;\n\ninterface IGetters {\n    /*//////////////////////////////////////////////////////////////\n                            CUSTOM GETTERS\n    //////////////////////////////////////////////////////////////*/\n\n    function getVerifier() external view returns (address);\n\n    function getGovernor() external view returns (address);\n\n    function getTotalBlocksCommitted() external view returns (uint256);\n\n    function getTotalBlocksVerified() external view returns (uint256);\n\n    function getTotalBlocksExecuted() external view returns (uint256);\n\n    function getTotalPriorityTxs() external view returns (uint256);\n\n    function getFirstUnprocessedPriorityTx() external view returns (uint256);\n\n    function isValidator(address _address) external view returns (bool);\n\n    function l2LogsRootHash(uint32 blockNumber) external view returns (bytes32 hash);\n\n    function isFunctionFreezable(bytes4 _selector) external view returns (bool);\n\n    function isFacetFreezable(address _facet) external view returns (bool);\n\n    /*//////////////////////////////////////////////////////////////\n                            DIAMOND LOUPE\n    //////////////////////////////////////////////////////////////*/\n\n    /// @notice Faсet structure compatible with the EIP-2535 diamond loupe\n    /// @param addr The address of the facet contract\n    /// @param selectors The NON-sorted array with selectors associated with facet\n    struct Facet {\n        address addr;\n        bytes4[] selectors;\n    }\n\n    function facets() external view returns (Facet[] memory);\n\n    function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory);\n\n    function facetAddresses() external view returns (address[] memory facets);\n\n    function facetAddress(bytes4 _selector) external view returns (address facet);\n}\n"},"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IGovernance.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8;\n\ninterface IGovernance {\n    function setPendingGovernor(address _newPendingGovernor) external;\n\n    function acceptGovernor() external;\n\n    function setValidator(address _validator, bool _active) external;\n\n    function setL2BootloaderBytecodeHash(bytes32 _l2BootloaderBytecodeHash) external;\n\n    function setL2DefaultAccountBytecodeHash(bytes32 _l2DefaultAccountBytecodeHash) external;\n\n    function setPorterAvailability(bool _isPorterAvailable) external;\n\n    /// @notice Сhanges to the bytecode that is used in L2 as a bootloader (start program)\n    event NewL2BootloaderBytecodeHash(bytes32 indexed previousBytecodeHash, bytes32 indexed newBytecodeHash);\n\n    /// @notice Сhanges to the bytecode that is used in L2 as a default account\n    event NewL2DefaultAccountBytecodeHash(bytes32 indexed previousBytecodeHash, bytes32 indexed newBytecodeHash);\n\n    /// @notice Porter availability status changes\n    event IsPorterAvailableStatusUpdate(bool isPorterAvailable);\n\n    /// @notice Validator's status changed\n    event ValidatorStatusUpdate(address indexed validatorAddress, bool isActive);\n\n    /// @notice pendingGovernor is changed\n    /// @dev Also emitted when new governor is accepted and in this case, `newPendingGovernor` would be zero address\n    event NewPendingGovernor(address indexed oldPendingGovernor, address indexed newPendingGovernor);\n\n    /// @notice Governor changed\n    event NewGovernor(address indexed newGovernor);\n}\n"},"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IMailbox.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8;\n\nimport {L2Log, L2Message} from \"../Storage.sol\";\nimport \"../../common/interfaces/IERC20.sol\";\n\ninterface IMailbox {\n    /// @dev Structure that includes all fields of the L2 transaction\n    /// @dev The hash of this structure is the \"canonical L2 transaction hash\" and can be used as a unique identifier of a tx\n    /// @param txType The tx type number, depending on which the L2 transaction can be interpreted differently\n    /// @param from The sender's address. `uint256` type for possible address format changes and maintaining backward compatibility\n    /// @param to The recipient's address. `uint256` type for possible address format changes and maintaining backward compatibility\n    /// @param ergsLimit Ergs limit on L2 transaction. Analog to the `gasLimit` on an L1 transactions\n    /// @param ergsPerPubdataByteLimit Maximum number of ergs that will cost one byte of pubdata (every piece of data that will be stored on L1 as calldata)\n    /// @param maxFeePerErg The absolute maximum sender willing to pay per unit of ergs to get the transaction included in a block. Analog to the EIP-1559 `maxFeePerGas` on an L1 transactions\n    /// @param maxPriorityFeePerErg The additional fee that is paid directly to the validator to incentivize them to include the transaction in a block. Analog to the EIP-1559 `maxPriorityFeePerGas` on an L1 transactions\n    /// @param paymaster The address of the EIP-4337 paymaster, that will pay fees for the transaction. `uint256` type for possible address format changes and maintaining backward compatibility\n    /// @param reserved The fixed-length fields for usage in a future extension of transaction formats\n    /// @param data The calldata that is transmitted for the transaction call\n    /// @param signature An abstract set of bytes that are used for transaction authorization\n    /// @param factoryDeps The set of L2 bytecode hashes whose preimages were shown on L1\n    /// @param paymasterInput The arbitrary-length data that is used as a calldata to the paymaster pre-call\n    /// @param reservedDynamic The arbitrary-length field for usage in a future extension of transaction formats\n    struct L2CanonicalTransaction {\n        uint256 txType;\n        uint256 from;\n        uint256 to;\n        uint256 ergsLimit;\n        uint256 ergsPerPubdataByteLimit;\n        uint256 maxFeePerErg;\n        uint256 maxPriorityFeePerErg;\n        uint256 paymaster;\n        // In the future, we might want to add some\n        // new fields to the struct. The `txData` struct\n        // is to be passed to account and any changes to its structure\n        // would mean a breaking change to these accounts. To prevent this,\n        // we should keep some fields as \"reserved\".\n        // It is also recommended that their length is fixed, since\n        // it would allow easier proof integration (in case we will need\n        // some special circuit for preprocessing transactions).\n        uint256[6] reserved;\n        bytes data;\n        bytes signature;\n        uint256[] factoryDeps;\n        bytes paymasterInput;\n        // Reserved dynamic type for the future use-case. Using it should be avoided,\n        // But it is still here, just in case we want to enable some additional functionality.\n        bytes reservedDynamic;\n    }\n\n    function proveL2MessageInclusion(\n        uint256 _blockNumber,\n        uint256 _index,\n        L2Message calldata _message,\n        bytes32[] calldata _proof\n    ) external view returns (bool);\n\n    function proveL2LogInclusion(\n        uint256 _blockNumber,\n        uint256 _index,\n        L2Log memory _log,\n        bytes32[] calldata _proof\n    ) external view returns (bool);\n\n    function serializeL2Transaction(\n        uint256 _txId,\n        uint256 _l2Value,\n        address _sender,\n        address _contractAddressL2,\n        bytes calldata _calldata,\n        uint256 _ergsLimit,\n        bytes[] calldata _factoryDeps\n    ) external pure returns (L2CanonicalTransaction memory);\n\n    function requestL2Transaction(\n        address _contractAddressL2,\n        uint256 _l2Value,\n        bytes calldata _calldata,\n        uint256 _ergsLimit,\n        bytes[] calldata _factoryDeps\n    ) external payable returns (bytes32 txHash);\n\n    function l2TransactionBaseCost(\n        uint256 _gasPrice,\n        uint256 _ergsLimit,\n        uint32 _calldataLength\n    ) external view returns (uint256);\n\n    /// @notice New priority request event. Emitted when a request is placed into the priority queue\n    /// @param txId Serial number of the priority operation\n    /// @param txHash keccak256 hash of encoded transaction representation\n    /// @param expirationBlock Ethereum block number up to which priority request should be processed\n    /// @param transaction The whole transaction structure that is requested to be executed on L2\n    /// @param factoryDeps An array of bytecodes that were shown in the L1 public data. Will be marked as known bytecodes in L2\n    event NewPriorityRequest(\n        uint256 txId,\n        bytes32 txHash,\n        uint64 expirationBlock,\n        L2CanonicalTransaction transaction,\n        bytes[] factoryDeps\n    );\n}\n"},"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IZkSync.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8;\n\nimport \"./IMailbox.sol\";\nimport \"./IGovernance.sol\";\nimport \"./IExecutor.sol\";\nimport \"./IDiamondCut.sol\";\nimport \"./IGetters.sol\";\n\ninterface IZkSync is IMailbox, IGovernance, IExecutor, IDiamondCut, IGetters {}\n"},"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/Diamond.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/// @author Matter Labs\n/// @notice The helper library for managing the EIP-2535 diamond proxy.\nlibrary Diamond {\n    /// @dev Magic value that should be returned by diamond cut initialize contracts.\n    /// @dev Used to distinguish calls to contracts that were supposed to be used as diamond initializer from other contracts.\n    bytes32 constant DIAMOND_INIT_SUCCESS_RETURN_VALUE = keccak256(\"diamond.zksync.init\");\n\n    /// @dev Storage position of `DiamondStorage` structure.\n    bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n    /// @dev Utility struct that contains associated facet & meta information of selector\n    /// @param facetAddress address of the facet which is connected with selector\n    /// @param selectorPosition index in `FacetToSelectors.selectors` array, where is selector stored\n    /// @param isFreezable denotes whether the selector can be frozen.\n    struct SelectorToFacet {\n        address facetAddress;\n        uint16 selectorPosition;\n        bool isFreezable;\n    }\n\n    /// @dev Utility struct that contains associated selectors & meta information of facet\n    /// @param selectors list of all selectors that belong to the facet\n    /// @param facetPosition index in `DiamondStorage.facets` array, where is facet stored\n    struct FacetToSelectors {\n        bytes4[] selectors;\n        uint16 facetPosition;\n    }\n\n    /// @notice The structure that holds all diamond proxy associated parameters\n    /// @dev According to the EIP-2535 should be stored on a special storage key - `DIAMOND_STORAGE_POSITION`\n    /// @param selectorToFacet An mapping from selector to the facet address and its' meta information\n    /// @param facetToSelectors An mapping from facet address to its' selector with meta information\n    /// @param facets The array of all unique facet addresses that belong to the diamond proxy\n    /// @param isFrozen Denotes whether the diamond proxy is frozen and all freezable facets are not accessible\n    struct DiamondStorage {\n        mapping(bytes4 => SelectorToFacet) selectorToFacet;\n        mapping(address => FacetToSelectors) facetToSelectors;\n        address[] facets;\n        bool isFrozen;\n    }\n\n    /// @return diamondStorage The pointer to the storage where all specific diamond proxy parameters stored\n    function getDiamondStorage() internal pure returns (DiamondStorage storage diamondStorage) {\n        bytes32 position = DIAMOND_STORAGE_POSITION;\n        assembly {\n            diamondStorage.slot := position\n        }\n    }\n\n    /// @notice Action on selectors for one facet on a Diamond Cut\n    enum Action {\n        Add,\n        Replace,\n        Remove\n    }\n\n    /// @dev Parameters for diamond changes that touch one of the facets\n    /// @param facet The address of facet that's affected by the cut\n    /// @param action The action that is made on the facet\n    /// @param isFreezable Denotes whether the facet & all their selectors can be frozen\n    /// @param selectors An array of unique selectors that belongs to the facet address\n    struct FacetCut {\n        address facet;\n        Action action;\n        bool isFreezable;\n        bytes4[] selectors;\n    }\n\n    /// @dev Structure of the diamond proxy changes\n    /// @param facetCuts The set of changes (adding/removing/replacement) of implementation contracts\n    /// @param initAddress The address that's dellegate called after setting up new facet changes\n    /// @param initCalldata Calldata for the delegete call to `initAddress`\n    struct DiamondCutData {\n        FacetCut[] facetCuts;\n        address initAddress;\n        bytes initCalldata;\n    }\n\n    /// @dev Add/replace/remove any number of selectors and optionally execute a function with delegatecall\n    /// @param _diamondCut Diamond's facet changes and the parameters to optional initialization delegatecall\n    function diamondCut(DiamondCutData memory _diamondCut) internal {\n        FacetCut[] memory facetCuts = _diamondCut.facetCuts;\n        address initAddress = _diamondCut.initAddress;\n        bytes memory initCalldata = _diamondCut.initCalldata;\n        for (uint256 i = 0; i < facetCuts.length; ++i) {\n            Action action = facetCuts[i].action;\n            address facet = facetCuts[i].facet;\n            bool isFacetFreezable = facetCuts[i].isFreezable;\n            bytes4[] memory selectors = facetCuts[i].selectors;\n\n            require(selectors.length > 0, \"B\"); // no functions for diamond cut\n\n            if (action == Action.Add) {\n                _addFunctions(facet, selectors, isFacetFreezable);\n            } else if (action == Action.Replace) {\n                _replaceFunctions(facet, selectors, isFacetFreezable);\n            } else if (action == Action.Remove) {\n                _removeFunctions(facet, selectors);\n            } else {\n                revert(\"C\"); // undefined diamond cut action\n            }\n        }\n\n        _initializeDiamondCut(initAddress, initCalldata);\n        emit DiamondCut(facetCuts, initAddress, initCalldata);\n    }\n\n    event DiamondCut(FacetCut[] facetCuts, address initAddress, bytes initCalldata);\n\n    /// @dev Add new functions to the diamond proxy\n    /// NOTE: expect but NOT enforce that `_selectors` is NON-EMPTY array\n    function _addFunctions(\n        address _facet,\n        bytes4[] memory _selectors,\n        bool _isFacetFreezable\n    ) private {\n        DiamondStorage storage ds = getDiamondStorage();\n\n        require(_facet != address(0), \"G\"); // facet with zero address cannot be added\n\n        // Add facet to the list of facets if the facet address is new one\n        _saveFacetIfNew(_facet);\n\n        for (uint256 i = 0; i < _selectors.length; ++i) {\n            bytes4 selector = _selectors[i];\n            SelectorToFacet memory oldFacet = ds.selectorToFacet[selector];\n            require(oldFacet.facetAddress == address(0), \"J\"); // facet for this selector already exists\n\n            _addOneFunction(_facet, selector, _isFacetFreezable);\n        }\n    }\n\n    /// @dev Change associated facets to already known function selectors\n    /// NOTE: expect but NOT enforce that `_selectors` is NON-EMPTY array\n    function _replaceFunctions(\n        address _facet,\n        bytes4[] memory _selectors,\n        bool _isFacetFreezable\n    ) private {\n        DiamondStorage storage ds = getDiamondStorage();\n\n        require(_facet != address(0), \"K\"); // cannot replace facet with zero address\n\n        // Add facet to the list of facets if the facet address is a new one\n        _saveFacetIfNew(_facet);\n\n        for (uint256 i = 0; i < _selectors.length; ++i) {\n            bytes4 selector = _selectors[i];\n            SelectorToFacet memory oldFacet = ds.selectorToFacet[selector];\n            require(oldFacet.facetAddress != address(0), \"L\"); // it is impossible to replace the facet with zero address\n\n            _removeOneFunction(oldFacet.facetAddress, selector);\n            _addOneFunction(_facet, selector, _isFacetFreezable);\n        }\n    }\n\n    /// @dev Remove association with function and facet\n    /// NOTE: expect but NOT enforce that `_selectors` is NON-EMPTY array\n    function _removeFunctions(address _facet, bytes4[] memory _selectors) private {\n        DiamondStorage storage ds = getDiamondStorage();\n\n        require(_facet == address(0), \"a1\"); // facet address must be zero\n\n        for (uint256 i = 0; i < _selectors.length; ++i) {\n            bytes4 selector = _selectors[i];\n            SelectorToFacet memory oldFacet = ds.selectorToFacet[selector];\n            require(oldFacet.facetAddress != address(0), \"a2\"); // Can't delete a non-existent facet\n\n            _removeOneFunction(oldFacet.facetAddress, selector);\n        }\n    }\n\n    /// @dev Add address to the list of known facets if it is not on the list yet\n    /// NOTE: should be called ONLY before adding a new selector associated with the address\n    function _saveFacetIfNew(address _facet) private {\n        DiamondStorage storage ds = getDiamondStorage();\n\n        uint16 selectorsLength = uint16(ds.facetToSelectors[_facet].selectors.length);\n        // If there are no selectors associated with facet then save facet as new one\n        if (selectorsLength == 0) {\n            ds.facetToSelectors[_facet].facetPosition = uint16(ds.facets.length);\n            ds.facets.push(_facet);\n        }\n    }\n\n    /// @dev Add one function to the already known facet\n    /// NOTE: It is expected but NOT enforced that:\n    /// - `_facet` is NON-ZERO address\n    /// - `_facet` is already stored address in `DiamondStorage.facets`\n    /// - `_selector` is NOT associated by another facet\n    function _addOneFunction(\n        address _facet,\n        bytes4 _selector,\n        bool _isSelectorFreezable\n    ) private {\n        DiamondStorage storage ds = getDiamondStorage();\n\n        uint16 selectorPosition = uint16(ds.facetToSelectors[_facet].selectors.length);\n        ds.selectorToFacet[_selector] = SelectorToFacet({\n            facetAddress: _facet,\n            selectorPosition: selectorPosition,\n            isFreezable: _isSelectorFreezable\n        });\n        ds.facetToSelectors[_facet].selectors.push(_selector);\n    }\n\n    /// @dev Remove one associated function with facet\n    /// NOTE: It is expected but NOT enforced that `_facet` is NON-ZERO address\n    function _removeOneFunction(address _facet, bytes4 _selector) private {\n        DiamondStorage storage ds = getDiamondStorage();\n\n        // Get index of `FacetToSelectors.selectors` of the selector and last element of array\n        uint256 selectorPosition = ds.selectorToFacet[_selector].selectorPosition;\n        uint256 lastSelectorPosition = ds.facetToSelectors[_facet].selectors.length - 1;\n\n        // If the selector is not at the end of the array then move the last element to the selector position\n        if (selectorPosition != lastSelectorPosition) {\n            bytes4 lastSelector = ds.facetToSelectors[_facet].selectors[lastSelectorPosition];\n\n            ds.facetToSelectors[_facet].selectors[selectorPosition] = lastSelector;\n            ds.selectorToFacet[lastSelector].selectorPosition = uint16(selectorPosition);\n        }\n\n        // Remove last element from the selectors array\n        ds.facetToSelectors[_facet].selectors.pop();\n\n        // Finally, clean up the association with facet\n        delete ds.selectorToFacet[_selector];\n\n        // If there are no selectors for facet then remove the facet from the list of known facets\n        if (lastSelectorPosition == 0) {\n            _removeFacet(_facet);\n        }\n    }\n\n    /// @dev remove facet from the list of known facets\n    /// NOTE: It is expected but NOT enforced that there are no selectors associated wih `_facet`\n    function _removeFacet(address _facet) private {\n        DiamondStorage storage ds = getDiamondStorage();\n\n        // Get index of `DiamondStorage.facets` of the facet and last element of array\n        uint256 facetPosition = ds.facetToSelectors[_facet].facetPosition;\n        uint256 lastFacetPosition = ds.facets.length - 1;\n\n        // If the facet is not at the end of the array then move the last element to the facet position\n        if (facetPosition != lastFacetPosition) {\n            address lastFacet = ds.facets[lastFacetPosition];\n\n            ds.facets[facetPosition] = lastFacet;\n            ds.facetToSelectors[lastFacet].facetPosition = uint16(facetPosition);\n        }\n\n        // Remove last element from the facets array\n        ds.facets.pop();\n    }\n\n    /// @dev Delegates call to the initialization address with provided calldata\n    /// @dev Used as a final step of diamond cut to execute the logic of the initialization for changed facets\n    function _initializeDiamondCut(address _init, bytes memory _calldata) private {\n        if (_init == address(0)) {\n            require(_calldata.length == 0, \"H\"); // Non-empty calldata for zero address\n        } else {\n            // Do not check whether `_init` is a contract since later we check that it returns data.\n            (bool success, bytes memory data) = _init.delegatecall(_calldata);\n            require(success, \"I\"); // delegatecall failed\n\n            // Check that called contract returns magic value to make sure that contract logic\n            // supposed to be used as diamond cut initializer.\n            require(data.length == 32 && abi.decode(data, (bytes32)) == DIAMOND_INIT_SUCCESS_RETURN_VALUE, \"lp\");\n        }\n    }\n}\n"},"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PairingsBn254.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8.0;\n\nlibrary PairingsBn254 {\n    uint256 constant q_mod = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\n    uint256 constant r_mod = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n    uint256 constant bn254_b_coeff = 3;\n\n    struct G1Point {\n        uint256 X;\n        uint256 Y;\n    }\n\n    struct Fr {\n        uint256 value;\n    }\n\n    function new_fr(uint256 fr) internal pure returns (Fr memory) {\n        require(fr < r_mod);\n        return Fr({value: fr});\n    }\n\n    function copy(Fr memory self) internal pure returns (Fr memory n) {\n        n.value = self.value;\n    }\n\n    function assign(Fr memory self, Fr memory other) internal pure {\n        self.value = other.value;\n    }\n\n    function inverse(Fr memory fr) internal view returns (Fr memory) {\n        require(fr.value != 0);\n        return pow(fr, r_mod - 2);\n    }\n\n    function add_assign(Fr memory self, Fr memory other) internal pure {\n        self.value = addmod(self.value, other.value, r_mod);\n    }\n\n    function sub_assign(Fr memory self, Fr memory other) internal pure {\n        self.value = addmod(self.value, r_mod - other.value, r_mod);\n    }\n\n    function mul_assign(Fr memory self, Fr memory other) internal pure {\n        self.value = mulmod(self.value, other.value, r_mod);\n    }\n\n    function pow(Fr memory self, uint256 power) internal view returns (Fr memory) {\n        uint256[6] memory input = [32, 32, 32, self.value, power, r_mod];\n        uint256[1] memory result;\n        bool success;\n        assembly {\n            success := staticcall(gas(), 0x05, input, 0xc0, result, 0x20)\n        }\n        require(success);\n        return Fr({value: result[0]});\n    }\n\n    // Encoding of field elements is: X[0] * z + X[1]\n    struct G2Point {\n        uint256[2] X;\n        uint256[2] Y;\n    }\n\n    function P1() internal pure returns (G1Point memory) {\n        return G1Point(1, 2);\n    }\n\n    function new_g1(uint256 x, uint256 y) internal pure returns (G1Point memory) {\n        return G1Point(x, y);\n    }\n\n    // function new_g1_checked(uint256 x, uint256 y) internal pure returns (G1Point memory) {\n    function new_g1_checked(uint256 x, uint256 y) internal pure returns (G1Point memory) {\n        if (x == 0 && y == 0) {\n            // point of infinity is (0,0)\n            return G1Point(x, y);\n        }\n\n        // check encoding\n        require(x < q_mod, \"x axis isn't valid\");\n        require(y < q_mod, \"y axis isn't valid\");\n        // check on curve\n        uint256 lhs = mulmod(y, y, q_mod); // y^2\n\n        uint256 rhs = mulmod(x, x, q_mod); // x^2\n        rhs = mulmod(rhs, x, q_mod); // x^3\n        rhs = addmod(rhs, bn254_b_coeff, q_mod); // x^3 + b\n        require(lhs == rhs, \"is not on curve\");\n\n        return G1Point(x, y);\n    }\n\n    function new_g2(uint256[2] memory x, uint256[2] memory y) internal pure returns (G2Point memory) {\n        return G2Point(x, y);\n    }\n\n    function copy_g1(G1Point memory self) internal pure returns (G1Point memory result) {\n        result.X = self.X;\n        result.Y = self.Y;\n    }\n\n    function P2() internal pure returns (G2Point memory) {\n        // for some reason ethereum expects to have c1*v + c0 form\n\n        return\n            G2Point(\n                [\n                    0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,\n                    0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\n                ],\n                [\n                    0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,\n                    0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\n                ]\n            );\n    }\n\n    function negate(G1Point memory self) internal pure {\n        // The prime q in the base field F_q for G1\n        if (self.Y == 0) {\n            require(self.X == 0);\n            return;\n        }\n\n        self.Y = q_mod - self.Y;\n    }\n\n    function point_add(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) {\n        point_add_into_dest(p1, p2, r);\n        return r;\n    }\n\n    function point_add_assign(G1Point memory p1, G1Point memory p2) internal view {\n        point_add_into_dest(p1, p2, p1);\n    }\n\n    function point_add_into_dest(\n        G1Point memory p1,\n        G1Point memory p2,\n        G1Point memory dest\n    ) internal view {\n        if (p2.X == 0 && p2.Y == 0) {\n            // we add zero, nothing happens\n            dest.X = p1.X;\n            dest.Y = p1.Y;\n            return;\n        } else if (p1.X == 0 && p1.Y == 0) {\n            // we add into zero, and we add non-zero point\n            dest.X = p2.X;\n            dest.Y = p2.Y;\n            return;\n        } else {\n            uint256[4] memory input;\n\n            input[0] = p1.X;\n            input[1] = p1.Y;\n            input[2] = p2.X;\n            input[3] = p2.Y;\n\n            bool success;\n            assembly {\n                success := staticcall(gas(), 6, input, 0x80, dest, 0x40)\n            }\n            require(success);\n        }\n    }\n\n    function point_sub_assign(G1Point memory p1, G1Point memory p2) internal view {\n        point_sub_into_dest(p1, p2, p1);\n    }\n\n    function point_sub_into_dest(\n        G1Point memory p1,\n        G1Point memory p2,\n        G1Point memory dest\n    ) internal view {\n        if (p2.X == 0 && p2.Y == 0) {\n            // we subtracted zero, nothing happens\n            dest.X = p1.X;\n            dest.Y = p1.Y;\n            return;\n        } else if (p1.X == 0 && p1.Y == 0) {\n            // we subtract from zero, and we subtract non-zero point\n            dest.X = p2.X;\n            dest.Y = q_mod - p2.Y;\n            return;\n        } else {\n            uint256[4] memory input;\n\n            input[0] = p1.X;\n            input[1] = p1.Y;\n            input[2] = p2.X;\n            input[3] = q_mod - p2.Y;\n\n            bool success = false;\n            assembly {\n                success := staticcall(gas(), 6, input, 0x80, dest, 0x40)\n            }\n            require(success);\n        }\n    }\n\n    function point_mul(G1Point memory p, Fr memory s) internal view returns (G1Point memory r) {\n        // https://eips.ethereum.org/EIPS/eip-197\n        // Elliptic curve points are encoded as a Jacobian pair (X, Y) where the point at infinity is encoded as (0, 0)\n        // TODO\n        if (p.X == 0 && p.Y == 1) {\n            p.Y = 0;\n        }\n        point_mul_into_dest(p, s, r);\n        return r;\n    }\n\n    function point_mul_assign(G1Point memory p, Fr memory s) internal view {\n        point_mul_into_dest(p, s, p);\n    }\n\n    function point_mul_into_dest(\n        G1Point memory p,\n        Fr memory s,\n        G1Point memory dest\n    ) internal view {\n        uint256[3] memory input;\n        input[0] = p.X;\n        input[1] = p.Y;\n        input[2] = s.value;\n        bool success;\n        assembly {\n            success := staticcall(gas(), 7, input, 0x60, dest, 0x40)\n        }\n        require(success);\n    }\n\n    function pairing(G1Point[] memory p1, G2Point[] memory p2) internal view returns (bool) {\n        require(p1.length == p2.length);\n        uint256 elements = p1.length;\n        uint256 inputSize = elements * 6;\n        uint256[] memory input = new uint256[](inputSize);\n        for (uint256 i = 0; i < elements; ) {\n            input[i * 6 + 0] = p1[i].X;\n            input[i * 6 + 1] = p1[i].Y;\n            input[i * 6 + 2] = p2[i].X[0];\n            input[i * 6 + 3] = p2[i].X[1];\n            input[i * 6 + 4] = p2[i].Y[0];\n            input[i * 6 + 5] = p2[i].Y[1];\n            unchecked {\n                ++i;\n            }\n        }\n        uint256[1] memory out;\n        bool success;\n        assembly {\n            success := staticcall(gas(), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20)\n        }\n        require(success);\n        return out[0] != 0;\n    }\n\n    /// Convenience method for a pairing check for two pairs.\n    function pairingProd2(\n        G1Point memory a1,\n        G2Point memory a2,\n        G1Point memory b1,\n        G2Point memory b2\n    ) internal view returns (bool) {\n        G1Point[] memory p1 = new G1Point[](2);\n        G2Point[] memory p2 = new G2Point[](2);\n        p1[0] = a1;\n        p1[1] = b1;\n        p2[0] = a2;\n        p2[1] = b2;\n        return pairing(p1, p2);\n    }\n}\n"},"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PriorityQueue.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8.0;\n\n/// @notice The structure that contains meta information of the L2 transaction that was requested from L1\n/// @dev The weird size of fields was selected specifically to minimize the structure storage size\n/// @param canonicalTxHash Hashed L2 transaction data that is needed to process it\n/// @param expirationBlock Expiration block number (ETH block) for this request (must be satisfied before)\n/// @param layer2Tip Additional payment to the validator as an incentive to perform the operation\nstruct PriorityOperation {\n    bytes32 canonicalTxHash;\n    uint64 expirationBlock;\n    uint192 layer2Tip;\n}\n\n/// @author Matter Labs\n/// @dev The library provides the API to interact with the priority queue container\n/// @dev Order of processing operations from queue - FIFO (Fist in - first out)\nlibrary PriorityQueue {\n    using PriorityQueue for Queue;\n\n    /// @notice Container that stores priority operations\n    /// @param data The inner mapping that saves priority operation by its index\n    /// @param head The pointer to the last added priority operation\n    /// @param tail The pointer to the first unprocessed priority operation\n    struct Queue {\n        mapping(uint256 => PriorityOperation) data;\n        uint256 head;\n        uint256 tail;\n    }\n\n    /// @return Index of the oldest priority operation that wasn't processed yet\n    /// @notice Returns zero if and only if no operations were processed from the queue\n    function getFirstUnprocessedPriorityTx(Queue storage _queue) internal view returns (uint256) {\n        return _queue.tail;\n    }\n\n    /// @return The total number of priority operations that were added to the priority queue, including all processed ones\n    function getTotalPriorityTxs(Queue storage _queue) internal view returns (uint256) {\n        return _queue.head;\n    }\n\n    /// @return The total number of unprocessed priority operations in a priority queue\n    function getSize(Queue storage _queue) internal view returns (uint256) {\n        return uint256(_queue.head - _queue.tail);\n    }\n\n    /// @return Whether the priority queue contains no operations\n    function isEmpty(Queue storage _queue) internal view returns (bool) {\n        return _queue.head == _queue.tail;\n    }\n\n    /// @notice Add the priority operation to the end of the priority queue\n    function pushBack(Queue storage _queue, PriorityOperation memory _operation) internal {\n        // Save value into the stack to avoid double reading from the storage\n        uint256 head = _queue.head;\n\n        _queue.data[head] = _operation;\n        _queue.head = head + 1;\n    }\n\n    /// @return The first unprocessed priority operation from the queue\n    function front(Queue storage _queue) internal view returns (PriorityOperation memory) {\n        require(!_queue.isEmpty(), \"D\"); // priority queue is empty\n\n        return _queue.data[_queue.tail];\n    }\n\n    /// @notice Remove the first unprocessed priority operation from the queue\n    /// @return priorityOperation that was popped from the priority queue\n    function popFront(Queue storage _queue) internal returns (PriorityOperation memory priorityOperation) {\n        require(!_queue.isEmpty(), \"s\"); // priority queue is empty\n\n        // Save value into the stack to avoid double reading from the storage\n        uint256 tail = _queue.tail;\n\n        priorityOperation = _queue.data[tail];\n        delete _queue.data[tail];\n        _queue.tail = tail + 1;\n    }\n}\n"},"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/TranscriptLib.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8.0;\n\nimport \"./PairingsBn254.sol\";\n\nlibrary TranscriptLib {\n    // flip                    0xe000000000000000000000000000000000000000000000000000000000000000;\n    uint256 constant FR_MASK = 0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\n\n    uint32 constant DST_0 = 0;\n    uint32 constant DST_1 = 1;\n    uint32 constant DST_CHALLENGE = 2;\n\n    struct Transcript {\n        bytes32 state_0;\n        bytes32 state_1;\n        uint32 challenge_counter;\n    }\n\n    function new_transcript() internal pure returns (Transcript memory t) {\n        t.state_0 = bytes32(0);\n        t.state_1 = bytes32(0);\n        t.challenge_counter = 0;\n    }\n\n    function update_with_u256(Transcript memory self, uint256 value) internal pure {\n        bytes32 old_state_0 = self.state_0;\n        self.state_0 = keccak256(abi.encodePacked(DST_0, old_state_0, self.state_1, value));\n        self.state_1 = keccak256(abi.encodePacked(DST_1, old_state_0, self.state_1, value));\n    }\n\n    function update_with_fr(Transcript memory self, PairingsBn254.Fr memory value) internal pure {\n        update_with_u256(self, value.value);\n    }\n\n    function update_with_g1(Transcript memory self, PairingsBn254.G1Point memory p) internal pure {\n        update_with_u256(self, p.X);\n        update_with_u256(self, p.Y);\n    }\n\n    function get_challenge(Transcript memory self) internal pure returns (PairingsBn254.Fr memory challenge) {\n        bytes32 query = keccak256(abi.encodePacked(DST_CHALLENGE, self.state_0, self.state_1, self.challenge_counter));\n        self.challenge_counter += 1;\n        challenge = PairingsBn254.Fr({value: uint256(query) & FR_MASK});\n    }\n}\n"},"@matterlabs/zksync-contracts/l1/contracts/zksync/Plonk4VerifierWithAccessToDNext.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8.0;\n\nimport \"./libraries/PairingsBn254.sol\";\nimport \"./libraries/TranscriptLib.sol\";\nimport \"../common/libraries/UncheckedMath.sol\";\n\nuint256 constant STATE_WIDTH = 4;\nuint256 constant NUM_G2_ELS = 2;\n\nstruct VerificationKey {\n    uint256 domain_size;\n    uint256 num_inputs;\n    PairingsBn254.Fr omega;\n    PairingsBn254.G1Point[2] gate_selectors_commitments;\n    PairingsBn254.G1Point[7] gate_setup_commitments;\n    PairingsBn254.G1Point[STATE_WIDTH] permutation_commitments;\n    PairingsBn254.G1Point lookup_selector_commitment;\n    PairingsBn254.G1Point[4] lookup_tables_commitments;\n    PairingsBn254.G1Point lookup_table_type_commitment;\n    PairingsBn254.Fr[STATE_WIDTH - 1] non_residues;\n    PairingsBn254.G2Point[NUM_G2_ELS] g2_elements;\n}\n\ncontract Plonk4VerifierWithAccessToDNext {\n    using PairingsBn254 for PairingsBn254.G1Point;\n    using PairingsBn254 for PairingsBn254.G2Point;\n    using PairingsBn254 for PairingsBn254.Fr;\n\n    using TranscriptLib for TranscriptLib.Transcript;\n\n    using UncheckedMath for uint256;\n\n    struct Proof {\n        uint256[] input_values;\n        // commitments\n        PairingsBn254.G1Point[STATE_WIDTH] state_polys_commitments;\n        PairingsBn254.G1Point copy_permutation_grand_product_commitment;\n        PairingsBn254.G1Point[STATE_WIDTH] quotient_poly_parts_commitments;\n        // openings\n        PairingsBn254.Fr[STATE_WIDTH] state_polys_openings_at_z;\n        PairingsBn254.Fr[1] state_polys_openings_at_z_omega; // TODO: not use array while there is only D_next\n        PairingsBn254.Fr[1] gate_selectors_openings_at_z;\n        PairingsBn254.Fr[STATE_WIDTH - 1] copy_permutation_polys_openings_at_z;\n        PairingsBn254.Fr copy_permutation_grand_product_opening_at_z_omega;\n        PairingsBn254.Fr quotient_poly_opening_at_z;\n        PairingsBn254.Fr linearization_poly_opening_at_z;\n        // lookup commitments\n        PairingsBn254.G1Point lookup_s_poly_commitment;\n        PairingsBn254.G1Point lookup_grand_product_commitment;\n        // lookup openings\n        PairingsBn254.Fr lookup_s_poly_opening_at_z_omega;\n        PairingsBn254.Fr lookup_grand_product_opening_at_z_omega;\n        PairingsBn254.Fr lookup_t_poly_opening_at_z;\n        PairingsBn254.Fr lookup_t_poly_opening_at_z_omega;\n        PairingsBn254.Fr lookup_selector_poly_opening_at_z;\n        PairingsBn254.Fr lookup_table_type_poly_opening_at_z;\n        PairingsBn254.G1Point opening_proof_at_z;\n        PairingsBn254.G1Point opening_proof_at_z_omega;\n    }\n\n    struct PartialVerifierState {\n        PairingsBn254.Fr zero;\n        PairingsBn254.Fr alpha;\n        PairingsBn254.Fr beta;\n        PairingsBn254.Fr gamma;\n        PairingsBn254.Fr[9] alpha_values;\n        PairingsBn254.Fr eta;\n        PairingsBn254.Fr beta_lookup;\n        PairingsBn254.Fr gamma_lookup;\n        PairingsBn254.Fr beta_plus_one;\n        PairingsBn254.Fr beta_gamma;\n        PairingsBn254.Fr v;\n        PairingsBn254.Fr u;\n        PairingsBn254.Fr z;\n        PairingsBn254.Fr z_omega;\n        PairingsBn254.Fr z_minus_last_omega;\n        PairingsBn254.Fr l_0_at_z;\n        PairingsBn254.Fr l_n_minus_one_at_z;\n        PairingsBn254.Fr t;\n        PairingsBn254.G1Point tp;\n    }\n\n    function evaluate_l0_at_point(uint256 domain_size, PairingsBn254.Fr memory at)\n        internal\n        view\n        returns (PairingsBn254.Fr memory num)\n    {\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\n\n        PairingsBn254.Fr memory size_fe = PairingsBn254.new_fr(domain_size);\n        PairingsBn254.Fr memory den = at.copy();\n        den.sub_assign(one);\n        den.mul_assign(size_fe);\n\n        den = den.inverse();\n\n        num = at.pow(domain_size);\n        num.sub_assign(one);\n        num.mul_assign(den);\n    }\n\n    function evaluate_lagrange_poly_out_of_domain(\n        uint256 poly_num,\n        uint256 domain_size,\n        PairingsBn254.Fr memory omega,\n        PairingsBn254.Fr memory at\n    ) internal view returns (PairingsBn254.Fr memory res) {\n        // (omega^i / N) / (X - omega^i) * (X^N - 1)\n        require(poly_num < domain_size);\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\n        PairingsBn254.Fr memory omega_power = omega.pow(poly_num);\n        res = at.pow(domain_size);\n        res.sub_assign(one);\n        require(res.value != 0); // Vanishing polynomial can not be zero at point `at`\n        res.mul_assign(omega_power);\n\n        PairingsBn254.Fr memory den = PairingsBn254.copy(at);\n        den.sub_assign(omega_power);\n        den.mul_assign(PairingsBn254.new_fr(domain_size));\n\n        den = den.inverse();\n\n        res.mul_assign(den);\n    }\n\n    function evaluate_vanishing(uint256 domain_size, PairingsBn254.Fr memory at)\n        internal\n        view\n        returns (PairingsBn254.Fr memory res)\n    {\n        res = at.pow(domain_size);\n        res.sub_assign(PairingsBn254.new_fr(1));\n    }\n\n    function initialize_transcript(Proof memory proof, VerificationKey memory vk)\n        internal\n        pure\n        returns (PartialVerifierState memory state)\n    {\n        TranscriptLib.Transcript memory transcript = TranscriptLib.new_transcript();\n\n        for (uint256 i = 0; i < vk.num_inputs; i = i.uncheckedInc()) {\n            transcript.update_with_u256(proof.input_values[i]);\n        }\n\n        for (uint256 i = 0; i < STATE_WIDTH; i = i.uncheckedInc()) {\n            transcript.update_with_g1(proof.state_polys_commitments[i]);\n        }\n\n        state.eta = transcript.get_challenge();\n        transcript.update_with_g1(proof.lookup_s_poly_commitment);\n\n        state.beta = transcript.get_challenge();\n        state.gamma = transcript.get_challenge();\n\n        transcript.update_with_g1(proof.copy_permutation_grand_product_commitment);\n        state.beta_lookup = transcript.get_challenge();\n        state.gamma_lookup = transcript.get_challenge();\n        transcript.update_with_g1(proof.lookup_grand_product_commitment);\n        state.alpha = transcript.get_challenge();\n\n        for (uint256 i = 0; i < proof.quotient_poly_parts_commitments.length; i = i.uncheckedInc()) {\n            transcript.update_with_g1(proof.quotient_poly_parts_commitments[i]);\n        }\n        state.z = transcript.get_challenge();\n\n        transcript.update_with_fr(proof.quotient_poly_opening_at_z);\n\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z.length; i = i.uncheckedInc()) {\n            transcript.update_with_fr(proof.state_polys_openings_at_z[i]);\n        }\n\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z_omega.length; i = i.uncheckedInc()) {\n            transcript.update_with_fr(proof.state_polys_openings_at_z_omega[i]);\n        }\n        for (uint256 i = 0; i < proof.gate_selectors_openings_at_z.length; i = i.uncheckedInc()) {\n            transcript.update_with_fr(proof.gate_selectors_openings_at_z[i]);\n        }\n        for (uint256 i = 0; i < proof.copy_permutation_polys_openings_at_z.length; i = i.uncheckedInc()) {\n            transcript.update_with_fr(proof.copy_permutation_polys_openings_at_z[i]);\n        }\n\n        state.z_omega = state.z.copy();\n        state.z_omega.mul_assign(vk.omega);\n\n        transcript.update_with_fr(proof.copy_permutation_grand_product_opening_at_z_omega);\n\n        transcript.update_with_fr(proof.lookup_t_poly_opening_at_z);\n        transcript.update_with_fr(proof.lookup_selector_poly_opening_at_z);\n        transcript.update_with_fr(proof.lookup_table_type_poly_opening_at_z);\n        transcript.update_with_fr(proof.lookup_s_poly_opening_at_z_omega);\n        transcript.update_with_fr(proof.lookup_grand_product_opening_at_z_omega);\n        transcript.update_with_fr(proof.lookup_t_poly_opening_at_z_omega);\n        transcript.update_with_fr(proof.linearization_poly_opening_at_z);\n\n        state.v = transcript.get_challenge();\n\n        transcript.update_with_g1(proof.opening_proof_at_z);\n        transcript.update_with_g1(proof.opening_proof_at_z_omega);\n\n        state.u = transcript.get_challenge();\n    }\n\n    // compute some powers of challenge alpha([alpha^1, .. alpha^8])\n    function compute_powers_of_alpha(PartialVerifierState memory state) public pure {\n        require(state.alpha.value != 0);\n        state.alpha_values[0] = PairingsBn254.new_fr(1);\n        state.alpha_values[1] = state.alpha.copy();\n        PairingsBn254.Fr memory current_alpha = state.alpha.copy();\n        for (uint256 i = 2; i < state.alpha_values.length; i = i.uncheckedInc()) {\n            current_alpha.mul_assign(state.alpha);\n            state.alpha_values[i] = current_alpha.copy();\n        }\n    }\n\n    function verify(Proof memory proof, VerificationKey memory vk) internal view returns (bool) {\n        // we initialize all challenges beforehand, we can draw each challenge in its own place\n        PartialVerifierState memory state = initialize_transcript(proof, vk);\n        if (verify_quotient_evaluation(vk, proof, state) == false) {\n            return false;\n        }\n        require(proof.state_polys_openings_at_z_omega.length == 1); // TODO\n\n        PairingsBn254.G1Point memory quotient_result = proof.quotient_poly_parts_commitments[0].copy_g1();\n        {\n            // block scope\n            PairingsBn254.Fr memory z_in_domain_size = state.z.pow(vk.domain_size);\n            PairingsBn254.Fr memory current_z = z_in_domain_size.copy();\n            PairingsBn254.G1Point memory tp;\n            // start from i =1\n            for (uint256 i = 1; i < proof.quotient_poly_parts_commitments.length; i = i.uncheckedInc()) {\n                tp = proof.quotient_poly_parts_commitments[i].copy_g1();\n                tp.point_mul_assign(current_z);\n                quotient_result.point_add_assign(tp);\n\n                current_z.mul_assign(z_in_domain_size);\n            }\n        }\n\n        Queries memory queries = prepare_queries(vk, proof, state);\n        queries.commitments_at_z[0] = quotient_result;\n        queries.values_at_z[0] = proof.quotient_poly_opening_at_z;\n        queries.commitments_at_z[1] = aggregated_linearization_commitment(vk, proof, state);\n        queries.values_at_z[1] = proof.linearization_poly_opening_at_z;\n\n        require(queries.commitments_at_z.length == queries.values_at_z.length);\n\n        PairingsBn254.G1Point memory aggregated_commitment_at_z = queries.commitments_at_z[0];\n\n        PairingsBn254.Fr memory aggregated_opening_at_z = queries.values_at_z[0];\n        PairingsBn254.Fr memory aggregation_challenge = PairingsBn254.new_fr(1);\n        PairingsBn254.G1Point memory scaled;\n        for (uint256 i = 1; i < queries.commitments_at_z.length; i = i.uncheckedInc()) {\n            aggregation_challenge.mul_assign(state.v);\n            scaled = queries.commitments_at_z[i].point_mul(aggregation_challenge);\n            aggregated_commitment_at_z.point_add_assign(scaled);\n\n            state.t = queries.values_at_z[i];\n            state.t.mul_assign(aggregation_challenge);\n            aggregated_opening_at_z.add_assign(state.t);\n        }\n\n        aggregation_challenge.mul_assign(state.v);\n\n        PairingsBn254.G1Point memory aggregated_commitment_at_z_omega = queries.commitments_at_z_omega[0].point_mul(\n            aggregation_challenge\n        );\n        PairingsBn254.Fr memory aggregated_opening_at_z_omega = queries.values_at_z_omega[0];\n        aggregated_opening_at_z_omega.mul_assign(aggregation_challenge);\n        for (uint256 i = 1; i < queries.commitments_at_z_omega.length; i = i.uncheckedInc()) {\n            aggregation_challenge.mul_assign(state.v);\n\n            scaled = queries.commitments_at_z_omega[i].point_mul(aggregation_challenge);\n            aggregated_commitment_at_z_omega.point_add_assign(scaled);\n\n            state.t = queries.values_at_z_omega[i];\n            state.t.mul_assign(aggregation_challenge);\n            aggregated_opening_at_z_omega.add_assign(state.t);\n        }\n\n        return\n            final_pairing(\n                vk.g2_elements,\n                proof,\n                state,\n                aggregated_commitment_at_z,\n                aggregated_commitment_at_z_omega,\n                aggregated_opening_at_z,\n                aggregated_opening_at_z_omega\n            );\n    }\n\n    function verify_quotient_evaluation(\n        VerificationKey memory vk,\n        Proof memory proof,\n        PartialVerifierState memory state\n    ) internal view returns (bool) {\n        uint256[] memory lagrange_poly_numbers = new uint256[](vk.num_inputs);\n        for (uint256 i = 0; i < lagrange_poly_numbers.length; i = i.uncheckedInc()) {\n            lagrange_poly_numbers[i] = i;\n        }\n        // require(vk.num_inputs > 0); // TODO\n\n        PairingsBn254.Fr memory inputs_term = PairingsBn254.new_fr(0);\n        for (uint256 i = 0; i < vk.num_inputs; i = i.uncheckedInc()) {\n            // TODO we may use batched lagrange compputation\n            state.t = evaluate_lagrange_poly_out_of_domain(i, vk.domain_size, vk.omega, state.z);\n            state.t.mul_assign(PairingsBn254.new_fr(proof.input_values[i]));\n            inputs_term.add_assign(state.t);\n        }\n        inputs_term.mul_assign(proof.gate_selectors_openings_at_z[0]);\n        PairingsBn254.Fr memory result = proof.linearization_poly_opening_at_z.copy();\n        result.add_assign(inputs_term);\n\n        // compute powers of alpha\n        compute_powers_of_alpha(state);\n        PairingsBn254.Fr memory factor = state.alpha_values[4].copy();\n        factor.mul_assign(proof.copy_permutation_grand_product_opening_at_z_omega);\n\n        // - alpha_0 * (a + perm(z) * beta + gamma)*()*(d + gamma) * z(z*omega)\n        require(proof.copy_permutation_polys_openings_at_z.length == STATE_WIDTH - 1);\n        PairingsBn254.Fr memory t; // TMP;\n        for (uint256 i = 0; i < proof.copy_permutation_polys_openings_at_z.length; i = i.uncheckedInc()) {\n            t = proof.copy_permutation_polys_openings_at_z[i].copy();\n            t.mul_assign(state.beta);\n            t.add_assign(proof.state_polys_openings_at_z[i]);\n            t.add_assign(state.gamma);\n\n            factor.mul_assign(t);\n        }\n\n        t = proof.state_polys_openings_at_z[3].copy();\n        t.add_assign(state.gamma);\n        factor.mul_assign(t);\n        result.sub_assign(factor);\n\n        // - L_0(z) * alpha_1\n        PairingsBn254.Fr memory l_0_at_z = evaluate_l0_at_point(vk.domain_size, state.z);\n        l_0_at_z.mul_assign(state.alpha_values[4 + 1]);\n        result.sub_assign(l_0_at_z);\n\n        PairingsBn254.Fr memory lookup_quotient_contrib = lookup_quotient_contribution(vk, proof, state);\n        result.add_assign(lookup_quotient_contrib);\n\n        PairingsBn254.Fr memory lhs = proof.quotient_poly_opening_at_z.copy();\n        lhs.mul_assign(evaluate_vanishing(vk.domain_size, state.z));\n        return lhs.value == result.value;\n    }\n\n    function lookup_quotient_contribution(\n        VerificationKey memory vk,\n        Proof memory proof,\n        PartialVerifierState memory state\n    ) internal view returns (PairingsBn254.Fr memory result) {\n        PairingsBn254.Fr memory t;\n\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\n        state.beta_plus_one = state.beta_lookup.copy();\n        state.beta_plus_one.add_assign(one);\n        state.beta_gamma = state.beta_plus_one.copy();\n        state.beta_gamma.mul_assign(state.gamma_lookup);\n\n        // (s'*beta + gamma)*(zw')*alpha\n        t = proof.lookup_s_poly_opening_at_z_omega.copy();\n        t.mul_assign(state.beta_lookup);\n        t.add_assign(state.beta_gamma);\n        t.mul_assign(proof.lookup_grand_product_opening_at_z_omega);\n        t.mul_assign(state.alpha_values[6]);\n\n        // (z - omega^{n-1}) for this part\n        PairingsBn254.Fr memory last_omega = vk.omega.pow(vk.domain_size - 1);\n        state.z_minus_last_omega = state.z.copy();\n        state.z_minus_last_omega.sub_assign(last_omega);\n        t.mul_assign(state.z_minus_last_omega);\n        result.add_assign(t);\n\n        // - alpha_1 * L_{0}(z)\n        state.l_0_at_z = evaluate_lagrange_poly_out_of_domain(0, vk.domain_size, vk.omega, state.z);\n        t = state.l_0_at_z.copy();\n        t.mul_assign(state.alpha_values[6 + 1]);\n        result.sub_assign(t);\n\n        // - alpha_2 * beta_gamma_powered L_{n-1}(z)\n        PairingsBn254.Fr memory beta_gamma_powered = state.beta_gamma.pow(vk.domain_size - 1);\n        state.l_n_minus_one_at_z = evaluate_lagrange_poly_out_of_domain(\n            vk.domain_size - 1,\n            vk.domain_size,\n            vk.omega,\n            state.z\n        );\n        t = state.l_n_minus_one_at_z.copy();\n        t.mul_assign(beta_gamma_powered);\n        t.mul_assign(state.alpha_values[6 + 2]);\n\n        result.sub_assign(t);\n    }\n\n    function aggregated_linearization_commitment(\n        VerificationKey memory vk,\n        Proof memory proof,\n        PartialVerifierState memory state\n    ) internal view returns (PairingsBn254.G1Point memory result) {\n        // qMain*(Q_a * A + Q_b * B + Q_c * C + Q_d * D + Q_m * A*B + Q_const + Q_dNext * D_next)\n        result = PairingsBn254.new_g1(0, 0);\n        // Q_a * A\n        PairingsBn254.G1Point memory scaled = vk.gate_setup_commitments[0].point_mul(\n            proof.state_polys_openings_at_z[0]\n        );\n        result.point_add_assign(scaled);\n        // Q_b * B\n        scaled = vk.gate_setup_commitments[1].point_mul(proof.state_polys_openings_at_z[1]);\n        result.point_add_assign(scaled);\n        // Q_c * C\n        scaled = vk.gate_setup_commitments[2].point_mul(proof.state_polys_openings_at_z[2]);\n        result.point_add_assign(scaled);\n        // Q_d * D\n        scaled = vk.gate_setup_commitments[3].point_mul(proof.state_polys_openings_at_z[3]);\n        result.point_add_assign(scaled);\n        // Q_m* A*B or Q_ab*A*B\n        PairingsBn254.Fr memory t = proof.state_polys_openings_at_z[0].copy();\n        t.mul_assign(proof.state_polys_openings_at_z[1]);\n        scaled = vk.gate_setup_commitments[4].point_mul(t);\n        result.point_add_assign(scaled);\n        // Q_const\n        result.point_add_assign(vk.gate_setup_commitments[5]);\n        // Q_dNext * D_next\n        scaled = vk.gate_setup_commitments[6].point_mul(proof.state_polys_openings_at_z_omega[0]);\n        result.point_add_assign(scaled);\n        result.point_mul_assign(proof.gate_selectors_openings_at_z[0]);\n\n        PairingsBn254.G1Point\n            memory rescue_custom_gate_linearization_contrib = rescue_custom_gate_linearization_contribution(\n                vk,\n                proof,\n                state\n            );\n        result.point_add_assign(rescue_custom_gate_linearization_contrib);\n        require(vk.non_residues.length == STATE_WIDTH - 1);\n\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\n        PairingsBn254.Fr memory factor = state.alpha_values[4].copy();\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z.length; ) {\n            t = state.z.copy();\n            if (i == 0) {\n                t.mul_assign(one);\n            } else {\n                t.mul_assign(vk.non_residues[i - 1]); // TODO add one into non-residues during codegen?\n            }\n            t.mul_assign(state.beta);\n            t.add_assign(state.gamma);\n            t.add_assign(proof.state_polys_openings_at_z[i]);\n\n            factor.mul_assign(t);\n            unchecked {\n                ++i;\n            }\n        }\n\n        scaled = proof.copy_permutation_grand_product_commitment.point_mul(factor);\n        result.point_add_assign(scaled);\n\n        // - (a(z) + beta*perm_a + gamma)*()*()*z(z*omega) * beta * perm_d(X)\n        factor = state.alpha_values[4].copy();\n        factor.mul_assign(state.beta);\n        factor.mul_assign(proof.copy_permutation_grand_product_opening_at_z_omega);\n        for (uint256 i = 0; i < STATE_WIDTH - 1; i = i.uncheckedInc()) {\n            t = proof.copy_permutation_polys_openings_at_z[i].copy();\n            t.mul_assign(state.beta);\n            t.add_assign(state.gamma);\n            t.add_assign(proof.state_polys_openings_at_z[i]);\n\n            factor.mul_assign(t);\n        }\n        scaled = vk.permutation_commitments[3].point_mul(factor);\n        result.point_sub_assign(scaled);\n\n        // + L_0(z) * Z(x)\n        // TODO\n        state.l_0_at_z = evaluate_lagrange_poly_out_of_domain(0, vk.domain_size, vk.omega, state.z);\n        require(state.l_0_at_z.value != 0);\n        factor = state.l_0_at_z.copy();\n        factor.mul_assign(state.alpha_values[4 + 1]);\n        scaled = proof.copy_permutation_grand_product_commitment.point_mul(factor);\n        result.point_add_assign(scaled);\n\n        PairingsBn254.G1Point memory lookup_linearization_contrib = lookup_linearization_contribution(proof, state);\n        result.point_add_assign(lookup_linearization_contrib);\n    }\n\n    function rescue_custom_gate_linearization_contribution(\n        VerificationKey memory vk,\n        Proof memory proof,\n        PartialVerifierState memory state\n    ) public view returns (PairingsBn254.G1Point memory result) {\n        PairingsBn254.Fr memory t;\n        PairingsBn254.Fr memory intermediate_result;\n\n        // a^2 - b = 0\n        t = proof.state_polys_openings_at_z[0].copy();\n        t.mul_assign(t);\n        t.sub_assign(proof.state_polys_openings_at_z[1]);\n        // t.mul_assign(challenge1);\n        t.mul_assign(state.alpha_values[1]);\n        intermediate_result.add_assign(t);\n\n        // b^2 - c = 0\n        t = proof.state_polys_openings_at_z[1].copy();\n        t.mul_assign(t);\n        t.sub_assign(proof.state_polys_openings_at_z[2]);\n        t.mul_assign(state.alpha_values[1 + 1]);\n        intermediate_result.add_assign(t);\n\n        // c*a - d = 0;\n        t = proof.state_polys_openings_at_z[2].copy();\n        t.mul_assign(proof.state_polys_openings_at_z[0]);\n        t.sub_assign(proof.state_polys_openings_at_z[3]);\n        t.mul_assign(state.alpha_values[1 + 2]);\n        intermediate_result.add_assign(t);\n\n        result = vk.gate_selectors_commitments[1].point_mul(intermediate_result);\n    }\n\n    function lookup_linearization_contribution(Proof memory proof, PartialVerifierState memory state)\n        internal\n        view\n        returns (PairingsBn254.G1Point memory result)\n    {\n        PairingsBn254.Fr memory zero = PairingsBn254.new_fr(0);\n\n        PairingsBn254.Fr memory t;\n        PairingsBn254.Fr memory factor;\n        // s(x) from the Z(x*omega)*(\\gamma*(1 + \\beta) + s(x) + \\beta * s(x*omega)))\n        factor = proof.lookup_grand_product_opening_at_z_omega.copy();\n        factor.mul_assign(state.alpha_values[6]);\n        factor.mul_assign(state.z_minus_last_omega);\n\n        PairingsBn254.G1Point memory scaled = proof.lookup_s_poly_commitment.point_mul(factor);\n        result.point_add_assign(scaled);\n\n        // Z(x) from - alpha_0 * Z(x) * (\\beta + 1) * (\\gamma + f(x)) * (\\gamma(1 + \\beta) + t(x) + \\beta * t(x*omega))\n        // + alpha_1 * Z(x) * L_{0}(z) + alpha_2 * Z(x) * L_{n-1}(z)\n\n        // accumulate coefficient\n        factor = proof.lookup_t_poly_opening_at_z_omega.copy();\n        factor.mul_assign(state.beta_lookup);\n        factor.add_assign(proof.lookup_t_poly_opening_at_z);\n        factor.add_assign(state.beta_gamma);\n\n        // (\\gamma + f(x))\n        PairingsBn254.Fr memory f_reconstructed;\n        PairingsBn254.Fr memory current = PairingsBn254.new_fr(1);\n        PairingsBn254.Fr memory tmp0;\n        for (uint256 i = 0; i < STATE_WIDTH - 1; i = i.uncheckedInc()) {\n            tmp0 = proof.state_polys_openings_at_z[i].copy();\n            tmp0.mul_assign(current);\n            f_reconstructed.add_assign(tmp0);\n\n            current.mul_assign(state.eta);\n        }\n\n        // add type of table\n        t = proof.lookup_table_type_poly_opening_at_z.copy();\n        t.mul_assign(current);\n        f_reconstructed.add_assign(t);\n\n        f_reconstructed.mul_assign(proof.lookup_selector_poly_opening_at_z);\n        f_reconstructed.add_assign(state.gamma_lookup);\n\n        // end of (\\gamma + f(x)) part\n        factor.mul_assign(f_reconstructed);\n        factor.mul_assign(state.beta_plus_one);\n        t = zero.copy();\n        t.sub_assign(factor);\n        factor = t;\n        factor.mul_assign(state.alpha_values[6]);\n\n        // Multiply by (z - omega^{n-1})\n        factor.mul_assign(state.z_minus_last_omega);\n\n        // L_{0}(z) in front of Z(x)\n        t = state.l_0_at_z.copy();\n        t.mul_assign(state.alpha_values[6 + 1]);\n        factor.add_assign(t);\n\n        // L_{n-1}(z) in front of Z(x)\n        t = state.l_n_minus_one_at_z.copy();\n        t.mul_assign(state.alpha_values[6 + 2]);\n        factor.add_assign(t);\n\n        scaled = proof.lookup_grand_product_commitment.point_mul(factor);\n        result.point_add_assign(scaled);\n    }\n\n    struct Queries {\n        PairingsBn254.G1Point[13] commitments_at_z;\n        PairingsBn254.Fr[13] values_at_z;\n        PairingsBn254.G1Point[6] commitments_at_z_omega;\n        PairingsBn254.Fr[6] values_at_z_omega;\n    }\n\n    function prepare_queries(\n        VerificationKey memory vk,\n        Proof memory proof,\n        PartialVerifierState memory state\n    ) public view returns (Queries memory queries) {\n        // we set first two items in calee side so start idx from 2\n        uint256 idx = 2;\n        for (uint256 i = 0; i < STATE_WIDTH; i = i.uncheckedInc()) {\n            queries.commitments_at_z[idx] = proof.state_polys_commitments[i];\n            queries.values_at_z[idx] = proof.state_polys_openings_at_z[i];\n            idx = idx.uncheckedInc();\n        }\n        require(proof.gate_selectors_openings_at_z.length == 1);\n        queries.commitments_at_z[idx] = vk.gate_selectors_commitments[0];\n        queries.values_at_z[idx] = proof.gate_selectors_openings_at_z[0];\n        idx = idx.uncheckedInc();\n        for (uint256 i = 0; i < STATE_WIDTH - 1; i = i.uncheckedInc()) {\n            queries.commitments_at_z[idx] = vk.permutation_commitments[i];\n            queries.values_at_z[idx] = proof.copy_permutation_polys_openings_at_z[i];\n            idx = idx.uncheckedInc();\n        }\n\n        queries.commitments_at_z_omega[0] = proof.copy_permutation_grand_product_commitment;\n        queries.commitments_at_z_omega[1] = proof.state_polys_commitments[STATE_WIDTH - 1];\n\n        queries.values_at_z_omega[0] = proof.copy_permutation_grand_product_opening_at_z_omega;\n        queries.values_at_z_omega[1] = proof.state_polys_openings_at_z_omega[0];\n\n        PairingsBn254.G1Point memory lookup_t_poly_commitment_aggregated = vk.lookup_tables_commitments[0];\n        PairingsBn254.Fr memory current_eta = state.eta.copy();\n        for (uint256 i = 1; i < vk.lookup_tables_commitments.length; i = i.uncheckedInc()) {\n            state.tp = vk.lookup_tables_commitments[i].point_mul(current_eta);\n            lookup_t_poly_commitment_aggregated.point_add_assign(state.tp);\n\n            current_eta.mul_assign(state.eta);\n        }\n        queries.commitments_at_z[idx] = lookup_t_poly_commitment_aggregated;\n        queries.values_at_z[idx] = proof.lookup_t_poly_opening_at_z;\n        idx = idx.uncheckedInc();\n        queries.commitments_at_z[idx] = vk.lookup_selector_commitment;\n        queries.values_at_z[idx] = proof.lookup_selector_poly_opening_at_z;\n        idx = idx.uncheckedInc();\n        queries.commitments_at_z[idx] = vk.lookup_table_type_commitment;\n        queries.values_at_z[idx] = proof.lookup_table_type_poly_opening_at_z;\n        queries.commitments_at_z_omega[2] = proof.lookup_s_poly_commitment;\n        queries.values_at_z_omega[2] = proof.lookup_s_poly_opening_at_z_omega;\n        queries.commitments_at_z_omega[3] = proof.lookup_grand_product_commitment;\n        queries.values_at_z_omega[3] = proof.lookup_grand_product_opening_at_z_omega;\n        queries.commitments_at_z_omega[4] = lookup_t_poly_commitment_aggregated;\n        queries.values_at_z_omega[4] = proof.lookup_t_poly_opening_at_z_omega;\n    }\n\n    function final_pairing(\n        // VerificationKey memory vk,\n        PairingsBn254.G2Point[NUM_G2_ELS] memory g2_elements,\n        Proof memory proof,\n        PartialVerifierState memory state,\n        PairingsBn254.G1Point memory aggregated_commitment_at_z,\n        PairingsBn254.G1Point memory aggregated_commitment_at_z_omega,\n        PairingsBn254.Fr memory aggregated_opening_at_z,\n        PairingsBn254.Fr memory aggregated_opening_at_z_omega\n    ) internal view returns (bool) {\n        // q(x) = f(x) - f(z) / (x - z)\n        // q(x) * (x-z)  = f(x) - f(z)\n\n        // f(x)\n        PairingsBn254.G1Point memory pair_with_generator = aggregated_commitment_at_z.copy_g1();\n        aggregated_commitment_at_z_omega.point_mul_assign(state.u);\n        pair_with_generator.point_add_assign(aggregated_commitment_at_z_omega);\n\n        // - f(z)*g\n        PairingsBn254.Fr memory aggregated_value = aggregated_opening_at_z_omega.copy();\n        aggregated_value.mul_assign(state.u);\n        aggregated_value.add_assign(aggregated_opening_at_z);\n        PairingsBn254.G1Point memory tp = PairingsBn254.P1().point_mul(aggregated_value);\n        pair_with_generator.point_sub_assign(tp);\n\n        // +z * q(x)\n        tp = proof.opening_proof_at_z.point_mul(state.z);\n        PairingsBn254.Fr memory t = state.z_omega.copy();\n        t.mul_assign(state.u);\n        PairingsBn254.G1Point memory t1 = proof.opening_proof_at_z_omega.point_mul(t);\n        tp.point_add_assign(t1);\n        pair_with_generator.point_add_assign(tp);\n\n        // rhs\n        PairingsBn254.G1Point memory pair_with_x = proof.opening_proof_at_z_omega.point_mul(state.u);\n        pair_with_x.point_add_assign(proof.opening_proof_at_z);\n        pair_with_x.negate();\n        // Pairing precompile expects points to be in a `i*x[1] + x[0]` form instead of `x[0] + i*x[1]`\n        // so we handle it in code generation step\n        PairingsBn254.G2Point memory first_g2 = g2_elements[0];\n        PairingsBn254.G2Point memory second_g2 = g2_elements[1];\n        PairingsBn254.G2Point memory gen2 = PairingsBn254.P2();\n\n        return PairingsBn254.pairingProd2(pair_with_generator, first_g2, pair_with_x, second_g2);\n    }\n}\n"},"@matterlabs/zksync-contracts/l1/contracts/zksync/Storage.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8.0;\n\nimport \"./Verifier.sol\";\nimport \"../common/interfaces/IAllowList.sol\";\nimport \"./libraries/PriorityQueue.sol\";\n\n/// @dev Logically separated part of the storage structure, which is responsible for everything related to proxy upgrades and diamond cuts\n/// @param proposedDiamondCutHash The hash of diamond cut that was proposed in the current upgrade\n/// @param proposedDiamondCutTimestamp The timestamp when the diamond cut was proposed, zero if there are no active proposals\n/// @param lastDiamondFreezeTimestamp The timestamp when the diamond was frozen last time, zero if the diamond was never frozen\n/// @param currentProposalId The serial number of proposed diamond cuts, increments when proposing a new diamond cut\n/// @param securityCouncilMembers The set of the trusted addresses that can instantly finish upgrade (diamond cut)\n/// @param securityCouncilMemberLastApprovedProposalId The mapping of the security council addresses and the last diamond cut that they approved\n/// @param securityCouncilEmergencyApprovals The number of received upgrade approvals from the security council\nstruct DiamondCutStorage {\n    bytes32 proposedDiamondCutHash;\n    uint256 proposedDiamondCutTimestamp;\n    uint256 lastDiamondFreezeTimestamp;\n    uint256 currentProposalId;\n    mapping(address => bool) securityCouncilMembers;\n    mapping(address => uint256) securityCouncilMemberLastApprovedProposalId;\n    uint256 securityCouncilEmergencyApprovals;\n}\n\n/// @dev The log passed from L2\n/// @param l2ShardId The shard identifier, 0 - rollup, 1 - porter. All other values are not used but are reserved for the future\n/// @param isService A boolean flag that is part of the log along with `key`, `value`, and `sender` address.\n/// This field is required formally but does not have any special meaning.\n/// @param txNumberInBlock The L2 transaction number in a block, in which the log was sent\n/// @param sender The L2 address which sent the log\n/// @param key The 32 bytes of information that was sent in the log\n/// @param value The 32 bytes of information that was sent in the log\n// Both `key` and `value` are arbitrary 32-bytes selected by the log sender\nstruct L2Log {\n    uint8 l2ShardId;\n    bool isService;\n    uint16 txNumberInBlock;\n    address sender;\n    bytes32 key;\n    bytes32 value;\n}\n\n/// @dev An arbitrary length message passed from L2\n/// @notice Under the hood it is `L2Log` sent from the special system L2 contract\n/// @param txNumberInBlock The L2 transaction number in a block, in which the message was sent\n/// @param sender The address of the L2 account from which the message was passed\n/// @param data An arbitrary length message\nstruct L2Message {\n    uint16 txNumberInBlock;\n    address sender;\n    bytes data;\n}\n\n/// @notice Part of the configuration parameters of ZKP circuits\nstruct VerifierParams {\n    bytes32 recursionNodeLevelVkHash;\n    bytes32 recursionLeafLevelVkHash;\n    bytes32 recursionCircuitsSetVksHash;\n}\n\n/// @dev storing all storage variables for zkSync facets\n/// NOTE: It is used in a proxy, so it is possible to add new variables to the end\n/// NOTE: but NOT to modify already existing variables or change their order\nstruct AppStorage {\n    /// @dev Storage of variables needed for diamond cut facet\n    DiamondCutStorage diamondCutStorage;\n    /// @notice Address which will exercise governance over the network i.e. change validator set, conduct upgrades\n    address governor;\n    /// @notice Address that governor proposed as one that will replace it\n    address pendingGovernor;\n    /// @notice List of permitted validators\n    mapping(address => bool) validators;\n    // TODO: should be used an external library approach\n    /// @dev Verifier contract. Used to verify aggregated proof for blocks\n    Verifier verifier;\n    /// @notice Total number of executed blocks i.e. blocks[totalBlocksExecuted] points at the latest executed block (block 0 is genesis)\n    uint256 totalBlocksExecuted;\n    /// @notice Total number of proved blocks i.e. blocks[totalBlocksProved] points at the latest proved block\n    uint256 totalBlocksVerified;\n    /// @notice Total number of committed blocks i.e. blocks[totalBlocksCommitted] points at the latest committed block\n    uint256 totalBlocksCommitted;\n    /// @dev Stored hashed StoredBlock for block number\n    mapping(uint256 => bytes32) storedBlockHashes;\n    /// @dev Stored root hashes of L2 -> L1 logs\n    mapping(uint256 => bytes32) l2LogsRootHashes;\n    /// @dev Container that stores transactions requested from L1\n    PriorityQueue.Queue priorityQueue;\n    /// @dev The smart contract that manages the list with permission to call contract functions\n    IAllowList allowList;\n    /// @notice Part of the configuration parameters of ZKP circuits. Used as an input for the verifier smart contract\n    VerifierParams verifierParams;\n    /// @notice Bytecode hash of bootloader program.\n    /// @dev Used as an input to zkp-circuit.\n    bytes32 l2BootloaderBytecodeHash;\n    /// @notice Bytecode hash of default account (bytecode for EOA).\n    /// @dev Used as an input to zkp-circuit.\n    bytes32 l2DefaultAccountBytecodeHash;\n    /// @dev Indicates that the porter may be touched on L2 transactions.\n    /// @dev Used as an input to zkp-circuit.\n    bool zkPorterIsAvailable;\n}\n"},"@matterlabs/zksync-contracts/l1/contracts/zksync/Verifier.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8.0;\n\nimport \"../common/libraries/UncheckedMath.sol\";\nimport \"./Plonk4VerifierWithAccessToDNext.sol\";\n\ncontract Verifier is Plonk4VerifierWithAccessToDNext {\n    using UncheckedMath for uint256;\n\n    function get_verification_key() internal pure returns (VerificationKey memory vk) {\n        vk.num_inputs = 1;\n        vk.domain_size = 256;\n        vk.omega = PairingsBn254.new_fr(0x1058a83d529be585820b96ff0a13f2dbd8675a9e5dd2336a6692cc1e5a526c81);\n        // coefficients\n        vk.gate_setup_commitments[0] = PairingsBn254.new_g1(\n            0x05f5cabc4eab14cfabee1334ef7f33a66259cc9fd07af862308d5c41765adb4b,\n            0x128a103fbe66c8ff697182c0963d963208b55a5a53ddeab9b4bc09dc2a68a9cc\n        );\n        vk.gate_setup_commitments[1] = PairingsBn254.new_g1(\n            0x0d9980170c334c107e6ce4d66bbc4d23bbcdc97c020b1e1c3f6e04c6c663d2c2,\n            0x0968205845091ceaf3f863b1613fbdf7ce9a87ccfd97f22011679e6350384419\n        );\n        vk.gate_setup_commitments[2] = PairingsBn254.new_g1(\n            0x0c84a19b149a1612cb042ad86382b9e94367c0add60d07e12399999e7db09efe,\n            0x1e02f70c44c9bfb7bf2164cee2ab4813bcb9be56eb432e2e9dfffffe196d846d\n        );\n        vk.gate_setup_commitments[3] = PairingsBn254.new_g1(\n            0x1eb3599506a41a7d62e1f7438d6732fbb9d1eda7b9c7a0213eca63c9334ac5a9,\n            0x23563d9f429908d8ea80bffa642840fb081936d45b388bafc504d9b1e5b1c410\n        );\n        vk.gate_setup_commitments[4] = PairingsBn254.new_g1(\n            0x0000000000000000000000000000000000000000000000000000000000000000,\n            0x0000000000000000000000000000000000000000000000000000000000000001\n        );\n        vk.gate_setup_commitments[5] = PairingsBn254.new_g1(\n            0x063e8dac7ee3ee6a4569fd53b416fe17f8f10de8c435c336e5a1cf2e02643200,\n            0x1d4c1781b78f926d55f89ef72abb96bee350ce60ddc684f5a02d87c5f4cdf943\n        );\n        vk.gate_setup_commitments[6] = PairingsBn254.new_g1(\n            0x0000000000000000000000000000000000000000000000000000000000000000,\n            0x0000000000000000000000000000000000000000000000000000000000000001\n        );\n        // gate selectors\n        vk.gate_selectors_commitments[0] = PairingsBn254.new_g1(\n            0x0b487eb34c8480ea506f5c6c25857155d61d7f9824b60bc80e1a415a5bcf247f,\n            0x07ea0d0d0df9dbcc944e9341a5bb49ae796d9dc9d7ca1c032b53784715b946db\n        );\n        vk.gate_selectors_commitments[1] = PairingsBn254.new_g1(\n            0x0fa66faa0b9ea782eb400175ac9f0c05f0de64332eec54a87cd20db4540baec2,\n            0x07dea33d314c690c4bd4b21deda1a44b9f8dd87e539024622768c2f8b8bdabe1\n        );\n        // permutation\n        vk.permutation_commitments[0] = PairingsBn254.new_g1(\n            0x120482c52e31d2373f9b2dc80a47e68f035e278d220fa8a89d0c81f133343953,\n            0x02928a78ea2e1a943e9220b7e288fd48a561263f8e5f94518f21aaa43781ceac\n        );\n        vk.permutation_commitments[1] = PairingsBn254.new_g1(\n            0x1dfad2c4d60704bcf6af0abd9cce09151f063c4b52200c268e470c6a6c93cbca,\n            0x08b28dd6ca14d7c33e078fe0f332a9a4d95ac8df171355de9e69930aec02b5dc\n        );\n        vk.permutation_commitments[2] = PairingsBn254.new_g1(\n            0x0935a4fd6ab67925929661cf2d2e814f87f589ee6234cb9675ecc2d897f1b338,\n            0x1032ccc41c047413fce4a847ba7e51e4a2ea406d89a88d480c5f0efaf6c8c89a\n        );\n        vk.permutation_commitments[3] = PairingsBn254.new_g1(\n            0x0eafaea3af7d1fadb2138db1b991af5d2218f6892714fd019898c7e1a43ecfe8,\n            0x28fb17eda285ed74cc9771d62fad22ab459bbb0a4968c489972aca8b7e618fcb\n        );\n        // lookup table commitments\n        vk.lookup_selector_commitment = PairingsBn254.new_g1(\n            0x155201a564e721b1f5c06315ad4e24eaad3cbdd6197b19cd903fe85613080f86,\n            0x12fb201bc896572ac14357e2601f5118636f1eeb7b89c177ac940aac3b5253ec\n        );\n        vk.lookup_tables_commitments[0] = PairingsBn254.new_g1(\n            0x1cb0e2ae4d52743898d94d7f1729bd0d3357ba035cdb6b3af7ebff9159f8f297,\n            0x15ee595227c9e0f7a487ddb8072d5ea3cfd058bc569211c3546bc0e80051553f\n        );\n        vk.lookup_tables_commitments[1] = PairingsBn254.new_g1(\n            0x13e4ab94c03a5a29719930c1361d854e244cf918f1e29cb031303f4a13b71977,\n            0x0f792ef4c6c8746c97be61ed9b20f31ba2dec3bd5c91a2d9a4a586f19af3a07c\n        );\n        vk.lookup_tables_commitments[2] = PairingsBn254.new_g1(\n            0x1c9e69bd2b04240ebe44fb23d67c596fce4a1336109fdce38c2f184a63cd8acc,\n            0x1cbd3e72bdbce827227e503690b10be9365ae760e9d2babde5ba81edf12f8206\n        );\n        vk.lookup_tables_commitments[3] = PairingsBn254.new_g1(\n            0x2a0d46339fbf72104df6a241b53a957602b1a16f6e3b9f89bf3e4c4645df823c,\n            0x11a601d7b2eee4b7885f34c9873426ba1263f38eae2e0351d653b8b1ba9c67f6\n        );\n        vk.lookup_table_type_commitment = PairingsBn254.new_g1(\n            0x1a70e43f18b18d686807c2b1c6471cd949dd251b48090bca443d86b97afae951,\n            0x0e6e23ad15a1bd851b228788ae4a03bf25bda39ede6d5a92d501a8402a0dfe43\n        );\n        // non residues\n        vk.non_residues[0] = PairingsBn254.new_fr(0x0000000000000000000000000000000000000000000000000000000000000005);\n        vk.non_residues[1] = PairingsBn254.new_fr(0x0000000000000000000000000000000000000000000000000000000000000007);\n        vk.non_residues[2] = PairingsBn254.new_fr(0x000000000000000000000000000000000000000000000000000000000000000a);\n\n        // g2 elements\n        vk.g2_elements[0] = PairingsBn254.new_g2(\n            [\n                0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,\n                0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\n            ],\n            [\n                0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,\n                0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\n            ]\n        );\n        vk.g2_elements[1] = PairingsBn254.new_g2(\n            [\n                0x260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c1,\n                0x0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b0\n            ],\n            [\n                0x04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4,\n                0x22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55\n            ]\n        );\n    }\n\n    function deserialize_proof(uint256[] calldata public_inputs, uint256[] calldata serialized_proof)\n        internal\n        pure\n        returns (Proof memory proof)\n    {\n        // require(serialized_proof.length == 44); TODO\n        proof.input_values = new uint256[](public_inputs.length);\n        for (uint256 i = 0; i < public_inputs.length; i = i.uncheckedInc()) {\n            proof.input_values[i] = public_inputs[i];\n        }\n\n        uint256 j;\n        for (uint256 i = 0; i < STATE_WIDTH; i = i.uncheckedInc()) {\n            proof.state_polys_commitments[i] = PairingsBn254.new_g1_checked(\n                serialized_proof[j],\n                serialized_proof[j.uncheckedInc()]\n            );\n\n            j = j.uncheckedAdd(2);\n        }\n        proof.copy_permutation_grand_product_commitment = PairingsBn254.new_g1_checked(\n            serialized_proof[j],\n            serialized_proof[j.uncheckedInc()]\n        );\n        j = j.uncheckedAdd(2);\n\n        proof.lookup_s_poly_commitment = PairingsBn254.new_g1_checked(\n            serialized_proof[j],\n            serialized_proof[j.uncheckedInc()]\n        );\n        j = j.uncheckedAdd(2);\n\n        proof.lookup_grand_product_commitment = PairingsBn254.new_g1_checked(\n            serialized_proof[j],\n            serialized_proof[j.uncheckedInc()]\n        );\n        j = j.uncheckedAdd(2);\n        for (uint256 i = 0; i < proof.quotient_poly_parts_commitments.length; i = i.uncheckedInc()) {\n            proof.quotient_poly_parts_commitments[i] = PairingsBn254.new_g1_checked(\n                serialized_proof[j],\n                serialized_proof[j.uncheckedInc()]\n            );\n            j = j.uncheckedAdd(2);\n        }\n\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z.length; i = i.uncheckedInc()) {\n            proof.state_polys_openings_at_z[i] = PairingsBn254.new_fr(serialized_proof[j]);\n\n            j = j.uncheckedInc();\n        }\n\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z_omega.length; i = i.uncheckedInc()) {\n            proof.state_polys_openings_at_z_omega[i] = PairingsBn254.new_fr(serialized_proof[j]);\n\n            j = j.uncheckedInc();\n        }\n        for (uint256 i = 0; i < proof.gate_selectors_openings_at_z.length; i = i.uncheckedInc()) {\n            proof.gate_selectors_openings_at_z[i] = PairingsBn254.new_fr(serialized_proof[j]);\n\n            j = j.uncheckedInc();\n        }\n        for (uint256 i = 0; i < proof.copy_permutation_polys_openings_at_z.length; i = i.uncheckedInc()) {\n            proof.copy_permutation_polys_openings_at_z[i] = PairingsBn254.new_fr(serialized_proof[j]);\n\n            j = j.uncheckedInc();\n        }\n        proof.copy_permutation_grand_product_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\n\n        j = j.uncheckedInc();\n        proof.lookup_s_poly_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\n        j = j.uncheckedInc();\n        proof.lookup_grand_product_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\n\n        j = j.uncheckedInc();\n        proof.lookup_t_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\n\n        j = j.uncheckedInc();\n        proof.lookup_t_poly_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\n        j = j.uncheckedInc();\n        proof.lookup_selector_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\n        j = j.uncheckedInc();\n        proof.lookup_table_type_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\n        j = j.uncheckedInc();\n        proof.quotient_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\n        j = j.uncheckedInc();\n        proof.linearization_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\n        j = j.uncheckedInc();\n        proof.opening_proof_at_z = PairingsBn254.new_g1_checked(\n            serialized_proof[j],\n            serialized_proof[j.uncheckedInc()]\n        );\n        j = j.uncheckedAdd(2);\n        proof.opening_proof_at_z_omega = PairingsBn254.new_g1_checked(\n            serialized_proof[j],\n            serialized_proof[j.uncheckedInc()]\n        );\n    }\n\n    function verify_serialized_proof(uint256[] calldata public_inputs, uint256[] calldata serialized_proof)\n        public\n        view\n        returns (bool)\n    {\n        VerificationKey memory vk = get_verification_key();\n        require(vk.num_inputs == public_inputs.length);\n\n        Proof memory proof = deserialize_proof(public_inputs, serialized_proof);\n\n        return verify(proof, vk);\n    }\n}\n"},"@matterlabs/zksync-contracts/l2/system-contracts/Constants.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8.0;\n\nimport \"./interfaces/IAccountCodeStorage.sol\";\nimport \"./interfaces/INonceHolder.sol\";\nimport \"./interfaces/IContractDeployer.sol\";\nimport \"./interfaces/IKnownCodesStorage.sol\";\nimport \"./interfaces/IImmutableSimulator.sol\";\nimport \"./interfaces/IEthToken.sol\";\nimport \"./interfaces/IL1Messenger.sol\";\nimport \"./interfaces/ISystemContext.sol\";\n\nuint160 constant SYSTEM_CONTRACTS_OFFSET = 0x8000; // 2^15\nuint160 constant MAX_SYSTEM_CONTRACT_ADDRESS = 0xffff; // 2^16 - 1\n\naddress constant ECRECOVER_SYSTEM_CONTRACT = address(0x01);\naddress constant SHA256_SYSTEM_CONTRACT = address(0x02);\n\naddress payable constant BOOTLOADER_FORMAL_ADDRESS = payable(address(SYSTEM_CONTRACTS_OFFSET + 0x01));\nIAccountCodeStorage constant ACCOUNT_CODE_STORAGE_SYSTEM_CONTRACT = IAccountCodeStorage(address(SYSTEM_CONTRACTS_OFFSET + 0x02));\nINonceHolder constant NONCE_HOLDER_SYSTEM_CONTRACT = INonceHolder(address(SYSTEM_CONTRACTS_OFFSET + 0x03));\nIKnownCodesStorage constant KNOWN_CODE_STORAGE_CONTRACT = IKnownCodesStorage(address(SYSTEM_CONTRACTS_OFFSET + 0x04));\nIImmutableSimulator constant IMMUTABLE_SIMULATOR_SYSTEM_CONTRACT = IImmutableSimulator(address(SYSTEM_CONTRACTS_OFFSET + 0x05));\nIContractDeployer constant DEPLOYER_SYSTEM_CONTRACT = IContractDeployer(address(SYSTEM_CONTRACTS_OFFSET + 0x06));\n\n// A contract that is allowed to deploy any codehash\n// on any address. To be used only during an upgrade.\naddress constant FORCE_DEPLOYER = address(SYSTEM_CONTRACTS_OFFSET + 0x07);\nIL1Messenger constant L1_MESSENGER_CONTRACT = IL1Messenger(address(SYSTEM_CONTRACTS_OFFSET + 0x08));\naddress constant MSG_VALUE_SYSTEM_CONTRACT = address(SYSTEM_CONTRACTS_OFFSET + 0x09);\n\nIEthToken constant ETH_TOKEN_SYSTEM_CONTRACT = IEthToken(address(SYSTEM_CONTRACTS_OFFSET + 0x0a));\n\naddress constant KECCAK256_SYSTEM_CONTRACT = address(SYSTEM_CONTRACTS_OFFSET + 0x10);\n\nISystemContext constant SYSTEM_CONTEXT_CONTRACT = ISystemContext(payable(address(SYSTEM_CONTRACTS_OFFSET + 0x0b)));\n\nbytes32 constant DEFAULT_ACCOUNT_CODE_HASH = 0x00;\n\n// The number of bytes that are published during the contract deployment\n// in addition to the bytecode itself.\nuint256 constant BYTECODE_PUBLISHING_OVERHEAD = 100;\n\nuint256 constant MSG_VALUE_SIMULATOR_IS_SYSTEM_BIT = 2**128;\n"},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IAccountCodeStorage.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8.0;\n\ninterface IAccountCodeStorage {\n    function storeCodeHash(address _address, bytes32 _hash) external;\n\n    function getRawCodeHash(address _address) external view returns (bytes32 codeHash);\n\n    function getCodeHash(uint256 _input) external returns (bytes32 codeHash);\n    \n    function getCodeSize(uint256 _input) external returns (uint256 codeSize);\n}\n"},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IContractDeployer.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8.0;\n\ninterface IContractDeployer {\n    event ContractDeployed(address indexed deployerAddress, bytes32 indexed bytecodeHash, address indexed contractAddress);\n\n    function getNewAddressCreate2(\n        address _sender,\n        bytes32 _bytecodeHash,\n        bytes32 _salt,\n        bytes calldata _input\n    ) external pure returns (address newAddress);\n \n    function getNewAddressCreate(\n        address _sender,\n        uint256 _senderNonce\n    ) external pure returns (address newAddress);\n\n    function create2 (\n        bytes32 _salt,\n        bytes32 _bytecodeHash,\n        bytes calldata _input\n    ) external payable returns (address newAddress, bytes memory constructorRevertData);\n\n    function create2Account (\n        bytes32 _salt,\n        bytes32 _bytecodeHash,\n        bytes calldata _input\n    ) external payable returns (address newAddress, bytes memory constructorRevertData);\n\n    /// @dev While the `_salt` parameter is not used anywhere here, \n    /// it is still needed for consistency between `create` and\n    /// `create2` functions (required by the compiler).\n    function create (\n        bytes32 _salt,\n        bytes32 _bytecodeHash,\n        bytes calldata _input\n    ) external payable returns (address newAddress, bytes memory constructorRevertData);\n\n    /// @dev While `_salt` is never used here, we leave it here as a parameter\n    /// for the consistency with the `create` function.\n    function createAccount (\n        bytes32 _salt,\n        bytes32 _bytecodeHash,\n        bytes calldata _input\n    ) external payable returns (address newAddress, bytes memory constructorRevertData);\n}\n"},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IEthToken.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8.0;\n\ninterface IEthToken {\n    function balanceOf(address) external returns (uint256);\n    \n    function transferFromTo(address _from, address _to, uint256 _amount) external;\n}\n"},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IImmutableSimulator.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8.0;\n\nstruct ImmutableData {\n    uint256 index;\n    bytes32 value;\n}\n\ninterface IImmutableSimulator {\n    function getImmutable(address _dest, uint256 _index) external view returns (bytes32);\n\n    function setImmutables(address _dest, ImmutableData[] calldata immutables) external;\n}\n"},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IKnownCodesStorage.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8.0;\n\ninterface IKnownCodesStorage {\n    event MarkedAsKnown(bytes32 indexed bytecodeHash, bool indexed sendBytecodeToL1);\n\n    function markFactoryDeps(bool _shouldSendToL1, bytes32[] calldata _hashes) external;\n\n    function getMarker(bytes32 _hash) external view returns (uint256);\n}\n"},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IL1Messenger.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8.0;\n\ninterface IL1Messenger {\n    // Possibly in the future we will be able to track the messages sent to L1 with \n    // some hooks in the VM. For now, it is much easier to track them with L2 events.\n    event L1MessageSent(address indexed _sender, bytes32 indexed _hash, bytes _message);\n\n    function sendToL1(bytes memory _message) external returns (bytes32);\n}\n"},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/INonceHolder.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8.0;\n\n/**\n * @author Matter Labs\n * @dev Interface of the nonce holder contract -- a contract used by the system to ensure\n * that there is always a unique identifier for a transaction with a particular account (we call it nonce).\n * In other words, the pair of (address, nonce) should always be unique.\n * @dev Custom accounts should use methods of this contract to store nonces or other possible unique identifiers \n * for the transaction.\n */\ninterface INonceHolder {\n    /// @dev Returns the current minimal nonce for account.\n    function getMinNonce(address _address) external view returns(uint256);\n\n    /// @dev Returns the raw version of the current minimal nonce \n    /// (equal to minNonce + 2^128 * deployment nonce).\n    function getRawNonce(address _address) external view returns (uint256);\n\n    /// @dev Increases the minimal nonce for the msg.sender.\n    function increaseMinNonce(uint256 _value) external returns (uint256);\n\n    /// @dev Sets the nonce value `key` as used.\n    function setValueUnderNonce(uint256 _key, uint256 _value) external;\n\n    /// @dev Gets the value stored inside a custom nonce.\n    function getValueUnderNonce(uint256 _key) external view returns (uint256);\n\n    /// @dev A convenience method to increment the minimal nonce if it is equal\n    /// to the `_expectedNonce`.\n    function incrementMinNonceIfEquals(uint256 _expectedNonce) external;\n\n    /// @dev Returns the deployment nonce for the accounts used for CREATE opcode.\n    function getDeploymentNonce(address _address) external view returns (uint256);\n\n    /// @dev Increments the deployment nonce for the account and returns the previous one.\n    function incrementDeploymentNonce(address _address) external returns (uint256);\n\n    /// @dev Determines whether a certain nonce has been already used for an account.\n    function validateNonceUsage(address _address, uint256 _key, bool _shouldBeUsed) external view;\n}\n"},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/ISystemContext.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\n\npragma solidity ^0.8.0;\n\n/**\n * @author Matter Labs\n * @notice Contract that stores some of the context variables, that may be either \n * block-scoped, tx-scoped or system-wide.\n */\ninterface ISystemContext {\n    function chainId() external view returns (uint256);\n\n    function origin() external view returns (address);\n\n    function ergsPrice() external view returns (uint256);\n\n    function blockErgsLimit() external view returns (uint256);\n\n    function coinbase() external view returns (address);\n\n    function difficulty() external view returns (uint256);\n\n    function msize() external view returns (uint256);\n\n    function baseFee() external view returns (uint256);\n\n    function blockHash(uint256 _block) external view returns (bytes32);\n\n    function getBlockHashEVM(uint256 _block) external view returns (bytes32);\n\n    function getBlockNumberAndTimestamp() external view returns (uint256 blockNumber, uint256 blockTimestamp);\n\n    // Note, that for now, the implementation of the bootloader allows this variables to \n    // be incremented multiple times inside a block, so it should not relied upon right now.\n    function getBlockNumber() external view returns (uint256);\n\n    function getBlockTimestamp() external view returns (uint256);\n}\n"},"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n    address private _owner;\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the deployer as the initial owner.\n     */\n    function __Ownable_init() internal onlyInitializing {\n        __Ownable_init_unchained();\n    }\n\n    function __Ownable_init_unchained() internal onlyInitializing {\n        _transferOwnership(_msgSender());\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        _checkOwner();\n        _;\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if the sender is not the owner.\n     */\n    function _checkOwner() internal view virtual {\n        require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby removing any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain.\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[49] private __gap;\n}\n"},"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * contract MyToken is ERC20Upgradeable {\n *     function initialize() initializer public {\n *         __ERC20_init(\"MyToken\", \"MTK\");\n *     }\n * }\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n *     function initializeV2() reinitializer(2) public {\n *         __ERC20Permit_init(\"MyToken\");\n *     }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n *     _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n    /**\n     * @dev Indicates that the contract has been initialized.\n     * @custom:oz-retyped-from bool\n     */\n    uint8 private _initialized;\n\n    /**\n     * @dev Indicates that the contract is in the process of being initialized.\n     */\n    bool private _initializing;\n\n    /**\n     * @dev Triggered when the contract has been initialized or reinitialized.\n     */\n    event Initialized(uint8 version);\n\n    /**\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n     * `onlyInitializing` functions can be used to initialize parent contracts.\n     *\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\n     * constructor.\n     *\n     * Emits an {Initialized} event.\n     */\n    modifier initializer() {\n        bool isTopLevelCall = !_initializing;\n        require(\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\n            \"Initializable: contract is already initialized\"\n        );\n        _initialized = 1;\n        if (isTopLevelCall) {\n            _initializing = true;\n        }\n        _;\n        if (isTopLevelCall) {\n            _initializing = false;\n            emit Initialized(1);\n        }\n    }\n\n    /**\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n     * used to initialize parent contracts.\n     *\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\n     * are added through upgrades and that require initialization.\n     *\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\n     *\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n     * a contract, executing them in the right order is up to the developer or operator.\n     *\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\n     *\n     * Emits an {Initialized} event.\n     */\n    modifier reinitializer(uint8 version) {\n        require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n        _initialized = version;\n        _initializing = true;\n        _;\n        _initializing = false;\n        emit Initialized(version);\n    }\n\n    /**\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\n     */\n    modifier onlyInitializing() {\n        require(_initializing, \"Initializable: contract is not initializing\");\n        _;\n    }\n\n    /**\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n     * through proxies.\n     *\n     * Emits an {Initialized} event the first time it is successfully executed.\n     */\n    function _disableInitializers() internal virtual {\n        require(!_initializing, \"Initializable: contract is initializing\");\n        if (_initialized < type(uint8).max) {\n            _initialized = type(uint8).max;\n            emit Initialized(type(uint8).max);\n        }\n    }\n\n    /**\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\n     */\n    function _getInitializedVersion() internal view returns (uint8) {\n        return _initialized;\n    }\n\n    /**\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\n     */\n    function _isInitializing() internal view returns (bool) {\n        return _initializing;\n    }\n}\n"},"@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract PausableUpgradeable is Initializable, ContextUpgradeable {\n    /**\n     * @dev Emitted when the pause is triggered by `account`.\n     */\n    event Paused(address account);\n\n    /**\n     * @dev Emitted when the pause is lifted by `account`.\n     */\n    event Unpaused(address account);\n\n    bool private _paused;\n\n    /**\n     * @dev Initializes the contract in unpaused state.\n     */\n    function __Pausable_init() internal onlyInitializing {\n        __Pausable_init_unchained();\n    }\n\n    function __Pausable_init_unchained() internal onlyInitializing {\n        _paused = false;\n    }\n\n    /**\n     * @dev Modifier to make a function callable only when the contract is not paused.\n     *\n     * Requirements:\n     *\n     * - The contract must not be paused.\n     */\n    modifier whenNotPaused() {\n        _requireNotPaused();\n        _;\n    }\n\n    /**\n     * @dev Modifier to make a function callable only when the contract is paused.\n     *\n     * Requirements:\n     *\n     * - The contract must be paused.\n     */\n    modifier whenPaused() {\n        _requirePaused();\n        _;\n    }\n\n    /**\n     * @dev Returns true if the contract is paused, and false otherwise.\n     */\n    function paused() public view virtual returns (bool) {\n        return _paused;\n    }\n\n    /**\n     * @dev Throws if the contract is paused.\n     */\n    function _requireNotPaused() internal view virtual {\n        require(!paused(), \"Pausable: paused\");\n    }\n\n    /**\n     * @dev Throws if the contract is not paused.\n     */\n    function _requirePaused() internal view virtual {\n        require(paused(), \"Pausable: not paused\");\n    }\n\n    /**\n     * @dev Triggers stopped state.\n     *\n     * Requirements:\n     *\n     * - The contract must not be paused.\n     */\n    function _pause() internal virtual whenNotPaused {\n        _paused = true;\n        emit Paused(_msgSender());\n    }\n\n    /**\n     * @dev Returns to normal state.\n     *\n     * Requirements:\n     *\n     * - The contract must be paused.\n     */\n    function _unpause() internal virtual whenPaused {\n        _paused = false;\n        emit Unpaused(_msgSender());\n    }\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain.\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[49] private __gap;\n}\n"},"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\n\npragma solidity ^0.8.0;\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuardUpgradeable is Initializable {\n    // Booleans are more expensive than uint256 or any type that takes up a full\n    // word because each write operation emits an extra SLOAD to first read the\n    // slot's contents, replace the bits taken up by the boolean, and then write\n    // back. This is the compiler's defense against contract upgrades and\n    // pointer aliasing, and it cannot be disabled.\n\n    // The values being non-zero value makes deployment a bit more expensive,\n    // but in exchange the refund on every call to nonReentrant will be lower in\n    // amount. Since refunds are capped to a percentage of the total\n    // transaction's gas, it is best to keep them low in cases like this one, to\n    // increase the likelihood of the full refund coming into effect.\n    uint256 private constant _NOT_ENTERED = 1;\n    uint256 private constant _ENTERED = 2;\n\n    uint256 private _status;\n\n    function __ReentrancyGuard_init() internal onlyInitializing {\n        __ReentrancyGuard_init_unchained();\n    }\n\n    function __ReentrancyGuard_init_unchained() internal onlyInitializing {\n        _status = _NOT_ENTERED;\n    }\n\n    /**\n     * @dev Prevents a contract from calling itself, directly or indirectly.\n     * Calling a `nonReentrant` function from another `nonReentrant`\n     * function is not supported. It is possible to prevent this from happening\n     * by making the `nonReentrant` function external, and making it call a\n     * `private` function that does the actual work.\n     */\n    modifier nonReentrant() {\n        _nonReentrantBefore();\n        _;\n        _nonReentrantAfter();\n    }\n\n    function _nonReentrantBefore() private {\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\n        require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n        // Any calls to nonReentrant after this point will fail\n        _status = _ENTERED;\n    }\n\n    function _nonReentrantAfter() private {\n        // By storing the original value once again, a refund is triggered (see\n        // https://eips.ethereum.org/EIPS/eip-2200)\n        _status = _NOT_ENTERED;\n    }\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain.\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[49] private __gap;\n}\n"},"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC20Upgradeable.sol\";\nimport \"./extensions/IERC20MetadataUpgradeable.sol\";\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"../../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC20\n * applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\n    mapping(address => uint256) private _balances;\n\n    mapping(address => mapping(address => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}.\n     *\n     * The default value of {decimals} is 18. To select a different value for\n     * {decimals} you should overload it.\n     *\n     * All two of these values are immutable: they can only be set once during\n     * construction.\n     */\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\n        __ERC20_init_unchained(name_, symbol_);\n    }\n\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\n        _name = name_;\n        _symbol = symbol_;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view virtual override returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view virtual override returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\n     * overridden;\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view virtual override returns (uint8) {\n        return 18;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view virtual override returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view virtual override returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - the caller must have a balance of at least `amount`.\n     */\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\n        address owner = _msgSender();\n        _transfer(owner, to, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Emits an {Approval} event indicating the updated allowance. This is not\n     * required by the EIP. See the note at the beginning of {ERC20}.\n     *\n     * NOTE: Does not update the allowance if the current allowance\n     * is the maximum `uint256`.\n     *\n     * Requirements:\n     *\n     * - `from` and `to` cannot be the zero address.\n     * - `from` must have a balance of at least `amount`.\n     * - the caller must have allowance for ``from``'s tokens of at least\n     * `amount`.\n     */\n    function transferFrom(\n        address from,\n        address to,\n        uint256 amount\n    ) public virtual override returns (bool) {\n        address spender = _msgSender();\n        _spendAllowance(from, spender, amount);\n        _transfer(from, to, amount);\n        return true;\n    }\n\n    /**\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\n        return true;\n    }\n\n    /**\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     * - `spender` must have allowance for the caller of at least\n     * `subtractedValue`.\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n        address owner = _msgSender();\n        uint256 currentAllowance = allowance(owner, spender);\n        require(currentAllowance >= subtractedValue, \"ERC20: decreased allowance below zero\");\n        unchecked {\n            _approve(owner, spender, currentAllowance - subtractedValue);\n        }\n\n        return true;\n    }\n\n    /**\n     * @dev Moves `amount` of tokens from `from` to `to`.\n     *\n     * This internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `from` must have a balance of at least `amount`.\n     */\n    function _transfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {\n        require(from != address(0), \"ERC20: transfer from the zero address\");\n        require(to != address(0), \"ERC20: transfer to the zero address\");\n\n        _beforeTokenTransfer(from, to, amount);\n\n        uint256 fromBalance = _balances[from];\n        require(fromBalance >= amount, \"ERC20: transfer amount exceeds balance\");\n        unchecked {\n            _balances[from] = fromBalance - amount;\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\n            // decrementing then incrementing.\n            _balances[to] += amount;\n        }\n\n        emit Transfer(from, to, amount);\n\n        _afterTokenTransfer(from, to, amount);\n    }\n\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n     * the total supply.\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     */\n    function _mint(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: mint to the zero address\");\n\n        _beforeTokenTransfer(address(0), account, amount);\n\n        _totalSupply += amount;\n        unchecked {\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\n            _balances[account] += amount;\n        }\n        emit Transfer(address(0), account, amount);\n\n        _afterTokenTransfer(address(0), account, amount);\n    }\n\n    /**\n     * @dev Destroys `amount` tokens from `account`, reducing the\n     * total supply.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     * - `account` must have at least `amount` tokens.\n     */\n    function _burn(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: burn from the zero address\");\n\n        _beforeTokenTransfer(account, address(0), amount);\n\n        uint256 accountBalance = _balances[account];\n        require(accountBalance >= amount, \"ERC20: burn amount exceeds balance\");\n        unchecked {\n            _balances[account] = accountBalance - amount;\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\n            _totalSupply -= amount;\n        }\n\n        emit Transfer(account, address(0), amount);\n\n        _afterTokenTransfer(account, address(0), amount);\n    }\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     */\n    function _approve(\n        address owner,\n        address spender,\n        uint256 amount\n    ) internal virtual {\n        require(owner != address(0), \"ERC20: approve from the zero address\");\n        require(spender != address(0), \"ERC20: approve to the zero address\");\n\n        _allowances[owner][spender] = amount;\n        emit Approval(owner, spender, amount);\n    }\n\n    /**\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\n     *\n     * Does not update the allowance amount in case of infinite allowance.\n     * Revert if not enough allowance is available.\n     *\n     * Might emit an {Approval} event.\n     */\n    function _spendAllowance(\n        address owner,\n        address spender,\n        uint256 amount\n    ) internal virtual {\n        uint256 currentAllowance = allowance(owner, spender);\n        if (currentAllowance != type(uint256).max) {\n            require(currentAllowance >= amount, \"ERC20: insufficient allowance\");\n            unchecked {\n                _approve(owner, spender, currentAllowance - amount);\n            }\n        }\n    }\n\n    /**\n     * @dev Hook that is called before any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * will be transferred to `to`.\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _beforeTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {}\n\n    /**\n     * @dev Hook that is called after any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * has been transferred to `to`.\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _afterTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {}\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain.\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[45] private __gap;\n}\n"},"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC20Upgradeable.sol\";\nimport \"../../../utils/ContextUpgradeable.sol\";\nimport \"../../../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\n * tokens and those that they have an allowance for, in a way that can be\n * recognized off-chain (via event analysis).\n */\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\n    function __ERC20Burnable_init() internal onlyInitializing {\n    }\n\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\n    }\n    /**\n     * @dev Destroys `amount` tokens from the caller.\n     *\n     * See {ERC20-_burn}.\n     */\n    function burn(uint256 amount) public virtual {\n        _burn(_msgSender(), amount);\n    }\n\n    /**\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\n     * allowance.\n     *\n     * See {ERC20-_burn} and {ERC20-allowance}.\n     *\n     * Requirements:\n     *\n     * - the caller must have allowance for ``accounts``'s tokens of at least\n     * `amount`.\n     */\n    function burnFrom(address account, uint256 amount) public virtual {\n        _spendAllowance(account, _msgSender(), amount);\n        _burn(account, amount);\n    }\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain.\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[50] private __gap;\n}\n"},"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../IERC20Upgradeable.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n *\n * _Available since v4.1._\n */\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the symbol of the token.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the decimals places of the token.\n     */\n    function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20Upgradeable {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the amount of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the amount of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves `amount` tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Moves `amount` tokens from `from` to `to` using the\n     * allowance mechanism. `amount` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(\n        address from,\n        address to,\n        uint256 amount\n    ) external returns (bool);\n}\n"},"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\n    /**\n     * @dev Returns true if `account` is a contract.\n     *\n     * [IMPORTANT]\n     * ====\n     * It is unsafe to assume that an address for which this function returns\n     * false is an externally-owned account (EOA) and not a contract.\n     *\n     * Among others, `isContract` will return false for the following\n     * types of addresses:\n     *\n     *  - an externally-owned account\n     *  - a contract in construction\n     *  - an address where a contract will be created\n     *  - an address where a contract lived, but was destroyed\n     * ====\n     *\n     * [IMPORTANT]\n     * ====\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\n     *\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n     * constructor.\n     * ====\n     */\n    function isContract(address account) internal view returns (bool) {\n        // This method relies on extcodesize/address.code.length, which returns 0\n        // for contracts in construction, since the code is only stored at the end\n        // of the constructor execution.\n\n        return account.code.length > 0;\n    }\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n        (bool success, ) = recipient.call{value: amount}(\"\");\n        require(success, \"Address: unable to send value, recipient may have reverted\");\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain `call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason, it is bubbled up by this\n     * function (like regular Solidity function calls).\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, \"Address: low-level call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n     * `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(\n        address target,\n        bytes memory data,\n        uint256 value\n    ) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(\n        address target,\n        bytes memory data,\n        uint256 value,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        require(address(this).balance >= value, \"Address: insufficient balance for call\");\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        return functionStaticCall(target, data, \"Address: low-level static call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal view returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n     *\n     * _Available since v4.8._\n     */\n    function verifyCallResultFromTarget(\n        address target,\n        bool success,\n        bytes memory returndata,\n        string memory errorMessage\n    ) internal view returns (bytes memory) {\n        if (success) {\n            if (returndata.length == 0) {\n                // only check isContract if the call was successful and the return data is empty\n                // otherwise we already know that it was a contract\n                require(isContract(target), \"Address: call to non-contract\");\n            }\n            return returndata;\n        } else {\n            _revert(returndata, errorMessage);\n        }\n    }\n\n    /**\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n     * revert reason or using the provided one.\n     *\n     * _Available since v4.3._\n     */\n    function verifyCallResult(\n        bool success,\n        bytes memory returndata,\n        string memory errorMessage\n    ) internal pure returns (bytes memory) {\n        if (success) {\n            return returndata;\n        } else {\n            _revert(returndata, errorMessage);\n        }\n    }\n\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\n        // Look for revert reason and bubble it up if present\n        if (returndata.length > 0) {\n            // The easiest way to bubble the revert reason is using memory via assembly\n            /// @solidity memory-safe-assembly\n            assembly {\n                let returndata_size := mload(returndata)\n                revert(add(32, returndata), returndata_size)\n            }\n        } else {\n            revert(errorMessage);\n        }\n    }\n}\n"},"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n    function __Context_init() internal onlyInitializing {\n    }\n\n    function __Context_init_unchained() internal onlyInitializing {\n    }\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain.\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[50] private __gap;\n}\n"},"@openzeppelin/contracts/access/Ownable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n    address private _owner;\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the deployer as the initial owner.\n     */\n    constructor() {\n        _transferOwnership(_msgSender());\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        _checkOwner();\n        _;\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if the sender is not the owner.\n     */\n    function _checkOwner() internal view virtual {\n        require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby removing any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n"},"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL1.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (crosschain/arbitrum/LibArbitrumL1.sol)\n\npragma solidity ^0.8.4;\n\nimport {IBridge as ArbitrumL1_Bridge} from \"../../vendor/arbitrum/IBridge.sol\";\nimport {IOutbox as ArbitrumL1_Outbox} from \"../../vendor/arbitrum/IOutbox.sol\";\nimport \"../errors.sol\";\n\n/**\n * @dev Primitives for cross-chain aware contracts for\n * https://arbitrum.io/[Arbitrum].\n *\n * This version should only be used on L1 to process cross-chain messages\n * originating from L2. For the other side, use {LibArbitrumL2}.\n */\nlibrary LibArbitrumL1 {\n    /**\n     * @dev Returns whether the current function call is the result of a\n     * cross-chain message relayed by the `bridge`.\n     */\n    function isCrossChain(address bridge) internal view returns (bool) {\n        return msg.sender == bridge;\n    }\n\n    /**\n     * @dev Returns the address of the sender that triggered the current\n     * cross-chain message through the `bridge`.\n     *\n     * NOTE: {isCrossChain} should be checked before trying to recover the\n     * sender, as it will revert with `NotCrossChainCall` if the current\n     * function call is not the result of a cross-chain message.\n     */\n    function crossChainSender(address bridge) internal view returns (address) {\n        if (!isCrossChain(bridge)) revert NotCrossChainCall();\n\n        address sender = ArbitrumL1_Outbox(ArbitrumL1_Bridge(bridge).activeOutbox()).l2ToL1Sender();\n        require(sender != address(0), \"LibArbitrumL1: system messages without sender\");\n\n        return sender;\n    }\n}\n"},"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL2.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (crosschain/arbitrum/LibArbitrumL2.sol)\n\npragma solidity ^0.8.4;\n\nimport {IArbSys as ArbitrumL2_Bridge} from \"../../vendor/arbitrum/IArbSys.sol\";\nimport \"../errors.sol\";\n\n/**\n * @dev Primitives for cross-chain aware contracts for\n * https://arbitrum.io/[Arbitrum].\n *\n * This version should only be used on L2 to process cross-chain messages\n * originating from L1. For the other side, use {LibArbitrumL1}.\n *\n * WARNING: There is currently a bug in Arbitrum that causes this contract to\n * fail to detect cross-chain calls when deployed behind a proxy. This will be\n * fixed when the network is upgraded to Arbitrum Nitro, currently scheduled for\n * August 31st 2022.\n */\nlibrary LibArbitrumL2 {\n    /**\n     * @dev Returns whether the current function call is the result of a\n     * cross-chain message relayed by `arbsys`.\n     */\n    address public constant ARBSYS = 0x0000000000000000000000000000000000000064;\n\n    function isCrossChain(address arbsys) internal view returns (bool) {\n        return ArbitrumL2_Bridge(arbsys).wasMyCallersAddressAliased();\n    }\n\n    /**\n     * @dev Returns the address of the sender that triggered the current\n     * cross-chain message through `arbsys`.\n     *\n     * NOTE: {isCrossChain} should be checked before trying to recover the\n     * sender, as it will revert with `NotCrossChainCall` if the current\n     * function call is not the result of a cross-chain message.\n     */\n    function crossChainSender(address arbsys) internal view returns (address) {\n        if (!isCrossChain(arbsys)) revert NotCrossChainCall();\n\n        return ArbitrumL2_Bridge(arbsys).myCallersAddressWithoutAliasing();\n    }\n}\n"},"@openzeppelin/contracts/crosschain/errors.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.6.0) (crosschain/errors.sol)\n\npragma solidity ^0.8.4;\n\nerror NotCrossChainCall();\nerror InvalidCrossChainSender(address actual, address expected);\n"},"@openzeppelin/contracts/interfaces/draft-IERC1822.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n    /**\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n     * address.\n     *\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n     * function revert if invoked through a proxy.\n     */\n    function proxiableUUID() external view returns (bytes32);\n}\n"},"@openzeppelin/contracts/interfaces/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC20Metadata.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../token/ERC20/extensions/IERC20Metadata.sol\";\n"},"@openzeppelin/contracts/proxy/beacon/IBeacon.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n    /**\n     * @dev Must return an address that can be used as a delegate call target.\n     *\n     * {BeaconProxy} will check that this address is a contract.\n     */\n    function implementation() external view returns (address);\n}\n"},"@openzeppelin/contracts/proxy/Clones.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/Clones.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n * deploying minimal proxy contracts, also known as \"clones\".\n *\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n *\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n * deterministic method.\n *\n * _Available since v3.4._\n */\nlibrary Clones {\n    /**\n     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n     *\n     * This function uses the create opcode, which should never revert.\n     */\n    function clone(address implementation) internal returns (address instance) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes\n            // of the `implementation` address with the bytecode before the address.\n            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))\n            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.\n            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))\n            instance := create(0, 0x09, 0x37)\n        }\n        require(instance != address(0), \"ERC1167: create failed\");\n    }\n\n    /**\n     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n     *\n     * This function uses the create2 opcode and a `salt` to deterministically deploy\n     * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n     * the clones cannot be deployed twice at the same address.\n     */\n    function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes\n            // of the `implementation` address with the bytecode before the address.\n            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))\n            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.\n            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))\n            instance := create2(0, 0x09, 0x37, salt)\n        }\n        require(instance != address(0), \"ERC1167: create2 failed\");\n    }\n\n    /**\n     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n     */\n    function predictDeterministicAddress(\n        address implementation,\n        bytes32 salt,\n        address deployer\n    ) internal pure returns (address predicted) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            let ptr := mload(0x40)\n            mstore(add(ptr, 0x38), deployer)\n            mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff)\n            mstore(add(ptr, 0x14), implementation)\n            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73)\n            mstore(add(ptr, 0x58), salt)\n            mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37))\n            predicted := keccak256(add(ptr, 0x43), 0x55)\n        }\n    }\n\n    /**\n     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n     */\n    function predictDeterministicAddress(address implementation, bytes32 salt)\n        internal\n        view\n        returns (address predicted)\n    {\n        return predictDeterministicAddress(implementation, salt, address(this));\n    }\n}\n"},"@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n    /**\n     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n     *\n     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n     * function call, and allows initializing the storage of the proxy like a Solidity constructor.\n     */\n    constructor(address _logic, bytes memory _data) payable {\n        _upgradeToAndCall(_logic, _data, false);\n    }\n\n    /**\n     * @dev Returns the current implementation address.\n     */\n    function _implementation() internal view virtual override returns (address impl) {\n        return ERC1967Upgrade._getImplementation();\n    }\n}\n"},"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n    // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n    /**\n     * @dev Storage slot with the address of the current implementation.\n     * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n     * validated in the constructor.\n     */\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n    /**\n     * @dev Emitted when the implementation is upgraded.\n     */\n    event Upgraded(address indexed implementation);\n\n    /**\n     * @dev Returns the current implementation address.\n     */\n    function _getImplementation() internal view returns (address) {\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 implementation slot.\n     */\n    function _setImplementation(address newImplementation) private {\n        require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n    }\n\n    /**\n     * @dev Perform implementation upgrade\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeTo(address newImplementation) internal {\n        _setImplementation(newImplementation);\n        emit Upgraded(newImplementation);\n    }\n\n    /**\n     * @dev Perform implementation upgrade with additional setup call.\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeToAndCall(\n        address newImplementation,\n        bytes memory data,\n        bool forceCall\n    ) internal {\n        _upgradeTo(newImplementation);\n        if (data.length > 0 || forceCall) {\n            Address.functionDelegateCall(newImplementation, data);\n        }\n    }\n\n    /**\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeToAndCallUUPS(\n        address newImplementation,\n        bytes memory data,\n        bool forceCall\n    ) internal {\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\n        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n            _setImplementation(newImplementation);\n        } else {\n            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n                require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n            } catch {\n                revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n            }\n            _upgradeToAndCall(newImplementation, data, forceCall);\n        }\n    }\n\n    /**\n     * @dev Storage slot with the admin of the contract.\n     * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n     * validated in the constructor.\n     */\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n    /**\n     * @dev Emitted when the admin account has changed.\n     */\n    event AdminChanged(address previousAdmin, address newAdmin);\n\n    /**\n     * @dev Returns the current admin.\n     */\n    function _getAdmin() internal view returns (address) {\n        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 admin slot.\n     */\n    function _setAdmin(address newAdmin) private {\n        require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n    }\n\n    /**\n     * @dev Changes the admin of the proxy.\n     *\n     * Emits an {AdminChanged} event.\n     */\n    function _changeAdmin(address newAdmin) internal {\n        emit AdminChanged(_getAdmin(), newAdmin);\n        _setAdmin(newAdmin);\n    }\n\n    /**\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n     */\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n    /**\n     * @dev Emitted when the beacon is upgraded.\n     */\n    event BeaconUpgraded(address indexed beacon);\n\n    /**\n     * @dev Returns the current beacon.\n     */\n    function _getBeacon() internal view returns (address) {\n        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\n     */\n    function _setBeacon(address newBeacon) private {\n        require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n        require(\n            Address.isContract(IBeacon(newBeacon).implementation()),\n            \"ERC1967: beacon implementation is not a contract\"\n        );\n        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n    }\n\n    /**\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n     *\n     * Emits a {BeaconUpgraded} event.\n     */\n    function _upgradeBeaconToAndCall(\n        address newBeacon,\n        bytes memory data,\n        bool forceCall\n    ) internal {\n        _setBeacon(newBeacon);\n        emit BeaconUpgraded(newBeacon);\n        if (data.length > 0 || forceCall) {\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n        }\n    }\n}\n"},"@openzeppelin/contracts/proxy/Proxy.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n    /**\n     * @dev Delegates the current call to `implementation`.\n     *\n     * This function does not return to its internal call site, it will return directly to the external caller.\n     */\n    function _delegate(address implementation) internal virtual {\n        assembly {\n            // Copy msg.data. We take full control of memory in this inline assembly\n            // block because it will not return to Solidity code. We overwrite the\n            // Solidity scratch pad at memory position 0.\n            calldatacopy(0, 0, calldatasize())\n\n            // Call the implementation.\n            // out and outsize are 0 because we don't know the size yet.\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n            // Copy the returned data.\n            returndatacopy(0, 0, returndatasize())\n\n            switch result\n            // delegatecall returns 0 on error.\n            case 0 {\n                revert(0, returndatasize())\n            }\n            default {\n                return(0, returndatasize())\n            }\n        }\n    }\n\n    /**\n     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\n     * and {_fallback} should delegate.\n     */\n    function _implementation() internal view virtual returns (address);\n\n    /**\n     * @dev Delegates the current call to the address returned by `_implementation()`.\n     *\n     * This function does not return to its internal call site, it will return directly to the external caller.\n     */\n    function _fallback() internal virtual {\n        _beforeFallback();\n        _delegate(_implementation());\n    }\n\n    /**\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n     * function in the contract matches the call data.\n     */\n    fallback() external payable virtual {\n        _fallback();\n    }\n\n    /**\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n     * is empty.\n     */\n    receive() external payable virtual {\n        _fallback();\n    }\n\n    /**\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n     * call, or as part of the Solidity `fallback` or `receive` functions.\n     *\n     * If overridden should call `super._beforeFallback()`.\n     */\n    function _beforeFallback() internal virtual {}\n}\n"},"@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n    /**\n     * @dev Returns the current implementation of `proxy`.\n     *\n     * Requirements:\n     *\n     * - This contract must be the admin of `proxy`.\n     */\n    function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n        // We need to manually run the static call since the getter cannot be flagged as view\n        // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n        (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n        require(success);\n        return abi.decode(returndata, (address));\n    }\n\n    /**\n     * @dev Returns the current admin of `proxy`.\n     *\n     * Requirements:\n     *\n     * - This contract must be the admin of `proxy`.\n     */\n    function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n        // We need to manually run the static call since the getter cannot be flagged as view\n        // bytes4(keccak256(\"admin()\")) == 0xf851a440\n        (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n        require(success);\n        return abi.decode(returndata, (address));\n    }\n\n    /**\n     * @dev Changes the admin of `proxy` to `newAdmin`.\n     *\n     * Requirements:\n     *\n     * - This contract must be the current admin of `proxy`.\n     */\n    function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n        proxy.changeAdmin(newAdmin);\n    }\n\n    /**\n     * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n     *\n     * Requirements:\n     *\n     * - This contract must be the admin of `proxy`.\n     */\n    function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n        proxy.upgradeTo(implementation);\n    }\n\n    /**\n     * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n     * {TransparentUpgradeableProxy-upgradeToAndCall}.\n     *\n     * Requirements:\n     *\n     * - This contract must be the admin of `proxy`.\n     */\n    function upgradeAndCall(\n        TransparentUpgradeableProxy proxy,\n        address implementation,\n        bytes memory data\n    ) public payable virtual onlyOwner {\n        proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n    }\n}\n"},"@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n    /**\n     * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n     * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n     */\n    constructor(\n        address _logic,\n        address admin_,\n        bytes memory _data\n    ) payable ERC1967Proxy(_logic, _data) {\n        _changeAdmin(admin_);\n    }\n\n    /**\n     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n     */\n    modifier ifAdmin() {\n        if (msg.sender == _getAdmin()) {\n            _;\n        } else {\n            _fallback();\n        }\n    }\n\n    /**\n     * @dev Returns the current admin.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n     *\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n     */\n    function admin() external ifAdmin returns (address admin_) {\n        admin_ = _getAdmin();\n    }\n\n    /**\n     * @dev Returns the current implementation.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n     *\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n     */\n    function implementation() external ifAdmin returns (address implementation_) {\n        implementation_ = _implementation();\n    }\n\n    /**\n     * @dev Changes the admin of the proxy.\n     *\n     * Emits an {AdminChanged} event.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n     */\n    function changeAdmin(address newAdmin) external virtual ifAdmin {\n        _changeAdmin(newAdmin);\n    }\n\n    /**\n     * @dev Upgrade the implementation of the proxy.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n     */\n    function upgradeTo(address newImplementation) external ifAdmin {\n        _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n    }\n\n    /**\n     * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n     * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n     * proxied contract.\n     *\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n     */\n    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n        _upgradeToAndCall(newImplementation, data, true);\n    }\n\n    /**\n     * @dev Returns the current admin.\n     */\n    function _admin() internal view virtual returns (address) {\n        return _getAdmin();\n    }\n\n    /**\n     * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n     */\n    function _beforeFallback() internal virtual override {\n        require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n        super._beforeFallback();\n    }\n}\n"},"@openzeppelin/contracts/security/Pausable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n    /**\n     * @dev Emitted when the pause is triggered by `account`.\n     */\n    event Paused(address account);\n\n    /**\n     * @dev Emitted when the pause is lifted by `account`.\n     */\n    event Unpaused(address account);\n\n    bool private _paused;\n\n    /**\n     * @dev Initializes the contract in unpaused state.\n     */\n    constructor() {\n        _paused = false;\n    }\n\n    /**\n     * @dev Modifier to make a function callable only when the contract is not paused.\n     *\n     * Requirements:\n     *\n     * - The contract must not be paused.\n     */\n    modifier whenNotPaused() {\n        _requireNotPaused();\n        _;\n    }\n\n    /**\n     * @dev Modifier to make a function callable only when the contract is paused.\n     *\n     * Requirements:\n     *\n     * - The contract must be paused.\n     */\n    modifier whenPaused() {\n        _requirePaused();\n        _;\n    }\n\n    /**\n     * @dev Returns true if the contract is paused, and false otherwise.\n     */\n    function paused() public view virtual returns (bool) {\n        return _paused;\n    }\n\n    /**\n     * @dev Throws if the contract is paused.\n     */\n    function _requireNotPaused() internal view virtual {\n        require(!paused(), \"Pausable: paused\");\n    }\n\n    /**\n     * @dev Throws if the contract is not paused.\n     */\n    function _requirePaused() internal view virtual {\n        require(paused(), \"Pausable: not paused\");\n    }\n\n    /**\n     * @dev Triggers stopped state.\n     *\n     * Requirements:\n     *\n     * - The contract must not be paused.\n     */\n    function _pause() internal virtual whenNotPaused {\n        _paused = true;\n        emit Paused(_msgSender());\n    }\n\n    /**\n     * @dev Returns to normal state.\n     *\n     * Requirements:\n     *\n     * - The contract must be paused.\n     */\n    function _unpause() internal virtual whenPaused {\n        _paused = false;\n        emit Unpaused(_msgSender());\n    }\n}\n"},"@openzeppelin/contracts/security/ReentrancyGuard.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n    // Booleans are more expensive than uint256 or any type that takes up a full\n    // word because each write operation emits an extra SLOAD to first read the\n    // slot's contents, replace the bits taken up by the boolean, and then write\n    // back. This is the compiler's defense against contract upgrades and\n    // pointer aliasing, and it cannot be disabled.\n\n    // The values being non-zero value makes deployment a bit more expensive,\n    // but in exchange the refund on every call to nonReentrant will be lower in\n    // amount. Since refunds are capped to a percentage of the total\n    // transaction's gas, it is best to keep them low in cases like this one, to\n    // increase the likelihood of the full refund coming into effect.\n    uint256 private constant _NOT_ENTERED = 1;\n    uint256 private constant _ENTERED = 2;\n\n    uint256 private _status;\n\n    constructor() {\n        _status = _NOT_ENTERED;\n    }\n\n    /**\n     * @dev Prevents a contract from calling itself, directly or indirectly.\n     * Calling a `nonReentrant` function from another `nonReentrant`\n     * function is not supported. It is possible to prevent this from happening\n     * by making the `nonReentrant` function external, and making it call a\n     * `private` function that does the actual work.\n     */\n    modifier nonReentrant() {\n        _nonReentrantBefore();\n        _;\n        _nonReentrantAfter();\n    }\n\n    function _nonReentrantBefore() private {\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\n        require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n        // Any calls to nonReentrant after this point will fail\n        _status = _ENTERED;\n    }\n\n    function _nonReentrantAfter() private {\n        // By storing the original value once again, a refund is triggered (see\n        // https://eips.ethereum.org/EIPS/eip-2200)\n        _status = _NOT_ENTERED;\n    }\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n */\ninterface IERC20Permit {\n    /**\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n     * given ``owner``'s signed approval.\n     *\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\n     * ordering also apply here.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     * - `deadline` must be a timestamp in the future.\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n     * over the EIP712-formatted function arguments.\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\n     *\n     * For more information on the signature format, see the\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n     * section].\n     */\n    function permit(\n        address owner,\n        address spender,\n        uint256 value,\n        uint256 deadline,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) external;\n\n    /**\n     * @dev Returns the current nonce for `owner`. This value must be\n     * included whenever a signature is generated for {permit}.\n     *\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\n     * prevents a signature from being used multiple times.\n     */\n    function nonces(address owner) external view returns (uint256);\n\n    /**\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\n     */\n    // solhint-disable-next-line func-name-mixedcase\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n *\n * _Available since v4.1._\n */\ninterface IERC20Metadata is IERC20 {\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the symbol of the token.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the decimals places of the token.\n     */\n    function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the amount of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the amount of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves `amount` tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Moves `amount` tokens from `from` to `to` using the\n     * allowance mechanism. `amount` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(\n        address from,\n        address to,\n        uint256 amount\n    ) external returns (bool);\n}\n"},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../IERC20.sol\";\nimport \"../extensions/draft-IERC20Permit.sol\";\nimport \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n    using Address for address;\n\n    function safeTransfer(\n        IERC20 token,\n        address to,\n        uint256 value\n    ) internal {\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\n    }\n\n    function safeTransferFrom(\n        IERC20 token,\n        address from,\n        address to,\n        uint256 value\n    ) internal {\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\n    }\n\n    /**\n     * @dev Deprecated. This function has issues similar to the ones found in\n     * {IERC20-approve}, and its usage is discouraged.\n     *\n     * Whenever possible, use {safeIncreaseAllowance} and\n     * {safeDecreaseAllowance} instead.\n     */\n    function safeApprove(\n        IERC20 token,\n        address spender,\n        uint256 value\n    ) internal {\n        // safeApprove should only be called when setting an initial allowance,\n        // or when resetting it to zero. To increase and decrease it, use\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\n        require(\n            (value == 0) || (token.allowance(address(this), spender) == 0),\n            \"SafeERC20: approve from non-zero to non-zero allowance\"\n        );\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\n    }\n\n    function safeIncreaseAllowance(\n        IERC20 token,\n        address spender,\n        uint256 value\n    ) internal {\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n    }\n\n    function safeDecreaseAllowance(\n        IERC20 token,\n        address spender,\n        uint256 value\n    ) internal {\n        unchecked {\n            uint256 oldAllowance = token.allowance(address(this), spender);\n            require(oldAllowance >= value, \"SafeERC20: decreased allowance below zero\");\n            uint256 newAllowance = oldAllowance - value;\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n        }\n    }\n\n    function safePermit(\n        IERC20Permit token,\n        address owner,\n        address spender,\n        uint256 value,\n        uint256 deadline,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) internal {\n        uint256 nonceBefore = token.nonces(owner);\n        token.permit(owner, spender, value, deadline, v, r, s);\n        uint256 nonceAfter = token.nonces(owner);\n        require(nonceAfter == nonceBefore + 1, \"SafeERC20: permit did not succeed\");\n    }\n\n    /**\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\n     * @param token The token targeted by the call.\n     * @param data The call data (encoded using abi.encode or one of its variants).\n     */\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\n        // the target address contains contract code and also asserts for success in the low-level call.\n\n        bytes memory returndata = address(token).functionCall(data, \"SafeERC20: low-level call failed\");\n        if (returndata.length > 0) {\n            // Return data is optional\n            require(abi.decode(returndata, (bool)), \"SafeERC20: ERC20 operation did not succeed\");\n        }\n    }\n}\n"},"@openzeppelin/contracts/utils/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev Returns true if `account` is a contract.\n     *\n     * [IMPORTANT]\n     * ====\n     * It is unsafe to assume that an address for which this function returns\n     * false is an externally-owned account (EOA) and not a contract.\n     *\n     * Among others, `isContract` will return false for the following\n     * types of addresses:\n     *\n     *  - an externally-owned account\n     *  - a contract in construction\n     *  - an address where a contract will be created\n     *  - an address where a contract lived, but was destroyed\n     * ====\n     *\n     * [IMPORTANT]\n     * ====\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\n     *\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n     * constructor.\n     * ====\n     */\n    function isContract(address account) internal view returns (bool) {\n        // This method relies on extcodesize/address.code.length, which returns 0\n        // for contracts in construction, since the code is only stored at the end\n        // of the constructor execution.\n\n        return account.code.length > 0;\n    }\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n        (bool success, ) = recipient.call{value: amount}(\"\");\n        require(success, \"Address: unable to send value, recipient may have reverted\");\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain `call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason, it is bubbled up by this\n     * function (like regular Solidity function calls).\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, \"Address: low-level call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n     * `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(\n        address target,\n        bytes memory data,\n        uint256 value\n    ) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(\n        address target,\n        bytes memory data,\n        uint256 value,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        require(address(this).balance >= value, \"Address: insufficient balance for call\");\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        return functionStaticCall(target, data, \"Address: low-level static call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal view returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n     *\n     * _Available since v4.8._\n     */\n    function verifyCallResultFromTarget(\n        address target,\n        bool success,\n        bytes memory returndata,\n        string memory errorMessage\n    ) internal view returns (bytes memory) {\n        if (success) {\n            if (returndata.length == 0) {\n                // only check isContract if the call was successful and the return data is empty\n                // otherwise we already know that it was a contract\n                require(isContract(target), \"Address: call to non-contract\");\n            }\n            return returndata;\n        } else {\n            _revert(returndata, errorMessage);\n        }\n    }\n\n    /**\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n     * revert reason or using the provided one.\n     *\n     * _Available since v4.3._\n     */\n    function verifyCallResult(\n        bool success,\n        bytes memory returndata,\n        string memory errorMessage\n    ) internal pure returns (bytes memory) {\n        if (success) {\n            return returndata;\n        } else {\n            _revert(returndata, errorMessage);\n        }\n    }\n\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\n        // Look for revert reason and bubble it up if present\n        if (returndata.length > 0) {\n            // The easiest way to bubble the revert reason is using memory via assembly\n            /// @solidity memory-safe-assembly\n            assembly {\n                let returndata_size := mload(returndata)\n                revert(add(32, returndata), returndata_size)\n            }\n        } else {\n            revert(errorMessage);\n        }\n    }\n}\n"},"@openzeppelin/contracts/utils/Context.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n}\n"},"@openzeppelin/contracts/utils/Counters.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @title Counters\n * @author Matt Condon (@shrugs)\n * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\n * of elements in a mapping, issuing ERC721 ids, or counting request ids.\n *\n * Include with `using Counters for Counters.Counter;`\n */\nlibrary Counters {\n    struct Counter {\n        // This variable should never be directly accessed by users of the library: interactions must be restricted to\n        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add\n        // this feature: see https://github.com/ethereum/solidity/issues/4637\n        uint256 _value; // default: 0\n    }\n\n    function current(Counter storage counter) internal view returns (uint256) {\n        return counter._value;\n    }\n\n    function increment(Counter storage counter) internal {\n        unchecked {\n            counter._value += 1;\n        }\n    }\n\n    function decrement(Counter storage counter) internal {\n        uint256 value = counter._value;\n        require(value > 0, \"Counter: decrement overflow\");\n        unchecked {\n            counter._value = value - 1;\n        }\n    }\n\n    function reset(Counter storage counter) internal {\n        counter._value = 0;\n    }\n}\n"},"@openzeppelin/contracts/utils/cryptography/ECDSA.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Strings.sol\";\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n    enum RecoverError {\n        NoError,\n        InvalidSignature,\n        InvalidSignatureLength,\n        InvalidSignatureS,\n        InvalidSignatureV // Deprecated in v4.8\n    }\n\n    function _throwError(RecoverError error) private pure {\n        if (error == RecoverError.NoError) {\n            return; // no error: do nothing\n        } else if (error == RecoverError.InvalidSignature) {\n            revert(\"ECDSA: invalid signature\");\n        } else if (error == RecoverError.InvalidSignatureLength) {\n            revert(\"ECDSA: invalid signature length\");\n        } else if (error == RecoverError.InvalidSignatureS) {\n            revert(\"ECDSA: invalid signature 's' value\");\n        }\n    }\n\n    /**\n     * @dev Returns the address that signed a hashed message (`hash`) with\n     * `signature` or error string. This address can then be used for verification purposes.\n     *\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n     * this function rejects them by requiring the `s` value to be in the lower\n     * half order, and the `v` value to be either 27 or 28.\n     *\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n     * verification to be secure: it is possible to craft signatures that\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n     * this is by receiving a hash of the original message (which may otherwise\n     * be too long), and then calling {toEthSignedMessageHash} on it.\n     *\n     * Documentation for signature generation:\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n     *\n     * _Available since v4.3._\n     */\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\n        if (signature.length == 65) {\n            bytes32 r;\n            bytes32 s;\n            uint8 v;\n            // ecrecover takes the signature parameters, and the only way to get them\n            // currently is to use assembly.\n            /// @solidity memory-safe-assembly\n            assembly {\n                r := mload(add(signature, 0x20))\n                s := mload(add(signature, 0x40))\n                v := byte(0, mload(add(signature, 0x60)))\n            }\n            return tryRecover(hash, v, r, s);\n        } else {\n            return (address(0), RecoverError.InvalidSignatureLength);\n        }\n    }\n\n    /**\n     * @dev Returns the address that signed a hashed message (`hash`) with\n     * `signature`. This address can then be used for verification purposes.\n     *\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n     * this function rejects them by requiring the `s` value to be in the lower\n     * half order, and the `v` value to be either 27 or 28.\n     *\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n     * verification to be secure: it is possible to craft signatures that\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n     * this is by receiving a hash of the original message (which may otherwise\n     * be too long), and then calling {toEthSignedMessageHash} on it.\n     */\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\n        _throwError(error);\n        return recovered;\n    }\n\n    /**\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n     *\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n     *\n     * _Available since v4.3._\n     */\n    function tryRecover(\n        bytes32 hash,\n        bytes32 r,\n        bytes32 vs\n    ) internal pure returns (address, RecoverError) {\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\n        return tryRecover(hash, v, r, s);\n    }\n\n    /**\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n     *\n     * _Available since v4.2._\n     */\n    function recover(\n        bytes32 hash,\n        bytes32 r,\n        bytes32 vs\n    ) internal pure returns (address) {\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\n        _throwError(error);\n        return recovered;\n    }\n\n    /**\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n     * `r` and `s` signature fields separately.\n     *\n     * _Available since v4.3._\n     */\n    function tryRecover(\n        bytes32 hash,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) internal pure returns (address, RecoverError) {\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n        //\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n        // these malleable signatures as well.\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n            return (address(0), RecoverError.InvalidSignatureS);\n        }\n\n        // If the signature is valid (and not malleable), return the signer address\n        address signer = ecrecover(hash, v, r, s);\n        if (signer == address(0)) {\n            return (address(0), RecoverError.InvalidSignature);\n        }\n\n        return (signer, RecoverError.NoError);\n    }\n\n    /**\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\n     * `r` and `s` signature fields separately.\n     */\n    function recover(\n        bytes32 hash,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) internal pure returns (address) {\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\n        _throwError(error);\n        return recovered;\n    }\n\n    /**\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n     * produces hash corresponding to the one signed with the\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n     * JSON-RPC method as part of EIP-191.\n     *\n     * See {recover}.\n     */\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n        // 32 is the length in bytes of hash,\n        // enforced by the type signature above\n        return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n    }\n\n    /**\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\n     * produces hash corresponding to the one signed with the\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n     * JSON-RPC method as part of EIP-191.\n     *\n     * See {recover}.\n     */\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\n        return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n\", Strings.toString(s.length), s));\n    }\n\n    /**\n     * @dev Returns an Ethereum Signed Typed Data, created from a\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\n     * to the one signed with the\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\n     * JSON-RPC method as part of EIP-712.\n     *\n     * See {recover}.\n     */\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\n        return keccak256(abi.encodePacked(\"\\x19\\x01\", domainSeparator, structHash));\n    }\n}\n"},"@openzeppelin/contracts/utils/cryptography/EIP712.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ECDSA.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712 {\n    /* solhint-disable var-name-mixedcase */\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n    // invalidate the cached domain separator if the chain id changes.\n    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\n    uint256 private immutable _CACHED_CHAIN_ID;\n    address private immutable _CACHED_THIS;\n\n    bytes32 private immutable _HASHED_NAME;\n    bytes32 private immutable _HASHED_VERSION;\n    bytes32 private immutable _TYPE_HASH;\n\n    /* solhint-enable var-name-mixedcase */\n\n    /**\n     * @dev Initializes the domain separator and parameter caches.\n     *\n     * The meaning of `name` and `version` is specified in\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n     *\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n     * - `version`: the current major version of the signing domain.\n     *\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n     * contract upgrade].\n     */\n    constructor(string memory name, string memory version) {\n        bytes32 hashedName = keccak256(bytes(name));\n        bytes32 hashedVersion = keccak256(bytes(version));\n        bytes32 typeHash = keccak256(\n            \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"\n        );\n        _HASHED_NAME = hashedName;\n        _HASHED_VERSION = hashedVersion;\n        _CACHED_CHAIN_ID = block.chainid;\n        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\n        _CACHED_THIS = address(this);\n        _TYPE_HASH = typeHash;\n    }\n\n    /**\n     * @dev Returns the domain separator for the current chain.\n     */\n    function _domainSeparatorV4() internal view returns (bytes32) {\n        if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\n            return _CACHED_DOMAIN_SEPARATOR;\n        } else {\n            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\n        }\n    }\n\n    function _buildDomainSeparator(\n        bytes32 typeHash,\n        bytes32 nameHash,\n        bytes32 versionHash\n    ) private view returns (bytes32) {\n        return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\n    }\n\n    /**\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n     * function returns the hash of the fully encoded EIP712 message for this domain.\n     *\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n     *\n     * ```solidity\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n     *     keccak256(\"Mail(address to,string contents)\"),\n     *     mailTo,\n     *     keccak256(bytes(mailContents))\n     * )));\n     * address signer = ECDSA.recover(digest, signature);\n     * ```\n     */\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\n    }\n}\n"},"@openzeppelin/contracts/utils/math/Math.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n    enum Rounding {\n        Down, // Toward negative infinity\n        Up, // Toward infinity\n        Zero // Toward zero\n    }\n\n    /**\n     * @dev Returns the largest of two numbers.\n     */\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\n        return a > b ? a : b;\n    }\n\n    /**\n     * @dev Returns the smallest of two numbers.\n     */\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\n        return a < b ? a : b;\n    }\n\n    /**\n     * @dev Returns the average of two numbers. The result is rounded towards\n     * zero.\n     */\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\n        // (a + b) / 2 can overflow.\n        return (a & b) + (a ^ b) / 2;\n    }\n\n    /**\n     * @dev Returns the ceiling of the division of two numbers.\n     *\n     * This differs from standard division with `/` in that it rounds up instead\n     * of rounding down.\n     */\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n        // (a + b - 1) / b can overflow on addition, so we distribute.\n        return a == 0 ? 0 : (a - 1) / b + 1;\n    }\n\n    /**\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n     * with further edits by Uniswap Labs also under MIT license.\n     */\n    function mulDiv(\n        uint256 x,\n        uint256 y,\n        uint256 denominator\n    ) internal pure returns (uint256 result) {\n        unchecked {\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n            // variables such that product = prod1 * 2^256 + prod0.\n            uint256 prod0; // Least significant 256 bits of the product\n            uint256 prod1; // Most significant 256 bits of the product\n            assembly {\n                let mm := mulmod(x, y, not(0))\n                prod0 := mul(x, y)\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n            }\n\n            // Handle non-overflow cases, 256 by 256 division.\n            if (prod1 == 0) {\n                return prod0 / denominator;\n            }\n\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\n            require(denominator > prod1);\n\n            ///////////////////////////////////////////////\n            // 512 by 256 division.\n            ///////////////////////////////////////////////\n\n            // Make division exact by subtracting the remainder from [prod1 prod0].\n            uint256 remainder;\n            assembly {\n                // Compute remainder using mulmod.\n                remainder := mulmod(x, y, denominator)\n\n                // Subtract 256 bit number from 512 bit number.\n                prod1 := sub(prod1, gt(remainder, prod0))\n                prod0 := sub(prod0, remainder)\n            }\n\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\n            // See https://cs.stackexchange.com/q/138556/92363.\n\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\n            uint256 twos = denominator & (~denominator + 1);\n            assembly {\n                // Divide denominator by twos.\n                denominator := div(denominator, twos)\n\n                // Divide [prod1 prod0] by twos.\n                prod0 := div(prod0, twos)\n\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n                twos := add(div(sub(0, twos), twos), 1)\n            }\n\n            // Shift in bits from prod1 into prod0.\n            prod0 |= prod1 * twos;\n\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n            // four bits. That is, denominator * inv = 1 mod 2^4.\n            uint256 inverse = (3 * denominator) ^ 2;\n\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\n            // in modular arithmetic, doubling the correct bits in each step.\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n            // is no longer required.\n            result = prod0 * inverse;\n            return result;\n        }\n    }\n\n    /**\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n     */\n    function mulDiv(\n        uint256 x,\n        uint256 y,\n        uint256 denominator,\n        Rounding rounding\n    ) internal pure returns (uint256) {\n        uint256 result = mulDiv(x, y, denominator);\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\n            result += 1;\n        }\n        return result;\n    }\n\n    /**\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n     *\n     * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n     */\n    function sqrt(uint256 a) internal pure returns (uint256) {\n        if (a == 0) {\n            return 0;\n        }\n\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n        //\n        // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n        //\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n        //\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n        uint256 result = 1 << (log2(a) >> 1);\n\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n        // into the expected uint128 result.\n        unchecked {\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            result = (result + a / result) >> 1;\n            return min(result, a / result);\n        }\n    }\n\n    /**\n     * @notice Calculates sqrt(a), following the selected rounding direction.\n     */\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = sqrt(a);\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\n        }\n    }\n\n    /**\n     * @dev Return the log in base 2, rounded down, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log2(uint256 value) internal pure returns (uint256) {\n        uint256 result = 0;\n        unchecked {\n            if (value >> 128 > 0) {\n                value >>= 128;\n                result += 128;\n            }\n            if (value >> 64 > 0) {\n                value >>= 64;\n                result += 64;\n            }\n            if (value >> 32 > 0) {\n                value >>= 32;\n                result += 32;\n            }\n            if (value >> 16 > 0) {\n                value >>= 16;\n                result += 16;\n            }\n            if (value >> 8 > 0) {\n                value >>= 8;\n                result += 8;\n            }\n            if (value >> 4 > 0) {\n                value >>= 4;\n                result += 4;\n            }\n            if (value >> 2 > 0) {\n                value >>= 2;\n                result += 2;\n            }\n            if (value >> 1 > 0) {\n                result += 1;\n            }\n        }\n        return result;\n    }\n\n    /**\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = log2(value);\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\n        }\n    }\n\n    /**\n     * @dev Return the log in base 10, rounded down, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log10(uint256 value) internal pure returns (uint256) {\n        uint256 result = 0;\n        unchecked {\n            if (value >= 10**64) {\n                value /= 10**64;\n                result += 64;\n            }\n            if (value >= 10**32) {\n                value /= 10**32;\n                result += 32;\n            }\n            if (value >= 10**16) {\n                value /= 10**16;\n                result += 16;\n            }\n            if (value >= 10**8) {\n                value /= 10**8;\n                result += 8;\n            }\n            if (value >= 10**4) {\n                value /= 10**4;\n                result += 4;\n            }\n            if (value >= 10**2) {\n                value /= 10**2;\n                result += 2;\n            }\n            if (value >= 10**1) {\n                result += 1;\n            }\n        }\n        return result;\n    }\n\n    /**\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = log10(value);\n            return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\n        }\n    }\n\n    /**\n     * @dev Return the log in base 256, rounded down, of a positive value.\n     * Returns 0 if given 0.\n     *\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n     */\n    function log256(uint256 value) internal pure returns (uint256) {\n        uint256 result = 0;\n        unchecked {\n            if (value >> 128 > 0) {\n                value >>= 128;\n                result += 16;\n            }\n            if (value >> 64 > 0) {\n                value >>= 64;\n                result += 8;\n            }\n            if (value >> 32 > 0) {\n                value >>= 32;\n                result += 4;\n            }\n            if (value >> 16 > 0) {\n                value >>= 16;\n                result += 2;\n            }\n            if (value >> 8 > 0) {\n                result += 1;\n            }\n        }\n        return result;\n    }\n\n    /**\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = log256(value);\n            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\n        }\n    }\n}\n"},"@openzeppelin/contracts/utils/StorageSlot.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n *     function _getImplementation() internal view returns (address) {\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n *     }\n *\n *     function _setImplementation(address newImplementation) internal {\n *         require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n *     }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n    struct AddressSlot {\n        address value;\n    }\n\n    struct BooleanSlot {\n        bool value;\n    }\n\n    struct Bytes32Slot {\n        bytes32 value;\n    }\n\n    struct Uint256Slot {\n        uint256 value;\n    }\n\n    /**\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n     */\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n     */\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n     */\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n     */\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n}\n"},"@openzeppelin/contracts/utils/Strings.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./math/Math.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n    bytes16 private constant _SYMBOLS = \"0123456789abcdef\";\n    uint8 private constant _ADDRESS_LENGTH = 20;\n\n    /**\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n     */\n    function toString(uint256 value) internal pure returns (string memory) {\n        unchecked {\n            uint256 length = Math.log10(value) + 1;\n            string memory buffer = new string(length);\n            uint256 ptr;\n            /// @solidity memory-safe-assembly\n            assembly {\n                ptr := add(buffer, add(32, length))\n            }\n            while (true) {\n                ptr--;\n                /// @solidity memory-safe-assembly\n                assembly {\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\n                }\n                value /= 10;\n                if (value == 0) break;\n            }\n            return buffer;\n        }\n    }\n\n    /**\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n     */\n    function toHexString(uint256 value) internal pure returns (string memory) {\n        unchecked {\n            return toHexString(value, Math.log256(value) + 1);\n        }\n    }\n\n    /**\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n     */\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n        bytes memory buffer = new bytes(2 * length + 2);\n        buffer[0] = \"0\";\n        buffer[1] = \"x\";\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\n            buffer[i] = _SYMBOLS[value & 0xf];\n            value >>= 4;\n        }\n        require(value == 0, \"Strings: hex length insufficient\");\n        return string(buffer);\n    }\n\n    /**\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\n     */\n    function toHexString(address addr) internal pure returns (string memory) {\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n    }\n}\n"},"@openzeppelin/contracts/vendor/arbitrum/IArbSys.sol":{"content":"// Copyright 2021-2022, Offchain Labs, Inc.\n// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE\n// SPDX-License-Identifier: BUSL-1.1\n// OpenZeppelin Contracts (last updated v4.8.0) (vendor/arbitrum/IArbSys.sol)\n\npragma solidity >=0.4.21 <0.9.0;\n\n/**\n * @title System level functionality\n * @notice For use by contracts to interact with core L2-specific functionality.\n * Precompiled contract that exists in every Arbitrum chain at address(100), 0x0000000000000000000000000000000000000064.\n */\ninterface IArbSys {\n    /**\n     * @notice Get Arbitrum block number (distinct from L1 block number; Arbitrum genesis block has block number 0)\n     * @return block number as int\n     */\n    function arbBlockNumber() external view returns (uint256);\n\n    /**\n     * @notice Get Arbitrum block hash (reverts unless currentBlockNum-256 <= arbBlockNum < currentBlockNum)\n     * @return block hash\n     */\n    function arbBlockHash(uint256 arbBlockNum) external view returns (bytes32);\n\n    /**\n     * @notice Gets the rollup's unique chain identifier\n     * @return Chain identifier as int\n     */\n    function arbChainID() external view returns (uint256);\n\n    /**\n     * @notice Get internal version number identifying an ArbOS build\n     * @return version number as int\n     */\n    function arbOSVersion() external view returns (uint256);\n\n    /**\n     * @notice Returns 0 since Nitro has no concept of storage gas\n     * @return uint 0\n     */\n    function getStorageGasAvailable() external view returns (uint256);\n\n    /**\n     * @notice (deprecated) check if current call is top level (meaning it was triggered by an EoA or a L1 contract)\n     * @dev this call has been deprecated and may be removed in a future release\n     * @return true if current execution frame is not a call by another L2 contract\n     */\n    function isTopLevelCall() external view returns (bool);\n\n    /**\n     * @notice map L1 sender contract address to its L2 alias\n     * @param sender sender address\n     * @param unused argument no longer used\n     * @return aliased sender address\n     */\n    function mapL1SenderContractAddressToL2Alias(address sender, address unused) external pure returns (address);\n\n    /**\n     * @notice check if the caller (of this caller of this) is an aliased L1 contract address\n     * @return true iff the caller's address is an alias for an L1 contract address\n     */\n    function wasMyCallersAddressAliased() external view returns (bool);\n\n    /**\n     * @notice return the address of the caller (of this caller of this), without applying L1 contract address aliasing\n     * @return address of the caller's caller, without applying L1 contract address aliasing\n     */\n    function myCallersAddressWithoutAliasing() external view returns (address);\n\n    /**\n     * @notice Send given amount of Eth to dest from sender.\n     * This is a convenience function, which is equivalent to calling sendTxToL1 with empty data.\n     * @param destination recipient address on L1\n     * @return unique identifier for this L2-to-L1 transaction.\n     */\n    function withdrawEth(address destination) external payable returns (uint256);\n\n    /**\n     * @notice Send a transaction to L1\n     * @dev it is not possible to execute on the L1 any L2-to-L1 transaction which contains data\n     * to a contract address without any code (as enforced by the Bridge contract).\n     * @param destination recipient address on L1\n     * @param data (optional) calldata for L1 contract call\n     * @return a unique identifier for this L2-to-L1 transaction.\n     */\n    function sendTxToL1(address destination, bytes calldata data) external payable returns (uint256);\n\n    /**\n     * @notice Get send Merkle tree state\n     * @return size number of sends in the history\n     * @return root root hash of the send history\n     * @return partials hashes of partial subtrees in the send history tree\n     */\n    function sendMerkleTreeState()\n        external\n        view\n        returns (\n            uint256 size,\n            bytes32 root,\n            bytes32[] memory partials\n        );\n\n    /**\n     * @notice creates a send txn from L2 to L1\n     * @param position = (level << 192) + leaf = (0 << 192) + leaf = leaf\n     */\n    event L2ToL1Tx(\n        address caller,\n        address indexed destination,\n        uint256 indexed hash,\n        uint256 indexed position,\n        uint256 arbBlockNum,\n        uint256 ethBlockNum,\n        uint256 timestamp,\n        uint256 callvalue,\n        bytes data\n    );\n\n    /// @dev DEPRECATED in favour of the new L2ToL1Tx event above after the nitro upgrade\n    event L2ToL1Transaction(\n        address caller,\n        address indexed destination,\n        uint256 indexed uniqueId,\n        uint256 indexed batchNumber,\n        uint256 indexInBatch,\n        uint256 arbBlockNum,\n        uint256 ethBlockNum,\n        uint256 timestamp,\n        uint256 callvalue,\n        bytes data\n    );\n\n    /**\n     * @notice logs a merkle branch for proof synthesis\n     * @param reserved an index meant only to align the 4th index with L2ToL1Transaction's 4th event\n     * @param hash the merkle hash\n     * @param position = (level << 192) + leaf\n     */\n    event SendMerkleUpdate(uint256 indexed reserved, bytes32 indexed hash, uint256 indexed position);\n}\n"},"@openzeppelin/contracts/vendor/arbitrum/IBridge.sol":{"content":"// Copyright 2021-2022, Offchain Labs, Inc.\n// For license information, see https://github.com/nitro/blob/master/LICENSE\n// SPDX-License-Identifier: BUSL-1.1\n// OpenZeppelin Contracts (last updated v4.8.0) (vendor/arbitrum/IBridge.sol)\n\n// solhint-disable-next-line compiler-version\npragma solidity >=0.6.9 <0.9.0;\n\ninterface IBridge {\n    event MessageDelivered(\n        uint256 indexed messageIndex,\n        bytes32 indexed beforeInboxAcc,\n        address inbox,\n        uint8 kind,\n        address sender,\n        bytes32 messageDataHash,\n        uint256 baseFeeL1,\n        uint64 timestamp\n    );\n\n    event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data);\n\n    event InboxToggle(address indexed inbox, bool enabled);\n\n    event OutboxToggle(address indexed outbox, bool enabled);\n\n    event SequencerInboxUpdated(address newSequencerInbox);\n\n    function allowedDelayedInboxList(uint256) external returns (address);\n\n    function allowedOutboxList(uint256) external returns (address);\n\n    /// @dev Accumulator for delayed inbox messages; tail represents hash of the current state; each element represents the inclusion of a new message.\n    function delayedInboxAccs(uint256) external view returns (bytes32);\n\n    /// @dev Accumulator for sequencer inbox messages; tail represents hash of the current state; each element represents the inclusion of a new message.\n    function sequencerInboxAccs(uint256) external view returns (bytes32);\n\n    // OpenZeppelin: changed return type from IOwnable\n    function rollup() external view returns (address);\n\n    function sequencerInbox() external view returns (address);\n\n    function activeOutbox() external view returns (address);\n\n    function allowedDelayedInboxes(address inbox) external view returns (bool);\n\n    function allowedOutboxes(address outbox) external view returns (bool);\n\n    function sequencerReportedSubMessageCount() external view returns (uint256);\n\n    /**\n     * @dev Enqueue a message in the delayed inbox accumulator.\n     *      These messages are later sequenced in the SequencerInbox, either\n     *      by the sequencer as part of a normal batch, or by force inclusion.\n     */\n    function enqueueDelayedMessage(\n        uint8 kind,\n        address sender,\n        bytes32 messageDataHash\n    ) external payable returns (uint256);\n\n    function executeCall(\n        address to,\n        uint256 value,\n        bytes calldata data\n    ) external returns (bool success, bytes memory returnData);\n\n    function delayedMessageCount() external view returns (uint256);\n\n    function sequencerMessageCount() external view returns (uint256);\n\n    // ---------- onlySequencerInbox functions ----------\n\n    function enqueueSequencerMessage(\n        bytes32 dataHash,\n        uint256 afterDelayedMessagesRead,\n        uint256 prevMessageCount,\n        uint256 newMessageCount\n    )\n        external\n        returns (\n            uint256 seqMessageIndex,\n            bytes32 beforeAcc,\n            bytes32 delayedAcc,\n            bytes32 acc\n        );\n\n    /**\n     * @dev Allows the sequencer inbox to submit a delayed message of the batchPostingReport type\n     *      This is done through a separate function entrypoint instead of allowing the sequencer inbox\n     *      to call `enqueueDelayedMessage` to avoid the gas overhead of an extra SLOAD in either\n     *      every delayed inbox or every sequencer inbox call.\n     */\n    function submitBatchSpendingReport(address batchPoster, bytes32 dataHash) external returns (uint256 msgNum);\n\n    // ---------- onlyRollupOrOwner functions ----------\n\n    function setSequencerInbox(address _sequencerInbox) external;\n\n    function setDelayedInbox(address inbox, bool enabled) external;\n\n    function setOutbox(address inbox, bool enabled) external;\n\n    // ---------- initializer ----------\n\n    // OpenZeppelin: changed rollup_ type from IOwnable\n    function initialize(address rollup_) external;\n}\n"},"@openzeppelin/contracts/vendor/arbitrum/IOutbox.sol":{"content":"// Copyright 2021-2022, Offchain Labs, Inc.\n// For license information, see https://github.com/nitro/blob/master/LICENSE\n// SPDX-License-Identifier: BUSL-1.1\n// OpenZeppelin Contracts (last updated v4.8.0) (vendor/arbitrum/IOutbox.sol)\n\n// solhint-disable-next-line compiler-version\npragma solidity >=0.6.9 <0.9.0;\n\nimport \"./IBridge.sol\";\n\ninterface IOutbox {\n    event SendRootUpdated(bytes32 indexed blockHash, bytes32 indexed outputRoot);\n    event OutBoxTransactionExecuted(\n        address indexed to,\n        address indexed l2Sender,\n        uint256 indexed zero,\n        uint256 transactionIndex\n    );\n\n    function rollup() external view returns (address); // the rollup contract\n\n    function bridge() external view returns (IBridge); // the bridge contract\n\n    function spent(uint256) external view returns (bytes32); // packed spent bitmap\n\n    function roots(bytes32) external view returns (bytes32); // maps root hashes => L2 block hash\n\n    // solhint-disable-next-line func-name-mixedcase\n    function OUTBOX_VERSION() external view returns (uint128); // the outbox version\n\n    function updateSendRoot(bytes32 sendRoot, bytes32 l2BlockHash) external;\n\n    /// @notice When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account\n    ///         When the return value is zero, that means this is a system message\n    /// @dev the l2ToL1Sender behaves as the tx.origin, the msg.sender should be validated to protect against reentrancies\n    function l2ToL1Sender() external view returns (address);\n\n    /// @return l2Block return L2 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\n    function l2ToL1Block() external view returns (uint256);\n\n    /// @return l1Block return L1 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\n    function l2ToL1EthBlock() external view returns (uint256);\n\n    /// @return timestamp return L2 timestamp when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\n    function l2ToL1Timestamp() external view returns (uint256);\n\n    /// @return outputId returns the unique output identifier of the L2 to L1 tx or 0 if no L2 to L1 transaction is active\n    function l2ToL1OutputId() external view returns (bytes32);\n\n    /**\n     * @notice Executes a messages in an Outbox entry.\n     * @dev Reverts if dispute period hasn't expired, since the outbox entry\n     *      is only created once the rollup confirms the respective assertion.\n     * @dev it is not possible to execute any L2-to-L1 transaction which contains data\n     *      to a contract address without any code (as enforced by the Bridge contract).\n     * @param proof Merkle proof of message inclusion in send root\n     * @param index Merkle path to message\n     * @param l2Sender sender if original message (i.e., caller of ArbSys.sendTxToL1)\n     * @param to destination address for L1 contract call\n     * @param l2Block l2 block number at which sendTxToL1 call was made\n     * @param l1Block l1 block number at which sendTxToL1 call was made\n     * @param l2Timestamp l2 Timestamp at which sendTxToL1 call was made\n     * @param value wei in L1 message\n     * @param data abi-encoded L1 message data\n     */\n    function executeTransaction(\n        bytes32[] calldata proof,\n        uint256 index,\n        address l2Sender,\n        address to,\n        uint256 l2Block,\n        uint256 l1Block,\n        uint256 l2Timestamp,\n        uint256 value,\n        bytes calldata data\n    ) external;\n\n    /**\n     *  @dev function used to simulate the result of a particular function call from the outbox\n     *       it is useful for things such as gas estimates. This function includes all costs except for\n     *       proof validation (which can be considered offchain as a somewhat of a fixed cost - it's\n     *       not really a fixed cost, but can be treated as so with a fixed overhead for gas estimation).\n     *       We can't include the cost of proof validation since this is intended to be used to simulate txs\n     *       that are included in yet-to-be confirmed merkle roots. The simulation entrypoint could instead pretend\n     *       to confirm a pending merkle root, but that would be less practical for integrating with tooling.\n     *       It is only possible to trigger it when the msg sender is address zero, which should be impossible\n     *       unless under simulation in an eth_call or eth_estimateGas\n     */\n    function executeTransactionSimulation(\n        uint256 index,\n        address l2Sender,\n        address to,\n        uint256 l2Block,\n        uint256 l1Block,\n        uint256 l2Timestamp,\n        uint256 value,\n        bytes calldata data\n    ) external;\n\n    /**\n     * @param index Merkle path to message\n     * @return true if the message has been spent\n     */\n    function isSpent(uint256 index) external view returns (bool);\n\n    function calculateItemHash(\n        address l2Sender,\n        address to,\n        uint256 l2Block,\n        uint256 l1Block,\n        uint256 l2Timestamp,\n        uint256 value,\n        bytes calldata data\n    ) external pure returns (bytes32);\n\n    function calculateMerkleRoot(\n        bytes32[] memory proof,\n        uint256 path,\n        bytes32 item\n    ) external pure returns (bytes32);\n}\n"},"contracts/core/connext/facets/BaseConnextFacet.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {TransferInfo, AppStorage, Role} from \"../libraries/LibConnextStorage.sol\";\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {AssetLogic} from \"../libraries/AssetLogic.sol\";\nimport {TokenId} from \"../libraries/TokenId.sol\";\nimport {Constants} from \"../libraries/Constants.sol\";\n\ncontract BaseConnextFacet {\n  AppStorage internal s;\n\n  // ========== Custom Errors ===========\n\n  error BaseConnextFacet__onlyOwner_notOwner();\n  error BaseConnextFacet__onlyProposed_notProposedOwner();\n  error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\n  error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\n  error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\n  error BaseConnextFacet__whenNotPaused_paused();\n  error BaseConnextFacet__nonReentrant_reentrantCall();\n  error BaseConnextFacet__nonXCallReentrant_reentrantCall();\n  error BaseConnextFacet__getAdoptedAsset_assetNotFound();\n  error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\n\n  // ============ Modifiers ============\n\n  /**\n   * @dev Prevents a contract from calling itself, directly or indirectly.\n   * Calling a `nonReentrant` function from another `nonReentrant`\n   * function is not supported. It is possible to prevent this from happening\n   * by making the `nonReentrant` function external, and making it call a\n   * `private` function that does the actual work.\n   */\n  modifier nonReentrant() {\n    // On the first call to nonReentrant, _notEntered will be true\n    if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\n\n    // Any calls to nonReentrant after this point will fail\n    s._status = Constants.ENTERED;\n\n    _;\n\n    // By storing the original value once again, a refund is triggered (see\n    // https://eips.ethereum.org/EIPS/eip-2200)\n    s._status = Constants.NOT_ENTERED;\n  }\n\n  modifier nonXCallReentrant() {\n    // On the first call to nonReentrant, _notEntered will be true\n    if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\n\n    // Any calls to nonReentrant after this point will fail\n    s._xcallStatus = Constants.ENTERED;\n\n    _;\n\n    // By storing the original value once again, a refund is triggered (see\n    // https://eips.ethereum.org/EIPS/eip-2200)\n    s._xcallStatus = Constants.NOT_ENTERED;\n  }\n\n  /**\n   * @notice Throws if called by any account other than the owner.\n   */\n  modifier onlyOwner() {\n    if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\n    _;\n  }\n\n  /**\n   * @notice Throws if called by any account other than the proposed owner.\n   */\n  modifier onlyProposed() {\n    if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\n    _;\n  }\n\n  /**\n   * @notice Throws if called by any account other than the owner and router role.\n   */\n  modifier onlyOwnerOrRouter() {\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\n      revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\n    _;\n  }\n\n  /**\n   * @notice Throws if called by any account other than the owner and watcher role.\n   */\n  modifier onlyOwnerOrWatcher() {\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\n      revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\n    _;\n  }\n\n  /**\n   * @notice Throws if called by any account other than the owner and admin role.\n   */\n  modifier onlyOwnerOrAdmin() {\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\n      revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\n    _;\n  }\n\n  /**\n   * @notice Throws if all functionality is paused\n   */\n  modifier whenNotPaused() {\n    if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\n    _;\n  }\n\n  // ============ Internal functions ============\n  /**\n   * @notice Indicates if the router allowlist has been removed\n   */\n  function _isRouterAllowlistRemoved() internal view returns (bool) {\n    return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\n  }\n\n  /**\n   * @notice Returns the adopted assets for given canonical information\n   */\n  function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\n    address adopted = AssetLogic.getConfig(_key).adopted;\n    if (adopted == address(0)) {\n      revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\n    }\n    return adopted;\n  }\n\n  /**\n   * @notice Returns the adopted assets for given canonical information\n   */\n  function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\n    address representation = AssetLogic.getConfig(_key).representation;\n    // If this is address(0), then there is no mintable token for this asset on this\n    // domain\n    return representation;\n  }\n\n  /**\n   * @notice Calculates a transferId\n   */\n  function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\n    return keccak256(abi.encode(_params));\n  }\n\n  /**\n   * @notice Internal utility function that combines\n   *         `_origin` and `_nonce`.\n   * @dev Both origin and nonce should be less than 2^32 - 1\n   * @param _origin Domain of chain where the transfer originated\n   * @param _nonce The unique identifier for the message from origin to destination\n   * @return Returns (`_origin` << 32) & `_nonce`\n   */\n  function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\n    return (uint64(_origin) << 32) | _nonce;\n  }\n\n  function _getLocalAsset(\n    bytes32 _key,\n    bytes32 _id,\n    uint32 _domain\n  ) internal view returns (address) {\n    return AssetLogic.getLocalAsset(_key, _id, _domain, s);\n  }\n\n  function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\n    return AssetLogic.getCanonicalTokenId(_candidate, s);\n  }\n\n  function _getLocalAndAdoptedToken(\n    bytes32 _key,\n    bytes32 _id,\n    uint32 _domain\n  ) internal view returns (address, address) {\n    address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\n    address _adopted = _getAdoptedAsset(_key);\n    return (_local, _adopted);\n  }\n\n  function _isLocalOrigin(address _token) internal view returns (bool) {\n    return AssetLogic.isLocalOrigin(_token, s);\n  }\n\n  function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\n    TokenId memory _canonical = _getCanonicalTokenId(_candidate);\n    bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\n    if (!AssetLogic.getConfig(_key).approval) {\n      revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\n    }\n    return (_canonical, _key);\n  }\n}\n"},"contracts/core/connext/facets/BridgeFacet.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {IERC20Metadata} from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\nimport {ECDSA} from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\nimport {Address} from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport {ExcessivelySafeCall} from \"../../../shared/libraries/ExcessivelySafeCall.sol\";\nimport {TypedMemView} from \"../../../shared/libraries/TypedMemView.sol\";\nimport {TypeCasts} from \"../../../shared/libraries/TypeCasts.sol\";\n\nimport {IOutbox} from \"../../../messaging/interfaces/IOutbox.sol\";\nimport {IConnectorManager} from \"../../../messaging/interfaces/IConnectorManager.sol\";\n\nimport {BaseConnextFacet} from \"./BaseConnextFacet.sol\";\n\nimport {AssetLogic} from \"../libraries/AssetLogic.sol\";\nimport {ExecuteArgs, TransferInfo, DestinationTransferStatus, TokenConfig} from \"../libraries/LibConnextStorage.sol\";\nimport {BridgeMessage} from \"../libraries/BridgeMessage.sol\";\nimport {Constants} from \"../libraries/Constants.sol\";\nimport {TokenId} from \"../libraries/TokenId.sol\";\n\nimport {IXReceiver} from \"../interfaces/IXReceiver.sol\";\nimport {IAavePool} from \"../interfaces/IAavePool.sol\";\nimport {IBridgeToken} from \"../interfaces/IBridgeToken.sol\";\n\ncontract BridgeFacet is BaseConnextFacet {\n  // ============ Libraries ============\n\n  using TypedMemView for bytes;\n  using TypedMemView for bytes29;\n  using BridgeMessage for bytes29;\n\n  // ========== Custom Errors ===========\n\n  error BridgeFacet__addRemote_invalidRouter();\n  error BridgeFacet__addRemote_invalidDomain();\n  error BridgeFacet__onlyDelegate_notDelegate();\n  error BridgeFacet__addSequencer_invalidSequencer();\n  error BridgeFacet__addSequencer_alreadyApproved();\n  error BridgeFacet__removeSequencer_notApproved();\n  error BridgeFacet__setXAppConnectionManager_domainsDontMatch();\n  error BridgeFacet__xcall_nativeAssetNotSupported();\n  error BridgeFacet__xcall_emptyTo();\n  error BridgeFacet__xcall_invalidSlippage();\n  error BridgeFacet_xcall__emptyLocalAsset();\n  error BridgeFacet__xcall_capReached();\n  error BridgeFacet__execute_unapprovedSender();\n  error BridgeFacet__execute_wrongDomain();\n  error BridgeFacet__execute_notSupportedSequencer();\n  error BridgeFacet__execute_invalidSequencerSignature();\n  error BridgeFacet__execute_maxRoutersExceeded();\n  error BridgeFacet__execute_notSupportedRouter();\n  error BridgeFacet__execute_invalidRouterSignature();\n  error BridgeFacet__execute_notApprovedForPortals();\n  error BridgeFacet__execute_badFastLiquidityStatus();\n  error BridgeFacet__execute_notReconciled();\n  error BridgeFacet__execute_externalCallFailed();\n  error BridgeFacet__excecute_insufficientGas();\n  error BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn();\n  error BridgeFacet__bumpTransfer_valueIsZero();\n  error BridgeFacet__bumpTransfer_noRelayerVault();\n  error BridgeFacet__forceUpdateSlippage_invalidSlippage();\n  error BridgeFacet__forceUpdateSlippage_notDestination();\n  error BridgeFacet__forceReceiveLocal_notDestination();\n  error BridgeFacet__mustHaveRemote_destinationNotSupported();\n\n  // ============ Properties ============\n\n  // ============ Events ============\n\n  /**\n   * @notice Emitted when `xcall` is called on the origin domain of a transfer.\n   * @param transferId - The unique identifier of the crosschain transfer.\n   * @param nonce - The bridge nonce of the transfer on the origin domain.\n   * @param messageHash - The hash of the message bytes (containing all transfer info) that were bridged.\n   * @param params - The `TransferInfo` provided to the function.\n   * @param asset - The asset sent in with xcall\n   * @param amount - The amount sent in with xcall\n   * @param local - The local asset that is controlled by the bridge and can be burned/minted\n   */\n  event XCalled(\n    bytes32 indexed transferId,\n    uint256 indexed nonce,\n    bytes32 indexed messageHash,\n    TransferInfo params,\n    address asset,\n    uint256 amount,\n    address local,\n    bytes messageBody\n  );\n\n  /**\n   * @notice Emitted when a transfer has its external data executed\n   * @param transferId - The unique identifier of the crosschain transfer.\n   * @param success - Whether calldata succeeded\n   * @param returnData - Return bytes from the IXReceiver\n   */\n  event ExternalCalldataExecuted(bytes32 indexed transferId, bool success, bytes returnData);\n\n  /**\n   * @notice Emitted when `execute` is called on the destination domain of a transfer.\n   * @dev `execute` may be called when providing fast liquidity or when processing a reconciled (slow) transfer.\n   * @param transferId - The unique identifier of the crosschain transfer.\n   * @param to - The recipient `TransferInfo.to` provided, created as indexed parameter.\n   * @param asset - The asset the recipient is given or the external call is executed with. Should be the\n   * adopted asset on that chain.\n   * @param args - The `ExecuteArgs` provided to the function.\n   * @param local - The local asset that was either supplied by the router for a fast-liquidity transfer or\n   * minted by the bridge in a reconciled (slow) transfer. Could be the same as the adopted `asset` param.\n   * @param amount - The amount of transferring asset the recipient address receives or the external call is\n   * executed with.\n   * @param caller - The account that called the function.\n   */\n  event Executed(\n    bytes32 indexed transferId,\n    address indexed to,\n    address indexed asset,\n    ExecuteArgs args,\n    address local,\n    uint256 amount,\n    address caller\n  );\n\n  /**\n   * @notice Emitted when `_bumpTransfer` is called by an user on the origin domain both in\n   * `xcall` and `bumpTransfer`\n   * @param transferId - The unique identifier of the crosschain transaction\n   * @param increase - The additional amount fees increased by\n   * @param caller - The account that called the function\n   */\n  event TransferRelayerFeesIncreased(bytes32 indexed transferId, uint256 increase, address caller);\n\n  /**\n   * @notice Emitted when `forceUpdateSlippage` is called by user-delegated EOA\n   * on the destination domain\n   * @param transferId - The unique identifier of the crosschain transaction\n   * @param slippage - The updated slippage boundary\n   */\n  event SlippageUpdated(bytes32 indexed transferId, uint256 slippage);\n\n  /**\n   * @notice Emitted when `forceReceiveLocal` is called by a user-delegated EOA\n   * on the destination domain\n   * @param transferId - The unique identifier of the crosschain transaction\n   */\n  event ForceReceiveLocal(bytes32 indexed transferId);\n\n  /**\n   * @notice Emitted when a router used Aave Portal liquidity for fast transfer\n   * @param transferId - The unique identifier of the crosschain transaction\n   * @param router - The authorized router that used Aave Portal liquidity\n   * @param asset - The asset that was provided by Aave Portal\n   * @param amount - The amount of asset that was provided by Aave Portal\n   */\n  event AavePortalMintUnbacked(bytes32 indexed transferId, address indexed router, address asset, uint256 amount);\n\n  /**\n   * @notice Emitted when a new remote instance is added\n   * @param domain - The domain the remote instance is on\n   * @param remote - The address of the remote instance\n   * @param caller - The account that called the function\n   */\n  event RemoteAdded(uint32 domain, address remote, address caller);\n\n  /**\n   * @notice Emitted when a sequencer is added or removed from allowlists\n   * @param sequencer - The sequencer address to be added or removed\n   * @param caller - The account that called the function\n   */\n  event SequencerAdded(address sequencer, address caller);\n\n  /**\n   * @notice Emitted when a sequencer is added or removed from allowlists\n   * @param sequencer - The sequencer address to be added or removed\n   * @param caller - The account that called the function\n   */\n  event SequencerRemoved(address sequencer, address caller);\n\n  /**\n   * @notice Emitted `xAppConnectionManager` is updated\n   * @param updated - The updated address\n   * @param caller - The account that called the function\n   */\n  event XAppConnectionManagerSet(address updated, address caller);\n\n  // ============ Modifiers ============\n\n  /**\n   * @notice Only accept a transfer's designated delegate.\n   * @param _params The TransferInfo of the transfer.\n   */\n  modifier onlyDelegate(TransferInfo calldata _params) {\n    if (_params.delegate != msg.sender) revert BridgeFacet__onlyDelegate_notDelegate();\n    _;\n  }\n\n  // ============ Getters ============\n\n  function routedTransfers(bytes32 _transferId) public view returns (address[] memory) {\n    return s.routedTransfers[_transferId];\n  }\n\n  function transferStatus(bytes32 _transferId) public view returns (DestinationTransferStatus) {\n    return s.transferStatus[_transferId];\n  }\n\n  function remote(uint32 _domain) public view returns (address) {\n    return TypeCasts.bytes32ToAddress(s.remotes[_domain]);\n  }\n\n  function domain() public view returns (uint32) {\n    return s.domain;\n  }\n\n  function nonce() public view returns (uint256) {\n    return s.nonce;\n  }\n\n  function approvedSequencers(address _sequencer) external view returns (bool) {\n    return s.approvedSequencers[_sequencer];\n  }\n\n  function xAppConnectionManager() public view returns (address) {\n    return address(s.xAppConnectionManager);\n  }\n\n  // ============ Admin Functions ==============\n\n  /**\n   * @notice Used to add an approved sequencer to the allowlist.\n   * @param _sequencer - The sequencer address to add.\n   */\n  function addSequencer(address _sequencer) external onlyOwnerOrAdmin {\n    if (_sequencer == address(0)) revert BridgeFacet__addSequencer_invalidSequencer();\n\n    if (s.approvedSequencers[_sequencer]) revert BridgeFacet__addSequencer_alreadyApproved();\n    s.approvedSequencers[_sequencer] = true;\n\n    emit SequencerAdded(_sequencer, msg.sender);\n  }\n\n  /**\n   * @notice Used to remove an approved sequencer from the allowlist.\n   * @param _sequencer - The sequencer address to remove.\n   */\n  function removeSequencer(address _sequencer) external onlyOwnerOrAdmin {\n    if (!s.approvedSequencers[_sequencer]) revert BridgeFacet__removeSequencer_notApproved();\n    delete s.approvedSequencers[_sequencer];\n\n    emit SequencerRemoved(_sequencer, msg.sender);\n  }\n\n  /**\n   * @notice Modify the contract the xApp uses to validate Replica contracts\n   * @param _xAppConnectionManager The address of the xAppConnectionManager contract\n   */\n  function setXAppConnectionManager(address _xAppConnectionManager) external onlyOwnerOrAdmin {\n    IConnectorManager manager = IConnectorManager(_xAppConnectionManager);\n    if (manager.localDomain() != s.domain) {\n      revert BridgeFacet__setXAppConnectionManager_domainsDontMatch();\n    }\n    emit XAppConnectionManagerSet(_xAppConnectionManager, msg.sender);\n    s.xAppConnectionManager = manager;\n  }\n\n  /**\n   * @notice Register the address of a Router contract for the same xApp on a remote chain\n   * @param _domain The domain of the remote xApp Router\n   * @param _router The address of the remote xApp Router\n   */\n  function enrollRemoteRouter(uint32 _domain, bytes32 _router) external onlyOwnerOrAdmin {\n    if (_router == bytes32(\"\")) revert BridgeFacet__addRemote_invalidRouter();\n\n    // Make sure we aren't setting the current domain (or an empty one) as the connextion.\n    if (_domain == 0 || _domain == s.domain) {\n      revert BridgeFacet__addRemote_invalidDomain();\n    }\n\n    s.remotes[_domain] = _router;\n    emit RemoteAdded(_domain, TypeCasts.bytes32ToAddress(_router), msg.sender);\n  }\n\n  // ============ Public Functions: Bridge ==============\n\n  function xcall(\n    uint32 _destination,\n    address _to,\n    address _asset,\n    address _delegate,\n    uint256 _amount,\n    uint256 _slippage,\n    bytes calldata _callData\n  ) external payable nonXCallReentrant returns (bytes32) {\n    // NOTE: Here, we fill in as much information as we can for the TransferInfo.\n    // Some info is left blank and will be assigned in the internal `_xcall` function (e.g.\n    // `normalizedIn`, `bridgedAmt`, canonical info, etc).\n    TransferInfo memory params = TransferInfo({\n      to: _to,\n      callData: _callData,\n      originDomain: s.domain,\n      destinationDomain: _destination,\n      delegate: _delegate,\n      // `receiveLocal: false` indicates we should always deliver the adopted asset on the\n      // destination chain, swapping from the local asset if needed.\n      receiveLocal: false,\n      slippage: _slippage,\n      originSender: msg.sender,\n      // The following values should be assigned in _xcall.\n      nonce: 0,\n      canonicalDomain: 0,\n      bridgedAmt: 0,\n      normalizedIn: 0,\n      canonicalId: bytes32(0)\n    });\n    return _xcall(params, _asset, _amount);\n  }\n\n  function xcallIntoLocal(\n    uint32 _destination,\n    address _to,\n    address _asset,\n    address _delegate,\n    uint256 _amount,\n    uint256 _slippage,\n    bytes calldata _callData\n  ) external payable nonXCallReentrant returns (bytes32) {\n    // NOTE: Here, we fill in as much information as we can for the TransferInfo.\n    // Some info is left blank and will be assigned in the internal `_xcall` function (e.g.\n    // `normalizedIn`, `bridgedAmt`, canonical info, etc).\n    TransferInfo memory params = TransferInfo({\n      to: _to,\n      callData: _callData,\n      originDomain: s.domain,\n      destinationDomain: _destination,\n      delegate: _delegate,\n      // `receiveLocal: true` indicates we should always deliver the local asset on the\n      // destination chain, and NOT swap into any adopted assets.\n      receiveLocal: true,\n      slippage: _slippage,\n      originSender: msg.sender,\n      // The following values should be assigned in _xcall.\n      nonce: 0,\n      canonicalDomain: 0,\n      bridgedAmt: 0,\n      normalizedIn: 0,\n      canonicalId: bytes32(0)\n    });\n    return _xcall(params, _asset, _amount);\n  }\n\n  /**\n   * @notice Called on a destination domain to disburse correct assets to end recipient and execute any included\n   * calldata.\n   *\n   * @dev Can be called before or after `handle` [reconcile] is called (regarding the same transfer), depending on\n   * whether the fast liquidity route (i.e. funds provided by routers) is being used for this transfer. As a result,\n   * executed calldata (including properties like `originSender`) may or may not be verified depending on whether the\n   * reconcile has been completed (i.e. the optimistic confirmation period has elapsed).\n   *\n   * @param _args - ExecuteArgs arguments.\n   * @return bytes32 - The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for\n   * reconciliation to occur.\n   */\n  function execute(ExecuteArgs calldata _args) external nonReentrant whenNotPaused returns (bytes32) {\n    (bytes32 transferId, DestinationTransferStatus status) = _executeSanityChecks(_args);\n\n    DestinationTransferStatus updated = status == DestinationTransferStatus.Reconciled\n      ? DestinationTransferStatus.Completed\n      : DestinationTransferStatus.Executed;\n\n    s.transferStatus[transferId] = updated;\n\n    // Supply assets to target recipient. Use router liquidity when this is a fast transfer, or mint bridge tokens\n    // when this is a slow transfer.\n    // NOTE: Asset will be adopted unless specified to `receiveLocal` in params.\n    (uint256 amountOut, address asset, address local) = _handleExecuteLiquidity(\n      transferId,\n      AssetLogic.calculateCanonicalHash(_args.params.canonicalId, _args.params.canonicalDomain),\n      updated != DestinationTransferStatus.Completed,\n      _args\n    );\n\n    // Execute the transaction using the designated calldata.\n    uint256 amount = _handleExecuteTransaction(\n      _args,\n      amountOut,\n      asset,\n      transferId,\n      updated == DestinationTransferStatus.Completed\n    );\n\n    // Emit event.\n    emit Executed(transferId, _args.params.to, asset, _args, local, amount, msg.sender);\n\n    return transferId;\n  }\n\n  /**\n   * @notice Anyone can call this function on the origin domain to increase the relayer fee for a transfer.\n   * @param _transferId - The unique identifier of the crosschain transaction\n   */\n  function bumpTransfer(bytes32 _transferId) external payable nonReentrant whenNotPaused {\n    if (msg.value == 0) revert BridgeFacet__bumpTransfer_valueIsZero();\n    _bumpTransfer(_transferId);\n  }\n\n  function _bumpTransfer(bytes32 _transferId) internal {\n    address relayerVault = s.relayerFeeVault;\n    if (relayerVault == address(0)) revert BridgeFacet__bumpTransfer_noRelayerVault();\n    Address.sendValue(payable(relayerVault), msg.value);\n\n    emit TransferRelayerFeesIncreased(_transferId, msg.value, msg.sender);\n  }\n\n  /**\n   * @notice Allows a user-specified account to update the slippage they are willing\n   * to take on destination transfers.\n   *\n   * @param _params TransferInfo associated with the transfer\n   * @param _slippage The updated slippage\n   */\n  function forceUpdateSlippage(TransferInfo calldata _params, uint256 _slippage) external onlyDelegate(_params) {\n    // Sanity check slippage\n    if (_slippage > Constants.BPS_FEE_DENOMINATOR) {\n      revert BridgeFacet__forceUpdateSlippage_invalidSlippage();\n    }\n\n    // Should only be called on destination domain\n    if (_params.destinationDomain != s.domain) {\n      revert BridgeFacet__forceUpdateSlippage_notDestination();\n    }\n\n    // Get transferId\n    bytes32 transferId = _calculateTransferId(_params);\n\n    // Store overrides\n    s.slippage[transferId] = _slippage;\n\n    // Emit event\n    emit SlippageUpdated(transferId, _slippage);\n  }\n\n  /**\n   * @notice Allows a user-specified account to withdraw the local asset directly\n   * @dev Calldata will still be executed with the local asset. `IXReceiver` contracts\n   * should be able to handle local assets in event of failures.\n   * @param _params TransferInfo associated with the transfer\n   */\n  function forceReceiveLocal(TransferInfo calldata _params) external onlyDelegate(_params) {\n    // Should only be called on destination domain\n    if (_params.destinationDomain != s.domain) {\n      revert BridgeFacet__forceReceiveLocal_notDestination();\n    }\n\n    // Get transferId\n    bytes32 transferId = _calculateTransferId(_params);\n\n    // Store overrides\n    s.receiveLocalOverride[transferId] = true;\n\n    // Emit event\n    emit ForceReceiveLocal(transferId);\n  }\n\n  // ============ Internal: Bridge ============\n\n  /**\n   * @notice Initiates a cross-chain transfer of funds and/or calldata\n   *\n   * @dev For ERC20 transfers, this contract must have approval to transfer the input (transacting) assets. The adopted\n   * assets will be swapped for their local asset counterparts (i.e. bridgeable tokens) via the configured AMM if\n   * necessary. In the event that the adopted assets *are* local bridge assets, no swap is needed. The local tokens will\n   * then be sent via the bridge router. If the local assets are representational for an asset on another chain, we will\n   * burn the tokens here. If the local assets are canonical (meaning that the adopted<>local asset pairing is native\n   * to this chain), we will custody the tokens here.\n   *\n   * @param _params - The TransferInfo arguments.\n   * @return bytes32 - The transfer ID of the newly created crosschain transfer.\n   */\n  function _xcall(\n    TransferInfo memory _params,\n    address _asset,\n    uint256 _amount\n  ) internal whenNotPaused returns (bytes32) {\n    // Sanity checks.\n    bytes32 remoteInstance;\n    {\n      // Not native asset.\n      // NOTE: We support using address(0) as an intuitive default if you are sending a 0-value\n      // transfer. In that edge case, address(0) will not be registered as a supported asset, but should\n      // pass the `isLocalOrigin` check\n      if (_asset == address(0) && _amount != 0) {\n        revert BridgeFacet__xcall_nativeAssetNotSupported();\n      }\n\n      // Destination domain is supported.\n      // NOTE: This check implicitly also checks that `_params.destinationDomain != s.domain`, because the index\n      // `s.domain` of `s.remotes` should always be `bytes32(0)`.\n      remoteInstance = _mustHaveRemote(_params.destinationDomain);\n\n      // Recipient defined.\n      if (_params.to == address(0)) {\n        revert BridgeFacet__xcall_emptyTo();\n      }\n\n      if (_params.slippage > Constants.BPS_FEE_DENOMINATOR) {\n        revert BridgeFacet__xcall_invalidSlippage();\n      }\n    }\n\n    // NOTE: The local asset will stay address(0) if input asset is address(0) in the event of a\n    // 0-value transfer. Otherwise, the local address will be retrieved below\n    address local;\n    bytes32 transferId;\n    TokenId memory canonical;\n    bool isCanonical;\n    {\n      // Check that the asset is supported -- can be either adopted or local.\n      // NOTE: Above we check that you can only have `address(0)` as the input asset if this is a\n      // 0-value transfer. Because 0-value transfers short-circuit all checks on mappings keyed on\n      // hash(canonicalId, canonicalDomain), this is safe even when the address(0) asset is not\n      // allowlisted.\n      if (_asset != address(0)) {\n        // Retrieve the canonical token information.\n        bytes32 key;\n        (canonical, key) = _getApprovedCanonicalId(_asset);\n\n        // Get the token config.\n        TokenConfig storage config = AssetLogic.getConfig(key);\n\n        // Set boolean flag\n        isCanonical = _params.originDomain == canonical.domain;\n\n        // Get the local address\n        local = isCanonical ? TypeCasts.bytes32ToAddress(canonical.id) : config.representation;\n        if (local == address(0)) {\n          revert BridgeFacet_xcall__emptyLocalAsset();\n        }\n\n        {\n          // Enforce liquidity caps.\n          // NOTE: Safe to do this before the swap because canonical domains do\n          // not hit the AMMs (local == canonical).\n          uint256 cap = config.cap;\n          if (isCanonical && cap > 0) {\n            // NOTE: this method includes router liquidity as part of the caps,\n            // not only the minted amount\n            uint256 newCustodiedAmount = config.custodied + _amount;\n            if (newCustodiedAmount > cap) {\n              revert BridgeFacet__xcall_capReached();\n            }\n            s.tokenConfigs[key].custodied = newCustodiedAmount;\n          }\n        }\n\n        // Update TransferInfo to reflect the canonical token information.\n        _params.canonicalDomain = canonical.domain;\n        _params.canonicalId = canonical.id;\n\n        if (_amount > 0) {\n          // Transfer funds of input asset to the contract from the user.\n          AssetLogic.handleIncomingAsset(_asset, _amount);\n\n          // Swap to the local asset from adopted if applicable.\n          _params.bridgedAmt = AssetLogic.swapToLocalAssetIfNeeded(key, _asset, local, _amount, _params.slippage);\n\n          // Get the normalized amount in (amount sent in by user in 18 decimals).\n          // NOTE: when getting the decimals from `_asset`, you don't know if you are looking for\n          // adopted or local assets\n          _params.normalizedIn = AssetLogic.normalizeDecimals(\n            _asset == local ? config.representationDecimals : config.adoptedDecimals,\n            Constants.DEFAULT_NORMALIZED_DECIMALS,\n            _amount\n          );\n        }\n      }\n\n      // Calculate the transfer ID.\n      _params.nonce = s.nonce++;\n      transferId = _calculateTransferId(_params);\n    }\n\n    // Handle the relayer fee.\n    // NOTE: This has to be done *after* transferring in + swapping assets because\n    // the transfer id uses the amount that is bridged (i.e. amount in local asset).\n    if (msg.value > 0) {\n      _bumpTransfer(transferId);\n    }\n\n    // Send the crosschain message.\n    _sendMessageAndEmit(transferId, _params, _asset, _amount, remoteInstance, canonical, local, isCanonical);\n\n    return transferId;\n  }\n\n  /**\n   * @notice Holds the logic to recover the signer from an encoded payload.\n   * @dev Will hash and convert to an eth signed message.\n   * @param _signed The hash that was signed.\n   * @param _sig The signature from which we will recover the signer.\n   */\n  function _recoverSignature(bytes32 _signed, bytes calldata _sig) internal pure returns (address) {\n    // Recover\n    return ECDSA.recover(ECDSA.toEthSignedMessageHash(_signed), _sig);\n  }\n\n  /**\n   * @notice Performs some sanity checks for `execute`.\n   * @dev Need this to prevent stack too deep.\n   * @param _args ExecuteArgs that were passed in to the `execute` call.\n   */\n  function _executeSanityChecks(ExecuteArgs calldata _args) private view returns (bytes32, DestinationTransferStatus) {\n    // If the sender is not approved relayer, revert\n    if (!s.approvedRelayers[msg.sender] && msg.sender != _args.params.delegate) {\n      revert BridgeFacet__execute_unapprovedSender();\n    }\n\n    // If this is not the destination domain revert\n    if (_args.params.destinationDomain != s.domain) {\n      revert BridgeFacet__execute_wrongDomain();\n    }\n\n    // Path length refers to the number of facilitating routers. A transfer is considered 'multipath'\n    // if multiple routers provide liquidity (in even 'shares') for it.\n    uint256 pathLength = _args.routers.length;\n\n    // Derive transfer ID based on given arguments.\n    bytes32 transferId = _calculateTransferId(_args.params);\n\n    // Retrieve the reconciled record.\n    DestinationTransferStatus status = s.transferStatus[transferId];\n\n    if (pathLength != 0) {\n      // Make sure number of routers is below the configured maximum.\n      if (pathLength > s.maxRoutersPerTransfer) revert BridgeFacet__execute_maxRoutersExceeded();\n\n      // Check to make sure the transfer has not been reconciled (no need for routers if the transfer is\n      // already reconciled; i.e. if there are routers provided, the transfer must *not* be reconciled).\n      if (status != DestinationTransferStatus.None) revert BridgeFacet__execute_badFastLiquidityStatus();\n\n      // NOTE: The sequencer address may be empty and no signature needs to be provided in the case of the\n      // slow liquidity route (i.e. no routers involved). Additionally, the sequencer does not need to be the\n      // msg.sender.\n      // Check to make sure the sequencer address provided is approved\n      if (!s.approvedSequencers[_args.sequencer]) {\n        revert BridgeFacet__execute_notSupportedSequencer();\n      }\n      // Check to make sure the sequencer provided did sign the transfer ID and router path provided.\n      // NOTE: when caps are enforced, this signature also acts as protection from malicious routers looking\n      // to block the network. routers could `execute` a fake transaction, and use up the rest of the `custodied`\n      // bandwidth, causing future `execute`s to fail. this would also cause a break in the accounting, where the\n      // `custodied` balance no longer tracks representation asset minting / burning\n      if (\n        _args.sequencer != _recoverSignature(keccak256(abi.encode(transferId, _args.routers)), _args.sequencerSignature)\n      ) {\n        revert BridgeFacet__execute_invalidSequencerSignature();\n      }\n\n      // Hash the payload for which each router should have produced a signature.\n      // Each router should have signed the `transferId` (which implicitly signs call params,\n      // amount, and tokenId) as well as the `pathLength`, or the number of routers with which\n      // they are splitting liquidity provision.\n      bytes32 routerHash = keccak256(abi.encode(transferId, pathLength));\n\n      for (uint256 i; i < pathLength; ) {\n        // Make sure the router is approved, if applicable.\n        // If router ownership is renounced (_RouterOwnershipRenounced() is true), then the router allowlist\n        // no longer applies and we can skip this approval step.\n        if (!_isRouterAllowlistRemoved() && !s.routerConfigs[_args.routers[i]].approved) {\n          revert BridgeFacet__execute_notSupportedRouter();\n        }\n\n        // Validate the signature. We'll recover the signer's address using the expected payload and basic ECDSA\n        // signature scheme recovery. The address for each signature must match the router's address.\n        if (_args.routers[i] != _recoverSignature(routerHash, _args.routerSignatures[i])) {\n          revert BridgeFacet__execute_invalidRouterSignature();\n        }\n\n        unchecked {\n          ++i;\n        }\n      }\n    } else {\n      // If there are no routers for this transfer, this `execute` must be a slow liquidity route; in which\n      // case, we must make sure the transfer's been reconciled.\n      if (status != DestinationTransferStatus.Reconciled) revert BridgeFacet__execute_notReconciled();\n    }\n\n    return (transferId, status);\n  }\n\n  /**\n   * @notice Calculates fast transfer amount.\n   * @param _amount Transfer amount\n   * @param _numerator Numerator\n   * @param _denominator Denominator\n   */\n  function _muldiv(\n    uint256 _amount,\n    uint256 _numerator,\n    uint256 _denominator\n  ) private pure returns (uint256) {\n    return (_amount * _numerator) / _denominator;\n  }\n\n  /**\n   * @notice Execute liquidity process used when calling `execute`.\n   * @dev Will revert with underflow if any router in the path has insufficient liquidity to provide\n   * for the transfer.\n   * @dev Need this to prevent stack too deep.\n   */\n  function _handleExecuteLiquidity(\n    bytes32 _transferId,\n    bytes32 _key,\n    bool _isFast,\n    ExecuteArgs calldata _args\n  )\n    private\n    returns (\n      uint256,\n      address,\n      address\n    )\n  {\n    // Save the addresses of all routers providing liquidity for this transfer.\n    s.routedTransfers[_transferId] = _args.routers;\n\n    // Get the local asset contract address (if applicable).\n    address local;\n    if (_args.params.canonicalDomain != 0) {\n      local = _getLocalAsset(_key, _args.params.canonicalId, _args.params.canonicalDomain);\n    }\n\n    // If this is a zero-value transfer, short-circuit remaining logic.\n    if (_args.params.bridgedAmt == 0) {\n      return (0, local, local);\n    }\n\n    // Get the receive local status\n    bool receiveLocal = _args.params.receiveLocal || s.receiveLocalOverride[_transferId];\n\n    uint256 toSwap = _args.params.bridgedAmt;\n    // If this is a fast liquidity path, we should handle deducting from applicable routers' liquidity.\n    // If this is a slow liquidity path, the transfer must have been reconciled (if we've reached this point),\n    // and the funds would have been custodied in this contract. The exact custodied amount is untracked in state\n    // (since the amount is hashed in the transfer ID itself) - thus, no updates are required.\n    if (_isFast) {\n      uint256 pathLen = _args.routers.length;\n\n      // Calculate amount that routers will provide with the fast-liquidity fee deducted.\n      toSwap = _muldiv(_args.params.bridgedAmt, s.LIQUIDITY_FEE_NUMERATOR, Constants.BPS_FEE_DENOMINATOR);\n\n      if (pathLen == 1) {\n        // If router does not have enough liquidity, try to use Aave Portals.\n        // NOTE: Only one router should be responsible for taking on this credit risk, and it should only deal\n        // with transfers expecting adopted assets (to avoid introducing runtime slippage).\n        if (!receiveLocal && s.routerBalances[_args.routers[0]][local] < toSwap && s.aavePool != address(0)) {\n          if (!s.routerConfigs[_args.routers[0]].portalApproved) revert BridgeFacet__execute_notApprovedForPortals();\n\n          // Portals deliver the adopted asset directly; return after portal execution is completed.\n          (uint256 portalDeliveredAmount, address adoptedAsset) = _executePortalTransfer(\n            _transferId,\n            _key,\n            toSwap,\n            _args.routers[0]\n          );\n          return (portalDeliveredAmount, adoptedAsset, local);\n        } else {\n          // Decrement the router's liquidity.\n          s.routerBalances[_args.routers[0]][local] -= toSwap;\n        }\n      } else {\n        // For each router, assert they are approved, and deduct liquidity.\n        uint256 routerAmount = toSwap / pathLen;\n        for (uint256 i; i < pathLen - 1; ) {\n          // Decrement router's liquidity.\n          // NOTE: If any router in the path has insufficient liquidity, this will revert with an underflow error.\n          s.routerBalances[_args.routers[i]][local] -= routerAmount;\n\n          unchecked {\n            ++i;\n          }\n        }\n        // The last router in the multipath will sweep the remaining balance to account for remainder dust.\n        uint256 toSweep = routerAmount + (toSwap % pathLen);\n        s.routerBalances[_args.routers[pathLen - 1]][local] -= toSweep;\n      }\n    }\n\n    // If it is the canonical domain, decrease custodied value\n    if (s.domain == _args.params.canonicalDomain && AssetLogic.getConfig(_key).cap > 0) {\n      // NOTE: safe to use the amount here instead of post-swap because there are no\n      // AMMs on the canonical domain (assuming canonical == adopted on canonical domain)\n      s.tokenConfigs[_key].custodied -= toSwap;\n    }\n\n    // If the local asset is specified, or the adopted asset was overridden (e.g. when user facing slippage\n    // conditions outside of their boundaries), exit without swapping.\n    if (receiveLocal) {\n      // Delete override\n      delete s.receiveLocalOverride[_transferId];\n\n      return (toSwap, local, local);\n    }\n\n    // Swap out of representational asset into adopted asset if needed.\n    uint256 slippageOverride = s.slippage[_transferId];\n    // delete for gas refund\n    delete s.slippage[_transferId];\n\n    (uint256 amount, address adopted) = AssetLogic.swapFromLocalAssetIfNeeded(\n      _key,\n      local,\n      toSwap,\n      slippageOverride != 0 ? slippageOverride : _args.params.slippage,\n      _args.params.normalizedIn\n    );\n    return (amount, adopted, local);\n  }\n\n  /**\n   * @notice Process the transfer, and calldata if needed, when calling `execute`\n   * @dev Need this to prevent stack too deep\n   */\n  function _handleExecuteTransaction(\n    ExecuteArgs calldata _args,\n    uint256 _amountOut,\n    address _asset, // adopted (or local if specified)\n    bytes32 _transferId,\n    bool _reconciled\n  ) private returns (uint256) {\n    // transfer funds to recipient\n    AssetLogic.handleOutgoingAsset(_asset, _args.params.to, _amountOut);\n\n    // execute the calldata\n    _executeCalldata(_transferId, _amountOut, _asset, _reconciled, _args.params);\n\n    return _amountOut;\n  }\n\n  /**\n   * @notice Executes external calldata.\n   * \n   * @dev Once a transfer is reconciled (i.e. data is authenticated), external calls will\n   * fail gracefully. This means errors will be emitted in an event, but the function itself\n   * will not revert.\n\n   * In the case where a transaction is *not* reconciled (i.e. data is unauthenticated), this\n   * external call will fail loudly. This allows all functions that rely on authenticated data\n   * (using a specific check on the origin sender), to be forced into the slow path for\n   * execution to succeed.\n   * \n   */\n  function _executeCalldata(\n    bytes32 _transferId,\n    uint256 _amount,\n    address _asset,\n    bool _reconciled,\n    TransferInfo calldata _params\n  ) internal {\n    // execute the calldata\n    if (keccak256(_params.callData) == Constants.EMPTY_HASH) {\n      // no call data, return amount out\n      return;\n    }\n\n    (bool success, bytes memory returnData) = ExcessivelySafeCall.excessivelySafeCall(\n      _params.to,\n      gasleft() - Constants.EXECUTE_CALLDATA_RESERVE_GAS,\n      0, // native asset value (always 0)\n      Constants.DEFAULT_COPY_BYTES, // only copy 256 bytes back as calldata\n      abi.encodeWithSelector(\n        IXReceiver.xReceive.selector,\n        _transferId,\n        _amount,\n        _asset,\n        _reconciled ? _params.originSender : address(0), // use passed in value iff authenticated\n        _params.originDomain,\n        _params.callData\n      )\n    );\n\n    if (!_reconciled && !success) {\n      // See above devnote, reverts if unsuccessful on fast path\n      revert BridgeFacet__execute_externalCallFailed();\n    }\n\n    emit ExternalCalldataExecuted(_transferId, success, returnData);\n  }\n\n  /**\n   * @notice Uses Aave Portals to provide fast liquidity\n   */\n  function _executePortalTransfer(\n    bytes32 _transferId,\n    bytes32 _key,\n    uint256 _fastTransferAmount,\n    address _router\n  ) internal returns (uint256, address) {\n    // Calculate local to adopted swap output if needed\n    address adopted = _getAdoptedAsset(_key);\n\n    IAavePool(s.aavePool).mintUnbacked(adopted, _fastTransferAmount, address(this), Constants.AAVE_REFERRAL_CODE);\n\n    // Improvement: Instead of withdrawing to address(this), withdraw directly to the user or executor to save 1 transfer\n    uint256 amountWithdrawn = IAavePool(s.aavePool).withdraw(adopted, _fastTransferAmount, address(this));\n\n    if (amountWithdrawn < _fastTransferAmount) revert BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn();\n\n    // Store principle debt\n    s.portalDebt[_transferId] = _fastTransferAmount;\n\n    // Store fee debt\n    s.portalFeeDebt[_transferId] = (s.aavePortalFeeNumerator * _fastTransferAmount) / Constants.BPS_FEE_DENOMINATOR;\n\n    emit AavePortalMintUnbacked(_transferId, _router, adopted, _fastTransferAmount);\n\n    return (_fastTransferAmount, adopted);\n  }\n\n  // ============ Internal: Send & Emit Xcalled============\n\n  /**\n   * @notice Format and send transfer message to a remote chain.\n   *\n   * @param _transferId Unique identifier for the transfer.\n   * @param _params The TransferInfo.\n   * @param _connextion The connext instance on the destination domain.\n   * @param _canonical The canonical token ID/domain info.\n   * @param _local The local token address.\n   * @param _amount The token amount.\n   * @param _isCanonical Whether or not the local token is the canonical asset (i.e. this is the token's\n   * \"home\" chain).\n   */\n  function _sendMessageAndEmit(\n    bytes32 _transferId,\n    TransferInfo memory _params,\n    address _asset,\n    uint256 _amount,\n    bytes32 _connextion,\n    TokenId memory _canonical,\n    address _local,\n    bool _isCanonical\n  ) private {\n    // Remove tokens from circulation on this chain if applicable.\n    uint256 bridgedAmt = _params.bridgedAmt;\n    if (bridgedAmt > 0) {\n      if (!_isCanonical) {\n        // If the token originates on a remote chain, burn the representational tokens on this chain.\n        IBridgeToken(_local).burn(address(this), bridgedAmt);\n      }\n      // IFF the token IS the canonical token (i.e. originates on this chain), we lock the input tokens in escrow\n      // in this contract, as an equal amount of representational assets will be minted on the destination chain.\n      // NOTE: The tokens should be in the contract already at this point from xcall.\n    }\n\n    bytes memory _messageBody = abi.encodePacked(\n      _canonical.domain,\n      _canonical.id,\n      BridgeMessage.Types.Transfer,\n      bridgedAmt,\n      _transferId\n    );\n\n    // Send message to destination chain bridge router.\n    // return message hash and unhashed body\n    (bytes32 messageHash, bytes memory messageBody) = IOutbox(s.xAppConnectionManager.home()).dispatch(\n      _params.destinationDomain,\n      _connextion,\n      _messageBody\n    );\n\n    // emit event\n    emit XCalled(_transferId, _params.nonce, messageHash, _params, _asset, _amount, _local, messageBody);\n  }\n\n  /**\n   * @notice Assert that the given domain has a xApp Router registered and return its address\n   * @param _domain The domain of the chain for which to get the xApp Router\n   * @return _remote The address of the remote xApp Router on _domain\n   */\n  function _mustHaveRemote(uint32 _domain) internal view returns (bytes32 _remote) {\n    _remote = s.remotes[_domain];\n    if (_remote == bytes32(0)) {\n      revert BridgeFacet__mustHaveRemote_destinationNotSupported();\n    }\n  }\n}\n"},"contracts/core/connext/facets/DiamondCutFacet.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.17;\n\n/******************************************************************************\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {IDiamondCut} from \"../interfaces/IDiamondCut.sol\";\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\n\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\n// The loupe functions are required by the EIP2535 Diamonds standard\n\ncontract DiamondCutFacet is IDiamondCut {\n  /// @notice Add/replace/remove any number of functions and optionally execute\n  ///         a function with delegatecall\n  /// @param _diamondCut Contains the facet addresses and function selectors\n  /// @param _init The address of the contract or facet to execute _calldata\n  /// @param _calldata A function call, including function selector and arguments\n  ///                  _calldata is executed with delegatecall on _init\n  function diamondCut(\n    FacetCut[] calldata _diamondCut,\n    address _init,\n    bytes calldata _calldata\n  ) external override {\n    LibDiamond.enforceIsContractOwner();\n    LibDiamond.diamondCut(_diamondCut, _init, _calldata);\n  }\n\n  function proposeDiamondCut(\n    FacetCut[] calldata _diamondCut,\n    address _init,\n    bytes calldata _calldata\n  ) external {\n    LibDiamond.enforceIsContractOwner();\n    LibDiamond.proposeDiamondCut(_diamondCut, _init, _calldata);\n  }\n\n  function rescindDiamondCut(\n    FacetCut[] calldata _diamondCut,\n    address _init,\n    bytes calldata _calldata\n  ) external {\n    LibDiamond.enforceIsContractOwner();\n    LibDiamond.rescindDiamondCut(_diamondCut, _init, _calldata);\n  }\n\n  function getAcceptanceTime(\n    FacetCut[] calldata _diamondCut,\n    address _init,\n    bytes calldata _calldata\n  ) external view returns (uint256) {\n    return LibDiamond.acceptanceTime(keccak256(abi.encode(_diamondCut, _init, _calldata)));\n  }\n}\n"},"contracts/core/connext/facets/DiamondLoupeFacet.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.17;\n/******************************************************************************\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondLoupe} from \"../interfaces/IDiamondLoupe.sol\";\nimport {IERC165} from \"../interfaces/IERC165.sol\";\n\n// The functions in DiamondLoupeFacet MUST be added to a diamond.\n// The EIP-2535 Diamond standard requires these functions.\n\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\n  // Diamond Loupe Functions\n  ////////////////////////////////////////////////////////////////////\n  /// These functions are expected to be called frequently by tools.\n  //\n  // struct Facet {\n  //     address facetAddress;\n  //     bytes4[] functionSelectors;\n  // }\n\n  /// @notice Gets all facets and their selectors.\n  /// @return facets_ Facet\n  function facets() external view override returns (Facet[] memory facets_) {\n    LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n    uint256 numFacets = ds.facetAddresses.length;\n    facets_ = new Facet[](numFacets);\n    for (uint256 i; i < numFacets; ) {\n      address facetAddress_ = ds.facetAddresses[i];\n      facets_[i].facetAddress = facetAddress_;\n      facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n\n      unchecked {\n        ++i;\n      }\n    }\n  }\n\n  /// @notice Gets all the function selectors provided by a facet.\n  /// @param _facet The facet address.\n  /// @return facetFunctionSelectors_\n  function facetFunctionSelectors(address _facet)\n    external\n    view\n    override\n    returns (bytes4[] memory facetFunctionSelectors_)\n  {\n    LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n    facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n  }\n\n  /// @notice Get all the facet addresses used by a diamond.\n  /// @return facetAddresses_\n  function facetAddresses() external view override returns (address[] memory facetAddresses_) {\n    LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n    facetAddresses_ = ds.facetAddresses;\n  }\n\n  /// @notice Gets the facet that supports the given selector.\n  /// @dev If facet is not found return address(0).\n  /// @param _functionSelector The function selector.\n  /// @return facetAddress_ The facet address.\n  function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\n    LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n    facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n  }\n\n  // This implements ERC-165.\n  function supportsInterface(bytes4 _interfaceId) external view override returns (bool) {\n    LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n    return ds.supportedInterfaces[_interfaceId];\n  }\n}\n"},"contracts/core/connext/facets/InboxFacet.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {TypedMemView} from \"../../../shared/libraries/TypedMemView.sol\";\n\nimport {AssetLogic} from \"../libraries/AssetLogic.sol\";\nimport {BridgeMessage} from \"../libraries/BridgeMessage.sol\";\nimport {DestinationTransferStatus} from \"../libraries/LibConnextStorage.sol\";\n\nimport {IBridgeToken} from \"../interfaces/IBridgeToken.sol\";\n\nimport {BaseConnextFacet} from \"./BaseConnextFacet.sol\";\n\n/**\n * @title InboxFacet\n * @notice This is the facet that holds all the functionality needed for Connext's messaging layer to\n * reconcile cross-chain transfers. Authenticated (proven) message data is delivered to the `reconcile`\n * function, where it is parsed to determine the message action. Tokens are credited (representational\n * assets are minted, canonical tokens are unlocked from escrow) if applicable.\n *\n */\ncontract InboxFacet is BaseConnextFacet {\n  // ============ Libraries ============\n\n  using TypedMemView for bytes;\n  using TypedMemView for bytes29;\n  using BridgeMessage for bytes29;\n\n  // ========== Custom Errors ===========\n\n  error InboxFacet__onlyReplica_notReplica();\n  error InboxFacet__onlyRemoteRouter_notRemote();\n  error InboxFacet__handle_notTransfer();\n  error InboxFacet__reconcile_alreadyReconciled();\n  error InboxFacet__reconcile_noPortalRouter();\n\n  // ============ Events ============\n\n  /**\n   * @notice Emitted when `reconciled` is called by the bridge on the destination domain.\n   * @param transferId - The unique identifier of the transfer.\n   * @param originDomain - The originating domain of the transfer.\n   * @param local - The local asset that was provided by the bridge.\n   * @param routers - The routers that were reimbursed the bridged token, if fast liquidity was\n   * provided for the given transfer.\n   * @param amount - The amount that was provided by the bridge.\n   * @param caller - The account that called the function\n   */\n  event Reconciled(\n    bytes32 indexed transferId,\n    uint32 indexed originDomain,\n    address indexed local,\n    address[] routers,\n    uint256 amount,\n    address caller\n  );\n\n  /**\n   * @notice emitted when tokens are dispensed to an account on this domain\n   *         emitted both when fast liquidity is provided, and when the\n   *         transfer ultimately settles\n   * @param originAndNonce Domain where the transfer originated and the\n   *        unique identifier for the message from origin to destination,\n   *        combined in a single field ((origin << 32) & nonce)\n   * @param token The address of the local token contract being received\n   * @param recipient The address receiving the tokens; the original\n   *        recipient of the transfer\n   * @param liquidityProvider The account providing liquidity\n   * @param amount The amount of tokens being received\n   */\n  event Receive(\n    uint64 indexed originAndNonce,\n    address indexed token,\n    address indexed recipient,\n    address liquidityProvider,\n    uint256 amount\n  );\n\n  // ============ Modifiers ============\n\n  /**\n   * @notice Only accept messages from a registered inbox contract.\n   */\n  modifier onlyReplica() {\n    if (!_isReplica(msg.sender)) {\n      revert InboxFacet__onlyReplica_notReplica();\n    }\n    _;\n  }\n\n  /**\n   * @notice Only accept messages from a remote Router contract.\n   * @param _origin The domain the message is coming from.\n   * @param _router The address the message is coming from.\n   */\n  modifier onlyRemoteHandler(uint32 _origin, bytes32 _router) {\n    if (!_isRemoteHandler(_origin, _router)) {\n      revert InboxFacet__onlyRemoteRouter_notRemote();\n    }\n    _;\n  }\n\n  // ============ External Functions ============\n\n  /**\n   * @notice Handles an incoming cross-chain message.\n   *\n   * @param _origin The origin domain.\n   * @param _nonce The unique identifier for the message from origin to destination.\n   * @param _sender The sender address.\n   * @param _message The message body.\n   */\n  function handle(\n    uint32 _origin,\n    uint32 _nonce,\n    bytes32 _sender,\n    bytes memory _message\n  ) external onlyReplica onlyRemoteHandler(_origin, _sender) {\n    // Parse token ID and action from message body.\n    bytes29 _msg = _message.ref(0).mustBeMessage();\n    bytes29 _tokenId = _msg.tokenId();\n    bytes29 _action = _msg.action();\n\n    // Sanity check: action must be a valid transfer.\n    if (!_action.isTransfer()) {\n      revert InboxFacet__handle_notTransfer();\n    }\n\n    // If applicable, mint the local asset that corresponds with the message's token ID in the\n    // amount specified by the message.\n    // Returns the local asset address and message's amount.\n    (address _token, uint256 _amount) = _creditTokens(_origin, _nonce, _tokenId, _action);\n\n    // Reconcile the transfer.\n    _reconcile(_action.transferId(), _origin, _token, _amount);\n  }\n\n  // ============ Internal Functions ============\n\n  /**\n   * @notice Reconcile the transfer, marking the transfer ID in storage as authenticated. Reimburses\n   * routers with local asset if it was a fast-liquidity transfer (i.e. it was previously executed).\n   * @param _transferId Unique identifier of the transfer.\n   * @param _origin Origin domain of the transfer.\n   * @param _asset Local asset address (representational or canonical).\n   * @param _amount The amount of the local asset.\n   */\n  function _reconcile(\n    bytes32 _transferId,\n    uint32 _origin,\n    address _asset,\n    uint256 _amount\n  ) internal {\n    // Ensure the transfer has not already been handled (i.e. previously reconciled).\n    // Will be previously reconciled IFF status == reconciled -or- status == executed\n    // and there is no path length on the transfers (no fast liquidity)\n    DestinationTransferStatus status = s.transferStatus[_transferId];\n    if (status != DestinationTransferStatus.None && status != DestinationTransferStatus.Executed) {\n      revert InboxFacet__reconcile_alreadyReconciled();\n    }\n\n    // Mark the transfer as reconciled.\n    s.transferStatus[_transferId] = status == DestinationTransferStatus.None\n      ? DestinationTransferStatus.Reconciled\n      : DestinationTransferStatus.Completed;\n\n    // If the transfer was executed using fast-liquidity provided by routers, then this value would be set\n    // to the participating routers.\n    // NOTE: If the transfer was not executed using fast-liquidity, then the funds will be reserved for\n    // execution (i.e. funds will be delivered to the transfer's recipient in a subsequent `execute` call).\n    address[] memory routers = s.routedTransfers[_transferId];\n\n    // If fast transfer was made using portal liquidity, portal debt must be repaid first.\n    // NOTE: Routers can repay any-amount out-of-band using the `repayAavePortal` method\n    // or by interacting with the aave contracts directly.\n    uint256 portalTransferAmount = s.portalDebt[_transferId] + s.portalFeeDebt[_transferId];\n\n    uint256 pathLen = routers.length;\n    // Sanity check: ensure a router took on the credit risk.\n    if (portalTransferAmount != 0 && pathLen != 1) {\n      revert InboxFacet__reconcile_noPortalRouter();\n    }\n\n    if (pathLen != 0) {\n      // Credit each router that provided liquidity their due 'share' of the asset.\n      uint256 routerAmount = _amount / pathLen;\n      for (uint256 i; i < pathLen - 1; ) {\n        s.routerBalances[routers[i]][_asset] += routerAmount;\n        unchecked {\n          ++i;\n        }\n      }\n      // The last router in the multipath will sweep the remaining balance to account for remainder dust.\n      uint256 toSweep = routerAmount + (_amount % pathLen);\n      s.routerBalances[routers[pathLen - 1]][_asset] += toSweep;\n    }\n\n    emit Reconciled(_transferId, _origin, _asset, routers, _amount, msg.sender);\n  }\n\n  /**\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\n   * @return True if _potentialReplica is an enrolled Replica\n   */\n  function _isReplica(address _potentialReplica) internal view returns (bool) {\n    return s.xAppConnectionManager.isReplica(_potentialReplica);\n  }\n\n  /**\n   * @notice Return true if the given domain / router is the address of a remote xApp Router\n   * @param _domain The domain of the potential remote xApp Router\n   * @param _xAppHandler The address of the potential remote xApp handler\n   */\n  function _isRemoteHandler(uint32 _domain, bytes32 _xAppHandler) internal view returns (bool) {\n    return s.remotes[_domain] == _xAppHandler && _xAppHandler != bytes32(0);\n  }\n\n  /**\n   * @notice If applicable, mints tokens corresponding to the inbound message action.\n   * @dev IFF the asset is representational (i.e. originates from a remote chain), tokens will be minted.\n   * Otherwise, the token must be canonical (i.e. we are on the token's home chain), and the corresponding\n   * amount will already be available in escrow in this contract.\n   *\n   * @param _origin The domain of the chain from which the transfer originated.\n   * @param _nonce The unique identifier for the message from origin to destination.\n   * @param _tokenId The canonical token identifier to credit.\n   * @param _action The contents of the transfer message.\n   * @return _token The address of the local token contract.\n   */\n  function _creditTokens(\n    uint32 _origin,\n    uint32 _nonce,\n    bytes29 _tokenId,\n    bytes29 _action\n  ) internal returns (address, uint256) {\n    bytes32 _canonicalId = _tokenId.id();\n    uint32 _canonicalDomain = _tokenId.domain();\n\n    // Load amount once.\n    uint256 _amount = _action.amnt();\n\n    // Check for the empty case -- if it is 0 value there is no strict requirement for the\n    // canonical information be defined (i.e. you can supply address(0) to xcall). If this\n    // is the case, return _token as address(0)\n    if (_amount == 0 && _canonicalDomain == 0 && _canonicalId == bytes32(0)) {\n      // Emit Receive event and short-circuit remaining logic: no tokens need to be delivered.\n      emit Receive(_originAndNonce(_origin, _nonce), address(0), address(this), address(0), _amount);\n      return (address(0), 0);\n    }\n\n    // Get the token contract for the given tokenId on this chain.\n    address _token = _getLocalAsset(\n      AssetLogic.calculateCanonicalHash(_canonicalId, _canonicalDomain),\n      _canonicalId,\n      _canonicalDomain\n    );\n\n    if (_amount == 0) {\n      // Emit Receive event and short-circuit remaining logic: no tokens need to be delivered.\n      emit Receive(_originAndNonce(_origin, _nonce), _token, address(this), address(0), _amount);\n      return (_token, 0);\n    }\n\n    // Mint the tokens into circulation on this chain.\n    if (!_isLocalOrigin(_token)) {\n      // If the token is of remote origin, mint the representational asset into circulation here.\n      // NOTE: The bridge tokens should be distributed to their intended recipient outside\n      IBridgeToken(_token).mint(address(this), _amount);\n    }\n    // NOTE: If the tokens are locally originating - meaning they are the canonical asset - then they\n    // would be held in escrow in this contract. If we're receiving this message, it must mean\n    // corresponding representational assets circulating on a remote chain were burnt when it was sent.\n\n    // Emit Receive event.\n    emit Receive(_originAndNonce(_origin, _nonce), _token, address(this), address(0), _amount);\n    return (_token, _amount);\n  }\n}\n"},"contracts/core/connext/facets/PortalFacet.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {SafeERC20} from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport {BaseConnextFacet} from \"./BaseConnextFacet.sol\";\n\nimport {IAavePool} from \"../interfaces/IAavePool.sol\";\n\nimport {AssetLogic} from \"../libraries/AssetLogic.sol\";\nimport {Constants} from \"../libraries/Constants.sol\";\nimport {TransferInfo} from \"../libraries/LibConnextStorage.sol\";\n\ncontract PortalFacet is BaseConnextFacet {\n  // ========== Custom Errors ===========\n  error PortalFacet__setAavePortalFee_invalidFee();\n  error PortalFacet__repayAavePortal_assetNotApproved();\n  error PortalFacet__repayAavePortal_insufficientFunds();\n  error PortalFacet__repayAavePortalFor_zeroAmount();\n  error PortalFacet__repayAavePortalFor_invalidAsset();\n\n  // ============ Events ============\n\n  /**\n   * @notice Emitted `setAavePool` is updated\n   * @param updated - The updated address\n   * @param caller - The account that called the function\n   */\n  event AavePoolUpdated(address updated, address caller);\n\n  /**\n   * @notice Emitted `setAavePortalFee` is updated\n   * @param updated - The updated fee numerator\n   * @param caller - The account that called the function\n   */\n  event AavePortalFeeUpdated(uint256 updated, address caller);\n\n  /**\n   * @notice Emitted when a repayment on an Aave portal loan is made\n   * @param transferId - The transfer debt that was repaid\n   * @param asset - The asset that was repaid\n   * @param amount - The amount that was repaid\n   * @param fee - The fee amount that was repaid\n   */\n  event AavePortalRepayment(bytes32 indexed transferId, address asset, uint256 amount, uint256 fee, address caller);\n\n  // ============ Getters methods ==============\n\n  function getAavePortalDebt(bytes32 _transferId) external view returns (uint256) {\n    return s.portalDebt[_transferId];\n  }\n\n  function getAavePortalFeeDebt(bytes32 _transferId) external view returns (uint256) {\n    return s.portalFeeDebt[_transferId];\n  }\n\n  function aavePool() external view returns (address) {\n    return s.aavePool;\n  }\n\n  function aavePortalFee() external view returns (uint256) {\n    return s.aavePortalFeeNumerator;\n  }\n\n  // ============ External functions ============\n\n  /**\n   * @notice Sets the Aave Pool contract address.\n   * @dev Allows to set the aavePool to address zero to disable Aave Portal if needed\n   * @param _aavePool The address of the Aave Pool contract\n   */\n  function setAavePool(address _aavePool) external onlyOwnerOrAdmin {\n    s.aavePool = _aavePool;\n    emit AavePoolUpdated(_aavePool, msg.sender);\n  }\n\n  /**\n   * @notice Sets the Aave Portal fee numerator\n   * @param _aavePortalFeeNumerator The new value for the Aave Portal fee numerator\n   */\n  function setAavePortalFee(uint256 _aavePortalFeeNumerator) external onlyOwnerOrAdmin {\n    if (_aavePortalFeeNumerator > Constants.BPS_FEE_DENOMINATOR) revert PortalFacet__setAavePortalFee_invalidFee();\n\n    s.aavePortalFeeNumerator = _aavePortalFeeNumerator;\n    emit AavePortalFeeUpdated(_aavePortalFeeNumerator, msg.sender);\n  }\n\n  /**\n   * @notice Used by routers to perform a manual repayment to Aave Portals to cover any outstanding debt\n   * @dev The router must be approved for portal and with enough liquidity, and must be the caller of this\n   * function. If the asset is not whitelisted, must use the `repayAavePortalFor` function.\n   * @param _params TransferInfo associated with the transfer\n   * @param _backingAmount The principle to be paid (in adopted asset)\n   * @param _feeAmount The fee to be paid (in adopted asset)\n   * @param _maxIn The max value of the local asset to swap for the _backingAmount of adopted asset\n   */\n  function repayAavePortal(\n    TransferInfo calldata _params,\n    uint256 _backingAmount,\n    uint256 _feeAmount,\n    uint256 _maxIn\n  ) external nonReentrant {\n    bytes32 key = AssetLogic.calculateCanonicalHash(_params.canonicalId, _params.canonicalDomain);\n\n    // Ensure the asset is approved\n    if (!s.tokenConfigs[key].approval) {\n      revert PortalFacet__repayAavePortal_assetNotApproved();\n    }\n\n    address local = _getLocalAsset(key, _params.canonicalId, _params.canonicalDomain);\n\n    uint256 routerBalance = s.routerBalances[msg.sender][local];\n    // Sanity check: has that much to spend\n    if (routerBalance < _maxIn) revert PortalFacet__repayAavePortal_insufficientFunds();\n\n    // Here, generate the transfer id. This allows us to ensure the `_local` asset\n    // is the correct one associated with the transfer. Otherwise, anyone could pay back\n    // the loan with the incorrect asset and remove the ability to transfer here. If the\n    // `_local` asset is incorrectly supplied, the generated transferId will also be\n    // incorrect, and the _backLoan call (which manipulates the debt stored) will fail.\n    // Another option is to store the asset associated with the transfer on `execute`, but\n    // this would make an already expensive call even more so.\n    bytes32 transferId = _calculateTransferId(_params);\n\n    // Need to swap into adopted asset or asset that was backing the loan\n    // The router will always be holding collateral in the local asset while the loaned asset\n    // is the adopted asset\n\n    // Swap for exact `totalRepayAmount` of adopted asset to repay aave\n    (uint256 amountDebited, address assetLoaned) = AssetLogic.swapFromLocalAssetIfNeededForExactOut(\n      key,\n      local,\n      _backingAmount + _feeAmount,\n      _maxIn\n    );\n\n    // decrement router balances\n    s.routerBalances[msg.sender][local] = routerBalance - amountDebited;\n\n    // back loan\n    _backLoan(assetLoaned, _backingAmount, _feeAmount, transferId);\n  }\n\n  /**\n   * @notice This allows anyone to repay the portal in the adopted asset for a given router\n   * and transfer\n   *\n   * @dev Should always be paying in the backing asset for the aave loan. NOTE: This will *NOT*\n   * work if an asset is removed.\n   *\n   * @param _params TransferInfo associated with the transfer\n   * @param _portalAsset The asset you borrowed (adopted asset)\n   * @param _backingAmount Amount of principle to repay\n   * @param _feeAmount Amount of fees to repay\n   */\n  function repayAavePortalFor(\n    TransferInfo calldata _params,\n    address _portalAsset,\n    uint256 _backingAmount,\n    uint256 _feeAmount\n  ) external payable nonReentrant {\n    // Get the adopted address\n    // NOTE: using storage directly because if `_getAdoptedAsset` is used, will revert if\n    // the asset is not whitelisted (and this fn should work if asset is removed)\n    address adopted = s\n      .tokenConfigs[AssetLogic.calculateCanonicalHash(_params.canonicalId, _params.canonicalDomain)]\n      .adopted;\n\n    // Verify asset\n    // NOTE: if asset is removed, `adopted` will be `address(0)`, so you cannot verify the asset\n    // but should still allow for portal loans to be repaid.\n    if (adopted != address(0) && _portalAsset != adopted) {\n      revert PortalFacet__repayAavePortalFor_invalidAsset();\n    }\n\n    // Here, generate the transfer id. This allows us to ensure the `_adopted` asset\n    // is the correct one associated with the transfer. Otherwise, anyone could pay back\n    // the loan with the incorrect asset and remove the ability to transfer here. If the\n    // `_adopted` asset is incorrectly supplied, the generated transferId will also be\n    // incorrect, and the _backLoan call (which manipulates the debt stored) will fail.\n    // Another option is to store the asset associated with the transfer on `execute`, but\n    // this would make an already expensive call even more so.\n    bytes32 transferId = _calculateTransferId(_params);\n\n    // Transfer funds to the contract\n    uint256 total = _backingAmount + _feeAmount;\n    if (total == 0) revert PortalFacet__repayAavePortalFor_zeroAmount();\n\n    AssetLogic.handleIncomingAsset(adopted, total);\n\n    // No need to swap because this is the adopted asset. Simply\n    // repay the loan\n    _backLoan(adopted, _backingAmount, _feeAmount, transferId);\n  }\n\n  // ============ Internal functions ============\n\n  /**\n   * @notice Calls backUnbacked on the aave contracts\n   * @dev Assumes funds in adopted asset are already on contract\n   * @param _asset Address of the adopted asset (asset backing the loan)\n   * @param _backing Amount of principle to repay\n   * @param _fee Amount of fees to repay\n   * @param _transferId Corresponding transfer id for the fees\n   */\n  function _backLoan(\n    address _asset,\n    uint256 _backing,\n    uint256 _fee,\n    bytes32 _transferId\n  ) internal {\n    // reduce debt\n    s.portalDebt[_transferId] -= _backing;\n    s.portalFeeDebt[_transferId] -= _fee;\n\n    address aPool = s.aavePool;\n\n    // increase allowance\n    SafeERC20.safeApprove(IERC20(_asset), aPool, 0);\n    SafeERC20.safeIncreaseAllowance(IERC20(_asset), aPool, _backing + _fee);\n\n    // back loan\n    IAavePool(aPool).backUnbacked(_asset, _backing, _fee);\n\n    // emit event\n    emit AavePortalRepayment(_transferId, _asset, _backing, _fee, msg.sender);\n  }\n}\n"},"contracts/core/connext/facets/ProposedOwnableFacet.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {BaseConnextFacet} from \"./BaseConnextFacet.sol\";\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {Role} from \"../libraries/LibConnextStorage.sol\";\nimport {IProposedOwnable} from \"../../../shared/interfaces/IProposedOwnable.sol\";\n\n/**\n * @title ProposedOwnableFacet\n * @notice Contract module which provides a basic access control mechanism,\n * where there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed via a two step process:\n * 1. Call `proposeOwner`\n * 2. Wait out the delay period\n * 3. Call `acceptOwner`\n *\n * @dev This module is used through inheritance. It will make available the\n * modifier `onlyOwner`, which can be applied to your functions to restrict\n * their use to the owner.\n *\n * @dev The majority of this code was taken from the openzeppelin Ownable\n * contract\n *\n */\ncontract ProposedOwnableFacet is BaseConnextFacet, IProposedOwnable {\n  // ========== Custom Errors ===========\n  error ProposedOwnableFacet__delayElapsed_delayNotElapsed();\n  error ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange();\n  error ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange();\n  error ProposedOwnableFacet__removeRouterAllowlist_noProposal();\n  error ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange();\n  error ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange();\n  error ProposedOwnableFacet__removeAssetAllowlist_noProposal();\n  error ProposedOwnableFacet__proposeNewOwner_invalidProposal();\n  error ProposedOwnableFacet__proposeNewOwner_noOwnershipChange();\n  error ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange();\n  error ProposedOwnableFacet__revokeRole_invalidInput();\n  error ProposedOwnableFacet__assignRoleRouter_invalidInput();\n  error ProposedOwnableFacet__assignRoleWatcher_invalidInput();\n  error ProposedOwnableFacet__assignRoleAdmin_invalidInput();\n\n  // ============ Events ============\n\n  event RouterAllowlistRemovalProposed(uint256 timestamp);\n\n  event RouterAllowlistRemoved(bool renounced);\n\n  event RevokeRole(address revokedAddress, Role revokedRole);\n\n  event AssignRoleRouter(address router);\n\n  event AssignRoleWatcher(address watcher);\n\n  event AssignRoleAdmin(address admin);\n\n  event Paused();\n\n  event Unpaused();\n\n  // ============ Modifier ============\n  /**\n   * @notice Reverts the call if the expected delay has not elapsed.\n   * @param start Timestamp marking the beginning of the delay period.\n   */\n  modifier delayElapsed(uint256 start) {\n    // Ensure delay has elapsed\n    if ((block.timestamp - start) <= delay()) revert ProposedOwnableFacet__delayElapsed_delayNotElapsed();\n    _;\n  }\n\n  // ============ External: Getters ============\n\n  /**\n   * @notice Returns the address of the current owner.\n   */\n  function owner() public view returns (address) {\n    return LibDiamond.contractOwner();\n  }\n\n  /**\n   * @notice Returns if the router allowlist is removed.\n   */\n  function routerAllowlistRemoved() public view returns (bool) {\n    return s._routerAllowlistRemoved;\n  }\n\n  /**\n   * @notice Returns the address of the proposed owner.\n   */\n  function proposed() public view returns (address) {\n    return s._proposed;\n  }\n\n  /**\n   * @notice Returns the address of the proposed owner.\n   */\n  function proposedTimestamp() public view returns (uint256) {\n    return s._proposedOwnershipTimestamp;\n  }\n\n  /**\n   * @notice Returns the timestamp when router allowlist was last proposed to be removed\n   */\n  function routerAllowlistTimestamp() public view returns (uint256) {\n    return s._routerAllowlistTimestamp;\n  }\n\n  /**\n   * @notice Returns the delay period before a new owner can be accepted.\n   */\n  function delay() public view returns (uint256) {\n    return LibDiamond.acceptanceDelay();\n  }\n\n  /**\n   * @notice Returns if paused or not.\n   */\n  function paused() public view returns (bool) {\n    return s._paused;\n  }\n\n  /**\n   * @notice Returns the Role of the address\n   * @dev returns uint value of representing enum value of Role\n   * @param _role The address for which Role need to be queried\n   */\n  function queryRole(address _role) public view returns (Role) {\n    return s.roles[_role];\n  }\n\n  // ============ External ============\n\n  /**\n   * @notice Indicates if the ownership of the router allowlist has\n   * been renounced\n   */\n  function proposeRouterAllowlistRemoval() public onlyOwnerOrAdmin {\n    // Use contract as source of truth\n    // Will fail if all ownership is renounced by modifier\n    if (s._routerAllowlistRemoved) revert ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange();\n\n    // Begin delay, emit event\n    _setRouterAllowlistTimestamp();\n  }\n\n  /**\n   * @notice Indicates if the ownership of the asset allowlist has\n   * been renounced\n   */\n  function removeRouterAllowlist() public onlyOwnerOrAdmin delayElapsed(s._routerAllowlistTimestamp) {\n    // Contract as sounce of truth\n    // Will fail if all ownership is renounced by modifier\n    if (s._routerAllowlistRemoved) revert ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange();\n\n    // Ensure there has been a proposal cycle started\n    if (s._routerAllowlistTimestamp == 0) revert ProposedOwnableFacet__removeRouterAllowlist_noProposal();\n\n    // Set renounced, emit event, reset timestamp to 0\n    _setRouterAllowlistRemoved(true);\n  }\n\n  /**\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\n   * newly proposed owner as step 1 in a 2-step process\n   */\n  function proposeNewOwner(address newlyProposed) public onlyOwner {\n    // Contract as source of truth\n    if (s._proposed == newlyProposed || newlyProposed == address(0))\n      revert ProposedOwnableFacet__proposeNewOwner_invalidProposal();\n\n    // Sanity check: reasonable proposal\n    if (owner() == newlyProposed) revert ProposedOwnableFacet__proposeNewOwner_noOwnershipChange();\n\n    _setProposed(newlyProposed);\n  }\n\n  /**\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\n   * Can only be called by the proposed owner.\n   */\n  function acceptProposedOwner() public onlyProposed delayElapsed(s._proposedOwnershipTimestamp) {\n    // Contract as source of truth\n    if (owner() == s._proposed) revert ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange();\n\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\n    // the only time this would happen is if the _proposed was never\n    // set (will fail from modifier) or if the owner == _proposed (checked\n    // above)\n\n    // Emit event, set new owner, reset timestamp\n    _setOwner(s._proposed);\n  }\n\n  /**\n   * @notice Use to revoke the Role of an address to None\n   * Can only be called by Owner or Role.Admin\n   * @dev input address will be assingned default value i.e Role.None under mapping roles\n   * @param _revoke - The address to be revoked from it's Role\n   */\n  function revokeRole(address _revoke) public onlyOwnerOrAdmin {\n    // Use contract as source of truth\n    // Will fail if candidate isn't assinged any Role OR input address is addressZero\n    Role revokedRole = s.roles[_revoke];\n    if (revokedRole == Role.None || _revoke == address(0)) revert ProposedOwnableFacet__revokeRole_invalidInput();\n\n    s.roles[_revoke] = Role.None;\n    emit RevokeRole(_revoke, revokedRole);\n  }\n\n  /**\n   * @notice Use to assign an address Router role\n   * Address with Router has permission to add new router\n   * Can only be called by Owner or Role.RouterAdmin\n   * @dev requested address will be whitelisted as Role.RouterAdmin under mapping roles\n   * @param _router - The address to be assigned as Role.RouterAdmin under roles\n   */\n  function assignRoleRouterAdmin(address _router) public onlyOwnerOrAdmin {\n    // Use contract as source of truth\n    // Will fail if candidate is already added OR input address is addressZero\n    if (s.roles[_router] != Role.None || _router == address(0))\n      revert ProposedOwnableFacet__assignRoleRouter_invalidInput();\n\n    s.roles[_router] = Role.RouterAdmin;\n    emit AssignRoleRouter(_router);\n  }\n\n  /**\n   * @notice Use to assign an address Watcher role\n   * Address with Watcher role has permission to pause\n   * Can only be called by Owner or Role.Admin\n   * @dev requested address will be allowlisted as Role.Watcher under mapping roles\n   * @param _watcher - The address to be assigned as Role.Watcher under roles\n   */\n  function assignRoleWatcher(address _watcher) public onlyOwnerOrAdmin {\n    // Use contract as source of truth\n    // Will fail if candidate is already added OR input address is addressZero\n    if (s.roles[_watcher] != Role.None || _watcher == address(0))\n      revert ProposedOwnableFacet__assignRoleWatcher_invalidInput();\n\n    s.roles[_watcher] = Role.Watcher;\n    emit AssignRoleWatcher(_watcher);\n  }\n\n  /**\n   * @notice Use to assign an address Admin role\n   * Address with Admin role has permission to all else of Router & Watcher role\n   * Can only be called by Owner or Role.Admin\n   * @dev requested address will be allowlisted as Role.Admin under mapping roles\n   * @param _admin - The address to beassigned as Role.Admin under roles\n   */\n  function assignRoleAdmin(address _admin) public onlyOwnerOrAdmin {\n    // Use contract as source of truth\n    // Will fail if candidate is already added OR input address is addressZero\n    if (s.roles[_admin] != Role.None || _admin == address(0))\n      revert ProposedOwnableFacet__assignRoleAdmin_invalidInput();\n\n    s.roles[_admin] = Role.Admin;\n    emit AssignRoleAdmin(_admin);\n  }\n\n  function pause() public onlyOwnerOrWatcher {\n    s._paused = true;\n    emit Paused();\n  }\n\n  function unpause() public onlyOwnerOrAdmin {\n    delete s._paused;\n    emit Unpaused();\n  }\n\n  ////// INTERNAL //////\n\n  function _setRouterAllowlistTimestamp() private {\n    s._routerAllowlistTimestamp = block.timestamp;\n    emit RouterAllowlistRemovalProposed(block.timestamp);\n  }\n\n  function _setRouterAllowlistRemoved(bool value) private {\n    s._routerAllowlistRemoved = value;\n    delete s._routerAllowlistTimestamp;\n    emit RouterAllowlistRemoved(value);\n  }\n\n  function _setOwner(address newOwner) private {\n    delete s._proposedOwnershipTimestamp;\n    delete s._proposed;\n    LibDiamond.setContractOwner(newOwner);\n  }\n\n  function _setProposed(address newlyProposed) private {\n    s._proposedOwnershipTimestamp = block.timestamp;\n    s._proposed = newlyProposed;\n    emit OwnershipProposed(newlyProposed);\n  }\n}\n"},"contracts/core/connext/facets/RelayerFacet.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {BaseConnextFacet} from \"./BaseConnextFacet.sol\";\n\ncontract RelayerFacet is BaseConnextFacet {\n  // ========== Custom Errors ===========\n  error RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault();\n  error RelayerFacet__addRelayer_alreadyApproved();\n  error RelayerFacet__removeRelayer_notApproved();\n\n  // ========== Events ===========\n  /**\n   * @notice Emitted when the relayerFeeVault variable is updated\n   * @param oldVault - The relayerFeeVault old value\n   * @param newVault - The relayerFeeVault new value\n   * @param caller - The account that called the function\n   */\n  event RelayerFeeVaultUpdated(address oldVault, address newVault, address caller);\n\n  /**\n   * @notice Emitted when a relayer is added or removed from allowlists\n   * @param relayer - The relayer address to be added or removed\n   * @param caller - The account that called the function\n   */\n  event RelayerAdded(address relayer, address caller);\n\n  /**\n   * @notice Emitted when a relayer is added or removed from allowlists\n   * @param relayer - The relayer address to be added or removed\n   * @param caller - The account that called the function\n   */\n  event RelayerRemoved(address relayer, address caller);\n\n  // ============ Modifiers ============\n\n  // ============ Getters ============\n\n  function approvedRelayers(address _relayer) public view returns (bool) {\n    return s.approvedRelayers[_relayer];\n  }\n\n  function relayerFeeVault() external view returns (address) {\n    return s.relayerFeeVault;\n  }\n\n  // ============ Admin functions ============\n\n  /**\n   * @notice Updates the relayer fee router\n   * @param _relayerFeeVault The address of the new router\n   */\n  function setRelayerFeeVault(address _relayerFeeVault) external onlyOwnerOrAdmin {\n    address old = address(s.relayerFeeVault);\n    if (old == _relayerFeeVault) revert RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault();\n\n    s.relayerFeeVault = _relayerFeeVault;\n    emit RelayerFeeVaultUpdated(old, _relayerFeeVault, msg.sender);\n  }\n\n  /**\n   * @notice Used to add approved relayer\n   * @param _relayer - The relayer address to add\n   */\n  function addRelayer(address _relayer) external onlyOwnerOrAdmin {\n    if (s.approvedRelayers[_relayer]) revert RelayerFacet__addRelayer_alreadyApproved();\n    s.approvedRelayers[_relayer] = true;\n\n    emit RelayerAdded(_relayer, msg.sender);\n  }\n\n  /**\n   * @notice Used to remove approved relayer\n   * @param _relayer - The relayer address to remove\n   */\n  function removeRelayer(address _relayer) external onlyOwnerOrAdmin {\n    if (!s.approvedRelayers[_relayer]) revert RelayerFacet__removeRelayer_notApproved();\n    delete s.approvedRelayers[_relayer];\n\n    emit RelayerRemoved(_relayer, msg.sender);\n  }\n}\n"},"contracts/core/connext/facets/RoutersFacet.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {TypeCasts} from \"../../../shared/libraries/TypeCasts.sol\";\n\nimport {Constants} from \"../libraries/Constants.sol\";\nimport {AssetLogic} from \"../libraries/AssetLogic.sol\";\nimport {RouterConfig} from \"../libraries/LibConnextStorage.sol\";\nimport {TokenId} from \"../libraries/TokenId.sol\";\n\nimport {BaseConnextFacet} from \"./BaseConnextFacet.sol\";\n\n/**\n * @notice\n * This contract is designed to manage router access, meaning it maintains the\n * router recipients, owners, and the router allowlist itself.\n *\n * As a router, there are three important permissions:\n * `router` - this is the address that will sign bids sent to the sequencer\n * `routerRecipient` - this is the address that receives funds when liquidity is withdrawn\n * `routerOwner` - this is the address permitted to update recipients and propose new owners\n *\n * In cases where the owner is not set, the caller should be the `router` itself. In cases where the\n * `routerRecipient` is not set, the funds can be removed to anywhere.\n *\n * When setting a new `routerOwner`, the current owner (or router) must create a proposal, which\n * can be accepted by the proposed owner after the delay period. If the proposed owner is the empty\n * address, then it must be accepted by the current owner.\n */\ncontract RoutersFacet is BaseConnextFacet {\n  // ========== Custom Errors ===========\n  error RoutersFacet__acceptProposedRouterOwner_notElapsed();\n  error RoutersFacet__acceptProposedRouterOwner_badCaller();\n  error RoutersFacet__initializeRouter_configNotEmpty();\n  error RoutersFacet__setRouterRecipient_notNewRecipient();\n  error RoutersFacet__onlyRouterOwner_notRouterOwner();\n  error RoutersFacet__unapproveRouter_routerEmpty();\n  error RoutersFacet__unapproveRouter_notAdded();\n  error RoutersFacet__approveRouter_routerEmpty();\n  error RoutersFacet__approveRouter_alreadyAdded();\n  error RoutersFacet__proposeRouterOwner_notNewOwner();\n  error RoutersFacet__proposeRouterOwner_badRouter();\n  error RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer();\n  error RoutersFacet__addLiquidityForRouter_routerEmpty();\n  error RoutersFacet__addLiquidityForRouter_amountIsZero();\n  error RoutersFacet__addLiquidityForRouter_badRouter();\n  error RoutersFacet__addLiquidityForRouter_capReached();\n  error RoutersFacet__removeRouterLiquidity_recipientEmpty();\n  error RoutersFacet__removeRouterLiquidity_amountIsZero();\n  error RoutersFacet__removeRouterLiquidity_insufficientFunds();\n  error RoutersFacet__removeRouterLiquidityFor_notOwner();\n  error RoutersFacet__setLiquidityFeeNumerator_tooSmall();\n  error RoutersFacet__setLiquidityFeeNumerator_tooLarge();\n  error RoutersFacet__approveRouterForPortal_notAdded();\n  error RoutersFacet__approveRouterForPortal_alreadyApproved();\n  error RoutersFacet__unapproveRouterForPortal_notApproved();\n  error RoutersFacet__setRouterOwner_noChange();\n\n  // ============ Properties ============\n\n  // ============ Events ============\n\n  /**\n   * @notice Emitted when a new router is added\n   * @param router - The address of the added router\n   * @param caller - The account that called the function\n   */\n  event RouterAdded(address indexed router, address caller);\n\n  /**\n   * @notice Emitted when an existing router is removed\n   * @param router - The address of the removed router\n   * @param caller - The account that called the function\n   */\n  event RouterRemoved(address indexed router, address caller);\n\n  /**\n   * @notice Emitted when the recipient of router is updated\n   * @param router - The address of the added router\n   * @param prevRecipient  - The address of the previous recipient of the router\n   * @param newRecipient  - The address of the new recipient of the router\n   */\n  event RouterRecipientSet(address indexed router, address indexed prevRecipient, address indexed newRecipient);\n\n  /**\n   * @notice Emitted when the owner of router is proposed\n   * @param router - The address of the added router\n   * @param prevProposed  - The address of the previous proposed\n   * @param newProposed  - The address of the new proposed\n   */\n  event RouterOwnerProposed(address indexed router, address indexed prevProposed, address indexed newProposed);\n\n  /**\n   * @notice Emitted when the owner of router is accepted\n   * @param router - The address of the added router\n   * @param prevOwner  - The address of the previous owner of the router\n   * @param newOwner  - The address of the new owner of the router\n   */\n  event RouterOwnerAccepted(address indexed router, address indexed prevOwner, address indexed newOwner);\n\n  /**\n   * @notice Emitted when a router adds a config via `addRouterConfig`\n   * @dev This does not confer permissions onto the router, only the configuration\n   * @param router The router initialized\n   *\n   */\n  event RouterInitialized(address indexed router);\n\n  /**\n   * @notice Emitted when the maxRoutersPerTransfer variable is updated\n   * @param maxRoutersPerTransfer - The maxRoutersPerTransfer new value\n   * @param caller - The account that called the function\n   */\n  event MaxRoutersPerTransferUpdated(uint256 maxRoutersPerTransfer, address caller);\n\n  /**\n   * @notice Emitted when the LIQUIDITY_FEE_NUMERATOR variable is updated\n   * @param liquidityFeeNumerator - The LIQUIDITY_FEE_NUMERATOR new value\n   * @param caller - The account that called the function\n   */\n  event LiquidityFeeNumeratorUpdated(uint256 liquidityFeeNumerator, address caller);\n\n  /**\n   * @notice Emitted when a router is approved for Portal\n   * @param router - The address of the approved router\n   * @param caller - The account that called the function\n   */\n  event RouterApprovedForPortal(address router, address caller);\n\n  /**\n   * @notice Emitted when a router is disapproved for Portal\n   * @param router - The address of the disapproved router\n   * @param caller - The account that called the function\n   */\n  event RouterUnapprovedForPortal(address router, address caller);\n\n  /**\n   * @notice Emitted when a router adds liquidity to the contract\n   * @param router - The address of the router the funds were credited to\n   * @param local - The address of the token added (all liquidity held in local asset)\n   * @param key - The hash of the canonical id and domain\n   * @param amount - The amount of liquidity added\n   * @param caller - The account that called the function\n   */\n  event RouterLiquidityAdded(address indexed router, address local, bytes32 key, uint256 amount, address caller);\n\n  /**\n   * @notice Emitted when a router withdraws liquidity from the contract\n   * @param router - The router you are removing liquidity from\n   * @param to - The address the funds were withdrawn to\n   * @param local - The address of the token withdrawn\n   * @param amount - The amount of liquidity withdrawn\n   * @param caller - The account that called the function\n   */\n  event RouterLiquidityRemoved(\n    address indexed router,\n    address to,\n    address local,\n    bytes32 key,\n    uint256 amount,\n    address caller\n  );\n\n  // ============ Modifiers ============\n\n  /**\n   * @notice Asserts caller is the router owner\n   */\n  modifier onlyRouterOwner(address _router) {\n    if (s.routerConfigs[_router].owner != msg.sender) revert RoutersFacet__onlyRouterOwner_notRouterOwner();\n    _;\n  }\n\n  // ============ Getters ==============\n\n  function LIQUIDITY_FEE_NUMERATOR() public view returns (uint256) {\n    return s.LIQUIDITY_FEE_NUMERATOR;\n  }\n\n  function LIQUIDITY_FEE_DENOMINATOR() public pure returns (uint256) {\n    return Constants.BPS_FEE_DENOMINATOR;\n  }\n\n  /**\n   * @notice Returns the approved router for the given router address\n   * @param _router The relevant router address\n   */\n  function getRouterApproval(address _router) public view returns (bool) {\n    return s.routerConfigs[_router].approved;\n  }\n\n  /**\n   * @notice Returns the recipient for the specified router\n   * @dev The recipient (if set) receives all funds when router liquidity is removed\n   * @param _router The relevant router address\n   */\n  function getRouterRecipient(address _router) public view returns (address) {\n    return s.routerConfigs[_router].recipient;\n  }\n\n  /**\n   * @notice Returns the router owner if it is set, or the router itself if not\n   * @param _router The relevant router address\n   */\n  function getRouterOwner(address _router) public view returns (address) {\n    return s.routerConfigs[_router].owner;\n  }\n\n  /**\n   * @notice Returns the currently proposed router owner\n   * @dev All routers must wait for the delay timeout before accepting a new owner\n   * @param _router The relevant router address\n   */\n  function getProposedRouterOwner(address _router) public view returns (address) {\n    return s.routerConfigs[_router].proposed;\n  }\n\n  /**\n   * @notice Returns the currently proposed router owner timestamp\n   * @dev All routers must wait for the delay timeout before accepting a new owner\n   * @param _router The relevant router address\n   */\n  function getProposedRouterOwnerTimestamp(address _router) public view returns (uint256) {\n    return s.routerConfigs[_router].proposedTimestamp;\n  }\n\n  function maxRoutersPerTransfer() public view returns (uint256) {\n    return s.maxRoutersPerTransfer;\n  }\n\n  function routerBalances(address _router, address _asset) public view returns (uint256) {\n    return s.routerBalances[_router][_asset];\n  }\n\n  /**\n   * @notice Returns whether the router is approved for portals or not\n   * @param _router The relevant router address\n   */\n  function getRouterApprovalForPortal(address _router) public view returns (bool) {\n    return s.routerConfigs[_router].portalApproved;\n  }\n\n  // ============ Admin methods ==============\n\n  /**\n   * @notice Used to allowlist a given router\n   * @param _router Router address to setup\n   */\n  function approveRouter(address _router) external onlyOwnerOrRouter {\n    // Sanity check: not empty\n    if (_router == address(0)) revert RoutersFacet__approveRouter_routerEmpty();\n\n    // Sanity check: needs approval\n    if (s.routerConfigs[_router].approved) revert RoutersFacet__approveRouter_alreadyAdded();\n\n    // Approve router\n    s.routerConfigs[_router].approved = true;\n\n    // Emit event\n    emit RouterAdded(_router, msg.sender);\n  }\n\n  /**\n   * @notice Used to remove routers that can transact crosschain\n   * @param _router Router address to remove\n   */\n  function unapproveRouter(address _router) external onlyOwnerOrRouter {\n    // Sanity check: not empty\n    if (_router == address(0)) revert RoutersFacet__unapproveRouter_routerEmpty();\n\n    // Sanity check: needs removal\n    RouterConfig memory config = s.routerConfigs[_router];\n    if (!config.approved) revert RoutersFacet__unapproveRouter_notAdded();\n\n    // Update approvals in config mapping\n    delete s.routerConfigs[_router].approved;\n    delete s.routerConfigs[_router].portalApproved;\n\n    // Emit event\n    emit RouterRemoved(_router, msg.sender);\n  }\n\n  /**\n   * @notice Used to set the max amount of routers a payment can be routed through\n   * @param _newMaxRouters The new max amount of routers\n   */\n  function setMaxRoutersPerTransfer(uint256 _newMaxRouters) external onlyOwnerOrAdmin {\n    if (_newMaxRouters == 0 || _newMaxRouters == s.maxRoutersPerTransfer)\n      revert RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer();\n\n    emit MaxRoutersPerTransferUpdated(_newMaxRouters, msg.sender);\n\n    s.maxRoutersPerTransfer = _newMaxRouters;\n  }\n\n  /**\n   * @notice Sets the LIQUIDITY_FEE_NUMERATOR\n   * @dev Admin can set LIQUIDITY_FEE_NUMERATOR variable, Liquidity fee should be less than 5%\n   * @param _numerator new LIQUIDITY_FEE_NUMERATOR\n   */\n  function setLiquidityFeeNumerator(uint256 _numerator) external onlyOwnerOrAdmin {\n    // Slightly misleading: the liquidity fee numerator is not the amount charged,\n    // but the amount received after fees are deducted (e.g. 9995/10000 would be .005%).\n    uint256 denominator = Constants.BPS_FEE_DENOMINATOR;\n    if (_numerator < (denominator * 95) / 100) revert RoutersFacet__setLiquidityFeeNumerator_tooSmall();\n\n    if (_numerator > denominator) revert RoutersFacet__setLiquidityFeeNumerator_tooLarge();\n    s.LIQUIDITY_FEE_NUMERATOR = _numerator;\n\n    emit LiquidityFeeNumeratorUpdated(_numerator, msg.sender);\n  }\n\n  /**\n   * @notice Allow router to use Portals\n   * @param _router - The router address to approve\n   */\n  function approveRouterForPortal(address _router) external onlyOwnerOrAdmin {\n    RouterConfig memory config = s.routerConfigs[_router];\n    if (!config.approved && !_isRouterAllowlistRemoved()) revert RoutersFacet__approveRouterForPortal_notAdded();\n    if (config.portalApproved) revert RoutersFacet__approveRouterForPortal_alreadyApproved();\n\n    s.routerConfigs[_router].portalApproved = true;\n\n    emit RouterApprovedForPortal(_router, msg.sender);\n  }\n\n  /**\n   * @notice Remove router access to use Portals\n   * @param _router - The router address to remove approval\n   */\n  function unapproveRouterForPortal(address _router) external onlyOwnerOrAdmin {\n    if (!s.routerConfigs[_router].portalApproved) revert RoutersFacet__unapproveRouterForPortal_notApproved();\n\n    delete s.routerConfigs[_router].portalApproved;\n\n    emit RouterUnapprovedForPortal(_router, msg.sender);\n  }\n\n  // ============ Public methods ==============\n\n  /**\n   * @notice Sets the designated recipient for a router\n   * @dev Router should only be able to set this once otherwise if router key compromised,\n   * no problem is solved since attacker could just update recipient\n   * @param _router Router address to set recipient\n   * @param _recipient Recipient Address to set to router\n   */\n  function setRouterRecipient(address _router, address _recipient) external onlyRouterOwner(_router) {\n    _setRouterRecipient(_router, _recipient, s.routerConfigs[_router].recipient);\n  }\n\n  /**\n   * @notice Current owner or router may propose a new router owner\n   * @dev If routers burn their ownership, they can no longer update the recipient\n   * @param _router Router address to set recipient\n   * @param _proposed Proposed owner Address to set to router\n   */\n  function proposeRouterOwner(address _router, address _proposed) external onlyRouterOwner(_router) {\n    // NOTE: If routers burn their ownership, they can no longer update the recipient\n\n    // Check that proposed is different than current owner\n    RouterConfig memory config = s.routerConfigs[_router];\n    if (config.owner == _proposed) revert RoutersFacet__proposeRouterOwner_notNewOwner();\n\n    // Check that proposed is different than current proposed\n    if (config.proposed == _proposed) revert RoutersFacet__proposeRouterOwner_badRouter();\n\n    // Set proposed owner + timestamp\n    s.routerConfigs[_router].proposed = _proposed;\n    s.routerConfigs[_router].proposedTimestamp = block.timestamp;\n\n    // Emit event\n    emit RouterOwnerProposed(_router, config.proposed, _proposed);\n  }\n\n  /**\n   * @notice New router owner must accept role, or previous if proposed is 0x0\n   * @param _router Router address to set recipient\n   */\n  function acceptProposedRouterOwner(address _router) external {\n    RouterConfig memory config = s.routerConfigs[_router];\n\n    // Check timestamp has passed\n    if (block.timestamp - config.proposedTimestamp <= Constants.GOVERNANCE_DELAY)\n      revert RoutersFacet__acceptProposedRouterOwner_notElapsed();\n\n    // Check the caller\n    address expected = config.proposed == address(0) ? config.owner : config.proposed;\n    if (msg.sender != expected) {\n      revert RoutersFacet__acceptProposedRouterOwner_badCaller();\n    }\n\n    // Update the current owner\n    _setRouterOwner(_router, config.proposed, config.owner);\n\n    // Reset proposal + timestamp\n    if (config.proposed != address(0)) {\n      delete s.routerConfigs[_router].proposed;\n    }\n    delete s.routerConfigs[_router].proposedTimestamp;\n  }\n\n  /**\n   * @notice Can be called by anyone to set a config for their router (the msg.sender)\n   * @dev Does not set allowlisting permissions, only owner and recipient\n   * @param _owner The owner (can change recipient, proposes new owners)\n   * @param _recipient Where liquidity will be withdrawn to\n   */\n  function initializeRouter(address _owner, address _recipient) external {\n    // Ensure the config is empty\n    RouterConfig memory config = s.routerConfigs[msg.sender];\n    if (\n      config.owner != address(0) ||\n      config.recipient != address(0) ||\n      config.proposed != address(0) ||\n      config.proposedTimestamp > 0\n    ) {\n      revert RoutersFacet__initializeRouter_configNotEmpty();\n    }\n\n    // Default owner should be router\n    if (_owner == address(0)) {\n      _owner = msg.sender;\n    }\n    // Update routerOwner (zero address possible)\n    _setRouterOwner(msg.sender, _owner, address(0));\n\n    // Update router recipient (fine to have no recipient provided)\n    if (_recipient != address(0)) {\n      _setRouterRecipient(msg.sender, _recipient, address(0));\n    }\n\n    // Emit event\n    emit RouterInitialized(msg.sender);\n  }\n\n  /**\n   * @notice This is used by anyone to increase a router's available liquidity for a given asset.\n   * @dev The liquidity will be held in the local asset, which is the representation if you\n   * are *not* on the canonical domain, and the canonical asset otherwise.\n   * @param _amount - The amount of liquidity to add for the router\n   * @param _local - The address of the asset you're adding liquidity for. If adding liquidity of the\n   * native asset, routers may use `address(0)` or the wrapped asset\n   * @param _router The router you are adding liquidity on behalf of\n   */\n  function addRouterLiquidityFor(\n    uint256 _amount,\n    address _local,\n    address _router\n  ) external payable nonReentrant whenNotPaused {\n    _addLiquidityForRouter(_amount, _local, _router);\n  }\n\n  /**\n   * @notice This is used by any router to increase their available liquidity for a given asset.\n   * @dev The liquidity will be held in the local asset, which is the representation if you\n   * are *not* on the canonical domain, and the canonical asset otherwise.\n   * @param _amount - The amount of liquidity to add for the router\n   * @param _local - The address of the asset you're adding liquidity for. If adding liquidity of the\n   * native asset, routers may use `address(0)` or the wrapped asset\n   */\n  function addRouterLiquidity(uint256 _amount, address _local) external payable nonReentrant whenNotPaused {\n    _addLiquidityForRouter(_amount, _local, msg.sender);\n  }\n\n  /**\n   * @notice This is used by any router owner to decrease their available liquidity for a given asset.\n   * @dev Using the `_canonical` information in the interface instead of the local asset to allow\n   * routers to remove liquidity even if the asset is delisted\n   * @param _canonical The canonical token information in plaintext\n   * @param _amount - The amount of liquidity to remove for the router\n   * native asset, routers may use `address(0)` or the wrapped asset\n   * @param _to The address that will receive the liquidity being removed\n   * @param _router The address of the router\n   */\n  function removeRouterLiquidityFor(\n    TokenId memory _canonical,\n    uint256 _amount,\n    address payable _to,\n    address _router\n  ) external nonReentrant whenNotPaused {\n    // Caller must be the router owner, if defined, else the router\n    address owner = s.routerConfigs[_router].owner;\n    address permissioned = owner == address(0) ? _router : owner;\n    if (msg.sender != permissioned) revert RoutersFacet__removeRouterLiquidityFor_notOwner();\n    // Remove liquidity\n    _removeLiquidityForRouter(_amount, _canonical, _to, _router);\n  }\n\n  /**\n   * @notice This is used by any router to decrease their available liquidity for a given asset.\n   * @dev Using the `_canonical` information in the interface instead of the local asset to allow\n   * routers to remove liquidity even if the asset is delisted\n   * @param _canonical The canonical token information in plaintext\n   * @param _amount - The amount of liquidity to remove for the router\n   * @param _to The address that will receive the liquidity being removed if no router recipient exists.\n   */\n  function removeRouterLiquidity(\n    TokenId memory _canonical,\n    uint256 _amount,\n    address payable _to\n  ) external nonReentrant whenNotPaused {\n    _removeLiquidityForRouter(_amount, _canonical, _to, msg.sender);\n  }\n\n  // ============ Internal functions ============\n\n  /**\n   * @notice Sets the router recipient\n   * @param _router The router to set the recipient for\n   * @param _updated The recipient to set\n   * @param _previous The existing recipient\n   */\n  function _setRouterRecipient(\n    address _router,\n    address _updated,\n    address _previous\n  ) internal {\n    // Check recipient is changing\n    if (_previous == _updated) revert RoutersFacet__setRouterRecipient_notNewRecipient();\n\n    // Set new recipient\n    s.routerConfigs[_router].recipient = _updated;\n\n    // Emit event\n    emit RouterRecipientSet(_router, _previous, _updated);\n  }\n\n  /**\n   * @notice Sets the router owner\n   * @param _router The router to set the owner for\n   * @param _updated The owner to set\n   * @param _previous The existing owner\n   */\n  function _setRouterOwner(\n    address _router,\n    address _updated,\n    address _previous\n  ) internal {\n    // Check owner is changing\n    if (_previous == _updated) revert RoutersFacet__setRouterOwner_noChange();\n\n    // Set new owner\n    s.routerConfigs[_router].owner = _updated;\n\n    // Emit event\n    emit RouterOwnerAccepted(_router, _previous, _updated);\n  }\n\n  /**\n   * @notice Contains the logic to verify + increment a given routers liquidity\n   * @dev The liquidity will be held in the local asset, which is the representation if you\n   * are *not* on the canonical domain, and the canonical asset otherwise.\n   * @param _amount - The amount of liquidity to add for the router\n   * @param _local - The address of the bridge representation of the asset\n   * @param _router - The router you are adding liquidity on behalf of\n   */\n  function _addLiquidityForRouter(\n    uint256 _amount,\n    address _local,\n    address _router\n  ) internal {\n    // Sanity check: router is sensible.\n    if (_router == address(0)) revert RoutersFacet__addLiquidityForRouter_routerEmpty();\n\n    // Sanity check: nonzero amounts.\n    if (_amount == 0) revert RoutersFacet__addLiquidityForRouter_amountIsZero();\n\n    // Get the canonical asset ID from the representation.\n    // NOTE: not using `_getApprovedCanonicalId` because candidate can *only* be local\n    TokenId memory canonical = s.representationToCanonical[_local];\n    if (canonical.domain == 0 && canonical.id == bytes32(0)) {\n      // Assume you are on the canonical domain, which does not update the above mapping\n      // If this is an incorrect assumption, the approval should fail\n      canonical.domain = s.domain;\n      canonical.id = TypeCasts.addressToBytes32(_local);\n    }\n    bytes32 key = AssetLogic.calculateCanonicalHash(canonical.id, canonical.domain);\n    if (!s.tokenConfigs[key].approval) {\n      revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\n    }\n\n    // Sanity check: router is approved.\n    if (!_isRouterAllowlistRemoved() && !getRouterApproval(_router))\n      revert RoutersFacet__addLiquidityForRouter_badRouter();\n\n    // Transfer funds to contract.\n    AssetLogic.handleIncomingAsset(_local, _amount);\n\n    // Update the router balances. Happens after pulling funds to account for\n    // the fee on transfer tokens.\n    s.routerBalances[_router][_local] += _amount;\n\n    emit RouterLiquidityAdded(_router, _local, key, _amount, msg.sender);\n  }\n\n  /**\n   * @notice This is used by any router owner to decrease their available liquidity for a given asset.\n   * @param _amount - The amount of liquidity to remove for the router\n   * @param _canonical The canonical token information in plaintext\n   * @param _to The address that will receive the liquidity being removed\n   * @param _router The address of the router\n   */\n  function _removeLiquidityForRouter(\n    uint256 _amount,\n    TokenId memory _canonical,\n    address payable _to,\n    address _router\n  ) internal {\n    // Transfer to specified recipient IF recipient not set.\n    address recipient = getRouterRecipient(_router);\n    recipient = recipient == address(0) ? _to : recipient;\n\n    // Sanity check: to is sensible.\n    if (recipient == address(0)) revert RoutersFacet__removeRouterLiquidity_recipientEmpty();\n\n    // Sanity check: nonzero amounts.\n    if (_amount == 0) revert RoutersFacet__removeRouterLiquidity_amountIsZero();\n\n    bool onCanonical = _canonical.domain == s.domain;\n\n    // Get the local asset from canonical\n    // NOTE: allow getting unapproved assets to prevent lockup on approval status change\n    // NOTE: not using `_getCanonicalTokenId` because candidate can *only* be local\n    bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\n    address local = onCanonical ? TypeCasts.bytes32ToAddress(_canonical.id) : s.tokenConfigs[key].representation;\n\n    // Get existing router balance.\n    uint256 routerBalance = s.routerBalances[_router][local];\n\n    // Sanity check: amount can be deducted for the router.\n    if (routerBalance < _amount) revert RoutersFacet__removeRouterLiquidity_insufficientFunds();\n\n    // Update router balances.\n    unchecked {\n      s.routerBalances[_router][local] = routerBalance - _amount;\n    }\n\n    // Transfer from contract to specified `to` address.\n    AssetLogic.handleOutgoingAsset(local, recipient, _amount);\n\n    emit RouterLiquidityRemoved(_router, recipient, local, key, _amount, msg.sender);\n  }\n}\n"},"contracts/core/connext/facets/StableSwapFacet.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport {AmplificationUtils, SwapUtils} from \"../libraries/AmplificationUtils.sol\";\n\nimport {BaseConnextFacet} from \"./BaseConnextFacet.sol\";\n\n/**\n * @title Swap - A StableSwap implementation in solidity.\n * @notice This contract is responsible for custody of closely pegged assets (eg. group of stablecoins)\n * and automatic market making system. Users become an LP (Liquidity Provider) by depositing their tokens\n * in desired ratios for an exchange of the pool token that represents their share of the pool.\n * Users can burn pool tokens and withdraw their share of token(s).\n *\n * Each time a swap between the pooled tokens happens, a set fee incurs which effectively gets\n * distributed to the LPs.\n *\n * In case of emergencies, admin can pause additional deposits, swaps, or single-asset withdraws - which\n * stops the ratio of the tokens in the pool from changing.\n *\n * Users can always withdraw their tokens via multi-asset withdraws.\n *\n * @dev Most of the logic is stored as a library `SwapUtils` for the sake of contract readability.\n */\ncontract StableSwapFacet is BaseConnextFacet {\n  using SwapUtils for SwapUtils.Swap;\n  using AmplificationUtils for SwapUtils.Swap;\n\n  // ========== Custom Errors ===========\n  error StableSwapFacet__deadlineCheck_deadlineNotMet();\n  error StableSwapFacet__getSwapToken_outOfRange();\n  error StableSwapFacet__getSwapTokenIndex_notExist();\n  error StableSwapFacet__getSwapTokenBalance_indexOutOfRange();\n\n  // ============ Properties ============\n\n  // ============ Events ============\n  event TokenSwap(\n    bytes32 indexed key,\n    address indexed buyer,\n    uint256 tokensSold,\n    uint256 tokensBought,\n    uint128 soldId,\n    uint128 boughtId\n  );\n  event AddLiquidity(\n    bytes32 indexed key,\n    address indexed provider,\n    uint256[] tokenAmounts,\n    uint256[] fees,\n    uint256 invariant,\n    uint256 lpTokenSupply\n  );\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\n  event RemoveLiquidityOne(\n    bytes32 indexed key,\n    address indexed provider,\n    uint256 lpTokenAmount,\n    uint256 lpTokenSupply,\n    uint256 boughtId,\n    uint256 tokensBought\n  );\n  event RemoveLiquidityImbalance(\n    bytes32 indexed key,\n    address indexed provider,\n    uint256[] tokenAmounts,\n    uint256[] fees,\n    uint256 invariant,\n    uint256 lpTokenSupply\n  );\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\n\n  // ============ Modifiers ============\n\n  /**\n   * @notice Modifier to check deadline against current timestamp\n   * @param deadline latest timestamp to accept this transaction\n   */\n  modifier deadlineCheck(uint256 deadline) {\n    if (block.timestamp > deadline) revert StableSwapFacet__deadlineCheck_deadlineNotMet();\n    _;\n  }\n\n  // ============ View Functions ============\n  /**\n   * @notice Return Stable swap storage\n   * @param key Hash of the canonical id + domain\n   * @return SwapUtils.Swap\n   */\n  function getSwapStorage(bytes32 key) external view returns (SwapUtils.Swap memory) {\n    return s.swapStorages[key];\n  }\n\n  /**\n   * @notice Return LP token for canonical Id\n   * @param key Hash of the canonical id + domain\n   * @return LPToken\n   */\n  function getSwapLPToken(bytes32 key) external view returns (address) {\n    return address(s.swapStorages[key].lpToken);\n  }\n\n  /**\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\n   * @dev See the StableSwap paper for details\n   * @param key Hash of the canonical id + domain\n   * @return A parameter\n   */\n  function getSwapA(bytes32 key) external view returns (uint256) {\n    return s.swapStorages[key].getA();\n  }\n\n  /**\n   * @notice Return A in its raw precision form\n   * @dev See the StableSwap paper for details\n   * @param key Hash of the canonical id + domain\n   * @return A parameter in its raw precision form\n   */\n  function getSwapAPrecise(bytes32 key) external view returns (uint256) {\n    return s.swapStorages[key].getAPrecise();\n  }\n\n  /**\n   * @notice Return address of the pooled token at given index. Reverts if tokenIndex is out of range.\n   * @param key Hash of the canonical id + domain\n   * @param index the index of the token\n   * @return address of the token at given index\n   */\n  function getSwapToken(bytes32 key, uint8 index) public view returns (IERC20) {\n    if (index >= s.swapStorages[key].pooledTokens.length) revert StableSwapFacet__getSwapToken_outOfRange();\n    return s.swapStorages[key].pooledTokens[index];\n  }\n\n  /**\n   * @notice Return the index of the given token address. Reverts if no matching\n   * token is found.\n   * @param key Hash of the canonical id + domain\n   * @param tokenAddress address of the token\n   * @return the index of the given token address\n   */\n  function getSwapTokenIndex(bytes32 key, address tokenAddress) public view returns (uint8) {\n    uint8 index = s.tokenIndexes[key][tokenAddress];\n    if (address(getSwapToken(key, index)) != tokenAddress) revert StableSwapFacet__getSwapTokenIndex_notExist();\n    return index;\n  }\n\n  /**\n   * @notice Return current balance of the pooled token at given index\n   * @param key Hash of the canonical id + domain\n   * @param index the index of the token\n   * @return current balance of the pooled token at given index with token's native precision\n   */\n  function getSwapTokenBalance(bytes32 key, uint8 index) external view returns (uint256) {\n    if (index >= s.swapStorages[key].balances.length) revert StableSwapFacet__getSwapTokenBalance_indexOutOfRange();\n    return s.swapStorages[key].balances[index];\n  }\n\n  /**\n   * @notice Get the virtual price, to help calculate profit\n   * @param key Hash of the canonical id + domain\n   * @return the virtual price, scaled to the POOL_PRECISION_DECIMALS\n   */\n  function getSwapVirtualPrice(bytes32 key) external view returns (uint256) {\n    return s.swapStorages[key].getVirtualPrice();\n  }\n\n  /**\n   * @notice Calculate amount of tokens you receive on swap\n   * @param key Hash of the canonical id + domain\n   * @param tokenIndexFrom the token the user wants to sell\n   * @param tokenIndexTo the token the user wants to buy\n   * @param dx the amount of tokens the user wants to sell. If the token charges\n   * a fee on transfers, use the amount that gets transferred after the fee.\n   * @return amount of tokens the user will receive\n   */\n  function calculateSwap(\n    bytes32 key,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dx\n  ) external view returns (uint256) {\n    return s.swapStorages[key].calculateSwap(tokenIndexFrom, tokenIndexTo, dx);\n  }\n\n  /**\n   * @notice A simple method to calculate prices from deposits or\n   * withdrawals, excluding fees but including slippage. This is\n   * helpful as an input into the various \"min\" parameters on calls\n   * to fight front-running\n   *\n   * @dev This shouldn't be used outside frontends for user estimates.\n   *\n   * @param key Hash of the canonical id + domain\n   * @param amounts an array of token amounts to deposit or withdrawal,\n   * corresponding to pooledTokens. The amount should be in each\n   * pooled token's native precision. If a token charges a fee on transfers,\n   * use the amount that gets transferred after the fee.\n   * @param deposit whether this is a deposit or a withdrawal\n   * @return token amount the user will receive\n   */\n  function calculateSwapTokenAmount(\n    bytes32 key,\n    uint256[] calldata amounts,\n    bool deposit\n  ) external view returns (uint256) {\n    return s.swapStorages[key].calculateTokenAmount(amounts, deposit);\n  }\n\n  /**\n   * @notice A simple method to calculate amount of each underlying\n   * tokens that is returned upon burning given amount of LP tokens\n   * @param key Hash of the canonical id + domain\n   * @param amount the amount of LP tokens that would be burned on withdrawal\n   * @return array of token balances that the user will receive\n   */\n  function calculateRemoveSwapLiquidity(bytes32 key, uint256 amount) external view returns (uint256[] memory) {\n    return s.swapStorages[key].calculateRemoveLiquidity(amount);\n  }\n\n  /**\n   * @notice Calculate the amount of underlying token available to withdraw\n   * when withdrawing via only single token\n   * @param key Hash of the canonical id + domain\n   * @param tokenAmount the amount of LP token to burn\n   * @param tokenIndex index of which token will be withdrawn\n   * @return availableTokenAmount calculated amount of underlying token\n   * available to withdraw\n   */\n  function calculateRemoveSwapLiquidityOneToken(\n    bytes32 key,\n    uint256 tokenAmount,\n    uint8 tokenIndex\n  ) external view returns (uint256 availableTokenAmount) {\n    return s.swapStorages[key].calculateWithdrawOneToken(tokenAmount, tokenIndex);\n  }\n\n  /**\n   * @notice This function reads the accumulated amount of admin fees of the token with given index\n   * @param key Hash of the canonical id + domain\n   * @param index Index of the pooled token\n   * @return admin's token balance in the token's precision\n   */\n  function getSwapAdminBalance(bytes32 key, uint256 index) external view returns (uint256) {\n    return s.swapStorages[key].getAdminBalance(index);\n  }\n\n  /*** STATE MODIFYING FUNCTIONS ***/\n\n  /**\n   * @notice Swap two tokens using this pool\n   * @param key Hash of the canonical id + domain\n   * @param tokenIndexFrom the token the user wants to swap from\n   * @param tokenIndexTo the token the user wants to swap to\n   * @param dx the amount of tokens the user wants to swap from\n   * @param minDy the min amount the user would like to receive, or revert.\n   * @param deadline latest timestamp to accept this transaction\n   */\n  function swap(\n    bytes32 key,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dx,\n    uint256 minDy,\n    uint256 deadline\n  ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256) {\n    return s.swapStorages[key].swap(tokenIndexFrom, tokenIndexTo, dx, minDy);\n  }\n\n  /**\n   * @notice Swap two tokens using this pool\n   * @param key Hash of the canonical id + domain\n   * @param assetIn the token the user wants to swap from\n   * @param assetOut the token the user wants to swap to\n   * @param amountIn the amount of tokens the user wants to swap from\n   */\n  function swapExact(\n    bytes32 key,\n    uint256 amountIn,\n    address assetIn,\n    address assetOut,\n    uint256 minAmountOut,\n    uint256 deadline\n  ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256) {\n    return\n      s.swapStorages[key].swap(\n        getSwapTokenIndex(key, assetIn),\n        getSwapTokenIndex(key, assetOut),\n        amountIn,\n        minAmountOut\n      );\n  }\n\n  /**\n   * @notice Swap two tokens using this pool\n   * @param key Hash of the canonical id + domain\n   * @param assetIn the token the user wants to swap from\n   * @param assetOut the token the user wants to swap to\n   * @param amountOut the amount of tokens the user wants to swap to\n   */\n  function swapExactOut(\n    bytes32 key,\n    uint256 amountOut,\n    address assetIn,\n    address assetOut,\n    uint256 maxAmountIn,\n    uint256 deadline\n  ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256) {\n    return\n      s.swapStorages[key].swapOut(\n        getSwapTokenIndex(key, assetIn),\n        getSwapTokenIndex(key, assetOut),\n        amountOut,\n        maxAmountIn\n      );\n  }\n\n  /**\n   * @notice Add liquidity to the pool with the given amounts of tokens\n   * @param key Hash of the canonical id + domain\n   * @param amounts the amounts of each token to add, in their native precision\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\n   * should mint, otherwise revert. Handy for front-running mitigation\n   * @param deadline latest timestamp to accept this transaction\n   * @return amount of LP token user minted and received\n   */\n  function addSwapLiquidity(\n    bytes32 key,\n    uint256[] calldata amounts,\n    uint256 minToMint,\n    uint256 deadline\n  ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256) {\n    return s.swapStorages[key].addLiquidity(amounts, minToMint);\n  }\n\n  /**\n   * @notice Burn LP tokens to remove liquidity from the pool. Withdraw fee that decays linearly\n   * over period of 4 weeks since last deposit will apply.\n   * @dev Liquidity can always be removed, even when the pool is paused.\n   * @param key Hash of the canonical id + domain\n   * @param amount the amount of LP tokens to burn\n   * @param minAmounts the minimum amounts of each token in the pool\n   *        acceptable for this burn. Useful as a front-running mitigation\n   * @param deadline latest timestamp to accept this transaction\n   * @return amounts of tokens user received\n   */\n  function removeSwapLiquidity(\n    bytes32 key,\n    uint256 amount,\n    uint256[] calldata minAmounts,\n    uint256 deadline\n  ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256[] memory) {\n    return s.swapStorages[key].removeLiquidity(amount, minAmounts);\n  }\n\n  /**\n   * @notice Remove liquidity from the pool all in one token. Withdraw fee that decays linearly\n   * over period of 4 weeks since last deposit will apply.\n   * @param key Hash of the canonical id + domain\n   * @param tokenAmount the amount of the token you want to receive\n   * @param tokenIndex the index of the token you want to receive\n   * @param minAmount the minimum amount to withdraw, otherwise revert\n   * @param deadline latest timestamp to accept this transaction\n   * @return amount of chosen token user received\n   */\n  function removeSwapLiquidityOneToken(\n    bytes32 key,\n    uint256 tokenAmount,\n    uint8 tokenIndex,\n    uint256 minAmount,\n    uint256 deadline\n  ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256) {\n    return s.swapStorages[key].removeLiquidityOneToken(tokenAmount, tokenIndex, minAmount);\n  }\n\n  /**\n   * @notice Remove liquidity from the pool, weighted differently than the\n   * pool's current balances. Withdraw fee that decays linearly\n   * over period of 4 weeks since last deposit will apply.\n   * @param key Hash of the canonical id + domain\n   * @param amounts how much of each token to withdraw\n   * @param maxBurnAmount the max LP token provider is willing to pay to\n   * remove liquidity. Useful as a front-running mitigation.\n   * @param deadline latest timestamp to accept this transaction\n   * @return amount of LP tokens burned\n   */\n  function removeSwapLiquidityImbalance(\n    bytes32 key,\n    uint256[] calldata amounts,\n    uint256 maxBurnAmount,\n    uint256 deadline\n  ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256) {\n    return s.swapStorages[key].removeLiquidityImbalance(amounts, maxBurnAmount);\n  }\n}\n"},"contracts/core/connext/facets/SwapAdminFacet.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {IERC20, Address, SafeERC20} from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport {Clones} from \"@openzeppelin/contracts/proxy/Clones.sol\";\n\nimport {AmplificationUtils, SwapUtils} from \"../libraries/AmplificationUtils.sol\";\nimport {Constants} from \"../libraries/Constants.sol\";\n\nimport {LPToken} from \"../helpers/LPToken.sol\";\n\nimport {BaseConnextFacet} from \"./BaseConnextFacet.sol\";\n\n/**\n * @title SwapAdminFacet\n * @notice Contract module which exposes only-admin controls for the StableSwapFacet\n * contract.\n *\n * @dev This module is used through inheritance. It will make available the\n * modifier `onlyOwner`, which can be applied to your functions to restrict\n * their use to the owner.\n */\ncontract SwapAdminFacet is BaseConnextFacet {\n  using SafeERC20 for IERC20;\n  using SwapUtils for SwapUtils.Swap;\n  using AmplificationUtils for SwapUtils.Swap;\n\n  // ========== Custom Errors ===========\n  error SwapAdminFacet__initializeSwap_alreadyInitialized();\n  error SwapAdminFacet__initializeSwap_invalidPooledTokens();\n  error SwapAdminFacet__initializeSwap_decimalsMismatch();\n  error SwapAdminFacet__initializeSwap_duplicateTokens();\n  error SwapAdminFacet__initializeSwap_zeroTokenAddress();\n  error SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax();\n  error SwapAdminFacet__initializeSwap_aExceedMax();\n  error SwapAdminFacet__initializeSwap_feeExceedMax();\n  error SwapAdminFacet__initializeSwap_adminFeeExceedMax();\n  error SwapAdminFacet__initializeSwap_failedInitLpTokenClone();\n  error SwapAdminFacet__updateLpTokenTarget_invalidNewAddress();\n  error SwapAdminFacet__removeSwap_notInitialized();\n  error SwapAdminFacet__removeSwap_notDisabledPool();\n  error SwapAdminFacet__removeSwap_delayNotElapsed();\n  error SwapAdminFacet__disableSwap_notInitialized();\n  error SwapAdminFacet__disableSwap_alreadyDisabled();\n\n  // ============ Properties ============\n\n  // ============ Events ============\n\n  /**\n   * @notice Emitted when the owner calls `initializeSwap`\n   * @param key - Identifier for asset\n   * @param swap - The swap that was initialized\n   * @param caller - The caller of the function\n   */\n  event SwapInitialized(bytes32 indexed key, SwapUtils.Swap swap, address caller);\n\n  /**\n   * @notice Emitted when the owner calls `removeSwap`\n   * @param key - Identifier for asset\n   * @param caller - The caller of the function\n   */\n  event SwapRemoved(bytes32 indexed key, address caller);\n\n  /**\n   * @notice Emitted when the owner calls `disableSwap`\n   * @param key - Identifier for asset\n   * @param caller - The caller of the function\n   */\n  event SwapDisabled(bytes32 indexed key, address caller);\n\n  /**\n   * @notice Emitted when the owner withdraws admin fees\n   * @param key - Identifier for asset\n   * @param caller - The caller of the function\n   */\n  event AdminFeesWithdrawn(bytes32 indexed key, address caller);\n\n  /**\n   * @notice Emitted when the owner sets admin fees\n   * @param key - Identifier for asset\n   * @param newAdminFee - The updated fee\n   * @param caller - The caller of the function\n   */\n  event AdminFeesSet(bytes32 indexed key, uint256 newAdminFee, address caller);\n\n  /**\n   * @notice Emitted when the owner sets swap fees\n   * @param key - Identifier for asset\n   * @param newSwapFee - The updated fee\n   * @param caller - The caller of the function\n   */\n  event SwapFeesSet(bytes32 indexed key, uint256 newSwapFee, address caller);\n\n  /**\n   * @notice Emitted when the owner starts ramping up or down the A parameter\n   * @param key - Identifier for asset\n   * @param futureA - The final A value after ramp\n   * @param futureTime - The time A should reach the final value\n   * @param caller - The caller of the function\n   */\n  event RampAStarted(bytes32 indexed key, uint256 futureA, uint256 futureTime, address caller);\n\n  /**\n   * @notice Emitted when the owner stops ramping up or down the A parameter\n   * @param key - Identifier for asset\n   * @param caller - The caller of the function\n   */\n  event RampAStopped(bytes32 indexed key, address caller);\n\n  /**\n   * @notice Emitted when the owner update lpTokenTargetAddress\n   * @param oldAddress - The old lpTokenTargetAddress\n   * @param newAddress - Updated address\n   * @param caller - The caller of the function\n   */\n  event LPTokenTargetUpdated(address oldAddress, address newAddress, address caller);\n\n  // ============ External: Getters ============\n  /**\n   * @notice Returns the lp target token address\n   * @return address\n   */\n  function lpTokenTargetAddress() public view returns (address) {\n    return s.lpTokenTargetAddress;\n  }\n\n  /**\n   * @notice Return if the pool is disabled\n   * @param key Hash of the canonical id + domain\n   * @return disabled flag\n   */\n  function isDisabled(bytes32 key) external view returns (bool) {\n    return s.swapStorages[key].disabled;\n  }\n\n  /*** StableSwap ADMIN FUNCTIONS ***/\n  /**\n   * @notice Initializes this Swap contract with the given parameters.\n   * This will also clone a LPToken contract that represents users'\n   * LP positions. The owner of LPToken will be this contract - which means\n   * only this contract is allowed to mint/burn tokens.\n   *\n   * @dev The swap can only be updated after initialization via `rampA`. This means\n   * if this value is incorrectly set, it will take some time to reach the\n   * correct value.\n   *\n   * @param _key the hash of the canonical id and domain for token\n   * @param _pooledTokens an array of ERC20s this pool will accept.\n   * length of this array should be in 2 ~ 16\n   * @param decimals the decimals to use for each pooled token,\n   * eg 8 for WBTC. Cannot be larger than POOL_PRECISION_DECIMALS(18)\n   * Only fixed decimal tokens are allowed.\n   * @param lpTokenName the long-form name of the token to be deployed\n   * @param lpTokenSymbol the short symbol for the token to be deployed\n   * @param _a the amplification coefficient * n ** (n - 1). See the\n   * StableSwap paper for details\n   * @param _fee default swap fee to be initialized with\n   * @param _adminFee default adminFee to be initialized with\n   */\n  function initializeSwap(\n    bytes32 _key,\n    IERC20[] memory _pooledTokens,\n    uint8[] memory decimals,\n    string memory lpTokenName,\n    string memory lpTokenSymbol,\n    uint256 _a,\n    uint256 _fee,\n    uint256 _adminFee\n  ) external onlyOwnerOrAdmin {\n    if (s.swapStorages[_key].pooledTokens.length != 0) revert SwapAdminFacet__initializeSwap_alreadyInitialized();\n\n    // Check _pooledTokens and precisions parameter\n    if (\n      _pooledTokens.length < Constants.MINIMUM_POOLED_TOKENS || _pooledTokens.length > Constants.MAXIMUM_POOLED_TOKENS\n    ) {\n      revert SwapAdminFacet__initializeSwap_invalidPooledTokens();\n    }\n\n    uint256 numPooledTokens = _pooledTokens.length;\n\n    if (numPooledTokens != decimals.length) revert SwapAdminFacet__initializeSwap_decimalsMismatch();\n\n    uint256[] memory precisionMultipliers = new uint256[](decimals.length);\n\n    for (uint256 i; i < numPooledTokens; ) {\n      if (i != 0) {\n        // Check if index is already used. Check if 0th element is a duplicate.\n        if (s.tokenIndexes[_key][address(_pooledTokens[i])] != 0 || _pooledTokens[0] == _pooledTokens[i])\n          revert SwapAdminFacet__initializeSwap_duplicateTokens();\n      }\n      if (address(_pooledTokens[i]) == address(0)) revert SwapAdminFacet__initializeSwap_zeroTokenAddress();\n\n      if (decimals[i] > Constants.POOL_PRECISION_DECIMALS)\n        revert SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax();\n\n      precisionMultipliers[i] = 10**uint256(Constants.POOL_PRECISION_DECIMALS - decimals[i]);\n      // NOTE: safe to cast to uint8 as the numPooledTokens is that type and the loop ceiling\n      s.tokenIndexes[_key][address(_pooledTokens[i])] = uint8(i);\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    // Check _a, _fee, _adminFee, _withdrawFee parameters\n    if (_a > Constants.MAX_A - 1) revert SwapAdminFacet__initializeSwap_aExceedMax();\n    if (_fee > Constants.MAX_SWAP_FEE - 1) revert SwapAdminFacet__initializeSwap_feeExceedMax();\n    if (_adminFee > Constants.MAX_ADMIN_FEE - 1) revert SwapAdminFacet__initializeSwap_adminFeeExceedMax();\n\n    // Initialize a LPToken contract\n    LPToken lpToken = LPToken(Clones.clone(s.lpTokenTargetAddress));\n    if (!lpToken.initialize(lpTokenName, lpTokenSymbol)) revert SwapAdminFacet__initializeSwap_failedInitLpTokenClone();\n\n    // Initialize swapStorage struct\n    SwapUtils.Swap memory entry = SwapUtils.Swap({\n      key: _key,\n      initialA: _a * Constants.A_PRECISION,\n      futureA: _a * Constants.A_PRECISION,\n      swapFee: _fee,\n      adminFee: _adminFee,\n      lpToken: lpToken,\n      pooledTokens: _pooledTokens,\n      tokenPrecisionMultipliers: precisionMultipliers,\n      balances: new uint256[](_pooledTokens.length),\n      adminFees: new uint256[](_pooledTokens.length),\n      initialATime: 0,\n      futureATime: 0,\n      disabled: false,\n      removeTime: 0\n    });\n    s.swapStorages[_key] = entry;\n    emit SwapInitialized(_key, entry, msg.sender);\n  }\n\n  /**\n   * @notice disable swap for key\n   *\n   * @param _key the hash of the canonical id and domain for token\n   */\n  function disableSwap(bytes32 _key) external onlyOwnerOrAdmin {\n    uint256 numPooledTokens = s.swapStorages[_key].pooledTokens.length;\n\n    if (numPooledTokens == 0) revert SwapAdminFacet__disableSwap_notInitialized();\n    if (s.swapStorages[_key].disabled) revert SwapAdminFacet__disableSwap_alreadyDisabled();\n\n    s.swapStorages[_key].disabled = true;\n    s.swapStorages[_key].removeTime = block.timestamp + Constants.REMOVE_DELAY;\n\n    emit SwapDisabled(_key, msg.sender);\n  }\n\n  /**\n   * @notice remove Swap Struct for key\n   *\n   * @param _key the hash of the canonical id and domain for token\n   */\n  function removeSwap(bytes32 _key) external onlyOwnerOrAdmin {\n    uint256 numPooledTokens = s.swapStorages[_key].pooledTokens.length;\n    if (numPooledTokens == 0) revert SwapAdminFacet__removeSwap_notInitialized();\n\n    if (!s.swapStorages[_key].disabled) revert SwapAdminFacet__removeSwap_notDisabledPool();\n    if (s.swapStorages[_key].removeTime > block.timestamp) revert SwapAdminFacet__removeSwap_delayNotElapsed();\n\n    for (uint256 i; i < numPooledTokens; ) {\n      IERC20 pooledToken = s.swapStorages[_key].pooledTokens[i];\n      if (s.swapStorages[_key].balances[i] > 0) {\n        // if there is not removed balance, transfer to admin wallet.\n        pooledToken.safeTransfer(msg.sender, s.swapStorages[_key].balances[i]);\n      }\n\n      delete s.tokenIndexes[_key][address(pooledToken)];\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    _withdrawAdminFees(_key, msg.sender);\n\n    delete s.swapStorages[_key];\n\n    emit SwapRemoved(_key, msg.sender);\n  }\n\n  /**\n   * @notice Withdraw all admin fees to the contract owner\n   * @param key Hash of the canonical domain and id\n   */\n  function withdrawSwapAdminFees(bytes32 key) external onlyOwnerOrAdmin nonReentrant {\n    _withdrawAdminFees(key, msg.sender);\n  }\n\n  /**\n   * @notice Withdraws all admin fees for pool at key to provided address and emits event\n   * @param _key Hash of the canonical domain and id\n   * @param _to Recipient of fees\n   */\n  function _withdrawAdminFees(bytes32 _key, address _to) internal {\n    s.swapStorages[_key].withdrawAdminFees(_to);\n    emit AdminFeesWithdrawn(_key, _to);\n  }\n\n  /**\n   * @notice Update the admin fee. Admin fee takes portion of the swap fee.\n   * @param key Hash of the canonical domain and id\n   * @param newAdminFee new admin fee to be applied on future transactions\n   */\n  function setSwapAdminFee(bytes32 key, uint256 newAdminFee) external onlyOwnerOrAdmin {\n    s.swapStorages[key].setAdminFee(newAdminFee);\n    emit AdminFeesSet(key, newAdminFee, msg.sender);\n  }\n\n  /**\n   * @notice Update the swap fee to be applied on swaps\n   * @param key Hash of the canonical domain and id\n   * @param newSwapFee new swap fee to be applied on future transactions\n   */\n  function setSwapFee(bytes32 key, uint256 newSwapFee) external onlyOwnerOrAdmin {\n    s.swapStorages[key].setSwapFee(newSwapFee);\n    emit SwapFeesSet(key, newSwapFee, msg.sender);\n  }\n\n  /**\n   * @notice Start ramping up or down A parameter towards given futureA and futureTime\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\n   * the limit range.\n   * @param key Hash of the canonical domain and id\n   * @param futureA the new A to ramp towards\n   * @param futureTime timestamp when the new A should be reached\n   */\n  function rampA(\n    bytes32 key,\n    uint256 futureA,\n    uint256 futureTime\n  ) external onlyOwnerOrAdmin {\n    s.swapStorages[key].rampA(futureA, futureTime);\n    emit RampAStarted(key, futureA, futureTime, msg.sender);\n  }\n\n  /**\n   * @notice Stop ramping A immediately. Reverts if ramp A is already stopped.\n   * @param key Hash of the canonical domain and id\n   */\n  function stopRampA(bytes32 key) external onlyOwnerOrAdmin {\n    s.swapStorages[key].stopRampA();\n    emit RampAStopped(key, msg.sender);\n  }\n\n  /**\n   * @notice Update lpTokenTargetAddress\n   * @param newAddress New lpTokenTargetAddress\n   */\n  function updateLpTokenTarget(address newAddress) external onlyOwnerOrAdmin {\n    if (!Address.isContract(newAddress)) revert SwapAdminFacet__updateLpTokenTarget_invalidNewAddress();\n    emit LPTokenTargetUpdated(s.lpTokenTargetAddress, newAddress, msg.sender);\n    s.lpTokenTargetAddress = newAddress;\n  }\n}\n"},"contracts/core/connext/facets/TokenFacet.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.17;\n\nimport {IERC20Metadata} from \"@openzeppelin/contracts/interfaces/IERC20Metadata.sol\";\n\nimport {TypeCasts} from \"../../../shared/libraries/TypeCasts.sol\";\n\nimport {TokenId} from \"../libraries/TokenId.sol\";\nimport {AssetLogic} from \"../libraries/AssetLogic.sol\";\nimport {TokenConfig} from \"../libraries/LibConnextStorage.sol\";\n\nimport {IStableSwap} from \"../interfaces/IStableSwap.sol\";\nimport {IBridgeToken} from \"../interfaces/IBridgeToken.sol\";\n\nimport {BridgeToken} from \"../helpers/BridgeToken.sol\";\n\nimport {BaseConnextFacet} from \"./BaseConnextFacet.sol\";\n\ncontract TokenFacet is BaseConnextFacet {\n  // ========== Custom Errors ===========\n  error TokenFacet__addAssetId_alreadyAdded();\n  error TokenFacet__addAssetId_badMint();\n  error TokenFacet__addAssetId_badBurn();\n  error TokenFacet__removeAssetId_notAdded();\n  error TokenFacet__removeAssetId_invalidParams();\n  error TokenFacet__removeAssetId_remainsCustodied();\n  error TokenFacet__updateDetails_localNotFound();\n  error TokenFacet__updateDetails_onlyRemote();\n  error TokenFacet__updateDetails_notApproved();\n  error TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical();\n  error TokenFacet__setupAsset_representationListed();\n  error TokenFacet__setupAsset_invalidCanonicalConfiguration();\n  error TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation();\n  error TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain();\n  error TokenFacet__setLiquidityCap_notCanonicalDomain();\n\n  // ============ Events ============\n\n  /**\n   * @notice emitted when a representation token contract is deployed\n   * @param domain the domain of the chain where the canonical asset is deployed\n   * @param id the bytes32 address of the canonical token contract\n   * @param representation the address of the newly locally deployed representation contract\n   */\n  event TokenDeployed(uint32 indexed domain, bytes32 indexed id, address indexed representation);\n\n  /**\n   * @notice Emitted when a new stable-swap AMM is added for the local <> adopted token\n   * @param key - The key in the mapping (hash of canonical id and domain)\n   * @param canonicalId - The canonical identifier of the token the local <> adopted AMM is for\n   * @param domain - The domain of the canonical token for the local <> adopted amm\n   * @param swapPool - The address of the AMM\n   * @param caller - The account that called the function\n   */\n  event StableSwapAdded(\n    bytes32 indexed key,\n    bytes32 indexed canonicalId,\n    uint32 indexed domain,\n    address swapPool,\n    address caller\n  );\n\n  /**\n   * @notice Emitted when a liquidity cap is updated\n   * @param key - The key in the mapping (hash of canonical id and domain)\n   * @param canonicalId - The canonical identifier of the token the local <> adopted AMM is for\n   * @param domain - The domain of the canonical token for the local <> adopted amm\n   * @param cap - The newly enforced liquidity cap (if it is 0, no cap is enforced)\n   * @param caller - The account that called the function\n   */\n  event LiquidityCapUpdated(\n    bytes32 indexed key,\n    bytes32 indexed canonicalId,\n    uint32 indexed domain,\n    uint256 cap,\n    address caller\n  );\n\n  /**\n   * @notice Emitted when a new asset is added\n   * @param key - The key in the mapping (hash of canonical id and domain)\n   * @param canonicalId - The canonical identifier of the token the local <> adopted AMM is for\n   * @param domain - The domain of the canonical token for the local <> adopted amm\n   * @param adoptedAsset - The address of the adopted (user-expected) asset\n   * @param localAsset - The address of the local asset\n   * @param caller - The account that called the function\n   */\n  event AssetAdded(\n    bytes32 indexed key,\n    bytes32 indexed canonicalId,\n    uint32 indexed domain,\n    address adoptedAsset,\n    address localAsset,\n    address caller\n  );\n\n  /**\n   * @notice Emitted when an asset is removed from allowlists\n   * @param key - The hash of the canonical identifier and domain of the token removed\n   * @param caller - The account that called the function\n   */\n  event AssetRemoved(bytes32 indexed key, address caller);\n\n  // ============ Getters ============\n\n  function canonicalToAdopted(bytes32 _key) public view returns (address) {\n    return _getAdoptedAsset(_key);\n  }\n\n  function canonicalToAdopted(TokenId calldata _canonical) public view returns (address) {\n    return _getAdoptedAsset(AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain));\n  }\n\n  function adoptedToCanonical(address _adopted) public view returns (TokenId memory) {\n    TokenId memory canonical = TokenId(s.adoptedToCanonical[_adopted].domain, s.adoptedToCanonical[_adopted].id);\n    return canonical;\n  }\n\n  function canonicalToRepresentation(bytes32 _key) public view returns (address) {\n    return _getRepresentationAsset(_key);\n  }\n\n  function canonicalToRepresentation(TokenId calldata _canonical) public view returns (address) {\n    return _getRepresentationAsset(AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain));\n  }\n\n  function representationToCanonical(address _representation) public view returns (TokenId memory) {\n    TokenId memory canonical = TokenId(\n      s.representationToCanonical[_representation].domain,\n      s.representationToCanonical[_representation].id\n    );\n    return canonical;\n  }\n\n  function getTokenId(address _candidate) public view returns (TokenId memory) {\n    return _getCanonicalTokenId(_candidate);\n  }\n\n  function getLocalAndAdoptedToken(bytes32 _id, uint32 _domain) public view returns (address, address) {\n    return _getLocalAndAdoptedToken(AssetLogic.calculateCanonicalHash(_id, _domain), _id, _domain);\n  }\n\n  function approvedAssets(bytes32 _key) public view returns (bool) {\n    return s.tokenConfigs[_key].approval;\n  }\n\n  function approvedAssets(TokenId calldata _canonical) public view returns (bool) {\n    return approvedAssets(AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain));\n  }\n\n  function adoptedToLocalExternalPools(bytes32 _key) public view returns (IStableSwap) {\n    return IStableSwap(s.tokenConfigs[_key].adoptedToLocalExternalPools);\n  }\n\n  function adoptedToLocalExternalPools(TokenId calldata _canonical) public view returns (IStableSwap) {\n    return adoptedToLocalExternalPools(AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain));\n  }\n\n  function getCustodiedAmount(bytes32 _key) public view returns (uint256) {\n    return s.tokenConfigs[_key].custodied;\n  }\n\n  // ============ Admin functions ============\n\n  /**\n   * @notice Used to add supported assets. This is an admin only function\n   *\n   * @dev When allowlisting the canonical asset, all representational assets would be\n   * allowlisted as well. In the event you have a different adopted asset (i.e. PoS USDC\n   * on polygon), you should *not* allowlist the adopted asset. The stable swap pool\n   * address used should allow you to swap between the local <> adopted asset.\n   *\n   * If a representation has been deployed at any point, `setupAssetWithDeployedRepresentation`\n   * should be used instead.\n   *\n   * The following can only be added on *REMOTE* domains:\n   * - `_adoptedAssetId`\n   * - `_stableSwapPool`\n   *\n   * Whereas the `_cap` can only be added on the canonical domain\n   *\n   * @param _canonical - The canonical asset to add by id and domain. All representations\n   * will be allowlisted as well\n   * @param _canonicalDecimals - The decimals of the canonical asset (will be used for deployed\n   * representation)\n   * @param _representationName - The name to be used for the deployed asset\n   * @param _representationSymbol - The symbol used for the deployed asset\n   * @param _adoptedAssetId - The used asset id for this domain (e.g. PoS USDC for\n   * polygon)\n   * @param _stableSwapPool - The address of the local stableswap pool, if it exists.\n   */\n  function setupAsset(\n    TokenId calldata _canonical,\n    uint8 _canonicalDecimals,\n    string memory _representationName,\n    string memory _representationSymbol,\n    address _adoptedAssetId,\n    address _stableSwapPool,\n    uint256 _cap\n  ) external onlyOwnerOrAdmin returns (address _local) {\n    // Calculate the canonical key.\n    bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\n\n    bool onCanonical = _canonical.domain == s.domain;\n    if (onCanonical) {\n      // On the canonical domain, the local is the canonical address.\n      _local = TypeCasts.bytes32ToAddress(_canonical.id);\n\n      // Sanity check: ensure adopted asset ID == canonical address (or empty).\n      // This could reflect a user error or miscalculation and lead to unexpected behavior.\n      // NOTE: Since we're on canonical domain, there should be no stableswap pool provided.\n      if ((_adoptedAssetId != address(0) && _adoptedAssetId != _local) || _stableSwapPool != address(0)) {\n        revert TokenFacet__setupAsset_invalidCanonicalConfiguration();\n      }\n\n      // Enroll the asset. Pass in address(0) for adopted: it should use the local asset (i.e. the\n      // canonical asset in this case) instead for both adopted and local.\n      _enrollAdoptedAndLocalAssets(true, _canonicalDecimals, address(0), _local, address(0), _canonical, _cap, key);\n    } else {\n      // Cannot already have an assigned representation.\n      // NOTE: *If* it does, it can still be replaced with `setupAssetWithDeployedRepresentation`\n      if (s.tokenConfigs[key].representation != address(0) || s.tokenConfigs[key].representationDecimals != 0) {\n        revert TokenFacet__setupAsset_representationListed();\n      }\n\n      // On remote, deploy a local representation.\n      _local = _deployRepresentation(\n        _canonical.id,\n        _canonical.domain,\n        _canonicalDecimals,\n        _representationName,\n        _representationSymbol\n      );\n      // Enroll the asset.\n      _enrollAdoptedAndLocalAssets(\n        false,\n        _canonicalDecimals,\n        _adoptedAssetId,\n        _local,\n        _stableSwapPool,\n        _canonical,\n        0,\n        key\n      );\n    }\n  }\n\n  /**\n   * @notice Used to add supported assets, without deploying a unique representation\n   * asset, and instead using what admins have provided. This is an admin only function\n   *\n   * @dev This function does very minimal checks to ensure the correct `_representation`\n   * token is used. The only enforced checks are:\n   * - Bridge can mint, and balance of bridge will increase\n   * - Bridge can burn, and balance of bridge will decrease\n   *\n   * However, there are many things that must be checked manually to avoid enrolling a bad\n   * representation:\n   * - decimals must always be equal to canonical decimals\n   * - regular `mint`, `burn`, `ERC20` functionality could be implemented improperly\n   * - the required interface functions (see `IBridgeToken`) may not be implemented\n   * - upgradeability could interfere with required functionality\n   *\n   * Using this method allows admins to override existing local tokens, and should be used\n   * carefully.\n   *\n   * @param _canonical - The canonical asset to add by id and domain. All representations\n   * will be whitelisted as well\n   * @param _representation - The address of the representative asset\n   * @param _adoptedAssetId - The used asset id for this domain (e.g. PoS USDC for\n   * polygon)\n   * @param _stableSwapPool - The address of the local stableswap pool, if it exists.\n   */\n  function setupAssetWithDeployedRepresentation(\n    TokenId calldata _canonical,\n    address _representation,\n    address _adoptedAssetId,\n    address _stableSwapPool\n  ) external onlyOwnerOrAdmin returns (address) {\n    if (_representation == address(0)) {\n      revert TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation();\n    }\n\n    if (_canonical.domain == s.domain) {\n      revert TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain();\n    }\n\n    // Calculate the canonical key.\n    bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\n\n    _enrollAdoptedAndLocalAssets(\n      false,\n      IERC20Metadata(_representation).decimals(),\n      _adoptedAssetId,\n      _representation,\n      _stableSwapPool,\n      _canonical,\n      0,\n      key\n    );\n\n    return _representation;\n  }\n\n  /**\n   * @notice Adds a stable swap pool for the local <> adopted asset.\n   * @dev Must pass in the _canonical information so it can be emitted in event\n   */\n  function addStableSwapPool(TokenId calldata _canonical, address _stableSwapPool) external onlyOwnerOrAdmin {\n    bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\n    _addStableSwapPool(_canonical, _stableSwapPool, key);\n  }\n\n  /**\n   * @notice Adds a stable swap pool for the local <> adopted asset.\n   * @dev Must pass in the _canonical information so it can be emitted in event\n   */\n  function updateLiquidityCap(TokenId calldata _canonical, uint256 _updated) external onlyOwnerOrAdmin {\n    bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\n    _setLiquidityCap(_canonical, _updated, key);\n  }\n\n  /**\n   * @notice Used to remove assets from the allowlist\n   * @param _key - The hash of the canonical id and domain to remove (mapping key)\n   * @param _adoptedAssetId - Corresponding adopted asset to remove\n      * @param _representation - Corresponding representation asset to remove\n\n   */\n  function removeAssetId(\n    bytes32 _key,\n    address _adoptedAssetId,\n    address _representation\n  ) external onlyOwnerOrAdmin {\n    TokenId memory canonical = s.adoptedToCanonical[_adoptedAssetId];\n    _removeAssetId(_key, _adoptedAssetId, _representation, canonical);\n  }\n\n  /**\n   * @notice Used to remove assets from the allowlist\n   * @param _canonical - The canonical id and domain to remove\n   * @param _adoptedAssetId - Corresponding adopted asset to remove\n   * @param _representation - Corresponding representation asset to remove\n   */\n  function removeAssetId(\n    TokenId calldata _canonical,\n    address _adoptedAssetId,\n    address _representation\n  ) external onlyOwnerOrAdmin {\n    bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\n    _removeAssetId(key, _adoptedAssetId, _representation, _canonical);\n  }\n\n  /**\n   * @notice Used to update the name and symbol of a local token\n   * @param _canonical - The canonical id and domain to remove\n   * @param _name - The new name\n   * @param _symbol - The new symbol\n   */\n  function updateDetails(\n    TokenId calldata _canonical,\n    string memory _name,\n    string memory _symbol\n  ) external onlyOwnerOrAdmin {\n    bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\n    address local = AssetLogic.getConfig(key).representation;\n    if (local == address(0)) {\n      revert TokenFacet__updateDetails_localNotFound();\n    }\n\n    // Can only happen on remote domains\n    if (s.domain == _canonical.domain) {\n      revert TokenFacet__updateDetails_onlyRemote();\n    }\n\n    // ensure asset is currently approved because `s.canonicalToRepresentation` does\n    // not get cleared when asset is removed from allowlist\n    if (!s.tokenConfigs[key].approval) {\n      revert TokenFacet__updateDetails_notApproved();\n    }\n\n    // make sure the asset is still active\n    IBridgeToken(local).setDetails(_name, _symbol);\n  }\n\n  // ============ Private Functions ============\n\n  function _enrollAdoptedAndLocalAssets(\n    bool _onCanonical,\n    uint8 _localDecimals,\n    address _adopted,\n    address _local,\n    address _stableSwapPool,\n    TokenId calldata _canonical,\n    uint256 _cap,\n    bytes32 _key\n  ) internal {\n    // Sanity check: canonical ID and domain are not 0.\n    if (_canonical.domain == 0 || _canonical.id == bytes32(\"\")) {\n      revert TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical();\n    }\n\n    // Get true adopted\n    bool adoptedIsLocal = _adopted == address(0);\n    address adopted = adoptedIsLocal ? _local : _adopted;\n\n    // Get whether you are on canonical\n    bool onCanonical = s.domain == _canonical.domain;\n\n    // Sanity check: needs approval\n    if (s.tokenConfigs[_key].approval) revert TokenFacet__addAssetId_alreadyAdded();\n\n    // Sanity check: bridge can mint / burn on remote\n    if (!onCanonical) {\n      IBridgeToken candidate = IBridgeToken(_local);\n      uint256 starting = candidate.balanceOf(address(this));\n      candidate.mint(address(this), 1);\n      if (candidate.balanceOf(address(this)) != starting + 1) {\n        revert TokenFacet__addAssetId_badMint();\n      }\n      candidate.burn(address(this), 1);\n      if (candidate.balanceOf(address(this)) != starting) {\n        revert TokenFacet__addAssetId_badBurn();\n      }\n    }\n\n    // Generate Config\n    // NOTE: Using address(0) for stable swap, then using `_addStableSwap`. Slightly less\n    // efficient, but preserves events. Same case for cap / custodied.\n    // NOTE: IFF on canonical domain, `representation` must *always* be address(0)!\n    s.tokenConfigs[_key] = TokenConfig(\n      _onCanonical ? address(0) : _local, // representation\n      _localDecimals, // representationDecimals\n      adopted, // adopted\n      adoptedIsLocal ? _localDecimals : IERC20Metadata(adopted).decimals(), // adoptedDecimals\n      address(0), // adoptedToLocalExternalPools, see note\n      true, // approval\n      0, // cap, see note\n      0 // custodied, see note\n    );\n\n    // Update reverse lookups\n    // Update the adopted mapping using convention of local == adopted iff (_adopted == address(0))\n    s.adoptedToCanonical[adopted].domain = _canonical.domain;\n    s.adoptedToCanonical[adopted].id = _canonical.id;\n\n    if (!_onCanonical) {\n      // Update the local <> canonical. Representations only exist on non-canonical domains.\n      s.representationToCanonical[_local].domain = _canonical.domain;\n      s.representationToCanonical[_local].id = _canonical.id;\n      // Update swap (on the canonical domain, there is no representation / pool).\n      _addStableSwapPool(_canonical, _stableSwapPool, _key);\n    } else if (_cap > 0) {\n      // Update cap (only on canonical domain).\n      _setLiquidityCap(_canonical, _cap, _key);\n    }\n\n    // Emit event\n    emit AssetAdded(_key, _canonical.id, _canonical.domain, adopted, _local, msg.sender);\n  }\n\n  /**\n   * @notice Used to add an AMM for adopted <> local assets\n   * @param _canonical - The canonical TokenId to add (domain and id)\n   * @param _stableSwap - The address of the amm to add\n   * @param _key - The hash of the canonical id and domain\n   */\n  function _addStableSwapPool(\n    TokenId calldata _canonical,\n    address _stableSwap,\n    bytes32 _key\n  ) internal {\n    // Update the pool mapping\n    s.tokenConfigs[_key].adoptedToLocalExternalPools = _stableSwap;\n\n    // Emit event\n    emit StableSwapAdded(_key, _canonical.id, _canonical.domain, _stableSwap, msg.sender);\n  }\n\n  /**\n   * @notice Used to add a cap on amount of custodied canonical asset\n   * @dev The `custodied` amount will only increase in real time as router liquidity\n   * and xcall are used and the cap is set (i.e. if cap is removed, `custodied` values are\n   * no longer updated or enforced).\n   *\n   * When the `cap` is updated, the `custodied` value is set to the balance of the contract,\n   * which is distinct from *retrievable* funds from the contracts (i.e. could include the\n   * value someone just sent directly to the contract). Whenever you are updating the cap, you\n   * should set the value with this in mind.\n   *\n   * @param _canonical - The canonical TokenId to add (domain and id)\n   * @param _updated - The updated liquidity cap value\n   * @param _key - The hash of the canonical id and domain\n   */\n  function _setLiquidityCap(\n    TokenId calldata _canonical,\n    uint256 _updated,\n    bytes32 _key\n  ) internal {\n    if (s.domain != _canonical.domain) {\n      revert TokenFacet__setLiquidityCap_notCanonicalDomain();\n    }\n    // Update the stored cap\n    s.tokenConfigs[_key].cap = _updated;\n\n    if (_updated > 0) {\n      // Update the custodied value to be the balance of this contract\n      address canonical = TypeCasts.bytes32ToAddress(_canonical.id);\n      s.tokenConfigs[_key].custodied = IERC20Metadata(canonical).balanceOf(address(this));\n    }\n\n    emit LiquidityCapUpdated(_key, _canonical.id, _canonical.domain, _updated, msg.sender);\n  }\n\n  /**\n   * @notice Used to remove assets from the allowlist\n   *\n   * @dev When you are removing an asset, `xcall` will fail but `handle` and `execute` will not to\n   * allow for inflight transfers to be addressed. Similarly, the `repayAavePortal` function will\n   * work.\n   *\n   * @param _key - The hash of the canonical id and domain to remove (mapping key)\n   * @param _adoptedAssetId - Corresponding adopted asset to remove\n   * @param _representation - Corresponding representation asset (i.e. bridged asset) to remove.\n   * @param _canonical - The TokenId (canonical ID and domain) of the asset.\n   */\n  function _removeAssetId(\n    bytes32 _key,\n    address _adoptedAssetId,\n    address _representation,\n    TokenId memory _canonical\n  ) internal {\n    TokenConfig storage config = s.tokenConfigs[_key];\n    // Sanity check: already approval\n    if (!config.approval) revert TokenFacet__removeAssetId_notAdded();\n\n    // Sanity check: consistent set of params\n    if (config.adopted != _adoptedAssetId || config.representation != _representation)\n      revert TokenFacet__removeAssetId_invalidParams();\n\n    bool onCanonical = s.domain == _canonical.domain;\n    if (onCanonical) {\n      // Sanity check: no value custodied if on canonical domain\n      address canonicalAsset = TypeCasts.bytes32ToAddress(_canonical.id);\n      // Check custodied amount for the given canonical asset address.\n      // NOTE: if the `cap` is not set, the `custodied` value will not continue to be updated,\n      // so you must use the `balanceOf` for accurate accounting. If there are funds held\n      // on these contracts, then when you remove the asset id, the assets cannot be bridged back and\n      // become worthless. This means the bridged assets would become worthless.\n      // An attacker could prevent admins from removing an asset by sending funds to this contract,\n      // but all of the liquidity should already be removed before this function is called.\n      if (IERC20Metadata(canonicalAsset).balanceOf(address(this)) > 0) {\n        revert TokenFacet__removeAssetId_remainsCustodied();\n      }\n    } else {\n      // Sanity check: supply is 0 if on remote domain.\n      if (IBridgeToken(_representation).totalSupply() > 0) {\n        revert TokenFacet__removeAssetId_remainsCustodied();\n      }\n    }\n\n    // Delete token config from configs mapping.\n    // NOTE: we do NOT delete the representation entries from the config. This is\n    // done to prevent multiple representations being deployed in `setupAsset`\n    delete s.tokenConfigs[_key].adopted;\n    delete s.tokenConfigs[_key].adoptedDecimals;\n    delete s.tokenConfigs[_key].adoptedToLocalExternalPools;\n    delete s.tokenConfigs[_key].approval;\n    delete s.tokenConfigs[_key].cap;\n    // NOTE: custodied will always be 0 at this point\n\n    // Delete from reverse lookups\n    delete s.representationToCanonical[_representation];\n    delete s.adoptedToCanonical[_adoptedAssetId];\n\n    // Emit event\n    emit AssetRemoved(_key, msg.sender);\n  }\n\n  /**\n   * @notice Deploy and initialize a new token contract\n   * @dev Each token contract is a proxy which\n   * points to the token upgrade beacon\n   * @return _token the address of the token contract\n   */\n  function _deployRepresentation(\n    bytes32 _id,\n    uint32 _domain,\n    uint8 _decimals,\n    string memory _name,\n    string memory _symbol\n  ) internal returns (address _token) {\n    // deploy the token contract\n    _token = address(new BridgeToken(_decimals, _name, _symbol));\n    // emit event upon deploying new token\n    emit TokenDeployed(_domain, _id, _token);\n  }\n}\n"},"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.17;\n\n/******************************************************************************\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {IDiamondLoupe} from \"../../interfaces/IDiamondLoupe.sol\";\nimport {IDiamondCut} from \"../../interfaces/IDiamondCut.sol\";\nimport {IERC165} from \"../../interfaces/IERC165.sol\";\n\nimport {LibDiamond} from \"../../libraries/LibDiamond.sol\";\nimport {Constants} from \"../../libraries/Constants.sol\";\n\nimport {BaseConnextFacet} from \"../BaseConnextFacet.sol\";\n\nimport {IProposedOwnable} from \"../../../../shared/interfaces/IProposedOwnable.sol\";\nimport {IConnectorManager} from \"../../../../messaging/interfaces/IConnectorManager.sol\";\n\n// It is expected that this contract is customized if you want to deploy your diamond\n// with data from a deployment script. Use the init function to initialize state variables\n// of your diamond. Add parameters to the init funciton if you need to.\n\ncontract DiamondInit is BaseConnextFacet {\n  // ========== Custom Errors ===========\n  error DiamondInit__init_alreadyInitialized();\n  error DiamondInit__init_domainsDontMatch();\n\n  // ============ External ============\n\n  // You can add parameters to this function in order to pass in\n  // data to set your own state variables\n  // NOTE: not requiring a longer delay related to constant as we want to be able to test\n  // with shorter governance delays\n  function init(\n    uint32 _domain,\n    address _xAppConnectionManager,\n    uint256 _acceptanceDelay,\n    address _lpTokenTargetAddress\n  ) external {\n    // should not init twice\n    if (s.initialized) {\n      revert DiamondInit__init_alreadyInitialized();\n    }\n\n    // ensure this is the owner\n    LibDiamond.enforceIsContractOwner();\n\n    // ensure domains are the same\n    IConnectorManager manager = IConnectorManager(_xAppConnectionManager);\n    if (manager.localDomain() != _domain) {\n      revert DiamondInit__init_domainsDontMatch();\n    }\n\n    // update the initialized flag\n    s.initialized = true;\n\n    // adding ERC165 data\n    LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n    ds.supportedInterfaces[type(IERC165).interfaceId] = true;\n    ds.supportedInterfaces[type(IDiamondCut).interfaceId] = true;\n    ds.supportedInterfaces[type(IDiamondLoupe).interfaceId] = true;\n    ds.supportedInterfaces[type(IProposedOwnable).interfaceId] = true;\n    ds.acceptanceDelay = _acceptanceDelay;\n\n    // add your own state variables\n    // EIP-2535 specifies that the `diamondCut` function takes two optional\n    // arguments: address _init and bytes calldata _calldata\n    // These arguments are used to execute an arbitrary function using delegatecall\n    // in order to set state variables in the diamond during deployment or an upgrade\n    // More info here: https://eips.ethereum.org/EIPS/eip-2535#diamond-interface\n\n    // __ReentrancyGuard_init_unchained\n    s._status = Constants.NOT_ENTERED;\n    s._xcallStatus = Constants.NOT_ENTERED;\n\n    // Connext\n    s.domain = _domain;\n    s.LIQUIDITY_FEE_NUMERATOR = Constants.INITIAL_LIQUIDITY_FEE_NUMERATOR;\n    s.maxRoutersPerTransfer = Constants.INITIAL_MAX_ROUTERS;\n    s.xAppConnectionManager = manager;\n    s.lpTokenTargetAddress = _lpTokenTargetAddress;\n  }\n}\n"},"contracts/core/connext/helpers/BridgeToken.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {Ownable} from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport {IBridgeToken} from \"../interfaces/IBridgeToken.sol\";\n\nimport {ERC20} from \"./OZERC20.sol\";\n\ncontract BridgeToken is IBridgeToken, Ownable, ERC20 {\n  // ============ Constructor ============\n  constructor(\n    uint8 decimals_,\n    string memory name_,\n    string memory symbol_\n  ) Ownable() ERC20(decimals_, name_, symbol_, \"1\") {}\n\n  // ============ Events ============\n\n  event UpdateDetails(string indexed name, string indexed symbol);\n\n  // ============ Admin Functions ============\n\n  /**\n   * @notice Destroys `_amnt` tokens from `_from`, reducing the\n   * total supply.\n   * @dev Emits a {Transfer} event with `to` set to the zero address.\n   * Requirements:\n   * - `_from` cannot be the zero address.\n   * - `_from` must have at least `_amnt` tokens.\n   * @param _from The address from which to destroy the tokens\n   * @param _amnt The amount of tokens to be destroyed\n   */\n  function burn(address _from, uint256 _amnt) external override onlyOwner {\n    _burn(_from, _amnt);\n  }\n\n  /** @notice Creates `_amnt` tokens and assigns them to `_to`, increasing\n   * the total supply.\n   * @dev Emits a {Transfer} event with `from` set to the zero address.\n   * Requirements:\n   * - `to` cannot be the zero address.\n   * @param _to The destination address\n   * @param _amnt The amount of tokens to be minted\n   */\n  function mint(address _to, uint256 _amnt) external override onlyOwner {\n    _mint(_to, _amnt);\n  }\n\n  /**\n   * @notice Set the details of a token\n   * @param _newName The new name\n   * @param _newSymbol The new symbol\n   */\n  function setDetails(string calldata _newName, string calldata _newSymbol) external override onlyOwner {\n    // careful with naming convention change here\n    _name = _newName;\n    _symbol = _newSymbol;\n    bytes32 hashedName = keccak256(bytes(_newName));\n    _HASHED_NAME = hashedName;\n    _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, hashedName, _HASHED_VERSION);\n    emit UpdateDetails(_newName, _newSymbol);\n  }\n}\n"},"contracts/core/connext/helpers/ConnextDiamond.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.17;\n\n/******************************************************************************\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondCut} from \"../interfaces/IDiamondCut.sol\";\n\ncontract ConnextDiamond {\n  struct Initialization {\n    address initContract;\n    bytes initData;\n  }\n\n  /// @notice This construct a diamond contract\n  /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n  /// @param _diamondCut the list of facet to add\n  /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\n  constructor(\n    address _contractOwner,\n    IDiamondCut.FacetCut[] memory _diamondCut,\n    Initialization[] memory _initializations\n  ) payable {\n    if (_contractOwner != address(0)) {\n      LibDiamond.setContractOwner(_contractOwner);\n    }\n\n    LibDiamond.diamondCut(_diamondCut, address(0), \"\");\n\n    uint256 len = _initializations.length;\n    for (uint256 i = 0; i < len; ) {\n      LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\n\n      unchecked {\n        ++i;\n      }\n    }\n  }\n\n  // Find facet for function that is called and execute the\n  // function if a facet is found and return any value.\n  fallback() external payable {\n    LibDiamond.DiamondStorage storage ds;\n    bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\n    // get diamond storage\n    assembly {\n      ds.slot := position\n    }\n    // get facet from function selector\n    address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\n    require(facet != address(0), \"Diamond: Function does not exist\");\n    // Execute external function from facet using delegatecall and return any value.\n    assembly {\n      // copy function selector and any arguments\n      calldatacopy(0, 0, calldatasize())\n      // execute function call using the facet\n      let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\n      // get any return value\n      returndatacopy(0, 0, returndatasize())\n      // return any return value or error back to the caller\n      switch result\n      case 0 {\n        revert(0, returndatasize())\n      }\n      default {\n        return(0, returndatasize())\n      }\n    }\n  }\n\n  receive() external payable {}\n}\n"},"contracts/core/connext/helpers/ConnextPriceOracle.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.17;\n\nimport {SafeERC20} from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport {IPriceOracle} from \"../interfaces/IPriceOracle.sol\";\n\nimport {Constants} from \"../libraries/Constants.sol\";\n\nimport {ProposedOwnable} from \"../../../shared/ProposedOwnable.sol\";\nimport {PriceOracle} from \"./PriceOracle.sol\";\n\ninterface AggregatorV3Interface {\n  function decimals() external view returns (uint8);\n\n  function description() external view returns (string memory);\n\n  function version() external view returns (uint256);\n\n  function latestRoundData()\n    external\n    view\n    returns (\n      uint80 roundId,\n      int256 answer,\n      uint256 startedAt,\n      uint256 updatedAt,\n      uint80 answeredInRound\n    );\n}\n\n/**\n * @title ConnextPriceOracle\n * @notice Simple interface for querying a variety of price feeds\n *\n * @dev If ownership is renounced, the direct price, aggregators, and price oracles\n * can no longer be updated\n */\ncontract ConnextPriceOracle is PriceOracle, ProposedOwnable {\n  address public wrapped;\n  address public v1PriceOracle;\n\n  /// @notice Price sources\n  enum PriceSource {\n    NA,\n    DIRECT,\n    CHAINLINK,\n    V1_ORACLE\n  }\n\n  /// @notice Chainlink Aggregators\n  mapping(address => AggregatorV3Interface) public aggregators;\n\n  struct Price {\n    uint256 updatedAt;\n    uint256 price;\n  }\n\n  mapping(address => Price) public assetPrices;\n\n  event DirectPriceUpdated(address token, uint256 oldPrice, uint256 newPrice);\n  event AggregatorUpdated(address tokenAddress, address source);\n  event V1PriceOracleUpdated(address oldAddress, address newAddress);\n\n  constructor(address _wrapped) {\n    require(_wrapped != address(0), \"zero wrapped address!\");\n\n    wrapped = _wrapped;\n    _setOwner(msg.sender);\n  }\n\n  function getTokenPrice(address _tokenAddress) public view override returns (uint256, uint256) {\n    address tokenAddress = _tokenAddress;\n\n    // For native tokens, get price of the wrapped token\n    if (_tokenAddress == address(0)) {\n      tokenAddress = wrapped;\n    }\n\n    // First check the direct price which stored in contract. Only owner can set direct price.\n    uint256 tokenPrice = assetPrices[tokenAddress].price;\n    // only accept up to and not including Constants.ORACLE_VALID_PERIOD time deviation\n    if (tokenPrice != 0 && ((block.timestamp - assetPrices[tokenAddress].updatedAt) < Constants.ORACLE_VALID_PERIOD)) {\n      return (tokenPrice, uint256(PriceSource.DIRECT));\n    }\n\n    // Second, check ChainLink aggregator, If current token is supported by chainlink, return\n    tokenPrice = getPriceFromOracle(tokenAddress);\n    if (tokenPrice != 0) {\n      return (tokenPrice, uint256(PriceSource.CHAINLINK));\n    }\n\n    // Third, If v1 oracle price contract is set, check v1 price\n    if (v1PriceOracle != address(0)) {\n      tokenPrice = IPriceOracle(v1PriceOracle).getTokenPrice(tokenAddress);\n      if (tokenPrice != 0) {\n        return (tokenPrice, uint256(PriceSource.V1_ORACLE));\n      }\n    }\n\n    return (0, uint256(PriceSource.NA));\n  }\n\n  function getPriceFromOracle(address _tokenAddress) public view returns (uint256) {\n    uint256 chainLinkPrice = getPriceFromChainlink(_tokenAddress);\n    return chainLinkPrice;\n  }\n\n  function getPriceFromChainlink(address _tokenAddress) public view returns (uint256) {\n    AggregatorV3Interface aggregator = aggregators[_tokenAddress];\n    if (address(aggregator) != address(0)) {\n      try aggregator.latestRoundData() returns (\n        uint80 roundId,\n        int256 answer,\n        uint256,\n        uint256 updateAt,\n        uint80 answeredInRound\n      ) {\n        // It's fine for price to be 0. We have more price feeds.\n        if (\n          answer == 0 ||\n          answeredInRound < roundId ||\n          updateAt == 0 ||\n          block.timestamp > updateAt + Constants.ORACLE_VALID_PERIOD\n        ) {\n          // answeredInRound > roundId ===> ChainLink Error: Stale price\n          // updatedAt = 0 ===> ChainLink Error: Round not complete\n          // block.timestamp - updateAt > Constants.ORACLE_VALID_PERIOD ===> too old data\n          return 0;\n        }\n\n        uint256 retVal = uint256(answer);\n        uint256 price;\n        // Make the decimals to 1e18.\n        uint256 aggregatorDecimals = uint256(aggregator.decimals());\n        if (aggregatorDecimals > Constants.DEFAULT_NORMALIZED_DECIMALS) {\n          price = retVal / (10**(aggregatorDecimals - Constants.DEFAULT_NORMALIZED_DECIMALS));\n        } else {\n          price = retVal * (10**(Constants.DEFAULT_NORMALIZED_DECIMALS - aggregatorDecimals));\n        }\n\n        return price;\n      } catch {\n        // return 0 to be able to fetch the price from next oracles\n        return 0;\n      }\n    }\n\n    return 0;\n  }\n\n  function setDirectPrice(\n    address _token,\n    uint256 _price,\n    uint256 _timestamp\n  ) external onlyOwner {\n    require(_price != 0, \"bad price\");\n    if (block.timestamp > _timestamp) {\n      // reject stale price\n      require(block.timestamp - _timestamp < Constants.ORACLE_VALID_PERIOD, \"bad timestamp\");\n    } else {\n      // reject future timestamp (<3s is allowed)\n      require(_timestamp - block.timestamp < Constants.FUTURE_TIME_BUFFER, \"in future\");\n      _timestamp = block.timestamp;\n    }\n\n    emit DirectPriceUpdated(_token, assetPrices[_token].price, _price);\n\n    assetPrices[_token].price = _price;\n    assetPrices[_token].updatedAt = _timestamp;\n  }\n\n  function setV1PriceOracle(address _v1PriceOracle) external onlyOwner {\n    emit V1PriceOracleUpdated(v1PriceOracle, _v1PriceOracle);\n    v1PriceOracle = _v1PriceOracle;\n  }\n\n  function setAggregators(address[] calldata tokenAddresses, address[] calldata sources) external onlyOwner {\n    uint256 numTokens = tokenAddresses.length;\n    for (uint256 i; i < numTokens; ) {\n      aggregators[tokenAddresses[i]] = AggregatorV3Interface(sources[i]);\n      emit AggregatorUpdated(tokenAddresses[i], sources[i]);\n\n      unchecked {\n        ++i;\n      }\n    }\n  }\n}\n"},"contracts/core/connext/helpers/ConnextProxyAdmin.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.17;\n\nimport {ProxyAdmin} from \"@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ConnextProxyAdmin is ProxyAdmin {\n  constructor(address owner) ProxyAdmin() {\n    // We just need this for our hardhat tooling right now\n  }\n}\n"},"contracts/core/connext/helpers/LPToken.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {ERC20Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\";\nimport {OwnableUpgradeable} from \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\n/**\n * @title Liquidity Provider Token\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\n * It is used to represent user's shares when providing liquidity to swap contracts.\n * @dev Only Swap contracts should initialize and own LPToken contracts.\n */\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\n  // ============ Storage ============\n\n  // ============ Initializer ============\n\n  /**\n   * @notice Initializes this LPToken contract with the given name and symbol\n   * @dev The caller of this function will become the owner. A Swap contract should call this\n   * in its initializer function.\n   * @param name name of this token\n   * @param symbol symbol of this token\n   */\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\n    __Context_init_unchained();\n    __ERC20_init_unchained(name, symbol);\n    __Ownable_init_unchained();\n    return true;\n  }\n\n  // ============ External functions ============\n\n  /**\n   * @notice Mints the given amount of LPToken to the recipient.\n   * @dev only owner can call this mint function\n   * @param recipient address of account to receive the tokens\n   * @param amount amount of tokens to mint\n   */\n  function mint(address recipient, uint256 amount) external onlyOwner {\n    require(amount != 0, \"LPToken: cannot mint 0\");\n    _mint(recipient, amount);\n  }\n\n  /**\n   * @notice Burns the given amount of LPToken from provided account\n   * @dev only owner can call this burn function\n   * @param account address of account from which to burn token\n   * @param amount amount of tokens to mint\n   */\n  function burnFrom(address account, uint256 amount) external onlyOwner {\n    require(amount != 0, \"LPToken: cannot burn 0\");\n    _burn(account, amount);\n  }\n\n  // ============ Internal functions ============\n\n  /**\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\n   * This assumes the owner is set to a Swap contract's address.\n   */\n  function _beforeTokenTransfer(\n    address from,\n    address to,\n    uint256 amount\n  ) internal virtual override(ERC20Upgradeable) {\n    super._beforeTokenTransfer(from, to, amount);\n    require(to != address(this), \"LPToken: cannot send to itself\");\n  }\n\n  // ============ Upgrade Gap ============\n  uint256[50] private __GAP; // gap for upgrade safety\n}\n"},"contracts/core/connext/helpers/OwnerPausableUpgradeable.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {OwnableUpgradeable} from \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport {PausableUpgradeable} from \"@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol\";\n\n/**\n * @title OwnerPausable\n * @notice An ownable contract allows the owner to pause and unpause the\n * contract without a delay.\n * @dev Only methods using the provided modifiers will be paused.\n */\nabstract contract OwnerPausableUpgradeable is OwnableUpgradeable, PausableUpgradeable {\n  // ============ Initializer ============\n\n  function __OwnerPausable_init() internal onlyInitializing {\n    __Context_init_unchained();\n    __Ownable_init_unchained();\n    __Pausable_init_unchained();\n  }\n\n  // ============ External functions ============\n\n  /**\n   * @notice Pause the contract. Revert if already paused.\n   */\n  function pause() external onlyOwner {\n    PausableUpgradeable._pause();\n  }\n\n  /**\n   * @notice Unpause the contract. Revert if already unpaused.\n   */\n  function unpause() external onlyOwner {\n    PausableUpgradeable._unpause();\n  }\n\n  // ============ Upgrade Gap ============\n  uint256[50] private __GAP; // gap for upgrade safety\n}\n"},"contracts/core/connext/helpers/OZERC20.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.17;\n\n// This is modified from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\"\n// Modifications were made to allow the name, hashed name, and cached\n// domain separator to be internal\n\nimport \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\";\nimport {EIP712} from \"@openzeppelin/contracts/utils/cryptography/EIP712.sol\";\nimport {ECDSA} from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\nimport \"@openzeppelin/contracts/utils/Counters.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * Implements ERC20 Permit extension allowing approvals to be made via\n * signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC20\n * allowance (see {IERC20-allowance}) by presenting a message signed by the\n * account. By not relying on {IERC20-approve}, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n *\n * @dev Cannot use default ERC20/ERC20Permit implementation as there is no way to update\n * the name (set to private).\n *\n * Cannot use default EIP712 implementation as the _HASHED_NAME may change.\n * These functions use the same implementation, with easier storage access.\n */\ncontract ERC20 is IERC20Metadata, IERC20Permit {\n  // See ERC20\n  mapping(address => uint256) private _balances;\n\n  mapping(address => mapping(address => uint256)) private _allowances;\n\n  uint256 private _totalSupply;\n\n  string internal _name; // made internal, need access\n  string internal _symbol; // made internal, need access\n  uint8 internal _decimals; // made internal, need access\n\n  // See ERC20Permit\n  using Counters for Counters.Counter;\n\n  mapping(address => Counters.Counter) private _nonces;\n\n  // See EIP712\n  // Immutables used in EIP 712 structured data hashing & signing\n  // https://eips.ethereum.org/EIPS/eip-712\n  bytes32 private constant _PERMIT_TYPEHASH =\n    keccak256(\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\");\n  bytes32 internal constant _TYPE_HASH =\n    keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n  // made internal, need access\n\n  // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n  // invalidate the cached domain separator if the chain id changes.\n  bytes32 internal _CACHED_DOMAIN_SEPARATOR; // made internal, may change\n  uint256 private immutable _CACHED_CHAIN_ID;\n  address private immutable _CACHED_THIS;\n\n  bytes32 internal _HASHED_NAME; // made internal, may change\n  bytes32 internal immutable _HASHED_VERSION; // made internal, need access\n\n  /**\n   * @dev Initializes the {EIP712} domain separator using the `name` parameter,\n   * and setting `version` to `\"1\"`.\n   *\n   * It's a good idea to use the same `name` that is defined as the ERC20 token name.\n   */\n  constructor(\n    uint8 decimals_,\n    string memory name_,\n    string memory symbol_,\n    string memory version_\n  ) {\n    // ERC20\n    _name = name_;\n    _symbol = symbol_;\n    _decimals = decimals_;\n\n    // EIP712\n    bytes32 hashedName = keccak256(bytes(name_));\n    bytes32 hashedVersion = keccak256(bytes(version_));\n    _HASHED_NAME = hashedName;\n    _HASHED_VERSION = hashedVersion;\n    _CACHED_CHAIN_ID = block.chainid;\n    _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, hashedName, hashedVersion);\n    _CACHED_THIS = address(this);\n  }\n\n  /**\n   * @dev Returns the name of the token.\n   */\n  function name() public view virtual override returns (string memory) {\n    return _name;\n  }\n\n  /**\n   * @dev Returns the symbol of the token, usually a shorter version of the\n   * name.\n   */\n  function symbol() public view virtual override returns (string memory) {\n    return _symbol;\n  }\n\n  /**\n   * @dev Returns the number of decimals used to get its user representation.\n   * For example, if `decimals` equals `2`, a balance of `505` tokens should\n   * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n   *\n   * Tokens usually opt for a value of 18, imitating the relationship between\n   * Ether and Wei. This is the value {ERC20} uses, unless this function is\n   * overridden;\n   *\n   * NOTE: This information is only used for _display_ purposes: it in\n   * no way affects any of the arithmetic of the contract, including\n   * {IERC20-balanceOf} and {IERC20-transfer}.\n   */\n  function decimals() public view virtual override returns (uint8) {\n    return _decimals;\n  }\n\n  /**\n   * @dev See {IERC20-totalSupply}.\n   */\n  function totalSupply() public view virtual override returns (uint256) {\n    return _totalSupply;\n  }\n\n  /**\n   * @dev See {IERC20-balanceOf}.\n   */\n  function balanceOf(address account) public view virtual override returns (uint256) {\n    return _balances[account];\n  }\n\n  /**\n   * @dev See {IERC20-transfer}.\n   *\n   * Requirements:\n   *\n   * - `to` cannot be the zero address.\n   * - the caller must have a balance of at least `amount`.\n   */\n  function transfer(address to, uint256 amount) public virtual override returns (bool) {\n    _transfer(msg.sender, to, amount);\n    return true;\n  }\n\n  /**\n   * @dev See {IERC20-allowance}.\n   */\n  function allowance(address _owner, address _spender) public view virtual override returns (uint256) {\n    return _allowances[_owner][_spender];\n  }\n\n  /**\n   * @dev See {IERC20-approve}.\n   *\n   * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\n   * `transferFrom`. This is semantically equivalent to an infinite approval.\n   *\n   * Requirements:\n   *\n   * - `spender` cannot be the zero address.\n   */\n  function approve(address spender, uint256 amount) public virtual override returns (bool) {\n    _approve(msg.sender, spender, amount);\n    return true;\n  }\n\n  /**\n   * @dev See {IERC20-transferFrom}.\n   *\n   * Emits an {Approval} event indicating the updated allowance. This is not\n   * required by the EIP. See the note at the beginning of {ERC20}.\n   *\n   * Requirements:\n   *\n   * - `_sender` and `recipient` cannot be the zero address.\n   * - `_sender` must have a balance of at least `amount`.\n   * - the caller must have allowance for ``_sender``'s tokens of at least\n   * `amount`.\n   */\n  function transferFrom(\n    address _sender,\n    address _recipient,\n    uint256 _amount\n  ) public virtual override returns (bool) {\n    _spendAllowance(_sender, msg.sender, _amount);\n    _transfer(_sender, _recipient, _amount);\n    return true;\n  }\n\n  /**\n   * @dev Atomically increases the allowance granted to `spender` by the caller.\n   *\n   * This is an alternative to {approve} that can be used as a mitigation for\n   * problems described in {IERC20-approve}.\n   *\n   * Emits an {Approval} event indicating the updated allowance.\n   *\n   * Requirements:\n   *\n   * - `_spender` cannot be the zero address.\n   */\n  function increaseAllowance(address _spender, uint256 _addedValue) public virtual returns (bool) {\n    _approve(msg.sender, _spender, _allowances[msg.sender][_spender] + _addedValue);\n    return true;\n  }\n\n  /**\n   * @dev Atomically decreases the allowance granted to `spender` by the caller.\n   *\n   * This is an alternative to {approve} that can be used as a mitigation for\n   * problems described in {IERC20-approve}.\n   *\n   * Emits an {Approval} event indicating the updated allowance.\n   *\n   * Requirements:\n   *\n   * - `_spender` cannot be the zero address.\n   * - `_spender` must have allowance for the caller of at least\n   * `_subtractedValue`.\n   */\n  function decreaseAllowance(address _spender, uint256 _subtractedValue) public virtual returns (bool) {\n    uint256 currentAllowance = allowance(msg.sender, _spender);\n    require(currentAllowance >= _subtractedValue, \"ERC20: decreased allowance below zero\");\n    unchecked {\n      _approve(msg.sender, _spender, currentAllowance - _subtractedValue);\n    }\n\n    return true;\n  }\n\n  /**\n   * @dev Moves tokens `amount` from `_sender` to `_recipient`.\n   *\n   * This is internal function is equivalent to {transfer}, and can be used to\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\n   *\n   * Emits a {Transfer} event.\n   *\n   * Requirements:\n   *\n   * - `_sender` cannot be the zero address.\n   * - `_recipient` cannot be the zero address.\n   * - `_sender` must have a balance of at least `amount`.\n   */\n  function _transfer(\n    address _sender,\n    address _recipient,\n    uint256 _amount\n  ) internal virtual {\n    require(_sender != address(0), \"ERC20: transfer from the zero address\");\n    require(_recipient != address(0), \"ERC20: transfer to the zero address\");\n\n    _beforeTokenTransfer(_sender, _recipient, _amount);\n\n    uint256 fromBalance = _balances[_sender];\n    require(fromBalance >= _amount, \"ERC20: transfer amount exceeds balance\");\n    unchecked {\n      _balances[_sender] = fromBalance - _amount;\n      // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\n      // decrementing then incrementing.\n      _balances[_recipient] += _amount;\n    }\n\n    emit Transfer(_sender, _recipient, _amount);\n\n    _afterTokenTransfer(_sender, _recipient, _amount);\n  }\n\n  /** @dev Creates `_amount` tokens and assigns them to `_account`, increasing\n   * the total supply.\n   *\n   * Emits a {Transfer} event with `from` set to the zero address.\n   *\n   * Requirements:\n   *\n   * - `to` cannot be the zero address.\n   */\n  function _mint(address _account, uint256 _amount) internal virtual {\n    require(_account != address(0), \"ERC20: mint to the zero address\");\n\n    _beforeTokenTransfer(address(0), _account, _amount);\n\n    _totalSupply += _amount;\n    unchecked {\n      // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\n      _balances[_account] += _amount;\n    }\n    emit Transfer(address(0), _account, _amount);\n\n    _afterTokenTransfer(address(0), _account, _amount);\n  }\n\n  /**\n   * @dev Destroys `_amount` tokens from `_account`, reducing the\n   * total supply.\n   *\n   * Emits a {Transfer} event with `to` set to the zero address.\n   *\n   * Requirements:\n   *\n   * - `_account` cannot be the zero address.\n   * - `_account` must have at least `_amount` tokens.\n   */\n  function _burn(address _account, uint256 _amount) internal virtual {\n    require(_account != address(0), \"ERC20: burn from the zero address\");\n\n    _beforeTokenTransfer(_account, address(0), _amount);\n\n    uint256 accountBalance = _balances[_account];\n    require(accountBalance >= _amount, \"ERC20: burn amount exceeds balance\");\n    unchecked {\n      _balances[_account] = accountBalance - _amount;\n      // Overflow not possible: amount <= accountBalance <= totalSupply\n      _totalSupply -= _amount;\n    }\n\n    emit Transfer(_account, address(0), _amount);\n\n    _afterTokenTransfer(_account, address(0), _amount);\n  }\n\n  /**\n   * @dev Sets `_amount` as the allowance of `_spender` over the `_owner` s tokens.\n   *\n   * This internal function is equivalent to `approve`, and can be used to\n   * e.g. set automatic allowances for certain subsystems, etc.\n   *\n   * Emits an {Approval} event.\n   *\n   * Requirements:\n   *\n   * - `_owner` cannot be the zero address.\n   * - `_spender` cannot be the zero address.\n   */\n  function _approve(\n    address _owner,\n    address _spender,\n    uint256 _amount\n  ) internal virtual {\n    require(_owner != address(0), \"ERC20: approve from the zero address\");\n    require(_spender != address(0), \"ERC20: approve to the zero address\");\n\n    _allowances[_owner][_spender] = _amount;\n    emit Approval(_owner, _spender, _amount);\n  }\n\n  /**\n   * @dev Updates `_owner` s allowance for `_spender` based on spent `_amount`.\n   *\n   * Does not update the allowance amount in case of infinite allowance.\n   * Revert if not enough allowance is available.\n   *\n   * Might emit an {Approval} event.\n   */\n  function _spendAllowance(\n    address _owner,\n    address _spender,\n    uint256 _amount\n  ) internal virtual {\n    uint256 currentAllowance = allowance(_owner, _spender);\n    if (currentAllowance != type(uint256).max) {\n      require(currentAllowance >= _amount, \"ERC20: insufficient allowance\");\n      unchecked {\n        _approve(_owner, _spender, currentAllowance - _amount);\n      }\n    }\n  }\n\n  /**\n   * @dev Hook that is called before any transfer of tokens. This includes\n   * minting and burning.\n   *\n   * Calling conditions:\n   *\n   * - when `_from` and `_to` are both non-zero, `_amount` of ``_from``'s tokens\n   * will be to transferred to `_to`.\n   * - when `_from` is zero, `_amount` tokens will be minted for `_to`.\n   * - when `_to` is zero, `_amount` of ``_from``'s tokens will be burned.\n   * - `_from` and `_to` are never both zero.\n   *\n   * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n   */\n  function _beforeTokenTransfer(\n    address _from,\n    address _to,\n    uint256 _amount\n  ) internal virtual {}\n\n  /**\n   * @dev Hook that is called after any transfer of tokens. This includes\n   * minting and burning.\n   *\n   * Calling conditions:\n   *\n   * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n   * has been transferred to `to`.\n   * - when `from` is zero, `amount` tokens have been minted for `to`.\n   * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\n   * - `from` and `to` are never both zero.\n   *\n   * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n   */\n  function _afterTokenTransfer(\n    address _from,\n    address _to,\n    uint256 _amount\n  ) internal virtual {}\n\n  /**\n   * @dev See {IERC20Permit-permit}.\n   * @notice Sets approval from owner to spender to value\n   * as long as deadline has not passed\n   * by submitting a valid signature from owner\n   * Uses EIP 712 structured data hashing & signing\n   * https://eips.ethereum.org/EIPS/eip-712\n   * @param _owner The account setting approval & signing the message\n   * @param _spender The account receiving approval to spend owner's tokens\n   * @param _value The amount to set approval for\n   * @param _deadline The timestamp before which the signature must be submitted\n   * @param _v ECDSA signature v\n   * @param _r ECDSA signature r\n   * @param _s ECDSA signature s\n   */\n  function permit(\n    address _owner,\n    address _spender,\n    uint256 _value,\n    uint256 _deadline,\n    uint8 _v,\n    bytes32 _r,\n    bytes32 _s\n  ) public virtual override {\n    require(block.timestamp <= _deadline, \"ERC20Permit: expired deadline\");\n\n    bytes32 _structHash = keccak256(\n      abi.encode(_PERMIT_TYPEHASH, _owner, _spender, _value, _useNonce(_owner), _deadline)\n    );\n\n    bytes32 _hash = _hashTypedDataV4(_structHash);\n\n    address _signer = ECDSA.recover(_hash, _v, _r, _s);\n    require(_signer == _owner, \"ERC20Permit: invalid signature\");\n\n    _approve(_owner, _spender, _value);\n  }\n\n  /**\n   * @dev See {IERC20Permit-nonces}.\n   */\n  function nonces(address _owner) public view virtual override returns (uint256) {\n    return _nonces[_owner].current();\n  }\n\n  /**\n   * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.\n   * This is ALWAYS calculated at runtime because the token name is mutable, not constant.\n   */\n  function DOMAIN_SEPARATOR() external view override returns (bytes32) {\n    return _domainSeparatorV4();\n  }\n\n  /**\n   * @dev \"Consume a nonce\": return the current value and increment.\n   * @dev See {EIP712._buildDomainSeparator}\n   */\n  function _useNonce(address _owner) internal virtual returns (uint256 current) {\n    Counters.Counter storage nonce = _nonces[_owner];\n    current = nonce.current();\n    nonce.increment();\n  }\n\n  /**\n   * @dev Returns the domain separator for the current chain.\n   * @dev See {EIP712._buildDomainSeparator}\n   */\n  function _domainSeparatorV4() internal view returns (bytes32) {\n    if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\n      return _CACHED_DOMAIN_SEPARATOR;\n    } else {\n      return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\n    }\n  }\n\n  /**\n   * @dev See {EIP712._buildDomainSeparator}. Made internal to allow usage in parent class.\n   */\n  function _buildDomainSeparator(\n    bytes32 typeHash,\n    bytes32 nameHash,\n    bytes32 versionHash\n  ) internal view returns (bytes32) {\n    return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\n  }\n\n  /**\n   * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n   * function returns the hash of the fully encoded EIP712 message for this domain.\n   *\n   * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n   *\n   * ```solidity\n   * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n   *     keccak256(\"Mail(address to,string contents)\"),\n   *     mailTo,\n   *     keccak256(bytes(mailContents))\n   * )));\n   * address signer = ECDSA.recover(digest, signature);\n   * ```\n   */\n  function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n    return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\n  }\n}\n"},"contracts/core/connext/helpers/PriceOracle.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nabstract contract PriceOracle {\n  /// @notice Indicator that this is a PriceOracle contract (for inspection)\n  bool public constant isPriceOracle = true;\n\n  /**\n   * @notice Get the price of a token\n   * @param token The token to get the price of\n   * @return The asset price mantissa (scaled by 1e18).\n   *  Zero means the price is unavailable.\n   * @return The source of the price. enum (NA, DIRECT, CHAINLINK, DEX, V1_ORACLE)\n   */\n  function getTokenPrice(address token) external view virtual returns (uint256, uint256);\n}\n"},"contracts/core/connext/helpers/RelayerProxy.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {Address} from \"@openzeppelin/contracts/utils/Address.sol\";\nimport {ReentrancyGuard} from \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\nimport {GelatoRelayFeeCollector} from \"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol\";\n\nimport {ProposedOwnable} from \"../../../shared/ProposedOwnable.sol\";\nimport {IConnext, ExecuteArgs} from \"../interfaces/IConnext.sol\";\n\ninterface ISpokeConnector {\n  struct Proof {\n    bytes message;\n    bytes32[32] path;\n    uint256 index;\n  }\n\n  function proveAndProcess(\n    Proof[] calldata _proofs,\n    bytes32 _aggregateRoot,\n    bytes32[32] calldata _aggregatePath,\n    uint256 _aggregateIndex\n  ) external;\n\n  function send(bytes memory _encodedData) external payable;\n}\n\n/**\n * @title RelayerProxy\n * @author Connext Labs, Inc.\n * @notice This is a temporary contract that wraps fast path functions in the Connext interface so that they can be called by\n * Gelato's legacy relayer network. The contract stores native assets and pays them to the relayer on function call.\n */\ncontract RelayerProxy is ProposedOwnable, ReentrancyGuard, GelatoRelayFeeCollector {\n  // ============ Properties ============\n  address public gelatoRelayer;\n  address public feeCollector;\n  IConnext public connext;\n  ISpokeConnector public spokeConnector;\n\n  mapping(address => bool) public allowedRelayer;\n\n  // ============ Modifier ============\n\n  modifier onlyRelayer() {\n    require(allowedRelayer[msg.sender], \"!relayer\");\n    _;\n  }\n\n  modifier definedAddress(address _input) {\n    require(_input != address(0), \"empty\");\n    _;\n  }\n\n  // ============ Events ============\n\n  /**\n   * @notice Emitted when funds added to the contract\n   * @param amount The amount added\n   * @param balance The updated balance of the contract\n   */\n  event FundsReceived(uint256 amount, uint256 balance);\n\n  /**\n   * @notice Emitted when funds removed from the contract by admin\n   * @param amount The amount removed\n   * @param balance The updated balance of the contract\n   */\n  event FundsDeducted(uint256 amount, uint256 balance);\n\n  /**\n   * @notice Emitted when a new relayer is allowlisted by admin\n   * @param relayer Address of the added relayer\n   */\n  event RelayerAdded(address relayer);\n\n  /**\n   * @notice Emitted when a relayer is removed from allowlist by admin\n   * @param relayer Address of the removed relayer\n   */\n  event RelayerRemoved(address relayer);\n\n  /**\n   * @notice Emitted when Connext contract address is updated by admin\n   * @param updated New Connext address in the contract\n   * @param previous Old Connext address in the contract\n   */\n  event ConnextChanged(address updated, address previous);\n\n  /**\n   * @notice Emitted when SpokeConnector contract address is updated by admin\n   * @param updated New SpokeConnector address in the contract\n   * @param previous Old SpokeConnector address in the contract\n   */\n  event SpokeConnectorChanged(address updated, address previous);\n\n  /**\n   * @notice Emitted when GelatoRelayer address is updated by admin\n   * @param updated New GelatoRelayer address in the contract\n   * @param previous Old Gelatorelayer address in the contract\n   */\n  event GelatoRelayerChanged(address updated, address previous);\n\n  /**\n   * @notice Emitted when FeeCollectorChanged address is updated by admin\n   * @param updated New FeeCollectorChanged address in the contract\n   * @param previous Old FeeCollectorChanged address in the contract\n   */\n  event FeeCollectorChanged(address updated, address previous);\n\n  // ============ Constructor ============\n\n  /**\n   * @notice Creates a new RelayerProxy instance.\n   * @param _connext The address of the Connext on this domain.\n   * @param _spokeConnector The address of the SpokeConnector on this domain.\n   * @param _gelatoRelayer The address of the Gelato relayer on this domain.\n   * @param _feeCollector The address of the Gelato Fee Collector on this domain.\n   */\n  constructor(\n    address _connext,\n    address _spokeConnector,\n    address _gelatoRelayer,\n    address _feeCollector\n  ) ProposedOwnable() {\n    _setOwner(msg.sender);\n    _setConnext(_connext);\n    _setSpokeConnector(_spokeConnector);\n    _setGelatoRelayer(_gelatoRelayer);\n    _setFeeCollector(_feeCollector);\n\n    _addRelayer(_gelatoRelayer);\n  }\n\n  // ============ Admin Functions ============\n\n  /**\n   * @notice Adds a relayer address to the allowed relayers mapping.\n   *\n   * @param _relayer - Relayer address to add.\n   */\n  function addRelayer(address _relayer) external onlyOwner definedAddress(_relayer) {\n    _addRelayer(_relayer);\n  }\n\n  /**\n   * @notice Removes a relayer address from the allowed relayers mapping.\n   *\n   * @param _relayer - Relayer address to remove.\n   */\n  function removeRelayer(address _relayer) external onlyOwner definedAddress(_relayer) {\n    _removeRelayer(_relayer);\n  }\n\n  /**\n   * @notice Updates the Connext address on this contract.\n   *\n   * @param _connext - New Connext address.\n   */\n  function setConnext(address _connext) external onlyOwner definedAddress(_connext) {\n    _setConnext(_connext);\n  }\n\n  /**\n   * @notice Updates the SpokeConnector address on this contract.\n   *\n   * @param _spokeConnector - New SpokeConnector address.\n   */\n  function setSpokeConnector(address _spokeConnector) external onlyOwner definedAddress(_spokeConnector) {\n    _setSpokeConnector(_spokeConnector);\n  }\n\n  /**\n   * @notice Updates the Gelato relayer address on this contract.\n   *\n   * @param _gelatoRelayer - New Gelato relayer address.\n   */\n  function setGelatoRelayer(address _gelatoRelayer) external onlyOwner definedAddress(_gelatoRelayer) {\n    _setGelatoRelayer(_gelatoRelayer);\n  }\n\n  /**\n   * @notice Updates the Gelato Fee Collector address on this contract.\n   *\n   * @param _feeCollector - New Gelato Fee Collector address.\n   */\n  function setFeeCollector(address _feeCollector) external onlyOwner definedAddress(_feeCollector) {\n    _setFeeCollector(_feeCollector);\n  }\n\n  /**\n   * @notice Withdraws all funds stored on this contract to msg.sender.\n   */\n  function withdraw() external onlyOwner nonReentrant {\n    uint256 balance = address(this).balance;\n    Address.sendValue(payable(msg.sender), balance);\n    emit FundsDeducted(balance, address(this).balance);\n  }\n\n  // ============ External Functions ============\n\n  /**\n   * @notice Wraps the call to execute() on Connext and pays either the caller or hardcoded relayer from this\n   * contract's balance for completing the transaction.\n   *\n   * @param _args - ExecuteArgs arguments.\n   * @param _fee - Fee to be paid to relayer.\n   * @return transferId - The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for\n   * reconciliation to occur.\n   */\n  function execute(ExecuteArgs calldata _args, uint256 _fee)\n    external\n    onlyRelayer\n    nonReentrant\n    returns (bytes32 transferId)\n  {\n    transferId = connext.execute(_args);\n    transferRelayerFee(_fee);\n  }\n\n  /**\n   * @notice Wraps the call to proveAndProcess() on SpokeConnector and pays either the caller or hardcoded relayer\n   * from this contract's balance for completing the transaction.\n   *\n   * @param _proofs Batch of Proofs containing messages for proving/processing.\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\n   * already been delivered to this spoke connector contract and surpassed the validation period.\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\n   * @param _fee - Fee to be paid to relayer.\n   */\n  function proveAndProcess(\n    ISpokeConnector.Proof[] calldata _proofs,\n    bytes32 _aggregateRoot,\n    bytes32[32] calldata _aggregatePath,\n    uint256 _aggregateIndex,\n    uint256 _fee\n  ) external onlyRelayer nonReentrant {\n    spokeConnector.proveAndProcess(_proofs, _aggregateRoot, _aggregatePath, _aggregateIndex);\n    transferRelayerFee(_fee);\n  }\n\n  /**\n   * @notice Wraps the call to send() on SpokeConnector and pays either the caller or hardcoded relayer from this\n   * contract's balance for completing the transaction.\n   *\n   * @param _encodedData - Data to be sent to Connext SpokeConnector\n   * @param _messageFee - Fee to be paid to the SpokeConnector for connected AMBs that require fees.\n   * @param _relayerFee - Fee to be paid to relayer.\n   */\n  function send(\n    bytes memory _encodedData,\n    uint256 _messageFee,\n    uint256 _relayerFee\n  ) external onlyRelayer nonReentrant {\n    spokeConnector.send{value: _messageFee}(_encodedData);\n    emit FundsDeducted(_messageFee, address(this).balance);\n    transferRelayerFee(_relayerFee);\n  }\n\n  receive() external payable {\n    emit FundsReceived(msg.value, address(this).balance);\n  }\n\n  // ============ Internal Functions ============\n\n  /**\n   * @notice helper function to transfer fees to either Gelato relayer via Fee Collector or to our\n   * backup relayer (msg.sender).\n   *\n   * @param _fee - Fee to be paid to relayer.\n   */\n  function transferRelayerFee(uint256 _fee) internal {\n    if (msg.sender == gelatoRelayer) {\n      Address.sendValue(payable(feeCollector), _fee);\n    } else {\n      Address.sendValue(payable(msg.sender), _fee);\n    }\n    emit FundsDeducted(_fee, address(this).balance);\n  }\n\n  function _addRelayer(address _relayer) internal {\n    require(!allowedRelayer[_relayer], \"added\");\n\n    allowedRelayer[_relayer] = true;\n    emit RelayerAdded(_relayer);\n  }\n\n  function _removeRelayer(address _relayer) internal {\n    require(allowedRelayer[_relayer], \"!added\");\n\n    allowedRelayer[_relayer] = false;\n    emit RelayerRemoved(_relayer);\n  }\n\n  function _setConnext(address _connext) internal {\n    emit ConnextChanged(_connext, address(connext));\n    connext = IConnext(_connext);\n  }\n\n  function _setSpokeConnector(address _spokeConnector) internal {\n    emit SpokeConnectorChanged(_spokeConnector, address(spokeConnector));\n    spokeConnector = ISpokeConnector(_spokeConnector);\n  }\n\n  function _setGelatoRelayer(address _gelatoRelayer) internal {\n    emit GelatoRelayerChanged(_gelatoRelayer, address(gelatoRelayer));\n    gelatoRelayer = _gelatoRelayer;\n  }\n\n  function _setFeeCollector(address _feeCollector) internal {\n    emit FeeCollectorChanged(_feeCollector, address(feeCollector));\n    feeCollector = _feeCollector;\n  }\n}\n"},"contracts/core/connext/helpers/RelayerProxyHub.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {Address} from \"@openzeppelin/contracts/utils/Address.sol\";\nimport {ReentrancyGuard} from \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\nimport {GelatoRelayFeeCollector} from \"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol\";\n\nimport {ProposedOwnable} from \"../../../shared/ProposedOwnable.sol\";\nimport {IRootManager} from \"../../../messaging/interfaces/IRootManager.sol\";\nimport {RelayerProxy} from \"./RelayerProxy.sol\";\n\n/**\n * @title RelayerProxyHub\n * @author Connext Labs, Inc.\n * @notice This is a temporary contract that wraps the Connext RootManager's propagate() function so that it can be called by\n * Gelato's legacy relayer network. The contract stores native assets and pays them to the relayer on function call.\n */\ncontract RelayerProxyHub is RelayerProxy {\n  // ============ Properties ============\n\n  IRootManager public rootManager;\n\n  // ============ Events ============\n  event RootManagerChanged(address rootManager, address oldRootManager);\n\n  // ============ Constructor ============\n\n  /**\n   * @notice Creates a new RelayerProxyHub instance.\n   * @param _connext The address of the Connext on this domain.\n   * @param _spokeConnector The address of the SpokeConnector on this domain.\n   * @param _gelatoRelayer The address of the Gelato relayer on this domain.\n   * @param _feeCollector The address of the Gelato Fee Collector on this domain.\n   * @param _rootManager The address of the Root Manager on this domain.\n   */\n  constructor(\n    address _connext,\n    address _spokeConnector,\n    address _gelatoRelayer,\n    address _feeCollector,\n    address _rootManager\n  ) RelayerProxy(_connext, _spokeConnector, _gelatoRelayer, _feeCollector) {\n    _setRootManager(_rootManager);\n  }\n\n  // ============ Admin Functions ============\n\n  /**\n   * @notice Updates the RootManager address.\n   * @param _rootManager The address of the new RootManager on this domain.\n   */\n  function setRootManager(address _rootManager) external onlyOwner definedAddress(_rootManager) {\n    _setRootManager(_rootManager);\n  }\n\n  // ============ External Functions ============\n\n  /**\n   * @notice Wraps the call to propagate() on RootManager and pays either the caller or hardcoded relayer\n   * from this contract's balance for completing the transaction.\n   *\n   * @param _connectors Array of connectors: should match exactly the array of `connectors` in storage;\n   * used here to reduce gas costs, and keep them static regardless of number of supported domains.\n   * @param _messageFees Array of fees in native token for an AMB if required\n   * @param _encodedData Array of encodedData: extra params for each AMB if required\n   * @param _relayerFee Fee to be paid to relayer\n   */\n  function propagate(\n    address[] calldata _connectors,\n    uint256[] calldata _messageFees,\n    bytes[] memory _encodedData,\n    uint256 _relayerFee\n  ) external onlyRelayer nonReentrant {\n    uint256 sum = 0;\n    uint256 length = _connectors.length;\n    for (uint32 i; i < length; ) {\n      sum += _messageFees[i];\n      unchecked {\n        ++i;\n      }\n    }\n\n    rootManager.propagate{value: sum}(_connectors, _messageFees, _encodedData);\n    emit FundsDeducted(sum, address(this).balance);\n    transferRelayerFee(_relayerFee);\n  }\n\n  // ============ Internal Functions ============\n  function _setRootManager(address _rootManager) internal {\n    emit RootManagerChanged(_rootManager, address(rootManager));\n    rootManager = IRootManager(_rootManager);\n  }\n}\n"},"contracts/core/connext/helpers/StableSwap.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport {Clones} from \"@openzeppelin/contracts/proxy/Clones.sol\";\nimport {ReentrancyGuardUpgradeable} from \"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol\";\n\nimport {IStableSwap} from \"../interfaces/IStableSwap.sol\";\nimport {SwapUtilsExternal as SwapUtils} from \"../libraries/SwapUtilsExternal.sol\";\nimport {Constants} from \"../libraries/Constants.sol\";\n\nimport {OwnerPausableUpgradeable} from \"./OwnerPausableUpgradeable.sol\";\nimport {LPToken} from \"./LPToken.sol\";\n\n/**\n * @title Swap - A StableSwap implementation in solidity.\n * @notice This contract is responsible for custody of closely pegged assets (eg. group of stablecoins)\n * and automatic market making system. Users become an LP (Liquidity Provider) by depositing their tokens\n * in desired ratios for an exchange of the pool token that represents their share of the pool.\n * Users can burn pool tokens and withdraw their share of token(s).\n *\n * Each time a swap between the pooled tokens happens, a set fee incurs which effectively gets\n * distributed to the LPs.\n *\n * In case of emergencies, admin can pause additional deposits, swaps, or single-asset withdraws - which\n * stops the ratio of the tokens in the pool from changing.\n * Users can always withdraw their tokens via multi-asset withdraws.\n *\n * @dev Most of the logic is stored as a library `SwapUtils` for the sake of reducing contract's\n * deployment size.\n */\ncontract StableSwap is IStableSwap, OwnerPausableUpgradeable, ReentrancyGuardUpgradeable {\n  using SwapUtils for SwapUtils.Swap;\n\n  // ============ Events ============\n  event SwapInitialized(SwapUtils.Swap swap, address caller);\n\n  // ============ Storage ============\n\n  // Struct storing data responsible for automatic market maker functionalities. In order to\n  // access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol\n  SwapUtils.Swap public swapStorage;\n\n  // Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\n  // getTokenIndex function also relies on this mapping to retrieve token index.\n  mapping(address => uint8) private tokenIndexes;\n\n  // ============ Initializers ============\n\n  /**\n   * @notice Initializes this Swap contract with the given parameters.\n   * This will also clone a LPToken contract that represents users'\n   * LP positions. The owner of LPToken will be this contract - which means\n   * only this contract is allowed to mint/burn tokens.\n   *\n   * @param _pooledTokens an array of ERC20s this pool will accept\n   * @param decimals the decimals to use for each pooled token,\n   * eg 8 for WBTC. Cannot be larger than POOL_PRECISION_DECIMALS\n   * @param lpTokenName the long-form name of the token to be deployed\n   * @param lpTokenSymbol the short symbol for the token to be deployed\n   * @param _a the amplification coefficient * n ** (n - 1). See the\n   * StableSwap paper for details\n   * @param _fee default swap fee to be initialized with\n   * @param _adminFee default adminFee to be initialized with\n   * @param lpTokenTargetAddress the address of an existing LPToken contract to use as a target\n   */\n  function initialize(\n    IERC20[] memory _pooledTokens,\n    uint8[] memory decimals,\n    string memory lpTokenName,\n    string memory lpTokenSymbol,\n    uint256 _a,\n    uint256 _fee,\n    uint256 _adminFee,\n    address lpTokenTargetAddress\n  ) public override initializer {\n    __OwnerPausable_init();\n    __ReentrancyGuard_init();\n\n    uint256 numPooledTokens = _pooledTokens.length;\n\n    // Check _pooledTokens and precisions parameter\n    require(numPooledTokens > Constants.MINIMUM_POOLED_TOKENS - 1, \"_pooledTokens.length insufficient\");\n    require(numPooledTokens < Constants.MAXIMUM_POOLED_TOKENS + 1, \"_pooledTokens.length too large\");\n    require(numPooledTokens == decimals.length, \"_pooledTokens decimals mismatch\");\n\n    uint256[] memory precisionMultipliers = new uint256[](decimals.length);\n\n    for (uint256 i = 0; i < numPooledTokens; ) {\n      if (i != 0) {\n        // Check if index is already used. Check if 0th element is a duplicate.\n        require(\n          tokenIndexes[address(_pooledTokens[i])] == 0 && _pooledTokens[0] != _pooledTokens[i],\n          \"Duplicate tokens\"\n        );\n      }\n      require(address(_pooledTokens[i]) != address(0), \"The 0 address isn't an ERC-20\");\n      require(decimals[i] < Constants.POOL_PRECISION_DECIMALS + 1, \"Token decimals exceeds max\");\n      precisionMultipliers[i] = 10**uint256(Constants.POOL_PRECISION_DECIMALS - decimals[i]);\n      tokenIndexes[address(_pooledTokens[i])] = uint8(i);\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    // Check _a, _fee, _adminFee, _withdrawFee parameters\n    require(_a < Constants.MAX_A, \"_a exceeds maximum\");\n    require(_fee < Constants.MAX_SWAP_FEE, \"_fee exceeds maximum\");\n    require(_adminFee < Constants.MAX_ADMIN_FEE, \"_adminFee exceeds maximum\");\n\n    // Initialize a LPToken contract\n    LPToken lpToken = LPToken(Clones.clone(lpTokenTargetAddress));\n    require(lpToken.initialize(lpTokenName, lpTokenSymbol), \"could not init lpToken clone\");\n\n    // Initialize swapStorage struct\n    swapStorage.lpToken = lpToken;\n    swapStorage.pooledTokens = _pooledTokens;\n    swapStorage.tokenPrecisionMultipliers = precisionMultipliers;\n    swapStorage.balances = new uint256[](numPooledTokens);\n    swapStorage.adminFees = new uint256[](numPooledTokens);\n    swapStorage.initialA = _a * Constants.A_PRECISION;\n    swapStorage.futureA = _a * Constants.A_PRECISION;\n    // swapStorage.initialATime = 0;\n    // swapStorage.futureATime = 0;\n    swapStorage.swapFee = _fee;\n    swapStorage.adminFee = _adminFee;\n\n    emit SwapInitialized(swapStorage, msg.sender);\n  }\n\n  // ============ Modifiers ============\n\n  /**\n   * @notice Modifier to check deadline against current timestamp\n   * @param deadline latest timestamp to accept this transaction\n   */\n  modifier deadlineCheck(uint256 deadline) {\n    require(block.timestamp <= deadline, \"Deadline not met\");\n    _;\n  }\n\n  // ============ View functions ============\n\n  /**\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\n   * @dev See the StableSwap paper for details\n   * @return A parameter\n   */\n  function getA() external view override returns (uint256) {\n    return swapStorage.getA();\n  }\n\n  /**\n   * @notice Return A in its raw precision form\n   * @dev See the StableSwap paper for details\n   * @return A parameter in its raw precision form\n   */\n  function getAPrecise() external view returns (uint256) {\n    return swapStorage.getAPrecise();\n  }\n\n  /**\n   * @notice Return address of the pooled token at given index. Reverts if tokenIndex is out of range.\n   * @param index the index of the token\n   * @return address of the token at given index\n   */\n  function getToken(uint8 index) public view override returns (IERC20) {\n    require(index < swapStorage.pooledTokens.length, \"Out of range\");\n    return swapStorage.pooledTokens[index];\n  }\n\n  /**\n   * @notice Return the index of the given token address. Reverts if no matching\n   * token is found.\n   * @param tokenAddress address of the token\n   * @return the index of the given token address\n   */\n  function getTokenIndex(address tokenAddress) public view override returns (uint8) {\n    uint8 index = tokenIndexes[tokenAddress];\n    require(address(getToken(index)) == tokenAddress, \"Token does not exist\");\n    return index;\n  }\n\n  /**\n   * @notice Return current balance of the pooled token at given index\n   * @param index the index of the token\n   * @return current balance of the pooled token at given index with token's native precision\n   */\n  function getTokenBalance(uint8 index) external view override returns (uint256) {\n    require(index < swapStorage.pooledTokens.length, \"Index out of range\");\n    return swapStorage.balances[index];\n  }\n\n  /**\n   * @notice Get the virtual price, to help calculate profit\n   * @return the virtual price, scaled to the POOL_PRECISION_DECIMALS\n   */\n  function getVirtualPrice() external view override returns (uint256) {\n    return swapStorage.getVirtualPrice();\n  }\n\n  /**\n   * @notice Calculate amount of tokens you receive on swap\n   * @param tokenIndexFrom the token the user wants to sell\n   * @param tokenIndexTo the token the user wants to buy\n   * @param dx the amount of tokens the user wants to sell. If the token charges\n   * a fee on transfers, use the amount that gets transferred after the fee.\n   * @return amount of tokens the user will receive\n   */\n  function calculateSwap(\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dx\n  ) external view override returns (uint256) {\n    return swapStorage.calculateSwap(tokenIndexFrom, tokenIndexTo, dx);\n  }\n\n  /**\n   * @notice Calculate amount of tokens you receive on swap\n   * @param tokenIndexFrom the token the user wants to sell\n   * @param tokenIndexTo the token the user wants to buy\n   * @param dy the amount of tokens the user wants to buy\n   * @return amount of tokens the user have to transfer\n   */\n  function calculateSwapOut(\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dy\n  ) external view override returns (uint256) {\n    return swapStorage.calculateSwapInv(tokenIndexFrom, tokenIndexTo, dy);\n  }\n\n  /**\n   * @notice Calculate amount of tokens you receive on swap\n   * @param assetIn the token the user wants to swap from\n   * @param assetOut the token the user wants to swap to\n   * @param amountIn the amount of tokens the user wants to swap from\n   * @return amount of tokens the user will receive\n   */\n  function calculateSwapFromAddress(\n    address assetIn,\n    address assetOut,\n    uint256 amountIn\n  ) external view override returns (uint256) {\n    uint8 tokenIndexFrom = getTokenIndex(assetIn);\n    uint8 tokenIndexTo = getTokenIndex(assetOut);\n    return swapStorage.calculateSwap(tokenIndexFrom, tokenIndexTo, amountIn);\n  }\n\n  /**\n   * @notice Calculate amount of tokens you receive on swap\n   * @param assetIn the token the user wants to swap from\n   * @param assetOut the token the user wants to swap to\n   * @param amountOut the amount of tokens the user wants to swap to\n   * @return amount of tokens the user will receive\n   */\n  function calculateSwapOutFromAddress(\n    address assetIn,\n    address assetOut,\n    uint256 amountOut\n  ) external view override returns (uint256) {\n    uint8 tokenIndexFrom = getTokenIndex(assetIn);\n    uint8 tokenIndexTo = getTokenIndex(assetOut);\n    return swapStorage.calculateSwapInv(tokenIndexFrom, tokenIndexTo, amountOut);\n  }\n\n  /**\n   * @notice A simple method to calculate prices from deposits or\n   * withdrawals, excluding fees but including slippage. This is\n   * helpful as an input into the various \"min\" parameters on calls\n   * to fight front-running\n   *\n   * @dev This shouldn't be used outside frontends for user estimates.\n   *\n   * @param amounts an array of token amounts to deposit or withdrawal,\n   * corresponding to pooledTokens. The amount should be in each\n   * pooled token's native precision. If a token charges a fee on transfers,\n   * use the amount that gets transferred after the fee.\n   * @param deposit whether this is a deposit or a withdrawal\n   * @return token amount the user will receive\n   */\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view override returns (uint256) {\n    return swapStorage.calculateTokenAmount(amounts, deposit);\n  }\n\n  /**\n   * @notice A simple method to calculate amount of each underlying\n   * tokens that is returned upon burning given amount of LP tokens\n   * @param amount the amount of LP tokens that would be burned on withdrawal\n   * @return array of token balances that the user will receive\n   */\n  function calculateRemoveLiquidity(uint256 amount) external view override returns (uint256[] memory) {\n    return swapStorage.calculateRemoveLiquidity(amount);\n  }\n\n  /**\n   * @notice Calculate the amount of underlying token available to withdraw\n   * when withdrawing via only single token\n   * @param tokenAmount the amount of LP token to burn\n   * @param tokenIndex index of which token will be withdrawn\n   * @return availableTokenAmount calculated amount of underlying token\n   * available to withdraw\n   */\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\n    external\n    view\n    override\n    returns (uint256 availableTokenAmount)\n  {\n    return swapStorage.calculateWithdrawOneToken(tokenAmount, tokenIndex);\n  }\n\n  /**\n   * @notice This function reads the accumulated amount of admin fees of the token with given index\n   * @param index Index of the pooled token\n   * @return admin's token balance in the token's precision\n   */\n  function getAdminBalance(uint256 index) external view returns (uint256) {\n    return swapStorage.getAdminBalance(index);\n  }\n\n  // ============ External functions ============\n\n  /**\n   * @notice Swap two tokens using this pool\n   * @param tokenIndexFrom the token the user wants to swap from\n   * @param tokenIndexTo the token the user wants to swap to\n   * @param dx the amount of tokens the user wants to swap from\n   * @param minDy the min amount the user would like to receive, or revert.\n   * @param deadline latest timestamp to accept this transaction\n   */\n  function swap(\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dx,\n    uint256 minDy,\n    uint256 deadline\n  ) external override nonReentrant whenNotPaused deadlineCheck(deadline) returns (uint256) {\n    return swapStorage.swap(tokenIndexFrom, tokenIndexTo, dx, minDy);\n  }\n\n  /**\n   * @notice Swap two tokens using this pool\n   * @param assetIn the token the user wants to swap from\n   * @param assetOut the token the user wants to swap to\n   * @param amountIn the amount of tokens the user wants to swap from\n   * @param minAmountOut the min amount of tokens the user wants to swap to\n   */\n  function swapExact(\n    uint256 amountIn,\n    address assetIn,\n    address assetOut,\n    uint256 minAmountOut,\n    uint256 deadline\n  ) external payable override nonReentrant whenNotPaused deadlineCheck(deadline) returns (uint256) {\n    uint8 tokenIndexFrom = getTokenIndex(assetIn);\n    uint8 tokenIndexTo = getTokenIndex(assetOut);\n    return swapStorage.swap(tokenIndexFrom, tokenIndexTo, amountIn, minAmountOut);\n  }\n\n  /**\n   * @notice Swap two tokens using this pool\n   * @param assetIn the token the user wants to swap from\n   * @param assetOut the token the user wants to swap to\n   * @param amountOut the amount of tokens the user wants to swap to\n   * @param maxAmountIn the max amount of tokens the user wants to swap from\n   */\n  function swapExactOut(\n    uint256 amountOut,\n    address assetIn,\n    address assetOut,\n    uint256 maxAmountIn,\n    uint256 deadline\n  ) external payable override nonReentrant whenNotPaused deadlineCheck(deadline) returns (uint256) {\n    uint8 tokenIndexFrom = getTokenIndex(assetIn);\n    uint8 tokenIndexTo = getTokenIndex(assetOut);\n    return swapStorage.swapOut(tokenIndexFrom, tokenIndexTo, amountOut, maxAmountIn);\n  }\n\n  /**\n   * @notice Add liquidity to the pool with the given amounts of tokens\n   * @param amounts the amounts of each token to add, in their native precision\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\n   * should mint, otherwise revert. Handy for front-running mitigation\n   * @param deadline latest timestamp to accept this transaction\n   * @return amount of LP token user minted and received\n   */\n  function addLiquidity(\n    uint256[] calldata amounts,\n    uint256 minToMint,\n    uint256 deadline\n  ) external override nonReentrant whenNotPaused deadlineCheck(deadline) returns (uint256) {\n    return swapStorage.addLiquidity(amounts, minToMint);\n  }\n\n  /**\n   * @notice Burn LP tokens to remove liquidity from the pool. Withdraw fee that decays linearly\n   * over period of 4 weeks since last deposit will apply.\n   * @dev Liquidity can always be removed, even when the pool is paused.\n   * @param amount the amount of LP tokens to burn\n   * @param minAmounts the minimum amounts of each token in the pool\n   *        acceptable for this burn. Useful as a front-running mitigation\n   * @param deadline latest timestamp to accept this transaction\n   * @return amounts of tokens user received\n   */\n  function removeLiquidity(\n    uint256 amount,\n    uint256[] calldata minAmounts,\n    uint256 deadline\n  ) external override nonReentrant whenNotPaused deadlineCheck(deadline) returns (uint256[] memory) {\n    return swapStorage.removeLiquidity(amount, minAmounts);\n  }\n\n  /**\n   * @notice Remove liquidity from the pool all in one token. Withdraw fee that decays linearly\n   * over period of 4 weeks since last deposit will apply.\n   * @param tokenAmount the amount of the token you want to receive\n   * @param tokenIndex the index of the token you want to receive\n   * @param minAmount the minimum amount to withdraw, otherwise revert\n   * @param deadline latest timestamp to accept this transaction\n   * @return amount of chosen token user received\n   */\n  function removeLiquidityOneToken(\n    uint256 tokenAmount,\n    uint8 tokenIndex,\n    uint256 minAmount,\n    uint256 deadline\n  ) external override nonReentrant whenNotPaused deadlineCheck(deadline) returns (uint256) {\n    return swapStorage.removeLiquidityOneToken(tokenAmount, tokenIndex, minAmount);\n  }\n\n  /**\n   * @notice Remove liquidity from the pool, weighted differently than the\n   * pool's current balances. Withdraw fee that decays linearly\n   * over period of 4 weeks since last deposit will apply.\n   * @param amounts how much of each token to withdraw\n   * @param maxBurnAmount the max LP token provider is willing to pay to\n   * remove liquidity. Useful as a front-running mitigation.\n   * @param deadline latest timestamp to accept this transaction\n   * @return amount of LP tokens burned\n   */\n  function removeLiquidityImbalance(\n    uint256[] calldata amounts,\n    uint256 maxBurnAmount,\n    uint256 deadline\n  ) external override nonReentrant whenNotPaused deadlineCheck(deadline) returns (uint256) {\n    return swapStorage.removeLiquidityImbalance(amounts, maxBurnAmount);\n  }\n\n  // ============ Admin functions ============\n\n  /**\n   * @notice Withdraw all admin fees to the contract owner\n   */\n  function withdrawAdminFees() external nonReentrant onlyOwner {\n    swapStorage.withdrawAdminFees(owner());\n  }\n\n  /**\n   * @notice Update the admin fee. Admin fee takes portion of the swap fee.\n   * @param newAdminFee new admin fee to be applied on future transactions\n   */\n  function setAdminFee(uint256 newAdminFee) external onlyOwner {\n    swapStorage.setAdminFee(newAdminFee);\n  }\n\n  /**\n   * @notice Update the swap fee to be applied on swaps\n   * @param newSwapFee new swap fee to be applied on future transactions\n   */\n  function setSwapFee(uint256 newSwapFee) external onlyOwner {\n    swapStorage.setSwapFee(newSwapFee);\n  }\n\n  /**\n   * @notice Start ramping up or down A parameter towards given futureA and futureTime\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\n   * the limit range.\n   * @param futureA the new A to ramp towards\n   * @param futureTime timestamp when the new A should be reached\n   */\n  function rampA(uint256 futureA, uint256 futureTime) external onlyOwner {\n    swapStorage.rampA(futureA, futureTime);\n  }\n\n  /**\n   * @notice Stop ramping A immediately. Reverts if ramp A is already stopped.\n   */\n  function stopRampA() external onlyOwner {\n    swapStorage.stopRampA();\n  }\n\n  // ============ Upgrade Gap ============\n  uint256[48] private __GAP; // gap for upgrade safety\n}\n"},"contracts/core/connext/interfaces/IAavePool.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\ninterface IAavePool {\n  /**\n   * @dev Mints an `amount` of aTokens to the `onBehalfOf`\n   * @param asset The address of the underlying asset to mint\n   * @param amount The amount to mint\n   * @param onBehalfOf The address that will receive the aTokens\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   **/\n  function mintUnbacked(\n    address asset,\n    uint256 amount,\n    address onBehalfOf,\n    uint16 referralCode\n  ) external;\n\n  /**\n   * @dev Back the current unbacked underlying with `amount` and pay `fee`.\n   * @param asset The address of the underlying asset to back\n   * @param amount The amount to back\n   * @param fee The amount paid in fees\n   **/\n  function backUnbacked(\n    address asset,\n    uint256 amount,\n    uint256 fee\n  ) external;\n\n  /**\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\n   * @param asset The address of the underlying asset to withdraw\n   * @param amount The underlying amount to be withdrawn\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\n   * @param to The address that will receive the underlying, same as msg.sender if the user\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\n   *   different wallet\n   * @return The final amount withdrawn\n   **/\n  function withdraw(\n    address asset,\n    uint256 amount,\n    address to\n  ) external returns (uint256);\n}\n"},"contracts/core/connext/interfaces/IBridgeToken.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {IERC20Metadata} from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\n\ninterface IBridgeToken is IERC20Metadata {\n  function burn(address _from, uint256 _amnt) external;\n\n  function mint(address _to, uint256 _amnt) external;\n\n  function setDetails(string calldata _name, string calldata _symbol) external;\n}\n"},"contracts/core/connext/interfaces/IConnext.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport {ExecuteArgs, TransferInfo, DestinationTransferStatus} from \"../libraries/LibConnextStorage.sol\";\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {SwapUtils} from \"../libraries/SwapUtils.sol\";\nimport {TokenId} from \"../libraries/TokenId.sol\";\n\nimport {IStableSwap} from \"./IStableSwap.sol\";\n\nimport {IDiamondCut} from \"./IDiamondCut.sol\";\nimport {IDiamondLoupe} from \"./IDiamondLoupe.sol\";\n\ninterface IConnext is IDiamondLoupe, IDiamondCut {\n  // TokenFacet\n  function canonicalToAdopted(bytes32 _key) external view returns (address);\n\n  function canonicalToAdopted(TokenId calldata _canonical) external view returns (address);\n\n  function adoptedToCanonical(address _adopted) external view returns (TokenId memory);\n\n  function canonicalToRepresentation(bytes32 _key) external view returns (address);\n\n  function canonicalToRepresentation(TokenId calldata _canonical) external view returns (address);\n\n  function representationToCanonical(address _adopted) external view returns (TokenId memory);\n\n  function getLocalAndAdoptedToken(bytes32 _id, uint32 _domain) external view returns (address, address);\n\n  function approvedAssets(bytes32 _key) external view returns (bool);\n\n  function approvedAssets(TokenId calldata _canonical) external view returns (bool);\n\n  function adoptedToLocalExternalPools(bytes32 _key) external view returns (IStableSwap);\n\n  function adoptedToLocalExternalPools(TokenId calldata _canonical) external view returns (IStableSwap);\n\n  function getTokenId(address _candidate) external view returns (TokenId memory);\n\n  function getCustodiedAmount(bytes32 _key) external view returns (uint256);\n\n  function setupAsset(\n    TokenId calldata _canonical,\n    uint8 _canonicalDecimals,\n    string memory _representationName,\n    string memory _representationSymbol,\n    address _adoptedAssetId,\n    address _stableSwapPool,\n    uint256 _cap\n  ) external returns (address);\n\n  function setupAssetWithDeployedRepresentation(\n    TokenId calldata _canonical,\n    address _representation,\n    address _adoptedAssetId,\n    address _stableSwapPool\n  ) external returns (address);\n\n  function addStableSwapPool(TokenId calldata _canonical, address _stableSwapPool) external;\n\n  function updateLiquidityCap(TokenId calldata _canonical, uint256 _updated) external;\n\n  function removeAssetId(\n    bytes32 _key,\n    address _adoptedAssetId,\n    address _representation\n  ) external;\n\n  function removeAssetId(\n    TokenId calldata _canonical,\n    address _adoptedAssetId,\n    address _representation\n  ) external;\n\n  function updateDetails(\n    TokenId calldata _canonical,\n    string memory _name,\n    string memory _symbol\n  ) external;\n\n  // BaseConnextFacet\n\n  // BridgeFacet\n  function routedTransfers(bytes32 _transferId) external view returns (address[] memory);\n\n  function transferStatus(bytes32 _transferId) external view returns (DestinationTransferStatus);\n\n  function remote(uint32 _domain) external view returns (address);\n\n  function domain() external view returns (uint256);\n\n  function nonce() external view returns (uint256);\n\n  function approvedSequencers(address _sequencer) external view returns (bool);\n\n  function xAppConnectionManager() external view returns (address);\n\n  function addConnextion(uint32 _domain, address _connext) external;\n\n  function addSequencer(address _sequencer) external;\n\n  function removeSequencer(address _sequencer) external;\n\n  function xcall(\n    uint32 _destination,\n    address _to,\n    address _asset,\n    address _delegate,\n    uint256 _amount,\n    uint256 _slippage,\n    bytes calldata _callData\n  ) external payable returns (bytes32);\n\n  function xcallIntoLocal(\n    uint32 _destination,\n    address _to,\n    address _asset,\n    address _delegate,\n    uint256 _amount,\n    uint256 _slippage,\n    bytes calldata _callData\n  ) external payable returns (bytes32);\n\n  function execute(ExecuteArgs calldata _args) external returns (bytes32 transferId);\n\n  function forceUpdateSlippage(TransferInfo calldata _params, uint256 _slippage) external;\n\n  function forceReceiveLocal(TransferInfo calldata _params) external;\n\n  function bumpTransfer(bytes32 _transferId) external payable;\n\n  function setXAppConnectionManager(address _xAppConnectionManager) external;\n\n  function enrollRemoteRouter(uint32 _domain, bytes32 _router) external;\n\n  function enrollCustom(\n    uint32 _domain,\n    bytes32 _id,\n    address _custom\n  ) external;\n\n  // InboxFacet\n\n  function handle(\n    uint32 _origin,\n    uint32 _nonce,\n    bytes32 _sender,\n    bytes memory _message\n  ) external;\n\n  // ProposedOwnableFacet\n\n  function owner() external view returns (address);\n\n  function routerAllowlistRemoved() external view returns (bool);\n\n  function proposed() external view returns (address);\n\n  function proposedTimestamp() external view returns (uint256);\n\n  function routerAllowlistTimestamp() external view returns (uint256);\n\n  function delay() external view returns (uint256);\n\n  function paused() external view returns (bool);\n\n  function proposeRouterAllowlistRemoval() external;\n\n  function removeRouterAllowlist() external;\n\n  function proposeNewOwner(address newlyProposed) external;\n\n  function acceptProposedOwner() external;\n\n  function pause() external;\n\n  function unpause() external;\n\n  // RelayerFacet\n  function approvedRelayers(address _relayer) external view returns (bool);\n\n  function relayerFeeVault() external view returns (address);\n\n  function setRelayerFeeVault(address _relayerFeeVault) external;\n\n  function addRelayer(address _relayer) external;\n\n  function removeRelayer(address _relayer) external;\n\n  // RoutersFacet\n  function LIQUIDITY_FEE_NUMERATOR() external view returns (uint256);\n\n  function LIQUIDITY_FEE_DENOMINATOR() external view returns (uint256);\n\n  function getRouterApproval(address _router) external view returns (bool);\n\n  function getRouterRecipient(address _router) external view returns (address);\n\n  function getRouterOwner(address _router) external view returns (address);\n\n  function getProposedRouterOwner(address _router) external view returns (address);\n\n  function getProposedRouterOwnerTimestamp(address _router) external view returns (uint256);\n\n  function maxRoutersPerTransfer() external view returns (uint256);\n\n  function routerBalances(address _router, address _asset) external view returns (uint256);\n\n  function getRouterApprovalForPortal(address _router) external view returns (bool);\n\n  function approveRouter(address router) external;\n\n  function initializeRouter(address owner, address recipient) external;\n\n  function unapproveRouter(address router) external;\n\n  function setMaxRoutersPerTransfer(uint256 _newMaxRouters) external;\n\n  function setLiquidityFeeNumerator(uint256 _numerator) external;\n\n  function approveRouterForPortal(address _router) external;\n\n  function unapproveRouterForPortal(address _router) external;\n\n  function setRouterRecipient(address router, address recipient) external;\n\n  function proposeRouterOwner(address router, address proposed) external;\n\n  function acceptProposedRouterOwner(address router) external;\n\n  function addRouterLiquidityFor(\n    uint256 _amount,\n    address _local,\n    address _router\n  ) external payable;\n\n  function addRouterLiquidity(uint256 _amount, address _local) external payable;\n\n  function removeRouterLiquidityFor(\n    uint256 _amount,\n    address _local,\n    address payable _to,\n    address _router\n  ) external;\n\n  function removeRouterLiquidity(\n    uint256 _amount,\n    address _local,\n    address payable _to\n  ) external;\n\n  // PortalFacet\n  function getAavePortalDebt(bytes32 _transferId) external view returns (uint256);\n\n  function getAavePortalFeeDebt(bytes32 _transferId) external view returns (uint256);\n\n  function aavePool() external view returns (address);\n\n  function aavePortalFee() external view returns (uint256);\n\n  function setAavePool(address _aavePool) external;\n\n  function setAavePortalFee(uint256 _aavePortalFeeNumerator) external;\n\n  function repayAavePortal(\n    TransferInfo calldata _params,\n    uint256 _backingAmount,\n    uint256 _feeAmount,\n    uint256 _maxIn\n  ) external;\n\n  function repayAavePortalFor(\n    TransferInfo calldata _params,\n    uint256 _backingAmount,\n    uint256 _feeAmount\n  ) external;\n\n  // StableSwapFacet\n  function getSwapStorage(bytes32 canonicalId) external view returns (SwapUtils.Swap memory);\n\n  function getSwapLPToken(bytes32 canonicalId) external view returns (address);\n\n  function getSwapA(bytes32 canonicalId) external view returns (uint256);\n\n  function getSwapAPrecise(bytes32 canonicalId) external view returns (uint256);\n\n  function getSwapToken(bytes32 canonicalId, uint8 index) external view returns (IERC20);\n\n  function getSwapTokenIndex(bytes32 canonicalId, address tokenAddress) external view returns (uint8);\n\n  function getSwapTokenBalance(bytes32 canonicalId, uint8 index) external view returns (uint256);\n\n  function getSwapVirtualPrice(bytes32 canonicalId) external view returns (uint256);\n\n  function calculateSwap(\n    bytes32 canonicalId,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dx\n  ) external view returns (uint256);\n\n  function calculateSwapTokenAmount(\n    bytes32 canonicalId,\n    uint256[] calldata amounts,\n    bool deposit\n  ) external view returns (uint256);\n\n  function calculateRemoveSwapLiquidity(bytes32 canonicalId, uint256 amount) external view returns (uint256[] memory);\n\n  function calculateRemoveSwapLiquidityOneToken(\n    bytes32 canonicalId,\n    uint256 tokenAmount,\n    uint8 tokenIndex\n  ) external view returns (uint256);\n\n  function getSwapAdminBalance(bytes32 canonicalId, uint256 index) external view returns (uint256);\n\n  function swap(\n    bytes32 canonicalId,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dx,\n    uint256 minDy,\n    uint256 deadline\n  ) external returns (uint256);\n\n  function swapExact(\n    bytes32 canonicalId,\n    uint256 amountIn,\n    address assetIn,\n    address assetOut,\n    uint256 minAmountOut,\n    uint256 deadline\n  ) external payable returns (uint256);\n\n  function swapExactOut(\n    bytes32 canonicalId,\n    uint256 amountOut,\n    address assetIn,\n    address assetOut,\n    uint256 maxAmountIn,\n    uint256 deadline\n  ) external payable returns (uint256);\n\n  function addSwapLiquidity(\n    bytes32 canonicalId,\n    uint256[] calldata amounts,\n    uint256 minToMint,\n    uint256 deadline\n  ) external returns (uint256);\n\n  function removeSwapLiquidity(\n    bytes32 canonicalId,\n    uint256 amount,\n    uint256[] calldata minAmounts,\n    uint256 deadline\n  ) external returns (uint256[] memory);\n\n  function removeSwapLiquidityOneToken(\n    bytes32 canonicalId,\n    uint256 tokenAmount,\n    uint8 tokenIndex,\n    uint256 minAmount,\n    uint256 deadline\n  ) external returns (uint256);\n\n  function removeSwapLiquidityImbalance(\n    bytes32 canonicalId,\n    uint256[] calldata amounts,\n    uint256 maxBurnAmount,\n    uint256 deadline\n  ) external returns (uint256);\n\n  // SwapAdminFacet\n\n  function initializeSwap(\n    bytes32 _canonicalId,\n    IERC20[] memory _pooledTokens,\n    uint8[] memory decimals,\n    string memory lpTokenName,\n    string memory lpTokenSymbol,\n    uint256 _a,\n    uint256 _fee,\n    uint256 _adminFee\n  ) external;\n\n  function withdrawSwapAdminFees(bytes32 canonicalId) external;\n\n  function setSwapAdminFee(bytes32 canonicalId, uint256 newAdminFee) external;\n\n  function setSwapFee(bytes32 canonicalId, uint256 newSwapFee) external;\n\n  function rampA(\n    bytes32 canonicalId,\n    uint256 futureA,\n    uint256 futureTime\n  ) external;\n\n  function stopRampA(bytes32 canonicalId) external;\n\n  function lpTokenTargetAddress() external view returns (address);\n\n  function updateLpTokenTarget(address newAddress) external;\n}\n"},"contracts/core/connext/interfaces/IDiamondCut.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.17;\n\n/******************************************************************************\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\ninterface IDiamondCut {\n  enum FacetCutAction {\n    Add,\n    Replace,\n    Remove\n  }\n  // Add=0, Replace=1, Remove=2\n\n  struct FacetCut {\n    address facetAddress;\n    FacetCutAction action;\n    bytes4[] functionSelectors;\n  }\n\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\n  ///         a function with delegatecall\n  /// @param _diamondCut Contains the facet addresses and function selectors\n  /// @param _init The address of the contract or facet to execute _calldata\n  /// @param _calldata A function call, including function selector and arguments\n  ///                  _calldata is executed with delegatecall on _init\n  function proposeDiamondCut(\n    FacetCut[] calldata _diamondCut,\n    address _init,\n    bytes calldata _calldata\n  ) external;\n\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\n\n  /// @notice Add/replace/remove any number of functions and optionally execute\n  ///         a function with delegatecall\n  /// @param _diamondCut Contains the facet addresses and function selectors\n  /// @param _init The address of the contract or facet to execute _calldata\n  /// @param _calldata A function call, including function selector and arguments\n  ///                  _calldata is executed with delegatecall on _init\n  function diamondCut(\n    FacetCut[] calldata _diamondCut,\n    address _init,\n    bytes calldata _calldata\n  ) external;\n\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\n  ///         a function with delegatecall\n  /// @param _diamondCut Contains the facet addresses and function selectors\n  /// @param _init The address of the contract or facet to execute _calldata\n  /// @param _calldata A function call, including function selector and arguments\n  ///                  _calldata is executed with delegatecall on _init\n  function rescindDiamondCut(\n    FacetCut[] calldata _diamondCut,\n    address _init,\n    bytes calldata _calldata\n  ) external;\n\n  /**\n   * @notice Returns the acceptance time for a given proposal\n   * @param _diamondCut Contains the facet addresses and function selectors\n   * @param _init The address of the contract or facet to execute _calldata\n   * @param _calldata A function call, including function selector and arguments _calldata is\n   * executed with delegatecall on _init\n   */\n  function getAcceptanceTime(\n    FacetCut[] calldata _diamondCut,\n    address _init,\n    bytes calldata _calldata\n  ) external returns (uint256);\n\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n"},"contracts/core/connext/interfaces/IDiamondLoupe.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.17;\n\n/******************************************************************************\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\n// A loupe is a small magnifying glass used to look at diamonds.\n// These functions look at diamonds\ninterface IDiamondLoupe {\n  /// These functions are expected to be called frequently\n  /// by tools.\n\n  struct Facet {\n    address facetAddress;\n    bytes4[] functionSelectors;\n  }\n\n  /// @notice Gets all facet addresses and their four byte function selectors.\n  /// @return facets_ Facet\n  function facets() external view returns (Facet[] memory facets_);\n\n  /// @notice Gets all the function selectors supported by a specific facet.\n  /// @param _facet The facet address.\n  /// @return facetFunctionSelectors_\n  function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\n\n  /// @notice Get all the facet addresses used by a diamond.\n  /// @return facetAddresses_\n  function facetAddresses() external view returns (address[] memory facetAddresses_);\n\n  /// @notice Gets the facet that supports the given selector.\n  /// @dev If facet is not found return address(0).\n  /// @param _functionSelector The function selector.\n  /// @return facetAddress_ The facet address.\n  function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\n}\n"},"contracts/core/connext/interfaces/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.17;\n\ninterface IERC165 {\n  /// @notice Query if a contract implements an interface\n  /// @param interfaceId The interface identifier, as specified in ERC-165\n  /// @dev Interface identification is specified in ERC-165. This function\n  ///  uses less than 30,000 gas.\n  /// @return `true` if the contract implements `interfaceID` and\n  ///  `interfaceID` is not 0xffffffff, `false` otherwise\n  function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"},"contracts/core/connext/interfaces/IPriceOracle.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\ninterface IPriceOracle {\n  /**\n   * @notice Get the price of a token\n   * @param token The token to get the price of\n   * @return The asset price mantissa (scaled by 1e18).\n   *  Zero means the price is unavailable.\n   */\n  function getTokenPrice(address token) external view returns (uint256);\n\n  /**\n   * @notice Get the price of a token from ChainLink\n   * @param token The token to get the price of\n   * @return The asset price mantissa (scaled by 1e18).\n   *  Zero means the price is unavailable.\n   */\n  function getPriceFromChainlink(address token) external view returns (uint256);\n}\n"},"contracts/core/connext/interfaces/IStableSwap.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\ninterface IStableSwap {\n  /*** EVENTS ***/\n\n  // events replicated from SwapUtils to make the ABI easier for dumb\n  // clients\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\n  event AddLiquidity(\n    address indexed provider,\n    uint256[] tokenAmounts,\n    uint256[] fees,\n    uint256 invariant,\n    uint256 lpTokenSupply\n  );\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\n  event RemoveLiquidityOne(\n    address indexed provider,\n    uint256 lpTokenAmount,\n    uint256 lpTokenSupply,\n    uint256 boughtId,\n    uint256 tokensBought\n  );\n  event RemoveLiquidityImbalance(\n    address indexed provider,\n    uint256[] tokenAmounts,\n    uint256[] fees,\n    uint256 invariant,\n    uint256 lpTokenSupply\n  );\n  event NewAdminFee(uint256 newAdminFee);\n  event NewSwapFee(uint256 newSwapFee);\n  event NewWithdrawFee(uint256 newWithdrawFee);\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\n  event StopRampA(uint256 currentA, uint256 time);\n\n  function swap(\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dx,\n    uint256 minDy,\n    uint256 deadline\n  ) external returns (uint256);\n\n  function swapExact(\n    uint256 amountIn,\n    address assetIn,\n    address assetOut,\n    uint256 minAmountOut,\n    uint256 deadline\n  ) external payable returns (uint256);\n\n  function swapExactOut(\n    uint256 amountOut,\n    address assetIn,\n    address assetOut,\n    uint256 maxAmountIn,\n    uint256 deadline\n  ) external payable returns (uint256);\n\n  function getA() external view returns (uint256);\n\n  function getToken(uint8 index) external view returns (IERC20);\n\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\n\n  function getTokenBalance(uint8 index) external view returns (uint256);\n\n  function getVirtualPrice() external view returns (uint256);\n\n  // min return calculation functions\n  function calculateSwap(\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dx\n  ) external view returns (uint256);\n\n  function calculateSwapOut(\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dy\n  ) external view returns (uint256);\n\n  function calculateSwapFromAddress(\n    address assetIn,\n    address assetOut,\n    uint256 amountIn\n  ) external view returns (uint256);\n\n  function calculateSwapOutFromAddress(\n    address assetIn,\n    address assetOut,\n    uint256 amountOut\n  ) external view returns (uint256);\n\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\n\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\n\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\n    external\n    view\n    returns (uint256 availableTokenAmount);\n\n  // state modifying functions\n  function initialize(\n    IERC20[] memory pooledTokens,\n    uint8[] memory decimals,\n    string memory lpTokenName,\n    string memory lpTokenSymbol,\n    uint256 a,\n    uint256 fee,\n    uint256 adminFee,\n    address lpTokenTargetAddress\n  ) external;\n\n  function addLiquidity(\n    uint256[] calldata amounts,\n    uint256 minToMint,\n    uint256 deadline\n  ) external returns (uint256);\n\n  function removeLiquidity(\n    uint256 amount,\n    uint256[] calldata minAmounts,\n    uint256 deadline\n  ) external returns (uint256[] memory);\n\n  function removeLiquidityOneToken(\n    uint256 tokenAmount,\n    uint8 tokenIndex,\n    uint256 minAmount,\n    uint256 deadline\n  ) external returns (uint256);\n\n  function removeLiquidityImbalance(\n    uint256[] calldata amounts,\n    uint256 maxBurnAmount,\n    uint256 deadline\n  ) external returns (uint256);\n}\n"},"contracts/core/connext/interfaces/IXReceiver.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\ninterface IXReceiver {\n  function xReceive(\n    bytes32 _transferId,\n    uint256 _amount,\n    address _asset,\n    address _originSender,\n    uint32 _origin,\n    bytes memory _callData\n  ) external returns (bytes memory);\n}\n"},"contracts/core/connext/libraries/AmplificationUtils.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {SwapUtils} from \"./SwapUtils.sol\";\nimport {Constants} from \"./Constants.sol\";\n\n/**\n * @title AmplificationUtils library\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\n * This library assumes the struct is fully validated.\n */\nlibrary AmplificationUtils {\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\n  event StopRampA(uint256 currentA, uint256 time);\n\n  /**\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\n   * @dev See the StableSwap paper for details\n   * @param self Swap struct to read from\n   * @return A parameter\n   */\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\n    return _getAPrecise(self) / Constants.A_PRECISION;\n  }\n\n  /**\n   * @notice Return A in its raw precision\n   * @dev See the StableSwap paper for details\n   * @param self Swap struct to read from\n   * @return A parameter in its raw precision form\n   */\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\n    return _getAPrecise(self);\n  }\n\n  /**\n   * @notice Return A in its raw precision\n   * @dev See the StableSwap paper for details\n   * @param self Swap struct to read from\n   * @return currentA A parameter in its raw precision form\n   */\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\n    uint256 t1 = self.futureATime; // time when ramp is finished\n    currentA = self.futureA; // final A value when ramp is finished\n    uint256 a0 = self.initialA; // initial A value when ramp is started\n\n    if (a0 != currentA && block.timestamp < t1) {\n      uint256 t0 = self.initialATime; // time when ramp is started\n      assembly {\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\n      }\n    }\n  }\n\n  /**\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\n   * the limit range.\n   * @param self Swap struct to update\n   * @param futureA_ the new A to ramp towards\n   * @param futureTime_ timestamp when the new A should be reached\n   */\n  function rampA(\n    SwapUtils.Swap storage self,\n    uint256 futureA_,\n    uint256 futureTime_\n  ) internal {\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \"Wait 1 day before starting ramp\");\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \"Insufficient ramp time\");\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \"futureA_ must be > 0 and < MAX_A\");\n\n    uint256 initialAPrecise = _getAPrecise(self);\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\n    require(initialAPrecise != futureAPrecise, \"!valid ramp\");\n\n    if (futureAPrecise < initialAPrecise) {\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \"futureA_ is too small\");\n    } else {\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \"futureA_ is too large\");\n    }\n\n    self.initialA = initialAPrecise;\n    self.futureA = futureAPrecise;\n    self.initialATime = block.timestamp;\n    self.futureATime = futureTime_;\n\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\n  }\n\n  /**\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\n   * cannot be called for another 24 hours\n   * @param self Swap struct to update\n   */\n  function stopRampA(SwapUtils.Swap storage self) internal {\n    require(self.futureATime > block.timestamp, \"Ramp is already stopped\");\n\n    uint256 currentA = _getAPrecise(self);\n    self.initialA = currentA;\n    self.futureA = currentA;\n    self.initialATime = block.timestamp;\n    self.futureATime = block.timestamp;\n\n    emit StopRampA(currentA, block.timestamp);\n  }\n}\n"},"contracts/core/connext/libraries/AssetLogic.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {SafeERC20} from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport {IERC20Metadata} from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\n\nimport {TypeCasts} from \"../../../shared/libraries/TypeCasts.sol\";\n\nimport {IStableSwap} from \"../interfaces/IStableSwap.sol\";\n\nimport {LibConnextStorage, AppStorage, TokenConfig} from \"./LibConnextStorage.sol\";\nimport {SwapUtils} from \"./SwapUtils.sol\";\nimport {Constants} from \"./Constants.sol\";\nimport {TokenId} from \"./TokenId.sol\";\n\nlibrary AssetLogic {\n  // ============ Libraries ============\n\n  using SwapUtils for SwapUtils.Swap;\n  using SafeERC20 for IERC20Metadata;\n\n  // ============ Errors ============\n\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\n  error AssetLogic__handleOutgoingAsset_notNative();\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\n  error AssetLogic__getConfig_notRegistered();\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\n\n  // ============ Internal: Handle Transfer ============\n\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\n    AppStorage storage s = LibConnextStorage.connextStorage();\n    TokenConfig storage config = s.tokenConfigs[_key];\n\n    // Sanity check: not empty\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\n    // for the asset). The same is not true for the representation assets, which\n    // will always have 0 decimals on the canonical domain\n    if (config.adoptedDecimals < 1) {\n      revert AssetLogic__getConfig_notRegistered();\n    }\n\n    return config;\n  }\n\n  /**\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\n   *\n   * @param _asset - The address of the ERC20 token to transfer.\n   * @param _amount - The specified amount to transfer.\n   */\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\n    // Sanity check: if amount is 0, do nothing.\n    if (_amount == 0) {\n      return;\n    }\n    // Sanity check: asset address is not zero.\n    if (_asset == address(0)) {\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\n    }\n\n    IERC20Metadata asset = IERC20Metadata(_asset);\n\n    // Record starting amount to validate correct amount is transferred.\n    uint256 starting = asset.balanceOf(address(this));\n\n    // Transfer asset to contract.\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\n\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\n    if (asset.balanceOf(address(this)) - starting != _amount) {\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\n    }\n  }\n\n  /**\n   * @notice Handles transferring funds from the Connext contract to a specified address\n   * @param _asset - The address of the ERC20 token to transfer.\n   * @param _to - The recipient address that will receive the funds.\n   * @param _amount - The amount to withdraw from contract.\n   */\n  function handleOutgoingAsset(\n    address _asset,\n    address _to,\n    uint256 _amount\n  ) internal {\n    // Sanity check: if amount is 0, do nothing.\n    if (_amount == 0) {\n      return;\n    }\n    // Sanity check: asset address is not zero.\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\n\n    // Transfer ERC20 asset to target recipient.\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\n  }\n\n  // ============ Internal: StableSwap Pools ============\n\n  /**\n   * @notice Return the index of the given token address. Reverts if no matching\n   * token is found.\n   * @param key the hash of the canonical id and domain\n   * @param tokenAddress address of the token\n   * @return the index of the given token address\n   */\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\n    AppStorage storage s = LibConnextStorage.connextStorage();\n    uint8 index = s.tokenIndexes[key][tokenAddress];\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\n    return index;\n  }\n\n  // ============ Internal: Handle Swap ============\n\n  /**\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\n   * @dev Will not swap if the asset passed in is the local asset.\n   * @param _key - The hash of canonical id and domain.\n   * @param _asset - The address of the adopted asset to swap into the local asset.\n   * @param _amount - The amount of the adopted asset to swap.\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\n   * @return uint256 The amount of local asset received from swap.\n   */\n  function swapToLocalAssetIfNeeded(\n    bytes32 _key,\n    address _asset,\n    address _local,\n    uint256 _amount,\n    uint256 _slippage\n  ) internal returns (uint256) {\n    // If there's no amount, no need to swap.\n    if (_amount == 0) {\n      return 0;\n    }\n\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\n    if (_local == _asset) {\n      return _amount;\n    }\n\n    // Get the configs.\n    TokenConfig storage config = getConfig(_key);\n\n    // Swap the asset to the proper local asset.\n    (uint256 out, ) = _swapAsset(\n      _key,\n      _asset,\n      _local,\n      _amount,\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\n    );\n    return out;\n  }\n\n  /**\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\n   * @dev Will not swap if the asset passed in is the adopted asset\n   * @param _key the hash of the canonical id and domain\n   * @param _asset - The address of the local asset to swap into the adopted asset\n   * @param _amount - The amount of the local asset to swap\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\n   * by convention\n   * @return The amount of adopted asset received from swap\n   * @return The address of asset received post-swap\n   */\n  function swapFromLocalAssetIfNeeded(\n    bytes32 _key,\n    address _asset,\n    uint256 _amount,\n    uint256 _slippage,\n    uint256 _normalizedIn\n  ) internal returns (uint256, address) {\n    // Get the token config.\n    TokenConfig storage config = getConfig(_key);\n    address adopted = config.adopted;\n\n    // If the adopted asset is the local asset, no need to swap.\n    if (adopted == _asset) {\n      return (_amount, adopted);\n    }\n\n    // If there's no amount, no need to swap.\n    if (_amount == 0) {\n      return (_amount, adopted);\n    }\n\n    // Swap the asset to the proper local asset\n    return\n      _swapAsset(\n        _key,\n        _asset,\n        adopted,\n        _amount,\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\n        // normalized amount in (at 18 decimals by convention), then convert that amount\n        // to the proper decimals of adopted.\n        calculateSlippageBoundary(\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\n          config.adoptedDecimals,\n          _normalizedIn,\n          _slippage\n        )\n      );\n  }\n\n  /**\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\n   * @dev Will not swap if the asset passed in is the adopted asset\n   * @param _key the hash of the canonical id and domain\n   * @param _asset - The address of the local asset to swap into the adopted asset\n   * @param _amount - The exact amount to receive out of the swap\n   * @param _maxIn - The most you will supply to the swap\n   * @return The amount of local asset put into  swap\n   * @return The address of asset received post-swap\n   */\n  function swapFromLocalAssetIfNeededForExactOut(\n    bytes32 _key,\n    address _asset,\n    uint256 _amount,\n    uint256 _maxIn\n  ) internal returns (uint256, address) {\n    TokenConfig storage config = getConfig(_key);\n\n    // If the adopted asset is the local asset, no need to swap.\n    address adopted = config.adopted;\n    if (adopted == _asset) {\n      return (_amount, adopted);\n    }\n\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\n  }\n\n  /**\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\n   * @dev Will not swap if the asset passed in is the adopted asset\n   * @param _key - The hash of canonical id and domain.\n   * @param _assetIn - The address of the from asset\n   * @param _assetOut - The address of the to asset\n   * @param _amount - The amount of the local asset to swap\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\n   * @return The amount of asset received\n   * @return The address of asset received\n   */\n  function _swapAsset(\n    bytes32 _key,\n    address _assetIn,\n    address _assetOut,\n    uint256 _amount,\n    uint256 _minOut\n  ) internal returns (uint256, address) {\n    AppStorage storage s = LibConnextStorage.connextStorage();\n\n    // Retrieve internal swap pool reference.\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\n\n    if (ipool.exists()) {\n      // Swap via the internal pool.\n      return (\n        ipool.swapInternal(\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\n          _amount,\n          _minOut\n        ),\n        _assetOut\n      );\n    } else {\n      // Otherwise, swap via external stableswap pool.\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\n\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\n\n      assetIn.safeApprove(address(pool), 0);\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\n\n      // NOTE: If pool is not registered here, then this call will revert.\n      return (\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\n        _assetOut\n      );\n    }\n  }\n\n  /**\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\n   * @param _key - The hash of the canonical id and domain.\n   * @param _assetIn - The address of the from asset.\n   * @param _assetOut - The address of the to asset.\n   * @param _amountOut - The amount of the _assetOut to swap.\n   * @param _maxIn - The most you will supply to the swap.\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\n   * too high).\n   * @return assetOut The address of asset received.\n   */\n  function _swapAssetOut(\n    bytes32 _key,\n    address _assetIn,\n    address _assetOut,\n    uint256 _amountOut,\n    uint256 _maxIn\n  ) internal returns (uint256, address) {\n    AppStorage storage s = LibConnextStorage.connextStorage();\n\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\n    // external stableswap below.\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\n\n    // Swap the asset to the proper local asset.\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\n    if (ipool.exists()) {\n      // Swap via the internal pool.\n      return (\n        ipool.swapInternalOut(\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\n          _amountOut,\n          _maxIn\n        ),\n        _assetOut\n      );\n    } else {\n      // Otherwise, swap via external stableswap pool.\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\n      address poolAddress = address(pool);\n\n      // Perform the swap.\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\n      // is not 0, it has to be set to 0 first.\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\n\n      assetIn.safeApprove(poolAddress, 0);\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\n\n      uint256 out = pool.swapExactOut(\n        _amountOut,\n        _assetIn,\n        _assetOut,\n        _maxIn,\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\n      );\n\n      // Reset allowance\n      assetIn.safeApprove(poolAddress, 0);\n      return (out, _assetOut);\n    }\n  }\n\n  /**\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\n   * using the stored stable swap\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\n   * @param _key - The hash of the canonical id and domain\n   * @param _asset - The address of the local asset to swap into the local asset\n   * @param _amount - The amount of the local asset to swap\n   * @return The amount of local asset received from swap\n   * @return The address of asset received post-swap\n   */\n  function calculateSwapFromLocalAssetIfNeeded(\n    bytes32 _key,\n    address _asset,\n    uint256 _amount\n  ) internal view returns (uint256, address) {\n    AppStorage storage s = LibConnextStorage.connextStorage();\n\n    // If the adopted asset is the local asset, no need to swap.\n    TokenConfig storage config = getConfig(_key);\n    address adopted = config.adopted;\n    if (adopted == _asset) {\n      return (_amount, adopted);\n    }\n\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\n\n    // Calculate the swap using the appropriate pool.\n    if (ipool.exists()) {\n      // Calculate with internal swap pool.\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\n    } else {\n      // Otherwise, try to calculate with external pool.\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\n      // NOTE: This call will revert if no external pool exists.\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\n    }\n  }\n\n  /**\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\n   * using the stored stable swap\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\n   * @param _asset - The address of the asset to swap into the local asset\n   * @param _amount - The amount of the asset to swap\n   * @return The amount of local asset received from swap\n   * @return The address of asset received post-swap\n   */\n  function calculateSwapToLocalAssetIfNeeded(\n    bytes32 _key,\n    address _asset,\n    address _local,\n    uint256 _amount\n  ) internal view returns (uint256, address) {\n    AppStorage storage s = LibConnextStorage.connextStorage();\n\n    // If the asset is the local asset, no swap needed\n    if (_asset == _local) {\n      return (_amount, _local);\n    }\n\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\n\n    // Calculate the swap using the appropriate pool.\n    if (ipool.exists()) {\n      // if internal swap pool exists\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\n    } else {\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\n\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\n    }\n  }\n\n  // ============ Internal: Token ID Helpers ============\n\n  /**\n   * @notice Gets the canonical information for a given candidate.\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\n   * adopted asset, then calculates the local address.\n   * @return TokenId The canonical token ID information for the given candidate.\n   */\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\n    TokenId memory _canonical;\n    // If candidate is address(0), return an empty `_canonical`.\n    if (_candidate == address(0)) {\n      return _canonical;\n    }\n\n    // Check to see if candidate is an adopted asset.\n    _canonical = s.adoptedToCanonical[_candidate];\n    if (_canonical.domain != 0) {\n      // Candidate is an adopted asset, return canonical info.\n      return _canonical;\n    }\n\n    // Candidate was not adopted; it could be the local address.\n    // IFF this domain is the canonical domain, then the local == canonical.\n    // Otherwise, it will be the representation asset.\n    if (isLocalOrigin(_candidate, s)) {\n      // The token originates on this domain, canonical information is the information\n      // of the candidate\n      _canonical.domain = s.domain;\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\n    } else {\n      // on a remote domain, return the representation\n      _canonical = s.representationToCanonical[_candidate];\n    }\n    return _canonical;\n  }\n\n  /**\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\n   * and NOT a token deployed by the bridge).\n   * @param s AppStorage instance.\n   * @return bool true if token is locally originating, false otherwise.\n   */\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\n    // If so, the token is NOT of local origin.\n    if (s.representationToCanonical[_token].domain != 0) {\n      return false;\n    }\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\n    // IS of local origin. Returns true if code exists at `_addr`.\n    return _token.code.length != 0;\n  }\n\n  /**\n   * @notice Get the local asset address for a given canonical key, id, and domain.\n   * @param _key - The hash of canonical id and domain.\n   * @param _id Canonical ID.\n   * @param _domain Canonical domain.\n   * @param s AppStorage instance.\n   * @return address of the the local asset.\n   */\n  function getLocalAsset(\n    bytes32 _key,\n    bytes32 _id,\n    uint32 _domain,\n    AppStorage storage s\n  ) internal view returns (address) {\n    if (_domain == s.domain) {\n      // Token is of local origin\n      return TypeCasts.bytes32ToAddress(_id);\n    } else {\n      // Token is a representation of a token of remote origin\n      return getConfig(_key).representation;\n    }\n  }\n\n  /**\n   * @notice Calculates the hash of canonical ID and domain.\n   * @dev This hash is used as the key for many asset-related mappings.\n   * @param _id Canonical ID.\n   * @param _domain Canonical domain.\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\n   */\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\n    return keccak256(abi.encode(_id, _domain));\n  }\n\n  // ============ Internal: Math ============\n\n  /**\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\n   * That to the `_out` decimals.\n   *\n   * @dev This *ONLY* works for 1:1 assets\n   *\n   * @param _in The decimals of the asset in / amount in\n   * @param _out The decimals of the target asset\n   * @param _amountIn The starting amount for the swap\n   * @param _slippage The slippage allowed for the swap, in BPS\n   * @return uint256 The minimum amount out for the swap\n   */\n  function calculateSlippageBoundary(\n    uint8 _in,\n    uint8 _out,\n    uint256 _amountIn,\n    uint256 _slippage\n  ) internal pure returns (uint256) {\n    if (_amountIn == 0) {\n      return 0;\n    }\n    // Get the min recieved (in same decimals as _amountIn)\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\n    return normalizeDecimals(_in, _out, min);\n  }\n\n  /**\n   * @notice This function translates the _amount in _in decimals\n   * to _out decimals\n   *\n   * @param _in The decimals of the asset in / amount in\n   * @param _out The decimals of the target asset\n   * @param _amount The value to normalize to the `_out` decimals\n   * @return uint256 Normalized decimals.\n   */\n  function normalizeDecimals(\n    uint8 _in,\n    uint8 _out,\n    uint256 _amount\n  ) internal pure returns (uint256) {\n    if (_in == _out) {\n      return _amount;\n    }\n    // Convert this value to the same decimals as _out\n    uint256 normalized;\n    if (_in < _out) {\n      normalized = _amount * (10**(_out - _in));\n    } else {\n      normalized = _amount / (10**(_in - _out));\n    }\n    return normalized;\n  }\n}\n"},"contracts/core/connext/libraries/BridgeMessage.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n// ============ External Imports ============\nimport {TypedMemView} from \"../../../shared/libraries/TypedMemView.sol\";\nimport {TokenId} from \"./TokenId.sol\";\n\nlibrary BridgeMessage {\n  // ============ Libraries ============\n\n  using TypedMemView for bytes;\n  using TypedMemView for bytes29;\n\n  // ============ Enums ============\n\n  // WARNING: do NOT re-write the numbers / order\n  // of message types in an upgrade;\n  // will cause in-flight messages to be mis-interpreted\n  // The Types enum it defines the types of `views` that we use in BridgeMessage. A view\n  // points to a specific part of the memory and can slice bytes out of it. When we give a `type` to a view,\n  // we define the structure of the data it points to, so that we can do easy runtime assertions without\n  // having to fetch the whole data from memory and check for ourselves. In BridgeMessage.sol\n  // the types of `data` we can have are defined in this enum and may belong to different taxonomies.\n  // For example, a `Message` includes a `TokenId` and an Action (a `Transfer`).\n  // The Message is a different TYPE of data than a TokenId or Transfer, as TokenId and Transfer live inside\n  // the message. For that reason, we define them as different data types and we add them to the same enum\n  // for ease of use.\n  enum Types {\n    Invalid, // 0\n    TokenId, // 1\n    Message, // 2\n    Transfer // 3\n  }\n\n  // ============ Constants ============\n\n  uint256 private constant TOKEN_ID_LEN = 36; // 4 bytes domain + 32 bytes id\n  uint256 private constant IDENTIFIER_LEN = 1;\n  uint256 private constant TRANSFER_LEN = 65; // 1 byte identifier + 32 bytes amount + 32 bytes transfer id\n\n  // ============ Modifiers ============\n\n  /**\n   * @notice Asserts a message is of type `_t`\n   * @param _view The message\n   * @param _t The expected type\n   */\n  modifier typeAssert(bytes29 _view, Types _t) {\n    _view.assertType(uint40(_t));\n    _;\n  }\n\n  // ============ Internal Functions ============\n\n  /**\n   * @notice Checks that Action is valid type\n   * @param _action The action\n   * @return TRUE if action is valid\n   */\n  function isValidAction(bytes29 _action) internal pure returns (bool) {\n    return isTransfer(_action);\n  }\n\n  /**\n   * @notice Checks that view is a valid message length\n   * @param _view The bytes string\n   * @return TRUE if message is valid\n   */\n  function isValidMessageLength(bytes29 _view) internal pure returns (bool) {\n    uint256 _len = _view.len();\n    return _len == TOKEN_ID_LEN + TRANSFER_LEN;\n  }\n\n  /**\n   * @notice Formats an action message\n   * @param _tokenId The token ID\n   * @param _action The action\n   * @return The formatted message\n   */\n  function formatMessage(bytes29 _tokenId, bytes29 _action)\n    internal\n    view\n    typeAssert(_tokenId, Types.TokenId)\n    returns (bytes memory)\n  {\n    require(isValidAction(_action), \"!action\");\n    bytes29[] memory _views = new bytes29[](2);\n    _views[0] = _tokenId;\n    _views[1] = _action;\n    return TypedMemView.join(_views);\n  }\n\n  /**\n   * @notice Returns the type of the message\n   * @param _view The message\n   * @return The type of the message\n   */\n  function messageType(bytes29 _view) internal pure returns (Types) {\n    return Types(uint8(_view.typeOf()));\n  }\n\n  /**\n   * @notice Checks that the message is of the specified type\n   * @param _type the type to check for\n   * @param _action The message\n   * @return True if the message is of the specified type\n   */\n  function isType(bytes29 _action, Types _type) internal pure returns (bool) {\n    return actionType(_action) == uint8(_type) && messageType(_action) == _type;\n  }\n\n  /**\n   * @notice Checks that the message is of type Transfer\n   * @param _action The message\n   * @return True if the message is of type Transfer\n   */\n  function isTransfer(bytes29 _action) internal pure returns (bool) {\n    return isType(_action, Types.Transfer);\n  }\n\n  /**\n   * @notice Formats Transfer\n   * @param _amnt The transfer amount\n   * @param _transferId The unique identifier of the transfer\n   * @return\n   */\n  function formatTransfer(uint256 _amnt, bytes32 _transferId) internal pure returns (bytes29) {\n    return abi.encodePacked(Types.Transfer, _amnt, _transferId).ref(uint40(Types.Transfer));\n  }\n\n  /**\n   * @notice Serializes a Token ID struct\n   * @param _tokenId The token id struct\n   * @return The formatted Token ID\n   */\n  function formatTokenId(TokenId memory _tokenId) internal pure returns (bytes29) {\n    return formatTokenId(_tokenId.domain, _tokenId.id);\n  }\n\n  /**\n   * @notice Creates a serialized Token ID from components\n   * @param _domain The domain\n   * @param _id The ID\n   * @return The formatted Token ID\n   */\n  function formatTokenId(uint32 _domain, bytes32 _id) internal pure returns (bytes29) {\n    return abi.encodePacked(_domain, _id).ref(uint40(Types.TokenId));\n  }\n\n  /**\n   * @notice Retrieves the domain from a TokenID\n   * @param _tokenId The message\n   * @return The domain\n   */\n  function domain(bytes29 _tokenId) internal pure typeAssert(_tokenId, Types.TokenId) returns (uint32) {\n    return uint32(_tokenId.indexUint(0, 4));\n  }\n\n  /**\n   * @notice Retrieves the ID from a TokenID\n   * @param _tokenId The message\n   * @return The ID\n   */\n  function id(bytes29 _tokenId) internal pure typeAssert(_tokenId, Types.TokenId) returns (bytes32) {\n    // before = 4 bytes domain\n    return _tokenId.index(4, 32);\n  }\n\n  /**\n   * @notice Retrieves the EVM ID\n   * @param _tokenId The message\n   * @return The EVM ID\n   */\n  function evmId(bytes29 _tokenId) internal pure typeAssert(_tokenId, Types.TokenId) returns (address) {\n    // before = 4 bytes domain + 12 bytes empty to trim for address\n    return _tokenId.indexAddress(16);\n  }\n\n  /**\n   * @notice Retrieves the action identifier from message\n   * @param _message The action\n   * @return The message type\n   */\n  function msgType(bytes29 _message) internal pure returns (uint8) {\n    return uint8(_message.indexUint(TOKEN_ID_LEN, 1));\n  }\n\n  /**\n   * @notice Retrieves the identifier from action\n   * @param _action The action\n   * @return The action type\n   */\n  function actionType(bytes29 _action) internal pure returns (uint8) {\n    return uint8(_action.indexUint(0, 1));\n  }\n\n  /**\n   * @notice Retrieves the amount from a Transfer\n   * @param _transferAction The message\n   * @return The amount\n   */\n  function amnt(bytes29 _transferAction) internal pure returns (uint256) {\n    // before = 1 byte identifier = 1 bytes\n    return _transferAction.indexUint(1, 32);\n  }\n\n  /**\n   * @notice Retrieves the transfer id from a Transfer\n   * @param _transferAction The message\n   * @return The id\n   */\n  function transferId(bytes29 _transferAction) internal pure returns (bytes32) {\n    // before = 1 byte identifier + 32 bytes amount = 33 bytes\n    return _transferAction.index(33, 32);\n  }\n\n  /**\n   * @notice Retrieves the token ID from a Message\n   * @param _message The message\n   * @return The ID\n   */\n  function tokenId(bytes29 _message) internal pure typeAssert(_message, Types.Message) returns (bytes29) {\n    return _message.slice(0, TOKEN_ID_LEN, uint40(Types.TokenId));\n  }\n\n  /**\n   * @notice Retrieves the action data from a Message\n   * @param _message The message\n   * @return The action\n   */\n  function action(bytes29 _message) internal pure typeAssert(_message, Types.Message) returns (bytes29) {\n    uint256 _actionLen = _message.len() - TOKEN_ID_LEN;\n    uint40 _type = uint40(msgType(_message));\n    return _message.slice(TOKEN_ID_LEN, _actionLen, _type);\n  }\n\n  /**\n   * @notice Converts to a Message\n   * @param _message The message\n   * @return The newly typed message\n   */\n  function tryAsMessage(bytes29 _message) internal pure returns (bytes29) {\n    if (isValidMessageLength(_message)) {\n      return _message.castTo(uint40(Types.Message));\n    }\n    return TypedMemView.nullView();\n  }\n\n  /**\n   * @notice Asserts that the message is of type Message\n   * @param _view The message\n   * @return The message\n   */\n  function mustBeMessage(bytes29 _view) internal pure returns (bytes29) {\n    return tryAsMessage(_view).assertValid();\n  }\n}\n"},"contracts/core/connext/libraries/Constants.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nlibrary Constants {\n  // ============= Initial Values =============\n\n  /**\n   * @notice Sets the initial lp fee at 5 bps\n   */\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\n\n  /**\n   * @notice Sets the initial max routers per transfer\n   */\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\n\n  /**\n   * @notice Sets the initial max routers per transfer\n   */\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\n\n  // =============\n\n  // ============= Unchangeable Values =============\n  // ============= Facets\n\n  /**\n   * @notice Reentrancy modifier for diamond\n   */\n  uint256 internal constant NOT_ENTERED = 1;\n\n  /**\n   * @notice Reentrancy modifier for diamond\n   */\n  uint256 internal constant ENTERED = 2;\n\n  /**\n   * @notice Contains hash of empty bytes\n   */\n  bytes32 internal constant EMPTY_HASH = keccak256(\"\");\n\n  /**\n   * @notice Denominator for BPS values\n   */\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\n\n  /**\n   * @notice Value for delay used on governance\n   */\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\n\n  /**\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\n   * executing calldata (see `_executeCalldata` method).\n   */\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\n\n  /**\n   * @notice Portal referral code\n   */\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\n\n  // ============= ConnextPriceOracle\n  /**\n   * @notice Valid period for a price delivered by the price oracle\n   */\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\n\n  /**\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\n   */\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\n\n  /**\n   * @notice Defalt decimals values are normalized to\n   */\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\n\n  /**\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\n   */\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\n\n  /**\n   * @notice Valid deadline extension used when swapping (1hr)\n   */\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\n\n  // ============= Swaps\n  /**\n   * @notice the precision all pools tokens will be converted to\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\n   *\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\n   * we do not have pools supporting this number of token, allowing a larger value leaves\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\n   * default of 32 and what we will realistically host in pools.\n   */\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\n\n  /**\n   * @notice the precision all pools tokens will be converted to\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\n   */\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\n\n  /**\n   * @notice the denominator used to calculate admin and LP fees. For example, an\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\n   */\n  uint256 public constant FEE_DENOMINATOR = 1e10;\n\n  /**\n   * @notice Max swap fee is 1% or 100bps of each swap\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\n   */\n  uint256 public constant MAX_SWAP_FEE = 1e8;\n\n  /**\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\n   * users but only on the earnings of LPs\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\n   */\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\n\n  /**\n   * @notice constant value used as max loop limit\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\n   */\n  uint256 public constant MAX_LOOP_LIMIT = 256;\n\n  // Constant value used as max delay time for removing swap after disabled\n  uint256 internal constant REMOVE_DELAY = 7 days;\n\n  /**\n   * @notice constant values used in ramping A calculations\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\n   */\n  uint256 public constant A_PRECISION = 100;\n  uint256 public constant MAX_A = 10**6;\n  uint256 public constant MAX_A_CHANGE = 2;\n  uint256 public constant MIN_RAMP_TIME = 14 days;\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\n}\n"},"contracts/core/connext/libraries/LibConnextStorage.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {IStableSwap} from \"../interfaces/IStableSwap.sol\";\nimport {IConnectorManager} from \"../../../messaging/interfaces/IConnectorManager.sol\";\nimport {SwapUtils} from \"./SwapUtils.sol\";\nimport {TokenId} from \"./TokenId.sol\";\n\n/**\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\n * the contract storage layout is not impacted.\n *\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\n */\n\n// ============= Enum =============\n\n/// @notice Enum representing address role\n// Returns uint\n// None     - 0\n// Router   - 1\n// Watcher  - 2\n// Admin    - 3\nenum Role {\n  None,\n  RouterAdmin,\n  Watcher,\n  Admin\n}\n\n/**\n * @notice Enum representing status of destination transfer\n * @dev Status is only assigned on the destination domain, will always be \"none\" for the\n * origin domains\n * @return uint - Index of value in enum\n */\nenum DestinationTransferStatus {\n  None, // 0\n  Reconciled, // 1\n  Executed, // 2\n  Completed // 3 - executed + reconciled\n}\n\n/**\n * @notice These are the parameters that will remain constant between the\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\n * @property to - The account that receives funds, in the event of a crosschain call,\n * will receive funds if the call fails.\n *\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\n * @param to - The address you are sending funds (and potentially data) to\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\n * a user takes 1% slippage, this is expressed as 1_000)\n * @param originSender - The msg.sender of the xcall\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\n */\nstruct TransferInfo {\n  uint32 originDomain;\n  uint32 destinationDomain;\n  uint32 canonicalDomain;\n  address to;\n  address delegate;\n  bool receiveLocal;\n  bytes callData;\n  uint256 slippage;\n  address originSender;\n  uint256 bridgedAmt;\n  uint256 normalizedIn;\n  uint256 nonce;\n  bytes32 canonicalId;\n}\n\n/**\n * @notice\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\n * @param routers - The routers who you are sending the funds on behalf of.\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\n * for the signed transfer ID.\n * @param sequencer - The sequencer who assigned the router path to this transfer.\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\n * for the path that was signed.\n */\nstruct ExecuteArgs {\n  TransferInfo params;\n  address[] routers;\n  bytes[] routerSignatures;\n  address sequencer;\n  bytes sequencerSignature;\n}\n\n/**\n * @notice Contains configs for each router\n * @param approved Whether the router is allowlisted, settable by admin\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\n * @param routerOwners The address that can update the `recipient`\n * @param proposedRouterOwners Owner candidates\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\n */\nstruct RouterConfig {\n  bool approved;\n  bool portalApproved;\n  address owner;\n  address recipient;\n  address proposed;\n  uint256 proposedTimestamp;\n}\n\n/**\n * @notice Contains configurations for tokens\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\n * either be representation or adopted address passed in).\n *\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\n * asset and swaps must be removed, and then they can be readded\n *\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\n * originally deployed on this chain), this MUST map to address(0).\n * @param representationDecimals Decimals of minted asset on this domain\n * @param adopted Address of adopted asset on this domain\n * @param adoptedDecimals Decimals of adopted asset on this domain\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\n * @param approval Allowed assets\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\n * @param custodied Custodied balance by address\n */\nstruct TokenConfig {\n  address representation;\n  uint8 representationDecimals;\n  address adopted;\n  uint8 adoptedDecimals;\n  address adoptedToLocalExternalPools;\n  bool approval;\n  uint256 cap;\n  uint256 custodied;\n}\n\nstruct AppStorage {\n  //\n  // 0\n  bool initialized;\n  //\n  // Connext\n  //\n  // 1\n  uint256 LIQUIDITY_FEE_NUMERATOR;\n  /**\n   * @notice The local address that is custodying relayer fees\n   */\n  // 2\n  address relayerFeeVault;\n  /**\n   * @notice Nonce for the contract, used to keep unique transfer ids.\n   * @dev Assigned at first interaction (xcall on origin domain).\n   */\n  // 3\n  uint256 nonce;\n  /**\n   * @notice The domain this contract exists on.\n   * @dev Must match the domain identifier, which is distinct from the \"chainId\".\n   */\n  // 4\n  uint32 domain;\n  /**\n   * @notice Mapping of adopted to canonical asset information.\n   */\n  // 5\n  mapping(address => TokenId) adoptedToCanonical;\n  /**\n   * @notice Mapping of representation to canonical asset information.\n   */\n  // 6\n  mapping(address => TokenId) representationToCanonical;\n  /**\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\n   */\n  // 7\n  mapping(bytes32 => TokenConfig) tokenConfigs;\n  /**\n   * @notice Mapping to track transfer status on destination domain\n   */\n  // 8\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\n  /**\n   * @notice Mapping holding router address that provided fast liquidity.\n   */\n  // 9\n  mapping(bytes32 => address[]) routedTransfers;\n  /**\n   * @notice Mapping of router to available balance of an asset.\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\n   * this domain (the local asset).\n   */\n  // 10\n  mapping(address => mapping(address => uint256)) routerBalances;\n  /**\n   * @notice Mapping of approved relayers\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\n   */\n  // 11\n  mapping(address => bool) approvedRelayers;\n  /**\n   * @notice The max amount of routers a payment can be routed through.\n   */\n  // 12\n  uint256 maxRoutersPerTransfer;\n  /**\n   * @notice Stores a mapping of transfer id to slippage overrides.\n   */\n  // 13\n  mapping(bytes32 => uint256) slippage;\n  /**\n   * @notice Stores a mapping of transfer id to receive local overrides.\n   */\n  // 14\n  mapping(bytes32 => bool) receiveLocalOverride;\n  /**\n   * @notice Stores a mapping of remote routers keyed on domains.\n   * @dev Addresses are cast to bytes32.\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\n   * the remotes interface.\n   */\n  // 15\n  mapping(uint32 => bytes32) remotes;\n  //\n  // ProposedOwnable\n  //\n  // 17\n  address _proposed;\n  // 18\n  uint256 _proposedOwnershipTimestamp;\n  // 19\n  bool _routerAllowlistRemoved;\n  // 20\n  uint256 _routerAllowlistTimestamp;\n  /**\n   * @notice Stores a mapping of address to Roles\n   * @dev returns uint representing the enum Role value\n   */\n  // 21\n  mapping(address => Role) roles;\n  //\n  // RouterFacet\n  //\n  // 22\n  mapping(address => RouterConfig) routerConfigs;\n  //\n  // ReentrancyGuard\n  //\n  // 23\n  uint256 _status;\n  // 24\n  uint256 _xcallStatus;\n  //\n  // StableSwap\n  //\n  /**\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\n   * Struct storing data responsible for automatic market maker functionalities. In order to\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\n   */\n  // 25\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\n  /**\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\n   */\n  // 26\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\n  /**\n   * The address of an existing LPToken contract to use as a target\n   * this target must be the address which connext deployed on this chain.\n   */\n  // 27\n  address lpTokenTargetAddress;\n  /**\n   * @notice Stores whether or not bribing, AMMs, have been paused.\n   */\n  // 28\n  bool _paused;\n  //\n  // AavePortals\n  //\n  /**\n   * @notice Address of Aave Pool contract.\n   */\n  // 29\n  address aavePool;\n  /**\n   * @notice Fee percentage numerator for using Portal liquidity.\n   * @dev Assumes the same basis points as the liquidity fee.\n   */\n  // 30\n  uint256 aavePortalFeeNumerator;\n  /**\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\n   */\n  // 31\n  mapping(bytes32 => uint256) portalDebt;\n  /**\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\n   */\n  // 32\n  mapping(bytes32 => uint256) portalFeeDebt;\n  /**\n   * @notice Mapping of approved sequencers\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\n   * for the fast liquidity route.\n   */\n  // 33\n  mapping(address => bool) approvedSequencers;\n  /**\n   * @notice Remote connection manager for xapp.\n   */\n  // 34\n  IConnectorManager xAppConnectionManager;\n}\n\nlibrary LibConnextStorage {\n  function connextStorage() internal pure returns (AppStorage storage ds) {\n    assembly {\n      ds.slot := 0\n    }\n  }\n}\n"},"contracts/core/connext/libraries/LibDiamond.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.17;\n\n/******************************************************************************\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\nimport {IDiamondCut} from \"../interfaces/IDiamondCut.sol\";\n\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\n// The loupe functions are required by the EIP2535 Diamonds standard\n\nlibrary LibDiamond {\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n  struct FacetAddressAndPosition {\n    address facetAddress;\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n  }\n\n  struct FacetFunctionSelectors {\n    bytes4[] functionSelectors;\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n  }\n\n  struct DiamondStorage {\n    // maps function selector to the facet address and\n    // the position of the selector in the facetFunctionSelectors.selectors array\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n    // maps facet addresses to function selectors\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n    // facet addresses\n    address[] facetAddresses;\n    // Used to query if a contract implements an interface.\n    // Used to implement ERC-165.\n    mapping(bytes4 => bool) supportedInterfaces;\n    // owner of the contract\n    address contractOwner;\n    // hash of proposed facets => acceptance time\n    mapping(bytes32 => uint256) acceptanceTimes;\n    // acceptance delay for upgrading facets\n    uint256 acceptanceDelay;\n  }\n\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n    bytes32 position = DIAMOND_STORAGE_POSITION;\n    assembly {\n      ds.slot := position\n    }\n  }\n\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n  function setContractOwner(address _newOwner) internal {\n    DiamondStorage storage ds = diamondStorage();\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\n    ds.contractOwner = _newOwner;\n  }\n\n  function contractOwner() internal view returns (address contractOwner_) {\n    contractOwner_ = diamondStorage().contractOwner;\n  }\n\n  function acceptanceDelay() internal view returns (uint256) {\n    return diamondStorage().acceptanceDelay;\n  }\n\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\n    return diamondStorage().acceptanceTimes[_key];\n  }\n\n  function enforceIsContractOwner() internal view {\n    require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: !contract owner\");\n  }\n\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\n\n  function proposeDiamondCut(\n    IDiamondCut.FacetCut[] memory _diamondCut,\n    address _init,\n    bytes memory _calldata\n  ) internal {\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\n    // included is performed in `diamondCut`, where there is already a loop over facets.\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\n\n    DiamondStorage storage ds = diamondStorage();\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\n  }\n\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n  function rescindDiamondCut(\n    IDiamondCut.FacetCut[] memory _diamondCut,\n    address _init,\n    bytes memory _calldata\n  ) internal {\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\n    // period or befor the delay elpases\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\n  }\n\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n  // Internal function version of diamondCut\n  function diamondCut(\n    IDiamondCut.FacetCut[] memory _diamondCut,\n    address _init,\n    bytes memory _calldata\n  ) internal {\n    DiamondStorage storage ds = diamondStorage();\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\n    if (ds.facetAddresses.length != 0) {\n      uint256 time = ds.acceptanceTimes[key];\n      require(time != 0 && time <= block.timestamp, \"LibDiamond: delay not elapsed\");\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\n      // without going through a proposal window\n\n      // NOTE: the only time this will not be set to 0 is when there are no\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\n      // for example).\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\n      // there is no way to update the facet selector mapping to call `diamondCut`.\n      // Avoiding setting the empty value will save gas on the initial deployment.\n      delete ds.acceptanceTimes[key];\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\n    uint256 len = _diamondCut.length;\n    for (uint256 facetIndex; facetIndex < len; ) {\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n      if (action == IDiamondCut.FacetCutAction.Add) {\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n      } else {\n        revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n      }\n\n      unchecked {\n        ++facetIndex;\n      }\n    }\n    emit DiamondCut(_diamondCut, _init, _calldata);\n    initializeDiamondCut(_init, _calldata);\n  }\n\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n    require(_functionSelectors.length != 0, \"LibDiamondCut: No selectors in facet to cut\");\n    DiamondStorage storage ds = diamondStorage();\n    require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n    // add new facet address if it does not exist\n    if (selectorPosition == 0) {\n      addFacet(ds, _facetAddress);\n    }\n    uint256 len = _functionSelectors.length;\n    for (uint256 selectorIndex; selectorIndex < len; ) {\n      bytes4 selector = _functionSelectors[selectorIndex];\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n      require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n      addFunction(ds, selector, selectorPosition, _facetAddress);\n      selectorPosition++;\n\n      unchecked {\n        ++selectorIndex;\n      }\n    }\n  }\n\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n    uint256 len = _functionSelectors.length;\n    require(len != 0, \"LibDiamondCut: No selectors in facet to cut\");\n    DiamondStorage storage ds = diamondStorage();\n    require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n    // add new facet address if it does not exist\n    if (selectorPosition == 0) {\n      addFacet(ds, _facetAddress);\n    }\n    for (uint256 selectorIndex; selectorIndex < len; ) {\n      bytes4 selector = _functionSelectors[selectorIndex];\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n      require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n      removeFunction(ds, oldFacetAddress, selector);\n      addFunction(ds, selector, selectorPosition, _facetAddress);\n      selectorPosition++;\n\n      unchecked {\n        ++selectorIndex;\n      }\n    }\n  }\n\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n    require(_functionSelectors.length != 0, \"LibDiamondCut: No selectors in facet to cut\");\n    DiamondStorage storage ds = diamondStorage();\n    // get the propose and cut selectors -- can never remove these\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\n    // if function does not exist then do nothing and return\n    require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n    uint256 len = _functionSelectors.length;\n    for (uint256 selectorIndex; selectorIndex < len; ) {\n      bytes4 selector = _functionSelectors[selectorIndex];\n      require(selector != proposeSelector && selector != cutSelector, \"LibDiamondCut: Cannot remove cut selectors\");\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n      removeFunction(ds, oldFacetAddress, selector);\n\n      unchecked {\n        ++selectorIndex;\n      }\n    }\n  }\n\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n    enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n    ds.facetAddresses.push(_facetAddress);\n  }\n\n  function addFunction(\n    DiamondStorage storage ds,\n    bytes4 _selector,\n    uint96 _selectorPosition,\n    address _facetAddress\n  ) internal {\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n  }\n\n  function removeFunction(\n    DiamondStorage storage ds,\n    address _facetAddress,\n    bytes4 _selector\n  ) internal {\n    require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n    // an immutable function is a function defined directly in a diamond\n    require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n    // replace selector with last selector, then delete last selector\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n    // if not the same then replace _selector with lastSelector\n    if (selectorPosition != lastSelectorPosition) {\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n    }\n    // delete the last selector\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n    delete ds.selectorToFacetAndPosition[_selector];\n\n    // if no more selectors for facet address then delete the facet address\n    if (lastSelectorPosition == 0) {\n      // replace facet address with last facet address and delete last facet address\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n      if (facetAddressPosition != lastFacetAddressPosition) {\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n      }\n      ds.facetAddresses.pop();\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n    }\n  }\n\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n    if (_init == address(0)) {\n      require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n    } else {\n      require(_calldata.length != 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n      if (_init != address(this)) {\n        enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n      }\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\n      if (!success) {\n        if (error.length != 0) {\n          // bubble up the error\n          revert(string(error));\n        } else {\n          revert(\"LibDiamondCut: _init function reverted\");\n        }\n      }\n    }\n  }\n\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n    require(_contract.code.length != 0, _errorMessage);\n  }\n}\n"},"contracts/core/connext/libraries/MathUtils.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\n/**\n * @title MathUtils library\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\n * differences between two uint256.\n */\nlibrary MathUtils {\n  /**\n   * @notice Compares a and b and returns true if the difference between a and b\n   *         is less than 1 or equal to each other.\n   * @param a uint256 to compare with\n   * @param b uint256 to compare with\n   * @return True if the difference between a and b is less than 1 or equal,\n   *         otherwise return false\n   */\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\n    return (difference(a, b) < 1 + 1); // instead of <=1\n  }\n\n  /**\n   * @notice Calculates absolute difference between a and b\n   * @param a uint256 to compare with\n   * @param b uint256 to compare with\n   * @return Difference between a and b\n   */\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\n    if (a > b) {\n      return a - b;\n    }\n    return b - a;\n  }\n}\n"},"contracts/core/connext/libraries/SwapUtils.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {SafeERC20, IERC20} from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport {LPToken} from \"../helpers/LPToken.sol\";\n\nimport {AmplificationUtils} from \"./AmplificationUtils.sol\";\nimport {MathUtils} from \"./MathUtils.sol\";\nimport {AssetLogic} from \"./AssetLogic.sol\";\nimport {Constants} from \"./Constants.sol\";\n\n/**\n * @title SwapUtils library\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\n * Admin functions should be protected within contracts using this library.\n */\nlibrary SwapUtils {\n  using SafeERC20 for IERC20;\n  using MathUtils for uint256;\n\n  /*** EVENTS ***/\n\n  event TokenSwap(\n    bytes32 indexed key,\n    address indexed buyer,\n    uint256 tokensSold,\n    uint256 tokensBought,\n    uint128 soldId,\n    uint128 boughtId\n  );\n  event AddLiquidity(\n    bytes32 indexed key,\n    address indexed provider,\n    uint256[] tokenAmounts,\n    uint256[] fees,\n    uint256 invariant,\n    uint256 lpTokenSupply\n  );\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\n  event RemoveLiquidityOne(\n    bytes32 indexed key,\n    address indexed provider,\n    uint256 lpTokenAmount,\n    uint256 lpTokenSupply,\n    uint256 boughtId,\n    uint256 tokensBought\n  );\n  event RemoveLiquidityImbalance(\n    bytes32 indexed key,\n    address indexed provider,\n    uint256[] tokenAmounts,\n    uint256[] fees,\n    uint256 invariant,\n    uint256 lpTokenSupply\n  );\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\n\n  struct Swap {\n    // variables around the ramp management of A,\n    // the amplification coefficient * n ** (n - 1)\n    // see Curve stableswap paper for details\n    bytes32 key;\n    uint256 initialA;\n    uint256 futureA;\n    uint256 initialATime;\n    uint256 futureATime;\n    // fee calculation\n    uint256 swapFee;\n    uint256 adminFee;\n    LPToken lpToken;\n    // contract references for all tokens being pooled\n    IERC20[] pooledTokens;\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\n    uint256[] tokenPrecisionMultipliers;\n    // the pool balance of each token, in the token's precision\n    // the contract's actual token balance might differ\n    uint256[] balances;\n    // the admin fee balance of each token, in the token's precision\n    uint256[] adminFees;\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\n    bool disabled;\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\n    uint256 removeTime;\n  }\n\n  // Struct storing variables used in calculations in the\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\n  struct CalculateWithdrawOneTokenDYInfo {\n    uint256 d0;\n    uint256 d1;\n    uint256 newY;\n    uint256 feePerToken;\n    uint256 preciseA;\n  }\n\n  // Struct storing variables used in calculations in the\n  // {add,remove}Liquidity functions to avoid stack too deep errors\n  struct ManageLiquidityInfo {\n    uint256 d0;\n    uint256 d1;\n    uint256 d2;\n    uint256 preciseA;\n    LPToken lpToken;\n    uint256 totalSupply;\n    uint256[] balances;\n    uint256[] multipliers;\n  }\n\n  /*** VIEW & PURE FUNCTIONS ***/\n\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\n    return AmplificationUtils._getAPrecise(self);\n  }\n\n  /**\n   * @notice Calculate the dy, the amount of selected token that user receives and\n   * the fee of withdrawing in one token\n   * @param tokenAmount the amount to withdraw in the pool's precision\n   * @param tokenIndex which token will be withdrawn\n   * @param self Swap struct to read from\n   * @return the amount of token user will receive\n   */\n  function calculateWithdrawOneToken(\n    Swap storage self,\n    uint256 tokenAmount,\n    uint8 tokenIndex\n  ) internal view returns (uint256) {\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\n      self,\n      tokenAmount,\n      tokenIndex,\n      self.lpToken.totalSupply()\n    );\n    return availableTokenAmount;\n  }\n\n  function _calculateWithdrawOneToken(\n    Swap storage self,\n    uint256 tokenAmount,\n    uint8 tokenIndex,\n    uint256 totalSupply\n  ) private view returns (uint256, uint256) {\n    uint256 dy;\n    uint256 newY;\n    uint256 currentY;\n\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\n\n    // dy_0 (without fees)\n    // dy, dy_0 - dy\n\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\n\n    return (dy, dySwapFee);\n  }\n\n  /**\n   * @notice Calculate the dy of withdrawing in one token\n   * @param self Swap struct to read from\n   * @param tokenIndex which token will be withdrawn\n   * @param tokenAmount the amount to withdraw in the pools precision\n   * @return the d and the new y after withdrawing one token\n   */\n  function calculateWithdrawOneTokenDY(\n    Swap storage self,\n    uint8 tokenIndex,\n    uint256 tokenAmount,\n    uint256 totalSupply\n  )\n    internal\n    view\n    returns (\n      uint256,\n      uint256,\n      uint256\n    )\n  {\n    // Get the current D, then solve the stableswap invariant\n    // y_i for D - tokenAmount\n    uint256[] memory xp = _xp(self);\n\n    require(tokenIndex < xp.length, \"index out of range\");\n\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\n    v.preciseA = _getAPrecise(self);\n    v.d0 = getD(xp, v.preciseA);\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\n\n    require(tokenAmount <= xp[tokenIndex], \"exceeds available\");\n\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\n\n    uint256[] memory xpReduced = new uint256[](xp.length);\n\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\n    uint256 len = xp.length;\n    for (uint256 i; i < len; ) {\n      uint256 xpi = xp[i];\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\n      xpReduced[i] =\n        xpi -\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\n          Constants.FEE_DENOMINATOR);\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\n\n    return (dy, v.newY, xp[tokenIndex]);\n  }\n\n  /**\n   * @notice Calculate the price of a token in the pool with given\n   * precision-adjusted balances and a particular D.\n   *\n   * @dev This is accomplished via solving the invariant iteratively.\n   * See the StableSwap paper and Curve.fi implementation for further details.\n   *\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\n   * x_1**2 + b*x_1 = c\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\n   *\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\n   * @param tokenIndex Index of token we are calculating for.\n   * @param xp a precision-adjusted set of pool balances. Array should be\n   * the same cardinality as the pool.\n   * @param d the stableswap invariant\n   * @return the price of the token, in the same precision as in xp\n   */\n  function getYD(\n    uint256 a,\n    uint8 tokenIndex,\n    uint256[] memory xp,\n    uint256 d\n  ) internal pure returns (uint256) {\n    uint256 numTokens = xp.length;\n    require(tokenIndex < numTokens, \"Token not found\");\n\n    uint256 c = d;\n    uint256 s;\n    uint256 nA = a * numTokens;\n\n    for (uint256 i; i < numTokens; ) {\n      if (i != tokenIndex) {\n        s += xp[i];\n        c = (c * d) / (xp[i] * numTokens);\n        // If we were to protect the division loss we would have to keep the denominator separate\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\n        // c = c * D * D * D * ... overflow!\n      }\n\n      unchecked {\n        ++i;\n      }\n    }\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\n\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\n    uint256 yPrev;\n    // Select d as the starting point of the Newton method. Because y < D\n    // D is the best option as the starting point in case the pool is very imbalanced.\n    uint256 y = d;\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\n      yPrev = y;\n      y = ((y * y) + c) / ((y * 2) + b - d);\n      if (y.within1(yPrev)) {\n        return y;\n      }\n\n      unchecked {\n        ++i;\n      }\n    }\n    revert(\"Approximation did not converge\");\n  }\n\n  /**\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\n   * as the pool.\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\n   * See the StableSwap paper for details\n   * @return the invariant, at the precision of the pool\n   */\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\n    uint256 numTokens = xp.length;\n    uint256 s;\n    for (uint256 i; i < numTokens; ) {\n      s += xp[i];\n\n      unchecked {\n        ++i;\n      }\n    }\n    if (s == 0) {\n      return 0;\n    }\n\n    uint256 prevD;\n    uint256 d = s;\n    uint256 nA = a * numTokens;\n\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\n      uint256 dP = d;\n      for (uint256 j; j < numTokens; ) {\n        dP = (dP * d) / (xp[j] * numTokens);\n        // If we were to protect the division loss we would have to keep the denominator separate\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\n        // dP = dP * D * D * D * ... overflow!\n\n        unchecked {\n          ++j;\n        }\n      }\n      prevD = d;\n      d =\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\n      if (d.within1(prevD)) {\n        return d;\n      }\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\n    // function which does not rely on D.\n    revert(\"D does not converge\");\n  }\n\n  /**\n   * @notice Given a set of balances and precision multipliers, return the\n   * precision-adjusted balances.\n   *\n   * @param balances an array of token balances, in their native precisions.\n   * These should generally correspond with pooled tokens.\n   *\n   * @param precisionMultipliers an array of multipliers, corresponding to\n   * the amounts in the balances array. When multiplied together they\n   * should yield amounts at the pool's precision.\n   *\n   * @return an array of amounts \"scaled\" to the pool's precision\n   */\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\n    internal\n    pure\n    returns (uint256[] memory)\n  {\n    uint256 numTokens = balances.length;\n    require(numTokens == precisionMultipliers.length, \"mismatch multipliers\");\n    uint256[] memory xp = new uint256[](numTokens);\n    for (uint256 i; i < numTokens; ) {\n      xp[i] = balances[i] * precisionMultipliers[i];\n\n      unchecked {\n        ++i;\n      }\n    }\n    return xp;\n  }\n\n  /**\n   * @notice Return the precision-adjusted balances of all tokens in the pool\n   * @param self Swap struct to read from\n   * @return the pool balances \"scaled\" to the pool's precision, allowing\n   * them to be more easily compared.\n   */\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\n  }\n\n  /**\n   * @notice Get the virtual price, to help calculate profit\n   * @param self Swap struct to read from\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\n   */\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\n    uint256 d = getD(_xp(self), _getAPrecise(self));\n    LPToken lpToken = self.lpToken;\n    uint256 supply = lpToken.totalSupply();\n    if (supply != 0) {\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\n    }\n    return 0;\n  }\n\n  /**\n   * @notice Calculate the new balances of the tokens given the indexes of the token\n   * that is swapped from (FROM) and the token that is swapped to (TO).\n   * This function is used as a helper function to calculate how much TO token\n   * the user should receive on swap.\n   *\n   * @param preciseA precise form of amplification coefficient\n   * @param tokenIndexFrom index of FROM token\n   * @param tokenIndexTo index of TO token\n   * @param x the new total amount of FROM token\n   * @param xp balances of the tokens in the pool\n   * @return the amount of TO token that should remain in the pool\n   */\n  function getY(\n    uint256 preciseA,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 x,\n    uint256[] memory xp\n  ) internal pure returns (uint256) {\n    uint256 numTokens = xp.length;\n    require(tokenIndexFrom != tokenIndexTo, \"compare token to itself\");\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \"token not found\");\n\n    uint256 d = getD(xp, preciseA);\n    uint256 c = d;\n    uint256 s;\n    uint256 nA = numTokens * preciseA;\n\n    uint256 _x;\n    for (uint256 i; i < numTokens; ) {\n      if (i == tokenIndexFrom) {\n        _x = x;\n      } else if (i != tokenIndexTo) {\n        _x = xp[i];\n      } else {\n        unchecked {\n          ++i;\n        }\n        continue;\n      }\n      s += _x;\n      c = (c * d) / (_x * numTokens);\n      // If we were to protect the division loss we would have to keep the denominator separate\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\n      // c = c * D * D * D * ... overflow!\n\n      unchecked {\n        ++i;\n      }\n    }\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\n    uint256 yPrev;\n    uint256 y = d;\n\n    // iterative approximation\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\n      yPrev = y;\n      y = ((y * y) + c) / ((y * 2) + b - d);\n      if (y.within1(yPrev)) {\n        return y;\n      }\n\n      unchecked {\n        ++i;\n      }\n    }\n    revert(\"Approximation did not converge\");\n  }\n\n  /**\n   * @notice Externally calculates a swap between two tokens.\n   * @param self Swap struct to read from\n   * @param tokenIndexFrom the token to sell\n   * @param tokenIndexTo the token to buy\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\n   * use the amount that gets transferred after the fee.\n   * @return dy the number of tokens the user will get\n   */\n  function calculateSwap(\n    Swap storage self,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dx\n  ) internal view returns (uint256 dy) {\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\n  }\n\n  /**\n   * @notice Externally calculates a swap between two tokens.\n   * @param self Swap struct to read from\n   * @param tokenIndexFrom the token to sell\n   * @param tokenIndexTo the token to buy\n   * @param dy the number of tokens to buy.\n   * @return dx the number of tokens the user have to transfer + fee\n   */\n  function calculateSwapInv(\n    Swap storage self,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dy\n  ) internal view returns (uint256 dx) {\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\n  }\n\n  /**\n   * @notice Internally calculates a swap between two tokens.\n   *\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\n   * using the token contracts.\n   *\n   * @param self Swap struct to read from\n   * @param tokenIndexFrom the token to sell\n   * @param tokenIndexTo the token to buy\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\n   * use the amount that gets transferred after the fee.\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\n   */\n  function _calculateSwap(\n    Swap storage self,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dx,\n    uint256[] memory balances\n  ) internal view returns (uint256 dy, uint256 dyFee) {\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\n    uint256[] memory xp = _xp(balances, multipliers);\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \"index out of range\");\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\n    dy = xp[tokenIndexTo] - y - 1;\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\n  }\n\n  /**\n   * @notice Internally calculates a swap between two tokens.\n   *\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\n   * using the token contracts.\n   *\n   * @param self Swap struct to read from\n   * @param tokenIndexFrom the token to sell\n   * @param tokenIndexTo the token to buy\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\n   * use the amount that gets transferred after the fee.\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\n   */\n  function _calculateSwapInv(\n    Swap storage self,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dy,\n    uint256[] memory balances\n  ) internal view returns (uint256 dx, uint256 dxFee) {\n    require(tokenIndexFrom != tokenIndexTo, \"compare token to itself\");\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\n    uint256[] memory xp = _xp(balances, multipliers);\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \"index out of range\");\n\n    uint256 a = _getAPrecise(self);\n    uint256 d0 = getD(xp, a);\n\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\n    dx = (x + 1) - xp[tokenIndexFrom];\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\n  }\n\n  /**\n   * @notice A simple method to calculate amount of each underlying\n   * tokens that is returned upon burning given amount of\n   * LP tokens\n   *\n   * @param amount the amount of LP tokens that would to be burned on\n   * withdrawal\n   * @return array of amounts of tokens user will receive\n   */\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\n  }\n\n  function _calculateRemoveLiquidity(\n    uint256[] memory balances,\n    uint256 amount,\n    uint256 totalSupply\n  ) internal pure returns (uint256[] memory) {\n    require(amount <= totalSupply, \"exceed total supply\");\n\n    uint256 numBalances = balances.length;\n    uint256[] memory amounts = new uint256[](numBalances);\n\n    for (uint256 i; i < numBalances; ) {\n      amounts[i] = (balances[i] * amount) / totalSupply;\n\n      unchecked {\n        ++i;\n      }\n    }\n    return amounts;\n  }\n\n  /**\n   * @notice A simple method to calculate prices from deposits or\n   * withdrawals, excluding fees but including slippage. This is\n   * helpful as an input into the various \"min\" parameters on calls\n   * to fight front-running\n   *\n   * @dev This shouldn't be used outside frontends for user estimates.\n   *\n   * @param self Swap struct to read from\n   * @param amounts an array of token amounts to deposit or withdrawal,\n   * corresponding to pooledTokens. The amount should be in each\n   * pooled token's native precision. If a token charges a fee on transfers,\n   * use the amount that gets transferred after the fee.\n   * @param deposit whether this is a deposit or a withdrawal\n   * @return if deposit was true, total amount of lp token that will be minted and if\n   * deposit was false, total amount of lp token that will be burned\n   */\n  function calculateTokenAmount(\n    Swap storage self,\n    uint256[] calldata amounts,\n    bool deposit\n  ) internal view returns (uint256) {\n    uint256[] memory balances = self.balances;\n    uint256 numBalances = balances.length;\n    require(amounts.length == numBalances, \"invalid length of amounts\");\n\n    uint256 a = _getAPrecise(self);\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\n\n    uint256 d0 = getD(_xp(balances, multipliers), a);\n    for (uint256 i; i < numBalances; ) {\n      if (deposit) {\n        balances[i] = balances[i] + amounts[i];\n      } else {\n        balances[i] = balances[i] - amounts[i];\n      }\n\n      unchecked {\n        ++i;\n      }\n    }\n    uint256 d1 = getD(_xp(balances, multipliers), a);\n    uint256 totalSupply = self.lpToken.totalSupply();\n\n    if (deposit) {\n      return ((d1 - d0) * totalSupply) / d0;\n    } else {\n      return ((d0 - d1) * totalSupply) / d0;\n    }\n  }\n\n  /**\n   * @notice return accumulated amount of admin fees of the token with given index\n   * @param self Swap struct to read from\n   * @param index Index of the pooled token\n   * @return admin balance in the token's precision\n   */\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\n    require(index < self.pooledTokens.length, \"index out of range\");\n    return self.adminFees[index];\n  }\n\n  /**\n   * @notice internal helper function to calculate fee per token multiplier used in\n   * swap fee calculations\n   * @param swapFee swap fee for the tokens\n   * @param numTokens number of tokens pooled\n   */\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\n  }\n\n  /*** STATE MODIFYING FUNCTIONS ***/\n\n  /**\n   * @notice swap two tokens in the pool\n   * @param self Swap struct to read from and write to\n   * @param tokenIndexFrom the token the user wants to sell\n   * @param tokenIndexTo the token the user wants to buy\n   * @param dx the amount of tokens the user wants to sell\n   * @param minDy the min amount the user would like to receive, or revert.\n   * @return amount of token user received on swap\n   */\n  function swap(\n    Swap storage self,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dx,\n    uint256 minDy\n  ) internal returns (uint256) {\n    require(!self.disabled, \"disabled pool\");\n    {\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\n      require(dx <= tokenFrom.balanceOf(msg.sender), \"swap more than you own\");\n      // Reverts for fee on transfer\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\n    }\n\n    uint256 dy;\n    uint256 dyFee;\n    uint256[] memory balances = self.balances;\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\n    require(dy >= minDy, \"dy < minDy\");\n\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\n      Constants.FEE_DENOMINATOR /\n      self.tokenPrecisionMultipliers[tokenIndexTo];\n\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\n    if (dyAdminFee != 0) {\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\n    }\n\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\n\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\n\n    return dy;\n  }\n\n  /**\n   * @notice swap two tokens in the pool\n   * @param self Swap struct to read from and write to\n   * @param tokenIndexFrom the token the user wants to sell\n   * @param tokenIndexTo the token the user wants to buy\n   * @param dy the amount of tokens the user wants to buy\n   * @param maxDx the max amount the user would like to send.\n   * @return amount of token user have to transfer on swap\n   */\n  function swapOut(\n    Swap storage self,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dy,\n    uint256 maxDx\n  ) internal returns (uint256) {\n    require(!self.disabled, \"disabled pool\");\n    require(dy <= self.balances[tokenIndexTo], \">pool balance\");\n\n    uint256 dx;\n    uint256 dxFee;\n    uint256[] memory balances = self.balances;\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\n    require(dx <= maxDx, \"dx > maxDx\");\n\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\n      Constants.FEE_DENOMINATOR /\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\n\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\n    if (dxAdminFee != 0) {\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\n    }\n\n    {\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\n      require(dx <= tokenFrom.balanceOf(msg.sender), \"more than you own\");\n      // Reverts for fee on transfer\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\n    }\n\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\n\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\n\n    return dx;\n  }\n\n  /**\n   * @notice swap two tokens in the pool internally\n   * @param self Swap struct to read from and write to\n   * @param tokenIndexFrom the token the user wants to sell\n   * @param tokenIndexTo the token the user wants to buy\n   * @param dx the amount of tokens the user wants to sell\n   * @param minDy the min amount the user would like to receive, or revert.\n   * @return amount of token user received on swap\n   */\n  function swapInternal(\n    Swap storage self,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dx,\n    uint256 minDy\n  ) internal returns (uint256) {\n    require(!self.disabled, \"disabled pool\");\n    require(dx <= self.balances[tokenIndexFrom], \"more than pool balance\");\n\n    uint256 dy;\n    uint256 dyFee;\n    uint256[] memory balances = self.balances;\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\n    require(dy >= minDy, \"dy < minDy\");\n\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\n      Constants.FEE_DENOMINATOR /\n      self.tokenPrecisionMultipliers[tokenIndexTo];\n\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\n\n    if (dyAdminFee != 0) {\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\n    }\n\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\n\n    return dy;\n  }\n\n  /**\n   * @notice Should get exact amount out of AMM for asset put in\n   */\n  function swapInternalOut(\n    Swap storage self,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dy,\n    uint256 maxDx\n  ) internal returns (uint256) {\n    require(!self.disabled, \"disabled pool\");\n    require(dy <= self.balances[tokenIndexTo], \"more than pool balance\");\n\n    uint256 dx;\n    uint256 dxFee;\n    uint256[] memory balances = self.balances;\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\n    require(dx <= maxDx, \"dx > maxDx\");\n\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\n      Constants.FEE_DENOMINATOR /\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\n\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\n\n    if (dxAdminFee != 0) {\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\n    }\n\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\n\n    return dx;\n  }\n\n  /**\n   * @notice Add liquidity to the pool\n   * @param self Swap struct to read from and write to\n   * @param amounts the amounts of each token to add, in their native precision\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\n   * should mint, otherwise revert. Handy for front-running mitigation\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\n   * @return amount of LP token user received\n   */\n  function addLiquidity(\n    Swap storage self,\n    uint256[] memory amounts,\n    uint256 minToMint\n  ) internal returns (uint256) {\n    require(!self.disabled, \"disabled pool\");\n\n    uint256 numTokens = self.pooledTokens.length;\n    require(amounts.length == numTokens, \"mismatch pooled tokens\");\n\n    // current state\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\n      0,\n      0,\n      0,\n      _getAPrecise(self),\n      self.lpToken,\n      0,\n      self.balances,\n      self.tokenPrecisionMultipliers\n    );\n    v.totalSupply = v.lpToken.totalSupply();\n    if (v.totalSupply != 0) {\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\n    }\n\n    uint256[] memory newBalances = new uint256[](numTokens);\n\n    for (uint256 i; i < numTokens; ) {\n      require(v.totalSupply != 0 || amounts[i] != 0, \"!supply all tokens\");\n\n      // Transfer tokens first to see if a fee was charged on transfer\n      if (amounts[i] != 0) {\n        IERC20 token = self.pooledTokens[i];\n        // Reverts for fee on transfer\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\n      }\n\n      newBalances[i] = v.balances[i] + amounts[i];\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    // invariant after change\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\n    require(v.d1 > v.d0, \"D should increase\");\n\n    // updated to reflect fees and calculate the user's LP tokens\n    v.d2 = v.d1;\n    uint256[] memory fees = new uint256[](numTokens);\n\n    if (v.totalSupply != 0) {\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\n      for (uint256 i; i < numTokens; ) {\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\n        self.balances[i] = newBalances[i] - adminFee;\n        self.adminFees[i] = self.adminFees[i] + adminFee;\n        newBalances[i] = newBalances[i] - fees[i];\n\n        unchecked {\n          ++i;\n        }\n      }\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\n    } else {\n      // the initial depositor doesn't pay fees\n      self.balances = newBalances;\n    }\n\n    uint256 toMint;\n    if (v.totalSupply == 0) {\n      toMint = v.d1;\n    } else {\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\n    }\n\n    require(toMint >= minToMint, \"mint < min\");\n\n    // mint the user's LP tokens\n    v.lpToken.mint(msg.sender, toMint);\n\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\n\n    return toMint;\n  }\n\n  /**\n   * @notice Burn LP tokens to remove liquidity from the pool.\n   * @dev Liquidity can always be removed, even when the pool is paused.\n   * @param self Swap struct to read from and write to\n   * @param amount the amount of LP tokens to burn\n   * @param minAmounts the minimum amounts of each token in the pool\n   * acceptable for this burn. Useful as a front-running mitigation\n   * @return amounts of tokens the user received\n   */\n  function removeLiquidity(\n    Swap storage self,\n    uint256 amount,\n    uint256[] calldata minAmounts\n  ) internal returns (uint256[] memory) {\n    LPToken lpToken = self.lpToken;\n    require(amount <= lpToken.balanceOf(msg.sender), \">LP.balanceOf\");\n    uint256 numTokens = self.pooledTokens.length;\n    require(minAmounts.length == numTokens, \"mismatch poolTokens\");\n\n    uint256[] memory balances = self.balances;\n    uint256 totalSupply = lpToken.totalSupply();\n\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\n\n    uint256 numAmounts = amounts.length;\n    for (uint256 i; i < numAmounts; ) {\n      require(amounts[i] >= minAmounts[i], \"amounts[i] < minAmounts[i]\");\n      self.balances[i] = balances[i] - amounts[i];\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    lpToken.burnFrom(msg.sender, amount);\n\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\n\n    return amounts;\n  }\n\n  /**\n   * @notice Remove liquidity from the pool all in one token.\n   * @param self Swap struct to read from and write to\n   * @param tokenAmount the amount of the lp tokens to burn\n   * @param tokenIndex the index of the token you want to receive\n   * @param minAmount the minimum amount to withdraw, otherwise revert\n   * @return amount chosen token that user received\n   */\n  function removeLiquidityOneToken(\n    Swap storage self,\n    uint256 tokenAmount,\n    uint8 tokenIndex,\n    uint256 minAmount\n  ) internal returns (uint256) {\n    LPToken lpToken = self.lpToken;\n\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \">LP.balanceOf\");\n    uint256 numTokens = self.pooledTokens.length;\n    require(tokenIndex < numTokens, \"not found\");\n\n    uint256 totalSupply = lpToken.totalSupply();\n\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\n\n    require(dy >= minAmount, \"dy < minAmount\");\n\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\n    if (adminFee != 0) {\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\n    }\n    lpToken.burnFrom(msg.sender, tokenAmount);\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\n\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\n\n    return dy;\n  }\n\n  /**\n   * @notice Remove liquidity from the pool, weighted differently than the\n   * pool's current balances.\n   *\n   * @param self Swap struct to read from and write to\n   * @param amounts how much of each token to withdraw\n   * @param maxBurnAmount the max LP token provider is willing to pay to\n   * remove liquidity. Useful as a front-running mitigation.\n   * @return actual amount of LP tokens burned in the withdrawal\n   */\n  function removeLiquidityImbalance(\n    Swap storage self,\n    uint256[] memory amounts,\n    uint256 maxBurnAmount\n  ) internal returns (uint256) {\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\n      0,\n      0,\n      0,\n      _getAPrecise(self),\n      self.lpToken,\n      0,\n      self.balances,\n      self.tokenPrecisionMultipliers\n    );\n    v.totalSupply = v.lpToken.totalSupply();\n\n    uint256 numTokens = self.pooledTokens.length;\n    uint256 numAmounts = amounts.length;\n    require(numAmounts == numTokens, \"mismatch pool tokens\");\n\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \">LP.balanceOf\");\n\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\n    uint256[] memory fees = new uint256[](numTokens);\n    {\n      uint256[] memory balances1 = new uint256[](numTokens);\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\n      for (uint256 i; i < numTokens; ) {\n        require(v.balances[i] >= amounts[i], \"withdraw more than available\");\n\n        unchecked {\n          balances1[i] = v.balances[i] - amounts[i];\n          ++i;\n        }\n      }\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\n\n      for (uint256 i; i < numTokens; ) {\n        {\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\n          uint256 difference = idealBalance.difference(balances1[i]);\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\n        }\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\n        self.balances[i] = balances1[i] - adminFee;\n        self.adminFees[i] = self.adminFees[i] + adminFee;\n        balances1[i] = balances1[i] - fees[i];\n\n        unchecked {\n          ++i;\n        }\n      }\n\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\n    }\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\n    require(tokenAmount != 0, \"!zero amount\");\n    tokenAmount = tokenAmount + 1;\n\n    require(tokenAmount <= maxBurnAmount, \"tokenAmount > maxBurnAmount\");\n\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\n\n    for (uint256 i; i < numTokens; ) {\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\n\n    return tokenAmount;\n  }\n\n  /**\n   * @notice withdraw all admin fees to a given address\n   * @param self Swap struct to withdraw fees from\n   * @param to Address to send the fees to\n   */\n  function withdrawAdminFees(Swap storage self, address to) internal {\n    uint256 numTokens = self.pooledTokens.length;\n    for (uint256 i; i < numTokens; ) {\n      IERC20 token = self.pooledTokens[i];\n      uint256 balance = self.adminFees[i];\n      if (balance != 0) {\n        delete self.adminFees[i];\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\n      }\n\n      unchecked {\n        ++i;\n      }\n    }\n  }\n\n  /**\n   * @notice Sets the admin fee\n   * @dev adminFee cannot be higher than 100% of the swap fee\n   * @param self Swap struct to update\n   * @param newAdminFee new admin fee to be applied on future transactions\n   */\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \"too high\");\n    self.adminFee = newAdminFee;\n\n    emit NewAdminFee(self.key, newAdminFee);\n  }\n\n  /**\n   * @notice update the swap fee\n   * @dev fee cannot be higher than 1% of each swap\n   * @param self Swap struct to update\n   * @param newSwapFee new swap fee to be applied on future transactions\n   */\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \"too high\");\n    self.swapFee = newSwapFee;\n\n    emit NewSwapFee(self.key, newSwapFee);\n  }\n\n  /**\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\n   * initialized and tokens have been added).\n   * @return bool true if this stableswap pool is valid, false if not.\n   */\n  function exists(Swap storage self) internal view returns (bool) {\n    return !self.disabled && self.pooledTokens.length != 0;\n  }\n}\n"},"contracts/core/connext/libraries/SwapUtilsExternal.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {SafeERC20, IERC20} from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport {LPToken} from \"../helpers/LPToken.sol\";\n\nimport {MathUtils} from \"./MathUtils.sol\";\nimport {AssetLogic} from \"./AssetLogic.sol\";\nimport {Constants} from \"./Constants.sol\";\n\n/**\n * @title SwapUtilsExternal library\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\n * Admin functions should be protected within contracts using this library.\n */\nlibrary SwapUtilsExternal {\n  using SafeERC20 for IERC20;\n  using MathUtils for uint256;\n\n  /*** EVENTS ***/\n\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\n  event AddLiquidity(\n    address indexed provider,\n    uint256[] tokenAmounts,\n    uint256[] fees,\n    uint256 invariant,\n    uint256 lpTokenSupply\n  );\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\n  event RemoveLiquidityOne(\n    address indexed provider,\n    uint256 lpTokenAmount,\n    uint256 lpTokenSupply,\n    uint256 boughtId,\n    uint256 tokensBought\n  );\n  event RemoveLiquidityImbalance(\n    address indexed provider,\n    uint256[] tokenAmounts,\n    uint256[] fees,\n    uint256 invariant,\n    uint256 lpTokenSupply\n  );\n  event NewAdminFee(uint256 newAdminFee);\n  event NewSwapFee(uint256 newSwapFee);\n\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\n  event StopRampA(uint256 currentA, uint256 time);\n\n  struct Swap {\n    // variables around the ramp management of A,\n    // the amplification coefficient * n ** (n - 1)\n    // see Curve stableswap paper for details\n    uint256 initialA;\n    uint256 futureA;\n    uint256 initialATime;\n    uint256 futureATime;\n    // fee calculation\n    uint256 swapFee;\n    uint256 adminFee;\n    LPToken lpToken;\n    // contract references for all tokens being pooled\n    IERC20[] pooledTokens;\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\n    uint256[] tokenPrecisionMultipliers;\n    // the pool balance of each token, in the token's precision\n    // the contract's actual token balance might differ\n    uint256[] balances;\n    // the admin fee balance of each token, in the token's precision\n    uint256[] adminFees;\n  }\n\n  // Struct storing variables used in calculations in the\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\n  struct CalculateWithdrawOneTokenDYInfo {\n    uint256 d0;\n    uint256 d1;\n    uint256 newY;\n    uint256 feePerToken;\n    uint256 preciseA;\n  }\n\n  // Struct storing variables used in calculations in the\n  // {add,remove}Liquidity functions to avoid stack too deep errors\n  struct ManageLiquidityInfo {\n    uint256 d0;\n    uint256 d1;\n    uint256 d2;\n    uint256 preciseA;\n    LPToken lpToken;\n    uint256 totalSupply;\n    uint256[] balances;\n    uint256[] multipliers;\n  }\n\n  /*** VIEW & PURE FUNCTIONS ***/\n  /**\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\n   * @dev See the StableSwap paper for details\n   * @param self Swap struct to read from\n   * @return A parameter\n   */\n  function getA(Swap storage self) external view returns (uint256) {\n    return _getAPrecise(self) / Constants.A_PRECISION;\n  }\n\n  /**\n   * @notice Return A in its raw precision\n   * @dev See the StableSwap paper for details\n   * @param self Swap struct to read from\n   * @return A parameter in its raw precision form\n   */\n  function getAPrecise(Swap storage self) external view returns (uint256) {\n    return _getAPrecise(self);\n  }\n\n  /**\n   * @notice Return A in its raw precision\n   * @dev See the StableSwap paper for details\n   * @param self Swap struct to read from\n   * @return currentA A parameter in its raw precision form\n   */\n  function _getAPrecise(Swap storage self) internal view returns (uint256 currentA) {\n    uint256 t1 = self.futureATime; // time when ramp is finished\n    currentA = self.futureA; // final A value when ramp is finished\n    uint256 a0 = self.initialA; // initial A value when ramp is started\n\n    if (a0 != currentA && block.timestamp < t1) {\n      uint256 t0 = self.initialATime; // time when ramp is started\n      assembly {\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\n      }\n    }\n  }\n\n  /**\n   * @notice Calculate the dy, the amount of selected token that user receives and\n   * the fee of withdrawing in one token\n   * @param tokenAmount the amount to withdraw in the pool's precision\n   * @param tokenIndex which token will be withdrawn\n   * @param self Swap struct to read from\n   * @return the amount of token user will receive\n   */\n  function calculateWithdrawOneToken(\n    Swap storage self,\n    uint256 tokenAmount,\n    uint8 tokenIndex\n  ) external view returns (uint256) {\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\n      self,\n      tokenAmount,\n      tokenIndex,\n      self.lpToken.totalSupply()\n    );\n    return availableTokenAmount;\n  }\n\n  function _calculateWithdrawOneToken(\n    Swap storage self,\n    uint256 tokenAmount,\n    uint8 tokenIndex,\n    uint256 totalSupply\n  ) private view returns (uint256, uint256) {\n    uint256 dy;\n    uint256 newY;\n    uint256 currentY;\n\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\n\n    // dy_0 (without fees)\n    // dy, dy_0 - dy\n\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\n\n    return (dy, dySwapFee);\n  }\n\n  /**\n   * @notice Calculate the dy of withdrawing in one token\n   * @param self Swap struct to read from\n   * @param tokenIndex which token will be withdrawn\n   * @param tokenAmount the amount to withdraw in the pools precision\n   * @return the d and the new y after withdrawing one token\n   */\n  function calculateWithdrawOneTokenDY(\n    Swap storage self,\n    uint8 tokenIndex,\n    uint256 tokenAmount,\n    uint256 totalSupply\n  )\n    public\n    view\n    returns (\n      uint256,\n      uint256,\n      uint256\n    )\n  {\n    // Get the current D, then solve the stableswap invariant\n    // y_i for D - tokenAmount\n    uint256[] memory xp = _xp(self);\n\n    require(tokenIndex < xp.length, \"index out of range\");\n\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\n    v.preciseA = _getAPrecise(self);\n    v.d0 = getD(xp, v.preciseA);\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\n\n    require(tokenAmount <= xp[tokenIndex], \"exceeds available\");\n\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\n\n    uint256[] memory xpReduced = new uint256[](xp.length);\n\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\n\n    uint256 len = xp.length;\n    for (uint256 i; i < len; ) {\n      uint256 xpi = xp[i];\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\n      xpReduced[i] =\n        xpi -\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\n          Constants.FEE_DENOMINATOR);\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\n\n    return (dy, v.newY, xp[tokenIndex]);\n  }\n\n  /**\n   * @notice Calculate the price of a token in the pool with given\n   * precision-adjusted balances and a particular D.\n   *\n   * @dev This is accomplished via solving the invariant iteratively.\n   * See the StableSwap paper and Curve.fi implementation for further details.\n   *\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\n   * x_1**2 + b*x_1 = c\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\n   *\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\n   * @param tokenIndex Index of token we are calculating for.\n   * @param xp a precision-adjusted set of pool balances. Array should be\n   * the same cardinality as the pool.\n   * @param d the stableswap invariant\n   * @return the price of the token, in the same precision as in xp\n   */\n  function getYD(\n    uint256 a,\n    uint8 tokenIndex,\n    uint256[] memory xp,\n    uint256 d\n  ) public pure returns (uint256) {\n    uint256 numTokens = xp.length;\n    require(tokenIndex < numTokens, \"Token not found\");\n\n    uint256 c = d;\n    uint256 s;\n    uint256 nA = a * numTokens;\n\n    for (uint256 i; i < numTokens; ) {\n      if (i != tokenIndex) {\n        s += xp[i];\n        c = (c * d) / (xp[i] * numTokens);\n        // If we were to protect the division loss we would have to keep the denominator separate\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\n        // c = c * D * D * D * ... overflow!\n      }\n\n      unchecked {\n        ++i;\n      }\n    }\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\n\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\n    uint256 yPrev;\n    uint256 y = d;\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\n      yPrev = y;\n      y = ((y * y) + c) / ((y * 2) + b - d);\n      if (y.within1(yPrev)) {\n        return y;\n      }\n\n      unchecked {\n        ++i;\n      }\n    }\n    revert(\"Approximation did not converge\");\n  }\n\n  /**\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\n   * as the pool.\n   * @param a the amplification coefficient * n ** (n - 1) in Constants.A_PRECISION.\n   * See the StableSwap paper for details\n   * @return the invariant, at the precision of the pool\n   */\n  function getD(uint256[] memory xp, uint256 a) public pure returns (uint256) {\n    uint256 numTokens = xp.length;\n    uint256 s;\n    for (uint256 i; i < numTokens; ) {\n      s += xp[i];\n\n      unchecked {\n        ++i;\n      }\n    }\n    if (s == 0) {\n      return 0;\n    }\n\n    uint256 prevD;\n    uint256 d = s;\n    uint256 nA = a * numTokens;\n\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\n      uint256 dP = d;\n      for (uint256 j; j < numTokens; ) {\n        dP = (dP * d) / (xp[j] * numTokens);\n        // If we were to protect the division loss we would have to keep the denominator separate\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\n        // dP = dP * D * D * D * ... overflow!\n\n        unchecked {\n          ++j;\n        }\n      }\n      prevD = d;\n      d =\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\n      if (d.within1(prevD)) {\n        return d;\n      }\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\n    // function which does not rely on D.\n    revert(\"D does not converge\");\n  }\n\n  /**\n   * @notice Given a set of balances and precision multipliers, return the\n   * precision-adjusted balances.\n   *\n   * @param balances an array of token balances, in their native precisions.\n   * These should generally correspond with pooled tokens.\n   *\n   * @param precisionMultipliers an array of multipliers, corresponding to\n   * the amounts in the balances array. When multiplied together they\n   * should yield amounts at the pool's precision.\n   *\n   * @return an array of amounts \"scaled\" to the pool's precision\n   */\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\n    internal\n    pure\n    returns (uint256[] memory)\n  {\n    uint256 numTokens = balances.length;\n    require(numTokens == precisionMultipliers.length, \"mismatch multipliers\");\n    uint256[] memory xp = new uint256[](numTokens);\n    for (uint256 i; i < numTokens; ) {\n      xp[i] = balances[i] * precisionMultipliers[i];\n\n      unchecked {\n        ++i;\n      }\n    }\n    return xp;\n  }\n\n  /**\n   * @notice Return the precision-adjusted balances of all tokens in the pool\n   * @param self Swap struct to read from\n   * @return the pool balances \"scaled\" to the pool's precision, allowing\n   * them to be more easily compared.\n   */\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\n  }\n\n  /**\n   * @notice Get the virtual price, to help calculate profit\n   * @param self Swap struct to read from\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\n   */\n  function getVirtualPrice(Swap storage self) external view returns (uint256) {\n    uint256 d = getD(_xp(self), _getAPrecise(self));\n    LPToken lpToken = self.lpToken;\n    uint256 supply = lpToken.totalSupply();\n    if (supply != 0) {\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\n    }\n    return 0;\n  }\n\n  /**\n   * @notice Calculate the new balances of the tokens given the indexes of the token\n   * that is swapped from (FROM) and the token that is swapped to (TO).\n   * This function is used as a helper function to calculate how much TO token\n   * the user should receive on swap.\n   *\n   * @param preciseA precise form of amplification coefficient\n   * @param tokenIndexFrom index of FROM token\n   * @param tokenIndexTo index of TO token\n   * @param x the new total amount of FROM token\n   * @param xp balances of the tokens in the pool\n   * @return the amount of TO token that should remain in the pool\n   */\n  function getY(\n    uint256 preciseA,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 x,\n    uint256[] memory xp\n  ) public pure returns (uint256) {\n    uint256 numTokens = xp.length;\n    require(tokenIndexFrom != tokenIndexTo, \"compare token to itself\");\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \"token not found\");\n\n    uint256 d = getD(xp, preciseA);\n    uint256 c = d;\n    uint256 s;\n    uint256 nA = numTokens * preciseA;\n\n    uint256 _x;\n    for (uint256 i; i < numTokens; ) {\n      if (i == tokenIndexFrom) {\n        _x = x;\n      } else if (i != tokenIndexTo) {\n        _x = xp[i];\n      } else {\n        unchecked {\n          ++i;\n        }\n        continue;\n      }\n      s += _x;\n      c = (c * d) / (_x * numTokens);\n      // If we were to protect the division loss we would have to keep the denominator separate\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\n      // c = c * D * D * D * ... overflow!\n\n      unchecked {\n        ++i;\n      }\n    }\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\n    uint256 yPrev;\n    uint256 y = d;\n\n    // iterative approximation\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\n      yPrev = y;\n      y = ((y * y) + c) / ((y * 2) + b - d);\n      if (y.within1(yPrev)) {\n        return y;\n      }\n\n      unchecked {\n        ++i;\n      }\n    }\n    revert(\"Approximation did not converge\");\n  }\n\n  /**\n   * @notice Externally calculates a swap between two tokens.\n   * @param self Swap struct to read from\n   * @param tokenIndexFrom the token to sell\n   * @param tokenIndexTo the token to buy\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\n   * use the amount that gets transferred after the fee.\n   * @return dy the number of tokens the user will get\n   */\n  function calculateSwap(\n    Swap storage self,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dx\n  ) external view returns (uint256 dy) {\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\n  }\n\n  /**\n   * @notice Externally calculates a swap between two tokens.\n   * @param self Swap struct to read from\n   * @param tokenIndexFrom the token to sell\n   * @param tokenIndexTo the token to buy\n   * @param dy the number of tokens to buy.\n   * @return dx the number of tokens the user have to transfer + fee\n   */\n  function calculateSwapInv(\n    Swap storage self,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dy\n  ) external view returns (uint256 dx) {\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\n  }\n\n  /**\n   * @notice Internally calculates a swap between two tokens.\n   *\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\n   * using the token contracts.\n   *\n   * @param self Swap struct to read from\n   * @param tokenIndexFrom the token to sell\n   * @param tokenIndexTo the token to buy\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\n   * use the amount that gets transferred after the fee.\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\n   */\n  function _calculateSwap(\n    Swap storage self,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dx,\n    uint256[] memory balances\n  ) internal view returns (uint256 dy, uint256 dyFee) {\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\n    uint256[] memory xp = _xp(balances, multipliers);\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \"index out of range\");\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\n    dy = xp[tokenIndexTo] - y - 1;\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\n  }\n\n  /**\n   * @notice Internally calculates a swap between two tokens.\n   *\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\n   * using the token contracts.\n   *\n   * @param self Swap struct to read from\n   * @param tokenIndexFrom the token to sell\n   * @param tokenIndexTo the token to buy\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\n   * use the amount that gets transferred after the fee.\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\n   */\n  function _calculateSwapInv(\n    Swap storage self,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dy,\n    uint256[] memory balances\n  ) internal view returns (uint256 dx, uint256 dxFee) {\n    require(tokenIndexFrom != tokenIndexTo, \"compare token to itself\");\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\n    uint256[] memory xp = _xp(balances, multipliers);\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \"index out of range\");\n\n    uint256 a = _getAPrecise(self);\n    uint256 d0 = getD(xp, a);\n\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\n    dx = x - xp[tokenIndexFrom] + 1;\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\n  }\n\n  /**\n   * @notice A simple method to calculate amount of each underlying\n   * tokens that is returned upon burning given amount of\n   * LP tokens\n   *\n   * @param amount the amount of LP tokens that would to be burned on\n   * withdrawal\n   * @return array of amounts of tokens user will receive\n   */\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) external view returns (uint256[] memory) {\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\n  }\n\n  function _calculateRemoveLiquidity(\n    uint256[] memory balances,\n    uint256 amount,\n    uint256 totalSupply\n  ) internal pure returns (uint256[] memory) {\n    require(amount <= totalSupply, \"exceed total supply\");\n\n    uint256 numBalances = balances.length;\n    uint256[] memory amounts = new uint256[](numBalances);\n\n    for (uint256 i; i < numBalances; ) {\n      amounts[i] = (balances[i] * amount) / totalSupply;\n\n      unchecked {\n        ++i;\n      }\n    }\n    return amounts;\n  }\n\n  /**\n   * @notice A simple method to calculate prices from deposits or\n   * withdrawals, excluding fees but including slippage. This is\n   * helpful as an input into the various \"min\" parameters on calls\n   * to fight front-running\n   *\n   * @dev This shouldn't be used outside frontends for user estimates.\n   *\n   * @param self Swap struct to read from\n   * @param amounts an array of token amounts to deposit or withdrawal,\n   * corresponding to pooledTokens. The amount should be in each\n   * pooled token's native precision. If a token charges a fee on transfers,\n   * use the amount that gets transferred after the fee.\n   * @param deposit whether this is a deposit or a withdrawal\n   * @return if deposit was true, total amount of lp token that will be minted and if\n   * deposit was false, total amount of lp token that will be burned\n   */\n  function calculateTokenAmount(\n    Swap storage self,\n    uint256[] calldata amounts,\n    bool deposit\n  ) external view returns (uint256) {\n    uint256 a = _getAPrecise(self);\n    uint256[] memory balances = self.balances;\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\n\n    uint256 numBalances = balances.length;\n    uint256 d0 = getD(_xp(balances, multipliers), a);\n    for (uint256 i; i < numBalances; ) {\n      if (deposit) {\n        balances[i] = balances[i] + amounts[i];\n      } else {\n        balances[i] = balances[i] - amounts[i];\n      }\n\n      unchecked {\n        ++i;\n      }\n    }\n    uint256 d1 = getD(_xp(balances, multipliers), a);\n    uint256 totalSupply = self.lpToken.totalSupply();\n\n    if (deposit) {\n      return ((d1 - d0) * totalSupply) / d0;\n    } else {\n      return ((d0 - d1) * totalSupply) / d0;\n    }\n  }\n\n  /**\n   * @notice return accumulated amount of admin fees of the token with given index\n   * @param self Swap struct to read from\n   * @param index Index of the pooled token\n   * @return admin balance in the token's precision\n   */\n  function getAdminBalance(Swap storage self, uint256 index) external view returns (uint256) {\n    require(index < self.pooledTokens.length, \"index out of range\");\n    return self.adminFees[index];\n  }\n\n  /**\n   * @notice internal helper function to calculate fee per token multiplier used in\n   * swap fee calculations\n   * @param swapFee swap fee for the tokens\n   * @param numTokens number of tokens pooled\n   */\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\n  }\n\n  /*** STATE MODIFYING FUNCTIONS ***/\n\n  /**\n   * @notice swap two tokens in the pool\n   * @param self Swap struct to read from and write to\n   * @param tokenIndexFrom the token the user wants to sell\n   * @param tokenIndexTo the token the user wants to buy\n   * @param dx the amount of tokens the user wants to sell\n   * @param minDy the min amount the user would like to receive, or revert.\n   * @return amount of token user received on swap\n   */\n  function swap(\n    Swap storage self,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dx,\n    uint256 minDy\n  ) external returns (uint256) {\n    {\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\n      require(dx <= tokenFrom.balanceOf(msg.sender), \"swap more than you own\");\n      // Reverts for fee on transfer\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\n    }\n\n    uint256 dy;\n    uint256 dyFee;\n    uint256[] memory balances = self.balances;\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\n    require(dy >= minDy, \"dy < minDy\");\n\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\n      Constants.FEE_DENOMINATOR /\n      self.tokenPrecisionMultipliers[tokenIndexTo];\n\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\n    if (dyAdminFee != 0) {\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\n    }\n\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\n\n    emit TokenSwap(msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\n\n    return dy;\n  }\n\n  /**\n   * @notice swap two tokens in the pool\n   * @param self Swap struct to read from and write to\n   * @param tokenIndexFrom the token the user wants to sell\n   * @param tokenIndexTo the token the user wants to buy\n   * @param dy the amount of tokens the user wants to buy\n   * @param maxDx the max amount the user would like to send.\n   * @return amount of token user have to transfer on swap\n   */\n  function swapOut(\n    Swap storage self,\n    uint8 tokenIndexFrom,\n    uint8 tokenIndexTo,\n    uint256 dy,\n    uint256 maxDx\n  ) external returns (uint256) {\n    require(dy <= self.balances[tokenIndexTo], \">pool balance\");\n\n    uint256 dx;\n    uint256 dxFee;\n    uint256[] memory balances = self.balances;\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\n    require(dx <= maxDx, \"dx > maxDx\");\n\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\n      Constants.FEE_DENOMINATOR /\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\n\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\n    if (dxAdminFee != 0) {\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\n    }\n\n    {\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\n      require(dx <= tokenFrom.balanceOf(msg.sender), \"more than you own\");\n      // Reverts for fee on transfer\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\n    }\n\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\n\n    emit TokenSwap(msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\n\n    return dx;\n  }\n\n  /**\n   * @notice Add liquidity to the pool\n   * @param self Swap struct to read from and write to\n   * @param amounts the amounts of each token to add, in their native precision\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\n   * should mint, otherwise revert. Handy for front-running mitigation\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\n   * @return amount of LP token user received\n   */\n  function addLiquidity(\n    Swap storage self,\n    uint256[] memory amounts,\n    uint256 minToMint\n  ) external returns (uint256) {\n    uint256 numTokens = self.pooledTokens.length;\n    require(amounts.length == numTokens, \"mismatch pooled tokens\");\n\n    // current state\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\n      0,\n      0,\n      0,\n      _getAPrecise(self),\n      self.lpToken,\n      0,\n      self.balances,\n      self.tokenPrecisionMultipliers\n    );\n    v.totalSupply = v.lpToken.totalSupply();\n    if (v.totalSupply != 0) {\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\n    }\n\n    uint256[] memory newBalances = new uint256[](numTokens);\n\n    for (uint256 i; i < numTokens; ) {\n      require(v.totalSupply != 0 || amounts[i] != 0, \"!supply all tokens\");\n\n      // Transfer tokens first to see if a fee was charged on transfer\n      if (amounts[i] != 0) {\n        IERC20 token = self.pooledTokens[i];\n        // Reverts if fee on transfer\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\n      }\n\n      newBalances[i] = v.balances[i] + amounts[i];\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    // invariant after change\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\n    require(v.d1 > v.d0, \"D should increase\");\n\n    // updated to reflect fees and calculate the user's LP tokens\n    v.d2 = v.d1;\n    uint256[] memory fees = new uint256[](numTokens);\n\n    if (v.totalSupply != 0) {\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\n      for (uint256 i; i < numTokens; ) {\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\n        self.balances[i] = newBalances[i] - adminFee;\n        self.adminFees[i] = self.adminFees[i] + adminFee;\n        newBalances[i] = newBalances[i] - fees[i];\n\n        unchecked {\n          ++i;\n        }\n      }\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\n    } else {\n      // the initial depositor doesn't pay fees\n      self.balances = newBalances;\n    }\n\n    uint256 toMint;\n    if (v.totalSupply == 0) {\n      toMint = v.d1;\n    } else {\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\n    }\n\n    require(toMint >= minToMint, \"mint < min\");\n\n    // mint the user's LP tokens\n    v.lpToken.mint(msg.sender, toMint);\n\n    emit AddLiquidity(msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\n\n    return toMint;\n  }\n\n  /**\n   * @notice Burn LP tokens to remove liquidity from the pool.\n   * @dev Liquidity can always be removed, even when the pool is paused.\n   * @param self Swap struct to read from and write to\n   * @param amount the amount of LP tokens to burn\n   * @param minAmounts the minimum amounts of each token in the pool\n   * acceptable for this burn. Useful as a front-running mitigation\n   * @return amounts of tokens the user received\n   */\n  function removeLiquidity(\n    Swap storage self,\n    uint256 amount,\n    uint256[] calldata minAmounts\n  ) external returns (uint256[] memory) {\n    LPToken lpToken = self.lpToken;\n    require(amount <= lpToken.balanceOf(msg.sender), \">LP.balanceOf\");\n    uint256 numTokens = self.pooledTokens.length;\n    require(minAmounts.length == numTokens, \"mismatch poolTokens\");\n\n    uint256[] memory balances = self.balances;\n    uint256 totalSupply = lpToken.totalSupply();\n\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\n\n    uint256 numAmounts = amounts.length;\n    for (uint256 i; i < numAmounts; ) {\n      require(amounts[i] >= minAmounts[i], \"amounts[i] < minAmounts[i]\");\n      self.balances[i] = balances[i] - amounts[i];\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    lpToken.burnFrom(msg.sender, amount);\n\n    emit RemoveLiquidity(msg.sender, amounts, totalSupply - amount);\n\n    return amounts;\n  }\n\n  /**\n   * @notice Remove liquidity from the pool all in one token.\n   * @param self Swap struct to read from and write to\n   * @param tokenAmount the amount of the lp tokens to burn\n   * @param tokenIndex the index of the token you want to receive\n   * @param minAmount the minimum amount to withdraw, otherwise revert\n   * @return amount chosen token that user received\n   */\n  function removeLiquidityOneToken(\n    Swap storage self,\n    uint256 tokenAmount,\n    uint8 tokenIndex,\n    uint256 minAmount\n  ) external returns (uint256) {\n    LPToken lpToken = self.lpToken;\n\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \">LP.balanceOf\");\n    uint256 numTokens = self.pooledTokens.length;\n    require(tokenIndex < numTokens, \"not found\");\n\n    uint256 totalSupply = lpToken.totalSupply();\n\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\n\n    require(dy >= minAmount, \"dy < minAmount\");\n\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\n    if (adminFee != 0) {\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\n    }\n    lpToken.burnFrom(msg.sender, tokenAmount);\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\n\n    emit RemoveLiquidityOne(msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\n\n    return dy;\n  }\n\n  /**\n   * @notice Remove liquidity from the pool, weighted differently than the\n   * pool's current balances.\n   *\n   * @param self Swap struct to read from and write to\n   * @param amounts how much of each token to withdraw\n   * @param maxBurnAmount the max LP token provider is willing to pay to\n   * remove liquidity. Useful as a front-running mitigation.\n   * @return actual amount of LP tokens burned in the withdrawal\n   */\n  function removeLiquidityImbalance(\n    Swap storage self,\n    uint256[] memory amounts,\n    uint256 maxBurnAmount\n  ) external returns (uint256) {\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\n      0,\n      0,\n      0,\n      _getAPrecise(self),\n      self.lpToken,\n      0,\n      self.balances,\n      self.tokenPrecisionMultipliers\n    );\n    v.totalSupply = v.lpToken.totalSupply();\n\n    uint256 numTokens = self.pooledTokens.length;\n    uint256 numAmounts = amounts.length;\n    require(numAmounts == numTokens, \"mismatch pool tokens\");\n\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \">LP.balanceOf\");\n\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\n    uint256[] memory fees = new uint256[](numTokens);\n    {\n      uint256[] memory balances1 = new uint256[](numTokens);\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\n      for (uint256 i; i < numTokens; ) {\n        require(v.balances[i] >= amounts[i], \"withdraw more than available\");\n\n        unchecked {\n          balances1[i] = v.balances[i] - amounts[i];\n          ++i;\n        }\n      }\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\n\n      for (uint256 i; i < numTokens; ) {\n        {\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\n          uint256 difference = idealBalance.difference(balances1[i]);\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\n        }\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\n        self.balances[i] = balances1[i] - adminFee;\n        self.adminFees[i] = self.adminFees[i] + adminFee;\n        balances1[i] = balances1[i] - fees[i];\n\n        unchecked {\n          ++i;\n        }\n      }\n\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\n    }\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\n    require(tokenAmount != 0, \"!zero amount\");\n    tokenAmount = tokenAmount + 1;\n\n    require(tokenAmount <= maxBurnAmount, \"tokenAmount > maxBurnAmount\");\n\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\n\n    for (uint256 i; i < numTokens; ) {\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    emit RemoveLiquidityImbalance(msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\n\n    return tokenAmount;\n  }\n\n  /**\n   * @notice withdraw all admin fees to a given address\n   * @param self Swap struct to withdraw fees from\n   * @param to Address to send the fees to\n   */\n  function withdrawAdminFees(Swap storage self, address to) external {\n    uint256 numTokens = self.pooledTokens.length;\n    for (uint256 i; i < numTokens; ) {\n      IERC20 token = self.pooledTokens[i];\n      uint256 balance = self.adminFees[i];\n      if (balance != 0) {\n        delete self.adminFees[i];\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\n      }\n\n      unchecked {\n        ++i;\n      }\n    }\n  }\n\n  /**\n   * @notice Sets the admin fee\n   * @dev adminFee cannot be higher than 100% of the swap fee\n   * @param self Swap struct to update\n   * @param newAdminFee new admin fee to be applied on future transactions\n   */\n  function setAdminFee(Swap storage self, uint256 newAdminFee) external {\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \"too high\");\n    self.adminFee = newAdminFee;\n\n    emit NewAdminFee(newAdminFee);\n  }\n\n  /**\n   * @notice update the swap fee\n   * @dev fee cannot be higher than 1% of each swap\n   * @param self Swap struct to update\n   * @param newSwapFee new swap fee to be applied on future transactions\n   */\n  function setSwapFee(Swap storage self, uint256 newSwapFee) external {\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \"too high\");\n    self.swapFee = newSwapFee;\n\n    emit NewSwapFee(newSwapFee);\n  }\n\n  /**\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\n   * the limit range.\n   * @param self Swap struct to update\n   * @param futureA_ the new A to ramp towards\n   * @param futureTime_ timestamp when the new A should be reached\n   */\n  function rampA(\n    Swap storage self,\n    uint256 futureA_,\n    uint256 futureTime_\n  ) external {\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \"Wait 1 day before starting ramp\");\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \"Insufficient ramp time\");\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \"futureA_ must be > 0 and < Constants.MAX_A\");\n\n    uint256 initialAPrecise = _getAPrecise(self);\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\n\n    if (futureAPrecise < initialAPrecise) {\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \"futureA_ is too small\");\n    } else {\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \"futureA_ is too large\");\n    }\n\n    self.initialA = initialAPrecise;\n    self.futureA = futureAPrecise;\n    self.initialATime = block.timestamp;\n    self.futureATime = futureTime_;\n\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\n  }\n\n  /**\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\n   * cannot be called for another 24 hours\n   * @param self Swap struct to update\n   */\n  function stopRampA(Swap storage self) external {\n    require(self.futureATime > block.timestamp, \"Ramp is already stopped\");\n\n    uint256 currentA = _getAPrecise(self);\n    self.initialA = currentA;\n    self.futureA = currentA;\n    self.initialATime = block.timestamp;\n    self.futureATime = block.timestamp;\n\n    emit StopRampA(currentA, block.timestamp);\n  }\n}\n"},"contracts/core/connext/libraries/TokenId.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n// ============= Structs =============\n\n// Tokens are identified by a TokenId:\n// domain - 4 byte chain ID of the chain from which the token originates\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\nstruct TokenId {\n  uint32 domain;\n  bytes32 id;\n}\n"},"contracts/core/xreceivers/Unwrapper.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {SafeERC20} from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport {Address} from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport {ProposedOwnable} from \"../../shared/ProposedOwnable.sol\";\nimport {IXReceiver} from \"../connext/interfaces/IXReceiver.sol\";\n\ninterface IWrapper {\n  function withdraw(uint256 wad) external;\n\n  function transfer(address dst, uint256 wad) external returns (bool);\n}\n\n/**\n * @notice A utility contract for unwrapping native tokens at the destination.\n *\n * @dev The `xreceive` function of contract may fail in the following ways:\n * - unwrapping fails\n * - the wrong asset is delivered, and transferring that fails\n * - sending the native asset fails\n * - the caller is not connext\n * - the amount is zero\n * - balance of the contract != amount\n *\n * In the event of these failures, funds for the crosschain transfer will be sent\n * to this contract and will be held here. To rescue them, the owner of this contract\n * can call `sweep` or `unwrapAndSweep` to transfer assets from this contract to a\n * specified address.\n *\n * It is unlikely failures of these types will occur, so ownership of this contract\n * should be renounced after a suitable trial period on mainnet.\n *\n * @dev Ownership of this contract is governed using the same ProposedOwnable setup\n * that is prevalent throughout the system.\n */\ncontract Unwrapper is ProposedOwnable, IXReceiver {\n  // ============ Libraries ============\n\n  using SafeERC20 for IERC20;\n\n  // ============ Events ============\n\n  /**\n   * @notice Emitted if the wrong wrapper asset is sent.\n   * @param recipient - The target recipient address.\n   * @param asset - The asset sent.\n   */\n  event WrongAsset(address recipient, address asset);\n\n  /**\n   * @notice Emitted when funds are sent from this contract\n   * @param recipient - The target recipient address.\n   * @param asset - The asset sent.\n   * @param amount - The amount of the asset sent\n   */\n  event FundsDelivered(address recipient, address asset, uint256 amount);\n\n  // ============ Properties ============\n\n  /**\n   * @notice Connext (diamond proxy) address, the only address permissioned to call `xReceive`.\n   */\n  address public immutable CONNEXT;\n\n  /**\n   * @notice The wrapper contract that this contract will always use for unwrapping native token.\n   */\n  IWrapper public immutable WRAPPER;\n\n  // ============= Modifiers ==============\n\n  /**\n   * @notice Ensure caller is only the designated CONNEXT bridge address.\n   */\n  modifier onlyConnext() {\n    require(msg.sender == CONNEXT, \"unwrap: !connext\");\n    _;\n  }\n\n  // ============ Constructor ============\n\n  /**\n   * @dev The initial owner is set to the `msg.sender` of the contract.\n   */\n  constructor(address connext, address wrapper) ProposedOwnable() {\n    _setOwner(msg.sender);\n    WRAPPER = IWrapper(wrapper);\n    CONNEXT = connext;\n  }\n\n  // ============ Admin Functions ============\n\n  /**\n   * @notice Sweeps the provided token from this address to a designated recipient.\n   * @dev Only the owner of this contract can call this function.\n   *\n   * @dev Funds will end up on this contract IFF the external call on the Connext contract\n   * fails and the transfer is reconciled. The `xreceive` function can fail in the following\n   * cases:\n   * - unwrapping fails\n   * - transferring the asset fails\n   * - `connext` is not the caller (should not sweep in this case)\n   * - amount is zero (should not sweep in this case).\n   *\n   * It is left to the admin to determine the proper amounts to sweep.\n   *\n   * @param recipient The address to send the funds to\n   * @param asset The asset to send from the contract to recipient\n   * @param amount Amount of asset to sweep from contract\n   */\n  function sweep(\n    address recipient,\n    address asset,\n    uint256 amount\n  ) public onlyOwner {\n    // Sanity check: amount is non-zero (otherwise, what are we unwrapping?).\n    require(amount != 0, \"sweep: !amount\");\n\n    // Send funds to recipient\n    _sweep(recipient, asset, amount);\n  }\n\n  /**\n   * @notice Unwraps and sweeps the provided token from this address to a designated recipient.\n   * @dev Only the owner of this contract can call this function.\n   *\n   * @dev Funds will end up on this contract IFF the external call on the Connext contract\n   * fails and the transfer is reconciled. The `xreceive` function can fail in the following\n   * cases:\n   * - unwrapping fails\n   * - transferring the asset fails\n   * - `connext` is not the caller (should not sweep in this case)\n   * - amount is zero (should not sweep in this case).\n   *\n   * It is left to the admin to determine the proper amounts to sweep.\n   *\n   * @param recipient The address to send the funds to\n   * @param amount Amount of asset to sweep from contract\n   */\n  function unwrapAndSweep(address recipient, uint256 amount) public onlyOwner {\n    // Sanity check: amount is non-zero (otherwise, what are we unwrapping?).\n    require(amount != 0, \"unwrapAndSweep: !amount\");\n\n    // Withdraw from wrapper\n    WRAPPER.withdraw(amount);\n\n    // Send funds to recipient\n    _sweep(recipient, address(0), amount);\n  }\n\n  // ============ Public Functions ============\n\n  /**\n   * @notice xReceive implementation for receiving cross-chain calls from Connext.\n   * @dev We mostly ignore `originSender` argument: this could be a contract or EOA, but our\n   * recipient should be specified in our `callData`! We only fallback to using `originSender` IFF\n   * recipient argument is missing.\n   * @dev If unwrapping (i.e. `withdraw`) fails, will emit UnwrappingFailed event! We will attempt\n   * to transfer the wrapped tokens to the\n   *\n   * @param amount - The amount to transfer. Should NOT be 0, or this call will revert.\n   * @param asset - This *should be* the wrapper contract address, an ERC20 token approved by the\n   * Connext bridge. IFF this does NOT match the WRAPPER contract address stored in this contract,\n   * we'll try to `IERC20.transfer` the assets to the intended recipient.\n   * @param callData - Should be a tuple of just `(address)`. The address is the intended\n   * recipient of the unwrapped native tokens. Whether it's ether or wether (i.e. whether it's\n   * wrapped native tokens or native tokens) depends on whether we succeeded in the unwrapping\n   * process.\n   */\n  function xReceive(\n    bytes32, // transferId\n    uint256 amount,\n    address asset,\n    address, // originSender\n    uint32, // origin domain\n    bytes memory callData\n  ) external onlyConnext returns (bytes memory) {\n    // Sanity check: amount is non-zero (otherwise, what are we unwrapping?).\n    require(amount != 0, \"unwrap: !amount\");\n\n    // Get the target recipient, which should be in the callData.\n    // NOTE: If recipient is the zero address, funds will be burned!\n    address recipient = abi.decode(callData, (address));\n\n    // Sanity check: asset we've received matches our target wrapper.\n    if (asset != address(WRAPPER)) {\n      emit WrongAsset(recipient, asset);\n      // If the delivered asset does not match our target wrapper, we try sending it anyway.\n      _sweep(recipient, asset, amount);\n      return bytes(\"\");\n    }\n\n    // We've received wrapped native tokens; withdraw native tokens from the wrapper contract.\n    WRAPPER.withdraw(amount);\n\n    // Send to recipient\n    _sweep(recipient, address(0), amount);\n  }\n\n  /**\n   * @notice Fallback function so this contract can receive the funds from WETH\n   */\n  receive() external payable {}\n\n  // ============ Internal Functions ============\n\n  /**\n   * @notice Sweeps the provided token from this address to a designated recipient.\n   * @dev Emits the `FundsDelivered` event\n   *\n   * @param recipient The address to send the funds to\n   * @param asset The asset (or address(0) for native) to send from the contract to recipient\n   * @param amount Amount of asset to sweep from contract\n   */\n  function _sweep(\n    address recipient,\n    address asset,\n    uint256 amount\n  ) internal {\n    if (asset == address(0)) {\n      Address.sendValue(payable(recipient), amount);\n    } else {\n      IERC20(asset).transfer(recipient, amount);\n    }\n    emit FundsDelivered(recipient, asset, amount);\n  }\n}\n"},"contracts/messaging/connectors/arbitrum/ArbitrumHubConnector.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {LibArbitrumL1} from \"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL1.sol\";\n\nimport {TypedMemView} from \"../../../shared/libraries/TypedMemView.sol\";\n\nimport {IRootManager} from \"../../interfaces/IRootManager.sol\";\nimport {IArbitrumInbox} from \"../../interfaces/ambs/arbitrum/IArbitrumInbox.sol\";\nimport {IArbitrumOutbox} from \"../../interfaces/ambs/arbitrum/IArbitrumOutbox.sol\";\nimport {IArbitrumRollup, Node} from \"../../interfaces/ambs/arbitrum/IArbitrumRollup.sol\";\n\nimport {HubConnector} from \"../HubConnector.sol\";\nimport {Connector} from \"../Connector.sol\";\n\nstruct L2Message {\n  address l2Sender;\n  address to;\n  uint256 l2Block;\n  uint256 l1Block;\n  uint256 l2Timestamp;\n  uint256 value;\n  bytes callData;\n}\n\ncontract ArbitrumHubConnector is HubConnector {\n  // ============ Libraries ============\n  using TypedMemView for bytes;\n  using TypedMemView for bytes29;\n\n  // ============ Storage ============\n\n  IArbitrumOutbox public outbox;\n  IArbitrumRollup public rollup;\n\n  /**\n   * @notice Sets cap on maxSubmissionCost used in `createRetryableTicket`\n   * @dev The value used in `createRetryableTicket` is the lesser of the cap or\n   * a value passed in via `_encodedData` in `_sendMessage`.\n   *\n   * This value represents amount of ETH allocated to pay for the base submission fee\n   */\n  uint256 public maxSubmissionCostCap;\n\n  /**\n   * @notice Sets cap on maxGas used in `createRetryableTicket`\n   * @dev The value used in `createRetryableTicket` is the lesser of the cap or\n   * a value passed in via `_encodedData` in `_sendMessage`.\n   *\n   * This value represents gas limit for immediate L2 execution attempt\n   */\n  uint256 public maxGasCap;\n\n  /**\n   * @notice Sets cap on gasPrice used in `createRetryableTicket`\n   * @dev The value used in `createRetryableTicket` is the lesser of the cap or\n   * a value passed in via `_encodedData` in `_sendMessage`.\n   *\n   * This value represents L2 gas price bid for immediate L2 execution attempt\n   */\n  uint256 public gasPriceCap;\n\n  /**\n   * @notice Tracks which messages have been processed from bridge\n   */\n  mapping(uint256 => bool) public processed;\n\n  // ============ Events ============\n  // TODO: do we need any other information from the ticket to link to message?\n  event RetryableTicketCreated(uint256 indexed ticketId);\n\n  /**\n   * @notice Emitted when admin updates the maxSubmissionCap\n   * @param _previous The starting value\n   * @param _updated The final value\n   */\n  event MaxSubmissionCapUpdated(uint256 _previous, uint256 _updated);\n\n  /**\n   * @notice Emitted when admin updates the maxGasCap\n   * @param _previous The starting value\n   * @param _updated The final value\n   */\n  event MaxGasCapUpdated(uint256 _previous, uint256 _updated);\n\n  /**\n   * @notice Emitted when admin updates the gasPriceCap\n   * @param _previous The starting value\n   * @param _updated The final value\n   */\n  event GasPriceCapUpdated(uint256 _previous, uint256 _updated);\n\n  // ============ Constructor ============\n  constructor(\n    uint32 _domain,\n    uint32 _mirrorDomain,\n    address _amb,\n    address _rootManager,\n    address _mirrorConnector,\n    address _outbox,\n    uint256 _maxSubmissionCostCap,\n    uint256 _maxGasCap,\n    uint256 _gasPriceCap\n  ) HubConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector) {\n    outbox = IArbitrumOutbox(_outbox);\n    rollup = IArbitrumRollup(outbox.rollup());\n\n    // Set initial caps for L1 -> L2 messages\n    maxSubmissionCostCap = _maxSubmissionCostCap;\n    maxGasCap = _maxGasCap;\n    gasPriceCap = _gasPriceCap;\n  }\n\n  // ============ Admin fns ============\n\n  /**\n   * @notice Used (by admin) to update the maxSubmissionCostCap\n   * @param _updated The new value\n   */\n  function setMaxSubmissionCostCap(uint256 _updated) public onlyOwner {\n    emit MaxSubmissionCapUpdated(maxSubmissionCostCap, _updated);\n    maxSubmissionCostCap = _updated;\n  }\n\n  /**\n   * @notice Used (by admin) to update the maxGasCap\n   * @param _updated The new value\n   */\n  function setMaxGasCap(uint256 _updated) public onlyOwner {\n    emit MaxGasCapUpdated(maxGasCap, _updated);\n    maxGasCap = _updated;\n  }\n\n  /**\n   * @notice Used (by admin) to update the gasPriceCap\n   * @param _updated The new value\n   */\n  function setGasPriceCap(uint256 _updated) public onlyOwner {\n    emit GasPriceCapUpdated(maxSubmissionCostCap, _updated);\n    gasPriceCap = _updated;\n  }\n\n  // ============ Private fns ============\n\n  function _verifySender(address _expected) internal view override returns (bool) {\n    return _expected == LibArbitrumL1.crossChainSender(AMB);\n  }\n\n  /**\n   * @notice Helper to return the lesser of two values\n   * @param _a Some number\n   * @param _b Some number\n   */\n  function _lesserOf(uint256 _a, uint256 _b) internal pure returns (uint256) {\n    return _a < _b ? _a : _b;\n  }\n\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\n    // Should always be dispatching the aggregate root\n    require(_data.length == 32, \"!length\");\n    // Get the calldata\n    bytes memory _calldata = abi.encodeWithSelector(Connector.processMessage.selector, _data);\n\n    // Should include specialized calldata\n    require(_encodedData.length == (32 * 3), \"!data length\");\n\n    // Decode all of the gas-related parameters\n    (uint256 maxSubmissionCost, uint256 maxGas, uint256 gasPrice) = abi.decode(\n      _encodedData,\n      (uint256, uint256, uint256)\n    );\n\n    // dispatch to l2\n    uint256 ticketID = IArbitrumInbox(AMB).createRetryableTicket{value: msg.value}(\n      mirrorConnector, // destAddr\n      0, // arbTxCallValue\n      _lesserOf(maxSubmissionCost, maxSubmissionCostCap), // maxSubmissionCost: Amount of ETH allocated to pay for the base submission fee\n      mirrorConnector, // submissionRefundAddress: Address to which all excess gas is credited on L2\n      mirrorConnector, // valueRefundAddress: Address to which CallValue will be credited to on L2 if the retryable ticket times out or is cancelled\n      _lesserOf(maxGas, maxGasCap), // maxGas: Gas limit for immediate L2 execution attempt\n      _lesserOf(gasPrice, gasPriceCap), // gasPriceBid: L2 Gas price bid for immediate L2 execution attempt\n      _calldata // data\n    );\n    emit RetryableTicketCreated(ticketID);\n  }\n\n  // DO NOT override _processMessage, should revert from `Connector` class. All messages must use the\n  // `processMessageFromRoot` flow.\n\n  function processMessageFromRoot(\n    uint64 _nodeNum,\n    bytes32 _sendRoot,\n    bytes32 _blockHash,\n    bytes32[] calldata _proof,\n    uint256 _index,\n    L2Message calldata _message\n  ) external {\n    // Ensure the send root corresponds to an arbitrum node that exists onchain\n    _validateSendRoot(_nodeNum, _sendRoot, _blockHash);\n\n    // Ensure the given l2 message is included in the send root\n    _validateMessage(_sendRoot, _proof, _index, _message);\n\n    // Message has been proven within the send root, process the message\n    // data itself. The message data is defined in the spoke connector as:\n    //\n    // `abi.encodeWithSelector(Connector.processMessage.selector, _data);`\n    //\n    // so to get the root data, we need to decode the _calldata. we can do this\n    // by dropping the 4-byte selector, then using the rest as the raw _data.\n    require(_message.callData.length == 100, \"!length\");\n\n    // NOTE: TypedMemView only loads 32-byte chunks onto stack, which is fine in this case\n    // the calldata is 100 bytes long, the last 32 bytes represent the root to be aggregated.\n    bytes32 _data = _message.callData.ref(0).index(68, 32);\n\n    // Update root manager\n    IRootManager(ROOT_MANAGER).aggregate(MIRROR_DOMAIN, _data);\n\n    // Emit event\n    emit MessageProcessed(abi.encode(_data), msg.sender);\n  }\n\n  function _validateSendRoot(\n    uint64 _nodeNum,\n    bytes32 _sendRoot,\n    bytes32 _blockHash\n  ) internal view {\n    // Get the confirm data to ensure the node has been put on L1 with\n    // the given block hash and send root\n    bytes32 confirmData = _confirmHash(_blockHash, _sendRoot);\n\n    // Validate inputs by checking against the stored none confirm data\n    Node memory node = rollup.getNode(_nodeNum);\n    require(node.confirmData == confirmData, \"!confirmData\");\n\n    // Validate the node is staked / not in dispute\n    // NOTE: a dispute can happen at any point within the timeout window, so the closest\n    // we can get is to ensure the staker count > 0 and that there have been stakes on child\n    // nodes as well, meaning the node is less likely to be staked incorrectly (and thus less\n    // likely to be disputed)\n    require(node.stakerCount > 0 && node.childStakerCount > 0, \"!staked\");\n  }\n\n  // prove the message was included in the given send root\n  function _validateMessage(\n    bytes32 _sendRoot,\n    bytes32[] calldata _proof,\n    uint256 _index,\n    L2Message calldata _msg\n  ) internal {\n    // Check that the l2sender is the mirror connector\n    require(_msg.l2Sender == mirrorConnector, \"!mirrorConnector\");\n\n    // Generate the message sent through from L2 (included in sendRoot)\n    bytes32 userTx = outbox.calculateItemHash(\n      _msg.l2Sender,\n      _msg.to,\n      _msg.l2Block,\n      _msg.l1Block,\n      _msg.l2Timestamp,\n      _msg.value,\n      _msg.callData\n    );\n\n    // Prove message is included in the send root\n    _recordOutputAsSpent(_proof, _index, userTx, _sendRoot);\n  }\n\n  // taken from: https://github.com/OffchainLabs/nitro/blob/208d9d50f250e9b4948f867d3795548256583b17/contracts/src/rollup/RollupLib.sol#L128-L130\n  function _confirmHash(bytes32 _blockHash, bytes32 _sendRoot) internal pure returns (bytes32) {\n    return keccak256(abi.encodePacked(_blockHash, _sendRoot));\n  }\n\n  // modified from: https://github.com/OffchainLabs/nitro/blob/fbaa96d6d6246b427629be176499e1d5c5013d89/contracts/src/bridge/Outbox.sol#L219-L235\n  function _recordOutputAsSpent(\n    bytes32[] memory _proof,\n    uint256 _index,\n    bytes32 _item,\n    bytes32 _sendRoot\n  ) internal {\n    require(_proof.length < 256, \"proof length\");\n    require((_index >> _proof.length) == 0, \"!minimal proof\");\n\n    // NOTE: in the arbitrum contracts, they check that the message index is not yet spent\n    // Because the spoke connector calls `processMessage`, which does nothing, it is important\n    // to check out own internal mapping to ensure the message is not played twice. this forces\n    // all messages from l2 to be processed using the `processMessageFromRoot` fn path.\n    require(!processed[_index], \"spent\");\n\n    // Calculate the root\n    bytes32 calcRoot = outbox.calculateMerkleRoot(_proof, _index, _item);\n\n    // Assert the sendRoot is correct\n    // NOTE: this send root will *not* yet be stored on the `Outbox`\n    // contract (fraud period has not yet elapsed);\n    require(calcRoot == _sendRoot, \"!proof\");\n\n    // Mark as spent\n    processed[_index] = true;\n  }\n}\n"},"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {LibArbitrumL2} from \"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL2.sol\";\nimport {IArbSys} from \"@openzeppelin/contracts/vendor/arbitrum/IArbSys.sol\";\n\nimport {ArbitrumL2Amb} from \"../../interfaces/ambs/arbitrum/ArbitrumL2Amb.sol\";\n\nimport {SpokeConnector} from \"../SpokeConnector.sol\";\nimport {Connector} from \"../Connector.sol\";\n\ncontract ArbitrumSpokeConnector is SpokeConnector {\n  // ============ Events ============\n\n  event AliasedSenderUpdated(address previous, address current);\n\n  // ============ Public Storage ============\n\n  /**\n   * @notice Aliased address of mirror connector. This value should be calculated and set\n   * when the `_mirrorConnector` address is set.\n   * @dev See: https://developer.arbitrum.io/arbos/l1-to-l2-messaging#address-aliasing\n   */\n  address public aliasedSender;\n\n  // ============ Modifiers ============\n\n  /**\n   * @notice Errors if the msg.sender is not the aliased sender\n   */\n  modifier onlyAliased() {\n    require(msg.sender == aliasedSender, \"!aliasedSender\");\n    _;\n  }\n\n  // ============ Constructor ============\n\n  constructor(\n    uint32 _domain,\n    uint32 _mirrorDomain,\n    address _amb,\n    address _rootManager,\n    address _mirrorConnector,\n    uint256 _processGas,\n    uint256 _reserveGas,\n    uint256 _delayBlocks,\n    address _merkle,\n    address _watcherManager\n  )\n    SpokeConnector(\n      _domain,\n      _mirrorDomain,\n      _amb,\n      _rootManager,\n      _mirrorConnector,\n      _processGas,\n      _reserveGas,\n      _delayBlocks,\n      _merkle,\n      _watcherManager\n    )\n  {\n    _setAliasedSender(_mirrorConnector);\n  }\n\n  // ============ Public Functions ============\n\n  /**\n   * @notice Processes a message received by an AMB\n   * @dev This is called by AMBs to process messages originating from mirror connector\n   */\n  function processMessage(bytes memory _data) external override onlyAliased {\n    _processMessage(_data);\n    emit MessageProcessed(_data, msg.sender);\n  }\n\n  // ============ Private Functions ============\n\n  function _verifySender(address _expected) internal view override returns (bool) {\n    return _expected == LibArbitrumL2.crossChainSender(AMB);\n  }\n\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\n    // Should always be dispatching the aggregate root\n    require(_data.length == 32, \"!length\");\n    // Should not include specialized calldata\n    require(_encodedData.length == 0, \"!data length\");\n    // Get the calldata\n    bytes memory _calldata = abi.encodeWithSelector(Connector.processMessage.selector, _data);\n    // Send to L1\n    ArbitrumL2Amb(AMB).sendTxToL1(mirrorConnector, _calldata);\n  }\n\n  function _processMessage(bytes memory _data) internal override {\n    // only callable by mirror connector\n    require(_verifySender(mirrorConnector), \"!mirrorConnector\");\n    // get the data (should be the aggregate root)\n    require(_data.length == 32, \"!length\");\n    // update the aggregate root on the domain\n    receiveAggregateRoot(bytes32(_data));\n  }\n\n  function _setMirrorConnector(address _mirrorConnector) internal override {\n    _setAliasedSender(_mirrorConnector);\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\n    mirrorConnector = _mirrorConnector;\n  }\n\n  function _setAliasedSender(address _mirrorConnector) internal {\n    // Calculate the alias address.\n    address _alias = IArbSys(AMB).mapL1SenderContractAddressToL2Alias(_mirrorConnector, address(0));\n    emit AliasedSenderUpdated(aliasedSender, _alias);\n    // Update our aliased sender (used in `processMessage` override).\n    aliasedSender = _alias;\n  }\n}\n"},"contracts/messaging/connectors/Connector.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {ProposedOwnable} from \"../../shared/ProposedOwnable.sol\";\nimport {IConnector} from \"../interfaces/IConnector.sol\";\n\n/**\n * @title Connector\n * @author Connext Labs, Inc.\n * @notice This contract has the messaging interface functions used by all connectors.\n *\n * @dev This contract stores information about mirror connectors, but can be used as a\n * base for contracts that do not have a mirror (i.e. the connector handling messaging on\n * mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\n * will be empty\n *\n * @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\n * or `mirrorGas`\n */\nabstract contract Connector is ProposedOwnable, IConnector {\n  // ========== Custom Errors ===========\n\n  error Connector__processMessage_notUsed();\n\n  // ============ Events ============\n\n  event NewConnector(\n    uint32 indexed domain,\n    uint32 indexed mirrorDomain,\n    address amb,\n    address rootManager,\n    address mirrorConnector\n  );\n\n  event MirrorConnectorUpdated(address previous, address current);\n\n  // ============ Public Storage ============\n\n  /**\n   * @notice The domain of this Messaging (i.e. Connector) contract.\n   */\n  uint32 public immutable DOMAIN;\n\n  /**\n   * @notice Address of the AMB on this domain.\n   */\n  address public immutable AMB;\n\n  /**\n   * @notice RootManager contract address.\n   */\n  address public immutable ROOT_MANAGER;\n\n  /**\n   * @notice The domain of the corresponding messaging (i.e. Connector) contract.\n   */\n  uint32 public immutable MIRROR_DOMAIN;\n\n  /**\n   * @notice Connector on L2 for L1 connectors, and vice versa.\n   */\n  address public mirrorConnector;\n\n  // ============ Modifiers ============\n\n  /**\n   * @notice Errors if the msg.sender is not the registered AMB\n   */\n  modifier onlyAMB() {\n    require(msg.sender == AMB, \"!AMB\");\n    _;\n  }\n\n  /**\n   * @notice Errors if the msg.sender is not the registered ROOT_MANAGER\n   */\n  modifier onlyRootManager() {\n    // NOTE: RootManager will be zero address for spoke connectors.\n    // Only root manager can dispatch a message to spokes/L2s via the hub connector.\n    require(msg.sender == ROOT_MANAGER, \"!rootManager\");\n    _;\n  }\n\n  // ============ Constructor ============\n\n  /**\n   * @notice Creates a new HubConnector instance\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\n   * for optimism, there is one connector on optimism and one connector on mainnet)\n   * @param _domain The domain this connector lives on\n   * @param _mirrorDomain The spoke domain\n   * @param _amb The address of the amb on the domain this connector lives on\n   * @param _rootManager The address of the RootManager on mainnet\n   * @param _mirrorConnector The address of the spoke connector\n   */\n  constructor(\n    uint32 _domain,\n    uint32 _mirrorDomain,\n    address _amb,\n    address _rootManager,\n    address _mirrorConnector\n  ) ProposedOwnable() {\n    // set the owner\n    _setOwner(msg.sender);\n\n    // sanity checks on values\n    require(_domain != 0, \"empty domain\");\n    require(_rootManager != address(0), \"empty rootManager\");\n    // see note at top of contract on why the mirror values are not sanity checked\n\n    // set immutables\n    DOMAIN = _domain;\n    AMB = _amb;\n    ROOT_MANAGER = _rootManager;\n    MIRROR_DOMAIN = _mirrorDomain;\n    // set mutables if defined\n    if (_mirrorConnector != address(0)) {\n      _setMirrorConnector(_mirrorConnector);\n    }\n\n    emit NewConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector);\n  }\n\n  // ============ Receivable ============\n  /**\n   * @notice Connectors may need to receive native asset to handle fees when sending a\n   * message\n   */\n  receive() external payable {}\n\n  // ============ Admin Functions ============\n\n  /**\n   * @notice Sets the address of the l2Connector for this domain\n   */\n  function setMirrorConnector(address _mirrorConnector) public onlyOwner {\n    _setMirrorConnector(_mirrorConnector);\n  }\n\n  // ============ Public Functions ============\n\n  /**\n   * @notice Processes a message received by an AMB\n   * @dev This is called by AMBs to process messages originating from mirror connector\n   */\n  function processMessage(bytes memory _data) external virtual onlyAMB {\n    _processMessage(_data);\n    emit MessageProcessed(_data, msg.sender);\n  }\n\n  /**\n   * @notice Checks the cross domain sender for a given address\n   */\n  function verifySender(address _expected) external returns (bool) {\n    return _verifySender(_expected);\n  }\n\n  // ============ Virtual Functions ============\n\n  /**\n   * @notice This function is used by the Connext contract on the l2 domain to send a message to the\n   * l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\n   * @param _data The contents of the message\n   * @param _encodedData Data used to send the message; specific to connector\n   */\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal virtual;\n\n  /**\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\n   * root generated on the l2 domain.\n   */\n  function _processMessage(\n    bytes memory /* _data */\n  ) internal virtual {\n    // By default, reverts. This is to ensure the call path is not used unless this function is\n    // overridden by the inheriting class\n    revert Connector__processMessage_notUsed();\n  }\n\n  /**\n   * @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\n   * is the expected address.\n   * @dev Should be overridden by the implementing Connector contract.\n   */\n  function _verifySender(address _expected) internal virtual returns (bool);\n\n  // ============ Private Functions ============\n\n  function _setMirrorConnector(address _mirrorConnector) internal virtual {\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\n    mirrorConnector = _mirrorConnector;\n  }\n}\n"},"contracts/messaging/connectors/ConnectorManager.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {IConnectorManager} from \"../interfaces/IConnectorManager.sol\";\nimport {IOutbox} from \"../interfaces/IOutbox.sol\";\n\n/**\n * @notice This is an interface to allow the `Messaging` contract to be used\n * as a `XappConnectionManager` on all router contracts.\n *\n * @dev Each nomad router contract has a `XappConnectionClient`, which references a\n * XappConnectionManager to get the `Home` (outbox) and approved `Replica` (inbox)\n * instances. At any point the client can replace the manager it's pointing to,\n * changing the underlying messaging connection.\n */\nabstract contract ConnectorManager is IConnectorManager {\n  constructor() {}\n\n  function home() public view returns (IOutbox) {\n    return IOutbox(address(this));\n  }\n\n  function isReplica(address _potentialReplica) public view returns (bool) {\n    return _potentialReplica == address(this);\n  }\n\n  function localDomain() external view virtual returns (uint32);\n}\n"},"contracts/messaging/connectors/GasCap.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {ProposedOwnable} from \"../../shared/ProposedOwnable.sol\";\n\nabstract contract GasCap is ProposedOwnable {\n  // ============ Storage ============\n  /**\n   * @notice The gnosis amb requires destination gas to be specified on the origin.\n   * The gas used will be passed in by the relayer to allow for real-time estimates,\n   * but will be capped at the admin-set cap.\n   */\n  uint256 gasCap;\n\n  // ============ Events ============\n\n  /**\n   * @notice Emitted when admin updates the gas cap\n   * @param _previous The starting value\n   * @param _updated The final value\n   */\n  event GasCapUpdated(uint256 _previous, uint256 _updated);\n\n  // ============ Constructor ============\n  constructor(uint256 _gasCap) {\n    _setGasCap(_gasCap);\n  }\n\n  // ============ Admin Fns ============\n  function setGasCap(uint256 _gasCap) public onlyOwner {\n    _setGasCap(_gasCap);\n  }\n\n  // ============ Internal Fns ============\n\n  /**\n   * @notice Used (by admin) to update the gas cap\n   * @param _gasCap The new value\n   */\n  function _setGasCap(uint256 _gasCap) internal {\n    emit GasCapUpdated(gasCap, _gasCap);\n    gasCap = _gasCap;\n  }\n\n  /**\n   * @notice Used to get the gas to use. Will be the original value IFF it\n   * is less than the cap\n   * @param _gas The proposed gas value\n   */\n  function _getGas(uint256 _gas) internal view returns (uint256) {\n    if (_gas > gasCap) {\n      _gas = gasCap;\n    }\n    return _gas;\n  }\n}\n"},"contracts/messaging/connectors/gnosis/GnosisBase.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {GnosisAmb} from \"../../interfaces/ambs/GnosisAmb.sol\";\n\nimport {GasCap} from \"../GasCap.sol\";\n\nabstract contract GnosisBase is GasCap {\n  // ============ Storage ============\n  uint256 public immutable MIRROR_CHAIN_ID;\n\n  // ============ Constructor ============\n  constructor(uint256 _gasCap, uint256 _mirrorChainId) GasCap(_gasCap) {\n    MIRROR_CHAIN_ID = _mirrorChainId;\n  }\n\n  // ============ Private fns ============\n\n  /**\n   * @dev Asserts the sender of a cross domain message\n   */\n  function _verifySender(\n    address _amb,\n    address _expected,\n    uint256 _sourceChain\n  ) internal view returns (bool) {\n    require(msg.sender == _amb, \"!bridge\");\n    require(_sourceChain == MIRROR_CHAIN_ID, \"!source\");\n    return GnosisAmb(_amb).messageSender() == _expected;\n  }\n\n  /**\n   * @notice Using Gnosis AMB, the gas is provided to `sendMessage` as an encoded uint\n   */\n  function _getGasFromEncoded(bytes memory _encodedData) internal view returns (uint256 _gas) {\n    // Should include gssas info in specialized calldata\n    require(_encodedData.length == 32, \"!data length\");\n\n    // Get the gas, if it is more than the cap use the cap\n    _gas = _getGas(abi.decode(_encodedData, (uint256)));\n  }\n}\n"},"contracts/messaging/connectors/gnosis/GnosisHubConnector.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {IRootManager} from \"../../interfaces/IRootManager.sol\";\nimport {GnosisAmb} from \"../../interfaces/ambs/GnosisAmb.sol\";\n\nimport {Connector} from \"../Connector.sol\";\nimport {HubConnector} from \"../HubConnector.sol\";\n\nimport {GnosisBase} from \"./GnosisBase.sol\";\n\ncontract GnosisHubConnector is HubConnector, GnosisBase {\n  // ============ Constructor ============\n  constructor(\n    uint32 _domain,\n    uint32 _mirrorDomain,\n    address _amb,\n    address _rootManager,\n    address _mirrorConnector,\n    uint256 _gasCap,\n    uint256 _mirrorChainId\n  ) HubConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector) GnosisBase(_gasCap, _mirrorChainId) {}\n\n  // https://docs.gnosischain.com/bridges/tutorials/using-amb\n  function executeSignatures(bytes memory _data, bytes memory _signatures) external {\n    GnosisAmb(AMB).executeSignatures(_data, _signatures);\n  }\n\n  // ============ Private fns ============\n  /**\n   * @dev Asserts the sender of a cross domain message\n   */\n  function _verifySender(address _expected) internal view override returns (bool) {\n    return _verifySender(AMB, _expected, GnosisAmb(AMB).destinationChainId());\n  }\n\n  /**\n   * @dev Messaging uses this function to send data to l2 via amb\n   */\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\n    // Should always be dispatching the aggregate root\n    require(_data.length == 32, \"!length\");\n\n    // send message via AMB, should call \"processMessage\" which will update aggregate root\n    GnosisAmb(AMB).requireToPassMessage(\n      mirrorConnector,\n      abi.encodeWithSelector(Connector.processMessage.selector, _data),\n      _getGasFromEncoded(_encodedData)\n    );\n  }\n\n  /**\n   * @dev L2 connector calls this function to pass down latest outbound root\n   */\n  function _processMessage(bytes memory _data) internal override {\n    // ensure the l1 connector sent the message\n    require(_verifySender(mirrorConnector), \"!l2Connector\");\n    // ensure it is headed to this domain\n    require(GnosisAmb(AMB).sourceChainId() == block.chainid, \"!sourceChain\");\n    // get the data (should be the outbound root)\n    require(_data.length == 32, \"!length\");\n    // update the root on the root manager\n    IRootManager(ROOT_MANAGER).aggregate(MIRROR_DOMAIN, bytes32(_data));\n  }\n}\n"},"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {GnosisAmb} from \"../../interfaces/ambs/GnosisAmb.sol\";\n\nimport {SpokeConnector, ProposedOwnable} from \"../SpokeConnector.sol\";\nimport {Connector} from \"../Connector.sol\";\n\nimport {GnosisBase} from \"./GnosisBase.sol\";\n\ncontract GnosisSpokeConnector is SpokeConnector, GnosisBase {\n  // ============ Constructor ============\n  constructor(\n    uint32 _domain,\n    uint32 _mirrorDomain,\n    address _amb,\n    address _rootManager,\n    address _mirrorConnector,\n    uint256 _processGas,\n    uint256 _reserveGas,\n    uint256 _delayBlocks,\n    address _merkle,\n    address _watcherManager,\n    uint256 _gasCap, // gas to be provided on L1 execution\n    uint256 _mirrorChainId\n  )\n    SpokeConnector(\n      _domain,\n      _mirrorDomain,\n      _amb,\n      _rootManager,\n      _mirrorConnector,\n      _processGas,\n      _reserveGas,\n      _delayBlocks,\n      _merkle,\n      _watcherManager\n    )\n    GnosisBase(_gasCap, _mirrorChainId)\n  {}\n\n  /**\n   * @notice Should not be able to renounce ownership\n   */\n  function renounceOwnership() public virtual override(SpokeConnector, ProposedOwnable) onlyOwner {}\n\n  // ============ Private fns ============\n  /**\n   * @dev Asserts the sender of a cross domain message\n   */\n  function _verifySender(address _expected) internal view override returns (bool) {\n    return _verifySender(AMB, _expected, GnosisAmb(AMB).destinationChainId());\n  }\n\n  /**\n   * @dev Messaging uses this function to send data to mainnet via amb\n   * @param _encodedData Should be encoding of gas to be provided in execution of the method call on\n   * the mirror domain\n   */\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\n    // Should always be dispatching the outbound root\n    require(_data.length == 32, \"!length\");\n\n    // Should include gas info in specialized calldata\n    require(_encodedData.length == 32, \"!data length\");\n\n    // send the message to the l1 connector by calling `processMessage`\n    GnosisAmb(AMB).requireToPassMessage(\n      mirrorConnector,\n      abi.encodeWithSelector(Connector.processMessage.selector, _data),\n      _getGasFromEncoded(_encodedData)\n    );\n  }\n\n  /**\n   * @dev AMB calls this function to store aggregate root that is sent up by the root manager\n   */\n  function _processMessage(bytes memory _data) internal override {\n    // get the data (should be the aggregate root)\n    require(_data.length == 32, \"!length\");\n    // ensure the l1 connector sent the message\n    require(_verifySender(mirrorConnector), \"!mirrorConnector\");\n    // ensure it is headed to this domain\n    require(GnosisAmb(AMB).sourceChainId() == block.chainid, \"!sourceChain\");\n    // update the aggregate root on the domain\n    receiveAggregateRoot(bytes32(_data));\n  }\n}\n"},"contracts/messaging/connectors/HubConnector.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {Connector} from \"./Connector.sol\";\n\n/**\n * @title HubConnector\n * @author Connext Labs, Inc.\n * @notice This contract implements the messaging functions needed on the hub-side of a given AMB.\n * The HubConnector has a limited set of functionality compared to the SpokeConnector, namely that\n * it contains no logic to store or prove messages.\n *\n * @dev This contract should be deployed on the hub-side of an AMB (i.e. on L1), and contracts\n * which extend this should implement the virtual functions defined in the BaseConnector class\n */\nabstract contract HubConnector is Connector {\n  /**\n   * @notice Creates a new HubConnector instance\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\n   * for optimism, there is one connector on optimism and one connector on mainnet)\n   * @param _domain The domain this connector lives on\n   * @param _mirrorDomain The spoke domain\n   * @param _amb The address of the amb on the domain this connector lives on\n   * @param _rootManager The address of the RootManager on mainnet\n   * @param _mirrorConnector The address of the spoke connector\n   */\n  constructor(\n    uint32 _domain,\n    uint32 _mirrorDomain,\n    address _amb,\n    address _rootManager,\n    address _mirrorConnector\n  ) Connector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector) {}\n\n  // ============ Public fns ============\n  /**\n   * @notice Sends a message over the amb\n   * @dev This is called by the root manager *only* on mainnet to propagate the aggregate root\n   */\n  function sendMessage(bytes memory _data, bytes memory _encodedData) external payable onlyRootManager {\n    _sendMessage(_data, _encodedData);\n    emit MessageSent(_data, _encodedData, msg.sender);\n  }\n}\n"},"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {IRootManager} from \"../../interfaces/IRootManager.sol\";\nimport {IHubConnector} from \"../../interfaces/IHubConnector.sol\";\n\nimport {SpokeConnector} from \"../SpokeConnector.sol\";\n\ncontract MainnetSpokeConnector is SpokeConnector, IHubConnector {\n  // ============ Constructor ============\n  constructor(\n    uint32 _domain,\n    uint32 _mirrorDomain,\n    address _amb,\n    address _rootManager,\n    address _mirrorConnector,\n    uint256 _processGas,\n    uint256 _reserveGas,\n    uint256 _delayBlocks,\n    address _merkle,\n    address _watcherManager\n  )\n    SpokeConnector(\n      _domain,\n      _mirrorDomain,\n      _amb,\n      _rootManager,\n      _mirrorConnector,\n      _processGas,\n      _reserveGas,\n      _delayBlocks,\n      _merkle,\n      _watcherManager\n    )\n  {}\n\n  // ============ Public fns ============\n  /**\n   * @notice Sends a message over the amb\n   * @dev This is called by the root manager *only* on mainnet to propagate the aggregate root\n   * @dev Get 'Base constructor arguments given twice' when trying to inherit\n   */\n  function sendMessage(bytes memory _data, bytes memory _encodedData) external payable onlyRootManager {\n    // Should not include specialized calldata\n    require(_encodedData.length == 0, \"!data length\");\n    _sendMessage(_data, bytes(\"\"));\n    emit MessageSent(_data, bytes(\"\"), msg.sender);\n  }\n\n  // ============ Private fns ============\n  /**\n   * @dev Asserts the sender of a cross domain message. On mainnet all senders should be this\n   */\n  function _verifySender(address _expected) internal view override returns (bool) {\n    return msg.sender == _expected;\n  }\n\n  /**\n   * @dev There are two times messages get \"sent\" from this connector:\n   * 1. `RootManager` calls `sendMessage` during `propagate`\n   * 2. Relayers call `send`, which calls `_sendMessage` to set the outbound root\n   */\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\n    // Should not include specialized calldata\n    require(_encodedData.length == 0, \"!data length\");\n    // get the data (should be either the outbound or aggregate root, depending on sender)\n    require(_data.length == 32, \"!length\");\n    if (msg.sender == ROOT_MANAGER) {\n      // update the aggregate root\n      receiveAggregateRoot(bytes32(_data));\n      return;\n    }\n    // otherwise is relayer, update the outbound root on the root manager\n    IRootManager(ROOT_MANAGER).aggregate(DOMAIN, bytes32(_data));\n  }\n\n  /**\n   * @dev The `RootManager` calls `.sendMessage` on all connectors, there is nothing on mainnet\n   * that would be processing \"inbound messages\", so do nothing in this function\n   */\n  function _processMessage(bytes memory _data) internal override {}\n}\n"},"contracts/messaging/connectors/multichain/BaseMultichain.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {Multichain} from \"../../interfaces/ambs/Multichain.sol\";\n\nimport {GasCap} from \"../GasCap.sol\";\n\nabstract contract BaseMultichain is GasCap {\n  // ============ Internal Storage ============\n  address internal immutable EXECUTOR; // Is != amb, used only to retrieve sender context\n\n  // Mirror chain id\n  uint256 internal immutable MIRROR_CHAIN_ID;\n\n  // ============ Constructor ============\n  constructor(\n    address _amb,\n    uint256 _mirrorChainId,\n    uint256 _gasCap // max fee on destination chain\n  ) GasCap(_gasCap) {\n    // sanity checks\n    require(_mirrorChainId != 0, \"!mirrorChainId\");\n\n    // set immutable propertioes\n    EXECUTOR = Multichain(_amb).executor();\n    require(EXECUTOR != address(0), \"!executor\");\n    MIRROR_CHAIN_ID = _mirrorChainId;\n  }\n\n  // ============ Public Fns ============\n  function anyExecute(bytes memory _data) external returns (bool success, bytes memory result) {\n    _processMessage(_data);\n  }\n\n  // ============ Private fns ============\n  /**\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\n   * root generated on the l2 domain.\n   */\n  function _processMessage(bytes memory _data) internal virtual;\n\n  /**\n   * @dev Sends `outboundRoot` to root manager on the mirror chain\n   */\n  function _sendMessage(\n    address _amb,\n    address _mirrorConnector,\n    bytes memory _data,\n    bytes memory _encodedData\n  ) internal {\n    // Should always be sending a merkle root\n    require(_data.length == 32, \"!data length\");\n\n    // Should not include any gas info\n    require(_encodedData.length == 0, \"!data length\");\n\n    // Get the max fee supplied\n    uint256 supplied = _getGas(msg.value); // fee paid on origin chain, up to cap\n    // NOTE: fee will always be <= msg.value\n\n    // Get the min fees\n    uint256 required = Multichain(_amb).calcSrcFees(\n      \"\", // app id\n      MIRROR_CHAIN_ID, // destination chain\n      32 // data length: selector + root\n    );\n    // Should have at least the min fees\n    require(required < supplied + 1, \"!fees\");\n\n    Multichain(_amb).anyCall{value: supplied}(\n      _mirrorConnector, // Target contract on destination\n      _data, // Call data for interaction\n      address(0), // fallback address on origin chain\n      MIRROR_CHAIN_ID,\n      2 // fees paid on source chain\n    );\n  }\n\n  function _verifySender(address _amb, address _expected) internal view returns (bool) {\n    require(msg.sender == EXECUTOR, \"!executor\");\n\n    (address from, uint256 fromChainId, ) = Multichain(EXECUTOR).context();\n    return from == _expected && fromChainId == MIRROR_CHAIN_ID;\n  }\n}\n"},"contracts/messaging/connectors/multichain/MultichainHubConnector.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {IRootManager} from \"../../interfaces/IRootManager.sol\";\n\nimport {HubConnector, Connector} from \"../HubConnector.sol\";\n\nimport {BaseMultichain} from \"./BaseMultichain.sol\";\n\ncontract MultichainHubConnector is HubConnector, BaseMultichain {\n  // ============ Constructor ============\n  constructor(\n    uint32 _domain,\n    uint32 _mirrorDomain,\n    address _amb,\n    address _rootManager,\n    address _mirrorConnector,\n    uint256 _mirrorChainId,\n    uint256 _gasCap\n  )\n    HubConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector)\n    BaseMultichain(_amb, _mirrorChainId, _gasCap)\n  {}\n\n  // ============ Private fns ============\n  /**\n   * @dev Handles an incoming `outboundRoot`\n   */\n  function _processMessage(bytes memory _data) internal override(Connector, BaseMultichain) {\n    // enforce this came from connector on l2\n    require(_verifySender(mirrorConnector), \"!l2Connector\");\n    // get the data (should be the outbound root)\n    require(_data.length == 32, \"!length\");\n    // set the outbound root for BSC domain\n    IRootManager(ROOT_MANAGER).aggregate(MIRROR_DOMAIN, bytes32(_data));\n  }\n\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\n    _sendMessage(AMB, mirrorConnector, _data, _encodedData);\n  }\n\n  function _verifySender(address _expected) internal view override returns (bool) {\n    return _verifySender(AMB, _expected);\n  }\n}\n"},"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {SpokeConnector, ProposedOwnable} from \"../SpokeConnector.sol\";\nimport {Connector} from \"../Connector.sol\";\n\nimport {BaseMultichain} from \"./BaseMultichain.sol\";\n\ncontract MultichainSpokeConnector is SpokeConnector, BaseMultichain {\n  // ============ Constructor ============\n  constructor(\n    uint32 _domain,\n    uint32 _mirrorDomain,\n    address _amb,\n    address _rootManager,\n    address _mirrorConnector,\n    uint256 _processGas,\n    uint256 _reserveGas,\n    uint256 _delayBlocks,\n    address _merkle,\n    address _watcherManager,\n    uint256 _mirrorChainId,\n    uint256 _gasCap\n  )\n    SpokeConnector(\n      _domain,\n      _mirrorDomain,\n      _amb,\n      _rootManager,\n      _mirrorConnector,\n      _processGas,\n      _reserveGas,\n      _delayBlocks,\n      _merkle,\n      _watcherManager\n    )\n    BaseMultichain(_amb, _mirrorChainId, _gasCap)\n  {}\n\n  // ============ Admin fns ============\n\n  /**\n   * @notice Should not be able to renounce ownership\n   */\n  function renounceOwnership() public virtual override(SpokeConnector, ProposedOwnable) onlyOwner {}\n\n  // ============ Private fns ============\n  /**\n   * @dev Handles an incoming `aggregateRoot`\n   * NOTE: Could store latest root sent and prove aggregate root\n   */\n  function _processMessage(bytes memory _data) internal override(Connector, BaseMultichain) {\n    // enforce this came from connector on l1\n    require(_verifySender(mirrorConnector), \"!mirrorConnector\");\n    // sanity check: data length\n    require(_data.length == 32, \"!length\");\n    // set the aggregate root for BSC + access control\n    receiveAggregateRoot(bytes32(_data));\n  }\n\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\n    _sendMessage(AMB, mirrorConnector, _data, _encodedData);\n  }\n\n  function _verifySender(address _expected) internal view override returns (bool) {\n    return _verifySender(AMB, _expected);\n  }\n}\n"},"contracts/messaging/connectors/optimism/BaseOptimism.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {OptimismAmb} from \"../../interfaces/ambs/optimism/OptimismAmb.sol\";\n\nimport {GasCap} from \"../GasCap.sol\";\n\nabstract contract BaseOptimism is GasCap {\n  // ============ Constructor ============\n  constructor(uint256 _gasCap) GasCap(_gasCap) {}\n\n  // ============ Override Fns ============\n  function _verifySender(address _amb, address _expected) internal view returns (bool) {\n    require(msg.sender == _amb, \"!bridge\");\n    return OptimismAmb(_amb).xDomainMessageSender() == _expected;\n  }\n\n  /**\n   * @notice Using Optimism AMB, the gas is provided to `sendMessage` as an encoded uint\n   */\n  function _getGasFromEncoded(bytes memory _encodedData) internal view returns (uint256 _gas) {\n    // Should include gas info in specialized calldata\n    require(_encodedData.length == 32, \"!data length\");\n\n    // Get the gas, if it is more than the cap use the cap\n    _gas = _getGas(abi.decode(_encodedData, (uint256)));\n  }\n}\n"},"contracts/messaging/connectors/optimism/lib/BytesUtils.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n/**\n * @title BytesUtils\n *\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/utils/Lib_BytesUtils.sol\n */\nlibrary BytesUtils {\n  /**********************\n   * Internal Functions *\n   **********************/\n\n  function slice(\n    bytes memory _bytes,\n    uint256 _start,\n    uint256 _length\n  ) internal pure returns (bytes memory) {\n    require(_length + 31 >= _length, \"slice_overflow\");\n    require(_start + _length >= _start, \"slice_overflow\");\n    require(_bytes.length >= _start + _length, \"slice_outOfBounds\");\n\n    bytes memory tempBytes;\n\n    assembly {\n      switch iszero(_length)\n      case 0 {\n        // Get a location of some free memory and store it in tempBytes as\n        // Solidity does for memory variables.\n        tempBytes := mload(0x40)\n\n        // The first word of the slice result is potentially a partial\n        // word read from the original array. To read it, we calculate\n        // the length of that partial word and start copying that many\n        // bytes into the array. The first word we copy will start with\n        // data we don't care about, but the last `lengthmod` bytes will\n        // land at the beginning of the contents of the new array. When\n        // we're done copying, we overwrite the full first word with\n        // the actual length of the slice.\n        let lengthmod := and(_length, 31)\n\n        // The multiplication in the next line is necessary\n        // because when slicing multiples of 32 bytes (lengthmod == 0)\n        // the following copy loop was copying the origin's length\n        // and then ending prematurely not copying everything it should.\n        let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)))\n        let end := add(mc, _length)\n\n        for {\n          // The multiplication in the next line has the same exact purpose\n          // as the one above.\n          let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start)\n        } lt(mc, end) {\n          mc := add(mc, 0x20)\n          cc := add(cc, 0x20)\n        } {\n          mstore(mc, mload(cc))\n        }\n\n        mstore(tempBytes, _length)\n\n        //update free-memory pointer\n        //allocating the array padded to 32 bytes like the compiler does now\n        mstore(0x40, and(add(mc, 31), not(31)))\n      }\n      //if we want a zero-length slice let's just return a zero-length array\n      default {\n        tempBytes := mload(0x40)\n\n        //zero out the 32 bytes slice we are about to return\n        //we need to do it because Solidity does not garbage collect\n        mstore(tempBytes, 0)\n\n        mstore(0x40, add(tempBytes, 0x20))\n      }\n    }\n\n    return tempBytes;\n  }\n\n  function slice(bytes memory _bytes, uint256 _start) internal pure returns (bytes memory) {\n    if (_start >= _bytes.length) {\n      return bytes(\"\");\n    }\n\n    return slice(_bytes, _start, _bytes.length - _start);\n  }\n\n  function toBytes32(bytes memory _bytes) internal pure returns (bytes32) {\n    if (_bytes.length < 32) {\n      bytes32 ret;\n      assembly {\n        ret := mload(add(_bytes, 32))\n      }\n      return ret;\n    }\n\n    return abi.decode(_bytes, (bytes32)); // will truncate if input length > 32 bytes\n  }\n\n  function toUint256(bytes memory _bytes) internal pure returns (uint256) {\n    return uint256(toBytes32(_bytes));\n  }\n\n  function toNibbles(bytes memory _bytes) internal pure returns (bytes memory) {\n    bytes memory nibbles = new bytes(_bytes.length * 2);\n\n    uint256 len = _bytes.length;\n    for (uint256 i = 0; i < len; ) {\n      nibbles[i * 2] = _bytes[i] >> 4;\n      nibbles[i * 2 + 1] = bytes1(uint8(_bytes[i]) % 16);\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    return nibbles;\n  }\n\n  function fromNibbles(bytes memory _bytes) internal pure returns (bytes memory) {\n    bytes memory ret = new bytes(_bytes.length / 2);\n\n    uint256 len = ret.length;\n    for (uint256 i = 0; i < len; ) {\n      ret[i] = (_bytes[i * 2] << 4) | (_bytes[i * 2 + 1]);\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    return ret;\n  }\n\n  function equal(bytes memory _bytes, bytes memory _other) internal pure returns (bool) {\n    return keccak256(_bytes) == keccak256(_other);\n  }\n}\n"},"contracts/messaging/connectors/optimism/lib/MerkleTrie.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n/* Library Imports */\nimport {BytesUtils} from \"./BytesUtils.sol\";\nimport {RLPReader} from \"./RLPReader.sol\";\n\n/**\n * @title MerkleTrie\n *\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/trie/Lib_MerkleTrie.sol\n */\nlibrary MerkleTrie {\n  /*******************\n   * Data Structures *\n   *******************/\n\n  enum NodeType {\n    BranchNode,\n    ExtensionNode,\n    LeafNode\n  }\n\n  struct TrieNode {\n    bytes encoded;\n    RLPReader.RLPItem[] decoded;\n  }\n\n  /**********************\n   * Contract Constants *\n   **********************/\n\n  // TREE_RADIX determines the number of elements per branch node.\n  uint256 constant TREE_RADIX = 16;\n  // Branch nodes have TREE_RADIX elements plus an additional `value` slot.\n  uint256 constant BRANCH_NODE_LENGTH = TREE_RADIX + 1;\n  // Leaf nodes and extension nodes always have two elements, a `path` and a `value`.\n  uint256 constant LEAF_OR_EXTENSION_NODE_LENGTH = 2;\n\n  // Prefixes are prepended to the `path` within a leaf or extension node and\n  // allow us to differentiate between the two node types. `ODD` or `EVEN` is\n  // determined by the number of nibbles within the unprefixed `path`. If the\n  // number of nibbles if even, we need to insert an extra padding nibble so\n  // the resulting prefixed `path` has an even number of nibbles.\n  uint8 constant PREFIX_EXTENSION_EVEN = 0;\n  uint8 constant PREFIX_EXTENSION_ODD = 1;\n  uint8 constant PREFIX_LEAF_EVEN = 2;\n  uint8 constant PREFIX_LEAF_ODD = 3;\n\n  // Just a utility constant. RLP represents `NULL` as 0x80.\n  bytes1 constant RLP_NULL = bytes1(0x80);\n\n  /**********************\n   * Internal Functions *\n   **********************/\n\n  /**\n   * @notice Verifies a proof that a given key/value pair is present in the\n   * Merkle trie.\n   * @param _key Key of the node to search for, as a hex string.\n   * @param _value Value of the node to search for, as a hex string.\n   * @param _proof Merkle trie inclusion proof for the desired node. Unlike\n   * traditional Merkle trees, this proof is executed top-down and consists\n   * of a list of RLP-encoded nodes that make a path down to the target node.\n   * @param _root Known root of the Merkle trie. Used to verify that the\n   * included proof is correctly constructed.\n   * @return _verified `true` if the k/v pair exists in the trie, `false` otherwise.\n   */\n  function verifyInclusionProof(\n    bytes memory _key,\n    bytes memory _value,\n    bytes memory _proof,\n    bytes32 _root\n  ) internal pure returns (bool _verified) {\n    (bool exists, bytes memory value) = get(_key, _proof, _root);\n\n    return (exists && BytesUtils.equal(_value, value));\n  }\n\n  /**\n   * @notice Retrieves the value associated with a given key.\n   * @param _key Key to search for, as hex bytes.\n   * @param _proof Merkle trie inclusion proof for the key.\n   * @param _root Known root of the Merkle trie.\n   * @return _exists Whether or not the key exists.\n   * @return _value Value of the key if it exists.\n   */\n  function get(\n    bytes memory _key,\n    bytes memory _proof,\n    bytes32 _root\n  ) internal pure returns (bool _exists, bytes memory _value) {\n    TrieNode[] memory proof = _parseProof(_proof);\n    (uint256 pathLength, bytes memory keyRemainder, bool isFinalNode) = _walkNodePath(proof, _key, _root);\n\n    bool exists = keyRemainder.length == 0;\n\n    require(exists || isFinalNode, \"Provided proof is invalid.\");\n\n    bytes memory value = exists ? _getNodeValue(proof[pathLength - 1]) : bytes(\"\");\n\n    return (exists, value);\n  }\n\n  /*********************\n   * Private Functions *\n   *********************/\n\n  /**\n   * @notice Walks through a proof using a provided key.\n   * @param _proof Inclusion proof to walk through.\n   * @param _key Key to use for the walk.\n   * @param _root Known root of the trie.\n   * @return _pathLength Length of the final path\n   * @return _keyRemainder Portion of the key remaining after the walk.\n   * @return _isFinalNode Whether or not we've hit a dead end.\n   */\n  function _walkNodePath(\n    TrieNode[] memory _proof,\n    bytes memory _key,\n    bytes32 _root\n  )\n    private\n    pure\n    returns (\n      uint256 _pathLength,\n      bytes memory _keyRemainder,\n      bool _isFinalNode\n    )\n  {\n    uint256 pathLength = 0;\n    bytes memory key = BytesUtils.toNibbles(_key);\n\n    bytes32 currentNodeID = _root;\n    uint256 currentKeyIndex = 0;\n    uint256 currentKeyIncrement = 0;\n    TrieNode memory currentNode;\n\n    // Proof is top-down, so we start at the first element (root).\n    uint256 len = _proof.length;\n    for (uint256 i = 0; i < len; ) {\n      currentNode = _proof[i];\n      currentKeyIndex += currentKeyIncrement;\n\n      // Keep track of the proof elements we actually need.\n      // It's expensive to resize arrays, so this simply reduces gas costs.\n      pathLength += 1;\n\n      if (currentKeyIndex == 0) {\n        // First proof element is always the root node.\n        require(keccak256(currentNode.encoded) == currentNodeID, \"Invalid root hash\");\n      } else if (currentNode.encoded.length > 32 - 1) {\n        // Nodes 32 bytes or larger are hashed inside branch nodes.\n        require(keccak256(currentNode.encoded) == currentNodeID, \"Invalid large internal hash\");\n      } else {\n        // Nodes smaller than 31 bytes aren't hashed.\n        require(BytesUtils.toBytes32(currentNode.encoded) == currentNodeID, \"Invalid internal node hash\");\n      }\n\n      // unreachable code if it's below the if statement under this\n      unchecked {\n        ++i;\n      }\n\n      if (currentNode.decoded.length == BRANCH_NODE_LENGTH) {\n        if (currentKeyIndex == key.length) {\n          // We've hit the end of the key\n          // meaning the value should be within this branch node.\n          break;\n        } else {\n          // We're not at the end of the key yet.\n          // Figure out what the next node ID should be and continue.\n          uint8 branchKey = uint8(key[currentKeyIndex]);\n          RLPReader.RLPItem memory nextNode = currentNode.decoded[branchKey];\n          currentNodeID = _getNodeID(nextNode);\n          currentKeyIncrement = 1;\n          continue;\n        }\n      } else if (currentNode.decoded.length == LEAF_OR_EXTENSION_NODE_LENGTH) {\n        bytes memory path = _getNodePath(currentNode);\n        uint8 prefix = uint8(path[0]);\n        uint8 offset = 2 - (prefix % 2);\n        bytes memory pathRemainder = BytesUtils.slice(path, offset);\n        bytes memory keyRemainder = BytesUtils.slice(key, currentKeyIndex);\n        uint256 sharedNibbleLength = _getSharedNibbleLength(pathRemainder, keyRemainder);\n\n        if (prefix == PREFIX_LEAF_EVEN || prefix == PREFIX_LEAF_ODD) {\n          if (pathRemainder.length == sharedNibbleLength && keyRemainder.length == sharedNibbleLength) {\n            // The key within this leaf matches our key exactly.\n            // Increment the key index to reflect that we have no remainder.\n            currentKeyIndex += sharedNibbleLength;\n          }\n\n          // We've hit a leaf node, so our next node should be NULL.\n          currentNodeID = bytes32(RLP_NULL);\n          break;\n        } else if (prefix == PREFIX_EXTENSION_EVEN || prefix == PREFIX_EXTENSION_ODD) {\n          if (sharedNibbleLength != pathRemainder.length) {\n            // Our extension node is not identical to the remainder.\n            // We've hit the end of this path\n            // updates will need to modify this extension.\n            currentNodeID = bytes32(RLP_NULL);\n            break;\n          } else {\n            // Our extension shares some nibbles.\n            // Carry on to the next node.\n            currentNodeID = _getNodeID(currentNode.decoded[1]);\n            currentKeyIncrement = sharedNibbleLength;\n            continue;\n          }\n        } else {\n          revert(\"Received a node with an unknown prefix\");\n        }\n      } else {\n        revert(\"Received an unparseable node.\");\n      }\n    }\n\n    // If our node ID is NULL, then we're at a dead end.\n    bool isFinalNode = currentNodeID == bytes32(RLP_NULL);\n    return (pathLength, BytesUtils.slice(key, currentKeyIndex), isFinalNode);\n  }\n\n  /**\n   * @notice Parses an RLP-encoded proof into something more useful.\n   * @param _proof RLP-encoded proof to parse.\n   * @return _parsed Proof parsed into easily accessible structs.\n   */\n  function _parseProof(bytes memory _proof) private pure returns (TrieNode[] memory _parsed) {\n    RLPReader.RLPItem[] memory nodes = RLPReader.readList(_proof);\n    TrieNode[] memory proof = new TrieNode[](nodes.length);\n\n    uint256 len = nodes.length;\n    for (uint256 i = 0; i < len; ) {\n      bytes memory encoded = RLPReader.readBytes(nodes[i]);\n      proof[i] = TrieNode({encoded: encoded, decoded: RLPReader.readList(encoded)});\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    return proof;\n  }\n\n  /**\n   * @notice Picks out the ID for a node. Node ID is referred to as the\n   * \"hash\" within the specification, but nodes < 32 bytes are not actually\n   * hashed.\n   * @param _node Node to pull an ID for.\n   * @return _nodeID ID for the node, depending on the size of its contents.\n   */\n  function _getNodeID(RLPReader.RLPItem memory _node) private pure returns (bytes32 _nodeID) {\n    bytes memory nodeID;\n\n    if (_node.length < 32) {\n      // Nodes smaller than 32 bytes are RLP encoded.\n      nodeID = RLPReader.readRawBytes(_node);\n    } else {\n      // Nodes 32 bytes or larger are hashed.\n      nodeID = RLPReader.readBytes(_node);\n    }\n\n    return BytesUtils.toBytes32(nodeID);\n  }\n\n  /**\n   * @notice Gets the path for a leaf or extension node.\n   * @param _node Node to get a path for.\n   * @return _path Node path, converted to an array of nibbles.\n   */\n  function _getNodePath(TrieNode memory _node) private pure returns (bytes memory _path) {\n    return BytesUtils.toNibbles(RLPReader.readBytes(_node.decoded[0]));\n  }\n\n  /**\n   * @notice Gets the path for a node.\n   * @param _node Node to get a value for.\n   * @return _value Node value, as hex bytes.\n   */\n  function _getNodeValue(TrieNode memory _node) private pure returns (bytes memory _value) {\n    return RLPReader.readBytes(_node.decoded[_node.decoded.length - 1]);\n  }\n\n  /**\n   * @notice Utility; determines the number of nibbles shared between two\n   * nibble arrays.\n   * @param _a First nibble array.\n   * @param _b Second nibble array.\n   * @return _shared Number of shared nibbles.\n   */\n  function _getSharedNibbleLength(bytes memory _a, bytes memory _b) private pure returns (uint256 _shared) {\n    uint256 i = 0;\n    while (_a.length > i && _b.length > i && _a[i] == _b[i]) {\n      i++;\n    }\n    return i;\n  }\n}\n"},"contracts/messaging/connectors/optimism/lib/OVMCodec.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n/* Library Imports */\nimport {RLPReader} from \"./RLPReader.sol\";\n\n/**\n * @title OVMCodec\n *\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/codec/Lib_OVMCodec.sol\n */\nlibrary OVMCodec {\n  /***********\n   * Structs *\n   ***********/\n\n  struct EVMAccount {\n    uint256 nonce;\n    uint256 balance;\n    bytes32 storageRoot;\n    bytes32 codeHash;\n  }\n\n  /**\n   * @notice Decodes an RLP-encoded account state into a useful struct.\n   * @param _encoded RLP-encoded account state.\n   * @return Account state struct.\n   */\n  function decodeEVMAccount(bytes memory _encoded) internal pure returns (EVMAccount memory) {\n    RLPReader.RLPItem[] memory accountState = RLPReader.readList(_encoded);\n\n    return\n      EVMAccount({\n        nonce: RLPReader.readUint256(accountState[0]),\n        balance: RLPReader.readUint256(accountState[1]),\n        storageRoot: RLPReader.readBytes32(accountState[2]),\n        codeHash: RLPReader.readBytes32(accountState[3])\n      });\n  }\n}\n"},"contracts/messaging/connectors/optimism/lib/PredeployAddresses.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n/**\n * @title PredeployAddresses\n *\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/constants/Lib_PredeployAddresses.sol\n */\nlibrary PredeployAddresses {\n  address internal constant L2_TO_L1_MESSAGE_PASSER = 0x4200000000000000000000000000000000000000;\n  address internal constant L1_MESSAGE_SENDER = 0x4200000000000000000000000000000000000001;\n  address internal constant DEPLOYER_WHITELIST = 0x4200000000000000000000000000000000000002;\n  address payable internal constant OVM_ETH = payable(0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000);\n  address internal constant L2_CROSS_DOMAIN_MESSENGER = 0x4200000000000000000000000000000000000007;\n  address internal constant LIB_ADDRESS_MANAGER = 0x4200000000000000000000000000000000000008;\n  address internal constant PROXY_EOA = 0x4200000000000000000000000000000000000009;\n  address internal constant L2_STANDARD_BRIDGE = 0x4200000000000000000000000000000000000010;\n  address internal constant SEQUENCER_FEE_WALLET = 0x4200000000000000000000000000000000000011;\n  address internal constant L2_STANDARD_TOKEN_FACTORY = 0x4200000000000000000000000000000000000012;\n  address internal constant L1_BLOCK_NUMBER = 0x4200000000000000000000000000000000000013;\n}\n"},"contracts/messaging/connectors/optimism/lib/RLPReader.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n/**\n * @title RLPReader\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/rlp/Lib_RLPReader.sol\n */\nlibrary RLPReader {\n  /*************\n   * Constants *\n   *************/\n\n  uint256 internal constant MAX_LIST_LENGTH = 32;\n\n  /*********\n   * Enums *\n   *********/\n\n  enum RLPItemType {\n    DATA_ITEM,\n    LIST_ITEM\n  }\n\n  /***********\n   * Structs *\n   ***********/\n\n  struct RLPItem {\n    uint256 length;\n    uint256 ptr;\n  }\n\n  /**********************\n   * Internal Functions *\n   **********************/\n\n  /**\n   * Converts bytes to a reference to memory position and length.\n   * @param _in Input bytes to convert.\n   * @return Output memory reference.\n   */\n  function toRLPItem(bytes memory _in) internal pure returns (RLPItem memory) {\n    uint256 ptr;\n    assembly {\n      ptr := add(_in, 32)\n    }\n\n    return RLPItem({length: _in.length, ptr: ptr});\n  }\n\n  /**\n   * Reads an RLP list value into a list of RLP items.\n   * @param _in RLP list value.\n   * @return Decoded RLP list items.\n   */\n  function readList(RLPItem memory _in) internal pure returns (RLPItem[] memory) {\n    (uint256 listOffset, , RLPItemType itemType) = _decodeLength(_in);\n\n    require(itemType == RLPItemType.LIST_ITEM, \"Invalid RLP list value.\");\n\n    // Solidity in-memory arrays can't be increased in size, but *can* be decreased in size by\n    // writing to the length. Since we can't know the number of RLP items without looping over\n    // the entire input, we'd have to loop twice to accurately size this array. It's easier to\n    // simply set a reasonable maximum list length and decrease the size before we finish.\n    RLPItem[] memory out = new RLPItem[](MAX_LIST_LENGTH);\n\n    uint256 itemCount = 0;\n    uint256 offset = listOffset;\n    while (offset < _in.length) {\n      require(itemCount < MAX_LIST_LENGTH, \"Provided RLP list exceeds max list length.\");\n\n      (uint256 itemOffset, uint256 itemLength, ) = _decodeLength(\n        RLPItem({length: _in.length - offset, ptr: _in.ptr + offset})\n      );\n\n      out[itemCount] = RLPItem({length: itemLength + itemOffset, ptr: _in.ptr + offset});\n\n      itemCount += 1;\n      offset += itemOffset + itemLength;\n    }\n\n    // Decrease the array size to match the actual item count.\n    assembly {\n      mstore(out, itemCount)\n    }\n\n    return out;\n  }\n\n  /**\n   * Reads an RLP list value into a list of RLP items.\n   * @param _in RLP list value.\n   * @return Decoded RLP list items.\n   */\n  function readList(bytes memory _in) internal pure returns (RLPItem[] memory) {\n    return readList(toRLPItem(_in));\n  }\n\n  /**\n   * Reads an RLP bytes value into bytes.\n   * @param _in RLP bytes value.\n   * @return Decoded bytes.\n   */\n  function readBytes(RLPItem memory _in) internal pure returns (bytes memory) {\n    (uint256 itemOffset, uint256 itemLength, RLPItemType itemType) = _decodeLength(_in);\n\n    require(itemType == RLPItemType.DATA_ITEM, \"Invalid RLP bytes value.\");\n\n    return _copy(_in.ptr, itemOffset, itemLength);\n  }\n\n  /**\n   * Reads an RLP bytes value into bytes.\n   * @param _in RLP bytes value.\n   * @return Decoded bytes.\n   */\n  function readBytes(bytes memory _in) internal pure returns (bytes memory) {\n    return readBytes(toRLPItem(_in));\n  }\n\n  /**\n   * Reads an RLP string value into a string.\n   * @param _in RLP string value.\n   * @return Decoded string.\n   */\n  function readString(RLPItem memory _in) internal pure returns (string memory) {\n    return string(readBytes(_in));\n  }\n\n  /**\n   * Reads an RLP string value into a string.\n   * @param _in RLP string value.\n   * @return Decoded string.\n   */\n  function readString(bytes memory _in) internal pure returns (string memory) {\n    return readString(toRLPItem(_in));\n  }\n\n  /**\n   * Reads an RLP bytes32 value into a bytes32.\n   * @param _in RLP bytes32 value.\n   * @return Decoded bytes32.\n   */\n  function readBytes32(RLPItem memory _in) internal pure returns (bytes32) {\n    // instead of <= 33\n    require(_in.length < 33 + 1, \"Invalid RLP bytes32 value.\");\n\n    (uint256 itemOffset, uint256 itemLength, RLPItemType itemType) = _decodeLength(_in);\n\n    require(itemType == RLPItemType.DATA_ITEM, \"Invalid RLP bytes32 value.\");\n\n    uint256 ptr = _in.ptr + itemOffset;\n    bytes32 out;\n    assembly {\n      out := mload(ptr)\n\n      // Shift the bytes over to match the item size.\n      if lt(itemLength, 32) {\n        out := div(out, exp(256, sub(32, itemLength)))\n      }\n    }\n\n    return out;\n  }\n\n  /**\n   * Reads an RLP bytes32 value into a bytes32.\n   * @param _in RLP bytes32 value.\n   * @return Decoded bytes32.\n   */\n  function readBytes32(bytes memory _in) internal pure returns (bytes32) {\n    return readBytes32(toRLPItem(_in));\n  }\n\n  /**\n   * Reads an RLP uint256 value into a uint256.\n   * @param _in RLP uint256 value.\n   * @return Decoded uint256.\n   */\n  function readUint256(RLPItem memory _in) internal pure returns (uint256) {\n    return uint256(readBytes32(_in));\n  }\n\n  /**\n   * Reads an RLP uint256 value into a uint256.\n   * @param _in RLP uint256 value.\n   * @return Decoded uint256.\n   */\n  function readUint256(bytes memory _in) internal pure returns (uint256) {\n    return readUint256(toRLPItem(_in));\n  }\n\n  /**\n   * Reads an RLP bool value into a bool.\n   * @param _in RLP bool value.\n   * @return Decoded bool.\n   */\n  function readBool(RLPItem memory _in) internal pure returns (bool) {\n    require(_in.length == 1, \"Invalid RLP boolean value.\");\n\n    uint256 ptr = _in.ptr;\n    uint256 out;\n    assembly {\n      out := byte(0, mload(ptr))\n    }\n\n    require(out == 0 || out == 1, \"Lib_RLPReader: Invalid RLP boolean value, must be 0 or 1\");\n\n    return out != 0;\n  }\n\n  /**\n   * Reads an RLP bool value into a bool.\n   * @param _in RLP bool value.\n   * @return Decoded bool.\n   */\n  function readBool(bytes memory _in) internal pure returns (bool) {\n    return readBool(toRLPItem(_in));\n  }\n\n  /**\n   * Reads an RLP address value into a address.\n   * @param _in RLP address value.\n   * @return Decoded address.\n   */\n  function readAddress(RLPItem memory _in) internal pure returns (address) {\n    if (_in.length == 1) {\n      return address(0);\n    }\n\n    require(_in.length == 21, \"Invalid RLP address value.\");\n\n    return address(uint160(readUint256(_in)));\n  }\n\n  /**\n   * Reads an RLP address value into a address.\n   * @param _in RLP address value.\n   * @return Decoded address.\n   */\n  function readAddress(bytes memory _in) internal pure returns (address) {\n    return readAddress(toRLPItem(_in));\n  }\n\n  /**\n   * Reads the raw bytes of an RLP item.\n   * @param _in RLP item to read.\n   * @return Raw RLP bytes.\n   */\n  function readRawBytes(RLPItem memory _in) internal pure returns (bytes memory) {\n    return _copy(_in);\n  }\n\n  /*********************\n   * Private Functions *\n   *********************/\n\n  /**\n   * Decodes the length of an RLP item.\n   * @param _in RLP item to decode.\n   * @return Offset of the encoded data.\n   * @return Length of the encoded data.\n   * @return RLP item type (LIST_ITEM or DATA_ITEM).\n   */\n  function _decodeLength(RLPItem memory _in)\n    private\n    pure\n    returns (\n      uint256,\n      uint256,\n      RLPItemType\n    )\n  {\n    require(_in.length > 0, \"RLP item cannot be null.\");\n\n    uint256 ptr = _in.ptr;\n    uint256 prefix;\n    assembly {\n      prefix := byte(0, mload(ptr))\n    }\n\n    if (prefix < 0x7f + 1) {\n      // Single byte.\n\n      return (0, 1, RLPItemType.DATA_ITEM);\n    } else if (prefix < 0xb7 + 1) {\n      // Short string.\n\n      // slither-disable-next-line variable-scope\n      uint256 strLen = prefix - 0x80;\n\n      require(_in.length > strLen, \"Invalid RLP short string.\");\n\n      return (1, strLen, RLPItemType.DATA_ITEM);\n    } else if (prefix < 0xbf + 1) {\n      // Long string.\n      uint256 lenOfStrLen = prefix - 0xb7;\n\n      require(_in.length > lenOfStrLen, \"Invalid RLP long string length.\");\n\n      uint256 strLen;\n      assembly {\n        // Pick out the string length.\n        strLen := div(mload(add(ptr, 1)), exp(256, sub(32, lenOfStrLen)))\n      }\n\n      require(_in.length > lenOfStrLen + strLen, \"Invalid RLP long string.\");\n\n      return (1 + lenOfStrLen, strLen, RLPItemType.DATA_ITEM);\n    } else if (prefix < 0xf7 + 1) {\n      // Short list.\n      // slither-disable-next-line variable-scope\n      uint256 listLen = prefix - 0xc0;\n\n      require(_in.length > listLen, \"Invalid RLP short list.\");\n\n      return (1, listLen, RLPItemType.LIST_ITEM);\n    } else {\n      // Long list.\n      uint256 lenOfListLen = prefix - 0xf7;\n\n      require(_in.length > lenOfListLen, \"Invalid RLP long list length.\");\n\n      uint256 listLen;\n      assembly {\n        // Pick out the list length.\n        listLen := div(mload(add(ptr, 1)), exp(256, sub(32, lenOfListLen)))\n      }\n\n      require(_in.length > lenOfListLen + listLen, \"Invalid RLP long list.\");\n\n      return (1 + lenOfListLen, listLen, RLPItemType.LIST_ITEM);\n    }\n  }\n\n  /**\n   * Copies the bytes from a memory location.\n   * @param _src Pointer to the location to read from.\n   * @param _offset Offset to start reading from.\n   * @param _length Number of bytes to read.\n   * @return Copied bytes.\n   */\n  function _copy(\n    uint256 _src,\n    uint256 _offset,\n    uint256 _length\n  ) private pure returns (bytes memory) {\n    bytes memory out = new bytes(_length);\n    if (out.length == 0) {\n      return out;\n    }\n\n    uint256 src = _src + _offset;\n    uint256 dest;\n    assembly {\n      dest := add(out, 32)\n    }\n\n    // Copy over as many complete words as we can.\n    for (uint256 i = 0; i < _length / 32; ) {\n      assembly {\n        mstore(dest, mload(src))\n      }\n\n      src += 32;\n      dest += 32;\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    // Pick out the remaining bytes.\n    uint256 mask;\n    unchecked {\n      mask = 256**(32 - (_length % 32)) - 1;\n    }\n\n    assembly {\n      mstore(dest, or(and(mload(src), not(mask)), and(mload(dest), mask)))\n    }\n    return out;\n  }\n\n  /**\n   * Copies an RLP item into bytes.\n   * @param _in RLP item to copy.\n   * @return Copied bytes.\n   */\n  function _copy(RLPItem memory _in) private pure returns (bytes memory) {\n    return _copy(_in.ptr, 0, _in.length);\n  }\n}\n"},"contracts/messaging/connectors/optimism/lib/SecureMerkleTrie.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n/* Library Imports */\nimport {MerkleTrie} from \"./MerkleTrie.sol\";\n\n/**\n * @title SecureMerkleTrie\n *\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/trie/Lib_SecureMerkleTrie.sol\n */\nlibrary SecureMerkleTrie {\n  /**********************\n   * Internal Functions *\n   **********************/\n\n  /**\n   * @notice Verifies a proof that a given key/value pair is present in the\n   * Merkle trie.\n   * @param _key Key of the node to search for, as a hex string.\n   * @param _value Value of the node to search for, as a hex string.\n   * @param _proof Merkle trie inclusion proof for the desired node. Unlike\n   * traditional Merkle trees, this proof is executed top-down and consists\n   * of a list of RLP-encoded nodes that make a path down to the target node.\n   * @param _root Known root of the Merkle trie. Used to verify that the\n   * included proof is correctly constructed.\n   * @return _verified `true` if the k/v pair exists in the trie, `false` otherwise.\n   */\n  function verifyInclusionProof(\n    bytes memory _key,\n    bytes memory _value,\n    bytes memory _proof,\n    bytes32 _root\n  ) internal pure returns (bool _verified) {\n    bytes memory key = _getSecureKey(_key);\n    return MerkleTrie.verifyInclusionProof(key, _value, _proof, _root);\n  }\n\n  /**\n   * @notice Retrieves the value associated with a given key.\n   * @param _key Key to search for, as hex bytes.\n   * @param _proof Merkle trie inclusion proof for the key.\n   * @param _root Known root of the Merkle trie.\n   * @return _exists Whether or not the key exists.\n   * @return _value Value of the key if it exists.\n   */\n  function get(\n    bytes memory _key,\n    bytes memory _proof,\n    bytes32 _root\n  ) internal pure returns (bool _exists, bytes memory _value) {\n    bytes memory key = _getSecureKey(_key);\n    return MerkleTrie.get(key, _proof, _root);\n  }\n\n  /*********************\n   * Private Functions *\n   *********************/\n\n  /**\n   * Computes the secure counterpart to a key.\n   * @param _key Key to get a secure key from.\n   * @return _secureKey Secure version of the key.\n   */\n  function _getSecureKey(bytes memory _key) private pure returns (bytes memory _secureKey) {\n    return abi.encodePacked(keccak256(_key));\n  }\n}\n"},"contracts/messaging/connectors/optimism/OptimismHubConnector.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {IRootManager} from \"../../interfaces/IRootManager.sol\";\nimport {OptimismAmb} from \"../../interfaces/ambs/optimism/OptimismAmb.sol\";\nimport {IStateCommitmentChain, L2MessageInclusionProof} from \"../../interfaces/ambs/optimism/IStateCommitmentChain.sol\";\n\nimport {TypedMemView} from \"../../../shared/libraries/TypedMemView.sol\";\n\nimport {HubConnector} from \"../HubConnector.sol\";\nimport {Connector} from \"../Connector.sol\";\n\nimport {PredeployAddresses} from \"./lib/PredeployAddresses.sol\";\nimport {OVMCodec} from \"./lib/OVMCodec.sol\";\nimport {SecureMerkleTrie} from \"./lib/SecureMerkleTrie.sol\";\n\nimport {BaseOptimism} from \"./BaseOptimism.sol\";\n\ncontract OptimismHubConnector is HubConnector, BaseOptimism {\n  // ============ Libraries ============\n  using TypedMemView for bytes;\n  using TypedMemView for bytes29;\n\n  // ============ Storage ============\n  IStateCommitmentChain public immutable stateCommitmentChain;\n\n  // NOTE: This is needed because we need to track the roots we've\n  // already sent across chains. When sending an optimism message, we send calldata\n  // for Connector.processMessage. At any point these messages could be processed\n  // before the timeout using `processFromRoot` or after the timeout using `process`\n  // we track the roots sent here to ensure we process each root once\n  mapping(bytes32 => bool) public processed;\n\n  // ============ Constructor ============\n  constructor(\n    uint32 _domain,\n    uint32 _mirrorDomain,\n    address _amb,\n    address _rootManager,\n    address _mirrorConnector,\n    address _stateCommitmentChain,\n    uint256 _gasCap\n  ) HubConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector) BaseOptimism(_gasCap) {\n    stateCommitmentChain = IStateCommitmentChain(_stateCommitmentChain);\n  }\n\n  // ============ Override Fns ============\n  function _verifySender(address _expected) internal view override returns (bool) {\n    return _verifySender(AMB, _expected);\n  }\n\n  /**\n   * @dev Sends `aggregateRoot` to messaging on l2\n   */\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\n    // Should always be dispatching the aggregate root\n    require(_data.length == 32, \"!length\");\n    // Get the calldata\n    bytes memory _calldata = abi.encodeWithSelector(Connector.processMessage.selector, _data);\n    // Dispatch message\n    OptimismAmb(AMB).sendMessage(mirrorConnector, _calldata, uint32(gasCap));\n  }\n\n  // DO NOT override _processMessage, should revert from `Connector` class. All messages must use the\n  // `processMessageFromRoot` flow.\n\n  /**\n   * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/9973c1da3211e094a180a8a96ba9f8bb1ab1b389/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol#L165\n   */\n  function processMessageFromRoot(\n    address _target,\n    address _sender,\n    bytes memory _message,\n    uint256 _messageNonce,\n    L2MessageInclusionProof memory _proof\n  ) external {\n    // verify the sender is the l2 contract\n    require(_sender == mirrorConnector, \"!mirrorConnector\");\n\n    // verify the target is this contract\n    require(_target == address(this), \"!this\");\n\n    // Get the encoded data\n    bytes memory xDomainData = _encodeXDomainCalldata(_target, _sender, _message, _messageNonce);\n\n    require(_verifyXDomainMessage(xDomainData, _proof), \"!proof\");\n\n    // NOTE: optimism seems to pad the calldata sent in to include more than the expected\n    // 36 bytes, i.e. in this transaction:\n    // https://blockscout.com/optimism/goerli/tx/0x440fda036d28eb547394a8689af90c5342a00a8ca2ab5117f2b85f54d1416ddd/logs\n    // the corresponding _message is:\n    // 0x4ff746f60000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002027ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757\n    //\n    // this means the length check and byte parsing used in the `ArbitrumHubConnector` would\n    // not work here. Instead, take the back 32 bytes of the string\n\n    // NOTE: TypedMemView only loads 32-byte chunks onto stack, which is fine in this case\n    bytes29 _view = _message.ref(0);\n    bytes32 root = _view.index(_view.len() - 32, 32);\n\n    if (!processed[root]) {\n      // set root to processed\n      processed[root] = true;\n      // update the root on the root manager\n      IRootManager(ROOT_MANAGER).aggregate(MIRROR_DOMAIN, root);\n\n      emit MessageProcessed(abi.encode(root), msg.sender);\n    } // otherwise root was already sent to root manager\n  }\n\n  /**\n   * Verifies that the given message is valid.\n   * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/9973c1da3211e094a180a8a96ba9f8bb1ab1b389/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol#L283-L288\n   * @param _xDomainCalldata Calldata to verify.\n   * @param _proof Inclusion proof for the message.\n   * @return Whether or not the provided message is valid.\n   */\n  function _verifyXDomainMessage(bytes memory _xDomainCalldata, L2MessageInclusionProof memory _proof)\n    internal\n    view\n    returns (bool)\n  {\n    return (_verifyStateRootProof(_proof) && _verifyStorageProof(_xDomainCalldata, _proof));\n  }\n\n  /**\n   * Verifies that the state root within an inclusion proof is valid.\n   * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/9973c1da3211e094a180a8a96ba9f8bb1ab1b389/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol#L295-L311\n   * @param _proof Message inclusion proof.\n   * @return Whether or not the provided proof is valid.\n   */\n  function _verifyStateRootProof(L2MessageInclusionProof memory _proof) internal view returns (bool) {\n    return\n      stateCommitmentChain.verifyStateCommitment(_proof.stateRoot, _proof.stateRootBatchHeader, _proof.stateRootProof);\n  }\n\n  /**\n   * Verifies that the storage proof within an inclusion proof is valid.\n   * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/9973c1da3211e094a180a8a96ba9f8bb1ab1b389/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol#L313-L357\n   * @param _xDomainCalldata Encoded message calldata.\n   * @param _proof Message inclusion proof.\n   * @return Whether or not the provided proof is valid.\n   */\n  function _verifyStorageProof(bytes memory _xDomainCalldata, L2MessageInclusionProof memory _proof)\n    internal\n    pure\n    returns (bool)\n  {\n    bytes32 storageKey = keccak256(\n      abi.encodePacked(\n        keccak256(abi.encodePacked(_xDomainCalldata, PredeployAddresses.L2_CROSS_DOMAIN_MESSENGER)),\n        uint256(0)\n      )\n    );\n\n    (bool exists, bytes memory encodedMessagePassingAccount) = SecureMerkleTrie.get(\n      abi.encodePacked(PredeployAddresses.L2_TO_L1_MESSAGE_PASSER),\n      _proof.stateTrieWitness,\n      _proof.stateRoot\n    );\n\n    require(exists == true, \"Message passing predeploy has not been initialized or invalid proof provided.\");\n\n    OVMCodec.EVMAccount memory account = OVMCodec.decodeEVMAccount(encodedMessagePassingAccount);\n\n    return\n      SecureMerkleTrie.verifyInclusionProof(\n        abi.encodePacked(storageKey),\n        abi.encodePacked(uint8(1)),\n        _proof.storageTrieWitness,\n        account.storageRoot\n      );\n  }\n\n  /**\n   * Generates the correct cross domain calldata for a message.\n   * @dev taken from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/bridge/Lib_CrossDomainUtils.sol\n   * @param _target Target contract address.\n   * @param _sender Message sender address.\n   * @param _message Message to send to the target.\n   * @param _messageNonce Nonce for the provided message.\n   * @return ABI encoded cross domain calldata.\n   */\n  function _encodeXDomainCalldata(\n    address _target,\n    address _sender,\n    bytes memory _message,\n    uint256 _messageNonce\n  ) internal pure returns (bytes memory) {\n    return\n      abi.encodeWithSignature(\"relayMessage(address,address,bytes,uint256)\", _target, _sender, _message, _messageNonce);\n  }\n}\n"},"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {OptimismAmb} from \"../../interfaces/ambs/optimism/OptimismAmb.sol\";\n\nimport {SpokeConnector, ProposedOwnable} from \"../SpokeConnector.sol\";\nimport {Connector} from \"../Connector.sol\";\n\nimport {BaseOptimism} from \"./BaseOptimism.sol\";\n\ncontract OptimismSpokeConnector is SpokeConnector, BaseOptimism {\n  // ============ Constructor ============\n  constructor(\n    uint32 _domain,\n    uint32 _mirrorDomain,\n    address _amb,\n    address _rootManager,\n    address _mirrorConnector,\n    uint256 _processGas,\n    uint256 _reserveGas,\n    uint256 _delayBlocks,\n    address _merkle,\n    address _watcherManager,\n    uint256 _gasCap // gasLimit of message call on L1\n  )\n    SpokeConnector(\n      _domain,\n      _mirrorDomain,\n      _amb,\n      _rootManager,\n      _mirrorConnector,\n      _processGas,\n      _reserveGas,\n      _delayBlocks,\n      _merkle,\n      _watcherManager\n    )\n    BaseOptimism(_gasCap)\n  {}\n\n  // ============ Override Fns ============\n  function _verifySender(address _expected) internal view override returns (bool) {\n    return _verifySender(AMB, _expected);\n  }\n\n  /**\n   * @notice Should not be able to renounce ownership\n   */\n  function renounceOwnership() public virtual override(SpokeConnector, ProposedOwnable) onlyOwner {}\n\n  /**\n   * @dev Sends `outboundRoot` to root manager on l1\n   */\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\n    // Should always be sending the outbound root\n    require(_data.length == 32, \"!data length\");\n    bytes memory _calldata = abi.encodeWithSelector(Connector.processMessage.selector, _data);\n    OptimismAmb(AMB).sendMessage(mirrorConnector, _calldata, uint32(_getGasFromEncoded(_encodedData)));\n  }\n\n  /**\n   * @dev Handles an incoming `aggregateRoot`\n   * NOTE: Could store latest root sent and prove aggregate root\n   */\n  function _processMessage(bytes memory _data) internal override {\n    // enforce this came from connector on l2\n    require(_verifySender(mirrorConnector), \"!mirrorConnector\");\n    // get the data (should be the aggregate root)\n    require(_data.length == 32, \"!length\");\n    // set the aggregate root\n    receiveAggregateRoot(bytes32(_data));\n  }\n}\n"},"contracts/messaging/connectors/polygon/lib/ExitPayloadReader.sol":{"content":"// SPDX-License-Identifier: MIT\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/ExitPayloadReader.sol\npragma solidity 0.8.17;\n\nimport {RLPReader} from \"./RLPReader.sol\";\n\nlibrary ExitPayloadReader {\n  using RLPReader for bytes;\n  using RLPReader for RLPReader.RLPItem;\n\n  uint8 constant WORD_SIZE = 32;\n\n  struct ExitPayload {\n    RLPReader.RLPItem[] data;\n  }\n\n  struct Receipt {\n    RLPReader.RLPItem[] data;\n    bytes raw;\n    uint256 logIndex;\n  }\n\n  struct Log {\n    RLPReader.RLPItem data;\n    RLPReader.RLPItem[] list;\n  }\n\n  struct LogTopics {\n    RLPReader.RLPItem[] data;\n  }\n\n  // copy paste of private copy() from RLPReader to avoid changing of existing contracts\n  function copy(\n    uint256 src,\n    uint256 dest,\n    uint256 len\n  ) private pure {\n    if (len == 0) return;\n\n    // copy as many word sizes as possible\n    for (; len > WORD_SIZE - 1; len -= WORD_SIZE) {\n      assembly {\n        mstore(dest, mload(src))\n      }\n\n      src += WORD_SIZE;\n      dest += WORD_SIZE;\n    }\n\n    if (len == 0) return;\n\n    // left over bytes. Mask is used to remove unwanted bytes from the word\n    uint256 mask = 256**(WORD_SIZE - len) - 1;\n    assembly {\n      let srcpart := and(mload(src), not(mask)) // zero out src\n      let destpart := and(mload(dest), mask) // retrieve the bytes\n      mstore(dest, or(destpart, srcpart))\n    }\n  }\n\n  function toExitPayload(bytes memory data) internal pure returns (ExitPayload memory) {\n    RLPReader.RLPItem[] memory payloadData = data.toRlpItem().toList();\n\n    return ExitPayload(payloadData);\n  }\n\n  function getHeaderNumber(ExitPayload memory payload) internal pure returns (uint256) {\n    return payload.data[0].toUint();\n  }\n\n  function getBlockProof(ExitPayload memory payload) internal pure returns (bytes memory) {\n    return payload.data[1].toBytes();\n  }\n\n  function getBlockNumber(ExitPayload memory payload) internal pure returns (uint256) {\n    return payload.data[2].toUint();\n  }\n\n  function getBlockTime(ExitPayload memory payload) internal pure returns (uint256) {\n    return payload.data[3].toUint();\n  }\n\n  function getTxRoot(ExitPayload memory payload) internal pure returns (bytes32) {\n    return bytes32(payload.data[4].toUint());\n  }\n\n  function getReceiptRoot(ExitPayload memory payload) internal pure returns (bytes32) {\n    return bytes32(payload.data[5].toUint());\n  }\n\n  function getReceipt(ExitPayload memory payload) internal pure returns (Receipt memory receipt) {\n    receipt.raw = payload.data[6].toBytes();\n    RLPReader.RLPItem memory receiptItem = receipt.raw.toRlpItem();\n\n    if (receiptItem.isList()) {\n      // legacy tx\n      receipt.data = receiptItem.toList();\n    } else {\n      // pop first byte before parsting receipt\n      bytes memory typedBytes = receipt.raw;\n      bytes memory result = new bytes(typedBytes.length - 1);\n      uint256 srcPtr;\n      uint256 destPtr;\n      assembly {\n        srcPtr := add(33, typedBytes)\n        destPtr := add(0x20, result)\n      }\n\n      copy(srcPtr, destPtr, result.length);\n      receipt.data = result.toRlpItem().toList();\n    }\n\n    receipt.logIndex = getReceiptLogIndex(payload);\n    return receipt;\n  }\n\n  function getReceiptProof(ExitPayload memory payload) internal pure returns (bytes memory) {\n    return payload.data[7].toBytes();\n  }\n\n  function getBranchMaskAsBytes(ExitPayload memory payload) internal pure returns (bytes memory) {\n    return payload.data[8].toBytes();\n  }\n\n  function getBranchMaskAsUint(ExitPayload memory payload) internal pure returns (uint256) {\n    return payload.data[8].toUint();\n  }\n\n  function getReceiptLogIndex(ExitPayload memory payload) internal pure returns (uint256) {\n    return payload.data[9].toUint();\n  }\n\n  // Receipt methods\n  function toBytes(Receipt memory receipt) internal pure returns (bytes memory) {\n    return receipt.raw;\n  }\n\n  function getLog(Receipt memory receipt) internal pure returns (Log memory) {\n    RLPReader.RLPItem memory logData = receipt.data[3].toList()[receipt.logIndex];\n    return Log(logData, logData.toList());\n  }\n\n  // Log methods\n  function getEmitter(Log memory log) internal pure returns (address) {\n    return RLPReader.toAddress(log.list[0]);\n  }\n\n  function getTopics(Log memory log) internal pure returns (LogTopics memory) {\n    return LogTopics(log.list[1].toList());\n  }\n\n  function getData(Log memory log) internal pure returns (bytes memory) {\n    return log.list[2].toBytes();\n  }\n\n  function toRlpBytes(Log memory log) internal pure returns (bytes memory) {\n    return log.data.toRlpBytes();\n  }\n\n  // LogTopics methods\n  function getField(LogTopics memory topics, uint256 index) internal pure returns (RLPReader.RLPItem memory) {\n    return topics.data[index];\n  }\n}\n"},"contracts/messaging/connectors/polygon/lib/Merkle.sol":{"content":"// SPDX-License-Identifier: MIT\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/Merkle.sol\npragma solidity 0.8.17;\n\nlibrary Merkle {\n  function checkMembership(\n    bytes32 leaf,\n    uint256 index,\n    bytes32 rootHash,\n    bytes memory proof\n  ) internal pure returns (bool) {\n    require(proof.length % 32 == 0, \"Invalid proof length\");\n    uint256 proofHeight = proof.length / 32;\n    // Proof of size n means, height of the tree is n+1.\n    // In a tree of height n+1, max #leafs possible is 2 ^ n\n    require(index < 2**proofHeight, \"Leaf index is too big\");\n\n    bytes32 proofElement;\n    bytes32 computedHash = leaf;\n    uint256 len = proof.length + 1;\n    for (uint256 i = 32; i < len; ) {\n      assembly {\n        proofElement := mload(add(proof, i))\n      }\n\n      if (index % 2 == 0) {\n        computedHash = keccak256(abi.encodePacked(computedHash, proofElement));\n      } else {\n        computedHash = keccak256(abi.encodePacked(proofElement, computedHash));\n      }\n\n      index = index / 2;\n\n      unchecked {\n        i += 32;\n      }\n    }\n    return computedHash == rootHash;\n  }\n}\n"},"contracts/messaging/connectors/polygon/lib/MerklePatriciaProof.sol":{"content":"// SPDX-License-Identifier: MIT\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/MerklePatriciaProof.sol\npragma solidity 0.8.17;\n\nimport {RLPReader} from \"./RLPReader.sol\";\n\nlibrary MerklePatriciaProof {\n  /*\n   * @dev Verifies a merkle patricia proof.\n   * @param value The terminating value in the trie.\n   * @param encodedPath The path in the trie leading to value.\n   * @param rlpParentNodes The rlp encoded stack of nodes.\n   * @param root The root hash of the trie.\n   * @return The boolean validity of the proof.\n   */\n  function verify(\n    bytes memory value,\n    bytes memory encodedPath,\n    bytes memory rlpParentNodes,\n    bytes32 root\n  ) internal pure returns (bool) {\n    RLPReader.RLPItem memory item = RLPReader.toRlpItem(rlpParentNodes);\n    RLPReader.RLPItem[] memory parentNodes = RLPReader.toList(item);\n\n    bytes memory currentNode;\n    RLPReader.RLPItem[] memory currentNodeList;\n\n    bytes32 nodeKey = root;\n    uint256 pathPtr = 0;\n\n    bytes memory path = _getNibbleArray(encodedPath);\n    if (path.length == 0) {\n      return false;\n    }\n\n    uint256 len = parentNodes.length;\n    for (uint256 i = 0; i < len; ) {\n      if (pathPtr > path.length) {\n        return false;\n      }\n\n      currentNode = RLPReader.toRlpBytes(parentNodes[i]);\n      if (nodeKey != keccak256(currentNode)) {\n        return false;\n      }\n      currentNodeList = RLPReader.toList(parentNodes[i]);\n\n      if (currentNodeList.length == 17) {\n        if (pathPtr == path.length) {\n          if (keccak256(RLPReader.toBytes(currentNodeList[16])) == keccak256(value)) {\n            return true;\n          } else {\n            return false;\n          }\n        }\n\n        uint8 nextPathNibble = uint8(path[pathPtr]);\n        if (nextPathNibble > 16) {\n          return false;\n        }\n        nodeKey = bytes32(RLPReader.toUintStrict(currentNodeList[nextPathNibble]));\n        pathPtr += 1;\n      } else if (currentNodeList.length == 2) {\n        uint256 traversed = _nibblesToTraverse(RLPReader.toBytes(currentNodeList[0]), path, pathPtr);\n        if (pathPtr + traversed == path.length) {\n          //leaf node\n          if (keccak256(RLPReader.toBytes(currentNodeList[1])) == keccak256(value)) {\n            return true;\n          } else {\n            return false;\n          }\n        }\n\n        //extension node\n        if (traversed == 0) {\n          return false;\n        }\n\n        pathPtr += traversed;\n        nodeKey = bytes32(RLPReader.toUintStrict(currentNodeList[1]));\n      } else {\n        return false;\n      }\n\n      unchecked {\n        ++i;\n      }\n    }\n  }\n\n  function _nibblesToTraverse(\n    bytes memory encodedPartialPath,\n    bytes memory path,\n    uint256 pathPtr\n  ) private pure returns (uint256) {\n    uint256 len = 0;\n    // encodedPartialPath has elements that are each two hex characters (1 byte), but partialPath\n    // and slicedPath have elements that are each one hex character (1 nibble)\n    bytes memory partialPath = _getNibbleArray(encodedPartialPath);\n    bytes memory slicedPath = new bytes(partialPath.length);\n\n    // pathPtr counts nibbles in path\n    // partialPath.length is a number of nibbles\n    uint256 _len = pathPtr + partialPath.length;\n    for (uint256 i = pathPtr; i < _len; ) {\n      bytes1 pathNibble = path[i];\n      slicedPath[i - pathPtr] = pathNibble;\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    if (keccak256(partialPath) == keccak256(slicedPath)) {\n      len = partialPath.length;\n    } else {\n      len = 0;\n    }\n    return len;\n  }\n\n  // bytes b must be hp encoded\n  function _getNibbleArray(bytes memory b) internal pure returns (bytes memory) {\n    bytes memory nibbles = \"\";\n    if (b.length > 0) {\n      uint8 offset;\n      uint8 hpNibble = uint8(_getNthNibbleOfBytes(0, b));\n      if (hpNibble == 1 || hpNibble == 3) {\n        nibbles = new bytes(b.length * 2 - 1);\n        bytes1 oddNibble = _getNthNibbleOfBytes(1, b);\n        nibbles[0] = oddNibble;\n        offset = 1;\n      } else {\n        nibbles = new bytes(b.length * 2 - 2);\n        offset = 0;\n      }\n\n      uint256 len = nibbles.length;\n      for (uint256 i = offset; i < len; ) {\n        nibbles[i] = _getNthNibbleOfBytes(i - offset + 2, b);\n\n        unchecked {\n          ++i;\n        }\n      }\n    }\n    return nibbles;\n  }\n\n  function _getNthNibbleOfBytes(uint256 n, bytes memory str) private pure returns (bytes1) {\n    return bytes1(n % 2 == 0 ? uint8(str[n / 2]) / 0x10 : uint8(str[n / 2]) % 0x10);\n  }\n}\n"},"contracts/messaging/connectors/polygon/lib/RLPReader.sol":{"content":"// SPDX-License-Identifier: MIT\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/RLPReader.sol\npragma solidity 0.8.17;\n\nlibrary RLPReader {\n  uint8 constant STRING_SHORT_START = 0x80;\n  uint8 constant STRING_LONG_START = 0xb8;\n  uint8 constant LIST_SHORT_START = 0xc0;\n  uint8 constant LIST_LONG_START = 0xf8;\n  uint8 constant WORD_SIZE = 32;\n\n  struct RLPItem {\n    uint256 len;\n    uint256 memPtr;\n  }\n\n  struct Iterator {\n    RLPItem item; // Item that's being iterated over.\n    uint256 nextPtr; // Position of the next item in the list.\n  }\n\n  /*\n   * @dev Returns the next element in the iteration. Reverts if it has not next element.\n   * @param self The iterator.\n   * @return The next element in the iteration.\n   */\n  function next(Iterator memory self) internal pure returns (RLPItem memory) {\n    require(hasNext(self));\n\n    uint256 ptr = self.nextPtr;\n    uint256 itemLength = _itemLength(ptr);\n    self.nextPtr = ptr + itemLength;\n\n    return RLPItem(itemLength, ptr);\n  }\n\n  /*\n   * @dev Returns true if the iteration has more elements.\n   * @param self The iterator.\n   * @return true if the iteration has more elements.\n   */\n  function hasNext(Iterator memory self) internal pure returns (bool) {\n    RLPItem memory item = self.item;\n    return self.nextPtr < item.memPtr + item.len;\n  }\n\n  /*\n   * @param item RLP encoded bytes\n   */\n  function toRlpItem(bytes memory item) internal pure returns (RLPItem memory) {\n    uint256 memPtr;\n    assembly {\n      memPtr := add(item, 0x20)\n    }\n\n    return RLPItem(item.length, memPtr);\n  }\n\n  /*\n   * @dev Create an iterator. Reverts if item is not a list.\n   * @param self The RLP item.\n   * @return An 'Iterator' over the item.\n   */\n  function iterator(RLPItem memory self) internal pure returns (Iterator memory) {\n    require(isList(self));\n\n    uint256 ptr = self.memPtr + _payloadOffset(self.memPtr);\n    return Iterator(self, ptr);\n  }\n\n  /*\n   * @param item RLP encoded bytes\n   */\n  function rlpLen(RLPItem memory item) internal pure returns (uint256) {\n    return item.len;\n  }\n\n  /*\n   * @param item RLP encoded bytes\n   */\n  function payloadLen(RLPItem memory item) internal pure returns (uint256) {\n    return item.len - _payloadOffset(item.memPtr);\n  }\n\n  /*\n   * @param item RLP encoded list in bytes\n   */\n  function toList(RLPItem memory item) internal pure returns (RLPItem[] memory) {\n    require(isList(item));\n\n    uint256 items = numItems(item);\n    RLPItem[] memory result = new RLPItem[](items);\n\n    uint256 memPtr = item.memPtr + _payloadOffset(item.memPtr);\n    uint256 dataLen;\n    for (uint256 i = 0; i < items; ) {\n      dataLen = _itemLength(memPtr);\n      result[i] = RLPItem(dataLen, memPtr);\n      memPtr = memPtr + dataLen;\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    return result;\n  }\n\n  // @return indicator whether encoded payload is a list. negate this function call for isData.\n  function isList(RLPItem memory item) internal pure returns (bool) {\n    if (item.len == 0) return false;\n\n    uint8 byte0;\n    uint256 memPtr = item.memPtr;\n    assembly {\n      byte0 := byte(0, mload(memPtr))\n    }\n\n    if (byte0 < LIST_SHORT_START) return false;\n    return true;\n  }\n\n  /*\n   * @dev A cheaper version of keccak256(toRlpBytes(item)) that avoids copying memory.\n   * @return keccak256 hash of RLP encoded bytes.\n   */\n  function rlpBytesKeccak256(RLPItem memory item) internal pure returns (bytes32) {\n    uint256 ptr = item.memPtr;\n    uint256 len = item.len;\n    bytes32 result;\n    assembly {\n      result := keccak256(ptr, len)\n    }\n    return result;\n  }\n\n  function payloadLocation(RLPItem memory item) internal pure returns (uint256, uint256) {\n    uint256 offset = _payloadOffset(item.memPtr);\n    uint256 memPtr = item.memPtr + offset;\n    uint256 len = item.len - offset; // data length\n    return (memPtr, len);\n  }\n\n  /*\n   * @dev A cheaper version of keccak256(toBytes(item)) that avoids copying memory.\n   * @return keccak256 hash of the item payload.\n   */\n  function payloadKeccak256(RLPItem memory item) internal pure returns (bytes32) {\n    (uint256 memPtr, uint256 len) = payloadLocation(item);\n    bytes32 result;\n    assembly {\n      result := keccak256(memPtr, len)\n    }\n    return result;\n  }\n\n  /** RLPItem conversions into data types **/\n\n  // @returns raw rlp encoding in bytes\n  function toRlpBytes(RLPItem memory item) internal pure returns (bytes memory) {\n    bytes memory result = new bytes(item.len);\n    if (result.length == 0) return result;\n\n    uint256 ptr;\n    assembly {\n      ptr := add(0x20, result)\n    }\n\n    copy(item.memPtr, ptr, item.len);\n    return result;\n  }\n\n  // any non-zero byte is considered true\n  function toBoolean(RLPItem memory item) internal pure returns (bool) {\n    require(item.len == 1);\n    uint256 result;\n    uint256 memPtr = item.memPtr;\n    assembly {\n      result := byte(0, mload(memPtr))\n    }\n\n    return result == 0 ? false : true;\n  }\n\n  function toAddress(RLPItem memory item) internal pure returns (address) {\n    // 1 byte for the length prefix\n    require(item.len == 21);\n\n    return address(uint160(toUint(item)));\n  }\n\n  function toUint(RLPItem memory item) internal pure returns (uint256) {\n    require(item.len > 0 && item.len < 33 + 1);\n\n    uint256 offset = _payloadOffset(item.memPtr);\n    uint256 len = item.len - offset;\n\n    uint256 result;\n    uint256 memPtr = item.memPtr + offset;\n    assembly {\n      result := mload(memPtr)\n\n      // shfit to the correct location if neccesary\n      if lt(len, 32) {\n        result := div(result, exp(256, sub(32, len)))\n      }\n    }\n\n    return result;\n  }\n\n  // enforces 32 byte length\n  function toUintStrict(RLPItem memory item) internal pure returns (uint256) {\n    // one byte prefix\n    require(item.len == 33);\n\n    uint256 result;\n    uint256 memPtr = item.memPtr + 1;\n    assembly {\n      result := mload(memPtr)\n    }\n\n    return result;\n  }\n\n  function toBytes(RLPItem memory item) internal pure returns (bytes memory) {\n    require(item.len > 0);\n\n    uint256 offset = _payloadOffset(item.memPtr);\n    uint256 len = item.len - offset; // data length\n    bytes memory result = new bytes(len);\n\n    uint256 destPtr;\n    assembly {\n      destPtr := add(0x20, result)\n    }\n\n    copy(item.memPtr + offset, destPtr, len);\n    return result;\n  }\n\n  /*\n   * Private Helpers\n   */\n\n  // @return number of payload items inside an encoded list.\n  function numItems(RLPItem memory item) private pure returns (uint256) {\n    if (item.len == 0) return 0;\n\n    uint256 count = 0;\n    uint256 currPtr = item.memPtr + _payloadOffset(item.memPtr);\n    uint256 endPtr = item.memPtr + item.len;\n    while (currPtr < endPtr) {\n      currPtr = currPtr + _itemLength(currPtr); // skip over an item\n      count++;\n    }\n\n    return count;\n  }\n\n  // @return entire rlp item byte length\n  function _itemLength(uint256 memPtr) private pure returns (uint256) {\n    uint256 itemLen;\n    uint256 byte0;\n    assembly {\n      byte0 := byte(0, mload(memPtr))\n    }\n\n    if (byte0 < STRING_SHORT_START) itemLen = 1;\n    else if (byte0 < STRING_LONG_START) itemLen = byte0 - STRING_SHORT_START + 1;\n    else if (byte0 < LIST_SHORT_START) {\n      assembly {\n        let byteLen := sub(byte0, 0xb7) // # of bytes the actual length is\n        memPtr := add(memPtr, 1) // skip over the first byte\n        /* 32 byte word size */\n        let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to get the len\n        itemLen := add(dataLen, add(byteLen, 1))\n      }\n    } else if (byte0 < LIST_LONG_START) {\n      itemLen = byte0 - LIST_SHORT_START + 1;\n    } else {\n      assembly {\n        let byteLen := sub(byte0, 0xf7)\n        memPtr := add(memPtr, 1)\n\n        let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to the correct length\n        itemLen := add(dataLen, add(byteLen, 1))\n      }\n    }\n\n    return itemLen;\n  }\n\n  // @return number of bytes until the data\n  function _payloadOffset(uint256 memPtr) private pure returns (uint256) {\n    uint256 byte0;\n    assembly {\n      byte0 := byte(0, mload(memPtr))\n    }\n\n    if (byte0 < STRING_SHORT_START) return 0;\n    else if (byte0 < STRING_LONG_START || (byte0 > LIST_SHORT_START - 1 && byte0 < LIST_LONG_START)) return 1;\n    else if (byte0 < LIST_SHORT_START)\n      // being explicit\n      return byte0 - (STRING_LONG_START - 1) + 1;\n    else return byte0 - (LIST_LONG_START - 1) + 1;\n  }\n\n  /*\n   * @param src Pointer to source\n   * @param dest Pointer to destination\n   * @param len Amount of memory to copy from the source\n   */\n  function copy(\n    uint256 src,\n    uint256 dest,\n    uint256 len\n  ) private pure {\n    if (len == 0) return;\n\n    // copy as many word sizes as possible\n    for (; len > WORD_SIZE - 1; len -= WORD_SIZE) {\n      assembly {\n        mstore(dest, mload(src))\n      }\n\n      src += WORD_SIZE;\n      dest += WORD_SIZE;\n    }\n\n    if (len == 0) return;\n\n    // left over bytes. Mask is used to remove unwanted bytes from the word\n    uint256 mask = 256**(WORD_SIZE - len) - 1;\n\n    assembly {\n      let srcpart := and(mload(src), not(mask)) // zero out src\n      let destpart := and(mload(dest), mask) // retrieve the bytes\n      mstore(dest, or(destpart, srcpart))\n    }\n  }\n}\n"},"contracts/messaging/connectors/polygon/PolygonHubConnector.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {IRootManager} from \"../../interfaces/IRootManager.sol\";\n\nimport {FxBaseRootTunnel} from \"./tunnel/FxBaseRootTunnel.sol\";\n\nimport {HubConnector} from \"../HubConnector.sol\";\n\ncontract PolygonHubConnector is HubConnector, FxBaseRootTunnel {\n  // ============ Constructor ============\n  constructor(\n    uint32 _domain,\n    uint32 _mirrorDomain,\n    address _amb,\n    address _rootManager,\n    address _mirrorConnector,\n    address _checkPointManager\n  )\n    HubConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector)\n    FxBaseRootTunnel(_checkPointManager, _amb)\n  {}\n\n  // ============ Private fns ============\n\n  function _verifySender(address _expected) internal view override returns (bool) {\n    // NOTE: always return false on polygon\n    return false;\n  }\n\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\n    // Should not include specialized calldata\n    require(_encodedData.length == 0, \"!data length\");\n    _sendMessageToChild(_data);\n  }\n\n  function _processMessageFromChild(bytes memory message) internal override {\n    // NOTE: crosschain sender is not directly exposed by the child message\n\n    // do not need any additional sender or origin checks here since the proof contains inclusion proofs of the snapshots\n\n    // get the data (should be the aggregate root)\n    require(message.length == 32, \"!length\");\n    // update the root on the root manager\n    IRootManager(ROOT_MANAGER).aggregate(MIRROR_DOMAIN, bytes32(message));\n\n    emit MessageProcessed(message, msg.sender);\n  }\n\n  // DO NOT override _processMessage, should revert from `Connector` class. All messages must use the\n  // `_processMessageFromChild` flow.\n\n  function _setMirrorConnector(address _mirrorConnector) internal override {\n    // NOTE: FxBaseRootTunnel has the following code in their `setFxChildTunnel`:\n    // ```\n    // require(fxChildTunnel == address(0x0), \"FxBaseRootTunnel: CHILD_TUNNEL_ALREADY_SET\");\n    // ```\n    // Which means this function will revert if updating the `mirrorConnector`. In that case, in\n    // changes  the\n    // hub connector should also be redeployed\n    super._setMirrorConnector(_mirrorConnector);\n\n    setFxChildTunnel(_mirrorConnector);\n  }\n}\n"},"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {FxBaseChildTunnel} from \"./tunnel/FxBaseChildTunnel.sol\";\n\nimport {SpokeConnector} from \"../SpokeConnector.sol\";\n\n// address constant MUMBAI_FX_CHILD = 0xCf73231F28B7331BBe3124B907840A94851f9f11;\n// address constant GOERLI_CHECKPOINT_MANAGER = 0x2890bA17EfE978480615e330ecB65333b880928e;\n// address constant GOERLI_FX_ROOT = 0x3d1d3E34f7fB6D26245E6640E1c50710eFFf15bA;\n\n// address constant MAINNET_FX_CHILD = 0x8397259c983751DAf40400790063935a11afa28a;\n// address constant MAINNET_CHECKPOINT_MANAGER = 0x86E4Dc95c7FBdBf52e33D563BbDB00823894C287;\n// address constant MAINNET_FX_ROOT = 0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2;\n\ncontract PolygonSpokeConnector is SpokeConnector, FxBaseChildTunnel {\n  // ============ Constructor ============\n  constructor(\n    uint32 _domain,\n    uint32 _mirrorDomain,\n    address _amb,\n    address _rootManager,\n    address _mirrorConnector,\n    uint256 _processGas,\n    uint256 _reserveGas,\n    uint256 _delayBlocks,\n    address _merkle,\n    address _watcherManager\n  )\n    SpokeConnector(\n      _domain,\n      _mirrorDomain,\n      _amb,\n      _rootManager,\n      _mirrorConnector,\n      _processGas,\n      _reserveGas,\n      _delayBlocks,\n      _merkle,\n      _watcherManager\n    )\n    FxBaseChildTunnel(_amb)\n  {}\n\n  // ============ Private fns ============\n\n  function _verifySender(address _expected) internal pure override returns (bool) {\n    // NOTE: Always return false here because we cannot verify sender except in\n    // _processMessageFromRoot, where it is exposed in plaintext\n    return false;\n  }\n\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\n    // Should not include specialized calldata\n    require(_encodedData.length == 0, \"!data length\");\n    _sendMessageToRoot(_data);\n  }\n\n  function _processMessageFromRoot(\n    uint256, /* stateId */\n    address sender,\n    bytes memory data\n  ) internal override validateSender(sender) {\n    // NOTE: Don't need to check that sender is mirrorConnector as this is checked in validateSender()\n    // get the data (should be the aggregate root)\n    require(data.length == 32, \"!length\");\n    // update the aggregate root on the domain\n    receiveAggregateRoot(bytes32(data));\n\n    emit MessageProcessed(data, msg.sender);\n  }\n\n  // DO NOT override _processMessage, should revert from `Connector` class. All messages must use the\n  // `processMessageFromRoot` flow.\n\n  function _setMirrorConnector(address _mirrorConnector) internal override {\n    // NOTE: FxBaseChildTunnel has the following code in their `setFxRootTunnel`:\n    // ```\n    // require(setFxRootTunnel == address(0x0), \"FxBaseChildTunnel: ROOT_TUNNEL_ALREADY_SET\");\n    // ```\n    // Which means this function will revert if updating the `mirrorConnector`. In that case, in\n    // changes the spoke connector should also be redeployed\n    super._setMirrorConnector(_mirrorConnector);\n\n    setFxRootTunnel(_mirrorConnector);\n  }\n}\n"},"contracts/messaging/connectors/polygon/tunnel/FxBaseChildTunnel.sol":{"content":"// SPDX-License-Identifier: MIT\n// https://github.com/fx-portal/contracts/blob/main/contracts/tunnel/FxBaseChildTunnel.sol\npragma solidity 0.8.17;\n\n// IFxMessageProcessor represents interface to process message\ninterface IFxMessageProcessor {\n  function processMessageFromRoot(\n    uint256 stateId,\n    address rootMessageSender,\n    bytes calldata data\n  ) external;\n}\n\n/**\n * @notice Mock child tunnel contract to receive and send message from L2\n */\nabstract contract FxBaseChildTunnel is IFxMessageProcessor {\n  // MessageTunnel on L1 will get data from this event\n  event MessageSent(bytes message);\n\n  // fx child\n  address public fxChild;\n\n  // fx root tunnel\n  address public fxRootTunnel;\n\n  constructor(address _fxChild) {\n    fxChild = _fxChild;\n  }\n\n  // Sender must be fxRootTunnel in case of ERC20 tunnel\n  modifier validateSender(address sender) {\n    require(sender == fxRootTunnel, \"FxBaseChildTunnel: INVALID_SENDER_FROM_ROOT\");\n    _;\n  }\n\n  // set fxRootTunnel if not set already\n  function setFxRootTunnel(address _fxRootTunnel) internal virtual {\n    require(fxRootTunnel == address(0x0), \"FxBaseChildTunnel: ROOT_TUNNEL_ALREADY_SET\");\n    fxRootTunnel = _fxRootTunnel;\n  }\n\n  function processMessageFromRoot(\n    uint256 stateId,\n    address rootMessageSender,\n    bytes calldata data\n  ) external override {\n    require(msg.sender == fxChild, \"FxBaseChildTunnel: INVALID_SENDER\");\n    _processMessageFromRoot(stateId, rootMessageSender, data);\n  }\n\n  /**\n   * @notice Emit message that can be received on Root Tunnel\n   * @dev Call the internal function when need to emit message\n   * @param message bytes message that will be sent to Root Tunnel\n   * some message examples -\n   *   abi.encode(tokenId);\n   *   abi.encode(tokenId, tokenMetadata);\n   *   abi.encode(messageType, messageData);\n   */\n  function _sendMessageToRoot(bytes memory message) internal {\n    emit MessageSent(message);\n  }\n\n  /**\n   * @notice Process message received from Root Tunnel\n   * @dev function needs to be implemented to handle message as per requirement\n   * This is called by onStateReceive function.\n   * Since it is called via a system call, any event will not be emitted during its execution.\n   * @param stateId unique state id\n   * @param sender root message sender\n   * @param message bytes message that was sent from Root Tunnel\n   */\n  function _processMessageFromRoot(\n    uint256 stateId,\n    address sender,\n    bytes memory message\n  ) internal virtual;\n}\n"},"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol":{"content":"// SPDX-License-Identifier: MIT\n// https://github.com/fx-portal/contracts/blob/main/contracts/tunnel/FxBaseRootTunnel.sol\npragma solidity 0.8.17;\n\nimport {RLPReader} from \"../lib/RLPReader.sol\";\nimport {MerklePatriciaProof} from \"../lib/MerklePatriciaProof.sol\";\nimport {Merkle} from \"../lib/Merkle.sol\";\nimport \"../lib/ExitPayloadReader.sol\";\n\ninterface IFxStateSender {\n  function sendMessageToChild(address _receiver, bytes calldata _data) external;\n}\n\ncontract ICheckpointManager {\n  struct HeaderBlock {\n    bytes32 root;\n    uint256 start;\n    uint256 end;\n    uint256 createdAt;\n    address proposer;\n  }\n\n  /**\n   * @notice mapping of checkpoint header numbers to block details\n   * @dev These checkpoints are submited by plasma contracts\n   */\n  mapping(uint256 => HeaderBlock) public headerBlocks;\n}\n\nabstract contract FxBaseRootTunnel {\n  using RLPReader for RLPReader.RLPItem;\n  using Merkle for bytes32;\n  using ExitPayloadReader for bytes;\n  using ExitPayloadReader for ExitPayloadReader.ExitPayload;\n  using ExitPayloadReader for ExitPayloadReader.Log;\n  using ExitPayloadReader for ExitPayloadReader.LogTopics;\n  using ExitPayloadReader for ExitPayloadReader.Receipt;\n\n  // keccak256(MessageSent(bytes))\n  bytes32 public constant SEND_MESSAGE_EVENT_SIG = 0x8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036;\n\n  // state sender contract\n  IFxStateSender public fxRoot;\n  // root chain manager\n  ICheckpointManager public checkpointManager;\n  // child tunnel contract which receives and sends messages\n  address public fxChildTunnel;\n\n  // storage to avoid duplicate exits\n  mapping(bytes32 => bool) public processedExits;\n\n  constructor(address _checkpointManager, address _fxRoot) {\n    checkpointManager = ICheckpointManager(_checkpointManager);\n    fxRoot = IFxStateSender(_fxRoot);\n  }\n\n  // set fxChildTunnel if not set already\n  function setFxChildTunnel(address _fxChildTunnel) internal virtual {\n    require(fxChildTunnel == address(0x0), \"FxBaseRootTunnel: CHILD_TUNNEL_ALREADY_SET\");\n    fxChildTunnel = _fxChildTunnel;\n  }\n\n  /**\n   * @notice Send bytes message to Child Tunnel\n   * @param message bytes message that will be sent to Child Tunnel\n   * some message examples -\n   *   abi.encode(tokenId);\n   *   abi.encode(tokenId, tokenMetadata);\n   *   abi.encode(messageType, messageData);\n   */\n  function _sendMessageToChild(bytes memory message) internal {\n    fxRoot.sendMessageToChild(fxChildTunnel, message);\n  }\n\n  function _validateAndExtractMessage(bytes memory inputData) internal returns (bytes memory) {\n    ExitPayloadReader.ExitPayload memory payload = inputData.toExitPayload();\n\n    bytes memory branchMaskBytes = payload.getBranchMaskAsBytes();\n    uint256 blockNumber = payload.getBlockNumber();\n    // checking if exit has already been processed\n    // unique exit is identified using hash of (blockNumber, branchMask, receiptLogIndex)\n    bytes32 exitHash = keccak256(\n      abi.encodePacked(\n        blockNumber,\n        // first 2 nibbles are dropped while generating nibble array\n        // this allows branch masks that are valid but bypass exitHash check (changing first 2 nibbles only)\n        // so converting to nibble array and then hashing it\n        MerklePatriciaProof._getNibbleArray(branchMaskBytes),\n        payload.getReceiptLogIndex()\n      )\n    );\n    require(processedExits[exitHash] == false, \"FxRootTunnel: EXIT_ALREADY_PROCESSED\");\n    processedExits[exitHash] = true;\n\n    ExitPayloadReader.Receipt memory receipt = payload.getReceipt();\n    ExitPayloadReader.Log memory log = receipt.getLog();\n\n    // check child tunnel\n    require(fxChildTunnel == log.getEmitter(), \"FxRootTunnel: INVALID_FX_CHILD_TUNNEL\");\n\n    bytes32 receiptRoot = payload.getReceiptRoot();\n    // verify receipt inclusion\n    require(\n      MerklePatriciaProof.verify(receipt.toBytes(), branchMaskBytes, payload.getReceiptProof(), receiptRoot),\n      \"FxRootTunnel: INVALID_RECEIPT_PROOF\"\n    );\n\n    // verify checkpoint inclusion\n    _checkBlockMembershipInCheckpoint(\n      blockNumber,\n      payload.getBlockTime(),\n      payload.getTxRoot(),\n      receiptRoot,\n      payload.getHeaderNumber(),\n      payload.getBlockProof()\n    );\n\n    ExitPayloadReader.LogTopics memory topics = log.getTopics();\n\n    require(\n      bytes32(topics.getField(0).toUint()) == SEND_MESSAGE_EVENT_SIG, // topic0 is event sig\n      \"FxRootTunnel: INVALID_SIGNATURE\"\n    );\n\n    // received message data\n    bytes memory message = abi.decode(log.getData(), (bytes)); // event decodes params again, so decoding bytes to get message\n    return message;\n  }\n\n  function _checkBlockMembershipInCheckpoint(\n    uint256 blockNumber,\n    uint256 blockTime,\n    bytes32 txRoot,\n    bytes32 receiptRoot,\n    uint256 headerNumber,\n    bytes memory blockProof\n  ) private view returns (uint256) {\n    (bytes32 headerRoot, uint256 startBlock, , uint256 createdAt, ) = checkpointManager.headerBlocks(headerNumber);\n\n    require(\n      keccak256(abi.encodePacked(blockNumber, blockTime, txRoot, receiptRoot)).checkMembership(\n        blockNumber - startBlock,\n        headerRoot,\n        blockProof\n      ),\n      \"FxRootTunnel: INVALID_HEADER\"\n    );\n    return createdAt;\n  }\n\n  /**\n   * @notice receive message from  L2 to L1, validated by proof\n   * @dev This function verifies if the transaction actually happened on child chain\n   *\n   * @param inputData RLP encoded data of the reference tx containing following list of fields\n   *  0 - headerNumber - Checkpoint header block number containing the reference tx\n   *  1 - blockProof - Proof that the block header (in the child chain) is a leaf in the submitted merkle root\n   *  2 - blockNumber - Block number containing the reference tx on child chain\n   *  3 - blockTime - Reference tx block time\n   *  4 - txRoot - Transactions root of block\n   *  5 - receiptRoot - Receipts root of block\n   *  6 - receipt - Receipt of the reference transaction\n   *  7 - receiptProof - Merkle proof of the reference receipt\n   *  8 - branchMask - 32 bits denoting the path of receipt in merkle tree\n   *  9 - receiptLogIndex - Log Index to read from the receipt\n   */\n  function receiveMessage(bytes memory inputData) public virtual {\n    bytes memory message = _validateAndExtractMessage(inputData);\n    _processMessageFromChild(message);\n  }\n\n  /**\n   * @notice Process message received from Child Tunnel\n   * @dev function needs to be implemented to handle message as per requirement\n   * This is called by onStateReceive function.\n   * Since it is called via a system call, any event will not be emitted during its execution.\n   * @param message bytes message that was sent from Child Tunnel\n   */\n  function _processMessageFromChild(bytes memory message) internal virtual;\n}\n"},"contracts/messaging/connectors/SpokeConnector.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {ReentrancyGuard} from \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\nimport {Address} from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport {TypedMemView} from \"../../shared/libraries/TypedMemView.sol\";\nimport {ExcessivelySafeCall} from \"../../shared/libraries/ExcessivelySafeCall.sol\";\nimport {TypeCasts} from \"../../shared/libraries/TypeCasts.sol\";\n\nimport {MerkleLib} from \"../libraries/MerkleLib.sol\";\nimport {Message} from \"../libraries/Message.sol\";\nimport {RateLimited} from \"../libraries/RateLimited.sol\";\n\nimport {MerkleTreeManager} from \"../MerkleTreeManager.sol\";\nimport {WatcherClient} from \"../WatcherClient.sol\";\n\nimport {Connector, ProposedOwnable} from \"./Connector.sol\";\nimport {ConnectorManager} from \"./ConnectorManager.sol\";\n\n/**\n * @title SpokeConnector\n * @author Connext Labs, Inc.\n * @notice This contract implements the messaging functions needed on the spoke-side of a given AMB.\n * The SpokeConnector extends the HubConnector functionality by being able to send, store, and prove\n * messages.\n *\n * @dev If you are deploying this contract to mainnet, then the mirror values stored in the HubConnector\n * will be unused\n */\nabstract contract SpokeConnector is Connector, ConnectorManager, WatcherClient, RateLimited, ReentrancyGuard {\n  // ============ Libraries ============\n\n  using MerkleLib for MerkleLib.Tree;\n  using TypedMemView for bytes;\n  using TypedMemView for bytes29;\n  using Message for bytes29;\n\n  // ============ Events ============\n\n  event SenderAdded(address sender);\n\n  event SenderRemoved(address sender);\n\n  event AggregateRootReceived(bytes32 root);\n\n  event AggregateRootRemoved(bytes32 root);\n\n  event AggregateRootVerified(bytes32 indexed root);\n\n  event Dispatch(bytes32 leaf, uint256 index, bytes32 root, bytes message);\n\n  event Process(bytes32 leaf, bool success, bytes returnData);\n\n  event DelayBlocksUpdated(uint256 indexed updated, address caller);\n\n  /**\n   * @notice Emitted when funds are withdrawn by the admin\n   * @dev See comments in `withdrawFunds`\n   * @param to The recipient of the funds\n   * @param amount The amount withdrawn\n   */\n  event FundsWithdrawn(address indexed to, uint256 amount);\n\n  event MessageProven(bytes32 indexed leaf, bytes32 indexed aggregateRoot, uint256 aggregateIndex);\n\n  // ============ Structs ============\n\n  // Status of Message:\n  //   0 - None - message has not been proven or processed\n  //   1 - Proven - message inclusion proof has been validated\n  //   2 - Processed - message has been dispatched to recipient\n  enum MessageStatus {\n    None,\n    Proven,\n    Processed\n  }\n\n  /**\n   * Struct for submitting a proof for a given message. Used in `proveAndProcess` below.\n   * @param message Bytes of message to be processed. The hash of this message is considered the leaf.\n   * @param proof Merkle proof of inclusion for given leaf.\n   * @param index Index of leaf in home's merkle tree.\n   */\n  struct Proof {\n    bytes message;\n    bytes32[32] path;\n    uint256 index;\n  }\n\n  // ============ Public Storage ============\n\n  /**\n   * @notice Number of blocks to delay the processing of a message to allow for watchers to verify\n   * the validity and pause if necessary.\n   */\n  uint256 public delayBlocks;\n\n  /**\n   * @notice MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root\n   * will be sent crosschain to the hub for aggregation and redistribution.\n   */\n  MerkleTreeManager public immutable MERKLE;\n\n  /**\n   * @notice Minimum gas for processing a received message (reserved for handle)\n   */\n  uint256 public immutable PROCESS_GAS;\n\n  /**\n   * @notice Reserved gas (to ensure tx completes in case message processing runs out)\n   */\n  uint256 public immutable RESERVE_GAS;\n\n  /**\n   * @notice This will hold the commit block for incoming aggregateRoots from the hub chain. Once\n   * they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can\n   * be used for proving inclusion of crosschain messages.\n   *\n   * @dev NOTE: A commit block of 0 should be considered invalid (it is an empty entry in the\n   * mapping). We must ALWAYS ensure the value is not 0 before checking whether it has surpassed the\n   * verification period.\n   */\n  mapping(bytes32 => uint256) public pendingAggregateRoots;\n\n  /**\n   * @notice This tracks the roots of the aggregate tree containing outbound roots from all other\n   * supported domains. The current version is the one that is known to be past the delayBlocks\n   * time period.\n   * @dev This root is the root of the tree that is aggregated on mainnet (composed of all the roots\n   * of previous trees).\n   */\n  mapping(bytes32 => bool) public provenAggregateRoots;\n\n  /**\n   * @notice This tracks whether the root has been proven to exist within the given aggregate root.\n   * @dev Tracking this is an optimization so you dont have to prove inclusion of the same constituent\n   * root many times.\n   */\n  mapping(bytes32 => bool) public provenMessageRoots;\n\n  /**\n   * @notice This mapping records all message roots that have already been sent in order to prevent\n   * redundant message roots from being sent to hub.\n   */\n  mapping(bytes32 => bool) public sentMessageRoots;\n\n  /**\n   * @dev This is used for the `onlyAllowlistedSender` modifier, which gates who\n   * can send messages using `dispatch`.\n   */\n  mapping(address => bool) public allowlistedSenders;\n\n  /**\n   * @notice domain => next available nonce for the domain.\n   */\n  mapping(uint32 => uint32) public nonces;\n\n  /**\n   * @notice Mapping of message leaves to MessageStatus, keyed on leaf.\n   */\n  mapping(bytes32 => MessageStatus) public messages;\n\n  // ============ Modifiers ============\n\n  modifier onlyAllowlistedSender() {\n    require(allowlistedSenders[msg.sender], \"!allowlisted\");\n    _;\n  }\n\n  // ============ Constructor ============\n\n  /**\n   * @notice Creates a new SpokeConnector instance.\n   * @param _domain The domain this connector lives on.\n   * @param _mirrorDomain The hub domain.\n   * @param _amb The address of the AMB on the spoke domain this connector lives on.\n   * @param _rootManager The address of the RootManager on the hub.\n   * @param _mirrorConnector The address of the spoke connector.\n   * @param _processGas The gas costs used in `handle` to ensure meaningful state changes can occur (minimum gas needed\n   * to handle transaction).\n   * @param _reserveGas The gas costs reserved when `handle` is called to ensure failures are handled.\n   * @param _delayBlocks The delay for the validation period for incoming messages in blocks.\n   * @param _merkle The address of the MerkleTreeManager on this spoke domain.\n   * @param _watcherManager The address of the WatcherManager to whom this connector is a client.\n   */\n  constructor(\n    uint32 _domain,\n    uint32 _mirrorDomain,\n    address _amb,\n    address _rootManager,\n    address _mirrorConnector,\n    uint256 _processGas,\n    uint256 _reserveGas,\n    uint256 _delayBlocks,\n    address _merkle,\n    address _watcherManager\n  )\n    ConnectorManager()\n    Connector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector)\n    WatcherClient(_watcherManager)\n  {\n    // Sanity check: constants are reasonable.\n    require(_processGas > 850_000 - 1, \"!process gas\");\n    require(_reserveGas > 15_000 - 1, \"!reserve gas\");\n    PROCESS_GAS = _processGas;\n    RESERVE_GAS = _reserveGas;\n\n    require(_merkle != address(0), \"!zero merkle\");\n    MERKLE = MerkleTreeManager(_merkle);\n\n    delayBlocks = _delayBlocks;\n  }\n\n  // ============ Admin Functions ============\n\n  /**\n   * @notice Adds a sender to the allowlist.\n   * @dev Only allowlisted routers (senders) can call `dispatch`.\n   */\n  function addSender(address _sender) public onlyOwner {\n    allowlistedSenders[_sender] = true;\n    emit SenderAdded(_sender);\n  }\n\n  /**\n   * @notice Removes a sender from the allowlist.\n   * @dev Only allowlisted routers (senders) can call `dispatch`.\n   */\n  function removeSender(address _sender) public onlyOwner {\n    delete allowlistedSenders[_sender];\n    emit SenderRemoved(_sender);\n  }\n\n  /**\n   * @notice Set the `delayBlocks`, the period in blocks over which an incoming message\n   * is verified.\n   */\n  function setDelayBlocks(uint256 _delayBlocks) public onlyOwner {\n    require(_delayBlocks != delayBlocks, \"!delayBlocks\");\n    emit DelayBlocksUpdated(_delayBlocks, msg.sender);\n    delayBlocks = _delayBlocks;\n  }\n\n  /**\n   * @notice Set the rate limit (number of blocks) at which we can send messages from\n   * this contract to the hub chain using the `send` method.\n   * @dev Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\n   * @param _rateLimit The number of blocks require between sending messages. If set to\n   * 0, rate limiting for this spoke connector will be disabled.\n   */\n  function setRateLimitBlocks(uint256 _rateLimit) public onlyOwner {\n    _setRateLimitBlocks(_rateLimit);\n  }\n\n  /**\n   * @notice Manually remove a pending aggregateRoot by owner if the contract is paused.\n   * @dev This method is required for handling fraud cases in the current construction.\n   * @param _fraudulentRoot Target fraudulent root that should be erased from the\n   * `pendingAggregateRoots` mapping.\n   */\n  function removePendingAggregateRoot(bytes32 _fraudulentRoot) public onlyOwner whenPaused {\n    // Sanity check: pending aggregate root exists.\n    require(pendingAggregateRoots[_fraudulentRoot] != 0, \"aggregateRoot !exists\");\n    delete pendingAggregateRoots[_fraudulentRoot];\n    emit AggregateRootRemoved(_fraudulentRoot);\n  }\n\n  /**\n   * @notice This function should be callable by owner, and send funds trapped on\n   * a connector to the provided recipient.\n   * @dev Withdraws the entire balance of the contract.\n   *\n   * @param _to The recipient of the funds withdrawn\n   */\n  function withdrawFunds(address _to) public onlyOwner {\n    uint256 amount = address(this).balance;\n    Address.sendValue(payable(_to), amount);\n    emit FundsWithdrawn(_to, amount);\n  }\n\n  /**\n   * @notice Remove ability to renounce ownership\n   * @dev Renounce ownership should be impossible as long as it is impossible in the\n   * WatcherClient, and as long as only the owner can remove pending roots in case of\n   * fraud.\n   */\n  function renounceOwnership() public virtual override(ProposedOwnable, WatcherClient) onlyOwner {}\n\n  // ============ Public Functions ============\n\n  /**\n   * @notice This returns the root of all messages with the origin domain as this domain (i.e.\n   * all outbound messages)\n   */\n  function outboundRoot() external view returns (bytes32) {\n    return MERKLE.root();\n  }\n\n  /**\n   * @notice This provides the implementation for what is defined in the ConnectorManager\n   * to avoid storing the domain redundantly\n   */\n  function localDomain() external view override returns (uint32) {\n    return DOMAIN;\n  }\n\n  /**\n   * @notice This returns the root of all messages with the origin domain as this domain (i.e.\n   * all outbound messages)\n   */\n  function send(bytes memory _encodedData) external payable whenNotPaused rateLimited {\n    bytes32 root = MERKLE.root();\n    require(sentMessageRoots[root] == false, \"root already sent\");\n    bytes memory _data = abi.encodePacked(root);\n    _sendMessage(_data, _encodedData);\n    sentMessageRoots[root] = true;\n    emit MessageSent(_data, _encodedData, msg.sender);\n  }\n\n  /**\n   * @notice This function adds transfers to the outbound transfer merkle tree.\n   * @dev The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \"hub\"),\n   * it will be combined into a single aggregate root by RootManager (along with outbound roots from other\n   * chains). This aggregate root will be redistributed to all destination chains.\n   *\n   * NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\n   */\n  function dispatch(\n    uint32 _destinationDomain,\n    bytes32 _recipientAddress,\n    bytes memory _messageBody\n  ) external onlyAllowlistedSender returns (bytes32, bytes memory) {\n    // Get the next nonce for the destination domain, then increment it.\n    uint32 _nonce = nonces[_destinationDomain]++;\n\n    // Format the message into packed bytes.\n    bytes memory _message = Message.formatMessage(\n      DOMAIN,\n      TypeCasts.addressToBytes32(msg.sender),\n      _nonce,\n      _destinationDomain,\n      _recipientAddress,\n      _messageBody\n    );\n\n    // Insert the hashed message into the Merkle tree.\n    bytes32 _messageHash = keccak256(_message);\n\n    // Returns the root calculated after insertion of message, needed for events for\n    // watchers\n    (bytes32 _root, uint256 _count) = MERKLE.insert(_messageHash);\n\n    // Emit Dispatch event with message information.\n    // NOTE: Current leaf index is count - 1 since new leaf has already been inserted.\n    emit Dispatch(_messageHash, _count - 1, _root, _message);\n    return (_messageHash, _message);\n  }\n\n  /**\n   * @notice Must be able to call the `handle` function on the BridgeRouter contract. This is called\n   * on the destination domain to handle incoming messages.\n   *\n   * Proving:\n   * Calculates the expected inbound root from an origin chain given a leaf (message hash),\n   * the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this\n   * calculated inbound root is included in the current aggregateRoot, given its index in the aggregator\n   * tree and the proof of inclusion.\n   *\n   * Processing:\n   * After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for\n   * execution.\n   *\n   * @dev Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they\n   * must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.\n   * @dev Intended to be called by the relayer at specific intervals during runtime.\n   * @dev Will record a calculated root as having been proven if we've already proven that it was included\n   * in the aggregateRoot.\n   *\n   * @param _proofs Batch of Proofs containing messages for proving/processing.\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\n   * already been delivered to this spoke connector contract and surpassed the validation period.\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\n   */\n  function proveAndProcess(\n    Proof[] calldata _proofs,\n    bytes32 _aggregateRoot,\n    bytes32[32] calldata _aggregatePath,\n    uint256 _aggregateIndex\n  ) external whenNotPaused nonReentrant {\n    // Sanity check: proofs are included.\n    require(_proofs.length > 0, \"!proofs\");\n\n    // Optimization: calculate the inbound root for the first message in the batch and validate that\n    // it's included in the aggregator tree. We can use this as a reference for every calculation\n    // below to minimize storage access calls.\n    bytes32 _messageHash = keccak256(_proofs[0].message);\n    // TODO: Could use an array of sharedRoots so you can submit a message batch of messages with\n    // different origins.\n    bytes32 _messageRoot = calculateMessageRoot(_messageHash, _proofs[0].path, _proofs[0].index);\n\n    // Handle proving this message root is included in the target aggregate root.\n    proveMessageRoot(_messageRoot, _aggregateRoot, _aggregatePath, _aggregateIndex);\n    // Assuming the inbound message root was proven, the first message is now considered proven.\n    messages[_messageHash] = MessageStatus.Proven;\n\n    // Now we handle proving all remaining messages in the batch - they should all share the same\n    // inbound root!\n    uint256 len = _proofs.length;\n    for (uint32 i = 1; i < len; ) {\n      _messageHash = keccak256(_proofs[i].message);\n      bytes32 _calculatedRoot = calculateMessageRoot(_messageHash, _proofs[i].path, _proofs[i].index);\n      // Make sure this root matches the validated inbound root.\n      require(_calculatedRoot == _messageRoot, \"!sharedRoot\");\n      // Message is proven!\n      messages[_messageHash] = MessageStatus.Proven;\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    // All messages have been proven. We iterate separately here to process each message in the batch.\n    // NOTE: Going through the proving phase for all messages in the batch BEFORE processing ensures\n    // we hit reverts before we consume unbounded gas from `process` calls.\n    for (uint32 i = 0; i < len; ) {\n      process(_proofs[i].message);\n      unchecked {\n        ++i;\n      }\n    }\n  }\n\n  // ============ Private Functions ============\n\n  /**\n   * @notice This is either called by the Connector (AKA `this`) on the spoke (L2) chain after retrieving\n   * latest `aggregateRoot` from the AMB (sourced from mainnet) OR called by the AMB directly.\n   * @dev Must check the msg.sender on the origin chain to ensure only the root manager is passing\n   * these roots.\n   */\n  function receiveAggregateRoot(bytes32 _newRoot) internal {\n    require(_newRoot != bytes32(\"\"), \"new root empty\");\n    require(pendingAggregateRoots[_newRoot] == 0, \"root already pending\");\n    require(!provenAggregateRoots[_newRoot], \"root already proven\");\n\n    pendingAggregateRoots[_newRoot] = block.number;\n    emit AggregateRootReceived(_newRoot);\n  }\n\n  /**\n   * @notice Checks whether the given aggregate root has surpassed the verification period.\n   * @dev Reverts if the given aggregate root is invalid (does not exist) OR has not surpassed\n   * verification period.\n   * @dev If the target aggregate root is pending and HAS surpassed the verification period, then we will\n   * move it over to the proven mapping.\n   * @param _aggregateRoot Target aggregate root to verify.\n   */\n  function verifyAggregateRoot(bytes32 _aggregateRoot) internal {\n    // 0. Sanity check: root is not 0.\n    require(_aggregateRoot != bytes32(\"\"), \"aggregateRoot empty\");\n\n    // 1. Check to see if the target *aggregate* root has already been proven.\n    if (provenAggregateRoots[_aggregateRoot]) {\n      return; // Short circuit if this root is proven.\n    }\n\n    // 2. The target aggregate root must be pending. Aggregate root commit block entry MUST exist.\n    uint256 _aggregateRootCommitBlock = pendingAggregateRoots[_aggregateRoot];\n    require(_aggregateRootCommitBlock != 0, \"aggregateRoot !exist\");\n\n    // 3. Pending aggregate root has surpassed the `delayBlocks` verification period.\n    require(block.number - _aggregateRootCommitBlock >= delayBlocks, \"aggregateRoot !verified\");\n\n    // 4. The target aggregate root has surpassed verification period, we can move it over to the\n    // proven mapping.\n    provenAggregateRoots[_aggregateRoot] = true;\n    emit AggregateRootVerified(_aggregateRoot);\n    // May as well delete the pending aggregate root entry for the gas refund: it should no longer\n    // be needed.\n    delete pendingAggregateRoots[_aggregateRoot];\n  }\n\n  /**\n   * @notice Checks whether a given message is valid. If so, calculates the expected inbound root from an\n   * origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion.\n   * @dev Reverts if message's MessageStatus != None (i.e. if message was already proven or processed).\n   *\n   * @param _messageHash Leaf (message hash) that requires proving.\n   * @param _messagePath Merkle path of inclusion for the leaf.\n   * @param _messageIndex Index of leaf in the merkle tree on the origin chain of the message.\n   * @return bytes32 Calculated root.\n   **/\n  function calculateMessageRoot(\n    bytes32 _messageHash,\n    bytes32[32] calldata _messagePath,\n    uint256 _messageIndex\n  ) internal view returns (bytes32) {\n    // Ensure that the given message has not already been proven and processed.\n    require(messages[_messageHash] == MessageStatus.None, \"!MessageStatus.None\");\n    // Calculate the expected inbound root from the message origin based on the proof.\n    // NOTE: Assuming a valid message was submitted with correct path/index, this should be an inbound root\n    // that the hub has received. If the message were invalid, the root calculated here would not exist in the\n    // aggregate root.\n    return MerkleLib.branchRoot(_messageHash, _messagePath, _messageIndex);\n  }\n\n  /**\n   * @notice Prove an inbound message root from another chain is included in the target aggregateRoot.\n   * @param _messageRoot The message root we want to verify.\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\n   * already been delivered to this spoke connector contract and surpassed the validation period.\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\n   */\n  function proveMessageRoot(\n    bytes32 _messageRoot,\n    bytes32 _aggregateRoot,\n    bytes32[32] calldata _aggregatePath,\n    uint256 _aggregateIndex\n  ) internal {\n    // 0. Check to see if the root for this batch has already been proven.\n    if (provenMessageRoots[_messageRoot]) {\n      // NOTE: It seems counter-intuitive, but we do NOT need to prove the given `_aggregateRoot` param\n      // is valid IFF the `_messageRoot` has already been proven; we know that the `_messageRoot` has to\n      // have been included in *some* proven aggregate root historically.\n      return;\n    }\n\n    // 1. Ensure aggregate root has been proven.\n    verifyAggregateRoot(_aggregateRoot);\n\n    // 2. Calculate an aggregate root, given this inbound root (as leaf), path (proof), and index.\n    bytes32 _calculatedAggregateRoot = MerkleLib.branchRoot(_messageRoot, _aggregatePath, _aggregateIndex);\n\n    // 3. Check to make sure it matches the current aggregate root we have stored.\n    require(_calculatedAggregateRoot == _aggregateRoot, \"invalid inboundRoot\");\n\n    // This inbound root has been proven. We should specify that to optimize future calls.\n    provenMessageRoots[_messageRoot] = true;\n    emit MessageProven(_messageRoot, _aggregateRoot, _aggregateIndex);\n  }\n\n  /**\n   * @notice Given formatted message, attempts to dispatch message payload to end recipient.\n   * @dev Recipient must implement a `handle` method (refer to IMessageRecipient.sol)\n   * Reverts if formatted message's destination domain is not the Replica's domain,\n   * if message has not been proven,\n   * or if not enough gas is provided for the dispatch transaction.\n   * @param _message Formatted message\n   * @return _success TRUE iff dispatch transaction succeeded\n   */\n  function process(bytes memory _message) internal returns (bool _success) {\n    bytes29 _m = _message.ref(0);\n    // ensure message was meant for this domain\n    require(_m.destination() == DOMAIN, \"!destination\");\n    // ensure message has been proven\n    bytes32 _messageHash = _m.keccak();\n    require(messages[_messageHash] == MessageStatus.Proven, \"!proven\");\n    // check re-entrancy guard\n    // require(entered == 1, \"!reentrant\");\n    // entered = 0;\n    // update message status as processed\n    messages[_messageHash] = MessageStatus.Processed;\n    // A call running out of gas TYPICALLY errors the whole tx. We want to\n    // a) ensure the call has a sufficient amount of gas to make a\n    //    meaningful state change.\n    // b) ensure that if the subcall runs out of gas, that the tx as a whole\n    //    does not revert (i.e. we still mark the message processed)\n    // To do this, we require that we have enough gas to process\n    // and still return. We then delegate only the minimum processing gas.\n    require(gasleft() > PROCESS_GAS + RESERVE_GAS - 1, \"!gas\");\n    // get the message recipient\n    address _recipient = _m.recipientAddress();\n    // set up for assembly call\n    uint256 _gas = PROCESS_GAS;\n    uint16 _maxCopy = 256;\n    // allocate memory for returndata\n    bytes memory _returnData = new bytes(_maxCopy);\n    bytes memory _calldata = abi.encodeWithSignature(\n      \"handle(uint32,uint32,bytes32,bytes)\",\n      _m.origin(),\n      _m.nonce(),\n      _m.sender(),\n      _m.body().clone()\n    );\n\n    (_success, _returnData) = ExcessivelySafeCall.excessivelySafeCall(_recipient, _gas, 0, _maxCopy, _calldata);\n\n    // emit process results\n    emit Process(_messageHash, _success, _returnData);\n  }\n}\n"},"contracts/messaging/connectors/zksync/ZkSyncHubConnector.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n// Importing zkSync contract interface\nimport \"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IZkSync.sol\";\n\nimport {IRootManager} from \"../../interfaces/IRootManager.sol\";\nimport {HubConnector} from \"../HubConnector.sol\";\nimport {Connector} from \"../Connector.sol\";\nimport {GasCap} from \"../GasCap.sol\";\n\ncontract ZkSyncHubConnector is HubConnector, GasCap {\n  // ============ Storage ============\n\n  // NOTE: This is needed because we need to track the roots we've\n  // already sent across chains. When sending an zkSync message, we send calldata\n  // for Connector.processMessage. At any point these messages could be processed\n  // before the timeout using `processFromRoot` or after the timeout using `process`\n  // we track the roots sent here to ensure we process each root once\n  mapping(bytes32 => bool) public processed;\n\n  // ============ Constructor ============\n  constructor(\n    uint32 _domain,\n    uint32 _mirrorDomain,\n    address _amb,\n    address _rootManager,\n    address _mirrorConnector,\n    address _stateCommitmentChain,\n    uint256 _gasCap\n  ) HubConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector) GasCap(_gasCap) {}\n\n  // ============ Override Fns ============\n  function _verifySender(address) internal pure override returns (bool) {\n    // NOTE: sender from L2 is asserted in the `processMessageFromRoot` function. Cross domain\n    // sender is packed in with the L2Message struct, so you should not be verifying the\n    // sender using this method. Always return false.\n    // See docs here: https://v2-docs.zksync.io/dev/developer-guides/Bridging/l2-l1.html#prove-inclusion-of-the-message-into-the-l2-block\n    return false;\n  }\n\n  /**\n   * @dev Sends `aggregateRoot` to messaging on l2\n   */\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\n    // Should include gasPrice value for `l2TransactionBaseCOst` specialized calldata\n    require(_encodedData.length == 32, \"!data length\");\n    // Should always be dispatching the aggregate root\n    require(_data.length == 32, \"!length\");\n    // Get the calldata\n    bytes memory _calldata = abi.encodeWithSelector(Connector.processMessage.selector, _data);\n    // Get the gas data\n    uint256 gasPrice = abi.decode(_encodedData, (uint256));\n\n    // Declare the ergs limit\n    uint256 ERGS_LIMIT = 10000;\n\n    // Get the max supplied\n    uint256 fee = _getGas(msg.value);\n\n    // Ensure it is above minimum\n    require(fee > IZkSync(AMB).l2TransactionBaseCost(gasPrice, ERGS_LIMIT, uint32(_calldata.length)), \"!fees\");\n\n    // Dispatch message\n    // https://v2-docs.zksync.io/dev/developer-guides/Bridging/l1-l2.html#structure\n    // calling L2 smart contract from L1 Example contract\n    // note: msg.value must be passed in and can be retrieved from the AMB view function `l2TransactionBaseCost`\n    // https://v2-docs.zksync.io/dev/developer-guides/Bridging/l1-l2.html#using-contract-interface-in-your-project\n    IZkSync(AMB).requestL2Transaction{value: fee}(\n      // The address of the L2 contract to call\n      mirrorConnector,\n      // We pass no ETH with the call\n      0,\n      // Encoding the calldata for the execute\n      _calldata,\n      // Ergs limit\n      ERGS_LIMIT,\n      // factory dependencies\n      new bytes[](0)\n    );\n  }\n\n  // DO NOT override _processMessage, should revert from `Connector` class. All messages must use the\n  // `processMessageFromRoot` flow.\n\n  /**\n   * @notice Processes message and proves inclusion of that message in the root.\n   *\n   * @dev modified from: https://v2-docs.zksync.io/dev/developer-guides/Bridging/l2-l1.html#prove-inclusion-of-the-message-into-the-l2-block\n   */\n  function processMessageFromRoot(\n    // zkSync block number in which the message was sent\n    uint32 _l2BlockNumber,\n    // Message index, that can be received via API\n    uint256 _l2MessageIndex,\n    // The L2 transaction number in a block, in which the log was sent\n    uint16 _l2TxNumberInBlock,\n    // The message that was sent from l2\n    bytes calldata _message,\n    // Merkle proof for the message\n    bytes32[] calldata _proof\n  ) external {\n    // sanity check root length (32 bytes root)\n    require(_message.length == 32, \"!length\");\n\n    IZkSync zksync = IZkSync(AMB);\n    L2Message memory message = L2Message({\n      txNumberInBlock: _l2TxNumberInBlock,\n      sender: mirrorConnector,\n      data: _message\n    });\n\n    bool success = zksync.proveL2MessageInclusion(_l2BlockNumber, _l2MessageIndex, message, _proof);\n    require(success, \"!proven\");\n\n    bytes32 _root = bytes32(_message);\n\n    // NOTE: there are no guarantees the messages are processed once, so processed roots\n    // must be tracked within the connector. See:\n    // https://v2-docs.zksync.io/dev/developer-guides/Bridging/l2-l1.html#prove-inclusion-of-the-message-into-the-l2-block\n    if (!processed[_root]) {\n      // set root to processed\n      processed[_root] = true;\n      // update the root on the root manager\n      IRootManager(ROOT_MANAGER).aggregate(MIRROR_DOMAIN, _root);\n      emit MessageProcessed(_message, msg.sender);\n    } // otherwise root was already sent to root manager\n  }\n}\n"},"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n// Importing interfaces and addresses of the system contracts\nimport \"@matterlabs/zksync-contracts/l2/system-contracts/Constants.sol\";\n\nimport {SpokeConnector} from \"../SpokeConnector.sol\";\nimport {Connector} from \"../Connector.sol\";\n\ncontract ZkSyncSpokeConnector is SpokeConnector {\n  // ============ Constructor ============\n  constructor(\n    uint32 _domain,\n    uint32 _mirrorDomain,\n    address _amb,\n    address _rootManager,\n    address _mirrorConnector,\n    uint256 _processGas,\n    uint256 _reserveGas,\n    uint256 _delayBlocks,\n    address _merkle,\n    address _watcherManager\n  )\n    SpokeConnector(\n      _domain,\n      _mirrorDomain,\n      _amb,\n      _rootManager,\n      _mirrorConnector,\n      _processGas,\n      _reserveGas,\n      _delayBlocks,\n      _merkle,\n      _watcherManager\n    )\n  {}\n\n  // ============ Override Fns ============\n  function _verifySender(address _expected) internal view override returns (bool) {\n    // NOTE: msg.sender is preserved for L1 -> L2 calls. See the L2 contract in the tutorial\n    // here: https://v2-docs.zksync.io/dev/tutorials/cross-chain-tutorial.html#l2-counter\n\n    // NOTE: if an attacker controls the msg.sender, they could insert malicious roots.\n    // From the zksync team:\n    // 'We have a different address generation schema that would not allow address\n    // to be claimed on L2 by an adversary. Even if you deploy same address and same\n    // private key it would still be different'\n    return msg.sender == _expected;\n  }\n\n  /**\n   * @dev Sends `outboundRoot` to root manager on l1\n   */\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\n    // Should not include specialized calldata\n    require(_encodedData.length == 0, \"!data length\");\n    // Dispatch message through zkSync AMB\n    L1_MESSENGER_CONTRACT.sendToL1(_data);\n  }\n\n  /**\n   * @dev Handles an incoming `aggregateRoot`\n   * NOTE: Could store latest root sent and prove aggregate root\n   */\n  function _processMessage(bytes memory _data) internal override {\n    // enforce this came from connector on l2\n    require(_verifySender(mirrorConnector), \"!mirrorConnector\");\n    // get the data (should be the aggregate root)\n    require(_data.length == 32, \"!length\");\n    // set the aggregate root\n    receiveAggregateRoot(bytes32(_data));\n  }\n}\n"},"contracts/messaging/interfaces/ambs/arbitrum/ArbitrumL2Amb.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\ninterface ArbitrumL2Amb {\n  // Send a transaction to L1\n  function sendTxToL1(address destAddr, bytes calldata calldataForL1) external payable;\n}\n"},"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumInbox.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n/**\n * @notice Interface for sending L1 -> L2 messagesto Arbitrum.\n * @dev Arbitrum uses an inbox to aggregate messages going from L1 -> L2, source:\n * https://github.com/OffchainLabs/nitro/blob/master/contracts/src/bridge/Inbox.sol\n *\n */\ninterface IArbitrumInbox {\n  function createRetryableTicket(\n    address destAddr,\n    uint256 arbTxCallValue,\n    uint256 maxSubmissionCost,\n    address submissionRefundAddress,\n    address valueRefundAddress,\n    uint256 maxGas,\n    uint256 gasPriceBid,\n    bytes calldata data\n  ) external payable returns (uint256);\n}\n"},"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumOutbox.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n/**\n * @notice Interface for sending L1 -> L2 messagesto Arbitrum.\n * @dev Arbitrum uses an inbox to aggregate messages going from L1 -> L2, source:\n * https://github.com/OffchainLabs/nitro/blob/master/contracts/src/bridge/Inbox.sol\n *\n */\ninterface IArbitrumOutbox {\n  event SendRootUpdated(bytes32 indexed blockHash, bytes32 indexed outputRoot);\n  event OutBoxTransactionExecuted(\n    address indexed to,\n    address indexed l2Sender,\n    uint256 indexed zero,\n    uint256 transactionIndex\n  );\n\n  function rollup() external view returns (address); // the rollup contract\n\n  // function bridge() external view returns (IBridge); // the bridge contract\n\n  function spent(uint256) external view returns (bytes32); // packed spent bitmap\n\n  function roots(bytes32) external view returns (bytes32); // maps root hashes => L2 block hash\n\n  // solhint-disable-next-line func-name-mixedcase\n  function OUTBOX_VERSION() external view returns (uint128); // the outbox version\n\n  function updateSendRoot(bytes32 sendRoot, bytes32 l2BlockHash) external;\n\n  /// @notice When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account\n  ///         When the return value is zero, that means this is a system message\n  /// @dev the l2ToL1Sender behaves as the tx.origin, the msg.sender should be validated to protect against reentrancies\n  function l2ToL1Sender() external view returns (address);\n\n  /// @return l2Block return L2 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\n  function l2ToL1Block() external view returns (uint256);\n\n  /// @return l1Block return L1 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\n  function l2ToL1EthBlock() external view returns (uint256);\n\n  /// @return timestamp return L2 timestamp when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\n  function l2ToL1Timestamp() external view returns (uint256);\n\n  /// @return outputId returns the unique output identifier of the L2 to L1 tx or 0 if no L2 to L1 transaction is active\n  function l2ToL1OutputId() external view returns (bytes32);\n\n  /**\n   * @notice Executes a messages in an Outbox entry.\n   * @dev Reverts if dispute period hasn't expired, since the outbox entry\n   *      is only created once the rollup confirms the respective assertion.\n   * @dev it is not possible to execute any L2-to-L1 transaction which contains data\n   *      to a contract address without any code (as enforced by the Bridge contract).\n   * @param proof Merkle proof of message inclusion in send root\n   * @param index Merkle path to message\n   * @param l2Sender sender if original message (i.e., caller of ArbSys.sendTxToL1)\n   * @param to destination address for L1 contract call\n   * @param l2Block l2 block number at which sendTxToL1 call was made\n   * @param l1Block l1 block number at which sendTxToL1 call was made\n   * @param l2Timestamp l2 Timestamp at which sendTxToL1 call was made\n   * @param value wei in L1 message\n   * @param data abi-encoded L1 message data\n   */\n  function executeTransaction(\n    bytes32[] calldata proof,\n    uint256 index,\n    address l2Sender,\n    address to,\n    uint256 l2Block,\n    uint256 l1Block,\n    uint256 l2Timestamp,\n    uint256 value,\n    bytes calldata data\n  ) external;\n\n  /**\n   *  @dev function used to simulate the result of a particular function call from the outbox\n   *       it is useful for things such as gas estimates. This function includes all costs except for\n   *       proof validation (which can be considered offchain as a somewhat of a fixed cost - it's\n   *       not really a fixed cost, but can be treated as so with a fixed overhead for gas estimation).\n   *       We can't include the cost of proof validation since this is intended to be used to simulate txs\n   *       that are included in yet-to-be confirmed merkle roots. The simulation entrypoint could instead pretend\n   *       to confirm a pending merkle root, but that would be less pratical for integrating with tooling.\n   *       It is only possible to trigger it when the msg sender is address zero, which should be impossible\n   *       unless under simulation in an eth_call or eth_estimateGas\n   */\n  function executeTransactionSimulation(\n    uint256 index,\n    address l2Sender,\n    address to,\n    uint256 l2Block,\n    uint256 l1Block,\n    uint256 l2Timestamp,\n    uint256 value,\n    bytes calldata data\n  ) external;\n\n  /**\n   * @param index Merkle path to message\n   * @return true if the message has been spent\n   */\n  function isSpent(uint256 index) external view returns (bool);\n\n  function calculateItemHash(\n    address l2Sender,\n    address to,\n    uint256 l2Block,\n    uint256 l1Block,\n    uint256 l2Timestamp,\n    uint256 value,\n    bytes calldata data\n  ) external pure returns (bytes32);\n\n  function calculateMerkleRoot(\n    bytes32[] memory proof,\n    uint256 path,\n    bytes32 item\n  ) external pure returns (bytes32);\n}\n"},"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumRollup.sol":{"content":"pragma solidity 0.8.17;\n\n// modified from: https://github.com/OffchainLabs/nitro/blob/master/contracts/src/rollup/Node.sol\nstruct Node {\n  // Hash of the state of the chain as of this node\n  bytes32 stateHash;\n  // Hash of the data that can be challenged\n  bytes32 challengeHash;\n  // Hash of the data that will be committed if this node is confirmed\n  bytes32 confirmData;\n  // Index of the node previous to this one\n  uint64 prevNum;\n  // Deadline at which this node can be confirmed\n  uint64 deadlineBlock;\n  // Deadline at which a child of this node can be confirmed\n  uint64 noChildConfirmedBeforeBlock;\n  // Number of stakers staked on this node. This includes real stakers and zombies\n  uint64 stakerCount;\n  // Number of stakers staked on a child node. This includes real stakers and zombies\n  uint64 childStakerCount;\n  // This value starts at zero and is set to a value when the first child is created. After that it is constant until the node is destroyed or the owner destroys pending nodes\n  uint64 firstChildBlock;\n  // The number of the latest child of this node to be created\n  uint64 latestChildNumber;\n  // The block number when this node was created\n  uint64 createdAtBlock;\n  // A hash of all the data needed to determine this node's validity, to protect against reorgs\n  bytes32 nodeHash;\n}\n\n// modified from: https://github.com/OffchainLabs/nitro/blob/master/contracts/src/rollup/IRollupCore.sol\ninterface IArbitrumRollup {\n  /**\n   * @notice Get the Node for the given index.\n   */\n  function getNode(uint64 nodeNum) external view returns (Node memory);\n}\n"},"contracts/messaging/interfaces/ambs/GnosisAmb.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n// Taken from: https://github.com/omni/tokenbridge-contracts/blob/master/contracts/interfaces/IAMB.sol\ninterface GnosisAmb {\n  function messageSender() external view returns (address);\n\n  function maxGasPerTx() external view returns (uint256);\n\n  function transactionHash() external view returns (bytes32);\n\n  function messageId() external view returns (bytes32);\n\n  function messageSourceChainId() external view returns (bytes32);\n\n  function messageCallStatus(bytes32 _messageId) external view returns (bool);\n\n  function failedMessageDataHash(bytes32 _messageId) external view returns (bytes32);\n\n  function failedMessageReceiver(bytes32 _messageId) external view returns (address);\n\n  function failedMessageSender(bytes32 _messageId) external view returns (address);\n\n  function requireToPassMessage(\n    address _contract,\n    bytes memory _data,\n    uint256 _gas\n  ) external returns (bytes32);\n\n  function requireToConfirmMessage(\n    address _contract,\n    bytes memory _data,\n    uint256 _gas\n  ) external returns (bytes32);\n\n  function requireToGetInformation(bytes32 _requestSelector, bytes memory _data) external returns (bytes32);\n\n  function sourceChainId() external view returns (uint256);\n\n  function destinationChainId() external view returns (uint256);\n\n  function executeSignatures(bytes memory _data, bytes memory _signatures) external;\n\n  function safeExecuteSignaturesWithAutoGasLimit(bytes memory _data, bytes memory _signatures) external;\n}\n"},"contracts/messaging/interfaces/ambs/Multichain.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n/**\n * @dev interface to interact with multicall (prev anyswap) anycall proxy\n *     see https://github.com/anyswap/multichain-smart-contracts/blob/main/contracts/anycall/AnyswapV6CallProxy.sol\n */\ninterface Multichain {\n  function anyCall(\n    address _to,\n    bytes calldata _data,\n    address _fallback,\n    uint256 _toChainID,\n    uint256 _flags\n  ) external payable;\n\n  function context()\n    external\n    view\n    returns (\n      address from,\n      uint256 fromChainID,\n      uint256 nonce\n    );\n\n  function executor() external view returns (address executor);\n\n  function calcSrcFees(\n    string calldata _appID,\n    uint256 _toChainID,\n    uint256 _dataLength\n  ) external view returns (uint256);\n}\n"},"contracts/messaging/interfaces/ambs/optimism/IStateCommitmentChain.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n// modified from: https://github.com/ethereum-optimism/optimism/blob/fcfcf6e7e69801e63904ec53815db01a8d45dcac/packages/contracts/contracts/libraries/codec/Lib_OVMCodec.sol#L34-L40\nstruct ChainBatchHeader {\n  uint256 batchIndex;\n  bytes32 batchRoot;\n  uint256 batchSize;\n  uint256 prevTotalElements;\n  bytes extraData;\n}\n\n// modified from: https://github.com/ethereum-optimism/optimism/blob/fcfcf6e7e69801e63904ec53815db01a8d45dcac/packages/contracts/contracts/libraries/codec/Lib_OVMCodec.sol#L42-L45\nstruct ChainInclusionProof {\n  uint256 index;\n  bytes32[] siblings;\n}\n\n// modified from: https://github.com/ethereum-optimism/optimism/blob/fcfcf6e7e69801e63904ec53815db01a8d45dcac/packages/contracts/contracts/L1/messaging/IL1CrossDomainMessenger.sol#L18-L24\nstruct L2MessageInclusionProof {\n  bytes32 stateRoot;\n  ChainBatchHeader stateRootBatchHeader;\n  ChainInclusionProof stateRootProof;\n  bytes stateTrieWitness;\n  bytes storageTrieWitness;\n}\n\n/**\n * @title IStateCommitmentChain\n *\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/rollup/IStateCommitmentChain.sol\n */\ninterface IStateCommitmentChain {\n  /**********\n   * Events *\n   **********/\n\n  event StateBatchAppended(\n    uint256 indexed _batchIndex,\n    bytes32 _batchRoot,\n    uint256 _batchSize,\n    uint256 _prevTotalElements,\n    bytes _extraData\n  );\n\n  event StateBatchDeleted(uint256 indexed _batchIndex, bytes32 _batchRoot);\n\n  /********************\n   * Public Functions *\n   ********************/\n\n  /**\n   * Retrieves the total number of elements submitted.\n   * @return _totalElements Total submitted elements.\n   */\n  function getTotalElements() external view returns (uint256 _totalElements);\n\n  /**\n   * Retrieves the total number of batches submitted.\n   * @return _totalBatches Total submitted batches.\n   */\n  function getTotalBatches() external view returns (uint256 _totalBatches);\n\n  /**\n   * Retrieves the timestamp of the last batch submitted by the sequencer.\n   * @return _lastSequencerTimestamp Last sequencer batch timestamp.\n   */\n  function getLastSequencerTimestamp() external view returns (uint256 _lastSequencerTimestamp);\n\n  /**\n   * Appends a batch of state roots to the chain.\n   * @param _batch Batch of state roots.\n   * @param _shouldStartAtElement Index of the element at which this batch should start.\n   */\n  function appendStateBatch(bytes32[] calldata _batch, uint256 _shouldStartAtElement) external;\n\n  /**\n   * Deletes all state roots after (and including) a given batch.\n   * @param _batchHeader Header of the batch to start deleting from.\n   */\n  function deleteStateBatch(ChainBatchHeader memory _batchHeader) external;\n\n  /**\n   * Verifies a batch inclusion proof.\n   * @param _element Hash of the element to verify a proof for.\n   * @param _batchHeader Header of the batch in which the element was included.\n   * @param _proof Merkle inclusion proof for the element.\n   */\n  function verifyStateCommitment(\n    bytes32 _element,\n    ChainBatchHeader memory _batchHeader,\n    ChainInclusionProof memory _proof\n  ) external view returns (bool _verified);\n\n  /**\n   * Checks whether a given batch is still inside its fraud proof window.\n   * @param _batchHeader Header of the batch to check.\n   * @return _inside Whether or not the batch is inside the fraud proof window.\n   */\n  function insideFraudProofWindow(ChainBatchHeader memory _batchHeader) external view returns (bool _inside);\n}\n"},"contracts/messaging/interfaces/ambs/optimism/OptimismAmb.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n/**\n * @dev The optimism bridge shares both of these functions, but it is important\n * to note that when going from L2 -> L1, the message cannot be processed by the\n * AMB until the challenge period elapses.\n *\n * HOWEVER, before the challenge elapses, you can read the state of the L2 as it is\n * placed on mainnet. By processing data from the L2 state, we are able to \"circumvent\"\n * this delay to a reasonable degree.\n *\n * This means that for messages going L1 -> L2, you can call \"processMessage\" and expect\n * the call to be executed to pass up the aggregate root. When going from L2 -> L1, you\n * must read the root from the L2 state\n *\n * L2 messenger: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2CrossDomainMessenger.sol\n * L1 messenger: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol\n */\ninterface OptimismAmb {\n  function sendMessage(\n    address _target,\n    bytes memory _message,\n    uint32 _gasLimit\n  ) external;\n\n  function xDomainMessageSender() external view returns (address);\n}\n"},"contracts/messaging/interfaces/IConnector.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {IProposedOwnable} from \"../../shared/interfaces/IProposedOwnable.sol\";\n\n/**\n * @notice This interface is what the Connext contract will send and receive messages through.\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\n * could be Nomad or a generic AMB under the hood).\n *\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\n *\n * Flow from transfer from polygon to optimism:\n * 1. User calls `xcall` with destination specified\n * 2. This will swap in to the bridge assets\n * 3. The swapped assets will get burned\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\n *    to the root\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\n *    mainnet. This is done on all \"spoke\" domains.\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\n *    root from all of the AMBs\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\n *      tree root\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\n *    process on the `Connext` contract\n * 9. Takes minted bridge tokens and credits the LP\n *\n * AMB requirements:\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\n * - Ability to read *our root* from the AMB\n *\n * AMBs:\n * - PoS bridge from polygon\n * - arbitrum bridge\n * - optimism bridge\n * - gnosis chain\n * - bsc (use multichain for messaging)\n */\ninterface IConnector is IProposedOwnable {\n  // ============ Events ============\n  /**\n   * @notice Emitted whenever a message is successfully sent over an AMB\n   * @param data The contents of the message\n   * @param encodedData Data used to send the message; specific to connector\n   * @param caller Who called the function (sent the message)\n   */\n  event MessageSent(bytes data, bytes encodedData, address caller);\n\n  /**\n   * @notice Emitted whenever a message is successfully received over an AMB\n   * @param data The contents of the message\n   * @param caller Who called the function\n   */\n  event MessageProcessed(bytes data, address caller);\n\n  // ============ Public fns ============\n\n  function processMessage(bytes memory _data) external;\n\n  function verifySender(address _expected) external returns (bool);\n}\n"},"contracts/messaging/interfaces/IConnectorManager.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {IOutbox} from \"./IOutbox.sol\";\n\n/**\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\n * allows an admin to call `setXAppConnectionManager` to update the underlying\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\n *\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\n * will interface with.\n */\ninterface IConnectorManager {\n  /**\n   * @notice Get the local inbox contract from the xAppConnectionManager\n   * @return The local inbox contract\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\n   * Home contract with nomad\n   */\n  function home() external view returns (IOutbox);\n\n  /**\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\n   * @return True if _potentialReplica is an enrolled Replica\n   */\n  function isReplica(address _potentialReplica) external view returns (bool);\n\n  /**\n   * @notice Get the local domain from the xAppConnectionManager\n   * @return The local domain\n   */\n  function localDomain() external view returns (uint32);\n}\n"},"contracts/messaging/interfaces/IHubConnector.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {IConnector} from \"./IConnector.sol\";\n\ninterface IHubConnector is IConnector {\n  function sendMessage(bytes memory _data, bytes memory _encodedData) external payable;\n}\n"},"contracts/messaging/interfaces/IMessageRecipient.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\ninterface IMessageRecipient {\n  function handle(\n    uint32 _origin,\n    uint32 _nonce,\n    bytes32 _sender,\n    bytes memory _message\n  ) external;\n}\n"},"contracts/messaging/interfaces/IOutbox.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n/**\n * @notice Interface for all contracts sending messages originating on their\n * current domain.\n *\n * @dev These are the Home.sol interface methods used by the `Router`\n * and exposed via `home()` on the `XAppConnectionClient`\n */\ninterface IOutbox {\n  /**\n   * @notice Emitted when a new message is added to an outbound message merkle root\n   * @param leafIndex Index of message's leaf in merkle tree\n   * @param destinationAndNonce Destination and destination-specific\n   * nonce combined in single field ((destination << 32) & nonce)\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\n   * @param committedRoot the latest notarized root submitted in the last signed Update\n   * @param message Raw bytes of message\n   */\n  event Dispatch(\n    bytes32 indexed messageHash,\n    uint256 indexed leafIndex,\n    uint64 indexed destinationAndNonce,\n    bytes32 committedRoot,\n    bytes message\n  );\n\n  /**\n   * @notice Dispatch the message it to the destination domain & recipient\n   * @dev Format the message, insert its hash into Merkle tree,\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\n   * @param _destinationDomain Domain of destination chain\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\n   * @param _messageBody Raw bytes content of message\n   * @return bytes32 The leaf added to the tree\n   */\n  function dispatch(\n    uint32 _destinationDomain,\n    bytes32 _recipientAddress,\n    bytes memory _messageBody\n  ) external returns (bytes32, bytes memory);\n}\n"},"contracts/messaging/interfaces/IRootManager.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\ninterface IRootManager {\n  /**\n   * @notice This is called by relayers to generate + send the mixed root from mainnet via AMB to\n   * spoke domains.\n   * @dev This must read information for the root from the registered AMBs.\n   */\n  function propagate(\n    address[] calldata _connectors,\n    uint256[] calldata _fees,\n    bytes[] memory _encodedData\n  ) external payable;\n\n  /**\n   * @notice Called by the connectors for various domains on the hub to aggregate their latest\n   * inbound root.\n   * @dev This must read information for the root from the registered AMBs\n   */\n  function aggregate(uint32 _domain, bytes32 _outbound) external;\n}\n"},"contracts/messaging/libraries/DomainIndexer.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n/**\n * @notice This abstract contract was written to ensure domain and connector mutex is scalable for the\n * purposes of messaging layer operations. In particular, it aims to reduce gas costs to be relatively\n * static regardless of the number of domains kept in storage by enabling callers of `RootManager.propagate`\n * to supply the `domains` and `connectors` arrays as params, and check the hashes of those params against\n * those we keep in storage.\n */\nabstract contract DomainIndexer {\n  // ============ Events ============\n\n  event DomainAdded(uint32 domain, address connector);\n  event DomainRemoved(uint32 domain);\n\n  // ============ Properties ============\n\n  /**\n   * @notice The absolute maximum number of domains that we should support. Domain and connector arrays\n   * are naturally unbounded, but the gas cost of reading these arrays in `updateHashes()` is bounded by\n   * the block's gas limit.\n   *\n   * If we want to set a hard ceiling for gas costs for the `updateHashes()` method at approx. 500K gas,\n   * with an average SLOAD cost of 900 gas per domain (1 uint32, 1 address):\n   *       500K / 900 = ~555 domains\n   *\n   * Realistically, the cap on the number of domains will likely exist in other places, but we cap it\n   * here as a last resort.\n   */\n  uint256 public constant MAX_DOMAINS = 500;\n\n  /**\n   * @notice Domains array tracks currently subscribed domains to this hub aggregator.\n   * We should distribute the aggregate root to all of these domains in the `propagate` method.\n   * @dev Whenever this domains array is updated, the connectors array should also be updated.\n   */\n  uint32[] public domains;\n\n  /**\n   * @notice A \"quick reference\" hash used in the `propagate` method below to validate that the provided\n   * array of domains matches the one we have in storage.\n   * @dev This hash should be re-calculated whenever the domains array is updated.\n   */\n  bytes32 public domainsHash;\n\n  /**\n   * @notice Tracks the addresses of the hub connector contracts corresponding to subscribed spoke domains.\n   * The index of any given connector in this array should match the index of that connector's target spoke\n   * domain in the `domains` array above.\n   * @dev This should be updated whenever the domains array is updated.\n   */\n  address[] public connectors;\n\n  /**\n   * @notice A \"quick reference\" hash used in the `propagate` method below to validate that the provided\n   * array of connectors matches the one we have in storage.\n   * @dev This hash should be re-calculated whenever the connectors array is updated.\n   */\n  bytes32 public connectorsHash;\n\n  /**\n   * @notice Shortcut to reverse lookup the index by domain. We index starting at one so the zero value can\n   * be considered invalid (see fn: `isDomainSupported`).\n   * @dev This should be updated whenever the domains array is updated.\n   */\n  mapping(uint32 => uint256) private domainToIndexPlusOne;\n\n  // ============ Getters ============\n\n  /**\n   * @notice Convenience shortcut for supported domains. Used to sanity check adding new domains.\n   * @param _domain Domain to check.\n   */\n  function isDomainSupported(uint32 _domain) public view returns (bool) {\n    return domainToIndexPlusOne[_domain] != 0;\n  }\n\n  /**\n   * @notice Gets the index of a given domain in the domains and connectors arrays.\n   * @dev Reverts if domain is not supported.\n   * @param _domain The domain for which to get the index value.\n   */\n  function getDomainIndex(uint32 _domain) public view returns (uint256) {\n    uint256 index = domainToIndexPlusOne[_domain];\n    require(index != 0, \"!supported\");\n    return index - 1;\n  }\n\n  /**\n   * @notice Gets the corresponding hub connector address for a given spoke domain.\n   * @dev Inefficient, should only be used by caller if they have no index reference.\n   * @param _domain The domain for which to get the hub connector address.\n   */\n  function getConnectorForDomain(uint32 _domain) public view returns (address) {\n    return connectors[getDomainIndex(_domain)];\n  }\n\n  /**\n   * @notice Validate given domains and connectors arrays are correct (i.e. they mirror what is\n   * currently saved in storage).\n   * @dev Reverts if domains or connectors do not match, including ordering.\n   * @param _domains The given domains array to check.\n   * @param _connectors The given connectors array to check.\n   */\n  function validateDomains(uint32[] calldata _domains, address[] calldata _connectors) public view {\n    // Sanity check: arguments are same length.\n    require(_domains.length == _connectors.length, \"!matching length\");\n    // Validate that given domains match the current array in storage.\n    require(keccak256(abi.encode(_domains)) == domainsHash, \"!domains\");\n    // Validate that given connectors match the current array in storage.\n    require(keccak256(abi.encode(_connectors)) == connectorsHash, \"!connectors\");\n  }\n\n  /**\n   * @notice Validate given connectors array is correct (i.e. it mirrors what is\n   * currently saved in storage).\n   * @dev Reverts if domains or connectors do not match, including ordering.\n   * @param _connectors The given connectors array to check.\n   */\n  function validateConnectors(address[] calldata _connectors) public view {\n    // Validate that given connectors match the current array in storage.\n    require(keccak256(abi.encode(_connectors)) == connectorsHash, \"!connectors\");\n  }\n\n  // ============ Helper Functions ============\n\n  /**\n   * @notice Handles all mutex for adding support for a given domain.\n   * @param _domain Domain for which we are adding support.\n   * @param _connector Corresponding hub connector address belonging to given domain.\n   */\n  function addDomain(uint32 _domain, address _connector) internal {\n    // Sanity check: domain does not already exist.\n    require(!isDomainSupported(_domain), \"domain exists\");\n    // Sanity check: connector is reasonable.\n    require(_connector != address(0), \"!connector\");\n    // Sanity check: Under maximum.\n    require(domains.length < MAX_DOMAINS, \"DomainIndexer at capacity\");\n\n    // Push domain and connector to respective arrays.\n    domains.push(_domain);\n    connectors.push(_connector);\n    // Set reverse lookup.\n    uint256 _indexPlusOne = domains.length;\n    domainToIndexPlusOne[_domain] = _indexPlusOne;\n\n    // Update the hashes for the given arrays.\n    updateHashes();\n\n    emit DomainAdded(_domain, _connector);\n  }\n\n  /**\n   * @notice Handles all mutex for removing support for a given domain.\n   * @param _domain Domain we are removing.\n   * @return address of the hub connector for the domain we removed.\n   */\n  function removeDomain(uint32 _domain) internal returns (address) {\n    uint256 _index = getDomainIndex(_domain);\n    // Get the connector at the given index.\n    address _connector = connectors[_index];\n    // Sanity check: connector exists.\n    require(_connector != address(0), \"connector !exists\");\n\n    // Shortcut: is the index the last index in the domains/connectors arrays?\n    // IFF not, we'll need to swap the target with the current last so we can pop().\n    uint256 _lastIndex = domains.length - 1;\n    if (_index < _lastIndex) {\n      // If the target index for removal is not the last index, we copy over the domain at the last\n      // index to overwrite the target's index so we can conveniently pop the last item.\n      uint32 copiedDomain = domains[_lastIndex];\n      domains[_index] = copiedDomain;\n      connectors[_index] = connectors[_lastIndex];\n      // Update the domain to index mapping for the copied domain.\n      domainToIndexPlusOne[copiedDomain] = _index + 1; // NOTE: Naturally adding 1 here; see mapping name.\n    }\n\n    // Pop the last item in the arrays.\n    domains.pop();\n    connectors.pop();\n    // Erase reverse lookup.\n    delete domainToIndexPlusOne[_domain];\n\n    // Update the hashes for the given arrays.\n    updateHashes();\n\n    emit DomainRemoved(_domain);\n\n    return _connector;\n  }\n\n  /**\n   * @notice Calculate the new hashes for the domains and connectors arrays and update storage refs.\n   * @dev Used for the Connector update functions `addConnector`, `removeConnector`.\n   */\n  function updateHashes() internal {\n    uint32[] memory _domains = domains;\n    address[] memory _connectors = connectors;\n    domainsHash = keccak256(abi.encode(_domains));\n    connectorsHash = keccak256(abi.encode(_connectors));\n  }\n}\n"},"contracts/messaging/libraries/MerkleLib.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n/**\n * @title MerkleLib\n * @author Illusory Systems Inc.\n * @notice An incremental merkle tree modeled on the eth2 deposit contract.\n **/\nlibrary MerkleLib {\n  // ========== Custom Errors ===========\n\n  error MerkleLib__insert_treeIsFull();\n\n  // ============ Constants =============\n\n  uint256 internal constant TREE_DEPTH = 32;\n  uint256 internal constant MAX_LEAVES = 2**TREE_DEPTH - 1;\n\n  /**\n   * @dev Z_i represent the hash values at different heights for a binary tree with leaf values equal to `0`.\n   * (e.g. Z_1 is the keccak256 hash of (0x0, 0x0), Z_2 is the keccak256 hash of (Z_1, Z_1), etc...)\n   * Z_0 is the bottom of the 33-layer tree, Z_32 is the top (i.e. root).\n   * Used to shortcut calculation in root calculation methods below.\n   */\n  bytes32 internal constant Z_0 = hex\"0000000000000000000000000000000000000000000000000000000000000000\";\n  bytes32 internal constant Z_1 = hex\"ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5\";\n  bytes32 internal constant Z_2 = hex\"b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30\";\n  bytes32 internal constant Z_3 = hex\"21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85\";\n  bytes32 internal constant Z_4 = hex\"e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344\";\n  bytes32 internal constant Z_5 = hex\"0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d\";\n  bytes32 internal constant Z_6 = hex\"887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968\";\n  bytes32 internal constant Z_7 = hex\"ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83\";\n  bytes32 internal constant Z_8 = hex\"9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af\";\n  bytes32 internal constant Z_9 = hex\"cefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0\";\n  bytes32 internal constant Z_10 = hex\"f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5\";\n  bytes32 internal constant Z_11 = hex\"f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892\";\n  bytes32 internal constant Z_12 = hex\"3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c\";\n  bytes32 internal constant Z_13 = hex\"c1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb\";\n  bytes32 internal constant Z_14 = hex\"5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc\";\n  bytes32 internal constant Z_15 = hex\"da7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2\";\n  bytes32 internal constant Z_16 = hex\"2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f\";\n  bytes32 internal constant Z_17 = hex\"e1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a\";\n  bytes32 internal constant Z_18 = hex\"5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0\";\n  bytes32 internal constant Z_19 = hex\"b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0\";\n  bytes32 internal constant Z_20 = hex\"c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2\";\n  bytes32 internal constant Z_21 = hex\"f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9\";\n  bytes32 internal constant Z_22 = hex\"5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377\";\n  bytes32 internal constant Z_23 = hex\"4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652\";\n  bytes32 internal constant Z_24 = hex\"cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef\";\n  bytes32 internal constant Z_25 = hex\"0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d\";\n  bytes32 internal constant Z_26 = hex\"b8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0\";\n  bytes32 internal constant Z_27 = hex\"838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e\";\n  bytes32 internal constant Z_28 = hex\"662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e\";\n  bytes32 internal constant Z_29 = hex\"388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322\";\n  bytes32 internal constant Z_30 = hex\"93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735\";\n  bytes32 internal constant Z_31 = hex\"8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9\";\n  bytes32 internal constant Z_32 = hex\"27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757\";\n\n  // ============= Structs ==============\n\n  /**\n   * @notice Struct representing incremental merkle tree. Contains current\n   * branch and the number of inserted leaves in the tree.\n   **/\n  struct Tree {\n    bytes32[TREE_DEPTH] branch;\n    uint256 count;\n  }\n\n  // ========= Write Methods =========\n\n  /**\n   * @notice Inserts a given node (leaf) into merkle tree. Operates on an in-memory tree and\n   * returns an updated version of that tree.\n   * @dev Reverts if the tree is already full.\n   * @param node Element to insert into tree.\n   * @return Tree Updated tree.\n   **/\n  function insert(Tree memory tree, bytes32 node) internal pure returns (Tree memory) {\n    // Update tree.count to increase the current count by 1 since we'll be including a new node.\n    uint256 size = ++tree.count;\n    if (size > MAX_LEAVES) revert MerkleLib__insert_treeIsFull();\n\n    // Loop starting at 0, ending when we've finished inserting the node (i.e. hashing it) into\n    // the active branch. Each loop we cut size in half, hashing the inserted node up the active\n    // branch along the way.\n    for (uint256 i; i < TREE_DEPTH; ) {\n      // Check if the current size is odd; if so, we set this index in the branch to be the node.\n      if ((size & 1) == 1) {\n        // If i > 0, then this node will be a hash of the original node with every layer up\n        // until layer `i`.\n        tree.branch[i] = node;\n        return tree;\n      }\n      // If the size is not yet odd, we hash the current index in the tree branch with the node.\n      node = keccak256(abi.encodePacked(tree.branch[i], node));\n      size >>= 1; // Cut size in half (statement equivalent to: `size /= 2`).\n\n      unchecked {\n        ++i;\n      }\n    }\n    // As the loop should always end prematurely with the `return` statement, this code should\n    // be unreachable. We revert here just to be safe.\n    revert MerkleLib__insert_treeIsFull();\n  }\n\n  // ========= Read Methods =========\n\n  /**\n   * @notice Calculates and returns tree's current root.\n   * @return _current bytes32 root.\n   **/\n  function root(Tree storage tree) internal view returns (bytes32 _current) {\n    uint256 _index = tree.count;\n\n    if (_index == 0) {\n      return Z_32;\n    }\n\n    uint256 i;\n    assembly {\n      let TREE_SLOT := tree.slot\n\n      for {\n\n      } true {\n\n      } {\n        for {\n\n        } true {\n\n        } {\n          if and(_index, 1) {\n            mstore(0, sload(TREE_SLOT))\n            mstore(0x20, Z_0)\n            _current := keccak256(0, 0x40)\n            break\n          }\n\n          if and(_index, shl(1, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 1)))\n            mstore(0x20, Z_1)\n            _current := keccak256(0, 0x40)\n            i := 1\n            break\n          }\n\n          if and(_index, shl(2, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 2)))\n            mstore(0x20, Z_2)\n            _current := keccak256(0, 0x40)\n            i := 2\n            break\n          }\n\n          if and(_index, shl(3, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 3)))\n            mstore(0x20, Z_3)\n            _current := keccak256(0, 0x40)\n            i := 3\n            break\n          }\n\n          if and(_index, shl(4, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 4)))\n            mstore(0x20, Z_4)\n            _current := keccak256(0, 0x40)\n            i := 4\n            break\n          }\n\n          if and(_index, shl(5, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 5)))\n            mstore(0x20, Z_5)\n            _current := keccak256(0, 0x40)\n            i := 5\n            break\n          }\n\n          if and(_index, shl(6, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 6)))\n            mstore(0x20, Z_6)\n            _current := keccak256(0, 0x40)\n            i := 6\n            break\n          }\n\n          if and(_index, shl(7, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 7)))\n            mstore(0x20, Z_7)\n            _current := keccak256(0, 0x40)\n            i := 7\n            break\n          }\n\n          if and(_index, shl(8, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 8)))\n            mstore(0x20, Z_8)\n            _current := keccak256(0, 0x40)\n            i := 8\n            break\n          }\n\n          if and(_index, shl(9, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 9)))\n            mstore(0x20, Z_9)\n            _current := keccak256(0, 0x40)\n            i := 9\n            break\n          }\n\n          if and(_index, shl(10, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 10)))\n            mstore(0x20, Z_10)\n            _current := keccak256(0, 0x40)\n            i := 10\n            break\n          }\n\n          if and(_index, shl(11, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 11)))\n            mstore(0x20, Z_11)\n            _current := keccak256(0, 0x40)\n            i := 11\n            break\n          }\n\n          if and(_index, shl(12, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 12)))\n            mstore(0x20, Z_12)\n            _current := keccak256(0, 0x40)\n            i := 12\n            break\n          }\n\n          if and(_index, shl(13, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 13)))\n            mstore(0x20, Z_13)\n            _current := keccak256(0, 0x40)\n            i := 13\n            break\n          }\n\n          if and(_index, shl(14, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 14)))\n            mstore(0x20, Z_14)\n            _current := keccak256(0, 0x40)\n            i := 14\n            break\n          }\n\n          if and(_index, shl(15, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 15)))\n            mstore(0x20, Z_15)\n            _current := keccak256(0, 0x40)\n            i := 15\n            break\n          }\n\n          if and(_index, shl(16, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 16)))\n            mstore(0x20, Z_16)\n            _current := keccak256(0, 0x40)\n            i := 16\n            break\n          }\n\n          if and(_index, shl(17, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 17)))\n            mstore(0x20, Z_17)\n            _current := keccak256(0, 0x40)\n            i := 17\n            break\n          }\n\n          if and(_index, shl(18, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 18)))\n            mstore(0x20, Z_18)\n            _current := keccak256(0, 0x40)\n            i := 18\n            break\n          }\n\n          if and(_index, shl(19, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 19)))\n            mstore(0x20, Z_19)\n            _current := keccak256(0, 0x40)\n            i := 19\n            break\n          }\n\n          if and(_index, shl(20, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 20)))\n            mstore(0x20, Z_20)\n            _current := keccak256(0, 0x40)\n            i := 20\n            break\n          }\n\n          if and(_index, shl(21, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 21)))\n            mstore(0x20, Z_21)\n            _current := keccak256(0, 0x40)\n            i := 21\n            break\n          }\n\n          if and(_index, shl(22, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 22)))\n            mstore(0x20, Z_22)\n            _current := keccak256(0, 0x40)\n            i := 22\n            break\n          }\n\n          if and(_index, shl(23, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 23)))\n            mstore(0x20, Z_23)\n            _current := keccak256(0, 0x40)\n            i := 23\n            break\n          }\n\n          if and(_index, shl(24, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 24)))\n            mstore(0x20, Z_24)\n            _current := keccak256(0, 0x40)\n            i := 24\n            break\n          }\n\n          if and(_index, shl(25, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 25)))\n            mstore(0x20, Z_25)\n            _current := keccak256(0, 0x40)\n            i := 25\n            break\n          }\n\n          if and(_index, shl(26, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 26)))\n            mstore(0x20, Z_26)\n            _current := keccak256(0, 0x40)\n            i := 26\n            break\n          }\n\n          if and(_index, shl(27, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 27)))\n            mstore(0x20, Z_27)\n            _current := keccak256(0, 0x40)\n            i := 27\n            break\n          }\n\n          if and(_index, shl(28, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 28)))\n            mstore(0x20, Z_28)\n            _current := keccak256(0, 0x40)\n            i := 28\n            break\n          }\n\n          if and(_index, shl(29, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 29)))\n            mstore(0x20, Z_29)\n            _current := keccak256(0, 0x40)\n            i := 29\n            break\n          }\n\n          if and(_index, shl(30, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 30)))\n            mstore(0x20, Z_30)\n            _current := keccak256(0, 0x40)\n            i := 30\n            break\n          }\n\n          if and(_index, shl(31, 1)) {\n            mstore(0, sload(add(TREE_SLOT, 31)))\n            mstore(0x20, Z_31)\n            _current := keccak256(0, 0x40)\n            i := 31\n            break\n          }\n\n          _current := Z_32\n          i := 32\n          break\n        }\n\n        if gt(i, 30) {\n          break\n        }\n\n        {\n          if lt(i, 1) {\n            switch and(_index, shl(1, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_1)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 1)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 2) {\n            switch and(_index, shl(2, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_2)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 2)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 3) {\n            switch and(_index, shl(3, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_3)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 3)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 4) {\n            switch and(_index, shl(4, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_4)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 4)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 5) {\n            switch and(_index, shl(5, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_5)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 5)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 6) {\n            switch and(_index, shl(6, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_6)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 6)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 7) {\n            switch and(_index, shl(7, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_7)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 7)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 8) {\n            switch and(_index, shl(8, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_8)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 8)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 9) {\n            switch and(_index, shl(9, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_9)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 9)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 10) {\n            switch and(_index, shl(10, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_10)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 10)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 11) {\n            switch and(_index, shl(11, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_11)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 11)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 12) {\n            switch and(_index, shl(12, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_12)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 12)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 13) {\n            switch and(_index, shl(13, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_13)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 13)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 14) {\n            switch and(_index, shl(14, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_14)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 14)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 15) {\n            switch and(_index, shl(15, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_15)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 15)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 16) {\n            switch and(_index, shl(16, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_16)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 16)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 17) {\n            switch and(_index, shl(17, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_17)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 17)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 18) {\n            switch and(_index, shl(18, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_18)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 18)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 19) {\n            switch and(_index, shl(19, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_19)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 19)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 20) {\n            switch and(_index, shl(20, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_20)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 20)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 21) {\n            switch and(_index, shl(21, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_21)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 21)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 22) {\n            switch and(_index, shl(22, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_22)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 22)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 23) {\n            switch and(_index, shl(23, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_23)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 23)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 24) {\n            switch and(_index, shl(24, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_24)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 24)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 25) {\n            switch and(_index, shl(25, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_25)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 25)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 26) {\n            switch and(_index, shl(26, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_26)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 26)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 27) {\n            switch and(_index, shl(27, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_27)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 27)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 28) {\n            switch and(_index, shl(28, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_28)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 28)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 29) {\n            switch and(_index, shl(29, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_29)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 29)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 30) {\n            switch and(_index, shl(30, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_30)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 30)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n\n          if lt(i, 31) {\n            switch and(_index, shl(31, 1))\n            case 0 {\n              mstore(0, _current)\n              mstore(0x20, Z_31)\n            }\n            default {\n              mstore(0, sload(add(TREE_SLOT, 31)))\n              mstore(0x20, _current)\n            }\n\n            _current := keccak256(0, 0x40)\n          }\n        }\n\n        break\n      }\n    }\n  }\n\n  /**\n   * @notice Calculates and returns the merkle root for the given leaf `_item`,\n   * a merkle branch, and the index of `_item` in the tree.\n   * @param _item Merkle leaf\n   * @param _branch Merkle proof\n   * @param _index Index of `_item` in tree\n   * @return _current Calculated merkle root\n   **/\n  function branchRoot(\n    bytes32 _item,\n    bytes32[TREE_DEPTH] memory _branch,\n    uint256 _index\n  ) internal pure returns (bytes32 _current) {\n    assembly {\n      _current := _item\n      let BRANCH_DATA_OFFSET := _branch\n      let f\n\n      f := shl(5, and(_index, 1))\n      mstore(f, _current)\n      mstore(sub(0x20, f), mload(BRANCH_DATA_OFFSET))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(1, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 1))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(2, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 2))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(3, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 3))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(4, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 4))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(5, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 5))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(6, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 6))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(7, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 7))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(8, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 8))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(9, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 9))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(10, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 10))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(11, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 11))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(12, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 12))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(13, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 13))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(14, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 14))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(15, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 15))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(16, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 16))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(17, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 17))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(18, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 18))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(19, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 19))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(20, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 20))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(21, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 21))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(22, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 22))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(23, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 23))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(24, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 24))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(25, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 25))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(26, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 26))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(27, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 27))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(28, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 28))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(29, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 29))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(30, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 30))))\n      _current := keccak256(0, 0x40)\n\n      f := shl(5, iszero(and(_index, shl(31, 1))))\n      mstore(sub(0x20, f), _current)\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 31))))\n      _current := keccak256(0, 0x40)\n    }\n  }\n}\n"},"contracts/messaging/libraries/Message.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {TypedMemView} from \"../../shared/libraries/TypedMemView.sol\";\nimport {TypeCasts} from \"../../shared/libraries/TypeCasts.sol\";\n\n/**\n * @title Message Library\n * @author Illusory Systems Inc.\n * @notice Library for formatted messages used by Home and Replica.\n **/\nlibrary Message {\n  using TypedMemView for bytes;\n  using TypedMemView for bytes29;\n\n  // Number of bytes in formatted message before `body` field\n  uint256 internal constant PREFIX_LENGTH = 76;\n\n  /**\n   * @notice Returns formatted (packed) message with provided fields\n   * @param _originDomain Domain of home chain\n   * @param _sender Address of sender as bytes32\n   * @param _nonce Destination-specific nonce\n   * @param _destinationDomain Domain of destination chain\n   * @param _recipient Address of recipient on destination chain as bytes32\n   * @param _messageBody Raw bytes of message body\n   * @return Formatted message\n   **/\n  function formatMessage(\n    uint32 _originDomain,\n    bytes32 _sender,\n    uint32 _nonce,\n    uint32 _destinationDomain,\n    bytes32 _recipient,\n    bytes memory _messageBody\n  ) internal pure returns (bytes memory) {\n    return abi.encodePacked(_originDomain, _sender, _nonce, _destinationDomain, _recipient, _messageBody);\n  }\n\n  /**\n   * @notice Returns leaf of formatted message with provided fields.\n   * @param _origin Domain of home chain\n   * @param _sender Address of sender as bytes32\n   * @param _nonce Destination-specific nonce number\n   * @param _destination Domain of destination chain\n   * @param _recipient Address of recipient on destination chain as bytes32\n   * @param _body Raw bytes of message body\n   * @return Leaf (hash) of formatted message\n   **/\n  function messageHash(\n    uint32 _origin,\n    bytes32 _sender,\n    uint32 _nonce,\n    uint32 _destination,\n    bytes32 _recipient,\n    bytes memory _body\n  ) internal pure returns (bytes32) {\n    return keccak256(formatMessage(_origin, _sender, _nonce, _destination, _recipient, _body));\n  }\n\n  /// @notice Returns message's origin field\n  function origin(bytes29 _message) internal pure returns (uint32) {\n    return uint32(_message.indexUint(0, 4));\n  }\n\n  /// @notice Returns message's sender field\n  function sender(bytes29 _message) internal pure returns (bytes32) {\n    return _message.index(4, 32);\n  }\n\n  /// @notice Returns message's nonce field\n  function nonce(bytes29 _message) internal pure returns (uint32) {\n    return uint32(_message.indexUint(36, 4));\n  }\n\n  /// @notice Returns message's destination field\n  function destination(bytes29 _message) internal pure returns (uint32) {\n    return uint32(_message.indexUint(40, 4));\n  }\n\n  /// @notice Returns message's recipient field as bytes32\n  function recipient(bytes29 _message) internal pure returns (bytes32) {\n    return _message.index(44, 32);\n  }\n\n  /// @notice Returns message's recipient field as an address\n  function recipientAddress(bytes29 _message) internal pure returns (address) {\n    return TypeCasts.bytes32ToAddress(recipient(_message));\n  }\n\n  /// @notice Returns message's body field as bytes29 (refer to TypedMemView library for details on bytes29 type)\n  function body(bytes29 _message) internal pure returns (bytes29) {\n    return _message.slice(PREFIX_LENGTH, _message.len() - PREFIX_LENGTH, 0);\n  }\n\n  function leaf(bytes29 _message) internal pure returns (bytes32) {\n    uint256 loc = _message.loc();\n    uint256 len = _message.len();\n    /*\n    prev:\n    return\n      messageHash(\n        origin(_message),\n        sender(_message),\n        nonce(_message),\n        destination(_message),\n        recipient(_message),\n        TypedMemView.clone(body(_message))\n      );\n\n      below added for gas optimization\n     */\n    bytes32 hash;\n    assembly {\n      hash := keccak256(loc, len)\n    }\n    return hash;\n  }\n}\n"},"contracts/messaging/libraries/Queue.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n/**\n * @title QueueLib\n * @notice Library containing queue struct and operations for queue used by RootManager and SpokeConnector\n * for handling the verification period. Tracks both message data itself and the block that the message was\n * committed to the queue.\n **/\nlibrary QueueLib {\n  /**\n   * @notice Queue struct\n   * @dev Internally keeps track of the `first` and `last` elements through\n   * indices and a mapping of indices to enqueued elements.\n   **/\n  struct Queue {\n    uint128 first;\n    uint128 last;\n    // Message data (roots) that have been received.\n    mapping(uint256 => bytes32) data;\n    // The block that the message data was committed.\n    mapping(uint256 => uint256) commitBlock;\n    // A reverse mapping of all entries that have been \"removed\" by value; behaves like a blocklist.\n    // NOTE: Removed values can still be pushed to the queue, but will be ignored/skipped when dequeuing.\n    mapping(bytes32 => bool) removed;\n  }\n\n  /**\n   * @notice Initializes the queue\n   * @dev Empty state denoted by queue.first > queue.last. Queue initialized with\n   * queue.first = 1 and queue.last = 0.\n   **/\n  function initialize(Queue storage queue) internal {\n    queue.first = 1;\n    delete queue.last;\n  }\n\n  /**\n   * @notice Enqueues a single new element and records block number that the item was enqueued\n   * (i.e. current block).\n   * @param item New element to be enqueued.\n   * @return last Index of newly enqueued element.\n   **/\n  function enqueue(Queue storage queue, bytes32 item) internal returns (uint128 last) {\n    // Commit block is the block we are committing this item to the queue.\n    uint256 commitBlock = block.number;\n    // Increment `last` position.\n    last = ++queue.last;\n    // Add the item and record block number.\n    queue.data[last] = item;\n    queue.commitBlock[last] = commitBlock;\n  }\n\n  /**\n   * @notice Dequeues element at front of queue if it exists AND it's surpassed the given\n   * verification period (i.e. has been sitting in the queue for enough blocks).\n   * @param queue QueueStorage struct from contract.\n   * @param delay The required delay that must have been surpassed in order to merit dequeuing\n   * the element.\n   * @param max The maximum number of elements we are allowed to dequeue in this call.\n   * @return item Dequeued element IFF delay period has been surpassed; otherwise, empty bytes32.\n   **/\n  function dequeueVerified(\n    Queue storage queue,\n    uint256 delay,\n    uint128 max\n  ) internal returns (bytes32[] memory) {\n    uint128 first = queue.first;\n    uint128 last = queue.last;\n\n    // If queue is empty, short-circuit here.\n    if (last < first) {\n      return new bytes32[](0);\n    }\n\n    // Input sanity checks.\n    require(first != 0, \"queue !init'd\");\n    require(max > 0, \"!acceptable max\");\n\n    {\n      // If we would otherwise be searching beyond the maximum amount we are allowed to dequeue in this\n      // call, reduce `last` to artificially shrink the available queue within the scope of this method.\n      uint128 highestAllowed = first + max - 1;\n      if (last > highestAllowed) {\n        last = highestAllowed;\n      }\n    }\n\n    // Commit block must be below this block to be considered verified.\n    // NOTE: It's assumed that block number is a higher value than delay (i.e. delay is reasonable).\n    uint256 highestAcceptableCommitBlock = block.number - delay;\n\n    // To determine the last item index in the queue we want to return, iterate backwards until we\n    // find a `commitBlock` that has surpassed the delay period.\n    // TODO: The most efficient way to determine the split index here should be using a binary search.\n    bool containsVerified;\n    // NOTE: `first <= last` rephrased here to `!(first > last)` as it's a cheaper condition.\n    while (!(first > last)) {\n      uint256 commitBlock = queue.commitBlock[last];\n      // NOTE: Same as `commitBlock <= highestAcceptableCommitBlock`.\n      if (!(commitBlock > highestAcceptableCommitBlock)) {\n        containsVerified = true;\n        break;\n      }\n      unchecked {\n        --last;\n      }\n    }\n    // IFF no verified items were found, then we can return an empty array.\n    if (!containsVerified) {\n      return new bytes32[](0);\n    }\n\n    bytes32[] memory items = new bytes32[](last + 1 - first);\n    uint256 index; // Cursor for index in the batch of `items`.\n    uint256 removedCount; // If any items have been removed, we filter them here.\n    // NOTE: `first <= last` rephrased here to `!(first > last)` as it's a cheaper condition.\n    while (!(first > last)) {\n      bytes32 item = queue.data[first];\n      // Check to see if the item has been removed before appending it to the array.\n      if (!queue.removed[item]) {\n        items[index] = item;\n        unchecked {\n          ++index;\n        }\n      } else {\n        // The item was removed. We do NOT increment the index (we will re-use this position).\n        unchecked {\n          ++removedCount;\n        }\n      }\n\n      // Delete the item and the commitBlock.\n      // NOTE: We do NOT delete the entry from `queue.removed`, as it's a reverse lookup and we want to\n      // block that value permanently (e.g. if there's multiple of the same bad value in the queue).\n      delete queue.data[first];\n      delete queue.commitBlock[first];\n\n      unchecked {\n        ++first;\n      }\n    }\n\n    // Update the value for `first` in our queue object since we've dequeued a number of elements.\n    queue.first = first;\n\n    if (removedCount == 0) {\n      return items;\n    } else {\n      // If some items were removed, there will be a number of trailing 0 values we need to truncate\n      // from the array. Create a new array with all of the items up until these empty values.\n      bytes32[] memory amendedItems = new bytes32[](index); // The last `index` is the new length.\n      for (uint256 i; i < index; ) {\n        amendedItems[i] = items[i];\n        unchecked {\n          ++i;\n        }\n      }\n      return amendedItems;\n    }\n  }\n\n  /**\n   * @notice Sets a certain value to be ignored (skipped) when dequeuing.\n   */\n  function remove(Queue storage queue, bytes32 item) internal {\n    require(!queue.removed[item], \"already removed\");\n    queue.removed[item] = true;\n  }\n\n  /**\n   * @notice Check whether the queue is empty.\n   * @param queue QueueStorage struct from contract.\n   * @return bool True if queue is empty and false if otherwise.\n   */\n  function isEmpty(Queue storage queue) internal view returns (bool) {\n    return queue.last < queue.first;\n  }\n\n  /**\n   * @notice Returns number of elements in queue.\n   * @param queue QueueStorage struct from contract.\n   */\n  function length(Queue storage queue) internal view returns (uint256) {\n    uint128 last = queue.last;\n    uint128 first = queue.first;\n    // Cannot underflow unless state is corrupted.\n    return _length(last, first);\n  }\n\n  /**\n   * @notice Returns number of elements between `last` and `first` (used internally).\n   * @param last The last element index.\n   * @param first The first element index.\n   */\n  function _length(uint128 last, uint128 first) internal pure returns (uint256) {\n    return uint256(last + 1 - first);\n  }\n}\n"},"contracts/messaging/libraries/RateLimited.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n/**\n * @notice An abstract contract intended to manage the rate limiting aspect of spoke\n * connector messaging. Rate limiting the number of messages we can send over a span of\n * blocks is used to mitigate key DoSing vectors for transporting messages between chains.\n */\nabstract contract RateLimited {\n  // ========== Custom Errors ===========\n\n  error RateLimited__rateLimited_messageSendRateExceeded();\n\n  // ============ Events ============\n\n  event SendRateLimitUpdated(address updater, uint256 newRateLimit);\n\n  // ============ Public Storage ============\n\n  /**\n   * @notice The number of blocks required between message sending events.\n   * @dev NOTE: This value is 0 by default, meaning that rate limiting functionality\n   * will naturally be disabled by default.\n   */\n  uint256 public rateLimitBlocks;\n\n  /**\n   * @notice Tracks the last block that we sent a message.\n   */\n  uint256 public lastSentBlock;\n\n  // ============ Modifiers ============\n\n  /**\n   * @notice Checks to see if we can send this block, given the current rate limit\n   * setting and the last block we sent a message. If rate limit has been surpassed,\n   * we update the `lastSentBlock` to be the current block.\n   */\n  modifier rateLimited() {\n    // Check to make sure we have surpassed the number of rate limit blocks.\n    if (lastSentBlock + rateLimitBlocks > block.number) {\n      revert RateLimited__rateLimited_messageSendRateExceeded();\n    }\n    // Update the last block we sent a message to be the current one.\n    lastSentBlock = block.number;\n    _;\n  }\n\n  // ============ Admin Functions ============\n\n  /**\n   * @notice Update the current rate limit to a new value.\n   */\n  function _setRateLimitBlocks(uint256 _newRateLimit) internal {\n    require(_newRateLimit != rateLimitBlocks, \"!new rate limit\");\n    // NOTE: Setting the block rate limit interval to 0 will result in rate limiting\n    // being disabled.\n    rateLimitBlocks = _newRateLimit;\n    emit SendRateLimitUpdated(msg.sender, _newRateLimit);\n  }\n}\n"},"contracts/messaging/MerkleTreeManager.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {ProposedOwnableUpgradeable} from \"../shared/ProposedOwnableUpgradeable.sol\";\nimport {MerkleLib} from \"./libraries/MerkleLib.sol\";\n\n/**\n * @title MerkleTreeManager\n * @notice Contains a Merkle tree instance and exposes read/write functions for the tree.\n * @dev On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector.\n */\ncontract MerkleTreeManager is ProposedOwnableUpgradeable {\n  // ========== Custom Errors ===========\n\n  error MerkleTreeManager__setArborist_zeroAddress();\n  error MerkleTreeManager__setArborist_alreadyArborist();\n\n  // ============ Events ============\n\n  event ArboristUpdated(address previous, address updated);\n\n  event LeafInserted(bytes32 root, uint256 count, bytes32 leaf);\n\n  event LeavesInserted(bytes32 root, uint256 count, bytes32[] leaves);\n\n  // ============ Libraries ============\n\n  using MerkleLib for MerkleLib.Tree;\n\n  // ============ Public Storage ============\n\n  /**\n   * @notice Core data structure with which this contract is tasked with keeping custody.\n   * Writable only by the designated arborist.\n   */\n  MerkleLib.Tree public tree;\n\n  /**\n   * @notice The arborist contract that has permission to write to this tree.\n   * @dev This could be the root manager contract or a spoke connector contract, for example.\n   */\n  address public arborist;\n\n  // ============ Modifiers ============\n\n  modifier onlyArborist() {\n    require(arborist == msg.sender, \"!arborist\");\n    _;\n  }\n\n  // ============ Getters ============\n\n  /**\n   * @notice Returns the current branch.\n   */\n  function branch() public view returns (bytes32[32] memory) {\n    return tree.branch;\n  }\n\n  /**\n   * @notice Calculates and returns the current root.\n   */\n  function root() public view returns (bytes32) {\n    return tree.root();\n  }\n\n  /**\n   * @notice Returns the number of inserted leaves in the tree (current index).\n   */\n  function count() public view returns (uint256) {\n    return tree.count;\n  }\n\n  /**\n   * @notice Convenience getter: returns the root and count.\n   */\n  function rootAndCount() public view returns (bytes32, uint256) {\n    return (tree.root(), tree.count);\n  }\n\n  // ======== Initializer =========\n\n  function initialize(address _arborist) public initializer {\n    __MerkleTreeManager_init(_arborist);\n    __ProposedOwnable_init();\n  }\n\n  /**\n   * @dev Initializes MerkleTreeManager instance. Sets the msg.sender as the initial permissioned\n   */\n  function __MerkleTreeManager_init(address _arborist) internal onlyInitializing {\n    __MerkleTreeManager_init_unchained(_arborist);\n  }\n\n  function __MerkleTreeManager_init_unchained(address _arborist) internal onlyInitializing {\n    arborist = _arborist;\n  }\n\n  // ============ Admin Functions ==============\n\n  /**\n   * @notice Method for the current arborist to assign write permissions to a new arborist.\n   * @param newArborist The new address to set as the current arborist.\n   */\n  function setArborist(address newArborist) external onlyOwner {\n    if (newArborist == address(0)) revert MerkleTreeManager__setArborist_zeroAddress();\n    address current = arborist;\n    if (current == newArborist) revert MerkleTreeManager__setArborist_alreadyArborist();\n\n    // Emit updated event\n    emit ArboristUpdated(current, newArborist);\n\n    arborist = newArborist;\n  }\n\n  /**\n   * @notice Remove ability to renounce ownership\n   * @dev Renounce ownership should be impossible as long as there is a possibility the\n   * arborist may change.\n   */\n  function renounceOwnership() public virtual override onlyOwner {}\n\n  // ========= Public Functions =========\n\n  /**\n   * @notice Inserts the given leaves into the tree.\n   * @param leaves The leaves to be inserted into the tree.\n   * @return _root Current root for convenience.\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\n   * provided for convenience.\n   */\n  function insert(bytes32[] memory leaves) public onlyArborist returns (bytes32 _root, uint256 _count) {\n    // For > 1 leaf, considerably more efficient to put this tree into memory, conduct operations,\n    // then re-assign it to storage - *especially* if we have multiple leaves to insert.\n    MerkleLib.Tree memory _tree = tree;\n\n    uint256 leafCount = leaves.length;\n    for (uint256 i; i < leafCount; ) {\n      // Insert the new node (using in-memory method).\n      _tree = _tree.insert(leaves[i]);\n      unchecked {\n        ++i;\n      }\n    }\n    // Write the newly updated tree to storage.\n    tree = _tree;\n\n    // Get return details for convenience.\n    _count = _tree.count;\n    // NOTE: Root calculation method currently reads from storage only.\n    _root = tree.root();\n\n    emit LeavesInserted(_root, _count, leaves);\n  }\n\n  /**\n   * @notice Inserts the given leaf into the tree.\n   * @param leaf The leaf to be inserted into the tree.\n   * @return _root Current root for convenience.\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\n   * provided for convenience.\n   */\n  function insert(bytes32 leaf) public onlyArborist returns (bytes32 _root, uint256 _count) {\n    // Insert the new node.\n    tree = tree.insert(leaf);\n    _count = tree.count;\n    _root = tree.root();\n\n    emit LeafInserted(_root, _count, leaf);\n  }\n\n  // ============ Upgrade Gap ============\n  uint256[48] private __GAP; // gap for upgrade safety\n}\n"},"contracts/messaging/RootManager.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {ProposedOwnable} from \"../shared/ProposedOwnable.sol\";\n\nimport {IRootManager} from \"./interfaces/IRootManager.sol\";\nimport {IHubConnector} from \"./interfaces/IHubConnector.sol\";\nimport {QueueLib} from \"./libraries/Queue.sol\";\nimport {DomainIndexer} from \"./libraries/DomainIndexer.sol\";\n\nimport {MerkleTreeManager} from \"./MerkleTreeManager.sol\";\nimport {WatcherClient} from \"./WatcherClient.sol\";\n\n/**\n * @notice This contract exists at cluster hubs, and aggregates all transfer roots from messaging\n * spokes into a single merkle tree. Regularly broadcasts the root of the aggregator tree back out\n * to all the messaging spokes.\n */\ncontract RootManager is ProposedOwnable, IRootManager, WatcherClient, DomainIndexer {\n  // ============ Libraries ============\n\n  using QueueLib for QueueLib.Queue;\n\n  // ============ Events ============\n\n  event DelayBlocksUpdated(uint256 previous, uint256 updated);\n\n  event RootReceived(uint32 domain, bytes32 receivedRoot, uint256 queueIndex);\n\n  event RootsAggregated(bytes32 aggregateRoot, uint256 count, bytes32[] aggregatedMessageRoots);\n\n  event RootPropagated(bytes32 aggregateRoot, uint256 count, bytes32 domainsHash);\n\n  event RootDiscarded(bytes32 fraudulentRoot);\n\n  event ConnectorAdded(uint32 domain, address connector, uint32[] domains, address[] connectors);\n\n  event ConnectorRemoved(uint32 domain, address connector, uint32[] domains, address[] connectors, address caller);\n\n  event PropagateFailed(uint32 domain, address connector);\n\n  // ============ Properties ============\n\n  /**\n   * @notice Maximum number of values to dequeue from the queue in one sitting (one call of `propagate`\n   * or `dequeue`). Used to cap gas requirements.\n   */\n  uint128 public constant DEQUEUE_MAX = 100;\n\n  /**\n   * @notice Number of blocks to delay the processing of a message to allow for watchers to verify\n   * the validity and pause if necessary.\n   */\n  uint256 public delayBlocks;\n\n  /**\n   * @notice Queue used for management of verification for inbound roots from spoke chains. Once\n   * the verification period elapses, the inbound messages can be aggregated into the merkle tree\n   * for propagation to spoke chains.\n   * @dev Watchers should be able to watch this queue for fraudulent messages and pause this contract\n   * if fraud is detected.\n   */\n  QueueLib.Queue public pendingInboundRoots;\n\n  /**\n   * @notice The last aggregate root we propagated to spoke chains. Used to prevent sending redundant\n   * aggregate roots in `propagate`.\n   */\n  bytes32 public lastPropagatedRoot;\n\n  /**\n   * @notice MerkleTreeManager contract instance. Will hold the active tree of aggregated inbound roots.\n   * The root of this tree will be distributed crosschain to all spoke domains.\n   */\n  MerkleTreeManager public immutable MERKLE;\n\n  // ============ Modifiers ============\n\n  modifier onlyConnector(uint32 _domain) {\n    require(getConnectorForDomain(_domain) == msg.sender, \"!connector\");\n    _;\n  }\n\n  // ============ Constructor ============\n\n  /**\n   * @notice Creates a new RootManager instance.\n   * @param _delayBlocks The delay for the validation period for incoming messages in blocks.\n   * @param _merkle The address of the MerkleTreeManager on this domain.\n   * @param _watcherManager The address of the WatcherManager on this domain.\n   */\n  constructor(\n    uint256 _delayBlocks,\n    address _merkle,\n    address _watcherManager\n  ) ProposedOwnable() WatcherClient(_watcherManager) {\n    _setOwner(msg.sender);\n\n    require(_merkle != address(0), \"!zero merkle\");\n    MERKLE = MerkleTreeManager(_merkle);\n\n    delayBlocks = _delayBlocks;\n\n    // Initialize pending inbound root queue.\n    pendingInboundRoots.initialize();\n  }\n\n  // ================ Getters ================\n\n  function getPendingInboundRootsCount() public view returns (uint256) {\n    return pendingInboundRoots.length();\n  }\n\n  // ============ Admin Functions ============\n\n  /**\n   * @notice Set the `delayBlocks`, the period in blocks over which an incoming message\n   * is verified.\n   */\n  function setDelayBlocks(uint256 _delayBlocks) public onlyOwner {\n    require(_delayBlocks != delayBlocks, \"!delayBlocks\");\n    emit DelayBlocksUpdated(_delayBlocks, delayBlocks);\n    delayBlocks = _delayBlocks;\n  }\n\n  /**\n   * @notice Add a new supported domain and corresponding hub connector to the system. This new domain\n   * will receive the propagated aggregate root.\n   * @dev Only owner can add a new connector. Address should be the connector on L1.\n   * @dev Cannot add address(0) to avoid duplicated domain in array and reduce gas fee while propagating.\n   *\n   * @param _domain The target spoke domain of the given connector.\n   * @param _connector Address of the hub connector.\n   */\n  function addConnector(uint32 _domain, address _connector) external onlyOwner {\n    addDomain(_domain, _connector);\n    emit ConnectorAdded(_domain, _connector, domains, connectors);\n  }\n\n  /**\n   * @notice Remove support for a connector and respective domain. That connector/domain will no longer\n   * receive updates for the latest aggregate root.\n   * @dev Only watcher can remove a connector.\n   * TODO: Could add a metatx-able `removeConnectorWithSig` if we want to use relayers?\n   *\n   * @param _domain The spoke domain of the target connector we want to remove.\n   */\n  function removeConnector(uint32 _domain) public onlyWatcher {\n    address _connector = removeDomain(_domain);\n    emit ConnectorRemoved(_domain, _connector, domains, connectors, msg.sender);\n  }\n\n  /**\n   * @notice Removes (effectively blocklists) a given (fraudulent) root from the queue of pending\n   * inbound roots.\n   * @dev The given root does NOT have to currently be in the queue. It isn't removed from the queue\n   * directly, but instead is filtered out when dequeuing is done for the sake of aggregation.\n   * @dev Can only be called by the owner when the protocol is paused.\n   *\n   * @param _root The root to be discarded.\n   */\n  function discardRoot(bytes32 _root) public onlyOwner whenPaused {\n    pendingInboundRoots.remove(_root);\n    emit RootDiscarded(_root);\n  }\n\n  /**\n   * @notice Remove ability to renounce ownership\n   * @dev Renounce ownership should be impossible as long as watchers can freely remove connectors\n   * and only the owner can add them back\n   */\n  function renounceOwnership() public virtual override(ProposedOwnable, WatcherClient) onlyOwner {}\n\n  // ============ Public Functions ============\n\n  /**\n   * @notice This is called by relayers to take the current aggregate tree root and propagate it to all\n   * spoke domains (via their respective hub connectors).\n   * @dev Should be called by relayers at a regular interval.\n   *\n   * @param _connectors Array of connectors: should match exactly the array of `connectors` in storage;\n   * used here to reduce gas costs, and keep them static regardless of number of supported domains.\n   * @param _fees Array of fees in native token for an AMB if required\n   * @param _encodedData Array of encodedData: extra params for each AMB if required\n   */\n  function propagate(\n    address[] calldata _connectors,\n    uint256[] calldata _fees,\n    bytes[] memory _encodedData\n  ) external payable whenNotPaused {\n    validateConnectors(_connectors);\n\n    uint256 _numDomains = _connectors.length;\n    // Sanity check: fees and encodedData lengths matches connectors length.\n    require(_fees.length == _numDomains && _encodedData.length == _numDomains, \"invalid lengths\");\n\n    // Dequeue verified roots from the queue and insert into the tree.\n    (bytes32 _aggregateRoot, uint256 _count) = dequeue();\n\n    // Sanity check: make sure we are not propagating a redundant aggregate root.\n    require(_aggregateRoot != lastPropagatedRoot, \"redundant root\");\n    lastPropagatedRoot = _aggregateRoot;\n\n    uint256 sum = msg.value;\n    for (uint32 i; i < _numDomains; ) {\n      // Try to send the message with appropriate encoded data and fees\n      // Continue on revert, but emit an event\n      try\n        IHubConnector(_connectors[i]).sendMessage{value: _fees[i]}(abi.encodePacked(_aggregateRoot), _encodedData[i])\n      {\n        // NOTE: This will ensure there is sufficient msg.value for all fees before calling `sendMessage`\n        // This will revert as soon as there are insufficient fees for call i, even if call n > i has\n        // sufficient budget, this function will revert\n        sum -= _fees[i];\n      } catch {\n        emit PropagateFailed(domains[i], _connectors[i]);\n      }\n\n      unchecked {\n        ++i;\n      }\n    }\n\n    emit RootPropagated(_aggregateRoot, _count, domainsHash);\n  }\n\n  /**\n   * @notice Accept an inbound root coming from a given domain's hub connector, enqueuing this incoming\n   * root into the current queue as it awaits the verification period.\n   * @dev The aggregate tree's root, which will include this inbound root, will be propagated to all spoke\n   * domains (via `propagate`) on a regular basis assuming the verification period is surpassed without\n   * dispute.\n   *\n   * @param _domain The source domain of the given root.\n   * @param _inbound The inbound root coming from the given domain.\n   */\n  function aggregate(uint32 _domain, bytes32 _inbound) external whenNotPaused onlyConnector(_domain) {\n    uint128 lastIndex = pendingInboundRoots.enqueue(_inbound);\n    emit RootReceived(_domain, _inbound, lastIndex);\n  }\n\n  /**\n   * @notice Dequeue verified inbound roots and insert them into the aggregator tree.\n   * @dev Will dequeue a fixed maximum amount of roots to prevent out of gas errors. As such, this\n   * method is public and separate from `propagate` so we can curtail an overloaded queue as needed.\n   * @dev Reverts if no verified inbound roots are found.\n   *\n   * @return bytes32 The new aggregate root.\n   * @return uint256 The updated count (number of leaves).\n   */\n  function dequeue() public whenNotPaused returns (bytes32, uint256) {\n    // Get all of the verified roots from the queue.\n    bytes32[] memory _verifiedInboundRoots = pendingInboundRoots.dequeueVerified(delayBlocks, DEQUEUE_MAX);\n\n    // If there's nothing dequeued, just return the root and count.\n    if (_verifiedInboundRoots.length == 0) {\n      return MERKLE.rootAndCount();\n    }\n\n    // Insert the leaves into the aggregator tree (method will also calculate and return the current\n    // aggregate root and count).\n    (bytes32 _aggregateRoot, uint256 _count) = MERKLE.insert(_verifiedInboundRoots);\n\n    emit RootsAggregated(_aggregateRoot, _count, _verifiedInboundRoots);\n\n    return (_aggregateRoot, _count);\n  }\n}\n"},"contracts/messaging/WatcherClient.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {Pausable} from \"@openzeppelin/contracts/security/Pausable.sol\";\n\nimport {ProposedOwnable} from \"../shared/ProposedOwnable.sol\";\nimport {WatcherManager} from \"./WatcherManager.sol\";\n\n/**\n * @notice This contract abstracts the functionality of the watcher manager.\n * Contracts can inherit this contract to be able to use the watcher manager's shared watcher set.\n */\n\ncontract WatcherClient is ProposedOwnable, Pausable {\n  // ============ Events ============\n  /**\n   * @notice Emitted when the manager address changes\n   * @param watcherManager The updated manager\n   */\n  event WatcherManagerChanged(address watcherManager);\n\n  // ============ Properties ============\n  /**\n   * @notice The `WatcherManager` contract governs the watcher allowlist.\n   * @dev Multiple clients can share a watcher set using the same manager\n   */\n  WatcherManager public watcherManager;\n\n  // ============ Constructor ============\n  constructor(address _watcherManager) ProposedOwnable() {\n    watcherManager = WatcherManager(_watcherManager);\n  }\n\n  // ============ Modifiers ============\n  /**\n   * @notice Enforces the sender is the watcher\n   */\n  modifier onlyWatcher() {\n    require(watcherManager.isWatcher(msg.sender), \"!watcher\");\n    _;\n  }\n\n  // ============ Admin fns ============\n  /**\n   * @notice Owner can enroll a watcher (abilities are defined by inheriting contracts)\n   */\n  function setWatcherManager(address _watcherManager) external onlyOwner {\n    require(_watcherManager != address(watcherManager), \"already watcher manager\");\n    watcherManager = WatcherManager(_watcherManager);\n    emit WatcherManagerChanged(_watcherManager);\n  }\n\n  /**\n   * @notice Owner can unpause contracts if fraud is detected by watchers\n   */\n  function unpause() external onlyOwner whenPaused {\n    _unpause();\n  }\n\n  /**\n   * @notice Remove ability to renounce ownership\n   * @dev Renounce ownership should be impossible as long as only the owner\n   * is able to unpause the contracts. You can still propose `address(0)`,\n   * but it will never be accepted.\n   */\n  function renounceOwnership() public virtual override onlyOwner {}\n\n  // ============ Watcher fns ============\n\n  /**\n   * @notice Watchers can pause contracts if fraud is detected\n   */\n  function pause() external onlyWatcher whenNotPaused {\n    _pause();\n  }\n}\n"},"contracts/messaging/WatcherManager.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {ProposedOwnable} from \"../shared/ProposedOwnable.sol\";\n\n/**\n * @notice This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can\n * inherit to make use of the same watcher set.\n */\n\ncontract WatcherManager is ProposedOwnable {\n  // ============ Events ============\n  event WatcherAdded(address watcher);\n\n  event WatcherRemoved(address watcher);\n\n  // ============ Properties ============\n  mapping(address => bool) public isWatcher;\n\n  // ============ Constructor ============\n  constructor() ProposedOwnable() {\n    _setOwner(msg.sender);\n  }\n\n  // ============ Modifiers ============\n\n  // ============ Admin fns ============\n  /**\n   * @dev Owner can enroll a watcher (abilities are defined by inheriting contracts)\n   */\n  function addWatcher(address _watcher) external onlyOwner {\n    require(!isWatcher[_watcher], \"already watcher\");\n    isWatcher[_watcher] = true;\n    emit WatcherAdded(_watcher);\n  }\n\n  /**\n   * @dev Owner can unenroll a watcher (abilities are defined by inheriting contracts)\n   */\n  function removeWatcher(address _watcher) external onlyOwner {\n    require(isWatcher[_watcher], \"!exist\");\n    delete isWatcher[_watcher];\n    emit WatcherRemoved(_watcher);\n  }\n\n  /**\n   * @notice Remove ability to renounce ownership\n   * @dev Renounce ownership should be impossible as long as the watcher griefing\n   * vector exists. You can still propose `address(0)`, but it will never be accepted.\n   */\n  function renounceOwnership() public virtual override onlyOwner {}\n}\n"},"contracts/shared/interfaces/IProposedOwnable.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.17;\n\n/**\n * @title IProposedOwnable\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\n * process\n */\ninterface IProposedOwnable {\n  /**\n   * @dev This emits when change in ownership of a contract is proposed.\n   */\n  event OwnershipProposed(address indexed proposedOwner);\n\n  /**\n   * @dev This emits when ownership of a contract changes.\n   */\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n  /**\n   * @notice Get the address of the owner\n   * @return owner_ The address of the owner.\n   */\n  function owner() external view returns (address owner_);\n\n  /**\n   * @notice Get the address of the proposed owner\n   * @return proposed_ The address of the proposed.\n   */\n  function proposed() external view returns (address proposed_);\n\n  /**\n   * @notice Set the address of the proposed owner of the contract\n   * @param newlyProposed The proposed new owner of the contract\n   */\n  function proposeNewOwner(address newlyProposed) external;\n\n  /**\n   * @notice Set the address of the proposed owner of the contract\n   */\n  function acceptProposedOwner() external;\n}\n"},"contracts/shared/libraries/ExcessivelySafeCall.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n// Taken from: https://github.com/nomad-xyz/ExcessivelySafeCall\n// NOTE: There is a difference between npm latest and github main versions\n// where the latest github version allows you to specify an ether value.\n\nlibrary ExcessivelySafeCall {\n  uint256 constant LOW_28_MASK = 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\n\n  /// @notice Use when you _really_ really _really_ don't trust the called\n  /// contract. This prevents the called contract from causing reversion of\n  /// the caller in as many ways as we can.\n  /// @dev The main difference between this and a solidity low-level call is\n  /// that we limit the number of bytes that the callee can cause to be\n  /// copied to caller memory. This prevents stupid things like malicious\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\n  /// to memory.\n  /// @param _target The address to call\n  /// @param _gas The amount of gas to forward to the remote contract\n  /// @param _value The value in wei to send to the remote contract\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\n  /// to memory.\n  /// @param _calldata The data to send to the remote contract\n  /// @return success and returndata, as `.call()`. Returndata is capped to\n  /// `_maxCopy` bytes.\n  function excessivelySafeCall(\n    address _target,\n    uint256 _gas,\n    uint256 _value,\n    uint16 _maxCopy,\n    bytes memory _calldata\n  ) internal returns (bool, bytes memory) {\n    // set up for assembly call\n    uint256 _toCopy;\n    bool _success;\n    bytes memory _returnData = new bytes(_maxCopy);\n    // dispatch message to recipient\n    // by assembly calling \"handle\" function\n    // we call via assembly to avoid memcopying a very large returndata\n    // returned by a malicious contract\n    assembly {\n      _success := call(\n        _gas, // gas\n        _target, // recipient\n        _value, // ether value\n        add(_calldata, 0x20), // inloc\n        mload(_calldata), // inlen\n        0, // outloc\n        0 // outlen\n      )\n      // limit our copy to 256 bytes\n      _toCopy := returndatasize()\n      if gt(_toCopy, _maxCopy) {\n        _toCopy := _maxCopy\n      }\n      // Store the length of the copied bytes\n      mstore(_returnData, _toCopy)\n      // copy the bytes from returndata[0:_toCopy]\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\n    }\n    return (_success, _returnData);\n  }\n\n  /// @notice Use when you _really_ really _really_ don't trust the called\n  /// contract. This prevents the called contract from causing reversion of\n  /// the caller in as many ways as we can.\n  /// @dev The main difference between this and a solidity low-level call is\n  /// that we limit the number of bytes that the callee can cause to be\n  /// copied to caller memory. This prevents stupid things like malicious\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\n  /// to memory.\n  /// @param _target The address to call\n  /// @param _gas The amount of gas to forward to the remote contract\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\n  /// to memory.\n  /// @param _calldata The data to send to the remote contract\n  /// @return success and returndata, as `.call()`. Returndata is capped to\n  /// `_maxCopy` bytes.\n  function excessivelySafeStaticCall(\n    address _target,\n    uint256 _gas,\n    uint16 _maxCopy,\n    bytes memory _calldata\n  ) internal view returns (bool, bytes memory) {\n    // set up for assembly call\n    uint256 _toCopy;\n    bool _success;\n    bytes memory _returnData = new bytes(_maxCopy);\n    // dispatch message to recipient\n    // by assembly calling \"handle\" function\n    // we call via assembly to avoid memcopying a very large returndata\n    // returned by a malicious contract\n    assembly {\n      _success := staticcall(\n        _gas, // gas\n        _target, // recipient\n        add(_calldata, 0x20), // inloc\n        mload(_calldata), // inlen\n        0, // outloc\n        0 // outlen\n      )\n      // limit our copy to 256 bytes\n      _toCopy := returndatasize()\n      if gt(_toCopy, _maxCopy) {\n        _toCopy := _maxCopy\n      }\n      // Store the length of the copied bytes\n      mstore(_returnData, _toCopy)\n      // copy the bytes from returndata[0:_toCopy]\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\n    }\n    return (_success, _returnData);\n  }\n\n  /**\n   * @notice Swaps function selectors in encoded contract calls\n   * @dev Allows reuse of encoded calldata for functions with identical\n   * argument types but different names. It simply swaps out the first 4 bytes\n   * for the new selector. This function modifies memory in place, and should\n   * only be used with caution.\n   * @param _newSelector The new 4-byte selector\n   * @param _buf The encoded contract args\n   */\n  function swapSelector(bytes4 _newSelector, bytes memory _buf) internal pure {\n    require(_buf.length > 4 - 1);\n    uint256 _mask = LOW_28_MASK;\n    assembly {\n      // load the first word of\n      let _word := mload(add(_buf, 0x20))\n      // mask out the top 4 bytes\n      // /x\n      _word := and(_word, _mask)\n      _word := or(_newSelector, _word)\n      mstore(add(_buf, 0x20), _word)\n    }\n  }\n}\n"},"contracts/shared/libraries/Multisend.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity ^0.8.0;\n\n/**\n * @notice Modified from https://github.com/safe-global/safe-contracts/blob/main/contracts/libraries/MultiSend.sol\n *\n * @dev Modification was to ensure this is called from an EOA, rather than enforcing the\n * `delegatecall` usage as in the original contract.\n */\ncontract MultiSend {\n  address private immutable multisendSingleton;\n\n  constructor() {\n    multisendSingleton = address(this);\n  }\n\n  /**\n   * @dev Sends multiple transactions and reverts all if one fails.\n   * @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of\n   *                     operation as a uint8 with 0 for a call or 1 for a delegatecall (=> 1 byte),\n   *                     to as a address (=> 20 bytes),\n   *                     value as a uint256 (=> 32 bytes),\n   *                     data length as a uint256 (=> 32 bytes),\n   *                     data as bytes.\n   *                     see abi.encodePacked for more information on packed encoding\n   */\n  function multiSend(bytes memory transactions) public payable {\n    require(msg.sender.code.length == 0, \"MultiSend should only be called via EOA\");\n    // solhint-disable-next-line no-inline-assembly\n    assembly {\n      let length := mload(transactions)\n      let i := 0x20\n      for {\n        // Pre block is not used in \"while mode\"\n      } lt(i, length) {\n        // Post block is not used in \"while mode\"\n      } {\n        // First byte of the data is the operation.\n        // We shift by 248 bits (256 - 8 [operation byte]) it right since mload will always load 32 bytes (a word).\n        // This will also zero out unused data.\n        let operation := shr(0xf8, mload(add(transactions, i)))\n        // We offset the load address by 1 byte (operation byte)\n        // We shift it right by 96 bits (256 - 160 [20 address bytes]) to right-align the data and zero out unused data.\n        let to := shr(0x60, mload(add(transactions, add(i, 0x01))))\n        // We offset the load address by 21 byte (operation byte + 20 address bytes)\n        let value := mload(add(transactions, add(i, 0x15)))\n        // We offset the load address by 53 byte (operation byte + 20 address bytes + 32 value bytes)\n        let dataLength := mload(add(transactions, add(i, 0x35)))\n        // We offset the load address by 85 byte (operation byte + 20 address bytes + 32 value bytes + 32 data length bytes)\n        let data := add(transactions, add(i, 0x55))\n        let success := 0\n        switch operation\n        case 0 {\n          success := call(gas(), to, value, data, dataLength, 0, 0)\n        }\n        case 1 {\n          success := delegatecall(gas(), to, data, dataLength, 0, 0)\n        }\n        if eq(success, 0) {\n          revert(0, 0)\n        }\n        // Next entry starts at 85 byte + data length\n        i := add(i, add(0x55, dataLength))\n      }\n    }\n  }\n}\n"},"contracts/shared/libraries/TypeCasts.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nimport {TypedMemView} from \"./TypedMemView.sol\";\n\nlibrary TypeCasts {\n  using TypedMemView for bytes;\n  using TypedMemView for bytes29;\n\n  // alignment preserving cast\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\n    return bytes32(uint256(uint160(_addr)));\n  }\n\n  // alignment preserving cast\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\n    return address(uint160(uint256(_buf)));\n  }\n}\n"},"contracts/shared/libraries/TypedMemView.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\nlibrary TypedMemView {\n  // Why does this exist?\n  // the solidity `bytes memory` type has a few weaknesses.\n  // 1. You can't index ranges effectively\n  // 2. You can't slice without copying\n  // 3. The underlying data may represent any type\n  // 4. Solidity never deallocates memory, and memory costs grow\n  //    superlinearly\n\n  // By using a memory view instead of a `bytes memory` we get the following\n  // advantages:\n  // 1. Slices are done on the stack, by manipulating the pointer\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\n  // 3. We can insert type info into the pointer, and typecheck at runtime\n\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\n  // algorithms.\n\n  // Why bytes29?\n  // We want to avoid confusion between views, digests, and other common\n  // types so we chose a large and uncommonly used odd number of bytes\n  //\n  // Note that while bytes are left-aligned in a word, integers and addresses\n  // are right-aligned. This means when working in assembly we have to\n  // account for the 3 unused bytes on the righthand side\n  //\n  // First 5 bytes are a type flag.\n  // - ff_ffff_fffe is reserved for unknown type.\n  // - ff_ffff_ffff is reserved for invalid types/errors.\n  // next 12 are memory address\n  // next 12 are len\n  // bottom 3 bytes are empty\n\n  // Assumptions:\n  // - non-modification of memory.\n  // - No Solidity updates\n  // - - wrt free mem point\n  // - - wrt bytes representation in memory\n  // - - wrt memory addressing in general\n\n  // Usage:\n  // - create type constants\n  // - use `assertType` for runtime type assertions\n  // - - unfortunately we can't do this at compile time yet :(\n  // - recommended: implement modifiers that perform type checking\n  // - - e.g.\n  // - - `uint40 constant MY_TYPE = 3;`\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\n  // - instantiate a typed view from a bytearray using `ref`\n  // - use `index` to inspect the contents of the view\n  // - use `slice` to create smaller views into the same memory\n  // - - `slice` can increase the offset\n  // - - `slice can decrease the length`\n  // - - must specify the output type of `slice`\n  // - - `slice` will return a null view if you try to overrun\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\n  // - use `equal` for typed comparisons.\n\n  // The null view\n  bytes29 public constant NULL = hex\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\";\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\n\n  // ========== Custom Errors ===========\n\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\n  error TypedMemView__index_indexMoreThan32Bytes();\n  error TypedMemView__unsafeCopyTo_nullPointer();\n  error TypedMemView__unsafeCopyTo_invalidPointer();\n  error TypedMemView__unsafeCopyTo_identityOOG();\n  error TypedMemView__assertValid_validityAssertionFailed();\n\n  /**\n   * @notice          Changes the endianness of a uint256.\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\n   * @param _b        The unsigned integer to reverse\n   * @return          v - The reversed value\n   */\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\n    v = _b;\n\n    // swap bytes\n    v =\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\n    // swap 2-byte long pairs\n    v =\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\n    // swap 4-byte long pairs\n    v =\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\n    // swap 8-byte long pairs\n    v =\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\n    // swap 16-byte long pairs\n    v = (v >> 128) | (v << 128);\n  }\n\n  /**\n   * @notice      Create a mask with the highest `_len` bits set.\n   * @param _len  The length\n   * @return      mask - The mask\n   */\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\n    // ugly. redo without assembly?\n    assembly {\n      // solhint-disable-previous-line no-inline-assembly\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\n    }\n  }\n\n  /**\n   * @notice      Return the null view.\n   * @return      bytes29 - The null view\n   */\n  function nullView() internal pure returns (bytes29) {\n    return NULL;\n  }\n\n  /**\n   * @notice      Check if the view is null.\n   * @return      bool - True if the view is null\n   */\n  function isNull(bytes29 memView) internal pure returns (bool) {\n    return memView == NULL;\n  }\n\n  /**\n   * @notice      Check if the view is not null.\n   * @return      bool - True if the view is not null\n   */\n  function notNull(bytes29 memView) internal pure returns (bool) {\n    return !isNull(memView);\n  }\n\n  /**\n   * @notice          Check if the view is of a invalid type and points to a valid location\n   *                  in memory.\n   * @dev             We perform this check by examining solidity's unallocated memory\n   *                  pointer and ensuring that the view's upper bound is less than that.\n   * @param memView   The view\n   * @return          ret - True if the view is invalid\n   */\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\n    if (typeOf(memView) == 0xffffffffff) {\n      return true;\n    }\n    uint256 _end = end(memView);\n    assembly {\n      // solhint-disable-previous-line no-inline-assembly\n      ret := gt(_end, mload(0x40))\n    }\n  }\n\n  /**\n   * @notice          Require that a typed memory view be valid.\n   * @dev             Returns the view for easy chaining.\n   * @param memView   The view\n   * @return          bytes29 - The validated view\n   */\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\n    return memView;\n  }\n\n  /**\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\n   * @param memView   The view\n   * @param _expected The expected type\n   * @return          bool - True if the memview is of the expected type\n   */\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\n    return typeOf(memView) == _expected;\n  }\n\n  /**\n   * @notice          Require that a typed memory view has a specific type.\n   * @dev             Returns the view for easy chaining.\n   * @param memView   The view\n   * @param _expected The expected type\n   * @return          bytes29 - The view with validated type\n   */\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\n    if (!isType(memView, _expected)) {\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\n    }\n    return memView;\n  }\n\n  /**\n   * @notice          Return an identical view with a different type.\n   * @param memView   The view\n   * @param _newType  The new type\n   * @return          newView - The new view with the specified type\n   */\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\n    // then | in the new type\n    assembly {\n      // solhint-disable-previous-line no-inline-assembly\n      // shift off the top 5 bytes\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\n    }\n  }\n\n  /**\n   * @notice          Unsafe raw pointer construction. This should generally not be called\n   *                  directly. Prefer `ref` wherever possible.\n   * @dev             Unsafe raw pointer construction. This should generally not be called\n   *                  directly. Prefer `ref` wherever possible.\n   * @param _type     The type\n   * @param _loc      The memory address\n   * @param _len      The length\n   * @return          newView - The new view with the specified type, location and length\n   */\n  function unsafeBuildUnchecked(\n    uint256 _type,\n    uint256 _loc,\n    uint256 _len\n  ) private pure returns (bytes29 newView) {\n    uint256 _uint96Bits = 96;\n    uint256 _emptyBits = 24;\n\n    // Cast params to ensure input is of correct length\n    uint96 len_ = uint96(_len);\n    uint96 loc_ = uint96(_loc);\n    require(len_ == _len && loc_ == _loc, \"!truncated\");\n\n    assembly {\n      // solium-disable-previous-line security/no-inline-assembly\n      newView := shl(_uint96Bits, _type) // insert type\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\n    }\n  }\n\n  /**\n   * @notice          Instantiate a new memory view. This should generally not be called\n   *                  directly. Prefer `ref` wherever possible.\n   * @dev             Instantiate a new memory view. This should generally not be called\n   *                  directly. Prefer `ref` wherever possible.\n   * @param _type     The type\n   * @param _loc      The memory address\n   * @param _len      The length\n   * @return          newView - The new view with the specified type, location and length\n   */\n  function build(\n    uint256 _type,\n    uint256 _loc,\n    uint256 _len\n  ) internal pure returns (bytes29 newView) {\n    uint256 _end = _loc + _len;\n    assembly {\n      // solhint-disable-previous-line no-inline-assembly\n      if gt(_end, mload(0x40)) {\n        _end := 0\n      }\n    }\n    if (_end == 0) {\n      return NULL;\n    }\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\n  }\n\n  /**\n   * @notice          Instantiate a memory view from a byte array.\n   * @dev             Note that due to Solidity memory representation, it is not possible to\n   *                  implement a deref, as the `bytes` type stores its len in memory.\n   * @param arr       The byte array\n   * @param newType   The type\n   * @return          bytes29 - The memory view\n   */\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\n    uint256 _len = arr.length;\n\n    uint256 _loc;\n    assembly {\n      // solhint-disable-previous-line no-inline-assembly\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\n    }\n\n    return build(newType, _loc, _len);\n  }\n\n  /**\n   * @notice          Return the associated type information.\n   * @param memView   The memory view\n   * @return          _type - The type associated with the view\n   */\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\n    assembly {\n      // solhint-disable-previous-line no-inline-assembly\n      // 216 == 256 - 40\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\n    }\n  }\n\n  /**\n   * @notice          Return the memory address of the underlying bytes.\n   * @param memView   The view\n   * @return          _loc - The memory address\n   */\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\n    assembly {\n      // solhint-disable-previous-line no-inline-assembly\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\n      _loc := and(shr(120, memView), _mask)\n    }\n  }\n\n  /**\n   * @notice          The number of memory words this memory view occupies, rounded up.\n   * @param memView   The view\n   * @return          uint256 - The number of memory words\n   */\n  function words(bytes29 memView) internal pure returns (uint256) {\n    return (uint256(len(memView)) + 31) / 32;\n  }\n\n  /**\n   * @notice          The in-memory footprint of a fresh copy of the view.\n   * @param memView   The view\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\n   */\n  function footprint(bytes29 memView) internal pure returns (uint256) {\n    return words(memView) * 32;\n  }\n\n  /**\n   * @notice          The number of bytes of the view.\n   * @param memView   The view\n   * @return          _len - The length of the view\n   */\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\n    assembly {\n      // solhint-disable-previous-line no-inline-assembly\n      _len := and(shr(24, memView), _mask)\n    }\n  }\n\n  /**\n   * @notice          Returns the endpoint of `memView`.\n   * @param memView   The view\n   * @return          uint256 - The endpoint of `memView`\n   */\n  function end(bytes29 memView) internal pure returns (uint256) {\n    unchecked {\n      return loc(memView) + len(memView);\n    }\n  }\n\n  /**\n   * @notice          Safe slicing without memory modification.\n   * @param memView   The view\n   * @param _index    The start index\n   * @param _len      The length\n   * @param newType   The new type\n   * @return          bytes29 - The new view\n   */\n  function slice(\n    bytes29 memView,\n    uint256 _index,\n    uint256 _len,\n    uint40 newType\n  ) internal pure returns (bytes29) {\n    uint256 _loc = loc(memView);\n\n    // Ensure it doesn't overrun the view\n    if (_loc + _index + _len > end(memView)) {\n      return NULL;\n    }\n\n    _loc = _loc + _index;\n    return build(newType, _loc, _len);\n  }\n\n  /**\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\n   * @param memView   The view\n   * @param _len      The length\n   * @param newType   The new type\n   * @return          bytes29 - The new view\n   */\n  function prefix(\n    bytes29 memView,\n    uint256 _len,\n    uint40 newType\n  ) internal pure returns (bytes29) {\n    return slice(memView, 0, _len, newType);\n  }\n\n  /**\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\n   * @param memView   The view\n   * @param _len      The length\n   * @param newType   The new type\n   * @return          bytes29 - The new view\n   */\n  function postfix(\n    bytes29 memView,\n    uint256 _len,\n    uint40 newType\n  ) internal pure returns (bytes29) {\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\n  }\n\n  /**\n   * @notice          Load up to 32 bytes from the view onto the stack.\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\n   *                  This can be immediately cast to a smaller fixed-length byte array.\n   *                  To automatically cast to an integer, use `indexUint`.\n   * @param memView   The view\n   * @param _index    The index\n   * @param _bytes    The bytes\n   * @return          result - The 32 byte result\n   */\n  function index(\n    bytes29 memView,\n    uint256 _index,\n    uint8 _bytes\n  ) internal pure returns (bytes32 result) {\n    if (_bytes == 0) {\n      return bytes32(0);\n    }\n    if (_index + _bytes > len(memView)) {\n      // \"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\n    }\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\n\n    uint8 bitLength;\n    unchecked {\n      bitLength = _bytes * 8;\n    }\n    uint256 _loc = loc(memView);\n    uint256 _mask = leftMask(bitLength);\n    assembly {\n      // solhint-disable-previous-line no-inline-assembly\n      result := and(mload(add(_loc, _index)), _mask)\n    }\n  }\n\n  /**\n   * @notice          Parse an unsigned integer from the view at `_index`.\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\n   * @param memView   The view\n   * @param _index    The index\n   * @param _bytes    The bytes\n   * @return          result - The unsigned integer\n   */\n  function indexUint(\n    bytes29 memView,\n    uint256 _index,\n    uint8 _bytes\n  ) internal pure returns (uint256 result) {\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\n  }\n\n  /**\n   * @notice          Parse an unsigned integer from LE bytes.\n   * @param memView   The view\n   * @param _index    The index\n   * @param _bytes    The bytes\n   * @return          result - The unsigned integer\n   */\n  function indexLEUint(\n    bytes29 memView,\n    uint256 _index,\n    uint8 _bytes\n  ) internal pure returns (uint256 result) {\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\n  }\n\n  /**\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\n   *                  following that index.\n   * @param memView   The view\n   * @param _index    The index\n   * @return          address - The address\n   */\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\n    return address(uint160(indexUint(memView, _index, 20)));\n  }\n\n  /**\n   * @notice          Return the keccak256 hash of the underlying memory\n   * @param memView   The view\n   * @return          digest - The keccak256 hash of the underlying memory\n   */\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\n    uint256 _loc = loc(memView);\n    uint256 _len = len(memView);\n    assembly {\n      // solhint-disable-previous-line no-inline-assembly\n      digest := keccak256(_loc, _len)\n    }\n  }\n\n  /**\n   * @notice          Return true if the underlying memory is equal. Else false.\n   * @param left      The first view\n   * @param right     The second view\n   * @return          bool - True if the underlying memory is equal\n   */\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\n  }\n\n  /**\n   * @notice          Return false if the underlying memory is equal. Else true.\n   * @param left      The first view\n   * @param right     The second view\n   * @return          bool - False if the underlying memory is equal\n   */\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\n    return !untypedEqual(left, right);\n  }\n\n  /**\n   * @notice          Compares type equality.\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\n   * @param left      The first view\n   * @param right     The second view\n   * @return          bool - True if the types are the same\n   */\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\n  }\n\n  /**\n   * @notice          Compares type inequality.\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\n   * @param left      The first view\n   * @param right     The second view\n   * @return          bool - True if the types are not the same\n   */\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\n    return !equal(left, right);\n  }\n\n  /**\n   * @notice          Copy the view to a location, return an unsafe memory reference\n   * @dev             Super Dangerous direct memory access.\n   *\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\n   *                  As such it MUST be consumed IMMEDIATELY.\n   *                  This function is private to prevent unsafe usage by callers.\n   * @param memView   The view\n   * @param _newLoc   The new location\n   * @return          written - the unsafe memory reference\n   */\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\n\n    uint256 _len = len(memView);\n    uint256 _oldLoc = loc(memView);\n\n    uint256 ptr;\n    bool res;\n    assembly {\n      // solhint-disable-previous-line no-inline-assembly\n      ptr := mload(0x40)\n      // revert if we're writing in occupied memory\n      if gt(ptr, _newLoc) {\n        revert(0x60, 0x20) // empty revert message\n      }\n\n      // use the identity precompile to copy\n      // guaranteed not to fail, so pop the success\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\n    }\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\n  }\n\n  /**\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\n   *                  the new memory\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\n   * @param memView   The view\n   * @return          ret - The view pointing to the new memory\n   */\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\n    uint256 ptr;\n    uint256 _len = len(memView);\n    assembly {\n      // solhint-disable-previous-line no-inline-assembly\n      ptr := mload(0x40) // load unused memory pointer\n      ret := ptr\n    }\n    unchecked {\n      unsafeCopyTo(memView, ptr + 0x20);\n    }\n    assembly {\n      // solhint-disable-previous-line no-inline-assembly\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\n      mstore(ptr, _len) // write len of new array (in bytes)\n    }\n  }\n\n  /**\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\n   * @dev             Super Dangerous direct memory access.\n   *\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\n   *                  As such it MUST be consumed IMMEDIATELY.\n   *                  This function is private to prevent unsafe usage by callers.\n   * @param memViews  The views\n   * @return          unsafeView - The conjoined view pointing to the new memory\n   */\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\n    assembly {\n      // solhint-disable-previous-line no-inline-assembly\n      let ptr := mload(0x40)\n      // revert if we're writing in occupied memory\n      if gt(ptr, _location) {\n        revert(0x60, 0x20) // empty revert message\n      }\n    }\n\n    uint256 _offset = 0;\n    uint256 _len = memViews.length;\n    for (uint256 i = 0; i < _len; ) {\n      bytes29 memView = memViews[i];\n      unchecked {\n        unsafeCopyTo(memView, _location + _offset);\n        _offset += len(memView);\n        ++i;\n      }\n    }\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\n  }\n\n  /**\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\n   * @param memViews  The views\n   * @return          bytes32 - The keccak256 digest\n   */\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\n    uint256 ptr;\n    assembly {\n      // solhint-disable-previous-line no-inline-assembly\n      ptr := mload(0x40) // load unused memory pointer\n    }\n    return keccak(unsafeJoin(memViews, ptr));\n  }\n\n  /**\n   * @notice          copies all views, joins them into a new bytearray.\n   * @param memViews  The views\n   * @return          ret - The new byte array\n   */\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\n    uint256 ptr;\n    assembly {\n      // solhint-disable-previous-line no-inline-assembly\n      ptr := mload(0x40) // load unused memory pointer\n    }\n\n    bytes29 _newView;\n    unchecked {\n      _newView = unsafeJoin(memViews, ptr + 0x20);\n    }\n    uint256 _written = len(_newView);\n    uint256 _footprint = footprint(_newView);\n\n    assembly {\n      // solhint-disable-previous-line no-inline-assembly\n      // store the legnth\n      mstore(ptr, _written)\n      // new pointer is old + 0x20 + the footprint of the body\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\n      ret := ptr\n    }\n  }\n}\n"},"contracts/shared/ProposedOwnable.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {IProposedOwnable} from \"./interfaces/IProposedOwnable.sol\";\n\n/**\n * @title ProposedOwnable\n * @notice Contract module which provides a basic access control mechanism,\n * where there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed via a two step process:\n * 1. Call `proposeOwner`\n * 2. Wait out the delay period\n * 3. Call `acceptOwner`\n *\n * @dev This module is used through inheritance. It will make available the\n * modifier `onlyOwner`, which can be applied to your functions to restrict\n * their use to the owner.\n *\n * @dev The majority of this code was taken from the openzeppelin Ownable\n * contract\n *\n */\nabstract contract ProposedOwnable is IProposedOwnable {\n  // ========== Custom Errors ===========\n\n  error ProposedOwnable__onlyOwner_notOwner();\n  error ProposedOwnable__onlyProposed_notProposedOwner();\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\n  error ProposedOwnable__renounceOwnership_noProposal();\n  error ProposedOwnable__renounceOwnership_invalidProposal();\n\n  // ============ Properties ============\n\n  address private _owner;\n\n  address private _proposed;\n  uint256 private _proposedOwnershipTimestamp;\n\n  uint256 private constant _delay = 7 days;\n\n  // ======== Getters =========\n\n  /**\n   * @notice Returns the address of the current owner.\n   */\n  function owner() public view virtual returns (address) {\n    return _owner;\n  }\n\n  /**\n   * @notice Returns the address of the proposed owner.\n   */\n  function proposed() public view virtual returns (address) {\n    return _proposed;\n  }\n\n  /**\n   * @notice Returns the address of the proposed owner.\n   */\n  function proposedTimestamp() public view virtual returns (uint256) {\n    return _proposedOwnershipTimestamp;\n  }\n\n  /**\n   * @notice Returns the delay period before a new owner can be accepted.\n   */\n  function delay() public view virtual returns (uint256) {\n    return _delay;\n  }\n\n  /**\n   * @notice Throws if called by any account other than the owner.\n   */\n  modifier onlyOwner() {\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\n    _;\n  }\n\n  /**\n   * @notice Throws if called by any account other than the proposed owner.\n   */\n  modifier onlyProposed() {\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\n    _;\n  }\n\n  /**\n   * @notice Throws if the ownership delay has not elapsed\n   */\n  modifier ownershipDelayElapsed() {\n    // Ensure delay has elapsed\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\n    _;\n  }\n\n  /**\n   * @notice Indicates if the ownership has been renounced() by\n   * checking if current owner is address(0)\n   */\n  function renounced() public view returns (bool) {\n    return _owner == address(0);\n  }\n\n  // ======== External =========\n\n  /**\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\n   * newly proposed owner as step 1 in a 2-step process\n   */\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\n    // Contract as source of truth\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\n\n    // Sanity check: reasonable proposal\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\n\n    _setProposed(newlyProposed);\n  }\n\n  /**\n   * @notice Renounces ownership of the contract after a delay\n   */\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\n    // Ensure there has been a proposal cycle started\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\n\n    // Require proposed is set to 0\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\n\n    // Emit event, set new owner, reset timestamp\n    _setOwner(address(0));\n  }\n\n  /**\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\n   * Can only be called by the current owner.\n   */\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\n    // is 0-d out and this check is implicitly enforced by modifier\n\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\n    // the only time this would happen is if the _proposed was never\n    // set (will fail from modifier) or if the owner == _proposed (checked\n    // above)\n\n    // Emit event, set new owner, reset timestamp\n    _setOwner(_proposed);\n  }\n\n  // ======== Internal =========\n\n  function _setOwner(address newOwner) internal {\n    emit OwnershipTransferred(_owner, newOwner);\n    _owner = newOwner;\n    delete _proposedOwnershipTimestamp;\n    delete _proposed;\n  }\n\n  function _setProposed(address newlyProposed) private {\n    _proposedOwnershipTimestamp = block.timestamp;\n    _proposed = newlyProposed;\n    emit OwnershipProposed(newlyProposed);\n  }\n}\n"},"contracts/shared/ProposedOwnableUpgradeable.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {Initializable} from \"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\";\n\nimport {ProposedOwnable} from \"./ProposedOwnable.sol\";\n\nabstract contract ProposedOwnableUpgradeable is Initializable, ProposedOwnable {\n  /**\n   * @dev Initializes the contract setting the deployer as the initial\n   */\n  function __ProposedOwnable_init() internal onlyInitializing {\n    __ProposedOwnable_init_unchained();\n  }\n\n  function __ProposedOwnable_init_unchained() internal onlyInitializing {\n    _setOwner(msg.sender);\n  }\n\n  /**\n   * @dev This empty reserved space is put in place to allow future versions to add new\n   * variables without shifting down storage in the inheritance chain.\n   * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n   */\n  uint256[47] private __GAP;\n}\n"},"contracts/shared/upgrade/UpgradeBeacon.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n// ============ External Imports ============\nimport {Address} from \"@openzeppelin/contracts/utils/Address.sol\";\n\n/**\n * @title UpgradeBeacon\n * @notice Stores the address of an implementation contract\n * and allows a controller to upgrade the implementation address\n * @dev This implementation combines the gas savings of having no function selectors\n * found in 0age's implementation:\n * https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol\n * With the added niceties of a safety check that each implementation is a contract\n * and an Upgrade event emitted each time the implementation is changed\n * found in OpenZeppelin's implementation:\n * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol\n */\ncontract UpgradeBeacon {\n  // ============ Immutables ============\n\n  // The controller is capable of modifying the implementation address\n  address private immutable controller;\n\n  // ============ Private Storage Variables ============\n\n  // The implementation address is held in storage slot zero.\n  address private implementation;\n\n  // ============ Events ============\n\n  // Upgrade event is emitted each time the implementation address is set\n  // (including deployment)\n  event Upgrade(address indexed implementation);\n\n  // ============ Constructor ============\n\n  /**\n   * @notice Validate the initial implementation and store it.\n   * Store the controller immutably.\n   * @param _initialImplementation Address of the initial implementation contract\n   * @param _controller Address of the controller who can upgrade the implementation\n   */\n  constructor(address _initialImplementation, address _controller) payable {\n    _setImplementation(_initialImplementation);\n    controller = _controller;\n  }\n\n  // ============ External Functions ============\n\n  /**\n   * @notice For all callers except the controller, return the current implementation address.\n   * If called by the Controller, update the implementation address\n   * to the address passed in the calldata.\n   * Note: this requires inline assembly because Solidity fallback functions\n   * do not natively take arguments or return values.\n   */\n  fallback() external payable {\n    if (msg.sender != controller) {\n      // if not called by the controller,\n      // load implementation address from storage slot zero\n      // and return it.\n      assembly {\n        mstore(0, sload(0))\n        return(0, 32)\n      }\n    } else {\n      // if called by the controller,\n      // load new implementation address from the first word of the calldata\n      address _newImplementation;\n      assembly {\n        _newImplementation := calldataload(0)\n      }\n      // set the new implementation\n      _setImplementation(_newImplementation);\n    }\n  }\n\n  // ============ Private Functions ============\n\n  /**\n   * @notice Perform checks on the new implementation address\n   * then upgrade the stored implementation.\n   * @param _newImplementation Address of the new implementation contract which will replace the old one\n   */\n  function _setImplementation(address _newImplementation) private {\n    // Require that the new implementation is different from the current one\n    require(implementation != _newImplementation, \"!upgrade\");\n    // Require that the new implementation is a contract\n    require(Address.isContract(_newImplementation), \"implementation !contract\");\n    // set the new implementation\n    implementation = _newImplementation;\n    emit Upgrade(_newImplementation);\n  }\n}\n"},"contracts/shared/upgrade/UpgradeBeaconController.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n// ============ Internal Imports ============\nimport {ProposedOwnable} from \"../ProposedOwnable.sol\";\n\nimport {UpgradeBeacon} from \"./UpgradeBeacon.sol\";\n\n// ============ External Imports ============\nimport {Address} from \"@openzeppelin/contracts/utils/Address.sol\";\n\n/**\n * @title UpgradeBeaconController\n * @notice Set as the controller of UpgradeBeacon contract(s),\n * capable of changing their stored implementation address.\n * @dev This implementation is a minimal version inspired by 0age's implementation:\n * https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/upgradeability/DharmaUpgradeBeaconController.sol\n *\n * @dev Do *NOT* remove ownership unless all UpgradeBeacons registered with this controller\n * are willing to lose upgradeability.\n */\ncontract UpgradeBeaconController is ProposedOwnable {\n  // ============ Events ============\n\n  event BeaconUpgraded(address indexed beacon, address implementation);\n\n  // ============ Constructor ============\n  constructor() {\n    _setOwner(msg.sender);\n  }\n\n  // ============ External Functions ============\n\n  /**\n   * @notice Modify the implementation stored in the UpgradeBeacon,\n   * which will upgrade the implementation used by all\n   * Proxy contracts using that UpgradeBeacon\n   * @param _beacon Address of the UpgradeBeacon which will be updated\n   * @param _implementation Address of the Implementation contract to upgrade the Beacon to\n   */\n  function upgrade(address _beacon, address _implementation) external onlyOwner {\n    // Require that the beacon is a contract\n    require(Address.isContract(_beacon), \"beacon !contract\");\n    // Call into beacon and supply address of new implementation to update it.\n    (bool _success, ) = _beacon.call(abi.encode(_implementation));\n    // Revert with message on failure (i.e. if the beacon is somehow incorrect).\n    if (!_success) {\n      assembly {\n        returndatacopy(0, 0, returndatasize())\n        revert(0, returndatasize())\n      }\n    }\n    emit BeaconUpgraded(_beacon, _implementation);\n  }\n}\n"},"contracts/shared/upgrade/UpgradeBeaconProxy.sol":{"content":"// SPDX-License-Identifier: MIT OR Apache-2.0\npragma solidity 0.8.17;\n\n// ============ External Imports ============\nimport {Address} from \"@openzeppelin/contracts/utils/Address.sol\";\n\n/**\n * @title UpgradeBeaconProxy\n * @notice\n * Proxy contract which delegates all logic, including initialization,\n * to an implementation contract.\n * The implementation contract is stored within an Upgrade Beacon contract;\n * the implementation contract can be changed by performing an upgrade on the Upgrade Beacon contract.\n * The Upgrade Beacon contract for this Proxy is immutably specified at deployment.\n * @dev This implementation combines the gas savings of keeping the UpgradeBeacon address outside of contract storage\n * found in 0age's implementation:\n * https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol\n * With the added safety checks that the UpgradeBeacon and implementation are contracts at time of deployment\n * found in OpenZeppelin's implementation:\n * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol\n */\ncontract UpgradeBeaconProxy {\n  // ============ Immutables ============\n\n  // Upgrade Beacon address is immutable (therefore not kept in contract storage)\n  address private immutable upgradeBeacon;\n\n  // ============ Constructor ============\n\n  /**\n   * @notice Validate that the Upgrade Beacon is a contract, then set its\n   * address immutably within this contract.\n   * Validate that the implementation is also a contract,\n   * Then call the initialization function defined at the implementation.\n   * The deployment will revert and pass along the\n   * revert reason if the initialization function reverts.\n   * @param _upgradeBeacon Address of the Upgrade Beacon to be stored immutably in the contract\n   * @param _initializationCalldata Calldata supplied when calling the initialization function\n   */\n  constructor(address _upgradeBeacon, bytes memory _initializationCalldata) payable {\n    // Validate the Upgrade Beacon is a contract\n    require(Address.isContract(_upgradeBeacon), \"beacon !contract\");\n    // set the Upgrade Beacon\n    upgradeBeacon = _upgradeBeacon;\n    // Validate the implementation is a contract\n    address _implementation = _getImplementation(_upgradeBeacon);\n    require(Address.isContract(_implementation), \"beacon implementation !contract\");\n    // Call the initialization function on the implementation\n    if (_initializationCalldata.length > 0) {\n      _initialize(_implementation, _initializationCalldata);\n    }\n  }\n\n  // ============ External Functions ============\n\n  /**\n   * @notice Forwards all calls with data to _fallback()\n   * No public functions are declared on the contract, so all calls hit fallback\n   */\n  fallback() external payable {\n    _fallback();\n  }\n\n  /**\n   * @notice Forwards all calls with no data to _fallback()\n   */\n  receive() external payable {\n    _fallback();\n  }\n\n  // ============ Private Functions ============\n\n  /**\n   * @notice Call the initialization function on the implementation\n   * Used at deployment to initialize the proxy\n   * based on the logic for initialization defined at the implementation\n   * @param _implementation - Contract to which the initalization is delegated\n   * @param _initializationCalldata - Calldata supplied when calling the initialization function\n   */\n  function _initialize(address _implementation, bytes memory _initializationCalldata) private {\n    // Delegatecall into the implementation, supplying initialization calldata.\n    (bool _ok, ) = _implementation.delegatecall(_initializationCalldata);\n    // Revert and include revert data if delegatecall to implementation reverts.\n    if (!_ok) {\n      assembly {\n        returndatacopy(0, 0, returndatasize())\n        revert(0, returndatasize())\n      }\n    }\n  }\n\n  /**\n   * @notice Delegates function calls to the implementation contract returned by the Upgrade Beacon\n   */\n  function _fallback() private {\n    _delegate(_getImplementation());\n  }\n\n  /**\n   * @notice Delegate function execution to the implementation contract\n   * @dev This is a low level function that doesn't return to its internal\n   * call site. It will return whatever is returned by the implementation to the\n   * external caller, reverting and returning the revert data if implementation\n   * reverts.\n   * @param _implementation - Address to which the function execution is delegated\n   */\n  function _delegate(address _implementation) private {\n    assembly {\n      // Copy msg.data. We take full control of memory in this inline assembly\n      // block because it will not return to Solidity code. We overwrite the\n      // Solidity scratch pad at memory position 0.\n      calldatacopy(0, 0, calldatasize())\n      // Delegatecall to the implementation, supplying calldata and gas.\n      // Out and outsize are set to zero - instead, use the return buffer.\n      let result := delegatecall(gas(), _implementation, 0, calldatasize(), 0, 0)\n      // Copy the returned data from the return buffer.\n      returndatacopy(0, 0, returndatasize())\n      switch result\n      // Delegatecall returns 0 on error.\n      case 0 {\n        revert(0, returndatasize())\n      }\n      default {\n        return(0, returndatasize())\n      }\n    }\n  }\n\n  /**\n   * @notice Call the Upgrade Beacon to get the current implementation contract address\n   * @return _implementation Address of the current implementation.\n   */\n  function _getImplementation() private view returns (address _implementation) {\n    _implementation = _getImplementation(upgradeBeacon);\n  }\n\n  /**\n   * @notice Call the Upgrade Beacon to get the current implementation contract address\n   * @dev _upgradeBeacon is passed as a parameter so that\n   * we can also use this function in the constructor,\n   * where we can't access immutable variables.\n   * @param _upgradeBeacon Address of the UpgradeBeacon storing the current implementation\n   * @return _implementation Address of the current implementation.\n   */\n  function _getImplementation(address _upgradeBeacon) private view returns (address _implementation) {\n    // Get the current implementation address from the upgrade beacon.\n    (bool _ok, bytes memory _returnData) = _upgradeBeacon.staticcall(\"\");\n    // Revert and pass along revert message if call to upgrade beacon reverts.\n    require(_ok, string(_returnData));\n    // Set the implementation to the address returned from the upgrade beacon.\n    _implementation = abi.decode(_returnData, (address));\n  }\n}\n"},"contracts/test/TestAavePool.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {IAavePool} from \"../core/connext/interfaces/IAavePool.sol\";\n\ncontract TestAavePool is IAavePool {\n  bool revertCall;\n\n  function setRevertCall(bool _revert) external {\n    revertCall = _revert;\n  }\n\n  function mintUnbacked(\n    address, //asset,\n    uint256, //amount,\n    address, //onBehalfOf,\n    uint16 //referralCode\n  ) external view {\n    require(!revertCall, \"mintUnbacked reverted\");\n  }\n\n  function backUnbacked(\n    address, //asset,\n    uint256, // amount,\n    uint256 // fee\n  ) external view {\n    require(!revertCall, \"backUnbacked reverted\");\n  }\n\n  function withdraw(\n    address, // asset,\n    uint256 amount,\n    address //to\n  ) external view returns (uint256) {\n    require(!revertCall, \"withdraw reverted\");\n    return amount;\n  }\n}\n"},"contracts/test/TestAggregator.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\n/*\n * This aggregator is ONLY useful for testing\n */\ncontract TestAggregator {\n  uint8 public decimals = 18;\n\n  string public description = \"Chainlink Test Aggregator\";\n\n  uint256 public version = 1;\n\n  uint80 _mockRoundId = 1;\n\n  int256 _mockAnswer = 1;\n\n  uint256 _mockUpdateAt;\n\n  uint80 _mockAnsweredInRound = 1;\n\n  bool stopped;\n  // This error is used for only testing\n  error TestAggregator_Stopped();\n\n  constructor(uint8 _decimals) {\n    decimals = _decimals;\n    _mockUpdateAt = block.timestamp;\n  }\n\n  // getRoundData and latestRoundData should both raise \"No data present\"\n  // if they do not have data to report, instead of returning unset values\n  // which could be misinterpreted as actual reported values.\n  function getRoundData(uint80 _roundId)\n    external\n    view\n    returns (\n      uint80 roundId,\n      int256 answer,\n      uint256 startedAt,\n      uint256 updatedAt,\n      uint80 answeredInRound\n    )\n  {\n    if (stopped) {\n      revert TestAggregator_Stopped();\n    }\n    return (_roundId, _mockAnswer * int256(10**decimals), 0, _mockUpdateAt, _mockAnsweredInRound);\n  }\n\n  function latestRoundData()\n    external\n    view\n    returns (\n      uint80 roundId,\n      int256 answer,\n      uint256 startedAt,\n      uint256 updatedAt,\n      uint80 answeredInRound\n    )\n  {\n    if (stopped) {\n      revert TestAggregator_Stopped();\n    }\n    return (_mockRoundId, _mockAnswer * int256(10**decimals), 0, _mockUpdateAt, _mockAnsweredInRound);\n  }\n\n  function updateMockAnswer(int256 _answer) external {\n    _mockAnswer = _answer;\n  }\n\n  function updateMockData(\n    uint80 _roundId,\n    int256 _answer,\n    uint256 _updateAt,\n    uint80 _answeredInRound\n  ) external {\n    _mockRoundId = _roundId;\n    _mockAnswer = _answer;\n    _mockUpdateAt = _updateAt;\n    _mockAnsweredInRound = _answeredInRound;\n  }\n\n  function stop() external {\n    stopped = true;\n  }\n}\n"},"contracts/test/TestERC20.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.17;\n\nimport {ERC20} from \"../core/connext/helpers/OZERC20.sol\";\nimport {IERC20Metadata, IERC20} from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\n\nimport {IBridgeToken} from \"../core/connext/interfaces/IBridgeToken.sol\";\n\n/**\n * @notice This token is ONLY useful for testing\n * @dev Anybody can mint as many tokens as they like\n * @dev Anybody can burn anyone else's tokens\n */\ncontract TestERC20 is ERC20, IBridgeToken {\n  constructor(string memory _name, string memory _symbol) ERC20(18, _name, _symbol, \"1\") {\n    _mint(msg.sender, 1000000 ether);\n  }\n\n  // ============ Bridge functions ===============\n  function setDetails(string calldata _newName, string calldata _newSymbol) external override {\n    // Does nothing, in practice will update the details to match the hash in message\n    // not the autodeployed results\n    _name = _newName;\n    _symbol = _newSymbol;\n  }\n\n  // ============ Token functions ===============\n  function balanceOf(address account) public view override(ERC20, IERC20) returns (uint256) {\n    return ERC20.balanceOf(account);\n  }\n\n  function mint(address account, uint256 amount) external {\n    _mint(account, amount);\n  }\n\n  function burn(address account, uint256 amount) external {\n    _burn(account, amount);\n  }\n\n  function symbol() public view override(ERC20, IERC20Metadata) returns (string memory) {\n    return ERC20.symbol();\n  }\n\n  function name() public view override(ERC20, IERC20Metadata) returns (string memory) {\n    return ERC20.name();\n  }\n\n  function decimals() public view override(ERC20, IERC20Metadata) returns (uint8) {\n    return ERC20.decimals();\n  }\n}\n"}},"settings":{"optimizer":{"enabled":true,"runs":200},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata","devdoc","userdoc","storageLayout","evm.gasEstimates"],"":["ast"]}},"metadata":{"useLiteralContent":true}}},"output":{"errors":[{"component":"general","errorCode":"1878","formattedMessage":"Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n--> contracts/messaging/interfaces/ambs/arbitrum/IArbitrumRollup.sol\n\n","message":"SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.","severity":"warning","sourceLocation":{"end":-1,"file":"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumRollup.sol","start":-1},"type":"Warning"},{"component":"general","errorCode":"6321","formattedMessage":"Warning: Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n   --> contracts/core/xreceivers/Unwrapper.sol:180:35:\n    |\n180 |   ) external onlyConnext returns (bytes memory) {\n    |                                   ^^^^^^^^^^^^\n\n","message":"Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.","severity":"warning","sourceLocation":{"end":6659,"file":"contracts/core/xreceivers/Unwrapper.sol","start":6647},"type":"Warning"},{"component":"general","errorCode":"5740","formattedMessage":"Warning: Unreachable code.\n   --> contracts/messaging/connectors/Connector.sol:148:5:\n    |\n148 |     emit MessageProcessed(_data, msg.sender);\n    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n","message":"Unreachable code.","severity":"warning","sourceLocation":{"end":4405,"file":"contracts/messaging/connectors/Connector.sol","start":4365},"type":"Warning"},{"component":"general","errorCode":"6321","formattedMessage":"Warning: Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.\n  --> contracts/messaging/connectors/polygon/lib/MerklePatriciaProof.sol:21:28:\n   |\n21 |   ) internal pure returns (bool) {\n   |                            ^^^^\n\n","message":"Unnamed return variable can remain unassigned. Add an explicit return with value to all non-reverting code paths or name the variable.","severity":"warning","sourceLocation":{"end":697,"file":"contracts/messaging/connectors/polygon/lib/MerklePatriciaProof.sol","start":693},"type":"Warning"},{"component":"general","errorCode":"2072","formattedMessage":"Warning: Unused local variable.\n   --> @matterlabs/zksync-contracts/l1/contracts/zksync/Plonk4VerifierWithAccessToDNext.sol:696:9:\n    |\n696 |         PairingsBn254.G2Point memory gen2 = PairingsBn254.P2();\n    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n","message":"Unused local variable.","severity":"warning","sourceLocation":{"end":29952,"file":"@matterlabs/zksync-contracts/l1/contracts/zksync/Plonk4VerifierWithAccessToDNext.sol","start":29919},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n  --> contracts/messaging/connectors/multichain/BaseMultichain.sol:31:61:\n   |\n31 |   function anyExecute(bytes memory _data) external returns (bool success, bytes memory result) {\n   |                                                             ^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":964,"file":"contracts/messaging/connectors/multichain/BaseMultichain.sol","start":952},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n  --> contracts/messaging/connectors/multichain/BaseMultichain.sol:31:75:\n   |\n31 |   function anyExecute(bytes memory _data) external returns (bool success, bytes memory result) {\n   |                                                                           ^^^^^^^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":985,"file":"contracts/messaging/connectors/multichain/BaseMultichain.sol","start":966},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n  --> contracts/messaging/connectors/multichain/BaseMultichain.sol:79:26:\n   |\n79 |   function _verifySender(address _amb, address _expected) internal view returns (bool) {\n   |                          ^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":2441,"file":"contracts/messaging/connectors/multichain/BaseMultichain.sol","start":2429},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n  --> contracts/messaging/connectors/optimism/OptimismHubConnector.sol:55:45:\n   |\n55 |   function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\n   |                                             ^^^^^^^^^^^^^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":2152,"file":"contracts/messaging/connectors/optimism/OptimismHubConnector.sol","start":2127},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n  --> contracts/messaging/connectors/polygon/PolygonHubConnector.sol:26:26:\n   |\n26 |   function _verifySender(address _expected) internal view override returns (bool) {\n   |                          ^^^^^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":748,"file":"contracts/messaging/connectors/polygon/PolygonHubConnector.sol","start":731},"type":"Warning"},{"component":"general","errorCode":"5667","formattedMessage":"Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n  --> contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:47:26:\n   |\n47 |   function _verifySender(address _expected) internal pure override returns (bool) {\n   |                          ^^^^^^^^^^^^^^^^^\n\n","message":"Unused function parameter. Remove or comment out the variable name to silence this warning.","severity":"warning","sourceLocation":{"end":1418,"file":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol","start":1401},"type":"Warning"},{"component":"general","errorCode":"2018","formattedMessage":"Warning: Function state mutability can be restricted to pure\n  --> contracts/messaging/connectors/polygon/PolygonHubConnector.sol:26:3:\n   |\n26 |   function _verifySender(address _expected) internal view override returns (bool) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"Function state mutability can be restricted to pure","severity":"warning","sourceLocation":{"end":855,"file":"contracts/messaging/connectors/polygon/PolygonHubConnector.sol","start":708},"type":"Warning"}],"sources":{"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol":{"ast":{"absolutePath":"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol","exportedSymbols":{"GelatoRelayBase":[77],"GelatoRelayFeeCollector":[48],"_FEE_COLLECTOR_START":[6],"__getFeeCollector":[13]},"id":49,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".1"],"nodeType":"PragmaDirective","src":"32:23:0"},{"absolutePath":"@gelatonetwork/relay-context/contracts/base/GelatoRelayBase.sol","file":"./base/GelatoRelayBase.sol","id":3,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":49,"sourceUnit":78,"src":"57:59:0","symbolAliases":[{"foreign":{"id":2,"name":"GelatoRelayBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77,"src":"65:15:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"constant":true,"id":6,"mutability":"constant","name":"_FEE_COLLECTOR_START","nameLocation":"135:20:0","nodeType":"VariableDeclaration","scope":49,"src":"118:42:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4,"name":"uint256","nodeType":"ElementaryTypeName","src":"118:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3230","id":5,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"158:2:0","typeDescriptions":{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"},"value":"20"},"visibility":"internal"},{"body":{"id":12,"nodeType":"Block","src":"392:147:0","statements":[{"AST":{"nodeType":"YulBlock","src":"407:130:0","statements":[{"nodeType":"YulAssignment","src":"417:114:0","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"450:2:0","type":"","value":"96"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"483:12:0"},"nodeType":"YulFunctionCall","src":"483:14:0"},{"name":"_FEE_COLLECTOR_START","nodeType":"YulIdentifier","src":"499:20:0"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"479:3:0"},"nodeType":"YulFunctionCall","src":"479:41:0"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"466:12:0"},"nodeType":"YulFunctionCall","src":"466:55:0"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"433:3:0"},"nodeType":"YulFunctionCall","src":"433:98:0"},"variableNames":[{"name":"feeCollector","nodeType":"YulIdentifier","src":"417:12:0"}]}]},"evmVersion":"london","externalReferences":[{"declaration":6,"isOffset":false,"isSlot":false,"src":"499:20:0","valueSize":1},{"declaration":9,"isOffset":false,"isSlot":false,"src":"417:12:0","valueSize":1}],"id":11,"nodeType":"InlineAssembly","src":"398:139:0"}]},"id":13,"implemented":true,"kind":"freeFunction","modifiers":[],"name":"__getFeeCollector","nameLocation":"336:17:0","nodeType":"FunctionDefinition","parameters":{"id":7,"nodeType":"ParameterList","parameters":[],"src":"353:2:0"},"returnParameters":{"id":10,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9,"mutability":"mutable","name":"feeCollector","nameLocation":"378:12:0","nodeType":"VariableDeclaration","scope":13,"src":"370:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8,"name":"address","nodeType":"ElementaryTypeName","src":"370:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"369:22:0"},"scope":49,"src":"327:212:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"abstract":true,"baseContracts":[{"baseName":{"id":15,"name":"GelatoRelayBase","nameLocations":["954:15:0"],"nodeType":"IdentifierPath","referencedDeclaration":77,"src":"954:15:0"},"id":16,"nodeType":"InheritanceSpecifier","src":"954:15:0"}],"canonicalName":"GelatoRelayFeeCollector","contractDependencies":[],"contractKind":"contract","documentation":{"id":14,"nodeType":"StructuredDocumentation","src":"849:60:0","text":"@dev Do not use with GelatoRelayContext - pick only one"},"fullyImplemented":true,"id":48,"linearizedBaseContracts":[48,77],"name":"GelatoRelayFeeCollector","nameLocation":"927:23:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":37,"nodeType":"Block","src":"1038:157:0","statements":[{"expression":{"condition":{"arguments":[{"expression":{"id":22,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1082:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":23,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1086:6:0","memberName":"sender","nodeType":"MemberAccess","src":"1082:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21,"name":"_isGelatoRelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76,"src":"1067:14:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$_t_bool_$","typeString":"function (address) pure returns (bool)"}},"id":24,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1067:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":33,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1180:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1184:4:0","memberName":"data","nodeType":"MemberAccess","src":"1180:8:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":35,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"1067:121:0","trueExpression":{"baseExpression":{"expression":{"id":25,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1112:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":26,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1116:4:0","memberName":"data","nodeType":"MemberAccess","src":"1112:8:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"endExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":27,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1122:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":28,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1126:4:0","memberName":"data","nodeType":"MemberAccess","src":"1122:8:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":29,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1131:6:0","memberName":"length","nodeType":"MemberAccess","src":"1122:15:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":30,"name":"_FEE_COLLECTOR_START","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6,"src":"1140:20:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1122:38:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexRangeAccess","src":"1112:49:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr_slice","typeString":"bytes calldata slice"}},"typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":20,"id":36,"nodeType":"Return","src":"1048:140:0"}]},"id":38,"implemented":true,"kind":"function","modifiers":[],"name":"_getMsgData","nameLocation":"985:11:0","nodeType":"FunctionDefinition","parameters":{"id":17,"nodeType":"ParameterList","parameters":[],"src":"996:2:0"},"returnParameters":{"id":20,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38,"src":"1022:14:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":18,"name":"bytes","nodeType":"ElementaryTypeName","src":"1022:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1021:16:0"},"scope":48,"src":"976:219:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":46,"nodeType":"Block","src":"1341:43:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":43,"name":"__getFeeCollector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13,"src":"1358:17:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_address_$","typeString":"function () pure returns (address)"}},"id":44,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1358:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":42,"id":45,"nodeType":"Return","src":"1351:26:0"}]},"id":47,"implemented":true,"kind":"function","modifiers":[],"name":"_getFeeCollector","nameLocation":"1290:16:0","nodeType":"FunctionDefinition","parameters":{"id":39,"nodeType":"ParameterList","parameters":[],"src":"1306:2:0"},"returnParameters":{"id":42,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47,"src":"1332:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40,"name":"address","nodeType":"ElementaryTypeName","src":"1332:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1331:9:0"},"scope":48,"src":"1281:103:0","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":49,"src":"909:477:0","usedErrors":[]}],"src":"32:1355:0"},"id":0},"@gelatonetwork/relay-context/contracts/base/GelatoRelayBase.sol":{"ast":{"absolutePath":"@gelatonetwork/relay-context/contracts/base/GelatoRelayBase.sol","exportedSymbols":{"GELATO_RELAY":[82],"GelatoRelayBase":[77]},"id":78,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":50,"literals":["solidity","^","0.8",".1"],"nodeType":"PragmaDirective","src":"32:23:1"},{"absolutePath":"@gelatonetwork/relay-context/contracts/constants/GelatoRelay.sol","file":"../constants/GelatoRelay.sol","id":52,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":78,"sourceUnit":86,"src":"57:58:1","symbolAliases":[{"foreign":{"id":51,"name":"GELATO_RELAY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":82,"src":"65:12:1","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"GelatoRelayBase","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":77,"linearizedBaseContracts":[77],"name":"GelatoRelayBase","nameLocation":"135:15:1","nodeType":"ContractDefinition","nodes":[{"body":{"id":63,"nodeType":"Block","src":"184:82:1","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":56,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"217:3:1","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":57,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"221:6:1","memberName":"sender","nodeType":"MemberAccess","src":"217:10:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55,"name":"_isGelatoRelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76,"src":"202:14:1","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$_t_bool_$","typeString":"function (address) pure returns (bool)"}},"id":58,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"202:26:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6f6e6c7947656c61746f52656c6179","id":59,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"230:17:1","typeDescriptions":{"typeIdentifier":"t_stringliteral_a95dc56bf0667b0f6de79705b896940750c7cacb6490944007a934baf30c06da","typeString":"literal_string \"onlyGelatoRelay\""},"value":"onlyGelatoRelay"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a95dc56bf0667b0f6de79705b896940750c7cacb6490944007a934baf30c06da","typeString":"literal_string \"onlyGelatoRelay\""}],"id":54,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"194:7:1","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"194:54:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61,"nodeType":"ExpressionStatement","src":"194:54:1"},{"id":62,"nodeType":"PlaceholderStatement","src":"258:1:1"}]},"id":64,"name":"onlyGelatoRelay","nameLocation":"166:15:1","nodeType":"ModifierDefinition","parameters":{"id":53,"nodeType":"ParameterList","parameters":[],"src":"181:2:1"},"src":"157:109:1","virtual":false,"visibility":"internal"},{"body":{"id":75,"nodeType":"Block","src":"345:50:1","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":73,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":71,"name":"_forwarder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":66,"src":"362:10:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":72,"name":"GELATO_RELAY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":82,"src":"376:12:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"362:26:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":70,"id":74,"nodeType":"Return","src":"355:33:1"}]},"id":76,"implemented":true,"kind":"function","modifiers":[],"name":"_isGelatoRelay","nameLocation":"281:14:1","nodeType":"FunctionDefinition","parameters":{"id":67,"nodeType":"ParameterList","parameters":[{"constant":false,"id":66,"mutability":"mutable","name":"_forwarder","nameLocation":"304:10:1","nodeType":"VariableDeclaration","scope":76,"src":"296:18:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":65,"name":"address","nodeType":"ElementaryTypeName","src":"296:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"295:20:1"},"returnParameters":{"id":70,"nodeType":"ParameterList","parameters":[{"constant":false,"id":69,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":76,"src":"339:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":68,"name":"bool","nodeType":"ElementaryTypeName","src":"339:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"338:6:1"},"scope":77,"src":"272:123:1","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":78,"src":"117:280:1","usedErrors":[]}],"src":"32:366:1"},"id":1},"@gelatonetwork/relay-context/contracts/constants/GelatoRelay.sol":{"ast":{"absolutePath":"@gelatonetwork/relay-context/contracts/constants/GelatoRelay.sol","exportedSymbols":{"GELATO_RELAY":[82],"GELATO_RELAY_ERC2771":[85]},"id":86,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":79,"literals":["solidity","^","0.8",".1"],"nodeType":"PragmaDirective","src":"32:23:2"},{"constant":true,"id":82,"mutability":"constant","name":"GELATO_RELAY","nameLocation":"74:12:2","nodeType":"VariableDeclaration","scope":86,"src":"57:74:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":80,"name":"address","nodeType":"ElementaryTypeName","src":"57:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307861426343396235393634323041394539313732464435393338363230453236356130663944663932","id":81,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"89:42:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0xaBcC9b596420A9E9172FD5938620E265a0f9Df92"},"visibility":"internal"},{"constant":true,"id":85,"mutability":"constant","name":"GELATO_RELAY_ERC2771","nameLocation":"150:20:2","nodeType":"VariableDeclaration","scope":86,"src":"133:82:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":83,"name":"address","nodeType":"ElementaryTypeName","src":"133:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307842663137354643433730383662346639626435396435454145386541363762386639343044453064","id":84,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"173:42:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0xBf175FCC7086b4f9bd59d5EAE8eA67b8f940DE0d"},"visibility":"internal"}],"src":"32:185:2"},"id":2},"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IAllowList.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IAllowList.sol","exportedSymbols":{"IAllowList":[207]},"id":208,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":87,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"47:23:3"},{"abstract":false,"baseContracts":[],"canonicalName":"IAllowList","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":207,"linearizedBaseContracts":[207],"name":"IAllowList","nameLocation":"82:10:3","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":88,"nodeType":"StructuredDocumentation","src":"273:36:3","text":"@notice public access is changed"},"eventSelector":"0f5773d7586470c9cb39342ea97f343232fe1e3b470db29562a61ab61863659e","id":94,"name":"UpdatePublicAccess","nameLocation":"320:18:3","nodeType":"EventDefinition","parameters":{"id":93,"nodeType":"ParameterList","parameters":[{"constant":false,"id":90,"indexed":true,"mutability":"mutable","name":"target","nameLocation":"355:6:3","nodeType":"VariableDeclaration","scope":94,"src":"339:22:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":89,"name":"address","nodeType":"ElementaryTypeName","src":"339:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":92,"indexed":false,"mutability":"mutable","name":"newStatus","nameLocation":"368:9:3","nodeType":"VariableDeclaration","scope":94,"src":"363:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":91,"name":"bool","nodeType":"ElementaryTypeName","src":"363:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"338:40:3"},"src":"314:65:3"},{"anonymous":false,"documentation":{"id":95,"nodeType":"StructuredDocumentation","src":"385:41:3","text":"@notice permission to call is changed"},"eventSelector":"3336e7aa4c86fcb95fa993c8022c30690f1f696f67f138c845d81dc5484c9a32","id":105,"name":"UpdateCallPermission","nameLocation":"437:20:3","nodeType":"EventDefinition","parameters":{"id":104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":97,"indexed":true,"mutability":"mutable","name":"caller","nameLocation":"474:6:3","nodeType":"VariableDeclaration","scope":105,"src":"458:22:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":96,"name":"address","nodeType":"ElementaryTypeName","src":"458:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":99,"indexed":true,"mutability":"mutable","name":"target","nameLocation":"498:6:3","nodeType":"VariableDeclaration","scope":105,"src":"482:22:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":98,"name":"address","nodeType":"ElementaryTypeName","src":"482:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":101,"indexed":true,"mutability":"mutable","name":"functionSig","nameLocation":"521:11:3","nodeType":"VariableDeclaration","scope":105,"src":"506:26:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":100,"name":"bytes4","nodeType":"ElementaryTypeName","src":"506:6:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"},{"constant":false,"id":103,"indexed":false,"mutability":"mutable","name":"status","nameLocation":"539:6:3","nodeType":"VariableDeclaration","scope":105,"src":"534:11:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":102,"name":"bool","nodeType":"ElementaryTypeName","src":"534:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"457:89:3"},"src":"431:116:3"},{"anonymous":false,"documentation":{"id":106,"nodeType":"StructuredDocumentation","src":"553:150:3","text":"@notice pendingOwner is changed\n @dev Also emitted when the new owner is accepted and in this case, `newPendingOwner` would be zero address"},"eventSelector":"b3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b","id":112,"name":"NewPendingOwner","nameLocation":"714:15:3","nodeType":"EventDefinition","parameters":{"id":111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":108,"indexed":true,"mutability":"mutable","name":"oldPendingOwner","nameLocation":"746:15:3","nodeType":"VariableDeclaration","scope":112,"src":"730:31:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":107,"name":"address","nodeType":"ElementaryTypeName","src":"730:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":110,"indexed":true,"mutability":"mutable","name":"newPendingOwner","nameLocation":"779:15:3","nodeType":"VariableDeclaration","scope":112,"src":"763:31:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":109,"name":"address","nodeType":"ElementaryTypeName","src":"763:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"729:66:3"},"src":"708:88:3"},{"anonymous":false,"documentation":{"id":113,"nodeType":"StructuredDocumentation","src":"802:25:3","text":"@notice Owner changed"},"eventSelector":"3edd90e7770f06fafde38004653b33870066c33bfc923ff6102acd601f85dfbc","id":117,"name":"NewOwner","nameLocation":"838:8:3","nodeType":"EventDefinition","parameters":{"id":116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":115,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"863:8:3","nodeType":"VariableDeclaration","scope":117,"src":"847:24:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":114,"name":"address","nodeType":"ElementaryTypeName","src":"847:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"846:26:3"},"src":"832:41:3"},{"functionSelector":"e30c3978","id":122,"implemented":false,"kind":"function","modifiers":[],"name":"pendingOwner","nameLocation":"1063:12:3","nodeType":"FunctionDefinition","parameters":{"id":118,"nodeType":"ParameterList","parameters":[],"src":"1075:2:3"},"returnParameters":{"id":121,"nodeType":"ParameterList","parameters":[{"constant":false,"id":120,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":122,"src":"1101:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":119,"name":"address","nodeType":"ElementaryTypeName","src":"1101:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1100:9:3"},"scope":207,"src":"1054:56:3","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"8da5cb5b","id":127,"implemented":false,"kind":"function","modifiers":[],"name":"owner","nameLocation":"1125:5:3","nodeType":"FunctionDefinition","parameters":{"id":123,"nodeType":"ParameterList","parameters":[],"src":"1130:2:3"},"returnParameters":{"id":126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":125,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":127,"src":"1156:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":124,"name":"address","nodeType":"ElementaryTypeName","src":"1156:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1155:9:3"},"scope":207,"src":"1116:49:3","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"df653c4c","id":134,"implemented":false,"kind":"function","modifiers":[],"name":"isAccessPublic","nameLocation":"1180:14:3","nodeType":"FunctionDefinition","parameters":{"id":130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":129,"mutability":"mutable","name":"_target","nameLocation":"1203:7:3","nodeType":"VariableDeclaration","scope":134,"src":"1195:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":128,"name":"address","nodeType":"ElementaryTypeName","src":"1195:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1194:17:3"},"returnParameters":{"id":133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":132,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":134,"src":"1235:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":131,"name":"bool","nodeType":"ElementaryTypeName","src":"1235:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1234:6:3"},"scope":207,"src":"1171:70:3","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"5965cf8c","id":145,"implemented":false,"kind":"function","modifiers":[],"name":"hasSpecialAccessToCall","nameLocation":"1256:22:3","nodeType":"FunctionDefinition","parameters":{"id":141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":136,"mutability":"mutable","name":"_caller","nameLocation":"1296:7:3","nodeType":"VariableDeclaration","scope":145,"src":"1288:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":135,"name":"address","nodeType":"ElementaryTypeName","src":"1288:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":138,"mutability":"mutable","name":"_target","nameLocation":"1321:7:3","nodeType":"VariableDeclaration","scope":145,"src":"1313:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":137,"name":"address","nodeType":"ElementaryTypeName","src":"1313:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":140,"mutability":"mutable","name":"_functionSig","nameLocation":"1345:12:3","nodeType":"VariableDeclaration","scope":145,"src":"1338:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":139,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1338:6:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1278:85:3"},"returnParameters":{"id":144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":143,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":145,"src":"1387:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":142,"name":"bool","nodeType":"ElementaryTypeName","src":"1387:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1386:6:3"},"scope":207,"src":"1247:146:3","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b7009613","id":156,"implemented":false,"kind":"function","modifiers":[],"name":"canCall","nameLocation":"1408:7:3","nodeType":"FunctionDefinition","parameters":{"id":152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":147,"mutability":"mutable","name":"_caller","nameLocation":"1433:7:3","nodeType":"VariableDeclaration","scope":156,"src":"1425:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":146,"name":"address","nodeType":"ElementaryTypeName","src":"1425:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":149,"mutability":"mutable","name":"_target","nameLocation":"1458:7:3","nodeType":"VariableDeclaration","scope":156,"src":"1450:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":148,"name":"address","nodeType":"ElementaryTypeName","src":"1450:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":151,"mutability":"mutable","name":"_functionSig","nameLocation":"1482:12:3","nodeType":"VariableDeclaration","scope":156,"src":"1475:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":150,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1475:6:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1415:85:3"},"returnParameters":{"id":155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":154,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":156,"src":"1524:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":153,"name":"bool","nodeType":"ElementaryTypeName","src":"1524:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1523:6:3"},"scope":207,"src":"1399:131:3","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"4368d1d0","id":165,"implemented":false,"kind":"function","modifiers":[],"name":"setBatchPublicAccess","nameLocation":"1728:20:3","nodeType":"FunctionDefinition","parameters":{"id":163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":159,"mutability":"mutable","name":"_targets","nameLocation":"1768:8:3","nodeType":"VariableDeclaration","scope":165,"src":"1749:27:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":157,"name":"address","nodeType":"ElementaryTypeName","src":"1749:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":158,"nodeType":"ArrayTypeName","src":"1749:9:3","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":162,"mutability":"mutable","name":"_enables","nameLocation":"1794:8:3","nodeType":"VariableDeclaration","scope":165,"src":"1778:24:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_calldata_ptr","typeString":"bool[]"},"typeName":{"baseType":{"id":160,"name":"bool","nodeType":"ElementaryTypeName","src":"1778:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":161,"nodeType":"ArrayTypeName","src":"1778:6:3","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_storage_ptr","typeString":"bool[]"}},"visibility":"internal"}],"src":"1748:55:3"},"returnParameters":{"id":164,"nodeType":"ParameterList","parameters":[],"src":"1812:0:3"},"scope":207,"src":"1719:94:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"8e54043c","id":172,"implemented":false,"kind":"function","modifiers":[],"name":"setPublicAccess","nameLocation":"1828:15:3","nodeType":"FunctionDefinition","parameters":{"id":170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":167,"mutability":"mutable","name":"_target","nameLocation":"1852:7:3","nodeType":"VariableDeclaration","scope":172,"src":"1844:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":166,"name":"address","nodeType":"ElementaryTypeName","src":"1844:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":169,"mutability":"mutable","name":"_enable","nameLocation":"1866:7:3","nodeType":"VariableDeclaration","scope":172,"src":"1861:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":168,"name":"bool","nodeType":"ElementaryTypeName","src":"1861:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1843:31:3"},"returnParameters":{"id":171,"nodeType":"ParameterList","parameters":[],"src":"1883:0:3"},"scope":207,"src":"1819:65:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"507d1bed","id":187,"implemented":false,"kind":"function","modifiers":[],"name":"setBatchPermissionToCall","nameLocation":"1899:24:3","nodeType":"FunctionDefinition","parameters":{"id":185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":175,"mutability":"mutable","name":"_callers","nameLocation":"1952:8:3","nodeType":"VariableDeclaration","scope":187,"src":"1933:27:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":173,"name":"address","nodeType":"ElementaryTypeName","src":"1933:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":174,"nodeType":"ArrayTypeName","src":"1933:9:3","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":178,"mutability":"mutable","name":"_targets","nameLocation":"1989:8:3","nodeType":"VariableDeclaration","scope":187,"src":"1970:27:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":176,"name":"address","nodeType":"ElementaryTypeName","src":"1970:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":177,"nodeType":"ArrayTypeName","src":"1970:9:3","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":181,"mutability":"mutable","name":"_functionSigs","nameLocation":"2025:13:3","nodeType":"VariableDeclaration","scope":187,"src":"2007:31:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_calldata_ptr","typeString":"bytes4[]"},"typeName":{"baseType":{"id":179,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2007:6:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":180,"nodeType":"ArrayTypeName","src":"2007:8:3","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"}},"visibility":"internal"},{"constant":false,"id":184,"mutability":"mutable","name":"_enables","nameLocation":"2064:8:3","nodeType":"VariableDeclaration","scope":187,"src":"2048:24:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_calldata_ptr","typeString":"bool[]"},"typeName":{"baseType":{"id":182,"name":"bool","nodeType":"ElementaryTypeName","src":"2048:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":183,"nodeType":"ArrayTypeName","src":"2048:6:3","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_storage_ptr","typeString":"bool[]"}},"visibility":"internal"}],"src":"1923:155:3"},"returnParameters":{"id":186,"nodeType":"ParameterList","parameters":[],"src":"2087:0:3"},"scope":207,"src":"1890:198:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"73df5d8d","id":198,"implemented":false,"kind":"function","modifiers":[],"name":"setPermissionToCall","nameLocation":"2103:19:3","nodeType":"FunctionDefinition","parameters":{"id":196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":189,"mutability":"mutable","name":"_caller","nameLocation":"2140:7:3","nodeType":"VariableDeclaration","scope":198,"src":"2132:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":188,"name":"address","nodeType":"ElementaryTypeName","src":"2132:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":191,"mutability":"mutable","name":"_target","nameLocation":"2165:7:3","nodeType":"VariableDeclaration","scope":198,"src":"2157:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":190,"name":"address","nodeType":"ElementaryTypeName","src":"2157:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":193,"mutability":"mutable","name":"_functionSig","nameLocation":"2189:12:3","nodeType":"VariableDeclaration","scope":198,"src":"2182:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":192,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2182:6:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"},{"constant":false,"id":195,"mutability":"mutable","name":"_enable","nameLocation":"2216:7:3","nodeType":"VariableDeclaration","scope":198,"src":"2211:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":194,"name":"bool","nodeType":"ElementaryTypeName","src":"2211:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2122:107:3"},"returnParameters":{"id":197,"nodeType":"ParameterList","parameters":[],"src":"2238:0:3"},"scope":207,"src":"2094:145:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"c42069ec","id":203,"implemented":false,"kind":"function","modifiers":[],"name":"setPendingOwner","nameLocation":"2254:15:3","nodeType":"FunctionDefinition","parameters":{"id":201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":200,"mutability":"mutable","name":"_newPendingOwner","nameLocation":"2278:16:3","nodeType":"VariableDeclaration","scope":203,"src":"2270:24:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":199,"name":"address","nodeType":"ElementaryTypeName","src":"2270:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2269:26:3"},"returnParameters":{"id":202,"nodeType":"ParameterList","parameters":[],"src":"2304:0:3"},"scope":207,"src":"2245:60:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"ebbc4965","id":206,"implemented":false,"kind":"function","modifiers":[],"name":"acceptOwner","nameLocation":"2320:11:3","nodeType":"FunctionDefinition","parameters":{"id":204,"nodeType":"ParameterList","parameters":[],"src":"2331:2:3"},"returnParameters":{"id":205,"nodeType":"ParameterList","parameters":[],"src":"2342:0:3"},"scope":207,"src":"2311:32:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":208,"src":"72:2273:3","usedErrors":[]}],"src":"47:2299:3"},"id":3},"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IERC20.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IERC20.sol","exportedSymbols":{"IERC20":[299]},"id":300,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":209,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"40:23:4"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":210,"nodeType":"StructuredDocumentation","src":"65:262:4","text":" @dev Interface of the ERC20 standard as defined in the EIP.\n @dev Unlike EIP-20 standard \"transfer\" and \"transferFrom\" functions do not return any value.\n This is made to be compatible with popular tokens that are implemented standard incorrectly."},"fullyImplemented":false,"id":299,"linearizedBaseContracts":[299],"name":"IERC20","nameLocation":"338:6:4","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":211,"nodeType":"StructuredDocumentation","src":"351:54:4","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":216,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"419:4:4","nodeType":"FunctionDefinition","parameters":{"id":212,"nodeType":"ParameterList","parameters":[],"src":"423:2:4"},"returnParameters":{"id":215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":214,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":216,"src":"449:13:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":213,"name":"string","nodeType":"ElementaryTypeName","src":"449:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"448:15:4"},"scope":299,"src":"410:54:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":217,"nodeType":"StructuredDocumentation","src":"470:56:4","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":222,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"540:6:4","nodeType":"FunctionDefinition","parameters":{"id":218,"nodeType":"ParameterList","parameters":[],"src":"546:2:4"},"returnParameters":{"id":221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":220,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":222,"src":"572:13:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":219,"name":"string","nodeType":"ElementaryTypeName","src":"572:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"571:15:4"},"scope":299,"src":"531:56:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":223,"nodeType":"StructuredDocumentation","src":"593:65:4","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":228,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"672:8:4","nodeType":"FunctionDefinition","parameters":{"id":224,"nodeType":"ParameterList","parameters":[],"src":"680:2:4"},"returnParameters":{"id":227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":226,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":228,"src":"706:5:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":225,"name":"uint8","nodeType":"ElementaryTypeName","src":"706:5:4","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"705:7:4"},"scope":299,"src":"663:50:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":229,"nodeType":"StructuredDocumentation","src":"719:66:4","text":" @dev Returns the amount of tokens in existence."},"functionSelector":"18160ddd","id":234,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"799:11:4","nodeType":"FunctionDefinition","parameters":{"id":230,"nodeType":"ParameterList","parameters":[],"src":"810:2:4"},"returnParameters":{"id":233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":232,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":234,"src":"836:7:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":231,"name":"uint256","nodeType":"ElementaryTypeName","src":"836:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"835:9:4"},"scope":299,"src":"790:55:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":235,"nodeType":"StructuredDocumentation","src":"851:72:4","text":" @dev Returns the amount of tokens owned by `account`."},"functionSelector":"70a08231","id":242,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"937:9:4","nodeType":"FunctionDefinition","parameters":{"id":238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":237,"mutability":"mutable","name":"account","nameLocation":"955:7:4","nodeType":"VariableDeclaration","scope":242,"src":"947:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":236,"name":"address","nodeType":"ElementaryTypeName","src":"947:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"946:17:4"},"returnParameters":{"id":241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":240,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":242,"src":"987:7:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":239,"name":"uint256","nodeType":"ElementaryTypeName","src":"987:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"986:9:4"},"scope":299,"src":"928:68:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":243,"nodeType":"StructuredDocumentation","src":"1002:209:4","text":" @dev Moves `amount` tokens from the caller's account to `recipient`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":250,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1225:8:4","nodeType":"FunctionDefinition","parameters":{"id":248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":245,"mutability":"mutable","name":"recipient","nameLocation":"1242:9:4","nodeType":"VariableDeclaration","scope":250,"src":"1234:17:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":244,"name":"address","nodeType":"ElementaryTypeName","src":"1234:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":247,"mutability":"mutable","name":"amount","nameLocation":"1261:6:4","nodeType":"VariableDeclaration","scope":250,"src":"1253:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":246,"name":"uint256","nodeType":"ElementaryTypeName","src":"1253:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1233:35:4"},"returnParameters":{"id":249,"nodeType":"ParameterList","parameters":[],"src":"1277:0:4"},"scope":299,"src":"1216:62:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":251,"nodeType":"StructuredDocumentation","src":"1284:264:4","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":260,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1562:9:4","nodeType":"FunctionDefinition","parameters":{"id":256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":253,"mutability":"mutable","name":"owner","nameLocation":"1580:5:4","nodeType":"VariableDeclaration","scope":260,"src":"1572:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":252,"name":"address","nodeType":"ElementaryTypeName","src":"1572:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":255,"mutability":"mutable","name":"spender","nameLocation":"1595:7:4","nodeType":"VariableDeclaration","scope":260,"src":"1587:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":254,"name":"address","nodeType":"ElementaryTypeName","src":"1587:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1571:32:4"},"returnParameters":{"id":259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":258,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":260,"src":"1627:7:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":257,"name":"uint256","nodeType":"ElementaryTypeName","src":"1627:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1626:9:4"},"scope":299,"src":"1553:83:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":261,"nodeType":"StructuredDocumentation","src":"1642:642:4","text":" @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":270,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2298:7:4","nodeType":"FunctionDefinition","parameters":{"id":266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":263,"mutability":"mutable","name":"spender","nameLocation":"2314:7:4","nodeType":"VariableDeclaration","scope":270,"src":"2306:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":262,"name":"address","nodeType":"ElementaryTypeName","src":"2306:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":265,"mutability":"mutable","name":"amount","nameLocation":"2331:6:4","nodeType":"VariableDeclaration","scope":270,"src":"2323:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":264,"name":"uint256","nodeType":"ElementaryTypeName","src":"2323:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2305:33:4"},"returnParameters":{"id":269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":268,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":270,"src":"2357:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":267,"name":"bool","nodeType":"ElementaryTypeName","src":"2357:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2356:6:4"},"scope":299,"src":"2289:74:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":271,"nodeType":"StructuredDocumentation","src":"2369:296:4","text":" @dev Moves `amount` tokens from `sender` to `recipient` using the\n allowance mechanism. `amount` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":280,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2679:12:4","nodeType":"FunctionDefinition","parameters":{"id":278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":273,"mutability":"mutable","name":"sender","nameLocation":"2709:6:4","nodeType":"VariableDeclaration","scope":280,"src":"2701:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":272,"name":"address","nodeType":"ElementaryTypeName","src":"2701:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":275,"mutability":"mutable","name":"recipient","nameLocation":"2733:9:4","nodeType":"VariableDeclaration","scope":280,"src":"2725:17:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":274,"name":"address","nodeType":"ElementaryTypeName","src":"2725:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":277,"mutability":"mutable","name":"amount","nameLocation":"2760:6:4","nodeType":"VariableDeclaration","scope":280,"src":"2752:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":276,"name":"uint256","nodeType":"ElementaryTypeName","src":"2752:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2691:81:4"},"returnParameters":{"id":279,"nodeType":"ParameterList","parameters":[],"src":"2781:0:4"},"scope":299,"src":"2670:112:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"anonymous":false,"documentation":{"id":281,"nodeType":"StructuredDocumentation","src":"2788:158:4","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":289,"name":"Transfer","nameLocation":"2957:8:4","nodeType":"EventDefinition","parameters":{"id":288,"nodeType":"ParameterList","parameters":[{"constant":false,"id":283,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"2982:4:4","nodeType":"VariableDeclaration","scope":289,"src":"2966:20:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":282,"name":"address","nodeType":"ElementaryTypeName","src":"2966:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":285,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"3004:2:4","nodeType":"VariableDeclaration","scope":289,"src":"2988:18:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":284,"name":"address","nodeType":"ElementaryTypeName","src":"2988:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":287,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"3016:5:4","nodeType":"VariableDeclaration","scope":289,"src":"3008:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":286,"name":"uint256","nodeType":"ElementaryTypeName","src":"3008:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2965:57:4"},"src":"2951:72:4"},{"anonymous":false,"documentation":{"id":290,"nodeType":"StructuredDocumentation","src":"3029:148:4","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":298,"name":"Approval","nameLocation":"3188:8:4","nodeType":"EventDefinition","parameters":{"id":297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":292,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"3213:5:4","nodeType":"VariableDeclaration","scope":298,"src":"3197:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":291,"name":"address","nodeType":"ElementaryTypeName","src":"3197:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":294,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"3236:7:4","nodeType":"VariableDeclaration","scope":298,"src":"3220:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":293,"name":"address","nodeType":"ElementaryTypeName","src":"3220:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":296,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"3253:5:4","nodeType":"VariableDeclaration","scope":298,"src":"3245:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":295,"name":"uint256","nodeType":"ElementaryTypeName","src":"3245:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3196:63:4"},"src":"3182:78:4"}],"scope":300,"src":"328:2934:4","usedErrors":[]}],"src":"40:3223:4"},"id":4},"@matterlabs/zksync-contracts/l1/contracts/common/libraries/UncheckedMath.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/common/libraries/UncheckedMath.sol","exportedSymbols":{"UncheckedMath":[330]},"id":331,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":301,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"47:23:5"},{"abstract":false,"baseContracts":[],"canonicalName":"UncheckedMath","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":330,"linearizedBaseContracts":[330],"name":"UncheckedMath","nameLocation":"80:13:5","nodeType":"ContractDefinition","nodes":[{"body":{"id":313,"nodeType":"Block","src":"171:69:5","statements":[{"id":312,"nodeType":"UncheckedBlock","src":"181:53:5","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":308,"name":"_number","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":303,"src":"212:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":309,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"222:1:5","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"212:11:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":307,"id":311,"nodeType":"Return","src":"205:18:5"}]}]},"id":314,"implemented":true,"kind":"function","modifiers":[],"name":"uncheckedInc","nameLocation":"109:12:5","nodeType":"FunctionDefinition","parameters":{"id":304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":303,"mutability":"mutable","name":"_number","nameLocation":"130:7:5","nodeType":"VariableDeclaration","scope":314,"src":"122:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":302,"name":"uint256","nodeType":"ElementaryTypeName","src":"122:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"121:17:5"},"returnParameters":{"id":307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":306,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":314,"src":"162:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":305,"name":"uint256","nodeType":"ElementaryTypeName","src":"162:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"161:9:5"},"scope":330,"src":"100:140:5","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":328,"nodeType":"Block","src":"328:69:5","statements":[{"id":327,"nodeType":"UncheckedBlock","src":"338:53:5","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":323,"name":"_lhs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":316,"src":"369:4:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":324,"name":"_rhs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":318,"src":"376:4:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"369:11:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":322,"id":326,"nodeType":"Return","src":"362:18:5"}]}]},"id":329,"implemented":true,"kind":"function","modifiers":[],"name":"uncheckedAdd","nameLocation":"255:12:5","nodeType":"FunctionDefinition","parameters":{"id":319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":316,"mutability":"mutable","name":"_lhs","nameLocation":"276:4:5","nodeType":"VariableDeclaration","scope":329,"src":"268:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":315,"name":"uint256","nodeType":"ElementaryTypeName","src":"268:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":318,"mutability":"mutable","name":"_rhs","nameLocation":"290:4:5","nodeType":"VariableDeclaration","scope":329,"src":"282:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":317,"name":"uint256","nodeType":"ElementaryTypeName","src":"282:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"267:28:5"},"returnParameters":{"id":322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":321,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":329,"src":"319:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":320,"name":"uint256","nodeType":"ElementaryTypeName","src":"319:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"318:9:5"},"scope":330,"src":"246:151:5","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":331,"src":"72:327:5","usedErrors":[]}],"src":"47:353:5"},"id":5},"@matterlabs/zksync-contracts/l1/contracts/zksync/Plonk4VerifierWithAccessToDNext.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/Plonk4VerifierWithAccessToDNext.sol","exportedSymbols":{"NUM_G2_ELS":[341],"PairingsBn254":[7049],"Plonk4VerifierWithAccessToDNext":[3732],"STATE_WIDTH":[338],"TranscriptLib":[7416],"UncheckedMath":[330],"VerificationKey":[387]},"id":3733,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":332,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"47:23:6"},{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PairingsBn254.sol","file":"./libraries/PairingsBn254.sol","id":333,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3733,"sourceUnit":7050,"src":"72:39:6","symbolAliases":[],"unitAlias":""},{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/TranscriptLib.sol","file":"./libraries/TranscriptLib.sol","id":334,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3733,"sourceUnit":7417,"src":"112:39:6","symbolAliases":[],"unitAlias":""},{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/common/libraries/UncheckedMath.sol","file":"../common/libraries/UncheckedMath.sol","id":335,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3733,"sourceUnit":331,"src":"152:47:6","symbolAliases":[],"unitAlias":""},{"constant":true,"id":338,"mutability":"constant","name":"STATE_WIDTH","nameLocation":"218:11:6","nodeType":"VariableDeclaration","scope":3733,"src":"201:32:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":336,"name":"uint256","nodeType":"ElementaryTypeName","src":"201:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"34","id":337,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"232:1:6","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"visibility":"internal"},{"constant":true,"id":341,"mutability":"constant","name":"NUM_G2_ELS","nameLocation":"252:10:6","nodeType":"VariableDeclaration","scope":3733,"src":"235:31:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":339,"name":"uint256","nodeType":"ElementaryTypeName","src":"235:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"265:1:6","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"internal"},{"canonicalName":"VerificationKey","id":387,"members":[{"constant":false,"id":343,"mutability":"mutable","name":"domain_size","nameLocation":"306:11:6","nodeType":"VariableDeclaration","scope":387,"src":"298:19:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":342,"name":"uint256","nodeType":"ElementaryTypeName","src":"298:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":345,"mutability":"mutable","name":"num_inputs","nameLocation":"331:10:6","nodeType":"VariableDeclaration","scope":387,"src":"323:18:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":344,"name":"uint256","nodeType":"ElementaryTypeName","src":"323:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":348,"mutability":"mutable","name":"omega","nameLocation":"364:5:6","nodeType":"VariableDeclaration","scope":387,"src":"347:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":347,"nodeType":"UserDefinedTypeName","pathNode":{"id":346,"name":"PairingsBn254.Fr","nameLocations":["347:13:6","361:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"347:16:6"},"referencedDeclaration":6030,"src":"347:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":353,"mutability":"mutable","name":"gate_selectors_commitments","nameLocation":"400:26:6","nodeType":"VariableDeclaration","scope":387,"src":"375:51:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$2_storage_ptr","typeString":"struct PairingsBn254.G1Point[2]"},"typeName":{"baseType":{"id":350,"nodeType":"UserDefinedTypeName","pathNode":{"id":349,"name":"PairingsBn254.G1Point","nameLocations":["375:13:6","389:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"375:21:6"},"referencedDeclaration":6027,"src":"375:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"id":352,"length":{"hexValue":"32","id":351,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"397:1:6","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"375:24:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$2_storage_ptr","typeString":"struct PairingsBn254.G1Point[2]"}},"visibility":"internal"},{"constant":false,"id":358,"mutability":"mutable","name":"gate_setup_commitments","nameLocation":"457:22:6","nodeType":"VariableDeclaration","scope":387,"src":"432:47:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$7_storage_ptr","typeString":"struct PairingsBn254.G1Point[7]"},"typeName":{"baseType":{"id":355,"nodeType":"UserDefinedTypeName","pathNode":{"id":354,"name":"PairingsBn254.G1Point","nameLocations":["432:13:6","446:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"432:21:6"},"referencedDeclaration":6027,"src":"432:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"id":357,"length":{"hexValue":"37","id":356,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"454:1:6","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"nodeType":"ArrayTypeName","src":"432:24:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$7_storage_ptr","typeString":"struct PairingsBn254.G1Point[7]"}},"visibility":"internal"},{"constant":false,"id":363,"mutability":"mutable","name":"permutation_commitments","nameLocation":"520:23:6","nodeType":"VariableDeclaration","scope":387,"src":"485:58:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$4_storage_ptr","typeString":"struct PairingsBn254.G1Point[4]"},"typeName":{"baseType":{"id":360,"nodeType":"UserDefinedTypeName","pathNode":{"id":359,"name":"PairingsBn254.G1Point","nameLocations":["485:13:6","499:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"485:21:6"},"referencedDeclaration":6027,"src":"485:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"id":362,"length":{"id":361,"name":"STATE_WIDTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"507:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"ArrayTypeName","src":"485:34:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$4_storage_ptr","typeString":"struct PairingsBn254.G1Point[4]"}},"visibility":"internal"},{"constant":false,"id":366,"mutability":"mutable","name":"lookup_selector_commitment","nameLocation":"571:26:6","nodeType":"VariableDeclaration","scope":387,"src":"549:48:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":365,"nodeType":"UserDefinedTypeName","pathNode":{"id":364,"name":"PairingsBn254.G1Point","nameLocations":["549:13:6","563:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"549:21:6"},"referencedDeclaration":6027,"src":"549:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":371,"mutability":"mutable","name":"lookup_tables_commitments","nameLocation":"628:25:6","nodeType":"VariableDeclaration","scope":387,"src":"603:50:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$4_storage_ptr","typeString":"struct PairingsBn254.G1Point[4]"},"typeName":{"baseType":{"id":368,"nodeType":"UserDefinedTypeName","pathNode":{"id":367,"name":"PairingsBn254.G1Point","nameLocations":["603:13:6","617:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"603:21:6"},"referencedDeclaration":6027,"src":"603:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"id":370,"length":{"hexValue":"34","id":369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"625:1:6","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"ArrayTypeName","src":"603:24:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$4_storage_ptr","typeString":"struct PairingsBn254.G1Point[4]"}},"visibility":"internal"},{"constant":false,"id":374,"mutability":"mutable","name":"lookup_table_type_commitment","nameLocation":"681:28:6","nodeType":"VariableDeclaration","scope":387,"src":"659:50:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":373,"nodeType":"UserDefinedTypeName","pathNode":{"id":372,"name":"PairingsBn254.G1Point","nameLocations":["659:13:6","673:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"659:21:6"},"referencedDeclaration":6027,"src":"659:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":381,"mutability":"mutable","name":"non_residues","nameLocation":"749:12:6","nodeType":"VariableDeclaration","scope":387,"src":"715:46:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_storage_$3_storage_ptr","typeString":"struct PairingsBn254.Fr[3]"},"typeName":{"baseType":{"id":376,"nodeType":"UserDefinedTypeName","pathNode":{"id":375,"name":"PairingsBn254.Fr","nameLocations":["715:13:6","729:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"715:16:6"},"referencedDeclaration":6030,"src":"715:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"id":380,"length":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":379,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":377,"name":"STATE_WIDTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"732:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":378,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"746:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"732:15:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"ArrayTypeName","src":"715:33:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_storage_$3_storage_ptr","typeString":"struct PairingsBn254.Fr[3]"}},"visibility":"internal"},{"constant":false,"id":386,"mutability":"mutable","name":"g2_elements","nameLocation":"801:11:6","nodeType":"VariableDeclaration","scope":387,"src":"767:45:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_storage_$2_storage_ptr","typeString":"struct PairingsBn254.G2Point[2]"},"typeName":{"baseType":{"id":383,"nodeType":"UserDefinedTypeName","pathNode":{"id":382,"name":"PairingsBn254.G2Point","nameLocations":["767:13:6","781:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6232,"src":"767:21:6"},"referencedDeclaration":6232,"src":"767:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_storage_ptr","typeString":"struct PairingsBn254.G2Point"}},"id":385,"length":{"id":384,"name":"NUM_G2_ELS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":341,"src":"789:10:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"ArrayTypeName","src":"767:33:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_storage_$2_storage_ptr","typeString":"struct PairingsBn254.G2Point[2]"}},"visibility":"internal"}],"name":"VerificationKey","nameLocation":"276:15:6","nodeType":"StructDefinition","scope":3733,"src":"269:546:6","visibility":"public"},{"abstract":false,"baseContracts":[],"canonicalName":"Plonk4VerifierWithAccessToDNext","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":3732,"linearizedBaseContracts":[3732],"name":"Plonk4VerifierWithAccessToDNext","nameLocation":"826:31:6","nodeType":"ContractDefinition","nodes":[{"global":false,"id":391,"libraryName":{"id":388,"name":"PairingsBn254","nameLocations":["870:13:6"],"nodeType":"IdentifierPath","referencedDeclaration":7049,"src":"870:13:6"},"nodeType":"UsingForDirective","src":"864:46:6","typeName":{"id":390,"nodeType":"UserDefinedTypeName","pathNode":{"id":389,"name":"PairingsBn254.G1Point","nameLocations":["888:13:6","902:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"888:21:6"},"referencedDeclaration":6027,"src":"888:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}}},{"global":false,"id":395,"libraryName":{"id":392,"name":"PairingsBn254","nameLocations":["921:13:6"],"nodeType":"IdentifierPath","referencedDeclaration":7049,"src":"921:13:6"},"nodeType":"UsingForDirective","src":"915:46:6","typeName":{"id":394,"nodeType":"UserDefinedTypeName","pathNode":{"id":393,"name":"PairingsBn254.G2Point","nameLocations":["939:13:6","953:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6232,"src":"939:21:6"},"referencedDeclaration":6232,"src":"939:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_storage_ptr","typeString":"struct PairingsBn254.G2Point"}}},{"global":false,"id":399,"libraryName":{"id":396,"name":"PairingsBn254","nameLocations":["972:13:6"],"nodeType":"IdentifierPath","referencedDeclaration":7049,"src":"972:13:6"},"nodeType":"UsingForDirective","src":"966:41:6","typeName":{"id":398,"nodeType":"UserDefinedTypeName","pathNode":{"id":397,"name":"PairingsBn254.Fr","nameLocations":["990:13:6","1004:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"990:16:6"},"referencedDeclaration":6030,"src":"990:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}}},{"global":false,"id":403,"libraryName":{"id":400,"name":"TranscriptLib","nameLocations":["1019:13:6"],"nodeType":"IdentifierPath","referencedDeclaration":7416,"src":"1019:13:6"},"nodeType":"UsingForDirective","src":"1013:49:6","typeName":{"id":402,"nodeType":"UserDefinedTypeName","pathNode":{"id":401,"name":"TranscriptLib.Transcript","nameLocations":["1037:13:6","1051:10:6"],"nodeType":"IdentifierPath","referencedDeclaration":7259,"src":"1037:24:6"},"referencedDeclaration":7259,"src":"1037:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_storage_ptr","typeString":"struct TranscriptLib.Transcript"}}},{"global":false,"id":406,"libraryName":{"id":404,"name":"UncheckedMath","nameLocations":["1074:13:6"],"nodeType":"IdentifierPath","referencedDeclaration":330,"src":"1074:13:6"},"nodeType":"UsingForDirective","src":"1068:32:6","typeName":{"id":405,"name":"uint256","nodeType":"ElementaryTypeName","src":"1092:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"canonicalName":"Plonk4VerifierWithAccessToDNext.Proof","id":484,"members":[{"constant":false,"id":409,"mutability":"mutable","name":"input_values","nameLocation":"1139:12:6","nodeType":"VariableDeclaration","scope":484,"src":"1129:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":407,"name":"uint256","nodeType":"ElementaryTypeName","src":"1129:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":408,"nodeType":"ArrayTypeName","src":"1129:9:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":414,"mutability":"mutable","name":"state_polys_commitments","nameLocation":"1219:23:6","nodeType":"VariableDeclaration","scope":484,"src":"1184:58:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$4_storage_ptr","typeString":"struct PairingsBn254.G1Point[4]"},"typeName":{"baseType":{"id":411,"nodeType":"UserDefinedTypeName","pathNode":{"id":410,"name":"PairingsBn254.G1Point","nameLocations":["1184:13:6","1198:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"1184:21:6"},"referencedDeclaration":6027,"src":"1184:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"id":413,"length":{"id":412,"name":"STATE_WIDTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"1206:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"ArrayTypeName","src":"1184:34:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$4_storage_ptr","typeString":"struct PairingsBn254.G1Point[4]"}},"visibility":"internal"},{"constant":false,"id":417,"mutability":"mutable","name":"copy_permutation_grand_product_commitment","nameLocation":"1274:41:6","nodeType":"VariableDeclaration","scope":484,"src":"1252:63:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":416,"nodeType":"UserDefinedTypeName","pathNode":{"id":415,"name":"PairingsBn254.G1Point","nameLocations":["1252:13:6","1266:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"1252:21:6"},"referencedDeclaration":6027,"src":"1252:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":422,"mutability":"mutable","name":"quotient_poly_parts_commitments","nameLocation":"1360:31:6","nodeType":"VariableDeclaration","scope":484,"src":"1325:66:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$4_storage_ptr","typeString":"struct PairingsBn254.G1Point[4]"},"typeName":{"baseType":{"id":419,"nodeType":"UserDefinedTypeName","pathNode":{"id":418,"name":"PairingsBn254.G1Point","nameLocations":["1325:13:6","1339:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"1325:21:6"},"referencedDeclaration":6027,"src":"1325:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"id":421,"length":{"id":420,"name":"STATE_WIDTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"1347:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"ArrayTypeName","src":"1325:34:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$4_storage_ptr","typeString":"struct PairingsBn254.G1Point[4]"}},"visibility":"internal"},{"constant":false,"id":427,"mutability":"mutable","name":"state_polys_openings_at_z","nameLocation":"1451:25:6","nodeType":"VariableDeclaration","scope":484,"src":"1421:55:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_storage_$4_storage_ptr","typeString":"struct PairingsBn254.Fr[4]"},"typeName":{"baseType":{"id":424,"nodeType":"UserDefinedTypeName","pathNode":{"id":423,"name":"PairingsBn254.Fr","nameLocations":["1421:13:6","1435:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"1421:16:6"},"referencedDeclaration":6030,"src":"1421:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"id":426,"length":{"id":425,"name":"STATE_WIDTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"1438:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"ArrayTypeName","src":"1421:29:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_storage_$4_storage_ptr","typeString":"struct PairingsBn254.Fr[4]"}},"visibility":"internal"},{"constant":false,"id":432,"mutability":"mutable","name":"state_polys_openings_at_z_omega","nameLocation":"1506:31:6","nodeType":"VariableDeclaration","scope":484,"src":"1486:51:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_storage_$1_storage_ptr","typeString":"struct PairingsBn254.Fr[1]"},"typeName":{"baseType":{"id":429,"nodeType":"UserDefinedTypeName","pathNode":{"id":428,"name":"PairingsBn254.Fr","nameLocations":["1486:13:6","1500:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"1486:16:6"},"referencedDeclaration":6030,"src":"1486:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"id":431,"length":{"hexValue":"31","id":430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1503:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"ArrayTypeName","src":"1486:19:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_storage_$1_storage_ptr","typeString":"struct PairingsBn254.Fr[1]"}},"visibility":"internal"},{"constant":false,"id":437,"mutability":"mutable","name":"gate_selectors_openings_at_z","nameLocation":"1617:28:6","nodeType":"VariableDeclaration","scope":484,"src":"1597:48:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_storage_$1_storage_ptr","typeString":"struct PairingsBn254.Fr[1]"},"typeName":{"baseType":{"id":434,"nodeType":"UserDefinedTypeName","pathNode":{"id":433,"name":"PairingsBn254.Fr","nameLocations":["1597:13:6","1611:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"1597:16:6"},"referencedDeclaration":6030,"src":"1597:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"id":436,"length":{"hexValue":"31","id":435,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1614:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"ArrayTypeName","src":"1597:19:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_storage_$1_storage_ptr","typeString":"struct PairingsBn254.Fr[1]"}},"visibility":"internal"},{"constant":false,"id":444,"mutability":"mutable","name":"copy_permutation_polys_openings_at_z","nameLocation":"1689:36:6","nodeType":"VariableDeclaration","scope":484,"src":"1655:70:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_storage_$3_storage_ptr","typeString":"struct PairingsBn254.Fr[3]"},"typeName":{"baseType":{"id":439,"nodeType":"UserDefinedTypeName","pathNode":{"id":438,"name":"PairingsBn254.Fr","nameLocations":["1655:13:6","1669:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"1655:16:6"},"referencedDeclaration":6030,"src":"1655:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"id":443,"length":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":442,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":440,"name":"STATE_WIDTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"1672:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":441,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1686:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1672:15:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"ArrayTypeName","src":"1655:33:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_storage_$3_storage_ptr","typeString":"struct PairingsBn254.Fr[3]"}},"visibility":"internal"},{"constant":false,"id":447,"mutability":"mutable","name":"copy_permutation_grand_product_opening_at_z_omega","nameLocation":"1752:49:6","nodeType":"VariableDeclaration","scope":484,"src":"1735:66:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":446,"nodeType":"UserDefinedTypeName","pathNode":{"id":445,"name":"PairingsBn254.Fr","nameLocations":["1735:13:6","1749:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"1735:16:6"},"referencedDeclaration":6030,"src":"1735:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":450,"mutability":"mutable","name":"quotient_poly_opening_at_z","nameLocation":"1828:26:6","nodeType":"VariableDeclaration","scope":484,"src":"1811:43:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":449,"nodeType":"UserDefinedTypeName","pathNode":{"id":448,"name":"PairingsBn254.Fr","nameLocations":["1811:13:6","1825:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"1811:16:6"},"referencedDeclaration":6030,"src":"1811:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":453,"mutability":"mutable","name":"linearization_poly_opening_at_z","nameLocation":"1881:31:6","nodeType":"VariableDeclaration","scope":484,"src":"1864:48:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":452,"nodeType":"UserDefinedTypeName","pathNode":{"id":451,"name":"PairingsBn254.Fr","nameLocations":["1864:13:6","1878:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"1864:16:6"},"referencedDeclaration":6030,"src":"1864:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":456,"mutability":"mutable","name":"lookup_s_poly_commitment","nameLocation":"1974:24:6","nodeType":"VariableDeclaration","scope":484,"src":"1952:46:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":455,"nodeType":"UserDefinedTypeName","pathNode":{"id":454,"name":"PairingsBn254.G1Point","nameLocations":["1952:13:6","1966:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"1952:21:6"},"referencedDeclaration":6027,"src":"1952:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":459,"mutability":"mutable","name":"lookup_grand_product_commitment","nameLocation":"2030:31:6","nodeType":"VariableDeclaration","scope":484,"src":"2008:53:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":458,"nodeType":"UserDefinedTypeName","pathNode":{"id":457,"name":"PairingsBn254.G1Point","nameLocations":["2008:13:6","2022:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"2008:21:6"},"referencedDeclaration":6027,"src":"2008:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":462,"mutability":"mutable","name":"lookup_s_poly_opening_at_z_omega","nameLocation":"2115:32:6","nodeType":"VariableDeclaration","scope":484,"src":"2098:49:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":461,"nodeType":"UserDefinedTypeName","pathNode":{"id":460,"name":"PairingsBn254.Fr","nameLocations":["2098:13:6","2112:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"2098:16:6"},"referencedDeclaration":6030,"src":"2098:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":465,"mutability":"mutable","name":"lookup_grand_product_opening_at_z_omega","nameLocation":"2174:39:6","nodeType":"VariableDeclaration","scope":484,"src":"2157:56:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":464,"nodeType":"UserDefinedTypeName","pathNode":{"id":463,"name":"PairingsBn254.Fr","nameLocations":["2157:13:6","2171:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"2157:16:6"},"referencedDeclaration":6030,"src":"2157:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":468,"mutability":"mutable","name":"lookup_t_poly_opening_at_z","nameLocation":"2240:26:6","nodeType":"VariableDeclaration","scope":484,"src":"2223:43:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":467,"nodeType":"UserDefinedTypeName","pathNode":{"id":466,"name":"PairingsBn254.Fr","nameLocations":["2223:13:6","2237:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"2223:16:6"},"referencedDeclaration":6030,"src":"2223:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":471,"mutability":"mutable","name":"lookup_t_poly_opening_at_z_omega","nameLocation":"2293:32:6","nodeType":"VariableDeclaration","scope":484,"src":"2276:49:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":470,"nodeType":"UserDefinedTypeName","pathNode":{"id":469,"name":"PairingsBn254.Fr","nameLocations":["2276:13:6","2290:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"2276:16:6"},"referencedDeclaration":6030,"src":"2276:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":474,"mutability":"mutable","name":"lookup_selector_poly_opening_at_z","nameLocation":"2352:33:6","nodeType":"VariableDeclaration","scope":484,"src":"2335:50:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":473,"nodeType":"UserDefinedTypeName","pathNode":{"id":472,"name":"PairingsBn254.Fr","nameLocations":["2335:13:6","2349:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"2335:16:6"},"referencedDeclaration":6030,"src":"2335:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":477,"mutability":"mutable","name":"lookup_table_type_poly_opening_at_z","nameLocation":"2412:35:6","nodeType":"VariableDeclaration","scope":484,"src":"2395:52:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":476,"nodeType":"UserDefinedTypeName","pathNode":{"id":475,"name":"PairingsBn254.Fr","nameLocations":["2395:13:6","2409:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"2395:16:6"},"referencedDeclaration":6030,"src":"2395:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":480,"mutability":"mutable","name":"opening_proof_at_z","nameLocation":"2479:18:6","nodeType":"VariableDeclaration","scope":484,"src":"2457:40:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":479,"nodeType":"UserDefinedTypeName","pathNode":{"id":478,"name":"PairingsBn254.G1Point","nameLocations":["2457:13:6","2471:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"2457:21:6"},"referencedDeclaration":6027,"src":"2457:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":483,"mutability":"mutable","name":"opening_proof_at_z_omega","nameLocation":"2529:24:6","nodeType":"VariableDeclaration","scope":484,"src":"2507:46:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":482,"nodeType":"UserDefinedTypeName","pathNode":{"id":481,"name":"PairingsBn254.G1Point","nameLocations":["2507:13:6","2521:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"2507:21:6"},"referencedDeclaration":6027,"src":"2507:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"name":"Proof","nameLocation":"1113:5:6","nodeType":"StructDefinition","scope":3732,"src":"1106:1454:6","visibility":"public"},{"canonicalName":"Plonk4VerifierWithAccessToDNext.PartialVerifierState","id":544,"members":[{"constant":false,"id":487,"mutability":"mutable","name":"zero","nameLocation":"2621:4:6","nodeType":"VariableDeclaration","scope":544,"src":"2604:21:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":486,"nodeType":"UserDefinedTypeName","pathNode":{"id":485,"name":"PairingsBn254.Fr","nameLocations":["2604:13:6","2618:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"2604:16:6"},"referencedDeclaration":6030,"src":"2604:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":490,"mutability":"mutable","name":"alpha","nameLocation":"2652:5:6","nodeType":"VariableDeclaration","scope":544,"src":"2635:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":489,"nodeType":"UserDefinedTypeName","pathNode":{"id":488,"name":"PairingsBn254.Fr","nameLocations":["2635:13:6","2649:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"2635:16:6"},"referencedDeclaration":6030,"src":"2635:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":493,"mutability":"mutable","name":"beta","nameLocation":"2684:4:6","nodeType":"VariableDeclaration","scope":544,"src":"2667:21:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":492,"nodeType":"UserDefinedTypeName","pathNode":{"id":491,"name":"PairingsBn254.Fr","nameLocations":["2667:13:6","2681:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"2667:16:6"},"referencedDeclaration":6030,"src":"2667:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":496,"mutability":"mutable","name":"gamma","nameLocation":"2715:5:6","nodeType":"VariableDeclaration","scope":544,"src":"2698:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":495,"nodeType":"UserDefinedTypeName","pathNode":{"id":494,"name":"PairingsBn254.Fr","nameLocations":["2698:13:6","2712:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"2698:16:6"},"referencedDeclaration":6030,"src":"2698:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":501,"mutability":"mutable","name":"alpha_values","nameLocation":"2750:12:6","nodeType":"VariableDeclaration","scope":544,"src":"2730:32:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_storage_$9_storage_ptr","typeString":"struct PairingsBn254.Fr[9]"},"typeName":{"baseType":{"id":498,"nodeType":"UserDefinedTypeName","pathNode":{"id":497,"name":"PairingsBn254.Fr","nameLocations":["2730:13:6","2744:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"2730:16:6"},"referencedDeclaration":6030,"src":"2730:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"id":500,"length":{"hexValue":"39","id":499,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2747:1:6","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"nodeType":"ArrayTypeName","src":"2730:19:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_storage_$9_storage_ptr","typeString":"struct PairingsBn254.Fr[9]"}},"visibility":"internal"},{"constant":false,"id":504,"mutability":"mutable","name":"eta","nameLocation":"2789:3:6","nodeType":"VariableDeclaration","scope":544,"src":"2772:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":503,"nodeType":"UserDefinedTypeName","pathNode":{"id":502,"name":"PairingsBn254.Fr","nameLocations":["2772:13:6","2786:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"2772:16:6"},"referencedDeclaration":6030,"src":"2772:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":507,"mutability":"mutable","name":"beta_lookup","nameLocation":"2819:11:6","nodeType":"VariableDeclaration","scope":544,"src":"2802:28:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":506,"nodeType":"UserDefinedTypeName","pathNode":{"id":505,"name":"PairingsBn254.Fr","nameLocations":["2802:13:6","2816:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"2802:16:6"},"referencedDeclaration":6030,"src":"2802:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":510,"mutability":"mutable","name":"gamma_lookup","nameLocation":"2857:12:6","nodeType":"VariableDeclaration","scope":544,"src":"2840:29:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":509,"nodeType":"UserDefinedTypeName","pathNode":{"id":508,"name":"PairingsBn254.Fr","nameLocations":["2840:13:6","2854:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"2840:16:6"},"referencedDeclaration":6030,"src":"2840:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":513,"mutability":"mutable","name":"beta_plus_one","nameLocation":"2896:13:6","nodeType":"VariableDeclaration","scope":544,"src":"2879:30:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":512,"nodeType":"UserDefinedTypeName","pathNode":{"id":511,"name":"PairingsBn254.Fr","nameLocations":["2879:13:6","2893:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"2879:16:6"},"referencedDeclaration":6030,"src":"2879:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":516,"mutability":"mutable","name":"beta_gamma","nameLocation":"2936:10:6","nodeType":"VariableDeclaration","scope":544,"src":"2919:27:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":515,"nodeType":"UserDefinedTypeName","pathNode":{"id":514,"name":"PairingsBn254.Fr","nameLocations":["2919:13:6","2933:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"2919:16:6"},"referencedDeclaration":6030,"src":"2919:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":519,"mutability":"mutable","name":"v","nameLocation":"2973:1:6","nodeType":"VariableDeclaration","scope":544,"src":"2956:18:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":518,"nodeType":"UserDefinedTypeName","pathNode":{"id":517,"name":"PairingsBn254.Fr","nameLocations":["2956:13:6","2970:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"2956:16:6"},"referencedDeclaration":6030,"src":"2956:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":522,"mutability":"mutable","name":"u","nameLocation":"3001:1:6","nodeType":"VariableDeclaration","scope":544,"src":"2984:18:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":521,"nodeType":"UserDefinedTypeName","pathNode":{"id":520,"name":"PairingsBn254.Fr","nameLocations":["2984:13:6","2998:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"2984:16:6"},"referencedDeclaration":6030,"src":"2984:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":525,"mutability":"mutable","name":"z","nameLocation":"3029:1:6","nodeType":"VariableDeclaration","scope":544,"src":"3012:18:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":524,"nodeType":"UserDefinedTypeName","pathNode":{"id":523,"name":"PairingsBn254.Fr","nameLocations":["3012:13:6","3026:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"3012:16:6"},"referencedDeclaration":6030,"src":"3012:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":528,"mutability":"mutable","name":"z_omega","nameLocation":"3057:7:6","nodeType":"VariableDeclaration","scope":544,"src":"3040:24:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":527,"nodeType":"UserDefinedTypeName","pathNode":{"id":526,"name":"PairingsBn254.Fr","nameLocations":["3040:13:6","3054:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"3040:16:6"},"referencedDeclaration":6030,"src":"3040:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":531,"mutability":"mutable","name":"z_minus_last_omega","nameLocation":"3091:18:6","nodeType":"VariableDeclaration","scope":544,"src":"3074:35:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":530,"nodeType":"UserDefinedTypeName","pathNode":{"id":529,"name":"PairingsBn254.Fr","nameLocations":["3074:13:6","3088:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"3074:16:6"},"referencedDeclaration":6030,"src":"3074:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":534,"mutability":"mutable","name":"l_0_at_z","nameLocation":"3136:8:6","nodeType":"VariableDeclaration","scope":544,"src":"3119:25:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":533,"nodeType":"UserDefinedTypeName","pathNode":{"id":532,"name":"PairingsBn254.Fr","nameLocations":["3119:13:6","3133:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"3119:16:6"},"referencedDeclaration":6030,"src":"3119:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":537,"mutability":"mutable","name":"l_n_minus_one_at_z","nameLocation":"3171:18:6","nodeType":"VariableDeclaration","scope":544,"src":"3154:35:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":536,"nodeType":"UserDefinedTypeName","pathNode":{"id":535,"name":"PairingsBn254.Fr","nameLocations":["3154:13:6","3168:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"3154:16:6"},"referencedDeclaration":6030,"src":"3154:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":540,"mutability":"mutable","name":"t","nameLocation":"3216:1:6","nodeType":"VariableDeclaration","scope":544,"src":"3199:18:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":539,"nodeType":"UserDefinedTypeName","pathNode":{"id":538,"name":"PairingsBn254.Fr","nameLocations":["3199:13:6","3213:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"3199:16:6"},"referencedDeclaration":6030,"src":"3199:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":543,"mutability":"mutable","name":"tp","nameLocation":"3249:2:6","nodeType":"VariableDeclaration","scope":544,"src":"3227:24:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":542,"nodeType":"UserDefinedTypeName","pathNode":{"id":541,"name":"PairingsBn254.G1Point","nameLocations":["3227:13:6","3241:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"3227:21:6"},"referencedDeclaration":6027,"src":"3227:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"name":"PartialVerifierState","nameLocation":"2573:20:6","nodeType":"StructDefinition","scope":3732,"src":"2566:692:6","visibility":"public"},{"body":{"id":621,"nodeType":"Block","src":"3423:383:6","statements":[{"assignments":[559],"declarations":[{"constant":false,"id":559,"mutability":"mutable","name":"one","nameLocation":"3457:3:6","nodeType":"VariableDeclaration","scope":621,"src":"3433:27:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":558,"nodeType":"UserDefinedTypeName","pathNode":{"id":557,"name":"PairingsBn254.Fr","nameLocations":["3433:13:6","3447:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"3433:16:6"},"referencedDeclaration":6030,"src":"3433:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":564,"initialValue":{"arguments":[{"hexValue":"31","id":562,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3484:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":560,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"3463:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3477:6:6","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"3463:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3463:23:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"3433:53:6"},{"assignments":[569],"declarations":[{"constant":false,"id":569,"mutability":"mutable","name":"size_fe","nameLocation":"3521:7:6","nodeType":"VariableDeclaration","scope":621,"src":"3497:31:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":568,"nodeType":"UserDefinedTypeName","pathNode":{"id":567,"name":"PairingsBn254.Fr","nameLocations":["3497:13:6","3511:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"3497:16:6"},"referencedDeclaration":6030,"src":"3497:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":574,"initialValue":{"arguments":[{"id":572,"name":"domain_size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":546,"src":"3552:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":570,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"3531:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3545:6:6","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"3531:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3531:33:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"3497:67:6"},{"assignments":[579],"declarations":[{"constant":false,"id":579,"mutability":"mutable","name":"den","nameLocation":"3598:3:6","nodeType":"VariableDeclaration","scope":621,"src":"3574:27:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":578,"nodeType":"UserDefinedTypeName","pathNode":{"id":577,"name":"PairingsBn254.Fr","nameLocations":["3574:13:6","3588:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"3574:16:6"},"referencedDeclaration":6030,"src":"3574:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":583,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":580,"name":"at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":549,"src":"3604:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":581,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3607:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"3604:7:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3604:9:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"3574:39:6"},{"expression":{"arguments":[{"id":587,"name":"one","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":559,"src":"3638:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":584,"name":"den","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":579,"src":"3623:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":586,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3627:10:6","memberName":"sub_assign","nodeType":"MemberAccess","referencedDeclaration":6153,"src":"3623:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3623:19:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":589,"nodeType":"ExpressionStatement","src":"3623:19:6"},{"expression":{"arguments":[{"id":593,"name":"size_fe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":569,"src":"3667:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":590,"name":"den","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":579,"src":"3652:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":592,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3656:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"3652:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3652:23:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":595,"nodeType":"ExpressionStatement","src":"3652:23:6"},{"expression":{"id":600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":596,"name":"den","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":579,"src":"3686:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":597,"name":"den","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":579,"src":"3692:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":598,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3696:7:6","memberName":"inverse","nodeType":"MemberAccess","referencedDeclaration":6107,"src":"3692:11:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.Fr memory)"}},"id":599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3692:13:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"3686:19:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":601,"nodeType":"ExpressionStatement","src":"3686:19:6"},{"expression":{"id":607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":602,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":553,"src":"3716:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":605,"name":"domain_size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":546,"src":"3729:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":603,"name":"at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":549,"src":"3722:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":604,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3725:3:6","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":6223,"src":"3722:6:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Fr_$6030_memory_ptr_$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,uint256) view returns (struct PairingsBn254.Fr memory)"}},"id":606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3722:19:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"3716:25:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":608,"nodeType":"ExpressionStatement","src":"3716:25:6"},{"expression":{"arguments":[{"id":612,"name":"one","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":559,"src":"3766:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":609,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":553,"src":"3751:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":611,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3755:10:6","memberName":"sub_assign","nodeType":"MemberAccess","referencedDeclaration":6153,"src":"3751:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3751:19:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":614,"nodeType":"ExpressionStatement","src":"3751:19:6"},{"expression":{"arguments":[{"id":618,"name":"den","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":579,"src":"3795:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":615,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":553,"src":"3780:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":617,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3784:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"3780:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3780:19:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":620,"nodeType":"ExpressionStatement","src":"3780:19:6"}]},"id":622,"implemented":true,"kind":"function","modifiers":[],"name":"evaluate_l0_at_point","nameLocation":"3273:20:6","nodeType":"FunctionDefinition","parameters":{"id":550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":546,"mutability":"mutable","name":"domain_size","nameLocation":"3302:11:6","nodeType":"VariableDeclaration","scope":622,"src":"3294:19:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":545,"name":"uint256","nodeType":"ElementaryTypeName","src":"3294:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":549,"mutability":"mutable","name":"at","nameLocation":"3339:2:6","nodeType":"VariableDeclaration","scope":622,"src":"3315:26:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":548,"nodeType":"UserDefinedTypeName","pathNode":{"id":547,"name":"PairingsBn254.Fr","nameLocations":["3315:13:6","3329:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"3315:16:6"},"referencedDeclaration":6030,"src":"3315:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"3293:49:6"},"returnParameters":{"id":554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":553,"mutability":"mutable","name":"num","nameLocation":"3414:3:6","nodeType":"VariableDeclaration","scope":622,"src":"3390:27:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":552,"nodeType":"UserDefinedTypeName","pathNode":{"id":551,"name":"PairingsBn254.Fr","nameLocations":["3390:13:6","3404:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"3390:16:6"},"referencedDeclaration":6030,"src":"3390:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"3389:29:6"},"scope":3732,"src":"3264:542:6","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":727,"nodeType":"Block","src":"4046:638:6","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":639,"name":"poly_num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":624,"src":"4117:8:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":640,"name":"domain_size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":626,"src":"4128:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4117:22:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":638,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4109:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4109:31:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":643,"nodeType":"ExpressionStatement","src":"4109:31:6"},{"assignments":[648],"declarations":[{"constant":false,"id":648,"mutability":"mutable","name":"one","nameLocation":"4174:3:6","nodeType":"VariableDeclaration","scope":727,"src":"4150:27:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":647,"nodeType":"UserDefinedTypeName","pathNode":{"id":646,"name":"PairingsBn254.Fr","nameLocations":["4150:13:6","4164:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"4150:16:6"},"referencedDeclaration":6030,"src":"4150:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":653,"initialValue":{"arguments":[{"hexValue":"31","id":651,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4201:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":649,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"4180:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4194:6:6","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"4180:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4180:23:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"4150:53:6"},{"assignments":[658],"declarations":[{"constant":false,"id":658,"mutability":"mutable","name":"omega_power","nameLocation":"4237:11:6","nodeType":"VariableDeclaration","scope":727,"src":"4213:35:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":657,"nodeType":"UserDefinedTypeName","pathNode":{"id":656,"name":"PairingsBn254.Fr","nameLocations":["4213:13:6","4227:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"4213:16:6"},"referencedDeclaration":6030,"src":"4213:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":663,"initialValue":{"arguments":[{"id":661,"name":"poly_num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":624,"src":"4261:8:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":659,"name":"omega","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":629,"src":"4251:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":660,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4257:3:6","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":6223,"src":"4251:9:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Fr_$6030_memory_ptr_$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,uint256) view returns (struct PairingsBn254.Fr memory)"}},"id":662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4251:19:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"4213:57:6"},{"expression":{"id":669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":664,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":636,"src":"4280:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":667,"name":"domain_size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":626,"src":"4293:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":665,"name":"at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":632,"src":"4286:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":666,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4289:3:6","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":6223,"src":"4286:6:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Fr_$6030_memory_ptr_$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,uint256) view returns (struct PairingsBn254.Fr memory)"}},"id":668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4286:19:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"4280:25:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":670,"nodeType":"ExpressionStatement","src":"4280:25:6"},{"expression":{"arguments":[{"id":674,"name":"one","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":648,"src":"4330:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":671,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":636,"src":"4315:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":673,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4319:10:6","memberName":"sub_assign","nodeType":"MemberAccess","referencedDeclaration":6153,"src":"4315:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4315:19:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":676,"nodeType":"ExpressionStatement","src":"4315:19:6"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":678,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":636,"src":"4352:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":679,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4356:5:6","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"4352:9:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":680,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4365:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4352:14:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":677,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4344:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4344:23:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":683,"nodeType":"ExpressionStatement","src":"4344:23:6"},{"expression":{"arguments":[{"id":687,"name":"omega_power","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":658,"src":"4446:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":684,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":636,"src":"4431:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":686,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4435:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"4431:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4431:27:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":689,"nodeType":"ExpressionStatement","src":"4431:27:6"},{"assignments":[694],"declarations":[{"constant":false,"id":694,"mutability":"mutable","name":"den","nameLocation":"4493:3:6","nodeType":"VariableDeclaration","scope":727,"src":"4469:27:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":693,"nodeType":"UserDefinedTypeName","pathNode":{"id":692,"name":"PairingsBn254.Fr","nameLocations":["4469:13:6","4483:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"4469:16:6"},"referencedDeclaration":6030,"src":"4469:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":699,"initialValue":{"arguments":[{"id":697,"name":"at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":632,"src":"4518:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":695,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"4499:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4513:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"4499:18:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4499:22:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"4469:52:6"},{"expression":{"arguments":[{"id":703,"name":"omega_power","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":658,"src":"4546:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":700,"name":"den","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":694,"src":"4531:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":702,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4535:10:6","memberName":"sub_assign","nodeType":"MemberAccess","referencedDeclaration":6153,"src":"4531:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4531:27:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":705,"nodeType":"ExpressionStatement","src":"4531:27:6"},{"expression":{"arguments":[{"arguments":[{"id":711,"name":"domain_size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":626,"src":"4604:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":709,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"4583:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4597:6:6","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"4583:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4583:33:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":706,"name":"den","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":694,"src":"4568:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":708,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4572:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"4568:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4568:49:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":714,"nodeType":"ExpressionStatement","src":"4568:49:6"},{"expression":{"id":719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":715,"name":"den","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":694,"src":"4628:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":716,"name":"den","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":694,"src":"4634:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":717,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4638:7:6","memberName":"inverse","nodeType":"MemberAccess","referencedDeclaration":6107,"src":"4634:11:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.Fr memory)"}},"id":718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4634:13:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"4628:19:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":720,"nodeType":"ExpressionStatement","src":"4628:19:6"},{"expression":{"arguments":[{"id":724,"name":"den","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":694,"src":"4673:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":721,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":636,"src":"4658:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":723,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4662:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"4658:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4658:19:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":726,"nodeType":"ExpressionStatement","src":"4658:19:6"}]},"id":728,"implemented":true,"kind":"function","modifiers":[],"name":"evaluate_lagrange_poly_out_of_domain","nameLocation":"3821:36:6","nodeType":"FunctionDefinition","parameters":{"id":633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":624,"mutability":"mutable","name":"poly_num","nameLocation":"3875:8:6","nodeType":"VariableDeclaration","scope":728,"src":"3867:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":623,"name":"uint256","nodeType":"ElementaryTypeName","src":"3867:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":626,"mutability":"mutable","name":"domain_size","nameLocation":"3901:11:6","nodeType":"VariableDeclaration","scope":728,"src":"3893:19:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":625,"name":"uint256","nodeType":"ElementaryTypeName","src":"3893:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":629,"mutability":"mutable","name":"omega","nameLocation":"3946:5:6","nodeType":"VariableDeclaration","scope":728,"src":"3922:29:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":628,"nodeType":"UserDefinedTypeName","pathNode":{"id":627,"name":"PairingsBn254.Fr","nameLocations":["3922:13:6","3936:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"3922:16:6"},"referencedDeclaration":6030,"src":"3922:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":632,"mutability":"mutable","name":"at","nameLocation":"3985:2:6","nodeType":"VariableDeclaration","scope":728,"src":"3961:26:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":631,"nodeType":"UserDefinedTypeName","pathNode":{"id":630,"name":"PairingsBn254.Fr","nameLocations":["3961:13:6","3975:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"3961:16:6"},"referencedDeclaration":6030,"src":"3961:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"3857:136:6"},"returnParameters":{"id":637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":636,"mutability":"mutable","name":"res","nameLocation":"4041:3:6","nodeType":"VariableDeclaration","scope":728,"src":"4017:27:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":635,"nodeType":"UserDefinedTypeName","pathNode":{"id":634,"name":"PairingsBn254.Fr","nameLocations":["4017:13:6","4031:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"4017:16:6"},"referencedDeclaration":6030,"src":"4017:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"4016:29:6"},"scope":3732,"src":"3812:872:6","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":755,"nodeType":"Block","src":"4847:91:6","statements":[{"expression":{"id":744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":739,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":737,"src":"4857:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":742,"name":"domain_size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":730,"src":"4870:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":740,"name":"at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":733,"src":"4863:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":741,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4866:3:6","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":6223,"src":"4863:6:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Fr_$6030_memory_ptr_$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,uint256) view returns (struct PairingsBn254.Fr memory)"}},"id":743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4863:19:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"4857:25:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":745,"nodeType":"ExpressionStatement","src":"4857:25:6"},{"expression":{"arguments":[{"arguments":[{"hexValue":"31","id":751,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4928:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":749,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"4907:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4921:6:6","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"4907:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4907:23:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":746,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":737,"src":"4892:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":748,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4896:10:6","memberName":"sub_assign","nodeType":"MemberAccess","referencedDeclaration":6153,"src":"4892:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4892:39:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":754,"nodeType":"ExpressionStatement","src":"4892:39:6"}]},"id":756,"implemented":true,"kind":"function","modifiers":[],"name":"evaluate_vanishing","nameLocation":"4699:18:6","nodeType":"FunctionDefinition","parameters":{"id":734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":730,"mutability":"mutable","name":"domain_size","nameLocation":"4726:11:6","nodeType":"VariableDeclaration","scope":756,"src":"4718:19:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":729,"name":"uint256","nodeType":"ElementaryTypeName","src":"4718:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":733,"mutability":"mutable","name":"at","nameLocation":"4763:2:6","nodeType":"VariableDeclaration","scope":756,"src":"4739:26:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":732,"nodeType":"UserDefinedTypeName","pathNode":{"id":731,"name":"PairingsBn254.Fr","nameLocations":["4739:13:6","4753:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"4739:16:6"},"referencedDeclaration":6030,"src":"4739:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"4717:49:6"},"returnParameters":{"id":738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":737,"mutability":"mutable","name":"res","nameLocation":"4838:3:6","nodeType":"VariableDeclaration","scope":756,"src":"4814:27:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":736,"nodeType":"UserDefinedTypeName","pathNode":{"id":735,"name":"PairingsBn254.Fr","nameLocations":["4814:13:6","4828:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"4814:16:6"},"referencedDeclaration":6030,"src":"4814:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"4813:29:6"},"scope":3732,"src":"4690:248:6","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1144,"nodeType":"Block","src":"5108:2936:6","statements":[{"assignments":[772],"declarations":[{"constant":false,"id":772,"mutability":"mutable","name":"transcript","nameLocation":"5150:10:6","nodeType":"VariableDeclaration","scope":1144,"src":"5118:42:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript"},"typeName":{"id":771,"nodeType":"UserDefinedTypeName","pathNode":{"id":770,"name":"TranscriptLib.Transcript","nameLocations":["5118:13:6","5132:10:6"],"nodeType":"IdentifierPath","referencedDeclaration":7259,"src":"5118:24:6"},"referencedDeclaration":7259,"src":"5118:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_storage_ptr","typeString":"struct TranscriptLib.Transcript"}},"visibility":"internal"}],"id":776,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":773,"name":"TranscriptLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7416,"src":"5163:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TranscriptLib_$7416_$","typeString":"type(library TranscriptLib)"}},"id":774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5177:14:6","memberName":"new_transcript","nodeType":"MemberAccess","referencedDeclaration":7290,"src":"5163:28:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function () pure returns (struct TranscriptLib.Transcript memory)"}},"id":775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5163:30:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"nodeType":"VariableDeclarationStatement","src":"5118:75:6"},{"body":{"id":800,"nodeType":"Block","src":"5265:75:6","statements":[{"expression":{"arguments":[{"baseExpression":{"expression":{"id":794,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"5307:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":795,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5313:12:6","memberName":"input_values","nodeType":"MemberAccess","referencedDeclaration":409,"src":"5307:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":797,"indexExpression":{"id":796,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":778,"src":"5326:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5307:21:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":791,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"5279:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":793,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5290:16:6","memberName":"update_with_u256","nodeType":"MemberAccess","referencedDeclaration":7334,"src":"5279:27:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,uint256) pure"}},"id":798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5279:50:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":799,"nodeType":"ExpressionStatement","src":"5279:50:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":781,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":778,"src":"5224:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":782,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":762,"src":"5228:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":783,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5231:10:6","memberName":"num_inputs","nodeType":"MemberAccess","referencedDeclaration":345,"src":"5228:13:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5224:17:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":801,"initializationExpression":{"assignments":[778],"declarations":[{"constant":false,"id":778,"mutability":"mutable","name":"i","nameLocation":"5217:1:6","nodeType":"VariableDeclaration","scope":801,"src":"5209:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":777,"name":"uint256","nodeType":"ElementaryTypeName","src":"5209:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":780,"initialValue":{"hexValue":"30","id":779,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5221:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5209:13:6"},"loopExpression":{"expression":{"id":789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":785,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":778,"src":"5243:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":786,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":778,"src":"5247:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5249:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"5247:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5247:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5243:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":790,"nodeType":"ExpressionStatement","src":"5243:20:6"},"nodeType":"ForStatement","src":"5204:136:6"},{"body":{"id":824,"nodeType":"Block","src":"5409:84:6","statements":[{"expression":{"arguments":[{"baseExpression":{"expression":{"id":818,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"5449:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":819,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5455:23:6","memberName":"state_polys_commitments","nodeType":"MemberAccess","referencedDeclaration":414,"src":"5449:29:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":821,"indexExpression":{"id":820,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"5479:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5449:32:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":815,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"5423:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":817,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5434:14:6","memberName":"update_with_g1","nodeType":"MemberAccess","referencedDeclaration":7372,"src":"5423:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.G1Point memory) pure"}},"id":822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5423:59:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":823,"nodeType":"ExpressionStatement","src":"5423:59:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":806,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"5370:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":807,"name":"STATE_WIDTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"5374:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5370:15:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":825,"initializationExpression":{"assignments":[803],"declarations":[{"constant":false,"id":803,"mutability":"mutable","name":"i","nameLocation":"5363:1:6","nodeType":"VariableDeclaration","scope":825,"src":"5355:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":802,"name":"uint256","nodeType":"ElementaryTypeName","src":"5355:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":805,"initialValue":{"hexValue":"30","id":804,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5367:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5355:13:6"},"loopExpression":{"expression":{"id":813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":809,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"5387:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":810,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"5391:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5393:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"5391:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5391:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5387:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":814,"nodeType":"ExpressionStatement","src":"5387:20:6"},"nodeType":"ForStatement","src":"5350:143:6"},{"expression":{"id":832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":826,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":766,"src":"5503:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":828,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5509:3:6","memberName":"eta","nodeType":"MemberAccess","referencedDeclaration":504,"src":"5503:9:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":829,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"5515:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":830,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5526:13:6","memberName":"get_challenge","nodeType":"MemberAccess","referencedDeclaration":7415,"src":"5515:24:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5515:26:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"5503:38:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":833,"nodeType":"ExpressionStatement","src":"5503:38:6"},{"expression":{"arguments":[{"expression":{"id":837,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"5577:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":838,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5583:24:6","memberName":"lookup_s_poly_commitment","nodeType":"MemberAccess","referencedDeclaration":456,"src":"5577:30:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":834,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"5551:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":836,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5562:14:6","memberName":"update_with_g1","nodeType":"MemberAccess","referencedDeclaration":7372,"src":"5551:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.G1Point memory) pure"}},"id":839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5551:57:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":840,"nodeType":"ExpressionStatement","src":"5551:57:6"},{"expression":{"id":847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":841,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":766,"src":"5619:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":843,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5625:4:6","memberName":"beta","nodeType":"MemberAccess","referencedDeclaration":493,"src":"5619:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":844,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"5632:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":845,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5643:13:6","memberName":"get_challenge","nodeType":"MemberAccess","referencedDeclaration":7415,"src":"5632:24:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":846,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5632:26:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"5619:39:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":848,"nodeType":"ExpressionStatement","src":"5619:39:6"},{"expression":{"id":855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":849,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":766,"src":"5668:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":851,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5674:5:6","memberName":"gamma","nodeType":"MemberAccess","referencedDeclaration":496,"src":"5668:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":852,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"5682:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":853,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5693:13:6","memberName":"get_challenge","nodeType":"MemberAccess","referencedDeclaration":7415,"src":"5682:24:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5682:26:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"5668:40:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":856,"nodeType":"ExpressionStatement","src":"5668:40:6"},{"expression":{"arguments":[{"expression":{"id":860,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"5745:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":861,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5751:41:6","memberName":"copy_permutation_grand_product_commitment","nodeType":"MemberAccess","referencedDeclaration":417,"src":"5745:47:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":857,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"5719:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":859,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5730:14:6","memberName":"update_with_g1","nodeType":"MemberAccess","referencedDeclaration":7372,"src":"5719:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.G1Point memory) pure"}},"id":862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5719:74:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":863,"nodeType":"ExpressionStatement","src":"5719:74:6"},{"expression":{"id":870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":864,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":766,"src":"5803:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":866,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5809:11:6","memberName":"beta_lookup","nodeType":"MemberAccess","referencedDeclaration":507,"src":"5803:17:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":867,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"5823:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":868,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5834:13:6","memberName":"get_challenge","nodeType":"MemberAccess","referencedDeclaration":7415,"src":"5823:24:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5823:26:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"5803:46:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":871,"nodeType":"ExpressionStatement","src":"5803:46:6"},{"expression":{"id":878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":872,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":766,"src":"5859:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":874,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5865:12:6","memberName":"gamma_lookup","nodeType":"MemberAccess","referencedDeclaration":510,"src":"5859:18:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":875,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"5880:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":876,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5891:13:6","memberName":"get_challenge","nodeType":"MemberAccess","referencedDeclaration":7415,"src":"5880:24:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5880:26:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"5859:47:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":879,"nodeType":"ExpressionStatement","src":"5859:47:6"},{"expression":{"arguments":[{"expression":{"id":883,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"5942:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":884,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5948:31:6","memberName":"lookup_grand_product_commitment","nodeType":"MemberAccess","referencedDeclaration":459,"src":"5942:37:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":880,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"5916:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":882,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5927:14:6","memberName":"update_with_g1","nodeType":"MemberAccess","referencedDeclaration":7372,"src":"5916:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.G1Point memory) pure"}},"id":885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5916:64:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":886,"nodeType":"ExpressionStatement","src":"5916:64:6"},{"expression":{"id":893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":887,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":766,"src":"5990:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":889,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5996:5:6","memberName":"alpha","nodeType":"MemberAccess","referencedDeclaration":490,"src":"5990:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":890,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"6004:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":891,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6015:13:6","memberName":"get_challenge","nodeType":"MemberAccess","referencedDeclaration":7415,"src":"6004:24:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6004:26:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"5990:40:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":894,"nodeType":"ExpressionStatement","src":"5990:40:6"},{"body":{"id":919,"nodeType":"Block","src":"6133:92:6","statements":[{"expression":{"arguments":[{"baseExpression":{"expression":{"id":913,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"6173:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":914,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6179:31:6","memberName":"quotient_poly_parts_commitments","nodeType":"MemberAccess","referencedDeclaration":422,"src":"6173:37:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":916,"indexExpression":{"id":915,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":896,"src":"6211:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6173:40:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":910,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"6147:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":912,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6158:14:6","memberName":"update_with_g1","nodeType":"MemberAccess","referencedDeclaration":7372,"src":"6147:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.G1Point memory) pure"}},"id":917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6147:67:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":918,"nodeType":"ExpressionStatement","src":"6147:67:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":899,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":896,"src":"6061:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":900,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"6065:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":901,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6071:31:6","memberName":"quotient_poly_parts_commitments","nodeType":"MemberAccess","referencedDeclaration":422,"src":"6065:37:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6103:6:6","memberName":"length","nodeType":"MemberAccess","src":"6065:44:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6061:48:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":920,"initializationExpression":{"assignments":[896],"declarations":[{"constant":false,"id":896,"mutability":"mutable","name":"i","nameLocation":"6054:1:6","nodeType":"VariableDeclaration","scope":920,"src":"6046:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":895,"name":"uint256","nodeType":"ElementaryTypeName","src":"6046:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":898,"initialValue":{"hexValue":"30","id":897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6058:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6046:13:6"},"loopExpression":{"expression":{"id":908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":904,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":896,"src":"6111:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":905,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":896,"src":"6115:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6117:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"6115:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6115:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6111:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":909,"nodeType":"ExpressionStatement","src":"6111:20:6"},"nodeType":"ForStatement","src":"6041:184:6"},{"expression":{"id":927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":921,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":766,"src":"6234:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":923,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6240:1:6","memberName":"z","nodeType":"MemberAccess","referencedDeclaration":525,"src":"6234:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":924,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"6244:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":925,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6255:13:6","memberName":"get_challenge","nodeType":"MemberAccess","referencedDeclaration":7415,"src":"6244:24:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6244:26:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"6234:36:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":928,"nodeType":"ExpressionStatement","src":"6234:36:6"},{"expression":{"arguments":[{"expression":{"id":932,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"6307:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":933,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6313:26:6","memberName":"quotient_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":450,"src":"6307:32:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":929,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"6281:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":931,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6292:14:6","memberName":"update_with_fr","nodeType":"MemberAccess","referencedDeclaration":7350,"src":"6281:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.Fr memory) pure"}},"id":934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6281:59:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":935,"nodeType":"ExpressionStatement","src":"6281:59:6"},{"body":{"id":960,"nodeType":"Block","src":"6437:86:6","statements":[{"expression":{"arguments":[{"baseExpression":{"expression":{"id":954,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"6477:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":955,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6483:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"6477:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":957,"indexExpression":{"id":956,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":937,"src":"6509:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6477:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":951,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"6451:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":953,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6462:14:6","memberName":"update_with_fr","nodeType":"MemberAccess","referencedDeclaration":7350,"src":"6451:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.Fr memory) pure"}},"id":958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6451:61:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":959,"nodeType":"ExpressionStatement","src":"6451:61:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":940,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":937,"src":"6371:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":941,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"6375:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":942,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6381:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"6375:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6407:6:6","memberName":"length","nodeType":"MemberAccess","src":"6375:38:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6371:42:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":961,"initializationExpression":{"assignments":[937],"declarations":[{"constant":false,"id":937,"mutability":"mutable","name":"i","nameLocation":"6364:1:6","nodeType":"VariableDeclaration","scope":961,"src":"6356:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":936,"name":"uint256","nodeType":"ElementaryTypeName","src":"6356:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":939,"initialValue":{"hexValue":"30","id":938,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6368:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6356:13:6"},"loopExpression":{"expression":{"id":949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":945,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":937,"src":"6415:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":946,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":937,"src":"6419:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6421:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"6419:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6419:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6415:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":950,"nodeType":"ExpressionStatement","src":"6415:20:6"},"nodeType":"ForStatement","src":"6351:172:6"},{"body":{"id":986,"nodeType":"Block","src":"6625:92:6","statements":[{"expression":{"arguments":[{"baseExpression":{"expression":{"id":980,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"6665:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":981,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6671:31:6","memberName":"state_polys_openings_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":432,"src":"6665:37:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$1_memory_ptr","typeString":"struct PairingsBn254.Fr memory[1] memory"}},"id":983,"indexExpression":{"id":982,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":963,"src":"6703:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6665:40:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":977,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"6639:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":979,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6650:14:6","memberName":"update_with_fr","nodeType":"MemberAccess","referencedDeclaration":7350,"src":"6639:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.Fr memory) pure"}},"id":984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6639:67:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":985,"nodeType":"ExpressionStatement","src":"6639:67:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":966,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":963,"src":"6553:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":967,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"6557:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":968,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6563:31:6","memberName":"state_polys_openings_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":432,"src":"6557:37:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$1_memory_ptr","typeString":"struct PairingsBn254.Fr memory[1] memory"}},"id":969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6595:6:6","memberName":"length","nodeType":"MemberAccess","src":"6557:44:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6553:48:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":987,"initializationExpression":{"assignments":[963],"declarations":[{"constant":false,"id":963,"mutability":"mutable","name":"i","nameLocation":"6546:1:6","nodeType":"VariableDeclaration","scope":987,"src":"6538:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":962,"name":"uint256","nodeType":"ElementaryTypeName","src":"6538:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":965,"initialValue":{"hexValue":"30","id":964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6550:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6538:13:6"},"loopExpression":{"expression":{"id":975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":971,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":963,"src":"6603:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":972,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":963,"src":"6607:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6609:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"6607:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6607:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6603:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":976,"nodeType":"ExpressionStatement","src":"6603:20:6"},"nodeType":"ForStatement","src":"6533:184:6"},{"body":{"id":1012,"nodeType":"Block","src":"6815:89:6","statements":[{"expression":{"arguments":[{"baseExpression":{"expression":{"id":1006,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"6855:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1007,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6861:28:6","memberName":"gate_selectors_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":437,"src":"6855:34:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$1_memory_ptr","typeString":"struct PairingsBn254.Fr memory[1] memory"}},"id":1009,"indexExpression":{"id":1008,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":989,"src":"6890:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6855:37:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1003,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"6829:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":1005,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6840:14:6","memberName":"update_with_fr","nodeType":"MemberAccess","referencedDeclaration":7350,"src":"6829:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.Fr memory) pure"}},"id":1010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6829:64:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1011,"nodeType":"ExpressionStatement","src":"6829:64:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":992,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":989,"src":"6746:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":993,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"6750:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":994,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6756:28:6","memberName":"gate_selectors_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":437,"src":"6750:34:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$1_memory_ptr","typeString":"struct PairingsBn254.Fr memory[1] memory"}},"id":995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6785:6:6","memberName":"length","nodeType":"MemberAccess","src":"6750:41:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6746:45:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1013,"initializationExpression":{"assignments":[989],"declarations":[{"constant":false,"id":989,"mutability":"mutable","name":"i","nameLocation":"6739:1:6","nodeType":"VariableDeclaration","scope":1013,"src":"6731:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":988,"name":"uint256","nodeType":"ElementaryTypeName","src":"6731:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":991,"initialValue":{"hexValue":"30","id":990,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6743:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6731:13:6"},"loopExpression":{"expression":{"id":1001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":997,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":989,"src":"6793:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":998,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":989,"src":"6797:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6799:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"6797:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":1000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6797:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6793:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1002,"nodeType":"ExpressionStatement","src":"6793:20:6"},"nodeType":"ForStatement","src":"6726:178:6"},{"body":{"id":1038,"nodeType":"Block","src":"7010:97:6","statements":[{"expression":{"arguments":[{"baseExpression":{"expression":{"id":1032,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"7050:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1033,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7056:36:6","memberName":"copy_permutation_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":444,"src":"7050:42:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$3_memory_ptr","typeString":"struct PairingsBn254.Fr memory[3] memory"}},"id":1035,"indexExpression":{"id":1034,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1015,"src":"7093:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7050:45:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1029,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"7024:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":1031,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7035:14:6","memberName":"update_with_fr","nodeType":"MemberAccess","referencedDeclaration":7350,"src":"7024:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.Fr memory) pure"}},"id":1036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7024:72:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1037,"nodeType":"ExpressionStatement","src":"7024:72:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1018,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1015,"src":"6933:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":1019,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"6937:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1020,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6943:36:6","memberName":"copy_permutation_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":444,"src":"6937:42:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$3_memory_ptr","typeString":"struct PairingsBn254.Fr memory[3] memory"}},"id":1021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6980:6:6","memberName":"length","nodeType":"MemberAccess","src":"6937:49:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6933:53:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1039,"initializationExpression":{"assignments":[1015],"declarations":[{"constant":false,"id":1015,"mutability":"mutable","name":"i","nameLocation":"6926:1:6","nodeType":"VariableDeclaration","scope":1039,"src":"6918:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1014,"name":"uint256","nodeType":"ElementaryTypeName","src":"6918:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1017,"initialValue":{"hexValue":"30","id":1016,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6930:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6918:13:6"},"loopExpression":{"expression":{"id":1027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1023,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1015,"src":"6988:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1024,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1015,"src":"6992:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6994:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"6992:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":1026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6992:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6988:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1028,"nodeType":"ExpressionStatement","src":"6988:20:6"},"nodeType":"ForStatement","src":"6913:194:6"},{"expression":{"id":1047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1040,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":766,"src":"7117:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1042,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"7123:7:6","memberName":"z_omega","nodeType":"MemberAccess","referencedDeclaration":528,"src":"7117:13:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":1043,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":766,"src":"7133:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1044,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7139:1:6","memberName":"z","nodeType":"MemberAccess","referencedDeclaration":525,"src":"7133:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1045,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7141:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"7133:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":1046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7133:14:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"7117:30:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1048,"nodeType":"ExpressionStatement","src":"7117:30:6"},{"expression":{"arguments":[{"expression":{"id":1054,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":762,"src":"7182:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":1055,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7185:5:6","memberName":"omega","nodeType":"MemberAccess","referencedDeclaration":348,"src":"7182:8:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"expression":{"id":1049,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":766,"src":"7157:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1052,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7163:7:6","memberName":"z_omega","nodeType":"MemberAccess","referencedDeclaration":528,"src":"7157:13:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1053,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7171:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"7157:24:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7157:34:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1057,"nodeType":"ExpressionStatement","src":"7157:34:6"},{"expression":{"arguments":[{"expression":{"id":1061,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"7228:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1062,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7234:49:6","memberName":"copy_permutation_grand_product_opening_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":447,"src":"7228:55:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1058,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"7202:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":1060,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7213:14:6","memberName":"update_with_fr","nodeType":"MemberAccess","referencedDeclaration":7350,"src":"7202:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.Fr memory) pure"}},"id":1063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7202:82:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1064,"nodeType":"ExpressionStatement","src":"7202:82:6"},{"expression":{"arguments":[{"expression":{"id":1068,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"7321:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1069,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7327:26:6","memberName":"lookup_t_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":468,"src":"7321:32:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1065,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"7295:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":1067,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7306:14:6","memberName":"update_with_fr","nodeType":"MemberAccess","referencedDeclaration":7350,"src":"7295:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.Fr memory) pure"}},"id":1070,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7295:59:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1071,"nodeType":"ExpressionStatement","src":"7295:59:6"},{"expression":{"arguments":[{"expression":{"id":1075,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"7390:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1076,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7396:33:6","memberName":"lookup_selector_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":474,"src":"7390:39:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1072,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"7364:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":1074,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7375:14:6","memberName":"update_with_fr","nodeType":"MemberAccess","referencedDeclaration":7350,"src":"7364:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.Fr memory) pure"}},"id":1077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7364:66:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1078,"nodeType":"ExpressionStatement","src":"7364:66:6"},{"expression":{"arguments":[{"expression":{"id":1082,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"7466:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1083,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7472:35:6","memberName":"lookup_table_type_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":477,"src":"7466:41:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1079,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"7440:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":1081,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7451:14:6","memberName":"update_with_fr","nodeType":"MemberAccess","referencedDeclaration":7350,"src":"7440:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.Fr memory) pure"}},"id":1084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7440:68:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1085,"nodeType":"ExpressionStatement","src":"7440:68:6"},{"expression":{"arguments":[{"expression":{"id":1089,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"7544:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1090,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7550:32:6","memberName":"lookup_s_poly_opening_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":462,"src":"7544:38:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1086,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"7518:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":1088,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7529:14:6","memberName":"update_with_fr","nodeType":"MemberAccess","referencedDeclaration":7350,"src":"7518:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.Fr memory) pure"}},"id":1091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7518:65:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1092,"nodeType":"ExpressionStatement","src":"7518:65:6"},{"expression":{"arguments":[{"expression":{"id":1096,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"7619:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1097,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7625:39:6","memberName":"lookup_grand_product_opening_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":465,"src":"7619:45:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1093,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"7593:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":1095,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7604:14:6","memberName":"update_with_fr","nodeType":"MemberAccess","referencedDeclaration":7350,"src":"7593:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.Fr memory) pure"}},"id":1098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7593:72:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1099,"nodeType":"ExpressionStatement","src":"7593:72:6"},{"expression":{"arguments":[{"expression":{"id":1103,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"7701:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1104,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7707:32:6","memberName":"lookup_t_poly_opening_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":471,"src":"7701:38:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1100,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"7675:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":1102,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7686:14:6","memberName":"update_with_fr","nodeType":"MemberAccess","referencedDeclaration":7350,"src":"7675:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.Fr memory) pure"}},"id":1105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7675:65:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1106,"nodeType":"ExpressionStatement","src":"7675:65:6"},{"expression":{"arguments":[{"expression":{"id":1110,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"7776:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1111,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7782:31:6","memberName":"linearization_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":453,"src":"7776:37:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1107,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"7750:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":1109,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7761:14:6","memberName":"update_with_fr","nodeType":"MemberAccess","referencedDeclaration":7350,"src":"7750:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.Fr memory) pure"}},"id":1112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7750:64:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1113,"nodeType":"ExpressionStatement","src":"7750:64:6"},{"expression":{"id":1120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1114,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":766,"src":"7825:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1116,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"7831:1:6","memberName":"v","nodeType":"MemberAccess","referencedDeclaration":519,"src":"7825:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1117,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"7835:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":1118,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7846:13:6","memberName":"get_challenge","nodeType":"MemberAccess","referencedDeclaration":7415,"src":"7835:24:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":1119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7835:26:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"7825:36:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1121,"nodeType":"ExpressionStatement","src":"7825:36:6"},{"expression":{"arguments":[{"expression":{"id":1125,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"7898:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1126,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7904:18:6","memberName":"opening_proof_at_z","nodeType":"MemberAccess","referencedDeclaration":480,"src":"7898:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":1122,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"7872:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":1124,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7883:14:6","memberName":"update_with_g1","nodeType":"MemberAccess","referencedDeclaration":7372,"src":"7872:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.G1Point memory) pure"}},"id":1127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7872:51:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1128,"nodeType":"ExpressionStatement","src":"7872:51:6"},{"expression":{"arguments":[{"expression":{"id":1132,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"7959:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1133,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7965:24:6","memberName":"opening_proof_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":483,"src":"7959:30:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":1129,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"7933:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":1131,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7944:14:6","memberName":"update_with_g1","nodeType":"MemberAccess","referencedDeclaration":7372,"src":"7933:25:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory,struct PairingsBn254.G1Point memory) pure"}},"id":1134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7933:57:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1135,"nodeType":"ExpressionStatement","src":"7933:57:6"},{"expression":{"id":1142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1136,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":766,"src":"8001:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1138,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8007:1:6","memberName":"u","nodeType":"MemberAccess","referencedDeclaration":522,"src":"8001:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1139,"name":"transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":772,"src":"8011:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":1140,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8022:13:6","memberName":"get_challenge","nodeType":"MemberAccess","referencedDeclaration":7415,"src":"8011:24:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Transcript_$7259_memory_ptr_$","typeString":"function (struct TranscriptLib.Transcript memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":1141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8011:26:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"8001:36:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1143,"nodeType":"ExpressionStatement","src":"8001:36:6"}]},"id":1145,"implemented":true,"kind":"function","modifiers":[],"name":"initialize_transcript","nameLocation":"4953:21:6","nodeType":"FunctionDefinition","parameters":{"id":763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":759,"mutability":"mutable","name":"proof","nameLocation":"4988:5:6","nodeType":"VariableDeclaration","scope":1145,"src":"4975:18:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"},"typeName":{"id":758,"nodeType":"UserDefinedTypeName","pathNode":{"id":757,"name":"Proof","nameLocations":["4975:5:6"],"nodeType":"IdentifierPath","referencedDeclaration":484,"src":"4975:5:6"},"referencedDeclaration":484,"src":"4975:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"}},"visibility":"internal"},{"constant":false,"id":762,"mutability":"mutable","name":"vk","nameLocation":"5018:2:6","nodeType":"VariableDeclaration","scope":1145,"src":"4995:25:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey"},"typeName":{"id":761,"nodeType":"UserDefinedTypeName","pathNode":{"id":760,"name":"VerificationKey","nameLocations":["4995:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":387,"src":"4995:15:6"},"referencedDeclaration":387,"src":"4995:15:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_storage_ptr","typeString":"struct VerificationKey"}},"visibility":"internal"}],"src":"4974:47:6"},"returnParameters":{"id":767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":766,"mutability":"mutable","name":"state","nameLocation":"5097:5:6","nodeType":"VariableDeclaration","scope":1145,"src":"5069:33:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"},"typeName":{"id":765,"nodeType":"UserDefinedTypeName","pathNode":{"id":764,"name":"PartialVerifierState","nameLocations":["5069:20:6"],"nodeType":"IdentifierPath","referencedDeclaration":544,"src":"5069:20:6"},"referencedDeclaration":544,"src":"5069:20:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"}},"visibility":"internal"}],"src":"5068:35:6"},"scope":3732,"src":"4944:3100:6","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1225,"nodeType":"Block","src":"8199:427:6","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":1152,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1148,"src":"8217:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1153,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8223:5:6","memberName":"alpha","nodeType":"MemberAccess","referencedDeclaration":490,"src":"8217:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1154,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8229:5:6","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"8217:17:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":1155,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8238:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8217:22:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":1151,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8209:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":1157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8209:31:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1158,"nodeType":"ExpressionStatement","src":"8209:31:6"},{"expression":{"id":1168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":1159,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1148,"src":"8250:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1162,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8256:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"8250:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":1163,"indexExpression":{"hexValue":"30","id":1161,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8269:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8250:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"31","id":1166,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8295:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":1164,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"8274:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":1165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8288:6:6","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"8274:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":1167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8274:23:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"8250:47:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1169,"nodeType":"ExpressionStatement","src":"8250:47:6"},{"expression":{"id":1179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":1170,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1148,"src":"8307:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1173,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8313:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"8307:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":1174,"indexExpression":{"hexValue":"31","id":1172,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8326:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8307:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":1175,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1148,"src":"8331:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1176,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8337:5:6","memberName":"alpha","nodeType":"MemberAccess","referencedDeclaration":490,"src":"8331:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1177,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8343:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"8331:16:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":1178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8331:18:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"8307:42:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1180,"nodeType":"ExpressionStatement","src":"8307:42:6"},{"assignments":[1185],"declarations":[{"constant":false,"id":1185,"mutability":"mutable","name":"current_alpha","nameLocation":"8383:13:6","nodeType":"VariableDeclaration","scope":1225,"src":"8359:37:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":1184,"nodeType":"UserDefinedTypeName","pathNode":{"id":1183,"name":"PairingsBn254.Fr","nameLocations":["8359:13:6","8373:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"8359:16:6"},"referencedDeclaration":6030,"src":"8359:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":1190,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":1186,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1148,"src":"8399:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1187,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8405:5:6","memberName":"alpha","nodeType":"MemberAccess","referencedDeclaration":490,"src":"8399:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1188,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8411:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"8399:16:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":1189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8399:18:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"8359:58:6"},{"body":{"id":1223,"nodeType":"Block","src":"8500:120:6","statements":[{"expression":{"arguments":[{"expression":{"id":1209,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1148,"src":"8539:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1210,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8545:5:6","memberName":"alpha","nodeType":"MemberAccess","referencedDeclaration":490,"src":"8539:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1206,"name":"current_alpha","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1185,"src":"8514:13:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1208,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8528:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"8514:24:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8514:37:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1212,"nodeType":"ExpressionStatement","src":"8514:37:6"},{"expression":{"id":1221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":1213,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1148,"src":"8565:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1216,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8571:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"8565:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":1217,"indexExpression":{"id":1215,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1192,"src":"8584:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8565:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1218,"name":"current_alpha","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1185,"src":"8589:13:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1219,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8603:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"8589:18:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":1220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8589:20:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"8565:44:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1222,"nodeType":"ExpressionStatement","src":"8565:44:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1195,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1192,"src":"8447:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":1196,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1148,"src":"8451:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1197,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8457:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"8451:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":1198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8470:6:6","memberName":"length","nodeType":"MemberAccess","src":"8451:25:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8447:29:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1224,"initializationExpression":{"assignments":[1192],"declarations":[{"constant":false,"id":1192,"mutability":"mutable","name":"i","nameLocation":"8440:1:6","nodeType":"VariableDeclaration","scope":1224,"src":"8432:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1191,"name":"uint256","nodeType":"ElementaryTypeName","src":"8432:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1194,"initialValue":{"hexValue":"32","id":1193,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8444:1:6","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"VariableDeclarationStatement","src":"8432:13:6"},"loopExpression":{"expression":{"id":1204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1200,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1192,"src":"8478:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1201,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1192,"src":"8482:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8484:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"8482:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":1203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8482:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8478:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1205,"nodeType":"ExpressionStatement","src":"8478:20:6"},"nodeType":"ForStatement","src":"8427:193:6"}]},"functionSelector":"fec4e96e","id":1226,"implemented":true,"kind":"function","modifiers":[],"name":"compute_powers_of_alpha","nameLocation":"8128:23:6","nodeType":"FunctionDefinition","parameters":{"id":1149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1148,"mutability":"mutable","name":"state","nameLocation":"8180:5:6","nodeType":"VariableDeclaration","scope":1226,"src":"8152:33:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"},"typeName":{"id":1147,"nodeType":"UserDefinedTypeName","pathNode":{"id":1146,"name":"PartialVerifierState","nameLocations":["8152:20:6"],"nodeType":"IdentifierPath","referencedDeclaration":544,"src":"8152:20:6"},"referencedDeclaration":544,"src":"8152:20:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"}},"visibility":"internal"}],"src":"8151:35:6"},"returnParameters":{"id":1150,"nodeType":"ParameterList","parameters":[],"src":"8199:0:6"},"scope":3732,"src":"8119:507:6","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":1616,"nodeType":"Block","src":"8724:3496:6","statements":[{"assignments":[1239],"declarations":[{"constant":false,"id":1239,"mutability":"mutable","name":"state","nameLocation":"8858:5:6","nodeType":"VariableDeclaration","scope":1616,"src":"8830:33:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"},"typeName":{"id":1238,"nodeType":"UserDefinedTypeName","pathNode":{"id":1237,"name":"PartialVerifierState","nameLocations":["8830:20:6"],"nodeType":"IdentifierPath","referencedDeclaration":544,"src":"8830:20:6"},"referencedDeclaration":544,"src":"8830:20:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"}},"visibility":"internal"}],"id":1244,"initialValue":{"arguments":[{"id":1241,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1229,"src":"8888:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},{"id":1242,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"8895:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"},{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}],"id":1240,"name":"initialize_transcript","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1145,"src":"8866:21:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Proof_$484_memory_ptr_$_t_struct$_VerificationKey_$387_memory_ptr_$returns$_t_struct$_PartialVerifierState_$544_memory_ptr_$","typeString":"function (struct Plonk4VerifierWithAccessToDNext.Proof memory,struct VerificationKey memory) pure returns (struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory)"}},"id":1243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8866:32:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"nodeType":"VariableDeclarationStatement","src":"8830:68:6"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":1246,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"8939:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},{"id":1247,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1229,"src":"8943:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},{"id":1248,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1239,"src":"8950:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"},{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"},{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}],"id":1245,"name":"verify_quotient_evaluation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1947,"src":"8912:26:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_VerificationKey_$387_memory_ptr_$_t_struct$_Proof_$484_memory_ptr_$_t_struct$_PartialVerifierState_$544_memory_ptr_$returns$_t_bool_$","typeString":"function (struct VerificationKey memory,struct Plonk4VerifierWithAccessToDNext.Proof memory,struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory) view returns (bool)"}},"id":1249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8912:44:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":1250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8960:5:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"8912:53:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1255,"nodeType":"IfStatement","src":"8908:96:6","trueBody":{"id":1254,"nodeType":"Block","src":"8967:37:6","statements":[{"expression":{"hexValue":"66616c7365","id":1252,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8988:5:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":1236,"id":1253,"nodeType":"Return","src":"8981:12:6"}]}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":1257,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1229,"src":"9021:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1258,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9027:31:6","memberName":"state_polys_openings_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":432,"src":"9021:37:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$1_memory_ptr","typeString":"struct PairingsBn254.Fr memory[1] memory"}},"id":1259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9059:6:6","memberName":"length","nodeType":"MemberAccess","src":"9021:44:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":1260,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9069:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9021:49:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":1256,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9013:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":1262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9013:58:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1263,"nodeType":"ExpressionStatement","src":"9013:58:6"},{"assignments":[1268],"declarations":[{"constant":false,"id":1268,"mutability":"mutable","name":"quotient_result","nameLocation":"9119:15:6","nodeType":"VariableDeclaration","scope":1616,"src":"9090:44:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":1267,"nodeType":"UserDefinedTypeName","pathNode":{"id":1266,"name":"PairingsBn254.G1Point","nameLocations":["9090:13:6","9104:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"9090:21:6"},"referencedDeclaration":6027,"src":"9090:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"id":1275,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":1269,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1229,"src":"9137:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1270,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9143:31:6","memberName":"quotient_poly_parts_commitments","nodeType":"MemberAccess","referencedDeclaration":422,"src":"9137:37:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":1272,"indexExpression":{"hexValue":"30","id":1271,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9175:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9137:40:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":1273,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9178:7:6","memberName":"copy_g1","nodeType":"MemberAccess","referencedDeclaration":6387,"src":"9137:48:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_G1Point_$6027_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory) pure returns (struct PairingsBn254.G1Point memory)"}},"id":1274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9137:50:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"VariableDeclarationStatement","src":"9090:97:6"},{"id":1347,"nodeType":"Block","src":"9197:623:6","statements":[{"assignments":[1280],"declarations":[{"constant":false,"id":1280,"mutability":"mutable","name":"z_in_domain_size","nameLocation":"9262:16:6","nodeType":"VariableDeclaration","scope":1347,"src":"9238:40:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":1279,"nodeType":"UserDefinedTypeName","pathNode":{"id":1278,"name":"PairingsBn254.Fr","nameLocations":["9238:13:6","9252:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"9238:16:6"},"referencedDeclaration":6030,"src":"9238:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":1287,"initialValue":{"arguments":[{"expression":{"id":1284,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"9293:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":1285,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9296:11:6","memberName":"domain_size","nodeType":"MemberAccess","referencedDeclaration":343,"src":"9293:14:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":1281,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1239,"src":"9281:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1282,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9287:1:6","memberName":"z","nodeType":"MemberAccess","referencedDeclaration":525,"src":"9281:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1283,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9289:3:6","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":6223,"src":"9281:11:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Fr_$6030_memory_ptr_$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,uint256) view returns (struct PairingsBn254.Fr memory)"}},"id":1286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9281:27:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"9238:70:6"},{"assignments":[1292],"declarations":[{"constant":false,"id":1292,"mutability":"mutable","name":"current_z","nameLocation":"9346:9:6","nodeType":"VariableDeclaration","scope":1347,"src":"9322:33:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":1291,"nodeType":"UserDefinedTypeName","pathNode":{"id":1290,"name":"PairingsBn254.Fr","nameLocations":["9322:13:6","9336:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"9322:16:6"},"referencedDeclaration":6030,"src":"9322:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":1296,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1293,"name":"z_in_domain_size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1280,"src":"9358:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1294,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9375:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"9358:21:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":1295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9358:23:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"9322:59:6"},{"assignments":[1301],"declarations":[{"constant":false,"id":1301,"mutability":"mutable","name":"tp","nameLocation":"9424:2:6","nodeType":"VariableDeclaration","scope":1347,"src":"9395:31:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":1300,"nodeType":"UserDefinedTypeName","pathNode":{"id":1299,"name":"PairingsBn254.G1Point","nameLocations":["9395:13:6","9409:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"9395:21:6"},"referencedDeclaration":6027,"src":"9395:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"id":1302,"nodeType":"VariableDeclarationStatement","src":"9395:31:6"},{"body":{"id":1345,"nodeType":"Block","src":"9563:247:6","statements":[{"expression":{"id":1325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1318,"name":"tp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1301,"src":"9581:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":1319,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1229,"src":"9586:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1320,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9592:31:6","memberName":"quotient_poly_parts_commitments","nodeType":"MemberAccess","referencedDeclaration":422,"src":"9586:37:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":1322,"indexExpression":{"id":1321,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1304,"src":"9624:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9586:40:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":1323,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9627:7:6","memberName":"copy_g1","nodeType":"MemberAccess","referencedDeclaration":6387,"src":"9586:48:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_G1Point_$6027_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory) pure returns (struct PairingsBn254.G1Point memory)"}},"id":1324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9586:50:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"9581:55:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":1326,"nodeType":"ExpressionStatement","src":"9581:55:6"},{"expression":{"arguments":[{"id":1330,"name":"current_z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1292,"src":"9674:9:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1327,"name":"tp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1301,"src":"9654:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":1329,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9657:16:6","memberName":"point_mul_assign","nodeType":"MemberAccess","referencedDeclaration":6763,"src":"9654:19:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view"}},"id":1331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9654:30:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1332,"nodeType":"ExpressionStatement","src":"9654:30:6"},{"expression":{"arguments":[{"id":1336,"name":"tp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1301,"src":"9735:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":1333,"name":"quotient_result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1268,"src":"9702:15:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":1335,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9718:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"9702:32:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":1337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9702:36:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1338,"nodeType":"ExpressionStatement","src":"9702:36:6"},{"expression":{"arguments":[{"id":1342,"name":"z_in_domain_size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1280,"src":"9778:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1339,"name":"current_z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1292,"src":"9757:9:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1341,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9767:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"9757:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9757:38:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1344,"nodeType":"ExpressionStatement","src":"9757:38:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1307,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1304,"src":"9491:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":1308,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1229,"src":"9495:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1309,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9501:31:6","memberName":"quotient_poly_parts_commitments","nodeType":"MemberAccess","referencedDeclaration":422,"src":"9495:37:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":1310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9533:6:6","memberName":"length","nodeType":"MemberAccess","src":"9495:44:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9491:48:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1346,"initializationExpression":{"assignments":[1304],"declarations":[{"constant":false,"id":1304,"mutability":"mutable","name":"i","nameLocation":"9484:1:6","nodeType":"VariableDeclaration","scope":1346,"src":"9476:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1303,"name":"uint256","nodeType":"ElementaryTypeName","src":"9476:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1306,"initialValue":{"hexValue":"31","id":1305,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9488:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"9476:13:6"},"loopExpression":{"expression":{"id":1316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1312,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1304,"src":"9541:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1313,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1304,"src":"9545:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9547:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"9545:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":1315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9545:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9541:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1317,"nodeType":"ExpressionStatement","src":"9541:20:6"},"nodeType":"ForStatement","src":"9471:339:6"}]},{"assignments":[1350],"declarations":[{"constant":false,"id":1350,"mutability":"mutable","name":"queries","nameLocation":"9845:7:6","nodeType":"VariableDeclaration","scope":1616,"src":"9830:22:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries"},"typeName":{"id":1349,"nodeType":"UserDefinedTypeName","pathNode":{"id":1348,"name":"Queries","nameLocations":["9830:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":3165,"src":"9830:7:6"},"referencedDeclaration":3165,"src":"9830:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries"}},"visibility":"internal"}],"id":1356,"initialValue":{"arguments":[{"id":1352,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"9871:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},{"id":1353,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1229,"src":"9875:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},{"id":1354,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1239,"src":"9882:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"},{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"},{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}],"id":1351,"name":"prepare_queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3532,"src":"9855:15:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_VerificationKey_$387_memory_ptr_$_t_struct$_Proof_$484_memory_ptr_$_t_struct$_PartialVerifierState_$544_memory_ptr_$returns$_t_struct$_Queries_$3165_memory_ptr_$","typeString":"function (struct VerificationKey memory,struct Plonk4VerifierWithAccessToDNext.Proof memory,struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory) view returns (struct Plonk4VerifierWithAccessToDNext.Queries memory)"}},"id":1355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9855:33:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"nodeType":"VariableDeclarationStatement","src":"9830:58:6"},{"expression":{"id":1363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":1357,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1350,"src":"9898:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":1360,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9906:16:6","memberName":"commitments_at_z","nodeType":"MemberAccess","referencedDeclaration":3149,"src":"9898:24:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[13] memory"}},"id":1361,"indexExpression":{"hexValue":"30","id":1359,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9923:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9898:27:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1362,"name":"quotient_result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1268,"src":"9928:15:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"9898:45:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":1364,"nodeType":"ExpressionStatement","src":"9898:45:6"},{"expression":{"id":1372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":1365,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1350,"src":"9953:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":1368,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9961:11:6","memberName":"values_at_z","nodeType":"MemberAccess","referencedDeclaration":3154,"src":"9953:19:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.Fr memory[13] memory"}},"id":1369,"indexExpression":{"hexValue":"30","id":1367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9973:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9953:22:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":1370,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1229,"src":"9978:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1371,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9984:26:6","memberName":"quotient_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":450,"src":"9978:32:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"9953:57:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1373,"nodeType":"ExpressionStatement","src":"9953:57:6"},{"expression":{"id":1384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":1374,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1350,"src":"10020:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":1377,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10028:16:6","memberName":"commitments_at_z","nodeType":"MemberAccess","referencedDeclaration":3149,"src":"10020:24:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[13] memory"}},"id":1378,"indexExpression":{"hexValue":"31","id":1376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10045:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10020:27:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1380,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"10086:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},{"id":1381,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1229,"src":"10090:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},{"id":1382,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1239,"src":"10097:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"},{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"},{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}],"id":1379,"name":"aggregated_linearization_commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2672,"src":"10050:35:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_VerificationKey_$387_memory_ptr_$_t_struct$_Proof_$484_memory_ptr_$_t_struct$_PartialVerifierState_$544_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct VerificationKey memory,struct Plonk4VerifierWithAccessToDNext.Proof memory,struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":1383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10050:53:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"10020:83:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":1385,"nodeType":"ExpressionStatement","src":"10020:83:6"},{"expression":{"id":1393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":1386,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1350,"src":"10113:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":1389,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10121:11:6","memberName":"values_at_z","nodeType":"MemberAccess","referencedDeclaration":3154,"src":"10113:19:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.Fr memory[13] memory"}},"id":1390,"indexExpression":{"hexValue":"31","id":1388,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10133:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10113:22:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":1391,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1229,"src":"10138:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1392,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10144:31:6","memberName":"linearization_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":453,"src":"10138:37:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"10113:62:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1394,"nodeType":"ExpressionStatement","src":"10113:62:6"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":1396,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1350,"src":"10194:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":1397,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10202:16:6","memberName":"commitments_at_z","nodeType":"MemberAccess","referencedDeclaration":3149,"src":"10194:24:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[13] memory"}},"id":1398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10219:6:6","memberName":"length","nodeType":"MemberAccess","src":"10194:31:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":1399,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1350,"src":"10229:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":1400,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10237:11:6","memberName":"values_at_z","nodeType":"MemberAccess","referencedDeclaration":3154,"src":"10229:19:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.Fr memory[13] memory"}},"id":1401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10249:6:6","memberName":"length","nodeType":"MemberAccess","src":"10229:26:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10194:61:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":1395,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10186:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":1403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10186:70:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1404,"nodeType":"ExpressionStatement","src":"10186:70:6"},{"assignments":[1409],"declarations":[{"constant":false,"id":1409,"mutability":"mutable","name":"aggregated_commitment_at_z","nameLocation":"10296:26:6","nodeType":"VariableDeclaration","scope":1616,"src":"10267:55:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":1408,"nodeType":"UserDefinedTypeName","pathNode":{"id":1407,"name":"PairingsBn254.G1Point","nameLocations":["10267:13:6","10281:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"10267:21:6"},"referencedDeclaration":6027,"src":"10267:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"id":1414,"initialValue":{"baseExpression":{"expression":{"id":1410,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1350,"src":"10325:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":1411,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10333:16:6","memberName":"commitments_at_z","nodeType":"MemberAccess","referencedDeclaration":3149,"src":"10325:24:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[13] memory"}},"id":1413,"indexExpression":{"hexValue":"30","id":1412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10350:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10325:27:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"VariableDeclarationStatement","src":"10267:85:6"},{"assignments":[1419],"declarations":[{"constant":false,"id":1419,"mutability":"mutable","name":"aggregated_opening_at_z","nameLocation":"10387:23:6","nodeType":"VariableDeclaration","scope":1616,"src":"10363:47:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":1418,"nodeType":"UserDefinedTypeName","pathNode":{"id":1417,"name":"PairingsBn254.Fr","nameLocations":["10363:13:6","10377:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"10363:16:6"},"referencedDeclaration":6030,"src":"10363:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":1424,"initialValue":{"baseExpression":{"expression":{"id":1420,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1350,"src":"10413:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":1421,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10421:11:6","memberName":"values_at_z","nodeType":"MemberAccess","referencedDeclaration":3154,"src":"10413:19:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.Fr memory[13] memory"}},"id":1423,"indexExpression":{"hexValue":"30","id":1422,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10433:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10413:22:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"10363:72:6"},{"assignments":[1429],"declarations":[{"constant":false,"id":1429,"mutability":"mutable","name":"aggregation_challenge","nameLocation":"10469:21:6","nodeType":"VariableDeclaration","scope":1616,"src":"10445:45:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":1428,"nodeType":"UserDefinedTypeName","pathNode":{"id":1427,"name":"PairingsBn254.Fr","nameLocations":["10445:13:6","10459:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"10445:16:6"},"referencedDeclaration":6030,"src":"10445:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":1434,"initialValue":{"arguments":[{"hexValue":"31","id":1432,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10514:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":1430,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"10493:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":1431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10507:6:6","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"10493:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":1433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10493:23:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"10445:71:6"},{"assignments":[1439],"declarations":[{"constant":false,"id":1439,"mutability":"mutable","name":"scaled","nameLocation":"10555:6:6","nodeType":"VariableDeclaration","scope":1616,"src":"10526:35:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":1438,"nodeType":"UserDefinedTypeName","pathNode":{"id":1437,"name":"PairingsBn254.G1Point","nameLocations":["10526:13:6","10540:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"10526:21:6"},"referencedDeclaration":6027,"src":"10526:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"id":1440,"nodeType":"VariableDeclarationStatement","src":"10526:35:6"},{"body":{"id":1503,"nodeType":"Block","src":"10650:373:6","statements":[{"expression":{"arguments":[{"expression":{"id":1459,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1239,"src":"10697:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1460,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10703:1:6","memberName":"v","nodeType":"MemberAccess","referencedDeclaration":519,"src":"10697:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1456,"name":"aggregation_challenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1429,"src":"10664:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1458,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10686:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"10664:32:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10664:41:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1462,"nodeType":"ExpressionStatement","src":"10664:41:6"},{"expression":{"id":1471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1463,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1439,"src":"10719:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1469,"name":"aggregation_challenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1429,"src":"10766:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"baseExpression":{"expression":{"id":1464,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1350,"src":"10728:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":1465,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10736:16:6","memberName":"commitments_at_z","nodeType":"MemberAccess","referencedDeclaration":3149,"src":"10728:24:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[13] memory"}},"id":1467,"indexExpression":{"id":1466,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"10753:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10728:27:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":1468,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10756:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"10728:37:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":1470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10728:60:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"10719:69:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":1472,"nodeType":"ExpressionStatement","src":"10719:69:6"},{"expression":{"arguments":[{"id":1476,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1439,"src":"10846:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":1473,"name":"aggregated_commitment_at_z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1409,"src":"10802:26:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":1475,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10829:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"10802:43:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":1477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10802:51:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1478,"nodeType":"ExpressionStatement","src":"10802:51:6"},{"expression":{"id":1486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1479,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1239,"src":"10868:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1481,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10874:1:6","memberName":"t","nodeType":"MemberAccess","referencedDeclaration":540,"src":"10868:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":1482,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1350,"src":"10878:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":1483,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10886:11:6","memberName":"values_at_z","nodeType":"MemberAccess","referencedDeclaration":3154,"src":"10878:19:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.Fr memory[13] memory"}},"id":1485,"indexExpression":{"id":1484,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"10898:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10878:22:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"10868:32:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1487,"nodeType":"ExpressionStatement","src":"10868:32:6"},{"expression":{"arguments":[{"id":1493,"name":"aggregation_challenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1429,"src":"10933:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"expression":{"id":1488,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1239,"src":"10914:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1491,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10920:1:6","memberName":"t","nodeType":"MemberAccess","referencedDeclaration":540,"src":"10914:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1492,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10922:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"10914:18:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10914:41:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1495,"nodeType":"ExpressionStatement","src":"10914:41:6"},{"expression":{"arguments":[{"expression":{"id":1499,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1239,"src":"11004:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1500,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11010:1:6","memberName":"t","nodeType":"MemberAccess","referencedDeclaration":540,"src":"11004:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1496,"name":"aggregated_opening_at_z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1419,"src":"10969:23:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1498,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10993:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"10969:34:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10969:43:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1502,"nodeType":"ExpressionStatement","src":"10969:43:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1445,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"10591:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":1446,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1350,"src":"10595:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":1447,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10603:16:6","memberName":"commitments_at_z","nodeType":"MemberAccess","referencedDeclaration":3149,"src":"10595:24:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[13] memory"}},"id":1448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10620:6:6","memberName":"length","nodeType":"MemberAccess","src":"10595:31:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10591:35:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1504,"initializationExpression":{"assignments":[1442],"declarations":[{"constant":false,"id":1442,"mutability":"mutable","name":"i","nameLocation":"10584:1:6","nodeType":"VariableDeclaration","scope":1504,"src":"10576:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1441,"name":"uint256","nodeType":"ElementaryTypeName","src":"10576:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1444,"initialValue":{"hexValue":"31","id":1443,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10588:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"10576:13:6"},"loopExpression":{"expression":{"id":1454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1450,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"10628:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1451,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"10632:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10634:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"10632:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":1453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10632:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10628:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1455,"nodeType":"ExpressionStatement","src":"10628:20:6"},"nodeType":"ForStatement","src":"10571:452:6"},{"expression":{"arguments":[{"expression":{"id":1508,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1239,"src":"11066:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1509,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11072:1:6","memberName":"v","nodeType":"MemberAccess","referencedDeclaration":519,"src":"11066:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1505,"name":"aggregation_challenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1429,"src":"11033:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1507,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11055:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"11033:32:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11033:41:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1511,"nodeType":"ExpressionStatement","src":"11033:41:6"},{"assignments":[1516],"declarations":[{"constant":false,"id":1516,"mutability":"mutable","name":"aggregated_commitment_at_z_omega","nameLocation":"11114:32:6","nodeType":"VariableDeclaration","scope":1616,"src":"11085:61:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":1515,"nodeType":"UserDefinedTypeName","pathNode":{"id":1514,"name":"PairingsBn254.G1Point","nameLocations":["11085:13:6","11099:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"11085:21:6"},"referencedDeclaration":6027,"src":"11085:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"id":1524,"initialValue":{"arguments":[{"id":1522,"name":"aggregation_challenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1429,"src":"11206:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"baseExpression":{"expression":{"id":1517,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1350,"src":"11149:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":1518,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11157:22:6","memberName":"commitments_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":3159,"src":"11149:30:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$6_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[6] memory"}},"id":1520,"indexExpression":{"hexValue":"30","id":1519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11180:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11149:33:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":1521,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11183:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"11149:43:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":1523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11149:88:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"VariableDeclarationStatement","src":"11085:152:6"},{"assignments":[1529],"declarations":[{"constant":false,"id":1529,"mutability":"mutable","name":"aggregated_opening_at_z_omega","nameLocation":"11271:29:6","nodeType":"VariableDeclaration","scope":1616,"src":"11247:53:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":1528,"nodeType":"UserDefinedTypeName","pathNode":{"id":1527,"name":"PairingsBn254.Fr","nameLocations":["11247:13:6","11261:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"11247:16:6"},"referencedDeclaration":6030,"src":"11247:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":1534,"initialValue":{"baseExpression":{"expression":{"id":1530,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1350,"src":"11303:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":1531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11311:17:6","memberName":"values_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":3164,"src":"11303:25:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$6_memory_ptr","typeString":"struct PairingsBn254.Fr memory[6] memory"}},"id":1533,"indexExpression":{"hexValue":"30","id":1532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11329:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11303:28:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"11247:84:6"},{"expression":{"arguments":[{"id":1538,"name":"aggregation_challenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1429,"src":"11382:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1535,"name":"aggregated_opening_at_z_omega","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1529,"src":"11341:29:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1537,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11371:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"11341:40:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11341:63:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1540,"nodeType":"ExpressionStatement","src":"11341:63:6"},{"body":{"id":1603,"nodeType":"Block","src":"11499:398:6","statements":[{"expression":{"arguments":[{"expression":{"id":1559,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1239,"src":"11546:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1560,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11552:1:6","memberName":"v","nodeType":"MemberAccess","referencedDeclaration":519,"src":"11546:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1556,"name":"aggregation_challenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1429,"src":"11513:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1558,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11535:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"11513:32:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11513:41:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1562,"nodeType":"ExpressionStatement","src":"11513:41:6"},{"expression":{"id":1571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1563,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1439,"src":"11569:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1569,"name":"aggregation_challenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1429,"src":"11622:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"baseExpression":{"expression":{"id":1564,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1350,"src":"11578:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":1565,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11586:22:6","memberName":"commitments_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":3159,"src":"11578:30:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$6_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[6] memory"}},"id":1567,"indexExpression":{"id":1566,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1542,"src":"11609:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11578:33:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":1568,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11612:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"11578:43:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":1570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11578:66:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"11569:75:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":1572,"nodeType":"ExpressionStatement","src":"11569:75:6"},{"expression":{"arguments":[{"id":1576,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1439,"src":"11708:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":1573,"name":"aggregated_commitment_at_z_omega","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1516,"src":"11658:32:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":1575,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11691:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"11658:49:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":1577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11658:57:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1578,"nodeType":"ExpressionStatement","src":"11658:57:6"},{"expression":{"id":1586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1579,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1239,"src":"11730:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1581,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11736:1:6","memberName":"t","nodeType":"MemberAccess","referencedDeclaration":540,"src":"11730:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":1582,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1350,"src":"11740:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":1583,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11748:17:6","memberName":"values_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":3164,"src":"11740:25:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$6_memory_ptr","typeString":"struct PairingsBn254.Fr memory[6] memory"}},"id":1585,"indexExpression":{"id":1584,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1542,"src":"11766:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11740:28:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"11730:38:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1587,"nodeType":"ExpressionStatement","src":"11730:38:6"},{"expression":{"arguments":[{"id":1593,"name":"aggregation_challenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1429,"src":"11801:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"expression":{"id":1588,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1239,"src":"11782:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1591,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11788:1:6","memberName":"t","nodeType":"MemberAccess","referencedDeclaration":540,"src":"11782:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1592,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11790:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"11782:18:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11782:41:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1595,"nodeType":"ExpressionStatement","src":"11782:41:6"},{"expression":{"arguments":[{"expression":{"id":1599,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1239,"src":"11878:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1600,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11884:1:6","memberName":"t","nodeType":"MemberAccess","referencedDeclaration":540,"src":"11878:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1596,"name":"aggregated_opening_at_z_omega","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1529,"src":"11837:29:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1598,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11867:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"11837:40:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11837:49:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1602,"nodeType":"ExpressionStatement","src":"11837:49:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1545,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1542,"src":"11434:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":1546,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1350,"src":"11438:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":1547,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11446:22:6","memberName":"commitments_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":3159,"src":"11438:30:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$6_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[6] memory"}},"id":1548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11469:6:6","memberName":"length","nodeType":"MemberAccess","src":"11438:37:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11434:41:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1604,"initializationExpression":{"assignments":[1542],"declarations":[{"constant":false,"id":1542,"mutability":"mutable","name":"i","nameLocation":"11427:1:6","nodeType":"VariableDeclaration","scope":1604,"src":"11419:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1541,"name":"uint256","nodeType":"ElementaryTypeName","src":"11419:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1544,"initialValue":{"hexValue":"31","id":1543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11431:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"11419:13:6"},"loopExpression":{"expression":{"id":1554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1550,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1542,"src":"11477:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1551,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1542,"src":"11481:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11483:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"11481:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":1553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11481:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11477:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1555,"nodeType":"ExpressionStatement","src":"11477:20:6"},"nodeType":"ForStatement","src":"11414:483:6"},{"expression":{"arguments":[{"expression":{"id":1606,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"11957:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":1607,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11960:11:6","memberName":"g2_elements","nodeType":"MemberAccess","referencedDeclaration":386,"src":"11957:14:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$2_memory_ptr","typeString":"struct PairingsBn254.G2Point memory[2] memory"}},{"id":1608,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1229,"src":"11989:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},{"id":1609,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1239,"src":"12012:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},{"id":1610,"name":"aggregated_commitment_at_z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1409,"src":"12035:26:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},{"id":1611,"name":"aggregated_commitment_at_z_omega","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1516,"src":"12079:32:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},{"id":1612,"name":"aggregated_opening_at_z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1419,"src":"12129:23:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},{"id":1613,"name":"aggregated_opening_at_z_omega","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1529,"src":"12170:29:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$2_memory_ptr","typeString":"struct PairingsBn254.G2Point memory[2] memory"},{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"},{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"},{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"},{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"},{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"},{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"id":1605,"name":"final_pairing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3731,"src":"11926:13:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_struct$_G2Point_$6232_memory_ptr_$2_memory_ptr_$_t_struct$_Proof_$484_memory_ptr_$_t_struct$_PartialVerifierState_$544_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_bool_$","typeString":"function (struct PairingsBn254.G2Point memory[2] memory,struct Plonk4VerifierWithAccessToDNext.Proof memory,struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory,struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) view returns (bool)"}},"id":1614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11926:287:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1236,"id":1615,"nodeType":"Return","src":"11907:306:6"}]},"id":1617,"implemented":true,"kind":"function","modifiers":[],"name":"verify","nameLocation":"8641:6:6","nodeType":"FunctionDefinition","parameters":{"id":1233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1229,"mutability":"mutable","name":"proof","nameLocation":"8661:5:6","nodeType":"VariableDeclaration","scope":1617,"src":"8648:18:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"},"typeName":{"id":1228,"nodeType":"UserDefinedTypeName","pathNode":{"id":1227,"name":"Proof","nameLocations":["8648:5:6"],"nodeType":"IdentifierPath","referencedDeclaration":484,"src":"8648:5:6"},"referencedDeclaration":484,"src":"8648:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"}},"visibility":"internal"},{"constant":false,"id":1232,"mutability":"mutable","name":"vk","nameLocation":"8691:2:6","nodeType":"VariableDeclaration","scope":1617,"src":"8668:25:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey"},"typeName":{"id":1231,"nodeType":"UserDefinedTypeName","pathNode":{"id":1230,"name":"VerificationKey","nameLocations":["8668:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":387,"src":"8668:15:6"},"referencedDeclaration":387,"src":"8668:15:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_storage_ptr","typeString":"struct VerificationKey"}},"visibility":"internal"}],"src":"8647:47:6"},"returnParameters":{"id":1236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1235,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1617,"src":"8718:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1234,"name":"bool","nodeType":"ElementaryTypeName","src":"8718:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8717:6:6"},"scope":3732,"src":"8632:3588:6","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":1946,"nodeType":"Block","src":"12403:2426:6","statements":[{"assignments":[1635],"declarations":[{"constant":false,"id":1635,"mutability":"mutable","name":"lagrange_poly_numbers","nameLocation":"12430:21:6","nodeType":"VariableDeclaration","scope":1946,"src":"12413:38:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1633,"name":"uint256","nodeType":"ElementaryTypeName","src":"12413:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1634,"nodeType":"ArrayTypeName","src":"12413:9:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":1642,"initialValue":{"arguments":[{"expression":{"id":1639,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1620,"src":"12468:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":1640,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12471:10:6","memberName":"num_inputs","nodeType":"MemberAccess","referencedDeclaration":345,"src":"12468:13:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1638,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"12454:13:6","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":1636,"name":"uint256","nodeType":"ElementaryTypeName","src":"12458:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1637,"nodeType":"ArrayTypeName","src":"12458:9:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":1641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12454:28:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"12413:69:6"},{"body":{"id":1663,"nodeType":"Block","src":"12568:53:6","statements":[{"expression":{"id":1661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1657,"name":"lagrange_poly_numbers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1635,"src":"12582:21:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":1659,"indexExpression":{"id":1658,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"12604:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12582:24:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1660,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"12609:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12582:28:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1662,"nodeType":"ExpressionStatement","src":"12582:28:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1647,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"12512:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":1648,"name":"lagrange_poly_numbers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1635,"src":"12516:21:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":1649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12538:6:6","memberName":"length","nodeType":"MemberAccess","src":"12516:28:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12512:32:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1664,"initializationExpression":{"assignments":[1644],"declarations":[{"constant":false,"id":1644,"mutability":"mutable","name":"i","nameLocation":"12505:1:6","nodeType":"VariableDeclaration","scope":1664,"src":"12497:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1643,"name":"uint256","nodeType":"ElementaryTypeName","src":"12497:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1646,"initialValue":{"hexValue":"30","id":1645,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12509:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12497:13:6"},"loopExpression":{"expression":{"id":1655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1651,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"12546:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1652,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1644,"src":"12550:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12552:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"12550:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":1654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12550:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12546:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1656,"nodeType":"ExpressionStatement","src":"12546:20:6"},"nodeType":"ForStatement","src":"12492:129:6"},{"assignments":[1669],"declarations":[{"constant":false,"id":1669,"mutability":"mutable","name":"inputs_term","nameLocation":"12702:11:6","nodeType":"VariableDeclaration","scope":1946,"src":"12678:35:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":1668,"nodeType":"UserDefinedTypeName","pathNode":{"id":1667,"name":"PairingsBn254.Fr","nameLocations":["12678:13:6","12692:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"12678:16:6"},"referencedDeclaration":6030,"src":"12678:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":1674,"initialValue":{"arguments":[{"hexValue":"30","id":1672,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12737:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":1670,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"12716:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":1671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12730:6:6","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"12716:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":1673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12716:23:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"12678:61:6"},{"body":{"id":1724,"nodeType":"Block","src":"12810:292:6","statements":[{"expression":{"id":1701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1689,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1626,"src":"12885:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1691,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"12891:1:6","memberName":"t","nodeType":"MemberAccess","referencedDeclaration":540,"src":"12885:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1693,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1676,"src":"12932:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":1694,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1620,"src":"12935:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":1695,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12938:11:6","memberName":"domain_size","nodeType":"MemberAccess","referencedDeclaration":343,"src":"12935:14:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":1696,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1620,"src":"12951:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":1697,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12954:5:6","memberName":"omega","nodeType":"MemberAccess","referencedDeclaration":348,"src":"12951:8:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},{"expression":{"id":1698,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1626,"src":"12961:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1699,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12967:1:6","memberName":"z","nodeType":"MemberAccess","referencedDeclaration":525,"src":"12961:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"},{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"id":1692,"name":"evaluate_lagrange_poly_out_of_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":728,"src":"12895:36:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256,uint256,struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.Fr memory)"}},"id":1700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12895:74:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"12885:84:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1702,"nodeType":"ExpressionStatement","src":"12885:84:6"},{"expression":{"arguments":[{"arguments":[{"baseExpression":{"expression":{"id":1710,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1623,"src":"13023:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1711,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13029:12:6","memberName":"input_values","nodeType":"MemberAccess","referencedDeclaration":409,"src":"13023:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":1713,"indexExpression":{"id":1712,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1676,"src":"13042:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13023:21:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1708,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"13002:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":1709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13016:6:6","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"13002:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":1714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13002:43:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"expression":{"id":1703,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1626,"src":"12983:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1706,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12989:1:6","memberName":"t","nodeType":"MemberAccess","referencedDeclaration":540,"src":"12983:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1707,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12991:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"12983:18:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12983:63:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1716,"nodeType":"ExpressionStatement","src":"12983:63:6"},{"expression":{"arguments":[{"expression":{"id":1720,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1626,"src":"13083:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1721,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13089:1:6","memberName":"t","nodeType":"MemberAccess","referencedDeclaration":540,"src":"13083:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1717,"name":"inputs_term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1669,"src":"13060:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1719,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13072:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"13060:22:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13060:31:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1723,"nodeType":"ExpressionStatement","src":"13060:31:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1679,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1676,"src":"12769:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":1680,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1620,"src":"12773:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":1681,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12776:10:6","memberName":"num_inputs","nodeType":"MemberAccess","referencedDeclaration":345,"src":"12773:13:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12769:17:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1725,"initializationExpression":{"assignments":[1676],"declarations":[{"constant":false,"id":1676,"mutability":"mutable","name":"i","nameLocation":"12762:1:6","nodeType":"VariableDeclaration","scope":1725,"src":"12754:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1675,"name":"uint256","nodeType":"ElementaryTypeName","src":"12754:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1678,"initialValue":{"hexValue":"30","id":1677,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12766:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12754:13:6"},"loopExpression":{"expression":{"id":1687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1683,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1676,"src":"12788:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1684,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1676,"src":"12792:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12794:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"12792:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":1686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12792:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12788:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1688,"nodeType":"ExpressionStatement","src":"12788:20:6"},"nodeType":"ForStatement","src":"12749:353:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":1729,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1623,"src":"13134:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1730,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13140:28:6","memberName":"gate_selectors_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":437,"src":"13134:34:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$1_memory_ptr","typeString":"struct PairingsBn254.Fr memory[1] memory"}},"id":1732,"indexExpression":{"hexValue":"30","id":1731,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13169:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13134:37:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1726,"name":"inputs_term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1669,"src":"13111:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1728,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13123:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"13111:22:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13111:61:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1734,"nodeType":"ExpressionStatement","src":"13111:61:6"},{"assignments":[1739],"declarations":[{"constant":false,"id":1739,"mutability":"mutable","name":"result","nameLocation":"13206:6:6","nodeType":"VariableDeclaration","scope":1946,"src":"13182:30:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":1738,"nodeType":"UserDefinedTypeName","pathNode":{"id":1737,"name":"PairingsBn254.Fr","nameLocations":["13182:13:6","13196:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"13182:16:6"},"referencedDeclaration":6030,"src":"13182:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":1744,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":1740,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1623,"src":"13215:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1741,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13221:31:6","memberName":"linearization_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":453,"src":"13215:37:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1742,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13253:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"13215:42:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":1743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13215:44:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"13182:77:6"},{"expression":{"arguments":[{"id":1748,"name":"inputs_term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1669,"src":"13287:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1745,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1739,"src":"13269:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1747,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13276:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"13269:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13269:30:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1750,"nodeType":"ExpressionStatement","src":"13269:30:6"},{"expression":{"arguments":[{"id":1752,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1626,"src":"13369:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}],"id":1751,"name":"compute_powers_of_alpha","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1226,"src":"13345:23:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PartialVerifierState_$544_memory_ptr_$returns$__$","typeString":"function (struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory) pure"}},"id":1753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13345:30:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1754,"nodeType":"ExpressionStatement","src":"13345:30:6"},{"assignments":[1759],"declarations":[{"constant":false,"id":1759,"mutability":"mutable","name":"factor","nameLocation":"13409:6:6","nodeType":"VariableDeclaration","scope":1946,"src":"13385:30:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":1758,"nodeType":"UserDefinedTypeName","pathNode":{"id":1757,"name":"PairingsBn254.Fr","nameLocations":["13385:13:6","13399:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"13385:16:6"},"referencedDeclaration":6030,"src":"13385:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":1766,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":1760,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1626,"src":"13418:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1761,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13424:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"13418:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":1763,"indexExpression":{"hexValue":"34","id":1762,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13437:1:6","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13418:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1764,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13440:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"13418:26:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":1765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13418:28:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"13385:61:6"},{"expression":{"arguments":[{"expression":{"id":1770,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1623,"src":"13474:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1771,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13480:49:6","memberName":"copy_permutation_grand_product_opening_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":447,"src":"13474:55:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1767,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1759,"src":"13456:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1769,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13463:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"13456:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13456:74:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1773,"nodeType":"ExpressionStatement","src":"13456:74:6"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":1775,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1623,"src":"13629:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1776,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13635:36:6","memberName":"copy_permutation_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":444,"src":"13629:42:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$3_memory_ptr","typeString":"struct PairingsBn254.Fr memory[3] memory"}},"id":1777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13672:6:6","memberName":"length","nodeType":"MemberAccess","src":"13629:49:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1780,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":1778,"name":"STATE_WIDTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"13682:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":1779,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13696:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13682:15:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13629:68:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":1774,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"13621:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":1782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13621:77:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1783,"nodeType":"ExpressionStatement","src":"13621:77:6"},{"assignments":[1788],"declarations":[{"constant":false,"id":1788,"mutability":"mutable","name":"t","nameLocation":"13732:1:6","nodeType":"VariableDeclaration","scope":1946,"src":"13708:25:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":1787,"nodeType":"UserDefinedTypeName","pathNode":{"id":1786,"name":"PairingsBn254.Fr","nameLocations":["13708:13:6","13722:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"13708:16:6"},"referencedDeclaration":6030,"src":"13708:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":1789,"nodeType":"VariableDeclarationStatement","src":"13708:25:6"},{"body":{"id":1843,"nodeType":"Block","src":"13848:255:6","statements":[{"expression":{"id":1812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1805,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1788,"src":"13862:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":1806,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1623,"src":"13866:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1807,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13872:36:6","memberName":"copy_permutation_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":444,"src":"13866:42:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$3_memory_ptr","typeString":"struct PairingsBn254.Fr memory[3] memory"}},"id":1809,"indexExpression":{"id":1808,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1791,"src":"13909:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13866:45:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1810,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13912:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"13866:50:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":1811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13866:52:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"13862:56:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1813,"nodeType":"ExpressionStatement","src":"13862:56:6"},{"expression":{"arguments":[{"expression":{"id":1817,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1626,"src":"13945:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1818,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13951:4:6","memberName":"beta","nodeType":"MemberAccess","referencedDeclaration":493,"src":"13945:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1814,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1788,"src":"13932:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1816,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13934:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"13932:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13932:24:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1820,"nodeType":"ExpressionStatement","src":"13932:24:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":1824,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1623,"src":"13983:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1825,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13989:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"13983:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":1827,"indexExpression":{"id":1826,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1791,"src":"14015:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13983:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1821,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1788,"src":"13970:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1823,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13972:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"13970:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13970:48:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1829,"nodeType":"ExpressionStatement","src":"13970:48:6"},{"expression":{"arguments":[{"expression":{"id":1833,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1626,"src":"14045:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1834,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14051:5:6","memberName":"gamma","nodeType":"MemberAccess","referencedDeclaration":496,"src":"14045:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1830,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1788,"src":"14032:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1832,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14034:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"14032:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14032:25:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1836,"nodeType":"ExpressionStatement","src":"14032:25:6"},{"expression":{"arguments":[{"id":1840,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1788,"src":"14090:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1837,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1759,"src":"14072:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1839,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14079:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"14072:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14072:20:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1842,"nodeType":"ExpressionStatement","src":"14072:20:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1794,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1791,"src":"13771:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":1795,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1623,"src":"13775:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1796,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13781:36:6","memberName":"copy_permutation_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":444,"src":"13775:42:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$3_memory_ptr","typeString":"struct PairingsBn254.Fr memory[3] memory"}},"id":1797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13818:6:6","memberName":"length","nodeType":"MemberAccess","src":"13775:49:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13771:53:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1844,"initializationExpression":{"assignments":[1791],"declarations":[{"constant":false,"id":1791,"mutability":"mutable","name":"i","nameLocation":"13764:1:6","nodeType":"VariableDeclaration","scope":1844,"src":"13756:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1790,"name":"uint256","nodeType":"ElementaryTypeName","src":"13756:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1793,"initialValue":{"hexValue":"30","id":1792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13768:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13756:13:6"},"loopExpression":{"expression":{"id":1803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1799,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1791,"src":"13826:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1800,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1791,"src":"13830:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13832:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"13830:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":1802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13830:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13826:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1804,"nodeType":"ExpressionStatement","src":"13826:20:6"},"nodeType":"ForStatement","src":"13751:352:6"},{"expression":{"id":1852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1845,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1788,"src":"14113:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":1846,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1623,"src":"14117:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1847,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14123:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"14117:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":1849,"indexExpression":{"hexValue":"33","id":1848,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14149:1:6","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14117:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1850,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14152:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"14117:39:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":1851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14117:41:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"14113:45:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1853,"nodeType":"ExpressionStatement","src":"14113:45:6"},{"expression":{"arguments":[{"expression":{"id":1857,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1626,"src":"14181:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1858,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14187:5:6","memberName":"gamma","nodeType":"MemberAccess","referencedDeclaration":496,"src":"14181:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1854,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1788,"src":"14168:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1856,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14170:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"14168:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14168:25:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1860,"nodeType":"ExpressionStatement","src":"14168:25:6"},{"expression":{"arguments":[{"id":1864,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1788,"src":"14221:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1861,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1759,"src":"14203:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1863,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14210:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"14203:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14203:20:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1866,"nodeType":"ExpressionStatement","src":"14203:20:6"},{"expression":{"arguments":[{"id":1870,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1759,"src":"14251:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1867,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1739,"src":"14233:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1869,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14240:10:6","memberName":"sub_assign","nodeType":"MemberAccess","referencedDeclaration":6153,"src":"14233:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14233:25:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1872,"nodeType":"ExpressionStatement","src":"14233:25:6"},{"assignments":[1877],"declarations":[{"constant":false,"id":1877,"mutability":"mutable","name":"l_0_at_z","nameLocation":"14323:8:6","nodeType":"VariableDeclaration","scope":1946,"src":"14299:32:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":1876,"nodeType":"UserDefinedTypeName","pathNode":{"id":1875,"name":"PairingsBn254.Fr","nameLocations":["14299:13:6","14313:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"14299:16:6"},"referencedDeclaration":6030,"src":"14299:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":1884,"initialValue":{"arguments":[{"expression":{"id":1879,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1620,"src":"14355:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":1880,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14358:11:6","memberName":"domain_size","nodeType":"MemberAccess","referencedDeclaration":343,"src":"14355:14:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":1881,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1626,"src":"14371:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1882,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14377:1:6","memberName":"z","nodeType":"MemberAccess","referencedDeclaration":525,"src":"14371:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"id":1878,"name":"evaluate_l0_at_point","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":622,"src":"14334:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.Fr memory)"}},"id":1883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14334:45:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"14299:80:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":1888,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1626,"src":"14409:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1889,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14415:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"14409:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":1893,"indexExpression":{"commonType":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"id":1892,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":1890,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14428:1:6","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":1891,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14432:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"14428:5:6","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14409:25:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1885,"name":"l_0_at_z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1877,"src":"14389:8:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1887,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14398:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"14389:19:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14389:46:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1895,"nodeType":"ExpressionStatement","src":"14389:46:6"},{"expression":{"arguments":[{"id":1899,"name":"l_0_at_z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1877,"src":"14463:8:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1896,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1739,"src":"14445:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1898,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14452:10:6","memberName":"sub_assign","nodeType":"MemberAccess","referencedDeclaration":6153,"src":"14445:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14445:27:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1901,"nodeType":"ExpressionStatement","src":"14445:27:6"},{"assignments":[1906],"declarations":[{"constant":false,"id":1906,"mutability":"mutable","name":"lookup_quotient_contrib","nameLocation":"14507:23:6","nodeType":"VariableDeclaration","scope":1946,"src":"14483:47:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":1905,"nodeType":"UserDefinedTypeName","pathNode":{"id":1904,"name":"PairingsBn254.Fr","nameLocations":["14483:13:6","14497:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"14483:16:6"},"referencedDeclaration":6030,"src":"14483:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":1912,"initialValue":{"arguments":[{"id":1908,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1620,"src":"14562:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},{"id":1909,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1623,"src":"14566:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},{"id":1910,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1626,"src":"14573:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"},{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"},{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}],"id":1907,"name":"lookup_quotient_contribution","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2194,"src":"14533:28:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_VerificationKey_$387_memory_ptr_$_t_struct$_Proof_$484_memory_ptr_$_t_struct$_PartialVerifierState_$544_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct VerificationKey memory,struct Plonk4VerifierWithAccessToDNext.Proof memory,struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory) view returns (struct PairingsBn254.Fr memory)"}},"id":1911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14533:46:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"14483:96:6"},{"expression":{"arguments":[{"id":1916,"name":"lookup_quotient_contrib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1906,"src":"14607:23:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1913,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1739,"src":"14589:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1915,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14596:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"14589:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14589:42:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1918,"nodeType":"ExpressionStatement","src":"14589:42:6"},{"assignments":[1923],"declarations":[{"constant":false,"id":1923,"mutability":"mutable","name":"lhs","nameLocation":"14666:3:6","nodeType":"VariableDeclaration","scope":1946,"src":"14642:27:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":1922,"nodeType":"UserDefinedTypeName","pathNode":{"id":1921,"name":"PairingsBn254.Fr","nameLocations":["14642:13:6","14656:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"14642:16:6"},"referencedDeclaration":6030,"src":"14642:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":1928,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":1924,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1623,"src":"14672:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":1925,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14678:26:6","memberName":"quotient_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":450,"src":"14672:32:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1926,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14705:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"14672:37:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":1927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14672:39:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"14642:69:6"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":1933,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1620,"src":"14755:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":1934,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14758:11:6","memberName":"domain_size","nodeType":"MemberAccess","referencedDeclaration":343,"src":"14755:14:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":1935,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1626,"src":"14771:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1936,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14777:1:6","memberName":"z","nodeType":"MemberAccess","referencedDeclaration":525,"src":"14771:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"id":1932,"name":"evaluate_vanishing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":756,"src":"14736:18:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.Fr memory)"}},"id":1937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14736:43:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":1929,"name":"lhs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1923,"src":"14721:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1931,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14725:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"14721:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14721:59:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1939,"nodeType":"ExpressionStatement","src":"14721:59:6"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1940,"name":"lhs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1923,"src":"14797:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1941,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14801:5:6","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"14797:9:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":1942,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1739,"src":"14810:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1943,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14817:5:6","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"14810:12:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14797:25:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1630,"id":1945,"nodeType":"Return","src":"14790:32:6"}]},"id":1947,"implemented":true,"kind":"function","modifiers":[],"name":"verify_quotient_evaluation","nameLocation":"12235:26:6","nodeType":"FunctionDefinition","parameters":{"id":1627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1620,"mutability":"mutable","name":"vk","nameLocation":"12294:2:6","nodeType":"VariableDeclaration","scope":1947,"src":"12271:25:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey"},"typeName":{"id":1619,"nodeType":"UserDefinedTypeName","pathNode":{"id":1618,"name":"VerificationKey","nameLocations":["12271:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":387,"src":"12271:15:6"},"referencedDeclaration":387,"src":"12271:15:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_storage_ptr","typeString":"struct VerificationKey"}},"visibility":"internal"},{"constant":false,"id":1623,"mutability":"mutable","name":"proof","nameLocation":"12319:5:6","nodeType":"VariableDeclaration","scope":1947,"src":"12306:18:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"},"typeName":{"id":1622,"nodeType":"UserDefinedTypeName","pathNode":{"id":1621,"name":"Proof","nameLocations":["12306:5:6"],"nodeType":"IdentifierPath","referencedDeclaration":484,"src":"12306:5:6"},"referencedDeclaration":484,"src":"12306:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"}},"visibility":"internal"},{"constant":false,"id":1626,"mutability":"mutable","name":"state","nameLocation":"12362:5:6","nodeType":"VariableDeclaration","scope":1947,"src":"12334:33:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"},"typeName":{"id":1625,"nodeType":"UserDefinedTypeName","pathNode":{"id":1624,"name":"PartialVerifierState","nameLocations":["12334:20:6"],"nodeType":"IdentifierPath","referencedDeclaration":544,"src":"12334:20:6"},"referencedDeclaration":544,"src":"12334:20:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"}},"visibility":"internal"}],"src":"12261:112:6"},"returnParameters":{"id":1630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1629,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1947,"src":"12397:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1628,"name":"bool","nodeType":"ElementaryTypeName","src":"12397:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12396:6:6"},"scope":3732,"src":"12226:2603:6","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2193,"nodeType":"Block","src":"15040:1674:6","statements":[{"assignments":[1966],"declarations":[{"constant":false,"id":1966,"mutability":"mutable","name":"t","nameLocation":"15074:1:6","nodeType":"VariableDeclaration","scope":2193,"src":"15050:25:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":1965,"nodeType":"UserDefinedTypeName","pathNode":{"id":1964,"name":"PairingsBn254.Fr","nameLocations":["15050:13:6","15064:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"15050:16:6"},"referencedDeclaration":6030,"src":"15050:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":1967,"nodeType":"VariableDeclarationStatement","src":"15050:25:6"},{"assignments":[1972],"declarations":[{"constant":false,"id":1972,"mutability":"mutable","name":"one","nameLocation":"15110:3:6","nodeType":"VariableDeclaration","scope":2193,"src":"15086:27:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":1971,"nodeType":"UserDefinedTypeName","pathNode":{"id":1970,"name":"PairingsBn254.Fr","nameLocations":["15086:13:6","15100:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"15086:16:6"},"referencedDeclaration":6030,"src":"15086:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":1977,"initialValue":{"arguments":[{"hexValue":"31","id":1975,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15137:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":1973,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"15116:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":1974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15130:6:6","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"15116:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":1976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15116:23:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"15086:53:6"},{"expression":{"id":1985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1978,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"15149:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1980,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15155:13:6","memberName":"beta_plus_one","nodeType":"MemberAccess","referencedDeclaration":513,"src":"15149:19:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":1981,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"15171:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1982,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15177:11:6","memberName":"beta_lookup","nodeType":"MemberAccess","referencedDeclaration":507,"src":"15171:17:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1983,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15189:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"15171:22:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":1984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15171:24:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"15149:46:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1986,"nodeType":"ExpressionStatement","src":"15149:46:6"},{"expression":{"arguments":[{"id":1992,"name":"one","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1972,"src":"15236:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"expression":{"id":1987,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"15205:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1990,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15211:13:6","memberName":"beta_plus_one","nodeType":"MemberAccess","referencedDeclaration":513,"src":"15205:19:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":1991,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15225:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"15205:30:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":1993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15205:35:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1994,"nodeType":"ExpressionStatement","src":"15205:35:6"},{"expression":{"id":2002,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":1995,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"15250:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1997,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15256:10:6","memberName":"beta_gamma","nodeType":"MemberAccess","referencedDeclaration":516,"src":"15250:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":1998,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"15269:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":1999,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15275:13:6","memberName":"beta_plus_one","nodeType":"MemberAccess","referencedDeclaration":513,"src":"15269:19:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2000,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15289:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"15269:24:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":2001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15269:26:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"15250:45:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2003,"nodeType":"ExpressionStatement","src":"15250:45:6"},{"expression":{"arguments":[{"expression":{"id":2009,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"15333:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2010,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15339:12:6","memberName":"gamma_lookup","nodeType":"MemberAccess","referencedDeclaration":510,"src":"15333:18:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"expression":{"id":2004,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"15305:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2007,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15311:10:6","memberName":"beta_gamma","nodeType":"MemberAccess","referencedDeclaration":516,"src":"15305:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2008,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15322:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"15305:27:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15305:47:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2012,"nodeType":"ExpressionStatement","src":"15305:47:6"},{"expression":{"id":2018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2013,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1966,"src":"15404:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":2014,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1953,"src":"15408:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2015,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15414:32:6","memberName":"lookup_s_poly_opening_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":462,"src":"15408:38:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2016,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15447:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"15408:43:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":2017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15408:45:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"15404:49:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2019,"nodeType":"ExpressionStatement","src":"15404:49:6"},{"expression":{"arguments":[{"expression":{"id":2023,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"15476:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2024,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15482:11:6","memberName":"beta_lookup","nodeType":"MemberAccess","referencedDeclaration":507,"src":"15476:17:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2020,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1966,"src":"15463:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2022,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15465:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"15463:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15463:31:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2026,"nodeType":"ExpressionStatement","src":"15463:31:6"},{"expression":{"arguments":[{"expression":{"id":2030,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"15517:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2031,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15523:10:6","memberName":"beta_gamma","nodeType":"MemberAccess","referencedDeclaration":516,"src":"15517:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2027,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1966,"src":"15504:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2029,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15506:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"15504:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15504:30:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2033,"nodeType":"ExpressionStatement","src":"15504:30:6"},{"expression":{"arguments":[{"expression":{"id":2037,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1953,"src":"15557:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2038,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15563:39:6","memberName":"lookup_grand_product_opening_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":465,"src":"15557:45:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2034,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1966,"src":"15544:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2036,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15546:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"15544:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15544:59:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2040,"nodeType":"ExpressionStatement","src":"15544:59:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":2044,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"15626:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2045,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15632:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"15626:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":2047,"indexExpression":{"hexValue":"36","id":2046,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15645:1:6","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15626:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2041,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1966,"src":"15613:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2043,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15615:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"15613:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15613:35:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2049,"nodeType":"ExpressionStatement","src":"15613:35:6"},{"assignments":[2054],"declarations":[{"constant":false,"id":2054,"mutability":"mutable","name":"last_omega","nameLocation":"15726:10:6","nodeType":"VariableDeclaration","scope":2193,"src":"15702:34:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":2053,"nodeType":"UserDefinedTypeName","pathNode":{"id":2052,"name":"PairingsBn254.Fr","nameLocations":["15702:13:6","15716:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"15702:16:6"},"referencedDeclaration":6030,"src":"15702:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":2063,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2058,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1950,"src":"15752:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2059,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15755:11:6","memberName":"domain_size","nodeType":"MemberAccess","referencedDeclaration":343,"src":"15752:14:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2060,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15769:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"15752:18:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":2055,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1950,"src":"15739:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2056,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15742:5:6","memberName":"omega","nodeType":"MemberAccess","referencedDeclaration":348,"src":"15739:8:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2057,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15748:3:6","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":6223,"src":"15739:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Fr_$6030_memory_ptr_$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,uint256) view returns (struct PairingsBn254.Fr memory)"}},"id":2062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15739:32:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"15702:69:6"},{"expression":{"id":2071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2064,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"15781:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2066,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15787:18:6","memberName":"z_minus_last_omega","nodeType":"MemberAccess","referencedDeclaration":531,"src":"15781:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":2067,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"15808:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2068,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15814:1:6","memberName":"z","nodeType":"MemberAccess","referencedDeclaration":525,"src":"15808:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2069,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15816:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"15808:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":2070,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15808:14:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"15781:41:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2072,"nodeType":"ExpressionStatement","src":"15781:41:6"},{"expression":{"arguments":[{"id":2078,"name":"last_omega","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2054,"src":"15868:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"expression":{"id":2073,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"15832:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2076,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15838:18:6","memberName":"z_minus_last_omega","nodeType":"MemberAccess","referencedDeclaration":531,"src":"15832:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2077,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15857:10:6","memberName":"sub_assign","nodeType":"MemberAccess","referencedDeclaration":6153,"src":"15832:35:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15832:47:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2080,"nodeType":"ExpressionStatement","src":"15832:47:6"},{"expression":{"arguments":[{"expression":{"id":2084,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"15902:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2085,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15908:18:6","memberName":"z_minus_last_omega","nodeType":"MemberAccess","referencedDeclaration":531,"src":"15902:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2081,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1966,"src":"15889:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2083,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15891:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"15889:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15889:38:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2087,"nodeType":"ExpressionStatement","src":"15889:38:6"},{"expression":{"arguments":[{"id":2091,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1966,"src":"15955:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2088,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1960,"src":"15937:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2090,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15944:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"15937:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15937:20:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2093,"nodeType":"ExpressionStatement","src":"15937:20:6"},{"expression":{"id":2106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2094,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"16000:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2096,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"16006:8:6","memberName":"l_0_at_z","nodeType":"MemberAccess","referencedDeclaration":534,"src":"16000:14:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":2098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16054:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":2099,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1950,"src":"16057:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2100,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16060:11:6","memberName":"domain_size","nodeType":"MemberAccess","referencedDeclaration":343,"src":"16057:14:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":2101,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1950,"src":"16073:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2102,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16076:5:6","memberName":"omega","nodeType":"MemberAccess","referencedDeclaration":348,"src":"16073:8:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},{"expression":{"id":2103,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"16083:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2104,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16089:1:6","memberName":"z","nodeType":"MemberAccess","referencedDeclaration":525,"src":"16083:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"},{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"id":2097,"name":"evaluate_lagrange_poly_out_of_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":728,"src":"16017:36:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256,uint256,struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.Fr memory)"}},"id":2105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16017:74:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"16000:91:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2107,"nodeType":"ExpressionStatement","src":"16000:91:6"},{"expression":{"id":2113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2108,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1966,"src":"16101:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":2109,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"16105:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2110,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16111:8:6","memberName":"l_0_at_z","nodeType":"MemberAccess","referencedDeclaration":534,"src":"16105:14:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2111,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16120:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"16105:19:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":2112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16105:21:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"16101:25:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2114,"nodeType":"ExpressionStatement","src":"16101:25:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":2118,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"16149:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2119,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16155:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"16149:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":2123,"indexExpression":{"commonType":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"id":2122,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"36","id":2120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16168:1:6","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16172:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"16168:5:6","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16149:25:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2115,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1966,"src":"16136:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2117,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16138:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"16136:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16136:39:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2125,"nodeType":"ExpressionStatement","src":"16136:39:6"},{"expression":{"arguments":[{"id":2129,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1966,"src":"16203:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2126,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1960,"src":"16185:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2128,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16192:10:6","memberName":"sub_assign","nodeType":"MemberAccess","referencedDeclaration":6153,"src":"16185:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16185:20:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2131,"nodeType":"ExpressionStatement","src":"16185:20:6"},{"assignments":[2136],"declarations":[{"constant":false,"id":2136,"mutability":"mutable","name":"beta_gamma_powered","nameLocation":"16293:18:6","nodeType":"VariableDeclaration","scope":2193,"src":"16269:42:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":2135,"nodeType":"UserDefinedTypeName","pathNode":{"id":2134,"name":"PairingsBn254.Fr","nameLocations":["16269:13:6","16283:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"16269:16:6"},"referencedDeclaration":6030,"src":"16269:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":2145,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2140,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1950,"src":"16335:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2141,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16338:11:6","memberName":"domain_size","nodeType":"MemberAccess","referencedDeclaration":343,"src":"16335:14:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2142,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16352:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"16335:18:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":2137,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"16314:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2138,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16320:10:6","memberName":"beta_gamma","nodeType":"MemberAccess","referencedDeclaration":516,"src":"16314:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2139,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16331:3:6","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":6223,"src":"16314:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Fr_$6030_memory_ptr_$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,uint256) view returns (struct PairingsBn254.Fr memory)"}},"id":2144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16314:40:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"16269:85:6"},{"expression":{"id":2161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2146,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"16364:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2148,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"16370:18:6","memberName":"l_n_minus_one_at_z","nodeType":"MemberAccess","referencedDeclaration":537,"src":"16364:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2150,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1950,"src":"16441:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2151,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16444:11:6","memberName":"domain_size","nodeType":"MemberAccess","referencedDeclaration":343,"src":"16441:14:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16458:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"16441:18:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":2154,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1950,"src":"16473:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2155,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16476:11:6","memberName":"domain_size","nodeType":"MemberAccess","referencedDeclaration":343,"src":"16473:14:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":2156,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1950,"src":"16501:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2157,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16504:5:6","memberName":"omega","nodeType":"MemberAccess","referencedDeclaration":348,"src":"16501:8:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},{"expression":{"id":2158,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"16523:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2159,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16529:1:6","memberName":"z","nodeType":"MemberAccess","referencedDeclaration":525,"src":"16523:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"},{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"id":2149,"name":"evaluate_lagrange_poly_out_of_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":728,"src":"16391:36:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256,uint256,struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.Fr memory)"}},"id":2160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16391:149:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"16364:176:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2162,"nodeType":"ExpressionStatement","src":"16364:176:6"},{"expression":{"id":2168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2163,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1966,"src":"16550:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":2164,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"16554:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2165,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16560:18:6","memberName":"l_n_minus_one_at_z","nodeType":"MemberAccess","referencedDeclaration":537,"src":"16554:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2166,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16579:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"16554:29:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":2167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16554:31:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"16550:35:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2169,"nodeType":"ExpressionStatement","src":"16550:35:6"},{"expression":{"arguments":[{"id":2173,"name":"beta_gamma_powered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2136,"src":"16608:18:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2170,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1966,"src":"16595:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2172,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16597:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"16595:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16595:32:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2175,"nodeType":"ExpressionStatement","src":"16595:32:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":2179,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1956,"src":"16650:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2180,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16656:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"16650:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":2184,"indexExpression":{"commonType":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"id":2183,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"36","id":2181,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16669:1:6","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32","id":2182,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16673:1:6","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"16669:5:6","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16650:25:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2176,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1966,"src":"16637:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2178,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16639:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"16637:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16637:39:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2186,"nodeType":"ExpressionStatement","src":"16637:39:6"},{"expression":{"arguments":[{"id":2190,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1966,"src":"16705:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2187,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1960,"src":"16687:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2189,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16694:10:6","memberName":"sub_assign","nodeType":"MemberAccess","referencedDeclaration":6153,"src":"16687:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16687:20:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2192,"nodeType":"ExpressionStatement","src":"16687:20:6"}]},"id":2194,"implemented":true,"kind":"function","modifiers":[],"name":"lookup_quotient_contribution","nameLocation":"14844:28:6","nodeType":"FunctionDefinition","parameters":{"id":1957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1950,"mutability":"mutable","name":"vk","nameLocation":"14905:2:6","nodeType":"VariableDeclaration","scope":2194,"src":"14882:25:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey"},"typeName":{"id":1949,"nodeType":"UserDefinedTypeName","pathNode":{"id":1948,"name":"VerificationKey","nameLocations":["14882:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":387,"src":"14882:15:6"},"referencedDeclaration":387,"src":"14882:15:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_storage_ptr","typeString":"struct VerificationKey"}},"visibility":"internal"},{"constant":false,"id":1953,"mutability":"mutable","name":"proof","nameLocation":"14930:5:6","nodeType":"VariableDeclaration","scope":2194,"src":"14917:18:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"},"typeName":{"id":1952,"nodeType":"UserDefinedTypeName","pathNode":{"id":1951,"name":"Proof","nameLocations":["14917:5:6"],"nodeType":"IdentifierPath","referencedDeclaration":484,"src":"14917:5:6"},"referencedDeclaration":484,"src":"14917:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"}},"visibility":"internal"},{"constant":false,"id":1956,"mutability":"mutable","name":"state","nameLocation":"14973:5:6","nodeType":"VariableDeclaration","scope":2194,"src":"14945:33:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"},"typeName":{"id":1955,"nodeType":"UserDefinedTypeName","pathNode":{"id":1954,"name":"PartialVerifierState","nameLocations":["14945:20:6"],"nodeType":"IdentifierPath","referencedDeclaration":544,"src":"14945:20:6"},"referencedDeclaration":544,"src":"14945:20:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"}},"visibility":"internal"}],"src":"14872:112:6"},"returnParameters":{"id":1961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1960,"mutability":"mutable","name":"result","nameLocation":"15032:6:6","nodeType":"VariableDeclaration","scope":2194,"src":"15008:30:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":1959,"nodeType":"UserDefinedTypeName","pathNode":{"id":1958,"name":"PairingsBn254.Fr","nameLocations":["15008:13:6","15022:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"15008:16:6"},"referencedDeclaration":6030,"src":"15008:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"15007:32:6"},"scope":3732,"src":"14835:1879:6","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2671,"nodeType":"Block","src":"16937:3844:6","statements":[{"expression":{"id":2215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2209,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2207,"src":"17045:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":2212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17075:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":2213,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17078:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":2210,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"17054:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":2211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17068:6:6","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"17054:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":2214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17054:26:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"17045:35:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2216,"nodeType":"ExpressionStatement","src":"17045:35:6"},{"assignments":[2221],"declarations":[{"constant":false,"id":2221,"mutability":"mutable","name":"scaled","nameLocation":"17138:6:6","nodeType":"VariableDeclaration","scope":2671,"src":"17109:35:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":2220,"nodeType":"UserDefinedTypeName","pathNode":{"id":2219,"name":"PairingsBn254.G1Point","nameLocations":["17109:13:6","17123:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"17109:21:6"},"referencedDeclaration":6027,"src":"17109:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"id":2232,"initialValue":{"arguments":[{"baseExpression":{"expression":{"id":2227,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"17199:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2228,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17205:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"17199:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":2230,"indexExpression":{"hexValue":"30","id":2229,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17231:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17199:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"baseExpression":{"expression":{"id":2222,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2197,"src":"17147:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2223,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17150:22:6","memberName":"gate_setup_commitments","nodeType":"MemberAccess","referencedDeclaration":358,"src":"17147:25:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$7_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[7] memory"}},"id":2225,"indexExpression":{"hexValue":"30","id":2224,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17173:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17147:28:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2226,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17176:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"17147:38:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":2231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17147:96:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"VariableDeclarationStatement","src":"17109:134:6"},{"expression":{"arguments":[{"id":2236,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"17277:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":2233,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2207,"src":"17253:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2235,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17260:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"17253:23:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":2237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17253:31:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2238,"nodeType":"ExpressionStatement","src":"17253:31:6"},{"expression":{"id":2250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2239,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"17313:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":2245,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"17361:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2246,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17367:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"17361:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":2248,"indexExpression":{"hexValue":"31","id":2247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17393:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17361:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"baseExpression":{"expression":{"id":2240,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2197,"src":"17322:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2241,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17325:22:6","memberName":"gate_setup_commitments","nodeType":"MemberAccess","referencedDeclaration":358,"src":"17322:25:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$7_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[7] memory"}},"id":2243,"indexExpression":{"hexValue":"31","id":2242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17348:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17322:28:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2244,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17351:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"17322:38:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":2249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17322:74:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"17313:83:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2251,"nodeType":"ExpressionStatement","src":"17313:83:6"},{"expression":{"arguments":[{"id":2255,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"17430:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":2252,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2207,"src":"17406:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2254,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17413:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"17406:23:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":2256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17406:31:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2257,"nodeType":"ExpressionStatement","src":"17406:31:6"},{"expression":{"id":2269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2258,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"17466:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":2264,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"17514:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2265,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17520:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"17514:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":2267,"indexExpression":{"hexValue":"32","id":2266,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17546:1:6","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17514:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"baseExpression":{"expression":{"id":2259,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2197,"src":"17475:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2260,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17478:22:6","memberName":"gate_setup_commitments","nodeType":"MemberAccess","referencedDeclaration":358,"src":"17475:25:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$7_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[7] memory"}},"id":2262,"indexExpression":{"hexValue":"32","id":2261,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17501:1:6","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17475:28:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2263,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17504:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"17475:38:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":2268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17475:74:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"17466:83:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2270,"nodeType":"ExpressionStatement","src":"17466:83:6"},{"expression":{"arguments":[{"id":2274,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"17583:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":2271,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2207,"src":"17559:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2273,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17566:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"17559:23:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":2275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17559:31:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2276,"nodeType":"ExpressionStatement","src":"17559:31:6"},{"expression":{"id":2288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2277,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"17619:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":2283,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"17667:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2284,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17673:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"17667:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":2286,"indexExpression":{"hexValue":"33","id":2285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17699:1:6","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17667:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"baseExpression":{"expression":{"id":2278,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2197,"src":"17628:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2279,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17631:22:6","memberName":"gate_setup_commitments","nodeType":"MemberAccess","referencedDeclaration":358,"src":"17628:25:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$7_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[7] memory"}},"id":2281,"indexExpression":{"hexValue":"33","id":2280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17654:1:6","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17628:28:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2282,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17657:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"17628:38:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":2287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17628:74:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"17619:83:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2289,"nodeType":"ExpressionStatement","src":"17619:83:6"},{"expression":{"arguments":[{"id":2293,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"17736:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":2290,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2207,"src":"17712:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2292,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17719:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"17712:23:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":2294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17712:31:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2295,"nodeType":"ExpressionStatement","src":"17712:31:6"},{"assignments":[2300],"declarations":[{"constant":false,"id":2300,"mutability":"mutable","name":"t","nameLocation":"17809:1:6","nodeType":"VariableDeclaration","scope":2671,"src":"17785:25:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":2299,"nodeType":"UserDefinedTypeName","pathNode":{"id":2298,"name":"PairingsBn254.Fr","nameLocations":["17785:13:6","17799:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"17785:16:6"},"referencedDeclaration":6030,"src":"17785:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":2307,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":2301,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"17813:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2302,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17819:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"17813:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":2304,"indexExpression":{"hexValue":"30","id":2303,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17845:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17813:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2305,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17848:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"17813:39:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":2306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17813:41:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"17785:69:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":2311,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"17877:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2312,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17883:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"17877:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":2314,"indexExpression":{"hexValue":"31","id":2313,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17909:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17877:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2308,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2300,"src":"17864:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2310,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17866:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"17864:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17864:48:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2316,"nodeType":"ExpressionStatement","src":"17864:48:6"},{"expression":{"id":2325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2317,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"17922:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2323,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2300,"src":"17970:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"baseExpression":{"expression":{"id":2318,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2197,"src":"17931:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2319,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17934:22:6","memberName":"gate_setup_commitments","nodeType":"MemberAccess","referencedDeclaration":358,"src":"17931:25:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$7_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[7] memory"}},"id":2321,"indexExpression":{"hexValue":"34","id":2320,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17957:1:6","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17931:28:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2322,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17960:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"17931:38:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":2324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17931:41:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"17922:50:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2326,"nodeType":"ExpressionStatement","src":"17922:50:6"},{"expression":{"arguments":[{"id":2330,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"18006:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":2327,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2207,"src":"17982:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2329,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17989:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"17982:23:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":2331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17982:31:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2332,"nodeType":"ExpressionStatement","src":"17982:31:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":2336,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2197,"src":"18066:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2337,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18069:22:6","memberName":"gate_setup_commitments","nodeType":"MemberAccess","referencedDeclaration":358,"src":"18066:25:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$7_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[7] memory"}},"id":2339,"indexExpression":{"hexValue":"35","id":2338,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18092:1:6","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18066:28:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":2333,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2207,"src":"18042:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2335,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18049:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"18042:23:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":2340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18042:53:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2341,"nodeType":"ExpressionStatement","src":"18042:53:6"},{"expression":{"id":2353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2342,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"18133:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":2348,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"18181:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2349,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18187:31:6","memberName":"state_polys_openings_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":432,"src":"18181:37:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$1_memory_ptr","typeString":"struct PairingsBn254.Fr memory[1] memory"}},"id":2351,"indexExpression":{"hexValue":"30","id":2350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18219:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18181:40:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"baseExpression":{"expression":{"id":2343,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2197,"src":"18142:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2344,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18145:22:6","memberName":"gate_setup_commitments","nodeType":"MemberAccess","referencedDeclaration":358,"src":"18142:25:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$7_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[7] memory"}},"id":2346,"indexExpression":{"hexValue":"36","id":2345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18168:1:6","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18142:28:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2347,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18171:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"18142:38:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":2352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18142:80:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"18133:89:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2354,"nodeType":"ExpressionStatement","src":"18133:89:6"},{"expression":{"arguments":[{"id":2358,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"18256:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":2355,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2207,"src":"18232:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2357,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18239:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"18232:23:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":2359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18232:31:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2360,"nodeType":"ExpressionStatement","src":"18232:31:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":2364,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"18297:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2365,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18303:28:6","memberName":"gate_selectors_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":437,"src":"18297:34:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$1_memory_ptr","typeString":"struct PairingsBn254.Fr memory[1] memory"}},"id":2367,"indexExpression":{"hexValue":"30","id":2366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18332:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18297:37:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2361,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2207,"src":"18273:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2363,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18280:16:6","memberName":"point_mul_assign","nodeType":"MemberAccess","referencedDeclaration":6763,"src":"18273:23:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view"}},"id":2368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18273:62:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2369,"nodeType":"ExpressionStatement","src":"18273:62:6"},{"assignments":[2374],"declarations":[{"constant":false,"id":2374,"mutability":"mutable","name":"rescue_custom_gate_linearization_contrib","nameLocation":"18387:40:6","nodeType":"VariableDeclaration","scope":2671,"src":"18346:81:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":2373,"nodeType":"UserDefinedTypeName","pathNode":{"id":2372,"name":"PairingsBn254.G1Point","nameLocations":["18346:13:6","18360:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"18346:21:6"},"referencedDeclaration":6027,"src":"18346:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"id":2380,"initialValue":{"arguments":[{"id":2376,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2197,"src":"18493:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},{"id":2377,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"18513:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},{"id":2378,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2203,"src":"18536:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"},{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"},{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}],"id":2375,"name":"rescue_custom_gate_linearization_contribution","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2834,"src":"18430:45:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_VerificationKey_$387_memory_ptr_$_t_struct$_Proof_$484_memory_ptr_$_t_struct$_PartialVerifierState_$544_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct VerificationKey memory,struct Plonk4VerifierWithAccessToDNext.Proof memory,struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":2379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18430:125:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"VariableDeclarationStatement","src":"18346:209:6"},{"expression":{"arguments":[{"id":2384,"name":"rescue_custom_gate_linearization_contrib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2374,"src":"18589:40:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":2381,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2207,"src":"18565:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2383,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18572:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"18565:23:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":2385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18565:65:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2386,"nodeType":"ExpressionStatement","src":"18565:65:6"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":2388,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2197,"src":"18648:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2389,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18651:12:6","memberName":"non_residues","nodeType":"MemberAccess","referencedDeclaration":381,"src":"18648:15:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$3_memory_ptr","typeString":"struct PairingsBn254.Fr memory[3] memory"}},"id":2390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18664:6:6","memberName":"length","nodeType":"MemberAccess","src":"18648:22:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2393,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":2391,"name":"STATE_WIDTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"18674:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2392,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18688:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"18674:15:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18648:41:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2387,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18640:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18640:50:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2396,"nodeType":"ExpressionStatement","src":"18640:50:6"},{"assignments":[2401],"declarations":[{"constant":false,"id":2401,"mutability":"mutable","name":"one","nameLocation":"18725:3:6","nodeType":"VariableDeclaration","scope":2671,"src":"18701:27:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":2400,"nodeType":"UserDefinedTypeName","pathNode":{"id":2399,"name":"PairingsBn254.Fr","nameLocations":["18701:13:6","18715:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"18701:16:6"},"referencedDeclaration":6030,"src":"18701:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":2406,"initialValue":{"arguments":[{"hexValue":"31","id":2404,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18752:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":2402,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"18731:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":2403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18745:6:6","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"18731:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":2405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18731:23:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"18701:53:6"},{"assignments":[2411],"declarations":[{"constant":false,"id":2411,"mutability":"mutable","name":"factor","nameLocation":"18788:6:6","nodeType":"VariableDeclaration","scope":2671,"src":"18764:30:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":2410,"nodeType":"UserDefinedTypeName","pathNode":{"id":2409,"name":"PairingsBn254.Fr","nameLocations":["18764:13:6","18778:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"18764:16:6"},"referencedDeclaration":6030,"src":"18764:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":2418,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":2412,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2203,"src":"18797:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2413,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18803:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"18797:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":2415,"indexExpression":{"hexValue":"34","id":2414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18816:1:6","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18797:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2416,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18819:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"18797:26:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":2417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18797:28:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"18764:61:6"},{"body":{"id":2491,"nodeType":"Block","src":"18901:476:6","statements":[{"expression":{"id":2433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2428,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2300,"src":"18915:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":2429,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2203,"src":"18919:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18925:1:6","memberName":"z","nodeType":"MemberAccess","referencedDeclaration":525,"src":"18919:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2431,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18927:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"18919:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":2432,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18919:14:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"18915:18:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2434,"nodeType":"ExpressionStatement","src":"18915:18:6"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2435,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"18951:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18956:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18951:6:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2456,"nodeType":"Block","src":"19015:119:6","statements":[{"expression":{"arguments":[{"baseExpression":{"expression":{"id":2448,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2197,"src":"19046:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2449,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19049:12:6","memberName":"non_residues","nodeType":"MemberAccess","referencedDeclaration":381,"src":"19046:15:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$3_memory_ptr","typeString":"struct PairingsBn254.Fr memory[3] memory"}},"id":2453,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2450,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"19062:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19066:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"19062:5:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19046:22:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2445,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2300,"src":"19033:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2447,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19035:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"19033:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19033:36:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2455,"nodeType":"ExpressionStatement","src":"19033:36:6"}]},"id":2457,"nodeType":"IfStatement","src":"18947:187:6","trueBody":{"id":2444,"nodeType":"Block","src":"18959:50:6","statements":[{"expression":{"arguments":[{"id":2441,"name":"one","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2401,"src":"18990:3:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2438,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2300,"src":"18977:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2440,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18979:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"18977:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18977:17:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2443,"nodeType":"ExpressionStatement","src":"18977:17:6"}]}},{"expression":{"arguments":[{"expression":{"id":2461,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2203,"src":"19160:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2462,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19166:4:6","memberName":"beta","nodeType":"MemberAccess","referencedDeclaration":493,"src":"19160:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2458,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2300,"src":"19147:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2460,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19149:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"19147:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19147:24:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2464,"nodeType":"ExpressionStatement","src":"19147:24:6"},{"expression":{"arguments":[{"expression":{"id":2468,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2203,"src":"19198:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2469,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19204:5:6","memberName":"gamma","nodeType":"MemberAccess","referencedDeclaration":496,"src":"19198:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2465,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2300,"src":"19185:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2467,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19187:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"19185:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19185:25:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2471,"nodeType":"ExpressionStatement","src":"19185:25:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":2475,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"19237:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2476,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19243:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"19237:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":2478,"indexExpression":{"id":2477,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"19269:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19237:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2472,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2300,"src":"19224:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2474,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19226:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"19224:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19224:48:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2480,"nodeType":"ExpressionStatement","src":"19224:48:6"},{"expression":{"arguments":[{"id":2484,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2300,"src":"19305:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2481,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2411,"src":"19287:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2483,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19294:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"19287:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19287:20:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2486,"nodeType":"ExpressionStatement","src":"19287:20:6"},{"id":2490,"nodeType":"UncheckedBlock","src":"19321:46:6","statements":[{"expression":{"id":2488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"19349:3:6","subExpression":{"id":2487,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"19351:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2489,"nodeType":"ExpressionStatement","src":"19349:3:6"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2423,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"18855:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":2424,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"18859:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2425,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18865:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"18859:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":2426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18891:6:6","memberName":"length","nodeType":"MemberAccess","src":"18859:38:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18855:42:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2492,"initializationExpression":{"assignments":[2420],"declarations":[{"constant":false,"id":2420,"mutability":"mutable","name":"i","nameLocation":"18848:1:6","nodeType":"VariableDeclaration","scope":2492,"src":"18840:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2419,"name":"uint256","nodeType":"ElementaryTypeName","src":"18840:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2422,"initialValue":{"hexValue":"30","id":2421,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18852:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"18840:13:6"},"nodeType":"ForStatement","src":"18835:542:6"},{"expression":{"id":2499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2493,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"19387:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2497,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2411,"src":"19454:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"expression":{"id":2494,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"19396:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2495,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19402:41:6","memberName":"copy_permutation_grand_product_commitment","nodeType":"MemberAccess","referencedDeclaration":417,"src":"19396:47:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2496,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19444:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"19396:57:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":2498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19396:65:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"19387:74:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2500,"nodeType":"ExpressionStatement","src":"19387:74:6"},{"expression":{"arguments":[{"id":2504,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"19495:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":2501,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2207,"src":"19471:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2503,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19478:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"19471:23:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":2505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19471:31:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2506,"nodeType":"ExpressionStatement","src":"19471:31:6"},{"expression":{"id":2514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2507,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2411,"src":"19591:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":2508,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2203,"src":"19600:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2509,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19606:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"19600:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":2511,"indexExpression":{"hexValue":"34","id":2510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19619:1:6","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19600:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2512,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19622:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"19600:26:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":2513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19600:28:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"19591:37:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2515,"nodeType":"ExpressionStatement","src":"19591:37:6"},{"expression":{"arguments":[{"expression":{"id":2519,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2203,"src":"19656:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2520,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19662:4:6","memberName":"beta","nodeType":"MemberAccess","referencedDeclaration":493,"src":"19656:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2516,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2411,"src":"19638:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2518,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19645:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"19638:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19638:29:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2522,"nodeType":"ExpressionStatement","src":"19638:29:6"},{"expression":{"arguments":[{"expression":{"id":2526,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"19695:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2527,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19701:49:6","memberName":"copy_permutation_grand_product_opening_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":447,"src":"19695:55:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2523,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2411,"src":"19677:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2525,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19684:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"19677:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19677:74:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2529,"nodeType":"ExpressionStatement","src":"19677:74:6"},{"body":{"id":2583,"nodeType":"Block","src":"19824:255:6","statements":[{"expression":{"id":2552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2545,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2300,"src":"19838:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":2546,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"19842:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2547,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19848:36:6","memberName":"copy_permutation_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":444,"src":"19842:42:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$3_memory_ptr","typeString":"struct PairingsBn254.Fr memory[3] memory"}},"id":2549,"indexExpression":{"id":2548,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2531,"src":"19885:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19842:45:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2550,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19888:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"19842:50:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":2551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19842:52:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"19838:56:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2553,"nodeType":"ExpressionStatement","src":"19838:56:6"},{"expression":{"arguments":[{"expression":{"id":2557,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2203,"src":"19921:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2558,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19927:4:6","memberName":"beta","nodeType":"MemberAccess","referencedDeclaration":493,"src":"19921:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2554,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2300,"src":"19908:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2556,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19910:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"19908:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19908:24:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2560,"nodeType":"ExpressionStatement","src":"19908:24:6"},{"expression":{"arguments":[{"expression":{"id":2564,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2203,"src":"19959:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2565,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19965:5:6","memberName":"gamma","nodeType":"MemberAccess","referencedDeclaration":496,"src":"19959:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2561,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2300,"src":"19946:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2563,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19948:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"19946:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19946:25:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2567,"nodeType":"ExpressionStatement","src":"19946:25:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":2571,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"19998:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2572,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20004:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"19998:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":2574,"indexExpression":{"id":2573,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2531,"src":"20030:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19998:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2568,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2300,"src":"19985:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2570,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19987:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"19985:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19985:48:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2576,"nodeType":"ExpressionStatement","src":"19985:48:6"},{"expression":{"arguments":[{"id":2580,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2300,"src":"20066:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2577,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2411,"src":"20048:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2579,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20055:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"20048:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20048:20:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2582,"nodeType":"ExpressionStatement","src":"20048:20:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2534,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2531,"src":"19781:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2537,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":2535,"name":"STATE_WIDTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"19785:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2536,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19799:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"19785:15:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19781:19:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2584,"initializationExpression":{"assignments":[2531],"declarations":[{"constant":false,"id":2531,"mutability":"mutable","name":"i","nameLocation":"19774:1:6","nodeType":"VariableDeclaration","scope":2584,"src":"19766:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2530,"name":"uint256","nodeType":"ElementaryTypeName","src":"19766:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2533,"initialValue":{"hexValue":"30","id":2532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19778:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"19766:13:6"},"loopExpression":{"expression":{"id":2543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2539,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2531,"src":"19802:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2540,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2531,"src":"19806:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19808:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"19806:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":2542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19806:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19802:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2544,"nodeType":"ExpressionStatement","src":"19802:20:6"},"nodeType":"ForStatement","src":"19761:318:6"},{"expression":{"id":2593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2585,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"20088:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2591,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2411,"src":"20137:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"baseExpression":{"expression":{"id":2586,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2197,"src":"20097:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2587,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20100:23:6","memberName":"permutation_commitments","nodeType":"MemberAccess","referencedDeclaration":363,"src":"20097:26:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":2589,"indexExpression":{"hexValue":"33","id":2588,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20124:1:6","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20097:29:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2590,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20127:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"20097:39:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":2592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20097:47:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"20088:56:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2594,"nodeType":"ExpressionStatement","src":"20088:56:6"},{"expression":{"arguments":[{"id":2598,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"20178:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":2595,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2207,"src":"20154:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2597,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20161:16:6","memberName":"point_sub_assign","nodeType":"MemberAccess","referencedDeclaration":6595,"src":"20154:23:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":2599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20154:31:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2600,"nodeType":"ExpressionStatement","src":"20154:31:6"},{"expression":{"id":2613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2601,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2203,"src":"20239:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2603,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"20245:8:6","memberName":"l_0_at_z","nodeType":"MemberAccess","referencedDeclaration":534,"src":"20239:14:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":2605,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20293:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":2606,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2197,"src":"20296:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2607,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20299:11:6","memberName":"domain_size","nodeType":"MemberAccess","referencedDeclaration":343,"src":"20296:14:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":2608,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2197,"src":"20312:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2609,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20315:5:6","memberName":"omega","nodeType":"MemberAccess","referencedDeclaration":348,"src":"20312:8:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},{"expression":{"id":2610,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2203,"src":"20322:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2611,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20328:1:6","memberName":"z","nodeType":"MemberAccess","referencedDeclaration":525,"src":"20322:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"},{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"id":2604,"name":"evaluate_lagrange_poly_out_of_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":728,"src":"20256:36:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256,uint256,struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.Fr memory)"}},"id":2612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20256:74:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"20239:91:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2614,"nodeType":"ExpressionStatement","src":"20239:91:6"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":2616,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2203,"src":"20348:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2617,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20354:8:6","memberName":"l_0_at_z","nodeType":"MemberAccess","referencedDeclaration":534,"src":"20348:14:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2618,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20363:5:6","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"20348:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":2619,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20372:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20348:25:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2615,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"20340:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20340:34:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2622,"nodeType":"ExpressionStatement","src":"20340:34:6"},{"expression":{"id":2628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2623,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2411,"src":"20384:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":2624,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2203,"src":"20393:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2625,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20399:8:6","memberName":"l_0_at_z","nodeType":"MemberAccess","referencedDeclaration":534,"src":"20393:14:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2626,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20408:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"20393:19:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":2627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20393:21:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"20384:30:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2629,"nodeType":"ExpressionStatement","src":"20384:30:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":2633,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2203,"src":"20442:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2634,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20448:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"20442:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":2638,"indexExpression":{"commonType":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"id":2637,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":2635,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20461:1:6","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2636,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20465:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"20461:5:6","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20442:25:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2630,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2411,"src":"20424:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2632,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20431:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"20424:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20424:44:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2640,"nodeType":"ExpressionStatement","src":"20424:44:6"},{"expression":{"id":2647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2641,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"20478:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2645,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2411,"src":"20545:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"expression":{"id":2642,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"20487:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2643,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20493:41:6","memberName":"copy_permutation_grand_product_commitment","nodeType":"MemberAccess","referencedDeclaration":417,"src":"20487:47:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2644,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20535:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"20487:57:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":2646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20487:65:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"20478:74:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2648,"nodeType":"ExpressionStatement","src":"20478:74:6"},{"expression":{"arguments":[{"id":2652,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"20586:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":2649,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2207,"src":"20562:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2651,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20569:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"20562:23:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":2653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20562:31:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2654,"nodeType":"ExpressionStatement","src":"20562:31:6"},{"assignments":[2659],"declarations":[{"constant":false,"id":2659,"mutability":"mutable","name":"lookup_linearization_contrib","nameLocation":"20633:28:6","nodeType":"VariableDeclaration","scope":2671,"src":"20604:57:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":2658,"nodeType":"UserDefinedTypeName","pathNode":{"id":2657,"name":"PairingsBn254.G1Point","nameLocations":["20604:13:6","20618:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"20604:21:6"},"referencedDeclaration":6027,"src":"20604:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"id":2664,"initialValue":{"arguments":[{"id":2661,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2200,"src":"20698:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},{"id":2662,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2203,"src":"20705:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"},{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}],"id":2660,"name":"lookup_linearization_contribution","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3144,"src":"20664:33:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Proof_$484_memory_ptr_$_t_struct$_PartialVerifierState_$544_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct Plonk4VerifierWithAccessToDNext.Proof memory,struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":2663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20664:47:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"VariableDeclarationStatement","src":"20604:107:6"},{"expression":{"arguments":[{"id":2668,"name":"lookup_linearization_contrib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2659,"src":"20745:28:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":2665,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2207,"src":"20721:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2667,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20728:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"20721:23:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":2669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20721:53:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2670,"nodeType":"ExpressionStatement","src":"20721:53:6"}]},"id":2672,"implemented":true,"kind":"function","modifiers":[],"name":"aggregated_linearization_commitment","nameLocation":"16729:35:6","nodeType":"FunctionDefinition","parameters":{"id":2204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2197,"mutability":"mutable","name":"vk","nameLocation":"16797:2:6","nodeType":"VariableDeclaration","scope":2672,"src":"16774:25:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey"},"typeName":{"id":2196,"nodeType":"UserDefinedTypeName","pathNode":{"id":2195,"name":"VerificationKey","nameLocations":["16774:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":387,"src":"16774:15:6"},"referencedDeclaration":387,"src":"16774:15:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_storage_ptr","typeString":"struct VerificationKey"}},"visibility":"internal"},{"constant":false,"id":2200,"mutability":"mutable","name":"proof","nameLocation":"16822:5:6","nodeType":"VariableDeclaration","scope":2672,"src":"16809:18:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"},"typeName":{"id":2199,"nodeType":"UserDefinedTypeName","pathNode":{"id":2198,"name":"Proof","nameLocations":["16809:5:6"],"nodeType":"IdentifierPath","referencedDeclaration":484,"src":"16809:5:6"},"referencedDeclaration":484,"src":"16809:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"}},"visibility":"internal"},{"constant":false,"id":2203,"mutability":"mutable","name":"state","nameLocation":"16865:5:6","nodeType":"VariableDeclaration","scope":2672,"src":"16837:33:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"},"typeName":{"id":2202,"nodeType":"UserDefinedTypeName","pathNode":{"id":2201,"name":"PartialVerifierState","nameLocations":["16837:20:6"],"nodeType":"IdentifierPath","referencedDeclaration":544,"src":"16837:20:6"},"referencedDeclaration":544,"src":"16837:20:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"}},"visibility":"internal"}],"src":"16764:112:6"},"returnParameters":{"id":2208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2207,"mutability":"mutable","name":"result","nameLocation":"16929:6:6","nodeType":"VariableDeclaration","scope":2672,"src":"16900:35:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":2206,"nodeType":"UserDefinedTypeName","pathNode":{"id":2205,"name":"PairingsBn254.G1Point","nameLocations":["16900:13:6","16914:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"16900:21:6"},"referencedDeclaration":6027,"src":"16900:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"src":"16899:37:6"},"scope":3732,"src":"16720:4061:6","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2833,"nodeType":"Block","src":"21012:1007:6","statements":[{"assignments":[2691],"declarations":[{"constant":false,"id":2691,"mutability":"mutable","name":"t","nameLocation":"21046:1:6","nodeType":"VariableDeclaration","scope":2833,"src":"21022:25:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":2690,"nodeType":"UserDefinedTypeName","pathNode":{"id":2689,"name":"PairingsBn254.Fr","nameLocations":["21022:13:6","21036:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"21022:16:6"},"referencedDeclaration":6030,"src":"21022:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":2692,"nodeType":"VariableDeclarationStatement","src":"21022:25:6"},{"assignments":[2697],"declarations":[{"constant":false,"id":2697,"mutability":"mutable","name":"intermediate_result","nameLocation":"21081:19:6","nodeType":"VariableDeclaration","scope":2833,"src":"21057:43:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":2696,"nodeType":"UserDefinedTypeName","pathNode":{"id":2695,"name":"PairingsBn254.Fr","nameLocations":["21057:13:6","21071:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"21057:16:6"},"referencedDeclaration":6030,"src":"21057:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":2698,"nodeType":"VariableDeclarationStatement","src":"21057:43:6"},{"expression":{"id":2706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2699,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"21134:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":2700,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2678,"src":"21138:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2701,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21144:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"21138:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":2703,"indexExpression":{"hexValue":"30","id":2702,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21170:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21138:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2704,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21173:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"21138:39:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":2705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21138:41:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"21134:45:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2707,"nodeType":"ExpressionStatement","src":"21134:45:6"},{"expression":{"arguments":[{"id":2711,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"21202:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2708,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"21189:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2710,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21191:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"21189:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21189:15:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2713,"nodeType":"ExpressionStatement","src":"21189:15:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":2717,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2678,"src":"21227:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2718,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21233:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"21227:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":2720,"indexExpression":{"hexValue":"31","id":2719,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21259:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21227:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2714,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"21214:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2716,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21216:10:6","memberName":"sub_assign","nodeType":"MemberAccess","referencedDeclaration":6153,"src":"21214:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21214:48:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2722,"nodeType":"ExpressionStatement","src":"21214:48:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":2726,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2681,"src":"21322:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2727,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21328:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"21322:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":2729,"indexExpression":{"hexValue":"31","id":2728,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21341:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21322:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2723,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"21309:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2725,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21311:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"21309:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21309:35:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2731,"nodeType":"ExpressionStatement","src":"21309:35:6"},{"expression":{"arguments":[{"id":2735,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"21385:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2732,"name":"intermediate_result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2697,"src":"21354:19:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2734,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21374:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"21354:30:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21354:33:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2737,"nodeType":"ExpressionStatement","src":"21354:33:6"},{"expression":{"id":2745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2738,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"21421:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":2739,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2678,"src":"21425:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2740,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21431:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"21425:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":2742,"indexExpression":{"hexValue":"31","id":2741,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21457:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21425:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2743,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21460:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"21425:39:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":2744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21425:41:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"21421:45:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2746,"nodeType":"ExpressionStatement","src":"21421:45:6"},{"expression":{"arguments":[{"id":2750,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"21489:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2747,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"21476:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2749,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21478:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"21476:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21476:15:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2752,"nodeType":"ExpressionStatement","src":"21476:15:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":2756,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2678,"src":"21514:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2757,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21520:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"21514:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":2759,"indexExpression":{"hexValue":"32","id":2758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21546:1:6","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21514:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2753,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"21501:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2755,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21503:10:6","memberName":"sub_assign","nodeType":"MemberAccess","referencedDeclaration":6153,"src":"21501:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21501:48:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2761,"nodeType":"ExpressionStatement","src":"21501:48:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":2765,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2681,"src":"21572:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2766,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21578:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"21572:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":2770,"indexExpression":{"commonType":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"id":2769,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":2767,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21591:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2768,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21595:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"21591:5:6","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21572:25:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2762,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"21559:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2764,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21561:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"21559:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21559:39:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2772,"nodeType":"ExpressionStatement","src":"21559:39:6"},{"expression":{"arguments":[{"id":2776,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"21639:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2773,"name":"intermediate_result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2697,"src":"21608:19:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2775,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21628:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"21608:30:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21608:33:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2778,"nodeType":"ExpressionStatement","src":"21608:33:6"},{"expression":{"id":2786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2779,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"21676:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":2780,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2678,"src":"21680:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2781,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21686:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"21680:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":2783,"indexExpression":{"hexValue":"32","id":2782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21712:1:6","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21680:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2784,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21715:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"21680:39:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":2785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21680:41:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"21676:45:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2787,"nodeType":"ExpressionStatement","src":"21676:45:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":2791,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2678,"src":"21744:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2792,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21750:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"21744:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":2794,"indexExpression":{"hexValue":"30","id":2793,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21776:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21744:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2788,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"21731:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2790,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21733:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"21731:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21731:48:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2796,"nodeType":"ExpressionStatement","src":"21731:48:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":2800,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2678,"src":"21802:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2801,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21808:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"21802:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":2803,"indexExpression":{"hexValue":"33","id":2802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21834:1:6","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21802:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2797,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"21789:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2799,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21791:10:6","memberName":"sub_assign","nodeType":"MemberAccess","referencedDeclaration":6153,"src":"21789:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21789:48:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2805,"nodeType":"ExpressionStatement","src":"21789:48:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":2809,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2681,"src":"21860:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2810,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21866:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"21860:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":2814,"indexExpression":{"commonType":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"id":2813,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":2811,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21879:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32","id":2812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21883:1:6","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"21879:5:6","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21860:25:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2806,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"21847:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2808,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21849:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"21847:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21847:39:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2816,"nodeType":"ExpressionStatement","src":"21847:39:6"},{"expression":{"arguments":[{"id":2820,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2691,"src":"21927:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2817,"name":"intermediate_result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2697,"src":"21896:19:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2819,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21916:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"21896:30:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21896:33:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2822,"nodeType":"ExpressionStatement","src":"21896:33:6"},{"expression":{"id":2831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2823,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2685,"src":"21940:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2829,"name":"intermediate_result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2697,"src":"21992:19:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"baseExpression":{"expression":{"id":2824,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2675,"src":"21949:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":2825,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21952:26:6","memberName":"gate_selectors_commitments","nodeType":"MemberAccess","referencedDeclaration":353,"src":"21949:29:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$2_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[2] memory"}},"id":2827,"indexExpression":{"hexValue":"31","id":2826,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21979:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21949:32:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2828,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21982:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"21949:42:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":2830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21949:63:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"21940:72:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2832,"nodeType":"ExpressionStatement","src":"21940:72:6"}]},"functionSelector":"38fdad14","id":2834,"implemented":true,"kind":"function","modifiers":[],"name":"rescue_custom_gate_linearization_contribution","nameLocation":"20796:45:6","nodeType":"FunctionDefinition","parameters":{"id":2682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2675,"mutability":"mutable","name":"vk","nameLocation":"20874:2:6","nodeType":"VariableDeclaration","scope":2834,"src":"20851:25:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey"},"typeName":{"id":2674,"nodeType":"UserDefinedTypeName","pathNode":{"id":2673,"name":"VerificationKey","nameLocations":["20851:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":387,"src":"20851:15:6"},"referencedDeclaration":387,"src":"20851:15:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_storage_ptr","typeString":"struct VerificationKey"}},"visibility":"internal"},{"constant":false,"id":2678,"mutability":"mutable","name":"proof","nameLocation":"20899:5:6","nodeType":"VariableDeclaration","scope":2834,"src":"20886:18:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"},"typeName":{"id":2677,"nodeType":"UserDefinedTypeName","pathNode":{"id":2676,"name":"Proof","nameLocations":["20886:5:6"],"nodeType":"IdentifierPath","referencedDeclaration":484,"src":"20886:5:6"},"referencedDeclaration":484,"src":"20886:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"}},"visibility":"internal"},{"constant":false,"id":2681,"mutability":"mutable","name":"state","nameLocation":"20942:5:6","nodeType":"VariableDeclaration","scope":2834,"src":"20914:33:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"},"typeName":{"id":2680,"nodeType":"UserDefinedTypeName","pathNode":{"id":2679,"name":"PartialVerifierState","nameLocations":["20914:20:6"],"nodeType":"IdentifierPath","referencedDeclaration":544,"src":"20914:20:6"},"referencedDeclaration":544,"src":"20914:20:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"}},"visibility":"internal"}],"src":"20841:112:6"},"returnParameters":{"id":2686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2685,"mutability":"mutable","name":"result","nameLocation":"21004:6:6","nodeType":"VariableDeclaration","scope":2834,"src":"20975:35:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":2684,"nodeType":"UserDefinedTypeName","pathNode":{"id":2683,"name":"PairingsBn254.G1Point","nameLocations":["20975:13:6","20989:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"20975:21:6"},"referencedDeclaration":6027,"src":"20975:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"src":"20974:37:6"},"scope":3732,"src":"20787:1232:6","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":3143,"nodeType":"Block","src":"22211:2521:6","statements":[{"assignments":[2850],"declarations":[{"constant":false,"id":2850,"mutability":"mutable","name":"zero","nameLocation":"22245:4:6","nodeType":"VariableDeclaration","scope":3143,"src":"22221:28:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":2849,"nodeType":"UserDefinedTypeName","pathNode":{"id":2848,"name":"PairingsBn254.Fr","nameLocations":["22221:13:6","22235:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"22221:16:6"},"referencedDeclaration":6030,"src":"22221:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":2855,"initialValue":{"arguments":[{"hexValue":"30","id":2853,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22273:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":2851,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"22252:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":2852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22266:6:6","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"22252:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":2854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22252:23:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"22221:54:6"},{"assignments":[2860],"declarations":[{"constant":false,"id":2860,"mutability":"mutable","name":"t","nameLocation":"22310:1:6","nodeType":"VariableDeclaration","scope":3143,"src":"22286:25:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":2859,"nodeType":"UserDefinedTypeName","pathNode":{"id":2858,"name":"PairingsBn254.Fr","nameLocations":["22286:13:6","22300:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"22286:16:6"},"referencedDeclaration":6030,"src":"22286:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":2861,"nodeType":"VariableDeclarationStatement","src":"22286:25:6"},{"assignments":[2866],"declarations":[{"constant":false,"id":2866,"mutability":"mutable","name":"factor","nameLocation":"22345:6:6","nodeType":"VariableDeclaration","scope":3143,"src":"22321:30:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":2865,"nodeType":"UserDefinedTypeName","pathNode":{"id":2864,"name":"PairingsBn254.Fr","nameLocations":["22321:13:6","22335:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"22321:16:6"},"referencedDeclaration":6030,"src":"22321:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":2867,"nodeType":"VariableDeclarationStatement","src":"22321:30:6"},{"expression":{"id":2873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2868,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"22447:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":2869,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2837,"src":"22456:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2870,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22462:39:6","memberName":"lookup_grand_product_opening_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":465,"src":"22456:45:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2871,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22502:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"22456:50:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":2872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22456:52:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"22447:61:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2874,"nodeType":"ExpressionStatement","src":"22447:61:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":2878,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2840,"src":"22536:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2879,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22542:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"22536:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":2881,"indexExpression":{"hexValue":"36","id":2880,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22555:1:6","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22536:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2875,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"22518:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2877,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22525:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"22518:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22518:40:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2883,"nodeType":"ExpressionStatement","src":"22518:40:6"},{"expression":{"arguments":[{"expression":{"id":2887,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2840,"src":"22586:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2888,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22592:18:6","memberName":"z_minus_last_omega","nodeType":"MemberAccess","referencedDeclaration":531,"src":"22586:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2884,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"22568:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2886,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22575:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"22568:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22568:43:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2890,"nodeType":"ExpressionStatement","src":"22568:43:6"},{"assignments":[2895],"declarations":[{"constant":false,"id":2895,"mutability":"mutable","name":"scaled","nameLocation":"22651:6:6","nodeType":"VariableDeclaration","scope":3143,"src":"22622:35:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":2894,"nodeType":"UserDefinedTypeName","pathNode":{"id":2893,"name":"PairingsBn254.G1Point","nameLocations":["22622:13:6","22636:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"22622:21:6"},"referencedDeclaration":6027,"src":"22622:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"id":2901,"initialValue":{"arguments":[{"id":2899,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"22701:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"expression":{"id":2896,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2837,"src":"22660:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2897,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22666:24:6","memberName":"lookup_s_poly_commitment","nodeType":"MemberAccess","referencedDeclaration":456,"src":"22660:30:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2898,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22691:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"22660:40:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":2900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22660:48:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"VariableDeclarationStatement","src":"22622:86:6"},{"expression":{"arguments":[{"id":2905,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2895,"src":"22742:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":2902,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2844,"src":"22718:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":2904,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22725:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"22718:23:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":2906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22718:31:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2907,"nodeType":"ExpressionStatement","src":"22718:31:6"},{"expression":{"id":2913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2908,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"22984:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":2909,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2837,"src":"22993:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2910,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22999:32:6","memberName":"lookup_t_poly_opening_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":471,"src":"22993:38:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2911,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23032:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"22993:43:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":2912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22993:45:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"22984:54:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2914,"nodeType":"ExpressionStatement","src":"22984:54:6"},{"expression":{"arguments":[{"expression":{"id":2918,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2840,"src":"23066:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2919,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23072:11:6","memberName":"beta_lookup","nodeType":"MemberAccess","referencedDeclaration":507,"src":"23066:17:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2915,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"23048:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2917,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23055:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"23048:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23048:36:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2921,"nodeType":"ExpressionStatement","src":"23048:36:6"},{"expression":{"arguments":[{"expression":{"id":2925,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2837,"src":"23112:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2926,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23118:26:6","memberName":"lookup_t_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":468,"src":"23112:32:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2922,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"23094:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2924,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23101:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"23094:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23094:51:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2928,"nodeType":"ExpressionStatement","src":"23094:51:6"},{"expression":{"arguments":[{"expression":{"id":2932,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2840,"src":"23173:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2933,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23179:10:6","memberName":"beta_gamma","nodeType":"MemberAccess","referencedDeclaration":516,"src":"23173:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2929,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"23155:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2931,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23162:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"23155:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23155:35:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2935,"nodeType":"ExpressionStatement","src":"23155:35:6"},{"assignments":[2940],"declarations":[{"constant":false,"id":2940,"mutability":"mutable","name":"f_reconstructed","nameLocation":"23252:15:6","nodeType":"VariableDeclaration","scope":3143,"src":"23228:39:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":2939,"nodeType":"UserDefinedTypeName","pathNode":{"id":2938,"name":"PairingsBn254.Fr","nameLocations":["23228:13:6","23242:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"23228:16:6"},"referencedDeclaration":6030,"src":"23228:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":2941,"nodeType":"VariableDeclarationStatement","src":"23228:39:6"},{"assignments":[2946],"declarations":[{"constant":false,"id":2946,"mutability":"mutable","name":"current","nameLocation":"23301:7:6","nodeType":"VariableDeclaration","scope":3143,"src":"23277:31:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":2945,"nodeType":"UserDefinedTypeName","pathNode":{"id":2944,"name":"PairingsBn254.Fr","nameLocations":["23277:13:6","23291:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"23277:16:6"},"referencedDeclaration":6030,"src":"23277:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":2951,"initialValue":{"arguments":[{"hexValue":"31","id":2949,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23332:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":2947,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"23311:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":2948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23325:6:6","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"23311:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":2950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23311:23:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"23277:57:6"},{"assignments":[2956],"declarations":[{"constant":false,"id":2956,"mutability":"mutable","name":"tmp0","nameLocation":"23368:4:6","nodeType":"VariableDeclaration","scope":3143,"src":"23344:28:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":2955,"nodeType":"UserDefinedTypeName","pathNode":{"id":2954,"name":"PairingsBn254.Fr","nameLocations":["23344:13:6","23358:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"23344:16:6"},"referencedDeclaration":6030,"src":"23344:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":2957,"nodeType":"VariableDeclarationStatement","src":"23344:28:6"},{"body":{"id":3001,"nodeType":"Block","src":"23445:201:6","statements":[{"expression":{"id":2980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2973,"name":"tmp0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2956,"src":"23459:4:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":2974,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2837,"src":"23466:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":2975,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23472:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"23466:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":2977,"indexExpression":{"id":2976,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2959,"src":"23498:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23466:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2978,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23501:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"23466:39:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":2979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23466:41:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"23459:48:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2981,"nodeType":"ExpressionStatement","src":"23459:48:6"},{"expression":{"arguments":[{"id":2985,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2946,"src":"23537:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2982,"name":"tmp0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2956,"src":"23521:4:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2984,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23526:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"23521:15:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23521:24:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2987,"nodeType":"ExpressionStatement","src":"23521:24:6"},{"expression":{"arguments":[{"id":2991,"name":"tmp0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2956,"src":"23586:4:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2988,"name":"f_reconstructed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2940,"src":"23559:15:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2990,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23575:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"23559:26:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23559:32:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2993,"nodeType":"ExpressionStatement","src":"23559:32:6"},{"expression":{"arguments":[{"expression":{"id":2997,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2840,"src":"23625:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":2998,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23631:3:6","memberName":"eta","nodeType":"MemberAccess","referencedDeclaration":504,"src":"23625:9:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":2994,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2946,"src":"23606:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":2996,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23614:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"23606:18:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":2999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23606:29:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3000,"nodeType":"ExpressionStatement","src":"23606:29:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2962,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2959,"src":"23402:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2965,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":2963,"name":"STATE_WIDTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"23406:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23420:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"23406:15:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23402:19:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3002,"initializationExpression":{"assignments":[2959],"declarations":[{"constant":false,"id":2959,"mutability":"mutable","name":"i","nameLocation":"23395:1:6","nodeType":"VariableDeclaration","scope":3002,"src":"23387:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2958,"name":"uint256","nodeType":"ElementaryTypeName","src":"23387:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2961,"initialValue":{"hexValue":"30","id":2960,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23399:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"23387:13:6"},"loopExpression":{"expression":{"id":2971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2967,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2959,"src":"23423:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2968,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2959,"src":"23427:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23429:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"23427:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":2970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23427:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23423:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2972,"nodeType":"ExpressionStatement","src":"23423:20:6"},"nodeType":"ForStatement","src":"23382:264:6"},{"expression":{"id":3008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3003,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2860,"src":"23685:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":3004,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2837,"src":"23689:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3005,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23695:35:6","memberName":"lookup_table_type_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":477,"src":"23689:41:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3006,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23731:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"23689:46:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":3007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23689:48:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"23685:52:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3009,"nodeType":"ExpressionStatement","src":"23685:52:6"},{"expression":{"arguments":[{"id":3013,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2946,"src":"23760:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":3010,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2860,"src":"23747:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3012,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23749:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"23747:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":3014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23747:21:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3015,"nodeType":"ExpressionStatement","src":"23747:21:6"},{"expression":{"arguments":[{"id":3019,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2860,"src":"23805:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":3016,"name":"f_reconstructed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2940,"src":"23778:15:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3018,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23794:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"23778:26:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":3020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23778:29:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3021,"nodeType":"ExpressionStatement","src":"23778:29:6"},{"expression":{"arguments":[{"expression":{"id":3025,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2837,"src":"23845:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3026,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23851:33:6","memberName":"lookup_selector_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":474,"src":"23845:39:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":3022,"name":"f_reconstructed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2940,"src":"23818:15:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3024,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23834:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"23818:26:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":3027,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23818:67:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3028,"nodeType":"ExpressionStatement","src":"23818:67:6"},{"expression":{"arguments":[{"expression":{"id":3032,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2840,"src":"23922:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":3033,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23928:12:6","memberName":"gamma_lookup","nodeType":"MemberAccess","referencedDeclaration":510,"src":"23922:18:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":3029,"name":"f_reconstructed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2940,"src":"23895:15:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3031,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23911:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"23895:26:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":3034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23895:46:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3035,"nodeType":"ExpressionStatement","src":"23895:46:6"},{"expression":{"arguments":[{"id":3039,"name":"f_reconstructed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2940,"src":"24009:15:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":3036,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"23991:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3038,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23998:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"23991:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":3040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23991:34:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3041,"nodeType":"ExpressionStatement","src":"23991:34:6"},{"expression":{"arguments":[{"expression":{"id":3045,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2840,"src":"24053:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":3046,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24059:13:6","memberName":"beta_plus_one","nodeType":"MemberAccess","referencedDeclaration":513,"src":"24053:19:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":3042,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"24035:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3044,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24042:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"24035:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":3047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24035:38:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3048,"nodeType":"ExpressionStatement","src":"24035:38:6"},{"expression":{"id":3053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3049,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2860,"src":"24083:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3050,"name":"zero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2850,"src":"24087:4:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3051,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24092:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"24087:9:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":3052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24087:11:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"24083:15:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3054,"nodeType":"ExpressionStatement","src":"24083:15:6"},{"expression":{"arguments":[{"id":3058,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"24121:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":3055,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2860,"src":"24108:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3057,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24110:10:6","memberName":"sub_assign","nodeType":"MemberAccess","referencedDeclaration":6153,"src":"24108:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":3059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24108:20:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3060,"nodeType":"ExpressionStatement","src":"24108:20:6"},{"expression":{"id":3063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3061,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"24138:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3062,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2860,"src":"24147:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"24138:10:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3064,"nodeType":"ExpressionStatement","src":"24138:10:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":3068,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2840,"src":"24176:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":3069,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24182:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"24176:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":3071,"indexExpression":{"hexValue":"36","id":3070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24195:1:6","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24176:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":3065,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"24158:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3067,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24165:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"24158:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":3072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24158:40:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3073,"nodeType":"ExpressionStatement","src":"24158:40:6"},{"expression":{"arguments":[{"expression":{"id":3077,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2840,"src":"24268:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":3078,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24274:18:6","memberName":"z_minus_last_omega","nodeType":"MemberAccess","referencedDeclaration":531,"src":"24268:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":3074,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"24250:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3076,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24257:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"24250:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":3079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24250:43:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3080,"nodeType":"ExpressionStatement","src":"24250:43:6"},{"expression":{"id":3086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3081,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2860,"src":"24341:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":3082,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2840,"src":"24345:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":3083,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24351:8:6","memberName":"l_0_at_z","nodeType":"MemberAccess","referencedDeclaration":534,"src":"24345:14:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3084,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24360:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"24345:19:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":3085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24345:21:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"24341:25:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3087,"nodeType":"ExpressionStatement","src":"24341:25:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":3091,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2840,"src":"24389:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":3092,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24395:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"24389:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":3096,"indexExpression":{"commonType":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"id":3095,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"36","id":3093,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24408:1:6","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":3094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24412:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"24408:5:6","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24389:25:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":3088,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2860,"src":"24376:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3090,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24378:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"24376:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":3097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24376:39:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3098,"nodeType":"ExpressionStatement","src":"24376:39:6"},{"expression":{"arguments":[{"id":3102,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2860,"src":"24443:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":3099,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"24425:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3101,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24432:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"24425:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":3103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24425:20:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3104,"nodeType":"ExpressionStatement","src":"24425:20:6"},{"expression":{"id":3110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3105,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2860,"src":"24495:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":3106,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2840,"src":"24499:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":3107,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24505:18:6","memberName":"l_n_minus_one_at_z","nodeType":"MemberAccess","referencedDeclaration":537,"src":"24499:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3108,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24524:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"24499:29:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":3109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24499:31:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"24495:35:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3111,"nodeType":"ExpressionStatement","src":"24495:35:6"},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":3115,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2840,"src":"24553:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":3116,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24559:12:6","memberName":"alpha_values","nodeType":"MemberAccess","referencedDeclaration":501,"src":"24553:18:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$9_memory_ptr","typeString":"struct PairingsBn254.Fr memory[9] memory"}},"id":3120,"indexExpression":{"commonType":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"id":3119,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"36","id":3117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24572:1:6","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32","id":3118,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24576:1:6","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"24572:5:6","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24553:25:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":3112,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2860,"src":"24540:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3114,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24542:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"24540:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":3121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24540:39:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3122,"nodeType":"ExpressionStatement","src":"24540:39:6"},{"expression":{"arguments":[{"id":3126,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2860,"src":"24607:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":3123,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"24589:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3125,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24596:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"24589:17:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":3127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24589:20:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3128,"nodeType":"ExpressionStatement","src":"24589:20:6"},{"expression":{"id":3135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3129,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2895,"src":"24620:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3133,"name":"factor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"24677:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"expression":{"id":3130,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2837,"src":"24629:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3131,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24635:31:6","memberName":"lookup_grand_product_commitment","nodeType":"MemberAccess","referencedDeclaration":459,"src":"24629:37:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3132,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24667:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"24629:47:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":3134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24629:55:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"24620:64:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3136,"nodeType":"ExpressionStatement","src":"24620:64:6"},{"expression":{"arguments":[{"id":3140,"name":"scaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2895,"src":"24718:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":3137,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2844,"src":"24694:6:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3139,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24701:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"24694:23:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":3141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24694:31:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3142,"nodeType":"ExpressionStatement","src":"24694:31:6"}]},"id":3144,"implemented":true,"kind":"function","modifiers":[],"name":"lookup_linearization_contribution","nameLocation":"22034:33:6","nodeType":"FunctionDefinition","parameters":{"id":2841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2837,"mutability":"mutable","name":"proof","nameLocation":"22081:5:6","nodeType":"VariableDeclaration","scope":3144,"src":"22068:18:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"},"typeName":{"id":2836,"nodeType":"UserDefinedTypeName","pathNode":{"id":2835,"name":"Proof","nameLocations":["22068:5:6"],"nodeType":"IdentifierPath","referencedDeclaration":484,"src":"22068:5:6"},"referencedDeclaration":484,"src":"22068:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"}},"visibility":"internal"},{"constant":false,"id":2840,"mutability":"mutable","name":"state","nameLocation":"22116:5:6","nodeType":"VariableDeclaration","scope":3144,"src":"22088:33:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"},"typeName":{"id":2839,"nodeType":"UserDefinedTypeName","pathNode":{"id":2838,"name":"PartialVerifierState","nameLocations":["22088:20:6"],"nodeType":"IdentifierPath","referencedDeclaration":544,"src":"22088:20:6"},"referencedDeclaration":544,"src":"22088:20:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"}},"visibility":"internal"}],"src":"22067:55:6"},"returnParameters":{"id":2845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2844,"mutability":"mutable","name":"result","nameLocation":"22199:6:6","nodeType":"VariableDeclaration","scope":3144,"src":"22170:35:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":2843,"nodeType":"UserDefinedTypeName","pathNode":{"id":2842,"name":"PairingsBn254.G1Point","nameLocations":["22170:13:6","22184:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"22170:21:6"},"referencedDeclaration":6027,"src":"22170:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"src":"22169:37:6"},"scope":3732,"src":"22025:2707:6","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"Plonk4VerifierWithAccessToDNext.Queries","id":3165,"members":[{"constant":false,"id":3149,"mutability":"mutable","name":"commitments_at_z","nameLocation":"24789:16:6","nodeType":"VariableDeclaration","scope":3165,"src":"24763:42:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$13_storage_ptr","typeString":"struct PairingsBn254.G1Point[13]"},"typeName":{"baseType":{"id":3146,"nodeType":"UserDefinedTypeName","pathNode":{"id":3145,"name":"PairingsBn254.G1Point","nameLocations":["24763:13:6","24777:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"24763:21:6"},"referencedDeclaration":6027,"src":"24763:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"id":3148,"length":{"hexValue":"3133","id":3147,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24785:2:6","typeDescriptions":{"typeIdentifier":"t_rational_13_by_1","typeString":"int_const 13"},"value":"13"},"nodeType":"ArrayTypeName","src":"24763:25:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$13_storage_ptr","typeString":"struct PairingsBn254.G1Point[13]"}},"visibility":"internal"},{"constant":false,"id":3154,"mutability":"mutable","name":"values_at_z","nameLocation":"24836:11:6","nodeType":"VariableDeclaration","scope":3165,"src":"24815:32:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_storage_$13_storage_ptr","typeString":"struct PairingsBn254.Fr[13]"},"typeName":{"baseType":{"id":3151,"nodeType":"UserDefinedTypeName","pathNode":{"id":3150,"name":"PairingsBn254.Fr","nameLocations":["24815:13:6","24829:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"24815:16:6"},"referencedDeclaration":6030,"src":"24815:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"id":3153,"length":{"hexValue":"3133","id":3152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24832:2:6","typeDescriptions":{"typeIdentifier":"t_rational_13_by_1","typeString":"int_const 13"},"value":"13"},"nodeType":"ArrayTypeName","src":"24815:20:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_storage_$13_storage_ptr","typeString":"struct PairingsBn254.Fr[13]"}},"visibility":"internal"},{"constant":false,"id":3159,"mutability":"mutable","name":"commitments_at_z_omega","nameLocation":"24882:22:6","nodeType":"VariableDeclaration","scope":3165,"src":"24857:47:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$6_storage_ptr","typeString":"struct PairingsBn254.G1Point[6]"},"typeName":{"baseType":{"id":3156,"nodeType":"UserDefinedTypeName","pathNode":{"id":3155,"name":"PairingsBn254.G1Point","nameLocations":["24857:13:6","24871:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"24857:21:6"},"referencedDeclaration":6027,"src":"24857:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"id":3158,"length":{"hexValue":"36","id":3157,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24879:1:6","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"nodeType":"ArrayTypeName","src":"24857:24:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$6_storage_ptr","typeString":"struct PairingsBn254.G1Point[6]"}},"visibility":"internal"},{"constant":false,"id":3164,"mutability":"mutable","name":"values_at_z_omega","nameLocation":"24934:17:6","nodeType":"VariableDeclaration","scope":3165,"src":"24914:37:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_storage_$6_storage_ptr","typeString":"struct PairingsBn254.Fr[6]"},"typeName":{"baseType":{"id":3161,"nodeType":"UserDefinedTypeName","pathNode":{"id":3160,"name":"PairingsBn254.Fr","nameLocations":["24914:13:6","24928:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"24914:16:6"},"referencedDeclaration":6030,"src":"24914:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"id":3163,"length":{"hexValue":"36","id":3162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24931:1:6","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"nodeType":"ArrayTypeName","src":"24914:19:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_storage_$6_storage_ptr","typeString":"struct PairingsBn254.Fr[6]"}},"visibility":"internal"}],"name":"Queries","nameLocation":"24745:7:6","nodeType":"StructDefinition","scope":3732,"src":"24738:220:6","visibility":"public"},{"body":{"id":3531,"nodeType":"Block","src":"25146:2738:6","statements":[{"assignments":[3181],"declarations":[{"constant":false,"id":3181,"mutability":"mutable","name":"idx","nameLocation":"25232:3:6","nodeType":"VariableDeclaration","scope":3531,"src":"25224:11:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3180,"name":"uint256","nodeType":"ElementaryTypeName","src":"25224:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3183,"initialValue":{"hexValue":"32","id":3182,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25238:1:6","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"VariableDeclarationStatement","src":"25224:15:6"},{"body":{"id":3225,"nodeType":"Block","src":"25308:202:6","statements":[{"expression":{"id":3206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3197,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"25322:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3200,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25330:16:6","memberName":"commitments_at_z","nodeType":"MemberAccess","referencedDeclaration":3149,"src":"25322:24:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[13] memory"}},"id":3201,"indexExpression":{"id":3199,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"25347:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"25322:29:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":3202,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"25354:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3203,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25360:23:6","memberName":"state_polys_commitments","nodeType":"MemberAccess","referencedDeclaration":414,"src":"25354:29:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":3205,"indexExpression":{"id":3204,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3185,"src":"25384:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25354:32:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"25322:64:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3207,"nodeType":"ExpressionStatement","src":"25322:64:6"},{"expression":{"id":3217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3208,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"25400:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3211,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25408:11:6","memberName":"values_at_z","nodeType":"MemberAccess","referencedDeclaration":3154,"src":"25400:19:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.Fr memory[13] memory"}},"id":3212,"indexExpression":{"id":3210,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"25420:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"25400:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":3213,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"25427:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3214,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25433:25:6","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"25427:31:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":3216,"indexExpression":{"id":3215,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3185,"src":"25459:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25427:34:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"25400:61:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3218,"nodeType":"ExpressionStatement","src":"25400:61:6"},{"expression":{"id":3223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3219,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"25475:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3220,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"25481:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25485:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"25481:16:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":3222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25481:18:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25475:24:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3224,"nodeType":"ExpressionStatement","src":"25475:24:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3188,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3185,"src":"25269:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3189,"name":"STATE_WIDTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"25273:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25269:15:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3226,"initializationExpression":{"assignments":[3185],"declarations":[{"constant":false,"id":3185,"mutability":"mutable","name":"i","nameLocation":"25262:1:6","nodeType":"VariableDeclaration","scope":3226,"src":"25254:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3184,"name":"uint256","nodeType":"ElementaryTypeName","src":"25254:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3187,"initialValue":{"hexValue":"30","id":3186,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25266:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"25254:13:6"},"loopExpression":{"expression":{"id":3195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3191,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3185,"src":"25286:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3192,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3185,"src":"25290:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25292:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"25290:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":3194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25290:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25286:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3196,"nodeType":"ExpressionStatement","src":"25286:20:6"},"nodeType":"ForStatement","src":"25249:261:6"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":3228,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"25527:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3229,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25533:28:6","memberName":"gate_selectors_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":437,"src":"25527:34:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$1_memory_ptr","typeString":"struct PairingsBn254.Fr memory[1] memory"}},"id":3230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25562:6:6","memberName":"length","nodeType":"MemberAccess","src":"25527:41:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":3231,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25572:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25527:46:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":3227,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"25519:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":3233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25519:55:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3234,"nodeType":"ExpressionStatement","src":"25519:55:6"},{"expression":{"id":3244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3235,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"25584:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3238,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25592:16:6","memberName":"commitments_at_z","nodeType":"MemberAccess","referencedDeclaration":3149,"src":"25584:24:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[13] memory"}},"id":3239,"indexExpression":{"id":3237,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"25609:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"25584:29:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":3240,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3168,"src":"25616:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3241,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25619:26:6","memberName":"gate_selectors_commitments","nodeType":"MemberAccess","referencedDeclaration":353,"src":"25616:29:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$2_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[2] memory"}},"id":3243,"indexExpression":{"hexValue":"30","id":3242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25646:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25616:32:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"25584:64:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3245,"nodeType":"ExpressionStatement","src":"25584:64:6"},{"expression":{"id":3255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3246,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"25658:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3249,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25666:11:6","memberName":"values_at_z","nodeType":"MemberAccess","referencedDeclaration":3154,"src":"25658:19:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.Fr memory[13] memory"}},"id":3250,"indexExpression":{"id":3248,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"25678:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"25658:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":3251,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"25685:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3252,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25691:28:6","memberName":"gate_selectors_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":437,"src":"25685:34:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$1_memory_ptr","typeString":"struct PairingsBn254.Fr memory[1] memory"}},"id":3254,"indexExpression":{"hexValue":"30","id":3253,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25720:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25685:37:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"25658:64:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3256,"nodeType":"ExpressionStatement","src":"25658:64:6"},{"expression":{"id":3261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3257,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"25732:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3258,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"25738:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25742:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"25738:16:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":3260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25738:18:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25732:24:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3262,"nodeType":"ExpressionStatement","src":"25732:24:6"},{"body":{"id":3306,"nodeType":"Block","src":"25829:210:6","statements":[{"expression":{"id":3287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3278,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"25843:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3281,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25851:16:6","memberName":"commitments_at_z","nodeType":"MemberAccess","referencedDeclaration":3149,"src":"25843:24:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[13] memory"}},"id":3282,"indexExpression":{"id":3280,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"25868:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"25843:29:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":3283,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3168,"src":"25875:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3284,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25878:23:6","memberName":"permutation_commitments","nodeType":"MemberAccess","referencedDeclaration":363,"src":"25875:26:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":3286,"indexExpression":{"id":3285,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3264,"src":"25902:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25875:29:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"25843:61:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3288,"nodeType":"ExpressionStatement","src":"25843:61:6"},{"expression":{"id":3298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3289,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"25918:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3292,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25926:11:6","memberName":"values_at_z","nodeType":"MemberAccess","referencedDeclaration":3154,"src":"25918:19:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.Fr memory[13] memory"}},"id":3293,"indexExpression":{"id":3291,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"25938:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"25918:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":3294,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"25945:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3295,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25951:36:6","memberName":"copy_permutation_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":444,"src":"25945:42:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$3_memory_ptr","typeString":"struct PairingsBn254.Fr memory[3] memory"}},"id":3297,"indexExpression":{"id":3296,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3264,"src":"25988:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25945:45:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"25918:72:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3299,"nodeType":"ExpressionStatement","src":"25918:72:6"},{"expression":{"id":3304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3300,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"26004:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3301,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"26010:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26014:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"26010:16:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":3303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26010:18:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26004:24:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3305,"nodeType":"ExpressionStatement","src":"26004:24:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3267,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3264,"src":"25786:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3270,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":3268,"name":"STATE_WIDTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"25790:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":3269,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25804:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25790:15:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25786:19:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3307,"initializationExpression":{"assignments":[3264],"declarations":[{"constant":false,"id":3264,"mutability":"mutable","name":"i","nameLocation":"25779:1:6","nodeType":"VariableDeclaration","scope":3307,"src":"25771:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3263,"name":"uint256","nodeType":"ElementaryTypeName","src":"25771:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3266,"initialValue":{"hexValue":"30","id":3265,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25783:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"25771:13:6"},"loopExpression":{"expression":{"id":3276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3272,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3264,"src":"25807:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3273,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3264,"src":"25811:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25813:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"25811:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":3275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25811:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25807:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3277,"nodeType":"ExpressionStatement","src":"25807:20:6"},"nodeType":"ForStatement","src":"25766:273:6"},{"expression":{"id":3315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3308,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"26049:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3311,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26057:22:6","memberName":"commitments_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":3159,"src":"26049:30:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$6_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[6] memory"}},"id":3312,"indexExpression":{"hexValue":"30","id":3310,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26080:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26049:33:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3313,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"26085:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3314,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26091:41:6","memberName":"copy_permutation_grand_product_commitment","nodeType":"MemberAccess","referencedDeclaration":417,"src":"26085:47:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"26049:83:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3316,"nodeType":"ExpressionStatement","src":"26049:83:6"},{"expression":{"id":3328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3317,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"26142:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3320,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26150:22:6","memberName":"commitments_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":3159,"src":"26142:30:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$6_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[6] memory"}},"id":3321,"indexExpression":{"hexValue":"31","id":3319,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26173:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26142:33:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":3322,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"26178:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3323,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26184:23:6","memberName":"state_polys_commitments","nodeType":"MemberAccess","referencedDeclaration":414,"src":"26178:29:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":3327,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3326,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":3324,"name":"STATE_WIDTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"26208:11:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":3325,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26222:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"26208:15:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26178:46:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"26142:82:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3329,"nodeType":"ExpressionStatement","src":"26142:82:6"},{"expression":{"id":3337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3330,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"26235:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3333,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26243:17:6","memberName":"values_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":3164,"src":"26235:25:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$6_memory_ptr","typeString":"struct PairingsBn254.Fr memory[6] memory"}},"id":3334,"indexExpression":{"hexValue":"30","id":3332,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26261:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26235:28:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3335,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"26266:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3336,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26272:49:6","memberName":"copy_permutation_grand_product_opening_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":447,"src":"26266:55:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"26235:86:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3338,"nodeType":"ExpressionStatement","src":"26235:86:6"},{"expression":{"id":3348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3339,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"26331:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3342,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26339:17:6","memberName":"values_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":3164,"src":"26331:25:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$6_memory_ptr","typeString":"struct PairingsBn254.Fr memory[6] memory"}},"id":3343,"indexExpression":{"hexValue":"31","id":3341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26357:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26331:28:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":3344,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"26362:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3345,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26368:31:6","memberName":"state_polys_openings_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":432,"src":"26362:37:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$1_memory_ptr","typeString":"struct PairingsBn254.Fr memory[1] memory"}},"id":3347,"indexExpression":{"hexValue":"30","id":3346,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26400:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26362:40:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"26331:71:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3349,"nodeType":"ExpressionStatement","src":"26331:71:6"},{"assignments":[3354],"declarations":[{"constant":false,"id":3354,"mutability":"mutable","name":"lookup_t_poly_commitment_aggregated","nameLocation":"26442:35:6","nodeType":"VariableDeclaration","scope":3531,"src":"26413:64:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":3353,"nodeType":"UserDefinedTypeName","pathNode":{"id":3352,"name":"PairingsBn254.G1Point","nameLocations":["26413:13:6","26427:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"26413:21:6"},"referencedDeclaration":6027,"src":"26413:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"id":3359,"initialValue":{"baseExpression":{"expression":{"id":3355,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3168,"src":"26480:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3356,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26483:25:6","memberName":"lookup_tables_commitments","nodeType":"MemberAccess","referencedDeclaration":371,"src":"26480:28:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":3358,"indexExpression":{"hexValue":"30","id":3357,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26509:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26480:31:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"VariableDeclarationStatement","src":"26413:98:6"},{"assignments":[3364],"declarations":[{"constant":false,"id":3364,"mutability":"mutable","name":"current_eta","nameLocation":"26545:11:6","nodeType":"VariableDeclaration","scope":3531,"src":"26521:35:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":3363,"nodeType":"UserDefinedTypeName","pathNode":{"id":3362,"name":"PairingsBn254.Fr","nameLocations":["26521:13:6","26535:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"26521:16:6"},"referencedDeclaration":6030,"src":"26521:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":3369,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":3365,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3174,"src":"26559:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":3366,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26565:3:6","memberName":"eta","nodeType":"MemberAccess","referencedDeclaration":504,"src":"26559:9:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3367,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26569:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"26559:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":3368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26559:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"26521:54:6"},{"body":{"id":3411,"nodeType":"Block","src":"26668:214:6","statements":[{"expression":{"id":3395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3385,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3174,"src":"26682:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":3387,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"26688:2:6","memberName":"tp","nodeType":"MemberAccess","referencedDeclaration":543,"src":"26682:8:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3393,"name":"current_eta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3364,"src":"26735:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"baseExpression":{"expression":{"id":3388,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3168,"src":"26693:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3389,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26696:25:6","memberName":"lookup_tables_commitments","nodeType":"MemberAccess","referencedDeclaration":371,"src":"26693:28:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":3391,"indexExpression":{"id":3390,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3371,"src":"26722:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26693:31:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3392,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26725:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"26693:41:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":3394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26693:54:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"26682:65:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3396,"nodeType":"ExpressionStatement","src":"26682:65:6"},{"expression":{"arguments":[{"expression":{"id":3400,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3174,"src":"26814:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":3401,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26820:2:6","memberName":"tp","nodeType":"MemberAccess","referencedDeclaration":543,"src":"26814:8:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":3397,"name":"lookup_t_poly_commitment_aggregated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3354,"src":"26761:35:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3399,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26797:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"26761:52:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":3402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26761:62:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3403,"nodeType":"ExpressionStatement","src":"26761:62:6"},{"expression":{"arguments":[{"expression":{"id":3407,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3174,"src":"26861:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":3408,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26867:3:6","memberName":"eta","nodeType":"MemberAccess","referencedDeclaration":504,"src":"26861:9:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":3404,"name":"current_eta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3364,"src":"26838:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3406,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26850:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"26838:22:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":3409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26838:33:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3410,"nodeType":"ExpressionStatement","src":"26838:33:6"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3374,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3371,"src":"26605:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":3375,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3168,"src":"26609:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3376,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26612:25:6","memberName":"lookup_tables_commitments","nodeType":"MemberAccess","referencedDeclaration":371,"src":"26609:28:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":3377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26638:6:6","memberName":"length","nodeType":"MemberAccess","src":"26609:35:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26605:39:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3412,"initializationExpression":{"assignments":[3371],"declarations":[{"constant":false,"id":3371,"mutability":"mutable","name":"i","nameLocation":"26598:1:6","nodeType":"VariableDeclaration","scope":3412,"src":"26590:9:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3370,"name":"uint256","nodeType":"ElementaryTypeName","src":"26590:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3373,"initialValue":{"hexValue":"31","id":3372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26602:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"26590:13:6"},"loopExpression":{"expression":{"id":3383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3379,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3371,"src":"26646:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3380,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3371,"src":"26650:1:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26652:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"26650:14:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":3382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26650:16:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26646:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3384,"nodeType":"ExpressionStatement","src":"26646:20:6"},"nodeType":"ForStatement","src":"26585:297:6"},{"expression":{"id":3419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3413,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"26891:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3416,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26899:16:6","memberName":"commitments_at_z","nodeType":"MemberAccess","referencedDeclaration":3149,"src":"26891:24:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[13] memory"}},"id":3417,"indexExpression":{"id":3415,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"26916:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26891:29:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3418,"name":"lookup_t_poly_commitment_aggregated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3354,"src":"26923:35:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"26891:67:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3420,"nodeType":"ExpressionStatement","src":"26891:67:6"},{"expression":{"id":3428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3421,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"26968:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3424,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26976:11:6","memberName":"values_at_z","nodeType":"MemberAccess","referencedDeclaration":3154,"src":"26968:19:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.Fr memory[13] memory"}},"id":3425,"indexExpression":{"id":3423,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"26988:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26968:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3426,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"26995:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3427,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27001:26:6","memberName":"lookup_t_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":468,"src":"26995:32:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"26968:59:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3429,"nodeType":"ExpressionStatement","src":"26968:59:6"},{"expression":{"id":3434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3430,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"27037:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3431,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"27043:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27047:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"27043:16:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":3433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27043:18:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27037:24:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3435,"nodeType":"ExpressionStatement","src":"27037:24:6"},{"expression":{"id":3443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3436,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"27071:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3439,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27079:16:6","memberName":"commitments_at_z","nodeType":"MemberAccess","referencedDeclaration":3149,"src":"27071:24:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[13] memory"}},"id":3440,"indexExpression":{"id":3438,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"27096:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27071:29:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3441,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3168,"src":"27103:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3442,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27106:26:6","memberName":"lookup_selector_commitment","nodeType":"MemberAccess","referencedDeclaration":366,"src":"27103:29:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"27071:61:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3444,"nodeType":"ExpressionStatement","src":"27071:61:6"},{"expression":{"id":3452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3445,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"27142:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3448,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27150:11:6","memberName":"values_at_z","nodeType":"MemberAccess","referencedDeclaration":3154,"src":"27142:19:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.Fr memory[13] memory"}},"id":3449,"indexExpression":{"id":3447,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"27162:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27142:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3450,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"27169:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3451,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27175:33:6","memberName":"lookup_selector_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":474,"src":"27169:39:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"27142:66:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3453,"nodeType":"ExpressionStatement","src":"27142:66:6"},{"expression":{"id":3458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3454,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"27218:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3455,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"27224:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27228:12:6","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"27224:16:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":3457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27224:18:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27218:24:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3459,"nodeType":"ExpressionStatement","src":"27218:24:6"},{"expression":{"id":3467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3460,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"27252:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3463,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27260:16:6","memberName":"commitments_at_z","nodeType":"MemberAccess","referencedDeclaration":3149,"src":"27252:24:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[13] memory"}},"id":3464,"indexExpression":{"id":3462,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"27277:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27252:29:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3465,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3168,"src":"27284:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3466,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27287:28:6","memberName":"lookup_table_type_commitment","nodeType":"MemberAccess","referencedDeclaration":374,"src":"27284:31:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"27252:63:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3468,"nodeType":"ExpressionStatement","src":"27252:63:6"},{"expression":{"id":3476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3469,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"27325:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3472,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27333:11:6","memberName":"values_at_z","nodeType":"MemberAccess","referencedDeclaration":3154,"src":"27325:19:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$13_memory_ptr","typeString":"struct PairingsBn254.Fr memory[13] memory"}},"id":3473,"indexExpression":{"id":3471,"name":"idx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3181,"src":"27345:3:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27325:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3474,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"27352:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3475,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27358:35:6","memberName":"lookup_table_type_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":477,"src":"27352:41:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"27325:68:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3477,"nodeType":"ExpressionStatement","src":"27325:68:6"},{"expression":{"id":3485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3478,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"27403:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3481,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27411:22:6","memberName":"commitments_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":3159,"src":"27403:30:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$6_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[6] memory"}},"id":3482,"indexExpression":{"hexValue":"32","id":3480,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27434:1:6","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27403:33:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3483,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"27439:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3484,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27445:24:6","memberName":"lookup_s_poly_commitment","nodeType":"MemberAccess","referencedDeclaration":456,"src":"27439:30:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"27403:66:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3486,"nodeType":"ExpressionStatement","src":"27403:66:6"},{"expression":{"id":3494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3487,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"27479:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3490,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27487:17:6","memberName":"values_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":3164,"src":"27479:25:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$6_memory_ptr","typeString":"struct PairingsBn254.Fr memory[6] memory"}},"id":3491,"indexExpression":{"hexValue":"32","id":3489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27505:1:6","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27479:28:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3492,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"27510:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3493,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27516:32:6","memberName":"lookup_s_poly_opening_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":462,"src":"27510:38:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"27479:69:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3495,"nodeType":"ExpressionStatement","src":"27479:69:6"},{"expression":{"id":3503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3496,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"27558:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3499,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27566:22:6","memberName":"commitments_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":3159,"src":"27558:30:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$6_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[6] memory"}},"id":3500,"indexExpression":{"hexValue":"33","id":3498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27589:1:6","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27558:33:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3501,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"27594:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3502,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27600:31:6","memberName":"lookup_grand_product_commitment","nodeType":"MemberAccess","referencedDeclaration":459,"src":"27594:37:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"27558:73:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3504,"nodeType":"ExpressionStatement","src":"27558:73:6"},{"expression":{"id":3512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3505,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"27641:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3508,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27649:17:6","memberName":"values_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":3164,"src":"27641:25:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$6_memory_ptr","typeString":"struct PairingsBn254.Fr memory[6] memory"}},"id":3509,"indexExpression":{"hexValue":"33","id":3507,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27667:1:6","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27641:28:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3510,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"27672:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3511,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27678:39:6","memberName":"lookup_grand_product_opening_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":465,"src":"27672:45:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"27641:76:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3513,"nodeType":"ExpressionStatement","src":"27641:76:6"},{"expression":{"id":3520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3514,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"27727:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3517,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27735:22:6","memberName":"commitments_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":3159,"src":"27727:30:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$6_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[6] memory"}},"id":3518,"indexExpression":{"hexValue":"34","id":3516,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27758:1:6","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27727:33:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3519,"name":"lookup_t_poly_commitment_aggregated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3354,"src":"27763:35:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"27727:71:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3521,"nodeType":"ExpressionStatement","src":"27727:71:6"},{"expression":{"id":3529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3522,"name":"queries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3178,"src":"27808:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries memory"}},"id":3525,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27816:17:6","memberName":"values_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":3164,"src":"27808:25:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$6_memory_ptr","typeString":"struct PairingsBn254.Fr memory[6] memory"}},"id":3526,"indexExpression":{"hexValue":"34","id":3524,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27834:1:6","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27808:28:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3527,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3171,"src":"27839:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3528,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27845:32:6","memberName":"lookup_t_poly_opening_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":471,"src":"27839:38:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"27808:69:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3530,"nodeType":"ExpressionStatement","src":"27808:69:6"}]},"functionSelector":"97e2957d","id":3532,"implemented":true,"kind":"function","modifiers":[],"name":"prepare_queries","nameLocation":"24973:15:6","nodeType":"FunctionDefinition","parameters":{"id":3175,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3168,"mutability":"mutable","name":"vk","nameLocation":"25021:2:6","nodeType":"VariableDeclaration","scope":3532,"src":"24998:25:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey"},"typeName":{"id":3167,"nodeType":"UserDefinedTypeName","pathNode":{"id":3166,"name":"VerificationKey","nameLocations":["24998:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":387,"src":"24998:15:6"},"referencedDeclaration":387,"src":"24998:15:6","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_storage_ptr","typeString":"struct VerificationKey"}},"visibility":"internal"},{"constant":false,"id":3171,"mutability":"mutable","name":"proof","nameLocation":"25046:5:6","nodeType":"VariableDeclaration","scope":3532,"src":"25033:18:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"},"typeName":{"id":3170,"nodeType":"UserDefinedTypeName","pathNode":{"id":3169,"name":"Proof","nameLocations":["25033:5:6"],"nodeType":"IdentifierPath","referencedDeclaration":484,"src":"25033:5:6"},"referencedDeclaration":484,"src":"25033:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"}},"visibility":"internal"},{"constant":false,"id":3174,"mutability":"mutable","name":"state","nameLocation":"25089:5:6","nodeType":"VariableDeclaration","scope":3532,"src":"25061:33:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"},"typeName":{"id":3173,"nodeType":"UserDefinedTypeName","pathNode":{"id":3172,"name":"PartialVerifierState","nameLocations":["25061:20:6"],"nodeType":"IdentifierPath","referencedDeclaration":544,"src":"25061:20:6"},"referencedDeclaration":544,"src":"25061:20:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"}},"visibility":"internal"}],"src":"24988:112:6"},"returnParameters":{"id":3179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3178,"mutability":"mutable","name":"queries","nameLocation":"25137:7:6","nodeType":"VariableDeclaration","scope":3532,"src":"25122:22:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries"},"typeName":{"id":3177,"nodeType":"UserDefinedTypeName","pathNode":{"id":3176,"name":"Queries","nameLocations":["25122:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":3165,"src":"25122:7:6"},"referencedDeclaration":3165,"src":"25122:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Queries_$3165_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Queries"}},"visibility":"internal"}],"src":"25121:24:6"},"scope":3732,"src":"24964:2920:6","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":3730,"nodeType":"Block","src":"28375:1704:6","statements":[{"assignments":[3564],"declarations":[{"constant":false,"id":3564,"mutability":"mutable","name":"pair_with_generator","nameLocation":"28510:19:6","nodeType":"VariableDeclaration","scope":3730,"src":"28481:48:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":3563,"nodeType":"UserDefinedTypeName","pathNode":{"id":3562,"name":"PairingsBn254.G1Point","nameLocations":["28481:13:6","28495:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"28481:21:6"},"referencedDeclaration":6027,"src":"28481:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"id":3568,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3565,"name":"aggregated_commitment_at_z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3546,"src":"28532:26:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3566,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28559:7:6","memberName":"copy_g1","nodeType":"MemberAccess","referencedDeclaration":6387,"src":"28532:34:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_G1Point_$6027_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory) pure returns (struct PairingsBn254.G1Point memory)"}},"id":3567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28532:36:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"VariableDeclarationStatement","src":"28481:87:6"},{"expression":{"arguments":[{"expression":{"id":3572,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3543,"src":"28628:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":3573,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28634:1:6","memberName":"u","nodeType":"MemberAccess","referencedDeclaration":522,"src":"28628:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":3569,"name":"aggregated_commitment_at_z_omega","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3549,"src":"28578:32:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3571,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28611:16:6","memberName":"point_mul_assign","nodeType":"MemberAccess","referencedDeclaration":6763,"src":"28578:49:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view"}},"id":3574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28578:58:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3575,"nodeType":"ExpressionStatement","src":"28578:58:6"},{"expression":{"arguments":[{"id":3579,"name":"aggregated_commitment_at_z_omega","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3549,"src":"28683:32:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":3576,"name":"pair_with_generator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3564,"src":"28646:19:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3578,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28666:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"28646:36:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":3580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28646:70:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3581,"nodeType":"ExpressionStatement","src":"28646:70:6"},{"assignments":[3586],"declarations":[{"constant":false,"id":3586,"mutability":"mutable","name":"aggregated_value","nameLocation":"28771:16:6","nodeType":"VariableDeclaration","scope":3730,"src":"28747:40:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":3585,"nodeType":"UserDefinedTypeName","pathNode":{"id":3584,"name":"PairingsBn254.Fr","nameLocations":["28747:13:6","28761:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"28747:16:6"},"referencedDeclaration":6030,"src":"28747:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":3590,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3587,"name":"aggregated_opening_at_z_omega","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3555,"src":"28790:29:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3588,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28820:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"28790:34:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":3589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28790:36:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"28747:79:6"},{"expression":{"arguments":[{"expression":{"id":3594,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3543,"src":"28864:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":3595,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28870:1:6","memberName":"u","nodeType":"MemberAccess","referencedDeclaration":522,"src":"28864:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":3591,"name":"aggregated_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3586,"src":"28836:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3593,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28853:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"28836:27:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":3596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28836:36:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3597,"nodeType":"ExpressionStatement","src":"28836:36:6"},{"expression":{"arguments":[{"id":3601,"name":"aggregated_opening_at_z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3552,"src":"28910:23:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":3598,"name":"aggregated_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3586,"src":"28882:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3600,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28899:10:6","memberName":"add_assign","nodeType":"MemberAccess","referencedDeclaration":6129,"src":"28882:27:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":3602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28882:52:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3603,"nodeType":"ExpressionStatement","src":"28882:52:6"},{"assignments":[3608],"declarations":[{"constant":false,"id":3608,"mutability":"mutable","name":"tp","nameLocation":"28973:2:6","nodeType":"VariableDeclaration","scope":3730,"src":"28944:31:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":3607,"nodeType":"UserDefinedTypeName","pathNode":{"id":3606,"name":"PairingsBn254.G1Point","nameLocations":["28944:13:6","28958:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"28944:21:6"},"referencedDeclaration":6027,"src":"28944:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"id":3615,"initialValue":{"arguments":[{"id":3613,"name":"aggregated_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3586,"src":"29007:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3609,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"28978:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":3610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28992:2:6","memberName":"P1","nodeType":"MemberAccess","referencedDeclaration":6244,"src":"28978:16:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function () pure returns (struct PairingsBn254.G1Point memory)"}},"id":3611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28978:18:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3612,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28997:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"28978:28:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":3614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28978:46:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"VariableDeclarationStatement","src":"28944:80:6"},{"expression":{"arguments":[{"id":3619,"name":"tp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3608,"src":"29071:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":3616,"name":"pair_with_generator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3564,"src":"29034:19:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3618,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29054:16:6","memberName":"point_sub_assign","nodeType":"MemberAccess","referencedDeclaration":6595,"src":"29034:36:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":3620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29034:40:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3621,"nodeType":"ExpressionStatement","src":"29034:40:6"},{"expression":{"id":3629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3622,"name":"tp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3608,"src":"29106:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":3626,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3543,"src":"29146:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":3627,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29152:1:6","memberName":"z","nodeType":"MemberAccess","referencedDeclaration":525,"src":"29146:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"expression":{"id":3623,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3540,"src":"29111:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3624,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29117:18:6","memberName":"opening_proof_at_z","nodeType":"MemberAccess","referencedDeclaration":480,"src":"29111:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3625,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29136:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"29111:34:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":3628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29111:43:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"29106:48:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3630,"nodeType":"ExpressionStatement","src":"29106:48:6"},{"assignments":[3635],"declarations":[{"constant":false,"id":3635,"mutability":"mutable","name":"t","nameLocation":"29188:1:6","nodeType":"VariableDeclaration","scope":3730,"src":"29164:25:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":3634,"nodeType":"UserDefinedTypeName","pathNode":{"id":3633,"name":"PairingsBn254.Fr","nameLocations":["29164:13:6","29178:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"29164:16:6"},"referencedDeclaration":6030,"src":"29164:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"id":3640,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":3636,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3543,"src":"29192:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":3637,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29198:7:6","memberName":"z_omega","nodeType":"MemberAccess","referencedDeclaration":528,"src":"29192:13:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3638,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29206:4:6","memberName":"copy","nodeType":"MemberAccess","referencedDeclaration":6066,"src":"29192:18:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_Fr_$6030_memory_ptr_$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory) pure returns (struct PairingsBn254.Fr memory)"}},"id":3639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29192:20:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"VariableDeclarationStatement","src":"29164:48:6"},{"expression":{"arguments":[{"expression":{"id":3644,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3543,"src":"29235:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":3645,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29241:1:6","memberName":"u","nodeType":"MemberAccess","referencedDeclaration":522,"src":"29235:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"id":3641,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3635,"src":"29222:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3643,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29224:10:6","memberName":"mul_assign","nodeType":"MemberAccess","referencedDeclaration":6175,"src":"29222:12:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$__$bound_to$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory) pure"}},"id":3646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29222:21:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3647,"nodeType":"ExpressionStatement","src":"29222:21:6"},{"assignments":[3652],"declarations":[{"constant":false,"id":3652,"mutability":"mutable","name":"t1","nameLocation":"29282:2:6","nodeType":"VariableDeclaration","scope":3730,"src":"29253:31:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":3651,"nodeType":"UserDefinedTypeName","pathNode":{"id":3650,"name":"PairingsBn254.G1Point","nameLocations":["29253:13:6","29267:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"29253:21:6"},"referencedDeclaration":6027,"src":"29253:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"id":3658,"initialValue":{"arguments":[{"id":3656,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3635,"src":"29328:1:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"expression":{"id":3653,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3540,"src":"29287:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3654,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29293:24:6","memberName":"opening_proof_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":483,"src":"29287:30:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3655,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29318:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"29287:40:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":3657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29287:43:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"VariableDeclarationStatement","src":"29253:77:6"},{"expression":{"arguments":[{"id":3662,"name":"t1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3652,"src":"29360:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":3659,"name":"tp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3608,"src":"29340:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3661,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29343:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"29340:19:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":3663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29340:23:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3664,"nodeType":"ExpressionStatement","src":"29340:23:6"},{"expression":{"arguments":[{"id":3668,"name":"tp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3608,"src":"29410:2:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":3665,"name":"pair_with_generator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3564,"src":"29373:19:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3667,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29393:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"29373:36:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":3669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29373:40:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3670,"nodeType":"ExpressionStatement","src":"29373:40:6"},{"assignments":[3675],"declarations":[{"constant":false,"id":3675,"mutability":"mutable","name":"pair_with_x","nameLocation":"29468:11:6","nodeType":"VariableDeclaration","scope":3730,"src":"29439:40:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":3674,"nodeType":"UserDefinedTypeName","pathNode":{"id":3673,"name":"PairingsBn254.G1Point","nameLocations":["29439:13:6","29453:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"29439:21:6"},"referencedDeclaration":6027,"src":"29439:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"id":3682,"initialValue":{"arguments":[{"expression":{"id":3679,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3543,"src":"29523:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory"}},"id":3680,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29529:1:6","memberName":"u","nodeType":"MemberAccess","referencedDeclaration":522,"src":"29523:7:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}],"expression":{"expression":{"id":3676,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3540,"src":"29482:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3677,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29488:24:6","memberName":"opening_proof_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":483,"src":"29482:30:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3678,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29513:9:6","memberName":"point_mul","nodeType":"MemberAccess","referencedDeclaration":6747,"src":"29482:40:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$returns$_t_struct$_G1Point_$6027_memory_ptr_$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory) view returns (struct PairingsBn254.G1Point memory)"}},"id":3681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29482:49:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"VariableDeclarationStatement","src":"29439:92:6"},{"expression":{"arguments":[{"expression":{"id":3686,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3540,"src":"29570:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":3687,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29576:18:6","memberName":"opening_proof_at_z","nodeType":"MemberAccess","referencedDeclaration":480,"src":"29570:24:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"expression":{"id":3683,"name":"pair_with_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3675,"src":"29541:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3685,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29553:16:6","memberName":"point_add_assign","nodeType":"MemberAccess","referencedDeclaration":6470,"src":"29541:28:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":3688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29541:54:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3689,"nodeType":"ExpressionStatement","src":"29541:54:6"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3690,"name":"pair_with_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3675,"src":"29605:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3692,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29617:6:6","memberName":"negate","nodeType":"MemberAccess","referencedDeclaration":6433,"src":"29605:18:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$bound_to$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (struct PairingsBn254.G1Point memory) pure"}},"id":3693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29605:20:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3694,"nodeType":"ExpressionStatement","src":"29605:20:6"},{"assignments":[3699],"declarations":[{"constant":false,"id":3699,"mutability":"mutable","name":"first_g2","nameLocation":"29819:8:6","nodeType":"VariableDeclaration","scope":3730,"src":"29790:37:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point"},"typeName":{"id":3698,"nodeType":"UserDefinedTypeName","pathNode":{"id":3697,"name":"PairingsBn254.G2Point","nameLocations":["29790:13:6","29804:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6232,"src":"29790:21:6"},"referencedDeclaration":6232,"src":"29790:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_storage_ptr","typeString":"struct PairingsBn254.G2Point"}},"visibility":"internal"}],"id":3703,"initialValue":{"baseExpression":{"id":3700,"name":"g2_elements","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3537,"src":"29830:11:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$2_memory_ptr","typeString":"struct PairingsBn254.G2Point memory[2] memory"}},"id":3702,"indexExpression":{"hexValue":"30","id":3701,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29842:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29830:14:6","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"nodeType":"VariableDeclarationStatement","src":"29790:54:6"},{"assignments":[3708],"declarations":[{"constant":false,"id":3708,"mutability":"mutable","name":"second_g2","nameLocation":"29883:9:6","nodeType":"VariableDeclaration","scope":3730,"src":"29854:38:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point"},"typeName":{"id":3707,"nodeType":"UserDefinedTypeName","pathNode":{"id":3706,"name":"PairingsBn254.G2Point","nameLocations":["29854:13:6","29868:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6232,"src":"29854:21:6"},"referencedDeclaration":6232,"src":"29854:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_storage_ptr","typeString":"struct PairingsBn254.G2Point"}},"visibility":"internal"}],"id":3712,"initialValue":{"baseExpression":{"id":3709,"name":"g2_elements","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3537,"src":"29895:11:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$2_memory_ptr","typeString":"struct PairingsBn254.G2Point memory[2] memory"}},"id":3711,"indexExpression":{"hexValue":"31","id":3710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29907:1:6","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29895:14:6","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"nodeType":"VariableDeclarationStatement","src":"29854:55:6"},{"assignments":[3717],"declarations":[{"constant":false,"id":3717,"mutability":"mutable","name":"gen2","nameLocation":"29948:4:6","nodeType":"VariableDeclaration","scope":3730,"src":"29919:33:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point"},"typeName":{"id":3716,"nodeType":"UserDefinedTypeName","pathNode":{"id":3715,"name":"PairingsBn254.G2Point","nameLocations":["29919:13:6","29933:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6232,"src":"29919:21:6"},"referencedDeclaration":6232,"src":"29919:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_storage_ptr","typeString":"struct PairingsBn254.G2Point"}},"visibility":"internal"}],"id":3721,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3718,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"29955:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":3719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29969:2:6","memberName":"P2","nodeType":"MemberAccess","referencedDeclaration":6403,"src":"29955:16:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_G2Point_$6232_memory_ptr_$","typeString":"function () pure returns (struct PairingsBn254.G2Point memory)"}},"id":3720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29955:18:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"nodeType":"VariableDeclarationStatement","src":"29919:54:6"},{"expression":{"arguments":[{"id":3724,"name":"pair_with_generator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3564,"src":"30018:19:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},{"id":3725,"name":"first_g2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3699,"src":"30039:8:6","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},{"id":3726,"name":"pair_with_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3675,"src":"30049:11:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},{"id":3727,"name":"second_g2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3708,"src":"30062:9:6","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"},{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"},{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"},{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}],"expression":{"id":3722,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"29991:13:6","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":3723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30005:12:6","memberName":"pairingProd2","nodeType":"MemberAccess","referencedDeclaration":7048,"src":"29991:26:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G2Point_$6232_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G2Point_$6232_memory_ptr_$returns$_t_bool_$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G2Point memory,struct PairingsBn254.G1Point memory,struct PairingsBn254.G2Point memory) view returns (bool)"}},"id":3728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29991:81:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3559,"id":3729,"nodeType":"Return","src":"29984:88:6"}]},"id":3731,"implemented":true,"kind":"function","modifiers":[],"name":"final_pairing","nameLocation":"27899:13:6","nodeType":"FunctionDefinition","parameters":{"id":3556,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3537,"mutability":"mutable","name":"g2_elements","nameLocation":"28001:11:6","nodeType":"VariableDeclaration","scope":3731,"src":"27960:52:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$2_memory_ptr","typeString":"struct PairingsBn254.G2Point[2]"},"typeName":{"baseType":{"id":3534,"nodeType":"UserDefinedTypeName","pathNode":{"id":3533,"name":"PairingsBn254.G2Point","nameLocations":["27960:13:6","27974:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6232,"src":"27960:21:6"},"referencedDeclaration":6232,"src":"27960:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_storage_ptr","typeString":"struct PairingsBn254.G2Point"}},"id":3536,"length":{"id":3535,"name":"NUM_G2_ELS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":341,"src":"27982:10:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"ArrayTypeName","src":"27960:33:6","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_storage_$2_storage_ptr","typeString":"struct PairingsBn254.G2Point[2]"}},"visibility":"internal"},{"constant":false,"id":3540,"mutability":"mutable","name":"proof","nameLocation":"28035:5:6","nodeType":"VariableDeclaration","scope":3731,"src":"28022:18:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"},"typeName":{"id":3539,"nodeType":"UserDefinedTypeName","pathNode":{"id":3538,"name":"Proof","nameLocations":["28022:5:6"],"nodeType":"IdentifierPath","referencedDeclaration":484,"src":"28022:5:6"},"referencedDeclaration":484,"src":"28022:5:6","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"}},"visibility":"internal"},{"constant":false,"id":3543,"mutability":"mutable","name":"state","nameLocation":"28078:5:6","nodeType":"VariableDeclaration","scope":3731,"src":"28050:33:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"},"typeName":{"id":3542,"nodeType":"UserDefinedTypeName","pathNode":{"id":3541,"name":"PartialVerifierState","nameLocations":["28050:20:6"],"nodeType":"IdentifierPath","referencedDeclaration":544,"src":"28050:20:6"},"referencedDeclaration":544,"src":"28050:20:6","typeDescriptions":{"typeIdentifier":"t_struct$_PartialVerifierState_$544_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState"}},"visibility":"internal"},{"constant":false,"id":3546,"mutability":"mutable","name":"aggregated_commitment_at_z","nameLocation":"28122:26:6","nodeType":"VariableDeclaration","scope":3731,"src":"28093:55:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":3545,"nodeType":"UserDefinedTypeName","pathNode":{"id":3544,"name":"PairingsBn254.G1Point","nameLocations":["28093:13:6","28107:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"28093:21:6"},"referencedDeclaration":6027,"src":"28093:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":3549,"mutability":"mutable","name":"aggregated_commitment_at_z_omega","nameLocation":"28187:32:6","nodeType":"VariableDeclaration","scope":3731,"src":"28158:61:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":3548,"nodeType":"UserDefinedTypeName","pathNode":{"id":3547,"name":"PairingsBn254.G1Point","nameLocations":["28158:13:6","28172:7:6"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"28158:21:6"},"referencedDeclaration":6027,"src":"28158:21:6","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":3552,"mutability":"mutable","name":"aggregated_opening_at_z","nameLocation":"28253:23:6","nodeType":"VariableDeclaration","scope":3731,"src":"28229:47:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":3551,"nodeType":"UserDefinedTypeName","pathNode":{"id":3550,"name":"PairingsBn254.Fr","nameLocations":["28229:13:6","28243:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"28229:16:6"},"referencedDeclaration":6030,"src":"28229:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":3555,"mutability":"mutable","name":"aggregated_opening_at_z_omega","nameLocation":"28310:29:6","nodeType":"VariableDeclaration","scope":3731,"src":"28286:53:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":3554,"nodeType":"UserDefinedTypeName","pathNode":{"id":3553,"name":"PairingsBn254.Fr","nameLocations":["28286:13:6","28300:2:6"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"28286:16:6"},"referencedDeclaration":6030,"src":"28286:16:6","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"27912:433:6"},"returnParameters":{"id":3559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3558,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3731,"src":"28369:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3557,"name":"bool","nodeType":"ElementaryTypeName","src":"28369:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"28368:6:6"},"scope":3732,"src":"27890:2189:6","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":3733,"src":"817:29264:6","usedErrors":[]}],"src":"47:30035:6"},"id":6},"@matterlabs/zksync-contracts/l1/contracts/zksync/Storage.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/Storage.sol","exportedSymbols":{"AppStorage":[3843],"DiamondCutStorage":[3756],"IAllowList":[207],"L2Log":[3769],"L2Message":[3776],"NUM_G2_ELS":[341],"PairingsBn254":[7049],"Plonk4VerifierWithAccessToDNext":[3732],"PriorityOperation":[7058],"PriorityQueue":[7237],"STATE_WIDTH":[338],"TranscriptLib":[7416],"UncheckedMath":[330],"VerificationKey":[387],"Verifier":[4749],"VerifierParams":[3783]},"id":3844,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":3734,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"47:23:7"},{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/Verifier.sol","file":"./Verifier.sol","id":3735,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3844,"sourceUnit":4750,"src":"72:24:7","symbolAliases":[],"unitAlias":""},{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IAllowList.sol","file":"../common/interfaces/IAllowList.sol","id":3736,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3844,"sourceUnit":208,"src":"97:45:7","symbolAliases":[],"unitAlias":""},{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PriorityQueue.sol","file":"./libraries/PriorityQueue.sol","id":3737,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3844,"sourceUnit":7238,"src":"143:39:7","symbolAliases":[],"unitAlias":""},{"canonicalName":"DiamondCutStorage","id":3756,"members":[{"constant":false,"id":3739,"mutability":"mutable","name":"proposedDiamondCutHash","nameLocation":"1205:22:7","nodeType":"VariableDeclaration","scope":3756,"src":"1197:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3738,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1197:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3741,"mutability":"mutable","name":"proposedDiamondCutTimestamp","nameLocation":"1241:27:7","nodeType":"VariableDeclaration","scope":3756,"src":"1233:35:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3740,"name":"uint256","nodeType":"ElementaryTypeName","src":"1233:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3743,"mutability":"mutable","name":"lastDiamondFreezeTimestamp","nameLocation":"1282:26:7","nodeType":"VariableDeclaration","scope":3756,"src":"1274:34:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3742,"name":"uint256","nodeType":"ElementaryTypeName","src":"1274:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3745,"mutability":"mutable","name":"currentProposalId","nameLocation":"1322:17:7","nodeType":"VariableDeclaration","scope":3756,"src":"1314:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3744,"name":"uint256","nodeType":"ElementaryTypeName","src":"1314:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3749,"mutability":"mutable","name":"securityCouncilMembers","nameLocation":"1370:22:7","nodeType":"VariableDeclaration","scope":3756,"src":"1345:47:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":3748,"keyType":{"id":3746,"name":"address","nodeType":"ElementaryTypeName","src":"1353:7:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1345:24:7","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueType":{"id":3747,"name":"bool","nodeType":"ElementaryTypeName","src":"1364:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":3753,"mutability":"mutable","name":"securityCouncilMemberLastApprovedProposalId","nameLocation":"1426:43:7","nodeType":"VariableDeclaration","scope":3756,"src":"1398:71:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":3752,"keyType":{"id":3750,"name":"address","nodeType":"ElementaryTypeName","src":"1406:7:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1398:27:7","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":3751,"name":"uint256","nodeType":"ElementaryTypeName","src":"1417:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":3755,"mutability":"mutable","name":"securityCouncilEmergencyApprovals","nameLocation":"1483:33:7","nodeType":"VariableDeclaration","scope":3756,"src":"1475:41:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3754,"name":"uint256","nodeType":"ElementaryTypeName","src":"1475:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"DiamondCutStorage","nameLocation":"1173:17:7","nodeType":"StructDefinition","scope":3844,"src":"1166:353:7","visibility":"public"},{"canonicalName":"L2Log","id":3769,"members":[{"constant":false,"id":3758,"mutability":"mutable","name":"l2ShardId","nameLocation":"2248:9:7","nodeType":"VariableDeclaration","scope":3769,"src":"2242:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3757,"name":"uint8","nodeType":"ElementaryTypeName","src":"2242:5:7","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":3760,"mutability":"mutable","name":"isService","nameLocation":"2268:9:7","nodeType":"VariableDeclaration","scope":3769,"src":"2263:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3759,"name":"bool","nodeType":"ElementaryTypeName","src":"2263:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3762,"mutability":"mutable","name":"txNumberInBlock","nameLocation":"2290:15:7","nodeType":"VariableDeclaration","scope":3769,"src":"2283:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":3761,"name":"uint16","nodeType":"ElementaryTypeName","src":"2283:6:7","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":3764,"mutability":"mutable","name":"sender","nameLocation":"2319:6:7","nodeType":"VariableDeclaration","scope":3769,"src":"2311:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3763,"name":"address","nodeType":"ElementaryTypeName","src":"2311:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3766,"mutability":"mutable","name":"key","nameLocation":"2339:3:7","nodeType":"VariableDeclaration","scope":3769,"src":"2331:11:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3765,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2331:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3768,"mutability":"mutable","name":"value","nameLocation":"2356:5:7","nodeType":"VariableDeclaration","scope":3769,"src":"2348:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3767,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2348:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"L2Log","nameLocation":"2230:5:7","nodeType":"StructDefinition","scope":3844,"src":"2223:141:7","visibility":"public"},{"canonicalName":"L2Message","id":3776,"members":[{"constant":false,"id":3771,"mutability":"mutable","name":"txNumberInBlock","nameLocation":"2751:15:7","nodeType":"VariableDeclaration","scope":3776,"src":"2744:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":3770,"name":"uint16","nodeType":"ElementaryTypeName","src":"2744:6:7","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":3773,"mutability":"mutable","name":"sender","nameLocation":"2780:6:7","nodeType":"VariableDeclaration","scope":3776,"src":"2772:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3772,"name":"address","nodeType":"ElementaryTypeName","src":"2772:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3775,"mutability":"mutable","name":"data","nameLocation":"2798:4:7","nodeType":"VariableDeclaration","scope":3776,"src":"2792:10:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":3774,"name":"bytes","nodeType":"ElementaryTypeName","src":"2792:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"L2Message","nameLocation":"2728:9:7","nodeType":"StructDefinition","scope":3844,"src":"2721:84:7","visibility":"public"},{"canonicalName":"VerifierParams","id":3783,"members":[{"constant":false,"id":3778,"mutability":"mutable","name":"recursionNodeLevelVkHash","nameLocation":"2908:24:7","nodeType":"VariableDeclaration","scope":3783,"src":"2900:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3777,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2900:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3780,"mutability":"mutable","name":"recursionLeafLevelVkHash","nameLocation":"2946:24:7","nodeType":"VariableDeclaration","scope":3783,"src":"2938:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3779,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2938:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3782,"mutability":"mutable","name":"recursionCircuitsSetVksHash","nameLocation":"2984:27:7","nodeType":"VariableDeclaration","scope":3783,"src":"2976:35:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3781,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2976:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"VerifierParams","nameLocation":"2879:14:7","nodeType":"StructDefinition","scope":3844,"src":"2872:142:7","visibility":"public"},{"canonicalName":"AppStorage","id":3843,"members":[{"constant":false,"id":3787,"mutability":"mutable","name":"diamondCutStorage","nameLocation":"3338:17:7","nodeType":"VariableDeclaration","scope":3843,"src":"3320:35:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondCutStorage_$3756_storage_ptr","typeString":"struct DiamondCutStorage"},"typeName":{"id":3786,"nodeType":"UserDefinedTypeName","pathNode":{"id":3785,"name":"DiamondCutStorage","nameLocations":["3320:17:7"],"nodeType":"IdentifierPath","referencedDeclaration":3756,"src":"3320:17:7"},"referencedDeclaration":3756,"src":"3320:17:7","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondCutStorage_$3756_storage_ptr","typeString":"struct DiamondCutStorage"}},"visibility":"internal"},{"constant":false,"id":3790,"mutability":"mutable","name":"governor","nameLocation":"3485:8:7","nodeType":"VariableDeclaration","scope":3843,"src":"3477:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3789,"name":"address","nodeType":"ElementaryTypeName","src":"3477:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3793,"mutability":"mutable","name":"pendingGovernor","nameLocation":"3582:15:7","nodeType":"VariableDeclaration","scope":3843,"src":"3574:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3792,"name":"address","nodeType":"ElementaryTypeName","src":"3574:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3798,"mutability":"mutable","name":"validators","nameLocation":"3673:10:7","nodeType":"VariableDeclaration","scope":3843,"src":"3648:35:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":3797,"keyType":{"id":3795,"name":"address","nodeType":"ElementaryTypeName","src":"3656:7:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3648:24:7","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueType":{"id":3796,"name":"bool","nodeType":"ElementaryTypeName","src":"3667:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":3802,"mutability":"mutable","name":"verifier","nameLocation":"3830:8:7","nodeType":"VariableDeclaration","scope":3843,"src":"3821:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_Verifier_$4749","typeString":"contract Verifier"},"typeName":{"id":3801,"nodeType":"UserDefinedTypeName","pathNode":{"id":3800,"name":"Verifier","nameLocations":["3821:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":4749,"src":"3821:8:7"},"referencedDeclaration":4749,"src":"3821:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_Verifier_$4749","typeString":"contract Verifier"}},"visibility":"internal"},{"constant":false,"id":3805,"mutability":"mutable","name":"totalBlocksExecuted","nameLocation":"3990:19:7","nodeType":"VariableDeclaration","scope":3843,"src":"3982:27:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3804,"name":"uint256","nodeType":"ElementaryTypeName","src":"3982:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3808,"mutability":"mutable","name":"totalBlocksVerified","nameLocation":"4134:19:7","nodeType":"VariableDeclaration","scope":3843,"src":"4126:27:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3807,"name":"uint256","nodeType":"ElementaryTypeName","src":"4126:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3811,"mutability":"mutable","name":"totalBlocksCommitted","nameLocation":"4287:20:7","nodeType":"VariableDeclaration","scope":3843,"src":"4279:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3810,"name":"uint256","nodeType":"ElementaryTypeName","src":"4279:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3816,"mutability":"mutable","name":"storedBlockHashes","nameLocation":"4397:17:7","nodeType":"VariableDeclaration","scope":3843,"src":"4369:45:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":3815,"keyType":{"id":3813,"name":"uint256","nodeType":"ElementaryTypeName","src":"4377:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"4369:27:7","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueType":{"id":3814,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4388:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"},{"constant":false,"id":3821,"mutability":"mutable","name":"l2LogsRootHashes","nameLocation":"4497:16:7","nodeType":"VariableDeclaration","scope":3843,"src":"4469:44:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":3820,"keyType":{"id":3818,"name":"uint256","nodeType":"ElementaryTypeName","src":"4477:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"4469:27:7","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueType":{"id":3819,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4488:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"},{"constant":false,"id":3825,"mutability":"mutable","name":"priorityQueue","nameLocation":"4605:13:7","nodeType":"VariableDeclaration","scope":3843,"src":"4585:33:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue"},"typeName":{"id":3824,"nodeType":"UserDefinedTypeName","pathNode":{"id":3823,"name":"PriorityQueue.Queue","nameLocations":["4585:13:7","4599:5:7"],"nodeType":"IdentifierPath","referencedDeclaration":7073,"src":"4585:19:7"},"referencedDeclaration":7073,"src":"4585:19:7","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue"}},"visibility":"internal"},{"constant":false,"id":3829,"mutability":"mutable","name":"allowList","nameLocation":"4732:9:7","nodeType":"VariableDeclaration","scope":3843,"src":"4721:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAllowList_$207","typeString":"contract IAllowList"},"typeName":{"id":3828,"nodeType":"UserDefinedTypeName","pathNode":{"id":3827,"name":"IAllowList","nameLocations":["4721:10:7"],"nodeType":"IdentifierPath","referencedDeclaration":207,"src":"4721:10:7"},"referencedDeclaration":207,"src":"4721:10:7","typeDescriptions":{"typeIdentifier":"t_contract$_IAllowList_$207","typeString":"contract IAllowList"}},"visibility":"internal"},{"constant":false,"id":3833,"mutability":"mutable","name":"verifierParams","nameLocation":"4881:14:7","nodeType":"VariableDeclaration","scope":3843,"src":"4866:29:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_VerifierParams_$3783_storage_ptr","typeString":"struct VerifierParams"},"typeName":{"id":3832,"nodeType":"UserDefinedTypeName","pathNode":{"id":3831,"name":"VerifierParams","nameLocations":["4866:14:7"],"nodeType":"IdentifierPath","referencedDeclaration":3783,"src":"4866:14:7"},"referencedDeclaration":3783,"src":"4866:14:7","typeDescriptions":{"typeIdentifier":"t_struct$_VerifierParams_$3783_storage_ptr","typeString":"struct VerifierParams"}},"visibility":"internal"},{"constant":false,"id":3836,"mutability":"mutable","name":"l2BootloaderBytecodeHash","nameLocation":"5008:24:7","nodeType":"VariableDeclaration","scope":3843,"src":"5000:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3835,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5000:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3839,"mutability":"mutable","name":"l2DefaultAccountBytecodeHash","nameLocation":"5161:28:7","nodeType":"VariableDeclaration","scope":3843,"src":"5153:36:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3838,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5153:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3842,"mutability":"mutable","name":"zkPorterIsAvailable","nameLocation":"5320:19:7","nodeType":"VariableDeclaration","scope":3843,"src":"5315:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3841,"name":"bool","nodeType":"ElementaryTypeName","src":"5315:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"AppStorage","nameLocation":"3240:10:7","nodeType":"StructDefinition","scope":3844,"src":"3233:2109:7","visibility":"public"}],"src":"47:5296:7"},"id":7},"@matterlabs/zksync-contracts/l1/contracts/zksync/Verifier.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/Verifier.sol","exportedSymbols":{"NUM_G2_ELS":[341],"PairingsBn254":[7049],"Plonk4VerifierWithAccessToDNext":[3732],"STATE_WIDTH":[338],"TranscriptLib":[7416],"UncheckedMath":[330],"VerificationKey":[387],"Verifier":[4749]},"id":4750,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":3845,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"47:23:8"},{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/common/libraries/UncheckedMath.sol","file":"../common/libraries/UncheckedMath.sol","id":3846,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4750,"sourceUnit":331,"src":"72:47:8","symbolAliases":[],"unitAlias":""},{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/Plonk4VerifierWithAccessToDNext.sol","file":"./Plonk4VerifierWithAccessToDNext.sol","id":3847,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4750,"sourceUnit":3733,"src":"120:47:8","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3848,"name":"Plonk4VerifierWithAccessToDNext","nameLocations":["190:31:8"],"nodeType":"IdentifierPath","referencedDeclaration":3732,"src":"190:31:8"},"id":3849,"nodeType":"InheritanceSpecifier","src":"190:31:8"}],"canonicalName":"Verifier","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":4749,"linearizedBaseContracts":[4749,3732],"name":"Verifier","nameLocation":"178:8:8","nodeType":"ContractDefinition","nodes":[{"global":false,"id":3852,"libraryName":{"id":3850,"name":"UncheckedMath","nameLocations":["234:13:8"],"nodeType":"IdentifierPath","referencedDeclaration":330,"src":"234:13:8"},"nodeType":"UsingForDirective","src":"228:32:8","typeName":{"id":3851,"name":"uint256","nodeType":"ElementaryTypeName","src":"252:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"body":{"id":4168,"nodeType":"Block","src":"348:6008:8","statements":[{"expression":{"id":3862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3858,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"358:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3860,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"361:10:8","memberName":"num_inputs","nodeType":"MemberAccess","referencedDeclaration":345,"src":"358:13:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":3861,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"374:1:8","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"358:17:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3863,"nodeType":"ExpressionStatement","src":"358:17:8"},{"expression":{"id":3868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3864,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"385:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3866,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"388:11:8","memberName":"domain_size","nodeType":"MemberAccess","referencedDeclaration":343,"src":"385:14:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"323536","id":3867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"402:3:8","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"src":"385:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3869,"nodeType":"ExpressionStatement","src":"385:20:8"},{"expression":{"id":3877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3870,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"415:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3872,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"418:5:8","memberName":"omega","nodeType":"MemberAccess","referencedDeclaration":348,"src":"415:8:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307831303538613833643532396265353835383230623936666630613133663264626438363735613965356464323333366136363932636331653561353236633831","id":3875,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"447:66:8","typeDescriptions":{"typeIdentifier":"t_rational_7393649265675507591155086225434297871937368251641985215568891852805958167681_by_1","typeString":"int_const 7393...(68 digits omitted)...7681"},"value":"0x1058a83d529be585820b96ff0a13f2dbd8675a9e5dd2336a6692cc1e5a526c81"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_7393649265675507591155086225434297871937368251641985215568891852805958167681_by_1","typeString":"int_const 7393...(68 digits omitted)...7681"}],"expression":{"id":3873,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"426:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":3874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"440:6:8","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"426:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":3876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"426:88:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"415:99:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":3878,"nodeType":"ExpressionStatement","src":"415:99:8"},{"expression":{"id":3889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3879,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"548:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3882,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"551:22:8","memberName":"gate_setup_commitments","nodeType":"MemberAccess","referencedDeclaration":358,"src":"548:25:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$7_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[7] memory"}},"id":3883,"indexExpression":{"hexValue":"30","id":3881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"574:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"548:28:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307830356635636162633465616231346366616265653133333465663766333361363632353963633966643037616638363233303864356334313736356164623462","id":3886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"613:66:8","typeDescriptions":{"typeIdentifier":"t_rational_2695841003303798733129469289392913720766313432718171371944572830248001526603_by_1","typeString":"int_const 2695...(68 digits omitted)...6603"},"value":"0x05f5cabc4eab14cfabee1334ef7f33a66259cc9fd07af862308d5c41765adb4b"},{"hexValue":"307831323861313033666265363663386666363937313832633039363364393633323038623535613561353364646561623962346263303964633261363861396363","id":3887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"693:66:8","typeDescriptions":{"typeIdentifier":"t_rational_8385568315908019481806051185632303742394502774629952575214339068980405774796_by_1","typeString":"int_const 8385...(68 digits omitted)...4796"},"value":"0x128a103fbe66c8ff697182c0963d963208b55a5a53ddeab9b4bc09dc2a68a9cc"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2695841003303798733129469289392913720766313432718171371944572830248001526603_by_1","typeString":"int_const 2695...(68 digits omitted)...6603"},{"typeIdentifier":"t_rational_8385568315908019481806051185632303742394502774629952575214339068980405774796_by_1","typeString":"int_const 8385...(68 digits omitted)...4796"}],"expression":{"id":3884,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"579:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":3885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"593:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"579:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":3888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"579:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"548:221:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3890,"nodeType":"ExpressionStatement","src":"548:221:8"},{"expression":{"id":3901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3891,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"779:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3894,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"782:22:8","memberName":"gate_setup_commitments","nodeType":"MemberAccess","referencedDeclaration":358,"src":"779:25:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$7_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[7] memory"}},"id":3895,"indexExpression":{"hexValue":"31","id":3893,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"805:1:8","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"779:28:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307830643939383031373063333334633130376536636534643636626263346432336262636463393763303230623165316333663665303463366336363364326332","id":3898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"844:66:8","typeDescriptions":{"typeIdentifier":"t_rational_6151278677389568301862429566628599493658299761178099505013974060023752676034_by_1","typeString":"int_const 6151...(68 digits omitted)...6034"},"value":"0x0d9980170c334c107e6ce4d66bbc4d23bbcdc97c020b1e1c3f6e04c6c663d2c2"},{"hexValue":"307830393638323035383435303931636561663366383633623136313366626466376365396138376363666439376632323031313637396536333530333834343139","id":3899,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"924:66:8","typeDescriptions":{"typeIdentifier":"t_rational_4254790967615050452407677795944551892840895418222121937196554175328911115289_by_1","typeString":"int_const 4254...(68 digits omitted)...5289"},"value":"0x0968205845091ceaf3f863b1613fbdf7ce9a87ccfd97f22011679e6350384419"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_6151278677389568301862429566628599493658299761178099505013974060023752676034_by_1","typeString":"int_const 6151...(68 digits omitted)...6034"},{"typeIdentifier":"t_rational_4254790967615050452407677795944551892840895418222121937196554175328911115289_by_1","typeString":"int_const 4254...(68 digits omitted)...5289"}],"expression":{"id":3896,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"810:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":3897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"824:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"810:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":3900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"810:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"779:221:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3902,"nodeType":"ExpressionStatement","src":"779:221:8"},{"expression":{"id":3913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3903,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"1010:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3906,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1013:22:8","memberName":"gate_setup_commitments","nodeType":"MemberAccess","referencedDeclaration":358,"src":"1010:25:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$7_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[7] memory"}},"id":3907,"indexExpression":{"hexValue":"32","id":3905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1036:1:8","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1010:28:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307830633834613139623134396131363132636230343261643836333832623965393433363763306164643630643037653132333939393939653764623039656665","id":3910,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1075:66:8","typeDescriptions":{"typeIdentifier":"t_rational_5662093357673143310534590133724805661105327753403765834704559476713502842622_by_1","typeString":"int_const 5662...(68 digits omitted)...2622"},"value":"0x0c84a19b149a1612cb042ad86382b9e94367c0add60d07e12399999e7db09efe"},{"hexValue":"307831653032663730633434633962666237626632313634636565326162343831336263623962653536656234333265326539646666666666653139366438343664","id":3911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1155:66:8","typeDescriptions":{"typeIdentifier":"t_rational_13574624213738796210951920525135681717361380268926416776094024666048682099821_by_1","typeString":"int_const 1357...(69 digits omitted)...9821"},"value":"0x1e02f70c44c9bfb7bf2164cee2ab4813bcb9be56eb432e2e9dfffffe196d846d"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_5662093357673143310534590133724805661105327753403765834704559476713502842622_by_1","typeString":"int_const 5662...(68 digits omitted)...2622"},{"typeIdentifier":"t_rational_13574624213738796210951920525135681717361380268926416776094024666048682099821_by_1","typeString":"int_const 1357...(69 digits omitted)...9821"}],"expression":{"id":3908,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"1041:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":3909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1055:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"1041:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":3912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1041:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"1010:221:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3914,"nodeType":"ExpressionStatement","src":"1010:221:8"},{"expression":{"id":3925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3915,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"1241:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3918,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1244:22:8","memberName":"gate_setup_commitments","nodeType":"MemberAccess","referencedDeclaration":358,"src":"1241:25:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$7_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[7] memory"}},"id":3919,"indexExpression":{"hexValue":"33","id":3917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1267:1:8","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1241:28:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307831656233353939353036613431613764363265316637343338643637333266626239643165646137623963376130323133656361363363393333346163356139","id":3922,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1306:66:8","typeDescriptions":{"typeIdentifier":"t_rational_13886269355249622216130522621014259527667536872421030584890793465611293476265_by_1","typeString":"int_const 1388...(69 digits omitted)...6265"},"value":"0x1eb3599506a41a7d62e1f7438d6732fbb9d1eda7b9c7a0213eca63c9334ac5a9"},{"hexValue":"307832333536336439663432393930386438656138306266666136343238343066623038313933366434356233383862616663353034643962316535623163343130","id":3923,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1386:66:8","typeDescriptions":{"typeIdentifier":"t_rational_15983323848157504963303904529363785380045217023895074176137628004272053535760_by_1","typeString":"int_const 1598...(69 digits omitted)...5760"},"value":"0x23563d9f429908d8ea80bffa642840fb081936d45b388bafc504d9b1e5b1c410"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_13886269355249622216130522621014259527667536872421030584890793465611293476265_by_1","typeString":"int_const 1388...(69 digits omitted)...6265"},{"typeIdentifier":"t_rational_15983323848157504963303904529363785380045217023895074176137628004272053535760_by_1","typeString":"int_const 1598...(69 digits omitted)...5760"}],"expression":{"id":3920,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"1272:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":3921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1286:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"1272:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":3924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1272:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"1241:221:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3926,"nodeType":"ExpressionStatement","src":"1241:221:8"},{"expression":{"id":3937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3927,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"1472:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3930,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1475:22:8","memberName":"gate_setup_commitments","nodeType":"MemberAccess","referencedDeclaration":358,"src":"1472:25:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$7_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[7] memory"}},"id":3931,"indexExpression":{"hexValue":"34","id":3929,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1498:1:8","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1472:28:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030","id":3934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1537:66:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x0000000000000000000000000000000000000000000000000000000000000000"},{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303031","id":3935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1617:66:8","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x0000000000000000000000000000000000000000000000000000000000000001"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":3932,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"1503:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":3933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1517:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"1503:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":3936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1503:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"1472:221:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3938,"nodeType":"ExpressionStatement","src":"1472:221:8"},{"expression":{"id":3949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3939,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"1703:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3942,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1706:22:8","memberName":"gate_setup_commitments","nodeType":"MemberAccess","referencedDeclaration":358,"src":"1703:25:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$7_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[7] memory"}},"id":3943,"indexExpression":{"hexValue":"35","id":3941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1729:1:8","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1703:28:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307830363365386461633765653365653661343536396664353362343136666531376638663130646538633433356333333665356131636632653032363433323030","id":3946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1768:66:8","typeDescriptions":{"typeIdentifier":"t_rational_2824399406224696630273710806967753090548271169682311418490800634470963884544_by_1","typeString":"int_const 2824...(68 digits omitted)...4544"},"value":"0x063e8dac7ee3ee6a4569fd53b416fe17f8f10de8c435c336e5a1cf2e02643200"},{"hexValue":"307831643463313738316237386639323664353566383965663732616262393662656533353063653630646463363834663561303264383763356634636466393433","id":3947,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1848:66:8","typeDescriptions":{"typeIdentifier":"t_rational_13251515223168190179811132110970261354070118760554534245182152072117479143747_by_1","typeString":"int_const 1325...(69 digits omitted)...3747"},"value":"0x1d4c1781b78f926d55f89ef72abb96bee350ce60ddc684f5a02d87c5f4cdf943"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2824399406224696630273710806967753090548271169682311418490800634470963884544_by_1","typeString":"int_const 2824...(68 digits omitted)...4544"},{"typeIdentifier":"t_rational_13251515223168190179811132110970261354070118760554534245182152072117479143747_by_1","typeString":"int_const 1325...(69 digits omitted)...3747"}],"expression":{"id":3944,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"1734:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":3945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1748:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"1734:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":3948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1734:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"1703:221:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3950,"nodeType":"ExpressionStatement","src":"1703:221:8"},{"expression":{"id":3961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3951,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"1934:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3954,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1937:22:8","memberName":"gate_setup_commitments","nodeType":"MemberAccess","referencedDeclaration":358,"src":"1934:25:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$7_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[7] memory"}},"id":3955,"indexExpression":{"hexValue":"36","id":3953,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1960:1:8","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1934:28:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030","id":3958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1999:66:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x0000000000000000000000000000000000000000000000000000000000000000"},{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303031","id":3959,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2079:66:8","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x0000000000000000000000000000000000000000000000000000000000000001"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":3956,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"1965:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":3957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1979:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"1965:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":3960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1965:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"1934:221:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3962,"nodeType":"ExpressionStatement","src":"1934:221:8"},{"expression":{"id":3973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3963,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"2191:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3966,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2194:26:8","memberName":"gate_selectors_commitments","nodeType":"MemberAccess","referencedDeclaration":353,"src":"2191:29:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$2_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[2] memory"}},"id":3967,"indexExpression":{"hexValue":"30","id":3965,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2221:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2191:32:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307830623438376562333463383438306561353036663563366332353835373135356436316437663938323462363062633830653161343135613562636632343766","id":3970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2260:66:8","typeDescriptions":{"typeIdentifier":"t_rational_5103528777008365950923980985917390973481959031789069940833601025019139269759_by_1","typeString":"int_const 5103...(68 digits omitted)...9759"},"value":"0x0b487eb34c8480ea506f5c6c25857155d61d7f9824b60bc80e1a415a5bcf247f"},{"hexValue":"307830376561306430643064663964626363393434653933343161356262343961653739366439646339643763613163303332623533373834373135623934366462","id":3971,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2340:66:8","typeDescriptions":{"typeIdentifier":"t_rational_3579722227894667256004725411658387972283578320125402255435950365009184900827_by_1","typeString":"int_const 3579...(68 digits omitted)...0827"},"value":"0x07ea0d0d0df9dbcc944e9341a5bb49ae796d9dc9d7ca1c032b53784715b946db"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_5103528777008365950923980985917390973481959031789069940833601025019139269759_by_1","typeString":"int_const 5103...(68 digits omitted)...9759"},{"typeIdentifier":"t_rational_3579722227894667256004725411658387972283578320125402255435950365009184900827_by_1","typeString":"int_const 3579...(68 digits omitted)...0827"}],"expression":{"id":3968,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"2226:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":3969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2240:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"2226:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":3972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2226:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"2191:225:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3974,"nodeType":"ExpressionStatement","src":"2191:225:8"},{"expression":{"id":3985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3975,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"2426:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3978,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2429:26:8","memberName":"gate_selectors_commitments","nodeType":"MemberAccess","referencedDeclaration":353,"src":"2426:29:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$2_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[2] memory"}},"id":3979,"indexExpression":{"hexValue":"31","id":3977,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2456:1:8","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2426:32:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307830666136366661613062396561373832656234303031373561633966306330356630646536343333326565633534613837636432306462343534306261656332","id":3982,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2495:66:8","typeDescriptions":{"typeIdentifier":"t_rational_7078760019761336611313107445200953176845659098230668293006620437934156525250_by_1","typeString":"int_const 7078...(68 digits omitted)...5250"},"value":"0x0fa66faa0b9ea782eb400175ac9f0c05f0de64332eec54a87cd20db4540baec2"},{"hexValue":"307830376465613333643331346336393063346264346232316465646131613434623966386464383765353339303234363232373638633266386238626461626531","id":3983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2575:66:8","typeDescriptions":{"typeIdentifier":"t_rational_3559556622866675281894780444410070776634376280344810160386255379365405502433_by_1","typeString":"int_const 3559...(68 digits omitted)...2433"},"value":"0x07dea33d314c690c4bd4b21deda1a44b9f8dd87e539024622768c2f8b8bdabe1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_7078760019761336611313107445200953176845659098230668293006620437934156525250_by_1","typeString":"int_const 7078...(68 digits omitted)...5250"},{"typeIdentifier":"t_rational_3559556622866675281894780444410070776634376280344810160386255379365405502433_by_1","typeString":"int_const 3559...(68 digits omitted)...2433"}],"expression":{"id":3980,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"2461:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":3981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2475:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"2461:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":3984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2461:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"2426:225:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3986,"nodeType":"ExpressionStatement","src":"2426:225:8"},{"expression":{"id":3997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3987,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"2684:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":3990,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2687:23:8","memberName":"permutation_commitments","nodeType":"MemberAccess","referencedDeclaration":363,"src":"2684:26:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":3991,"indexExpression":{"hexValue":"30","id":3989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2711:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2684:29:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307831323034383263353265333164323337336639623264633830613437653638663033356532373864323230666138613839643063383166313333333433393533","id":3994,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2750:66:8","typeDescriptions":{"typeIdentifier":"t_rational_8149601205757345381376898022039178950946109477500906561346460294840289868115_by_1","typeString":"int_const 8149...(68 digits omitted)...8115"},"value":"0x120482c52e31d2373f9b2dc80a47e68f035e278d220fa8a89d0c81f133343953"},{"hexValue":"307830323932386137386561326531613934336539323230623765323838666434386135363132363366386535663934353138663231616161343337383163656163","id":3995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2830:66:8","typeDescriptions":{"typeIdentifier":"t_rational_1163541069475676308531266079332025326889755914187724653098077692822942764716_by_1","typeString":"int_const 1163...(68 digits omitted)...4716"},"value":"0x02928a78ea2e1a943e9220b7e288fd48a561263f8e5f94518f21aaa43781ceac"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8149601205757345381376898022039178950946109477500906561346460294840289868115_by_1","typeString":"int_const 8149...(68 digits omitted)...8115"},{"typeIdentifier":"t_rational_1163541069475676308531266079332025326889755914187724653098077692822942764716_by_1","typeString":"int_const 1163...(68 digits omitted)...4716"}],"expression":{"id":3992,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"2716:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":3993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2730:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"2716:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":3996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2716:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"2684:222:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":3998,"nodeType":"ExpressionStatement","src":"2684:222:8"},{"expression":{"id":4009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":3999,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"2916:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":4002,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2919:23:8","memberName":"permutation_commitments","nodeType":"MemberAccess","referencedDeclaration":363,"src":"2916:26:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":4003,"indexExpression":{"hexValue":"31","id":4001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2943:1:8","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2916:29:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307831646661643263346436303730346263663661663061626439636365303931353166303633633462353232303063323638653437306336613663393363626361","id":4006,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2982:66:8","typeDescriptions":{"typeIdentifier":"t_rational_13560239048531411789085507564142064344500495269001650471526028831294896720842_by_1","typeString":"int_const 1356...(69 digits omitted)...0842"},"value":"0x1dfad2c4d60704bcf6af0abd9cce09151f063c4b52200c268e470c6a6c93cbca"},{"hexValue":"307830386232386464366361313464376333336530373866653066333332613961346439356163386466313731333535646539653639393330616563303262356463","id":4007,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3062:66:8","typeDescriptions":{"typeIdentifier":"t_rational_3933980503141824914453836297228564525189703215453429605258275840933169903068_by_1","typeString":"int_const 3933...(68 digits omitted)...3068"},"value":"0x08b28dd6ca14d7c33e078fe0f332a9a4d95ac8df171355de9e69930aec02b5dc"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_13560239048531411789085507564142064344500495269001650471526028831294896720842_by_1","typeString":"int_const 1356...(69 digits omitted)...0842"},{"typeIdentifier":"t_rational_3933980503141824914453836297228564525189703215453429605258275840933169903068_by_1","typeString":"int_const 3933...(68 digits omitted)...3068"}],"expression":{"id":4004,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"2948:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2962:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"2948:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":4008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2948:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"2916:222:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":4010,"nodeType":"ExpressionStatement","src":"2916:222:8"},{"expression":{"id":4021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4011,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"3148:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":4014,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3151:23:8","memberName":"permutation_commitments","nodeType":"MemberAccess","referencedDeclaration":363,"src":"3148:26:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":4015,"indexExpression":{"hexValue":"32","id":4013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3175:1:8","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3148:29:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307830393335613466643661623637393235393239363631636632643265383134663837663538396565363233346362393637356563633264383937663162333338","id":4018,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3214:66:8","typeDescriptions":{"typeIdentifier":"t_rational_4165597250188200355976449095950953154723444291829223248123634370716432970552_by_1","typeString":"int_const 4165...(68 digits omitted)...0552"},"value":"0x0935a4fd6ab67925929661cf2d2e814f87f589ee6234cb9675ecc2d897f1b338"},{"hexValue":"307831303332636363343163303437343133666365346138343762613765353165346132656134303664383961383864343830633566306566616636633863383961","id":4019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3294:66:8","typeDescriptions":{"typeIdentifier":"t_rational_7326761173926049668546300375136085542732315702056280174589418359231615649946_by_1","typeString":"int_const 7326...(68 digits omitted)...9946"},"value":"0x1032ccc41c047413fce4a847ba7e51e4a2ea406d89a88d480c5f0efaf6c8c89a"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_4165597250188200355976449095950953154723444291829223248123634370716432970552_by_1","typeString":"int_const 4165...(68 digits omitted)...0552"},{"typeIdentifier":"t_rational_7326761173926049668546300375136085542732315702056280174589418359231615649946_by_1","typeString":"int_const 7326...(68 digits omitted)...9946"}],"expression":{"id":4016,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"3180:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3194:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"3180:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":4020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3180:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"3148:222:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":4022,"nodeType":"ExpressionStatement","src":"3148:222:8"},{"expression":{"id":4033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4023,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"3380:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":4026,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3383:23:8","memberName":"permutation_commitments","nodeType":"MemberAccess","referencedDeclaration":363,"src":"3380:26:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":4027,"indexExpression":{"hexValue":"33","id":4025,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3407:1:8","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3380:29:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307830656166616561336166376431666164623231333864623162393931616635643232313866363839323731346664303139383938633765316134336563666538","id":4030,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3446:66:8","typeDescriptions":{"typeIdentifier":"t_rational_6642783433318718963355103248032570456100957588253731799499113640812481531880_by_1","typeString":"int_const 6642...(68 digits omitted)...1880"},"value":"0x0eafaea3af7d1fadb2138db1b991af5d2218f6892714fd019898c7e1a43ecfe8"},{"hexValue":"307832386662313765646132383565643734636339373731643632666164323261623435396262623061343936386334383939373261636138623765363138666362","id":4031,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3526:66:8","typeDescriptions":{"typeIdentifier":"t_rational_18536157703379052153641172410682093177027951375799360581845210419851530702795_by_1","typeString":"int_const 1853...(69 digits omitted)...2795"},"value":"0x28fb17eda285ed74cc9771d62fad22ab459bbb0a4968c489972aca8b7e618fcb"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_6642783433318718963355103248032570456100957588253731799499113640812481531880_by_1","typeString":"int_const 6642...(68 digits omitted)...1880"},{"typeIdentifier":"t_rational_18536157703379052153641172410682093177027951375799360581845210419851530702795_by_1","typeString":"int_const 1853...(69 digits omitted)...2795"}],"expression":{"id":4028,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"3412:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3426:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"3412:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":4032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3412:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"3380:222:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":4034,"nodeType":"ExpressionStatement","src":"3380:222:8"},{"expression":{"id":4043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4035,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"3648:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":4037,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3651:26:8","memberName":"lookup_selector_commitment","nodeType":"MemberAccess","referencedDeclaration":366,"src":"3648:29:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307831353532303161353634653732316231663563303633313561643465323465616164336362646436313937623139636439303366653835363133303830663836","id":4040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3714:66:8","typeDescriptions":{"typeIdentifier":"t_rational_9643462640324279742354286881379145183788615707867112895262567231187715624838_by_1","typeString":"int_const 9643...(68 digits omitted)...4838"},"value":"0x155201a564e721b1f5c06315ad4e24eaad3cbdd6197b19cd903fe85613080f86"},{"hexValue":"307831326662323031626338393635373261633134333537653236303166353131383633366631656562376238396331373761633934306161633362353235336563","id":4041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3794:66:8","typeDescriptions":{"typeIdentifier":"t_rational_8585331492684131595151617345549661271988583252700049540713048401920188896236_by_1","typeString":"int_const 8585...(68 digits omitted)...6236"},"value":"0x12fb201bc896572ac14357e2601f5118636f1eeb7b89c177ac940aac3b5253ec"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_9643462640324279742354286881379145183788615707867112895262567231187715624838_by_1","typeString":"int_const 9643...(68 digits omitted)...4838"},{"typeIdentifier":"t_rational_8585331492684131595151617345549661271988583252700049540713048401920188896236_by_1","typeString":"int_const 8585...(68 digits omitted)...6236"}],"expression":{"id":4038,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"3680:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3694:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"3680:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":4042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3680:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"3648:222:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":4044,"nodeType":"ExpressionStatement","src":"3648:222:8"},{"expression":{"id":4055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4045,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"3880:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":4048,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3883:25:8","memberName":"lookup_tables_commitments","nodeType":"MemberAccess","referencedDeclaration":371,"src":"3880:28:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":4049,"indexExpression":{"hexValue":"30","id":4047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3909:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3880:31:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307831636230653261653464353237343338393864393464376631373239626430643333353762613033356364623662336166376562666639313539663866323937","id":4052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3948:66:8","typeDescriptions":{"typeIdentifier":"t_rational_12977289337580515330069683317493499887645026512703653626329262698737207669399_by_1","typeString":"int_const 1297...(69 digits omitted)...9399"},"value":"0x1cb0e2ae4d52743898d94d7f1729bd0d3357ba035cdb6b3af7ebff9159f8f297"},{"hexValue":"307831356565353935323237633965306637613438376464623830373264356561336366643035386263353639323131633335343662633065383030353135353366","id":4053,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4028:66:8","typeDescriptions":{"typeIdentifier":"t_rational_9919695891996568180489622249538742603616978194402988843431217575101453129023_by_1","typeString":"int_const 9919...(68 digits omitted)...9023"},"value":"0x15ee595227c9e0f7a487ddb8072d5ea3cfd058bc569211c3546bc0e80051553f"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_12977289337580515330069683317493499887645026512703653626329262698737207669399_by_1","typeString":"int_const 1297...(69 digits omitted)...9399"},{"typeIdentifier":"t_rational_9919695891996568180489622249538742603616978194402988843431217575101453129023_by_1","typeString":"int_const 9919...(68 digits omitted)...9023"}],"expression":{"id":4050,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"3914:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3928:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"3914:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":4054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3914:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"3880:224:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":4056,"nodeType":"ExpressionStatement","src":"3880:224:8"},{"expression":{"id":4067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4057,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"4114:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":4060,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4117:25:8","memberName":"lookup_tables_commitments","nodeType":"MemberAccess","referencedDeclaration":371,"src":"4114:28:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":4061,"indexExpression":{"hexValue":"31","id":4059,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4143:1:8","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4114:31:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307831336534616239346330336135613239373139393330633133363164383534653234346366393138663165323963623033313330336634613133623731393737","id":4064,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4182:66:8","typeDescriptions":{"typeIdentifier":"t_rational_8997969462792905631955208289149778275997553844277737548590367326997254183287_by_1","typeString":"int_const 8997...(68 digits omitted)...3287"},"value":"0x13e4ab94c03a5a29719930c1361d854e244cf918f1e29cb031303f4a13b71977"},{"hexValue":"307830663739326566346336633837343663393762653631656439623230663331626132646563336264356339316132643961346135383666313961663361303763","id":4065,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4262:66:8","typeDescriptions":{"typeIdentifier":"t_rational_6998805303080415544871022281442994050921616502492480403433674687825898086524_by_1","typeString":"int_const 6998...(68 digits omitted)...6524"},"value":"0x0f792ef4c6c8746c97be61ed9b20f31ba2dec3bd5c91a2d9a4a586f19af3a07c"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8997969462792905631955208289149778275997553844277737548590367326997254183287_by_1","typeString":"int_const 8997...(68 digits omitted)...3287"},{"typeIdentifier":"t_rational_6998805303080415544871022281442994050921616502492480403433674687825898086524_by_1","typeString":"int_const 6998...(68 digits omitted)...6524"}],"expression":{"id":4062,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"4148:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4162:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"4148:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":4066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4148:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"4114:224:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":4068,"nodeType":"ExpressionStatement","src":"4114:224:8"},{"expression":{"id":4079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4069,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"4348:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":4072,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4351:25:8","memberName":"lookup_tables_commitments","nodeType":"MemberAccess","referencedDeclaration":371,"src":"4348:28:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":4073,"indexExpression":{"hexValue":"32","id":4071,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4377:1:8","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4348:31:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307831633965363962643262303432343065626534346662323364363763353936666365346131333336313039666463653338633266313834613633636438616363","id":4076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4416:66:8","typeDescriptions":{"typeIdentifier":"t_rational_12944651379892908687815530697897336851788441726945596323139858945887615945420_by_1","typeString":"int_const 1294...(69 digits omitted)...5420"},"value":"0x1c9e69bd2b04240ebe44fb23d67c596fce4a1336109fdce38c2f184a63cd8acc"},{"hexValue":"307831636264336537326264626365383237323237653530333639306231306265393336356165373630653964326261626465356261383165646631326638323036","id":4077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4496:66:8","typeDescriptions":{"typeIdentifier":"t_rational_12999124857263729477702493983497125232312860654737276321301047523662772535814_by_1","typeString":"int_const 1299...(69 digits omitted)...5814"},"value":"0x1cbd3e72bdbce827227e503690b10be9365ae760e9d2babde5ba81edf12f8206"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_12944651379892908687815530697897336851788441726945596323139858945887615945420_by_1","typeString":"int_const 1294...(69 digits omitted)...5420"},{"typeIdentifier":"t_rational_12999124857263729477702493983497125232312860654737276321301047523662772535814_by_1","typeString":"int_const 1299...(69 digits omitted)...5814"}],"expression":{"id":4074,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"4382:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4396:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"4382:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":4078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4382:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"4348:224:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":4080,"nodeType":"ExpressionStatement","src":"4348:224:8"},{"expression":{"id":4091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4081,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"4582:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":4084,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4585:25:8","memberName":"lookup_tables_commitments","nodeType":"MemberAccess","referencedDeclaration":371,"src":"4582:28:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":4085,"indexExpression":{"hexValue":"33","id":4083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4611:1:8","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4582:31:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307832613064343633333966626637323130346466366132343162353361393537363032623161313666366533623966383962663365346334363435646638323363","id":4088,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4650:66:8","typeDescriptions":{"typeIdentifier":"t_rational_19020593166364273183306958453701548558924960147421380313541426657829532435004_by_1","typeString":"int_const 1902...(69 digits omitted)...5004"},"value":"0x2a0d46339fbf72104df6a241b53a957602b1a16f6e3b9f89bf3e4c4645df823c"},{"hexValue":"307831316136303164376232656565346237383835663334633938373334323662613132363366333865616532653033353164363533623862316261396336376636","id":4089,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4730:66:8","typeDescriptions":{"typeIdentifier":"t_rational_7982627755647483601100010253045212173887409235612843955935232334869986830326_by_1","typeString":"int_const 7982...(68 digits omitted)...0326"},"value":"0x11a601d7b2eee4b7885f34c9873426ba1263f38eae2e0351d653b8b1ba9c67f6"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_19020593166364273183306958453701548558924960147421380313541426657829532435004_by_1","typeString":"int_const 1902...(69 digits omitted)...5004"},{"typeIdentifier":"t_rational_7982627755647483601100010253045212173887409235612843955935232334869986830326_by_1","typeString":"int_const 7982...(68 digits omitted)...0326"}],"expression":{"id":4086,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"4616:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4630:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"4616:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":4090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4616:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"4582:224:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":4092,"nodeType":"ExpressionStatement","src":"4582:224:8"},{"expression":{"id":4101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4093,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"4816:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":4095,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4819:28:8","memberName":"lookup_table_type_commitment","nodeType":"MemberAccess","referencedDeclaration":374,"src":"4816:31:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307831613730653433663138623138643638363830376332623163363437316364393439646432353162343830393062636134343364383662393761666165393531","id":4098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4884:66:8","typeDescriptions":{"typeIdentifier":"t_rational_11959596233664349231994072409980703200305520484001822823927990328537313372497_by_1","typeString":"int_const 1195...(69 digits omitted)...2497"},"value":"0x1a70e43f18b18d686807c2b1c6471cd949dd251b48090bca443d86b97afae951"},{"hexValue":"307830653665323361643135613162643835316232323837383861653461303362663235626461333965646536643561393264353031613834303261306466653433","id":4099,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4964:66:8","typeDescriptions":{"typeIdentifier":"t_rational_6526979284762357030556066216970993668995588763261978607102984433726833688131_by_1","typeString":"int_const 6526...(68 digits omitted)...8131"},"value":"0x0e6e23ad15a1bd851b228788ae4a03bf25bda39ede6d5a92d501a8402a0dfe43"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_11959596233664349231994072409980703200305520484001822823927990328537313372497_by_1","typeString":"int_const 1195...(69 digits omitted)...2497"},{"typeIdentifier":"t_rational_6526979284762357030556066216970993668995588763261978607102984433726833688131_by_1","typeString":"int_const 6526...(68 digits omitted)...8131"}],"expression":{"id":4096,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"4850:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4864:6:8","memberName":"new_g1","nodeType":"MemberAccess","referencedDeclaration":6260,"src":"4850:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":4100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4850:190:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"4816:224:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":4102,"nodeType":"ExpressionStatement","src":"4816:224:8"},{"expression":{"id":4112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4103,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"5074:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":4106,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5077:12:8","memberName":"non_residues","nodeType":"MemberAccess","referencedDeclaration":381,"src":"5074:15:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$3_memory_ptr","typeString":"struct PairingsBn254.Fr memory[3] memory"}},"id":4107,"indexExpression":{"hexValue":"30","id":4105,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5090:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5074:18:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303035","id":4110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5116:66:8","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"0x0000000000000000000000000000000000000000000000000000000000000005"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"}],"expression":{"id":4108,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"5095:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5109:6:8","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"5095:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":4111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5095:88:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"5074:109:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":4113,"nodeType":"ExpressionStatement","src":"5074:109:8"},{"expression":{"id":4123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4114,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"5193:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":4117,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5196:12:8","memberName":"non_residues","nodeType":"MemberAccess","referencedDeclaration":381,"src":"5193:15:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$3_memory_ptr","typeString":"struct PairingsBn254.Fr memory[3] memory"}},"id":4118,"indexExpression":{"hexValue":"31","id":4116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5209:1:8","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5193:18:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303037","id":4121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5235:66:8","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"0x0000000000000000000000000000000000000000000000000000000000000007"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"}],"expression":{"id":4119,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"5214:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5228:6:8","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"5214:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":4122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5214:88:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"5193:109:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":4124,"nodeType":"ExpressionStatement","src":"5193:109:8"},{"expression":{"id":4134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4125,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"5312:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":4128,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5315:12:8","memberName":"non_residues","nodeType":"MemberAccess","referencedDeclaration":381,"src":"5312:15:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$3_memory_ptr","typeString":"struct PairingsBn254.Fr memory[3] memory"}},"id":4129,"indexExpression":{"hexValue":"32","id":4127,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5328:1:8","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5312:18:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303061","id":4132,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5354:66:8","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"0x000000000000000000000000000000000000000000000000000000000000000a"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"}],"expression":{"id":4130,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"5333:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5347:6:8","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"5333:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":4133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5333:88:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"5312:109:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":4135,"nodeType":"ExpressionStatement","src":"5312:109:8"},{"expression":{"id":4150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4136,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"5455:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":4139,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5458:11:8","memberName":"g2_elements","nodeType":"MemberAccess","referencedDeclaration":386,"src":"5455:14:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$2_memory_ptr","typeString":"struct PairingsBn254.G2Point memory[2] memory"}},"id":4140,"indexExpression":{"hexValue":"30","id":4138,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5470:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5455:17:8","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"components":[{"hexValue":"307831393865393339333932306434383361373236306266623733316662356432356631616134393333333561396537313239376534383562376165663331326332","id":4143,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5527:66:8","typeDescriptions":{"typeIdentifier":"t_rational_11559732032986387107991004021392285783925812861821192530917403151452391805634_by_1","typeString":"int_const 1155...(69 digits omitted)...5634"},"value":"0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2"},{"hexValue":"307831383030646565663132316631653736343236613030363635653563343437393637343332326434663735656461646434366465626435636439393266366564","id":4144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5611:66:8","typeDescriptions":{"typeIdentifier":"t_rational_10857046999023057135944570762232829481370756359578518086990519993285655852781_by_1","typeString":"int_const 1085...(69 digits omitted)...2781"},"value":"0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed"}],"id":4145,"isConstant":false,"isInlineArray":true,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5509:182:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},{"components":[{"hexValue":"307830393036383964303538356666303735656339653939616436393063333339356263346233313333373062333865663335356163646164636431323239373562","id":4146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5723:66:8","typeDescriptions":{"typeIdentifier":"t_rational_4082367875863433681332203403145435568316851327593401208105741076214120093531_by_1","typeString":"int_const 4082...(68 digits omitted)...3531"},"value":"0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b"},{"hexValue":"307831326338356561356462386336646562346161623731383038646362343038666533643165373639306334336433376234636536636330313636666137646161","id":4147,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5807:66:8","typeDescriptions":{"typeIdentifier":"t_rational_8495653923123431417604973247489272438418190587263600148770280649306958101930_by_1","typeString":"int_const 8495...(68 digits omitted)...1930"},"value":"0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa"}],"id":4148,"isConstant":false,"isInlineArray":true,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5705:182:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"},{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}],"expression":{"id":4141,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"5475:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5489:6:8","memberName":"new_g2","nodeType":"MemberAccess","referencedDeclaration":6363,"src":"5475:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$2_memory_ptr_$_t_array$_t_uint256_$2_memory_ptr_$returns$_t_struct$_G2Point_$6232_memory_ptr_$","typeString":"function (uint256[2] memory,uint256[2] memory) pure returns (struct PairingsBn254.G2Point memory)"}},"id":4149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5475:422:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"src":"5455:442:8","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"id":4151,"nodeType":"ExpressionStatement","src":"5455:442:8"},{"expression":{"id":4166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4152,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3856,"src":"5907:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":4155,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5910:11:8","memberName":"g2_elements","nodeType":"MemberAccess","referencedDeclaration":386,"src":"5907:14:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$2_memory_ptr","typeString":"struct PairingsBn254.G2Point memory[2] memory"}},"id":4156,"indexExpression":{"hexValue":"31","id":4154,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5922:1:8","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5907:17:8","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"components":[{"hexValue":"307832363065303162323531663666316337653766663465353830373931646565386561353164383761333538653033386234656665333066616330393338336331","id":4159,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5979:66:8","typeDescriptions":{"typeIdentifier":"t_rational_17212635814319756364507010169094758005397460366678210664966334781961899574209_by_1","typeString":"int_const 1721...(69 digits omitted)...4209"},"value":"0x260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c1"},{"hexValue":"307830313138633464356238333762636332626338396235623339386235393734653966353934343037336233323037386237653233316665633933383838336230","id":4160,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6063:66:8","typeDescriptions":{"typeIdentifier":"t_rational_496075682290949347282619629729389528669750910289829251317610107342504362928_by_1","typeString":"int_const 4960...(67 digits omitted)...2928"},"value":"0x0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b0"}],"id":4161,"isConstant":false,"isInlineArray":true,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5961:182:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},{"components":[{"hexValue":"307830346663363336396637313130666533643235313536633162623961373238353963663261303436343166393962613465653431336338306461366135666534","id":4162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6175:66:8","typeDescriptions":{"typeIdentifier":"t_rational_2255182984359105691812395885056400739448730162863181907784180250290003009508_by_1","typeString":"int_const 2255...(68 digits omitted)...9508"},"value":"0x04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4"},{"hexValue":"307832326665626461336330633036333261353634373562343231346535363135653131653664643366393665366365613238353461383764346461636335653535","id":4163,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6259:66:8","typeDescriptions":{"typeIdentifier":"t_rational_15828724851114720558251891430452666121603726704878231219287131634746610441813_by_1","typeString":"int_const 1582...(69 digits omitted)...1813"},"value":"0x22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55"}],"id":4164,"isConstant":false,"isInlineArray":true,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6157:182:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"},{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}],"expression":{"id":4157,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"5927:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5941:6:8","memberName":"new_g2","nodeType":"MemberAccess","referencedDeclaration":6363,"src":"5927:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$2_memory_ptr_$_t_array$_t_uint256_$2_memory_ptr_$returns$_t_struct$_G2Point_$6232_memory_ptr_$","typeString":"function (uint256[2] memory,uint256[2] memory) pure returns (struct PairingsBn254.G2Point memory)"}},"id":4165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5927:422:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"src":"5907:442:8","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"id":4167,"nodeType":"ExpressionStatement","src":"5907:442:8"}]},"id":4169,"implemented":true,"kind":"function","modifiers":[],"name":"get_verification_key","nameLocation":"275:20:8","nodeType":"FunctionDefinition","parameters":{"id":3853,"nodeType":"ParameterList","parameters":[],"src":"295:2:8"},"returnParameters":{"id":3857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3856,"mutability":"mutable","name":"vk","nameLocation":"344:2:8","nodeType":"VariableDeclaration","scope":4169,"src":"321:25:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey"},"typeName":{"id":3855,"nodeType":"UserDefinedTypeName","pathNode":{"id":3854,"name":"VerificationKey","nameLocations":["321:15:8"],"nodeType":"IdentifierPath","referencedDeclaration":387,"src":"321:15:8"},"referencedDeclaration":387,"src":"321:15:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_storage_ptr","typeString":"struct VerificationKey"}},"visibility":"internal"}],"src":"320:27:8"},"scope":4749,"src":"266:6090:8","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4708,"nodeType":"Block","src":"6531:3965:8","statements":[{"expression":{"id":4190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4181,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"6597:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4183,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6603:12:8","memberName":"input_values","nodeType":"MemberAccess","referencedDeclaration":409,"src":"6597:18:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":4187,"name":"public_inputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4172,"src":"6632:13:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6646:6:8","memberName":"length","nodeType":"MemberAccess","src":"6632:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4186,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"6618:13:8","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":4184,"name":"uint256","nodeType":"ElementaryTypeName","src":"6622:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4185,"nodeType":"ArrayTypeName","src":"6622:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":4189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6618:35:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"6597:56:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4191,"nodeType":"ExpressionStatement","src":"6597:56:8"},{"body":{"id":4216,"nodeType":"Block","src":"6731:65:8","statements":[{"expression":{"id":4214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4206,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"6745:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4209,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6751:12:8","memberName":"input_values","nodeType":"MemberAccess","referencedDeclaration":409,"src":"6745:18:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4210,"indexExpression":{"id":4208,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4193,"src":"6764:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6745:21:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":4211,"name":"public_inputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4172,"src":"6769:13:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4213,"indexExpression":{"id":4212,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4193,"src":"6783:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6769:16:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6745:40:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4215,"nodeType":"ExpressionStatement","src":"6745:40:8"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4196,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4193,"src":"6683:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":4197,"name":"public_inputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4172,"src":"6687:13:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6701:6:8","memberName":"length","nodeType":"MemberAccess","src":"6687:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6683:24:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4217,"initializationExpression":{"assignments":[4193],"declarations":[{"constant":false,"id":4193,"mutability":"mutable","name":"i","nameLocation":"6676:1:8","nodeType":"VariableDeclaration","scope":4217,"src":"6668:9:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4192,"name":"uint256","nodeType":"ElementaryTypeName","src":"6668:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4195,"initialValue":{"hexValue":"30","id":4194,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6680:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6668:13:8"},"loopExpression":{"expression":{"id":4204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4200,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4193,"src":"6709:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4201,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4193,"src":"6713:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6715:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"6713:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6713:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6709:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4205,"nodeType":"ExpressionStatement","src":"6709:20:8"},"nodeType":"ForStatement","src":"6663:133:8"},{"assignments":[4219],"declarations":[{"constant":false,"id":4219,"mutability":"mutable","name":"j","nameLocation":"6814:1:8","nodeType":"VariableDeclaration","scope":4708,"src":"6806:9:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4218,"name":"uint256","nodeType":"ElementaryTypeName","src":"6806:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4220,"nodeType":"VariableDeclarationStatement","src":"6806:9:8"},{"body":{"id":4259,"nodeType":"Block","src":"6884:227:8","statements":[{"expression":{"id":4250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4234,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"6898:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4237,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6904:23:8","memberName":"state_polys_commitments","nodeType":"MemberAccess","referencedDeclaration":414,"src":"6898:29:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":4238,"indexExpression":{"id":4236,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4222,"src":"6928:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6898:32:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4241,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"6979:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4243,"indexExpression":{"id":4242,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"6996:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6979:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":4244,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"7016:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4248,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4245,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"7033:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7035:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"7033:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7033:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7016:34:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4239,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"6933:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6947:14:8","memberName":"new_g1_checked","nodeType":"MemberAccess","referencedDeclaration":6343,"src":"6933:28:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":4249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6933:131:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"6898:166:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":4251,"nodeType":"ExpressionStatement","src":"6898:166:8"},{"expression":{"id":4257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4252,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"7079:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"32","id":4255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7098:1:8","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"expression":{"id":4253,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"7083:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7085:12:8","memberName":"uncheckedAdd","nodeType":"MemberAccess","referencedDeclaration":329,"src":"7083:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7083:17:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7079:21:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4258,"nodeType":"ExpressionStatement","src":"7079:21:8"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4225,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4222,"src":"6845:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4226,"name":"STATE_WIDTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"6849:11:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6845:15:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4260,"initializationExpression":{"assignments":[4222],"declarations":[{"constant":false,"id":4222,"mutability":"mutable","name":"i","nameLocation":"6838:1:8","nodeType":"VariableDeclaration","scope":4260,"src":"6830:9:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4221,"name":"uint256","nodeType":"ElementaryTypeName","src":"6830:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4224,"initialValue":{"hexValue":"30","id":4223,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6842:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6830:13:8"},"loopExpression":{"expression":{"id":4232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4228,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4222,"src":"6862:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4229,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4222,"src":"6866:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6868:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"6866:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6866:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6862:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4233,"nodeType":"ExpressionStatement","src":"6862:20:8"},"nodeType":"ForStatement","src":"6825:286:8"},{"expression":{"id":4275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4261,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"7120:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4263,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"7126:41:8","memberName":"copy_permutation_grand_product_commitment","nodeType":"MemberAccess","referencedDeclaration":417,"src":"7120:47:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4266,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"7212:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4268,"indexExpression":{"id":4267,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"7229:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7212:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":4269,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"7245:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4273,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4270,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"7262:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7264:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"7262:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7262:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7245:34:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4264,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"7170:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7184:14:8","memberName":"new_g1_checked","nodeType":"MemberAccess","referencedDeclaration":6343,"src":"7170:28:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":4274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7170:119:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"7120:169:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":4276,"nodeType":"ExpressionStatement","src":"7120:169:8"},{"expression":{"id":4282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4277,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"7299:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"32","id":4280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7318:1:8","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"expression":{"id":4278,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"7303:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7305:12:8","memberName":"uncheckedAdd","nodeType":"MemberAccess","referencedDeclaration":329,"src":"7303:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7303:17:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7299:21:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4283,"nodeType":"ExpressionStatement","src":"7299:21:8"},{"expression":{"id":4298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4284,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"7331:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4286,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"7337:24:8","memberName":"lookup_s_poly_commitment","nodeType":"MemberAccess","referencedDeclaration":456,"src":"7331:30:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4289,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"7406:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4291,"indexExpression":{"id":4290,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"7423:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7406:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":4292,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"7439:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4296,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4293,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"7456:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7458:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"7456:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7456:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7439:34:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4287,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"7364:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7378:14:8","memberName":"new_g1_checked","nodeType":"MemberAccess","referencedDeclaration":6343,"src":"7364:28:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":4297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7364:119:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"7331:152:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":4299,"nodeType":"ExpressionStatement","src":"7331:152:8"},{"expression":{"id":4305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4300,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"7493:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"32","id":4303,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7512:1:8","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"expression":{"id":4301,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"7497:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7499:12:8","memberName":"uncheckedAdd","nodeType":"MemberAccess","referencedDeclaration":329,"src":"7497:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7497:17:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7493:21:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4306,"nodeType":"ExpressionStatement","src":"7493:21:8"},{"expression":{"id":4321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4307,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"7525:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4309,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"7531:31:8","memberName":"lookup_grand_product_commitment","nodeType":"MemberAccess","referencedDeclaration":459,"src":"7525:37:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4312,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"7607:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4314,"indexExpression":{"id":4313,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"7624:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7607:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":4315,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"7640:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4319,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4316,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"7657:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7659:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"7657:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7657:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7640:34:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4310,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"7565:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7579:14:8","memberName":"new_g1_checked","nodeType":"MemberAccess","referencedDeclaration":6343,"src":"7565:28:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":4320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7565:119:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"7525:159:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":4322,"nodeType":"ExpressionStatement","src":"7525:159:8"},{"expression":{"id":4328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4323,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"7694:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"32","id":4326,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7713:1:8","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"expression":{"id":4324,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"7698:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7700:12:8","memberName":"uncheckedAdd","nodeType":"MemberAccess","referencedDeclaration":329,"src":"7698:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7698:17:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7694:21:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4329,"nodeType":"ExpressionStatement","src":"7694:21:8"},{"body":{"id":4370,"nodeType":"Block","src":"7817:234:8","statements":[{"expression":{"id":4361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4345,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"7831:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4348,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7837:31:8","memberName":"quotient_poly_parts_commitments","nodeType":"MemberAccess","referencedDeclaration":422,"src":"7831:37:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":4349,"indexExpression":{"id":4347,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4331,"src":"7869:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7831:40:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4352,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"7920:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4354,"indexExpression":{"id":4353,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"7937:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7920:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":4355,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"7957:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4359,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4356,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"7974:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7976:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"7974:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4358,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7974:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7957:34:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4350,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"7874:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7888:14:8","memberName":"new_g1_checked","nodeType":"MemberAccess","referencedDeclaration":6343,"src":"7874:28:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":4360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7874:131:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"7831:174:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":4362,"nodeType":"ExpressionStatement","src":"7831:174:8"},{"expression":{"id":4368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4363,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"8019:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"32","id":4366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8038:1:8","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"expression":{"id":4364,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"8023:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8025:12:8","memberName":"uncheckedAdd","nodeType":"MemberAccess","referencedDeclaration":329,"src":"8023:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8023:17:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8019:21:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4369,"nodeType":"ExpressionStatement","src":"8019:21:8"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4334,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4331,"src":"7745:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":4335,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"7749:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4336,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7755:31:8","memberName":"quotient_poly_parts_commitments","nodeType":"MemberAccess","referencedDeclaration":422,"src":"7749:37:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[4] memory"}},"id":4337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7787:6:8","memberName":"length","nodeType":"MemberAccess","src":"7749:44:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7745:48:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4371,"initializationExpression":{"assignments":[4331],"declarations":[{"constant":false,"id":4331,"mutability":"mutable","name":"i","nameLocation":"7738:1:8","nodeType":"VariableDeclaration","scope":4371,"src":"7730:9:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4330,"name":"uint256","nodeType":"ElementaryTypeName","src":"7730:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4333,"initialValue":{"hexValue":"30","id":4332,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7742:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7730:13:8"},"loopExpression":{"expression":{"id":4343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4339,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4331,"src":"7795:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4340,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4331,"src":"7799:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7801:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"7799:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7799:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7795:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4344,"nodeType":"ExpressionStatement","src":"7795:20:8"},"nodeType":"ForStatement","src":"7725:326:8"},{"body":{"id":4406,"nodeType":"Block","src":"8147:138:8","statements":[{"expression":{"id":4398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4387,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"8161:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4390,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8167:25:8","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"8161:31:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":4391,"indexExpression":{"id":4389,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4373,"src":"8193:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8161:34:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4394,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"8219:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4396,"indexExpression":{"id":4395,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"8236:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8219:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4392,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"8198:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8212:6:8","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"8198:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":4397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8198:41:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"8161:78:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":4399,"nodeType":"ExpressionStatement","src":"8161:78:8"},{"expression":{"id":4404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4400,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"8254:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4401,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"8258:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8260:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"8258:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8258:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8254:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4405,"nodeType":"ExpressionStatement","src":"8254:20:8"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4376,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4373,"src":"8081:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":4377,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"8085:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4378,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8091:25:8","memberName":"state_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":427,"src":"8085:31:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$4_memory_ptr","typeString":"struct PairingsBn254.Fr memory[4] memory"}},"id":4379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8117:6:8","memberName":"length","nodeType":"MemberAccess","src":"8085:38:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8081:42:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4407,"initializationExpression":{"assignments":[4373],"declarations":[{"constant":false,"id":4373,"mutability":"mutable","name":"i","nameLocation":"8074:1:8","nodeType":"VariableDeclaration","scope":4407,"src":"8066:9:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4372,"name":"uint256","nodeType":"ElementaryTypeName","src":"8066:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4375,"initialValue":{"hexValue":"30","id":4374,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8078:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8066:13:8"},"loopExpression":{"expression":{"id":4385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4381,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4373,"src":"8125:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4382,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4373,"src":"8129:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8131:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"8129:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8129:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8125:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4386,"nodeType":"ExpressionStatement","src":"8125:20:8"},"nodeType":"ForStatement","src":"8061:224:8"},{"body":{"id":4442,"nodeType":"Block","src":"8387:144:8","statements":[{"expression":{"id":4434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4423,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"8401:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4426,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8407:31:8","memberName":"state_polys_openings_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":432,"src":"8401:37:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$1_memory_ptr","typeString":"struct PairingsBn254.Fr memory[1] memory"}},"id":4427,"indexExpression":{"id":4425,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4409,"src":"8439:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8401:40:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4430,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"8465:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4432,"indexExpression":{"id":4431,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"8482:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8465:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4428,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"8444:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8458:6:8","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"8444:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":4433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8444:41:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"8401:84:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":4435,"nodeType":"ExpressionStatement","src":"8401:84:8"},{"expression":{"id":4440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4436,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"8500:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4437,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"8504:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8506:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"8504:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8504:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8500:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4441,"nodeType":"ExpressionStatement","src":"8500:20:8"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4412,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4409,"src":"8315:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":4413,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"8319:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4414,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8325:31:8","memberName":"state_polys_openings_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":432,"src":"8319:37:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$1_memory_ptr","typeString":"struct PairingsBn254.Fr memory[1] memory"}},"id":4415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8357:6:8","memberName":"length","nodeType":"MemberAccess","src":"8319:44:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8315:48:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4443,"initializationExpression":{"assignments":[4409],"declarations":[{"constant":false,"id":4409,"mutability":"mutable","name":"i","nameLocation":"8308:1:8","nodeType":"VariableDeclaration","scope":4443,"src":"8300:9:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4408,"name":"uint256","nodeType":"ElementaryTypeName","src":"8300:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4411,"initialValue":{"hexValue":"30","id":4410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8312:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8300:13:8"},"loopExpression":{"expression":{"id":4421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4417,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4409,"src":"8365:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4418,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4409,"src":"8369:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8371:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"8369:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8369:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8365:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4422,"nodeType":"ExpressionStatement","src":"8365:20:8"},"nodeType":"ForStatement","src":"8295:236:8"},{"body":{"id":4478,"nodeType":"Block","src":"8629:141:8","statements":[{"expression":{"id":4470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4459,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"8643:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4462,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8649:28:8","memberName":"gate_selectors_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":437,"src":"8643:34:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$1_memory_ptr","typeString":"struct PairingsBn254.Fr memory[1] memory"}},"id":4463,"indexExpression":{"id":4461,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4445,"src":"8678:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8643:37:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4466,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"8704:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4468,"indexExpression":{"id":4467,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"8721:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8704:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4464,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"8683:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8697:6:8","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"8683:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":4469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8683:41:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"8643:81:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":4471,"nodeType":"ExpressionStatement","src":"8643:81:8"},{"expression":{"id":4476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4472,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"8739:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4473,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"8743:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8745:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"8743:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8743:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8739:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4477,"nodeType":"ExpressionStatement","src":"8739:20:8"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4448,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4445,"src":"8560:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":4449,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"8564:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4450,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8570:28:8","memberName":"gate_selectors_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":437,"src":"8564:34:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$1_memory_ptr","typeString":"struct PairingsBn254.Fr memory[1] memory"}},"id":4451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8599:6:8","memberName":"length","nodeType":"MemberAccess","src":"8564:41:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8560:45:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4479,"initializationExpression":{"assignments":[4445],"declarations":[{"constant":false,"id":4445,"mutability":"mutable","name":"i","nameLocation":"8553:1:8","nodeType":"VariableDeclaration","scope":4479,"src":"8545:9:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4444,"name":"uint256","nodeType":"ElementaryTypeName","src":"8545:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4447,"initialValue":{"hexValue":"30","id":4446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8557:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8545:13:8"},"loopExpression":{"expression":{"id":4457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4453,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4445,"src":"8607:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4454,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4445,"src":"8611:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8613:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"8611:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8611:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8607:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4458,"nodeType":"ExpressionStatement","src":"8607:20:8"},"nodeType":"ForStatement","src":"8540:230:8"},{"body":{"id":4514,"nodeType":"Block","src":"8876:149:8","statements":[{"expression":{"id":4506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":4495,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"8890:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4498,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8896:36:8","memberName":"copy_permutation_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":444,"src":"8890:42:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$3_memory_ptr","typeString":"struct PairingsBn254.Fr memory[3] memory"}},"id":4499,"indexExpression":{"id":4497,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"8933:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8890:45:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4502,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"8959:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4504,"indexExpression":{"id":4503,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"8976:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8959:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4500,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"8938:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8952:6:8","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"8938:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":4505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8938:41:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"8890:89:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":4507,"nodeType":"ExpressionStatement","src":"8890:89:8"},{"expression":{"id":4512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4508,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"8994:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4509,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"8998:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9000:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"8998:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8998:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8994:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4513,"nodeType":"ExpressionStatement","src":"8994:20:8"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4484,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"8799:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":4485,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"8803:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4486,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8809:36:8","memberName":"copy_permutation_polys_openings_at_z","nodeType":"MemberAccess","referencedDeclaration":444,"src":"8803:42:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Fr_$6030_memory_ptr_$3_memory_ptr","typeString":"struct PairingsBn254.Fr memory[3] memory"}},"id":4487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8846:6:8","memberName":"length","nodeType":"MemberAccess","src":"8803:49:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8799:53:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4515,"initializationExpression":{"assignments":[4481],"declarations":[{"constant":false,"id":4481,"mutability":"mutable","name":"i","nameLocation":"8792:1:8","nodeType":"VariableDeclaration","scope":4515,"src":"8784:9:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4480,"name":"uint256","nodeType":"ElementaryTypeName","src":"8784:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4483,"initialValue":{"hexValue":"30","id":4482,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8796:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8784:13:8"},"loopExpression":{"expression":{"id":4493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4489,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"8854:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4490,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"8858:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8860:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"8858:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8858:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8854:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4494,"nodeType":"ExpressionStatement","src":"8854:20:8"},"nodeType":"ForStatement","src":"8779:246:8"},{"expression":{"id":4525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4516,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"9034:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4518,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9040:49:8","memberName":"copy_permutation_grand_product_opening_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":447,"src":"9034:55:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4521,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"9113:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4523,"indexExpression":{"id":4522,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9130:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9113:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4519,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"9092:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9106:6:8","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"9092:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":4524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9092:41:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"9034:99:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":4526,"nodeType":"ExpressionStatement","src":"9034:99:8"},{"expression":{"id":4531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4527,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9144:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4528,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9148:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9150:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"9148:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9148:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9144:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4532,"nodeType":"ExpressionStatement","src":"9144:20:8"},{"expression":{"id":4542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4533,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"9174:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4535,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9180:32:8","memberName":"lookup_s_poly_opening_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":462,"src":"9174:38:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4538,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"9236:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4540,"indexExpression":{"id":4539,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9253:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9236:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4536,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"9215:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9229:6:8","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"9215:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":4541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9215:41:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"9174:82:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":4543,"nodeType":"ExpressionStatement","src":"9174:82:8"},{"expression":{"id":4548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4544,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9266:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4545,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9270:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9272:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"9270:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9270:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9266:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4549,"nodeType":"ExpressionStatement","src":"9266:20:8"},{"expression":{"id":4559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4550,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"9296:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4552,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9302:39:8","memberName":"lookup_grand_product_opening_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":465,"src":"9296:45:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4555,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"9365:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4557,"indexExpression":{"id":4556,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9382:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9365:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4553,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"9344:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9358:6:8","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"9344:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":4558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9344:41:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"9296:89:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":4560,"nodeType":"ExpressionStatement","src":"9296:89:8"},{"expression":{"id":4565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4561,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9396:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4562,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9400:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9402:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"9400:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9400:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9396:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4566,"nodeType":"ExpressionStatement","src":"9396:20:8"},{"expression":{"id":4576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4567,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"9426:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4569,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9432:26:8","memberName":"lookup_t_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":468,"src":"9426:32:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4572,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"9482:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4574,"indexExpression":{"id":4573,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9499:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9482:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4570,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"9461:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9475:6:8","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"9461:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":4575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9461:41:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"9426:76:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":4577,"nodeType":"ExpressionStatement","src":"9426:76:8"},{"expression":{"id":4582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4578,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9513:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4579,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9517:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9519:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"9517:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9517:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9513:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4583,"nodeType":"ExpressionStatement","src":"9513:20:8"},{"expression":{"id":4593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4584,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"9543:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4586,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9549:32:8","memberName":"lookup_t_poly_opening_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":471,"src":"9543:38:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4589,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"9605:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4591,"indexExpression":{"id":4590,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9622:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9605:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4587,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"9584:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9598:6:8","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"9584:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":4592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9584:41:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"9543:82:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":4594,"nodeType":"ExpressionStatement","src":"9543:82:8"},{"expression":{"id":4599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4595,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9635:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4596,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9639:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9641:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"9639:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9639:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9635:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4600,"nodeType":"ExpressionStatement","src":"9635:20:8"},{"expression":{"id":4610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4601,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"9665:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4603,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9671:33:8","memberName":"lookup_selector_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":474,"src":"9665:39:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4606,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"9728:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4608,"indexExpression":{"id":4607,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9745:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9728:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4604,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"9707:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9721:6:8","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"9707:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":4609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9707:41:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"9665:83:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":4611,"nodeType":"ExpressionStatement","src":"9665:83:8"},{"expression":{"id":4616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4612,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9758:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4613,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9762:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9764:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"9762:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9762:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9758:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4617,"nodeType":"ExpressionStatement","src":"9758:20:8"},{"expression":{"id":4627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4618,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"9788:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4620,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9794:35:8","memberName":"lookup_table_type_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":477,"src":"9788:41:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4623,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"9853:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4625,"indexExpression":{"id":4624,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9870:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9853:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4621,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"9832:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9846:6:8","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"9832:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":4626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9832:41:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"9788:85:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":4628,"nodeType":"ExpressionStatement","src":"9788:85:8"},{"expression":{"id":4633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4629,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9883:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4630,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9887:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9889:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"9887:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9887:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9883:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4634,"nodeType":"ExpressionStatement","src":"9883:20:8"},{"expression":{"id":4644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4635,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"9913:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4637,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9919:26:8","memberName":"quotient_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":450,"src":"9913:32:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4640,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"9969:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4642,"indexExpression":{"id":4641,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9986:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9969:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4638,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"9948:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9962:6:8","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"9948:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":4643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9948:41:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"9913:76:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":4645,"nodeType":"ExpressionStatement","src":"9913:76:8"},{"expression":{"id":4650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4646,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"9999:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4647,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"10003:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10005:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"10003:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4649,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10003:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9999:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4651,"nodeType":"ExpressionStatement","src":"9999:20:8"},{"expression":{"id":4661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4652,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"10029:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4654,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10035:31:8","memberName":"linearization_poly_opening_at_z","nodeType":"MemberAccess","referencedDeclaration":453,"src":"10029:37:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4657,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"10090:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4659,"indexExpression":{"id":4658,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"10107:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10090:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4655,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"10069:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10083:6:8","memberName":"new_fr","nodeType":"MemberAccess","referencedDeclaration":6049,"src":"10069:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.Fr memory)"}},"id":4660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10069:41:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"10029:81:8","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":4662,"nodeType":"ExpressionStatement","src":"10029:81:8"},{"expression":{"id":4667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4663,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"10120:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4664,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"10124:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10126:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"10124:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10124:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10120:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4668,"nodeType":"ExpressionStatement","src":"10120:20:8"},{"expression":{"id":4683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4669,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"10150:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4671,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10156:18:8","memberName":"opening_proof_at_z","nodeType":"MemberAccess","referencedDeclaration":480,"src":"10150:24:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4674,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"10219:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4676,"indexExpression":{"id":4675,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"10236:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10219:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":4677,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"10252:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4681,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4678,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"10269:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10271:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"10269:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10269:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10252:34:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4672,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"10177:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10191:14:8","memberName":"new_g1_checked","nodeType":"MemberAccess","referencedDeclaration":6343,"src":"10177:28:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":4682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10177:119:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"10150:146:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":4684,"nodeType":"ExpressionStatement","src":"10150:146:8"},{"expression":{"id":4690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4685,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"10306:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"32","id":4688,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10325:1:8","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"expression":{"id":4686,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"10310:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10312:12:8","memberName":"uncheckedAdd","nodeType":"MemberAccess","referencedDeclaration":329,"src":"10310:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10310:17:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10306:21:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4691,"nodeType":"ExpressionStatement","src":"10306:21:8"},{"expression":{"id":4706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":4692,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4179,"src":"10337:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"id":4694,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10343:24:8","memberName":"opening_proof_at_z_omega","nodeType":"MemberAccess","referencedDeclaration":483,"src":"10337:30:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4697,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"10412:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4699,"indexExpression":{"id":4698,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"10429:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10412:19:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":4700,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"10445:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4704,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4701,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4219,"src":"10462:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10464:12:8","memberName":"uncheckedInc","nodeType":"MemberAccess","referencedDeclaration":314,"src":"10462:14:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":4703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10462:16:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10445:34:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4695,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"10370:13:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":4696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10384:14:8","memberName":"new_g1_checked","nodeType":"MemberAccess","referencedDeclaration":6343,"src":"10370:28:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_struct$_G1Point_$6027_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (struct PairingsBn254.G1Point memory)"}},"id":4705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10370:119:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"10337:152:8","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":4707,"nodeType":"ExpressionStatement","src":"10337:152:8"}]},"id":4709,"implemented":true,"kind":"function","modifiers":[],"name":"deserialize_proof","nameLocation":"6371:17:8","nodeType":"FunctionDefinition","parameters":{"id":4176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4172,"mutability":"mutable","name":"public_inputs","nameLocation":"6408:13:8","nodeType":"VariableDeclaration","scope":4709,"src":"6389:32:8","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4170,"name":"uint256","nodeType":"ElementaryTypeName","src":"6389:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4171,"nodeType":"ArrayTypeName","src":"6389:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4175,"mutability":"mutable","name":"serialized_proof","nameLocation":"6442:16:8","nodeType":"VariableDeclaration","scope":4709,"src":"6423:35:8","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4173,"name":"uint256","nodeType":"ElementaryTypeName","src":"6423:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4174,"nodeType":"ArrayTypeName","src":"6423:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"6388:71:8"},"returnParameters":{"id":4180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4179,"mutability":"mutable","name":"proof","nameLocation":"6520:5:8","nodeType":"VariableDeclaration","scope":4709,"src":"6507:18:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"},"typeName":{"id":4178,"nodeType":"UserDefinedTypeName","pathNode":{"id":4177,"name":"Proof","nameLocations":["6507:5:8"],"nodeType":"IdentifierPath","referencedDeclaration":484,"src":"6507:5:8"},"referencedDeclaration":484,"src":"6507:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"}},"visibility":"internal"}],"src":"6506:20:8"},"scope":4749,"src":"6362:4134:8","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4747,"nodeType":"Block","src":"10661:240:8","statements":[{"assignments":[4722],"declarations":[{"constant":false,"id":4722,"mutability":"mutable","name":"vk","nameLocation":"10694:2:8","nodeType":"VariableDeclaration","scope":4747,"src":"10671:25:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey"},"typeName":{"id":4721,"nodeType":"UserDefinedTypeName","pathNode":{"id":4720,"name":"VerificationKey","nameLocations":["10671:15:8"],"nodeType":"IdentifierPath","referencedDeclaration":387,"src":"10671:15:8"},"referencedDeclaration":387,"src":"10671:15:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_storage_ptr","typeString":"struct VerificationKey"}},"visibility":"internal"}],"id":4725,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":4723,"name":"get_verification_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4169,"src":"10699:20:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_VerificationKey_$387_memory_ptr_$","typeString":"function () pure returns (struct VerificationKey memory)"}},"id":4724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10699:22:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"nodeType":"VariableDeclarationStatement","src":"10671:50:8"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4727,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4722,"src":"10739:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}},"id":4728,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10742:10:8","memberName":"num_inputs","nodeType":"MemberAccess","referencedDeclaration":345,"src":"10739:13:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":4729,"name":"public_inputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"10756:13:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":4730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10770:6:8","memberName":"length","nodeType":"MemberAccess","src":"10756:20:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10739:37:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":4726,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10731:7:8","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":4732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10731:46:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4733,"nodeType":"ExpressionStatement","src":"10731:46:8"},{"assignments":[4736],"declarations":[{"constant":false,"id":4736,"mutability":"mutable","name":"proof","nameLocation":"10801:5:8","nodeType":"VariableDeclaration","scope":4747,"src":"10788:18:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"},"typeName":{"id":4735,"nodeType":"UserDefinedTypeName","pathNode":{"id":4734,"name":"Proof","nameLocations":["10788:5:8"],"nodeType":"IdentifierPath","referencedDeclaration":484,"src":"10788:5:8"},"referencedDeclaration":484,"src":"10788:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_storage_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof"}},"visibility":"internal"}],"id":4741,"initialValue":{"arguments":[{"id":4738,"name":"public_inputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"10827:13:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},{"id":4739,"name":"serialized_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4715,"src":"10842:16:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}],"id":4737,"name":"deserialize_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4709,"src":"10809:17:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_calldata_ptr_$_t_array$_t_uint256_$dyn_calldata_ptr_$returns$_t_struct$_Proof_$484_memory_ptr_$","typeString":"function (uint256[] calldata,uint256[] calldata) pure returns (struct Plonk4VerifierWithAccessToDNext.Proof memory)"}},"id":4740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10809:50:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},"nodeType":"VariableDeclarationStatement","src":"10788:71:8"},{"expression":{"arguments":[{"id":4743,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4736,"src":"10884:5:8","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"}},{"id":4744,"name":"vk","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4722,"src":"10891:2:8","typeDescriptions":{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Proof_$484_memory_ptr","typeString":"struct Plonk4VerifierWithAccessToDNext.Proof memory"},{"typeIdentifier":"t_struct$_VerificationKey_$387_memory_ptr","typeString":"struct VerificationKey memory"}],"id":4742,"name":"verify","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1617,"src":"10877:6:8","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Proof_$484_memory_ptr_$_t_struct$_VerificationKey_$387_memory_ptr_$returns$_t_bool_$","typeString":"function (struct Plonk4VerifierWithAccessToDNext.Proof memory,struct VerificationKey memory) view returns (bool)"}},"id":4745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10877:17:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":4719,"id":4746,"nodeType":"Return","src":"10870:24:8"}]},"functionSelector":"330deb9f","id":4748,"implemented":true,"kind":"function","modifiers":[],"name":"verify_serialized_proof","nameLocation":"10511:23:8","nodeType":"FunctionDefinition","parameters":{"id":4716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4712,"mutability":"mutable","name":"public_inputs","nameLocation":"10554:13:8","nodeType":"VariableDeclaration","scope":4748,"src":"10535:32:8","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4710,"name":"uint256","nodeType":"ElementaryTypeName","src":"10535:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4711,"nodeType":"ArrayTypeName","src":"10535:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4715,"mutability":"mutable","name":"serialized_proof","nameLocation":"10588:16:8","nodeType":"VariableDeclaration","scope":4748,"src":"10569:35:8","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4713,"name":"uint256","nodeType":"ElementaryTypeName","src":"10569:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4714,"nodeType":"ArrayTypeName","src":"10569:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10534:71:8"},"returnParameters":{"id":4719,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4718,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4748,"src":"10651:4:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4717,"name":"bool","nodeType":"ElementaryTypeName","src":"10651:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10650:6:8"},"scope":4749,"src":"10502:399:8","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":4750,"src":"169:10734:8","usedErrors":[]}],"src":"47:10857:8"},"id":8},"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IDiamondCut.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IDiamondCut.sol","exportedSymbols":{"Diamond":[6011],"IDiamondCut":[4805]},"id":4806,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":4751,"literals":["solidity","^","0.8"],"nodeType":"PragmaDirective","src":"47:21:9"},{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/Diamond.sol","file":"../libraries/Diamond.sol","id":4752,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4806,"sourceUnit":6012,"src":"70:34:9","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IDiamondCut","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":4805,"linearizedBaseContracts":[4805],"name":"IDiamondCut","nameLocation":"116:11:9","nodeType":"ContractDefinition","nodes":[{"functionSelector":"1a97bca1","id":4761,"implemented":false,"kind":"function","modifiers":[],"name":"proposeDiamondCut","nameLocation":"143:17:9","nodeType":"FunctionDefinition","parameters":{"id":4759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4756,"mutability":"mutable","name":"_facetCuts","nameLocation":"189:10:9","nodeType":"VariableDeclaration","scope":4761,"src":"161:38:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$5308_calldata_ptr_$dyn_calldata_ptr","typeString":"struct Diamond.FacetCut[]"},"typeName":{"baseType":{"id":4754,"nodeType":"UserDefinedTypeName","pathNode":{"id":4753,"name":"Diamond.FacetCut","nameLocations":["161:7:9","169:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":5308,"src":"161:16:9"},"referencedDeclaration":5308,"src":"161:16:9","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$5308_storage_ptr","typeString":"struct Diamond.FacetCut"}},"id":4755,"nodeType":"ArrayTypeName","src":"161:18:9","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$5308_storage_$dyn_storage_ptr","typeString":"struct Diamond.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":4758,"mutability":"mutable","name":"_initAddress","nameLocation":"209:12:9","nodeType":"VariableDeclaration","scope":4761,"src":"201:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4757,"name":"address","nodeType":"ElementaryTypeName","src":"201:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"160:62:9"},"returnParameters":{"id":4760,"nodeType":"ParameterList","parameters":[],"src":"231:0:9"},"scope":4805,"src":"134:98:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"62c727ab","id":4764,"implemented":false,"kind":"function","modifiers":[],"name":"cancelDiamondCutProposal","nameLocation":"247:24:9","nodeType":"FunctionDefinition","parameters":{"id":4762,"nodeType":"ParameterList","parameters":[],"src":"271:2:9"},"returnParameters":{"id":4763,"nodeType":"ParameterList","parameters":[],"src":"282:0:9"},"scope":4805,"src":"238:45:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"0b66fc12","id":4770,"implemented":false,"kind":"function","modifiers":[],"name":"executeDiamondCutProposal","nameLocation":"298:25:9","nodeType":"FunctionDefinition","parameters":{"id":4768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4767,"mutability":"mutable","name":"_diamondCut","nameLocation":"356:11:9","nodeType":"VariableDeclaration","scope":4770,"src":"324:43:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondCutData_$5317_calldata_ptr","typeString":"struct Diamond.DiamondCutData"},"typeName":{"id":4766,"nodeType":"UserDefinedTypeName","pathNode":{"id":4765,"name":"Diamond.DiamondCutData","nameLocations":["324:7:9","332:14:9"],"nodeType":"IdentifierPath","referencedDeclaration":5317,"src":"324:22:9"},"referencedDeclaration":5317,"src":"324:22:9","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondCutData_$5317_storage_ptr","typeString":"struct Diamond.DiamondCutData"}},"visibility":"internal"}],"src":"323:45:9"},"returnParameters":{"id":4769,"nodeType":"ParameterList","parameters":[],"src":"377:0:9"},"scope":4805,"src":"289:89:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"b2f44526","id":4773,"implemented":false,"kind":"function","modifiers":[],"name":"emergencyFreezeDiamond","nameLocation":"393:22:9","nodeType":"FunctionDefinition","parameters":{"id":4771,"nodeType":"ParameterList","parameters":[],"src":"415:2:9"},"returnParameters":{"id":4772,"nodeType":"ParameterList","parameters":[],"src":"426:0:9"},"scope":4805,"src":"384:43:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"17338945","id":4776,"implemented":false,"kind":"function","modifiers":[],"name":"unfreezeDiamond","nameLocation":"442:15:9","nodeType":"FunctionDefinition","parameters":{"id":4774,"nodeType":"ParameterList","parameters":[],"src":"457:2:9"},"returnParameters":{"id":4775,"nodeType":"ParameterList","parameters":[],"src":"468:0:9"},"scope":4805,"src":"433:36:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"635abadb","id":4781,"implemented":false,"kind":"function","modifiers":[],"name":"approveEmergencyDiamondCutAsSecurityCouncilMember","nameLocation":"484:49:9","nodeType":"FunctionDefinition","parameters":{"id":4779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4778,"mutability":"mutable","name":"_diamondCutHash","nameLocation":"542:15:9","nodeType":"VariableDeclaration","scope":4781,"src":"534:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4777,"name":"bytes32","nodeType":"ElementaryTypeName","src":"534:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"533:25:9"},"returnParameters":{"id":4780,"nodeType":"ParameterList","parameters":[],"src":"567:0:9"},"scope":4805,"src":"475:93:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"anonymous":false,"eventSelector":"b660ff2e2beb524469d93421fc2ce64613213acc498afdea46f054941af61145","id":4789,"name":"DiamondCutProposal","nameLocation":"655:18:9","nodeType":"EventDefinition","parameters":{"id":4788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4785,"indexed":false,"mutability":"mutable","name":"_facetCuts","nameLocation":"693:10:9","nodeType":"VariableDeclaration","scope":4789,"src":"674:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$5308_memory_ptr_$dyn_memory_ptr","typeString":"struct Diamond.FacetCut[]"},"typeName":{"baseType":{"id":4783,"nodeType":"UserDefinedTypeName","pathNode":{"id":4782,"name":"Diamond.FacetCut","nameLocations":["674:7:9","682:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":5308,"src":"674:16:9"},"referencedDeclaration":5308,"src":"674:16:9","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$5308_storage_ptr","typeString":"struct Diamond.FacetCut"}},"id":4784,"nodeType":"ArrayTypeName","src":"674:18:9","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$5308_storage_$dyn_storage_ptr","typeString":"struct Diamond.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":4787,"indexed":false,"mutability":"mutable","name":"_initAddress","nameLocation":"713:12:9","nodeType":"VariableDeclaration","scope":4789,"src":"705:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4786,"name":"address","nodeType":"ElementaryTypeName","src":"705:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"673:53:9"},"src":"649:78:9"},{"anonymous":false,"eventSelector":"8afd5bec5589b79d373ce0dc62f203d3bd736635ae091c1a7ecb702b8497b56d","id":4791,"name":"DiamondCutProposalCancelation","nameLocation":"739:29:9","nodeType":"EventDefinition","parameters":{"id":4790,"nodeType":"ParameterList","parameters":[],"src":"768:2:9"},"src":"733:38:9"},{"anonymous":false,"eventSelector":"2939ddef15b725effeb997aeabeae70f7fd143da62d054fee20a65879c0327be","id":4796,"name":"DiamondCutProposalExecution","nameLocation":"783:27:9","nodeType":"EventDefinition","parameters":{"id":4795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4794,"indexed":false,"mutability":"mutable","name":"_diamondCut","nameLocation":"834:11:9","nodeType":"VariableDeclaration","scope":4796,"src":"811:34:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondCutData_$5317_memory_ptr","typeString":"struct Diamond.DiamondCutData"},"typeName":{"id":4793,"nodeType":"UserDefinedTypeName","pathNode":{"id":4792,"name":"Diamond.DiamondCutData","nameLocations":["811:7:9","819:14:9"],"nodeType":"IdentifierPath","referencedDeclaration":5317,"src":"811:22:9"},"referencedDeclaration":5317,"src":"811:22:9","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondCutData_$5317_storage_ptr","typeString":"struct Diamond.DiamondCutData"}},"visibility":"internal"}],"src":"810:36:9"},"src":"777:70:9"},{"anonymous":false,"eventSelector":"afd1d5b84f004ceb4200b20fa7ff616c76b383dd0487655feb35ae687f45386b","id":4798,"name":"EmergencyFreeze","nameLocation":"859:15:9","nodeType":"EventDefinition","parameters":{"id":4797,"nodeType":"ParameterList","parameters":[],"src":"874:2:9"},"src":"853:24:9"},{"anonymous":false,"eventSelector":"2f05ba71d0df11bf5fa562a6569d70c4f80da84284badbe015ce1456063d0ded","id":4800,"name":"Unfreeze","nameLocation":"889:8:9","nodeType":"EventDefinition","parameters":{"id":4799,"nodeType":"ParameterList","parameters":[],"src":"897:2:9"},"src":"883:17:9"},{"anonymous":false,"eventSelector":"352094114156d59abcd7a0b1f1b0869e804a4c9d433491d01395602336dd5bb5","id":4804,"name":"EmergencyDiamondCutApproved","nameLocation":"912:27:9","nodeType":"EventDefinition","parameters":{"id":4803,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4802,"indexed":false,"mutability":"mutable","name":"_address","nameLocation":"948:8:9","nodeType":"VariableDeclaration","scope":4804,"src":"940:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4801,"name":"address","nodeType":"ElementaryTypeName","src":"940:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"939:18:9"},"src":"906:52:9"}],"scope":4806,"src":"106:854:9","usedErrors":[]}],"src":"47:914:9"},"id":9},"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IExecutor.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IExecutor.sol","exportedSymbols":{"IExecutor":[4915]},"id":4916,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":4807,"literals":["solidity","^","0.8"],"nodeType":"PragmaDirective","src":"47:21:10"},{"abstract":false,"baseContracts":[],"canonicalName":"IExecutor","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":4915,"linearizedBaseContracts":[4915],"name":"IExecutor","nameLocation":"80:9:10","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IExecutor.StoredBlockInfo","id":4824,"members":[{"constant":false,"id":4809,"mutability":"mutable","name":"blockNumber","nameLocation":"914:11:10","nodeType":"VariableDeclaration","scope":4824,"src":"907:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4808,"name":"uint64","nodeType":"ElementaryTypeName","src":"907:6:10","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":4811,"mutability":"mutable","name":"blockHash","nameLocation":"943:9:10","nodeType":"VariableDeclaration","scope":4824,"src":"935:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4810,"name":"bytes32","nodeType":"ElementaryTypeName","src":"935:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4813,"mutability":"mutable","name":"indexRepeatedStorageChanges","nameLocation":"969:27:10","nodeType":"VariableDeclaration","scope":4824,"src":"962:34:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4812,"name":"uint64","nodeType":"ElementaryTypeName","src":"962:6:10","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":4815,"mutability":"mutable","name":"numberOfLayer1Txs","nameLocation":"1014:17:10","nodeType":"VariableDeclaration","scope":4824,"src":"1006:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4814,"name":"uint256","nodeType":"ElementaryTypeName","src":"1006:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4817,"mutability":"mutable","name":"priorityOperationsHash","nameLocation":"1049:22:10","nodeType":"VariableDeclaration","scope":4824,"src":"1041:30:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4816,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1041:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4819,"mutability":"mutable","name":"l2LogsTreeRoot","nameLocation":"1089:14:10","nodeType":"VariableDeclaration","scope":4824,"src":"1081:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4818,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1081:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4821,"mutability":"mutable","name":"timestamp","nameLocation":"1121:9:10","nodeType":"VariableDeclaration","scope":4824,"src":"1113:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4820,"name":"uint256","nodeType":"ElementaryTypeName","src":"1113:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4823,"mutability":"mutable","name":"commitment","nameLocation":"1148:10:10","nodeType":"VariableDeclaration","scope":4824,"src":"1140:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4822,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1140:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"StoredBlockInfo","nameLocation":"881:15:10","nodeType":"StructDefinition","scope":4915,"src":"874:291:10","visibility":"public"},{"canonicalName":"IExecutor.CommitBlockInfo","id":4853,"members":[{"constant":false,"id":4826,"mutability":"mutable","name":"blockNumber","nameLocation":"2563:11:10","nodeType":"VariableDeclaration","scope":4853,"src":"2556:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4825,"name":"uint64","nodeType":"ElementaryTypeName","src":"2556:6:10","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":4828,"mutability":"mutable","name":"timestamp","nameLocation":"2591:9:10","nodeType":"VariableDeclaration","scope":4853,"src":"2584:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4827,"name":"uint64","nodeType":"ElementaryTypeName","src":"2584:6:10","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":4830,"mutability":"mutable","name":"indexRepeatedStorageChanges","nameLocation":"2617:27:10","nodeType":"VariableDeclaration","scope":4853,"src":"2610:34:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4829,"name":"uint64","nodeType":"ElementaryTypeName","src":"2610:6:10","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":4832,"mutability":"mutable","name":"newStateRoot","nameLocation":"2662:12:10","nodeType":"VariableDeclaration","scope":4853,"src":"2654:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4831,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2654:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4834,"mutability":"mutable","name":"ergsPerCodeDecommittmentWord","nameLocation":"2691:28:10","nodeType":"VariableDeclaration","scope":4853,"src":"2684:35:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4833,"name":"uint16","nodeType":"ElementaryTypeName","src":"2684:6:10","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":4836,"mutability":"mutable","name":"numberOfLayer1Txs","nameLocation":"2737:17:10","nodeType":"VariableDeclaration","scope":4853,"src":"2729:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4835,"name":"uint256","nodeType":"ElementaryTypeName","src":"2729:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4838,"mutability":"mutable","name":"l2LogsTreeRoot","nameLocation":"2772:14:10","nodeType":"VariableDeclaration","scope":4853,"src":"2764:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4837,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2764:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4840,"mutability":"mutable","name":"priorityOperationsHash","nameLocation":"2804:22:10","nodeType":"VariableDeclaration","scope":4853,"src":"2796:30:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4839,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2796:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4842,"mutability":"mutable","name":"initialStorageChanges","nameLocation":"2842:21:10","nodeType":"VariableDeclaration","scope":4853,"src":"2836:27:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4841,"name":"bytes","nodeType":"ElementaryTypeName","src":"2836:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4844,"mutability":"mutable","name":"repeatedStorageChanges","nameLocation":"2879:22:10","nodeType":"VariableDeclaration","scope":4853,"src":"2873:28:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4843,"name":"bytes","nodeType":"ElementaryTypeName","src":"2873:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4846,"mutability":"mutable","name":"l2Logs","nameLocation":"2917:6:10","nodeType":"VariableDeclaration","scope":4853,"src":"2911:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4845,"name":"bytes","nodeType":"ElementaryTypeName","src":"2911:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4849,"mutability":"mutable","name":"l2ArbitraryLengthMessages","nameLocation":"2941:25:10","nodeType":"VariableDeclaration","scope":4853,"src":"2933:33:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":4847,"name":"bytes","nodeType":"ElementaryTypeName","src":"2933:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":4848,"nodeType":"ArrayTypeName","src":"2933:7:10","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"},{"constant":false,"id":4852,"mutability":"mutable","name":"factoryDeps","nameLocation":"2984:11:10","nodeType":"VariableDeclaration","scope":4853,"src":"2976:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":4850,"name":"bytes","nodeType":"ElementaryTypeName","src":"2976:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":4851,"nodeType":"ArrayTypeName","src":"2976:7:10","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"name":"CommitBlockInfo","nameLocation":"2530:15:10","nodeType":"StructDefinition","scope":4915,"src":"2523:479:10","visibility":"public"},{"canonicalName":"IExecutor.ProofInput","id":4860,"members":[{"constant":false,"id":4856,"mutability":"mutable","name":"recurisiveAggregationInput","nameLocation":"3243:26:10","nodeType":"VariableDeclaration","scope":4860,"src":"3233:36:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4854,"name":"uint256","nodeType":"ElementaryTypeName","src":"3233:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4855,"nodeType":"ArrayTypeName","src":"3233:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4859,"mutability":"mutable","name":"serializedProof","nameLocation":"3289:15:10","nodeType":"VariableDeclaration","scope":4860,"src":"3279:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4857,"name":"uint256","nodeType":"ElementaryTypeName","src":"3279:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4858,"nodeType":"ArrayTypeName","src":"3279:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"ProofInput","nameLocation":"3212:10:10","nodeType":"StructDefinition","scope":4915,"src":"3205:106:10","visibility":"public"},{"functionSelector":"fa4f3688","id":4870,"implemented":false,"kind":"function","modifiers":[],"name":"commitBlocks","nameLocation":"3326:12:10","nodeType":"FunctionDefinition","parameters":{"id":4868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4863,"mutability":"mutable","name":"_lastCommittedBlockData","nameLocation":"3364:23:10","nodeType":"VariableDeclaration","scope":4870,"src":"3339:48:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StoredBlockInfo_$4824_calldata_ptr","typeString":"struct IExecutor.StoredBlockInfo"},"typeName":{"id":4862,"nodeType":"UserDefinedTypeName","pathNode":{"id":4861,"name":"StoredBlockInfo","nameLocations":["3339:15:10"],"nodeType":"IdentifierPath","referencedDeclaration":4824,"src":"3339:15:10"},"referencedDeclaration":4824,"src":"3339:15:10","typeDescriptions":{"typeIdentifier":"t_struct$_StoredBlockInfo_$4824_storage_ptr","typeString":"struct IExecutor.StoredBlockInfo"}},"visibility":"internal"},{"constant":false,"id":4867,"mutability":"mutable","name":"_newBlocksData","nameLocation":"3416:14:10","nodeType":"VariableDeclaration","scope":4870,"src":"3389:41:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CommitBlockInfo_$4853_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IExecutor.CommitBlockInfo[]"},"typeName":{"baseType":{"id":4865,"nodeType":"UserDefinedTypeName","pathNode":{"id":4864,"name":"CommitBlockInfo","nameLocations":["3389:15:10"],"nodeType":"IdentifierPath","referencedDeclaration":4853,"src":"3389:15:10"},"referencedDeclaration":4853,"src":"3389:15:10","typeDescriptions":{"typeIdentifier":"t_struct$_CommitBlockInfo_$4853_storage_ptr","typeString":"struct IExecutor.CommitBlockInfo"}},"id":4866,"nodeType":"ArrayTypeName","src":"3389:17:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CommitBlockInfo_$4853_storage_$dyn_storage_ptr","typeString":"struct IExecutor.CommitBlockInfo[]"}},"visibility":"internal"}],"src":"3338:93:10"},"returnParameters":{"id":4869,"nodeType":"ParameterList","parameters":[],"src":"3448:0:10"},"scope":4915,"src":"3317:132:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"7739cbe7","id":4883,"implemented":false,"kind":"function","modifiers":[],"name":"proveBlocks","nameLocation":"3464:11:10","nodeType":"FunctionDefinition","parameters":{"id":4881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4873,"mutability":"mutable","name":"_prevBlock","nameLocation":"3510:10:10","nodeType":"VariableDeclaration","scope":4883,"src":"3485:35:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StoredBlockInfo_$4824_calldata_ptr","typeString":"struct IExecutor.StoredBlockInfo"},"typeName":{"id":4872,"nodeType":"UserDefinedTypeName","pathNode":{"id":4871,"name":"StoredBlockInfo","nameLocations":["3485:15:10"],"nodeType":"IdentifierPath","referencedDeclaration":4824,"src":"3485:15:10"},"referencedDeclaration":4824,"src":"3485:15:10","typeDescriptions":{"typeIdentifier":"t_struct$_StoredBlockInfo_$4824_storage_ptr","typeString":"struct IExecutor.StoredBlockInfo"}},"visibility":"internal"},{"constant":false,"id":4877,"mutability":"mutable","name":"_committedBlocks","nameLocation":"3557:16:10","nodeType":"VariableDeclaration","scope":4883,"src":"3530:43:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StoredBlockInfo_$4824_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IExecutor.StoredBlockInfo[]"},"typeName":{"baseType":{"id":4875,"nodeType":"UserDefinedTypeName","pathNode":{"id":4874,"name":"StoredBlockInfo","nameLocations":["3530:15:10"],"nodeType":"IdentifierPath","referencedDeclaration":4824,"src":"3530:15:10"},"referencedDeclaration":4824,"src":"3530:15:10","typeDescriptions":{"typeIdentifier":"t_struct$_StoredBlockInfo_$4824_storage_ptr","typeString":"struct IExecutor.StoredBlockInfo"}},"id":4876,"nodeType":"ArrayTypeName","src":"3530:17:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StoredBlockInfo_$4824_storage_$dyn_storage_ptr","typeString":"struct IExecutor.StoredBlockInfo[]"}},"visibility":"internal"},{"constant":false,"id":4880,"mutability":"mutable","name":"_proof","nameLocation":"3603:6:10","nodeType":"VariableDeclaration","scope":4883,"src":"3583:26:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ProofInput_$4860_calldata_ptr","typeString":"struct IExecutor.ProofInput"},"typeName":{"id":4879,"nodeType":"UserDefinedTypeName","pathNode":{"id":4878,"name":"ProofInput","nameLocations":["3583:10:10"],"nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"3583:10:10"},"referencedDeclaration":4860,"src":"3583:10:10","typeDescriptions":{"typeIdentifier":"t_struct$_ProofInput_$4860_storage_ptr","typeString":"struct IExecutor.ProofInput"}},"visibility":"internal"}],"src":"3475:140:10"},"returnParameters":{"id":4882,"nodeType":"ParameterList","parameters":[],"src":"3624:0:10"},"scope":4915,"src":"3455:170:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"ce9dcf16","id":4890,"implemented":false,"kind":"function","modifiers":[],"name":"executeBlocks","nameLocation":"3640:13:10","nodeType":"FunctionDefinition","parameters":{"id":4888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4887,"mutability":"mutable","name":"_blocksData","nameLocation":"3681:11:10","nodeType":"VariableDeclaration","scope":4890,"src":"3654:38:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StoredBlockInfo_$4824_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IExecutor.StoredBlockInfo[]"},"typeName":{"baseType":{"id":4885,"nodeType":"UserDefinedTypeName","pathNode":{"id":4884,"name":"StoredBlockInfo","nameLocations":["3654:15:10"],"nodeType":"IdentifierPath","referencedDeclaration":4824,"src":"3654:15:10"},"referencedDeclaration":4824,"src":"3654:15:10","typeDescriptions":{"typeIdentifier":"t_struct$_StoredBlockInfo_$4824_storage_ptr","typeString":"struct IExecutor.StoredBlockInfo"}},"id":4886,"nodeType":"ArrayTypeName","src":"3654:17:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StoredBlockInfo_$4824_storage_$dyn_storage_ptr","typeString":"struct IExecutor.StoredBlockInfo[]"}},"visibility":"internal"}],"src":"3653:40:10"},"returnParameters":{"id":4889,"nodeType":"ParameterList","parameters":[],"src":"3702:0:10"},"scope":4915,"src":"3631:72:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"a9a2d18a","id":4895,"implemented":false,"kind":"function","modifiers":[],"name":"revertBlocks","nameLocation":"3718:12:10","nodeType":"FunctionDefinition","parameters":{"id":4893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4892,"mutability":"mutable","name":"_blocksToRevert","nameLocation":"3739:15:10","nodeType":"VariableDeclaration","scope":4895,"src":"3731:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4891,"name":"uint256","nodeType":"ElementaryTypeName","src":"3731:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3730:25:10"},"returnParameters":{"id":4894,"nodeType":"ParameterList","parameters":[],"src":"3764:0:10"},"scope":4915,"src":"3709:56:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"anonymous":false,"documentation":{"id":4896,"nodeType":"StructuredDocumentation","src":"3771:51:10","text":"@notice Event emitted when a block is committed"},"eventSelector":"e07c0bce406310dd404d395b149addb4c45348701ee25f95895d21817f7d530e","id":4900,"name":"BlockCommit","nameLocation":"3833:11:10","nodeType":"EventDefinition","parameters":{"id":4899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4898,"indexed":true,"mutability":"mutable","name":"blockNumber","nameLocation":"3861:11:10","nodeType":"VariableDeclaration","scope":4900,"src":"3845:27:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4897,"name":"uint256","nodeType":"ElementaryTypeName","src":"3845:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3844:29:10"},"src":"3827:47:10"},{"anonymous":false,"documentation":{"id":4901,"nodeType":"StructuredDocumentation","src":"3880:50:10","text":"@notice Event emitted when a block is executed"},"eventSelector":"fabc847ab74426db9cb091b5fd7d38d2d847f9fb63feec099eb327a0b76f7731","id":4905,"name":"BlockExecution","nameLocation":"3941:14:10","nodeType":"EventDefinition","parameters":{"id":4904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4903,"indexed":true,"mutability":"mutable","name":"blockNumber","nameLocation":"3972:11:10","nodeType":"VariableDeclaration","scope":4905,"src":"3956:27:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4902,"name":"uint256","nodeType":"ElementaryTypeName","src":"3956:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3955:29:10"},"src":"3935:50:10"},{"anonymous":false,"documentation":{"id":4906,"nodeType":"StructuredDocumentation","src":"3991:50:10","text":"@notice Event emitted when blocks are reverted"},"eventSelector":"8bd4b15ea7d1bc41ea9abc3fc487ccb89cd678a00786584714faa9d751c84ee5","id":4914,"name":"BlocksRevert","nameLocation":"4052:12:10","nodeType":"EventDefinition","parameters":{"id":4913,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4908,"indexed":false,"mutability":"mutable","name":"totalBlocksCommitted","nameLocation":"4073:20:10","nodeType":"VariableDeclaration","scope":4914,"src":"4065:28:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4907,"name":"uint256","nodeType":"ElementaryTypeName","src":"4065:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4910,"indexed":false,"mutability":"mutable","name":"totalBlocksVerified","nameLocation":"4103:19:10","nodeType":"VariableDeclaration","scope":4914,"src":"4095:27:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4909,"name":"uint256","nodeType":"ElementaryTypeName","src":"4095:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4912,"indexed":false,"mutability":"mutable","name":"totalBlocksExecuted","nameLocation":"4132:19:10","nodeType":"VariableDeclaration","scope":4914,"src":"4124:27:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4911,"name":"uint256","nodeType":"ElementaryTypeName","src":"4124:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4064:88:10"},"src":"4046:107:10"}],"scope":4916,"src":"70:4085:10","usedErrors":[]}],"src":"47:4109:10"},"id":10},"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IGetters.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IGetters.sol","exportedSymbols":{"IGetters":[5015]},"id":5016,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":4917,"literals":["solidity","^","0.8"],"nodeType":"PragmaDirective","src":"47:21:11"},{"abstract":false,"baseContracts":[],"canonicalName":"IGetters","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":5015,"linearizedBaseContracts":[5015],"name":"IGetters","nameLocation":"80:8:11","nodeType":"ContractDefinition","nodes":[{"functionSelector":"46657fe9","id":4922,"implemented":false,"kind":"function","modifiers":[],"name":"getVerifier","nameLocation":"286:11:11","nodeType":"FunctionDefinition","parameters":{"id":4918,"nodeType":"ParameterList","parameters":[],"src":"297:2:11"},"returnParameters":{"id":4921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4920,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4922,"src":"323:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4919,"name":"address","nodeType":"ElementaryTypeName","src":"323:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"322:9:11"},"scope":5015,"src":"277:55:11","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"4fc07d75","id":4927,"implemented":false,"kind":"function","modifiers":[],"name":"getGovernor","nameLocation":"347:11:11","nodeType":"FunctionDefinition","parameters":{"id":4923,"nodeType":"ParameterList","parameters":[],"src":"358:2:11"},"returnParameters":{"id":4926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4925,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4927,"src":"384:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4924,"name":"address","nodeType":"ElementaryTypeName","src":"384:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"383:9:11"},"scope":5015,"src":"338:55:11","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"fe26699e","id":4932,"implemented":false,"kind":"function","modifiers":[],"name":"getTotalBlocksCommitted","nameLocation":"408:23:11","nodeType":"FunctionDefinition","parameters":{"id":4928,"nodeType":"ParameterList","parameters":[],"src":"431:2:11"},"returnParameters":{"id":4931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4930,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4932,"src":"457:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4929,"name":"uint256","nodeType":"ElementaryTypeName","src":"457:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"456:9:11"},"scope":5015,"src":"399:67:11","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"af6a2dcd","id":4937,"implemented":false,"kind":"function","modifiers":[],"name":"getTotalBlocksVerified","nameLocation":"481:22:11","nodeType":"FunctionDefinition","parameters":{"id":4933,"nodeType":"ParameterList","parameters":[],"src":"503:2:11"},"returnParameters":{"id":4936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4935,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4937,"src":"529:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4934,"name":"uint256","nodeType":"ElementaryTypeName","src":"529:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"528:9:11"},"scope":5015,"src":"472:66:11","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"39607382","id":4942,"implemented":false,"kind":"function","modifiers":[],"name":"getTotalBlocksExecuted","nameLocation":"553:22:11","nodeType":"FunctionDefinition","parameters":{"id":4938,"nodeType":"ParameterList","parameters":[],"src":"575:2:11"},"returnParameters":{"id":4941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4940,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4942,"src":"601:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4939,"name":"uint256","nodeType":"ElementaryTypeName","src":"601:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"600:9:11"},"scope":5015,"src":"544:66:11","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"a1954fc5","id":4947,"implemented":false,"kind":"function","modifiers":[],"name":"getTotalPriorityTxs","nameLocation":"625:19:11","nodeType":"FunctionDefinition","parameters":{"id":4943,"nodeType":"ParameterList","parameters":[],"src":"644:2:11"},"returnParameters":{"id":4946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4945,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4947,"src":"670:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4944,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"669:9:11"},"scope":5015,"src":"616:63:11","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"79823c9a","id":4952,"implemented":false,"kind":"function","modifiers":[],"name":"getFirstUnprocessedPriorityTx","nameLocation":"694:29:11","nodeType":"FunctionDefinition","parameters":{"id":4948,"nodeType":"ParameterList","parameters":[],"src":"723:2:11"},"returnParameters":{"id":4951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4950,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4952,"src":"749:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4949,"name":"uint256","nodeType":"ElementaryTypeName","src":"749:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"748:9:11"},"scope":5015,"src":"685:73:11","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"facd743b","id":4959,"implemented":false,"kind":"function","modifiers":[],"name":"isValidator","nameLocation":"773:11:11","nodeType":"FunctionDefinition","parameters":{"id":4955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4954,"mutability":"mutable","name":"_address","nameLocation":"793:8:11","nodeType":"VariableDeclaration","scope":4959,"src":"785:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4953,"name":"address","nodeType":"ElementaryTypeName","src":"785:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"784:18:11"},"returnParameters":{"id":4958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4957,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4959,"src":"826:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4956,"name":"bool","nodeType":"ElementaryTypeName","src":"826:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"825:6:11"},"scope":5015,"src":"764:68:11","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"54225f93","id":4966,"implemented":false,"kind":"function","modifiers":[],"name":"l2LogsRootHash","nameLocation":"847:14:11","nodeType":"FunctionDefinition","parameters":{"id":4962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4961,"mutability":"mutable","name":"blockNumber","nameLocation":"869:11:11","nodeType":"VariableDeclaration","scope":4966,"src":"862:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4960,"name":"uint32","nodeType":"ElementaryTypeName","src":"862:6:11","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"861:20:11"},"returnParameters":{"id":4965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4964,"mutability":"mutable","name":"hash","nameLocation":"913:4:11","nodeType":"VariableDeclaration","scope":4966,"src":"905:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4963,"name":"bytes32","nodeType":"ElementaryTypeName","src":"905:7:11","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"904:14:11"},"scope":5015,"src":"838:81:11","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"e81e0ba1","id":4973,"implemented":false,"kind":"function","modifiers":[],"name":"isFunctionFreezable","nameLocation":"934:19:11","nodeType":"FunctionDefinition","parameters":{"id":4969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4968,"mutability":"mutable","name":"_selector","nameLocation":"961:9:11","nodeType":"VariableDeclaration","scope":4973,"src":"954:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4967,"name":"bytes4","nodeType":"ElementaryTypeName","src":"954:6:11","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"953:18:11"},"returnParameters":{"id":4972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4971,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4973,"src":"995:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4970,"name":"bool","nodeType":"ElementaryTypeName","src":"995:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"994:6:11"},"scope":5015,"src":"925:76:11","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"c3bbd2d7","id":4980,"implemented":false,"kind":"function","modifiers":[],"name":"isFacetFreezable","nameLocation":"1016:16:11","nodeType":"FunctionDefinition","parameters":{"id":4976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4975,"mutability":"mutable","name":"_facet","nameLocation":"1041:6:11","nodeType":"VariableDeclaration","scope":4980,"src":"1033:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4974,"name":"address","nodeType":"ElementaryTypeName","src":"1033:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1032:16:11"},"returnParameters":{"id":4979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4978,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4980,"src":"1072:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4977,"name":"bool","nodeType":"ElementaryTypeName","src":"1072:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1071:6:11"},"scope":5015,"src":"1007:71:11","stateMutability":"view","virtual":false,"visibility":"external"},{"canonicalName":"IGetters.Facet","id":4986,"members":[{"constant":false,"id":4982,"mutability":"mutable","name":"addr","nameLocation":"1509:4:11","nodeType":"VariableDeclaration","scope":4986,"src":"1501:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4981,"name":"address","nodeType":"ElementaryTypeName","src":"1501:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4985,"mutability":"mutable","name":"selectors","nameLocation":"1532:9:11","nodeType":"VariableDeclaration","scope":4986,"src":"1523:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"},"typeName":{"baseType":{"id":4983,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1523:6:11","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":4984,"nodeType":"ArrayTypeName","src":"1523:8:11","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"}},"visibility":"internal"}],"name":"Facet","nameLocation":"1485:5:11","nodeType":"StructDefinition","scope":5015,"src":"1478:70:11","visibility":"public"},{"functionSelector":"7a0ed627","id":4993,"implemented":false,"kind":"function","modifiers":[],"name":"facets","nameLocation":"1563:6:11","nodeType":"FunctionDefinition","parameters":{"id":4987,"nodeType":"ParameterList","parameters":[],"src":"1569:2:11"},"returnParameters":{"id":4992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4991,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4993,"src":"1595:14:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Facet_$4986_memory_ptr_$dyn_memory_ptr","typeString":"struct IGetters.Facet[]"},"typeName":{"baseType":{"id":4989,"nodeType":"UserDefinedTypeName","pathNode":{"id":4988,"name":"Facet","nameLocations":["1595:5:11"],"nodeType":"IdentifierPath","referencedDeclaration":4986,"src":"1595:5:11"},"referencedDeclaration":4986,"src":"1595:5:11","typeDescriptions":{"typeIdentifier":"t_struct$_Facet_$4986_storage_ptr","typeString":"struct IGetters.Facet"}},"id":4990,"nodeType":"ArrayTypeName","src":"1595:7:11","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Facet_$4986_storage_$dyn_storage_ptr","typeString":"struct IGetters.Facet[]"}},"visibility":"internal"}],"src":"1594:16:11"},"scope":5015,"src":"1554:57:11","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"adfca15e","id":5001,"implemented":false,"kind":"function","modifiers":[],"name":"facetFunctionSelectors","nameLocation":"1626:22:11","nodeType":"FunctionDefinition","parameters":{"id":4996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4995,"mutability":"mutable","name":"_facet","nameLocation":"1657:6:11","nodeType":"VariableDeclaration","scope":5001,"src":"1649:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4994,"name":"address","nodeType":"ElementaryTypeName","src":"1649:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1648:16:11"},"returnParameters":{"id":5000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4999,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5001,"src":"1688:15:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[]"},"typeName":{"baseType":{"id":4997,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1688:6:11","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":4998,"nodeType":"ArrayTypeName","src":"1688:8:11","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"}},"visibility":"internal"}],"src":"1687:17:11"},"scope":5015,"src":"1617:88:11","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"52ef6b2c","id":5007,"implemented":false,"kind":"function","modifiers":[],"name":"facetAddresses","nameLocation":"1720:14:11","nodeType":"FunctionDefinition","parameters":{"id":5002,"nodeType":"ParameterList","parameters":[],"src":"1734:2:11"},"returnParameters":{"id":5006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5005,"mutability":"mutable","name":"facets","nameLocation":"1777:6:11","nodeType":"VariableDeclaration","scope":5007,"src":"1760:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":5003,"name":"address","nodeType":"ElementaryTypeName","src":"1760:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5004,"nodeType":"ArrayTypeName","src":"1760:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1759:25:11"},"scope":5015,"src":"1711:74:11","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"cdffacc6","id":5014,"implemented":false,"kind":"function","modifiers":[],"name":"facetAddress","nameLocation":"1800:12:11","nodeType":"FunctionDefinition","parameters":{"id":5010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5009,"mutability":"mutable","name":"_selector","nameLocation":"1820:9:11","nodeType":"VariableDeclaration","scope":5014,"src":"1813:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":5008,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1813:6:11","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1812:18:11"},"returnParameters":{"id":5013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5012,"mutability":"mutable","name":"facet","nameLocation":"1862:5:11","nodeType":"VariableDeclaration","scope":5014,"src":"1854:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5011,"name":"address","nodeType":"ElementaryTypeName","src":"1854:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1853:15:11"},"scope":5015,"src":"1791:78:11","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":5016,"src":"70:1801:11","usedErrors":[]}],"src":"47:1825:11"},"id":11},"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IGovernance.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IGovernance.sol","exportedSymbols":{"IGovernance":[5086]},"id":5087,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":5017,"literals":["solidity","^","0.8"],"nodeType":"PragmaDirective","src":"47:21:12"},{"abstract":false,"baseContracts":[],"canonicalName":"IGovernance","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":5086,"linearizedBaseContracts":[5086],"name":"IGovernance","nameLocation":"80:11:12","nodeType":"ContractDefinition","nodes":[{"functionSelector":"f235757f","id":5022,"implemented":false,"kind":"function","modifiers":[],"name":"setPendingGovernor","nameLocation":"107:18:12","nodeType":"FunctionDefinition","parameters":{"id":5020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5019,"mutability":"mutable","name":"_newPendingGovernor","nameLocation":"134:19:12","nodeType":"VariableDeclaration","scope":5022,"src":"126:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5018,"name":"address","nodeType":"ElementaryTypeName","src":"126:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"125:29:12"},"returnParameters":{"id":5021,"nodeType":"ParameterList","parameters":[],"src":"163:0:12"},"scope":5086,"src":"98:66:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"e58bb639","id":5025,"implemented":false,"kind":"function","modifiers":[],"name":"acceptGovernor","nameLocation":"179:14:12","nodeType":"FunctionDefinition","parameters":{"id":5023,"nodeType":"ParameterList","parameters":[],"src":"193:2:12"},"returnParameters":{"id":5024,"nodeType":"ParameterList","parameters":[],"src":"204:0:12"},"scope":5086,"src":"170:35:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"4623c91d","id":5032,"implemented":false,"kind":"function","modifiers":[],"name":"setValidator","nameLocation":"220:12:12","nodeType":"FunctionDefinition","parameters":{"id":5030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5027,"mutability":"mutable","name":"_validator","nameLocation":"241:10:12","nodeType":"VariableDeclaration","scope":5032,"src":"233:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5026,"name":"address","nodeType":"ElementaryTypeName","src":"233:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5029,"mutability":"mutable","name":"_active","nameLocation":"258:7:12","nodeType":"VariableDeclaration","scope":5032,"src":"253:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5028,"name":"bool","nodeType":"ElementaryTypeName","src":"253:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"232:34:12"},"returnParameters":{"id":5031,"nodeType":"ParameterList","parameters":[],"src":"275:0:12"},"scope":5086,"src":"211:65:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"86cb9909","id":5037,"implemented":false,"kind":"function","modifiers":[],"name":"setL2BootloaderBytecodeHash","nameLocation":"291:27:12","nodeType":"FunctionDefinition","parameters":{"id":5035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5034,"mutability":"mutable","name":"_l2BootloaderBytecodeHash","nameLocation":"327:25:12","nodeType":"VariableDeclaration","scope":5037,"src":"319:33:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5033,"name":"bytes32","nodeType":"ElementaryTypeName","src":"319:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"318:35:12"},"returnParameters":{"id":5036,"nodeType":"ParameterList","parameters":[],"src":"362:0:12"},"scope":5086,"src":"282:81:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"0707ac09","id":5042,"implemented":false,"kind":"function","modifiers":[],"name":"setL2DefaultAccountBytecodeHash","nameLocation":"378:31:12","nodeType":"FunctionDefinition","parameters":{"id":5040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5039,"mutability":"mutable","name":"_l2DefaultAccountBytecodeHash","nameLocation":"418:29:12","nodeType":"VariableDeclaration","scope":5042,"src":"410:37:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5038,"name":"bytes32","nodeType":"ElementaryTypeName","src":"410:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"409:39:12"},"returnParameters":{"id":5041,"nodeType":"ParameterList","parameters":[],"src":"457:0:12"},"scope":5086,"src":"369:89:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"1cc5d103","id":5047,"implemented":false,"kind":"function","modifiers":[],"name":"setPorterAvailability","nameLocation":"473:21:12","nodeType":"FunctionDefinition","parameters":{"id":5045,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5044,"mutability":"mutable","name":"_isPorterAvailable","nameLocation":"500:18:12","nodeType":"VariableDeclaration","scope":5047,"src":"495:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5043,"name":"bool","nodeType":"ElementaryTypeName","src":"495:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"494:25:12"},"returnParameters":{"id":5046,"nodeType":"ParameterList","parameters":[],"src":"528:0:12"},"scope":5086,"src":"464:65:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"anonymous":false,"documentation":{"id":5048,"nodeType":"StructuredDocumentation","src":"535:87:12","text":"@notice Сhanges to the bytecode that is used in L2 as a bootloader (start program)"},"eventSelector":"271b33af94e3f065ecd8659833e6b1daf851f063700c36ddefefab35d4ce4746","id":5054,"name":"NewL2BootloaderBytecodeHash","nameLocation":"633:27:12","nodeType":"EventDefinition","parameters":{"id":5053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5050,"indexed":true,"mutability":"mutable","name":"previousBytecodeHash","nameLocation":"677:20:12","nodeType":"VariableDeclaration","scope":5054,"src":"661:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5049,"name":"bytes32","nodeType":"ElementaryTypeName","src":"661:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5052,"indexed":true,"mutability":"mutable","name":"newBytecodeHash","nameLocation":"715:15:12","nodeType":"VariableDeclaration","scope":5054,"src":"699:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5051,"name":"bytes32","nodeType":"ElementaryTypeName","src":"699:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"660:71:12"},"src":"627:105:12"},{"anonymous":false,"documentation":{"id":5055,"nodeType":"StructuredDocumentation","src":"738:76:12","text":"@notice Сhanges to the bytecode that is used in L2 as a default account"},"eventSelector":"36df93a47cc02081d9d8208022ab736fdf98fac566e5fc6f5762bf7666e521f3","id":5061,"name":"NewL2DefaultAccountBytecodeHash","nameLocation":"825:31:12","nodeType":"EventDefinition","parameters":{"id":5060,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5057,"indexed":true,"mutability":"mutable","name":"previousBytecodeHash","nameLocation":"873:20:12","nodeType":"VariableDeclaration","scope":5061,"src":"857:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5056,"name":"bytes32","nodeType":"ElementaryTypeName","src":"857:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5059,"indexed":true,"mutability":"mutable","name":"newBytecodeHash","nameLocation":"911:15:12","nodeType":"VariableDeclaration","scope":5061,"src":"895:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5058,"name":"bytes32","nodeType":"ElementaryTypeName","src":"895:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"856:71:12"},"src":"819:109:12"},{"anonymous":false,"documentation":{"id":5062,"nodeType":"StructuredDocumentation","src":"934:46:12","text":"@notice Porter availability status changes"},"eventSelector":"036b81a8a07344698cb5aa4142c5669a9317c9ce905264a08f0b9f9331883936","id":5066,"name":"IsPorterAvailableStatusUpdate","nameLocation":"991:29:12","nodeType":"EventDefinition","parameters":{"id":5065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5064,"indexed":false,"mutability":"mutable","name":"isPorterAvailable","nameLocation":"1026:17:12","nodeType":"VariableDeclaration","scope":5066,"src":"1021:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5063,"name":"bool","nodeType":"ElementaryTypeName","src":"1021:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1020:24:12"},"src":"985:60:12"},{"anonymous":false,"documentation":{"id":5067,"nodeType":"StructuredDocumentation","src":"1051:38:12","text":"@notice Validator's status changed"},"eventSelector":"065b77b53864e46fda3d8986acb51696223d6dde7ced42441eb150bae6d48136","id":5073,"name":"ValidatorStatusUpdate","nameLocation":"1100:21:12","nodeType":"EventDefinition","parameters":{"id":5072,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5069,"indexed":true,"mutability":"mutable","name":"validatorAddress","nameLocation":"1138:16:12","nodeType":"VariableDeclaration","scope":5073,"src":"1122:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5068,"name":"address","nodeType":"ElementaryTypeName","src":"1122:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5071,"indexed":false,"mutability":"mutable","name":"isActive","nameLocation":"1161:8:12","nodeType":"VariableDeclaration","scope":5073,"src":"1156:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5070,"name":"bool","nodeType":"ElementaryTypeName","src":"1156:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1121:49:12"},"src":"1094:77:12"},{"anonymous":false,"documentation":{"id":5074,"nodeType":"StructuredDocumentation","src":"1177:155:12","text":"@notice pendingGovernor is changed\n @dev Also emitted when new governor is accepted and in this case, `newPendingGovernor` would be zero address"},"eventSelector":"7d767be5a57784412a13945bd5114db84487d2b007bfcdb2f449fc9ea35437f7","id":5080,"name":"NewPendingGovernor","nameLocation":"1343:18:12","nodeType":"EventDefinition","parameters":{"id":5079,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5076,"indexed":true,"mutability":"mutable","name":"oldPendingGovernor","nameLocation":"1378:18:12","nodeType":"VariableDeclaration","scope":5080,"src":"1362:34:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5075,"name":"address","nodeType":"ElementaryTypeName","src":"1362:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5078,"indexed":true,"mutability":"mutable","name":"newPendingGovernor","nameLocation":"1414:18:12","nodeType":"VariableDeclaration","scope":5080,"src":"1398:34:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5077,"name":"address","nodeType":"ElementaryTypeName","src":"1398:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1361:72:12"},"src":"1337:97:12"},{"anonymous":false,"documentation":{"id":5081,"nodeType":"StructuredDocumentation","src":"1440:28:12","text":"@notice Governor changed"},"eventSelector":"5425363a03f182281120f5919107c49c7a1a623acc1cbc6df468b6f0c11fcf8c","id":5085,"name":"NewGovernor","nameLocation":"1479:11:12","nodeType":"EventDefinition","parameters":{"id":5084,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5083,"indexed":true,"mutability":"mutable","name":"newGovernor","nameLocation":"1507:11:12","nodeType":"VariableDeclaration","scope":5085,"src":"1491:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5082,"name":"address","nodeType":"ElementaryTypeName","src":"1491:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1490:29:12"},"src":"1473:47:12"}],"scope":5087,"src":"70:1452:12","usedErrors":[]}],"src":"47:1476:12"},"id":12},"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IMailbox.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IMailbox.sol","exportedSymbols":{"IERC20":[299],"IMailbox":[5218],"L2Log":[3769],"L2Message":[3776]},"id":5219,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":5088,"literals":["solidity","^","0.8"],"nodeType":"PragmaDirective","src":"47:21:13"},{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/Storage.sol","file":"../Storage.sol","id":5091,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5219,"sourceUnit":3844,"src":"70:48:13","symbolAliases":[{"foreign":{"id":5089,"name":"L2Log","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3769,"src":"78:5:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":5090,"name":"L2Message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3776,"src":"85:9:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IERC20.sol","file":"../../common/interfaces/IERC20.sol","id":5092,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5219,"sourceUnit":300,"src":"119:44:13","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IMailbox","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":5218,"linearizedBaseContracts":[5218],"name":"IMailbox","nameLocation":"175:8:13","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IMailbox.L2CanonicalTransaction","id":5124,"members":[{"constant":false,"id":5094,"mutability":"mutable","name":"txType","nameLocation":"2263:6:13","nodeType":"VariableDeclaration","scope":5124,"src":"2255:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5093,"name":"uint256","nodeType":"ElementaryTypeName","src":"2255:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5096,"mutability":"mutable","name":"from","nameLocation":"2287:4:13","nodeType":"VariableDeclaration","scope":5124,"src":"2279:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5095,"name":"uint256","nodeType":"ElementaryTypeName","src":"2279:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5098,"mutability":"mutable","name":"to","nameLocation":"2309:2:13","nodeType":"VariableDeclaration","scope":5124,"src":"2301:10:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5097,"name":"uint256","nodeType":"ElementaryTypeName","src":"2301:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5100,"mutability":"mutable","name":"ergsLimit","nameLocation":"2329:9:13","nodeType":"VariableDeclaration","scope":5124,"src":"2321:17:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5099,"name":"uint256","nodeType":"ElementaryTypeName","src":"2321:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5102,"mutability":"mutable","name":"ergsPerPubdataByteLimit","nameLocation":"2356:23:13","nodeType":"VariableDeclaration","scope":5124,"src":"2348:31:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5101,"name":"uint256","nodeType":"ElementaryTypeName","src":"2348:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5104,"mutability":"mutable","name":"maxFeePerErg","nameLocation":"2397:12:13","nodeType":"VariableDeclaration","scope":5124,"src":"2389:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5103,"name":"uint256","nodeType":"ElementaryTypeName","src":"2389:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5106,"mutability":"mutable","name":"maxPriorityFeePerErg","nameLocation":"2427:20:13","nodeType":"VariableDeclaration","scope":5124,"src":"2419:28:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5105,"name":"uint256","nodeType":"ElementaryTypeName","src":"2419:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5108,"mutability":"mutable","name":"paymaster","nameLocation":"2465:9:13","nodeType":"VariableDeclaration","scope":5124,"src":"2457:17:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5107,"name":"uint256","nodeType":"ElementaryTypeName","src":"2457:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5112,"mutability":"mutable","name":"reserved","nameLocation":"3010:8:13","nodeType":"VariableDeclaration","scope":5124,"src":"2999:19:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_storage_ptr","typeString":"uint256[6]"},"typeName":{"baseType":{"id":5109,"name":"uint256","nodeType":"ElementaryTypeName","src":"2999:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5111,"length":{"hexValue":"36","id":5110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3007:1:13","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"nodeType":"ArrayTypeName","src":"2999:10:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_storage_ptr","typeString":"uint256[6]"}},"visibility":"internal"},{"constant":false,"id":5114,"mutability":"mutable","name":"data","nameLocation":"3034:4:13","nodeType":"VariableDeclaration","scope":5124,"src":"3028:10:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":5113,"name":"bytes","nodeType":"ElementaryTypeName","src":"3028:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":5116,"mutability":"mutable","name":"signature","nameLocation":"3054:9:13","nodeType":"VariableDeclaration","scope":5124,"src":"3048:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":5115,"name":"bytes","nodeType":"ElementaryTypeName","src":"3048:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":5119,"mutability":"mutable","name":"factoryDeps","nameLocation":"3083:11:13","nodeType":"VariableDeclaration","scope":5124,"src":"3073:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5117,"name":"uint256","nodeType":"ElementaryTypeName","src":"3073:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5118,"nodeType":"ArrayTypeName","src":"3073:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":5121,"mutability":"mutable","name":"paymasterInput","nameLocation":"3110:14:13","nodeType":"VariableDeclaration","scope":5124,"src":"3104:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":5120,"name":"bytes","nodeType":"ElementaryTypeName","src":"3104:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":5123,"mutability":"mutable","name":"reservedDynamic","nameLocation":"3321:15:13","nodeType":"VariableDeclaration","scope":5124,"src":"3315:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":5122,"name":"bytes","nodeType":"ElementaryTypeName","src":"3315:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"L2CanonicalTransaction","nameLocation":"2222:22:13","nodeType":"StructDefinition","scope":5218,"src":"2215:1128:13","visibility":"public"},{"functionSelector":"e4948f43","id":5139,"implemented":false,"kind":"function","modifiers":[],"name":"proveL2MessageInclusion","nameLocation":"3358:23:13","nodeType":"FunctionDefinition","parameters":{"id":5135,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5126,"mutability":"mutable","name":"_blockNumber","nameLocation":"3399:12:13","nodeType":"VariableDeclaration","scope":5139,"src":"3391:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5125,"name":"uint256","nodeType":"ElementaryTypeName","src":"3391:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5128,"mutability":"mutable","name":"_index","nameLocation":"3429:6:13","nodeType":"VariableDeclaration","scope":5139,"src":"3421:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5127,"name":"uint256","nodeType":"ElementaryTypeName","src":"3421:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5131,"mutability":"mutable","name":"_message","nameLocation":"3464:8:13","nodeType":"VariableDeclaration","scope":5139,"src":"3445:27:13","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$3776_calldata_ptr","typeString":"struct L2Message"},"typeName":{"id":5130,"nodeType":"UserDefinedTypeName","pathNode":{"id":5129,"name":"L2Message","nameLocations":["3445:9:13"],"nodeType":"IdentifierPath","referencedDeclaration":3776,"src":"3445:9:13"},"referencedDeclaration":3776,"src":"3445:9:13","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$3776_storage_ptr","typeString":"struct L2Message"}},"visibility":"internal"},{"constant":false,"id":5134,"mutability":"mutable","name":"_proof","nameLocation":"3501:6:13","nodeType":"VariableDeclaration","scope":5139,"src":"3482:25:13","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":5132,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3482:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5133,"nodeType":"ArrayTypeName","src":"3482:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"3381:132:13"},"returnParameters":{"id":5138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5137,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5139,"src":"3537:4:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5136,"name":"bool","nodeType":"ElementaryTypeName","src":"3537:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3536:6:13"},"scope":5218,"src":"3349:194:13","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"263b7f8e","id":5154,"implemented":false,"kind":"function","modifiers":[],"name":"proveL2LogInclusion","nameLocation":"3558:19:13","nodeType":"FunctionDefinition","parameters":{"id":5150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5141,"mutability":"mutable","name":"_blockNumber","nameLocation":"3595:12:13","nodeType":"VariableDeclaration","scope":5154,"src":"3587:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5140,"name":"uint256","nodeType":"ElementaryTypeName","src":"3587:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5143,"mutability":"mutable","name":"_index","nameLocation":"3625:6:13","nodeType":"VariableDeclaration","scope":5154,"src":"3617:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5142,"name":"uint256","nodeType":"ElementaryTypeName","src":"3617:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5146,"mutability":"mutable","name":"_log","nameLocation":"3654:4:13","nodeType":"VariableDeclaration","scope":5154,"src":"3641:17:13","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_L2Log_$3769_memory_ptr","typeString":"struct L2Log"},"typeName":{"id":5145,"nodeType":"UserDefinedTypeName","pathNode":{"id":5144,"name":"L2Log","nameLocations":["3641:5:13"],"nodeType":"IdentifierPath","referencedDeclaration":3769,"src":"3641:5:13"},"referencedDeclaration":3769,"src":"3641:5:13","typeDescriptions":{"typeIdentifier":"t_struct$_L2Log_$3769_storage_ptr","typeString":"struct L2Log"}},"visibility":"internal"},{"constant":false,"id":5149,"mutability":"mutable","name":"_proof","nameLocation":"3687:6:13","nodeType":"VariableDeclaration","scope":5154,"src":"3668:25:13","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":5147,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3668:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5148,"nodeType":"ArrayTypeName","src":"3668:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"3577:122:13"},"returnParameters":{"id":5153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5152,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5154,"src":"3723:4:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5151,"name":"bool","nodeType":"ElementaryTypeName","src":"3723:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3722:6:13"},"scope":5218,"src":"3549:180:13","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"ed9937f5","id":5175,"implemented":false,"kind":"function","modifiers":[],"name":"serializeL2Transaction","nameLocation":"3744:22:13","nodeType":"FunctionDefinition","parameters":{"id":5170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5156,"mutability":"mutable","name":"_txId","nameLocation":"3784:5:13","nodeType":"VariableDeclaration","scope":5175,"src":"3776:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5155,"name":"uint256","nodeType":"ElementaryTypeName","src":"3776:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5158,"mutability":"mutable","name":"_l2Value","nameLocation":"3807:8:13","nodeType":"VariableDeclaration","scope":5175,"src":"3799:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5157,"name":"uint256","nodeType":"ElementaryTypeName","src":"3799:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5160,"mutability":"mutable","name":"_sender","nameLocation":"3833:7:13","nodeType":"VariableDeclaration","scope":5175,"src":"3825:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5159,"name":"address","nodeType":"ElementaryTypeName","src":"3825:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5162,"mutability":"mutable","name":"_contractAddressL2","nameLocation":"3858:18:13","nodeType":"VariableDeclaration","scope":5175,"src":"3850:26:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5161,"name":"address","nodeType":"ElementaryTypeName","src":"3850:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5164,"mutability":"mutable","name":"_calldata","nameLocation":"3901:9:13","nodeType":"VariableDeclaration","scope":5175,"src":"3886:24:13","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":5163,"name":"bytes","nodeType":"ElementaryTypeName","src":"3886:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":5166,"mutability":"mutable","name":"_ergsLimit","nameLocation":"3928:10:13","nodeType":"VariableDeclaration","scope":5175,"src":"3920:18:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5165,"name":"uint256","nodeType":"ElementaryTypeName","src":"3920:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5169,"mutability":"mutable","name":"_factoryDeps","nameLocation":"3965:12:13","nodeType":"VariableDeclaration","scope":5175,"src":"3948:29:13","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":5167,"name":"bytes","nodeType":"ElementaryTypeName","src":"3948:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":5168,"nodeType":"ArrayTypeName","src":"3948:7:13","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"3766:217:13"},"returnParameters":{"id":5174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5173,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5175,"src":"4007:29:13","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_L2CanonicalTransaction_$5124_memory_ptr","typeString":"struct IMailbox.L2CanonicalTransaction"},"typeName":{"id":5172,"nodeType":"UserDefinedTypeName","pathNode":{"id":5171,"name":"L2CanonicalTransaction","nameLocations":["4007:22:13"],"nodeType":"IdentifierPath","referencedDeclaration":5124,"src":"4007:22:13"},"referencedDeclaration":5124,"src":"4007:22:13","typeDescriptions":{"typeIdentifier":"t_struct$_L2CanonicalTransaction_$5124_storage_ptr","typeString":"struct IMailbox.L2CanonicalTransaction"}},"visibility":"internal"}],"src":"4006:31:13"},"scope":5218,"src":"3735:303:13","stateMutability":"pure","virtual":false,"visibility":"external"},{"functionSelector":"725ad850","id":5191,"implemented":false,"kind":"function","modifiers":[],"name":"requestL2Transaction","nameLocation":"4053:20:13","nodeType":"FunctionDefinition","parameters":{"id":5187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5177,"mutability":"mutable","name":"_contractAddressL2","nameLocation":"4091:18:13","nodeType":"VariableDeclaration","scope":5191,"src":"4083:26:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5176,"name":"address","nodeType":"ElementaryTypeName","src":"4083:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5179,"mutability":"mutable","name":"_l2Value","nameLocation":"4127:8:13","nodeType":"VariableDeclaration","scope":5191,"src":"4119:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5178,"name":"uint256","nodeType":"ElementaryTypeName","src":"4119:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5181,"mutability":"mutable","name":"_calldata","nameLocation":"4160:9:13","nodeType":"VariableDeclaration","scope":5191,"src":"4145:24:13","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":5180,"name":"bytes","nodeType":"ElementaryTypeName","src":"4145:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":5183,"mutability":"mutable","name":"_ergsLimit","nameLocation":"4187:10:13","nodeType":"VariableDeclaration","scope":5191,"src":"4179:18:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5182,"name":"uint256","nodeType":"ElementaryTypeName","src":"4179:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5186,"mutability":"mutable","name":"_factoryDeps","nameLocation":"4224:12:13","nodeType":"VariableDeclaration","scope":5191,"src":"4207:29:13","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":5184,"name":"bytes","nodeType":"ElementaryTypeName","src":"4207:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":5185,"nodeType":"ArrayTypeName","src":"4207:7:13","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"4073:169:13"},"returnParameters":{"id":5190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5189,"mutability":"mutable","name":"txHash","nameLocation":"4277:6:13","nodeType":"VariableDeclaration","scope":5191,"src":"4269:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5188,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4269:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4268:16:13"},"scope":5218,"src":"4044:241:13","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"5cd6771e","id":5202,"implemented":false,"kind":"function","modifiers":[],"name":"l2TransactionBaseCost","nameLocation":"4300:21:13","nodeType":"FunctionDefinition","parameters":{"id":5198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5193,"mutability":"mutable","name":"_gasPrice","nameLocation":"4339:9:13","nodeType":"VariableDeclaration","scope":5202,"src":"4331:17:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5192,"name":"uint256","nodeType":"ElementaryTypeName","src":"4331:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5195,"mutability":"mutable","name":"_ergsLimit","nameLocation":"4366:10:13","nodeType":"VariableDeclaration","scope":5202,"src":"4358:18:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5194,"name":"uint256","nodeType":"ElementaryTypeName","src":"4358:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5197,"mutability":"mutable","name":"_calldataLength","nameLocation":"4393:15:13","nodeType":"VariableDeclaration","scope":5202,"src":"4386:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5196,"name":"uint32","nodeType":"ElementaryTypeName","src":"4386:6:13","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"4321:93:13"},"returnParameters":{"id":5201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5200,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5202,"src":"4438:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5199,"name":"uint256","nodeType":"ElementaryTypeName","src":"4438:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4437:9:13"},"scope":5218,"src":"4291:156:13","stateMutability":"view","virtual":false,"visibility":"external"},{"anonymous":false,"documentation":{"id":5203,"nodeType":"StructuredDocumentation","src":"4453:559:13","text":"@notice New priority request event. Emitted when a request is placed into the priority queue\n @param txId Serial number of the priority operation\n @param txHash keccak256 hash of encoded transaction representation\n @param expirationBlock Ethereum block number up to which priority request should be processed\n @param transaction The whole transaction structure that is requested to be executed on L2\n @param factoryDeps An array of bytecodes that were shown in the L1 public data. Will be marked as known bytecodes in L2"},"eventSelector":"495dc9d0a89f360c60ef3a526f2c3cec6c71258543272ee494a0dabb262edcd1","id":5217,"name":"NewPriorityRequest","nameLocation":"5023:18:13","nodeType":"EventDefinition","parameters":{"id":5216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5205,"indexed":false,"mutability":"mutable","name":"txId","nameLocation":"5059:4:13","nodeType":"VariableDeclaration","scope":5217,"src":"5051:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5204,"name":"uint256","nodeType":"ElementaryTypeName","src":"5051:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5207,"indexed":false,"mutability":"mutable","name":"txHash","nameLocation":"5081:6:13","nodeType":"VariableDeclaration","scope":5217,"src":"5073:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5206,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5073:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5209,"indexed":false,"mutability":"mutable","name":"expirationBlock","nameLocation":"5104:15:13","nodeType":"VariableDeclaration","scope":5217,"src":"5097:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":5208,"name":"uint64","nodeType":"ElementaryTypeName","src":"5097:6:13","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":5212,"indexed":false,"mutability":"mutable","name":"transaction","nameLocation":"5152:11:13","nodeType":"VariableDeclaration","scope":5217,"src":"5129:34:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_L2CanonicalTransaction_$5124_memory_ptr","typeString":"struct IMailbox.L2CanonicalTransaction"},"typeName":{"id":5211,"nodeType":"UserDefinedTypeName","pathNode":{"id":5210,"name":"L2CanonicalTransaction","nameLocations":["5129:22:13"],"nodeType":"IdentifierPath","referencedDeclaration":5124,"src":"5129:22:13"},"referencedDeclaration":5124,"src":"5129:22:13","typeDescriptions":{"typeIdentifier":"t_struct$_L2CanonicalTransaction_$5124_storage_ptr","typeString":"struct IMailbox.L2CanonicalTransaction"}},"visibility":"internal"},{"constant":false,"id":5215,"indexed":false,"mutability":"mutable","name":"factoryDeps","nameLocation":"5181:11:13","nodeType":"VariableDeclaration","scope":5217,"src":"5173:19:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":5213,"name":"bytes","nodeType":"ElementaryTypeName","src":"5173:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":5214,"nodeType":"ArrayTypeName","src":"5173:7:13","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"5041:157:13"},"src":"5017:182:13"}],"scope":5219,"src":"165:5036:13","usedErrors":[]}],"src":"47:5155:13"},"id":13},"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IZkSync.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IZkSync.sol","exportedSymbols":{"Diamond":[6011],"IDiamondCut":[4805],"IERC20":[299],"IExecutor":[4915],"IGetters":[5015],"IGovernance":[5086],"IMailbox":[5218],"IZkSync":[5236],"L2Log":[3769],"L2Message":[3776]},"id":5237,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":5220,"literals":["solidity","^","0.8"],"nodeType":"PragmaDirective","src":"47:21:14"},{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IMailbox.sol","file":"./IMailbox.sol","id":5221,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5237,"sourceUnit":5219,"src":"70:24:14","symbolAliases":[],"unitAlias":""},{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IGovernance.sol","file":"./IGovernance.sol","id":5222,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5237,"sourceUnit":5087,"src":"95:27:14","symbolAliases":[],"unitAlias":""},{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IExecutor.sol","file":"./IExecutor.sol","id":5223,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5237,"sourceUnit":4916,"src":"123:25:14","symbolAliases":[],"unitAlias":""},{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IDiamondCut.sol","file":"./IDiamondCut.sol","id":5224,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5237,"sourceUnit":4806,"src":"149:27:14","symbolAliases":[],"unitAlias":""},{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IGetters.sol","file":"./IGetters.sol","id":5225,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5237,"sourceUnit":5016,"src":"177:24:14","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":5226,"name":"IMailbox","nameLocations":["224:8:14"],"nodeType":"IdentifierPath","referencedDeclaration":5218,"src":"224:8:14"},"id":5227,"nodeType":"InheritanceSpecifier","src":"224:8:14"},{"baseName":{"id":5228,"name":"IGovernance","nameLocations":["234:11:14"],"nodeType":"IdentifierPath","referencedDeclaration":5086,"src":"234:11:14"},"id":5229,"nodeType":"InheritanceSpecifier","src":"234:11:14"},{"baseName":{"id":5230,"name":"IExecutor","nameLocations":["247:9:14"],"nodeType":"IdentifierPath","referencedDeclaration":4915,"src":"247:9:14"},"id":5231,"nodeType":"InheritanceSpecifier","src":"247:9:14"},{"baseName":{"id":5232,"name":"IDiamondCut","nameLocations":["258:11:14"],"nodeType":"IdentifierPath","referencedDeclaration":4805,"src":"258:11:14"},"id":5233,"nodeType":"InheritanceSpecifier","src":"258:11:14"},{"baseName":{"id":5234,"name":"IGetters","nameLocations":["271:8:14"],"nodeType":"IdentifierPath","referencedDeclaration":5015,"src":"271:8:14"},"id":5235,"nodeType":"InheritanceSpecifier","src":"271:8:14"}],"canonicalName":"IZkSync","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":5236,"linearizedBaseContracts":[5236,5015,4805,4915,5086,5218],"name":"IZkSync","nameLocation":"213:7:14","nodeType":"ContractDefinition","nodes":[],"scope":5237,"src":"203:79:14","usedErrors":[]}],"src":"47:236:14"},"id":14},"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/Diamond.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/Diamond.sol","exportedSymbols":{"Diamond":[6011]},"id":6012,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":5238,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"33:23:15"},{"abstract":false,"baseContracts":[],"canonicalName":"Diamond","contractDependencies":[],"contractKind":"library","documentation":{"id":5239,"nodeType":"StructuredDocumentation","src":"58:96:15","text":"@author Matter Labs\n @notice The helper library for managing the EIP-2535 diamond proxy."},"fullyImplemented":true,"id":6011,"linearizedBaseContracts":[6011],"name":"Diamond","nameLocation":"162:7:15","nodeType":"ContractDefinition","nodes":[{"constant":true,"documentation":{"id":5240,"nodeType":"StructuredDocumentation","src":"176:208:15","text":"@dev Magic value that should be returned by diamond cut initialize contracts.\n @dev Used to distinguish calls to contracts that were supposed to be used as diamond initializer from other contracts."},"id":5245,"mutability":"constant","name":"DIAMOND_INIT_SUCCESS_RETURN_VALUE","nameLocation":"406:33:15","nodeType":"VariableDeclaration","scope":6011,"src":"389:85:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5241,"name":"bytes32","nodeType":"ElementaryTypeName","src":"389:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"6469616d6f6e642e7a6b73796e632e696e6974","id":5243,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"452:21:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_33774e659306e47509050e97cb651e731180a42d458212294d30751925c551a3","typeString":"literal_string \"diamond.zksync.init\""},"value":"diamond.zksync.init"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_33774e659306e47509050e97cb651e731180a42d458212294d30751925c551a3","typeString":"literal_string \"diamond.zksync.init\""}],"id":5242,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"442:9:15","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":5244,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"442:32:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":true,"documentation":{"id":5246,"nodeType":"StructuredDocumentation","src":"481:56:15","text":"@dev Storage position of `DiamondStorage` structure."},"id":5251,"mutability":"constant","name":"DIAMOND_STORAGE_POSITION","nameLocation":"559:24:15","nodeType":"VariableDeclaration","scope":6011,"src":"542:89:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5247,"name":"bytes32","nodeType":"ElementaryTypeName","src":"542:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"6469616d6f6e642e7374616e646172642e6469616d6f6e642e73746f72616765","id":5249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"596:34:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c","typeString":"literal_string \"diamond.standard.diamond.storage\""},"value":"diamond.standard.diamond.storage"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c","typeString":"literal_string \"diamond.standard.diamond.storage\""}],"id":5248,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"586:9:15","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":5250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"586:45:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"canonicalName":"Diamond.SelectorToFacet","id":5258,"members":[{"constant":false,"id":5253,"mutability":"mutable","name":"facetAddress","nameLocation":"1024:12:15","nodeType":"VariableDeclaration","scope":5258,"src":"1016:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5252,"name":"address","nodeType":"ElementaryTypeName","src":"1016:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5255,"mutability":"mutable","name":"selectorPosition","nameLocation":"1053:16:15","nodeType":"VariableDeclaration","scope":5258,"src":"1046:23:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":5254,"name":"uint16","nodeType":"ElementaryTypeName","src":"1046:6:15","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":5257,"mutability":"mutable","name":"isFreezable","nameLocation":"1084:11:15","nodeType":"VariableDeclaration","scope":5258,"src":"1079:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5256,"name":"bool","nodeType":"ElementaryTypeName","src":"1079:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"SelectorToFacet","nameLocation":"990:15:15","nodeType":"StructDefinition","scope":6011,"src":"983:119:15","visibility":"public"},{"canonicalName":"Diamond.FacetToSelectors","id":5264,"members":[{"constant":false,"id":5261,"mutability":"mutable","name":"selectors","nameLocation":"1405:9:15","nodeType":"VariableDeclaration","scope":5264,"src":"1396:18:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"},"typeName":{"baseType":{"id":5259,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1396:6:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":5260,"nodeType":"ArrayTypeName","src":"1396:8:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"}},"visibility":"internal"},{"constant":false,"id":5263,"mutability":"mutable","name":"facetPosition","nameLocation":"1431:13:15","nodeType":"VariableDeclaration","scope":5264,"src":"1424:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":5262,"name":"uint16","nodeType":"ElementaryTypeName","src":"1424:6:15","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"name":"FacetToSelectors","nameLocation":"1369:16:15","nodeType":"StructDefinition","scope":6011,"src":"1362:89:15","visibility":"public"},{"canonicalName":"Diamond.DiamondStorage","id":5280,"members":[{"constant":false,"id":5269,"mutability":"mutable","name":"selectorToFacet","nameLocation":"2126:15:15","nodeType":"VariableDeclaration","scope":5280,"src":"2091:50:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_SelectorToFacet_$5258_storage_$","typeString":"mapping(bytes4 => struct Diamond.SelectorToFacet)"},"typeName":{"id":5268,"keyType":{"id":5265,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2099:6:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"Mapping","src":"2091:34:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_SelectorToFacet_$5258_storage_$","typeString":"mapping(bytes4 => struct Diamond.SelectorToFacet)"},"valueType":{"id":5267,"nodeType":"UserDefinedTypeName","pathNode":{"id":5266,"name":"SelectorToFacet","nameLocations":["2109:15:15"],"nodeType":"IdentifierPath","referencedDeclaration":5258,"src":"2109:15:15"},"referencedDeclaration":5258,"src":"2109:15:15","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_storage_ptr","typeString":"struct Diamond.SelectorToFacet"}}},"visibility":"internal"},{"constant":false,"id":5274,"mutability":"mutable","name":"facetToSelectors","nameLocation":"2188:16:15","nodeType":"VariableDeclaration","scope":5280,"src":"2151:53:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetToSelectors_$5264_storage_$","typeString":"mapping(address => struct Diamond.FacetToSelectors)"},"typeName":{"id":5273,"keyType":{"id":5270,"name":"address","nodeType":"ElementaryTypeName","src":"2159:7:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2151:36:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetToSelectors_$5264_storage_$","typeString":"mapping(address => struct Diamond.FacetToSelectors)"},"valueType":{"id":5272,"nodeType":"UserDefinedTypeName","pathNode":{"id":5271,"name":"FacetToSelectors","nameLocations":["2170:16:15"],"nodeType":"IdentifierPath","referencedDeclaration":5264,"src":"2170:16:15"},"referencedDeclaration":5264,"src":"2170:16:15","typeDescriptions":{"typeIdentifier":"t_struct$_FacetToSelectors_$5264_storage_ptr","typeString":"struct Diamond.FacetToSelectors"}}},"visibility":"internal"},{"constant":false,"id":5277,"mutability":"mutable","name":"facets","nameLocation":"2224:6:15","nodeType":"VariableDeclaration","scope":5280,"src":"2214:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":5275,"name":"address","nodeType":"ElementaryTypeName","src":"2214:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5276,"nodeType":"ArrayTypeName","src":"2214:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":5279,"mutability":"mutable","name":"isFrozen","nameLocation":"2245:8:15","nodeType":"VariableDeclaration","scope":5280,"src":"2240:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5278,"name":"bool","nodeType":"ElementaryTypeName","src":"2240:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"DiamondStorage","nameLocation":"2066:14:15","nodeType":"StructDefinition","scope":6011,"src":"2059:201:15","visibility":"public"},{"body":{"id":5292,"nodeType":"Block","src":"2466:133:15","statements":[{"assignments":[5288],"declarations":[{"constant":false,"id":5288,"mutability":"mutable","name":"position","nameLocation":"2484:8:15","nodeType":"VariableDeclaration","scope":5292,"src":"2476:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5287,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2476:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":5290,"initialValue":{"id":5289,"name":"DIAMOND_STORAGE_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5251,"src":"2495:24:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2476:43:15"},{"AST":{"nodeType":"YulBlock","src":"2538:55:15","statements":[{"nodeType":"YulAssignment","src":"2552:31:15","value":{"name":"position","nodeType":"YulIdentifier","src":"2575:8:15"},"variableNames":[{"name":"diamondStorage.slot","nodeType":"YulIdentifier","src":"2552:19:15"}]}]},"evmVersion":"london","externalReferences":[{"declaration":5285,"isOffset":false,"isSlot":true,"src":"2552:19:15","suffix":"slot","valueSize":1},{"declaration":5288,"isOffset":false,"isSlot":false,"src":"2575:8:15","valueSize":1}],"id":5291,"nodeType":"InlineAssembly","src":"2529:64:15"}]},"documentation":{"id":5281,"nodeType":"StructuredDocumentation","src":"2266:104:15","text":"@return diamondStorage The pointer to the storage where all specific diamond proxy parameters stored"},"id":5293,"implemented":true,"kind":"function","modifiers":[],"name":"getDiamondStorage","nameLocation":"2384:17:15","nodeType":"FunctionDefinition","parameters":{"id":5282,"nodeType":"ParameterList","parameters":[],"src":"2401:2:15"},"returnParameters":{"id":5286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5285,"mutability":"mutable","name":"diamondStorage","nameLocation":"2450:14:15","nodeType":"VariableDeclaration","scope":5293,"src":"2427:37:15","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage"},"typeName":{"id":5284,"nodeType":"UserDefinedTypeName","pathNode":{"id":5283,"name":"DiamondStorage","nameLocations":["2427:14:15"],"nodeType":"IdentifierPath","referencedDeclaration":5280,"src":"2427:14:15"},"referencedDeclaration":5280,"src":"2427:14:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage"}},"visibility":"internal"}],"src":"2426:39:15"},"scope":6011,"src":"2375:224:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"Diamond.Action","id":5297,"members":[{"id":5294,"name":"Add","nameLocation":"2694:3:15","nodeType":"EnumValue","src":"2694:3:15"},{"id":5295,"name":"Replace","nameLocation":"2707:7:15","nodeType":"EnumValue","src":"2707:7:15"},{"id":5296,"name":"Remove","nameLocation":"2724:6:15","nodeType":"EnumValue","src":"2724:6:15"}],"name":"Action","nameLocation":"2677:6:15","nodeType":"EnumDefinition","src":"2672:64:15"},{"canonicalName":"Diamond.FacetCut","id":5308,"members":[{"constant":false,"id":5299,"mutability":"mutable","name":"facet","nameLocation":"3154:5:15","nodeType":"VariableDeclaration","scope":5308,"src":"3146:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5298,"name":"address","nodeType":"ElementaryTypeName","src":"3146:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5302,"mutability":"mutable","name":"action","nameLocation":"3176:6:15","nodeType":"VariableDeclaration","scope":5308,"src":"3169:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$5297","typeString":"enum Diamond.Action"},"typeName":{"id":5301,"nodeType":"UserDefinedTypeName","pathNode":{"id":5300,"name":"Action","nameLocations":["3169:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":5297,"src":"3169:6:15"},"referencedDeclaration":5297,"src":"3169:6:15","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$5297","typeString":"enum Diamond.Action"}},"visibility":"internal"},{"constant":false,"id":5304,"mutability":"mutable","name":"isFreezable","nameLocation":"3197:11:15","nodeType":"VariableDeclaration","scope":5308,"src":"3192:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5303,"name":"bool","nodeType":"ElementaryTypeName","src":"3192:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5307,"mutability":"mutable","name":"selectors","nameLocation":"3227:9:15","nodeType":"VariableDeclaration","scope":5308,"src":"3218:18:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"},"typeName":{"baseType":{"id":5305,"name":"bytes4","nodeType":"ElementaryTypeName","src":"3218:6:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":5306,"nodeType":"ArrayTypeName","src":"3218:8:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"}},"visibility":"internal"}],"name":"FacetCut","nameLocation":"3127:8:15","nodeType":"StructDefinition","scope":6011,"src":"3120:123:15","visibility":"public"},{"canonicalName":"Diamond.DiamondCutData","id":5317,"members":[{"constant":false,"id":5312,"mutability":"mutable","name":"facetCuts","nameLocation":"3620:9:15","nodeType":"VariableDeclaration","scope":5317,"src":"3609:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$5308_storage_$dyn_storage_ptr","typeString":"struct Diamond.FacetCut[]"},"typeName":{"baseType":{"id":5310,"nodeType":"UserDefinedTypeName","pathNode":{"id":5309,"name":"FacetCut","nameLocations":["3609:8:15"],"nodeType":"IdentifierPath","referencedDeclaration":5308,"src":"3609:8:15"},"referencedDeclaration":5308,"src":"3609:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$5308_storage_ptr","typeString":"struct Diamond.FacetCut"}},"id":5311,"nodeType":"ArrayTypeName","src":"3609:10:15","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$5308_storage_$dyn_storage_ptr","typeString":"struct Diamond.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":5314,"mutability":"mutable","name":"initAddress","nameLocation":"3647:11:15","nodeType":"VariableDeclaration","scope":5317,"src":"3639:19:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5313,"name":"address","nodeType":"ElementaryTypeName","src":"3639:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5316,"mutability":"mutable","name":"initCalldata","nameLocation":"3674:12:15","nodeType":"VariableDeclaration","scope":5317,"src":"3668:18:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":5315,"name":"bytes","nodeType":"ElementaryTypeName","src":"3668:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"DiamondCutData","nameLocation":"3584:14:15","nodeType":"StructDefinition","scope":6011,"src":"3577:116:15","visibility":"public"},{"body":{"id":5446,"nodeType":"Block","src":"3981:1106:15","statements":[{"assignments":[5328],"declarations":[{"constant":false,"id":5328,"mutability":"mutable","name":"facetCuts","nameLocation":"4009:9:15","nodeType":"VariableDeclaration","scope":5446,"src":"3991:27:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$5308_memory_ptr_$dyn_memory_ptr","typeString":"struct Diamond.FacetCut[]"},"typeName":{"baseType":{"id":5326,"nodeType":"UserDefinedTypeName","pathNode":{"id":5325,"name":"FacetCut","nameLocations":["3991:8:15"],"nodeType":"IdentifierPath","referencedDeclaration":5308,"src":"3991:8:15"},"referencedDeclaration":5308,"src":"3991:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$5308_storage_ptr","typeString":"struct Diamond.FacetCut"}},"id":5327,"nodeType":"ArrayTypeName","src":"3991:10:15","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$5308_storage_$dyn_storage_ptr","typeString":"struct Diamond.FacetCut[]"}},"visibility":"internal"}],"id":5331,"initialValue":{"expression":{"id":5329,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5321,"src":"4021:11:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondCutData_$5317_memory_ptr","typeString":"struct Diamond.DiamondCutData memory"}},"id":5330,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4033:9:15","memberName":"facetCuts","nodeType":"MemberAccess","referencedDeclaration":5312,"src":"4021:21:15","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$5308_memory_ptr_$dyn_memory_ptr","typeString":"struct Diamond.FacetCut memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"3991:51:15"},{"assignments":[5333],"declarations":[{"constant":false,"id":5333,"mutability":"mutable","name":"initAddress","nameLocation":"4060:11:15","nodeType":"VariableDeclaration","scope":5446,"src":"4052:19:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5332,"name":"address","nodeType":"ElementaryTypeName","src":"4052:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":5336,"initialValue":{"expression":{"id":5334,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5321,"src":"4074:11:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondCutData_$5317_memory_ptr","typeString":"struct Diamond.DiamondCutData memory"}},"id":5335,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4086:11:15","memberName":"initAddress","nodeType":"MemberAccess","referencedDeclaration":5314,"src":"4074:23:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4052:45:15"},{"assignments":[5338],"declarations":[{"constant":false,"id":5338,"mutability":"mutable","name":"initCalldata","nameLocation":"4120:12:15","nodeType":"VariableDeclaration","scope":5446,"src":"4107:25:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5337,"name":"bytes","nodeType":"ElementaryTypeName","src":"4107:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":5341,"initialValue":{"expression":{"id":5339,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5321,"src":"4135:11:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondCutData_$5317_memory_ptr","typeString":"struct Diamond.DiamondCutData memory"}},"id":5340,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4147:12:15","memberName":"initCalldata","nodeType":"MemberAccess","referencedDeclaration":5316,"src":"4135:24:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4107:52:15"},{"body":{"id":5433,"nodeType":"Block","src":"4216:743:15","statements":[{"assignments":[5355],"declarations":[{"constant":false,"id":5355,"mutability":"mutable","name":"action","nameLocation":"4237:6:15","nodeType":"VariableDeclaration","scope":5433,"src":"4230:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$5297","typeString":"enum Diamond.Action"},"typeName":{"id":5354,"nodeType":"UserDefinedTypeName","pathNode":{"id":5353,"name":"Action","nameLocations":["4230:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":5297,"src":"4230:6:15"},"referencedDeclaration":5297,"src":"4230:6:15","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$5297","typeString":"enum Diamond.Action"}},"visibility":"internal"}],"id":5360,"initialValue":{"expression":{"baseExpression":{"id":5356,"name":"facetCuts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5328,"src":"4246:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$5308_memory_ptr_$dyn_memory_ptr","typeString":"struct Diamond.FacetCut memory[] memory"}},"id":5358,"indexExpression":{"id":5357,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5343,"src":"4256:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4246:12:15","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$5308_memory_ptr","typeString":"struct Diamond.FacetCut memory"}},"id":5359,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4259:6:15","memberName":"action","nodeType":"MemberAccess","referencedDeclaration":5302,"src":"4246:19:15","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$5297","typeString":"enum Diamond.Action"}},"nodeType":"VariableDeclarationStatement","src":"4230:35:15"},{"assignments":[5362],"declarations":[{"constant":false,"id":5362,"mutability":"mutable","name":"facet","nameLocation":"4287:5:15","nodeType":"VariableDeclaration","scope":5433,"src":"4279:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5361,"name":"address","nodeType":"ElementaryTypeName","src":"4279:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":5367,"initialValue":{"expression":{"baseExpression":{"id":5363,"name":"facetCuts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5328,"src":"4295:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$5308_memory_ptr_$dyn_memory_ptr","typeString":"struct Diamond.FacetCut memory[] memory"}},"id":5365,"indexExpression":{"id":5364,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5343,"src":"4305:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4295:12:15","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$5308_memory_ptr","typeString":"struct Diamond.FacetCut memory"}},"id":5366,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4308:5:15","memberName":"facet","nodeType":"MemberAccess","referencedDeclaration":5299,"src":"4295:18:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4279:34:15"},{"assignments":[5369],"declarations":[{"constant":false,"id":5369,"mutability":"mutable","name":"isFacetFreezable","nameLocation":"4332:16:15","nodeType":"VariableDeclaration","scope":5433,"src":"4327:21:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5368,"name":"bool","nodeType":"ElementaryTypeName","src":"4327:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5374,"initialValue":{"expression":{"baseExpression":{"id":5370,"name":"facetCuts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5328,"src":"4351:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$5308_memory_ptr_$dyn_memory_ptr","typeString":"struct Diamond.FacetCut memory[] memory"}},"id":5372,"indexExpression":{"id":5371,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5343,"src":"4361:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4351:12:15","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$5308_memory_ptr","typeString":"struct Diamond.FacetCut memory"}},"id":5373,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4364:11:15","memberName":"isFreezable","nodeType":"MemberAccess","referencedDeclaration":5304,"src":"4351:24:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"4327:48:15"},{"assignments":[5379],"declarations":[{"constant":false,"id":5379,"mutability":"mutable","name":"selectors","nameLocation":"4405:9:15","nodeType":"VariableDeclaration","scope":5433,"src":"4389:25:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[]"},"typeName":{"baseType":{"id":5377,"name":"bytes4","nodeType":"ElementaryTypeName","src":"4389:6:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":5378,"nodeType":"ArrayTypeName","src":"4389:8:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"}},"visibility":"internal"}],"id":5384,"initialValue":{"expression":{"baseExpression":{"id":5380,"name":"facetCuts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5328,"src":"4417:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$5308_memory_ptr_$dyn_memory_ptr","typeString":"struct Diamond.FacetCut memory[] memory"}},"id":5382,"indexExpression":{"id":5381,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5343,"src":"4427:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4417:12:15","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$5308_memory_ptr","typeString":"struct Diamond.FacetCut memory"}},"id":5383,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4430:9:15","memberName":"selectors","nodeType":"MemberAccess","referencedDeclaration":5307,"src":"4417:22:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"nodeType":"VariableDeclarationStatement","src":"4389:50:15"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5386,"name":"selectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5379,"src":"4462:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"id":5387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4472:6:15","memberName":"length","nodeType":"MemberAccess","src":"4462:16:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":5388,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4481:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4462:20:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"42","id":5390,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4484:3:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_1f675bff07515f5df96737194ea945c36c41e7b4fcef307b7cd4d0e602a69111","typeString":"literal_string \"B\""},"value":"B"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1f675bff07515f5df96737194ea945c36c41e7b4fcef307b7cd4d0e602a69111","typeString":"literal_string \"B\""}],"id":5385,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4454:7:15","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5391,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4454:34:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5392,"nodeType":"ExpressionStatement","src":"4454:34:15"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_Action_$5297","typeString":"enum Diamond.Action"},"id":5396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5393,"name":"action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5355,"src":"4539:6:15","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$5297","typeString":"enum Diamond.Action"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":5394,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5297,"src":"4549:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$5297_$","typeString":"type(enum Diamond.Action)"}},"id":5395,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4556:3:15","memberName":"Add","nodeType":"MemberAccess","referencedDeclaration":5294,"src":"4549:10:15","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$5297","typeString":"enum Diamond.Action"}},"src":"4539:20:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_Action_$5297","typeString":"enum Diamond.Action"},"id":5407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5404,"name":"action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5355,"src":"4653:6:15","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$5297","typeString":"enum Diamond.Action"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":5405,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5297,"src":"4663:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$5297_$","typeString":"type(enum Diamond.Action)"}},"id":5406,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4670:7:15","memberName":"Replace","nodeType":"MemberAccess","referencedDeclaration":5295,"src":"4663:14:15","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$5297","typeString":"enum Diamond.Action"}},"src":"4653:24:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_Action_$5297","typeString":"enum Diamond.Action"},"id":5418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5415,"name":"action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5355,"src":"4775:6:15","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$5297","typeString":"enum Diamond.Action"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":5416,"name":"Action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5297,"src":"4785:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Action_$5297_$","typeString":"type(enum Diamond.Action)"}},"id":5417,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4792:6:15","memberName":"Remove","nodeType":"MemberAccess","referencedDeclaration":5296,"src":"4785:13:15","typeDescriptions":{"typeIdentifier":"t_enum$_Action_$5297","typeString":"enum Diamond.Action"}},"src":"4775:23:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5429,"nodeType":"Block","src":"4873:76:15","statements":[{"expression":{"arguments":[{"hexValue":"43","id":5426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4898:3:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_017e667f4b8c174291d1543c466717566e206df1bfd6f30271055ddafdb18f72","typeString":"literal_string \"C\""},"value":"C"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_017e667f4b8c174291d1543c466717566e206df1bfd6f30271055ddafdb18f72","typeString":"literal_string \"C\""}],"id":5425,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"4891:6:15","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":5427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4891:11:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5428,"nodeType":"ExpressionStatement","src":"4891:11:15"}]},"id":5430,"nodeType":"IfStatement","src":"4771:178:15","trueBody":{"id":5424,"nodeType":"Block","src":"4800:67:15","statements":[{"expression":{"arguments":[{"id":5420,"name":"facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5362,"src":"4835:5:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5421,"name":"selectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5379,"src":"4842:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}],"id":5419,"name":"_removeFunctions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5685,"src":"4818:16:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_bytes4_$dyn_memory_ptr_$returns$__$","typeString":"function (address,bytes4[] memory)"}},"id":5422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4818:34:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5423,"nodeType":"ExpressionStatement","src":"4818:34:15"}]}},"id":5431,"nodeType":"IfStatement","src":"4649:300:15","trueBody":{"id":5414,"nodeType":"Block","src":"4679:86:15","statements":[{"expression":{"arguments":[{"id":5409,"name":"facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5362,"src":"4715:5:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5410,"name":"selectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5379,"src":"4722:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},{"id":5411,"name":"isFacetFreezable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5369,"src":"4733:16:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5408,"name":"_replaceFunctions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5615,"src":"4697:17:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_bytes4_$dyn_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes4[] memory,bool)"}},"id":5412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4697:53:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5413,"nodeType":"ExpressionStatement","src":"4697:53:15"}]}},"id":5432,"nodeType":"IfStatement","src":"4535:414:15","trueBody":{"id":5403,"nodeType":"Block","src":"4561:82:15","statements":[{"expression":{"arguments":[{"id":5398,"name":"facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5362,"src":"4593:5:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5399,"name":"selectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5379,"src":"4600:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},{"id":5400,"name":"isFacetFreezable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5369,"src":"4611:16:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5397,"name":"_addFunctions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5533,"src":"4579:13:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_bytes4_$dyn_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes4[] memory,bool)"}},"id":5401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4579:49:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5402,"nodeType":"ExpressionStatement","src":"4579:49:15"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5346,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5343,"src":"4189:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":5347,"name":"facetCuts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5328,"src":"4193:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$5308_memory_ptr_$dyn_memory_ptr","typeString":"struct Diamond.FacetCut memory[] memory"}},"id":5348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4203:6:15","memberName":"length","nodeType":"MemberAccess","src":"4193:16:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4189:20:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5434,"initializationExpression":{"assignments":[5343],"declarations":[{"constant":false,"id":5343,"mutability":"mutable","name":"i","nameLocation":"4182:1:15","nodeType":"VariableDeclaration","scope":5434,"src":"4174:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5342,"name":"uint256","nodeType":"ElementaryTypeName","src":"4174:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5345,"initialValue":{"hexValue":"30","id":5344,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4186:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4174:13:15"},"loopExpression":{"expression":{"id":5351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4211:3:15","subExpression":{"id":5350,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5343,"src":"4213:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5352,"nodeType":"ExpressionStatement","src":"4211:3:15"},"nodeType":"ForStatement","src":"4169:790:15"},{"expression":{"arguments":[{"id":5436,"name":"initAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5333,"src":"4991:11:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5437,"name":"initCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5338,"src":"5004:12:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5435,"name":"_initializeDiamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6010,"src":"4969:21:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory)"}},"id":5438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4969:48:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5439,"nodeType":"ExpressionStatement","src":"4969:48:15"},{"eventCall":{"arguments":[{"id":5441,"name":"facetCuts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5328,"src":"5043:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$5308_memory_ptr_$dyn_memory_ptr","typeString":"struct Diamond.FacetCut memory[] memory"}},{"id":5442,"name":"initAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5333,"src":"5054:11:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5443,"name":"initCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5338,"src":"5067:12:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_FacetCut_$5308_memory_ptr_$dyn_memory_ptr","typeString":"struct Diamond.FacetCut memory[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5440,"name":"DiamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5457,"src":"5032:10:15","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_array$_t_struct$_FacetCut_$5308_memory_ptr_$dyn_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (struct Diamond.FacetCut memory[] memory,address,bytes memory)"}},"id":5444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5032:48:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5445,"nodeType":"EmitStatement","src":"5027:53:15"}]},"documentation":{"id":5318,"nodeType":"StructuredDocumentation","src":"3699:213:15","text":"@dev Add/replace/remove any number of selectors and optionally execute a function with delegatecall\n @param _diamondCut Diamond's facet changes and the parameters to optional initialization delegatecall"},"id":5447,"implemented":true,"kind":"function","modifiers":[],"name":"diamondCut","nameLocation":"3926:10:15","nodeType":"FunctionDefinition","parameters":{"id":5322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5321,"mutability":"mutable","name":"_diamondCut","nameLocation":"3959:11:15","nodeType":"VariableDeclaration","scope":5447,"src":"3937:33:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondCutData_$5317_memory_ptr","typeString":"struct Diamond.DiamondCutData"},"typeName":{"id":5320,"nodeType":"UserDefinedTypeName","pathNode":{"id":5319,"name":"DiamondCutData","nameLocations":["3937:14:15"],"nodeType":"IdentifierPath","referencedDeclaration":5317,"src":"3937:14:15"},"referencedDeclaration":5317,"src":"3937:14:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondCutData_$5317_storage_ptr","typeString":"struct Diamond.DiamondCutData"}},"visibility":"internal"}],"src":"3936:35:15"},"returnParameters":{"id":5323,"nodeType":"ParameterList","parameters":[],"src":"3981:0:15"},"scope":6011,"src":"3917:1170:15","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"anonymous":false,"eventSelector":"87b829356b3403d36217eff1f66ee48eacd0a69015153aba4f0de29fe5340c30","id":5457,"name":"DiamondCut","nameLocation":"5099:10:15","nodeType":"EventDefinition","parameters":{"id":5456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5451,"indexed":false,"mutability":"mutable","name":"facetCuts","nameLocation":"5121:9:15","nodeType":"VariableDeclaration","scope":5457,"src":"5110:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$5308_memory_ptr_$dyn_memory_ptr","typeString":"struct Diamond.FacetCut[]"},"typeName":{"baseType":{"id":5449,"nodeType":"UserDefinedTypeName","pathNode":{"id":5448,"name":"FacetCut","nameLocations":["5110:8:15"],"nodeType":"IdentifierPath","referencedDeclaration":5308,"src":"5110:8:15"},"referencedDeclaration":5308,"src":"5110:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$5308_storage_ptr","typeString":"struct Diamond.FacetCut"}},"id":5450,"nodeType":"ArrayTypeName","src":"5110:10:15","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$5308_storage_$dyn_storage_ptr","typeString":"struct Diamond.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":5453,"indexed":false,"mutability":"mutable","name":"initAddress","nameLocation":"5140:11:15","nodeType":"VariableDeclaration","scope":5457,"src":"5132:19:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5452,"name":"address","nodeType":"ElementaryTypeName","src":"5132:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5455,"indexed":false,"mutability":"mutable","name":"initCalldata","nameLocation":"5159:12:15","nodeType":"VariableDeclaration","scope":5457,"src":"5153:18:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5454,"name":"bytes","nodeType":"ElementaryTypeName","src":"5153:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5109:63:15"},"src":"5093:80:15"},{"body":{"id":5532,"nodeType":"Block","src":"5434:623:15","statements":[{"assignments":[5470],"declarations":[{"constant":false,"id":5470,"mutability":"mutable","name":"ds","nameLocation":"5467:2:15","nodeType":"VariableDeclaration","scope":5532,"src":"5444:25:15","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage"},"typeName":{"id":5469,"nodeType":"UserDefinedTypeName","pathNode":{"id":5468,"name":"DiamondStorage","nameLocations":["5444:14:15"],"nodeType":"IdentifierPath","referencedDeclaration":5280,"src":"5444:14:15"},"referencedDeclaration":5280,"src":"5444:14:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage"}},"visibility":"internal"}],"id":5473,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":5471,"name":"getDiamondStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5293,"src":"5472:17:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$5280_storage_ptr_$","typeString":"function () pure returns (struct Diamond.DiamondStorage storage pointer)"}},"id":5472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5472:19:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5444:47:15"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5475,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5460,"src":"5510:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":5478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5528:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5477,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5520:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5476,"name":"address","nodeType":"ElementaryTypeName","src":"5520:7:15","typeDescriptions":{}}},"id":5479,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5520:10:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5510:20:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"47","id":5481,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5532:3:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_077da99d806abd13c9f15ece5398525119d11e11e9836b2ee7d23f6159ad87d2","typeString":"literal_string \"G\""},"value":"G"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_077da99d806abd13c9f15ece5398525119d11e11e9836b2ee7d23f6159ad87d2","typeString":"literal_string \"G\""}],"id":5474,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5502:7:15","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5502:34:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5483,"nodeType":"ExpressionStatement","src":"5502:34:15"},{"expression":{"arguments":[{"id":5485,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5460,"src":"5681:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5484,"name":"_saveFacetIfNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5737,"src":"5665:15:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":5486,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5665:23:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5487,"nodeType":"ExpressionStatement","src":"5665:23:15"},{"body":{"id":5530,"nodeType":"Block","src":"5747:304:15","statements":[{"assignments":[5500],"declarations":[{"constant":false,"id":5500,"mutability":"mutable","name":"selector","nameLocation":"5768:8:15","nodeType":"VariableDeclaration","scope":5530,"src":"5761:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":5499,"name":"bytes4","nodeType":"ElementaryTypeName","src":"5761:6:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":5504,"initialValue":{"baseExpression":{"id":5501,"name":"_selectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"5779:10:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"id":5503,"indexExpression":{"id":5502,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5489,"src":"5790:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5779:13:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"5761:31:15"},{"assignments":[5507],"declarations":[{"constant":false,"id":5507,"mutability":"mutable","name":"oldFacet","nameLocation":"5829:8:15","nodeType":"VariableDeclaration","scope":5530,"src":"5806:31:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_memory_ptr","typeString":"struct Diamond.SelectorToFacet"},"typeName":{"id":5506,"nodeType":"UserDefinedTypeName","pathNode":{"id":5505,"name":"SelectorToFacet","nameLocations":["5806:15:15"],"nodeType":"IdentifierPath","referencedDeclaration":5258,"src":"5806:15:15"},"referencedDeclaration":5258,"src":"5806:15:15","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_storage_ptr","typeString":"struct Diamond.SelectorToFacet"}},"visibility":"internal"}],"id":5512,"initialValue":{"baseExpression":{"expression":{"id":5508,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5470,"src":"5840:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5509,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5843:15:15","memberName":"selectorToFacet","nodeType":"MemberAccess","referencedDeclaration":5269,"src":"5840:18:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_SelectorToFacet_$5258_storage_$","typeString":"mapping(bytes4 => struct Diamond.SelectorToFacet storage ref)"}},"id":5511,"indexExpression":{"id":5510,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5500,"src":"5859:8:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5840:28:15","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_storage","typeString":"struct Diamond.SelectorToFacet storage ref"}},"nodeType":"VariableDeclarationStatement","src":"5806:62:15"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5514,"name":"oldFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5507,"src":"5890:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_memory_ptr","typeString":"struct Diamond.SelectorToFacet memory"}},"id":5515,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5899:12:15","memberName":"facetAddress","nodeType":"MemberAccess","referencedDeclaration":5253,"src":"5890:21:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":5518,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5923:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5517,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5915:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5516,"name":"address","nodeType":"ElementaryTypeName","src":"5915:7:15","typeDescriptions":{}}},"id":5519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5915:10:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5890:35:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4a","id":5521,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5927:3:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_90174c907fea3d27ea14230ef6800c7bde0f907fb10d2c747a17af161f784d19","typeString":"literal_string \"J\""},"value":"J"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_90174c907fea3d27ea14230ef6800c7bde0f907fb10d2c747a17af161f784d19","typeString":"literal_string \"J\""}],"id":5513,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5882:7:15","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5882:49:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5523,"nodeType":"ExpressionStatement","src":"5882:49:15"},{"expression":{"arguments":[{"id":5525,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5460,"src":"6004:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5526,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5500,"src":"6012:8:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":5527,"name":"_isFacetFreezable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5465,"src":"6022:17:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5524,"name":"_addOneFunction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5788,"src":"5988:15:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes4_$_t_bool_$returns$__$","typeString":"function (address,bytes4,bool)"}},"id":5528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5988:52:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5529,"nodeType":"ExpressionStatement","src":"5988:52:15"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5492,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5489,"src":"5719:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":5493,"name":"_selectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"5723:10:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"id":5494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5734:6:15","memberName":"length","nodeType":"MemberAccess","src":"5723:17:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5719:21:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5531,"initializationExpression":{"assignments":[5489],"declarations":[{"constant":false,"id":5489,"mutability":"mutable","name":"i","nameLocation":"5712:1:15","nodeType":"VariableDeclaration","scope":5531,"src":"5704:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5488,"name":"uint256","nodeType":"ElementaryTypeName","src":"5704:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5491,"initialValue":{"hexValue":"30","id":5490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5716:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5704:13:15"},"loopExpression":{"expression":{"id":5497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5742:3:15","subExpression":{"id":5496,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5489,"src":"5744:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5498,"nodeType":"ExpressionStatement","src":"5742:3:15"},"nodeType":"ForStatement","src":"5699:352:15"}]},"documentation":{"id":5458,"nodeType":"StructuredDocumentation","src":"5179:121:15","text":"@dev Add new functions to the diamond proxy\n NOTE: expect but NOT enforce that `_selectors` is NON-EMPTY array"},"id":5533,"implemented":true,"kind":"function","modifiers":[],"name":"_addFunctions","nameLocation":"5314:13:15","nodeType":"FunctionDefinition","parameters":{"id":5466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5460,"mutability":"mutable","name":"_facet","nameLocation":"5345:6:15","nodeType":"VariableDeclaration","scope":5533,"src":"5337:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5459,"name":"address","nodeType":"ElementaryTypeName","src":"5337:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5463,"mutability":"mutable","name":"_selectors","nameLocation":"5377:10:15","nodeType":"VariableDeclaration","scope":5533,"src":"5361:26:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[]"},"typeName":{"baseType":{"id":5461,"name":"bytes4","nodeType":"ElementaryTypeName","src":"5361:6:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":5462,"nodeType":"ArrayTypeName","src":"5361:8:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"}},"visibility":"internal"},{"constant":false,"id":5465,"mutability":"mutable","name":"_isFacetFreezable","nameLocation":"5402:17:15","nodeType":"VariableDeclaration","scope":5533,"src":"5397:22:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5464,"name":"bool","nodeType":"ElementaryTypeName","src":"5397:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5327:98:15"},"returnParameters":{"id":5467,"nodeType":"ParameterList","parameters":[],"src":"5434:0:15"},"scope":6011,"src":"5305:752:15","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":5614,"nodeType":"Block","src":"6344:706:15","statements":[{"assignments":[5546],"declarations":[{"constant":false,"id":5546,"mutability":"mutable","name":"ds","nameLocation":"6377:2:15","nodeType":"VariableDeclaration","scope":5614,"src":"6354:25:15","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage"},"typeName":{"id":5545,"nodeType":"UserDefinedTypeName","pathNode":{"id":5544,"name":"DiamondStorage","nameLocations":["6354:14:15"],"nodeType":"IdentifierPath","referencedDeclaration":5280,"src":"6354:14:15"},"referencedDeclaration":5280,"src":"6354:14:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage"}},"visibility":"internal"}],"id":5549,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":5547,"name":"getDiamondStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5293,"src":"6382:17:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$5280_storage_ptr_$","typeString":"function () pure returns (struct Diamond.DiamondStorage storage pointer)"}},"id":5548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6382:19:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6354:47:15"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5551,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5536,"src":"6420:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":5554,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6438:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5553,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6430:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5552,"name":"address","nodeType":"ElementaryTypeName","src":"6430:7:15","typeDescriptions":{}}},"id":5555,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6430:10:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6420:20:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4b","id":5557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6442:3:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_91cb023ee03dcff3e185aa303e77c329b6b62e0a68a590039a476bc8cb48d055","typeString":"literal_string \"K\""},"value":"K"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_91cb023ee03dcff3e185aa303e77c329b6b62e0a68a590039a476bc8cb48d055","typeString":"literal_string \"K\""}],"id":5550,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6412:7:15","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6412:34:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5559,"nodeType":"ExpressionStatement","src":"6412:34:15"},{"expression":{"arguments":[{"id":5561,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5536,"src":"6592:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5560,"name":"_saveFacetIfNew","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5737,"src":"6576:15:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":5562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6576:23:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5563,"nodeType":"ExpressionStatement","src":"6576:23:15"},{"body":{"id":5612,"nodeType":"Block","src":"6658:386:15","statements":[{"assignments":[5576],"declarations":[{"constant":false,"id":5576,"mutability":"mutable","name":"selector","nameLocation":"6679:8:15","nodeType":"VariableDeclaration","scope":5612,"src":"6672:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":5575,"name":"bytes4","nodeType":"ElementaryTypeName","src":"6672:6:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":5580,"initialValue":{"baseExpression":{"id":5577,"name":"_selectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5539,"src":"6690:10:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"id":5579,"indexExpression":{"id":5578,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5565,"src":"6701:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6690:13:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"6672:31:15"},{"assignments":[5583],"declarations":[{"constant":false,"id":5583,"mutability":"mutable","name":"oldFacet","nameLocation":"6740:8:15","nodeType":"VariableDeclaration","scope":5612,"src":"6717:31:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_memory_ptr","typeString":"struct Diamond.SelectorToFacet"},"typeName":{"id":5582,"nodeType":"UserDefinedTypeName","pathNode":{"id":5581,"name":"SelectorToFacet","nameLocations":["6717:15:15"],"nodeType":"IdentifierPath","referencedDeclaration":5258,"src":"6717:15:15"},"referencedDeclaration":5258,"src":"6717:15:15","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_storage_ptr","typeString":"struct Diamond.SelectorToFacet"}},"visibility":"internal"}],"id":5588,"initialValue":{"baseExpression":{"expression":{"id":5584,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5546,"src":"6751:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5585,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6754:15:15","memberName":"selectorToFacet","nodeType":"MemberAccess","referencedDeclaration":5269,"src":"6751:18:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_SelectorToFacet_$5258_storage_$","typeString":"mapping(bytes4 => struct Diamond.SelectorToFacet storage ref)"}},"id":5587,"indexExpression":{"id":5586,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5576,"src":"6770:8:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6751:28:15","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_storage","typeString":"struct Diamond.SelectorToFacet storage ref"}},"nodeType":"VariableDeclarationStatement","src":"6717:62:15"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5590,"name":"oldFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5583,"src":"6801:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_memory_ptr","typeString":"struct Diamond.SelectorToFacet memory"}},"id":5591,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6810:12:15","memberName":"facetAddress","nodeType":"MemberAccess","referencedDeclaration":5253,"src":"6801:21:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":5594,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6834:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5593,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6826:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5592,"name":"address","nodeType":"ElementaryTypeName","src":"6826:7:15","typeDescriptions":{}}},"id":5595,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6826:10:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6801:35:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c","id":5597,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6838:3:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_8aa64f937099b65a4febc243a5ae0f2d6416bb9e473c30dd29c1ee498fb7c5a8","typeString":"literal_string \"L\""},"value":"L"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8aa64f937099b65a4febc243a5ae0f2d6416bb9e473c30dd29c1ee498fb7c5a8","typeString":"literal_string \"L\""}],"id":5589,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6793:7:15","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6793:49:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5599,"nodeType":"ExpressionStatement","src":"6793:49:15"},{"expression":{"arguments":[{"expression":{"id":5601,"name":"oldFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5583,"src":"6935:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_memory_ptr","typeString":"struct Diamond.SelectorToFacet memory"}},"id":5602,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6944:12:15","memberName":"facetAddress","nodeType":"MemberAccess","referencedDeclaration":5253,"src":"6935:21:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5603,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5576,"src":"6958:8:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":5600,"name":"_removeOneFunction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5884,"src":"6916:18:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes4_$returns$__$","typeString":"function (address,bytes4)"}},"id":5604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6916:51:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5605,"nodeType":"ExpressionStatement","src":"6916:51:15"},{"expression":{"arguments":[{"id":5607,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5536,"src":"6997:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5608,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5576,"src":"7005:8:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":5609,"name":"_isFacetFreezable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5541,"src":"7015:17:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5606,"name":"_addOneFunction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5788,"src":"6981:15:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes4_$_t_bool_$returns$__$","typeString":"function (address,bytes4,bool)"}},"id":5610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6981:52:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5611,"nodeType":"ExpressionStatement","src":"6981:52:15"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5568,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5565,"src":"6630:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":5569,"name":"_selectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5539,"src":"6634:10:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"id":5570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6645:6:15","memberName":"length","nodeType":"MemberAccess","src":"6634:17:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6630:21:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5613,"initializationExpression":{"assignments":[5565],"declarations":[{"constant":false,"id":5565,"mutability":"mutable","name":"i","nameLocation":"6623:1:15","nodeType":"VariableDeclaration","scope":5613,"src":"6615:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5564,"name":"uint256","nodeType":"ElementaryTypeName","src":"6615:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5567,"initialValue":{"hexValue":"30","id":5566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6627:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6615:13:15"},"loopExpression":{"expression":{"id":5573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"6653:3:15","subExpression":{"id":5572,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5565,"src":"6655:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5574,"nodeType":"ExpressionStatement","src":"6653:3:15"},"nodeType":"ForStatement","src":"6610:434:15"}]},"documentation":{"id":5534,"nodeType":"StructuredDocumentation","src":"6063:143:15","text":"@dev Change associated facets to already known function selectors\n NOTE: expect but NOT enforce that `_selectors` is NON-EMPTY array"},"id":5615,"implemented":true,"kind":"function","modifiers":[],"name":"_replaceFunctions","nameLocation":"6220:17:15","nodeType":"FunctionDefinition","parameters":{"id":5542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5536,"mutability":"mutable","name":"_facet","nameLocation":"6255:6:15","nodeType":"VariableDeclaration","scope":5615,"src":"6247:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5535,"name":"address","nodeType":"ElementaryTypeName","src":"6247:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5539,"mutability":"mutable","name":"_selectors","nameLocation":"6287:10:15","nodeType":"VariableDeclaration","scope":5615,"src":"6271:26:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[]"},"typeName":{"baseType":{"id":5537,"name":"bytes4","nodeType":"ElementaryTypeName","src":"6271:6:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":5538,"nodeType":"ArrayTypeName","src":"6271:8:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"}},"visibility":"internal"},{"constant":false,"id":5541,"mutability":"mutable","name":"_isFacetFreezable","nameLocation":"6312:17:15","nodeType":"VariableDeclaration","scope":5615,"src":"6307:22:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5540,"name":"bool","nodeType":"ElementaryTypeName","src":"6307:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6237:98:15"},"returnParameters":{"id":5543,"nodeType":"ParameterList","parameters":[],"src":"6344:0:15"},"scope":6011,"src":"6211:839:15","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":5684,"nodeType":"Block","src":"7264:497:15","statements":[{"assignments":[5626],"declarations":[{"constant":false,"id":5626,"mutability":"mutable","name":"ds","nameLocation":"7297:2:15","nodeType":"VariableDeclaration","scope":5684,"src":"7274:25:15","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage"},"typeName":{"id":5625,"nodeType":"UserDefinedTypeName","pathNode":{"id":5624,"name":"DiamondStorage","nameLocations":["7274:14:15"],"nodeType":"IdentifierPath","referencedDeclaration":5280,"src":"7274:14:15"},"referencedDeclaration":5280,"src":"7274:14:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage"}},"visibility":"internal"}],"id":5629,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":5627,"name":"getDiamondStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5293,"src":"7302:17:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$5280_storage_ptr_$","typeString":"function () pure returns (struct Diamond.DiamondStorage storage pointer)"}},"id":5628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7302:19:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7274:47:15"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5631,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5618,"src":"7340:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":5634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7358:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5633,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7350:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5632,"name":"address","nodeType":"ElementaryTypeName","src":"7350:7:15","typeDescriptions":{}}},"id":5635,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7350:10:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7340:20:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6131","id":5637,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7362:4:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_37d3424576bafb5fd5f9f8e99478f66780477fcd8d71cb2319b37a64a01640db","typeString":"literal_string \"a1\""},"value":"a1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_37d3424576bafb5fd5f9f8e99478f66780477fcd8d71cb2319b37a64a01640db","typeString":"literal_string \"a1\""}],"id":5630,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7332:7:15","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5638,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7332:35:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5639,"nodeType":"ExpressionStatement","src":"7332:35:15"},{"body":{"id":5682,"nodeType":"Block","src":"7456:299:15","statements":[{"assignments":[5652],"declarations":[{"constant":false,"id":5652,"mutability":"mutable","name":"selector","nameLocation":"7477:8:15","nodeType":"VariableDeclaration","scope":5682,"src":"7470:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":5651,"name":"bytes4","nodeType":"ElementaryTypeName","src":"7470:6:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":5656,"initialValue":{"baseExpression":{"id":5653,"name":"_selectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5621,"src":"7488:10:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"id":5655,"indexExpression":{"id":5654,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5641,"src":"7499:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7488:13:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"7470:31:15"},{"assignments":[5659],"declarations":[{"constant":false,"id":5659,"mutability":"mutable","name":"oldFacet","nameLocation":"7538:8:15","nodeType":"VariableDeclaration","scope":5682,"src":"7515:31:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_memory_ptr","typeString":"struct Diamond.SelectorToFacet"},"typeName":{"id":5658,"nodeType":"UserDefinedTypeName","pathNode":{"id":5657,"name":"SelectorToFacet","nameLocations":["7515:15:15"],"nodeType":"IdentifierPath","referencedDeclaration":5258,"src":"7515:15:15"},"referencedDeclaration":5258,"src":"7515:15:15","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_storage_ptr","typeString":"struct Diamond.SelectorToFacet"}},"visibility":"internal"}],"id":5664,"initialValue":{"baseExpression":{"expression":{"id":5660,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5626,"src":"7549:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5661,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7552:15:15","memberName":"selectorToFacet","nodeType":"MemberAccess","referencedDeclaration":5269,"src":"7549:18:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_SelectorToFacet_$5258_storage_$","typeString":"mapping(bytes4 => struct Diamond.SelectorToFacet storage ref)"}},"id":5663,"indexExpression":{"id":5662,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5652,"src":"7568:8:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7549:28:15","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_storage","typeString":"struct Diamond.SelectorToFacet storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7515:62:15"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5666,"name":"oldFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5659,"src":"7599:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_memory_ptr","typeString":"struct Diamond.SelectorToFacet memory"}},"id":5667,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7608:12:15","memberName":"facetAddress","nodeType":"MemberAccess","referencedDeclaration":5253,"src":"7599:21:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":5670,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7632:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5669,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7624:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5668,"name":"address","nodeType":"ElementaryTypeName","src":"7624:7:15","typeDescriptions":{}}},"id":5671,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7624:10:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7599:35:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6132","id":5673,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7636:4:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_a2060faa0fc5697bc282c626d908a989dc0d2b79270a5cdc58fbc0ab74c35faf","typeString":"literal_string \"a2\""},"value":"a2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a2060faa0fc5697bc282c626d908a989dc0d2b79270a5cdc58fbc0ab74c35faf","typeString":"literal_string \"a2\""}],"id":5665,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7591:7:15","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7591:50:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5675,"nodeType":"ExpressionStatement","src":"7591:50:15"},{"expression":{"arguments":[{"expression":{"id":5677,"name":"oldFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5659,"src":"7712:8:15","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_memory_ptr","typeString":"struct Diamond.SelectorToFacet memory"}},"id":5678,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7721:12:15","memberName":"facetAddress","nodeType":"MemberAccess","referencedDeclaration":5253,"src":"7712:21:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5679,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5652,"src":"7735:8:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":5676,"name":"_removeOneFunction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5884,"src":"7693:18:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes4_$returns$__$","typeString":"function (address,bytes4)"}},"id":5680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7693:51:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5681,"nodeType":"ExpressionStatement","src":"7693:51:15"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5644,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5641,"src":"7428:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":5645,"name":"_selectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5621,"src":"7432:10:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"id":5646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7443:6:15","memberName":"length","nodeType":"MemberAccess","src":"7432:17:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7428:21:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5683,"initializationExpression":{"assignments":[5641],"declarations":[{"constant":false,"id":5641,"mutability":"mutable","name":"i","nameLocation":"7421:1:15","nodeType":"VariableDeclaration","scope":5683,"src":"7413:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5640,"name":"uint256","nodeType":"ElementaryTypeName","src":"7413:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5643,"initialValue":{"hexValue":"30","id":5642,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7425:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7413:13:15"},"loopExpression":{"expression":{"id":5649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7451:3:15","subExpression":{"id":5648,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5641,"src":"7453:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5650,"nodeType":"ExpressionStatement","src":"7451:3:15"},"nodeType":"ForStatement","src":"7408:347:15"}]},"documentation":{"id":5616,"nodeType":"StructuredDocumentation","src":"7056:125:15","text":"@dev Remove association with function and facet\n NOTE: expect but NOT enforce that `_selectors` is NON-EMPTY array"},"id":5685,"implemented":true,"kind":"function","modifiers":[],"name":"_removeFunctions","nameLocation":"7195:16:15","nodeType":"FunctionDefinition","parameters":{"id":5622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5618,"mutability":"mutable","name":"_facet","nameLocation":"7220:6:15","nodeType":"VariableDeclaration","scope":5685,"src":"7212:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5617,"name":"address","nodeType":"ElementaryTypeName","src":"7212:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5621,"mutability":"mutable","name":"_selectors","nameLocation":"7244:10:15","nodeType":"VariableDeclaration","scope":5685,"src":"7228:26:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[]"},"typeName":{"baseType":{"id":5619,"name":"bytes4","nodeType":"ElementaryTypeName","src":"7228:6:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":5620,"nodeType":"ArrayTypeName","src":"7228:8:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"}},"visibility":"internal"}],"src":"7211:44:15"},"returnParameters":{"id":5623,"nodeType":"ParameterList","parameters":[],"src":"7264:0:15"},"scope":6011,"src":"7186:575:15","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":5736,"nodeType":"Block","src":"7991:402:15","statements":[{"assignments":[5693],"declarations":[{"constant":false,"id":5693,"mutability":"mutable","name":"ds","nameLocation":"8024:2:15","nodeType":"VariableDeclaration","scope":5736,"src":"8001:25:15","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage"},"typeName":{"id":5692,"nodeType":"UserDefinedTypeName","pathNode":{"id":5691,"name":"DiamondStorage","nameLocations":["8001:14:15"],"nodeType":"IdentifierPath","referencedDeclaration":5280,"src":"8001:14:15"},"referencedDeclaration":5280,"src":"8001:14:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage"}},"visibility":"internal"}],"id":5696,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":5694,"name":"getDiamondStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5293,"src":"8029:17:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$5280_storage_ptr_$","typeString":"function () pure returns (struct Diamond.DiamondStorage storage pointer)"}},"id":5695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8029:19:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"8001:47:15"},{"assignments":[5698],"declarations":[{"constant":false,"id":5698,"mutability":"mutable","name":"selectorsLength","nameLocation":"8066:15:15","nodeType":"VariableDeclaration","scope":5736,"src":"8059:22:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":5697,"name":"uint16","nodeType":"ElementaryTypeName","src":"8059:6:15","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":5708,"initialValue":{"arguments":[{"expression":{"expression":{"baseExpression":{"expression":{"id":5701,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5693,"src":"8091:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5702,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8094:16:15","memberName":"facetToSelectors","nodeType":"MemberAccess","referencedDeclaration":5274,"src":"8091:19:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetToSelectors_$5264_storage_$","typeString":"mapping(address => struct Diamond.FacetToSelectors storage ref)"}},"id":5704,"indexExpression":{"id":5703,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5688,"src":"8111:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8091:27:15","typeDescriptions":{"typeIdentifier":"t_struct$_FacetToSelectors_$5264_storage","typeString":"struct Diamond.FacetToSelectors storage ref"}},"id":5705,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8119:9:15","memberName":"selectors","nodeType":"MemberAccess","referencedDeclaration":5261,"src":"8091:37:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage","typeString":"bytes4[] storage ref"}},"id":5706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8129:6:15","memberName":"length","nodeType":"MemberAccess","src":"8091:44:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5700,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8084:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":5699,"name":"uint16","nodeType":"ElementaryTypeName","src":"8084:6:15","typeDescriptions":{}}},"id":5707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8084:52:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"8059:77:15"},{"condition":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":5711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5709,"name":"selectorsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5698,"src":"8236:15:15","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8255:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8236:20:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5735,"nodeType":"IfStatement","src":"8232:155:15","trueBody":{"id":5734,"nodeType":"Block","src":"8258:129:15","statements":[{"expression":{"id":5724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":5712,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5693,"src":"8272:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5715,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8275:16:15","memberName":"facetToSelectors","nodeType":"MemberAccess","referencedDeclaration":5274,"src":"8272:19:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetToSelectors_$5264_storage_$","typeString":"mapping(address => struct Diamond.FacetToSelectors storage ref)"}},"id":5716,"indexExpression":{"id":5714,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5688,"src":"8292:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8272:27:15","typeDescriptions":{"typeIdentifier":"t_struct$_FacetToSelectors_$5264_storage","typeString":"struct Diamond.FacetToSelectors storage ref"}},"id":5717,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8300:13:15","memberName":"facetPosition","nodeType":"MemberAccess","referencedDeclaration":5263,"src":"8272:41:15","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":5720,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5693,"src":"8323:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5721,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8326:6:15","memberName":"facets","nodeType":"MemberAccess","referencedDeclaration":5277,"src":"8323:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":5722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8333:6:15","memberName":"length","nodeType":"MemberAccess","src":"8323:16:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5719,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8316:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":5718,"name":"uint16","nodeType":"ElementaryTypeName","src":"8316:6:15","typeDescriptions":{}}},"id":5723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8316:24:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"8272:68:15","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":5725,"nodeType":"ExpressionStatement","src":"8272:68:15"},{"expression":{"arguments":[{"id":5731,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5688,"src":"8369:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":5726,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5693,"src":"8354:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5729,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8357:6:15","memberName":"facets","nodeType":"MemberAccess","referencedDeclaration":5277,"src":"8354:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":5730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8364:4:15","memberName":"push","nodeType":"MemberAccess","src":"8354:14:15","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer,address)"}},"id":5732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8354:22:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5733,"nodeType":"ExpressionStatement","src":"8354:22:15"}]}}]},"documentation":{"id":5686,"nodeType":"StructuredDocumentation","src":"7767:170:15","text":"@dev Add address to the list of known facets if it is not on the list yet\n NOTE: should be called ONLY before adding a new selector associated with the address"},"id":5737,"implemented":true,"kind":"function","modifiers":[],"name":"_saveFacetIfNew","nameLocation":"7951:15:15","nodeType":"FunctionDefinition","parameters":{"id":5689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5688,"mutability":"mutable","name":"_facet","nameLocation":"7975:6:15","nodeType":"VariableDeclaration","scope":5737,"src":"7967:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5687,"name":"address","nodeType":"ElementaryTypeName","src":"7967:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7966:16:15"},"returnParameters":{"id":5690,"nodeType":"ParameterList","parameters":[],"src":"7991:0:15"},"scope":6011,"src":"7942:451:15","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":5787,"nodeType":"Block","src":"8800:414:15","statements":[{"assignments":[5749],"declarations":[{"constant":false,"id":5749,"mutability":"mutable","name":"ds","nameLocation":"8833:2:15","nodeType":"VariableDeclaration","scope":5787,"src":"8810:25:15","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage"},"typeName":{"id":5748,"nodeType":"UserDefinedTypeName","pathNode":{"id":5747,"name":"DiamondStorage","nameLocations":["8810:14:15"],"nodeType":"IdentifierPath","referencedDeclaration":5280,"src":"8810:14:15"},"referencedDeclaration":5280,"src":"8810:14:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage"}},"visibility":"internal"}],"id":5752,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":5750,"name":"getDiamondStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5293,"src":"8838:17:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$5280_storage_ptr_$","typeString":"function () pure returns (struct Diamond.DiamondStorage storage pointer)"}},"id":5751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8838:19:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"8810:47:15"},{"assignments":[5754],"declarations":[{"constant":false,"id":5754,"mutability":"mutable","name":"selectorPosition","nameLocation":"8875:16:15","nodeType":"VariableDeclaration","scope":5787,"src":"8868:23:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":5753,"name":"uint16","nodeType":"ElementaryTypeName","src":"8868:6:15","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":5764,"initialValue":{"arguments":[{"expression":{"expression":{"baseExpression":{"expression":{"id":5757,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5749,"src":"8901:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5758,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8904:16:15","memberName":"facetToSelectors","nodeType":"MemberAccess","referencedDeclaration":5274,"src":"8901:19:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetToSelectors_$5264_storage_$","typeString":"mapping(address => struct Diamond.FacetToSelectors storage ref)"}},"id":5760,"indexExpression":{"id":5759,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5740,"src":"8921:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8901:27:15","typeDescriptions":{"typeIdentifier":"t_struct$_FacetToSelectors_$5264_storage","typeString":"struct Diamond.FacetToSelectors storage ref"}},"id":5761,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8929:9:15","memberName":"selectors","nodeType":"MemberAccess","referencedDeclaration":5261,"src":"8901:37:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage","typeString":"bytes4[] storage ref"}},"id":5762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8939:6:15","memberName":"length","nodeType":"MemberAccess","src":"8901:44:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5756,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8894:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":5755,"name":"uint16","nodeType":"ElementaryTypeName","src":"8894:6:15","typeDescriptions":{}}},"id":5763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8894:52:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"8868:78:15"},{"expression":{"id":5775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":5765,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5749,"src":"8956:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5768,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8959:15:15","memberName":"selectorToFacet","nodeType":"MemberAccess","referencedDeclaration":5269,"src":"8956:18:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_SelectorToFacet_$5258_storage_$","typeString":"mapping(bytes4 => struct Diamond.SelectorToFacet storage ref)"}},"id":5769,"indexExpression":{"id":5767,"name":"_selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"8975:9:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8956:29:15","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_storage","typeString":"struct Diamond.SelectorToFacet storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5771,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5740,"src":"9032:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5772,"name":"selectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5754,"src":"9070:16:15","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":5773,"name":"_isSelectorFreezable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5744,"src":"9113:20:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5770,"name":"SelectorToFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5258,"src":"8988:15:15","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SelectorToFacet_$5258_storage_ptr_$","typeString":"type(struct Diamond.SelectorToFacet storage pointer)"}},"id":5774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["9018:12:15","9052:16:15","9100:11:15"],"names":["facetAddress","selectorPosition","isFreezable"],"nodeType":"FunctionCall","src":"8988:156:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_memory_ptr","typeString":"struct Diamond.SelectorToFacet memory"}},"src":"8956:188:15","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_storage","typeString":"struct Diamond.SelectorToFacet storage ref"}},"id":5776,"nodeType":"ExpressionStatement","src":"8956:188:15"},{"expression":{"arguments":[{"id":5784,"name":"_selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"9197:9:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"expression":{"baseExpression":{"expression":{"id":5777,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5749,"src":"9154:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5780,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9157:16:15","memberName":"facetToSelectors","nodeType":"MemberAccess","referencedDeclaration":5274,"src":"9154:19:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetToSelectors_$5264_storage_$","typeString":"mapping(address => struct Diamond.FacetToSelectors storage ref)"}},"id":5781,"indexExpression":{"id":5779,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5740,"src":"9174:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9154:27:15","typeDescriptions":{"typeIdentifier":"t_struct$_FacetToSelectors_$5264_storage","typeString":"struct Diamond.FacetToSelectors storage ref"}},"id":5782,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9182:9:15","memberName":"selectors","nodeType":"MemberAccess","referencedDeclaration":5261,"src":"9154:37:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage","typeString":"bytes4[] storage ref"}},"id":5783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9192:4:15","memberName":"push","nodeType":"MemberAccess","src":"9154:42:15","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_bytes4_$dyn_storage_ptr_$_t_bytes4_$returns$__$bound_to$_t_array$_t_bytes4_$dyn_storage_ptr_$","typeString":"function (bytes4[] storage pointer,bytes4)"}},"id":5785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9154:53:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5786,"nodeType":"ExpressionStatement","src":"9154:53:15"}]},"documentation":{"id":5738,"nodeType":"StructuredDocumentation","src":"8399:272:15","text":"@dev Add one function to the already known facet\n NOTE: It is expected but NOT enforced that:\n - `_facet` is NON-ZERO address\n - `_facet` is already stored address in `DiamondStorage.facets`\n - `_selector` is NOT associated by another facet"},"id":5788,"implemented":true,"kind":"function","modifiers":[],"name":"_addOneFunction","nameLocation":"8685:15:15","nodeType":"FunctionDefinition","parameters":{"id":5745,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5740,"mutability":"mutable","name":"_facet","nameLocation":"8718:6:15","nodeType":"VariableDeclaration","scope":5788,"src":"8710:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5739,"name":"address","nodeType":"ElementaryTypeName","src":"8710:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5742,"mutability":"mutable","name":"_selector","nameLocation":"8741:9:15","nodeType":"VariableDeclaration","scope":5788,"src":"8734:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":5741,"name":"bytes4","nodeType":"ElementaryTypeName","src":"8734:6:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"},{"constant":false,"id":5744,"mutability":"mutable","name":"_isSelectorFreezable","nameLocation":"8765:20:15","nodeType":"VariableDeclaration","scope":5788,"src":"8760:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5743,"name":"bool","nodeType":"ElementaryTypeName","src":"8760:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8700:91:15"},"returnParameters":{"id":5746,"nodeType":"ParameterList","parameters":[],"src":"8800:0:15"},"scope":6011,"src":"8676:538:15","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":5883,"nodeType":"Block","src":"9425:1177:15","statements":[{"assignments":[5798],"declarations":[{"constant":false,"id":5798,"mutability":"mutable","name":"ds","nameLocation":"9458:2:15","nodeType":"VariableDeclaration","scope":5883,"src":"9435:25:15","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage"},"typeName":{"id":5797,"nodeType":"UserDefinedTypeName","pathNode":{"id":5796,"name":"DiamondStorage","nameLocations":["9435:14:15"],"nodeType":"IdentifierPath","referencedDeclaration":5280,"src":"9435:14:15"},"referencedDeclaration":5280,"src":"9435:14:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage"}},"visibility":"internal"}],"id":5801,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":5799,"name":"getDiamondStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5293,"src":"9463:17:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$5280_storage_ptr_$","typeString":"function () pure returns (struct Diamond.DiamondStorage storage pointer)"}},"id":5800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9463:19:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"9435:47:15"},{"assignments":[5803],"declarations":[{"constant":false,"id":5803,"mutability":"mutable","name":"selectorPosition","nameLocation":"9596:16:15","nodeType":"VariableDeclaration","scope":5883,"src":"9588:24:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5802,"name":"uint256","nodeType":"ElementaryTypeName","src":"9588:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5809,"initialValue":{"expression":{"baseExpression":{"expression":{"id":5804,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5798,"src":"9615:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5805,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9618:15:15","memberName":"selectorToFacet","nodeType":"MemberAccess","referencedDeclaration":5269,"src":"9615:18:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_SelectorToFacet_$5258_storage_$","typeString":"mapping(bytes4 => struct Diamond.SelectorToFacet storage ref)"}},"id":5807,"indexExpression":{"id":5806,"name":"_selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5793,"src":"9634:9:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9615:29:15","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_storage","typeString":"struct Diamond.SelectorToFacet storage ref"}},"id":5808,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9645:16:15","memberName":"selectorPosition","nodeType":"MemberAccess","referencedDeclaration":5255,"src":"9615:46:15","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"9588:73:15"},{"assignments":[5811],"declarations":[{"constant":false,"id":5811,"mutability":"mutable","name":"lastSelectorPosition","nameLocation":"9679:20:15","nodeType":"VariableDeclaration","scope":5883,"src":"9671:28:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5810,"name":"uint256","nodeType":"ElementaryTypeName","src":"9671:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5820,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"baseExpression":{"expression":{"id":5812,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5798,"src":"9702:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5813,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9705:16:15","memberName":"facetToSelectors","nodeType":"MemberAccess","referencedDeclaration":5274,"src":"9702:19:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetToSelectors_$5264_storage_$","typeString":"mapping(address => struct Diamond.FacetToSelectors storage ref)"}},"id":5815,"indexExpression":{"id":5814,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"9722:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9702:27:15","typeDescriptions":{"typeIdentifier":"t_struct$_FacetToSelectors_$5264_storage","typeString":"struct Diamond.FacetToSelectors storage ref"}},"id":5816,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9730:9:15","memberName":"selectors","nodeType":"MemberAccess","referencedDeclaration":5261,"src":"9702:37:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage","typeString":"bytes4[] storage ref"}},"id":5817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9740:6:15","memberName":"length","nodeType":"MemberAccess","src":"9702:44:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":5818,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9749:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9702:48:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9671:79:15"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5821,"name":"selectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5803,"src":"9875:16:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":5822,"name":"lastSelectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5811,"src":"9895:20:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9875:40:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5858,"nodeType":"IfStatement","src":"9871:327:15","trueBody":{"id":5857,"nodeType":"Block","src":"9917:281:15","statements":[{"assignments":[5825],"declarations":[{"constant":false,"id":5825,"mutability":"mutable","name":"lastSelector","nameLocation":"9938:12:15","nodeType":"VariableDeclaration","scope":5857,"src":"9931:19:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":5824,"name":"bytes4","nodeType":"ElementaryTypeName","src":"9931:6:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":5833,"initialValue":{"baseExpression":{"expression":{"baseExpression":{"expression":{"id":5826,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5798,"src":"9953:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5827,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9956:16:15","memberName":"facetToSelectors","nodeType":"MemberAccess","referencedDeclaration":5274,"src":"9953:19:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetToSelectors_$5264_storage_$","typeString":"mapping(address => struct Diamond.FacetToSelectors storage ref)"}},"id":5829,"indexExpression":{"id":5828,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"9973:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9953:27:15","typeDescriptions":{"typeIdentifier":"t_struct$_FacetToSelectors_$5264_storage","typeString":"struct Diamond.FacetToSelectors storage ref"}},"id":5830,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9981:9:15","memberName":"selectors","nodeType":"MemberAccess","referencedDeclaration":5261,"src":"9953:37:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage","typeString":"bytes4[] storage ref"}},"id":5832,"indexExpression":{"id":5831,"name":"lastSelectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5811,"src":"9991:20:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9953:59:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"9931:81:15"},{"expression":{"id":5843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"baseExpression":{"expression":{"id":5834,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5798,"src":"10027:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5837,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10030:16:15","memberName":"facetToSelectors","nodeType":"MemberAccess","referencedDeclaration":5274,"src":"10027:19:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetToSelectors_$5264_storage_$","typeString":"mapping(address => struct Diamond.FacetToSelectors storage ref)"}},"id":5838,"indexExpression":{"id":5836,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"10047:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10027:27:15","typeDescriptions":{"typeIdentifier":"t_struct$_FacetToSelectors_$5264_storage","typeString":"struct Diamond.FacetToSelectors storage ref"}},"id":5839,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10055:9:15","memberName":"selectors","nodeType":"MemberAccess","referencedDeclaration":5261,"src":"10027:37:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage","typeString":"bytes4[] storage ref"}},"id":5841,"indexExpression":{"id":5840,"name":"selectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5803,"src":"10065:16:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10027:55:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5842,"name":"lastSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5825,"src":"10085:12:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10027:70:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":5844,"nodeType":"ExpressionStatement","src":"10027:70:15"},{"expression":{"id":5855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":5845,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5798,"src":"10111:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5848,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10114:15:15","memberName":"selectorToFacet","nodeType":"MemberAccess","referencedDeclaration":5269,"src":"10111:18:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_SelectorToFacet_$5258_storage_$","typeString":"mapping(bytes4 => struct Diamond.SelectorToFacet storage ref)"}},"id":5849,"indexExpression":{"id":5847,"name":"lastSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5825,"src":"10130:12:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10111:32:15","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_storage","typeString":"struct Diamond.SelectorToFacet storage ref"}},"id":5850,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10144:16:15","memberName":"selectorPosition","nodeType":"MemberAccess","referencedDeclaration":5255,"src":"10111:49:15","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5853,"name":"selectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5803,"src":"10170:16:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5852,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10163:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":5851,"name":"uint16","nodeType":"ElementaryTypeName","src":"10163:6:15","typeDescriptions":{}}},"id":5854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10163:24:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"10111:76:15","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":5856,"nodeType":"ExpressionStatement","src":"10111:76:15"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"baseExpression":{"expression":{"id":5859,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5798,"src":"10264:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5862,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10267:16:15","memberName":"facetToSelectors","nodeType":"MemberAccess","referencedDeclaration":5274,"src":"10264:19:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetToSelectors_$5264_storage_$","typeString":"mapping(address => struct Diamond.FacetToSelectors storage ref)"}},"id":5863,"indexExpression":{"id":5861,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"10284:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10264:27:15","typeDescriptions":{"typeIdentifier":"t_struct$_FacetToSelectors_$5264_storage","typeString":"struct Diamond.FacetToSelectors storage ref"}},"id":5864,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10292:9:15","memberName":"selectors","nodeType":"MemberAccess","referencedDeclaration":5261,"src":"10264:37:15","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage","typeString":"bytes4[] storage ref"}},"id":5865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10302:3:15","memberName":"pop","nodeType":"MemberAccess","src":"10264:41:15","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_bytes4_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_bytes4_$dyn_storage_ptr_$","typeString":"function (bytes4[] storage pointer)"}},"id":5866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10264:43:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5867,"nodeType":"ExpressionStatement","src":"10264:43:15"},{"expression":{"id":5872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"10374:36:15","subExpression":{"baseExpression":{"expression":{"id":5868,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5798,"src":"10381:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5869,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10384:15:15","memberName":"selectorToFacet","nodeType":"MemberAccess","referencedDeclaration":5269,"src":"10381:18:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_SelectorToFacet_$5258_storage_$","typeString":"mapping(bytes4 => struct Diamond.SelectorToFacet storage ref)"}},"id":5871,"indexExpression":{"id":5870,"name":"_selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5793,"src":"10400:9:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10381:29:15","typeDescriptions":{"typeIdentifier":"t_struct$_SelectorToFacet_$5258_storage","typeString":"struct Diamond.SelectorToFacet storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5873,"nodeType":"ExpressionStatement","src":"10374:36:15"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5874,"name":"lastSelectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5811,"src":"10524:20:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5875,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10548:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10524:25:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5882,"nodeType":"IfStatement","src":"10520:76:15","trueBody":{"id":5881,"nodeType":"Block","src":"10551:45:15","statements":[{"expression":{"arguments":[{"id":5878,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"10578:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5877,"name":"_removeFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5952,"src":"10565:12:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":5879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10565:20:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5880,"nodeType":"ExpressionStatement","src":"10565:20:15"}]}}]},"documentation":{"id":5789,"nodeType":"StructuredDocumentation","src":"9220:130:15","text":"@dev Remove one associated function with facet\n NOTE: It is expected but NOT enforced that `_facet` is NON-ZERO address"},"id":5884,"implemented":true,"kind":"function","modifiers":[],"name":"_removeOneFunction","nameLocation":"9364:18:15","nodeType":"FunctionDefinition","parameters":{"id":5794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5791,"mutability":"mutable","name":"_facet","nameLocation":"9391:6:15","nodeType":"VariableDeclaration","scope":5884,"src":"9383:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5790,"name":"address","nodeType":"ElementaryTypeName","src":"9383:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5793,"mutability":"mutable","name":"_selector","nameLocation":"9406:9:15","nodeType":"VariableDeclaration","scope":5884,"src":"9399:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":5792,"name":"bytes4","nodeType":"ElementaryTypeName","src":"9399:6:15","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"9382:34:15"},"returnParameters":{"id":5795,"nodeType":"ParameterList","parameters":[],"src":"9425:0:15"},"scope":6011,"src":"9355:1247:15","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":5951,"nodeType":"Block","src":"10808:724:15","statements":[{"assignments":[5892],"declarations":[{"constant":false,"id":5892,"mutability":"mutable","name":"ds","nameLocation":"10841:2:15","nodeType":"VariableDeclaration","scope":5951,"src":"10818:25:15","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage"},"typeName":{"id":5891,"nodeType":"UserDefinedTypeName","pathNode":{"id":5890,"name":"DiamondStorage","nameLocations":["10818:14:15"],"nodeType":"IdentifierPath","referencedDeclaration":5280,"src":"10818:14:15"},"referencedDeclaration":5280,"src":"10818:14:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage"}},"visibility":"internal"}],"id":5895,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":5893,"name":"getDiamondStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5293,"src":"10846:17:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$5280_storage_ptr_$","typeString":"function () pure returns (struct Diamond.DiamondStorage storage pointer)"}},"id":5894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10846:19:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"10818:47:15"},{"assignments":[5897],"declarations":[{"constant":false,"id":5897,"mutability":"mutable","name":"facetPosition","nameLocation":"10971:13:15","nodeType":"VariableDeclaration","scope":5951,"src":"10963:21:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5896,"name":"uint256","nodeType":"ElementaryTypeName","src":"10963:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5903,"initialValue":{"expression":{"baseExpression":{"expression":{"id":5898,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5892,"src":"10987:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5899,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10990:16:15","memberName":"facetToSelectors","nodeType":"MemberAccess","referencedDeclaration":5274,"src":"10987:19:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetToSelectors_$5264_storage_$","typeString":"mapping(address => struct Diamond.FacetToSelectors storage ref)"}},"id":5901,"indexExpression":{"id":5900,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5887,"src":"11007:6:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10987:27:15","typeDescriptions":{"typeIdentifier":"t_struct$_FacetToSelectors_$5264_storage","typeString":"struct Diamond.FacetToSelectors storage ref"}},"id":5902,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11015:13:15","memberName":"facetPosition","nodeType":"MemberAccess","referencedDeclaration":5263,"src":"10987:41:15","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"10963:65:15"},{"assignments":[5905],"declarations":[{"constant":false,"id":5905,"mutability":"mutable","name":"lastFacetPosition","nameLocation":"11046:17:15","nodeType":"VariableDeclaration","scope":5951,"src":"11038:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5904,"name":"uint256","nodeType":"ElementaryTypeName","src":"11038:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5911,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":5906,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5892,"src":"11066:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5907,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11069:6:15","memberName":"facets","nodeType":"MemberAccess","referencedDeclaration":5277,"src":"11066:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":5908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11076:6:15","memberName":"length","nodeType":"MemberAccess","src":"11066:16:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":5909,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11085:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11066:20:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11038:48:15"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5912,"name":"facetPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5897,"src":"11205:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":5913,"name":"lastFacetPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5905,"src":"11222:17:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11205:34:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5943,"nodeType":"IfStatement","src":"11201:246:15","trueBody":{"id":5942,"nodeType":"Block","src":"11241:206:15","statements":[{"assignments":[5916],"declarations":[{"constant":false,"id":5916,"mutability":"mutable","name":"lastFacet","nameLocation":"11263:9:15","nodeType":"VariableDeclaration","scope":5942,"src":"11255:17:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5915,"name":"address","nodeType":"ElementaryTypeName","src":"11255:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":5921,"initialValue":{"baseExpression":{"expression":{"id":5917,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5892,"src":"11275:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5918,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11278:6:15","memberName":"facets","nodeType":"MemberAccess","referencedDeclaration":5277,"src":"11275:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":5920,"indexExpression":{"id":5919,"name":"lastFacetPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5905,"src":"11285:17:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11275:28:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"11255:48:15"},{"expression":{"id":5928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":5922,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5892,"src":"11318:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5925,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11321:6:15","memberName":"facets","nodeType":"MemberAccess","referencedDeclaration":5277,"src":"11318:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":5926,"indexExpression":{"id":5924,"name":"facetPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5897,"src":"11328:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11318:24:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5927,"name":"lastFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5916,"src":"11345:9:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11318:36:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5929,"nodeType":"ExpressionStatement","src":"11318:36:15"},{"expression":{"id":5940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":5930,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5892,"src":"11368:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5933,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11371:16:15","memberName":"facetToSelectors","nodeType":"MemberAccess","referencedDeclaration":5274,"src":"11368:19:15","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetToSelectors_$5264_storage_$","typeString":"mapping(address => struct Diamond.FacetToSelectors storage ref)"}},"id":5934,"indexExpression":{"id":5932,"name":"lastFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5916,"src":"11388:9:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11368:30:15","typeDescriptions":{"typeIdentifier":"t_struct$_FacetToSelectors_$5264_storage","typeString":"struct Diamond.FacetToSelectors storage ref"}},"id":5935,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11399:13:15","memberName":"facetPosition","nodeType":"MemberAccess","referencedDeclaration":5263,"src":"11368:44:15","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5938,"name":"facetPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5897,"src":"11422:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5937,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11415:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":5936,"name":"uint16","nodeType":"ElementaryTypeName","src":"11415:6:15","typeDescriptions":{}}},"id":5939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11415:21:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"11368:68:15","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":5941,"nodeType":"ExpressionStatement","src":"11368:68:15"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":5944,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5892,"src":"11510:2:15","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$5280_storage_ptr","typeString":"struct Diamond.DiamondStorage storage pointer"}},"id":5947,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11513:6:15","memberName":"facets","nodeType":"MemberAccess","referencedDeclaration":5277,"src":"11510:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":5948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11520:3:15","memberName":"pop","nodeType":"MemberAccess","src":"11510:13:15","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer)"}},"id":5949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11510:15:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5950,"nodeType":"ExpressionStatement","src":"11510:15:15"}]},"documentation":{"id":5885,"nodeType":"StructuredDocumentation","src":"10608:149:15","text":"@dev remove facet from the list of known facets\n NOTE: It is expected but NOT enforced that there are no selectors associated wih `_facet`"},"id":5952,"implemented":true,"kind":"function","modifiers":[],"name":"_removeFacet","nameLocation":"10771:12:15","nodeType":"FunctionDefinition","parameters":{"id":5888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5887,"mutability":"mutable","name":"_facet","nameLocation":"10792:6:15","nodeType":"VariableDeclaration","scope":5952,"src":"10784:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5886,"name":"address","nodeType":"ElementaryTypeName","src":"10784:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10783:16:15"},"returnParameters":{"id":5889,"nodeType":"ParameterList","parameters":[],"src":"10808:0:15"},"scope":6011,"src":"10762:770:15","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6009,"nodeType":"Block","src":"11808:668:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5960,"name":"_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5955,"src":"11822:5:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":5963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11839:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5962,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11831:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5961,"name":"address","nodeType":"ElementaryTypeName","src":"11831:7:15","typeDescriptions":{}}},"id":5964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11831:10:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11822:19:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6007,"nodeType":"Block","src":"11948:522:15","statements":[{"assignments":[5976,5978],"declarations":[{"constant":false,"id":5976,"mutability":"mutable","name":"success","nameLocation":"12069:7:15","nodeType":"VariableDeclaration","scope":6007,"src":"12064:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5975,"name":"bool","nodeType":"ElementaryTypeName","src":"12064:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5978,"mutability":"mutable","name":"data","nameLocation":"12091:4:15","nodeType":"VariableDeclaration","scope":6007,"src":"12078:17:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5977,"name":"bytes","nodeType":"ElementaryTypeName","src":"12078:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":5983,"initialValue":{"arguments":[{"id":5981,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5957,"src":"12118:9:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":5979,"name":"_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5955,"src":"12099:5:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12105:12:15","memberName":"delegatecall","nodeType":"MemberAccess","src":"12099:18:15","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":5982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12099:29:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"12063:65:15"},{"expression":{"arguments":[{"id":5985,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5976,"src":"12150:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"49","id":5986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12159:3:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_8d61ecf6e15472e15b1a0f63cd77f62aa57e6edcd3871d7a841f1056fb42b216","typeString":"literal_string \"I\""},"value":"I"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8d61ecf6e15472e15b1a0f63cd77f62aa57e6edcd3871d7a841f1056fb42b216","typeString":"literal_string \"I\""}],"id":5984,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12142:7:15","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12142:21:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5988,"nodeType":"ExpressionStatement","src":"12142:21:15"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5990,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5978,"src":"12367:4:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":5991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12372:6:15","memberName":"length","nodeType":"MemberAccess","src":"12367:11:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":5992,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12382:2:15","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"12367:17:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":6002,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5996,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5978,"src":"12399:4:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":5998,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12406:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":5997,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12406:7:15","typeDescriptions":{}}}],"id":5999,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"12405:9:15","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"}],"expression":{"id":5994,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"12388:3:15","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5995,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12392:6:15","memberName":"decode","nodeType":"MemberAccess","src":"12388:10:15","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":6000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12388:27:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":6001,"name":"DIAMOND_INIT_SUCCESS_RETURN_VALUE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5245,"src":"12419:33:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12388:64:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12367:85:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6c70","id":6004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12454:4:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_a79ba951aed53127f485cdd66334e703faf1cf0cab0b71a7e0b50b1d9f9c1dfb","typeString":"literal_string \"lp\""},"value":"lp"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a79ba951aed53127f485cdd66334e703faf1cf0cab0b71a7e0b50b1d9f9c1dfb","typeString":"literal_string \"lp\""}],"id":5989,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12359:7:15","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6005,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12359:100:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6006,"nodeType":"ExpressionStatement","src":"12359:100:15"}]},"id":6008,"nodeType":"IfStatement","src":"11818:652:15","trueBody":{"id":5974,"nodeType":"Block","src":"11843:99:15","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5967,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5957,"src":"11865:9:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":5968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11875:6:15","memberName":"length","nodeType":"MemberAccess","src":"11865:16:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5969,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11885:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11865:21:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"48","id":5971,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11888:3:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_321c2cb0b0673952956a3bfa56cf1ce4df0cd3371ad51a2c5524561250b01836","typeString":"literal_string \"H\""},"value":"H"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_321c2cb0b0673952956a3bfa56cf1ce4df0cd3371ad51a2c5524561250b01836","typeString":"literal_string \"H\""}],"id":5966,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11857:7:15","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":5972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11857:35:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5973,"nodeType":"ExpressionStatement","src":"11857:35:15"}]}}]},"documentation":{"id":5953,"nodeType":"StructuredDocumentation","src":"11538:187:15","text":"@dev Delegates call to the initialization address with provided calldata\n @dev Used as a final step of diamond cut to execute the logic of the initialization for changed facets"},"id":6010,"implemented":true,"kind":"function","modifiers":[],"name":"_initializeDiamondCut","nameLocation":"11739:21:15","nodeType":"FunctionDefinition","parameters":{"id":5958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5955,"mutability":"mutable","name":"_init","nameLocation":"11769:5:15","nodeType":"VariableDeclaration","scope":6010,"src":"11761:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5954,"name":"address","nodeType":"ElementaryTypeName","src":"11761:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5957,"mutability":"mutable","name":"_calldata","nameLocation":"11789:9:15","nodeType":"VariableDeclaration","scope":6010,"src":"11776:22:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5956,"name":"bytes","nodeType":"ElementaryTypeName","src":"11776:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11760:39:15"},"returnParameters":{"id":5959,"nodeType":"ParameterList","parameters":[],"src":"11808:0:15"},"scope":6011,"src":"11730:746:15","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":6012,"src":"154:12324:15","usedErrors":[]}],"src":"33:12446:15"},"id":15},"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PairingsBn254.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PairingsBn254.sol","exportedSymbols":{"PairingsBn254":[7049]},"id":7050,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":6013,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"47:23:16"},{"abstract":false,"baseContracts":[],"canonicalName":"PairingsBn254","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":7049,"linearizedBaseContracts":[7049],"name":"PairingsBn254","nameLocation":"80:13:16","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":6016,"mutability":"constant","name":"q_mod","nameLocation":"117:5:16","nodeType":"VariableDeclaration","scope":7049,"src":"100:102:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6014,"name":"uint256","nodeType":"ElementaryTypeName","src":"100:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3231383838323432383731383339323735323232323436343035373435323537323735303838363936333131313537323937383233363632363839303337383934363435323236323038353833","id":6015,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"125:77:16","typeDescriptions":{"typeIdentifier":"t_rational_21888242871839275222246405745257275088696311157297823662689037894645226208583_by_1","typeString":"int_const 2188...(69 digits omitted)...8583"},"value":"21888242871839275222246405745257275088696311157297823662689037894645226208583"},"visibility":"internal"},{"constant":true,"id":6019,"mutability":"constant","name":"r_mod","nameLocation":"225:5:16","nodeType":"VariableDeclaration","scope":7049,"src":"208:102:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6017,"name":"uint256","nodeType":"ElementaryTypeName","src":"208:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3231383838323432383731383339323735323232323436343035373435323537323735303838353438333634343030343136303334333433363938323034313836353735383038343935363137","id":6018,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"233:77:16","typeDescriptions":{"typeIdentifier":"t_rational_21888242871839275222246405745257275088548364400416034343698204186575808495617_by_1","typeString":"int_const 2188...(69 digits omitted)...5617"},"value":"21888242871839275222246405745257275088548364400416034343698204186575808495617"},"visibility":"internal"},{"constant":true,"id":6022,"mutability":"constant","name":"bn254_b_coeff","nameLocation":"333:13:16","nodeType":"VariableDeclaration","scope":7049,"src":"316:34:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6020,"name":"uint256","nodeType":"ElementaryTypeName","src":"316:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"33","id":6021,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"349:1:16","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"visibility":"internal"},{"canonicalName":"PairingsBn254.G1Point","id":6027,"members":[{"constant":false,"id":6024,"mutability":"mutable","name":"X","nameLocation":"390:1:16","nodeType":"VariableDeclaration","scope":6027,"src":"382:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6023,"name":"uint256","nodeType":"ElementaryTypeName","src":"382:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6026,"mutability":"mutable","name":"Y","nameLocation":"409:1:16","nodeType":"VariableDeclaration","scope":6027,"src":"401:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6025,"name":"uint256","nodeType":"ElementaryTypeName","src":"401:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"G1Point","nameLocation":"364:7:16","nodeType":"StructDefinition","scope":7049,"src":"357:60:16","visibility":"public"},{"canonicalName":"PairingsBn254.Fr","id":6030,"members":[{"constant":false,"id":6029,"mutability":"mutable","name":"value","nameLocation":"451:5:16","nodeType":"VariableDeclaration","scope":6030,"src":"443:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6028,"name":"uint256","nodeType":"ElementaryTypeName","src":"443:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Fr","nameLocation":"430:2:16","nodeType":"StructDefinition","scope":7049,"src":"423:40:16","visibility":"public"},{"body":{"id":6048,"nodeType":"Block","src":"531:68:16","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6039,"name":"fr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6032,"src":"549:2:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6040,"name":"r_mod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6019,"src":"554:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"549:10:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6038,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"541:7:16","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":6042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"541:19:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6043,"nodeType":"ExpressionStatement","src":"541:19:16"},{"expression":{"arguments":[{"id":6045,"name":"fr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6032,"src":"588:2:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6044,"name":"Fr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6030,"src":"577:2:16","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Fr_$6030_storage_ptr_$","typeString":"type(struct PairingsBn254.Fr storage pointer)"}},"id":6046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["581:5:16"],"names":["value"],"nodeType":"FunctionCall","src":"577:15:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"functionReturnParameters":6037,"id":6047,"nodeType":"Return","src":"570:22:16"}]},"id":6049,"implemented":true,"kind":"function","modifiers":[],"name":"new_fr","nameLocation":"478:6:16","nodeType":"FunctionDefinition","parameters":{"id":6033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6032,"mutability":"mutable","name":"fr","nameLocation":"493:2:16","nodeType":"VariableDeclaration","scope":6049,"src":"485:10:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6031,"name":"uint256","nodeType":"ElementaryTypeName","src":"485:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"484:12:16"},"returnParameters":{"id":6037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6036,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6049,"src":"520:9:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":6035,"nodeType":"UserDefinedTypeName","pathNode":{"id":6034,"name":"Fr","nameLocations":["520:2:16"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"520:2:16"},"referencedDeclaration":6030,"src":"520:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"519:11:16"},"scope":7049,"src":"469:130:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6065,"nodeType":"Block","src":"671:37:16","statements":[{"expression":{"id":6063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6058,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6056,"src":"681:1:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":6060,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"683:5:16","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"681:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6061,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6052,"src":"691:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":6062,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"696:5:16","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"691:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"681:20:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6064,"nodeType":"ExpressionStatement","src":"681:20:16"}]},"id":6066,"implemented":true,"kind":"function","modifiers":[],"name":"copy","nameLocation":"614:4:16","nodeType":"FunctionDefinition","parameters":{"id":6053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6052,"mutability":"mutable","name":"self","nameLocation":"629:4:16","nodeType":"VariableDeclaration","scope":6066,"src":"619:14:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":6051,"nodeType":"UserDefinedTypeName","pathNode":{"id":6050,"name":"Fr","nameLocations":["619:2:16"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"619:2:16"},"referencedDeclaration":6030,"src":"619:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"618:16:16"},"returnParameters":{"id":6057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6056,"mutability":"mutable","name":"n","nameLocation":"668:1:16","nodeType":"VariableDeclaration","scope":6066,"src":"658:11:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":6055,"nodeType":"UserDefinedTypeName","pathNode":{"id":6054,"name":"Fr","nameLocations":["658:2:16"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"658:2:16"},"referencedDeclaration":6030,"src":"658:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"657:13:16"},"scope":7049,"src":"605:103:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6082,"nodeType":"Block","src":"777:41:16","statements":[{"expression":{"id":6080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6075,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6069,"src":"787:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":6077,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"792:5:16","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"787:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6078,"name":"other","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6072,"src":"800:5:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":6079,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"806:5:16","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"800:11:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"787:24:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6081,"nodeType":"ExpressionStatement","src":"787:24:16"}]},"id":6083,"implemented":true,"kind":"function","modifiers":[],"name":"assign","nameLocation":"723:6:16","nodeType":"FunctionDefinition","parameters":{"id":6073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6069,"mutability":"mutable","name":"self","nameLocation":"740:4:16","nodeType":"VariableDeclaration","scope":6083,"src":"730:14:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":6068,"nodeType":"UserDefinedTypeName","pathNode":{"id":6067,"name":"Fr","nameLocations":["730:2:16"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"730:2:16"},"referencedDeclaration":6030,"src":"730:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":6072,"mutability":"mutable","name":"other","nameLocation":"756:5:16","nodeType":"VariableDeclaration","scope":6083,"src":"746:15:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":6071,"nodeType":"UserDefinedTypeName","pathNode":{"id":6070,"name":"Fr","nameLocations":["746:2:16"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"746:2:16"},"referencedDeclaration":6030,"src":"746:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"729:33:16"},"returnParameters":{"id":6074,"nodeType":"ParameterList","parameters":[],"src":"777:0:16"},"scope":7049,"src":"714:104:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6106,"nodeType":"Block","src":"889:74:16","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6093,"name":"fr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6086,"src":"907:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":6094,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"910:5:16","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"907:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6095,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"919:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"907:13:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6092,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"899:7:16","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":6097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"899:22:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6098,"nodeType":"ExpressionStatement","src":"899:22:16"},{"expression":{"arguments":[{"id":6100,"name":"fr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6086,"src":"942:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6103,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":6101,"name":"r_mod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6019,"src":"946:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"32","id":6102,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"954:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"946:9:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6099,"name":"pow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6223,"src":"938:3:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Fr_$6030_memory_ptr_$_t_uint256_$returns$_t_struct$_Fr_$6030_memory_ptr_$","typeString":"function (struct PairingsBn254.Fr memory,uint256) view returns (struct PairingsBn254.Fr memory)"}},"id":6104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"938:18:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"functionReturnParameters":6091,"id":6105,"nodeType":"Return","src":"931:25:16"}]},"id":6107,"implemented":true,"kind":"function","modifiers":[],"name":"inverse","nameLocation":"833:7:16","nodeType":"FunctionDefinition","parameters":{"id":6087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6086,"mutability":"mutable","name":"fr","nameLocation":"851:2:16","nodeType":"VariableDeclaration","scope":6107,"src":"841:12:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":6085,"nodeType":"UserDefinedTypeName","pathNode":{"id":6084,"name":"Fr","nameLocations":["841:2:16"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"841:2:16"},"referencedDeclaration":6030,"src":"841:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"840:14:16"},"returnParameters":{"id":6091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6090,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6107,"src":"878:9:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":6089,"nodeType":"UserDefinedTypeName","pathNode":{"id":6088,"name":"Fr","nameLocations":["878:2:16"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"878:2:16"},"referencedDeclaration":6030,"src":"878:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"877:11:16"},"scope":7049,"src":"824:139:16","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6128,"nodeType":"Block","src":"1036:68:16","statements":[{"expression":{"id":6126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6116,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6110,"src":"1046:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":6118,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1051:5:16","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"1046:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":6120,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6110,"src":"1066:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":6121,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1071:5:16","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"1066:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6122,"name":"other","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6113,"src":"1078:5:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":6123,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1084:5:16","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"1078:11:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6124,"name":"r_mod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6019,"src":"1091:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6119,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"1059:6:16","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":6125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1059:38:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1046:51:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6127,"nodeType":"ExpressionStatement","src":"1046:51:16"}]},"id":6129,"implemented":true,"kind":"function","modifiers":[],"name":"add_assign","nameLocation":"978:10:16","nodeType":"FunctionDefinition","parameters":{"id":6114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6110,"mutability":"mutable","name":"self","nameLocation":"999:4:16","nodeType":"VariableDeclaration","scope":6129,"src":"989:14:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":6109,"nodeType":"UserDefinedTypeName","pathNode":{"id":6108,"name":"Fr","nameLocations":["989:2:16"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"989:2:16"},"referencedDeclaration":6030,"src":"989:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":6113,"mutability":"mutable","name":"other","nameLocation":"1015:5:16","nodeType":"VariableDeclaration","scope":6129,"src":"1005:15:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":6112,"nodeType":"UserDefinedTypeName","pathNode":{"id":6111,"name":"Fr","nameLocations":["1005:2:16"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"1005:2:16"},"referencedDeclaration":6030,"src":"1005:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"988:33:16"},"returnParameters":{"id":6115,"nodeType":"ParameterList","parameters":[],"src":"1036:0:16"},"scope":7049,"src":"969:135:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6152,"nodeType":"Block","src":"1177:76:16","statements":[{"expression":{"id":6150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6138,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6132,"src":"1187:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":6140,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1192:5:16","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"1187:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":6142,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6132,"src":"1207:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":6143,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1212:5:16","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"1207:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6144,"name":"r_mod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6019,"src":"1219:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":6145,"name":"other","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6135,"src":"1227:5:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":6146,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1233:5:16","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"1227:11:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1219:19:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6148,"name":"r_mod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6019,"src":"1240:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6141,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"1200:6:16","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":6149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1200:46:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1187:59:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6151,"nodeType":"ExpressionStatement","src":"1187:59:16"}]},"id":6153,"implemented":true,"kind":"function","modifiers":[],"name":"sub_assign","nameLocation":"1119:10:16","nodeType":"FunctionDefinition","parameters":{"id":6136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6132,"mutability":"mutable","name":"self","nameLocation":"1140:4:16","nodeType":"VariableDeclaration","scope":6153,"src":"1130:14:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":6131,"nodeType":"UserDefinedTypeName","pathNode":{"id":6130,"name":"Fr","nameLocations":["1130:2:16"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"1130:2:16"},"referencedDeclaration":6030,"src":"1130:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":6135,"mutability":"mutable","name":"other","nameLocation":"1156:5:16","nodeType":"VariableDeclaration","scope":6153,"src":"1146:15:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":6134,"nodeType":"UserDefinedTypeName","pathNode":{"id":6133,"name":"Fr","nameLocations":["1146:2:16"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"1146:2:16"},"referencedDeclaration":6030,"src":"1146:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"1129:33:16"},"returnParameters":{"id":6137,"nodeType":"ParameterList","parameters":[],"src":"1177:0:16"},"scope":7049,"src":"1110:143:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6174,"nodeType":"Block","src":"1326:68:16","statements":[{"expression":{"id":6172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6162,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6156,"src":"1336:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":6164,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1341:5:16","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"1336:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":6166,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6156,"src":"1356:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":6167,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1361:5:16","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"1356:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6168,"name":"other","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6159,"src":"1368:5:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":6169,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1374:5:16","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"1368:11:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6170,"name":"r_mod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6019,"src":"1381:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6165,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"1349:6:16","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":6171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1349:38:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1336:51:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6173,"nodeType":"ExpressionStatement","src":"1336:51:16"}]},"id":6175,"implemented":true,"kind":"function","modifiers":[],"name":"mul_assign","nameLocation":"1268:10:16","nodeType":"FunctionDefinition","parameters":{"id":6160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6156,"mutability":"mutable","name":"self","nameLocation":"1289:4:16","nodeType":"VariableDeclaration","scope":6175,"src":"1279:14:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":6155,"nodeType":"UserDefinedTypeName","pathNode":{"id":6154,"name":"Fr","nameLocations":["1279:2:16"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"1279:2:16"},"referencedDeclaration":6030,"src":"1279:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":6159,"mutability":"mutable","name":"other","nameLocation":"1305:5:16","nodeType":"VariableDeclaration","scope":6175,"src":"1295:15:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":6158,"nodeType":"UserDefinedTypeName","pathNode":{"id":6157,"name":"Fr","nameLocations":["1295:2:16"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"1295:2:16"},"referencedDeclaration":6030,"src":"1295:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"1278:33:16"},"returnParameters":{"id":6161,"nodeType":"ParameterList","parameters":[],"src":"1326:0:16"},"scope":7049,"src":"1259:135:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6222,"nodeType":"Block","src":"1478:305:16","statements":[{"assignments":[6191],"declarations":[{"constant":false,"id":6191,"mutability":"mutable","name":"input","nameLocation":"1506:5:16","nodeType":"VariableDeclaration","scope":6222,"src":"1488:23:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_memory_ptr","typeString":"uint256[6]"},"typeName":{"baseType":{"id":6189,"name":"uint256","nodeType":"ElementaryTypeName","src":"1488:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6190,"length":{"hexValue":"36","id":6188,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1496:1:16","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"nodeType":"ArrayTypeName","src":"1488:10:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_storage_ptr","typeString":"uint256[6]"}},"visibility":"internal"}],"id":6200,"initialValue":{"components":[{"hexValue":"3332","id":6192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1515:2:16","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"hexValue":"3332","id":6193,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1519:2:16","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"hexValue":"3332","id":6194,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1523:2:16","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"expression":{"id":6195,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6178,"src":"1527:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":6196,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1532:5:16","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"1527:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6197,"name":"power","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6180,"src":"1539:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6198,"name":"r_mod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6019,"src":"1546:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6199,"isConstant":false,"isInlineArray":true,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1514:38:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$6_memory_ptr","typeString":"uint256[6] memory"}},"nodeType":"VariableDeclarationStatement","src":"1488:64:16"},{"assignments":[6206],"declarations":[{"constant":false,"id":6206,"mutability":"mutable","name":"result","nameLocation":"1580:6:16","nodeType":"VariableDeclaration","scope":6222,"src":"1562:24:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$1_memory_ptr","typeString":"uint256[1]"},"typeName":{"baseType":{"id":6204,"name":"uint256","nodeType":"ElementaryTypeName","src":"1562:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6205,"length":{"hexValue":"31","id":6203,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1570:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"ArrayTypeName","src":"1562:10:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$1_storage_ptr","typeString":"uint256[1]"}},"visibility":"internal"}],"id":6207,"nodeType":"VariableDeclarationStatement","src":"1562:24:16"},{"assignments":[6209],"declarations":[{"constant":false,"id":6209,"mutability":"mutable","name":"success","nameLocation":"1601:7:16","nodeType":"VariableDeclaration","scope":6222,"src":"1596:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6208,"name":"bool","nodeType":"ElementaryTypeName","src":"1596:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":6210,"nodeType":"VariableDeclarationStatement","src":"1596:12:16"},{"AST":{"nodeType":"YulBlock","src":"1627:85:16","statements":[{"nodeType":"YulAssignment","src":"1641:61:16","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"1663:3:16"},"nodeType":"YulFunctionCall","src":"1663:5:16"},{"kind":"number","nodeType":"YulLiteral","src":"1670:4:16","type":"","value":"0x05"},{"name":"input","nodeType":"YulIdentifier","src":"1676:5:16"},{"kind":"number","nodeType":"YulLiteral","src":"1683:4:16","type":"","value":"0xc0"},{"name":"result","nodeType":"YulIdentifier","src":"1689:6:16"},{"kind":"number","nodeType":"YulLiteral","src":"1697:4:16","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"1652:10:16"},"nodeType":"YulFunctionCall","src":"1652:50:16"},"variableNames":[{"name":"success","nodeType":"YulIdentifier","src":"1641:7:16"}]}]},"evmVersion":"london","externalReferences":[{"declaration":6191,"isOffset":false,"isSlot":false,"src":"1676:5:16","valueSize":1},{"declaration":6206,"isOffset":false,"isSlot":false,"src":"1689:6:16","valueSize":1},{"declaration":6209,"isOffset":false,"isSlot":false,"src":"1641:7:16","valueSize":1}],"id":6211,"nodeType":"InlineAssembly","src":"1618:94:16"},{"expression":{"arguments":[{"id":6213,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6209,"src":"1729:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6212,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1721:7:16","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":6214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1721:16:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6215,"nodeType":"ExpressionStatement","src":"1721:16:16"},{"expression":{"arguments":[{"baseExpression":{"id":6217,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6206,"src":"1765:6:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$1_memory_ptr","typeString":"uint256[1] memory"}},"id":6219,"indexExpression":{"hexValue":"30","id":6218,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1772:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1765:9:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6216,"name":"Fr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6030,"src":"1754:2:16","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Fr_$6030_storage_ptr_$","typeString":"type(struct PairingsBn254.Fr storage pointer)"}},"id":6220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["1758:5:16"],"names":["value"],"nodeType":"FunctionCall","src":"1754:22:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"functionReturnParameters":6185,"id":6221,"nodeType":"Return","src":"1747:29:16"}]},"id":6223,"implemented":true,"kind":"function","modifiers":[],"name":"pow","nameLocation":"1409:3:16","nodeType":"FunctionDefinition","parameters":{"id":6181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6178,"mutability":"mutable","name":"self","nameLocation":"1423:4:16","nodeType":"VariableDeclaration","scope":6223,"src":"1413:14:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":6177,"nodeType":"UserDefinedTypeName","pathNode":{"id":6176,"name":"Fr","nameLocations":["1413:2:16"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"1413:2:16"},"referencedDeclaration":6030,"src":"1413:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":6180,"mutability":"mutable","name":"power","nameLocation":"1437:5:16","nodeType":"VariableDeclaration","scope":6223,"src":"1429:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6179,"name":"uint256","nodeType":"ElementaryTypeName","src":"1429:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1412:31:16"},"returnParameters":{"id":6185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6184,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6223,"src":"1467:9:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":6183,"nodeType":"UserDefinedTypeName","pathNode":{"id":6182,"name":"Fr","nameLocations":["1467:2:16"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"1467:2:16"},"referencedDeclaration":6030,"src":"1467:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"1466:11:16"},"scope":7049,"src":"1400:383:16","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"PairingsBn254.G2Point","id":6232,"members":[{"constant":false,"id":6227,"mutability":"mutable","name":"X","nameLocation":"1879:1:16","nodeType":"VariableDeclaration","scope":6232,"src":"1868:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":6224,"name":"uint256","nodeType":"ElementaryTypeName","src":"1868:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6226,"length":{"hexValue":"32","id":6225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1876:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"1868:10:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"},{"constant":false,"id":6231,"mutability":"mutable","name":"Y","nameLocation":"1901:1:16","nodeType":"VariableDeclaration","scope":6232,"src":"1890:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":6228,"name":"uint256","nodeType":"ElementaryTypeName","src":"1890:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6230,"length":{"hexValue":"32","id":6229,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1898:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"1890:10:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"}],"name":"G2Point","nameLocation":"1850:7:16","nodeType":"StructDefinition","scope":7049,"src":"1843:66:16","visibility":"public"},{"body":{"id":6243,"nodeType":"Block","src":"1968:37:16","statements":[{"expression":{"arguments":[{"hexValue":"31","id":6239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1993:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"hexValue":"32","id":6240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1996:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"id":6238,"name":"G1Point","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6027,"src":"1985:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_G1Point_$6027_storage_ptr_$","typeString":"type(struct PairingsBn254.G1Point storage pointer)"}},"id":6241,"isConstant":false,"isLValue":false,"isPure":true,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1985:13:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"functionReturnParameters":6237,"id":6242,"nodeType":"Return","src":"1978:20:16"}]},"id":6244,"implemented":true,"kind":"function","modifiers":[],"name":"P1","nameLocation":"1924:2:16","nodeType":"FunctionDefinition","parameters":{"id":6233,"nodeType":"ParameterList","parameters":[],"src":"1926:2:16"},"returnParameters":{"id":6237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6236,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6244,"src":"1952:14:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6235,"nodeType":"UserDefinedTypeName","pathNode":{"id":6234,"name":"G1Point","nameLocations":["1952:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"1952:7:16"},"referencedDeclaration":6027,"src":"1952:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"src":"1951:16:16"},"scope":7049,"src":"1915:90:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6259,"nodeType":"Block","src":"2088:37:16","statements":[{"expression":{"arguments":[{"id":6255,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6246,"src":"2113:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6256,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6248,"src":"2116:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6254,"name":"G1Point","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6027,"src":"2105:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_G1Point_$6027_storage_ptr_$","typeString":"type(struct PairingsBn254.G1Point storage pointer)"}},"id":6257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2105:13:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"functionReturnParameters":6253,"id":6258,"nodeType":"Return","src":"2098:20:16"}]},"id":6260,"implemented":true,"kind":"function","modifiers":[],"name":"new_g1","nameLocation":"2020:6:16","nodeType":"FunctionDefinition","parameters":{"id":6249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6246,"mutability":"mutable","name":"x","nameLocation":"2035:1:16","nodeType":"VariableDeclaration","scope":6260,"src":"2027:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6245,"name":"uint256","nodeType":"ElementaryTypeName","src":"2027:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6248,"mutability":"mutable","name":"y","nameLocation":"2046:1:16","nodeType":"VariableDeclaration","scope":6260,"src":"2038:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6247,"name":"uint256","nodeType":"ElementaryTypeName","src":"2038:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2026:22:16"},"returnParameters":{"id":6253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6252,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6260,"src":"2072:14:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6251,"nodeType":"UserDefinedTypeName","pathNode":{"id":6250,"name":"G1Point","nameLocations":["2072:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"2072:7:16"},"referencedDeclaration":6027,"src":"2072:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"src":"2071:16:16"},"scope":7049,"src":"2011:114:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6342,"nodeType":"Block","src":"2310:562:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6270,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"2324:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6271,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2329:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2324:6:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6273,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6264,"src":"2334:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6274,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2339:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2334:6:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2324:16:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6283,"nodeType":"IfStatement","src":"2320:109:16","trueBody":{"id":6282,"nodeType":"Block","src":"2342:87:16","statements":[{"expression":{"arguments":[{"id":6278,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"2413:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6279,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6264,"src":"2416:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6277,"name":"G1Point","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6027,"src":"2405:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_G1Point_$6027_storage_ptr_$","typeString":"type(struct PairingsBn254.G1Point storage pointer)"}},"id":6280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2405:13:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"functionReturnParameters":6269,"id":6281,"nodeType":"Return","src":"2398:20:16"}]}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6285,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"2473:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6286,"name":"q_mod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6016,"src":"2477:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2473:9:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7820617869732069736e27742076616c6964","id":6288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2484:20:16","typeDescriptions":{"typeIdentifier":"t_stringliteral_1dfeff2f48d64e5889cd05b12cf0c6149fe8cd6987dc2feb21068eaa37a150e2","typeString":"literal_string \"x axis isn't valid\""},"value":"x axis isn't valid"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1dfeff2f48d64e5889cd05b12cf0c6149fe8cd6987dc2feb21068eaa37a150e2","typeString":"literal_string \"x axis isn't valid\""}],"id":6284,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2465:7:16","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2465:40:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6290,"nodeType":"ExpressionStatement","src":"2465:40:16"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6292,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6264,"src":"2523:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6293,"name":"q_mod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6016,"src":"2527:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2523:9:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7920617869732069736e27742076616c6964","id":6295,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2534:20:16","typeDescriptions":{"typeIdentifier":"t_stringliteral_ca1c4b36b64c26a780df6e129923f75fb0ec272344eb802bca8a701f0737ca5f","typeString":"literal_string \"y axis isn't valid\""},"value":"y axis isn't valid"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ca1c4b36b64c26a780df6e129923f75fb0ec272344eb802bca8a701f0737ca5f","typeString":"literal_string \"y axis isn't valid\""}],"id":6291,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2515:7:16","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2515:40:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6297,"nodeType":"ExpressionStatement","src":"2515:40:16"},{"assignments":[6299],"declarations":[{"constant":false,"id":6299,"mutability":"mutable","name":"lhs","nameLocation":"2599:3:16","nodeType":"VariableDeclaration","scope":6342,"src":"2591:11:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6298,"name":"uint256","nodeType":"ElementaryTypeName","src":"2591:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6305,"initialValue":{"arguments":[{"id":6301,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6264,"src":"2612:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6302,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6264,"src":"2615:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6303,"name":"q_mod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6016,"src":"2618:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6300,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"2605:6:16","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":6304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2605:19:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2591:33:16"},{"assignments":[6307],"declarations":[{"constant":false,"id":6307,"mutability":"mutable","name":"rhs","nameLocation":"2650:3:16","nodeType":"VariableDeclaration","scope":6342,"src":"2642:11:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6306,"name":"uint256","nodeType":"ElementaryTypeName","src":"2642:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6313,"initialValue":{"arguments":[{"id":6309,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"2663:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6310,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"2666:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6311,"name":"q_mod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6016,"src":"2669:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6308,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"2656:6:16","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":6312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2656:19:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2642:33:16"},{"expression":{"id":6320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6314,"name":"rhs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6307,"src":"2692:3:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6316,"name":"rhs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6307,"src":"2705:3:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6317,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"2710:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6318,"name":"q_mod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6016,"src":"2713:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6315,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"2698:6:16","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":6319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2698:21:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2692:27:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6321,"nodeType":"ExpressionStatement","src":"2692:27:16"},{"expression":{"id":6328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6322,"name":"rhs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6307,"src":"2736:3:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6324,"name":"rhs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6307,"src":"2749:3:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6325,"name":"bn254_b_coeff","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6022,"src":"2754:13:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6326,"name":"q_mod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6016,"src":"2769:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6323,"name":"addmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-2,"src":"2742:6:16","typeDescriptions":{"typeIdentifier":"t_function_addmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":6327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2742:33:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2736:39:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6329,"nodeType":"ExpressionStatement","src":"2736:39:16"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6331,"name":"lhs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6299,"src":"2804:3:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":6332,"name":"rhs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6307,"src":"2811:3:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2804:10:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6973206e6f74206f6e206375727665","id":6334,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2816:17:16","typeDescriptions":{"typeIdentifier":"t_stringliteral_fda56ab6f1add86dceb1c827168bec3bc5af2fbf929350597858dbb7150756b6","typeString":"literal_string \"is not on curve\""},"value":"is not on curve"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fda56ab6f1add86dceb1c827168bec3bc5af2fbf929350597858dbb7150756b6","typeString":"literal_string \"is not on curve\""}],"id":6330,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2796:7:16","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2796:38:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6336,"nodeType":"ExpressionStatement","src":"2796:38:16"},{"expression":{"arguments":[{"id":6338,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"2860:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6339,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6264,"src":"2863:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6337,"name":"G1Point","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6027,"src":"2852:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_G1Point_$6027_storage_ptr_$","typeString":"type(struct PairingsBn254.G1Point storage pointer)"}},"id":6340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2852:13:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"functionReturnParameters":6269,"id":6341,"nodeType":"Return","src":"2845:20:16"}]},"id":6343,"implemented":true,"kind":"function","modifiers":[],"name":"new_g1_checked","nameLocation":"2234:14:16","nodeType":"FunctionDefinition","parameters":{"id":6265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6262,"mutability":"mutable","name":"x","nameLocation":"2257:1:16","nodeType":"VariableDeclaration","scope":6343,"src":"2249:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6261,"name":"uint256","nodeType":"ElementaryTypeName","src":"2249:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6264,"mutability":"mutable","name":"y","nameLocation":"2268:1:16","nodeType":"VariableDeclaration","scope":6343,"src":"2260:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6263,"name":"uint256","nodeType":"ElementaryTypeName","src":"2260:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2248:22:16"},"returnParameters":{"id":6269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6268,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6343,"src":"2294:14:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6267,"nodeType":"UserDefinedTypeName","pathNode":{"id":6266,"name":"G1Point","nameLocations":["2294:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"2294:7:16"},"referencedDeclaration":6027,"src":"2294:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"src":"2293:16:16"},"scope":7049,"src":"2225:647:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6362,"nodeType":"Block","src":"2975:37:16","statements":[{"expression":{"arguments":[{"id":6358,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6347,"src":"3000:1:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},{"id":6359,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6351,"src":"3003:1:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"},{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}],"id":6357,"name":"G2Point","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6232,"src":"2992:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_G2Point_$6232_storage_ptr_$","typeString":"type(struct PairingsBn254.G2Point storage pointer)"}},"id":6360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2992:13:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"functionReturnParameters":6356,"id":6361,"nodeType":"Return","src":"2985:20:16"}]},"id":6363,"implemented":true,"kind":"function","modifiers":[],"name":"new_g2","nameLocation":"2887:6:16","nodeType":"FunctionDefinition","parameters":{"id":6352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6347,"mutability":"mutable","name":"x","nameLocation":"2912:1:16","nodeType":"VariableDeclaration","scope":6363,"src":"2894:19:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":6344,"name":"uint256","nodeType":"ElementaryTypeName","src":"2894:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6346,"length":{"hexValue":"32","id":6345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2902:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"2894:10:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"},{"constant":false,"id":6351,"mutability":"mutable","name":"y","nameLocation":"2933:1:16","nodeType":"VariableDeclaration","scope":6363,"src":"2915:19:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":6348,"name":"uint256","nodeType":"ElementaryTypeName","src":"2915:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6350,"length":{"hexValue":"32","id":6349,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2923:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"2915:10:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"}],"src":"2893:42:16"},"returnParameters":{"id":6356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6355,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6363,"src":"2959:14:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point"},"typeName":{"id":6354,"nodeType":"UserDefinedTypeName","pathNode":{"id":6353,"name":"G2Point","nameLocations":["2959:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6232,"src":"2959:7:16"},"referencedDeclaration":6232,"src":"2959:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_storage_ptr","typeString":"struct PairingsBn254.G2Point"}},"visibility":"internal"}],"src":"2958:16:16"},"scope":7049,"src":"2878:134:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6386,"nodeType":"Block","src":"3102:61:16","statements":[{"expression":{"id":6377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6372,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6370,"src":"3112:6:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6374,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3119:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"3112:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6375,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6366,"src":"3123:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6376,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3128:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"3123:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3112:17:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6378,"nodeType":"ExpressionStatement","src":"3112:17:16"},{"expression":{"id":6384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6379,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6370,"src":"3139:6:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6381,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3146:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"3139:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6382,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6366,"src":"3150:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6383,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3155:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"3150:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3139:17:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6385,"nodeType":"ExpressionStatement","src":"3139:17:16"}]},"id":6387,"implemented":true,"kind":"function","modifiers":[],"name":"copy_g1","nameLocation":"3027:7:16","nodeType":"FunctionDefinition","parameters":{"id":6367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6366,"mutability":"mutable","name":"self","nameLocation":"3050:4:16","nodeType":"VariableDeclaration","scope":6387,"src":"3035:19:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6365,"nodeType":"UserDefinedTypeName","pathNode":{"id":6364,"name":"G1Point","nameLocations":["3035:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"3035:7:16"},"referencedDeclaration":6027,"src":"3035:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"src":"3034:21:16"},"returnParameters":{"id":6371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6370,"mutability":"mutable","name":"result","nameLocation":"3094:6:16","nodeType":"VariableDeclaration","scope":6387,"src":"3079:21:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6369,"nodeType":"UserDefinedTypeName","pathNode":{"id":6368,"name":"G1Point","nameLocations":["3079:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"3079:7:16"},"referencedDeclaration":6027,"src":"3079:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"src":"3078:23:16"},"scope":7049,"src":"3018:145:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6402,"nodeType":"Block","src":"3222:549:16","statements":[{"expression":{"arguments":[{"components":[{"hexValue":"307831393865393339333932306434383361373236306266623733316662356432356631616134393333333561396537313239376534383562376165663331326332","id":6394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3366:66:16","typeDescriptions":{"typeIdentifier":"t_rational_11559732032986387107991004021392285783925812861821192530917403151452391805634_by_1","typeString":"int_const 1155...(69 digits omitted)...5634"},"value":"0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2"},{"hexValue":"307831383030646565663132316631653736343236613030363635653563343437393637343332326434663735656461646434366465626435636439393266366564","id":6395,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3454:66:16","typeDescriptions":{"typeIdentifier":"t_rational_10857046999023057135944570762232829481370756359578518086990519993285655852781_by_1","typeString":"int_const 1085...(69 digits omitted)...2781"},"value":"0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed"}],"id":6396,"isConstant":false,"isInlineArray":true,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3344:194:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},{"components":[{"hexValue":"307830393036383964303538356666303735656339653939616436393063333339356263346233313333373062333865663335356163646164636431323239373562","id":6397,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3578:66:16","typeDescriptions":{"typeIdentifier":"t_rational_4082367875863433681332203403145435568316851327593401208105741076214120093531_by_1","typeString":"int_const 4082...(68 digits omitted)...3531"},"value":"0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b"},{"hexValue":"307831326338356561356462386336646562346161623731383038646362343038666533643165373639306334336433376234636536636330313636666137646161","id":6398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3666:66:16","typeDescriptions":{"typeIdentifier":"t_rational_8495653923123431417604973247489272438418190587263600148770280649306958101930_by_1","typeString":"int_const 8495...(68 digits omitted)...1930"},"value":"0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa"}],"id":6399,"isConstant":false,"isInlineArray":true,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3556:194:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"},{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}],"id":6393,"name":"G2Point","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6232,"src":"3319:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_G2Point_$6232_storage_ptr_$","typeString":"type(struct PairingsBn254.G2Point storage pointer)"}},"id":6400,"isConstant":false,"isLValue":false,"isPure":true,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3319:445:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"functionReturnParameters":6392,"id":6401,"nodeType":"Return","src":"3300:464:16"}]},"id":6403,"implemented":true,"kind":"function","modifiers":[],"name":"P2","nameLocation":"3178:2:16","nodeType":"FunctionDefinition","parameters":{"id":6388,"nodeType":"ParameterList","parameters":[],"src":"3180:2:16"},"returnParameters":{"id":6392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6391,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6403,"src":"3206:14:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point"},"typeName":{"id":6390,"nodeType":"UserDefinedTypeName","pathNode":{"id":6389,"name":"G2Point","nameLocations":["3206:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6232,"src":"3206:7:16"},"referencedDeclaration":6232,"src":"3206:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_storage_ptr","typeString":"struct PairingsBn254.G2Point"}},"visibility":"internal"}],"src":"3205:16:16"},"scope":7049,"src":"3169:602:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6432,"nodeType":"Block","src":"3828:184:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6409,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6406,"src":"3894:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6410,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3899:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"3894:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3904:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3894:11:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6422,"nodeType":"IfStatement","src":"3890:82:16","trueBody":{"id":6421,"nodeType":"Block","src":"3907:65:16","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6414,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6406,"src":"3929:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6415,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3934:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"3929:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3939:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3929:11:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6413,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3921:7:16","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":6418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3921:20:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6419,"nodeType":"ExpressionStatement","src":"3921:20:16"},{"functionReturnParameters":6408,"id":6420,"nodeType":"Return","src":"3955:7:16"}]}},{"expression":{"id":6430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6423,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6406,"src":"3982:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6425,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3987:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"3982:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6426,"name":"q_mod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6016,"src":"3991:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":6427,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6406,"src":"3999:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6428,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4004:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"3999:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3991:14:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3982:23:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6431,"nodeType":"ExpressionStatement","src":"3982:23:16"}]},"id":6433,"implemented":true,"kind":"function","modifiers":[],"name":"negate","nameLocation":"3786:6:16","nodeType":"FunctionDefinition","parameters":{"id":6407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6406,"mutability":"mutable","name":"self","nameLocation":"3808:4:16","nodeType":"VariableDeclaration","scope":6433,"src":"3793:19:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6405,"nodeType":"UserDefinedTypeName","pathNode":{"id":6404,"name":"G1Point","nameLocations":["3793:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"3793:7:16"},"referencedDeclaration":6027,"src":"3793:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"src":"3792:21:16"},"returnParameters":{"id":6408,"nodeType":"ParameterList","parameters":[],"src":"3828:0:16"},"scope":7049,"src":"3777:235:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6453,"nodeType":"Block","src":"4116:65:16","statements":[{"expression":{"arguments":[{"id":6446,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6436,"src":"4146:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},{"id":6447,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6439,"src":"4150:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},{"id":6448,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6443,"src":"4154:1:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"},{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"},{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"id":6445,"name":"point_add_into_dest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6579,"src":"4126:19:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":6449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4126:30:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6450,"nodeType":"ExpressionStatement","src":"4126:30:16"},{"expression":{"id":6451,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6443,"src":"4173:1:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"functionReturnParameters":6444,"id":6452,"nodeType":"Return","src":"4166:8:16"}]},"id":6454,"implemented":true,"kind":"function","modifiers":[],"name":"point_add","nameLocation":"4027:9:16","nodeType":"FunctionDefinition","parameters":{"id":6440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6436,"mutability":"mutable","name":"p1","nameLocation":"4052:2:16","nodeType":"VariableDeclaration","scope":6454,"src":"4037:17:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6435,"nodeType":"UserDefinedTypeName","pathNode":{"id":6434,"name":"G1Point","nameLocations":["4037:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"4037:7:16"},"referencedDeclaration":6027,"src":"4037:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":6439,"mutability":"mutable","name":"p2","nameLocation":"4071:2:16","nodeType":"VariableDeclaration","scope":6454,"src":"4056:17:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6438,"nodeType":"UserDefinedTypeName","pathNode":{"id":6437,"name":"G1Point","nameLocations":["4056:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"4056:7:16"},"referencedDeclaration":6027,"src":"4056:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"src":"4036:38:16"},"returnParameters":{"id":6444,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6443,"mutability":"mutable","name":"r","nameLocation":"4113:1:16","nodeType":"VariableDeclaration","scope":6454,"src":"4098:16:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6442,"nodeType":"UserDefinedTypeName","pathNode":{"id":6441,"name":"G1Point","nameLocations":["4098:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"4098:7:16"},"referencedDeclaration":6027,"src":"4098:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"src":"4097:18:16"},"scope":7049,"src":"4018:163:16","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6469,"nodeType":"Block","src":"4265:48:16","statements":[{"expression":{"arguments":[{"id":6464,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6457,"src":"4295:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},{"id":6465,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6460,"src":"4299:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},{"id":6466,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6457,"src":"4303:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"},{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"},{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"id":6463,"name":"point_add_into_dest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6579,"src":"4275:19:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":6467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4275:31:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6468,"nodeType":"ExpressionStatement","src":"4275:31:16"}]},"id":6470,"implemented":true,"kind":"function","modifiers":[],"name":"point_add_assign","nameLocation":"4196:16:16","nodeType":"FunctionDefinition","parameters":{"id":6461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6457,"mutability":"mutable","name":"p1","nameLocation":"4228:2:16","nodeType":"VariableDeclaration","scope":6470,"src":"4213:17:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6456,"nodeType":"UserDefinedTypeName","pathNode":{"id":6455,"name":"G1Point","nameLocations":["4213:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"4213:7:16"},"referencedDeclaration":6027,"src":"4213:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":6460,"mutability":"mutable","name":"p2","nameLocation":"4247:2:16","nodeType":"VariableDeclaration","scope":6470,"src":"4232:17:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6459,"nodeType":"UserDefinedTypeName","pathNode":{"id":6458,"name":"G1Point","nameLocations":["4232:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"4232:7:16"},"referencedDeclaration":6027,"src":"4232:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"src":"4212:38:16"},"returnParameters":{"id":6462,"nodeType":"ParameterList","parameters":[],"src":"4265:0:16"},"scope":7049,"src":"4187:126:16","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6578,"nodeType":"Block","src":"4451:689:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6482,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6476,"src":"4465:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6483,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4468:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"4465:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6484,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4473:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4465:9:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6486,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6476,"src":"4478:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6487,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4481:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"4478:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4486:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4478:9:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4465:22:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6507,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6473,"src":"4628:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6508,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4631:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"4628:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4636:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4628:9:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6511,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6473,"src":"4641:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6512,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4644:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"4641:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6513,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4649:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4641:9:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4628:22:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6575,"nodeType":"Block","src":"4802:332:16","statements":[{"assignments":[6537],"declarations":[{"constant":false,"id":6537,"mutability":"mutable","name":"input","nameLocation":"4834:5:16","nodeType":"VariableDeclaration","scope":6575,"src":"4816:23:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4]"},"typeName":{"baseType":{"id":6535,"name":"uint256","nodeType":"ElementaryTypeName","src":"4816:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6536,"length":{"hexValue":"34","id":6534,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4824:1:16","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"ArrayTypeName","src":"4816:10:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_storage_ptr","typeString":"uint256[4]"}},"visibility":"internal"}],"id":6538,"nodeType":"VariableDeclarationStatement","src":"4816:23:16"},{"expression":{"id":6544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6539,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6537,"src":"4854:5:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4] memory"}},"id":6541,"indexExpression":{"hexValue":"30","id":6540,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4860:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4854:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6542,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6473,"src":"4865:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6543,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4868:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"4865:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4854:15:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6545,"nodeType":"ExpressionStatement","src":"4854:15:16"},{"expression":{"id":6551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6546,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6537,"src":"4883:5:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4] memory"}},"id":6548,"indexExpression":{"hexValue":"31","id":6547,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4889:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4883:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6549,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6473,"src":"4894:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6550,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4897:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"4894:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4883:15:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6552,"nodeType":"ExpressionStatement","src":"4883:15:16"},{"expression":{"id":6558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6553,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6537,"src":"4912:5:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4] memory"}},"id":6555,"indexExpression":{"hexValue":"32","id":6554,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4918:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4912:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6556,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6476,"src":"4923:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6557,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4926:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"4923:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4912:15:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6559,"nodeType":"ExpressionStatement","src":"4912:15:16"},{"expression":{"id":6565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6560,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6537,"src":"4941:5:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4] memory"}},"id":6562,"indexExpression":{"hexValue":"33","id":6561,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4947:1:16","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4941:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6563,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6476,"src":"4952:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6564,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4955:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"4952:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4941:15:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6566,"nodeType":"ExpressionStatement","src":"4941:15:16"},{"assignments":[6568],"declarations":[{"constant":false,"id":6568,"mutability":"mutable","name":"success","nameLocation":"4976:7:16","nodeType":"VariableDeclaration","scope":6575,"src":"4971:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6567,"name":"bool","nodeType":"ElementaryTypeName","src":"4971:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":6569,"nodeType":"VariableDeclarationStatement","src":"4971:12:16"},{"AST":{"nodeType":"YulBlock","src":"5006:88:16","statements":[{"nodeType":"YulAssignment","src":"5024:56:16","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"5046:3:16"},"nodeType":"YulFunctionCall","src":"5046:5:16"},{"kind":"number","nodeType":"YulLiteral","src":"5053:1:16","type":"","value":"6"},{"name":"input","nodeType":"YulIdentifier","src":"5056:5:16"},{"kind":"number","nodeType":"YulLiteral","src":"5063:4:16","type":"","value":"0x80"},{"name":"dest","nodeType":"YulIdentifier","src":"5069:4:16"},{"kind":"number","nodeType":"YulLiteral","src":"5075:4:16","type":"","value":"0x40"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"5035:10:16"},"nodeType":"YulFunctionCall","src":"5035:45:16"},"variableNames":[{"name":"success","nodeType":"YulIdentifier","src":"5024:7:16"}]}]},"evmVersion":"london","externalReferences":[{"declaration":6479,"isOffset":false,"isSlot":false,"src":"5069:4:16","valueSize":1},{"declaration":6537,"isOffset":false,"isSlot":false,"src":"5056:5:16","valueSize":1},{"declaration":6568,"isOffset":false,"isSlot":false,"src":"5024:7:16","valueSize":1}],"id":6570,"nodeType":"InlineAssembly","src":"4997:97:16"},{"expression":{"arguments":[{"id":6572,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6568,"src":"5115:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6571,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5107:7:16","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":6573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5107:16:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6574,"nodeType":"ExpressionStatement","src":"5107:16:16"}]},"id":6576,"nodeType":"IfStatement","src":"4624:510:16","trueBody":{"id":6531,"nodeType":"Block","src":"4652:144:16","statements":[{"expression":{"id":6521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6516,"name":"dest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6479,"src":"4725:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6518,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4730:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"4725:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6519,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6476,"src":"4734:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6520,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4737:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"4734:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4725:13:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6522,"nodeType":"ExpressionStatement","src":"4725:13:16"},{"expression":{"id":6528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6523,"name":"dest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6479,"src":"4752:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6525,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4757:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"4752:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6526,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6476,"src":"4761:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6527,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4764:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"4761:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4752:13:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6529,"nodeType":"ExpressionStatement","src":"4752:13:16"},{"functionReturnParameters":6481,"id":6530,"nodeType":"Return","src":"4779:7:16"}]}},"id":6577,"nodeType":"IfStatement","src":"4461:673:16","trueBody":{"id":6506,"nodeType":"Block","src":"4489:129:16","statements":[{"expression":{"id":6496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6491,"name":"dest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6479,"src":"4547:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6493,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4552:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"4547:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6494,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6473,"src":"4556:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6495,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4559:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"4556:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4547:13:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6497,"nodeType":"ExpressionStatement","src":"4547:13:16"},{"expression":{"id":6503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6498,"name":"dest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6479,"src":"4574:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6500,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4579:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"4574:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6501,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6473,"src":"4583:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6502,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4586:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"4583:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4574:13:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6504,"nodeType":"ExpressionStatement","src":"4574:13:16"},{"functionReturnParameters":6481,"id":6505,"nodeType":"Return","src":"4601:7:16"}]}}]},"id":6579,"implemented":true,"kind":"function","modifiers":[],"name":"point_add_into_dest","nameLocation":"4328:19:16","nodeType":"FunctionDefinition","parameters":{"id":6480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6473,"mutability":"mutable","name":"p1","nameLocation":"4372:2:16","nodeType":"VariableDeclaration","scope":6579,"src":"4357:17:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6472,"nodeType":"UserDefinedTypeName","pathNode":{"id":6471,"name":"G1Point","nameLocations":["4357:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"4357:7:16"},"referencedDeclaration":6027,"src":"4357:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":6476,"mutability":"mutable","name":"p2","nameLocation":"4399:2:16","nodeType":"VariableDeclaration","scope":6579,"src":"4384:17:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6475,"nodeType":"UserDefinedTypeName","pathNode":{"id":6474,"name":"G1Point","nameLocations":["4384:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"4384:7:16"},"referencedDeclaration":6027,"src":"4384:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":6479,"mutability":"mutable","name":"dest","nameLocation":"4426:4:16","nodeType":"VariableDeclaration","scope":6579,"src":"4411:19:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6478,"nodeType":"UserDefinedTypeName","pathNode":{"id":6477,"name":"G1Point","nameLocations":["4411:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"4411:7:16"},"referencedDeclaration":6027,"src":"4411:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"src":"4347:89:16"},"returnParameters":{"id":6481,"nodeType":"ParameterList","parameters":[],"src":"4451:0:16"},"scope":7049,"src":"4319:821:16","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6594,"nodeType":"Block","src":"5224:48:16","statements":[{"expression":{"arguments":[{"id":6589,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6582,"src":"5254:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},{"id":6590,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6585,"src":"5258:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},{"id":6591,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6582,"src":"5262:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"},{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"},{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"id":6588,"name":"point_sub_into_dest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6709,"src":"5234:19:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory) view"}},"id":6592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5234:31:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6593,"nodeType":"ExpressionStatement","src":"5234:31:16"}]},"id":6595,"implemented":true,"kind":"function","modifiers":[],"name":"point_sub_assign","nameLocation":"5155:16:16","nodeType":"FunctionDefinition","parameters":{"id":6586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6582,"mutability":"mutable","name":"p1","nameLocation":"5187:2:16","nodeType":"VariableDeclaration","scope":6595,"src":"5172:17:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6581,"nodeType":"UserDefinedTypeName","pathNode":{"id":6580,"name":"G1Point","nameLocations":["5172:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"5172:7:16"},"referencedDeclaration":6027,"src":"5172:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":6585,"mutability":"mutable","name":"p2","nameLocation":"5206:2:16","nodeType":"VariableDeclaration","scope":6595,"src":"5191:17:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6584,"nodeType":"UserDefinedTypeName","pathNode":{"id":6583,"name":"G1Point","nameLocations":["5191:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"5191:7:16"},"referencedDeclaration":6027,"src":"5191:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"src":"5171:38:16"},"returnParameters":{"id":6587,"nodeType":"ParameterList","parameters":[],"src":"5224:0:16"},"scope":7049,"src":"5146:126:16","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6708,"nodeType":"Block","src":"5410:730:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6607,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6601,"src":"5424:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6608,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5427:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"5424:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5432:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5424:9:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6611,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6601,"src":"5437:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6612,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5440:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"5437:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6613,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5445:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5437:9:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5424:22:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6632,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6598,"src":"5594:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6633,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5597:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"5594:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5602:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5594:9:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6636,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6598,"src":"5607:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6637,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5610:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"5607:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6638,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5615:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5607:9:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5594:22:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6705,"nodeType":"Block","src":"5786:348:16","statements":[{"assignments":[6664],"declarations":[{"constant":false,"id":6664,"mutability":"mutable","name":"input","nameLocation":"5818:5:16","nodeType":"VariableDeclaration","scope":6705,"src":"5800:23:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4]"},"typeName":{"baseType":{"id":6662,"name":"uint256","nodeType":"ElementaryTypeName","src":"5800:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6663,"length":{"hexValue":"34","id":6661,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5808:1:16","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"ArrayTypeName","src":"5800:10:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_storage_ptr","typeString":"uint256[4]"}},"visibility":"internal"}],"id":6665,"nodeType":"VariableDeclarationStatement","src":"5800:23:16"},{"expression":{"id":6671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6666,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6664,"src":"5838:5:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4] memory"}},"id":6668,"indexExpression":{"hexValue":"30","id":6667,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5844:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5838:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6669,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6598,"src":"5849:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6670,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5852:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"5849:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5838:15:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6672,"nodeType":"ExpressionStatement","src":"5838:15:16"},{"expression":{"id":6678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6673,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6664,"src":"5867:5:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4] memory"}},"id":6675,"indexExpression":{"hexValue":"31","id":6674,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5873:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5867:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6676,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6598,"src":"5878:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6677,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5881:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"5878:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5867:15:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6679,"nodeType":"ExpressionStatement","src":"5867:15:16"},{"expression":{"id":6685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6680,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6664,"src":"5896:5:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4] memory"}},"id":6682,"indexExpression":{"hexValue":"32","id":6681,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5902:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5896:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6683,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6601,"src":"5907:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6684,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5910:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"5907:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5896:15:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6686,"nodeType":"ExpressionStatement","src":"5896:15:16"},{"expression":{"id":6694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6687,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6664,"src":"5925:5:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$4_memory_ptr","typeString":"uint256[4] memory"}},"id":6689,"indexExpression":{"hexValue":"33","id":6688,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5931:1:16","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5925:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6690,"name":"q_mod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6016,"src":"5936:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":6691,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6601,"src":"5944:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6692,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5947:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"5944:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5936:12:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5925:23:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6695,"nodeType":"ExpressionStatement","src":"5925:23:16"},{"assignments":[6697],"declarations":[{"constant":false,"id":6697,"mutability":"mutable","name":"success","nameLocation":"5968:7:16","nodeType":"VariableDeclaration","scope":6705,"src":"5963:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6696,"name":"bool","nodeType":"ElementaryTypeName","src":"5963:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":6699,"initialValue":{"hexValue":"66616c7365","id":6698,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5978:5:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"5963:20:16"},{"AST":{"nodeType":"YulBlock","src":"6006:88:16","statements":[{"nodeType":"YulAssignment","src":"6024:56:16","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"6046:3:16"},"nodeType":"YulFunctionCall","src":"6046:5:16"},{"kind":"number","nodeType":"YulLiteral","src":"6053:1:16","type":"","value":"6"},{"name":"input","nodeType":"YulIdentifier","src":"6056:5:16"},{"kind":"number","nodeType":"YulLiteral","src":"6063:4:16","type":"","value":"0x80"},{"name":"dest","nodeType":"YulIdentifier","src":"6069:4:16"},{"kind":"number","nodeType":"YulLiteral","src":"6075:4:16","type":"","value":"0x40"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"6035:10:16"},"nodeType":"YulFunctionCall","src":"6035:45:16"},"variableNames":[{"name":"success","nodeType":"YulIdentifier","src":"6024:7:16"}]}]},"evmVersion":"london","externalReferences":[{"declaration":6604,"isOffset":false,"isSlot":false,"src":"6069:4:16","valueSize":1},{"declaration":6664,"isOffset":false,"isSlot":false,"src":"6056:5:16","valueSize":1},{"declaration":6697,"isOffset":false,"isSlot":false,"src":"6024:7:16","valueSize":1}],"id":6700,"nodeType":"InlineAssembly","src":"5997:97:16"},{"expression":{"arguments":[{"id":6702,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6697,"src":"6115:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6701,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6107:7:16","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":6703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6107:16:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6704,"nodeType":"ExpressionStatement","src":"6107:16:16"}]},"id":6706,"nodeType":"IfStatement","src":"5590:544:16","trueBody":{"id":6658,"nodeType":"Block","src":"5618:162:16","statements":[{"expression":{"id":6646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6641,"name":"dest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6604,"src":"5701:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6643,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5706:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"5701:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6644,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6601,"src":"5710:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6645,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5713:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"5710:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5701:13:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6647,"nodeType":"ExpressionStatement","src":"5701:13:16"},{"expression":{"id":6655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6648,"name":"dest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6604,"src":"5728:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6650,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5733:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"5728:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6651,"name":"q_mod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6016,"src":"5737:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":6652,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6601,"src":"5745:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6653,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5748:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"5745:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5737:12:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5728:21:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6656,"nodeType":"ExpressionStatement","src":"5728:21:16"},{"functionReturnParameters":6606,"id":6657,"nodeType":"Return","src":"5763:7:16"}]}},"id":6707,"nodeType":"IfStatement","src":"5420:714:16","trueBody":{"id":6631,"nodeType":"Block","src":"5448:136:16","statements":[{"expression":{"id":6621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6616,"name":"dest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6604,"src":"5513:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6618,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5518:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"5513:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6619,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6598,"src":"5522:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6620,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5525:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"5522:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5513:13:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6622,"nodeType":"ExpressionStatement","src":"5513:13:16"},{"expression":{"id":6628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6623,"name":"dest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6604,"src":"5540:4:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6625,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5545:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"5540:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6626,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6598,"src":"5549:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6627,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5552:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"5549:4:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5540:13:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6629,"nodeType":"ExpressionStatement","src":"5540:13:16"},{"functionReturnParameters":6606,"id":6630,"nodeType":"Return","src":"5567:7:16"}]}}]},"id":6709,"implemented":true,"kind":"function","modifiers":[],"name":"point_sub_into_dest","nameLocation":"5287:19:16","nodeType":"FunctionDefinition","parameters":{"id":6605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6598,"mutability":"mutable","name":"p1","nameLocation":"5331:2:16","nodeType":"VariableDeclaration","scope":6709,"src":"5316:17:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6597,"nodeType":"UserDefinedTypeName","pathNode":{"id":6596,"name":"G1Point","nameLocations":["5316:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"5316:7:16"},"referencedDeclaration":6027,"src":"5316:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":6601,"mutability":"mutable","name":"p2","nameLocation":"5358:2:16","nodeType":"VariableDeclaration","scope":6709,"src":"5343:17:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6600,"nodeType":"UserDefinedTypeName","pathNode":{"id":6599,"name":"G1Point","nameLocations":["5343:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"5343:7:16"},"referencedDeclaration":6027,"src":"5343:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":6604,"mutability":"mutable","name":"dest","nameLocation":"5385:4:16","nodeType":"VariableDeclaration","scope":6709,"src":"5370:19:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6603,"nodeType":"UserDefinedTypeName","pathNode":{"id":6602,"name":"G1Point","nameLocations":["5370:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"5370:7:16"},"referencedDeclaration":6027,"src":"5370:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"src":"5306:89:16"},"returnParameters":{"id":6606,"nodeType":"ParameterList","parameters":[],"src":"5410:0:16"},"scope":7049,"src":"5278:862:16","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6746,"nodeType":"Block","src":"6237:316:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6721,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6712,"src":"6437:1:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6722,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6439:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"6437:3:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6444:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6437:8:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6725,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6712,"src":"6449:1:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6726,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6451:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"6449:3:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":6727,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6456:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6449:8:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6437:20:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6737,"nodeType":"IfStatement","src":"6433:58:16","trueBody":{"id":6736,"nodeType":"Block","src":"6459:32:16","statements":[{"expression":{"id":6734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":6730,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6712,"src":"6473:1:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6732,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6475:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"6473:3:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":6733,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6479:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6473:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6735,"nodeType":"ExpressionStatement","src":"6473:7:16"}]}},{"expression":{"arguments":[{"id":6739,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6712,"src":"6520:1:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},{"id":6740,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6715,"src":"6523:1:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},{"id":6741,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6719,"src":"6526:1:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"},{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"},{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"id":6738,"name":"point_mul_into_dest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6812,"src":"6500:19:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory,struct PairingsBn254.G1Point memory) view"}},"id":6742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6500:28:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6743,"nodeType":"ExpressionStatement","src":"6500:28:16"},{"expression":{"id":6744,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6719,"src":"6545:1:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"functionReturnParameters":6720,"id":6745,"nodeType":"Return","src":"6538:8:16"}]},"id":6747,"implemented":true,"kind":"function","modifiers":[],"name":"point_mul","nameLocation":"6155:9:16","nodeType":"FunctionDefinition","parameters":{"id":6716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6712,"mutability":"mutable","name":"p","nameLocation":"6180:1:16","nodeType":"VariableDeclaration","scope":6747,"src":"6165:16:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6711,"nodeType":"UserDefinedTypeName","pathNode":{"id":6710,"name":"G1Point","nameLocations":["6165:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"6165:7:16"},"referencedDeclaration":6027,"src":"6165:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":6715,"mutability":"mutable","name":"s","nameLocation":"6193:1:16","nodeType":"VariableDeclaration","scope":6747,"src":"6183:11:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":6714,"nodeType":"UserDefinedTypeName","pathNode":{"id":6713,"name":"Fr","nameLocations":["6183:2:16"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"6183:2:16"},"referencedDeclaration":6030,"src":"6183:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"6164:31:16"},"returnParameters":{"id":6720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6719,"mutability":"mutable","name":"r","nameLocation":"6234:1:16","nodeType":"VariableDeclaration","scope":6747,"src":"6219:16:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6718,"nodeType":"UserDefinedTypeName","pathNode":{"id":6717,"name":"G1Point","nameLocations":["6219:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"6219:7:16"},"referencedDeclaration":6027,"src":"6219:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"src":"6218:18:16"},"scope":7049,"src":"6146:407:16","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6762,"nodeType":"Block","src":"6630:45:16","statements":[{"expression":{"arguments":[{"id":6757,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6750,"src":"6660:1:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},{"id":6758,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6753,"src":"6663:1:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},{"id":6759,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6750,"src":"6666:1:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"},{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"},{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}],"id":6756,"name":"point_mul_into_dest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6812,"src":"6640:19:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_G1Point_$6027_memory_ptr_$_t_struct$_Fr_$6030_memory_ptr_$_t_struct$_G1Point_$6027_memory_ptr_$returns$__$","typeString":"function (struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory,struct PairingsBn254.G1Point memory) view"}},"id":6760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6640:28:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6761,"nodeType":"ExpressionStatement","src":"6640:28:16"}]},"id":6763,"implemented":true,"kind":"function","modifiers":[],"name":"point_mul_assign","nameLocation":"6568:16:16","nodeType":"FunctionDefinition","parameters":{"id":6754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6750,"mutability":"mutable","name":"p","nameLocation":"6600:1:16","nodeType":"VariableDeclaration","scope":6763,"src":"6585:16:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6749,"nodeType":"UserDefinedTypeName","pathNode":{"id":6748,"name":"G1Point","nameLocations":["6585:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"6585:7:16"},"referencedDeclaration":6027,"src":"6585:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":6753,"mutability":"mutable","name":"s","nameLocation":"6613:1:16","nodeType":"VariableDeclaration","scope":6763,"src":"6603:11:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":6752,"nodeType":"UserDefinedTypeName","pathNode":{"id":6751,"name":"Fr","nameLocations":["6603:2:16"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"6603:2:16"},"referencedDeclaration":6030,"src":"6603:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"6584:31:16"},"returnParameters":{"id":6755,"nodeType":"ParameterList","parameters":[],"src":"6630:0:16"},"scope":7049,"src":"6559:116:16","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6811,"nodeType":"Block","src":"6806:262:16","statements":[{"assignments":[6780],"declarations":[{"constant":false,"id":6780,"mutability":"mutable","name":"input","nameLocation":"6834:5:16","nodeType":"VariableDeclaration","scope":6811,"src":"6816:23:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$3_memory_ptr","typeString":"uint256[3]"},"typeName":{"baseType":{"id":6778,"name":"uint256","nodeType":"ElementaryTypeName","src":"6816:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6779,"length":{"hexValue":"33","id":6777,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6824:1:16","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"ArrayTypeName","src":"6816:10:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$3_storage_ptr","typeString":"uint256[3]"}},"visibility":"internal"}],"id":6781,"nodeType":"VariableDeclarationStatement","src":"6816:23:16"},{"expression":{"id":6787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6782,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6780,"src":"6849:5:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$3_memory_ptr","typeString":"uint256[3] memory"}},"id":6784,"indexExpression":{"hexValue":"30","id":6783,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6855:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6849:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6785,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6766,"src":"6860:1:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6786,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6862:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"6860:3:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6849:14:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6788,"nodeType":"ExpressionStatement","src":"6849:14:16"},{"expression":{"id":6794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6789,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6780,"src":"6873:5:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$3_memory_ptr","typeString":"uint256[3] memory"}},"id":6791,"indexExpression":{"hexValue":"31","id":6790,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6879:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6873:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6792,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6766,"src":"6884:1:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6793,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6886:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"6884:3:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6873:14:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6795,"nodeType":"ExpressionStatement","src":"6873:14:16"},{"expression":{"id":6801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6796,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6780,"src":"6897:5:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$3_memory_ptr","typeString":"uint256[3] memory"}},"id":6798,"indexExpression":{"hexValue":"32","id":6797,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6903:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6897:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6799,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6769,"src":"6908:1:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":6800,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6910:5:16","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"6908:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6897:18:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6802,"nodeType":"ExpressionStatement","src":"6897:18:16"},{"assignments":[6804],"declarations":[{"constant":false,"id":6804,"mutability":"mutable","name":"success","nameLocation":"6930:7:16","nodeType":"VariableDeclaration","scope":6811,"src":"6925:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6803,"name":"bool","nodeType":"ElementaryTypeName","src":"6925:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":6805,"nodeType":"VariableDeclarationStatement","src":"6925:12:16"},{"AST":{"nodeType":"YulBlock","src":"6956:80:16","statements":[{"nodeType":"YulAssignment","src":"6970:56:16","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"6992:3:16"},"nodeType":"YulFunctionCall","src":"6992:5:16"},{"kind":"number","nodeType":"YulLiteral","src":"6999:1:16","type":"","value":"7"},{"name":"input","nodeType":"YulIdentifier","src":"7002:5:16"},{"kind":"number","nodeType":"YulLiteral","src":"7009:4:16","type":"","value":"0x60"},{"name":"dest","nodeType":"YulIdentifier","src":"7015:4:16"},{"kind":"number","nodeType":"YulLiteral","src":"7021:4:16","type":"","value":"0x40"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"6981:10:16"},"nodeType":"YulFunctionCall","src":"6981:45:16"},"variableNames":[{"name":"success","nodeType":"YulIdentifier","src":"6970:7:16"}]}]},"evmVersion":"london","externalReferences":[{"declaration":6772,"isOffset":false,"isSlot":false,"src":"7015:4:16","valueSize":1},{"declaration":6780,"isOffset":false,"isSlot":false,"src":"7002:5:16","valueSize":1},{"declaration":6804,"isOffset":false,"isSlot":false,"src":"6970:7:16","valueSize":1}],"id":6806,"nodeType":"InlineAssembly","src":"6947:89:16"},{"expression":{"arguments":[{"id":6808,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6804,"src":"7053:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6807,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7045:7:16","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":6809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7045:16:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6810,"nodeType":"ExpressionStatement","src":"7045:16:16"}]},"id":6812,"implemented":true,"kind":"function","modifiers":[],"name":"point_mul_into_dest","nameLocation":"6690:19:16","nodeType":"FunctionDefinition","parameters":{"id":6773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6766,"mutability":"mutable","name":"p","nameLocation":"6734:1:16","nodeType":"VariableDeclaration","scope":6812,"src":"6719:16:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6765,"nodeType":"UserDefinedTypeName","pathNode":{"id":6764,"name":"G1Point","nameLocations":["6719:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"6719:7:16"},"referencedDeclaration":6027,"src":"6719:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":6769,"mutability":"mutable","name":"s","nameLocation":"6755:1:16","nodeType":"VariableDeclaration","scope":6812,"src":"6745:11:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":6768,"nodeType":"UserDefinedTypeName","pathNode":{"id":6767,"name":"Fr","nameLocations":["6745:2:16"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"6745:2:16"},"referencedDeclaration":6030,"src":"6745:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"},{"constant":false,"id":6772,"mutability":"mutable","name":"dest","nameLocation":"6781:4:16","nodeType":"VariableDeclaration","scope":6812,"src":"6766:19:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6771,"nodeType":"UserDefinedTypeName","pathNode":{"id":6770,"name":"G1Point","nameLocations":["6766:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"6766:7:16"},"referencedDeclaration":6027,"src":"6766:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"src":"6709:82:16"},"returnParameters":{"id":6774,"nodeType":"ParameterList","parameters":[],"src":"6806:0:16"},"scope":7049,"src":"6681:387:16","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6975,"nodeType":"Block","src":"7162:785:16","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6826,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6816,"src":"7180:2:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[] memory"}},"id":6827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7183:6:16","memberName":"length","nodeType":"MemberAccess","src":"7180:9:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":6828,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6820,"src":"7193:2:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G2Point memory[] memory"}},"id":6829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7196:6:16","memberName":"length","nodeType":"MemberAccess","src":"7193:9:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7180:22:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6825,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7172:7:16","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":6831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7172:31:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6832,"nodeType":"ExpressionStatement","src":"7172:31:16"},{"assignments":[6834],"declarations":[{"constant":false,"id":6834,"mutability":"mutable","name":"elements","nameLocation":"7221:8:16","nodeType":"VariableDeclaration","scope":6975,"src":"7213:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6833,"name":"uint256","nodeType":"ElementaryTypeName","src":"7213:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6837,"initialValue":{"expression":{"id":6835,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6816,"src":"7232:2:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[] memory"}},"id":6836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7235:6:16","memberName":"length","nodeType":"MemberAccess","src":"7232:9:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7213:28:16"},{"assignments":[6839],"declarations":[{"constant":false,"id":6839,"mutability":"mutable","name":"inputSize","nameLocation":"7259:9:16","nodeType":"VariableDeclaration","scope":6975,"src":"7251:17:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6838,"name":"uint256","nodeType":"ElementaryTypeName","src":"7251:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6843,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6840,"name":"elements","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6834,"src":"7271:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"36","id":6841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7282:1:16","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"7271:12:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7251:32:16"},{"assignments":[6848],"declarations":[{"constant":false,"id":6848,"mutability":"mutable","name":"input","nameLocation":"7310:5:16","nodeType":"VariableDeclaration","scope":6975,"src":"7293:22:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6846,"name":"uint256","nodeType":"ElementaryTypeName","src":"7293:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6847,"nodeType":"ArrayTypeName","src":"7293:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":6854,"initialValue":{"arguments":[{"id":6852,"name":"inputSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6839,"src":"7332:9:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6851,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"7318:13:16","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":6849,"name":"uint256","nodeType":"ElementaryTypeName","src":"7322:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6850,"nodeType":"ArrayTypeName","src":"7322:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":6853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7318:24:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"7293:49:16"},{"body":{"id":6952,"nodeType":"Block","src":"7388:322:16","statements":[{"expression":{"id":6873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6862,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6848,"src":"7402:5:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6868,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6863,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"7408:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"36","id":6864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7412:1:16","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"7408:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30","id":6866,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7416:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7408:9:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7402:16:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":6869,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6816,"src":"7421:2:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[] memory"}},"id":6871,"indexExpression":{"id":6870,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"7424:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7421:5:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6872,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7427:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"7421:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7402:26:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6874,"nodeType":"ExpressionStatement","src":"7402:26:16"},{"expression":{"id":6886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6875,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6848,"src":"7442:5:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6881,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6876,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"7448:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"36","id":6877,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7452:1:16","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"7448:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":6879,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7456:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7448:9:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7442:16:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":6882,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6816,"src":"7461:2:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[] memory"}},"id":6884,"indexExpression":{"id":6883,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"7464:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7461:5:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":6885,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7467:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"7461:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7442:26:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6887,"nodeType":"ExpressionStatement","src":"7442:26:16"},{"expression":{"id":6901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6888,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6848,"src":"7482:5:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6894,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6889,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"7488:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"36","id":6890,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7492:1:16","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"7488:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32","id":6892,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7496:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"7488:9:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7482:16:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"baseExpression":{"id":6895,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6820,"src":"7501:2:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G2Point memory[] memory"}},"id":6897,"indexExpression":{"id":6896,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"7504:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7501:5:16","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"id":6898,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7507:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6227,"src":"7501:7:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":6900,"indexExpression":{"hexValue":"30","id":6899,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7509:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7501:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7482:29:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6902,"nodeType":"ExpressionStatement","src":"7482:29:16"},{"expression":{"id":6916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6903,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6848,"src":"7525:5:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6909,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6904,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"7531:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"36","id":6905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7535:1:16","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"7531:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"33","id":6907,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7539:1:16","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"7531:9:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7525:16:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"baseExpression":{"id":6910,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6820,"src":"7544:2:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G2Point memory[] memory"}},"id":6912,"indexExpression":{"id":6911,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"7547:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7544:5:16","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"id":6913,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7550:1:16","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6227,"src":"7544:7:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":6915,"indexExpression":{"hexValue":"31","id":6914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7552:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7544:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7525:29:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6917,"nodeType":"ExpressionStatement","src":"7525:29:16"},{"expression":{"id":6931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6918,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6848,"src":"7568:5:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6924,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6919,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"7574:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"36","id":6920,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7578:1:16","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"7574:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"34","id":6922,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7582:1:16","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"7574:9:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7568:16:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"baseExpression":{"id":6925,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6820,"src":"7587:2:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G2Point memory[] memory"}},"id":6927,"indexExpression":{"id":6926,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"7590:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7587:5:16","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"id":6928,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7593:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6231,"src":"7587:7:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":6930,"indexExpression":{"hexValue":"30","id":6929,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7595:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7587:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7568:29:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6932,"nodeType":"ExpressionStatement","src":"7568:29:16"},{"expression":{"id":6946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6933,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6848,"src":"7611:5:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6939,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6934,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"7617:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"36","id":6935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7621:1:16","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"7617:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"35","id":6937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7625:1:16","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"7617:9:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7611:16:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"baseExpression":{"id":6940,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6820,"src":"7630:2:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G2Point memory[] memory"}},"id":6942,"indexExpression":{"id":6941,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"7633:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7630:5:16","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"id":6943,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7636:1:16","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6231,"src":"7630:7:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":6945,"indexExpression":{"hexValue":"31","id":6944,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7638:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7630:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7611:29:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6947,"nodeType":"ExpressionStatement","src":"7611:29:16"},{"id":6951,"nodeType":"UncheckedBlock","src":"7654:46:16","statements":[{"expression":{"id":6949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7682:3:16","subExpression":{"id":6948,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"7684:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6950,"nodeType":"ExpressionStatement","src":"7682:3:16"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6859,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6856,"src":"7372:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6860,"name":"elements","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6834,"src":"7376:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7372:12:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6953,"initializationExpression":{"assignments":[6856],"declarations":[{"constant":false,"id":6856,"mutability":"mutable","name":"i","nameLocation":"7365:1:16","nodeType":"VariableDeclaration","scope":6953,"src":"7357:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6855,"name":"uint256","nodeType":"ElementaryTypeName","src":"7357:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6858,"initialValue":{"hexValue":"30","id":6857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7369:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7357:13:16"},"nodeType":"ForStatement","src":"7352:358:16"},{"assignments":[6959],"declarations":[{"constant":false,"id":6959,"mutability":"mutable","name":"out","nameLocation":"7737:3:16","nodeType":"VariableDeclaration","scope":6975,"src":"7719:21:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$1_memory_ptr","typeString":"uint256[1]"},"typeName":{"baseType":{"id":6957,"name":"uint256","nodeType":"ElementaryTypeName","src":"7719:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6958,"length":{"hexValue":"31","id":6956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7727:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"ArrayTypeName","src":"7719:10:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$1_storage_ptr","typeString":"uint256[1]"}},"visibility":"internal"}],"id":6960,"nodeType":"VariableDeclarationStatement","src":"7719:21:16"},{"assignments":[6962],"declarations":[{"constant":false,"id":6962,"mutability":"mutable","name":"success","nameLocation":"7755:7:16","nodeType":"VariableDeclaration","scope":6975,"src":"7750:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6961,"name":"bool","nodeType":"ElementaryTypeName","src":"7750:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":6963,"nodeType":"VariableDeclarationStatement","src":"7750:12:16"},{"AST":{"nodeType":"YulBlock","src":"7781:106:16","statements":[{"nodeType":"YulAssignment","src":"7795:82:16","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"7817:3:16"},"nodeType":"YulFunctionCall","src":"7817:5:16"},{"kind":"number","nodeType":"YulLiteral","src":"7824:1:16","type":"","value":"8"},{"arguments":[{"name":"input","nodeType":"YulIdentifier","src":"7831:5:16"},{"kind":"number","nodeType":"YulLiteral","src":"7838:4:16","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7827:3:16"},"nodeType":"YulFunctionCall","src":"7827:16:16"},{"arguments":[{"name":"inputSize","nodeType":"YulIdentifier","src":"7849:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"7860:4:16","type":"","value":"0x20"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"7845:3:16"},"nodeType":"YulFunctionCall","src":"7845:20:16"},{"name":"out","nodeType":"YulIdentifier","src":"7867:3:16"},{"kind":"number","nodeType":"YulLiteral","src":"7872:4:16","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"7806:10:16"},"nodeType":"YulFunctionCall","src":"7806:71:16"},"variableNames":[{"name":"success","nodeType":"YulIdentifier","src":"7795:7:16"}]}]},"evmVersion":"london","externalReferences":[{"declaration":6848,"isOffset":false,"isSlot":false,"src":"7831:5:16","valueSize":1},{"declaration":6839,"isOffset":false,"isSlot":false,"src":"7849:9:16","valueSize":1},{"declaration":6959,"isOffset":false,"isSlot":false,"src":"7867:3:16","valueSize":1},{"declaration":6962,"isOffset":false,"isSlot":false,"src":"7795:7:16","valueSize":1}],"id":6964,"nodeType":"InlineAssembly","src":"7772:115:16"},{"expression":{"arguments":[{"id":6966,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6962,"src":"7904:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6965,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7896:7:16","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":6967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7896:16:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6968,"nodeType":"ExpressionStatement","src":"7896:16:16"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":6969,"name":"out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6959,"src":"7929:3:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$1_memory_ptr","typeString":"uint256[1] memory"}},"id":6971,"indexExpression":{"hexValue":"30","id":6970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7933:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7929:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6972,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7939:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7929:11:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6824,"id":6974,"nodeType":"Return","src":"7922:18:16"}]},"id":6976,"implemented":true,"kind":"function","modifiers":[],"name":"pairing","nameLocation":"7083:7:16","nodeType":"FunctionDefinition","parameters":{"id":6821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6816,"mutability":"mutable","name":"p1","nameLocation":"7108:2:16","nodeType":"VariableDeclaration","scope":6976,"src":"7091:19:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G1Point[]"},"typeName":{"baseType":{"id":6814,"nodeType":"UserDefinedTypeName","pathNode":{"id":6813,"name":"G1Point","nameLocations":["7091:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"7091:7:16"},"referencedDeclaration":6027,"src":"7091:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"id":6815,"nodeType":"ArrayTypeName","src":"7091:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$dyn_storage_ptr","typeString":"struct PairingsBn254.G1Point[]"}},"visibility":"internal"},{"constant":false,"id":6820,"mutability":"mutable","name":"p2","nameLocation":"7129:2:16","nodeType":"VariableDeclaration","scope":6976,"src":"7112:19:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G2Point[]"},"typeName":{"baseType":{"id":6818,"nodeType":"UserDefinedTypeName","pathNode":{"id":6817,"name":"G2Point","nameLocations":["7112:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6232,"src":"7112:7:16"},"referencedDeclaration":6232,"src":"7112:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_storage_ptr","typeString":"struct PairingsBn254.G2Point"}},"id":6819,"nodeType":"ArrayTypeName","src":"7112:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_storage_$dyn_storage_ptr","typeString":"struct PairingsBn254.G2Point[]"}},"visibility":"internal"}],"src":"7090:42:16"},"returnParameters":{"id":6824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6823,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6976,"src":"7156:4:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6822,"name":"bool","nodeType":"ElementaryTypeName","src":"7156:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7155:6:16"},"scope":7049,"src":"7074:873:16","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7047,"nodeType":"Block","src":"8180:215:16","statements":[{"assignments":[6998],"declarations":[{"constant":false,"id":6998,"mutability":"mutable","name":"p1","nameLocation":"8207:2:16","nodeType":"VariableDeclaration","scope":7047,"src":"8190:19:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G1Point[]"},"typeName":{"baseType":{"id":6996,"nodeType":"UserDefinedTypeName","pathNode":{"id":6995,"name":"G1Point","nameLocations":["8190:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"8190:7:16"},"referencedDeclaration":6027,"src":"8190:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"id":6997,"nodeType":"ArrayTypeName","src":"8190:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$dyn_storage_ptr","typeString":"struct PairingsBn254.G1Point[]"}},"visibility":"internal"}],"id":7005,"initialValue":{"arguments":[{"hexValue":"32","id":7003,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8226:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"id":7002,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8212:13:16","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_G1Point_$6027_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.G1Point memory[] memory)"},"typeName":{"baseType":{"id":7000,"nodeType":"UserDefinedTypeName","pathNode":{"id":6999,"name":"G1Point","nameLocations":["8216:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"8216:7:16"},"referencedDeclaration":6027,"src":"8216:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"id":7001,"nodeType":"ArrayTypeName","src":"8216:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_storage_$dyn_storage_ptr","typeString":"struct PairingsBn254.G1Point[]"}}},"id":7004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8212:16:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"8190:38:16"},{"assignments":[7010],"declarations":[{"constant":false,"id":7010,"mutability":"mutable","name":"p2","nameLocation":"8255:2:16","nodeType":"VariableDeclaration","scope":7047,"src":"8238:19:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G2Point[]"},"typeName":{"baseType":{"id":7008,"nodeType":"UserDefinedTypeName","pathNode":{"id":7007,"name":"G2Point","nameLocations":["8238:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6232,"src":"8238:7:16"},"referencedDeclaration":6232,"src":"8238:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_storage_ptr","typeString":"struct PairingsBn254.G2Point"}},"id":7009,"nodeType":"ArrayTypeName","src":"8238:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_storage_$dyn_storage_ptr","typeString":"struct PairingsBn254.G2Point[]"}},"visibility":"internal"}],"id":7017,"initialValue":{"arguments":[{"hexValue":"32","id":7015,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8274:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"id":7014,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8260:13:16","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_G2Point_$6232_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct PairingsBn254.G2Point memory[] memory)"},"typeName":{"baseType":{"id":7012,"nodeType":"UserDefinedTypeName","pathNode":{"id":7011,"name":"G2Point","nameLocations":["8264:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6232,"src":"8264:7:16"},"referencedDeclaration":6232,"src":"8264:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_storage_ptr","typeString":"struct PairingsBn254.G2Point"}},"id":7013,"nodeType":"ArrayTypeName","src":"8264:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_storage_$dyn_storage_ptr","typeString":"struct PairingsBn254.G2Point[]"}}},"id":7016,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8260:16:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G2Point memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"8238:38:16"},{"expression":{"id":7022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7018,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6998,"src":"8286:2:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[] memory"}},"id":7020,"indexExpression":{"hexValue":"30","id":7019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8289:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8286:5:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7021,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"8294:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"8286:10:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":7023,"nodeType":"ExpressionStatement","src":"8286:10:16"},{"expression":{"id":7028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7024,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6998,"src":"8306:2:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[] memory"}},"id":7026,"indexExpression":{"hexValue":"31","id":7025,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8309:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8306:5:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7027,"name":"b1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6986,"src":"8314:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"src":"8306:10:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":7029,"nodeType":"ExpressionStatement","src":"8306:10:16"},{"expression":{"id":7034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7030,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7010,"src":"8326:2:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G2Point memory[] memory"}},"id":7032,"indexExpression":{"hexValue":"30","id":7031,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8329:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8326:5:16","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7033,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6983,"src":"8334:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"src":"8326:10:16","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"id":7035,"nodeType":"ExpressionStatement","src":"8326:10:16"},{"expression":{"id":7040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7036,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7010,"src":"8346:2:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G2Point memory[] memory"}},"id":7038,"indexExpression":{"hexValue":"31","id":7037,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8349:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8346:5:16","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7039,"name":"b2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6989,"src":"8354:2:16","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"src":"8346:10:16","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point memory"}},"id":7041,"nodeType":"ExpressionStatement","src":"8346:10:16"},{"expression":{"arguments":[{"id":7043,"name":"p1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6998,"src":"8381:2:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[] memory"}},{"id":7044,"name":"p2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7010,"src":"8385:2:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G2Point memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_G1Point_$6027_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G1Point memory[] memory"},{"typeIdentifier":"t_array$_t_struct$_G2Point_$6232_memory_ptr_$dyn_memory_ptr","typeString":"struct PairingsBn254.G2Point memory[] memory"}],"id":7042,"name":"pairing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6976,"src":"8373:7:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_struct$_G1Point_$6027_memory_ptr_$dyn_memory_ptr_$_t_array$_t_struct$_G2Point_$6232_memory_ptr_$dyn_memory_ptr_$returns$_t_bool_$","typeString":"function (struct PairingsBn254.G1Point memory[] memory,struct PairingsBn254.G2Point memory[] memory) view returns (bool)"}},"id":7045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8373:15:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6993,"id":7046,"nodeType":"Return","src":"8366:22:16"}]},"documentation":{"id":6977,"nodeType":"StructuredDocumentation","src":"7953:57:16","text":"Convenience method for a pairing check for two pairs."},"id":7048,"implemented":true,"kind":"function","modifiers":[],"name":"pairingProd2","nameLocation":"8024:12:16","nodeType":"FunctionDefinition","parameters":{"id":6990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6980,"mutability":"mutable","name":"a1","nameLocation":"8061:2:16","nodeType":"VariableDeclaration","scope":7048,"src":"8046:17:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6979,"nodeType":"UserDefinedTypeName","pathNode":{"id":6978,"name":"G1Point","nameLocations":["8046:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"8046:7:16"},"referencedDeclaration":6027,"src":"8046:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":6983,"mutability":"mutable","name":"a2","nameLocation":"8088:2:16","nodeType":"VariableDeclaration","scope":7048,"src":"8073:17:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point"},"typeName":{"id":6982,"nodeType":"UserDefinedTypeName","pathNode":{"id":6981,"name":"G2Point","nameLocations":["8073:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6232,"src":"8073:7:16"},"referencedDeclaration":6232,"src":"8073:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_storage_ptr","typeString":"struct PairingsBn254.G2Point"}},"visibility":"internal"},{"constant":false,"id":6986,"mutability":"mutable","name":"b1","nameLocation":"8115:2:16","nodeType":"VariableDeclaration","scope":7048,"src":"8100:17:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":6985,"nodeType":"UserDefinedTypeName","pathNode":{"id":6984,"name":"G1Point","nameLocations":["8100:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"8100:7:16"},"referencedDeclaration":6027,"src":"8100:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"},{"constant":false,"id":6989,"mutability":"mutable","name":"b2","nameLocation":"8142:2:16","nodeType":"VariableDeclaration","scope":7048,"src":"8127:17:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_memory_ptr","typeString":"struct PairingsBn254.G2Point"},"typeName":{"id":6988,"nodeType":"UserDefinedTypeName","pathNode":{"id":6987,"name":"G2Point","nameLocations":["8127:7:16"],"nodeType":"IdentifierPath","referencedDeclaration":6232,"src":"8127:7:16"},"referencedDeclaration":6232,"src":"8127:7:16","typeDescriptions":{"typeIdentifier":"t_struct$_G2Point_$6232_storage_ptr","typeString":"struct PairingsBn254.G2Point"}},"visibility":"internal"}],"src":"8036:114:16"},"returnParameters":{"id":6993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6992,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7048,"src":"8174:4:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6991,"name":"bool","nodeType":"ElementaryTypeName","src":"8174:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8173:6:16"},"scope":7049,"src":"8015:380:16","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":7050,"src":"72:8325:16","usedErrors":[]}],"src":"47:8351:16"},"id":16},"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PriorityQueue.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PriorityQueue.sol","exportedSymbols":{"PriorityOperation":[7058],"PriorityQueue":[7237]},"id":7238,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":7051,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"47:23:17"},{"canonicalName":"PriorityOperation","id":7058,"members":[{"constant":false,"id":7053,"mutability":"mutable","name":"canonicalTxHash","nameLocation":"604:15:17","nodeType":"VariableDeclaration","scope":7058,"src":"596:23:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7052,"name":"bytes32","nodeType":"ElementaryTypeName","src":"596:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7055,"mutability":"mutable","name":"expirationBlock","nameLocation":"632:15:17","nodeType":"VariableDeclaration","scope":7058,"src":"625:22:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":7054,"name":"uint64","nodeType":"ElementaryTypeName","src":"625:6:17","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":7057,"mutability":"mutable","name":"layer2Tip","nameLocation":"661:9:17","nodeType":"VariableDeclaration","scope":7058,"src":"653:17:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"},"typeName":{"id":7056,"name":"uint192","nodeType":"ElementaryTypeName","src":"653:7:17","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"visibility":"internal"}],"name":"PriorityOperation","nameLocation":"572:17:17","nodeType":"StructDefinition","scope":7238,"src":"565:108:17","visibility":"public"},{"abstract":false,"baseContracts":[],"canonicalName":"PriorityQueue","contractDependencies":[],"contractKind":"library","documentation":{"id":7059,"nodeType":"StructuredDocumentation","src":"675:188:17","text":"@author Matter Labs\n @dev The library provides the API to interact with the priority queue container\n @dev Order of processing operations from queue - FIFO (Fist in - first out)"},"fullyImplemented":true,"id":7237,"linearizedBaseContracts":[7237],"name":"PriorityQueue","nameLocation":"871:13:17","nodeType":"ContractDefinition","nodes":[{"global":false,"id":7063,"libraryName":{"id":7060,"name":"PriorityQueue","nameLocations":["897:13:17"],"nodeType":"IdentifierPath","referencedDeclaration":7237,"src":"897:13:17"},"nodeType":"UsingForDirective","src":"891:30:17","typeName":{"id":7062,"nodeType":"UserDefinedTypeName","pathNode":{"id":7061,"name":"Queue","nameLocations":["915:5:17"],"nodeType":"IdentifierPath","referencedDeclaration":7073,"src":"915:5:17"},"referencedDeclaration":7073,"src":"915:5:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue"}}},{"canonicalName":"PriorityQueue.Queue","id":7073,"members":[{"constant":false,"id":7068,"mutability":"mutable","name":"data","nameLocation":"1272:4:17","nodeType":"VariableDeclaration","scope":7073,"src":"1234:42:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_PriorityOperation_$7058_storage_$","typeString":"mapping(uint256 => struct PriorityOperation)"},"typeName":{"id":7067,"keyType":{"id":7064,"name":"uint256","nodeType":"ElementaryTypeName","src":"1242:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1234:37:17","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_PriorityOperation_$7058_storage_$","typeString":"mapping(uint256 => struct PriorityOperation)"},"valueType":{"id":7066,"nodeType":"UserDefinedTypeName","pathNode":{"id":7065,"name":"PriorityOperation","nameLocations":["1253:17:17"],"nodeType":"IdentifierPath","referencedDeclaration":7058,"src":"1253:17:17"},"referencedDeclaration":7058,"src":"1253:17:17","typeDescriptions":{"typeIdentifier":"t_struct$_PriorityOperation_$7058_storage_ptr","typeString":"struct PriorityOperation"}}},"visibility":"internal"},{"constant":false,"id":7070,"mutability":"mutable","name":"head","nameLocation":"1294:4:17","nodeType":"VariableDeclaration","scope":7073,"src":"1286:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7069,"name":"uint256","nodeType":"ElementaryTypeName","src":"1286:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7072,"mutability":"mutable","name":"tail","nameLocation":"1316:4:17","nodeType":"VariableDeclaration","scope":7073,"src":"1308:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7071,"name":"uint256","nodeType":"ElementaryTypeName","src":"1308:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Queue","nameLocation":"1218:5:17","nodeType":"StructDefinition","scope":7237,"src":"1211:116:17","visibility":"public"},{"body":{"id":7085,"nodeType":"Block","src":"1595:35:17","statements":[{"expression":{"expression":{"id":7082,"name":"_queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7077,"src":"1612:6:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue storage pointer"}},"id":7083,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1619:4:17","memberName":"tail","nodeType":"MemberAccess","referencedDeclaration":7072,"src":"1612:11:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7081,"id":7084,"nodeType":"Return","src":"1605:18:17"}]},"documentation":{"id":7074,"nodeType":"StructuredDocumentation","src":"1333:164:17","text":"@return Index of the oldest priority operation that wasn't processed yet\n @notice Returns zero if and only if no operations were processed from the queue"},"id":7086,"implemented":true,"kind":"function","modifiers":[],"name":"getFirstUnprocessedPriorityTx","nameLocation":"1511:29:17","nodeType":"FunctionDefinition","parameters":{"id":7078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7077,"mutability":"mutable","name":"_queue","nameLocation":"1555:6:17","nodeType":"VariableDeclaration","scope":7086,"src":"1541:20:17","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue"},"typeName":{"id":7076,"nodeType":"UserDefinedTypeName","pathNode":{"id":7075,"name":"Queue","nameLocations":["1541:5:17"],"nodeType":"IdentifierPath","referencedDeclaration":7073,"src":"1541:5:17"},"referencedDeclaration":7073,"src":"1541:5:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue"}},"visibility":"internal"}],"src":"1540:22:17"},"returnParameters":{"id":7081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7080,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7086,"src":"1586:7:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7079,"name":"uint256","nodeType":"ElementaryTypeName","src":"1586:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1585:9:17"},"scope":7237,"src":"1502:128:17","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7098,"nodeType":"Block","src":"1843:35:17","statements":[{"expression":{"expression":{"id":7095,"name":"_queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7090,"src":"1860:6:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue storage pointer"}},"id":7096,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1867:4:17","memberName":"head","nodeType":"MemberAccess","referencedDeclaration":7070,"src":"1860:11:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7094,"id":7097,"nodeType":"Return","src":"1853:18:17"}]},"documentation":{"id":7087,"nodeType":"StructuredDocumentation","src":"1636:119:17","text":"@return The total number of priority operations that were added to the priority queue, including all processed ones"},"id":7099,"implemented":true,"kind":"function","modifiers":[],"name":"getTotalPriorityTxs","nameLocation":"1769:19:17","nodeType":"FunctionDefinition","parameters":{"id":7091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7090,"mutability":"mutable","name":"_queue","nameLocation":"1803:6:17","nodeType":"VariableDeclaration","scope":7099,"src":"1789:20:17","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue"},"typeName":{"id":7089,"nodeType":"UserDefinedTypeName","pathNode":{"id":7088,"name":"Queue","nameLocations":["1789:5:17"],"nodeType":"IdentifierPath","referencedDeclaration":7073,"src":"1789:5:17"},"referencedDeclaration":7073,"src":"1789:5:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue"}},"visibility":"internal"}],"src":"1788:22:17"},"returnParameters":{"id":7094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7093,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7099,"src":"1834:7:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7092,"name":"uint256","nodeType":"ElementaryTypeName","src":"1834:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1833:9:17"},"scope":7237,"src":"1760:118:17","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7117,"nodeType":"Block","src":"2043:58:17","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7110,"name":"_queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7103,"src":"2068:6:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue storage pointer"}},"id":7111,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2075:4:17","memberName":"head","nodeType":"MemberAccess","referencedDeclaration":7070,"src":"2068:11:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":7112,"name":"_queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7103,"src":"2082:6:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue storage pointer"}},"id":7113,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2089:4:17","memberName":"tail","nodeType":"MemberAccess","referencedDeclaration":7072,"src":"2082:11:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2068:25:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7109,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2060:7:17","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":7108,"name":"uint256","nodeType":"ElementaryTypeName","src":"2060:7:17","typeDescriptions":{}}},"id":7115,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2060:34:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7107,"id":7116,"nodeType":"Return","src":"2053:41:17"}]},"documentation":{"id":7100,"nodeType":"StructuredDocumentation","src":"1884:83:17","text":"@return The total number of unprocessed priority operations in a priority queue"},"id":7118,"implemented":true,"kind":"function","modifiers":[],"name":"getSize","nameLocation":"1981:7:17","nodeType":"FunctionDefinition","parameters":{"id":7104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7103,"mutability":"mutable","name":"_queue","nameLocation":"2003:6:17","nodeType":"VariableDeclaration","scope":7118,"src":"1989:20:17","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue"},"typeName":{"id":7102,"nodeType":"UserDefinedTypeName","pathNode":{"id":7101,"name":"Queue","nameLocations":["1989:5:17"],"nodeType":"IdentifierPath","referencedDeclaration":7073,"src":"1989:5:17"},"referencedDeclaration":7073,"src":"1989:5:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue"}},"visibility":"internal"}],"src":"1988:22:17"},"returnParameters":{"id":7107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7106,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7118,"src":"2034:7:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7105,"name":"uint256","nodeType":"ElementaryTypeName","src":"2034:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2033:9:17"},"scope":7237,"src":"1972:129:17","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7133,"nodeType":"Block","src":"2241:50:17","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7127,"name":"_queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7122,"src":"2258:6:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue storage pointer"}},"id":7128,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2265:4:17","memberName":"head","nodeType":"MemberAccess","referencedDeclaration":7070,"src":"2258:11:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":7129,"name":"_queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7122,"src":"2273:6:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue storage pointer"}},"id":7130,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2280:4:17","memberName":"tail","nodeType":"MemberAccess","referencedDeclaration":7072,"src":"2273:11:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2258:26:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7126,"id":7132,"nodeType":"Return","src":"2251:33:17"}]},"documentation":{"id":7119,"nodeType":"StructuredDocumentation","src":"2107:61:17","text":"@return Whether the priority queue contains no operations"},"id":7134,"implemented":true,"kind":"function","modifiers":[],"name":"isEmpty","nameLocation":"2182:7:17","nodeType":"FunctionDefinition","parameters":{"id":7123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7122,"mutability":"mutable","name":"_queue","nameLocation":"2204:6:17","nodeType":"VariableDeclaration","scope":7134,"src":"2190:20:17","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue"},"typeName":{"id":7121,"nodeType":"UserDefinedTypeName","pathNode":{"id":7120,"name":"Queue","nameLocations":["2190:5:17"],"nodeType":"IdentifierPath","referencedDeclaration":7073,"src":"2190:5:17"},"referencedDeclaration":7073,"src":"2190:5:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue"}},"visibility":"internal"}],"src":"2189:22:17"},"returnParameters":{"id":7126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7125,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7134,"src":"2235:4:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7124,"name":"bool","nodeType":"ElementaryTypeName","src":"2235:4:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2234:6:17"},"scope":7237,"src":"2173:118:17","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7165,"nodeType":"Block","src":"2459:194:17","statements":[{"assignments":[7145],"declarations":[{"constant":false,"id":7145,"mutability":"mutable","name":"head","nameLocation":"2555:4:17","nodeType":"VariableDeclaration","scope":7165,"src":"2547:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7144,"name":"uint256","nodeType":"ElementaryTypeName","src":"2547:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7148,"initialValue":{"expression":{"id":7146,"name":"_queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7138,"src":"2562:6:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue storage pointer"}},"id":7147,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2569:4:17","memberName":"head","nodeType":"MemberAccess","referencedDeclaration":7070,"src":"2562:11:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2547:26:17"},{"expression":{"id":7155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":7149,"name":"_queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7138,"src":"2584:6:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue storage pointer"}},"id":7152,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2591:4:17","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":7068,"src":"2584:11:17","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_PriorityOperation_$7058_storage_$","typeString":"mapping(uint256 => struct PriorityOperation storage ref)"}},"id":7153,"indexExpression":{"id":7151,"name":"head","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7145,"src":"2596:4:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2584:17:17","typeDescriptions":{"typeIdentifier":"t_struct$_PriorityOperation_$7058_storage","typeString":"struct PriorityOperation storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7154,"name":"_operation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7141,"src":"2604:10:17","typeDescriptions":{"typeIdentifier":"t_struct$_PriorityOperation_$7058_memory_ptr","typeString":"struct PriorityOperation memory"}},"src":"2584:30:17","typeDescriptions":{"typeIdentifier":"t_struct$_PriorityOperation_$7058_storage","typeString":"struct PriorityOperation storage ref"}},"id":7156,"nodeType":"ExpressionStatement","src":"2584:30:17"},{"expression":{"id":7163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":7157,"name":"_queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7138,"src":"2624:6:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue storage pointer"}},"id":7159,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2631:4:17","memberName":"head","nodeType":"MemberAccess","referencedDeclaration":7070,"src":"2624:11:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7160,"name":"head","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7145,"src":"2638:4:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":7161,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2645:1:17","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2638:8:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2624:22:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7164,"nodeType":"ExpressionStatement","src":"2624:22:17"}]},"documentation":{"id":7135,"nodeType":"StructuredDocumentation","src":"2297:71:17","text":"@notice Add the priority operation to the end of the priority queue"},"id":7166,"implemented":true,"kind":"function","modifiers":[],"name":"pushBack","nameLocation":"2382:8:17","nodeType":"FunctionDefinition","parameters":{"id":7142,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7138,"mutability":"mutable","name":"_queue","nameLocation":"2405:6:17","nodeType":"VariableDeclaration","scope":7166,"src":"2391:20:17","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue"},"typeName":{"id":7137,"nodeType":"UserDefinedTypeName","pathNode":{"id":7136,"name":"Queue","nameLocations":["2391:5:17"],"nodeType":"IdentifierPath","referencedDeclaration":7073,"src":"2391:5:17"},"referencedDeclaration":7073,"src":"2391:5:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue"}},"visibility":"internal"},{"constant":false,"id":7141,"mutability":"mutable","name":"_operation","nameLocation":"2438:10:17","nodeType":"VariableDeclaration","scope":7166,"src":"2413:35:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PriorityOperation_$7058_memory_ptr","typeString":"struct PriorityOperation"},"typeName":{"id":7140,"nodeType":"UserDefinedTypeName","pathNode":{"id":7139,"name":"PriorityOperation","nameLocations":["2413:17:17"],"nodeType":"IdentifierPath","referencedDeclaration":7058,"src":"2413:17:17"},"referencedDeclaration":7058,"src":"2413:17:17","typeDescriptions":{"typeIdentifier":"t_struct$_PriorityOperation_$7058_storage_ptr","typeString":"struct PriorityOperation"}},"visibility":"internal"}],"src":"2390:59:17"},"returnParameters":{"id":7143,"nodeType":"ParameterList","parameters":[],"src":"2459:0:17"},"scope":7237,"src":"2373:280:17","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7190,"nodeType":"Block","src":"2817:117:17","statements":[{"expression":{"arguments":[{"id":7180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2835:17:17","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7177,"name":"_queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7170,"src":"2836:6:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue storage pointer"}},"id":7178,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2843:7:17","memberName":"isEmpty","nodeType":"MemberAccess","referencedDeclaration":7134,"src":"2836:14:17","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Queue_$7073_storage_ptr_$returns$_t_bool_$bound_to$_t_struct$_Queue_$7073_storage_ptr_$","typeString":"function (struct PriorityQueue.Queue storage pointer) view returns (bool)"}},"id":7179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2836:16:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"44","id":7181,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2854:3:17","typeDescriptions":{"typeIdentifier":"t_stringliteral_6c3fd336b49dcb1c57dd4fbeaf5f898320b0da06a5ef64e798c6497600bb79f2","typeString":"literal_string \"D\""},"value":"D"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6c3fd336b49dcb1c57dd4fbeaf5f898320b0da06a5ef64e798c6497600bb79f2","typeString":"literal_string \"D\""}],"id":7176,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2827:7:17","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":7182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2827:31:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7183,"nodeType":"ExpressionStatement","src":"2827:31:17"},{"expression":{"baseExpression":{"expression":{"id":7184,"name":"_queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7170,"src":"2903:6:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue storage pointer"}},"id":7185,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2910:4:17","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":7068,"src":"2903:11:17","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_PriorityOperation_$7058_storage_$","typeString":"mapping(uint256 => struct PriorityOperation storage ref)"}},"id":7188,"indexExpression":{"expression":{"id":7186,"name":"_queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7170,"src":"2915:6:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue storage pointer"}},"id":7187,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2922:4:17","memberName":"tail","nodeType":"MemberAccess","referencedDeclaration":7072,"src":"2915:11:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2903:24:17","typeDescriptions":{"typeIdentifier":"t_struct$_PriorityOperation_$7058_storage","typeString":"struct PriorityOperation storage ref"}},"functionReturnParameters":7175,"id":7189,"nodeType":"Return","src":"2896:31:17"}]},"documentation":{"id":7167,"nodeType":"StructuredDocumentation","src":"2659:67:17","text":"@return The first unprocessed priority operation from the queue"},"id":7191,"implemented":true,"kind":"function","modifiers":[],"name":"front","nameLocation":"2740:5:17","nodeType":"FunctionDefinition","parameters":{"id":7171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7170,"mutability":"mutable","name":"_queue","nameLocation":"2760:6:17","nodeType":"VariableDeclaration","scope":7191,"src":"2746:20:17","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue"},"typeName":{"id":7169,"nodeType":"UserDefinedTypeName","pathNode":{"id":7168,"name":"Queue","nameLocations":["2746:5:17"],"nodeType":"IdentifierPath","referencedDeclaration":7073,"src":"2746:5:17"},"referencedDeclaration":7073,"src":"2746:5:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue"}},"visibility":"internal"}],"src":"2745:22:17"},"returnParameters":{"id":7175,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7174,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7191,"src":"2791:24:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PriorityOperation_$7058_memory_ptr","typeString":"struct PriorityOperation"},"typeName":{"id":7173,"nodeType":"UserDefinedTypeName","pathNode":{"id":7172,"name":"PriorityOperation","nameLocations":["2791:17:17"],"nodeType":"IdentifierPath","referencedDeclaration":7058,"src":"2791:17:17"},"referencedDeclaration":7058,"src":"2791:17:17","typeDescriptions":{"typeIdentifier":"t_struct$_PriorityOperation_$7058_storage_ptr","typeString":"struct PriorityOperation"}},"visibility":"internal"}],"src":"2790:26:17"},"scope":7237,"src":"2731:203:17","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7235,"nodeType":"Block","src":"3195:304:17","statements":[{"expression":{"arguments":[{"id":7205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3213:17:17","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7202,"name":"_queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7195,"src":"3214:6:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue storage pointer"}},"id":7203,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3221:7:17","memberName":"isEmpty","nodeType":"MemberAccess","referencedDeclaration":7134,"src":"3214:14:17","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Queue_$7073_storage_ptr_$returns$_t_bool_$bound_to$_t_struct$_Queue_$7073_storage_ptr_$","typeString":"function (struct PriorityQueue.Queue storage pointer) view returns (bool)"}},"id":7204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3214:16:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"73","id":7206,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3232:3:17","typeDescriptions":{"typeIdentifier":"t_stringliteral_60a73bfb121a98fb6b52dfb29eb0defd76b60065b8cf07902baf28c167d24daf","typeString":"literal_string \"s\""},"value":"s"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_60a73bfb121a98fb6b52dfb29eb0defd76b60065b8cf07902baf28c167d24daf","typeString":"literal_string \"s\""}],"id":7201,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3205:7:17","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":7207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3205:31:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7208,"nodeType":"ExpressionStatement","src":"3205:31:17"},{"assignments":[7210],"declarations":[{"constant":false,"id":7210,"mutability":"mutable","name":"tail","nameLocation":"3360:4:17","nodeType":"VariableDeclaration","scope":7235,"src":"3352:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7209,"name":"uint256","nodeType":"ElementaryTypeName","src":"3352:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7213,"initialValue":{"expression":{"id":7211,"name":"_queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7195,"src":"3367:6:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue storage pointer"}},"id":7212,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3374:4:17","memberName":"tail","nodeType":"MemberAccess","referencedDeclaration":7072,"src":"3367:11:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3352:26:17"},{"expression":{"id":7219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7214,"name":"priorityOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7199,"src":"3389:17:17","typeDescriptions":{"typeIdentifier":"t_struct$_PriorityOperation_$7058_memory_ptr","typeString":"struct PriorityOperation memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":7215,"name":"_queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7195,"src":"3409:6:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue storage pointer"}},"id":7216,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3416:4:17","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":7068,"src":"3409:11:17","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_PriorityOperation_$7058_storage_$","typeString":"mapping(uint256 => struct PriorityOperation storage ref)"}},"id":7218,"indexExpression":{"id":7217,"name":"tail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7210,"src":"3421:4:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3409:17:17","typeDescriptions":{"typeIdentifier":"t_struct$_PriorityOperation_$7058_storage","typeString":"struct PriorityOperation storage ref"}},"src":"3389:37:17","typeDescriptions":{"typeIdentifier":"t_struct$_PriorityOperation_$7058_memory_ptr","typeString":"struct PriorityOperation memory"}},"id":7220,"nodeType":"ExpressionStatement","src":"3389:37:17"},{"expression":{"id":7225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"3436:24:17","subExpression":{"baseExpression":{"expression":{"id":7221,"name":"_queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7195,"src":"3443:6:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue storage pointer"}},"id":7222,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3450:4:17","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":7068,"src":"3443:11:17","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_PriorityOperation_$7058_storage_$","typeString":"mapping(uint256 => struct PriorityOperation storage ref)"}},"id":7224,"indexExpression":{"id":7223,"name":"tail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7210,"src":"3455:4:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3443:17:17","typeDescriptions":{"typeIdentifier":"t_struct$_PriorityOperation_$7058_storage","typeString":"struct PriorityOperation storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7226,"nodeType":"ExpressionStatement","src":"3436:24:17"},{"expression":{"id":7233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":7227,"name":"_queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7195,"src":"3470:6:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue storage pointer"}},"id":7229,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3477:4:17","memberName":"tail","nodeType":"MemberAccess","referencedDeclaration":7072,"src":"3470:11:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7230,"name":"tail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7210,"src":"3484:4:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":7231,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3491:1:17","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3484:8:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3470:22:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7234,"nodeType":"ExpressionStatement","src":"3470:22:17"}]},"documentation":{"id":7192,"nodeType":"StructuredDocumentation","src":"2940:148:17","text":"@notice Remove the first unprocessed priority operation from the queue\n @return priorityOperation that was popped from the priority queue"},"id":7236,"implemented":true,"kind":"function","modifiers":[],"name":"popFront","nameLocation":"3102:8:17","nodeType":"FunctionDefinition","parameters":{"id":7196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7195,"mutability":"mutable","name":"_queue","nameLocation":"3125:6:17","nodeType":"VariableDeclaration","scope":7236,"src":"3111:20:17","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue"},"typeName":{"id":7194,"nodeType":"UserDefinedTypeName","pathNode":{"id":7193,"name":"Queue","nameLocations":["3111:5:17"],"nodeType":"IdentifierPath","referencedDeclaration":7073,"src":"3111:5:17"},"referencedDeclaration":7073,"src":"3111:5:17","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$7073_storage_ptr","typeString":"struct PriorityQueue.Queue"}},"visibility":"internal"}],"src":"3110:22:17"},"returnParameters":{"id":7200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7199,"mutability":"mutable","name":"priorityOperation","nameLocation":"3176:17:17","nodeType":"VariableDeclaration","scope":7236,"src":"3151:42:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PriorityOperation_$7058_memory_ptr","typeString":"struct PriorityOperation"},"typeName":{"id":7198,"nodeType":"UserDefinedTypeName","pathNode":{"id":7197,"name":"PriorityOperation","nameLocations":["3151:17:17"],"nodeType":"IdentifierPath","referencedDeclaration":7058,"src":"3151:17:17"},"referencedDeclaration":7058,"src":"3151:17:17","typeDescriptions":{"typeIdentifier":"t_struct$_PriorityOperation_$7058_storage_ptr","typeString":"struct PriorityOperation"}},"visibility":"internal"}],"src":"3150:44:17"},"scope":7237,"src":"3093:406:17","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":7238,"src":"863:2638:17","usedErrors":[]}],"src":"47:3455:17"},"id":17},"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/TranscriptLib.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/TranscriptLib.sol","exportedSymbols":{"PairingsBn254":[7049],"TranscriptLib":[7416]},"id":7417,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":7239,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"47:23:18"},{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PairingsBn254.sol","file":"./PairingsBn254.sol","id":7240,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7417,"sourceUnit":7050,"src":"72:29:18","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"TranscriptLib","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":7416,"linearizedBaseContracts":[7416],"name":"TranscriptLib","nameLocation":"111:13:18","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":7243,"mutability":"constant","name":"FR_MASK","nameLocation":"247:7:18","nodeType":"VariableDeclaration","scope":7416,"src":"230:93:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7241,"name":"uint256","nodeType":"ElementaryTypeName","src":"230:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307831666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666","id":7242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"257:66:18","typeDescriptions":{"typeIdentifier":"t_rational_14474011154664524427946373126085988481658748083205070504932198000989141204991_by_1","typeString":"int_const 1447...(69 digits omitted)...4991"},"value":"0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},"visibility":"internal"},{"constant":true,"id":7246,"mutability":"constant","name":"DST_0","nameLocation":"346:5:18","nodeType":"VariableDeclaration","scope":7416,"src":"330:25:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":7244,"name":"uint32","nodeType":"ElementaryTypeName","src":"330:6:18","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"value":{"hexValue":"30","id":7245,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"354:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"internal"},{"constant":true,"id":7249,"mutability":"constant","name":"DST_1","nameLocation":"377:5:18","nodeType":"VariableDeclaration","scope":7416,"src":"361:25:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":7247,"name":"uint32","nodeType":"ElementaryTypeName","src":"361:6:18","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"value":{"hexValue":"31","id":7248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"385:1:18","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"internal"},{"constant":true,"id":7252,"mutability":"constant","name":"DST_CHALLENGE","nameLocation":"408:13:18","nodeType":"VariableDeclaration","scope":7416,"src":"392:33:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":7250,"name":"uint32","nodeType":"ElementaryTypeName","src":"392:6:18","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"value":{"hexValue":"32","id":7251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"424:1:18","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"internal"},{"canonicalName":"TranscriptLib.Transcript","id":7259,"members":[{"constant":false,"id":7254,"mutability":"mutable","name":"state_0","nameLocation":"468:7:18","nodeType":"VariableDeclaration","scope":7259,"src":"460:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7253,"name":"bytes32","nodeType":"ElementaryTypeName","src":"460:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7256,"mutability":"mutable","name":"state_1","nameLocation":"493:7:18","nodeType":"VariableDeclaration","scope":7259,"src":"485:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7255,"name":"bytes32","nodeType":"ElementaryTypeName","src":"485:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7258,"mutability":"mutable","name":"challenge_counter","nameLocation":"517:17:18","nodeType":"VariableDeclaration","scope":7259,"src":"510:24:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":7257,"name":"uint32","nodeType":"ElementaryTypeName","src":"510:6:18","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"name":"Transcript","nameLocation":"439:10:18","nodeType":"StructDefinition","scope":7416,"src":"432:109:18","visibility":"public"},{"body":{"id":7289,"nodeType":"Block","src":"617:104:18","statements":[{"expression":{"id":7272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":7265,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7263,"src":"627:1:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":7267,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"629:7:18","memberName":"state_0","nodeType":"MemberAccess","referencedDeclaration":7254,"src":"627:9:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":7270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"647:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":7269,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"639:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":7268,"name":"bytes32","nodeType":"ElementaryTypeName","src":"639:7:18","typeDescriptions":{}}},"id":7271,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"639:10:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"627:22:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7273,"nodeType":"ExpressionStatement","src":"627:22:18"},{"expression":{"id":7281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":7274,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7263,"src":"659:1:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":7276,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"661:7:18","memberName":"state_1","nodeType":"MemberAccess","referencedDeclaration":7256,"src":"659:9:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":7279,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"679:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":7278,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"671:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":7277,"name":"bytes32","nodeType":"ElementaryTypeName","src":"671:7:18","typeDescriptions":{}}},"id":7280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"671:10:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"659:22:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7282,"nodeType":"ExpressionStatement","src":"659:22:18"},{"expression":{"id":7287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":7283,"name":"t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7263,"src":"691:1:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":7285,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"693:17:18","memberName":"challenge_counter","nodeType":"MemberAccess","referencedDeclaration":7258,"src":"691:19:18","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":7286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"713:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"691:23:18","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":7288,"nodeType":"ExpressionStatement","src":"691:23:18"}]},"id":7290,"implemented":true,"kind":"function","modifiers":[],"name":"new_transcript","nameLocation":"556:14:18","nodeType":"FunctionDefinition","parameters":{"id":7260,"nodeType":"ParameterList","parameters":[],"src":"570:2:18"},"returnParameters":{"id":7264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7263,"mutability":"mutable","name":"t","nameLocation":"614:1:18","nodeType":"VariableDeclaration","scope":7290,"src":"596:19:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript"},"typeName":{"id":7262,"nodeType":"UserDefinedTypeName","pathNode":{"id":7261,"name":"Transcript","nameLocations":["596:10:18"],"nodeType":"IdentifierPath","referencedDeclaration":7259,"src":"596:10:18"},"referencedDeclaration":7259,"src":"596:10:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_storage_ptr","typeString":"struct TranscriptLib.Transcript"}},"visibility":"internal"}],"src":"595:21:18"},"scope":7416,"src":"547:174:18","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7333,"nodeType":"Block","src":"806:237:18","statements":[{"assignments":[7299],"declarations":[{"constant":false,"id":7299,"mutability":"mutable","name":"old_state_0","nameLocation":"824:11:18","nodeType":"VariableDeclaration","scope":7333,"src":"816:19:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7298,"name":"bytes32","nodeType":"ElementaryTypeName","src":"816:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":7302,"initialValue":{"expression":{"id":7300,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7293,"src":"838:4:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":7301,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"843:7:18","memberName":"state_0","nodeType":"MemberAccess","referencedDeclaration":7254,"src":"838:12:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"816:34:18"},{"expression":{"id":7316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":7303,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7293,"src":"860:4:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":7305,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"865:7:18","memberName":"state_0","nodeType":"MemberAccess","referencedDeclaration":7254,"src":"860:12:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":7309,"name":"DST_0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7246,"src":"902:5:18","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":7310,"name":"old_state_0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7299,"src":"909:11:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":7311,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7293,"src":"922:4:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":7312,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"927:7:18","memberName":"state_1","nodeType":"MemberAccess","referencedDeclaration":7256,"src":"922:12:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":7313,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7295,"src":"936:5:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7307,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"885:3:18","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7308,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"889:12:18","memberName":"encodePacked","nodeType":"MemberAccess","src":"885:16:18","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":7314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"885:57:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7306,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"875:9:18","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":7315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"875:68:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"860:83:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7317,"nodeType":"ExpressionStatement","src":"860:83:18"},{"expression":{"id":7331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":7318,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7293,"src":"953:4:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":7320,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"958:7:18","memberName":"state_1","nodeType":"MemberAccess","referencedDeclaration":7256,"src":"953:12:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":7324,"name":"DST_1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7249,"src":"995:5:18","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":7325,"name":"old_state_0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7299,"src":"1002:11:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":7326,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7293,"src":"1015:4:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":7327,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1020:7:18","memberName":"state_1","nodeType":"MemberAccess","referencedDeclaration":7256,"src":"1015:12:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":7328,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7295,"src":"1029:5:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7322,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"978:3:18","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7323,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"982:12:18","memberName":"encodePacked","nodeType":"MemberAccess","src":"978:16:18","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":7329,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"978:57:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7321,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"968:9:18","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":7330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"968:68:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"953:83:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7332,"nodeType":"ExpressionStatement","src":"953:83:18"}]},"id":7334,"implemented":true,"kind":"function","modifiers":[],"name":"update_with_u256","nameLocation":"736:16:18","nodeType":"FunctionDefinition","parameters":{"id":7296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7293,"mutability":"mutable","name":"self","nameLocation":"771:4:18","nodeType":"VariableDeclaration","scope":7334,"src":"753:22:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript"},"typeName":{"id":7292,"nodeType":"UserDefinedTypeName","pathNode":{"id":7291,"name":"Transcript","nameLocations":["753:10:18"],"nodeType":"IdentifierPath","referencedDeclaration":7259,"src":"753:10:18"},"referencedDeclaration":7259,"src":"753:10:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_storage_ptr","typeString":"struct TranscriptLib.Transcript"}},"visibility":"internal"},{"constant":false,"id":7295,"mutability":"mutable","name":"value","nameLocation":"785:5:18","nodeType":"VariableDeclaration","scope":7334,"src":"777:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7294,"name":"uint256","nodeType":"ElementaryTypeName","src":"777:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"752:39:18"},"returnParameters":{"id":7297,"nodeType":"ParameterList","parameters":[],"src":"806:0:18"},"scope":7416,"src":"727:316:18","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7349,"nodeType":"Block","src":"1142:52:18","statements":[{"expression":{"arguments":[{"id":7344,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7337,"src":"1169:4:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},{"expression":{"id":7345,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7340,"src":"1175:5:18","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":7346,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1181:5:18","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":6029,"src":"1175:11:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7343,"name":"update_with_u256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7334,"src":"1152:16:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (struct TranscriptLib.Transcript memory,uint256) pure"}},"id":7347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1152:35:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7348,"nodeType":"ExpressionStatement","src":"1152:35:18"}]},"id":7350,"implemented":true,"kind":"function","modifiers":[],"name":"update_with_fr","nameLocation":"1058:14:18","nodeType":"FunctionDefinition","parameters":{"id":7341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7337,"mutability":"mutable","name":"self","nameLocation":"1091:4:18","nodeType":"VariableDeclaration","scope":7350,"src":"1073:22:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript"},"typeName":{"id":7336,"nodeType":"UserDefinedTypeName","pathNode":{"id":7335,"name":"Transcript","nameLocations":["1073:10:18"],"nodeType":"IdentifierPath","referencedDeclaration":7259,"src":"1073:10:18"},"referencedDeclaration":7259,"src":"1073:10:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_storage_ptr","typeString":"struct TranscriptLib.Transcript"}},"visibility":"internal"},{"constant":false,"id":7340,"mutability":"mutable","name":"value","nameLocation":"1121:5:18","nodeType":"VariableDeclaration","scope":7350,"src":"1097:29:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":7339,"nodeType":"UserDefinedTypeName","pathNode":{"id":7338,"name":"PairingsBn254.Fr","nameLocations":["1097:13:18","1111:2:18"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"1097:16:18"},"referencedDeclaration":6030,"src":"1097:16:18","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"1072:55:18"},"returnParameters":{"id":7342,"nodeType":"ParameterList","parameters":[],"src":"1142:0:18"},"scope":7416,"src":"1049:145:18","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7371,"nodeType":"Block","src":"1294:81:18","statements":[{"expression":{"arguments":[{"id":7360,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7353,"src":"1321:4:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},{"expression":{"id":7361,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7356,"src":"1327:1:18","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":7362,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1329:1:18","memberName":"X","nodeType":"MemberAccess","referencedDeclaration":6024,"src":"1327:3:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7359,"name":"update_with_u256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7334,"src":"1304:16:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (struct TranscriptLib.Transcript memory,uint256) pure"}},"id":7363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1304:27:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7364,"nodeType":"ExpressionStatement","src":"1304:27:18"},{"expression":{"arguments":[{"id":7366,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7353,"src":"1358:4:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},{"expression":{"id":7367,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7356,"src":"1364:1:18","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point memory"}},"id":7368,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1366:1:18","memberName":"Y","nodeType":"MemberAccess","referencedDeclaration":6026,"src":"1364:3:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7365,"name":"update_with_u256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7334,"src":"1341:16:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Transcript_$7259_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (struct TranscriptLib.Transcript memory,uint256) pure"}},"id":7369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1341:27:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7370,"nodeType":"ExpressionStatement","src":"1341:27:18"}]},"id":7372,"implemented":true,"kind":"function","modifiers":[],"name":"update_with_g1","nameLocation":"1209:14:18","nodeType":"FunctionDefinition","parameters":{"id":7357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7353,"mutability":"mutable","name":"self","nameLocation":"1242:4:18","nodeType":"VariableDeclaration","scope":7372,"src":"1224:22:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript"},"typeName":{"id":7352,"nodeType":"UserDefinedTypeName","pathNode":{"id":7351,"name":"Transcript","nameLocations":["1224:10:18"],"nodeType":"IdentifierPath","referencedDeclaration":7259,"src":"1224:10:18"},"referencedDeclaration":7259,"src":"1224:10:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_storage_ptr","typeString":"struct TranscriptLib.Transcript"}},"visibility":"internal"},{"constant":false,"id":7356,"mutability":"mutable","name":"p","nameLocation":"1277:1:18","nodeType":"VariableDeclaration","scope":7372,"src":"1248:30:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_memory_ptr","typeString":"struct PairingsBn254.G1Point"},"typeName":{"id":7355,"nodeType":"UserDefinedTypeName","pathNode":{"id":7354,"name":"PairingsBn254.G1Point","nameLocations":["1248:13:18","1262:7:18"],"nodeType":"IdentifierPath","referencedDeclaration":6027,"src":"1248:21:18"},"referencedDeclaration":6027,"src":"1248:21:18","typeDescriptions":{"typeIdentifier":"t_struct$_G1Point_$6027_storage_ptr","typeString":"struct PairingsBn254.G1Point"}},"visibility":"internal"}],"src":"1223:56:18"},"returnParameters":{"id":7358,"nodeType":"ParameterList","parameters":[],"src":"1294:0:18"},"scope":7416,"src":"1200:175:18","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7414,"nodeType":"Block","src":"1486:237:18","statements":[{"assignments":[7382],"declarations":[{"constant":false,"id":7382,"mutability":"mutable","name":"query","nameLocation":"1504:5:18","nodeType":"VariableDeclaration","scope":7414,"src":"1496:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7381,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1496:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":7395,"initialValue":{"arguments":[{"arguments":[{"id":7386,"name":"DST_CHALLENGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7252,"src":"1539:13:18","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"id":7387,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7375,"src":"1554:4:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":7388,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1559:7:18","memberName":"state_0","nodeType":"MemberAccess","referencedDeclaration":7254,"src":"1554:12:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":7389,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7375,"src":"1568:4:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":7390,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1573:7:18","memberName":"state_1","nodeType":"MemberAccess","referencedDeclaration":7256,"src":"1568:12:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":7391,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7375,"src":"1582:4:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":7392,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1587:17:18","memberName":"challenge_counter","nodeType":"MemberAccess","referencedDeclaration":7258,"src":"1582:22:18","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":7384,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1522:3:18","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7385,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1526:12:18","memberName":"encodePacked","nodeType":"MemberAccess","src":"1522:16:18","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":7393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1522:83:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7383,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1512:9:18","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":7394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1512:94:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1496:110:18"},{"expression":{"id":7400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":7396,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7375,"src":"1616:4:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript memory"}},"id":7398,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1621:17:18","memberName":"challenge_counter","nodeType":"MemberAccess","referencedDeclaration":7258,"src":"1616:22:18","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":7399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1642:1:18","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1616:27:18","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":7401,"nodeType":"ExpressionStatement","src":"1616:27:18"},{"expression":{"id":7412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7402,"name":"challenge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7379,"src":"1653:9:18","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7407,"name":"query","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7382,"src":"1698:5:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":7406,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1690:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":7405,"name":"uint256","nodeType":"ElementaryTypeName","src":"1690:7:18","typeDescriptions":{}}},"id":7408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1690:14:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":7409,"name":"FR_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7243,"src":"1707:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1690:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7403,"name":"PairingsBn254","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"1665:13:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PairingsBn254_$7049_$","typeString":"type(library PairingsBn254)"}},"id":7404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1679:2:18","memberName":"Fr","nodeType":"MemberAccess","referencedDeclaration":6030,"src":"1665:16:18","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Fr_$6030_storage_ptr_$","typeString":"type(struct PairingsBn254.Fr storage pointer)"}},"id":7411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["1683:5:18"],"names":["value"],"nodeType":"FunctionCall","src":"1665:51:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"src":"1653:63:18","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr memory"}},"id":7413,"nodeType":"ExpressionStatement","src":"1653:63:18"}]},"id":7415,"implemented":true,"kind":"function","modifiers":[],"name":"get_challenge","nameLocation":"1390:13:18","nodeType":"FunctionDefinition","parameters":{"id":7376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7375,"mutability":"mutable","name":"self","nameLocation":"1422:4:18","nodeType":"VariableDeclaration","scope":7415,"src":"1404:22:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_memory_ptr","typeString":"struct TranscriptLib.Transcript"},"typeName":{"id":7374,"nodeType":"UserDefinedTypeName","pathNode":{"id":7373,"name":"Transcript","nameLocations":["1404:10:18"],"nodeType":"IdentifierPath","referencedDeclaration":7259,"src":"1404:10:18"},"referencedDeclaration":7259,"src":"1404:10:18","typeDescriptions":{"typeIdentifier":"t_struct$_Transcript_$7259_storage_ptr","typeString":"struct TranscriptLib.Transcript"}},"visibility":"internal"}],"src":"1403:24:18"},"returnParameters":{"id":7380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7379,"mutability":"mutable","name":"challenge","nameLocation":"1475:9:18","nodeType":"VariableDeclaration","scope":7415,"src":"1451:33:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_memory_ptr","typeString":"struct PairingsBn254.Fr"},"typeName":{"id":7378,"nodeType":"UserDefinedTypeName","pathNode":{"id":7377,"name":"PairingsBn254.Fr","nameLocations":["1451:13:18","1465:2:18"],"nodeType":"IdentifierPath","referencedDeclaration":6030,"src":"1451:16:18"},"referencedDeclaration":6030,"src":"1451:16:18","typeDescriptions":{"typeIdentifier":"t_struct$_Fr_$6030_storage_ptr","typeString":"struct PairingsBn254.Fr"}},"visibility":"internal"}],"src":"1450:35:18"},"scope":7416,"src":"1381:342:18","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":7417,"src":"103:1622:18","usedErrors":[]}],"src":"47:1679:18"},"id":18},"@matterlabs/zksync-contracts/l2/system-contracts/Constants.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l2/system-contracts/Constants.sol","exportedSymbols":{"ACCOUNT_CODE_STORAGE_SYSTEM_CONTRACT":[7466],"BOOTLOADER_FORMAL_ADDRESS":[7455],"BYTECODE_PUBLISHING_OVERHEAD":[7576],"DEFAULT_ACCOUNT_CODE_HASH":[7573],"DEPLOYER_SYSTEM_CONTRACT":[7510],"ECRECOVER_SYSTEM_CONTRACT":[7438],"ETH_TOKEN_SYSTEM_CONTRACT":[7548],"FORCE_DEPLOYER":[7518],"IAccountCodeStorage":[7612],"IContractDeployer":[7699],"IEthToken":[7718],"IImmutableSimulator":[7744],"IKnownCodesStorage":[7768],"IL1Messenger":[7786],"IMMUTABLE_SIMULATOR_SYSTEM_CONTRACT":[7499],"INonceHolder":[7862],"ISystemContext":[7937],"ImmutableData":[7725],"KECCAK256_SYSTEM_CONTRACT":[7556],"KNOWN_CODE_STORAGE_CONTRACT":[7488],"L1_MESSENGER_CONTRACT":[7529],"MAX_SYSTEM_CONTRACT_ADDRESS":[7432],"MSG_VALUE_SIMULATOR_IS_SYSTEM_BIT":[7581],"MSG_VALUE_SYSTEM_CONTRACT":[7537],"NONCE_HOLDER_SYSTEM_CONTRACT":[7477],"SHA256_SYSTEM_CONTRACT":[7444],"SYSTEM_CONTEXT_CONTRACT":[7570],"SYSTEM_CONTRACTS_OFFSET":[7429]},"id":7582,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":7418,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"47:23:19"},{"absolutePath":"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IAccountCodeStorage.sol","file":"./interfaces/IAccountCodeStorage.sol","id":7419,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7582,"sourceUnit":7613,"src":"72:46:19","symbolAliases":[],"unitAlias":""},{"absolutePath":"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/INonceHolder.sol","file":"./interfaces/INonceHolder.sol","id":7420,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7582,"sourceUnit":7863,"src":"119:39:19","symbolAliases":[],"unitAlias":""},{"absolutePath":"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IContractDeployer.sol","file":"./interfaces/IContractDeployer.sol","id":7421,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7582,"sourceUnit":7700,"src":"159:44:19","symbolAliases":[],"unitAlias":""},{"absolutePath":"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IKnownCodesStorage.sol","file":"./interfaces/IKnownCodesStorage.sol","id":7422,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7582,"sourceUnit":7769,"src":"204:45:19","symbolAliases":[],"unitAlias":""},{"absolutePath":"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IImmutableSimulator.sol","file":"./interfaces/IImmutableSimulator.sol","id":7423,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7582,"sourceUnit":7745,"src":"250:46:19","symbolAliases":[],"unitAlias":""},{"absolutePath":"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IEthToken.sol","file":"./interfaces/IEthToken.sol","id":7424,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7582,"sourceUnit":7719,"src":"297:36:19","symbolAliases":[],"unitAlias":""},{"absolutePath":"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IL1Messenger.sol","file":"./interfaces/IL1Messenger.sol","id":7425,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7582,"sourceUnit":7787,"src":"334:39:19","symbolAliases":[],"unitAlias":""},{"absolutePath":"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/ISystemContext.sol","file":"./interfaces/ISystemContext.sol","id":7426,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7582,"sourceUnit":7938,"src":"374:41:19","symbolAliases":[],"unitAlias":""},{"constant":true,"id":7429,"mutability":"constant","name":"SYSTEM_CONTRACTS_OFFSET","nameLocation":"434:23:19","nodeType":"VariableDeclaration","scope":7582,"src":"417:49:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":7427,"name":"uint160","nodeType":"ElementaryTypeName","src":"417:7:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"value":{"hexValue":"307838303030","id":7428,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"460:6:19","typeDescriptions":{"typeIdentifier":"t_rational_32768_by_1","typeString":"int_const 32768"},"value":"0x8000"},"visibility":"internal"},{"constant":true,"id":7432,"mutability":"constant","name":"MAX_SYSTEM_CONTRACT_ADDRESS","nameLocation":"493:27:19","nodeType":"VariableDeclaration","scope":7582,"src":"476:53:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":7430,"name":"uint160","nodeType":"ElementaryTypeName","src":"476:7:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"value":{"hexValue":"307866666666","id":7431,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"523:6:19","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"0xffff"},"visibility":"internal"},{"constant":true,"id":7438,"mutability":"constant","name":"ECRECOVER_SYSTEM_CONTRACT","nameLocation":"561:25:19","nodeType":"VariableDeclaration","scope":7582,"src":"544:58:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7433,"name":"address","nodeType":"ElementaryTypeName","src":"544:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"30783031","id":7436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"597:4:19","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x01"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":7435,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"589:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7434,"name":"address","nodeType":"ElementaryTypeName","src":"589:7:19","typeDescriptions":{}}},"id":7437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"589:13:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":true,"id":7444,"mutability":"constant","name":"SHA256_SYSTEM_CONTRACT","nameLocation":"621:22:19","nodeType":"VariableDeclaration","scope":7582,"src":"604:55:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7439,"name":"address","nodeType":"ElementaryTypeName","src":"604:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"hexValue":"30783032","id":7442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"654:4:19","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"0x02"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"id":7441,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"646:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7440,"name":"address","nodeType":"ElementaryTypeName","src":"646:7:19","typeDescriptions":{}}},"id":7443,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"646:13:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":true,"id":7455,"mutability":"constant","name":"BOOTLOADER_FORMAL_ADDRESS","nameLocation":"687:25:19","nodeType":"VariableDeclaration","scope":7582,"src":"662:101:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":7445,"name":"address","nodeType":"ElementaryTypeName","src":"662:15:19","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"value":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint160","typeString":"uint160"},"id":7452,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":7450,"name":"SYSTEM_CONTRACTS_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"731:23:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783031","id":7451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"757:4:19","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x01"},"src":"731:30:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":7449,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"723:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7448,"name":"address","nodeType":"ElementaryTypeName","src":"723:7:19","typeDescriptions":{}}},"id":7453,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"723:39:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7447,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"715:8:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":7446,"name":"address","nodeType":"ElementaryTypeName","src":"715:8:19","stateMutability":"payable","typeDescriptions":{}}},"id":7454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"715:48:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":true,"id":7466,"mutability":"constant","name":"ACCOUNT_CODE_STORAGE_SYSTEM_CONTRACT","nameLocation":"794:36:19","nodeType":"VariableDeclaration","scope":7582,"src":"765:128:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAccountCodeStorage_$7612","typeString":"contract IAccountCodeStorage"},"typeName":{"id":7457,"nodeType":"UserDefinedTypeName","pathNode":{"id":7456,"name":"IAccountCodeStorage","nameLocations":["765:19:19"],"nodeType":"IdentifierPath","referencedDeclaration":7612,"src":"765:19:19"},"referencedDeclaration":7612,"src":"765:19:19","typeDescriptions":{"typeIdentifier":"t_contract$_IAccountCodeStorage_$7612","typeString":"contract IAccountCodeStorage"}},"value":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint160","typeString":"uint160"},"id":7463,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":7461,"name":"SYSTEM_CONTRACTS_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"861:23:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783032","id":7462,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"887:4:19","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"0x02"},"src":"861:30:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":7460,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"853:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7459,"name":"address","nodeType":"ElementaryTypeName","src":"853:7:19","typeDescriptions":{}}},"id":7464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"853:39:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7458,"name":"IAccountCodeStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7612,"src":"833:19:19","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAccountCodeStorage_$7612_$","typeString":"type(contract IAccountCodeStorage)"}},"id":7465,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"833:60:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAccountCodeStorage_$7612","typeString":"contract IAccountCodeStorage"}},"visibility":"internal"},{"constant":true,"id":7477,"mutability":"constant","name":"NONCE_HOLDER_SYSTEM_CONTRACT","nameLocation":"917:28:19","nodeType":"VariableDeclaration","scope":7582,"src":"895:106:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_INonceHolder_$7862","typeString":"contract INonceHolder"},"typeName":{"id":7468,"nodeType":"UserDefinedTypeName","pathNode":{"id":7467,"name":"INonceHolder","nameLocations":["895:12:19"],"nodeType":"IdentifierPath","referencedDeclaration":7862,"src":"895:12:19"},"referencedDeclaration":7862,"src":"895:12:19","typeDescriptions":{"typeIdentifier":"t_contract$_INonceHolder_$7862","typeString":"contract INonceHolder"}},"value":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint160","typeString":"uint160"},"id":7474,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":7472,"name":"SYSTEM_CONTRACTS_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"969:23:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783033","id":7473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"995:4:19","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"0x03"},"src":"969:30:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":7471,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"961:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7470,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:19","typeDescriptions":{}}},"id":7475,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"961:39:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7469,"name":"INonceHolder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7862,"src":"948:12:19","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_INonceHolder_$7862_$","typeString":"type(contract INonceHolder)"}},"id":7476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"948:53:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_INonceHolder_$7862","typeString":"contract INonceHolder"}},"visibility":"internal"},{"constant":true,"id":7488,"mutability":"constant","name":"KNOWN_CODE_STORAGE_CONTRACT","nameLocation":"1031:27:19","nodeType":"VariableDeclaration","scope":7582,"src":"1003:117:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IKnownCodesStorage_$7768","typeString":"contract IKnownCodesStorage"},"typeName":{"id":7479,"nodeType":"UserDefinedTypeName","pathNode":{"id":7478,"name":"IKnownCodesStorage","nameLocations":["1003:18:19"],"nodeType":"IdentifierPath","referencedDeclaration":7768,"src":"1003:18:19"},"referencedDeclaration":7768,"src":"1003:18:19","typeDescriptions":{"typeIdentifier":"t_contract$_IKnownCodesStorage_$7768","typeString":"contract IKnownCodesStorage"}},"value":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint160","typeString":"uint160"},"id":7485,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":7483,"name":"SYSTEM_CONTRACTS_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"1088:23:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783034","id":7484,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1114:4:19","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"0x04"},"src":"1088:30:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":7482,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1080:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7481,"name":"address","nodeType":"ElementaryTypeName","src":"1080:7:19","typeDescriptions":{}}},"id":7486,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1080:39:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7480,"name":"IKnownCodesStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7768,"src":"1061:18:19","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IKnownCodesStorage_$7768_$","typeString":"type(contract IKnownCodesStorage)"}},"id":7487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1061:59:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IKnownCodesStorage_$7768","typeString":"contract IKnownCodesStorage"}},"visibility":"internal"},{"constant":true,"id":7499,"mutability":"constant","name":"IMMUTABLE_SIMULATOR_SYSTEM_CONTRACT","nameLocation":"1151:35:19","nodeType":"VariableDeclaration","scope":7582,"src":"1122:127:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IImmutableSimulator_$7744","typeString":"contract IImmutableSimulator"},"typeName":{"id":7490,"nodeType":"UserDefinedTypeName","pathNode":{"id":7489,"name":"IImmutableSimulator","nameLocations":["1122:19:19"],"nodeType":"IdentifierPath","referencedDeclaration":7744,"src":"1122:19:19"},"referencedDeclaration":7744,"src":"1122:19:19","typeDescriptions":{"typeIdentifier":"t_contract$_IImmutableSimulator_$7744","typeString":"contract IImmutableSimulator"}},"value":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint160","typeString":"uint160"},"id":7496,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":7494,"name":"SYSTEM_CONTRACTS_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"1217:23:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783035","id":7495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1243:4:19","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"0x05"},"src":"1217:30:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":7493,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1209:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7492,"name":"address","nodeType":"ElementaryTypeName","src":"1209:7:19","typeDescriptions":{}}},"id":7497,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1209:39:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7491,"name":"IImmutableSimulator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7744,"src":"1189:19:19","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IImmutableSimulator_$7744_$","typeString":"type(contract IImmutableSimulator)"}},"id":7498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1189:60:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IImmutableSimulator_$7744","typeString":"contract IImmutableSimulator"}},"visibility":"internal"},{"constant":true,"id":7510,"mutability":"constant","name":"DEPLOYER_SYSTEM_CONTRACT","nameLocation":"1278:24:19","nodeType":"VariableDeclaration","scope":7582,"src":"1251:112:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IContractDeployer_$7699","typeString":"contract IContractDeployer"},"typeName":{"id":7501,"nodeType":"UserDefinedTypeName","pathNode":{"id":7500,"name":"IContractDeployer","nameLocations":["1251:17:19"],"nodeType":"IdentifierPath","referencedDeclaration":7699,"src":"1251:17:19"},"referencedDeclaration":7699,"src":"1251:17:19","typeDescriptions":{"typeIdentifier":"t_contract$_IContractDeployer_$7699","typeString":"contract IContractDeployer"}},"value":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint160","typeString":"uint160"},"id":7507,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":7505,"name":"SYSTEM_CONTRACTS_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"1331:23:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783036","id":7506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1357:4:19","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"0x06"},"src":"1331:30:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":7504,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1323:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7503,"name":"address","nodeType":"ElementaryTypeName","src":"1323:7:19","typeDescriptions":{}}},"id":7508,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1323:39:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7502,"name":"IContractDeployer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7699,"src":"1305:17:19","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IContractDeployer_$7699_$","typeString":"type(contract IContractDeployer)"}},"id":7509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1305:58:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IContractDeployer_$7699","typeString":"contract IContractDeployer"}},"visibility":"internal"},{"constant":true,"id":7518,"mutability":"constant","name":"FORCE_DEPLOYER","nameLocation":"1490:14:19","nodeType":"VariableDeclaration","scope":7582,"src":"1473:73:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7511,"name":"address","nodeType":"ElementaryTypeName","src":"1473:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"commonType":{"typeIdentifier":"t_uint160","typeString":"uint160"},"id":7516,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":7514,"name":"SYSTEM_CONTRACTS_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"1515:23:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783037","id":7515,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1541:4:19","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"0x07"},"src":"1515:30:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":7513,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1507:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7512,"name":"address","nodeType":"ElementaryTypeName","src":"1507:7:19","typeDescriptions":{}}},"id":7517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1507:39:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":true,"id":7529,"mutability":"constant","name":"L1_MESSENGER_CONTRACT","nameLocation":"1570:21:19","nodeType":"VariableDeclaration","scope":7582,"src":"1548:99:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IL1Messenger_$7786","typeString":"contract IL1Messenger"},"typeName":{"id":7520,"nodeType":"UserDefinedTypeName","pathNode":{"id":7519,"name":"IL1Messenger","nameLocations":["1548:12:19"],"nodeType":"IdentifierPath","referencedDeclaration":7786,"src":"1548:12:19"},"referencedDeclaration":7786,"src":"1548:12:19","typeDescriptions":{"typeIdentifier":"t_contract$_IL1Messenger_$7786","typeString":"contract IL1Messenger"}},"value":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint160","typeString":"uint160"},"id":7526,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":7524,"name":"SYSTEM_CONTRACTS_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"1615:23:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783038","id":7525,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1641:4:19","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"0x08"},"src":"1615:30:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":7523,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1607:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7522,"name":"address","nodeType":"ElementaryTypeName","src":"1607:7:19","typeDescriptions":{}}},"id":7527,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1607:39:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7521,"name":"IL1Messenger","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7786,"src":"1594:12:19","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IL1Messenger_$7786_$","typeString":"type(contract IL1Messenger)"}},"id":7528,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1594:53:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IL1Messenger_$7786","typeString":"contract IL1Messenger"}},"visibility":"internal"},{"constant":true,"id":7537,"mutability":"constant","name":"MSG_VALUE_SYSTEM_CONTRACT","nameLocation":"1666:25:19","nodeType":"VariableDeclaration","scope":7582,"src":"1649:84:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7530,"name":"address","nodeType":"ElementaryTypeName","src":"1649:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"commonType":{"typeIdentifier":"t_uint160","typeString":"uint160"},"id":7535,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":7533,"name":"SYSTEM_CONTRACTS_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"1702:23:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783039","id":7534,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1728:4:19","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"0x09"},"src":"1702:30:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":7532,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1694:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7531,"name":"address","nodeType":"ElementaryTypeName","src":"1694:7:19","typeDescriptions":{}}},"id":7536,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1694:39:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":true,"id":7548,"mutability":"constant","name":"ETH_TOKEN_SYSTEM_CONTRACT","nameLocation":"1755:25:19","nodeType":"VariableDeclaration","scope":7582,"src":"1736:97:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IEthToken_$7718","typeString":"contract IEthToken"},"typeName":{"id":7539,"nodeType":"UserDefinedTypeName","pathNode":{"id":7538,"name":"IEthToken","nameLocations":["1736:9:19"],"nodeType":"IdentifierPath","referencedDeclaration":7718,"src":"1736:9:19"},"referencedDeclaration":7718,"src":"1736:9:19","typeDescriptions":{"typeIdentifier":"t_contract$_IEthToken_$7718","typeString":"contract IEthToken"}},"value":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint160","typeString":"uint160"},"id":7545,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":7543,"name":"SYSTEM_CONTRACTS_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"1801:23:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783061","id":7544,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1827:4:19","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"0x0a"},"src":"1801:30:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":7542,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1793:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7541,"name":"address","nodeType":"ElementaryTypeName","src":"1793:7:19","typeDescriptions":{}}},"id":7546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1793:39:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7540,"name":"IEthToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7718,"src":"1783:9:19","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IEthToken_$7718_$","typeString":"type(contract IEthToken)"}},"id":7547,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1783:50:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IEthToken_$7718","typeString":"contract IEthToken"}},"visibility":"internal"},{"constant":true,"id":7556,"mutability":"constant","name":"KECCAK256_SYSTEM_CONTRACT","nameLocation":"1853:25:19","nodeType":"VariableDeclaration","scope":7582,"src":"1836:84:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7549,"name":"address","nodeType":"ElementaryTypeName","src":"1836:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"arguments":[{"commonType":{"typeIdentifier":"t_uint160","typeString":"uint160"},"id":7554,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":7552,"name":"SYSTEM_CONTRACTS_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"1889:23:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783130","id":7553,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1915:4:19","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"0x10"},"src":"1889:30:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":7551,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1881:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7550,"name":"address","nodeType":"ElementaryTypeName","src":"1881:7:19","typeDescriptions":{}}},"id":7555,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1881:39:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":true,"id":7570,"mutability":"constant","name":"SYSTEM_CONTEXT_CONTRACT","nameLocation":"1947:23:19","nodeType":"VariableDeclaration","scope":7582,"src":"1923:114:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ISystemContext_$7937","typeString":"contract ISystemContext"},"typeName":{"id":7558,"nodeType":"UserDefinedTypeName","pathNode":{"id":7557,"name":"ISystemContext","nameLocations":["1923:14:19"],"nodeType":"IdentifierPath","referencedDeclaration":7937,"src":"1923:14:19"},"referencedDeclaration":7937,"src":"1923:14:19","typeDescriptions":{"typeIdentifier":"t_contract$_ISystemContext_$7937","typeString":"contract ISystemContext"}},"value":{"arguments":[{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint160","typeString":"uint160"},"id":7566,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":7564,"name":"SYSTEM_CONTRACTS_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"2004:23:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783062","id":7565,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2030:4:19","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"0x0b"},"src":"2004:30:19","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":7563,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1996:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7562,"name":"address","nodeType":"ElementaryTypeName","src":"1996:7:19","typeDescriptions":{}}},"id":7567,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1996:39:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7561,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1988:8:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":7560,"name":"address","nodeType":"ElementaryTypeName","src":"1988:8:19","stateMutability":"payable","typeDescriptions":{}}},"id":7568,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1988:48:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":7559,"name":"ISystemContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7937,"src":"1973:14:19","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISystemContext_$7937_$","typeString":"type(contract ISystemContext)"}},"id":7569,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1973:64:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISystemContext_$7937","typeString":"contract ISystemContext"}},"visibility":"internal"},{"constant":true,"id":7573,"mutability":"constant","name":"DEFAULT_ACCOUNT_CODE_HASH","nameLocation":"2057:25:19","nodeType":"VariableDeclaration","scope":7582,"src":"2040:49:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7571,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2040:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"30783030","id":7572,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2085:4:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x00"},"visibility":"internal"},{"constant":true,"id":7576,"mutability":"constant","name":"BYTECODE_PUBLISHING_OVERHEAD","nameLocation":"2221:28:19","nodeType":"VariableDeclaration","scope":7582,"src":"2204:51:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7574,"name":"uint256","nodeType":"ElementaryTypeName","src":"2204:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"313030","id":7575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2252:3:19","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"visibility":"internal"},{"constant":true,"id":7581,"mutability":"constant","name":"MSG_VALUE_SIMULATOR_IS_SYSTEM_BIT","nameLocation":"2275:33:19","nodeType":"VariableDeclaration","scope":7582,"src":"2258:59:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7577,"name":"uint256","nodeType":"ElementaryTypeName","src":"2258:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"},"id":7580,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":7578,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2311:1:19","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"313238","id":7579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2314:3:19","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"2311:6:19","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}},"visibility":"internal"}],"src":"47:2272:19"},"id":19},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IAccountCodeStorage.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IAccountCodeStorage.sol","exportedSymbols":{"IAccountCodeStorage":[7612]},"id":7613,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":7583,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"47:23:20"},{"abstract":false,"baseContracts":[],"canonicalName":"IAccountCodeStorage","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":7612,"linearizedBaseContracts":[7612],"name":"IAccountCodeStorage","nameLocation":"82:19:20","nodeType":"ContractDefinition","nodes":[{"functionSelector":"9091088b","id":7590,"implemented":false,"kind":"function","modifiers":[],"name":"storeCodeHash","nameLocation":"117:13:20","nodeType":"FunctionDefinition","parameters":{"id":7588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7585,"mutability":"mutable","name":"_address","nameLocation":"139:8:20","nodeType":"VariableDeclaration","scope":7590,"src":"131:16:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7584,"name":"address","nodeType":"ElementaryTypeName","src":"131:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7587,"mutability":"mutable","name":"_hash","nameLocation":"157:5:20","nodeType":"VariableDeclaration","scope":7590,"src":"149:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7586,"name":"bytes32","nodeType":"ElementaryTypeName","src":"149:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"130:33:20"},"returnParameters":{"id":7589,"nodeType":"ParameterList","parameters":[],"src":"172:0:20"},"scope":7612,"src":"108:65:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"4de2e468","id":7597,"implemented":false,"kind":"function","modifiers":[],"name":"getRawCodeHash","nameLocation":"188:14:20","nodeType":"FunctionDefinition","parameters":{"id":7593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7592,"mutability":"mutable","name":"_address","nameLocation":"211:8:20","nodeType":"VariableDeclaration","scope":7597,"src":"203:16:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7591,"name":"address","nodeType":"ElementaryTypeName","src":"203:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"202:18:20"},"returnParameters":{"id":7596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7595,"mutability":"mutable","name":"codeHash","nameLocation":"252:8:20","nodeType":"VariableDeclaration","scope":7597,"src":"244:16:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7594,"name":"bytes32","nodeType":"ElementaryTypeName","src":"244:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"243:18:20"},"scope":7612,"src":"179:83:20","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"e03fe177","id":7604,"implemented":false,"kind":"function","modifiers":[],"name":"getCodeHash","nameLocation":"277:11:20","nodeType":"FunctionDefinition","parameters":{"id":7600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7599,"mutability":"mutable","name":"_input","nameLocation":"297:6:20","nodeType":"VariableDeclaration","scope":7604,"src":"289:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7598,"name":"uint256","nodeType":"ElementaryTypeName","src":"289:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"288:16:20"},"returnParameters":{"id":7603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7602,"mutability":"mutable","name":"codeHash","nameLocation":"331:8:20","nodeType":"VariableDeclaration","scope":7604,"src":"323:16:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7601,"name":"bytes32","nodeType":"ElementaryTypeName","src":"323:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"322:18:20"},"scope":7612,"src":"268:73:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"1806aa18","id":7611,"implemented":false,"kind":"function","modifiers":[],"name":"getCodeSize","nameLocation":"360:11:20","nodeType":"FunctionDefinition","parameters":{"id":7607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7606,"mutability":"mutable","name":"_input","nameLocation":"380:6:20","nodeType":"VariableDeclaration","scope":7611,"src":"372:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7605,"name":"uint256","nodeType":"ElementaryTypeName","src":"372:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"371:16:20"},"returnParameters":{"id":7610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7609,"mutability":"mutable","name":"codeSize","nameLocation":"414:8:20","nodeType":"VariableDeclaration","scope":7611,"src":"406:16:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7608,"name":"uint256","nodeType":"ElementaryTypeName","src":"406:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"405:18:20"},"scope":7612,"src":"351:73:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":7613,"src":"72:354:20","usedErrors":[]}],"src":"47:380:20"},"id":20},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IContractDeployer.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IContractDeployer.sol","exportedSymbols":{"IContractDeployer":[7699]},"id":7700,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":7614,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"47:23:21"},{"abstract":false,"baseContracts":[],"canonicalName":"IContractDeployer","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":7699,"linearizedBaseContracts":[7699],"name":"IContractDeployer","nameLocation":"82:17:21","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"290afdae231a3fc0bbae8b1af63698b0a1d79b21ad17df0342dfb952fe74f8e5","id":7622,"name":"ContractDeployed","nameLocation":"112:16:21","nodeType":"EventDefinition","parameters":{"id":7621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7616,"indexed":true,"mutability":"mutable","name":"deployerAddress","nameLocation":"145:15:21","nodeType":"VariableDeclaration","scope":7622,"src":"129:31:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7615,"name":"address","nodeType":"ElementaryTypeName","src":"129:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7618,"indexed":true,"mutability":"mutable","name":"bytecodeHash","nameLocation":"178:12:21","nodeType":"VariableDeclaration","scope":7622,"src":"162:28:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7617,"name":"bytes32","nodeType":"ElementaryTypeName","src":"162:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7620,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"208:15:21","nodeType":"VariableDeclaration","scope":7622,"src":"192:31:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7619,"name":"address","nodeType":"ElementaryTypeName","src":"192:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"128:96:21"},"src":"106:119:21"},{"functionSelector":"84da1fb4","id":7635,"implemented":false,"kind":"function","modifiers":[],"name":"getNewAddressCreate2","nameLocation":"240:20:21","nodeType":"FunctionDefinition","parameters":{"id":7631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7624,"mutability":"mutable","name":"_sender","nameLocation":"278:7:21","nodeType":"VariableDeclaration","scope":7635,"src":"270:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7623,"name":"address","nodeType":"ElementaryTypeName","src":"270:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7626,"mutability":"mutable","name":"_bytecodeHash","nameLocation":"303:13:21","nodeType":"VariableDeclaration","scope":7635,"src":"295:21:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7625,"name":"bytes32","nodeType":"ElementaryTypeName","src":"295:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7628,"mutability":"mutable","name":"_salt","nameLocation":"334:5:21","nodeType":"VariableDeclaration","scope":7635,"src":"326:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7627,"name":"bytes32","nodeType":"ElementaryTypeName","src":"326:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7630,"mutability":"mutable","name":"_input","nameLocation":"364:6:21","nodeType":"VariableDeclaration","scope":7635,"src":"349:21:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":7629,"name":"bytes","nodeType":"ElementaryTypeName","src":"349:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"260:116:21"},"returnParameters":{"id":7634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7633,"mutability":"mutable","name":"newAddress","nameLocation":"408:10:21","nodeType":"VariableDeclaration","scope":7635,"src":"400:18:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7632,"name":"address","nodeType":"ElementaryTypeName","src":"400:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"399:20:21"},"scope":7699,"src":"231:189:21","stateMutability":"pure","virtual":false,"visibility":"external"},{"functionSelector":"187598a5","id":7644,"implemented":false,"kind":"function","modifiers":[],"name":"getNewAddressCreate","nameLocation":"436:19:21","nodeType":"FunctionDefinition","parameters":{"id":7640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7637,"mutability":"mutable","name":"_sender","nameLocation":"473:7:21","nodeType":"VariableDeclaration","scope":7644,"src":"465:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7636,"name":"address","nodeType":"ElementaryTypeName","src":"465:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7639,"mutability":"mutable","name":"_senderNonce","nameLocation":"498:12:21","nodeType":"VariableDeclaration","scope":7644,"src":"490:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7638,"name":"uint256","nodeType":"ElementaryTypeName","src":"490:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"455:61:21"},"returnParameters":{"id":7643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7642,"mutability":"mutable","name":"newAddress","nameLocation":"548:10:21","nodeType":"VariableDeclaration","scope":7644,"src":"540:18:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7641,"name":"address","nodeType":"ElementaryTypeName","src":"540:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"539:20:21"},"scope":7699,"src":"427:133:21","stateMutability":"pure","virtual":false,"visibility":"external"},{"functionSelector":"3cda3351","id":7657,"implemented":false,"kind":"function","modifiers":[],"name":"create2","nameLocation":"575:7:21","nodeType":"FunctionDefinition","parameters":{"id":7651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7646,"mutability":"mutable","name":"_salt","nameLocation":"601:5:21","nodeType":"VariableDeclaration","scope":7657,"src":"593:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7645,"name":"bytes32","nodeType":"ElementaryTypeName","src":"593:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7648,"mutability":"mutable","name":"_bytecodeHash","nameLocation":"624:13:21","nodeType":"VariableDeclaration","scope":7657,"src":"616:21:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7647,"name":"bytes32","nodeType":"ElementaryTypeName","src":"616:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7650,"mutability":"mutable","name":"_input","nameLocation":"662:6:21","nodeType":"VariableDeclaration","scope":7657,"src":"647:21:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":7649,"name":"bytes","nodeType":"ElementaryTypeName","src":"647:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"583:91:21"},"returnParameters":{"id":7656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7653,"mutability":"mutable","name":"newAddress","nameLocation":"709:10:21","nodeType":"VariableDeclaration","scope":7657,"src":"701:18:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7652,"name":"address","nodeType":"ElementaryTypeName","src":"701:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7655,"mutability":"mutable","name":"constructorRevertData","nameLocation":"734:21:21","nodeType":"VariableDeclaration","scope":7657,"src":"721:34:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7654,"name":"bytes","nodeType":"ElementaryTypeName","src":"721:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"700:56:21"},"scope":7699,"src":"566:191:21","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"2ff7479a","id":7670,"implemented":false,"kind":"function","modifiers":[],"name":"create2Account","nameLocation":"772:14:21","nodeType":"FunctionDefinition","parameters":{"id":7664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7659,"mutability":"mutable","name":"_salt","nameLocation":"805:5:21","nodeType":"VariableDeclaration","scope":7670,"src":"797:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7658,"name":"bytes32","nodeType":"ElementaryTypeName","src":"797:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7661,"mutability":"mutable","name":"_bytecodeHash","nameLocation":"828:13:21","nodeType":"VariableDeclaration","scope":7670,"src":"820:21:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7660,"name":"bytes32","nodeType":"ElementaryTypeName","src":"820:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7663,"mutability":"mutable","name":"_input","nameLocation":"866:6:21","nodeType":"VariableDeclaration","scope":7670,"src":"851:21:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":7662,"name":"bytes","nodeType":"ElementaryTypeName","src":"851:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"787:91:21"},"returnParameters":{"id":7669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7666,"mutability":"mutable","name":"newAddress","nameLocation":"913:10:21","nodeType":"VariableDeclaration","scope":7670,"src":"905:18:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7665,"name":"address","nodeType":"ElementaryTypeName","src":"905:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7668,"mutability":"mutable","name":"constructorRevertData","nameLocation":"938:21:21","nodeType":"VariableDeclaration","scope":7670,"src":"925:34:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7667,"name":"bytes","nodeType":"ElementaryTypeName","src":"925:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"904:56:21"},"scope":7699,"src":"763:198:21","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":7671,"nodeType":"StructuredDocumentation","src":"967:184:21","text":"@dev While the `_salt` parameter is not used anywhere here, \n it is still needed for consistency between `create` and\n `create2` functions (required by the compiler)."},"functionSelector":"9c4d535b","id":7684,"implemented":false,"kind":"function","modifiers":[],"name":"create","nameLocation":"1165:6:21","nodeType":"FunctionDefinition","parameters":{"id":7678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7673,"mutability":"mutable","name":"_salt","nameLocation":"1190:5:21","nodeType":"VariableDeclaration","scope":7684,"src":"1182:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7672,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1182:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7675,"mutability":"mutable","name":"_bytecodeHash","nameLocation":"1213:13:21","nodeType":"VariableDeclaration","scope":7684,"src":"1205:21:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7674,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1205:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7677,"mutability":"mutable","name":"_input","nameLocation":"1251:6:21","nodeType":"VariableDeclaration","scope":7684,"src":"1236:21:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":7676,"name":"bytes","nodeType":"ElementaryTypeName","src":"1236:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1172:91:21"},"returnParameters":{"id":7683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7680,"mutability":"mutable","name":"newAddress","nameLocation":"1298:10:21","nodeType":"VariableDeclaration","scope":7684,"src":"1290:18:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7679,"name":"address","nodeType":"ElementaryTypeName","src":"1290:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7682,"mutability":"mutable","name":"constructorRevertData","nameLocation":"1323:21:21","nodeType":"VariableDeclaration","scope":7684,"src":"1310:34:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7681,"name":"bytes","nodeType":"ElementaryTypeName","src":"1310:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1289:56:21"},"scope":7699,"src":"1156:190:21","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":7685,"nodeType":"StructuredDocumentation","src":"1352:130:21","text":"@dev While `_salt` is never used here, we leave it here as a parameter\n for the consistency with the `create` function."},"functionSelector":"81d0dff1","id":7698,"implemented":false,"kind":"function","modifiers":[],"name":"createAccount","nameLocation":"1496:13:21","nodeType":"FunctionDefinition","parameters":{"id":7692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7687,"mutability":"mutable","name":"_salt","nameLocation":"1528:5:21","nodeType":"VariableDeclaration","scope":7698,"src":"1520:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7686,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1520:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7689,"mutability":"mutable","name":"_bytecodeHash","nameLocation":"1551:13:21","nodeType":"VariableDeclaration","scope":7698,"src":"1543:21:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7688,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1543:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7691,"mutability":"mutable","name":"_input","nameLocation":"1589:6:21","nodeType":"VariableDeclaration","scope":7698,"src":"1574:21:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":7690,"name":"bytes","nodeType":"ElementaryTypeName","src":"1574:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1510:91:21"},"returnParameters":{"id":7697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7694,"mutability":"mutable","name":"newAddress","nameLocation":"1636:10:21","nodeType":"VariableDeclaration","scope":7698,"src":"1628:18:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7693,"name":"address","nodeType":"ElementaryTypeName","src":"1628:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7696,"mutability":"mutable","name":"constructorRevertData","nameLocation":"1661:21:21","nodeType":"VariableDeclaration","scope":7698,"src":"1648:34:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7695,"name":"bytes","nodeType":"ElementaryTypeName","src":"1648:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1627:56:21"},"scope":7699,"src":"1487:197:21","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":7700,"src":"72:1614:21","usedErrors":[]}],"src":"47:1640:21"},"id":21},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IEthToken.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IEthToken.sol","exportedSymbols":{"IEthToken":[7718]},"id":7719,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":7701,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"47:23:22"},{"abstract":false,"baseContracts":[],"canonicalName":"IEthToken","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":7718,"linearizedBaseContracts":[7718],"name":"IEthToken","nameLocation":"82:9:22","nodeType":"ContractDefinition","nodes":[{"functionSelector":"70a08231","id":7708,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"107:9:22","nodeType":"FunctionDefinition","parameters":{"id":7704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7703,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7708,"src":"117:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7702,"name":"address","nodeType":"ElementaryTypeName","src":"117:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"116:9:22"},"returnParameters":{"id":7707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7706,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7708,"src":"144:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7705,"name":"uint256","nodeType":"ElementaryTypeName","src":"144:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"143:9:22"},"scope":7718,"src":"98:55:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"579952fc","id":7717,"implemented":false,"kind":"function","modifiers":[],"name":"transferFromTo","nameLocation":"172:14:22","nodeType":"FunctionDefinition","parameters":{"id":7715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7710,"mutability":"mutable","name":"_from","nameLocation":"195:5:22","nodeType":"VariableDeclaration","scope":7717,"src":"187:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7709,"name":"address","nodeType":"ElementaryTypeName","src":"187:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7712,"mutability":"mutable","name":"_to","nameLocation":"210:3:22","nodeType":"VariableDeclaration","scope":7717,"src":"202:11:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7711,"name":"address","nodeType":"ElementaryTypeName","src":"202:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7714,"mutability":"mutable","name":"_amount","nameLocation":"223:7:22","nodeType":"VariableDeclaration","scope":7717,"src":"215:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7713,"name":"uint256","nodeType":"ElementaryTypeName","src":"215:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"186:45:22"},"returnParameters":{"id":7716,"nodeType":"ParameterList","parameters":[],"src":"240:0:22"},"scope":7718,"src":"163:78:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":7719,"src":"72:171:22","usedErrors":[]}],"src":"47:197:22"},"id":22},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IImmutableSimulator.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IImmutableSimulator.sol","exportedSymbols":{"IImmutableSimulator":[7744],"ImmutableData":[7725]},"id":7745,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":7720,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"47:23:23"},{"canonicalName":"ImmutableData","id":7725,"members":[{"constant":false,"id":7722,"mutability":"mutable","name":"index","nameLocation":"107:5:23","nodeType":"VariableDeclaration","scope":7725,"src":"99:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7721,"name":"uint256","nodeType":"ElementaryTypeName","src":"99:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7724,"mutability":"mutable","name":"value","nameLocation":"126:5:23","nodeType":"VariableDeclaration","scope":7725,"src":"118:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7723,"name":"bytes32","nodeType":"ElementaryTypeName","src":"118:7:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"ImmutableData","nameLocation":"79:13:23","nodeType":"StructDefinition","scope":7745,"src":"72:62:23","visibility":"public"},{"abstract":false,"baseContracts":[],"canonicalName":"IImmutableSimulator","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":7744,"linearizedBaseContracts":[7744],"name":"IImmutableSimulator","nameLocation":"146:19:23","nodeType":"ContractDefinition","nodes":[{"functionSelector":"310ab089","id":7734,"implemented":false,"kind":"function","modifiers":[],"name":"getImmutable","nameLocation":"181:12:23","nodeType":"FunctionDefinition","parameters":{"id":7730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7727,"mutability":"mutable","name":"_dest","nameLocation":"202:5:23","nodeType":"VariableDeclaration","scope":7734,"src":"194:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7726,"name":"address","nodeType":"ElementaryTypeName","src":"194:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7729,"mutability":"mutable","name":"_index","nameLocation":"217:6:23","nodeType":"VariableDeclaration","scope":7734,"src":"209:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7728,"name":"uint256","nodeType":"ElementaryTypeName","src":"209:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"193:31:23"},"returnParameters":{"id":7733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7732,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7734,"src":"248:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7731,"name":"bytes32","nodeType":"ElementaryTypeName","src":"248:7:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"247:9:23"},"scope":7744,"src":"172:85:23","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"ad7e232e","id":7743,"implemented":false,"kind":"function","modifiers":[],"name":"setImmutables","nameLocation":"272:13:23","nodeType":"FunctionDefinition","parameters":{"id":7741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7736,"mutability":"mutable","name":"_dest","nameLocation":"294:5:23","nodeType":"VariableDeclaration","scope":7743,"src":"286:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7735,"name":"address","nodeType":"ElementaryTypeName","src":"286:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7740,"mutability":"mutable","name":"immutables","nameLocation":"326:10:23","nodeType":"VariableDeclaration","scope":7743,"src":"301:35:23","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ImmutableData_$7725_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ImmutableData[]"},"typeName":{"baseType":{"id":7738,"nodeType":"UserDefinedTypeName","pathNode":{"id":7737,"name":"ImmutableData","nameLocations":["301:13:23"],"nodeType":"IdentifierPath","referencedDeclaration":7725,"src":"301:13:23"},"referencedDeclaration":7725,"src":"301:13:23","typeDescriptions":{"typeIdentifier":"t_struct$_ImmutableData_$7725_storage_ptr","typeString":"struct ImmutableData"}},"id":7739,"nodeType":"ArrayTypeName","src":"301:15:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ImmutableData_$7725_storage_$dyn_storage_ptr","typeString":"struct ImmutableData[]"}},"visibility":"internal"}],"src":"285:52:23"},"returnParameters":{"id":7742,"nodeType":"ParameterList","parameters":[],"src":"346:0:23"},"scope":7744,"src":"263:84:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":7745,"src":"136:213:23","usedErrors":[]}],"src":"47:303:23"},"id":23},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IKnownCodesStorage.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IKnownCodesStorage.sol","exportedSymbols":{"IKnownCodesStorage":[7768]},"id":7769,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":7746,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"47:23:24"},{"abstract":false,"baseContracts":[],"canonicalName":"IKnownCodesStorage","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":7768,"linearizedBaseContracts":[7768],"name":"IKnownCodesStorage","nameLocation":"82:18:24","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"c94722ff13eacf53547c4741dab5228353a05938ffcdd5d4a2d533ae0e618287","id":7752,"name":"MarkedAsKnown","nameLocation":"113:13:24","nodeType":"EventDefinition","parameters":{"id":7751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7748,"indexed":true,"mutability":"mutable","name":"bytecodeHash","nameLocation":"143:12:24","nodeType":"VariableDeclaration","scope":7752,"src":"127:28:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7747,"name":"bytes32","nodeType":"ElementaryTypeName","src":"127:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7750,"indexed":true,"mutability":"mutable","name":"sendBytecodeToL1","nameLocation":"170:16:24","nodeType":"VariableDeclaration","scope":7752,"src":"157:29:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7749,"name":"bool","nodeType":"ElementaryTypeName","src":"157:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"126:61:24"},"src":"107:81:24"},{"functionSelector":"e516761e","id":7760,"implemented":false,"kind":"function","modifiers":[],"name":"markFactoryDeps","nameLocation":"203:15:24","nodeType":"FunctionDefinition","parameters":{"id":7758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7754,"mutability":"mutable","name":"_shouldSendToL1","nameLocation":"224:15:24","nodeType":"VariableDeclaration","scope":7760,"src":"219:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7753,"name":"bool","nodeType":"ElementaryTypeName","src":"219:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7757,"mutability":"mutable","name":"_hashes","nameLocation":"260:7:24","nodeType":"VariableDeclaration","scope":7760,"src":"241:26:24","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":7755,"name":"bytes32","nodeType":"ElementaryTypeName","src":"241:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7756,"nodeType":"ArrayTypeName","src":"241:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"218:50:24"},"returnParameters":{"id":7759,"nodeType":"ParameterList","parameters":[],"src":"277:0:24"},"scope":7768,"src":"194:84:24","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"4c6314f0","id":7767,"implemented":false,"kind":"function","modifiers":[],"name":"getMarker","nameLocation":"293:9:24","nodeType":"FunctionDefinition","parameters":{"id":7763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7762,"mutability":"mutable","name":"_hash","nameLocation":"311:5:24","nodeType":"VariableDeclaration","scope":7767,"src":"303:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7761,"name":"bytes32","nodeType":"ElementaryTypeName","src":"303:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"302:15:24"},"returnParameters":{"id":7766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7765,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7767,"src":"341:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7764,"name":"uint256","nodeType":"ElementaryTypeName","src":"341:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"340:9:24"},"scope":7768,"src":"284:66:24","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":7769,"src":"72:280:24","usedErrors":[]}],"src":"47:306:24"},"id":24},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IL1Messenger.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IL1Messenger.sol","exportedSymbols":{"IL1Messenger":[7786]},"id":7787,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":7770,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"47:23:25"},{"abstract":false,"baseContracts":[],"canonicalName":"IL1Messenger","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":7786,"linearizedBaseContracts":[7786],"name":"IL1Messenger","nameLocation":"82:12:25","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"3a36e47291f4201faf137fab081d92295bce2d53be2c6ca68ba82c7faa9ce241","id":7778,"name":"L1MessageSent","nameLocation":"278:13:25","nodeType":"EventDefinition","parameters":{"id":7777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7772,"indexed":true,"mutability":"mutable","name":"_sender","nameLocation":"308:7:25","nodeType":"VariableDeclaration","scope":7778,"src":"292:23:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7771,"name":"address","nodeType":"ElementaryTypeName","src":"292:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7774,"indexed":true,"mutability":"mutable","name":"_hash","nameLocation":"333:5:25","nodeType":"VariableDeclaration","scope":7778,"src":"317:21:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7773,"name":"bytes32","nodeType":"ElementaryTypeName","src":"317:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7776,"indexed":false,"mutability":"mutable","name":"_message","nameLocation":"346:8:25","nodeType":"VariableDeclaration","scope":7778,"src":"340:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7775,"name":"bytes","nodeType":"ElementaryTypeName","src":"340:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"291:64:25"},"src":"272:84:25"},{"functionSelector":"62f84b24","id":7785,"implemented":false,"kind":"function","modifiers":[],"name":"sendToL1","nameLocation":"371:8:25","nodeType":"FunctionDefinition","parameters":{"id":7781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7780,"mutability":"mutable","name":"_message","nameLocation":"393:8:25","nodeType":"VariableDeclaration","scope":7785,"src":"380:21:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7779,"name":"bytes","nodeType":"ElementaryTypeName","src":"380:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"379:23:25"},"returnParameters":{"id":7784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7783,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7785,"src":"421:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7782,"name":"bytes32","nodeType":"ElementaryTypeName","src":"421:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"420:9:25"},"scope":7786,"src":"362:68:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":7787,"src":"72:360:25","usedErrors":[]}],"src":"47:386:25"},"id":25},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/INonceHolder.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/INonceHolder.sol","exportedSymbols":{"INonceHolder":[7862]},"id":7863,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":7788,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"47:23:26"},{"abstract":false,"baseContracts":[],"canonicalName":"INonceHolder","contractDependencies":[],"contractKind":"interface","documentation":{"id":7789,"nodeType":"StructuredDocumentation","src":"72:439:26","text":" @author Matter Labs\n @dev Interface of the nonce holder contract -- a contract used by the system to ensure\n that there is always a unique identifier for a transaction with a particular account (we call it nonce).\n In other words, the pair of (address, nonce) should always be unique.\n @dev Custom accounts should use methods of this contract to store nonces or other possible unique identifiers \n for the transaction."},"fullyImplemented":false,"id":7862,"linearizedBaseContracts":[7862],"name":"INonceHolder","nameLocation":"522:12:26","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7790,"nodeType":"StructuredDocumentation","src":"541:55:26","text":"@dev Returns the current minimal nonce for account."},"functionSelector":"896909dc","id":7797,"implemented":false,"kind":"function","modifiers":[],"name":"getMinNonce","nameLocation":"610:11:26","nodeType":"FunctionDefinition","parameters":{"id":7793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7792,"mutability":"mutable","name":"_address","nameLocation":"630:8:26","nodeType":"VariableDeclaration","scope":7797,"src":"622:16:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7791,"name":"address","nodeType":"ElementaryTypeName","src":"622:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"621:18:26"},"returnParameters":{"id":7796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7795,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7797,"src":"662:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7794,"name":"uint256","nodeType":"ElementaryTypeName","src":"662:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"661:9:26"},"scope":7862,"src":"601:70:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7798,"nodeType":"StructuredDocumentation","src":"677:118:26","text":"@dev Returns the raw version of the current minimal nonce \n (equal to minNonce + 2^128 * deployment nonce)."},"functionSelector":"5aa9b6b5","id":7805,"implemented":false,"kind":"function","modifiers":[],"name":"getRawNonce","nameLocation":"809:11:26","nodeType":"FunctionDefinition","parameters":{"id":7801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7800,"mutability":"mutable","name":"_address","nameLocation":"829:8:26","nodeType":"VariableDeclaration","scope":7805,"src":"821:16:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7799,"name":"address","nodeType":"ElementaryTypeName","src":"821:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"820:18:26"},"returnParameters":{"id":7804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7803,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7805,"src":"862:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7802,"name":"uint256","nodeType":"ElementaryTypeName","src":"862:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"861:9:26"},"scope":7862,"src":"800:71:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7806,"nodeType":"StructuredDocumentation","src":"877:56:26","text":"@dev Increases the minimal nonce for the msg.sender."},"functionSelector":"38a78092","id":7813,"implemented":false,"kind":"function","modifiers":[],"name":"increaseMinNonce","nameLocation":"947:16:26","nodeType":"FunctionDefinition","parameters":{"id":7809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7808,"mutability":"mutable","name":"_value","nameLocation":"972:6:26","nodeType":"VariableDeclaration","scope":7813,"src":"964:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7807,"name":"uint256","nodeType":"ElementaryTypeName","src":"964:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"963:16:26"},"returnParameters":{"id":7812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7811,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7813,"src":"998:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7810,"name":"uint256","nodeType":"ElementaryTypeName","src":"998:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"997:9:26"},"scope":7862,"src":"938:69:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":7814,"nodeType":"StructuredDocumentation","src":"1013:44:26","text":"@dev Sets the nonce value `key` as used."},"functionSelector":"155fd27a","id":7821,"implemented":false,"kind":"function","modifiers":[],"name":"setValueUnderNonce","nameLocation":"1071:18:26","nodeType":"FunctionDefinition","parameters":{"id":7819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7816,"mutability":"mutable","name":"_key","nameLocation":"1098:4:26","nodeType":"VariableDeclaration","scope":7821,"src":"1090:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7815,"name":"uint256","nodeType":"ElementaryTypeName","src":"1090:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7818,"mutability":"mutable","name":"_value","nameLocation":"1112:6:26","nodeType":"VariableDeclaration","scope":7821,"src":"1104:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7817,"name":"uint256","nodeType":"ElementaryTypeName","src":"1104:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1089:30:26"},"returnParameters":{"id":7820,"nodeType":"ParameterList","parameters":[],"src":"1128:0:26"},"scope":7862,"src":"1062:67:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":7822,"nodeType":"StructuredDocumentation","src":"1135:53:26","text":"@dev Gets the value stored inside a custom nonce."},"functionSelector":"55d35d18","id":7829,"implemented":false,"kind":"function","modifiers":[],"name":"getValueUnderNonce","nameLocation":"1202:18:26","nodeType":"FunctionDefinition","parameters":{"id":7825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7824,"mutability":"mutable","name":"_key","nameLocation":"1229:4:26","nodeType":"VariableDeclaration","scope":7829,"src":"1221:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7823,"name":"uint256","nodeType":"ElementaryTypeName","src":"1221:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1220:14:26"},"returnParameters":{"id":7828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7827,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7829,"src":"1258:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7826,"name":"uint256","nodeType":"ElementaryTypeName","src":"1258:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1257:9:26"},"scope":7862,"src":"1193:74:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7830,"nodeType":"StructuredDocumentation","src":"1273:108:26","text":"@dev A convenience method to increment the minimal nonce if it is equal\n to the `_expectedNonce`."},"functionSelector":"e1239cd8","id":7835,"implemented":false,"kind":"function","modifiers":[],"name":"incrementMinNonceIfEquals","nameLocation":"1395:25:26","nodeType":"FunctionDefinition","parameters":{"id":7833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7832,"mutability":"mutable","name":"_expectedNonce","nameLocation":"1429:14:26","nodeType":"VariableDeclaration","scope":7835,"src":"1421:22:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7831,"name":"uint256","nodeType":"ElementaryTypeName","src":"1421:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1420:24:26"},"returnParameters":{"id":7834,"nodeType":"ParameterList","parameters":[],"src":"1453:0:26"},"scope":7862,"src":"1386:68:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":7836,"nodeType":"StructuredDocumentation","src":"1460:78:26","text":"@dev Returns the deployment nonce for the accounts used for CREATE opcode."},"functionSelector":"fb1a9a57","id":7843,"implemented":false,"kind":"function","modifiers":[],"name":"getDeploymentNonce","nameLocation":"1552:18:26","nodeType":"FunctionDefinition","parameters":{"id":7839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7838,"mutability":"mutable","name":"_address","nameLocation":"1579:8:26","nodeType":"VariableDeclaration","scope":7843,"src":"1571:16:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7837,"name":"address","nodeType":"ElementaryTypeName","src":"1571:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1570:18:26"},"returnParameters":{"id":7842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7841,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7843,"src":"1612:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7840,"name":"uint256","nodeType":"ElementaryTypeName","src":"1612:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1611:9:26"},"scope":7862,"src":"1543:78:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7844,"nodeType":"StructuredDocumentation","src":"1627:86:26","text":"@dev Increments the deployment nonce for the account and returns the previous one."},"functionSelector":"306395c6","id":7851,"implemented":false,"kind":"function","modifiers":[],"name":"incrementDeploymentNonce","nameLocation":"1727:24:26","nodeType":"FunctionDefinition","parameters":{"id":7847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7846,"mutability":"mutable","name":"_address","nameLocation":"1760:8:26","nodeType":"VariableDeclaration","scope":7851,"src":"1752:16:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7845,"name":"address","nodeType":"ElementaryTypeName","src":"1752:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1751:18:26"},"returnParameters":{"id":7850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7849,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7851,"src":"1788:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7848,"name":"uint256","nodeType":"ElementaryTypeName","src":"1788:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1787:9:26"},"scope":7862,"src":"1718:79:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":7852,"nodeType":"StructuredDocumentation","src":"1803:81:26","text":"@dev Determines whether a certain nonce has been already used for an account."},"functionSelector":"6ee1dc20","id":7861,"implemented":false,"kind":"function","modifiers":[],"name":"validateNonceUsage","nameLocation":"1898:18:26","nodeType":"FunctionDefinition","parameters":{"id":7859,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7854,"mutability":"mutable","name":"_address","nameLocation":"1925:8:26","nodeType":"VariableDeclaration","scope":7861,"src":"1917:16:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7853,"name":"address","nodeType":"ElementaryTypeName","src":"1917:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7856,"mutability":"mutable","name":"_key","nameLocation":"1943:4:26","nodeType":"VariableDeclaration","scope":7861,"src":"1935:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7855,"name":"uint256","nodeType":"ElementaryTypeName","src":"1935:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7858,"mutability":"mutable","name":"_shouldBeUsed","nameLocation":"1954:13:26","nodeType":"VariableDeclaration","scope":7861,"src":"1949:18:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7857,"name":"bool","nodeType":"ElementaryTypeName","src":"1949:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1916:52:26"},"returnParameters":{"id":7860,"nodeType":"ParameterList","parameters":[],"src":"1982:0:26"},"scope":7862,"src":"1889:94:26","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":7863,"src":"512:1473:26","usedErrors":[]}],"src":"47:1939:26"},"id":26},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/ISystemContext.sol":{"ast":{"absolutePath":"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/ISystemContext.sol","exportedSymbols":{"ISystemContext":[7937]},"id":7938,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":7864,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"47:23:27"},{"abstract":false,"baseContracts":[],"canonicalName":"ISystemContext","contractDependencies":[],"contractKind":"interface","documentation":{"id":7865,"nodeType":"StructuredDocumentation","src":"72:156:27","text":" @author Matter Labs\n @notice Contract that stores some of the context variables, that may be either \n block-scoped, tx-scoped or system-wide."},"fullyImplemented":false,"id":7937,"linearizedBaseContracts":[7937],"name":"ISystemContext","nameLocation":"239:14:27","nodeType":"ContractDefinition","nodes":[{"functionSelector":"9a8a0592","id":7870,"implemented":false,"kind":"function","modifiers":[],"name":"chainId","nameLocation":"269:7:27","nodeType":"FunctionDefinition","parameters":{"id":7866,"nodeType":"ParameterList","parameters":[],"src":"276:2:27"},"returnParameters":{"id":7869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7868,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7870,"src":"302:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7867,"name":"uint256","nodeType":"ElementaryTypeName","src":"302:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"301:9:27"},"scope":7937,"src":"260:51:27","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"938b5f32","id":7875,"implemented":false,"kind":"function","modifiers":[],"name":"origin","nameLocation":"326:6:27","nodeType":"FunctionDefinition","parameters":{"id":7871,"nodeType":"ParameterList","parameters":[],"src":"332:2:27"},"returnParameters":{"id":7874,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7873,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7875,"src":"358:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7872,"name":"address","nodeType":"ElementaryTypeName","src":"358:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"357:9:27"},"scope":7937,"src":"317:50:27","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"7516bc2b","id":7880,"implemented":false,"kind":"function","modifiers":[],"name":"ergsPrice","nameLocation":"382:9:27","nodeType":"FunctionDefinition","parameters":{"id":7876,"nodeType":"ParameterList","parameters":[],"src":"391:2:27"},"returnParameters":{"id":7879,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7878,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7880,"src":"417:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7877,"name":"uint256","nodeType":"ElementaryTypeName","src":"417:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"416:9:27"},"scope":7937,"src":"373:53:27","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"590cfb27","id":7885,"implemented":false,"kind":"function","modifiers":[],"name":"blockErgsLimit","nameLocation":"441:14:27","nodeType":"FunctionDefinition","parameters":{"id":7881,"nodeType":"ParameterList","parameters":[],"src":"455:2:27"},"returnParameters":{"id":7884,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7883,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7885,"src":"481:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7882,"name":"uint256","nodeType":"ElementaryTypeName","src":"481:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"480:9:27"},"scope":7937,"src":"432:58:27","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"a6ae0aac","id":7890,"implemented":false,"kind":"function","modifiers":[],"name":"coinbase","nameLocation":"505:8:27","nodeType":"FunctionDefinition","parameters":{"id":7886,"nodeType":"ParameterList","parameters":[],"src":"513:2:27"},"returnParameters":{"id":7889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7888,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7890,"src":"539:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7887,"name":"address","nodeType":"ElementaryTypeName","src":"539:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"538:9:27"},"scope":7937,"src":"496:52:27","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"19cae462","id":7895,"implemented":false,"kind":"function","modifiers":[],"name":"difficulty","nameLocation":"563:10:27","nodeType":"FunctionDefinition","parameters":{"id":7891,"nodeType":"ParameterList","parameters":[],"src":"573:2:27"},"returnParameters":{"id":7894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7893,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7895,"src":"599:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7892,"name":"uint256","nodeType":"ElementaryTypeName","src":"599:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"598:9:27"},"scope":7937,"src":"554:54:27","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"0e153d77","id":7900,"implemented":false,"kind":"function","modifiers":[],"name":"msize","nameLocation":"623:5:27","nodeType":"FunctionDefinition","parameters":{"id":7896,"nodeType":"ParameterList","parameters":[],"src":"628:2:27"},"returnParameters":{"id":7899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7898,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7900,"src":"654:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7897,"name":"uint256","nodeType":"ElementaryTypeName","src":"654:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"653:9:27"},"scope":7937,"src":"614:49:27","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"6ef25c3a","id":7905,"implemented":false,"kind":"function","modifiers":[],"name":"baseFee","nameLocation":"678:7:27","nodeType":"FunctionDefinition","parameters":{"id":7901,"nodeType":"ParameterList","parameters":[],"src":"685:2:27"},"returnParameters":{"id":7904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7903,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7905,"src":"711:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7902,"name":"uint256","nodeType":"ElementaryTypeName","src":"711:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"710:9:27"},"scope":7937,"src":"669:51:27","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"85df51fd","id":7912,"implemented":false,"kind":"function","modifiers":[],"name":"blockHash","nameLocation":"735:9:27","nodeType":"FunctionDefinition","parameters":{"id":7908,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7907,"mutability":"mutable","name":"_block","nameLocation":"753:6:27","nodeType":"VariableDeclaration","scope":7912,"src":"745:14:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7906,"name":"uint256","nodeType":"ElementaryTypeName","src":"745:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"744:16:27"},"returnParameters":{"id":7911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7910,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7912,"src":"784:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7909,"name":"bytes32","nodeType":"ElementaryTypeName","src":"784:7:27","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"783:9:27"},"scope":7937,"src":"726:67:27","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"80b41246","id":7919,"implemented":false,"kind":"function","modifiers":[],"name":"getBlockHashEVM","nameLocation":"808:15:27","nodeType":"FunctionDefinition","parameters":{"id":7915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7914,"mutability":"mutable","name":"_block","nameLocation":"832:6:27","nodeType":"VariableDeclaration","scope":7919,"src":"824:14:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7913,"name":"uint256","nodeType":"ElementaryTypeName","src":"824:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"823:16:27"},"returnParameters":{"id":7918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7917,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7919,"src":"863:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7916,"name":"bytes32","nodeType":"ElementaryTypeName","src":"863:7:27","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"862:9:27"},"scope":7937,"src":"799:73:27","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"d4a4ca0d","id":7926,"implemented":false,"kind":"function","modifiers":[],"name":"getBlockNumberAndTimestamp","nameLocation":"887:26:27","nodeType":"FunctionDefinition","parameters":{"id":7920,"nodeType":"ParameterList","parameters":[],"src":"913:2:27"},"returnParameters":{"id":7925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7922,"mutability":"mutable","name":"blockNumber","nameLocation":"947:11:27","nodeType":"VariableDeclaration","scope":7926,"src":"939:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7921,"name":"uint256","nodeType":"ElementaryTypeName","src":"939:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7924,"mutability":"mutable","name":"blockTimestamp","nameLocation":"968:14:27","nodeType":"VariableDeclaration","scope":7926,"src":"960:22:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7923,"name":"uint256","nodeType":"ElementaryTypeName","src":"960:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"938:45:27"},"scope":7937,"src":"878:106:27","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"42cbb15c","id":7931,"implemented":false,"kind":"function","modifiers":[],"name":"getBlockNumber","nameLocation":"1182:14:27","nodeType":"FunctionDefinition","parameters":{"id":7927,"nodeType":"ParameterList","parameters":[],"src":"1196:2:27"},"returnParameters":{"id":7930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7929,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7931,"src":"1222:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7928,"name":"uint256","nodeType":"ElementaryTypeName","src":"1222:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1221:9:27"},"scope":7937,"src":"1173:58:27","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"796b89b9","id":7936,"implemented":false,"kind":"function","modifiers":[],"name":"getBlockTimestamp","nameLocation":"1246:17:27","nodeType":"FunctionDefinition","parameters":{"id":7932,"nodeType":"ParameterList","parameters":[],"src":"1263:2:27"},"returnParameters":{"id":7935,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7934,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7936,"src":"1289:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7933,"name":"uint256","nodeType":"ElementaryTypeName","src":"1289:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1288:9:27"},"scope":7937,"src":"1237:61:27","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":7938,"src":"229:1071:27","usedErrors":[]}],"src":"47:1254:27"},"id":27},"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","exportedSymbols":{"AddressUpgradeable":[9501],"ContextUpgradeable":[9543],"Initializable":[8238],"OwnableUpgradeable":[8069]},"id":8070,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7939,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"102:23:28"},{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol","file":"../utils/ContextUpgradeable.sol","id":7940,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8070,"sourceUnit":9544,"src":"127:41:28","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"../proxy/utils/Initializable.sol","id":7941,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8070,"sourceUnit":8239,"src":"169:42:28","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":7943,"name":"Initializable","nameLocations":["748:13:28"],"nodeType":"IdentifierPath","referencedDeclaration":8238,"src":"748:13:28"},"id":7944,"nodeType":"InheritanceSpecifier","src":"748:13:28"},{"baseName":{"id":7945,"name":"ContextUpgradeable","nameLocations":["763:18:28"],"nodeType":"IdentifierPath","referencedDeclaration":9543,"src":"763:18:28"},"id":7946,"nodeType":"InheritanceSpecifier","src":"763:18:28"}],"canonicalName":"OwnableUpgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":7942,"nodeType":"StructuredDocumentation","src":"213:494:28","text":" @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n By default, the owner account will be the one that deploys the contract. This\n can later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."},"fullyImplemented":true,"id":8069,"linearizedBaseContracts":[8069,9543,8238],"name":"OwnableUpgradeable","nameLocation":"726:18:28","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":7948,"mutability":"mutable","name":"_owner","nameLocation":"804:6:28","nodeType":"VariableDeclaration","scope":8069,"src":"788:22:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7947,"name":"address","nodeType":"ElementaryTypeName","src":"788:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":7954,"name":"OwnershipTransferred","nameLocation":"823:20:28","nodeType":"EventDefinition","parameters":{"id":7953,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7950,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"860:13:28","nodeType":"VariableDeclaration","scope":7954,"src":"844:29:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7949,"name":"address","nodeType":"ElementaryTypeName","src":"844:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7952,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"891:8:28","nodeType":"VariableDeclaration","scope":7954,"src":"875:24:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7951,"name":"address","nodeType":"ElementaryTypeName","src":"875:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"843:57:28"},"src":"817:84:28"},{"body":{"id":7963,"nodeType":"Block","src":"1055:43:28","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":7960,"name":"__Ownable_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7975,"src":"1065:24:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":7961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1065:26:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7962,"nodeType":"ExpressionStatement","src":"1065:26:28"}]},"documentation":{"id":7955,"nodeType":"StructuredDocumentation","src":"907:91:28","text":" @dev Initializes the contract setting the deployer as the initial owner."},"id":7964,"implemented":true,"kind":"function","modifiers":[{"id":7958,"kind":"modifierInvocation","modifierName":{"id":7957,"name":"onlyInitializing","nameLocations":["1038:16:28"],"nodeType":"IdentifierPath","referencedDeclaration":8183,"src":"1038:16:28"},"nodeType":"ModifierInvocation","src":"1038:16:28"}],"name":"__Ownable_init","nameLocation":"1012:14:28","nodeType":"FunctionDefinition","parameters":{"id":7956,"nodeType":"ParameterList","parameters":[],"src":"1026:2:28"},"returnParameters":{"id":7959,"nodeType":"ParameterList","parameters":[],"src":"1055:0:28"},"scope":8069,"src":"1003:95:28","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7974,"nodeType":"Block","src":"1166:49:28","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":7970,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9528,"src":"1195:10:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":7971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1195:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7969,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8063,"src":"1176:18:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":7972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1176:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7973,"nodeType":"ExpressionStatement","src":"1176:32:28"}]},"id":7975,"implemented":true,"kind":"function","modifiers":[{"id":7967,"kind":"modifierInvocation","modifierName":{"id":7966,"name":"onlyInitializing","nameLocations":["1149:16:28"],"nodeType":"IdentifierPath","referencedDeclaration":8183,"src":"1149:16:28"},"nodeType":"ModifierInvocation","src":"1149:16:28"}],"name":"__Ownable_init_unchained","nameLocation":"1113:24:28","nodeType":"FunctionDefinition","parameters":{"id":7965,"nodeType":"ParameterList","parameters":[],"src":"1137:2:28"},"returnParameters":{"id":7968,"nodeType":"ParameterList","parameters":[],"src":"1166:0:28"},"scope":8069,"src":"1104:111:28","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7982,"nodeType":"Block","src":"1324:41:28","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":7978,"name":"_checkOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8006,"src":"1334:11:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":7979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1334:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7980,"nodeType":"ExpressionStatement","src":"1334:13:28"},{"id":7981,"nodeType":"PlaceholderStatement","src":"1357:1:28"}]},"documentation":{"id":7976,"nodeType":"StructuredDocumentation","src":"1221:77:28","text":" @dev Throws if called by any account other than the owner."},"id":7983,"name":"onlyOwner","nameLocation":"1312:9:28","nodeType":"ModifierDefinition","parameters":{"id":7977,"nodeType":"ParameterList","parameters":[],"src":"1321:2:28"},"src":"1303:62:28","virtual":false,"visibility":"internal"},{"body":{"id":7991,"nodeType":"Block","src":"1496:30:28","statements":[{"expression":{"id":7989,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7948,"src":"1513:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":7988,"id":7990,"nodeType":"Return","src":"1506:13:28"}]},"documentation":{"id":7984,"nodeType":"StructuredDocumentation","src":"1371:65:28","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":7992,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"1450:5:28","nodeType":"FunctionDefinition","parameters":{"id":7985,"nodeType":"ParameterList","parameters":[],"src":"1455:2:28"},"returnParameters":{"id":7988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7987,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7992,"src":"1487:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7986,"name":"address","nodeType":"ElementaryTypeName","src":"1487:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1486:9:28"},"scope":8069,"src":"1441:85:28","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":8005,"nodeType":"Block","src":"1644:85:28","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":7997,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7992,"src":"1662:5:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":7998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1662:7:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":7999,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9528,"src":"1673:10:28","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":8000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1673:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1662:23:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","id":8002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1687:34:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""},"value":"Ownable: caller is not the owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""}],"id":7996,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1654:7:28","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1654:68:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8004,"nodeType":"ExpressionStatement","src":"1654:68:28"}]},"documentation":{"id":7993,"nodeType":"StructuredDocumentation","src":"1532:62:28","text":" @dev Throws if the sender is not the owner."},"id":8006,"implemented":true,"kind":"function","modifiers":[],"name":"_checkOwner","nameLocation":"1608:11:28","nodeType":"FunctionDefinition","parameters":{"id":7994,"nodeType":"ParameterList","parameters":[],"src":"1619:2:28"},"returnParameters":{"id":7995,"nodeType":"ParameterList","parameters":[],"src":"1644:0:28"},"scope":8069,"src":"1599:130:28","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":8019,"nodeType":"Block","src":"2125:47:28","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":8015,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2162:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8014,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2154:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8013,"name":"address","nodeType":"ElementaryTypeName","src":"2154:7:28","typeDescriptions":{}}},"id":8016,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2154:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8012,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8063,"src":"2135:18:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":8017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2135:30:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8018,"nodeType":"ExpressionStatement","src":"2135:30:28"}]},"documentation":{"id":8007,"nodeType":"StructuredDocumentation","src":"1735:331:28","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions anymore. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby removing any functionality that is only available to the owner."},"functionSelector":"715018a6","id":8020,"implemented":true,"kind":"function","modifiers":[{"id":8010,"kind":"modifierInvocation","modifierName":{"id":8009,"name":"onlyOwner","nameLocations":["2115:9:28"],"nodeType":"IdentifierPath","referencedDeclaration":7983,"src":"2115:9:28"},"nodeType":"ModifierInvocation","src":"2115:9:28"}],"name":"renounceOwnership","nameLocation":"2080:17:28","nodeType":"FunctionDefinition","parameters":{"id":8008,"nodeType":"ParameterList","parameters":[],"src":"2097:2:28"},"returnParameters":{"id":8011,"nodeType":"ParameterList","parameters":[],"src":"2125:0:28"},"scope":8069,"src":"2071:101:28","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":8042,"nodeType":"Block","src":"2391:128:28","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8029,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8023,"src":"2409:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":8032,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2429:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8031,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2421:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8030,"name":"address","nodeType":"ElementaryTypeName","src":"2421:7:28","typeDescriptions":{}}},"id":8033,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2421:10:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2409:22:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373","id":8035,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2433:40:28","typeDescriptions":{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""},"value":"Ownable: new owner is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""}],"id":8028,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2401:7:28","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2401:73:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8037,"nodeType":"ExpressionStatement","src":"2401:73:28"},{"expression":{"arguments":[{"id":8039,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8023,"src":"2503:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8038,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8063,"src":"2484:18:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":8040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2484:28:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8041,"nodeType":"ExpressionStatement","src":"2484:28:28"}]},"documentation":{"id":8021,"nodeType":"StructuredDocumentation","src":"2178:138:28","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":8043,"implemented":true,"kind":"function","modifiers":[{"id":8026,"kind":"modifierInvocation","modifierName":{"id":8025,"name":"onlyOwner","nameLocations":["2381:9:28"],"nodeType":"IdentifierPath","referencedDeclaration":7983,"src":"2381:9:28"},"nodeType":"ModifierInvocation","src":"2381:9:28"}],"name":"transferOwnership","nameLocation":"2330:17:28","nodeType":"FunctionDefinition","parameters":{"id":8024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8023,"mutability":"mutable","name":"newOwner","nameLocation":"2356:8:28","nodeType":"VariableDeclaration","scope":8043,"src":"2348:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8022,"name":"address","nodeType":"ElementaryTypeName","src":"2348:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2347:18:28"},"returnParameters":{"id":8027,"nodeType":"ParameterList","parameters":[],"src":"2391:0:28"},"scope":8069,"src":"2321:198:28","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":8062,"nodeType":"Block","src":"2736:124:28","statements":[{"assignments":[8050],"declarations":[{"constant":false,"id":8050,"mutability":"mutable","name":"oldOwner","nameLocation":"2754:8:28","nodeType":"VariableDeclaration","scope":8062,"src":"2746:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8049,"name":"address","nodeType":"ElementaryTypeName","src":"2746:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":8052,"initialValue":{"id":8051,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7948,"src":"2765:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2746:25:28"},{"expression":{"id":8055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8053,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7948,"src":"2781:6:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8054,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8046,"src":"2790:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2781:17:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":8056,"nodeType":"ExpressionStatement","src":"2781:17:28"},{"eventCall":{"arguments":[{"id":8058,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8050,"src":"2834:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8059,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8046,"src":"2844:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":8057,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7954,"src":"2813:20:28","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":8060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2813:40:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8061,"nodeType":"EmitStatement","src":"2808:45:28"}]},"documentation":{"id":8044,"nodeType":"StructuredDocumentation","src":"2525:143:28","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."},"id":8063,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"2682:18:28","nodeType":"FunctionDefinition","parameters":{"id":8047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8046,"mutability":"mutable","name":"newOwner","nameLocation":"2709:8:28","nodeType":"VariableDeclaration","scope":8063,"src":"2701:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8045,"name":"address","nodeType":"ElementaryTypeName","src":"2701:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2700:18:28"},"returnParameters":{"id":8048,"nodeType":"ParameterList","parameters":[],"src":"2736:0:28"},"scope":8069,"src":"2673:187:28","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"constant":false,"documentation":{"id":8064,"nodeType":"StructuredDocumentation","src":"2866:254:28","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":8068,"mutability":"mutable","name":"__gap","nameLocation":"3145:5:28","nodeType":"VariableDeclaration","scope":8069,"src":"3125:25:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage","typeString":"uint256[49]"},"typeName":{"baseType":{"id":8065,"name":"uint256","nodeType":"ElementaryTypeName","src":"3125:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8067,"length":{"hexValue":"3439","id":8066,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3133:2:28","typeDescriptions":{"typeIdentifier":"t_rational_49_by_1","typeString":"int_const 49"},"value":"49"},"nodeType":"ArrayTypeName","src":"3125:11:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage_ptr","typeString":"uint256[49]"}},"visibility":"private"}],"scope":8070,"src":"708:2445:28","usedErrors":[]}],"src":"102:3052:28"},"id":28},"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","exportedSymbols":{"AddressUpgradeable":[9501],"Initializable":[8238]},"id":8239,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":8071,"literals":["solidity","^","0.8",".2"],"nodeType":"PragmaDirective","src":"113:23:29"},{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol","file":"../../utils/AddressUpgradeable.sol","id":8072,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8239,"sourceUnit":9502,"src":"138:44:29","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"Initializable","contractDependencies":[],"contractKind":"contract","documentation":{"id":8073,"nodeType":"StructuredDocumentation","src":"184:2198:29","text":" @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n case an upgrade adds a module that needs to be initialized.\n For example:\n [.hljs-theme-light.nopadding]\n ```\n contract MyToken is ERC20Upgradeable {\n     function initialize() initializer public {\n         __ERC20_init(\"MyToken\", \"MTK\");\n     }\n }\n contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n     function initializeV2() reinitializer(2) public {\n         __ERC20Permit_init(\"MyToken\");\n     }\n }\n ```\n TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n [CAUTION]\n ====\n Avoid leaving a contract uninitialized.\n An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n [.hljs-theme-light.nopadding]\n ```\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() {\n     _disableInitializers();\n }\n ```\n ===="},"fullyImplemented":true,"id":8238,"linearizedBaseContracts":[8238],"name":"Initializable","nameLocation":"2401:13:29","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":8074,"nodeType":"StructuredDocumentation","src":"2421:109:29","text":" @dev Indicates that the contract has been initialized.\n @custom:oz-retyped-from bool"},"id":8076,"mutability":"mutable","name":"_initialized","nameLocation":"2549:12:29","nodeType":"VariableDeclaration","scope":8238,"src":"2535:26:29","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8075,"name":"uint8","nodeType":"ElementaryTypeName","src":"2535:5:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"constant":false,"documentation":{"id":8077,"nodeType":"StructuredDocumentation","src":"2568:91:29","text":" @dev Indicates that the contract is in the process of being initialized."},"id":8079,"mutability":"mutable","name":"_initializing","nameLocation":"2677:13:29","nodeType":"VariableDeclaration","scope":8238,"src":"2664:26:29","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8078,"name":"bool","nodeType":"ElementaryTypeName","src":"2664:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"anonymous":false,"documentation":{"id":8080,"nodeType":"StructuredDocumentation","src":"2697:90:29","text":" @dev Triggered when the contract has been initialized or reinitialized."},"eventSelector":"7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498","id":8084,"name":"Initialized","nameLocation":"2798:11:29","nodeType":"EventDefinition","parameters":{"id":8083,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8082,"indexed":false,"mutability":"mutable","name":"version","nameLocation":"2816:7:29","nodeType":"VariableDeclaration","scope":8084,"src":"2810:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8081,"name":"uint8","nodeType":"ElementaryTypeName","src":"2810:5:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"2809:15:29"},"src":"2792:33:29"},{"body":{"id":8139,"nodeType":"Block","src":"3258:483:29","statements":[{"assignments":[8088],"declarations":[{"constant":false,"id":8088,"mutability":"mutable","name":"isTopLevelCall","nameLocation":"3273:14:29","nodeType":"VariableDeclaration","scope":8139,"src":"3268:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8087,"name":"bool","nodeType":"ElementaryTypeName","src":"3268:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":8091,"initialValue":{"id":8090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3290:14:29","subExpression":{"id":8089,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8079,"src":"3291:13:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3268:36:29"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8093,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8088,"src":"3336:14:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":8096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8094,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8076,"src":"3354:12:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"31","id":8095,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3369:1:29","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3354:16:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3336:34:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":8098,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3335:36:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3376:45:29","subExpression":{"arguments":[{"arguments":[{"id":8103,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3415:4:29","typeDescriptions":{"typeIdentifier":"t_contract$_Initializable_$8238","typeString":"contract Initializable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Initializable_$8238","typeString":"contract Initializable"}],"id":8102,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3407:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8101,"name":"address","nodeType":"ElementaryTypeName","src":"3407:7:29","typeDescriptions":{}}},"id":8104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3407:13:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8099,"name":"AddressUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"3377:18:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AddressUpgradeable_$9501_$","typeString":"type(library AddressUpgradeable)"}},"id":8100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3396:10:29","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":9235,"src":"3377:29:29","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":8105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3377:44:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":8109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8107,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8076,"src":"3425:12:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":8108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3441:1:29","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3425:17:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3376:66:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":8111,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3375:68:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3335:108:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564","id":8113,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3457:48:29","typeDescriptions":{"typeIdentifier":"t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","typeString":"literal_string \"Initializable: contract is already initialized\""},"value":"Initializable: contract is already initialized"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","typeString":"literal_string \"Initializable: contract is already initialized\""}],"id":8092,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3314:7:29","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3314:201:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8115,"nodeType":"ExpressionStatement","src":"3314:201:29"},{"expression":{"id":8118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8116,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8076,"src":"3525:12:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":8117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3540:1:29","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3525:16:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":8119,"nodeType":"ExpressionStatement","src":"3525:16:29"},{"condition":{"id":8120,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8088,"src":"3555:14:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8126,"nodeType":"IfStatement","src":"3551:65:29","trueBody":{"id":8125,"nodeType":"Block","src":"3571:45:29","statements":[{"expression":{"id":8123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8121,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8079,"src":"3585:13:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":8122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3601:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"3585:20:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8124,"nodeType":"ExpressionStatement","src":"3585:20:29"}]}},{"id":8127,"nodeType":"PlaceholderStatement","src":"3625:1:29"},{"condition":{"id":8128,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8088,"src":"3640:14:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8138,"nodeType":"IfStatement","src":"3636:99:29","trueBody":{"id":8137,"nodeType":"Block","src":"3656:79:29","statements":[{"expression":{"id":8131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8129,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8079,"src":"3670:13:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":8130,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3686:5:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"3670:21:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8132,"nodeType":"ExpressionStatement","src":"3670:21:29"},{"eventCall":{"arguments":[{"hexValue":"31","id":8134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3722:1:29","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":8133,"name":"Initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8084,"src":"3710:11:29","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":8135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3710:14:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8136,"nodeType":"EmitStatement","src":"3705:19:29"}]}}]},"documentation":{"id":8085,"nodeType":"StructuredDocumentation","src":"2831:399:29","text":" @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n `onlyInitializing` functions can be used to initialize parent contracts.\n Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\n constructor.\n Emits an {Initialized} event."},"id":8140,"name":"initializer","nameLocation":"3244:11:29","nodeType":"ModifierDefinition","parameters":{"id":8086,"nodeType":"ParameterList","parameters":[],"src":"3255:2:29"},"src":"3235:506:29","virtual":false,"visibility":"internal"},{"body":{"id":8172,"nodeType":"Block","src":"4852:255:29","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4870:14:29","subExpression":{"id":8146,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8079,"src":"4871:13:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":8150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8148,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8076,"src":"4888:12:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8149,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8143,"src":"4903:7:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"4888:22:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4870:40:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564","id":8152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4912:48:29","typeDescriptions":{"typeIdentifier":"t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","typeString":"literal_string \"Initializable: contract is already initialized\""},"value":"Initializable: contract is already initialized"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","typeString":"literal_string \"Initializable: contract is already initialized\""}],"id":8145,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4862:7:29","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4862:99:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8154,"nodeType":"ExpressionStatement","src":"4862:99:29"},{"expression":{"id":8157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8155,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8076,"src":"4971:12:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8156,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8143,"src":"4986:7:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"4971:22:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":8158,"nodeType":"ExpressionStatement","src":"4971:22:29"},{"expression":{"id":8161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8159,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8079,"src":"5003:13:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":8160,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5019:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"5003:20:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8162,"nodeType":"ExpressionStatement","src":"5003:20:29"},{"id":8163,"nodeType":"PlaceholderStatement","src":"5033:1:29"},{"expression":{"id":8166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8164,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8079,"src":"5044:13:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":8165,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5060:5:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5044:21:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8167,"nodeType":"ExpressionStatement","src":"5044:21:29"},{"eventCall":{"arguments":[{"id":8169,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8143,"src":"5092:7:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":8168,"name":"Initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8084,"src":"5080:11:29","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":8170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5080:20:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8171,"nodeType":"EmitStatement","src":"5075:25:29"}]},"documentation":{"id":8141,"nodeType":"StructuredDocumentation","src":"3747:1062:29","text":" @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n used to initialize parent contracts.\n A reinitializer may be used after the original initialization step. This is essential to configure modules that\n are added through upgrades and that require initialization.\n When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n cannot be nested. If one is invoked in the context of another, execution will revert.\n Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n a contract, executing them in the right order is up to the developer or operator.\n WARNING: setting the version to 255 will prevent any future reinitialization.\n Emits an {Initialized} event."},"id":8173,"name":"reinitializer","nameLocation":"4823:13:29","nodeType":"ModifierDefinition","parameters":{"id":8144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8143,"mutability":"mutable","name":"version","nameLocation":"4843:7:29","nodeType":"VariableDeclaration","scope":8173,"src":"4837:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8142,"name":"uint8","nodeType":"ElementaryTypeName","src":"4837:5:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"4836:15:29"},"src":"4814:293:29","virtual":false,"visibility":"internal"},{"body":{"id":8182,"nodeType":"Block","src":"5345:97:29","statements":[{"expression":{"arguments":[{"id":8177,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8079,"src":"5363:13:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420696e697469616c697a696e67","id":8178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5378:45:29","typeDescriptions":{"typeIdentifier":"t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b","typeString":"literal_string \"Initializable: contract is not initializing\""},"value":"Initializable: contract is not initializing"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b","typeString":"literal_string \"Initializable: contract is not initializing\""}],"id":8176,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5355:7:29","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5355:69:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8180,"nodeType":"ExpressionStatement","src":"5355:69:29"},{"id":8181,"nodeType":"PlaceholderStatement","src":"5434:1:29"}]},"documentation":{"id":8174,"nodeType":"StructuredDocumentation","src":"5113:199:29","text":" @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n {initializer} and {reinitializer} modifiers, directly or indirectly."},"id":8183,"name":"onlyInitializing","nameLocation":"5326:16:29","nodeType":"ModifierDefinition","parameters":{"id":8175,"nodeType":"ParameterList","parameters":[],"src":"5342:2:29"},"src":"5317:125:29","virtual":false,"visibility":"internal"},{"body":{"id":8218,"nodeType":"Block","src":"5977:230:29","statements":[{"expression":{"arguments":[{"id":8189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5995:14:29","subExpression":{"id":8188,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8079,"src":"5996:13:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320696e697469616c697a696e67","id":8190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6011:41:29","typeDescriptions":{"typeIdentifier":"t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a","typeString":"literal_string \"Initializable: contract is initializing\""},"value":"Initializable: contract is initializing"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a","typeString":"literal_string \"Initializable: contract is initializing\""}],"id":8187,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5987:7:29","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5987:66:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8192,"nodeType":"ExpressionStatement","src":"5987:66:29"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":8199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8193,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8076,"src":"6067:12:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"arguments":[{"id":8196,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6087:5:29","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":8195,"name":"uint8","nodeType":"ElementaryTypeName","src":"6087:5:29","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":8194,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6082:4:29","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6082:11:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":8198,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6094:3:29","memberName":"max","nodeType":"MemberAccess","src":"6082:15:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"6067:30:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8217,"nodeType":"IfStatement","src":"6063:138:29","trueBody":{"id":8216,"nodeType":"Block","src":"6099:102:29","statements":[{"expression":{"id":8206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8200,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8076,"src":"6113:12:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"id":8203,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6133:5:29","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":8202,"name":"uint8","nodeType":"ElementaryTypeName","src":"6133:5:29","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":8201,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6128:4:29","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8204,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6128:11:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":8205,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6140:3:29","memberName":"max","nodeType":"MemberAccess","src":"6128:15:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"6113:30:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":8207,"nodeType":"ExpressionStatement","src":"6113:30:29"},{"eventCall":{"arguments":[{"expression":{"arguments":[{"id":8211,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6179:5:29","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":8210,"name":"uint8","nodeType":"ElementaryTypeName","src":"6179:5:29","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":8209,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6174:4:29","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6174:11:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":8213,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6186:3:29","memberName":"max","nodeType":"MemberAccess","src":"6174:15:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":8208,"name":"Initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8084,"src":"6162:11:29","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":8214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6162:28:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8215,"nodeType":"EmitStatement","src":"6157:33:29"}]}}]},"documentation":{"id":8184,"nodeType":"StructuredDocumentation","src":"5448:475:29","text":" @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n through proxies.\n Emits an {Initialized} event the first time it is successfully executed."},"id":8219,"implemented":true,"kind":"function","modifiers":[],"name":"_disableInitializers","nameLocation":"5937:20:29","nodeType":"FunctionDefinition","parameters":{"id":8185,"nodeType":"ParameterList","parameters":[],"src":"5957:2:29"},"returnParameters":{"id":8186,"nodeType":"ParameterList","parameters":[],"src":"5977:0:29"},"scope":8238,"src":"5928:279:29","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":8227,"nodeType":"Block","src":"6384:36:29","statements":[{"expression":{"id":8225,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8076,"src":"6401:12:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":8224,"id":8226,"nodeType":"Return","src":"6394:19:29"}]},"documentation":{"id":8220,"nodeType":"StructuredDocumentation","src":"6213:102:29","text":" @dev Internal function that returns the initialized version. Returns `_initialized`"},"id":8228,"implemented":true,"kind":"function","modifiers":[],"name":"_getInitializedVersion","nameLocation":"6329:22:29","nodeType":"FunctionDefinition","parameters":{"id":8221,"nodeType":"ParameterList","parameters":[],"src":"6351:2:29"},"returnParameters":{"id":8224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8223,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8228,"src":"6377:5:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8222,"name":"uint8","nodeType":"ElementaryTypeName","src":"6377:5:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"6376:7:29"},"scope":8238,"src":"6320:100:29","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":8236,"nodeType":"Block","src":"6590:37:29","statements":[{"expression":{"id":8234,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8079,"src":"6607:13:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":8233,"id":8235,"nodeType":"Return","src":"6600:20:29"}]},"documentation":{"id":8229,"nodeType":"StructuredDocumentation","src":"6426:103:29","text":" @dev Internal function that returns the initialized version. Returns `_initializing`"},"id":8237,"implemented":true,"kind":"function","modifiers":[],"name":"_isInitializing","nameLocation":"6543:15:29","nodeType":"FunctionDefinition","parameters":{"id":8230,"nodeType":"ParameterList","parameters":[],"src":"6558:2:29"},"returnParameters":{"id":8233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8232,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8237,"src":"6584:4:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8231,"name":"bool","nodeType":"ElementaryTypeName","src":"6584:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6583:6:29"},"scope":8238,"src":"6534:93:29","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":8239,"src":"2383:4246:29","usedErrors":[]}],"src":"113:6517:29"},"id":29},"@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol","exportedSymbols":{"AddressUpgradeable":[9501],"ContextUpgradeable":[9543],"Initializable":[8238],"PausableUpgradeable":[8365]},"id":8366,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":8240,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"105:23:30"},{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol","file":"../utils/ContextUpgradeable.sol","id":8241,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8366,"sourceUnit":9544,"src":"130:41:30","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"../proxy/utils/Initializable.sol","id":8242,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8366,"sourceUnit":8239,"src":"172:42:30","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":8244,"name":"Initializable","nameLocations":["697:13:30"],"nodeType":"IdentifierPath","referencedDeclaration":8238,"src":"697:13:30"},"id":8245,"nodeType":"InheritanceSpecifier","src":"697:13:30"},{"baseName":{"id":8246,"name":"ContextUpgradeable","nameLocations":["712:18:30"],"nodeType":"IdentifierPath","referencedDeclaration":9543,"src":"712:18:30"},"id":8247,"nodeType":"InheritanceSpecifier","src":"712:18:30"}],"canonicalName":"PausableUpgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":8243,"nodeType":"StructuredDocumentation","src":"216:439:30","text":" @dev Contract module which allows children to implement an emergency stop\n mechanism that can be triggered by an authorized account.\n This module is used through inheritance. It will make available the\n modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n the functions of your contract. Note that they will not be pausable by\n simply including this module, only once the modifiers are put in place."},"fullyImplemented":true,"id":8365,"linearizedBaseContracts":[8365,9543,8238],"name":"PausableUpgradeable","nameLocation":"674:19:30","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":8248,"nodeType":"StructuredDocumentation","src":"737:73:30","text":" @dev Emitted when the pause is triggered by `account`."},"eventSelector":"62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258","id":8252,"name":"Paused","nameLocation":"821:6:30","nodeType":"EventDefinition","parameters":{"id":8251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8250,"indexed":false,"mutability":"mutable","name":"account","nameLocation":"836:7:30","nodeType":"VariableDeclaration","scope":8252,"src":"828:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8249,"name":"address","nodeType":"ElementaryTypeName","src":"828:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"827:17:30"},"src":"815:30:30"},{"anonymous":false,"documentation":{"id":8253,"nodeType":"StructuredDocumentation","src":"851:70:30","text":" @dev Emitted when the pause is lifted by `account`."},"eventSelector":"5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa","id":8257,"name":"Unpaused","nameLocation":"932:8:30","nodeType":"EventDefinition","parameters":{"id":8256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8255,"indexed":false,"mutability":"mutable","name":"account","nameLocation":"949:7:30","nodeType":"VariableDeclaration","scope":8257,"src":"941:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8254,"name":"address","nodeType":"ElementaryTypeName","src":"941:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"940:17:30"},"src":"926:32:30"},{"constant":false,"id":8259,"mutability":"mutable","name":"_paused","nameLocation":"977:7:30","nodeType":"VariableDeclaration","scope":8365,"src":"964:20:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8258,"name":"bool","nodeType":"ElementaryTypeName","src":"964:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"body":{"id":8268,"nodeType":"Block","src":"1116:44:30","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":8265,"name":"__Pausable_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8279,"src":"1126:25:30","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":8266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1126:27:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8267,"nodeType":"ExpressionStatement","src":"1126:27:30"}]},"documentation":{"id":8260,"nodeType":"StructuredDocumentation","src":"991:67:30","text":" @dev Initializes the contract in unpaused state."},"id":8269,"implemented":true,"kind":"function","modifiers":[{"id":8263,"kind":"modifierInvocation","modifierName":{"id":8262,"name":"onlyInitializing","nameLocations":["1099:16:30"],"nodeType":"IdentifierPath","referencedDeclaration":8183,"src":"1099:16:30"},"nodeType":"ModifierInvocation","src":"1099:16:30"}],"name":"__Pausable_init","nameLocation":"1072:15:30","nodeType":"FunctionDefinition","parameters":{"id":8261,"nodeType":"ParameterList","parameters":[],"src":"1087:2:30"},"returnParameters":{"id":8264,"nodeType":"ParameterList","parameters":[],"src":"1116:0:30"},"scope":8365,"src":"1063:97:30","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":8278,"nodeType":"Block","src":"1229:32:30","statements":[{"expression":{"id":8276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8274,"name":"_paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8259,"src":"1239:7:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":8275,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1249:5:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1239:15:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8277,"nodeType":"ExpressionStatement","src":"1239:15:30"}]},"id":8279,"implemented":true,"kind":"function","modifiers":[{"id":8272,"kind":"modifierInvocation","modifierName":{"id":8271,"name":"onlyInitializing","nameLocations":["1212:16:30"],"nodeType":"IdentifierPath","referencedDeclaration":8183,"src":"1212:16:30"},"nodeType":"ModifierInvocation","src":"1212:16:30"}],"name":"__Pausable_init_unchained","nameLocation":"1175:25:30","nodeType":"FunctionDefinition","parameters":{"id":8270,"nodeType":"ParameterList","parameters":[],"src":"1200:2:30"},"returnParameters":{"id":8273,"nodeType":"ParameterList","parameters":[],"src":"1229:0:30"},"scope":8365,"src":"1166:95:30","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":8286,"nodeType":"Block","src":"1472:47:30","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":8282,"name":"_requireNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8316,"src":"1482:17:30","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":8283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1482:19:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8284,"nodeType":"ExpressionStatement","src":"1482:19:30"},{"id":8285,"nodeType":"PlaceholderStatement","src":"1511:1:30"}]},"documentation":{"id":8280,"nodeType":"StructuredDocumentation","src":"1267:175:30","text":" @dev Modifier to make a function callable only when the contract is not paused.\n Requirements:\n - The contract must not be paused."},"id":8287,"name":"whenNotPaused","nameLocation":"1456:13:30","nodeType":"ModifierDefinition","parameters":{"id":8281,"nodeType":"ParameterList","parameters":[],"src":"1469:2:30"},"src":"1447:72:30","virtual":false,"visibility":"internal"},{"body":{"id":8294,"nodeType":"Block","src":"1719:44:30","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":8290,"name":"_requirePaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8327,"src":"1729:14:30","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":8291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1729:16:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8292,"nodeType":"ExpressionStatement","src":"1729:16:30"},{"id":8293,"nodeType":"PlaceholderStatement","src":"1755:1:30"}]},"documentation":{"id":8288,"nodeType":"StructuredDocumentation","src":"1525:167:30","text":" @dev Modifier to make a function callable only when the contract is paused.\n Requirements:\n - The contract must be paused."},"id":8295,"name":"whenPaused","nameLocation":"1706:10:30","nodeType":"ModifierDefinition","parameters":{"id":8289,"nodeType":"ParameterList","parameters":[],"src":"1716:2:30"},"src":"1697:66:30","virtual":false,"visibility":"internal"},{"body":{"id":8303,"nodeType":"Block","src":"1911:31:30","statements":[{"expression":{"id":8301,"name":"_paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8259,"src":"1928:7:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":8300,"id":8302,"nodeType":"Return","src":"1921:14:30"}]},"documentation":{"id":8296,"nodeType":"StructuredDocumentation","src":"1769:84:30","text":" @dev Returns true if the contract is paused, and false otherwise."},"functionSelector":"5c975abb","id":8304,"implemented":true,"kind":"function","modifiers":[],"name":"paused","nameLocation":"1867:6:30","nodeType":"FunctionDefinition","parameters":{"id":8297,"nodeType":"ParameterList","parameters":[],"src":"1873:2:30"},"returnParameters":{"id":8300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8299,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8304,"src":"1905:4:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8298,"name":"bool","nodeType":"ElementaryTypeName","src":"1905:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1904:6:30"},"scope":8365,"src":"1858:84:30","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":8315,"nodeType":"Block","src":"2061:55:30","statements":[{"expression":{"arguments":[{"id":8311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2079:9:30","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":8309,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8304,"src":"2080:6:30","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":8310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2080:8:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5061757361626c653a20706175736564","id":8312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2090:18:30","typeDescriptions":{"typeIdentifier":"t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a","typeString":"literal_string \"Pausable: paused\""},"value":"Pausable: paused"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a","typeString":"literal_string \"Pausable: paused\""}],"id":8308,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2071:7:30","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2071:38:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8314,"nodeType":"ExpressionStatement","src":"2071:38:30"}]},"documentation":{"id":8305,"nodeType":"StructuredDocumentation","src":"1948:57:30","text":" @dev Throws if the contract is paused."},"id":8316,"implemented":true,"kind":"function","modifiers":[],"name":"_requireNotPaused","nameLocation":"2019:17:30","nodeType":"FunctionDefinition","parameters":{"id":8306,"nodeType":"ParameterList","parameters":[],"src":"2036:2:30"},"returnParameters":{"id":8307,"nodeType":"ParameterList","parameters":[],"src":"2061:0:30"},"scope":8365,"src":"2010:106:30","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":8326,"nodeType":"Block","src":"2236:58:30","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":8321,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8304,"src":"2254:6:30","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":8322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2254:8:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5061757361626c653a206e6f7420706175736564","id":8323,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2264:22:30","typeDescriptions":{"typeIdentifier":"t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a","typeString":"literal_string \"Pausable: not paused\""},"value":"Pausable: not paused"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a","typeString":"literal_string \"Pausable: not paused\""}],"id":8320,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2246:7:30","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2246:41:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8325,"nodeType":"ExpressionStatement","src":"2246:41:30"}]},"documentation":{"id":8317,"nodeType":"StructuredDocumentation","src":"2122:61:30","text":" @dev Throws if the contract is not paused."},"id":8327,"implemented":true,"kind":"function","modifiers":[],"name":"_requirePaused","nameLocation":"2197:14:30","nodeType":"FunctionDefinition","parameters":{"id":8318,"nodeType":"ParameterList","parameters":[],"src":"2211:2:30"},"returnParameters":{"id":8319,"nodeType":"ParameterList","parameters":[],"src":"2236:0:30"},"scope":8365,"src":"2188:106:30","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":8342,"nodeType":"Block","src":"2478:66:30","statements":[{"expression":{"id":8335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8333,"name":"_paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8259,"src":"2488:7:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":8334,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2498:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2488:14:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8336,"nodeType":"ExpressionStatement","src":"2488:14:30"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":8338,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9528,"src":"2524:10:30","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":8339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2524:12:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8337,"name":"Paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8252,"src":"2517:6:30","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":8340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2517:20:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8341,"nodeType":"EmitStatement","src":"2512:25:30"}]},"documentation":{"id":8328,"nodeType":"StructuredDocumentation","src":"2300:124:30","text":" @dev Triggers stopped state.\n Requirements:\n - The contract must not be paused."},"id":8343,"implemented":true,"kind":"function","modifiers":[{"id":8331,"kind":"modifierInvocation","modifierName":{"id":8330,"name":"whenNotPaused","nameLocations":["2464:13:30"],"nodeType":"IdentifierPath","referencedDeclaration":8287,"src":"2464:13:30"},"nodeType":"ModifierInvocation","src":"2464:13:30"}],"name":"_pause","nameLocation":"2438:6:30","nodeType":"FunctionDefinition","parameters":{"id":8329,"nodeType":"ParameterList","parameters":[],"src":"2444:2:30"},"returnParameters":{"id":8332,"nodeType":"ParameterList","parameters":[],"src":"2478:0:30"},"scope":8365,"src":"2429:115:30","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":8358,"nodeType":"Block","src":"2724:69:30","statements":[{"expression":{"id":8351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8349,"name":"_paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8259,"src":"2734:7:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":8350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2744:5:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2734:15:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8352,"nodeType":"ExpressionStatement","src":"2734:15:30"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":8354,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9528,"src":"2773:10:30","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":8355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2773:12:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8353,"name":"Unpaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8257,"src":"2764:8:30","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":8356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2764:22:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8357,"nodeType":"EmitStatement","src":"2759:27:30"}]},"documentation":{"id":8344,"nodeType":"StructuredDocumentation","src":"2550:121:30","text":" @dev Returns to normal state.\n Requirements:\n - The contract must be paused."},"id":8359,"implemented":true,"kind":"function","modifiers":[{"id":8347,"kind":"modifierInvocation","modifierName":{"id":8346,"name":"whenPaused","nameLocations":["2713:10:30"],"nodeType":"IdentifierPath","referencedDeclaration":8295,"src":"2713:10:30"},"nodeType":"ModifierInvocation","src":"2713:10:30"}],"name":"_unpause","nameLocation":"2685:8:30","nodeType":"FunctionDefinition","parameters":{"id":8345,"nodeType":"ParameterList","parameters":[],"src":"2693:2:30"},"returnParameters":{"id":8348,"nodeType":"ParameterList","parameters":[],"src":"2724:0:30"},"scope":8365,"src":"2676:117:30","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"constant":false,"documentation":{"id":8360,"nodeType":"StructuredDocumentation","src":"2799:254:30","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":8364,"mutability":"mutable","name":"__gap","nameLocation":"3078:5:30","nodeType":"VariableDeclaration","scope":8365,"src":"3058:25:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage","typeString":"uint256[49]"},"typeName":{"baseType":{"id":8361,"name":"uint256","nodeType":"ElementaryTypeName","src":"3058:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8363,"length":{"hexValue":"3439","id":8362,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3066:2:30","typeDescriptions":{"typeIdentifier":"t_rational_49_by_1","typeString":"int_const 49"},"value":"49"},"nodeType":"ArrayTypeName","src":"3058:11:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage_ptr","typeString":"uint256[49]"}},"visibility":"private"}],"scope":8366,"src":"656:2430:30","usedErrors":[]}],"src":"105:2982:30"},"id":30},"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol","exportedSymbols":{"AddressUpgradeable":[9501],"Initializable":[8238],"ReentrancyGuardUpgradeable":[8438]},"id":8439,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":8367,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"112:23:31"},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"../proxy/utils/Initializable.sol","id":8368,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8439,"sourceUnit":8239,"src":"136:42:31","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":8370,"name":"Initializable","nameLocations":["979:13:31"],"nodeType":"IdentifierPath","referencedDeclaration":8238,"src":"979:13:31"},"id":8371,"nodeType":"InheritanceSpecifier","src":"979:13:31"}],"canonicalName":"ReentrancyGuardUpgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":8369,"nodeType":"StructuredDocumentation","src":"180:750:31","text":" @dev Contract module that helps prevent reentrant calls to a function.\n Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n available, which can be applied to functions to make sure there are no nested\n (reentrant) calls to them.\n Note that because there is a single `nonReentrant` guard, functions marked as\n `nonReentrant` may not call one another. This can be worked around by making\n those functions `private`, and then adding `external` `nonReentrant` entry\n points to them.\n TIP: If you would like to learn more about reentrancy and alternative ways\n to protect against it, check out our blog post\n https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]."},"fullyImplemented":true,"id":8438,"linearizedBaseContracts":[8438,8238],"name":"ReentrancyGuardUpgradeable","nameLocation":"949:26:31","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":8374,"mutability":"constant","name":"_NOT_ENTERED","nameLocation":"1772:12:31","nodeType":"VariableDeclaration","scope":8438,"src":"1747:41:31","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8372,"name":"uint256","nodeType":"ElementaryTypeName","src":"1747:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":8373,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1787:1:31","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"private"},{"constant":true,"id":8377,"mutability":"constant","name":"_ENTERED","nameLocation":"1819:8:31","nodeType":"VariableDeclaration","scope":8438,"src":"1794:37:31","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8375,"name":"uint256","nodeType":"ElementaryTypeName","src":"1794:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":8376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1830:1:31","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"private"},{"constant":false,"id":8379,"mutability":"mutable","name":"_status","nameLocation":"1854:7:31","nodeType":"VariableDeclaration","scope":8438,"src":"1838:23:31","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8378,"name":"uint256","nodeType":"ElementaryTypeName","src":"1838:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"body":{"id":8387,"nodeType":"Block","src":"1928:51:31","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":8384,"name":"__ReentrancyGuard_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8398,"src":"1938:32:31","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":8385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1938:34:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8386,"nodeType":"ExpressionStatement","src":"1938:34:31"}]},"id":8388,"implemented":true,"kind":"function","modifiers":[{"id":8382,"kind":"modifierInvocation","modifierName":{"id":8381,"name":"onlyInitializing","nameLocations":["1911:16:31"],"nodeType":"IdentifierPath","referencedDeclaration":8183,"src":"1911:16:31"},"nodeType":"ModifierInvocation","src":"1911:16:31"}],"name":"__ReentrancyGuard_init","nameLocation":"1877:22:31","nodeType":"FunctionDefinition","parameters":{"id":8380,"nodeType":"ParameterList","parameters":[],"src":"1899:2:31"},"returnParameters":{"id":8383,"nodeType":"ParameterList","parameters":[],"src":"1928:0:31"},"scope":8438,"src":"1868:111:31","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":8397,"nodeType":"Block","src":"2055:39:31","statements":[{"expression":{"id":8395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8393,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8379,"src":"2065:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8394,"name":"_NOT_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8374,"src":"2075:12:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2065:22:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8396,"nodeType":"ExpressionStatement","src":"2065:22:31"}]},"id":8398,"implemented":true,"kind":"function","modifiers":[{"id":8391,"kind":"modifierInvocation","modifierName":{"id":8390,"name":"onlyInitializing","nameLocations":["2038:16:31"],"nodeType":"IdentifierPath","referencedDeclaration":8183,"src":"2038:16:31"},"nodeType":"ModifierInvocation","src":"2038:16:31"}],"name":"__ReentrancyGuard_init_unchained","nameLocation":"1994:32:31","nodeType":"FunctionDefinition","parameters":{"id":8389,"nodeType":"ParameterList","parameters":[],"src":"2026:2:31"},"returnParameters":{"id":8392,"nodeType":"ParameterList","parameters":[],"src":"2055:0:31"},"scope":8438,"src":"1985:109:31","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":8408,"nodeType":"Block","src":"2495:79:31","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":8401,"name":"_nonReentrantBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8424,"src":"2505:19:31","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":8402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2505:21:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8403,"nodeType":"ExpressionStatement","src":"2505:21:31"},{"id":8404,"nodeType":"PlaceholderStatement","src":"2536:1:31"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":8405,"name":"_nonReentrantAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8432,"src":"2547:18:31","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":8406,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2547:20:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8407,"nodeType":"ExpressionStatement","src":"2547:20:31"}]},"documentation":{"id":8399,"nodeType":"StructuredDocumentation","src":"2100:366:31","text":" @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."},"id":8409,"name":"nonReentrant","nameLocation":"2480:12:31","nodeType":"ModifierDefinition","parameters":{"id":8400,"nodeType":"ParameterList","parameters":[],"src":"2492:2:31"},"src":"2471:103:31","virtual":false,"visibility":"internal"},{"body":{"id":8423,"nodeType":"Block","src":"2619:248:31","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8413,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8379,"src":"2712:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8414,"name":"_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8377,"src":"2723:8:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2712:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","id":8416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2733:33:31","typeDescriptions":{"typeIdentifier":"t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619","typeString":"literal_string \"ReentrancyGuard: reentrant call\""},"value":"ReentrancyGuard: reentrant call"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619","typeString":"literal_string \"ReentrancyGuard: reentrant call\""}],"id":8412,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2704:7:31","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2704:63:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8418,"nodeType":"ExpressionStatement","src":"2704:63:31"},{"expression":{"id":8421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8419,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8379,"src":"2842:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8420,"name":"_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8377,"src":"2852:8:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2842:18:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8422,"nodeType":"ExpressionStatement","src":"2842:18:31"}]},"id":8424,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantBefore","nameLocation":"2589:19:31","nodeType":"FunctionDefinition","parameters":{"id":8410,"nodeType":"ParameterList","parameters":[],"src":"2608:2:31"},"returnParameters":{"id":8411,"nodeType":"ParameterList","parameters":[],"src":"2619:0:31"},"scope":8438,"src":"2580:287:31","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":8431,"nodeType":"Block","src":"2911:171:31","statements":[{"expression":{"id":8429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8427,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8379,"src":"3053:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8428,"name":"_NOT_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8374,"src":"3063:12:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3053:22:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8430,"nodeType":"ExpressionStatement","src":"3053:22:31"}]},"id":8432,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantAfter","nameLocation":"2882:18:31","nodeType":"FunctionDefinition","parameters":{"id":8425,"nodeType":"ParameterList","parameters":[],"src":"2900:2:31"},"returnParameters":{"id":8426,"nodeType":"ParameterList","parameters":[],"src":"2911:0:31"},"scope":8438,"src":"2873:209:31","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"constant":false,"documentation":{"id":8433,"nodeType":"StructuredDocumentation","src":"3088:254:31","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":8437,"mutability":"mutable","name":"__gap","nameLocation":"3367:5:31","nodeType":"VariableDeclaration","scope":8438,"src":"3347:25:31","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage","typeString":"uint256[49]"},"typeName":{"baseType":{"id":8434,"name":"uint256","nodeType":"ElementaryTypeName","src":"3347:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8436,"length":{"hexValue":"3439","id":8435,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3355:2:31","typeDescriptions":{"typeIdentifier":"t_rational_49_by_1","typeString":"int_const 49"},"value":"49"},"nodeType":"ArrayTypeName","src":"3347:11:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage_ptr","typeString":"uint256[49]"}},"visibility":"private"}],"scope":8439,"src":"931:2444:31","usedErrors":[]}],"src":"112:3264:31"},"id":31},"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol","exportedSymbols":{"AddressUpgradeable":[9501],"ContextUpgradeable":[9543],"ERC20Upgradeable":[9050],"IERC20MetadataUpgradeable":[9217],"IERC20Upgradeable":[9128],"Initializable":[8238]},"id":9051,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":8440,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"105:23:32"},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","file":"./IERC20Upgradeable.sol","id":8441,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9051,"sourceUnit":9129,"src":"130:33:32","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol","file":"./extensions/IERC20MetadataUpgradeable.sol","id":8442,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9051,"sourceUnit":9218,"src":"164:52:32","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol","file":"../../utils/ContextUpgradeable.sol","id":8443,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9051,"sourceUnit":9544,"src":"217:44:32","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"../../proxy/utils/Initializable.sol","id":8444,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9051,"sourceUnit":8239,"src":"262:45:32","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":8446,"name":"Initializable","nameLocations":["1509:13:32"],"nodeType":"IdentifierPath","referencedDeclaration":8238,"src":"1509:13:32"},"id":8447,"nodeType":"InheritanceSpecifier","src":"1509:13:32"},{"baseName":{"id":8448,"name":"ContextUpgradeable","nameLocations":["1524:18:32"],"nodeType":"IdentifierPath","referencedDeclaration":9543,"src":"1524:18:32"},"id":8449,"nodeType":"InheritanceSpecifier","src":"1524:18:32"},{"baseName":{"id":8450,"name":"IERC20Upgradeable","nameLocations":["1544:17:32"],"nodeType":"IdentifierPath","referencedDeclaration":9128,"src":"1544:17:32"},"id":8451,"nodeType":"InheritanceSpecifier","src":"1544:17:32"},{"baseName":{"id":8452,"name":"IERC20MetadataUpgradeable","nameLocations":["1563:25:32"],"nodeType":"IdentifierPath","referencedDeclaration":9217,"src":"1563:25:32"},"id":8453,"nodeType":"InheritanceSpecifier","src":"1563:25:32"}],"canonicalName":"ERC20Upgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":8445,"nodeType":"StructuredDocumentation","src":"309:1170:32","text":" @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n For a generic mechanism see {ERC20PresetMinterPauser}.\n TIP: For a detailed writeup see our guide\n https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n We have followed general OpenZeppelin Contracts guidelines: functions revert\n instead returning `false` on failure. This behavior is nonetheless\n conventional and does not conflict with the expectations of ERC20\n applications.\n Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n This allows applications to reconstruct the allowance for all accounts just\n by listening to said events. Other implementations of the EIP may not emit\n these events, as it isn't required by the specification.\n Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n functions have been added to mitigate the well-known issues around setting\n allowances. See {IERC20-approve}."},"fullyImplemented":true,"id":9050,"linearizedBaseContracts":[9050,9217,9128,9543,8238],"name":"ERC20Upgradeable","nameLocation":"1489:16:32","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":8457,"mutability":"mutable","name":"_balances","nameLocation":"1631:9:32","nodeType":"VariableDeclaration","scope":9050,"src":"1595:45:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":8456,"keyType":{"id":8454,"name":"address","nodeType":"ElementaryTypeName","src":"1603:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1595:27:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":8455,"name":"uint256","nodeType":"ElementaryTypeName","src":"1614:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":8463,"mutability":"mutable","name":"_allowances","nameLocation":"1703:11:32","nodeType":"VariableDeclaration","scope":9050,"src":"1647:67:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":8462,"keyType":{"id":8458,"name":"address","nodeType":"ElementaryTypeName","src":"1655:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1647:47:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueType":{"id":8461,"keyType":{"id":8459,"name":"address","nodeType":"ElementaryTypeName","src":"1674:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1666:27:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":8460,"name":"uint256","nodeType":"ElementaryTypeName","src":"1685:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"constant":false,"id":8465,"mutability":"mutable","name":"_totalSupply","nameLocation":"1737:12:32","nodeType":"VariableDeclaration","scope":9050,"src":"1721:28:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8464,"name":"uint256","nodeType":"ElementaryTypeName","src":"1721:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":8467,"mutability":"mutable","name":"_name","nameLocation":"1771:5:32","nodeType":"VariableDeclaration","scope":9050,"src":"1756:20:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":8466,"name":"string","nodeType":"ElementaryTypeName","src":"1756:6:32","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":8469,"mutability":"mutable","name":"_symbol","nameLocation":"1797:7:32","nodeType":"VariableDeclaration","scope":9050,"src":"1782:22:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":8468,"name":"string","nodeType":"ElementaryTypeName","src":"1782:6:32","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":8484,"nodeType":"Block","src":"2206:55:32","statements":[{"expression":{"arguments":[{"id":8480,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8472,"src":"2239:5:32","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":8481,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8474,"src":"2246:7:32","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8479,"name":"__ERC20_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8503,"src":"2216:22:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":8482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2216:38:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8483,"nodeType":"ExpressionStatement","src":"2216:38:32"}]},"documentation":{"id":8470,"nodeType":"StructuredDocumentation","src":"1811:298:32","text":" @dev Sets the values for {name} and {symbol}.\n The default value of {decimals} is 18. To select a different value for\n {decimals} you should overload it.\n All two of these values are immutable: they can only be set once during\n construction."},"id":8485,"implemented":true,"kind":"function","modifiers":[{"id":8477,"kind":"modifierInvocation","modifierName":{"id":8476,"name":"onlyInitializing","nameLocations":["2189:16:32"],"nodeType":"IdentifierPath","referencedDeclaration":8183,"src":"2189:16:32"},"nodeType":"ModifierInvocation","src":"2189:16:32"}],"name":"__ERC20_init","nameLocation":"2123:12:32","nodeType":"FunctionDefinition","parameters":{"id":8475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8472,"mutability":"mutable","name":"name_","nameLocation":"2150:5:32","nodeType":"VariableDeclaration","scope":8485,"src":"2136:19:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8471,"name":"string","nodeType":"ElementaryTypeName","src":"2136:6:32","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8474,"mutability":"mutable","name":"symbol_","nameLocation":"2171:7:32","nodeType":"VariableDeclaration","scope":8485,"src":"2157:21:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8473,"name":"string","nodeType":"ElementaryTypeName","src":"2157:6:32","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2135:44:32"},"returnParameters":{"id":8478,"nodeType":"ParameterList","parameters":[],"src":"2206:0:32"},"scope":9050,"src":"2114:147:32","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":8502,"nodeType":"Block","src":"2369:57:32","statements":[{"expression":{"id":8496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8494,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8467,"src":"2379:5:32","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8495,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8487,"src":"2387:5:32","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2379:13:32","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":8497,"nodeType":"ExpressionStatement","src":"2379:13:32"},{"expression":{"id":8500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8498,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8469,"src":"2402:7:32","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8499,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8489,"src":"2412:7:32","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2402:17:32","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":8501,"nodeType":"ExpressionStatement","src":"2402:17:32"}]},"id":8503,"implemented":true,"kind":"function","modifiers":[{"id":8492,"kind":"modifierInvocation","modifierName":{"id":8491,"name":"onlyInitializing","nameLocations":["2352:16:32"],"nodeType":"IdentifierPath","referencedDeclaration":8183,"src":"2352:16:32"},"nodeType":"ModifierInvocation","src":"2352:16:32"}],"name":"__ERC20_init_unchained","nameLocation":"2276:22:32","nodeType":"FunctionDefinition","parameters":{"id":8490,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8487,"mutability":"mutable","name":"name_","nameLocation":"2313:5:32","nodeType":"VariableDeclaration","scope":8503,"src":"2299:19:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8486,"name":"string","nodeType":"ElementaryTypeName","src":"2299:6:32","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8489,"mutability":"mutable","name":"symbol_","nameLocation":"2334:7:32","nodeType":"VariableDeclaration","scope":8503,"src":"2320:21:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8488,"name":"string","nodeType":"ElementaryTypeName","src":"2320:6:32","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2298:44:32"},"returnParameters":{"id":8493,"nodeType":"ParameterList","parameters":[],"src":"2369:0:32"},"scope":9050,"src":"2267:159:32","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[9204],"body":{"id":8512,"nodeType":"Block","src":"2560:29:32","statements":[{"expression":{"id":8510,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8467,"src":"2577:5:32","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":8509,"id":8511,"nodeType":"Return","src":"2570:12:32"}]},"documentation":{"id":8504,"nodeType":"StructuredDocumentation","src":"2432:54:32","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":8513,"implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"2500:4:32","nodeType":"FunctionDefinition","overrides":{"id":8506,"nodeType":"OverrideSpecifier","overrides":[],"src":"2527:8:32"},"parameters":{"id":8505,"nodeType":"ParameterList","parameters":[],"src":"2504:2:32"},"returnParameters":{"id":8509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8508,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8513,"src":"2545:13:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8507,"name":"string","nodeType":"ElementaryTypeName","src":"2545:6:32","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2544:15:32"},"scope":9050,"src":"2491:98:32","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[9210],"body":{"id":8522,"nodeType":"Block","src":"2773:31:32","statements":[{"expression":{"id":8520,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8469,"src":"2790:7:32","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":8519,"id":8521,"nodeType":"Return","src":"2783:14:32"}]},"documentation":{"id":8514,"nodeType":"StructuredDocumentation","src":"2595:102:32","text":" @dev Returns the symbol of the token, usually a shorter version of the\n name."},"functionSelector":"95d89b41","id":8523,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"2711:6:32","nodeType":"FunctionDefinition","overrides":{"id":8516,"nodeType":"OverrideSpecifier","overrides":[],"src":"2740:8:32"},"parameters":{"id":8515,"nodeType":"ParameterList","parameters":[],"src":"2717:2:32"},"returnParameters":{"id":8519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8518,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8523,"src":"2758:13:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8517,"name":"string","nodeType":"ElementaryTypeName","src":"2758:6:32","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2757:15:32"},"scope":9050,"src":"2702:102:32","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[9216],"body":{"id":8532,"nodeType":"Block","src":"3493:26:32","statements":[{"expression":{"hexValue":"3138","id":8530,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3510:2:32","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"functionReturnParameters":8529,"id":8531,"nodeType":"Return","src":"3503:9:32"}]},"documentation":{"id":8524,"nodeType":"StructuredDocumentation","src":"2810:613:32","text":" @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5.05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the value {ERC20} uses, unless this function is\n overridden;\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."},"functionSelector":"313ce567","id":8533,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"3437:8:32","nodeType":"FunctionDefinition","overrides":{"id":8526,"nodeType":"OverrideSpecifier","overrides":[],"src":"3468:8:32"},"parameters":{"id":8525,"nodeType":"ParameterList","parameters":[],"src":"3445:2:32"},"returnParameters":{"id":8529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8528,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8533,"src":"3486:5:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8527,"name":"uint8","nodeType":"ElementaryTypeName","src":"3486:5:32","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"3485:7:32"},"scope":9050,"src":"3428:91:32","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[9077],"body":{"id":8542,"nodeType":"Block","src":"3649:36:32","statements":[{"expression":{"id":8540,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8465,"src":"3666:12:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8539,"id":8541,"nodeType":"Return","src":"3659:19:32"}]},"documentation":{"id":8534,"nodeType":"StructuredDocumentation","src":"3525:49:32","text":" @dev See {IERC20-totalSupply}."},"functionSelector":"18160ddd","id":8543,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"3588:11:32","nodeType":"FunctionDefinition","overrides":{"id":8536,"nodeType":"OverrideSpecifier","overrides":[],"src":"3622:8:32"},"parameters":{"id":8535,"nodeType":"ParameterList","parameters":[],"src":"3599:2:32"},"returnParameters":{"id":8539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8538,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8543,"src":"3640:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8537,"name":"uint256","nodeType":"ElementaryTypeName","src":"3640:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3639:9:32"},"scope":9050,"src":"3579:106:32","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[9085],"body":{"id":8556,"nodeType":"Block","src":"3826:42:32","statements":[{"expression":{"baseExpression":{"id":8552,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8457,"src":"3843:9:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8554,"indexExpression":{"id":8553,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8546,"src":"3853:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3843:18:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8551,"id":8555,"nodeType":"Return","src":"3836:25:32"}]},"documentation":{"id":8544,"nodeType":"StructuredDocumentation","src":"3691:47:32","text":" @dev See {IERC20-balanceOf}."},"functionSelector":"70a08231","id":8557,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"3752:9:32","nodeType":"FunctionDefinition","overrides":{"id":8548,"nodeType":"OverrideSpecifier","overrides":[],"src":"3799:8:32"},"parameters":{"id":8547,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8546,"mutability":"mutable","name":"account","nameLocation":"3770:7:32","nodeType":"VariableDeclaration","scope":8557,"src":"3762:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8545,"name":"address","nodeType":"ElementaryTypeName","src":"3762:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3761:17:32"},"returnParameters":{"id":8551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8550,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8557,"src":"3817:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8549,"name":"uint256","nodeType":"ElementaryTypeName","src":"3817:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3816:9:32"},"scope":9050,"src":"3743:125:32","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[9095],"body":{"id":8581,"nodeType":"Block","src":"4149:104:32","statements":[{"assignments":[8569],"declarations":[{"constant":false,"id":8569,"mutability":"mutable","name":"owner","nameLocation":"4167:5:32","nodeType":"VariableDeclaration","scope":8581,"src":"4159:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8568,"name":"address","nodeType":"ElementaryTypeName","src":"4159:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":8572,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":8570,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9528,"src":"4175:10:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":8571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4175:12:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4159:28:32"},{"expression":{"arguments":[{"id":8574,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8569,"src":"4207:5:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8575,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8560,"src":"4214:2:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8576,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8562,"src":"4218:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8573,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8805,"src":"4197:9:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4197:28:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8578,"nodeType":"ExpressionStatement","src":"4197:28:32"},{"expression":{"hexValue":"74727565","id":8579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4242:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":8567,"id":8580,"nodeType":"Return","src":"4235:11:32"}]},"documentation":{"id":8558,"nodeType":"StructuredDocumentation","src":"3874:185:32","text":" @dev See {IERC20-transfer}.\n Requirements:\n - `to` cannot be the zero address.\n - the caller must have a balance of at least `amount`."},"functionSelector":"a9059cbb","id":8582,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"4073:8:32","nodeType":"FunctionDefinition","overrides":{"id":8564,"nodeType":"OverrideSpecifier","overrides":[],"src":"4125:8:32"},"parameters":{"id":8563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8560,"mutability":"mutable","name":"to","nameLocation":"4090:2:32","nodeType":"VariableDeclaration","scope":8582,"src":"4082:10:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8559,"name":"address","nodeType":"ElementaryTypeName","src":"4082:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8562,"mutability":"mutable","name":"amount","nameLocation":"4102:6:32","nodeType":"VariableDeclaration","scope":8582,"src":"4094:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8561,"name":"uint256","nodeType":"ElementaryTypeName","src":"4094:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4081:28:32"},"returnParameters":{"id":8567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8566,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8582,"src":"4143:4:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8565,"name":"bool","nodeType":"ElementaryTypeName","src":"4143:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4142:6:32"},"scope":9050,"src":"4064:189:32","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[9105],"body":{"id":8599,"nodeType":"Block","src":"4409:51:32","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":8593,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8463,"src":"4426:11:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":8595,"indexExpression":{"id":8594,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8585,"src":"4438:5:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4426:18:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8597,"indexExpression":{"id":8596,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8587,"src":"4445:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4426:27:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8592,"id":8598,"nodeType":"Return","src":"4419:34:32"}]},"documentation":{"id":8583,"nodeType":"StructuredDocumentation","src":"4259:47:32","text":" @dev See {IERC20-allowance}."},"functionSelector":"dd62ed3e","id":8600,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"4320:9:32","nodeType":"FunctionDefinition","overrides":{"id":8589,"nodeType":"OverrideSpecifier","overrides":[],"src":"4382:8:32"},"parameters":{"id":8588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8585,"mutability":"mutable","name":"owner","nameLocation":"4338:5:32","nodeType":"VariableDeclaration","scope":8600,"src":"4330:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8584,"name":"address","nodeType":"ElementaryTypeName","src":"4330:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8587,"mutability":"mutable","name":"spender","nameLocation":"4353:7:32","nodeType":"VariableDeclaration","scope":8600,"src":"4345:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8586,"name":"address","nodeType":"ElementaryTypeName","src":"4345:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4329:32:32"},"returnParameters":{"id":8592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8591,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8600,"src":"4400:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8590,"name":"uint256","nodeType":"ElementaryTypeName","src":"4400:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4399:9:32"},"scope":9050,"src":"4311:149:32","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[9115],"body":{"id":8624,"nodeType":"Block","src":"4857:108:32","statements":[{"assignments":[8612],"declarations":[{"constant":false,"id":8612,"mutability":"mutable","name":"owner","nameLocation":"4875:5:32","nodeType":"VariableDeclaration","scope":8624,"src":"4867:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8611,"name":"address","nodeType":"ElementaryTypeName","src":"4867:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":8615,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":8613,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9528,"src":"4883:10:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":8614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4883:12:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4867:28:32"},{"expression":{"arguments":[{"id":8617,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8612,"src":"4914:5:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8618,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8603,"src":"4921:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8619,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8605,"src":"4930:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8616,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8979,"src":"4905:8:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4905:32:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8621,"nodeType":"ExpressionStatement","src":"4905:32:32"},{"expression":{"hexValue":"74727565","id":8622,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4954:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":8610,"id":8623,"nodeType":"Return","src":"4947:11:32"}]},"documentation":{"id":8601,"nodeType":"StructuredDocumentation","src":"4466:297:32","text":" @dev See {IERC20-approve}.\n NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\n `transferFrom`. This is semantically equivalent to an infinite approval.\n Requirements:\n - `spender` cannot be the zero address."},"functionSelector":"095ea7b3","id":8625,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"4777:7:32","nodeType":"FunctionDefinition","overrides":{"id":8607,"nodeType":"OverrideSpecifier","overrides":[],"src":"4833:8:32"},"parameters":{"id":8606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8603,"mutability":"mutable","name":"spender","nameLocation":"4793:7:32","nodeType":"VariableDeclaration","scope":8625,"src":"4785:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8602,"name":"address","nodeType":"ElementaryTypeName","src":"4785:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8605,"mutability":"mutable","name":"amount","nameLocation":"4810:6:32","nodeType":"VariableDeclaration","scope":8625,"src":"4802:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8604,"name":"uint256","nodeType":"ElementaryTypeName","src":"4802:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4784:33:32"},"returnParameters":{"id":8610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8609,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8625,"src":"4851:4:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8608,"name":"bool","nodeType":"ElementaryTypeName","src":"4851:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4850:6:32"},"scope":9050,"src":"4768:197:32","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[9127],"body":{"id":8657,"nodeType":"Block","src":"5660:153:32","statements":[{"assignments":[8639],"declarations":[{"constant":false,"id":8639,"mutability":"mutable","name":"spender","nameLocation":"5678:7:32","nodeType":"VariableDeclaration","scope":8657,"src":"5670:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8638,"name":"address","nodeType":"ElementaryTypeName","src":"5670:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":8642,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":8640,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9528,"src":"5688:10:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":8641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5688:12:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5670:30:32"},{"expression":{"arguments":[{"id":8644,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8628,"src":"5726:4:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8645,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8639,"src":"5732:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8646,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8632,"src":"5741:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8643,"name":"_spendAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9022,"src":"5710:15:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5710:38:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8648,"nodeType":"ExpressionStatement","src":"5710:38:32"},{"expression":{"arguments":[{"id":8650,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8628,"src":"5768:4:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8651,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8630,"src":"5774:2:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8652,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8632,"src":"5778:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8649,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8805,"src":"5758:9:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5758:27:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8654,"nodeType":"ExpressionStatement","src":"5758:27:32"},{"expression":{"hexValue":"74727565","id":8655,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5802:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":8637,"id":8656,"nodeType":"Return","src":"5795:11:32"}]},"documentation":{"id":8626,"nodeType":"StructuredDocumentation","src":"4971:551:32","text":" @dev See {IERC20-transferFrom}.\n Emits an {Approval} event indicating the updated allowance. This is not\n required by the EIP. See the note at the beginning of {ERC20}.\n NOTE: Does not update the allowance if the current allowance\n is the maximum `uint256`.\n Requirements:\n - `from` and `to` cannot be the zero address.\n - `from` must have a balance of at least `amount`.\n - the caller must have allowance for ``from``'s tokens of at least\n `amount`."},"functionSelector":"23b872dd","id":8658,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"5536:12:32","nodeType":"FunctionDefinition","overrides":{"id":8634,"nodeType":"OverrideSpecifier","overrides":[],"src":"5636:8:32"},"parameters":{"id":8633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8628,"mutability":"mutable","name":"from","nameLocation":"5566:4:32","nodeType":"VariableDeclaration","scope":8658,"src":"5558:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8627,"name":"address","nodeType":"ElementaryTypeName","src":"5558:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8630,"mutability":"mutable","name":"to","nameLocation":"5588:2:32","nodeType":"VariableDeclaration","scope":8658,"src":"5580:10:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8629,"name":"address","nodeType":"ElementaryTypeName","src":"5580:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8632,"mutability":"mutable","name":"amount","nameLocation":"5608:6:32","nodeType":"VariableDeclaration","scope":8658,"src":"5600:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8631,"name":"uint256","nodeType":"ElementaryTypeName","src":"5600:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5548:72:32"},"returnParameters":{"id":8637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8636,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8658,"src":"5654:4:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8635,"name":"bool","nodeType":"ElementaryTypeName","src":"5654:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5653:6:32"},"scope":9050,"src":"5527:286:32","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":8686,"nodeType":"Block","src":"6302:140:32","statements":[{"assignments":[8669],"declarations":[{"constant":false,"id":8669,"mutability":"mutable","name":"owner","nameLocation":"6320:5:32","nodeType":"VariableDeclaration","scope":8686,"src":"6312:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8668,"name":"address","nodeType":"ElementaryTypeName","src":"6312:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":8672,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":8670,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9528,"src":"6328:10:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":8671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6328:12:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6312:28:32"},{"expression":{"arguments":[{"id":8674,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8669,"src":"6359:5:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8675,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8661,"src":"6366:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":8677,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8669,"src":"6385:5:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8678,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8661,"src":"6392:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":8676,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8600,"src":"6375:9:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":8679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6375:25:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":8680,"name":"addedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8663,"src":"6403:10:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6375:38:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8673,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8979,"src":"6350:8:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6350:64:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8683,"nodeType":"ExpressionStatement","src":"6350:64:32"},{"expression":{"hexValue":"74727565","id":8684,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6431:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":8667,"id":8685,"nodeType":"Return","src":"6424:11:32"}]},"documentation":{"id":8659,"nodeType":"StructuredDocumentation","src":"5819:384:32","text":" @dev Atomically increases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address."},"functionSelector":"39509351","id":8687,"implemented":true,"kind":"function","modifiers":[],"name":"increaseAllowance","nameLocation":"6217:17:32","nodeType":"FunctionDefinition","parameters":{"id":8664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8661,"mutability":"mutable","name":"spender","nameLocation":"6243:7:32","nodeType":"VariableDeclaration","scope":8687,"src":"6235:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8660,"name":"address","nodeType":"ElementaryTypeName","src":"6235:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8663,"mutability":"mutable","name":"addedValue","nameLocation":"6260:10:32","nodeType":"VariableDeclaration","scope":8687,"src":"6252:18:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8662,"name":"uint256","nodeType":"ElementaryTypeName","src":"6252:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6234:37:32"},"returnParameters":{"id":8667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8666,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8687,"src":"6296:4:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8665,"name":"bool","nodeType":"ElementaryTypeName","src":"6296:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6295:6:32"},"scope":9050,"src":"6208:234:32","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":8727,"nodeType":"Block","src":"7028:328:32","statements":[{"assignments":[8698],"declarations":[{"constant":false,"id":8698,"mutability":"mutable","name":"owner","nameLocation":"7046:5:32","nodeType":"VariableDeclaration","scope":8727,"src":"7038:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8697,"name":"address","nodeType":"ElementaryTypeName","src":"7038:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":8701,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":8699,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9528,"src":"7054:10:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":8700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7054:12:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"7038:28:32"},{"assignments":[8703],"declarations":[{"constant":false,"id":8703,"mutability":"mutable","name":"currentAllowance","nameLocation":"7084:16:32","nodeType":"VariableDeclaration","scope":8727,"src":"7076:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8702,"name":"uint256","nodeType":"ElementaryTypeName","src":"7076:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8708,"initialValue":{"arguments":[{"id":8705,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8698,"src":"7113:5:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8706,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8690,"src":"7120:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":8704,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8600,"src":"7103:9:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":8707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7103:25:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7076:52:32"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8710,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8703,"src":"7146:16:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":8711,"name":"subtractedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8692,"src":"7166:15:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7146:35:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f","id":8713,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7183:39:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8","typeString":"literal_string \"ERC20: decreased allowance below zero\""},"value":"ERC20: decreased allowance below zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8","typeString":"literal_string \"ERC20: decreased allowance below zero\""}],"id":8709,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7138:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7138:85:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8715,"nodeType":"ExpressionStatement","src":"7138:85:32"},{"id":8724,"nodeType":"UncheckedBlock","src":"7233:95:32","statements":[{"expression":{"arguments":[{"id":8717,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8698,"src":"7266:5:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8718,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8690,"src":"7273:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8719,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8703,"src":"7282:16:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":8720,"name":"subtractedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8692,"src":"7301:15:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7282:34:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8716,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8979,"src":"7257:8:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7257:60:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8723,"nodeType":"ExpressionStatement","src":"7257:60:32"}]},{"expression":{"hexValue":"74727565","id":8725,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7345:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":8696,"id":8726,"nodeType":"Return","src":"7338:11:32"}]},"documentation":{"id":8688,"nodeType":"StructuredDocumentation","src":"6448:476:32","text":" @dev Atomically decreases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address.\n - `spender` must have allowance for the caller of at least\n `subtractedValue`."},"functionSelector":"a457c2d7","id":8728,"implemented":true,"kind":"function","modifiers":[],"name":"decreaseAllowance","nameLocation":"6938:17:32","nodeType":"FunctionDefinition","parameters":{"id":8693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8690,"mutability":"mutable","name":"spender","nameLocation":"6964:7:32","nodeType":"VariableDeclaration","scope":8728,"src":"6956:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8689,"name":"address","nodeType":"ElementaryTypeName","src":"6956:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8692,"mutability":"mutable","name":"subtractedValue","nameLocation":"6981:15:32","nodeType":"VariableDeclaration","scope":8728,"src":"6973:23:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8691,"name":"uint256","nodeType":"ElementaryTypeName","src":"6973:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6955:42:32"},"returnParameters":{"id":8696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8695,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8728,"src":"7022:4:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8694,"name":"bool","nodeType":"ElementaryTypeName","src":"7022:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7021:6:32"},"scope":9050,"src":"6929:427:32","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":8804,"nodeType":"Block","src":"7918:710:32","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8739,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8731,"src":"7936:4:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":8742,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7952:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8741,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7944:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8740,"name":"address","nodeType":"ElementaryTypeName","src":"7944:7:32","typeDescriptions":{}}},"id":8743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7944:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7936:18:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373","id":8745,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7956:39:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea","typeString":"literal_string \"ERC20: transfer from the zero address\""},"value":"ERC20: transfer from the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea","typeString":"literal_string \"ERC20: transfer from the zero address\""}],"id":8738,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7928:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7928:68:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8747,"nodeType":"ExpressionStatement","src":"7928:68:32"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8749,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8733,"src":"8014:2:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":8752,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8028:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8751,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8020:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8750,"name":"address","nodeType":"ElementaryTypeName","src":"8020:7:32","typeDescriptions":{}}},"id":8753,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8020:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8014:16:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472657373","id":8755,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8032:37:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f","typeString":"literal_string \"ERC20: transfer to the zero address\""},"value":"ERC20: transfer to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f","typeString":"literal_string \"ERC20: transfer to the zero address\""}],"id":8748,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8006:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8006:64:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8757,"nodeType":"ExpressionStatement","src":"8006:64:32"},{"expression":{"arguments":[{"id":8759,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8731,"src":"8102:4:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8760,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8733,"src":"8108:2:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8761,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8735,"src":"8112:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8758,"name":"_beforeTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9033,"src":"8081:20:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8081:38:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8763,"nodeType":"ExpressionStatement","src":"8081:38:32"},{"assignments":[8765],"declarations":[{"constant":false,"id":8765,"mutability":"mutable","name":"fromBalance","nameLocation":"8138:11:32","nodeType":"VariableDeclaration","scope":8804,"src":"8130:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8764,"name":"uint256","nodeType":"ElementaryTypeName","src":"8130:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8769,"initialValue":{"baseExpression":{"id":8766,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8457,"src":"8152:9:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8768,"indexExpression":{"id":8767,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8731,"src":"8162:4:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8152:15:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8130:37:32"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8771,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8765,"src":"8185:11:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":8772,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8735,"src":"8200:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8185:21:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365","id":8774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8208:40:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6","typeString":"literal_string \"ERC20: transfer amount exceeds balance\""},"value":"ERC20: transfer amount exceeds balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6","typeString":"literal_string \"ERC20: transfer amount exceeds balance\""}],"id":8770,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8177:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8177:72:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8776,"nodeType":"ExpressionStatement","src":"8177:72:32"},{"id":8791,"nodeType":"UncheckedBlock","src":"8259:273:32","statements":[{"expression":{"id":8783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8777,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8457,"src":"8283:9:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8779,"indexExpression":{"id":8778,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8731,"src":"8293:4:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8283:15:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8780,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8765,"src":"8301:11:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":8781,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8735,"src":"8315:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8301:20:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8283:38:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8784,"nodeType":"ExpressionStatement","src":"8283:38:32"},{"expression":{"id":8789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8785,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8457,"src":"8498:9:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8787,"indexExpression":{"id":8786,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8733,"src":"8508:2:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8498:13:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8788,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8735,"src":"8515:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8498:23:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8790,"nodeType":"ExpressionStatement","src":"8498:23:32"}]},{"eventCall":{"arguments":[{"id":8793,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8731,"src":"8556:4:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8794,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8733,"src":"8562:2:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8795,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8735,"src":"8566:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8792,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9062,"src":"8547:8:32","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8547:26:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8797,"nodeType":"EmitStatement","src":"8542:31:32"},{"expression":{"arguments":[{"id":8799,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8731,"src":"8604:4:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8800,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8733,"src":"8610:2:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8801,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8735,"src":"8614:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8798,"name":"_afterTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9044,"src":"8584:19:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8584:37:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8803,"nodeType":"ExpressionStatement","src":"8584:37:32"}]},"documentation":{"id":8729,"nodeType":"StructuredDocumentation","src":"7362:443:32","text":" @dev Moves `amount` of tokens from `from` to `to`.\n This internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `from` must have a balance of at least `amount`."},"id":8805,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"7819:9:32","nodeType":"FunctionDefinition","parameters":{"id":8736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8731,"mutability":"mutable","name":"from","nameLocation":"7846:4:32","nodeType":"VariableDeclaration","scope":8805,"src":"7838:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8730,"name":"address","nodeType":"ElementaryTypeName","src":"7838:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8733,"mutability":"mutable","name":"to","nameLocation":"7868:2:32","nodeType":"VariableDeclaration","scope":8805,"src":"7860:10:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8732,"name":"address","nodeType":"ElementaryTypeName","src":"7860:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8735,"mutability":"mutable","name":"amount","nameLocation":"7888:6:32","nodeType":"VariableDeclaration","scope":8805,"src":"7880:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8734,"name":"uint256","nodeType":"ElementaryTypeName","src":"7880:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7828:72:32"},"returnParameters":{"id":8737,"nodeType":"ParameterList","parameters":[],"src":"7918:0:32"},"scope":9050,"src":"7810:818:32","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":8861,"nodeType":"Block","src":"8969:470:32","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8814,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8808,"src":"8987:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":8817,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9006:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8816,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8998:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8815,"name":"address","nodeType":"ElementaryTypeName","src":"8998:7:32","typeDescriptions":{}}},"id":8818,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8998:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8987:21:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a206d696e7420746f20746865207a65726f2061646472657373","id":8820,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9010:33:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e","typeString":"literal_string \"ERC20: mint to the zero address\""},"value":"ERC20: mint to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e","typeString":"literal_string \"ERC20: mint to the zero address\""}],"id":8813,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8979:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8979:65:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8822,"nodeType":"ExpressionStatement","src":"8979:65:32"},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":8826,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9084:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8825,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9076:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8824,"name":"address","nodeType":"ElementaryTypeName","src":"9076:7:32","typeDescriptions":{}}},"id":8827,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9076:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8828,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8808,"src":"9088:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8829,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8810,"src":"9097:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8823,"name":"_beforeTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9033,"src":"9055:20:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9055:49:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8831,"nodeType":"ExpressionStatement","src":"9055:49:32"},{"expression":{"id":8834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8832,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8465,"src":"9115:12:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8833,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8810,"src":"9131:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9115:22:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8835,"nodeType":"ExpressionStatement","src":"9115:22:32"},{"id":8842,"nodeType":"UncheckedBlock","src":"9147:175:32","statements":[{"expression":{"id":8840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8836,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8457,"src":"9283:9:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8838,"indexExpression":{"id":8837,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8808,"src":"9293:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9283:18:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8839,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8810,"src":"9305:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9283:28:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8841,"nodeType":"ExpressionStatement","src":"9283:28:32"}]},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":8846,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9353:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8845,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9345:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8844,"name":"address","nodeType":"ElementaryTypeName","src":"9345:7:32","typeDescriptions":{}}},"id":8847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9345:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8848,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8808,"src":"9357:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8849,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8810,"src":"9366:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8843,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9062,"src":"9336:8:32","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9336:37:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8851,"nodeType":"EmitStatement","src":"9331:42:32"},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":8855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9412:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8854,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9404:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8853,"name":"address","nodeType":"ElementaryTypeName","src":"9404:7:32","typeDescriptions":{}}},"id":8856,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9404:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8857,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8808,"src":"9416:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8858,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8810,"src":"9425:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8852,"name":"_afterTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9044,"src":"9384:19:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9384:48:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8860,"nodeType":"ExpressionStatement","src":"9384:48:32"}]},"documentation":{"id":8806,"nodeType":"StructuredDocumentation","src":"8634:265:32","text":"@dev Creates `amount` tokens and assigns them to `account`, increasing\n the total supply.\n Emits a {Transfer} event with `from` set to the zero address.\n Requirements:\n - `account` cannot be the zero address."},"id":8862,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"8913:5:32","nodeType":"FunctionDefinition","parameters":{"id":8811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8808,"mutability":"mutable","name":"account","nameLocation":"8927:7:32","nodeType":"VariableDeclaration","scope":8862,"src":"8919:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8807,"name":"address","nodeType":"ElementaryTypeName","src":"8919:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8810,"mutability":"mutable","name":"amount","nameLocation":"8944:6:32","nodeType":"VariableDeclaration","scope":8862,"src":"8936:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8809,"name":"uint256","nodeType":"ElementaryTypeName","src":"8936:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8918:33:32"},"returnParameters":{"id":8812,"nodeType":"ParameterList","parameters":[],"src":"8969:0:32"},"scope":9050,"src":"8904:535:32","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":8933,"nodeType":"Block","src":"9824:594:32","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8871,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8865,"src":"9842:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":8874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9861:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8873,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9853:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8872,"name":"address","nodeType":"ElementaryTypeName","src":"9853:7:32","typeDescriptions":{}}},"id":8875,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9853:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9842:21:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a206275726e2066726f6d20746865207a65726f2061646472657373","id":8877,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9865:35:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f","typeString":"literal_string \"ERC20: burn from the zero address\""},"value":"ERC20: burn from the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f","typeString":"literal_string \"ERC20: burn from the zero address\""}],"id":8870,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9834:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9834:67:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8879,"nodeType":"ExpressionStatement","src":"9834:67:32"},{"expression":{"arguments":[{"id":8881,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8865,"src":"9933:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":8884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9950:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8883,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9942:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8882,"name":"address","nodeType":"ElementaryTypeName","src":"9942:7:32","typeDescriptions":{}}},"id":8885,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9942:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8886,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8867,"src":"9954:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8880,"name":"_beforeTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9033,"src":"9912:20:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9912:49:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8888,"nodeType":"ExpressionStatement","src":"9912:49:32"},{"assignments":[8890],"declarations":[{"constant":false,"id":8890,"mutability":"mutable","name":"accountBalance","nameLocation":"9980:14:32","nodeType":"VariableDeclaration","scope":8933,"src":"9972:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8889,"name":"uint256","nodeType":"ElementaryTypeName","src":"9972:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8894,"initialValue":{"baseExpression":{"id":8891,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8457,"src":"9997:9:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8893,"indexExpression":{"id":8892,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8865,"src":"10007:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9997:18:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9972:43:32"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8896,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8890,"src":"10033:14:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":8897,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8867,"src":"10051:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10033:24:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365","id":8899,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10059:36:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd","typeString":"literal_string \"ERC20: burn amount exceeds balance\""},"value":"ERC20: burn amount exceeds balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd","typeString":"literal_string \"ERC20: burn amount exceeds balance\""}],"id":8895,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10025:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10025:71:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8901,"nodeType":"ExpressionStatement","src":"10025:71:32"},{"id":8914,"nodeType":"UncheckedBlock","src":"10106:194:32","statements":[{"expression":{"id":8908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8902,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8457,"src":"10130:9:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8904,"indexExpression":{"id":8903,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8865,"src":"10140:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10130:18:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8905,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8890,"src":"10151:14:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":8906,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8867,"src":"10168:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10151:23:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10130:44:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8909,"nodeType":"ExpressionStatement","src":"10130:44:32"},{"expression":{"id":8912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8910,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8465,"src":"10267:12:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":8911,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8867,"src":"10283:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10267:22:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8913,"nodeType":"ExpressionStatement","src":"10267:22:32"}]},{"eventCall":{"arguments":[{"id":8916,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8865,"src":"10324:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":8919,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10341:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8918,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10333:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8917,"name":"address","nodeType":"ElementaryTypeName","src":"10333:7:32","typeDescriptions":{}}},"id":8920,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10333:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8921,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8867,"src":"10345:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8915,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9062,"src":"10315:8:32","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10315:37:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8923,"nodeType":"EmitStatement","src":"10310:42:32"},{"expression":{"arguments":[{"id":8925,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8865,"src":"10383:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":8928,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10400:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8927,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10392:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8926,"name":"address","nodeType":"ElementaryTypeName","src":"10392:7:32","typeDescriptions":{}}},"id":8929,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10392:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8930,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8867,"src":"10404:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8924,"name":"_afterTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9044,"src":"10363:19:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10363:48:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8932,"nodeType":"ExpressionStatement","src":"10363:48:32"}]},"documentation":{"id":8863,"nodeType":"StructuredDocumentation","src":"9445:309:32","text":" @dev Destroys `amount` tokens from `account`, reducing the\n total supply.\n Emits a {Transfer} event with `to` set to the zero address.\n Requirements:\n - `account` cannot be the zero address.\n - `account` must have at least `amount` tokens."},"id":8934,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"9768:5:32","nodeType":"FunctionDefinition","parameters":{"id":8868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8865,"mutability":"mutable","name":"account","nameLocation":"9782:7:32","nodeType":"VariableDeclaration","scope":8934,"src":"9774:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8864,"name":"address","nodeType":"ElementaryTypeName","src":"9774:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8867,"mutability":"mutable","name":"amount","nameLocation":"9799:6:32","nodeType":"VariableDeclaration","scope":8934,"src":"9791:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8866,"name":"uint256","nodeType":"ElementaryTypeName","src":"9791:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9773:33:32"},"returnParameters":{"id":8869,"nodeType":"ParameterList","parameters":[],"src":"9824:0:32"},"scope":9050,"src":"9759:659:32","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":8978,"nodeType":"Block","src":"10954:257:32","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8945,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8937,"src":"10972:5:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":8948,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10989:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8947,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10981:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8946,"name":"address","nodeType":"ElementaryTypeName","src":"10981:7:32","typeDescriptions":{}}},"id":8949,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10981:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10972:19:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373","id":8951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10993:38:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208","typeString":"literal_string \"ERC20: approve from the zero address\""},"value":"ERC20: approve from the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208","typeString":"literal_string \"ERC20: approve from the zero address\""}],"id":8944,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10964:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10964:68:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8953,"nodeType":"ExpressionStatement","src":"10964:68:32"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8955,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8939,"src":"11050:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":8958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11069:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8957,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11061:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8956,"name":"address","nodeType":"ElementaryTypeName","src":"11061:7:32","typeDescriptions":{}}},"id":8959,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11061:10:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11050:21:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f2061646472657373","id":8961,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11073:36:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029","typeString":"literal_string \"ERC20: approve to the zero address\""},"value":"ERC20: approve to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029","typeString":"literal_string \"ERC20: approve to the zero address\""}],"id":8954,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11042:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11042:68:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8963,"nodeType":"ExpressionStatement","src":"11042:68:32"},{"expression":{"id":8970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":8964,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8463,"src":"11121:11:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":8967,"indexExpression":{"id":8965,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8937,"src":"11133:5:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11121:18:32","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8968,"indexExpression":{"id":8966,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8939,"src":"11140:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11121:27:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8969,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8941,"src":"11151:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11121:36:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8971,"nodeType":"ExpressionStatement","src":"11121:36:32"},{"eventCall":{"arguments":[{"id":8973,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8937,"src":"11181:5:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8974,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8939,"src":"11188:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8975,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8941,"src":"11197:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8972,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9071,"src":"11172:8:32","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11172:32:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8977,"nodeType":"EmitStatement","src":"11167:37:32"}]},"documentation":{"id":8935,"nodeType":"StructuredDocumentation","src":"10424:412:32","text":" @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address."},"id":8979,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"10850:8:32","nodeType":"FunctionDefinition","parameters":{"id":8942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8937,"mutability":"mutable","name":"owner","nameLocation":"10876:5:32","nodeType":"VariableDeclaration","scope":8979,"src":"10868:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8936,"name":"address","nodeType":"ElementaryTypeName","src":"10868:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8939,"mutability":"mutable","name":"spender","nameLocation":"10899:7:32","nodeType":"VariableDeclaration","scope":8979,"src":"10891:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8938,"name":"address","nodeType":"ElementaryTypeName","src":"10891:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8941,"mutability":"mutable","name":"amount","nameLocation":"10924:6:32","nodeType":"VariableDeclaration","scope":8979,"src":"10916:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8940,"name":"uint256","nodeType":"ElementaryTypeName","src":"10916:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10858:78:32"},"returnParameters":{"id":8943,"nodeType":"ParameterList","parameters":[],"src":"10954:0:32"},"scope":9050,"src":"10841:370:32","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":9021,"nodeType":"Block","src":"11612:321:32","statements":[{"assignments":[8990],"declarations":[{"constant":false,"id":8990,"mutability":"mutable","name":"currentAllowance","nameLocation":"11630:16:32","nodeType":"VariableDeclaration","scope":9021,"src":"11622:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8989,"name":"uint256","nodeType":"ElementaryTypeName","src":"11622:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8995,"initialValue":{"arguments":[{"id":8992,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8982,"src":"11659:5:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8993,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8984,"src":"11666:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":8991,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8600,"src":"11649:9:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":8994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11649:25:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11622:52:32"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9002,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8996,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8990,"src":"11688:16:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"arguments":[{"id":8999,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11713:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8998,"name":"uint256","nodeType":"ElementaryTypeName","src":"11713:7:32","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":8997,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11708:4:32","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":9000,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11708:13:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":9001,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11722:3:32","memberName":"max","nodeType":"MemberAccess","src":"11708:17:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11688:37:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9020,"nodeType":"IfStatement","src":"11684:243:32","trueBody":{"id":9019,"nodeType":"Block","src":"11727:200:32","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9004,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8990,"src":"11749:16:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":9005,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8986,"src":"11769:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11749:26:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a20696e73756666696369656e7420616c6c6f77616e6365","id":9007,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11777:31:32","typeDescriptions":{"typeIdentifier":"t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe","typeString":"literal_string \"ERC20: insufficient allowance\""},"value":"ERC20: insufficient allowance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe","typeString":"literal_string \"ERC20: insufficient allowance\""}],"id":9003,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11741:7:32","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":9008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11741:68:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9009,"nodeType":"ExpressionStatement","src":"11741:68:32"},{"id":9018,"nodeType":"UncheckedBlock","src":"11823:94:32","statements":[{"expression":{"arguments":[{"id":9011,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8982,"src":"11860:5:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9012,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8984,"src":"11867:7:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9013,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8990,"src":"11876:16:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":9014,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8986,"src":"11895:6:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11876:25:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9010,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8979,"src":"11851:8:32","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":9016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11851:51:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9017,"nodeType":"ExpressionStatement","src":"11851:51:32"}]}]}}]},"documentation":{"id":8980,"nodeType":"StructuredDocumentation","src":"11217:270:32","text":" @dev Updates `owner` s allowance for `spender` based on spent `amount`.\n Does not update the allowance amount in case of infinite allowance.\n Revert if not enough allowance is available.\n Might emit an {Approval} event."},"id":9022,"implemented":true,"kind":"function","modifiers":[],"name":"_spendAllowance","nameLocation":"11501:15:32","nodeType":"FunctionDefinition","parameters":{"id":8987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8982,"mutability":"mutable","name":"owner","nameLocation":"11534:5:32","nodeType":"VariableDeclaration","scope":9022,"src":"11526:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8981,"name":"address","nodeType":"ElementaryTypeName","src":"11526:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8984,"mutability":"mutable","name":"spender","nameLocation":"11557:7:32","nodeType":"VariableDeclaration","scope":9022,"src":"11549:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8983,"name":"address","nodeType":"ElementaryTypeName","src":"11549:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8986,"mutability":"mutable","name":"amount","nameLocation":"11582:6:32","nodeType":"VariableDeclaration","scope":9022,"src":"11574:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8985,"name":"uint256","nodeType":"ElementaryTypeName","src":"11574:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11516:78:32"},"returnParameters":{"id":8988,"nodeType":"ParameterList","parameters":[],"src":"11612:0:32"},"scope":9050,"src":"11492:441:32","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":9032,"nodeType":"Block","src":"12636:2:32","statements":[]},"documentation":{"id":9023,"nodeType":"StructuredDocumentation","src":"11939:573:32","text":" @dev Hook that is called before any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n will be transferred to `to`.\n - when `from` is zero, `amount` tokens will be minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."},"id":9033,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeTokenTransfer","nameLocation":"12526:20:32","nodeType":"FunctionDefinition","parameters":{"id":9030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9025,"mutability":"mutable","name":"from","nameLocation":"12564:4:32","nodeType":"VariableDeclaration","scope":9033,"src":"12556:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9024,"name":"address","nodeType":"ElementaryTypeName","src":"12556:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9027,"mutability":"mutable","name":"to","nameLocation":"12586:2:32","nodeType":"VariableDeclaration","scope":9033,"src":"12578:10:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9026,"name":"address","nodeType":"ElementaryTypeName","src":"12578:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9029,"mutability":"mutable","name":"amount","nameLocation":"12606:6:32","nodeType":"VariableDeclaration","scope":9033,"src":"12598:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9028,"name":"uint256","nodeType":"ElementaryTypeName","src":"12598:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12546:72:32"},"returnParameters":{"id":9031,"nodeType":"ParameterList","parameters":[],"src":"12636:0:32"},"scope":9050,"src":"12517:121:32","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":9043,"nodeType":"Block","src":"13344:2:32","statements":[]},"documentation":{"id":9034,"nodeType":"StructuredDocumentation","src":"12644:577:32","text":" @dev Hook that is called after any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n has been transferred to `to`.\n - when `from` is zero, `amount` tokens have been minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens have been burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."},"id":9044,"implemented":true,"kind":"function","modifiers":[],"name":"_afterTokenTransfer","nameLocation":"13235:19:32","nodeType":"FunctionDefinition","parameters":{"id":9041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9036,"mutability":"mutable","name":"from","nameLocation":"13272:4:32","nodeType":"VariableDeclaration","scope":9044,"src":"13264:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9035,"name":"address","nodeType":"ElementaryTypeName","src":"13264:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9038,"mutability":"mutable","name":"to","nameLocation":"13294:2:32","nodeType":"VariableDeclaration","scope":9044,"src":"13286:10:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9037,"name":"address","nodeType":"ElementaryTypeName","src":"13286:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9040,"mutability":"mutable","name":"amount","nameLocation":"13314:6:32","nodeType":"VariableDeclaration","scope":9044,"src":"13306:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9039,"name":"uint256","nodeType":"ElementaryTypeName","src":"13306:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13254:72:32"},"returnParameters":{"id":9042,"nodeType":"ParameterList","parameters":[],"src":"13344:0:32"},"scope":9050,"src":"13226:120:32","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"constant":false,"documentation":{"id":9045,"nodeType":"StructuredDocumentation","src":"13352:254:32","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":9049,"mutability":"mutable","name":"__gap","nameLocation":"13631:5:32","nodeType":"VariableDeclaration","scope":9050,"src":"13611:25:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$45_storage","typeString":"uint256[45]"},"typeName":{"baseType":{"id":9046,"name":"uint256","nodeType":"ElementaryTypeName","src":"13611:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9048,"length":{"hexValue":"3435","id":9047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13619:2:32","typeDescriptions":{"typeIdentifier":"t_rational_45_by_1","typeString":"int_const 45"},"value":"45"},"nodeType":"ArrayTypeName","src":"13611:11:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$45_storage_ptr","typeString":"uint256[45]"}},"visibility":"private"}],"scope":9051,"src":"1480:12159:32","usedErrors":[]}],"src":"105:13535:32"},"id":32},"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","exportedSymbols":{"IERC20Upgradeable":[9128]},"id":9129,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9052,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"106:23:33"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Upgradeable","contractDependencies":[],"contractKind":"interface","documentation":{"id":9053,"nodeType":"StructuredDocumentation","src":"131:70:33","text":" @dev Interface of the ERC20 standard as defined in the EIP."},"fullyImplemented":false,"id":9128,"linearizedBaseContracts":[9128],"name":"IERC20Upgradeable","nameLocation":"212:17:33","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":9054,"nodeType":"StructuredDocumentation","src":"236:158:33","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":9062,"name":"Transfer","nameLocation":"405:8:33","nodeType":"EventDefinition","parameters":{"id":9061,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9056,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"430:4:33","nodeType":"VariableDeclaration","scope":9062,"src":"414:20:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9055,"name":"address","nodeType":"ElementaryTypeName","src":"414:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9058,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"452:2:33","nodeType":"VariableDeclaration","scope":9062,"src":"436:18:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9057,"name":"address","nodeType":"ElementaryTypeName","src":"436:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9060,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"464:5:33","nodeType":"VariableDeclaration","scope":9062,"src":"456:13:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9059,"name":"uint256","nodeType":"ElementaryTypeName","src":"456:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"413:57:33"},"src":"399:72:33"},{"anonymous":false,"documentation":{"id":9063,"nodeType":"StructuredDocumentation","src":"477:148:33","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":9071,"name":"Approval","nameLocation":"636:8:33","nodeType":"EventDefinition","parameters":{"id":9070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9065,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"661:5:33","nodeType":"VariableDeclaration","scope":9071,"src":"645:21:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9064,"name":"address","nodeType":"ElementaryTypeName","src":"645:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9067,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"684:7:33","nodeType":"VariableDeclaration","scope":9071,"src":"668:23:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9066,"name":"address","nodeType":"ElementaryTypeName","src":"668:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9069,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"701:5:33","nodeType":"VariableDeclaration","scope":9071,"src":"693:13:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9068,"name":"uint256","nodeType":"ElementaryTypeName","src":"693:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"644:63:33"},"src":"630:78:33"},{"documentation":{"id":9072,"nodeType":"StructuredDocumentation","src":"714:66:33","text":" @dev Returns the amount of tokens in existence."},"functionSelector":"18160ddd","id":9077,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"794:11:33","nodeType":"FunctionDefinition","parameters":{"id":9073,"nodeType":"ParameterList","parameters":[],"src":"805:2:33"},"returnParameters":{"id":9076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9075,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9077,"src":"831:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9074,"name":"uint256","nodeType":"ElementaryTypeName","src":"831:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"830:9:33"},"scope":9128,"src":"785:55:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9078,"nodeType":"StructuredDocumentation","src":"846:72:33","text":" @dev Returns the amount of tokens owned by `account`."},"functionSelector":"70a08231","id":9085,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"932:9:33","nodeType":"FunctionDefinition","parameters":{"id":9081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9080,"mutability":"mutable","name":"account","nameLocation":"950:7:33","nodeType":"VariableDeclaration","scope":9085,"src":"942:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9079,"name":"address","nodeType":"ElementaryTypeName","src":"942:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"941:17:33"},"returnParameters":{"id":9084,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9083,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9085,"src":"982:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9082,"name":"uint256","nodeType":"ElementaryTypeName","src":"982:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"981:9:33"},"scope":9128,"src":"923:68:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9086,"nodeType":"StructuredDocumentation","src":"997:202:33","text":" @dev Moves `amount` tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":9095,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1213:8:33","nodeType":"FunctionDefinition","parameters":{"id":9091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9088,"mutability":"mutable","name":"to","nameLocation":"1230:2:33","nodeType":"VariableDeclaration","scope":9095,"src":"1222:10:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9087,"name":"address","nodeType":"ElementaryTypeName","src":"1222:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9090,"mutability":"mutable","name":"amount","nameLocation":"1242:6:33","nodeType":"VariableDeclaration","scope":9095,"src":"1234:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9089,"name":"uint256","nodeType":"ElementaryTypeName","src":"1234:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1221:28:33"},"returnParameters":{"id":9094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9093,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9095,"src":"1268:4:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9092,"name":"bool","nodeType":"ElementaryTypeName","src":"1268:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1267:6:33"},"scope":9128,"src":"1204:70:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9096,"nodeType":"StructuredDocumentation","src":"1280:264:33","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":9105,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1558:9:33","nodeType":"FunctionDefinition","parameters":{"id":9101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9098,"mutability":"mutable","name":"owner","nameLocation":"1576:5:33","nodeType":"VariableDeclaration","scope":9105,"src":"1568:13:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9097,"name":"address","nodeType":"ElementaryTypeName","src":"1568:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9100,"mutability":"mutable","name":"spender","nameLocation":"1591:7:33","nodeType":"VariableDeclaration","scope":9105,"src":"1583:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9099,"name":"address","nodeType":"ElementaryTypeName","src":"1583:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1567:32:33"},"returnParameters":{"id":9104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9103,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9105,"src":"1623:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9102,"name":"uint256","nodeType":"ElementaryTypeName","src":"1623:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1622:9:33"},"scope":9128,"src":"1549:83:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9106,"nodeType":"StructuredDocumentation","src":"1638:642:33","text":" @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":9115,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2294:7:33","nodeType":"FunctionDefinition","parameters":{"id":9111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9108,"mutability":"mutable","name":"spender","nameLocation":"2310:7:33","nodeType":"VariableDeclaration","scope":9115,"src":"2302:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9107,"name":"address","nodeType":"ElementaryTypeName","src":"2302:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9110,"mutability":"mutable","name":"amount","nameLocation":"2327:6:33","nodeType":"VariableDeclaration","scope":9115,"src":"2319:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9109,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2301:33:33"},"returnParameters":{"id":9114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9113,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9115,"src":"2353:4:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9112,"name":"bool","nodeType":"ElementaryTypeName","src":"2353:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2352:6:33"},"scope":9128,"src":"2285:74:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9116,"nodeType":"StructuredDocumentation","src":"2365:287:33","text":" @dev Moves `amount` tokens from `from` to `to` using the\n allowance mechanism. `amount` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":9127,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2666:12:33","nodeType":"FunctionDefinition","parameters":{"id":9123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9118,"mutability":"mutable","name":"from","nameLocation":"2696:4:33","nodeType":"VariableDeclaration","scope":9127,"src":"2688:12:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9117,"name":"address","nodeType":"ElementaryTypeName","src":"2688:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9120,"mutability":"mutable","name":"to","nameLocation":"2718:2:33","nodeType":"VariableDeclaration","scope":9127,"src":"2710:10:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9119,"name":"address","nodeType":"ElementaryTypeName","src":"2710:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9122,"mutability":"mutable","name":"amount","nameLocation":"2738:6:33","nodeType":"VariableDeclaration","scope":9127,"src":"2730:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9121,"name":"uint256","nodeType":"ElementaryTypeName","src":"2730:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2678:72:33"},"returnParameters":{"id":9126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9125,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9127,"src":"2769:4:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9124,"name":"bool","nodeType":"ElementaryTypeName","src":"2769:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2768:6:33"},"scope":9128,"src":"2657:118:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":9129,"src":"202:2575:33","usedErrors":[]}],"src":"106:2672:33"},"id":33},"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","exportedSymbols":{"AddressUpgradeable":[9501],"ContextUpgradeable":[9543],"ERC20BurnableUpgradeable":[9192],"ERC20Upgradeable":[9050],"IERC20MetadataUpgradeable":[9217],"IERC20Upgradeable":[9128],"Initializable":[8238]},"id":9193,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9130,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"124:23:34"},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol","file":"../ERC20Upgradeable.sol","id":9131,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9193,"sourceUnit":9051,"src":"149:33:34","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol","file":"../../../utils/ContextUpgradeable.sol","id":9132,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9193,"sourceUnit":9544,"src":"183:47:34","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"../../../proxy/utils/Initializable.sol","id":9133,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9193,"sourceUnit":8239,"src":"231:48:34","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9135,"name":"Initializable","nameLocations":["536:13:34"],"nodeType":"IdentifierPath","referencedDeclaration":8238,"src":"536:13:34"},"id":9136,"nodeType":"InheritanceSpecifier","src":"536:13:34"},{"baseName":{"id":9137,"name":"ContextUpgradeable","nameLocations":["551:18:34"],"nodeType":"IdentifierPath","referencedDeclaration":9543,"src":"551:18:34"},"id":9138,"nodeType":"InheritanceSpecifier","src":"551:18:34"},{"baseName":{"id":9139,"name":"ERC20Upgradeable","nameLocations":["571:16:34"],"nodeType":"IdentifierPath","referencedDeclaration":9050,"src":"571:16:34"},"id":9140,"nodeType":"InheritanceSpecifier","src":"571:16:34"}],"canonicalName":"ERC20BurnableUpgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":9134,"nodeType":"StructuredDocumentation","src":"281:208:34","text":" @dev Extension of {ERC20} that allows token holders to destroy both their own\n tokens and those that they have an allowance for, in a way that can be\n recognized off-chain (via event analysis)."},"fullyImplemented":true,"id":9192,"linearizedBaseContracts":[9192,9050,9217,9128,9543,8238],"name":"ERC20BurnableUpgradeable","nameLocation":"508:24:34","nodeType":"ContractDefinition","nodes":[{"body":{"id":9145,"nodeType":"Block","src":"652:7:34","statements":[]},"id":9146,"implemented":true,"kind":"function","modifiers":[{"id":9143,"kind":"modifierInvocation","modifierName":{"id":9142,"name":"onlyInitializing","nameLocations":["635:16:34"],"nodeType":"IdentifierPath","referencedDeclaration":8183,"src":"635:16:34"},"nodeType":"ModifierInvocation","src":"635:16:34"}],"name":"__ERC20Burnable_init","nameLocation":"603:20:34","nodeType":"FunctionDefinition","parameters":{"id":9141,"nodeType":"ParameterList","parameters":[],"src":"623:2:34"},"returnParameters":{"id":9144,"nodeType":"ParameterList","parameters":[],"src":"652:0:34"},"scope":9192,"src":"594:65:34","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9151,"nodeType":"Block","src":"733:7:34","statements":[]},"id":9152,"implemented":true,"kind":"function","modifiers":[{"id":9149,"kind":"modifierInvocation","modifierName":{"id":9148,"name":"onlyInitializing","nameLocations":["716:16:34"],"nodeType":"IdentifierPath","referencedDeclaration":8183,"src":"716:16:34"},"nodeType":"ModifierInvocation","src":"716:16:34"}],"name":"__ERC20Burnable_init_unchained","nameLocation":"674:30:34","nodeType":"FunctionDefinition","parameters":{"id":9147,"nodeType":"ParameterList","parameters":[],"src":"704:2:34"},"returnParameters":{"id":9150,"nodeType":"ParameterList","parameters":[],"src":"733:0:34"},"scope":9192,"src":"665:75:34","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9164,"nodeType":"Block","src":"893:44:34","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":9159,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9528,"src":"909:10:34","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"909:12:34","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9161,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9155,"src":"923:6:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9158,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8934,"src":"903:5:34","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":9162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"903:27:34","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9163,"nodeType":"ExpressionStatement","src":"903:27:34"}]},"documentation":{"id":9153,"nodeType":"StructuredDocumentation","src":"745:98:34","text":" @dev Destroys `amount` tokens from the caller.\n See {ERC20-_burn}."},"functionSelector":"42966c68","id":9165,"implemented":true,"kind":"function","modifiers":[],"name":"burn","nameLocation":"857:4:34","nodeType":"FunctionDefinition","parameters":{"id":9156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9155,"mutability":"mutable","name":"amount","nameLocation":"870:6:34","nodeType":"VariableDeclaration","scope":9165,"src":"862:14:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9154,"name":"uint256","nodeType":"ElementaryTypeName","src":"862:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"861:16:34"},"returnParameters":{"id":9157,"nodeType":"ParameterList","parameters":[],"src":"893:0:34"},"scope":9192,"src":"848:89:34","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":9185,"nodeType":"Block","src":"1309:95:34","statements":[{"expression":{"arguments":[{"id":9174,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9168,"src":"1335:7:34","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":9175,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9528,"src":"1344:10:34","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1344:12:34","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9177,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9170,"src":"1358:6:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9173,"name":"_spendAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9022,"src":"1319:15:34","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":9178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1319:46:34","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9179,"nodeType":"ExpressionStatement","src":"1319:46:34"},{"expression":{"arguments":[{"id":9181,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9168,"src":"1381:7:34","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9182,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9170,"src":"1390:6:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9180,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8934,"src":"1375:5:34","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":9183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1375:22:34","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9184,"nodeType":"ExpressionStatement","src":"1375:22:34"}]},"documentation":{"id":9166,"nodeType":"StructuredDocumentation","src":"943:295:34","text":" @dev Destroys `amount` tokens from `account`, deducting from the caller's\n allowance.\n See {ERC20-_burn} and {ERC20-allowance}.\n Requirements:\n - the caller must have allowance for ``accounts``'s tokens of at least\n `amount`."},"functionSelector":"79cc6790","id":9186,"implemented":true,"kind":"function","modifiers":[],"name":"burnFrom","nameLocation":"1252:8:34","nodeType":"FunctionDefinition","parameters":{"id":9171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9168,"mutability":"mutable","name":"account","nameLocation":"1269:7:34","nodeType":"VariableDeclaration","scope":9186,"src":"1261:15:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9167,"name":"address","nodeType":"ElementaryTypeName","src":"1261:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9170,"mutability":"mutable","name":"amount","nameLocation":"1286:6:34","nodeType":"VariableDeclaration","scope":9186,"src":"1278:14:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9169,"name":"uint256","nodeType":"ElementaryTypeName","src":"1278:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1260:33:34"},"returnParameters":{"id":9172,"nodeType":"ParameterList","parameters":[],"src":"1309:0:34"},"scope":9192,"src":"1243:161:34","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"constant":false,"documentation":{"id":9187,"nodeType":"StructuredDocumentation","src":"1410:254:34","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":9191,"mutability":"mutable","name":"__gap","nameLocation":"1689:5:34","nodeType":"VariableDeclaration","scope":9192,"src":"1669:25:34","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage","typeString":"uint256[50]"},"typeName":{"baseType":{"id":9188,"name":"uint256","nodeType":"ElementaryTypeName","src":"1669:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9190,"length":{"hexValue":"3530","id":9189,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1677:2:34","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"50"},"nodeType":"ArrayTypeName","src":"1669:11:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage_ptr","typeString":"uint256[50]"}},"visibility":"private"}],"scope":9193,"src":"490:1207:34","usedErrors":[]}],"src":"124:1574:34"},"id":34},"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol","exportedSymbols":{"IERC20MetadataUpgradeable":[9217],"IERC20Upgradeable":[9128]},"id":9218,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9194,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"110:23:35"},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol","file":"../IERC20Upgradeable.sol","id":9195,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9218,"sourceUnit":9129,"src":"135:34:35","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9197,"name":"IERC20Upgradeable","nameLocations":["327:17:35"],"nodeType":"IdentifierPath","referencedDeclaration":9128,"src":"327:17:35"},"id":9198,"nodeType":"InheritanceSpecifier","src":"327:17:35"}],"canonicalName":"IERC20MetadataUpgradeable","contractDependencies":[],"contractKind":"interface","documentation":{"id":9196,"nodeType":"StructuredDocumentation","src":"171:116:35","text":" @dev Interface for the optional metadata functions from the ERC20 standard.\n _Available since v4.1._"},"fullyImplemented":false,"id":9217,"linearizedBaseContracts":[9217,9128],"name":"IERC20MetadataUpgradeable","nameLocation":"298:25:35","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9199,"nodeType":"StructuredDocumentation","src":"351:54:35","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":9204,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"419:4:35","nodeType":"FunctionDefinition","parameters":{"id":9200,"nodeType":"ParameterList","parameters":[],"src":"423:2:35"},"returnParameters":{"id":9203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9202,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9204,"src":"449:13:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9201,"name":"string","nodeType":"ElementaryTypeName","src":"449:6:35","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"448:15:35"},"scope":9217,"src":"410:54:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9205,"nodeType":"StructuredDocumentation","src":"470:56:35","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":9210,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"540:6:35","nodeType":"FunctionDefinition","parameters":{"id":9206,"nodeType":"ParameterList","parameters":[],"src":"546:2:35"},"returnParameters":{"id":9209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9208,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9210,"src":"572:13:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9207,"name":"string","nodeType":"ElementaryTypeName","src":"572:6:35","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"571:15:35"},"scope":9217,"src":"531:56:35","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9211,"nodeType":"StructuredDocumentation","src":"593:65:35","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":9216,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"672:8:35","nodeType":"FunctionDefinition","parameters":{"id":9212,"nodeType":"ParameterList","parameters":[],"src":"680:2:35"},"returnParameters":{"id":9215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9214,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9216,"src":"706:5:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":9213,"name":"uint8","nodeType":"ElementaryTypeName","src":"706:5:35","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"705:7:35"},"scope":9217,"src":"663:50:35","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":9218,"src":"288:427:35","usedErrors":[]}],"src":"110:606:35"},"id":35},"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol","exportedSymbols":{"AddressUpgradeable":[9501]},"id":9502,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9219,"literals":["solidity","^","0.8",".1"],"nodeType":"PragmaDirective","src":"101:23:36"},{"abstract":false,"baseContracts":[],"canonicalName":"AddressUpgradeable","contractDependencies":[],"contractKind":"library","documentation":{"id":9220,"nodeType":"StructuredDocumentation","src":"126:67:36","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":9501,"linearizedBaseContracts":[9501],"name":"AddressUpgradeable","nameLocation":"202:18:36","nodeType":"ContractDefinition","nodes":[{"body":{"id":9234,"nodeType":"Block","src":"1252:254:36","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":9228,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9223,"src":"1476:7:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1484:4:36","memberName":"code","nodeType":"MemberAccess","src":"1476:12:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":9230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1489:6:36","memberName":"length","nodeType":"MemberAccess","src":"1476:19:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9231,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1498:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1476:23:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9227,"id":9233,"nodeType":"Return","src":"1469:30:36"}]},"documentation":{"id":9221,"nodeType":"StructuredDocumentation","src":"227:954:36","text":" @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n  - an externally-owned account\n  - a contract in construction\n  - an address where a contract will be created\n  - an address where a contract lived, but was destroyed\n ====\n [IMPORTANT]\n ====\n You shouldn't rely on `isContract` to protect against flash loan attacks!\n Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n constructor.\n ===="},"id":9235,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nameLocation":"1195:10:36","nodeType":"FunctionDefinition","parameters":{"id":9224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9223,"mutability":"mutable","name":"account","nameLocation":"1214:7:36","nodeType":"VariableDeclaration","scope":9235,"src":"1206:15:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9222,"name":"address","nodeType":"ElementaryTypeName","src":"1206:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1205:17:36"},"returnParameters":{"id":9227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9226,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9235,"src":"1246:4:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9225,"name":"bool","nodeType":"ElementaryTypeName","src":"1246:4:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1245:6:36"},"scope":9501,"src":"1186:320:36","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":9268,"nodeType":"Block","src":"2494:241:36","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":9246,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2520:4:36","typeDescriptions":{"typeIdentifier":"t_contract$_AddressUpgradeable_$9501","typeString":"library AddressUpgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AddressUpgradeable_$9501","typeString":"library AddressUpgradeable"}],"id":9245,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2512:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9244,"name":"address","nodeType":"ElementaryTypeName","src":"2512:7:36","typeDescriptions":{}}},"id":9247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2512:13:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2526:7:36","memberName":"balance","nodeType":"MemberAccess","src":"2512:21:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":9249,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9240,"src":"2537:6:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2512:31:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","id":9251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2545:31:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""},"value":"Address: insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""}],"id":9243,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2504:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":9252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2504:73:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9253,"nodeType":"ExpressionStatement","src":"2504:73:36"},{"assignments":[9255,null],"declarations":[{"constant":false,"id":9255,"mutability":"mutable","name":"success","nameLocation":"2594:7:36","nodeType":"VariableDeclaration","scope":9268,"src":"2589:12:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9254,"name":"bool","nodeType":"ElementaryTypeName","src":"2589:4:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":9262,"initialValue":{"arguments":[{"hexValue":"","id":9260,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2637:2:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":9256,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9238,"src":"2607:9:36","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":9257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2617:4:36","memberName":"call","nodeType":"MemberAccess","src":"2607:14:36","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":9259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":9258,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9240,"src":"2629:6:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"2607:29:36","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":9261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2607:33:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"2588:52:36"},{"expression":{"arguments":[{"id":9264,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9255,"src":"2658:7:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564","id":9265,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2667:60:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""},"value":"Address: unable to send value, recipient may have reverted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""}],"id":9263,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2650:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":9266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2650:78:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9267,"nodeType":"ExpressionStatement","src":"2650:78:36"}]},"documentation":{"id":9236,"nodeType":"StructuredDocumentation","src":"1512:906:36","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":9269,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"2432:9:36","nodeType":"FunctionDefinition","parameters":{"id":9241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9238,"mutability":"mutable","name":"recipient","nameLocation":"2458:9:36","nodeType":"VariableDeclaration","scope":9269,"src":"2442:25:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":9237,"name":"address","nodeType":"ElementaryTypeName","src":"2442:15:36","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":9240,"mutability":"mutable","name":"amount","nameLocation":"2477:6:36","nodeType":"VariableDeclaration","scope":9269,"src":"2469:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9239,"name":"uint256","nodeType":"ElementaryTypeName","src":"2469:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2441:43:36"},"returnParameters":{"id":9242,"nodeType":"ParameterList","parameters":[],"src":"2494:0:36"},"scope":9501,"src":"2423:312:36","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9286,"nodeType":"Block","src":"3566:96:36","statements":[{"expression":{"arguments":[{"id":9280,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9272,"src":"3605:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9281,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9274,"src":"3613:4:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":9282,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3619:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564","id":9283,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3622:32:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""},"value":"Address: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""}],"id":9279,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[9327,9371],"referencedDeclaration":9371,"src":"3583:21:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":9284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3583:72:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":9278,"id":9285,"nodeType":"Return","src":"3576:79:36"}]},"documentation":{"id":9270,"nodeType":"StructuredDocumentation","src":"2741:731:36","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"},"id":9287,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"3486:12:36","nodeType":"FunctionDefinition","parameters":{"id":9275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9272,"mutability":"mutable","name":"target","nameLocation":"3507:6:36","nodeType":"VariableDeclaration","scope":9287,"src":"3499:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9271,"name":"address","nodeType":"ElementaryTypeName","src":"3499:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9274,"mutability":"mutable","name":"data","nameLocation":"3528:4:36","nodeType":"VariableDeclaration","scope":9287,"src":"3515:17:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9273,"name":"bytes","nodeType":"ElementaryTypeName","src":"3515:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3498:35:36"},"returnParameters":{"id":9278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9277,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9287,"src":"3552:12:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9276,"name":"bytes","nodeType":"ElementaryTypeName","src":"3552:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3551:14:36"},"scope":9501,"src":"3477:185:36","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9306,"nodeType":"Block","src":"4031:76:36","statements":[{"expression":{"arguments":[{"id":9300,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9290,"src":"4070:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9301,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9292,"src":"4078:4:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":9302,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4084:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":9303,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9294,"src":"4087:12:36","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":9299,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[9327,9371],"referencedDeclaration":9371,"src":"4048:21:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":9304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4048:52:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":9298,"id":9305,"nodeType":"Return","src":"4041:59:36"}]},"documentation":{"id":9288,"nodeType":"StructuredDocumentation","src":"3668:211:36","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":9307,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"3893:12:36","nodeType":"FunctionDefinition","parameters":{"id":9295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9290,"mutability":"mutable","name":"target","nameLocation":"3923:6:36","nodeType":"VariableDeclaration","scope":9307,"src":"3915:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9289,"name":"address","nodeType":"ElementaryTypeName","src":"3915:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9292,"mutability":"mutable","name":"data","nameLocation":"3952:4:36","nodeType":"VariableDeclaration","scope":9307,"src":"3939:17:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9291,"name":"bytes","nodeType":"ElementaryTypeName","src":"3939:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":9294,"mutability":"mutable","name":"errorMessage","nameLocation":"3980:12:36","nodeType":"VariableDeclaration","scope":9307,"src":"3966:26:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9293,"name":"string","nodeType":"ElementaryTypeName","src":"3966:6:36","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3905:93:36"},"returnParameters":{"id":9298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9297,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9307,"src":"4017:12:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9296,"name":"bytes","nodeType":"ElementaryTypeName","src":"4017:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4016:14:36"},"scope":9501,"src":"3884:223:36","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9326,"nodeType":"Block","src":"4612:111:36","statements":[{"expression":{"arguments":[{"id":9320,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9310,"src":"4651:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9321,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9312,"src":"4659:4:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":9322,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9314,"src":"4665:5:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564","id":9323,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4672:43:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""},"value":"Address: low-level call with value failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""}],"id":9319,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[9327,9371],"referencedDeclaration":9371,"src":"4629:21:36","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":9324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4629:87:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":9318,"id":9325,"nodeType":"Return","src":"4622:94:36"}]},"documentation":{"id":9308,"nodeType":"StructuredDocumentation","src":"4113:351:36","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"},"id":9327,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"4478:21:36","nodeType":"FunctionDefinition","parameters":{"id":9315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9310,"mutability":"mutable","name":"target","nameLocation":"4517:6:36","nodeType":"VariableDeclaration","scope":9327,"src":"4509:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9309,"name":"address","nodeType":"ElementaryTypeName","src":"4509:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9312,"mutability":"mutable","name":"data","nameLocation":"4546:4:36","nodeType":"VariableDeclaration","scope":9327,"src":"4533:17:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9311,"name":"bytes","nodeType":"ElementaryTypeName","src":"4533:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":9314,"mutability":"mutable","name":"value","nameLocation":"4568:5:36","nodeType":"VariableDeclaration","scope":9327,"src":"4560:13:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9313,"name":"uint256","nodeType":"ElementaryTypeName","src":"4560:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4499:80:36"},"returnParameters":{"id":9318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9317,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9327,"src":"4598:12:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9316,"name":"bytes","nodeType":"ElementaryTypeName","src":"4598:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4597:14:36"},"scope":9501,"src":"4469:254:36","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9370,"nodeType":"Block","src":"5150:267:36","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":9344,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5176:4:36","typeDescriptions":{"typeIdentifier":"t_contract$_AddressUpgradeable_$9501","typeString":"library AddressUpgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AddressUpgradeable_$9501","typeString":"library AddressUpgradeable"}],"id":9343,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5168:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9342,"name":"address","nodeType":"ElementaryTypeName","src":"5168:7:36","typeDescriptions":{}}},"id":9345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5168:13:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5182:7:36","memberName":"balance","nodeType":"MemberAccess","src":"5168:21:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":9347,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9334,"src":"5193:5:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5168:30:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c","id":9349,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5200:40:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""},"value":"Address: insufficient balance for call"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""}],"id":9341,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5160:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":9350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5160:81:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9351,"nodeType":"ExpressionStatement","src":"5160:81:36"},{"assignments":[9353,9355],"declarations":[{"constant":false,"id":9353,"mutability":"mutable","name":"success","nameLocation":"5257:7:36","nodeType":"VariableDeclaration","scope":9370,"src":"5252:12:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9352,"name":"bool","nodeType":"ElementaryTypeName","src":"5252:4:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9355,"mutability":"mutable","name":"returndata","nameLocation":"5279:10:36","nodeType":"VariableDeclaration","scope":9370,"src":"5266:23:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9354,"name":"bytes","nodeType":"ElementaryTypeName","src":"5266:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":9362,"initialValue":{"arguments":[{"id":9360,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9332,"src":"5319:4:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":9356,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9330,"src":"5293:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5300:4:36","memberName":"call","nodeType":"MemberAccess","src":"5293:11:36","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":9359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":9358,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9334,"src":"5312:5:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"5293:25:36","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":9361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5293:31:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5251:73:36"},{"expression":{"arguments":[{"id":9364,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9330,"src":"5368:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9365,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9353,"src":"5376:7:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":9366,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9355,"src":"5385:10:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":9367,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9336,"src":"5397:12:36","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":9363,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9456,"src":"5341:26:36","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":9368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5341:69:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":9340,"id":9369,"nodeType":"Return","src":"5334:76:36"}]},"documentation":{"id":9328,"nodeType":"StructuredDocumentation","src":"4729:237:36","text":" @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":9371,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"4980:21:36","nodeType":"FunctionDefinition","parameters":{"id":9337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9330,"mutability":"mutable","name":"target","nameLocation":"5019:6:36","nodeType":"VariableDeclaration","scope":9371,"src":"5011:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9329,"name":"address","nodeType":"ElementaryTypeName","src":"5011:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9332,"mutability":"mutable","name":"data","nameLocation":"5048:4:36","nodeType":"VariableDeclaration","scope":9371,"src":"5035:17:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9331,"name":"bytes","nodeType":"ElementaryTypeName","src":"5035:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":9334,"mutability":"mutable","name":"value","nameLocation":"5070:5:36","nodeType":"VariableDeclaration","scope":9371,"src":"5062:13:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9333,"name":"uint256","nodeType":"ElementaryTypeName","src":"5062:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9336,"mutability":"mutable","name":"errorMessage","nameLocation":"5099:12:36","nodeType":"VariableDeclaration","scope":9371,"src":"5085:26:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9335,"name":"string","nodeType":"ElementaryTypeName","src":"5085:6:36","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5001:116:36"},"returnParameters":{"id":9340,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9339,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9371,"src":"5136:12:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9338,"name":"bytes","nodeType":"ElementaryTypeName","src":"5136:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5135:14:36"},"scope":9501,"src":"4971:446:36","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9387,"nodeType":"Block","src":"5694:97:36","statements":[{"expression":{"arguments":[{"id":9382,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9374,"src":"5730:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9383,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9376,"src":"5738:4:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564","id":9384,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5744:39:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""},"value":"Address: low-level static call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""}],"id":9381,"name":"functionStaticCall","nodeType":"Identifier","overloadedDeclarations":[9388,9417],"referencedDeclaration":9417,"src":"5711:18:36","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) view returns (bytes memory)"}},"id":9385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5711:73:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":9380,"id":9386,"nodeType":"Return","src":"5704:80:36"}]},"documentation":{"id":9372,"nodeType":"StructuredDocumentation","src":"5423:166:36","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":9388,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"5603:18:36","nodeType":"FunctionDefinition","parameters":{"id":9377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9374,"mutability":"mutable","name":"target","nameLocation":"5630:6:36","nodeType":"VariableDeclaration","scope":9388,"src":"5622:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9373,"name":"address","nodeType":"ElementaryTypeName","src":"5622:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9376,"mutability":"mutable","name":"data","nameLocation":"5651:4:36","nodeType":"VariableDeclaration","scope":9388,"src":"5638:17:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9375,"name":"bytes","nodeType":"ElementaryTypeName","src":"5638:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5621:35:36"},"returnParameters":{"id":9380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9379,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9388,"src":"5680:12:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9378,"name":"bytes","nodeType":"ElementaryTypeName","src":"5680:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5679:14:36"},"scope":9501,"src":"5594:197:36","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":9416,"nodeType":"Block","src":"6133:168:36","statements":[{"assignments":[9401,9403],"declarations":[{"constant":false,"id":9401,"mutability":"mutable","name":"success","nameLocation":"6149:7:36","nodeType":"VariableDeclaration","scope":9416,"src":"6144:12:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9400,"name":"bool","nodeType":"ElementaryTypeName","src":"6144:4:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9403,"mutability":"mutable","name":"returndata","nameLocation":"6171:10:36","nodeType":"VariableDeclaration","scope":9416,"src":"6158:23:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9402,"name":"bytes","nodeType":"ElementaryTypeName","src":"6158:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":9408,"initialValue":{"arguments":[{"id":9406,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9393,"src":"6203:4:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":9404,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9391,"src":"6185:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6192:10:36","memberName":"staticcall","nodeType":"MemberAccess","src":"6185:17:36","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":9407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6185:23:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6143:65:36"},{"expression":{"arguments":[{"id":9410,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9391,"src":"6252:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9411,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9401,"src":"6260:7:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":9412,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9403,"src":"6269:10:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":9413,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9395,"src":"6281:12:36","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":9409,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9456,"src":"6225:26:36","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":9414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6225:69:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":9399,"id":9415,"nodeType":"Return","src":"6218:76:36"}]},"documentation":{"id":9389,"nodeType":"StructuredDocumentation","src":"5797:173:36","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":9417,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"5984:18:36","nodeType":"FunctionDefinition","parameters":{"id":9396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9391,"mutability":"mutable","name":"target","nameLocation":"6020:6:36","nodeType":"VariableDeclaration","scope":9417,"src":"6012:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9390,"name":"address","nodeType":"ElementaryTypeName","src":"6012:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9393,"mutability":"mutable","name":"data","nameLocation":"6049:4:36","nodeType":"VariableDeclaration","scope":9417,"src":"6036:17:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9392,"name":"bytes","nodeType":"ElementaryTypeName","src":"6036:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":9395,"mutability":"mutable","name":"errorMessage","nameLocation":"6077:12:36","nodeType":"VariableDeclaration","scope":9417,"src":"6063:26:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9394,"name":"string","nodeType":"ElementaryTypeName","src":"6063:6:36","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6002:93:36"},"returnParameters":{"id":9399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9398,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9417,"src":"6119:12:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9397,"name":"bytes","nodeType":"ElementaryTypeName","src":"6119:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6118:14:36"},"scope":9501,"src":"5975:326:36","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":9455,"nodeType":"Block","src":"6783:434:36","statements":[{"condition":{"id":9431,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9422,"src":"6797:7:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":9453,"nodeType":"Block","src":"7153:58:36","statements":[{"expression":{"arguments":[{"id":9449,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9424,"src":"7175:10:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":9450,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9426,"src":"7187:12:36","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":9448,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9500,"src":"7167:7:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (bytes memory,string memory) pure"}},"id":9451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7167:33:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9452,"nodeType":"ExpressionStatement","src":"7167:33:36"}]},"id":9454,"nodeType":"IfStatement","src":"6793:418:36","trueBody":{"id":9447,"nodeType":"Block","src":"6806:341:36","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":9432,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9424,"src":"6824:10:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":9433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6835:6:36","memberName":"length","nodeType":"MemberAccess","src":"6824:17:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":9434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6845:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6824:22:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9444,"nodeType":"IfStatement","src":"6820:286:36","trueBody":{"id":9443,"nodeType":"Block","src":"6848:258:36","statements":[{"expression":{"arguments":[{"arguments":[{"id":9438,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9420,"src":"7050:6:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9437,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9235,"src":"7039:10:36","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":9439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7039:18:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","id":9440,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7059:31:36","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""},"value":"Address: call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""}],"id":9436,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7031:7:36","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":9441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7031:60:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9442,"nodeType":"ExpressionStatement","src":"7031:60:36"}]}},{"expression":{"id":9445,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9424,"src":"7126:10:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":9430,"id":9446,"nodeType":"Return","src":"7119:17:36"}]}}]},"documentation":{"id":9418,"nodeType":"StructuredDocumentation","src":"6307:277:36","text":" @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n _Available since v4.8._"},"id":9456,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"6598:26:36","nodeType":"FunctionDefinition","parameters":{"id":9427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9420,"mutability":"mutable","name":"target","nameLocation":"6642:6:36","nodeType":"VariableDeclaration","scope":9456,"src":"6634:14:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9419,"name":"address","nodeType":"ElementaryTypeName","src":"6634:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9422,"mutability":"mutable","name":"success","nameLocation":"6663:7:36","nodeType":"VariableDeclaration","scope":9456,"src":"6658:12:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9421,"name":"bool","nodeType":"ElementaryTypeName","src":"6658:4:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9424,"mutability":"mutable","name":"returndata","nameLocation":"6693:10:36","nodeType":"VariableDeclaration","scope":9456,"src":"6680:23:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9423,"name":"bytes","nodeType":"ElementaryTypeName","src":"6680:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":9426,"mutability":"mutable","name":"errorMessage","nameLocation":"6727:12:36","nodeType":"VariableDeclaration","scope":9456,"src":"6713:26:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9425,"name":"string","nodeType":"ElementaryTypeName","src":"6713:6:36","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6624:121:36"},"returnParameters":{"id":9430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9429,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9456,"src":"6769:12:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9428,"name":"bytes","nodeType":"ElementaryTypeName","src":"6769:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6768:14:36"},"scope":9501,"src":"6589:628:36","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":9479,"nodeType":"Block","src":"7598:135:36","statements":[{"condition":{"id":9468,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9459,"src":"7612:7:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":9477,"nodeType":"Block","src":"7669:58:36","statements":[{"expression":{"arguments":[{"id":9473,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9461,"src":"7691:10:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":9474,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9463,"src":"7703:12:36","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":9472,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9500,"src":"7683:7:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (bytes memory,string memory) pure"}},"id":9475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7683:33:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9476,"nodeType":"ExpressionStatement","src":"7683:33:36"}]},"id":9478,"nodeType":"IfStatement","src":"7608:119:36","trueBody":{"id":9471,"nodeType":"Block","src":"7621:42:36","statements":[{"expression":{"id":9469,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9461,"src":"7642:10:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":9467,"id":9470,"nodeType":"Return","src":"7635:17:36"}]}}]},"documentation":{"id":9457,"nodeType":"StructuredDocumentation","src":"7223:210:36","text":" @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason or using the provided one.\n _Available since v4.3._"},"id":9480,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"7447:16:36","nodeType":"FunctionDefinition","parameters":{"id":9464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9459,"mutability":"mutable","name":"success","nameLocation":"7478:7:36","nodeType":"VariableDeclaration","scope":9480,"src":"7473:12:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9458,"name":"bool","nodeType":"ElementaryTypeName","src":"7473:4:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9461,"mutability":"mutable","name":"returndata","nameLocation":"7508:10:36","nodeType":"VariableDeclaration","scope":9480,"src":"7495:23:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9460,"name":"bytes","nodeType":"ElementaryTypeName","src":"7495:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":9463,"mutability":"mutable","name":"errorMessage","nameLocation":"7542:12:36","nodeType":"VariableDeclaration","scope":9480,"src":"7528:26:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9462,"name":"string","nodeType":"ElementaryTypeName","src":"7528:6:36","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7463:97:36"},"returnParameters":{"id":9467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9466,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9480,"src":"7584:12:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9465,"name":"bytes","nodeType":"ElementaryTypeName","src":"7584:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7583:14:36"},"scope":9501,"src":"7438:295:36","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9499,"nodeType":"Block","src":"7822:457:36","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":9487,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9482,"src":"7898:10:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":9488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7909:6:36","memberName":"length","nodeType":"MemberAccess","src":"7898:17:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7918:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7898:21:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":9497,"nodeType":"Block","src":"8228:45:36","statements":[{"expression":{"arguments":[{"id":9494,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9484,"src":"8249:12:36","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":9493,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"8242:6:36","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":9495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8242:20:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9496,"nodeType":"ExpressionStatement","src":"8242:20:36"}]},"id":9498,"nodeType":"IfStatement","src":"7894:379:36","trueBody":{"id":9492,"nodeType":"Block","src":"7921:301:36","statements":[{"AST":{"nodeType":"YulBlock","src":"8079:133:36","statements":[{"nodeType":"YulVariableDeclaration","src":"8097:40:36","value":{"arguments":[{"name":"returndata","nodeType":"YulIdentifier","src":"8126:10:36"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8120:5:36"},"nodeType":"YulFunctionCall","src":"8120:17:36"},"variables":[{"name":"returndata_size","nodeType":"YulTypedName","src":"8101:15:36","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8165:2:36","type":"","value":"32"},{"name":"returndata","nodeType":"YulIdentifier","src":"8169:10:36"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8161:3:36"},"nodeType":"YulFunctionCall","src":"8161:19:36"},{"name":"returndata_size","nodeType":"YulIdentifier","src":"8182:15:36"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8154:6:36"},"nodeType":"YulFunctionCall","src":"8154:44:36"},"nodeType":"YulExpressionStatement","src":"8154:44:36"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"london","externalReferences":[{"declaration":9482,"isOffset":false,"isSlot":false,"src":"8126:10:36","valueSize":1},{"declaration":9482,"isOffset":false,"isSlot":false,"src":"8169:10:36","valueSize":1}],"id":9491,"nodeType":"InlineAssembly","src":"8070:142:36"}]}}]},"id":9500,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"7748:7:36","nodeType":"FunctionDefinition","parameters":{"id":9485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9482,"mutability":"mutable","name":"returndata","nameLocation":"7769:10:36","nodeType":"VariableDeclaration","scope":9500,"src":"7756:23:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9481,"name":"bytes","nodeType":"ElementaryTypeName","src":"7756:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":9484,"mutability":"mutable","name":"errorMessage","nameLocation":"7795:12:36","nodeType":"VariableDeclaration","scope":9500,"src":"7781:26:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9483,"name":"string","nodeType":"ElementaryTypeName","src":"7781:6:36","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7755:53:36"},"returnParameters":{"id":9486,"nodeType":"ParameterList","parameters":[],"src":"7822:0:36"},"scope":9501,"src":"7739:540:36","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":9502,"src":"194:8087:36","usedErrors":[]}],"src":"101:8181:36"},"id":36},"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol","exportedSymbols":{"AddressUpgradeable":[9501],"ContextUpgradeable":[9543],"Initializable":[8238]},"id":9544,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9503,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"86:23:37"},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"../proxy/utils/Initializable.sol","id":9504,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9544,"sourceUnit":8239,"src":"110:42:37","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9506,"name":"Initializable","nameLocations":["691:13:37"],"nodeType":"IdentifierPath","referencedDeclaration":8238,"src":"691:13:37"},"id":9507,"nodeType":"InheritanceSpecifier","src":"691:13:37"}],"canonicalName":"ContextUpgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":9505,"nodeType":"StructuredDocumentation","src":"154:496:37","text":" @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."},"fullyImplemented":true,"id":9543,"linearizedBaseContracts":[9543,8238],"name":"ContextUpgradeable","nameLocation":"669:18:37","nodeType":"ContractDefinition","nodes":[{"body":{"id":9512,"nodeType":"Block","src":"763:7:37","statements":[]},"id":9513,"implemented":true,"kind":"function","modifiers":[{"id":9510,"kind":"modifierInvocation","modifierName":{"id":9509,"name":"onlyInitializing","nameLocations":["746:16:37"],"nodeType":"IdentifierPath","referencedDeclaration":8183,"src":"746:16:37"},"nodeType":"ModifierInvocation","src":"746:16:37"}],"name":"__Context_init","nameLocation":"720:14:37","nodeType":"FunctionDefinition","parameters":{"id":9508,"nodeType":"ParameterList","parameters":[],"src":"734:2:37"},"returnParameters":{"id":9511,"nodeType":"ParameterList","parameters":[],"src":"763:0:37"},"scope":9543,"src":"711:59:37","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9518,"nodeType":"Block","src":"838:7:37","statements":[]},"id":9519,"implemented":true,"kind":"function","modifiers":[{"id":9516,"kind":"modifierInvocation","modifierName":{"id":9515,"name":"onlyInitializing","nameLocations":["821:16:37"],"nodeType":"IdentifierPath","referencedDeclaration":8183,"src":"821:16:37"},"nodeType":"ModifierInvocation","src":"821:16:37"}],"name":"__Context_init_unchained","nameLocation":"785:24:37","nodeType":"FunctionDefinition","parameters":{"id":9514,"nodeType":"ParameterList","parameters":[],"src":"809:2:37"},"returnParameters":{"id":9517,"nodeType":"ParameterList","parameters":[],"src":"838:0:37"},"scope":9543,"src":"776:69:37","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9527,"nodeType":"Block","src":"912:34:37","statements":[{"expression":{"expression":{"id":9524,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"929:3:37","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":9525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"933:6:37","memberName":"sender","nodeType":"MemberAccess","src":"929:10:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9523,"id":9526,"nodeType":"Return","src":"922:17:37"}]},"id":9528,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"859:10:37","nodeType":"FunctionDefinition","parameters":{"id":9520,"nodeType":"ParameterList","parameters":[],"src":"869:2:37"},"returnParameters":{"id":9523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9522,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9528,"src":"903:7:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9521,"name":"address","nodeType":"ElementaryTypeName","src":"903:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"902:9:37"},"scope":9543,"src":"850:96:37","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":9536,"nodeType":"Block","src":"1019:32:37","statements":[{"expression":{"expression":{"id":9533,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1036:3:37","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":9534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1040:4:37","memberName":"data","nodeType":"MemberAccess","src":"1036:8:37","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":9532,"id":9535,"nodeType":"Return","src":"1029:15:37"}]},"id":9537,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"961:8:37","nodeType":"FunctionDefinition","parameters":{"id":9529,"nodeType":"ParameterList","parameters":[],"src":"969:2:37"},"returnParameters":{"id":9532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9531,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9537,"src":"1003:14:37","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":9530,"name":"bytes","nodeType":"ElementaryTypeName","src":"1003:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1002:16:37"},"scope":9543,"src":"952:99:37","stateMutability":"view","virtual":true,"visibility":"internal"},{"constant":false,"documentation":{"id":9538,"nodeType":"StructuredDocumentation","src":"1057:254:37","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":9542,"mutability":"mutable","name":"__gap","nameLocation":"1336:5:37","nodeType":"VariableDeclaration","scope":9543,"src":"1316:25:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage","typeString":"uint256[50]"},"typeName":{"baseType":{"id":9539,"name":"uint256","nodeType":"ElementaryTypeName","src":"1316:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9541,"length":{"hexValue":"3530","id":9540,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1324:2:37","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"50"},"nodeType":"ArrayTypeName","src":"1316:11:37","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage_ptr","typeString":"uint256[50]"}},"visibility":"private"}],"scope":9544,"src":"651:693:37","usedErrors":[]}],"src":"86:1259:37"},"id":37},"@openzeppelin/contracts/access/Ownable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","exportedSymbols":{"Context":[11506],"Ownable":[9656]},"id":9657,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9545,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"102:23:38"},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../utils/Context.sol","id":9546,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9657,"sourceUnit":11507,"src":"127:30:38","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9548,"name":"Context","nameLocations":["683:7:38"],"nodeType":"IdentifierPath","referencedDeclaration":11506,"src":"683:7:38"},"id":9549,"nodeType":"InheritanceSpecifier","src":"683:7:38"}],"canonicalName":"Ownable","contractDependencies":[],"contractKind":"contract","documentation":{"id":9547,"nodeType":"StructuredDocumentation","src":"159:494:38","text":" @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n By default, the owner account will be the one that deploys the contract. This\n can later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."},"fullyImplemented":true,"id":9656,"linearizedBaseContracts":[9656,11506],"name":"Ownable","nameLocation":"672:7:38","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9551,"mutability":"mutable","name":"_owner","nameLocation":"713:6:38","nodeType":"VariableDeclaration","scope":9656,"src":"697:22:38","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9550,"name":"address","nodeType":"ElementaryTypeName","src":"697:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":9557,"name":"OwnershipTransferred","nameLocation":"732:20:38","nodeType":"EventDefinition","parameters":{"id":9556,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9553,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"769:13:38","nodeType":"VariableDeclaration","scope":9557,"src":"753:29:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9552,"name":"address","nodeType":"ElementaryTypeName","src":"753:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9555,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"800:8:38","nodeType":"VariableDeclaration","scope":9557,"src":"784:24:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9554,"name":"address","nodeType":"ElementaryTypeName","src":"784:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"752:57:38"},"src":"726:84:38"},{"body":{"id":9566,"nodeType":"Block","src":"926:49:38","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":9562,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11496,"src":"955:10:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"955:12:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9561,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9655,"src":"936:18:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"936:32:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9565,"nodeType":"ExpressionStatement","src":"936:32:38"}]},"documentation":{"id":9558,"nodeType":"StructuredDocumentation","src":"816:91:38","text":" @dev Initializes the contract setting the deployer as the initial owner."},"id":9567,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9559,"nodeType":"ParameterList","parameters":[],"src":"923:2:38"},"returnParameters":{"id":9560,"nodeType":"ParameterList","parameters":[],"src":"926:0:38"},"scope":9656,"src":"912:63:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9574,"nodeType":"Block","src":"1084:41:38","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9570,"name":"_checkOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9598,"src":"1094:11:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":9571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1094:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9572,"nodeType":"ExpressionStatement","src":"1094:13:38"},{"id":9573,"nodeType":"PlaceholderStatement","src":"1117:1:38"}]},"documentation":{"id":9568,"nodeType":"StructuredDocumentation","src":"981:77:38","text":" @dev Throws if called by any account other than the owner."},"id":9575,"name":"onlyOwner","nameLocation":"1072:9:38","nodeType":"ModifierDefinition","parameters":{"id":9569,"nodeType":"ParameterList","parameters":[],"src":"1081:2:38"},"src":"1063:62:38","virtual":false,"visibility":"internal"},{"body":{"id":9583,"nodeType":"Block","src":"1256:30:38","statements":[{"expression":{"id":9581,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9551,"src":"1273:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9580,"id":9582,"nodeType":"Return","src":"1266:13:38"}]},"documentation":{"id":9576,"nodeType":"StructuredDocumentation","src":"1131:65:38","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":9584,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"1210:5:38","nodeType":"FunctionDefinition","parameters":{"id":9577,"nodeType":"ParameterList","parameters":[],"src":"1215:2:38"},"returnParameters":{"id":9580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9579,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9584,"src":"1247:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9578,"name":"address","nodeType":"ElementaryTypeName","src":"1247:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1246:9:38"},"scope":9656,"src":"1201:85:38","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":9597,"nodeType":"Block","src":"1404:85:38","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":9589,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9584,"src":"1422:5:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1422:7:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":9591,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11496,"src":"1433:10:38","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1433:12:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1422:23:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","id":9594,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1447:34:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""},"value":"Ownable: caller is not the owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""}],"id":9588,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1414:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":9595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1414:68:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9596,"nodeType":"ExpressionStatement","src":"1414:68:38"}]},"documentation":{"id":9585,"nodeType":"StructuredDocumentation","src":"1292:62:38","text":" @dev Throws if the sender is not the owner."},"id":9598,"implemented":true,"kind":"function","modifiers":[],"name":"_checkOwner","nameLocation":"1368:11:38","nodeType":"FunctionDefinition","parameters":{"id":9586,"nodeType":"ParameterList","parameters":[],"src":"1379:2:38"},"returnParameters":{"id":9587,"nodeType":"ParameterList","parameters":[],"src":"1404:0:38"},"scope":9656,"src":"1359:130:38","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":9611,"nodeType":"Block","src":"1885:47:38","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":9607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1922:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9606,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1914:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9605,"name":"address","nodeType":"ElementaryTypeName","src":"1914:7:38","typeDescriptions":{}}},"id":9608,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1914:10:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9604,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9655,"src":"1895:18:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1895:30:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9610,"nodeType":"ExpressionStatement","src":"1895:30:38"}]},"documentation":{"id":9599,"nodeType":"StructuredDocumentation","src":"1495:331:38","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions anymore. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby removing any functionality that is only available to the owner."},"functionSelector":"715018a6","id":9612,"implemented":true,"kind":"function","modifiers":[{"id":9602,"kind":"modifierInvocation","modifierName":{"id":9601,"name":"onlyOwner","nameLocations":["1875:9:38"],"nodeType":"IdentifierPath","referencedDeclaration":9575,"src":"1875:9:38"},"nodeType":"ModifierInvocation","src":"1875:9:38"}],"name":"renounceOwnership","nameLocation":"1840:17:38","nodeType":"FunctionDefinition","parameters":{"id":9600,"nodeType":"ParameterList","parameters":[],"src":"1857:2:38"},"returnParameters":{"id":9603,"nodeType":"ParameterList","parameters":[],"src":"1885:0:38"},"scope":9656,"src":"1831:101:38","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":9634,"nodeType":"Block","src":"2151:128:38","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9621,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9615,"src":"2169:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":9624,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2189:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9623,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2181:7:38","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9622,"name":"address","nodeType":"ElementaryTypeName","src":"2181:7:38","typeDescriptions":{}}},"id":9625,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2181:10:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2169:22:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373","id":9627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2193:40:38","typeDescriptions":{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""},"value":"Ownable: new owner is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""}],"id":9620,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2161:7:38","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":9628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2161:73:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9629,"nodeType":"ExpressionStatement","src":"2161:73:38"},{"expression":{"arguments":[{"id":9631,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9615,"src":"2263:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9630,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9655,"src":"2244:18:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2244:28:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9633,"nodeType":"ExpressionStatement","src":"2244:28:38"}]},"documentation":{"id":9613,"nodeType":"StructuredDocumentation","src":"1938:138:38","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":9635,"implemented":true,"kind":"function","modifiers":[{"id":9618,"kind":"modifierInvocation","modifierName":{"id":9617,"name":"onlyOwner","nameLocations":["2141:9:38"],"nodeType":"IdentifierPath","referencedDeclaration":9575,"src":"2141:9:38"},"nodeType":"ModifierInvocation","src":"2141:9:38"}],"name":"transferOwnership","nameLocation":"2090:17:38","nodeType":"FunctionDefinition","parameters":{"id":9616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9615,"mutability":"mutable","name":"newOwner","nameLocation":"2116:8:38","nodeType":"VariableDeclaration","scope":9635,"src":"2108:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9614,"name":"address","nodeType":"ElementaryTypeName","src":"2108:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2107:18:38"},"returnParameters":{"id":9619,"nodeType":"ParameterList","parameters":[],"src":"2151:0:38"},"scope":9656,"src":"2081:198:38","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":9654,"nodeType":"Block","src":"2496:124:38","statements":[{"assignments":[9642],"declarations":[{"constant":false,"id":9642,"mutability":"mutable","name":"oldOwner","nameLocation":"2514:8:38","nodeType":"VariableDeclaration","scope":9654,"src":"2506:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9641,"name":"address","nodeType":"ElementaryTypeName","src":"2506:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9644,"initialValue":{"id":9643,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9551,"src":"2525:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2506:25:38"},{"expression":{"id":9647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9645,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9551,"src":"2541:6:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9646,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9638,"src":"2550:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2541:17:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9648,"nodeType":"ExpressionStatement","src":"2541:17:38"},{"eventCall":{"arguments":[{"id":9650,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9642,"src":"2594:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9651,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9638,"src":"2604:8:38","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9649,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9557,"src":"2573:20:38","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2573:40:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9653,"nodeType":"EmitStatement","src":"2568:45:38"}]},"documentation":{"id":9636,"nodeType":"StructuredDocumentation","src":"2285:143:38","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."},"id":9655,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"2442:18:38","nodeType":"FunctionDefinition","parameters":{"id":9639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9638,"mutability":"mutable","name":"newOwner","nameLocation":"2469:8:38","nodeType":"VariableDeclaration","scope":9655,"src":"2461:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9637,"name":"address","nodeType":"ElementaryTypeName","src":"2461:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2460:18:38"},"returnParameters":{"id":9640,"nodeType":"ParameterList","parameters":[],"src":"2496:0:38"},"scope":9656,"src":"2433:187:38","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":9657,"src":"654:1968:38","usedErrors":[]}],"src":"102:2521:38"},"id":38},"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL1.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL1.sol","exportedSymbols":{"ArbitrumL1_Bridge":[13540],"ArbitrumL1_Outbox":[13709],"InvalidCrossChainSender":[9778],"LibArbitrumL1":[9720],"NotCrossChainCall":[9772]},"id":9721,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9658,"literals":["solidity","^","0.8",".4"],"nodeType":"PragmaDirective","src":"121:23:39"},{"absolutePath":"@openzeppelin/contracts/vendor/arbitrum/IBridge.sol","file":"../../vendor/arbitrum/IBridge.sol","id":9660,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9721,"sourceUnit":13541,"src":"146:79:39","symbolAliases":[{"foreign":{"id":9659,"name":"IBridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13540,"src":"154:7:39","typeDescriptions":{}},"local":"ArbitrumL1_Bridge","nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/vendor/arbitrum/IOutbox.sol","file":"../../vendor/arbitrum/IOutbox.sol","id":9662,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9721,"sourceUnit":13710,"src":"226:79:39","symbolAliases":[{"foreign":{"id":9661,"name":"IOutbox","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13709,"src":"234:7:39","typeDescriptions":{}},"local":"ArbitrumL1_Outbox","nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/crosschain/errors.sol","file":"../errors.sol","id":9663,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9721,"sourceUnit":9779,"src":"306:23:39","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"LibArbitrumL1","contractDependencies":[],"contractKind":"library","documentation":{"id":9664,"nodeType":"StructuredDocumentation","src":"331:239:39","text":" @dev Primitives for cross-chain aware contracts for\n https://arbitrum.io/[Arbitrum].\n This version should only be used on L1 to process cross-chain messages\n originating from L2. For the other side, use {LibArbitrumL2}."},"fullyImplemented":true,"id":9720,"linearizedBaseContracts":[9720],"name":"LibArbitrumL1","nameLocation":"579:13:39","nodeType":"ContractDefinition","nodes":[{"body":{"id":9677,"nodeType":"Block","src":"807:44:39","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":9672,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"824:3:39","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":9673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"828:6:39","memberName":"sender","nodeType":"MemberAccess","src":"824:10:39","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":9674,"name":"bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9667,"src":"838:6:39","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"824:20:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9671,"id":9676,"nodeType":"Return","src":"817:27:39"}]},"documentation":{"id":9665,"nodeType":"StructuredDocumentation","src":"599:136:39","text":" @dev Returns whether the current function call is the result of a\n cross-chain message relayed by the `bridge`."},"id":9678,"implemented":true,"kind":"function","modifiers":[],"name":"isCrossChain","nameLocation":"749:12:39","nodeType":"FunctionDefinition","parameters":{"id":9668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9667,"mutability":"mutable","name":"bridge","nameLocation":"770:6:39","nodeType":"VariableDeclaration","scope":9678,"src":"762:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9666,"name":"address","nodeType":"ElementaryTypeName","src":"762:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"761:16:39"},"returnParameters":{"id":9671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9670,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9678,"src":"801:4:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9669,"name":"bool","nodeType":"ElementaryTypeName","src":"801:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"800:6:39"},"scope":9720,"src":"740:111:39","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":9718,"nodeType":"Block","src":"1289:284:39","statements":[{"condition":{"id":9689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1303:21:39","subExpression":{"arguments":[{"id":9687,"name":"bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9681,"src":"1317:6:39","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9686,"name":"isCrossChain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9678,"src":"1304:12:39","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":9688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1304:20:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9693,"nodeType":"IfStatement","src":"1299:53:39","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9690,"name":"NotCrossChainCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9772,"src":"1333:17:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":9691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1333:19:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9692,"nodeType":"RevertStatement","src":"1326:26:39"}},{"assignments":[9695],"declarations":[{"constant":false,"id":9695,"mutability":"mutable","name":"sender","nameLocation":"1371:6:39","nodeType":"VariableDeclaration","scope":9718,"src":"1363:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9694,"name":"address","nodeType":"ElementaryTypeName","src":"1363:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9705,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":9698,"name":"bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9681,"src":"1416:6:39","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9697,"name":"ArbitrumL1_Bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13540,"src":"1398:17:39","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBridge_$13540_$","typeString":"type(contract IBridge)"}},"id":9699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1398:25:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBridge_$13540","typeString":"contract IBridge"}},"id":9700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1424:12:39","memberName":"activeOutbox","nodeType":"MemberAccess","referencedDeclaration":13432,"src":"1398:38:39","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":9701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1398:40:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9696,"name":"ArbitrumL1_Outbox","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13709,"src":"1380:17:39","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IOutbox_$13709_$","typeString":"type(contract IOutbox)"}},"id":9702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1380:59:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IOutbox_$13709","typeString":"contract IOutbox"}},"id":9703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1440:12:39","memberName":"l2ToL1Sender","nodeType":"MemberAccess","referencedDeclaration":13602,"src":"1380:72:39","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":9704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1380:74:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1363:91:39"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9707,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9695,"src":"1472:6:39","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":9710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1490:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9709,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1482:7:39","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9708,"name":"address","nodeType":"ElementaryTypeName","src":"1482:7:39","typeDescriptions":{}}},"id":9711,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1482:10:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1472:20:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c6962417262697472756d4c313a2073797374656d206d6573736167657320776974686f75742073656e646572","id":9713,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1494:47:39","typeDescriptions":{"typeIdentifier":"t_stringliteral_d658411d0561b99f9fb199be39e8001e28574097edaed4471e2c7d7066c63b9a","typeString":"literal_string \"LibArbitrumL1: system messages without sender\""},"value":"LibArbitrumL1: system messages without sender"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d658411d0561b99f9fb199be39e8001e28574097edaed4471e2c7d7066c63b9a","typeString":"literal_string \"LibArbitrumL1: system messages without sender\""}],"id":9706,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1464:7:39","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":9714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1464:78:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9715,"nodeType":"ExpressionStatement","src":"1464:78:39"},{"expression":{"id":9716,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9695,"src":"1560:6:39","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9685,"id":9717,"nodeType":"Return","src":"1553:13:39"}]},"documentation":{"id":9679,"nodeType":"StructuredDocumentation","src":"857:353:39","text":" @dev Returns the address of the sender that triggered the current\n cross-chain message through the `bridge`.\n NOTE: {isCrossChain} should be checked before trying to recover the\n sender, as it will revert with `NotCrossChainCall` if the current\n function call is not the result of a cross-chain message."},"id":9719,"implemented":true,"kind":"function","modifiers":[],"name":"crossChainSender","nameLocation":"1224:16:39","nodeType":"FunctionDefinition","parameters":{"id":9682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9681,"mutability":"mutable","name":"bridge","nameLocation":"1249:6:39","nodeType":"VariableDeclaration","scope":9719,"src":"1241:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9680,"name":"address","nodeType":"ElementaryTypeName","src":"1241:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1240:16:39"},"returnParameters":{"id":9685,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9684,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9719,"src":"1280:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9683,"name":"address","nodeType":"ElementaryTypeName","src":"1280:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1279:9:39"},"scope":9720,"src":"1215:358:39","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":9721,"src":"571:1004:39","usedErrors":[]}],"src":"121:1455:39"},"id":39},"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL2.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL2.sol","exportedSymbols":{"ArbitrumL2_Bridge":[13341],"InvalidCrossChainSender":[9778],"LibArbitrumL2":[9768],"NotCrossChainCall":[9772]},"id":9769,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9722,"literals":["solidity","^","0.8",".4"],"nodeType":"PragmaDirective","src":"121:23:40"},{"absolutePath":"@openzeppelin/contracts/vendor/arbitrum/IArbSys.sol","file":"../../vendor/arbitrum/IArbSys.sol","id":9724,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9769,"sourceUnit":13342,"src":"146:79:40","symbolAliases":[{"foreign":{"id":9723,"name":"IArbSys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13341,"src":"154:7:40","typeDescriptions":{}},"local":"ArbitrumL2_Bridge","nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/crosschain/errors.sol","file":"../errors.sol","id":9725,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9769,"sourceUnit":9779,"src":"226:23:40","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"LibArbitrumL2","contractDependencies":[],"contractKind":"library","documentation":{"id":9726,"nodeType":"StructuredDocumentation","src":"251:501:40","text":" @dev Primitives for cross-chain aware contracts for\n https://arbitrum.io/[Arbitrum].\n This version should only be used on L2 to process cross-chain messages\n originating from L1. For the other side, use {LibArbitrumL1}.\n WARNING: There is currently a bug in Arbitrum that causes this contract to\n fail to detect cross-chain calls when deployed behind a proxy. This will be\n fixed when the network is upgraded to Arbitrum Nitro, currently scheduled for\n August 31st 2022."},"fullyImplemented":true,"id":9768,"linearizedBaseContracts":[9768],"name":"LibArbitrumL2","nameLocation":"761:13:40","nodeType":"ContractDefinition","nodes":[{"constant":true,"documentation":{"id":9727,"nodeType":"StructuredDocumentation","src":"781:132:40","text":" @dev Returns whether the current function call is the result of a\n cross-chain message relayed by `arbsys`."},"functionSelector":"bf0a12cf","id":9730,"mutability":"constant","name":"ARBSYS","nameLocation":"942:6:40","nodeType":"VariableDeclaration","scope":9768,"src":"918:75:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9728,"name":"address","nodeType":"ElementaryTypeName","src":"918:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030303634","id":9729,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"951:42:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x0000000000000000000000000000000000000064"},"visibility":"public"},{"body":{"id":9743,"nodeType":"Block","src":"1067:78:40","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":9738,"name":"arbsys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9732,"src":"1102:6:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9737,"name":"ArbitrumL2_Bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13341,"src":"1084:17:40","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IArbSys_$13341_$","typeString":"type(contract IArbSys)"}},"id":9739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1084:25:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IArbSys_$13341","typeString":"contract IArbSys"}},"id":9740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1110:26:40","memberName":"wasMyCallersAddressAliased","nodeType":"MemberAccess","referencedDeclaration":13252,"src":"1084:52:40","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bool_$","typeString":"function () view external returns (bool)"}},"id":9741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1084:54:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9736,"id":9742,"nodeType":"Return","src":"1077:61:40"}]},"id":9744,"implemented":true,"kind":"function","modifiers":[],"name":"isCrossChain","nameLocation":"1009:12:40","nodeType":"FunctionDefinition","parameters":{"id":9733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9732,"mutability":"mutable","name":"arbsys","nameLocation":"1030:6:40","nodeType":"VariableDeclaration","scope":9744,"src":"1022:14:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9731,"name":"address","nodeType":"ElementaryTypeName","src":"1022:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1021:16:40"},"returnParameters":{"id":9736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9735,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9744,"src":"1061:4:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9734,"name":"bool","nodeType":"ElementaryTypeName","src":"1061:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1060:6:40"},"scope":9768,"src":"1000:145:40","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":9766,"nodeType":"Block","src":"1579:147:40","statements":[{"condition":{"id":9755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1593:21:40","subExpression":{"arguments":[{"id":9753,"name":"arbsys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9747,"src":"1607:6:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9752,"name":"isCrossChain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9744,"src":"1594:12:40","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":9754,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1594:20:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9759,"nodeType":"IfStatement","src":"1589:53:40","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9756,"name":"NotCrossChainCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9772,"src":"1623:17:40","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":9757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1623:19:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9758,"nodeType":"RevertStatement","src":"1616:26:40"}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":9761,"name":"arbsys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9747,"src":"1678:6:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9760,"name":"ArbitrumL2_Bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13341,"src":"1660:17:40","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IArbSys_$13341_$","typeString":"type(contract IArbSys)"}},"id":9762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1660:25:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IArbSys_$13341","typeString":"contract IArbSys"}},"id":9763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1686:31:40","memberName":"myCallersAddressWithoutAliasing","nodeType":"MemberAccess","referencedDeclaration":13258,"src":"1660:57:40","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":9764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1660:59:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9751,"id":9765,"nodeType":"Return","src":"1653:66:40"}]},"documentation":{"id":9745,"nodeType":"StructuredDocumentation","src":"1151:349:40","text":" @dev Returns the address of the sender that triggered the current\n cross-chain message through `arbsys`.\n NOTE: {isCrossChain} should be checked before trying to recover the\n sender, as it will revert with `NotCrossChainCall` if the current\n function call is not the result of a cross-chain message."},"id":9767,"implemented":true,"kind":"function","modifiers":[],"name":"crossChainSender","nameLocation":"1514:16:40","nodeType":"FunctionDefinition","parameters":{"id":9748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9747,"mutability":"mutable","name":"arbsys","nameLocation":"1539:6:40","nodeType":"VariableDeclaration","scope":9767,"src":"1531:14:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9746,"name":"address","nodeType":"ElementaryTypeName","src":"1531:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1530:16:40"},"returnParameters":{"id":9751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9750,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9767,"src":"1570:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9749,"name":"address","nodeType":"ElementaryTypeName","src":"1570:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1569:9:40"},"scope":9768,"src":"1505:221:40","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":9769,"src":"753:975:40","usedErrors":[]}],"src":"121:1608:40"},"id":40},"@openzeppelin/contracts/crosschain/errors.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/crosschain/errors.sol","exportedSymbols":{"InvalidCrossChainSender":[9778],"NotCrossChainCall":[9772]},"id":9779,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9770,"literals":["solidity","^","0.8",".4"],"nodeType":"PragmaDirective","src":"105:23:41"},{"errorSelector":"4a74df92","id":9772,"name":"NotCrossChainCall","nameLocation":"136:17:41","nodeType":"ErrorDefinition","parameters":{"id":9771,"nodeType":"ParameterList","parameters":[],"src":"153:2:41"},"src":"130:26:41"},{"errorSelector":"ef25d32b","id":9778,"name":"InvalidCrossChainSender","nameLocation":"163:23:41","nodeType":"ErrorDefinition","parameters":{"id":9777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9774,"mutability":"mutable","name":"actual","nameLocation":"195:6:41","nodeType":"VariableDeclaration","scope":9778,"src":"187:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9773,"name":"address","nodeType":"ElementaryTypeName","src":"187:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9776,"mutability":"mutable","name":"expected","nameLocation":"211:8:41","nodeType":"VariableDeclaration","scope":9778,"src":"203:16:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9775,"name":"address","nodeType":"ElementaryTypeName","src":"203:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"186:34:41"},"src":"157:64:41"}],"src":"105:117:41"},"id":41},"@openzeppelin/contracts/interfaces/IERC20Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC20Metadata.sol","exportedSymbols":{"IERC20":[10812],"IERC20Metadata":[10837]},"id":9782,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9780,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"98:23:42"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"../token/ERC20/extensions/IERC20Metadata.sol","id":9781,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9782,"sourceUnit":10838,"src":"123:54:42","symbolAliases":[],"unitAlias":""}],"src":"98:80:42"},"id":42},"@openzeppelin/contracts/interfaces/draft-IERC1822.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC1822.sol","exportedSymbols":{"IERC1822Proxiable":[9791]},"id":9792,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9783,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"113:23:43"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1822Proxiable","contractDependencies":[],"contractKind":"interface","documentation":{"id":9784,"nodeType":"StructuredDocumentation","src":"138:203:43","text":" @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n proxy whose upgrades are fully controlled by the current implementation."},"fullyImplemented":false,"id":9791,"linearizedBaseContracts":[9791],"name":"IERC1822Proxiable","nameLocation":"352:17:43","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9785,"nodeType":"StructuredDocumentation","src":"376:438:43","text":" @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n address.\n IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n function revert if invoked through a proxy."},"functionSelector":"52d1902d","id":9790,"implemented":false,"kind":"function","modifiers":[],"name":"proxiableUUID","nameLocation":"828:13:43","nodeType":"FunctionDefinition","parameters":{"id":9786,"nodeType":"ParameterList","parameters":[],"src":"841:2:43"},"returnParameters":{"id":9789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9788,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9790,"src":"867:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9787,"name":"bytes32","nodeType":"ElementaryTypeName","src":"867:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"866:9:43"},"scope":9791,"src":"819:57:43","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":9792,"src":"342:536:43","usedErrors":[]}],"src":"113:766:43"},"id":43},"@openzeppelin/contracts/proxy/Clones.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/proxy/Clones.sol","exportedSymbols":{"Clones":[9871]},"id":9872,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9793,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"100:23:44"},{"abstract":false,"baseContracts":[],"canonicalName":"Clones","contractDependencies":[],"contractKind":"library","documentation":{"id":9794,"nodeType":"StructuredDocumentation","src":"125:629:44","text":" @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n deploying minimal proxy contracts, also known as \"clones\".\n > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n deterministic method.\n _Available since v3.4._"},"fullyImplemented":true,"id":9871,"linearizedBaseContracts":[9871],"name":"Clones","nameLocation":"763:6:44","nodeType":"ContractDefinition","nodes":[{"body":{"id":9813,"nodeType":"Block","src":"1048:684:44","statements":[{"AST":{"nodeType":"YulBlock","src":"1110:549:44","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1315:4:44","type":"","value":"0x00"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1328:4:44","type":"","value":"0xe8"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1338:4:44","type":"","value":"0x60"},{"name":"implementation","nodeType":"YulIdentifier","src":"1344:14:44"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1334:3:44"},"nodeType":"YulFunctionCall","src":"1334:25:44"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1324:3:44"},"nodeType":"YulFunctionCall","src":"1324:36:44"},{"kind":"number","nodeType":"YulLiteral","src":"1362:48:44","type":"","value":"0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1321:2:44"},"nodeType":"YulFunctionCall","src":"1321:90:44"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1308:6:44"},"nodeType":"YulFunctionCall","src":"1308:104:44"},"nodeType":"YulExpressionStatement","src":"1308:104:44"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1533:4:44","type":"","value":"0x20"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1546:4:44","type":"","value":"0x78"},{"name":"implementation","nodeType":"YulIdentifier","src":"1552:14:44"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1542:3:44"},"nodeType":"YulFunctionCall","src":"1542:25:44"},{"kind":"number","nodeType":"YulLiteral","src":"1569:32:44","type":"","value":"0x5af43d82803e903d91602b57fd5bf3"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1539:2:44"},"nodeType":"YulFunctionCall","src":"1539:63:44"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1526:6:44"},"nodeType":"YulFunctionCall","src":"1526:77:44"},"nodeType":"YulExpressionStatement","src":"1526:77:44"},{"nodeType":"YulAssignment","src":"1616:33:44","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1635:1:44","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1638:4:44","type":"","value":"0x09"},{"kind":"number","nodeType":"YulLiteral","src":"1644:4:44","type":"","value":"0x37"}],"functionName":{"name":"create","nodeType":"YulIdentifier","src":"1628:6:44"},"nodeType":"YulFunctionCall","src":"1628:21:44"},"variableNames":[{"name":"instance","nodeType":"YulIdentifier","src":"1616:8:44"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"london","externalReferences":[{"declaration":9797,"isOffset":false,"isSlot":false,"src":"1344:14:44","valueSize":1},{"declaration":9797,"isOffset":false,"isSlot":false,"src":"1552:14:44","valueSize":1},{"declaration":9800,"isOffset":false,"isSlot":false,"src":"1616:8:44","valueSize":1}],"id":9802,"nodeType":"InlineAssembly","src":"1101:558:44"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9804,"name":"instance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9800,"src":"1676:8:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":9807,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1696:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9806,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1688:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9805,"name":"address","nodeType":"ElementaryTypeName","src":"1688:7:44","typeDescriptions":{}}},"id":9808,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1688:10:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1676:22:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313136373a20637265617465206661696c6564","id":9810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1700:24:44","typeDescriptions":{"typeIdentifier":"t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335","typeString":"literal_string \"ERC1167: create failed\""},"value":"ERC1167: create failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335","typeString":"literal_string \"ERC1167: create failed\""}],"id":9803,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1668:7:44","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":9811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1668:57:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9812,"nodeType":"ExpressionStatement","src":"1668:57:44"}]},"documentation":{"id":9795,"nodeType":"StructuredDocumentation","src":"776:192:44","text":" @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n This function uses the create opcode, which should never revert."},"id":9814,"implemented":true,"kind":"function","modifiers":[],"name":"clone","nameLocation":"982:5:44","nodeType":"FunctionDefinition","parameters":{"id":9798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9797,"mutability":"mutable","name":"implementation","nameLocation":"996:14:44","nodeType":"VariableDeclaration","scope":9814,"src":"988:22:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9796,"name":"address","nodeType":"ElementaryTypeName","src":"988:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"987:24:44"},"returnParameters":{"id":9801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9800,"mutability":"mutable","name":"instance","nameLocation":"1038:8:44","nodeType":"VariableDeclaration","scope":9814,"src":"1030:16:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9799,"name":"address","nodeType":"ElementaryTypeName","src":"1030:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1029:18:44"},"scope":9871,"src":"973:759:44","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9835,"nodeType":"Block","src":"2209:692:44","statements":[{"AST":{"nodeType":"YulBlock","src":"2271:556:44","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2476:4:44","type":"","value":"0x00"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2489:4:44","type":"","value":"0xe8"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2499:4:44","type":"","value":"0x60"},{"name":"implementation","nodeType":"YulIdentifier","src":"2505:14:44"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2495:3:44"},"nodeType":"YulFunctionCall","src":"2495:25:44"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2485:3:44"},"nodeType":"YulFunctionCall","src":"2485:36:44"},{"kind":"number","nodeType":"YulLiteral","src":"2523:48:44","type":"","value":"0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2482:2:44"},"nodeType":"YulFunctionCall","src":"2482:90:44"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2469:6:44"},"nodeType":"YulFunctionCall","src":"2469:104:44"},"nodeType":"YulExpressionStatement","src":"2469:104:44"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2694:4:44","type":"","value":"0x20"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2707:4:44","type":"","value":"0x78"},{"name":"implementation","nodeType":"YulIdentifier","src":"2713:14:44"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2703:3:44"},"nodeType":"YulFunctionCall","src":"2703:25:44"},{"kind":"number","nodeType":"YulLiteral","src":"2730:32:44","type":"","value":"0x5af43d82803e903d91602b57fd5bf3"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2700:2:44"},"nodeType":"YulFunctionCall","src":"2700:63:44"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2687:6:44"},"nodeType":"YulFunctionCall","src":"2687:77:44"},"nodeType":"YulExpressionStatement","src":"2687:77:44"},{"nodeType":"YulAssignment","src":"2777:40:44","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2797:1:44","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2800:4:44","type":"","value":"0x09"},{"kind":"number","nodeType":"YulLiteral","src":"2806:4:44","type":"","value":"0x37"},{"name":"salt","nodeType":"YulIdentifier","src":"2812:4:44"}],"functionName":{"name":"create2","nodeType":"YulIdentifier","src":"2789:7:44"},"nodeType":"YulFunctionCall","src":"2789:28:44"},"variableNames":[{"name":"instance","nodeType":"YulIdentifier","src":"2777:8:44"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"london","externalReferences":[{"declaration":9817,"isOffset":false,"isSlot":false,"src":"2505:14:44","valueSize":1},{"declaration":9817,"isOffset":false,"isSlot":false,"src":"2713:14:44","valueSize":1},{"declaration":9822,"isOffset":false,"isSlot":false,"src":"2777:8:44","valueSize":1},{"declaration":9819,"isOffset":false,"isSlot":false,"src":"2812:4:44","valueSize":1}],"id":9824,"nodeType":"InlineAssembly","src":"2262:565:44"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9826,"name":"instance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9822,"src":"2844:8:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":9829,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2864:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9828,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2856:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9827,"name":"address","nodeType":"ElementaryTypeName","src":"2856:7:44","typeDescriptions":{}}},"id":9830,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2856:10:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2844:22:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313136373a2063726561746532206661696c6564","id":9832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2868:25:44","typeDescriptions":{"typeIdentifier":"t_stringliteral_4ec050e530ce66e7658278ab7a4e4a2f19225159c48fc52eb249bd268e755d73","typeString":"literal_string \"ERC1167: create2 failed\""},"value":"ERC1167: create2 failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4ec050e530ce66e7658278ab7a4e4a2f19225159c48fc52eb249bd268e755d73","typeString":"literal_string \"ERC1167: create2 failed\""}],"id":9825,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2836:7:44","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":9833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2836:58:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9834,"nodeType":"ExpressionStatement","src":"2836:58:44"}]},"documentation":{"id":9815,"nodeType":"StructuredDocumentation","src":"1738:364:44","text":" @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n This function uses the create2 opcode and a `salt` to deterministically deploy\n the clone. Using the same `implementation` and `salt` multiple time will revert, since\n the clones cannot be deployed twice at the same address."},"id":9836,"implemented":true,"kind":"function","modifiers":[],"name":"cloneDeterministic","nameLocation":"2116:18:44","nodeType":"FunctionDefinition","parameters":{"id":9820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9817,"mutability":"mutable","name":"implementation","nameLocation":"2143:14:44","nodeType":"VariableDeclaration","scope":9836,"src":"2135:22:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9816,"name":"address","nodeType":"ElementaryTypeName","src":"2135:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9819,"mutability":"mutable","name":"salt","nameLocation":"2167:4:44","nodeType":"VariableDeclaration","scope":9836,"src":"2159:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9818,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2159:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2134:38:44"},"returnParameters":{"id":9823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9822,"mutability":"mutable","name":"instance","nameLocation":"2199:8:44","nodeType":"VariableDeclaration","scope":9836,"src":"2191:16:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9821,"name":"address","nodeType":"ElementaryTypeName","src":"2191:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2190:18:44"},"scope":9871,"src":"2107:794:44","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9849,"nodeType":"Block","src":"3176:515:44","statements":[{"AST":{"nodeType":"YulBlock","src":"3238:447:44","statements":[{"nodeType":"YulVariableDeclaration","src":"3252:22:44","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3269:4:44","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3263:5:44"},"nodeType":"YulFunctionCall","src":"3263:11:44"},"variables":[{"name":"ptr","nodeType":"YulTypedName","src":"3256:3:44","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"3298:3:44"},{"kind":"number","nodeType":"YulLiteral","src":"3303:4:44","type":"","value":"0x38"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3294:3:44"},"nodeType":"YulFunctionCall","src":"3294:14:44"},{"name":"deployer","nodeType":"YulIdentifier","src":"3310:8:44"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3287:6:44"},"nodeType":"YulFunctionCall","src":"3287:32:44"},"nodeType":"YulExpressionStatement","src":"3287:32:44"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"3343:3:44"},{"kind":"number","nodeType":"YulLiteral","src":"3348:4:44","type":"","value":"0x24"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3339:3:44"},"nodeType":"YulFunctionCall","src":"3339:14:44"},{"kind":"number","nodeType":"YulLiteral","src":"3355:34:44","type":"","value":"0x5af43d82803e903d91602b57fd5bf3ff"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3332:6:44"},"nodeType":"YulFunctionCall","src":"3332:58:44"},"nodeType":"YulExpressionStatement","src":"3332:58:44"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"3414:3:44"},{"kind":"number","nodeType":"YulLiteral","src":"3419:4:44","type":"","value":"0x14"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3410:3:44"},"nodeType":"YulFunctionCall","src":"3410:14:44"},{"name":"implementation","nodeType":"YulIdentifier","src":"3426:14:44"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3403:6:44"},"nodeType":"YulFunctionCall","src":"3403:38:44"},"nodeType":"YulExpressionStatement","src":"3403:38:44"},{"expression":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"3461:3:44"},{"kind":"number","nodeType":"YulLiteral","src":"3466:42:44","type":"","value":"0x3d602d80600a3d3981f3363d3d373d3d3d363d73"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3454:6:44"},"nodeType":"YulFunctionCall","src":"3454:55:44"},"nodeType":"YulExpressionStatement","src":"3454:55:44"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"3533:3:44"},{"kind":"number","nodeType":"YulLiteral","src":"3538:4:44","type":"","value":"0x58"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3529:3:44"},"nodeType":"YulFunctionCall","src":"3529:14:44"},{"name":"salt","nodeType":"YulIdentifier","src":"3545:4:44"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3522:6:44"},"nodeType":"YulFunctionCall","src":"3522:28:44"},"nodeType":"YulExpressionStatement","src":"3522:28:44"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"3574:3:44"},{"kind":"number","nodeType":"YulLiteral","src":"3579:4:44","type":"","value":"0x78"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3570:3:44"},"nodeType":"YulFunctionCall","src":"3570:14:44"},{"arguments":[{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"3600:3:44"},{"kind":"number","nodeType":"YulLiteral","src":"3605:4:44","type":"","value":"0x0c"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3596:3:44"},"nodeType":"YulFunctionCall","src":"3596:14:44"},{"kind":"number","nodeType":"YulLiteral","src":"3612:4:44","type":"","value":"0x37"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"3586:9:44"},"nodeType":"YulFunctionCall","src":"3586:31:44"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3563:6:44"},"nodeType":"YulFunctionCall","src":"3563:55:44"},"nodeType":"YulExpressionStatement","src":"3563:55:44"},{"nodeType":"YulAssignment","src":"3631:44:44","value":{"arguments":[{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"3658:3:44"},{"kind":"number","nodeType":"YulLiteral","src":"3663:4:44","type":"","value":"0x43"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3654:3:44"},"nodeType":"YulFunctionCall","src":"3654:14:44"},{"kind":"number","nodeType":"YulLiteral","src":"3670:4:44","type":"","value":"0x55"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"3644:9:44"},"nodeType":"YulFunctionCall","src":"3644:31:44"},"variableNames":[{"name":"predicted","nodeType":"YulIdentifier","src":"3631:9:44"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"london","externalReferences":[{"declaration":9843,"isOffset":false,"isSlot":false,"src":"3310:8:44","valueSize":1},{"declaration":9839,"isOffset":false,"isSlot":false,"src":"3426:14:44","valueSize":1},{"declaration":9846,"isOffset":false,"isSlot":false,"src":"3631:9:44","valueSize":1},{"declaration":9841,"isOffset":false,"isSlot":false,"src":"3545:4:44","valueSize":1}],"id":9848,"nodeType":"InlineAssembly","src":"3229:456:44"}]},"documentation":{"id":9837,"nodeType":"StructuredDocumentation","src":"2907:99:44","text":" @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}."},"id":9850,"implemented":true,"kind":"function","modifiers":[],"name":"predictDeterministicAddress","nameLocation":"3020:27:44","nodeType":"FunctionDefinition","parameters":{"id":9844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9839,"mutability":"mutable","name":"implementation","nameLocation":"3065:14:44","nodeType":"VariableDeclaration","scope":9850,"src":"3057:22:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9838,"name":"address","nodeType":"ElementaryTypeName","src":"3057:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9841,"mutability":"mutable","name":"salt","nameLocation":"3097:4:44","nodeType":"VariableDeclaration","scope":9850,"src":"3089:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9840,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3089:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9843,"mutability":"mutable","name":"deployer","nameLocation":"3119:8:44","nodeType":"VariableDeclaration","scope":9850,"src":"3111:16:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9842,"name":"address","nodeType":"ElementaryTypeName","src":"3111:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3047:86:44"},"returnParameters":{"id":9847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9846,"mutability":"mutable","name":"predicted","nameLocation":"3165:9:44","nodeType":"VariableDeclaration","scope":9850,"src":"3157:17:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9845,"name":"address","nodeType":"ElementaryTypeName","src":"3157:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3156:19:44"},"scope":9871,"src":"3011:680:44","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9869,"nodeType":"Block","src":"3946:88:44","statements":[{"expression":{"arguments":[{"id":9861,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9853,"src":"3991:14:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9862,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9855,"src":"4007:4:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9865,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4021:4:44","typeDescriptions":{"typeIdentifier":"t_contract$_Clones_$9871","typeString":"library Clones"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Clones_$9871","typeString":"library Clones"}],"id":9864,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4013:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9863,"name":"address","nodeType":"ElementaryTypeName","src":"4013:7:44","typeDescriptions":{}}},"id":9866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4013:13:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9860,"name":"predictDeterministicAddress","nodeType":"Identifier","overloadedDeclarations":[9850,9870],"referencedDeclaration":9850,"src":"3963:27:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_bytes32_$_t_address_$returns$_t_address_$","typeString":"function (address,bytes32,address) pure returns (address)"}},"id":9867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3963:64:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9859,"id":9868,"nodeType":"Return","src":"3956:71:44"}]},"documentation":{"id":9851,"nodeType":"StructuredDocumentation","src":"3697:99:44","text":" @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}."},"id":9870,"implemented":true,"kind":"function","modifiers":[],"name":"predictDeterministicAddress","nameLocation":"3810:27:44","nodeType":"FunctionDefinition","parameters":{"id":9856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9853,"mutability":"mutable","name":"implementation","nameLocation":"3846:14:44","nodeType":"VariableDeclaration","scope":9870,"src":"3838:22:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9852,"name":"address","nodeType":"ElementaryTypeName","src":"3838:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9855,"mutability":"mutable","name":"salt","nameLocation":"3870:4:44","nodeType":"VariableDeclaration","scope":9870,"src":"3862:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9854,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3862:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3837:38:44"},"returnParameters":{"id":9859,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9858,"mutability":"mutable","name":"predicted","nameLocation":"3931:9:44","nodeType":"VariableDeclaration","scope":9870,"src":"3923:17:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9857,"name":"address","nodeType":"ElementaryTypeName","src":"3923:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3922:19:44"},"scope":9871,"src":"3801:233:44","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":9872,"src":"755:3281:44","usedErrors":[]}],"src":"100:3937:44"},"id":44},"@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol","exportedSymbols":{"Address":[11484],"ERC1967Proxy":[9908],"ERC1967Upgrade":[10226],"IBeacon":[10288],"IERC1822Proxiable":[9791],"Proxy":[10278],"StorageSlot":[11640]},"id":9909,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9873,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"114:23:45"},{"absolutePath":"@openzeppelin/contracts/proxy/Proxy.sol","file":"../Proxy.sol","id":9874,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9909,"sourceUnit":10279,"src":"139:22:45","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol","file":"./ERC1967Upgrade.sol","id":9875,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9909,"sourceUnit":10227,"src":"162:30:45","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9877,"name":"Proxy","nameLocations":["592:5:45"],"nodeType":"IdentifierPath","referencedDeclaration":10278,"src":"592:5:45"},"id":9878,"nodeType":"InheritanceSpecifier","src":"592:5:45"},{"baseName":{"id":9879,"name":"ERC1967Upgrade","nameLocations":["599:14:45"],"nodeType":"IdentifierPath","referencedDeclaration":10226,"src":"599:14:45"},"id":9880,"nodeType":"InheritanceSpecifier","src":"599:14:45"}],"canonicalName":"ERC1967Proxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":9876,"nodeType":"StructuredDocumentation","src":"194:372:45","text":" @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n implementation address that can be changed. This address is stored in storage in the location specified by\n https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n implementation behind the proxy."},"fullyImplemented":true,"id":9908,"linearizedBaseContracts":[9908,10226,10278],"name":"ERC1967Proxy","nameLocation":"576:12:45","nodeType":"ContractDefinition","nodes":[{"body":{"id":9894,"nodeType":"Block","src":"1014:56:45","statements":[{"expression":{"arguments":[{"id":9889,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9883,"src":"1042:6:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9890,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9885,"src":"1050:5:45","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"66616c7365","id":9891,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1057:5:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":9888,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10009,"src":"1024:17:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":9892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1024:39:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9893,"nodeType":"ExpressionStatement","src":"1024:39:45"}]},"documentation":{"id":9881,"nodeType":"StructuredDocumentation","src":"620:333:45","text":" @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n function call, and allows initializing the storage of the proxy like a Solidity constructor."},"id":9895,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9886,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9883,"mutability":"mutable","name":"_logic","nameLocation":"978:6:45","nodeType":"VariableDeclaration","scope":9895,"src":"970:14:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9882,"name":"address","nodeType":"ElementaryTypeName","src":"970:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9885,"mutability":"mutable","name":"_data","nameLocation":"999:5:45","nodeType":"VariableDeclaration","scope":9895,"src":"986:18:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9884,"name":"bytes","nodeType":"ElementaryTypeName","src":"986:5:45","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"969:36:45"},"returnParameters":{"id":9887,"nodeType":"ParameterList","parameters":[],"src":"1014:0:45"},"scope":9908,"src":"958:112:45","stateMutability":"payable","virtual":false,"visibility":"public"},{"baseFunctions":[10243],"body":{"id":9906,"nodeType":"Block","src":"1229:59:45","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9902,"name":"ERC1967Upgrade","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10226,"src":"1246:14:45","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Upgrade_$10226_$","typeString":"type(contract ERC1967Upgrade)"}},"id":9903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1261:18:45","memberName":"_getImplementation","nodeType":"MemberAccess","referencedDeclaration":9940,"src":"1246:33:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1246:35:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9901,"id":9905,"nodeType":"Return","src":"1239:42:45"}]},"documentation":{"id":9896,"nodeType":"StructuredDocumentation","src":"1076:67:45","text":" @dev Returns the current implementation address."},"id":9907,"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"1157:15:45","nodeType":"FunctionDefinition","overrides":{"id":9898,"nodeType":"OverrideSpecifier","overrides":[],"src":"1197:8:45"},"parameters":{"id":9897,"nodeType":"ParameterList","parameters":[],"src":"1172:2:45"},"returnParameters":{"id":9901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9900,"mutability":"mutable","name":"impl","nameLocation":"1223:4:45","nodeType":"VariableDeclaration","scope":9907,"src":"1215:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9899,"name":"address","nodeType":"ElementaryTypeName","src":"1215:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1214:14:45"},"scope":9908,"src":"1148:140:45","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":9909,"src":"567:723:45","usedErrors":[]}],"src":"114:1177:45"},"id":45},"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol","exportedSymbols":{"Address":[11484],"ERC1967Upgrade":[10226],"IBeacon":[10288],"IERC1822Proxiable":[9791],"StorageSlot":[11640]},"id":10227,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9910,"literals":["solidity","^","0.8",".2"],"nodeType":"PragmaDirective","src":"116:23:46"},{"absolutePath":"@openzeppelin/contracts/proxy/beacon/IBeacon.sol","file":"../beacon/IBeacon.sol","id":9911,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10227,"sourceUnit":10289,"src":"141:31:46","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC1822.sol","file":"../../interfaces/draft-IERC1822.sol","id":9912,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10227,"sourceUnit":9792,"src":"173:45:46","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"../../utils/Address.sol","id":9913,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10227,"sourceUnit":11485,"src":"219:33:46","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","file":"../../utils/StorageSlot.sol","id":9914,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10227,"sourceUnit":11641,"src":"253:37:46","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"ERC1967Upgrade","contractDependencies":[],"contractKind":"contract","documentation":{"id":9915,"nodeType":"StructuredDocumentation","src":"292:236:46","text":" @dev This abstract contract provides getters and event emitting update functions for\n https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n _Available since v4.1._\n @custom:oz-upgrades-unsafe-allow delegatecall"},"fullyImplemented":true,"id":10226,"linearizedBaseContracts":[10226],"name":"ERC1967Upgrade","nameLocation":"547:14:46","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":9918,"mutability":"constant","name":"_ROLLBACK_SLOT","nameLocation":"672:14:46","nodeType":"VariableDeclaration","scope":10226,"src":"647:108:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9916,"name":"bytes32","nodeType":"ElementaryTypeName","src":"647:7:46","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307834393130666466613136666564333236306564306537313437663763633664613131613630323038623562393430366431326136333536313466666439313433","id":9917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"689:66:46","typeDescriptions":{"typeIdentifier":"t_rational_33048860383849004559742813297059419343339852917517107368639918720169455489347_by_1","typeString":"int_const 3304...(69 digits omitted)...9347"},"value":"0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143"},"visibility":"private"},{"constant":true,"documentation":{"id":9919,"nodeType":"StructuredDocumentation","src":"762:214:46","text":" @dev Storage slot with the address of the current implementation.\n This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n validated in the constructor."},"id":9922,"mutability":"constant","name":"_IMPLEMENTATION_SLOT","nameLocation":"1007:20:46","nodeType":"VariableDeclaration","scope":10226,"src":"981:115:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9920,"name":"bytes32","nodeType":"ElementaryTypeName","src":"981:7:46","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307833363038393461313362613161333231303636376338323834393264623938646361336532303736636333373335613932306133636135303564333832626263","id":9921,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1030:66:46","typeDescriptions":{"typeIdentifier":"t_rational_24440054405305269366569402256811496959409073762505157381672968839269610695612_by_1","typeString":"int_const 2444...(69 digits omitted)...5612"},"value":"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"},"visibility":"internal"},{"anonymous":false,"documentation":{"id":9923,"nodeType":"StructuredDocumentation","src":"1103:68:46","text":" @dev Emitted when the implementation is upgraded."},"eventSelector":"bc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","id":9927,"name":"Upgraded","nameLocation":"1182:8:46","nodeType":"EventDefinition","parameters":{"id":9926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9925,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"1207:14:46","nodeType":"VariableDeclaration","scope":9927,"src":"1191:30:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9924,"name":"address","nodeType":"ElementaryTypeName","src":"1191:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1190:32:46"},"src":"1176:47:46"},{"body":{"id":9939,"nodeType":"Block","src":"1363:78:46","statements":[{"expression":{"expression":{"arguments":[{"id":9935,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9922,"src":"1407:20:46","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":9933,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11640,"src":"1380:11:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$11640_$","typeString":"type(library StorageSlot)"}},"id":9934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1392:14:46","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":11606,"src":"1380:26:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$11586_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":9936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1380:48:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$11586_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":9937,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1429:5:46","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":11585,"src":"1380:54:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9932,"id":9938,"nodeType":"Return","src":"1373:61:46"}]},"documentation":{"id":9928,"nodeType":"StructuredDocumentation","src":"1229:67:46","text":" @dev Returns the current implementation address."},"id":9940,"implemented":true,"kind":"function","modifiers":[],"name":"_getImplementation","nameLocation":"1310:18:46","nodeType":"FunctionDefinition","parameters":{"id":9929,"nodeType":"ParameterList","parameters":[],"src":"1328:2:46"},"returnParameters":{"id":9932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9931,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9940,"src":"1354:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9930,"name":"address","nodeType":"ElementaryTypeName","src":"1354:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1353:9:46"},"scope":10226,"src":"1301:140:46","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":9963,"nodeType":"Block","src":"1595:196:46","statements":[{"expression":{"arguments":[{"arguments":[{"id":9949,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9943,"src":"1632:17:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9947,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"1613:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11484_$","typeString":"type(library Address)"}},"id":9948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1621:10:46","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":11172,"src":"1613:18:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":9950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1613:37:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374","id":9951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1652:47:46","typeDescriptions":{"typeIdentifier":"t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","typeString":"literal_string \"ERC1967: new implementation is not a contract\""},"value":"ERC1967: new implementation is not a contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","typeString":"literal_string \"ERC1967: new implementation is not a contract\""}],"id":9946,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1605:7:46","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":9952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1605:95:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9953,"nodeType":"ExpressionStatement","src":"1605:95:46"},{"expression":{"id":9961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":9957,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9922,"src":"1737:20:46","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":9954,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11640,"src":"1710:11:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$11640_$","typeString":"type(library StorageSlot)"}},"id":9956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1722:14:46","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":11606,"src":"1710:26:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$11586_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":9958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1710:48:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$11586_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":9959,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1759:5:46","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":11585,"src":"1710:54:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9960,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9943,"src":"1767:17:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1710:74:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9962,"nodeType":"ExpressionStatement","src":"1710:74:46"}]},"documentation":{"id":9941,"nodeType":"StructuredDocumentation","src":"1447:80:46","text":" @dev Stores a new address in the EIP1967 implementation slot."},"id":9964,"implemented":true,"kind":"function","modifiers":[],"name":"_setImplementation","nameLocation":"1541:18:46","nodeType":"FunctionDefinition","parameters":{"id":9944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9943,"mutability":"mutable","name":"newImplementation","nameLocation":"1568:17:46","nodeType":"VariableDeclaration","scope":9964,"src":"1560:25:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9942,"name":"address","nodeType":"ElementaryTypeName","src":"1560:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1559:27:46"},"returnParameters":{"id":9945,"nodeType":"ParameterList","parameters":[],"src":"1595:0:46"},"scope":10226,"src":"1532:259:46","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":9978,"nodeType":"Block","src":"1953:96:46","statements":[{"expression":{"arguments":[{"id":9971,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9967,"src":"1982:17:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9970,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9964,"src":"1963:18:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1963:37:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9973,"nodeType":"ExpressionStatement","src":"1963:37:46"},{"eventCall":{"arguments":[{"id":9975,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9967,"src":"2024:17:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9974,"name":"Upgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9927,"src":"2015:8:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2015:27:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9977,"nodeType":"EmitStatement","src":"2010:32:46"}]},"documentation":{"id":9965,"nodeType":"StructuredDocumentation","src":"1797:95:46","text":" @dev Perform implementation upgrade\n Emits an {Upgraded} event."},"id":9979,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeTo","nameLocation":"1906:10:46","nodeType":"FunctionDefinition","parameters":{"id":9968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9967,"mutability":"mutable","name":"newImplementation","nameLocation":"1925:17:46","nodeType":"VariableDeclaration","scope":9979,"src":"1917:25:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9966,"name":"address","nodeType":"ElementaryTypeName","src":"1917:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1916:27:46"},"returnParameters":{"id":9969,"nodeType":"ParameterList","parameters":[],"src":"1953:0:46"},"scope":10226,"src":"1897:152:46","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10008,"nodeType":"Block","src":"2311:167:46","statements":[{"expression":{"arguments":[{"id":9990,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9982,"src":"2332:17:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9989,"name":"_upgradeTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9979,"src":"2321:10:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2321:29:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9992,"nodeType":"ExpressionStatement","src":"2321:29:46"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":9993,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"2364:4:46","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":9994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2369:6:46","memberName":"length","nodeType":"MemberAccess","src":"2364:11:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2378:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2364:15:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":9997,"name":"forceCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9986,"src":"2383:9:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2364:28:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10007,"nodeType":"IfStatement","src":"2360:112:46","trueBody":{"id":10006,"nodeType":"Block","src":"2394:78:46","statements":[{"expression":{"arguments":[{"id":10002,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9982,"src":"2437:17:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10003,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"2456:4:46","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":9999,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"2408:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11484_$","typeString":"type(library Address)"}},"id":10001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2416:20:46","memberName":"functionDelegateCall","nodeType":"MemberAccess","referencedDeclaration":11371,"src":"2408:28:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":10004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2408:53:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10005,"nodeType":"ExpressionStatement","src":"2408:53:46"}]}}]},"documentation":{"id":9980,"nodeType":"StructuredDocumentation","src":"2055:123:46","text":" @dev Perform implementation upgrade with additional setup call.\n Emits an {Upgraded} event."},"id":10009,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeToAndCall","nameLocation":"2192:17:46","nodeType":"FunctionDefinition","parameters":{"id":9987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9982,"mutability":"mutable","name":"newImplementation","nameLocation":"2227:17:46","nodeType":"VariableDeclaration","scope":10009,"src":"2219:25:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9981,"name":"address","nodeType":"ElementaryTypeName","src":"2219:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9984,"mutability":"mutable","name":"data","nameLocation":"2267:4:46","nodeType":"VariableDeclaration","scope":10009,"src":"2254:17:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9983,"name":"bytes","nodeType":"ElementaryTypeName","src":"2254:5:46","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":9986,"mutability":"mutable","name":"forceCall","nameLocation":"2286:9:46","nodeType":"VariableDeclaration","scope":10009,"src":"2281:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9985,"name":"bool","nodeType":"ElementaryTypeName","src":"2281:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2209:92:46"},"returnParameters":{"id":9988,"nodeType":"ParameterList","parameters":[],"src":"2311:0:46"},"scope":10226,"src":"2183:295:46","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10061,"nodeType":"Block","src":"2782:820:46","statements":[{"condition":{"expression":{"arguments":[{"id":10021,"name":"_ROLLBACK_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9918,"src":"3123:14:46","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":10019,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11640,"src":"3096:11:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$11640_$","typeString":"type(library StorageSlot)"}},"id":10020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3108:14:46","memberName":"getBooleanSlot","nodeType":"MemberAccess","referencedDeclaration":11617,"src":"3096:26:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_BooleanSlot_$11589_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.BooleanSlot storage pointer)"}},"id":10022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3096:42:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$11589_storage_ptr","typeString":"struct StorageSlot.BooleanSlot storage pointer"}},"id":10023,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3139:5:46","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":11588,"src":"3096:48:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":10059,"nodeType":"Block","src":"3214:382:46","statements":[{"clauses":[{"block":{"id":10044,"nodeType":"Block","src":"3308:115:46","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":10040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10038,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10035,"src":"3334:4:46","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":10039,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9922,"src":"3342:20:46","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3334:28:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524331393637557067726164653a20756e737570706f727465642070726f786961626c6555554944","id":10041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3364:43:46","typeDescriptions":{"typeIdentifier":"t_stringliteral_76b6b6debfc5febf101145a79ecf0b0d2e89e397dfdab2bca99888370411152c","typeString":"literal_string \"ERC1967Upgrade: unsupported proxiableUUID\""},"value":"ERC1967Upgrade: unsupported proxiableUUID"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_76b6b6debfc5febf101145a79ecf0b0d2e89e397dfdab2bca99888370411152c","typeString":"literal_string \"ERC1967Upgrade: unsupported proxiableUUID\""}],"id":10037,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3326:7:46","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3326:82:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10043,"nodeType":"ExpressionStatement","src":"3326:82:46"}]},"errorName":"","id":10045,"nodeType":"TryCatchClause","parameters":{"id":10036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10035,"mutability":"mutable","name":"slot","nameLocation":"3302:4:46","nodeType":"VariableDeclaration","scope":10045,"src":"3294:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10034,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3294:7:46","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3293:14:46"},"src":"3285:138:46"},{"block":{"id":10050,"nodeType":"Block","src":"3430:89:46","statements":[{"expression":{"arguments":[{"hexValue":"45524331393637557067726164653a206e657720696d706c656d656e746174696f6e206973206e6f742055555053","id":10047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3455:48:46","typeDescriptions":{"typeIdentifier":"t_stringliteral_8e8e2fbcb586f700b5b14e2c4a650c8d83b9773c31c5fe8962070ea544e11f24","typeString":"literal_string \"ERC1967Upgrade: new implementation is not UUPS\""},"value":"ERC1967Upgrade: new implementation is not UUPS"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8e8e2fbcb586f700b5b14e2c4a650c8d83b9773c31c5fe8962070ea544e11f24","typeString":"literal_string \"ERC1967Upgrade: new implementation is not UUPS\""}],"id":10046,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"3448:6:46","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":10048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3448:56:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10049,"nodeType":"ExpressionStatement","src":"3448:56:46"}]},"errorName":"","id":10051,"nodeType":"TryCatchClause","src":"3424:95:46"}],"externalCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":10030,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10012,"src":"3250:17:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10029,"name":"IERC1822Proxiable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9791,"src":"3232:17:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC1822Proxiable_$9791_$","typeString":"type(contract IERC1822Proxiable)"}},"id":10031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3232:36:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC1822Proxiable_$9791","typeString":"contract IERC1822Proxiable"}},"id":10032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3269:13:46","memberName":"proxiableUUID","nodeType":"MemberAccess","referencedDeclaration":9790,"src":"3232:50:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":10033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3232:52:46","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":10052,"nodeType":"TryStatement","src":"3228:291:46"},{"expression":{"arguments":[{"id":10054,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10012,"src":"3550:17:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10055,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10014,"src":"3569:4:46","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":10056,"name":"forceCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10016,"src":"3575:9:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":10053,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10009,"src":"3532:17:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":10057,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3532:53:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10058,"nodeType":"ExpressionStatement","src":"3532:53:46"}]},"id":10060,"nodeType":"IfStatement","src":"3092:504:46","trueBody":{"id":10028,"nodeType":"Block","src":"3146:62:46","statements":[{"expression":{"arguments":[{"id":10025,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10012,"src":"3179:17:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10024,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9964,"src":"3160:18:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3160:37:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10027,"nodeType":"ExpressionStatement","src":"3160:37:46"}]}}]},"documentation":{"id":10010,"nodeType":"StructuredDocumentation","src":"2484:161:46","text":" @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n Emits an {Upgraded} event."},"id":10062,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeToAndCallUUPS","nameLocation":"2659:21:46","nodeType":"FunctionDefinition","parameters":{"id":10017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10012,"mutability":"mutable","name":"newImplementation","nameLocation":"2698:17:46","nodeType":"VariableDeclaration","scope":10062,"src":"2690:25:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10011,"name":"address","nodeType":"ElementaryTypeName","src":"2690:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10014,"mutability":"mutable","name":"data","nameLocation":"2738:4:46","nodeType":"VariableDeclaration","scope":10062,"src":"2725:17:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10013,"name":"bytes","nodeType":"ElementaryTypeName","src":"2725:5:46","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":10016,"mutability":"mutable","name":"forceCall","nameLocation":"2757:9:46","nodeType":"VariableDeclaration","scope":10062,"src":"2752:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10015,"name":"bool","nodeType":"ElementaryTypeName","src":"2752:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2680:92:46"},"returnParameters":{"id":10018,"nodeType":"ParameterList","parameters":[],"src":"2782:0:46"},"scope":10226,"src":"2650:952:46","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"constant":true,"documentation":{"id":10063,"nodeType":"StructuredDocumentation","src":"3608:189:46","text":" @dev Storage slot with the admin of the contract.\n This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n validated in the constructor."},"id":10066,"mutability":"constant","name":"_ADMIN_SLOT","nameLocation":"3828:11:46","nodeType":"VariableDeclaration","scope":10226,"src":"3802:106:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10064,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3802:7:46","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307862353331323736383461353638623331373361653133623966386136303136653234336536336236653865653131373864366137313738353062356436313033","id":10065,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3842:66:46","typeDescriptions":{"typeIdentifier":"t_rational_81955473079516046949633743016697847541294818689821282749996681496272635257091_by_1","typeString":"int_const 8195...(69 digits omitted)...7091"},"value":"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"},"visibility":"internal"},{"anonymous":false,"documentation":{"id":10067,"nodeType":"StructuredDocumentation","src":"3915:67:46","text":" @dev Emitted when the admin account has changed."},"eventSelector":"7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f","id":10073,"name":"AdminChanged","nameLocation":"3993:12:46","nodeType":"EventDefinition","parameters":{"id":10072,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10069,"indexed":false,"mutability":"mutable","name":"previousAdmin","nameLocation":"4014:13:46","nodeType":"VariableDeclaration","scope":10073,"src":"4006:21:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10068,"name":"address","nodeType":"ElementaryTypeName","src":"4006:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10071,"indexed":false,"mutability":"mutable","name":"newAdmin","nameLocation":"4037:8:46","nodeType":"VariableDeclaration","scope":10073,"src":"4029:16:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10070,"name":"address","nodeType":"ElementaryTypeName","src":"4029:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4005:41:46"},"src":"3987:60:46"},{"body":{"id":10085,"nodeType":"Block","src":"4161:69:46","statements":[{"expression":{"expression":{"arguments":[{"id":10081,"name":"_ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10066,"src":"4205:11:46","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":10079,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11640,"src":"4178:11:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$11640_$","typeString":"type(library StorageSlot)"}},"id":10080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4190:14:46","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":11606,"src":"4178:26:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$11586_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":10082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4178:39:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$11586_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":10083,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4218:5:46","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":11585,"src":"4178:45:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":10078,"id":10084,"nodeType":"Return","src":"4171:52:46"}]},"documentation":{"id":10074,"nodeType":"StructuredDocumentation","src":"4053:50:46","text":" @dev Returns the current admin."},"id":10086,"implemented":true,"kind":"function","modifiers":[],"name":"_getAdmin","nameLocation":"4117:9:46","nodeType":"FunctionDefinition","parameters":{"id":10075,"nodeType":"ParameterList","parameters":[],"src":"4126:2:46"},"returnParameters":{"id":10078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10077,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10086,"src":"4152:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10076,"name":"address","nodeType":"ElementaryTypeName","src":"4152:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4151:9:46"},"scope":10226,"src":"4108:122:46","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10111,"nodeType":"Block","src":"4357:156:46","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10093,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10089,"src":"4375:8:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":10096,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4395:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10095,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4387:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10094,"name":"address","nodeType":"ElementaryTypeName","src":"4387:7:46","typeDescriptions":{}}},"id":10097,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4387:10:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4375:22:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a206e65772061646d696e20697320746865207a65726f2061646472657373","id":10099,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4399:40:46","typeDescriptions":{"typeIdentifier":"t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5","typeString":"literal_string \"ERC1967: new admin is the zero address\""},"value":"ERC1967: new admin is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5","typeString":"literal_string \"ERC1967: new admin is the zero address\""}],"id":10092,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4367:7:46","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4367:73:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10101,"nodeType":"ExpressionStatement","src":"4367:73:46"},{"expression":{"id":10109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":10105,"name":"_ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10066,"src":"4477:11:46","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":10102,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11640,"src":"4450:11:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$11640_$","typeString":"type(library StorageSlot)"}},"id":10104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4462:14:46","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":11606,"src":"4450:26:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$11586_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":10106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4450:39:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$11586_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":10107,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4490:5:46","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":11585,"src":"4450:45:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10108,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10089,"src":"4498:8:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4450:56:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10110,"nodeType":"ExpressionStatement","src":"4450:56:46"}]},"documentation":{"id":10087,"nodeType":"StructuredDocumentation","src":"4236:71:46","text":" @dev Stores a new address in the EIP1967 admin slot."},"id":10112,"implemented":true,"kind":"function","modifiers":[],"name":"_setAdmin","nameLocation":"4321:9:46","nodeType":"FunctionDefinition","parameters":{"id":10090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10089,"mutability":"mutable","name":"newAdmin","nameLocation":"4339:8:46","nodeType":"VariableDeclaration","scope":10112,"src":"4331:16:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10088,"name":"address","nodeType":"ElementaryTypeName","src":"4331:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4330:18:46"},"returnParameters":{"id":10091,"nodeType":"ParameterList","parameters":[],"src":"4357:0:46"},"scope":10226,"src":"4312:201:46","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":10128,"nodeType":"Block","src":"4673:86:46","statements":[{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":10119,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10086,"src":"4701:9:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4701:11:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10121,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10115,"src":"4714:8:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":10118,"name":"AdminChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10073,"src":"4688:12:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":10122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4688:35:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10123,"nodeType":"EmitStatement","src":"4683:40:46"},{"expression":{"arguments":[{"id":10125,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10115,"src":"4743:8:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10124,"name":"_setAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10112,"src":"4733:9:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4733:19:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10127,"nodeType":"ExpressionStatement","src":"4733:19:46"}]},"documentation":{"id":10113,"nodeType":"StructuredDocumentation","src":"4519:100:46","text":" @dev Changes the admin of the proxy.\n Emits an {AdminChanged} event."},"id":10129,"implemented":true,"kind":"function","modifiers":[],"name":"_changeAdmin","nameLocation":"4633:12:46","nodeType":"FunctionDefinition","parameters":{"id":10116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10115,"mutability":"mutable","name":"newAdmin","nameLocation":"4654:8:46","nodeType":"VariableDeclaration","scope":10129,"src":"4646:16:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10114,"name":"address","nodeType":"ElementaryTypeName","src":"4646:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4645:18:46"},"returnParameters":{"id":10117,"nodeType":"ParameterList","parameters":[],"src":"4673:0:46"},"scope":10226,"src":"4624:135:46","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"constant":true,"documentation":{"id":10130,"nodeType":"StructuredDocumentation","src":"4765:232:46","text":" @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor."},"id":10133,"mutability":"constant","name":"_BEACON_SLOT","nameLocation":"5028:12:46","nodeType":"VariableDeclaration","scope":10226,"src":"5002:107:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10131,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5002:7:46","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307861336630616437346535343233616562666438306433656634333436353738333335613961373261656165653539666636636233353832623335313333643530","id":10132,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5043:66:46","typeDescriptions":{"typeIdentifier":"t_rational_74152234768234802001998023604048924213078445070507226371336425913862612794704_by_1","typeString":"int_const 7415...(69 digits omitted)...4704"},"value":"0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50"},"visibility":"internal"},{"anonymous":false,"documentation":{"id":10134,"nodeType":"StructuredDocumentation","src":"5116:60:46","text":" @dev Emitted when the beacon is upgraded."},"eventSelector":"1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e","id":10138,"name":"BeaconUpgraded","nameLocation":"5187:14:46","nodeType":"EventDefinition","parameters":{"id":10137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10136,"indexed":true,"mutability":"mutable","name":"beacon","nameLocation":"5218:6:46","nodeType":"VariableDeclaration","scope":10138,"src":"5202:22:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10135,"name":"address","nodeType":"ElementaryTypeName","src":"5202:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5201:24:46"},"src":"5181:45:46"},{"body":{"id":10150,"nodeType":"Block","src":"5342:70:46","statements":[{"expression":{"expression":{"arguments":[{"id":10146,"name":"_BEACON_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10133,"src":"5386:12:46","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":10144,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11640,"src":"5359:11:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$11640_$","typeString":"type(library StorageSlot)"}},"id":10145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5371:14:46","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":11606,"src":"5359:26:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$11586_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":10147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5359:40:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$11586_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":10148,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5400:5:46","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":11585,"src":"5359:46:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":10143,"id":10149,"nodeType":"Return","src":"5352:53:46"}]},"documentation":{"id":10139,"nodeType":"StructuredDocumentation","src":"5232:51:46","text":" @dev Returns the current beacon."},"id":10151,"implemented":true,"kind":"function","modifiers":[],"name":"_getBeacon","nameLocation":"5297:10:46","nodeType":"FunctionDefinition","parameters":{"id":10140,"nodeType":"ParameterList","parameters":[],"src":"5307:2:46"},"returnParameters":{"id":10143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10142,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10151,"src":"5333:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10141,"name":"address","nodeType":"ElementaryTypeName","src":"5333:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5332:9:46"},"scope":10226,"src":"5288:124:46","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10186,"nodeType":"Block","src":"5541:324:46","statements":[{"expression":{"arguments":[{"arguments":[{"id":10160,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10154,"src":"5578:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10158,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"5559:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11484_$","typeString":"type(library Address)"}},"id":10159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5567:10:46","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":11172,"src":"5559:18:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":10161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5559:29:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a206e657720626561636f6e206973206e6f74206120636f6e7472616374","id":10162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5590:39:46","typeDescriptions":{"typeIdentifier":"t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470","typeString":"literal_string \"ERC1967: new beacon is not a contract\""},"value":"ERC1967: new beacon is not a contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470","typeString":"literal_string \"ERC1967: new beacon is not a contract\""}],"id":10157,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5551:7:46","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5551:79:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10164,"nodeType":"ExpressionStatement","src":"5551:79:46"},{"expression":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":10169,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10154,"src":"5688:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10168,"name":"IBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10288,"src":"5680:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBeacon_$10288_$","typeString":"type(contract IBeacon)"}},"id":10170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5680:18:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBeacon_$10288","typeString":"contract IBeacon"}},"id":10171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5699:14:46","memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":10287,"src":"5680:33:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":10172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5680:35:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10166,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"5661:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11484_$","typeString":"type(library Address)"}},"id":10167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5669:10:46","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":11172,"src":"5661:18:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":10173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5661:55:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374","id":10174,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5730:50:46","typeDescriptions":{"typeIdentifier":"t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8","typeString":"literal_string \"ERC1967: beacon implementation is not a contract\""},"value":"ERC1967: beacon implementation is not a contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8","typeString":"literal_string \"ERC1967: beacon implementation is not a contract\""}],"id":10165,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5640:7:46","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5640:150:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10176,"nodeType":"ExpressionStatement","src":"5640:150:46"},{"expression":{"id":10184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":10180,"name":"_BEACON_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10133,"src":"5827:12:46","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":10177,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11640,"src":"5800:11:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$11640_$","typeString":"type(library StorageSlot)"}},"id":10179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5812:14:46","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":11606,"src":"5800:26:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$11586_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":10181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5800:40:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$11586_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":10182,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5841:5:46","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":11585,"src":"5800:46:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10183,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10154,"src":"5849:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5800:58:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10185,"nodeType":"ExpressionStatement","src":"5800:58:46"}]},"documentation":{"id":10152,"nodeType":"StructuredDocumentation","src":"5418:71:46","text":" @dev Stores a new beacon in the EIP1967 beacon slot."},"id":10187,"implemented":true,"kind":"function","modifiers":[],"name":"_setBeacon","nameLocation":"5503:10:46","nodeType":"FunctionDefinition","parameters":{"id":10155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10154,"mutability":"mutable","name":"newBeacon","nameLocation":"5522:9:46","nodeType":"VariableDeclaration","scope":10187,"src":"5514:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10153,"name":"address","nodeType":"ElementaryTypeName","src":"5514:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5513:19:46"},"returnParameters":{"id":10156,"nodeType":"ParameterList","parameters":[],"src":"5541:0:46"},"scope":10226,"src":"5494:371:46","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":10224,"nodeType":"Block","src":"6294:217:46","statements":[{"expression":{"arguments":[{"id":10198,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10190,"src":"6315:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10197,"name":"_setBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10187,"src":"6304:10:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6304:21:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10200,"nodeType":"ExpressionStatement","src":"6304:21:46"},{"eventCall":{"arguments":[{"id":10202,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10190,"src":"6355:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10201,"name":"BeaconUpgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10138,"src":"6340:14:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6340:25:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10204,"nodeType":"EmitStatement","src":"6335:30:46"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":10210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10205,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10192,"src":"6379:4:46","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6384:6:46","memberName":"length","nodeType":"MemberAccess","src":"6379:11:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":10207,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6393:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6379:15:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":10209,"name":"forceCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10194,"src":"6398:9:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6379:28:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10223,"nodeType":"IfStatement","src":"6375:130:46","trueBody":{"id":10222,"nodeType":"Block","src":"6409:96:46","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":10215,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10190,"src":"6460:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10214,"name":"IBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10288,"src":"6452:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBeacon_$10288_$","typeString":"type(contract IBeacon)"}},"id":10216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6452:18:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBeacon_$10288","typeString":"contract IBeacon"}},"id":10217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6471:14:46","memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":10287,"src":"6452:33:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":10218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6452:35:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10219,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10192,"src":"6489:4:46","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":10211,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"6423:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11484_$","typeString":"type(library Address)"}},"id":10213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6431:20:46","memberName":"functionDelegateCall","nodeType":"MemberAccess","referencedDeclaration":11371,"src":"6423:28:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":10220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6423:71:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10221,"nodeType":"ExpressionStatement","src":"6423:71:46"}]}}]},"documentation":{"id":10188,"nodeType":"StructuredDocumentation","src":"5871:292:46","text":" @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n Emits a {BeaconUpgraded} event."},"id":10225,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeBeaconToAndCall","nameLocation":"6177:23:46","nodeType":"FunctionDefinition","parameters":{"id":10195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10190,"mutability":"mutable","name":"newBeacon","nameLocation":"6218:9:46","nodeType":"VariableDeclaration","scope":10225,"src":"6210:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10189,"name":"address","nodeType":"ElementaryTypeName","src":"6210:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10192,"mutability":"mutable","name":"data","nameLocation":"6250:4:46","nodeType":"VariableDeclaration","scope":10225,"src":"6237:17:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10191,"name":"bytes","nodeType":"ElementaryTypeName","src":"6237:5:46","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":10194,"mutability":"mutable","name":"forceCall","nameLocation":"6269:9:46","nodeType":"VariableDeclaration","scope":10225,"src":"6264:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10193,"name":"bool","nodeType":"ElementaryTypeName","src":"6264:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6200:84:46"},"returnParameters":{"id":10196,"nodeType":"ParameterList","parameters":[],"src":"6294:0:46"},"scope":10226,"src":"6168:343:46","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":10227,"src":"529:5984:46","usedErrors":[]}],"src":"116:6398:46"},"id":46},"@openzeppelin/contracts/proxy/Proxy.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/proxy/Proxy.sol","exportedSymbols":{"Proxy":[10278]},"id":10279,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10228,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"99:23:47"},{"abstract":true,"baseContracts":[],"canonicalName":"Proxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":10229,"nodeType":"StructuredDocumentation","src":"124:598:47","text":" @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n be specified by overriding the virtual {_implementation} function.\n Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n different contract through the {_delegate} function.\n The success and return data of the delegated call will be returned back to the caller of the proxy."},"fullyImplemented":false,"id":10278,"linearizedBaseContracts":[10278],"name":"Proxy","nameLocation":"741:5:47","nodeType":"ContractDefinition","nodes":[{"body":{"id":10236,"nodeType":"Block","src":"1008:835:47","statements":[{"AST":{"nodeType":"YulBlock","src":"1027:810:47","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1280:1:47","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1283:1:47","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"1286:12:47"},"nodeType":"YulFunctionCall","src":"1286:14:47"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1267:12:47"},"nodeType":"YulFunctionCall","src":"1267:34:47"},"nodeType":"YulExpressionStatement","src":"1267:34:47"},{"nodeType":"YulVariableDeclaration","src":"1428:74:47","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"1455:3:47"},"nodeType":"YulFunctionCall","src":"1455:5:47"},{"name":"implementation","nodeType":"YulIdentifier","src":"1462:14:47"},{"kind":"number","nodeType":"YulLiteral","src":"1478:1:47","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"1481:12:47"},"nodeType":"YulFunctionCall","src":"1481:14:47"},{"kind":"number","nodeType":"YulLiteral","src":"1497:1:47","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1500:1:47","type":"","value":"0"}],"functionName":{"name":"delegatecall","nodeType":"YulIdentifier","src":"1442:12:47"},"nodeType":"YulFunctionCall","src":"1442:60:47"},"variables":[{"name":"result","nodeType":"YulTypedName","src":"1432:6:47","type":""}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1570:1:47","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1573:1:47","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1576:14:47"},"nodeType":"YulFunctionCall","src":"1576:16:47"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"1555:14:47"},"nodeType":"YulFunctionCall","src":"1555:38:47"},"nodeType":"YulExpressionStatement","src":"1555:38:47"},{"cases":[{"body":{"nodeType":"YulBlock","src":"1688:59:47","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1713:1:47","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1716:14:47"},"nodeType":"YulFunctionCall","src":"1716:16:47"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1706:6:47"},"nodeType":"YulFunctionCall","src":"1706:27:47"},"nodeType":"YulExpressionStatement","src":"1706:27:47"}]},"nodeType":"YulCase","src":"1681:66:47","value":{"kind":"number","nodeType":"YulLiteral","src":"1686:1:47","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"1768:59:47","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1793:1:47","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1796:14:47"},"nodeType":"YulFunctionCall","src":"1796:16:47"}],"functionName":{"name":"return","nodeType":"YulIdentifier","src":"1786:6:47"},"nodeType":"YulFunctionCall","src":"1786:27:47"},"nodeType":"YulExpressionStatement","src":"1786:27:47"}]},"nodeType":"YulCase","src":"1760:67:47","value":"default"}],"expression":{"name":"result","nodeType":"YulIdentifier","src":"1614:6:47"},"nodeType":"YulSwitch","src":"1607:220:47"}]},"evmVersion":"london","externalReferences":[{"declaration":10232,"isOffset":false,"isSlot":false,"src":"1462:14:47","valueSize":1}],"id":10235,"nodeType":"InlineAssembly","src":"1018:819:47"}]},"documentation":{"id":10230,"nodeType":"StructuredDocumentation","src":"753:190:47","text":" @dev Delegates the current call to `implementation`.\n This function does not return to its internal call site, it will return directly to the external caller."},"id":10237,"implemented":true,"kind":"function","modifiers":[],"name":"_delegate","nameLocation":"957:9:47","nodeType":"FunctionDefinition","parameters":{"id":10233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10232,"mutability":"mutable","name":"implementation","nameLocation":"975:14:47","nodeType":"VariableDeclaration","scope":10237,"src":"967:22:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10231,"name":"address","nodeType":"ElementaryTypeName","src":"967:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"966:24:47"},"returnParameters":{"id":10234,"nodeType":"ParameterList","parameters":[],"src":"1008:0:47"},"scope":10278,"src":"948:895:47","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"documentation":{"id":10238,"nodeType":"StructuredDocumentation","src":"1849:173:47","text":" @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\n and {_fallback} should delegate."},"id":10243,"implemented":false,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"2036:15:47","nodeType":"FunctionDefinition","parameters":{"id":10239,"nodeType":"ParameterList","parameters":[],"src":"2051:2:47"},"returnParameters":{"id":10242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10241,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10243,"src":"2085:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10240,"name":"address","nodeType":"ElementaryTypeName","src":"2085:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2084:9:47"},"scope":10278,"src":"2027:67:47","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":10255,"nodeType":"Block","src":"2360:72:47","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":10247,"name":"_beforeFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10277,"src":"2370:15:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":10248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2370:17:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10249,"nodeType":"ExpressionStatement","src":"2370:17:47"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":10251,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10243,"src":"2407:15:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2407:17:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10250,"name":"_delegate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10237,"src":"2397:9:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2397:28:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10254,"nodeType":"ExpressionStatement","src":"2397:28:47"}]},"documentation":{"id":10244,"nodeType":"StructuredDocumentation","src":"2100:217:47","text":" @dev Delegates the current call to the address returned by `_implementation()`.\n This function does not return to its internal call site, it will return directly to the external caller."},"id":10256,"implemented":true,"kind":"function","modifiers":[],"name":"_fallback","nameLocation":"2331:9:47","nodeType":"FunctionDefinition","parameters":{"id":10245,"nodeType":"ParameterList","parameters":[],"src":"2340:2:47"},"returnParameters":{"id":10246,"nodeType":"ParameterList","parameters":[],"src":"2360:0:47"},"scope":10278,"src":"2322:110:47","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":10263,"nodeType":"Block","src":"2665:28:47","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":10260,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10256,"src":"2675:9:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":10261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2675:11:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10262,"nodeType":"ExpressionStatement","src":"2675:11:47"}]},"documentation":{"id":10257,"nodeType":"StructuredDocumentation","src":"2438:186:47","text":" @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n function in the contract matches the call data."},"id":10264,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10258,"nodeType":"ParameterList","parameters":[],"src":"2637:2:47"},"returnParameters":{"id":10259,"nodeType":"ParameterList","parameters":[],"src":"2665:0:47"},"scope":10278,"src":"2629:64:47","stateMutability":"payable","virtual":true,"visibility":"external"},{"body":{"id":10271,"nodeType":"Block","src":"2888:28:47","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":10268,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10256,"src":"2898:9:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":10269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2898:11:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10270,"nodeType":"ExpressionStatement","src":"2898:11:47"}]},"documentation":{"id":10265,"nodeType":"StructuredDocumentation","src":"2699:149:47","text":" @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n is empty."},"id":10272,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10266,"nodeType":"ParameterList","parameters":[],"src":"2860:2:47"},"returnParameters":{"id":10267,"nodeType":"ParameterList","parameters":[],"src":"2888:0:47"},"scope":10278,"src":"2853:63:47","stateMutability":"payable","virtual":true,"visibility":"external"},{"body":{"id":10276,"nodeType":"Block","src":"3242:2:47","statements":[]},"documentation":{"id":10273,"nodeType":"StructuredDocumentation","src":"2922:271:47","text":" @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n call, or as part of the Solidity `fallback` or `receive` functions.\n If overridden should call `super._beforeFallback()`."},"id":10277,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeFallback","nameLocation":"3207:15:47","nodeType":"FunctionDefinition","parameters":{"id":10274,"nodeType":"ParameterList","parameters":[],"src":"3222:2:47"},"returnParameters":{"id":10275,"nodeType":"ParameterList","parameters":[],"src":"3242:0:47"},"scope":10278,"src":"3198:46:47","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":10279,"src":"723:2523:47","usedErrors":[]}],"src":"99:3148:47"},"id":47},"@openzeppelin/contracts/proxy/beacon/IBeacon.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/proxy/beacon/IBeacon.sol","exportedSymbols":{"IBeacon":[10288]},"id":10289,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10280,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"93:23:48"},{"abstract":false,"baseContracts":[],"canonicalName":"IBeacon","contractDependencies":[],"contractKind":"interface","documentation":{"id":10281,"nodeType":"StructuredDocumentation","src":"118:79:48","text":" @dev This is the interface that {BeaconProxy} expects of its beacon."},"fullyImplemented":false,"id":10288,"linearizedBaseContracts":[10288],"name":"IBeacon","nameLocation":"208:7:48","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":10282,"nodeType":"StructuredDocumentation","src":"222:162:48","text":" @dev Must return an address that can be used as a delegate call target.\n {BeaconProxy} will check that this address is a contract."},"functionSelector":"5c60da1b","id":10287,"implemented":false,"kind":"function","modifiers":[],"name":"implementation","nameLocation":"398:14:48","nodeType":"FunctionDefinition","parameters":{"id":10283,"nodeType":"ParameterList","parameters":[],"src":"412:2:48"},"returnParameters":{"id":10286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10285,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10287,"src":"438:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10284,"name":"address","nodeType":"ElementaryTypeName","src":"438:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"437:9:48"},"scope":10288,"src":"389:58:48","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":10289,"src":"198:251:48","usedErrors":[]}],"src":"93:357:48"},"id":48},"@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol","exportedSymbols":{"Address":[11484],"Context":[11506],"ERC1967Proxy":[9908],"ERC1967Upgrade":[10226],"IBeacon":[10288],"IERC1822Proxiable":[9791],"Ownable":[9656],"Proxy":[10278],"ProxyAdmin":[10424],"StorageSlot":[11640],"TransparentUpgradeableProxy":[10572]},"id":10425,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10290,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"101:23:49"},{"absolutePath":"@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol","file":"./TransparentUpgradeableProxy.sol","id":10291,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10425,"sourceUnit":10573,"src":"126:43:49","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"../../access/Ownable.sol","id":10292,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10425,"sourceUnit":9657,"src":"170:34:49","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":10294,"name":"Ownable","nameLocations":["458:7:49"],"nodeType":"IdentifierPath","referencedDeclaration":9656,"src":"458:7:49"},"id":10295,"nodeType":"InheritanceSpecifier","src":"458:7:49"}],"canonicalName":"ProxyAdmin","contractDependencies":[],"contractKind":"contract","documentation":{"id":10293,"nodeType":"StructuredDocumentation","src":"206:228:49","text":" @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}."},"fullyImplemented":true,"id":10424,"linearizedBaseContracts":[10424,9656,11506],"name":"ProxyAdmin","nameLocation":"444:10:49","nodeType":"ContractDefinition","nodes":[{"body":{"id":10328,"nodeType":"Block","src":"740:332:49","statements":[{"assignments":[10305,10307],"declarations":[{"constant":false,"id":10305,"mutability":"mutable","name":"success","nameLocation":"913:7:49","nodeType":"VariableDeclaration","scope":10328,"src":"908:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10304,"name":"bool","nodeType":"ElementaryTypeName","src":"908:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":10307,"mutability":"mutable","name":"returndata","nameLocation":"935:10:49","nodeType":"VariableDeclaration","scope":10328,"src":"922:23:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10306,"name":"bytes","nodeType":"ElementaryTypeName","src":"922:5:49","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":10315,"initialValue":{"arguments":[{"hexValue":"5c60da1b","id":10313,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"975:13:49","typeDescriptions":{"typeIdentifier":"t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29","typeString":"literal_string hex\"5c60da1b\""}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29","typeString":"literal_string hex\"5c60da1b\""}],"expression":{"arguments":[{"id":10310,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10299,"src":"957:5:49","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$10572","typeString":"contract TransparentUpgradeableProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$10572","typeString":"contract TransparentUpgradeableProxy"}],"id":10309,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"949:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10308,"name":"address","nodeType":"ElementaryTypeName","src":"949:7:49","typeDescriptions":{}}},"id":10311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"949:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"964:10:49","memberName":"staticcall","nodeType":"MemberAccess","src":"949:25:49","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":10314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"949:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"907:82:49"},{"expression":{"arguments":[{"id":10317,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10305,"src":"1007:7:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":10316,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"999:7:49","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":10318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"999:16:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10319,"nodeType":"ExpressionStatement","src":"999:16:49"},{"expression":{"arguments":[{"id":10322,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10307,"src":"1043:10:49","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":10324,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1056:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10323,"name":"address","nodeType":"ElementaryTypeName","src":"1056:7:49","typeDescriptions":{}}}],"id":10325,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1055:9:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}],"expression":{"id":10320,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1032:3:49","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10321,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1036:6:49","memberName":"decode","nodeType":"MemberAccess","src":"1032:10:49","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":10326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1032:33:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":10303,"id":10327,"nodeType":"Return","src":"1025:40:49"}]},"documentation":{"id":10296,"nodeType":"StructuredDocumentation","src":"472:158:49","text":" @dev Returns the current implementation of `proxy`.\n Requirements:\n - This contract must be the admin of `proxy`."},"functionSelector":"204e1c7a","id":10329,"implemented":true,"kind":"function","modifiers":[],"name":"getProxyImplementation","nameLocation":"644:22:49","nodeType":"FunctionDefinition","parameters":{"id":10300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10299,"mutability":"mutable","name":"proxy","nameLocation":"695:5:49","nodeType":"VariableDeclaration","scope":10329,"src":"667:33:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$10572","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":10298,"nodeType":"UserDefinedTypeName","pathNode":{"id":10297,"name":"TransparentUpgradeableProxy","nameLocations":["667:27:49"],"nodeType":"IdentifierPath","referencedDeclaration":10572,"src":"667:27:49"},"referencedDeclaration":10572,"src":"667:27:49","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$10572","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"}],"src":"666:35:49"},"returnParameters":{"id":10303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10302,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10329,"src":"731:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10301,"name":"address","nodeType":"ElementaryTypeName","src":"731:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"730:9:49"},"scope":10424,"src":"635:437:49","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":10362,"nodeType":"Block","src":"1328:323:49","statements":[{"assignments":[10339,10341],"declarations":[{"constant":false,"id":10339,"mutability":"mutable","name":"success","nameLocation":"1492:7:49","nodeType":"VariableDeclaration","scope":10362,"src":"1487:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10338,"name":"bool","nodeType":"ElementaryTypeName","src":"1487:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":10341,"mutability":"mutable","name":"returndata","nameLocation":"1514:10:49","nodeType":"VariableDeclaration","scope":10362,"src":"1501:23:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10340,"name":"bytes","nodeType":"ElementaryTypeName","src":"1501:5:49","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":10349,"initialValue":{"arguments":[{"hexValue":"f851a440","id":10347,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"1554:13:49","typeDescriptions":{"typeIdentifier":"t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7","typeString":"literal_string hex\"f851a440\""}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7","typeString":"literal_string hex\"f851a440\""}],"expression":{"arguments":[{"id":10344,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10333,"src":"1536:5:49","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$10572","typeString":"contract TransparentUpgradeableProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$10572","typeString":"contract TransparentUpgradeableProxy"}],"id":10343,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1528:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10342,"name":"address","nodeType":"ElementaryTypeName","src":"1528:7:49","typeDescriptions":{}}},"id":10345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1528:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1543:10:49","memberName":"staticcall","nodeType":"MemberAccess","src":"1528:25:49","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":10348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1528:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1486:82:49"},{"expression":{"arguments":[{"id":10351,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10339,"src":"1586:7:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":10350,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1578:7:49","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":10352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1578:16:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10353,"nodeType":"ExpressionStatement","src":"1578:16:49"},{"expression":{"arguments":[{"id":10356,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10341,"src":"1622:10:49","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":10358,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1635:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10357,"name":"address","nodeType":"ElementaryTypeName","src":"1635:7:49","typeDescriptions":{}}}],"id":10359,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1634:9:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}],"expression":{"id":10354,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1611:3:49","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10355,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1615:6:49","memberName":"decode","nodeType":"MemberAccess","src":"1611:10:49","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":10360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1611:33:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":10337,"id":10361,"nodeType":"Return","src":"1604:40:49"}]},"documentation":{"id":10330,"nodeType":"StructuredDocumentation","src":"1078:149:49","text":" @dev Returns the current admin of `proxy`.\n Requirements:\n - This contract must be the admin of `proxy`."},"functionSelector":"f3b7dead","id":10363,"implemented":true,"kind":"function","modifiers":[],"name":"getProxyAdmin","nameLocation":"1241:13:49","nodeType":"FunctionDefinition","parameters":{"id":10334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10333,"mutability":"mutable","name":"proxy","nameLocation":"1283:5:49","nodeType":"VariableDeclaration","scope":10363,"src":"1255:33:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$10572","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":10332,"nodeType":"UserDefinedTypeName","pathNode":{"id":10331,"name":"TransparentUpgradeableProxy","nameLocations":["1255:27:49"],"nodeType":"IdentifierPath","referencedDeclaration":10572,"src":"1255:27:49"},"referencedDeclaration":10572,"src":"1255:27:49","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$10572","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"}],"src":"1254:35:49"},"returnParameters":{"id":10337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10336,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10363,"src":"1319:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10335,"name":"address","nodeType":"ElementaryTypeName","src":"1319:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1318:9:49"},"scope":10424,"src":"1232:419:49","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":10380,"nodeType":"Block","src":"1929:44:49","statements":[{"expression":{"arguments":[{"id":10377,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10369,"src":"1957:8:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10374,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10367,"src":"1939:5:49","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$10572","typeString":"contract TransparentUpgradeableProxy"}},"id":10376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1945:11:49","memberName":"changeAdmin","nodeType":"MemberAccess","referencedDeclaration":10506,"src":"1939:17:49","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":10378,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1939:27:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10379,"nodeType":"ExpressionStatement","src":"1939:27:49"}]},"documentation":{"id":10364,"nodeType":"StructuredDocumentation","src":"1657:163:49","text":" @dev Changes the admin of `proxy` to `newAdmin`.\n Requirements:\n - This contract must be the current admin of `proxy`."},"functionSelector":"7eff275e","id":10381,"implemented":true,"kind":"function","modifiers":[{"id":10372,"kind":"modifierInvocation","modifierName":{"id":10371,"name":"onlyOwner","nameLocations":["1919:9:49"],"nodeType":"IdentifierPath","referencedDeclaration":9575,"src":"1919:9:49"},"nodeType":"ModifierInvocation","src":"1919:9:49"}],"name":"changeProxyAdmin","nameLocation":"1834:16:49","nodeType":"FunctionDefinition","parameters":{"id":10370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10367,"mutability":"mutable","name":"proxy","nameLocation":"1879:5:49","nodeType":"VariableDeclaration","scope":10381,"src":"1851:33:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$10572","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":10366,"nodeType":"UserDefinedTypeName","pathNode":{"id":10365,"name":"TransparentUpgradeableProxy","nameLocations":["1851:27:49"],"nodeType":"IdentifierPath","referencedDeclaration":10572,"src":"1851:27:49"},"referencedDeclaration":10572,"src":"1851:27:49","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$10572","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"},{"constant":false,"id":10369,"mutability":"mutable","name":"newAdmin","nameLocation":"1894:8:49","nodeType":"VariableDeclaration","scope":10381,"src":"1886:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10368,"name":"address","nodeType":"ElementaryTypeName","src":"1886:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1850:53:49"},"returnParameters":{"id":10373,"nodeType":"ParameterList","parameters":[],"src":"1929:0:49"},"scope":10424,"src":"1825:148:49","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":10398,"nodeType":"Block","src":"2279:48:49","statements":[{"expression":{"arguments":[{"id":10395,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10387,"src":"2305:14:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10392,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10385,"src":"2289:5:49","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$10572","typeString":"contract TransparentUpgradeableProxy"}},"id":10394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2295:9:49","memberName":"upgradeTo","nodeType":"MemberAccess","referencedDeclaration":10524,"src":"2289:15:49","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":10396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2289:31:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10397,"nodeType":"ExpressionStatement","src":"2289:31:49"}]},"documentation":{"id":10382,"nodeType":"StructuredDocumentation","src":"1979:194:49","text":" @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n Requirements:\n - This contract must be the admin of `proxy`."},"functionSelector":"99a88ec4","id":10399,"implemented":true,"kind":"function","modifiers":[{"id":10390,"kind":"modifierInvocation","modifierName":{"id":10389,"name":"onlyOwner","nameLocations":["2269:9:49"],"nodeType":"IdentifierPath","referencedDeclaration":9575,"src":"2269:9:49"},"nodeType":"ModifierInvocation","src":"2269:9:49"}],"name":"upgrade","nameLocation":"2187:7:49","nodeType":"FunctionDefinition","parameters":{"id":10388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10385,"mutability":"mutable","name":"proxy","nameLocation":"2223:5:49","nodeType":"VariableDeclaration","scope":10399,"src":"2195:33:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$10572","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":10384,"nodeType":"UserDefinedTypeName","pathNode":{"id":10383,"name":"TransparentUpgradeableProxy","nameLocations":["2195:27:49"],"nodeType":"IdentifierPath","referencedDeclaration":10572,"src":"2195:27:49"},"referencedDeclaration":10572,"src":"2195:27:49","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$10572","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"},{"constant":false,"id":10387,"mutability":"mutable","name":"implementation","nameLocation":"2238:14:49","nodeType":"VariableDeclaration","scope":10399,"src":"2230:22:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10386,"name":"address","nodeType":"ElementaryTypeName","src":"2230:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2194:59:49"},"returnParameters":{"id":10391,"nodeType":"ParameterList","parameters":[],"src":"2279:0:49"},"scope":10424,"src":"2178:149:49","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":10422,"nodeType":"Block","src":"2758:79:49","statements":[{"expression":{"arguments":[{"id":10418,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10405,"src":"2809:14:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10419,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10407,"src":"2825:4:49","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":10412,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10403,"src":"2768:5:49","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$10572","typeString":"contract TransparentUpgradeableProxy"}},"id":10414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2774:16:49","memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":10541,"src":"2768:22:49","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory) payable external"}},"id":10417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":10415,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2798:3:49","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":10416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2802:5:49","memberName":"value","nodeType":"MemberAccess","src":"2798:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"2768:40:49","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$value","typeString":"function (address,bytes memory) payable external"}},"id":10420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2768:62:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10421,"nodeType":"ExpressionStatement","src":"2768:62:49"}]},"documentation":{"id":10400,"nodeType":"StructuredDocumentation","src":"2333:255:49","text":" @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n {TransparentUpgradeableProxy-upgradeToAndCall}.\n Requirements:\n - This contract must be the admin of `proxy`."},"functionSelector":"9623609d","id":10423,"implemented":true,"kind":"function","modifiers":[{"id":10410,"kind":"modifierInvocation","modifierName":{"id":10409,"name":"onlyOwner","nameLocations":["2748:9:49"],"nodeType":"IdentifierPath","referencedDeclaration":9575,"src":"2748:9:49"},"nodeType":"ModifierInvocation","src":"2748:9:49"}],"name":"upgradeAndCall","nameLocation":"2602:14:49","nodeType":"FunctionDefinition","parameters":{"id":10408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10403,"mutability":"mutable","name":"proxy","nameLocation":"2654:5:49","nodeType":"VariableDeclaration","scope":10423,"src":"2626:33:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$10572","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":10402,"nodeType":"UserDefinedTypeName","pathNode":{"id":10401,"name":"TransparentUpgradeableProxy","nameLocations":["2626:27:49"],"nodeType":"IdentifierPath","referencedDeclaration":10572,"src":"2626:27:49"},"referencedDeclaration":10572,"src":"2626:27:49","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$10572","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"},{"constant":false,"id":10405,"mutability":"mutable","name":"implementation","nameLocation":"2677:14:49","nodeType":"VariableDeclaration","scope":10423,"src":"2669:22:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10404,"name":"address","nodeType":"ElementaryTypeName","src":"2669:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10407,"mutability":"mutable","name":"data","nameLocation":"2714:4:49","nodeType":"VariableDeclaration","scope":10423,"src":"2701:17:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10406,"name":"bytes","nodeType":"ElementaryTypeName","src":"2701:5:49","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2616:108:49"},"returnParameters":{"id":10411,"nodeType":"ParameterList","parameters":[],"src":"2758:0:49"},"scope":10424,"src":"2593:244:49","stateMutability":"payable","virtual":true,"visibility":"public"}],"scope":10425,"src":"435:2404:49","usedErrors":[]}],"src":"101:2739:49"},"id":49},"@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol","exportedSymbols":{"Address":[11484],"ERC1967Proxy":[9908],"ERC1967Upgrade":[10226],"IBeacon":[10288],"IERC1822Proxiable":[9791],"Proxy":[10278],"StorageSlot":[11640],"TransparentUpgradeableProxy":[10572]},"id":10573,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10426,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"133:23:50"},{"absolutePath":"@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol","file":"../ERC1967/ERC1967Proxy.sol","id":10427,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10573,"sourceUnit":9909,"src":"158:37:50","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":10429,"name":"ERC1967Proxy","nameLocations":["1689:12:50"],"nodeType":"IdentifierPath","referencedDeclaration":9908,"src":"1689:12:50"},"id":10430,"nodeType":"InheritanceSpecifier","src":"1689:12:50"}],"canonicalName":"TransparentUpgradeableProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":10428,"nodeType":"StructuredDocumentation","src":"197:1451:50","text":" @dev This contract implements a proxy that is upgradeable by an admin.\n To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n clashing], which can potentially be used in an attack, this contract uses the\n https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n things that go hand in hand:\n 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n that call matches one of the admin functions exposed by the proxy itself.\n 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n \"admin cannot fallback to proxy target\".\n These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n to sudden errors when trying to call a function from the proxy implementation.\n Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy."},"fullyImplemented":true,"id":10572,"linearizedBaseContracts":[10572,9908,10226,10278],"name":"TransparentUpgradeableProxy","nameLocation":"1658:27:50","nodeType":"ContractDefinition","nodes":[{"body":{"id":10448,"nodeType":"Block","src":"2053:37:50","statements":[{"expression":{"arguments":[{"id":10445,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10435,"src":"2076:6:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10444,"name":"_changeAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10129,"src":"2063:12:50","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2063:20:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10447,"nodeType":"ExpressionStatement","src":"2063:20:50"}]},"documentation":{"id":10431,"nodeType":"StructuredDocumentation","src":"1708:210:50","text":" @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}."},"id":10449,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":10440,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10433,"src":"2038:6:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10441,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10437,"src":"2046:5:50","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":10442,"kind":"baseConstructorSpecifier","modifierName":{"id":10439,"name":"ERC1967Proxy","nameLocations":["2025:12:50"],"nodeType":"IdentifierPath","referencedDeclaration":9908,"src":"2025:12:50"},"nodeType":"ModifierInvocation","src":"2025:27:50"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10433,"mutability":"mutable","name":"_logic","nameLocation":"1952:6:50","nodeType":"VariableDeclaration","scope":10449,"src":"1944:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10432,"name":"address","nodeType":"ElementaryTypeName","src":"1944:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10435,"mutability":"mutable","name":"admin_","nameLocation":"1976:6:50","nodeType":"VariableDeclaration","scope":10449,"src":"1968:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10434,"name":"address","nodeType":"ElementaryTypeName","src":"1968:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10437,"mutability":"mutable","name":"_data","nameLocation":"2005:5:50","nodeType":"VariableDeclaration","scope":10449,"src":"1992:18:50","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10436,"name":"bytes","nodeType":"ElementaryTypeName","src":"1992:5:50","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1934:82:50"},"returnParameters":{"id":10443,"nodeType":"ParameterList","parameters":[],"src":"2053:0:50"},"scope":10572,"src":"1923:167:50","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":10464,"nodeType":"Block","src":"2250:115:50","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10452,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2264:3:50","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":10453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2268:6:50","memberName":"sender","nodeType":"MemberAccess","src":"2264:10:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":10454,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10086,"src":"2278:9:50","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2278:11:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2264:25:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":10462,"nodeType":"Block","src":"2323:36:50","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":10459,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10256,"src":"2337:9:50","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":10460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2337:11:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10461,"nodeType":"ExpressionStatement","src":"2337:11:50"}]},"id":10463,"nodeType":"IfStatement","src":"2260:99:50","trueBody":{"id":10458,"nodeType":"Block","src":"2291:26:50","statements":[{"id":10457,"nodeType":"PlaceholderStatement","src":"2305:1:50"}]}}]},"documentation":{"id":10450,"nodeType":"StructuredDocumentation","src":"2096:130:50","text":" @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin."},"id":10465,"name":"ifAdmin","nameLocation":"2240:7:50","nodeType":"ModifierDefinition","parameters":{"id":10451,"nodeType":"ParameterList","parameters":[],"src":"2247:2:50"},"src":"2231:134:50","virtual":false,"visibility":"internal"},{"body":{"id":10478,"nodeType":"Block","src":"2866:37:50","statements":[{"expression":{"id":10476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10473,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10471,"src":"2876:6:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":10474,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10086,"src":"2885:9:50","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2885:11:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2876:20:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10477,"nodeType":"ExpressionStatement","src":"2876:20:50"}]},"documentation":{"id":10466,"nodeType":"StructuredDocumentation","src":"2371:431:50","text":" @dev Returns the current admin.\n NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`"},"functionSelector":"f851a440","id":10479,"implemented":true,"kind":"function","modifiers":[{"id":10469,"kind":"modifierInvocation","modifierName":{"id":10468,"name":"ifAdmin","nameLocations":["2833:7:50"],"nodeType":"IdentifierPath","referencedDeclaration":10465,"src":"2833:7:50"},"nodeType":"ModifierInvocation","src":"2833:7:50"}],"name":"admin","nameLocation":"2816:5:50","nodeType":"FunctionDefinition","parameters":{"id":10467,"nodeType":"ParameterList","parameters":[],"src":"2821:2:50"},"returnParameters":{"id":10472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10471,"mutability":"mutable","name":"admin_","nameLocation":"2858:6:50","nodeType":"VariableDeclaration","scope":10479,"src":"2850:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10470,"name":"address","nodeType":"ElementaryTypeName","src":"2850:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2849:16:50"},"scope":10572,"src":"2807:96:50","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10492,"nodeType":"Block","src":"3440:52:50","statements":[{"expression":{"id":10490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10487,"name":"implementation_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10485,"src":"3450:15:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":10488,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[9907],"referencedDeclaration":9907,"src":"3468:15:50","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3468:17:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3450:35:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10491,"nodeType":"ExpressionStatement","src":"3450:35:50"}]},"documentation":{"id":10480,"nodeType":"StructuredDocumentation","src":"2909:449:50","text":" @dev Returns the current implementation.\n NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`"},"functionSelector":"5c60da1b","id":10493,"implemented":true,"kind":"function","modifiers":[{"id":10483,"kind":"modifierInvocation","modifierName":{"id":10482,"name":"ifAdmin","nameLocations":["3398:7:50"],"nodeType":"IdentifierPath","referencedDeclaration":10465,"src":"3398:7:50"},"nodeType":"ModifierInvocation","src":"3398:7:50"}],"name":"implementation","nameLocation":"3372:14:50","nodeType":"FunctionDefinition","parameters":{"id":10481,"nodeType":"ParameterList","parameters":[],"src":"3386:2:50"},"returnParameters":{"id":10486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10485,"mutability":"mutable","name":"implementation_","nameLocation":"3423:15:50","nodeType":"VariableDeclaration","scope":10493,"src":"3415:23:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10484,"name":"address","nodeType":"ElementaryTypeName","src":"3415:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3414:25:50"},"scope":10572,"src":"3363:129:50","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10505,"nodeType":"Block","src":"3761:39:50","statements":[{"expression":{"arguments":[{"id":10502,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10496,"src":"3784:8:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10501,"name":"_changeAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10129,"src":"3771:12:50","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3771:22:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10504,"nodeType":"ExpressionStatement","src":"3771:22:50"}]},"documentation":{"id":10494,"nodeType":"StructuredDocumentation","src":"3498:194:50","text":" @dev Changes the admin of the proxy.\n Emits an {AdminChanged} event.\n NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}."},"functionSelector":"8f283970","id":10506,"implemented":true,"kind":"function","modifiers":[{"id":10499,"kind":"modifierInvocation","modifierName":{"id":10498,"name":"ifAdmin","nameLocations":["3753:7:50"],"nodeType":"IdentifierPath","referencedDeclaration":10465,"src":"3753:7:50"},"nodeType":"ModifierInvocation","src":"3753:7:50"}],"name":"changeAdmin","nameLocation":"3706:11:50","nodeType":"FunctionDefinition","parameters":{"id":10497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10496,"mutability":"mutable","name":"newAdmin","nameLocation":"3726:8:50","nodeType":"VariableDeclaration","scope":10506,"src":"3718:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10495,"name":"address","nodeType":"ElementaryTypeName","src":"3718:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3717:18:50"},"returnParameters":{"id":10500,"nodeType":"ParameterList","parameters":[],"src":"3761:0:50"},"scope":10572,"src":"3697:103:50","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":10523,"nodeType":"Block","src":"4023:71:50","statements":[{"expression":{"arguments":[{"id":10515,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10509,"src":"4051:17:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"","id":10518,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4076:2:50","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":10517,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4070:5:50","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":10516,"name":"bytes","nodeType":"ElementaryTypeName","src":"4070:5:50","typeDescriptions":{}}},"id":10519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4070:9:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"66616c7365","id":10520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4081:5:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":10514,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10009,"src":"4033:17:50","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":10521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4033:54:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10522,"nodeType":"ExpressionStatement","src":"4033:54:50"}]},"documentation":{"id":10507,"nodeType":"StructuredDocumentation","src":"3806:149:50","text":" @dev Upgrade the implementation of the proxy.\n NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}."},"functionSelector":"3659cfe6","id":10524,"implemented":true,"kind":"function","modifiers":[{"id":10512,"kind":"modifierInvocation","modifierName":{"id":10511,"name":"ifAdmin","nameLocations":["4015:7:50"],"nodeType":"IdentifierPath","referencedDeclaration":10465,"src":"4015:7:50"},"nodeType":"ModifierInvocation","src":"4015:7:50"}],"name":"upgradeTo","nameLocation":"3969:9:50","nodeType":"FunctionDefinition","parameters":{"id":10510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10509,"mutability":"mutable","name":"newImplementation","nameLocation":"3987:17:50","nodeType":"VariableDeclaration","scope":10524,"src":"3979:25:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10508,"name":"address","nodeType":"ElementaryTypeName","src":"3979:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3978:27:50"},"returnParameters":{"id":10513,"nodeType":"ParameterList","parameters":[],"src":"4023:0:50"},"scope":10572,"src":"3960:134:50","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10540,"nodeType":"Block","src":"4569:65:50","statements":[{"expression":{"arguments":[{"id":10535,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10527,"src":"4597:17:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10536,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10529,"src":"4616:4:50","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"hexValue":"74727565","id":10537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4622:4:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":10534,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10009,"src":"4579:17:50","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":10538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4579:48:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10539,"nodeType":"ExpressionStatement","src":"4579:48:50"}]},"documentation":{"id":10525,"nodeType":"StructuredDocumentation","src":"4100:365:50","text":" @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n proxied contract.\n NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}."},"functionSelector":"4f1ef286","id":10541,"implemented":true,"kind":"function","modifiers":[{"id":10532,"kind":"modifierInvocation","modifierName":{"id":10531,"name":"ifAdmin","nameLocations":["4561:7:50"],"nodeType":"IdentifierPath","referencedDeclaration":10465,"src":"4561:7:50"},"nodeType":"ModifierInvocation","src":"4561:7:50"}],"name":"upgradeToAndCall","nameLocation":"4479:16:50","nodeType":"FunctionDefinition","parameters":{"id":10530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10527,"mutability":"mutable","name":"newImplementation","nameLocation":"4504:17:50","nodeType":"VariableDeclaration","scope":10541,"src":"4496:25:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10526,"name":"address","nodeType":"ElementaryTypeName","src":"4496:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10529,"mutability":"mutable","name":"data","nameLocation":"4538:4:50","nodeType":"VariableDeclaration","scope":10541,"src":"4523:19:50","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":10528,"name":"bytes","nodeType":"ElementaryTypeName","src":"4523:5:50","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4495:48:50"},"returnParameters":{"id":10533,"nodeType":"ParameterList","parameters":[],"src":"4569:0:50"},"scope":10572,"src":"4470:164:50","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":10550,"nodeType":"Block","src":"4753:35:50","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":10547,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10086,"src":"4770:9:50","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4770:11:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":10546,"id":10549,"nodeType":"Return","src":"4763:18:50"}]},"documentation":{"id":10542,"nodeType":"StructuredDocumentation","src":"4640:50:50","text":" @dev Returns the current admin."},"id":10551,"implemented":true,"kind":"function","modifiers":[],"name":"_admin","nameLocation":"4704:6:50","nodeType":"FunctionDefinition","parameters":{"id":10543,"nodeType":"ParameterList","parameters":[],"src":"4710:2:50"},"returnParameters":{"id":10546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10545,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10551,"src":"4744:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10544,"name":"address","nodeType":"ElementaryTypeName","src":"4744:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4743:9:50"},"scope":10572,"src":"4695:93:50","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[10277],"body":{"id":10570,"nodeType":"Block","src":"4962:154:50","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10557,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4980:3:50","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":10558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4984:6:50","memberName":"sender","nodeType":"MemberAccess","src":"4980:10:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":10559,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10086,"src":"4994:9:50","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4994:11:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4980:25:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574","id":10562,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5007:68:50","typeDescriptions":{"typeIdentifier":"t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d","typeString":"literal_string \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\""},"value":"TransparentUpgradeableProxy: admin cannot fallback to proxy target"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d","typeString":"literal_string \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\""}],"id":10556,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4972:7:50","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4972:104:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10564,"nodeType":"ExpressionStatement","src":"4972:104:50"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":10565,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"5086:5:50","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_TransparentUpgradeableProxy_$10572_$","typeString":"type(contract super TransparentUpgradeableProxy)"}},"id":10567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5092:15:50","memberName":"_beforeFallback","nodeType":"MemberAccess","referencedDeclaration":10277,"src":"5086:21:50","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":10568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5086:23:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10569,"nodeType":"ExpressionStatement","src":"5086:23:50"}]},"documentation":{"id":10552,"nodeType":"StructuredDocumentation","src":"4794:110:50","text":" @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}."},"id":10571,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeFallback","nameLocation":"4918:15:50","nodeType":"FunctionDefinition","overrides":{"id":10554,"nodeType":"OverrideSpecifier","overrides":[],"src":"4953:8:50"},"parameters":{"id":10553,"nodeType":"ParameterList","parameters":[],"src":"4933:2:50"},"returnParameters":{"id":10555,"nodeType":"ParameterList","parameters":[],"src":"4962:0:50"},"scope":10572,"src":"4909:207:50","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":10573,"src":"1649:3469:50","usedErrors":[]}],"src":"133:4986:50"},"id":50},"@openzeppelin/contracts/security/Pausable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/security/Pausable.sol","exportedSymbols":{"Context":[11506],"Pausable":[10680]},"id":10681,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10574,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"105:23:51"},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../utils/Context.sol","id":10575,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10681,"sourceUnit":11507,"src":"130:30:51","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":10577,"name":"Context","nameLocations":["632:7:51"],"nodeType":"IdentifierPath","referencedDeclaration":11506,"src":"632:7:51"},"id":10578,"nodeType":"InheritanceSpecifier","src":"632:7:51"}],"canonicalName":"Pausable","contractDependencies":[],"contractKind":"contract","documentation":{"id":10576,"nodeType":"StructuredDocumentation","src":"162:439:51","text":" @dev Contract module which allows children to implement an emergency stop\n mechanism that can be triggered by an authorized account.\n This module is used through inheritance. It will make available the\n modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n the functions of your contract. Note that they will not be pausable by\n simply including this module, only once the modifiers are put in place."},"fullyImplemented":true,"id":10680,"linearizedBaseContracts":[10680,11506],"name":"Pausable","nameLocation":"620:8:51","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":10579,"nodeType":"StructuredDocumentation","src":"646:73:51","text":" @dev Emitted when the pause is triggered by `account`."},"eventSelector":"62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258","id":10583,"name":"Paused","nameLocation":"730:6:51","nodeType":"EventDefinition","parameters":{"id":10582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10581,"indexed":false,"mutability":"mutable","name":"account","nameLocation":"745:7:51","nodeType":"VariableDeclaration","scope":10583,"src":"737:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10580,"name":"address","nodeType":"ElementaryTypeName","src":"737:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"736:17:51"},"src":"724:30:51"},{"anonymous":false,"documentation":{"id":10584,"nodeType":"StructuredDocumentation","src":"760:70:51","text":" @dev Emitted when the pause is lifted by `account`."},"eventSelector":"5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa","id":10588,"name":"Unpaused","nameLocation":"841:8:51","nodeType":"EventDefinition","parameters":{"id":10587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10586,"indexed":false,"mutability":"mutable","name":"account","nameLocation":"858:7:51","nodeType":"VariableDeclaration","scope":10588,"src":"850:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10585,"name":"address","nodeType":"ElementaryTypeName","src":"850:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"849:17:51"},"src":"835:32:51"},{"constant":false,"id":10590,"mutability":"mutable","name":"_paused","nameLocation":"886:7:51","nodeType":"VariableDeclaration","scope":10680,"src":"873:20:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10589,"name":"bool","nodeType":"ElementaryTypeName","src":"873:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"body":{"id":10598,"nodeType":"Block","src":"986:32:51","statements":[{"expression":{"id":10596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10594,"name":"_paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10590,"src":"996:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":10595,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1006:5:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"996:15:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10597,"nodeType":"ExpressionStatement","src":"996:15:51"}]},"documentation":{"id":10591,"nodeType":"StructuredDocumentation","src":"900:67:51","text":" @dev Initializes the contract in unpaused state."},"id":10599,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10592,"nodeType":"ParameterList","parameters":[],"src":"983:2:51"},"returnParameters":{"id":10593,"nodeType":"ParameterList","parameters":[],"src":"986:0:51"},"scope":10680,"src":"972:46:51","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10606,"nodeType":"Block","src":"1229:47:51","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":10602,"name":"_requireNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10636,"src":"1239:17:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":10603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1239:19:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10604,"nodeType":"ExpressionStatement","src":"1239:19:51"},{"id":10605,"nodeType":"PlaceholderStatement","src":"1268:1:51"}]},"documentation":{"id":10600,"nodeType":"StructuredDocumentation","src":"1024:175:51","text":" @dev Modifier to make a function callable only when the contract is not paused.\n Requirements:\n - The contract must not be paused."},"id":10607,"name":"whenNotPaused","nameLocation":"1213:13:51","nodeType":"ModifierDefinition","parameters":{"id":10601,"nodeType":"ParameterList","parameters":[],"src":"1226:2:51"},"src":"1204:72:51","virtual":false,"visibility":"internal"},{"body":{"id":10614,"nodeType":"Block","src":"1476:44:51","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":10610,"name":"_requirePaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10647,"src":"1486:14:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":10611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1486:16:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10612,"nodeType":"ExpressionStatement","src":"1486:16:51"},{"id":10613,"nodeType":"PlaceholderStatement","src":"1512:1:51"}]},"documentation":{"id":10608,"nodeType":"StructuredDocumentation","src":"1282:167:51","text":" @dev Modifier to make a function callable only when the contract is paused.\n Requirements:\n - The contract must be paused."},"id":10615,"name":"whenPaused","nameLocation":"1463:10:51","nodeType":"ModifierDefinition","parameters":{"id":10609,"nodeType":"ParameterList","parameters":[],"src":"1473:2:51"},"src":"1454:66:51","virtual":false,"visibility":"internal"},{"body":{"id":10623,"nodeType":"Block","src":"1668:31:51","statements":[{"expression":{"id":10621,"name":"_paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10590,"src":"1685:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":10620,"id":10622,"nodeType":"Return","src":"1678:14:51"}]},"documentation":{"id":10616,"nodeType":"StructuredDocumentation","src":"1526:84:51","text":" @dev Returns true if the contract is paused, and false otherwise."},"functionSelector":"5c975abb","id":10624,"implemented":true,"kind":"function","modifiers":[],"name":"paused","nameLocation":"1624:6:51","nodeType":"FunctionDefinition","parameters":{"id":10617,"nodeType":"ParameterList","parameters":[],"src":"1630:2:51"},"returnParameters":{"id":10620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10619,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10624,"src":"1662:4:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10618,"name":"bool","nodeType":"ElementaryTypeName","src":"1662:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1661:6:51"},"scope":10680,"src":"1615:84:51","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":10635,"nodeType":"Block","src":"1818:55:51","statements":[{"expression":{"arguments":[{"id":10631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1836:9:51","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":10629,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10624,"src":"1837:6:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":10630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1837:8:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5061757361626c653a20706175736564","id":10632,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1847:18:51","typeDescriptions":{"typeIdentifier":"t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a","typeString":"literal_string \"Pausable: paused\""},"value":"Pausable: paused"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a","typeString":"literal_string \"Pausable: paused\""}],"id":10628,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1828:7:51","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1828:38:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10634,"nodeType":"ExpressionStatement","src":"1828:38:51"}]},"documentation":{"id":10625,"nodeType":"StructuredDocumentation","src":"1705:57:51","text":" @dev Throws if the contract is paused."},"id":10636,"implemented":true,"kind":"function","modifiers":[],"name":"_requireNotPaused","nameLocation":"1776:17:51","nodeType":"FunctionDefinition","parameters":{"id":10626,"nodeType":"ParameterList","parameters":[],"src":"1793:2:51"},"returnParameters":{"id":10627,"nodeType":"ParameterList","parameters":[],"src":"1818:0:51"},"scope":10680,"src":"1767:106:51","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":10646,"nodeType":"Block","src":"1993:58:51","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":10641,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10624,"src":"2011:6:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":10642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2011:8:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5061757361626c653a206e6f7420706175736564","id":10643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2021:22:51","typeDescriptions":{"typeIdentifier":"t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a","typeString":"literal_string \"Pausable: not paused\""},"value":"Pausable: not paused"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a","typeString":"literal_string \"Pausable: not paused\""}],"id":10640,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2003:7:51","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2003:41:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10645,"nodeType":"ExpressionStatement","src":"2003:41:51"}]},"documentation":{"id":10637,"nodeType":"StructuredDocumentation","src":"1879:61:51","text":" @dev Throws if the contract is not paused."},"id":10647,"implemented":true,"kind":"function","modifiers":[],"name":"_requirePaused","nameLocation":"1954:14:51","nodeType":"FunctionDefinition","parameters":{"id":10638,"nodeType":"ParameterList","parameters":[],"src":"1968:2:51"},"returnParameters":{"id":10639,"nodeType":"ParameterList","parameters":[],"src":"1993:0:51"},"scope":10680,"src":"1945:106:51","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":10662,"nodeType":"Block","src":"2235:66:51","statements":[{"expression":{"id":10655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10653,"name":"_paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10590,"src":"2245:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":10654,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2255:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2245:14:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10656,"nodeType":"ExpressionStatement","src":"2245:14:51"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":10658,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11496,"src":"2281:10:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2281:12:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10657,"name":"Paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10583,"src":"2274:6:51","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2274:20:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10661,"nodeType":"EmitStatement","src":"2269:25:51"}]},"documentation":{"id":10648,"nodeType":"StructuredDocumentation","src":"2057:124:51","text":" @dev Triggers stopped state.\n Requirements:\n - The contract must not be paused."},"id":10663,"implemented":true,"kind":"function","modifiers":[{"id":10651,"kind":"modifierInvocation","modifierName":{"id":10650,"name":"whenNotPaused","nameLocations":["2221:13:51"],"nodeType":"IdentifierPath","referencedDeclaration":10607,"src":"2221:13:51"},"nodeType":"ModifierInvocation","src":"2221:13:51"}],"name":"_pause","nameLocation":"2195:6:51","nodeType":"FunctionDefinition","parameters":{"id":10649,"nodeType":"ParameterList","parameters":[],"src":"2201:2:51"},"returnParameters":{"id":10652,"nodeType":"ParameterList","parameters":[],"src":"2235:0:51"},"scope":10680,"src":"2186:115:51","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":10678,"nodeType":"Block","src":"2481:69:51","statements":[{"expression":{"id":10671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10669,"name":"_paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10590,"src":"2491:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":10670,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2501:5:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2491:15:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10672,"nodeType":"ExpressionStatement","src":"2491:15:51"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":10674,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11496,"src":"2530:10:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2530:12:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10673,"name":"Unpaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10588,"src":"2521:8:51","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2521:22:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10677,"nodeType":"EmitStatement","src":"2516:27:51"}]},"documentation":{"id":10664,"nodeType":"StructuredDocumentation","src":"2307:121:51","text":" @dev Returns to normal state.\n Requirements:\n - The contract must be paused."},"id":10679,"implemented":true,"kind":"function","modifiers":[{"id":10667,"kind":"modifierInvocation","modifierName":{"id":10666,"name":"whenPaused","nameLocations":["2470:10:51"],"nodeType":"IdentifierPath","referencedDeclaration":10615,"src":"2470:10:51"},"nodeType":"ModifierInvocation","src":"2470:10:51"}],"name":"_unpause","nameLocation":"2442:8:51","nodeType":"FunctionDefinition","parameters":{"id":10665,"nodeType":"ParameterList","parameters":[],"src":"2450:2:51"},"returnParameters":{"id":10668,"nodeType":"ParameterList","parameters":[],"src":"2481:0:51"},"scope":10680,"src":"2433:117:51","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":10681,"src":"602:1950:51","usedErrors":[]}],"src":"105:2448:51"},"id":51},"@openzeppelin/contracts/security/ReentrancyGuard.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/security/ReentrancyGuard.sol","exportedSymbols":{"ReentrancyGuard":[10734]},"id":10735,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10682,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"112:23:52"},{"abstract":true,"baseContracts":[],"canonicalName":"ReentrancyGuard","contractDependencies":[],"contractKind":"contract","documentation":{"id":10683,"nodeType":"StructuredDocumentation","src":"137:750:52","text":" @dev Contract module that helps prevent reentrant calls to a function.\n Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n available, which can be applied to functions to make sure there are no nested\n (reentrant) calls to them.\n Note that because there is a single `nonReentrant` guard, functions marked as\n `nonReentrant` may not call one another. This can be worked around by making\n those functions `private`, and then adding `external` `nonReentrant` entry\n points to them.\n TIP: If you would like to learn more about reentrancy and alternative ways\n to protect against it, check out our blog post\n https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]."},"fullyImplemented":true,"id":10734,"linearizedBaseContracts":[10734],"name":"ReentrancyGuard","nameLocation":"906:15:52","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":10686,"mutability":"constant","name":"_NOT_ENTERED","nameLocation":"1701:12:52","nodeType":"VariableDeclaration","scope":10734,"src":"1676:41:52","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10684,"name":"uint256","nodeType":"ElementaryTypeName","src":"1676:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":10685,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1716:1:52","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"private"},{"constant":true,"id":10689,"mutability":"constant","name":"_ENTERED","nameLocation":"1748:8:52","nodeType":"VariableDeclaration","scope":10734,"src":"1723:37:52","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10687,"name":"uint256","nodeType":"ElementaryTypeName","src":"1723:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":10688,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1759:1:52","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"private"},{"constant":false,"id":10691,"mutability":"mutable","name":"_status","nameLocation":"1783:7:52","nodeType":"VariableDeclaration","scope":10734,"src":"1767:23:52","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10690,"name":"uint256","nodeType":"ElementaryTypeName","src":"1767:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"body":{"id":10698,"nodeType":"Block","src":"1811:39:52","statements":[{"expression":{"id":10696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10694,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10691,"src":"1821:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10695,"name":"_NOT_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10686,"src":"1831:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1821:22:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10697,"nodeType":"ExpressionStatement","src":"1821:22:52"}]},"id":10699,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10692,"nodeType":"ParameterList","parameters":[],"src":"1808:2:52"},"returnParameters":{"id":10693,"nodeType":"ParameterList","parameters":[],"src":"1811:0:52"},"scope":10734,"src":"1797:53:52","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10709,"nodeType":"Block","src":"2251:79:52","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":10702,"name":"_nonReentrantBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10725,"src":"2261:19:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":10703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2261:21:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10704,"nodeType":"ExpressionStatement","src":"2261:21:52"},{"id":10705,"nodeType":"PlaceholderStatement","src":"2292:1:52"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":10706,"name":"_nonReentrantAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10733,"src":"2303:18:52","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":10707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2303:20:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10708,"nodeType":"ExpressionStatement","src":"2303:20:52"}]},"documentation":{"id":10700,"nodeType":"StructuredDocumentation","src":"1856:366:52","text":" @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."},"id":10710,"name":"nonReentrant","nameLocation":"2236:12:52","nodeType":"ModifierDefinition","parameters":{"id":10701,"nodeType":"ParameterList","parameters":[],"src":"2248:2:52"},"src":"2227:103:52","virtual":false,"visibility":"internal"},{"body":{"id":10724,"nodeType":"Block","src":"2375:248:52","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10714,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10691,"src":"2468:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":10715,"name":"_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10689,"src":"2479:8:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2468:19:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","id":10717,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2489:33:52","typeDescriptions":{"typeIdentifier":"t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619","typeString":"literal_string \"ReentrancyGuard: reentrant call\""},"value":"ReentrancyGuard: reentrant call"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619","typeString":"literal_string \"ReentrancyGuard: reentrant call\""}],"id":10713,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2460:7:52","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2460:63:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10719,"nodeType":"ExpressionStatement","src":"2460:63:52"},{"expression":{"id":10722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10720,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10691,"src":"2598:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10721,"name":"_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10689,"src":"2608:8:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2598:18:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10723,"nodeType":"ExpressionStatement","src":"2598:18:52"}]},"id":10725,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantBefore","nameLocation":"2345:19:52","nodeType":"FunctionDefinition","parameters":{"id":10711,"nodeType":"ParameterList","parameters":[],"src":"2364:2:52"},"returnParameters":{"id":10712,"nodeType":"ParameterList","parameters":[],"src":"2375:0:52"},"scope":10734,"src":"2336:287:52","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":10732,"nodeType":"Block","src":"2667:171:52","statements":[{"expression":{"id":10730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10728,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10691,"src":"2809:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10729,"name":"_NOT_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10686,"src":"2819:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2809:22:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10731,"nodeType":"ExpressionStatement","src":"2809:22:52"}]},"id":10733,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantAfter","nameLocation":"2638:18:52","nodeType":"FunctionDefinition","parameters":{"id":10726,"nodeType":"ParameterList","parameters":[],"src":"2656:2:52"},"returnParameters":{"id":10727,"nodeType":"ParameterList","parameters":[],"src":"2667:0:52"},"scope":10734,"src":"2629:209:52","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":10735,"src":"888:1952:52","usedErrors":[]}],"src":"112:2729:52"},"id":52},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[10812]},"id":10813,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10736,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"106:23:53"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":10737,"nodeType":"StructuredDocumentation","src":"131:70:53","text":" @dev Interface of the ERC20 standard as defined in the EIP."},"fullyImplemented":false,"id":10812,"linearizedBaseContracts":[10812],"name":"IERC20","nameLocation":"212:6:53","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":10738,"nodeType":"StructuredDocumentation","src":"225:158:53","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":10746,"name":"Transfer","nameLocation":"394:8:53","nodeType":"EventDefinition","parameters":{"id":10745,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10740,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"419:4:53","nodeType":"VariableDeclaration","scope":10746,"src":"403:20:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10739,"name":"address","nodeType":"ElementaryTypeName","src":"403:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10742,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"441:2:53","nodeType":"VariableDeclaration","scope":10746,"src":"425:18:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10741,"name":"address","nodeType":"ElementaryTypeName","src":"425:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10744,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"453:5:53","nodeType":"VariableDeclaration","scope":10746,"src":"445:13:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10743,"name":"uint256","nodeType":"ElementaryTypeName","src":"445:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"402:57:53"},"src":"388:72:53"},{"anonymous":false,"documentation":{"id":10747,"nodeType":"StructuredDocumentation","src":"466:148:53","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":10755,"name":"Approval","nameLocation":"625:8:53","nodeType":"EventDefinition","parameters":{"id":10754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10749,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"650:5:53","nodeType":"VariableDeclaration","scope":10755,"src":"634:21:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10748,"name":"address","nodeType":"ElementaryTypeName","src":"634:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10751,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"673:7:53","nodeType":"VariableDeclaration","scope":10755,"src":"657:23:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10750,"name":"address","nodeType":"ElementaryTypeName","src":"657:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10753,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"690:5:53","nodeType":"VariableDeclaration","scope":10755,"src":"682:13:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10752,"name":"uint256","nodeType":"ElementaryTypeName","src":"682:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"633:63:53"},"src":"619:78:53"},{"documentation":{"id":10756,"nodeType":"StructuredDocumentation","src":"703:66:53","text":" @dev Returns the amount of tokens in existence."},"functionSelector":"18160ddd","id":10761,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"783:11:53","nodeType":"FunctionDefinition","parameters":{"id":10757,"nodeType":"ParameterList","parameters":[],"src":"794:2:53"},"returnParameters":{"id":10760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10759,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10761,"src":"820:7:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10758,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"819:9:53"},"scope":10812,"src":"774:55:53","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10762,"nodeType":"StructuredDocumentation","src":"835:72:53","text":" @dev Returns the amount of tokens owned by `account`."},"functionSelector":"70a08231","id":10769,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"921:9:53","nodeType":"FunctionDefinition","parameters":{"id":10765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10764,"mutability":"mutable","name":"account","nameLocation":"939:7:53","nodeType":"VariableDeclaration","scope":10769,"src":"931:15:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10763,"name":"address","nodeType":"ElementaryTypeName","src":"931:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"930:17:53"},"returnParameters":{"id":10768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10767,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10769,"src":"971:7:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10766,"name":"uint256","nodeType":"ElementaryTypeName","src":"971:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"970:9:53"},"scope":10812,"src":"912:68:53","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10770,"nodeType":"StructuredDocumentation","src":"986:202:53","text":" @dev Moves `amount` tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":10779,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1202:8:53","nodeType":"FunctionDefinition","parameters":{"id":10775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10772,"mutability":"mutable","name":"to","nameLocation":"1219:2:53","nodeType":"VariableDeclaration","scope":10779,"src":"1211:10:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10771,"name":"address","nodeType":"ElementaryTypeName","src":"1211:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10774,"mutability":"mutable","name":"amount","nameLocation":"1231:6:53","nodeType":"VariableDeclaration","scope":10779,"src":"1223:14:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10773,"name":"uint256","nodeType":"ElementaryTypeName","src":"1223:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1210:28:53"},"returnParameters":{"id":10778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10777,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10779,"src":"1257:4:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10776,"name":"bool","nodeType":"ElementaryTypeName","src":"1257:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1256:6:53"},"scope":10812,"src":"1193:70:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":10780,"nodeType":"StructuredDocumentation","src":"1269:264:53","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":10789,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1547:9:53","nodeType":"FunctionDefinition","parameters":{"id":10785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10782,"mutability":"mutable","name":"owner","nameLocation":"1565:5:53","nodeType":"VariableDeclaration","scope":10789,"src":"1557:13:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10781,"name":"address","nodeType":"ElementaryTypeName","src":"1557:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10784,"mutability":"mutable","name":"spender","nameLocation":"1580:7:53","nodeType":"VariableDeclaration","scope":10789,"src":"1572:15:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10783,"name":"address","nodeType":"ElementaryTypeName","src":"1572:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1556:32:53"},"returnParameters":{"id":10788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10787,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10789,"src":"1612:7:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10786,"name":"uint256","nodeType":"ElementaryTypeName","src":"1612:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1611:9:53"},"scope":10812,"src":"1538:83:53","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10790,"nodeType":"StructuredDocumentation","src":"1627:642:53","text":" @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":10799,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2283:7:53","nodeType":"FunctionDefinition","parameters":{"id":10795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10792,"mutability":"mutable","name":"spender","nameLocation":"2299:7:53","nodeType":"VariableDeclaration","scope":10799,"src":"2291:15:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10791,"name":"address","nodeType":"ElementaryTypeName","src":"2291:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10794,"mutability":"mutable","name":"amount","nameLocation":"2316:6:53","nodeType":"VariableDeclaration","scope":10799,"src":"2308:14:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10793,"name":"uint256","nodeType":"ElementaryTypeName","src":"2308:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2290:33:53"},"returnParameters":{"id":10798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10797,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10799,"src":"2342:4:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10796,"name":"bool","nodeType":"ElementaryTypeName","src":"2342:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2341:6:53"},"scope":10812,"src":"2274:74:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":10800,"nodeType":"StructuredDocumentation","src":"2354:287:53","text":" @dev Moves `amount` tokens from `from` to `to` using the\n allowance mechanism. `amount` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":10811,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2655:12:53","nodeType":"FunctionDefinition","parameters":{"id":10807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10802,"mutability":"mutable","name":"from","nameLocation":"2685:4:53","nodeType":"VariableDeclaration","scope":10811,"src":"2677:12:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10801,"name":"address","nodeType":"ElementaryTypeName","src":"2677:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10804,"mutability":"mutable","name":"to","nameLocation":"2707:2:53","nodeType":"VariableDeclaration","scope":10811,"src":"2699:10:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10803,"name":"address","nodeType":"ElementaryTypeName","src":"2699:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10806,"mutability":"mutable","name":"amount","nameLocation":"2727:6:53","nodeType":"VariableDeclaration","scope":10811,"src":"2719:14:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10805,"name":"uint256","nodeType":"ElementaryTypeName","src":"2719:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2667:72:53"},"returnParameters":{"id":10810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10809,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10811,"src":"2758:4:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10808,"name":"bool","nodeType":"ElementaryTypeName","src":"2758:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2757:6:53"},"scope":10812,"src":"2646:118:53","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":10813,"src":"202:2564:53","usedErrors":[]}],"src":"106:2661:53"},"id":53},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","exportedSymbols":{"IERC20":[10812],"IERC20Metadata":[10837]},"id":10838,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10814,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"110:23:54"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":10815,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10838,"sourceUnit":10813,"src":"135:23:54","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":10817,"name":"IERC20","nameLocations":["305:6:54"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"305:6:54"},"id":10818,"nodeType":"InheritanceSpecifier","src":"305:6:54"}],"canonicalName":"IERC20Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":10816,"nodeType":"StructuredDocumentation","src":"160:116:54","text":" @dev Interface for the optional metadata functions from the ERC20 standard.\n _Available since v4.1._"},"fullyImplemented":false,"id":10837,"linearizedBaseContracts":[10837,10812],"name":"IERC20Metadata","nameLocation":"287:14:54","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":10819,"nodeType":"StructuredDocumentation","src":"318:54:54","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":10824,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"386:4:54","nodeType":"FunctionDefinition","parameters":{"id":10820,"nodeType":"ParameterList","parameters":[],"src":"390:2:54"},"returnParameters":{"id":10823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10822,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10824,"src":"416:13:54","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10821,"name":"string","nodeType":"ElementaryTypeName","src":"416:6:54","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"415:15:54"},"scope":10837,"src":"377:54:54","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10825,"nodeType":"StructuredDocumentation","src":"437:56:54","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":10830,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"507:6:54","nodeType":"FunctionDefinition","parameters":{"id":10826,"nodeType":"ParameterList","parameters":[],"src":"513:2:54"},"returnParameters":{"id":10829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10828,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10830,"src":"539:13:54","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10827,"name":"string","nodeType":"ElementaryTypeName","src":"539:6:54","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"538:15:54"},"scope":10837,"src":"498:56:54","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10831,"nodeType":"StructuredDocumentation","src":"560:65:54","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":10836,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"639:8:54","nodeType":"FunctionDefinition","parameters":{"id":10832,"nodeType":"ParameterList","parameters":[],"src":"647:2:54"},"returnParameters":{"id":10835,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10834,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10836,"src":"673:5:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":10833,"name":"uint8","nodeType":"ElementaryTypeName","src":"673:5:54","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"672:7:54"},"scope":10837,"src":"630:50:54","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":10838,"src":"277:405:54","usedErrors":[]}],"src":"110:573:54"},"id":54},"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol","exportedSymbols":{"IERC20Permit":[10873]},"id":10874,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10839,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"114:23:55"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Permit","contractDependencies":[],"contractKind":"interface","documentation":{"id":10840,"nodeType":"StructuredDocumentation","src":"139:480:55","text":" @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n need to send a transaction, and thus is not required to hold Ether at all."},"fullyImplemented":false,"id":10873,"linearizedBaseContracts":[10873],"name":"IERC20Permit","nameLocation":"630:12:55","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":10841,"nodeType":"StructuredDocumentation","src":"649:792:55","text":" @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n given ``owner``'s signed approval.\n IMPORTANT: The same issues {IERC20-approve} has related to transaction\n ordering also apply here.\n Emits an {Approval} event.\n Requirements:\n - `spender` cannot be the zero address.\n - `deadline` must be a timestamp in the future.\n - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n over the EIP712-formatted function arguments.\n - the signature must use ``owner``'s current nonce (see {nonces}).\n For more information on the signature format, see the\n https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n section]."},"functionSelector":"d505accf","id":10858,"implemented":false,"kind":"function","modifiers":[],"name":"permit","nameLocation":"1455:6:55","nodeType":"FunctionDefinition","parameters":{"id":10856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10843,"mutability":"mutable","name":"owner","nameLocation":"1479:5:55","nodeType":"VariableDeclaration","scope":10858,"src":"1471:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10842,"name":"address","nodeType":"ElementaryTypeName","src":"1471:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10845,"mutability":"mutable","name":"spender","nameLocation":"1502:7:55","nodeType":"VariableDeclaration","scope":10858,"src":"1494:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10844,"name":"address","nodeType":"ElementaryTypeName","src":"1494:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10847,"mutability":"mutable","name":"value","nameLocation":"1527:5:55","nodeType":"VariableDeclaration","scope":10858,"src":"1519:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10846,"name":"uint256","nodeType":"ElementaryTypeName","src":"1519:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10849,"mutability":"mutable","name":"deadline","nameLocation":"1550:8:55","nodeType":"VariableDeclaration","scope":10858,"src":"1542:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10848,"name":"uint256","nodeType":"ElementaryTypeName","src":"1542:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10851,"mutability":"mutable","name":"v","nameLocation":"1574:1:55","nodeType":"VariableDeclaration","scope":10858,"src":"1568:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":10850,"name":"uint8","nodeType":"ElementaryTypeName","src":"1568:5:55","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":10853,"mutability":"mutable","name":"r","nameLocation":"1593:1:55","nodeType":"VariableDeclaration","scope":10858,"src":"1585:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10852,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1585:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":10855,"mutability":"mutable","name":"s","nameLocation":"1612:1:55","nodeType":"VariableDeclaration","scope":10858,"src":"1604:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10854,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1604:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1461:158:55"},"returnParameters":{"id":10857,"nodeType":"ParameterList","parameters":[],"src":"1628:0:55"},"scope":10873,"src":"1446:183:55","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":10859,"nodeType":"StructuredDocumentation","src":"1635:294:55","text":" @dev Returns the current nonce for `owner`. This value must be\n included whenever a signature is generated for {permit}.\n Every successful call to {permit} increases ``owner``'s nonce by one. This\n prevents a signature from being used multiple times."},"functionSelector":"7ecebe00","id":10866,"implemented":false,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"1943:6:55","nodeType":"FunctionDefinition","parameters":{"id":10862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10861,"mutability":"mutable","name":"owner","nameLocation":"1958:5:55","nodeType":"VariableDeclaration","scope":10866,"src":"1950:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10860,"name":"address","nodeType":"ElementaryTypeName","src":"1950:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1949:15:55"},"returnParameters":{"id":10865,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10864,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10866,"src":"1988:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10863,"name":"uint256","nodeType":"ElementaryTypeName","src":"1988:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1987:9:55"},"scope":10873,"src":"1934:63:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10867,"nodeType":"StructuredDocumentation","src":"2003:128:55","text":" @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"functionSelector":"3644e515","id":10872,"implemented":false,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"2198:16:55","nodeType":"FunctionDefinition","parameters":{"id":10868,"nodeType":"ParameterList","parameters":[],"src":"2214:2:55"},"returnParameters":{"id":10871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10870,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10872,"src":"2240:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10869,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2240:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2239:9:55"},"scope":10873,"src":"2189:60:55","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":10874,"src":"620:1631:55","usedErrors":[]}],"src":"114:2138:55"},"id":55},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","exportedSymbols":{"Address":[11484],"IERC20":[10812],"IERC20Permit":[10873],"SafeERC20":[11154]},"id":11155,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10875,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"115:23:56"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":10876,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11155,"sourceUnit":10813,"src":"140:23:56","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol","file":"../extensions/draft-IERC20Permit.sol","id":10877,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11155,"sourceUnit":10874,"src":"164:46:56","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"../../../utils/Address.sol","id":10878,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11155,"sourceUnit":11485,"src":"211:36:56","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":10879,"nodeType":"StructuredDocumentation","src":"249:457:56","text":" @title SafeERC20\n @dev Wrappers around ERC20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."},"fullyImplemented":true,"id":11154,"linearizedBaseContracts":[11154],"name":"SafeERC20","nameLocation":"715:9:56","nodeType":"ContractDefinition","nodes":[{"global":false,"id":10882,"libraryName":{"id":10880,"name":"Address","nameLocations":["737:7:56"],"nodeType":"IdentifierPath","referencedDeclaration":11484,"src":"737:7:56"},"nodeType":"UsingForDirective","src":"731:26:56","typeName":{"id":10881,"name":"address","nodeType":"ElementaryTypeName","src":"749:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"body":{"id":10904,"nodeType":"Block","src":"865:103:56","statements":[{"expression":{"arguments":[{"id":10893,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10885,"src":"895:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":10896,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10885,"src":"925:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":10897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"931:8:56","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":10779,"src":"925:14:56","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":10898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"940:8:56","memberName":"selector","nodeType":"MemberAccess","src":"925:23:56","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":10899,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10887,"src":"950:2:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10900,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10889,"src":"954:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10894,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"902:3:56","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10895,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"906:18:56","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"902:22:56","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":10901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"902:58:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10892,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11153,"src":"875:19:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10812_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":10902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"875:86:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10903,"nodeType":"ExpressionStatement","src":"875:86:56"}]},"id":10905,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"772:12:56","nodeType":"FunctionDefinition","parameters":{"id":10890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10885,"mutability":"mutable","name":"token","nameLocation":"801:5:56","nodeType":"VariableDeclaration","scope":10905,"src":"794:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":10884,"nodeType":"UserDefinedTypeName","pathNode":{"id":10883,"name":"IERC20","nameLocations":["794:6:56"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"794:6:56"},"referencedDeclaration":10812,"src":"794:6:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10887,"mutability":"mutable","name":"to","nameLocation":"824:2:56","nodeType":"VariableDeclaration","scope":10905,"src":"816:10:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10886,"name":"address","nodeType":"ElementaryTypeName","src":"816:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10889,"mutability":"mutable","name":"value","nameLocation":"844:5:56","nodeType":"VariableDeclaration","scope":10905,"src":"836:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10888,"name":"uint256","nodeType":"ElementaryTypeName","src":"836:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"784:71:56"},"returnParameters":{"id":10891,"nodeType":"ParameterList","parameters":[],"src":"865:0:56"},"scope":11154,"src":"763:205:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10930,"nodeType":"Block","src":"1102:113:56","statements":[{"expression":{"arguments":[{"id":10918,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10908,"src":"1132:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":10921,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10908,"src":"1162:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":10922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1168:12:56","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":10811,"src":"1162:18:56","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":10923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1181:8:56","memberName":"selector","nodeType":"MemberAccess","src":"1162:27:56","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":10924,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10910,"src":"1191:4:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10925,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10912,"src":"1197:2:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10926,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10914,"src":"1201:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10919,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1139:3:56","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10920,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1143:18:56","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"1139:22:56","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":10927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1139:68:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10917,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11153,"src":"1112:19:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10812_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":10928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1112:96:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10929,"nodeType":"ExpressionStatement","src":"1112:96:56"}]},"id":10931,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"983:16:56","nodeType":"FunctionDefinition","parameters":{"id":10915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10908,"mutability":"mutable","name":"token","nameLocation":"1016:5:56","nodeType":"VariableDeclaration","scope":10931,"src":"1009:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":10907,"nodeType":"UserDefinedTypeName","pathNode":{"id":10906,"name":"IERC20","nameLocations":["1009:6:56"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"1009:6:56"},"referencedDeclaration":10812,"src":"1009:6:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10910,"mutability":"mutable","name":"from","nameLocation":"1039:4:56","nodeType":"VariableDeclaration","scope":10931,"src":"1031:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10909,"name":"address","nodeType":"ElementaryTypeName","src":"1031:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10912,"mutability":"mutable","name":"to","nameLocation":"1061:2:56","nodeType":"VariableDeclaration","scope":10931,"src":"1053:10:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10911,"name":"address","nodeType":"ElementaryTypeName","src":"1053:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10914,"mutability":"mutable","name":"value","nameLocation":"1081:5:56","nodeType":"VariableDeclaration","scope":10931,"src":"1073:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10913,"name":"uint256","nodeType":"ElementaryTypeName","src":"1073:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"999:93:56"},"returnParameters":{"id":10916,"nodeType":"ParameterList","parameters":[],"src":"1102:0:56"},"scope":11154,"src":"974:241:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10974,"nodeType":"Block","src":"1581:497:56","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":10958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10943,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10939,"src":"1830:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10944,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1839:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1830:10:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":10946,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1829:12:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":10951,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1870:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$11154","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$11154","typeString":"library SafeERC20"}],"id":10950,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1862:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10949,"name":"address","nodeType":"ElementaryTypeName","src":"1862:7:56","typeDescriptions":{}}},"id":10952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1862:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10953,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10937,"src":"1877:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10947,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10935,"src":"1846:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":10948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1852:9:56","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":10789,"src":"1846:15:56","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":10954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1846:39:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10955,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1889:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1846:44:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":10957,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1845:46:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1829:62:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365","id":10959,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1905:56:56","typeDescriptions":{"typeIdentifier":"t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25","typeString":"literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""},"value":"SafeERC20: approve from non-zero to non-zero allowance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25","typeString":"literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""}],"id":10942,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1808:7:56","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1808:163:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10961,"nodeType":"ExpressionStatement","src":"1808:163:56"},{"expression":{"arguments":[{"id":10963,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10935,"src":"2001:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":10966,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10935,"src":"2031:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":10967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2037:7:56","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":10799,"src":"2031:13:56","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":10968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2045:8:56","memberName":"selector","nodeType":"MemberAccess","src":"2031:22:56","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":10969,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10937,"src":"2055:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10970,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10939,"src":"2064:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10964,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2008:3:56","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10965,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2012:18:56","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2008:22:56","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":10971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2008:62:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10962,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11153,"src":"1981:19:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10812_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":10972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1981:90:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10973,"nodeType":"ExpressionStatement","src":"1981:90:56"}]},"documentation":{"id":10932,"nodeType":"StructuredDocumentation","src":"1221:249:56","text":" @dev Deprecated. This function has issues similar to the ones found in\n {IERC20-approve}, and its usage is discouraged.\n Whenever possible, use {safeIncreaseAllowance} and\n {safeDecreaseAllowance} instead."},"id":10975,"implemented":true,"kind":"function","modifiers":[],"name":"safeApprove","nameLocation":"1484:11:56","nodeType":"FunctionDefinition","parameters":{"id":10940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10935,"mutability":"mutable","name":"token","nameLocation":"1512:5:56","nodeType":"VariableDeclaration","scope":10975,"src":"1505:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":10934,"nodeType":"UserDefinedTypeName","pathNode":{"id":10933,"name":"IERC20","nameLocations":["1505:6:56"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"1505:6:56"},"referencedDeclaration":10812,"src":"1505:6:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10937,"mutability":"mutable","name":"spender","nameLocation":"1535:7:56","nodeType":"VariableDeclaration","scope":10975,"src":"1527:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10936,"name":"address","nodeType":"ElementaryTypeName","src":"1527:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10939,"mutability":"mutable","name":"value","nameLocation":"1560:5:56","nodeType":"VariableDeclaration","scope":10975,"src":"1552:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10938,"name":"uint256","nodeType":"ElementaryTypeName","src":"1552:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1495:76:56"},"returnParameters":{"id":10941,"nodeType":"ParameterList","parameters":[],"src":"1581:0:56"},"scope":11154,"src":"1475:603:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11010,"nodeType":"Block","src":"2200:194:56","statements":[{"assignments":[10986],"declarations":[{"constant":false,"id":10986,"mutability":"mutable","name":"newAllowance","nameLocation":"2218:12:56","nodeType":"VariableDeclaration","scope":11010,"src":"2210:20:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10985,"name":"uint256","nodeType":"ElementaryTypeName","src":"2210:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10997,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":10991,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2257:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$11154","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$11154","typeString":"library SafeERC20"}],"id":10990,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2249:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10989,"name":"address","nodeType":"ElementaryTypeName","src":"2249:7:56","typeDescriptions":{}}},"id":10992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2249:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10993,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10980,"src":"2264:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10987,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10978,"src":"2233:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":10988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2239:9:56","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":10789,"src":"2233:15:56","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":10994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2233:39:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":10995,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10982,"src":"2275:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2233:47:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2210:70:56"},{"expression":{"arguments":[{"id":10999,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10978,"src":"2310:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":11002,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10978,"src":"2340:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":11003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2346:7:56","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":10799,"src":"2340:13:56","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":11004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2354:8:56","memberName":"selector","nodeType":"MemberAccess","src":"2340:22:56","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":11005,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10980,"src":"2364:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11006,"name":"newAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10986,"src":"2373:12:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11000,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2317:3:56","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":11001,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2321:18:56","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2317:22:56","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":11007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2317:69:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10998,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11153,"src":"2290:19:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10812_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":11008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2290:97:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11009,"nodeType":"ExpressionStatement","src":"2290:97:56"}]},"id":11011,"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"2093:21:56","nodeType":"FunctionDefinition","parameters":{"id":10983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10978,"mutability":"mutable","name":"token","nameLocation":"2131:5:56","nodeType":"VariableDeclaration","scope":11011,"src":"2124:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":10977,"nodeType":"UserDefinedTypeName","pathNode":{"id":10976,"name":"IERC20","nameLocations":["2124:6:56"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"2124:6:56"},"referencedDeclaration":10812,"src":"2124:6:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10980,"mutability":"mutable","name":"spender","nameLocation":"2154:7:56","nodeType":"VariableDeclaration","scope":11011,"src":"2146:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10979,"name":"address","nodeType":"ElementaryTypeName","src":"2146:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10982,"mutability":"mutable","name":"value","nameLocation":"2179:5:56","nodeType":"VariableDeclaration","scope":11011,"src":"2171:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10981,"name":"uint256","nodeType":"ElementaryTypeName","src":"2171:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2114:76:56"},"returnParameters":{"id":10984,"nodeType":"ParameterList","parameters":[],"src":"2200:0:56"},"scope":11154,"src":"2084:310:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11058,"nodeType":"Block","src":"2516:370:56","statements":[{"id":11057,"nodeType":"UncheckedBlock","src":"2526:354:56","statements":[{"assignments":[11022],"declarations":[{"constant":false,"id":11022,"mutability":"mutable","name":"oldAllowance","nameLocation":"2558:12:56","nodeType":"VariableDeclaration","scope":11057,"src":"2550:20:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11021,"name":"uint256","nodeType":"ElementaryTypeName","src":"2550:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11031,"initialValue":{"arguments":[{"arguments":[{"id":11027,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2597:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$11154","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$11154","typeString":"library SafeERC20"}],"id":11026,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2589:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11025,"name":"address","nodeType":"ElementaryTypeName","src":"2589:7:56","typeDescriptions":{}}},"id":11028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2589:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11029,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11016,"src":"2604:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":11023,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11014,"src":"2573:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":11024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2579:9:56","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":10789,"src":"2573:15:56","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":11030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2573:39:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2550:62:56"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11033,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11022,"src":"2634:12:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":11034,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11018,"src":"2650:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2634:21:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5361666545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f","id":11036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2657:43:56","typeDescriptions":{"typeIdentifier":"t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a","typeString":"literal_string \"SafeERC20: decreased allowance below zero\""},"value":"SafeERC20: decreased allowance below zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a","typeString":"literal_string \"SafeERC20: decreased allowance below zero\""}],"id":11032,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2626:7:56","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2626:75:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11038,"nodeType":"ExpressionStatement","src":"2626:75:56"},{"assignments":[11040],"declarations":[{"constant":false,"id":11040,"mutability":"mutable","name":"newAllowance","nameLocation":"2723:12:56","nodeType":"VariableDeclaration","scope":11057,"src":"2715:20:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11039,"name":"uint256","nodeType":"ElementaryTypeName","src":"2715:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11044,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11041,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11022,"src":"2738:12:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":11042,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11018,"src":"2753:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2738:20:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2715:43:56"},{"expression":{"arguments":[{"id":11046,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11014,"src":"2792:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":11049,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11014,"src":"2822:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":11050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2828:7:56","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":10799,"src":"2822:13:56","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":11051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2836:8:56","memberName":"selector","nodeType":"MemberAccess","src":"2822:22:56","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":11052,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11016,"src":"2846:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11053,"name":"newAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11040,"src":"2855:12:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11047,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2799:3:56","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":11048,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2803:18:56","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2799:22:56","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":11054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2799:69:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11045,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11153,"src":"2772:19:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10812_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":11055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2772:97:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11056,"nodeType":"ExpressionStatement","src":"2772:97:56"}]}]},"id":11059,"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"2409:21:56","nodeType":"FunctionDefinition","parameters":{"id":11019,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11014,"mutability":"mutable","name":"token","nameLocation":"2447:5:56","nodeType":"VariableDeclaration","scope":11059,"src":"2440:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":11013,"nodeType":"UserDefinedTypeName","pathNode":{"id":11012,"name":"IERC20","nameLocations":["2440:6:56"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"2440:6:56"},"referencedDeclaration":10812,"src":"2440:6:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":11016,"mutability":"mutable","name":"spender","nameLocation":"2470:7:56","nodeType":"VariableDeclaration","scope":11059,"src":"2462:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11015,"name":"address","nodeType":"ElementaryTypeName","src":"2462:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11018,"mutability":"mutable","name":"value","nameLocation":"2495:5:56","nodeType":"VariableDeclaration","scope":11059,"src":"2487:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11017,"name":"uint256","nodeType":"ElementaryTypeName","src":"2487:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2430:76:56"},"returnParameters":{"id":11020,"nodeType":"ParameterList","parameters":[],"src":"2516:0:56"},"scope":11154,"src":"2400:486:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11114,"nodeType":"Block","src":"3107:257:56","statements":[{"assignments":[11080],"declarations":[{"constant":false,"id":11080,"mutability":"mutable","name":"nonceBefore","nameLocation":"3125:11:56","nodeType":"VariableDeclaration","scope":11114,"src":"3117:19:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11079,"name":"uint256","nodeType":"ElementaryTypeName","src":"3117:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11085,"initialValue":{"arguments":[{"id":11083,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11064,"src":"3152:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":11081,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11062,"src":"3139:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Permit_$10873","typeString":"contract IERC20Permit"}},"id":11082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3145:6:56","memberName":"nonces","nodeType":"MemberAccess","referencedDeclaration":10866,"src":"3139:12:56","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":11084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3139:19:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3117:41:56"},{"expression":{"arguments":[{"id":11089,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11064,"src":"3181:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11090,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11066,"src":"3188:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11091,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11068,"src":"3197:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11092,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11070,"src":"3204:8:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11093,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11072,"src":"3214:1:56","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":11094,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11074,"src":"3217:1:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11095,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11076,"src":"3220:1:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":11086,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11062,"src":"3168:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Permit_$10873","typeString":"contract IERC20Permit"}},"id":11088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3174:6:56","memberName":"permit","nodeType":"MemberAccess","referencedDeclaration":10858,"src":"3168:12:56","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (address,address,uint256,uint256,uint8,bytes32,bytes32) external"}},"id":11096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3168:54:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11097,"nodeType":"ExpressionStatement","src":"3168:54:56"},{"assignments":[11099],"declarations":[{"constant":false,"id":11099,"mutability":"mutable","name":"nonceAfter","nameLocation":"3240:10:56","nodeType":"VariableDeclaration","scope":11114,"src":"3232:18:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11098,"name":"uint256","nodeType":"ElementaryTypeName","src":"3232:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11104,"initialValue":{"arguments":[{"id":11102,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11064,"src":"3266:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":11100,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11062,"src":"3253:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Permit_$10873","typeString":"contract IERC20Permit"}},"id":11101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3259:6:56","memberName":"nonces","nodeType":"MemberAccess","referencedDeclaration":10866,"src":"3253:12:56","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":11103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3253:19:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3232:40:56"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11106,"name":"nonceAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11099,"src":"3290:10:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11107,"name":"nonceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11080,"src":"3304:11:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":11108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3318:1:56","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3304:15:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3290:29:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5361666545524332303a207065726d697420646964206e6f742073756363656564","id":11111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3321:35:56","typeDescriptions":{"typeIdentifier":"t_stringliteral_cde8e927812a7a656f8f04e89ac4f4113d47940dd2125d11fcb8e0bd36bfc59d","typeString":"literal_string \"SafeERC20: permit did not succeed\""},"value":"SafeERC20: permit did not succeed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cde8e927812a7a656f8f04e89ac4f4113d47940dd2125d11fcb8e0bd36bfc59d","typeString":"literal_string \"SafeERC20: permit did not succeed\""}],"id":11105,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3282:7:56","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3282:75:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11113,"nodeType":"ExpressionStatement","src":"3282:75:56"}]},"id":11115,"implemented":true,"kind":"function","modifiers":[],"name":"safePermit","nameLocation":"2901:10:56","nodeType":"FunctionDefinition","parameters":{"id":11077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11062,"mutability":"mutable","name":"token","nameLocation":"2934:5:56","nodeType":"VariableDeclaration","scope":11115,"src":"2921:18:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Permit_$10873","typeString":"contract IERC20Permit"},"typeName":{"id":11061,"nodeType":"UserDefinedTypeName","pathNode":{"id":11060,"name":"IERC20Permit","nameLocations":["2921:12:56"],"nodeType":"IdentifierPath","referencedDeclaration":10873,"src":"2921:12:56"},"referencedDeclaration":10873,"src":"2921:12:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Permit_$10873","typeString":"contract IERC20Permit"}},"visibility":"internal"},{"constant":false,"id":11064,"mutability":"mutable","name":"owner","nameLocation":"2957:5:56","nodeType":"VariableDeclaration","scope":11115,"src":"2949:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11063,"name":"address","nodeType":"ElementaryTypeName","src":"2949:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11066,"mutability":"mutable","name":"spender","nameLocation":"2980:7:56","nodeType":"VariableDeclaration","scope":11115,"src":"2972:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11065,"name":"address","nodeType":"ElementaryTypeName","src":"2972:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11068,"mutability":"mutable","name":"value","nameLocation":"3005:5:56","nodeType":"VariableDeclaration","scope":11115,"src":"2997:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11067,"name":"uint256","nodeType":"ElementaryTypeName","src":"2997:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11070,"mutability":"mutable","name":"deadline","nameLocation":"3028:8:56","nodeType":"VariableDeclaration","scope":11115,"src":"3020:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11069,"name":"uint256","nodeType":"ElementaryTypeName","src":"3020:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11072,"mutability":"mutable","name":"v","nameLocation":"3052:1:56","nodeType":"VariableDeclaration","scope":11115,"src":"3046:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":11071,"name":"uint8","nodeType":"ElementaryTypeName","src":"3046:5:56","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":11074,"mutability":"mutable","name":"r","nameLocation":"3071:1:56","nodeType":"VariableDeclaration","scope":11115,"src":"3063:9:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11073,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3063:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":11076,"mutability":"mutable","name":"s","nameLocation":"3090:1:56","nodeType":"VariableDeclaration","scope":11115,"src":"3082:9:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11075,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3082:7:56","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2911:186:56"},"returnParameters":{"id":11078,"nodeType":"ParameterList","parameters":[],"src":"3107:0:56"},"scope":11154,"src":"2892:472:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11152,"nodeType":"Block","src":"3817:636:56","statements":[{"assignments":[11125],"declarations":[{"constant":false,"id":11125,"mutability":"mutable","name":"returndata","nameLocation":"4179:10:56","nodeType":"VariableDeclaration","scope":11152,"src":"4166:23:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11124,"name":"bytes","nodeType":"ElementaryTypeName","src":"4166:5:56","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":11134,"initialValue":{"arguments":[{"id":11131,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11121,"src":"4220:4:56","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564","id":11132,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4226:34:56","typeDescriptions":{"typeIdentifier":"t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b","typeString":"literal_string \"SafeERC20: low-level call failed\""},"value":"SafeERC20: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b","typeString":"literal_string \"SafeERC20: low-level call failed\""}],"expression":{"arguments":[{"id":11128,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11119,"src":"4200:5:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":11127,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4192:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11126,"name":"address","nodeType":"ElementaryTypeName","src":"4192:7:56","typeDescriptions":{}}},"id":11129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4192:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4207:12:56","memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":11244,"src":"4192:27:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$","typeString":"function (address,bytes memory,string memory) returns (bytes memory)"}},"id":11133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4192:69:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4166:95:56"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11135,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11125,"src":"4275:10:56","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4286:6:56","memberName":"length","nodeType":"MemberAccess","src":"4275:17:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4295:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4275:21:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11151,"nodeType":"IfStatement","src":"4271:176:56","trueBody":{"id":11150,"nodeType":"Block","src":"4298:149:56","statements":[{"expression":{"arguments":[{"arguments":[{"id":11142,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11125,"src":"4370:10:56","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":11144,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4383:4:56","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":11143,"name":"bool","nodeType":"ElementaryTypeName","src":"4383:4:56","typeDescriptions":{}}}],"id":11145,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4382:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":11140,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4359:3:56","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":11141,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4363:6:56","memberName":"decode","nodeType":"MemberAccess","src":"4359:10:56","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":11146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4359:30:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564","id":11147,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4391:44:56","typeDescriptions":{"typeIdentifier":"t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd","typeString":"literal_string \"SafeERC20: ERC20 operation did not succeed\""},"value":"SafeERC20: ERC20 operation did not succeed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd","typeString":"literal_string \"SafeERC20: ERC20 operation did not succeed\""}],"id":11139,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4351:7:56","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4351:85:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11149,"nodeType":"ExpressionStatement","src":"4351:85:56"}]}}]},"documentation":{"id":11116,"nodeType":"StructuredDocumentation","src":"3370:372:56","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants)."},"id":11153,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"3756:19:56","nodeType":"FunctionDefinition","parameters":{"id":11122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11119,"mutability":"mutable","name":"token","nameLocation":"3783:5:56","nodeType":"VariableDeclaration","scope":11153,"src":"3776:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":11118,"nodeType":"UserDefinedTypeName","pathNode":{"id":11117,"name":"IERC20","nameLocations":["3776:6:56"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"3776:6:56"},"referencedDeclaration":10812,"src":"3776:6:56","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":11121,"mutability":"mutable","name":"data","nameLocation":"3803:4:56","nodeType":"VariableDeclaration","scope":11153,"src":"3790:17:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11120,"name":"bytes","nodeType":"ElementaryTypeName","src":"3790:5:56","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3775:33:56"},"returnParameters":{"id":11123,"nodeType":"ParameterList","parameters":[],"src":"3817:0:56"},"scope":11154,"src":"3747:706:56","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":11155,"src":"707:3748:56","usedErrors":[]}],"src":"115:4341:56"},"id":56},"@openzeppelin/contracts/utils/Address.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","exportedSymbols":{"Address":[11484]},"id":11485,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":11156,"literals":["solidity","^","0.8",".1"],"nodeType":"PragmaDirective","src":"101:23:57"},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":11157,"nodeType":"StructuredDocumentation","src":"126:67:57","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":11484,"linearizedBaseContracts":[11484],"name":"Address","nameLocation":"202:7:57","nodeType":"ContractDefinition","nodes":[{"body":{"id":11171,"nodeType":"Block","src":"1241:254:57","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":11165,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11160,"src":"1465:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1473:4:57","memberName":"code","nodeType":"MemberAccess","src":"1465:12:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1478:6:57","memberName":"length","nodeType":"MemberAccess","src":"1465:19:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1487:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1465:23:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11164,"id":11170,"nodeType":"Return","src":"1458:30:57"}]},"documentation":{"id":11158,"nodeType":"StructuredDocumentation","src":"216:954:57","text":" @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n  - an externally-owned account\n  - a contract in construction\n  - an address where a contract will be created\n  - an address where a contract lived, but was destroyed\n ====\n [IMPORTANT]\n ====\n You shouldn't rely on `isContract` to protect against flash loan attacks!\n Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n constructor.\n ===="},"id":11172,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nameLocation":"1184:10:57","nodeType":"FunctionDefinition","parameters":{"id":11161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11160,"mutability":"mutable","name":"account","nameLocation":"1203:7:57","nodeType":"VariableDeclaration","scope":11172,"src":"1195:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11159,"name":"address","nodeType":"ElementaryTypeName","src":"1195:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1194:17:57"},"returnParameters":{"id":11164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11163,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11172,"src":"1235:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11162,"name":"bool","nodeType":"ElementaryTypeName","src":"1235:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1234:6:57"},"scope":11484,"src":"1175:320:57","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11205,"nodeType":"Block","src":"2483:241:57","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11183,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2509:4:57","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$11484","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$11484","typeString":"library Address"}],"id":11182,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2501:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11181,"name":"address","nodeType":"ElementaryTypeName","src":"2501:7:57","typeDescriptions":{}}},"id":11184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2501:13:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2515:7:57","memberName":"balance","nodeType":"MemberAccess","src":"2501:21:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":11186,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11177,"src":"2526:6:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2501:31:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","id":11188,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2534:31:57","typeDescriptions":{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""},"value":"Address: insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""}],"id":11180,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2493:7:57","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2493:73:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11190,"nodeType":"ExpressionStatement","src":"2493:73:57"},{"assignments":[11192,null],"declarations":[{"constant":false,"id":11192,"mutability":"mutable","name":"success","nameLocation":"2583:7:57","nodeType":"VariableDeclaration","scope":11205,"src":"2578:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11191,"name":"bool","nodeType":"ElementaryTypeName","src":"2578:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":11199,"initialValue":{"arguments":[{"hexValue":"","id":11197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2626:2:57","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":11193,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11175,"src":"2596:9:57","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":11194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2606:4:57","memberName":"call","nodeType":"MemberAccess","src":"2596:14:57","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":11196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":11195,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11177,"src":"2618:6:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"2596:29:57","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":11198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2596:33:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"2577:52:57"},{"expression":{"arguments":[{"id":11201,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11192,"src":"2647:7:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564","id":11202,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2656:60:57","typeDescriptions":{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""},"value":"Address: unable to send value, recipient may have reverted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""}],"id":11200,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2639:7:57","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2639:78:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11204,"nodeType":"ExpressionStatement","src":"2639:78:57"}]},"documentation":{"id":11173,"nodeType":"StructuredDocumentation","src":"1501:906:57","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":11206,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"2421:9:57","nodeType":"FunctionDefinition","parameters":{"id":11178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11175,"mutability":"mutable","name":"recipient","nameLocation":"2447:9:57","nodeType":"VariableDeclaration","scope":11206,"src":"2431:25:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":11174,"name":"address","nodeType":"ElementaryTypeName","src":"2431:15:57","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":11177,"mutability":"mutable","name":"amount","nameLocation":"2466:6:57","nodeType":"VariableDeclaration","scope":11206,"src":"2458:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11176,"name":"uint256","nodeType":"ElementaryTypeName","src":"2458:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2430:43:57"},"returnParameters":{"id":11179,"nodeType":"ParameterList","parameters":[],"src":"2483:0:57"},"scope":11484,"src":"2412:312:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11223,"nodeType":"Block","src":"3555:96:57","statements":[{"expression":{"arguments":[{"id":11217,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11209,"src":"3594:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11218,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11211,"src":"3602:4:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":11219,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3608:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564","id":11220,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3611:32:57","typeDescriptions":{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""},"value":"Address: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""}],"id":11216,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[11264,11308],"referencedDeclaration":11308,"src":"3572:21:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":11221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3572:72:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11215,"id":11222,"nodeType":"Return","src":"3565:79:57"}]},"documentation":{"id":11207,"nodeType":"StructuredDocumentation","src":"2730:731:57","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"},"id":11224,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"3475:12:57","nodeType":"FunctionDefinition","parameters":{"id":11212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11209,"mutability":"mutable","name":"target","nameLocation":"3496:6:57","nodeType":"VariableDeclaration","scope":11224,"src":"3488:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11208,"name":"address","nodeType":"ElementaryTypeName","src":"3488:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11211,"mutability":"mutable","name":"data","nameLocation":"3517:4:57","nodeType":"VariableDeclaration","scope":11224,"src":"3504:17:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11210,"name":"bytes","nodeType":"ElementaryTypeName","src":"3504:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3487:35:57"},"returnParameters":{"id":11215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11214,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11224,"src":"3541:12:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11213,"name":"bytes","nodeType":"ElementaryTypeName","src":"3541:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3540:14:57"},"scope":11484,"src":"3466:185:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11243,"nodeType":"Block","src":"4020:76:57","statements":[{"expression":{"arguments":[{"id":11237,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11227,"src":"4059:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11238,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11229,"src":"4067:4:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":11239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4073:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":11240,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11231,"src":"4076:12:57","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11236,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[11264,11308],"referencedDeclaration":11308,"src":"4037:21:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":11241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4037:52:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11235,"id":11242,"nodeType":"Return","src":"4030:59:57"}]},"documentation":{"id":11225,"nodeType":"StructuredDocumentation","src":"3657:211:57","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":11244,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"3882:12:57","nodeType":"FunctionDefinition","parameters":{"id":11232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11227,"mutability":"mutable","name":"target","nameLocation":"3912:6:57","nodeType":"VariableDeclaration","scope":11244,"src":"3904:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11226,"name":"address","nodeType":"ElementaryTypeName","src":"3904:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11229,"mutability":"mutable","name":"data","nameLocation":"3941:4:57","nodeType":"VariableDeclaration","scope":11244,"src":"3928:17:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11228,"name":"bytes","nodeType":"ElementaryTypeName","src":"3928:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":11231,"mutability":"mutable","name":"errorMessage","nameLocation":"3969:12:57","nodeType":"VariableDeclaration","scope":11244,"src":"3955:26:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11230,"name":"string","nodeType":"ElementaryTypeName","src":"3955:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3894:93:57"},"returnParameters":{"id":11235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11234,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11244,"src":"4006:12:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11233,"name":"bytes","nodeType":"ElementaryTypeName","src":"4006:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4005:14:57"},"scope":11484,"src":"3873:223:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11263,"nodeType":"Block","src":"4601:111:57","statements":[{"expression":{"arguments":[{"id":11257,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11247,"src":"4640:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11258,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11249,"src":"4648:4:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":11259,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11251,"src":"4654:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564","id":11260,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4661:43:57","typeDescriptions":{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""},"value":"Address: low-level call with value failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""}],"id":11256,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[11264,11308],"referencedDeclaration":11308,"src":"4618:21:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":11261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4618:87:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11255,"id":11262,"nodeType":"Return","src":"4611:94:57"}]},"documentation":{"id":11245,"nodeType":"StructuredDocumentation","src":"4102:351:57","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"},"id":11264,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"4467:21:57","nodeType":"FunctionDefinition","parameters":{"id":11252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11247,"mutability":"mutable","name":"target","nameLocation":"4506:6:57","nodeType":"VariableDeclaration","scope":11264,"src":"4498:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11246,"name":"address","nodeType":"ElementaryTypeName","src":"4498:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11249,"mutability":"mutable","name":"data","nameLocation":"4535:4:57","nodeType":"VariableDeclaration","scope":11264,"src":"4522:17:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11248,"name":"bytes","nodeType":"ElementaryTypeName","src":"4522:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":11251,"mutability":"mutable","name":"value","nameLocation":"4557:5:57","nodeType":"VariableDeclaration","scope":11264,"src":"4549:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11250,"name":"uint256","nodeType":"ElementaryTypeName","src":"4549:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4488:80:57"},"returnParameters":{"id":11255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11254,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11264,"src":"4587:12:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11253,"name":"bytes","nodeType":"ElementaryTypeName","src":"4587:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4586:14:57"},"scope":11484,"src":"4458:254:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11307,"nodeType":"Block","src":"5139:267:57","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11281,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5165:4:57","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$11484","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$11484","typeString":"library Address"}],"id":11280,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5157:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11279,"name":"address","nodeType":"ElementaryTypeName","src":"5157:7:57","typeDescriptions":{}}},"id":11282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5157:13:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5171:7:57","memberName":"balance","nodeType":"MemberAccess","src":"5157:21:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":11284,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11271,"src":"5182:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5157:30:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c","id":11286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5189:40:57","typeDescriptions":{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""},"value":"Address: insufficient balance for call"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""}],"id":11278,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5149:7:57","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5149:81:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11288,"nodeType":"ExpressionStatement","src":"5149:81:57"},{"assignments":[11290,11292],"declarations":[{"constant":false,"id":11290,"mutability":"mutable","name":"success","nameLocation":"5246:7:57","nodeType":"VariableDeclaration","scope":11307,"src":"5241:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11289,"name":"bool","nodeType":"ElementaryTypeName","src":"5241:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11292,"mutability":"mutable","name":"returndata","nameLocation":"5268:10:57","nodeType":"VariableDeclaration","scope":11307,"src":"5255:23:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11291,"name":"bytes","nodeType":"ElementaryTypeName","src":"5255:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":11299,"initialValue":{"arguments":[{"id":11297,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11269,"src":"5308:4:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":11293,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11267,"src":"5282:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5289:4:57","memberName":"call","nodeType":"MemberAccess","src":"5282:11:57","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":11296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":11295,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11271,"src":"5301:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"5282:25:57","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":11298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5282:31:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5240:73:57"},{"expression":{"arguments":[{"id":11301,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11267,"src":"5357:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11302,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11290,"src":"5365:7:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":11303,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11292,"src":"5374:10:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":11304,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11273,"src":"5386:12:57","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11300,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11439,"src":"5330:26:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":11305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5330:69:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11277,"id":11306,"nodeType":"Return","src":"5323:76:57"}]},"documentation":{"id":11265,"nodeType":"StructuredDocumentation","src":"4718:237:57","text":" @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":11308,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"4969:21:57","nodeType":"FunctionDefinition","parameters":{"id":11274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11267,"mutability":"mutable","name":"target","nameLocation":"5008:6:57","nodeType":"VariableDeclaration","scope":11308,"src":"5000:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11266,"name":"address","nodeType":"ElementaryTypeName","src":"5000:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11269,"mutability":"mutable","name":"data","nameLocation":"5037:4:57","nodeType":"VariableDeclaration","scope":11308,"src":"5024:17:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11268,"name":"bytes","nodeType":"ElementaryTypeName","src":"5024:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":11271,"mutability":"mutable","name":"value","nameLocation":"5059:5:57","nodeType":"VariableDeclaration","scope":11308,"src":"5051:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11270,"name":"uint256","nodeType":"ElementaryTypeName","src":"5051:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11273,"mutability":"mutable","name":"errorMessage","nameLocation":"5088:12:57","nodeType":"VariableDeclaration","scope":11308,"src":"5074:26:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11272,"name":"string","nodeType":"ElementaryTypeName","src":"5074:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4990:116:57"},"returnParameters":{"id":11277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11276,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11308,"src":"5125:12:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11275,"name":"bytes","nodeType":"ElementaryTypeName","src":"5125:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5124:14:57"},"scope":11484,"src":"4960:446:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11324,"nodeType":"Block","src":"5683:97:57","statements":[{"expression":{"arguments":[{"id":11319,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11311,"src":"5719:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11320,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11313,"src":"5727:4:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564","id":11321,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5733:39:57","typeDescriptions":{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""},"value":"Address: low-level static call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""}],"id":11318,"name":"functionStaticCall","nodeType":"Identifier","overloadedDeclarations":[11325,11354],"referencedDeclaration":11354,"src":"5700:18:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) view returns (bytes memory)"}},"id":11322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5700:73:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11317,"id":11323,"nodeType":"Return","src":"5693:80:57"}]},"documentation":{"id":11309,"nodeType":"StructuredDocumentation","src":"5412:166:57","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":11325,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"5592:18:57","nodeType":"FunctionDefinition","parameters":{"id":11314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11311,"mutability":"mutable","name":"target","nameLocation":"5619:6:57","nodeType":"VariableDeclaration","scope":11325,"src":"5611:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11310,"name":"address","nodeType":"ElementaryTypeName","src":"5611:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11313,"mutability":"mutable","name":"data","nameLocation":"5640:4:57","nodeType":"VariableDeclaration","scope":11325,"src":"5627:17:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11312,"name":"bytes","nodeType":"ElementaryTypeName","src":"5627:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5610:35:57"},"returnParameters":{"id":11317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11316,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11325,"src":"5669:12:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11315,"name":"bytes","nodeType":"ElementaryTypeName","src":"5669:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5668:14:57"},"scope":11484,"src":"5583:197:57","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11353,"nodeType":"Block","src":"6122:168:57","statements":[{"assignments":[11338,11340],"declarations":[{"constant":false,"id":11338,"mutability":"mutable","name":"success","nameLocation":"6138:7:57","nodeType":"VariableDeclaration","scope":11353,"src":"6133:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11337,"name":"bool","nodeType":"ElementaryTypeName","src":"6133:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11340,"mutability":"mutable","name":"returndata","nameLocation":"6160:10:57","nodeType":"VariableDeclaration","scope":11353,"src":"6147:23:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11339,"name":"bytes","nodeType":"ElementaryTypeName","src":"6147:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":11345,"initialValue":{"arguments":[{"id":11343,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11330,"src":"6192:4:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":11341,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11328,"src":"6174:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6181:10:57","memberName":"staticcall","nodeType":"MemberAccess","src":"6174:17:57","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":11344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6174:23:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6132:65:57"},{"expression":{"arguments":[{"id":11347,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11328,"src":"6241:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11348,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11338,"src":"6249:7:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":11349,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11340,"src":"6258:10:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":11350,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11332,"src":"6270:12:57","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11346,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11439,"src":"6214:26:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":11351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6214:69:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11336,"id":11352,"nodeType":"Return","src":"6207:76:57"}]},"documentation":{"id":11326,"nodeType":"StructuredDocumentation","src":"5786:173:57","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":11354,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"5973:18:57","nodeType":"FunctionDefinition","parameters":{"id":11333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11328,"mutability":"mutable","name":"target","nameLocation":"6009:6:57","nodeType":"VariableDeclaration","scope":11354,"src":"6001:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11327,"name":"address","nodeType":"ElementaryTypeName","src":"6001:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11330,"mutability":"mutable","name":"data","nameLocation":"6038:4:57","nodeType":"VariableDeclaration","scope":11354,"src":"6025:17:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11329,"name":"bytes","nodeType":"ElementaryTypeName","src":"6025:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":11332,"mutability":"mutable","name":"errorMessage","nameLocation":"6066:12:57","nodeType":"VariableDeclaration","scope":11354,"src":"6052:26:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11331,"name":"string","nodeType":"ElementaryTypeName","src":"6052:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5991:93:57"},"returnParameters":{"id":11336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11335,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11354,"src":"6108:12:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11334,"name":"bytes","nodeType":"ElementaryTypeName","src":"6108:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6107:14:57"},"scope":11484,"src":"5964:326:57","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11370,"nodeType":"Block","src":"6566:101:57","statements":[{"expression":{"arguments":[{"id":11365,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11357,"src":"6604:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11366,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11359,"src":"6612:4:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564","id":11367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6618:41:57","typeDescriptions":{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""},"value":"Address: low-level delegate call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""}],"id":11364,"name":"functionDelegateCall","nodeType":"Identifier","overloadedDeclarations":[11371,11400],"referencedDeclaration":11400,"src":"6583:20:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) returns (bytes memory)"}},"id":11368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6583:77:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11363,"id":11369,"nodeType":"Return","src":"6576:84:57"}]},"documentation":{"id":11355,"nodeType":"StructuredDocumentation","src":"6296:168:57","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":11371,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"6478:20:57","nodeType":"FunctionDefinition","parameters":{"id":11360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11357,"mutability":"mutable","name":"target","nameLocation":"6507:6:57","nodeType":"VariableDeclaration","scope":11371,"src":"6499:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11356,"name":"address","nodeType":"ElementaryTypeName","src":"6499:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11359,"mutability":"mutable","name":"data","nameLocation":"6528:4:57","nodeType":"VariableDeclaration","scope":11371,"src":"6515:17:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11358,"name":"bytes","nodeType":"ElementaryTypeName","src":"6515:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6498:35:57"},"returnParameters":{"id":11363,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11362,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11371,"src":"6552:12:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11361,"name":"bytes","nodeType":"ElementaryTypeName","src":"6552:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6551:14:57"},"scope":11484,"src":"6469:198:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11399,"nodeType":"Block","src":"7008:170:57","statements":[{"assignments":[11384,11386],"declarations":[{"constant":false,"id":11384,"mutability":"mutable","name":"success","nameLocation":"7024:7:57","nodeType":"VariableDeclaration","scope":11399,"src":"7019:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11383,"name":"bool","nodeType":"ElementaryTypeName","src":"7019:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11386,"mutability":"mutable","name":"returndata","nameLocation":"7046:10:57","nodeType":"VariableDeclaration","scope":11399,"src":"7033:23:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11385,"name":"bytes","nodeType":"ElementaryTypeName","src":"7033:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":11391,"initialValue":{"arguments":[{"id":11389,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11376,"src":"7080:4:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":11387,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11374,"src":"7060:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7067:12:57","memberName":"delegatecall","nodeType":"MemberAccess","src":"7060:19:57","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":11390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7060:25:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"7018:67:57"},{"expression":{"arguments":[{"id":11393,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11374,"src":"7129:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11394,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11384,"src":"7137:7:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":11395,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11386,"src":"7146:10:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":11396,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11378,"src":"7158:12:57","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11392,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11439,"src":"7102:26:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":11397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7102:69:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11382,"id":11398,"nodeType":"Return","src":"7095:76:57"}]},"documentation":{"id":11372,"nodeType":"StructuredDocumentation","src":"6673:175:57","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":11400,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"6862:20:57","nodeType":"FunctionDefinition","parameters":{"id":11379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11374,"mutability":"mutable","name":"target","nameLocation":"6900:6:57","nodeType":"VariableDeclaration","scope":11400,"src":"6892:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11373,"name":"address","nodeType":"ElementaryTypeName","src":"6892:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11376,"mutability":"mutable","name":"data","nameLocation":"6929:4:57","nodeType":"VariableDeclaration","scope":11400,"src":"6916:17:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11375,"name":"bytes","nodeType":"ElementaryTypeName","src":"6916:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":11378,"mutability":"mutable","name":"errorMessage","nameLocation":"6957:12:57","nodeType":"VariableDeclaration","scope":11400,"src":"6943:26:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11377,"name":"string","nodeType":"ElementaryTypeName","src":"6943:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6882:93:57"},"returnParameters":{"id":11382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11381,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11400,"src":"6994:12:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11380,"name":"bytes","nodeType":"ElementaryTypeName","src":"6994:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6993:14:57"},"scope":11484,"src":"6853:325:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11438,"nodeType":"Block","src":"7660:434:57","statements":[{"condition":{"id":11414,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11405,"src":"7674:7:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11436,"nodeType":"Block","src":"8030:58:57","statements":[{"expression":{"arguments":[{"id":11432,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11407,"src":"8052:10:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":11433,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11409,"src":"8064:12:57","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11431,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11483,"src":"8044:7:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (bytes memory,string memory) pure"}},"id":11434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8044:33:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11435,"nodeType":"ExpressionStatement","src":"8044:33:57"}]},"id":11437,"nodeType":"IfStatement","src":"7670:418:57","trueBody":{"id":11430,"nodeType":"Block","src":"7683:341:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11415,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11407,"src":"7701:10:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7712:6:57","memberName":"length","nodeType":"MemberAccess","src":"7701:17:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11417,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7722:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7701:22:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11427,"nodeType":"IfStatement","src":"7697:286:57","trueBody":{"id":11426,"nodeType":"Block","src":"7725:258:57","statements":[{"expression":{"arguments":[{"arguments":[{"id":11421,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11403,"src":"7927:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11420,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11172,"src":"7916:10:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":11422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7916:18:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","id":11423,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7936:31:57","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""},"value":"Address: call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""}],"id":11419,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7908:7:57","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7908:60:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11425,"nodeType":"ExpressionStatement","src":"7908:60:57"}]}},{"expression":{"id":11428,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11407,"src":"8003:10:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11413,"id":11429,"nodeType":"Return","src":"7996:17:57"}]}}]},"documentation":{"id":11401,"nodeType":"StructuredDocumentation","src":"7184:277:57","text":" @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n _Available since v4.8._"},"id":11439,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"7475:26:57","nodeType":"FunctionDefinition","parameters":{"id":11410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11403,"mutability":"mutable","name":"target","nameLocation":"7519:6:57","nodeType":"VariableDeclaration","scope":11439,"src":"7511:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11402,"name":"address","nodeType":"ElementaryTypeName","src":"7511:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11405,"mutability":"mutable","name":"success","nameLocation":"7540:7:57","nodeType":"VariableDeclaration","scope":11439,"src":"7535:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11404,"name":"bool","nodeType":"ElementaryTypeName","src":"7535:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11407,"mutability":"mutable","name":"returndata","nameLocation":"7570:10:57","nodeType":"VariableDeclaration","scope":11439,"src":"7557:23:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11406,"name":"bytes","nodeType":"ElementaryTypeName","src":"7557:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":11409,"mutability":"mutable","name":"errorMessage","nameLocation":"7604:12:57","nodeType":"VariableDeclaration","scope":11439,"src":"7590:26:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11408,"name":"string","nodeType":"ElementaryTypeName","src":"7590:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7501:121:57"},"returnParameters":{"id":11413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11412,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11439,"src":"7646:12:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11411,"name":"bytes","nodeType":"ElementaryTypeName","src":"7646:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7645:14:57"},"scope":11484,"src":"7466:628:57","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11462,"nodeType":"Block","src":"8475:135:57","statements":[{"condition":{"id":11451,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11442,"src":"8489:7:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11460,"nodeType":"Block","src":"8546:58:57","statements":[{"expression":{"arguments":[{"id":11456,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11444,"src":"8568:10:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":11457,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11446,"src":"8580:12:57","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11455,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11483,"src":"8560:7:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (bytes memory,string memory) pure"}},"id":11458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8560:33:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11459,"nodeType":"ExpressionStatement","src":"8560:33:57"}]},"id":11461,"nodeType":"IfStatement","src":"8485:119:57","trueBody":{"id":11454,"nodeType":"Block","src":"8498:42:57","statements":[{"expression":{"id":11452,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11444,"src":"8519:10:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11450,"id":11453,"nodeType":"Return","src":"8512:17:57"}]}}]},"documentation":{"id":11440,"nodeType":"StructuredDocumentation","src":"8100:210:57","text":" @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason or using the provided one.\n _Available since v4.3._"},"id":11463,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"8324:16:57","nodeType":"FunctionDefinition","parameters":{"id":11447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11442,"mutability":"mutable","name":"success","nameLocation":"8355:7:57","nodeType":"VariableDeclaration","scope":11463,"src":"8350:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11441,"name":"bool","nodeType":"ElementaryTypeName","src":"8350:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11444,"mutability":"mutable","name":"returndata","nameLocation":"8385:10:57","nodeType":"VariableDeclaration","scope":11463,"src":"8372:23:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11443,"name":"bytes","nodeType":"ElementaryTypeName","src":"8372:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":11446,"mutability":"mutable","name":"errorMessage","nameLocation":"8419:12:57","nodeType":"VariableDeclaration","scope":11463,"src":"8405:26:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11445,"name":"string","nodeType":"ElementaryTypeName","src":"8405:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"8340:97:57"},"returnParameters":{"id":11450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11449,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11463,"src":"8461:12:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11448,"name":"bytes","nodeType":"ElementaryTypeName","src":"8461:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8460:14:57"},"scope":11484,"src":"8315:295:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11482,"nodeType":"Block","src":"8699:457:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11470,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11465,"src":"8775:10:57","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8786:6:57","memberName":"length","nodeType":"MemberAccess","src":"8775:17:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8795:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8775:21:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11480,"nodeType":"Block","src":"9105:45:57","statements":[{"expression":{"arguments":[{"id":11477,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11467,"src":"9126:12:57","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11476,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"9119:6:57","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":11478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9119:20:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11479,"nodeType":"ExpressionStatement","src":"9119:20:57"}]},"id":11481,"nodeType":"IfStatement","src":"8771:379:57","trueBody":{"id":11475,"nodeType":"Block","src":"8798:301:57","statements":[{"AST":{"nodeType":"YulBlock","src":"8956:133:57","statements":[{"nodeType":"YulVariableDeclaration","src":"8974:40:57","value":{"arguments":[{"name":"returndata","nodeType":"YulIdentifier","src":"9003:10:57"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8997:5:57"},"nodeType":"YulFunctionCall","src":"8997:17:57"},"variables":[{"name":"returndata_size","nodeType":"YulTypedName","src":"8978:15:57","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9042:2:57","type":"","value":"32"},{"name":"returndata","nodeType":"YulIdentifier","src":"9046:10:57"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9038:3:57"},"nodeType":"YulFunctionCall","src":"9038:19:57"},{"name":"returndata_size","nodeType":"YulIdentifier","src":"9059:15:57"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9031:6:57"},"nodeType":"YulFunctionCall","src":"9031:44:57"},"nodeType":"YulExpressionStatement","src":"9031:44:57"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"london","externalReferences":[{"declaration":11465,"isOffset":false,"isSlot":false,"src":"9003:10:57","valueSize":1},{"declaration":11465,"isOffset":false,"isSlot":false,"src":"9046:10:57","valueSize":1}],"id":11474,"nodeType":"InlineAssembly","src":"8947:142:57"}]}}]},"id":11483,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"8625:7:57","nodeType":"FunctionDefinition","parameters":{"id":11468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11465,"mutability":"mutable","name":"returndata","nameLocation":"8646:10:57","nodeType":"VariableDeclaration","scope":11483,"src":"8633:23:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11464,"name":"bytes","nodeType":"ElementaryTypeName","src":"8633:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":11467,"mutability":"mutable","name":"errorMessage","nameLocation":"8672:12:57","nodeType":"VariableDeclaration","scope":11483,"src":"8658:26:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11466,"name":"string","nodeType":"ElementaryTypeName","src":"8658:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"8632:53:57"},"returnParameters":{"id":11469,"nodeType":"ParameterList","parameters":[],"src":"8699:0:57"},"scope":11484,"src":"8616:540:57","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":11485,"src":"194:8964:57","usedErrors":[]}],"src":"101:9058:57"},"id":57},"@openzeppelin/contracts/utils/Context.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","exportedSymbols":{"Context":[11506]},"id":11507,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":11486,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"86:23:58"},{"abstract":true,"baseContracts":[],"canonicalName":"Context","contractDependencies":[],"contractKind":"contract","documentation":{"id":11487,"nodeType":"StructuredDocumentation","src":"111:496:58","text":" @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."},"fullyImplemented":true,"id":11506,"linearizedBaseContracts":[11506],"name":"Context","nameLocation":"626:7:58","nodeType":"ContractDefinition","nodes":[{"body":{"id":11495,"nodeType":"Block","src":"702:34:58","statements":[{"expression":{"expression":{"id":11492,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"719:3:58","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":11493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"723:6:58","memberName":"sender","nodeType":"MemberAccess","src":"719:10:58","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":11491,"id":11494,"nodeType":"Return","src":"712:17:58"}]},"id":11496,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"649:10:58","nodeType":"FunctionDefinition","parameters":{"id":11488,"nodeType":"ParameterList","parameters":[],"src":"659:2:58"},"returnParameters":{"id":11491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11490,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11496,"src":"693:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11489,"name":"address","nodeType":"ElementaryTypeName","src":"693:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"692:9:58"},"scope":11506,"src":"640:96:58","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":11504,"nodeType":"Block","src":"809:32:58","statements":[{"expression":{"expression":{"id":11501,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"826:3:58","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":11502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"830:4:58","memberName":"data","nodeType":"MemberAccess","src":"826:8:58","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":11500,"id":11503,"nodeType":"Return","src":"819:15:58"}]},"id":11505,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"751:8:58","nodeType":"FunctionDefinition","parameters":{"id":11497,"nodeType":"ParameterList","parameters":[],"src":"759:2:58"},"returnParameters":{"id":11500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11499,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11505,"src":"793:14:58","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":11498,"name":"bytes","nodeType":"ElementaryTypeName","src":"793:5:58","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"792:16:58"},"scope":11506,"src":"742:99:58","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":11507,"src":"608:235:58","usedErrors":[]}],"src":"86:758:58"},"id":58},"@openzeppelin/contracts/utils/Counters.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Counters.sol","exportedSymbols":{"Counters":[11580]},"id":11581,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":11508,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"87:23:59"},{"abstract":false,"baseContracts":[],"canonicalName":"Counters","contractDependencies":[],"contractKind":"library","documentation":{"id":11509,"nodeType":"StructuredDocumentation","src":"112:311:59","text":" @title Counters\n @author Matt Condon (@shrugs)\n @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\n of elements in a mapping, issuing ERC721 ids, or counting request ids.\n Include with `using Counters for Counters.Counter;`"},"fullyImplemented":true,"id":11580,"linearizedBaseContracts":[11580],"name":"Counters","nameLocation":"432:8:59","nodeType":"ContractDefinition","nodes":[{"canonicalName":"Counters.Counter","id":11512,"members":[{"constant":false,"id":11511,"mutability":"mutable","name":"_value","nameLocation":"794:6:59","nodeType":"VariableDeclaration","scope":11512,"src":"786:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11510,"name":"uint256","nodeType":"ElementaryTypeName","src":"786:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Counter","nameLocation":"454:7:59","nodeType":"StructDefinition","scope":11580,"src":"447:374:59","visibility":"public"},{"body":{"id":11523,"nodeType":"Block","src":"901:38:59","statements":[{"expression":{"expression":{"id":11520,"name":"counter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11515,"src":"918:7:59","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter storage pointer"}},"id":11521,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"926:6:59","memberName":"_value","nodeType":"MemberAccess","referencedDeclaration":11511,"src":"918:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11519,"id":11522,"nodeType":"Return","src":"911:21:59"}]},"id":11524,"implemented":true,"kind":"function","modifiers":[],"name":"current","nameLocation":"836:7:59","nodeType":"FunctionDefinition","parameters":{"id":11516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11515,"mutability":"mutable","name":"counter","nameLocation":"860:7:59","nodeType":"VariableDeclaration","scope":11524,"src":"844:23:59","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter"},"typeName":{"id":11514,"nodeType":"UserDefinedTypeName","pathNode":{"id":11513,"name":"Counter","nameLocations":["844:7:59"],"nodeType":"IdentifierPath","referencedDeclaration":11512,"src":"844:7:59"},"referencedDeclaration":11512,"src":"844:7:59","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter"}},"visibility":"internal"}],"src":"843:25:59"},"returnParameters":{"id":11519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11518,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11524,"src":"892:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11517,"name":"uint256","nodeType":"ElementaryTypeName","src":"892:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"891:9:59"},"scope":11580,"src":"827:112:59","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11537,"nodeType":"Block","src":"998:70:59","statements":[{"id":11536,"nodeType":"UncheckedBlock","src":"1008:54:59","statements":[{"expression":{"id":11534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11530,"name":"counter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11527,"src":"1032:7:59","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter storage pointer"}},"id":11532,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1040:6:59","memberName":"_value","nodeType":"MemberAccess","referencedDeclaration":11511,"src":"1032:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":11533,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1050:1:59","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1032:19:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11535,"nodeType":"ExpressionStatement","src":"1032:19:59"}]}]},"id":11538,"implemented":true,"kind":"function","modifiers":[],"name":"increment","nameLocation":"954:9:59","nodeType":"FunctionDefinition","parameters":{"id":11528,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11527,"mutability":"mutable","name":"counter","nameLocation":"980:7:59","nodeType":"VariableDeclaration","scope":11538,"src":"964:23:59","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter"},"typeName":{"id":11526,"nodeType":"UserDefinedTypeName","pathNode":{"id":11525,"name":"Counter","nameLocations":["964:7:59"],"nodeType":"IdentifierPath","referencedDeclaration":11512,"src":"964:7:59"},"referencedDeclaration":11512,"src":"964:7:59","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter"}},"visibility":"internal"}],"src":"963:25:59"},"returnParameters":{"id":11529,"nodeType":"ParameterList","parameters":[],"src":"998:0:59"},"scope":11580,"src":"945:123:59","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11565,"nodeType":"Block","src":"1127:176:59","statements":[{"assignments":[11545],"declarations":[{"constant":false,"id":11545,"mutability":"mutable","name":"value","nameLocation":"1145:5:59","nodeType":"VariableDeclaration","scope":11565,"src":"1137:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11544,"name":"uint256","nodeType":"ElementaryTypeName","src":"1137:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11548,"initialValue":{"expression":{"id":11546,"name":"counter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11541,"src":"1153:7:59","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter storage pointer"}},"id":11547,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1161:6:59","memberName":"_value","nodeType":"MemberAccess","referencedDeclaration":11511,"src":"1153:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1137:30:59"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11550,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11545,"src":"1185:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11551,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1193:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1185:9:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"436f756e7465723a2064656372656d656e74206f766572666c6f77","id":11553,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1196:29:59","typeDescriptions":{"typeIdentifier":"t_stringliteral_1dfd0d5389474d871b8e8929aab9d4def041f55f90f625754fb5f9a9ba08af6f","typeString":"literal_string \"Counter: decrement overflow\""},"value":"Counter: decrement overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1dfd0d5389474d871b8e8929aab9d4def041f55f90f625754fb5f9a9ba08af6f","typeString":"literal_string \"Counter: decrement overflow\""}],"id":11549,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1177:7:59","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1177:49:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11555,"nodeType":"ExpressionStatement","src":"1177:49:59"},{"id":11564,"nodeType":"UncheckedBlock","src":"1236:61:59","statements":[{"expression":{"id":11562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11556,"name":"counter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11541,"src":"1260:7:59","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter storage pointer"}},"id":11558,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1268:6:59","memberName":"_value","nodeType":"MemberAccess","referencedDeclaration":11511,"src":"1260:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11559,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11545,"src":"1277:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11560,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1285:1:59","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1277:9:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1260:26:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11563,"nodeType":"ExpressionStatement","src":"1260:26:59"}]}]},"id":11566,"implemented":true,"kind":"function","modifiers":[],"name":"decrement","nameLocation":"1083:9:59","nodeType":"FunctionDefinition","parameters":{"id":11542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11541,"mutability":"mutable","name":"counter","nameLocation":"1109:7:59","nodeType":"VariableDeclaration","scope":11566,"src":"1093:23:59","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter"},"typeName":{"id":11540,"nodeType":"UserDefinedTypeName","pathNode":{"id":11539,"name":"Counter","nameLocations":["1093:7:59"],"nodeType":"IdentifierPath","referencedDeclaration":11512,"src":"1093:7:59"},"referencedDeclaration":11512,"src":"1093:7:59","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter"}},"visibility":"internal"}],"src":"1092:25:59"},"returnParameters":{"id":11543,"nodeType":"ParameterList","parameters":[],"src":"1127:0:59"},"scope":11580,"src":"1074:229:59","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11578,"nodeType":"Block","src":"1358:35:59","statements":[{"expression":{"id":11576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11572,"name":"counter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11569,"src":"1368:7:59","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter storage pointer"}},"id":11574,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1376:6:59","memberName":"_value","nodeType":"MemberAccess","referencedDeclaration":11511,"src":"1368:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":11575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1385:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1368:18:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11577,"nodeType":"ExpressionStatement","src":"1368:18:59"}]},"id":11579,"implemented":true,"kind":"function","modifiers":[],"name":"reset","nameLocation":"1318:5:59","nodeType":"FunctionDefinition","parameters":{"id":11570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11569,"mutability":"mutable","name":"counter","nameLocation":"1340:7:59","nodeType":"VariableDeclaration","scope":11579,"src":"1324:23:59","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter"},"typeName":{"id":11568,"nodeType":"UserDefinedTypeName","pathNode":{"id":11567,"name":"Counter","nameLocations":["1324:7:59"],"nodeType":"IdentifierPath","referencedDeclaration":11512,"src":"1324:7:59"},"referencedDeclaration":11512,"src":"1324:7:59","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter"}},"visibility":"internal"}],"src":"1323:25:59"},"returnParameters":{"id":11571,"nodeType":"ParameterList","parameters":[],"src":"1358:0:59"},"scope":11580,"src":"1309:84:59","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":11581,"src":"424:971:59","usedErrors":[]}],"src":"87:1309:59"},"id":59},"@openzeppelin/contracts/utils/StorageSlot.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","exportedSymbols":{"StorageSlot":[11640]},"id":11641,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":11582,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"105:23:60"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlot","contractDependencies":[],"contractKind":"library","documentation":{"id":11583,"nodeType":"StructuredDocumentation","src":"130:1148:60","text":" @dev Library for reading and writing primitive types to specific storage slots.\n Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n This library helps with reading and writing to such slots without the need for inline assembly.\n The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n Example usage to set ERC1967 implementation slot:\n ```\n contract ERC1967 {\n     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n     function _getImplementation() internal view returns (address) {\n         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n     }\n     function _setImplementation(address newImplementation) internal {\n         require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n     }\n }\n ```\n _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._"},"fullyImplemented":true,"id":11640,"linearizedBaseContracts":[11640],"name":"StorageSlot","nameLocation":"1287:11:60","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlot.AddressSlot","id":11586,"members":[{"constant":false,"id":11585,"mutability":"mutable","name":"value","nameLocation":"1342:5:60","nodeType":"VariableDeclaration","scope":11586,"src":"1334:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11584,"name":"address","nodeType":"ElementaryTypeName","src":"1334:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"AddressSlot","nameLocation":"1312:11:60","nodeType":"StructDefinition","scope":11640,"src":"1305:49:60","visibility":"public"},{"canonicalName":"StorageSlot.BooleanSlot","id":11589,"members":[{"constant":false,"id":11588,"mutability":"mutable","name":"value","nameLocation":"1394:5:60","nodeType":"VariableDeclaration","scope":11589,"src":"1389:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11587,"name":"bool","nodeType":"ElementaryTypeName","src":"1389:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"BooleanSlot","nameLocation":"1367:11:60","nodeType":"StructDefinition","scope":11640,"src":"1360:46:60","visibility":"public"},{"canonicalName":"StorageSlot.Bytes32Slot","id":11592,"members":[{"constant":false,"id":11591,"mutability":"mutable","name":"value","nameLocation":"1449:5:60","nodeType":"VariableDeclaration","scope":11592,"src":"1441:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11590,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1441:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"Bytes32Slot","nameLocation":"1419:11:60","nodeType":"StructDefinition","scope":11640,"src":"1412:49:60","visibility":"public"},{"canonicalName":"StorageSlot.Uint256Slot","id":11595,"members":[{"constant":false,"id":11594,"mutability":"mutable","name":"value","nameLocation":"1504:5:60","nodeType":"VariableDeclaration","scope":11595,"src":"1496:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11593,"name":"uint256","nodeType":"ElementaryTypeName","src":"1496:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Uint256Slot","nameLocation":"1474:11:60","nodeType":"StructDefinition","scope":11640,"src":"1467:49:60","visibility":"public"},{"body":{"id":11605,"nodeType":"Block","src":"1698:106:60","statements":[{"AST":{"nodeType":"YulBlock","src":"1760:38:60","statements":[{"nodeType":"YulAssignment","src":"1774:14:60","value":{"name":"slot","nodeType":"YulIdentifier","src":"1784:4:60"},"variableNames":[{"name":"r.slot","nodeType":"YulIdentifier","src":"1774:6:60"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"london","externalReferences":[{"declaration":11602,"isOffset":false,"isSlot":true,"src":"1774:6:60","suffix":"slot","valueSize":1},{"declaration":11598,"isOffset":false,"isSlot":false,"src":"1784:4:60","valueSize":1}],"id":11604,"nodeType":"InlineAssembly","src":"1751:47:60"}]},"documentation":{"id":11596,"nodeType":"StructuredDocumentation","src":"1522:87:60","text":" @dev Returns an `AddressSlot` with member `value` located at `slot`."},"id":11606,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressSlot","nameLocation":"1623:14:60","nodeType":"FunctionDefinition","parameters":{"id":11599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11598,"mutability":"mutable","name":"slot","nameLocation":"1646:4:60","nodeType":"VariableDeclaration","scope":11606,"src":"1638:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11597,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1638:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1637:14:60"},"returnParameters":{"id":11603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11602,"mutability":"mutable","name":"r","nameLocation":"1695:1:60","nodeType":"VariableDeclaration","scope":11606,"src":"1675:21:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$11586_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":11601,"nodeType":"UserDefinedTypeName","pathNode":{"id":11600,"name":"AddressSlot","nameLocations":["1675:11:60"],"nodeType":"IdentifierPath","referencedDeclaration":11586,"src":"1675:11:60"},"referencedDeclaration":11586,"src":"1675:11:60","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$11586_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"src":"1674:23:60"},"scope":11640,"src":"1614:190:60","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11616,"nodeType":"Block","src":"1986:106:60","statements":[{"AST":{"nodeType":"YulBlock","src":"2048:38:60","statements":[{"nodeType":"YulAssignment","src":"2062:14:60","value":{"name":"slot","nodeType":"YulIdentifier","src":"2072:4:60"},"variableNames":[{"name":"r.slot","nodeType":"YulIdentifier","src":"2062:6:60"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"london","externalReferences":[{"declaration":11613,"isOffset":false,"isSlot":true,"src":"2062:6:60","suffix":"slot","valueSize":1},{"declaration":11609,"isOffset":false,"isSlot":false,"src":"2072:4:60","valueSize":1}],"id":11615,"nodeType":"InlineAssembly","src":"2039:47:60"}]},"documentation":{"id":11607,"nodeType":"StructuredDocumentation","src":"1810:87:60","text":" @dev Returns an `BooleanSlot` with member `value` located at `slot`."},"id":11617,"implemented":true,"kind":"function","modifiers":[],"name":"getBooleanSlot","nameLocation":"1911:14:60","nodeType":"FunctionDefinition","parameters":{"id":11610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11609,"mutability":"mutable","name":"slot","nameLocation":"1934:4:60","nodeType":"VariableDeclaration","scope":11617,"src":"1926:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11608,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1926:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1925:14:60"},"returnParameters":{"id":11614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11613,"mutability":"mutable","name":"r","nameLocation":"1983:1:60","nodeType":"VariableDeclaration","scope":11617,"src":"1963:21:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$11589_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"},"typeName":{"id":11612,"nodeType":"UserDefinedTypeName","pathNode":{"id":11611,"name":"BooleanSlot","nameLocations":["1963:11:60"],"nodeType":"IdentifierPath","referencedDeclaration":11589,"src":"1963:11:60"},"referencedDeclaration":11589,"src":"1963:11:60","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$11589_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"}},"visibility":"internal"}],"src":"1962:23:60"},"scope":11640,"src":"1902:190:60","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11627,"nodeType":"Block","src":"2274:106:60","statements":[{"AST":{"nodeType":"YulBlock","src":"2336:38:60","statements":[{"nodeType":"YulAssignment","src":"2350:14:60","value":{"name":"slot","nodeType":"YulIdentifier","src":"2360:4:60"},"variableNames":[{"name":"r.slot","nodeType":"YulIdentifier","src":"2350:6:60"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"london","externalReferences":[{"declaration":11624,"isOffset":false,"isSlot":true,"src":"2350:6:60","suffix":"slot","valueSize":1},{"declaration":11620,"isOffset":false,"isSlot":false,"src":"2360:4:60","valueSize":1}],"id":11626,"nodeType":"InlineAssembly","src":"2327:47:60"}]},"documentation":{"id":11618,"nodeType":"StructuredDocumentation","src":"2098:87:60","text":" @dev Returns an `Bytes32Slot` with member `value` located at `slot`."},"id":11628,"implemented":true,"kind":"function","modifiers":[],"name":"getBytes32Slot","nameLocation":"2199:14:60","nodeType":"FunctionDefinition","parameters":{"id":11621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11620,"mutability":"mutable","name":"slot","nameLocation":"2222:4:60","nodeType":"VariableDeclaration","scope":11628,"src":"2214:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11619,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2214:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2213:14:60"},"returnParameters":{"id":11625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11624,"mutability":"mutable","name":"r","nameLocation":"2271:1:60","nodeType":"VariableDeclaration","scope":11628,"src":"2251:21:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$11592_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"},"typeName":{"id":11623,"nodeType":"UserDefinedTypeName","pathNode":{"id":11622,"name":"Bytes32Slot","nameLocations":["2251:11:60"],"nodeType":"IdentifierPath","referencedDeclaration":11592,"src":"2251:11:60"},"referencedDeclaration":11592,"src":"2251:11:60","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$11592_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"}},"visibility":"internal"}],"src":"2250:23:60"},"scope":11640,"src":"2190:190:60","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11638,"nodeType":"Block","src":"2562:106:60","statements":[{"AST":{"nodeType":"YulBlock","src":"2624:38:60","statements":[{"nodeType":"YulAssignment","src":"2638:14:60","value":{"name":"slot","nodeType":"YulIdentifier","src":"2648:4:60"},"variableNames":[{"name":"r.slot","nodeType":"YulIdentifier","src":"2638:6:60"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"london","externalReferences":[{"declaration":11635,"isOffset":false,"isSlot":true,"src":"2638:6:60","suffix":"slot","valueSize":1},{"declaration":11631,"isOffset":false,"isSlot":false,"src":"2648:4:60","valueSize":1}],"id":11637,"nodeType":"InlineAssembly","src":"2615:47:60"}]},"documentation":{"id":11629,"nodeType":"StructuredDocumentation","src":"2386:87:60","text":" @dev Returns an `Uint256Slot` with member `value` located at `slot`."},"id":11639,"implemented":true,"kind":"function","modifiers":[],"name":"getUint256Slot","nameLocation":"2487:14:60","nodeType":"FunctionDefinition","parameters":{"id":11632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11631,"mutability":"mutable","name":"slot","nameLocation":"2510:4:60","nodeType":"VariableDeclaration","scope":11639,"src":"2502:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11630,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2502:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2501:14:60"},"returnParameters":{"id":11636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11635,"mutability":"mutable","name":"r","nameLocation":"2559:1:60","nodeType":"VariableDeclaration","scope":11639,"src":"2539:21:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$11595_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"},"typeName":{"id":11634,"nodeType":"UserDefinedTypeName","pathNode":{"id":11633,"name":"Uint256Slot","nameLocations":["2539:11:60"],"nodeType":"IdentifierPath","referencedDeclaration":11595,"src":"2539:11:60"},"referencedDeclaration":11595,"src":"2539:11:60","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$11595_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"}},"visibility":"internal"}],"src":"2538:23:60"},"scope":11640,"src":"2478:190:60","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":11641,"src":"1279:1391:60","usedErrors":[]}],"src":"105:2566:60"},"id":60},"@openzeppelin/contracts/utils/Strings.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Strings.sol","exportedSymbols":{"Math":[13195],"Strings":[11815]},"id":11816,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":11642,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"101:23:61"},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"./math/Math.sol","id":11643,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11816,"sourceUnit":13196,"src":"126:25:61","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Strings","contractDependencies":[],"contractKind":"library","documentation":{"id":11644,"nodeType":"StructuredDocumentation","src":"153:34:61","text":" @dev String operations."},"fullyImplemented":true,"id":11815,"linearizedBaseContracts":[11815],"name":"Strings","nameLocation":"196:7:61","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":11647,"mutability":"constant","name":"_SYMBOLS","nameLocation":"235:8:61","nodeType":"VariableDeclaration","scope":11815,"src":"210:54:61","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"typeName":{"id":11645,"name":"bytes16","nodeType":"ElementaryTypeName","src":"210:7:61","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"value":{"hexValue":"30313233343536373839616263646566","id":11646,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"246:18:61","typeDescriptions":{"typeIdentifier":"t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f","typeString":"literal_string \"0123456789abcdef\""},"value":"0123456789abcdef"},"visibility":"private"},{"constant":true,"id":11650,"mutability":"constant","name":"_ADDRESS_LENGTH","nameLocation":"293:15:61","nodeType":"VariableDeclaration","scope":11815,"src":"270:43:61","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":11648,"name":"uint8","nodeType":"ElementaryTypeName","src":"270:5:61","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"3230","id":11649,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"311:2:61","typeDescriptions":{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"},"value":"20"},"visibility":"private"},{"body":{"id":11697,"nodeType":"Block","src":"486:625:61","statements":[{"id":11696,"nodeType":"UncheckedBlock","src":"496:609:61","statements":[{"assignments":[11659],"declarations":[{"constant":false,"id":11659,"mutability":"mutable","name":"length","nameLocation":"528:6:61","nodeType":"VariableDeclaration","scope":11696,"src":"520:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11658,"name":"uint256","nodeType":"ElementaryTypeName","src":"520:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11666,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":11662,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11653,"src":"548:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11660,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13195,"src":"537:4:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$13195_$","typeString":"type(library Math)"}},"id":11661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"542:5:61","memberName":"log10","nodeType":"MemberAccess","referencedDeclaration":13032,"src":"537:10:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":11663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"537:17:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":11664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"557:1:61","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"537:21:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"520:38:61"},{"assignments":[11668],"declarations":[{"constant":false,"id":11668,"mutability":"mutable","name":"buffer","nameLocation":"586:6:61","nodeType":"VariableDeclaration","scope":11696,"src":"572:20:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11667,"name":"string","nodeType":"ElementaryTypeName","src":"572:6:61","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":11673,"initialValue":{"arguments":[{"id":11671,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11659,"src":"606:6:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11670,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"595:10:61","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"},"typeName":{"id":11669,"name":"string","nodeType":"ElementaryTypeName","src":"599:6:61","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}}},"id":11672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"595:18:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"572:41:61"},{"assignments":[11675],"declarations":[{"constant":false,"id":11675,"mutability":"mutable","name":"ptr","nameLocation":"635:3:61","nodeType":"VariableDeclaration","scope":11696,"src":"627:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11674,"name":"uint256","nodeType":"ElementaryTypeName","src":"627:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11676,"nodeType":"VariableDeclarationStatement","src":"627:11:61"},{"AST":{"nodeType":"YulBlock","src":"708:67:61","statements":[{"nodeType":"YulAssignment","src":"726:35:61","value":{"arguments":[{"name":"buffer","nodeType":"YulIdentifier","src":"737:6:61"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"749:2:61","type":"","value":"32"},{"name":"length","nodeType":"YulIdentifier","src":"753:6:61"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:61"},"nodeType":"YulFunctionCall","src":"745:15:61"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"733:3:61"},"nodeType":"YulFunctionCall","src":"733:28:61"},"variableNames":[{"name":"ptr","nodeType":"YulIdentifier","src":"726:3:61"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"london","externalReferences":[{"declaration":11668,"isOffset":false,"isSlot":false,"src":"737:6:61","valueSize":1},{"declaration":11659,"isOffset":false,"isSlot":false,"src":"753:6:61","valueSize":1},{"declaration":11675,"isOffset":false,"isSlot":false,"src":"726:3:61","valueSize":1}],"id":11677,"nodeType":"InlineAssembly","src":"699:76:61"},{"body":{"id":11692,"nodeType":"Block","src":"801:267:61","statements":[{"expression":{"id":11680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":false,"src":"819:5:61","subExpression":{"id":11679,"name":"ptr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11675,"src":"819:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11681,"nodeType":"ExpressionStatement","src":"819:5:61"},{"AST":{"nodeType":"YulBlock","src":"902:84:61","statements":[{"expression":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"932:3:61"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"946:5:61"},{"kind":"number","nodeType":"YulLiteral","src":"953:2:61","type":"","value":"10"}],"functionName":{"name":"mod","nodeType":"YulIdentifier","src":"942:3:61"},"nodeType":"YulFunctionCall","src":"942:14:61"},{"name":"_SYMBOLS","nodeType":"YulIdentifier","src":"958:8:61"}],"functionName":{"name":"byte","nodeType":"YulIdentifier","src":"937:4:61"},"nodeType":"YulFunctionCall","src":"937:30:61"}],"functionName":{"name":"mstore8","nodeType":"YulIdentifier","src":"924:7:61"},"nodeType":"YulFunctionCall","src":"924:44:61"},"nodeType":"YulExpressionStatement","src":"924:44:61"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"london","externalReferences":[{"declaration":11647,"isOffset":false,"isSlot":false,"src":"958:8:61","valueSize":1},{"declaration":11675,"isOffset":false,"isSlot":false,"src":"932:3:61","valueSize":1},{"declaration":11653,"isOffset":false,"isSlot":false,"src":"946:5:61","valueSize":1}],"id":11682,"nodeType":"InlineAssembly","src":"893:93:61"},{"expression":{"id":11685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11683,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11653,"src":"1003:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"hexValue":"3130","id":11684,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1012:2:61","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"1003:11:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11686,"nodeType":"ExpressionStatement","src":"1003:11:61"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11687,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11653,"src":"1036:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11688,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1045:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1036:10:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11691,"nodeType":"IfStatement","src":"1032:21:61","trueBody":{"id":11690,"nodeType":"Break","src":"1048:5:61"}}]},"condition":{"hexValue":"74727565","id":11678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"795:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"id":11693,"nodeType":"WhileStatement","src":"788:280:61"},{"expression":{"id":11694,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11668,"src":"1088:6:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":11657,"id":11695,"nodeType":"Return","src":"1081:13:61"}]}]},"documentation":{"id":11651,"nodeType":"StructuredDocumentation","src":"320:90:61","text":" @dev Converts a `uint256` to its ASCII `string` decimal representation."},"id":11698,"implemented":true,"kind":"function","modifiers":[],"name":"toString","nameLocation":"424:8:61","nodeType":"FunctionDefinition","parameters":{"id":11654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11653,"mutability":"mutable","name":"value","nameLocation":"441:5:61","nodeType":"VariableDeclaration","scope":11698,"src":"433:13:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11652,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"432:15:61"},"returnParameters":{"id":11657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11656,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11698,"src":"471:13:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11655,"name":"string","nodeType":"ElementaryTypeName","src":"471:6:61","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"470:15:61"},"scope":11815,"src":"415:696:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11717,"nodeType":"Block","src":"1290:100:61","statements":[{"id":11716,"nodeType":"UncheckedBlock","src":"1300:84:61","statements":[{"expression":{"arguments":[{"id":11707,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11701,"src":"1343:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":11710,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11701,"src":"1362:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11708,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13195,"src":"1350:4:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$13195_$","typeString":"type(library Math)"}},"id":11709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1355:6:61","memberName":"log256","nodeType":"MemberAccess","referencedDeclaration":13155,"src":"1350:11:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":11711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1350:18:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":11712,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1371:1:61","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1350:22:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11706,"name":"toHexString","nodeType":"Identifier","overloadedDeclarations":[11718,11794,11814],"referencedDeclaration":11794,"src":"1331:11:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":11714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1331:42:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":11705,"id":11715,"nodeType":"Return","src":"1324:49:61"}]}]},"documentation":{"id":11699,"nodeType":"StructuredDocumentation","src":"1117:94:61","text":" @dev Converts a `uint256` to its ASCII `string` hexadecimal representation."},"id":11718,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"1225:11:61","nodeType":"FunctionDefinition","parameters":{"id":11702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11701,"mutability":"mutable","name":"value","nameLocation":"1245:5:61","nodeType":"VariableDeclaration","scope":11718,"src":"1237:13:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11700,"name":"uint256","nodeType":"ElementaryTypeName","src":"1237:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1236:15:61"},"returnParameters":{"id":11705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11704,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11718,"src":"1275:13:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11703,"name":"string","nodeType":"ElementaryTypeName","src":"1275:6:61","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1274:15:61"},"scope":11815,"src":"1216:174:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11793,"nodeType":"Block","src":"1603:347:61","statements":[{"assignments":[11729],"declarations":[{"constant":false,"id":11729,"mutability":"mutable","name":"buffer","nameLocation":"1626:6:61","nodeType":"VariableDeclaration","scope":11793,"src":"1613:19:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11728,"name":"bytes","nodeType":"ElementaryTypeName","src":"1613:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":11738,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":11732,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1645:1:61","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":11733,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11723,"src":"1649:6:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1645:10:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32","id":11735,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1658:1:61","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"1645:14:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11731,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1635:9:61","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":11730,"name":"bytes","nodeType":"ElementaryTypeName","src":"1639:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":11737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1635:25:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"1613:47:61"},{"expression":{"id":11743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11739,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11729,"src":"1670:6:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11741,"indexExpression":{"hexValue":"30","id":11740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1677:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1670:9:61","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":11742,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1682:3:61","typeDescriptions":{"typeIdentifier":"t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d","typeString":"literal_string \"0\""},"value":"0"},"src":"1670:15:61","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":11744,"nodeType":"ExpressionStatement","src":"1670:15:61"},{"expression":{"id":11749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11745,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11729,"src":"1695:6:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11747,"indexExpression":{"hexValue":"31","id":11746,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1702:1:61","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1695:9:61","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"78","id":11748,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1707:3:61","typeDescriptions":{"typeIdentifier":"t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83","typeString":"literal_string \"x\""},"value":"x"},"src":"1695:15:61","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":11750,"nodeType":"ExpressionStatement","src":"1695:15:61"},{"body":{"id":11779,"nodeType":"Block","src":"1765:83:61","statements":[{"expression":{"id":11773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11765,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11729,"src":"1779:6:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11767,"indexExpression":{"id":11766,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11752,"src":"1786:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1779:9:61","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":11768,"name":"_SYMBOLS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11647,"src":"1791:8:61","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"id":11772,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11769,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11721,"src":"1800:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307866","id":11770,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1808:3:61","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"0xf"},"src":"1800:11:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1791:21:61","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"1779:33:61","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":11774,"nodeType":"ExpressionStatement","src":"1779:33:61"},{"expression":{"id":11777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11775,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11721,"src":"1826:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":11776,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1836:1:61","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"1826:11:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11778,"nodeType":"ExpressionStatement","src":"1826:11:61"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11759,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11752,"src":"1753:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":11760,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1757:1:61","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1753:5:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11780,"initializationExpression":{"assignments":[11752],"declarations":[{"constant":false,"id":11752,"mutability":"mutable","name":"i","nameLocation":"1733:1:61","nodeType":"VariableDeclaration","scope":11780,"src":"1725:9:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11751,"name":"uint256","nodeType":"ElementaryTypeName","src":"1725:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11758,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":11753,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1737:1:61","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":11754,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11723,"src":"1741:6:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1737:10:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":11756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1750:1:61","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1737:14:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1725:26:61"},"loopExpression":{"expression":{"id":11763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":true,"src":"1760:3:61","subExpression":{"id":11762,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11752,"src":"1762:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11764,"nodeType":"ExpressionStatement","src":"1760:3:61"},"nodeType":"ForStatement","src":"1720:128:61"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11782,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11721,"src":"1865:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11783,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1874:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1865:10:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"537472696e67733a20686578206c656e67746820696e73756666696369656e74","id":11785,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1877:34:61","typeDescriptions":{"typeIdentifier":"t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2","typeString":"literal_string \"Strings: hex length insufficient\""},"value":"Strings: hex length insufficient"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2","typeString":"literal_string \"Strings: hex length insufficient\""}],"id":11781,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1857:7:61","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1857:55:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11787,"nodeType":"ExpressionStatement","src":"1857:55:61"},{"expression":{"arguments":[{"id":11790,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11729,"src":"1936:6:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11789,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1929:6:61","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":11788,"name":"string","nodeType":"ElementaryTypeName","src":"1929:6:61","typeDescriptions":{}}},"id":11791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1929:14:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":11727,"id":11792,"nodeType":"Return","src":"1922:21:61"}]},"documentation":{"id":11719,"nodeType":"StructuredDocumentation","src":"1396:112:61","text":" @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length."},"id":11794,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"1522:11:61","nodeType":"FunctionDefinition","parameters":{"id":11724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11721,"mutability":"mutable","name":"value","nameLocation":"1542:5:61","nodeType":"VariableDeclaration","scope":11794,"src":"1534:13:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11720,"name":"uint256","nodeType":"ElementaryTypeName","src":"1534:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11723,"mutability":"mutable","name":"length","nameLocation":"1557:6:61","nodeType":"VariableDeclaration","scope":11794,"src":"1549:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11722,"name":"uint256","nodeType":"ElementaryTypeName","src":"1549:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1533:31:61"},"returnParameters":{"id":11727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11726,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11794,"src":"1588:13:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11725,"name":"string","nodeType":"ElementaryTypeName","src":"1588:6:61","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1587:15:61"},"scope":11815,"src":"1513:437:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11813,"nodeType":"Block","src":"2175:76:61","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":11807,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11797,"src":"2220:4:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11806,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2212:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":11805,"name":"uint160","nodeType":"ElementaryTypeName","src":"2212:7:61","typeDescriptions":{}}},"id":11808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2212:13:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":11804,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2204:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":11803,"name":"uint256","nodeType":"ElementaryTypeName","src":"2204:7:61","typeDescriptions":{}}},"id":11809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2204:22:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11810,"name":"_ADDRESS_LENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11650,"src":"2228:15:61","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":11802,"name":"toHexString","nodeType":"Identifier","overloadedDeclarations":[11718,11794,11814],"referencedDeclaration":11794,"src":"2192:11:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":11811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2192:52:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":11801,"id":11812,"nodeType":"Return","src":"2185:59:61"}]},"documentation":{"id":11795,"nodeType":"StructuredDocumentation","src":"1956:141:61","text":" @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation."},"id":11814,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"2111:11:61","nodeType":"FunctionDefinition","parameters":{"id":11798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11797,"mutability":"mutable","name":"addr","nameLocation":"2131:4:61","nodeType":"VariableDeclaration","scope":11814,"src":"2123:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11796,"name":"address","nodeType":"ElementaryTypeName","src":"2123:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2122:14:61"},"returnParameters":{"id":11801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11800,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11814,"src":"2160:13:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":11799,"name":"string","nodeType":"ElementaryTypeName","src":"2160:6:61","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2159:15:61"},"scope":11815,"src":"2102:149:61","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":11816,"src":"188:2065:61","usedErrors":[]}],"src":"101:2153:61"},"id":61},"@openzeppelin/contracts/utils/cryptography/ECDSA.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","exportedSymbols":{"ECDSA":[12176],"Math":[13195],"Strings":[11815]},"id":12177,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":11817,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"112:23:62"},{"absolutePath":"@openzeppelin/contracts/utils/Strings.sol","file":"../Strings.sol","id":11818,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12177,"sourceUnit":11816,"src":"137:24:62","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ECDSA","contractDependencies":[],"contractKind":"library","documentation":{"id":11819,"nodeType":"StructuredDocumentation","src":"163:205:62","text":" @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n These functions can be used to verify that a message was signed by the holder\n of the private keys of a given address."},"fullyImplemented":true,"id":12176,"linearizedBaseContracts":[12176],"name":"ECDSA","nameLocation":"377:5:62","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ECDSA.RecoverError","id":11825,"members":[{"id":11820,"name":"NoError","nameLocation":"417:7:62","nodeType":"EnumValue","src":"417:7:62"},{"id":11821,"name":"InvalidSignature","nameLocation":"434:16:62","nodeType":"EnumValue","src":"434:16:62"},{"id":11822,"name":"InvalidSignatureLength","nameLocation":"460:22:62","nodeType":"EnumValue","src":"460:22:62"},{"id":11823,"name":"InvalidSignatureS","nameLocation":"492:17:62","nodeType":"EnumValue","src":"492:17:62"},{"id":11824,"name":"InvalidSignatureV","nameLocation":"519:17:62","nodeType":"EnumValue","src":"519:17:62"}],"name":"RecoverError","nameLocation":"394:12:62","nodeType":"EnumDefinition","src":"389:175:62"},{"body":{"id":11868,"nodeType":"Block","src":"624:457:62","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"},"id":11834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11831,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11828,"src":"638:5:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":11832,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11825,"src":"647:12:62","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$11825_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":11833,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"660:7:62","memberName":"NoError","nodeType":"MemberAccess","referencedDeclaration":11820,"src":"647:20:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}},"src":"638:29:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"},"id":11840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11837,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11828,"src":"734:5:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":11838,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11825,"src":"743:12:62","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$11825_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":11839,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"756:16:62","memberName":"InvalidSignature","nodeType":"MemberAccess","referencedDeclaration":11821,"src":"743:29:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}},"src":"734:38:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"},"id":11849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11846,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11828,"src":"843:5:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":11847,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11825,"src":"852:12:62","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$11825_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":11848,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"865:22:62","memberName":"InvalidSignatureLength","nodeType":"MemberAccess","referencedDeclaration":11822,"src":"852:35:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}},"src":"843:44:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"},"id":11858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11855,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11828,"src":"965:5:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":11856,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11825,"src":"974:12:62","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$11825_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":11857,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"987:17:62","memberName":"InvalidSignatureS","nodeType":"MemberAccess","referencedDeclaration":11823,"src":"974:30:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}},"src":"965:39:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11864,"nodeType":"IfStatement","src":"961:114:62","trueBody":{"id":11863,"nodeType":"Block","src":"1006:69:62","statements":[{"expression":{"arguments":[{"hexValue":"45434453413a20696e76616c6964207369676e6174757265202773272076616c7565","id":11860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1027:36:62","typeDescriptions":{"typeIdentifier":"t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd","typeString":"literal_string \"ECDSA: invalid signature 's' value\""},"value":"ECDSA: invalid signature 's' value"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd","typeString":"literal_string \"ECDSA: invalid signature 's' value\""}],"id":11859,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"1020:6:62","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":11861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1020:44:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11862,"nodeType":"ExpressionStatement","src":"1020:44:62"}]}},"id":11865,"nodeType":"IfStatement","src":"839:236:62","trueBody":{"id":11854,"nodeType":"Block","src":"889:66:62","statements":[{"expression":{"arguments":[{"hexValue":"45434453413a20696e76616c6964207369676e6174757265206c656e677468","id":11851,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"910:33:62","typeDescriptions":{"typeIdentifier":"t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77","typeString":"literal_string \"ECDSA: invalid signature length\""},"value":"ECDSA: invalid signature length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77","typeString":"literal_string \"ECDSA: invalid signature length\""}],"id":11850,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"903:6:62","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":11852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"903:41:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11853,"nodeType":"ExpressionStatement","src":"903:41:62"}]}},"id":11866,"nodeType":"IfStatement","src":"730:345:62","trueBody":{"id":11845,"nodeType":"Block","src":"774:59:62","statements":[{"expression":{"arguments":[{"hexValue":"45434453413a20696e76616c6964207369676e6174757265","id":11842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"795:26:62","typeDescriptions":{"typeIdentifier":"t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be","typeString":"literal_string \"ECDSA: invalid signature\""},"value":"ECDSA: invalid signature"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be","typeString":"literal_string \"ECDSA: invalid signature\""}],"id":11841,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"788:6:62","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":11843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"788:34:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11844,"nodeType":"ExpressionStatement","src":"788:34:62"}]}},"id":11867,"nodeType":"IfStatement","src":"634:441:62","trueBody":{"id":11836,"nodeType":"Block","src":"669:55:62","statements":[{"functionReturnParameters":11830,"id":11835,"nodeType":"Return","src":"683:7:62"}]}}]},"id":11869,"implemented":true,"kind":"function","modifiers":[],"name":"_throwError","nameLocation":"579:11:62","nodeType":"FunctionDefinition","parameters":{"id":11829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11828,"mutability":"mutable","name":"error","nameLocation":"604:5:62","nodeType":"VariableDeclaration","scope":11869,"src":"591:18:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":11827,"nodeType":"UserDefinedTypeName","pathNode":{"id":11826,"name":"RecoverError","nameLocations":["591:12:62"],"nodeType":"IdentifierPath","referencedDeclaration":11825,"src":"591:12:62"},"referencedDeclaration":11825,"src":"591:12:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"}],"src":"590:20:62"},"returnParameters":{"id":11830,"nodeType":"ParameterList","parameters":[],"src":"624:0:62"},"scope":12176,"src":"570:511:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11914,"nodeType":"Block","src":"2249:626:62","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11882,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11874,"src":"2263:9:62","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2273:6:62","memberName":"length","nodeType":"MemberAccess","src":"2263:16:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3635","id":11884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2283:2:62","typeDescriptions":{"typeIdentifier":"t_rational_65_by_1","typeString":"int_const 65"},"value":"65"},"src":"2263:22:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11912,"nodeType":"Block","src":"2788:81:62","statements":[{"expression":{"components":[{"arguments":[{"hexValue":"30","id":11906,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2818:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":11905,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2810:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11904,"name":"address","nodeType":"ElementaryTypeName","src":"2810:7:62","typeDescriptions":{}}},"id":11907,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2810:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":11908,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11825,"src":"2822:12:62","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$11825_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":11909,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2835:22:62","memberName":"InvalidSignatureLength","nodeType":"MemberAccess","referencedDeclaration":11822,"src":"2822:35:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}}],"id":11910,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"2809:49:62","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$11825_$","typeString":"tuple(address,enum ECDSA.RecoverError)"}},"functionReturnParameters":11881,"id":11911,"nodeType":"Return","src":"2802:56:62"}]},"id":11913,"nodeType":"IfStatement","src":"2259:610:62","trueBody":{"id":11903,"nodeType":"Block","src":"2287:495:62","statements":[{"assignments":[11887],"declarations":[{"constant":false,"id":11887,"mutability":"mutable","name":"r","nameLocation":"2309:1:62","nodeType":"VariableDeclaration","scope":11903,"src":"2301:9:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11886,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2301:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":11888,"nodeType":"VariableDeclarationStatement","src":"2301:9:62"},{"assignments":[11890],"declarations":[{"constant":false,"id":11890,"mutability":"mutable","name":"s","nameLocation":"2332:1:62","nodeType":"VariableDeclaration","scope":11903,"src":"2324:9:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11889,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2324:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":11891,"nodeType":"VariableDeclarationStatement","src":"2324:9:62"},{"assignments":[11893],"declarations":[{"constant":false,"id":11893,"mutability":"mutable","name":"v","nameLocation":"2353:1:62","nodeType":"VariableDeclaration","scope":11903,"src":"2347:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":11892,"name":"uint8","nodeType":"ElementaryTypeName","src":"2347:5:62","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":11894,"nodeType":"VariableDeclarationStatement","src":"2347:7:62"},{"AST":{"nodeType":"YulBlock","src":"2555:171:62","statements":[{"nodeType":"YulAssignment","src":"2573:32:62","value":{"arguments":[{"arguments":[{"name":"signature","nodeType":"YulIdentifier","src":"2588:9:62"},{"kind":"number","nodeType":"YulLiteral","src":"2599:4:62","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2584:3:62"},"nodeType":"YulFunctionCall","src":"2584:20:62"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2578:5:62"},"nodeType":"YulFunctionCall","src":"2578:27:62"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"2573:1:62"}]},{"nodeType":"YulAssignment","src":"2622:32:62","value":{"arguments":[{"arguments":[{"name":"signature","nodeType":"YulIdentifier","src":"2637:9:62"},{"kind":"number","nodeType":"YulLiteral","src":"2648:4:62","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2633:3:62"},"nodeType":"YulFunctionCall","src":"2633:20:62"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2627:5:62"},"nodeType":"YulFunctionCall","src":"2627:27:62"},"variableNames":[{"name":"s","nodeType":"YulIdentifier","src":"2622:1:62"}]},{"nodeType":"YulAssignment","src":"2671:41:62","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2681:1:62","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"signature","nodeType":"YulIdentifier","src":"2694:9:62"},{"kind":"number","nodeType":"YulLiteral","src":"2705:4:62","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2690:3:62"},"nodeType":"YulFunctionCall","src":"2690:20:62"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2684:5:62"},"nodeType":"YulFunctionCall","src":"2684:27:62"}],"functionName":{"name":"byte","nodeType":"YulIdentifier","src":"2676:4:62"},"nodeType":"YulFunctionCall","src":"2676:36:62"},"variableNames":[{"name":"v","nodeType":"YulIdentifier","src":"2671:1:62"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"london","externalReferences":[{"declaration":11887,"isOffset":false,"isSlot":false,"src":"2573:1:62","valueSize":1},{"declaration":11890,"isOffset":false,"isSlot":false,"src":"2622:1:62","valueSize":1},{"declaration":11874,"isOffset":false,"isSlot":false,"src":"2588:9:62","valueSize":1},{"declaration":11874,"isOffset":false,"isSlot":false,"src":"2637:9:62","valueSize":1},{"declaration":11874,"isOffset":false,"isSlot":false,"src":"2694:9:62","valueSize":1},{"declaration":11893,"isOffset":false,"isSlot":false,"src":"2671:1:62","valueSize":1}],"id":11895,"nodeType":"InlineAssembly","src":"2546:180:62"},{"expression":{"arguments":[{"id":11897,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11872,"src":"2757:4:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11898,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11893,"src":"2763:1:62","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":11899,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11887,"src":"2766:1:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11900,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11890,"src":"2769:1:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":11896,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[11915,11989,12083],"referencedDeclaration":12083,"src":"2746:10:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$11825_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError)"}},"id":11901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2746:25:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$11825_$","typeString":"tuple(address,enum ECDSA.RecoverError)"}},"functionReturnParameters":11881,"id":11902,"nodeType":"Return","src":"2739:32:62"}]}}]},"documentation":{"id":11870,"nodeType":"StructuredDocumentation","src":"1087:1053:62","text":" @dev Returns the address that signed a hashed message (`hash`) with\n `signature` or error string. This address can then be used for verification purposes.\n The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {toEthSignedMessageHash} on it.\n Documentation for signature generation:\n - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n _Available since v4.3._"},"id":11915,"implemented":true,"kind":"function","modifiers":[],"name":"tryRecover","nameLocation":"2154:10:62","nodeType":"FunctionDefinition","parameters":{"id":11875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11872,"mutability":"mutable","name":"hash","nameLocation":"2173:4:62","nodeType":"VariableDeclaration","scope":11915,"src":"2165:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11871,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2165:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":11874,"mutability":"mutable","name":"signature","nameLocation":"2192:9:62","nodeType":"VariableDeclaration","scope":11915,"src":"2179:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11873,"name":"bytes","nodeType":"ElementaryTypeName","src":"2179:5:62","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2164:38:62"},"returnParameters":{"id":11881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11877,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11915,"src":"2226:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11876,"name":"address","nodeType":"ElementaryTypeName","src":"2226:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11880,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11915,"src":"2235:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":11879,"nodeType":"UserDefinedTypeName","pathNode":{"id":11878,"name":"RecoverError","nameLocations":["2235:12:62"],"nodeType":"IdentifierPath","referencedDeclaration":11825,"src":"2235:12:62"},"referencedDeclaration":11825,"src":"2235:12:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"}],"src":"2225:23:62"},"scope":12176,"src":"2145:730:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11941,"nodeType":"Block","src":"3748:140:62","statements":[{"assignments":[11926,11929],"declarations":[{"constant":false,"id":11926,"mutability":"mutable","name":"recovered","nameLocation":"3767:9:62","nodeType":"VariableDeclaration","scope":11941,"src":"3759:17:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11925,"name":"address","nodeType":"ElementaryTypeName","src":"3759:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11929,"mutability":"mutable","name":"error","nameLocation":"3791:5:62","nodeType":"VariableDeclaration","scope":11941,"src":"3778:18:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":11928,"nodeType":"UserDefinedTypeName","pathNode":{"id":11927,"name":"RecoverError","nameLocations":["3778:12:62"],"nodeType":"IdentifierPath","referencedDeclaration":11825,"src":"3778:12:62"},"referencedDeclaration":11825,"src":"3778:12:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"}],"id":11934,"initialValue":{"arguments":[{"id":11931,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11918,"src":"3811:4:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11932,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11920,"src":"3817:9:62","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11930,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[11915,11989,12083],"referencedDeclaration":11915,"src":"3800:10:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$_t_enum$_RecoverError_$11825_$","typeString":"function (bytes32,bytes memory) pure returns (address,enum ECDSA.RecoverError)"}},"id":11933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3800:27:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$11825_$","typeString":"tuple(address,enum ECDSA.RecoverError)"}},"nodeType":"VariableDeclarationStatement","src":"3758:69:62"},{"expression":{"arguments":[{"id":11936,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11929,"src":"3849:5:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}],"id":11935,"name":"_throwError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11869,"src":"3837:11:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_RecoverError_$11825_$returns$__$","typeString":"function (enum ECDSA.RecoverError) pure"}},"id":11937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3837:18:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11938,"nodeType":"ExpressionStatement","src":"3837:18:62"},{"expression":{"id":11939,"name":"recovered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11926,"src":"3872:9:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":11924,"id":11940,"nodeType":"Return","src":"3865:16:62"}]},"documentation":{"id":11916,"nodeType":"StructuredDocumentation","src":"2881:775:62","text":" @dev Returns the address that signed a hashed message (`hash`) with\n `signature`. This address can then be used for verification purposes.\n The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {toEthSignedMessageHash} on it."},"id":11942,"implemented":true,"kind":"function","modifiers":[],"name":"recover","nameLocation":"3670:7:62","nodeType":"FunctionDefinition","parameters":{"id":11921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11918,"mutability":"mutable","name":"hash","nameLocation":"3686:4:62","nodeType":"VariableDeclaration","scope":11942,"src":"3678:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11917,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3678:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":11920,"mutability":"mutable","name":"signature","nameLocation":"3705:9:62","nodeType":"VariableDeclaration","scope":11942,"src":"3692:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11919,"name":"bytes","nodeType":"ElementaryTypeName","src":"3692:5:62","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3677:38:62"},"returnParameters":{"id":11924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11923,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11942,"src":"3739:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11922,"name":"address","nodeType":"ElementaryTypeName","src":"3739:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3738:9:62"},"scope":12176,"src":"3661:227:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11988,"nodeType":"Block","src":"4275:203:62","statements":[{"assignments":[11958],"declarations":[{"constant":false,"id":11958,"mutability":"mutable","name":"s","nameLocation":"4293:1:62","nodeType":"VariableDeclaration","scope":11988,"src":"4285:9:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11957,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4285:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":11965,"initialValue":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":11964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11959,"name":"vs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11949,"src":"4297:2:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"arguments":[{"hexValue":"307837666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666","id":11962,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4310:66:62","typeDescriptions":{"typeIdentifier":"t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819967_by_1","typeString":"int_const 5789...(69 digits omitted)...9967"},"value":"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819967_by_1","typeString":"int_const 5789...(69 digits omitted)...9967"}],"id":11961,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4302:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":11960,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4302:7:62","typeDescriptions":{}}},"id":11963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4302:75:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4297:80:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4285:92:62"},{"assignments":[11967],"declarations":[{"constant":false,"id":11967,"mutability":"mutable","name":"v","nameLocation":"4393:1:62","nodeType":"VariableDeclaration","scope":11988,"src":"4387:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":11966,"name":"uint8","nodeType":"ElementaryTypeName","src":"4387:5:62","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":11980,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":11972,"name":"vs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11949,"src":"4412:2:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":11971,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4404:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":11970,"name":"uint256","nodeType":"ElementaryTypeName","src":"4404:7:62","typeDescriptions":{}}},"id":11973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4404:11:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":11974,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4419:3:62","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"4404:18:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11976,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4403:20:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"3237","id":11977,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4426:2:62","typeDescriptions":{"typeIdentifier":"t_rational_27_by_1","typeString":"int_const 27"},"value":"27"},"src":"4403:25:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11969,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4397:5:62","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":11968,"name":"uint8","nodeType":"ElementaryTypeName","src":"4397:5:62","typeDescriptions":{}}},"id":11979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4397:32:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"4387:42:62"},{"expression":{"arguments":[{"id":11982,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11945,"src":"4457:4:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11983,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11967,"src":"4463:1:62","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":11984,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11947,"src":"4466:1:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11985,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11958,"src":"4469:1:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":11981,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[11915,11989,12083],"referencedDeclaration":12083,"src":"4446:10:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$11825_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError)"}},"id":11986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4446:25:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$11825_$","typeString":"tuple(address,enum ECDSA.RecoverError)"}},"functionReturnParameters":11956,"id":11987,"nodeType":"Return","src":"4439:32:62"}]},"documentation":{"id":11943,"nodeType":"StructuredDocumentation","src":"3894:243:62","text":" @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n _Available since v4.3._"},"id":11989,"implemented":true,"kind":"function","modifiers":[],"name":"tryRecover","nameLocation":"4151:10:62","nodeType":"FunctionDefinition","parameters":{"id":11950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11945,"mutability":"mutable","name":"hash","nameLocation":"4179:4:62","nodeType":"VariableDeclaration","scope":11989,"src":"4171:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11944,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4171:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":11947,"mutability":"mutable","name":"r","nameLocation":"4201:1:62","nodeType":"VariableDeclaration","scope":11989,"src":"4193:9:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11946,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4193:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":11949,"mutability":"mutable","name":"vs","nameLocation":"4220:2:62","nodeType":"VariableDeclaration","scope":11989,"src":"4212:10:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11948,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4212:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4161:67:62"},"returnParameters":{"id":11956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11952,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11989,"src":"4252:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11951,"name":"address","nodeType":"ElementaryTypeName","src":"4252:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11955,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11989,"src":"4261:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":11954,"nodeType":"UserDefinedTypeName","pathNode":{"id":11953,"name":"RecoverError","nameLocations":["4261:12:62"],"nodeType":"IdentifierPath","referencedDeclaration":11825,"src":"4261:12:62"},"referencedDeclaration":11825,"src":"4261:12:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"}],"src":"4251:23:62"},"scope":12176,"src":"4142:336:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12018,"nodeType":"Block","src":"4759:136:62","statements":[{"assignments":[12002,12005],"declarations":[{"constant":false,"id":12002,"mutability":"mutable","name":"recovered","nameLocation":"4778:9:62","nodeType":"VariableDeclaration","scope":12018,"src":"4770:17:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12001,"name":"address","nodeType":"ElementaryTypeName","src":"4770:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12005,"mutability":"mutable","name":"error","nameLocation":"4802:5:62","nodeType":"VariableDeclaration","scope":12018,"src":"4789:18:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":12004,"nodeType":"UserDefinedTypeName","pathNode":{"id":12003,"name":"RecoverError","nameLocations":["4789:12:62"],"nodeType":"IdentifierPath","referencedDeclaration":11825,"src":"4789:12:62"},"referencedDeclaration":11825,"src":"4789:12:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"}],"id":12011,"initialValue":{"arguments":[{"id":12007,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11992,"src":"4822:4:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":12008,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11994,"src":"4828:1:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":12009,"name":"vs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11996,"src":"4831:2:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12006,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[11915,11989,12083],"referencedDeclaration":11989,"src":"4811:10:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$11825_$","typeString":"function (bytes32,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError)"}},"id":12010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4811:23:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$11825_$","typeString":"tuple(address,enum ECDSA.RecoverError)"}},"nodeType":"VariableDeclarationStatement","src":"4769:65:62"},{"expression":{"arguments":[{"id":12013,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12005,"src":"4856:5:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}],"id":12012,"name":"_throwError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11869,"src":"4844:11:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_RecoverError_$11825_$returns$__$","typeString":"function (enum ECDSA.RecoverError) pure"}},"id":12014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4844:18:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12015,"nodeType":"ExpressionStatement","src":"4844:18:62"},{"expression":{"id":12016,"name":"recovered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12002,"src":"4879:9:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":12000,"id":12017,"nodeType":"Return","src":"4872:16:62"}]},"documentation":{"id":11990,"nodeType":"StructuredDocumentation","src":"4484:154:62","text":" @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n _Available since v4.2._"},"id":12019,"implemented":true,"kind":"function","modifiers":[],"name":"recover","nameLocation":"4652:7:62","nodeType":"FunctionDefinition","parameters":{"id":11997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11992,"mutability":"mutable","name":"hash","nameLocation":"4677:4:62","nodeType":"VariableDeclaration","scope":12019,"src":"4669:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11991,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4669:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":11994,"mutability":"mutable","name":"r","nameLocation":"4699:1:62","nodeType":"VariableDeclaration","scope":12019,"src":"4691:9:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11993,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4691:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":11996,"mutability":"mutable","name":"vs","nameLocation":"4718:2:62","nodeType":"VariableDeclaration","scope":12019,"src":"4710:10:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11995,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4710:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4659:67:62"},"returnParameters":{"id":12000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11999,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12019,"src":"4750:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11998,"name":"address","nodeType":"ElementaryTypeName","src":"4750:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4749:9:62"},"scope":12176,"src":"4643:252:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12082,"nodeType":"Block","src":"5218:1345:62","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":12038,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12028,"src":"6114:1:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12037,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6106:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12036,"name":"uint256","nodeType":"ElementaryTypeName","src":"6106:7:62","typeDescriptions":{}}},"id":12039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6106:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307837464646464646464646464646464646464646464646464646464646464646463544353736453733353741343530314444464539324634363638314232304130","id":12040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6119:66:62","typeDescriptions":{"typeIdentifier":"t_rational_57896044618658097711785492504343953926418782139537452191302581570759080747168_by_1","typeString":"int_const 5789...(69 digits omitted)...7168"},"value":"0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0"},"src":"6106:79:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12051,"nodeType":"IfStatement","src":"6102:161:62","trueBody":{"id":12050,"nodeType":"Block","src":"6187:76:62","statements":[{"expression":{"components":[{"arguments":[{"hexValue":"30","id":12044,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6217:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":12043,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6209:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12042,"name":"address","nodeType":"ElementaryTypeName","src":"6209:7:62","typeDescriptions":{}}},"id":12045,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6209:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12046,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11825,"src":"6221:12:62","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$11825_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":12047,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6234:17:62","memberName":"InvalidSignatureS","nodeType":"MemberAccess","referencedDeclaration":11823,"src":"6221:30:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}}],"id":12048,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6208:44:62","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$11825_$","typeString":"tuple(address,enum ECDSA.RecoverError)"}},"functionReturnParameters":12035,"id":12049,"nodeType":"Return","src":"6201:51:62"}]}},{"assignments":[12053],"declarations":[{"constant":false,"id":12053,"mutability":"mutable","name":"signer","nameLocation":"6365:6:62","nodeType":"VariableDeclaration","scope":12082,"src":"6357:14:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12052,"name":"address","nodeType":"ElementaryTypeName","src":"6357:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":12060,"initialValue":{"arguments":[{"id":12055,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12022,"src":"6384:4:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":12056,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12024,"src":"6390:1:62","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":12057,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12026,"src":"6393:1:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":12058,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12028,"src":"6396:1:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12054,"name":"ecrecover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-6,"src":"6374:9:62","typeDescriptions":{"typeIdentifier":"t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address)"}},"id":12059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6374:24:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6357:41:62"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":12066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12061,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12053,"src":"6412:6:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":12064,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6430:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":12063,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6422:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12062,"name":"address","nodeType":"ElementaryTypeName","src":"6422:7:62","typeDescriptions":{}}},"id":12065,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6422:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6412:20:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12076,"nodeType":"IfStatement","src":"6408:101:62","trueBody":{"id":12075,"nodeType":"Block","src":"6434:75:62","statements":[{"expression":{"components":[{"arguments":[{"hexValue":"30","id":12069,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6464:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":12068,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6456:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12067,"name":"address","nodeType":"ElementaryTypeName","src":"6456:7:62","typeDescriptions":{}}},"id":12070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6456:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12071,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11825,"src":"6468:12:62","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$11825_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":12072,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6481:16:62","memberName":"InvalidSignature","nodeType":"MemberAccess","referencedDeclaration":11821,"src":"6468:29:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}}],"id":12073,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6455:43:62","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$11825_$","typeString":"tuple(address,enum ECDSA.RecoverError)"}},"functionReturnParameters":12035,"id":12074,"nodeType":"Return","src":"6448:50:62"}]}},{"expression":{"components":[{"id":12077,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12053,"src":"6527:6:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12078,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11825,"src":"6535:12:62","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$11825_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":12079,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6548:7:62","memberName":"NoError","nodeType":"MemberAccess","referencedDeclaration":11820,"src":"6535:20:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}}],"id":12080,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6526:30:62","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$11825_$","typeString":"tuple(address,enum ECDSA.RecoverError)"}},"functionReturnParameters":12035,"id":12081,"nodeType":"Return","src":"6519:37:62"}]},"documentation":{"id":12020,"nodeType":"StructuredDocumentation","src":"4901:163:62","text":" @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n `r` and `s` signature fields separately.\n _Available since v4.3._"},"id":12083,"implemented":true,"kind":"function","modifiers":[],"name":"tryRecover","nameLocation":"5078:10:62","nodeType":"FunctionDefinition","parameters":{"id":12029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12022,"mutability":"mutable","name":"hash","nameLocation":"5106:4:62","nodeType":"VariableDeclaration","scope":12083,"src":"5098:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12021,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5098:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12024,"mutability":"mutable","name":"v","nameLocation":"5126:1:62","nodeType":"VariableDeclaration","scope":12083,"src":"5120:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":12023,"name":"uint8","nodeType":"ElementaryTypeName","src":"5120:5:62","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":12026,"mutability":"mutable","name":"r","nameLocation":"5145:1:62","nodeType":"VariableDeclaration","scope":12083,"src":"5137:9:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12025,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5137:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12028,"mutability":"mutable","name":"s","nameLocation":"5164:1:62","nodeType":"VariableDeclaration","scope":12083,"src":"5156:9:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12027,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5156:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5088:83:62"},"returnParameters":{"id":12035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12031,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12083,"src":"5195:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12030,"name":"address","nodeType":"ElementaryTypeName","src":"5195:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12034,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12083,"src":"5204:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":12033,"nodeType":"UserDefinedTypeName","pathNode":{"id":12032,"name":"RecoverError","nameLocations":["5204:12:62"],"nodeType":"IdentifierPath","referencedDeclaration":11825,"src":"5204:12:62"},"referencedDeclaration":11825,"src":"5204:12:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"}],"src":"5194:23:62"},"scope":12176,"src":"5069:1494:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12115,"nodeType":"Block","src":"6828:138:62","statements":[{"assignments":[12098,12101],"declarations":[{"constant":false,"id":12098,"mutability":"mutable","name":"recovered","nameLocation":"6847:9:62","nodeType":"VariableDeclaration","scope":12115,"src":"6839:17:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12097,"name":"address","nodeType":"ElementaryTypeName","src":"6839:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12101,"mutability":"mutable","name":"error","nameLocation":"6871:5:62","nodeType":"VariableDeclaration","scope":12115,"src":"6858:18:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":12100,"nodeType":"UserDefinedTypeName","pathNode":{"id":12099,"name":"RecoverError","nameLocations":["6858:12:62"],"nodeType":"IdentifierPath","referencedDeclaration":11825,"src":"6858:12:62"},"referencedDeclaration":11825,"src":"6858:12:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"}],"id":12108,"initialValue":{"arguments":[{"id":12103,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12086,"src":"6891:4:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":12104,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12088,"src":"6897:1:62","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":12105,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12090,"src":"6900:1:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":12106,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12092,"src":"6903:1:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12102,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[11915,11989,12083],"referencedDeclaration":12083,"src":"6880:10:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$11825_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError)"}},"id":12107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6880:25:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$11825_$","typeString":"tuple(address,enum ECDSA.RecoverError)"}},"nodeType":"VariableDeclarationStatement","src":"6838:67:62"},{"expression":{"arguments":[{"id":12110,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12101,"src":"6927:5:62","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_RecoverError_$11825","typeString":"enum ECDSA.RecoverError"}],"id":12109,"name":"_throwError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11869,"src":"6915:11:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_RecoverError_$11825_$returns$__$","typeString":"function (enum ECDSA.RecoverError) pure"}},"id":12111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6915:18:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12112,"nodeType":"ExpressionStatement","src":"6915:18:62"},{"expression":{"id":12113,"name":"recovered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12098,"src":"6950:9:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":12096,"id":12114,"nodeType":"Return","src":"6943:16:62"}]},"documentation":{"id":12084,"nodeType":"StructuredDocumentation","src":"6569:122:62","text":" @dev Overload of {ECDSA-recover} that receives the `v`,\n `r` and `s` signature fields separately."},"id":12116,"implemented":true,"kind":"function","modifiers":[],"name":"recover","nameLocation":"6705:7:62","nodeType":"FunctionDefinition","parameters":{"id":12093,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12086,"mutability":"mutable","name":"hash","nameLocation":"6730:4:62","nodeType":"VariableDeclaration","scope":12116,"src":"6722:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12085,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6722:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12088,"mutability":"mutable","name":"v","nameLocation":"6750:1:62","nodeType":"VariableDeclaration","scope":12116,"src":"6744:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":12087,"name":"uint8","nodeType":"ElementaryTypeName","src":"6744:5:62","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":12090,"mutability":"mutable","name":"r","nameLocation":"6769:1:62","nodeType":"VariableDeclaration","scope":12116,"src":"6761:9:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12089,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6761:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12092,"mutability":"mutable","name":"s","nameLocation":"6788:1:62","nodeType":"VariableDeclaration","scope":12116,"src":"6780:9:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12091,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6780:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6712:83:62"},"returnParameters":{"id":12096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12095,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12116,"src":"6819:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12094,"name":"address","nodeType":"ElementaryTypeName","src":"6819:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6818:9:62"},"scope":12176,"src":"6696:270:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12132,"nodeType":"Block","src":"7334:187:62","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"19457468657265756d205369676e6564204d6573736167653a0a3332","id":12127,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7472:34:62","typeDescriptions":{"typeIdentifier":"t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73","typeString":"literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a3332\""},"value":"\u0019Ethereum Signed Message:\n32"},{"id":12128,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12119,"src":"7508:4:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73","typeString":"literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a3332\""},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":12125,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7455:3:62","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":12126,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7459:12:62","memberName":"encodePacked","nodeType":"MemberAccess","src":"7455:16:62","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":12129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7455:58:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":12124,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"7445:9:62","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":12130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7445:69:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":12123,"id":12131,"nodeType":"Return","src":"7438:76:62"}]},"documentation":{"id":12117,"nodeType":"StructuredDocumentation","src":"6972:279:62","text":" @dev Returns an Ethereum Signed Message, created from a `hash`. This\n produces hash corresponding to the one signed with the\n https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n JSON-RPC method as part of EIP-191.\n See {recover}."},"id":12133,"implemented":true,"kind":"function","modifiers":[],"name":"toEthSignedMessageHash","nameLocation":"7265:22:62","nodeType":"FunctionDefinition","parameters":{"id":12120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12119,"mutability":"mutable","name":"hash","nameLocation":"7296:4:62","nodeType":"VariableDeclaration","scope":12133,"src":"7288:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12118,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7288:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7287:14:62"},"returnParameters":{"id":12123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12122,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12133,"src":"7325:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12121,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7325:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7324:9:62"},"scope":12176,"src":"7256:265:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12154,"nodeType":"Block","src":"7886:116:62","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"19457468657265756d205369676e6564204d6573736167653a0a","id":12144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7930:32:62","typeDescriptions":{"typeIdentifier":"t_stringliteral_9af2d9c228f6cfddaa6d1e5b94e0bce4ab16bd9a472a2b7fbfd74ebff4c720b4","typeString":"literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a\""},"value":"\u0019Ethereum Signed Message:\n"},{"arguments":[{"expression":{"id":12147,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12136,"src":"7981:1:62","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":12148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7983:6:62","memberName":"length","nodeType":"MemberAccess","src":"7981:8:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12145,"name":"Strings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11815,"src":"7964:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Strings_$11815_$","typeString":"type(library Strings)"}},"id":12146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7972:8:62","memberName":"toString","nodeType":"MemberAccess","referencedDeclaration":11698,"src":"7964:16:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"}},"id":12149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7964:26:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":12150,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12136,"src":"7992:1:62","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9af2d9c228f6cfddaa6d1e5b94e0bce4ab16bd9a472a2b7fbfd74ebff4c720b4","typeString":"literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a\""},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":12142,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7913:3:62","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":12143,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7917:12:62","memberName":"encodePacked","nodeType":"MemberAccess","src":"7913:16:62","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":12151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7913:81:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":12141,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"7903:9:62","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":12152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7903:92:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":12140,"id":12153,"nodeType":"Return","src":"7896:99:62"}]},"documentation":{"id":12134,"nodeType":"StructuredDocumentation","src":"7527:274:62","text":" @dev Returns an Ethereum Signed Message, created from `s`. This\n produces hash corresponding to the one signed with the\n https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n JSON-RPC method as part of EIP-191.\n See {recover}."},"id":12155,"implemented":true,"kind":"function","modifiers":[],"name":"toEthSignedMessageHash","nameLocation":"7815:22:62","nodeType":"FunctionDefinition","parameters":{"id":12137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12136,"mutability":"mutable","name":"s","nameLocation":"7851:1:62","nodeType":"VariableDeclaration","scope":12155,"src":"7838:14:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":12135,"name":"bytes","nodeType":"ElementaryTypeName","src":"7838:5:62","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7837:16:62"},"returnParameters":{"id":12140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12139,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12155,"src":"7877:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12138,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7877:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7876:9:62"},"scope":12176,"src":"7806:196:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12174,"nodeType":"Block","src":"8443:92:62","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"1901","id":12168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8487:10:62","typeDescriptions":{"typeIdentifier":"t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541","typeString":"literal_string hex\"1901\""},"value":"\u0019\u0001"},{"id":12169,"name":"domainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12158,"src":"8499:15:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":12170,"name":"structHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12160,"src":"8516:10:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541","typeString":"literal_string hex\"1901\""},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":12166,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8470:3:62","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":12167,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8474:12:62","memberName":"encodePacked","nodeType":"MemberAccess","src":"8470:16:62","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":12171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8470:57:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":12165,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8460:9:62","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":12172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8460:68:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":12164,"id":12173,"nodeType":"Return","src":"8453:75:62"}]},"documentation":{"id":12156,"nodeType":"StructuredDocumentation","src":"8008:328:62","text":" @dev Returns an Ethereum Signed Typed Data, created from a\n `domainSeparator` and a `structHash`. This produces hash corresponding\n to the one signed with the\n https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\n JSON-RPC method as part of EIP-712.\n See {recover}."},"id":12175,"implemented":true,"kind":"function","modifiers":[],"name":"toTypedDataHash","nameLocation":"8350:15:62","nodeType":"FunctionDefinition","parameters":{"id":12161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12158,"mutability":"mutable","name":"domainSeparator","nameLocation":"8374:15:62","nodeType":"VariableDeclaration","scope":12175,"src":"8366:23:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12157,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8366:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12160,"mutability":"mutable","name":"structHash","nameLocation":"8399:10:62","nodeType":"VariableDeclaration","scope":12175,"src":"8391:18:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12159,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8391:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8365:45:62"},"returnParameters":{"id":12164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12163,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12175,"src":"8434:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12162,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8434:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8433:9:62"},"scope":12176,"src":"8341:194:62","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":12177,"src":"369:8168:62","usedErrors":[]}],"src":"112:8426:62"},"id":62},"@openzeppelin/contracts/utils/cryptography/EIP712.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/cryptography/EIP712.sol","exportedSymbols":{"ECDSA":[12176],"EIP712":[12330],"Math":[13195],"Strings":[11815]},"id":12331,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12178,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"113:23:63"},{"absolutePath":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","file":"./ECDSA.sol","id":12179,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12331,"sourceUnit":12177,"src":"138:21:63","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"EIP712","contractDependencies":[],"contractKind":"contract","documentation":{"id":12180,"nodeType":"StructuredDocumentation","src":"161:1142:63","text":" @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n they need in their contracts using a combination of `abi.encode` and `keccak256`.\n This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n ({_hashTypedDataV4}).\n The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n the chain id to protect against replay attacks on an eventual fork of the chain.\n NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n _Available since v3.4._"},"fullyImplemented":true,"id":12330,"linearizedBaseContracts":[12330],"name":"EIP712","nameLocation":"1322:6:63","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":12182,"mutability":"immutable","name":"_CACHED_DOMAIN_SEPARATOR","nameLocation":"1598:24:63","nodeType":"VariableDeclaration","scope":12330,"src":"1572:50:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12181,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1572:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":12184,"mutability":"immutable","name":"_CACHED_CHAIN_ID","nameLocation":"1654:16:63","nodeType":"VariableDeclaration","scope":12330,"src":"1628:42:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12183,"name":"uint256","nodeType":"ElementaryTypeName","src":"1628:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":12186,"mutability":"immutable","name":"_CACHED_THIS","nameLocation":"1702:12:63","nodeType":"VariableDeclaration","scope":12330,"src":"1676:38:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12185,"name":"address","nodeType":"ElementaryTypeName","src":"1676:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":12188,"mutability":"immutable","name":"_HASHED_NAME","nameLocation":"1747:12:63","nodeType":"VariableDeclaration","scope":12330,"src":"1721:38:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12187,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1721:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":12190,"mutability":"immutable","name":"_HASHED_VERSION","nameLocation":"1791:15:63","nodeType":"VariableDeclaration","scope":12330,"src":"1765:41:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12189,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1765:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":12192,"mutability":"immutable","name":"_TYPE_HASH","nameLocation":"1838:10:63","nodeType":"VariableDeclaration","scope":12330,"src":"1812:36:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12191,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1812:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"body":{"id":12256,"nodeType":"Block","src":"2519:547:63","statements":[{"assignments":[12201],"declarations":[{"constant":false,"id":12201,"mutability":"mutable","name":"hashedName","nameLocation":"2537:10:63","nodeType":"VariableDeclaration","scope":12256,"src":"2529:18:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12200,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2529:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12208,"initialValue":{"arguments":[{"arguments":[{"id":12205,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12195,"src":"2566:4:63","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12204,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2560:5:63","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":12203,"name":"bytes","nodeType":"ElementaryTypeName","src":"2560:5:63","typeDescriptions":{}}},"id":12206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2560:11:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":12202,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2550:9:63","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":12207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2550:22:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2529:43:63"},{"assignments":[12210],"declarations":[{"constant":false,"id":12210,"mutability":"mutable","name":"hashedVersion","nameLocation":"2590:13:63","nodeType":"VariableDeclaration","scope":12256,"src":"2582:21:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12209,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2582:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12217,"initialValue":{"arguments":[{"arguments":[{"id":12214,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12197,"src":"2622:7:63","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12213,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2616:5:63","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":12212,"name":"bytes","nodeType":"ElementaryTypeName","src":"2616:5:63","typeDescriptions":{}}},"id":12215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2616:14:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":12211,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2606:9:63","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":12216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2606:25:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2582:49:63"},{"assignments":[12219],"declarations":[{"constant":false,"id":12219,"mutability":"mutable","name":"typeHash","nameLocation":"2649:8:63","nodeType":"VariableDeclaration","scope":12256,"src":"2641:16:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12218,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2641:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12223,"initialValue":{"arguments":[{"hexValue":"454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429","id":12221,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2683:84:63","typeDescriptions":{"typeIdentifier":"t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f","typeString":"literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""},"value":"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f","typeString":"literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""}],"id":12220,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2660:9:63","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":12222,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2660:117:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2641:136:63"},{"expression":{"id":12226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12224,"name":"_HASHED_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12188,"src":"2787:12:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12225,"name":"hashedName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12201,"src":"2802:10:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2787:25:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12227,"nodeType":"ExpressionStatement","src":"2787:25:63"},{"expression":{"id":12230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12228,"name":"_HASHED_VERSION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12190,"src":"2822:15:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12229,"name":"hashedVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12210,"src":"2840:13:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2822:31:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12231,"nodeType":"ExpressionStatement","src":"2822:31:63"},{"expression":{"id":12235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12232,"name":"_CACHED_CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12184,"src":"2863:16:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":12233,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2882:5:63","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":12234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2888:7:63","memberName":"chainid","nodeType":"MemberAccess","src":"2882:13:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2863:32:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12236,"nodeType":"ExpressionStatement","src":"2863:32:63"},{"expression":{"id":12243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12237,"name":"_CACHED_DOMAIN_SEPARATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12182,"src":"2905:24:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12239,"name":"typeHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12219,"src":"2954:8:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":12240,"name":"hashedName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12201,"src":"2964:10:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":12241,"name":"hashedVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12210,"src":"2976:13:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12238,"name":"_buildDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12313,"src":"2932:21:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32,bytes32) view returns (bytes32)"}},"id":12242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2932:58:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2905:85:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12244,"nodeType":"ExpressionStatement","src":"2905:85:63"},{"expression":{"id":12250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12245,"name":"_CACHED_THIS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12186,"src":"3000:12:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12248,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3023:4:63","typeDescriptions":{"typeIdentifier":"t_contract$_EIP712_$12330","typeString":"contract EIP712"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_EIP712_$12330","typeString":"contract EIP712"}],"id":12247,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3015:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12246,"name":"address","nodeType":"ElementaryTypeName","src":"3015:7:63","typeDescriptions":{}}},"id":12249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3015:13:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3000:28:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12251,"nodeType":"ExpressionStatement","src":"3000:28:63"},{"expression":{"id":12254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12252,"name":"_TYPE_HASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12192,"src":"3038:10:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12253,"name":"typeHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12219,"src":"3051:8:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3038:21:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12255,"nodeType":"ExpressionStatement","src":"3038:21:63"}]},"documentation":{"id":12193,"nodeType":"StructuredDocumentation","src":"1900:559:63","text":" @dev Initializes the domain separator and parameter caches.\n The meaning of `name` and `version` is specified in\n https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n - `version`: the current major version of the signing domain.\n NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n contract upgrade]."},"id":12257,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":12198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12195,"mutability":"mutable","name":"name","nameLocation":"2490:4:63","nodeType":"VariableDeclaration","scope":12257,"src":"2476:18:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12194,"name":"string","nodeType":"ElementaryTypeName","src":"2476:6:63","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":12197,"mutability":"mutable","name":"version","nameLocation":"2510:7:63","nodeType":"VariableDeclaration","scope":12257,"src":"2496:21:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12196,"name":"string","nodeType":"ElementaryTypeName","src":"2496:6:63","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2475:43:63"},"returnParameters":{"id":12199,"nodeType":"ParameterList","parameters":[],"src":"2519:0:63"},"scope":12330,"src":"2464:602:63","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12285,"nodeType":"Block","src":"3214:246:63","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":12268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":12265,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3236:4:63","typeDescriptions":{"typeIdentifier":"t_contract$_EIP712_$12330","typeString":"contract EIP712"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_EIP712_$12330","typeString":"contract EIP712"}],"id":12264,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3228:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12263,"name":"address","nodeType":"ElementaryTypeName","src":"3228:7:63","typeDescriptions":{}}},"id":12266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3228:13:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":12267,"name":"_CACHED_THIS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12186,"src":"3245:12:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3228:29:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12269,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3261:5:63","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":12270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3267:7:63","memberName":"chainid","nodeType":"MemberAccess","src":"3261:13:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":12271,"name":"_CACHED_CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12184,"src":"3278:16:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3261:33:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3228:66:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12283,"nodeType":"Block","src":"3358:96:63","statements":[{"expression":{"arguments":[{"id":12278,"name":"_TYPE_HASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12192,"src":"3401:10:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":12279,"name":"_HASHED_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12188,"src":"3413:12:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":12280,"name":"_HASHED_VERSION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12190,"src":"3427:15:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12277,"name":"_buildDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12313,"src":"3379:21:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32,bytes32) view returns (bytes32)"}},"id":12281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3379:64:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":12262,"id":12282,"nodeType":"Return","src":"3372:71:63"}]},"id":12284,"nodeType":"IfStatement","src":"3224:230:63","trueBody":{"id":12276,"nodeType":"Block","src":"3296:56:63","statements":[{"expression":{"id":12274,"name":"_CACHED_DOMAIN_SEPARATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12182,"src":"3317:24:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":12262,"id":12275,"nodeType":"Return","src":"3310:31:63"}]}}]},"documentation":{"id":12258,"nodeType":"StructuredDocumentation","src":"3072:75:63","text":" @dev Returns the domain separator for the current chain."},"id":12286,"implemented":true,"kind":"function","modifiers":[],"name":"_domainSeparatorV4","nameLocation":"3161:18:63","nodeType":"FunctionDefinition","parameters":{"id":12259,"nodeType":"ParameterList","parameters":[],"src":"3179:2:63"},"returnParameters":{"id":12262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12261,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12286,"src":"3205:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12260,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3205:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3204:9:63"},"scope":12330,"src":"3152:308:63","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12312,"nodeType":"Block","src":"3615:108:63","statements":[{"expression":{"arguments":[{"arguments":[{"id":12300,"name":"typeHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12288,"src":"3653:8:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":12301,"name":"nameHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12290,"src":"3663:8:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":12302,"name":"versionHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12292,"src":"3673:11:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":12303,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3686:5:63","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":12304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3692:7:63","memberName":"chainid","nodeType":"MemberAccess","src":"3686:13:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":12307,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3709:4:63","typeDescriptions":{"typeIdentifier":"t_contract$_EIP712_$12330","typeString":"contract EIP712"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_EIP712_$12330","typeString":"contract EIP712"}],"id":12306,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3701:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12305,"name":"address","nodeType":"ElementaryTypeName","src":"3701:7:63","typeDescriptions":{}}},"id":12308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3701:13:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":12298,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3642:3:63","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":12299,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3646:6:63","memberName":"encode","nodeType":"MemberAccess","src":"3642:10:63","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":12309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3642:73:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":12297,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3632:9:63","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":12310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3632:84:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":12296,"id":12311,"nodeType":"Return","src":"3625:91:63"}]},"id":12313,"implemented":true,"kind":"function","modifiers":[],"name":"_buildDomainSeparator","nameLocation":"3475:21:63","nodeType":"FunctionDefinition","parameters":{"id":12293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12288,"mutability":"mutable","name":"typeHash","nameLocation":"3514:8:63","nodeType":"VariableDeclaration","scope":12313,"src":"3506:16:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12287,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3506:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12290,"mutability":"mutable","name":"nameHash","nameLocation":"3540:8:63","nodeType":"VariableDeclaration","scope":12313,"src":"3532:16:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12289,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3532:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12292,"mutability":"mutable","name":"versionHash","nameLocation":"3566:11:63","nodeType":"VariableDeclaration","scope":12313,"src":"3558:19:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12291,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3558:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3496:87:63"},"returnParameters":{"id":12296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12295,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12313,"src":"3606:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12294,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3606:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3605:9:63"},"scope":12330,"src":"3466:257:63","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":12328,"nodeType":"Block","src":"4434:79:63","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":12323,"name":"_domainSeparatorV4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12286,"src":"4473:18:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":12324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4473:20:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":12325,"name":"structHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12316,"src":"4495:10:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":12321,"name":"ECDSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12176,"src":"4451:5:63","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ECDSA_$12176_$","typeString":"type(library ECDSA)"}},"id":12322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4457:15:63","memberName":"toTypedDataHash","nodeType":"MemberAccess","referencedDeclaration":12175,"src":"4451:21:63","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32) pure returns (bytes32)"}},"id":12326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4451:55:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":12320,"id":12327,"nodeType":"Return","src":"4444:62:63"}]},"documentation":{"id":12314,"nodeType":"StructuredDocumentation","src":"3729:614:63","text":" @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n function returns the hash of the fully encoded EIP712 message for this domain.\n This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n ```solidity\n bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n     keccak256(\"Mail(address to,string contents)\"),\n     mailTo,\n     keccak256(bytes(mailContents))\n )));\n address signer = ECDSA.recover(digest, signature);\n ```"},"id":12329,"implemented":true,"kind":"function","modifiers":[],"name":"_hashTypedDataV4","nameLocation":"4357:16:63","nodeType":"FunctionDefinition","parameters":{"id":12317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12316,"mutability":"mutable","name":"structHash","nameLocation":"4382:10:63","nodeType":"VariableDeclaration","scope":12329,"src":"4374:18:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12315,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4374:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4373:20:63"},"returnParameters":{"id":12320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12319,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12329,"src":"4425:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12318,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4425:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4424:9:63"},"scope":12330,"src":"4348:165:63","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":12331,"src":"1304:3211:63","usedErrors":[]}],"src":"113:4403:63"},"id":63},"@openzeppelin/contracts/utils/math/Math.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","exportedSymbols":{"Math":[13195]},"id":13196,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12332,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"103:23:64"},{"abstract":false,"baseContracts":[],"canonicalName":"Math","contractDependencies":[],"contractKind":"library","documentation":{"id":12333,"nodeType":"StructuredDocumentation","src":"128:73:64","text":" @dev Standard math utilities missing in the Solidity language."},"fullyImplemented":true,"id":13195,"linearizedBaseContracts":[13195],"name":"Math","nameLocation":"210:4:64","nodeType":"ContractDefinition","nodes":[{"canonicalName":"Math.Rounding","id":12337,"members":[{"id":12334,"name":"Down","nameLocation":"245:4:64","nodeType":"EnumValue","src":"245:4:64"},{"id":12335,"name":"Up","nameLocation":"287:2:64","nodeType":"EnumValue","src":"287:2:64"},{"id":12336,"name":"Zero","nameLocation":"318:4:64","nodeType":"EnumValue","src":"318:4:64"}],"name":"Rounding","nameLocation":"226:8:64","nodeType":"EnumDefinition","src":"221:122:64"},{"body":{"id":12354,"nodeType":"Block","src":"480:37:64","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12347,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12340,"src":"497:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":12348,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12342,"src":"501:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"497:5:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":12351,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12342,"src":"509:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"497:13:64","trueExpression":{"id":12350,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12340,"src":"505:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12346,"id":12353,"nodeType":"Return","src":"490:20:64"}]},"documentation":{"id":12338,"nodeType":"StructuredDocumentation","src":"349:59:64","text":" @dev Returns the largest of two numbers."},"id":12355,"implemented":true,"kind":"function","modifiers":[],"name":"max","nameLocation":"422:3:64","nodeType":"FunctionDefinition","parameters":{"id":12343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12340,"mutability":"mutable","name":"a","nameLocation":"434:1:64","nodeType":"VariableDeclaration","scope":12355,"src":"426:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12339,"name":"uint256","nodeType":"ElementaryTypeName","src":"426:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12342,"mutability":"mutable","name":"b","nameLocation":"445:1:64","nodeType":"VariableDeclaration","scope":12355,"src":"437:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12341,"name":"uint256","nodeType":"ElementaryTypeName","src":"437:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"425:22:64"},"returnParameters":{"id":12346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12345,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12355,"src":"471:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12344,"name":"uint256","nodeType":"ElementaryTypeName","src":"471:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"470:9:64"},"scope":13195,"src":"413:104:64","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12372,"nodeType":"Block","src":"655:37:64","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12365,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12358,"src":"672:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":12366,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12360,"src":"676:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"672:5:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":12369,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12360,"src":"684:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"672:13:64","trueExpression":{"id":12368,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12358,"src":"680:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12364,"id":12371,"nodeType":"Return","src":"665:20:64"}]},"documentation":{"id":12356,"nodeType":"StructuredDocumentation","src":"523:60:64","text":" @dev Returns the smallest of two numbers."},"id":12373,"implemented":true,"kind":"function","modifiers":[],"name":"min","nameLocation":"597:3:64","nodeType":"FunctionDefinition","parameters":{"id":12361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12358,"mutability":"mutable","name":"a","nameLocation":"609:1:64","nodeType":"VariableDeclaration","scope":12373,"src":"601:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12357,"name":"uint256","nodeType":"ElementaryTypeName","src":"601:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12360,"mutability":"mutable","name":"b","nameLocation":"620:1:64","nodeType":"VariableDeclaration","scope":12373,"src":"612:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12359,"name":"uint256","nodeType":"ElementaryTypeName","src":"612:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"600:22:64"},"returnParameters":{"id":12364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12363,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12373,"src":"646:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12362,"name":"uint256","nodeType":"ElementaryTypeName","src":"646:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"645:9:64"},"scope":13195,"src":"588:104:64","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12395,"nodeType":"Block","src":"876:82:64","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12383,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12376,"src":"931:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":12384,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12378,"src":"935:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"931:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12386,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"930:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12387,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12376,"src":"941:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":12388,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12378,"src":"945:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"941:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12390,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"940:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":12391,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"950:1:64","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"940:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"930:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12382,"id":12394,"nodeType":"Return","src":"923:28:64"}]},"documentation":{"id":12374,"nodeType":"StructuredDocumentation","src":"698:102:64","text":" @dev Returns the average of two numbers. The result is rounded towards\n zero."},"id":12396,"implemented":true,"kind":"function","modifiers":[],"name":"average","nameLocation":"814:7:64","nodeType":"FunctionDefinition","parameters":{"id":12379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12376,"mutability":"mutable","name":"a","nameLocation":"830:1:64","nodeType":"VariableDeclaration","scope":12396,"src":"822:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12375,"name":"uint256","nodeType":"ElementaryTypeName","src":"822:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12378,"mutability":"mutable","name":"b","nameLocation":"841:1:64","nodeType":"VariableDeclaration","scope":12396,"src":"833:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12377,"name":"uint256","nodeType":"ElementaryTypeName","src":"833:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"821:22:64"},"returnParameters":{"id":12382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12381,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12396,"src":"867:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12380,"name":"uint256","nodeType":"ElementaryTypeName","src":"867:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"866:9:64"},"scope":13195,"src":"805:153:64","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12420,"nodeType":"Block","src":"1228:123:64","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12406,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12399,"src":"1316:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12407,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1321:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1316:6:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12410,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12399,"src":"1330:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":12411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1334:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1330:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12413,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1329:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":12414,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12401,"src":"1339:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1329:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":12416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1343:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1329:15:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"1316:28:64","trueExpression":{"hexValue":"30","id":12409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1325:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12405,"id":12419,"nodeType":"Return","src":"1309:35:64"}]},"documentation":{"id":12397,"nodeType":"StructuredDocumentation","src":"964:188:64","text":" @dev Returns the ceiling of the division of two numbers.\n This differs from standard division with `/` in that it rounds up instead\n of rounding down."},"id":12421,"implemented":true,"kind":"function","modifiers":[],"name":"ceilDiv","nameLocation":"1166:7:64","nodeType":"FunctionDefinition","parameters":{"id":12402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12399,"mutability":"mutable","name":"a","nameLocation":"1182:1:64","nodeType":"VariableDeclaration","scope":12421,"src":"1174:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12398,"name":"uint256","nodeType":"ElementaryTypeName","src":"1174:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12401,"mutability":"mutable","name":"b","nameLocation":"1193:1:64","nodeType":"VariableDeclaration","scope":12421,"src":"1185:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12400,"name":"uint256","nodeType":"ElementaryTypeName","src":"1185:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1173:22:64"},"returnParameters":{"id":12405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12404,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12421,"src":"1219:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12403,"name":"uint256","nodeType":"ElementaryTypeName","src":"1219:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1218:9:64"},"scope":13195,"src":"1157:194:64","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12542,"nodeType":"Block","src":"1795:3797:64","statements":[{"id":12541,"nodeType":"UncheckedBlock","src":"1805:3781:64","statements":[{"assignments":[12434],"declarations":[{"constant":false,"id":12434,"mutability":"mutable","name":"prod0","nameLocation":"2134:5:64","nodeType":"VariableDeclaration","scope":12541,"src":"2126:13:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12433,"name":"uint256","nodeType":"ElementaryTypeName","src":"2126:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12435,"nodeType":"VariableDeclarationStatement","src":"2126:13:64"},{"assignments":[12437],"declarations":[{"constant":false,"id":12437,"mutability":"mutable","name":"prod1","nameLocation":"2206:5:64","nodeType":"VariableDeclaration","scope":12541,"src":"2198:13:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12436,"name":"uint256","nodeType":"ElementaryTypeName","src":"2198:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12438,"nodeType":"VariableDeclarationStatement","src":"2198:13:64"},{"AST":{"nodeType":"YulBlock","src":"2278:157:64","statements":[{"nodeType":"YulVariableDeclaration","src":"2296:30:64","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2313:1:64"},{"name":"y","nodeType":"YulIdentifier","src":"2316:1:64"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2323:1:64","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2319:3:64"},"nodeType":"YulFunctionCall","src":"2319:6:64"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"2306:6:64"},"nodeType":"YulFunctionCall","src":"2306:20:64"},"variables":[{"name":"mm","nodeType":"YulTypedName","src":"2300:2:64","type":""}]},{"nodeType":"YulAssignment","src":"2343:18:64","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2356:1:64"},{"name":"y","nodeType":"YulIdentifier","src":"2359:1:64"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"2352:3:64"},"nodeType":"YulFunctionCall","src":"2352:9:64"},"variableNames":[{"name":"prod0","nodeType":"YulIdentifier","src":"2343:5:64"}]},{"nodeType":"YulAssignment","src":"2378:43:64","value":{"arguments":[{"arguments":[{"name":"mm","nodeType":"YulIdentifier","src":"2395:2:64"},{"name":"prod0","nodeType":"YulIdentifier","src":"2399:5:64"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2391:3:64"},"nodeType":"YulFunctionCall","src":"2391:14:64"},{"arguments":[{"name":"mm","nodeType":"YulIdentifier","src":"2410:2:64"},{"name":"prod0","nodeType":"YulIdentifier","src":"2414:5:64"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2407:2:64"},"nodeType":"YulFunctionCall","src":"2407:13:64"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2387:3:64"},"nodeType":"YulFunctionCall","src":"2387:34:64"},"variableNames":[{"name":"prod1","nodeType":"YulIdentifier","src":"2378:5:64"}]}]},"evmVersion":"london","externalReferences":[{"declaration":12434,"isOffset":false,"isSlot":false,"src":"2343:5:64","valueSize":1},{"declaration":12434,"isOffset":false,"isSlot":false,"src":"2399:5:64","valueSize":1},{"declaration":12434,"isOffset":false,"isSlot":false,"src":"2414:5:64","valueSize":1},{"declaration":12437,"isOffset":false,"isSlot":false,"src":"2378:5:64","valueSize":1},{"declaration":12424,"isOffset":false,"isSlot":false,"src":"2313:1:64","valueSize":1},{"declaration":12424,"isOffset":false,"isSlot":false,"src":"2356:1:64","valueSize":1},{"declaration":12426,"isOffset":false,"isSlot":false,"src":"2316:1:64","valueSize":1},{"declaration":12426,"isOffset":false,"isSlot":false,"src":"2359:1:64","valueSize":1}],"id":12439,"nodeType":"InlineAssembly","src":"2269:166:64"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12440,"name":"prod1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12437,"src":"2516:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12441,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2525:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2516:10:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12448,"nodeType":"IfStatement","src":"2512:75:64","trueBody":{"id":12447,"nodeType":"Block","src":"2528:59:64","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12443,"name":"prod0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12434,"src":"2553:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":12444,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12428,"src":"2561:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2553:19:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12432,"id":12446,"nodeType":"Return","src":"2546:26:64"}]}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12450,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12428,"src":"2697:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":12451,"name":"prod1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12437,"src":"2711:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2697:19:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":12449,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2689:7:64","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":12453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2689:28:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12454,"nodeType":"ExpressionStatement","src":"2689:28:64"},{"assignments":[12456],"declarations":[{"constant":false,"id":12456,"mutability":"mutable","name":"remainder","nameLocation":"2981:9:64","nodeType":"VariableDeclaration","scope":12541,"src":"2973:17:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12455,"name":"uint256","nodeType":"ElementaryTypeName","src":"2973:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12457,"nodeType":"VariableDeclarationStatement","src":"2973:17:64"},{"AST":{"nodeType":"YulBlock","src":"3013:291:64","statements":[{"nodeType":"YulAssignment","src":"3082:38:64","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3102:1:64"},{"name":"y","nodeType":"YulIdentifier","src":"3105:1:64"},{"name":"denominator","nodeType":"YulIdentifier","src":"3108:11:64"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"3095:6:64"},"nodeType":"YulFunctionCall","src":"3095:25:64"},"variableNames":[{"name":"remainder","nodeType":"YulIdentifier","src":"3082:9:64"}]},{"nodeType":"YulAssignment","src":"3202:41:64","value":{"arguments":[{"name":"prod1","nodeType":"YulIdentifier","src":"3215:5:64"},{"arguments":[{"name":"remainder","nodeType":"YulIdentifier","src":"3225:9:64"},{"name":"prod0","nodeType":"YulIdentifier","src":"3236:5:64"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3222:2:64"},"nodeType":"YulFunctionCall","src":"3222:20:64"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3211:3:64"},"nodeType":"YulFunctionCall","src":"3211:32:64"},"variableNames":[{"name":"prod1","nodeType":"YulIdentifier","src":"3202:5:64"}]},{"nodeType":"YulAssignment","src":"3260:30:64","value":{"arguments":[{"name":"prod0","nodeType":"YulIdentifier","src":"3273:5:64"},{"name":"remainder","nodeType":"YulIdentifier","src":"3280:9:64"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3269:3:64"},"nodeType":"YulFunctionCall","src":"3269:21:64"},"variableNames":[{"name":"prod0","nodeType":"YulIdentifier","src":"3260:5:64"}]}]},"evmVersion":"london","externalReferences":[{"declaration":12428,"isOffset":false,"isSlot":false,"src":"3108:11:64","valueSize":1},{"declaration":12434,"isOffset":false,"isSlot":false,"src":"3236:5:64","valueSize":1},{"declaration":12434,"isOffset":false,"isSlot":false,"src":"3260:5:64","valueSize":1},{"declaration":12434,"isOffset":false,"isSlot":false,"src":"3273:5:64","valueSize":1},{"declaration":12437,"isOffset":false,"isSlot":false,"src":"3202:5:64","valueSize":1},{"declaration":12437,"isOffset":false,"isSlot":false,"src":"3215:5:64","valueSize":1},{"declaration":12456,"isOffset":false,"isSlot":false,"src":"3082:9:64","valueSize":1},{"declaration":12456,"isOffset":false,"isSlot":false,"src":"3225:9:64","valueSize":1},{"declaration":12456,"isOffset":false,"isSlot":false,"src":"3280:9:64","valueSize":1},{"declaration":12424,"isOffset":false,"isSlot":false,"src":"3102:1:64","valueSize":1},{"declaration":12426,"isOffset":false,"isSlot":false,"src":"3105:1:64","valueSize":1}],"id":12458,"nodeType":"InlineAssembly","src":"3004:300:64"},{"assignments":[12460],"declarations":[{"constant":false,"id":12460,"mutability":"mutable","name":"twos","nameLocation":"3619:4:64","nodeType":"VariableDeclaration","scope":12541,"src":"3611:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12459,"name":"uint256","nodeType":"ElementaryTypeName","src":"3611:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12468,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12461,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12428,"src":"3626:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"3641:12:64","subExpression":{"id":12462,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12428,"src":"3642:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":12464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3656:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3641:16:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12466,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3640:18:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3626:32:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3611:47:64"},{"AST":{"nodeType":"YulBlock","src":"3681:362:64","statements":[{"nodeType":"YulAssignment","src":"3746:37:64","value":{"arguments":[{"name":"denominator","nodeType":"YulIdentifier","src":"3765:11:64"},{"name":"twos","nodeType":"YulIdentifier","src":"3778:4:64"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3761:3:64"},"nodeType":"YulFunctionCall","src":"3761:22:64"},"variableNames":[{"name":"denominator","nodeType":"YulIdentifier","src":"3746:11:64"}]},{"nodeType":"YulAssignment","src":"3850:25:64","value":{"arguments":[{"name":"prod0","nodeType":"YulIdentifier","src":"3863:5:64"},{"name":"twos","nodeType":"YulIdentifier","src":"3870:4:64"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3859:3:64"},"nodeType":"YulFunctionCall","src":"3859:16:64"},"variableNames":[{"name":"prod0","nodeType":"YulIdentifier","src":"3850:5:64"}]},{"nodeType":"YulAssignment","src":"3990:39:64","value":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4010:1:64","type":"","value":"0"},{"name":"twos","nodeType":"YulIdentifier","src":"4013:4:64"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4006:3:64"},"nodeType":"YulFunctionCall","src":"4006:12:64"},{"name":"twos","nodeType":"YulIdentifier","src":"4020:4:64"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"4002:3:64"},"nodeType":"YulFunctionCall","src":"4002:23:64"},{"kind":"number","nodeType":"YulLiteral","src":"4027:1:64","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3998:3:64"},"nodeType":"YulFunctionCall","src":"3998:31:64"},"variableNames":[{"name":"twos","nodeType":"YulIdentifier","src":"3990:4:64"}]}]},"evmVersion":"london","externalReferences":[{"declaration":12428,"isOffset":false,"isSlot":false,"src":"3746:11:64","valueSize":1},{"declaration":12428,"isOffset":false,"isSlot":false,"src":"3765:11:64","valueSize":1},{"declaration":12434,"isOffset":false,"isSlot":false,"src":"3850:5:64","valueSize":1},{"declaration":12434,"isOffset":false,"isSlot":false,"src":"3863:5:64","valueSize":1},{"declaration":12460,"isOffset":false,"isSlot":false,"src":"3778:4:64","valueSize":1},{"declaration":12460,"isOffset":false,"isSlot":false,"src":"3870:4:64","valueSize":1},{"declaration":12460,"isOffset":false,"isSlot":false,"src":"3990:4:64","valueSize":1},{"declaration":12460,"isOffset":false,"isSlot":false,"src":"4013:4:64","valueSize":1},{"declaration":12460,"isOffset":false,"isSlot":false,"src":"4020:4:64","valueSize":1}],"id":12469,"nodeType":"InlineAssembly","src":"3672:371:64"},{"expression":{"id":12474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12470,"name":"prod0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12434,"src":"4109:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12471,"name":"prod1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12437,"src":"4118:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":12472,"name":"twos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12460,"src":"4126:4:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4118:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4109:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12475,"nodeType":"ExpressionStatement","src":"4109:21:64"},{"assignments":[12477],"declarations":[{"constant":false,"id":12477,"mutability":"mutable","name":"inverse","nameLocation":"4456:7:64","nodeType":"VariableDeclaration","scope":12541,"src":"4448:15:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12476,"name":"uint256","nodeType":"ElementaryTypeName","src":"4448:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12484,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"33","id":12478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4467:1:64","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":12479,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12428,"src":"4471:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4467:15:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12481,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4466:17:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"hexValue":"32","id":12482,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4486:1:64","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4466:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4448:39:64"},{"expression":{"id":12491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12485,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12477,"src":"4704:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":12486,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4715:1:64","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12487,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12428,"src":"4719:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":12488,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12477,"src":"4733:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4719:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4715:25:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4704:36:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12492,"nodeType":"ExpressionStatement","src":"4704:36:64"},{"expression":{"id":12499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12493,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12477,"src":"4773:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":12494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4784:1:64","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12495,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12428,"src":"4788:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":12496,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12477,"src":"4802:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4788:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4784:25:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4773:36:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12500,"nodeType":"ExpressionStatement","src":"4773:36:64"},{"expression":{"id":12507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12501,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12477,"src":"4843:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":12502,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4854:1:64","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12503,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12428,"src":"4858:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":12504,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12477,"src":"4872:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4858:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4854:25:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4843:36:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12508,"nodeType":"ExpressionStatement","src":"4843:36:64"},{"expression":{"id":12515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12509,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12477,"src":"4913:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":12510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4924:1:64","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12511,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12428,"src":"4928:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":12512,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12477,"src":"4942:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4928:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4924:25:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4913:36:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12516,"nodeType":"ExpressionStatement","src":"4913:36:64"},{"expression":{"id":12523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12517,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12477,"src":"4983:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":12518,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4994:1:64","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12519,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12428,"src":"4998:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":12520,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12477,"src":"5012:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4998:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4994:25:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4983:36:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12524,"nodeType":"ExpressionStatement","src":"4983:36:64"},{"expression":{"id":12531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12525,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12477,"src":"5054:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":12526,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5065:1:64","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12527,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12428,"src":"5069:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":12528,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12477,"src":"5083:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5069:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5065:25:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5054:36:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12532,"nodeType":"ExpressionStatement","src":"5054:36:64"},{"expression":{"id":12537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12533,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12431,"src":"5524:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12534,"name":"prod0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12434,"src":"5533:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":12535,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12477,"src":"5541:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5533:15:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5524:24:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12538,"nodeType":"ExpressionStatement","src":"5524:24:64"},{"expression":{"id":12539,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12431,"src":"5569:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12432,"id":12540,"nodeType":"Return","src":"5562:13:64"}]}]},"documentation":{"id":12422,"nodeType":"StructuredDocumentation","src":"1357:305:64","text":" @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n with further edits by Uniswap Labs also under MIT license."},"id":12543,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"1676:6:64","nodeType":"FunctionDefinition","parameters":{"id":12429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12424,"mutability":"mutable","name":"x","nameLocation":"1700:1:64","nodeType":"VariableDeclaration","scope":12543,"src":"1692:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12423,"name":"uint256","nodeType":"ElementaryTypeName","src":"1692:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12426,"mutability":"mutable","name":"y","nameLocation":"1719:1:64","nodeType":"VariableDeclaration","scope":12543,"src":"1711:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12425,"name":"uint256","nodeType":"ElementaryTypeName","src":"1711:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12428,"mutability":"mutable","name":"denominator","nameLocation":"1738:11:64","nodeType":"VariableDeclaration","scope":12543,"src":"1730:19:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12427,"name":"uint256","nodeType":"ElementaryTypeName","src":"1730:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1682:73:64"},"returnParameters":{"id":12432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12431,"mutability":"mutable","name":"result","nameLocation":"1787:6:64","nodeType":"VariableDeclaration","scope":12543,"src":"1779:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12430,"name":"uint256","nodeType":"ElementaryTypeName","src":"1779:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1778:16:64"},"scope":13195,"src":"1667:3925:64","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12586,"nodeType":"Block","src":"5872:189:64","statements":[{"assignments":[12559],"declarations":[{"constant":false,"id":12559,"mutability":"mutable","name":"result","nameLocation":"5890:6:64","nodeType":"VariableDeclaration","scope":12586,"src":"5882:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12558,"name":"uint256","nodeType":"ElementaryTypeName","src":"5882:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12565,"initialValue":{"arguments":[{"id":12561,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12546,"src":"5906:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12562,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"5909:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12563,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12550,"src":"5912:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12560,"name":"mulDiv","nodeType":"Identifier","overloadedDeclarations":[12543,12587],"referencedDeclaration":12543,"src":"5899:6:64","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":12564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5899:25:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5882:42:64"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"},"id":12569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12566,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12553,"src":"5938:8:64","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":12567,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12337,"src":"5950:8:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$12337_$","typeString":"type(enum Math.Rounding)"}},"id":12568,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5959:2:64","memberName":"Up","nodeType":"MemberAccess","referencedDeclaration":12335,"src":"5950:11:64","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"}},"src":"5938:23:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":12571,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12546,"src":"5972:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12572,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"5975:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12573,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12550,"src":"5978:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12570,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5965:6:64","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":12574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5965:25:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5993:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5965:29:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5938:56:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12583,"nodeType":"IfStatement","src":"5934:98:64","trueBody":{"id":12582,"nodeType":"Block","src":"5996:36:64","statements":[{"expression":{"id":12580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12578,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12559,"src":"6010:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":12579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6020:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6010:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12581,"nodeType":"ExpressionStatement","src":"6010:11:64"}]}},{"expression":{"id":12584,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12559,"src":"6048:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12557,"id":12585,"nodeType":"Return","src":"6041:13:64"}]},"documentation":{"id":12544,"nodeType":"StructuredDocumentation","src":"5598:121:64","text":" @notice Calculates x * y / denominator with full precision, following the selected rounding direction."},"id":12587,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"5733:6:64","nodeType":"FunctionDefinition","parameters":{"id":12554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12546,"mutability":"mutable","name":"x","nameLocation":"5757:1:64","nodeType":"VariableDeclaration","scope":12587,"src":"5749:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12545,"name":"uint256","nodeType":"ElementaryTypeName","src":"5749:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12548,"mutability":"mutable","name":"y","nameLocation":"5776:1:64","nodeType":"VariableDeclaration","scope":12587,"src":"5768:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12547,"name":"uint256","nodeType":"ElementaryTypeName","src":"5768:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12550,"mutability":"mutable","name":"denominator","nameLocation":"5795:11:64","nodeType":"VariableDeclaration","scope":12587,"src":"5787:19:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12549,"name":"uint256","nodeType":"ElementaryTypeName","src":"5787:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12553,"mutability":"mutable","name":"rounding","nameLocation":"5825:8:64","nodeType":"VariableDeclaration","scope":12587,"src":"5816:17:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"},"typeName":{"id":12552,"nodeType":"UserDefinedTypeName","pathNode":{"id":12551,"name":"Rounding","nameLocations":["5816:8:64"],"nodeType":"IdentifierPath","referencedDeclaration":12337,"src":"5816:8:64"},"referencedDeclaration":12337,"src":"5816:8:64","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"5739:100:64"},"returnParameters":{"id":12557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12556,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12587,"src":"5863:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12555,"name":"uint256","nodeType":"ElementaryTypeName","src":"5863:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5862:9:64"},"scope":13195,"src":"5724:337:64","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12698,"nodeType":"Block","src":"6337:1585:64","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12595,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12590,"src":"6351:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12596,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6356:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6351:6:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12601,"nodeType":"IfStatement","src":"6347:45:64","trueBody":{"id":12600,"nodeType":"Block","src":"6359:33:64","statements":[{"expression":{"hexValue":"30","id":12598,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6380:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":12594,"id":12599,"nodeType":"Return","src":"6373:8:64"}]}},{"assignments":[12603],"declarations":[{"constant":false,"id":12603,"mutability":"mutable","name":"result","nameLocation":"7079:6:64","nodeType":"VariableDeclaration","scope":12698,"src":"7071:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12602,"name":"uint256","nodeType":"ElementaryTypeName","src":"7071:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12612,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":12604,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7088:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":12606,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12590,"src":"7099:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12605,"name":"log2","nodeType":"Identifier","overloadedDeclarations":[12867,12903],"referencedDeclaration":12867,"src":"7094:4:64","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":12607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7094:7:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":12608,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7105:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7094:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12610,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7093:14:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7088:19:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7071:36:64"},{"id":12697,"nodeType":"UncheckedBlock","src":"7508:408:64","statements":[{"expression":{"id":12622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12613,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7532:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12614,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7542:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12615,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12590,"src":"7551:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":12616,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7555:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7551:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7542:19:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12619,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7541:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":12620,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7566:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7541:26:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7532:35:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12623,"nodeType":"ExpressionStatement","src":"7532:35:64"},{"expression":{"id":12633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12624,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7581:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12625,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7591:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12626,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12590,"src":"7600:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":12627,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7604:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7600:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7591:19:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12630,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7590:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":12631,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7615:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7590:26:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7581:35:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12634,"nodeType":"ExpressionStatement","src":"7581:35:64"},{"expression":{"id":12644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12635,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7630:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12636,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7640:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12637,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12590,"src":"7649:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":12638,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7653:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7649:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7640:19:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12641,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7639:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":12642,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7664:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7639:26:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7630:35:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12645,"nodeType":"ExpressionStatement","src":"7630:35:64"},{"expression":{"id":12655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12646,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7679:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12647,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7689:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12648,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12590,"src":"7698:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":12649,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7702:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7698:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7689:19:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12652,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7688:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":12653,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7713:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7688:26:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7679:35:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12656,"nodeType":"ExpressionStatement","src":"7679:35:64"},{"expression":{"id":12666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12657,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7728:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12658,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7738:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12659,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12590,"src":"7747:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":12660,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7751:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7747:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7738:19:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12663,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7737:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":12664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7762:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7737:26:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7728:35:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12667,"nodeType":"ExpressionStatement","src":"7728:35:64"},{"expression":{"id":12677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12668,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7777:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12669,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7787:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12670,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12590,"src":"7796:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":12671,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7800:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7796:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7787:19:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12674,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7786:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":12675,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7811:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7786:26:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7777:35:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12678,"nodeType":"ExpressionStatement","src":"7777:35:64"},{"expression":{"id":12688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12679,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7826:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12680,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7836:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12681,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12590,"src":"7845:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":12682,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7849:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7845:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7836:19:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12685,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7835:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":12686,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7860:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7835:26:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7826:35:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12689,"nodeType":"ExpressionStatement","src":"7826:35:64"},{"expression":{"arguments":[{"id":12691,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7886:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12692,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12590,"src":"7894:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":12693,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12603,"src":"7898:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7894:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12690,"name":"min","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12373,"src":"7882:3:64","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":12695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7882:23:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12594,"id":12696,"nodeType":"Return","src":"7875:30:64"}]}]},"documentation":{"id":12588,"nodeType":"StructuredDocumentation","src":"6067:208:64","text":" @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11)."},"id":12699,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"6289:4:64","nodeType":"FunctionDefinition","parameters":{"id":12591,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12590,"mutability":"mutable","name":"a","nameLocation":"6302:1:64","nodeType":"VariableDeclaration","scope":12699,"src":"6294:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12589,"name":"uint256","nodeType":"ElementaryTypeName","src":"6294:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6293:11:64"},"returnParameters":{"id":12594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12593,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12699,"src":"6328:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12592,"name":"uint256","nodeType":"ElementaryTypeName","src":"6328:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6327:9:64"},"scope":13195,"src":"6280:1642:64","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12734,"nodeType":"Block","src":"8098:161:64","statements":[{"id":12733,"nodeType":"UncheckedBlock","src":"8108:145:64","statements":[{"assignments":[12711],"declarations":[{"constant":false,"id":12711,"mutability":"mutable","name":"result","nameLocation":"8140:6:64","nodeType":"VariableDeclaration","scope":12733,"src":"8132:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12710,"name":"uint256","nodeType":"ElementaryTypeName","src":"8132:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12715,"initialValue":{"arguments":[{"id":12713,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12702,"src":"8154:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12712,"name":"sqrt","nodeType":"Identifier","overloadedDeclarations":[12699,12735],"referencedDeclaration":12699,"src":"8149:4:64","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":12714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8149:7:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8132:24:64"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12716,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12711,"src":"8177:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"},"id":12720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12717,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12705,"src":"8187:8:64","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":12718,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12337,"src":"8199:8:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$12337_$","typeString":"type(enum Math.Rounding)"}},"id":12719,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8208:2:64","memberName":"Up","nodeType":"MemberAccess","referencedDeclaration":12335,"src":"8199:11:64","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"}},"src":"8187:23:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12721,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12711,"src":"8214:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":12722,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12711,"src":"8223:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8214:15:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":12724,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12702,"src":"8232:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8214:19:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8187:46:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":12728,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8240:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":12729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8187:54:64","trueExpression":{"hexValue":"31","id":12727,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8236:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":12730,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8186:56:64","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8177:65:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12709,"id":12732,"nodeType":"Return","src":"8170:72:64"}]}]},"documentation":{"id":12700,"nodeType":"StructuredDocumentation","src":"7928:89:64","text":" @notice Calculates sqrt(a), following the selected rounding direction."},"id":12735,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"8031:4:64","nodeType":"FunctionDefinition","parameters":{"id":12706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12702,"mutability":"mutable","name":"a","nameLocation":"8044:1:64","nodeType":"VariableDeclaration","scope":12735,"src":"8036:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12701,"name":"uint256","nodeType":"ElementaryTypeName","src":"8036:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12705,"mutability":"mutable","name":"rounding","nameLocation":"8056:8:64","nodeType":"VariableDeclaration","scope":12735,"src":"8047:17:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"},"typeName":{"id":12704,"nodeType":"UserDefinedTypeName","pathNode":{"id":12703,"name":"Rounding","nameLocations":["8047:8:64"],"nodeType":"IdentifierPath","referencedDeclaration":12337,"src":"8047:8:64"},"referencedDeclaration":12337,"src":"8047:8:64","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"8035:30:64"},"returnParameters":{"id":12709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12708,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12735,"src":"8089:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12707,"name":"uint256","nodeType":"ElementaryTypeName","src":"8089:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8088:9:64"},"scope":13195,"src":"8022:237:64","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12866,"nodeType":"Block","src":"8444:922:64","statements":[{"assignments":[12744],"declarations":[{"constant":false,"id":12744,"mutability":"mutable","name":"result","nameLocation":"8462:6:64","nodeType":"VariableDeclaration","scope":12866,"src":"8454:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12743,"name":"uint256","nodeType":"ElementaryTypeName","src":"8454:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12746,"initialValue":{"hexValue":"30","id":12745,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8471:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8454:18:64"},{"id":12863,"nodeType":"UncheckedBlock","src":"8482:855:64","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12747,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12738,"src":"8510:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"313238","id":12748,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8519:3:64","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"8510:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12750,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8525:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8510:16:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12761,"nodeType":"IfStatement","src":"8506:99:64","trueBody":{"id":12760,"nodeType":"Block","src":"8528:77:64","statements":[{"expression":{"id":12754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12752,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12738,"src":"8546:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"313238","id":12753,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8556:3:64","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"8546:13:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12755,"nodeType":"ExpressionStatement","src":"8546:13:64"},{"expression":{"id":12758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12756,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12744,"src":"8577:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"313238","id":12757,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8587:3:64","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"8577:13:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12759,"nodeType":"ExpressionStatement","src":"8577:13:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12762,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12738,"src":"8622:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3634","id":12763,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8631:2:64","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"8622:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12765,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8636:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8622:15:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12776,"nodeType":"IfStatement","src":"8618:96:64","trueBody":{"id":12775,"nodeType":"Block","src":"8639:75:64","statements":[{"expression":{"id":12769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12767,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12738,"src":"8657:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3634","id":12768,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8667:2:64","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"8657:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12770,"nodeType":"ExpressionStatement","src":"8657:12:64"},{"expression":{"id":12773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12771,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12744,"src":"8687:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3634","id":12772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8697:2:64","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"8687:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12774,"nodeType":"ExpressionStatement","src":"8687:12:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12777,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12738,"src":"8731:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3332","id":12778,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8740:2:64","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"8731:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8745:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8731:15:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12791,"nodeType":"IfStatement","src":"8727:96:64","trueBody":{"id":12790,"nodeType":"Block","src":"8748:75:64","statements":[{"expression":{"id":12784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12782,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12738,"src":"8766:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3332","id":12783,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8776:2:64","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"8766:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12785,"nodeType":"ExpressionStatement","src":"8766:12:64"},{"expression":{"id":12788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12786,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12744,"src":"8796:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":12787,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8806:2:64","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"8796:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12789,"nodeType":"ExpressionStatement","src":"8796:12:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12792,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12738,"src":"8840:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3136","id":12793,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8849:2:64","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"8840:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8854:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8840:15:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12806,"nodeType":"IfStatement","src":"8836:96:64","trueBody":{"id":12805,"nodeType":"Block","src":"8857:75:64","statements":[{"expression":{"id":12799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12797,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12738,"src":"8875:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3136","id":12798,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8885:2:64","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"8875:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12800,"nodeType":"ExpressionStatement","src":"8875:12:64"},{"expression":{"id":12803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12801,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12744,"src":"8905:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":12802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8915:2:64","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"8905:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12804,"nodeType":"ExpressionStatement","src":"8905:12:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12807,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12738,"src":"8949:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"38","id":12808,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8958:1:64","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"8949:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8962:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8949:14:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12821,"nodeType":"IfStatement","src":"8945:93:64","trueBody":{"id":12820,"nodeType":"Block","src":"8965:73:64","statements":[{"expression":{"id":12814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12812,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12738,"src":"8983:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"38","id":12813,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8993:1:64","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"8983:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12815,"nodeType":"ExpressionStatement","src":"8983:11:64"},{"expression":{"id":12818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12816,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12744,"src":"9012:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":12817,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9022:1:64","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"9012:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12819,"nodeType":"ExpressionStatement","src":"9012:11:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12822,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12738,"src":"9055:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"34","id":12823,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9064:1:64","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"9055:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9068:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9055:14:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12836,"nodeType":"IfStatement","src":"9051:93:64","trueBody":{"id":12835,"nodeType":"Block","src":"9071:73:64","statements":[{"expression":{"id":12829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12827,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12738,"src":"9089:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":12828,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9099:1:64","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"9089:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12830,"nodeType":"ExpressionStatement","src":"9089:11:64"},{"expression":{"id":12833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12831,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12744,"src":"9118:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":12832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9128:1:64","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"9118:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12834,"nodeType":"ExpressionStatement","src":"9118:11:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12837,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12738,"src":"9161:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"32","id":12838,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9170:1:64","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"9161:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12840,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9174:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9161:14:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12851,"nodeType":"IfStatement","src":"9157:93:64","trueBody":{"id":12850,"nodeType":"Block","src":"9177:73:64","statements":[{"expression":{"id":12844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12842,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12738,"src":"9195:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"32","id":12843,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9205:1:64","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"9195:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12845,"nodeType":"ExpressionStatement","src":"9195:11:64"},{"expression":{"id":12848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12846,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12744,"src":"9224:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":12847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9234:1:64","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"9224:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12849,"nodeType":"ExpressionStatement","src":"9224:11:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12852,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12738,"src":"9267:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":12853,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9276:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9267:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9280:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9267:14:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12862,"nodeType":"IfStatement","src":"9263:64:64","trueBody":{"id":12861,"nodeType":"Block","src":"9283:44:64","statements":[{"expression":{"id":12859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12857,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12744,"src":"9301:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":12858,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9311:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9301:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12860,"nodeType":"ExpressionStatement","src":"9301:11:64"}]}}]},{"expression":{"id":12864,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12744,"src":"9353:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12742,"id":12865,"nodeType":"Return","src":"9346:13:64"}]},"documentation":{"id":12736,"nodeType":"StructuredDocumentation","src":"8265:113:64","text":" @dev Return the log in base 2, rounded down, of a positive value.\n Returns 0 if given 0."},"id":12867,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"8392:4:64","nodeType":"FunctionDefinition","parameters":{"id":12739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12738,"mutability":"mutable","name":"value","nameLocation":"8405:5:64","nodeType":"VariableDeclaration","scope":12867,"src":"8397:13:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12737,"name":"uint256","nodeType":"ElementaryTypeName","src":"8397:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8396:15:64"},"returnParameters":{"id":12742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12741,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12867,"src":"8435:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12740,"name":"uint256","nodeType":"ElementaryTypeName","src":"8435:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8434:9:64"},"scope":13195,"src":"8383:983:64","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12902,"nodeType":"Block","src":"9599:165:64","statements":[{"id":12901,"nodeType":"UncheckedBlock","src":"9609:149:64","statements":[{"assignments":[12879],"declarations":[{"constant":false,"id":12879,"mutability":"mutable","name":"result","nameLocation":"9641:6:64","nodeType":"VariableDeclaration","scope":12901,"src":"9633:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12878,"name":"uint256","nodeType":"ElementaryTypeName","src":"9633:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12883,"initialValue":{"arguments":[{"id":12881,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12870,"src":"9655:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12880,"name":"log2","nodeType":"Identifier","overloadedDeclarations":[12867,12903],"referencedDeclaration":12867,"src":"9650:4:64","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":12882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9650:11:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9633:28:64"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12884,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12879,"src":"9682:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"},"id":12888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12885,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12873,"src":"9692:8:64","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":12886,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12337,"src":"9704:8:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$12337_$","typeString":"type(enum Math.Rounding)"}},"id":12887,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9713:2:64","memberName":"Up","nodeType":"MemberAccess","referencedDeclaration":12335,"src":"9704:11:64","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"}},"src":"9692:23:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":12889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9719:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":12890,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12879,"src":"9724:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9719:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":12892,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12870,"src":"9733:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9719:19:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9692:46:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":12896,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9745:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":12897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9692:54:64","trueExpression":{"hexValue":"31","id":12895,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9741:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":12898,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9691:56:64","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"9682:65:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12877,"id":12900,"nodeType":"Return","src":"9675:72:64"}]}]},"documentation":{"id":12868,"nodeType":"StructuredDocumentation","src":"9372:142:64","text":" @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":12903,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"9528:4:64","nodeType":"FunctionDefinition","parameters":{"id":12874,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12870,"mutability":"mutable","name":"value","nameLocation":"9541:5:64","nodeType":"VariableDeclaration","scope":12903,"src":"9533:13:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12869,"name":"uint256","nodeType":"ElementaryTypeName","src":"9533:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12873,"mutability":"mutable","name":"rounding","nameLocation":"9557:8:64","nodeType":"VariableDeclaration","scope":12903,"src":"9548:17:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"},"typeName":{"id":12872,"nodeType":"UserDefinedTypeName","pathNode":{"id":12871,"name":"Rounding","nameLocations":["9548:8:64"],"nodeType":"IdentifierPath","referencedDeclaration":12337,"src":"9548:8:64"},"referencedDeclaration":12337,"src":"9548:8:64","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"9532:34:64"},"returnParameters":{"id":12877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12876,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12903,"src":"9590:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12875,"name":"uint256","nodeType":"ElementaryTypeName","src":"9590:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9589:9:64"},"scope":13195,"src":"9519:245:64","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13031,"nodeType":"Block","src":"9951:828:64","statements":[{"assignments":[12912],"declarations":[{"constant":false,"id":12912,"mutability":"mutable","name":"result","nameLocation":"9969:6:64","nodeType":"VariableDeclaration","scope":13031,"src":"9961:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12911,"name":"uint256","nodeType":"ElementaryTypeName","src":"9961:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12914,"initialValue":{"hexValue":"30","id":12913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9978:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9961:18:64"},{"id":13028,"nodeType":"UncheckedBlock","src":"9989:761:64","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12915,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12906,"src":"10017:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"},"id":12918,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":12916,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10026:2:64","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":12917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10030:2:64","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"10026:6:64","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"10017:15:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12931,"nodeType":"IfStatement","src":"10013:99:64","trueBody":{"id":12930,"nodeType":"Block","src":"10034:78:64","statements":[{"expression":{"id":12924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12920,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12906,"src":"10052:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"},"id":12923,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":12921,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10061:2:64","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":12922,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10065:2:64","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"10061:6:64","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"10052:15:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12925,"nodeType":"ExpressionStatement","src":"10052:15:64"},{"expression":{"id":12928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12926,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12912,"src":"10085:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3634","id":12927,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10095:2:64","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"10085:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12929,"nodeType":"ExpressionStatement","src":"10085:12:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12932,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12906,"src":"10129:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"},"id":12935,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":12933,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10138:2:64","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":12934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10142:2:64","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"10138:6:64","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"10129:15:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12948,"nodeType":"IfStatement","src":"10125:99:64","trueBody":{"id":12947,"nodeType":"Block","src":"10146:78:64","statements":[{"expression":{"id":12941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12937,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12906,"src":"10164:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"},"id":12940,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":12938,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10173:2:64","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":12939,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10177:2:64","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"10173:6:64","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"10164:15:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12942,"nodeType":"ExpressionStatement","src":"10164:15:64"},{"expression":{"id":12945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12943,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12912,"src":"10197:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":12944,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10207:2:64","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"10197:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12946,"nodeType":"ExpressionStatement","src":"10197:12:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12949,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12906,"src":"10241:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":12952,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":12950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10250:2:64","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":12951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10254:2:64","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"10250:6:64","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"10241:15:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12965,"nodeType":"IfStatement","src":"10237:99:64","trueBody":{"id":12964,"nodeType":"Block","src":"10258:78:64","statements":[{"expression":{"id":12958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12954,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12906,"src":"10276:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":12957,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":12955,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10285:2:64","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":12956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10289:2:64","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"10285:6:64","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"10276:15:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12959,"nodeType":"ExpressionStatement","src":"10276:15:64"},{"expression":{"id":12962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12960,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12912,"src":"10309:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":12961,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10319:2:64","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"10309:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12963,"nodeType":"ExpressionStatement","src":"10309:12:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12966,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12906,"src":"10353:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":12969,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":12967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10362:2:64","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":12968,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10366:1:64","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"10362:5:64","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"10353:14:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12982,"nodeType":"IfStatement","src":"10349:96:64","trueBody":{"id":12981,"nodeType":"Block","src":"10369:76:64","statements":[{"expression":{"id":12975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12971,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12906,"src":"10387:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":12974,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":12972,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10396:2:64","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":12973,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10400:1:64","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"10396:5:64","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"10387:14:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12976,"nodeType":"ExpressionStatement","src":"10387:14:64"},{"expression":{"id":12979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12977,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12912,"src":"10419:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":12978,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10429:1:64","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"10419:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12980,"nodeType":"ExpressionStatement","src":"10419:11:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12983,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12906,"src":"10462:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":12986,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":12984,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10471:2:64","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":12985,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10475:1:64","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"10471:5:64","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"10462:14:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12999,"nodeType":"IfStatement","src":"10458:96:64","trueBody":{"id":12998,"nodeType":"Block","src":"10478:76:64","statements":[{"expression":{"id":12992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12988,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12906,"src":"10496:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":12991,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":12989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10505:2:64","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":12990,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10509:1:64","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"10505:5:64","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"10496:14:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12993,"nodeType":"ExpressionStatement","src":"10496:14:64"},{"expression":{"id":12996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12994,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12912,"src":"10528:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":12995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10538:1:64","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"10528:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12997,"nodeType":"ExpressionStatement","src":"10528:11:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13000,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12906,"src":"10571:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":13003,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":13001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10580:2:64","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":13002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10584:1:64","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"10580:5:64","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"10571:14:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13016,"nodeType":"IfStatement","src":"10567:96:64","trueBody":{"id":13015,"nodeType":"Block","src":"10587:76:64","statements":[{"expression":{"id":13009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13005,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12906,"src":"10605:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":13008,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":13006,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10614:2:64","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":13007,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10618:1:64","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"10614:5:64","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"10605:14:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13010,"nodeType":"ExpressionStatement","src":"10605:14:64"},{"expression":{"id":13013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13011,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12912,"src":"10637:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":13012,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10647:1:64","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"10637:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13014,"nodeType":"ExpressionStatement","src":"10637:11:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13017,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12906,"src":"10680:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"id":13020,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":13018,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10689:2:64","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"31","id":13019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10693:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10689:5:64","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"}},"src":"10680:14:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13027,"nodeType":"IfStatement","src":"10676:64:64","trueBody":{"id":13026,"nodeType":"Block","src":"10696:44:64","statements":[{"expression":{"id":13024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13022,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12912,"src":"10714:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":13023,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10724:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10714:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13025,"nodeType":"ExpressionStatement","src":"10714:11:64"}]}}]},{"expression":{"id":13029,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12912,"src":"10766:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12910,"id":13030,"nodeType":"Return","src":"10759:13:64"}]},"documentation":{"id":12904,"nodeType":"StructuredDocumentation","src":"9770:114:64","text":" @dev Return the log in base 10, rounded down, of a positive value.\n Returns 0 if given 0."},"id":13032,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"9898:5:64","nodeType":"FunctionDefinition","parameters":{"id":12907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12906,"mutability":"mutable","name":"value","nameLocation":"9912:5:64","nodeType":"VariableDeclaration","scope":13032,"src":"9904:13:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12905,"name":"uint256","nodeType":"ElementaryTypeName","src":"9904:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9903:15:64"},"returnParameters":{"id":12910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12909,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13032,"src":"9942:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12908,"name":"uint256","nodeType":"ElementaryTypeName","src":"9942:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9941:9:64"},"scope":13195,"src":"9889:890:64","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13067,"nodeType":"Block","src":"11014:165:64","statements":[{"id":13066,"nodeType":"UncheckedBlock","src":"11024:149:64","statements":[{"assignments":[13044],"declarations":[{"constant":false,"id":13044,"mutability":"mutable","name":"result","nameLocation":"11056:6:64","nodeType":"VariableDeclaration","scope":13066,"src":"11048:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13043,"name":"uint256","nodeType":"ElementaryTypeName","src":"11048:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13048,"initialValue":{"arguments":[{"id":13046,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13035,"src":"11071:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13045,"name":"log10","nodeType":"Identifier","overloadedDeclarations":[13032,13068],"referencedDeclaration":13032,"src":"11065:5:64","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":13047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11065:12:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11048:29:64"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13049,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13044,"src":"11098:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"},"id":13053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13050,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13038,"src":"11108:8:64","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":13051,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12337,"src":"11120:8:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$12337_$","typeString":"type(enum Math.Rounding)"}},"id":13052,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11129:2:64","memberName":"Up","nodeType":"MemberAccess","referencedDeclaration":12335,"src":"11120:11:64","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"}},"src":"11108:23:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":13054,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11135:2:64","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":13055,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13044,"src":"11139:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11135:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":13057,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13035,"src":"11148:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11135:18:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11108:45:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":13061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11160:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":13062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11108:53:64","trueExpression":{"hexValue":"31","id":13060,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11156:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":13063,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11107:55:64","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11098:64:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13042,"id":13065,"nodeType":"Return","src":"11091:71:64"}]}]},"documentation":{"id":13033,"nodeType":"StructuredDocumentation","src":"10785:143:64","text":" @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":13068,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"10942:5:64","nodeType":"FunctionDefinition","parameters":{"id":13039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13035,"mutability":"mutable","name":"value","nameLocation":"10956:5:64","nodeType":"VariableDeclaration","scope":13068,"src":"10948:13:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13034,"name":"uint256","nodeType":"ElementaryTypeName","src":"10948:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13038,"mutability":"mutable","name":"rounding","nameLocation":"10972:8:64","nodeType":"VariableDeclaration","scope":13068,"src":"10963:17:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"},"typeName":{"id":13037,"nodeType":"UserDefinedTypeName","pathNode":{"id":13036,"name":"Rounding","nameLocations":["10963:8:64"],"nodeType":"IdentifierPath","referencedDeclaration":12337,"src":"10963:8:64"},"referencedDeclaration":12337,"src":"10963:8:64","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"10947:34:64"},"returnParameters":{"id":13042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13041,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13068,"src":"11005:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13040,"name":"uint256","nodeType":"ElementaryTypeName","src":"11005:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11004:9:64"},"scope":13195,"src":"10933:246:64","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13154,"nodeType":"Block","src":"11493:600:64","statements":[{"assignments":[13077],"declarations":[{"constant":false,"id":13077,"mutability":"mutable","name":"result","nameLocation":"11511:6:64","nodeType":"VariableDeclaration","scope":13154,"src":"11503:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13076,"name":"uint256","nodeType":"ElementaryTypeName","src":"11503:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13079,"initialValue":{"hexValue":"30","id":13078,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11520:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11503:18:64"},{"id":13151,"nodeType":"UncheckedBlock","src":"11531:533:64","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13080,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13071,"src":"11559:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"313238","id":13081,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11568:3:64","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"11559:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":13083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11574:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11559:16:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13094,"nodeType":"IfStatement","src":"11555:98:64","trueBody":{"id":13093,"nodeType":"Block","src":"11577:76:64","statements":[{"expression":{"id":13087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13085,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13071,"src":"11595:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"313238","id":13086,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11605:3:64","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"11595:13:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13088,"nodeType":"ExpressionStatement","src":"11595:13:64"},{"expression":{"id":13091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13089,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13077,"src":"11626:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":13090,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11636:2:64","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"11626:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13092,"nodeType":"ExpressionStatement","src":"11626:12:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13095,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13071,"src":"11670:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3634","id":13096,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11679:2:64","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"11670:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":13098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11684:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11670:15:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13109,"nodeType":"IfStatement","src":"11666:95:64","trueBody":{"id":13108,"nodeType":"Block","src":"11687:74:64","statements":[{"expression":{"id":13102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13100,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13071,"src":"11705:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3634","id":13101,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11715:2:64","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"11705:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13103,"nodeType":"ExpressionStatement","src":"11705:12:64"},{"expression":{"id":13106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13104,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13077,"src":"11735:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":13105,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11745:1:64","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"11735:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13107,"nodeType":"ExpressionStatement","src":"11735:11:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13110,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13071,"src":"11778:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3332","id":13111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11787:2:64","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"11778:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":13113,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11792:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11778:15:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13124,"nodeType":"IfStatement","src":"11774:95:64","trueBody":{"id":13123,"nodeType":"Block","src":"11795:74:64","statements":[{"expression":{"id":13117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13115,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13071,"src":"11813:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3332","id":13116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11823:2:64","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"11813:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13118,"nodeType":"ExpressionStatement","src":"11813:12:64"},{"expression":{"id":13121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13119,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13077,"src":"11843:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":13120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11853:1:64","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11843:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13122,"nodeType":"ExpressionStatement","src":"11843:11:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13125,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13071,"src":"11886:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3136","id":13126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11895:2:64","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"11886:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":13128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11900:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11886:15:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13139,"nodeType":"IfStatement","src":"11882:95:64","trueBody":{"id":13138,"nodeType":"Block","src":"11903:74:64","statements":[{"expression":{"id":13132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13130,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13071,"src":"11921:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3136","id":13131,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11931:2:64","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"11921:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13133,"nodeType":"ExpressionStatement","src":"11921:12:64"},{"expression":{"id":13136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13134,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13077,"src":"11951:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":13135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11961:1:64","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11951:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13137,"nodeType":"ExpressionStatement","src":"11951:11:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13140,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13071,"src":"11994:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"38","id":13141,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12003:1:64","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"11994:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":13143,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12007:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11994:14:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13150,"nodeType":"IfStatement","src":"11990:64:64","trueBody":{"id":13149,"nodeType":"Block","src":"12010:44:64","statements":[{"expression":{"id":13147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13145,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13077,"src":"12028:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":13146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12038:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12028:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13148,"nodeType":"ExpressionStatement","src":"12028:11:64"}]}}]},{"expression":{"id":13152,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13077,"src":"12080:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13075,"id":13153,"nodeType":"Return","src":"12073:13:64"}]},"documentation":{"id":13069,"nodeType":"StructuredDocumentation","src":"11185:240:64","text":" @dev Return the log in base 256, rounded down, of a positive value.\n Returns 0 if given 0.\n Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string."},"id":13155,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"11439:6:64","nodeType":"FunctionDefinition","parameters":{"id":13072,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13071,"mutability":"mutable","name":"value","nameLocation":"11454:5:64","nodeType":"VariableDeclaration","scope":13155,"src":"11446:13:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13070,"name":"uint256","nodeType":"ElementaryTypeName","src":"11446:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11445:15:64"},"returnParameters":{"id":13075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13074,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13155,"src":"11484:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13073,"name":"uint256","nodeType":"ElementaryTypeName","src":"11484:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11483:9:64"},"scope":13195,"src":"11430:663:64","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13193,"nodeType":"Block","src":"12329:173:64","statements":[{"id":13192,"nodeType":"UncheckedBlock","src":"12339:157:64","statements":[{"assignments":[13167],"declarations":[{"constant":false,"id":13167,"mutability":"mutable","name":"result","nameLocation":"12371:6:64","nodeType":"VariableDeclaration","scope":13192,"src":"12363:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13166,"name":"uint256","nodeType":"ElementaryTypeName","src":"12363:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13171,"initialValue":{"arguments":[{"id":13169,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13158,"src":"12387:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13168,"name":"log256","nodeType":"Identifier","overloadedDeclarations":[13155,13194],"referencedDeclaration":13155,"src":"12380:6:64","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":13170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12380:13:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12363:30:64"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13172,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"12414:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"},"id":13176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13173,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13161,"src":"12424:8:64","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":13174,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12337,"src":"12436:8:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$12337_$","typeString":"type(enum Math.Rounding)"}},"id":13175,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12445:2:64","memberName":"Up","nodeType":"MemberAccess","referencedDeclaration":12335,"src":"12436:11:64","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"}},"src":"12424:23:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12451:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13178,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"12457:6:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"38","id":13179,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12466:1:64","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12457:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13181,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12456:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12451:17:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":13183,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13158,"src":"12471:5:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12451:25:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12424:52:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":13187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12483:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":13188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"12424:60:64","trueExpression":{"hexValue":"31","id":13186,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12479:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":13189,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12423:62:64","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"12414:71:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13165,"id":13191,"nodeType":"Return","src":"12407:78:64"}]}]},"documentation":{"id":13156,"nodeType":"StructuredDocumentation","src":"12099:143:64","text":" @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":13194,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"12256:6:64","nodeType":"FunctionDefinition","parameters":{"id":13162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13158,"mutability":"mutable","name":"value","nameLocation":"12271:5:64","nodeType":"VariableDeclaration","scope":13194,"src":"12263:13:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13157,"name":"uint256","nodeType":"ElementaryTypeName","src":"12263:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13161,"mutability":"mutable","name":"rounding","nameLocation":"12287:8:64","nodeType":"VariableDeclaration","scope":13194,"src":"12278:17:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"},"typeName":{"id":13160,"nodeType":"UserDefinedTypeName","pathNode":{"id":13159,"name":"Rounding","nameLocations":["12278:8:64"],"nodeType":"IdentifierPath","referencedDeclaration":12337,"src":"12278:8:64"},"referencedDeclaration":12337,"src":"12278:8:64","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12337","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"12262:34:64"},"returnParameters":{"id":13165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13164,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13194,"src":"12320:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13163,"name":"uint256","nodeType":"ElementaryTypeName","src":"12320:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12319:9:64"},"scope":13195,"src":"12247:255:64","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":13196,"src":"202:12302:64","usedErrors":[]}],"src":"103:12402:64"},"id":64},"@openzeppelin/contracts/vendor/arbitrum/IArbSys.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/vendor/arbitrum/IArbSys.sol","exportedSymbols":{"IArbSys":[13341]},"id":13342,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":13197,"literals":["solidity",">=","0.4",".21","<","0.9",".0"],"nodeType":"PragmaDirective","src":"250:32:65"},{"abstract":false,"baseContracts":[],"canonicalName":"IArbSys","contractDependencies":[],"contractKind":"interface","documentation":{"id":13198,"nodeType":"StructuredDocumentation","src":"284:246:65","text":" @title System level functionality\n @notice For use by contracts to interact with core L2-specific functionality.\n Precompiled contract that exists in every Arbitrum chain at address(100), 0x0000000000000000000000000000000000000064."},"fullyImplemented":false,"id":13341,"linearizedBaseContracts":[13341],"name":"IArbSys","nameLocation":"541:7:65","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":13199,"nodeType":"StructuredDocumentation","src":"555:162:65","text":" @notice Get Arbitrum block number (distinct from L1 block number; Arbitrum genesis block has block number 0)\n @return block number as int"},"functionSelector":"a3b1b31d","id":13204,"implemented":false,"kind":"function","modifiers":[],"name":"arbBlockNumber","nameLocation":"731:14:65","nodeType":"FunctionDefinition","parameters":{"id":13200,"nodeType":"ParameterList","parameters":[],"src":"745:2:65"},"returnParameters":{"id":13203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13202,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13204,"src":"771:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13201,"name":"uint256","nodeType":"ElementaryTypeName","src":"771:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"770:9:65"},"scope":13341,"src":"722:58:65","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":13205,"nodeType":"StructuredDocumentation","src":"786:146:65","text":" @notice Get Arbitrum block hash (reverts unless currentBlockNum-256 <= arbBlockNum < currentBlockNum)\n @return block hash"},"functionSelector":"2b407a82","id":13212,"implemented":false,"kind":"function","modifiers":[],"name":"arbBlockHash","nameLocation":"946:12:65","nodeType":"FunctionDefinition","parameters":{"id":13208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13207,"mutability":"mutable","name":"arbBlockNum","nameLocation":"967:11:65","nodeType":"VariableDeclaration","scope":13212,"src":"959:19:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13206,"name":"uint256","nodeType":"ElementaryTypeName","src":"959:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"958:21:65"},"returnParameters":{"id":13211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13210,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13212,"src":"1003:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13209,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1003:7:65","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1002:9:65"},"scope":13341,"src":"937:75:65","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":13213,"nodeType":"StructuredDocumentation","src":"1018:107:65","text":" @notice Gets the rollup's unique chain identifier\n @return Chain identifier as int"},"functionSelector":"d127f54a","id":13218,"implemented":false,"kind":"function","modifiers":[],"name":"arbChainID","nameLocation":"1139:10:65","nodeType":"FunctionDefinition","parameters":{"id":13214,"nodeType":"ParameterList","parameters":[],"src":"1149:2:65"},"returnParameters":{"id":13217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13216,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13218,"src":"1175:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13215,"name":"uint256","nodeType":"ElementaryTypeName","src":"1175:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1174:9:65"},"scope":13341,"src":"1130:54:65","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":13219,"nodeType":"StructuredDocumentation","src":"1190:118:65","text":" @notice Get internal version number identifying an ArbOS build\n @return version number as int"},"functionSelector":"051038f2","id":13224,"implemented":false,"kind":"function","modifiers":[],"name":"arbOSVersion","nameLocation":"1322:12:65","nodeType":"FunctionDefinition","parameters":{"id":13220,"nodeType":"ParameterList","parameters":[],"src":"1334:2:65"},"returnParameters":{"id":13223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13222,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13224,"src":"1360:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13221,"name":"uint256","nodeType":"ElementaryTypeName","src":"1360:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1359:9:65"},"scope":13341,"src":"1313:56:65","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":13225,"nodeType":"StructuredDocumentation","src":"1375:100:65","text":" @notice Returns 0 since Nitro has no concept of storage gas\n @return uint 0"},"functionSelector":"a94597ff","id":13230,"implemented":false,"kind":"function","modifiers":[],"name":"getStorageGasAvailable","nameLocation":"1489:22:65","nodeType":"FunctionDefinition","parameters":{"id":13226,"nodeType":"ParameterList","parameters":[],"src":"1511:2:65"},"returnParameters":{"id":13229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13228,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13230,"src":"1537:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13227,"name":"uint256","nodeType":"ElementaryTypeName","src":"1537:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1536:9:65"},"scope":13341,"src":"1480:66:65","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":13231,"nodeType":"StructuredDocumentation","src":"1552:293:65","text":" @notice (deprecated) check if current call is top level (meaning it was triggered by an EoA or a L1 contract)\n @dev this call has been deprecated and may be removed in a future release\n @return true if current execution frame is not a call by another L2 contract"},"functionSelector":"08bd624c","id":13236,"implemented":false,"kind":"function","modifiers":[],"name":"isTopLevelCall","nameLocation":"1859:14:65","nodeType":"FunctionDefinition","parameters":{"id":13232,"nodeType":"ParameterList","parameters":[],"src":"1873:2:65"},"returnParameters":{"id":13235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13234,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13236,"src":"1899:4:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13233,"name":"bool","nodeType":"ElementaryTypeName","src":"1899:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1898:6:65"},"scope":13341,"src":"1850:55:65","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":13237,"nodeType":"StructuredDocumentation","src":"1911:192:65","text":" @notice map L1 sender contract address to its L2 alias\n @param sender sender address\n @param unused argument no longer used\n @return aliased sender address"},"functionSelector":"4dbbd506","id":13246,"implemented":false,"kind":"function","modifiers":[],"name":"mapL1SenderContractAddressToL2Alias","nameLocation":"2117:35:65","nodeType":"FunctionDefinition","parameters":{"id":13242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13239,"mutability":"mutable","name":"sender","nameLocation":"2161:6:65","nodeType":"VariableDeclaration","scope":13246,"src":"2153:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13238,"name":"address","nodeType":"ElementaryTypeName","src":"2153:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13241,"mutability":"mutable","name":"unused","nameLocation":"2177:6:65","nodeType":"VariableDeclaration","scope":13246,"src":"2169:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13240,"name":"address","nodeType":"ElementaryTypeName","src":"2169:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2152:32:65"},"returnParameters":{"id":13245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13244,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13246,"src":"2208:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13243,"name":"address","nodeType":"ElementaryTypeName","src":"2208:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2207:9:65"},"scope":13341,"src":"2108:109:65","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":13247,"nodeType":"StructuredDocumentation","src":"2223:189:65","text":" @notice check if the caller (of this caller of this) is an aliased L1 contract address\n @return true iff the caller's address is an alias for an L1 contract address"},"functionSelector":"175a260b","id":13252,"implemented":false,"kind":"function","modifiers":[],"name":"wasMyCallersAddressAliased","nameLocation":"2426:26:65","nodeType":"FunctionDefinition","parameters":{"id":13248,"nodeType":"ParameterList","parameters":[],"src":"2452:2:65"},"returnParameters":{"id":13251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13250,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13252,"src":"2478:4:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13249,"name":"bool","nodeType":"ElementaryTypeName","src":"2478:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2477:6:65"},"scope":13341,"src":"2417:67:65","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":13253,"nodeType":"StructuredDocumentation","src":"2490:224:65","text":" @notice return the address of the caller (of this caller of this), without applying L1 contract address aliasing\n @return address of the caller's caller, without applying L1 contract address aliasing"},"functionSelector":"d74523b3","id":13258,"implemented":false,"kind":"function","modifiers":[],"name":"myCallersAddressWithoutAliasing","nameLocation":"2728:31:65","nodeType":"FunctionDefinition","parameters":{"id":13254,"nodeType":"ParameterList","parameters":[],"src":"2759:2:65"},"returnParameters":{"id":13257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13256,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13258,"src":"2785:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13255,"name":"address","nodeType":"ElementaryTypeName","src":"2785:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2784:9:65"},"scope":13341,"src":"2719:75:65","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":13259,"nodeType":"StructuredDocumentation","src":"2800:284:65","text":" @notice Send given amount of Eth to dest from sender.\n This is a convenience function, which is equivalent to calling sendTxToL1 with empty data.\n @param destination recipient address on L1\n @return unique identifier for this L2-to-L1 transaction."},"functionSelector":"25e16063","id":13266,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawEth","nameLocation":"3098:11:65","nodeType":"FunctionDefinition","parameters":{"id":13262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13261,"mutability":"mutable","name":"destination","nameLocation":"3118:11:65","nodeType":"VariableDeclaration","scope":13266,"src":"3110:19:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13260,"name":"address","nodeType":"ElementaryTypeName","src":"3110:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3109:21:65"},"returnParameters":{"id":13265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13264,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13266,"src":"3157:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13263,"name":"uint256","nodeType":"ElementaryTypeName","src":"3157:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3156:9:65"},"scope":13341,"src":"3089:77:65","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":13267,"nodeType":"StructuredDocumentation","src":"3172:408:65","text":" @notice Send a transaction to L1\n @dev it is not possible to execute on the L1 any L2-to-L1 transaction which contains data\n to a contract address without any code (as enforced by the Bridge contract).\n @param destination recipient address on L1\n @param data (optional) calldata for L1 contract call\n @return a unique identifier for this L2-to-L1 transaction."},"functionSelector":"928c169a","id":13276,"implemented":false,"kind":"function","modifiers":[],"name":"sendTxToL1","nameLocation":"3594:10:65","nodeType":"FunctionDefinition","parameters":{"id":13272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13269,"mutability":"mutable","name":"destination","nameLocation":"3613:11:65","nodeType":"VariableDeclaration","scope":13276,"src":"3605:19:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13268,"name":"address","nodeType":"ElementaryTypeName","src":"3605:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13271,"mutability":"mutable","name":"data","nameLocation":"3641:4:65","nodeType":"VariableDeclaration","scope":13276,"src":"3626:19:65","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":13270,"name":"bytes","nodeType":"ElementaryTypeName","src":"3626:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3604:42:65"},"returnParameters":{"id":13275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13274,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13276,"src":"3673:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13273,"name":"uint256","nodeType":"ElementaryTypeName","src":"3673:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3672:9:65"},"scope":13341,"src":"3585:97:65","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":13277,"nodeType":"StructuredDocumentation","src":"3688:230:65","text":" @notice Get send Merkle tree state\n @return size number of sends in the history\n @return root root hash of the send history\n @return partials hashes of partial subtrees in the send history tree"},"functionSelector":"7aeecd2a","id":13287,"implemented":false,"kind":"function","modifiers":[],"name":"sendMerkleTreeState","nameLocation":"3932:19:65","nodeType":"FunctionDefinition","parameters":{"id":13278,"nodeType":"ParameterList","parameters":[],"src":"3951:2:65"},"returnParameters":{"id":13286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13280,"mutability":"mutable","name":"size","nameLocation":"4022:4:65","nodeType":"VariableDeclaration","scope":13287,"src":"4014:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13279,"name":"uint256","nodeType":"ElementaryTypeName","src":"4014:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13282,"mutability":"mutable","name":"root","nameLocation":"4048:4:65","nodeType":"VariableDeclaration","scope":13287,"src":"4040:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13281,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4040:7:65","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":13285,"mutability":"mutable","name":"partials","nameLocation":"4083:8:65","nodeType":"VariableDeclaration","scope":13287,"src":"4066:25:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":13283,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4066:7:65","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":13284,"nodeType":"ArrayTypeName","src":"4066:9:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"4000:101:65"},"scope":13341,"src":"3923:179:65","stateMutability":"view","virtual":false,"visibility":"external"},{"anonymous":false,"documentation":{"id":13288,"nodeType":"StructuredDocumentation","src":"4108:133:65","text":" @notice creates a send txn from L2 to L1\n @param position = (level << 192) + leaf = (0 << 192) + leaf = leaf"},"eventSelector":"3e7aafa77dbf186b7fd488006beff893744caa3c4f6f299e8a709fa2087374fc","id":13308,"name":"L2ToL1Tx","nameLocation":"4252:8:65","nodeType":"EventDefinition","parameters":{"id":13307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13290,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"4278:6:65","nodeType":"VariableDeclaration","scope":13308,"src":"4270:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13289,"name":"address","nodeType":"ElementaryTypeName","src":"4270:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13292,"indexed":true,"mutability":"mutable","name":"destination","nameLocation":"4310:11:65","nodeType":"VariableDeclaration","scope":13308,"src":"4294:27:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13291,"name":"address","nodeType":"ElementaryTypeName","src":"4294:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13294,"indexed":true,"mutability":"mutable","name":"hash","nameLocation":"4347:4:65","nodeType":"VariableDeclaration","scope":13308,"src":"4331:20:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13293,"name":"uint256","nodeType":"ElementaryTypeName","src":"4331:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13296,"indexed":true,"mutability":"mutable","name":"position","nameLocation":"4377:8:65","nodeType":"VariableDeclaration","scope":13308,"src":"4361:24:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13295,"name":"uint256","nodeType":"ElementaryTypeName","src":"4361:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13298,"indexed":false,"mutability":"mutable","name":"arbBlockNum","nameLocation":"4403:11:65","nodeType":"VariableDeclaration","scope":13308,"src":"4395:19:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13297,"name":"uint256","nodeType":"ElementaryTypeName","src":"4395:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13300,"indexed":false,"mutability":"mutable","name":"ethBlockNum","nameLocation":"4432:11:65","nodeType":"VariableDeclaration","scope":13308,"src":"4424:19:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13299,"name":"uint256","nodeType":"ElementaryTypeName","src":"4424:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13302,"indexed":false,"mutability":"mutable","name":"timestamp","nameLocation":"4461:9:65","nodeType":"VariableDeclaration","scope":13308,"src":"4453:17:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13301,"name":"uint256","nodeType":"ElementaryTypeName","src":"4453:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13304,"indexed":false,"mutability":"mutable","name":"callvalue","nameLocation":"4488:9:65","nodeType":"VariableDeclaration","scope":13308,"src":"4480:17:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13303,"name":"uint256","nodeType":"ElementaryTypeName","src":"4480:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13306,"indexed":false,"mutability":"mutable","name":"data","nameLocation":"4513:4:65","nodeType":"VariableDeclaration","scope":13308,"src":"4507:10:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13305,"name":"bytes","nodeType":"ElementaryTypeName","src":"4507:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4260:263:65"},"src":"4246:278:65"},{"anonymous":false,"documentation":{"id":13309,"nodeType":"StructuredDocumentation","src":"4530:85:65","text":"@dev DEPRECATED in favour of the new L2ToL1Tx event above after the nitro upgrade"},"eventSelector":"5baaa87db386365b5c161be377bc3d8e317e8d98d71a3ca7ed7d555340c8f767","id":13331,"name":"L2ToL1Transaction","nameLocation":"4626:17:65","nodeType":"EventDefinition","parameters":{"id":13330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13311,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"4661:6:65","nodeType":"VariableDeclaration","scope":13331,"src":"4653:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13310,"name":"address","nodeType":"ElementaryTypeName","src":"4653:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13313,"indexed":true,"mutability":"mutable","name":"destination","nameLocation":"4693:11:65","nodeType":"VariableDeclaration","scope":13331,"src":"4677:27:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13312,"name":"address","nodeType":"ElementaryTypeName","src":"4677:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13315,"indexed":true,"mutability":"mutable","name":"uniqueId","nameLocation":"4730:8:65","nodeType":"VariableDeclaration","scope":13331,"src":"4714:24:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13314,"name":"uint256","nodeType":"ElementaryTypeName","src":"4714:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13317,"indexed":true,"mutability":"mutable","name":"batchNumber","nameLocation":"4764:11:65","nodeType":"VariableDeclaration","scope":13331,"src":"4748:27:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13316,"name":"uint256","nodeType":"ElementaryTypeName","src":"4748:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13319,"indexed":false,"mutability":"mutable","name":"indexInBatch","nameLocation":"4793:12:65","nodeType":"VariableDeclaration","scope":13331,"src":"4785:20:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13318,"name":"uint256","nodeType":"ElementaryTypeName","src":"4785:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13321,"indexed":false,"mutability":"mutable","name":"arbBlockNum","nameLocation":"4823:11:65","nodeType":"VariableDeclaration","scope":13331,"src":"4815:19:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13320,"name":"uint256","nodeType":"ElementaryTypeName","src":"4815:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13323,"indexed":false,"mutability":"mutable","name":"ethBlockNum","nameLocation":"4852:11:65","nodeType":"VariableDeclaration","scope":13331,"src":"4844:19:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13322,"name":"uint256","nodeType":"ElementaryTypeName","src":"4844:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13325,"indexed":false,"mutability":"mutable","name":"timestamp","nameLocation":"4881:9:65","nodeType":"VariableDeclaration","scope":13331,"src":"4873:17:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13324,"name":"uint256","nodeType":"ElementaryTypeName","src":"4873:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13327,"indexed":false,"mutability":"mutable","name":"callvalue","nameLocation":"4908:9:65","nodeType":"VariableDeclaration","scope":13331,"src":"4900:17:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13326,"name":"uint256","nodeType":"ElementaryTypeName","src":"4900:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13329,"indexed":false,"mutability":"mutable","name":"data","nameLocation":"4933:4:65","nodeType":"VariableDeclaration","scope":13331,"src":"4927:10:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13328,"name":"bytes","nodeType":"ElementaryTypeName","src":"4927:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4643:300:65"},"src":"4620:324:65"},{"anonymous":false,"documentation":{"id":13332,"nodeType":"StructuredDocumentation","src":"4950:250:65","text":" @notice logs a merkle branch for proof synthesis\n @param reserved an index meant only to align the 4th index with L2ToL1Transaction's 4th event\n @param hash the merkle hash\n @param position = (level << 192) + leaf"},"eventSelector":"e9e13da364699fb5b0496ff5a0fc70760ad5836e93ba96568a4e42b9914a8b95","id":13340,"name":"SendMerkleUpdate","nameLocation":"5211:16:65","nodeType":"EventDefinition","parameters":{"id":13339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13334,"indexed":true,"mutability":"mutable","name":"reserved","nameLocation":"5244:8:65","nodeType":"VariableDeclaration","scope":13340,"src":"5228:24:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13333,"name":"uint256","nodeType":"ElementaryTypeName","src":"5228:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13336,"indexed":true,"mutability":"mutable","name":"hash","nameLocation":"5270:4:65","nodeType":"VariableDeclaration","scope":13340,"src":"5254:20:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13335,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5254:7:65","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":13338,"indexed":true,"mutability":"mutable","name":"position","nameLocation":"5292:8:65","nodeType":"VariableDeclaration","scope":13340,"src":"5276:24:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13337,"name":"uint256","nodeType":"ElementaryTypeName","src":"5276:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5227:74:65"},"src":"5205:97:65"}],"scope":13342,"src":"531:4773:65","usedErrors":[]}],"src":"250:5055:65"},"id":65},"@openzeppelin/contracts/vendor/arbitrum/IBridge.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/vendor/arbitrum/IBridge.sol","exportedSymbols":{"IBridge":[13540]},"id":13541,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":13343,"literals":["solidity",">=","0.6",".9","<","0.9",".0"],"nodeType":"PragmaDirective","src":"283:31:66"},{"abstract":false,"baseContracts":[],"canonicalName":"IBridge","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":13540,"linearizedBaseContracts":[13540],"name":"IBridge","nameLocation":"326:7:66","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"5e3c1311ea442664e8b1611bfabef659120ea7a0a2cfc0667700bebc69cbffe1","id":13361,"name":"MessageDelivered","nameLocation":"346:16:66","nodeType":"EventDefinition","parameters":{"id":13360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13345,"indexed":true,"mutability":"mutable","name":"messageIndex","nameLocation":"388:12:66","nodeType":"VariableDeclaration","scope":13361,"src":"372:28:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13344,"name":"uint256","nodeType":"ElementaryTypeName","src":"372:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13347,"indexed":true,"mutability":"mutable","name":"beforeInboxAcc","nameLocation":"426:14:66","nodeType":"VariableDeclaration","scope":13361,"src":"410:30:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13346,"name":"bytes32","nodeType":"ElementaryTypeName","src":"410:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":13349,"indexed":false,"mutability":"mutable","name":"inbox","nameLocation":"458:5:66","nodeType":"VariableDeclaration","scope":13361,"src":"450:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13348,"name":"address","nodeType":"ElementaryTypeName","src":"450:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13351,"indexed":false,"mutability":"mutable","name":"kind","nameLocation":"479:4:66","nodeType":"VariableDeclaration","scope":13361,"src":"473:10:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":13350,"name":"uint8","nodeType":"ElementaryTypeName","src":"473:5:66","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":13353,"indexed":false,"mutability":"mutable","name":"sender","nameLocation":"501:6:66","nodeType":"VariableDeclaration","scope":13361,"src":"493:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13352,"name":"address","nodeType":"ElementaryTypeName","src":"493:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13355,"indexed":false,"mutability":"mutable","name":"messageDataHash","nameLocation":"525:15:66","nodeType":"VariableDeclaration","scope":13361,"src":"517:23:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13354,"name":"bytes32","nodeType":"ElementaryTypeName","src":"517:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":13357,"indexed":false,"mutability":"mutable","name":"baseFeeL1","nameLocation":"558:9:66","nodeType":"VariableDeclaration","scope":13361,"src":"550:17:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13356,"name":"uint256","nodeType":"ElementaryTypeName","src":"550:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13359,"indexed":false,"mutability":"mutable","name":"timestamp","nameLocation":"584:9:66","nodeType":"VariableDeclaration","scope":13361,"src":"577:16:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":13358,"name":"uint64","nodeType":"ElementaryTypeName","src":"577:6:66","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"362:237:66"},"src":"340:260:66"},{"anonymous":false,"eventSelector":"2d9d115ef3e4a606d698913b1eae831a3cdfe20d9a83d48007b0526749c3d466","id":13371,"name":"BridgeCallTriggered","nameLocation":"612:19:66","nodeType":"EventDefinition","parameters":{"id":13370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13363,"indexed":true,"mutability":"mutable","name":"outbox","nameLocation":"648:6:66","nodeType":"VariableDeclaration","scope":13371,"src":"632:22:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13362,"name":"address","nodeType":"ElementaryTypeName","src":"632:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13365,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"672:2:66","nodeType":"VariableDeclaration","scope":13371,"src":"656:18:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13364,"name":"address","nodeType":"ElementaryTypeName","src":"656:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13367,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"684:5:66","nodeType":"VariableDeclaration","scope":13371,"src":"676:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13366,"name":"uint256","nodeType":"ElementaryTypeName","src":"676:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13369,"indexed":false,"mutability":"mutable","name":"data","nameLocation":"697:4:66","nodeType":"VariableDeclaration","scope":13371,"src":"691:10:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13368,"name":"bytes","nodeType":"ElementaryTypeName","src":"691:5:66","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"631:71:66"},"src":"606:97:66"},{"anonymous":false,"eventSelector":"6675ce8882cb71637de5903a193d218cc0544be9c0650cb83e0955f6aa2bf521","id":13377,"name":"InboxToggle","nameLocation":"715:11:66","nodeType":"EventDefinition","parameters":{"id":13376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13373,"indexed":true,"mutability":"mutable","name":"inbox","nameLocation":"743:5:66","nodeType":"VariableDeclaration","scope":13377,"src":"727:21:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13372,"name":"address","nodeType":"ElementaryTypeName","src":"727:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13375,"indexed":false,"mutability":"mutable","name":"enabled","nameLocation":"755:7:66","nodeType":"VariableDeclaration","scope":13377,"src":"750:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13374,"name":"bool","nodeType":"ElementaryTypeName","src":"750:4:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"726:37:66"},"src":"709:55:66"},{"anonymous":false,"eventSelector":"49477e7356dbcb654ab85d7534b50126772d938130d1350e23e2540370c8dffa","id":13383,"name":"OutboxToggle","nameLocation":"776:12:66","nodeType":"EventDefinition","parameters":{"id":13382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13379,"indexed":true,"mutability":"mutable","name":"outbox","nameLocation":"805:6:66","nodeType":"VariableDeclaration","scope":13383,"src":"789:22:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13378,"name":"address","nodeType":"ElementaryTypeName","src":"789:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13381,"indexed":false,"mutability":"mutable","name":"enabled","nameLocation":"818:7:66","nodeType":"VariableDeclaration","scope":13383,"src":"813:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13380,"name":"bool","nodeType":"ElementaryTypeName","src":"813:4:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"788:38:66"},"src":"770:57:66"},{"anonymous":false,"eventSelector":"8c1e6003ed33ca6748d4ad3dd4ecc949065c89dceb31fdf546a5289202763c6a","id":13387,"name":"SequencerInboxUpdated","nameLocation":"839:21:66","nodeType":"EventDefinition","parameters":{"id":13386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13385,"indexed":false,"mutability":"mutable","name":"newSequencerInbox","nameLocation":"869:17:66","nodeType":"VariableDeclaration","scope":13387,"src":"861:25:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13384,"name":"address","nodeType":"ElementaryTypeName","src":"861:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"860:27:66"},"src":"833:55:66"},{"functionSelector":"e76f5c8d","id":13394,"implemented":false,"kind":"function","modifiers":[],"name":"allowedDelayedInboxList","nameLocation":"903:23:66","nodeType":"FunctionDefinition","parameters":{"id":13390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13389,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13394,"src":"927:7:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13388,"name":"uint256","nodeType":"ElementaryTypeName","src":"927:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"926:9:66"},"returnParameters":{"id":13393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13392,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13394,"src":"954:7:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13391,"name":"address","nodeType":"ElementaryTypeName","src":"954:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"953:9:66"},"scope":13540,"src":"894:69:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"945e1147","id":13401,"implemented":false,"kind":"function","modifiers":[],"name":"allowedOutboxList","nameLocation":"978:17:66","nodeType":"FunctionDefinition","parameters":{"id":13397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13396,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13401,"src":"996:7:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13395,"name":"uint256","nodeType":"ElementaryTypeName","src":"996:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"995:9:66"},"returnParameters":{"id":13400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13399,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13401,"src":"1023:7:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13398,"name":"address","nodeType":"ElementaryTypeName","src":"1023:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1022:9:66"},"scope":13540,"src":"969:63:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":13402,"nodeType":"StructuredDocumentation","src":"1038:147:66","text":"@dev Accumulator for delayed inbox messages; tail represents hash of the current state; each element represents the inclusion of a new message."},"functionSelector":"d5719dc2","id":13409,"implemented":false,"kind":"function","modifiers":[],"name":"delayedInboxAccs","nameLocation":"1199:16:66","nodeType":"FunctionDefinition","parameters":{"id":13405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13404,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13409,"src":"1216:7:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13403,"name":"uint256","nodeType":"ElementaryTypeName","src":"1216:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1215:9:66"},"returnParameters":{"id":13408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13407,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13409,"src":"1248:7:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13406,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1248:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1247:9:66"},"scope":13540,"src":"1190:67:66","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":13410,"nodeType":"StructuredDocumentation","src":"1263:149:66","text":"@dev Accumulator for sequencer inbox messages; tail represents hash of the current state; each element represents the inclusion of a new message."},"functionSelector":"16bf5579","id":13417,"implemented":false,"kind":"function","modifiers":[],"name":"sequencerInboxAccs","nameLocation":"1426:18:66","nodeType":"FunctionDefinition","parameters":{"id":13413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13412,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13417,"src":"1445:7:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13411,"name":"uint256","nodeType":"ElementaryTypeName","src":"1445:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1444:9:66"},"returnParameters":{"id":13416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13415,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13417,"src":"1477:7:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13414,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1477:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1476:9:66"},"scope":13540,"src":"1417:69:66","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"cb23bcb5","id":13422,"implemented":false,"kind":"function","modifiers":[],"name":"rollup","nameLocation":"1556:6:66","nodeType":"FunctionDefinition","parameters":{"id":13418,"nodeType":"ParameterList","parameters":[],"src":"1562:2:66"},"returnParameters":{"id":13421,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13420,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13422,"src":"1588:7:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13419,"name":"address","nodeType":"ElementaryTypeName","src":"1588:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1587:9:66"},"scope":13540,"src":"1547:50:66","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"ee35f327","id":13427,"implemented":false,"kind":"function","modifiers":[],"name":"sequencerInbox","nameLocation":"1612:14:66","nodeType":"FunctionDefinition","parameters":{"id":13423,"nodeType":"ParameterList","parameters":[],"src":"1626:2:66"},"returnParameters":{"id":13426,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13425,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13427,"src":"1652:7:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13424,"name":"address","nodeType":"ElementaryTypeName","src":"1652:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1651:9:66"},"scope":13540,"src":"1603:58:66","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"ab5d8943","id":13432,"implemented":false,"kind":"function","modifiers":[],"name":"activeOutbox","nameLocation":"1676:12:66","nodeType":"FunctionDefinition","parameters":{"id":13428,"nodeType":"ParameterList","parameters":[],"src":"1688:2:66"},"returnParameters":{"id":13431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13430,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13432,"src":"1714:7:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13429,"name":"address","nodeType":"ElementaryTypeName","src":"1714:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1713:9:66"},"scope":13540,"src":"1667:56:66","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"ae60bd13","id":13439,"implemented":false,"kind":"function","modifiers":[],"name":"allowedDelayedInboxes","nameLocation":"1738:21:66","nodeType":"FunctionDefinition","parameters":{"id":13435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13434,"mutability":"mutable","name":"inbox","nameLocation":"1768:5:66","nodeType":"VariableDeclaration","scope":13439,"src":"1760:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13433,"name":"address","nodeType":"ElementaryTypeName","src":"1760:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1759:15:66"},"returnParameters":{"id":13438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13437,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13439,"src":"1798:4:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13436,"name":"bool","nodeType":"ElementaryTypeName","src":"1798:4:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1797:6:66"},"scope":13540,"src":"1729:75:66","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"413b35bd","id":13446,"implemented":false,"kind":"function","modifiers":[],"name":"allowedOutboxes","nameLocation":"1819:15:66","nodeType":"FunctionDefinition","parameters":{"id":13442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13441,"mutability":"mutable","name":"outbox","nameLocation":"1843:6:66","nodeType":"VariableDeclaration","scope":13446,"src":"1835:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13440,"name":"address","nodeType":"ElementaryTypeName","src":"1835:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1834:16:66"},"returnParameters":{"id":13445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13444,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13446,"src":"1874:4:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13443,"name":"bool","nodeType":"ElementaryTypeName","src":"1874:4:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1873:6:66"},"scope":13540,"src":"1810:70:66","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"5fca4a16","id":13451,"implemented":false,"kind":"function","modifiers":[],"name":"sequencerReportedSubMessageCount","nameLocation":"1895:32:66","nodeType":"FunctionDefinition","parameters":{"id":13447,"nodeType":"ParameterList","parameters":[],"src":"1927:2:66"},"returnParameters":{"id":13450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13449,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13451,"src":"1953:7:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13448,"name":"uint256","nodeType":"ElementaryTypeName","src":"1953:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1952:9:66"},"scope":13540,"src":"1886:76:66","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":13452,"nodeType":"StructuredDocumentation","src":"1968:231:66","text":" @dev Enqueue a message in the delayed inbox accumulator.\n      These messages are later sequenced in the SequencerInbox, either\n      by the sequencer as part of a normal batch, or by force inclusion."},"functionSelector":"8db5993b","id":13463,"implemented":false,"kind":"function","modifiers":[],"name":"enqueueDelayedMessage","nameLocation":"2213:21:66","nodeType":"FunctionDefinition","parameters":{"id":13459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13454,"mutability":"mutable","name":"kind","nameLocation":"2250:4:66","nodeType":"VariableDeclaration","scope":13463,"src":"2244:10:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":13453,"name":"uint8","nodeType":"ElementaryTypeName","src":"2244:5:66","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":13456,"mutability":"mutable","name":"sender","nameLocation":"2272:6:66","nodeType":"VariableDeclaration","scope":13463,"src":"2264:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13455,"name":"address","nodeType":"ElementaryTypeName","src":"2264:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13458,"mutability":"mutable","name":"messageDataHash","nameLocation":"2296:15:66","nodeType":"VariableDeclaration","scope":13463,"src":"2288:23:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13457,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2288:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2234:83:66"},"returnParameters":{"id":13462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13461,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13463,"src":"2344:7:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13460,"name":"uint256","nodeType":"ElementaryTypeName","src":"2344:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2343:9:66"},"scope":13540,"src":"2204:149:66","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"9e5d4c49","id":13476,"implemented":false,"kind":"function","modifiers":[],"name":"executeCall","nameLocation":"2368:11:66","nodeType":"FunctionDefinition","parameters":{"id":13470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13465,"mutability":"mutable","name":"to","nameLocation":"2397:2:66","nodeType":"VariableDeclaration","scope":13476,"src":"2389:10:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13464,"name":"address","nodeType":"ElementaryTypeName","src":"2389:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13467,"mutability":"mutable","name":"value","nameLocation":"2417:5:66","nodeType":"VariableDeclaration","scope":13476,"src":"2409:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13466,"name":"uint256","nodeType":"ElementaryTypeName","src":"2409:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13469,"mutability":"mutable","name":"data","nameLocation":"2447:4:66","nodeType":"VariableDeclaration","scope":13476,"src":"2432:19:66","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":13468,"name":"bytes","nodeType":"ElementaryTypeName","src":"2432:5:66","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2379:78:66"},"returnParameters":{"id":13475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13472,"mutability":"mutable","name":"success","nameLocation":"2481:7:66","nodeType":"VariableDeclaration","scope":13476,"src":"2476:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13471,"name":"bool","nodeType":"ElementaryTypeName","src":"2476:4:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13474,"mutability":"mutable","name":"returnData","nameLocation":"2503:10:66","nodeType":"VariableDeclaration","scope":13476,"src":"2490:23:66","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13473,"name":"bytes","nodeType":"ElementaryTypeName","src":"2490:5:66","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2475:39:66"},"scope":13540,"src":"2359:156:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"eca067ad","id":13481,"implemented":false,"kind":"function","modifiers":[],"name":"delayedMessageCount","nameLocation":"2530:19:66","nodeType":"FunctionDefinition","parameters":{"id":13477,"nodeType":"ParameterList","parameters":[],"src":"2549:2:66"},"returnParameters":{"id":13480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13479,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13481,"src":"2575:7:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13478,"name":"uint256","nodeType":"ElementaryTypeName","src":"2575:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2574:9:66"},"scope":13540,"src":"2521:63:66","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"0084120c","id":13486,"implemented":false,"kind":"function","modifiers":[],"name":"sequencerMessageCount","nameLocation":"2599:21:66","nodeType":"FunctionDefinition","parameters":{"id":13482,"nodeType":"ParameterList","parameters":[],"src":"2620:2:66"},"returnParameters":{"id":13485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13484,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13486,"src":"2646:7:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13483,"name":"uint256","nodeType":"ElementaryTypeName","src":"2646:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2645:9:66"},"scope":13540,"src":"2590:65:66","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"86598a56","id":13505,"implemented":false,"kind":"function","modifiers":[],"name":"enqueueSequencerMessage","nameLocation":"2729:23:66","nodeType":"FunctionDefinition","parameters":{"id":13495,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13488,"mutability":"mutable","name":"dataHash","nameLocation":"2770:8:66","nodeType":"VariableDeclaration","scope":13505,"src":"2762:16:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13487,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2762:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":13490,"mutability":"mutable","name":"afterDelayedMessagesRead","nameLocation":"2796:24:66","nodeType":"VariableDeclaration","scope":13505,"src":"2788:32:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13489,"name":"uint256","nodeType":"ElementaryTypeName","src":"2788:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13492,"mutability":"mutable","name":"prevMessageCount","nameLocation":"2838:16:66","nodeType":"VariableDeclaration","scope":13505,"src":"2830:24:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13491,"name":"uint256","nodeType":"ElementaryTypeName","src":"2830:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13494,"mutability":"mutable","name":"newMessageCount","nameLocation":"2872:15:66","nodeType":"VariableDeclaration","scope":13505,"src":"2864:23:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13493,"name":"uint256","nodeType":"ElementaryTypeName","src":"2864:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2752:141:66"},"returnParameters":{"id":13504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13497,"mutability":"mutable","name":"seqMessageIndex","nameLocation":"2949:15:66","nodeType":"VariableDeclaration","scope":13505,"src":"2941:23:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13496,"name":"uint256","nodeType":"ElementaryTypeName","src":"2941:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13499,"mutability":"mutable","name":"beforeAcc","nameLocation":"2986:9:66","nodeType":"VariableDeclaration","scope":13505,"src":"2978:17:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13498,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2978:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":13501,"mutability":"mutable","name":"delayedAcc","nameLocation":"3017:10:66","nodeType":"VariableDeclaration","scope":13505,"src":"3009:18:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13500,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3009:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":13503,"mutability":"mutable","name":"acc","nameLocation":"3049:3:66","nodeType":"VariableDeclaration","scope":13505,"src":"3041:11:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13502,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3041:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2927:135:66"},"scope":13540,"src":"2720:343:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":13506,"nodeType":"StructuredDocumentation","src":"3069:374:66","text":" @dev Allows the sequencer inbox to submit a delayed message of the batchPostingReport type\n      This is done through a separate function entrypoint instead of allowing the sequencer inbox\n      to call `enqueueDelayedMessage` to avoid the gas overhead of an extra SLOAD in either\n      every delayed inbox or every sequencer inbox call."},"functionSelector":"7a88b107","id":13515,"implemented":false,"kind":"function","modifiers":[],"name":"submitBatchSpendingReport","nameLocation":"3457:25:66","nodeType":"FunctionDefinition","parameters":{"id":13511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13508,"mutability":"mutable","name":"batchPoster","nameLocation":"3491:11:66","nodeType":"VariableDeclaration","scope":13515,"src":"3483:19:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13507,"name":"address","nodeType":"ElementaryTypeName","src":"3483:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13510,"mutability":"mutable","name":"dataHash","nameLocation":"3512:8:66","nodeType":"VariableDeclaration","scope":13515,"src":"3504:16:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13509,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3504:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3482:39:66"},"returnParameters":{"id":13514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13513,"mutability":"mutable","name":"msgNum","nameLocation":"3548:6:66","nodeType":"VariableDeclaration","scope":13515,"src":"3540:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13512,"name":"uint256","nodeType":"ElementaryTypeName","src":"3540:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3539:16:66"},"scope":13540,"src":"3448:108:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"4f61f850","id":13520,"implemented":false,"kind":"function","modifiers":[],"name":"setSequencerInbox","nameLocation":"3629:17:66","nodeType":"FunctionDefinition","parameters":{"id":13518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13517,"mutability":"mutable","name":"_sequencerInbox","nameLocation":"3655:15:66","nodeType":"VariableDeclaration","scope":13520,"src":"3647:23:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13516,"name":"address","nodeType":"ElementaryTypeName","src":"3647:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3646:25:66"},"returnParameters":{"id":13519,"nodeType":"ParameterList","parameters":[],"src":"3680:0:66"},"scope":13540,"src":"3620:61:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"47fb24c5","id":13527,"implemented":false,"kind":"function","modifiers":[],"name":"setDelayedInbox","nameLocation":"3696:15:66","nodeType":"FunctionDefinition","parameters":{"id":13525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13522,"mutability":"mutable","name":"inbox","nameLocation":"3720:5:66","nodeType":"VariableDeclaration","scope":13527,"src":"3712:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13521,"name":"address","nodeType":"ElementaryTypeName","src":"3712:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13524,"mutability":"mutable","name":"enabled","nameLocation":"3732:7:66","nodeType":"VariableDeclaration","scope":13527,"src":"3727:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13523,"name":"bool","nodeType":"ElementaryTypeName","src":"3727:4:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3711:29:66"},"returnParameters":{"id":13526,"nodeType":"ParameterList","parameters":[],"src":"3749:0:66"},"scope":13540,"src":"3687:63:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"cee3d728","id":13534,"implemented":false,"kind":"function","modifiers":[],"name":"setOutbox","nameLocation":"3765:9:66","nodeType":"FunctionDefinition","parameters":{"id":13532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13529,"mutability":"mutable","name":"inbox","nameLocation":"3783:5:66","nodeType":"VariableDeclaration","scope":13534,"src":"3775:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13528,"name":"address","nodeType":"ElementaryTypeName","src":"3775:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13531,"mutability":"mutable","name":"enabled","nameLocation":"3795:7:66","nodeType":"VariableDeclaration","scope":13534,"src":"3790:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13530,"name":"bool","nodeType":"ElementaryTypeName","src":"3790:4:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3774:29:66"},"returnParameters":{"id":13533,"nodeType":"ParameterList","parameters":[],"src":"3812:0:66"},"scope":13540,"src":"3756:57:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"c4d66de8","id":13539,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"3926:10:66","nodeType":"FunctionDefinition","parameters":{"id":13537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13536,"mutability":"mutable","name":"rollup_","nameLocation":"3945:7:66","nodeType":"VariableDeclaration","scope":13539,"src":"3937:15:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13535,"name":"address","nodeType":"ElementaryTypeName","src":"3937:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3936:17:66"},"returnParameters":{"id":13538,"nodeType":"ParameterList","parameters":[],"src":"3962:0:66"},"scope":13540,"src":"3917:46:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":13541,"src":"316:3649:66","usedErrors":[]}],"src":"283:3683:66"},"id":66},"@openzeppelin/contracts/vendor/arbitrum/IOutbox.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/vendor/arbitrum/IOutbox.sol","exportedSymbols":{"IBridge":[13540],"IOutbox":[13709]},"id":13710,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":13542,"literals":["solidity",">=","0.6",".9","<","0.9",".0"],"nodeType":"PragmaDirective","src":"283:31:67"},{"absolutePath":"@openzeppelin/contracts/vendor/arbitrum/IBridge.sol","file":"./IBridge.sol","id":13543,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13710,"sourceUnit":13541,"src":"316:23:67","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IOutbox","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":13709,"linearizedBaseContracts":[13709],"name":"IOutbox","nameLocation":"351:7:67","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"b4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f6748","id":13549,"name":"SendRootUpdated","nameLocation":"371:15:67","nodeType":"EventDefinition","parameters":{"id":13548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13545,"indexed":true,"mutability":"mutable","name":"blockHash","nameLocation":"403:9:67","nodeType":"VariableDeclaration","scope":13549,"src":"387:25:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13544,"name":"bytes32","nodeType":"ElementaryTypeName","src":"387:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":13547,"indexed":true,"mutability":"mutable","name":"outputRoot","nameLocation":"430:10:67","nodeType":"VariableDeclaration","scope":13549,"src":"414:26:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13546,"name":"bytes32","nodeType":"ElementaryTypeName","src":"414:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"386:55:67"},"src":"365:77:67"},{"anonymous":false,"eventSelector":"20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab18964","id":13559,"name":"OutBoxTransactionExecuted","nameLocation":"453:25:67","nodeType":"EventDefinition","parameters":{"id":13558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13551,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"504:2:67","nodeType":"VariableDeclaration","scope":13559,"src":"488:18:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13550,"name":"address","nodeType":"ElementaryTypeName","src":"488:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13553,"indexed":true,"mutability":"mutable","name":"l2Sender","nameLocation":"532:8:67","nodeType":"VariableDeclaration","scope":13559,"src":"516:24:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13552,"name":"address","nodeType":"ElementaryTypeName","src":"516:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13555,"indexed":true,"mutability":"mutable","name":"zero","nameLocation":"566:4:67","nodeType":"VariableDeclaration","scope":13559,"src":"550:20:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13554,"name":"uint256","nodeType":"ElementaryTypeName","src":"550:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13557,"indexed":false,"mutability":"mutable","name":"transactionIndex","nameLocation":"588:16:67","nodeType":"VariableDeclaration","scope":13559,"src":"580:24:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13556,"name":"uint256","nodeType":"ElementaryTypeName","src":"580:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"478:132:67"},"src":"447:164:67"},{"functionSelector":"cb23bcb5","id":13564,"implemented":false,"kind":"function","modifiers":[],"name":"rollup","nameLocation":"626:6:67","nodeType":"FunctionDefinition","parameters":{"id":13560,"nodeType":"ParameterList","parameters":[],"src":"632:2:67"},"returnParameters":{"id":13563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13562,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13564,"src":"658:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13561,"name":"address","nodeType":"ElementaryTypeName","src":"658:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"657:9:67"},"scope":13709,"src":"617:50:67","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"e78cea92","id":13570,"implemented":false,"kind":"function","modifiers":[],"name":"bridge","nameLocation":"705:6:67","nodeType":"FunctionDefinition","parameters":{"id":13565,"nodeType":"ParameterList","parameters":[],"src":"711:2:67"},"returnParameters":{"id":13569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13568,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13570,"src":"737:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBridge_$13540","typeString":"contract IBridge"},"typeName":{"id":13567,"nodeType":"UserDefinedTypeName","pathNode":{"id":13566,"name":"IBridge","nameLocations":["737:7:67"],"nodeType":"IdentifierPath","referencedDeclaration":13540,"src":"737:7:67"},"referencedDeclaration":13540,"src":"737:7:67","typeDescriptions":{"typeIdentifier":"t_contract$_IBridge_$13540","typeString":"contract IBridge"}},"visibility":"internal"}],"src":"736:9:67"},"scope":13709,"src":"696:50:67","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"d5b5cc23","id":13577,"implemented":false,"kind":"function","modifiers":[],"name":"spent","nameLocation":"784:5:67","nodeType":"FunctionDefinition","parameters":{"id":13573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13572,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13577,"src":"790:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13571,"name":"uint256","nodeType":"ElementaryTypeName","src":"790:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"789:9:67"},"returnParameters":{"id":13576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13575,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13577,"src":"822:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13574,"name":"bytes32","nodeType":"ElementaryTypeName","src":"822:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"821:9:67"},"scope":13709,"src":"775:56:67","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"ae6dead7","id":13584,"implemented":false,"kind":"function","modifiers":[],"name":"roots","nameLocation":"869:5:67","nodeType":"FunctionDefinition","parameters":{"id":13580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13579,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13584,"src":"875:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13578,"name":"bytes32","nodeType":"ElementaryTypeName","src":"875:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"874:9:67"},"returnParameters":{"id":13583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13582,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13584,"src":"907:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13581,"name":"bytes32","nodeType":"ElementaryTypeName","src":"907:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"906:9:67"},"scope":13709,"src":"860:56:67","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"c75184df","id":13589,"implemented":false,"kind":"function","modifiers":[],"name":"OUTBOX_VERSION","nameLocation":"1021:14:67","nodeType":"FunctionDefinition","parameters":{"id":13585,"nodeType":"ParameterList","parameters":[],"src":"1035:2:67"},"returnParameters":{"id":13588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13587,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13589,"src":"1061:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":13586,"name":"uint128","nodeType":"ElementaryTypeName","src":"1061:7:67","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1060:9:67"},"scope":13709,"src":"1012:58:67","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"a04cee60","id":13596,"implemented":false,"kind":"function","modifiers":[],"name":"updateSendRoot","nameLocation":"1107:14:67","nodeType":"FunctionDefinition","parameters":{"id":13594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13591,"mutability":"mutable","name":"sendRoot","nameLocation":"1130:8:67","nodeType":"VariableDeclaration","scope":13596,"src":"1122:16:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13590,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1122:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":13593,"mutability":"mutable","name":"l2BlockHash","nameLocation":"1148:11:67","nodeType":"VariableDeclaration","scope":13596,"src":"1140:19:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13592,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1140:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1121:39:67"},"returnParameters":{"id":13595,"nodeType":"ParameterList","parameters":[],"src":"1169:0:67"},"scope":13709,"src":"1098:72:67","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":13597,"nodeType":"StructuredDocumentation","src":"1176:306:67","text":"@notice When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account\n         When the return value is zero, that means this is a system message\n @dev the l2ToL1Sender behaves as the tx.origin, the msg.sender should be validated to protect against reentrancies"},"functionSelector":"80648b02","id":13602,"implemented":false,"kind":"function","modifiers":[],"name":"l2ToL1Sender","nameLocation":"1496:12:67","nodeType":"FunctionDefinition","parameters":{"id":13598,"nodeType":"ParameterList","parameters":[],"src":"1508:2:67"},"returnParameters":{"id":13601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13600,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13602,"src":"1534:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13599,"name":"address","nodeType":"ElementaryTypeName","src":"1534:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1533:9:67"},"scope":13709,"src":"1487:56:67","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":13603,"nodeType":"StructuredDocumentation","src":"1549:106:67","text":"@return l2Block return L2 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active"},"functionSelector":"46547790","id":13608,"implemented":false,"kind":"function","modifiers":[],"name":"l2ToL1Block","nameLocation":"1669:11:67","nodeType":"FunctionDefinition","parameters":{"id":13604,"nodeType":"ParameterList","parameters":[],"src":"1680:2:67"},"returnParameters":{"id":13607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13606,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13608,"src":"1706:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13605,"name":"uint256","nodeType":"ElementaryTypeName","src":"1706:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1705:9:67"},"scope":13709,"src":"1660:55:67","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":13609,"nodeType":"StructuredDocumentation","src":"1721:106:67","text":"@return l1Block return L1 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active"},"functionSelector":"8515bc6a","id":13614,"implemented":false,"kind":"function","modifiers":[],"name":"l2ToL1EthBlock","nameLocation":"1841:14:67","nodeType":"FunctionDefinition","parameters":{"id":13610,"nodeType":"ParameterList","parameters":[],"src":"1855:2:67"},"returnParameters":{"id":13613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13612,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13614,"src":"1881:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13611,"name":"uint256","nodeType":"ElementaryTypeName","src":"1881:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1880:9:67"},"scope":13709,"src":"1832:58:67","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":13615,"nodeType":"StructuredDocumentation","src":"1896:112:67","text":"@return timestamp return L2 timestamp when the L2 tx was initiated or 0 if no L2 to L1 transaction is active"},"functionSelector":"b0f30537","id":13620,"implemented":false,"kind":"function","modifiers":[],"name":"l2ToL1Timestamp","nameLocation":"2022:15:67","nodeType":"FunctionDefinition","parameters":{"id":13616,"nodeType":"ParameterList","parameters":[],"src":"2037:2:67"},"returnParameters":{"id":13619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13618,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13620,"src":"2063:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13617,"name":"uint256","nodeType":"ElementaryTypeName","src":"2063:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2062:9:67"},"scope":13709,"src":"2013:59:67","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":13621,"nodeType":"StructuredDocumentation","src":"2078:118:67","text":"@return outputId returns the unique output identifier of the L2 to L1 tx or 0 if no L2 to L1 transaction is active"},"functionSelector":"72f2a8c7","id":13626,"implemented":false,"kind":"function","modifiers":[],"name":"l2ToL1OutputId","nameLocation":"2210:14:67","nodeType":"FunctionDefinition","parameters":{"id":13622,"nodeType":"ParameterList","parameters":[],"src":"2224:2:67"},"returnParameters":{"id":13625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13624,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13626,"src":"2250:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13623,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2250:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2249:9:67"},"scope":13709,"src":"2201:58:67","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":13627,"nodeType":"StructuredDocumentation","src":"2265:954:67","text":" @notice Executes a messages in an Outbox entry.\n @dev Reverts if dispute period hasn't expired, since the outbox entry\n      is only created once the rollup confirms the respective assertion.\n @dev it is not possible to execute any L2-to-L1 transaction which contains data\n      to a contract address without any code (as enforced by the Bridge contract).\n @param proof Merkle proof of message inclusion in send root\n @param index Merkle path to message\n @param l2Sender sender if original message (i.e., caller of ArbSys.sendTxToL1)\n @param to destination address for L1 contract call\n @param l2Block l2 block number at which sendTxToL1 call was made\n @param l1Block l1 block number at which sendTxToL1 call was made\n @param l2Timestamp l2 Timestamp at which sendTxToL1 call was made\n @param value wei in L1 message\n @param data abi-encoded L1 message data"},"functionSelector":"08635a95","id":13649,"implemented":false,"kind":"function","modifiers":[],"name":"executeTransaction","nameLocation":"3233:18:67","nodeType":"FunctionDefinition","parameters":{"id":13647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13630,"mutability":"mutable","name":"proof","nameLocation":"3280:5:67","nodeType":"VariableDeclaration","scope":13649,"src":"3261:24:67","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":13628,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3261:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":13629,"nodeType":"ArrayTypeName","src":"3261:9:67","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":13632,"mutability":"mutable","name":"index","nameLocation":"3303:5:67","nodeType":"VariableDeclaration","scope":13649,"src":"3295:13:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13631,"name":"uint256","nodeType":"ElementaryTypeName","src":"3295:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13634,"mutability":"mutable","name":"l2Sender","nameLocation":"3326:8:67","nodeType":"VariableDeclaration","scope":13649,"src":"3318:16:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13633,"name":"address","nodeType":"ElementaryTypeName","src":"3318:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13636,"mutability":"mutable","name":"to","nameLocation":"3352:2:67","nodeType":"VariableDeclaration","scope":13649,"src":"3344:10:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13635,"name":"address","nodeType":"ElementaryTypeName","src":"3344:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13638,"mutability":"mutable","name":"l2Block","nameLocation":"3372:7:67","nodeType":"VariableDeclaration","scope":13649,"src":"3364:15:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13637,"name":"uint256","nodeType":"ElementaryTypeName","src":"3364:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13640,"mutability":"mutable","name":"l1Block","nameLocation":"3397:7:67","nodeType":"VariableDeclaration","scope":13649,"src":"3389:15:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13639,"name":"uint256","nodeType":"ElementaryTypeName","src":"3389:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13642,"mutability":"mutable","name":"l2Timestamp","nameLocation":"3422:11:67","nodeType":"VariableDeclaration","scope":13649,"src":"3414:19:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13641,"name":"uint256","nodeType":"ElementaryTypeName","src":"3414:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13644,"mutability":"mutable","name":"value","nameLocation":"3451:5:67","nodeType":"VariableDeclaration","scope":13649,"src":"3443:13:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13643,"name":"uint256","nodeType":"ElementaryTypeName","src":"3443:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13646,"mutability":"mutable","name":"data","nameLocation":"3481:4:67","nodeType":"VariableDeclaration","scope":13649,"src":"3466:19:67","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":13645,"name":"bytes","nodeType":"ElementaryTypeName","src":"3466:5:67","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3251:240:67"},"returnParameters":{"id":13648,"nodeType":"ParameterList","parameters":[],"src":"3500:0:67"},"scope":13709,"src":"3224:277:67","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":13650,"nodeType":"StructuredDocumentation","src":"3507:935:67","text":"  @dev function used to simulate the result of a particular function call from the outbox\n       it is useful for things such as gas estimates. This function includes all costs except for\n       proof validation (which can be considered offchain as a somewhat of a fixed cost - it's\n       not really a fixed cost, but can be treated as so with a fixed overhead for gas estimation).\n       We can't include the cost of proof validation since this is intended to be used to simulate txs\n       that are included in yet-to-be confirmed merkle roots. The simulation entrypoint could instead pretend\n       to confirm a pending merkle root, but that would be less practical for integrating with tooling.\n       It is only possible to trigger it when the msg sender is address zero, which should be impossible\n       unless under simulation in an eth_call or eth_estimateGas"},"functionSelector":"288e5b10","id":13669,"implemented":false,"kind":"function","modifiers":[],"name":"executeTransactionSimulation","nameLocation":"4456:28:67","nodeType":"FunctionDefinition","parameters":{"id":13667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13652,"mutability":"mutable","name":"index","nameLocation":"4502:5:67","nodeType":"VariableDeclaration","scope":13669,"src":"4494:13:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13651,"name":"uint256","nodeType":"ElementaryTypeName","src":"4494:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13654,"mutability":"mutable","name":"l2Sender","nameLocation":"4525:8:67","nodeType":"VariableDeclaration","scope":13669,"src":"4517:16:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13653,"name":"address","nodeType":"ElementaryTypeName","src":"4517:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13656,"mutability":"mutable","name":"to","nameLocation":"4551:2:67","nodeType":"VariableDeclaration","scope":13669,"src":"4543:10:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13655,"name":"address","nodeType":"ElementaryTypeName","src":"4543:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13658,"mutability":"mutable","name":"l2Block","nameLocation":"4571:7:67","nodeType":"VariableDeclaration","scope":13669,"src":"4563:15:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13657,"name":"uint256","nodeType":"ElementaryTypeName","src":"4563:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13660,"mutability":"mutable","name":"l1Block","nameLocation":"4596:7:67","nodeType":"VariableDeclaration","scope":13669,"src":"4588:15:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13659,"name":"uint256","nodeType":"ElementaryTypeName","src":"4588:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13662,"mutability":"mutable","name":"l2Timestamp","nameLocation":"4621:11:67","nodeType":"VariableDeclaration","scope":13669,"src":"4613:19:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13661,"name":"uint256","nodeType":"ElementaryTypeName","src":"4613:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13664,"mutability":"mutable","name":"value","nameLocation":"4650:5:67","nodeType":"VariableDeclaration","scope":13669,"src":"4642:13:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13663,"name":"uint256","nodeType":"ElementaryTypeName","src":"4642:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13666,"mutability":"mutable","name":"data","nameLocation":"4680:4:67","nodeType":"VariableDeclaration","scope":13669,"src":"4665:19:67","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":13665,"name":"bytes","nodeType":"ElementaryTypeName","src":"4665:5:67","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4484:206:67"},"returnParameters":{"id":13668,"nodeType":"ParameterList","parameters":[],"src":"4699:0:67"},"scope":13709,"src":"4447:253:67","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":13670,"nodeType":"StructuredDocumentation","src":"4706:104:67","text":" @param index Merkle path to message\n @return true if the message has been spent"},"functionSelector":"5a129efe","id":13677,"implemented":false,"kind":"function","modifiers":[],"name":"isSpent","nameLocation":"4824:7:67","nodeType":"FunctionDefinition","parameters":{"id":13673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13672,"mutability":"mutable","name":"index","nameLocation":"4840:5:67","nodeType":"VariableDeclaration","scope":13677,"src":"4832:13:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13671,"name":"uint256","nodeType":"ElementaryTypeName","src":"4832:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4831:15:67"},"returnParameters":{"id":13676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13675,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13677,"src":"4870:4:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13674,"name":"bool","nodeType":"ElementaryTypeName","src":"4870:4:67","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4869:6:67"},"scope":13709,"src":"4815:61:67","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"9f0c04bf","id":13696,"implemented":false,"kind":"function","modifiers":[],"name":"calculateItemHash","nameLocation":"4891:17:67","nodeType":"FunctionDefinition","parameters":{"id":13692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13679,"mutability":"mutable","name":"l2Sender","nameLocation":"4926:8:67","nodeType":"VariableDeclaration","scope":13696,"src":"4918:16:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13678,"name":"address","nodeType":"ElementaryTypeName","src":"4918:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13681,"mutability":"mutable","name":"to","nameLocation":"4952:2:67","nodeType":"VariableDeclaration","scope":13696,"src":"4944:10:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13680,"name":"address","nodeType":"ElementaryTypeName","src":"4944:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13683,"mutability":"mutable","name":"l2Block","nameLocation":"4972:7:67","nodeType":"VariableDeclaration","scope":13696,"src":"4964:15:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13682,"name":"uint256","nodeType":"ElementaryTypeName","src":"4964:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13685,"mutability":"mutable","name":"l1Block","nameLocation":"4997:7:67","nodeType":"VariableDeclaration","scope":13696,"src":"4989:15:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13684,"name":"uint256","nodeType":"ElementaryTypeName","src":"4989:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13687,"mutability":"mutable","name":"l2Timestamp","nameLocation":"5022:11:67","nodeType":"VariableDeclaration","scope":13696,"src":"5014:19:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13686,"name":"uint256","nodeType":"ElementaryTypeName","src":"5014:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13689,"mutability":"mutable","name":"value","nameLocation":"5051:5:67","nodeType":"VariableDeclaration","scope":13696,"src":"5043:13:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13688,"name":"uint256","nodeType":"ElementaryTypeName","src":"5043:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13691,"mutability":"mutable","name":"data","nameLocation":"5081:4:67","nodeType":"VariableDeclaration","scope":13696,"src":"5066:19:67","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":13690,"name":"bytes","nodeType":"ElementaryTypeName","src":"5066:5:67","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4908:183:67"},"returnParameters":{"id":13695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13694,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13696,"src":"5115:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13693,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5115:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5114:9:67"},"scope":13709,"src":"4882:242:67","stateMutability":"pure","virtual":false,"visibility":"external"},{"functionSelector":"007436d3","id":13708,"implemented":false,"kind":"function","modifiers":[],"name":"calculateMerkleRoot","nameLocation":"5139:19:67","nodeType":"FunctionDefinition","parameters":{"id":13704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13699,"mutability":"mutable","name":"proof","nameLocation":"5185:5:67","nodeType":"VariableDeclaration","scope":13708,"src":"5168:22:67","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":13697,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5168:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":13698,"nodeType":"ArrayTypeName","src":"5168:9:67","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":13701,"mutability":"mutable","name":"path","nameLocation":"5208:4:67","nodeType":"VariableDeclaration","scope":13708,"src":"5200:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13700,"name":"uint256","nodeType":"ElementaryTypeName","src":"5200:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13703,"mutability":"mutable","name":"item","nameLocation":"5230:4:67","nodeType":"VariableDeclaration","scope":13708,"src":"5222:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13702,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5222:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5158:82:67"},"returnParameters":{"id":13707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13706,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13708,"src":"5264:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13705,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5264:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5263:9:67"},"scope":13709,"src":"5130:143:67","stateMutability":"pure","virtual":false,"visibility":"external"}],"scope":13710,"src":"341:4934:67","usedErrors":[]}],"src":"283:4993:67"},"id":67},"contracts/core/connext/facets/BaseConnextFacet.sol":{"ast":{"absolutePath":"contracts/core/connext/facets/BaseConnextFacet.sol","exportedSymbols":{"AppStorage":[29536],"AssetLogic":[28696],"BaseConnextFacet":[14146],"Constants":[29304],"LibDiamond":[30596],"Role":[29319],"TokenId":[37728],"TransferInfo":[29351]},"id":14147,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":13711,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:68"},{"absolutePath":"contracts/core/connext/libraries/LibConnextStorage.sol","file":"../libraries/LibConnextStorage.sol","id":13715,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14147,"sourceUnit":29546,"src":"64:82:68","symbolAliases":[{"foreign":{"id":13712,"name":"TransferInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29351,"src":"72:12:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":13713,"name":"AppStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29536,"src":"86:10:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":13714,"name":"Role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"98:4:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/LibDiamond.sol","file":"../libraries/LibDiamond.sol","id":13717,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14147,"sourceUnit":30597,"src":"147:55:68","symbolAliases":[{"foreign":{"id":13716,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"155:10:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/AssetLogic.sol","file":"../libraries/AssetLogic.sol","id":13719,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14147,"sourceUnit":28697,"src":"203:55:68","symbolAliases":[{"foreign":{"id":13718,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"211:10:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/TokenId.sol","file":"../libraries/TokenId.sol","id":13721,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14147,"sourceUnit":37729,"src":"259:49:68","symbolAliases":[{"foreign":{"id":13720,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37728,"src":"267:7:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/Constants.sol","file":"../libraries/Constants.sol","id":13723,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14147,"sourceUnit":29305,"src":"309:53:68","symbolAliases":[{"foreign":{"id":13722,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"317:9:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"BaseConnextFacet","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":14146,"linearizedBaseContracts":[14146],"name":"BaseConnextFacet","nameLocation":"373:16:68","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":13726,"mutability":"mutable","name":"s","nameLocation":"414:1:68","nodeType":"VariableDeclaration","scope":14146,"src":"394:21:68","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage"},"typeName":{"id":13725,"nodeType":"UserDefinedTypeName","pathNode":{"id":13724,"name":"AppStorage","nameLocations":["394:10:68"],"nodeType":"IdentifierPath","referencedDeclaration":29536,"src":"394:10:68"},"referencedDeclaration":29536,"src":"394:10:68","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"}},"visibility":"internal"},{"errorSelector":"539d2894","id":13728,"name":"BaseConnextFacet__onlyOwner_notOwner","nameLocation":"469:36:68","nodeType":"ErrorDefinition","parameters":{"id":13727,"nodeType":"ParameterList","parameters":[],"src":"505:2:68"},"src":"463:45:68"},{"errorSelector":"36a9ddc6","id":13730,"name":"BaseConnextFacet__onlyProposed_notProposedOwner","nameLocation":"517:47:68","nodeType":"ErrorDefinition","parameters":{"id":13729,"nodeType":"ParameterList","parameters":[],"src":"564:2:68"},"src":"511:56:68"},{"errorSelector":"c046fed6","id":13732,"name":"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter","nameLocation":"576:52:68","nodeType":"ErrorDefinition","parameters":{"id":13731,"nodeType":"ParameterList","parameters":[],"src":"628:2:68"},"src":"570:61:68"},{"errorSelector":"bae4c01f","id":13734,"name":"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher","nameLocation":"640:54:68","nodeType":"ErrorDefinition","parameters":{"id":13733,"nodeType":"ParameterList","parameters":[],"src":"694:2:68"},"src":"634:63:68"},{"errorSelector":"7b32c26b","id":13736,"name":"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin","nameLocation":"706:50:68","nodeType":"ErrorDefinition","parameters":{"id":13735,"nodeType":"ParameterList","parameters":[],"src":"756:2:68"},"src":"700:59:68"},{"errorSelector":"3ee5b893","id":13738,"name":"BaseConnextFacet__whenNotPaused_paused","nameLocation":"768:38:68","nodeType":"ErrorDefinition","parameters":{"id":13737,"nodeType":"ParameterList","parameters":[],"src":"806:2:68"},"src":"762:47:68"},{"errorSelector":"f9ca9c5a","id":13740,"name":"BaseConnextFacet__nonReentrant_reentrantCall","nameLocation":"818:44:68","nodeType":"ErrorDefinition","parameters":{"id":13739,"nodeType":"ParameterList","parameters":[],"src":"862:2:68"},"src":"812:53:68"},{"errorSelector":"c768d196","id":13742,"name":"BaseConnextFacet__nonXCallReentrant_reentrantCall","nameLocation":"874:49:68","nodeType":"ErrorDefinition","parameters":{"id":13741,"nodeType":"ParameterList","parameters":[],"src":"923:2:68"},"src":"868:58:68"},{"errorSelector":"2ac52838","id":13744,"name":"BaseConnextFacet__getAdoptedAsset_assetNotFound","nameLocation":"935:47:68","nodeType":"ErrorDefinition","parameters":{"id":13743,"nodeType":"ParameterList","parameters":[],"src":"982:2:68"},"src":"929:56:68"},{"errorSelector":"a13f958f","id":13746,"name":"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted","nameLocation":"994:55:68","nodeType":"ErrorDefinition","parameters":{"id":13745,"nodeType":"ParameterList","parameters":[],"src":"1049:2:68"},"src":"988:64:68"},{"body":{"id":13773,"nodeType":"Block","src":"1479:435:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13749,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"1556:1:68","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":13750,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1558:7:68","memberName":"_status","nodeType":"MemberAccess","referencedDeclaration":29489,"src":"1556:9:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":13751,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"1569:9:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":13752,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1579:7:68","memberName":"ENTERED","nodeType":"MemberAccess","referencedDeclaration":29210,"src":"1569:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1556:30:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13757,"nodeType":"IfStatement","src":"1552:89:68","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13754,"name":"BaseConnextFacet__nonReentrant_reentrantCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13740,"src":"1595:44:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":13755,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:46:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13756,"nodeType":"RevertStatement","src":"1588:53:68"}},{"expression":{"id":13763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13758,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"1708:1:68","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":13760,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1710:7:68","memberName":"_status","nodeType":"MemberAccess","referencedDeclaration":29489,"src":"1708:9:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":13761,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"1720:9:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":13762,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1730:7:68","memberName":"ENTERED","nodeType":"MemberAccess","referencedDeclaration":29210,"src":"1720:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1708:29:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13764,"nodeType":"ExpressionStatement","src":"1708:29:68"},{"id":13765,"nodeType":"PlaceholderStatement","src":"1744:1:68"},{"expression":{"id":13771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13766,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"1876:1:68","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":13768,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1878:7:68","memberName":"_status","nodeType":"MemberAccess","referencedDeclaration":29489,"src":"1876:9:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":13769,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"1888:9:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":13770,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1898:11:68","memberName":"NOT_ENTERED","nodeType":"MemberAccess","referencedDeclaration":29206,"src":"1888:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1876:33:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13772,"nodeType":"ExpressionStatement","src":"1876:33:68"}]},"documentation":{"id":13747,"nodeType":"StructuredDocumentation","src":"1098:354:68","text":" @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."},"id":13774,"name":"nonReentrant","nameLocation":"1464:12:68","nodeType":"ModifierDefinition","parameters":{"id":13748,"nodeType":"ParameterList","parameters":[],"src":"1476:2:68"},"src":"1455:459:68","virtual":false,"visibility":"internal"},{"body":{"id":13800,"nodeType":"Block","src":"1947:455:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13776,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"2024:1:68","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":13777,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2026:12:68","memberName":"_xcallStatus","nodeType":"MemberAccess","referencedDeclaration":29491,"src":"2024:14:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":13778,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"2042:9:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":13779,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2052:7:68","memberName":"ENTERED","nodeType":"MemberAccess","referencedDeclaration":29210,"src":"2042:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2024:35:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13784,"nodeType":"IfStatement","src":"2020:99:68","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13781,"name":"BaseConnextFacet__nonXCallReentrant_reentrantCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13742,"src":"2068:49:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":13782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2068:51:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13783,"nodeType":"RevertStatement","src":"2061:58:68"}},{"expression":{"id":13790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13785,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"2186:1:68","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":13787,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2188:12:68","memberName":"_xcallStatus","nodeType":"MemberAccess","referencedDeclaration":29491,"src":"2186:14:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":13788,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"2203:9:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":13789,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2213:7:68","memberName":"ENTERED","nodeType":"MemberAccess","referencedDeclaration":29210,"src":"2203:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2186:34:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13791,"nodeType":"ExpressionStatement","src":"2186:34:68"},{"id":13792,"nodeType":"PlaceholderStatement","src":"2227:1:68"},{"expression":{"id":13798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13793,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"2359:1:68","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":13795,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2361:12:68","memberName":"_xcallStatus","nodeType":"MemberAccess","referencedDeclaration":29491,"src":"2359:14:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":13796,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"2376:9:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":13797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2386:11:68","memberName":"NOT_ENTERED","nodeType":"MemberAccess","referencedDeclaration":29206,"src":"2376:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2359:38:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13799,"nodeType":"ExpressionStatement","src":"2359:38:68"}]},"id":13801,"name":"nonXCallReentrant","nameLocation":"1927:17:68","nodeType":"ModifierDefinition","parameters":{"id":13775,"nodeType":"ParameterList","parameters":[],"src":"1944:2:68"},"src":"1918:484:68","virtual":false,"visibility":"internal"},{"body":{"id":13815,"nodeType":"Block","src":"2506:109:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":13804,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"2516:10:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":13805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2527:13:68","memberName":"contractOwner","nodeType":"MemberAccess","referencedDeclaration":29645,"src":"2516:24:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":13806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2516:26:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":13807,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2546:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2550:6:68","memberName":"sender","nodeType":"MemberAccess","src":"2546:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2516:40:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13813,"nodeType":"IfStatement","src":"2512:91:68","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13810,"name":"BaseConnextFacet__onlyOwner_notOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13728,"src":"2565:36:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":13811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2565:38:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13812,"nodeType":"RevertStatement","src":"2558:45:68"}},{"id":13814,"nodeType":"PlaceholderStatement","src":"2609:1:68"}]},"documentation":{"id":13802,"nodeType":"StructuredDocumentation","src":"2406:76:68","text":" @notice Throws if called by any account other than the owner."},"id":13816,"name":"onlyOwner","nameLocation":"2494:9:68","nodeType":"ModifierDefinition","parameters":{"id":13803,"nodeType":"ParameterList","parameters":[],"src":"2503:2:68"},"src":"2485:130:68","virtual":false,"visibility":"internal"},{"body":{"id":13829,"nodeType":"Block","src":"2731:105:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13819,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"2741:1:68","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":13820,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2743:9:68","memberName":"_proposed","nodeType":"MemberAccess","referencedDeclaration":29470,"src":"2741:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":13821,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2756:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2760:6:68","memberName":"sender","nodeType":"MemberAccess","src":"2756:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2741:25:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13827,"nodeType":"IfStatement","src":"2737:87:68","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13824,"name":"BaseConnextFacet__onlyProposed_notProposedOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13730,"src":"2775:47:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":13825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2775:49:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13826,"nodeType":"RevertStatement","src":"2768:56:68"}},{"id":13828,"nodeType":"PlaceholderStatement","src":"2830:1:68"}]},"documentation":{"id":13817,"nodeType":"StructuredDocumentation","src":"2619:85:68","text":" @notice Throws if called by any account other than the proposed owner."},"id":13830,"name":"onlyProposed","nameLocation":"2716:12:68","nodeType":"ModifierDefinition","parameters":{"id":13818,"nodeType":"ParameterList","parameters":[],"src":"2728:2:68"},"src":"2707:129:68","virtual":false,"visibility":"internal"},{"body":{"id":13853,"nodeType":"Block","src":"2964:174:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":13833,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"2974:10:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":13834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2985:13:68","memberName":"contractOwner","nodeType":"MemberAccess","referencedDeclaration":29645,"src":"2974:24:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":13835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2974:26:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":13836,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3004:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3008:6:68","memberName":"sender","nodeType":"MemberAccess","src":"3004:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2974:40:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"},"id":13846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":13839,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3018:1:68","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":13840,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3020:5:68","memberName":"roles","nodeType":"MemberAccess","referencedDeclaration":29482,"src":"3018:7:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_Role_$29319_$","typeString":"mapping(address => enum Role)"}},"id":13843,"indexExpression":{"expression":{"id":13841,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3026:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3030:6:68","memberName":"sender","nodeType":"MemberAccess","src":"3026:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3018:19:68","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":13844,"name":"Role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"3041:4:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Role_$29319_$","typeString":"type(enum Role)"}},"id":13845,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3046:11:68","memberName":"RouterAdmin","nodeType":"MemberAccess","referencedDeclaration":29316,"src":"3041:16:68","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"src":"3018:39:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2974:83:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13851,"nodeType":"IfStatement","src":"2970:156:68","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13848,"name":"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13732,"src":"3072:52:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":13849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3072:54:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13850,"nodeType":"RevertStatement","src":"3065:61:68"}},{"id":13852,"nodeType":"PlaceholderStatement","src":"3132:1:68"}]},"documentation":{"id":13831,"nodeType":"StructuredDocumentation","src":"2840:92:68","text":" @notice Throws if called by any account other than the owner and router role."},"id":13854,"name":"onlyOwnerOrRouter","nameLocation":"2944:17:68","nodeType":"ModifierDefinition","parameters":{"id":13832,"nodeType":"ParameterList","parameters":[],"src":"2961:2:68"},"src":"2935:203:68","virtual":false,"visibility":"internal"},{"body":{"id":13877,"nodeType":"Block","src":"3268:172:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":13857,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"3278:10:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":13858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3289:13:68","memberName":"contractOwner","nodeType":"MemberAccess","referencedDeclaration":29645,"src":"3278:24:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":13859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3278:26:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":13860,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3308:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3312:6:68","memberName":"sender","nodeType":"MemberAccess","src":"3308:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3278:40:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"},"id":13870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":13863,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3322:1:68","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":13864,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3324:5:68","memberName":"roles","nodeType":"MemberAccess","referencedDeclaration":29482,"src":"3322:7:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_Role_$29319_$","typeString":"mapping(address => enum Role)"}},"id":13867,"indexExpression":{"expression":{"id":13865,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3330:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3334:6:68","memberName":"sender","nodeType":"MemberAccess","src":"3330:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3322:19:68","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":13868,"name":"Role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"3345:4:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Role_$29319_$","typeString":"type(enum Role)"}},"id":13869,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3350:7:68","memberName":"Watcher","nodeType":"MemberAccess","referencedDeclaration":29317,"src":"3345:12:68","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"src":"3322:35:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3278:79:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13875,"nodeType":"IfStatement","src":"3274:154:68","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13872,"name":"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13734,"src":"3372:54:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":13873,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3372:56:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13874,"nodeType":"RevertStatement","src":"3365:63:68"}},{"id":13876,"nodeType":"PlaceholderStatement","src":"3434:1:68"}]},"documentation":{"id":13855,"nodeType":"StructuredDocumentation","src":"3142:93:68","text":" @notice Throws if called by any account other than the owner and watcher role."},"id":13878,"name":"onlyOwnerOrWatcher","nameLocation":"3247:18:68","nodeType":"ModifierDefinition","parameters":{"id":13856,"nodeType":"ParameterList","parameters":[],"src":"3265:2:68"},"src":"3238:202:68","virtual":false,"visibility":"internal"},{"body":{"id":13901,"nodeType":"Block","src":"3566:166:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":13881,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"3576:10:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":13882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3587:13:68","memberName":"contractOwner","nodeType":"MemberAccess","referencedDeclaration":29645,"src":"3576:24:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":13883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3576:26:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":13884,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3606:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3610:6:68","memberName":"sender","nodeType":"MemberAccess","src":"3606:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3576:40:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"},"id":13894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":13887,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3620:1:68","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":13888,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3622:5:68","memberName":"roles","nodeType":"MemberAccess","referencedDeclaration":29482,"src":"3620:7:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_Role_$29319_$","typeString":"mapping(address => enum Role)"}},"id":13891,"indexExpression":{"expression":{"id":13889,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3628:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3632:6:68","memberName":"sender","nodeType":"MemberAccess","src":"3628:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3620:19:68","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":13892,"name":"Role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"3643:4:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Role_$29319_$","typeString":"type(enum Role)"}},"id":13893,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3648:5:68","memberName":"Admin","nodeType":"MemberAccess","referencedDeclaration":29318,"src":"3643:10:68","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"src":"3620:33:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3576:77:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13899,"nodeType":"IfStatement","src":"3572:148:68","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13896,"name":"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13736,"src":"3668:50:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":13897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3668:52:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13898,"nodeType":"RevertStatement","src":"3661:59:68"}},{"id":13900,"nodeType":"PlaceholderStatement","src":"3726:1:68"}]},"documentation":{"id":13879,"nodeType":"StructuredDocumentation","src":"3444:91:68","text":" @notice Throws if called by any account other than the owner and admin role."},"id":13902,"name":"onlyOwnerOrAdmin","nameLocation":"3547:16:68","nodeType":"ModifierDefinition","parameters":{"id":13880,"nodeType":"ParameterList","parameters":[],"src":"3563:2:68"},"src":"3538:194:68","virtual":false,"visibility":"internal"},{"body":{"id":13912,"nodeType":"Block","src":"3824:80:68","statements":[{"condition":{"expression":{"id":13905,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3834:1:68","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":13906,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3836:7:68","memberName":"_paused","nodeType":"MemberAccess","referencedDeclaration":29510,"src":"3834:9:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13910,"nodeType":"IfStatement","src":"3830:62:68","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13907,"name":"BaseConnextFacet__whenNotPaused_paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13738,"src":"3852:38:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":13908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3852:40:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13909,"nodeType":"RevertStatement","src":"3845:47:68"}},{"id":13911,"nodeType":"PlaceholderStatement","src":"3898:1:68"}]},"documentation":{"id":13903,"nodeType":"StructuredDocumentation","src":"3736:60:68","text":" @notice Throws if all functionality is paused"},"id":13913,"name":"whenNotPaused","nameLocation":"3808:13:68","nodeType":"ModifierDefinition","parameters":{"id":13904,"nodeType":"ParameterList","parameters":[],"src":"3821:2:68"},"src":"3799:105:68","virtual":false,"visibility":"internal"},{"body":{"id":13931,"nodeType":"Block","src":"4100:87:68","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":13919,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"4113:10:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":13920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4124:13:68","memberName":"contractOwner","nodeType":"MemberAccess","referencedDeclaration":29645,"src":"4113:24:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":13921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4113:26:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":13924,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4151:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":13923,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4143:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13922,"name":"address","nodeType":"ElementaryTypeName","src":"4143:7:68","typeDescriptions":{}}},"id":13925,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4143:10:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4113:40:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"expression":{"id":13927,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"4157:1:68","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":13928,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4159:23:68","memberName":"_routerAllowlistRemoved","nodeType":"MemberAccess","referencedDeclaration":29474,"src":"4157:25:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4113:69:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":13918,"id":13930,"nodeType":"Return","src":"4106:76:68"}]},"documentation":{"id":13914,"nodeType":"StructuredDocumentation","src":"3958:73:68","text":" @notice Indicates if the router allowlist has been removed"},"id":13932,"implemented":true,"kind":"function","modifiers":[],"name":"_isRouterAllowlistRemoved","nameLocation":"4043:25:68","nodeType":"FunctionDefinition","parameters":{"id":13915,"nodeType":"ParameterList","parameters":[],"src":"4068:2:68"},"returnParameters":{"id":13918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13917,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13932,"src":"4094:4:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13916,"name":"bool","nodeType":"ElementaryTypeName","src":"4094:4:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4093:6:68"},"scope":14146,"src":"4034:153:68","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13961,"nodeType":"Block","src":"4347:186:68","statements":[{"assignments":[13941],"declarations":[{"constant":false,"id":13941,"mutability":"mutable","name":"adopted","nameLocation":"4361:7:68","nodeType":"VariableDeclaration","scope":13961,"src":"4353:15:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13940,"name":"address","nodeType":"ElementaryTypeName","src":"4353:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":13947,"initialValue":{"expression":{"arguments":[{"id":13944,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13935,"src":"4392:4:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":13942,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"4371:10:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":13943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4382:9:68","memberName":"getConfig","nodeType":"MemberAccess","referencedDeclaration":27701,"src":"4371:20:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_struct$_TokenConfig_$29395_storage_ptr_$","typeString":"function (bytes32) view returns (struct TokenConfig storage pointer)"}},"id":13945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4371:26:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":13946,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4398:7:68","memberName":"adopted","nodeType":"MemberAccess","referencedDeclaration":29384,"src":"4371:34:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4353:52:68"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13948,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13941,"src":"4415:7:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":13951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4434:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":13950,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4426:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13949,"name":"address","nodeType":"ElementaryTypeName","src":"4426:7:68","typeDescriptions":{}}},"id":13952,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4426:10:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4415:21:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13958,"nodeType":"IfStatement","src":"4411:98:68","trueBody":{"id":13957,"nodeType":"Block","src":"4438:71:68","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13954,"name":"BaseConnextFacet__getAdoptedAsset_assetNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13744,"src":"4453:47:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":13955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4453:49:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13956,"nodeType":"RevertStatement","src":"4446:56:68"}]}},{"expression":{"id":13959,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13941,"src":"4521:7:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":13939,"id":13960,"nodeType":"Return","src":"4514:14:68"}]},"documentation":{"id":13933,"nodeType":"StructuredDocumentation","src":"4191:81:68","text":" @notice Returns the adopted assets for given canonical information"},"id":13962,"implemented":true,"kind":"function","modifiers":[],"name":"_getAdoptedAsset","nameLocation":"4284:16:68","nodeType":"FunctionDefinition","parameters":{"id":13936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13935,"mutability":"mutable","name":"_key","nameLocation":"4309:4:68","nodeType":"VariableDeclaration","scope":13962,"src":"4301:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13934,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4301:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4300:14:68"},"returnParameters":{"id":13939,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13938,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13962,"src":"4338:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13937,"name":"address","nodeType":"ElementaryTypeName","src":"4338:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4337:9:68"},"scope":14146,"src":"4275:258:68","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13980,"nodeType":"Block","src":"4700:203:68","statements":[{"assignments":[13971],"declarations":[{"constant":false,"id":13971,"mutability":"mutable","name":"representation","nameLocation":"4714:14:68","nodeType":"VariableDeclaration","scope":13980,"src":"4706:22:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13970,"name":"address","nodeType":"ElementaryTypeName","src":"4706:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":13977,"initialValue":{"expression":{"arguments":[{"id":13974,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13965,"src":"4752:4:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":13972,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"4731:10:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":13973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4742:9:68","memberName":"getConfig","nodeType":"MemberAccess","referencedDeclaration":27701,"src":"4731:20:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_struct$_TokenConfig_$29395_storage_ptr_$","typeString":"function (bytes32) view returns (struct TokenConfig storage pointer)"}},"id":13975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4731:26:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":13976,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4758:14:68","memberName":"representation","nodeType":"MemberAccess","referencedDeclaration":29380,"src":"4731:41:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4706:66:68"},{"expression":{"id":13978,"name":"representation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13971,"src":"4884:14:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":13969,"id":13979,"nodeType":"Return","src":"4877:21:68"}]},"documentation":{"id":13963,"nodeType":"StructuredDocumentation","src":"4537:81:68","text":" @notice Returns the adopted assets for given canonical information"},"id":13981,"implemented":true,"kind":"function","modifiers":[],"name":"_getRepresentationAsset","nameLocation":"4630:23:68","nodeType":"FunctionDefinition","parameters":{"id":13966,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13965,"mutability":"mutable","name":"_key","nameLocation":"4662:4:68","nodeType":"VariableDeclaration","scope":13981,"src":"4654:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13964,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4654:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4653:14:68"},"returnParameters":{"id":13969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13968,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13981,"src":"4691:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13967,"name":"address","nodeType":"ElementaryTypeName","src":"4691:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4690:9:68"},"scope":14146,"src":"4621:282:68","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13997,"nodeType":"Block","src":"5047:48:68","statements":[{"expression":{"arguments":[{"arguments":[{"id":13993,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13985,"src":"5081:7:68","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}],"expression":{"id":13991,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5070:3:68","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":13992,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5074:6:68","memberName":"encode","nodeType":"MemberAccess","src":"5070:10:68","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":13994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5070:19:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":13990,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5060:9:68","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":13995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5060:30:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":13989,"id":13996,"nodeType":"Return","src":"5053:37:68"}]},"documentation":{"id":13982,"nodeType":"StructuredDocumentation","src":"4907:46:68","text":" @notice Calculates a transferId"},"id":13998,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateTransferId","nameLocation":"4965:20:68","nodeType":"FunctionDefinition","parameters":{"id":13986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13985,"mutability":"mutable","name":"_params","nameLocation":"5006:7:68","nodeType":"VariableDeclaration","scope":13998,"src":"4986:27:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo"},"typeName":{"id":13984,"nodeType":"UserDefinedTypeName","pathNode":{"id":13983,"name":"TransferInfo","nameLocations":["4986:12:68"],"nodeType":"IdentifierPath","referencedDeclaration":29351,"src":"4986:12:68"},"referencedDeclaration":29351,"src":"4986:12:68","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_storage_ptr","typeString":"struct TransferInfo"}},"visibility":"internal"}],"src":"4985:29:68"},"returnParameters":{"id":13989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13988,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13998,"src":"5038:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13987,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5038:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5037:9:68"},"scope":14146,"src":"4956:139:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14018,"nodeType":"Block","src":"5549:50:68","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":14016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":14013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14010,"name":"_origin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14001,"src":"5570:7:68","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":14009,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5563:6:68","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":14008,"name":"uint64","nodeType":"ElementaryTypeName","src":"5563:6:68","typeDescriptions":{}}},"id":14011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5563:15:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3332","id":14012,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5582:2:68","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"5563:21:68","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"id":14014,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5562:23:68","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"id":14015,"name":"_nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14003,"src":"5588:6:68","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"5562:32:68","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":14007,"id":14017,"nodeType":"Return","src":"5555:39:68"}]},"documentation":{"id":13999,"nodeType":"StructuredDocumentation","src":"5099:360:68","text":" @notice Internal utility function that combines\n         `_origin` and `_nonce`.\n @dev Both origin and nonce should be less than 2^32 - 1\n @param _origin Domain of chain where the transfer originated\n @param _nonce The unique identifier for the message from origin to destination\n @return Returns (`_origin` << 32) & `_nonce`"},"id":14019,"implemented":true,"kind":"function","modifiers":[],"name":"_originAndNonce","nameLocation":"5471:15:68","nodeType":"FunctionDefinition","parameters":{"id":14004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14001,"mutability":"mutable","name":"_origin","nameLocation":"5494:7:68","nodeType":"VariableDeclaration","scope":14019,"src":"5487:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":14000,"name":"uint32","nodeType":"ElementaryTypeName","src":"5487:6:68","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":14003,"mutability":"mutable","name":"_nonce","nameLocation":"5510:6:68","nodeType":"VariableDeclaration","scope":14019,"src":"5503:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":14002,"name":"uint32","nodeType":"ElementaryTypeName","src":"5503:6:68","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"5486:31:68"},"returnParameters":{"id":14007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14006,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14019,"src":"5541:6:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":14005,"name":"uint64","nodeType":"ElementaryTypeName","src":"5541:6:68","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"5540:8:68"},"scope":14146,"src":"5462:137:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14038,"nodeType":"Block","src":"5718:65:68","statements":[{"expression":{"arguments":[{"id":14032,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14021,"src":"5756:4:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":14033,"name":"_id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14023,"src":"5762:3:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":14034,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14025,"src":"5767:7:68","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":14035,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"5776:1:68","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}],"expression":{"id":14030,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"5731:10:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":14031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5742:13:68","memberName":"getLocalAsset","nodeType":"MemberAccess","referencedDeclaration":28579,"src":"5731:24:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_uint32_$_t_struct$_AppStorage_$29536_storage_ptr_$returns$_t_address_$","typeString":"function (bytes32,bytes32,uint32,struct AppStorage storage pointer) view returns (address)"}},"id":14036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5731:47:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":14029,"id":14037,"nodeType":"Return","src":"5724:54:68"}]},"id":14039,"implemented":true,"kind":"function","modifiers":[],"name":"_getLocalAsset","nameLocation":"5612:14:68","nodeType":"FunctionDefinition","parameters":{"id":14026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14021,"mutability":"mutable","name":"_key","nameLocation":"5640:4:68","nodeType":"VariableDeclaration","scope":14039,"src":"5632:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14020,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5632:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":14023,"mutability":"mutable","name":"_id","nameLocation":"5658:3:68","nodeType":"VariableDeclaration","scope":14039,"src":"5650:11:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14022,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5650:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":14025,"mutability":"mutable","name":"_domain","nameLocation":"5674:7:68","nodeType":"VariableDeclaration","scope":14039,"src":"5667:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":14024,"name":"uint32","nodeType":"ElementaryTypeName","src":"5667:6:68","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"5626:59:68"},"returnParameters":{"id":14029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14028,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14039,"src":"5709:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14027,"name":"address","nodeType":"ElementaryTypeName","src":"5709:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5708:9:68"},"scope":14146,"src":"5603:180:68","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":14053,"nodeType":"Block","src":"5876:63:68","statements":[{"expression":{"arguments":[{"id":14049,"name":"_candidate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14041,"src":"5920:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14050,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"5932:1:68","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}],"expression":{"id":14047,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"5889:10:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":14048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5900:19:68","memberName":"getCanonicalTokenId","nodeType":"MemberAccess","referencedDeclaration":28517,"src":"5889:30:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_struct$_AppStorage_$29536_storage_ptr_$returns$_t_struct$_TokenId_$37728_memory_ptr_$","typeString":"function (address,struct AppStorage storage pointer) view returns (struct TokenId memory)"}},"id":14051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5889:45:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"functionReturnParameters":14046,"id":14052,"nodeType":"Return","src":"5882:52:68"}]},"id":14054,"implemented":true,"kind":"function","modifiers":[],"name":"_getCanonicalTokenId","nameLocation":"5796:20:68","nodeType":"FunctionDefinition","parameters":{"id":14042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14041,"mutability":"mutable","name":"_candidate","nameLocation":"5825:10:68","nodeType":"VariableDeclaration","scope":14054,"src":"5817:18:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14040,"name":"address","nodeType":"ElementaryTypeName","src":"5817:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5816:20:68"},"returnParameters":{"id":14046,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14045,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14054,"src":"5860:14:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":14044,"nodeType":"UserDefinedTypeName","pathNode":{"id":14043,"name":"TokenId","nameLocations":["5860:7:68"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"5860:7:68"},"referencedDeclaration":37728,"src":"5860:7:68","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"src":"5859:16:68"},"scope":14146,"src":"5787:152:68","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":14087,"nodeType":"Block","src":"6077:153:68","statements":[{"assignments":[14068],"declarations":[{"constant":false,"id":14068,"mutability":"mutable","name":"_local","nameLocation":"6091:6:68","nodeType":"VariableDeclaration","scope":14087,"src":"6083:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14067,"name":"address","nodeType":"ElementaryTypeName","src":"6083:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":14076,"initialValue":{"arguments":[{"id":14071,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14056,"src":"6125:4:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":14072,"name":"_id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14058,"src":"6131:3:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":14073,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14060,"src":"6136:7:68","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":14074,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"6145:1:68","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}],"expression":{"id":14069,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"6100:10:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":14070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6111:13:68","memberName":"getLocalAsset","nodeType":"MemberAccess","referencedDeclaration":28579,"src":"6100:24:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_uint32_$_t_struct$_AppStorage_$29536_storage_ptr_$returns$_t_address_$","typeString":"function (bytes32,bytes32,uint32,struct AppStorage storage pointer) view returns (address)"}},"id":14075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6100:47:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6083:64:68"},{"assignments":[14078],"declarations":[{"constant":false,"id":14078,"mutability":"mutable","name":"_adopted","nameLocation":"6161:8:68","nodeType":"VariableDeclaration","scope":14087,"src":"6153:16:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14077,"name":"address","nodeType":"ElementaryTypeName","src":"6153:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":14082,"initialValue":{"arguments":[{"id":14080,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14056,"src":"6189:4:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":14079,"name":"_getAdoptedAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13962,"src":"6172:16:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":14081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6172:22:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6153:41:68"},{"expression":{"components":[{"id":14083,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14068,"src":"6208:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14084,"name":"_adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14078,"src":"6216:8:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":14085,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6207:18:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$","typeString":"tuple(address,address)"}},"functionReturnParameters":14066,"id":14086,"nodeType":"Return","src":"6200:25:68"}]},"id":14088,"implemented":true,"kind":"function","modifiers":[],"name":"_getLocalAndAdoptedToken","nameLocation":"5952:24:68","nodeType":"FunctionDefinition","parameters":{"id":14061,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14056,"mutability":"mutable","name":"_key","nameLocation":"5990:4:68","nodeType":"VariableDeclaration","scope":14088,"src":"5982:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14055,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5982:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":14058,"mutability":"mutable","name":"_id","nameLocation":"6008:3:68","nodeType":"VariableDeclaration","scope":14088,"src":"6000:11:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14057,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6000:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":14060,"mutability":"mutable","name":"_domain","nameLocation":"6024:7:68","nodeType":"VariableDeclaration","scope":14088,"src":"6017:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":14059,"name":"uint32","nodeType":"ElementaryTypeName","src":"6017:6:68","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"5976:59:68"},"returnParameters":{"id":14066,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14063,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14088,"src":"6059:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14062,"name":"address","nodeType":"ElementaryTypeName","src":"6059:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14065,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14088,"src":"6068:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14064,"name":"address","nodeType":"ElementaryTypeName","src":"6068:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6058:18:68"},"scope":14146,"src":"5943:287:68","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":14101,"nodeType":"Block","src":"6303:53:68","statements":[{"expression":{"arguments":[{"id":14097,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14090,"src":"6341:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14098,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"6349:1:68","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}],"expression":{"id":14095,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"6316:10:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":14096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6327:13:68","memberName":"isLocalOrigin","nodeType":"MemberAccess","referencedDeclaration":28546,"src":"6316:24:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_struct$_AppStorage_$29536_storage_ptr_$returns$_t_bool_$","typeString":"function (address,struct AppStorage storage pointer) view returns (bool)"}},"id":14099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6316:35:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":14094,"id":14100,"nodeType":"Return","src":"6309:42:68"}]},"id":14102,"implemented":true,"kind":"function","modifiers":[],"name":"_isLocalOrigin","nameLocation":"6243:14:68","nodeType":"FunctionDefinition","parameters":{"id":14091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14090,"mutability":"mutable","name":"_token","nameLocation":"6266:6:68","nodeType":"VariableDeclaration","scope":14102,"src":"6258:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14089,"name":"address","nodeType":"ElementaryTypeName","src":"6258:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6257:16:68"},"returnParameters":{"id":14094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14093,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14102,"src":"6297:4:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14092,"name":"bool","nodeType":"ElementaryTypeName","src":"6297:4:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6296:6:68"},"scope":14146,"src":"6234:122:68","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":14144,"nodeType":"Block","src":"6461:316:68","statements":[{"assignments":[14114],"declarations":[{"constant":false,"id":14114,"mutability":"mutable","name":"_canonical","nameLocation":"6482:10:68","nodeType":"VariableDeclaration","scope":14144,"src":"6467:25:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":14113,"nodeType":"UserDefinedTypeName","pathNode":{"id":14112,"name":"TokenId","nameLocations":["6467:7:68"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"6467:7:68"},"referencedDeclaration":37728,"src":"6467:7:68","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"id":14118,"initialValue":{"arguments":[{"id":14116,"name":"_candidate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14104,"src":"6516:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14115,"name":"_getCanonicalTokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14054,"src":"6495:20:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_struct$_TokenId_$37728_memory_ptr_$","typeString":"function (address) view returns (struct TokenId memory)"}},"id":14117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6495:32:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"nodeType":"VariableDeclarationStatement","src":"6467:60:68"},{"assignments":[14120],"declarations":[{"constant":false,"id":14120,"mutability":"mutable","name":"_key","nameLocation":"6541:4:68","nodeType":"VariableDeclaration","scope":14144,"src":"6533:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14119,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6533:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":14128,"initialValue":{"arguments":[{"expression":{"id":14123,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14114,"src":"6582:10:68","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":14124,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6593:2:68","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"6582:13:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":14125,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14114,"src":"6597:10:68","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":14126,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6608:6:68","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"6597:17:68","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":14121,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"6548:10:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":14122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6559:22:68","memberName":"calculateCanonicalHash","nodeType":"MemberAccess","referencedDeclaration":28598,"src":"6548:33:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint32) pure returns (bytes32)"}},"id":14127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6548:67:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6533:82:68"},{"condition":{"id":14134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6625:36:68","subExpression":{"expression":{"arguments":[{"id":14131,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14120,"src":"6647:4:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":14129,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"6626:10:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":14130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6637:9:68","memberName":"getConfig","nodeType":"MemberAccess","referencedDeclaration":27701,"src":"6626:20:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_struct$_TokenConfig_$29395_storage_ptr_$","typeString":"function (bytes32) view returns (struct TokenConfig storage pointer)"}},"id":14132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6626:26:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":14133,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6653:8:68","memberName":"approval","nodeType":"MemberAccess","referencedDeclaration":29390,"src":"6626:35:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14139,"nodeType":"IfStatement","src":"6621:121:68","trueBody":{"id":14138,"nodeType":"Block","src":"6663:79:68","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14135,"name":"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13746,"src":"6678:55:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6678:57:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14137,"nodeType":"RevertStatement","src":"6671:64:68"}]}},{"expression":{"components":[{"id":14140,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14114,"src":"6755:10:68","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},{"id":14141,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14120,"src":"6767:4:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":14142,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6754:18:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_struct$_TokenId_$37728_memory_ptr_$_t_bytes32_$","typeString":"tuple(struct TokenId memory,bytes32)"}},"functionReturnParameters":14111,"id":14143,"nodeType":"Return","src":"6747:25:68"}]},"id":14145,"implemented":true,"kind":"function","modifiers":[],"name":"_getApprovedCanonicalId","nameLocation":"6369:23:68","nodeType":"FunctionDefinition","parameters":{"id":14105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14104,"mutability":"mutable","name":"_candidate","nameLocation":"6401:10:68","nodeType":"VariableDeclaration","scope":14145,"src":"6393:18:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14103,"name":"address","nodeType":"ElementaryTypeName","src":"6393:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6392:20:68"},"returnParameters":{"id":14111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14108,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14145,"src":"6436:14:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":14107,"nodeType":"UserDefinedTypeName","pathNode":{"id":14106,"name":"TokenId","nameLocations":["6436:7:68"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"6436:7:68"},"referencedDeclaration":37728,"src":"6436:7:68","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":14110,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14145,"src":"6452:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14109,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6452:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6435:25:68"},"scope":14146,"src":"6360:417:68","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":14147,"src":"364:6415:68","usedErrors":[13728,13730,13732,13734,13736,13738,13740,13742,13744,13746]}],"src":"39:6741:68"},"id":68},"contracts/core/connext/facets/BridgeFacet.sol":{"ast":{"absolutePath":"contracts/core/connext/facets/BridgeFacet.sol","exportedSymbols":{"Address":[11484],"AssetLogic":[28696],"BaseConnextFacet":[14146],"BridgeFacet":[16127],"BridgeMessage":[29188],"Constants":[29304],"DestinationTransferStatus":[29324],"ECDSA":[12176],"ExcessivelySafeCall":[50104],"ExecuteArgs":[29365],"IAavePool":[25862],"IBridgeToken":[25890],"IConnectorManager":[47805],"IERC20Metadata":[10837],"IOutbox":[47864],"IXReceiver":[27349],"TokenConfig":[29395],"TokenId":[37728],"TransferInfo":[29351],"TypeCasts":[50188],"TypedMemView":[51265]},"id":16128,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":14148,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:69"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","id":14150,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16128,"sourceUnit":10838,"src":"64:97:69","symbolAliases":[{"foreign":{"id":14149,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10837,"src":"72:14:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","file":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","id":14152,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16128,"sourceUnit":12177,"src":"162:75:69","symbolAliases":[{"foreign":{"id":14151,"name":"ECDSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12176,"src":"170:5:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":14154,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16128,"sourceUnit":11485,"src":"238:66:69","symbolAliases":[{"foreign":{"id":14153,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"246:7:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/libraries/ExcessivelySafeCall.sol","file":"../../../shared/libraries/ExcessivelySafeCall.sol","id":14156,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16128,"sourceUnit":50105,"src":"306:86:69","symbolAliases":[{"foreign":{"id":14155,"name":"ExcessivelySafeCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50104,"src":"314:19:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/libraries/TypedMemView.sol","file":"../../../shared/libraries/TypedMemView.sol","id":14158,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16128,"sourceUnit":51266,"src":"393:72:69","symbolAliases":[{"foreign":{"id":14157,"name":"TypedMemView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51265,"src":"401:12:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/libraries/TypeCasts.sol","file":"../../../shared/libraries/TypeCasts.sol","id":14160,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16128,"sourceUnit":50189,"src":"466:66:69","symbolAliases":[{"foreign":{"id":14159,"name":"TypeCasts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50188,"src":"474:9:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/IOutbox.sol","file":"../../../messaging/interfaces/IOutbox.sol","id":14162,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16128,"sourceUnit":47865,"src":"534:66:69","symbolAliases":[{"foreign":{"id":14161,"name":"IOutbox","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47864,"src":"542:7:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/IConnectorManager.sol","file":"../../../messaging/interfaces/IConnectorManager.sol","id":14164,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16128,"sourceUnit":47806,"src":"601:86:69","symbolAliases":[{"foreign":{"id":14163,"name":"IConnectorManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47805,"src":"609:17:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/facets/BaseConnextFacet.sol","file":"./BaseConnextFacet.sol","id":14166,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16128,"sourceUnit":14147,"src":"689:56:69","symbolAliases":[{"foreign":{"id":14165,"name":"BaseConnextFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14146,"src":"697:16:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/AssetLogic.sol","file":"../libraries/AssetLogic.sol","id":14168,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16128,"sourceUnit":28697,"src":"747:55:69","symbolAliases":[{"foreign":{"id":14167,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"755:10:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/LibConnextStorage.sol","file":"../libraries/LibConnextStorage.sol","id":14173,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16128,"sourceUnit":29546,"src":"803:117:69","symbolAliases":[{"foreign":{"id":14169,"name":"ExecuteArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29365,"src":"811:11:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":14170,"name":"TransferInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29351,"src":"824:12:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":14171,"name":"DestinationTransferStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29324,"src":"838:25:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":14172,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29395,"src":"865:11:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/BridgeMessage.sol","file":"../libraries/BridgeMessage.sol","id":14175,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16128,"sourceUnit":29189,"src":"921:61:69","symbolAliases":[{"foreign":{"id":14174,"name":"BridgeMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29188,"src":"929:13:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/Constants.sol","file":"../libraries/Constants.sol","id":14177,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16128,"sourceUnit":29305,"src":"983:53:69","symbolAliases":[{"foreign":{"id":14176,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"991:9:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/TokenId.sol","file":"../libraries/TokenId.sol","id":14179,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16128,"sourceUnit":37729,"src":"1037:49:69","symbolAliases":[{"foreign":{"id":14178,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37728,"src":"1045:7:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IXReceiver.sol","file":"../interfaces/IXReceiver.sol","id":14181,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16128,"sourceUnit":27350,"src":"1088:56:69","symbolAliases":[{"foreign":{"id":14180,"name":"IXReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27349,"src":"1096:10:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IAavePool.sol","file":"../interfaces/IAavePool.sol","id":14183,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16128,"sourceUnit":25863,"src":"1145:54:69","symbolAliases":[{"foreign":{"id":14182,"name":"IAavePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25862,"src":"1153:9:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IBridgeToken.sol","file":"../interfaces/IBridgeToken.sol","id":14185,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16128,"sourceUnit":25891,"src":"1200:60:69","symbolAliases":[{"foreign":{"id":14184,"name":"IBridgeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25890,"src":"1208:12:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":14186,"name":"BaseConnextFacet","nameLocations":["1286:16:69"],"nodeType":"IdentifierPath","referencedDeclaration":14146,"src":"1286:16:69"},"id":14187,"nodeType":"InheritanceSpecifier","src":"1286:16:69"}],"canonicalName":"BridgeFacet","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":16127,"linearizedBaseContracts":[16127,14146],"name":"BridgeFacet","nameLocation":"1271:11:69","nodeType":"ContractDefinition","nodes":[{"global":false,"id":14190,"libraryName":{"id":14188,"name":"TypedMemView","nameLocations":["1355:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":51265,"src":"1355:12:69"},"nodeType":"UsingForDirective","src":"1349:29:69","typeName":{"id":14189,"name":"bytes","nodeType":"ElementaryTypeName","src":"1372:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},{"global":false,"id":14193,"libraryName":{"id":14191,"name":"TypedMemView","nameLocations":["1387:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":51265,"src":"1387:12:69"},"nodeType":"UsingForDirective","src":"1381:31:69","typeName":{"id":14192,"name":"bytes29","nodeType":"ElementaryTypeName","src":"1404:7:69","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}},{"global":false,"id":14196,"libraryName":{"id":14194,"name":"BridgeMessage","nameLocations":["1421:13:69"],"nodeType":"IdentifierPath","referencedDeclaration":29188,"src":"1421:13:69"},"nodeType":"UsingForDirective","src":"1415:32:69","typeName":{"id":14195,"name":"bytes29","nodeType":"ElementaryTypeName","src":"1439:7:69","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}},{"errorSelector":"7794c89a","id":14198,"name":"BridgeFacet__addRemote_invalidRouter","nameLocation":"1500:36:69","nodeType":"ErrorDefinition","parameters":{"id":14197,"nodeType":"ParameterList","parameters":[],"src":"1536:2:69"},"src":"1494:45:69"},{"errorSelector":"a249d5ec","id":14200,"name":"BridgeFacet__addRemote_invalidDomain","nameLocation":"1548:36:69","nodeType":"ErrorDefinition","parameters":{"id":14199,"nodeType":"ParameterList","parameters":[],"src":"1584:2:69"},"src":"1542:45:69"},{"errorSelector":"e3613aff","id":14202,"name":"BridgeFacet__onlyDelegate_notDelegate","nameLocation":"1596:37:69","nodeType":"ErrorDefinition","parameters":{"id":14201,"nodeType":"ParameterList","parameters":[],"src":"1633:2:69"},"src":"1590:46:69"},{"errorSelector":"65f3811a","id":14204,"name":"BridgeFacet__addSequencer_invalidSequencer","nameLocation":"1645:42:69","nodeType":"ErrorDefinition","parameters":{"id":14203,"nodeType":"ParameterList","parameters":[],"src":"1687:2:69"},"src":"1639:51:69"},{"errorSelector":"e2a45063","id":14206,"name":"BridgeFacet__addSequencer_alreadyApproved","nameLocation":"1699:41:69","nodeType":"ErrorDefinition","parameters":{"id":14205,"nodeType":"ParameterList","parameters":[],"src":"1740:2:69"},"src":"1693:50:69"},{"errorSelector":"7840a40d","id":14208,"name":"BridgeFacet__removeSequencer_notApproved","nameLocation":"1752:40:69","nodeType":"ErrorDefinition","parameters":{"id":14207,"nodeType":"ParameterList","parameters":[],"src":"1792:2:69"},"src":"1746:49:69"},{"errorSelector":"07fd9840","id":14210,"name":"BridgeFacet__setXAppConnectionManager_domainsDontMatch","nameLocation":"1804:54:69","nodeType":"ErrorDefinition","parameters":{"id":14209,"nodeType":"ParameterList","parameters":[],"src":"1858:2:69"},"src":"1798:63:69"},{"errorSelector":"ae715ad3","id":14212,"name":"BridgeFacet__xcall_nativeAssetNotSupported","nameLocation":"1870:42:69","nodeType":"ErrorDefinition","parameters":{"id":14211,"nodeType":"ParameterList","parameters":[],"src":"1912:2:69"},"src":"1864:51:69"},{"errorSelector":"0845fdd0","id":14214,"name":"BridgeFacet__xcall_emptyTo","nameLocation":"1924:26:69","nodeType":"ErrorDefinition","parameters":{"id":14213,"nodeType":"ParameterList","parameters":[],"src":"1950:2:69"},"src":"1918:35:69"},{"errorSelector":"711ae462","id":14216,"name":"BridgeFacet__xcall_invalidSlippage","nameLocation":"1962:34:69","nodeType":"ErrorDefinition","parameters":{"id":14215,"nodeType":"ParameterList","parameters":[],"src":"1996:2:69"},"src":"1956:43:69"},{"errorSelector":"965a46c1","id":14218,"name":"BridgeFacet_xcall__emptyLocalAsset","nameLocation":"2008:34:69","nodeType":"ErrorDefinition","parameters":{"id":14217,"nodeType":"ParameterList","parameters":[],"src":"2042:2:69"},"src":"2002:43:69"},{"errorSelector":"48ba8bf1","id":14220,"name":"BridgeFacet__xcall_capReached","nameLocation":"2054:29:69","nodeType":"ErrorDefinition","parameters":{"id":14219,"nodeType":"ParameterList","parameters":[],"src":"2083:2:69"},"src":"2048:38:69"},{"errorSelector":"7c32a2b3","id":14222,"name":"BridgeFacet__execute_unapprovedSender","nameLocation":"2095:37:69","nodeType":"ErrorDefinition","parameters":{"id":14221,"nodeType":"ParameterList","parameters":[],"src":"2132:2:69"},"src":"2089:46:69"},{"errorSelector":"b6bb3225","id":14224,"name":"BridgeFacet__execute_wrongDomain","nameLocation":"2144:32:69","nodeType":"ErrorDefinition","parameters":{"id":14223,"nodeType":"ParameterList","parameters":[],"src":"2176:2:69"},"src":"2138:41:69"},{"errorSelector":"fd04da98","id":14226,"name":"BridgeFacet__execute_notSupportedSequencer","nameLocation":"2188:42:69","nodeType":"ErrorDefinition","parameters":{"id":14225,"nodeType":"ParameterList","parameters":[],"src":"2230:2:69"},"src":"2182:51:69"},{"errorSelector":"8579eca5","id":14228,"name":"BridgeFacet__execute_invalidSequencerSignature","nameLocation":"2242:46:69","nodeType":"ErrorDefinition","parameters":{"id":14227,"nodeType":"ParameterList","parameters":[],"src":"2288:2:69"},"src":"2236:55:69"},{"errorSelector":"13c06ef3","id":14230,"name":"BridgeFacet__execute_maxRoutersExceeded","nameLocation":"2300:39:69","nodeType":"ErrorDefinition","parameters":{"id":14229,"nodeType":"ParameterList","parameters":[],"src":"2339:2:69"},"src":"2294:48:69"},{"errorSelector":"70f5bfb8","id":14232,"name":"BridgeFacet__execute_notSupportedRouter","nameLocation":"2351:39:69","nodeType":"ErrorDefinition","parameters":{"id":14231,"nodeType":"ParameterList","parameters":[],"src":"2390:2:69"},"src":"2345:48:69"},{"errorSelector":"e87748cc","id":14234,"name":"BridgeFacet__execute_invalidRouterSignature","nameLocation":"2402:43:69","nodeType":"ErrorDefinition","parameters":{"id":14233,"nodeType":"ParameterList","parameters":[],"src":"2445:2:69"},"src":"2396:52:69"},{"errorSelector":"10c4e509","id":14236,"name":"BridgeFacet__execute_notApprovedForPortals","nameLocation":"2457:42:69","nodeType":"ErrorDefinition","parameters":{"id":14235,"nodeType":"ParameterList","parameters":[],"src":"2499:2:69"},"src":"2451:51:69"},{"errorSelector":"1955d616","id":14238,"name":"BridgeFacet__execute_badFastLiquidityStatus","nameLocation":"2511:43:69","nodeType":"ErrorDefinition","parameters":{"id":14237,"nodeType":"ParameterList","parameters":[],"src":"2554:2:69"},"src":"2505:52:69"},{"errorSelector":"c641a59e","id":14240,"name":"BridgeFacet__execute_notReconciled","nameLocation":"2566:34:69","nodeType":"ErrorDefinition","parameters":{"id":14239,"nodeType":"ParameterList","parameters":[],"src":"2600:2:69"},"src":"2560:43:69"},{"errorSelector":"064cdd30","id":14242,"name":"BridgeFacet__execute_externalCallFailed","nameLocation":"2612:39:69","nodeType":"ErrorDefinition","parameters":{"id":14241,"nodeType":"ParameterList","parameters":[],"src":"2651:2:69"},"src":"2606:48:69"},{"errorSelector":"0dc5b86c","id":14244,"name":"BridgeFacet__excecute_insufficientGas","nameLocation":"2663:37:69","nodeType":"ErrorDefinition","parameters":{"id":14243,"nodeType":"ParameterList","parameters":[],"src":"2700:2:69"},"src":"2657:46:69"},{"errorSelector":"80eab346","id":14246,"name":"BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn","nameLocation":"2712:62:69","nodeType":"ErrorDefinition","parameters":{"id":14245,"nodeType":"ParameterList","parameters":[],"src":"2774:2:69"},"src":"2706:71:69"},{"errorSelector":"48e7dc3f","id":14248,"name":"BridgeFacet__bumpTransfer_valueIsZero","nameLocation":"2786:37:69","nodeType":"ErrorDefinition","parameters":{"id":14247,"nodeType":"ParameterList","parameters":[],"src":"2823:2:69"},"src":"2780:46:69"},{"errorSelector":"bd761950","id":14250,"name":"BridgeFacet__bumpTransfer_noRelayerVault","nameLocation":"2835:40:69","nodeType":"ErrorDefinition","parameters":{"id":14249,"nodeType":"ParameterList","parameters":[],"src":"2875:2:69"},"src":"2829:49:69"},{"errorSelector":"668b9a86","id":14252,"name":"BridgeFacet__forceUpdateSlippage_invalidSlippage","nameLocation":"2887:48:69","nodeType":"ErrorDefinition","parameters":{"id":14251,"nodeType":"ParameterList","parameters":[],"src":"2935:2:69"},"src":"2881:57:69"},{"errorSelector":"2a8e4627","id":14254,"name":"BridgeFacet__forceUpdateSlippage_notDestination","nameLocation":"2947:47:69","nodeType":"ErrorDefinition","parameters":{"id":14253,"nodeType":"ParameterList","parameters":[],"src":"2994:2:69"},"src":"2941:56:69"},{"errorSelector":"56d2ab78","id":14256,"name":"BridgeFacet__forceReceiveLocal_notDestination","nameLocation":"3006:45:69","nodeType":"ErrorDefinition","parameters":{"id":14255,"nodeType":"ParameterList","parameters":[],"src":"3051:2:69"},"src":"3000:54:69"},{"errorSelector":"c3bcd490","id":14258,"name":"BridgeFacet__mustHaveRemote_destinationNotSupported","nameLocation":"3063:51:69","nodeType":"ErrorDefinition","parameters":{"id":14257,"nodeType":"ParameterList","parameters":[],"src":"3114:2:69"},"src":"3057:60:69"},{"anonymous":false,"documentation":{"id":14259,"nodeType":"StructuredDocumentation","src":"3203:605:69","text":" @notice Emitted when `xcall` is called on the origin domain of a transfer.\n @param transferId - The unique identifier of the crosschain transfer.\n @param nonce - The bridge nonce of the transfer on the origin domain.\n @param messageHash - The hash of the message bytes (containing all transfer info) that were bridged.\n @param params - The `TransferInfo` provided to the function.\n @param asset - The asset sent in with xcall\n @param amount - The amount sent in with xcall\n @param local - The local asset that is controlled by the bridge and can be burned/minted"},"eventSelector":"ed8e6ba697dd65259e5ce532ac08ff06d1a3607bcec58f8f0937fe36a5666c54","id":14278,"name":"XCalled","nameLocation":"3817:7:69","nodeType":"EventDefinition","parameters":{"id":14277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14261,"indexed":true,"mutability":"mutable","name":"transferId","nameLocation":"3846:10:69","nodeType":"VariableDeclaration","scope":14278,"src":"3830:26:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14260,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3830:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":14263,"indexed":true,"mutability":"mutable","name":"nonce","nameLocation":"3878:5:69","nodeType":"VariableDeclaration","scope":14278,"src":"3862:21:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14262,"name":"uint256","nodeType":"ElementaryTypeName","src":"3862:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14265,"indexed":true,"mutability":"mutable","name":"messageHash","nameLocation":"3905:11:69","nodeType":"VariableDeclaration","scope":14278,"src":"3889:27:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14264,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3889:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":14268,"indexed":false,"mutability":"mutable","name":"params","nameLocation":"3935:6:69","nodeType":"VariableDeclaration","scope":14278,"src":"3922:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo"},"typeName":{"id":14267,"nodeType":"UserDefinedTypeName","pathNode":{"id":14266,"name":"TransferInfo","nameLocations":["3922:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":29351,"src":"3922:12:69"},"referencedDeclaration":29351,"src":"3922:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_storage_ptr","typeString":"struct TransferInfo"}},"visibility":"internal"},{"constant":false,"id":14270,"indexed":false,"mutability":"mutable","name":"asset","nameLocation":"3955:5:69","nodeType":"VariableDeclaration","scope":14278,"src":"3947:13:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14269,"name":"address","nodeType":"ElementaryTypeName","src":"3947:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14272,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3974:6:69","nodeType":"VariableDeclaration","scope":14278,"src":"3966:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14271,"name":"uint256","nodeType":"ElementaryTypeName","src":"3966:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14274,"indexed":false,"mutability":"mutable","name":"local","nameLocation":"3994:5:69","nodeType":"VariableDeclaration","scope":14278,"src":"3986:13:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14273,"name":"address","nodeType":"ElementaryTypeName","src":"3986:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14276,"indexed":false,"mutability":"mutable","name":"messageBody","nameLocation":"4011:11:69","nodeType":"VariableDeclaration","scope":14278,"src":"4005:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":14275,"name":"bytes","nodeType":"ElementaryTypeName","src":"4005:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3824:202:69"},"src":"3811:216:69"},{"anonymous":false,"documentation":{"id":14279,"nodeType":"StructuredDocumentation","src":"4031:259:69","text":" @notice Emitted when a transfer has its external data executed\n @param transferId - The unique identifier of the crosschain transfer.\n @param success - Whether calldata succeeded\n @param returnData - Return bytes from the IXReceiver"},"eventSelector":"b1a4ab59facaedd6d3a71da3902e0a1fa5b99750c0e20cd878334378a41cb335","id":14287,"name":"ExternalCalldataExecuted","nameLocation":"4299:24:69","nodeType":"EventDefinition","parameters":{"id":14286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14281,"indexed":true,"mutability":"mutable","name":"transferId","nameLocation":"4340:10:69","nodeType":"VariableDeclaration","scope":14287,"src":"4324:26:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14280,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4324:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":14283,"indexed":false,"mutability":"mutable","name":"success","nameLocation":"4357:7:69","nodeType":"VariableDeclaration","scope":14287,"src":"4352:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14282,"name":"bool","nodeType":"ElementaryTypeName","src":"4352:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":14285,"indexed":false,"mutability":"mutable","name":"returnData","nameLocation":"4372:10:69","nodeType":"VariableDeclaration","scope":14287,"src":"4366:16:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":14284,"name":"bytes","nodeType":"ElementaryTypeName","src":"4366:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4323:60:69"},"src":"4293:91:69"},{"anonymous":false,"documentation":{"id":14288,"nodeType":"StructuredDocumentation","src":"4388:979:69","text":" @notice Emitted when `execute` is called on the destination domain of a transfer.\n @dev `execute` may be called when providing fast liquidity or when processing a reconciled (slow) transfer.\n @param transferId - The unique identifier of the crosschain transfer.\n @param to - The recipient `TransferInfo.to` provided, created as indexed parameter.\n @param asset - The asset the recipient is given or the external call is executed with. Should be the\n adopted asset on that chain.\n @param args - The `ExecuteArgs` provided to the function.\n @param local - The local asset that was either supplied by the router for a fast-liquidity transfer or\n minted by the bridge in a reconciled (slow) transfer. Could be the same as the adopted `asset` param.\n @param amount - The amount of transferring asset the recipient address receives or the external call is\n executed with.\n @param caller - The account that called the function."},"eventSelector":"0b07a8b0b083f8976b3c832b720632f49cb8ba1e7a99e1b145f51a47d3391cb7","id":14305,"name":"Executed","nameLocation":"5376:8:69","nodeType":"EventDefinition","parameters":{"id":14304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14290,"indexed":true,"mutability":"mutable","name":"transferId","nameLocation":"5406:10:69","nodeType":"VariableDeclaration","scope":14305,"src":"5390:26:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14289,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5390:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":14292,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"5438:2:69","nodeType":"VariableDeclaration","scope":14305,"src":"5422:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14291,"name":"address","nodeType":"ElementaryTypeName","src":"5422:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14294,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"5462:5:69","nodeType":"VariableDeclaration","scope":14305,"src":"5446:21:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14293,"name":"address","nodeType":"ElementaryTypeName","src":"5446:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14297,"indexed":false,"mutability":"mutable","name":"args","nameLocation":"5485:4:69","nodeType":"VariableDeclaration","scope":14305,"src":"5473:16:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_memory_ptr","typeString":"struct ExecuteArgs"},"typeName":{"id":14296,"nodeType":"UserDefinedTypeName","pathNode":{"id":14295,"name":"ExecuteArgs","nameLocations":["5473:11:69"],"nodeType":"IdentifierPath","referencedDeclaration":29365,"src":"5473:11:69"},"referencedDeclaration":29365,"src":"5473:11:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_storage_ptr","typeString":"struct ExecuteArgs"}},"visibility":"internal"},{"constant":false,"id":14299,"indexed":false,"mutability":"mutable","name":"local","nameLocation":"5503:5:69","nodeType":"VariableDeclaration","scope":14305,"src":"5495:13:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14298,"name":"address","nodeType":"ElementaryTypeName","src":"5495:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14301,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"5522:6:69","nodeType":"VariableDeclaration","scope":14305,"src":"5514:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14300,"name":"uint256","nodeType":"ElementaryTypeName","src":"5514:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14303,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"5542:6:69","nodeType":"VariableDeclaration","scope":14305,"src":"5534:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14302,"name":"address","nodeType":"ElementaryTypeName","src":"5534:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5384:168:69"},"src":"5370:183:69"},{"anonymous":false,"documentation":{"id":14306,"nodeType":"StructuredDocumentation","src":"5557:331:69","text":" @notice Emitted when `_bumpTransfer` is called by an user on the origin domain both in\n `xcall` and `bumpTransfer`\n @param transferId - The unique identifier of the crosschain transaction\n @param increase - The additional amount fees increased by\n @param caller - The account that called the function"},"eventSelector":"fd832caf789e0dadd0e7ed643b3ea6051fa26c48516e242ca4cb3db9eda6c8ec","id":14314,"name":"TransferRelayerFeesIncreased","nameLocation":"5897:28:69","nodeType":"EventDefinition","parameters":{"id":14313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14308,"indexed":true,"mutability":"mutable","name":"transferId","nameLocation":"5942:10:69","nodeType":"VariableDeclaration","scope":14314,"src":"5926:26:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14307,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5926:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":14310,"indexed":false,"mutability":"mutable","name":"increase","nameLocation":"5962:8:69","nodeType":"VariableDeclaration","scope":14314,"src":"5954:16:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14309,"name":"uint256","nodeType":"ElementaryTypeName","src":"5954:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14312,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"5980:6:69","nodeType":"VariableDeclaration","scope":14314,"src":"5972:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14311,"name":"address","nodeType":"ElementaryTypeName","src":"5972:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5925:62:69"},"src":"5891:97:69"},{"anonymous":false,"documentation":{"id":14315,"nodeType":"StructuredDocumentation","src":"5992:250:69","text":" @notice Emitted when `forceUpdateSlippage` is called by user-delegated EOA\n on the destination domain\n @param transferId - The unique identifier of the crosschain transaction\n @param slippage - The updated slippage boundary"},"eventSelector":"b243c3cea6cd1bbfd64d5d0765f13734ca7b87fdf14e017391fe12a8891434ca","id":14321,"name":"SlippageUpdated","nameLocation":"6251:15:69","nodeType":"EventDefinition","parameters":{"id":14320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14317,"indexed":true,"mutability":"mutable","name":"transferId","nameLocation":"6283:10:69","nodeType":"VariableDeclaration","scope":14321,"src":"6267:26:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14316,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6267:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":14319,"indexed":false,"mutability":"mutable","name":"slippage","nameLocation":"6303:8:69","nodeType":"VariableDeclaration","scope":14321,"src":"6295:16:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14318,"name":"uint256","nodeType":"ElementaryTypeName","src":"6295:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6266:46:69"},"src":"6245:68:69"},{"anonymous":false,"documentation":{"id":14322,"nodeType":"StructuredDocumentation","src":"6317:197:69","text":" @notice Emitted when `forceReceiveLocal` is called by a user-delegated EOA\n on the destination domain\n @param transferId - The unique identifier of the crosschain transaction"},"eventSelector":"2510041334ede909998b9aefcca4300fc36c670dd00e1f7f0afffaca56adcb39","id":14326,"name":"ForceReceiveLocal","nameLocation":"6523:17:69","nodeType":"EventDefinition","parameters":{"id":14325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14324,"indexed":true,"mutability":"mutable","name":"transferId","nameLocation":"6557:10:69","nodeType":"VariableDeclaration","scope":14326,"src":"6541:26:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14323,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6541:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6540:28:69"},"src":"6517:52:69"},{"anonymous":false,"documentation":{"id":14327,"nodeType":"StructuredDocumentation","src":"6573:378:69","text":" @notice Emitted when a router used Aave Portal liquidity for fast transfer\n @param transferId - The unique identifier of the crosschain transaction\n @param router - The authorized router that used Aave Portal liquidity\n @param asset - The asset that was provided by Aave Portal\n @param amount - The amount of asset that was provided by Aave Portal"},"eventSelector":"2d3ba0fa5be2ef8cb1ec8920a07a6cbccc2397b18ca3e70f48ea695500b8f218","id":14337,"name":"AavePortalMintUnbacked","nameLocation":"6960:22:69","nodeType":"EventDefinition","parameters":{"id":14336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14329,"indexed":true,"mutability":"mutable","name":"transferId","nameLocation":"6999:10:69","nodeType":"VariableDeclaration","scope":14337,"src":"6983:26:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14328,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6983:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":14331,"indexed":true,"mutability":"mutable","name":"router","nameLocation":"7027:6:69","nodeType":"VariableDeclaration","scope":14337,"src":"7011:22:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14330,"name":"address","nodeType":"ElementaryTypeName","src":"7011:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14333,"indexed":false,"mutability":"mutable","name":"asset","nameLocation":"7043:5:69","nodeType":"VariableDeclaration","scope":14337,"src":"7035:13:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14332,"name":"address","nodeType":"ElementaryTypeName","src":"7035:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14335,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"7058:6:69","nodeType":"VariableDeclaration","scope":14337,"src":"7050:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14334,"name":"uint256","nodeType":"ElementaryTypeName","src":"7050:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6982:83:69"},"src":"6954:112:69"},{"anonymous":false,"documentation":{"id":14338,"nodeType":"StructuredDocumentation","src":"7070:238:69","text":" @notice Emitted when a new remote instance is added\n @param domain - The domain the remote instance is on\n @param remote - The address of the remote instance\n @param caller - The account that called the function"},"eventSelector":"b07f562723347d6ea7f9f37b3b31f96b65104c3339d1c89e1b6fa88e2410b85c","id":14346,"name":"RemoteAdded","nameLocation":"7317:11:69","nodeType":"EventDefinition","parameters":{"id":14345,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14340,"indexed":false,"mutability":"mutable","name":"domain","nameLocation":"7336:6:69","nodeType":"VariableDeclaration","scope":14346,"src":"7329:13:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":14339,"name":"uint32","nodeType":"ElementaryTypeName","src":"7329:6:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":14342,"indexed":false,"mutability":"mutable","name":"remote","nameLocation":"7352:6:69","nodeType":"VariableDeclaration","scope":14346,"src":"7344:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14341,"name":"address","nodeType":"ElementaryTypeName","src":"7344:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14344,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"7368:6:69","nodeType":"VariableDeclaration","scope":14346,"src":"7360:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14343,"name":"address","nodeType":"ElementaryTypeName","src":"7360:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7328:47:69"},"src":"7311:65:69"},{"anonymous":false,"documentation":{"id":14347,"nodeType":"StructuredDocumentation","src":"7380:210:69","text":" @notice Emitted when a sequencer is added or removed from allowlists\n @param sequencer - The sequencer address to be added or removed\n @param caller - The account that called the function"},"eventSelector":"3860a100215fe93b6b95ed1ae0870e538f85a73b30d073f63fefc60e08b0c124","id":14353,"name":"SequencerAdded","nameLocation":"7599:14:69","nodeType":"EventDefinition","parameters":{"id":14352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14349,"indexed":false,"mutability":"mutable","name":"sequencer","nameLocation":"7622:9:69","nodeType":"VariableDeclaration","scope":14353,"src":"7614:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14348,"name":"address","nodeType":"ElementaryTypeName","src":"7614:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14351,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"7641:6:69","nodeType":"VariableDeclaration","scope":14353,"src":"7633:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14350,"name":"address","nodeType":"ElementaryTypeName","src":"7633:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7613:35:69"},"src":"7593:56:69"},{"anonymous":false,"documentation":{"id":14354,"nodeType":"StructuredDocumentation","src":"7653:210:69","text":" @notice Emitted when a sequencer is added or removed from allowlists\n @param sequencer - The sequencer address to be added or removed\n @param caller - The account that called the function"},"eventSelector":"4860b0a180d4b5969c2757493a999f05d0b22318320f154a02170aa239e24b13","id":14360,"name":"SequencerRemoved","nameLocation":"7872:16:69","nodeType":"EventDefinition","parameters":{"id":14359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14356,"indexed":false,"mutability":"mutable","name":"sequencer","nameLocation":"7897:9:69","nodeType":"VariableDeclaration","scope":14360,"src":"7889:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14355,"name":"address","nodeType":"ElementaryTypeName","src":"7889:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14358,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"7916:6:69","nodeType":"VariableDeclaration","scope":14360,"src":"7908:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14357,"name":"address","nodeType":"ElementaryTypeName","src":"7908:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7888:35:69"},"src":"7866:58:69"},{"anonymous":false,"documentation":{"id":14361,"nodeType":"StructuredDocumentation","src":"7928:165:69","text":" @notice Emitted `xAppConnectionManager` is updated\n @param updated - The updated address\n @param caller - The account that called the function"},"eventSelector":"d6e53d12bb441b2201be4949c7f431b383623888df2abfeef43aaaf272802d50","id":14367,"name":"XAppConnectionManagerSet","nameLocation":"8102:24:69","nodeType":"EventDefinition","parameters":{"id":14366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14363,"indexed":false,"mutability":"mutable","name":"updated","nameLocation":"8135:7:69","nodeType":"VariableDeclaration","scope":14367,"src":"8127:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14362,"name":"address","nodeType":"ElementaryTypeName","src":"8127:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14365,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"8152:6:69","nodeType":"VariableDeclaration","scope":14367,"src":"8144:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14364,"name":"address","nodeType":"ElementaryTypeName","src":"8144:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8126:33:69"},"src":"8096:64:69"},{"body":{"id":14383,"nodeType":"Block","src":"8384:100:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":14377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14373,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14371,"src":"8394:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":14374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8402:8:69","memberName":"delegate","nodeType":"MemberAccess","referencedDeclaration":29334,"src":"8394:16:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":14375,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8414:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8418:6:69","memberName":"sender","nodeType":"MemberAccess","src":"8414:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8394:30:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14381,"nodeType":"IfStatement","src":"8390:82:69","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14378,"name":"BridgeFacet__onlyDelegate_notDelegate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14202,"src":"8433:37:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8433:39:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14380,"nodeType":"RevertStatement","src":"8426:46:69"}},{"id":14382,"nodeType":"PlaceholderStatement","src":"8478:1:69"}]},"documentation":{"id":14368,"nodeType":"StructuredDocumentation","src":"8206:122:69","text":" @notice Only accept a transfer's designated delegate.\n @param _params The TransferInfo of the transfer."},"id":14384,"name":"onlyDelegate","nameLocation":"8340:12:69","nodeType":"ModifierDefinition","parameters":{"id":14372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14371,"mutability":"mutable","name":"_params","nameLocation":"8375:7:69","nodeType":"VariableDeclaration","scope":14384,"src":"8353:29:69","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo"},"typeName":{"id":14370,"nodeType":"UserDefinedTypeName","pathNode":{"id":14369,"name":"TransferInfo","nameLocations":["8353:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":29351,"src":"8353:12:69"},"referencedDeclaration":29351,"src":"8353:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_storage_ptr","typeString":"struct TransferInfo"}},"visibility":"internal"}],"src":"8352:31:69"},"src":"8331:153:69","virtual":false,"visibility":"internal"},{"body":{"id":14397,"nodeType":"Block","src":"8613:48:69","statements":[{"expression":{"baseExpression":{"expression":{"id":14392,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8626:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14393,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8628:15:69","memberName":"routedTransfers","nodeType":"MemberAccess","referencedDeclaration":29438,"src":"8626:17:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_address_$dyn_storage_$","typeString":"mapping(bytes32 => address[] storage ref)"}},"id":14395,"indexExpression":{"id":14394,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14386,"src":"8644:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8626:30:69","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"functionReturnParameters":14391,"id":14396,"nodeType":"Return","src":"8619:37:69"}]},"functionSelector":"1a8bc0e1","id":14398,"implemented":true,"kind":"function","modifiers":[],"name":"routedTransfers","nameLocation":"8537:15:69","nodeType":"FunctionDefinition","parameters":{"id":14387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14386,"mutability":"mutable","name":"_transferId","nameLocation":"8561:11:69","nodeType":"VariableDeclaration","scope":14398,"src":"8553:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14385,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8553:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8552:21:69"},"returnParameters":{"id":14391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14390,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14398,"src":"8595:16:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":14388,"name":"address","nodeType":"ElementaryTypeName","src":"8595:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":14389,"nodeType":"ArrayTypeName","src":"8595:9:69","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"8594:18:69"},"scope":16127,"src":"8528:133:69","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":14411,"nodeType":"Block","src":"8758:47:69","statements":[{"expression":{"baseExpression":{"expression":{"id":14406,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8771:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14407,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8773:14:69","memberName":"transferStatus","nodeType":"MemberAccess","referencedDeclaration":29432,"src":"8771:16:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"mapping(bytes32 => enum DestinationTransferStatus)"}},"id":14409,"indexExpression":{"id":14408,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14400,"src":"8788:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8771:29:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"functionReturnParameters":14405,"id":14410,"nodeType":"Return","src":"8764:36:69"}]},"functionSelector":"bfd79030","id":14412,"implemented":true,"kind":"function","modifiers":[],"name":"transferStatus","nameLocation":"8674:14:69","nodeType":"FunctionDefinition","parameters":{"id":14401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14400,"mutability":"mutable","name":"_transferId","nameLocation":"8697:11:69","nodeType":"VariableDeclaration","scope":14412,"src":"8689:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14399,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8689:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8688:21:69"},"returnParameters":{"id":14405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14404,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14412,"src":"8731:25:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"},"typeName":{"id":14403,"nodeType":"UserDefinedTypeName","pathNode":{"id":14402,"name":"DestinationTransferStatus","nameLocations":["8731:25:69"],"nodeType":"IdentifierPath","referencedDeclaration":29324,"src":"8731:25:69"},"referencedDeclaration":29324,"src":"8731:25:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"visibility":"internal"}],"src":"8730:27:69"},"scope":16127,"src":"8665:140:69","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":14427,"nodeType":"Block","src":"8871:64:69","statements":[{"expression":{"arguments":[{"baseExpression":{"expression":{"id":14421,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8911:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14422,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8913:7:69","memberName":"remotes","nodeType":"MemberAccess","referencedDeclaration":29468,"src":"8911:9:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint32_$_t_bytes32_$","typeString":"mapping(uint32 => bytes32)"}},"id":14424,"indexExpression":{"id":14423,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14414,"src":"8921:7:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8911:18:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":14419,"name":"TypeCasts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50188,"src":"8884:9:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TypeCasts_$50188_$","typeString":"type(library TypeCasts)"}},"id":14420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8894:16:69","memberName":"bytes32ToAddress","nodeType":"MemberAccess","referencedDeclaration":50187,"src":"8884:26:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) pure returns (address)"}},"id":14425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8884:46:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":14418,"id":14426,"nodeType":"Return","src":"8877:53:69"}]},"functionSelector":"121cca31","id":14428,"implemented":true,"kind":"function","modifiers":[],"name":"remote","nameLocation":"8818:6:69","nodeType":"FunctionDefinition","parameters":{"id":14415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14414,"mutability":"mutable","name":"_domain","nameLocation":"8832:7:69","nodeType":"VariableDeclaration","scope":14428,"src":"8825:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":14413,"name":"uint32","nodeType":"ElementaryTypeName","src":"8825:6:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"8824:16:69"},"returnParameters":{"id":14418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14417,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14428,"src":"8862:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14416,"name":"address","nodeType":"ElementaryTypeName","src":"8862:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8861:9:69"},"scope":16127,"src":"8809:126:69","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":14436,"nodeType":"Block","src":"8986:26:69","statements":[{"expression":{"expression":{"id":14433,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8999:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14434,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9001:6:69","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"8999:8:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":14432,"id":14435,"nodeType":"Return","src":"8992:15:69"}]},"functionSelector":"c2fb26a6","id":14437,"implemented":true,"kind":"function","modifiers":[],"name":"domain","nameLocation":"8948:6:69","nodeType":"FunctionDefinition","parameters":{"id":14429,"nodeType":"ParameterList","parameters":[],"src":"8954:2:69"},"returnParameters":{"id":14432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14431,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14437,"src":"8978:6:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":14430,"name":"uint32","nodeType":"ElementaryTypeName","src":"8978:6:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"8977:8:69"},"scope":16127,"src":"8939:73:69","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":14445,"nodeType":"Block","src":"9063:25:69","statements":[{"expression":{"expression":{"id":14442,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9076:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14443,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9078:5:69","memberName":"nonce","nodeType":"MemberAccess","referencedDeclaration":29405,"src":"9076:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14441,"id":14444,"nodeType":"Return","src":"9069:14:69"}]},"functionSelector":"affed0e0","id":14446,"implemented":true,"kind":"function","modifiers":[],"name":"nonce","nameLocation":"9025:5:69","nodeType":"FunctionDefinition","parameters":{"id":14438,"nodeType":"ParameterList","parameters":[],"src":"9030:2:69"},"returnParameters":{"id":14441,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14440,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14446,"src":"9054:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14439,"name":"uint256","nodeType":"ElementaryTypeName","src":"9054:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9053:9:69"},"scope":16127,"src":"9016:72:69","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":14458,"nodeType":"Block","src":"9169:50:69","statements":[{"expression":{"baseExpression":{"expression":{"id":14453,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9182:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14454,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9184:18:69","memberName":"approvedSequencers","nodeType":"MemberAccess","referencedDeclaration":29531,"src":"9182:20:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":14456,"indexExpression":{"id":14455,"name":"_sequencer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14448,"src":"9203:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9182:32:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":14452,"id":14457,"nodeType":"Return","src":"9175:39:69"}]},"functionSelector":"159e041f","id":14459,"implemented":true,"kind":"function","modifiers":[],"name":"approvedSequencers","nameLocation":"9101:18:69","nodeType":"FunctionDefinition","parameters":{"id":14449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14448,"mutability":"mutable","name":"_sequencer","nameLocation":"9128:10:69","nodeType":"VariableDeclaration","scope":14459,"src":"9120:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14447,"name":"address","nodeType":"ElementaryTypeName","src":"9120:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9119:20:69"},"returnParameters":{"id":14452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14451,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14459,"src":"9163:4:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14450,"name":"bool","nodeType":"ElementaryTypeName","src":"9163:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9162:6:69"},"scope":16127,"src":"9092:127:69","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":14470,"nodeType":"Block","src":"9286:50:69","statements":[{"expression":{"arguments":[{"expression":{"id":14466,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9307:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14467,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9309:21:69","memberName":"xAppConnectionManager","nodeType":"MemberAccess","referencedDeclaration":29535,"src":"9307:23:69","typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"}],"id":14465,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9299:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14464,"name":"address","nodeType":"ElementaryTypeName","src":"9299:7:69","typeDescriptions":{}}},"id":14468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9299:32:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":14463,"id":14469,"nodeType":"Return","src":"9292:39:69"}]},"functionSelector":"3339df96","id":14471,"implemented":true,"kind":"function","modifiers":[],"name":"xAppConnectionManager","nameLocation":"9232:21:69","nodeType":"FunctionDefinition","parameters":{"id":14460,"nodeType":"ParameterList","parameters":[],"src":"9253:2:69"},"returnParameters":{"id":14463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14462,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14471,"src":"9277:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14461,"name":"address","nodeType":"ElementaryTypeName","src":"9277:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9276:9:69"},"scope":16127,"src":"9223:113:69","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":14511,"nodeType":"Block","src":"9590:282:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":14484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14479,"name":"_sequencer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14474,"src":"9600:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":14482,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9622:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":14481,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9614:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14480,"name":"address","nodeType":"ElementaryTypeName","src":"9614:7:69","typeDescriptions":{}}},"id":14483,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9614:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9600:24:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14488,"nodeType":"IfStatement","src":"9596:81:69","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14485,"name":"BridgeFacet__addSequencer_invalidSequencer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14204,"src":"9633:42:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14486,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9633:44:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14487,"nodeType":"RevertStatement","src":"9626:51:69"}},{"condition":{"baseExpression":{"expression":{"id":14489,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9688:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14490,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9690:18:69","memberName":"approvedSequencers","nodeType":"MemberAccess","referencedDeclaration":29531,"src":"9688:20:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":14492,"indexExpression":{"id":14491,"name":"_sequencer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14474,"src":"9709:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9688:32:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14496,"nodeType":"IfStatement","src":"9684:88:69","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14493,"name":"BridgeFacet__addSequencer_alreadyApproved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"9729:41:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9729:43:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14495,"nodeType":"RevertStatement","src":"9722:50:69"}},{"expression":{"id":14503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":14497,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9778:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14500,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9780:18:69","memberName":"approvedSequencers","nodeType":"MemberAccess","referencedDeclaration":29531,"src":"9778:20:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":14501,"indexExpression":{"id":14499,"name":"_sequencer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14474,"src":"9799:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9778:32:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":14502,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9813:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"9778:39:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14504,"nodeType":"ExpressionStatement","src":"9778:39:69"},{"eventCall":{"arguments":[{"id":14506,"name":"_sequencer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14474,"src":"9844:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14507,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9856:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9860:6:69","memberName":"sender","nodeType":"MemberAccess","src":"9856:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":14505,"name":"SequencerAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14353,"src":"9829:14:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":14509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9829:38:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14510,"nodeType":"EmitStatement","src":"9824:43:69"}]},"documentation":{"id":14472,"nodeType":"StructuredDocumentation","src":"9390:129:69","text":" @notice Used to add an approved sequencer to the allowlist.\n @param _sequencer - The sequencer address to add."},"functionSelector":"8a336231","id":14512,"implemented":true,"kind":"function","modifiers":[{"id":14477,"kind":"modifierInvocation","modifierName":{"id":14476,"name":"onlyOwnerOrAdmin","nameLocations":["9573:16:69"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"9573:16:69"},"nodeType":"ModifierInvocation","src":"9573:16:69"}],"name":"addSequencer","nameLocation":"9531:12:69","nodeType":"FunctionDefinition","parameters":{"id":14475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14474,"mutability":"mutable","name":"_sequencer","nameLocation":"9552:10:69","nodeType":"VariableDeclaration","scope":14512,"src":"9544:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14473,"name":"address","nodeType":"ElementaryTypeName","src":"9544:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9543:20:69"},"returnParameters":{"id":14478,"nodeType":"ParameterList","parameters":[],"src":"9590:0:69"},"scope":16127,"src":"9522:350:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":14541,"nodeType":"Block","src":"10087:196:69","statements":[{"condition":{"id":14524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10097:33:69","subExpression":{"baseExpression":{"expression":{"id":14520,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10098:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14521,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10100:18:69","memberName":"approvedSequencers","nodeType":"MemberAccess","referencedDeclaration":29531,"src":"10098:20:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":14523,"indexExpression":{"id":14522,"name":"_sequencer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14515,"src":"10119:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10098:32:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14528,"nodeType":"IfStatement","src":"10093:88:69","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14525,"name":"BridgeFacet__removeSequencer_notApproved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14208,"src":"10139:40:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10139:42:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14527,"nodeType":"RevertStatement","src":"10132:49:69"}},{"expression":{"id":14533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"10187:39:69","subExpression":{"baseExpression":{"expression":{"id":14529,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10194:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14530,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10196:18:69","memberName":"approvedSequencers","nodeType":"MemberAccess","referencedDeclaration":29531,"src":"10194:20:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":14532,"indexExpression":{"id":14531,"name":"_sequencer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14515,"src":"10215:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10194:32:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14534,"nodeType":"ExpressionStatement","src":"10187:39:69"},{"eventCall":{"arguments":[{"id":14536,"name":"_sequencer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14515,"src":"10255:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14537,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10267:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10271:6:69","memberName":"sender","nodeType":"MemberAccess","src":"10267:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":14535,"name":"SequencerRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14360,"src":"10238:16:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":14539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10238:40:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14540,"nodeType":"EmitStatement","src":"10233:45:69"}]},"documentation":{"id":14513,"nodeType":"StructuredDocumentation","src":"9876:137:69","text":" @notice Used to remove an approved sequencer from the allowlist.\n @param _sequencer - The sequencer address to remove."},"functionSelector":"6989ca7c","id":14542,"implemented":true,"kind":"function","modifiers":[{"id":14518,"kind":"modifierInvocation","modifierName":{"id":14517,"name":"onlyOwnerOrAdmin","nameLocations":["10070:16:69"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"10070:16:69"},"nodeType":"ModifierInvocation","src":"10070:16:69"}],"name":"removeSequencer","nameLocation":"10025:15:69","nodeType":"FunctionDefinition","parameters":{"id":14516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14515,"mutability":"mutable","name":"_sequencer","nameLocation":"10049:10:69","nodeType":"VariableDeclaration","scope":14542,"src":"10041:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14514,"name":"address","nodeType":"ElementaryTypeName","src":"10041:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10040:20:69"},"returnParameters":{"id":14519,"nodeType":"ParameterList","parameters":[],"src":"10087:0:69"},"scope":16127,"src":"10016:267:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":14580,"nodeType":"Block","src":"10553:312:69","statements":[{"assignments":[14552],"declarations":[{"constant":false,"id":14552,"mutability":"mutable","name":"manager","nameLocation":"10577:7:69","nodeType":"VariableDeclaration","scope":14580,"src":"10559:25:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"},"typeName":{"id":14551,"nodeType":"UserDefinedTypeName","pathNode":{"id":14550,"name":"IConnectorManager","nameLocations":["10559:17:69"],"nodeType":"IdentifierPath","referencedDeclaration":47805,"src":"10559:17:69"},"referencedDeclaration":47805,"src":"10559:17:69","typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"}},"visibility":"internal"}],"id":14556,"initialValue":{"arguments":[{"id":14554,"name":"_xAppConnectionManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14545,"src":"10605:22:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14553,"name":"IConnectorManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47805,"src":"10587:17:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IConnectorManager_$47805_$","typeString":"type(contract IConnectorManager)"}},"id":14555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10587:41:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"}},"nodeType":"VariableDeclarationStatement","src":"10559:69:69"},{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":14562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":14557,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14552,"src":"10638:7:69","typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"}},"id":14558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10646:11:69","memberName":"localDomain","nodeType":"MemberAccess","referencedDeclaration":47804,"src":"10638:19:69","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint32_$","typeString":"function () view external returns (uint32)"}},"id":14559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10638:21:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":14560,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10663:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14561,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10665:6:69","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"10663:8:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"10638:33:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14567,"nodeType":"IfStatement","src":"10634:117:69","trueBody":{"id":14566,"nodeType":"Block","src":"10673:78:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14563,"name":"BridgeFacet__setXAppConnectionManager_domainsDontMatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14210,"src":"10688:54:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10688:56:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14565,"nodeType":"RevertStatement","src":"10681:63:69"}]}},{"eventCall":{"arguments":[{"id":14569,"name":"_xAppConnectionManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14545,"src":"10786:22:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14570,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10810:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10814:6:69","memberName":"sender","nodeType":"MemberAccess","src":"10810:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":14568,"name":"XAppConnectionManagerSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14367,"src":"10761:24:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":14572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10761:60:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14573,"nodeType":"EmitStatement","src":"10756:65:69"},{"expression":{"id":14578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14574,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10827:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14576,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10829:21:69","memberName":"xAppConnectionManager","nodeType":"MemberAccess","referencedDeclaration":29535,"src":"10827:23:69","typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14577,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14552,"src":"10853:7:69","typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"}},"src":"10827:33:69","typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"}},"id":14579,"nodeType":"ExpressionStatement","src":"10827:33:69"}]},"documentation":{"id":14543,"nodeType":"StructuredDocumentation","src":"10287:171:69","text":" @notice Modify the contract the xApp uses to validate Replica contracts\n @param _xAppConnectionManager The address of the xAppConnectionManager contract"},"functionSelector":"41bdc8b5","id":14581,"implemented":true,"kind":"function","modifiers":[{"id":14548,"kind":"modifierInvocation","modifierName":{"id":14547,"name":"onlyOwnerOrAdmin","nameLocations":["10536:16:69"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"10536:16:69"},"nodeType":"ModifierInvocation","src":"10536:16:69"}],"name":"setXAppConnectionManager","nameLocation":"10470:24:69","nodeType":"FunctionDefinition","parameters":{"id":14546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14545,"mutability":"mutable","name":"_xAppConnectionManager","nameLocation":"10503:22:69","nodeType":"VariableDeclaration","scope":14581,"src":"10495:30:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14544,"name":"address","nodeType":"ElementaryTypeName","src":"10495:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10494:32:69"},"returnParameters":{"id":14549,"nodeType":"ParameterList","parameters":[],"src":"10553:0:69"},"scope":16127,"src":"10461:404:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":14632,"nodeType":"Block","src":"11174:397:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":14596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14591,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14586,"src":"11184:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"","id":14594,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11203:2:69","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":14593,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11195:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":14592,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11195:7:69","typeDescriptions":{}}},"id":14595,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11195:11:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11184:22:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14600,"nodeType":"IfStatement","src":"11180:73:69","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14597,"name":"BridgeFacet__addRemote_invalidRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14198,"src":"11215:36:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11215:38:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14599,"nodeType":"RevertStatement","src":"11208:45:69"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":14603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14601,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14584,"src":"11355:7:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":14602,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11366:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11355:12:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":14607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14604,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14584,"src":"11371:7:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":14605,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"11382:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14606,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11384:6:69","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"11382:8:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"11371:19:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11355:35:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14613,"nodeType":"IfStatement","src":"11351:101:69","trueBody":{"id":14612,"nodeType":"Block","src":"11392:60:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14609,"name":"BridgeFacet__addRemote_invalidDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14200,"src":"11407:36:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11407:38:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14611,"nodeType":"RevertStatement","src":"11400:45:69"}]}},{"expression":{"id":14620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":14614,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"11458:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14617,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11460:7:69","memberName":"remotes","nodeType":"MemberAccess","referencedDeclaration":29468,"src":"11458:9:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint32_$_t_bytes32_$","typeString":"mapping(uint32 => bytes32)"}},"id":14618,"indexExpression":{"id":14616,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14584,"src":"11468:7:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11458:18:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14619,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14586,"src":"11479:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11458:28:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":14621,"nodeType":"ExpressionStatement","src":"11458:28:69"},{"eventCall":{"arguments":[{"id":14623,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14584,"src":"11509:7:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"arguments":[{"id":14626,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14586,"src":"11545:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":14624,"name":"TypeCasts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50188,"src":"11518:9:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TypeCasts_$50188_$","typeString":"type(library TypeCasts)"}},"id":14625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11528:16:69","memberName":"bytes32ToAddress","nodeType":"MemberAccess","referencedDeclaration":50187,"src":"11518:26:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) pure returns (address)"}},"id":14627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11518:35:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14628,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11555:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11559:6:69","memberName":"sender","nodeType":"MemberAccess","src":"11555:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":14622,"name":"RemoteAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14346,"src":"11497:11:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint32_$_t_address_$_t_address_$returns$__$","typeString":"function (uint32,address,address)"}},"id":14630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11497:69:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14631,"nodeType":"EmitStatement","src":"11492:74:69"}]},"documentation":{"id":14582,"nodeType":"StructuredDocumentation","src":"10869:215:69","text":" @notice Register the address of a Router contract for the same xApp on a remote chain\n @param _domain The domain of the remote xApp Router\n @param _router The address of the remote xApp Router"},"functionSelector":"b49c53a7","id":14633,"implemented":true,"kind":"function","modifiers":[{"id":14589,"kind":"modifierInvocation","modifierName":{"id":14588,"name":"onlyOwnerOrAdmin","nameLocations":["11157:16:69"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"11157:16:69"},"nodeType":"ModifierInvocation","src":"11157:16:69"}],"name":"enrollRemoteRouter","nameLocation":"11096:18:69","nodeType":"FunctionDefinition","parameters":{"id":14587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14584,"mutability":"mutable","name":"_domain","nameLocation":"11122:7:69","nodeType":"VariableDeclaration","scope":14633,"src":"11115:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":14583,"name":"uint32","nodeType":"ElementaryTypeName","src":"11115:6:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":14586,"mutability":"mutable","name":"_router","nameLocation":"11139:7:69","nodeType":"VariableDeclaration","scope":14633,"src":"11131:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14585,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11131:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11114:33:69"},"returnParameters":{"id":14590,"nodeType":"ParameterList","parameters":[],"src":"11174:0:69"},"scope":16127,"src":"11087:484:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":14684,"nodeType":"Block","src":"11865:898:69","statements":[{"assignments":[14656],"declarations":[{"constant":false,"id":14656,"mutability":"mutable","name":"params","nameLocation":"12124:6:69","nodeType":"VariableDeclaration","scope":14684,"src":"12104:26:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo"},"typeName":{"id":14655,"nodeType":"UserDefinedTypeName","pathNode":{"id":14654,"name":"TransferInfo","nameLocations":["12104:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":29351,"src":"12104:12:69"},"referencedDeclaration":29351,"src":"12104:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_storage_ptr","typeString":"struct TransferInfo"}},"visibility":"internal"}],"id":14677,"initialValue":{"arguments":[{"id":14658,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14637,"src":"12158:3:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14659,"name":"_callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14647,"src":"12179:9:69","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":14660,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"12210:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14661,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12212:6:69","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"12210:8:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":14662,"name":"_destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14635,"src":"12245:12:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":14663,"name":"_delegate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14641,"src":"12275:9:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"66616c7365","id":14664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12466:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":14665,"name":"_slippage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14645,"src":"12489:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14666,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12520:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12524:6:69","memberName":"sender","nodeType":"MemberAccess","src":"12520:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":14668,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12605:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":14669,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12631:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":14670,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12652:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":14671,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12675:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"hexValue":"30","id":14674,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12705:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":14673,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12697:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":14672,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12697:7:69","typeDescriptions":{}}},"id":14675,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12697:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":14657,"name":"TransferInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29351,"src":"12133:12:69","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_TransferInfo_$29351_storage_ptr_$","typeString":"type(struct TransferInfo storage pointer)"}},"id":14676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["12154:2:69","12169:8:69","12196:12:69","12226:17:69","12265:8:69","12452:12:69","12479:8:69","12506:12:69","12598:5:69","12614:15:69","12640:10:69","12661:12:69","12684:11:69"],"names":["to","callData","originDomain","destinationDomain","delegate","receiveLocal","slippage","originSender","nonce","canonicalDomain","bridgedAmt","normalizedIn","canonicalId"],"nodeType":"FunctionCall","src":"12133:581:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},"nodeType":"VariableDeclarationStatement","src":"12104:610:69"},{"expression":{"arguments":[{"id":14679,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14656,"src":"12734:6:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},{"id":14680,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14639,"src":"12742:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14681,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14643,"src":"12750:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14678,"name":"_xcall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15255,"src":"12727:6:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_TransferInfo_$29351_memory_ptr_$_t_address_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (struct TransferInfo memory,address,uint256) returns (bytes32)"}},"id":14682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12727:31:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":14653,"id":14683,"nodeType":"Return","src":"12720:38:69"}]},"functionSelector":"8aac16ba","id":14685,"implemented":true,"kind":"function","modifiers":[{"id":14650,"kind":"modifierInvocation","modifierName":{"id":14649,"name":"nonXCallReentrant","nameLocations":["11829:17:69"],"nodeType":"IdentifierPath","referencedDeclaration":13801,"src":"11829:17:69"},"nodeType":"ModifierInvocation","src":"11829:17:69"}],"name":"xcall","nameLocation":"11643:5:69","nodeType":"FunctionDefinition","parameters":{"id":14648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14635,"mutability":"mutable","name":"_destination","nameLocation":"11661:12:69","nodeType":"VariableDeclaration","scope":14685,"src":"11654:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":14634,"name":"uint32","nodeType":"ElementaryTypeName","src":"11654:6:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":14637,"mutability":"mutable","name":"_to","nameLocation":"11687:3:69","nodeType":"VariableDeclaration","scope":14685,"src":"11679:11:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14636,"name":"address","nodeType":"ElementaryTypeName","src":"11679:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14639,"mutability":"mutable","name":"_asset","nameLocation":"11704:6:69","nodeType":"VariableDeclaration","scope":14685,"src":"11696:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14638,"name":"address","nodeType":"ElementaryTypeName","src":"11696:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14641,"mutability":"mutable","name":"_delegate","nameLocation":"11724:9:69","nodeType":"VariableDeclaration","scope":14685,"src":"11716:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14640,"name":"address","nodeType":"ElementaryTypeName","src":"11716:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14643,"mutability":"mutable","name":"_amount","nameLocation":"11747:7:69","nodeType":"VariableDeclaration","scope":14685,"src":"11739:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14642,"name":"uint256","nodeType":"ElementaryTypeName","src":"11739:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14645,"mutability":"mutable","name":"_slippage","nameLocation":"11768:9:69","nodeType":"VariableDeclaration","scope":14685,"src":"11760:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14644,"name":"uint256","nodeType":"ElementaryTypeName","src":"11760:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14647,"mutability":"mutable","name":"_callData","nameLocation":"11798:9:69","nodeType":"VariableDeclaration","scope":14685,"src":"11783:24:69","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":14646,"name":"bytes","nodeType":"ElementaryTypeName","src":"11783:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11648:163:69"},"returnParameters":{"id":14653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14652,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14685,"src":"11856:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14651,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11856:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11855:9:69"},"scope":16127,"src":"11634:1129:69","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":14736,"nodeType":"Block","src":"13007:891:69","statements":[{"assignments":[14708],"declarations":[{"constant":false,"id":14708,"mutability":"mutable","name":"params","nameLocation":"13266:6:69","nodeType":"VariableDeclaration","scope":14736,"src":"13246:26:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo"},"typeName":{"id":14707,"nodeType":"UserDefinedTypeName","pathNode":{"id":14706,"name":"TransferInfo","nameLocations":["13246:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":29351,"src":"13246:12:69"},"referencedDeclaration":29351,"src":"13246:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_storage_ptr","typeString":"struct TransferInfo"}},"visibility":"internal"}],"id":14729,"initialValue":{"arguments":[{"id":14710,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14689,"src":"13300:3:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14711,"name":"_callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14699,"src":"13321:9:69","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":14712,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"13352:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14713,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13354:6:69","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"13352:8:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":14714,"name":"_destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14687,"src":"13387:12:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":14715,"name":"_delegate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14693,"src":"13417:9:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"74727565","id":14716,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"13602:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":14717,"name":"_slippage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14697,"src":"13624:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14718,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13655:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13659:6:69","memberName":"sender","nodeType":"MemberAccess","src":"13655:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":14720,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13740:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":14721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13766:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":14722,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13787:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":14723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13810:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"hexValue":"30","id":14726,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13840:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":14725,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13832:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":14724,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13832:7:69","typeDescriptions":{}}},"id":14727,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13832:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":14709,"name":"TransferInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29351,"src":"13275:12:69","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_TransferInfo_$29351_storage_ptr_$","typeString":"type(struct TransferInfo storage pointer)"}},"id":14728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["13296:2:69","13311:8:69","13338:12:69","13368:17:69","13407:8:69","13588:12:69","13614:8:69","13641:12:69","13733:5:69","13749:15:69","13775:10:69","13796:12:69","13819:11:69"],"names":["to","callData","originDomain","destinationDomain","delegate","receiveLocal","slippage","originSender","nonce","canonicalDomain","bridgedAmt","normalizedIn","canonicalId"],"nodeType":"FunctionCall","src":"13275:574:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},"nodeType":"VariableDeclarationStatement","src":"13246:603:69"},{"expression":{"arguments":[{"id":14731,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14708,"src":"13869:6:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},{"id":14732,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14691,"src":"13877:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14733,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14695,"src":"13885:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14730,"name":"_xcall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15255,"src":"13862:6:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_TransferInfo_$29351_memory_ptr_$_t_address_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (struct TransferInfo memory,address,uint256) returns (bytes32)"}},"id":14734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13862:31:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":14705,"id":14735,"nodeType":"Return","src":"13855:38:69"}]},"functionSelector":"91f5de79","id":14737,"implemented":true,"kind":"function","modifiers":[{"id":14702,"kind":"modifierInvocation","modifierName":{"id":14701,"name":"nonXCallReentrant","nameLocations":["12971:17:69"],"nodeType":"IdentifierPath","referencedDeclaration":13801,"src":"12971:17:69"},"nodeType":"ModifierInvocation","src":"12971:17:69"}],"name":"xcallIntoLocal","nameLocation":"12776:14:69","nodeType":"FunctionDefinition","parameters":{"id":14700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14687,"mutability":"mutable","name":"_destination","nameLocation":"12803:12:69","nodeType":"VariableDeclaration","scope":14737,"src":"12796:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":14686,"name":"uint32","nodeType":"ElementaryTypeName","src":"12796:6:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":14689,"mutability":"mutable","name":"_to","nameLocation":"12829:3:69","nodeType":"VariableDeclaration","scope":14737,"src":"12821:11:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14688,"name":"address","nodeType":"ElementaryTypeName","src":"12821:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14691,"mutability":"mutable","name":"_asset","nameLocation":"12846:6:69","nodeType":"VariableDeclaration","scope":14737,"src":"12838:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14690,"name":"address","nodeType":"ElementaryTypeName","src":"12838:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14693,"mutability":"mutable","name":"_delegate","nameLocation":"12866:9:69","nodeType":"VariableDeclaration","scope":14737,"src":"12858:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14692,"name":"address","nodeType":"ElementaryTypeName","src":"12858:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14695,"mutability":"mutable","name":"_amount","nameLocation":"12889:7:69","nodeType":"VariableDeclaration","scope":14737,"src":"12881:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14694,"name":"uint256","nodeType":"ElementaryTypeName","src":"12881:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14697,"mutability":"mutable","name":"_slippage","nameLocation":"12910:9:69","nodeType":"VariableDeclaration","scope":14737,"src":"12902:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14696,"name":"uint256","nodeType":"ElementaryTypeName","src":"12902:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14699,"mutability":"mutable","name":"_callData","nameLocation":"12940:9:69","nodeType":"VariableDeclaration","scope":14737,"src":"12925:24:69","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":14698,"name":"bytes","nodeType":"ElementaryTypeName","src":"12925:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12790:163:69"},"returnParameters":{"id":14705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14704,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14737,"src":"12998:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14703,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12998:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"12997:9:69"},"scope":16127,"src":"12767:1131:69","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":14832,"nodeType":"Block","src":"14780:1184:69","statements":[{"assignments":[14751,14754],"declarations":[{"constant":false,"id":14751,"mutability":"mutable","name":"transferId","nameLocation":"14795:10:69","nodeType":"VariableDeclaration","scope":14832,"src":"14787:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14750,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14787:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":14754,"mutability":"mutable","name":"status","nameLocation":"14833:6:69","nodeType":"VariableDeclaration","scope":14832,"src":"14807:32:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"},"typeName":{"id":14753,"nodeType":"UserDefinedTypeName","pathNode":{"id":14752,"name":"DestinationTransferStatus","nameLocations":["14807:25:69"],"nodeType":"IdentifierPath","referencedDeclaration":29324,"src":"14807:25:69"},"referencedDeclaration":29324,"src":"14807:25:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"visibility":"internal"}],"id":14758,"initialValue":{"arguments":[{"id":14756,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14741,"src":"14864:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}],"id":14755,"name":"_executeSanityChecks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15460,"src":"14843:20:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ExecuteArgs_$29365_calldata_ptr_$returns$_t_bytes32_$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"function (struct ExecuteArgs calldata) view returns (bytes32,enum DestinationTransferStatus)"}},"id":14757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14843:27:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"tuple(bytes32,enum DestinationTransferStatus)"}},"nodeType":"VariableDeclarationStatement","src":"14786:84:69"},{"assignments":[14761],"declarations":[{"constant":false,"id":14761,"mutability":"mutable","name":"updated","nameLocation":"14903:7:69","nodeType":"VariableDeclaration","scope":14832,"src":"14877:33:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"},"typeName":{"id":14760,"nodeType":"UserDefinedTypeName","pathNode":{"id":14759,"name":"DestinationTransferStatus","nameLocations":["14877:25:69"],"nodeType":"IdentifierPath","referencedDeclaration":29324,"src":"14877:25:69"},"referencedDeclaration":29324,"src":"14877:25:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"visibility":"internal"}],"id":14771,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"},"id":14765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14762,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14754,"src":"14913:6:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":14763,"name":"DestinationTransferStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29324,"src":"14923:25:69","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"type(enum DestinationTransferStatus)"}},"id":14764,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14949:10:69","memberName":"Reconciled","nodeType":"MemberAccess","referencedDeclaration":29321,"src":"14923:36:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"src":"14913:46:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":14768,"name":"DestinationTransferStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29324,"src":"15012:25:69","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"type(enum DestinationTransferStatus)"}},"id":14769,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15038:8:69","memberName":"Executed","nodeType":"MemberAccess","referencedDeclaration":29322,"src":"15012:34:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"id":14770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"14913:133:69","trueExpression":{"expression":{"id":14766,"name":"DestinationTransferStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29324,"src":"14968:25:69","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"type(enum DestinationTransferStatus)"}},"id":14767,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14994:9:69","memberName":"Completed","nodeType":"MemberAccess","referencedDeclaration":29323,"src":"14968:35:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"nodeType":"VariableDeclarationStatement","src":"14877:169:69"},{"expression":{"id":14778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":14772,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"15053:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14775,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15055:14:69","memberName":"transferStatus","nodeType":"MemberAccess","referencedDeclaration":29432,"src":"15053:16:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"mapping(bytes32 => enum DestinationTransferStatus)"}},"id":14776,"indexExpression":{"id":14774,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14751,"src":"15070:10:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15053:28:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14777,"name":"updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14761,"src":"15084:7:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"src":"15053:38:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"id":14779,"nodeType":"ExpressionStatement","src":"15053:38:69"},{"assignments":[14781,14783,14785],"declarations":[{"constant":false,"id":14781,"mutability":"mutable","name":"amountOut","nameLocation":"15340:9:69","nodeType":"VariableDeclaration","scope":14832,"src":"15332:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14780,"name":"uint256","nodeType":"ElementaryTypeName","src":"15332:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14783,"mutability":"mutable","name":"asset","nameLocation":"15359:5:69","nodeType":"VariableDeclaration","scope":14832,"src":"15351:13:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14782,"name":"address","nodeType":"ElementaryTypeName","src":"15351:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14785,"mutability":"mutable","name":"local","nameLocation":"15374:5:69","nodeType":"VariableDeclaration","scope":14832,"src":"15366:13:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14784,"name":"address","nodeType":"ElementaryTypeName","src":"15366:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":14803,"initialValue":{"arguments":[{"id":14787,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14751,"src":"15414:10:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"expression":{"expression":{"id":14790,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14741,"src":"15466:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":14791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15472:6:69","memberName":"params","nodeType":"MemberAccess","referencedDeclaration":29354,"src":"15466:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":14792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15479:11:69","memberName":"canonicalId","nodeType":"MemberAccess","referencedDeclaration":29350,"src":"15466:24:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":14793,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14741,"src":"15492:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":14794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15498:6:69","memberName":"params","nodeType":"MemberAccess","referencedDeclaration":29354,"src":"15492:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":14795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15505:15:69","memberName":"canonicalDomain","nodeType":"MemberAccess","referencedDeclaration":29330,"src":"15492:28:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":14788,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"15432:10:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":14789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15443:22:69","memberName":"calculateCanonicalHash","nodeType":"MemberAccess","referencedDeclaration":28598,"src":"15432:33:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint32) pure returns (bytes32)"}},"id":14796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15432:89:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"commonType":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"},"id":14800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14797,"name":"updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14761,"src":"15529:7:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":14798,"name":"DestinationTransferStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29324,"src":"15540:25:69","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"type(enum DestinationTransferStatus)"}},"id":14799,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15566:9:69","memberName":"Completed","nodeType":"MemberAccess","referencedDeclaration":29323,"src":"15540:35:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"src":"15529:46:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":14801,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14741,"src":"15583:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}],"id":14786,"name":"_handleExecuteLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15793,"src":"15383:23:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_bool_$_t_struct$_ExecuteArgs_$29365_calldata_ptr_$returns$_t_uint256_$_t_address_$_t_address_$","typeString":"function (bytes32,bytes32,bool,struct ExecuteArgs calldata) returns (uint256,address,address)"}},"id":14802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15383:211:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$_t_address_$","typeString":"tuple(uint256,address,address)"}},"nodeType":"VariableDeclarationStatement","src":"15331:263:69"},{"assignments":[14805],"declarations":[{"constant":false,"id":14805,"mutability":"mutable","name":"amount","nameLocation":"15671:6:69","nodeType":"VariableDeclaration","scope":14832,"src":"15663:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14804,"name":"uint256","nodeType":"ElementaryTypeName","src":"15663:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14816,"initialValue":{"arguments":[{"id":14807,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14741,"src":"15713:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},{"id":14808,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14781,"src":"15726:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14809,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14783,"src":"15743:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14810,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14751,"src":"15756:10:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"commonType":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"},"id":14814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14811,"name":"updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14761,"src":"15774:7:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":14812,"name":"DestinationTransferStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29324,"src":"15785:25:69","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"type(enum DestinationTransferStatus)"}},"id":14813,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15811:9:69","memberName":"Completed","nodeType":"MemberAccess","referencedDeclaration":29323,"src":"15785:35:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"src":"15774:46:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":14806,"name":"_handleExecuteTransaction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15832,"src":"15680:25:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ExecuteArgs_$29365_calldata_ptr_$_t_uint256_$_t_address_$_t_bytes32_$_t_bool_$returns$_t_uint256_$","typeString":"function (struct ExecuteArgs calldata,uint256,address,bytes32,bool) returns (uint256)"}},"id":14815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15680:146:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15663:163:69"},{"eventCall":{"arguments":[{"id":14818,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14751,"src":"15866:10:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":14819,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14741,"src":"15878:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":14820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15884:6:69","memberName":"params","nodeType":"MemberAccess","referencedDeclaration":29354,"src":"15878:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":14821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15891:2:69","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":29332,"src":"15878:15:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14822,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14783,"src":"15895:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14823,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14741,"src":"15902:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},{"id":14824,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14785,"src":"15909:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14825,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"15916:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14826,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"15924:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15928:6:69","memberName":"sender","nodeType":"MemberAccess","src":"15924:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":14817,"name":"Executed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14305,"src":"15857:8:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_struct$_ExecuteArgs_$29365_memory_ptr_$_t_address_$_t_uint256_$_t_address_$returns$__$","typeString":"function (bytes32,address,address,struct ExecuteArgs memory,address,uint256,address)"}},"id":14828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15857:78:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14829,"nodeType":"EmitStatement","src":"15852:83:69"},{"expression":{"id":14830,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14751,"src":"15949:10:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":14749,"id":14831,"nodeType":"Return","src":"15942:17:69"}]},"documentation":{"id":14738,"nodeType":"StructuredDocumentation","src":"13902:776:69","text":" @notice Called on a destination domain to disburse correct assets to end recipient and execute any included\n calldata.\n @dev Can be called before or after `handle` [reconcile] is called (regarding the same transfer), depending on\n whether the fast liquidity route (i.e. funds provided by routers) is being used for this transfer. As a result,\n executed calldata (including properties like `originSender`) may or may not be verified depending on whether the\n reconcile has been completed (i.e. the optimistic confirmation period has elapsed).\n @param _args - ExecuteArgs arguments.\n @return bytes32 - The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for\n reconciliation to occur."},"functionSelector":"63e3e7d2","id":14833,"implemented":true,"kind":"function","modifiers":[{"id":14744,"kind":"modifierInvocation","modifierName":{"id":14743,"name":"nonReentrant","nameLocations":["14735:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":13774,"src":"14735:12:69"},"nodeType":"ModifierInvocation","src":"14735:12:69"},{"id":14746,"kind":"modifierInvocation","modifierName":{"id":14745,"name":"whenNotPaused","nameLocations":["14748:13:69"],"nodeType":"IdentifierPath","referencedDeclaration":13913,"src":"14748:13:69"},"nodeType":"ModifierInvocation","src":"14748:13:69"}],"name":"execute","nameLocation":"14690:7:69","nodeType":"FunctionDefinition","parameters":{"id":14742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14741,"mutability":"mutable","name":"_args","nameLocation":"14719:5:69","nodeType":"VariableDeclaration","scope":14833,"src":"14698:26:69","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs"},"typeName":{"id":14740,"nodeType":"UserDefinedTypeName","pathNode":{"id":14739,"name":"ExecuteArgs","nameLocations":["14698:11:69"],"nodeType":"IdentifierPath","referencedDeclaration":29365,"src":"14698:11:69"},"referencedDeclaration":29365,"src":"14698:11:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_storage_ptr","typeString":"struct ExecuteArgs"}},"visibility":"internal"}],"src":"14697:28:69"},"returnParameters":{"id":14749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14748,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14833,"src":"14771:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14747,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14771:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14770:9:69"},"scope":16127,"src":"14681:1283:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":14855,"nodeType":"Block","src":"16253:109:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14843,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16263:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16267:5:69","memberName":"value","nodeType":"MemberAccess","src":"16263:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":14845,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16276:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16263:14:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14850,"nodeType":"IfStatement","src":"16259:66:69","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14847,"name":"BridgeFacet__bumpTransfer_valueIsZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14248,"src":"16286:37:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16286:39:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14849,"nodeType":"RevertStatement","src":"16279:46:69"}},{"expression":{"arguments":[{"id":14852,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14836,"src":"16345:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":14851,"name":"_bumpTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14896,"src":"16331:13:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":14853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16331:26:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14854,"nodeType":"ExpressionStatement","src":"16331:26:69"}]},"documentation":{"id":14834,"nodeType":"StructuredDocumentation","src":"15968:195:69","text":" @notice Anyone can call this function on the origin domain to increase the relayer fee for a transfer.\n @param _transferId - The unique identifier of the crosschain transaction"},"functionSelector":"2424401f","id":14856,"implemented":true,"kind":"function","modifiers":[{"id":14839,"kind":"modifierInvocation","modifierName":{"id":14838,"name":"nonReentrant","nameLocations":["16226:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":13774,"src":"16226:12:69"},"nodeType":"ModifierInvocation","src":"16226:12:69"},{"id":14841,"kind":"modifierInvocation","modifierName":{"id":14840,"name":"whenNotPaused","nameLocations":["16239:13:69"],"nodeType":"IdentifierPath","referencedDeclaration":13913,"src":"16239:13:69"},"nodeType":"ModifierInvocation","src":"16239:13:69"}],"name":"bumpTransfer","nameLocation":"16175:12:69","nodeType":"FunctionDefinition","parameters":{"id":14837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14836,"mutability":"mutable","name":"_transferId","nameLocation":"16196:11:69","nodeType":"VariableDeclaration","scope":14856,"src":"16188:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14835,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16188:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16187:21:69"},"returnParameters":{"id":14842,"nodeType":"ParameterList","parameters":[],"src":"16253:0:69"},"scope":16127,"src":"16166:196:69","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":14895,"nodeType":"Block","src":"16419:271:69","statements":[{"assignments":[14862],"declarations":[{"constant":false,"id":14862,"mutability":"mutable","name":"relayerVault","nameLocation":"16433:12:69","nodeType":"VariableDeclaration","scope":14895,"src":"16425:20:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14861,"name":"address","nodeType":"ElementaryTypeName","src":"16425:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":14865,"initialValue":{"expression":{"id":14863,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"16448:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14864,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16450:15:69","memberName":"relayerFeeVault","nodeType":"MemberAccess","referencedDeclaration":29402,"src":"16448:17:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16425:40:69"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":14871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14866,"name":"relayerVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14862,"src":"16475:12:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":14869,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16499:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":14868,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16491:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14867,"name":"address","nodeType":"ElementaryTypeName","src":"16491:7:69","typeDescriptions":{}}},"id":14870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16491:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16475:26:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14875,"nodeType":"IfStatement","src":"16471:81:69","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14872,"name":"BridgeFacet__bumpTransfer_noRelayerVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14250,"src":"16510:40:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14873,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16510:42:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14874,"nodeType":"RevertStatement","src":"16503:49:69"}},{"expression":{"arguments":[{"arguments":[{"id":14881,"name":"relayerVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14862,"src":"16584:12:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14880,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16576:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":14879,"name":"address","nodeType":"ElementaryTypeName","src":"16576:8:69","stateMutability":"payable","typeDescriptions":{}}},"id":14882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16576:21:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"expression":{"id":14883,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16599:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16603:5:69","memberName":"value","nodeType":"MemberAccess","src":"16599:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14876,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"16558:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11484_$","typeString":"type(library Address)"}},"id":14878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16566:9:69","memberName":"sendValue","nodeType":"MemberAccess","referencedDeclaration":11206,"src":"16558:17:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$","typeString":"function (address payable,uint256)"}},"id":14885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16558:51:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14886,"nodeType":"ExpressionStatement","src":"16558:51:69"},{"eventCall":{"arguments":[{"id":14888,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14858,"src":"16650:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":14889,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16663:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16667:5:69","memberName":"value","nodeType":"MemberAccess","src":"16663:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14891,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16674:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16678:6:69","memberName":"sender","nodeType":"MemberAccess","src":"16674:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":14887,"name":"TransferRelayerFeesIncreased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14314,"src":"16621:28:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_address_$returns$__$","typeString":"function (bytes32,uint256,address)"}},"id":14893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16621:64:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14894,"nodeType":"EmitStatement","src":"16616:69:69"}]},"id":14896,"implemented":true,"kind":"function","modifiers":[],"name":"_bumpTransfer","nameLocation":"16375:13:69","nodeType":"FunctionDefinition","parameters":{"id":14859,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14858,"mutability":"mutable","name":"_transferId","nameLocation":"16397:11:69","nodeType":"VariableDeclaration","scope":14896,"src":"16389:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14857,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16389:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16388:21:69"},"returnParameters":{"id":14860,"nodeType":"ParameterList","parameters":[],"src":"16419:0:69"},"scope":16127,"src":"16366:324:69","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":14946,"nodeType":"Block","src":"17050:540:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14908,"name":"_slippage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14902,"src":"17089:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":14909,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"17101:9:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":14910,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17111:19:69","memberName":"BPS_FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29220,"src":"17101:29:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17089:41:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14916,"nodeType":"IfStatement","src":"17085:119:69","trueBody":{"id":14915,"nodeType":"Block","src":"17132:72:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14912,"name":"BridgeFacet__forceUpdateSlippage_invalidSlippage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14252,"src":"17147:48:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17147:50:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14914,"nodeType":"RevertStatement","src":"17140:57:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":14921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14917,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14900,"src":"17265:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":14918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17273:17:69","memberName":"destinationDomain","nodeType":"MemberAccess","referencedDeclaration":29328,"src":"17265:25:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":14919,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"17294:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14920,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17296:6:69","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"17294:8:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"17265:37:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14926,"nodeType":"IfStatement","src":"17261:114:69","trueBody":{"id":14925,"nodeType":"Block","src":"17304:71:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14922,"name":"BridgeFacet__forceUpdateSlippage_notDestination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14254,"src":"17319:47:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14923,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17319:49:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14924,"nodeType":"RevertStatement","src":"17312:56:69"}]}},{"assignments":[14928],"declarations":[{"constant":false,"id":14928,"mutability":"mutable","name":"transferId","nameLocation":"17411:10:69","nodeType":"VariableDeclaration","scope":14946,"src":"17403:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14927,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17403:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":14932,"initialValue":{"arguments":[{"id":14930,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14900,"src":"17445:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}],"id":14929,"name":"_calculateTransferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13998,"src":"17424:20:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_TransferInfo_$29351_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct TransferInfo memory) pure returns (bytes32)"}},"id":14931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17424:29:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"17403:50:69"},{"expression":{"id":14939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":14933,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"17483:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14936,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17485:8:69","memberName":"slippage","nodeType":"MemberAccess","referencedDeclaration":29458,"src":"17483:10:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":14937,"indexExpression":{"id":14935,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14928,"src":"17494:10:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"17483:22:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14938,"name":"_slippage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14902,"src":"17508:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17483:34:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14940,"nodeType":"ExpressionStatement","src":"17483:34:69"},{"eventCall":{"arguments":[{"id":14942,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14928,"src":"17563:10:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":14943,"name":"_slippage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14902,"src":"17575:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14941,"name":"SlippageUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14321,"src":"17547:15:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,uint256)"}},"id":14944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17547:38:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14945,"nodeType":"EmitStatement","src":"17542:43:69"}]},"documentation":{"id":14897,"nodeType":"StructuredDocumentation","src":"16694:243:69","text":" @notice Allows a user-specified account to update the slippage they are willing\n to take on destination transfers.\n @param _params TransferInfo associated with the transfer\n @param _slippage The updated slippage"},"functionSelector":"54126711","id":14947,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":14905,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14900,"src":"17041:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}}],"id":14906,"kind":"modifierInvocation","modifierName":{"id":14904,"name":"onlyDelegate","nameLocations":["17028:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":14384,"src":"17028:12:69"},"nodeType":"ModifierInvocation","src":"17028:21:69"}],"name":"forceUpdateSlippage","nameLocation":"16949:19:69","nodeType":"FunctionDefinition","parameters":{"id":14903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14900,"mutability":"mutable","name":"_params","nameLocation":"16991:7:69","nodeType":"VariableDeclaration","scope":14947,"src":"16969:29:69","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo"},"typeName":{"id":14899,"nodeType":"UserDefinedTypeName","pathNode":{"id":14898,"name":"TransferInfo","nameLocations":["16969:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":29351,"src":"16969:12:69"},"referencedDeclaration":29351,"src":"16969:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_storage_ptr","typeString":"struct TransferInfo"}},"visibility":"internal"},{"constant":false,"id":14902,"mutability":"mutable","name":"_slippage","nameLocation":"17008:9:69","nodeType":"VariableDeclaration","scope":14947,"src":"17000:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14901,"name":"uint256","nodeType":"ElementaryTypeName","src":"17000:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16968:50:69"},"returnParameters":{"id":14907,"nodeType":"ParameterList","parameters":[],"src":"17050:0:69"},"scope":16127,"src":"16940:650:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":14985,"nodeType":"Block","src":"17991:382:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":14961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14957,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14951,"src":"18052:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":14958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18060:17:69","memberName":"destinationDomain","nodeType":"MemberAccess","referencedDeclaration":29328,"src":"18052:25:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":14959,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"18081:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14960,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18083:6:69","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"18081:8:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"18052:37:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14966,"nodeType":"IfStatement","src":"18048:112:69","trueBody":{"id":14965,"nodeType":"Block","src":"18091:69:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14962,"name":"BridgeFacet__forceReceiveLocal_notDestination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14256,"src":"18106:45:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":14963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18106:47:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14964,"nodeType":"RevertStatement","src":"18099:54:69"}]}},{"assignments":[14968],"declarations":[{"constant":false,"id":14968,"mutability":"mutable","name":"transferId","nameLocation":"18196:10:69","nodeType":"VariableDeclaration","scope":14985,"src":"18188:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14967,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18188:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":14972,"initialValue":{"arguments":[{"id":14970,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14951,"src":"18230:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}],"id":14969,"name":"_calculateTransferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13998,"src":"18209:20:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_TransferInfo_$29351_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct TransferInfo memory) pure returns (bytes32)"}},"id":14971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18209:29:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"18188:50:69"},{"expression":{"id":14979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":14973,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"18268:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":14976,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18270:20:69","memberName":"receiveLocalOverride","nodeType":"MemberAccess","referencedDeclaration":29463,"src":"18268:22:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":14977,"indexExpression":{"id":14975,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14968,"src":"18291:10:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18268:34:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":14978,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"18305:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"18268:41:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14980,"nodeType":"ExpressionStatement","src":"18268:41:69"},{"eventCall":{"arguments":[{"id":14982,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14968,"src":"18357:10:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":14981,"name":"ForceReceiveLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14326,"src":"18339:17:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":14983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18339:29:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14984,"nodeType":"EmitStatement","src":"18334:34:69"}]},"documentation":{"id":14948,"nodeType":"StructuredDocumentation","src":"17594:305:69","text":" @notice Allows a user-specified account to withdraw the local asset directly\n @dev Calldata will still be executed with the local asset. `IXReceiver` contracts\n should be able to handle local assets in event of failures.\n @param _params TransferInfo associated with the transfer"},"functionSelector":"cb8058ba","id":14986,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":14954,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14951,"src":"17982:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}}],"id":14955,"kind":"modifierInvocation","modifierName":{"id":14953,"name":"onlyDelegate","nameLocations":["17969:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":14384,"src":"17969:12:69"},"nodeType":"ModifierInvocation","src":"17969:21:69"}],"name":"forceReceiveLocal","nameLocation":"17911:17:69","nodeType":"FunctionDefinition","parameters":{"id":14952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14951,"mutability":"mutable","name":"_params","nameLocation":"17951:7:69","nodeType":"VariableDeclaration","scope":14986,"src":"17929:29:69","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo"},"typeName":{"id":14950,"nodeType":"UserDefinedTypeName","pathNode":{"id":14949,"name":"TransferInfo","nameLocations":["17929:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":29351,"src":"17929:12:69"},"referencedDeclaration":29351,"src":"17929:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_storage_ptr","typeString":"struct TransferInfo"}},"visibility":"internal"}],"src":"17928:31:69"},"returnParameters":{"id":14956,"nodeType":"ParameterList","parameters":[],"src":"17991:0:69"},"scope":16127,"src":"17902:471:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":15254,"nodeType":"Block","src":"19433:4436:69","statements":[{"assignments":[15002],"declarations":[{"constant":false,"id":15002,"mutability":"mutable","name":"remoteInstance","nameLocation":"19469:14:69","nodeType":"VariableDeclaration","scope":15254,"src":"19461:22:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":15001,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19461:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":15003,"nodeType":"VariableDeclarationStatement","src":"19461:22:69"},{"id":15048,"nodeType":"Block","src":"19489:927:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":15009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15004,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14992,"src":"19769:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":15007,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19787:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":15006,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19779:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15005,"name":"address","nodeType":"ElementaryTypeName","src":"19779:7:69","typeDescriptions":{}}},"id":15008,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19779:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19769:20:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15010,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14994,"src":"19793:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":15011,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19804:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"19793:12:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19769:36:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15018,"nodeType":"IfStatement","src":"19765:112:69","trueBody":{"id":15017,"nodeType":"Block","src":"19807:70:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15014,"name":"BridgeFacet__xcall_nativeAssetNotSupported","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14212,"src":"19824:42:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19824:44:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15016,"nodeType":"RevertStatement","src":"19817:51:69"}]}},{"expression":{"id":15024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15019,"name":"remoteInstance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15002,"src":"20106:14:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":15021,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14990,"src":"20139:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},"id":15022,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20147:17:69","memberName":"destinationDomain","nodeType":"MemberAccess","referencedDeclaration":29328,"src":"20139:25:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":15020,"name":"_mustHaveRemote","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16126,"src":"20123:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint32_$returns$_t_bytes32_$","typeString":"function (uint32) view returns (bytes32)"}},"id":15023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20123:42:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"20106:59:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15025,"nodeType":"ExpressionStatement","src":"20106:59:69"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":15032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15026,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14990,"src":"20206:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},"id":15027,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20214:2:69","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":29332,"src":"20206:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":15030,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20228:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":15029,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20220:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15028,"name":"address","nodeType":"ElementaryTypeName","src":"20220:7:69","typeDescriptions":{}}},"id":15031,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20220:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"20206:24:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15037,"nodeType":"IfStatement","src":"20202:84:69","trueBody":{"id":15036,"nodeType":"Block","src":"20232:54:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15033,"name":"BridgeFacet__xcall_emptyTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14214,"src":"20249:26:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20249:28:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15035,"nodeType":"RevertStatement","src":"20242:35:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15038,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14990,"src":"20298:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},"id":15039,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20306:8:69","memberName":"slippage","nodeType":"MemberAccess","referencedDeclaration":29340,"src":"20298:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":15040,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"20317:9:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":15041,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20327:19:69","memberName":"BPS_FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29220,"src":"20317:29:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20298:48:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15047,"nodeType":"IfStatement","src":"20294:116:69","trueBody":{"id":15046,"nodeType":"Block","src":"20348:62:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15043,"name":"BridgeFacet__xcall_invalidSlippage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14216,"src":"20365:34:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20365:36:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15045,"nodeType":"RevertStatement","src":"20358:43:69"}]}}]},{"assignments":[15050],"declarations":[{"constant":false,"id":15050,"mutability":"mutable","name":"local","nameLocation":"20605:5:69","nodeType":"VariableDeclaration","scope":15254,"src":"20597:13:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15049,"name":"address","nodeType":"ElementaryTypeName","src":"20597:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":15051,"nodeType":"VariableDeclarationStatement","src":"20597:13:69"},{"assignments":[15053],"declarations":[{"constant":false,"id":15053,"mutability":"mutable","name":"transferId","nameLocation":"20624:10:69","nodeType":"VariableDeclaration","scope":15254,"src":"20616:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":15052,"name":"bytes32","nodeType":"ElementaryTypeName","src":"20616:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":15054,"nodeType":"VariableDeclarationStatement","src":"20616:18:69"},{"assignments":[15057],"declarations":[{"constant":false,"id":15057,"mutability":"mutable","name":"canonical","nameLocation":"20655:9:69","nodeType":"VariableDeclaration","scope":15254,"src":"20640:24:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":15056,"nodeType":"UserDefinedTypeName","pathNode":{"id":15055,"name":"TokenId","nameLocations":["20640:7:69"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"20640:7:69"},"referencedDeclaration":37728,"src":"20640:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"id":15058,"nodeType":"VariableDeclarationStatement","src":"20640:24:69"},{"assignments":[15060],"declarations":[{"constant":false,"id":15060,"mutability":"mutable","name":"isCanonical","nameLocation":"20675:11:69","nodeType":"VariableDeclaration","scope":15254,"src":"20670:16:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15059,"name":"bool","nodeType":"ElementaryTypeName","src":"20670:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":15061,"nodeType":"VariableDeclarationStatement","src":"20670:16:69"},{"id":15230,"nodeType":"Block","src":"20692:2738:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":15067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15062,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14992,"src":"21097:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":15065,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21115:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":15064,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21107:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15063,"name":"address","nodeType":"ElementaryTypeName","src":"21107:7:69","typeDescriptions":{}}},"id":15066,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21107:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21097:20:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15215,"nodeType":"IfStatement","src":"21093:2211:69","trueBody":{"id":15214,"nodeType":"Block","src":"21119:2185:69","statements":[{"assignments":[15069],"declarations":[{"constant":false,"id":15069,"mutability":"mutable","name":"key","nameLocation":"21190:3:69","nodeType":"VariableDeclaration","scope":15214,"src":"21182:11:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":15068,"name":"bytes32","nodeType":"ElementaryTypeName","src":"21182:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":15070,"nodeType":"VariableDeclarationStatement","src":"21182:11:69"},{"expression":{"id":15077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":15071,"name":"canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15057,"src":"21204:9:69","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},{"id":15072,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15069,"src":"21215:3:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":15073,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"21203:16:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_struct$_TokenId_$37728_memory_ptr_$_t_bytes32_$","typeString":"tuple(struct TokenId memory,bytes32)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15075,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14992,"src":"21246:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15074,"name":"_getApprovedCanonicalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14145,"src":"21222:23:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_struct$_TokenId_$37728_memory_ptr_$_t_bytes32_$","typeString":"function (address) view returns (struct TokenId memory,bytes32)"}},"id":15076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21222:31:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_struct$_TokenId_$37728_memory_ptr_$_t_bytes32_$","typeString":"tuple(struct TokenId memory,bytes32)"}},"src":"21203:50:69","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15078,"nodeType":"ExpressionStatement","src":"21203:50:69"},{"assignments":[15081],"declarations":[{"constant":false,"id":15081,"mutability":"mutable","name":"config","nameLocation":"21317:6:69","nodeType":"VariableDeclaration","scope":15214,"src":"21297:26:69","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig"},"typeName":{"id":15080,"nodeType":"UserDefinedTypeName","pathNode":{"id":15079,"name":"TokenConfig","nameLocations":["21297:11:69"],"nodeType":"IdentifierPath","referencedDeclaration":29395,"src":"21297:11:69"},"referencedDeclaration":29395,"src":"21297:11:69","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig"}},"visibility":"internal"}],"id":15086,"initialValue":{"arguments":[{"id":15084,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15069,"src":"21347:3:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":15082,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"21326:10:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":15083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21337:9:69","memberName":"getConfig","nodeType":"MemberAccess","referencedDeclaration":27701,"src":"21326:20:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_struct$_TokenConfig_$29395_storage_ptr_$","typeString":"function (bytes32) view returns (struct TokenConfig storage pointer)"}},"id":15085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21326:25:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"21297:54:69"},{"expression":{"id":15093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15087,"name":"isCanonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15060,"src":"21390:11:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":15092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15088,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14990,"src":"21404:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},"id":15089,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21412:12:69","memberName":"originDomain","nodeType":"MemberAccess","referencedDeclaration":29326,"src":"21404:20:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":15090,"name":"canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15057,"src":"21428:9:69","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":15091,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21438:6:69","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"21428:16:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"21404:40:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"21390:54:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15094,"nodeType":"ExpressionStatement","src":"21390:54:69"},{"expression":{"id":15105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15095,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15050,"src":"21488:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":15096,"name":"isCanonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15060,"src":"21496:11:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":15102,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15081,"src":"21553:6:69","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":15103,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21560:14:69","memberName":"representation","nodeType":"MemberAccess","referencedDeclaration":29380,"src":"21553:21:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":15104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"21496:78:69","trueExpression":{"arguments":[{"expression":{"id":15099,"name":"canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15057,"src":"21537:9:69","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":15100,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21547:2:69","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"21537:12:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":15097,"name":"TypeCasts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50188,"src":"21510:9:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TypeCasts_$50188_$","typeString":"type(library TypeCasts)"}},"id":15098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21520:16:69","memberName":"bytes32ToAddress","nodeType":"MemberAccess","referencedDeclaration":50187,"src":"21510:26:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) pure returns (address)"}},"id":15101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21510:40:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21488:86:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":15106,"nodeType":"ExpressionStatement","src":"21488:86:69"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":15112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15107,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15050,"src":"21588:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":15110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21605:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":15109,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21597:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15108,"name":"address","nodeType":"ElementaryTypeName","src":"21597:7:69","typeDescriptions":{}}},"id":15111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21597:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21588:19:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15117,"nodeType":"IfStatement","src":"21584:91:69","trueBody":{"id":15116,"nodeType":"Block","src":"21609:66:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15113,"name":"BridgeFacet_xcall__emptyLocalAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14218,"src":"21628:34:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21628:36:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15115,"nodeType":"RevertStatement","src":"21621:43:69"}]}},{"id":15154,"nodeType":"Block","src":"21685:635:69","statements":[{"assignments":[15119],"declarations":[{"constant":false,"id":15119,"mutability":"mutable","name":"cap","nameLocation":"21874:3:69","nodeType":"VariableDeclaration","scope":15154,"src":"21866:11:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15118,"name":"uint256","nodeType":"ElementaryTypeName","src":"21866:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15122,"initialValue":{"expression":{"id":15120,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15081,"src":"21880:6:69","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":15121,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21887:3:69","memberName":"cap","nodeType":"MemberAccess","referencedDeclaration":29392,"src":"21880:10:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21866:24:69"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15123,"name":"isCanonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15060,"src":"21906:11:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15124,"name":"cap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15119,"src":"21921:3:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":15125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21927:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21921:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"21906:22:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15153,"nodeType":"IfStatement","src":"21902:408:69","trueBody":{"id":15152,"nodeType":"Block","src":"21930:380:69","statements":[{"assignments":[15129],"declarations":[{"constant":false,"id":15129,"mutability":"mutable","name":"newCustodiedAmount","nameLocation":"22074:18:69","nodeType":"VariableDeclaration","scope":15152,"src":"22066:26:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15128,"name":"uint256","nodeType":"ElementaryTypeName","src":"22066:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15134,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15130,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15081,"src":"22095:6:69","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":15131,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22102:9:69","memberName":"custodied","nodeType":"MemberAccess","referencedDeclaration":29394,"src":"22095:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":15132,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14994,"src":"22114:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22095:26:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22066:55:69"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15135,"name":"newCustodiedAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15129,"src":"22139:18:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":15136,"name":"cap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15119,"src":"22160:3:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22139:24:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15142,"nodeType":"IfStatement","src":"22135:99:69","trueBody":{"id":15141,"nodeType":"Block","src":"22165:69:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15138,"name":"BridgeFacet__xcall_capReached","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14220,"src":"22188:29:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22188:31:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15140,"nodeType":"RevertStatement","src":"22181:38:69"}]}},{"expression":{"id":15150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":15143,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"22247:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15146,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22249:12:69","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"22247:14:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":15147,"indexExpression":{"id":15145,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15069,"src":"22262:3:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22247:19:69","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":15148,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"22267:9:69","memberName":"custodied","nodeType":"MemberAccess","referencedDeclaration":29394,"src":"22247:29:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15149,"name":"newCustodiedAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15129,"src":"22279:18:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22247:50:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15151,"nodeType":"ExpressionStatement","src":"22247:50:69"}]}}]},{"expression":{"id":15160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15155,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14990,"src":"22405:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},"id":15157,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"22413:15:69","memberName":"canonicalDomain","nodeType":"MemberAccess","referencedDeclaration":29330,"src":"22405:23:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":15158,"name":"canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15057,"src":"22431:9:69","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":15159,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22441:6:69","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"22431:16:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"22405:42:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":15161,"nodeType":"ExpressionStatement","src":"22405:42:69"},{"expression":{"id":15167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15162,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14990,"src":"22457:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},"id":15164,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"22465:11:69","memberName":"canonicalId","nodeType":"MemberAccess","referencedDeclaration":29350,"src":"22457:19:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":15165,"name":"canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15057,"src":"22479:9:69","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":15166,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22489:2:69","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"22479:12:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"22457:34:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15168,"nodeType":"ExpressionStatement","src":"22457:34:69"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15169,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14994,"src":"22506:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":15170,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22516:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"22506:11:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15213,"nodeType":"IfStatement","src":"22502:794:69","trueBody":{"id":15212,"nodeType":"Block","src":"22519:777:69","statements":[{"expression":{"arguments":[{"id":15175,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14992,"src":"22636:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15176,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14994,"src":"22644:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15172,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"22605:10:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":15174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22616:19:69","memberName":"handleIncomingAsset","nodeType":"MemberAccess","referencedDeclaration":27772,"src":"22605:30:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":15177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22605:47:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15178,"nodeType":"ExpressionStatement","src":"22605:47:69"},{"expression":{"id":15191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15179,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14990,"src":"22730:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},"id":15181,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"22738:10:69","memberName":"bridgedAmt","nodeType":"MemberAccess","referencedDeclaration":29344,"src":"22730:18:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15184,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15069,"src":"22787:3:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":15185,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14992,"src":"22792:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15186,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15050,"src":"22800:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15187,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14994,"src":"22807:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15188,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14990,"src":"22816:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},"id":15189,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22824:8:69","memberName":"slippage","nodeType":"MemberAccess","referencedDeclaration":29340,"src":"22816:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15182,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"22751:10:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":15183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22762:24:69","memberName":"swapToLocalAssetIfNeeded","nodeType":"MemberAccess","referencedDeclaration":27911,"src":"22751:35:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bytes32,address,address,uint256,uint256) returns (uint256)"}},"id":15190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22751:82:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22730:103:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15192,"nodeType":"ExpressionStatement","src":"22730:103:69"},{"expression":{"id":15210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15193,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14990,"src":"23064:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},"id":15195,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"23072:12:69","memberName":"normalizedIn","nodeType":"MemberAccess","referencedDeclaration":29346,"src":"23064:20:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":15200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15198,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14992,"src":"23129:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":15199,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15050,"src":"23139:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23129:15:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":15203,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15081,"src":"23179:6:69","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":15204,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23186:15:69","memberName":"adoptedDecimals","nodeType":"MemberAccess","referencedDeclaration":29386,"src":"23179:22:69","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":15205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"23129:72:69","trueExpression":{"expression":{"id":15201,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15081,"src":"23147:6:69","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":15202,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23154:22:69","memberName":"representationDecimals","nodeType":"MemberAccess","referencedDeclaration":29382,"src":"23147:29:69","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"id":15206,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"23215:9:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":15207,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"23225:27:69","memberName":"DEFAULT_NORMALIZED_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":29247,"src":"23215:37:69","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":15208,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14994,"src":"23266:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15196,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"23087:10:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":15197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23098:17:69","memberName":"normalizeDecimals","nodeType":"MemberAccess","referencedDeclaration":28695,"src":"23087:28:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint8_$_t_uint8_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint8,uint8,uint256) pure returns (uint256)"}},"id":15209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23087:198:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23064:221:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15211,"nodeType":"ExpressionStatement","src":"23064:221:69"}]}}]}},{"expression":{"id":15222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15216,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14990,"src":"23348:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},"id":15218,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"23356:5:69","memberName":"nonce","nodeType":"MemberAccess","referencedDeclaration":29348,"src":"23348:13:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"23364:9:69","subExpression":{"expression":{"id":15219,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"23364:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15220,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"23366:5:69","memberName":"nonce","nodeType":"MemberAccess","referencedDeclaration":29405,"src":"23364:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23348:25:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15223,"nodeType":"ExpressionStatement","src":"23348:25:69"},{"expression":{"id":15228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15224,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15053,"src":"23381:10:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15226,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14990,"src":"23415:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}],"id":15225,"name":"_calculateTransferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13998,"src":"23394:20:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_TransferInfo_$29351_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct TransferInfo memory) pure returns (bytes32)"}},"id":15227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23394:29:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"23381:42:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":15229,"nodeType":"ExpressionStatement","src":"23381:42:69"}]},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15231,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"23639:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23643:5:69","memberName":"value","nodeType":"MemberAccess","src":"23639:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":15233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23651:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"23639:13:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15240,"nodeType":"IfStatement","src":"23635:59:69","trueBody":{"id":15239,"nodeType":"Block","src":"23654:40:69","statements":[{"expression":{"arguments":[{"id":15236,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15053,"src":"23676:10:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":15235,"name":"_bumpTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14896,"src":"23662:13:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":15237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23662:25:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15238,"nodeType":"ExpressionStatement","src":"23662:25:69"}]}},{"expression":{"arguments":[{"id":15242,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15053,"src":"23756:10:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":15243,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14990,"src":"23768:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},{"id":15244,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14992,"src":"23777:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15245,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14994,"src":"23785:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15246,"name":"remoteInstance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15002,"src":"23794:14:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":15247,"name":"canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15057,"src":"23810:9:69","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},{"id":15248,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15050,"src":"23821:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15249,"name":"isCanonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15060,"src":"23828:11:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":15241,"name":"_sendMessageAndEmit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16099,"src":"23736:19:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_struct$_TransferInfo_$29351_memory_ptr_$_t_address_$_t_uint256_$_t_bytes32_$_t_struct$_TokenId_$37728_memory_ptr_$_t_address_$_t_bool_$returns$__$","typeString":"function (bytes32,struct TransferInfo memory,address,uint256,bytes32,struct TokenId memory,address,bool)"}},"id":15250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23736:104:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15251,"nodeType":"ExpressionStatement","src":"23736:104:69"},{"expression":{"id":15252,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15053,"src":"23854:10:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":15000,"id":15253,"nodeType":"Return","src":"23847:17:69"}]},"documentation":{"id":14987,"nodeType":"StructuredDocumentation","src":"18426:869:69","text":" @notice Initiates a cross-chain transfer of funds and/or calldata\n @dev For ERC20 transfers, this contract must have approval to transfer the input (transacting) assets. The adopted\n assets will be swapped for their local asset counterparts (i.e. bridgeable tokens) via the configured AMM if\n necessary. In the event that the adopted assets *are* local bridge assets, no swap is needed. The local tokens will\n then be sent via the bridge router. If the local assets are representational for an asset on another chain, we will\n burn the tokens here. If the local assets are canonical (meaning that the adopted<>local asset pairing is native\n to this chain), we will custody the tokens here.\n @param _params - The TransferInfo arguments.\n @return bytes32 - The transfer ID of the newly created crosschain transfer."},"id":15255,"implemented":true,"kind":"function","modifiers":[{"id":14997,"kind":"modifierInvocation","modifierName":{"id":14996,"name":"whenNotPaused","nameLocations":["19401:13:69"],"nodeType":"IdentifierPath","referencedDeclaration":13913,"src":"19401:13:69"},"nodeType":"ModifierInvocation","src":"19401:13:69"}],"name":"_xcall","nameLocation":"19307:6:69","nodeType":"FunctionDefinition","parameters":{"id":14995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14990,"mutability":"mutable","name":"_params","nameLocation":"19339:7:69","nodeType":"VariableDeclaration","scope":15255,"src":"19319:27:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo"},"typeName":{"id":14989,"nodeType":"UserDefinedTypeName","pathNode":{"id":14988,"name":"TransferInfo","nameLocations":["19319:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":29351,"src":"19319:12:69"},"referencedDeclaration":29351,"src":"19319:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_storage_ptr","typeString":"struct TransferInfo"}},"visibility":"internal"},{"constant":false,"id":14992,"mutability":"mutable","name":"_asset","nameLocation":"19360:6:69","nodeType":"VariableDeclaration","scope":15255,"src":"19352:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14991,"name":"address","nodeType":"ElementaryTypeName","src":"19352:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14994,"mutability":"mutable","name":"_amount","nameLocation":"19380:7:69","nodeType":"VariableDeclaration","scope":15255,"src":"19372:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14993,"name":"uint256","nodeType":"ElementaryTypeName","src":"19372:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19313:78:69"},"returnParameters":{"id":15000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14999,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15255,"src":"19424:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14998,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19424:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"19423:9:69"},"scope":16127,"src":"19298:4571:69","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15274,"nodeType":"Block","src":"24232:91:69","statements":[{"expression":{"arguments":[{"arguments":[{"id":15269,"name":"_signed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15258,"src":"24303:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":15267,"name":"ECDSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12176,"src":"24274:5:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ECDSA_$12176_$","typeString":"type(library ECDSA)"}},"id":15268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24280:22:69","memberName":"toEthSignedMessageHash","nodeType":"MemberAccess","referencedDeclaration":12133,"src":"24274:28:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":15270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24274:37:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":15271,"name":"_sig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15260,"src":"24313:4:69","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":15265,"name":"ECDSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12176,"src":"24260:5:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ECDSA_$12176_$","typeString":"type(library ECDSA)"}},"id":15266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24266:7:69","memberName":"recover","nodeType":"MemberAccess","referencedDeclaration":11942,"src":"24260:13:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$","typeString":"function (bytes32,bytes memory) pure returns (address)"}},"id":15272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24260:58:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":15264,"id":15273,"nodeType":"Return","src":"24253:65:69"}]},"documentation":{"id":15256,"nodeType":"StructuredDocumentation","src":"23873:259:69","text":" @notice Holds the logic to recover the signer from an encoded payload.\n @dev Will hash and convert to an eth signed message.\n @param _signed The hash that was signed.\n @param _sig The signature from which we will recover the signer."},"id":15275,"implemented":true,"kind":"function","modifiers":[],"name":"_recoverSignature","nameLocation":"24144:17:69","nodeType":"FunctionDefinition","parameters":{"id":15261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15258,"mutability":"mutable","name":"_signed","nameLocation":"24170:7:69","nodeType":"VariableDeclaration","scope":15275,"src":"24162:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":15257,"name":"bytes32","nodeType":"ElementaryTypeName","src":"24162:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":15260,"mutability":"mutable","name":"_sig","nameLocation":"24194:4:69","nodeType":"VariableDeclaration","scope":15275,"src":"24179:19:69","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":15259,"name":"bytes","nodeType":"ElementaryTypeName","src":"24179:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"24161:38:69"},"returnParameters":{"id":15264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15263,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15275,"src":"24223:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15262,"name":"address","nodeType":"ElementaryTypeName","src":"24223:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"24222:9:69"},"scope":16127,"src":"24135:188:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15459,"nodeType":"Block","src":"24631:4088:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"24694:31:69","subExpression":{"baseExpression":{"expression":{"id":15287,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"24695:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15288,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24697:16:69","memberName":"approvedRelayers","nodeType":"MemberAccess","referencedDeclaration":29450,"src":"24695:18:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":15291,"indexExpression":{"expression":{"id":15289,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"24714:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24718:6:69","memberName":"sender","nodeType":"MemberAccess","src":"24714:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24695:30:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":15298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15293,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"24729:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24733:6:69","memberName":"sender","nodeType":"MemberAccess","src":"24729:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"expression":{"id":15295,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15279,"src":"24743:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24749:6:69","memberName":"params","nodeType":"MemberAccess","referencedDeclaration":29354,"src":"24743:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":15297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24756:8:69","memberName":"delegate","nodeType":"MemberAccess","referencedDeclaration":29334,"src":"24743:21:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24729:35:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"24694:70:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15304,"nodeType":"IfStatement","src":"24690:137:69","trueBody":{"id":15303,"nodeType":"Block","src":"24766:61:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15300,"name":"BridgeFacet__execute_unapprovedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14222,"src":"24781:37:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24781:39:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15302,"nodeType":"RevertStatement","src":"24774:46:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":15310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":15305,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15279,"src":"24889:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24895:6:69","memberName":"params","nodeType":"MemberAccess","referencedDeclaration":29354,"src":"24889:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":15307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24902:17:69","memberName":"destinationDomain","nodeType":"MemberAccess","referencedDeclaration":29328,"src":"24889:30:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":15308,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"24923:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15309,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24925:6:69","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"24923:8:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"24889:42:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15315,"nodeType":"IfStatement","src":"24885:104:69","trueBody":{"id":15314,"nodeType":"Block","src":"24933:56:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15311,"name":"BridgeFacet__execute_wrongDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14224,"src":"24948:32:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24948:34:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15313,"nodeType":"RevertStatement","src":"24941:41:69"}]}},{"assignments":[15317],"declarations":[{"constant":false,"id":15317,"mutability":"mutable","name":"pathLength","nameLocation":"25177:10:69","nodeType":"VariableDeclaration","scope":15459,"src":"25169:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15316,"name":"uint256","nodeType":"ElementaryTypeName","src":"25169:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15321,"initialValue":{"expression":{"expression":{"id":15318,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15279,"src":"25190:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25196:7:69","memberName":"routers","nodeType":"MemberAccess","referencedDeclaration":29357,"src":"25190:13:69","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":15320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25204:6:69","memberName":"length","nodeType":"MemberAccess","src":"25190:20:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25169:41:69"},{"assignments":[15323],"declarations":[{"constant":false,"id":15323,"mutability":"mutable","name":"transferId","nameLocation":"25277:10:69","nodeType":"VariableDeclaration","scope":15459,"src":"25269:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":15322,"name":"bytes32","nodeType":"ElementaryTypeName","src":"25269:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":15328,"initialValue":{"arguments":[{"expression":{"id":15325,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15279,"src":"25311:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25317:6:69","memberName":"params","nodeType":"MemberAccess","referencedDeclaration":29354,"src":"25311:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}],"id":15324,"name":"_calculateTransferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13998,"src":"25290:20:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_TransferInfo_$29351_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct TransferInfo memory) pure returns (bytes32)"}},"id":15327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25290:34:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"25269:55:69"},{"assignments":[15331],"declarations":[{"constant":false,"id":15331,"mutability":"mutable","name":"status","nameLocation":"25396:6:69","nodeType":"VariableDeclaration","scope":15459,"src":"25370:32:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"},"typeName":{"id":15330,"nodeType":"UserDefinedTypeName","pathNode":{"id":15329,"name":"DestinationTransferStatus","nameLocations":["25370:25:69"],"nodeType":"IdentifierPath","referencedDeclaration":29324,"src":"25370:25:69"},"referencedDeclaration":29324,"src":"25370:25:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"visibility":"internal"}],"id":15336,"initialValue":{"baseExpression":{"expression":{"id":15332,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"25405:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15333,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25407:14:69","memberName":"transferStatus","nodeType":"MemberAccess","referencedDeclaration":29432,"src":"25405:16:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"mapping(bytes32 => enum DestinationTransferStatus)"}},"id":15335,"indexExpression":{"id":15334,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15323,"src":"25422:10:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25405:28:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"nodeType":"VariableDeclarationStatement","src":"25370:63:69"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15337,"name":"pathLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15317,"src":"25444:10:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":15338,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25458:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"25444:15:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15453,"nodeType":"Block","src":"28398:283:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"},"id":15448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15445,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15331,"src":"28583:6:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":15446,"name":"DestinationTransferStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29324,"src":"28593:25:69","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"type(enum DestinationTransferStatus)"}},"id":15447,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28619:10:69","memberName":"Reconciled","nodeType":"MemberAccess","referencedDeclaration":29321,"src":"28593:36:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"src":"28583:46:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15452,"nodeType":"IfStatement","src":"28579:95:69","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15449,"name":"BridgeFacet__execute_notReconciled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14240,"src":"28638:34:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28638:36:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15451,"nodeType":"RevertStatement","src":"28631:43:69"}}]},"id":15454,"nodeType":"IfStatement","src":"25440:3241:69","trueBody":{"id":15444,"nodeType":"Block","src":"25461:2931:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15340,"name":"pathLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15317,"src":"25543:10:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":15341,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"25556:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15342,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25558:21:69","memberName":"maxRoutersPerTransfer","nodeType":"MemberAccess","referencedDeclaration":29453,"src":"25556:23:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25543:36:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15347,"nodeType":"IfStatement","src":"25539:90:69","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15344,"name":"BridgeFacet__execute_maxRoutersExceeded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14230,"src":"25588:39:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25588:41:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15346,"nodeType":"RevertStatement","src":"25581:48:69"}},{"condition":{"commonType":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"},"id":15351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15348,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15331,"src":"25852:6:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":15349,"name":"DestinationTransferStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29324,"src":"25862:25:69","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"type(enum DestinationTransferStatus)"}},"id":15350,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"25888:4:69","memberName":"None","nodeType":"MemberAccess","referencedDeclaration":29320,"src":"25862:30:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"src":"25852:40:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15355,"nodeType":"IfStatement","src":"25848:98:69","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15352,"name":"BridgeFacet__execute_badFastLiquidityStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14238,"src":"25901:43:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25901:45:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15354,"nodeType":"RevertStatement","src":"25894:52:69"}},{"condition":{"id":15361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"26268:38:69","subExpression":{"baseExpression":{"expression":{"id":15356,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"26269:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15357,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26271:18:69","memberName":"approvedSequencers","nodeType":"MemberAccess","referencedDeclaration":29531,"src":"26269:20:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":15360,"indexExpression":{"expression":{"id":15358,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15279,"src":"26290:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26296:9:69","memberName":"sequencer","nodeType":"MemberAccess","referencedDeclaration":29362,"src":"26290:15:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26269:37:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15366,"nodeType":"IfStatement","src":"26264:114:69","trueBody":{"id":15365,"nodeType":"Block","src":"26308:70:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15362,"name":"BridgeFacet__execute_notSupportedSequencer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14226,"src":"26325:42:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26325:44:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15364,"nodeType":"RevertStatement","src":"26318:51:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":15381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15367,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15279,"src":"26922:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26928:9:69","memberName":"sequencer","nodeType":"MemberAccess","referencedDeclaration":29362,"src":"26922:15:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"arguments":[{"arguments":[{"id":15373,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15323,"src":"26980:10:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":15374,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15279,"src":"26992:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26998:7:69","memberName":"routers","nodeType":"MemberAccess","referencedDeclaration":29357,"src":"26992:13:69","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}],"expression":{"id":15371,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"26969:3:69","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":15372,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26973:6:69","memberName":"encode","nodeType":"MemberAccess","src":"26969:10:69","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":15376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26969:37:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":15370,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"26959:9:69","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":15377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26959:48:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":15378,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15279,"src":"27009:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27015:18:69","memberName":"sequencerSignature","nodeType":"MemberAccess","referencedDeclaration":29364,"src":"27009:24:69","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":15369,"name":"_recoverSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15275,"src":"26941:17:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes_calldata_ptr_$returns$_t_address_$","typeString":"function (bytes32,bytes calldata) pure returns (address)"}},"id":15380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26941:93:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"26922:112:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15386,"nodeType":"IfStatement","src":"26909:208:69","trueBody":{"id":15385,"nodeType":"Block","src":"27043:74:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15382,"name":"BridgeFacet__execute_invalidSequencerSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14228,"src":"27060:46:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27060:48:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15384,"nodeType":"RevertStatement","src":"27053:55:69"}]}},{"assignments":[15388],"declarations":[{"constant":false,"id":15388,"mutability":"mutable","name":"routerHash","nameLocation":"27453:10:69","nodeType":"VariableDeclaration","scope":15444,"src":"27445:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":15387,"name":"bytes32","nodeType":"ElementaryTypeName","src":"27445:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":15396,"initialValue":{"arguments":[{"arguments":[{"id":15392,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15323,"src":"27487:10:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":15393,"name":"pathLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15317,"src":"27499:10:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15390,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"27476:3:69","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":15391,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27480:6:69","memberName":"encode","nodeType":"MemberAccess","src":"27476:10:69","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":15394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27476:34:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":15389,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"27466:9:69","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":15395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27466:45:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"27445:66:69"},{"body":{"id":15442,"nodeType":"Block","src":"27554:832:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"27802:28:69","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":15403,"name":"_isRouterAllowlistRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13932,"src":"27803:25:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":15404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27803:27:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":15414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"27834:43:69","subExpression":{"expression":{"baseExpression":{"expression":{"id":15406,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"27835:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15407,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27837:13:69","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"27835:15:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":15412,"indexExpression":{"baseExpression":{"expression":{"id":15408,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15279,"src":"27851:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27857:7:69","memberName":"routers","nodeType":"MemberAccess","referencedDeclaration":29357,"src":"27851:13:69","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":15411,"indexExpression":{"id":15410,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15398,"src":"27865:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27851:16:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27835:33:69","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":15413,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27869:8:69","memberName":"approved","nodeType":"MemberAccess","referencedDeclaration":29367,"src":"27835:42:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"27802:75:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15420,"nodeType":"IfStatement","src":"27798:152:69","trueBody":{"id":15419,"nodeType":"Block","src":"27879:71:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15416,"name":"BridgeFacet__execute_notSupportedRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14232,"src":"27898:39:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27898:41:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15418,"nodeType":"RevertStatement","src":"27891:48:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":15432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":15421,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15279,"src":"28179:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28185:7:69","memberName":"routers","nodeType":"MemberAccess","referencedDeclaration":29357,"src":"28179:13:69","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":15424,"indexExpression":{"id":15423,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15398,"src":"28193:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28179:16:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":15426,"name":"routerHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15388,"src":"28217:10:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"expression":{"id":15427,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15279,"src":"28229:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28235:16:69","memberName":"routerSignatures","nodeType":"MemberAccess","referencedDeclaration":29360,"src":"28229:22:69","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":15430,"indexExpression":{"id":15429,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15398,"src":"28252:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28229:25:69","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":15425,"name":"_recoverSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15275,"src":"28199:17:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes_calldata_ptr_$returns$_t_address_$","typeString":"function (bytes32,bytes calldata) pure returns (address)"}},"id":15431,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28199:56:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"28179:76:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15437,"nodeType":"IfStatement","src":"28175:157:69","trueBody":{"id":15436,"nodeType":"Block","src":"28257:75:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15433,"name":"BridgeFacet__execute_invalidRouterSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14234,"src":"28276:43:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28276:45:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15435,"nodeType":"RevertStatement","src":"28269:52:69"}]}},{"id":15441,"nodeType":"UncheckedBlock","src":"28342:36:69","statements":[{"expression":{"id":15439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"28364:3:69","subExpression":{"id":15438,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15398,"src":"28366:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15440,"nodeType":"ExpressionStatement","src":"28364:3:69"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15400,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15398,"src":"27536:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":15401,"name":"pathLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15317,"src":"27540:10:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27536:14:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15443,"initializationExpression":{"assignments":[15398],"declarations":[{"constant":false,"id":15398,"mutability":"mutable","name":"i","nameLocation":"27533:1:69","nodeType":"VariableDeclaration","scope":15443,"src":"27525:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15397,"name":"uint256","nodeType":"ElementaryTypeName","src":"27525:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15399,"nodeType":"VariableDeclarationStatement","src":"27525:9:69"},"nodeType":"ForStatement","src":"27520:866:69"}]}},{"expression":{"components":[{"id":15455,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15323,"src":"28695:10:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":15456,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15331,"src":"28707:6:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}}],"id":15457,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28694:20:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"tuple(bytes32,enum DestinationTransferStatus)"}},"functionReturnParameters":15286,"id":15458,"nodeType":"Return","src":"28687:27:69"}]},"documentation":{"id":15276,"nodeType":"StructuredDocumentation","src":"24327:185:69","text":" @notice Performs some sanity checks for `execute`.\n @dev Need this to prevent stack too deep.\n @param _args ExecuteArgs that were passed in to the `execute` call."},"id":15460,"implemented":true,"kind":"function","modifiers":[],"name":"_executeSanityChecks","nameLocation":"24524:20:69","nodeType":"FunctionDefinition","parameters":{"id":15280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15279,"mutability":"mutable","name":"_args","nameLocation":"24566:5:69","nodeType":"VariableDeclaration","scope":15460,"src":"24545:26:69","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs"},"typeName":{"id":15278,"nodeType":"UserDefinedTypeName","pathNode":{"id":15277,"name":"ExecuteArgs","nameLocations":["24545:11:69"],"nodeType":"IdentifierPath","referencedDeclaration":29365,"src":"24545:11:69"},"referencedDeclaration":29365,"src":"24545:11:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_storage_ptr","typeString":"struct ExecuteArgs"}},"visibility":"internal"}],"src":"24544:28:69"},"returnParameters":{"id":15286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15282,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15460,"src":"24595:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":15281,"name":"bytes32","nodeType":"ElementaryTypeName","src":"24595:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":15285,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15460,"src":"24604:25:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"},"typeName":{"id":15284,"nodeType":"UserDefinedTypeName","pathNode":{"id":15283,"name":"DestinationTransferStatus","nameLocations":["24604:25:69"],"nodeType":"IdentifierPath","referencedDeclaration":29324,"src":"24604:25:69"},"referencedDeclaration":29324,"src":"24604:25:69","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"visibility":"internal"}],"src":"24594:36:69"},"scope":16127,"src":"24515:4204:69","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":15479,"nodeType":"Block","src":"29010:55:69","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15472,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15463,"src":"29024:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":15473,"name":"_numerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15465,"src":"29034:10:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29024:20:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15475,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"29023:22:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":15476,"name":"_denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15467,"src":"29048:12:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29023:37:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15471,"id":15478,"nodeType":"Return","src":"29016:44:69"}]},"documentation":{"id":15461,"nodeType":"StructuredDocumentation","src":"28723:161:69","text":" @notice Calculates fast transfer amount.\n @param _amount Transfer amount\n @param _numerator Numerator\n @param _denominator Denominator"},"id":15480,"implemented":true,"kind":"function","modifiers":[],"name":"_muldiv","nameLocation":"28896:7:69","nodeType":"FunctionDefinition","parameters":{"id":15468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15463,"mutability":"mutable","name":"_amount","nameLocation":"28917:7:69","nodeType":"VariableDeclaration","scope":15480,"src":"28909:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15462,"name":"uint256","nodeType":"ElementaryTypeName","src":"28909:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15465,"mutability":"mutable","name":"_numerator","nameLocation":"28938:10:69","nodeType":"VariableDeclaration","scope":15480,"src":"28930:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15464,"name":"uint256","nodeType":"ElementaryTypeName","src":"28930:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15467,"mutability":"mutable","name":"_denominator","nameLocation":"28962:12:69","nodeType":"VariableDeclaration","scope":15480,"src":"28954:20:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15466,"name":"uint256","nodeType":"ElementaryTypeName","src":"28954:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"28903:75:69"},"returnParameters":{"id":15471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15470,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15480,"src":"29001:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15469,"name":"uint256","nodeType":"ElementaryTypeName","src":"29001:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29000:9:69"},"scope":16127,"src":"28887:178:69","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":15792,"nodeType":"Block","src":"29528:4303:69","statements":[{"expression":{"id":15506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":15499,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"29614:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15502,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29616:15:69","memberName":"routedTransfers","nodeType":"MemberAccess","referencedDeclaration":29438,"src":"29614:17:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_address_$dyn_storage_$","typeString":"mapping(bytes32 => address[] storage ref)"}},"id":15503,"indexExpression":{"id":15501,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15483,"src":"29632:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"29614:30:69","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":15504,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"29647:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29653:7:69","memberName":"routers","nodeType":"MemberAccess","referencedDeclaration":29357,"src":"29647:13:69","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"src":"29614:46:69","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":15507,"nodeType":"ExpressionStatement","src":"29614:46:69"},{"assignments":[15509],"declarations":[{"constant":false,"id":15509,"mutability":"mutable","name":"local","nameLocation":"29736:5:69","nodeType":"VariableDeclaration","scope":15792,"src":"29728:13:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15508,"name":"address","nodeType":"ElementaryTypeName","src":"29728:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":15510,"nodeType":"VariableDeclarationStatement","src":"29728:13:69"},{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":15515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":15511,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"29751:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29757:6:69","memberName":"params","nodeType":"MemberAccess","referencedDeclaration":29354,"src":"29751:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":15513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29764:15:69","memberName":"canonicalDomain","nodeType":"MemberAccess","referencedDeclaration":29330,"src":"29751:28:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":15514,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29783:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29751:33:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15529,"nodeType":"IfStatement","src":"29747:138:69","trueBody":{"id":15528,"nodeType":"Block","src":"29786:99:69","statements":[{"expression":{"id":15526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15516,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15509,"src":"29794:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15518,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15485,"src":"29817:4:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":15519,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"29823:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29829:6:69","memberName":"params","nodeType":"MemberAccess","referencedDeclaration":29354,"src":"29823:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":15521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29836:11:69","memberName":"canonicalId","nodeType":"MemberAccess","referencedDeclaration":29350,"src":"29823:24:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":15522,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"29849:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29855:6:69","memberName":"params","nodeType":"MemberAccess","referencedDeclaration":29354,"src":"29849:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":15524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29862:15:69","memberName":"canonicalDomain","nodeType":"MemberAccess","referencedDeclaration":29330,"src":"29849:28:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":15517,"name":"_getLocalAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"29802:14:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_uint32_$returns$_t_address_$","typeString":"function (bytes32,bytes32,uint32) view returns (address)"}},"id":15525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29802:76:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"29794:84:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":15527,"nodeType":"ExpressionStatement","src":"29794:84:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":15530,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"29967:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29973:6:69","memberName":"params","nodeType":"MemberAccess","referencedDeclaration":29354,"src":"29967:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":15532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29980:10:69","memberName":"bridgedAmt","nodeType":"MemberAccess","referencedDeclaration":29344,"src":"29967:23:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":15533,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29994:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29967:28:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15541,"nodeType":"IfStatement","src":"29963:73:69","trueBody":{"id":15540,"nodeType":"Block","src":"29997:39:69","statements":[{"expression":{"components":[{"hexValue":"30","id":15535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30013:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":15536,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15509,"src":"30016:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15537,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15509,"src":"30023:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15538,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"30012:17:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_address_$_t_address_$","typeString":"tuple(int_const 0,address,address)"}},"functionReturnParameters":15498,"id":15539,"nodeType":"Return","src":"30005:24:69"}]}},{"assignments":[15543],"declarations":[{"constant":false,"id":15543,"mutability":"mutable","name":"receiveLocal","nameLocation":"30083:12:69","nodeType":"VariableDeclaration","scope":15792,"src":"30078:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15542,"name":"bool","nodeType":"ElementaryTypeName","src":"30078:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":15552,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":15544,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"30098:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30104:6:69","memberName":"params","nodeType":"MemberAccess","referencedDeclaration":29354,"src":"30098:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":15546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30111:12:69","memberName":"receiveLocal","nodeType":"MemberAccess","referencedDeclaration":29336,"src":"30098:25:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"baseExpression":{"expression":{"id":15547,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"30127:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15548,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30129:20:69","memberName":"receiveLocalOverride","nodeType":"MemberAccess","referencedDeclaration":29463,"src":"30127:22:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":15550,"indexExpression":{"id":15549,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15483,"src":"30150:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30127:35:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"30098:64:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"30078:84:69"},{"assignments":[15554],"declarations":[{"constant":false,"id":15554,"mutability":"mutable","name":"toSwap","nameLocation":"30177:6:69","nodeType":"VariableDeclaration","scope":15792,"src":"30169:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15553,"name":"uint256","nodeType":"ElementaryTypeName","src":"30169:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15558,"initialValue":{"expression":{"expression":{"id":15555,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"30186:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30192:6:69","memberName":"params","nodeType":"MemberAccess","referencedDeclaration":29354,"src":"30186:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":15557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30199:10:69","memberName":"bridgedAmt","nodeType":"MemberAccess","referencedDeclaration":29344,"src":"30186:23:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30169:40:69"},{"condition":{"id":15559,"name":"_isFast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15487,"src":"30643:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15712,"nodeType":"IfStatement","src":"30639:2021:69","trueBody":{"id":15711,"nodeType":"Block","src":"30652:2008:69","statements":[{"assignments":[15561],"declarations":[{"constant":false,"id":15561,"mutability":"mutable","name":"pathLen","nameLocation":"30668:7:69","nodeType":"VariableDeclaration","scope":15711,"src":"30660:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15560,"name":"uint256","nodeType":"ElementaryTypeName","src":"30660:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15565,"initialValue":{"expression":{"expression":{"id":15562,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"30678:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30684:7:69","memberName":"routers","nodeType":"MemberAccess","referencedDeclaration":29357,"src":"30678:13:69","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":15564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30692:6:69","memberName":"length","nodeType":"MemberAccess","src":"30678:20:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30660:38:69"},{"expression":{"id":15576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15566,"name":"toSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15554,"src":"30797:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":15568,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"30814:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30820:6:69","memberName":"params","nodeType":"MemberAccess","referencedDeclaration":29354,"src":"30814:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":15570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30827:10:69","memberName":"bridgedAmt","nodeType":"MemberAccess","referencedDeclaration":29344,"src":"30814:23:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15571,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"30839:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15572,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30841:23:69","memberName":"LIQUIDITY_FEE_NUMERATOR","nodeType":"MemberAccess","referencedDeclaration":29399,"src":"30839:25:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15573,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"30866:9:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":15574,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"30876:19:69","memberName":"BPS_FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29220,"src":"30866:29:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15567,"name":"_muldiv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15480,"src":"30806:7:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":15575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30806:90:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30797:99:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15577,"nodeType":"ExpressionStatement","src":"30797:99:69"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15578,"name":"pathLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15561,"src":"30909:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":15579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30920:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"30909:12:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15709,"nodeType":"Block","src":"31945:709:69","statements":[{"assignments":[15653],"declarations":[{"constant":false,"id":15653,"mutability":"mutable","name":"routerAmount","nameLocation":"32039:12:69","nodeType":"VariableDeclaration","scope":15709,"src":"32031:20:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15652,"name":"uint256","nodeType":"ElementaryTypeName","src":"32031:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15657,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15654,"name":"toSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15554,"src":"32054:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":15655,"name":"pathLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15561,"src":"32063:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32054:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"32031:39:69"},{"body":{"id":15683,"nodeType":"Block","src":"32115:290:69","statements":[{"expression":{"id":15677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"expression":{"id":15666,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"32285:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15673,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32287:14:69","memberName":"routerBalances","nodeType":"MemberAccess","referencedDeclaration":29445,"src":"32285:16:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":15674,"indexExpression":{"baseExpression":{"expression":{"id":15668,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"32302:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32308:7:69","memberName":"routers","nodeType":"MemberAccess","referencedDeclaration":29357,"src":"32302:13:69","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":15671,"indexExpression":{"id":15670,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15659,"src":"32316:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"32302:16:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"32285:34:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":15675,"indexExpression":{"id":15672,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15509,"src":"32320:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"32285:41:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":15676,"name":"routerAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15653,"src":"32330:12:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32285:57:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15678,"nodeType":"ExpressionStatement","src":"32285:57:69"},{"id":15682,"nodeType":"UncheckedBlock","src":"32355:40:69","statements":[{"expression":{"id":15680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"32379:3:69","subExpression":{"id":15679,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15659,"src":"32381:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15681,"nodeType":"ExpressionStatement","src":"32379:3:69"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15661,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15659,"src":"32096:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15662,"name":"pathLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15561,"src":"32100:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":15663,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32110:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"32100:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32096:15:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15684,"initializationExpression":{"assignments":[15659],"declarations":[{"constant":false,"id":15659,"mutability":"mutable","name":"i","nameLocation":"32093:1:69","nodeType":"VariableDeclaration","scope":15684,"src":"32085:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15658,"name":"uint256","nodeType":"ElementaryTypeName","src":"32085:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15660,"nodeType":"VariableDeclarationStatement","src":"32085:9:69"},"nodeType":"ForStatement","src":"32080:325:69"},{"assignments":[15686],"declarations":[{"constant":false,"id":15686,"mutability":"mutable","name":"toSweep","nameLocation":"32530:7:69","nodeType":"VariableDeclaration","scope":15709,"src":"32522:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15685,"name":"uint256","nodeType":"ElementaryTypeName","src":"32522:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15693,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15687,"name":"routerAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15653,"src":"32540:12:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15688,"name":"toSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15554,"src":"32556:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":15689,"name":"pathLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15561,"src":"32565:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32556:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15691,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"32555:18:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32540:33:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"32522:51:69"},{"expression":{"id":15707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"expression":{"id":15694,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"32583:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15703,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32585:14:69","memberName":"routerBalances","nodeType":"MemberAccess","referencedDeclaration":29445,"src":"32583:16:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":15704,"indexExpression":{"baseExpression":{"expression":{"id":15696,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"32600:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32606:7:69","memberName":"routers","nodeType":"MemberAccess","referencedDeclaration":29357,"src":"32600:13:69","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":15701,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15698,"name":"pathLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15561,"src":"32614:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":15699,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32624:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"32614:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"32600:26:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"32583:44:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":15705,"indexExpression":{"id":15702,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15509,"src":"32628:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"32583:51:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":15706,"name":"toSweep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15686,"src":"32638:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32583:62:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15708,"nodeType":"ExpressionStatement","src":"32583:62:69"}]},"id":15710,"nodeType":"IfStatement","src":"30905:1749:69","trueBody":{"id":15651,"nodeType":"Block","src":"30923:1016:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"31218:13:69","subExpression":{"id":15581,"name":"receiveLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15543,"src":"31219:12:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"expression":{"id":15583,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"31235:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15584,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31237:14:69","memberName":"routerBalances","nodeType":"MemberAccess","referencedDeclaration":29445,"src":"31235:16:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":15589,"indexExpression":{"baseExpression":{"expression":{"id":15585,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"31252:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31258:7:69","memberName":"routers","nodeType":"MemberAccess","referencedDeclaration":29357,"src":"31252:13:69","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":15588,"indexExpression":{"hexValue":"30","id":15587,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31266:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31252:16:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31235:34:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":15591,"indexExpression":{"id":15590,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15509,"src":"31270:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31235:41:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":15592,"name":"toSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15554,"src":"31279:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31235:50:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"31218:67:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":15601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15595,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"31289:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15596,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31291:8:69","memberName":"aavePool","nodeType":"MemberAccess","referencedDeclaration":29513,"src":"31289:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":15599,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31311:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":15598,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31303:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15597,"name":"address","nodeType":"ElementaryTypeName","src":"31303:7:69","typeDescriptions":{}}},"id":15600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31303:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"31289:24:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"31218:95:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15649,"nodeType":"Block","src":"31810:121:69","statements":[{"expression":{"id":15647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"expression":{"id":15636,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"31869:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15643,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31871:14:69","memberName":"routerBalances","nodeType":"MemberAccess","referencedDeclaration":29445,"src":"31869:16:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":15644,"indexExpression":{"baseExpression":{"expression":{"id":15638,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"31886:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31892:7:69","memberName":"routers","nodeType":"MemberAccess","referencedDeclaration":29357,"src":"31886:13:69","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":15641,"indexExpression":{"hexValue":"30","id":15640,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31900:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31886:16:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31869:34:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":15645,"indexExpression":{"id":15642,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15509,"src":"31904:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"31869:41:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":15646,"name":"toSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15554,"src":"31914:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31869:51:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15648,"nodeType":"ExpressionStatement","src":"31869:51:69"}]},"id":15650,"nodeType":"IfStatement","src":"31214:717:69","trueBody":{"id":15635,"nodeType":"Block","src":"31315:489:69","statements":[{"condition":{"id":15611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"31331:49:69","subExpression":{"expression":{"baseExpression":{"expression":{"id":15603,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"31332:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15604,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31334:13:69","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"31332:15:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":15609,"indexExpression":{"baseExpression":{"expression":{"id":15605,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"31348:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31354:7:69","memberName":"routers","nodeType":"MemberAccess","referencedDeclaration":29357,"src":"31348:13:69","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":15608,"indexExpression":{"hexValue":"30","id":15607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31362:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31348:16:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31332:33:69","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":15610,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31366:14:69","memberName":"portalApproved","nodeType":"MemberAccess","referencedDeclaration":29369,"src":"31332:48:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15615,"nodeType":"IfStatement","src":"31327:106:69","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15612,"name":"BridgeFacet__execute_notApprovedForPortals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14236,"src":"31389:42:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31389:44:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15614,"nodeType":"RevertStatement","src":"31382:51:69"}},{"assignments":[15617,15619],"declarations":[{"constant":false,"id":15617,"mutability":"mutable","name":"portalDeliveredAmount","nameLocation":"31556:21:69","nodeType":"VariableDeclaration","scope":15635,"src":"31548:29:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15616,"name":"uint256","nodeType":"ElementaryTypeName","src":"31548:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15619,"mutability":"mutable","name":"adoptedAsset","nameLocation":"31587:12:69","nodeType":"VariableDeclaration","scope":15635,"src":"31579:20:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15618,"name":"address","nodeType":"ElementaryTypeName","src":"31579:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":15629,"initialValue":{"arguments":[{"id":15621,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15483,"src":"31639:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":15622,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15485,"src":"31664:4:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":15623,"name":"toSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15554,"src":"31682:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":15624,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"31702:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31708:7:69","memberName":"routers","nodeType":"MemberAccess","referencedDeclaration":29357,"src":"31702:13:69","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":15627,"indexExpression":{"hexValue":"30","id":15626,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31716:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31702:16:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":15620,"name":"_executePortalTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16007,"src":"31603:22:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint256_$_t_address_$returns$_t_uint256_$_t_address_$","typeString":"function (bytes32,bytes32,uint256,address) returns (uint256,address)"}},"id":15628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31603:127:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"nodeType":"VariableDeclarationStatement","src":"31547:183:69"},{"expression":{"components":[{"id":15630,"name":"portalDeliveredAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15617,"src":"31750:21:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15631,"name":"adoptedAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15619,"src":"31773:12:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15632,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15509,"src":"31787:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15633,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31749:44:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$_t_address_$","typeString":"tuple(uint256,address,address)"}},"functionReturnParameters":15498,"id":15634,"nodeType":"Return","src":"31742:51:69"}]}}]}}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":15718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15713,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"32733:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15714,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32735:6:69","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"32733:8:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":15715,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"32745:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32751:6:69","memberName":"params","nodeType":"MemberAccess","referencedDeclaration":29354,"src":"32745:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":15717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32758:15:69","memberName":"canonicalDomain","nodeType":"MemberAccess","referencedDeclaration":29330,"src":"32745:28:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"32733:40:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":15721,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15485,"src":"32798:4:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":15719,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"32777:10:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":15720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32788:9:69","memberName":"getConfig","nodeType":"MemberAccess","referencedDeclaration":27701,"src":"32777:20:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_struct$_TokenConfig_$29395_storage_ptr_$","typeString":"function (bytes32) view returns (struct TokenConfig storage pointer)"}},"id":15722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32777:26:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":15723,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32804:3:69","memberName":"cap","nodeType":"MemberAccess","referencedDeclaration":29392,"src":"32777:30:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":15724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32810:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"32777:34:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"32733:78:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15737,"nodeType":"IfStatement","src":"32729:314:69","trueBody":{"id":15736,"nodeType":"Block","src":"32813:230:69","statements":[{"expression":{"id":15734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":15727,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"32996:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15730,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32998:12:69","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"32996:14:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":15731,"indexExpression":{"id":15729,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15485,"src":"33011:4:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"32996:20:69","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":15732,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"33017:9:69","memberName":"custodied","nodeType":"MemberAccess","referencedDeclaration":29394,"src":"32996:30:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":15733,"name":"toSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15554,"src":"33030:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32996:40:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15735,"nodeType":"ExpressionStatement","src":"32996:40:69"}]}},{"condition":{"id":15738,"name":"receiveLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15543,"src":"33232:12:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15751,"nodeType":"IfStatement","src":"33228:138:69","trueBody":{"id":15750,"nodeType":"Block","src":"33246:120:69","statements":[{"expression":{"id":15743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"33279:42:69","subExpression":{"baseExpression":{"expression":{"id":15739,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"33286:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15740,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33288:20:69","memberName":"receiveLocalOverride","nodeType":"MemberAccess","referencedDeclaration":29463,"src":"33286:22:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":15742,"indexExpression":{"id":15741,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15483,"src":"33309:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"33286:35:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15744,"nodeType":"ExpressionStatement","src":"33279:42:69"},{"expression":{"components":[{"id":15745,"name":"toSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15554,"src":"33338:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15746,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15509,"src":"33346:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15747,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15509,"src":"33353:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15748,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"33337:22:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$_t_address_$","typeString":"tuple(uint256,address,address)"}},"functionReturnParameters":15498,"id":15749,"nodeType":"Return","src":"33330:29:69"}]}},{"assignments":[15753],"declarations":[{"constant":false,"id":15753,"mutability":"mutable","name":"slippageOverride","nameLocation":"33452:16:69","nodeType":"VariableDeclaration","scope":15792,"src":"33444:24:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15752,"name":"uint256","nodeType":"ElementaryTypeName","src":"33444:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15758,"initialValue":{"baseExpression":{"expression":{"id":15754,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"33471:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15755,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33473:8:69","memberName":"slippage","nodeType":"MemberAccess","referencedDeclaration":29458,"src":"33471:10:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":15757,"indexExpression":{"id":15756,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15483,"src":"33482:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"33471:23:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"33444:50:69"},{"expression":{"id":15763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"33529:30:69","subExpression":{"baseExpression":{"expression":{"id":15759,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"33536:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15760,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33538:8:69","memberName":"slippage","nodeType":"MemberAccess","referencedDeclaration":29458,"src":"33536:10:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":15762,"indexExpression":{"id":15761,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15483,"src":"33547:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"33536:23:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15764,"nodeType":"ExpressionStatement","src":"33529:30:69"},{"assignments":[15766,15768],"declarations":[{"constant":false,"id":15766,"mutability":"mutable","name":"amount","nameLocation":"33575:6:69","nodeType":"VariableDeclaration","scope":15792,"src":"33567:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15765,"name":"uint256","nodeType":"ElementaryTypeName","src":"33567:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15768,"mutability":"mutable","name":"adopted","nameLocation":"33591:7:69","nodeType":"VariableDeclaration","scope":15792,"src":"33583:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15767,"name":"address","nodeType":"ElementaryTypeName","src":"33583:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":15786,"initialValue":{"arguments":[{"id":15771,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15485,"src":"33647:4:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":15772,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15509,"src":"33659:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15773,"name":"toSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15554,"src":"33672:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15774,"name":"slippageOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15753,"src":"33686:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":15775,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33706:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"33686:21:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"expression":{"id":15778,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"33729:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33735:6:69","memberName":"params","nodeType":"MemberAccess","referencedDeclaration":29354,"src":"33729:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":15780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33742:8:69","memberName":"slippage","nodeType":"MemberAccess","referencedDeclaration":29340,"src":"33729:21:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"33686:64:69","trueExpression":{"id":15777,"name":"slippageOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15753,"src":"33710:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":15782,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"33758:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33764:6:69","memberName":"params","nodeType":"MemberAccess","referencedDeclaration":29354,"src":"33758:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":15784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33771:12:69","memberName":"normalizedIn","nodeType":"MemberAccess","referencedDeclaration":29346,"src":"33758:25:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15769,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"33602:10:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":15770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33613:26:69","memberName":"swapFromLocalAssetIfNeeded","nodeType":"MemberAccess","referencedDeclaration":27975,"src":"33602:37:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_address_$","typeString":"function (bytes32,address,uint256,uint256,uint256) returns (uint256,address)"}},"id":15785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33602:187:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"nodeType":"VariableDeclarationStatement","src":"33566:223:69"},{"expression":{"components":[{"id":15787,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15766,"src":"33803:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15788,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15768,"src":"33811:7:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15789,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15509,"src":"33820:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15790,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"33802:24:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$_t_address_$","typeString":"tuple(uint256,address,address)"}},"functionReturnParameters":15498,"id":15791,"nodeType":"Return","src":"33795:31:69"}]},"documentation":{"id":15481,"nodeType":"StructuredDocumentation","src":"29069:248:69","text":" @notice Execute liquidity process used when calling `execute`.\n @dev Will revert with underflow if any router in the path has insufficient liquidity to provide\n for the transfer.\n @dev Need this to prevent stack too deep."},"id":15793,"implemented":true,"kind":"function","modifiers":[],"name":"_handleExecuteLiquidity","nameLocation":"29329:23:69","nodeType":"FunctionDefinition","parameters":{"id":15491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15483,"mutability":"mutable","name":"_transferId","nameLocation":"29366:11:69","nodeType":"VariableDeclaration","scope":15793,"src":"29358:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":15482,"name":"bytes32","nodeType":"ElementaryTypeName","src":"29358:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":15485,"mutability":"mutable","name":"_key","nameLocation":"29391:4:69","nodeType":"VariableDeclaration","scope":15793,"src":"29383:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":15484,"name":"bytes32","nodeType":"ElementaryTypeName","src":"29383:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":15487,"mutability":"mutable","name":"_isFast","nameLocation":"29406:7:69","nodeType":"VariableDeclaration","scope":15793,"src":"29401:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15486,"name":"bool","nodeType":"ElementaryTypeName","src":"29401:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":15490,"mutability":"mutable","name":"_args","nameLocation":"29440:5:69","nodeType":"VariableDeclaration","scope":15793,"src":"29419:26:69","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs"},"typeName":{"id":15489,"nodeType":"UserDefinedTypeName","pathNode":{"id":15488,"name":"ExecuteArgs","nameLocations":["29419:11:69"],"nodeType":"IdentifierPath","referencedDeclaration":29365,"src":"29419:11:69"},"referencedDeclaration":29365,"src":"29419:11:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_storage_ptr","typeString":"struct ExecuteArgs"}},"visibility":"internal"}],"src":"29352:97:69"},"returnParameters":{"id":15498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15493,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15793,"src":"29482:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15492,"name":"uint256","nodeType":"ElementaryTypeName","src":"29482:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15495,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15793,"src":"29497:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15494,"name":"address","nodeType":"ElementaryTypeName","src":"29497:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15497,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15793,"src":"29512:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15496,"name":"address","nodeType":"ElementaryTypeName","src":"29512:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29474:51:69"},"scope":16127,"src":"29320:4511:69","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":15831,"nodeType":"Block","src":"34198:248:69","statements":[{"expression":{"arguments":[{"id":15813,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15801,"src":"34270:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"expression":{"id":15814,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15797,"src":"34278:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34284:6:69","memberName":"params","nodeType":"MemberAccess","referencedDeclaration":29354,"src":"34278:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":15816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34291:2:69","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":29332,"src":"34278:15:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15817,"name":"_amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15799,"src":"34295:10:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15810,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"34239:10:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":15812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34250:19:69","memberName":"handleOutgoingAsset","nodeType":"MemberAccess","referencedDeclaration":27809,"src":"34239:30:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":15818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34239:67:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15819,"nodeType":"ExpressionStatement","src":"34239:67:69"},{"expression":{"arguments":[{"id":15821,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15803,"src":"34358:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":15822,"name":"_amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15799,"src":"34371:10:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15823,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15801,"src":"34383:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15824,"name":"_reconciled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15805,"src":"34391:11:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":15825,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15797,"src":"34404:5:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}},"id":15826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34410:6:69","memberName":"params","nodeType":"MemberAccess","referencedDeclaration":29354,"src":"34404:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}],"id":15820,"name":"_executeCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15913,"src":"34341:16:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_uint256_$_t_address_$_t_bool_$_t_struct$_TransferInfo_$29351_calldata_ptr_$returns$__$","typeString":"function (bytes32,uint256,address,bool,struct TransferInfo calldata)"}},"id":15827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34341:76:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15828,"nodeType":"ExpressionStatement","src":"34341:76:69"},{"expression":{"id":15829,"name":"_amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15799,"src":"34431:10:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15809,"id":15830,"nodeType":"Return","src":"34424:17:69"}]},"documentation":{"id":15794,"nodeType":"StructuredDocumentation","src":"33835:137:69","text":" @notice Process the transfer, and calldata if needed, when calling `execute`\n @dev Need this to prevent stack too deep"},"id":15832,"implemented":true,"kind":"function","modifiers":[],"name":"_handleExecuteTransaction","nameLocation":"33984:25:69","nodeType":"FunctionDefinition","parameters":{"id":15806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15797,"mutability":"mutable","name":"_args","nameLocation":"34036:5:69","nodeType":"VariableDeclaration","scope":15832,"src":"34015:26:69","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs"},"typeName":{"id":15796,"nodeType":"UserDefinedTypeName","pathNode":{"id":15795,"name":"ExecuteArgs","nameLocations":["34015:11:69"],"nodeType":"IdentifierPath","referencedDeclaration":29365,"src":"34015:11:69"},"referencedDeclaration":29365,"src":"34015:11:69","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_storage_ptr","typeString":"struct ExecuteArgs"}},"visibility":"internal"},{"constant":false,"id":15799,"mutability":"mutable","name":"_amountOut","nameLocation":"34055:10:69","nodeType":"VariableDeclaration","scope":15832,"src":"34047:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15798,"name":"uint256","nodeType":"ElementaryTypeName","src":"34047:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15801,"mutability":"mutable","name":"_asset","nameLocation":"34079:6:69","nodeType":"VariableDeclaration","scope":15832,"src":"34071:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15800,"name":"address","nodeType":"ElementaryTypeName","src":"34071:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15803,"mutability":"mutable","name":"_transferId","nameLocation":"34134:11:69","nodeType":"VariableDeclaration","scope":15832,"src":"34126:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":15802,"name":"bytes32","nodeType":"ElementaryTypeName","src":"34126:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":15805,"mutability":"mutable","name":"_reconciled","nameLocation":"34156:11:69","nodeType":"VariableDeclaration","scope":15832,"src":"34151:16:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15804,"name":"bool","nodeType":"ElementaryTypeName","src":"34151:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34009:162:69"},"returnParameters":{"id":15809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15808,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15832,"src":"34189:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15807,"name":"uint256","nodeType":"ElementaryTypeName","src":"34189:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34188:9:69"},"scope":16127,"src":"33975:471:69","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":15912,"nodeType":"Block","src":"35187:963:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":15853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":15848,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15844,"src":"35235:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":15849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35243:8:69","memberName":"callData","nodeType":"MemberAccess","referencedDeclaration":29338,"src":"35235:16:69","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":15847,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"35225:9:69","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":15850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35225:27:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":15851,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"35256:9:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":15852,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"35266:10:69","memberName":"EMPTY_HASH","nodeType":"MemberAccess","referencedDeclaration":29216,"src":"35256:20:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"35225:51:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15856,"nodeType":"IfStatement","src":"35221:119:69","trueBody":{"id":15855,"nodeType":"Block","src":"35278:62:69","statements":[{"functionReturnParameters":15846,"id":15854,"nodeType":"Return","src":"35327:7:69"}]}},{"assignments":[15858,15860],"declarations":[{"constant":false,"id":15858,"mutability":"mutable","name":"success","nameLocation":"35352:7:69","nodeType":"VariableDeclaration","scope":15912,"src":"35347:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15857,"name":"bool","nodeType":"ElementaryTypeName","src":"35347:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":15860,"mutability":"mutable","name":"returnData","nameLocation":"35374:10:69","nodeType":"VariableDeclaration","scope":15912,"src":"35361:23:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":15859,"name":"bytes","nodeType":"ElementaryTypeName","src":"35361:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":15895,"initialValue":{"arguments":[{"expression":{"id":15863,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15844,"src":"35435:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":15864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35443:2:69","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":29332,"src":"35435:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":15865,"name":"gasleft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-7,"src":"35453:7:69","typeDescriptions":{"typeIdentifier":"t_function_gasleft_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":15866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35453:9:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":15867,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"35465:9:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":15868,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"35475:28:69","memberName":"EXECUTE_CALLDATA_RESERVE_GAS","nodeType":"MemberAccess","referencedDeclaration":29228,"src":"35465:38:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35453:50:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":15870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35511:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":15871,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"35553:9:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":15872,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"35563:18:69","memberName":"DEFAULT_COPY_BYTES","nodeType":"MemberAccess","referencedDeclaration":29251,"src":"35553:28:69","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"arguments":[{"expression":{"expression":{"id":15875,"name":"IXReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27349,"src":"35661:10:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IXReceiver_$27349_$","typeString":"type(contract IXReceiver)"}},"id":15876,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"35672:8:69","memberName":"xReceive","nodeType":"MemberAccess","referencedDeclaration":27348,"src":"35661:19:69","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_bytes32_$_t_uint256_$_t_address_$_t_address_$_t_uint32_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function IXReceiver.xReceive(bytes32,uint256,address,address,uint32,bytes memory) returns (bytes memory)"}},"id":15877,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"35681:8:69","memberName":"selector","nodeType":"MemberAccess","src":"35661:28:69","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":15878,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15835,"src":"35699:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":15879,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15837,"src":"35720:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15880,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15839,"src":"35737:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"condition":{"id":15881,"name":"_reconciled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15841,"src":"35753:11:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"hexValue":"30","id":15886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35798:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":15885,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"35790:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15884,"name":"address","nodeType":"ElementaryTypeName","src":"35790:7:69","typeDescriptions":{}}},"id":15887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35790:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":15888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"35753:47:69","trueExpression":{"expression":{"id":15882,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15844,"src":"35767:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":15883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35775:12:69","memberName":"originSender","nodeType":"MemberAccess","referencedDeclaration":29342,"src":"35767:20:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15889,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15844,"src":"35851:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":15890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35859:12:69","memberName":"originDomain","nodeType":"MemberAccess","referencedDeclaration":29326,"src":"35851:20:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"id":15891,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15844,"src":"35881:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":15892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35889:8:69","memberName":"callData","nodeType":"MemberAccess","referencedDeclaration":29338,"src":"35881:16:69","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":15873,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"35629:3:69","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":15874,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"35633:18:69","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"35629:22:69","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":15893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35629:276:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":15861,"name":"ExcessivelySafeCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50104,"src":"35388:19:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ExcessivelySafeCall_$50104_$","typeString":"type(library ExcessivelySafeCall)"}},"id":15862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35408:19:69","memberName":"excessivelySafeCall","nodeType":"MemberAccess","referencedDeclaration":50045,"src":"35388:39:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint16_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (address,uint256,uint256,uint16,bytes memory) returns (bool,bytes memory)"}},"id":15894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35388:523:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"35346:565:69"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"35922:12:69","subExpression":{"id":15896,"name":"_reconciled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15841,"src":"35923:11:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":15899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"35938:8:69","subExpression":{"id":15898,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15858,"src":"35939:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"35922:24:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15905,"nodeType":"IfStatement","src":"35918:158:69","trueBody":{"id":15904,"nodeType":"Block","src":"35948:128:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15901,"name":"BridgeFacet__execute_externalCallFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14242,"src":"36028:39:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36028:41:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15903,"nodeType":"RevertStatement","src":"36021:48:69"}]}},{"eventCall":{"arguments":[{"id":15907,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15835,"src":"36112:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":15908,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15858,"src":"36125:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":15909,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15860,"src":"36134:10:69","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":15906,"name":"ExternalCalldataExecuted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14287,"src":"36087:24:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes32,bool,bytes memory)"}},"id":15910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36087:58:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15911,"nodeType":"EmitStatement","src":"36082:63:69"}]},"documentation":{"id":15833,"nodeType":"StructuredDocumentation","src":"34450:572:69","text":" @notice Executes external calldata.\n \n @dev Once a transfer is reconciled (i.e. data is authenticated), external calls will\n fail gracefully. This means errors will be emitted in an event, but the function itself\n will not revert.\n In the case where a transaction is *not* reconciled (i.e. data is unauthenticated), this\n external call will fail loudly. This allows all functions that rely on authenticated data\n (using a specific check on the origin sender), to be forced into the slow path for\n execution to succeed.\n "},"id":15913,"implemented":true,"kind":"function","modifiers":[],"name":"_executeCalldata","nameLocation":"35034:16:69","nodeType":"FunctionDefinition","parameters":{"id":15845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15835,"mutability":"mutable","name":"_transferId","nameLocation":"35064:11:69","nodeType":"VariableDeclaration","scope":15913,"src":"35056:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":15834,"name":"bytes32","nodeType":"ElementaryTypeName","src":"35056:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":15837,"mutability":"mutable","name":"_amount","nameLocation":"35089:7:69","nodeType":"VariableDeclaration","scope":15913,"src":"35081:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15836,"name":"uint256","nodeType":"ElementaryTypeName","src":"35081:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15839,"mutability":"mutable","name":"_asset","nameLocation":"35110:6:69","nodeType":"VariableDeclaration","scope":15913,"src":"35102:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15838,"name":"address","nodeType":"ElementaryTypeName","src":"35102:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15841,"mutability":"mutable","name":"_reconciled","nameLocation":"35127:11:69","nodeType":"VariableDeclaration","scope":15913,"src":"35122:16:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15840,"name":"bool","nodeType":"ElementaryTypeName","src":"35122:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":15844,"mutability":"mutable","name":"_params","nameLocation":"35166:7:69","nodeType":"VariableDeclaration","scope":15913,"src":"35144:29:69","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo"},"typeName":{"id":15843,"nodeType":"UserDefinedTypeName","pathNode":{"id":15842,"name":"TransferInfo","nameLocations":["35144:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":29351,"src":"35144:12:69"},"referencedDeclaration":29351,"src":"35144:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_storage_ptr","typeString":"struct TransferInfo"}},"visibility":"internal"}],"src":"35050:127:69"},"returnParameters":{"id":15846,"nodeType":"ParameterList","parameters":[],"src":"35187:0:69"},"scope":16127,"src":"35025:1125:69","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16006,"nodeType":"Block","src":"36392:926:69","statements":[{"assignments":[15930],"declarations":[{"constant":false,"id":15930,"mutability":"mutable","name":"adopted","nameLocation":"36462:7:69","nodeType":"VariableDeclaration","scope":16006,"src":"36454:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15929,"name":"address","nodeType":"ElementaryTypeName","src":"36454:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":15934,"initialValue":{"arguments":[{"id":15932,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15918,"src":"36489:4:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":15931,"name":"_getAdoptedAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13962,"src":"36472:16:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":15933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36472:22:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"36454:40:69"},{"expression":{"arguments":[{"id":15940,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15930,"src":"36536:7:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15941,"name":"_fastTransferAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15920,"src":"36545:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":15944,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"36574:4:69","typeDescriptions":{"typeIdentifier":"t_contract$_BridgeFacet_$16127","typeString":"contract BridgeFacet"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BridgeFacet_$16127","typeString":"contract BridgeFacet"}],"id":15943,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"36566:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15942,"name":"address","nodeType":"ElementaryTypeName","src":"36566:7:69","typeDescriptions":{}}},"id":15945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36566:13:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15946,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"36581:9:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":15947,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"36591:18:69","memberName":"AAVE_REFERRAL_CODE","nodeType":"MemberAccess","referencedDeclaration":29232,"src":"36581:28:69","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"arguments":[{"expression":{"id":15936,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"36511:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15937,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36513:8:69","memberName":"aavePool","nodeType":"MemberAccess","referencedDeclaration":29513,"src":"36511:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15935,"name":"IAavePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25862,"src":"36501:9:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAavePool_$25862_$","typeString":"type(contract IAavePool)"}},"id":15938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36501:21:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAavePool_$25862","typeString":"contract IAavePool"}},"id":15939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"36523:12:69","memberName":"mintUnbacked","nodeType":"MemberAccess","referencedDeclaration":25839,"src":"36501:34:69","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint16_$returns$__$","typeString":"function (address,uint256,address,uint16) external"}},"id":15948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36501:109:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15949,"nodeType":"ExpressionStatement","src":"36501:109:69"},{"assignments":[15951],"declarations":[{"constant":false,"id":15951,"mutability":"mutable","name":"amountWithdrawn","nameLocation":"36747:15:69","nodeType":"VariableDeclaration","scope":16006,"src":"36739:23:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15950,"name":"uint256","nodeType":"ElementaryTypeName","src":"36739:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15964,"initialValue":{"arguments":[{"id":15957,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15930,"src":"36796:7:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15958,"name":"_fastTransferAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15920,"src":"36805:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":15961,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"36834:4:69","typeDescriptions":{"typeIdentifier":"t_contract$_BridgeFacet_$16127","typeString":"contract BridgeFacet"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BridgeFacet_$16127","typeString":"contract BridgeFacet"}],"id":15960,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"36826:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15959,"name":"address","nodeType":"ElementaryTypeName","src":"36826:7:69","typeDescriptions":{}}},"id":15962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36826:13:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":15953,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"36775:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15954,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36777:8:69","memberName":"aavePool","nodeType":"MemberAccess","referencedDeclaration":29513,"src":"36775:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15952,"name":"IAavePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25862,"src":"36765:9:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAavePool_$25862_$","typeString":"type(contract IAavePool)"}},"id":15955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36765:21:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAavePool_$25862","typeString":"contract IAavePool"}},"id":15956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"36787:8:69","memberName":"withdraw","nodeType":"MemberAccess","referencedDeclaration":25861,"src":"36765:30:69","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) external returns (uint256)"}},"id":15963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36765:75:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"36739:101:69"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15965,"name":"amountWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15951,"src":"36851:15:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":15966,"name":"_fastTransferAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15920,"src":"36869:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36851:37:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15971,"nodeType":"IfStatement","src":"36847:114:69","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15968,"name":"BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14246,"src":"36897:62:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":15969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36897:64:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15970,"nodeType":"RevertStatement","src":"36890:71:69"}},{"expression":{"id":15978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":15972,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"36996:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15975,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36998:10:69","memberName":"portalDebt","nodeType":"MemberAccess","referencedDeclaration":29521,"src":"36996:12:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":15976,"indexExpression":{"id":15974,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15916,"src":"37009:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"36996:25:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15977,"name":"_fastTransferAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15920,"src":"37024:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36996:47:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15979,"nodeType":"ExpressionStatement","src":"36996:47:69"},{"expression":{"id":15993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":15980,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"37072:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15983,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37074:13:69","memberName":"portalFeeDebt","nodeType":"MemberAccess","referencedDeclaration":29526,"src":"37072:15:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":15984,"indexExpression":{"id":15982,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15916,"src":"37088:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"37072:28:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15985,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"37104:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":15986,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37106:22:69","memberName":"aavePortalFeeNumerator","nodeType":"MemberAccess","referencedDeclaration":29516,"src":"37104:24:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":15987,"name":"_fastTransferAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15920,"src":"37131:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37104:46:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15989,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"37103:48:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":15990,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"37154:9:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":15991,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"37164:19:69","memberName":"BPS_FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29220,"src":"37154:29:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37103:80:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37072:111:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15994,"nodeType":"ExpressionStatement","src":"37072:111:69"},{"eventCall":{"arguments":[{"id":15996,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15916,"src":"37218:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":15997,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15922,"src":"37231:7:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15998,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15930,"src":"37240:7:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15999,"name":"_fastTransferAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15920,"src":"37249:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15995,"name":"AavePortalMintUnbacked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"37195:22:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (bytes32,address,address,uint256)"}},"id":16000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37195:74:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16001,"nodeType":"EmitStatement","src":"37190:79:69"},{"expression":{"components":[{"id":16002,"name":"_fastTransferAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15920,"src":"37284:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16003,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15930,"src":"37305:7:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":16004,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"37283:30:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"functionReturnParameters":15928,"id":16005,"nodeType":"Return","src":"37276:37:69"}]},"documentation":{"id":15914,"nodeType":"StructuredDocumentation","src":"36154:66:69","text":" @notice Uses Aave Portals to provide fast liquidity"},"id":16007,"implemented":true,"kind":"function","modifiers":[],"name":"_executePortalTransfer","nameLocation":"36232:22:69","nodeType":"FunctionDefinition","parameters":{"id":15923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15916,"mutability":"mutable","name":"_transferId","nameLocation":"36268:11:69","nodeType":"VariableDeclaration","scope":16007,"src":"36260:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":15915,"name":"bytes32","nodeType":"ElementaryTypeName","src":"36260:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":15918,"mutability":"mutable","name":"_key","nameLocation":"36293:4:69","nodeType":"VariableDeclaration","scope":16007,"src":"36285:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":15917,"name":"bytes32","nodeType":"ElementaryTypeName","src":"36285:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":15920,"mutability":"mutable","name":"_fastTransferAmount","nameLocation":"36311:19:69","nodeType":"VariableDeclaration","scope":16007,"src":"36303:27:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15919,"name":"uint256","nodeType":"ElementaryTypeName","src":"36303:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15922,"mutability":"mutable","name":"_router","nameLocation":"36344:7:69","nodeType":"VariableDeclaration","scope":16007,"src":"36336:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15921,"name":"address","nodeType":"ElementaryTypeName","src":"36336:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"36254:101:69"},"returnParameters":{"id":15928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15925,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16007,"src":"36374:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15924,"name":"uint256","nodeType":"ElementaryTypeName","src":"36374:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15927,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16007,"src":"36383:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15926,"name":"address","nodeType":"ElementaryTypeName","src":"36383:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"36373:18:69"},"scope":16127,"src":"36223:1095:69","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16098,"nodeType":"Block","src":"38140:1247:69","statements":[{"assignments":[16030],"declarations":[{"constant":false,"id":16030,"mutability":"mutable","name":"bridgedAmt","nameLocation":"38221:10:69","nodeType":"VariableDeclaration","scope":16098,"src":"38213:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16029,"name":"uint256","nodeType":"ElementaryTypeName","src":"38213:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16033,"initialValue":{"expression":{"id":16031,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16013,"src":"38234:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},"id":16032,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"38242:10:69","memberName":"bridgedAmt","nodeType":"MemberAccess","referencedDeclaration":29344,"src":"38234:18:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"38213:39:69"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16034,"name":"bridgedAmt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16030,"src":"38262:10:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":16035,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"38275:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"38262:14:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16053,"nodeType":"IfStatement","src":"38258:540:69","trueBody":{"id":16052,"nodeType":"Block","src":"38278:520:69","statements":[{"condition":{"id":16038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"38290:13:69","subExpression":{"id":16037,"name":"_isCanonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16026,"src":"38291:12:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16051,"nodeType":"IfStatement","src":"38286:192:69","trueBody":{"id":16050,"nodeType":"Block","src":"38305:173:69","statements":[{"expression":{"arguments":[{"arguments":[{"id":16045,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"38451:4:69","typeDescriptions":{"typeIdentifier":"t_contract$_BridgeFacet_$16127","typeString":"contract BridgeFacet"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BridgeFacet_$16127","typeString":"contract BridgeFacet"}],"id":16044,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"38443:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16043,"name":"address","nodeType":"ElementaryTypeName","src":"38443:7:69","typeDescriptions":{}}},"id":16046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38443:13:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16047,"name":"bridgedAmt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16030,"src":"38458:10:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":16040,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16024,"src":"38430:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16039,"name":"IBridgeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25890,"src":"38417:12:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBridgeToken_$25890_$","typeString":"type(contract IBridgeToken)"}},"id":16041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38417:20:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBridgeToken_$25890","typeString":"contract IBridgeToken"}},"id":16042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38438:4:69","memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":25875,"src":"38417:25:69","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":16048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38417:52:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16049,"nodeType":"ExpressionStatement","src":"38417:52:69"}]}}]}},{"assignments":[16055],"declarations":[{"constant":false,"id":16055,"mutability":"mutable","name":"_messageBody","nameLocation":"38817:12:69","nodeType":"VariableDeclaration","scope":16098,"src":"38804:25:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":16054,"name":"bytes","nodeType":"ElementaryTypeName","src":"38804:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":16068,"initialValue":{"arguments":[{"expression":{"id":16058,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16022,"src":"38856:10:69","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":16059,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"38867:6:69","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"38856:17:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"id":16060,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16022,"src":"38881:10:69","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":16061,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"38892:2:69","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"38881:13:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":16062,"name":"BridgeMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29188,"src":"38902:13:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BridgeMessage_$29188_$","typeString":"type(library BridgeMessage)"}},"id":16063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38916:5:69","memberName":"Types","nodeType":"MemberAccess","referencedDeclaration":28713,"src":"38902:19:69","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Types_$28713_$","typeString":"type(enum BridgeMessage.Types)"}},"id":16064,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"38922:8:69","memberName":"Transfer","nodeType":"MemberAccess","referencedDeclaration":28712,"src":"38902:28:69","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}},{"id":16065,"name":"bridgedAmt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16030,"src":"38938:10:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16066,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16010,"src":"38956:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":16056,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"38832:3:69","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16057,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"38836:12:69","memberName":"encodePacked","nodeType":"MemberAccess","src":"38832:16:69","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":16067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38832:141:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"38804:169:69"},{"assignments":[16070,16072],"declarations":[{"constant":false,"id":16070,"mutability":"mutable","name":"messageHash","nameLocation":"39090:11:69","nodeType":"VariableDeclaration","scope":16098,"src":"39082:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16069,"name":"bytes32","nodeType":"ElementaryTypeName","src":"39082:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":16072,"mutability":"mutable","name":"messageBody","nameLocation":"39116:11:69","nodeType":"VariableDeclaration","scope":16098,"src":"39103:24:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":16071,"name":"bytes","nodeType":"ElementaryTypeName","src":"39103:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":16085,"initialValue":{"arguments":[{"expression":{"id":16080,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16013,"src":"39187:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},"id":16081,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39195:17:69","memberName":"destinationDomain","nodeType":"MemberAccess","referencedDeclaration":29328,"src":"39187:25:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":16082,"name":"_connextion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16019,"src":"39220:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":16083,"name":"_messageBody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16055,"src":"39239:12:69","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":16074,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"39139:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":16075,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39141:21:69","memberName":"xAppConnectionManager","nodeType":"MemberAccess","referencedDeclaration":29535,"src":"39139:23:69","typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"}},"id":16076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39163:4:69","memberName":"home","nodeType":"MemberAccess","referencedDeclaration":47790,"src":"39139:28:69","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IOutbox_$47864_$","typeString":"function () view external returns (contract IOutbox)"}},"id":16077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39139:30:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IOutbox_$47864","typeString":"contract IOutbox"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IOutbox_$47864","typeString":"contract IOutbox"}],"id":16073,"name":"IOutbox","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47864,"src":"39131:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IOutbox_$47864_$","typeString":"type(contract IOutbox)"}},"id":16078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39131:39:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IOutbox_$47864","typeString":"contract IOutbox"}},"id":16079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39171:8:69","memberName":"dispatch","nodeType":"MemberAccess","referencedDeclaration":47863,"src":"39131:48:69","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes32_$_t_bytes_memory_ptr_$","typeString":"function (uint32,bytes32,bytes memory) external returns (bytes32,bytes memory)"}},"id":16084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39131:126:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_bytes_memory_ptr_$","typeString":"tuple(bytes32,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"39081:176:69"},{"eventCall":{"arguments":[{"id":16087,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16010,"src":"39295:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":16088,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16013,"src":"39308:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},"id":16089,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39316:5:69","memberName":"nonce","nodeType":"MemberAccess","referencedDeclaration":29348,"src":"39308:13:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16090,"name":"messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16070,"src":"39323:11:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":16091,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16013,"src":"39336:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"}},{"id":16092,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16015,"src":"39345:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16093,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16017,"src":"39353:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16094,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16024,"src":"39362:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16095,"name":"messageBody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16072,"src":"39370:11:69","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":16086,"name":"XCalled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14278,"src":"39287:7:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_bytes32_$_t_struct$_TransferInfo_$29351_memory_ptr_$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes32,uint256,bytes32,struct TransferInfo memory,address,uint256,address,bytes memory)"}},"id":16096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39287:95:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16097,"nodeType":"EmitStatement","src":"39282:100:69"}]},"documentation":{"id":16008,"nodeType":"StructuredDocumentation","src":"37383:515:69","text":" @notice Format and send transfer message to a remote chain.\n @param _transferId Unique identifier for the transfer.\n @param _params The TransferInfo.\n @param _connextion The connext instance on the destination domain.\n @param _canonical The canonical token ID/domain info.\n @param _local The local token address.\n @param _amount The token amount.\n @param _isCanonical Whether or not the local token is the canonical asset (i.e. this is the token's\n \"home\" chain)."},"id":16099,"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessageAndEmit","nameLocation":"37910:19:69","nodeType":"FunctionDefinition","parameters":{"id":16027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16010,"mutability":"mutable","name":"_transferId","nameLocation":"37943:11:69","nodeType":"VariableDeclaration","scope":16099,"src":"37935:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16009,"name":"bytes32","nodeType":"ElementaryTypeName","src":"37935:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":16013,"mutability":"mutable","name":"_params","nameLocation":"37980:7:69","nodeType":"VariableDeclaration","scope":16099,"src":"37960:27:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_memory_ptr","typeString":"struct TransferInfo"},"typeName":{"id":16012,"nodeType":"UserDefinedTypeName","pathNode":{"id":16011,"name":"TransferInfo","nameLocations":["37960:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":29351,"src":"37960:12:69"},"referencedDeclaration":29351,"src":"37960:12:69","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_storage_ptr","typeString":"struct TransferInfo"}},"visibility":"internal"},{"constant":false,"id":16015,"mutability":"mutable","name":"_asset","nameLocation":"38001:6:69","nodeType":"VariableDeclaration","scope":16099,"src":"37993:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16014,"name":"address","nodeType":"ElementaryTypeName","src":"37993:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16017,"mutability":"mutable","name":"_amount","nameLocation":"38021:7:69","nodeType":"VariableDeclaration","scope":16099,"src":"38013:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16016,"name":"uint256","nodeType":"ElementaryTypeName","src":"38013:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16019,"mutability":"mutable","name":"_connextion","nameLocation":"38042:11:69","nodeType":"VariableDeclaration","scope":16099,"src":"38034:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16018,"name":"bytes32","nodeType":"ElementaryTypeName","src":"38034:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":16022,"mutability":"mutable","name":"_canonical","nameLocation":"38074:10:69","nodeType":"VariableDeclaration","scope":16099,"src":"38059:25:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":16021,"nodeType":"UserDefinedTypeName","pathNode":{"id":16020,"name":"TokenId","nameLocations":["38059:7:69"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"38059:7:69"},"referencedDeclaration":37728,"src":"38059:7:69","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":16024,"mutability":"mutable","name":"_local","nameLocation":"38098:6:69","nodeType":"VariableDeclaration","scope":16099,"src":"38090:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16023,"name":"address","nodeType":"ElementaryTypeName","src":"38090:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16026,"mutability":"mutable","name":"_isCanonical","nameLocation":"38115:12:69","nodeType":"VariableDeclaration","scope":16099,"src":"38110:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16025,"name":"bool","nodeType":"ElementaryTypeName","src":"38110:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"37929:202:69"},"returnParameters":{"id":16028,"nodeType":"ParameterList","parameters":[],"src":"38140:0:69"},"scope":16127,"src":"37901:1486:69","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":16125,"nodeType":"Block","src":"39725:146:69","statements":[{"expression":{"id":16112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16107,"name":"_remote","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16105,"src":"39731:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":16108,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"39741:1:69","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":16109,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39743:7:69","memberName":"remotes","nodeType":"MemberAccess","referencedDeclaration":29468,"src":"39741:9:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint32_$_t_bytes32_$","typeString":"mapping(uint32 => bytes32)"}},"id":16111,"indexExpression":{"id":16110,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16102,"src":"39751:7:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"39741:18:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"39731:28:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16113,"nodeType":"ExpressionStatement","src":"39731:28:69"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":16119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16114,"name":"_remote","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16105,"src":"39769:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":16117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"39788:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":16116,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"39780:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16115,"name":"bytes32","nodeType":"ElementaryTypeName","src":"39780:7:69","typeDescriptions":{}}},"id":16118,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39780:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"39769:21:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16124,"nodeType":"IfStatement","src":"39765:102:69","trueBody":{"id":16123,"nodeType":"Block","src":"39792:75:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16120,"name":"BridgeFacet__mustHaveRemote_destinationNotSupported","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14258,"src":"39807:51:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":16121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39807:53:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16122,"nodeType":"RevertStatement","src":"39800:60:69"}]}}]},"documentation":{"id":16100,"nodeType":"StructuredDocumentation","src":"39391:250:69","text":" @notice Assert that the given domain has a xApp Router registered and return its address\n @param _domain The domain of the chain for which to get the xApp Router\n @return _remote The address of the remote xApp Router on _domain"},"id":16126,"implemented":true,"kind":"function","modifiers":[],"name":"_mustHaveRemote","nameLocation":"39653:15:69","nodeType":"FunctionDefinition","parameters":{"id":16103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16102,"mutability":"mutable","name":"_domain","nameLocation":"39676:7:69","nodeType":"VariableDeclaration","scope":16126,"src":"39669:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16101,"name":"uint32","nodeType":"ElementaryTypeName","src":"39669:6:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"39668:16:69"},"returnParameters":{"id":16106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16105,"mutability":"mutable","name":"_remote","nameLocation":"39716:7:69","nodeType":"VariableDeclaration","scope":16126,"src":"39708:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16104,"name":"bytes32","nodeType":"ElementaryTypeName","src":"39708:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"39707:17:69"},"scope":16127,"src":"39644:227:69","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":16128,"src":"1262:38611:69","usedErrors":[13728,13730,13732,13734,13736,13738,13740,13742,13744,13746,14198,14200,14202,14204,14206,14208,14210,14212,14214,14216,14218,14220,14222,14224,14226,14228,14230,14232,14234,14236,14238,14240,14242,14244,14246,14248,14250,14252,14254,14256,14258,27656,27658,27660,27662,27664]}],"src":"39:39835:69"},"id":69},"contracts/core/connext/facets/DiamondCutFacet.sol":{"ast":{"absolutePath":"contracts/core/connext/facets/DiamondCutFacet.sol","exportedSymbols":{"DiamondCutFacet":[16239],"IDiamondCut":[26944],"LibDiamond":[30596]},"id":16240,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":16129,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"32:23:70"},{"absolutePath":"contracts/core/connext/interfaces/IDiamondCut.sol","file":"../interfaces/IDiamondCut.sol","id":16131,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16240,"sourceUnit":26945,"src":"362:58:70","symbolAliases":[{"foreign":{"id":16130,"name":"IDiamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26944,"src":"370:11:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/LibDiamond.sol","file":"../libraries/LibDiamond.sol","id":16133,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16240,"sourceUnit":30597,"src":"421:55:70","symbolAliases":[{"foreign":{"id":16132,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"429:10:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":16134,"name":"IDiamondCut","nameLocations":["654:11:70"],"nodeType":"IdentifierPath","referencedDeclaration":26944,"src":"654:11:70"},"id":16135,"nodeType":"InheritanceSpecifier","src":"654:11:70"}],"canonicalName":"DiamondCutFacet","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":16239,"linearizedBaseContracts":[16239,26944],"name":"DiamondCutFacet","nameLocation":"635:15:70","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[26897],"body":{"id":16161,"nodeType":"Block","src":"1229:104:70","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16148,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"1235:10:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":16150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1246:22:70","memberName":"enforceIsContractOwner","nodeType":"MemberAccess","referencedDeclaration":29683,"src":"1235:33:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":16151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1235:35:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16152,"nodeType":"ExpressionStatement","src":"1235:35:70"},{"expression":{"arguments":[{"id":16156,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16140,"src":"1298:11:70","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IDiamondCut.FacetCut calldata[] calldata"}},{"id":16157,"name":"_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16142,"src":"1311:5:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16158,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16144,"src":"1318:9:70","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IDiamondCut.FacetCut calldata[] calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":16153,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"1276:10:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":16155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1287:10:70","memberName":"diamondCut","nodeType":"MemberAccess","referencedDeclaration":29953,"src":"1276:21:70","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (struct IDiamondCut.FacetCut memory[] memory,address,bytes memory)"}},"id":16159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1276:52:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16160,"nodeType":"ExpressionStatement","src":"1276:52:70"}]},"documentation":{"id":16136,"nodeType":"StructuredDocumentation","src":"670:428:70","text":"@notice Add/replace/remove any number of functions and optionally execute\n         a function with delegatecall\n @param _diamondCut Contains the facet addresses and function selectors\n @param _init The address of the contract or facet to execute _calldata\n @param _calldata A function call, including function selector and arguments\n                  _calldata is executed with delegatecall on _init"},"functionSelector":"1f931c1c","id":16162,"implemented":true,"kind":"function","modifiers":[],"name":"diamondCut","nameLocation":"1110:10:70","nodeType":"FunctionDefinition","overrides":{"id":16146,"nodeType":"OverrideSpecifier","overrides":[],"src":"1220:8:70"},"parameters":{"id":16145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16140,"mutability":"mutable","name":"_diamondCut","nameLocation":"1146:11:70","nodeType":"VariableDeclaration","scope":16162,"src":"1126:31:70","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IDiamondCut.FacetCut[]"},"typeName":{"baseType":{"id":16138,"nodeType":"UserDefinedTypeName","pathNode":{"id":16137,"name":"FacetCut","nameLocations":["1126:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":26861,"src":"1126:8:70"},"referencedDeclaration":26861,"src":"1126:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_storage_ptr","typeString":"struct IDiamondCut.FacetCut"}},"id":16139,"nodeType":"ArrayTypeName","src":"1126:10:70","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_storage_$dyn_storage_ptr","typeString":"struct IDiamondCut.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":16142,"mutability":"mutable","name":"_init","nameLocation":"1171:5:70","nodeType":"VariableDeclaration","scope":16162,"src":"1163:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16141,"name":"address","nodeType":"ElementaryTypeName","src":"1163:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16144,"mutability":"mutable","name":"_calldata","nameLocation":"1197:9:70","nodeType":"VariableDeclaration","scope":16162,"src":"1182:24:70","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":16143,"name":"bytes","nodeType":"ElementaryTypeName","src":"1182:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1120:90:70"},"returnParameters":{"id":16147,"nodeType":"ParameterList","parameters":[],"src":"1229:0:70"},"scope":16239,"src":"1101:232:70","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[26873],"body":{"id":16186,"nodeType":"Block","src":"1463:111:70","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16173,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"1469:10:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":16175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1480:22:70","memberName":"enforceIsContractOwner","nodeType":"MemberAccess","referencedDeclaration":29683,"src":"1469:33:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":16176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1469:35:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16177,"nodeType":"ExpressionStatement","src":"1469:35:70"},{"expression":{"arguments":[{"id":16181,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16166,"src":"1539:11:70","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IDiamondCut.FacetCut calldata[] calldata"}},{"id":16182,"name":"_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16168,"src":"1552:5:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16183,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16170,"src":"1559:9:70","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IDiamondCut.FacetCut calldata[] calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":16178,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"1510:10:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":16180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1521:17:70","memberName":"proposeDiamondCut","nodeType":"MemberAccess","referencedDeclaration":29743,"src":"1510:28:70","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (struct IDiamondCut.FacetCut memory[] memory,address,bytes memory)"}},"id":16184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1510:59:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16185,"nodeType":"ExpressionStatement","src":"1510:59:70"}]},"functionSelector":"bbf2358e","id":16187,"implemented":true,"kind":"function","modifiers":[],"name":"proposeDiamondCut","nameLocation":"1346:17:70","nodeType":"FunctionDefinition","parameters":{"id":16171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16166,"mutability":"mutable","name":"_diamondCut","nameLocation":"1389:11:70","nodeType":"VariableDeclaration","scope":16187,"src":"1369:31:70","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IDiamondCut.FacetCut[]"},"typeName":{"baseType":{"id":16164,"nodeType":"UserDefinedTypeName","pathNode":{"id":16163,"name":"FacetCut","nameLocations":["1369:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":26861,"src":"1369:8:70"},"referencedDeclaration":26861,"src":"1369:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_storage_ptr","typeString":"struct IDiamondCut.FacetCut"}},"id":16165,"nodeType":"ArrayTypeName","src":"1369:10:70","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_storage_$dyn_storage_ptr","typeString":"struct IDiamondCut.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":16168,"mutability":"mutable","name":"_init","nameLocation":"1414:5:70","nodeType":"VariableDeclaration","scope":16187,"src":"1406:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16167,"name":"address","nodeType":"ElementaryTypeName","src":"1406:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16170,"mutability":"mutable","name":"_calldata","nameLocation":"1440:9:70","nodeType":"VariableDeclaration","scope":16187,"src":"1425:24:70","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":16169,"name":"bytes","nodeType":"ElementaryTypeName","src":"1425:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1363:90:70"},"returnParameters":{"id":16172,"nodeType":"ParameterList","parameters":[],"src":"1463:0:70"},"scope":16239,"src":"1337:237:70","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[26919],"body":{"id":16211,"nodeType":"Block","src":"1704:111:70","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16198,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"1710:10:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":16200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1721:22:70","memberName":"enforceIsContractOwner","nodeType":"MemberAccess","referencedDeclaration":29683,"src":"1710:33:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":16201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1710:35:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16202,"nodeType":"ExpressionStatement","src":"1710:35:70"},{"expression":{"arguments":[{"id":16206,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16191,"src":"1780:11:70","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IDiamondCut.FacetCut calldata[] calldata"}},{"id":16207,"name":"_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16193,"src":"1793:5:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16208,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16195,"src":"1800:9:70","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IDiamondCut.FacetCut calldata[] calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":16203,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"1751:10:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":16205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1762:17:70","memberName":"rescindDiamondCut","nodeType":"MemberAccess","referencedDeclaration":29785,"src":"1751:28:70","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (struct IDiamondCut.FacetCut memory[] memory,address,bytes memory)"}},"id":16209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1751:59:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16210,"nodeType":"ExpressionStatement","src":"1751:59:70"}]},"functionSelector":"2c67849c","id":16212,"implemented":true,"kind":"function","modifiers":[],"name":"rescindDiamondCut","nameLocation":"1587:17:70","nodeType":"FunctionDefinition","parameters":{"id":16196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16191,"mutability":"mutable","name":"_diamondCut","nameLocation":"1630:11:70","nodeType":"VariableDeclaration","scope":16212,"src":"1610:31:70","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IDiamondCut.FacetCut[]"},"typeName":{"baseType":{"id":16189,"nodeType":"UserDefinedTypeName","pathNode":{"id":16188,"name":"FacetCut","nameLocations":["1610:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":26861,"src":"1610:8:70"},"referencedDeclaration":26861,"src":"1610:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_storage_ptr","typeString":"struct IDiamondCut.FacetCut"}},"id":16190,"nodeType":"ArrayTypeName","src":"1610:10:70","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_storage_$dyn_storage_ptr","typeString":"struct IDiamondCut.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":16193,"mutability":"mutable","name":"_init","nameLocation":"1655:5:70","nodeType":"VariableDeclaration","scope":16212,"src":"1647:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16192,"name":"address","nodeType":"ElementaryTypeName","src":"1647:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16195,"mutability":"mutable","name":"_calldata","nameLocation":"1681:9:70","nodeType":"VariableDeclaration","scope":16212,"src":"1666:24:70","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":16194,"name":"bytes","nodeType":"ElementaryTypeName","src":"1666:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1604:90:70"},"returnParameters":{"id":16197,"nodeType":"ParameterList","parameters":[],"src":"1704:0:70"},"scope":16239,"src":"1578:237:70","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[26933],"body":{"id":16237,"nodeType":"Block","src":"1968:97:70","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":16230,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16216,"src":"2028:11:70","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IDiamondCut.FacetCut calldata[] calldata"}},{"id":16231,"name":"_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16218,"src":"2041:5:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16232,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16220,"src":"2048:9:70","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IDiamondCut.FacetCut calldata[] calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":16228,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2017:3:70","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16229,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2021:6:70","memberName":"encode","nodeType":"MemberAccess","src":"2017:10:70","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":16233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2017:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":16227,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2007:9:70","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":16234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2007:52:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":16225,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"1981:10:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":16226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1992:14:70","memberName":"acceptanceTime","nodeType":"MemberAccess","referencedDeclaration":29669,"src":"1981:25:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) view returns (uint256)"}},"id":16235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1981:79:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16224,"id":16236,"nodeType":"Return","src":"1974:86:70"}]},"functionSelector":"56a8ea48","id":16238,"implemented":true,"kind":"function","modifiers":[],"name":"getAcceptanceTime","nameLocation":"1828:17:70","nodeType":"FunctionDefinition","parameters":{"id":16221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16216,"mutability":"mutable","name":"_diamondCut","nameLocation":"1871:11:70","nodeType":"VariableDeclaration","scope":16238,"src":"1851:31:70","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IDiamondCut.FacetCut[]"},"typeName":{"baseType":{"id":16214,"nodeType":"UserDefinedTypeName","pathNode":{"id":16213,"name":"FacetCut","nameLocations":["1851:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":26861,"src":"1851:8:70"},"referencedDeclaration":26861,"src":"1851:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_storage_ptr","typeString":"struct IDiamondCut.FacetCut"}},"id":16215,"nodeType":"ArrayTypeName","src":"1851:10:70","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_storage_$dyn_storage_ptr","typeString":"struct IDiamondCut.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":16218,"mutability":"mutable","name":"_init","nameLocation":"1896:5:70","nodeType":"VariableDeclaration","scope":16238,"src":"1888:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16217,"name":"address","nodeType":"ElementaryTypeName","src":"1888:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16220,"mutability":"mutable","name":"_calldata","nameLocation":"1922:9:70","nodeType":"VariableDeclaration","scope":16238,"src":"1907:24:70","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":16219,"name":"bytes","nodeType":"ElementaryTypeName","src":"1907:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1845:90:70"},"returnParameters":{"id":16224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16223,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16238,"src":"1959:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16222,"name":"uint256","nodeType":"ElementaryTypeName","src":"1959:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1958:9:70"},"scope":16239,"src":"1819:246:70","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":16240,"src":"626:1441:70","usedErrors":[]}],"src":"32:2036:70"},"id":70},"contracts/core/connext/facets/DiamondLoupeFacet.sol":{"ast":{"absolutePath":"contracts/core/connext/facets/DiamondLoupeFacet.sol","exportedSymbols":{"DiamondLoupeFacet":[16424],"IDiamondLoupe":[26985],"IERC165":[26996],"LibDiamond":[30596]},"id":16425,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":16241,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"32:23:71"},{"absolutePath":"contracts/core/connext/libraries/LibDiamond.sol","file":"../libraries/LibDiamond.sol","id":16243,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16425,"sourceUnit":30597,"src":"361:55:71","symbolAliases":[{"foreign":{"id":16242,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"369:10:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IDiamondLoupe.sol","file":"../interfaces/IDiamondLoupe.sol","id":16245,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16425,"sourceUnit":26986,"src":"417:62:71","symbolAliases":[{"foreign":{"id":16244,"name":"IDiamondLoupe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26985,"src":"425:13:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IERC165.sol","file":"../interfaces/IERC165.sol","id":16247,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16425,"sourceUnit":26997,"src":"480:50:71","symbolAliases":[{"foreign":{"id":16246,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26996,"src":"488:7:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":16248,"name":"IDiamondLoupe","nameLocations":["688:13:71"],"nodeType":"IdentifierPath","referencedDeclaration":26985,"src":"688:13:71"},"id":16249,"nodeType":"InheritanceSpecifier","src":"688:13:71"},{"baseName":{"id":16250,"name":"IERC165","nameLocations":["703:7:71"],"nodeType":"IdentifierPath","referencedDeclaration":26996,"src":"703:7:71"},"id":16251,"nodeType":"InheritanceSpecifier","src":"703:7:71"}],"canonicalName":"DiamondLoupeFacet","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":16424,"linearizedBaseContracts":[16424,26996,26985],"name":"DiamondLoupeFacet","nameLocation":"667:17:71","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[26960],"body":{"id":16321,"nodeType":"Block","src":"1138:446:71","statements":[{"assignments":[16264],"declarations":[{"constant":false,"id":16264,"mutability":"mutable","name":"ds","nameLocation":"1178:2:71","nodeType":"VariableDeclaration","scope":16321,"src":"1144:36:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"},"typeName":{"id":16263,"nodeType":"UserDefinedTypeName","pathNode":{"id":16262,"name":"LibDiamond.DiamondStorage","nameLocations":["1144:10:71","1155:14:71"],"nodeType":"IdentifierPath","referencedDeclaration":29591,"src":"1144:25:71"},"referencedDeclaration":29591,"src":"1144:25:71","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"}},"visibility":"internal"}],"id":16268,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16265,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"1183:10:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":16266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1194:14:71","memberName":"diamondStorage","nodeType":"MemberAccess","referencedDeclaration":29603,"src":"1183:25:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$29591_storage_ptr_$","typeString":"function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"}},"id":16267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1183:27:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"1144:66:71"},{"assignments":[16270],"declarations":[{"constant":false,"id":16270,"mutability":"mutable","name":"numFacets","nameLocation":"1224:9:71","nodeType":"VariableDeclaration","scope":16321,"src":"1216:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16269,"name":"uint256","nodeType":"ElementaryTypeName","src":"1216:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16274,"initialValue":{"expression":{"expression":{"id":16271,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16264,"src":"1236:2:71","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":16272,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1239:14:71","memberName":"facetAddresses","nodeType":"MemberAccess","referencedDeclaration":29578,"src":"1236:17:71","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":16273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1254:6:71","memberName":"length","nodeType":"MemberAccess","src":"1236:24:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1216:44:71"},{"expression":{"id":16282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16275,"name":"facets_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16258,"src":"1266:7:71","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Facet_$26952_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondLoupe.Facet memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16280,"name":"numFacets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16270,"src":"1288:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16279,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1276:11:71","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_Facet_$26952_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct IDiamondLoupe.Facet memory[] memory)"},"typeName":{"baseType":{"id":16277,"nodeType":"UserDefinedTypeName","pathNode":{"id":16276,"name":"Facet","nameLocations":["1280:5:71"],"nodeType":"IdentifierPath","referencedDeclaration":26952,"src":"1280:5:71"},"referencedDeclaration":26952,"src":"1280:5:71","typeDescriptions":{"typeIdentifier":"t_struct$_Facet_$26952_storage_ptr","typeString":"struct IDiamondLoupe.Facet"}},"id":16278,"nodeType":"ArrayTypeName","src":"1280:7:71","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Facet_$26952_storage_$dyn_storage_ptr","typeString":"struct IDiamondLoupe.Facet[]"}}},"id":16281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1276:22:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Facet_$26952_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondLoupe.Facet memory[] memory"}},"src":"1266:32:71","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Facet_$26952_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondLoupe.Facet memory[] memory"}},"id":16283,"nodeType":"ExpressionStatement","src":"1266:32:71"},{"body":{"id":16319,"nodeType":"Block","src":"1337:243:71","statements":[{"assignments":[16291],"declarations":[{"constant":false,"id":16291,"mutability":"mutable","name":"facetAddress_","nameLocation":"1353:13:71","nodeType":"VariableDeclaration","scope":16319,"src":"1345:21:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16290,"name":"address","nodeType":"ElementaryTypeName","src":"1345:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":16296,"initialValue":{"baseExpression":{"expression":{"id":16292,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16264,"src":"1369:2:71","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":16293,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1372:14:71","memberName":"facetAddresses","nodeType":"MemberAccess","referencedDeclaration":29578,"src":"1369:17:71","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":16295,"indexExpression":{"id":16294,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16285,"src":"1387:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1369:20:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1345:44:71"},{"expression":{"id":16302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":16297,"name":"facets_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16258,"src":"1397:7:71","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Facet_$26952_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondLoupe.Facet memory[] memory"}},"id":16299,"indexExpression":{"id":16298,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16285,"src":"1405:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1397:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Facet_$26952_memory_ptr","typeString":"struct IDiamondLoupe.Facet memory"}},"id":16300,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1408:12:71","memberName":"facetAddress","nodeType":"MemberAccess","referencedDeclaration":26948,"src":"1397:23:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16301,"name":"facetAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16291,"src":"1423:13:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1397:39:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16303,"nodeType":"ExpressionStatement","src":"1397:39:71"},{"expression":{"id":16313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":16304,"name":"facets_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16258,"src":"1444:7:71","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Facet_$26952_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondLoupe.Facet memory[] memory"}},"id":16306,"indexExpression":{"id":16305,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16285,"src":"1452:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1444:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Facet_$26952_memory_ptr","typeString":"struct IDiamondLoupe.Facet memory"}},"id":16307,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1455:17:71","memberName":"functionSelectors","nodeType":"MemberAccess","referencedDeclaration":26951,"src":"1444:28:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"expression":{"id":16308,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16264,"src":"1475:2:71","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":16309,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1478:22:71","memberName":"facetFunctionSelectors","nodeType":"MemberAccess","referencedDeclaration":29575,"src":"1475:25:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$29565_storage_$","typeString":"mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"}},"id":16311,"indexExpression":{"id":16310,"name":"facetAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16291,"src":"1501:13:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1475:40:71","typeDescriptions":{"typeIdentifier":"t_struct$_FacetFunctionSelectors_$29565_storage","typeString":"struct LibDiamond.FacetFunctionSelectors storage ref"}},"id":16312,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1516:17:71","memberName":"functionSelectors","nodeType":"MemberAccess","referencedDeclaration":29562,"src":"1475:58:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage","typeString":"bytes4[] storage ref"}},"src":"1444:89:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"id":16314,"nodeType":"ExpressionStatement","src":"1444:89:71"},{"id":16318,"nodeType":"UncheckedBlock","src":"1542:32:71","statements":[{"expression":{"id":16316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"1562:3:71","subExpression":{"id":16315,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16285,"src":"1564:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16317,"nodeType":"ExpressionStatement","src":"1562:3:71"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16287,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16285,"src":"1320:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":16288,"name":"numFacets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16270,"src":"1324:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1320:13:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16320,"initializationExpression":{"assignments":[16285],"declarations":[{"constant":false,"id":16285,"mutability":"mutable","name":"i","nameLocation":"1317:1:71","nodeType":"VariableDeclaration","scope":16320,"src":"1309:9:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16284,"name":"uint256","nodeType":"ElementaryTypeName","src":"1309:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16286,"nodeType":"VariableDeclarationStatement","src":"1309:9:71"},"nodeType":"ForStatement","src":"1304:276:71"}]},"documentation":{"id":16252,"nodeType":"StructuredDocumentation","src":"985:76:71","text":"@notice Gets all facets and their selectors.\n @return facets_ Facet"},"functionSelector":"7a0ed627","id":16322,"implemented":true,"kind":"function","modifiers":[],"name":"facets","nameLocation":"1073:6:71","nodeType":"FunctionDefinition","overrides":{"id":16254,"nodeType":"OverrideSpecifier","overrides":[],"src":"1096:8:71"},"parameters":{"id":16253,"nodeType":"ParameterList","parameters":[],"src":"1079:2:71"},"returnParameters":{"id":16259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16258,"mutability":"mutable","name":"facets_","nameLocation":"1129:7:71","nodeType":"VariableDeclaration","scope":16322,"src":"1114:22:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Facet_$26952_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondLoupe.Facet[]"},"typeName":{"baseType":{"id":16256,"nodeType":"UserDefinedTypeName","pathNode":{"id":16255,"name":"Facet","nameLocations":["1114:5:71"],"nodeType":"IdentifierPath","referencedDeclaration":26952,"src":"1114:5:71"},"referencedDeclaration":26952,"src":"1114:5:71","typeDescriptions":{"typeIdentifier":"t_struct$_Facet_$26952_storage_ptr","typeString":"struct IDiamondLoupe.Facet"}},"id":16257,"nodeType":"ArrayTypeName","src":"1114:7:71","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Facet_$26952_storage_$dyn_storage_ptr","typeString":"struct IDiamondLoupe.Facet[]"}},"visibility":"internal"}],"src":"1113:24:71"},"scope":16424,"src":"1064:520:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[26969],"body":{"id":16349,"nodeType":"Block","src":"1871:160:71","statements":[{"assignments":[16336],"declarations":[{"constant":false,"id":16336,"mutability":"mutable","name":"ds","nameLocation":"1911:2:71","nodeType":"VariableDeclaration","scope":16349,"src":"1877:36:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"},"typeName":{"id":16335,"nodeType":"UserDefinedTypeName","pathNode":{"id":16334,"name":"LibDiamond.DiamondStorage","nameLocations":["1877:10:71","1888:14:71"],"nodeType":"IdentifierPath","referencedDeclaration":29591,"src":"1877:25:71"},"referencedDeclaration":29591,"src":"1877:25:71","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"}},"visibility":"internal"}],"id":16340,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16337,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"1916:10:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":16338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1927:14:71","memberName":"diamondStorage","nodeType":"MemberAccess","referencedDeclaration":29603,"src":"1916:25:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$29591_storage_ptr_$","typeString":"function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"}},"id":16339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1916:27:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"1877:66:71"},{"expression":{"id":16347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16341,"name":"facetFunctionSelectors_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16330,"src":"1949:23:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"expression":{"id":16342,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16336,"src":"1975:2:71","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":16343,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1978:22:71","memberName":"facetFunctionSelectors","nodeType":"MemberAccess","referencedDeclaration":29575,"src":"1975:25:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$29565_storage_$","typeString":"mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"}},"id":16345,"indexExpression":{"id":16344,"name":"_facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16325,"src":"2001:6:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1975:33:71","typeDescriptions":{"typeIdentifier":"t_struct$_FacetFunctionSelectors_$29565_storage","typeString":"struct LibDiamond.FacetFunctionSelectors storage ref"}},"id":16346,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2009:17:71","memberName":"functionSelectors","nodeType":"MemberAccess","referencedDeclaration":29562,"src":"1975:51:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage","typeString":"bytes4[] storage ref"}},"src":"1949:77:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"id":16348,"nodeType":"ExpressionStatement","src":"1949:77:71"}]},"documentation":{"id":16323,"nodeType":"StructuredDocumentation","src":"1588:141:71","text":"@notice Gets all the function selectors provided by a facet.\n @param _facet The facet address.\n @return facetFunctionSelectors_"},"functionSelector":"adfca15e","id":16350,"implemented":true,"kind":"function","modifiers":[],"name":"facetFunctionSelectors","nameLocation":"1741:22:71","nodeType":"FunctionDefinition","overrides":{"id":16327,"nodeType":"OverrideSpecifier","overrides":[],"src":"1806:8:71"},"parameters":{"id":16326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16325,"mutability":"mutable","name":"_facet","nameLocation":"1772:6:71","nodeType":"VariableDeclaration","scope":16350,"src":"1764:14:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16324,"name":"address","nodeType":"ElementaryTypeName","src":"1764:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1763:16:71"},"returnParameters":{"id":16331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16330,"mutability":"mutable","name":"facetFunctionSelectors_","nameLocation":"1844:23:71","nodeType":"VariableDeclaration","scope":16350,"src":"1828:39:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[]"},"typeName":{"baseType":{"id":16328,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1828:6:71","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":16329,"nodeType":"ArrayTypeName","src":"1828:8:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"}},"visibility":"internal"}],"src":"1827:41:71"},"scope":16424,"src":"1732:299:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[26976],"body":{"id":16372,"nodeType":"Block","src":"2218:118:71","statements":[{"assignments":[16362],"declarations":[{"constant":false,"id":16362,"mutability":"mutable","name":"ds","nameLocation":"2258:2:71","nodeType":"VariableDeclaration","scope":16372,"src":"2224:36:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"},"typeName":{"id":16361,"nodeType":"UserDefinedTypeName","pathNode":{"id":16360,"name":"LibDiamond.DiamondStorage","nameLocations":["2224:10:71","2235:14:71"],"nodeType":"IdentifierPath","referencedDeclaration":29591,"src":"2224:25:71"},"referencedDeclaration":29591,"src":"2224:25:71","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"}},"visibility":"internal"}],"id":16366,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16363,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"2263:10:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":16364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2274:14:71","memberName":"diamondStorage","nodeType":"MemberAccess","referencedDeclaration":29603,"src":"2263:25:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$29591_storage_ptr_$","typeString":"function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"}},"id":16365,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2263:27:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2224:66:71"},{"expression":{"id":16370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16367,"name":"facetAddresses_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16356,"src":"2296:15:71","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":16368,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16362,"src":"2314:2:71","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":16369,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2317:14:71","memberName":"facetAddresses","nodeType":"MemberAccess","referencedDeclaration":29578,"src":"2314:17:71","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"src":"2296:35:71","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":16371,"nodeType":"ExpressionStatement","src":"2296:35:71"}]},"documentation":{"id":16351,"nodeType":"StructuredDocumentation","src":"2035:88:71","text":"@notice Get all the facet addresses used by a diamond.\n @return facetAddresses_"},"functionSelector":"52ef6b2c","id":16373,"implemented":true,"kind":"function","modifiers":[],"name":"facetAddresses","nameLocation":"2135:14:71","nodeType":"FunctionDefinition","overrides":{"id":16353,"nodeType":"OverrideSpecifier","overrides":[],"src":"2166:8:71"},"parameters":{"id":16352,"nodeType":"ParameterList","parameters":[],"src":"2149:2:71"},"returnParameters":{"id":16357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16356,"mutability":"mutable","name":"facetAddresses_","nameLocation":"2201:15:71","nodeType":"VariableDeclaration","scope":16373,"src":"2184:32:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16354,"name":"address","nodeType":"ElementaryTypeName","src":"2184:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16355,"nodeType":"ArrayTypeName","src":"2184:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2183:34:71"},"scope":16424,"src":"2126:210:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[26984],"body":{"id":16399,"nodeType":"Block","src":"2659:160:71","statements":[{"assignments":[16386],"declarations":[{"constant":false,"id":16386,"mutability":"mutable","name":"ds","nameLocation":"2699:2:71","nodeType":"VariableDeclaration","scope":16399,"src":"2665:36:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"},"typeName":{"id":16385,"nodeType":"UserDefinedTypeName","pathNode":{"id":16384,"name":"LibDiamond.DiamondStorage","nameLocations":["2665:10:71","2676:14:71"],"nodeType":"IdentifierPath","referencedDeclaration":29591,"src":"2665:25:71"},"referencedDeclaration":29591,"src":"2665:25:71","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"}},"visibility":"internal"}],"id":16390,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16387,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"2704:10:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":16388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2715:14:71","memberName":"diamondStorage","nodeType":"MemberAccess","referencedDeclaration":29603,"src":"2704:25:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$29591_storage_ptr_$","typeString":"function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"}},"id":16389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2704:27:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2665:66:71"},{"expression":{"id":16397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16391,"name":"facetAddress_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16380,"src":"2737:13:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"expression":{"id":16392,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16386,"src":"2753:2:71","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":16393,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2756:26:71","memberName":"selectorToFacetAndPosition","nodeType":"MemberAccess","referencedDeclaration":29570,"src":"2753:29:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$29559_storage_$","typeString":"mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"}},"id":16395,"indexExpression":{"id":16394,"name":"_functionSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16376,"src":"2783:17:71","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2753:48:71","typeDescriptions":{"typeIdentifier":"t_struct$_FacetAddressAndPosition_$29559_storage","typeString":"struct LibDiamond.FacetAddressAndPosition storage ref"}},"id":16396,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2802:12:71","memberName":"facetAddress","nodeType":"MemberAccess","referencedDeclaration":29556,"src":"2753:61:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2737:77:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16398,"nodeType":"ExpressionStatement","src":"2737:77:71"}]},"documentation":{"id":16374,"nodeType":"StructuredDocumentation","src":"2340:213:71","text":"@notice Gets the facet that supports the given selector.\n @dev If facet is not found return address(0).\n @param _functionSelector The function selector.\n @return facetAddress_ The facet address."},"functionSelector":"cdffacc6","id":16400,"implemented":true,"kind":"function","modifiers":[],"name":"facetAddress","nameLocation":"2565:12:71","nodeType":"FunctionDefinition","overrides":{"id":16378,"nodeType":"OverrideSpecifier","overrides":[],"src":"2618:8:71"},"parameters":{"id":16377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16376,"mutability":"mutable","name":"_functionSelector","nameLocation":"2585:17:71","nodeType":"VariableDeclaration","scope":16400,"src":"2578:24:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":16375,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2578:6:71","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"2577:26:71"},"returnParameters":{"id":16381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16380,"mutability":"mutable","name":"facetAddress_","nameLocation":"2644:13:71","nodeType":"VariableDeclaration","scope":16400,"src":"2636:21:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16379,"name":"address","nodeType":"ElementaryTypeName","src":"2636:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2635:23:71"},"scope":16424,"src":"2556:263:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[26995],"body":{"id":16422,"nodeType":"Block","src":"2939:126:71","statements":[{"assignments":[16412],"declarations":[{"constant":false,"id":16412,"mutability":"mutable","name":"ds","nameLocation":"2979:2:71","nodeType":"VariableDeclaration","scope":16422,"src":"2945:36:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"},"typeName":{"id":16411,"nodeType":"UserDefinedTypeName","pathNode":{"id":16410,"name":"LibDiamond.DiamondStorage","nameLocations":["2945:10:71","2956:14:71"],"nodeType":"IdentifierPath","referencedDeclaration":29591,"src":"2945:25:71"},"referencedDeclaration":29591,"src":"2945:25:71","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"}},"visibility":"internal"}],"id":16416,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16413,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"2984:10:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":16414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2995:14:71","memberName":"diamondStorage","nodeType":"MemberAccess","referencedDeclaration":29603,"src":"2984:25:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$29591_storage_ptr_$","typeString":"function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"}},"id":16415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2984:27:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2945:66:71"},{"expression":{"baseExpression":{"expression":{"id":16417,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16412,"src":"3024:2:71","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":16418,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3027:19:71","memberName":"supportedInterfaces","nodeType":"MemberAccess","referencedDeclaration":29582,"src":"3024:22:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_bool_$","typeString":"mapping(bytes4 => bool)"}},"id":16420,"indexExpression":{"id":16419,"name":"_interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16402,"src":"3047:12:71","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3024:36:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16407,"id":16421,"nodeType":"Return","src":"3017:43:71"}]},"functionSelector":"01ffc9a7","id":16423,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"2862:17:71","nodeType":"FunctionDefinition","overrides":{"id":16404,"nodeType":"OverrideSpecifier","overrides":[],"src":"2915:8:71"},"parameters":{"id":16403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16402,"mutability":"mutable","name":"_interfaceId","nameLocation":"2887:12:71","nodeType":"VariableDeclaration","scope":16423,"src":"2880:19:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":16401,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2880:6:71","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"2879:21:71"},"returnParameters":{"id":16407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16406,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16423,"src":"2933:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16405,"name":"bool","nodeType":"ElementaryTypeName","src":"2933:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2932:6:71"},"scope":16424,"src":"2853:212:71","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":16425,"src":"658:2409:71","usedErrors":[]}],"src":"32:3036:71"},"id":71},"contracts/core/connext/facets/InboxFacet.sol":{"ast":{"absolutePath":"contracts/core/connext/facets/InboxFacet.sol","exportedSymbols":{"AssetLogic":[28696],"BaseConnextFacet":[14146],"BridgeMessage":[29188],"DestinationTransferStatus":[29324],"IBridgeToken":[25890],"InboxFacet":[16947],"TypedMemView":[51265]},"id":16948,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":16426,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:72"},{"absolutePath":"contracts/shared/libraries/TypedMemView.sol","file":"../../../shared/libraries/TypedMemView.sol","id":16428,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16948,"sourceUnit":51266,"src":"71:72:72","symbolAliases":[{"foreign":{"id":16427,"name":"TypedMemView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51265,"src":"79:12:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/AssetLogic.sol","file":"../libraries/AssetLogic.sol","id":16430,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16948,"sourceUnit":28697,"src":"145:55:72","symbolAliases":[{"foreign":{"id":16429,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"153:10:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/BridgeMessage.sol","file":"../libraries/BridgeMessage.sol","id":16432,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16948,"sourceUnit":29189,"src":"201:61:72","symbolAliases":[{"foreign":{"id":16431,"name":"BridgeMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29188,"src":"209:13:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/LibConnextStorage.sol","file":"../libraries/LibConnextStorage.sol","id":16434,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16948,"sourceUnit":29546,"src":"263:77:72","symbolAliases":[{"foreign":{"id":16433,"name":"DestinationTransferStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29324,"src":"271:25:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IBridgeToken.sol","file":"../interfaces/IBridgeToken.sol","id":16436,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16948,"sourceUnit":25891,"src":"342:60:72","symbolAliases":[{"foreign":{"id":16435,"name":"IBridgeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25890,"src":"350:12:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/facets/BaseConnextFacet.sol","file":"./BaseConnextFacet.sol","id":16438,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16948,"sourceUnit":14147,"src":"404:56:72","symbolAliases":[{"foreign":{"id":16437,"name":"BaseConnextFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14146,"src":"412:16:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":16440,"name":"BaseConnextFacet","nameLocations":["906:16:72"],"nodeType":"IdentifierPath","referencedDeclaration":14146,"src":"906:16:72"},"id":16441,"nodeType":"InheritanceSpecifier","src":"906:16:72"}],"canonicalName":"InboxFacet","contractDependencies":[],"contractKind":"contract","documentation":{"id":16439,"nodeType":"StructuredDocumentation","src":"462:420:72","text":" @title InboxFacet\n @notice This is the facet that holds all the functionality needed for Connext's messaging layer to\n reconcile cross-chain transfers. Authenticated (proven) message data is delivered to the `reconcile`\n function, where it is parsed to determine the message action. Tokens are credited (representational\n assets are minted, canonical tokens are unlocked from escrow) if applicable."},"fullyImplemented":true,"id":16947,"linearizedBaseContracts":[16947,14146],"name":"InboxFacet","nameLocation":"892:10:72","nodeType":"ContractDefinition","nodes":[{"global":false,"id":16444,"libraryName":{"id":16442,"name":"TypedMemView","nameLocations":["975:12:72"],"nodeType":"IdentifierPath","referencedDeclaration":51265,"src":"975:12:72"},"nodeType":"UsingForDirective","src":"969:29:72","typeName":{"id":16443,"name":"bytes","nodeType":"ElementaryTypeName","src":"992:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},{"global":false,"id":16447,"libraryName":{"id":16445,"name":"TypedMemView","nameLocations":["1007:12:72"],"nodeType":"IdentifierPath","referencedDeclaration":51265,"src":"1007:12:72"},"nodeType":"UsingForDirective","src":"1001:31:72","typeName":{"id":16446,"name":"bytes29","nodeType":"ElementaryTypeName","src":"1024:7:72","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}},{"global":false,"id":16450,"libraryName":{"id":16448,"name":"BridgeMessage","nameLocations":["1041:13:72"],"nodeType":"IdentifierPath","referencedDeclaration":29188,"src":"1041:13:72"},"nodeType":"UsingForDirective","src":"1035:32:72","typeName":{"id":16449,"name":"bytes29","nodeType":"ElementaryTypeName","src":"1059:7:72","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}},{"errorSelector":"ec38ac1e","id":16452,"name":"InboxFacet__onlyReplica_notReplica","nameLocation":"1120:34:72","nodeType":"ErrorDefinition","parameters":{"id":16451,"nodeType":"ParameterList","parameters":[],"src":"1154:2:72"},"src":"1114:43:72"},{"errorSelector":"46b4a0e9","id":16454,"name":"InboxFacet__onlyRemoteRouter_notRemote","nameLocation":"1166:38:72","nodeType":"ErrorDefinition","parameters":{"id":16453,"nodeType":"ParameterList","parameters":[],"src":"1204:2:72"},"src":"1160:47:72"},{"errorSelector":"55e725f2","id":16456,"name":"InboxFacet__handle_notTransfer","nameLocation":"1216:30:72","nodeType":"ErrorDefinition","parameters":{"id":16455,"nodeType":"ParameterList","parameters":[],"src":"1246:2:72"},"src":"1210:39:72"},{"errorSelector":"8f6bc06f","id":16458,"name":"InboxFacet__reconcile_alreadyReconciled","nameLocation":"1258:39:72","nodeType":"ErrorDefinition","parameters":{"id":16457,"nodeType":"ParameterList","parameters":[],"src":"1297:2:72"},"src":"1252:48:72"},{"errorSelector":"d3bd9015","id":16460,"name":"InboxFacet__reconcile_noPortalRouter","nameLocation":"1309:36:72","nodeType":"ErrorDefinition","parameters":{"id":16459,"nodeType":"ParameterList","parameters":[],"src":"1345:2:72"},"src":"1303:45:72"},{"anonymous":false,"documentation":{"id":16461,"nodeType":"StructuredDocumentation","src":"1391:556:72","text":" @notice Emitted when `reconciled` is called by the bridge on the destination domain.\n @param transferId - The unique identifier of the transfer.\n @param originDomain - The originating domain of the transfer.\n @param local - The local asset that was provided by the bridge.\n @param routers - The routers that were reimbursed the bridged token, if fast liquidity was\n provided for the given transfer.\n @param amount - The amount that was provided by the bridge.\n @param caller - The account that called the function"},"eventSelector":"30bf44531c04b96173a40012c90db840a147cf7d50a3e160f5227f1af2faa3a0","id":16476,"name":"Reconciled","nameLocation":"1956:10:72","nodeType":"EventDefinition","parameters":{"id":16475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16463,"indexed":true,"mutability":"mutable","name":"transferId","nameLocation":"1988:10:72","nodeType":"VariableDeclaration","scope":16476,"src":"1972:26:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16462,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1972:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":16465,"indexed":true,"mutability":"mutable","name":"originDomain","nameLocation":"2019:12:72","nodeType":"VariableDeclaration","scope":16476,"src":"2004:27:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16464,"name":"uint32","nodeType":"ElementaryTypeName","src":"2004:6:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":16467,"indexed":true,"mutability":"mutable","name":"local","nameLocation":"2053:5:72","nodeType":"VariableDeclaration","scope":16476,"src":"2037:21:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16466,"name":"address","nodeType":"ElementaryTypeName","src":"2037:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16470,"indexed":false,"mutability":"mutable","name":"routers","nameLocation":"2074:7:72","nodeType":"VariableDeclaration","scope":16476,"src":"2064:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16468,"name":"address","nodeType":"ElementaryTypeName","src":"2064:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16469,"nodeType":"ArrayTypeName","src":"2064:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":16472,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2095:6:72","nodeType":"VariableDeclaration","scope":16476,"src":"2087:14:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16471,"name":"uint256","nodeType":"ElementaryTypeName","src":"2087:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16474,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"2115:6:72","nodeType":"VariableDeclaration","scope":16476,"src":"2107:14:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16473,"name":"address","nodeType":"ElementaryTypeName","src":"2107:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1966:159:72"},"src":"1950:176:72"},{"anonymous":false,"documentation":{"id":16477,"nodeType":"StructuredDocumentation","src":"2130:705:72","text":" @notice emitted when tokens are dispensed to an account on this domain\n         emitted both when fast liquidity is provided, and when the\n         transfer ultimately settles\n @param originAndNonce Domain where the transfer originated and the\n        unique identifier for the message from origin to destination,\n        combined in a single field ((origin << 32) & nonce)\n @param token The address of the local token contract being received\n @param recipient The address receiving the tokens; the original\n        recipient of the transfer\n @param liquidityProvider The account providing liquidity\n @param amount The amount of tokens being received"},"eventSelector":"9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb","id":16489,"name":"Receive","nameLocation":"2844:7:72","nodeType":"EventDefinition","parameters":{"id":16488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16479,"indexed":true,"mutability":"mutable","name":"originAndNonce","nameLocation":"2872:14:72","nodeType":"VariableDeclaration","scope":16489,"src":"2857:29:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":16478,"name":"uint64","nodeType":"ElementaryTypeName","src":"2857:6:72","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":16481,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2908:5:72","nodeType":"VariableDeclaration","scope":16489,"src":"2892:21:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16480,"name":"address","nodeType":"ElementaryTypeName","src":"2892:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16483,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"2935:9:72","nodeType":"VariableDeclaration","scope":16489,"src":"2919:25:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16482,"name":"address","nodeType":"ElementaryTypeName","src":"2919:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16485,"indexed":false,"mutability":"mutable","name":"liquidityProvider","nameLocation":"2958:17:72","nodeType":"VariableDeclaration","scope":16489,"src":"2950:25:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16484,"name":"address","nodeType":"ElementaryTypeName","src":"2950:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16487,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2989:6:72","nodeType":"VariableDeclaration","scope":16489,"src":"2981:14:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16486,"name":"uint256","nodeType":"ElementaryTypeName","src":"2981:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2851:148:72"},"src":"2838:162:72"},{"body":{"id":16503,"nodeType":"Block","src":"3149:104:72","statements":[{"condition":{"id":16496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3159:23:72","subExpression":{"arguments":[{"expression":{"id":16493,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3171:3:72","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3175:6:72","memberName":"sender","nodeType":"MemberAccess","src":"3171:10:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16492,"name":"_isReplica","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16767,"src":"3160:10:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":16495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3160:22:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16501,"nodeType":"IfStatement","src":"3155:87:72","trueBody":{"id":16500,"nodeType":"Block","src":"3184:58:72","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16497,"name":"InboxFacet__onlyReplica_notReplica","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16452,"src":"3199:34:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":16498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3199:36:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16499,"nodeType":"RevertStatement","src":"3192:43:72"}]}},{"id":16502,"nodeType":"PlaceholderStatement","src":"3247:1:72"}]},"documentation":{"id":16490,"nodeType":"StructuredDocumentation","src":"3046:77:72","text":" @notice Only accept messages from a registered inbox contract."},"id":16504,"name":"onlyReplica","nameLocation":"3135:11:72","nodeType":"ModifierDefinition","parameters":{"id":16491,"nodeType":"ParameterList","parameters":[],"src":"3146:2:72"},"src":"3126:127:72","virtual":false,"visibility":"internal"},{"body":{"id":16522,"nodeType":"Block","src":"3513:120:72","statements":[{"condition":{"id":16515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3523:35:72","subExpression":{"arguments":[{"id":16512,"name":"_origin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16507,"src":"3541:7:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":16513,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16509,"src":"3550:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16511,"name":"_isRemoteHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16792,"src":"3524:16:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (uint32,bytes32) view returns (bool)"}},"id":16514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3524:34:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16520,"nodeType":"IfStatement","src":"3519:103:72","trueBody":{"id":16519,"nodeType":"Block","src":"3560:62:72","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16516,"name":"InboxFacet__onlyRemoteRouter_notRemote","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16454,"src":"3575:38:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":16517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3575:40:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16518,"nodeType":"RevertStatement","src":"3568:47:72"}]}},{"id":16521,"nodeType":"PlaceholderStatement","src":"3627:1:72"}]},"documentation":{"id":16505,"nodeType":"StructuredDocumentation","src":"3257:193:72","text":" @notice Only accept messages from a remote Router contract.\n @param _origin The domain the message is coming from.\n @param _router The address the message is coming from."},"id":16523,"name":"onlyRemoteHandler","nameLocation":"3462:17:72","nodeType":"ModifierDefinition","parameters":{"id":16510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16507,"mutability":"mutable","name":"_origin","nameLocation":"3487:7:72","nodeType":"VariableDeclaration","scope":16523,"src":"3480:14:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16506,"name":"uint32","nodeType":"ElementaryTypeName","src":"3480:6:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":16509,"mutability":"mutable","name":"_router","nameLocation":"3504:7:72","nodeType":"VariableDeclaration","scope":16523,"src":"3496:15:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16508,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3496:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3479:33:72"},"src":"3453:180:72","virtual":false,"visibility":"internal"},{"body":{"id":16591,"nodeType":"Block","src":"4126:710:72","statements":[{"assignments":[16542],"declarations":[{"constant":false,"id":16542,"mutability":"mutable","name":"_msg","nameLocation":"4192:4:72","nodeType":"VariableDeclaration","scope":16591,"src":"4184:12:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":16541,"name":"bytes29","nodeType":"ElementaryTypeName","src":"4184:7:72","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"id":16549,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"hexValue":"30","id":16545,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4212:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":16543,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16532,"src":"4199:8:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":16544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4208:3:72","memberName":"ref","nodeType":"MemberAccess","referencedDeclaration":50591,"src":"4199:12:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,uint40) pure returns (bytes29)"}},"id":16546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4199:15:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":16547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4215:13:72","memberName":"mustBeMessage","nodeType":"MemberAccess","referencedDeclaration":29187,"src":"4199:29:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bytes29_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (bytes29)"}},"id":16548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4199:31:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"nodeType":"VariableDeclarationStatement","src":"4184:46:72"},{"assignments":[16551],"declarations":[{"constant":false,"id":16551,"mutability":"mutable","name":"_tokenId","nameLocation":"4244:8:72","nodeType":"VariableDeclaration","scope":16591,"src":"4236:16:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":16550,"name":"bytes29","nodeType":"ElementaryTypeName","src":"4236:7:72","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"id":16555,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16552,"name":"_msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16542,"src":"4255:4:72","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":16553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4260:7:72","memberName":"tokenId","nodeType":"MemberAccess","referencedDeclaration":29107,"src":"4255:12:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bytes29_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (bytes29)"}},"id":16554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4255:14:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"nodeType":"VariableDeclarationStatement","src":"4236:33:72"},{"assignments":[16557],"declarations":[{"constant":false,"id":16557,"mutability":"mutable","name":"_action","nameLocation":"4283:7:72","nodeType":"VariableDeclaration","scope":16591,"src":"4275:15:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":16556,"name":"bytes29","nodeType":"ElementaryTypeName","src":"4275:7:72","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"id":16561,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16558,"name":"_msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16542,"src":"4293:4:72","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":16559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4298:6:72","memberName":"action","nodeType":"MemberAccess","referencedDeclaration":29145,"src":"4293:11:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bytes29_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (bytes29)"}},"id":16560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4293:13:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"nodeType":"VariableDeclarationStatement","src":"4275:31:72"},{"condition":{"id":16565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4371:21:72","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16562,"name":"_action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16557,"src":"4372:7:72","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":16563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4380:10:72","memberName":"isTransfer","nodeType":"MemberAccess","referencedDeclaration":28887,"src":"4372:18:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bool_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (bool)"}},"id":16564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4372:20:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16570,"nodeType":"IfStatement","src":"4367:81:72","trueBody":{"id":16569,"nodeType":"Block","src":"4394:54:72","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16566,"name":"InboxFacet__handle_notTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16456,"src":"4409:30:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":16567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4409:32:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16568,"nodeType":"RevertStatement","src":"4402:39:72"}]}},{"assignments":[16572,16574],"declarations":[{"constant":false,"id":16572,"mutability":"mutable","name":"_token","nameLocation":"4659:6:72","nodeType":"VariableDeclaration","scope":16591,"src":"4651:14:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16571,"name":"address","nodeType":"ElementaryTypeName","src":"4651:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16574,"mutability":"mutable","name":"_amount","nameLocation":"4675:7:72","nodeType":"VariableDeclaration","scope":16591,"src":"4667:15:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16573,"name":"uint256","nodeType":"ElementaryTypeName","src":"4667:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16581,"initialValue":{"arguments":[{"id":16576,"name":"_origin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16526,"src":"4700:7:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":16577,"name":"_nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16528,"src":"4709:6:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":16578,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16551,"src":"4717:8:72","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},{"id":16579,"name":"_action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16557,"src":"4727:7:72","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes29","typeString":"bytes29"},{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":16575,"name":"_creditTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16946,"src":"4686:13:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint32_$_t_uint32_$_t_bytes29_$_t_bytes29_$returns$_t_address_$_t_uint256_$","typeString":"function (uint32,uint32,bytes29,bytes29) returns (address,uint256)"}},"id":16580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4686:49:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4650:85:72"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16583,"name":"_action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16557,"src":"4784:7:72","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":16584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4792:10:72","memberName":"transferId","nodeType":"MemberAccess","referencedDeclaration":29082,"src":"4784:18:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (bytes32)"}},"id":16585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4784:20:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":16586,"name":"_origin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16526,"src":"4806:7:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":16587,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16572,"src":"4815:6:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16588,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16574,"src":"4823:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16582,"name":"_reconcile","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16752,"src":"4773:10:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_uint32_$_t_address_$_t_uint256_$returns$__$","typeString":"function (bytes32,uint32,address,uint256)"}},"id":16589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4773:58:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16590,"nodeType":"ExpressionStatement","src":"4773:58:72"}]},"documentation":{"id":16524,"nodeType":"StructuredDocumentation","src":"3688:271:72","text":" @notice Handles an incoming cross-chain message.\n @param _origin The origin domain.\n @param _nonce The unique identifier for the message from origin to destination.\n @param _sender The sender address.\n @param _message The message body."},"functionSelector":"ab2dc3f5","id":16592,"implemented":true,"kind":"function","modifiers":[{"id":16535,"kind":"modifierInvocation","modifierName":{"id":16534,"name":"onlyReplica","nameLocations":["4078:11:72"],"nodeType":"IdentifierPath","referencedDeclaration":16504,"src":"4078:11:72"},"nodeType":"ModifierInvocation","src":"4078:11:72"},{"arguments":[{"id":16537,"name":"_origin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16526,"src":"4108:7:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":16538,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16530,"src":"4117:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":16539,"kind":"modifierInvocation","modifierName":{"id":16536,"name":"onlyRemoteHandler","nameLocations":["4090:17:72"],"nodeType":"IdentifierPath","referencedDeclaration":16523,"src":"4090:17:72"},"nodeType":"ModifierInvocation","src":"4090:35:72"}],"name":"handle","nameLocation":"3971:6:72","nodeType":"FunctionDefinition","parameters":{"id":16533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16526,"mutability":"mutable","name":"_origin","nameLocation":"3990:7:72","nodeType":"VariableDeclaration","scope":16592,"src":"3983:14:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16525,"name":"uint32","nodeType":"ElementaryTypeName","src":"3983:6:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":16528,"mutability":"mutable","name":"_nonce","nameLocation":"4010:6:72","nodeType":"VariableDeclaration","scope":16592,"src":"4003:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16527,"name":"uint32","nodeType":"ElementaryTypeName","src":"4003:6:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":16530,"mutability":"mutable","name":"_sender","nameLocation":"4030:7:72","nodeType":"VariableDeclaration","scope":16592,"src":"4022:15:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16529,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4022:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":16532,"mutability":"mutable","name":"_message","nameLocation":"4056:8:72","nodeType":"VariableDeclaration","scope":16592,"src":"4043:21:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":16531,"name":"bytes","nodeType":"ElementaryTypeName","src":"4043:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3977:91:72"},"returnParameters":{"id":16540,"nodeType":"ParameterList","parameters":[],"src":"4126:0:72"},"scope":16947,"src":"3962:874:72","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":16751,"nodeType":"Block","src":"5457:2289:72","statements":[{"assignments":[16606],"declarations":[{"constant":false,"id":16606,"mutability":"mutable","name":"status","nameLocation":"5733:6:72","nodeType":"VariableDeclaration","scope":16751,"src":"5707:32:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"},"typeName":{"id":16605,"nodeType":"UserDefinedTypeName","pathNode":{"id":16604,"name":"DestinationTransferStatus","nameLocations":["5707:25:72"],"nodeType":"IdentifierPath","referencedDeclaration":29324,"src":"5707:25:72"},"referencedDeclaration":29324,"src":"5707:25:72","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"visibility":"internal"}],"id":16611,"initialValue":{"baseExpression":{"expression":{"id":16607,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"5742:1:72","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":16608,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5744:14:72","memberName":"transferStatus","nodeType":"MemberAccess","referencedDeclaration":29432,"src":"5742:16:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"mapping(bytes32 => enum DestinationTransferStatus)"}},"id":16610,"indexExpression":{"id":16609,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16595,"src":"5759:11:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5742:29:72","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"nodeType":"VariableDeclarationStatement","src":"5707:64:72"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":16620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"},"id":16615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16612,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16606,"src":"5781:6:72","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":16613,"name":"DestinationTransferStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29324,"src":"5791:25:72","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"type(enum DestinationTransferStatus)"}},"id":16614,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5817:4:72","memberName":"None","nodeType":"MemberAccess","referencedDeclaration":29320,"src":"5791:30:72","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"src":"5781:40:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"},"id":16619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16616,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16606,"src":"5825:6:72","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":16617,"name":"DestinationTransferStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29324,"src":"5835:25:72","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"type(enum DestinationTransferStatus)"}},"id":16618,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5861:8:72","memberName":"Executed","nodeType":"MemberAccess","referencedDeclaration":29322,"src":"5835:34:72","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"src":"5825:44:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5781:88:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16625,"nodeType":"IfStatement","src":"5777:157:72","trueBody":{"id":16624,"nodeType":"Block","src":"5871:63:72","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16621,"name":"InboxFacet__reconcile_alreadyReconciled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16458,"src":"5886:39:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":16622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5886:41:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16623,"nodeType":"RevertStatement","src":"5879:48:72"}]}},{"expression":{"id":16640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":16626,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"5980:1:72","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":16629,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5982:14:72","memberName":"transferStatus","nodeType":"MemberAccess","referencedDeclaration":29432,"src":"5980:16:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"mapping(bytes32 => enum DestinationTransferStatus)"}},"id":16630,"indexExpression":{"id":16628,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16595,"src":"5997:11:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5980:29:72","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"},"id":16634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16631,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16606,"src":"6012:6:72","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":16632,"name":"DestinationTransferStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29324,"src":"6022:25:72","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"type(enum DestinationTransferStatus)"}},"id":16633,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6048:4:72","memberName":"None","nodeType":"MemberAccess","referencedDeclaration":29320,"src":"6022:30:72","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"src":"6012:40:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":16637,"name":"DestinationTransferStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29324,"src":"6106:25:72","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"type(enum DestinationTransferStatus)"}},"id":16638,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6132:9:72","memberName":"Completed","nodeType":"MemberAccess","referencedDeclaration":29323,"src":"6106:35:72","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"id":16639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6012:129:72","trueExpression":{"expression":{"id":16635,"name":"DestinationTransferStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29324,"src":"6061:25:72","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"type(enum DestinationTransferStatus)"}},"id":16636,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6087:10:72","memberName":"Reconciled","nodeType":"MemberAccess","referencedDeclaration":29321,"src":"6061:36:72","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"src":"5980:161:72","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"id":16641,"nodeType":"ExpressionStatement","src":"5980:161:72"},{"assignments":[16646],"declarations":[{"constant":false,"id":16646,"mutability":"mutable","name":"routers","nameLocation":"6521:7:72","nodeType":"VariableDeclaration","scope":16751,"src":"6504:24:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16644,"name":"address","nodeType":"ElementaryTypeName","src":"6504:7:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16645,"nodeType":"ArrayTypeName","src":"6504:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":16651,"initialValue":{"baseExpression":{"expression":{"id":16647,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"6531:1:72","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":16648,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6533:15:72","memberName":"routedTransfers","nodeType":"MemberAccess","referencedDeclaration":29438,"src":"6531:17:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_address_$dyn_storage_$","typeString":"mapping(bytes32 => address[] storage ref)"}},"id":16650,"indexExpression":{"id":16649,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16595,"src":"6549:11:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6531:30:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"6504:57:72"},{"assignments":[16653],"declarations":[{"constant":false,"id":16653,"mutability":"mutable","name":"portalTransferAmount","nameLocation":"6815:20:72","nodeType":"VariableDeclaration","scope":16751,"src":"6807:28:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16652,"name":"uint256","nodeType":"ElementaryTypeName","src":"6807:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16663,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":16654,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"6838:1:72","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":16655,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6840:10:72","memberName":"portalDebt","nodeType":"MemberAccess","referencedDeclaration":29521,"src":"6838:12:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16657,"indexExpression":{"id":16656,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16595,"src":"6851:11:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6838:25:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"baseExpression":{"expression":{"id":16658,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"6866:1:72","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":16659,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6868:13:72","memberName":"portalFeeDebt","nodeType":"MemberAccess","referencedDeclaration":29526,"src":"6866:15:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16661,"indexExpression":{"id":16660,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16595,"src":"6882:11:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6866:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6838:56:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6807:87:72"},{"assignments":[16665],"declarations":[{"constant":false,"id":16665,"mutability":"mutable","name":"pathLen","nameLocation":"6909:7:72","nodeType":"VariableDeclaration","scope":16751,"src":"6901:15:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16664,"name":"uint256","nodeType":"ElementaryTypeName","src":"6901:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16668,"initialValue":{"expression":{"id":16666,"name":"routers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16646,"src":"6919:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":16667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6927:6:72","memberName":"length","nodeType":"MemberAccess","src":"6919:14:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6901:32:72"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":16675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16669,"name":"portalTransferAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16653,"src":"7005:20:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":16670,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7029:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7005:25:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16672,"name":"pathLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16665,"src":"7034:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"31","id":16673,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7045:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7034:12:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7005:41:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16680,"nodeType":"IfStatement","src":"7001:107:72","trueBody":{"id":16679,"nodeType":"Block","src":"7048:60:72","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16676,"name":"InboxFacet__reconcile_noPortalRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16460,"src":"7063:36:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":16677,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7063:38:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16678,"nodeType":"RevertStatement","src":"7056:45:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16681,"name":"pathLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16665,"src":"7118:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":16682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7129:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7118:12:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16740,"nodeType":"IfStatement","src":"7114:546:72","trueBody":{"id":16739,"nodeType":"Block","src":"7132:528:72","statements":[{"assignments":[16685],"declarations":[{"constant":false,"id":16685,"mutability":"mutable","name":"routerAmount","nameLocation":"7232:12:72","nodeType":"VariableDeclaration","scope":16739,"src":"7224:20:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16684,"name":"uint256","nodeType":"ElementaryTypeName","src":"7224:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16689,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16686,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16601,"src":"7247:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":16687,"name":"pathLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16665,"src":"7257:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7247:17:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7224:40:72"},{"body":{"id":16714,"nodeType":"Block","src":"7307:116:72","statements":[{"expression":{"id":16708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"expression":{"id":16698,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"7317:1:72","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":16704,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7319:14:72","memberName":"routerBalances","nodeType":"MemberAccess","referencedDeclaration":29445,"src":"7317:16:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":16705,"indexExpression":{"baseExpression":{"id":16700,"name":"routers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16646,"src":"7334:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":16702,"indexExpression":{"id":16701,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16691,"src":"7342:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7334:10:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7317:28:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":16706,"indexExpression":{"id":16703,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16599,"src":"7346:6:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7317:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":16707,"name":"routerAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16685,"src":"7357:12:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7317:52:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16709,"nodeType":"ExpressionStatement","src":"7317:52:72"},{"id":16713,"nodeType":"UncheckedBlock","src":"7379:36:72","statements":[{"expression":{"id":16711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7401:3:72","subExpression":{"id":16710,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16691,"src":"7403:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16712,"nodeType":"ExpressionStatement","src":"7401:3:72"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16693,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16691,"src":"7288:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16694,"name":"pathLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16665,"src":"7292:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":16695,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7302:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7292:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7288:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16715,"initializationExpression":{"assignments":[16691],"declarations":[{"constant":false,"id":16691,"mutability":"mutable","name":"i","nameLocation":"7285:1:72","nodeType":"VariableDeclaration","scope":16715,"src":"7277:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16690,"name":"uint256","nodeType":"ElementaryTypeName","src":"7277:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16692,"nodeType":"VariableDeclarationStatement","src":"7277:9:72"},"nodeType":"ForStatement","src":"7272:151:72"},{"assignments":[16717],"declarations":[{"constant":false,"id":16717,"mutability":"mutable","name":"toSweep","nameLocation":"7544:7:72","nodeType":"VariableDeclaration","scope":16739,"src":"7536:15:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16716,"name":"uint256","nodeType":"ElementaryTypeName","src":"7536:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16724,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16718,"name":"routerAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16685,"src":"7554:12:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16719,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16601,"src":"7570:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":16720,"name":"pathLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16665,"src":"7580:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7570:17:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16722,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7569:19:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7554:34:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7536:52:72"},{"expression":{"id":16737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"expression":{"id":16725,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"7596:1:72","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":16733,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7598:14:72","memberName":"routerBalances","nodeType":"MemberAccess","referencedDeclaration":29445,"src":"7596:16:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":16734,"indexExpression":{"baseExpression":{"id":16727,"name":"routers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16646,"src":"7613:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":16731,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16728,"name":"pathLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16665,"src":"7621:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":16729,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7631:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7621:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7613:20:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7596:38:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":16735,"indexExpression":{"id":16732,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16599,"src":"7635:6:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7596:46:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":16736,"name":"toSweep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16717,"src":"7646:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7596:57:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16738,"nodeType":"ExpressionStatement","src":"7596:57:72"}]}},{"eventCall":{"arguments":[{"id":16742,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16595,"src":"7682:11:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":16743,"name":"_origin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16597,"src":"7695:7:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":16744,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16599,"src":"7704:6:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16745,"name":"routers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16646,"src":"7712:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":16746,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16601,"src":"7721:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16747,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7730:3:72","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7734:6:72","memberName":"sender","nodeType":"MemberAccess","src":"7730:10:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":16741,"name":"Reconciled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16476,"src":"7671:10:72","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint32_$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$_t_address_$returns$__$","typeString":"function (bytes32,uint32,address,address[] memory,uint256,address)"}},"id":16749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7671:70:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16750,"nodeType":"EmitStatement","src":"7666:75:72"}]},"documentation":{"id":16593,"nodeType":"StructuredDocumentation","src":"4891:444:72","text":" @notice Reconcile the transfer, marking the transfer ID in storage as authenticated. Reimburses\n routers with local asset if it was a fast-liquidity transfer (i.e. it was previously executed).\n @param _transferId Unique identifier of the transfer.\n @param _origin Origin domain of the transfer.\n @param _asset Local asset address (representational or canonical).\n @param _amount The amount of the local asset."},"id":16752,"implemented":true,"kind":"function","modifiers":[],"name":"_reconcile","nameLocation":"5347:10:72","nodeType":"FunctionDefinition","parameters":{"id":16602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16595,"mutability":"mutable","name":"_transferId","nameLocation":"5371:11:72","nodeType":"VariableDeclaration","scope":16752,"src":"5363:19:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16594,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5363:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":16597,"mutability":"mutable","name":"_origin","nameLocation":"5395:7:72","nodeType":"VariableDeclaration","scope":16752,"src":"5388:14:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16596,"name":"uint32","nodeType":"ElementaryTypeName","src":"5388:6:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":16599,"mutability":"mutable","name":"_asset","nameLocation":"5416:6:72","nodeType":"VariableDeclaration","scope":16752,"src":"5408:14:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16598,"name":"address","nodeType":"ElementaryTypeName","src":"5408:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16601,"mutability":"mutable","name":"_amount","nameLocation":"5436:7:72","nodeType":"VariableDeclaration","scope":16752,"src":"5428:15:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16600,"name":"uint256","nodeType":"ElementaryTypeName","src":"5428:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5357:90:72"},"returnParameters":{"id":16603,"nodeType":"ParameterList","parameters":[],"src":"5457:0:72"},"scope":16947,"src":"5338:2408:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16766,"nodeType":"Block","src":"8003:70:72","statements":[{"expression":{"arguments":[{"id":16763,"name":"_potentialReplica","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16755,"src":"8050:17:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":16760,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8016:1:72","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":16761,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8018:21:72","memberName":"xAppConnectionManager","nodeType":"MemberAccess","referencedDeclaration":29535,"src":"8016:23:72","typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"}},"id":16762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8040:9:72","memberName":"isReplica","nodeType":"MemberAccess","referencedDeclaration":47798,"src":"8016:33:72","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":16764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8016:52:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16759,"id":16765,"nodeType":"Return","src":"8009:59:72"}]},"documentation":{"id":16753,"nodeType":"StructuredDocumentation","src":"7750:174:72","text":" @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\n @return True if _potentialReplica is an enrolled Replica"},"id":16767,"implemented":true,"kind":"function","modifiers":[],"name":"_isReplica","nameLocation":"7936:10:72","nodeType":"FunctionDefinition","parameters":{"id":16756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16755,"mutability":"mutable","name":"_potentialReplica","nameLocation":"7955:17:72","nodeType":"VariableDeclaration","scope":16767,"src":"7947:25:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16754,"name":"address","nodeType":"ElementaryTypeName","src":"7947:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7946:27:72"},"returnParameters":{"id":16759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16758,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16767,"src":"7997:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16757,"name":"bool","nodeType":"ElementaryTypeName","src":"7997:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7996:6:72"},"scope":16947,"src":"7927:146:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16791,"nodeType":"Block","src":"8416:82:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":16789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":16782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":16777,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8429:1:72","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":16778,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8431:7:72","memberName":"remotes","nodeType":"MemberAccess","referencedDeclaration":29468,"src":"8429:9:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint32_$_t_bytes32_$","typeString":"mapping(uint32 => bytes32)"}},"id":16780,"indexExpression":{"id":16779,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16770,"src":"8439:7:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8429:18:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":16781,"name":"_xAppHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16772,"src":"8451:12:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8429:34:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":16788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16783,"name":"_xAppHandler","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16772,"src":"8467:12:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":16786,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8491:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":16785,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8483:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16784,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8483:7:72","typeDescriptions":{}}},"id":16787,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8483:10:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8467:26:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8429:64:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16776,"id":16790,"nodeType":"Return","src":"8422:71:72"}]},"documentation":{"id":16768,"nodeType":"StructuredDocumentation","src":"8077:243:72","text":" @notice Return true if the given domain / router is the address of a remote xApp Router\n @param _domain The domain of the potential remote xApp Router\n @param _xAppHandler The address of the potential remote xApp handler"},"id":16792,"implemented":true,"kind":"function","modifiers":[],"name":"_isRemoteHandler","nameLocation":"8332:16:72","nodeType":"FunctionDefinition","parameters":{"id":16773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16770,"mutability":"mutable","name":"_domain","nameLocation":"8356:7:72","nodeType":"VariableDeclaration","scope":16792,"src":"8349:14:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16769,"name":"uint32","nodeType":"ElementaryTypeName","src":"8349:6:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":16772,"mutability":"mutable","name":"_xAppHandler","nameLocation":"8373:12:72","nodeType":"VariableDeclaration","scope":16792,"src":"8365:20:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16771,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8365:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8348:38:72"},"returnParameters":{"id":16776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16775,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16792,"src":"8410:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16774,"name":"bool","nodeType":"ElementaryTypeName","src":"8410:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8409:6:72"},"scope":16947,"src":"8323:175:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16945,"nodeType":"Block","src":"9376:1979:72","statements":[{"assignments":[16809],"declarations":[{"constant":false,"id":16809,"mutability":"mutable","name":"_canonicalId","nameLocation":"9390:12:72","nodeType":"VariableDeclaration","scope":16945,"src":"9382:20:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16808,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9382:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":16813,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16810,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16799,"src":"9405:8:72","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":16811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9414:2:72","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":28997,"src":"9405:11:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (bytes32)"}},"id":16812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9405:13:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9382:36:72"},{"assignments":[16815],"declarations":[{"constant":false,"id":16815,"mutability":"mutable","name":"_canonicalDomain","nameLocation":"9431:16:72","nodeType":"VariableDeclaration","scope":16945,"src":"9424:23:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16814,"name":"uint32","nodeType":"ElementaryTypeName","src":"9424:6:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":16819,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16816,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16799,"src":"9450:8:72","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":16817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9459:6:72","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":28977,"src":"9450:15:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (uint32)"}},"id":16818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9450:17:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"9424:43:72"},{"assignments":[16821],"declarations":[{"constant":false,"id":16821,"mutability":"mutable","name":"_amount","nameLocation":"9507:7:72","nodeType":"VariableDeclaration","scope":16945,"src":"9499:15:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16820,"name":"uint256","nodeType":"ElementaryTypeName","src":"9499:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16825,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16822,"name":"_action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16801,"src":"9517:7:72","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":16823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9525:4:72","memberName":"amnt","nodeType":"MemberAccess","referencedDeclaration":29067,"src":"9517:12:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint256_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (uint256)"}},"id":16824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9517:14:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9499:32:72"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":16839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":16832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16826,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16821,"src":"9772:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":16827,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9783:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9772:12:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":16831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16829,"name":"_canonicalDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16815,"src":"9788:16:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":16830,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9808:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9788:21:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9772:37:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":16838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16833,"name":"_canonicalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16809,"src":"9813:12:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":16836,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9837:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":16835,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9829:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16834,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9829:7:72","typeDescriptions":{}}},"id":16837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9829:10:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"9813:26:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9772:67:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16868,"nodeType":"IfStatement","src":"9768:307:72","trueBody":{"id":16867,"nodeType":"Block","src":"9841:234:72","statements":[{"eventCall":{"arguments":[{"arguments":[{"id":16842,"name":"_origin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16795,"src":"9973:7:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":16843,"name":"_nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16797,"src":"9982:6:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":16841,"name":"_originAndNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14019,"src":"9957:15:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint32_$_t_uint32_$returns$_t_uint64_$","typeString":"function (uint32,uint32) pure returns (uint64)"}},"id":16844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9957:32:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"arguments":[{"hexValue":"30","id":16847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9999:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":16846,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9991:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16845,"name":"address","nodeType":"ElementaryTypeName","src":"9991:7:72","typeDescriptions":{}}},"id":16848,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9991:10:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":16851,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10011:4:72","typeDescriptions":{"typeIdentifier":"t_contract$_InboxFacet_$16947","typeString":"contract InboxFacet"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_InboxFacet_$16947","typeString":"contract InboxFacet"}],"id":16850,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10003:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16849,"name":"address","nodeType":"ElementaryTypeName","src":"10003:7:72","typeDescriptions":{}}},"id":16852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10003:13:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":16855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10026:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":16854,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10018:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16853,"name":"address","nodeType":"ElementaryTypeName","src":"10018:7:72","typeDescriptions":{}}},"id":16856,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10018:10:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16857,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16821,"src":"10030:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16840,"name":"Receive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16489,"src":"9949:7:72","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint64_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (uint64,address,address,address,uint256)"}},"id":16858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9949:89:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16859,"nodeType":"EmitStatement","src":"9944:94:72"},{"expression":{"components":[{"arguments":[{"hexValue":"30","id":16862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10062:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":16861,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10054:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16860,"name":"address","nodeType":"ElementaryTypeName","src":"10054:7:72","typeDescriptions":{}}},"id":16863,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10054:10:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":16864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10066:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":16865,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"10053:15:72","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}},"functionReturnParameters":16807,"id":16866,"nodeType":"Return","src":"10046:22:72"}]}},{"assignments":[16870],"declarations":[{"constant":false,"id":16870,"mutability":"mutable","name":"_token","nameLocation":"10156:6:72","nodeType":"VariableDeclaration","scope":16945,"src":"10148:14:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16869,"name":"address","nodeType":"ElementaryTypeName","src":"10148:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":16880,"initialValue":{"arguments":[{"arguments":[{"id":16874,"name":"_canonicalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16809,"src":"10221:12:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":16875,"name":"_canonicalDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16815,"src":"10235:16:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":16872,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"10187:10:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":16873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10198:22:72","memberName":"calculateCanonicalHash","nodeType":"MemberAccess","referencedDeclaration":28598,"src":"10187:33:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint32) pure returns (bytes32)"}},"id":16876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10187:65:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":16877,"name":"_canonicalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16809,"src":"10260:12:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":16878,"name":"_canonicalDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16815,"src":"10280:16:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":16871,"name":"_getLocalAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"10165:14:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_uint32_$returns$_t_address_$","typeString":"function (bytes32,bytes32,uint32) view returns (address)"}},"id":16879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10165:137:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"10148:154:72"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16881,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16821,"src":"10313:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":16882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10324:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10313:12:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16906,"nodeType":"IfStatement","src":"10309:244:72","trueBody":{"id":16905,"nodeType":"Block","src":"10327:226:72","statements":[{"eventCall":{"arguments":[{"arguments":[{"id":16886,"name":"_origin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16795,"src":"10459:7:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":16887,"name":"_nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16797,"src":"10468:6:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":16885,"name":"_originAndNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14019,"src":"10443:15:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint32_$_t_uint32_$returns$_t_uint64_$","typeString":"function (uint32,uint32) pure returns (uint64)"}},"id":16888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10443:32:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":16889,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16870,"src":"10477:6:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":16892,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10493:4:72","typeDescriptions":{"typeIdentifier":"t_contract$_InboxFacet_$16947","typeString":"contract InboxFacet"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_InboxFacet_$16947","typeString":"contract InboxFacet"}],"id":16891,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10485:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16890,"name":"address","nodeType":"ElementaryTypeName","src":"10485:7:72","typeDescriptions":{}}},"id":16893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10485:13:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":16896,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10508:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":16895,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10500:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16894,"name":"address","nodeType":"ElementaryTypeName","src":"10500:7:72","typeDescriptions":{}}},"id":16897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10500:10:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16898,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16821,"src":"10512:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16884,"name":"Receive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16489,"src":"10435:7:72","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint64_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (uint64,address,address,address,uint256)"}},"id":16899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10435:85:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16900,"nodeType":"EmitStatement","src":"10430:90:72"},{"expression":{"components":[{"id":16901,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16870,"src":"10536:6:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":16902,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10544:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":16903,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10535:11:72","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}},"functionReturnParameters":16807,"id":16904,"nodeType":"Return","src":"10528:18:72"}]}},{"condition":{"id":16910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10618:23:72","subExpression":{"arguments":[{"id":16908,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16870,"src":"10634:6:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16907,"name":"_isLocalOrigin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14102,"src":"10619:14:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":16909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10619:22:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16923,"nodeType":"IfStatement","src":"10614:282:72","trueBody":{"id":16922,"nodeType":"Block","src":"10643:253:72","statements":[{"expression":{"arguments":[{"arguments":[{"id":16917,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10874:4:72","typeDescriptions":{"typeIdentifier":"t_contract$_InboxFacet_$16947","typeString":"contract InboxFacet"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_InboxFacet_$16947","typeString":"contract InboxFacet"}],"id":16916,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10866:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16915,"name":"address","nodeType":"ElementaryTypeName","src":"10866:7:72","typeDescriptions":{}}},"id":16918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10866:13:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16919,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16821,"src":"10881:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":16912,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16870,"src":"10853:6:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16911,"name":"IBridgeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25890,"src":"10840:12:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBridgeToken_$25890_$","typeString":"type(contract IBridgeToken)"}},"id":16913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10840:20:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBridgeToken_$25890","typeString":"contract IBridgeToken"}},"id":16914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10861:4:72","memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":25882,"src":"10840:25:72","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":16920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10840:49:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16921,"nodeType":"ExpressionStatement","src":"10840:49:72"}]}},{"eventCall":{"arguments":[{"arguments":[{"id":16926,"name":"_origin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16795,"src":"11259:7:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":16927,"name":"_nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16797,"src":"11268:6:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":16925,"name":"_originAndNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14019,"src":"11243:15:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint32_$_t_uint32_$returns$_t_uint64_$","typeString":"function (uint32,uint32) pure returns (uint64)"}},"id":16928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11243:32:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":16929,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16870,"src":"11277:6:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":16932,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11293:4:72","typeDescriptions":{"typeIdentifier":"t_contract$_InboxFacet_$16947","typeString":"contract InboxFacet"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_InboxFacet_$16947","typeString":"contract InboxFacet"}],"id":16931,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11285:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16930,"name":"address","nodeType":"ElementaryTypeName","src":"11285:7:72","typeDescriptions":{}}},"id":16933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11285:13:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":16936,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11308:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":16935,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11300:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16934,"name":"address","nodeType":"ElementaryTypeName","src":"11300:7:72","typeDescriptions":{}}},"id":16937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11300:10:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16938,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16821,"src":"11312:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16924,"name":"Receive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16489,"src":"11235:7:72","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint64_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (uint64,address,address,address,uint256)"}},"id":16939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11235:85:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16940,"nodeType":"EmitStatement","src":"11230:90:72"},{"expression":{"components":[{"id":16941,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16870,"src":"11334:6:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16942,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16821,"src":"11342:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16943,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11333:17:72","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}},"functionReturnParameters":16807,"id":16944,"nodeType":"Return","src":"11326:24:72"}]},"documentation":{"id":16793,"nodeType":"StructuredDocumentation","src":"8502:726:72","text":" @notice If applicable, mints tokens corresponding to the inbound message action.\n @dev IFF the asset is representational (i.e. originates from a remote chain), tokens will be minted.\n Otherwise, the token must be canonical (i.e. we are on the token's home chain), and the corresponding\n amount will already be available in escrow in this contract.\n @param _origin The domain of the chain from which the transfer originated.\n @param _nonce The unique identifier for the message from origin to destination.\n @param _tokenId The canonical token identifier to credit.\n @param _action The contents of the transfer message.\n @return _token The address of the local token contract."},"id":16946,"implemented":true,"kind":"function","modifiers":[],"name":"_creditTokens","nameLocation":"9240:13:72","nodeType":"FunctionDefinition","parameters":{"id":16802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16795,"mutability":"mutable","name":"_origin","nameLocation":"9266:7:72","nodeType":"VariableDeclaration","scope":16946,"src":"9259:14:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16794,"name":"uint32","nodeType":"ElementaryTypeName","src":"9259:6:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":16797,"mutability":"mutable","name":"_nonce","nameLocation":"9286:6:72","nodeType":"VariableDeclaration","scope":16946,"src":"9279:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16796,"name":"uint32","nodeType":"ElementaryTypeName","src":"9279:6:72","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":16799,"mutability":"mutable","name":"_tokenId","nameLocation":"9306:8:72","nodeType":"VariableDeclaration","scope":16946,"src":"9298:16:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":16798,"name":"bytes29","nodeType":"ElementaryTypeName","src":"9298:7:72","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":16801,"mutability":"mutable","name":"_action","nameLocation":"9328:7:72","nodeType":"VariableDeclaration","scope":16946,"src":"9320:15:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":16800,"name":"bytes29","nodeType":"ElementaryTypeName","src":"9320:7:72","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"9253:86:72"},"returnParameters":{"id":16807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16804,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16946,"src":"9358:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16803,"name":"address","nodeType":"ElementaryTypeName","src":"9358:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16806,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16946,"src":"9367:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16805,"name":"uint256","nodeType":"ElementaryTypeName","src":"9367:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9357:18:72"},"scope":16947,"src":"9231:2124:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":16948,"src":"883:10474:72","usedErrors":[13728,13730,13732,13734,13736,13738,13740,13742,13744,13746,16452,16454,16456,16458,16460,27664,50215,50225,50227,50235]}],"src":"46:11312:72"},"id":72},"contracts/core/connext/facets/PortalFacet.sol":{"ast":{"absolutePath":"contracts/core/connext/facets/PortalFacet.sol","exportedSymbols":{"AssetLogic":[28696],"BaseConnextFacet":[14146],"Constants":[29304],"IAavePool":[25862],"IERC20":[10812],"PortalFacet":[17353],"SafeERC20":[11154],"TransferInfo":[29351]},"id":17354,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":16949,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:73"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":16951,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17354,"sourceUnit":11155,"src":"64:82:73","symbolAliases":[{"foreign":{"id":16950,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11154,"src":"72:9:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":16953,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17354,"sourceUnit":10813,"src":"147:70:73","symbolAliases":[{"foreign":{"id":16952,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10812,"src":"155:6:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/facets/BaseConnextFacet.sol","file":"./BaseConnextFacet.sol","id":16955,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17354,"sourceUnit":14147,"src":"219:56:73","symbolAliases":[{"foreign":{"id":16954,"name":"BaseConnextFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14146,"src":"227:16:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IAavePool.sol","file":"../interfaces/IAavePool.sol","id":16957,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17354,"sourceUnit":25863,"src":"277:54:73","symbolAliases":[{"foreign":{"id":16956,"name":"IAavePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25862,"src":"285:9:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/AssetLogic.sol","file":"../libraries/AssetLogic.sol","id":16959,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17354,"sourceUnit":28697,"src":"333:55:73","symbolAliases":[{"foreign":{"id":16958,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"341:10:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/Constants.sol","file":"../libraries/Constants.sol","id":16961,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17354,"sourceUnit":29305,"src":"389:53:73","symbolAliases":[{"foreign":{"id":16960,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"397:9:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/LibConnextStorage.sol","file":"../libraries/LibConnextStorage.sol","id":16963,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17354,"sourceUnit":29546,"src":"443:64:73","symbolAliases":[{"foreign":{"id":16962,"name":"TransferInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29351,"src":"451:12:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":16964,"name":"BaseConnextFacet","nameLocations":["533:16:73"],"nodeType":"IdentifierPath","referencedDeclaration":14146,"src":"533:16:73"},"id":16965,"nodeType":"InheritanceSpecifier","src":"533:16:73"}],"canonicalName":"PortalFacet","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":17353,"linearizedBaseContracts":[17353,14146],"name":"PortalFacet","nameLocation":"518:11:73","nodeType":"ContractDefinition","nodes":[{"errorSelector":"f48157d1","id":16967,"name":"PortalFacet__setAavePortalFee_invalidFee","nameLocation":"602:40:73","nodeType":"ErrorDefinition","parameters":{"id":16966,"nodeType":"ParameterList","parameters":[],"src":"642:2:73"},"src":"596:49:73"},{"errorSelector":"b074ae73","id":16969,"name":"PortalFacet__repayAavePortal_assetNotApproved","nameLocation":"654:45:73","nodeType":"ErrorDefinition","parameters":{"id":16968,"nodeType":"ParameterList","parameters":[],"src":"699:2:73"},"src":"648:54:73"},{"errorSelector":"badaeb59","id":16971,"name":"PortalFacet__repayAavePortal_insufficientFunds","nameLocation":"711:46:73","nodeType":"ErrorDefinition","parameters":{"id":16970,"nodeType":"ParameterList","parameters":[],"src":"757:2:73"},"src":"705:55:73"},{"errorSelector":"61abc7c6","id":16973,"name":"PortalFacet__repayAavePortalFor_zeroAmount","nameLocation":"769:42:73","nodeType":"ErrorDefinition","parameters":{"id":16972,"nodeType":"ParameterList","parameters":[],"src":"811:2:73"},"src":"763:51:73"},{"errorSelector":"73797376","id":16975,"name":"PortalFacet__repayAavePortalFor_invalidAsset","nameLocation":"823:44:73","nodeType":"ErrorDefinition","parameters":{"id":16974,"nodeType":"ParameterList","parameters":[],"src":"867:2:73"},"src":"817:53:73"},{"anonymous":false,"documentation":{"id":16976,"nodeType":"StructuredDocumentation","src":"913:155:73","text":" @notice Emitted `setAavePool` is updated\n @param updated - The updated address\n @param caller - The account that called the function"},"eventSelector":"7935dbc7e9662d3877fe03509de1a139f55a861386088919480ed3162e2976ec","id":16982,"name":"AavePoolUpdated","nameLocation":"1077:15:73","nodeType":"EventDefinition","parameters":{"id":16981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16978,"indexed":false,"mutability":"mutable","name":"updated","nameLocation":"1101:7:73","nodeType":"VariableDeclaration","scope":16982,"src":"1093:15:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16977,"name":"address","nodeType":"ElementaryTypeName","src":"1093:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16980,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"1118:6:73","nodeType":"VariableDeclaration","scope":16982,"src":"1110:14:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16979,"name":"address","nodeType":"ElementaryTypeName","src":"1110:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1092:33:73"},"src":"1071:55:73"},{"anonymous":false,"documentation":{"id":16983,"nodeType":"StructuredDocumentation","src":"1130:166:73","text":" @notice Emitted `setAavePortalFee` is updated\n @param updated - The updated fee numerator\n @param caller - The account that called the function"},"eventSelector":"7d403a16a513cb194fca13e6aba342102a2a11c978e12a90981891c1a19f0b6f","id":16989,"name":"AavePortalFeeUpdated","nameLocation":"1305:20:73","nodeType":"EventDefinition","parameters":{"id":16988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16985,"indexed":false,"mutability":"mutable","name":"updated","nameLocation":"1334:7:73","nodeType":"VariableDeclaration","scope":16989,"src":"1326:15:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16984,"name":"uint256","nodeType":"ElementaryTypeName","src":"1326:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16987,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"1351:6:73","nodeType":"VariableDeclaration","scope":16989,"src":"1343:14:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16986,"name":"address","nodeType":"ElementaryTypeName","src":"1343:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1325:33:73"},"src":"1299:60:73"},{"anonymous":false,"documentation":{"id":16990,"nodeType":"StructuredDocumentation","src":"1363:280:73","text":" @notice Emitted when a repayment on an Aave portal loan is made\n @param transferId - The transfer debt that was repaid\n @param asset - The asset that was repaid\n @param amount - The amount that was repaid\n @param fee - The fee amount that was repaid"},"eventSelector":"54b01a5ae4ec60eeeef60570103ba1a5de0999725219c02b2baf1b706625bb08","id":17002,"name":"AavePortalRepayment","nameLocation":"1652:19:73","nodeType":"EventDefinition","parameters":{"id":17001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16992,"indexed":true,"mutability":"mutable","name":"transferId","nameLocation":"1688:10:73","nodeType":"VariableDeclaration","scope":17002,"src":"1672:26:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16991,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1672:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":16994,"indexed":false,"mutability":"mutable","name":"asset","nameLocation":"1708:5:73","nodeType":"VariableDeclaration","scope":17002,"src":"1700:13:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16993,"name":"address","nodeType":"ElementaryTypeName","src":"1700:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16996,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1723:6:73","nodeType":"VariableDeclaration","scope":17002,"src":"1715:14:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16995,"name":"uint256","nodeType":"ElementaryTypeName","src":"1715:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16998,"indexed":false,"mutability":"mutable","name":"fee","nameLocation":"1739:3:73","nodeType":"VariableDeclaration","scope":17002,"src":"1731:11:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16997,"name":"uint256","nodeType":"ElementaryTypeName","src":"1731:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17000,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"1752:6:73","nodeType":"VariableDeclaration","scope":17002,"src":"1744:14:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16999,"name":"address","nodeType":"ElementaryTypeName","src":"1744:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1671:88:73"},"src":"1646:114:73"},{"body":{"id":17014,"nodeType":"Block","src":"1894:43:73","statements":[{"expression":{"baseExpression":{"expression":{"id":17009,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"1907:1:73","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17010,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1909:10:73","memberName":"portalDebt","nodeType":"MemberAccess","referencedDeclaration":29521,"src":"1907:12:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":17012,"indexExpression":{"id":17011,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17004,"src":"1920:11:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1907:25:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17008,"id":17013,"nodeType":"Return","src":"1900:32:73"}]},"functionSelector":"09d7ba54","id":17015,"implemented":true,"kind":"function","modifiers":[],"name":"getAavePortalDebt","nameLocation":"1823:17:73","nodeType":"FunctionDefinition","parameters":{"id":17005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17004,"mutability":"mutable","name":"_transferId","nameLocation":"1849:11:73","nodeType":"VariableDeclaration","scope":17015,"src":"1841:19:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17003,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1841:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1840:21:73"},"returnParameters":{"id":17008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17007,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17015,"src":"1885:7:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17006,"name":"uint256","nodeType":"ElementaryTypeName","src":"1885:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1884:9:73"},"scope":17353,"src":"1814:123:73","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":17027,"nodeType":"Block","src":"2024:46:73","statements":[{"expression":{"baseExpression":{"expression":{"id":17022,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"2037:1:73","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17023,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2039:13:73","memberName":"portalFeeDebt","nodeType":"MemberAccess","referencedDeclaration":29526,"src":"2037:15:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":17025,"indexExpression":{"id":17024,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17017,"src":"2053:11:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2037:28:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17021,"id":17026,"nodeType":"Return","src":"2030:35:73"}]},"functionSelector":"d1e5f31c","id":17028,"implemented":true,"kind":"function","modifiers":[],"name":"getAavePortalFeeDebt","nameLocation":"1950:20:73","nodeType":"FunctionDefinition","parameters":{"id":17018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17017,"mutability":"mutable","name":"_transferId","nameLocation":"1979:11:73","nodeType":"VariableDeclaration","scope":17028,"src":"1971:19:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17016,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1971:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1970:21:73"},"returnParameters":{"id":17021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17020,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17028,"src":"2015:7:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17019,"name":"uint256","nodeType":"ElementaryTypeName","src":"2015:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2014:9:73"},"scope":17353,"src":"1941:129:73","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":17036,"nodeType":"Block","src":"2126:28:73","statements":[{"expression":{"expression":{"id":17033,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"2139:1:73","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17034,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2141:8:73","memberName":"aavePool","nodeType":"MemberAccess","referencedDeclaration":29513,"src":"2139:10:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":17032,"id":17035,"nodeType":"Return","src":"2132:17:73"}]},"functionSelector":"a03e4bc3","id":17037,"implemented":true,"kind":"function","modifiers":[],"name":"aavePool","nameLocation":"2083:8:73","nodeType":"FunctionDefinition","parameters":{"id":17029,"nodeType":"ParameterList","parameters":[],"src":"2091:2:73"},"returnParameters":{"id":17032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17031,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17037,"src":"2117:7:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17030,"name":"address","nodeType":"ElementaryTypeName","src":"2117:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2116:9:73"},"scope":17353,"src":"2074:80:73","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":17045,"nodeType":"Block","src":"2215:42:73","statements":[{"expression":{"expression":{"id":17042,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"2228:1:73","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17043,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2230:22:73","memberName":"aavePortalFeeNumerator","nodeType":"MemberAccess","referencedDeclaration":29516,"src":"2228:24:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17041,"id":17044,"nodeType":"Return","src":"2221:31:73"}]},"functionSelector":"ef1eb0c1","id":17046,"implemented":true,"kind":"function","modifiers":[],"name":"aavePortalFee","nameLocation":"2167:13:73","nodeType":"FunctionDefinition","parameters":{"id":17038,"nodeType":"ParameterList","parameters":[],"src":"2180:2:73"},"returnParameters":{"id":17041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17040,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17046,"src":"2206:7:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17039,"name":"uint256","nodeType":"ElementaryTypeName","src":"2206:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2205:9:73"},"scope":17353,"src":"2158:99:73","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":17066,"nodeType":"Block","src":"2586:82:73","statements":[{"expression":{"id":17058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17054,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"2592:1:73","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17056,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2594:8:73","memberName":"aavePool","nodeType":"MemberAccess","referencedDeclaration":29513,"src":"2592:10:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17057,"name":"_aavePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17049,"src":"2605:9:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2592:22:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":17059,"nodeType":"ExpressionStatement","src":"2592:22:73"},{"eventCall":{"arguments":[{"id":17061,"name":"_aavePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17049,"src":"2641:9:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17062,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2652:3:73","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2656:6:73","memberName":"sender","nodeType":"MemberAccess","src":"2652:10:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17060,"name":"AavePoolUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16982,"src":"2625:15:73","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":17064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2625:38:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17065,"nodeType":"EmitStatement","src":"2620:43:73"}]},"documentation":{"id":17047,"nodeType":"StructuredDocumentation","src":"2312:205:73","text":" @notice Sets the Aave Pool contract address.\n @dev Allows to set the aavePool to address zero to disable Aave Portal if needed\n @param _aavePool The address of the Aave Pool contract"},"functionSelector":"349f937c","id":17067,"implemented":true,"kind":"function","modifiers":[{"id":17052,"kind":"modifierInvocation","modifierName":{"id":17051,"name":"onlyOwnerOrAdmin","nameLocations":["2569:16:73"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"2569:16:73"},"nodeType":"ModifierInvocation","src":"2569:16:73"}],"name":"setAavePool","nameLocation":"2529:11:73","nodeType":"FunctionDefinition","parameters":{"id":17050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17049,"mutability":"mutable","name":"_aavePool","nameLocation":"2549:9:73","nodeType":"VariableDeclaration","scope":17067,"src":"2541:17:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17048,"name":"address","nodeType":"ElementaryTypeName","src":"2541:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2540:19:73"},"returnParameters":{"id":17053,"nodeType":"ParameterList","parameters":[],"src":"2586:0:73"},"scope":17353,"src":"2520:148:73","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17095,"nodeType":"Block","src":"2901:246:73","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17075,"name":"_aavePortalFeeNumerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17070,"src":"2911:23:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":17076,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"2937:9:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":17077,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2947:19:73","memberName":"BPS_FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29220,"src":"2937:29:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2911:55:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17082,"nodeType":"IfStatement","src":"2907:110:73","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17079,"name":"PortalFacet__setAavePortalFee_invalidFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16967,"src":"2975:40:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2975:42:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17081,"nodeType":"RevertStatement","src":"2968:49:73"}},{"expression":{"id":17087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17083,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3024:1:73","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17085,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3026:22:73","memberName":"aavePortalFeeNumerator","nodeType":"MemberAccess","referencedDeclaration":29516,"src":"3024:24:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17086,"name":"_aavePortalFeeNumerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17070,"src":"3051:23:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3024:50:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17088,"nodeType":"ExpressionStatement","src":"3024:50:73"},{"eventCall":{"arguments":[{"id":17090,"name":"_aavePortalFeeNumerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17070,"src":"3106:23:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17091,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3131:3:73","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3135:6:73","memberName":"sender","nodeType":"MemberAccess","src":"3131:10:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17089,"name":"AavePortalFeeUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16989,"src":"3085:20:73","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":17093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3085:57:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17094,"nodeType":"EmitStatement","src":"3080:62:73"}]},"documentation":{"id":17068,"nodeType":"StructuredDocumentation","src":"2672:141:73","text":" @notice Sets the Aave Portal fee numerator\n @param _aavePortalFeeNumerator The new value for the Aave Portal fee numerator"},"functionSelector":"3bd30d34","id":17096,"implemented":true,"kind":"function","modifiers":[{"id":17073,"kind":"modifierInvocation","modifierName":{"id":17072,"name":"onlyOwnerOrAdmin","nameLocations":["2884:16:73"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"2884:16:73"},"nodeType":"ModifierInvocation","src":"2884:16:73"}],"name":"setAavePortalFee","nameLocation":"2825:16:73","nodeType":"FunctionDefinition","parameters":{"id":17071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17070,"mutability":"mutable","name":"_aavePortalFeeNumerator","nameLocation":"2850:23:73","nodeType":"VariableDeclaration","scope":17096,"src":"2842:31:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17069,"name":"uint256","nodeType":"ElementaryTypeName","src":"2842:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2841:33:73"},"returnParameters":{"id":17074,"nodeType":"ParameterList","parameters":[],"src":"2901:0:73"},"scope":17353,"src":"2816:331:73","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17199,"nodeType":"Block","src":"3919:1825:73","statements":[{"assignments":[17112],"declarations":[{"constant":false,"id":17112,"mutability":"mutable","name":"key","nameLocation":"3933:3:73","nodeType":"VariableDeclaration","scope":17199,"src":"3925:11:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17111,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3925:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":17120,"initialValue":{"arguments":[{"expression":{"id":17115,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17100,"src":"3973:7:73","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":17116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3981:11:73","memberName":"canonicalId","nodeType":"MemberAccess","referencedDeclaration":29350,"src":"3973:19:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":17117,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17100,"src":"3994:7:73","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":17118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4002:15:73","memberName":"canonicalDomain","nodeType":"MemberAccess","referencedDeclaration":29330,"src":"3994:23:73","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":17113,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"3939:10:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":17114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3950:22:73","memberName":"calculateCanonicalHash","nodeType":"MemberAccess","referencedDeclaration":28598,"src":"3939:33:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint32) pure returns (bytes32)"}},"id":17119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3939:79:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3925:93:73"},{"condition":{"id":17126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4065:29:73","subExpression":{"expression":{"baseExpression":{"expression":{"id":17121,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"4066:1:73","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17122,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4068:12:73","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"4066:14:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":17124,"indexExpression":{"id":17123,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17112,"src":"4081:3:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4066:19:73","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":17125,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4086:8:73","memberName":"approval","nodeType":"MemberAccess","referencedDeclaration":29390,"src":"4066:28:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17131,"nodeType":"IfStatement","src":"4061:104:73","trueBody":{"id":17130,"nodeType":"Block","src":"4096:69:73","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17127,"name":"PortalFacet__repayAavePortal_assetNotApproved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16969,"src":"4111:45:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4111:47:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17129,"nodeType":"RevertStatement","src":"4104:54:73"}]}},{"assignments":[17133],"declarations":[{"constant":false,"id":17133,"mutability":"mutable","name":"local","nameLocation":"4179:5:73","nodeType":"VariableDeclaration","scope":17199,"src":"4171:13:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17132,"name":"address","nodeType":"ElementaryTypeName","src":"4171:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17141,"initialValue":{"arguments":[{"id":17135,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17112,"src":"4202:3:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":17136,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17100,"src":"4207:7:73","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":17137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4215:11:73","memberName":"canonicalId","nodeType":"MemberAccess","referencedDeclaration":29350,"src":"4207:19:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":17138,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17100,"src":"4228:7:73","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":17139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4236:15:73","memberName":"canonicalDomain","nodeType":"MemberAccess","referencedDeclaration":29330,"src":"4228:23:73","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":17134,"name":"_getLocalAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"4187:14:73","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_uint32_$returns$_t_address_$","typeString":"function (bytes32,bytes32,uint32) view returns (address)"}},"id":17140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4187:65:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4171:81:73"},{"assignments":[17143],"declarations":[{"constant":false,"id":17143,"mutability":"mutable","name":"routerBalance","nameLocation":"4267:13:73","nodeType":"VariableDeclaration","scope":17199,"src":"4259:21:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17142,"name":"uint256","nodeType":"ElementaryTypeName","src":"4259:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17151,"initialValue":{"baseExpression":{"baseExpression":{"expression":{"id":17144,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"4283:1:73","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17145,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4285:14:73","memberName":"routerBalances","nodeType":"MemberAccess","referencedDeclaration":29445,"src":"4283:16:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":17148,"indexExpression":{"expression":{"id":17146,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4300:3:73","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4304:6:73","memberName":"sender","nodeType":"MemberAccess","src":"4300:10:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4283:28:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":17150,"indexExpression":{"id":17149,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17133,"src":"4312:5:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4283:35:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4259:59:73"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17154,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17152,"name":"routerBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17143,"src":"4372:13:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17153,"name":"_maxIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17106,"src":"4388:6:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4372:22:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17158,"nodeType":"IfStatement","src":"4368:83:73","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17155,"name":"PortalFacet__repayAavePortal_insufficientFunds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16971,"src":"4403:46:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4403:48:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17157,"nodeType":"RevertStatement","src":"4396:55:73"}},{"assignments":[17160],"declarations":[{"constant":false,"id":17160,"mutability":"mutable","name":"transferId","nameLocation":"5054:10:73","nodeType":"VariableDeclaration","scope":17199,"src":"5046:18:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17159,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5046:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":17164,"initialValue":{"arguments":[{"id":17162,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17100,"src":"5088:7:73","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}],"id":17161,"name":"_calculateTransferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13998,"src":"5067:20:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_TransferInfo_$29351_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct TransferInfo memory) pure returns (bytes32)"}},"id":17163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5067:29:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5046:50:73"},{"assignments":[17166,17168],"declarations":[{"constant":false,"id":17166,"mutability":"mutable","name":"amountDebited","nameLocation":"5381:13:73","nodeType":"VariableDeclaration","scope":17199,"src":"5373:21:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17165,"name":"uint256","nodeType":"ElementaryTypeName","src":"5373:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17168,"mutability":"mutable","name":"assetLoaned","nameLocation":"5404:11:73","nodeType":"VariableDeclaration","scope":17199,"src":"5396:19:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17167,"name":"address","nodeType":"ElementaryTypeName","src":"5396:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17178,"initialValue":{"arguments":[{"id":17171,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17112,"src":"5475:3:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":17172,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17133,"src":"5486:5:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17173,"name":"_backingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17102,"src":"5499:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":17174,"name":"_feeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17104,"src":"5516:10:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5499:27:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17176,"name":"_maxIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17106,"src":"5534:6:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17169,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"5419:10:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":17170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5430:37:73","memberName":"swapFromLocalAssetIfNeededForExactOut","nodeType":"MemberAccess","referencedDeclaration":28021,"src":"5419:48:73","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_address_$","typeString":"function (bytes32,address,uint256,uint256) returns (uint256,address)"}},"id":17177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5419:127:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"nodeType":"VariableDeclarationStatement","src":"5372:174:73"},{"expression":{"id":17190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"expression":{"id":17179,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"5586:1:73","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17184,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5588:14:73","memberName":"routerBalances","nodeType":"MemberAccess","referencedDeclaration":29445,"src":"5586:16:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":17185,"indexExpression":{"expression":{"id":17181,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5603:3:73","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5607:6:73","memberName":"sender","nodeType":"MemberAccess","src":"5603:10:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5586:28:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":17186,"indexExpression":{"id":17183,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17133,"src":"5615:5:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5586:35:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17187,"name":"routerBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17143,"src":"5624:13:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17188,"name":"amountDebited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17166,"src":"5640:13:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5624:29:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5586:67:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17191,"nodeType":"ExpressionStatement","src":"5586:67:73"},{"expression":{"arguments":[{"id":17193,"name":"assetLoaned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17168,"src":"5687:11:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17194,"name":"_backingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17102,"src":"5700:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17195,"name":"_feeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17104,"src":"5716:10:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17196,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17160,"src":"5728:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":17192,"name":"_backLoan","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17352,"src":"5677:9:73","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes32_$returns$__$","typeString":"function (address,uint256,uint256,bytes32)"}},"id":17197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5677:62:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17198,"nodeType":"ExpressionStatement","src":"5677:62:73"}]},"documentation":{"id":17097,"nodeType":"StructuredDocumentation","src":"3151:607:73","text":" @notice Used by routers to perform a manual repayment to Aave Portals to cover any outstanding debt\n @dev The router must be approved for portal and with enough liquidity, and must be the caller of this\n function. If the asset is not whitelisted, must use the `repayAavePortalFor` function.\n @param _params TransferInfo associated with the transfer\n @param _backingAmount The principle to be paid (in adopted asset)\n @param _feeAmount The fee to be paid (in adopted asset)\n @param _maxIn The max value of the local asset to swap for the _backingAmount of adopted asset"},"functionSelector":"b3f62fcb","id":17200,"implemented":true,"kind":"function","modifiers":[{"id":17109,"kind":"modifierInvocation","modifierName":{"id":17108,"name":"nonReentrant","nameLocations":["3906:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":13774,"src":"3906:12:73"},"nodeType":"ModifierInvocation","src":"3906:12:73"}],"name":"repayAavePortal","nameLocation":"3770:15:73","nodeType":"FunctionDefinition","parameters":{"id":17107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17100,"mutability":"mutable","name":"_params","nameLocation":"3813:7:73","nodeType":"VariableDeclaration","scope":17200,"src":"3791:29:73","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo"},"typeName":{"id":17099,"nodeType":"UserDefinedTypeName","pathNode":{"id":17098,"name":"TransferInfo","nameLocations":["3791:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":29351,"src":"3791:12:73"},"referencedDeclaration":29351,"src":"3791:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_storage_ptr","typeString":"struct TransferInfo"}},"visibility":"internal"},{"constant":false,"id":17102,"mutability":"mutable","name":"_backingAmount","nameLocation":"3834:14:73","nodeType":"VariableDeclaration","scope":17200,"src":"3826:22:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17101,"name":"uint256","nodeType":"ElementaryTypeName","src":"3826:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17104,"mutability":"mutable","name":"_feeAmount","nameLocation":"3862:10:73","nodeType":"VariableDeclaration","scope":17200,"src":"3854:18:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17103,"name":"uint256","nodeType":"ElementaryTypeName","src":"3854:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17106,"mutability":"mutable","name":"_maxIn","nameLocation":"3886:6:73","nodeType":"VariableDeclaration","scope":17200,"src":"3878:14:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17105,"name":"uint256","nodeType":"ElementaryTypeName","src":"3878:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3785:111:73"},"returnParameters":{"id":17110,"nodeType":"ParameterList","parameters":[],"src":"3919:0:73"},"scope":17353,"src":"3761:1983:73","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17277,"nodeType":"Block","src":"6414:1670:73","statements":[{"assignments":[17216],"declarations":[{"constant":false,"id":17216,"mutability":"mutable","name":"adopted","nameLocation":"6631:7:73","nodeType":"VariableDeclaration","scope":17277,"src":"6623:15:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17215,"name":"address","nodeType":"ElementaryTypeName","src":"6623:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17228,"initialValue":{"expression":{"baseExpression":{"expression":{"id":17217,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"6641:1:73","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17218,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6650:12:73","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"6641:21:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":17226,"indexExpression":{"arguments":[{"expression":{"id":17221,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17204,"src":"6697:7:73","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":17222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6705:11:73","memberName":"canonicalId","nodeType":"MemberAccess","referencedDeclaration":29350,"src":"6697:19:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":17223,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17204,"src":"6718:7:73","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}},"id":17224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6726:15:73","memberName":"canonicalDomain","nodeType":"MemberAccess","referencedDeclaration":29330,"src":"6718:23:73","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":17219,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"6663:10:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":17220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6674:22:73","memberName":"calculateCanonicalHash","nodeType":"MemberAccess","referencedDeclaration":28598,"src":"6663:33:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint32) pure returns (bytes32)"}},"id":17225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6663:79:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6641:102:73","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":17227,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6751:7:73","memberName":"adopted","nodeType":"MemberAccess","referencedDeclaration":29384,"src":"6641:117:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6623:135:73"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17229,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17216,"src":"6947:7:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":17232,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6966:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6958:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17230,"name":"address","nodeType":"ElementaryTypeName","src":"6958:7:73","typeDescriptions":{}}},"id":17233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6958:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6947:21:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17235,"name":"_portalAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17206,"src":"6972:12:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":17236,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17216,"src":"6988:7:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6972:23:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6947:48:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17243,"nodeType":"IfStatement","src":"6943:122:73","trueBody":{"id":17242,"nodeType":"Block","src":"6997:68:73","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17239,"name":"PortalFacet__repayAavePortalFor_invalidAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16975,"src":"7012:44:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7012:46:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17241,"nodeType":"RevertStatement","src":"7005:53:73"}]}},{"assignments":[17245],"declarations":[{"constant":false,"id":17245,"mutability":"mutable","name":"transferId","nameLocation":"7671:10:73","nodeType":"VariableDeclaration","scope":17277,"src":"7663:18:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17244,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7663:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":17249,"initialValue":{"arguments":[{"id":17247,"name":"_params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17204,"src":"7705:7:73","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo calldata"}],"id":17246,"name":"_calculateTransferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13998,"src":"7684:20:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_TransferInfo_$29351_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct TransferInfo memory) pure returns (bytes32)"}},"id":17248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7684:29:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"7663:50:73"},{"assignments":[17251],"declarations":[{"constant":false,"id":17251,"mutability":"mutable","name":"total","nameLocation":"7766:5:73","nodeType":"VariableDeclaration","scope":17277,"src":"7758:13:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17250,"name":"uint256","nodeType":"ElementaryTypeName","src":"7758:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17255,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17252,"name":"_backingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17208,"src":"7774:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":17253,"name":"_feeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17210,"src":"7791:10:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7774:27:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7758:43:73"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17256,"name":"total","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17251,"src":"7811:5:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17257,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7820:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7811:10:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17262,"nodeType":"IfStatement","src":"7807:67:73","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17259,"name":"PortalFacet__repayAavePortalFor_zeroAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16973,"src":"7830:42:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7830:44:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17261,"nodeType":"RevertStatement","src":"7823:51:73"}},{"expression":{"arguments":[{"id":17266,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17216,"src":"7912:7:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17267,"name":"total","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17251,"src":"7921:5:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17263,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"7881:10:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":17265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7892:19:73","memberName":"handleIncomingAsset","nodeType":"MemberAccess","referencedDeclaration":27772,"src":"7881:30:73","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":17268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7881:46:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17269,"nodeType":"ExpressionStatement","src":"7881:46:73"},{"expression":{"arguments":[{"id":17271,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17216,"src":"8031:7:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17272,"name":"_backingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17208,"src":"8040:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17273,"name":"_feeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17210,"src":"8056:10:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17274,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17245,"src":"8068:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":17270,"name":"_backLoan","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17352,"src":"8021:9:73","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes32_$returns$__$","typeString":"function (address,uint256,uint256,bytes32)"}},"id":17275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8021:58:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17276,"nodeType":"ExpressionStatement","src":"8021:58:73"}]},"documentation":{"id":17201,"nodeType":"StructuredDocumentation","src":"5748:488:73","text":" @notice This allows anyone to repay the portal in the adopted asset for a given router\n and transfer\n @dev Should always be paying in the backing asset for the aave loan. NOTE: This will *NOT*\n work if an asset is removed.\n @param _params TransferInfo associated with the transfer\n @param _portalAsset The asset you borrowed (adopted asset)\n @param _backingAmount Amount of principle to repay\n @param _feeAmount Amount of fees to repay"},"functionSelector":"75d32371","id":17278,"implemented":true,"kind":"function","modifiers":[{"id":17213,"kind":"modifierInvocation","modifierName":{"id":17212,"name":"nonReentrant","nameLocations":["6401:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":13774,"src":"6401:12:73"},"nodeType":"ModifierInvocation","src":"6401:12:73"}],"name":"repayAavePortalFor","nameLocation":"6248:18:73","nodeType":"FunctionDefinition","parameters":{"id":17211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17204,"mutability":"mutable","name":"_params","nameLocation":"6294:7:73","nodeType":"VariableDeclaration","scope":17278,"src":"6272:29:73","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo"},"typeName":{"id":17203,"nodeType":"UserDefinedTypeName","pathNode":{"id":17202,"name":"TransferInfo","nameLocations":["6272:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":29351,"src":"6272:12:73"},"referencedDeclaration":29351,"src":"6272:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_storage_ptr","typeString":"struct TransferInfo"}},"visibility":"internal"},{"constant":false,"id":17206,"mutability":"mutable","name":"_portalAsset","nameLocation":"6315:12:73","nodeType":"VariableDeclaration","scope":17278,"src":"6307:20:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17205,"name":"address","nodeType":"ElementaryTypeName","src":"6307:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17208,"mutability":"mutable","name":"_backingAmount","nameLocation":"6341:14:73","nodeType":"VariableDeclaration","scope":17278,"src":"6333:22:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17207,"name":"uint256","nodeType":"ElementaryTypeName","src":"6333:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17210,"mutability":"mutable","name":"_feeAmount","nameLocation":"6369:10:73","nodeType":"VariableDeclaration","scope":17278,"src":"6361:18:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17209,"name":"uint256","nodeType":"ElementaryTypeName","src":"6361:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6266:117:73"},"returnParameters":{"id":17214,"nodeType":"ParameterList","parameters":[],"src":"6414:0:73"},"scope":17353,"src":"6239:1845:73","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":17351,"nodeType":"Block","src":"8614:474:73","statements":[{"expression":{"id":17296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17290,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8639:1:73","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17293,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8641:10:73","memberName":"portalDebt","nodeType":"MemberAccess","referencedDeclaration":29521,"src":"8639:12:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":17294,"indexExpression":{"id":17292,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17287,"src":"8652:11:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8639:25:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":17295,"name":"_backing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17283,"src":"8668:8:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8639:37:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17297,"nodeType":"ExpressionStatement","src":"8639:37:73"},{"expression":{"id":17304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17298,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8682:1:73","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17301,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8684:13:73","memberName":"portalFeeDebt","nodeType":"MemberAccess","referencedDeclaration":29526,"src":"8682:15:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":17302,"indexExpression":{"id":17300,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17287,"src":"8698:11:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8682:28:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":17303,"name":"_fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17285,"src":"8714:4:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8682:36:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17305,"nodeType":"ExpressionStatement","src":"8682:36:73"},{"assignments":[17307],"declarations":[{"constant":false,"id":17307,"mutability":"mutable","name":"aPool","nameLocation":"8733:5:73","nodeType":"VariableDeclaration","scope":17351,"src":"8725:13:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17306,"name":"address","nodeType":"ElementaryTypeName","src":"8725:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17310,"initialValue":{"expression":{"id":17308,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8741:1:73","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17309,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8743:8:73","memberName":"aavePool","nodeType":"MemberAccess","referencedDeclaration":29513,"src":"8741:10:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8725:26:73"},{"expression":{"arguments":[{"arguments":[{"id":17315,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17281,"src":"8813:6:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17314,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10812,"src":"8806:6:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10812_$","typeString":"type(contract IERC20)"}},"id":17316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8806:14:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},{"id":17317,"name":"aPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17307,"src":"8822:5:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":17318,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8829:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":17311,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11154,"src":"8784:9:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeERC20_$11154_$","typeString":"type(library SafeERC20)"}},"id":17313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8794:11:73","memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":10975,"src":"8784:21:73","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10812_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":17319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8784:47:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17320,"nodeType":"ExpressionStatement","src":"8784:47:73"},{"expression":{"arguments":[{"arguments":[{"id":17325,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17281,"src":"8876:6:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17324,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10812,"src":"8869:6:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10812_$","typeString":"type(contract IERC20)"}},"id":17326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8869:14:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},{"id":17327,"name":"aPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17307,"src":"8885:5:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17328,"name":"_backing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17283,"src":"8892:8:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":17329,"name":"_fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17285,"src":"8903:4:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8892:15:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17321,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11154,"src":"8837:9:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeERC20_$11154_$","typeString":"type(library SafeERC20)"}},"id":17323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8847:21:73","memberName":"safeIncreaseAllowance","nodeType":"MemberAccess","referencedDeclaration":11011,"src":"8837:31:73","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10812_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":17331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8837:71:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17332,"nodeType":"ExpressionStatement","src":"8837:71:73"},{"expression":{"arguments":[{"id":17337,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17281,"src":"8962:6:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17338,"name":"_backing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17283,"src":"8970:8:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17339,"name":"_fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17285,"src":"8980:4:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":17334,"name":"aPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17307,"src":"8942:5:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17333,"name":"IAavePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25862,"src":"8932:9:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAavePool_$25862_$","typeString":"type(contract IAavePool)"}},"id":17335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8932:16:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAavePool_$25862","typeString":"contract IAavePool"}},"id":17336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8949:12:73","memberName":"backUnbacked","nodeType":"MemberAccess","referencedDeclaration":25849,"src":"8932:29:73","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) external"}},"id":17340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8932:53:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17341,"nodeType":"ExpressionStatement","src":"8932:53:73"},{"eventCall":{"arguments":[{"id":17343,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17287,"src":"9035:11:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":17344,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17281,"src":"9048:6:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17345,"name":"_backing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17283,"src":"9056:8:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17346,"name":"_fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17285,"src":"9066:4:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17347,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9072:3:73","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9076:6:73","memberName":"sender","nodeType":"MemberAccess","src":"9072:10:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17342,"name":"AavePortalRepayment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17002,"src":"9015:19:73","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint256_$_t_address_$returns$__$","typeString":"function (bytes32,address,uint256,uint256,address)"}},"id":17349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9015:68:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17350,"nodeType":"EmitStatement","src":"9010:73:73"}]},"documentation":{"id":17279,"nodeType":"StructuredDocumentation","src":"8139:355:73","text":" @notice Calls backUnbacked on the aave contracts\n @dev Assumes funds in adopted asset are already on contract\n @param _asset Address of the adopted asset (asset backing the loan)\n @param _backing Amount of principle to repay\n @param _fee Amount of fees to repay\n @param _transferId Corresponding transfer id for the fees"},"id":17352,"implemented":true,"kind":"function","modifiers":[],"name":"_backLoan","nameLocation":"8506:9:73","nodeType":"FunctionDefinition","parameters":{"id":17288,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17281,"mutability":"mutable","name":"_asset","nameLocation":"8529:6:73","nodeType":"VariableDeclaration","scope":17352,"src":"8521:14:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17280,"name":"address","nodeType":"ElementaryTypeName","src":"8521:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17283,"mutability":"mutable","name":"_backing","nameLocation":"8549:8:73","nodeType":"VariableDeclaration","scope":17352,"src":"8541:16:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17282,"name":"uint256","nodeType":"ElementaryTypeName","src":"8541:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17285,"mutability":"mutable","name":"_fee","nameLocation":"8571:4:73","nodeType":"VariableDeclaration","scope":17352,"src":"8563:12:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17284,"name":"uint256","nodeType":"ElementaryTypeName","src":"8563:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17287,"mutability":"mutable","name":"_transferId","nameLocation":"8589:11:73","nodeType":"VariableDeclaration","scope":17352,"src":"8581:19:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17286,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8581:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8515:89:73"},"returnParameters":{"id":17289,"nodeType":"ParameterList","parameters":[],"src":"8614:0:73"},"scope":17353,"src":"8497:591:73","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":17354,"src":"509:8581:73","usedErrors":[13728,13730,13732,13734,13736,13738,13740,13742,13744,13746,16967,16969,16971,16973,16975,27656,27658,27662,27664]}],"src":"39:9052:73"},"id":73},"contracts/core/connext/facets/ProposedOwnableFacet.sol":{"ast":{"absolutePath":"contracts/core/connext/facets/ProposedOwnableFacet.sol","exportedSymbols":{"BaseConnextFacet":[14146],"IProposedOwnable":[50003],"LibDiamond":[30596],"ProposedOwnableFacet":[17913],"Role":[29319]},"id":17914,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":17355,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:74"},{"absolutePath":"contracts/core/connext/facets/BaseConnextFacet.sol","file":"./BaseConnextFacet.sol","id":17357,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17914,"sourceUnit":14147,"src":"64:56:74","symbolAliases":[{"foreign":{"id":17356,"name":"BaseConnextFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14146,"src":"72:16:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/LibDiamond.sol","file":"../libraries/LibDiamond.sol","id":17359,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17914,"sourceUnit":30597,"src":"121:55:74","symbolAliases":[{"foreign":{"id":17358,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"129:10:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/LibConnextStorage.sol","file":"../libraries/LibConnextStorage.sol","id":17361,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17914,"sourceUnit":29546,"src":"177:56:74","symbolAliases":[{"foreign":{"id":17360,"name":"Role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"185:4:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/interfaces/IProposedOwnable.sol","file":"../../../shared/interfaces/IProposedOwnable.sol","id":17363,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17914,"sourceUnit":50004,"src":"234:81:74","symbolAliases":[{"foreign":{"id":17362,"name":"IProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50003,"src":"242:16:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":17365,"name":"BaseConnextFacet","nameLocations":["1057:16:74"],"nodeType":"IdentifierPath","referencedDeclaration":14146,"src":"1057:16:74"},"id":17366,"nodeType":"InheritanceSpecifier","src":"1057:16:74"},{"baseName":{"id":17367,"name":"IProposedOwnable","nameLocations":["1075:16:74"],"nodeType":"IdentifierPath","referencedDeclaration":50003,"src":"1075:16:74"},"id":17368,"nodeType":"InheritanceSpecifier","src":"1075:16:74"}],"canonicalName":"ProposedOwnableFacet","contractDependencies":[],"contractKind":"contract","documentation":{"id":17364,"nodeType":"StructuredDocumentation","src":"317:706:74","text":" @title ProposedOwnableFacet\n @notice Contract module which provides a basic access control mechanism,\n where there is an account (an owner) that can be granted exclusive access to\n specific functions.\n By default, the owner account will be the one that deploys the contract. This\n can later be changed via a two step process:\n 1. Call `proposeOwner`\n 2. Wait out the delay period\n 3. Call `acceptOwner`\n @dev This module is used through inheritance. It will make available the\n modifier `onlyOwner`, which can be applied to your functions to restrict\n their use to the owner.\n @dev The majority of this code was taken from the openzeppelin Ownable\n contract"},"fullyImplemented":true,"id":17913,"linearizedBaseContracts":[17913,50003,14146],"name":"ProposedOwnableFacet","nameLocation":"1033:20:74","nodeType":"ContractDefinition","nodes":[{"errorSelector":"fe06d352","id":17370,"name":"ProposedOwnableFacet__delayElapsed_delayNotElapsed","nameLocation":"1144:50:74","nodeType":"ErrorDefinition","parameters":{"id":17369,"nodeType":"ParameterList","parameters":[],"src":"1194:2:74"},"src":"1138:59:74"},{"errorSelector":"677f727e","id":17372,"name":"ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange","nameLocation":"1206:69:74","nodeType":"ErrorDefinition","parameters":{"id":17371,"nodeType":"ParameterList","parameters":[],"src":"1275:2:74"},"src":"1200:78:74"},{"errorSelector":"4b4da555","id":17374,"name":"ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange","nameLocation":"1287:61:74","nodeType":"ErrorDefinition","parameters":{"id":17373,"nodeType":"ParameterList","parameters":[],"src":"1348:2:74"},"src":"1281:70:74"},{"errorSelector":"d15a25c2","id":17376,"name":"ProposedOwnableFacet__removeRouterAllowlist_noProposal","nameLocation":"1360:54:74","nodeType":"ErrorDefinition","parameters":{"id":17375,"nodeType":"ParameterList","parameters":[],"src":"1414:2:74"},"src":"1354:63:74"},{"errorSelector":"008d02fa","id":17378,"name":"ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange","nameLocation":"1426:68:74","nodeType":"ErrorDefinition","parameters":{"id":17377,"nodeType":"ParameterList","parameters":[],"src":"1494:2:74"},"src":"1420:77:74"},{"errorSelector":"c1b5b1ab","id":17380,"name":"ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange","nameLocation":"1506:60:74","nodeType":"ErrorDefinition","parameters":{"id":17379,"nodeType":"ParameterList","parameters":[],"src":"1566:2:74"},"src":"1500:69:74"},{"errorSelector":"a67b7f9c","id":17382,"name":"ProposedOwnableFacet__removeAssetAllowlist_noProposal","nameLocation":"1578:53:74","nodeType":"ErrorDefinition","parameters":{"id":17381,"nodeType":"ParameterList","parameters":[],"src":"1631:2:74"},"src":"1572:62:74"},{"errorSelector":"09d2b10c","id":17384,"name":"ProposedOwnableFacet__proposeNewOwner_invalidProposal","nameLocation":"1643:53:74","nodeType":"ErrorDefinition","parameters":{"id":17383,"nodeType":"ParameterList","parameters":[],"src":"1696:2:74"},"src":"1637:62:74"},{"errorSelector":"1f677f51","id":17386,"name":"ProposedOwnableFacet__proposeNewOwner_noOwnershipChange","nameLocation":"1708:55:74","nodeType":"ErrorDefinition","parameters":{"id":17385,"nodeType":"ParameterList","parameters":[],"src":"1763:2:74"},"src":"1702:64:74"},{"errorSelector":"55cc5079","id":17388,"name":"ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange","nameLocation":"1775:59:74","nodeType":"ErrorDefinition","parameters":{"id":17387,"nodeType":"ParameterList","parameters":[],"src":"1834:2:74"},"src":"1769:68:74"},{"errorSelector":"70aeb948","id":17390,"name":"ProposedOwnableFacet__revokeRole_invalidInput","nameLocation":"1846:45:74","nodeType":"ErrorDefinition","parameters":{"id":17389,"nodeType":"ParameterList","parameters":[],"src":"1891:2:74"},"src":"1840:54:74"},{"errorSelector":"33ea8d5a","id":17392,"name":"ProposedOwnableFacet__assignRoleRouter_invalidInput","nameLocation":"1903:51:74","nodeType":"ErrorDefinition","parameters":{"id":17391,"nodeType":"ParameterList","parameters":[],"src":"1954:2:74"},"src":"1897:60:74"},{"errorSelector":"0bceab9d","id":17394,"name":"ProposedOwnableFacet__assignRoleWatcher_invalidInput","nameLocation":"1966:52:74","nodeType":"ErrorDefinition","parameters":{"id":17393,"nodeType":"ParameterList","parameters":[],"src":"2018:2:74"},"src":"1960:61:74"},{"errorSelector":"b0073a28","id":17396,"name":"ProposedOwnableFacet__assignRoleAdmin_invalidInput","nameLocation":"2030:50:74","nodeType":"ErrorDefinition","parameters":{"id":17395,"nodeType":"ParameterList","parameters":[],"src":"2080:2:74"},"src":"2024:59:74"},{"anonymous":false,"eventSelector":"eb0f48d74c7254e5b55ef91a3f6e496e6a4a8676b6dae07f3d6fb0805b9fac93","id":17400,"name":"RouterAllowlistRemovalProposed","nameLocation":"2132:30:74","nodeType":"EventDefinition","parameters":{"id":17399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17398,"indexed":false,"mutability":"mutable","name":"timestamp","nameLocation":"2171:9:74","nodeType":"VariableDeclaration","scope":17400,"src":"2163:17:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17397,"name":"uint256","nodeType":"ElementaryTypeName","src":"2163:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2162:19:74"},"src":"2126:56:74"},{"anonymous":false,"eventSelector":"7c21a455b42ac52b1f1cc1103db5afe532e817479e9503a97a734720271c5a74","id":17404,"name":"RouterAllowlistRemoved","nameLocation":"2192:22:74","nodeType":"EventDefinition","parameters":{"id":17403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17402,"indexed":false,"mutability":"mutable","name":"renounced","nameLocation":"2220:9:74","nodeType":"VariableDeclaration","scope":17404,"src":"2215:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17401,"name":"bool","nodeType":"ElementaryTypeName","src":"2215:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2214:16:74"},"src":"2186:45:74"},{"anonymous":false,"eventSelector":"dc6f53b47a9dfbea7a15fceef0cd84711d3d79ccc0952111866167af5e59e264","id":17411,"name":"RevokeRole","nameLocation":"2241:10:74","nodeType":"EventDefinition","parameters":{"id":17410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17406,"indexed":false,"mutability":"mutable","name":"revokedAddress","nameLocation":"2260:14:74","nodeType":"VariableDeclaration","scope":17411,"src":"2252:22:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17405,"name":"address","nodeType":"ElementaryTypeName","src":"2252:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17409,"indexed":false,"mutability":"mutable","name":"revokedRole","nameLocation":"2281:11:74","nodeType":"VariableDeclaration","scope":17411,"src":"2276:16:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"},"typeName":{"id":17408,"nodeType":"UserDefinedTypeName","pathNode":{"id":17407,"name":"Role","nameLocations":["2276:4:74"],"nodeType":"IdentifierPath","referencedDeclaration":29319,"src":"2276:4:74"},"referencedDeclaration":29319,"src":"2276:4:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"visibility":"internal"}],"src":"2251:42:74"},"src":"2235:59:74"},{"anonymous":false,"eventSelector":"f294e68c632d2c26e3d36129816c9a3e54bfa0ebada89d07d08e15e87a8e2403","id":17415,"name":"AssignRoleRouter","nameLocation":"2304:16:74","nodeType":"EventDefinition","parameters":{"id":17414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17413,"indexed":false,"mutability":"mutable","name":"router","nameLocation":"2329:6:74","nodeType":"VariableDeclaration","scope":17415,"src":"2321:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17412,"name":"address","nodeType":"ElementaryTypeName","src":"2321:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2320:16:74"},"src":"2298:39:74"},{"anonymous":false,"eventSelector":"faac289281b8fc57dff30d0ff38b071d28bb5f24cd5ed1bd2379d6fb27f714dd","id":17419,"name":"AssignRoleWatcher","nameLocation":"2347:17:74","nodeType":"EventDefinition","parameters":{"id":17418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17417,"indexed":false,"mutability":"mutable","name":"watcher","nameLocation":"2373:7:74","nodeType":"VariableDeclaration","scope":17419,"src":"2365:15:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17416,"name":"address","nodeType":"ElementaryTypeName","src":"2365:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2364:17:74"},"src":"2341:41:74"},{"anonymous":false,"eventSelector":"000a317382a4189d8763d4a024ec833785cebd3580a084ff0f887f156b822cb1","id":17423,"name":"AssignRoleAdmin","nameLocation":"2392:15:74","nodeType":"EventDefinition","parameters":{"id":17422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17421,"indexed":false,"mutability":"mutable","name":"admin","nameLocation":"2416:5:74","nodeType":"VariableDeclaration","scope":17423,"src":"2408:13:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17420,"name":"address","nodeType":"ElementaryTypeName","src":"2408:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2407:15:74"},"src":"2386:37:74"},{"anonymous":false,"eventSelector":"9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e752","id":17425,"name":"Paused","nameLocation":"2433:6:74","nodeType":"EventDefinition","parameters":{"id":17424,"nodeType":"ParameterList","parameters":[],"src":"2439:2:74"},"src":"2427:15:74"},{"anonymous":false,"eventSelector":"a45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d16933","id":17427,"name":"Unpaused","nameLocation":"2452:8:74","nodeType":"EventDefinition","parameters":{"id":17426,"nodeType":"ParameterList","parameters":[],"src":"2460:2:74"},"src":"2446:17:74"},{"body":{"id":17445,"nodeType":"Block","src":"2696:151:74","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17432,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2739:5:74","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":17433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2745:9:74","memberName":"timestamp","nodeType":"MemberAccess","src":"2739:15:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17434,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17430,"src":"2757:5:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2739:23:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17436,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2738:25:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":17437,"name":"delay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17508,"src":"2767:5:74","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":17438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2767:7:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2738:36:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17443,"nodeType":"IfStatement","src":"2734:101:74","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17440,"name":"ProposedOwnableFacet__delayElapsed_delayNotElapsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17370,"src":"2783:50:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2783:52:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17442,"nodeType":"RevertStatement","src":"2776:59:74"}},{"id":17444,"nodeType":"PlaceholderStatement","src":"2841:1:74"}]},"documentation":{"id":17428,"nodeType":"StructuredDocumentation","src":"2507:149:74","text":" @notice Reverts the call if the expected delay has not elapsed.\n @param start Timestamp marking the beginning of the delay period."},"id":17446,"name":"delayElapsed","nameLocation":"2668:12:74","nodeType":"ModifierDefinition","parameters":{"id":17431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17430,"mutability":"mutable","name":"start","nameLocation":"2689:5:74","nodeType":"VariableDeclaration","scope":17446,"src":"2681:13:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17429,"name":"uint256","nodeType":"ElementaryTypeName","src":"2681:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2680:15:74"},"src":"2659:188:74","virtual":false,"visibility":"internal"},{"baseFunctions":[49986],"body":{"id":17456,"nodeType":"Block","src":"3015:44:74","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17452,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"3028:10:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":17453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3039:13:74","memberName":"contractOwner","nodeType":"MemberAccess","referencedDeclaration":29645,"src":"3028:24:74","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":17454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3028:26:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":17451,"id":17455,"nodeType":"Return","src":"3021:33:74"}]},"documentation":{"id":17447,"nodeType":"StructuredDocumentation","src":"2901:64:74","text":" @notice Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":17457,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"2977:5:74","nodeType":"FunctionDefinition","parameters":{"id":17448,"nodeType":"ParameterList","parameters":[],"src":"2982:2:74"},"returnParameters":{"id":17451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17450,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17457,"src":"3006:7:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17449,"name":"address","nodeType":"ElementaryTypeName","src":"3006:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3005:9:74"},"scope":17913,"src":"2968:91:74","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":17466,"nodeType":"Block","src":"3193:43:74","statements":[{"expression":{"expression":{"id":17463,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3206:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17464,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3208:23:74","memberName":"_routerAllowlistRemoved","nodeType":"MemberAccess","referencedDeclaration":29474,"src":"3206:25:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17462,"id":17465,"nodeType":"Return","src":"3199:32:74"}]},"documentation":{"id":17458,"nodeType":"StructuredDocumentation","src":"3063:66:74","text":" @notice Returns if the router allowlist is removed."},"functionSelector":"6be55785","id":17467,"implemented":true,"kind":"function","modifiers":[],"name":"routerAllowlistRemoved","nameLocation":"3141:22:74","nodeType":"FunctionDefinition","parameters":{"id":17459,"nodeType":"ParameterList","parameters":[],"src":"3163:2:74"},"returnParameters":{"id":17462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17461,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17467,"src":"3187:4:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17460,"name":"bool","nodeType":"ElementaryTypeName","src":"3187:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3186:6:74"},"scope":17913,"src":"3132:104:74","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[49992],"body":{"id":17476,"nodeType":"Block","src":"3358:29:74","statements":[{"expression":{"expression":{"id":17473,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3371:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17474,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3373:9:74","memberName":"_proposed","nodeType":"MemberAccess","referencedDeclaration":29470,"src":"3371:11:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":17472,"id":17475,"nodeType":"Return","src":"3364:18:74"}]},"documentation":{"id":17468,"nodeType":"StructuredDocumentation","src":"3240:65:74","text":" @notice Returns the address of the proposed owner."},"functionSelector":"d1851c92","id":17477,"implemented":true,"kind":"function","modifiers":[],"name":"proposed","nameLocation":"3317:8:74","nodeType":"FunctionDefinition","parameters":{"id":17469,"nodeType":"ParameterList","parameters":[],"src":"3325:2:74"},"returnParameters":{"id":17472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17471,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17477,"src":"3349:7:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17470,"name":"address","nodeType":"ElementaryTypeName","src":"3349:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3348:9:74"},"scope":17913,"src":"3308:79:74","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":17486,"nodeType":"Block","src":"3518:47:74","statements":[{"expression":{"expression":{"id":17483,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3531:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17484,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3533:27:74","memberName":"_proposedOwnershipTimestamp","nodeType":"MemberAccess","referencedDeclaration":29472,"src":"3531:29:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17482,"id":17485,"nodeType":"Return","src":"3524:36:74"}]},"documentation":{"id":17478,"nodeType":"StructuredDocumentation","src":"3391:65:74","text":" @notice Returns the address of the proposed owner."},"functionSelector":"3cf52ffb","id":17487,"implemented":true,"kind":"function","modifiers":[],"name":"proposedTimestamp","nameLocation":"3468:17:74","nodeType":"FunctionDefinition","parameters":{"id":17479,"nodeType":"ParameterList","parameters":[],"src":"3485:2:74"},"returnParameters":{"id":17482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17481,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17487,"src":"3509:7:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17480,"name":"uint256","nodeType":"ElementaryTypeName","src":"3509:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3508:9:74"},"scope":17913,"src":"3459:106:74","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":17496,"nodeType":"Block","src":"3736:45:74","statements":[{"expression":{"expression":{"id":17493,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3749:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17494,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3751:25:74","memberName":"_routerAllowlistTimestamp","nodeType":"MemberAccess","referencedDeclaration":29476,"src":"3749:27:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17492,"id":17495,"nodeType":"Return","src":"3742:34:74"}]},"documentation":{"id":17488,"nodeType":"StructuredDocumentation","src":"3569:98:74","text":" @notice Returns the timestamp when router allowlist was last proposed to be removed"},"functionSelector":"12232937","id":17497,"implemented":true,"kind":"function","modifiers":[],"name":"routerAllowlistTimestamp","nameLocation":"3679:24:74","nodeType":"FunctionDefinition","parameters":{"id":17489,"nodeType":"ParameterList","parameters":[],"src":"3703:2:74"},"returnParameters":{"id":17492,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17491,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17497,"src":"3727:7:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17490,"name":"uint256","nodeType":"ElementaryTypeName","src":"3727:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3726:9:74"},"scope":17913,"src":"3670:111:74","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":17507,"nodeType":"Block","src":"3918:46:74","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17503,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"3931:10:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":17504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3942:15:74","memberName":"acceptanceDelay","nodeType":"MemberAccess","referencedDeclaration":29655,"src":"3931:26:74","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":17505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3931:28:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17502,"id":17506,"nodeType":"Return","src":"3924:35:74"}]},"documentation":{"id":17498,"nodeType":"StructuredDocumentation","src":"3785:83:74","text":" @notice Returns the delay period before a new owner can be accepted."},"functionSelector":"6a42b8f8","id":17508,"implemented":true,"kind":"function","modifiers":[],"name":"delay","nameLocation":"3880:5:74","nodeType":"FunctionDefinition","parameters":{"id":17499,"nodeType":"ParameterList","parameters":[],"src":"3885:2:74"},"returnParameters":{"id":17502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17501,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17508,"src":"3909:7:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17500,"name":"uint256","nodeType":"ElementaryTypeName","src":"3909:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3908:9:74"},"scope":17913,"src":"3871:93:74","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":17517,"nodeType":"Block","src":"4064:27:74","statements":[{"expression":{"expression":{"id":17514,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"4077:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17515,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4079:7:74","memberName":"_paused","nodeType":"MemberAccess","referencedDeclaration":29510,"src":"4077:9:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17513,"id":17516,"nodeType":"Return","src":"4070:16:74"}]},"documentation":{"id":17509,"nodeType":"StructuredDocumentation","src":"3968:48:74","text":" @notice Returns if paused or not."},"functionSelector":"5c975abb","id":17518,"implemented":true,"kind":"function","modifiers":[],"name":"paused","nameLocation":"4028:6:74","nodeType":"FunctionDefinition","parameters":{"id":17510,"nodeType":"ParameterList","parameters":[],"src":"4034:2:74"},"returnParameters":{"id":17513,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17512,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17518,"src":"4058:4:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17511,"name":"bool","nodeType":"ElementaryTypeName","src":"4058:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4057:6:74"},"scope":17913,"src":"4019:72:74","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":17532,"nodeType":"Block","src":"4341:32:74","statements":[{"expression":{"baseExpression":{"expression":{"id":17527,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"4354:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17528,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4356:5:74","memberName":"roles","nodeType":"MemberAccess","referencedDeclaration":29482,"src":"4354:7:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_Role_$29319_$","typeString":"mapping(address => enum Role)"}},"id":17530,"indexExpression":{"id":17529,"name":"_role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17521,"src":"4362:5:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4354:14:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"functionReturnParameters":17526,"id":17531,"nodeType":"Return","src":"4347:21:74"}]},"documentation":{"id":17519,"nodeType":"StructuredDocumentation","src":"4095:182:74","text":" @notice Returns the Role of the address\n @dev returns uint value of representing enum value of Role\n @param _role The address for which Role need to be queried"},"functionSelector":"c91cb56a","id":17533,"implemented":true,"kind":"function","modifiers":[],"name":"queryRole","nameLocation":"4289:9:74","nodeType":"FunctionDefinition","parameters":{"id":17522,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17521,"mutability":"mutable","name":"_role","nameLocation":"4307:5:74","nodeType":"VariableDeclaration","scope":17533,"src":"4299:13:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17520,"name":"address","nodeType":"ElementaryTypeName","src":"4299:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4298:15:74"},"returnParameters":{"id":17526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17525,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17533,"src":"4335:4:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"},"typeName":{"id":17524,"nodeType":"UserDefinedTypeName","pathNode":{"id":17523,"name":"Role","nameLocations":["4335:4:74"],"nodeType":"IdentifierPath","referencedDeclaration":29319,"src":"4335:4:74"},"referencedDeclaration":29319,"src":"4335:4:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"visibility":"internal"}],"src":"4334:6:74"},"scope":17913,"src":"4280:93:74","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":17548,"nodeType":"Block","src":"4583:286:74","statements":[{"condition":{"expression":{"id":17539,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"4691:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17540,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4693:23:74","memberName":"_routerAllowlistRemoved","nodeType":"MemberAccess","referencedDeclaration":29474,"src":"4691:25:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17544,"nodeType":"IfStatement","src":"4687:109:74","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17541,"name":"ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17372,"src":"4725:69:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4725:71:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17543,"nodeType":"RevertStatement","src":"4718:78:74"}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":17545,"name":"_setRouterAllowlistTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17849,"src":"4834:28:74","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":17546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4834:30:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17547,"nodeType":"ExpressionStatement","src":"4834:30:74"}]},"documentation":{"id":17534,"nodeType":"StructuredDocumentation","src":"4418:97:74","text":" @notice Indicates if the ownership of the router allowlist has\n been renounced"},"functionSelector":"c56ce358","id":17549,"implemented":true,"kind":"function","modifiers":[{"id":17537,"kind":"modifierInvocation","modifierName":{"id":17536,"name":"onlyOwnerOrAdmin","nameLocations":["4566:16:74"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"4566:16:74"},"nodeType":"ModifierInvocation","src":"4566:16:74"}],"name":"proposeRouterAllowlistRemoval","nameLocation":"4527:29:74","nodeType":"FunctionDefinition","parameters":{"id":17535,"nodeType":"ParameterList","parameters":[],"src":"4556:2:74"},"returnParameters":{"id":17538,"nodeType":"ParameterList","parameters":[],"src":"4583:0:74"},"scope":17913,"src":"4518:351:74","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":17577,"nodeType":"Block","src":"5071:462:74","statements":[{"condition":{"expression":{"id":17559,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"5175:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17560,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5177:23:74","memberName":"_routerAllowlistRemoved","nodeType":"MemberAccess","referencedDeclaration":29474,"src":"5175:25:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17564,"nodeType":"IfStatement","src":"5171:101:74","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17561,"name":"ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17374,"src":"5209:61:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5209:63:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17563,"nodeType":"RevertStatement","src":"5202:70:74"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17565,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"5337:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17566,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5339:25:74","memberName":"_routerAllowlistTimestamp","nodeType":"MemberAccess","referencedDeclaration":29476,"src":"5337:27:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17567,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5368:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5337:32:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17572,"nodeType":"IfStatement","src":"5333:101:74","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17569,"name":"ProposedOwnableFacet__removeRouterAllowlist_noProposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17376,"src":"5378:54:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5378:56:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17571,"nodeType":"RevertStatement","src":"5371:63:74"}},{"expression":{"arguments":[{"hexValue":"74727565","id":17574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5523:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":17573,"name":"_setRouterAllowlistRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17869,"src":"5496:26:74","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bool_$returns$__$","typeString":"function (bool)"}},"id":17575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5496:32:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17576,"nodeType":"ExpressionStatement","src":"5496:32:74"}]},"documentation":{"id":17550,"nodeType":"StructuredDocumentation","src":"4873:96:74","text":" @notice Indicates if the ownership of the asset allowlist has\n been renounced"},"functionSelector":"23986f7d","id":17578,"implemented":true,"kind":"function","modifiers":[{"id":17553,"kind":"modifierInvocation","modifierName":{"id":17552,"name":"onlyOwnerOrAdmin","nameLocations":["5012:16:74"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"5012:16:74"},"nodeType":"ModifierInvocation","src":"5012:16:74"},{"arguments":[{"expression":{"id":17555,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"5042:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17556,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5044:25:74","memberName":"_routerAllowlistTimestamp","nodeType":"MemberAccess","referencedDeclaration":29476,"src":"5042:27:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17557,"kind":"modifierInvocation","modifierName":{"id":17554,"name":"delayElapsed","nameLocations":["5029:12:74"],"nodeType":"IdentifierPath","referencedDeclaration":17446,"src":"5029:12:74"},"nodeType":"ModifierInvocation","src":"5029:41:74"}],"name":"removeRouterAllowlist","nameLocation":"4981:21:74","nodeType":"FunctionDefinition","parameters":{"id":17551,"nodeType":"ParameterList","parameters":[],"src":"5002:2:74"},"returnParameters":{"id":17558,"nodeType":"ParameterList","parameters":[],"src":"5071:0:74"},"scope":17913,"src":"4972:561:74","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[49998],"body":{"id":17613,"nodeType":"Block","src":"5744:355:74","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17586,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"5789:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17587,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5791:9:74","memberName":"_proposed","nodeType":"MemberAccess","referencedDeclaration":29470,"src":"5789:11:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":17588,"name":"newlyProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17581,"src":"5804:13:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5789:28:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17590,"name":"newlyProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17581,"src":"5821:13:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5846:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17592,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5838:7:74","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17591,"name":"address","nodeType":"ElementaryTypeName","src":"5838:7:74","typeDescriptions":{}}},"id":17594,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5838:10:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5821:27:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5789:59:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17600,"nodeType":"IfStatement","src":"5785:133:74","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17597,"name":"ProposedOwnableFacet__proposeNewOwner_invalidProposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17384,"src":"5863:53:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5863:55:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17599,"nodeType":"RevertStatement","src":"5856:62:74"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":17601,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17457,"src":"5970:5:74","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":17602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5970:7:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":17603,"name":"newlyProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17581,"src":"5981:13:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5970:24:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17608,"nodeType":"IfStatement","src":"5966:94:74","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17605,"name":"ProposedOwnableFacet__proposeNewOwner_noOwnershipChange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17386,"src":"6003:55:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6003:57:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17607,"nodeType":"RevertStatement","src":"5996:64:74"}},{"expression":{"arguments":[{"id":17610,"name":"newlyProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17581,"src":"6080:13:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17609,"name":"_setProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17912,"src":"6067:12:74","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":17611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6067:27:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17612,"nodeType":"ExpressionStatement","src":"6067:27:74"}]},"documentation":{"id":17579,"nodeType":"StructuredDocumentation","src":"5537:139:74","text":" @notice Sets the timestamp for an owner to be proposed, and sets the\n newly proposed owner as step 1 in a 2-step process"},"functionSelector":"b1f8100d","id":17614,"implemented":true,"kind":"function","modifiers":[{"id":17584,"kind":"modifierInvocation","modifierName":{"id":17583,"name":"onlyOwner","nameLocations":["5734:9:74"],"nodeType":"IdentifierPath","referencedDeclaration":13816,"src":"5734:9:74"},"nodeType":"ModifierInvocation","src":"5734:9:74"}],"name":"proposeNewOwner","nameLocation":"5688:15:74","nodeType":"FunctionDefinition","parameters":{"id":17582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17581,"mutability":"mutable","name":"newlyProposed","nameLocation":"5712:13:74","nodeType":"VariableDeclaration","scope":17614,"src":"5704:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17580,"name":"address","nodeType":"ElementaryTypeName","src":"5704:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5703:23:74"},"returnParameters":{"id":17585,"nodeType":"ParameterList","parameters":[],"src":"5744:0:74"},"scope":17913,"src":"5679:420:74","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[50002],"body":{"id":17638,"nodeType":"Block","src":"6337:453:74","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":17624,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17457,"src":"6382:5:74","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":17625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6382:7:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":17626,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"6393:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17627,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6395:9:74","memberName":"_proposed","nodeType":"MemberAccess","referencedDeclaration":29470,"src":"6393:11:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6382:22:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17632,"nodeType":"IfStatement","src":"6378:96:74","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17629,"name":"ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17388,"src":"6413:59:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6413:61:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17631,"nodeType":"RevertStatement","src":"6406:68:74"}},{"expression":{"arguments":[{"expression":{"id":17634,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"6773:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17635,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6775:9:74","memberName":"_proposed","nodeType":"MemberAccess","referencedDeclaration":29470,"src":"6773:11:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17633,"name":"_setOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17889,"src":"6763:9:74","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":17636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6763:22:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17637,"nodeType":"ExpressionStatement","src":"6763:22:74"}]},"documentation":{"id":17615,"nodeType":"StructuredDocumentation","src":"6103:136:74","text":" @notice Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the proposed owner."},"functionSelector":"c5b350df","id":17639,"implemented":true,"kind":"function","modifiers":[{"id":17618,"kind":"modifierInvocation","modifierName":{"id":17617,"name":"onlyProposed","nameLocations":["6280:12:74"],"nodeType":"IdentifierPath","referencedDeclaration":13830,"src":"6280:12:74"},"nodeType":"ModifierInvocation","src":"6280:12:74"},{"arguments":[{"expression":{"id":17620,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"6306:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17621,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6308:27:74","memberName":"_proposedOwnershipTimestamp","nodeType":"MemberAccess","referencedDeclaration":29472,"src":"6306:29:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17622,"kind":"modifierInvocation","modifierName":{"id":17619,"name":"delayElapsed","nameLocations":["6293:12:74"],"nodeType":"IdentifierPath","referencedDeclaration":17446,"src":"6293:12:74"},"nodeType":"ModifierInvocation","src":"6293:43:74"}],"name":"acceptProposedOwner","nameLocation":"6251:19:74","nodeType":"FunctionDefinition","parameters":{"id":17616,"nodeType":"ParameterList","parameters":[],"src":"6270:2:74"},"returnParameters":{"id":17623,"nodeType":"ParameterList","parameters":[],"src":"6337:0:74"},"scope":17913,"src":"6242:548:74","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":17684,"nodeType":"Block","src":"7125:364:74","statements":[{"assignments":[17649],"declarations":[{"constant":false,"id":17649,"mutability":"mutable","name":"revokedRole","nameLocation":"7261:11:74","nodeType":"VariableDeclaration","scope":17684,"src":"7256:16:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"},"typeName":{"id":17648,"nodeType":"UserDefinedTypeName","pathNode":{"id":17647,"name":"Role","nameLocations":["7256:4:74"],"nodeType":"IdentifierPath","referencedDeclaration":29319,"src":"7256:4:74"},"referencedDeclaration":29319,"src":"7256:4:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"visibility":"internal"}],"id":17654,"initialValue":{"baseExpression":{"expression":{"id":17650,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"7275:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17651,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7277:5:74","memberName":"roles","nodeType":"MemberAccess","referencedDeclaration":29482,"src":"7275:7:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_Role_$29319_$","typeString":"mapping(address => enum Role)"}},"id":17653,"indexExpression":{"id":17652,"name":"_revoke","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17642,"src":"7283:7:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7275:16:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"nodeType":"VariableDeclarationStatement","src":"7256:35:74"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"},"id":17658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17655,"name":"revokedRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17649,"src":"7301:11:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":17656,"name":"Role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"7316:4:74","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Role_$29319_$","typeString":"type(enum Role)"}},"id":17657,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7321:4:74","memberName":"None","nodeType":"MemberAccess","referencedDeclaration":29315,"src":"7316:9:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"src":"7301:24:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17659,"name":"_revoke","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17642,"src":"7329:7:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7348:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17661,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7340:7:74","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17660,"name":"address","nodeType":"ElementaryTypeName","src":"7340:7:74","typeDescriptions":{}}},"id":17663,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7340:10:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7329:21:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7301:49:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17669,"nodeType":"IfStatement","src":"7297:109:74","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17666,"name":"ProposedOwnableFacet__revokeRole_invalidInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17390,"src":"7359:45:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7359:47:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17668,"nodeType":"RevertStatement","src":"7352:54:74"}},{"expression":{"id":17677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17670,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"7413:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17673,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7415:5:74","memberName":"roles","nodeType":"MemberAccess","referencedDeclaration":29482,"src":"7413:7:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_Role_$29319_$","typeString":"mapping(address => enum Role)"}},"id":17674,"indexExpression":{"id":17672,"name":"_revoke","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17642,"src":"7421:7:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7413:16:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":17675,"name":"Role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"7432:4:74","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Role_$29319_$","typeString":"type(enum Role)"}},"id":17676,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7437:4:74","memberName":"None","nodeType":"MemberAccess","referencedDeclaration":29315,"src":"7432:9:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"src":"7413:28:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"id":17678,"nodeType":"ExpressionStatement","src":"7413:28:74"},{"eventCall":{"arguments":[{"id":17680,"name":"_revoke","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17642,"src":"7463:7:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17681,"name":"revokedRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17649,"src":"7472:11:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}],"id":17679,"name":"RevokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17411,"src":"7452:10:74","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_enum$_Role_$29319_$returns$__$","typeString":"function (address,enum Role)"}},"id":17682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7452:32:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17683,"nodeType":"EmitStatement","src":"7447:37:74"}]},"documentation":{"id":17640,"nodeType":"StructuredDocumentation","src":"6794:267:74","text":" @notice Use to revoke the Role of an address to None\n Can only be called by Owner or Role.Admin\n @dev input address will be assingned default value i.e Role.None under mapping roles\n @param _revoke - The address to be revoked from it's Role"},"functionSelector":"80e52e3f","id":17685,"implemented":true,"kind":"function","modifiers":[{"id":17645,"kind":"modifierInvocation","modifierName":{"id":17644,"name":"onlyOwnerOrAdmin","nameLocations":["7108:16:74"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"7108:16:74"},"nodeType":"ModifierInvocation","src":"7108:16:74"}],"name":"revokeRole","nameLocation":"7073:10:74","nodeType":"FunctionDefinition","parameters":{"id":17643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17642,"mutability":"mutable","name":"_revoke","nameLocation":"7092:7:74","nodeType":"VariableDeclaration","scope":17685,"src":"7084:15:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17641,"name":"address","nodeType":"ElementaryTypeName","src":"7084:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7083:17:74"},"returnParameters":{"id":17646,"nodeType":"ParameterList","parameters":[],"src":"7125:0:74"},"scope":17913,"src":"7064:425:74","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":17724,"nodeType":"Block","src":"7907:333:74","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"},"id":17699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":17693,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8035:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17694,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8037:5:74","memberName":"roles","nodeType":"MemberAccess","referencedDeclaration":29482,"src":"8035:7:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_Role_$29319_$","typeString":"mapping(address => enum Role)"}},"id":17696,"indexExpression":{"id":17695,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17688,"src":"8043:7:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8035:16:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":17697,"name":"Role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"8055:4:74","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Role_$29319_$","typeString":"type(enum Role)"}},"id":17698,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8060:4:74","memberName":"None","nodeType":"MemberAccess","referencedDeclaration":29315,"src":"8055:9:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"src":"8035:29:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17700,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17688,"src":"8068:7:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17703,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8087:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17702,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8079:7:74","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17701,"name":"address","nodeType":"ElementaryTypeName","src":"8079:7:74","typeDescriptions":{}}},"id":17704,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8079:10:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8068:21:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8035:54:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17710,"nodeType":"IfStatement","src":"8031:126:74","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17707,"name":"ProposedOwnableFacet__assignRoleRouter_invalidInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17392,"src":"8104:51:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8104:53:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17709,"nodeType":"RevertStatement","src":"8097:60:74"}},{"expression":{"id":17718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17711,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8164:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17714,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8166:5:74","memberName":"roles","nodeType":"MemberAccess","referencedDeclaration":29482,"src":"8164:7:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_Role_$29319_$","typeString":"mapping(address => enum Role)"}},"id":17715,"indexExpression":{"id":17713,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17688,"src":"8172:7:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8164:16:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":17716,"name":"Role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"8183:4:74","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Role_$29319_$","typeString":"type(enum Role)"}},"id":17717,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8188:11:74","memberName":"RouterAdmin","nodeType":"MemberAccess","referencedDeclaration":29316,"src":"8183:16:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"src":"8164:35:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"id":17719,"nodeType":"ExpressionStatement","src":"8164:35:74"},{"eventCall":{"arguments":[{"id":17721,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17688,"src":"8227:7:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17720,"name":"AssignRoleRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17415,"src":"8210:16:74","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":17722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8210:25:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17723,"nodeType":"EmitStatement","src":"8205:30:74"}]},"documentation":{"id":17686,"nodeType":"StructuredDocumentation","src":"7493:339:74","text":" @notice Use to assign an address Router role\n Address with Router has permission to add new router\n Can only be called by Owner or Role.RouterAdmin\n @dev requested address will be whitelisted as Role.RouterAdmin under mapping roles\n @param _router - The address to be assigned as Role.RouterAdmin under roles"},"functionSelector":"2ec0c002","id":17725,"implemented":true,"kind":"function","modifiers":[{"id":17691,"kind":"modifierInvocation","modifierName":{"id":17690,"name":"onlyOwnerOrAdmin","nameLocations":["7890:16:74"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"7890:16:74"},"nodeType":"ModifierInvocation","src":"7890:16:74"}],"name":"assignRoleRouterAdmin","nameLocation":"7844:21:74","nodeType":"FunctionDefinition","parameters":{"id":17689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17688,"mutability":"mutable","name":"_router","nameLocation":"7874:7:74","nodeType":"VariableDeclaration","scope":17725,"src":"7866:15:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17687,"name":"address","nodeType":"ElementaryTypeName","src":"7866:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7865:17:74"},"returnParameters":{"id":17692,"nodeType":"ParameterList","parameters":[],"src":"7907:0:74"},"scope":17913,"src":"7835:405:74","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":17764,"nodeType":"Block","src":"8640:335:74","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"},"id":17739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":17733,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8768:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17734,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8770:5:74","memberName":"roles","nodeType":"MemberAccess","referencedDeclaration":29482,"src":"8768:7:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_Role_$29319_$","typeString":"mapping(address => enum Role)"}},"id":17736,"indexExpression":{"id":17735,"name":"_watcher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17728,"src":"8776:8:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8768:17:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":17737,"name":"Role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"8789:4:74","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Role_$29319_$","typeString":"type(enum Role)"}},"id":17738,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8794:4:74","memberName":"None","nodeType":"MemberAccess","referencedDeclaration":29315,"src":"8789:9:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"src":"8768:30:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17740,"name":"_watcher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17728,"src":"8802:8:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8822:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17742,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8814:7:74","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17741,"name":"address","nodeType":"ElementaryTypeName","src":"8814:7:74","typeDescriptions":{}}},"id":17744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8814:10:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8802:22:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8768:56:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17750,"nodeType":"IfStatement","src":"8764:129:74","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17747,"name":"ProposedOwnableFacet__assignRoleWatcher_invalidInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17394,"src":"8839:52:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17748,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8839:54:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17749,"nodeType":"RevertStatement","src":"8832:61:74"}},{"expression":{"id":17758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17751,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8900:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17754,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8902:5:74","memberName":"roles","nodeType":"MemberAccess","referencedDeclaration":29482,"src":"8900:7:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_Role_$29319_$","typeString":"mapping(address => enum Role)"}},"id":17755,"indexExpression":{"id":17753,"name":"_watcher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17728,"src":"8908:8:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8900:17:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":17756,"name":"Role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"8920:4:74","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Role_$29319_$","typeString":"type(enum Role)"}},"id":17757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8925:7:74","memberName":"Watcher","nodeType":"MemberAccess","referencedDeclaration":29317,"src":"8920:12:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"src":"8900:32:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"id":17759,"nodeType":"ExpressionStatement","src":"8900:32:74"},{"eventCall":{"arguments":[{"id":17761,"name":"_watcher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17728,"src":"8961:8:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17760,"name":"AssignRoleWatcher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17419,"src":"8943:17:74","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":17762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8943:27:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17763,"nodeType":"EmitStatement","src":"8938:32:74"}]},"documentation":{"id":17726,"nodeType":"StructuredDocumentation","src":"8244:324:74","text":" @notice Use to assign an address Watcher role\n Address with Watcher role has permission to pause\n Can only be called by Owner or Role.Admin\n @dev requested address will be allowlisted as Role.Watcher under mapping roles\n @param _watcher - The address to be assigned as Role.Watcher under roles"},"functionSelector":"a9943b1b","id":17765,"implemented":true,"kind":"function","modifiers":[{"id":17731,"kind":"modifierInvocation","modifierName":{"id":17730,"name":"onlyOwnerOrAdmin","nameLocations":["8623:16:74"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"8623:16:74"},"nodeType":"ModifierInvocation","src":"8623:16:74"}],"name":"assignRoleWatcher","nameLocation":"8580:17:74","nodeType":"FunctionDefinition","parameters":{"id":17729,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17728,"mutability":"mutable","name":"_watcher","nameLocation":"8606:8:74","nodeType":"VariableDeclaration","scope":17765,"src":"8598:16:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17727,"name":"address","nodeType":"ElementaryTypeName","src":"8598:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8597:18:74"},"returnParameters":{"id":17732,"nodeType":"ParameterList","parameters":[],"src":"8640:0:74"},"scope":17913,"src":"8571:404:74","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":17804,"nodeType":"Block","src":"9388:321:74","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"},"id":17779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":17773,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9516:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17774,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9518:5:74","memberName":"roles","nodeType":"MemberAccess","referencedDeclaration":29482,"src":"9516:7:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_Role_$29319_$","typeString":"mapping(address => enum Role)"}},"id":17776,"indexExpression":{"id":17775,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17768,"src":"9524:6:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9516:15:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":17777,"name":"Role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"9535:4:74","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Role_$29319_$","typeString":"type(enum Role)"}},"id":17778,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9540:4:74","memberName":"None","nodeType":"MemberAccess","referencedDeclaration":29315,"src":"9535:9:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"src":"9516:28:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17780,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17768,"src":"9548:6:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17783,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9566:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17782,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9558:7:74","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17781,"name":"address","nodeType":"ElementaryTypeName","src":"9558:7:74","typeDescriptions":{}}},"id":17784,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9558:10:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9548:20:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9516:52:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17790,"nodeType":"IfStatement","src":"9512:123:74","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17787,"name":"ProposedOwnableFacet__assignRoleAdmin_invalidInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17396,"src":"9583:50:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9583:52:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17789,"nodeType":"RevertStatement","src":"9576:59:74"}},{"expression":{"id":17798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17791,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9642:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17794,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9644:5:74","memberName":"roles","nodeType":"MemberAccess","referencedDeclaration":29482,"src":"9642:7:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_Role_$29319_$","typeString":"mapping(address => enum Role)"}},"id":17795,"indexExpression":{"id":17793,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17768,"src":"9650:6:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9642:15:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":17796,"name":"Role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"9660:4:74","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Role_$29319_$","typeString":"type(enum Role)"}},"id":17797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9665:5:74","memberName":"Admin","nodeType":"MemberAccess","referencedDeclaration":29318,"src":"9660:10:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"src":"9642:28:74","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}},"id":17799,"nodeType":"ExpressionStatement","src":"9642:28:74"},{"eventCall":{"arguments":[{"id":17801,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17768,"src":"9697:6:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17800,"name":"AssignRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17423,"src":"9681:15:74","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":17802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9681:23:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17803,"nodeType":"EmitStatement","src":"9676:28:74"}]},"documentation":{"id":17766,"nodeType":"StructuredDocumentation","src":"8979:341:74","text":" @notice Use to assign an address Admin role\n Address with Admin role has permission to all else of Router & Watcher role\n Can only be called by Owner or Role.Admin\n @dev requested address will be allowlisted as Role.Admin under mapping roles\n @param _admin - The address to beassigned as Role.Admin under roles"},"functionSelector":"bb271a27","id":17805,"implemented":true,"kind":"function","modifiers":[{"id":17771,"kind":"modifierInvocation","modifierName":{"id":17770,"name":"onlyOwnerOrAdmin","nameLocations":["9371:16:74"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"9371:16:74"},"nodeType":"ModifierInvocation","src":"9371:16:74"}],"name":"assignRoleAdmin","nameLocation":"9332:15:74","nodeType":"FunctionDefinition","parameters":{"id":17769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17768,"mutability":"mutable","name":"_admin","nameLocation":"9356:6:74","nodeType":"VariableDeclaration","scope":17805,"src":"9348:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17767,"name":"address","nodeType":"ElementaryTypeName","src":"9348:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9347:16:74"},"returnParameters":{"id":17772,"nodeType":"ParameterList","parameters":[],"src":"9388:0:74"},"scope":17913,"src":"9323:386:74","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":17819,"nodeType":"Block","src":"9756:46:74","statements":[{"expression":{"id":17814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17810,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9762:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17812,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9764:7:74","memberName":"_paused","nodeType":"MemberAccess","referencedDeclaration":29510,"src":"9762:9:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":17813,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9774:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"9762:16:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17815,"nodeType":"ExpressionStatement","src":"9762:16:74"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17816,"name":"Paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17425,"src":"9789:6:74","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":17817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9789:8:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17818,"nodeType":"EmitStatement","src":"9784:13:74"}]},"functionSelector":"8456cb59","id":17820,"implemented":true,"kind":"function","modifiers":[{"id":17808,"kind":"modifierInvocation","modifierName":{"id":17807,"name":"onlyOwnerOrWatcher","nameLocations":["9737:18:74"],"nodeType":"IdentifierPath","referencedDeclaration":13878,"src":"9737:18:74"},"nodeType":"ModifierInvocation","src":"9737:18:74"}],"name":"pause","nameLocation":"9722:5:74","nodeType":"FunctionDefinition","parameters":{"id":17806,"nodeType":"ParameterList","parameters":[],"src":"9727:2:74"},"returnParameters":{"id":17809,"nodeType":"ParameterList","parameters":[],"src":"9756:0:74"},"scope":17913,"src":"9713:89:74","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":17832,"nodeType":"Block","src":"9849:48:74","statements":[{"expression":{"id":17827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"9855:16:74","subExpression":{"expression":{"id":17825,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9862:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17826,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9864:7:74","memberName":"_paused","nodeType":"MemberAccess","referencedDeclaration":29510,"src":"9862:9:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17828,"nodeType":"ExpressionStatement","src":"9855:16:74"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17829,"name":"Unpaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17427,"src":"9882:8:74","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":17830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9882:10:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17831,"nodeType":"EmitStatement","src":"9877:15:74"}]},"functionSelector":"3f4ba83a","id":17833,"implemented":true,"kind":"function","modifiers":[{"id":17823,"kind":"modifierInvocation","modifierName":{"id":17822,"name":"onlyOwnerOrAdmin","nameLocations":["9832:16:74"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"9832:16:74"},"nodeType":"ModifierInvocation","src":"9832:16:74"}],"name":"unpause","nameLocation":"9815:7:74","nodeType":"FunctionDefinition","parameters":{"id":17821,"nodeType":"ParameterList","parameters":[],"src":"9822:2:74"},"returnParameters":{"id":17824,"nodeType":"ParameterList","parameters":[],"src":"9849:0:74"},"scope":17913,"src":"9806:91:74","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":17848,"nodeType":"Block","src":"9975:114:74","statements":[{"expression":{"id":17841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17836,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9981:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17838,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9983:25:74","memberName":"_routerAllowlistTimestamp","nodeType":"MemberAccess","referencedDeclaration":29476,"src":"9981:27:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":17839,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"10011:5:74","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":17840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10017:9:74","memberName":"timestamp","nodeType":"MemberAccess","src":"10011:15:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9981:45:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17842,"nodeType":"ExpressionStatement","src":"9981:45:74"},{"eventCall":{"arguments":[{"expression":{"id":17844,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"10068:5:74","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":17845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10074:9:74","memberName":"timestamp","nodeType":"MemberAccess","src":"10068:15:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17843,"name":"RouterAllowlistRemovalProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17400,"src":"10037:30:74","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":17846,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10037:47:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17847,"nodeType":"EmitStatement","src":"10032:52:74"}]},"id":17849,"implemented":true,"kind":"function","modifiers":[],"name":"_setRouterAllowlistTimestamp","nameLocation":"9936:28:74","nodeType":"FunctionDefinition","parameters":{"id":17834,"nodeType":"ParameterList","parameters":[],"src":"9964:2:74"},"returnParameters":{"id":17835,"nodeType":"ParameterList","parameters":[],"src":"9975:0:74"},"scope":17913,"src":"9927:162:74","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":17868,"nodeType":"Block","src":"10149:124:74","statements":[{"expression":{"id":17858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17854,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10155:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17856,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10157:23:74","memberName":"_routerAllowlistRemoved","nodeType":"MemberAccess","referencedDeclaration":29474,"src":"10155:25:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17857,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17851,"src":"10183:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10155:33:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17859,"nodeType":"ExpressionStatement","src":"10155:33:74"},{"expression":{"id":17862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"10194:34:74","subExpression":{"expression":{"id":17860,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10201:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17861,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10203:25:74","memberName":"_routerAllowlistTimestamp","nodeType":"MemberAccess","referencedDeclaration":29476,"src":"10201:27:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17863,"nodeType":"ExpressionStatement","src":"10194:34:74"},{"eventCall":{"arguments":[{"id":17865,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17851,"src":"10262:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":17864,"name":"RouterAllowlistRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17404,"src":"10239:22:74","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bool_$returns$__$","typeString":"function (bool)"}},"id":17866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10239:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17867,"nodeType":"EmitStatement","src":"10234:34:74"}]},"id":17869,"implemented":true,"kind":"function","modifiers":[],"name":"_setRouterAllowlistRemoved","nameLocation":"10102:26:74","nodeType":"FunctionDefinition","parameters":{"id":17852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17851,"mutability":"mutable","name":"value","nameLocation":"10134:5:74","nodeType":"VariableDeclaration","scope":17869,"src":"10129:10:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17850,"name":"bool","nodeType":"ElementaryTypeName","src":"10129:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10128:12:74"},"returnParameters":{"id":17853,"nodeType":"ParameterList","parameters":[],"src":"10149:0:74"},"scope":17913,"src":"10093:180:74","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":17888,"nodeType":"Block","src":"10322:114:74","statements":[{"expression":{"id":17876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"10328:36:74","subExpression":{"expression":{"id":17874,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10335:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17875,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10337:27:74","memberName":"_proposedOwnershipTimestamp","nodeType":"MemberAccess","referencedDeclaration":29472,"src":"10335:29:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17877,"nodeType":"ExpressionStatement","src":"10328:36:74"},{"expression":{"id":17880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"10370:18:74","subExpression":{"expression":{"id":17878,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10377:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17879,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10379:9:74","memberName":"_proposed","nodeType":"MemberAccess","referencedDeclaration":29470,"src":"10377:11:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17881,"nodeType":"ExpressionStatement","src":"10370:18:74"},{"expression":{"arguments":[{"id":17885,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17871,"src":"10422:8:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17882,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"10394:10:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":17884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10405:16:74","memberName":"setContractOwner","nodeType":"MemberAccess","referencedDeclaration":29633,"src":"10394:27:74","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":17886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10394:37:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17887,"nodeType":"ExpressionStatement","src":"10394:37:74"}]},"id":17889,"implemented":true,"kind":"function","modifiers":[],"name":"_setOwner","nameLocation":"10286:9:74","nodeType":"FunctionDefinition","parameters":{"id":17872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17871,"mutability":"mutable","name":"newOwner","nameLocation":"10304:8:74","nodeType":"VariableDeclaration","scope":17889,"src":"10296:16:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17870,"name":"address","nodeType":"ElementaryTypeName","src":"10296:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10295:18:74"},"returnParameters":{"id":17873,"nodeType":"ParameterList","parameters":[],"src":"10322:0:74"},"scope":17913,"src":"10277:159:74","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":17911,"nodeType":"Block","src":"10493:134:74","statements":[{"expression":{"id":17899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17894,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10499:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17896,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10501:27:74","memberName":"_proposedOwnershipTimestamp","nodeType":"MemberAccess","referencedDeclaration":29472,"src":"10499:29:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":17897,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"10531:5:74","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":17898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10537:9:74","memberName":"timestamp","nodeType":"MemberAccess","src":"10531:15:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10499:47:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17900,"nodeType":"ExpressionStatement","src":"10499:47:74"},{"expression":{"id":17905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17901,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10552:1:74","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17903,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10554:9:74","memberName":"_proposed","nodeType":"MemberAccess","referencedDeclaration":29470,"src":"10552:11:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17904,"name":"newlyProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17891,"src":"10566:13:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10552:27:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":17906,"nodeType":"ExpressionStatement","src":"10552:27:74"},{"eventCall":{"arguments":[{"id":17908,"name":"newlyProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17891,"src":"10608:13:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17907,"name":"OwnershipProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49973,"src":"10590:17:74","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":17909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10590:32:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17910,"nodeType":"EmitStatement","src":"10585:37:74"}]},"id":17912,"implemented":true,"kind":"function","modifiers":[],"name":"_setProposed","nameLocation":"10449:12:74","nodeType":"FunctionDefinition","parameters":{"id":17892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17891,"mutability":"mutable","name":"newlyProposed","nameLocation":"10470:13:74","nodeType":"VariableDeclaration","scope":17912,"src":"10462:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17890,"name":"address","nodeType":"ElementaryTypeName","src":"10462:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10461:23:74"},"returnParameters":{"id":17893,"nodeType":"ParameterList","parameters":[],"src":"10493:0:74"},"scope":17913,"src":"10440:187:74","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":17914,"src":"1024:9605:74","usedErrors":[13728,13730,13732,13734,13736,13738,13740,13742,13744,13746,17370,17372,17374,17376,17378,17380,17382,17384,17386,17388,17390,17392,17394,17396]}],"src":"39:10591:74"},"id":74},"contracts/core/connext/facets/RelayerFacet.sol":{"ast":{"absolutePath":"contracts/core/connext/facets/RelayerFacet.sol","exportedSymbols":{"BaseConnextFacet":[14146],"RelayerFacet":[18069]},"id":18070,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":17915,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:75"},{"absolutePath":"contracts/core/connext/facets/BaseConnextFacet.sol","file":"./BaseConnextFacet.sol","id":17917,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18070,"sourceUnit":14147,"src":"64:56:75","symbolAliases":[{"foreign":{"id":17916,"name":"BaseConnextFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14146,"src":"72:16:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":17918,"name":"BaseConnextFacet","nameLocations":["147:16:75"],"nodeType":"IdentifierPath","referencedDeclaration":14146,"src":"147:16:75"},"id":17919,"nodeType":"InheritanceSpecifier","src":"147:16:75"}],"canonicalName":"RelayerFacet","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":18069,"linearizedBaseContracts":[18069,14146],"name":"RelayerFacet","nameLocation":"131:12:75","nodeType":"ContractDefinition","nodes":[{"errorSelector":"cbb50e41","id":17921,"name":"RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault","nameLocation":"216:55:75","nodeType":"ErrorDefinition","parameters":{"id":17920,"nodeType":"ParameterList","parameters":[],"src":"271:2:75"},"src":"210:64:75"},{"errorSelector":"bd32ecf8","id":17923,"name":"RelayerFacet__addRelayer_alreadyApproved","nameLocation":"283:40:75","nodeType":"ErrorDefinition","parameters":{"id":17922,"nodeType":"ParameterList","parameters":[],"src":"323:2:75"},"src":"277:49:75"},{"errorSelector":"1434b9dc","id":17925,"name":"RelayerFacet__removeRelayer_notApproved","nameLocation":"335:39:75","nodeType":"ErrorDefinition","parameters":{"id":17924,"nodeType":"ParameterList","parameters":[],"src":"374:2:75"},"src":"329:48:75"},{"anonymous":false,"documentation":{"id":17926,"nodeType":"StructuredDocumentation","src":"416:239:75","text":" @notice Emitted when the relayerFeeVault variable is updated\n @param oldVault - The relayerFeeVault old value\n @param newVault - The relayerFeeVault new value\n @param caller - The account that called the function"},"eventSelector":"81ccf12657606de24814d9c94f72fc587a18c112856a546a1669fff3cb6cac2b","id":17934,"name":"RelayerFeeVaultUpdated","nameLocation":"664:22:75","nodeType":"EventDefinition","parameters":{"id":17933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17928,"indexed":false,"mutability":"mutable","name":"oldVault","nameLocation":"695:8:75","nodeType":"VariableDeclaration","scope":17934,"src":"687:16:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17927,"name":"address","nodeType":"ElementaryTypeName","src":"687:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17930,"indexed":false,"mutability":"mutable","name":"newVault","nameLocation":"713:8:75","nodeType":"VariableDeclaration","scope":17934,"src":"705:16:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17929,"name":"address","nodeType":"ElementaryTypeName","src":"705:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17932,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"731:6:75","nodeType":"VariableDeclaration","scope":17934,"src":"723:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17931,"name":"address","nodeType":"ElementaryTypeName","src":"723:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"686:52:75"},"src":"658:81:75"},{"anonymous":false,"documentation":{"id":17935,"nodeType":"StructuredDocumentation","src":"743:204:75","text":" @notice Emitted when a relayer is added or removed from allowlists\n @param relayer - The relayer address to be added or removed\n @param caller - The account that called the function"},"eventSelector":"d756b9aee10d6f2c80dc42c5031beb0e0847f6e1d6ba50199bdfc3f0de5cc0cc","id":17941,"name":"RelayerAdded","nameLocation":"956:12:75","nodeType":"EventDefinition","parameters":{"id":17940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17937,"indexed":false,"mutability":"mutable","name":"relayer","nameLocation":"977:7:75","nodeType":"VariableDeclaration","scope":17941,"src":"969:15:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17936,"name":"address","nodeType":"ElementaryTypeName","src":"969:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17939,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"994:6:75","nodeType":"VariableDeclaration","scope":17941,"src":"986:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17938,"name":"address","nodeType":"ElementaryTypeName","src":"986:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"968:33:75"},"src":"950:52:75"},{"anonymous":false,"documentation":{"id":17942,"nodeType":"StructuredDocumentation","src":"1006:204:75","text":" @notice Emitted when a relayer is added or removed from allowlists\n @param relayer - The relayer address to be added or removed\n @param caller - The account that called the function"},"eventSelector":"0bdcf1d6f29aa87af8131cc81dcbb295fcf98d71cfcdc79cc5d965317bae1d0a","id":17948,"name":"RelayerRemoved","nameLocation":"1219:14:75","nodeType":"EventDefinition","parameters":{"id":17947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17944,"indexed":false,"mutability":"mutable","name":"relayer","nameLocation":"1242:7:75","nodeType":"VariableDeclaration","scope":17948,"src":"1234:15:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17943,"name":"address","nodeType":"ElementaryTypeName","src":"1234:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17946,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"1259:6:75","nodeType":"VariableDeclaration","scope":17948,"src":"1251:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17945,"name":"address","nodeType":"ElementaryTypeName","src":"1251:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1233:33:75"},"src":"1213:54:75"},{"body":{"id":17960,"nodeType":"Block","src":"1424:46:75","statements":[{"expression":{"baseExpression":{"expression":{"id":17955,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"1437:1:75","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17956,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1439:16:75","memberName":"approvedRelayers","nodeType":"MemberAccess","referencedDeclaration":29450,"src":"1437:18:75","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":17958,"indexExpression":{"id":17957,"name":"_relayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17950,"src":"1456:8:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1437:28:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17954,"id":17959,"nodeType":"Return","src":"1430:35:75"}]},"functionSelector":"8cba8b6a","id":17961,"implemented":true,"kind":"function","modifiers":[],"name":"approvedRelayers","nameLocation":"1362:16:75","nodeType":"FunctionDefinition","parameters":{"id":17951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17950,"mutability":"mutable","name":"_relayer","nameLocation":"1387:8:75","nodeType":"VariableDeclaration","scope":17961,"src":"1379:16:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17949,"name":"address","nodeType":"ElementaryTypeName","src":"1379:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1378:18:75"},"returnParameters":{"id":17954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17953,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17961,"src":"1418:4:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17952,"name":"bool","nodeType":"ElementaryTypeName","src":"1418:4:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1417:6:75"},"scope":18069,"src":"1353:117:75","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":17969,"nodeType":"Block","src":"1533:35:75","statements":[{"expression":{"expression":{"id":17966,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"1546:1:75","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17967,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1548:15:75","memberName":"relayerFeeVault","nodeType":"MemberAccess","referencedDeclaration":29402,"src":"1546:17:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":17965,"id":17968,"nodeType":"Return","src":"1539:24:75"}]},"functionSelector":"65bc8582","id":17970,"implemented":true,"kind":"function","modifiers":[],"name":"relayerFeeVault","nameLocation":"1483:15:75","nodeType":"FunctionDefinition","parameters":{"id":17962,"nodeType":"ParameterList","parameters":[],"src":"1498:2:75"},"returnParameters":{"id":17965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17964,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17970,"src":"1524:7:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17963,"name":"address","nodeType":"ElementaryTypeName","src":"1524:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1523:9:75"},"scope":18069,"src":"1474:94:75","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":18006,"nodeType":"Block","src":"1815:261:75","statements":[{"assignments":[17979],"declarations":[{"constant":false,"id":17979,"mutability":"mutable","name":"old","nameLocation":"1829:3:75","nodeType":"VariableDeclaration","scope":18006,"src":"1821:11:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17978,"name":"address","nodeType":"ElementaryTypeName","src":"1821:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17985,"initialValue":{"arguments":[{"expression":{"id":17982,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"1843:1:75","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17983,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1845:15:75","memberName":"relayerFeeVault","nodeType":"MemberAccess","referencedDeclaration":29402,"src":"1843:17:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17981,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1835:7:75","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17980,"name":"address","nodeType":"ElementaryTypeName","src":"1835:7:75","typeDescriptions":{}}},"id":17984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1835:26:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1821:40:75"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17986,"name":"old","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17979,"src":"1871:3:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":17987,"name":"_relayerFeeVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17973,"src":"1878:16:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1871:23:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17992,"nodeType":"IfStatement","src":"1867:93:75","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17989,"name":"RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17921,"src":"1903:55:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":17990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1903:57:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17991,"nodeType":"RevertStatement","src":"1896:64:75"}},{"expression":{"id":17997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17993,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"1967:1:75","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":17995,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1969:15:75","memberName":"relayerFeeVault","nodeType":"MemberAccess","referencedDeclaration":29402,"src":"1967:17:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17996,"name":"_relayerFeeVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17973,"src":"1987:16:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1967:36:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":17998,"nodeType":"ExpressionStatement","src":"1967:36:75"},{"eventCall":{"arguments":[{"id":18000,"name":"old","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17979,"src":"2037:3:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18001,"name":"_relayerFeeVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17973,"src":"2042:16:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18002,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2060:3:75","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2064:6:75","memberName":"sender","nodeType":"MemberAccess","src":"2060:10:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17999,"name":"RelayerFeeVaultUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17934,"src":"2014:22:75","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":18004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2014:57:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18005,"nodeType":"EmitStatement","src":"2009:62:75"}]},"documentation":{"id":17971,"nodeType":"StructuredDocumentation","src":"1620:112:75","text":" @notice Updates the relayer fee router\n @param _relayerFeeVault The address of the new router"},"functionSelector":"f01b3e01","id":18007,"implemented":true,"kind":"function","modifiers":[{"id":17976,"kind":"modifierInvocation","modifierName":{"id":17975,"name":"onlyOwnerOrAdmin","nameLocations":["1798:16:75"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"1798:16:75"},"nodeType":"ModifierInvocation","src":"1798:16:75"}],"name":"setRelayerFeeVault","nameLocation":"1744:18:75","nodeType":"FunctionDefinition","parameters":{"id":17974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17973,"mutability":"mutable","name":"_relayerFeeVault","nameLocation":"1771:16:75","nodeType":"VariableDeclaration","scope":18007,"src":"1763:24:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17972,"name":"address","nodeType":"ElementaryTypeName","src":"1763:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1762:26:75"},"returnParameters":{"id":17977,"nodeType":"ParameterList","parameters":[],"src":"1815:0:75"},"scope":18069,"src":"1735:341:75","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18037,"nodeType":"Block","src":"2248:181:75","statements":[{"condition":{"baseExpression":{"expression":{"id":18015,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"2258:1:75","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18016,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2260:16:75","memberName":"approvedRelayers","nodeType":"MemberAccess","referencedDeclaration":29450,"src":"2258:18:75","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":18018,"indexExpression":{"id":18017,"name":"_relayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18010,"src":"2277:8:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2258:28:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18022,"nodeType":"IfStatement","src":"2254:83:75","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18019,"name":"RelayerFacet__addRelayer_alreadyApproved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17923,"src":"2295:40:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2295:42:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18021,"nodeType":"RevertStatement","src":"2288:49:75"}},{"expression":{"id":18029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":18023,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"2343:1:75","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18026,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2345:16:75","memberName":"approvedRelayers","nodeType":"MemberAccess","referencedDeclaration":29450,"src":"2343:18:75","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":18027,"indexExpression":{"id":18025,"name":"_relayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18010,"src":"2362:8:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2343:28:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":18028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2374:4:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2343:35:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18030,"nodeType":"ExpressionStatement","src":"2343:35:75"},{"eventCall":{"arguments":[{"id":18032,"name":"_relayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18010,"src":"2403:8:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18033,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2413:3:75","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2417:6:75","memberName":"sender","nodeType":"MemberAccess","src":"2413:10:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18031,"name":"RelayerAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17941,"src":"2390:12:75","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":18035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2390:34:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18036,"nodeType":"EmitStatement","src":"2385:39:75"}]},"documentation":{"id":18008,"nodeType":"StructuredDocumentation","src":"2080:101:75","text":" @notice Used to add approved relayer\n @param _relayer - The relayer address to add"},"functionSelector":"dd39f00d","id":18038,"implemented":true,"kind":"function","modifiers":[{"id":18013,"kind":"modifierInvocation","modifierName":{"id":18012,"name":"onlyOwnerOrAdmin","nameLocations":["2231:16:75"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"2231:16:75"},"nodeType":"ModifierInvocation","src":"2231:16:75"}],"name":"addRelayer","nameLocation":"2193:10:75","nodeType":"FunctionDefinition","parameters":{"id":18011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18010,"mutability":"mutable","name":"_relayer","nameLocation":"2212:8:75","nodeType":"VariableDeclaration","scope":18038,"src":"2204:16:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18009,"name":"address","nodeType":"ElementaryTypeName","src":"2204:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2203:18:75"},"returnParameters":{"id":18014,"nodeType":"ParameterList","parameters":[],"src":"2248:0:75"},"scope":18069,"src":"2184:245:75","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18067,"nodeType":"Block","src":"2610:183:75","statements":[{"condition":{"id":18050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2620:29:75","subExpression":{"baseExpression":{"expression":{"id":18046,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"2621:1:75","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18047,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2623:16:75","memberName":"approvedRelayers","nodeType":"MemberAccess","referencedDeclaration":29450,"src":"2621:18:75","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":18049,"indexExpression":{"id":18048,"name":"_relayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18041,"src":"2640:8:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2621:28:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18054,"nodeType":"IfStatement","src":"2616:83:75","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18051,"name":"RelayerFacet__removeRelayer_notApproved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17925,"src":"2658:39:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2658:41:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18053,"nodeType":"RevertStatement","src":"2651:48:75"}},{"expression":{"id":18059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"2705:35:75","subExpression":{"baseExpression":{"expression":{"id":18055,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"2712:1:75","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18056,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2714:16:75","memberName":"approvedRelayers","nodeType":"MemberAccess","referencedDeclaration":29450,"src":"2712:18:75","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":18058,"indexExpression":{"id":18057,"name":"_relayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18041,"src":"2731:8:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2712:28:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18060,"nodeType":"ExpressionStatement","src":"2705:35:75"},{"eventCall":{"arguments":[{"id":18062,"name":"_relayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18041,"src":"2767:8:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18063,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2777:3:75","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2781:6:75","memberName":"sender","nodeType":"MemberAccess","src":"2777:10:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18061,"name":"RelayerRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17948,"src":"2752:14:75","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":18065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2752:36:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18066,"nodeType":"EmitStatement","src":"2747:41:75"}]},"documentation":{"id":18039,"nodeType":"StructuredDocumentation","src":"2433:107:75","text":" @notice Used to remove approved relayer\n @param _relayer - The relayer address to remove"},"functionSelector":"60f0a5ac","id":18068,"implemented":true,"kind":"function","modifiers":[{"id":18044,"kind":"modifierInvocation","modifierName":{"id":18043,"name":"onlyOwnerOrAdmin","nameLocations":["2593:16:75"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"2593:16:75"},"nodeType":"ModifierInvocation","src":"2593:16:75"}],"name":"removeRelayer","nameLocation":"2552:13:75","nodeType":"FunctionDefinition","parameters":{"id":18042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18041,"mutability":"mutable","name":"_relayer","nameLocation":"2574:8:75","nodeType":"VariableDeclaration","scope":18068,"src":"2566:16:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18040,"name":"address","nodeType":"ElementaryTypeName","src":"2566:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2565:18:75"},"returnParameters":{"id":18045,"nodeType":"ParameterList","parameters":[],"src":"2610:0:75"},"scope":18069,"src":"2543:250:75","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":18070,"src":"122:2673:75","usedErrors":[13728,13730,13732,13734,13736,13738,13740,13742,13744,13746,17921,17923,17925]}],"src":"39:2757:75"},"id":75},"contracts/core/connext/facets/RoutersFacet.sol":{"ast":{"absolutePath":"contracts/core/connext/facets/RoutersFacet.sol","exportedSymbols":{"AssetLogic":[28696],"BaseConnextFacet":[14146],"Constants":[29304],"RouterConfig":[29378],"RoutersFacet":[19351],"TokenId":[37728],"TypeCasts":[50188]},"id":19352,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":18071,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:76"},{"absolutePath":"contracts/shared/libraries/TypeCasts.sol","file":"../../../shared/libraries/TypeCasts.sol","id":18073,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19352,"sourceUnit":50189,"src":"64:66:76","symbolAliases":[{"foreign":{"id":18072,"name":"TypeCasts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50188,"src":"72:9:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/Constants.sol","file":"../libraries/Constants.sol","id":18075,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19352,"sourceUnit":29305,"src":"132:53:76","symbolAliases":[{"foreign":{"id":18074,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"140:9:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/AssetLogic.sol","file":"../libraries/AssetLogic.sol","id":18077,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19352,"sourceUnit":28697,"src":"186:55:76","symbolAliases":[{"foreign":{"id":18076,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"194:10:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/LibConnextStorage.sol","file":"../libraries/LibConnextStorage.sol","id":18079,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19352,"sourceUnit":29546,"src":"242:64:76","symbolAliases":[{"foreign":{"id":18078,"name":"RouterConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29378,"src":"250:12:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/TokenId.sol","file":"../libraries/TokenId.sol","id":18081,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19352,"sourceUnit":37729,"src":"307:49:76","symbolAliases":[{"foreign":{"id":18080,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37728,"src":"315:7:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/facets/BaseConnextFacet.sol","file":"./BaseConnextFacet.sol","id":18083,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19352,"sourceUnit":14147,"src":"358:56:76","symbolAliases":[{"foreign":{"id":18082,"name":"BaseConnextFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14146,"src":"366:16:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":18085,"name":"BaseConnextFacet","nameLocations":["1354:16:76"],"nodeType":"IdentifierPath","referencedDeclaration":14146,"src":"1354:16:76"},"id":18086,"nodeType":"InheritanceSpecifier","src":"1354:16:76"}],"canonicalName":"RoutersFacet","contractDependencies":[],"contractKind":"contract","documentation":{"id":18084,"nodeType":"StructuredDocumentation","src":"416:912:76","text":" @notice\n This contract is designed to manage router access, meaning it maintains the\n router recipients, owners, and the router allowlist itself.\n As a router, there are three important permissions:\n `router` - this is the address that will sign bids sent to the sequencer\n `routerRecipient` - this is the address that receives funds when liquidity is withdrawn\n `routerOwner` - this is the address permitted to update recipients and propose new owners\n In cases where the owner is not set, the caller should be the `router` itself. In cases where the\n `routerRecipient` is not set, the funds can be removed to anywhere.\n When setting a new `routerOwner`, the current owner (or router) must create a proposal, which\n can be accepted by the proposed owner after the delay period. If the proposed owner is the empty\n address, then it must be accepted by the current owner."},"fullyImplemented":true,"id":19351,"linearizedBaseContracts":[19351,14146],"name":"RoutersFacet","nameLocation":"1338:12:76","nodeType":"ContractDefinition","nodes":[{"errorSelector":"76b2ad07","id":18088,"name":"RoutersFacet__acceptProposedRouterOwner_notElapsed","nameLocation":"1423:50:76","nodeType":"ErrorDefinition","parameters":{"id":18087,"nodeType":"ParameterList","parameters":[],"src":"1473:2:76"},"src":"1417:59:76"},{"errorSelector":"3253a7bd","id":18090,"name":"RoutersFacet__acceptProposedRouterOwner_badCaller","nameLocation":"1485:49:76","nodeType":"ErrorDefinition","parameters":{"id":18089,"nodeType":"ParameterList","parameters":[],"src":"1534:2:76"},"src":"1479:58:76"},{"errorSelector":"1dfb5a62","id":18092,"name":"RoutersFacet__initializeRouter_configNotEmpty","nameLocation":"1546:45:76","nodeType":"ErrorDefinition","parameters":{"id":18091,"nodeType":"ParameterList","parameters":[],"src":"1591:2:76"},"src":"1540:54:76"},{"errorSelector":"d8021fa8","id":18094,"name":"RoutersFacet__setRouterRecipient_notNewRecipient","nameLocation":"1603:48:76","nodeType":"ErrorDefinition","parameters":{"id":18093,"nodeType":"ParameterList","parameters":[],"src":"1651:2:76"},"src":"1597:57:76"},{"errorSelector":"407c5849","id":18096,"name":"RoutersFacet__onlyRouterOwner_notRouterOwner","nameLocation":"1663:44:76","nodeType":"ErrorDefinition","parameters":{"id":18095,"nodeType":"ParameterList","parameters":[],"src":"1707:2:76"},"src":"1657:53:76"},{"errorSelector":"10bbac26","id":18098,"name":"RoutersFacet__unapproveRouter_routerEmpty","nameLocation":"1719:41:76","nodeType":"ErrorDefinition","parameters":{"id":18097,"nodeType":"ParameterList","parameters":[],"src":"1760:2:76"},"src":"1713:50:76"},{"errorSelector":"acc6257c","id":18100,"name":"RoutersFacet__unapproveRouter_notAdded","nameLocation":"1772:38:76","nodeType":"ErrorDefinition","parameters":{"id":18099,"nodeType":"ParameterList","parameters":[],"src":"1810:2:76"},"src":"1766:47:76"},{"errorSelector":"330ef51f","id":18102,"name":"RoutersFacet__approveRouter_routerEmpty","nameLocation":"1822:39:76","nodeType":"ErrorDefinition","parameters":{"id":18101,"nodeType":"ParameterList","parameters":[],"src":"1861:2:76"},"src":"1816:48:76"},{"errorSelector":"916e73bd","id":18104,"name":"RoutersFacet__approveRouter_alreadyAdded","nameLocation":"1873:40:76","nodeType":"ErrorDefinition","parameters":{"id":18103,"nodeType":"ParameterList","parameters":[],"src":"1913:2:76"},"src":"1867:49:76"},{"errorSelector":"724b0a58","id":18106,"name":"RoutersFacet__proposeRouterOwner_notNewOwner","nameLocation":"1925:44:76","nodeType":"ErrorDefinition","parameters":{"id":18105,"nodeType":"ParameterList","parameters":[],"src":"1969:2:76"},"src":"1919:53:76"},{"errorSelector":"d90b1f88","id":18108,"name":"RoutersFacet__proposeRouterOwner_badRouter","nameLocation":"1981:42:76","nodeType":"ErrorDefinition","parameters":{"id":18107,"nodeType":"ParameterList","parameters":[],"src":"2023:2:76"},"src":"1975:51:76"},{"errorSelector":"0d9f9fad","id":18110,"name":"RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer","nameLocation":"2035:67:76","nodeType":"ErrorDefinition","parameters":{"id":18109,"nodeType":"ParameterList","parameters":[],"src":"2102:2:76"},"src":"2029:76:76"},{"errorSelector":"e5dcf2fc","id":18112,"name":"RoutersFacet__addLiquidityForRouter_routerEmpty","nameLocation":"2114:47:76","nodeType":"ErrorDefinition","parameters":{"id":18111,"nodeType":"ParameterList","parameters":[],"src":"2161:2:76"},"src":"2108:56:76"},{"errorSelector":"2a241419","id":18114,"name":"RoutersFacet__addLiquidityForRouter_amountIsZero","nameLocation":"2173:48:76","nodeType":"ErrorDefinition","parameters":{"id":18113,"nodeType":"ParameterList","parameters":[],"src":"2221:2:76"},"src":"2167:57:76"},{"errorSelector":"a32632f8","id":18116,"name":"RoutersFacet__addLiquidityForRouter_badRouter","nameLocation":"2233:45:76","nodeType":"ErrorDefinition","parameters":{"id":18115,"nodeType":"ParameterList","parameters":[],"src":"2278:2:76"},"src":"2227:54:76"},{"errorSelector":"8ada3731","id":18118,"name":"RoutersFacet__addLiquidityForRouter_capReached","nameLocation":"2290:46:76","nodeType":"ErrorDefinition","parameters":{"id":18117,"nodeType":"ParameterList","parameters":[],"src":"2336:2:76"},"src":"2284:55:76"},{"errorSelector":"a2c203ce","id":18120,"name":"RoutersFacet__removeRouterLiquidity_recipientEmpty","nameLocation":"2348:50:76","nodeType":"ErrorDefinition","parameters":{"id":18119,"nodeType":"ParameterList","parameters":[],"src":"2398:2:76"},"src":"2342:59:76"},{"errorSelector":"c0d56f42","id":18122,"name":"RoutersFacet__removeRouterLiquidity_amountIsZero","nameLocation":"2410:48:76","nodeType":"ErrorDefinition","parameters":{"id":18121,"nodeType":"ParameterList","parameters":[],"src":"2458:2:76"},"src":"2404:57:76"},{"errorSelector":"0a1e6d4d","id":18124,"name":"RoutersFacet__removeRouterLiquidity_insufficientFunds","nameLocation":"2470:53:76","nodeType":"ErrorDefinition","parameters":{"id":18123,"nodeType":"ParameterList","parameters":[],"src":"2523:2:76"},"src":"2464:62:76"},{"errorSelector":"f3dc2d19","id":18126,"name":"RoutersFacet__removeRouterLiquidityFor_notOwner","nameLocation":"2535:47:76","nodeType":"ErrorDefinition","parameters":{"id":18125,"nodeType":"ParameterList","parameters":[],"src":"2582:2:76"},"src":"2529:56:76"},{"errorSelector":"b74bfc83","id":18128,"name":"RoutersFacet__setLiquidityFeeNumerator_tooSmall","nameLocation":"2594:47:76","nodeType":"ErrorDefinition","parameters":{"id":18127,"nodeType":"ParameterList","parameters":[],"src":"2641:2:76"},"src":"2588:56:76"},{"errorSelector":"e68e1066","id":18130,"name":"RoutersFacet__setLiquidityFeeNumerator_tooLarge","nameLocation":"2653:47:76","nodeType":"ErrorDefinition","parameters":{"id":18129,"nodeType":"ParameterList","parameters":[],"src":"2700:2:76"},"src":"2647:56:76"},{"errorSelector":"75befccb","id":18132,"name":"RoutersFacet__approveRouterForPortal_notAdded","nameLocation":"2712:45:76","nodeType":"ErrorDefinition","parameters":{"id":18131,"nodeType":"ParameterList","parameters":[],"src":"2757:2:76"},"src":"2706:54:76"},{"errorSelector":"c896c2d9","id":18134,"name":"RoutersFacet__approveRouterForPortal_alreadyApproved","nameLocation":"2769:52:76","nodeType":"ErrorDefinition","parameters":{"id":18133,"nodeType":"ParameterList","parameters":[],"src":"2821:2:76"},"src":"2763:61:76"},{"errorSelector":"ba757886","id":18136,"name":"RoutersFacet__unapproveRouterForPortal_notApproved","nameLocation":"2833:50:76","nodeType":"ErrorDefinition","parameters":{"id":18135,"nodeType":"ParameterList","parameters":[],"src":"2883:2:76"},"src":"2827:59:76"},{"errorSelector":"1347d842","id":18138,"name":"RoutersFacet__setRouterOwner_noChange","nameLocation":"2895:37:76","nodeType":"ErrorDefinition","parameters":{"id":18137,"nodeType":"ParameterList","parameters":[],"src":"2932:2:76"},"src":"2889:46:76"},{"anonymous":false,"documentation":{"id":18139,"nodeType":"StructuredDocumentation","src":"3021:168:76","text":" @notice Emitted when a new router is added\n @param router - The address of the added router\n @param caller - The account that called the function"},"eventSelector":"bc68405e644da2aaf25623ce2199da82c6dfd2e1de102b400eba6a091704d4f4","id":18145,"name":"RouterAdded","nameLocation":"3198:11:76","nodeType":"EventDefinition","parameters":{"id":18144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18141,"indexed":true,"mutability":"mutable","name":"router","nameLocation":"3226:6:76","nodeType":"VariableDeclaration","scope":18145,"src":"3210:22:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18140,"name":"address","nodeType":"ElementaryTypeName","src":"3210:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18143,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"3242:6:76","nodeType":"VariableDeclaration","scope":18145,"src":"3234:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18142,"name":"address","nodeType":"ElementaryTypeName","src":"3234:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3209:40:76"},"src":"3192:58:76"},{"anonymous":false,"documentation":{"id":18146,"nodeType":"StructuredDocumentation","src":"3254:178:76","text":" @notice Emitted when an existing router is removed\n @param router - The address of the removed router\n @param caller - The account that called the function"},"eventSelector":"bee3e974bb6a6f44f20096ede047c191eef60322e65e4ee4bd3392230a8716d5","id":18152,"name":"RouterRemoved","nameLocation":"3441:13:76","nodeType":"EventDefinition","parameters":{"id":18151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18148,"indexed":true,"mutability":"mutable","name":"router","nameLocation":"3471:6:76","nodeType":"VariableDeclaration","scope":18152,"src":"3455:22:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18147,"name":"address","nodeType":"ElementaryTypeName","src":"3455:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18150,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"3487:6:76","nodeType":"VariableDeclaration","scope":18152,"src":"3479:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18149,"name":"address","nodeType":"ElementaryTypeName","src":"3479:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3454:40:76"},"src":"3435:60:76"},{"anonymous":false,"documentation":{"id":18153,"nodeType":"StructuredDocumentation","src":"3499:279:76","text":" @notice Emitted when the recipient of router is updated\n @param router - The address of the added router\n @param prevRecipient  - The address of the previous recipient of the router\n @param newRecipient  - The address of the new recipient of the router"},"eventSelector":"31f32ebf07b0ac7fe173f7b7f3f943020d9bdc6dbfbdcdae01bd45ea78d953d7","id":18161,"name":"RouterRecipientSet","nameLocation":"3787:18:76","nodeType":"EventDefinition","parameters":{"id":18160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18155,"indexed":true,"mutability":"mutable","name":"router","nameLocation":"3822:6:76","nodeType":"VariableDeclaration","scope":18161,"src":"3806:22:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18154,"name":"address","nodeType":"ElementaryTypeName","src":"3806:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18157,"indexed":true,"mutability":"mutable","name":"prevRecipient","nameLocation":"3846:13:76","nodeType":"VariableDeclaration","scope":18161,"src":"3830:29:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18156,"name":"address","nodeType":"ElementaryTypeName","src":"3830:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18159,"indexed":true,"mutability":"mutable","name":"newRecipient","nameLocation":"3877:12:76","nodeType":"VariableDeclaration","scope":18161,"src":"3861:28:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18158,"name":"address","nodeType":"ElementaryTypeName","src":"3861:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3805:85:76"},"src":"3781:110:76"},{"anonymous":false,"documentation":{"id":18162,"nodeType":"StructuredDocumentation","src":"3895:244:76","text":" @notice Emitted when the owner of router is proposed\n @param router - The address of the added router\n @param prevProposed  - The address of the previous proposed\n @param newProposed  - The address of the new proposed"},"eventSelector":"ee0158b57adc03901d8b16c48cd10c33ca1283ee96c6e0d30f817ceba74dc4a1","id":18170,"name":"RouterOwnerProposed","nameLocation":"4148:19:76","nodeType":"EventDefinition","parameters":{"id":18169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18164,"indexed":true,"mutability":"mutable","name":"router","nameLocation":"4184:6:76","nodeType":"VariableDeclaration","scope":18170,"src":"4168:22:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18163,"name":"address","nodeType":"ElementaryTypeName","src":"4168:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18166,"indexed":true,"mutability":"mutable","name":"prevProposed","nameLocation":"4208:12:76","nodeType":"VariableDeclaration","scope":18170,"src":"4192:28:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18165,"name":"address","nodeType":"ElementaryTypeName","src":"4192:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18168,"indexed":true,"mutability":"mutable","name":"newProposed","nameLocation":"4238:11:76","nodeType":"VariableDeclaration","scope":18170,"src":"4222:27:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18167,"name":"address","nodeType":"ElementaryTypeName","src":"4222:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4167:83:76"},"src":"4142:109:76"},{"anonymous":false,"documentation":{"id":18171,"nodeType":"StructuredDocumentation","src":"4255:260:76","text":" @notice Emitted when the owner of router is accepted\n @param router - The address of the added router\n @param prevOwner  - The address of the previous owner of the router\n @param newOwner  - The address of the new owner of the router"},"eventSelector":"d73892e8827a6025d74a01fca72a8e0d9e2c04080272e728f8861410c7d3c2d1","id":18179,"name":"RouterOwnerAccepted","nameLocation":"4524:19:76","nodeType":"EventDefinition","parameters":{"id":18178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18173,"indexed":true,"mutability":"mutable","name":"router","nameLocation":"4560:6:76","nodeType":"VariableDeclaration","scope":18179,"src":"4544:22:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18172,"name":"address","nodeType":"ElementaryTypeName","src":"4544:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18175,"indexed":true,"mutability":"mutable","name":"prevOwner","nameLocation":"4584:9:76","nodeType":"VariableDeclaration","scope":18179,"src":"4568:25:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18174,"name":"address","nodeType":"ElementaryTypeName","src":"4568:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18177,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"4611:8:76","nodeType":"VariableDeclaration","scope":18179,"src":"4595:24:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18176,"name":"address","nodeType":"ElementaryTypeName","src":"4595:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4543:77:76"},"src":"4518:103:76"},{"anonymous":false,"documentation":{"id":18180,"nodeType":"StructuredDocumentation","src":"4625:210:76","text":" @notice Emitted when a router adds a config via `addRouterConfig`\n @dev This does not confer permissions onto the router, only the configuration\n @param router The router initialized"},"eventSelector":"2622745e83f97f2d871ef785497c1eeba6f9bb94c7dd486cf28228e814d929e4","id":18184,"name":"RouterInitialized","nameLocation":"4844:17:76","nodeType":"EventDefinition","parameters":{"id":18183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18182,"indexed":true,"mutability":"mutable","name":"router","nameLocation":"4878:6:76","nodeType":"VariableDeclaration","scope":18184,"src":"4862:22:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18181,"name":"address","nodeType":"ElementaryTypeName","src":"4862:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4861:24:76"},"src":"4838:48:76"},{"anonymous":false,"documentation":{"id":18185,"nodeType":"StructuredDocumentation","src":"4890:211:76","text":" @notice Emitted when the maxRoutersPerTransfer variable is updated\n @param maxRoutersPerTransfer - The maxRoutersPerTransfer new value\n @param caller - The account that called the function"},"eventSelector":"a7fe33308fb33ae6f3259e3c7c954ae3d6cd7f428cd17f653413c2cdc691666d","id":18191,"name":"MaxRoutersPerTransferUpdated","nameLocation":"5110:28:76","nodeType":"EventDefinition","parameters":{"id":18190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18187,"indexed":false,"mutability":"mutable","name":"maxRoutersPerTransfer","nameLocation":"5147:21:76","nodeType":"VariableDeclaration","scope":18191,"src":"5139:29:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18186,"name":"uint256","nodeType":"ElementaryTypeName","src":"5139:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18189,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"5178:6:76","nodeType":"VariableDeclaration","scope":18191,"src":"5170:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18188,"name":"address","nodeType":"ElementaryTypeName","src":"5170:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5138:47:76"},"src":"5104:82:76"},{"anonymous":false,"documentation":{"id":18192,"nodeType":"StructuredDocumentation","src":"5190:215:76","text":" @notice Emitted when the LIQUIDITY_FEE_NUMERATOR variable is updated\n @param liquidityFeeNumerator - The LIQUIDITY_FEE_NUMERATOR new value\n @param caller - The account that called the function"},"eventSelector":"eb6222a0b32216f861511e9aba88faa9549b749c2e0ad47df4e288565de5ceae","id":18198,"name":"LiquidityFeeNumeratorUpdated","nameLocation":"5414:28:76","nodeType":"EventDefinition","parameters":{"id":18197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18194,"indexed":false,"mutability":"mutable","name":"liquidityFeeNumerator","nameLocation":"5451:21:76","nodeType":"VariableDeclaration","scope":18198,"src":"5443:29:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18193,"name":"uint256","nodeType":"ElementaryTypeName","src":"5443:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18196,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"5482:6:76","nodeType":"VariableDeclaration","scope":18198,"src":"5474:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18195,"name":"address","nodeType":"ElementaryTypeName","src":"5474:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5442:47:76"},"src":"5408:82:76"},{"anonymous":false,"documentation":{"id":18199,"nodeType":"StructuredDocumentation","src":"5494:181:76","text":" @notice Emitted when a router is approved for Portal\n @param router - The address of the approved router\n @param caller - The account that called the function"},"eventSelector":"c428fad4df337e27be8199c35a79ca103e8d00538a69b0f9701fb2bdf7d6c84c","id":18205,"name":"RouterApprovedForPortal","nameLocation":"5684:23:76","nodeType":"EventDefinition","parameters":{"id":18204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18201,"indexed":false,"mutability":"mutable","name":"router","nameLocation":"5716:6:76","nodeType":"VariableDeclaration","scope":18205,"src":"5708:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18200,"name":"address","nodeType":"ElementaryTypeName","src":"5708:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18203,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"5732:6:76","nodeType":"VariableDeclaration","scope":18205,"src":"5724:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18202,"name":"address","nodeType":"ElementaryTypeName","src":"5724:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5707:32:76"},"src":"5678:62:76"},{"anonymous":false,"documentation":{"id":18206,"nodeType":"StructuredDocumentation","src":"5744:187:76","text":" @notice Emitted when a router is disapproved for Portal\n @param router - The address of the disapproved router\n @param caller - The account that called the function"},"eventSelector":"903522f09b29fa2102f5d8d8b181ac8edb4cfaf5d705076e4ab95117f6bb02ad","id":18212,"name":"RouterUnapprovedForPortal","nameLocation":"5940:25:76","nodeType":"EventDefinition","parameters":{"id":18211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18208,"indexed":false,"mutability":"mutable","name":"router","nameLocation":"5974:6:76","nodeType":"VariableDeclaration","scope":18212,"src":"5966:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18207,"name":"address","nodeType":"ElementaryTypeName","src":"5966:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18210,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"5990:6:76","nodeType":"VariableDeclaration","scope":18212,"src":"5982:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18209,"name":"address","nodeType":"ElementaryTypeName","src":"5982:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5965:32:76"},"src":"5934:64:76"},{"anonymous":false,"documentation":{"id":18213,"nodeType":"StructuredDocumentation","src":"6002:403:76","text":" @notice Emitted when a router adds liquidity to the contract\n @param router - The address of the router the funds were credited to\n @param local - The address of the token added (all liquidity held in local asset)\n @param key - The hash of the canonical id and domain\n @param amount - The amount of liquidity added\n @param caller - The account that called the function"},"eventSelector":"cc3100122c1752fe0f6bfa5503175bc53eb00b5f2d774e81efedcd2b10a6d24b","id":18225,"name":"RouterLiquidityAdded","nameLocation":"6414:20:76","nodeType":"EventDefinition","parameters":{"id":18224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18215,"indexed":true,"mutability":"mutable","name":"router","nameLocation":"6451:6:76","nodeType":"VariableDeclaration","scope":18225,"src":"6435:22:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18214,"name":"address","nodeType":"ElementaryTypeName","src":"6435:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18217,"indexed":false,"mutability":"mutable","name":"local","nameLocation":"6467:5:76","nodeType":"VariableDeclaration","scope":18225,"src":"6459:13:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18216,"name":"address","nodeType":"ElementaryTypeName","src":"6459:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18219,"indexed":false,"mutability":"mutable","name":"key","nameLocation":"6482:3:76","nodeType":"VariableDeclaration","scope":18225,"src":"6474:11:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18218,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6474:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":18221,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"6495:6:76","nodeType":"VariableDeclaration","scope":18225,"src":"6487:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18220,"name":"uint256","nodeType":"ElementaryTypeName","src":"6487:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18223,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"6511:6:76","nodeType":"VariableDeclaration","scope":18225,"src":"6503:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18222,"name":"address","nodeType":"ElementaryTypeName","src":"6503:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6434:84:76"},"src":"6408:111:76"},{"anonymous":false,"documentation":{"id":18226,"nodeType":"StructuredDocumentation","src":"6523:371:76","text":" @notice Emitted when a router withdraws liquidity from the contract\n @param router - The router you are removing liquidity from\n @param to - The address the funds were withdrawn to\n @param local - The address of the token withdrawn\n @param amount - The amount of liquidity withdrawn\n @param caller - The account that called the function"},"eventSelector":"facf3161e9675ca1ca84a16d238bc838c7e2084c302cf411d9da7ac0391f6486","id":18240,"name":"RouterLiquidityRemoved","nameLocation":"6903:22:76","nodeType":"EventDefinition","parameters":{"id":18239,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18228,"indexed":true,"mutability":"mutable","name":"router","nameLocation":"6947:6:76","nodeType":"VariableDeclaration","scope":18240,"src":"6931:22:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18227,"name":"address","nodeType":"ElementaryTypeName","src":"6931:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18230,"indexed":false,"mutability":"mutable","name":"to","nameLocation":"6967:2:76","nodeType":"VariableDeclaration","scope":18240,"src":"6959:10:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18229,"name":"address","nodeType":"ElementaryTypeName","src":"6959:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18232,"indexed":false,"mutability":"mutable","name":"local","nameLocation":"6983:5:76","nodeType":"VariableDeclaration","scope":18240,"src":"6975:13:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18231,"name":"address","nodeType":"ElementaryTypeName","src":"6975:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18234,"indexed":false,"mutability":"mutable","name":"key","nameLocation":"7002:3:76","nodeType":"VariableDeclaration","scope":18240,"src":"6994:11:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18233,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6994:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":18236,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"7019:6:76","nodeType":"VariableDeclaration","scope":18240,"src":"7011:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18235,"name":"uint256","nodeType":"ElementaryTypeName","src":"7011:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18238,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"7039:6:76","nodeType":"VariableDeclaration","scope":18240,"src":"7031:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18237,"name":"address","nodeType":"ElementaryTypeName","src":"7031:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6925:124:76"},"src":"6897:153:76"},{"body":{"id":18258,"nodeType":"Block","src":"7198:121:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"expression":{"id":18245,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"7208:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18246,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7210:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"7208:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18248,"indexExpression":{"id":18247,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18243,"src":"7224:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7208:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18249,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7233:5:76","memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":29371,"src":"7208:30:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":18250,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7242:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7246:6:76","memberName":"sender","nodeType":"MemberAccess","src":"7242:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7208:44:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18256,"nodeType":"IfStatement","src":"7204:103:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18253,"name":"RoutersFacet__onlyRouterOwner_notRouterOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18096,"src":"7261:44:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7261:46:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18255,"nodeType":"RevertStatement","src":"7254:53:76"}},{"id":18257,"nodeType":"PlaceholderStatement","src":"7313:1:76"}]},"documentation":{"id":18241,"nodeType":"StructuredDocumentation","src":"7096:57:76","text":" @notice Asserts caller is the router owner"},"id":18259,"name":"onlyRouterOwner","nameLocation":"7165:15:76","nodeType":"ModifierDefinition","parameters":{"id":18244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18243,"mutability":"mutable","name":"_router","nameLocation":"7189:7:76","nodeType":"VariableDeclaration","scope":18259,"src":"7181:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18242,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7180:17:76"},"src":"7156:163:76","virtual":false,"visibility":"internal"},{"body":{"id":18267,"nodeType":"Block","src":"7430:43:76","statements":[{"expression":{"expression":{"id":18264,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"7443:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18265,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7445:23:76","memberName":"LIQUIDITY_FEE_NUMERATOR","nodeType":"MemberAccess","referencedDeclaration":29399,"src":"7443:25:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18263,"id":18266,"nodeType":"Return","src":"7436:32:76"}]},"functionSelector":"0951d6d8","id":18268,"implemented":true,"kind":"function","modifiers":[],"name":"LIQUIDITY_FEE_NUMERATOR","nameLocation":"7374:23:76","nodeType":"FunctionDefinition","parameters":{"id":18260,"nodeType":"ParameterList","parameters":[],"src":"7397:2:76"},"returnParameters":{"id":18263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18262,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18268,"src":"7421:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18261,"name":"uint256","nodeType":"ElementaryTypeName","src":"7421:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7420:9:76"},"scope":19351,"src":"7365:108:76","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":18276,"nodeType":"Block","src":"7544:47:76","statements":[{"expression":{"expression":{"id":18273,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"7557:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":18274,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7567:19:76","memberName":"BPS_FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29220,"src":"7557:29:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18272,"id":18275,"nodeType":"Return","src":"7550:36:76"}]},"functionSelector":"4b72c5da","id":18277,"implemented":true,"kind":"function","modifiers":[],"name":"LIQUIDITY_FEE_DENOMINATOR","nameLocation":"7486:25:76","nodeType":"FunctionDefinition","parameters":{"id":18269,"nodeType":"ParameterList","parameters":[],"src":"7511:2:76"},"returnParameters":{"id":18272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18271,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18277,"src":"7535:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18270,"name":"uint256","nodeType":"ElementaryTypeName","src":"7535:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7534:9:76"},"scope":19351,"src":"7477:114:76","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":18291,"nodeType":"Block","src":"7796:51:76","statements":[{"expression":{"expression":{"baseExpression":{"expression":{"id":18285,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"7809:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18286,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7811:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"7809:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18288,"indexExpression":{"id":18287,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18280,"src":"7825:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7809:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18289,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7834:8:76","memberName":"approved","nodeType":"MemberAccess","referencedDeclaration":29367,"src":"7809:33:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18284,"id":18290,"nodeType":"Return","src":"7802:40:76"}]},"documentation":{"id":18278,"nodeType":"StructuredDocumentation","src":"7595:127:76","text":" @notice Returns the approved router for the given router address\n @param _router The relevant router address"},"functionSelector":"1407093b","id":18292,"implemented":true,"kind":"function","modifiers":[],"name":"getRouterApproval","nameLocation":"7734:17:76","nodeType":"FunctionDefinition","parameters":{"id":18281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18280,"mutability":"mutable","name":"_router","nameLocation":"7760:7:76","nodeType":"VariableDeclaration","scope":18292,"src":"7752:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18279,"name":"address","nodeType":"ElementaryTypeName","src":"7752:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7751:17:76"},"returnParameters":{"id":18284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18283,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18292,"src":"7790:4:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18282,"name":"bool","nodeType":"ElementaryTypeName","src":"7790:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7789:6:76"},"scope":19351,"src":"7725:122:76","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":18306,"nodeType":"Block","src":"8131:52:76","statements":[{"expression":{"expression":{"baseExpression":{"expression":{"id":18300,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8144:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18301,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8146:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"8144:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18303,"indexExpression":{"id":18302,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18295,"src":"8160:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8144:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18304,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8169:9:76","memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":29373,"src":"8144:34:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":18299,"id":18305,"nodeType":"Return","src":"8137:41:76"}]},"documentation":{"id":18293,"nodeType":"StructuredDocumentation","src":"7851:202:76","text":" @notice Returns the recipient for the specified router\n @dev The recipient (if set) receives all funds when router liquidity is removed\n @param _router The relevant router address"},"functionSelector":"c6bf691d","id":18307,"implemented":true,"kind":"function","modifiers":[],"name":"getRouterRecipient","nameLocation":"8065:18:76","nodeType":"FunctionDefinition","parameters":{"id":18296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18295,"mutability":"mutable","name":"_router","nameLocation":"8092:7:76","nodeType":"VariableDeclaration","scope":18307,"src":"8084:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18294,"name":"address","nodeType":"ElementaryTypeName","src":"8084:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8083:17:76"},"returnParameters":{"id":18299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18298,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18307,"src":"8122:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18297,"name":"address","nodeType":"ElementaryTypeName","src":"8122:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8121:9:76"},"scope":19351,"src":"8056:127:76","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":18321,"nodeType":"Block","src":"8398:48:76","statements":[{"expression":{"expression":{"baseExpression":{"expression":{"id":18315,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8411:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18316,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8413:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"8411:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18318,"indexExpression":{"id":18317,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18310,"src":"8427:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8411:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18319,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8436:5:76","memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":29371,"src":"8411:30:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":18314,"id":18320,"nodeType":"Return","src":"8404:37:76"}]},"documentation":{"id":18308,"nodeType":"StructuredDocumentation","src":"8187:137:76","text":" @notice Returns the router owner if it is set, or the router itself if not\n @param _router The relevant router address"},"functionSelector":"e9160f3e","id":18322,"implemented":true,"kind":"function","modifiers":[],"name":"getRouterOwner","nameLocation":"8336:14:76","nodeType":"FunctionDefinition","parameters":{"id":18311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18310,"mutability":"mutable","name":"_router","nameLocation":"8359:7:76","nodeType":"VariableDeclaration","scope":18322,"src":"8351:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18309,"name":"address","nodeType":"ElementaryTypeName","src":"8351:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8350:17:76"},"returnParameters":{"id":18314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18313,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18322,"src":"8389:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18312,"name":"address","nodeType":"ElementaryTypeName","src":"8389:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8388:9:76"},"scope":19351,"src":"8327:119:76","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":18336,"nodeType":"Block","src":"8729:51:76","statements":[{"expression":{"expression":{"baseExpression":{"expression":{"id":18330,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8742:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18331,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8744:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"8742:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18333,"indexExpression":{"id":18332,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18325,"src":"8758:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8742:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18334,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8767:8:76","memberName":"proposed","nodeType":"MemberAccess","referencedDeclaration":29375,"src":"8742:33:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":18329,"id":18335,"nodeType":"Return","src":"8735:40:76"}]},"documentation":{"id":18323,"nodeType":"StructuredDocumentation","src":"8450:197:76","text":" @notice Returns the currently proposed router owner\n @dev All routers must wait for the delay timeout before accepting a new owner\n @param _router The relevant router address"},"functionSelector":"3b688da6","id":18337,"implemented":true,"kind":"function","modifiers":[],"name":"getProposedRouterOwner","nameLocation":"8659:22:76","nodeType":"FunctionDefinition","parameters":{"id":18326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18325,"mutability":"mutable","name":"_router","nameLocation":"8690:7:76","nodeType":"VariableDeclaration","scope":18337,"src":"8682:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18324,"name":"address","nodeType":"ElementaryTypeName","src":"8682:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8681:17:76"},"returnParameters":{"id":18329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18328,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18337,"src":"8720:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18327,"name":"address","nodeType":"ElementaryTypeName","src":"8720:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8719:9:76"},"scope":19351,"src":"8650:130:76","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":18351,"nodeType":"Block","src":"9082:60:76","statements":[{"expression":{"expression":{"baseExpression":{"expression":{"id":18345,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9095:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18346,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9097:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"9095:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18348,"indexExpression":{"id":18347,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18340,"src":"9111:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9095:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18349,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9120:17:76","memberName":"proposedTimestamp","nodeType":"MemberAccess","referencedDeclaration":29377,"src":"9095:42:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18344,"id":18350,"nodeType":"Return","src":"9088:49:76"}]},"documentation":{"id":18338,"nodeType":"StructuredDocumentation","src":"8784:207:76","text":" @notice Returns the currently proposed router owner timestamp\n @dev All routers must wait for the delay timeout before accepting a new owner\n @param _router The relevant router address"},"functionSelector":"12d57170","id":18352,"implemented":true,"kind":"function","modifiers":[],"name":"getProposedRouterOwnerTimestamp","nameLocation":"9003:31:76","nodeType":"FunctionDefinition","parameters":{"id":18341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18340,"mutability":"mutable","name":"_router","nameLocation":"9043:7:76","nodeType":"VariableDeclaration","scope":18352,"src":"9035:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18339,"name":"address","nodeType":"ElementaryTypeName","src":"9035:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9034:17:76"},"returnParameters":{"id":18344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18343,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18352,"src":"9073:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18342,"name":"uint256","nodeType":"ElementaryTypeName","src":"9073:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9072:9:76"},"scope":19351,"src":"8994:148:76","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":18360,"nodeType":"Block","src":"9209:41:76","statements":[{"expression":{"expression":{"id":18357,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9222:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18358,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9224:21:76","memberName":"maxRoutersPerTransfer","nodeType":"MemberAccess","referencedDeclaration":29453,"src":"9222:23:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18356,"id":18359,"nodeType":"Return","src":"9215:30:76"}]},"functionSelector":"9bf6d875","id":18361,"implemented":true,"kind":"function","modifiers":[],"name":"maxRoutersPerTransfer","nameLocation":"9155:21:76","nodeType":"FunctionDefinition","parameters":{"id":18353,"nodeType":"ParameterList","parameters":[],"src":"9176:2:76"},"returnParameters":{"id":18356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18355,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18361,"src":"9200:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18354,"name":"uint256","nodeType":"ElementaryTypeName","src":"9200:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9199:9:76"},"scope":19351,"src":"9146:104:76","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":18377,"nodeType":"Block","src":"9341:51:76","statements":[{"expression":{"baseExpression":{"baseExpression":{"expression":{"id":18370,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9354:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18371,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9356:14:76","memberName":"routerBalances","nodeType":"MemberAccess","referencedDeclaration":29445,"src":"9354:16:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":18373,"indexExpression":{"id":18372,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18363,"src":"9371:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9354:25:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":18375,"indexExpression":{"id":18374,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18365,"src":"9380:6:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9354:33:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18369,"id":18376,"nodeType":"Return","src":"9347:40:76"}]},"functionSelector":"41258b5c","id":18378,"implemented":true,"kind":"function","modifiers":[],"name":"routerBalances","nameLocation":"9263:14:76","nodeType":"FunctionDefinition","parameters":{"id":18366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18363,"mutability":"mutable","name":"_router","nameLocation":"9286:7:76","nodeType":"VariableDeclaration","scope":18378,"src":"9278:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18362,"name":"address","nodeType":"ElementaryTypeName","src":"9278:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18365,"mutability":"mutable","name":"_asset","nameLocation":"9303:6:76","nodeType":"VariableDeclaration","scope":18378,"src":"9295:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18364,"name":"address","nodeType":"ElementaryTypeName","src":"9295:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9277:33:76"},"returnParameters":{"id":18369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18368,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18378,"src":"9332:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18367,"name":"uint256","nodeType":"ElementaryTypeName","src":"9332:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9331:9:76"},"scope":19351,"src":"9254:138:76","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":18392,"nodeType":"Block","src":"9607:57:76","statements":[{"expression":{"expression":{"baseExpression":{"expression":{"id":18386,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9620:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18387,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9622:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"9620:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18389,"indexExpression":{"id":18388,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18381,"src":"9636:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9620:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18390,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9645:14:76","memberName":"portalApproved","nodeType":"MemberAccess","referencedDeclaration":29369,"src":"9620:39:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18385,"id":18391,"nodeType":"Return","src":"9613:46:76"}]},"documentation":{"id":18379,"nodeType":"StructuredDocumentation","src":"9396:128:76","text":" @notice Returns whether the router is approved for portals or not\n @param _router The relevant router address"},"functionSelector":"8770e682","id":18393,"implemented":true,"kind":"function","modifiers":[],"name":"getRouterApprovalForPortal","nameLocation":"9536:26:76","nodeType":"FunctionDefinition","parameters":{"id":18382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18381,"mutability":"mutable","name":"_router","nameLocation":"9571:7:76","nodeType":"VariableDeclaration","scope":18393,"src":"9563:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18380,"name":"address","nodeType":"ElementaryTypeName","src":"9563:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9562:17:76"},"returnParameters":{"id":18385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18384,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18393,"src":"9601:4:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18383,"name":"bool","nodeType":"ElementaryTypeName","src":"9601:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9600:6:76"},"scope":19351,"src":"9527:137:76","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":18435,"nodeType":"Block","src":"9885:379:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18401,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18396,"src":"9926:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":18404,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9945:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":18403,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9937:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18402,"name":"address","nodeType":"ElementaryTypeName","src":"9937:7:76","typeDescriptions":{}}},"id":18405,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9937:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9926:21:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18410,"nodeType":"IfStatement","src":"9922:75:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18407,"name":"RoutersFacet__approveRouter_routerEmpty","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18102,"src":"9956:39:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9956:41:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18409,"nodeType":"RevertStatement","src":"9949:48:76"}},{"condition":{"expression":{"baseExpression":{"expression":{"id":18411,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10044:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18412,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10046:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"10044:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18414,"indexExpression":{"id":18413,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18396,"src":"10060:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10044:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18415,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10069:8:76","memberName":"approved","nodeType":"MemberAccess","referencedDeclaration":29367,"src":"10044:33:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18419,"nodeType":"IfStatement","src":"10040:88:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18416,"name":"RoutersFacet__approveRouter_alreadyAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18104,"src":"10086:40:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10086:42:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18418,"nodeType":"RevertStatement","src":"10079:49:76"}},{"expression":{"id":18427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":18420,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10157:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18423,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10159:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"10157:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18424,"indexExpression":{"id":18422,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18396,"src":"10173:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10157:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18425,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10182:8:76","memberName":"approved","nodeType":"MemberAccess","referencedDeclaration":29367,"src":"10157:33:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":18426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10193:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"10157:40:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18428,"nodeType":"ExpressionStatement","src":"10157:40:76"},{"eventCall":{"arguments":[{"id":18430,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18396,"src":"10239:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18431,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10248:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10252:6:76","memberName":"sender","nodeType":"MemberAccess","src":"10248:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18429,"name":"RouterAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18145,"src":"10227:11:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":18433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10227:32:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18434,"nodeType":"EmitStatement","src":"10222:37:76"}]},"documentation":{"id":18394,"nodeType":"StructuredDocumentation","src":"9716:99:76","text":" @notice Used to allowlist a given router\n @param _router Router address to setup"},"functionSelector":"f259cd27","id":18436,"implemented":true,"kind":"function","modifiers":[{"id":18399,"kind":"modifierInvocation","modifierName":{"id":18398,"name":"onlyOwnerOrRouter","nameLocations":["9867:17:76"],"nodeType":"IdentifierPath","referencedDeclaration":13854,"src":"9867:17:76"},"nodeType":"ModifierInvocation","src":"9867:17:76"}],"name":"approveRouter","nameLocation":"9827:13:76","nodeType":"FunctionDefinition","parameters":{"id":18397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18396,"mutability":"mutable","name":"_router","nameLocation":"9849:7:76","nodeType":"VariableDeclaration","scope":18436,"src":"9841:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18395,"name":"address","nodeType":"ElementaryTypeName","src":"9841:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9840:17:76"},"returnParameters":{"id":18400,"nodeType":"ParameterList","parameters":[],"src":"9885:0:76"},"scope":19351,"src":"9818:446:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18489,"nodeType":"Block","src":"10459:494:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18444,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18439,"src":"10500:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":18447,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10519:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":18446,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10511:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18445,"name":"address","nodeType":"ElementaryTypeName","src":"10511:7:76","typeDescriptions":{}}},"id":18448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10511:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10500:21:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18453,"nodeType":"IfStatement","src":"10496:77:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18450,"name":"RoutersFacet__unapproveRouter_routerEmpty","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18098,"src":"10530:41:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10530:43:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18452,"nodeType":"RevertStatement","src":"10523:50:76"}},{"assignments":[18456],"declarations":[{"constant":false,"id":18456,"mutability":"mutable","name":"config","nameLocation":"10635:6:76","nodeType":"VariableDeclaration","scope":18489,"src":"10615:26:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig"},"typeName":{"id":18455,"nodeType":"UserDefinedTypeName","pathNode":{"id":18454,"name":"RouterConfig","nameLocations":["10615:12:76"],"nodeType":"IdentifierPath","referencedDeclaration":29378,"src":"10615:12:76"},"referencedDeclaration":29378,"src":"10615:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage_ptr","typeString":"struct RouterConfig"}},"visibility":"internal"}],"id":18461,"initialValue":{"baseExpression":{"expression":{"id":18457,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10644:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18458,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10646:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"10644:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18460,"indexExpression":{"id":18459,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18439,"src":"10660:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10644:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"10615:53:76"},{"condition":{"id":18464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10678:16:76","subExpression":{"expression":{"id":18462,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18456,"src":"10679:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig memory"}},"id":18463,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10686:8:76","memberName":"approved","nodeType":"MemberAccess","referencedDeclaration":29367,"src":"10679:15:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18468,"nodeType":"IfStatement","src":"10674:69:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18465,"name":"RoutersFacet__unapproveRouter_notAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18100,"src":"10703:38:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10703:40:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18467,"nodeType":"RevertStatement","src":"10696:47:76"}},{"expression":{"id":18474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"10792:40:76","subExpression":{"expression":{"baseExpression":{"expression":{"id":18469,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10799:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18470,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10801:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"10799:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18472,"indexExpression":{"id":18471,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18439,"src":"10815:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10799:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18473,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10824:8:76","memberName":"approved","nodeType":"MemberAccess","referencedDeclaration":29367,"src":"10799:33:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18475,"nodeType":"ExpressionStatement","src":"10792:40:76"},{"expression":{"id":18481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"10838:46:76","subExpression":{"expression":{"baseExpression":{"expression":{"id":18476,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10845:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18477,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10847:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"10845:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18479,"indexExpression":{"id":18478,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18439,"src":"10861:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10845:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18480,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10870:14:76","memberName":"portalApproved","nodeType":"MemberAccess","referencedDeclaration":29369,"src":"10845:39:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18482,"nodeType":"ExpressionStatement","src":"10838:46:76"},{"eventCall":{"arguments":[{"id":18484,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18439,"src":"10928:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18485,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10937:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10941:6:76","memberName":"sender","nodeType":"MemberAccess","src":"10937:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18483,"name":"RouterRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18152,"src":"10914:13:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":18487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10914:34:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18488,"nodeType":"EmitStatement","src":"10909:39:76"}]},"documentation":{"id":18437,"nodeType":"StructuredDocumentation","src":"10268:119:76","text":" @notice Used to remove routers that can transact crosschain\n @param _router Router address to remove"},"functionSelector":"911b8ee2","id":18490,"implemented":true,"kind":"function","modifiers":[{"id":18442,"kind":"modifierInvocation","modifierName":{"id":18441,"name":"onlyOwnerOrRouter","nameLocations":["10441:17:76"],"nodeType":"IdentifierPath","referencedDeclaration":13854,"src":"10441:17:76"},"nodeType":"ModifierInvocation","src":"10441:17:76"}],"name":"unapproveRouter","nameLocation":"10399:15:76","nodeType":"FunctionDefinition","parameters":{"id":18440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18439,"mutability":"mutable","name":"_router","nameLocation":"10423:7:76","nodeType":"VariableDeclaration","scope":18490,"src":"10415:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18438,"name":"address","nodeType":"ElementaryTypeName","src":"10415:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10414:17:76"},"returnParameters":{"id":18443,"nodeType":"ParameterList","parameters":[],"src":"10459:0:76"},"scope":19351,"src":"10390:563:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18522,"nodeType":"Block","src":"11193:278:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18498,"name":"_newMaxRouters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18493,"src":"11203:14:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":18499,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11221:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11203:19:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18501,"name":"_newMaxRouters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18493,"src":"11226:14:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":18502,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"11244:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18503,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11246:21:76","memberName":"maxRoutersPerTransfer","nodeType":"MemberAccess","referencedDeclaration":29453,"src":"11244:23:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11226:41:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11203:64:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18509,"nodeType":"IfStatement","src":"11199:152:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18506,"name":"RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18110,"src":"11282:67:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11282:69:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18508,"nodeType":"RevertStatement","src":"11275:76:76"}},{"eventCall":{"arguments":[{"id":18511,"name":"_newMaxRouters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18493,"src":"11392:14:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18512,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11408:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11412:6:76","memberName":"sender","nodeType":"MemberAccess","src":"11408:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18510,"name":"MaxRoutersPerTransferUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18191,"src":"11363:28:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":18514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11363:56:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18515,"nodeType":"EmitStatement","src":"11358:61:76"},{"expression":{"id":18520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18516,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"11426:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18518,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11428:21:76","memberName":"maxRoutersPerTransfer","nodeType":"MemberAccess","referencedDeclaration":29453,"src":"11426:23:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18519,"name":"_newMaxRouters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18493,"src":"11452:14:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11426:40:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18521,"nodeType":"ExpressionStatement","src":"11426:40:76"}]},"documentation":{"id":18491,"nodeType":"StructuredDocumentation","src":"10957:149:76","text":" @notice Used to set the max amount of routers a payment can be routed through\n @param _newMaxRouters The new max amount of routers"},"functionSelector":"82904716","id":18523,"implemented":true,"kind":"function","modifiers":[{"id":18496,"kind":"modifierInvocation","modifierName":{"id":18495,"name":"onlyOwnerOrAdmin","nameLocations":["11176:16:76"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"11176:16:76"},"nodeType":"ModifierInvocation","src":"11176:16:76"}],"name":"setMaxRoutersPerTransfer","nameLocation":"11118:24:76","nodeType":"FunctionDefinition","parameters":{"id":18494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18493,"mutability":"mutable","name":"_newMaxRouters","nameLocation":"11151:14:76","nodeType":"VariableDeclaration","scope":18523,"src":"11143:22:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18492,"name":"uint256","nodeType":"ElementaryTypeName","src":"11143:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11142:24:76"},"returnParameters":{"id":18497,"nodeType":"ParameterList","parameters":[],"src":"11193:0:76"},"scope":19351,"src":"11109:362:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18567,"nodeType":"Block","src":"11759:540:76","statements":[{"assignments":[18532],"declarations":[{"constant":false,"id":18532,"mutability":"mutable","name":"denominator","nameLocation":"11945:11:76","nodeType":"VariableDeclaration","scope":18567,"src":"11937:19:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18531,"name":"uint256","nodeType":"ElementaryTypeName","src":"11937:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18535,"initialValue":{"expression":{"id":18533,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"11959:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":18534,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11969:19:76","memberName":"BPS_FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29220,"src":"11959:29:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11937:51:76"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18536,"name":"_numerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18526,"src":"11998:10:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18537,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18532,"src":"12012:11:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3935","id":18538,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12026:2:76","typeDescriptions":{"typeIdentifier":"t_rational_95_by_1","typeString":"int_const 95"},"value":"95"},"src":"12012:16:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":18540,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12011:18:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":18541,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12032:3:76","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"12011:24:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11998:37:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18547,"nodeType":"IfStatement","src":"11994:99:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18544,"name":"RoutersFacet__setLiquidityFeeNumerator_tooSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18128,"src":"12044:47:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12044:49:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18546,"nodeType":"RevertStatement","src":"12037:56:76"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18548,"name":"_numerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18526,"src":"12104:10:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":18549,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18532,"src":"12117:11:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12104:24:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18554,"nodeType":"IfStatement","src":"12100:86:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18551,"name":"RoutersFacet__setLiquidityFeeNumerator_tooLarge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18130,"src":"12137:47:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12137:49:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18553,"nodeType":"RevertStatement","src":"12130:56:76"}},{"expression":{"id":18559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18555,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"12192:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18557,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"12194:23:76","memberName":"LIQUIDITY_FEE_NUMERATOR","nodeType":"MemberAccess","referencedDeclaration":29399,"src":"12192:25:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18558,"name":"_numerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18526,"src":"12220:10:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12192:38:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18560,"nodeType":"ExpressionStatement","src":"12192:38:76"},{"eventCall":{"arguments":[{"id":18562,"name":"_numerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18526,"src":"12271:10:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18563,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12283:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12287:6:76","memberName":"sender","nodeType":"MemberAccess","src":"12283:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18561,"name":"LiquidityFeeNumeratorUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18198,"src":"12242:28:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":18565,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12242:52:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18566,"nodeType":"EmitStatement","src":"12237:57:76"}]},"documentation":{"id":18524,"nodeType":"StructuredDocumentation","src":"11475:201:76","text":" @notice Sets the LIQUIDITY_FEE_NUMERATOR\n @dev Admin can set LIQUIDITY_FEE_NUMERATOR variable, Liquidity fee should be less than 5%\n @param _numerator new LIQUIDITY_FEE_NUMERATOR"},"functionSelector":"582c78d2","id":18568,"implemented":true,"kind":"function","modifiers":[{"id":18529,"kind":"modifierInvocation","modifierName":{"id":18528,"name":"onlyOwnerOrAdmin","nameLocations":["11742:16:76"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"11742:16:76"},"nodeType":"ModifierInvocation","src":"11742:16:76"}],"name":"setLiquidityFeeNumerator","nameLocation":"11688:24:76","nodeType":"FunctionDefinition","parameters":{"id":18527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18526,"mutability":"mutable","name":"_numerator","nameLocation":"11721:10:76","nodeType":"VariableDeclaration","scope":18568,"src":"11713:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18525,"name":"uint256","nodeType":"ElementaryTypeName","src":"11713:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11712:20:76"},"returnParameters":{"id":18530,"nodeType":"ParameterList","parameters":[],"src":"11759:0:76"},"scope":19351,"src":"11679:620:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18616,"nodeType":"Block","src":"12483:381:76","statements":[{"assignments":[18578],"declarations":[{"constant":false,"id":18578,"mutability":"mutable","name":"config","nameLocation":"12509:6:76","nodeType":"VariableDeclaration","scope":18616,"src":"12489:26:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig"},"typeName":{"id":18577,"nodeType":"UserDefinedTypeName","pathNode":{"id":18576,"name":"RouterConfig","nameLocations":["12489:12:76"],"nodeType":"IdentifierPath","referencedDeclaration":29378,"src":"12489:12:76"},"referencedDeclaration":29378,"src":"12489:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage_ptr","typeString":"struct RouterConfig"}},"visibility":"internal"}],"id":18583,"initialValue":{"baseExpression":{"expression":{"id":18579,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"12518:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18580,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12520:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"12518:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18582,"indexExpression":{"id":18581,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18571,"src":"12534:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12518:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"12489:53:76"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"12552:16:76","subExpression":{"expression":{"id":18584,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18578,"src":"12553:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig memory"}},"id":18585,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12560:8:76","memberName":"approved","nodeType":"MemberAccess","referencedDeclaration":29367,"src":"12553:15:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":18589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"12572:28:76","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":18587,"name":"_isRouterAllowlistRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13932,"src":"12573:25:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":18588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12573:27:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12552:48:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18594,"nodeType":"IfStatement","src":"12548:108:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18591,"name":"RoutersFacet__approveRouterForPortal_notAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18132,"src":"12609:45:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12609:47:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18593,"nodeType":"RevertStatement","src":"12602:54:76"}},{"condition":{"expression":{"id":18595,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18578,"src":"12666:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig memory"}},"id":18596,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12673:14:76","memberName":"portalApproved","nodeType":"MemberAccess","referencedDeclaration":29369,"src":"12666:21:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18600,"nodeType":"IfStatement","src":"12662:88:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18597,"name":"RoutersFacet__approveRouterForPortal_alreadyApproved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18134,"src":"12696:52:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12696:54:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18599,"nodeType":"RevertStatement","src":"12689:61:76"}},{"expression":{"id":18608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":18601,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"12757:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18604,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12759:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"12757:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18605,"indexExpression":{"id":18603,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18571,"src":"12773:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12757:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18606,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"12782:14:76","memberName":"portalApproved","nodeType":"MemberAccess","referencedDeclaration":29369,"src":"12757:39:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":18607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12799:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"12757:46:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18609,"nodeType":"ExpressionStatement","src":"12757:46:76"},{"eventCall":{"arguments":[{"id":18611,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18571,"src":"12839:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18612,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12848:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12852:6:76","memberName":"sender","nodeType":"MemberAccess","src":"12848:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18610,"name":"RouterApprovedForPortal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18205,"src":"12815:23:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":18614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12815:44:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18615,"nodeType":"EmitStatement","src":"12810:49:76"}]},"documentation":{"id":18569,"nodeType":"StructuredDocumentation","src":"12303:102:76","text":" @notice Allow router to use Portals\n @param _router - The router address to approve"},"functionSelector":"da3a892f","id":18617,"implemented":true,"kind":"function","modifiers":[{"id":18574,"kind":"modifierInvocation","modifierName":{"id":18573,"name":"onlyOwnerOrAdmin","nameLocations":["12466:16:76"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"12466:16:76"},"nodeType":"ModifierInvocation","src":"12466:16:76"}],"name":"approveRouterForPortal","nameLocation":"12417:22:76","nodeType":"FunctionDefinition","parameters":{"id":18572,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18571,"mutability":"mutable","name":"_router","nameLocation":"12448:7:76","nodeType":"VariableDeclaration","scope":18617,"src":"12440:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18570,"name":"address","nodeType":"ElementaryTypeName","src":"12440:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12439:17:76"},"returnParameters":{"id":18575,"nodeType":"ParameterList","parameters":[],"src":"12483:0:76"},"scope":19351,"src":"12408:456:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18648,"nodeType":"Block","src":"13066:227:76","statements":[{"condition":{"id":18630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13076:40:76","subExpression":{"expression":{"baseExpression":{"expression":{"id":18625,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"13077:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18626,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13079:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"13077:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18628,"indexExpression":{"id":18627,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18620,"src":"13093:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13077:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18629,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13102:14:76","memberName":"portalApproved","nodeType":"MemberAccess","referencedDeclaration":29369,"src":"13077:39:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18634,"nodeType":"IfStatement","src":"13072:105:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18631,"name":"RoutersFacet__unapproveRouterForPortal_notApproved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18136,"src":"13125:50:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13125:52:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18633,"nodeType":"RevertStatement","src":"13118:59:76"}},{"expression":{"id":18640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"13184:46:76","subExpression":{"expression":{"baseExpression":{"expression":{"id":18635,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"13191:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18636,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13193:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"13191:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18638,"indexExpression":{"id":18637,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18620,"src":"13207:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13191:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18639,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"13216:14:76","memberName":"portalApproved","nodeType":"MemberAccess","referencedDeclaration":29369,"src":"13191:39:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18641,"nodeType":"ExpressionStatement","src":"13184:46:76"},{"eventCall":{"arguments":[{"id":18643,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18620,"src":"13268:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18644,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13277:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13281:6:76","memberName":"sender","nodeType":"MemberAccess","src":"13277:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18642,"name":"RouterUnapprovedForPortal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18212,"src":"13242:25:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":18646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13242:46:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18647,"nodeType":"EmitStatement","src":"13237:51:76"}]},"documentation":{"id":18618,"nodeType":"StructuredDocumentation","src":"12868:118:76","text":" @notice Remove router access to use Portals\n @param _router - The router address to remove approval"},"functionSelector":"04376ff4","id":18649,"implemented":true,"kind":"function","modifiers":[{"id":18623,"kind":"modifierInvocation","modifierName":{"id":18622,"name":"onlyOwnerOrAdmin","nameLocations":["13049:16:76"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"13049:16:76"},"nodeType":"ModifierInvocation","src":"13049:16:76"}],"name":"unapproveRouterForPortal","nameLocation":"12998:24:76","nodeType":"FunctionDefinition","parameters":{"id":18621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18620,"mutability":"mutable","name":"_router","nameLocation":"13031:7:76","nodeType":"VariableDeclaration","scope":18649,"src":"13023:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18619,"name":"address","nodeType":"ElementaryTypeName","src":"13023:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13022:17:76"},"returnParameters":{"id":18624,"nodeType":"ParameterList","parameters":[],"src":"13066:0:76"},"scope":19351,"src":"12989:304:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18670,"nodeType":"Block","src":"13783:87:76","statements":[{"expression":{"arguments":[{"id":18661,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18652,"src":"13809:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18662,"name":"_recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18654,"src":"13818:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"expression":{"id":18663,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"13830:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18664,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13832:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"13830:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18666,"indexExpression":{"id":18665,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18652,"src":"13846:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13830:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18667,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13855:9:76","memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":29373,"src":"13830:34:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18660,"name":"_setRouterRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19063,"src":"13789:19:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":18668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13789:76:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18669,"nodeType":"ExpressionStatement","src":"13789:76:76"}]},"documentation":{"id":18650,"nodeType":"StructuredDocumentation","src":"13346:335:76","text":" @notice Sets the designated recipient for a router\n @dev Router should only be able to set this once otherwise if router key compromised,\n no problem is solved since attacker could just update recipient\n @param _router Router address to set recipient\n @param _recipient Recipient Address to set to router"},"functionSelector":"ffaf3f1a","id":18671,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":18657,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18652,"src":"13774:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":18658,"kind":"modifierInvocation","modifierName":{"id":18656,"name":"onlyRouterOwner","nameLocations":["13758:15:76"],"nodeType":"IdentifierPath","referencedDeclaration":18259,"src":"13758:15:76"},"nodeType":"ModifierInvocation","src":"13758:24:76"}],"name":"setRouterRecipient","nameLocation":"13693:18:76","nodeType":"FunctionDefinition","parameters":{"id":18655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18652,"mutability":"mutable","name":"_router","nameLocation":"13720:7:76","nodeType":"VariableDeclaration","scope":18671,"src":"13712:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18651,"name":"address","nodeType":"ElementaryTypeName","src":"13712:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18654,"mutability":"mutable","name":"_recipient","nameLocation":"13737:10:76","nodeType":"VariableDeclaration","scope":18671,"src":"13729:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18653,"name":"address","nodeType":"ElementaryTypeName","src":"13729:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13711:37:76"},"returnParameters":{"id":18659,"nodeType":"ParameterList","parameters":[],"src":"13783:0:76"},"scope":19351,"src":"13684:186:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18732,"nodeType":"Block","src":"14249:696:76","statements":[{"assignments":[18684],"declarations":[{"constant":false,"id":18684,"mutability":"mutable","name":"config","nameLocation":"14421:6:76","nodeType":"VariableDeclaration","scope":18732,"src":"14401:26:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig"},"typeName":{"id":18683,"nodeType":"UserDefinedTypeName","pathNode":{"id":18682,"name":"RouterConfig","nameLocations":["14401:12:76"],"nodeType":"IdentifierPath","referencedDeclaration":29378,"src":"14401:12:76"},"referencedDeclaration":29378,"src":"14401:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage_ptr","typeString":"struct RouterConfig"}},"visibility":"internal"}],"id":18689,"initialValue":{"baseExpression":{"expression":{"id":18685,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"14430:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18686,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14432:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"14430:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18688,"indexExpression":{"id":18687,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18674,"src":"14446:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14430:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14401:53:76"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18690,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18684,"src":"14464:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig memory"}},"id":18691,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14471:5:76","memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":29371,"src":"14464:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":18692,"name":"_proposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18676,"src":"14480:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14464:25:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18697,"nodeType":"IfStatement","src":"14460:84:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18694,"name":"RoutersFacet__proposeRouterOwner_notNewOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18106,"src":"14498:44:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14498:46:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18696,"nodeType":"RevertStatement","src":"14491:53:76"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18698,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18684,"src":"14617:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig memory"}},"id":18699,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14624:8:76","memberName":"proposed","nodeType":"MemberAccess","referencedDeclaration":29375,"src":"14617:15:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":18700,"name":"_proposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18676,"src":"14636:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14617:28:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18705,"nodeType":"IfStatement","src":"14613:85:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18702,"name":"RoutersFacet__proposeRouterOwner_badRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18108,"src":"14654:42:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14654:44:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18704,"nodeType":"RevertStatement","src":"14647:51:76"}},{"expression":{"id":18713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":18706,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"14743:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18709,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14745:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"14743:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18710,"indexExpression":{"id":18708,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18674,"src":"14759:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14743:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18711,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"14768:8:76","memberName":"proposed","nodeType":"MemberAccess","referencedDeclaration":29375,"src":"14743:33:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18712,"name":"_proposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18676,"src":"14779:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14743:45:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18714,"nodeType":"ExpressionStatement","src":"14743:45:76"},{"expression":{"id":18723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":18715,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"14794:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18718,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14796:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"14794:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18719,"indexExpression":{"id":18717,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18674,"src":"14810:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14794:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18720,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"14819:17:76","memberName":"proposedTimestamp","nodeType":"MemberAccess","referencedDeclaration":29377,"src":"14794:42:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18721,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"14839:5:76","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":18722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14845:9:76","memberName":"timestamp","nodeType":"MemberAccess","src":"14839:15:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14794:60:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18724,"nodeType":"ExpressionStatement","src":"14794:60:76"},{"eventCall":{"arguments":[{"id":18726,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18674,"src":"14904:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18727,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18684,"src":"14913:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig memory"}},"id":18728,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14920:8:76","memberName":"proposed","nodeType":"MemberAccess","referencedDeclaration":29375,"src":"14913:15:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18729,"name":"_proposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18676,"src":"14930:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18725,"name":"RouterOwnerProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18170,"src":"14884:19:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":18730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14884:56:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18731,"nodeType":"EmitStatement","src":"14879:61:76"}]},"documentation":{"id":18672,"nodeType":"StructuredDocumentation","src":"13874:274:76","text":" @notice Current owner or router may propose a new router owner\n @dev If routers burn their ownership, they can no longer update the recipient\n @param _router Router address to set recipient\n @param _proposed Proposed owner Address to set to router"},"functionSelector":"22a3c007","id":18733,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":18679,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18674,"src":"14240:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":18680,"kind":"modifierInvocation","modifierName":{"id":18678,"name":"onlyRouterOwner","nameLocations":["14224:15:76"],"nodeType":"IdentifierPath","referencedDeclaration":18259,"src":"14224:15:76"},"nodeType":"ModifierInvocation","src":"14224:24:76"}],"name":"proposeRouterOwner","nameLocation":"14160:18:76","nodeType":"FunctionDefinition","parameters":{"id":18677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18674,"mutability":"mutable","name":"_router","nameLocation":"14187:7:76","nodeType":"VariableDeclaration","scope":18733,"src":"14179:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18673,"name":"address","nodeType":"ElementaryTypeName","src":"14179:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18676,"mutability":"mutable","name":"_proposed","nameLocation":"14204:9:76","nodeType":"VariableDeclaration","scope":18733,"src":"14196:17:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18675,"name":"address","nodeType":"ElementaryTypeName","src":"14196:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14178:36:76"},"returnParameters":{"id":18681,"nodeType":"ParameterList","parameters":[],"src":"14249:0:76"},"scope":19351,"src":"14151:794:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18814,"nodeType":"Block","src":"15153:745:76","statements":[{"assignments":[18741],"declarations":[{"constant":false,"id":18741,"mutability":"mutable","name":"config","nameLocation":"15179:6:76","nodeType":"VariableDeclaration","scope":18814,"src":"15159:26:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig"},"typeName":{"id":18740,"nodeType":"UserDefinedTypeName","pathNode":{"id":18739,"name":"RouterConfig","nameLocations":["15159:12:76"],"nodeType":"IdentifierPath","referencedDeclaration":29378,"src":"15159:12:76"},"referencedDeclaration":29378,"src":"15159:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage_ptr","typeString":"struct RouterConfig"}},"visibility":"internal"}],"id":18746,"initialValue":{"baseExpression":{"expression":{"id":18742,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"15188:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18743,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15190:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"15188:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18745,"indexExpression":{"id":18744,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18736,"src":"15204:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15188:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"15159:53:76"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18747,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"15257:5:76","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":18748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15263:9:76","memberName":"timestamp","nodeType":"MemberAccess","src":"15257:15:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":18749,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18741,"src":"15275:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig memory"}},"id":18750,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15282:17:76","memberName":"proposedTimestamp","nodeType":"MemberAccess","referencedDeclaration":29377,"src":"15275:24:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15257:42:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":18752,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"15303:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":18753,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15313:16:76","memberName":"GOVERNANCE_DELAY","nodeType":"MemberAccess","referencedDeclaration":29224,"src":"15303:26:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15257:72:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18758,"nodeType":"IfStatement","src":"15253:143:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18755,"name":"RoutersFacet__acceptProposedRouterOwner_notElapsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18088,"src":"15344:50:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15344:52:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18757,"nodeType":"RevertStatement","src":"15337:59:76"}},{"assignments":[18760],"declarations":[{"constant":false,"id":18760,"mutability":"mutable","name":"expected","nameLocation":"15435:8:76","nodeType":"VariableDeclaration","scope":18814,"src":"15427:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18759,"name":"address","nodeType":"ElementaryTypeName","src":"15427:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":18773,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18761,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18741,"src":"15446:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig memory"}},"id":18762,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15453:8:76","memberName":"proposed","nodeType":"MemberAccess","referencedDeclaration":29375,"src":"15446:15:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":18765,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15473:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":18764,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15465:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18763,"name":"address","nodeType":"ElementaryTypeName","src":"15465:7:76","typeDescriptions":{}}},"id":18766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15465:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15446:29:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":18770,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18741,"src":"15493:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig memory"}},"id":18771,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15500:8:76","memberName":"proposed","nodeType":"MemberAccess","referencedDeclaration":29375,"src":"15493:15:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"15446:62:76","trueExpression":{"expression":{"id":18768,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18741,"src":"15478:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig memory"}},"id":18769,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15485:5:76","memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":29371,"src":"15478:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"15427:81:76"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18774,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"15518:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15522:6:76","memberName":"sender","nodeType":"MemberAccess","src":"15518:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":18776,"name":"expected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18760,"src":"15532:8:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15518:22:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18782,"nodeType":"IfStatement","src":"15514:101:76","trueBody":{"id":18781,"nodeType":"Block","src":"15542:73:76","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18778,"name":"RoutersFacet__acceptProposedRouterOwner_badCaller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18090,"src":"15557:49:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15557:51:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18780,"nodeType":"RevertStatement","src":"15550:58:76"}]}},{"expression":{"arguments":[{"id":18784,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18736,"src":"15669:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18785,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18741,"src":"15678:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig memory"}},"id":18786,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15685:8:76","memberName":"proposed","nodeType":"MemberAccess","referencedDeclaration":29375,"src":"15678:15:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18787,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18741,"src":"15695:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig memory"}},"id":18788,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15702:5:76","memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":29371,"src":"15695:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18783,"name":"_setRouterOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19096,"src":"15653:15:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":18789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15653:55:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18790,"nodeType":"ExpressionStatement","src":"15653:55:76"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18791,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18741,"src":"15753:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig memory"}},"id":18792,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15760:8:76","memberName":"proposed","nodeType":"MemberAccess","referencedDeclaration":29375,"src":"15753:15:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":18795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15780:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":18794,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15772:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18793,"name":"address","nodeType":"ElementaryTypeName","src":"15772:7:76","typeDescriptions":{}}},"id":18796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15772:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15753:29:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18806,"nodeType":"IfStatement","src":"15749:90:76","trueBody":{"id":18805,"nodeType":"Block","src":"15784:55:76","statements":[{"expression":{"id":18803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"15792:40:76","subExpression":{"expression":{"baseExpression":{"expression":{"id":18798,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"15799:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18799,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15801:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"15799:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18801,"indexExpression":{"id":18800,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18736,"src":"15815:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15799:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18802,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15824:8:76","memberName":"proposed","nodeType":"MemberAccess","referencedDeclaration":29375,"src":"15799:33:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18804,"nodeType":"ExpressionStatement","src":"15792:40:76"}]}},{"expression":{"id":18812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"15844:49:76","subExpression":{"expression":{"baseExpression":{"expression":{"id":18807,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"15851:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18808,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15853:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"15851:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18810,"indexExpression":{"id":18809,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18736,"src":"15867:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15851:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18811,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15876:17:76","memberName":"proposedTimestamp","nodeType":"MemberAccess","referencedDeclaration":29377,"src":"15851:42:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18813,"nodeType":"ExpressionStatement","src":"15844:49:76"}]},"documentation":{"id":18734,"nodeType":"StructuredDocumentation","src":"14949:140:76","text":" @notice New router owner must accept role, or previous if proposed is 0x0\n @param _router Router address to set recipient"},"functionSelector":"09935b8f","id":18815,"implemented":true,"kind":"function","modifiers":[],"name":"acceptProposedRouterOwner","nameLocation":"15101:25:76","nodeType":"FunctionDefinition","parameters":{"id":18737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18736,"mutability":"mutable","name":"_router","nameLocation":"15135:7:76","nodeType":"VariableDeclaration","scope":18815,"src":"15127:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18735,"name":"address","nodeType":"ElementaryTypeName","src":"15127:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15126:17:76"},"returnParameters":{"id":18738,"nodeType":"ParameterList","parameters":[],"src":"15153:0:76"},"scope":19351,"src":"15092:806:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18911,"nodeType":"Block","src":"16279:776:76","statements":[{"assignments":[18825],"declarations":[{"constant":false,"id":18825,"mutability":"mutable","name":"config","nameLocation":"16339:6:76","nodeType":"VariableDeclaration","scope":18911,"src":"16319:26:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig"},"typeName":{"id":18824,"nodeType":"UserDefinedTypeName","pathNode":{"id":18823,"name":"RouterConfig","nameLocations":["16319:12:76"],"nodeType":"IdentifierPath","referencedDeclaration":29378,"src":"16319:12:76"},"referencedDeclaration":29378,"src":"16319:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage_ptr","typeString":"struct RouterConfig"}},"visibility":"internal"}],"id":18831,"initialValue":{"baseExpression":{"expression":{"id":18826,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"16348:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18827,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16350:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"16348:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18830,"indexExpression":{"expression":{"id":18828,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16364:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16368:6:76","memberName":"sender","nodeType":"MemberAccess","src":"16364:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16348:27:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"16319:56:76"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18832,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18825,"src":"16392:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig memory"}},"id":18833,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16399:5:76","memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":29371,"src":"16392:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":18836,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16416:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":18835,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16408:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18834,"name":"address","nodeType":"ElementaryTypeName","src":"16408:7:76","typeDescriptions":{}}},"id":18837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16408:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16392:26:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18839,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18825,"src":"16428:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig memory"}},"id":18840,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16435:9:76","memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":29373,"src":"16428:16:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":18843,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16456:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":18842,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16448:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18841,"name":"address","nodeType":"ElementaryTypeName","src":"16448:7:76","typeDescriptions":{}}},"id":18844,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16448:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16428:30:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16392:66:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18847,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18825,"src":"16468:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig memory"}},"id":18848,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16475:8:76","memberName":"proposed","nodeType":"MemberAccess","referencedDeclaration":29375,"src":"16468:15:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":18851,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16495:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":18850,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16487:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18849,"name":"address","nodeType":"ElementaryTypeName","src":"16487:7:76","typeDescriptions":{}}},"id":18852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16487:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16468:29:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16392:105:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18855,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18825,"src":"16507:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_memory_ptr","typeString":"struct RouterConfig memory"}},"id":18856,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16514:17:76","memberName":"proposedTimestamp","nodeType":"MemberAccess","referencedDeclaration":29377,"src":"16507:24:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":18857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16534:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16507:28:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16392:143:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18864,"nodeType":"IfStatement","src":"16381:230:76","trueBody":{"id":18863,"nodeType":"Block","src":"16542:69:76","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18860,"name":"RoutersFacet__initializeRouter_configNotEmpty","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18092,"src":"16557:45:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16557:47:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18862,"nodeType":"RevertStatement","src":"16550:54:76"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18865,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18818,"src":"16659:6:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":18868,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16677:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":18867,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16669:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18866,"name":"address","nodeType":"ElementaryTypeName","src":"16669:7:76","typeDescriptions":{}}},"id":18869,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16669:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16659:20:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18877,"nodeType":"IfStatement","src":"16655:60:76","trueBody":{"id":18876,"nodeType":"Block","src":"16681:34:76","statements":[{"expression":{"id":18874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18871,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18818,"src":"16689:6:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18872,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16698:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16702:6:76","memberName":"sender","nodeType":"MemberAccess","src":"16698:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16689:19:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18875,"nodeType":"ExpressionStatement","src":"16689:19:76"}]}},{"expression":{"arguments":[{"expression":{"id":18879,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16786:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16790:6:76","memberName":"sender","nodeType":"MemberAccess","src":"16786:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18881,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18818,"src":"16798:6:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":18884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16814:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":18883,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16806:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18882,"name":"address","nodeType":"ElementaryTypeName","src":"16806:7:76","typeDescriptions":{}}},"id":18885,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16806:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18878,"name":"_setRouterOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19096,"src":"16770:15:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":18886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16770:47:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18887,"nodeType":"ExpressionStatement","src":"16770:47:76"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18888,"name":"_recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18820,"src":"16896:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":18891,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16918:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":18890,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16910:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18889,"name":"address","nodeType":"ElementaryTypeName","src":"16910:7:76","typeDescriptions":{}}},"id":18892,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16910:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16896:24:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18905,"nodeType":"IfStatement","src":"16892:100:76","trueBody":{"id":18904,"nodeType":"Block","src":"16922:70:76","statements":[{"expression":{"arguments":[{"expression":{"id":18895,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16950:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16954:6:76","memberName":"sender","nodeType":"MemberAccess","src":"16950:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18897,"name":"_recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18820,"src":"16962:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":18900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16982:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":18899,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16974:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18898,"name":"address","nodeType":"ElementaryTypeName","src":"16974:7:76","typeDescriptions":{}}},"id":18901,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16974:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18894,"name":"_setRouterRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19063,"src":"16930:19:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":18902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16930:55:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18903,"nodeType":"ExpressionStatement","src":"16930:55:76"}]}},{"eventCall":{"arguments":[{"expression":{"id":18907,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17039:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17043:6:76","memberName":"sender","nodeType":"MemberAccess","src":"17039:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18906,"name":"RouterInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18184,"src":"17021:17:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":18909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17021:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18910,"nodeType":"EmitStatement","src":"17016:34:76"}]},"documentation":{"id":18816,"nodeType":"StructuredDocumentation","src":"15902:303:76","text":" @notice Can be called by anyone to set a config for their router (the msg.sender)\n @dev Does not set allowlisting permissions, only owner and recipient\n @param _owner The owner (can change recipient, proposes new owners)\n @param _recipient Where liquidity will be withdrawn to"},"functionSelector":"b214c901","id":18912,"implemented":true,"kind":"function","modifiers":[],"name":"initializeRouter","nameLocation":"16217:16:76","nodeType":"FunctionDefinition","parameters":{"id":18821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18818,"mutability":"mutable","name":"_owner","nameLocation":"16242:6:76","nodeType":"VariableDeclaration","scope":18912,"src":"16234:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18817,"name":"address","nodeType":"ElementaryTypeName","src":"16234:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18820,"mutability":"mutable","name":"_recipient","nameLocation":"16258:10:76","nodeType":"VariableDeclaration","scope":18912,"src":"16250:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18819,"name":"address","nodeType":"ElementaryTypeName","src":"16250:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16233:36:76"},"returnParameters":{"id":18822,"nodeType":"ParameterList","parameters":[],"src":"16279:0:76"},"scope":19351,"src":"16208:847:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18932,"nodeType":"Block","src":"17785:59:76","statements":[{"expression":{"arguments":[{"id":18927,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18915,"src":"17814:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18928,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18917,"src":"17823:6:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18929,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18919,"src":"17831:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18926,"name":"_addLiquidityForRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19221,"src":"17791:22:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (uint256,address,address)"}},"id":18930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17791:48:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18931,"nodeType":"ExpressionStatement","src":"17791:48:76"}]},"documentation":{"id":18913,"nodeType":"StructuredDocumentation","src":"17059:582:76","text":" @notice This is used by anyone to increase a router's available liquidity for a given asset.\n @dev The liquidity will be held in the local asset, which is the representation if you\n are *not* on the canonical domain, and the canonical asset otherwise.\n @param _amount - The amount of liquidity to add for the router\n @param _local - The address of the asset you're adding liquidity for. If adding liquidity of the\n native asset, routers may use `address(0)` or the wrapped asset\n @param _router The router you are adding liquidity on behalf of"},"functionSelector":"2d3f9ef6","id":18933,"implemented":true,"kind":"function","modifiers":[{"id":18922,"kind":"modifierInvocation","modifierName":{"id":18921,"name":"nonReentrant","nameLocations":["17758:12:76"],"nodeType":"IdentifierPath","referencedDeclaration":13774,"src":"17758:12:76"},"nodeType":"ModifierInvocation","src":"17758:12:76"},{"id":18924,"kind":"modifierInvocation","modifierName":{"id":18923,"name":"whenNotPaused","nameLocations":["17771:13:76"],"nodeType":"IdentifierPath","referencedDeclaration":13913,"src":"17771:13:76"},"nodeType":"ModifierInvocation","src":"17771:13:76"}],"name":"addRouterLiquidityFor","nameLocation":"17653:21:76","nodeType":"FunctionDefinition","parameters":{"id":18920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18915,"mutability":"mutable","name":"_amount","nameLocation":"17688:7:76","nodeType":"VariableDeclaration","scope":18933,"src":"17680:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18914,"name":"uint256","nodeType":"ElementaryTypeName","src":"17680:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18917,"mutability":"mutable","name":"_local","nameLocation":"17709:6:76","nodeType":"VariableDeclaration","scope":18933,"src":"17701:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18916,"name":"address","nodeType":"ElementaryTypeName","src":"17701:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18919,"mutability":"mutable","name":"_router","nameLocation":"17729:7:76","nodeType":"VariableDeclaration","scope":18933,"src":"17721:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18918,"name":"address","nodeType":"ElementaryTypeName","src":"17721:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17674:66:76"},"returnParameters":{"id":18925,"nodeType":"ParameterList","parameters":[],"src":"17785:0:76"},"scope":19351,"src":"17644:200:76","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":18952,"nodeType":"Block","src":"18468:62:76","statements":[{"expression":{"arguments":[{"id":18946,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18936,"src":"18497:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18947,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18938,"src":"18506:6:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18948,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18514:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18518:6:76","memberName":"sender","nodeType":"MemberAccess","src":"18514:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18945,"name":"_addLiquidityForRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19221,"src":"18474:22:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (uint256,address,address)"}},"id":18950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18474:51:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18951,"nodeType":"ExpressionStatement","src":"18474:51:76"}]},"documentation":{"id":18934,"nodeType":"StructuredDocumentation","src":"17848:512:76","text":" @notice This is used by any router to increase their available liquidity for a given asset.\n @dev The liquidity will be held in the local asset, which is the representation if you\n are *not* on the canonical domain, and the canonical asset otherwise.\n @param _amount - The amount of liquidity to add for the router\n @param _local - The address of the asset you're adding liquidity for. If adding liquidity of the\n native asset, routers may use `address(0)` or the wrapped asset"},"functionSelector":"54064594","id":18953,"implemented":true,"kind":"function","modifiers":[{"id":18941,"kind":"modifierInvocation","modifierName":{"id":18940,"name":"nonReentrant","nameLocations":["18441:12:76"],"nodeType":"IdentifierPath","referencedDeclaration":13774,"src":"18441:12:76"},"nodeType":"ModifierInvocation","src":"18441:12:76"},{"id":18943,"kind":"modifierInvocation","modifierName":{"id":18942,"name":"whenNotPaused","nameLocations":["18454:13:76"],"nodeType":"IdentifierPath","referencedDeclaration":13913,"src":"18454:13:76"},"nodeType":"ModifierInvocation","src":"18454:13:76"}],"name":"addRouterLiquidity","nameLocation":"18372:18:76","nodeType":"FunctionDefinition","parameters":{"id":18939,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18936,"mutability":"mutable","name":"_amount","nameLocation":"18399:7:76","nodeType":"VariableDeclaration","scope":18953,"src":"18391:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18935,"name":"uint256","nodeType":"ElementaryTypeName","src":"18391:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18938,"mutability":"mutable","name":"_local","nameLocation":"18416:6:76","nodeType":"VariableDeclaration","scope":18953,"src":"18408:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18937,"name":"address","nodeType":"ElementaryTypeName","src":"18408:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18390:33:76"},"returnParameters":{"id":18944,"nodeType":"ParameterList","parameters":[],"src":"18468:0:76"},"scope":19351,"src":"18363:167:76","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":19005,"nodeType":"Block","src":"19310:375:76","statements":[{"assignments":[18971],"declarations":[{"constant":false,"id":18971,"mutability":"mutable","name":"owner","nameLocation":"19392:5:76","nodeType":"VariableDeclaration","scope":19005,"src":"19384:13:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18970,"name":"address","nodeType":"ElementaryTypeName","src":"19384:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":18977,"initialValue":{"expression":{"baseExpression":{"expression":{"id":18972,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"19400:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":18973,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19402:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"19400:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":18975,"indexExpression":{"id":18974,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18963,"src":"19416:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19400:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":18976,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19425:5:76","memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":29371,"src":"19400:30:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"19384:46:76"},{"assignments":[18979],"declarations":[{"constant":false,"id":18979,"mutability":"mutable","name":"permissioned","nameLocation":"19444:12:76","nodeType":"VariableDeclaration","scope":19005,"src":"19436:20:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18978,"name":"address","nodeType":"ElementaryTypeName","src":"19436:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":18989,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18980,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18971,"src":"19459:5:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":18983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19476:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":18982,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19468:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18981,"name":"address","nodeType":"ElementaryTypeName","src":"19468:7:76","typeDescriptions":{}}},"id":18984,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19468:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19459:19:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":18987,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18971,"src":"19491:5:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"19459:37:76","trueExpression":{"id":18986,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18963,"src":"19481:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"19436:60:76"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18990,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19506:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19510:6:76","memberName":"sender","nodeType":"MemberAccess","src":"19506:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":18992,"name":"permissioned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18979,"src":"19520:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19506:26:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18997,"nodeType":"IfStatement","src":"19502:88:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18994,"name":"RoutersFacet__removeRouterLiquidityFor_notOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18126,"src":"19541:47:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":18995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19541:49:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18996,"nodeType":"RevertStatement","src":"19534:56:76"}},{"expression":{"arguments":[{"id":18999,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18959,"src":"19646:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19000,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18957,"src":"19655:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},{"id":19001,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18961,"src":"19667:3:76","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":19002,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18963,"src":"19672:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18998,"name":"_removeLiquidityForRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19350,"src":"19620:25:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_struct$_TokenId_$37728_memory_ptr_$_t_address_payable_$_t_address_$returns$__$","typeString":"function (uint256,struct TokenId memory,address payable,address)"}},"id":19003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19620:60:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19004,"nodeType":"ExpressionStatement","src":"19620:60:76"}]},"documentation":{"id":18954,"nodeType":"StructuredDocumentation","src":"18534:601:76","text":" @notice This is used by any router owner to decrease their available liquidity for a given asset.\n @dev Using the `_canonical` information in the interface instead of the local asset to allow\n routers to remove liquidity even if the asset is delisted\n @param _canonical The canonical token information in plaintext\n @param _amount - The amount of liquidity to remove for the router\n native asset, routers may use `address(0)` or the wrapped asset\n @param _to The address that will receive the liquidity being removed\n @param _router The address of the router"},"functionSelector":"fd5bd5fe","id":19006,"implemented":true,"kind":"function","modifiers":[{"id":18966,"kind":"modifierInvocation","modifierName":{"id":18965,"name":"nonReentrant","nameLocations":["19283:12:76"],"nodeType":"IdentifierPath","referencedDeclaration":13774,"src":"19283:12:76"},"nodeType":"ModifierInvocation","src":"19283:12:76"},{"id":18968,"kind":"modifierInvocation","modifierName":{"id":18967,"name":"whenNotPaused","nameLocations":["19296:13:76"],"nodeType":"IdentifierPath","referencedDeclaration":13913,"src":"19296:13:76"},"nodeType":"ModifierInvocation","src":"19296:13:76"}],"name":"removeRouterLiquidityFor","nameLocation":"19147:24:76","nodeType":"FunctionDefinition","parameters":{"id":18964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18957,"mutability":"mutable","name":"_canonical","nameLocation":"19192:10:76","nodeType":"VariableDeclaration","scope":19006,"src":"19177:25:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":18956,"nodeType":"UserDefinedTypeName","pathNode":{"id":18955,"name":"TokenId","nameLocations":["19177:7:76"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"19177:7:76"},"referencedDeclaration":37728,"src":"19177:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":18959,"mutability":"mutable","name":"_amount","nameLocation":"19216:7:76","nodeType":"VariableDeclaration","scope":19006,"src":"19208:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18958,"name":"uint256","nodeType":"ElementaryTypeName","src":"19208:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18961,"mutability":"mutable","name":"_to","nameLocation":"19245:3:76","nodeType":"VariableDeclaration","scope":19006,"src":"19229:19:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":18960,"name":"address","nodeType":"ElementaryTypeName","src":"19229:15:76","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":18963,"mutability":"mutable","name":"_router","nameLocation":"19262:7:76","nodeType":"VariableDeclaration","scope":19006,"src":"19254:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18962,"name":"address","nodeType":"ElementaryTypeName","src":"19254:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19171:102:76"},"returnParameters":{"id":18969,"nodeType":"ParameterList","parameters":[],"src":"19310:0:76"},"scope":19351,"src":"19138:547:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":19029,"nodeType":"Block","src":"20351:74:76","statements":[{"expression":{"arguments":[{"id":19022,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19012,"src":"20383:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19023,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19010,"src":"20392:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},{"id":19024,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19014,"src":"20404:3:76","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"expression":{"id":19025,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"20409:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20413:6:76","memberName":"sender","nodeType":"MemberAccess","src":"20409:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"}],"id":19021,"name":"_removeLiquidityForRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19350,"src":"20357:25:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_struct$_TokenId_$37728_memory_ptr_$_t_address_payable_$_t_address_$returns$__$","typeString":"function (uint256,struct TokenId memory,address payable,address)"}},"id":19027,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20357:63:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19028,"nodeType":"ExpressionStatement","src":"20357:63:76"}]},"documentation":{"id":19007,"nodeType":"StructuredDocumentation","src":"19689:511:76","text":" @notice This is used by any router to decrease their available liquidity for a given asset.\n @dev Using the `_canonical` information in the interface instead of the local asset to allow\n routers to remove liquidity even if the asset is delisted\n @param _canonical The canonical token information in plaintext\n @param _amount - The amount of liquidity to remove for the router\n @param _to The address that will receive the liquidity being removed if no router recipient exists."},"functionSelector":"f72c5048","id":19030,"implemented":true,"kind":"function","modifiers":[{"id":19017,"kind":"modifierInvocation","modifierName":{"id":19016,"name":"nonReentrant","nameLocations":["20324:12:76"],"nodeType":"IdentifierPath","referencedDeclaration":13774,"src":"20324:12:76"},"nodeType":"ModifierInvocation","src":"20324:12:76"},{"id":19019,"kind":"modifierInvocation","modifierName":{"id":19018,"name":"whenNotPaused","nameLocations":["20337:13:76"],"nodeType":"IdentifierPath","referencedDeclaration":13913,"src":"20337:13:76"},"nodeType":"ModifierInvocation","src":"20337:13:76"}],"name":"removeRouterLiquidity","nameLocation":"20212:21:76","nodeType":"FunctionDefinition","parameters":{"id":19015,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19010,"mutability":"mutable","name":"_canonical","nameLocation":"20254:10:76","nodeType":"VariableDeclaration","scope":19030,"src":"20239:25:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":19009,"nodeType":"UserDefinedTypeName","pathNode":{"id":19008,"name":"TokenId","nameLocations":["20239:7:76"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"20239:7:76"},"referencedDeclaration":37728,"src":"20239:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":19012,"mutability":"mutable","name":"_amount","nameLocation":"20278:7:76","nodeType":"VariableDeclaration","scope":19030,"src":"20270:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19011,"name":"uint256","nodeType":"ElementaryTypeName","src":"20270:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19014,"mutability":"mutable","name":"_to","nameLocation":"20307:3:76","nodeType":"VariableDeclaration","scope":19030,"src":"20291:19:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":19013,"name":"address","nodeType":"ElementaryTypeName","src":"20291:15:76","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"20233:81:76"},"returnParameters":{"id":19020,"nodeType":"ParameterList","parameters":[],"src":"20351:0:76"},"scope":19351,"src":"20203:222:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":19062,"nodeType":"Block","src":"20782:285:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19040,"name":"_previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19037,"src":"20827:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":19041,"name":"_updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19035,"src":"20840:8:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"20827:21:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19046,"nodeType":"IfStatement","src":"20823:84:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19043,"name":"RoutersFacet__setRouterRecipient_notNewRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18094,"src":"20857:48:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":19044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20857:50:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19045,"nodeType":"RevertStatement","src":"20850:57:76"}},{"expression":{"id":19054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":19047,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"20939:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19050,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20941:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"20939:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":19051,"indexExpression":{"id":19049,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19033,"src":"20955:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20939:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":19052,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"20964:9:76","memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":29373,"src":"20939:34:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19053,"name":"_updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19035,"src":"20976:8:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"20939:45:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19055,"nodeType":"ExpressionStatement","src":"20939:45:76"},{"eventCall":{"arguments":[{"id":19057,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19033,"src":"21033:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19058,"name":"_previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19037,"src":"21042:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19059,"name":"_updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19035,"src":"21053:8:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":19056,"name":"RouterRecipientSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18161,"src":"21014:18:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":19060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21014:48:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19061,"nodeType":"EmitStatement","src":"21009:53:76"}]},"documentation":{"id":19031,"nodeType":"StructuredDocumentation","src":"20480:191:76","text":" @notice Sets the router recipient\n @param _router The router to set the recipient for\n @param _updated The recipient to set\n @param _previous The existing recipient"},"id":19063,"implemented":true,"kind":"function","modifiers":[],"name":"_setRouterRecipient","nameLocation":"20683:19:76","nodeType":"FunctionDefinition","parameters":{"id":19038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19033,"mutability":"mutable","name":"_router","nameLocation":"20716:7:76","nodeType":"VariableDeclaration","scope":19063,"src":"20708:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19032,"name":"address","nodeType":"ElementaryTypeName","src":"20708:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19035,"mutability":"mutable","name":"_updated","nameLocation":"20737:8:76","nodeType":"VariableDeclaration","scope":19063,"src":"20729:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19034,"name":"address","nodeType":"ElementaryTypeName","src":"20729:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19037,"mutability":"mutable","name":"_previous","nameLocation":"20759:9:76","nodeType":"VariableDeclaration","scope":19063,"src":"20751:17:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19036,"name":"address","nodeType":"ElementaryTypeName","src":"20751:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"20702:70:76"},"returnParameters":{"id":19039,"nodeType":"ParameterList","parameters":[],"src":"20782:0:76"},"scope":19351,"src":"20674:393:76","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19095,"nodeType":"Block","src":"21353:263:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19073,"name":"_previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19070,"src":"21394:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":19074,"name":"_updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19068,"src":"21407:8:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21394:21:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19079,"nodeType":"IfStatement","src":"21390:73:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19076,"name":"RoutersFacet__setRouterOwner_noChange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18138,"src":"21424:37:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":19077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21424:39:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19078,"nodeType":"RevertStatement","src":"21417:46:76"}},{"expression":{"id":19087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":19080,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"21491:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19083,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21493:13:76","memberName":"routerConfigs","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"21491:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig storage ref)"}},"id":19084,"indexExpression":{"id":19082,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19066,"src":"21507:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21491:24:76","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage","typeString":"struct RouterConfig storage ref"}},"id":19085,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"21516:5:76","memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":29371,"src":"21491:30:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19086,"name":"_updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19068,"src":"21524:8:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21491:41:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19088,"nodeType":"ExpressionStatement","src":"21491:41:76"},{"eventCall":{"arguments":[{"id":19090,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19066,"src":"21582:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19091,"name":"_previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19070,"src":"21591:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19092,"name":"_updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19068,"src":"21602:8:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":19089,"name":"RouterOwnerAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18179,"src":"21562:19:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":19093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21562:49:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19094,"nodeType":"EmitStatement","src":"21557:54:76"}]},"documentation":{"id":19064,"nodeType":"StructuredDocumentation","src":"21071:175:76","text":" @notice Sets the router owner\n @param _router The router to set the owner for\n @param _updated The owner to set\n @param _previous The existing owner"},"id":19096,"implemented":true,"kind":"function","modifiers":[],"name":"_setRouterOwner","nameLocation":"21258:15:76","nodeType":"FunctionDefinition","parameters":{"id":19071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19066,"mutability":"mutable","name":"_router","nameLocation":"21287:7:76","nodeType":"VariableDeclaration","scope":19096,"src":"21279:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19065,"name":"address","nodeType":"ElementaryTypeName","src":"21279:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19068,"mutability":"mutable","name":"_updated","nameLocation":"21308:8:76","nodeType":"VariableDeclaration","scope":19096,"src":"21300:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19067,"name":"address","nodeType":"ElementaryTypeName","src":"21300:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19070,"mutability":"mutable","name":"_previous","nameLocation":"21330:9:76","nodeType":"VariableDeclaration","scope":19096,"src":"21322:17:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19069,"name":"address","nodeType":"ElementaryTypeName","src":"21322:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21273:70:76"},"returnParameters":{"id":19072,"nodeType":"ParameterList","parameters":[],"src":"21353:0:76"},"scope":19351,"src":"21249:367:76","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19220,"nodeType":"Block","src":"22200:1495:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19106,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19103,"src":"22251:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":19109,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22270:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":19108,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22262:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19107,"name":"address","nodeType":"ElementaryTypeName","src":"22262:7:76","typeDescriptions":{}}},"id":19110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22262:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"22251:21:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19115,"nodeType":"IfStatement","src":"22247:83:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19112,"name":"RoutersFacet__addLiquidityForRouter_routerEmpty","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18112,"src":"22281:47:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":19113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22281:49:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19114,"nodeType":"RevertStatement","src":"22274:56:76"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19116,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19099,"src":"22379:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22390:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"22379:12:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19122,"nodeType":"IfStatement","src":"22375:75:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19119,"name":"RoutersFacet__addLiquidityForRouter_amountIsZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18114,"src":"22400:48:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":19120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22400:50:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19121,"nodeType":"RevertStatement","src":"22393:57:76"}},{"assignments":[19125],"declarations":[{"constant":false,"id":19125,"mutability":"mutable","name":"canonical","nameLocation":"22618:9:76","nodeType":"VariableDeclaration","scope":19220,"src":"22603:24:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":19124,"nodeType":"UserDefinedTypeName","pathNode":{"id":19123,"name":"TokenId","nameLocations":["22603:7:76"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"22603:7:76"},"referencedDeclaration":37728,"src":"22603:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"id":19130,"initialValue":{"baseExpression":{"expression":{"id":19126,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"22630:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19127,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22632:25:76","memberName":"representationToCanonical","nodeType":"MemberAccess","referencedDeclaration":29420,"src":"22630:27:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId storage ref)"}},"id":19129,"indexExpression":{"id":19128,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19101,"src":"22658:6:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22630:35:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage","typeString":"struct TokenId storage ref"}},"nodeType":"VariableDeclarationStatement","src":"22603:62:76"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":19134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19131,"name":"canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19125,"src":"22675:9:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":19132,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22685:6:76","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"22675:16:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19133,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22695:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"22675:21:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":19141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19135,"name":"canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19125,"src":"22700:9:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":19136,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22710:2:76","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"22700:12:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":19139,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22724:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":19138,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22716:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":19137,"name":"bytes32","nodeType":"ElementaryTypeName","src":"22716:7:76","typeDescriptions":{}}},"id":19140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22716:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"22700:26:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"22675:51:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19160,"nodeType":"IfStatement","src":"22671:315:76","trueBody":{"id":19159,"nodeType":"Block","src":"22728:258:76","statements":[{"expression":{"id":19148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19143,"name":"canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19125,"src":"22895:9:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":19145,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"22905:6:76","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"22895:16:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":19146,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"22914:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19147,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22916:6:76","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"22914:8:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"22895:27:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":19149,"nodeType":"ExpressionStatement","src":"22895:27:76"},{"expression":{"id":19157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19150,"name":"canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19125,"src":"22930:9:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":19152,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"22940:2:76","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"22930:12:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19155,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19101,"src":"22972:6:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19153,"name":"TypeCasts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50188,"src":"22945:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TypeCasts_$50188_$","typeString":"type(library TypeCasts)"}},"id":19154,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22955:16:76","memberName":"addressToBytes32","nodeType":"MemberAccess","referencedDeclaration":50168,"src":"22945:26:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$_t_bytes32_$","typeString":"function (address) pure returns (bytes32)"}},"id":19156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22945:34:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"22930:49:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19158,"nodeType":"ExpressionStatement","src":"22930:49:76"}]}},{"assignments":[19162],"declarations":[{"constant":false,"id":19162,"mutability":"mutable","name":"key","nameLocation":"22999:3:76","nodeType":"VariableDeclaration","scope":19220,"src":"22991:11:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19161,"name":"bytes32","nodeType":"ElementaryTypeName","src":"22991:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":19170,"initialValue":{"arguments":[{"expression":{"id":19165,"name":"canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19125,"src":"23039:9:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":19166,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23049:2:76","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"23039:12:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":19167,"name":"canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19125,"src":"23053:9:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":19168,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23063:6:76","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"23053:16:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":19163,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"23005:10:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":19164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23016:22:76","memberName":"calculateCanonicalHash","nodeType":"MemberAccess","referencedDeclaration":28598,"src":"23005:33:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint32) pure returns (bytes32)"}},"id":19169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23005:65:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"22991:79:76"},{"condition":{"id":19176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"23080:29:76","subExpression":{"expression":{"baseExpression":{"expression":{"id":19171,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"23081:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19172,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23083:12:76","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"23081:14:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":19174,"indexExpression":{"id":19173,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19162,"src":"23096:3:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23081:19:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":19175,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23101:8:76","memberName":"approval","nodeType":"MemberAccess","referencedDeclaration":29390,"src":"23081:28:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19181,"nodeType":"IfStatement","src":"23076:114:76","trueBody":{"id":19180,"nodeType":"Block","src":"23111:79:76","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19177,"name":"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13746,"src":"23126:55:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":19178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23126:57:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19179,"nodeType":"RevertStatement","src":"23119:64:76"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"23241:28:76","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":19182,"name":"_isRouterAllowlistRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13932,"src":"23242:25:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":19183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23242:27:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":19188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"23273:27:76","subExpression":{"arguments":[{"id":19186,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19103,"src":"23292:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19185,"name":"getRouterApproval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18292,"src":"23274:17:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":19187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23274:26:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"23241:59:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19193,"nodeType":"IfStatement","src":"23237:125:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19190,"name":"RoutersFacet__addLiquidityForRouter_badRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18116,"src":"23315:45:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":19191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23315:47:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19192,"nodeType":"RevertStatement","src":"23308:54:76"}},{"expression":{"arguments":[{"id":19197,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19101,"src":"23435:6:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19198,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19099,"src":"23443:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19194,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"23404:10:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":19196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23415:19:76","memberName":"handleIncomingAsset","nodeType":"MemberAccess","referencedDeclaration":27772,"src":"23404:30:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":19199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23404:47:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19200,"nodeType":"ExpressionStatement","src":"23404:47:76"},{"expression":{"id":19209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"expression":{"id":19201,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"23571:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19205,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23573:14:76","memberName":"routerBalances","nodeType":"MemberAccess","referencedDeclaration":29445,"src":"23571:16:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":19206,"indexExpression":{"id":19203,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19103,"src":"23588:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23571:25:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":19207,"indexExpression":{"id":19204,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19101,"src":"23597:6:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23571:33:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":19208,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19099,"src":"23608:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23571:44:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19210,"nodeType":"ExpressionStatement","src":"23571:44:76"},{"eventCall":{"arguments":[{"id":19212,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19103,"src":"23648:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19213,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19101,"src":"23657:6:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19214,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19162,"src":"23665:3:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":19215,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19099,"src":"23670:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19216,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"23679:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23683:6:76","memberName":"sender","nodeType":"MemberAccess","src":"23679:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":19211,"name":"RouterLiquidityAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18225,"src":"23627:20:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,address,bytes32,uint256,address)"}},"id":19218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23627:63:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19219,"nodeType":"EmitStatement","src":"23622:68:76"}]},"documentation":{"id":19097,"nodeType":"StructuredDocumentation","src":"21620:470:76","text":" @notice Contains the logic to verify + increment a given routers liquidity\n @dev The liquidity will be held in the local asset, which is the representation if you\n are *not* on the canonical domain, and the canonical asset otherwise.\n @param _amount - The amount of liquidity to add for the router\n @param _local - The address of the bridge representation of the asset\n @param _router - The router you are adding liquidity on behalf of"},"id":19221,"implemented":true,"kind":"function","modifiers":[],"name":"_addLiquidityForRouter","nameLocation":"22102:22:76","nodeType":"FunctionDefinition","parameters":{"id":19104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19099,"mutability":"mutable","name":"_amount","nameLocation":"22138:7:76","nodeType":"VariableDeclaration","scope":19221,"src":"22130:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19098,"name":"uint256","nodeType":"ElementaryTypeName","src":"22130:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19101,"mutability":"mutable","name":"_local","nameLocation":"22159:6:76","nodeType":"VariableDeclaration","scope":19221,"src":"22151:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19100,"name":"address","nodeType":"ElementaryTypeName","src":"22151:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19103,"mutability":"mutable","name":"_router","nameLocation":"22179:7:76","nodeType":"VariableDeclaration","scope":19221,"src":"22171:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19102,"name":"address","nodeType":"ElementaryTypeName","src":"22171:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"22124:66:76"},"returnParameters":{"id":19105,"nodeType":"ParameterList","parameters":[],"src":"22200:0:76"},"scope":19351,"src":"22093:1602:76","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19349,"nodeType":"Block","src":"24219:1487:76","statements":[{"assignments":[19235],"declarations":[{"constant":false,"id":19235,"mutability":"mutable","name":"recipient","nameLocation":"24294:9:76","nodeType":"VariableDeclaration","scope":19349,"src":"24286:17:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19234,"name":"address","nodeType":"ElementaryTypeName","src":"24286:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":19239,"initialValue":{"arguments":[{"id":19237,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19231,"src":"24325:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19236,"name":"getRouterRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18307,"src":"24306:18:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":19238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24306:27:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"24286:47:76"},{"expression":{"id":19250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19240,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19235,"src":"24339:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19241,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19235,"src":"24351:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":19244,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24372:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":19243,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24364:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19242,"name":"address","nodeType":"ElementaryTypeName","src":"24364:7:76","typeDescriptions":{}}},"id":19245,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24364:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24351:23:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":19248,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19235,"src":"24383:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"24351:41:76","trueExpression":{"id":19247,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19229,"src":"24377:3:76","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24339:53:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19251,"nodeType":"ExpressionStatement","src":"24339:53:76"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19252,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19235,"src":"24440:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":19255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24461:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":19254,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24453:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19253,"name":"address","nodeType":"ElementaryTypeName","src":"24453:7:76","typeDescriptions":{}}},"id":19256,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24453:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24440:23:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19261,"nodeType":"IfStatement","src":"24436:88:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19258,"name":"RoutersFacet__removeRouterLiquidity_recipientEmpty","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18120,"src":"24472:50:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":19259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24472:52:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19260,"nodeType":"RevertStatement","src":"24465:59:76"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19262,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19224,"src":"24573:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24584:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"24573:12:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19268,"nodeType":"IfStatement","src":"24569:75:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19265,"name":"RoutersFacet__removeRouterLiquidity_amountIsZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18122,"src":"24594:48:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":19266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24594:50:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19267,"nodeType":"RevertStatement","src":"24587:57:76"}},{"assignments":[19270],"declarations":[{"constant":false,"id":19270,"mutability":"mutable","name":"onCanonical","nameLocation":"24656:11:76","nodeType":"VariableDeclaration","scope":19349,"src":"24651:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19269,"name":"bool","nodeType":"ElementaryTypeName","src":"24651:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":19276,"initialValue":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":19275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19271,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19227,"src":"24670:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":19272,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24681:6:76","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"24670:17:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":19273,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"24691:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19274,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24693:6:76","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"24691:8:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"24670:29:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"24651:48:76"},{"assignments":[19278],"declarations":[{"constant":false,"id":19278,"mutability":"mutable","name":"key","nameLocation":"24929:3:76","nodeType":"VariableDeclaration","scope":19349,"src":"24921:11:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19277,"name":"bytes32","nodeType":"ElementaryTypeName","src":"24921:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":19286,"initialValue":{"arguments":[{"expression":{"id":19281,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19227,"src":"24969:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":19282,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24980:2:76","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"24969:13:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":19283,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19227,"src":"24984:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":19284,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24995:6:76","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"24984:17:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":19279,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"24935:10:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":19280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24946:22:76","memberName":"calculateCanonicalHash","nodeType":"MemberAccess","referencedDeclaration":28598,"src":"24935:33:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint32) pure returns (bytes32)"}},"id":19285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24935:67:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"24921:81:76"},{"assignments":[19288],"declarations":[{"constant":false,"id":19288,"mutability":"mutable","name":"local","nameLocation":"25016:5:76","nodeType":"VariableDeclaration","scope":19349,"src":"25008:13:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19287,"name":"address","nodeType":"ElementaryTypeName","src":"25008:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":19301,"initialValue":{"condition":{"id":19289,"name":"onCanonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19270,"src":"25024:11:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"baseExpression":{"expression":{"id":19295,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"25082:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19296,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25084:12:76","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"25082:14:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":19298,"indexExpression":{"id":19297,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19278,"src":"25097:3:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25082:19:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":19299,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25102:14:76","memberName":"representation","nodeType":"MemberAccess","referencedDeclaration":29380,"src":"25082:34:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"25024:92:76","trueExpression":{"arguments":[{"expression":{"id":19292,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19227,"src":"25065:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":19293,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25076:2:76","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"25065:13:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":19290,"name":"TypeCasts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50188,"src":"25038:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TypeCasts_$50188_$","typeString":"type(library TypeCasts)"}},"id":19291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25048:16:76","memberName":"bytes32ToAddress","nodeType":"MemberAccess","referencedDeclaration":50187,"src":"25038:26:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) pure returns (address)"}},"id":19294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25038:41:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"25008:108:76"},{"assignments":[19303],"declarations":[{"constant":false,"id":19303,"mutability":"mutable","name":"routerBalance","nameLocation":"25167:13:76","nodeType":"VariableDeclaration","scope":19349,"src":"25159:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19302,"name":"uint256","nodeType":"ElementaryTypeName","src":"25159:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19310,"initialValue":{"baseExpression":{"baseExpression":{"expression":{"id":19304,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"25183:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19305,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25185:14:76","memberName":"routerBalances","nodeType":"MemberAccess","referencedDeclaration":29445,"src":"25183:16:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":19307,"indexExpression":{"id":19306,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19231,"src":"25200:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25183:25:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":19309,"indexExpression":{"id":19308,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19288,"src":"25209:5:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25183:32:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25159:56:76"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19311,"name":"routerBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19303,"src":"25286:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":19312,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19224,"src":"25302:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25286:23:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19317,"nodeType":"IfStatement","src":"25282:91:76","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19314,"name":"RoutersFacet__removeRouterLiquidity_insufficientFunds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18124,"src":"25318:53:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":19315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25318:55:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19316,"nodeType":"RevertStatement","src":"25311:62:76"}},{"id":19330,"nodeType":"UncheckedBlock","src":"25411:83:76","statements":[{"expression":{"id":19328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"expression":{"id":19318,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"25429:1:76","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19322,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25431:14:76","memberName":"routerBalances","nodeType":"MemberAccess","referencedDeclaration":29445,"src":"25429:16:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":19323,"indexExpression":{"id":19320,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19231,"src":"25446:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25429:25:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":19324,"indexExpression":{"id":19321,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19288,"src":"25455:5:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"25429:32:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19325,"name":"routerBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19303,"src":"25464:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":19326,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19224,"src":"25480:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25464:23:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25429:58:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19329,"nodeType":"ExpressionStatement","src":"25429:58:76"}]},{"expression":{"arguments":[{"id":19334,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19288,"src":"25588:5:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19335,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19235,"src":"25595:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19336,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19224,"src":"25606:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19331,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"25557:10:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":19333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25568:19:76","memberName":"handleOutgoingAsset","nodeType":"MemberAccess","referencedDeclaration":27809,"src":"25557:30:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":19337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25557:57:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19338,"nodeType":"ExpressionStatement","src":"25557:57:76"},{"eventCall":{"arguments":[{"id":19340,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19231,"src":"25649:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19341,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19235,"src":"25658:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19342,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19288,"src":"25669:5:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19343,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19278,"src":"25676:3:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":19344,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19224,"src":"25681:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19345,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"25690:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25694:6:76","memberName":"sender","nodeType":"MemberAccess","src":"25690:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":19339,"name":"RouterLiquidityRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18240,"src":"25626:22:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_bytes32_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,address,address,bytes32,uint256,address)"}},"id":19347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25626:75:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19348,"nodeType":"EmitStatement","src":"25621:80:76"}]},"documentation":{"id":19222,"nodeType":"StructuredDocumentation","src":"23699:371:76","text":" @notice This is used by any router owner to decrease their available liquidity for a given asset.\n @param _amount - The amount of liquidity to remove for the router\n @param _canonical The canonical token information in plaintext\n @param _to The address that will receive the liquidity being removed\n @param _router The address of the router"},"id":19350,"implemented":true,"kind":"function","modifiers":[],"name":"_removeLiquidityForRouter","nameLocation":"24082:25:76","nodeType":"FunctionDefinition","parameters":{"id":19232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19224,"mutability":"mutable","name":"_amount","nameLocation":"24121:7:76","nodeType":"VariableDeclaration","scope":19350,"src":"24113:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19223,"name":"uint256","nodeType":"ElementaryTypeName","src":"24113:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19227,"mutability":"mutable","name":"_canonical","nameLocation":"24149:10:76","nodeType":"VariableDeclaration","scope":19350,"src":"24134:25:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":19226,"nodeType":"UserDefinedTypeName","pathNode":{"id":19225,"name":"TokenId","nameLocations":["24134:7:76"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"24134:7:76"},"referencedDeclaration":37728,"src":"24134:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":19229,"mutability":"mutable","name":"_to","nameLocation":"24181:3:76","nodeType":"VariableDeclaration","scope":19350,"src":"24165:19:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":19228,"name":"address","nodeType":"ElementaryTypeName","src":"24165:15:76","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":19231,"mutability":"mutable","name":"_router","nameLocation":"24198:7:76","nodeType":"VariableDeclaration","scope":19350,"src":"24190:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19230,"name":"address","nodeType":"ElementaryTypeName","src":"24190:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"24107:102:76"},"returnParameters":{"id":19233,"nodeType":"ParameterList","parameters":[],"src":"24219:0:76"},"scope":19351,"src":"24073:1633:76","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":19352,"src":"1329:24379:76","usedErrors":[13728,13730,13732,13734,13736,13738,13740,13742,13744,13746,18088,18090,18092,18094,18096,18098,18100,18102,18104,18106,18108,18110,18112,18114,18116,18118,18120,18122,18124,18126,18128,18130,18132,18134,18136,18138,27656,27658,27660]}],"src":"39:25670:76"},"id":76},"contracts/core/connext/facets/StableSwapFacet.sol":{"ast":{"absolutePath":"contracts/core/connext/facets/StableSwapFacet.sol","exportedSymbols":{"AmplificationUtils":[27626],"BaseConnextFacet":[14146],"IERC20":[10812],"StableSwapFacet":[20020],"SwapUtils":[34244]},"id":20021,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":19353,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:77"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":19355,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20021,"sourceUnit":11155,"src":"64:79:77","symbolAliases":[{"foreign":{"id":19354,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10812,"src":"72:6:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/AmplificationUtils.sol","file":"../libraries/AmplificationUtils.sol","id":19358,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20021,"sourceUnit":27627,"src":"145:82:77","symbolAliases":[{"foreign":{"id":19356,"name":"AmplificationUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27626,"src":"153:18:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":19357,"name":"SwapUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34244,"src":"173:9:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/facets/BaseConnextFacet.sol","file":"./BaseConnextFacet.sol","id":19360,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20021,"sourceUnit":14147,"src":"229:56:77","symbolAliases":[{"foreign":{"id":19359,"name":"BaseConnextFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14146,"src":"237:16:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":19362,"name":"BaseConnextFacet","nameLocations":["1222:16:77"],"nodeType":"IdentifierPath","referencedDeclaration":14146,"src":"1222:16:77"},"id":19363,"nodeType":"InheritanceSpecifier","src":"1222:16:77"}],"canonicalName":"StableSwapFacet","contractDependencies":[],"contractKind":"contract","documentation":{"id":19361,"nodeType":"StructuredDocumentation","src":"287:906:77","text":" @title Swap - A StableSwap implementation in solidity.\n @notice This contract is responsible for custody of closely pegged assets (eg. group of stablecoins)\n and automatic market making system. Users become an LP (Liquidity Provider) by depositing their tokens\n in desired ratios for an exchange of the pool token that represents their share of the pool.\n Users can burn pool tokens and withdraw their share of token(s).\n Each time a swap between the pooled tokens happens, a set fee incurs which effectively gets\n distributed to the LPs.\n In case of emergencies, admin can pause additional deposits, swaps, or single-asset withdraws - which\n stops the ratio of the tokens in the pool from changing.\n Users can always withdraw their tokens via multi-asset withdraws.\n @dev Most of the logic is stored as a library `SwapUtils` for the sake of contract readability."},"fullyImplemented":true,"id":20020,"linearizedBaseContracts":[20020,14146],"name":"StableSwapFacet","nameLocation":"1203:15:77","nodeType":"ContractDefinition","nodes":[{"global":false,"id":19367,"libraryName":{"id":19364,"name":"SwapUtils","nameLocations":["1249:9:77"],"nodeType":"IdentifierPath","referencedDeclaration":34244,"src":"1249:9:77"},"nodeType":"UsingForDirective","src":"1243:35:77","typeName":{"id":19366,"nodeType":"UserDefinedTypeName","pathNode":{"id":19365,"name":"SwapUtils.Swap","nameLocations":["1263:9:77","1273:4:77"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"1263:14:77"},"referencedDeclaration":30786,"src":"1263:14:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}}},{"global":false,"id":19371,"libraryName":{"id":19368,"name":"AmplificationUtils","nameLocations":["1287:18:77"],"nodeType":"IdentifierPath","referencedDeclaration":27626,"src":"1287:18:77"},"nodeType":"UsingForDirective","src":"1281:44:77","typeName":{"id":19370,"nodeType":"UserDefinedTypeName","pathNode":{"id":19369,"name":"SwapUtils.Swap","nameLocations":["1310:9:77","1320:4:77"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"1310:14:77"},"referencedDeclaration":30786,"src":"1310:14:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}}},{"errorSelector":"9bc13a2c","id":19373,"name":"StableSwapFacet__deadlineCheck_deadlineNotMet","nameLocation":"1377:45:77","nodeType":"ErrorDefinition","parameters":{"id":19372,"nodeType":"ParameterList","parameters":[],"src":"1422:2:77"},"src":"1371:54:77"},{"errorSelector":"0e673170","id":19375,"name":"StableSwapFacet__getSwapToken_outOfRange","nameLocation":"1434:40:77","nodeType":"ErrorDefinition","parameters":{"id":19374,"nodeType":"ParameterList","parameters":[],"src":"1474:2:77"},"src":"1428:49:77"},{"errorSelector":"336752bb","id":19377,"name":"StableSwapFacet__getSwapTokenIndex_notExist","nameLocation":"1486:43:77","nodeType":"ErrorDefinition","parameters":{"id":19376,"nodeType":"ParameterList","parameters":[],"src":"1529:2:77"},"src":"1480:52:77"},{"errorSelector":"41056991","id":19379,"name":"StableSwapFacet__getSwapTokenBalance_indexOutOfRange","nameLocation":"1541:52:77","nodeType":"ErrorDefinition","parameters":{"id":19378,"nodeType":"ParameterList","parameters":[],"src":"1593:2:77"},"src":"1535:61:77"},{"anonymous":false,"eventSelector":"28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df320","id":19393,"name":"TokenSwap","nameLocation":"1687:9:77","nodeType":"EventDefinition","parameters":{"id":19392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19381,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"1718:3:77","nodeType":"VariableDeclaration","scope":19393,"src":"1702:19:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19380,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1702:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19383,"indexed":true,"mutability":"mutable","name":"buyer","nameLocation":"1743:5:77","nodeType":"VariableDeclaration","scope":19393,"src":"1727:21:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19382,"name":"address","nodeType":"ElementaryTypeName","src":"1727:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19385,"indexed":false,"mutability":"mutable","name":"tokensSold","nameLocation":"1762:10:77","nodeType":"VariableDeclaration","scope":19393,"src":"1754:18:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19384,"name":"uint256","nodeType":"ElementaryTypeName","src":"1754:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19387,"indexed":false,"mutability":"mutable","name":"tokensBought","nameLocation":"1786:12:77","nodeType":"VariableDeclaration","scope":19393,"src":"1778:20:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19386,"name":"uint256","nodeType":"ElementaryTypeName","src":"1778:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19389,"indexed":false,"mutability":"mutable","name":"soldId","nameLocation":"1812:6:77","nodeType":"VariableDeclaration","scope":19393,"src":"1804:14:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":19388,"name":"uint128","nodeType":"ElementaryTypeName","src":"1804:7:77","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":19391,"indexed":false,"mutability":"mutable","name":"boughtId","nameLocation":"1832:8:77","nodeType":"VariableDeclaration","scope":19393,"src":"1824:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":19390,"name":"uint128","nodeType":"ElementaryTypeName","src":"1824:7:77","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1696:148:77"},"src":"1681:164:77"},{"anonymous":false,"eventSelector":"bcb1ab680ee25ef87d34ec297263a10e0a823cd81326b0aa6bc55b86cb2a4188","id":19409,"name":"AddLiquidity","nameLocation":"1854:12:77","nodeType":"EventDefinition","parameters":{"id":19408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19395,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"1888:3:77","nodeType":"VariableDeclaration","scope":19409,"src":"1872:19:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19394,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1872:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19397,"indexed":true,"mutability":"mutable","name":"provider","nameLocation":"1913:8:77","nodeType":"VariableDeclaration","scope":19409,"src":"1897:24:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19396,"name":"address","nodeType":"ElementaryTypeName","src":"1897:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19400,"indexed":false,"mutability":"mutable","name":"tokenAmounts","nameLocation":"1937:12:77","nodeType":"VariableDeclaration","scope":19409,"src":"1927:22:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":19398,"name":"uint256","nodeType":"ElementaryTypeName","src":"1927:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19399,"nodeType":"ArrayTypeName","src":"1927:9:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":19403,"indexed":false,"mutability":"mutable","name":"fees","nameLocation":"1965:4:77","nodeType":"VariableDeclaration","scope":19409,"src":"1955:14:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":19401,"name":"uint256","nodeType":"ElementaryTypeName","src":"1955:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19402,"nodeType":"ArrayTypeName","src":"1955:9:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":19405,"indexed":false,"mutability":"mutable","name":"invariant","nameLocation":"1983:9:77","nodeType":"VariableDeclaration","scope":19409,"src":"1975:17:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19404,"name":"uint256","nodeType":"ElementaryTypeName","src":"1975:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19407,"indexed":false,"mutability":"mutable","name":"lpTokenSupply","nameLocation":"2006:13:77","nodeType":"VariableDeclaration","scope":19409,"src":"1998:21:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19406,"name":"uint256","nodeType":"ElementaryTypeName","src":"1998:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1866:157:77"},"src":"1848:176:77"},{"anonymous":false,"eventSelector":"58f96d387ac27c23fb6350424cb6b032322b14ffd82029e96aeed2c525e790e8","id":19420,"name":"RemoveLiquidity","nameLocation":"2033:15:77","nodeType":"EventDefinition","parameters":{"id":19419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19411,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"2065:3:77","nodeType":"VariableDeclaration","scope":19420,"src":"2049:19:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19410,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2049:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19413,"indexed":true,"mutability":"mutable","name":"provider","nameLocation":"2086:8:77","nodeType":"VariableDeclaration","scope":19420,"src":"2070:24:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19412,"name":"address","nodeType":"ElementaryTypeName","src":"2070:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19416,"indexed":false,"mutability":"mutable","name":"tokenAmounts","nameLocation":"2106:12:77","nodeType":"VariableDeclaration","scope":19420,"src":"2096:22:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":19414,"name":"uint256","nodeType":"ElementaryTypeName","src":"2096:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19415,"nodeType":"ArrayTypeName","src":"2096:9:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":19418,"indexed":false,"mutability":"mutable","name":"lpTokenSupply","nameLocation":"2128:13:77","nodeType":"VariableDeclaration","scope":19420,"src":"2120:21:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19417,"name":"uint256","nodeType":"ElementaryTypeName","src":"2120:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2048:94:77"},"src":"2027:116:77"},{"anonymous":false,"eventSelector":"1a66f6ea1c14e22a62ab434f3414908bb5f49133d673c872c8957aa961e4c215","id":19434,"name":"RemoveLiquidityOne","nameLocation":"2152:18:77","nodeType":"EventDefinition","parameters":{"id":19433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19422,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"2192:3:77","nodeType":"VariableDeclaration","scope":19434,"src":"2176:19:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19421,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2176:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19424,"indexed":true,"mutability":"mutable","name":"provider","nameLocation":"2217:8:77","nodeType":"VariableDeclaration","scope":19434,"src":"2201:24:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19423,"name":"address","nodeType":"ElementaryTypeName","src":"2201:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19426,"indexed":false,"mutability":"mutable","name":"lpTokenAmount","nameLocation":"2239:13:77","nodeType":"VariableDeclaration","scope":19434,"src":"2231:21:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19425,"name":"uint256","nodeType":"ElementaryTypeName","src":"2231:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19428,"indexed":false,"mutability":"mutable","name":"lpTokenSupply","nameLocation":"2266:13:77","nodeType":"VariableDeclaration","scope":19434,"src":"2258:21:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19427,"name":"uint256","nodeType":"ElementaryTypeName","src":"2258:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19430,"indexed":false,"mutability":"mutable","name":"boughtId","nameLocation":"2293:8:77","nodeType":"VariableDeclaration","scope":19434,"src":"2285:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19429,"name":"uint256","nodeType":"ElementaryTypeName","src":"2285:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19432,"indexed":false,"mutability":"mutable","name":"tokensBought","nameLocation":"2315:12:77","nodeType":"VariableDeclaration","scope":19434,"src":"2307:20:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19431,"name":"uint256","nodeType":"ElementaryTypeName","src":"2307:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2170:161:77"},"src":"2146:186:77"},{"anonymous":false,"eventSelector":"a404896827f41a3845de89f154bf1f4fe5cbdf79da7c7805263a3d0b7de9e672","id":19450,"name":"RemoveLiquidityImbalance","nameLocation":"2341:24:77","nodeType":"EventDefinition","parameters":{"id":19449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19436,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"2387:3:77","nodeType":"VariableDeclaration","scope":19450,"src":"2371:19:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19435,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2371:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19438,"indexed":true,"mutability":"mutable","name":"provider","nameLocation":"2412:8:77","nodeType":"VariableDeclaration","scope":19450,"src":"2396:24:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19437,"name":"address","nodeType":"ElementaryTypeName","src":"2396:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19441,"indexed":false,"mutability":"mutable","name":"tokenAmounts","nameLocation":"2436:12:77","nodeType":"VariableDeclaration","scope":19450,"src":"2426:22:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":19439,"name":"uint256","nodeType":"ElementaryTypeName","src":"2426:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19440,"nodeType":"ArrayTypeName","src":"2426:9:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":19444,"indexed":false,"mutability":"mutable","name":"fees","nameLocation":"2464:4:77","nodeType":"VariableDeclaration","scope":19450,"src":"2454:14:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":19442,"name":"uint256","nodeType":"ElementaryTypeName","src":"2454:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19443,"nodeType":"ArrayTypeName","src":"2454:9:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":19446,"indexed":false,"mutability":"mutable","name":"invariant","nameLocation":"2482:9:77","nodeType":"VariableDeclaration","scope":19450,"src":"2474:17:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19445,"name":"uint256","nodeType":"ElementaryTypeName","src":"2474:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19448,"indexed":false,"mutability":"mutable","name":"lpTokenSupply","nameLocation":"2505:13:77","nodeType":"VariableDeclaration","scope":19450,"src":"2497:21:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19447,"name":"uint256","nodeType":"ElementaryTypeName","src":"2497:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2365:157:77"},"src":"2335:188:77"},{"anonymous":false,"eventSelector":"7b4e02f2e320870ba4f764edf60a5289a465018a3fe159f0d72ba33139b0a616","id":19456,"name":"NewAdminFee","nameLocation":"2532:11:77","nodeType":"EventDefinition","parameters":{"id":19455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19452,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"2560:3:77","nodeType":"VariableDeclaration","scope":19456,"src":"2544:19:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19451,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2544:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19454,"indexed":false,"mutability":"mutable","name":"newAdminFee","nameLocation":"2573:11:77","nodeType":"VariableDeclaration","scope":19456,"src":"2565:19:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19453,"name":"uint256","nodeType":"ElementaryTypeName","src":"2565:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2543:42:77"},"src":"2526:60:77"},{"anonymous":false,"eventSelector":"29aee3d14d18e1b8ace81481838ab2996fee9446a44336847d1d5c7fdf2471b1","id":19462,"name":"NewSwapFee","nameLocation":"2595:10:77","nodeType":"EventDefinition","parameters":{"id":19461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19458,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"2622:3:77","nodeType":"VariableDeclaration","scope":19462,"src":"2606:19:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19457,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2606:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19460,"indexed":false,"mutability":"mutable","name":"newSwapFee","nameLocation":"2635:10:77","nodeType":"VariableDeclaration","scope":19462,"src":"2627:18:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19459,"name":"uint256","nodeType":"ElementaryTypeName","src":"2627:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2605:41:77"},"src":"2589:58:77"},{"body":{"id":19476,"nodeType":"Block","src":"2877:104:77","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19467,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2887:5:77","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":19468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2893:9:77","memberName":"timestamp","nodeType":"MemberAccess","src":"2887:15:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":19469,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19465,"src":"2905:8:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2887:26:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19474,"nodeType":"IfStatement","src":"2883:86:77","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19471,"name":"StableSwapFacet__deadlineCheck_deadlineNotMet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19373,"src":"2922:45:77","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":19472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2922:47:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19473,"nodeType":"RevertStatement","src":"2915:54:77"}},{"id":19475,"nodeType":"PlaceholderStatement","src":"2975:1:77"}]},"documentation":{"id":19463,"nodeType":"StructuredDocumentation","src":"2693:140:77","text":" @notice Modifier to check deadline against current timestamp\n @param deadline latest timestamp to accept this transaction"},"id":19477,"name":"deadlineCheck","nameLocation":"2845:13:77","nodeType":"ModifierDefinition","parameters":{"id":19466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19465,"mutability":"mutable","name":"deadline","nameLocation":"2867:8:77","nodeType":"VariableDeclaration","scope":19477,"src":"2859:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19464,"name":"uint256","nodeType":"ElementaryTypeName","src":"2859:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2858:18:77"},"src":"2836:145:77","virtual":false,"visibility":"internal"},{"body":{"id":19491,"nodeType":"Block","src":"3244:37:77","statements":[{"expression":{"baseExpression":{"expression":{"id":19486,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3257:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19487,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3259:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"3257:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19489,"indexExpression":{"id":19488,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19480,"src":"3272:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3257:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"functionReturnParameters":19485,"id":19490,"nodeType":"Return","src":"3250:26:77"}]},"documentation":{"id":19478,"nodeType":"StructuredDocumentation","src":"3031:127:77","text":" @notice Return Stable swap storage\n @param key Hash of the canonical id + domain\n @return SwapUtils.Swap"},"functionSelector":"2d91a515","id":19492,"implemented":true,"kind":"function","modifiers":[],"name":"getSwapStorage","nameLocation":"3170:14:77","nodeType":"FunctionDefinition","parameters":{"id":19481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19480,"mutability":"mutable","name":"key","nameLocation":"3193:3:77","nodeType":"VariableDeclaration","scope":19492,"src":"3185:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19479,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3185:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3184:13:77"},"returnParameters":{"id":19485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19484,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19492,"src":"3221:21:77","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_memory_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":19483,"nodeType":"UserDefinedTypeName","pathNode":{"id":19482,"name":"SwapUtils.Swap","nameLocations":["3221:9:77","3231:4:77"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"3221:14:77"},"referencedDeclaration":30786,"src":"3221:14:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"}],"src":"3220:23:77"},"scope":20020,"src":"3161:120:77","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":19509,"nodeType":"Block","src":"3483:54:77","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"expression":{"id":19502,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3504:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19503,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3506:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"3504:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19505,"indexExpression":{"id":19504,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19495,"src":"3519:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3504:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19506,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3524:7:77","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":30768,"src":"3504:27:77","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}],"id":19501,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3496:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19500,"name":"address","nodeType":"ElementaryTypeName","src":"3496:7:77","typeDescriptions":{}}},"id":19507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3496:36:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":19499,"id":19508,"nodeType":"Return","src":"3489:43:77"}]},"documentation":{"id":19493,"nodeType":"StructuredDocumentation","src":"3285:126:77","text":" @notice Return LP token for canonical Id\n @param key Hash of the canonical id + domain\n @return LPToken"},"functionSelector":"8b480b12","id":19510,"implemented":true,"kind":"function","modifiers":[],"name":"getSwapLPToken","nameLocation":"3423:14:77","nodeType":"FunctionDefinition","parameters":{"id":19496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19495,"mutability":"mutable","name":"key","nameLocation":"3446:3:77","nodeType":"VariableDeclaration","scope":19510,"src":"3438:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19494,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3438:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3437:13:77"},"returnParameters":{"id":19499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19498,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19510,"src":"3474:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19497,"name":"address","nodeType":"ElementaryTypeName","src":"3474:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3473:9:77"},"scope":20020,"src":"3414:123:77","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":19525,"nodeType":"Block","src":"3806:44:77","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":19518,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3819:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19519,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3821:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"3819:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19521,"indexExpression":{"id":19520,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19513,"src":"3834:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3819:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19522,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3839:4:77","memberName":"getA","nodeType":"MemberAccess","referencedDeclaration":27389,"src":"3819:24:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (uint256)"}},"id":19523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3819:26:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19517,"id":19524,"nodeType":"Return","src":"3812:33:77"}]},"documentation":{"id":19511,"nodeType":"StructuredDocumentation","src":"3541:199:77","text":" @notice Return A, the amplification coefficient * n ** (n - 1)\n @dev See the StableSwap paper for details\n @param key Hash of the canonical id + domain\n @return A parameter"},"functionSelector":"d251dc35","id":19526,"implemented":true,"kind":"function","modifiers":[],"name":"getSwapA","nameLocation":"3752:8:77","nodeType":"FunctionDefinition","parameters":{"id":19514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19513,"mutability":"mutable","name":"key","nameLocation":"3769:3:77","nodeType":"VariableDeclaration","scope":19526,"src":"3761:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19512,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3761:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3760:13:77"},"returnParameters":{"id":19517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19516,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19526,"src":"3797:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19515,"name":"uint256","nodeType":"ElementaryTypeName","src":"3797:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3796:9:77"},"scope":20020,"src":"3743:107:77","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":19541,"nodeType":"Block","src":"4132:51:77","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":19534,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"4145:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19535,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4147:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"4145:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19537,"indexExpression":{"id":19536,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19529,"src":"4160:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4145:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19538,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4165:11:77","memberName":"getAPrecise","nodeType":"MemberAccess","referencedDeclaration":27403,"src":"4145:31:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (uint256)"}},"id":19539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4145:33:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19533,"id":19540,"nodeType":"Return","src":"4138:40:77"}]},"documentation":{"id":19527,"nodeType":"StructuredDocumentation","src":"3854:205:77","text":" @notice Return A in its raw precision form\n @dev See the StableSwap paper for details\n @param key Hash of the canonical id + domain\n @return A parameter in its raw precision form"},"functionSelector":"7652f59d","id":19542,"implemented":true,"kind":"function","modifiers":[],"name":"getSwapAPrecise","nameLocation":"4071:15:77","nodeType":"FunctionDefinition","parameters":{"id":19530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19529,"mutability":"mutable","name":"key","nameLocation":"4095:3:77","nodeType":"VariableDeclaration","scope":19542,"src":"4087:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19528,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4087:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4086:13:77"},"returnParameters":{"id":19533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19532,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19542,"src":"4123:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19531,"name":"uint256","nodeType":"ElementaryTypeName","src":"4123:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4122:9:77"},"scope":20020,"src":"4062:121:77","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":19573,"nodeType":"Block","src":"4519:166:77","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19553,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19547,"src":"4529:5:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"expression":{"baseExpression":{"expression":{"id":19554,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"4538:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19555,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4540:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"4538:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19557,"indexExpression":{"id":19556,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19545,"src":"4553:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4538:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19558,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4558:12:77","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"4538:32:77","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":19559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4571:6:77","memberName":"length","nodeType":"MemberAccess","src":"4538:39:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4529:48:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19564,"nodeType":"IfStatement","src":"4525:103:77","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19561,"name":"StableSwapFacet__getSwapToken_outOfRange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19375,"src":"4586:40:77","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":19562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4586:42:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19563,"nodeType":"RevertStatement","src":"4579:49:77"}},{"expression":{"baseExpression":{"expression":{"baseExpression":{"expression":{"id":19565,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"4641:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19566,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4643:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"4641:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19568,"indexExpression":{"id":19567,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19545,"src":"4656:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4641:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19569,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4661:12:77","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"4641:32:77","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":19571,"indexExpression":{"id":19570,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19547,"src":"4674:5:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4641:39:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"functionReturnParameters":19552,"id":19572,"nodeType":"Return","src":"4634:46:77"}]},"documentation":{"id":19543,"nodeType":"StructuredDocumentation","src":"4187:252:77","text":" @notice Return address of the pooled token at given index. Reverts if tokenIndex is out of range.\n @param key Hash of the canonical id + domain\n @param index the index of the token\n @return address of the token at given index"},"functionSelector":"b3a4eab4","id":19574,"implemented":true,"kind":"function","modifiers":[],"name":"getSwapToken","nameLocation":"4451:12:77","nodeType":"FunctionDefinition","parameters":{"id":19548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19545,"mutability":"mutable","name":"key","nameLocation":"4472:3:77","nodeType":"VariableDeclaration","scope":19574,"src":"4464:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19544,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4464:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19547,"mutability":"mutable","name":"index","nameLocation":"4483:5:77","nodeType":"VariableDeclaration","scope":19574,"src":"4477:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":19546,"name":"uint8","nodeType":"ElementaryTypeName","src":"4477:5:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"4463:26:77"},"returnParameters":{"id":19552,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19551,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19574,"src":"4511:6:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":19550,"nodeType":"UserDefinedTypeName","pathNode":{"id":19549,"name":"IERC20","nameLocations":["4511:6:77"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"4511:6:77"},"referencedDeclaration":10812,"src":"4511:6:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"4510:8:77"},"scope":20020,"src":"4442:243:77","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":19608,"nodeType":"Block","src":"5039:189:77","statements":[{"assignments":[19585],"declarations":[{"constant":false,"id":19585,"mutability":"mutable","name":"index","nameLocation":"5051:5:77","nodeType":"VariableDeclaration","scope":19608,"src":"5045:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":19584,"name":"uint8","nodeType":"ElementaryTypeName","src":"5045:5:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":19592,"initialValue":{"baseExpression":{"baseExpression":{"expression":{"id":19586,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"5059:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19587,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5061:12:77","memberName":"tokenIndexes","nodeType":"MemberAccess","referencedDeclaration":29504,"src":"5059:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_uint8_$_$","typeString":"mapping(bytes32 => mapping(address => uint8))"}},"id":19589,"indexExpression":{"id":19588,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19577,"src":"5074:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5059:19:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":19591,"indexExpression":{"id":19590,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19579,"src":"5079:12:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5059:33:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"5045:47:77"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":19596,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19577,"src":"5123:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":19597,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19585,"src":"5128:5:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":19595,"name":"getSwapToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19574,"src":"5110:12:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_uint8_$returns$_t_contract$_IERC20_$10812_$","typeString":"function (bytes32,uint8) view returns (contract IERC20)"}},"id":19598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5110:24:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":19594,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5102:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19593,"name":"address","nodeType":"ElementaryTypeName","src":"5102:7:77","typeDescriptions":{}}},"id":19599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5102:33:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":19600,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19579,"src":"5139:12:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5102:49:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19605,"nodeType":"IfStatement","src":"5098:107:77","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19602,"name":"StableSwapFacet__getSwapTokenIndex_notExist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19377,"src":"5160:43:77","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":19603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5160:45:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19604,"nodeType":"RevertStatement","src":"5153:52:77"}},{"expression":{"id":19606,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19585,"src":"5218:5:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":19583,"id":19607,"nodeType":"Return","src":"5211:12:77"}]},"documentation":{"id":19575,"nodeType":"StructuredDocumentation","src":"4689:257:77","text":" @notice Return the index of the given token address. Reverts if no matching\n token is found.\n @param key Hash of the canonical id + domain\n @param tokenAddress address of the token\n @return the index of the given token address"},"functionSelector":"ad94911b","id":19609,"implemented":true,"kind":"function","modifiers":[],"name":"getSwapTokenIndex","nameLocation":"4958:17:77","nodeType":"FunctionDefinition","parameters":{"id":19580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19577,"mutability":"mutable","name":"key","nameLocation":"4984:3:77","nodeType":"VariableDeclaration","scope":19609,"src":"4976:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19576,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4976:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19579,"mutability":"mutable","name":"tokenAddress","nameLocation":"4997:12:77","nodeType":"VariableDeclaration","scope":19609,"src":"4989:20:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19578,"name":"address","nodeType":"ElementaryTypeName","src":"4989:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4975:35:77"},"returnParameters":{"id":19583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19582,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19609,"src":"5032:5:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":19581,"name":"uint8","nodeType":"ElementaryTypeName","src":"5032:5:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"5031:7:77"},"scope":20020,"src":"4949:279:77","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":19639,"nodeType":"Block","src":"5587:170:77","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19619,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19614,"src":"5597:5:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"expression":{"baseExpression":{"expression":{"id":19620,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"5606:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19621,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5608:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"5606:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19623,"indexExpression":{"id":19622,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19612,"src":"5621:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5606:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19624,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5626:8:77","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"5606:28:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":19625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5635:6:77","memberName":"length","nodeType":"MemberAccess","src":"5606:35:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5597:44:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19630,"nodeType":"IfStatement","src":"5593:111:77","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19627,"name":"StableSwapFacet__getSwapTokenBalance_indexOutOfRange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19379,"src":"5650:52:77","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":19628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5650:54:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19629,"nodeType":"RevertStatement","src":"5643:61:77"}},{"expression":{"baseExpression":{"expression":{"baseExpression":{"expression":{"id":19631,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"5717:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19632,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5719:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"5717:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19634,"indexExpression":{"id":19633,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19612,"src":"5732:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5717:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19635,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5737:8:77","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"5717:28:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":19637,"indexExpression":{"id":19636,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19614,"src":"5746:5:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5717:35:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19618,"id":19638,"nodeType":"Return","src":"5710:42:77"}]},"documentation":{"id":19610,"nodeType":"StructuredDocumentation","src":"5232:265:77","text":" @notice Return current balance of the pooled token at given index\n @param key Hash of the canonical id + domain\n @param index the index of the token\n @return current balance of the pooled token at given index with token's native precision"},"functionSelector":"bb0577eb","id":19640,"implemented":true,"kind":"function","modifiers":[],"name":"getSwapTokenBalance","nameLocation":"5509:19:77","nodeType":"FunctionDefinition","parameters":{"id":19615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19612,"mutability":"mutable","name":"key","nameLocation":"5537:3:77","nodeType":"VariableDeclaration","scope":19640,"src":"5529:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19611,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5529:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19614,"mutability":"mutable","name":"index","nameLocation":"5548:5:77","nodeType":"VariableDeclaration","scope":19640,"src":"5542:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":19613,"name":"uint8","nodeType":"ElementaryTypeName","src":"5542:5:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"5528:26:77"},"returnParameters":{"id":19618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19617,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19640,"src":"5578:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19616,"name":"uint256","nodeType":"ElementaryTypeName","src":"5578:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5577:9:77"},"scope":20020,"src":"5500:257:77","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":19655,"nodeType":"Block","src":"6028:55:77","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":19648,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"6041:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19649,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6043:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"6041:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19651,"indexExpression":{"id":19650,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19643,"src":"6056:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6041:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19652,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6061:15:77","memberName":"getVirtualPrice","nodeType":"MemberAccess","referencedDeclaration":31599,"src":"6041:35:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (uint256)"}},"id":19653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6041:37:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19647,"id":19654,"nodeType":"Return","src":"6034:44:77"}]},"documentation":{"id":19641,"nodeType":"StructuredDocumentation","src":"5761:190:77","text":" @notice Get the virtual price, to help calculate profit\n @param key Hash of the canonical id + domain\n @return the virtual price, scaled to the POOL_PRECISION_DECIMALS"},"functionSelector":"f495e807","id":19656,"implemented":true,"kind":"function","modifiers":[],"name":"getSwapVirtualPrice","nameLocation":"5963:19:77","nodeType":"FunctionDefinition","parameters":{"id":19644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19643,"mutability":"mutable","name":"key","nameLocation":"5991:3:77","nodeType":"VariableDeclaration","scope":19656,"src":"5983:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19642,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5983:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5982:13:77"},"returnParameters":{"id":19647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19646,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19656,"src":"6019:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19645,"name":"uint256","nodeType":"ElementaryTypeName","src":"6019:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6018:9:77"},"scope":20020,"src":"5954:129:77","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":19680,"nodeType":"Block","src":"6678:85:77","statements":[{"expression":{"arguments":[{"id":19675,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19661,"src":"6725:14:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":19676,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19663,"src":"6741:12:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":19677,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19665,"src":"6755:2:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"expression":{"id":19670,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"6691:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19671,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6693:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"6691:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19673,"indexExpression":{"id":19672,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19659,"src":"6706:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6691:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19674,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6711:13:77","memberName":"calculateSwap","nodeType":"MemberAccess","referencedDeclaration":31829,"src":"6691:33:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint8,uint8,uint256) view returns (uint256)"}},"id":19678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6691:67:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19669,"id":19679,"nodeType":"Return","src":"6684:74:77"}]},"documentation":{"id":19657,"nodeType":"StructuredDocumentation","src":"6087:446:77","text":" @notice Calculate amount of tokens you receive on swap\n @param key Hash of the canonical id + domain\n @param tokenIndexFrom the token the user wants to sell\n @param tokenIndexTo the token the user wants to buy\n @param dx the amount of tokens the user wants to sell. If the token charges\n a fee on transfers, use the amount that gets transferred after the fee.\n @return amount of tokens the user will receive"},"functionSelector":"8f11d27f","id":19681,"implemented":true,"kind":"function","modifiers":[],"name":"calculateSwap","nameLocation":"6545:13:77","nodeType":"FunctionDefinition","parameters":{"id":19666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19659,"mutability":"mutable","name":"key","nameLocation":"6572:3:77","nodeType":"VariableDeclaration","scope":19681,"src":"6564:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19658,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6564:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19661,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"6587:14:77","nodeType":"VariableDeclaration","scope":19681,"src":"6581:20:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":19660,"name":"uint8","nodeType":"ElementaryTypeName","src":"6581:5:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":19663,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"6613:12:77","nodeType":"VariableDeclaration","scope":19681,"src":"6607:18:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":19662,"name":"uint8","nodeType":"ElementaryTypeName","src":"6607:5:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":19665,"mutability":"mutable","name":"dx","nameLocation":"6639:2:77","nodeType":"VariableDeclaration","scope":19681,"src":"6631:10:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19664,"name":"uint256","nodeType":"ElementaryTypeName","src":"6631:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6558:87:77"},"returnParameters":{"id":19669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19668,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19681,"src":"6669:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19667,"name":"uint256","nodeType":"ElementaryTypeName","src":"6669:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6668:9:77"},"scope":20020,"src":"6536:227:77","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":19703,"nodeType":"Block","src":"7655:76:77","statements":[{"expression":{"arguments":[{"id":19699,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19687,"src":"7709:7:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},{"id":19700,"name":"deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19689,"src":"7718:7:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"baseExpression":{"expression":{"id":19694,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"7668:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19695,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7670:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"7668:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19697,"indexExpression":{"id":19696,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19684,"src":"7683:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7668:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19698,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7688:20:77","memberName":"calculateTokenAmount","nodeType":"MemberAccess","referencedDeclaration":32322,"src":"7668:40:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$_t_array$_t_uint256_$dyn_calldata_ptr_$_t_bool_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint256[] calldata,bool) view returns (uint256)"}},"id":19701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7668:58:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19693,"id":19702,"nodeType":"Return","src":"7661:65:77"}]},"documentation":{"id":19682,"nodeType":"StructuredDocumentation","src":"6767:748:77","text":" @notice A simple method to calculate prices from deposits or\n withdrawals, excluding fees but including slippage. This is\n helpful as an input into the various \"min\" parameters on calls\n to fight front-running\n @dev This shouldn't be used outside frontends for user estimates.\n @param key Hash of the canonical id + domain\n @param amounts an array of token amounts to deposit or withdrawal,\n corresponding to pooledTokens. The amount should be in each\n pooled token's native precision. If a token charges a fee on transfers,\n use the amount that gets transferred after the fee.\n @param deposit whether this is a deposit or a withdrawal\n @return token amount the user will receive"},"functionSelector":"76ca2e52","id":19704,"implemented":true,"kind":"function","modifiers":[],"name":"calculateSwapTokenAmount","nameLocation":"7527:24:77","nodeType":"FunctionDefinition","parameters":{"id":19690,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19684,"mutability":"mutable","name":"key","nameLocation":"7565:3:77","nodeType":"VariableDeclaration","scope":19704,"src":"7557:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19683,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7557:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19687,"mutability":"mutable","name":"amounts","nameLocation":"7593:7:77","nodeType":"VariableDeclaration","scope":19704,"src":"7574:26:77","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":19685,"name":"uint256","nodeType":"ElementaryTypeName","src":"7574:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19686,"nodeType":"ArrayTypeName","src":"7574:9:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":19689,"mutability":"mutable","name":"deposit","nameLocation":"7611:7:77","nodeType":"VariableDeclaration","scope":19704,"src":"7606:12:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19688,"name":"bool","nodeType":"ElementaryTypeName","src":"7606:4:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7551:71:77"},"returnParameters":{"id":19693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19692,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19704,"src":"7646:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19691,"name":"uint256","nodeType":"ElementaryTypeName","src":"7646:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7645:9:77"},"scope":20020,"src":"7518:213:77","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":19723,"nodeType":"Block","src":"8183:70:77","statements":[{"expression":{"arguments":[{"id":19720,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19709,"src":"8241:6:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"expression":{"id":19715,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8196:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19716,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8198:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"8196:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19718,"indexExpression":{"id":19717,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19707,"src":"8211:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8196:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19719,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8216:24:77","memberName":"calculateRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":32117,"src":"8196:44:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint256) view returns (uint256[] memory)"}},"id":19721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8196:52:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":19714,"id":19722,"nodeType":"Return","src":"8189:59:77"}]},"documentation":{"id":19705,"nodeType":"StructuredDocumentation","src":"7735:337:77","text":" @notice A simple method to calculate amount of each underlying\n tokens that is returned upon burning given amount of LP tokens\n @param key Hash of the canonical id + domain\n @param amount the amount of LP tokens that would be burned on withdrawal\n @return array of token balances that the user will receive"},"functionSelector":"a02288f4","id":19724,"implemented":true,"kind":"function","modifiers":[],"name":"calculateRemoveSwapLiquidity","nameLocation":"8084:28:77","nodeType":"FunctionDefinition","parameters":{"id":19710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19707,"mutability":"mutable","name":"key","nameLocation":"8121:3:77","nodeType":"VariableDeclaration","scope":19724,"src":"8113:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19706,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8113:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19709,"mutability":"mutable","name":"amount","nameLocation":"8134:6:77","nodeType":"VariableDeclaration","scope":19724,"src":"8126:14:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19708,"name":"uint256","nodeType":"ElementaryTypeName","src":"8126:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8112:29:77"},"returnParameters":{"id":19714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19713,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19724,"src":"8165:16:77","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":19711,"name":"uint256","nodeType":"ElementaryTypeName","src":"8165:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19712,"nodeType":"ArrayTypeName","src":"8165:9:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8164:18:77"},"scope":20020,"src":"8075:178:77","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":19745,"nodeType":"Block","src":"8822:88:77","statements":[{"expression":{"arguments":[{"id":19741,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19729,"src":"8881:11:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19742,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19731,"src":"8894:10:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"baseExpression":{"expression":{"id":19736,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8835:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19737,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8837:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"8835:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19739,"indexExpression":{"id":19738,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19727,"src":"8850:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8835:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19740,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8855:25:77","memberName":"calculateWithdrawOneToken","nodeType":"MemberAccess","referencedDeclaration":30859,"src":"8835:45:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$_t_uint256_$_t_uint8_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint256,uint8) view returns (uint256)"}},"id":19743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8835:70:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19735,"id":19744,"nodeType":"Return","src":"8828:77:77"}]},"documentation":{"id":19725,"nodeType":"StructuredDocumentation","src":"8257:395:77","text":" @notice Calculate the amount of underlying token available to withdraw\n when withdrawing via only single token\n @param key Hash of the canonical id + domain\n @param tokenAmount the amount of LP token to burn\n @param tokenIndex index of which token will be withdrawn\n @return availableTokenAmount calculated amount of underlying token\n available to withdraw"},"functionSelector":"29d99b10","id":19746,"implemented":true,"kind":"function","modifiers":[],"name":"calculateRemoveSwapLiquidityOneToken","nameLocation":"8664:36:77","nodeType":"FunctionDefinition","parameters":{"id":19732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19727,"mutability":"mutable","name":"key","nameLocation":"8714:3:77","nodeType":"VariableDeclaration","scope":19746,"src":"8706:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19726,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8706:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19729,"mutability":"mutable","name":"tokenAmount","nameLocation":"8731:11:77","nodeType":"VariableDeclaration","scope":19746,"src":"8723:19:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19728,"name":"uint256","nodeType":"ElementaryTypeName","src":"8723:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19731,"mutability":"mutable","name":"tokenIndex","nameLocation":"8754:10:77","nodeType":"VariableDeclaration","scope":19746,"src":"8748:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":19730,"name":"uint8","nodeType":"ElementaryTypeName","src":"8748:5:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"8700:68:77"},"returnParameters":{"id":19735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19734,"mutability":"mutable","name":"availableTokenAmount","nameLocation":"8800:20:77","nodeType":"VariableDeclaration","scope":19746,"src":"8792:28:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19733,"name":"uint256","nodeType":"ElementaryTypeName","src":"8792:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8791:30:77"},"scope":20020,"src":"8655:255:77","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":19764,"nodeType":"Block","src":"9269:60:77","statements":[{"expression":{"arguments":[{"id":19761,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19751,"src":"9318:5:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"expression":{"id":19756,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9282:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19757,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9284:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"9282:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19759,"indexExpression":{"id":19758,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19749,"src":"9297:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9282:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19760,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9302:15:77","memberName":"getAdminBalance","nodeType":"MemberAccess","referencedDeclaration":32348,"src":"9282:35:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint256) view returns (uint256)"}},"id":19762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9282:42:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19755,"id":19763,"nodeType":"Return","src":"9275:49:77"}]},"documentation":{"id":19747,"nodeType":"StructuredDocumentation","src":"8914:263:77","text":" @notice This function reads the accumulated amount of admin fees of the token with given index\n @param key Hash of the canonical id + domain\n @param index Index of the pooled token\n @return admin's token balance in the token's precision"},"functionSelector":"1301caa2","id":19765,"implemented":true,"kind":"function","modifiers":[],"name":"getSwapAdminBalance","nameLocation":"9189:19:77","nodeType":"FunctionDefinition","parameters":{"id":19752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19749,"mutability":"mutable","name":"key","nameLocation":"9217:3:77","nodeType":"VariableDeclaration","scope":19765,"src":"9209:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19748,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9209:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19751,"mutability":"mutable","name":"index","nameLocation":"9230:5:77","nodeType":"VariableDeclaration","scope":19765,"src":"9222:13:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19750,"name":"uint256","nodeType":"ElementaryTypeName","src":"9222:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9208:28:77"},"returnParameters":{"id":19755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19754,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19765,"src":"9260:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19753,"name":"uint256","nodeType":"ElementaryTypeName","src":"9260:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9259:9:77"},"scope":20020,"src":"9180:149:77","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":19801,"nodeType":"Block","src":"10030:83:77","statements":[{"expression":{"arguments":[{"id":19795,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19770,"src":"10068:14:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":19796,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19772,"src":"10084:12:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":19797,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19774,"src":"10098:2:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19798,"name":"minDy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19776,"src":"10102:5:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"expression":{"id":19790,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10043:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19791,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10045:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"10043:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19793,"indexExpression":{"id":19792,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19768,"src":"10058:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10043:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19794,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10063:4:77","memberName":"swap","nodeType":"MemberAccess","referencedDeclaration":32548,"src":"10043:24:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Swap_$30786_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint8,uint8,uint256,uint256) returns (uint256)"}},"id":19799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10043:65:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19789,"id":19800,"nodeType":"Return","src":"10036:72:77"}]},"documentation":{"id":19766,"nodeType":"StructuredDocumentation","src":"9372:435:77","text":" @notice Swap two tokens using this pool\n @param key Hash of the canonical id + domain\n @param tokenIndexFrom the token the user wants to swap from\n @param tokenIndexTo the token the user wants to swap to\n @param dx the amount of tokens the user wants to swap from\n @param minDy the min amount the user would like to receive, or revert.\n @param deadline latest timestamp to accept this transaction"},"functionSelector":"ff126de9","id":19802,"implemented":true,"kind":"function","modifiers":[{"id":19781,"kind":"modifierInvocation","modifierName":{"id":19780,"name":"nonReentrant","nameLocations":["9961:12:77"],"nodeType":"IdentifierPath","referencedDeclaration":13774,"src":"9961:12:77"},"nodeType":"ModifierInvocation","src":"9961:12:77"},{"arguments":[{"id":19783,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19778,"src":"9988:8:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19784,"kind":"modifierInvocation","modifierName":{"id":19782,"name":"deadlineCheck","nameLocations":["9974:13:77"],"nodeType":"IdentifierPath","referencedDeclaration":19477,"src":"9974:13:77"},"nodeType":"ModifierInvocation","src":"9974:23:77"},{"id":19786,"kind":"modifierInvocation","modifierName":{"id":19785,"name":"whenNotPaused","nameLocations":["9998:13:77"],"nodeType":"IdentifierPath","referencedDeclaration":13913,"src":"9998:13:77"},"nodeType":"ModifierInvocation","src":"9998:13:77"}],"name":"swap","nameLocation":"9819:4:77","nodeType":"FunctionDefinition","parameters":{"id":19779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19768,"mutability":"mutable","name":"key","nameLocation":"9837:3:77","nodeType":"VariableDeclaration","scope":19802,"src":"9829:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19767,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9829:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19770,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"9852:14:77","nodeType":"VariableDeclaration","scope":19802,"src":"9846:20:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":19769,"name":"uint8","nodeType":"ElementaryTypeName","src":"9846:5:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":19772,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"9878:12:77","nodeType":"VariableDeclaration","scope":19802,"src":"9872:18:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":19771,"name":"uint8","nodeType":"ElementaryTypeName","src":"9872:5:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":19774,"mutability":"mutable","name":"dx","nameLocation":"9904:2:77","nodeType":"VariableDeclaration","scope":19802,"src":"9896:10:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19773,"name":"uint256","nodeType":"ElementaryTypeName","src":"9896:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19776,"mutability":"mutable","name":"minDy","nameLocation":"9920:5:77","nodeType":"VariableDeclaration","scope":19802,"src":"9912:13:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19775,"name":"uint256","nodeType":"ElementaryTypeName","src":"9912:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19778,"mutability":"mutable","name":"deadline","nameLocation":"9939:8:77","nodeType":"VariableDeclaration","scope":19802,"src":"9931:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19777,"name":"uint256","nodeType":"ElementaryTypeName","src":"9931:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9823:128:77"},"returnParameters":{"id":19789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19788,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19802,"src":"10021:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19787,"name":"uint256","nodeType":"ElementaryTypeName","src":"10021:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10020:9:77"},"scope":20020,"src":"9810:303:77","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":19844,"nodeType":"Block","src":"10640:179:77","statements":[{"expression":{"arguments":[{"arguments":[{"id":19833,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19805,"src":"10711:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":19834,"name":"assetIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19809,"src":"10716:7:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":19832,"name":"getSwapTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19609,"src":"10693:17:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_uint8_$","typeString":"function (bytes32,address) view returns (uint8)"}},"id":19835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10693:31:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[{"id":19837,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19805,"src":"10752:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":19838,"name":"assetOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19811,"src":"10757:8:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":19836,"name":"getSwapTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19609,"src":"10734:17:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_uint8_$","typeString":"function (bytes32,address) view returns (uint8)"}},"id":19839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10734:32:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":19840,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19807,"src":"10776:8:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19841,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19813,"src":"10794:12:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"expression":{"id":19827,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10659:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19828,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10661:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"10659:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19830,"indexExpression":{"id":19829,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19805,"src":"10674:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10659:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19831,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10679:4:77","memberName":"swap","nodeType":"MemberAccess","referencedDeclaration":32548,"src":"10659:24:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Swap_$30786_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint8,uint8,uint256,uint256) returns (uint256)"}},"id":19842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10659:155:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19826,"id":19843,"nodeType":"Return","src":"10646:168:77"}]},"documentation":{"id":19803,"nodeType":"StructuredDocumentation","src":"10117:289:77","text":" @notice Swap two tokens using this pool\n @param key Hash of the canonical id + domain\n @param assetIn the token the user wants to swap from\n @param assetOut the token the user wants to swap to\n @param amountIn the amount of tokens the user wants to swap from"},"functionSelector":"80b297e8","id":19845,"implemented":true,"kind":"function","modifiers":[{"id":19818,"kind":"modifierInvocation","modifierName":{"id":19817,"name":"nonReentrant","nameLocations":["10571:12:77"],"nodeType":"IdentifierPath","referencedDeclaration":13774,"src":"10571:12:77"},"nodeType":"ModifierInvocation","src":"10571:12:77"},{"arguments":[{"id":19820,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19815,"src":"10598:8:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19821,"kind":"modifierInvocation","modifierName":{"id":19819,"name":"deadlineCheck","nameLocations":["10584:13:77"],"nodeType":"IdentifierPath","referencedDeclaration":19477,"src":"10584:13:77"},"nodeType":"ModifierInvocation","src":"10584:23:77"},{"id":19823,"kind":"modifierInvocation","modifierName":{"id":19822,"name":"whenNotPaused","nameLocations":["10608:13:77"],"nodeType":"IdentifierPath","referencedDeclaration":13913,"src":"10608:13:77"},"nodeType":"ModifierInvocation","src":"10608:13:77"}],"name":"swapExact","nameLocation":"10418:9:77","nodeType":"FunctionDefinition","parameters":{"id":19816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19805,"mutability":"mutable","name":"key","nameLocation":"10441:3:77","nodeType":"VariableDeclaration","scope":19845,"src":"10433:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19804,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10433:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19807,"mutability":"mutable","name":"amountIn","nameLocation":"10458:8:77","nodeType":"VariableDeclaration","scope":19845,"src":"10450:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19806,"name":"uint256","nodeType":"ElementaryTypeName","src":"10450:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19809,"mutability":"mutable","name":"assetIn","nameLocation":"10480:7:77","nodeType":"VariableDeclaration","scope":19845,"src":"10472:15:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19808,"name":"address","nodeType":"ElementaryTypeName","src":"10472:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19811,"mutability":"mutable","name":"assetOut","nameLocation":"10501:8:77","nodeType":"VariableDeclaration","scope":19845,"src":"10493:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19810,"name":"address","nodeType":"ElementaryTypeName","src":"10493:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19813,"mutability":"mutable","name":"minAmountOut","nameLocation":"10523:12:77","nodeType":"VariableDeclaration","scope":19845,"src":"10515:20:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19812,"name":"uint256","nodeType":"ElementaryTypeName","src":"10515:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19815,"mutability":"mutable","name":"deadline","nameLocation":"10549:8:77","nodeType":"VariableDeclaration","scope":19845,"src":"10541:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19814,"name":"uint256","nodeType":"ElementaryTypeName","src":"10541:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10427:134:77"},"returnParameters":{"id":19826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19825,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19845,"src":"10631:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19824,"name":"uint256","nodeType":"ElementaryTypeName","src":"10631:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10630:9:77"},"scope":20020,"src":"10409:410:77","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":19887,"nodeType":"Block","src":"11348:182:77","statements":[{"expression":{"arguments":[{"arguments":[{"id":19876,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19848,"src":"11422:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":19877,"name":"assetIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19852,"src":"11427:7:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":19875,"name":"getSwapTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19609,"src":"11404:17:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_uint8_$","typeString":"function (bytes32,address) view returns (uint8)"}},"id":19878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11404:31:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[{"id":19880,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19848,"src":"11463:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":19881,"name":"assetOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19854,"src":"11468:8:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":19879,"name":"getSwapTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19609,"src":"11445:17:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_uint8_$","typeString":"function (bytes32,address) view returns (uint8)"}},"id":19882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11445:32:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":19883,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19850,"src":"11487:9:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19884,"name":"maxAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19856,"src":"11506:11:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"expression":{"id":19870,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"11367:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19871,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11369:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"11367:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19873,"indexExpression":{"id":19872,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19848,"src":"11382:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11367:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19874,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11387:7:77","memberName":"swapOut","nodeType":"MemberAccess","referencedDeclaration":32734,"src":"11367:27:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Swap_$30786_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint8,uint8,uint256,uint256) returns (uint256)"}},"id":19885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11367:158:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19869,"id":19886,"nodeType":"Return","src":"11354:171:77"}]},"documentation":{"id":19846,"nodeType":"StructuredDocumentation","src":"10823:288:77","text":" @notice Swap two tokens using this pool\n @param key Hash of the canonical id + domain\n @param assetIn the token the user wants to swap from\n @param assetOut the token the user wants to swap to\n @param amountOut the amount of tokens the user wants to swap to"},"functionSelector":"74c6b89b","id":19888,"implemented":true,"kind":"function","modifiers":[{"id":19861,"kind":"modifierInvocation","modifierName":{"id":19860,"name":"nonReentrant","nameLocations":["11279:12:77"],"nodeType":"IdentifierPath","referencedDeclaration":13774,"src":"11279:12:77"},"nodeType":"ModifierInvocation","src":"11279:12:77"},{"arguments":[{"id":19863,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19858,"src":"11306:8:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19864,"kind":"modifierInvocation","modifierName":{"id":19862,"name":"deadlineCheck","nameLocations":["11292:13:77"],"nodeType":"IdentifierPath","referencedDeclaration":19477,"src":"11292:13:77"},"nodeType":"ModifierInvocation","src":"11292:23:77"},{"id":19866,"kind":"modifierInvocation","modifierName":{"id":19865,"name":"whenNotPaused","nameLocations":["11316:13:77"],"nodeType":"IdentifierPath","referencedDeclaration":13913,"src":"11316:13:77"},"nodeType":"ModifierInvocation","src":"11316:13:77"}],"name":"swapExactOut","nameLocation":"11123:12:77","nodeType":"FunctionDefinition","parameters":{"id":19859,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19848,"mutability":"mutable","name":"key","nameLocation":"11149:3:77","nodeType":"VariableDeclaration","scope":19888,"src":"11141:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19847,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11141:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19850,"mutability":"mutable","name":"amountOut","nameLocation":"11166:9:77","nodeType":"VariableDeclaration","scope":19888,"src":"11158:17:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19849,"name":"uint256","nodeType":"ElementaryTypeName","src":"11158:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19852,"mutability":"mutable","name":"assetIn","nameLocation":"11189:7:77","nodeType":"VariableDeclaration","scope":19888,"src":"11181:15:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19851,"name":"address","nodeType":"ElementaryTypeName","src":"11181:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19854,"mutability":"mutable","name":"assetOut","nameLocation":"11210:8:77","nodeType":"VariableDeclaration","scope":19888,"src":"11202:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19853,"name":"address","nodeType":"ElementaryTypeName","src":"11202:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19856,"mutability":"mutable","name":"maxAmountIn","nameLocation":"11232:11:77","nodeType":"VariableDeclaration","scope":19888,"src":"11224:19:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19855,"name":"uint256","nodeType":"ElementaryTypeName","src":"11224:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19858,"mutability":"mutable","name":"deadline","nameLocation":"11257:8:77","nodeType":"VariableDeclaration","scope":19888,"src":"11249:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19857,"name":"uint256","nodeType":"ElementaryTypeName","src":"11249:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11135:134:77"},"returnParameters":{"id":19869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19868,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19888,"src":"11339:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19867,"name":"uint256","nodeType":"ElementaryTypeName","src":"11339:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11338:9:77"},"scope":20020,"src":"11114:416:77","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":19919,"nodeType":"Block","src":"12219:70:77","statements":[{"expression":{"arguments":[{"id":19915,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19894,"src":"12265:7:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},{"id":19916,"name":"minToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19896,"src":"12274:9:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"expression":{"id":19910,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"12232:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19911,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12234:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"12232:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19913,"indexExpression":{"id":19912,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19891,"src":"12247:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12232:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19914,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12252:12:77","memberName":"addLiquidity","nodeType":"MemberAccess","referencedDeclaration":33413,"src":"12232:32:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Swap_$30786_storage_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint256[] memory,uint256) returns (uint256)"}},"id":19917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12232:52:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19909,"id":19918,"nodeType":"Return","src":"12225:59:77"}]},"documentation":{"id":19889,"nodeType":"StructuredDocumentation","src":"11534:480:77","text":" @notice Add liquidity to the pool with the given amounts of tokens\n @param key Hash of the canonical id + domain\n @param amounts the amounts of each token to add, in their native precision\n @param minToMint the minimum LP tokens adding this amount of liquidity\n should mint, otherwise revert. Handy for front-running mitigation\n @param deadline latest timestamp to accept this transaction\n @return amount of LP token user minted and received"},"functionSelector":"8d365457","id":19920,"implemented":true,"kind":"function","modifiers":[{"id":19901,"kind":"modifierInvocation","modifierName":{"id":19900,"name":"nonReentrant","nameLocations":["12150:12:77"],"nodeType":"IdentifierPath","referencedDeclaration":13774,"src":"12150:12:77"},"nodeType":"ModifierInvocation","src":"12150:12:77"},{"arguments":[{"id":19903,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19898,"src":"12177:8:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19904,"kind":"modifierInvocation","modifierName":{"id":19902,"name":"deadlineCheck","nameLocations":["12163:13:77"],"nodeType":"IdentifierPath","referencedDeclaration":19477,"src":"12163:13:77"},"nodeType":"ModifierInvocation","src":"12163:23:77"},{"id":19906,"kind":"modifierInvocation","modifierName":{"id":19905,"name":"whenNotPaused","nameLocations":["12187:13:77"],"nodeType":"IdentifierPath","referencedDeclaration":13913,"src":"12187:13:77"},"nodeType":"ModifierInvocation","src":"12187:13:77"}],"name":"addSwapLiquidity","nameLocation":"12026:16:77","nodeType":"FunctionDefinition","parameters":{"id":19899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19891,"mutability":"mutable","name":"key","nameLocation":"12056:3:77","nodeType":"VariableDeclaration","scope":19920,"src":"12048:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19890,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12048:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19894,"mutability":"mutable","name":"amounts","nameLocation":"12084:7:77","nodeType":"VariableDeclaration","scope":19920,"src":"12065:26:77","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":19892,"name":"uint256","nodeType":"ElementaryTypeName","src":"12065:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19893,"nodeType":"ArrayTypeName","src":"12065:9:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":19896,"mutability":"mutable","name":"minToMint","nameLocation":"12105:9:77","nodeType":"VariableDeclaration","scope":19920,"src":"12097:17:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19895,"name":"uint256","nodeType":"ElementaryTypeName","src":"12097:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19898,"mutability":"mutable","name":"deadline","nameLocation":"12128:8:77","nodeType":"VariableDeclaration","scope":19920,"src":"12120:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19897,"name":"uint256","nodeType":"ElementaryTypeName","src":"12120:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12042:98:77"},"returnParameters":{"id":19909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19908,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19920,"src":"12210:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19907,"name":"uint256","nodeType":"ElementaryTypeName","src":"12210:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12209:9:77"},"scope":20020,"src":"12017:272:77","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":19952,"nodeType":"Block","src":"13103:73:77","statements":[{"expression":{"arguments":[{"id":19948,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19925,"src":"13152:6:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19949,"name":"minAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19928,"src":"13160:10:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}],"expression":{"baseExpression":{"expression":{"id":19943,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"13116:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19944,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13118:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"13116:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19946,"indexExpression":{"id":19945,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19923,"src":"13131:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13116:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19947,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13136:15:77","memberName":"removeLiquidity","nodeType":"MemberAccess","referencedDeclaration":33565,"src":"13116:35:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Swap_$30786_storage_ptr_$_t_uint256_$_t_array$_t_uint256_$dyn_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint256,uint256[] calldata) returns (uint256[] memory)"}},"id":19950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13116:55:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":19942,"id":19951,"nodeType":"Return","src":"13109:62:77"}]},"documentation":{"id":19921,"nodeType":"StructuredDocumentation","src":"12293:593:77","text":" @notice Burn LP tokens to remove liquidity from the pool. Withdraw fee that decays linearly\n over period of 4 weeks since last deposit will apply.\n @dev Liquidity can always be removed, even when the pool is paused.\n @param key Hash of the canonical id + domain\n @param amount the amount of LP tokens to burn\n @param minAmounts the minimum amounts of each token in the pool\n        acceptable for this burn. Useful as a front-running mitigation\n @param deadline latest timestamp to accept this transaction\n @return amounts of tokens user received"},"functionSelector":"4bbcba8e","id":19953,"implemented":true,"kind":"function","modifiers":[{"id":19933,"kind":"modifierInvocation","modifierName":{"id":19932,"name":"nonReentrant","nameLocations":["13025:12:77"],"nodeType":"IdentifierPath","referencedDeclaration":13774,"src":"13025:12:77"},"nodeType":"ModifierInvocation","src":"13025:12:77"},{"arguments":[{"id":19935,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19930,"src":"13052:8:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19936,"kind":"modifierInvocation","modifierName":{"id":19934,"name":"deadlineCheck","nameLocations":["13038:13:77"],"nodeType":"IdentifierPath","referencedDeclaration":19477,"src":"13038:13:77"},"nodeType":"ModifierInvocation","src":"13038:23:77"},{"id":19938,"kind":"modifierInvocation","modifierName":{"id":19937,"name":"whenNotPaused","nameLocations":["13062:13:77"],"nodeType":"IdentifierPath","referencedDeclaration":13913,"src":"13062:13:77"},"nodeType":"ModifierInvocation","src":"13062:13:77"}],"name":"removeSwapLiquidity","nameLocation":"12898:19:77","nodeType":"FunctionDefinition","parameters":{"id":19931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19923,"mutability":"mutable","name":"key","nameLocation":"12931:3:77","nodeType":"VariableDeclaration","scope":19953,"src":"12923:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19922,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12923:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19925,"mutability":"mutable","name":"amount","nameLocation":"12948:6:77","nodeType":"VariableDeclaration","scope":19953,"src":"12940:14:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19924,"name":"uint256","nodeType":"ElementaryTypeName","src":"12940:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19928,"mutability":"mutable","name":"minAmounts","nameLocation":"12979:10:77","nodeType":"VariableDeclaration","scope":19953,"src":"12960:29:77","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":19926,"name":"uint256","nodeType":"ElementaryTypeName","src":"12960:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19927,"nodeType":"ArrayTypeName","src":"12960:9:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":19930,"mutability":"mutable","name":"deadline","nameLocation":"13003:8:77","nodeType":"VariableDeclaration","scope":19953,"src":"12995:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19929,"name":"uint256","nodeType":"ElementaryTypeName","src":"12995:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12917:98:77"},"returnParameters":{"id":19942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19941,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19953,"src":"13085:16:77","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":19939,"name":"uint256","nodeType":"ElementaryTypeName","src":"13085:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19940,"nodeType":"ArrayTypeName","src":"13085:9:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"13084:18:77"},"scope":20020,"src":"12889:287:77","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":19986,"nodeType":"Block","src":"13945:97:77","statements":[{"expression":{"arguments":[{"id":19981,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19958,"src":"14002:11:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19982,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19960,"src":"14015:10:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":19983,"name":"minAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19962,"src":"14027:9:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"expression":{"id":19976,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"13958:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":19977,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13960:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"13958:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":19979,"indexExpression":{"id":19978,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19956,"src":"13973:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13958:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":19980,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13978:23:77","memberName":"removeLiquidityOneToken","nodeType":"MemberAccess","referencedDeclaration":33716,"src":"13958:43:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Swap_$30786_storage_ptr_$_t_uint256_$_t_uint8_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint256,uint8,uint256) returns (uint256)"}},"id":19984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13958:79:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19975,"id":19985,"nodeType":"Return","src":"13951:86:77"}]},"documentation":{"id":19954,"nodeType":"StructuredDocumentation","src":"13180:534:77","text":" @notice Remove liquidity from the pool all in one token. Withdraw fee that decays linearly\n over period of 4 weeks since last deposit will apply.\n @param key Hash of the canonical id + domain\n @param tokenAmount the amount of the token you want to receive\n @param tokenIndex the index of the token you want to receive\n @param minAmount the minimum amount to withdraw, otherwise revert\n @param deadline latest timestamp to accept this transaction\n @return amount of chosen token user received"},"functionSelector":"b6618dff","id":19987,"implemented":true,"kind":"function","modifiers":[{"id":19967,"kind":"modifierInvocation","modifierName":{"id":19966,"name":"nonReentrant","nameLocations":["13876:12:77"],"nodeType":"IdentifierPath","referencedDeclaration":13774,"src":"13876:12:77"},"nodeType":"ModifierInvocation","src":"13876:12:77"},{"arguments":[{"id":19969,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19964,"src":"13903:8:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19970,"kind":"modifierInvocation","modifierName":{"id":19968,"name":"deadlineCheck","nameLocations":["13889:13:77"],"nodeType":"IdentifierPath","referencedDeclaration":19477,"src":"13889:13:77"},"nodeType":"ModifierInvocation","src":"13889:23:77"},{"id":19972,"kind":"modifierInvocation","modifierName":{"id":19971,"name":"whenNotPaused","nameLocations":["13913:13:77"],"nodeType":"IdentifierPath","referencedDeclaration":13913,"src":"13913:13:77"},"nodeType":"ModifierInvocation","src":"13913:13:77"}],"name":"removeSwapLiquidityOneToken","nameLocation":"13726:27:77","nodeType":"FunctionDefinition","parameters":{"id":19965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19956,"mutability":"mutable","name":"key","nameLocation":"13767:3:77","nodeType":"VariableDeclaration","scope":19987,"src":"13759:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19955,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13759:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19958,"mutability":"mutable","name":"tokenAmount","nameLocation":"13784:11:77","nodeType":"VariableDeclaration","scope":19987,"src":"13776:19:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19957,"name":"uint256","nodeType":"ElementaryTypeName","src":"13776:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19960,"mutability":"mutable","name":"tokenIndex","nameLocation":"13807:10:77","nodeType":"VariableDeclaration","scope":19987,"src":"13801:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":19959,"name":"uint8","nodeType":"ElementaryTypeName","src":"13801:5:77","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":19962,"mutability":"mutable","name":"minAmount","nameLocation":"13831:9:77","nodeType":"VariableDeclaration","scope":19987,"src":"13823:17:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19961,"name":"uint256","nodeType":"ElementaryTypeName","src":"13823:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19964,"mutability":"mutable","name":"deadline","nameLocation":"13854:8:77","nodeType":"VariableDeclaration","scope":19987,"src":"13846:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19963,"name":"uint256","nodeType":"ElementaryTypeName","src":"13846:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13753:113:77"},"returnParameters":{"id":19975,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19974,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19987,"src":"13936:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19973,"name":"uint256","nodeType":"ElementaryTypeName","src":"13936:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13935:9:77"},"scope":20020,"src":"13717:325:77","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20018,"nodeType":"Block","src":"14818:86:77","statements":[{"expression":{"arguments":[{"id":20014,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19993,"src":"14876:7:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},{"id":20015,"name":"maxBurnAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19995,"src":"14885:13:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"expression":{"id":20009,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"14831:1:77","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20010,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14833:12:77","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"14831:14:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20012,"indexExpression":{"id":20011,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19990,"src":"14846:3:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14831:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20013,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14851:24:77","memberName":"removeLiquidityImbalance","nodeType":"MemberAccess","referencedDeclaration":34094,"src":"14831:44:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Swap_$30786_storage_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint256[] memory,uint256) returns (uint256)"}},"id":20016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14831:68:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20008,"id":20017,"nodeType":"Return","src":"14824:75:77"}]},"documentation":{"id":19988,"nodeType":"StructuredDocumentation","src":"14046:551:77","text":" @notice Remove liquidity from the pool, weighted differently than the\n pool's current balances. Withdraw fee that decays linearly\n over period of 4 weeks since last deposit will apply.\n @param key Hash of the canonical id + domain\n @param amounts how much of each token to withdraw\n @param maxBurnAmount the max LP token provider is willing to pay to\n remove liquidity. Useful as a front-running mitigation.\n @param deadline latest timestamp to accept this transaction\n @return amount of LP tokens burned"},"functionSelector":"241ca57a","id":20019,"implemented":true,"kind":"function","modifiers":[{"id":20000,"kind":"modifierInvocation","modifierName":{"id":19999,"name":"nonReentrant","nameLocations":["14749:12:77"],"nodeType":"IdentifierPath","referencedDeclaration":13774,"src":"14749:12:77"},"nodeType":"ModifierInvocation","src":"14749:12:77"},{"arguments":[{"id":20002,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19997,"src":"14776:8:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20003,"kind":"modifierInvocation","modifierName":{"id":20001,"name":"deadlineCheck","nameLocations":["14762:13:77"],"nodeType":"IdentifierPath","referencedDeclaration":19477,"src":"14762:13:77"},"nodeType":"ModifierInvocation","src":"14762:23:77"},{"id":20005,"kind":"modifierInvocation","modifierName":{"id":20004,"name":"whenNotPaused","nameLocations":["14786:13:77"],"nodeType":"IdentifierPath","referencedDeclaration":13913,"src":"14786:13:77"},"nodeType":"ModifierInvocation","src":"14786:13:77"}],"name":"removeSwapLiquidityImbalance","nameLocation":"14609:28:77","nodeType":"FunctionDefinition","parameters":{"id":19998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19990,"mutability":"mutable","name":"key","nameLocation":"14651:3:77","nodeType":"VariableDeclaration","scope":20019,"src":"14643:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19989,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14643:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19993,"mutability":"mutable","name":"amounts","nameLocation":"14679:7:77","nodeType":"VariableDeclaration","scope":20019,"src":"14660:26:77","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":19991,"name":"uint256","nodeType":"ElementaryTypeName","src":"14660:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19992,"nodeType":"ArrayTypeName","src":"14660:9:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":19995,"mutability":"mutable","name":"maxBurnAmount","nameLocation":"14700:13:77","nodeType":"VariableDeclaration","scope":20019,"src":"14692:21:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19994,"name":"uint256","nodeType":"ElementaryTypeName","src":"14692:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19997,"mutability":"mutable","name":"deadline","nameLocation":"14727:8:77","nodeType":"VariableDeclaration","scope":20019,"src":"14719:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19996,"name":"uint256","nodeType":"ElementaryTypeName","src":"14719:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14637:102:77"},"returnParameters":{"id":20008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20007,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20019,"src":"14809:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20006,"name":"uint256","nodeType":"ElementaryTypeName","src":"14809:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14808:9:77"},"scope":20020,"src":"14600:304:77","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":20021,"src":"1194:13712:77","usedErrors":[13728,13730,13732,13734,13736,13738,13740,13742,13744,13746,19373,19375,19377,19379,27656,27658,27660]}],"src":"39:14868:77"},"id":77},"contracts/core/connext/facets/SwapAdminFacet.sol":{"ast":{"absolutePath":"contracts/core/connext/facets/SwapAdminFacet.sol","exportedSymbols":{"Address":[11484],"AmplificationUtils":[27626],"BaseConnextFacet":[14146],"Clones":[9871],"Constants":[29304],"IERC20":[10812],"LPToken":[23179],"SafeERC20":[11154],"SwapAdminFacet":[20837],"SwapUtils":[34244]},"id":20838,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":20022,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:78"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":20026,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20838,"sourceUnit":11155,"src":"64:99:78","symbolAliases":[{"foreign":{"id":20023,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10812,"src":"72:6:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":20024,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"80:7:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":20025,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11154,"src":"89:9:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/proxy/Clones.sol","file":"@openzeppelin/contracts/proxy/Clones.sol","id":20028,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20838,"sourceUnit":9872,"src":"165:64:78","symbolAliases":[{"foreign":{"id":20027,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9871,"src":"173:6:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/AmplificationUtils.sol","file":"../libraries/AmplificationUtils.sol","id":20031,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20838,"sourceUnit":27627,"src":"231:82:78","symbolAliases":[{"foreign":{"id":20029,"name":"AmplificationUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27626,"src":"239:18:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":20030,"name":"SwapUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34244,"src":"259:9:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/Constants.sol","file":"../libraries/Constants.sol","id":20033,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20838,"sourceUnit":29305,"src":"314:53:78","symbolAliases":[{"foreign":{"id":20032,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"322:9:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/helpers/LPToken.sol","file":"../helpers/LPToken.sol","id":20035,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20838,"sourceUnit":23180,"src":"369:47:78","symbolAliases":[{"foreign":{"id":20034,"name":"LPToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23179,"src":"377:7:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/facets/BaseConnextFacet.sol","file":"./BaseConnextFacet.sol","id":20037,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20838,"sourceUnit":14147,"src":"418:56:78","symbolAliases":[{"foreign":{"id":20036,"name":"BaseConnextFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14146,"src":"426:16:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":20039,"name":"BaseConnextFacet","nameLocations":["816:16:78"],"nodeType":"IdentifierPath","referencedDeclaration":14146,"src":"816:16:78"},"id":20040,"nodeType":"InheritanceSpecifier","src":"816:16:78"}],"canonicalName":"SwapAdminFacet","contractDependencies":[],"contractKind":"contract","documentation":{"id":20038,"nodeType":"StructuredDocumentation","src":"476:312:78","text":" @title SwapAdminFacet\n @notice Contract module which exposes only-admin controls for the StableSwapFacet\n contract.\n @dev This module is used through inheritance. It will make available the\n modifier `onlyOwner`, which can be applied to your functions to restrict\n their use to the owner."},"fullyImplemented":true,"id":20837,"linearizedBaseContracts":[20837,14146],"name":"SwapAdminFacet","nameLocation":"798:14:78","nodeType":"ContractDefinition","nodes":[{"global":false,"id":20044,"libraryName":{"id":20041,"name":"SafeERC20","nameLocations":["843:9:78"],"nodeType":"IdentifierPath","referencedDeclaration":11154,"src":"843:9:78"},"nodeType":"UsingForDirective","src":"837:27:78","typeName":{"id":20043,"nodeType":"UserDefinedTypeName","pathNode":{"id":20042,"name":"IERC20","nameLocations":["857:6:78"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"857:6:78"},"referencedDeclaration":10812,"src":"857:6:78","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}},{"global":false,"id":20048,"libraryName":{"id":20045,"name":"SwapUtils","nameLocations":["873:9:78"],"nodeType":"IdentifierPath","referencedDeclaration":34244,"src":"873:9:78"},"nodeType":"UsingForDirective","src":"867:35:78","typeName":{"id":20047,"nodeType":"UserDefinedTypeName","pathNode":{"id":20046,"name":"SwapUtils.Swap","nameLocations":["887:9:78","897:4:78"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"887:14:78"},"referencedDeclaration":30786,"src":"887:14:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}}},{"global":false,"id":20052,"libraryName":{"id":20049,"name":"AmplificationUtils","nameLocations":["911:18:78"],"nodeType":"IdentifierPath","referencedDeclaration":27626,"src":"911:18:78"},"nodeType":"UsingForDirective","src":"905:44:78","typeName":{"id":20051,"nodeType":"UserDefinedTypeName","pathNode":{"id":20050,"name":"SwapUtils.Swap","nameLocations":["934:9:78","944:4:78"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"934:14:78"},"referencedDeclaration":30786,"src":"934:14:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}}},{"errorSelector":"ed426d12","id":20054,"name":"SwapAdminFacet__initializeSwap_alreadyInitialized","nameLocation":"1001:49:78","nodeType":"ErrorDefinition","parameters":{"id":20053,"nodeType":"ParameterList","parameters":[],"src":"1050:2:78"},"src":"995:58:78"},{"errorSelector":"502ef3af","id":20056,"name":"SwapAdminFacet__initializeSwap_invalidPooledTokens","nameLocation":"1062:50:78","nodeType":"ErrorDefinition","parameters":{"id":20055,"nodeType":"ParameterList","parameters":[],"src":"1112:2:78"},"src":"1056:59:78"},{"errorSelector":"d6e48e5d","id":20058,"name":"SwapAdminFacet__initializeSwap_decimalsMismatch","nameLocation":"1124:47:78","nodeType":"ErrorDefinition","parameters":{"id":20057,"nodeType":"ParameterList","parameters":[],"src":"1171:2:78"},"src":"1118:56:78"},{"errorSelector":"5f53d276","id":20060,"name":"SwapAdminFacet__initializeSwap_duplicateTokens","nameLocation":"1183:46:78","nodeType":"ErrorDefinition","parameters":{"id":20059,"nodeType":"ParameterList","parameters":[],"src":"1229:2:78"},"src":"1177:55:78"},{"errorSelector":"99c30f5a","id":20062,"name":"SwapAdminFacet__initializeSwap_zeroTokenAddress","nameLocation":"1241:47:78","nodeType":"ErrorDefinition","parameters":{"id":20061,"nodeType":"ParameterList","parameters":[],"src":"1288:2:78"},"src":"1235:56:78"},{"errorSelector":"fa95b48a","id":20064,"name":"SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax","nameLocation":"1300:53:78","nodeType":"ErrorDefinition","parameters":{"id":20063,"nodeType":"ParameterList","parameters":[],"src":"1353:2:78"},"src":"1294:62:78"},{"errorSelector":"06aedbfd","id":20066,"name":"SwapAdminFacet__initializeSwap_aExceedMax","nameLocation":"1365:41:78","nodeType":"ErrorDefinition","parameters":{"id":20065,"nodeType":"ParameterList","parameters":[],"src":"1406:2:78"},"src":"1359:50:78"},{"errorSelector":"9f8442fa","id":20068,"name":"SwapAdminFacet__initializeSwap_feeExceedMax","nameLocation":"1418:43:78","nodeType":"ErrorDefinition","parameters":{"id":20067,"nodeType":"ParameterList","parameters":[],"src":"1461:2:78"},"src":"1412:52:78"},{"errorSelector":"84b9a37f","id":20070,"name":"SwapAdminFacet__initializeSwap_adminFeeExceedMax","nameLocation":"1473:48:78","nodeType":"ErrorDefinition","parameters":{"id":20069,"nodeType":"ParameterList","parameters":[],"src":"1521:2:78"},"src":"1467:57:78"},{"errorSelector":"276cd8b9","id":20072,"name":"SwapAdminFacet__initializeSwap_failedInitLpTokenClone","nameLocation":"1533:53:78","nodeType":"ErrorDefinition","parameters":{"id":20071,"nodeType":"ParameterList","parameters":[],"src":"1586:2:78"},"src":"1527:62:78"},{"errorSelector":"36cd02a4","id":20074,"name":"SwapAdminFacet__updateLpTokenTarget_invalidNewAddress","nameLocation":"1598:53:78","nodeType":"ErrorDefinition","parameters":{"id":20073,"nodeType":"ParameterList","parameters":[],"src":"1651:2:78"},"src":"1592:62:78"},{"errorSelector":"bd31871a","id":20076,"name":"SwapAdminFacet__removeSwap_notInitialized","nameLocation":"1663:41:78","nodeType":"ErrorDefinition","parameters":{"id":20075,"nodeType":"ParameterList","parameters":[],"src":"1704:2:78"},"src":"1657:50:78"},{"errorSelector":"f75e9202","id":20078,"name":"SwapAdminFacet__removeSwap_notDisabledPool","nameLocation":"1716:42:78","nodeType":"ErrorDefinition","parameters":{"id":20077,"nodeType":"ParameterList","parameters":[],"src":"1758:2:78"},"src":"1710:51:78"},{"errorSelector":"55750620","id":20080,"name":"SwapAdminFacet__removeSwap_delayNotElapsed","nameLocation":"1770:42:78","nodeType":"ErrorDefinition","parameters":{"id":20079,"nodeType":"ParameterList","parameters":[],"src":"1812:2:78"},"src":"1764:51:78"},{"errorSelector":"eedbe1c0","id":20082,"name":"SwapAdminFacet__disableSwap_notInitialized","nameLocation":"1824:42:78","nodeType":"ErrorDefinition","parameters":{"id":20081,"nodeType":"ParameterList","parameters":[],"src":"1866:2:78"},"src":"1818:51:78"},{"errorSelector":"80cd476f","id":20084,"name":"SwapAdminFacet__disableSwap_alreadyDisabled","nameLocation":"1878:43:78","nodeType":"ErrorDefinition","parameters":{"id":20083,"nodeType":"ParameterList","parameters":[],"src":"1921:2:78"},"src":"1872:52:78"},{"anonymous":false,"documentation":{"id":20085,"nodeType":"StructuredDocumentation","src":"2010:204:78","text":" @notice Emitted when the owner calls `initializeSwap`\n @param key - Identifier for asset\n @param swap - The swap that was initialized\n @param caller - The caller of the function"},"eventSelector":"17624207b3ada0ecb82d25bef7eb308a62e614001936961428b08af45651c3f1","id":20094,"name":"SwapInitialized","nameLocation":"2223:15:78","nodeType":"EventDefinition","parameters":{"id":20093,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20087,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"2255:3:78","nodeType":"VariableDeclaration","scope":20094,"src":"2239:19:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20086,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2239:7:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20090,"indexed":false,"mutability":"mutable","name":"swap","nameLocation":"2275:4:78","nodeType":"VariableDeclaration","scope":20094,"src":"2260:19:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_memory_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":20089,"nodeType":"UserDefinedTypeName","pathNode":{"id":20088,"name":"SwapUtils.Swap","nameLocations":["2260:9:78","2270:4:78"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"2260:14:78"},"referencedDeclaration":30786,"src":"2260:14:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":20092,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"2289:6:78","nodeType":"VariableDeclaration","scope":20094,"src":"2281:14:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20091,"name":"address","nodeType":"ElementaryTypeName","src":"2281:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2238:58:78"},"src":"2217:80:78"},{"anonymous":false,"documentation":{"id":20095,"nodeType":"StructuredDocumentation","src":"2301:151:78","text":" @notice Emitted when the owner calls `removeSwap`\n @param key - Identifier for asset\n @param caller - The caller of the function"},"eventSelector":"b729dde7e954c83f790a153521f9d2e12779b36305ed42c8bf86ac4cf7ce6915","id":20101,"name":"SwapRemoved","nameLocation":"2461:11:78","nodeType":"EventDefinition","parameters":{"id":20100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20097,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"2489:3:78","nodeType":"VariableDeclaration","scope":20101,"src":"2473:19:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20096,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2473:7:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20099,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"2502:6:78","nodeType":"VariableDeclaration","scope":20101,"src":"2494:14:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20098,"name":"address","nodeType":"ElementaryTypeName","src":"2494:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2472:37:78"},"src":"2455:55:78"},{"anonymous":false,"documentation":{"id":20102,"nodeType":"StructuredDocumentation","src":"2514:152:78","text":" @notice Emitted when the owner calls `disableSwap`\n @param key - Identifier for asset\n @param caller - The caller of the function"},"eventSelector":"436f3434791c806271347887826cd8df45595907e6cfdc188dd8c9b468d8521e","id":20108,"name":"SwapDisabled","nameLocation":"2675:12:78","nodeType":"EventDefinition","parameters":{"id":20107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20104,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"2704:3:78","nodeType":"VariableDeclaration","scope":20108,"src":"2688:19:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20103,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2688:7:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20106,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"2717:6:78","nodeType":"VariableDeclaration","scope":20108,"src":"2709:14:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20105,"name":"address","nodeType":"ElementaryTypeName","src":"2709:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2687:37:78"},"src":"2669:56:78"},{"anonymous":false,"documentation":{"id":20109,"nodeType":"StructuredDocumentation","src":"2729:153:78","text":" @notice Emitted when the owner withdraws admin fees\n @param key - Identifier for asset\n @param caller - The caller of the function"},"eventSelector":"2e6c35653408399a9853c5e5f81b67018cba78568bfd76dd46f93c825cbfb95d","id":20115,"name":"AdminFeesWithdrawn","nameLocation":"2891:18:78","nodeType":"EventDefinition","parameters":{"id":20114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20111,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"2926:3:78","nodeType":"VariableDeclaration","scope":20115,"src":"2910:19:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20110,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2910:7:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20113,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"2939:6:78","nodeType":"VariableDeclaration","scope":20115,"src":"2931:14:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20112,"name":"address","nodeType":"ElementaryTypeName","src":"2931:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2909:37:78"},"src":"2885:62:78"},{"anonymous":false,"documentation":{"id":20116,"nodeType":"StructuredDocumentation","src":"2951:190:78","text":" @notice Emitted when the owner sets admin fees\n @param key - Identifier for asset\n @param newAdminFee - The updated fee\n @param caller - The caller of the function"},"eventSelector":"46eefbb271e4103912d3c227656de8afc0849f4c8cba4b2a1e38b660361e0463","id":20124,"name":"AdminFeesSet","nameLocation":"3150:12:78","nodeType":"EventDefinition","parameters":{"id":20123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20118,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"3179:3:78","nodeType":"VariableDeclaration","scope":20124,"src":"3163:19:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20117,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3163:7:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20120,"indexed":false,"mutability":"mutable","name":"newAdminFee","nameLocation":"3192:11:78","nodeType":"VariableDeclaration","scope":20124,"src":"3184:19:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20119,"name":"uint256","nodeType":"ElementaryTypeName","src":"3184:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20122,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"3213:6:78","nodeType":"VariableDeclaration","scope":20124,"src":"3205:14:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20121,"name":"address","nodeType":"ElementaryTypeName","src":"3205:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3162:58:78"},"src":"3144:77:78"},{"anonymous":false,"documentation":{"id":20125,"nodeType":"StructuredDocumentation","src":"3225:188:78","text":" @notice Emitted when the owner sets swap fees\n @param key - Identifier for asset\n @param newSwapFee - The updated fee\n @param caller - The caller of the function"},"eventSelector":"6d9b91502dc11e7c127e8e2d114c1f8026647ecb6b987c1baaadb706b5eb3176","id":20133,"name":"SwapFeesSet","nameLocation":"3422:11:78","nodeType":"EventDefinition","parameters":{"id":20132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20127,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"3450:3:78","nodeType":"VariableDeclaration","scope":20133,"src":"3434:19:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20126,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3434:7:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20129,"indexed":false,"mutability":"mutable","name":"newSwapFee","nameLocation":"3463:10:78","nodeType":"VariableDeclaration","scope":20133,"src":"3455:18:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20128,"name":"uint256","nodeType":"ElementaryTypeName","src":"3455:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20131,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"3483:6:78","nodeType":"VariableDeclaration","scope":20133,"src":"3475:14:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20130,"name":"address","nodeType":"ElementaryTypeName","src":"3475:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3433:57:78"},"src":"3416:75:78"},{"anonymous":false,"documentation":{"id":20134,"nodeType":"StructuredDocumentation","src":"3495:290:78","text":" @notice Emitted when the owner starts ramping up or down the A parameter\n @param key - Identifier for asset\n @param futureA - The final A value after ramp\n @param futureTime - The time A should reach the final value\n @param caller - The caller of the function"},"eventSelector":"58e6fbecdb1a94225cf82c6b317a771aa08c9ab6552702b819bcd84ba8e8312f","id":20144,"name":"RampAStarted","nameLocation":"3794:12:78","nodeType":"EventDefinition","parameters":{"id":20143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20136,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"3823:3:78","nodeType":"VariableDeclaration","scope":20144,"src":"3807:19:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20135,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3807:7:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20138,"indexed":false,"mutability":"mutable","name":"futureA","nameLocation":"3836:7:78","nodeType":"VariableDeclaration","scope":20144,"src":"3828:15:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20137,"name":"uint256","nodeType":"ElementaryTypeName","src":"3828:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20140,"indexed":false,"mutability":"mutable","name":"futureTime","nameLocation":"3853:10:78","nodeType":"VariableDeclaration","scope":20144,"src":"3845:18:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20139,"name":"uint256","nodeType":"ElementaryTypeName","src":"3845:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20142,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"3873:6:78","nodeType":"VariableDeclaration","scope":20144,"src":"3865:14:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20141,"name":"address","nodeType":"ElementaryTypeName","src":"3865:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3806:74:78"},"src":"3788:93:78"},{"anonymous":false,"documentation":{"id":20145,"nodeType":"StructuredDocumentation","src":"3885:173:78","text":" @notice Emitted when the owner stops ramping up or down the A parameter\n @param key - Identifier for asset\n @param caller - The caller of the function"},"eventSelector":"86ce75679135e270f845c02bcb49ef6fb50464cb322dcc30096cccd13d2597df","id":20151,"name":"RampAStopped","nameLocation":"4067:12:78","nodeType":"EventDefinition","parameters":{"id":20150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20147,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"4096:3:78","nodeType":"VariableDeclaration","scope":20151,"src":"4080:19:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20146,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4080:7:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20149,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"4109:6:78","nodeType":"VariableDeclaration","scope":20151,"src":"4101:14:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20148,"name":"address","nodeType":"ElementaryTypeName","src":"4101:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4079:37:78"},"src":"4061:56:78"},{"anonymous":false,"documentation":{"id":20152,"nodeType":"StructuredDocumentation","src":"4121:216:78","text":" @notice Emitted when the owner update lpTokenTargetAddress\n @param oldAddress - The old lpTokenTargetAddress\n @param newAddress - Updated address\n @param caller - The caller of the function"},"eventSelector":"98bc4f3f4ec7b43d0c86b6136979bfbe279b2d54a930505d34ec02d72dfb1c40","id":20160,"name":"LPTokenTargetUpdated","nameLocation":"4346:20:78","nodeType":"EventDefinition","parameters":{"id":20159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20154,"indexed":false,"mutability":"mutable","name":"oldAddress","nameLocation":"4375:10:78","nodeType":"VariableDeclaration","scope":20160,"src":"4367:18:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20153,"name":"address","nodeType":"ElementaryTypeName","src":"4367:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20156,"indexed":false,"mutability":"mutable","name":"newAddress","nameLocation":"4395:10:78","nodeType":"VariableDeclaration","scope":20160,"src":"4387:18:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20155,"name":"address","nodeType":"ElementaryTypeName","src":"4387:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20158,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"4415:6:78","nodeType":"VariableDeclaration","scope":20160,"src":"4407:14:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20157,"name":"address","nodeType":"ElementaryTypeName","src":"4407:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4366:56:78"},"src":"4340:83:78"},{"body":{"id":20169,"nodeType":"Block","src":"4620:40:78","statements":[{"expression":{"expression":{"id":20166,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"4633:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20167,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4635:20:78","memberName":"lpTokenTargetAddress","nodeType":"MemberAccess","referencedDeclaration":29507,"src":"4633:22:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":20165,"id":20168,"nodeType":"Return","src":"4626:29:78"}]},"documentation":{"id":20161,"nodeType":"StructuredDocumentation","src":"4476:79:78","text":" @notice Returns the lp target token address\n @return address"},"functionSelector":"2bf63bcc","id":20170,"implemented":true,"kind":"function","modifiers":[],"name":"lpTokenTargetAddress","nameLocation":"4567:20:78","nodeType":"FunctionDefinition","parameters":{"id":20162,"nodeType":"ParameterList","parameters":[],"src":"4587:2:78"},"returnParameters":{"id":20165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20164,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20170,"src":"4611:7:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20163,"name":"address","nodeType":"ElementaryTypeName","src":"4611:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4610:9:78"},"scope":20837,"src":"4558:102:78","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":20184,"nodeType":"Block","src":"4859:46:78","statements":[{"expression":{"expression":{"baseExpression":{"expression":{"id":20178,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"4872:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20179,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4874:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"4872:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20181,"indexExpression":{"id":20180,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20173,"src":"4887:3:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4872:19:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20182,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4892:8:78","memberName":"disabled","nodeType":"MemberAccess","referencedDeclaration":30783,"src":"4872:28:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":20177,"id":20183,"nodeType":"Return","src":"4865:35:78"}]},"documentation":{"id":20171,"nodeType":"StructuredDocumentation","src":"4664:130:78","text":" @notice Return if the pool is disabled\n @param key Hash of the canonical id + domain\n @return disabled flag"},"functionSelector":"4b141bb4","id":20185,"implemented":true,"kind":"function","modifiers":[],"name":"isDisabled","nameLocation":"4806:10:78","nodeType":"FunctionDefinition","parameters":{"id":20174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20173,"mutability":"mutable","name":"key","nameLocation":"4825:3:78","nodeType":"VariableDeclaration","scope":20185,"src":"4817:11:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20172,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4817:7:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4816:13:78"},"returnParameters":{"id":20177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20176,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20185,"src":"4853:4:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20175,"name":"bool","nodeType":"ElementaryTypeName","src":"4853:4:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4852:6:78"},"scope":20837,"src":"4797:108:78","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":20469,"nodeType":"Block","src":"6401:2705:78","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"baseExpression":{"expression":{"id":20210,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"6411:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20211,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6413:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"6411:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20213,"indexExpression":{"id":20212,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20188,"src":"6426:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6411:20:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20214,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6432:12:78","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"6411:33:78","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":20215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6445:6:78","memberName":"length","nodeType":"MemberAccess","src":"6411:40:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6455:1:78","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6411:45:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20221,"nodeType":"IfStatement","src":"6407:109:78","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20218,"name":"SwapAdminFacet__initializeSwap_alreadyInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20054,"src":"6465:49:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":20219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6465:51:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20220,"nodeType":"RevertStatement","src":"6458:58:78"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20222,"name":"_pooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20192,"src":"6586:13:78","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":20223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6600:6:78","memberName":"length","nodeType":"MemberAccess","src":"6586:20:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":20224,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"6609:9:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":20225,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6619:21:78","memberName":"MINIMUM_POOLED_TOKENS","nodeType":"MemberAccess","referencedDeclaration":29259,"src":"6609:31:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6586:54:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20227,"name":"_pooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20192,"src":"6644:13:78","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":20228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6658:6:78","memberName":"length","nodeType":"MemberAccess","src":"6644:20:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":20229,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"6667:9:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":20230,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6677:21:78","memberName":"MAXIMUM_POOLED_TOKENS","nodeType":"MemberAccess","referencedDeclaration":29262,"src":"6667:31:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6644:54:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6586:112:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20237,"nodeType":"IfStatement","src":"6575:204:78","trueBody":{"id":20236,"nodeType":"Block","src":"6705:74:78","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20233,"name":"SwapAdminFacet__initializeSwap_invalidPooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20056,"src":"6720:50:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":20234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6720:52:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20235,"nodeType":"RevertStatement","src":"6713:59:78"}]}},{"assignments":[20239],"declarations":[{"constant":false,"id":20239,"mutability":"mutable","name":"numPooledTokens","nameLocation":"6793:15:78","nodeType":"VariableDeclaration","scope":20469,"src":"6785:23:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20238,"name":"uint256","nodeType":"ElementaryTypeName","src":"6785:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20242,"initialValue":{"expression":{"id":20240,"name":"_pooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20192,"src":"6811:13:78","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":20241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6825:6:78","memberName":"length","nodeType":"MemberAccess","src":"6811:20:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6785:46:78"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20243,"name":"numPooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20239,"src":"6842:15:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":20244,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20195,"src":"6861:8:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[] memory"}},"id":20245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6870:6:78","memberName":"length","nodeType":"MemberAccess","src":"6861:15:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6842:34:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20250,"nodeType":"IfStatement","src":"6838:96:78","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20247,"name":"SwapAdminFacet__initializeSwap_decimalsMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20058,"src":"6885:47:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":20248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6885:49:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20249,"nodeType":"RevertStatement","src":"6878:56:78"}},{"assignments":[20255],"declarations":[{"constant":false,"id":20255,"mutability":"mutable","name":"precisionMultipliers","nameLocation":"6958:20:78","nodeType":"VariableDeclaration","scope":20469,"src":"6941:37:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":20253,"name":"uint256","nodeType":"ElementaryTypeName","src":"6941:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20254,"nodeType":"ArrayTypeName","src":"6941:9:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":20262,"initialValue":{"arguments":[{"expression":{"id":20259,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20195,"src":"6995:8:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[] memory"}},"id":20260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7004:6:78","memberName":"length","nodeType":"MemberAccess","src":"6995:15:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20258,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"6981:13:78","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":20256,"name":"uint256","nodeType":"ElementaryTypeName","src":"6985:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20257,"nodeType":"ArrayTypeName","src":"6985:9:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":20261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6981:30:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"6941:70:78"},{"body":{"id":20362,"nodeType":"Block","src":"7057:824:78","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20269,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20264,"src":"7069:1:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7074:1:78","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7069:6:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20298,"nodeType":"IfStatement","src":"7065:274:78","trueBody":{"id":20297,"nodeType":"Block","src":"7077:262:78","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":20284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"expression":{"id":20272,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"7171:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20273,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7173:12:78","memberName":"tokenIndexes","nodeType":"MemberAccess","referencedDeclaration":29504,"src":"7171:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_uint8_$_$","typeString":"mapping(bytes32 => mapping(address => uint8))"}},"id":20275,"indexExpression":{"id":20274,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20188,"src":"7186:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7171:20:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":20282,"indexExpression":{"arguments":[{"baseExpression":{"id":20278,"name":"_pooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20192,"src":"7200:13:78","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":20280,"indexExpression":{"id":20279,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20264,"src":"7214:1:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7200:16:78","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":20277,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7192:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20276,"name":"address","nodeType":"ElementaryTypeName","src":"7192:7:78","typeDescriptions":{}}},"id":20281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7192:25:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7171:47:78","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20283,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7222:1:78","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7171:52:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"id":20291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":20285,"name":"_pooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20192,"src":"7227:13:78","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":20287,"indexExpression":{"hexValue":"30","id":20286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7241:1:78","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7227:16:78","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"baseExpression":{"id":20288,"name":"_pooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20192,"src":"7247:13:78","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":20290,"indexExpression":{"id":20289,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20264,"src":"7261:1:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7247:16:78","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"src":"7227:36:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7171:92:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20296,"nodeType":"IfStatement","src":"7167:163:78","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20293,"name":"SwapAdminFacet__initializeSwap_duplicateTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20060,"src":"7282:46:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":20294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7282:48:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20295,"nodeType":"RevertStatement","src":"7275:55:78"}}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"id":20301,"name":"_pooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20192,"src":"7358:13:78","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":20303,"indexExpression":{"id":20302,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20264,"src":"7372:1:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7358:16:78","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":20300,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7350:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20299,"name":"address","nodeType":"ElementaryTypeName","src":"7350:7:78","typeDescriptions":{}}},"id":20304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7350:25:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":20307,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7387:1:78","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20306,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7379:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20305,"name":"address","nodeType":"ElementaryTypeName","src":"7379:7:78","typeDescriptions":{}}},"id":20308,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7379:10:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7350:39:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20313,"nodeType":"IfStatement","src":"7346:101:78","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20310,"name":"SwapAdminFacet__initializeSwap_zeroTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20062,"src":"7398:47:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":20311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7398:49:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20312,"nodeType":"RevertStatement","src":"7391:56:78"}},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":20319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":20314,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20195,"src":"7460:8:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[] memory"}},"id":20316,"indexExpression":{"id":20315,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20264,"src":"7469:1:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7460:11:78","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":20317,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"7474:9:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":20318,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7484:23:78","memberName":"POOL_PRECISION_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":29266,"src":"7474:33:78","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"7460:47:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20323,"nodeType":"IfStatement","src":"7456:123:78","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20320,"name":"SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20064,"src":"7524:53:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":20321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7524:55:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20322,"nodeType":"RevertStatement","src":"7517:62:78"}},{"expression":{"id":20338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20324,"name":"precisionMultipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20255,"src":"7588:20:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20326,"indexExpression":{"id":20325,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20264,"src":"7609:1:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7588:23:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":20327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7614:2:78","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":20335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20330,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"7626:9:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":20331,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7636:23:78","memberName":"POOL_PRECISION_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":29266,"src":"7626:33:78","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":20332,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20195,"src":"7662:8:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[] memory"}},"id":20334,"indexExpression":{"id":20333,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20264,"src":"7671:1:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7662:11:78","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"7626:47:78","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":20329,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7618:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":20328,"name":"uint256","nodeType":"ElementaryTypeName","src":"7618:7:78","typeDescriptions":{}}},"id":20336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7618:56:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7614:60:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7588:86:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20339,"nodeType":"ExpressionStatement","src":"7588:86:78"},{"expression":{"id":20356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"expression":{"id":20340,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"7776:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20349,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7778:12:78","memberName":"tokenIndexes","nodeType":"MemberAccess","referencedDeclaration":29504,"src":"7776:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_uint8_$_$","typeString":"mapping(bytes32 => mapping(address => uint8))"}},"id":20350,"indexExpression":{"id":20342,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20188,"src":"7791:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7776:20:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":20351,"indexExpression":{"arguments":[{"baseExpression":{"id":20345,"name":"_pooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20192,"src":"7805:13:78","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":20347,"indexExpression":{"id":20346,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20264,"src":"7819:1:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7805:16:78","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":20344,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7797:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20343,"name":"address","nodeType":"ElementaryTypeName","src":"7797:7:78","typeDescriptions":{}}},"id":20348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7797:25:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7776:47:78","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":20354,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20264,"src":"7832:1:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7826:5:78","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":20352,"name":"uint8","nodeType":"ElementaryTypeName","src":"7826:5:78","typeDescriptions":{}}},"id":20355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7826:8:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"7776:58:78","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":20357,"nodeType":"ExpressionStatement","src":"7776:58:78"},{"id":20361,"nodeType":"UncheckedBlock","src":"7843:32:78","statements":[{"expression":{"id":20359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7863:3:78","subExpression":{"id":20358,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20264,"src":"7865:1:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20360,"nodeType":"ExpressionStatement","src":"7863:3:78"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20266,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20264,"src":"7034:1:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":20267,"name":"numPooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20239,"src":"7038:15:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7034:19:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20363,"initializationExpression":{"assignments":[20264],"declarations":[{"constant":false,"id":20264,"mutability":"mutable","name":"i","nameLocation":"7031:1:78","nodeType":"VariableDeclaration","scope":20363,"src":"7023:9:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20263,"name":"uint256","nodeType":"ElementaryTypeName","src":"7023:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20265,"nodeType":"VariableDeclarationStatement","src":"7023:9:78"},"nodeType":"ForStatement","src":"7018:863:78"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20364,"name":"_a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20201,"src":"7949:2:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20368,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"expression":{"id":20365,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"7954:9:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":20366,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7964:5:78","memberName":"MAX_A","nodeType":"MemberAccess","referencedDeclaration":29294,"src":"7954:15:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":20367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7972:1:78","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7954:19:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7949:24:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20373,"nodeType":"IfStatement","src":"7945:80:78","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20370,"name":"SwapAdminFacet__initializeSwap_aExceedMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20066,"src":"7982:41:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":20371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7982:43:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20372,"nodeType":"RevertStatement","src":"7975:50:78"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20374,"name":"_fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20203,"src":"8035:4:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20378,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"expression":{"id":20375,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"8042:9:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":20376,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8052:12:78","memberName":"MAX_SWAP_FEE","nodeType":"MemberAccess","referencedDeclaration":29274,"src":"8042:22:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":20377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8067:1:78","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8042:26:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8035:33:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20383,"nodeType":"IfStatement","src":"8031:91:78","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20380,"name":"SwapAdminFacet__initializeSwap_feeExceedMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20068,"src":"8077:43:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":20381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8077:45:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20382,"nodeType":"RevertStatement","src":"8070:52:78"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20384,"name":"_adminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20205,"src":"8132:9:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20388,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"expression":{"id":20385,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"8144:9:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":20386,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8154:13:78","memberName":"MAX_ADMIN_FEE","nodeType":"MemberAccess","referencedDeclaration":29278,"src":"8144:23:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":20387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8170:1:78","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8144:27:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8132:39:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20393,"nodeType":"IfStatement","src":"8128:102:78","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20390,"name":"SwapAdminFacet__initializeSwap_adminFeeExceedMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20070,"src":"8180:48:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":20391,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8180:50:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20392,"nodeType":"RevertStatement","src":"8173:57:78"}},{"assignments":[20396],"declarations":[{"constant":false,"id":20396,"mutability":"mutable","name":"lpToken","nameLocation":"8282:7:78","nodeType":"VariableDeclaration","scope":20469,"src":"8274:15:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"},"typeName":{"id":20395,"nodeType":"UserDefinedTypeName","pathNode":{"id":20394,"name":"LPToken","nameLocations":["8274:7:78"],"nodeType":"IdentifierPath","referencedDeclaration":23179,"src":"8274:7:78"},"referencedDeclaration":23179,"src":"8274:7:78","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"visibility":"internal"}],"id":20404,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":20400,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8313:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20401,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8315:20:78","memberName":"lpTokenTargetAddress","nodeType":"MemberAccess","referencedDeclaration":29507,"src":"8313:22:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":20398,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9871,"src":"8300:6:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Clones_$9871_$","typeString":"type(library Clones)"}},"id":20399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8307:5:78","memberName":"clone","nodeType":"MemberAccess","referencedDeclaration":9814,"src":"8300:12:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_address_$","typeString":"function (address) returns (address)"}},"id":20402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8300:36:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20397,"name":"LPToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23179,"src":"8292:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LPToken_$23179_$","typeString":"type(contract LPToken)"}},"id":20403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8292:45:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"nodeType":"VariableDeclarationStatement","src":"8274:63:78"},{"condition":{"id":20410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"8347:47:78","subExpression":{"arguments":[{"id":20407,"name":"lpTokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20197,"src":"8367:11:78","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":20408,"name":"lpTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20199,"src":"8380:13:78","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":20405,"name":"lpToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20396,"src":"8348:7:78","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":20406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8356:10:78","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":23097,"src":"8348:18:78","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_bool_$","typeString":"function (string memory,string memory) external returns (bool)"}},"id":20409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8348:46:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20414,"nodeType":"IfStatement","src":"8343:115:78","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20411,"name":"SwapAdminFacet__initializeSwap_failedInitLpTokenClone","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20072,"src":"8403:53:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":20412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8403:55:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20413,"nodeType":"RevertStatement","src":"8396:62:78"}},{"assignments":[20419],"declarations":[{"constant":false,"id":20419,"mutability":"mutable","name":"entry","nameLocation":"8524:5:78","nodeType":"VariableDeclaration","scope":20469,"src":"8502:27:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_memory_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":20418,"nodeType":"UserDefinedTypeName","pathNode":{"id":20417,"name":"SwapUtils.Swap","nameLocations":["8502:9:78","8512:4:78"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"8502:14:78"},"referencedDeclaration":30786,"src":"8502:14:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"}],"id":20453,"initialValue":{"arguments":[{"id":20422,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20188,"src":"8560:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20423,"name":"_a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20201,"src":"8582:2:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":20424,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"8587:9:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":20425,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8597:11:78","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"8587:21:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8582:26:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20427,"name":"_a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20201,"src":"8625:2:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":20428,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"8630:9:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":20429,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8640:11:78","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"8630:21:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8625:26:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20431,"name":"_fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20203,"src":"8668:4:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20432,"name":"_adminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20205,"src":"8690:9:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20433,"name":"lpToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20396,"src":"8716:7:78","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},{"id":20434,"name":"_pooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20192,"src":"8745:13:78","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},{"id":20435,"name":"precisionMultipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20255,"src":"8793:20:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"expression":{"id":20439,"name":"_pooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20192,"src":"8845:13:78","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":20440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8859:6:78","memberName":"length","nodeType":"MemberAccess","src":"8845:20:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20438,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8831:13:78","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":20436,"name":"uint256","nodeType":"ElementaryTypeName","src":"8835:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20437,"nodeType":"ArrayTypeName","src":"8835:9:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":20441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8831:35:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"expression":{"id":20445,"name":"_pooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20192,"src":"8899:13:78","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":20446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8913:6:78","memberName":"length","nodeType":"MemberAccess","src":"8899:20:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20444,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8885:13:78","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":20442,"name":"uint256","nodeType":"ElementaryTypeName","src":"8889:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20443,"nodeType":"ArrayTypeName","src":"8889:9:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":20447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8885:35:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"hexValue":"30","id":20448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8942:1:78","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":20449,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8964:1:78","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"66616c7365","id":20450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8983:5:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":20451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9008:1:78","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"},{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":20420,"name":"SwapUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34244,"src":"8532:9:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SwapUtils_$34244_$","typeString":"type(library SwapUtils)"}},"id":20421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8542:4:78","memberName":"Swap","nodeType":"MemberAccess","referencedDeclaration":30786,"src":"8532:14:78","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"type(struct SwapUtils.Swap storage pointer)"}},"id":20452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["8555:3:78","8572:8:78","8616:7:78","8659:7:78","8680:8:78","8707:7:78","8731:12:78","8766:25:78","8821:8:78","8874:9:78","8928:12:78","8951:11:78","8973:8:78","8996:10:78"],"names":["key","initialA","futureA","swapFee","adminFee","lpToken","pooledTokens","tokenPrecisionMultipliers","balances","adminFees","initialATime","futureATime","disabled","removeTime"],"nodeType":"FunctionCall","src":"8532:484:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_memory_ptr","typeString":"struct SwapUtils.Swap memory"}},"nodeType":"VariableDeclarationStatement","src":"8502:514:78"},{"expression":{"id":20460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":20454,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9022:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20457,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9024:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"9022:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20458,"indexExpression":{"id":20456,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20188,"src":"9037:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9022:20:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20459,"name":"entry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20419,"src":"9045:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_memory_ptr","typeString":"struct SwapUtils.Swap memory"}},"src":"9022:28:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20461,"nodeType":"ExpressionStatement","src":"9022:28:78"},{"eventCall":{"arguments":[{"id":20463,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20188,"src":"9077:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":20464,"name":"entry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20419,"src":"9083:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_memory_ptr","typeString":"struct SwapUtils.Swap memory"}},{"expression":{"id":20465,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9090:3:78","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9094:6:78","memberName":"sender","nodeType":"MemberAccess","src":"9090:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_struct$_Swap_$30786_memory_ptr","typeString":"struct SwapUtils.Swap memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20462,"name":"SwapInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20094,"src":"9061:15:78","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_struct$_Swap_$30786_memory_ptr_$_t_address_$returns$__$","typeString":"function (bytes32,struct SwapUtils.Swap memory,address)"}},"id":20467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9061:40:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20468,"nodeType":"EmitStatement","src":"9056:45:78"}]},"documentation":{"id":20186,"nodeType":"StructuredDocumentation","src":"4948:1193:78","text":" @notice Initializes this Swap contract with the given parameters.\n This will also clone a LPToken contract that represents users'\n LP positions. The owner of LPToken will be this contract - which means\n only this contract is allowed to mint/burn tokens.\n @dev The swap can only be updated after initialization via `rampA`. This means\n if this value is incorrectly set, it will take some time to reach the\n correct value.\n @param _key the hash of the canonical id and domain for token\n @param _pooledTokens an array of ERC20s this pool will accept.\n length of this array should be in 2 ~ 16\n @param decimals the decimals to use for each pooled token,\n eg 8 for WBTC. Cannot be larger than POOL_PRECISION_DECIMALS(18)\n Only fixed decimal tokens are allowed.\n @param lpTokenName the long-form name of the token to be deployed\n @param lpTokenSymbol the short symbol for the token to be deployed\n @param _a the amplification coefficient * n ** (n - 1). See the\n StableSwap paper for details\n @param _fee default swap fee to be initialized with\n @param _adminFee default adminFee to be initialized with"},"functionSelector":"e5f6220f","id":20470,"implemented":true,"kind":"function","modifiers":[{"id":20208,"kind":"modifierInvocation","modifierName":{"id":20207,"name":"onlyOwnerOrAdmin","nameLocations":["6384:16:78"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"6384:16:78"},"nodeType":"ModifierInvocation","src":"6384:16:78"}],"name":"initializeSwap","nameLocation":"6153:14:78","nodeType":"FunctionDefinition","parameters":{"id":20206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20188,"mutability":"mutable","name":"_key","nameLocation":"6181:4:78","nodeType":"VariableDeclaration","scope":20470,"src":"6173:12:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20187,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6173:7:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20192,"mutability":"mutable","name":"_pooledTokens","nameLocation":"6207:13:78","nodeType":"VariableDeclaration","scope":20470,"src":"6191:29:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":20190,"nodeType":"UserDefinedTypeName","pathNode":{"id":20189,"name":"IERC20","nameLocations":["6191:6:78"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"6191:6:78"},"referencedDeclaration":10812,"src":"6191:6:78","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":20191,"nodeType":"ArrayTypeName","src":"6191:8:78","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":20195,"mutability":"mutable","name":"decimals","nameLocation":"6241:8:78","nodeType":"VariableDeclaration","scope":20470,"src":"6226:23:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[]"},"typeName":{"baseType":{"id":20193,"name":"uint8","nodeType":"ElementaryTypeName","src":"6226:5:78","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":20194,"nodeType":"ArrayTypeName","src":"6226:7:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_storage_ptr","typeString":"uint8[]"}},"visibility":"internal"},{"constant":false,"id":20197,"mutability":"mutable","name":"lpTokenName","nameLocation":"6269:11:78","nodeType":"VariableDeclaration","scope":20470,"src":"6255:25:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":20196,"name":"string","nodeType":"ElementaryTypeName","src":"6255:6:78","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":20199,"mutability":"mutable","name":"lpTokenSymbol","nameLocation":"6300:13:78","nodeType":"VariableDeclaration","scope":20470,"src":"6286:27:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":20198,"name":"string","nodeType":"ElementaryTypeName","src":"6286:6:78","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":20201,"mutability":"mutable","name":"_a","nameLocation":"6327:2:78","nodeType":"VariableDeclaration","scope":20470,"src":"6319:10:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20200,"name":"uint256","nodeType":"ElementaryTypeName","src":"6319:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20203,"mutability":"mutable","name":"_fee","nameLocation":"6343:4:78","nodeType":"VariableDeclaration","scope":20470,"src":"6335:12:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20202,"name":"uint256","nodeType":"ElementaryTypeName","src":"6335:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20205,"mutability":"mutable","name":"_adminFee","nameLocation":"6361:9:78","nodeType":"VariableDeclaration","scope":20470,"src":"6353:17:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20204,"name":"uint256","nodeType":"ElementaryTypeName","src":"6353:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6167:207:78"},"returnParameters":{"id":20209,"nodeType":"ParameterList","parameters":[],"src":"6401:0:78"},"scope":20837,"src":"6144:2962:78","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20531,"nodeType":"Block","src":"9289:419:78","statements":[{"assignments":[20479],"declarations":[{"constant":false,"id":20479,"mutability":"mutable","name":"numPooledTokens","nameLocation":"9303:15:78","nodeType":"VariableDeclaration","scope":20531,"src":"9295:23:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20478,"name":"uint256","nodeType":"ElementaryTypeName","src":"9295:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20486,"initialValue":{"expression":{"expression":{"baseExpression":{"expression":{"id":20480,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9321:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20481,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9323:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"9321:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20483,"indexExpression":{"id":20482,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20473,"src":"9336:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9321:20:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20484,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9342:12:78","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"9321:33:78","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":20485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9355:6:78","memberName":"length","nodeType":"MemberAccess","src":"9321:40:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9295:66:78"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20487,"name":"numPooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20479,"src":"9372:15:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":20488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9391:1:78","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9372:20:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20493,"nodeType":"IfStatement","src":"9368:77:78","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20490,"name":"SwapAdminFacet__disableSwap_notInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20082,"src":"9401:42:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":20491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9401:44:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20492,"nodeType":"RevertStatement","src":"9394:51:78"}},{"condition":{"expression":{"baseExpression":{"expression":{"id":20494,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9455:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20495,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9457:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"9455:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20497,"indexExpression":{"id":20496,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20473,"src":"9470:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9455:20:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20498,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9476:8:78","memberName":"disabled","nodeType":"MemberAccess","referencedDeclaration":30783,"src":"9455:29:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20502,"nodeType":"IfStatement","src":"9451:87:78","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20499,"name":"SwapAdminFacet__disableSwap_alreadyDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20084,"src":"9493:43:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":20500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9493:45:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20501,"nodeType":"RevertStatement","src":"9486:52:78"}},{"expression":{"id":20510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":20503,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9545:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20506,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9547:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"9545:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20507,"indexExpression":{"id":20505,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20473,"src":"9560:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9545:20:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20508,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9566:8:78","memberName":"disabled","nodeType":"MemberAccess","referencedDeclaration":30783,"src":"9545:29:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":20509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9577:4:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"9545:36:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20511,"nodeType":"ExpressionStatement","src":"9545:36:78"},{"expression":{"id":20523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":20512,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9587:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20515,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9589:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"9587:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20516,"indexExpression":{"id":20514,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20473,"src":"9602:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9587:20:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20517,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9608:10:78","memberName":"removeTime","nodeType":"MemberAccess","referencedDeclaration":30785,"src":"9587:31:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20518,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"9621:5:78","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":20519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9627:9:78","memberName":"timestamp","nodeType":"MemberAccess","src":"9621:15:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":20520,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"9639:9:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":20521,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9649:12:78","memberName":"REMOVE_DELAY","nodeType":"MemberAccess","referencedDeclaration":29285,"src":"9639:22:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9621:40:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9587:74:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20524,"nodeType":"ExpressionStatement","src":"9587:74:78"},{"eventCall":{"arguments":[{"id":20526,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20473,"src":"9686:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":20527,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9692:3:78","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9696:6:78","memberName":"sender","nodeType":"MemberAccess","src":"9692:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20525,"name":"SwapDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20108,"src":"9673:12:78","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":20529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9673:30:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20530,"nodeType":"EmitStatement","src":"9668:35:78"}]},"documentation":{"id":20471,"nodeType":"StructuredDocumentation","src":"9110:115:78","text":" @notice disable swap for key\n @param _key the hash of the canonical id and domain for token"},"functionSelector":"ea027c2f","id":20532,"implemented":true,"kind":"function","modifiers":[{"id":20476,"kind":"modifierInvocation","modifierName":{"id":20475,"name":"onlyOwnerOrAdmin","nameLocations":["9272:16:78"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"9272:16:78"},"nodeType":"ModifierInvocation","src":"9272:16:78"}],"name":"disableSwap","nameLocation":"9237:11:78","nodeType":"FunctionDefinition","parameters":{"id":20474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20473,"mutability":"mutable","name":"_key","nameLocation":"9257:4:78","nodeType":"VariableDeclaration","scope":20532,"src":"9249:12:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20472,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9249:7:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9248:14:78"},"returnParameters":{"id":20477,"nodeType":"ParameterList","parameters":[],"src":"9289:0:78"},"scope":20837,"src":"9228:480:78","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20655,"nodeType":"Block","src":"9896:906:78","statements":[{"assignments":[20541],"declarations":[{"constant":false,"id":20541,"mutability":"mutable","name":"numPooledTokens","nameLocation":"9910:15:78","nodeType":"VariableDeclaration","scope":20655,"src":"9902:23:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20540,"name":"uint256","nodeType":"ElementaryTypeName","src":"9902:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20548,"initialValue":{"expression":{"expression":{"baseExpression":{"expression":{"id":20542,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9928:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20543,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9930:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"9928:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20545,"indexExpression":{"id":20544,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20535,"src":"9943:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9928:20:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20546,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9949:12:78","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"9928:33:78","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":20547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9962:6:78","memberName":"length","nodeType":"MemberAccess","src":"9928:40:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9902:66:78"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20549,"name":"numPooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20541,"src":"9978:15:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":20550,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9997:1:78","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9978:20:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20555,"nodeType":"IfStatement","src":"9974:76:78","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20552,"name":"SwapAdminFacet__removeSwap_notInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20076,"src":"10007:41:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":20553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10007:43:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20554,"nodeType":"RevertStatement","src":"10000:50:78"}},{"condition":{"id":20561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10061:30:78","subExpression":{"expression":{"baseExpression":{"expression":{"id":20556,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10062:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20557,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10064:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"10062:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20559,"indexExpression":{"id":20558,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20535,"src":"10077:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10062:20:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20560,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10083:8:78","memberName":"disabled","nodeType":"MemberAccess","referencedDeclaration":30783,"src":"10062:29:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20565,"nodeType":"IfStatement","src":"10057:87:78","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20562,"name":"SwapAdminFacet__removeSwap_notDisabledPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20078,"src":"10100:42:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":20563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10100:44:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20564,"nodeType":"RevertStatement","src":"10093:51:78"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"expression":{"id":20566,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10154:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20567,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10156:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"10154:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20569,"indexExpression":{"id":20568,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20535,"src":"10169:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10154:20:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20570,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10175:10:78","memberName":"removeTime","nodeType":"MemberAccess","referencedDeclaration":30785,"src":"10154:31:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":20571,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"10188:5:78","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":20572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10194:9:78","memberName":"timestamp","nodeType":"MemberAccess","src":"10188:15:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10154:49:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20577,"nodeType":"IfStatement","src":"10150:106:78","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20574,"name":"SwapAdminFacet__removeSwap_delayNotElapsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20080,"src":"10212:42:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":20575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10212:44:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20576,"nodeType":"RevertStatement","src":"10205:51:78"}},{"body":{"id":20635,"nodeType":"Block","src":"10302:378:78","statements":[{"assignments":[20586],"declarations":[{"constant":false,"id":20586,"mutability":"mutable","name":"pooledToken","nameLocation":"10317:11:78","nodeType":"VariableDeclaration","scope":20635,"src":"10310:18:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":20585,"nodeType":"UserDefinedTypeName","pathNode":{"id":20584,"name":"IERC20","nameLocations":["10310:6:78"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"10310:6:78"},"referencedDeclaration":10812,"src":"10310:6:78","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"}],"id":20594,"initialValue":{"baseExpression":{"expression":{"baseExpression":{"expression":{"id":20587,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10331:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20588,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10333:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"10331:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20590,"indexExpression":{"id":20589,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20535,"src":"10346:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10331:20:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20591,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10352:12:78","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"10331:33:78","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":20593,"indexExpression":{"id":20592,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20579,"src":"10365:1:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10331:36:78","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"10310:57:78"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"baseExpression":{"expression":{"id":20595,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10379:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20596,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10381:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"10379:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20598,"indexExpression":{"id":20597,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20535,"src":"10394:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10379:20:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20599,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10400:8:78","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"10379:29:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":20601,"indexExpression":{"id":20600,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20579,"src":"10409:1:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10379:32:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":20602,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10414:1:78","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10379:36:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20619,"nodeType":"IfStatement","src":"10375:201:78","trueBody":{"id":20618,"nodeType":"Block","src":"10417:159:78","statements":[{"expression":{"arguments":[{"expression":{"id":20607,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10522:3:78","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10526:6:78","memberName":"sender","nodeType":"MemberAccess","src":"10522:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"expression":{"baseExpression":{"expression":{"id":20609,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10534:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20610,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10536:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"10534:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20612,"indexExpression":{"id":20611,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20535,"src":"10549:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10534:20:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20613,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10555:8:78","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"10534:29:78","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":20615,"indexExpression":{"id":20614,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20579,"src":"10564:1:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10534:32:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":20604,"name":"pooledToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20586,"src":"10497:11:78","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":20606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10509:12:78","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10905,"src":"10497:24:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10812_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$10812_$","typeString":"function (contract IERC20,address,uint256)"}},"id":20616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10497:70:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20617,"nodeType":"ExpressionStatement","src":"10497:70:78"}]}},{"expression":{"id":20629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"10584:49:78","subExpression":{"baseExpression":{"baseExpression":{"expression":{"id":20620,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10591:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20621,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10593:12:78","memberName":"tokenIndexes","nodeType":"MemberAccess","referencedDeclaration":29504,"src":"10591:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_uint8_$_$","typeString":"mapping(bytes32 => mapping(address => uint8))"}},"id":20623,"indexExpression":{"id":20622,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20535,"src":"10606:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10591:20:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":20628,"indexExpression":{"arguments":[{"id":20626,"name":"pooledToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20586,"src":"10620:11:78","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":20625,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10612:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20624,"name":"address","nodeType":"ElementaryTypeName","src":"10612:7:78","typeDescriptions":{}}},"id":20627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10612:20:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10591:42:78","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20630,"nodeType":"ExpressionStatement","src":"10584:49:78"},{"id":20634,"nodeType":"UncheckedBlock","src":"10642:32:78","statements":[{"expression":{"id":20632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"10662:3:78","subExpression":{"id":20631,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20579,"src":"10664:1:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20633,"nodeType":"ExpressionStatement","src":"10662:3:78"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20581,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20579,"src":"10279:1:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":20582,"name":"numPooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20541,"src":"10283:15:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10279:19:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20636,"initializationExpression":{"assignments":[20579],"declarations":[{"constant":false,"id":20579,"mutability":"mutable","name":"i","nameLocation":"10276:1:78","nodeType":"VariableDeclaration","scope":20636,"src":"10268:9:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20578,"name":"uint256","nodeType":"ElementaryTypeName","src":"10268:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20580,"nodeType":"VariableDeclarationStatement","src":"10268:9:78"},"nodeType":"ForStatement","src":"10263:417:78"},{"expression":{"arguments":[{"id":20638,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20535,"src":"10705:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":20639,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10711:3:78","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10715:6:78","memberName":"sender","nodeType":"MemberAccess","src":"10711:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20637,"name":"_withdrawAdminFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20696,"src":"10686:18:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":20641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10686:36:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20642,"nodeType":"ExpressionStatement","src":"10686:36:78"},{"expression":{"id":20647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"10729:27:78","subExpression":{"baseExpression":{"expression":{"id":20643,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"10736:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20644,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10738:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"10736:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20646,"indexExpression":{"id":20645,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20535,"src":"10751:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10736:20:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20648,"nodeType":"ExpressionStatement","src":"10729:27:78"},{"eventCall":{"arguments":[{"id":20650,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20535,"src":"10780:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":20651,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10786:3:78","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10790:6:78","memberName":"sender","nodeType":"MemberAccess","src":"10786:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20649,"name":"SwapRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20101,"src":"10768:11:78","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":20653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10768:29:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20654,"nodeType":"EmitStatement","src":"10763:34:78"}]},"documentation":{"id":20533,"nodeType":"StructuredDocumentation","src":"9712:121:78","text":" @notice remove Swap Struct for key\n @param _key the hash of the canonical id and domain for token"},"functionSelector":"3e74aea0","id":20656,"implemented":true,"kind":"function","modifiers":[{"id":20538,"kind":"modifierInvocation","modifierName":{"id":20537,"name":"onlyOwnerOrAdmin","nameLocations":["9879:16:78"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"9879:16:78"},"nodeType":"ModifierInvocation","src":"9879:16:78"}],"name":"removeSwap","nameLocation":"9845:10:78","nodeType":"FunctionDefinition","parameters":{"id":20536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20535,"mutability":"mutable","name":"_key","nameLocation":"9864:4:78","nodeType":"VariableDeclaration","scope":20656,"src":"9856:12:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20534,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9856:7:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9855:14:78"},"returnParameters":{"id":20539,"nodeType":"ParameterList","parameters":[],"src":"9896:0:78"},"scope":20837,"src":"9836:966:78","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20672,"nodeType":"Block","src":"11012:46:78","statements":[{"expression":{"arguments":[{"id":20667,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20659,"src":"11037:3:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":20668,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11042:3:78","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11046:6:78","memberName":"sender","nodeType":"MemberAccess","src":"11042:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20666,"name":"_withdrawAdminFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20696,"src":"11018:18:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":20670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11018:35:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20671,"nodeType":"ExpressionStatement","src":"11018:35:78"}]},"documentation":{"id":20657,"nodeType":"StructuredDocumentation","src":"10806:120:78","text":" @notice Withdraw all admin fees to the contract owner\n @param key Hash of the canonical domain and id"},"functionSelector":"a1a23c29","id":20673,"implemented":true,"kind":"function","modifiers":[{"id":20662,"kind":"modifierInvocation","modifierName":{"id":20661,"name":"onlyOwnerOrAdmin","nameLocations":["10982:16:78"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"10982:16:78"},"nodeType":"ModifierInvocation","src":"10982:16:78"},{"id":20664,"kind":"modifierInvocation","modifierName":{"id":20663,"name":"nonReentrant","nameLocations":["10999:12:78"],"nodeType":"IdentifierPath","referencedDeclaration":13774,"src":"10999:12:78"},"nodeType":"ModifierInvocation","src":"10999:12:78"}],"name":"withdrawSwapAdminFees","nameLocation":"10938:21:78","nodeType":"FunctionDefinition","parameters":{"id":20660,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20659,"mutability":"mutable","name":"key","nameLocation":"10968:3:78","nodeType":"VariableDeclaration","scope":20673,"src":"10960:11:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20658,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10960:7:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10959:13:78"},"returnParameters":{"id":20665,"nodeType":"ParameterList","parameters":[],"src":"11012:0:78"},"scope":20837,"src":"10929:129:78","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20695,"nodeType":"Block","src":"11315:94:78","statements":[{"expression":{"arguments":[{"id":20687,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20678,"src":"11360:3:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"expression":{"id":20681,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"11321:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20684,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11323:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"11321:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20685,"indexExpression":{"id":20683,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20676,"src":"11336:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11321:20:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20686,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11342:17:78","memberName":"withdrawAdminFees","nodeType":"MemberAccess","referencedDeclaration":34159,"src":"11321:38:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Swap_$30786_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,address)"}},"id":20688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11321:43:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20689,"nodeType":"ExpressionStatement","src":"11321:43:78"},{"eventCall":{"arguments":[{"id":20691,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20676,"src":"11394:4:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":20692,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20678,"src":"11400:3:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20690,"name":"AdminFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20115,"src":"11375:18:78","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":20693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11375:29:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20694,"nodeType":"EmitStatement","src":"11370:34:78"}]},"documentation":{"id":20674,"nodeType":"StructuredDocumentation","src":"11062:186:78","text":" @notice Withdraws all admin fees for pool at key to provided address and emits event\n @param _key Hash of the canonical domain and id\n @param _to Recipient of fees"},"id":20696,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawAdminFees","nameLocation":"11260:18:78","nodeType":"FunctionDefinition","parameters":{"id":20679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20676,"mutability":"mutable","name":"_key","nameLocation":"11287:4:78","nodeType":"VariableDeclaration","scope":20696,"src":"11279:12:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20675,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11279:7:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20678,"mutability":"mutable","name":"_to","nameLocation":"11301:3:78","nodeType":"VariableDeclaration","scope":20696,"src":"11293:11:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20677,"name":"address","nodeType":"ElementaryTypeName","src":"11293:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11278:27:78"},"returnParameters":{"id":20680,"nodeType":"ParameterList","parameters":[],"src":"11315:0:78"},"scope":20837,"src":"11251:158:78","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":20722,"nodeType":"Block","src":"11713:108:78","statements":[{"expression":{"arguments":[{"id":20712,"name":"newAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20701,"src":"11751:11:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"expression":{"id":20706,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"11719:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20709,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11721:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"11719:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20710,"indexExpression":{"id":20708,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20699,"src":"11734:3:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11719:19:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20711,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11739:11:78","memberName":"setAdminFee","nodeType":"MemberAccess","referencedDeclaration":34191,"src":"11719:31:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Swap_$30786_storage_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint256)"}},"id":20713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11719:44:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20714,"nodeType":"ExpressionStatement","src":"11719:44:78"},{"eventCall":{"arguments":[{"id":20716,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20699,"src":"11787:3:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":20717,"name":"newAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20701,"src":"11792:11:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20718,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11805:3:78","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11809:6:78","memberName":"sender","nodeType":"MemberAccess","src":"11805:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20715,"name":"AdminFeesSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20124,"src":"11774:12:78","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_address_$returns$__$","typeString":"function (bytes32,uint256,address)"}},"id":20720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11774:42:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20721,"nodeType":"EmitStatement","src":"11769:47:78"}]},"documentation":{"id":20697,"nodeType":"StructuredDocumentation","src":"11413:212:78","text":" @notice Update the admin fee. Admin fee takes portion of the swap fee.\n @param key Hash of the canonical domain and id\n @param newAdminFee new admin fee to be applied on future transactions"},"functionSelector":"9c8eab97","id":20723,"implemented":true,"kind":"function","modifiers":[{"id":20704,"kind":"modifierInvocation","modifierName":{"id":20703,"name":"onlyOwnerOrAdmin","nameLocations":["11696:16:78"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"11696:16:78"},"nodeType":"ModifierInvocation","src":"11696:16:78"}],"name":"setSwapAdminFee","nameLocation":"11637:15:78","nodeType":"FunctionDefinition","parameters":{"id":20702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20699,"mutability":"mutable","name":"key","nameLocation":"11661:3:78","nodeType":"VariableDeclaration","scope":20723,"src":"11653:11:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20698,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11653:7:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20701,"mutability":"mutable","name":"newAdminFee","nameLocation":"11674:11:78","nodeType":"VariableDeclaration","scope":20723,"src":"11666:19:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20700,"name":"uint256","nodeType":"ElementaryTypeName","src":"11666:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11652:34:78"},"returnParameters":{"id":20705,"nodeType":"ParameterList","parameters":[],"src":"11713:0:78"},"scope":20837,"src":"11628:193:78","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20749,"nodeType":"Block","src":"12097:104:78","statements":[{"expression":{"arguments":[{"id":20739,"name":"newSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20728,"src":"12134:10:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"expression":{"id":20733,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"12103:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20736,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12105:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"12103:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20737,"indexExpression":{"id":20735,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20726,"src":"12118:3:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12103:19:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20738,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12123:10:78","memberName":"setSwapFee","nodeType":"MemberAccess","referencedDeclaration":34223,"src":"12103:30:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Swap_$30786_storage_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint256)"}},"id":20740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12103:42:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20741,"nodeType":"ExpressionStatement","src":"12103:42:78"},{"eventCall":{"arguments":[{"id":20743,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20726,"src":"12168:3:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":20744,"name":"newSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20728,"src":"12173:10:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20745,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12185:3:78","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12189:6:78","memberName":"sender","nodeType":"MemberAccess","src":"12185:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20742,"name":"SwapFeesSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20133,"src":"12156:11:78","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_address_$returns$__$","typeString":"function (bytes32,uint256,address)"}},"id":20747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12156:40:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20748,"nodeType":"EmitStatement","src":"12151:45:78"}]},"documentation":{"id":20724,"nodeType":"StructuredDocumentation","src":"11825:190:78","text":" @notice Update the swap fee to be applied on swaps\n @param key Hash of the canonical domain and id\n @param newSwapFee new swap fee to be applied on future transactions"},"functionSelector":"43be5eaf","id":20750,"implemented":true,"kind":"function","modifiers":[{"id":20731,"kind":"modifierInvocation","modifierName":{"id":20730,"name":"onlyOwnerOrAdmin","nameLocations":["12080:16:78"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"12080:16:78"},"nodeType":"ModifierInvocation","src":"12080:16:78"}],"name":"setSwapFee","nameLocation":"12027:10:78","nodeType":"FunctionDefinition","parameters":{"id":20729,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20726,"mutability":"mutable","name":"key","nameLocation":"12046:3:78","nodeType":"VariableDeclaration","scope":20750,"src":"12038:11:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20725,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12038:7:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20728,"mutability":"mutable","name":"newSwapFee","nameLocation":"12059:10:78","nodeType":"VariableDeclaration","scope":20750,"src":"12051:18:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20727,"name":"uint256","nodeType":"ElementaryTypeName","src":"12051:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12037:33:78"},"returnParameters":{"id":20732,"nodeType":"ParameterList","parameters":[],"src":"12097:0:78"},"scope":20837,"src":"12018:183:78","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20780,"nodeType":"Block","src":"12690:118:78","statements":[{"expression":{"arguments":[{"id":20768,"name":"futureA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20755,"src":"12722:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20769,"name":"futureTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20757,"src":"12731:10:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"expression":{"id":20762,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"12696:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20765,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12698:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"12696:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20766,"indexExpression":{"id":20764,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20753,"src":"12711:3:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12696:19:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20767,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12716:5:78","memberName":"rampA","nodeType":"MemberAccess","referencedDeclaration":27570,"src":"12696:25:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Swap_$30786_storage_ptr_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint256,uint256)"}},"id":20770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12696:46:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20771,"nodeType":"ExpressionStatement","src":"12696:46:78"},{"eventCall":{"arguments":[{"id":20773,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20753,"src":"12766:3:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":20774,"name":"futureA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20755,"src":"12771:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20775,"name":"futureTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20757,"src":"12780:10:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20776,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12792:3:78","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12796:6:78","memberName":"sender","nodeType":"MemberAccess","src":"12792:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20772,"name":"RampAStarted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20144,"src":"12753:12:78","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$returns$__$","typeString":"function (bytes32,uint256,uint256,address)"}},"id":20778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12753:50:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20779,"nodeType":"EmitStatement","src":"12748:55:78"}]},"documentation":{"id":20751,"nodeType":"StructuredDocumentation","src":"12205:375:78","text":" @notice Start ramping up or down A parameter towards given futureA and futureTime\n Checks if the change is too rapid, and commits the new A value only when it falls under\n the limit range.\n @param key Hash of the canonical domain and id\n @param futureA the new A to ramp towards\n @param futureTime timestamp when the new A should be reached"},"functionSelector":"1963e426","id":20781,"implemented":true,"kind":"function","modifiers":[{"id":20760,"kind":"modifierInvocation","modifierName":{"id":20759,"name":"onlyOwnerOrAdmin","nameLocations":["12673:16:78"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"12673:16:78"},"nodeType":"ModifierInvocation","src":"12673:16:78"}],"name":"rampA","nameLocation":"12592:5:78","nodeType":"FunctionDefinition","parameters":{"id":20758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20753,"mutability":"mutable","name":"key","nameLocation":"12611:3:78","nodeType":"VariableDeclaration","scope":20781,"src":"12603:11:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20752,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12603:7:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20755,"mutability":"mutable","name":"futureA","nameLocation":"12628:7:78","nodeType":"VariableDeclaration","scope":20781,"src":"12620:15:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20754,"name":"uint256","nodeType":"ElementaryTypeName","src":"12620:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20757,"mutability":"mutable","name":"futureTime","nameLocation":"12649:10:78","nodeType":"VariableDeclaration","scope":20781,"src":"12641:18:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20756,"name":"uint256","nodeType":"ElementaryTypeName","src":"12641:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12597:66:78"},"returnParameters":{"id":20761,"nodeType":"ParameterList","parameters":[],"src":"12690:0:78"},"scope":20837,"src":"12583:225:78","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20803,"nodeType":"Block","src":"13013:82:78","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":20789,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"13019:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20792,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13021:12:78","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"13019:14:78","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":20793,"indexExpression":{"id":20791,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20784,"src":"13034:3:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13019:19:78","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":20794,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13039:9:78","memberName":"stopRampA","nodeType":"MemberAccess","referencedDeclaration":27625,"src":"13019:29:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Swap_$30786_storage_ptr_$returns$__$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer)"}},"id":20795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13019:31:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20796,"nodeType":"ExpressionStatement","src":"13019:31:78"},{"eventCall":{"arguments":[{"id":20798,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20784,"src":"13074:3:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":20799,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13079:3:78","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13083:6:78","memberName":"sender","nodeType":"MemberAccess","src":"13079:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20797,"name":"RampAStopped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20151,"src":"13061:12:78","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":20801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13061:29:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20802,"nodeType":"EmitStatement","src":"13056:34:78"}]},"documentation":{"id":20782,"nodeType":"StructuredDocumentation","src":"12812:140:78","text":" @notice Stop ramping A immediately. Reverts if ramp A is already stopped.\n @param key Hash of the canonical domain and id"},"functionSelector":"72a30e08","id":20804,"implemented":true,"kind":"function","modifiers":[{"id":20787,"kind":"modifierInvocation","modifierName":{"id":20786,"name":"onlyOwnerOrAdmin","nameLocations":["12996:16:78"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"12996:16:78"},"nodeType":"ModifierInvocation","src":"12996:16:78"}],"name":"stopRampA","nameLocation":"12964:9:78","nodeType":"FunctionDefinition","parameters":{"id":20785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20784,"mutability":"mutable","name":"key","nameLocation":"12982:3:78","nodeType":"VariableDeclaration","scope":20804,"src":"12974:11:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20783,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12974:7:78","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"12973:13:78"},"returnParameters":{"id":20788,"nodeType":"ParameterList","parameters":[],"src":"13013:0:78"},"scope":20837,"src":"12955:140:78","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20835,"nodeType":"Block","src":"13275:230:78","statements":[{"condition":{"id":20816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13285:31:78","subExpression":{"arguments":[{"id":20814,"name":"newAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20807,"src":"13305:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":20812,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"13286:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11484_$","typeString":"type(library Address)"}},"id":20813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13294:10:78","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":11172,"src":"13286:18:78","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":20815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13286:30:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20820,"nodeType":"IfStatement","src":"13281:99:78","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20817,"name":"SwapAdminFacet__updateLpTokenTarget_invalidNewAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20074,"src":"13325:53:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":20818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13325:55:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20819,"nodeType":"RevertStatement","src":"13318:62:78"}},{"eventCall":{"arguments":[{"expression":{"id":20822,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"13412:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20823,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13414:20:78","memberName":"lpTokenTargetAddress","nodeType":"MemberAccess","referencedDeclaration":29507,"src":"13412:22:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20824,"name":"newAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20807,"src":"13436:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":20825,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13448:3:78","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13452:6:78","memberName":"sender","nodeType":"MemberAccess","src":"13448:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20821,"name":"LPTokenTargetUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20160,"src":"13391:20:78","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":20827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13391:68:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20828,"nodeType":"EmitStatement","src":"13386:73:78"},{"expression":{"id":20833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20829,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"13465:1:78","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20831,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"13467:20:78","memberName":"lpTokenTargetAddress","nodeType":"MemberAccess","referencedDeclaration":29507,"src":"13465:22:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20832,"name":"newAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20807,"src":"13490:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13465:35:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20834,"nodeType":"ExpressionStatement","src":"13465:35:78"}]},"documentation":{"id":20805,"nodeType":"StructuredDocumentation","src":"13099:98:78","text":" @notice Update lpTokenTargetAddress\n @param newAddress New lpTokenTargetAddress"},"functionSelector":"8dc51484","id":20836,"implemented":true,"kind":"function","modifiers":[{"id":20810,"kind":"modifierInvocation","modifierName":{"id":20809,"name":"onlyOwnerOrAdmin","nameLocations":["13258:16:78"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"13258:16:78"},"nodeType":"ModifierInvocation","src":"13258:16:78"}],"name":"updateLpTokenTarget","nameLocation":"13209:19:78","nodeType":"FunctionDefinition","parameters":{"id":20808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20807,"mutability":"mutable","name":"newAddress","nameLocation":"13237:10:78","nodeType":"VariableDeclaration","scope":20836,"src":"13229:18:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20806,"name":"address","nodeType":"ElementaryTypeName","src":"13229:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13228:20:78"},"returnParameters":{"id":20811,"nodeType":"ParameterList","parameters":[],"src":"13275:0:78"},"scope":20837,"src":"13200:305:78","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":20838,"src":"789:12718:78","usedErrors":[13728,13730,13732,13734,13736,13738,13740,13742,13744,13746,20054,20056,20058,20060,20062,20064,20066,20068,20070,20072,20074,20076,20078,20080,20082,20084,27660]}],"src":"39:13469:78"},"id":78},"contracts/core/connext/facets/TokenFacet.sol":{"ast":{"absolutePath":"contracts/core/connext/facets/TokenFacet.sol","exportedSymbols":{"AssetLogic":[28696],"BaseConnextFacet":[14146],"BridgeToken":[22402],"IBridgeToken":[25890],"IERC20Metadata":[10837],"IStableSwap":[27329],"TokenConfig":[29395],"TokenFacet":[22106],"TokenId":[37728],"TypeCasts":[50188]},"id":22107,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":20839,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"32:23:79"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC20Metadata.sol","file":"@openzeppelin/contracts/interfaces/IERC20Metadata.sol","id":20841,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22107,"sourceUnit":9782,"src":"57:85:79","symbolAliases":[{"foreign":{"id":20840,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10837,"src":"65:14:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/libraries/TypeCasts.sol","file":"../../../shared/libraries/TypeCasts.sol","id":20843,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22107,"sourceUnit":50189,"src":"144:66:79","symbolAliases":[{"foreign":{"id":20842,"name":"TypeCasts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50188,"src":"152:9:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/TokenId.sol","file":"../libraries/TokenId.sol","id":20845,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22107,"sourceUnit":37729,"src":"212:49:79","symbolAliases":[{"foreign":{"id":20844,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37728,"src":"220:7:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/AssetLogic.sol","file":"../libraries/AssetLogic.sol","id":20847,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22107,"sourceUnit":28697,"src":"262:55:79","symbolAliases":[{"foreign":{"id":20846,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"270:10:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/LibConnextStorage.sol","file":"../libraries/LibConnextStorage.sol","id":20849,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22107,"sourceUnit":29546,"src":"318:63:79","symbolAliases":[{"foreign":{"id":20848,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29395,"src":"326:11:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IStableSwap.sol","file":"../interfaces/IStableSwap.sol","id":20851,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22107,"sourceUnit":27330,"src":"383:58:79","symbolAliases":[{"foreign":{"id":20850,"name":"IStableSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27329,"src":"391:11:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IBridgeToken.sol","file":"../interfaces/IBridgeToken.sol","id":20853,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22107,"sourceUnit":25891,"src":"442:60:79","symbolAliases":[{"foreign":{"id":20852,"name":"IBridgeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25890,"src":"450:12:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/helpers/BridgeToken.sol","file":"../helpers/BridgeToken.sol","id":20855,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22107,"sourceUnit":22403,"src":"504:55:79","symbolAliases":[{"foreign":{"id":20854,"name":"BridgeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22402,"src":"512:11:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/facets/BaseConnextFacet.sol","file":"./BaseConnextFacet.sol","id":20857,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22107,"sourceUnit":14147,"src":"561:56:79","symbolAliases":[{"foreign":{"id":20856,"name":"BaseConnextFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14146,"src":"569:16:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":20858,"name":"BaseConnextFacet","nameLocations":["642:16:79"],"nodeType":"IdentifierPath","referencedDeclaration":14146,"src":"642:16:79"},"id":20859,"nodeType":"InheritanceSpecifier","src":"642:16:79"}],"canonicalName":"TokenFacet","contractDependencies":[22402],"contractKind":"contract","fullyImplemented":true,"id":22106,"linearizedBaseContracts":[22106,14146],"name":"TokenFacet","nameLocation":"628:10:79","nodeType":"ContractDefinition","nodes":[{"errorSelector":"bfa2bf9b","id":20861,"name":"TokenFacet__addAssetId_alreadyAdded","nameLocation":"711:35:79","nodeType":"ErrorDefinition","parameters":{"id":20860,"nodeType":"ParameterList","parameters":[],"src":"746:2:79"},"src":"705:44:79"},{"errorSelector":"b6ec7680","id":20863,"name":"TokenFacet__addAssetId_badMint","nameLocation":"758:30:79","nodeType":"ErrorDefinition","parameters":{"id":20862,"nodeType":"ParameterList","parameters":[],"src":"788:2:79"},"src":"752:39:79"},{"errorSelector":"ad6f16e3","id":20865,"name":"TokenFacet__addAssetId_badBurn","nameLocation":"800:30:79","nodeType":"ErrorDefinition","parameters":{"id":20864,"nodeType":"ParameterList","parameters":[],"src":"830:2:79"},"src":"794:39:79"},{"errorSelector":"39333cfa","id":20867,"name":"TokenFacet__removeAssetId_notAdded","nameLocation":"842:34:79","nodeType":"ErrorDefinition","parameters":{"id":20866,"nodeType":"ParameterList","parameters":[],"src":"876:2:79"},"src":"836:43:79"},{"errorSelector":"c383fe48","id":20869,"name":"TokenFacet__removeAssetId_invalidParams","nameLocation":"888:39:79","nodeType":"ErrorDefinition","parameters":{"id":20868,"nodeType":"ParameterList","parameters":[],"src":"927:2:79"},"src":"882:48:79"},{"errorSelector":"8a8e65e2","id":20871,"name":"TokenFacet__removeAssetId_remainsCustodied","nameLocation":"939:42:79","nodeType":"ErrorDefinition","parameters":{"id":20870,"nodeType":"ParameterList","parameters":[],"src":"981:2:79"},"src":"933:51:79"},{"errorSelector":"9db40a25","id":20873,"name":"TokenFacet__updateDetails_localNotFound","nameLocation":"993:39:79","nodeType":"ErrorDefinition","parameters":{"id":20872,"nodeType":"ParameterList","parameters":[],"src":"1032:2:79"},"src":"987:48:79"},{"errorSelector":"396a1f2c","id":20875,"name":"TokenFacet__updateDetails_onlyRemote","nameLocation":"1044:36:79","nodeType":"ErrorDefinition","parameters":{"id":20874,"nodeType":"ParameterList","parameters":[],"src":"1080:2:79"},"src":"1038:45:79"},{"errorSelector":"4d665d99","id":20877,"name":"TokenFacet__updateDetails_notApproved","nameLocation":"1092:37:79","nodeType":"ErrorDefinition","parameters":{"id":20876,"nodeType":"ParameterList","parameters":[],"src":"1129:2:79"},"src":"1086:46:79"},{"errorSelector":"eb741af2","id":20879,"name":"TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical","nameLocation":"1141:54:79","nodeType":"ErrorDefinition","parameters":{"id":20878,"nodeType":"ParameterList","parameters":[],"src":"1195:2:79"},"src":"1135:63:79"},{"errorSelector":"ae154e03","id":20881,"name":"TokenFacet__setupAsset_representationListed","nameLocation":"1207:43:79","nodeType":"ErrorDefinition","parameters":{"id":20880,"nodeType":"ParameterList","parameters":[],"src":"1250:2:79"},"src":"1201:52:79"},{"errorSelector":"022d8335","id":20883,"name":"TokenFacet__setupAsset_invalidCanonicalConfiguration","nameLocation":"1262:52:79","nodeType":"ErrorDefinition","parameters":{"id":20882,"nodeType":"ParameterList","parameters":[],"src":"1314:2:79"},"src":"1256:61:79"},{"errorSelector":"4d8d600c","id":20885,"name":"TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation","nameLocation":"1326:70:79","nodeType":"ErrorDefinition","parameters":{"id":20884,"nodeType":"ParameterList","parameters":[],"src":"1396:2:79"},"src":"1320:79:79"},{"errorSelector":"ccf799f4","id":20887,"name":"TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain","nameLocation":"1408:66:79","nodeType":"ErrorDefinition","parameters":{"id":20886,"nodeType":"ParameterList","parameters":[],"src":"1474:2:79"},"src":"1402:75:79"},{"errorSelector":"a56029bd","id":20889,"name":"TokenFacet__setLiquidityCap_notCanonicalDomain","nameLocation":"1486:46:79","nodeType":"ErrorDefinition","parameters":{"id":20888,"nodeType":"ParameterList","parameters":[],"src":"1532:2:79"},"src":"1480:55:79"},{"anonymous":false,"documentation":{"id":20890,"nodeType":"StructuredDocumentation","src":"1578:320:79","text":" @notice emitted when a representation token contract is deployed\n @param domain the domain of the chain where the canonical asset is deployed\n @param id the bytes32 address of the canonical token contract\n @param representation the address of the newly locally deployed representation contract"},"eventSelector":"84d5e3618bf276f3d29a931646fdd996b398a3efa3cf6bceefc1fe7f0304059f","id":20898,"name":"TokenDeployed","nameLocation":"1907:13:79","nodeType":"EventDefinition","parameters":{"id":20897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20892,"indexed":true,"mutability":"mutable","name":"domain","nameLocation":"1936:6:79","nodeType":"VariableDeclaration","scope":20898,"src":"1921:21:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20891,"name":"uint32","nodeType":"ElementaryTypeName","src":"1921:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":20894,"indexed":true,"mutability":"mutable","name":"id","nameLocation":"1960:2:79","nodeType":"VariableDeclaration","scope":20898,"src":"1944:18:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20893,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1944:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20896,"indexed":true,"mutability":"mutable","name":"representation","nameLocation":"1980:14:79","nodeType":"VariableDeclaration","scope":20898,"src":"1964:30:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20895,"name":"address","nodeType":"ElementaryTypeName","src":"1964:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1920:75:79"},"src":"1901:95:79"},{"anonymous":false,"documentation":{"id":20899,"nodeType":"StructuredDocumentation","src":"2000:456:79","text":" @notice Emitted when a new stable-swap AMM is added for the local <> adopted token\n @param key - The key in the mapping (hash of canonical id and domain)\n @param canonicalId - The canonical identifier of the token the local <> adopted AMM is for\n @param domain - The domain of the canonical token for the local <> adopted amm\n @param swapPool - The address of the AMM\n @param caller - The account that called the function"},"eventSelector":"16285b1cf634d546d51fefe55f6e63e5edf970d2a3d2bd50b55a8cfad25e8b56","id":20911,"name":"StableSwapAdded","nameLocation":"2465:15:79","nodeType":"EventDefinition","parameters":{"id":20910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20901,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"2502:3:79","nodeType":"VariableDeclaration","scope":20911,"src":"2486:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20900,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2486:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20903,"indexed":true,"mutability":"mutable","name":"canonicalId","nameLocation":"2527:11:79","nodeType":"VariableDeclaration","scope":20911,"src":"2511:27:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20902,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2511:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20905,"indexed":true,"mutability":"mutable","name":"domain","nameLocation":"2559:6:79","nodeType":"VariableDeclaration","scope":20911,"src":"2544:21:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20904,"name":"uint32","nodeType":"ElementaryTypeName","src":"2544:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":20907,"indexed":false,"mutability":"mutable","name":"swapPool","nameLocation":"2579:8:79","nodeType":"VariableDeclaration","scope":20911,"src":"2571:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20906,"name":"address","nodeType":"ElementaryTypeName","src":"2571:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20909,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"2601:6:79","nodeType":"VariableDeclaration","scope":20911,"src":"2593:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20908,"name":"address","nodeType":"ElementaryTypeName","src":"2593:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2480:131:79"},"src":"2459:153:79"},{"anonymous":false,"documentation":{"id":20912,"nodeType":"StructuredDocumentation","src":"2616:459:79","text":" @notice Emitted when a liquidity cap is updated\n @param key - The key in the mapping (hash of canonical id and domain)\n @param canonicalId - The canonical identifier of the token the local <> adopted AMM is for\n @param domain - The domain of the canonical token for the local <> adopted amm\n @param cap - The newly enforced liquidity cap (if it is 0, no cap is enforced)\n @param caller - The account that called the function"},"eventSelector":"8976b61819dcee01042166c2c5612babc4f820a30843a7f8b23c0ddc343f6ef4","id":20924,"name":"LiquidityCapUpdated","nameLocation":"3084:19:79","nodeType":"EventDefinition","parameters":{"id":20923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20914,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"3125:3:79","nodeType":"VariableDeclaration","scope":20924,"src":"3109:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20913,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3109:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20916,"indexed":true,"mutability":"mutable","name":"canonicalId","nameLocation":"3150:11:79","nodeType":"VariableDeclaration","scope":20924,"src":"3134:27:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20915,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3134:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20918,"indexed":true,"mutability":"mutable","name":"domain","nameLocation":"3182:6:79","nodeType":"VariableDeclaration","scope":20924,"src":"3167:21:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20917,"name":"uint32","nodeType":"ElementaryTypeName","src":"3167:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":20920,"indexed":false,"mutability":"mutable","name":"cap","nameLocation":"3202:3:79","nodeType":"VariableDeclaration","scope":20924,"src":"3194:11:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20919,"name":"uint256","nodeType":"ElementaryTypeName","src":"3194:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20922,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"3219:6:79","nodeType":"VariableDeclaration","scope":20924,"src":"3211:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20921,"name":"address","nodeType":"ElementaryTypeName","src":"3211:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3103:126:79"},"src":"3078:152:79"},{"anonymous":false,"documentation":{"id":20925,"nodeType":"StructuredDocumentation","src":"3234:501:79","text":" @notice Emitted when a new asset is added\n @param key - The key in the mapping (hash of canonical id and domain)\n @param canonicalId - The canonical identifier of the token the local <> adopted AMM is for\n @param domain - The domain of the canonical token for the local <> adopted amm\n @param adoptedAsset - The address of the adopted (user-expected) asset\n @param localAsset - The address of the local asset\n @param caller - The account that called the function"},"eventSelector":"0c58c78506e2d526f5ccdba28119c9ca3b5ce48e1462e0e19bc39232db11c632","id":20939,"name":"AssetAdded","nameLocation":"3744:10:79","nodeType":"EventDefinition","parameters":{"id":20938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20927,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"3776:3:79","nodeType":"VariableDeclaration","scope":20939,"src":"3760:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20926,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3760:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20929,"indexed":true,"mutability":"mutable","name":"canonicalId","nameLocation":"3801:11:79","nodeType":"VariableDeclaration","scope":20939,"src":"3785:27:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20928,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3785:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20931,"indexed":true,"mutability":"mutable","name":"domain","nameLocation":"3833:6:79","nodeType":"VariableDeclaration","scope":20939,"src":"3818:21:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20930,"name":"uint32","nodeType":"ElementaryTypeName","src":"3818:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":20933,"indexed":false,"mutability":"mutable","name":"adoptedAsset","nameLocation":"3853:12:79","nodeType":"VariableDeclaration","scope":20939,"src":"3845:20:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20932,"name":"address","nodeType":"ElementaryTypeName","src":"3845:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20935,"indexed":false,"mutability":"mutable","name":"localAsset","nameLocation":"3879:10:79","nodeType":"VariableDeclaration","scope":20939,"src":"3871:18:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20934,"name":"address","nodeType":"ElementaryTypeName","src":"3871:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20937,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"3903:6:79","nodeType":"VariableDeclaration","scope":20939,"src":"3895:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20936,"name":"address","nodeType":"ElementaryTypeName","src":"3895:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3754:159:79"},"src":"3738:176:79"},{"anonymous":false,"documentation":{"id":20940,"nodeType":"StructuredDocumentation","src":"3918:216:79","text":" @notice Emitted when an asset is removed from allowlists\n @param key - The hash of the canonical identifier and domain of the token removed\n @param caller - The account that called the function"},"eventSelector":"9d181adb70e733f5235f839c1eed929407ea8526e41d01f49b9fef703e78dddf","id":20946,"name":"AssetRemoved","nameLocation":"4143:12:79","nodeType":"EventDefinition","parameters":{"id":20945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20942,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"4172:3:79","nodeType":"VariableDeclaration","scope":20946,"src":"4156:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20941,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4156:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20944,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"4185:6:79","nodeType":"VariableDeclaration","scope":20946,"src":"4177:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20943,"name":"address","nodeType":"ElementaryTypeName","src":"4177:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4155:37:79"},"src":"4137:56:79"},{"body":{"id":20957,"nodeType":"Block","src":"4309:40:79","statements":[{"expression":{"arguments":[{"id":20954,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20948,"src":"4339:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":20953,"name":"_getAdoptedAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13962,"src":"4322:16:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":20955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4322:22:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":20952,"id":20956,"nodeType":"Return","src":"4315:29:79"}]},"functionSelector":"2c1999d0","id":20958,"implemented":true,"kind":"function","modifiers":[],"name":"canonicalToAdopted","nameLocation":"4246:18:79","nodeType":"FunctionDefinition","parameters":{"id":20949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20948,"mutability":"mutable","name":"_key","nameLocation":"4273:4:79","nodeType":"VariableDeclaration","scope":20958,"src":"4265:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20947,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4265:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4264:14:79"},"returnParameters":{"id":20952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20951,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20958,"src":"4300:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20950,"name":"address","nodeType":"ElementaryTypeName","src":"4300:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4299:9:79"},"scope":22106,"src":"4237:112:79","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":20976,"nodeType":"Block","src":"4440:103:79","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":20969,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20961,"src":"4504:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":20970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4515:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"4504:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":20971,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20961,"src":"4519:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":20972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4530:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"4519:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":20967,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"4470:10:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":20968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4481:22:79","memberName":"calculateCanonicalHash","nodeType":"MemberAccess","referencedDeclaration":28598,"src":"4470:33:79","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint32) pure returns (bytes32)"}},"id":20973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4470:67:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":20966,"name":"_getAdoptedAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13962,"src":"4453:16:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":20974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4453:85:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":20965,"id":20975,"nodeType":"Return","src":"4446:92:79"}]},"functionSelector":"bd8671a7","id":20977,"implemented":true,"kind":"function","modifiers":[],"name":"canonicalToAdopted","nameLocation":"4362:18:79","nodeType":"FunctionDefinition","parameters":{"id":20962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20961,"mutability":"mutable","name":"_canonical","nameLocation":"4398:10:79","nodeType":"VariableDeclaration","scope":20977,"src":"4381:27:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":20960,"nodeType":"UserDefinedTypeName","pathNode":{"id":20959,"name":"TokenId","nameLocations":["4381:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"4381:7:79"},"referencedDeclaration":37728,"src":"4381:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"src":"4380:29:79"},"returnParameters":{"id":20965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20964,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20977,"src":"4431:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20963,"name":"address","nodeType":"ElementaryTypeName","src":"4431:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4430:9:79"},"scope":22106,"src":"4353:190:79","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":21003,"nodeType":"Block","src":"4630:141:79","statements":[{"assignments":[20987],"declarations":[{"constant":false,"id":20987,"mutability":"mutable","name":"canonical","nameLocation":"4651:9:79","nodeType":"VariableDeclaration","scope":21003,"src":"4636:24:79","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":20986,"nodeType":"UserDefinedTypeName","pathNode":{"id":20985,"name":"TokenId","nameLocations":["4636:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"4636:7:79"},"referencedDeclaration":37728,"src":"4636:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"id":21000,"initialValue":{"arguments":[{"expression":{"baseExpression":{"expression":{"id":20989,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"4671:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20990,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4673:18:79","memberName":"adoptedToCanonical","nodeType":"MemberAccess","referencedDeclaration":29414,"src":"4671:20:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId storage ref)"}},"id":20992,"indexExpression":{"id":20991,"name":"_adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20979,"src":"4692:8:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4671:30:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage","typeString":"struct TokenId storage ref"}},"id":20993,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4702:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"4671:37:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"baseExpression":{"expression":{"id":20994,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"4710:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":20995,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4712:18:79","memberName":"adoptedToCanonical","nodeType":"MemberAccess","referencedDeclaration":29414,"src":"4710:20:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId storage ref)"}},"id":20997,"indexExpression":{"id":20996,"name":"_adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20979,"src":"4731:8:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4710:30:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage","typeString":"struct TokenId storage ref"}},"id":20998,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4741:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"4710:33:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":20988,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37728,"src":"4663:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_TokenId_$37728_storage_ptr_$","typeString":"type(struct TokenId storage pointer)"}},"id":20999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4663:81:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"nodeType":"VariableDeclarationStatement","src":"4636:108:79"},{"expression":{"id":21001,"name":"canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20987,"src":"4757:9:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"functionReturnParameters":20984,"id":21002,"nodeType":"Return","src":"4750:16:79"}]},"functionSelector":"60062091","id":21004,"implemented":true,"kind":"function","modifiers":[],"name":"adoptedToCanonical","nameLocation":"4556:18:79","nodeType":"FunctionDefinition","parameters":{"id":20980,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20979,"mutability":"mutable","name":"_adopted","nameLocation":"4583:8:79","nodeType":"VariableDeclaration","scope":21004,"src":"4575:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20978,"name":"address","nodeType":"ElementaryTypeName","src":"4575:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4574:18:79"},"returnParameters":{"id":20984,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20983,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21004,"src":"4614:14:79","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":20982,"nodeType":"UserDefinedTypeName","pathNode":{"id":20981,"name":"TokenId","nameLocations":["4614:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"4614:7:79"},"referencedDeclaration":37728,"src":"4614:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"src":"4613:16:79"},"scope":22106,"src":"4547:224:79","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":21015,"nodeType":"Block","src":"4854:47:79","statements":[{"expression":{"arguments":[{"id":21012,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21006,"src":"4891:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":21011,"name":"_getRepresentationAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13981,"src":"4867:23:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":21013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4867:29:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":21010,"id":21014,"nodeType":"Return","src":"4860:36:79"}]},"functionSelector":"1ecf6f9f","id":21016,"implemented":true,"kind":"function","modifiers":[],"name":"canonicalToRepresentation","nameLocation":"4784:25:79","nodeType":"FunctionDefinition","parameters":{"id":21007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21006,"mutability":"mutable","name":"_key","nameLocation":"4818:4:79","nodeType":"VariableDeclaration","scope":21016,"src":"4810:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21005,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4810:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4809:14:79"},"returnParameters":{"id":21010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21009,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21016,"src":"4845:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21008,"name":"address","nodeType":"ElementaryTypeName","src":"4845:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4844:9:79"},"scope":22106,"src":"4775:126:79","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":21034,"nodeType":"Block","src":"4999:110:79","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":21027,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21019,"src":"5070:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5081:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"5070:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":21029,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21019,"src":"5085:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5096:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"5085:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":21025,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"5036:10:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":21026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5047:22:79","memberName":"calculateCanonicalHash","nodeType":"MemberAccess","referencedDeclaration":28598,"src":"5036:33:79","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint32) pure returns (bytes32)"}},"id":21031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5036:67:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":21024,"name":"_getRepresentationAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13981,"src":"5012:23:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":21032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5012:92:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":21023,"id":21033,"nodeType":"Return","src":"5005:99:79"}]},"functionSelector":"ad4c7771","id":21035,"implemented":true,"kind":"function","modifiers":[],"name":"canonicalToRepresentation","nameLocation":"4914:25:79","nodeType":"FunctionDefinition","parameters":{"id":21020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21019,"mutability":"mutable","name":"_canonical","nameLocation":"4957:10:79","nodeType":"VariableDeclaration","scope":21035,"src":"4940:27:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":21018,"nodeType":"UserDefinedTypeName","pathNode":{"id":21017,"name":"TokenId","nameLocations":["4940:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"4940:7:79"},"referencedDeclaration":37728,"src":"4940:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"src":"4939:29:79"},"returnParameters":{"id":21023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21022,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21035,"src":"4990:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21021,"name":"address","nodeType":"ElementaryTypeName","src":"4990:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4989:9:79"},"scope":22106,"src":"4905:204:79","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":21061,"nodeType":"Block","src":"5210:187:79","statements":[{"assignments":[21045],"declarations":[{"constant":false,"id":21045,"mutability":"mutable","name":"canonical","nameLocation":"5231:9:79","nodeType":"VariableDeclaration","scope":21061,"src":"5216:24:79","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":21044,"nodeType":"UserDefinedTypeName","pathNode":{"id":21043,"name":"TokenId","nameLocations":["5216:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"5216:7:79"},"referencedDeclaration":37728,"src":"5216:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"id":21058,"initialValue":{"arguments":[{"expression":{"baseExpression":{"expression":{"id":21047,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"5258:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21048,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5260:25:79","memberName":"representationToCanonical","nodeType":"MemberAccess","referencedDeclaration":29420,"src":"5258:27:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId storage ref)"}},"id":21050,"indexExpression":{"id":21049,"name":"_representation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21037,"src":"5286:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5258:44:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage","typeString":"struct TokenId storage ref"}},"id":21051,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5303:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"5258:51:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"baseExpression":{"expression":{"id":21052,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"5317:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21053,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5319:25:79","memberName":"representationToCanonical","nodeType":"MemberAccess","referencedDeclaration":29420,"src":"5317:27:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId storage ref)"}},"id":21055,"indexExpression":{"id":21054,"name":"_representation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21037,"src":"5345:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5317:44:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage","typeString":"struct TokenId storage ref"}},"id":21056,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5362:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"5317:47:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":21046,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37728,"src":"5243:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_TokenId_$37728_storage_ptr_$","typeString":"type(struct TokenId storage pointer)"}},"id":21057,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5243:127:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"nodeType":"VariableDeclarationStatement","src":"5216:154:79"},{"expression":{"id":21059,"name":"canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21045,"src":"5383:9:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"functionReturnParameters":21042,"id":21060,"nodeType":"Return","src":"5376:16:79"}]},"functionSelector":"03e418c2","id":21062,"implemented":true,"kind":"function","modifiers":[],"name":"representationToCanonical","nameLocation":"5122:25:79","nodeType":"FunctionDefinition","parameters":{"id":21038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21037,"mutability":"mutable","name":"_representation","nameLocation":"5156:15:79","nodeType":"VariableDeclaration","scope":21062,"src":"5148:23:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21036,"name":"address","nodeType":"ElementaryTypeName","src":"5148:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5147:25:79"},"returnParameters":{"id":21042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21041,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21062,"src":"5194:14:79","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":21040,"nodeType":"UserDefinedTypeName","pathNode":{"id":21039,"name":"TokenId","nameLocations":["5194:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"5194:7:79"},"referencedDeclaration":37728,"src":"5194:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"src":"5193:16:79"},"scope":22106,"src":"5113:284:79","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":21074,"nodeType":"Block","src":"5478:50:79","statements":[{"expression":{"arguments":[{"id":21071,"name":"_candidate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21064,"src":"5512:10:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21070,"name":"_getCanonicalTokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14054,"src":"5491:20:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_struct$_TokenId_$37728_memory_ptr_$","typeString":"function (address) view returns (struct TokenId memory)"}},"id":21072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5491:32:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"functionReturnParameters":21069,"id":21073,"nodeType":"Return","src":"5484:39:79"}]},"functionSelector":"f1537686","id":21075,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenId","nameLocation":"5410:10:79","nodeType":"FunctionDefinition","parameters":{"id":21065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21064,"mutability":"mutable","name":"_candidate","nameLocation":"5429:10:79","nodeType":"VariableDeclaration","scope":21075,"src":"5421:18:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21063,"name":"address","nodeType":"ElementaryTypeName","src":"5421:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5420:20:79"},"returnParameters":{"id":21069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21068,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21075,"src":"5462:14:79","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":21067,"nodeType":"UserDefinedTypeName","pathNode":{"id":21066,"name":"TokenId","nameLocations":["5462:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"5462:7:79"},"referencedDeclaration":37728,"src":"5462:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"src":"5461:16:79"},"scope":22106,"src":"5401:127:79","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":21096,"nodeType":"Block","src":"5633:105:79","statements":[{"expression":{"arguments":[{"arguments":[{"id":21089,"name":"_id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21077,"src":"5705:3:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":21090,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21079,"src":"5710:7:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":21087,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"5671:10:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":21088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5682:22:79","memberName":"calculateCanonicalHash","nodeType":"MemberAccess","referencedDeclaration":28598,"src":"5671:33:79","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint32) pure returns (bytes32)"}},"id":21091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5671:47:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":21092,"name":"_id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21077,"src":"5720:3:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":21093,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21079,"src":"5725:7:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":21086,"name":"_getLocalAndAdoptedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14088,"src":"5646:24:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_uint32_$returns$_t_address_$_t_address_$","typeString":"function (bytes32,bytes32,uint32) view returns (address,address)"}},"id":21094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5646:87:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$","typeString":"tuple(address,address)"}},"functionReturnParameters":21085,"id":21095,"nodeType":"Return","src":"5639:94:79"}]},"functionSelector":"07a38d7b","id":21097,"implemented":true,"kind":"function","modifiers":[],"name":"getLocalAndAdoptedToken","nameLocation":"5541:23:79","nodeType":"FunctionDefinition","parameters":{"id":21080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21077,"mutability":"mutable","name":"_id","nameLocation":"5573:3:79","nodeType":"VariableDeclaration","scope":21097,"src":"5565:11:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21076,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5565:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":21079,"mutability":"mutable","name":"_domain","nameLocation":"5585:7:79","nodeType":"VariableDeclaration","scope":21097,"src":"5578:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":21078,"name":"uint32","nodeType":"ElementaryTypeName","src":"5578:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"5564:29:79"},"returnParameters":{"id":21085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21082,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21097,"src":"5615:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21081,"name":"address","nodeType":"ElementaryTypeName","src":"5615:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21084,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21097,"src":"5624:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21083,"name":"address","nodeType":"ElementaryTypeName","src":"5624:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5614:18:79"},"scope":22106,"src":"5532:206:79","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":21110,"nodeType":"Block","src":"5807:47:79","statements":[{"expression":{"expression":{"baseExpression":{"expression":{"id":21104,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"5820:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21105,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5822:12:79","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"5820:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":21107,"indexExpression":{"id":21106,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21099,"src":"5835:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5820:20:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":21108,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5841:8:79","memberName":"approval","nodeType":"MemberAccess","referencedDeclaration":29390,"src":"5820:29:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":21103,"id":21109,"nodeType":"Return","src":"5813:36:79"}]},"functionSelector":"57bd0a32","id":21111,"implemented":true,"kind":"function","modifiers":[],"name":"approvedAssets","nameLocation":"5751:14:79","nodeType":"FunctionDefinition","parameters":{"id":21100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21099,"mutability":"mutable","name":"_key","nameLocation":"5774:4:79","nodeType":"VariableDeclaration","scope":21111,"src":"5766:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21098,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5766:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5765:14:79"},"returnParameters":{"id":21103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21102,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21111,"src":"5801:4:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21101,"name":"bool","nodeType":"ElementaryTypeName","src":"5801:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5800:6:79"},"scope":22106,"src":"5742:112:79","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":21129,"nodeType":"Block","src":"5938:101:79","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":21122,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21114,"src":"6000:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6011:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"6000:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":21124,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21114,"src":"6015:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6026:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"6015:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":21120,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"5966:10:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":21121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5977:22:79","memberName":"calculateCanonicalHash","nodeType":"MemberAccess","referencedDeclaration":28598,"src":"5966:33:79","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint32) pure returns (bytes32)"}},"id":21126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5966:67:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":21119,"name":"approvedAssets","nodeType":"Identifier","overloadedDeclarations":[21111,21130],"referencedDeclaration":21111,"src":"5951:14:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32) view returns (bool)"}},"id":21127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5951:83:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":21118,"id":21128,"nodeType":"Return","src":"5944:90:79"}]},"functionSelector":"ae8bc0de","id":21130,"implemented":true,"kind":"function","modifiers":[],"name":"approvedAssets","nameLocation":"5867:14:79","nodeType":"FunctionDefinition","parameters":{"id":21115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21114,"mutability":"mutable","name":"_canonical","nameLocation":"5899:10:79","nodeType":"VariableDeclaration","scope":21130,"src":"5882:27:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":21113,"nodeType":"UserDefinedTypeName","pathNode":{"id":21112,"name":"TokenId","nameLocations":["5882:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"5882:7:79"},"referencedDeclaration":37728,"src":"5882:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"src":"5881:29:79"},"returnParameters":{"id":21118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21117,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21130,"src":"5932:4:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21116,"name":"bool","nodeType":"ElementaryTypeName","src":"5932:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5931:6:79"},"scope":22106,"src":"5858:181:79","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":21146,"nodeType":"Block","src":"6128:79:79","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"expression":{"id":21139,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"6153:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21140,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6155:12:79","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"6153:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":21142,"indexExpression":{"id":21141,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21132,"src":"6168:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6153:20:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":21143,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6174:27:79","memberName":"adoptedToLocalExternalPools","nodeType":"MemberAccess","referencedDeclaration":29388,"src":"6153:48:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21138,"name":"IStableSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27329,"src":"6141:11:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableSwap_$27329_$","typeString":"type(contract IStableSwap)"}},"id":21144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6141:61:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}},"functionReturnParameters":21137,"id":21145,"nodeType":"Return","src":"6134:68:79"}]},"functionSelector":"9b598519","id":21147,"implemented":true,"kind":"function","modifiers":[],"name":"adoptedToLocalExternalPools","nameLocation":"6052:27:79","nodeType":"FunctionDefinition","parameters":{"id":21133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21132,"mutability":"mutable","name":"_key","nameLocation":"6088:4:79","nodeType":"VariableDeclaration","scope":21147,"src":"6080:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21131,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6080:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6079:14:79"},"returnParameters":{"id":21137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21136,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21147,"src":"6115:11:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"},"typeName":{"id":21135,"nodeType":"UserDefinedTypeName","pathNode":{"id":21134,"name":"IStableSwap","nameLocations":["6115:11:79"],"nodeType":"IdentifierPath","referencedDeclaration":27329,"src":"6115:11:79"},"referencedDeclaration":27329,"src":"6115:11:79","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}},"visibility":"internal"}],"src":"6114:13:79"},"scope":22106,"src":"6043:164:79","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":21166,"nodeType":"Block","src":"6311:114:79","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":21159,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21150,"src":"6386:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6397:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"6386:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":21161,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21150,"src":"6401:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6412:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"6401:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":21157,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"6352:10:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":21158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6363:22:79","memberName":"calculateCanonicalHash","nodeType":"MemberAccess","referencedDeclaration":28598,"src":"6352:33:79","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint32) pure returns (bytes32)"}},"id":21163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6352:67:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":21156,"name":"adoptedToLocalExternalPools","nodeType":"Identifier","overloadedDeclarations":[21147,21167],"referencedDeclaration":21147,"src":"6324:27:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_contract$_IStableSwap_$27329_$","typeString":"function (bytes32) view returns (contract IStableSwap)"}},"id":21164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6324:96:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}},"functionReturnParameters":21155,"id":21165,"nodeType":"Return","src":"6317:103:79"}]},"functionSelector":"80dc2248","id":21167,"implemented":true,"kind":"function","modifiers":[],"name":"adoptedToLocalExternalPools","nameLocation":"6220:27:79","nodeType":"FunctionDefinition","parameters":{"id":21151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21150,"mutability":"mutable","name":"_canonical","nameLocation":"6265:10:79","nodeType":"VariableDeclaration","scope":21167,"src":"6248:27:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":21149,"nodeType":"UserDefinedTypeName","pathNode":{"id":21148,"name":"TokenId","nameLocations":["6248:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"6248:7:79"},"referencedDeclaration":37728,"src":"6248:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"src":"6247:29:79"},"returnParameters":{"id":21155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21154,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21167,"src":"6298:11:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"},"typeName":{"id":21153,"nodeType":"UserDefinedTypeName","pathNode":{"id":21152,"name":"IStableSwap","nameLocations":["6298:11:79"],"nodeType":"IdentifierPath","referencedDeclaration":27329,"src":"6298:11:79"},"referencedDeclaration":27329,"src":"6298:11:79","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}},"visibility":"internal"}],"src":"6297:13:79"},"scope":22106,"src":"6211:214:79","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":21180,"nodeType":"Block","src":"6501:48:79","statements":[{"expression":{"expression":{"baseExpression":{"expression":{"id":21174,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"6514:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21175,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6516:12:79","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"6514:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":21177,"indexExpression":{"id":21176,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21169,"src":"6529:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6514:20:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":21178,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6535:9:79","memberName":"custodied","nodeType":"MemberAccess","referencedDeclaration":29394,"src":"6514:30:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21173,"id":21179,"nodeType":"Return","src":"6507:37:79"}]},"functionSelector":"949de969","id":21181,"implemented":true,"kind":"function","modifiers":[],"name":"getCustodiedAmount","nameLocation":"6438:18:79","nodeType":"FunctionDefinition","parameters":{"id":21170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21169,"mutability":"mutable","name":"_key","nameLocation":"6465:4:79","nodeType":"VariableDeclaration","scope":21181,"src":"6457:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21168,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6457:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6456:14:79"},"returnParameters":{"id":21173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21172,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21181,"src":"6492:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21171,"name":"uint256","nodeType":"ElementaryTypeName","src":"6492:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6491:9:79"},"scope":22106,"src":"6429:120:79","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":21320,"nodeType":"Block","src":"8219:1895:79","statements":[{"assignments":[21205],"declarations":[{"constant":false,"id":21205,"mutability":"mutable","name":"key","nameLocation":"8269:3:79","nodeType":"VariableDeclaration","scope":21320,"src":"8261:11:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21204,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8261:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":21213,"initialValue":{"arguments":[{"expression":{"id":21208,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21185,"src":"8309:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8320:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"8309:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":21210,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21185,"src":"8324:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8335:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"8324:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":21206,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"8275:10:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":21207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8286:22:79","memberName":"calculateCanonicalHash","nodeType":"MemberAccess","referencedDeclaration":28598,"src":"8275:33:79","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint32) pure returns (bytes32)"}},"id":21212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8275:67:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"8261:81:79"},{"assignments":[21215],"declarations":[{"constant":false,"id":21215,"mutability":"mutable","name":"onCanonical","nameLocation":"8354:11:79","nodeType":"VariableDeclaration","scope":21320,"src":"8349:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21214,"name":"bool","nodeType":"ElementaryTypeName","src":"8349:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":21221,"initialValue":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":21220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21216,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21185,"src":"8368:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8379:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"8368:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":21218,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"8389:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21219,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8391:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"8389:8:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"8368:29:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"8349:48:79"},{"condition":{"id":21222,"name":"onCanonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21215,"src":"8407:11:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":21318,"nodeType":"Block","src":"9305:805:79","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":21281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"expression":{"id":21272,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9472:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21273,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9474:12:79","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"9472:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":21275,"indexExpression":{"id":21274,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21205,"src":"9487:3:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9472:19:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":21276,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9492:14:79","memberName":"representation","nodeType":"MemberAccess","referencedDeclaration":29380,"src":"9472:34:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":21279,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9518:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":21278,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9510:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21277,"name":"address","nodeType":"ElementaryTypeName","src":"9510:7:79","typeDescriptions":{}}},"id":21280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9510:10:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9472:48:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":21288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"expression":{"id":21282,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"9524:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21283,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9526:12:79","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"9524:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":21285,"indexExpression":{"id":21284,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21205,"src":"9539:3:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9524:19:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":21286,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9544:22:79","memberName":"representationDecimals","nodeType":"MemberAccess","referencedDeclaration":29382,"src":"9524:42:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":21287,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9570:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9524:47:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9472:99:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21294,"nodeType":"IfStatement","src":"9468:176:79","trueBody":{"id":21293,"nodeType":"Block","src":"9573:71:79","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":21290,"name":"TokenFacet__setupAsset_representationListed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20881,"src":"9590:43:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":21291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9590:45:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21292,"nodeType":"RevertStatement","src":"9583:52:79"}]}},{"expression":{"id":21305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21295,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21202,"src":"9703:6:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":21297,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21185,"src":"9743:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9754:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"9743:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":21299,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21185,"src":"9766:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9777:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"9766:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":21301,"name":"_canonicalDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21187,"src":"9793:18:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":21302,"name":"_representationName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21189,"src":"9821:19:79","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":21303,"name":"_representationSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21191,"src":"9850:21:79","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":21296,"name":"_deployRepresentation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22105,"src":"9712:21:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_uint32_$_t_uint8_$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_address_$","typeString":"function (bytes32,uint32,uint8,string memory,string memory) returns (address)"}},"id":21304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9712:167:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9703:176:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":21306,"nodeType":"ExpressionStatement","src":"9703:176:79"},{"expression":{"arguments":[{"hexValue":"66616c7365","id":21308,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9952:5:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":21309,"name":"_canonicalDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21187,"src":"9967:18:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":21310,"name":"_adoptedAssetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21193,"src":"9995:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21311,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21202,"src":"10020:6:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21312,"name":"_stableSwapPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21195,"src":"10036:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21313,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21185,"src":"10061:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},{"hexValue":"30","id":21314,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10081:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":21315,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21205,"src":"10092:3:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":21307,"name":"_enrollAdoptedAndLocalAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21822,"src":"9914:28:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bool_$_t_uint8_$_t_address_$_t_address_$_t_address_$_t_struct$_TokenId_$37728_calldata_ptr_$_t_uint256_$_t_bytes32_$returns$__$","typeString":"function (bool,uint8,address,address,address,struct TokenId calldata,uint256,bytes32)"}},"id":21316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9914:189:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21317,"nodeType":"ExpressionStatement","src":"9914:189:79"}]},"id":21319,"nodeType":"IfStatement","src":"8403:1707:79","trueBody":{"id":21271,"nodeType":"Block","src":"8420:879:79","statements":[{"expression":{"id":21229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21223,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21202,"src":"8498:6:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":21226,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21185,"src":"8534:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8545:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"8534:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":21224,"name":"TypeCasts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50188,"src":"8507:9:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TypeCasts_$50188_$","typeString":"type(library TypeCasts)"}},"id":21225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8517:16:79","memberName":"bytes32ToAddress","nodeType":"MemberAccess","referencedDeclaration":50187,"src":"8507:26:79","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) pure returns (address)"}},"id":21228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8507:41:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8498:50:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":21230,"nodeType":"ExpressionStatement","src":"8498:50:79"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":21236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21231,"name":"_adoptedAssetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21193,"src":"8827:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":21234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8854:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":21233,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8846:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21232,"name":"address","nodeType":"ElementaryTypeName","src":"8846:7:79","typeDescriptions":{}}},"id":21235,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8846:10:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8827:29:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":21239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21237,"name":"_adoptedAssetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21193,"src":"8860:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":21238,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21202,"src":"8879:6:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8860:25:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8827:58:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":21241,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8826:60:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":21247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21242,"name":"_stableSwapPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21195,"src":"8890:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":21245,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8917:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":21244,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8909:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21243,"name":"address","nodeType":"ElementaryTypeName","src":"8909:7:79","typeDescriptions":{}}},"id":21246,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8909:10:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8890:29:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8826:93:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21253,"nodeType":"IfStatement","src":"8822:179:79","trueBody":{"id":21252,"nodeType":"Block","src":"8921:80:79","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":21249,"name":"TokenFacet__setupAsset_invalidCanonicalConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20883,"src":"8938:52:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":21250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8938:54:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21251,"nodeType":"RevertStatement","src":"8931:61:79"}]}},{"expression":{"arguments":[{"hexValue":"74727565","id":21255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9212:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":21256,"name":"_canonicalDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21187,"src":"9218:18:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[{"hexValue":"30","id":21259,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9246:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":21258,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9238:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21257,"name":"address","nodeType":"ElementaryTypeName","src":"9238:7:79","typeDescriptions":{}}},"id":21260,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9238:10:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21261,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21202,"src":"9250:6:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":21264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9266:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":21263,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9258:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21262,"name":"address","nodeType":"ElementaryTypeName","src":"9258:7:79","typeDescriptions":{}}},"id":21265,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9258:10:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21266,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21185,"src":"9270:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},{"id":21267,"name":"_cap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21197,"src":"9282:4:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21268,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21205,"src":"9288:3:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":21254,"name":"_enrollAdoptedAndLocalAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21822,"src":"9183:28:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bool_$_t_uint8_$_t_address_$_t_address_$_t_address_$_t_struct$_TokenId_$37728_calldata_ptr_$_t_uint256_$_t_bytes32_$returns$__$","typeString":"function (bool,uint8,address,address,address,struct TokenId calldata,uint256,bytes32)"}},"id":21269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9183:109:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21270,"nodeType":"ExpressionStatement","src":"9183:109:79"}]}}]},"documentation":{"id":21182,"nodeType":"StructuredDocumentation","src":"6601:1321:79","text":" @notice Used to add supported assets. This is an admin only function\n @dev When allowlisting the canonical asset, all representational assets would be\n allowlisted as well. In the event you have a different adopted asset (i.e. PoS USDC\n on polygon), you should *not* allowlist the adopted asset. The stable swap pool\n address used should allow you to swap between the local <> adopted asset.\n If a representation has been deployed at any point, `setupAssetWithDeployedRepresentation`\n should be used instead.\n The following can only be added on *REMOTE* domains:\n - `_adoptedAssetId`\n - `_stableSwapPool`\n Whereas the `_cap` can only be added on the canonical domain\n @param _canonical - The canonical asset to add by id and domain. All representations\n will be allowlisted as well\n @param _canonicalDecimals - The decimals of the canonical asset (will be used for deployed\n representation)\n @param _representationName - The name to be used for the deployed asset\n @param _representationSymbol - The symbol used for the deployed asset\n @param _adoptedAssetId - The used asset id for this domain (e.g. PoS USDC for\n polygon)\n @param _stableSwapPool - The address of the local stableswap pool, if it exists."},"functionSelector":"b64a5e07","id":21321,"implemented":true,"kind":"function","modifiers":[{"id":21200,"kind":"modifierInvocation","modifierName":{"id":21199,"name":"onlyOwnerOrAdmin","nameLocations":["8177:16:79"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"8177:16:79"},"nodeType":"ModifierInvocation","src":"8177:16:79"}],"name":"setupAsset","nameLocation":"7934:10:79","nodeType":"FunctionDefinition","parameters":{"id":21198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21185,"mutability":"mutable","name":"_canonical","nameLocation":"7967:10:79","nodeType":"VariableDeclaration","scope":21321,"src":"7950:27:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":21184,"nodeType":"UserDefinedTypeName","pathNode":{"id":21183,"name":"TokenId","nameLocations":["7950:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"7950:7:79"},"referencedDeclaration":37728,"src":"7950:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":21187,"mutability":"mutable","name":"_canonicalDecimals","nameLocation":"7989:18:79","nodeType":"VariableDeclaration","scope":21321,"src":"7983:24:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":21186,"name":"uint8","nodeType":"ElementaryTypeName","src":"7983:5:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":21189,"mutability":"mutable","name":"_representationName","nameLocation":"8027:19:79","nodeType":"VariableDeclaration","scope":21321,"src":"8013:33:79","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":21188,"name":"string","nodeType":"ElementaryTypeName","src":"8013:6:79","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":21191,"mutability":"mutable","name":"_representationSymbol","nameLocation":"8066:21:79","nodeType":"VariableDeclaration","scope":21321,"src":"8052:35:79","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":21190,"name":"string","nodeType":"ElementaryTypeName","src":"8052:6:79","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":21193,"mutability":"mutable","name":"_adoptedAssetId","nameLocation":"8101:15:79","nodeType":"VariableDeclaration","scope":21321,"src":"8093:23:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21192,"name":"address","nodeType":"ElementaryTypeName","src":"8093:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21195,"mutability":"mutable","name":"_stableSwapPool","nameLocation":"8130:15:79","nodeType":"VariableDeclaration","scope":21321,"src":"8122:23:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21194,"name":"address","nodeType":"ElementaryTypeName","src":"8122:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21197,"mutability":"mutable","name":"_cap","nameLocation":"8159:4:79","nodeType":"VariableDeclaration","scope":21321,"src":"8151:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21196,"name":"uint256","nodeType":"ElementaryTypeName","src":"8151:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7944:223:79"},"returnParameters":{"id":21203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21202,"mutability":"mutable","name":"_local","nameLocation":"8211:6:79","nodeType":"VariableDeclaration","scope":21321,"src":"8203:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21201,"name":"address","nodeType":"ElementaryTypeName","src":"8203:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8202:16:79"},"scope":22106,"src":"7925:2189:79","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":21386,"nodeType":"Block","src":"11685:634:79","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":21343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21338,"name":"_representation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21327,"src":"11695:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":21341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11722:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":21340,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11714:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21339,"name":"address","nodeType":"ElementaryTypeName","src":"11714:7:79","typeDescriptions":{}}},"id":21342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11714:10:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11695:29:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21348,"nodeType":"IfStatement","src":"11691:129:79","trueBody":{"id":21347,"nodeType":"Block","src":"11726:94:79","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":21344,"name":"TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20885,"src":"11741:70:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":21345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11741:72:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21346,"nodeType":"RevertStatement","src":"11734:79:79"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":21353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21349,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21325,"src":"11830:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11841:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"11830:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":21351,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"11851:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21352,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11853:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"11851:8:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"11830:29:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21358,"nodeType":"IfStatement","src":"11826:125:79","trueBody":{"id":21357,"nodeType":"Block","src":"11861:90:79","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":21354,"name":"TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20887,"src":"11876:66:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":21355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11876:68:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21356,"nodeType":"RevertStatement","src":"11869:75:79"}]}},{"assignments":[21360],"declarations":[{"constant":false,"id":21360,"mutability":"mutable","name":"key","nameLocation":"12001:3:79","nodeType":"VariableDeclaration","scope":21386,"src":"11993:11:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21359,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11993:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":21368,"initialValue":{"arguments":[{"expression":{"id":21363,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21325,"src":"12041:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12052:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"12041:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":21365,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21325,"src":"12056:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12067:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"12056:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":21361,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"12007:10:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":21362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12018:22:79","memberName":"calculateCanonicalHash","nodeType":"MemberAccess","referencedDeclaration":28598,"src":"12007:33:79","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint32) pure returns (bytes32)"}},"id":21367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12007:67:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"11993:81:79"},{"expression":{"arguments":[{"hexValue":"66616c7365","id":21370,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12117:5:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":21372,"name":"_representation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21327,"src":"12145:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21371,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10837,"src":"12130:14:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$10837_$","typeString":"type(contract IERC20Metadata)"}},"id":21373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12130:31:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},"id":21374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12162:8:79","memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":10836,"src":"12130:40:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":21375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12130:42:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":21376,"name":"_adoptedAssetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21329,"src":"12180:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21377,"name":"_representation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21327,"src":"12203:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21378,"name":"_stableSwapPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21331,"src":"12226:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21379,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21325,"src":"12249:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},{"hexValue":"30","id":21380,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12267:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":21381,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21360,"src":"12276:3:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":21369,"name":"_enrollAdoptedAndLocalAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21822,"src":"12081:28:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bool_$_t_uint8_$_t_address_$_t_address_$_t_address_$_t_struct$_TokenId_$37728_calldata_ptr_$_t_uint256_$_t_bytes32_$returns$__$","typeString":"function (bool,uint8,address,address,address,struct TokenId calldata,uint256,bytes32)"}},"id":21382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12081:204:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21383,"nodeType":"ExpressionStatement","src":"12081:204:79"},{"expression":{"id":21384,"name":"_representation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21327,"src":"12299:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":21337,"id":21385,"nodeType":"Return","src":"12292:22:79"}]},"documentation":{"id":21322,"nodeType":"StructuredDocumentation","src":"10118:1350:79","text":" @notice Used to add supported assets, without deploying a unique representation\n asset, and instead using what admins have provided. This is an admin only function\n @dev This function does very minimal checks to ensure the correct `_representation`\n token is used. The only enforced checks are:\n - Bridge can mint, and balance of bridge will increase\n - Bridge can burn, and balance of bridge will decrease\n However, there are many things that must be checked manually to avoid enrolling a bad\n representation:\n - decimals must always be equal to canonical decimals\n - regular `mint`, `burn`, `ERC20` functionality could be implemented improperly\n - the required interface functions (see `IBridgeToken`) may not be implemented\n - upgradeability could interfere with required functionality\n Using this method allows admins to override existing local tokens, and should be used\n carefully.\n @param _canonical - The canonical asset to add by id and domain. All representations\n will be whitelisted as well\n @param _representation - The address of the representative asset\n @param _adoptedAssetId - The used asset id for this domain (e.g. PoS USDC for\n polygon)\n @param _stableSwapPool - The address of the local stableswap pool, if it exists."},"functionSelector":"e1cb3958","id":21387,"implemented":true,"kind":"function","modifiers":[{"id":21334,"kind":"modifierInvocation","modifierName":{"id":21333,"name":"onlyOwnerOrAdmin","nameLocations":["11650:16:79"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"11650:16:79"},"nodeType":"ModifierInvocation","src":"11650:16:79"}],"name":"setupAssetWithDeployedRepresentation","nameLocation":"11480:36:79","nodeType":"FunctionDefinition","parameters":{"id":21332,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21325,"mutability":"mutable","name":"_canonical","nameLocation":"11539:10:79","nodeType":"VariableDeclaration","scope":21387,"src":"11522:27:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":21324,"nodeType":"UserDefinedTypeName","pathNode":{"id":21323,"name":"TokenId","nameLocations":["11522:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"11522:7:79"},"referencedDeclaration":37728,"src":"11522:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":21327,"mutability":"mutable","name":"_representation","nameLocation":"11563:15:79","nodeType":"VariableDeclaration","scope":21387,"src":"11555:23:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21326,"name":"address","nodeType":"ElementaryTypeName","src":"11555:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21329,"mutability":"mutable","name":"_adoptedAssetId","nameLocation":"11592:15:79","nodeType":"VariableDeclaration","scope":21387,"src":"11584:23:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21328,"name":"address","nodeType":"ElementaryTypeName","src":"11584:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21331,"mutability":"mutable","name":"_stableSwapPool","nameLocation":"11621:15:79","nodeType":"VariableDeclaration","scope":21387,"src":"11613:23:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21330,"name":"address","nodeType":"ElementaryTypeName","src":"11613:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11516:124:79"},"returnParameters":{"id":21337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21336,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21387,"src":"11676:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21335,"name":"address","nodeType":"ElementaryTypeName","src":"11676:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11675:9:79"},"scope":22106,"src":"11471:848:79","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":21414,"nodeType":"Block","src":"12591:150:79","statements":[{"assignments":[21399],"declarations":[{"constant":false,"id":21399,"mutability":"mutable","name":"key","nameLocation":"12605:3:79","nodeType":"VariableDeclaration","scope":21414,"src":"12597:11:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21398,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12597:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":21407,"initialValue":{"arguments":[{"expression":{"id":21402,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21391,"src":"12645:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12656:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"12645:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":21404,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21391,"src":"12660:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12671:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"12660:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":21400,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"12611:10:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":21401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12622:22:79","memberName":"calculateCanonicalHash","nodeType":"MemberAccess","referencedDeclaration":28598,"src":"12611:33:79","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint32) pure returns (bytes32)"}},"id":21406,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12611:67:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"12597:81:79"},{"expression":{"arguments":[{"id":21409,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21391,"src":"12703:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},{"id":21410,"name":"_stableSwapPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21393,"src":"12715:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21411,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21399,"src":"12732:3:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":21408,"name":"_addStableSwapPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21854,"src":"12684:18:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_TokenId_$37728_calldata_ptr_$_t_address_$_t_bytes32_$returns$__$","typeString":"function (struct TokenId calldata,address,bytes32)"}},"id":21412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12684:52:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21413,"nodeType":"ExpressionStatement","src":"12684:52:79"}]},"documentation":{"id":21388,"nodeType":"StructuredDocumentation","src":"12323:158:79","text":" @notice Adds a stable swap pool for the local <> adopted asset.\n @dev Must pass in the _canonical information so it can be emitted in event"},"functionSelector":"1506e463","id":21415,"implemented":true,"kind":"function","modifiers":[{"id":21396,"kind":"modifierInvocation","modifierName":{"id":21395,"name":"onlyOwnerOrAdmin","nameLocations":["12574:16:79"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"12574:16:79"},"nodeType":"ModifierInvocation","src":"12574:16:79"}],"name":"addStableSwapPool","nameLocation":"12493:17:79","nodeType":"FunctionDefinition","parameters":{"id":21394,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21391,"mutability":"mutable","name":"_canonical","nameLocation":"12528:10:79","nodeType":"VariableDeclaration","scope":21415,"src":"12511:27:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":21390,"nodeType":"UserDefinedTypeName","pathNode":{"id":21389,"name":"TokenId","nameLocations":["12511:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"12511:7:79"},"referencedDeclaration":37728,"src":"12511:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":21393,"mutability":"mutable","name":"_stableSwapPool","nameLocation":"12548:15:79","nodeType":"VariableDeclaration","scope":21415,"src":"12540:23:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21392,"name":"address","nodeType":"ElementaryTypeName","src":"12540:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12510:54:79"},"returnParameters":{"id":21397,"nodeType":"ParameterList","parameters":[],"src":"12591:0:79"},"scope":22106,"src":"12484:257:79","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":21442,"nodeType":"Block","src":"13007:141:79","statements":[{"assignments":[21427],"declarations":[{"constant":false,"id":21427,"mutability":"mutable","name":"key","nameLocation":"13021:3:79","nodeType":"VariableDeclaration","scope":21442,"src":"13013:11:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21426,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13013:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":21435,"initialValue":{"arguments":[{"expression":{"id":21430,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21419,"src":"13061:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13072:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"13061:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":21432,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21419,"src":"13076:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13087:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"13076:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":21428,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"13027:10:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":21429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13038:22:79","memberName":"calculateCanonicalHash","nodeType":"MemberAccess","referencedDeclaration":28598,"src":"13027:33:79","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint32) pure returns (bytes32)"}},"id":21434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13027:67:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13013:81:79"},{"expression":{"arguments":[{"id":21437,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21419,"src":"13117:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},{"id":21438,"name":"_updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21421,"src":"13129:8:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21439,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21427,"src":"13139:3:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":21436,"name":"_setLiquidityCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21926,"src":"13100:16:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_TokenId_$37728_calldata_ptr_$_t_uint256_$_t_bytes32_$returns$__$","typeString":"function (struct TokenId calldata,uint256,bytes32)"}},"id":21440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13100:43:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21441,"nodeType":"ExpressionStatement","src":"13100:43:79"}]},"documentation":{"id":21416,"nodeType":"StructuredDocumentation","src":"12745:158:79","text":" @notice Adds a stable swap pool for the local <> adopted asset.\n @dev Must pass in the _canonical information so it can be emitted in event"},"functionSelector":"e9d7bcec","id":21443,"implemented":true,"kind":"function","modifiers":[{"id":21424,"kind":"modifierInvocation","modifierName":{"id":21423,"name":"onlyOwnerOrAdmin","nameLocations":["12990:16:79"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"12990:16:79"},"nodeType":"ModifierInvocation","src":"12990:16:79"}],"name":"updateLiquidityCap","nameLocation":"12915:18:79","nodeType":"FunctionDefinition","parameters":{"id":21422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21419,"mutability":"mutable","name":"_canonical","nameLocation":"12951:10:79","nodeType":"VariableDeclaration","scope":21443,"src":"12934:27:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":21418,"nodeType":"UserDefinedTypeName","pathNode":{"id":21417,"name":"TokenId","nameLocations":["12934:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"12934:7:79"},"referencedDeclaration":37728,"src":"12934:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":21421,"mutability":"mutable","name":"_updated","nameLocation":"12971:8:79","nodeType":"VariableDeclaration","scope":21443,"src":"12963:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21420,"name":"uint256","nodeType":"ElementaryTypeName","src":"12963:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12933:47:79"},"returnParameters":{"id":21425,"nodeType":"ParameterList","parameters":[],"src":"13007:0:79"},"scope":22106,"src":"12906:242:79","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":21470,"nodeType":"Block","src":"13577:146:79","statements":[{"assignments":[21457],"declarations":[{"constant":false,"id":21457,"mutability":"mutable","name":"canonical","nameLocation":"13598:9:79","nodeType":"VariableDeclaration","scope":21470,"src":"13583:24:79","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":21456,"nodeType":"UserDefinedTypeName","pathNode":{"id":21455,"name":"TokenId","nameLocations":["13583:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"13583:7:79"},"referencedDeclaration":37728,"src":"13583:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"id":21462,"initialValue":{"baseExpression":{"expression":{"id":21458,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"13610:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21459,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13612:18:79","memberName":"adoptedToCanonical","nodeType":"MemberAccess","referencedDeclaration":29414,"src":"13610:20:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId storage ref)"}},"id":21461,"indexExpression":{"id":21460,"name":"_adoptedAssetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21448,"src":"13631:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13610:37:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage","typeString":"struct TokenId storage ref"}},"nodeType":"VariableDeclarationStatement","src":"13583:64:79"},{"expression":{"arguments":[{"id":21464,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21446,"src":"13668:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":21465,"name":"_adoptedAssetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21448,"src":"13674:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21466,"name":"_representation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21450,"src":"13691:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21467,"name":"canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21457,"src":"13708:9:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}],"id":21463,"name":"_removeAssetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22069,"src":"13653:14:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_struct$_TokenId_$37728_memory_ptr_$returns$__$","typeString":"function (bytes32,address,address,struct TokenId memory)"}},"id":21468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13653:65:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21469,"nodeType":"ExpressionStatement","src":"13653:65:79"}]},"documentation":{"id":21444,"nodeType":"StructuredDocumentation","src":"13152:293:79","text":" @notice Used to remove assets from the allowlist\n @param _key - The hash of the canonical id and domain to remove (mapping key)\n @param _adoptedAssetId - Corresponding adopted asset to remove\n @param _representation - Corresponding representation asset to remove"},"functionSelector":"a1b19301","id":21471,"implemented":true,"kind":"function","modifiers":[{"id":21453,"kind":"modifierInvocation","modifierName":{"id":21452,"name":"onlyOwnerOrAdmin","nameLocations":["13560:16:79"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"13560:16:79"},"nodeType":"ModifierInvocation","src":"13560:16:79"}],"name":"removeAssetId","nameLocation":"13457:13:79","nodeType":"FunctionDefinition","parameters":{"id":21451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21446,"mutability":"mutable","name":"_key","nameLocation":"13484:4:79","nodeType":"VariableDeclaration","scope":21471,"src":"13476:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21445,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13476:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":21448,"mutability":"mutable","name":"_adoptedAssetId","nameLocation":"13502:15:79","nodeType":"VariableDeclaration","scope":21471,"src":"13494:23:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21447,"name":"address","nodeType":"ElementaryTypeName","src":"13494:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21450,"mutability":"mutable","name":"_representation","nameLocation":"13531:15:79","nodeType":"VariableDeclaration","scope":21471,"src":"13523:23:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21449,"name":"address","nodeType":"ElementaryTypeName","src":"13523:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13470:80:79"},"returnParameters":{"id":21454,"nodeType":"ParameterList","parameters":[],"src":"13577:0:79"},"scope":22106,"src":"13448:275:79","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":21501,"nodeType":"Block","src":"14143:163:79","statements":[{"assignments":[21485],"declarations":[{"constant":false,"id":21485,"mutability":"mutable","name":"key","nameLocation":"14157:3:79","nodeType":"VariableDeclaration","scope":21501,"src":"14149:11:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21484,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14149:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":21493,"initialValue":{"arguments":[{"expression":{"id":21488,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21475,"src":"14197:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14208:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"14197:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":21490,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21475,"src":"14212:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14223:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"14212:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":21486,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"14163:10:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":21487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14174:22:79","memberName":"calculateCanonicalHash","nodeType":"MemberAccess","referencedDeclaration":28598,"src":"14163:33:79","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint32) pure returns (bytes32)"}},"id":21492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14163:67:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"14149:81:79"},{"expression":{"arguments":[{"id":21495,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21485,"src":"14251:3:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":21496,"name":"_adoptedAssetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21477,"src":"14256:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21497,"name":"_representation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21479,"src":"14273:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21498,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21475,"src":"14290:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}],"id":21494,"name":"_removeAssetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22069,"src":"14236:14:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_struct$_TokenId_$37728_memory_ptr_$returns$__$","typeString":"function (bytes32,address,address,struct TokenId memory)"}},"id":21499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14236:65:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21500,"nodeType":"ExpressionStatement","src":"14236:65:79"}]},"documentation":{"id":21472,"nodeType":"StructuredDocumentation","src":"13727:269:79","text":" @notice Used to remove assets from the allowlist\n @param _canonical - The canonical id and domain to remove\n @param _adoptedAssetId - Corresponding adopted asset to remove\n @param _representation - Corresponding representation asset to remove"},"functionSelector":"5a2164e5","id":21502,"implemented":true,"kind":"function","modifiers":[{"id":21482,"kind":"modifierInvocation","modifierName":{"id":21481,"name":"onlyOwnerOrAdmin","nameLocations":["14126:16:79"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"14126:16:79"},"nodeType":"ModifierInvocation","src":"14126:16:79"}],"name":"removeAssetId","nameLocation":"14008:13:79","nodeType":"FunctionDefinition","parameters":{"id":21480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21475,"mutability":"mutable","name":"_canonical","nameLocation":"14044:10:79","nodeType":"VariableDeclaration","scope":21502,"src":"14027:27:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":21474,"nodeType":"UserDefinedTypeName","pathNode":{"id":21473,"name":"TokenId","nameLocations":["14027:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"14027:7:79"},"referencedDeclaration":37728,"src":"14027:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":21477,"mutability":"mutable","name":"_adoptedAssetId","nameLocation":"14068:15:79","nodeType":"VariableDeclaration","scope":21502,"src":"14060:23:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21476,"name":"address","nodeType":"ElementaryTypeName","src":"14060:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21479,"mutability":"mutable","name":"_representation","nameLocation":"14097:15:79","nodeType":"VariableDeclaration","scope":21502,"src":"14089:23:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21478,"name":"address","nodeType":"ElementaryTypeName","src":"14089:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14021:95:79"},"returnParameters":{"id":21483,"nodeType":"ParameterList","parameters":[],"src":"14143:0:79"},"scope":22106,"src":"13999:307:79","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":21573,"nodeType":"Block","src":"14658:732:79","statements":[{"assignments":[21516],"declarations":[{"constant":false,"id":21516,"mutability":"mutable","name":"key","nameLocation":"14672:3:79","nodeType":"VariableDeclaration","scope":21573,"src":"14664:11:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21515,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14664:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":21524,"initialValue":{"arguments":[{"expression":{"id":21519,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21506,"src":"14712:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14723:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"14712:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":21521,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21506,"src":"14727:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14738:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"14727:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":21517,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"14678:10:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":21518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14689:22:79","memberName":"calculateCanonicalHash","nodeType":"MemberAccess","referencedDeclaration":28598,"src":"14678:33:79","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (bytes32,uint32) pure returns (bytes32)"}},"id":21523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14678:67:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"14664:81:79"},{"assignments":[21526],"declarations":[{"constant":false,"id":21526,"mutability":"mutable","name":"local","nameLocation":"14759:5:79","nodeType":"VariableDeclaration","scope":21573,"src":"14751:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21525,"name":"address","nodeType":"ElementaryTypeName","src":"14751:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":21532,"initialValue":{"expression":{"arguments":[{"id":21529,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21516,"src":"14788:3:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":21527,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"14767:10:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":21528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14778:9:79","memberName":"getConfig","nodeType":"MemberAccess","referencedDeclaration":27701,"src":"14767:20:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_struct$_TokenConfig_$29395_storage_ptr_$","typeString":"function (bytes32) view returns (struct TokenConfig storage pointer)"}},"id":21530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14767:25:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":21531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14793:14:79","memberName":"representation","nodeType":"MemberAccess","referencedDeclaration":29380,"src":"14767:40:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"14751:56:79"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":21538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21533,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21526,"src":"14817:5:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":21536,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14834:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":21535,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14826:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21534,"name":"address","nodeType":"ElementaryTypeName","src":"14826:7:79","typeDescriptions":{}}},"id":21537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14826:10:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14817:19:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21543,"nodeType":"IfStatement","src":"14813:88:79","trueBody":{"id":21542,"nodeType":"Block","src":"14838:63:79","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":21539,"name":"TokenFacet__updateDetails_localNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20873,"src":"14853:39:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":21540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14853:41:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21541,"nodeType":"RevertStatement","src":"14846:48:79"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":21548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21544,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"14952:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21545,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14954:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"14952:8:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":21546,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21506,"src":"14964:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14975:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"14964:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"14952:29:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21553,"nodeType":"IfStatement","src":"14948:95:79","trueBody":{"id":21552,"nodeType":"Block","src":"14983:60:79","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":21549,"name":"TokenFacet__updateDetails_onlyRemote","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20875,"src":"14998:36:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":21550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14998:38:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21551,"nodeType":"RevertStatement","src":"14991:45:79"}]}},{"condition":{"id":21559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"15198:29:79","subExpression":{"expression":{"baseExpression":{"expression":{"id":21554,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"15199:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21555,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15201:12:79","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"15199:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":21557,"indexExpression":{"id":21556,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21516,"src":"15214:3:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15199:19:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":21558,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15219:8:79","memberName":"approval","nodeType":"MemberAccess","referencedDeclaration":29390,"src":"15199:28:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21564,"nodeType":"IfStatement","src":"15194:96:79","trueBody":{"id":21563,"nodeType":"Block","src":"15229:61:79","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":21560,"name":"TokenFacet__updateDetails_notApproved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20877,"src":"15244:37:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":21561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15244:39:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21562,"nodeType":"RevertStatement","src":"15237:46:79"}]}},{"expression":{"arguments":[{"id":21569,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21508,"src":"15370:5:79","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":21570,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21510,"src":"15377:7:79","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"arguments":[{"id":21566,"name":"local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21526,"src":"15352:5:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21565,"name":"IBridgeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25890,"src":"15339:12:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBridgeToken_$25890_$","typeString":"type(contract IBridgeToken)"}},"id":21567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15339:19:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBridgeToken_$25890","typeString":"contract IBridgeToken"}},"id":21568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15359:10:79","memberName":"setDetails","nodeType":"MemberAccess","referencedDeclaration":25889,"src":"15339:30:79","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory) external"}},"id":21571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15339:46:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21572,"nodeType":"ExpressionStatement","src":"15339:46:79"}]},"documentation":{"id":21503,"nodeType":"StructuredDocumentation","src":"14310:207:79","text":" @notice Used to update the name and symbol of a local token\n @param _canonical - The canonical id and domain to remove\n @param _name - The new name\n @param _symbol - The new symbol"},"functionSelector":"c4058429","id":21574,"implemented":true,"kind":"function","modifiers":[{"id":21513,"kind":"modifierInvocation","modifierName":{"id":21512,"name":"onlyOwnerOrAdmin","nameLocations":["14641:16:79"],"nodeType":"IdentifierPath","referencedDeclaration":13902,"src":"14641:16:79"},"nodeType":"ModifierInvocation","src":"14641:16:79"}],"name":"updateDetails","nameLocation":"14529:13:79","nodeType":"FunctionDefinition","parameters":{"id":21511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21506,"mutability":"mutable","name":"_canonical","nameLocation":"14565:10:79","nodeType":"VariableDeclaration","scope":21574,"src":"14548:27:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":21505,"nodeType":"UserDefinedTypeName","pathNode":{"id":21504,"name":"TokenId","nameLocations":["14548:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"14548:7:79"},"referencedDeclaration":37728,"src":"14548:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":21508,"mutability":"mutable","name":"_name","nameLocation":"14595:5:79","nodeType":"VariableDeclaration","scope":21574,"src":"14581:19:79","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":21507,"name":"string","nodeType":"ElementaryTypeName","src":"14581:6:79","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":21510,"mutability":"mutable","name":"_symbol","nameLocation":"14620:7:79","nodeType":"VariableDeclaration","scope":21574,"src":"14606:21:79","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":21509,"name":"string","nodeType":"ElementaryTypeName","src":"14606:6:79","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"14542:89:79"},"returnParameters":{"id":21514,"nodeType":"ParameterList","parameters":[],"src":"14658:0:79"},"scope":22106,"src":"14520:870:79","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":21821,"nodeType":"Block","src":"15684:2636:79","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":21597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21594,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21587,"src":"15750:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15761:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"15750:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":21596,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15771:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"15750:22:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":21604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21598,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21587,"src":"15776:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15787:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"15776:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"","id":21602,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15801:2:79","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":21601,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15793:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":21600,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15793:7:79","typeDescriptions":{}}},"id":21603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15793:11:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"15776:28:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15750:54:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21610,"nodeType":"IfStatement","src":"15746:138:79","trueBody":{"id":21609,"nodeType":"Block","src":"15806:78:79","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":21606,"name":"TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20879,"src":"15821:54:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":21607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15821:56:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21608,"nodeType":"RevertStatement","src":"15814:63:79"}]}},{"assignments":[21612],"declarations":[{"constant":false,"id":21612,"mutability":"mutable","name":"adoptedIsLocal","nameLocation":"15919:14:79","nodeType":"VariableDeclaration","scope":21821,"src":"15914:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21611,"name":"bool","nodeType":"ElementaryTypeName","src":"15914:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":21619,"initialValue":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":21618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21613,"name":"_adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21580,"src":"15936:8:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":21616,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15956:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":21615,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15948:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21614,"name":"address","nodeType":"ElementaryTypeName","src":"15948:7:79","typeDescriptions":{}}},"id":21617,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15948:10:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15936:22:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"15914:44:79"},{"assignments":[21621],"declarations":[{"constant":false,"id":21621,"mutability":"mutable","name":"adopted","nameLocation":"15972:7:79","nodeType":"VariableDeclaration","scope":21821,"src":"15964:15:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21620,"name":"address","nodeType":"ElementaryTypeName","src":"15964:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":21626,"initialValue":{"condition":{"id":21622,"name":"adoptedIsLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21612,"src":"15982:14:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":21624,"name":"_adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21580,"src":"16008:8:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":21625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"15982:34:79","trueExpression":{"id":21623,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21582,"src":"15999:6:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"15964:52:79"},{"assignments":[21628],"declarations":[{"constant":false,"id":21628,"mutability":"mutable","name":"onCanonical","nameLocation":"16068:11:79","nodeType":"VariableDeclaration","scope":21821,"src":"16063:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21627,"name":"bool","nodeType":"ElementaryTypeName","src":"16063:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":21634,"initialValue":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":21633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21629,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"16082:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21630,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16084:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"16082:8:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":21631,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21587,"src":"16094:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16105:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"16094:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"16082:29:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"16063:48:79"},{"condition":{"expression":{"baseExpression":{"expression":{"id":21635,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"16158:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21636,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16160:12:79","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"16158:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":21638,"indexExpression":{"id":21637,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21591,"src":"16173:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16158:20:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":21639,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16179:8:79","memberName":"approval","nodeType":"MemberAccess","referencedDeclaration":29390,"src":"16158:29:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21643,"nodeType":"IfStatement","src":"16154:79:79","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":21640,"name":"TokenFacet__addAssetId_alreadyAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20861,"src":"16196:35:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":21641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16196:37:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21642,"nodeType":"RevertStatement","src":"16189:44:79"}},{"condition":{"id":21645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"16298:12:79","subExpression":{"id":21644,"name":"onCanonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21628,"src":"16299:11:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21714,"nodeType":"IfStatement","src":"16294:457:79","trueBody":{"id":21713,"nodeType":"Block","src":"16312:439:79","statements":[{"assignments":[21648],"declarations":[{"constant":false,"id":21648,"mutability":"mutable","name":"candidate","nameLocation":"16333:9:79","nodeType":"VariableDeclaration","scope":21713,"src":"16320:22:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBridgeToken_$25890","typeString":"contract IBridgeToken"},"typeName":{"id":21647,"nodeType":"UserDefinedTypeName","pathNode":{"id":21646,"name":"IBridgeToken","nameLocations":["16320:12:79"],"nodeType":"IdentifierPath","referencedDeclaration":25890,"src":"16320:12:79"},"referencedDeclaration":25890,"src":"16320:12:79","typeDescriptions":{"typeIdentifier":"t_contract$_IBridgeToken_$25890","typeString":"contract IBridgeToken"}},"visibility":"internal"}],"id":21652,"initialValue":{"arguments":[{"id":21650,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21582,"src":"16358:6:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21649,"name":"IBridgeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25890,"src":"16345:12:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBridgeToken_$25890_$","typeString":"type(contract IBridgeToken)"}},"id":21651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16345:20:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBridgeToken_$25890","typeString":"contract IBridgeToken"}},"nodeType":"VariableDeclarationStatement","src":"16320:45:79"},{"assignments":[21654],"declarations":[{"constant":false,"id":21654,"mutability":"mutable","name":"starting","nameLocation":"16381:8:79","nodeType":"VariableDeclaration","scope":21713,"src":"16373:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21653,"name":"uint256","nodeType":"ElementaryTypeName","src":"16373:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21662,"initialValue":{"arguments":[{"arguments":[{"id":21659,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16420:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_TokenFacet_$22106","typeString":"contract TokenFacet"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TokenFacet_$22106","typeString":"contract TokenFacet"}],"id":21658,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16412:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21657,"name":"address","nodeType":"ElementaryTypeName","src":"16412:7:79","typeDescriptions":{}}},"id":21660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16412:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":21655,"name":"candidate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21648,"src":"16392:9:79","typeDescriptions":{"typeIdentifier":"t_contract$_IBridgeToken_$25890","typeString":"contract IBridgeToken"}},"id":21656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16402:9:79","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10769,"src":"16392:19:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":21661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16392:34:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16373:53:79"},{"expression":{"arguments":[{"arguments":[{"id":21668,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16457:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_TokenFacet_$22106","typeString":"contract TokenFacet"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TokenFacet_$22106","typeString":"contract TokenFacet"}],"id":21667,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16449:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21666,"name":"address","nodeType":"ElementaryTypeName","src":"16449:7:79","typeDescriptions":{}}},"id":21669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16449:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"31","id":21670,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16464:1:79","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":21663,"name":"candidate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21648,"src":"16434:9:79","typeDescriptions":{"typeIdentifier":"t_contract$_IBridgeToken_$25890","typeString":"contract IBridgeToken"}},"id":21665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16444:4:79","memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":25882,"src":"16434:14:79","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":21671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16434:32:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21672,"nodeType":"ExpressionStatement","src":"16434:32:79"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":21677,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16506:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_TokenFacet_$22106","typeString":"contract TokenFacet"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TokenFacet_$22106","typeString":"contract TokenFacet"}],"id":21676,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16498:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21675,"name":"address","nodeType":"ElementaryTypeName","src":"16498:7:79","typeDescriptions":{}}},"id":21678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16498:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":21673,"name":"candidate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21648,"src":"16478:9:79","typeDescriptions":{"typeIdentifier":"t_contract$_IBridgeToken_$25890","typeString":"contract IBridgeToken"}},"id":21674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16488:9:79","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10769,"src":"16478:19:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":21679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16478:34:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21680,"name":"starting","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21654,"src":"16516:8:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":21681,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16527:1:79","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"16516:12:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16478:50:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21688,"nodeType":"IfStatement","src":"16474:114:79","trueBody":{"id":21687,"nodeType":"Block","src":"16530:58:79","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":21684,"name":"TokenFacet__addAssetId_badMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20863,"src":"16547:30:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":21685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16547:32:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21686,"nodeType":"RevertStatement","src":"16540:39:79"}]}},{"expression":{"arguments":[{"arguments":[{"id":21694,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16618:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_TokenFacet_$22106","typeString":"contract TokenFacet"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TokenFacet_$22106","typeString":"contract TokenFacet"}],"id":21693,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16610:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21692,"name":"address","nodeType":"ElementaryTypeName","src":"16610:7:79","typeDescriptions":{}}},"id":21695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16610:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"31","id":21696,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16625:1:79","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":21689,"name":"candidate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21648,"src":"16595:9:79","typeDescriptions":{"typeIdentifier":"t_contract$_IBridgeToken_$25890","typeString":"contract IBridgeToken"}},"id":21691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16605:4:79","memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":25875,"src":"16595:14:79","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":21697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16595:32:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21698,"nodeType":"ExpressionStatement","src":"16595:32:79"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":21703,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16667:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_TokenFacet_$22106","typeString":"contract TokenFacet"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TokenFacet_$22106","typeString":"contract TokenFacet"}],"id":21702,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16659:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21701,"name":"address","nodeType":"ElementaryTypeName","src":"16659:7:79","typeDescriptions":{}}},"id":21704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16659:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":21699,"name":"candidate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21648,"src":"16639:9:79","typeDescriptions":{"typeIdentifier":"t_contract$_IBridgeToken_$25890","typeString":"contract IBridgeToken"}},"id":21700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16649:9:79","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10769,"src":"16639:19:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":21705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16639:34:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":21706,"name":"starting","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21654,"src":"16677:8:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16639:46:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21712,"nodeType":"IfStatement","src":"16635:110:79","trueBody":{"id":21711,"nodeType":"Block","src":"16687:58:79","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":21708,"name":"TokenFacet__addAssetId_badBurn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20865,"src":"16704:30:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":21709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16704:32:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21710,"nodeType":"RevertStatement","src":"16697:39:79"}]}}]}},{"expression":{"id":21746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":21715,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"17025:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21718,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17027:12:79","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"17025:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":21719,"indexExpression":{"id":21717,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21591,"src":"17040:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"17025:20:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"condition":{"id":21721,"name":"_onCanonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21576,"src":"17067:12:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":21726,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21582,"src":"17095:6:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":21727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"17067:34:79","trueExpression":{"arguments":[{"hexValue":"30","id":21724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17090:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":21723,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17082:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21722,"name":"address","nodeType":"ElementaryTypeName","src":"17082:7:79","typeDescriptions":{}}},"id":21725,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17082:10:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21728,"name":"_localDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21578,"src":"17127:14:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":21729,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21621,"src":"17175:7:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"condition":{"id":21730,"name":"adoptedIsLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21612,"src":"17201:14:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":21733,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21621,"src":"17250:7:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21732,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10837,"src":"17235:14:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$10837_$","typeString":"type(contract IERC20Metadata)"}},"id":21734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17235:23:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},"id":21735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17259:8:79","memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":10836,"src":"17235:32:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":21736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17235:34:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":21737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"17201:68:79","trueExpression":{"id":21731,"name":"_localDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21578,"src":"17218:14:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[{"hexValue":"30","id":21740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17304:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":21739,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17296:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21738,"name":"address","nodeType":"ElementaryTypeName","src":"17296:7:79","typeDescriptions":{}}},"id":21741,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17296:10:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"74727565","id":21742,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17355:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"30","id":21743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17379:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":21744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17405:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":21720,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29395,"src":"17048:11:79","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_TokenConfig_$29395_storage_ptr_$","typeString":"type(struct TokenConfig storage pointer)"}},"id":21745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17048:387:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_memory_ptr","typeString":"struct TokenConfig memory"}},"src":"17025:410:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":21747,"nodeType":"ExpressionStatement","src":"17025:410:79"},{"expression":{"id":21756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":21748,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"17572:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21751,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17574:18:79","memberName":"adoptedToCanonical","nodeType":"MemberAccess","referencedDeclaration":29414,"src":"17572:20:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId storage ref)"}},"id":21752,"indexExpression":{"id":21750,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21621,"src":"17593:7:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17572:29:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage","typeString":"struct TokenId storage ref"}},"id":21753,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"17602:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"17572:36:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":21754,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21587,"src":"17611:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17622:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"17611:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"17572:56:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":21757,"nodeType":"ExpressionStatement","src":"17572:56:79"},{"expression":{"id":21766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":21758,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"17634:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21761,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17636:18:79","memberName":"adoptedToCanonical","nodeType":"MemberAccess","referencedDeclaration":29414,"src":"17634:20:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId storage ref)"}},"id":21762,"indexExpression":{"id":21760,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21621,"src":"17655:7:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17634:29:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage","typeString":"struct TokenId storage ref"}},"id":21763,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"17664:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"17634:32:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":21764,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21587,"src":"17669:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17680:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"17669:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"17634:48:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":21767,"nodeType":"ExpressionStatement","src":"17634:48:79"},{"condition":{"id":21769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"17693:13:79","subExpression":{"id":21768,"name":"_onCanonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21576,"src":"17694:12:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21797,"name":"_cap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21589,"src":"18094:4:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":21798,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18101:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18094:8:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21807,"nodeType":"IfStatement","src":"18090:117:79","trueBody":{"id":21806,"nodeType":"Block","src":"18104:103:79","statements":[{"expression":{"arguments":[{"id":21801,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21587,"src":"18177:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},{"id":21802,"name":"_cap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21589,"src":"18189:4:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21803,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21591,"src":"18195:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":21800,"name":"_setLiquidityCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21926,"src":"18160:16:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_TokenId_$37728_calldata_ptr_$_t_uint256_$_t_bytes32_$returns$__$","typeString":"function (struct TokenId calldata,uint256,bytes32)"}},"id":21804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18160:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21805,"nodeType":"ExpressionStatement","src":"18160:40:79"}]}},"id":21808,"nodeType":"IfStatement","src":"17689:518:79","trueBody":{"id":21796,"nodeType":"Block","src":"17708:376:79","statements":[{"expression":{"id":21778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":21770,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"17809:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21773,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17811:25:79","memberName":"representationToCanonical","nodeType":"MemberAccess","referencedDeclaration":29420,"src":"17809:27:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId storage ref)"}},"id":21774,"indexExpression":{"id":21772,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21582,"src":"17837:6:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17809:35:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage","typeString":"struct TokenId storage ref"}},"id":21775,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"17845:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"17809:42:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":21776,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21587,"src":"17854:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17865:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"17854:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"17809:62:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":21779,"nodeType":"ExpressionStatement","src":"17809:62:79"},{"expression":{"id":21788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":21780,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"17879:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21783,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17881:25:79","memberName":"representationToCanonical","nodeType":"MemberAccess","referencedDeclaration":29420,"src":"17879:27:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId storage ref)"}},"id":21784,"indexExpression":{"id":21782,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21582,"src":"17907:6:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17879:35:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage","typeString":"struct TokenId storage ref"}},"id":21785,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"17915:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"17879:38:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":21786,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21587,"src":"17920:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17931:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"17920:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"17879:54:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":21789,"nodeType":"ExpressionStatement","src":"17879:54:79"},{"expression":{"arguments":[{"id":21791,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21587,"src":"18043:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},{"id":21792,"name":"_stableSwapPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21584,"src":"18055:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21793,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21591,"src":"18072:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":21790,"name":"_addStableSwapPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21854,"src":"18024:18:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_TokenId_$37728_calldata_ptr_$_t_address_$_t_bytes32_$returns$__$","typeString":"function (struct TokenId calldata,address,bytes32)"}},"id":21794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18024:53:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21795,"nodeType":"ExpressionStatement","src":"18024:53:79"}]}},{"eventCall":{"arguments":[{"id":21810,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21591,"src":"18247:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":21811,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21587,"src":"18253:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18264:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"18253:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":21813,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21587,"src":"18268:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18279:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"18268:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":21815,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21621,"src":"18287:7:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21816,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21582,"src":"18296:6:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21817,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18304:3:79","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18308:6:79","memberName":"sender","nodeType":"MemberAccess","src":"18304:10:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21809,"name":"AssetAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20939,"src":"18236:10:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,bytes32,uint32,address,address,address)"}},"id":21819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18236:79:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21820,"nodeType":"EmitStatement","src":"18231:84:79"}]},"id":21822,"implemented":true,"kind":"function","modifiers":[],"name":"_enrollAdoptedAndLocalAssets","nameLocation":"15453:28:79","nodeType":"FunctionDefinition","parameters":{"id":21592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21576,"mutability":"mutable","name":"_onCanonical","nameLocation":"15492:12:79","nodeType":"VariableDeclaration","scope":21822,"src":"15487:17:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21575,"name":"bool","nodeType":"ElementaryTypeName","src":"15487:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":21578,"mutability":"mutable","name":"_localDecimals","nameLocation":"15516:14:79","nodeType":"VariableDeclaration","scope":21822,"src":"15510:20:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":21577,"name":"uint8","nodeType":"ElementaryTypeName","src":"15510:5:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":21580,"mutability":"mutable","name":"_adopted","nameLocation":"15544:8:79","nodeType":"VariableDeclaration","scope":21822,"src":"15536:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21579,"name":"address","nodeType":"ElementaryTypeName","src":"15536:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21582,"mutability":"mutable","name":"_local","nameLocation":"15566:6:79","nodeType":"VariableDeclaration","scope":21822,"src":"15558:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21581,"name":"address","nodeType":"ElementaryTypeName","src":"15558:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21584,"mutability":"mutable","name":"_stableSwapPool","nameLocation":"15586:15:79","nodeType":"VariableDeclaration","scope":21822,"src":"15578:23:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21583,"name":"address","nodeType":"ElementaryTypeName","src":"15578:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21587,"mutability":"mutable","name":"_canonical","nameLocation":"15624:10:79","nodeType":"VariableDeclaration","scope":21822,"src":"15607:27:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":21586,"nodeType":"UserDefinedTypeName","pathNode":{"id":21585,"name":"TokenId","nameLocations":["15607:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"15607:7:79"},"referencedDeclaration":37728,"src":"15607:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":21589,"mutability":"mutable","name":"_cap","nameLocation":"15648:4:79","nodeType":"VariableDeclaration","scope":21822,"src":"15640:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21588,"name":"uint256","nodeType":"ElementaryTypeName","src":"15640:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21591,"mutability":"mutable","name":"_key","nameLocation":"15666:4:79","nodeType":"VariableDeclaration","scope":21822,"src":"15658:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21590,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15658:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15481:193:79"},"returnParameters":{"id":21593,"nodeType":"ParameterList","parameters":[],"src":"15684:0:79"},"scope":22106,"src":"15444:2876:79","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21853,"nodeType":"Block","src":"18698:214:79","statements":[{"expression":{"id":21840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":21833,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"18735:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21836,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18737:12:79","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"18735:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":21837,"indexExpression":{"id":21835,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21830,"src":"18750:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18735:20:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":21838,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"18756:27:79","memberName":"adoptedToLocalExternalPools","nodeType":"MemberAccess","referencedDeclaration":29388,"src":"18735:48:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21839,"name":"_stableSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21828,"src":"18786:11:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18735:62:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":21841,"nodeType":"ExpressionStatement","src":"18735:62:79"},{"eventCall":{"arguments":[{"id":21843,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21830,"src":"18843:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":21844,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21826,"src":"18849:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18860:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"18849:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":21846,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21826,"src":"18864:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18875:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"18864:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":21848,"name":"_stableSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21828,"src":"18883:11:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21849,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18896:3:79","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18900:6:79","memberName":"sender","nodeType":"MemberAccess","src":"18896:10:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21842,"name":"StableSwapAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20911,"src":"18827:15:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint32_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,bytes32,uint32,address,address)"}},"id":21851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18827:80:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21852,"nodeType":"EmitStatement","src":"18822:85:79"}]},"documentation":{"id":21823,"nodeType":"StructuredDocumentation","src":"18324:254:79","text":" @notice Used to add an AMM for adopted <> local assets\n @param _canonical - The canonical TokenId to add (domain and id)\n @param _stableSwap - The address of the amm to add\n @param _key - The hash of the canonical id and domain"},"id":21854,"implemented":true,"kind":"function","modifiers":[],"name":"_addStableSwapPool","nameLocation":"18590:18:79","nodeType":"FunctionDefinition","parameters":{"id":21831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21826,"mutability":"mutable","name":"_canonical","nameLocation":"18631:10:79","nodeType":"VariableDeclaration","scope":21854,"src":"18614:27:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":21825,"nodeType":"UserDefinedTypeName","pathNode":{"id":21824,"name":"TokenId","nameLocations":["18614:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"18614:7:79"},"referencedDeclaration":37728,"src":"18614:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":21828,"mutability":"mutable","name":"_stableSwap","nameLocation":"18655:11:79","nodeType":"VariableDeclaration","scope":21854,"src":"18647:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21827,"name":"address","nodeType":"ElementaryTypeName","src":"18647:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21830,"mutability":"mutable","name":"_key","nameLocation":"18680:4:79","nodeType":"VariableDeclaration","scope":21854,"src":"18672:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21829,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18672:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"18608:80:79"},"returnParameters":{"id":21832,"nodeType":"ParameterList","parameters":[],"src":"18698:0:79"},"scope":22106,"src":"18581:331:79","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21925,"nodeType":"Block","src":"19841:540:79","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":21869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21865,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"19851:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21866,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19853:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"19851:8:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":21867,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21858,"src":"19863:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19874:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"19863:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"19851:29:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21874,"nodeType":"IfStatement","src":"19847:105:79","trueBody":{"id":21873,"nodeType":"Block","src":"19882:70:79","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":21870,"name":"TokenFacet__setLiquidityCap_notCanonicalDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20889,"src":"19897:46:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":21871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19897:48:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21872,"nodeType":"RevertStatement","src":"19890:55:79"}]}},{"expression":{"id":21882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":21875,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"19986:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21878,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19988:12:79","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"19986:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":21879,"indexExpression":{"id":21877,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21862,"src":"20001:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19986:20:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":21880,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"20007:3:79","memberName":"cap","nodeType":"MemberAccess","referencedDeclaration":29392,"src":"19986:24:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21881,"name":"_updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21860,"src":"20013:8:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19986:35:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21883,"nodeType":"ExpressionStatement","src":"19986:35:79"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21884,"name":"_updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21860,"src":"20032:8:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":21885,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20043:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20032:12:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21913,"nodeType":"IfStatement","src":"20028:256:79","trueBody":{"id":21912,"nodeType":"Block","src":"20046:238:79","statements":[{"assignments":[21888],"declarations":[{"constant":false,"id":21888,"mutability":"mutable","name":"canonical","nameLocation":"20133:9:79","nodeType":"VariableDeclaration","scope":21912,"src":"20125:17:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21887,"name":"address","nodeType":"ElementaryTypeName","src":"20125:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":21894,"initialValue":{"arguments":[{"expression":{"id":21891,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21858,"src":"20172:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20183:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"20172:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":21889,"name":"TypeCasts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50188,"src":"20145:9:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TypeCasts_$50188_$","typeString":"type(library TypeCasts)"}},"id":21890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20155:16:79","memberName":"bytes32ToAddress","nodeType":"MemberAccess","referencedDeclaration":50187,"src":"20145:26:79","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) pure returns (address)"}},"id":21893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20145:41:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"20125:61:79"},{"expression":{"id":21910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":21895,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"20194:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21898,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20196:12:79","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"20194:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":21899,"indexExpression":{"id":21897,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21862,"src":"20209:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20194:20:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":21900,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"20215:9:79","memberName":"custodied","nodeType":"MemberAccess","referencedDeclaration":29394,"src":"20194:30:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":21907,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"20271:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_TokenFacet_$22106","typeString":"contract TokenFacet"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TokenFacet_$22106","typeString":"contract TokenFacet"}],"id":21906,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20263:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21905,"name":"address","nodeType":"ElementaryTypeName","src":"20263:7:79","typeDescriptions":{}}},"id":21908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20263:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":21902,"name":"canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21888,"src":"20242:9:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21901,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10837,"src":"20227:14:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$10837_$","typeString":"type(contract IERC20Metadata)"}},"id":21903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20227:25:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},"id":21904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20253:9:79","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10769,"src":"20227:35:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":21909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20227:50:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20194:83:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21911,"nodeType":"ExpressionStatement","src":"20194:83:79"}]}},{"eventCall":{"arguments":[{"id":21915,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21862,"src":"20315:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":21916,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21858,"src":"20321:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20332:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"20321:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":21918,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21858,"src":"20336:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId calldata"}},"id":21919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20347:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"20336:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":21920,"name":"_updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21860,"src":"20355:8:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":21921,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"20365:3:79","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20369:6:79","memberName":"sender","nodeType":"MemberAccess","src":"20365:10:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21914,"name":"LiquidityCapUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20924,"src":"20295:19:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint32_$_t_uint256_$_t_address_$returns$__$","typeString":"function (bytes32,bytes32,uint32,uint256,address)"}},"id":21923,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20295:81:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21924,"nodeType":"EmitStatement","src":"20290:86:79"}]},"documentation":{"id":21855,"nodeType":"StructuredDocumentation","src":"18916:810:79","text":" @notice Used to add a cap on amount of custodied canonical asset\n @dev The `custodied` amount will only increase in real time as router liquidity\n and xcall are used and the cap is set (i.e. if cap is removed, `custodied` values are\n no longer updated or enforced).\n When the `cap` is updated, the `custodied` value is set to the balance of the contract,\n which is distinct from *retrievable* funds from the contracts (i.e. could include the\n value someone just sent directly to the contract). Whenever you are updating the cap, you\n should set the value with this in mind.\n @param _canonical - The canonical TokenId to add (domain and id)\n @param _updated - The updated liquidity cap value\n @param _key - The hash of the canonical id and domain"},"id":21926,"implemented":true,"kind":"function","modifiers":[],"name":"_setLiquidityCap","nameLocation":"19738:16:79","nodeType":"FunctionDefinition","parameters":{"id":21863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21858,"mutability":"mutable","name":"_canonical","nameLocation":"19777:10:79","nodeType":"VariableDeclaration","scope":21926,"src":"19760:27:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":21857,"nodeType":"UserDefinedTypeName","pathNode":{"id":21856,"name":"TokenId","nameLocations":["19760:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"19760:7:79"},"referencedDeclaration":37728,"src":"19760:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":21860,"mutability":"mutable","name":"_updated","nameLocation":"19801:8:79","nodeType":"VariableDeclaration","scope":21926,"src":"19793:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21859,"name":"uint256","nodeType":"ElementaryTypeName","src":"19793:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21862,"mutability":"mutable","name":"_key","nameLocation":"19823:4:79","nodeType":"VariableDeclaration","scope":21926,"src":"19815:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21861,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19815:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"19754:77:79"},"returnParameters":{"id":21864,"nodeType":"ParameterList","parameters":[],"src":"19841:0:79"},"scope":22106,"src":"19729:652:79","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":22068,"nodeType":"Block","src":"21138:2252:79","statements":[{"assignments":[21941],"declarations":[{"constant":false,"id":21941,"mutability":"mutable","name":"config","nameLocation":"21164:6:79","nodeType":"VariableDeclaration","scope":22068,"src":"21144:26:79","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig"},"typeName":{"id":21940,"nodeType":"UserDefinedTypeName","pathNode":{"id":21939,"name":"TokenConfig","nameLocations":["21144:11:79"],"nodeType":"IdentifierPath","referencedDeclaration":29395,"src":"21144:11:79"},"referencedDeclaration":29395,"src":"21144:11:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig"}},"visibility":"internal"}],"id":21946,"initialValue":{"baseExpression":{"expression":{"id":21942,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"21173:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21943,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21175:12:79","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"21173:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":21945,"indexExpression":{"id":21944,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21929,"src":"21188:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21173:20:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"21144:49:79"},{"condition":{"id":21949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"21241:16:79","subExpression":{"expression":{"id":21947,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21941,"src":"21242:6:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":21948,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21249:8:79","memberName":"approval","nodeType":"MemberAccess","referencedDeclaration":29390,"src":"21242:15:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21953,"nodeType":"IfStatement","src":"21237:65:79","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":21950,"name":"TokenFacet__removeAssetId_notAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20867,"src":"21266:34:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":21951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21266:36:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21952,"nodeType":"RevertStatement","src":"21259:43:79"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":21957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21954,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21941,"src":"21359:6:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":21955,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21366:7:79","memberName":"adopted","nodeType":"MemberAccess","referencedDeclaration":29384,"src":"21359:14:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":21956,"name":"_adoptedAssetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21931,"src":"21377:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21359:33:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":21961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21958,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21941,"src":"21396:6:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":21959,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21403:14:79","memberName":"representation","nodeType":"MemberAccess","referencedDeclaration":29380,"src":"21396:21:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":21960,"name":"_representation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21933,"src":"21421:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21396:40:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"21359:77:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21966,"nodeType":"IfStatement","src":"21355:137:79","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":21963,"name":"TokenFacet__removeAssetId_invalidParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20869,"src":"21451:39:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":21964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21451:41:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21965,"nodeType":"RevertStatement","src":"21444:48:79"}},{"assignments":[21968],"declarations":[{"constant":false,"id":21968,"mutability":"mutable","name":"onCanonical","nameLocation":"21504:11:79","nodeType":"VariableDeclaration","scope":22068,"src":"21499:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21967,"name":"bool","nodeType":"ElementaryTypeName","src":"21499:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":21974,"initialValue":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":21973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21969,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"21518:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":21970,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21520:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"21518:8:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":21971,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21936,"src":"21530:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":21972,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21541:6:79","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"21530:17:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"21518:29:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"21499:48:79"},{"condition":{"id":21975,"name":"onCanonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21968,"src":"21557:11:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22013,"nodeType":"Block","src":"22495:193:79","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":22002,"name":"_representation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21933,"src":"22576:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22001,"name":"IBridgeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25890,"src":"22563:12:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBridgeToken_$25890_$","typeString":"type(contract IBridgeToken)"}},"id":22003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22563:29:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBridgeToken_$25890","typeString":"contract IBridgeToken"}},"id":22004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22593:11:79","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":10761,"src":"22563:41:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":22005,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22563:43:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":22006,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22609:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"22563:47:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22012,"nodeType":"IfStatement","src":"22559:123:79","trueBody":{"id":22011,"nodeType":"Block","src":"22612:70:79","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22008,"name":"TokenFacet__removeAssetId_remainsCustodied","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20871,"src":"22629:42:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":22009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22629:44:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22010,"nodeType":"RevertStatement","src":"22622:51:79"}]}}]},"id":22014,"nodeType":"IfStatement","src":"21553:1135:79","trueBody":{"id":22000,"nodeType":"Block","src":"21570:919:79","statements":[{"assignments":[21977],"declarations":[{"constant":false,"id":21977,"mutability":"mutable","name":"canonicalAsset","nameLocation":"21651:14:79","nodeType":"VariableDeclaration","scope":22000,"src":"21643:22:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21976,"name":"address","nodeType":"ElementaryTypeName","src":"21643:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":21983,"initialValue":{"arguments":[{"expression":{"id":21980,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21936,"src":"21695:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":21981,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21706:2:79","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"21695:13:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":21978,"name":"TypeCasts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50188,"src":"21668:9:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TypeCasts_$50188_$","typeString":"type(library TypeCasts)"}},"id":21979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21678:16:79","memberName":"bytes32ToAddress","nodeType":"MemberAccess","referencedDeclaration":50187,"src":"21668:26:79","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) pure returns (address)"}},"id":21982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21668:41:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"21643:66:79"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":21990,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"22401:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_TokenFacet_$22106","typeString":"contract TokenFacet"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TokenFacet_$22106","typeString":"contract TokenFacet"}],"id":21989,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22393:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21988,"name":"address","nodeType":"ElementaryTypeName","src":"22393:7:79","typeDescriptions":{}}},"id":21991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22393:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":21985,"name":"canonicalAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21977,"src":"22367:14:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21984,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10837,"src":"22352:14:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$10837_$","typeString":"type(contract IERC20Metadata)"}},"id":21986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22352:30:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},"id":21987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22383:9:79","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10769,"src":"22352:40:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":21992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22352:55:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":21993,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22410:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"22352:59:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21999,"nodeType":"IfStatement","src":"22348:135:79","trueBody":{"id":21998,"nodeType":"Block","src":"22413:70:79","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":21995,"name":"TokenFacet__removeAssetId_remainsCustodied","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20871,"src":"22430:42:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":21996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22430:44:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21997,"nodeType":"RevertStatement","src":"22423:51:79"}]}}]}},{"expression":{"id":22020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"22904:35:79","subExpression":{"expression":{"baseExpression":{"expression":{"id":22015,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"22911:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":22016,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22913:12:79","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"22911:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":22018,"indexExpression":{"id":22017,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21929,"src":"22926:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22911:20:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":22019,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"22932:7:79","memberName":"adopted","nodeType":"MemberAccess","referencedDeclaration":29384,"src":"22911:28:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22021,"nodeType":"ExpressionStatement","src":"22904:35:79"},{"expression":{"id":22027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"22945:43:79","subExpression":{"expression":{"baseExpression":{"expression":{"id":22022,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"22952:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":22023,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22954:12:79","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"22952:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":22025,"indexExpression":{"id":22024,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21929,"src":"22967:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22952:20:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":22026,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"22973:15:79","memberName":"adoptedDecimals","nodeType":"MemberAccess","referencedDeclaration":29386,"src":"22952:36:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22028,"nodeType":"ExpressionStatement","src":"22945:43:79"},{"expression":{"id":22034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"22994:55:79","subExpression":{"expression":{"baseExpression":{"expression":{"id":22029,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"23001:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":22030,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23003:12:79","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"23001:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":22032,"indexExpression":{"id":22031,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21929,"src":"23016:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23001:20:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":22033,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"23022:27:79","memberName":"adoptedToLocalExternalPools","nodeType":"MemberAccess","referencedDeclaration":29388,"src":"23001:48:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22035,"nodeType":"ExpressionStatement","src":"22994:55:79"},{"expression":{"id":22041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"23055:36:79","subExpression":{"expression":{"baseExpression":{"expression":{"id":22036,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"23062:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":22037,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23064:12:79","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"23062:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":22039,"indexExpression":{"id":22038,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21929,"src":"23077:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23062:20:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":22040,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"23083:8:79","memberName":"approval","nodeType":"MemberAccess","referencedDeclaration":29390,"src":"23062:29:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22042,"nodeType":"ExpressionStatement","src":"23055:36:79"},{"expression":{"id":22048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"23097:31:79","subExpression":{"expression":{"baseExpression":{"expression":{"id":22043,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"23104:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":22044,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23106:12:79","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"23104:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":22046,"indexExpression":{"id":22045,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21929,"src":"23119:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23104:20:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"id":22047,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"23125:3:79","memberName":"cap","nodeType":"MemberAccess","referencedDeclaration":29392,"src":"23104:24:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22049,"nodeType":"ExpressionStatement","src":"23097:31:79"},{"expression":{"id":22054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"23224:51:79","subExpression":{"baseExpression":{"expression":{"id":22050,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"23231:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":22051,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23233:25:79","memberName":"representationToCanonical","nodeType":"MemberAccess","referencedDeclaration":29420,"src":"23231:27:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId storage ref)"}},"id":22053,"indexExpression":{"id":22052,"name":"_representation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21933,"src":"23259:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23231:44:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage","typeString":"struct TokenId storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22055,"nodeType":"ExpressionStatement","src":"23224:51:79"},{"expression":{"id":22060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"23281:44:79","subExpression":{"baseExpression":{"expression":{"id":22056,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"23288:1:79","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":22057,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23290:18:79","memberName":"adoptedToCanonical","nodeType":"MemberAccess","referencedDeclaration":29414,"src":"23288:20:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId storage ref)"}},"id":22059,"indexExpression":{"id":22058,"name":"_adoptedAssetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21931,"src":"23309:15:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23288:37:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage","typeString":"struct TokenId storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22061,"nodeType":"ExpressionStatement","src":"23281:44:79"},{"eventCall":{"arguments":[{"id":22063,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21929,"src":"23368:4:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":22064,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"23374:3:79","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23378:6:79","memberName":"sender","nodeType":"MemberAccess","src":"23374:10:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":22062,"name":"AssetRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20946,"src":"23355:12:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":22066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23355:30:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22067,"nodeType":"EmitStatement","src":"23350:35:79"}]},"documentation":{"id":21927,"nodeType":"StructuredDocumentation","src":"20385:606:79","text":" @notice Used to remove assets from the allowlist\n @dev When you are removing an asset, `xcall` will fail but `handle` and `execute` will not to\n allow for inflight transfers to be addressed. Similarly, the `repayAavePortal` function will\n work.\n @param _key - The hash of the canonical id and domain to remove (mapping key)\n @param _adoptedAssetId - Corresponding adopted asset to remove\n @param _representation - Corresponding representation asset (i.e. bridged asset) to remove.\n @param _canonical - The TokenId (canonical ID and domain) of the asset."},"id":22069,"implemented":true,"kind":"function","modifiers":[],"name":"_removeAssetId","nameLocation":"21003:14:79","nodeType":"FunctionDefinition","parameters":{"id":21937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21929,"mutability":"mutable","name":"_key","nameLocation":"21031:4:79","nodeType":"VariableDeclaration","scope":22069,"src":"21023:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21928,"name":"bytes32","nodeType":"ElementaryTypeName","src":"21023:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":21931,"mutability":"mutable","name":"_adoptedAssetId","nameLocation":"21049:15:79","nodeType":"VariableDeclaration","scope":22069,"src":"21041:23:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21930,"name":"address","nodeType":"ElementaryTypeName","src":"21041:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21933,"mutability":"mutable","name":"_representation","nameLocation":"21078:15:79","nodeType":"VariableDeclaration","scope":22069,"src":"21070:23:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21932,"name":"address","nodeType":"ElementaryTypeName","src":"21070:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21936,"mutability":"mutable","name":"_canonical","nameLocation":"21114:10:79","nodeType":"VariableDeclaration","scope":22069,"src":"21099:25:79","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":21935,"nodeType":"UserDefinedTypeName","pathNode":{"id":21934,"name":"TokenId","nameLocations":["21099:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"21099:7:79"},"referencedDeclaration":37728,"src":"21099:7:79","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"src":"21017:111:79"},"returnParameters":{"id":21938,"nodeType":"ParameterList","parameters":[],"src":"21138:0:79"},"scope":22106,"src":"20994:2396:79","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":22104,"nodeType":"Block","src":"23782:193:79","statements":[{"expression":{"id":22096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22085,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22083,"src":"23821:6:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":22091,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22076,"src":"23854:9:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":22092,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22078,"src":"23865:5:79","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":22093,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22080,"src":"23872:7:79","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"23838:15:79","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$_t_uint8_$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_contract$_BridgeToken_$22402_$","typeString":"function (uint8,string memory,string memory) returns (contract BridgeToken)"},"typeName":{"id":22089,"nodeType":"UserDefinedTypeName","pathNode":{"id":22088,"name":"BridgeToken","nameLocations":["23842:11:79"],"nodeType":"IdentifierPath","referencedDeclaration":22402,"src":"23842:11:79"},"referencedDeclaration":22402,"src":"23842:11:79","typeDescriptions":{"typeIdentifier":"t_contract$_BridgeToken_$22402","typeString":"contract BridgeToken"}}},"id":22094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23838:42:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_BridgeToken_$22402","typeString":"contract BridgeToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BridgeToken_$22402","typeString":"contract BridgeToken"}],"id":22087,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23830:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22086,"name":"address","nodeType":"ElementaryTypeName","src":"23830:7:79","typeDescriptions":{}}},"id":22095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23830:51:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23821:60:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":22097,"nodeType":"ExpressionStatement","src":"23821:60:79"},{"eventCall":{"arguments":[{"id":22099,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22074,"src":"23949:7:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":22100,"name":"_id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22072,"src":"23958:3:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":22101,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22083,"src":"23963:6:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":22098,"name":"TokenDeployed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20898,"src":"23935:13:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint32_$_t_bytes32_$_t_address_$returns$__$","typeString":"function (uint32,bytes32,address)"}},"id":22102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23935:35:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22103,"nodeType":"EmitStatement","src":"23930:40:79"}]},"documentation":{"id":22070,"nodeType":"StructuredDocumentation","src":"23394:206:79","text":" @notice Deploy and initialize a new token contract\n @dev Each token contract is a proxy which\n points to the token upgrade beacon\n @return _token the address of the token contract"},"id":22105,"implemented":true,"kind":"function","modifiers":[],"name":"_deployRepresentation","nameLocation":"23612:21:79","nodeType":"FunctionDefinition","parameters":{"id":22081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22072,"mutability":"mutable","name":"_id","nameLocation":"23647:3:79","nodeType":"VariableDeclaration","scope":22105,"src":"23639:11:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":22071,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23639:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":22074,"mutability":"mutable","name":"_domain","nameLocation":"23663:7:79","nodeType":"VariableDeclaration","scope":22105,"src":"23656:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":22073,"name":"uint32","nodeType":"ElementaryTypeName","src":"23656:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":22076,"mutability":"mutable","name":"_decimals","nameLocation":"23682:9:79","nodeType":"VariableDeclaration","scope":22105,"src":"23676:15:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":22075,"name":"uint8","nodeType":"ElementaryTypeName","src":"23676:5:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":22078,"mutability":"mutable","name":"_name","nameLocation":"23711:5:79","nodeType":"VariableDeclaration","scope":22105,"src":"23697:19:79","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":22077,"name":"string","nodeType":"ElementaryTypeName","src":"23697:6:79","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":22080,"mutability":"mutable","name":"_symbol","nameLocation":"23736:7:79","nodeType":"VariableDeclaration","scope":22105,"src":"23722:21:79","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":22079,"name":"string","nodeType":"ElementaryTypeName","src":"23722:6:79","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"23633:114:79"},"returnParameters":{"id":22084,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22083,"mutability":"mutable","name":"_token","nameLocation":"23774:6:79","nodeType":"VariableDeclaration","scope":22105,"src":"23766:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22082,"name":"address","nodeType":"ElementaryTypeName","src":"23766:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"23765:16:79"},"scope":22106,"src":"23603:372:79","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":22107,"src":"619:23358:79","usedErrors":[13728,13730,13732,13734,13736,13738,13740,13742,13744,13746,20861,20863,20865,20867,20869,20871,20873,20875,20877,20879,20881,20883,20885,20887,20889,27664]}],"src":"32:23946:79"},"id":79},"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol":{"ast":{"absolutePath":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol","exportedSymbols":{"BaseConnextFacet":[14146],"Constants":[29304],"DiamondInit":[22283],"IConnectorManager":[47805],"IDiamondCut":[26944],"IDiamondLoupe":[26985],"IERC165":[26996],"IProposedOwnable":[50003],"LibDiamond":[30596]},"id":22284,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":22108,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"32:23:80"},{"absolutePath":"contracts/core/connext/interfaces/IDiamondLoupe.sol","file":"../../interfaces/IDiamondLoupe.sol","id":22110,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22284,"sourceUnit":26986,"src":"395:65:80","symbolAliases":[{"foreign":{"id":22109,"name":"IDiamondLoupe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26985,"src":"403:13:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IDiamondCut.sol","file":"../../interfaces/IDiamondCut.sol","id":22112,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22284,"sourceUnit":26945,"src":"461:61:80","symbolAliases":[{"foreign":{"id":22111,"name":"IDiamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26944,"src":"469:11:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IERC165.sol","file":"../../interfaces/IERC165.sol","id":22114,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22284,"sourceUnit":26997,"src":"523:53:80","symbolAliases":[{"foreign":{"id":22113,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26996,"src":"531:7:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/LibDiamond.sol","file":"../../libraries/LibDiamond.sol","id":22116,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22284,"sourceUnit":30597,"src":"578:58:80","symbolAliases":[{"foreign":{"id":22115,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"586:10:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/Constants.sol","file":"../../libraries/Constants.sol","id":22118,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22284,"sourceUnit":29305,"src":"637:56:80","symbolAliases":[{"foreign":{"id":22117,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"645:9:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/facets/BaseConnextFacet.sol","file":"../BaseConnextFacet.sol","id":22120,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22284,"sourceUnit":14147,"src":"695:57:80","symbolAliases":[{"foreign":{"id":22119,"name":"BaseConnextFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14146,"src":"703:16:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/interfaces/IProposedOwnable.sol","file":"../../../../shared/interfaces/IProposedOwnable.sol","id":22122,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22284,"sourceUnit":50004,"src":"754:84:80","symbolAliases":[{"foreign":{"id":22121,"name":"IProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50003,"src":"762:16:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/IConnectorManager.sol","file":"../../../../messaging/interfaces/IConnectorManager.sol","id":22124,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22284,"sourceUnit":47806,"src":"839:89:80","symbolAliases":[{"foreign":{"id":22123,"name":"IConnectorManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47805,"src":"847:17:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":22125,"name":"BaseConnextFacet","nameLocations":["1204:16:80"],"nodeType":"IdentifierPath","referencedDeclaration":14146,"src":"1204:16:80"},"id":22126,"nodeType":"InheritanceSpecifier","src":"1204:16:80"}],"canonicalName":"DiamondInit","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":22283,"linearizedBaseContracts":[22283,14146],"name":"DiamondInit","nameLocation":"1189:11:80","nodeType":"ContractDefinition","nodes":[{"errorSelector":"63f20d0c","id":22128,"name":"DiamondInit__init_alreadyInitialized","nameLocation":"1273:36:80","nodeType":"ErrorDefinition","parameters":{"id":22127,"nodeType":"ParameterList","parameters":[],"src":"1309:2:80"},"src":"1267:45:80"},{"errorSelector":"3fba2f66","id":22130,"name":"DiamondInit__init_domainsDontMatch","nameLocation":"1321:34:80","nodeType":"ErrorDefinition","parameters":{"id":22129,"nodeType":"ParameterList","parameters":[],"src":"1355:2:80"},"src":"1315:43:80"},{"body":{"id":22281,"nodeType":"Block","src":"1784:1691:80","statements":[{"condition":{"expression":{"id":22141,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"1823:1:80","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":22142,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1825:11:80","memberName":"initialized","nodeType":"MemberAccess","referencedDeclaration":29397,"src":"1823:13:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22147,"nodeType":"IfStatement","src":"1819:79:80","trueBody":{"id":22146,"nodeType":"Block","src":"1838:60:80","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22143,"name":"DiamondInit__init_alreadyInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22128,"src":"1853:36:80","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":22144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1853:38:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22145,"nodeType":"RevertStatement","src":"1846:45:80"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22148,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"1936:10:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":22150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1947:22:80","memberName":"enforceIsContractOwner","nodeType":"MemberAccess","referencedDeclaration":29683,"src":"1936:33:80","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":22151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1936:35:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22152,"nodeType":"ExpressionStatement","src":"1936:35:80"},{"assignments":[22155],"declarations":[{"constant":false,"id":22155,"mutability":"mutable","name":"manager","nameLocation":"2031:7:80","nodeType":"VariableDeclaration","scope":22281,"src":"2013:25:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"},"typeName":{"id":22154,"nodeType":"UserDefinedTypeName","pathNode":{"id":22153,"name":"IConnectorManager","nameLocations":["2013:17:80"],"nodeType":"IdentifierPath","referencedDeclaration":47805,"src":"2013:17:80"},"referencedDeclaration":47805,"src":"2013:17:80","typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"}},"visibility":"internal"}],"id":22159,"initialValue":{"arguments":[{"id":22157,"name":"_xAppConnectionManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22134,"src":"2059:22:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22156,"name":"IConnectorManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47805,"src":"2041:17:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IConnectorManager_$47805_$","typeString":"type(contract IConnectorManager)"}},"id":22158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2041:41:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"}},"nodeType":"VariableDeclarationStatement","src":"2013:69:80"},{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":22164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22160,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22155,"src":"2092:7:80","typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"}},"id":22161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2100:11:80","memberName":"localDomain","nodeType":"MemberAccess","referencedDeclaration":47804,"src":"2092:19:80","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint32_$","typeString":"function () view external returns (uint32)"}},"id":22162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2092:21:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":22163,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22132,"src":"2117:7:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"2092:32:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22169,"nodeType":"IfStatement","src":"2088:96:80","trueBody":{"id":22168,"nodeType":"Block","src":"2126:58:80","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22165,"name":"DiamondInit__init_domainsDontMatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22130,"src":"2141:34:80","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":22166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2141:36:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22167,"nodeType":"RevertStatement","src":"2134:43:80"}]}},{"expression":{"id":22174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22170,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"2225:1:80","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":22172,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2227:11:80","memberName":"initialized","nodeType":"MemberAccess","referencedDeclaration":29397,"src":"2225:13:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":22173,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2241:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2225:20:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22175,"nodeType":"ExpressionStatement","src":"2225:20:80"},{"assignments":[22180],"declarations":[{"constant":false,"id":22180,"mutability":"mutable","name":"ds","nameLocation":"2312:2:80","nodeType":"VariableDeclaration","scope":22281,"src":"2278:36:80","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"},"typeName":{"id":22179,"nodeType":"UserDefinedTypeName","pathNode":{"id":22178,"name":"LibDiamond.DiamondStorage","nameLocations":["2278:10:80","2289:14:80"],"nodeType":"IdentifierPath","referencedDeclaration":29591,"src":"2278:25:80"},"referencedDeclaration":29591,"src":"2278:25:80","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"}},"visibility":"internal"}],"id":22184,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22181,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"2317:10:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":22182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2328:14:80","memberName":"diamondStorage","nodeType":"MemberAccess","referencedDeclaration":29603,"src":"2317:25:80","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$29591_storage_ptr_$","typeString":"function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"}},"id":22183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2317:27:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2278:66:80"},{"expression":{"id":22194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":22185,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22180,"src":"2350:2:80","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":22191,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2353:19:80","memberName":"supportedInterfaces","nodeType":"MemberAccess","referencedDeclaration":29582,"src":"2350:22:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_bool_$","typeString":"mapping(bytes4 => bool)"}},"id":22192,"indexExpression":{"expression":{"arguments":[{"id":22188,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26996,"src":"2378:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC165_$26996_$","typeString":"type(contract IERC165)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC165_$26996_$","typeString":"type(contract IERC165)"}],"id":22187,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2373:4:80","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":22189,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2373:13:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC165_$26996","typeString":"type(contract IERC165)"}},"id":22190,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2387:11:80","memberName":"interfaceId","nodeType":"MemberAccess","src":"2373:25:80","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2350:49:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":22193,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2402:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2350:56:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22195,"nodeType":"ExpressionStatement","src":"2350:56:80"},{"expression":{"id":22205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":22196,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22180,"src":"2412:2:80","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":22202,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2415:19:80","memberName":"supportedInterfaces","nodeType":"MemberAccess","referencedDeclaration":29582,"src":"2412:22:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_bool_$","typeString":"mapping(bytes4 => bool)"}},"id":22203,"indexExpression":{"expression":{"arguments":[{"id":22199,"name":"IDiamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26944,"src":"2440:11:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IDiamondCut_$26944_$","typeString":"type(contract IDiamondCut)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IDiamondCut_$26944_$","typeString":"type(contract IDiamondCut)"}],"id":22198,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2435:4:80","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":22200,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2435:17:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IDiamondCut_$26944","typeString":"type(contract IDiamondCut)"}},"id":22201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2453:11:80","memberName":"interfaceId","nodeType":"MemberAccess","src":"2435:29:80","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2412:53:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":22204,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2468:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2412:60:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22206,"nodeType":"ExpressionStatement","src":"2412:60:80"},{"expression":{"id":22216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":22207,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22180,"src":"2478:2:80","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":22213,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2481:19:80","memberName":"supportedInterfaces","nodeType":"MemberAccess","referencedDeclaration":29582,"src":"2478:22:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_bool_$","typeString":"mapping(bytes4 => bool)"}},"id":22214,"indexExpression":{"expression":{"arguments":[{"id":22210,"name":"IDiamondLoupe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26985,"src":"2506:13:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IDiamondLoupe_$26985_$","typeString":"type(contract IDiamondLoupe)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IDiamondLoupe_$26985_$","typeString":"type(contract IDiamondLoupe)"}],"id":22209,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2501:4:80","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":22211,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2501:19:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IDiamondLoupe_$26985","typeString":"type(contract IDiamondLoupe)"}},"id":22212,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2521:11:80","memberName":"interfaceId","nodeType":"MemberAccess","src":"2501:31:80","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2478:55:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":22215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2536:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2478:62:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22217,"nodeType":"ExpressionStatement","src":"2478:62:80"},{"expression":{"id":22227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":22218,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22180,"src":"2546:2:80","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":22224,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2549:19:80","memberName":"supportedInterfaces","nodeType":"MemberAccess","referencedDeclaration":29582,"src":"2546:22:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_bool_$","typeString":"mapping(bytes4 => bool)"}},"id":22225,"indexExpression":{"expression":{"arguments":[{"id":22221,"name":"IProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50003,"src":"2574:16:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProposedOwnable_$50003_$","typeString":"type(contract IProposedOwnable)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IProposedOwnable_$50003_$","typeString":"type(contract IProposedOwnable)"}],"id":22220,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2569:4:80","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":22222,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2569:22:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IProposedOwnable_$50003","typeString":"type(contract IProposedOwnable)"}},"id":22223,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2592:11:80","memberName":"interfaceId","nodeType":"MemberAccess","src":"2569:34:80","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2546:58:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":22226,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2607:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2546:65:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22228,"nodeType":"ExpressionStatement","src":"2546:65:80"},{"expression":{"id":22233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22229,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22180,"src":"2617:2:80","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":22231,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2620:15:80","memberName":"acceptanceDelay","nodeType":"MemberAccess","referencedDeclaration":29590,"src":"2617:18:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22232,"name":"_acceptanceDelay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22136,"src":"2638:16:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2617:37:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22234,"nodeType":"ExpressionStatement","src":"2617:37:80"},{"expression":{"id":22240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22235,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3126:1:80","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":22237,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3128:7:80","memberName":"_status","nodeType":"MemberAccess","referencedDeclaration":29489,"src":"3126:9:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":22238,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"3138:9:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":22239,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3148:11:80","memberName":"NOT_ENTERED","nodeType":"MemberAccess","referencedDeclaration":29206,"src":"3138:21:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3126:33:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22241,"nodeType":"ExpressionStatement","src":"3126:33:80"},{"expression":{"id":22247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22242,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3165:1:80","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":22244,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3167:12:80","memberName":"_xcallStatus","nodeType":"MemberAccess","referencedDeclaration":29491,"src":"3165:14:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":22245,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"3182:9:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":22246,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3192:11:80","memberName":"NOT_ENTERED","nodeType":"MemberAccess","referencedDeclaration":29206,"src":"3182:21:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3165:38:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22248,"nodeType":"ExpressionStatement","src":"3165:38:80"},{"expression":{"id":22253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22249,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3225:1:80","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":22251,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3227:6:80","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"3225:8:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22252,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22132,"src":"3236:7:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"3225:18:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":22254,"nodeType":"ExpressionStatement","src":"3225:18:80"},{"expression":{"id":22260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22255,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3249:1:80","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":22257,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3251:23:80","memberName":"LIQUIDITY_FEE_NUMERATOR","nodeType":"MemberAccess","referencedDeclaration":29399,"src":"3249:25:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":22258,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"3277:9:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":22259,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3287:31:80","memberName":"INITIAL_LIQUIDITY_FEE_NUMERATOR","nodeType":"MemberAccess","referencedDeclaration":29194,"src":"3277:41:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3249:69:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22261,"nodeType":"ExpressionStatement","src":"3249:69:80"},{"expression":{"id":22267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22262,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3324:1:80","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":22264,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3326:21:80","memberName":"maxRoutersPerTransfer","nodeType":"MemberAccess","referencedDeclaration":29453,"src":"3324:23:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":22265,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"3350:9:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":22266,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3360:19:80","memberName":"INITIAL_MAX_ROUTERS","nodeType":"MemberAccess","referencedDeclaration":29198,"src":"3350:29:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3324:55:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22268,"nodeType":"ExpressionStatement","src":"3324:55:80"},{"expression":{"id":22273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22269,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3385:1:80","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":22271,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3387:21:80","memberName":"xAppConnectionManager","nodeType":"MemberAccess","referencedDeclaration":29535,"src":"3385:23:80","typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22272,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22155,"src":"3411:7:80","typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"}},"src":"3385:33:80","typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"}},"id":22274,"nodeType":"ExpressionStatement","src":"3385:33:80"},{"expression":{"id":22279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22275,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13726,"src":"3424:1:80","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage","typeString":"struct AppStorage storage ref"}},"id":22277,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3426:20:80","memberName":"lpTokenTargetAddress","nodeType":"MemberAccess","referencedDeclaration":29507,"src":"3424:22:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22278,"name":"_lpTokenTargetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22138,"src":"3449:21:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3424:46:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":22280,"nodeType":"ExpressionStatement","src":"3424:46:80"}]},"functionSelector":"9a7e155e","id":22282,"implemented":true,"kind":"function","modifiers":[],"name":"init","nameLocation":"1645:4:80","nodeType":"FunctionDefinition","parameters":{"id":22139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22132,"mutability":"mutable","name":"_domain","nameLocation":"1662:7:80","nodeType":"VariableDeclaration","scope":22282,"src":"1655:14:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":22131,"name":"uint32","nodeType":"ElementaryTypeName","src":"1655:6:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":22134,"mutability":"mutable","name":"_xAppConnectionManager","nameLocation":"1683:22:80","nodeType":"VariableDeclaration","scope":22282,"src":"1675:30:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22133,"name":"address","nodeType":"ElementaryTypeName","src":"1675:7:80","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22136,"mutability":"mutable","name":"_acceptanceDelay","nameLocation":"1719:16:80","nodeType":"VariableDeclaration","scope":22282,"src":"1711:24:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22135,"name":"uint256","nodeType":"ElementaryTypeName","src":"1711:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22138,"mutability":"mutable","name":"_lpTokenTargetAddress","nameLocation":"1749:21:80","nodeType":"VariableDeclaration","scope":22282,"src":"1741:29:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22137,"name":"address","nodeType":"ElementaryTypeName","src":"1741:7:80","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1649:125:80"},"returnParameters":{"id":22140,"nodeType":"ParameterList","parameters":[],"src":"1784:0:80"},"scope":22283,"src":"1636:1839:80","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":22284,"src":"1180:2297:80","usedErrors":[13728,13730,13732,13734,13736,13738,13740,13742,13744,13746,22128,22130]}],"src":"32:3446:80"},"id":80},"contracts/core/connext/helpers/BridgeToken.sol":{"ast":{"absolutePath":"contracts/core/connext/helpers/BridgeToken.sol","exportedSymbols":{"BridgeToken":[22402],"ERC20":[24039],"IBridgeToken":[25890],"Ownable":[9656]},"id":22403,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":22285,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:81"},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"@openzeppelin/contracts/access/Ownable.sol","id":22287,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22403,"sourceUnit":9657,"src":"71:67:81","symbolAliases":[{"foreign":{"id":22286,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9656,"src":"79:7:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IBridgeToken.sol","file":"../interfaces/IBridgeToken.sol","id":22289,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22403,"sourceUnit":25891,"src":"140:60:81","symbolAliases":[{"foreign":{"id":22288,"name":"IBridgeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25890,"src":"148:12:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/helpers/OZERC20.sol","file":"./OZERC20.sol","id":22291,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22403,"sourceUnit":24040,"src":"202:36:81","symbolAliases":[{"foreign":{"id":22290,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24039,"src":"210:5:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":22292,"name":"IBridgeToken","nameLocations":["264:12:81"],"nodeType":"IdentifierPath","referencedDeclaration":25890,"src":"264:12:81"},"id":22293,"nodeType":"InheritanceSpecifier","src":"264:12:81"},{"baseName":{"id":22294,"name":"Ownable","nameLocations":["278:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":9656,"src":"278:7:81"},"id":22295,"nodeType":"InheritanceSpecifier","src":"278:7:81"},{"baseName":{"id":22296,"name":"ERC20","nameLocations":["287:5:81"],"nodeType":"IdentifierPath","referencedDeclaration":24039,"src":"287:5:81"},"id":22297,"nodeType":"InheritanceSpecifier","src":"287:5:81"}],"canonicalName":"BridgeToken","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":22402,"linearizedBaseContracts":[22402,24039,10873,9656,11506,25890,10837,10812],"name":"BridgeToken","nameLocation":"249:11:81","nodeType":"ContractDefinition","nodes":[{"body":{"id":22314,"nodeType":"Block","src":"477:2:81","statements":[]},"id":22315,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":22306,"kind":"baseConstructorSpecifier","modifierName":{"id":22305,"name":"Ownable","nameLocations":["429:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":9656,"src":"429:7:81"},"nodeType":"ModifierInvocation","src":"429:9:81"},{"arguments":[{"id":22308,"name":"decimals_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22299,"src":"445:9:81","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":22309,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22301,"src":"456:5:81","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":22310,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22303,"src":"463:7:81","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"31","id":22311,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"472:3:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""},"value":"1"}],"id":22312,"kind":"baseConstructorSpecifier","modifierName":{"id":22307,"name":"ERC20","nameLocations":["439:5:81"],"nodeType":"IdentifierPath","referencedDeclaration":24039,"src":"439:5:81"},"nodeType":"ModifierInvocation","src":"439:37:81"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22299,"mutability":"mutable","name":"decimals_","nameLocation":"363:9:81","nodeType":"VariableDeclaration","scope":22315,"src":"357:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":22298,"name":"uint8","nodeType":"ElementaryTypeName","src":"357:5:81","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":22301,"mutability":"mutable","name":"name_","nameLocation":"392:5:81","nodeType":"VariableDeclaration","scope":22315,"src":"378:19:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":22300,"name":"string","nodeType":"ElementaryTypeName","src":"378:6:81","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":22303,"mutability":"mutable","name":"symbol_","nameLocation":"417:7:81","nodeType":"VariableDeclaration","scope":22315,"src":"403:21:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":22302,"name":"string","nodeType":"ElementaryTypeName","src":"403:6:81","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"351:77:81"},"returnParameters":{"id":22313,"nodeType":"ParameterList","parameters":[],"src":"477:0:81"},"scope":22402,"src":"340:139:81","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"anonymous":false,"eventSelector":"1ec4c73af923253fb2c28a509dd78d342709289a09929d78c64c0b8e047efbcd","id":22321,"name":"UpdateDetails","nameLocation":"528:13:81","nodeType":"EventDefinition","parameters":{"id":22320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22317,"indexed":true,"mutability":"mutable","name":"name","nameLocation":"557:4:81","nodeType":"VariableDeclaration","scope":22321,"src":"542:19:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":22316,"name":"string","nodeType":"ElementaryTypeName","src":"542:6:81","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":22319,"indexed":true,"mutability":"mutable","name":"symbol","nameLocation":"578:6:81","nodeType":"VariableDeclaration","scope":22321,"src":"563:21:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":22318,"name":"string","nodeType":"ElementaryTypeName","src":"563:6:81","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"541:44:81"},"src":"522:64:81"},{"baseFunctions":[25875],"body":{"id":22337,"nodeType":"Block","src":"1105:30:81","statements":[{"expression":{"arguments":[{"id":22333,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22324,"src":"1117:5:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22334,"name":"_amnt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22326,"src":"1124:5:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22332,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"1111:5:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":22335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1111:19:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22336,"nodeType":"ExpressionStatement","src":"1111:19:81"}]},"documentation":{"id":22322,"nodeType":"StructuredDocumentation","src":"638:392:81","text":" @notice Destroys `_amnt` tokens from `_from`, reducing the\n total supply.\n @dev Emits a {Transfer} event with `to` set to the zero address.\n Requirements:\n - `_from` cannot be the zero address.\n - `_from` must have at least `_amnt` tokens.\n @param _from The address from which to destroy the tokens\n @param _amnt The amount of tokens to be destroyed"},"functionSelector":"9dc29fac","id":22338,"implemented":true,"kind":"function","modifiers":[{"id":22330,"kind":"modifierInvocation","modifierName":{"id":22329,"name":"onlyOwner","nameLocations":["1095:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":9575,"src":"1095:9:81"},"nodeType":"ModifierInvocation","src":"1095:9:81"}],"name":"burn","nameLocation":"1042:4:81","nodeType":"FunctionDefinition","overrides":{"id":22328,"nodeType":"OverrideSpecifier","overrides":[],"src":"1086:8:81"},"parameters":{"id":22327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22324,"mutability":"mutable","name":"_from","nameLocation":"1055:5:81","nodeType":"VariableDeclaration","scope":22338,"src":"1047:13:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22323,"name":"address","nodeType":"ElementaryTypeName","src":"1047:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22326,"mutability":"mutable","name":"_amnt","nameLocation":"1070:5:81","nodeType":"VariableDeclaration","scope":22338,"src":"1062:13:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22325,"name":"uint256","nodeType":"ElementaryTypeName","src":"1062:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1046:30:81"},"returnParameters":{"id":22331,"nodeType":"ParameterList","parameters":[],"src":"1105:0:81"},"scope":22402,"src":"1033:102:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[25882],"body":{"id":22354,"nodeType":"Block","src":"1536:28:81","statements":[{"expression":{"arguments":[{"id":22350,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22341,"src":"1548:3:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22351,"name":"_amnt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22343,"src":"1553:5:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22349,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23654,"src":"1542:5:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":22352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1542:17:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22353,"nodeType":"ExpressionStatement","src":"1542:17:81"}]},"documentation":{"id":22339,"nodeType":"StructuredDocumentation","src":"1139:324:81","text":"@notice Creates `_amnt` tokens and assigns them to `_to`, increasing\n the total supply.\n @dev Emits a {Transfer} event with `from` set to the zero address.\n Requirements:\n - `to` cannot be the zero address.\n @param _to The destination address\n @param _amnt The amount of tokens to be minted"},"functionSelector":"40c10f19","id":22355,"implemented":true,"kind":"function","modifiers":[{"id":22347,"kind":"modifierInvocation","modifierName":{"id":22346,"name":"onlyOwner","nameLocations":["1526:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":9575,"src":"1526:9:81"},"nodeType":"ModifierInvocation","src":"1526:9:81"}],"name":"mint","nameLocation":"1475:4:81","nodeType":"FunctionDefinition","overrides":{"id":22345,"nodeType":"OverrideSpecifier","overrides":[],"src":"1517:8:81"},"parameters":{"id":22344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22341,"mutability":"mutable","name":"_to","nameLocation":"1488:3:81","nodeType":"VariableDeclaration","scope":22355,"src":"1480:11:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22340,"name":"address","nodeType":"ElementaryTypeName","src":"1480:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22343,"mutability":"mutable","name":"_amnt","nameLocation":"1501:5:81","nodeType":"VariableDeclaration","scope":22355,"src":"1493:13:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22342,"name":"uint256","nodeType":"ElementaryTypeName","src":"1493:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1479:28:81"},"returnParameters":{"id":22348,"nodeType":"ParameterList","parameters":[],"src":"1536:0:81"},"scope":22402,"src":"1466:98:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[25889],"body":{"id":22400,"nodeType":"Block","src":"1794:328:81","statements":[{"expression":{"id":22368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22366,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23208,"src":"1850:5:81","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22367,"name":"_newName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22358,"src":"1858:8:81","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},"src":"1850:16:81","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":22369,"nodeType":"ExpressionStatement","src":"1850:16:81"},{"expression":{"id":22372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22370,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23210,"src":"1872:7:81","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22371,"name":"_newSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22360,"src":"1882:10:81","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},"src":"1872:20:81","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":22373,"nodeType":"ExpressionStatement","src":"1872:20:81"},{"assignments":[22375],"declarations":[{"constant":false,"id":22375,"mutability":"mutable","name":"hashedName","nameLocation":"1906:10:81","nodeType":"VariableDeclaration","scope":22400,"src":"1898:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":22374,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1898:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":22382,"initialValue":{"arguments":[{"arguments":[{"id":22379,"name":"_newName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22358,"src":"1935:8:81","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":22378,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1929:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":22377,"name":"bytes","nodeType":"ElementaryTypeName","src":"1929:5:81","typeDescriptions":{}}},"id":22380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1929:15:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":22376,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1919:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":22381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1919:26:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1898:47:81"},{"expression":{"id":22385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22383,"name":"_HASHED_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23239,"src":"1951:12:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22384,"name":"hashedName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22375,"src":"1966:10:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1951:25:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22386,"nodeType":"ExpressionStatement","src":"1951:25:81"},{"expression":{"id":22393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22387,"name":"_CACHED_DOMAIN_SEPARATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23233,"src":"1982:24:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":22389,"name":"_TYPE_HASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23231,"src":"2031:10:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":22390,"name":"hashedName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22375,"src":"2043:10:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":22391,"name":"_HASHED_VERSION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23241,"src":"2055:15:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":22388,"name":"_buildDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24022,"src":"2009:21:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32,bytes32) view returns (bytes32)"}},"id":22392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2009:62:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1982:89:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22394,"nodeType":"ExpressionStatement","src":"1982:89:81"},{"eventCall":{"arguments":[{"id":22396,"name":"_newName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22358,"src":"2096:8:81","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"id":22397,"name":"_newSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22360,"src":"2106:10:81","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":22395,"name":"UpdateDetails","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22321,"src":"2082:13:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":22398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2082:35:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22399,"nodeType":"EmitStatement","src":"2077:40:81"}]},"documentation":{"id":22356,"nodeType":"StructuredDocumentation","src":"1568:121:81","text":" @notice Set the details of a token\n @param _newName The new name\n @param _newSymbol The new symbol"},"functionSelector":"b7b090ee","id":22401,"implemented":true,"kind":"function","modifiers":[{"id":22364,"kind":"modifierInvocation","modifierName":{"id":22363,"name":"onlyOwner","nameLocations":["1784:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":9575,"src":"1784:9:81"},"nodeType":"ModifierInvocation","src":"1784:9:81"}],"name":"setDetails","nameLocation":"1701:10:81","nodeType":"FunctionDefinition","overrides":{"id":22362,"nodeType":"OverrideSpecifier","overrides":[],"src":"1775:8:81"},"parameters":{"id":22361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22358,"mutability":"mutable","name":"_newName","nameLocation":"1728:8:81","nodeType":"VariableDeclaration","scope":22401,"src":"1712:24:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":22357,"name":"string","nodeType":"ElementaryTypeName","src":"1712:6:81","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":22360,"mutability":"mutable","name":"_newSymbol","nameLocation":"1754:10:81","nodeType":"VariableDeclaration","scope":22401,"src":"1738:26:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":22359,"name":"string","nodeType":"ElementaryTypeName","src":"1738:6:81","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1711:54:81"},"returnParameters":{"id":22365,"nodeType":"ParameterList","parameters":[],"src":"1794:0:81"},"scope":22402,"src":"1692:430:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":22403,"src":"240:1884:81","usedErrors":[]}],"src":"46:2079:81"},"id":81},"contracts/core/connext/helpers/ConnextDiamond.sol":{"ast":{"absolutePath":"contracts/core/connext/helpers/ConnextDiamond.sol","exportedSymbols":{"ConnextDiamond":[22525],"IDiamondCut":[26944],"LibDiamond":[30596]},"id":22526,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":22404,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"32:23:82"},{"absolutePath":"contracts/core/connext/libraries/LibDiamond.sol","file":"../libraries/LibDiamond.sol","id":22406,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22526,"sourceUnit":30597,"src":"395:55:82","symbolAliases":[{"foreign":{"id":22405,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"403:10:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IDiamondCut.sol","file":"../interfaces/IDiamondCut.sol","id":22408,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22526,"sourceUnit":26945,"src":"451:58:82","symbolAliases":[{"foreign":{"id":22407,"name":"IDiamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26944,"src":"459:11:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ConnextDiamond","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":22525,"linearizedBaseContracts":[22525],"name":"ConnextDiamond","nameLocation":"520:14:82","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ConnextDiamond.Initialization","id":22413,"members":[{"constant":false,"id":22410,"mutability":"mutable","name":"initContract","nameLocation":"575:12:82","nodeType":"VariableDeclaration","scope":22413,"src":"567:20:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22409,"name":"address","nodeType":"ElementaryTypeName","src":"567:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22412,"mutability":"mutable","name":"initData","nameLocation":"599:8:82","nodeType":"VariableDeclaration","scope":22413,"src":"593:14:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":22411,"name":"bytes","nodeType":"ElementaryTypeName","src":"593:5:82","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"Initialization","nameLocation":"546:14:82","nodeType":"StructDefinition","scope":22525,"src":"539:73:82","visibility":"public"},{"body":{"id":22483,"nodeType":"Block","src":"1155:389:82","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22427,"name":"_contractOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22416,"src":"1165:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":22430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1191:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22429,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1183:7:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22428,"name":"address","nodeType":"ElementaryTypeName","src":"1183:7:82","typeDescriptions":{}}},"id":22431,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1183:10:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1165:28:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22440,"nodeType":"IfStatement","src":"1161:92:82","trueBody":{"id":22439,"nodeType":"Block","src":"1195:58:82","statements":[{"expression":{"arguments":[{"id":22436,"name":"_contractOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22416,"src":"1231:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22433,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"1203:10:82","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":22435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1214:16:82","memberName":"setContractOwner","nodeType":"MemberAccess","referencedDeclaration":29633,"src":"1203:27:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":22437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1203:43:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22438,"nodeType":"ExpressionStatement","src":"1203:43:82"}]}},{"expression":{"arguments":[{"id":22444,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22420,"src":"1281:11:82","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"}},{"arguments":[{"hexValue":"30","id":22447,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1302:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22446,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1294:7:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22445,"name":"address","nodeType":"ElementaryTypeName","src":"1294:7:82","typeDescriptions":{}}},"id":22448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1294:10:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":22449,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1306:2:82","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":22441,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"1259:10:82","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":22443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1270:10:82","memberName":"diamondCut","nodeType":"MemberAccess","referencedDeclaration":29953,"src":"1259:21:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (struct IDiamondCut.FacetCut memory[] memory,address,bytes memory)"}},"id":22450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1259:50:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22451,"nodeType":"ExpressionStatement","src":"1259:50:82"},{"assignments":[22453],"declarations":[{"constant":false,"id":22453,"mutability":"mutable","name":"len","nameLocation":"1324:3:82","nodeType":"VariableDeclaration","scope":22483,"src":"1316:11:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22452,"name":"uint256","nodeType":"ElementaryTypeName","src":"1316:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22456,"initialValue":{"expression":{"id":22454,"name":"_initializations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22424,"src":"1330:16:82","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Initialization_$22413_memory_ptr_$dyn_memory_ptr","typeString":"struct ConnextDiamond.Initialization memory[] memory"}},"id":22455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1347:6:82","memberName":"length","nodeType":"MemberAccess","src":"1330:23:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1316:37:82"},{"body":{"id":22481,"nodeType":"Block","src":"1390:150:82","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"id":22467,"name":"_initializations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22424,"src":"1430:16:82","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Initialization_$22413_memory_ptr_$dyn_memory_ptr","typeString":"struct ConnextDiamond.Initialization memory[] memory"}},"id":22469,"indexExpression":{"id":22468,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22458,"src":"1447:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1430:19:82","typeDescriptions":{"typeIdentifier":"t_struct$_Initialization_$22413_memory_ptr","typeString":"struct ConnextDiamond.Initialization memory"}},"id":22470,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1450:12:82","memberName":"initContract","nodeType":"MemberAccess","referencedDeclaration":22410,"src":"1430:32:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":22471,"name":"_initializations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22424,"src":"1464:16:82","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Initialization_$22413_memory_ptr_$dyn_memory_ptr","typeString":"struct ConnextDiamond.Initialization memory[] memory"}},"id":22473,"indexExpression":{"id":22472,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22458,"src":"1481:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1464:19:82","typeDescriptions":{"typeIdentifier":"t_struct$_Initialization_$22413_memory_ptr","typeString":"struct ConnextDiamond.Initialization memory"}},"id":22474,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1484:8:82","memberName":"initData","nodeType":"MemberAccess","referencedDeclaration":22412,"src":"1464:28:82","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":22464,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"1398:10:82","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":22466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1409:20:82","memberName":"initializeDiamondCut","nodeType":"MemberAccess","referencedDeclaration":30578,"src":"1398:31:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory)"}},"id":22475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1398:95:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22476,"nodeType":"ExpressionStatement","src":"1398:95:82"},{"id":22480,"nodeType":"UncheckedBlock","src":"1502:32:82","statements":[{"expression":{"id":22478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"1522:3:82","subExpression":{"id":22477,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22458,"src":"1524:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22479,"nodeType":"ExpressionStatement","src":"1522:3:82"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22461,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22458,"src":"1379:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":22462,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22453,"src":"1383:3:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1379:7:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22482,"initializationExpression":{"assignments":[22458],"declarations":[{"constant":false,"id":22458,"mutability":"mutable","name":"i","nameLocation":"1372:1:82","nodeType":"VariableDeclaration","scope":22482,"src":"1364:9:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22457,"name":"uint256","nodeType":"ElementaryTypeName","src":"1364:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22460,"initialValue":{"hexValue":"30","id":22459,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1376:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1364:13:82"},"nodeType":"ForStatement","src":"1359:181:82"}]},"documentation":{"id":22414,"nodeType":"StructuredDocumentation","src":"616:391:82","text":"@notice This construct a diamond contract\n @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n @param _diamondCut the list of facet to add\n @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization."},"id":22484,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22425,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22416,"mutability":"mutable","name":"_contractOwner","nameLocation":"1035:14:82","nodeType":"VariableDeclaration","scope":22484,"src":"1027:22:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22415,"name":"address","nodeType":"ElementaryTypeName","src":"1027:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22420,"mutability":"mutable","name":"_diamondCut","nameLocation":"1085:11:82","nodeType":"VariableDeclaration","scope":22484,"src":"1055:41:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut[]"},"typeName":{"baseType":{"id":22418,"nodeType":"UserDefinedTypeName","pathNode":{"id":22417,"name":"IDiamondCut.FacetCut","nameLocations":["1055:11:82","1067:8:82"],"nodeType":"IdentifierPath","referencedDeclaration":26861,"src":"1055:20:82"},"referencedDeclaration":26861,"src":"1055:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_storage_ptr","typeString":"struct IDiamondCut.FacetCut"}},"id":22419,"nodeType":"ArrayTypeName","src":"1055:22:82","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_storage_$dyn_storage_ptr","typeString":"struct IDiamondCut.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":22424,"mutability":"mutable","name":"_initializations","nameLocation":"1126:16:82","nodeType":"VariableDeclaration","scope":22484,"src":"1102:40:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Initialization_$22413_memory_ptr_$dyn_memory_ptr","typeString":"struct ConnextDiamond.Initialization[]"},"typeName":{"baseType":{"id":22422,"nodeType":"UserDefinedTypeName","pathNode":{"id":22421,"name":"Initialization","nameLocations":["1102:14:82"],"nodeType":"IdentifierPath","referencedDeclaration":22413,"src":"1102:14:82"},"referencedDeclaration":22413,"src":"1102:14:82","typeDescriptions":{"typeIdentifier":"t_struct$_Initialization_$22413_storage_ptr","typeString":"struct ConnextDiamond.Initialization"}},"id":22423,"nodeType":"ArrayTypeName","src":"1102:16:82","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Initialization_$22413_storage_$dyn_storage_ptr","typeString":"struct ConnextDiamond.Initialization[]"}},"visibility":"internal"}],"src":"1021:125:82"},"returnParameters":{"id":22426,"nodeType":"ParameterList","parameters":[],"src":"1155:0:82"},"scope":22525,"src":"1010:534:82","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":22519,"nodeType":"Block","src":"1692:955:82","statements":[{"assignments":[22491],"declarations":[{"constant":false,"id":22491,"mutability":"mutable","name":"ds","nameLocation":"1732:2:82","nodeType":"VariableDeclaration","scope":22519,"src":"1698:36:82","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"},"typeName":{"id":22490,"nodeType":"UserDefinedTypeName","pathNode":{"id":22489,"name":"LibDiamond.DiamondStorage","nameLocations":["1698:10:82","1709:14:82"],"nodeType":"IdentifierPath","referencedDeclaration":29591,"src":"1698:25:82"},"referencedDeclaration":29591,"src":"1698:25:82","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"}},"visibility":"internal"}],"id":22492,"nodeType":"VariableDeclarationStatement","src":"1698:36:82"},{"assignments":[22494],"declarations":[{"constant":false,"id":22494,"mutability":"mutable","name":"position","nameLocation":"1748:8:82","nodeType":"VariableDeclaration","scope":22519,"src":"1740:16:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":22493,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1740:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":22497,"initialValue":{"expression":{"id":22495,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"1759:10:82","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibDiamond_$30596_$","typeString":"type(library LibDiamond)"}},"id":22496,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1770:24:82","memberName":"DIAMOND_STORAGE_POSITION","nodeType":"MemberAccess","referencedDeclaration":29554,"src":"1759:35:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1740:54:82"},{"AST":{"nodeType":"YulBlock","src":"1836:33:82","statements":[{"nodeType":"YulAssignment","src":"1844:19:82","value":{"name":"position","nodeType":"YulIdentifier","src":"1855:8:82"},"variableNames":[{"name":"ds.slot","nodeType":"YulIdentifier","src":"1844:7:82"}]}]},"evmVersion":"london","externalReferences":[{"declaration":22491,"isOffset":false,"isSlot":true,"src":"1844:7:82","suffix":"slot","valueSize":1},{"declaration":22494,"isOffset":false,"isSlot":false,"src":"1855:8:82","valueSize":1}],"id":22498,"nodeType":"InlineAssembly","src":"1827:42:82"},{"assignments":[22500],"declarations":[{"constant":false,"id":22500,"mutability":"mutable","name":"facet","nameLocation":"1922:5:82","nodeType":"VariableDeclaration","scope":22519,"src":"1914:13:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22499,"name":"address","nodeType":"ElementaryTypeName","src":"1914:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":22507,"initialValue":{"expression":{"baseExpression":{"expression":{"id":22501,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22491,"src":"1930:2:82","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":22502,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1933:26:82","memberName":"selectorToFacetAndPosition","nodeType":"MemberAccess","referencedDeclaration":29570,"src":"1930:29:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$29559_storage_$","typeString":"mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"}},"id":22505,"indexExpression":{"expression":{"id":22503,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1960:3:82","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1964:3:82","memberName":"sig","nodeType":"MemberAccess","src":"1960:7:82","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1930:38:82","typeDescriptions":{"typeIdentifier":"t_struct$_FacetAddressAndPosition_$29559_storage","typeString":"struct LibDiamond.FacetAddressAndPosition storage ref"}},"id":22506,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1969:12:82","memberName":"facetAddress","nodeType":"MemberAccess","referencedDeclaration":29556,"src":"1930:51:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1914:67:82"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22509,"name":"facet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22500,"src":"1995:5:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":22512,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2012:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22511,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2004:7:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22510,"name":"address","nodeType":"ElementaryTypeName","src":"2004:7:82","typeDescriptions":{}}},"id":22513,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2004:10:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1995:19:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374","id":22515,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2016:34:82","typeDescriptions":{"typeIdentifier":"t_stringliteral_6e6486aeb9db70da259b7171a739046119facaec2d8a6bd46f1145fe8391014a","typeString":"literal_string \"Diamond: Function does not exist\""},"value":"Diamond: Function does not exist"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6e6486aeb9db70da259b7171a739046119facaec2d8a6bd46f1145fe8391014a","typeString":"literal_string \"Diamond: Function does not exist\""}],"id":22508,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1987:7:82","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1987:64:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22517,"nodeType":"ExpressionStatement","src":"1987:64:82"},{"AST":{"nodeType":"YulBlock","src":"2151:492:82","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2222:1:82","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2225:1:82","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"2228:12:82"},"nodeType":"YulFunctionCall","src":"2228:14:82"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"2209:12:82"},"nodeType":"YulFunctionCall","src":"2209:34:82"},"nodeType":"YulExpressionStatement","src":"2209:34:82"},{"nodeType":"YulVariableDeclaration","src":"2297:65:82","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"2324:3:82"},"nodeType":"YulFunctionCall","src":"2324:5:82"},{"name":"facet","nodeType":"YulIdentifier","src":"2331:5:82"},{"kind":"number","nodeType":"YulLiteral","src":"2338:1:82","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"2341:12:82"},"nodeType":"YulFunctionCall","src":"2341:14:82"},{"kind":"number","nodeType":"YulLiteral","src":"2357:1:82","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2360:1:82","type":"","value":"0"}],"functionName":{"name":"delegatecall","nodeType":"YulIdentifier","src":"2311:12:82"},"nodeType":"YulFunctionCall","src":"2311:51:82"},"variables":[{"name":"result","nodeType":"YulTypedName","src":"2301:6:82","type":""}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2414:1:82","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2417:1:82","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"2420:14:82"},"nodeType":"YulFunctionCall","src":"2420:16:82"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"2399:14:82"},"nodeType":"YulFunctionCall","src":"2399:38:82"},"nodeType":"YulExpressionStatement","src":"2399:38:82"},{"cases":[{"body":{"nodeType":"YulBlock","src":"2532:45:82","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2549:1:82","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"2552:14:82"},"nodeType":"YulFunctionCall","src":"2552:16:82"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2542:6:82"},"nodeType":"YulFunctionCall","src":"2542:27:82"},"nodeType":"YulExpressionStatement","src":"2542:27:82"}]},"nodeType":"YulCase","src":"2525:52:82","value":{"kind":"number","nodeType":"YulLiteral","src":"2530:1:82","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"2592:45:82","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2609:1:82","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"2612:14:82"},"nodeType":"YulFunctionCall","src":"2612:16:82"}],"functionName":{"name":"return","nodeType":"YulIdentifier","src":"2602:6:82"},"nodeType":"YulFunctionCall","src":"2602:27:82"},"nodeType":"YulExpressionStatement","src":"2602:27:82"}]},"nodeType":"YulCase","src":"2584:53:82","value":"default"}],"expression":{"name":"result","nodeType":"YulIdentifier","src":"2512:6:82"},"nodeType":"YulSwitch","src":"2505:132:82"}]},"evmVersion":"london","externalReferences":[{"declaration":22500,"isOffset":false,"isSlot":false,"src":"2331:5:82","valueSize":1}],"id":22518,"nodeType":"InlineAssembly","src":"2142:501:82"}]},"id":22520,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22485,"nodeType":"ParameterList","parameters":[],"src":"1672:2:82"},"returnParameters":{"id":22486,"nodeType":"ParameterList","parameters":[],"src":"1692:0:82"},"scope":22525,"src":"1664:983:82","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":22523,"nodeType":"Block","src":"2678:2:82","statements":[]},"id":22524,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22521,"nodeType":"ParameterList","parameters":[],"src":"2658:2:82"},"returnParameters":{"id":22522,"nodeType":"ParameterList","parameters":[],"src":"2678:0:82"},"scope":22525,"src":"2651:29:82","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":22526,"src":"511:2171:82","usedErrors":[]}],"src":"32:2651:82"},"id":82},"contracts/core/connext/helpers/ConnextPriceOracle.sol":{"ast":{"absolutePath":"contracts/core/connext/helpers/ConnextPriceOracle.sol","exportedSymbols":{"AggregatorV3Interface":[22566],"ConnextPriceOracle":[23044],"Constants":[29304],"IPriceOracle":[27015],"PriceOracle":[24111],"ProposedOwnable":[49928],"SafeERC20":[11154]},"id":23045,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":22527,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"32:23:83"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":22529,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23045,"sourceUnit":11155,"src":"57:82:83","symbolAliases":[{"foreign":{"id":22528,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11154,"src":"65:9:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IPriceOracle.sol","file":"../interfaces/IPriceOracle.sol","id":22531,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23045,"sourceUnit":27016,"src":"141:60:83","symbolAliases":[{"foreign":{"id":22530,"name":"IPriceOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27015,"src":"149:12:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/Constants.sol","file":"../libraries/Constants.sol","id":22533,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23045,"sourceUnit":29305,"src":"203:53:83","symbolAliases":[{"foreign":{"id":22532,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"211:9:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/ProposedOwnable.sol","file":"../../../shared/ProposedOwnable.sol","id":22535,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23045,"sourceUnit":49929,"src":"258:68:83","symbolAliases":[{"foreign":{"id":22534,"name":"ProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49928,"src":"266:15:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/helpers/PriceOracle.sol","file":"./PriceOracle.sol","id":22537,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23045,"sourceUnit":24112,"src":"327:46:83","symbolAliases":[{"foreign":{"id":22536,"name":"PriceOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24111,"src":"335:11:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"AggregatorV3Interface","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":22566,"linearizedBaseContracts":[22566],"name":"AggregatorV3Interface","nameLocation":"385:21:83","nodeType":"ContractDefinition","nodes":[{"functionSelector":"313ce567","id":22542,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"420:8:83","nodeType":"FunctionDefinition","parameters":{"id":22538,"nodeType":"ParameterList","parameters":[],"src":"428:2:83"},"returnParameters":{"id":22541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22540,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22542,"src":"454:5:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":22539,"name":"uint8","nodeType":"ElementaryTypeName","src":"454:5:83","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"453:7:83"},"scope":22566,"src":"411:50:83","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"7284e416","id":22547,"implemented":false,"kind":"function","modifiers":[],"name":"description","nameLocation":"474:11:83","nodeType":"FunctionDefinition","parameters":{"id":22543,"nodeType":"ParameterList","parameters":[],"src":"485:2:83"},"returnParameters":{"id":22546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22545,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22547,"src":"511:13:83","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":22544,"name":"string","nodeType":"ElementaryTypeName","src":"511:6:83","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"510:15:83"},"scope":22566,"src":"465:61:83","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"54fd4d50","id":22552,"implemented":false,"kind":"function","modifiers":[],"name":"version","nameLocation":"539:7:83","nodeType":"FunctionDefinition","parameters":{"id":22548,"nodeType":"ParameterList","parameters":[],"src":"546:2:83"},"returnParameters":{"id":22551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22550,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22552,"src":"572:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22549,"name":"uint256","nodeType":"ElementaryTypeName","src":"572:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"571:9:83"},"scope":22566,"src":"530:51:83","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"feaf968c","id":22565,"implemented":false,"kind":"function","modifiers":[],"name":"latestRoundData","nameLocation":"594:15:83","nodeType":"FunctionDefinition","parameters":{"id":22553,"nodeType":"ParameterList","parameters":[],"src":"609:2:83"},"returnParameters":{"id":22564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22555,"mutability":"mutable","name":"roundId","nameLocation":"661:7:83","nodeType":"VariableDeclaration","scope":22565,"src":"654:14:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":22554,"name":"uint80","nodeType":"ElementaryTypeName","src":"654:6:83","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"},{"constant":false,"id":22557,"mutability":"mutable","name":"answer","nameLocation":"683:6:83","nodeType":"VariableDeclaration","scope":22565,"src":"676:13:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":22556,"name":"int256","nodeType":"ElementaryTypeName","src":"676:6:83","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":22559,"mutability":"mutable","name":"startedAt","nameLocation":"705:9:83","nodeType":"VariableDeclaration","scope":22565,"src":"697:17:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22558,"name":"uint256","nodeType":"ElementaryTypeName","src":"697:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22561,"mutability":"mutable","name":"updatedAt","nameLocation":"730:9:83","nodeType":"VariableDeclaration","scope":22565,"src":"722:17:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22560,"name":"uint256","nodeType":"ElementaryTypeName","src":"722:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22563,"mutability":"mutable","name":"answeredInRound","nameLocation":"754:15:83","nodeType":"VariableDeclaration","scope":22565,"src":"747:22:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":22562,"name":"uint80","nodeType":"ElementaryTypeName","src":"747:6:83","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"646:129:83"},"scope":22566,"src":"585:191:83","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":23045,"src":"375:403:83","usedErrors":[]},{"abstract":false,"baseContracts":[{"baseName":{"id":22568,"name":"PriceOracle","nameLocations":["1029:11:83"],"nodeType":"IdentifierPath","referencedDeclaration":24111,"src":"1029:11:83"},"id":22569,"nodeType":"InheritanceSpecifier","src":"1029:11:83"},{"baseName":{"id":22570,"name":"ProposedOwnable","nameLocations":["1042:15:83"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"1042:15:83"},"id":22571,"nodeType":"InheritanceSpecifier","src":"1042:15:83"}],"canonicalName":"ConnextPriceOracle","contractDependencies":[],"contractKind":"contract","documentation":{"id":22567,"nodeType":"StructuredDocumentation","src":"780:217:83","text":" @title ConnextPriceOracle\n @notice Simple interface for querying a variety of price feeds\n @dev If ownership is renounced, the direct price, aggregators, and price oracles\n can no longer be updated"},"fullyImplemented":true,"id":23044,"linearizedBaseContracts":[23044,49928,50003,24111],"name":"ConnextPriceOracle","nameLocation":"1007:18:83","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"50e70d48","id":22573,"mutability":"mutable","name":"wrapped","nameLocation":"1077:7:83","nodeType":"VariableDeclaration","scope":23044,"src":"1062:22:83","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22572,"name":"address","nodeType":"ElementaryTypeName","src":"1062:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"fe10c98d","id":22575,"mutability":"mutable","name":"v1PriceOracle","nameLocation":"1103:13:83","nodeType":"VariableDeclaration","scope":23044,"src":"1088:28:83","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22574,"name":"address","nodeType":"ElementaryTypeName","src":"1088:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"canonicalName":"ConnextPriceOracle.PriceSource","id":22580,"members":[{"id":22576,"name":"NA","nameLocation":"1172:2:83","nodeType":"EnumValue","src":"1172:2:83"},{"id":22577,"name":"DIRECT","nameLocation":"1180:6:83","nodeType":"EnumValue","src":"1180:6:83"},{"id":22578,"name":"CHAINLINK","nameLocation":"1192:9:83","nodeType":"EnumValue","src":"1192:9:83"},{"id":22579,"name":"V1_ORACLE","nameLocation":"1207:9:83","nodeType":"EnumValue","src":"1207:9:83"}],"name":"PriceSource","nameLocation":"1154:11:83","nodeType":"EnumDefinition","src":"1149:71:83"},{"constant":false,"documentation":{"id":22581,"nodeType":"StructuredDocumentation","src":"1224:33:83","text":"@notice Chainlink Aggregators"},"functionSelector":"112cdab9","id":22586,"mutability":"mutable","name":"aggregators","nameLocation":"1309:11:83","nodeType":"VariableDeclaration","scope":23044,"src":"1260:60:83","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$22566_$","typeString":"mapping(address => contract AggregatorV3Interface)"},"typeName":{"id":22585,"keyType":{"id":22582,"name":"address","nodeType":"ElementaryTypeName","src":"1268:7:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1260:41:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$22566_$","typeString":"mapping(address => contract AggregatorV3Interface)"},"valueType":{"id":22584,"nodeType":"UserDefinedTypeName","pathNode":{"id":22583,"name":"AggregatorV3Interface","nameLocations":["1279:21:83"],"nodeType":"IdentifierPath","referencedDeclaration":22566,"src":"1279:21:83"},"referencedDeclaration":22566,"src":"1279:21:83","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$22566","typeString":"contract AggregatorV3Interface"}}},"visibility":"public"},{"canonicalName":"ConnextPriceOracle.Price","id":22591,"members":[{"constant":false,"id":22588,"mutability":"mutable","name":"updatedAt","nameLocation":"1352:9:83","nodeType":"VariableDeclaration","scope":22591,"src":"1344:17:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22587,"name":"uint256","nodeType":"ElementaryTypeName","src":"1344:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22590,"mutability":"mutable","name":"price","nameLocation":"1375:5:83","nodeType":"VariableDeclaration","scope":22591,"src":"1367:13:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22589,"name":"uint256","nodeType":"ElementaryTypeName","src":"1367:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Price","nameLocation":"1332:5:83","nodeType":"StructDefinition","scope":23044,"src":"1325:60:83","visibility":"public"},{"constant":false,"functionSelector":"5e9a523c","id":22596,"mutability":"mutable","name":"assetPrices","nameLocation":"1422:11:83","nodeType":"VariableDeclaration","scope":23044,"src":"1389:44:83","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Price_$22591_storage_$","typeString":"mapping(address => struct ConnextPriceOracle.Price)"},"typeName":{"id":22595,"keyType":{"id":22592,"name":"address","nodeType":"ElementaryTypeName","src":"1397:7:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1389:25:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Price_$22591_storage_$","typeString":"mapping(address => struct ConnextPriceOracle.Price)"},"valueType":{"id":22594,"nodeType":"UserDefinedTypeName","pathNode":{"id":22593,"name":"Price","nameLocations":["1408:5:83"],"nodeType":"IdentifierPath","referencedDeclaration":22591,"src":"1408:5:83"},"referencedDeclaration":22591,"src":"1408:5:83","typeDescriptions":{"typeIdentifier":"t_struct$_Price_$22591_storage_ptr","typeString":"struct ConnextPriceOracle.Price"}}},"visibility":"public"},{"anonymous":false,"eventSelector":"e2c8fb681c257e4e8df5ef1c464cff10ce6b072837628c9b6de5e7239a483e5d","id":22604,"name":"DirectPriceUpdated","nameLocation":"1444:18:83","nodeType":"EventDefinition","parameters":{"id":22603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22598,"indexed":false,"mutability":"mutable","name":"token","nameLocation":"1471:5:83","nodeType":"VariableDeclaration","scope":22604,"src":"1463:13:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22597,"name":"address","nodeType":"ElementaryTypeName","src":"1463:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22600,"indexed":false,"mutability":"mutable","name":"oldPrice","nameLocation":"1486:8:83","nodeType":"VariableDeclaration","scope":22604,"src":"1478:16:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22599,"name":"uint256","nodeType":"ElementaryTypeName","src":"1478:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22602,"indexed":false,"mutability":"mutable","name":"newPrice","nameLocation":"1504:8:83","nodeType":"VariableDeclaration","scope":22604,"src":"1496:16:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22601,"name":"uint256","nodeType":"ElementaryTypeName","src":"1496:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1462:51:83"},"src":"1438:76:83"},{"anonymous":false,"eventSelector":"89baabef7dfd0683c0ac16fd2a8431c51b49fbe654c3f7b5ef19763e2ccd88f2","id":22610,"name":"AggregatorUpdated","nameLocation":"1523:17:83","nodeType":"EventDefinition","parameters":{"id":22609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22606,"indexed":false,"mutability":"mutable","name":"tokenAddress","nameLocation":"1549:12:83","nodeType":"VariableDeclaration","scope":22610,"src":"1541:20:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22605,"name":"address","nodeType":"ElementaryTypeName","src":"1541:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22608,"indexed":false,"mutability":"mutable","name":"source","nameLocation":"1571:6:83","nodeType":"VariableDeclaration","scope":22610,"src":"1563:14:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22607,"name":"address","nodeType":"ElementaryTypeName","src":"1563:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1540:38:83"},"src":"1517:62:83"},{"anonymous":false,"eventSelector":"42e2900b37aa23ca681e13d6efc8018181fa216ca6676cf2b983e00e056afc2c","id":22616,"name":"V1PriceOracleUpdated","nameLocation":"1588:20:83","nodeType":"EventDefinition","parameters":{"id":22615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22612,"indexed":false,"mutability":"mutable","name":"oldAddress","nameLocation":"1617:10:83","nodeType":"VariableDeclaration","scope":22616,"src":"1609:18:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22611,"name":"address","nodeType":"ElementaryTypeName","src":"1609:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22614,"indexed":false,"mutability":"mutable","name":"newAddress","nameLocation":"1637:10:83","nodeType":"VariableDeclaration","scope":22616,"src":"1629:18:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22613,"name":"address","nodeType":"ElementaryTypeName","src":"1629:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1608:40:83"},"src":"1582:67:83"},{"body":{"id":22640,"nodeType":"Block","src":"1683:119:83","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22622,"name":"_wrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22618,"src":"1697:8:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":22625,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1717:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22624,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1709:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22623,"name":"address","nodeType":"ElementaryTypeName","src":"1709:7:83","typeDescriptions":{}}},"id":22626,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1709:10:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1697:22:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7a65726f2077726170706564206164647265737321","id":22628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1721:23:83","typeDescriptions":{"typeIdentifier":"t_stringliteral_8358411cc6d79ba42cfad693068d69d50e3868c486635f450efaf87314757a4d","typeString":"literal_string \"zero wrapped address!\""},"value":"zero wrapped address!"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8358411cc6d79ba42cfad693068d69d50e3868c486635f450efaf87314757a4d","typeString":"literal_string \"zero wrapped address!\""}],"id":22621,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1689:7:83","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1689:56:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22630,"nodeType":"ExpressionStatement","src":"1689:56:83"},{"expression":{"id":22633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22631,"name":"wrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22573,"src":"1752:7:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22632,"name":"_wrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22618,"src":"1762:8:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1752:18:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":22634,"nodeType":"ExpressionStatement","src":"1752:18:83"},{"expression":{"arguments":[{"expression":{"id":22636,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1786:3:83","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1790:6:83","memberName":"sender","nodeType":"MemberAccess","src":"1786:10:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22635,"name":"_setOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49908,"src":"1776:9:83","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":22638,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1776:21:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22639,"nodeType":"ExpressionStatement","src":"1776:21:83"}]},"id":22641,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22618,"mutability":"mutable","name":"_wrapped","nameLocation":"1673:8:83","nodeType":"VariableDeclaration","scope":22641,"src":"1665:16:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22617,"name":"address","nodeType":"ElementaryTypeName","src":"1665:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1664:18:83"},"returnParameters":{"id":22620,"nodeType":"ParameterList","parameters":[],"src":"1683:0:83"},"scope":23044,"src":"1653:149:83","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[24110],"body":{"id":22757,"nodeType":"Block","src":"1900:1169:83","statements":[{"assignments":[22652],"declarations":[{"constant":false,"id":22652,"mutability":"mutable","name":"tokenAddress","nameLocation":"1914:12:83","nodeType":"VariableDeclaration","scope":22757,"src":"1906:20:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22651,"name":"address","nodeType":"ElementaryTypeName","src":"1906:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":22654,"initialValue":{"id":22653,"name":"_tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22643,"src":"1929:13:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1906:36:83"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22655,"name":"_tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22643,"src":"2010:13:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":22658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2035:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22657,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2027:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22656,"name":"address","nodeType":"ElementaryTypeName","src":"2027:7:83","typeDescriptions":{}}},"id":22659,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2027:10:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2010:27:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22666,"nodeType":"IfStatement","src":"2006:70:83","trueBody":{"id":22665,"nodeType":"Block","src":"2039:37:83","statements":[{"expression":{"id":22663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22661,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22652,"src":"2047:12:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22662,"name":"wrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22573,"src":"2062:7:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2047:22:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":22664,"nodeType":"ExpressionStatement","src":"2047:22:83"}]}},{"assignments":[22668],"declarations":[{"constant":false,"id":22668,"mutability":"mutable","name":"tokenPrice","nameLocation":"2185:10:83","nodeType":"VariableDeclaration","scope":22757,"src":"2177:18:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22667,"name":"uint256","nodeType":"ElementaryTypeName","src":"2177:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22673,"initialValue":{"expression":{"baseExpression":{"id":22669,"name":"assetPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22596,"src":"2198:11:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Price_$22591_storage_$","typeString":"mapping(address => struct ConnextPriceOracle.Price storage ref)"}},"id":22671,"indexExpression":{"id":22670,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22652,"src":"2210:12:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2198:25:83","typeDescriptions":{"typeIdentifier":"t_struct$_Price_$22591_storage","typeString":"struct ConnextPriceOracle.Price storage ref"}},"id":22672,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2224:5:83","memberName":"price","nodeType":"MemberAccess","referencedDeclaration":22590,"src":"2198:31:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2177:52:83"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22674,"name":"tokenPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22668,"src":"2327:10:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":22675,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2341:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2327:15:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22677,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2348:5:83","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":22678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2354:9:83","memberName":"timestamp","nodeType":"MemberAccess","src":"2348:15:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"baseExpression":{"id":22679,"name":"assetPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22596,"src":"2366:11:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Price_$22591_storage_$","typeString":"mapping(address => struct ConnextPriceOracle.Price storage ref)"}},"id":22681,"indexExpression":{"id":22680,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22652,"src":"2378:12:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2366:25:83","typeDescriptions":{"typeIdentifier":"t_struct$_Price_$22591_storage","typeString":"struct ConnextPriceOracle.Price storage ref"}},"id":22682,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2392:9:83","memberName":"updatedAt","nodeType":"MemberAccess","referencedDeclaration":22588,"src":"2366:35:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2348:53:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22684,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2347:55:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":22685,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"2405:9:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":22686,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2415:19:83","memberName":"ORACLE_VALID_PERIOD","nodeType":"MemberAccess","referencedDeclaration":29236,"src":"2405:29:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2347:87:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":22688,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2346:89:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2327:108:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22699,"nodeType":"IfStatement","src":"2323:177:83","trueBody":{"id":22698,"nodeType":"Block","src":"2437:63:83","statements":[{"expression":{"components":[{"id":22690,"name":"tokenPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22668,"src":"2453:10:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":22693,"name":"PriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22580,"src":"2473:11:83","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_PriceSource_$22580_$","typeString":"type(enum ConnextPriceOracle.PriceSource)"}},"id":22694,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2485:6:83","memberName":"DIRECT","nodeType":"MemberAccess","referencedDeclaration":22577,"src":"2473:18:83","typeDescriptions":{"typeIdentifier":"t_enum$_PriceSource_$22580","typeString":"enum ConnextPriceOracle.PriceSource"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_PriceSource_$22580","typeString":"enum ConnextPriceOracle.PriceSource"}],"id":22692,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2465:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":22691,"name":"uint256","nodeType":"ElementaryTypeName","src":"2465:7:83","typeDescriptions":{}}},"id":22695,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2465:27:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22696,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2452:41:83","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":22650,"id":22697,"nodeType":"Return","src":"2445:48:83"}]}},{"expression":{"id":22704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22700,"name":"tokenPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22668,"src":"2600:10:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":22702,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22652,"src":"2632:12:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22701,"name":"getPriceFromOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22774,"src":"2613:18:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":22703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2613:32:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2600:45:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22705,"nodeType":"ExpressionStatement","src":"2600:45:83"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22706,"name":"tokenPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22668,"src":"2655:10:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":22707,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2669:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2655:15:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22718,"nodeType":"IfStatement","src":"2651:87:83","trueBody":{"id":22717,"nodeType":"Block","src":"2672:66:83","statements":[{"expression":{"components":[{"id":22709,"name":"tokenPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22668,"src":"2688:10:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":22712,"name":"PriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22580,"src":"2708:11:83","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_PriceSource_$22580_$","typeString":"type(enum ConnextPriceOracle.PriceSource)"}},"id":22713,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2720:9:83","memberName":"CHAINLINK","nodeType":"MemberAccess","referencedDeclaration":22578,"src":"2708:21:83","typeDescriptions":{"typeIdentifier":"t_enum$_PriceSource_$22580","typeString":"enum ConnextPriceOracle.PriceSource"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_PriceSource_$22580","typeString":"enum ConnextPriceOracle.PriceSource"}],"id":22711,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2700:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":22710,"name":"uint256","nodeType":"ElementaryTypeName","src":"2700:7:83","typeDescriptions":{}}},"id":22714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2700:30:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22715,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2687:44:83","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":22650,"id":22716,"nodeType":"Return","src":"2680:51:83"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22719,"name":"v1PriceOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22575,"src":"2813:13:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":22722,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2838:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22721,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2830:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22720,"name":"address","nodeType":"ElementaryTypeName","src":"2830:7:83","typeDescriptions":{}}},"id":22723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2830:10:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2813:27:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22748,"nodeType":"IfStatement","src":"2809:214:83","trueBody":{"id":22747,"nodeType":"Block","src":"2842:181:83","statements":[{"expression":{"id":22732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22725,"name":"tokenPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22668,"src":"2850:10:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":22730,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22652,"src":"2905:12:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":22727,"name":"v1PriceOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22575,"src":"2876:13:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22726,"name":"IPriceOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27015,"src":"2863:12:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPriceOracle_$27015_$","typeString":"type(contract IPriceOracle)"}},"id":22728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2863:27:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracle_$27015","typeString":"contract IPriceOracle"}},"id":22729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2891:13:83","memberName":"getTokenPrice","nodeType":"MemberAccess","referencedDeclaration":27006,"src":"2863:41:83","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":22731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2863:55:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2850:68:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22733,"nodeType":"ExpressionStatement","src":"2850:68:83"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22734,"name":"tokenPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22668,"src":"2930:10:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":22735,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2944:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2930:15:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22746,"nodeType":"IfStatement","src":"2926:91:83","trueBody":{"id":22745,"nodeType":"Block","src":"2947:70:83","statements":[{"expression":{"components":[{"id":22737,"name":"tokenPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22668,"src":"2965:10:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":22740,"name":"PriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22580,"src":"2985:11:83","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_PriceSource_$22580_$","typeString":"type(enum ConnextPriceOracle.PriceSource)"}},"id":22741,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2997:9:83","memberName":"V1_ORACLE","nodeType":"MemberAccess","referencedDeclaration":22579,"src":"2985:21:83","typeDescriptions":{"typeIdentifier":"t_enum$_PriceSource_$22580","typeString":"enum ConnextPriceOracle.PriceSource"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_PriceSource_$22580","typeString":"enum ConnextPriceOracle.PriceSource"}],"id":22739,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2977:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":22738,"name":"uint256","nodeType":"ElementaryTypeName","src":"2977:7:83","typeDescriptions":{}}},"id":22742,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2977:30:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22743,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2964:44:83","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":22650,"id":22744,"nodeType":"Return","src":"2957:51:83"}]}}]}},{"expression":{"components":[{"hexValue":"30","id":22749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3037:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"expression":{"id":22752,"name":"PriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22580,"src":"3048:11:83","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_PriceSource_$22580_$","typeString":"type(enum ConnextPriceOracle.PriceSource)"}},"id":22753,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3060:2:83","memberName":"NA","nodeType":"MemberAccess","referencedDeclaration":22576,"src":"3048:14:83","typeDescriptions":{"typeIdentifier":"t_enum$_PriceSource_$22580","typeString":"enum ConnextPriceOracle.PriceSource"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_PriceSource_$22580","typeString":"enum ConnextPriceOracle.PriceSource"}],"id":22751,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3040:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":22750,"name":"uint256","nodeType":"ElementaryTypeName","src":"3040:7:83","typeDescriptions":{}}},"id":22754,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3040:23:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22755,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3036:28:83","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_uint256_$","typeString":"tuple(int_const 0,uint256)"}},"functionReturnParameters":22650,"id":22756,"nodeType":"Return","src":"3029:35:83"}]},"functionSelector":"d02641a0","id":22758,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenPrice","nameLocation":"1815:13:83","nodeType":"FunctionDefinition","overrides":{"id":22645,"nodeType":"OverrideSpecifier","overrides":[],"src":"1864:8:83"},"parameters":{"id":22644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22643,"mutability":"mutable","name":"_tokenAddress","nameLocation":"1837:13:83","nodeType":"VariableDeclaration","scope":22758,"src":"1829:21:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22642,"name":"address","nodeType":"ElementaryTypeName","src":"1829:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1828:23:83"},"returnParameters":{"id":22650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22647,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22758,"src":"1882:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22646,"name":"uint256","nodeType":"ElementaryTypeName","src":"1882:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22649,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22758,"src":"1891:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22648,"name":"uint256","nodeType":"ElementaryTypeName","src":"1891:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1881:18:83"},"scope":23044,"src":"1806:1263:83","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":22773,"nodeType":"Block","src":"3154:99:83","statements":[{"assignments":[22766],"declarations":[{"constant":false,"id":22766,"mutability":"mutable","name":"chainLinkPrice","nameLocation":"3168:14:83","nodeType":"VariableDeclaration","scope":22773,"src":"3160:22:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22765,"name":"uint256","nodeType":"ElementaryTypeName","src":"3160:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22770,"initialValue":{"arguments":[{"id":22768,"name":"_tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22760,"src":"3207:13:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22767,"name":"getPriceFromChainlink","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22900,"src":"3185:21:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":22769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3185:36:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3160:61:83"},{"expression":{"id":22771,"name":"chainLinkPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22766,"src":"3234:14:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":22764,"id":22772,"nodeType":"Return","src":"3227:21:83"}]},"functionSelector":"538e573c","id":22774,"implemented":true,"kind":"function","modifiers":[],"name":"getPriceFromOracle","nameLocation":"3082:18:83","nodeType":"FunctionDefinition","parameters":{"id":22761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22760,"mutability":"mutable","name":"_tokenAddress","nameLocation":"3109:13:83","nodeType":"VariableDeclaration","scope":22774,"src":"3101:21:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22759,"name":"address","nodeType":"ElementaryTypeName","src":"3101:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3100:23:83"},"returnParameters":{"id":22764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22763,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22774,"src":"3145:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22762,"name":"uint256","nodeType":"ElementaryTypeName","src":"3145:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3144:9:83"},"scope":23044,"src":"3073:180:83","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":22899,"nodeType":"Block","src":"3341:1427:83","statements":[{"assignments":[22783],"declarations":[{"constant":false,"id":22783,"mutability":"mutable","name":"aggregator","nameLocation":"3369:10:83","nodeType":"VariableDeclaration","scope":22899,"src":"3347:32:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$22566","typeString":"contract AggregatorV3Interface"},"typeName":{"id":22782,"nodeType":"UserDefinedTypeName","pathNode":{"id":22781,"name":"AggregatorV3Interface","nameLocations":["3347:21:83"],"nodeType":"IdentifierPath","referencedDeclaration":22566,"src":"3347:21:83"},"referencedDeclaration":22566,"src":"3347:21:83","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$22566","typeString":"contract AggregatorV3Interface"}},"visibility":"internal"}],"id":22787,"initialValue":{"baseExpression":{"id":22784,"name":"aggregators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22586,"src":"3382:11:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$22566_$","typeString":"mapping(address => contract AggregatorV3Interface)"}},"id":22786,"indexExpression":{"id":22785,"name":"_tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22776,"src":"3394:13:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3382:26:83","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$22566","typeString":"contract AggregatorV3Interface"}},"nodeType":"VariableDeclarationStatement","src":"3347:61:83"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":22790,"name":"aggregator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22783,"src":"3426:10:83","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$22566","typeString":"contract AggregatorV3Interface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AggregatorV3Interface_$22566","typeString":"contract AggregatorV3Interface"}],"id":22789,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3418:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22788,"name":"address","nodeType":"ElementaryTypeName","src":"3418:7:83","typeDescriptions":{}}},"id":22791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3418:19:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":22794,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3449:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22793,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3441:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22792,"name":"address","nodeType":"ElementaryTypeName","src":"3441:7:83","typeDescriptions":{}}},"id":22795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3441:10:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3418:33:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22896,"nodeType":"IfStatement","src":"3414:1335:83","trueBody":{"id":22895,"nodeType":"Block","src":"3453:1296:83","statements":[{"clauses":[{"block":{"id":22888,"nodeType":"Block","src":"3633:1008:83","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":22813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22811,"name":"answer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22803,"src":"3724:6:83","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":22812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3734:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3724:11:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint80","typeString":"uint80"},"id":22816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22814,"name":"answeredInRound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22809,"src":"3749:15:83","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":22815,"name":"roundId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22801,"src":"3767:7:83","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"src":"3749:25:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3724:50:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22818,"name":"updateAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22807,"src":"3788:8:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":22819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3800:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3788:13:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3724:77:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22822,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3815:5:83","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":22823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3821:9:83","memberName":"timestamp","nodeType":"MemberAccess","src":"3815:15:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22824,"name":"updateAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22807,"src":"3833:8:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":22825,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"3844:9:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":22826,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3854:19:83","memberName":"ORACLE_VALID_PERIOD","nodeType":"MemberAccess","referencedDeclaration":29236,"src":"3844:29:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3833:40:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3815:58:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3724:149:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22833,"nodeType":"IfStatement","src":"3709:437:83","trueBody":{"id":22832,"nodeType":"Block","src":"3884:262:83","statements":[{"expression":{"hexValue":"30","id":22830,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4134:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":22780,"id":22831,"nodeType":"Return","src":"4127:8:83"}]}},{"assignments":[22835],"declarations":[{"constant":false,"id":22835,"mutability":"mutable","name":"retVal","nameLocation":"4164:6:83","nodeType":"VariableDeclaration","scope":22888,"src":"4156:14:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22834,"name":"uint256","nodeType":"ElementaryTypeName","src":"4156:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22840,"initialValue":{"arguments":[{"id":22838,"name":"answer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22803,"src":"4181:6:83","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":22837,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4173:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":22836,"name":"uint256","nodeType":"ElementaryTypeName","src":"4173:7:83","typeDescriptions":{}}},"id":22839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4173:15:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4156:32:83"},{"assignments":[22842],"declarations":[{"constant":false,"id":22842,"mutability":"mutable","name":"price","nameLocation":"4206:5:83","nodeType":"VariableDeclaration","scope":22888,"src":"4198:13:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22841,"name":"uint256","nodeType":"ElementaryTypeName","src":"4198:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22843,"nodeType":"VariableDeclarationStatement","src":"4198:13:83"},{"assignments":[22845],"declarations":[{"constant":false,"id":22845,"mutability":"mutable","name":"aggregatorDecimals","nameLocation":"4267:18:83","nodeType":"VariableDeclaration","scope":22888,"src":"4259:26:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22844,"name":"uint256","nodeType":"ElementaryTypeName","src":"4259:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22852,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22848,"name":"aggregator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22783,"src":"4296:10:83","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$22566","typeString":"contract AggregatorV3Interface"}},"id":22849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4307:8:83","memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":22542,"src":"4296:19:83","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":22850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4296:21:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":22847,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4288:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":22846,"name":"uint256","nodeType":"ElementaryTypeName","src":"4288:7:83","typeDescriptions":{}}},"id":22851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4288:30:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4259:59:83"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22853,"name":"aggregatorDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22845,"src":"4332:18:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":22854,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"4353:9:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":22855,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4363:27:83","memberName":"DEFAULT_NORMALIZED_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":29247,"src":"4353:37:83","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"4332:58:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22884,"nodeType":"Block","src":"4504:106:83","statements":[{"expression":{"id":22882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22871,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22842,"src":"4516:5:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22872,"name":"retVal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22835,"src":"4524:6:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":22873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4534:2:83","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22874,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"4539:9:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":22875,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4549:27:83","memberName":"DEFAULT_NORMALIZED_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":29247,"src":"4539:37:83","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":22876,"name":"aggregatorDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22845,"src":"4579:18:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4539:58:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22878,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4538:60:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4534:64:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22880,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4533:66:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4524:75:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4516:83:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22883,"nodeType":"ExpressionStatement","src":"4516:83:83"}]},"id":22885,"nodeType":"IfStatement","src":"4328:282:83","trueBody":{"id":22870,"nodeType":"Block","src":"4392:106:83","statements":[{"expression":{"id":22868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22857,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22842,"src":"4404:5:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22858,"name":"retVal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22835,"src":"4412:6:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":22859,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4422:2:83","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22860,"name":"aggregatorDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22845,"src":"4427:18:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":22861,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"4448:9:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":22862,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4458:27:83","memberName":"DEFAULT_NORMALIZED_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":29247,"src":"4448:37:83","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"4427:58:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22864,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4426:60:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4422:64:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22866,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4421:66:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4412:75:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4404:83:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22869,"nodeType":"ExpressionStatement","src":"4404:83:83"}]}},{"expression":{"id":22886,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22842,"src":"4627:5:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":22780,"id":22887,"nodeType":"Return","src":"4620:12:83"}]},"errorName":"","id":22889,"nodeType":"TryCatchClause","parameters":{"id":22810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22801,"mutability":"mutable","name":"roundId","nameLocation":"3519:7:83","nodeType":"VariableDeclaration","scope":22889,"src":"3512:14:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":22800,"name":"uint80","nodeType":"ElementaryTypeName","src":"3512:6:83","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"},{"constant":false,"id":22803,"mutability":"mutable","name":"answer","nameLocation":"3543:6:83","nodeType":"VariableDeclaration","scope":22889,"src":"3536:13:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":22802,"name":"int256","nodeType":"ElementaryTypeName","src":"3536:6:83","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":22805,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22889,"src":"3559:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22804,"name":"uint256","nodeType":"ElementaryTypeName","src":"3559:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22807,"mutability":"mutable","name":"updateAt","nameLocation":"3584:8:83","nodeType":"VariableDeclaration","scope":22889,"src":"3576:16:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22806,"name":"uint256","nodeType":"ElementaryTypeName","src":"3576:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22809,"mutability":"mutable","name":"answeredInRound","nameLocation":"3609:15:83","nodeType":"VariableDeclaration","scope":22889,"src":"3602:22:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":22808,"name":"uint80","nodeType":"ElementaryTypeName","src":"3602:6:83","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"3502:130:83"},"src":"3494:1147:83"},{"block":{"id":22892,"nodeType":"Block","src":"4648:95:83","statements":[{"expression":{"hexValue":"30","id":22890,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4733:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":22780,"id":22891,"nodeType":"Return","src":"4726:8:83"}]},"errorName":"","id":22893,"nodeType":"TryCatchClause","src":"4642:101:83"}],"externalCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22797,"name":"aggregator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22783,"src":"3465:10:83","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$22566","typeString":"contract AggregatorV3Interface"}},"id":22798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3476:15:83","memberName":"latestRoundData","nodeType":"MemberAccess","referencedDeclaration":22565,"src":"3465:26:83","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$","typeString":"function () view external returns (uint80,int256,uint256,uint256,uint80)"}},"id":22799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3465:28:83","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$","typeString":"tuple(uint80,int256,uint256,uint256,uint80)"}},"id":22894,"nodeType":"TryStatement","src":"3461:1282:83"}]}},{"expression":{"hexValue":"30","id":22897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4762:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":22780,"id":22898,"nodeType":"Return","src":"4755:8:83"}]},"functionSelector":"856d562d","id":22900,"implemented":true,"kind":"function","modifiers":[],"name":"getPriceFromChainlink","nameLocation":"3266:21:83","nodeType":"FunctionDefinition","parameters":{"id":22777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22776,"mutability":"mutable","name":"_tokenAddress","nameLocation":"3296:13:83","nodeType":"VariableDeclaration","scope":22900,"src":"3288:21:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22775,"name":"address","nodeType":"ElementaryTypeName","src":"3288:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3287:23:83"},"returnParameters":{"id":22780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22779,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22900,"src":"3332:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22778,"name":"uint256","nodeType":"ElementaryTypeName","src":"3332:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3331:9:83"},"scope":23044,"src":"3257:1511:83","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":22975,"nodeType":"Block","src":"4883:562:83","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22912,"name":"_price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22904,"src":"4897:6:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":22913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4907:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4897:11:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"626164207072696365","id":22915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4910:11:83","typeDescriptions":{"typeIdentifier":"t_stringliteral_09d79b800c98f52c04fd901caf943e1f149658482bee7ed49b055432a4617ba7","typeString":"literal_string \"bad price\""},"value":"bad price"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_09d79b800c98f52c04fd901caf943e1f149658482bee7ed49b055432a4617ba7","typeString":"literal_string \"bad price\""}],"id":22911,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4889:7:83","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4889:33:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22917,"nodeType":"ExpressionStatement","src":"4889:33:83"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22918,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4932:5:83","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":22919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4938:9:83","memberName":"timestamp","nodeType":"MemberAccess","src":"4932:15:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":22920,"name":"_timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22906,"src":"4950:10:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4932:28:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22950,"nodeType":"Block","src":"5097:182:83","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22935,"name":"_timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22906,"src":"5163:10:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":22936,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"5176:5:83","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":22937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5182:9:83","memberName":"timestamp","nodeType":"MemberAccess","src":"5176:15:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5163:28:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":22939,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"5194:9:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":22940,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5204:18:83","memberName":"FUTURE_TIME_BUFFER","nodeType":"MemberAccess","referencedDeclaration":29240,"src":"5194:28:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5163:59:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e20667574757265","id":22942,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5224:11:83","typeDescriptions":{"typeIdentifier":"t_stringliteral_ed372387319ab63e354aa0d7833c233303564edb926acd70de198951c4b35b79","typeString":"literal_string \"in future\""},"value":"in future"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ed372387319ab63e354aa0d7833c233303564edb926acd70de198951c4b35b79","typeString":"literal_string \"in future\""}],"id":22934,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5155:7:83","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5155:81:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22944,"nodeType":"ExpressionStatement","src":"5155:81:83"},{"expression":{"id":22948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22945,"name":"_timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22906,"src":"5244:10:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":22946,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"5257:5:83","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":22947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5263:9:83","memberName":"timestamp","nodeType":"MemberAccess","src":"5257:15:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5244:28:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22949,"nodeType":"ExpressionStatement","src":"5244:28:83"}]},"id":22951,"nodeType":"IfStatement","src":"4928:351:83","trueBody":{"id":22933,"nodeType":"Block","src":"4962:129:83","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22923,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"5006:5:83","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":22924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5012:9:83","memberName":"timestamp","nodeType":"MemberAccess","src":"5006:15:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":22925,"name":"_timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22906,"src":"5024:10:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5006:28:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":22927,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"5037:9:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":22928,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5047:19:83","memberName":"ORACLE_VALID_PERIOD","nodeType":"MemberAccess","referencedDeclaration":29236,"src":"5037:29:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5006:60:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6261642074696d657374616d70","id":22930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5068:15:83","typeDescriptions":{"typeIdentifier":"t_stringliteral_fd972d2f7059975408733d0027af02f68a86abdae415cfd4f9f6ec59581f8976","typeString":"literal_string \"bad timestamp\""},"value":"bad timestamp"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fd972d2f7059975408733d0027af02f68a86abdae415cfd4f9f6ec59581f8976","typeString":"literal_string \"bad timestamp\""}],"id":22922,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4998:7:83","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4998:86:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22932,"nodeType":"ExpressionStatement","src":"4998:86:83"}]}},{"eventCall":{"arguments":[{"id":22953,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22902,"src":"5309:6:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":22954,"name":"assetPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22596,"src":"5317:11:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Price_$22591_storage_$","typeString":"mapping(address => struct ConnextPriceOracle.Price storage ref)"}},"id":22956,"indexExpression":{"id":22955,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22902,"src":"5329:6:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5317:19:83","typeDescriptions":{"typeIdentifier":"t_struct$_Price_$22591_storage","typeString":"struct ConnextPriceOracle.Price storage ref"}},"id":22957,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5337:5:83","memberName":"price","nodeType":"MemberAccess","referencedDeclaration":22590,"src":"5317:25:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22958,"name":"_price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22904,"src":"5344:6:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22952,"name":"DirectPriceUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22604,"src":"5290:18:83","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":22959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5290:61:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22960,"nodeType":"EmitStatement","src":"5285:66:83"},{"expression":{"id":22966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":22961,"name":"assetPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22596,"src":"5358:11:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Price_$22591_storage_$","typeString":"mapping(address => struct ConnextPriceOracle.Price storage ref)"}},"id":22963,"indexExpression":{"id":22962,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22902,"src":"5370:6:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5358:19:83","typeDescriptions":{"typeIdentifier":"t_struct$_Price_$22591_storage","typeString":"struct ConnextPriceOracle.Price storage ref"}},"id":22964,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5378:5:83","memberName":"price","nodeType":"MemberAccess","referencedDeclaration":22590,"src":"5358:25:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22965,"name":"_price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22904,"src":"5386:6:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5358:34:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22967,"nodeType":"ExpressionStatement","src":"5358:34:83"},{"expression":{"id":22973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":22968,"name":"assetPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22596,"src":"5398:11:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Price_$22591_storage_$","typeString":"mapping(address => struct ConnextPriceOracle.Price storage ref)"}},"id":22970,"indexExpression":{"id":22969,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22902,"src":"5410:6:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5398:19:83","typeDescriptions":{"typeIdentifier":"t_struct$_Price_$22591_storage","typeString":"struct ConnextPriceOracle.Price storage ref"}},"id":22971,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5418:9:83","memberName":"updatedAt","nodeType":"MemberAccess","referencedDeclaration":22588,"src":"5398:29:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22972,"name":"_timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22906,"src":"5430:10:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5398:42:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22974,"nodeType":"ExpressionStatement","src":"5398:42:83"}]},"functionSelector":"5e901bdf","id":22976,"implemented":true,"kind":"function","modifiers":[{"id":22909,"kind":"modifierInvocation","modifierName":{"id":22908,"name":"onlyOwner","nameLocations":["4873:9:83"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"4873:9:83"},"nodeType":"ModifierInvocation","src":"4873:9:83"}],"name":"setDirectPrice","nameLocation":"4781:14:83","nodeType":"FunctionDefinition","parameters":{"id":22907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22902,"mutability":"mutable","name":"_token","nameLocation":"4809:6:83","nodeType":"VariableDeclaration","scope":22976,"src":"4801:14:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22901,"name":"address","nodeType":"ElementaryTypeName","src":"4801:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22904,"mutability":"mutable","name":"_price","nameLocation":"4829:6:83","nodeType":"VariableDeclaration","scope":22976,"src":"4821:14:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22903,"name":"uint256","nodeType":"ElementaryTypeName","src":"4821:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22906,"mutability":"mutable","name":"_timestamp","nameLocation":"4849:10:83","nodeType":"VariableDeclaration","scope":22976,"src":"4841:18:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22905,"name":"uint256","nodeType":"ElementaryTypeName","src":"4841:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4795:68:83"},"returnParameters":{"id":22910,"nodeType":"ParameterList","parameters":[],"src":"4883:0:83"},"scope":23044,"src":"4772:673:83","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":22992,"nodeType":"Block","src":"5518:103:83","statements":[{"eventCall":{"arguments":[{"id":22984,"name":"v1PriceOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22575,"src":"5550:13:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22985,"name":"_v1PriceOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22978,"src":"5565:14:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":22983,"name":"V1PriceOracleUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22616,"src":"5529:20:83","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":22986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5529:51:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22987,"nodeType":"EmitStatement","src":"5524:56:83"},{"expression":{"id":22990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22988,"name":"v1PriceOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22575,"src":"5586:13:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22989,"name":"_v1PriceOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22978,"src":"5602:14:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5586:30:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":22991,"nodeType":"ExpressionStatement","src":"5586:30:83"}]},"functionSelector":"cb45c4f2","id":22993,"implemented":true,"kind":"function","modifiers":[{"id":22981,"kind":"modifierInvocation","modifierName":{"id":22980,"name":"onlyOwner","nameLocations":["5508:9:83"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"5508:9:83"},"nodeType":"ModifierInvocation","src":"5508:9:83"}],"name":"setV1PriceOracle","nameLocation":"5458:16:83","nodeType":"FunctionDefinition","parameters":{"id":22979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22978,"mutability":"mutable","name":"_v1PriceOracle","nameLocation":"5483:14:83","nodeType":"VariableDeclaration","scope":22993,"src":"5475:22:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22977,"name":"address","nodeType":"ElementaryTypeName","src":"5475:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5474:24:83"},"returnParameters":{"id":22982,"nodeType":"ParameterList","parameters":[],"src":"5518:0:83"},"scope":23044,"src":"5449:172:83","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":23042,"nodeType":"Block","src":"5731:272:83","statements":[{"assignments":[23005],"declarations":[{"constant":false,"id":23005,"mutability":"mutable","name":"numTokens","nameLocation":"5745:9:83","nodeType":"VariableDeclaration","scope":23042,"src":"5737:17:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23004,"name":"uint256","nodeType":"ElementaryTypeName","src":"5737:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23008,"initialValue":{"expression":{"id":23006,"name":"tokenAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22996,"src":"5757:14:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":23007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5772:6:83","memberName":"length","nodeType":"MemberAccess","src":"5757:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5737:41:83"},{"body":{"id":23040,"nodeType":"Block","src":"5817:182:83","statements":[{"expression":{"id":23025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23015,"name":"aggregators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22586,"src":"5825:11:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$22566_$","typeString":"mapping(address => contract AggregatorV3Interface)"}},"id":23019,"indexExpression":{"baseExpression":{"id":23016,"name":"tokenAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22996,"src":"5837:14:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":23018,"indexExpression":{"id":23017,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23010,"src":"5852:1:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5837:17:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5825:30:83","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$22566","typeString":"contract AggregatorV3Interface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":23021,"name":"sources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22999,"src":"5880:7:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":23023,"indexExpression":{"id":23022,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23010,"src":"5888:1:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5880:10:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23020,"name":"AggregatorV3Interface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22566,"src":"5858:21:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AggregatorV3Interface_$22566_$","typeString":"type(contract AggregatorV3Interface)"}},"id":23024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5858:33:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$22566","typeString":"contract AggregatorV3Interface"}},"src":"5825:66:83","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$22566","typeString":"contract AggregatorV3Interface"}},"id":23026,"nodeType":"ExpressionStatement","src":"5825:66:83"},{"eventCall":{"arguments":[{"baseExpression":{"id":23028,"name":"tokenAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22996,"src":"5922:14:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":23030,"indexExpression":{"id":23029,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23010,"src":"5937:1:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5922:17:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":23031,"name":"sources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22999,"src":"5941:7:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":23033,"indexExpression":{"id":23032,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23010,"src":"5949:1:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5941:10:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23027,"name":"AggregatorUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22610,"src":"5904:17:83","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":23034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5904:48:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23035,"nodeType":"EmitStatement","src":"5899:53:83"},{"id":23039,"nodeType":"UncheckedBlock","src":"5961:32:83","statements":[{"expression":{"id":23037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5981:3:83","subExpression":{"id":23036,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23010,"src":"5983:1:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23038,"nodeType":"ExpressionStatement","src":"5981:3:83"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23012,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23010,"src":"5800:1:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":23013,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23005,"src":"5804:9:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5800:13:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23041,"initializationExpression":{"assignments":[23010],"declarations":[{"constant":false,"id":23010,"mutability":"mutable","name":"i","nameLocation":"5797:1:83","nodeType":"VariableDeclaration","scope":23041,"src":"5789:9:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23009,"name":"uint256","nodeType":"ElementaryTypeName","src":"5789:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23011,"nodeType":"VariableDeclarationStatement","src":"5789:9:83"},"nodeType":"ForStatement","src":"5784:215:83"}]},"functionSelector":"3f9fb505","id":23043,"implemented":true,"kind":"function","modifiers":[{"id":23002,"kind":"modifierInvocation","modifierName":{"id":23001,"name":"onlyOwner","nameLocations":["5721:9:83"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"5721:9:83"},"nodeType":"ModifierInvocation","src":"5721:9:83"}],"name":"setAggregators","nameLocation":"5634:14:83","nodeType":"FunctionDefinition","parameters":{"id":23000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22996,"mutability":"mutable","name":"tokenAddresses","nameLocation":"5668:14:83","nodeType":"VariableDeclaration","scope":23043,"src":"5649:33:83","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":22994,"name":"address","nodeType":"ElementaryTypeName","src":"5649:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":22995,"nodeType":"ArrayTypeName","src":"5649:9:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":22999,"mutability":"mutable","name":"sources","nameLocation":"5703:7:83","nodeType":"VariableDeclaration","scope":23043,"src":"5684:26:83","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":22997,"name":"address","nodeType":"ElementaryTypeName","src":"5684:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":22998,"nodeType":"ArrayTypeName","src":"5684:9:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5648:63:83"},"returnParameters":{"id":23003,"nodeType":"ParameterList","parameters":[],"src":"5731:0:83"},"scope":23044,"src":"5625:378:83","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":23045,"src":"998:5007:83","usedErrors":[49697,49699,49701,49703,49705,49707,49709]}],"src":"32:5974:83"},"id":83},"contracts/core/connext/helpers/ConnextProxyAdmin.sol":{"ast":{"absolutePath":"contracts/core/connext/helpers/ConnextProxyAdmin.sol","exportedSymbols":{"ConnextProxyAdmin":[23060],"ProxyAdmin":[10424]},"id":23061,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":23046,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"33:23:84"},{"absolutePath":"@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol","file":"@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol","id":23048,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23061,"sourceUnit":10425,"src":"58:84:84","symbolAliases":[{"foreign":{"id":23047,"name":"ProxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10424,"src":"66:10:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":23050,"name":"ProxyAdmin","nameLocations":["403:10:84"],"nodeType":"IdentifierPath","referencedDeclaration":10424,"src":"403:10:84"},"id":23051,"nodeType":"InheritanceSpecifier","src":"403:10:84"}],"canonicalName":"ConnextProxyAdmin","contractDependencies":[],"contractKind":"contract","documentation":{"id":23049,"nodeType":"StructuredDocumentation","src":"144:228:84","text":" @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}."},"fullyImplemented":true,"id":23060,"linearizedBaseContracts":[23060,10424,9656,11506],"name":"ConnextProxyAdmin","nameLocation":"382:17:84","nodeType":"ContractDefinition","nodes":[{"body":{"id":23058,"nodeType":"Block","src":"458:64:84","statements":[]},"id":23059,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":23056,"kind":"baseConstructorSpecifier","modifierName":{"id":23055,"name":"ProxyAdmin","nameLocations":["445:10:84"],"nodeType":"IdentifierPath","referencedDeclaration":10424,"src":"445:10:84"},"nodeType":"ModifierInvocation","src":"445:12:84"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":23054,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23053,"mutability":"mutable","name":"owner","nameLocation":"438:5:84","nodeType":"VariableDeclaration","scope":23059,"src":"430:13:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23052,"name":"address","nodeType":"ElementaryTypeName","src":"430:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"429:15:84"},"returnParameters":{"id":23057,"nodeType":"ParameterList","parameters":[],"src":"458:0:84"},"scope":23060,"src":"418:104:84","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":23061,"src":"373:151:84","usedErrors":[]}],"src":"33:492:84"},"id":84},"contracts/core/connext/helpers/LPToken.sol":{"ast":{"absolutePath":"contracts/core/connext/helpers/LPToken.sol","exportedSymbols":{"ERC20Upgradeable":[9050],"LPToken":[23179],"OwnableUpgradeable":[8069]},"id":23180,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":23062,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:85"},{"absolutePath":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","id":23064,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23180,"sourceUnit":9193,"src":"64:121:85","symbolAliases":[{"foreign":{"id":23063,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9050,"src":"72:16:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","id":23066,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23180,"sourceUnit":8070,"src":"186:101:85","symbolAliases":[{"foreign":{"id":23065,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8069,"src":"194:18:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":23068,"name":"ERC20Upgradeable","nameLocations":["608:16:85"],"nodeType":"IdentifierPath","referencedDeclaration":9050,"src":"608:16:85"},"id":23069,"nodeType":"InheritanceSpecifier","src":"608:16:85"},{"baseName":{"id":23070,"name":"OwnableUpgradeable","nameLocations":["626:18:85"],"nodeType":"IdentifierPath","referencedDeclaration":8069,"src":"626:18:85"},"id":23071,"nodeType":"InheritanceSpecifier","src":"626:18:85"}],"canonicalName":"LPToken","contractDependencies":[],"contractKind":"contract","documentation":{"id":23067,"nodeType":"StructuredDocumentation","src":"289:298:85","text":" @title Liquidity Provider Token\n @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\n It is used to represent user's shares when providing liquidity to swap contracts.\n @dev Only Swap contracts should initialize and own LPToken contracts."},"fullyImplemented":true,"id":23179,"linearizedBaseContracts":[23179,8069,9050,9217,9128,9543,8238],"name":"LPToken","nameLocation":"597:7:85","nodeType":"ContractDefinition","nodes":[{"body":{"id":23096,"nodeType":"Block","src":"1125:128:85","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":23083,"name":"__Context_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9519,"src":"1131:24:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":23084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1131:26:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23085,"nodeType":"ExpressionStatement","src":"1131:26:85"},{"expression":{"arguments":[{"id":23087,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23074,"src":"1186:4:85","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":23088,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23076,"src":"1192:6:85","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23086,"name":"__ERC20_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8503,"src":"1163:22:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":23089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1163:36:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23090,"nodeType":"ExpressionStatement","src":"1163:36:85"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":23091,"name":"__Ownable_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7975,"src":"1205:24:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":23092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1205:26:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23093,"nodeType":"ExpressionStatement","src":"1205:26:85"},{"expression":{"hexValue":"74727565","id":23094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1244:4:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":23082,"id":23095,"nodeType":"Return","src":"1237:11:85"}]},"documentation":{"id":23072,"nodeType":"StructuredDocumentation","src":"733:291:85","text":" @notice Initializes this LPToken contract with the given name and symbol\n @dev The caller of this function will become the owner. A Swap contract should call this\n in its initializer function.\n @param name name of this token\n @param symbol symbol of this token"},"functionSelector":"4cd88b76","id":23097,"implemented":true,"kind":"function","modifiers":[{"id":23079,"kind":"modifierInvocation","modifierName":{"id":23078,"name":"initializer","nameLocations":["1098:11:85"],"nodeType":"IdentifierPath","referencedDeclaration":8140,"src":"1098:11:85"},"nodeType":"ModifierInvocation","src":"1098:11:85"}],"name":"initialize","nameLocation":"1036:10:85","nodeType":"FunctionDefinition","parameters":{"id":23077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23074,"mutability":"mutable","name":"name","nameLocation":"1061:4:85","nodeType":"VariableDeclaration","scope":23097,"src":"1047:18:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":23073,"name":"string","nodeType":"ElementaryTypeName","src":"1047:6:85","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":23076,"mutability":"mutable","name":"symbol","nameLocation":"1081:6:85","nodeType":"VariableDeclaration","scope":23097,"src":"1067:20:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":23075,"name":"string","nodeType":"ElementaryTypeName","src":"1067:6:85","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1046:42:85"},"returnParameters":{"id":23082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23081,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23097,"src":"1119:4:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23080,"name":"bool","nodeType":"ElementaryTypeName","src":"1119:4:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1118:6:85"},"scope":23179,"src":"1027:226:85","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":23119,"nodeType":"Block","src":"1609:87:85","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23108,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23102,"src":"1623:6:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":23109,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1633:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1623:11:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c50546f6b656e3a2063616e6e6f74206d696e742030","id":23111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1636:24:85","typeDescriptions":{"typeIdentifier":"t_stringliteral_ed34f82a9e5f1c19797c90dabe69af55fd60996fe9929040c5fdcf768caac1bc","typeString":"literal_string \"LPToken: cannot mint 0\""},"value":"LPToken: cannot mint 0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ed34f82a9e5f1c19797c90dabe69af55fd60996fe9929040c5fdcf768caac1bc","typeString":"literal_string \"LPToken: cannot mint 0\""}],"id":23107,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1615:7:85","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1615:46:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23113,"nodeType":"ExpressionStatement","src":"1615:46:85"},{"expression":{"arguments":[{"id":23115,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23100,"src":"1673:9:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23116,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23102,"src":"1684:6:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23114,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8862,"src":"1667:5:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":23117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1667:24:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23118,"nodeType":"ExpressionStatement","src":"1667:24:85"}]},"documentation":{"id":23098,"nodeType":"StructuredDocumentation","src":"1308:230:85","text":" @notice Mints the given amount of LPToken to the recipient.\n @dev only owner can call this mint function\n @param recipient address of account to receive the tokens\n @param amount amount of tokens to mint"},"functionSelector":"40c10f19","id":23120,"implemented":true,"kind":"function","modifiers":[{"id":23105,"kind":"modifierInvocation","modifierName":{"id":23104,"name":"onlyOwner","nameLocations":["1599:9:85"],"nodeType":"IdentifierPath","referencedDeclaration":7983,"src":"1599:9:85"},"nodeType":"ModifierInvocation","src":"1599:9:85"}],"name":"mint","nameLocation":"1550:4:85","nodeType":"FunctionDefinition","parameters":{"id":23103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23100,"mutability":"mutable","name":"recipient","nameLocation":"1563:9:85","nodeType":"VariableDeclaration","scope":23120,"src":"1555:17:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23099,"name":"address","nodeType":"ElementaryTypeName","src":"1555:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23102,"mutability":"mutable","name":"amount","nameLocation":"1582:6:85","nodeType":"VariableDeclaration","scope":23120,"src":"1574:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23101,"name":"uint256","nodeType":"ElementaryTypeName","src":"1574:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1554:35:85"},"returnParameters":{"id":23106,"nodeType":"ParameterList","parameters":[],"src":"1609:0:85"},"scope":23179,"src":"1541:155:85","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":23142,"nodeType":"Block","src":"2008:85:85","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23131,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23125,"src":"2022:6:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":23132,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2032:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2022:11:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c50546f6b656e3a2063616e6e6f74206275726e2030","id":23134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2035:24:85","typeDescriptions":{"typeIdentifier":"t_stringliteral_746dbb314e07631883e9c2af6082a34934cdebb65c5ce78cbe0a4a2355827918","typeString":"literal_string \"LPToken: cannot burn 0\""},"value":"LPToken: cannot burn 0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_746dbb314e07631883e9c2af6082a34934cdebb65c5ce78cbe0a4a2355827918","typeString":"literal_string \"LPToken: cannot burn 0\""}],"id":23130,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2014:7:85","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2014:46:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23136,"nodeType":"ExpressionStatement","src":"2014:46:85"},{"expression":{"arguments":[{"id":23138,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23123,"src":"2072:7:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23139,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23125,"src":"2081:6:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23137,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8934,"src":"2066:5:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":23140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2066:22:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23141,"nodeType":"ExpressionStatement","src":"2066:22:85"}]},"documentation":{"id":23121,"nodeType":"StructuredDocumentation","src":"1700:235:85","text":" @notice Burns the given amount of LPToken from provided account\n @dev only owner can call this burn function\n @param account address of account from which to burn token\n @param amount amount of tokens to mint"},"functionSelector":"79cc6790","id":23143,"implemented":true,"kind":"function","modifiers":[{"id":23128,"kind":"modifierInvocation","modifierName":{"id":23127,"name":"onlyOwner","nameLocations":["1998:9:85"],"nodeType":"IdentifierPath","referencedDeclaration":7983,"src":"1998:9:85"},"nodeType":"ModifierInvocation","src":"1998:9:85"}],"name":"burnFrom","nameLocation":"1947:8:85","nodeType":"FunctionDefinition","parameters":{"id":23126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23123,"mutability":"mutable","name":"account","nameLocation":"1964:7:85","nodeType":"VariableDeclaration","scope":23143,"src":"1956:15:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23122,"name":"address","nodeType":"ElementaryTypeName","src":"1956:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23125,"mutability":"mutable","name":"amount","nameLocation":"1981:6:85","nodeType":"VariableDeclaration","scope":23143,"src":"1973:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23124,"name":"uint256","nodeType":"ElementaryTypeName","src":"1973:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1955:33:85"},"returnParameters":{"id":23129,"nodeType":"ParameterList","parameters":[],"src":"2008:0:85"},"scope":23179,"src":"1938:155:85","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[9033],"body":{"id":23173,"nodeType":"Block","src":"2546:123:85","statements":[{"expression":{"arguments":[{"id":23158,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23146,"src":"2579:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23159,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23148,"src":"2585:2:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23160,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23150,"src":"2589:6:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":23155,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2552:5:85","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_LPToken_$23179_$","typeString":"type(contract super LPToken)"}},"id":23157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2558:20:85","memberName":"_beforeTokenTransfer","nodeType":"MemberAccess","referencedDeclaration":9033,"src":"2552:26:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2552:44:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23162,"nodeType":"ExpressionStatement","src":"2552:44:85"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23164,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23148,"src":"2610:2:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":23167,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2624:4:85","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}],"id":23166,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2616:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23165,"name":"address","nodeType":"ElementaryTypeName","src":"2616:7:85","typeDescriptions":{}}},"id":23168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2616:13:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2610:19:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c50546f6b656e3a2063616e6e6f742073656e6420746f20697473656c66","id":23170,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2631:32:85","typeDescriptions":{"typeIdentifier":"t_stringliteral_ef142e1a2846b964b816ff083db6d21006ea5123566a1edd36cdd44bd455377f","typeString":"literal_string \"LPToken: cannot send to itself\""},"value":"LPToken: cannot send to itself"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ef142e1a2846b964b816ff083db6d21006ea5123566a1edd36cdd44bd455377f","typeString":"literal_string \"LPToken: cannot send to itself\""}],"id":23163,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2602:7:85","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2602:62:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23172,"nodeType":"ExpressionStatement","src":"2602:62:85"}]},"documentation":{"id":23144,"nodeType":"StructuredDocumentation","src":"2148:263:85","text":" @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\n minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\n This assumes the owner is set to a Swap contract's address."},"id":23174,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeTokenTransfer","nameLocation":"2423:20:85","nodeType":"FunctionDefinition","overrides":{"id":23153,"nodeType":"OverrideSpecifier","overrides":[{"id":23152,"name":"ERC20Upgradeable","nameLocations":["2528:16:85"],"nodeType":"IdentifierPath","referencedDeclaration":9050,"src":"2528:16:85"}],"src":"2519:26:85"},"parameters":{"id":23151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23146,"mutability":"mutable","name":"from","nameLocation":"2457:4:85","nodeType":"VariableDeclaration","scope":23174,"src":"2449:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23145,"name":"address","nodeType":"ElementaryTypeName","src":"2449:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23148,"mutability":"mutable","name":"to","nameLocation":"2475:2:85","nodeType":"VariableDeclaration","scope":23174,"src":"2467:10:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23147,"name":"address","nodeType":"ElementaryTypeName","src":"2467:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23150,"mutability":"mutable","name":"amount","nameLocation":"2491:6:85","nodeType":"VariableDeclaration","scope":23174,"src":"2483:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23149,"name":"uint256","nodeType":"ElementaryTypeName","src":"2483:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2443:58:85"},"returnParameters":{"id":23154,"nodeType":"ParameterList","parameters":[],"src":"2546:0:85"},"scope":23179,"src":"2414:255:85","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"constant":false,"id":23178,"mutability":"mutable","name":"__GAP","nameLocation":"2736:5:85","nodeType":"VariableDeclaration","scope":23179,"src":"2716:25:85","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage","typeString":"uint256[50]"},"typeName":{"baseType":{"id":23175,"name":"uint256","nodeType":"ElementaryTypeName","src":"2716:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23177,"length":{"hexValue":"3530","id":23176,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2724:2:85","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"50"},"nodeType":"ArrayTypeName","src":"2716:11:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage_ptr","typeString":"uint256[50]"}},"visibility":"private"}],"scope":23180,"src":"588:2182:85","usedErrors":[]}],"src":"39:2732:85"},"id":85},"contracts/core/connext/helpers/OZERC20.sol":{"ast":{"absolutePath":"contracts/core/connext/helpers/OZERC20.sol","exportedSymbols":{"Counters":[11580],"ECDSA":[12176],"EIP712":[12330],"ERC20":[24039],"IERC20":[10812],"IERC20Metadata":[10837],"IERC20Permit":[10873]},"id":24040,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":23181,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"32:23:86"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","id":23182,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24040,"sourceUnit":10838,"src":"237:75:86","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":23183,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24040,"sourceUnit":10813,"src":"313:56:86","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol","id":23184,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24040,"sourceUnit":10874,"src":"370:79:86","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/cryptography/EIP712.sol","file":"@openzeppelin/contracts/utils/cryptography/EIP712.sol","id":23186,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24040,"sourceUnit":12331,"src":"450:77:86","symbolAliases":[{"foreign":{"id":23185,"name":"EIP712","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12330,"src":"458:6:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","file":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","id":23188,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24040,"sourceUnit":12177,"src":"528:75:86","symbolAliases":[{"foreign":{"id":23187,"name":"ECDSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12176,"src":"536:5:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Counters.sol","file":"@openzeppelin/contracts/utils/Counters.sol","id":23189,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24040,"sourceUnit":11581,"src":"604:52:86","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":23191,"name":"IERC20Metadata","nameLocations":["2584:14:86"],"nodeType":"IdentifierPath","referencedDeclaration":10837,"src":"2584:14:86"},"id":23192,"nodeType":"InheritanceSpecifier","src":"2584:14:86"},{"baseName":{"id":23193,"name":"IERC20Permit","nameLocations":["2600:12:86"],"nodeType":"IdentifierPath","referencedDeclaration":10873,"src":"2600:12:86"},"id":23194,"nodeType":"InheritanceSpecifier","src":"2600:12:86"}],"canonicalName":"ERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":23190,"nodeType":"StructuredDocumentation","src":"658:1907:86","text":" @dev Implementation of the {IERC20} interface.\n Implements ERC20 Permit extension allowing approvals to be made via\n signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n Adds the {permit} method, which can be used to change an account's ERC20\n allowance (see {IERC20-allowance}) by presenting a message signed by the\n account. By not relying on {IERC20-approve}, the token holder account doesn't\n need to send a transaction, and thus is not required to hold Ether at all.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n For a generic mechanism see {ERC20PresetMinterPauser}.\n TIP: For a detailed writeup see our guide\n https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n We have followed general OpenZeppelin guidelines: functions revert instead\n of returning `false` on failure. This behavior is nonetheless conventional\n and does not conflict with the expectations of ERC20 applications.\n Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n This allows applications to reconstruct the allowance for all accounts just\n by listening to said events. Other implementations of the EIP may not emit\n these events, as it isn't required by the specification.\n Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n functions have been added to mitigate the well-known issues around setting\n allowances. See {IERC20-approve}.\n @dev Cannot use default ERC20/ERC20Permit implementation as there is no way to update\n the name (set to private).\n Cannot use default EIP712 implementation as the _HASHED_NAME may change.\n These functions use the same implementation, with easier storage access."},"fullyImplemented":true,"id":24039,"linearizedBaseContracts":[24039,10873,10837,10812],"name":"ERC20","nameLocation":"2575:5:86","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":23198,"mutability":"mutable","name":"_balances","nameLocation":"2668:9:86","nodeType":"VariableDeclaration","scope":24039,"src":"2632:45:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":23197,"keyType":{"id":23195,"name":"address","nodeType":"ElementaryTypeName","src":"2640:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2632:27:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":23196,"name":"uint256","nodeType":"ElementaryTypeName","src":"2651:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":23204,"mutability":"mutable","name":"_allowances","nameLocation":"2738:11:86","nodeType":"VariableDeclaration","scope":24039,"src":"2682:67:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":23203,"keyType":{"id":23199,"name":"address","nodeType":"ElementaryTypeName","src":"2690:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2682:47:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueType":{"id":23202,"keyType":{"id":23200,"name":"address","nodeType":"ElementaryTypeName","src":"2709:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2701:27:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":23201,"name":"uint256","nodeType":"ElementaryTypeName","src":"2720:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"constant":false,"id":23206,"mutability":"mutable","name":"_totalSupply","nameLocation":"2770:12:86","nodeType":"VariableDeclaration","scope":24039,"src":"2754:28:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23205,"name":"uint256","nodeType":"ElementaryTypeName","src":"2754:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":23208,"mutability":"mutable","name":"_name","nameLocation":"2803:5:86","nodeType":"VariableDeclaration","scope":24039,"src":"2787:21:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":23207,"name":"string","nodeType":"ElementaryTypeName","src":"2787:6:86","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":23210,"mutability":"mutable","name":"_symbol","nameLocation":"2858:7:86","nodeType":"VariableDeclaration","scope":24039,"src":"2842:23:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":23209,"name":"string","nodeType":"ElementaryTypeName","src":"2842:6:86","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":23212,"mutability":"mutable","name":"_decimals","nameLocation":"2914:9:86","nodeType":"VariableDeclaration","scope":24039,"src":"2899:24:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":23211,"name":"uint8","nodeType":"ElementaryTypeName","src":"2899:5:86","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"global":false,"id":23216,"libraryName":{"id":23213,"name":"Counters","nameLocations":["2985:8:86"],"nodeType":"IdentifierPath","referencedDeclaration":11580,"src":"2985:8:86"},"nodeType":"UsingForDirective","src":"2979:36:86","typeName":{"id":23215,"nodeType":"UserDefinedTypeName","pathNode":{"id":23214,"name":"Counters.Counter","nameLocations":["2998:8:86","3007:7:86"],"nodeType":"IdentifierPath","referencedDeclaration":11512,"src":"2998:16:86"},"referencedDeclaration":11512,"src":"2998:16:86","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter"}}},{"constant":false,"id":23221,"mutability":"mutable","name":"_nonces","nameLocation":"3064:7:86","nodeType":"VariableDeclaration","scope":24039,"src":"3019:52:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Counter_$11512_storage_$","typeString":"mapping(address => struct Counters.Counter)"},"typeName":{"id":23220,"keyType":{"id":23217,"name":"address","nodeType":"ElementaryTypeName","src":"3027:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3019:36:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Counter_$11512_storage_$","typeString":"mapping(address => struct Counters.Counter)"},"valueType":{"id":23219,"nodeType":"UserDefinedTypeName","pathNode":{"id":23218,"name":"Counters.Counter","nameLocations":["3038:8:86","3047:7:86"],"nodeType":"IdentifierPath","referencedDeclaration":11512,"src":"3038:16:86"},"referencedDeclaration":11512,"src":"3038:16:86","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter"}}},"visibility":"private"},{"constant":true,"id":23226,"mutability":"constant","name":"_PERMIT_TYPEHASH","nameLocation":"3227:16:86","nodeType":"VariableDeclaration","scope":24039,"src":"3202:143:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23222,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3202:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529","id":23224,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3260:84:86","typeDescriptions":{"typeIdentifier":"t_stringliteral_6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9","typeString":"literal_string \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\""},"value":"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9","typeString":"literal_string \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\""}],"id":23223,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3250:9:86","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":23225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3250:95:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":true,"id":23231,"mutability":"constant","name":"_TYPE_HASH","nameLocation":"3375:10:86","nodeType":"VariableDeclaration","scope":24039,"src":"3349:138:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23227,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3349:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429","id":23229,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3402:84:86","typeDescriptions":{"typeIdentifier":"t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f","typeString":"literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""},"value":"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f","typeString":"literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""}],"id":23228,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3392:9:86","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":23230,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3392:95:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":23233,"mutability":"mutable","name":"_CACHED_DOMAIN_SEPARATOR","nameLocation":"3729:24:86","nodeType":"VariableDeclaration","scope":24039,"src":"3712:41:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23232,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3712:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":23235,"mutability":"immutable","name":"_CACHED_CHAIN_ID","nameLocation":"3812:16:86","nodeType":"VariableDeclaration","scope":24039,"src":"3786:42:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23234,"name":"uint256","nodeType":"ElementaryTypeName","src":"3786:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":23237,"mutability":"immutable","name":"_CACHED_THIS","nameLocation":"3858:12:86","nodeType":"VariableDeclaration","scope":24039,"src":"3832:38:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23236,"name":"address","nodeType":"ElementaryTypeName","src":"3832:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":23239,"mutability":"mutable","name":"_HASHED_NAME","nameLocation":"3892:12:86","nodeType":"VariableDeclaration","scope":24039,"src":"3875:29:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23238,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3875:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":23241,"mutability":"immutable","name":"_HASHED_VERSION","nameLocation":"3964:15:86","nodeType":"VariableDeclaration","scope":24039,"src":"3937:42:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23240,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3937:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"body":{"id":23311,"nodeType":"Block","src":"4351:441:86","statements":[{"expression":{"id":23255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23253,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23208,"src":"4370:5:86","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23254,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23246,"src":"4378:5:86","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"4370:13:86","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":23256,"nodeType":"ExpressionStatement","src":"4370:13:86"},{"expression":{"id":23259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23257,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23210,"src":"4389:7:86","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23258,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23248,"src":"4399:7:86","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"4389:17:86","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":23260,"nodeType":"ExpressionStatement","src":"4389:17:86"},{"expression":{"id":23263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23261,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23212,"src":"4412:9:86","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23262,"name":"decimals_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23244,"src":"4424:9:86","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"4412:21:86","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":23264,"nodeType":"ExpressionStatement","src":"4412:21:86"},{"assignments":[23266],"declarations":[{"constant":false,"id":23266,"mutability":"mutable","name":"hashedName","nameLocation":"4462:10:86","nodeType":"VariableDeclaration","scope":23311,"src":"4454:18:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23265,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4454:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23273,"initialValue":{"arguments":[{"arguments":[{"id":23270,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23246,"src":"4491:5:86","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23269,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4485:5:86","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":23268,"name":"bytes","nodeType":"ElementaryTypeName","src":"4485:5:86","typeDescriptions":{}}},"id":23271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4485:12:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":23267,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4475:9:86","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":23272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4475:23:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4454:44:86"},{"assignments":[23275],"declarations":[{"constant":false,"id":23275,"mutability":"mutable","name":"hashedVersion","nameLocation":"4512:13:86","nodeType":"VariableDeclaration","scope":23311,"src":"4504:21:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23274,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4504:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23282,"initialValue":{"arguments":[{"arguments":[{"id":23279,"name":"version_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23250,"src":"4544:8:86","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23278,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4538:5:86","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":23277,"name":"bytes","nodeType":"ElementaryTypeName","src":"4538:5:86","typeDescriptions":{}}},"id":23280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4538:15:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":23276,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4528:9:86","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":23281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4528:26:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4504:50:86"},{"expression":{"id":23285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23283,"name":"_HASHED_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23239,"src":"4560:12:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23284,"name":"hashedName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23266,"src":"4575:10:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4560:25:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":23286,"nodeType":"ExpressionStatement","src":"4560:25:86"},{"expression":{"id":23289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23287,"name":"_HASHED_VERSION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23241,"src":"4591:15:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23288,"name":"hashedVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23275,"src":"4609:13:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4591:31:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":23290,"nodeType":"ExpressionStatement","src":"4591:31:86"},{"expression":{"id":23294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23291,"name":"_CACHED_CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23235,"src":"4628:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":23292,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4647:5:86","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":23293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4653:7:86","memberName":"chainid","nodeType":"MemberAccess","src":"4647:13:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4628:32:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23295,"nodeType":"ExpressionStatement","src":"4628:32:86"},{"expression":{"id":23302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23296,"name":"_CACHED_DOMAIN_SEPARATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23233,"src":"4666:24:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":23298,"name":"_TYPE_HASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23231,"src":"4715:10:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":23299,"name":"hashedName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23266,"src":"4727:10:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":23300,"name":"hashedVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23275,"src":"4739:13:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":23297,"name":"_buildDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24022,"src":"4693:21:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32,bytes32) view returns (bytes32)"}},"id":23301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4693:60:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4666:87:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":23303,"nodeType":"ExpressionStatement","src":"4666:87:86"},{"expression":{"id":23309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23304,"name":"_CACHED_THIS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23237,"src":"4759:12:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":23307,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4782:4:86","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20_$24039","typeString":"contract ERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC20_$24039","typeString":"contract ERC20"}],"id":23306,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4774:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23305,"name":"address","nodeType":"ElementaryTypeName","src":"4774:7:86","typeDescriptions":{}}},"id":23308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4774:13:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4759:28:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":23310,"nodeType":"ExpressionStatement","src":"4759:28:86"}]},"documentation":{"id":23242,"nodeType":"StructuredDocumentation","src":"4014:217:86","text":" @dev Initializes the {EIP712} domain separator using the `name` parameter,\n and setting `version` to `\"1\"`.\n It's a good idea to use the same `name` that is defined as the ERC20 token name."},"id":23312,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":23251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23244,"mutability":"mutable","name":"decimals_","nameLocation":"4257:9:86","nodeType":"VariableDeclaration","scope":23312,"src":"4251:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":23243,"name":"uint8","nodeType":"ElementaryTypeName","src":"4251:5:86","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":23246,"mutability":"mutable","name":"name_","nameLocation":"4286:5:86","nodeType":"VariableDeclaration","scope":23312,"src":"4272:19:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":23245,"name":"string","nodeType":"ElementaryTypeName","src":"4272:6:86","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":23248,"mutability":"mutable","name":"symbol_","nameLocation":"4311:7:86","nodeType":"VariableDeclaration","scope":23312,"src":"4297:21:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":23247,"name":"string","nodeType":"ElementaryTypeName","src":"4297:6:86","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":23250,"mutability":"mutable","name":"version_","nameLocation":"4338:8:86","nodeType":"VariableDeclaration","scope":23312,"src":"4324:22:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":23249,"name":"string","nodeType":"ElementaryTypeName","src":"4324:6:86","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4245:105:86"},"returnParameters":{"id":23252,"nodeType":"ParameterList","parameters":[],"src":"4351:0:86"},"scope":24039,"src":"4234:558:86","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[10824],"body":{"id":23321,"nodeType":"Block","src":"4918:23:86","statements":[{"expression":{"id":23319,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23208,"src":"4931:5:86","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":23318,"id":23320,"nodeType":"Return","src":"4924:12:86"}]},"documentation":{"id":23313,"nodeType":"StructuredDocumentation","src":"4796:50:86","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":23322,"implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"4858:4:86","nodeType":"FunctionDefinition","overrides":{"id":23315,"nodeType":"OverrideSpecifier","overrides":[],"src":"4885:8:86"},"parameters":{"id":23314,"nodeType":"ParameterList","parameters":[],"src":"4862:2:86"},"returnParameters":{"id":23318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23317,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23322,"src":"4903:13:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":23316,"name":"string","nodeType":"ElementaryTypeName","src":"4903:6:86","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4902:15:86"},"scope":24039,"src":"4849:92:86","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10830],"body":{"id":23331,"nodeType":"Block","src":"5115:25:86","statements":[{"expression":{"id":23329,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23210,"src":"5128:7:86","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":23328,"id":23330,"nodeType":"Return","src":"5121:14:86"}]},"documentation":{"id":23323,"nodeType":"StructuredDocumentation","src":"4945:96:86","text":" @dev Returns the symbol of the token, usually a shorter version of the\n name."},"functionSelector":"95d89b41","id":23332,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"5053:6:86","nodeType":"FunctionDefinition","overrides":{"id":23325,"nodeType":"OverrideSpecifier","overrides":[],"src":"5082:8:86"},"parameters":{"id":23324,"nodeType":"ParameterList","parameters":[],"src":"5059:2:86"},"returnParameters":{"id":23328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23327,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23332,"src":"5100:13:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":23326,"name":"string","nodeType":"ElementaryTypeName","src":"5100:6:86","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5099:15:86"},"scope":24039,"src":"5044:96:86","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10836],"body":{"id":23341,"nodeType":"Block","src":"5801:27:86","statements":[{"expression":{"id":23339,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23212,"src":"5814:9:86","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":23338,"id":23340,"nodeType":"Return","src":"5807:16:86"}]},"documentation":{"id":23333,"nodeType":"StructuredDocumentation","src":"5144:589:86","text":" @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5.05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the value {ERC20} uses, unless this function is\n overridden;\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."},"functionSelector":"313ce567","id":23342,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"5745:8:86","nodeType":"FunctionDefinition","overrides":{"id":23335,"nodeType":"OverrideSpecifier","overrides":[],"src":"5776:8:86"},"parameters":{"id":23334,"nodeType":"ParameterList","parameters":[],"src":"5753:2:86"},"returnParameters":{"id":23338,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23337,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23342,"src":"5794:5:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":23336,"name":"uint8","nodeType":"ElementaryTypeName","src":"5794:5:86","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"5793:7:86"},"scope":24039,"src":"5736:92:86","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10761],"body":{"id":23351,"nodeType":"Block","src":"5950:30:86","statements":[{"expression":{"id":23349,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23206,"src":"5963:12:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23348,"id":23350,"nodeType":"Return","src":"5956:19:86"}]},"documentation":{"id":23343,"nodeType":"StructuredDocumentation","src":"5832:45:86","text":" @dev See {IERC20-totalSupply}."},"functionSelector":"18160ddd","id":23352,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"5889:11:86","nodeType":"FunctionDefinition","overrides":{"id":23345,"nodeType":"OverrideSpecifier","overrides":[],"src":"5923:8:86"},"parameters":{"id":23344,"nodeType":"ParameterList","parameters":[],"src":"5900:2:86"},"returnParameters":{"id":23348,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23347,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23352,"src":"5941:7:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23346,"name":"uint256","nodeType":"ElementaryTypeName","src":"5941:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5940:9:86"},"scope":24039,"src":"5880:100:86","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10769],"body":{"id":23365,"nodeType":"Block","src":"6113:36:86","statements":[{"expression":{"baseExpression":{"id":23361,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23198,"src":"6126:9:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":23363,"indexExpression":{"id":23362,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23355,"src":"6136:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6126:18:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23360,"id":23364,"nodeType":"Return","src":"6119:25:86"}]},"documentation":{"id":23353,"nodeType":"StructuredDocumentation","src":"5984:43:86","text":" @dev See {IERC20-balanceOf}."},"functionSelector":"70a08231","id":23366,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"6039:9:86","nodeType":"FunctionDefinition","overrides":{"id":23357,"nodeType":"OverrideSpecifier","overrides":[],"src":"6086:8:86"},"parameters":{"id":23356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23355,"mutability":"mutable","name":"account","nameLocation":"6057:7:86","nodeType":"VariableDeclaration","scope":23366,"src":"6049:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23354,"name":"address","nodeType":"ElementaryTypeName","src":"6049:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6048:17:86"},"returnParameters":{"id":23360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23359,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23366,"src":"6104:7:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23358,"name":"uint256","nodeType":"ElementaryTypeName","src":"6104:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6103:9:86"},"scope":24039,"src":"6030:119:86","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10779],"body":{"id":23386,"nodeType":"Block","src":"6412:61:86","statements":[{"expression":{"arguments":[{"expression":{"id":23378,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6428:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":23379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6432:6:86","memberName":"sender","nodeType":"MemberAccess","src":"6428:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23380,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23369,"src":"6440:2:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23381,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23371,"src":"6444:6:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23377,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23597,"src":"6418:9:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6418:33:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23383,"nodeType":"ExpressionStatement","src":"6418:33:86"},{"expression":{"hexValue":"74727565","id":23384,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6464:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":23376,"id":23385,"nodeType":"Return","src":"6457:11:86"}]},"documentation":{"id":23367,"nodeType":"StructuredDocumentation","src":"6153:171:86","text":" @dev See {IERC20-transfer}.\n Requirements:\n - `to` cannot be the zero address.\n - the caller must have a balance of at least `amount`."},"functionSelector":"a9059cbb","id":23387,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"6336:8:86","nodeType":"FunctionDefinition","overrides":{"id":23373,"nodeType":"OverrideSpecifier","overrides":[],"src":"6388:8:86"},"parameters":{"id":23372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23369,"mutability":"mutable","name":"to","nameLocation":"6353:2:86","nodeType":"VariableDeclaration","scope":23387,"src":"6345:10:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23368,"name":"address","nodeType":"ElementaryTypeName","src":"6345:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23371,"mutability":"mutable","name":"amount","nameLocation":"6365:6:86","nodeType":"VariableDeclaration","scope":23387,"src":"6357:14:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23370,"name":"uint256","nodeType":"ElementaryTypeName","src":"6357:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6344:28:86"},"returnParameters":{"id":23376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23375,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23387,"src":"6406:4:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23374,"name":"bool","nodeType":"ElementaryTypeName","src":"6406:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6405:6:86"},"scope":24039,"src":"6327:146:86","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[10789],"body":{"id":23404,"nodeType":"Block","src":"6623:47:86","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":23398,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23204,"src":"6636:11:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":23400,"indexExpression":{"id":23399,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23390,"src":"6648:6:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6636:19:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":23402,"indexExpression":{"id":23401,"name":"_spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23392,"src":"6656:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6636:29:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23397,"id":23403,"nodeType":"Return","src":"6629:36:86"}]},"documentation":{"id":23388,"nodeType":"StructuredDocumentation","src":"6477:43:86","text":" @dev See {IERC20-allowance}."},"functionSelector":"dd62ed3e","id":23405,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"6532:9:86","nodeType":"FunctionDefinition","overrides":{"id":23394,"nodeType":"OverrideSpecifier","overrides":[],"src":"6596:8:86"},"parameters":{"id":23393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23390,"mutability":"mutable","name":"_owner","nameLocation":"6550:6:86","nodeType":"VariableDeclaration","scope":23405,"src":"6542:14:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23389,"name":"address","nodeType":"ElementaryTypeName","src":"6542:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23392,"mutability":"mutable","name":"_spender","nameLocation":"6566:8:86","nodeType":"VariableDeclaration","scope":23405,"src":"6558:16:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23391,"name":"address","nodeType":"ElementaryTypeName","src":"6558:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6541:34:86"},"returnParameters":{"id":23397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23396,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23405,"src":"6614:7:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23395,"name":"uint256","nodeType":"ElementaryTypeName","src":"6614:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6613:9:86"},"scope":24039,"src":"6523:147:86","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10799],"body":{"id":23425,"nodeType":"Block","src":"7045:65:86","statements":[{"expression":{"arguments":[{"expression":{"id":23417,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7060:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":23418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7064:6:86","memberName":"sender","nodeType":"MemberAccess","src":"7060:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23419,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23408,"src":"7072:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23420,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23410,"src":"7081:6:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23416,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23771,"src":"7051:8:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7051:37:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23422,"nodeType":"ExpressionStatement","src":"7051:37:86"},{"expression":{"hexValue":"74727565","id":23423,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7101:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":23415,"id":23424,"nodeType":"Return","src":"7094:11:86"}]},"documentation":{"id":23406,"nodeType":"StructuredDocumentation","src":"6674:279:86","text":" @dev See {IERC20-approve}.\n NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\n `transferFrom`. This is semantically equivalent to an infinite approval.\n Requirements:\n - `spender` cannot be the zero address."},"functionSelector":"095ea7b3","id":23426,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"6965:7:86","nodeType":"FunctionDefinition","overrides":{"id":23412,"nodeType":"OverrideSpecifier","overrides":[],"src":"7021:8:86"},"parameters":{"id":23411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23408,"mutability":"mutable","name":"spender","nameLocation":"6981:7:86","nodeType":"VariableDeclaration","scope":23426,"src":"6973:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23407,"name":"address","nodeType":"ElementaryTypeName","src":"6973:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23410,"mutability":"mutable","name":"amount","nameLocation":"6998:6:86","nodeType":"VariableDeclaration","scope":23426,"src":"6990:14:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23409,"name":"uint256","nodeType":"ElementaryTypeName","src":"6990:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6972:33:86"},"returnParameters":{"id":23415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23414,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23426,"src":"7039:4:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23413,"name":"bool","nodeType":"ElementaryTypeName","src":"7039:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7038:6:86"},"scope":24039,"src":"6956:154:86","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[10811],"body":{"id":23454,"nodeType":"Block","src":"7683:118:86","statements":[{"expression":{"arguments":[{"id":23440,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23429,"src":"7705:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":23441,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7714:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":23442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7718:6:86","memberName":"sender","nodeType":"MemberAccess","src":"7714:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23443,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23433,"src":"7726:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23439,"name":"_spendAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23814,"src":"7689:15:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7689:45:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23445,"nodeType":"ExpressionStatement","src":"7689:45:86"},{"expression":{"arguments":[{"id":23447,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23429,"src":"7750:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23448,"name":"_recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23431,"src":"7759:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23449,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23433,"src":"7771:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23446,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23597,"src":"7740:9:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7740:39:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23451,"nodeType":"ExpressionStatement","src":"7740:39:86"},{"expression":{"hexValue":"74727565","id":23452,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7792:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":23438,"id":23453,"nodeType":"Return","src":"7785:11:86"}]},"documentation":{"id":23427,"nodeType":"StructuredDocumentation","src":"7114:435:86","text":" @dev See {IERC20-transferFrom}.\n Emits an {Approval} event indicating the updated allowance. This is not\n required by the EIP. See the note at the beginning of {ERC20}.\n Requirements:\n - `_sender` and `recipient` cannot be the zero address.\n - `_sender` must have a balance of at least `amount`.\n - the caller must have allowance for ``_sender``'s tokens of at least\n `amount`."},"functionSelector":"23b872dd","id":23455,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"7561:12:86","nodeType":"FunctionDefinition","overrides":{"id":23435,"nodeType":"OverrideSpecifier","overrides":[],"src":"7659:8:86"},"parameters":{"id":23434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23429,"mutability":"mutable","name":"_sender","nameLocation":"7587:7:86","nodeType":"VariableDeclaration","scope":23455,"src":"7579:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23428,"name":"address","nodeType":"ElementaryTypeName","src":"7579:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23431,"mutability":"mutable","name":"_recipient","nameLocation":"7608:10:86","nodeType":"VariableDeclaration","scope":23455,"src":"7600:18:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23430,"name":"address","nodeType":"ElementaryTypeName","src":"7600:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23433,"mutability":"mutable","name":"_amount","nameLocation":"7632:7:86","nodeType":"VariableDeclaration","scope":23455,"src":"7624:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23432,"name":"uint256","nodeType":"ElementaryTypeName","src":"7624:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7573:70:86"},"returnParameters":{"id":23438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23437,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23455,"src":"7677:4:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23436,"name":"bool","nodeType":"ElementaryTypeName","src":"7677:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7676:6:86"},"scope":24039,"src":"7552:249:86","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":23481,"nodeType":"Block","src":"8267:107:86","statements":[{"expression":{"arguments":[{"expression":{"id":23466,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8282:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":23467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8286:6:86","memberName":"sender","nodeType":"MemberAccess","src":"8282:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23468,"name":"_spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23458,"src":"8294:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":23469,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23204,"src":"8304:11:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":23472,"indexExpression":{"expression":{"id":23470,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8316:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":23471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8320:6:86","memberName":"sender","nodeType":"MemberAccess","src":"8316:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8304:23:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":23474,"indexExpression":{"id":23473,"name":"_spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23458,"src":"8328:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8304:33:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":23475,"name":"_addedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23460,"src":"8340:11:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8304:47:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23465,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23771,"src":"8273:8:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8273:79:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23478,"nodeType":"ExpressionStatement","src":"8273:79:86"},{"expression":{"hexValue":"74727565","id":23479,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8365:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":23464,"id":23480,"nodeType":"Return","src":"8358:11:86"}]},"documentation":{"id":23456,"nodeType":"StructuredDocumentation","src":"7805:363:86","text":" @dev Atomically increases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `_spender` cannot be the zero address."},"functionSelector":"39509351","id":23482,"implemented":true,"kind":"function","modifiers":[],"name":"increaseAllowance","nameLocation":"8180:17:86","nodeType":"FunctionDefinition","parameters":{"id":23461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23458,"mutability":"mutable","name":"_spender","nameLocation":"8206:8:86","nodeType":"VariableDeclaration","scope":23482,"src":"8198:16:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23457,"name":"address","nodeType":"ElementaryTypeName","src":"8198:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23460,"mutability":"mutable","name":"_addedValue","nameLocation":"8224:11:86","nodeType":"VariableDeclaration","scope":23482,"src":"8216:19:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23459,"name":"uint256","nodeType":"ElementaryTypeName","src":"8216:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8197:39:86"},"returnParameters":{"id":23464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23463,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23482,"src":"8261:4:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23462,"name":"bool","nodeType":"ElementaryTypeName","src":"8261:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8260:6:86"},"scope":24039,"src":"8171:203:86","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":23519,"nodeType":"Block","src":"8935:276:86","statements":[{"assignments":[23493],"declarations":[{"constant":false,"id":23493,"mutability":"mutable","name":"currentAllowance","nameLocation":"8949:16:86","nodeType":"VariableDeclaration","scope":23519,"src":"8941:24:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23492,"name":"uint256","nodeType":"ElementaryTypeName","src":"8941:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23499,"initialValue":{"arguments":[{"expression":{"id":23495,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8978:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":23496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8982:6:86","memberName":"sender","nodeType":"MemberAccess","src":"8978:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23497,"name":"_spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23485,"src":"8990:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23494,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23405,"src":"8968:9:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":23498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8968:31:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8941:58:86"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23501,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23493,"src":"9013:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":23502,"name":"_subtractedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23487,"src":"9033:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9013:36:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f","id":23504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9051:39:86","typeDescriptions":{"typeIdentifier":"t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8","typeString":"literal_string \"ERC20: decreased allowance below zero\""},"value":"ERC20: decreased allowance below zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8","typeString":"literal_string \"ERC20: decreased allowance below zero\""}],"id":23500,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9005:7:86","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9005:86:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23506,"nodeType":"ExpressionStatement","src":"9005:86:86"},{"id":23516,"nodeType":"UncheckedBlock","src":"9097:92:86","statements":[{"expression":{"arguments":[{"expression":{"id":23508,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9124:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":23509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9128:6:86","memberName":"sender","nodeType":"MemberAccess","src":"9124:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23510,"name":"_spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23485,"src":"9136:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23511,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23493,"src":"9146:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":23512,"name":"_subtractedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23487,"src":"9165:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9146:35:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23507,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23771,"src":"9115:8:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9115:67:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23515,"nodeType":"ExpressionStatement","src":"9115:67:86"}]},{"expression":{"hexValue":"74727565","id":23517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9202:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":23491,"id":23518,"nodeType":"Return","src":"9195:11:86"}]},"documentation":{"id":23483,"nodeType":"StructuredDocumentation","src":"8378:453:86","text":" @dev Atomically decreases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `_spender` cannot be the zero address.\n - `_spender` must have allowance for the caller of at least\n `_subtractedValue`."},"functionSelector":"a457c2d7","id":23520,"implemented":true,"kind":"function","modifiers":[],"name":"decreaseAllowance","nameLocation":"8843:17:86","nodeType":"FunctionDefinition","parameters":{"id":23488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23485,"mutability":"mutable","name":"_spender","nameLocation":"8869:8:86","nodeType":"VariableDeclaration","scope":23520,"src":"8861:16:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23484,"name":"address","nodeType":"ElementaryTypeName","src":"8861:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23487,"mutability":"mutable","name":"_subtractedValue","nameLocation":"8887:16:86","nodeType":"VariableDeclaration","scope":23520,"src":"8879:24:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23486,"name":"uint256","nodeType":"ElementaryTypeName","src":"8879:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8860:44:86"},"returnParameters":{"id":23491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23490,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23520,"src":"8929:4:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23489,"name":"bool","nodeType":"ElementaryTypeName","src":"8929:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8928:6:86"},"scope":24039,"src":"8834:377:86","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":23596,"nodeType":"Block","src":"9766:712:86","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23531,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23523,"src":"9780:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":23534,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9799:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":23533,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9791:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23532,"name":"address","nodeType":"ElementaryTypeName","src":"9791:7:86","typeDescriptions":{}}},"id":23535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9791:10:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9780:21:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373","id":23537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9803:39:86","typeDescriptions":{"typeIdentifier":"t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea","typeString":"literal_string \"ERC20: transfer from the zero address\""},"value":"ERC20: transfer from the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea","typeString":"literal_string \"ERC20: transfer from the zero address\""}],"id":23530,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9772:7:86","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9772:71:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23539,"nodeType":"ExpressionStatement","src":"9772:71:86"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23541,"name":"_recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23525,"src":"9857:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":23544,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9879:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":23543,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9871:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23542,"name":"address","nodeType":"ElementaryTypeName","src":"9871:7:86","typeDescriptions":{}}},"id":23545,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9871:10:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9857:24:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472657373","id":23547,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9883:37:86","typeDescriptions":{"typeIdentifier":"t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f","typeString":"literal_string \"ERC20: transfer to the zero address\""},"value":"ERC20: transfer to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f","typeString":"literal_string \"ERC20: transfer to the zero address\""}],"id":23540,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9849:7:86","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9849:72:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23549,"nodeType":"ExpressionStatement","src":"9849:72:86"},{"expression":{"arguments":[{"id":23551,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23523,"src":"9949:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23552,"name":"_recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23525,"src":"9958:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23553,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23527,"src":"9970:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23550,"name":"_beforeTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23825,"src":"9928:20:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9928:50:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23555,"nodeType":"ExpressionStatement","src":"9928:50:86"},{"assignments":[23557],"declarations":[{"constant":false,"id":23557,"mutability":"mutable","name":"fromBalance","nameLocation":"9993:11:86","nodeType":"VariableDeclaration","scope":23596,"src":"9985:19:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23556,"name":"uint256","nodeType":"ElementaryTypeName","src":"9985:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23561,"initialValue":{"baseExpression":{"id":23558,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23198,"src":"10007:9:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":23560,"indexExpression":{"id":23559,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23523,"src":"10017:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10007:18:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9985:40:86"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23563,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23557,"src":"10039:11:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":23564,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23527,"src":"10054:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10039:22:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365","id":23566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10063:40:86","typeDescriptions":{"typeIdentifier":"t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6","typeString":"literal_string \"ERC20: transfer amount exceeds balance\""},"value":"ERC20: transfer amount exceeds balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6","typeString":"literal_string \"ERC20: transfer amount exceeds balance\""}],"id":23562,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10031:7:86","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10031:73:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23568,"nodeType":"ExpressionStatement","src":"10031:73:86"},{"id":23583,"nodeType":"UncheckedBlock","src":"10110:258:86","statements":[{"expression":{"id":23575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23569,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23198,"src":"10128:9:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":23571,"indexExpression":{"id":23570,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23523,"src":"10138:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10128:18:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23572,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23557,"src":"10149:11:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":23573,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23527,"src":"10163:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10149:21:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10128:42:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23576,"nodeType":"ExpressionStatement","src":"10128:42:86"},{"expression":{"id":23581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23577,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23198,"src":"10329:9:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":23579,"indexExpression":{"id":23578,"name":"_recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23525,"src":"10339:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10329:21:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":23580,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23527,"src":"10354:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10329:32:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23582,"nodeType":"ExpressionStatement","src":"10329:32:86"}]},{"eventCall":{"arguments":[{"id":23585,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23523,"src":"10388:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23586,"name":"_recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23525,"src":"10397:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23587,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23527,"src":"10409:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23584,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10746,"src":"10379:8:86","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10379:38:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23589,"nodeType":"EmitStatement","src":"10374:43:86"},{"expression":{"arguments":[{"id":23591,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23523,"src":"10444:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23592,"name":"_recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23525,"src":"10453:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23593,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23527,"src":"10465:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23590,"name":"_afterTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23836,"src":"10424:19:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10424:49:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23595,"nodeType":"ExpressionStatement","src":"10424:49:86"}]},"documentation":{"id":23521,"nodeType":"StructuredDocumentation","src":"9215:442:86","text":" @dev Moves tokens `amount` from `_sender` to `_recipient`.\n This is internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n Requirements:\n - `_sender` cannot be the zero address.\n - `_recipient` cannot be the zero address.\n - `_sender` must have a balance of at least `amount`."},"id":23597,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"9669:9:86","nodeType":"FunctionDefinition","parameters":{"id":23528,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23523,"mutability":"mutable","name":"_sender","nameLocation":"9692:7:86","nodeType":"VariableDeclaration","scope":23597,"src":"9684:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23522,"name":"address","nodeType":"ElementaryTypeName","src":"9684:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23525,"mutability":"mutable","name":"_recipient","nameLocation":"9713:10:86","nodeType":"VariableDeclaration","scope":23597,"src":"9705:18:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23524,"name":"address","nodeType":"ElementaryTypeName","src":"9705:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23527,"mutability":"mutable","name":"_amount","nameLocation":"9737:7:86","nodeType":"VariableDeclaration","scope":23597,"src":"9729:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23526,"name":"uint256","nodeType":"ElementaryTypeName","src":"9729:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9678:70:86"},"returnParameters":{"id":23529,"nodeType":"ParameterList","parameters":[],"src":"9766:0:86"},"scope":24039,"src":"9660:818:86","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":23653,"nodeType":"Block","src":"10798:438:86","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23606,"name":"_account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23600,"src":"10812:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":23609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10832:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":23608,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10824:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23607,"name":"address","nodeType":"ElementaryTypeName","src":"10824:7:86","typeDescriptions":{}}},"id":23610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10824:10:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10812:22:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a206d696e7420746f20746865207a65726f2061646472657373","id":23612,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10836:33:86","typeDescriptions":{"typeIdentifier":"t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e","typeString":"literal_string \"ERC20: mint to the zero address\""},"value":"ERC20: mint to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e","typeString":"literal_string \"ERC20: mint to the zero address\""}],"id":23605,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10804:7:86","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10804:66:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23614,"nodeType":"ExpressionStatement","src":"10804:66:86"},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":23618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10906:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":23617,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10898:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23616,"name":"address","nodeType":"ElementaryTypeName","src":"10898:7:86","typeDescriptions":{}}},"id":23619,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10898:10:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23620,"name":"_account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23600,"src":"10910:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23621,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23602,"src":"10920:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23615,"name":"_beforeTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23825,"src":"10877:20:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10877:51:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23623,"nodeType":"ExpressionStatement","src":"10877:51:86"},{"expression":{"id":23626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23624,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23206,"src":"10935:12:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":23625,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23602,"src":"10951:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10935:23:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23627,"nodeType":"ExpressionStatement","src":"10935:23:86"},{"id":23634,"nodeType":"UncheckedBlock","src":"10964:161:86","statements":[{"expression":{"id":23632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23628,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23198,"src":"11088:9:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":23630,"indexExpression":{"id":23629,"name":"_account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23600,"src":"11098:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11088:19:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":23631,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23602,"src":"11111:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11088:30:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23633,"nodeType":"ExpressionStatement","src":"11088:30:86"}]},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":23638,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11152:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":23637,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11144:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23636,"name":"address","nodeType":"ElementaryTypeName","src":"11144:7:86","typeDescriptions":{}}},"id":23639,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11144:10:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23640,"name":"_account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23600,"src":"11156:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23641,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23602,"src":"11166:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23635,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10746,"src":"11135:8:86","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11135:39:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23643,"nodeType":"EmitStatement","src":"11130:44:86"},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":23647,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11209:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":23646,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11201:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23645,"name":"address","nodeType":"ElementaryTypeName","src":"11201:7:86","typeDescriptions":{}}},"id":23648,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11201:10:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23649,"name":"_account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23600,"src":"11213:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23650,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23602,"src":"11223:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23644,"name":"_afterTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23836,"src":"11181:19:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11181:50:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23652,"nodeType":"ExpressionStatement","src":"11181:50:86"}]},"documentation":{"id":23598,"nodeType":"StructuredDocumentation","src":"10482:246:86","text":"@dev Creates `_amount` tokens and assigns them to `_account`, increasing\n the total supply.\n Emits a {Transfer} event with `from` set to the zero address.\n Requirements:\n - `to` cannot be the zero address."},"id":23654,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"10740:5:86","nodeType":"FunctionDefinition","parameters":{"id":23603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23600,"mutability":"mutable","name":"_account","nameLocation":"10754:8:86","nodeType":"VariableDeclaration","scope":23654,"src":"10746:16:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23599,"name":"address","nodeType":"ElementaryTypeName","src":"10746:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23602,"mutability":"mutable","name":"_amount","nameLocation":"10772:7:86","nodeType":"VariableDeclaration","scope":23654,"src":"10764:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23601,"name":"uint256","nodeType":"ElementaryTypeName","src":"10764:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10745:35:86"},"returnParameters":{"id":23604,"nodeType":"ParameterList","parameters":[],"src":"10798:0:86"},"scope":24039,"src":"10731:505:86","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":23725,"nodeType":"Block","src":"11604:553:86","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23663,"name":"_account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23657,"src":"11618:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":23666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11638:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":23665,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11630:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23664,"name":"address","nodeType":"ElementaryTypeName","src":"11630:7:86","typeDescriptions":{}}},"id":23667,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11630:10:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11618:22:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a206275726e2066726f6d20746865207a65726f2061646472657373","id":23669,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11642:35:86","typeDescriptions":{"typeIdentifier":"t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f","typeString":"literal_string \"ERC20: burn from the zero address\""},"value":"ERC20: burn from the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f","typeString":"literal_string \"ERC20: burn from the zero address\""}],"id":23662,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11610:7:86","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11610:68:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23671,"nodeType":"ExpressionStatement","src":"11610:68:86"},{"expression":{"arguments":[{"id":23673,"name":"_account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23657,"src":"11706:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":23676,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11724:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":23675,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11716:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23674,"name":"address","nodeType":"ElementaryTypeName","src":"11716:7:86","typeDescriptions":{}}},"id":23677,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11716:10:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23678,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23659,"src":"11728:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23672,"name":"_beforeTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23825,"src":"11685:20:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11685:51:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23680,"nodeType":"ExpressionStatement","src":"11685:51:86"},{"assignments":[23682],"declarations":[{"constant":false,"id":23682,"mutability":"mutable","name":"accountBalance","nameLocation":"11751:14:86","nodeType":"VariableDeclaration","scope":23725,"src":"11743:22:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23681,"name":"uint256","nodeType":"ElementaryTypeName","src":"11743:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23686,"initialValue":{"baseExpression":{"id":23683,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23198,"src":"11768:9:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":23685,"indexExpression":{"id":23684,"name":"_account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23657,"src":"11778:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11768:19:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11743:44:86"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23688,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23682,"src":"11801:14:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":23689,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23659,"src":"11819:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11801:25:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365","id":23691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11828:36:86","typeDescriptions":{"typeIdentifier":"t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd","typeString":"literal_string \"ERC20: burn amount exceeds balance\""},"value":"ERC20: burn amount exceeds balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd","typeString":"literal_string \"ERC20: burn amount exceeds balance\""}],"id":23687,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11793:7:86","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11793:72:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23693,"nodeType":"ExpressionStatement","src":"11793:72:86"},{"id":23706,"nodeType":"UncheckedBlock","src":"11871:174:86","statements":[{"expression":{"id":23700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23694,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23198,"src":"11889:9:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":23696,"indexExpression":{"id":23695,"name":"_account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23657,"src":"11899:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11889:19:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23697,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23682,"src":"11911:14:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":23698,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23659,"src":"11928:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11911:24:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11889:46:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23701,"nodeType":"ExpressionStatement","src":"11889:46:86"},{"expression":{"id":23704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23702,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23206,"src":"12015:12:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":23703,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23659,"src":"12031:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12015:23:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23705,"nodeType":"ExpressionStatement","src":"12015:23:86"}]},{"eventCall":{"arguments":[{"id":23708,"name":"_account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23657,"src":"12065:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":23711,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12083:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":23710,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12075:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23709,"name":"address","nodeType":"ElementaryTypeName","src":"12075:7:86","typeDescriptions":{}}},"id":23712,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12075:10:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23713,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23659,"src":"12087:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23707,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10746,"src":"12056:8:86","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12056:39:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23715,"nodeType":"EmitStatement","src":"12051:44:86"},{"expression":{"arguments":[{"id":23717,"name":"_account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23657,"src":"12122:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":23720,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12140:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":23719,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12132:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23718,"name":"address","nodeType":"ElementaryTypeName","src":"12132:7:86","typeDescriptions":{}}},"id":23721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12132:10:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23722,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23659,"src":"12144:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23716,"name":"_afterTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23836,"src":"12102:19:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12102:50:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23724,"nodeType":"ExpressionStatement","src":"12102:50:86"}]},"documentation":{"id":23655,"nodeType":"StructuredDocumentation","src":"11240:294:86","text":" @dev Destroys `_amount` tokens from `_account`, reducing the\n total supply.\n Emits a {Transfer} event with `to` set to the zero address.\n Requirements:\n - `_account` cannot be the zero address.\n - `_account` must have at least `_amount` tokens."},"id":23726,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"11546:5:86","nodeType":"FunctionDefinition","parameters":{"id":23660,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23657,"mutability":"mutable","name":"_account","nameLocation":"11560:8:86","nodeType":"VariableDeclaration","scope":23726,"src":"11552:16:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23656,"name":"address","nodeType":"ElementaryTypeName","src":"11552:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23659,"mutability":"mutable","name":"_amount","nameLocation":"11578:7:86","nodeType":"VariableDeclaration","scope":23726,"src":"11570:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23658,"name":"uint256","nodeType":"ElementaryTypeName","src":"11570:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11551:35:86"},"returnParameters":{"id":23661,"nodeType":"ParameterList","parameters":[],"src":"11604:0:86"},"scope":24039,"src":"11537:620:86","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":23770,"nodeType":"Block","src":"12659:247:86","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23737,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23729,"src":"12673:6:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":23740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12691:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":23739,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12683:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23738,"name":"address","nodeType":"ElementaryTypeName","src":"12683:7:86","typeDescriptions":{}}},"id":23741,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12683:10:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12673:20:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373","id":23743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12695:38:86","typeDescriptions":{"typeIdentifier":"t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208","typeString":"literal_string \"ERC20: approve from the zero address\""},"value":"ERC20: approve from the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208","typeString":"literal_string \"ERC20: approve from the zero address\""}],"id":23736,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12665:7:86","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12665:69:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23745,"nodeType":"ExpressionStatement","src":"12665:69:86"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23747,"name":"_spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23731,"src":"12748:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":23750,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12768:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":23749,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12760:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23748,"name":"address","nodeType":"ElementaryTypeName","src":"12760:7:86","typeDescriptions":{}}},"id":23751,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12760:10:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12748:22:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f2061646472657373","id":23753,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12772:36:86","typeDescriptions":{"typeIdentifier":"t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029","typeString":"literal_string \"ERC20: approve to the zero address\""},"value":"ERC20: approve to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029","typeString":"literal_string \"ERC20: approve to the zero address\""}],"id":23746,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12740:7:86","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23754,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12740:69:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23755,"nodeType":"ExpressionStatement","src":"12740:69:86"},{"expression":{"id":23762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":23756,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23204,"src":"12816:11:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":23759,"indexExpression":{"id":23757,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23729,"src":"12828:6:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12816:19:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":23760,"indexExpression":{"id":23758,"name":"_spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23731,"src":"12836:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12816:29:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23761,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23733,"src":"12848:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12816:39:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23763,"nodeType":"ExpressionStatement","src":"12816:39:86"},{"eventCall":{"arguments":[{"id":23765,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23729,"src":"12875:6:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23766,"name":"_spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23731,"src":"12883:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23767,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23733,"src":"12893:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23764,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10755,"src":"12866:8:86","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12866:35:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23769,"nodeType":"EmitStatement","src":"12861:40:86"}]},"documentation":{"id":23727,"nodeType":"StructuredDocumentation","src":"12161:393:86","text":" @dev Sets `_amount` as the allowance of `_spender` over the `_owner` s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `_owner` cannot be the zero address.\n - `_spender` cannot be the zero address."},"id":23771,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"12566:8:86","nodeType":"FunctionDefinition","parameters":{"id":23734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23729,"mutability":"mutable","name":"_owner","nameLocation":"12588:6:86","nodeType":"VariableDeclaration","scope":23771,"src":"12580:14:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23728,"name":"address","nodeType":"ElementaryTypeName","src":"12580:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23731,"mutability":"mutable","name":"_spender","nameLocation":"12608:8:86","nodeType":"VariableDeclaration","scope":23771,"src":"12600:16:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23730,"name":"address","nodeType":"ElementaryTypeName","src":"12600:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23733,"mutability":"mutable","name":"_amount","nameLocation":"12630:7:86","nodeType":"VariableDeclaration","scope":23771,"src":"12622:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23732,"name":"uint256","nodeType":"ElementaryTypeName","src":"12622:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12574:67:86"},"returnParameters":{"id":23735,"nodeType":"ParameterList","parameters":[],"src":"12659:0:86"},"scope":24039,"src":"12557:349:86","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":23813,"nodeType":"Block","src":"13281:287:86","statements":[{"assignments":[23782],"declarations":[{"constant":false,"id":23782,"mutability":"mutable","name":"currentAllowance","nameLocation":"13295:16:86","nodeType":"VariableDeclaration","scope":23813,"src":"13287:24:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23781,"name":"uint256","nodeType":"ElementaryTypeName","src":"13287:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23787,"initialValue":{"arguments":[{"id":23784,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23774,"src":"13324:6:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23785,"name":"_spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23776,"src":"13332:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23783,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23405,"src":"13314:9:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":23786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13314:27:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13287:54:86"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23788,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23782,"src":"13351:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"arguments":[{"id":23791,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13376:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":23790,"name":"uint256","nodeType":"ElementaryTypeName","src":"13376:7:86","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":23789,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13371:4:86","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":23792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13371:13:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":23793,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13385:3:86","memberName":"max","nodeType":"MemberAccess","src":"13371:17:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13351:37:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23812,"nodeType":"IfStatement","src":"13347:217:86","trueBody":{"id":23811,"nodeType":"Block","src":"13390:174:86","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23796,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23782,"src":"13406:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":23797,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23778,"src":"13426:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13406:27:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a20696e73756666696369656e7420616c6c6f77616e6365","id":23799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13435:31:86","typeDescriptions":{"typeIdentifier":"t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe","typeString":"literal_string \"ERC20: insufficient allowance\""},"value":"ERC20: insufficient allowance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe","typeString":"literal_string \"ERC20: insufficient allowance\""}],"id":23795,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"13398:7:86","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13398:69:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23801,"nodeType":"ExpressionStatement","src":"13398:69:86"},{"id":23810,"nodeType":"UncheckedBlock","src":"13475:83:86","statements":[{"expression":{"arguments":[{"id":23803,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23774,"src":"13504:6:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23804,"name":"_spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23776,"src":"13512:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23805,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23782,"src":"13522:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":23806,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23778,"src":"13541:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13522:26:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23802,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23771,"src":"13495:8:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13495:54:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23809,"nodeType":"ExpressionStatement","src":"13495:54:86"}]}]}}]},"documentation":{"id":23772,"nodeType":"StructuredDocumentation","src":"12910:259:86","text":" @dev Updates `_owner` s allowance for `_spender` based on spent `_amount`.\n Does not update the allowance amount in case of infinite allowance.\n Revert if not enough allowance is available.\n Might emit an {Approval} event."},"id":23814,"implemented":true,"kind":"function","modifiers":[],"name":"_spendAllowance","nameLocation":"13181:15:86","nodeType":"FunctionDefinition","parameters":{"id":23779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23774,"mutability":"mutable","name":"_owner","nameLocation":"13210:6:86","nodeType":"VariableDeclaration","scope":23814,"src":"13202:14:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23773,"name":"address","nodeType":"ElementaryTypeName","src":"13202:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23776,"mutability":"mutable","name":"_spender","nameLocation":"13230:8:86","nodeType":"VariableDeclaration","scope":23814,"src":"13222:16:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23775,"name":"address","nodeType":"ElementaryTypeName","src":"13222:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23778,"mutability":"mutable","name":"_amount","nameLocation":"13252:7:86","nodeType":"VariableDeclaration","scope":23814,"src":"13244:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23777,"name":"uint256","nodeType":"ElementaryTypeName","src":"13244:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13196:67:86"},"returnParameters":{"id":23780,"nodeType":"ParameterList","parameters":[],"src":"13281:0:86"},"scope":24039,"src":"13172:396:86","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":23824,"nodeType":"Block","src":"14246:2:86","statements":[]},"documentation":{"id":23815,"nodeType":"StructuredDocumentation","src":"13572:563:86","text":" @dev Hook that is called before any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `_from` and `_to` are both non-zero, `_amount` of ``_from``'s tokens\n will be to transferred to `_to`.\n - when `_from` is zero, `_amount` tokens will be minted for `_to`.\n - when `_to` is zero, `_amount` of ``_from``'s tokens will be burned.\n - `_from` and `_to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."},"id":23825,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeTokenTransfer","nameLocation":"14147:20:86","nodeType":"FunctionDefinition","parameters":{"id":23822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23817,"mutability":"mutable","name":"_from","nameLocation":"14181:5:86","nodeType":"VariableDeclaration","scope":23825,"src":"14173:13:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23816,"name":"address","nodeType":"ElementaryTypeName","src":"14173:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23819,"mutability":"mutable","name":"_to","nameLocation":"14200:3:86","nodeType":"VariableDeclaration","scope":23825,"src":"14192:11:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23818,"name":"address","nodeType":"ElementaryTypeName","src":"14192:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23821,"mutability":"mutable","name":"_amount","nameLocation":"14217:7:86","nodeType":"VariableDeclaration","scope":23825,"src":"14209:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23820,"name":"uint256","nodeType":"ElementaryTypeName","src":"14209:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14167:61:86"},"returnParameters":{"id":23823,"nodeType":"ParameterList","parameters":[],"src":"14246:0:86"},"scope":24039,"src":"14138:110:86","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":23835,"nodeType":"Block","src":"14913:2:86","statements":[]},"documentation":{"id":23826,"nodeType":"StructuredDocumentation","src":"14252:551:86","text":" @dev Hook that is called after any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n has been transferred to `to`.\n - when `from` is zero, `amount` tokens have been minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens have been burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."},"id":23836,"implemented":true,"kind":"function","modifiers":[],"name":"_afterTokenTransfer","nameLocation":"14815:19:86","nodeType":"FunctionDefinition","parameters":{"id":23833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23828,"mutability":"mutable","name":"_from","nameLocation":"14848:5:86","nodeType":"VariableDeclaration","scope":23836,"src":"14840:13:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23827,"name":"address","nodeType":"ElementaryTypeName","src":"14840:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23830,"mutability":"mutable","name":"_to","nameLocation":"14867:3:86","nodeType":"VariableDeclaration","scope":23836,"src":"14859:11:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23829,"name":"address","nodeType":"ElementaryTypeName","src":"14859:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23832,"mutability":"mutable","name":"_amount","nameLocation":"14884:7:86","nodeType":"VariableDeclaration","scope":23836,"src":"14876:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23831,"name":"uint256","nodeType":"ElementaryTypeName","src":"14876:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14834:61:86"},"returnParameters":{"id":23834,"nodeType":"ParameterList","parameters":[],"src":"14913:0:86"},"scope":24039,"src":"14806:109:86","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[10858],"body":{"id":23908,"nodeType":"Block","src":"15761:433:86","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23856,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"15775:5:86","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":23857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15781:9:86","memberName":"timestamp","nodeType":"MemberAccess","src":"15775:15:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":23858,"name":"_deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23845,"src":"15794:9:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15775:28:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332305065726d69743a206578706972656420646561646c696e65","id":23860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15805:31:86","typeDescriptions":{"typeIdentifier":"t_stringliteral_3e89525a63fb9c966b61cf8f5305156de8420bc773a2b60828a2f32c3c5797bd","typeString":"literal_string \"ERC20Permit: expired deadline\""},"value":"ERC20Permit: expired deadline"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3e89525a63fb9c966b61cf8f5305156de8420bc773a2b60828a2f32c3c5797bd","typeString":"literal_string \"ERC20Permit: expired deadline\""}],"id":23855,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"15767:7:86","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15767:70:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23862,"nodeType":"ExpressionStatement","src":"15767:70:86"},{"assignments":[23864],"declarations":[{"constant":false,"id":23864,"mutability":"mutable","name":"_structHash","nameLocation":"15852:11:86","nodeType":"VariableDeclaration","scope":23908,"src":"15844:19:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23863,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15844:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23878,"initialValue":{"arguments":[{"arguments":[{"id":23868,"name":"_PERMIT_TYPEHASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23226,"src":"15894:16:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":23869,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23839,"src":"15912:6:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23870,"name":"_spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23841,"src":"15920:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23871,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23843,"src":"15930:6:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":23873,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23839,"src":"15948:6:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23872,"name":"_useNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23965,"src":"15938:9:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$","typeString":"function (address) returns (uint256)"}},"id":23874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15938:17:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":23875,"name":"_deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23845,"src":"15957:9:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":23866,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15883:3:86","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":23867,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15887:6:86","memberName":"encode","nodeType":"MemberAccess","src":"15883:10:86","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":23876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15883:84:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":23865,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15866:9:86","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":23877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15866:107:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"15844:129:86"},{"assignments":[23880],"declarations":[{"constant":false,"id":23880,"mutability":"mutable","name":"_hash","nameLocation":"15988:5:86","nodeType":"VariableDeclaration","scope":23908,"src":"15980:13:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23879,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15980:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23884,"initialValue":{"arguments":[{"id":23882,"name":"_structHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23864,"src":"16013:11:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":23881,"name":"_hashTypedDataV4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24038,"src":"15996:16:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":23883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15996:29:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"15980:45:86"},{"assignments":[23886],"declarations":[{"constant":false,"id":23886,"mutability":"mutable","name":"_signer","nameLocation":"16040:7:86","nodeType":"VariableDeclaration","scope":23908,"src":"16032:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23885,"name":"address","nodeType":"ElementaryTypeName","src":"16032:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":23894,"initialValue":{"arguments":[{"id":23889,"name":"_hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23880,"src":"16064:5:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":23890,"name":"_v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23847,"src":"16071:2:86","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":23891,"name":"_r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23849,"src":"16075:2:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":23892,"name":"_s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23851,"src":"16079:2:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":23887,"name":"ECDSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12176,"src":"16050:5:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ECDSA_$12176_$","typeString":"type(library ECDSA)"}},"id":23888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16056:7:86","memberName":"recover","nodeType":"MemberAccess","referencedDeclaration":12116,"src":"16050:13:86","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address)"}},"id":23893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16050:32:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16032:50:86"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23896,"name":"_signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23886,"src":"16096:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23897,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23839,"src":"16107:6:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16096:17:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332305065726d69743a20696e76616c6964207369676e6174757265","id":23899,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16115:32:86","typeDescriptions":{"typeIdentifier":"t_stringliteral_94ca1ab58dfda790a1782ffbb0c0a140ec51d4148dbeecc6c39e37b25ff4b124","typeString":"literal_string \"ERC20Permit: invalid signature\""},"value":"ERC20Permit: invalid signature"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_94ca1ab58dfda790a1782ffbb0c0a140ec51d4148dbeecc6c39e37b25ff4b124","typeString":"literal_string \"ERC20Permit: invalid signature\""}],"id":23895,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16088:7:86","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16088:60:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23901,"nodeType":"ExpressionStatement","src":"16088:60:86"},{"expression":{"arguments":[{"id":23903,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23839,"src":"16164:6:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23904,"name":"_spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23841,"src":"16172:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23905,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23843,"src":"16182:6:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23902,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23771,"src":"16155:8:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16155:34:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23907,"nodeType":"ExpressionStatement","src":"16155:34:86"}]},"documentation":{"id":23837,"nodeType":"StructuredDocumentation","src":"14919:664:86","text":" @dev See {IERC20Permit-permit}.\n @notice Sets approval from owner to spender to value\n as long as deadline has not passed\n by submitting a valid signature from owner\n Uses EIP 712 structured data hashing & signing\n https://eips.ethereum.org/EIPS/eip-712\n @param _owner The account setting approval & signing the message\n @param _spender The account receiving approval to spend owner's tokens\n @param _value The amount to set approval for\n @param _deadline The timestamp before which the signature must be submitted\n @param _v ECDSA signature v\n @param _r ECDSA signature r\n @param _s ECDSA signature s"},"functionSelector":"d505accf","id":23909,"implemented":true,"kind":"function","modifiers":[],"name":"permit","nameLocation":"15595:6:86","nodeType":"FunctionDefinition","overrides":{"id":23853,"nodeType":"OverrideSpecifier","overrides":[],"src":"15752:8:86"},"parameters":{"id":23852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23839,"mutability":"mutable","name":"_owner","nameLocation":"15615:6:86","nodeType":"VariableDeclaration","scope":23909,"src":"15607:14:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23838,"name":"address","nodeType":"ElementaryTypeName","src":"15607:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23841,"mutability":"mutable","name":"_spender","nameLocation":"15635:8:86","nodeType":"VariableDeclaration","scope":23909,"src":"15627:16:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23840,"name":"address","nodeType":"ElementaryTypeName","src":"15627:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23843,"mutability":"mutable","name":"_value","nameLocation":"15657:6:86","nodeType":"VariableDeclaration","scope":23909,"src":"15649:14:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23842,"name":"uint256","nodeType":"ElementaryTypeName","src":"15649:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23845,"mutability":"mutable","name":"_deadline","nameLocation":"15677:9:86","nodeType":"VariableDeclaration","scope":23909,"src":"15669:17:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23844,"name":"uint256","nodeType":"ElementaryTypeName","src":"15669:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23847,"mutability":"mutable","name":"_v","nameLocation":"15698:2:86","nodeType":"VariableDeclaration","scope":23909,"src":"15692:8:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":23846,"name":"uint8","nodeType":"ElementaryTypeName","src":"15692:5:86","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":23849,"mutability":"mutable","name":"_r","nameLocation":"15714:2:86","nodeType":"VariableDeclaration","scope":23909,"src":"15706:10:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23848,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15706:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":23851,"mutability":"mutable","name":"_s","nameLocation":"15730:2:86","nodeType":"VariableDeclaration","scope":23909,"src":"15722:10:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23850,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15722:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15601:135:86"},"returnParameters":{"id":23854,"nodeType":"ParameterList","parameters":[],"src":"15761:0:86"},"scope":24039,"src":"15586:608:86","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[10866],"body":{"id":23924,"nodeType":"Block","src":"16326:43:86","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":23918,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23221,"src":"16339:7:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Counter_$11512_storage_$","typeString":"mapping(address => struct Counters.Counter storage ref)"}},"id":23920,"indexExpression":{"id":23919,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23912,"src":"16347:6:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16339:15:86","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage","typeString":"struct Counters.Counter storage ref"}},"id":23921,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16355:7:86","memberName":"current","nodeType":"MemberAccess","referencedDeclaration":11524,"src":"16339:23:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Counter_$11512_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$11512_storage_ptr_$","typeString":"function (struct Counters.Counter storage pointer) view returns (uint256)"}},"id":23922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16339:25:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23917,"id":23923,"nodeType":"Return","src":"16332:32:86"}]},"documentation":{"id":23910,"nodeType":"StructuredDocumentation","src":"16198:46:86","text":" @dev See {IERC20Permit-nonces}."},"functionSelector":"7ecebe00","id":23925,"implemented":true,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"16256:6:86","nodeType":"FunctionDefinition","overrides":{"id":23914,"nodeType":"OverrideSpecifier","overrides":[],"src":"16299:8:86"},"parameters":{"id":23913,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23912,"mutability":"mutable","name":"_owner","nameLocation":"16271:6:86","nodeType":"VariableDeclaration","scope":23925,"src":"16263:14:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23911,"name":"address","nodeType":"ElementaryTypeName","src":"16263:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16262:16:86"},"returnParameters":{"id":23917,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23916,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23925,"src":"16317:7:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23915,"name":"uint256","nodeType":"ElementaryTypeName","src":"16317:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16316:9:86"},"scope":24039,"src":"16247:122:86","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10872],"body":{"id":23935,"nodeType":"Block","src":"16592:38:86","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":23932,"name":"_domainSeparatorV4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23994,"src":"16605:18:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":23933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16605:20:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":23931,"id":23934,"nodeType":"Return","src":"16598:27:86"}]},"documentation":{"id":23926,"nodeType":"StructuredDocumentation","src":"16373:147:86","text":" @dev See {IERC20Permit-DOMAIN_SEPARATOR}.\n This is ALWAYS calculated at runtime because the token name is mutable, not constant."},"functionSelector":"3644e515","id":23936,"implemented":true,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"16532:16:86","nodeType":"FunctionDefinition","overrides":{"id":23928,"nodeType":"OverrideSpecifier","overrides":[],"src":"16565:8:86"},"parameters":{"id":23927,"nodeType":"ParameterList","parameters":[],"src":"16548:2:86"},"returnParameters":{"id":23931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23930,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23936,"src":"16583:7:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23929,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16583:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16582:9:86"},"scope":24039,"src":"16523:107:86","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":23964,"nodeType":"Block","src":"16838:113:86","statements":[{"assignments":[23948],"declarations":[{"constant":false,"id":23948,"mutability":"mutable","name":"nonce","nameLocation":"16869:5:86","nodeType":"VariableDeclaration","scope":23964,"src":"16844:30:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter"},"typeName":{"id":23947,"nodeType":"UserDefinedTypeName","pathNode":{"id":23946,"name":"Counters.Counter","nameLocations":["16844:8:86","16853:7:86"],"nodeType":"IdentifierPath","referencedDeclaration":11512,"src":"16844:16:86"},"referencedDeclaration":11512,"src":"16844:16:86","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter"}},"visibility":"internal"}],"id":23952,"initialValue":{"baseExpression":{"id":23949,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23221,"src":"16877:7:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Counter_$11512_storage_$","typeString":"mapping(address => struct Counters.Counter storage ref)"}},"id":23951,"indexExpression":{"id":23950,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23939,"src":"16885:6:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16877:15:86","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage","typeString":"struct Counters.Counter storage ref"}},"nodeType":"VariableDeclarationStatement","src":"16844:48:86"},{"expression":{"id":23957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23953,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23942,"src":"16898:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23954,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23948,"src":"16908:5:86","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter storage pointer"}},"id":23955,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16914:7:86","memberName":"current","nodeType":"MemberAccess","referencedDeclaration":11524,"src":"16908:13:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Counter_$11512_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$11512_storage_ptr_$","typeString":"function (struct Counters.Counter storage pointer) view returns (uint256)"}},"id":23956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16908:15:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16898:25:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23958,"nodeType":"ExpressionStatement","src":"16898:25:86"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23959,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23948,"src":"16929:5:86","typeDescriptions":{"typeIdentifier":"t_struct$_Counter_$11512_storage_ptr","typeString":"struct Counters.Counter storage pointer"}},"id":23961,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16935:9:86","memberName":"increment","nodeType":"MemberAccess","referencedDeclaration":11538,"src":"16929:15:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Counter_$11512_storage_ptr_$returns$__$bound_to$_t_struct$_Counter_$11512_storage_ptr_$","typeString":"function (struct Counters.Counter storage pointer)"}},"id":23962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16929:17:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23963,"nodeType":"ExpressionStatement","src":"16929:17:86"}]},"documentation":{"id":23937,"nodeType":"StructuredDocumentation","src":"16634:123:86","text":" @dev \"Consume a nonce\": return the current value and increment.\n @dev See {EIP712._buildDomainSeparator}"},"id":23965,"implemented":true,"kind":"function","modifiers":[],"name":"_useNonce","nameLocation":"16769:9:86","nodeType":"FunctionDefinition","parameters":{"id":23940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23939,"mutability":"mutable","name":"_owner","nameLocation":"16787:6:86","nodeType":"VariableDeclaration","scope":23965,"src":"16779:14:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23938,"name":"address","nodeType":"ElementaryTypeName","src":"16779:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16778:16:86"},"returnParameters":{"id":23943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23942,"mutability":"mutable","name":"current","nameLocation":"16829:7:86","nodeType":"VariableDeclaration","scope":23965,"src":"16821:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23941,"name":"uint256","nodeType":"ElementaryTypeName","src":"16821:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16820:17:86"},"scope":24039,"src":"16760:191:86","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":23993,"nodeType":"Block","src":"17136:220:86","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":23973,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"17154:4:86","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20_$24039","typeString":"contract ERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC20_$24039","typeString":"contract ERC20"}],"id":23972,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17146:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23971,"name":"address","nodeType":"ElementaryTypeName","src":"17146:7:86","typeDescriptions":{}}},"id":23974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17146:13:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23975,"name":"_CACHED_THIS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23237,"src":"17163:12:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17146:29:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23977,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"17179:5:86","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":23978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17185:7:86","memberName":"chainid","nodeType":"MemberAccess","src":"17179:13:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23979,"name":"_CACHED_CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23235,"src":"17196:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17179:33:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17146:66:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23991,"nodeType":"Block","src":"17266:86:86","statements":[{"expression":{"arguments":[{"id":23986,"name":"_TYPE_HASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23231,"src":"17303:10:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":23987,"name":"_HASHED_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23239,"src":"17315:12:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":23988,"name":"_HASHED_VERSION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23241,"src":"17329:15:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":23985,"name":"_buildDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24022,"src":"17281:21:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32,bytes32) view returns (bytes32)"}},"id":23989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17281:64:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":23970,"id":23990,"nodeType":"Return","src":"17274:71:86"}]},"id":23992,"nodeType":"IfStatement","src":"17142:210:86","trueBody":{"id":23984,"nodeType":"Block","src":"17214:46:86","statements":[{"expression":{"id":23982,"name":"_CACHED_DOMAIN_SEPARATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23233,"src":"17229:24:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":23970,"id":23983,"nodeType":"Return","src":"17222:31:86"}]}}]},"documentation":{"id":23966,"nodeType":"StructuredDocumentation","src":"16955:116:86","text":" @dev Returns the domain separator for the current chain.\n @dev See {EIP712._buildDomainSeparator}"},"id":23994,"implemented":true,"kind":"function","modifiers":[],"name":"_domainSeparatorV4","nameLocation":"17083:18:86","nodeType":"FunctionDefinition","parameters":{"id":23967,"nodeType":"ParameterList","parameters":[],"src":"17101:2:86"},"returnParameters":{"id":23970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23969,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23994,"src":"17127:7:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23968,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17127:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"17126:9:86"},"scope":24039,"src":"17074:282:86","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":24021,"nodeType":"Block","src":"17600:102:86","statements":[{"expression":{"arguments":[{"arguments":[{"id":24009,"name":"typeHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23997,"src":"17634:8:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":24010,"name":"nameHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23999,"src":"17644:8:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":24011,"name":"versionHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24001,"src":"17654:11:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":24012,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"17667:5:86","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":24013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17673:7:86","memberName":"chainid","nodeType":"MemberAccess","src":"17667:13:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":24016,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"17690:4:86","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20_$24039","typeString":"contract ERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC20_$24039","typeString":"contract ERC20"}],"id":24015,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17682:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24014,"name":"address","nodeType":"ElementaryTypeName","src":"17682:7:86","typeDescriptions":{}}},"id":24017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17682:13:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24007,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"17623:3:86","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":24008,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17627:6:86","memberName":"encode","nodeType":"MemberAccess","src":"17623:10:86","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":24018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17623:73:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":24006,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"17613:9:86","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":24019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17613:84:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":24005,"id":24020,"nodeType":"Return","src":"17606:91:86"}]},"documentation":{"id":23995,"nodeType":"StructuredDocumentation","src":"17360:101:86","text":" @dev See {EIP712._buildDomainSeparator}. Made internal to allow usage in parent class."},"id":24022,"implemented":true,"kind":"function","modifiers":[],"name":"_buildDomainSeparator","nameLocation":"17473:21:86","nodeType":"FunctionDefinition","parameters":{"id":24002,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23997,"mutability":"mutable","name":"typeHash","nameLocation":"17508:8:86","nodeType":"VariableDeclaration","scope":24022,"src":"17500:16:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23996,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17500:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":23999,"mutability":"mutable","name":"nameHash","nameLocation":"17530:8:86","nodeType":"VariableDeclaration","scope":24022,"src":"17522:16:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23998,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17522:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":24001,"mutability":"mutable","name":"versionHash","nameLocation":"17552:11:86","nodeType":"VariableDeclaration","scope":24022,"src":"17544:19:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24000,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17544:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"17494:73:86"},"returnParameters":{"id":24005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24004,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24022,"src":"17591:7:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24003,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17591:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"17590:9:86"},"scope":24039,"src":"17464:238:86","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":24037,"nodeType":"Block","src":"18381:73:86","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":24032,"name":"_domainSeparatorV4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23994,"src":"18416:18:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":24033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18416:20:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":24034,"name":"structHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24025,"src":"18438:10:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":24030,"name":"ECDSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12176,"src":"18394:5:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ECDSA_$12176_$","typeString":"type(library ECDSA)"}},"id":24031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18400:15:86","memberName":"toTypedDataHash","nodeType":"MemberAccess","referencedDeclaration":12175,"src":"18394:21:86","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32) pure returns (bytes32)"}},"id":24035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18394:55:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":24029,"id":24036,"nodeType":"Return","src":"18387:62:86"}]},"documentation":{"id":24023,"nodeType":"StructuredDocumentation","src":"17706:586:86","text":" @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n function returns the hash of the fully encoded EIP712 message for this domain.\n This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n ```solidity\n bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n     keccak256(\"Mail(address to,string contents)\"),\n     mailTo,\n     keccak256(bytes(mailContents))\n )));\n address signer = ECDSA.recover(digest, signature);\n ```"},"id":24038,"implemented":true,"kind":"function","modifiers":[],"name":"_hashTypedDataV4","nameLocation":"18304:16:86","nodeType":"FunctionDefinition","parameters":{"id":24026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24025,"mutability":"mutable","name":"structHash","nameLocation":"18329:10:86","nodeType":"VariableDeclaration","scope":24038,"src":"18321:18:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24024,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18321:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"18320:20:86"},"returnParameters":{"id":24029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24028,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24038,"src":"18372:7:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24027,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18372:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"18371:9:86"},"scope":24039,"src":"18295:159:86","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":24040,"src":"2566:15890:86","usedErrors":[]}],"src":"32:18425:86"},"id":86},"contracts/core/connext/helpers/OwnerPausableUpgradeable.sol":{"ast":{"absolutePath":"contracts/core/connext/helpers/OwnerPausableUpgradeable.sol","exportedSymbols":{"OwnableUpgradeable":[8069],"OwnerPausableUpgradeable":[24094],"PausableUpgradeable":[8365]},"id":24095,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":24041,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:87"},{"absolutePath":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","id":24043,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24095,"sourceUnit":8070,"src":"64:101:87","symbolAliases":[{"foreign":{"id":24042,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8069,"src":"72:18:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol","id":24045,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24095,"sourceUnit":8366,"src":"166:105:87","symbolAliases":[{"foreign":{"id":24044,"name":"PausableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8365,"src":"174:19:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":24047,"name":"OwnableUpgradeable","nameLocations":["519:18:87"],"nodeType":"IdentifierPath","referencedDeclaration":8069,"src":"519:18:87"},"id":24048,"nodeType":"InheritanceSpecifier","src":"519:18:87"},{"baseName":{"id":24049,"name":"PausableUpgradeable","nameLocations":["539:19:87"],"nodeType":"IdentifierPath","referencedDeclaration":8365,"src":"539:19:87"},"id":24050,"nodeType":"InheritanceSpecifier","src":"539:19:87"}],"canonicalName":"OwnerPausableUpgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":24046,"nodeType":"StructuredDocumentation","src":"273:199:87","text":" @title OwnerPausable\n @notice An ownable contract allows the owner to pause and unpause the\n contract without a delay.\n @dev Only methods using the provided modifiers will be paused."},"fullyImplemented":true,"id":24094,"linearizedBaseContracts":[24094,8365,8069,9543,8238],"name":"OwnerPausableUpgradeable","nameLocation":"491:24:87","nodeType":"ContractDefinition","nodes":[{"body":{"id":24064,"nodeType":"Block","src":"665:102:87","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":24055,"name":"__Context_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9519,"src":"671:24:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":24056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"671:26:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24057,"nodeType":"ExpressionStatement","src":"671:26:87"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":24058,"name":"__Ownable_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7975,"src":"703:24:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":24059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"703:26:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24060,"nodeType":"ExpressionStatement","src":"703:26:87"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":24061,"name":"__Pausable_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8279,"src":"735:25:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":24062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"735:27:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24063,"nodeType":"ExpressionStatement","src":"735:27:87"}]},"id":24065,"implemented":true,"kind":"function","modifiers":[{"id":24053,"kind":"modifierInvocation","modifierName":{"id":24052,"name":"onlyInitializing","nameLocations":["648:16:87"],"nodeType":"IdentifierPath","referencedDeclaration":8183,"src":"648:16:87"},"nodeType":"ModifierInvocation","src":"648:16:87"}],"name":"__OwnerPausable_init","nameLocation":"616:20:87","nodeType":"FunctionDefinition","parameters":{"id":24051,"nodeType":"ParameterList","parameters":[],"src":"636:2:87"},"returnParameters":{"id":24054,"nodeType":"ParameterList","parameters":[],"src":"665:0:87"},"scope":24094,"src":"607:160:87","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":24076,"nodeType":"Block","src":"929:39:87","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24071,"name":"PausableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8365,"src":"935:19:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PausableUpgradeable_$8365_$","typeString":"type(contract PausableUpgradeable)"}},"id":24073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"955:6:87","memberName":"_pause","nodeType":"MemberAccess","referencedDeclaration":8343,"src":"935:26:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":24074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"935:28:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24075,"nodeType":"ExpressionStatement","src":"935:28:87"}]},"documentation":{"id":24066,"nodeType":"StructuredDocumentation","src":"822:68:87","text":" @notice Pause the contract. Revert if already paused."},"functionSelector":"8456cb59","id":24077,"implemented":true,"kind":"function","modifiers":[{"id":24069,"kind":"modifierInvocation","modifierName":{"id":24068,"name":"onlyOwner","nameLocations":["919:9:87"],"nodeType":"IdentifierPath","referencedDeclaration":7983,"src":"919:9:87"},"nodeType":"ModifierInvocation","src":"919:9:87"}],"name":"pause","nameLocation":"902:5:87","nodeType":"FunctionDefinition","parameters":{"id":24067,"nodeType":"ParameterList","parameters":[],"src":"907:2:87"},"returnParameters":{"id":24070,"nodeType":"ParameterList","parameters":[],"src":"929:0:87"},"scope":24094,"src":"893:75:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24088,"nodeType":"Block","src":"1085:41:87","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24083,"name":"PausableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8365,"src":"1091:19:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PausableUpgradeable_$8365_$","typeString":"type(contract PausableUpgradeable)"}},"id":24085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1111:8:87","memberName":"_unpause","nodeType":"MemberAccess","referencedDeclaration":8359,"src":"1091:28:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":24086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1091:30:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24087,"nodeType":"ExpressionStatement","src":"1091:30:87"}]},"documentation":{"id":24078,"nodeType":"StructuredDocumentation","src":"972:72:87","text":" @notice Unpause the contract. Revert if already unpaused."},"functionSelector":"3f4ba83a","id":24089,"implemented":true,"kind":"function","modifiers":[{"id":24081,"kind":"modifierInvocation","modifierName":{"id":24080,"name":"onlyOwner","nameLocations":["1075:9:87"],"nodeType":"IdentifierPath","referencedDeclaration":7983,"src":"1075:9:87"},"nodeType":"ModifierInvocation","src":"1075:9:87"}],"name":"unpause","nameLocation":"1056:7:87","nodeType":"FunctionDefinition","parameters":{"id":24079,"nodeType":"ParameterList","parameters":[],"src":"1063:2:87"},"returnParameters":{"id":24082,"nodeType":"ParameterList","parameters":[],"src":"1085:0:87"},"scope":24094,"src":"1047:79:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"constant":false,"id":24093,"mutability":"mutable","name":"__GAP","nameLocation":"1193:5:87","nodeType":"VariableDeclaration","scope":24094,"src":"1173:25:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage","typeString":"uint256[50]"},"typeName":{"baseType":{"id":24090,"name":"uint256","nodeType":"ElementaryTypeName","src":"1173:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24092,"length":{"hexValue":"3530","id":24091,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1181:2:87","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"50"},"nodeType":"ArrayTypeName","src":"1173:11:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage_ptr","typeString":"uint256[50]"}},"visibility":"private"}],"scope":24095,"src":"473:754:87","usedErrors":[]}],"src":"39:1189:87"},"id":87},"contracts/core/connext/helpers/PriceOracle.sol":{"ast":{"absolutePath":"contracts/core/connext/helpers/PriceOracle.sol","exportedSymbols":{"PriceOracle":[24111]},"id":24112,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":24096,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:88"},{"abstract":true,"baseContracts":[],"canonicalName":"PriceOracle","contractDependencies":[],"contractKind":"contract","fullyImplemented":false,"id":24111,"linearizedBaseContracts":[24111],"name":"PriceOracle","nameLocation":"82:11:88","nodeType":"ContractDefinition","nodes":[{"constant":true,"documentation":{"id":24097,"nodeType":"StructuredDocumentation","src":"98:74:88","text":"@notice Indicator that this is a PriceOracle contract (for inspection)"},"functionSelector":"66331bba","id":24100,"mutability":"constant","name":"isPriceOracle","nameLocation":"196:13:88","nodeType":"VariableDeclaration","scope":24111,"src":"175:41:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24098,"name":"bool","nodeType":"ElementaryTypeName","src":"175:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":{"hexValue":"74727565","id":24099,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"212:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"visibility":"public"},{"documentation":{"id":24101,"nodeType":"StructuredDocumentation","src":"221:277:88","text":" @notice Get the price of a token\n @param token The token to get the price of\n @return The asset price mantissa (scaled by 1e18).\n  Zero means the price is unavailable.\n @return The source of the price. enum (NA, DIRECT, CHAINLINK, DEX, V1_ORACLE)"},"functionSelector":"d02641a0","id":24110,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenPrice","nameLocation":"510:13:88","nodeType":"FunctionDefinition","parameters":{"id":24104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24103,"mutability":"mutable","name":"token","nameLocation":"532:5:88","nodeType":"VariableDeclaration","scope":24110,"src":"524:13:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24102,"name":"address","nodeType":"ElementaryTypeName","src":"524:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"523:15:88"},"returnParameters":{"id":24109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24106,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24110,"src":"570:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24105,"name":"uint256","nodeType":"ElementaryTypeName","src":"570:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24108,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24110,"src":"579:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24107,"name":"uint256","nodeType":"ElementaryTypeName","src":"579:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"569:18:88"},"scope":24111,"src":"501:87:88","stateMutability":"view","virtual":true,"visibility":"external"}],"scope":24112,"src":"64:526:88","usedErrors":[]}],"src":"39:552:88"},"id":88},"contracts/core/connext/helpers/RelayerProxy.sol":{"ast":{"absolutePath":"contracts/core/connext/helpers/RelayerProxy.sol","exportedSymbols":{"Address":[11484],"ExecuteArgs":[29365],"GelatoRelayFeeCollector":[48],"IConnext":[26846],"ISpokeConnector":[24154],"ProposedOwnable":[49928],"ReentrancyGuard":[10734],"RelayerProxy":[24709]},"id":24710,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":24113,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:89"},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":24115,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24710,"sourceUnit":11485,"src":"71:66:89","symbolAliases":[{"foreign":{"id":24114,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"79:7:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/security/ReentrancyGuard.sol","file":"@openzeppelin/contracts/security/ReentrancyGuard.sol","id":24117,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24710,"sourceUnit":10735,"src":"138:85:89","symbolAliases":[{"foreign":{"id":24116,"name":"ReentrancyGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10734,"src":"146:15:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol","file":"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol","id":24119,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24710,"sourceUnit":49,"src":"224:107:89","symbolAliases":[{"foreign":{"id":24118,"name":"GelatoRelayFeeCollector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48,"src":"232:23:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/ProposedOwnable.sol","file":"../../../shared/ProposedOwnable.sol","id":24121,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24710,"sourceUnit":49929,"src":"333:68:89","symbolAliases":[{"foreign":{"id":24120,"name":"ProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49928,"src":"341:15:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IConnext.sol","file":"../interfaces/IConnext.sol","id":24124,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24710,"sourceUnit":26847,"src":"402:65:89","symbolAliases":[{"foreign":{"id":24122,"name":"IConnext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26846,"src":"410:8:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":24123,"name":"ExecuteArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29365,"src":"420:11:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ISpokeConnector","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":24154,"linearizedBaseContracts":[24154],"name":"ISpokeConnector","nameLocation":"479:15:89","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ISpokeConnector.Proof","id":24133,"members":[{"constant":false,"id":24126,"mutability":"mutable","name":"message","nameLocation":"524:7:89","nodeType":"VariableDeclaration","scope":24133,"src":"518:13:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":24125,"name":"bytes","nodeType":"ElementaryTypeName","src":"518:5:89","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":24130,"mutability":"mutable","name":"path","nameLocation":"549:4:89","nodeType":"VariableDeclaration","scope":24133,"src":"537:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_storage_ptr","typeString":"bytes32[32]"},"typeName":{"baseType":{"id":24127,"name":"bytes32","nodeType":"ElementaryTypeName","src":"537:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":24129,"length":{"hexValue":"3332","id":24128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"545:2:89","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"nodeType":"ArrayTypeName","src":"537:11:89","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_storage_ptr","typeString":"bytes32[32]"}},"visibility":"internal"},{"constant":false,"id":24132,"mutability":"mutable","name":"index","nameLocation":"567:5:89","nodeType":"VariableDeclaration","scope":24133,"src":"559:13:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24131,"name":"uint256","nodeType":"ElementaryTypeName","src":"559:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Proof","nameLocation":"506:5:89","nodeType":"StructDefinition","scope":24154,"src":"499:78:89","visibility":"public"},{"functionSelector":"508a109b","id":24148,"implemented":false,"kind":"function","modifiers":[],"name":"proveAndProcess","nameLocation":"590:15:89","nodeType":"FunctionDefinition","parameters":{"id":24146,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24137,"mutability":"mutable","name":"_proofs","nameLocation":"628:7:89","nodeType":"VariableDeclaration","scope":24148,"src":"611:24:89","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Proof_$24133_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ISpokeConnector.Proof[]"},"typeName":{"baseType":{"id":24135,"nodeType":"UserDefinedTypeName","pathNode":{"id":24134,"name":"Proof","nameLocations":["611:5:89"],"nodeType":"IdentifierPath","referencedDeclaration":24133,"src":"611:5:89"},"referencedDeclaration":24133,"src":"611:5:89","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$24133_storage_ptr","typeString":"struct ISpokeConnector.Proof"}},"id":24136,"nodeType":"ArrayTypeName","src":"611:7:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Proof_$24133_storage_$dyn_storage_ptr","typeString":"struct ISpokeConnector.Proof[]"}},"visibility":"internal"},{"constant":false,"id":24139,"mutability":"mutable","name":"_aggregateRoot","nameLocation":"649:14:89","nodeType":"VariableDeclaration","scope":24148,"src":"641:22:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24138,"name":"bytes32","nodeType":"ElementaryTypeName","src":"641:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":24143,"mutability":"mutable","name":"_aggregatePath","nameLocation":"690:14:89","nodeType":"VariableDeclaration","scope":24148,"src":"669:35:89","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_calldata_ptr","typeString":"bytes32[32]"},"typeName":{"baseType":{"id":24140,"name":"bytes32","nodeType":"ElementaryTypeName","src":"669:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":24142,"length":{"hexValue":"3332","id":24141,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"677:2:89","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"nodeType":"ArrayTypeName","src":"669:11:89","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_storage_ptr","typeString":"bytes32[32]"}},"visibility":"internal"},{"constant":false,"id":24145,"mutability":"mutable","name":"_aggregateIndex","nameLocation":"718:15:89","nodeType":"VariableDeclaration","scope":24148,"src":"710:23:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24144,"name":"uint256","nodeType":"ElementaryTypeName","src":"710:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"605:132:89"},"returnParameters":{"id":24147,"nodeType":"ParameterList","parameters":[],"src":"746:0:89"},"scope":24154,"src":"581:166:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"2bb1ae7c","id":24153,"implemented":false,"kind":"function","modifiers":[],"name":"send","nameLocation":"760:4:89","nodeType":"FunctionDefinition","parameters":{"id":24151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24150,"mutability":"mutable","name":"_encodedData","nameLocation":"778:12:89","nodeType":"VariableDeclaration","scope":24153,"src":"765:25:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":24149,"name":"bytes","nodeType":"ElementaryTypeName","src":"765:5:89","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"764:27:89"},"returnParameters":{"id":24152,"nodeType":"ParameterList","parameters":[],"src":"808:0:89"},"scope":24154,"src":"751:58:89","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":24710,"src":"469:342:89","usedErrors":[]},{"abstract":false,"baseContracts":[{"baseName":{"id":24156,"name":"ProposedOwnable","nameLocations":["1142:15:89"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"1142:15:89"},"id":24157,"nodeType":"InheritanceSpecifier","src":"1142:15:89"},{"baseName":{"id":24158,"name":"ReentrancyGuard","nameLocations":["1159:15:89"],"nodeType":"IdentifierPath","referencedDeclaration":10734,"src":"1159:15:89"},"id":24159,"nodeType":"InheritanceSpecifier","src":"1159:15:89"},{"baseName":{"id":24160,"name":"GelatoRelayFeeCollector","nameLocations":["1176:23:89"],"nodeType":"IdentifierPath","referencedDeclaration":48,"src":"1176:23:89"},"id":24161,"nodeType":"InheritanceSpecifier","src":"1176:23:89"}],"canonicalName":"RelayerProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":24155,"nodeType":"StructuredDocumentation","src":"813:303:89","text":" @title RelayerProxy\n @author Connext Labs, Inc.\n @notice This is a temporary contract that wraps fast path functions in the Connext interface so that they can be called by\n Gelato's legacy relayer network. The contract stores native assets and pays them to the relayer on function call."},"fullyImplemented":true,"id":24709,"linearizedBaseContracts":[24709,48,77,10734,49928,50003],"name":"RelayerProxy","nameLocation":"1126:12:89","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"6eba787f","id":24163,"mutability":"mutable","name":"gelatoRelayer","nameLocation":"1261:13:89","nodeType":"VariableDeclaration","scope":24709,"src":"1246:28:89","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24162,"name":"address","nodeType":"ElementaryTypeName","src":"1246:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"c415b95c","id":24165,"mutability":"mutable","name":"feeCollector","nameLocation":"1293:12:89","nodeType":"VariableDeclaration","scope":24709,"src":"1278:27:89","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24164,"name":"address","nodeType":"ElementaryTypeName","src":"1278:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"de4b0548","id":24168,"mutability":"mutable","name":"connext","nameLocation":"1325:7:89","nodeType":"VariableDeclaration","scope":24709,"src":"1309:23:89","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IConnext_$26846","typeString":"contract IConnext"},"typeName":{"id":24167,"nodeType":"UserDefinedTypeName","pathNode":{"id":24166,"name":"IConnext","nameLocations":["1309:8:89"],"nodeType":"IdentifierPath","referencedDeclaration":26846,"src":"1309:8:89"},"referencedDeclaration":26846,"src":"1309:8:89","typeDescriptions":{"typeIdentifier":"t_contract$_IConnext_$26846","typeString":"contract IConnext"}},"visibility":"public"},{"constant":false,"functionSelector":"9cadce00","id":24171,"mutability":"mutable","name":"spokeConnector","nameLocation":"1359:14:89","nodeType":"VariableDeclaration","scope":24709,"src":"1336:37:89","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ISpokeConnector_$24154","typeString":"contract ISpokeConnector"},"typeName":{"id":24170,"nodeType":"UserDefinedTypeName","pathNode":{"id":24169,"name":"ISpokeConnector","nameLocations":["1336:15:89"],"nodeType":"IdentifierPath","referencedDeclaration":24154,"src":"1336:15:89"},"referencedDeclaration":24154,"src":"1336:15:89","typeDescriptions":{"typeIdentifier":"t_contract$_ISpokeConnector_$24154","typeString":"contract ISpokeConnector"}},"visibility":"public"},{"constant":false,"functionSelector":"2f55b98d","id":24175,"mutability":"mutable","name":"allowedRelayer","nameLocation":"1410:14:89","nodeType":"VariableDeclaration","scope":24709,"src":"1378:46:89","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":24174,"keyType":{"id":24172,"name":"address","nodeType":"ElementaryTypeName","src":"1386:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1378:24:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueType":{"id":24173,"name":"bool","nodeType":"ElementaryTypeName","src":"1397:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"body":{"id":24186,"nodeType":"Block","src":"1493:65:89","statements":[{"expression":{"arguments":[{"baseExpression":{"id":24178,"name":"allowedRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24175,"src":"1507:14:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24181,"indexExpression":{"expression":{"id":24179,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1522:3:89","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1526:6:89","memberName":"sender","nodeType":"MemberAccess","src":"1522:10:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1507:26:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2172656c61796572","id":24182,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1535:10:89","typeDescriptions":{"typeIdentifier":"t_stringliteral_8e7e8fcd400a5d12d3bcb2f74ef1d253cc1ee9f80325b4481ab4dffdf753068f","typeString":"literal_string \"!relayer\""},"value":"!relayer"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8e7e8fcd400a5d12d3bcb2f74ef1d253cc1ee9f80325b4481ab4dffdf753068f","typeString":"literal_string \"!relayer\""}],"id":24177,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1499:7:89","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1499:47:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24184,"nodeType":"ExpressionStatement","src":"1499:47:89"},{"id":24185,"nodeType":"PlaceholderStatement","src":"1552:1:89"}]},"id":24187,"name":"onlyRelayer","nameLocation":"1479:11:89","nodeType":"ModifierDefinition","parameters":{"id":24176,"nodeType":"ParameterList","parameters":[],"src":"1490:2:89"},"src":"1470:88:89","virtual":false,"visibility":"internal"},{"body":{"id":24202,"nodeType":"Block","src":"1602:56:89","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":24197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24192,"name":"_input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24189,"src":"1616:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":24195,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1634:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":24194,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1626:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24193,"name":"address","nodeType":"ElementaryTypeName","src":"1626:7:89","typeDescriptions":{}}},"id":24196,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1626:10:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1616:20:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"656d707479","id":24198,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1638:7:89","typeDescriptions":{"typeIdentifier":"t_stringliteral_61fc3f77ebc090777f567969ad9823cf6334ab888acb385ca72668ec5adbde80","typeString":"literal_string \"empty\""},"value":"empty"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_61fc3f77ebc090777f567969ad9823cf6334ab888acb385ca72668ec5adbde80","typeString":"literal_string \"empty\""}],"id":24191,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1608:7:89","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1608:38:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24200,"nodeType":"ExpressionStatement","src":"1608:38:89"},{"id":24201,"nodeType":"PlaceholderStatement","src":"1652:1:89"}]},"id":24203,"name":"definedAddress","nameLocation":"1571:14:89","nodeType":"ModifierDefinition","parameters":{"id":24190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24189,"mutability":"mutable","name":"_input","nameLocation":"1594:6:89","nodeType":"VariableDeclaration","scope":24203,"src":"1586:14:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24188,"name":"address","nodeType":"ElementaryTypeName","src":"1586:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1585:16:89"},"src":"1562:96:89","virtual":false,"visibility":"internal"},{"anonymous":false,"documentation":{"id":24204,"nodeType":"StructuredDocumentation","src":"1701:155:89","text":" @notice Emitted when funds added to the contract\n @param amount The amount added\n @param balance The updated balance of the contract"},"eventSelector":"063d07ee72a7483b8e07ca09054bb686775c5c030f945dde3823a5257a0a93eb","id":24210,"name":"FundsReceived","nameLocation":"1865:13:89","nodeType":"EventDefinition","parameters":{"id":24209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24206,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1887:6:89","nodeType":"VariableDeclaration","scope":24210,"src":"1879:14:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24205,"name":"uint256","nodeType":"ElementaryTypeName","src":"1879:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24208,"indexed":false,"mutability":"mutable","name":"balance","nameLocation":"1903:7:89","nodeType":"VariableDeclaration","scope":24210,"src":"1895:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24207,"name":"uint256","nodeType":"ElementaryTypeName","src":"1895:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1878:33:89"},"src":"1859:53:89"},{"anonymous":false,"documentation":{"id":24211,"nodeType":"StructuredDocumentation","src":"1916:170:89","text":" @notice Emitted when funds removed from the contract by admin\n @param amount The amount removed\n @param balance The updated balance of the contract"},"eventSelector":"9826a73d0fd7186bda6a15195ac17571869cab151bfe9a8fed3f9407fffe5b18","id":24217,"name":"FundsDeducted","nameLocation":"2095:13:89","nodeType":"EventDefinition","parameters":{"id":24216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24213,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2117:6:89","nodeType":"VariableDeclaration","scope":24217,"src":"2109:14:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24212,"name":"uint256","nodeType":"ElementaryTypeName","src":"2109:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24215,"indexed":false,"mutability":"mutable","name":"balance","nameLocation":"2133:7:89","nodeType":"VariableDeclaration","scope":24217,"src":"2125:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24214,"name":"uint256","nodeType":"ElementaryTypeName","src":"2125:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2108:33:89"},"src":"2089:53:89"},{"anonymous":false,"documentation":{"id":24218,"nodeType":"StructuredDocumentation","src":"2146:122:89","text":" @notice Emitted when a new relayer is allowlisted by admin\n @param relayer Address of the added relayer"},"eventSelector":"03580ee9f53a62b7cb409a2cb56f9be87747dd15017afc5cef6eef321e4fb2c5","id":24222,"name":"RelayerAdded","nameLocation":"2277:12:89","nodeType":"EventDefinition","parameters":{"id":24221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24220,"indexed":false,"mutability":"mutable","name":"relayer","nameLocation":"2298:7:89","nodeType":"VariableDeclaration","scope":24222,"src":"2290:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24219,"name":"address","nodeType":"ElementaryTypeName","src":"2290:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2289:17:89"},"src":"2271:36:89"},{"anonymous":false,"documentation":{"id":24223,"nodeType":"StructuredDocumentation","src":"2311:131:89","text":" @notice Emitted when a relayer is removed from allowlist by admin\n @param relayer Address of the removed relayer"},"eventSelector":"10e1f7ce9fd7d1b90a66d13a2ab3cb8dd7f29f3f8d520b143b063ccfbab6906b","id":24227,"name":"RelayerRemoved","nameLocation":"2451:14:89","nodeType":"EventDefinition","parameters":{"id":24226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24225,"indexed":false,"mutability":"mutable","name":"relayer","nameLocation":"2474:7:89","nodeType":"VariableDeclaration","scope":24227,"src":"2466:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24224,"name":"address","nodeType":"ElementaryTypeName","src":"2466:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2465:17:89"},"src":"2445:38:89"},{"anonymous":false,"documentation":{"id":24228,"nodeType":"StructuredDocumentation","src":"2487:193:89","text":" @notice Emitted when Connext contract address is updated by admin\n @param updated New Connext address in the contract\n @param previous Old Connext address in the contract"},"eventSelector":"87539ad41983c0ecff8f321db8edf4dd9e830593562770bdacdda085b83e3bb2","id":24234,"name":"ConnextChanged","nameLocation":"2689:14:89","nodeType":"EventDefinition","parameters":{"id":24233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24230,"indexed":false,"mutability":"mutable","name":"updated","nameLocation":"2712:7:89","nodeType":"VariableDeclaration","scope":24234,"src":"2704:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24229,"name":"address","nodeType":"ElementaryTypeName","src":"2704:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24232,"indexed":false,"mutability":"mutable","name":"previous","nameLocation":"2729:8:89","nodeType":"VariableDeclaration","scope":24234,"src":"2721:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24231,"name":"address","nodeType":"ElementaryTypeName","src":"2721:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2703:35:89"},"src":"2683:56:89"},{"anonymous":false,"documentation":{"id":24235,"nodeType":"StructuredDocumentation","src":"2743:214:89","text":" @notice Emitted when SpokeConnector contract address is updated by admin\n @param updated New SpokeConnector address in the contract\n @param previous Old SpokeConnector address in the contract"},"eventSelector":"66948d99d8431a8416af2202bc301823b7cdd87beb9bddaa274aedac0611a5fd","id":24241,"name":"SpokeConnectorChanged","nameLocation":"2966:21:89","nodeType":"EventDefinition","parameters":{"id":24240,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24237,"indexed":false,"mutability":"mutable","name":"updated","nameLocation":"2996:7:89","nodeType":"VariableDeclaration","scope":24241,"src":"2988:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24236,"name":"address","nodeType":"ElementaryTypeName","src":"2988:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24239,"indexed":false,"mutability":"mutable","name":"previous","nameLocation":"3013:8:89","nodeType":"VariableDeclaration","scope":24241,"src":"3005:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24238,"name":"address","nodeType":"ElementaryTypeName","src":"3005:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2987:35:89"},"src":"2960:63:89"},{"anonymous":false,"documentation":{"id":24242,"nodeType":"StructuredDocumentation","src":"3027:202:89","text":" @notice Emitted when GelatoRelayer address is updated by admin\n @param updated New GelatoRelayer address in the contract\n @param previous Old Gelatorelayer address in the contract"},"eventSelector":"5db4a067a1f787c3269642464a2a1560868b50b0873e7dec83939ae2359f6128","id":24248,"name":"GelatoRelayerChanged","nameLocation":"3238:20:89","nodeType":"EventDefinition","parameters":{"id":24247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24244,"indexed":false,"mutability":"mutable","name":"updated","nameLocation":"3267:7:89","nodeType":"VariableDeclaration","scope":24248,"src":"3259:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24243,"name":"address","nodeType":"ElementaryTypeName","src":"3259:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24246,"indexed":false,"mutability":"mutable","name":"previous","nameLocation":"3284:8:89","nodeType":"VariableDeclaration","scope":24248,"src":"3276:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24245,"name":"address","nodeType":"ElementaryTypeName","src":"3276:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3258:35:89"},"src":"3232:62:89"},{"anonymous":false,"documentation":{"id":24249,"nodeType":"StructuredDocumentation","src":"3298:220:89","text":" @notice Emitted when FeeCollectorChanged address is updated by admin\n @param updated New FeeCollectorChanged address in the contract\n @param previous Old FeeCollectorChanged address in the contract"},"eventSelector":"649c5e3d0ed183894196148e193af316452b0037e77d2ff0fef23b7dc722bed0","id":24255,"name":"FeeCollectorChanged","nameLocation":"3527:19:89","nodeType":"EventDefinition","parameters":{"id":24254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24251,"indexed":false,"mutability":"mutable","name":"updated","nameLocation":"3555:7:89","nodeType":"VariableDeclaration","scope":24255,"src":"3547:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24250,"name":"address","nodeType":"ElementaryTypeName","src":"3547:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24253,"indexed":false,"mutability":"mutable","name":"previous","nameLocation":"3572:8:89","nodeType":"VariableDeclaration","scope":24255,"src":"3564:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24252,"name":"address","nodeType":"ElementaryTypeName","src":"3564:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3546:35:89"},"src":"3521:61:89"},{"body":{"id":24294,"nodeType":"Block","src":"4133:210:89","statements":[{"expression":{"arguments":[{"expression":{"id":24270,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4149:3:89","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4153:6:89","memberName":"sender","nodeType":"MemberAccess","src":"4149:10:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24269,"name":"_setOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49908,"src":"4139:9:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":24272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4139:21:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24273,"nodeType":"ExpressionStatement","src":"4139:21:89"},{"expression":{"arguments":[{"id":24275,"name":"_connext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24258,"src":"4178:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24274,"name":"_setConnext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24652,"src":"4166:11:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":24276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4166:21:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24277,"nodeType":"ExpressionStatement","src":"4166:21:89"},{"expression":{"arguments":[{"id":24279,"name":"_spokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24260,"src":"4212:15:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24278,"name":"_setSpokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24672,"src":"4193:18:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":24280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4193:35:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24281,"nodeType":"ExpressionStatement","src":"4193:35:89"},{"expression":{"arguments":[{"id":24283,"name":"_gelatoRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24262,"src":"4252:14:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24282,"name":"_setGelatoRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24690,"src":"4234:17:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":24284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4234:33:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24285,"nodeType":"ExpressionStatement","src":"4234:33:89"},{"expression":{"arguments":[{"id":24287,"name":"_feeCollector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24264,"src":"4290:13:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24286,"name":"_setFeeCollector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24708,"src":"4273:16:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":24288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4273:31:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24289,"nodeType":"ExpressionStatement","src":"4273:31:89"},{"expression":{"arguments":[{"id":24291,"name":"_gelatoRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24262,"src":"4323:14:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24290,"name":"_addRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24609,"src":"4311:11:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":24292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4311:27:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24293,"nodeType":"ExpressionStatement","src":"4311:27:89"}]},"documentation":{"id":24256,"nodeType":"StructuredDocumentation","src":"3630:360:89","text":" @notice Creates a new RelayerProxy instance.\n @param _connext The address of the Connext on this domain.\n @param _spokeConnector The address of the SpokeConnector on this domain.\n @param _gelatoRelayer The address of the Gelato relayer on this domain.\n @param _feeCollector The address of the Gelato Fee Collector on this domain."},"id":24295,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":24267,"kind":"baseConstructorSpecifier","modifierName":{"id":24266,"name":"ProposedOwnable","nameLocations":["4115:15:89"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"4115:15:89"},"nodeType":"ModifierInvocation","src":"4115:17:89"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24258,"mutability":"mutable","name":"_connext","nameLocation":"4018:8:89","nodeType":"VariableDeclaration","scope":24295,"src":"4010:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24257,"name":"address","nodeType":"ElementaryTypeName","src":"4010:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24260,"mutability":"mutable","name":"_spokeConnector","nameLocation":"4040:15:89","nodeType":"VariableDeclaration","scope":24295,"src":"4032:23:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24259,"name":"address","nodeType":"ElementaryTypeName","src":"4032:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24262,"mutability":"mutable","name":"_gelatoRelayer","nameLocation":"4069:14:89","nodeType":"VariableDeclaration","scope":24295,"src":"4061:22:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24261,"name":"address","nodeType":"ElementaryTypeName","src":"4061:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24264,"mutability":"mutable","name":"_feeCollector","nameLocation":"4097:13:89","nodeType":"VariableDeclaration","scope":24295,"src":"4089:21:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24263,"name":"address","nodeType":"ElementaryTypeName","src":"4089:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4004:110:89"},"returnParameters":{"id":24268,"nodeType":"ParameterList","parameters":[],"src":"4133:0:89"},"scope":24709,"src":"3993:350:89","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":24310,"nodeType":"Block","src":"4610:32:89","statements":[{"expression":{"arguments":[{"id":24307,"name":"_relayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24298,"src":"4628:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24306,"name":"_addRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24609,"src":"4616:11:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":24308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4616:21:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24309,"nodeType":"ExpressionStatement","src":"4616:21:89"}]},"documentation":{"id":24296,"nodeType":"StructuredDocumentation","src":"4395:130:89","text":" @notice Adds a relayer address to the allowed relayers mapping.\n @param _relayer - Relayer address to add."},"functionSelector":"dd39f00d","id":24311,"implemented":true,"kind":"function","modifiers":[{"id":24301,"kind":"modifierInvocation","modifierName":{"id":24300,"name":"onlyOwner","nameLocations":["4575:9:89"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"4575:9:89"},"nodeType":"ModifierInvocation","src":"4575:9:89"},{"arguments":[{"id":24303,"name":"_relayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24298,"src":"4600:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":24304,"kind":"modifierInvocation","modifierName":{"id":24302,"name":"definedAddress","nameLocations":["4585:14:89"],"nodeType":"IdentifierPath","referencedDeclaration":24203,"src":"4585:14:89"},"nodeType":"ModifierInvocation","src":"4585:24:89"}],"name":"addRelayer","nameLocation":"4537:10:89","nodeType":"FunctionDefinition","parameters":{"id":24299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24298,"mutability":"mutable","name":"_relayer","nameLocation":"4556:8:89","nodeType":"VariableDeclaration","scope":24311,"src":"4548:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24297,"name":"address","nodeType":"ElementaryTypeName","src":"4548:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4547:18:89"},"returnParameters":{"id":24305,"nodeType":"ParameterList","parameters":[],"src":"4610:0:89"},"scope":24709,"src":"4528:114:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24326,"nodeType":"Block","src":"4872:35:89","statements":[{"expression":{"arguments":[{"id":24323,"name":"_relayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24314,"src":"4893:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24322,"name":"_removeRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24632,"src":"4878:14:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":24324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4878:24:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24325,"nodeType":"ExpressionStatement","src":"4878:24:89"}]},"documentation":{"id":24312,"nodeType":"StructuredDocumentation","src":"4646:138:89","text":" @notice Removes a relayer address from the allowed relayers mapping.\n @param _relayer - Relayer address to remove."},"functionSelector":"60f0a5ac","id":24327,"implemented":true,"kind":"function","modifiers":[{"id":24317,"kind":"modifierInvocation","modifierName":{"id":24316,"name":"onlyOwner","nameLocations":["4837:9:89"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"4837:9:89"},"nodeType":"ModifierInvocation","src":"4837:9:89"},{"arguments":[{"id":24319,"name":"_relayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24314,"src":"4862:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":24320,"kind":"modifierInvocation","modifierName":{"id":24318,"name":"definedAddress","nameLocations":["4847:14:89"],"nodeType":"IdentifierPath","referencedDeclaration":24203,"src":"4847:14:89"},"nodeType":"ModifierInvocation","src":"4847:24:89"}],"name":"removeRelayer","nameLocation":"4796:13:89","nodeType":"FunctionDefinition","parameters":{"id":24315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24314,"mutability":"mutable","name":"_relayer","nameLocation":"4818:8:89","nodeType":"VariableDeclaration","scope":24327,"src":"4810:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24313,"name":"address","nodeType":"ElementaryTypeName","src":"4810:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4809:18:89"},"returnParameters":{"id":24321,"nodeType":"ParameterList","parameters":[],"src":"4872:0:89"},"scope":24709,"src":"4787:120:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24342,"nodeType":"Block","src":"5113:32:89","statements":[{"expression":{"arguments":[{"id":24339,"name":"_connext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24330,"src":"5131:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24338,"name":"_setConnext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24652,"src":"5119:11:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":24340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5119:21:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24341,"nodeType":"ExpressionStatement","src":"5119:21:89"}]},"documentation":{"id":24328,"nodeType":"StructuredDocumentation","src":"4911:117:89","text":" @notice Updates the Connext address on this contract.\n @param _connext - New Connext address."},"functionSelector":"4d6f2013","id":24343,"implemented":true,"kind":"function","modifiers":[{"id":24333,"kind":"modifierInvocation","modifierName":{"id":24332,"name":"onlyOwner","nameLocations":["5078:9:89"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"5078:9:89"},"nodeType":"ModifierInvocation","src":"5078:9:89"},{"arguments":[{"id":24335,"name":"_connext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24330,"src":"5103:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":24336,"kind":"modifierInvocation","modifierName":{"id":24334,"name":"definedAddress","nameLocations":["5088:14:89"],"nodeType":"IdentifierPath","referencedDeclaration":24203,"src":"5088:14:89"},"nodeType":"ModifierInvocation","src":"5088:24:89"}],"name":"setConnext","nameLocation":"5040:10:89","nodeType":"FunctionDefinition","parameters":{"id":24331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24330,"mutability":"mutable","name":"_connext","nameLocation":"5059:8:89","nodeType":"VariableDeclaration","scope":24343,"src":"5051:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24329,"name":"address","nodeType":"ElementaryTypeName","src":"5051:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5050:18:89"},"returnParameters":{"id":24337,"nodeType":"ParameterList","parameters":[],"src":"5113:0:89"},"scope":24709,"src":"5031:114:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24358,"nodeType":"Block","src":"5393:46:89","statements":[{"expression":{"arguments":[{"id":24355,"name":"_spokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24346,"src":"5418:15:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24354,"name":"_setSpokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24672,"src":"5399:18:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":24356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5399:35:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24357,"nodeType":"ExpressionStatement","src":"5399:35:89"}]},"documentation":{"id":24344,"nodeType":"StructuredDocumentation","src":"5149:138:89","text":" @notice Updates the SpokeConnector address on this contract.\n @param _spokeConnector - New SpokeConnector address."},"functionSelector":"9f645a03","id":24359,"implemented":true,"kind":"function","modifiers":[{"id":24349,"kind":"modifierInvocation","modifierName":{"id":24348,"name":"onlyOwner","nameLocations":["5351:9:89"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"5351:9:89"},"nodeType":"ModifierInvocation","src":"5351:9:89"},{"arguments":[{"id":24351,"name":"_spokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24346,"src":"5376:15:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":24352,"kind":"modifierInvocation","modifierName":{"id":24350,"name":"definedAddress","nameLocations":["5361:14:89"],"nodeType":"IdentifierPath","referencedDeclaration":24203,"src":"5361:14:89"},"nodeType":"ModifierInvocation","src":"5361:31:89"}],"name":"setSpokeConnector","nameLocation":"5299:17:89","nodeType":"FunctionDefinition","parameters":{"id":24347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24346,"mutability":"mutable","name":"_spokeConnector","nameLocation":"5325:15:89","nodeType":"VariableDeclaration","scope":24359,"src":"5317:23:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24345,"name":"address","nodeType":"ElementaryTypeName","src":"5317:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5316:25:89"},"returnParameters":{"id":24353,"nodeType":"ParameterList","parameters":[],"src":"5393:0:89"},"scope":24709,"src":"5290:149:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24374,"nodeType":"Block","src":"5683:44:89","statements":[{"expression":{"arguments":[{"id":24371,"name":"_gelatoRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24362,"src":"5707:14:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24370,"name":"_setGelatoRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24690,"src":"5689:17:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":24372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5689:33:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24373,"nodeType":"ExpressionStatement","src":"5689:33:89"}]},"documentation":{"id":24360,"nodeType":"StructuredDocumentation","src":"5443:137:89","text":" @notice Updates the Gelato relayer address on this contract.\n @param _gelatoRelayer - New Gelato relayer address."},"functionSelector":"5e21966a","id":24375,"implemented":true,"kind":"function","modifiers":[{"id":24365,"kind":"modifierInvocation","modifierName":{"id":24364,"name":"onlyOwner","nameLocations":["5642:9:89"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"5642:9:89"},"nodeType":"ModifierInvocation","src":"5642:9:89"},{"arguments":[{"id":24367,"name":"_gelatoRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24362,"src":"5667:14:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":24368,"kind":"modifierInvocation","modifierName":{"id":24366,"name":"definedAddress","nameLocations":["5652:14:89"],"nodeType":"IdentifierPath","referencedDeclaration":24203,"src":"5652:14:89"},"nodeType":"ModifierInvocation","src":"5652:30:89"}],"name":"setGelatoRelayer","nameLocation":"5592:16:89","nodeType":"FunctionDefinition","parameters":{"id":24363,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24362,"mutability":"mutable","name":"_gelatoRelayer","nameLocation":"5617:14:89","nodeType":"VariableDeclaration","scope":24375,"src":"5609:22:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24361,"name":"address","nodeType":"ElementaryTypeName","src":"5609:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5608:24:89"},"returnParameters":{"id":24369,"nodeType":"ParameterList","parameters":[],"src":"5683:0:89"},"scope":24709,"src":"5583:144:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24390,"nodeType":"Block","src":"5979:42:89","statements":[{"expression":{"arguments":[{"id":24387,"name":"_feeCollector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24378,"src":"6002:13:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24386,"name":"_setFeeCollector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24708,"src":"5985:16:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":24388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5985:31:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24389,"nodeType":"ExpressionStatement","src":"5985:31:89"}]},"documentation":{"id":24376,"nodeType":"StructuredDocumentation","src":"5731:148:89","text":" @notice Updates the Gelato Fee Collector address on this contract.\n @param _feeCollector - New Gelato Fee Collector address."},"functionSelector":"a42dce80","id":24391,"implemented":true,"kind":"function","modifiers":[{"id":24381,"kind":"modifierInvocation","modifierName":{"id":24380,"name":"onlyOwner","nameLocations":["5939:9:89"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"5939:9:89"},"nodeType":"ModifierInvocation","src":"5939:9:89"},{"arguments":[{"id":24383,"name":"_feeCollector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24378,"src":"5964:13:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":24384,"kind":"modifierInvocation","modifierName":{"id":24382,"name":"definedAddress","nameLocations":["5949:14:89"],"nodeType":"IdentifierPath","referencedDeclaration":24203,"src":"5949:14:89"},"nodeType":"ModifierInvocation","src":"5949:29:89"}],"name":"setFeeCollector","nameLocation":"5891:15:89","nodeType":"FunctionDefinition","parameters":{"id":24379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24378,"mutability":"mutable","name":"_feeCollector","nameLocation":"5915:13:89","nodeType":"VariableDeclaration","scope":24391,"src":"5907:21:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24377,"name":"address","nodeType":"ElementaryTypeName","src":"5907:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5906:23:89"},"returnParameters":{"id":24385,"nodeType":"ParameterList","parameters":[],"src":"5979:0:89"},"scope":24709,"src":"5882:139:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24427,"nodeType":"Block","src":"6161:159:89","statements":[{"assignments":[24400],"declarations":[{"constant":false,"id":24400,"mutability":"mutable","name":"balance","nameLocation":"6175:7:89","nodeType":"VariableDeclaration","scope":24427,"src":"6167:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24399,"name":"uint256","nodeType":"ElementaryTypeName","src":"6167:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24406,"initialValue":{"expression":{"arguments":[{"id":24403,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6193:4:89","typeDescriptions":{"typeIdentifier":"t_contract$_RelayerProxy_$24709","typeString":"contract RelayerProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RelayerProxy_$24709","typeString":"contract RelayerProxy"}],"id":24402,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6185:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24401,"name":"address","nodeType":"ElementaryTypeName","src":"6185:7:89","typeDescriptions":{}}},"id":24404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6185:13:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":24405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6199:7:89","memberName":"balance","nodeType":"MemberAccess","src":"6185:21:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6167:39:89"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":24412,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6238:3:89","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6242:6:89","memberName":"sender","nodeType":"MemberAccess","src":"6238:10:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24411,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6230:8:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":24410,"name":"address","nodeType":"ElementaryTypeName","src":"6230:8:89","stateMutability":"payable","typeDescriptions":{}}},"id":24414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6230:19:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":24415,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24400,"src":"6251:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24407,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"6212:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11484_$","typeString":"type(library Address)"}},"id":24409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6220:9:89","memberName":"sendValue","nodeType":"MemberAccess","referencedDeclaration":11206,"src":"6212:17:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$","typeString":"function (address payable,uint256)"}},"id":24416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6212:47:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24417,"nodeType":"ExpressionStatement","src":"6212:47:89"},{"eventCall":{"arguments":[{"id":24419,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24400,"src":"6284:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"arguments":[{"id":24422,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6301:4:89","typeDescriptions":{"typeIdentifier":"t_contract$_RelayerProxy_$24709","typeString":"contract RelayerProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RelayerProxy_$24709","typeString":"contract RelayerProxy"}],"id":24421,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6293:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24420,"name":"address","nodeType":"ElementaryTypeName","src":"6293:7:89","typeDescriptions":{}}},"id":24423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6293:13:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":24424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6307:7:89","memberName":"balance","nodeType":"MemberAccess","src":"6293:21:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24418,"name":"FundsDeducted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24217,"src":"6270:13:89","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":24425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6270:45:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24426,"nodeType":"EmitStatement","src":"6265:50:89"}]},"documentation":{"id":24392,"nodeType":"StructuredDocumentation","src":"6025:81:89","text":" @notice Withdraws all funds stored on this contract to msg.sender."},"functionSelector":"3ccfd60b","id":24428,"implemented":true,"kind":"function","modifiers":[{"id":24395,"kind":"modifierInvocation","modifierName":{"id":24394,"name":"onlyOwner","nameLocations":["6138:9:89"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"6138:9:89"},"nodeType":"ModifierInvocation","src":"6138:9:89"},{"id":24397,"kind":"modifierInvocation","modifierName":{"id":24396,"name":"nonReentrant","nameLocations":["6148:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":10710,"src":"6148:12:89"},"nodeType":"ModifierInvocation","src":"6148:12:89"}],"name":"withdraw","nameLocation":"6118:8:89","nodeType":"FunctionDefinition","parameters":{"id":24393,"nodeType":"ParameterList","parameters":[],"src":"6126:2:89"},"returnParameters":{"id":24398,"nodeType":"ParameterList","parameters":[],"src":"6161:0:89"},"scope":24709,"src":"6109:211:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24454,"nodeType":"Block","src":"6937:76:89","statements":[{"expression":{"id":24448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24443,"name":"transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24441,"src":"6943:10:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":24446,"name":"_args","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24432,"src":"6972:5:89","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs calldata"}],"expression":{"id":24444,"name":"connext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24168,"src":"6956:7:89","typeDescriptions":{"typeIdentifier":"t_contract$_IConnext_$26846","typeString":"contract IConnext"}},"id":24445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6964:7:89","memberName":"execute","nodeType":"MemberAccess","referencedDeclaration":26205,"src":"6956:15:89","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_ExecuteArgs_$29365_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct ExecuteArgs memory) external returns (bytes32)"}},"id":24447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6956:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"6943:35:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":24449,"nodeType":"ExpressionStatement","src":"6943:35:89"},{"expression":{"arguments":[{"id":24451,"name":"_fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24434,"src":"7003:4:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24450,"name":"transferRelayerFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24585,"src":"6984:18:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":24452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6984:24:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24453,"nodeType":"ExpressionStatement","src":"6984:24:89"}]},"documentation":{"id":24429,"nodeType":"StructuredDocumentation","src":"6375:419:89","text":" @notice Wraps the call to execute() on Connext and pays either the caller or hardcoded relayer from this\n contract's balance for completing the transaction.\n @param _args - ExecuteArgs arguments.\n @param _fee - Fee to be paid to relayer.\n @return transferId - The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for\n reconciliation to occur."},"functionSelector":"8efed127","id":24455,"implemented":true,"kind":"function","modifiers":[{"id":24437,"kind":"modifierInvocation","modifierName":{"id":24436,"name":"onlyRelayer","nameLocations":["6873:11:89"],"nodeType":"IdentifierPath","referencedDeclaration":24187,"src":"6873:11:89"},"nodeType":"ModifierInvocation","src":"6873:11:89"},{"id":24439,"kind":"modifierInvocation","modifierName":{"id":24438,"name":"nonReentrant","nameLocations":["6889:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":10710,"src":"6889:12:89"},"nodeType":"ModifierInvocation","src":"6889:12:89"}],"name":"execute","nameLocation":"6806:7:89","nodeType":"FunctionDefinition","parameters":{"id":24435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24432,"mutability":"mutable","name":"_args","nameLocation":"6835:5:89","nodeType":"VariableDeclaration","scope":24455,"src":"6814:26:89","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs"},"typeName":{"id":24431,"nodeType":"UserDefinedTypeName","pathNode":{"id":24430,"name":"ExecuteArgs","nameLocations":["6814:11:89"],"nodeType":"IdentifierPath","referencedDeclaration":29365,"src":"6814:11:89"},"referencedDeclaration":29365,"src":"6814:11:89","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_storage_ptr","typeString":"struct ExecuteArgs"}},"visibility":"internal"},{"constant":false,"id":24434,"mutability":"mutable","name":"_fee","nameLocation":"6850:4:89","nodeType":"VariableDeclaration","scope":24455,"src":"6842:12:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24433,"name":"uint256","nodeType":"ElementaryTypeName","src":"6842:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6813:42:89"},"returnParameters":{"id":24442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24441,"mutability":"mutable","name":"transferId","nameLocation":"6923:10:89","nodeType":"VariableDeclaration","scope":24455,"src":"6915:18:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24440,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6915:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6914:20:89"},"scope":24709,"src":"6797:216:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24490,"nodeType":"Block","src":"7941:129:89","statements":[{"expression":{"arguments":[{"id":24480,"name":"_proofs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24460,"src":"7978:7:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Proof_$24133_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ISpokeConnector.Proof calldata[] calldata"}},{"id":24481,"name":"_aggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24462,"src":"7987:14:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":24482,"name":"_aggregatePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24466,"src":"8003:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_calldata_ptr","typeString":"bytes32[32] calldata"}},{"id":24483,"name":"_aggregateIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24468,"src":"8019:15:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_Proof_$24133_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ISpokeConnector.Proof calldata[] calldata"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes32_$32_calldata_ptr","typeString":"bytes32[32] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24477,"name":"spokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24171,"src":"7947:14:89","typeDescriptions":{"typeIdentifier":"t_contract$_ISpokeConnector_$24154","typeString":"contract ISpokeConnector"}},"id":24479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7962:15:89","memberName":"proveAndProcess","nodeType":"MemberAccess","referencedDeclaration":24148,"src":"7947:30:89","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_array$_t_struct$_Proof_$24133_memory_ptr_$dyn_memory_ptr_$_t_bytes32_$_t_array$_t_bytes32_$32_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (struct ISpokeConnector.Proof memory[] memory,bytes32,bytes32[32] memory,uint256) external"}},"id":24484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7947:88:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24485,"nodeType":"ExpressionStatement","src":"7947:88:89"},{"expression":{"arguments":[{"id":24487,"name":"_fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24470,"src":"8060:4:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24486,"name":"transferRelayerFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24585,"src":"8041:18:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":24488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8041:24:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24489,"nodeType":"ExpressionStatement","src":"8041:24:89"}]},"documentation":{"id":24456,"nodeType":"StructuredDocumentation","src":"7017:696:89","text":" @notice Wraps the call to proveAndProcess() on SpokeConnector and pays either the caller or hardcoded relayer\n from this contract's balance for completing the transaction.\n @param _proofs Batch of Proofs containing messages for proving/processing.\n @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\n already been delivered to this spoke connector contract and surpassed the validation period.\n @param _aggregatePath Merkle path of inclusion for the inbound root.\n @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\n @param _fee - Fee to be paid to relayer."},"functionSelector":"e79457f1","id":24491,"implemented":true,"kind":"function","modifiers":[{"id":24473,"kind":"modifierInvocation","modifierName":{"id":24472,"name":"onlyRelayer","nameLocations":["7916:11:89"],"nodeType":"IdentifierPath","referencedDeclaration":24187,"src":"7916:11:89"},"nodeType":"ModifierInvocation","src":"7916:11:89"},{"id":24475,"kind":"modifierInvocation","modifierName":{"id":24474,"name":"nonReentrant","nameLocations":["7928:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":10710,"src":"7928:12:89"},"nodeType":"ModifierInvocation","src":"7928:12:89"}],"name":"proveAndProcess","nameLocation":"7725:15:89","nodeType":"FunctionDefinition","parameters":{"id":24471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24460,"mutability":"mutable","name":"_proofs","nameLocation":"7779:7:89","nodeType":"VariableDeclaration","scope":24491,"src":"7746:40:89","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Proof_$24133_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ISpokeConnector.Proof[]"},"typeName":{"baseType":{"id":24458,"nodeType":"UserDefinedTypeName","pathNode":{"id":24457,"name":"ISpokeConnector.Proof","nameLocations":["7746:15:89","7762:5:89"],"nodeType":"IdentifierPath","referencedDeclaration":24133,"src":"7746:21:89"},"referencedDeclaration":24133,"src":"7746:21:89","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$24133_storage_ptr","typeString":"struct ISpokeConnector.Proof"}},"id":24459,"nodeType":"ArrayTypeName","src":"7746:23:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Proof_$24133_storage_$dyn_storage_ptr","typeString":"struct ISpokeConnector.Proof[]"}},"visibility":"internal"},{"constant":false,"id":24462,"mutability":"mutable","name":"_aggregateRoot","nameLocation":"7800:14:89","nodeType":"VariableDeclaration","scope":24491,"src":"7792:22:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24461,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7792:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":24466,"mutability":"mutable","name":"_aggregatePath","nameLocation":"7841:14:89","nodeType":"VariableDeclaration","scope":24491,"src":"7820:35:89","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_calldata_ptr","typeString":"bytes32[32]"},"typeName":{"baseType":{"id":24463,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7820:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":24465,"length":{"hexValue":"3332","id":24464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7828:2:89","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"nodeType":"ArrayTypeName","src":"7820:11:89","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_storage_ptr","typeString":"bytes32[32]"}},"visibility":"internal"},{"constant":false,"id":24468,"mutability":"mutable","name":"_aggregateIndex","nameLocation":"7869:15:89","nodeType":"VariableDeclaration","scope":24491,"src":"7861:23:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24467,"name":"uint256","nodeType":"ElementaryTypeName","src":"7861:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24470,"mutability":"mutable","name":"_fee","nameLocation":"7898:4:89","nodeType":"VariableDeclaration","scope":24491,"src":"7890:12:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24469,"name":"uint256","nodeType":"ElementaryTypeName","src":"7890:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7740:166:89"},"returnParameters":{"id":24476,"nodeType":"ParameterList","parameters":[],"src":"7941:0:89"},"scope":24709,"src":"7716:354:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24526,"nodeType":"Block","src":"8617:161:89","statements":[{"expression":{"arguments":[{"id":24510,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24494,"src":"8663:12:89","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":24505,"name":"spokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24171,"src":"8623:14:89","typeDescriptions":{"typeIdentifier":"t_contract$_ISpokeConnector_$24154","typeString":"contract ISpokeConnector"}},"id":24507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8638:4:89","memberName":"send","nodeType":"MemberAccess","referencedDeclaration":24153,"src":"8623:19:89","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) payable external"}},"id":24509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":24508,"name":"_messageFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"8650:11:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"8623:39:89","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_bytes_memory_ptr_$returns$__$value","typeString":"function (bytes memory) payable external"}},"id":24511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8623:53:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24512,"nodeType":"ExpressionStatement","src":"8623:53:89"},{"eventCall":{"arguments":[{"id":24514,"name":"_messageFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24496,"src":"8701:11:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"arguments":[{"id":24517,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8722:4:89","typeDescriptions":{"typeIdentifier":"t_contract$_RelayerProxy_$24709","typeString":"contract RelayerProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RelayerProxy_$24709","typeString":"contract RelayerProxy"}],"id":24516,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8714:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24515,"name":"address","nodeType":"ElementaryTypeName","src":"8714:7:89","typeDescriptions":{}}},"id":24518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8714:13:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":24519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8728:7:89","memberName":"balance","nodeType":"MemberAccess","src":"8714:21:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24513,"name":"FundsDeducted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24217,"src":"8687:13:89","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":24520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8687:49:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24521,"nodeType":"EmitStatement","src":"8682:54:89"},{"expression":{"arguments":[{"id":24523,"name":"_relayerFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24498,"src":"8761:11:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24522,"name":"transferRelayerFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24585,"src":"8742:18:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":24524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8742:31:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24525,"nodeType":"ExpressionStatement","src":"8742:31:89"}]},"documentation":{"id":24492,"nodeType":"StructuredDocumentation","src":"8074:407:89","text":" @notice Wraps the call to send() on SpokeConnector and pays either the caller or hardcoded relayer from this\n contract's balance for completing the transaction.\n @param _encodedData - Data to be sent to Connext SpokeConnector\n @param _messageFee - Fee to be paid to the SpokeConnector for connected AMBs that require fees.\n @param _relayerFee - Fee to be paid to relayer."},"functionSelector":"d9ef0bee","id":24527,"implemented":true,"kind":"function","modifiers":[{"id":24501,"kind":"modifierInvocation","modifierName":{"id":24500,"name":"onlyRelayer","nameLocations":["8592:11:89"],"nodeType":"IdentifierPath","referencedDeclaration":24187,"src":"8592:11:89"},"nodeType":"ModifierInvocation","src":"8592:11:89"},{"id":24503,"kind":"modifierInvocation","modifierName":{"id":24502,"name":"nonReentrant","nameLocations":["8604:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":10710,"src":"8604:12:89"},"nodeType":"ModifierInvocation","src":"8604:12:89"}],"name":"send","nameLocation":"8493:4:89","nodeType":"FunctionDefinition","parameters":{"id":24499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24494,"mutability":"mutable","name":"_encodedData","nameLocation":"8516:12:89","nodeType":"VariableDeclaration","scope":24527,"src":"8503:25:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":24493,"name":"bytes","nodeType":"ElementaryTypeName","src":"8503:5:89","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":24496,"mutability":"mutable","name":"_messageFee","nameLocation":"8542:11:89","nodeType":"VariableDeclaration","scope":24527,"src":"8534:19:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24495,"name":"uint256","nodeType":"ElementaryTypeName","src":"8534:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24498,"mutability":"mutable","name":"_relayerFee","nameLocation":"8567:11:89","nodeType":"VariableDeclaration","scope":24527,"src":"8559:19:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24497,"name":"uint256","nodeType":"ElementaryTypeName","src":"8559:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8497:85:89"},"returnParameters":{"id":24504,"nodeType":"ParameterList","parameters":[],"src":"8617:0:89"},"scope":24709,"src":"8484:294:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24540,"nodeType":"Block","src":"8809:63:89","statements":[{"eventCall":{"arguments":[{"expression":{"id":24531,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8834:3:89","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8838:5:89","memberName":"value","nodeType":"MemberAccess","src":"8834:9:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"arguments":[{"id":24535,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8853:4:89","typeDescriptions":{"typeIdentifier":"t_contract$_RelayerProxy_$24709","typeString":"contract RelayerProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RelayerProxy_$24709","typeString":"contract RelayerProxy"}],"id":24534,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8845:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24533,"name":"address","nodeType":"ElementaryTypeName","src":"8845:7:89","typeDescriptions":{}}},"id":24536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8845:13:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":24537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8859:7:89","memberName":"balance","nodeType":"MemberAccess","src":"8845:21:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24530,"name":"FundsReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24210,"src":"8820:13:89","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":24538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8820:47:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24539,"nodeType":"EmitStatement","src":"8815:52:89"}]},"id":24541,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24528,"nodeType":"ParameterList","parameters":[],"src":"8789:2:89"},"returnParameters":{"id":24529,"nodeType":"ParameterList","parameters":[],"src":"8809:0:89"},"scope":24709,"src":"8782:90:89","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":24584,"nodeType":"Block","src":"9174:222:89","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":24550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24547,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9184:3:89","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9188:6:89","memberName":"sender","nodeType":"MemberAccess","src":"9184:10:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":24549,"name":"gelatoRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24163,"src":"9198:13:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9184:27:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":24573,"nodeType":"Block","src":"9280:59:89","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":24567,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9314:3:89","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9318:6:89","memberName":"sender","nodeType":"MemberAccess","src":"9314:10:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24566,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9306:8:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":24565,"name":"address","nodeType":"ElementaryTypeName","src":"9306:8:89","stateMutability":"payable","typeDescriptions":{}}},"id":24569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9306:19:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":24570,"name":"_fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24544,"src":"9327:4:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24562,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"9288:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11484_$","typeString":"type(library Address)"}},"id":24564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9296:9:89","memberName":"sendValue","nodeType":"MemberAccess","referencedDeclaration":11206,"src":"9288:17:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$","typeString":"function (address payable,uint256)"}},"id":24571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9288:44:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24572,"nodeType":"ExpressionStatement","src":"9288:44:89"}]},"id":24574,"nodeType":"IfStatement","src":"9180:159:89","trueBody":{"id":24561,"nodeType":"Block","src":"9213:61:89","statements":[{"expression":{"arguments":[{"arguments":[{"id":24556,"name":"feeCollector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24165,"src":"9247:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24555,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9239:8:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":24554,"name":"address","nodeType":"ElementaryTypeName","src":"9239:8:89","stateMutability":"payable","typeDescriptions":{}}},"id":24557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9239:21:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":24558,"name":"_fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24544,"src":"9262:4:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24551,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"9221:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11484_$","typeString":"type(library Address)"}},"id":24553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9229:9:89","memberName":"sendValue","nodeType":"MemberAccess","referencedDeclaration":11206,"src":"9221:17:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$","typeString":"function (address payable,uint256)"}},"id":24559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9221:46:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24560,"nodeType":"ExpressionStatement","src":"9221:46:89"}]}},{"eventCall":{"arguments":[{"id":24576,"name":"_fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24544,"src":"9363:4:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"arguments":[{"id":24579,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9377:4:89","typeDescriptions":{"typeIdentifier":"t_contract$_RelayerProxy_$24709","typeString":"contract RelayerProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RelayerProxy_$24709","typeString":"contract RelayerProxy"}],"id":24578,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9369:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24577,"name":"address","nodeType":"ElementaryTypeName","src":"9369:7:89","typeDescriptions":{}}},"id":24580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9369:13:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":24581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9383:7:89","memberName":"balance","nodeType":"MemberAccess","src":"9369:21:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24575,"name":"FundsDeducted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24217,"src":"9349:13:89","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":24582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9349:42:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24583,"nodeType":"EmitStatement","src":"9344:47:89"}]},"documentation":{"id":24542,"nodeType":"StructuredDocumentation","src":"8927:193:89","text":" @notice helper function to transfer fees to either Gelato relayer via Fee Collector or to our\n backup relayer (msg.sender).\n @param _fee - Fee to be paid to relayer."},"id":24585,"implemented":true,"kind":"function","modifiers":[],"name":"transferRelayerFee","nameLocation":"9132:18:89","nodeType":"FunctionDefinition","parameters":{"id":24545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24544,"mutability":"mutable","name":"_fee","nameLocation":"9159:4:89","nodeType":"VariableDeclaration","scope":24585,"src":"9151:12:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24543,"name":"uint256","nodeType":"ElementaryTypeName","src":"9151:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9150:14:89"},"returnParameters":{"id":24546,"nodeType":"ParameterList","parameters":[],"src":"9174:0:89"},"scope":24709,"src":"9123:273:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":24608,"nodeType":"Block","src":"9448:125:89","statements":[{"expression":{"arguments":[{"id":24594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9462:25:89","subExpression":{"baseExpression":{"id":24591,"name":"allowedRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24175,"src":"9463:14:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24593,"indexExpression":{"id":24592,"name":"_relayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24587,"src":"9478:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9463:24:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6164646564","id":24595,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9489:7:89","typeDescriptions":{"typeIdentifier":"t_stringliteral_dedd704501704f7991a32fb105552a4ab47a52c46817293082f14fd934f9f8cc","typeString":"literal_string \"added\""},"value":"added"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_dedd704501704f7991a32fb105552a4ab47a52c46817293082f14fd934f9f8cc","typeString":"literal_string \"added\""}],"id":24590,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9454:7:89","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9454:43:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24597,"nodeType":"ExpressionStatement","src":"9454:43:89"},{"expression":{"id":24602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":24598,"name":"allowedRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24175,"src":"9504:14:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24600,"indexExpression":{"id":24599,"name":"_relayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24587,"src":"9519:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9504:24:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":24601,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9531:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"9504:31:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24603,"nodeType":"ExpressionStatement","src":"9504:31:89"},{"eventCall":{"arguments":[{"id":24605,"name":"_relayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24587,"src":"9559:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24604,"name":"RelayerAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24222,"src":"9546:12:89","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":24606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9546:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24607,"nodeType":"EmitStatement","src":"9541:27:89"}]},"id":24609,"implemented":true,"kind":"function","modifiers":[],"name":"_addRelayer","nameLocation":"9409:11:89","nodeType":"FunctionDefinition","parameters":{"id":24588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24587,"mutability":"mutable","name":"_relayer","nameLocation":"9429:8:89","nodeType":"VariableDeclaration","scope":24609,"src":"9421:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24586,"name":"address","nodeType":"ElementaryTypeName","src":"9421:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9420:18:89"},"returnParameters":{"id":24589,"nodeType":"ParameterList","parameters":[],"src":"9448:0:89"},"scope":24709,"src":"9400:173:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":24631,"nodeType":"Block","src":"9628:128:89","statements":[{"expression":{"arguments":[{"baseExpression":{"id":24615,"name":"allowedRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24175,"src":"9642:14:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24617,"indexExpression":{"id":24616,"name":"_relayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24611,"src":"9657:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9642:24:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216164646564","id":24618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9668:8:89","typeDescriptions":{"typeIdentifier":"t_stringliteral_e11eb83f9b11acb18ab039411915a354a75afc390de576b7a0065bfcb50b4e9b","typeString":"literal_string \"!added\""},"value":"!added"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e11eb83f9b11acb18ab039411915a354a75afc390de576b7a0065bfcb50b4e9b","typeString":"literal_string \"!added\""}],"id":24614,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9634:7:89","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9634:43:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24620,"nodeType":"ExpressionStatement","src":"9634:43:89"},{"expression":{"id":24625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":24621,"name":"allowedRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24175,"src":"9684:14:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24623,"indexExpression":{"id":24622,"name":"_relayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24611,"src":"9699:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9684:24:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":24624,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9711:5:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9684:32:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24626,"nodeType":"ExpressionStatement","src":"9684:32:89"},{"eventCall":{"arguments":[{"id":24628,"name":"_relayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24611,"src":"9742:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24627,"name":"RelayerRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24227,"src":"9727:14:89","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":24629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9727:24:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24630,"nodeType":"EmitStatement","src":"9722:29:89"}]},"id":24632,"implemented":true,"kind":"function","modifiers":[],"name":"_removeRelayer","nameLocation":"9586:14:89","nodeType":"FunctionDefinition","parameters":{"id":24612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24611,"mutability":"mutable","name":"_relayer","nameLocation":"9609:8:89","nodeType":"VariableDeclaration","scope":24632,"src":"9601:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24610,"name":"address","nodeType":"ElementaryTypeName","src":"9601:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9600:18:89"},"returnParameters":{"id":24613,"nodeType":"ParameterList","parameters":[],"src":"9628:0:89"},"scope":24709,"src":"9577:179:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":24651,"nodeType":"Block","src":"9808:92:89","statements":[{"eventCall":{"arguments":[{"id":24638,"name":"_connext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24634,"src":"9834:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":24641,"name":"connext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24168,"src":"9852:7:89","typeDescriptions":{"typeIdentifier":"t_contract$_IConnext_$26846","typeString":"contract IConnext"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IConnext_$26846","typeString":"contract IConnext"}],"id":24640,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9844:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24639,"name":"address","nodeType":"ElementaryTypeName","src":"9844:7:89","typeDescriptions":{}}},"id":24642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9844:16:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24637,"name":"ConnextChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24234,"src":"9819:14:89","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":24643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9819:42:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24644,"nodeType":"EmitStatement","src":"9814:47:89"},{"expression":{"id":24649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24645,"name":"connext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24168,"src":"9867:7:89","typeDescriptions":{"typeIdentifier":"t_contract$_IConnext_$26846","typeString":"contract IConnext"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":24647,"name":"_connext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24634,"src":"9886:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24646,"name":"IConnext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26846,"src":"9877:8:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IConnext_$26846_$","typeString":"type(contract IConnext)"}},"id":24648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9877:18:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IConnext_$26846","typeString":"contract IConnext"}},"src":"9867:28:89","typeDescriptions":{"typeIdentifier":"t_contract$_IConnext_$26846","typeString":"contract IConnext"}},"id":24650,"nodeType":"ExpressionStatement","src":"9867:28:89"}]},"id":24652,"implemented":true,"kind":"function","modifiers":[],"name":"_setConnext","nameLocation":"9769:11:89","nodeType":"FunctionDefinition","parameters":{"id":24635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24634,"mutability":"mutable","name":"_connext","nameLocation":"9789:8:89","nodeType":"VariableDeclaration","scope":24652,"src":"9781:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24633,"name":"address","nodeType":"ElementaryTypeName","src":"9781:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9780:18:89"},"returnParameters":{"id":24636,"nodeType":"ParameterList","parameters":[],"src":"9808:0:89"},"scope":24709,"src":"9760:140:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":24671,"nodeType":"Block","src":"9966:134:89","statements":[{"eventCall":{"arguments":[{"id":24658,"name":"_spokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24654,"src":"9999:15:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":24661,"name":"spokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24171,"src":"10024:14:89","typeDescriptions":{"typeIdentifier":"t_contract$_ISpokeConnector_$24154","typeString":"contract ISpokeConnector"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ISpokeConnector_$24154","typeString":"contract ISpokeConnector"}],"id":24660,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10016:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24659,"name":"address","nodeType":"ElementaryTypeName","src":"10016:7:89","typeDescriptions":{}}},"id":24662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10016:23:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24657,"name":"SpokeConnectorChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24241,"src":"9977:21:89","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":24663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9977:63:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24664,"nodeType":"EmitStatement","src":"9972:68:89"},{"expression":{"id":24669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24665,"name":"spokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24171,"src":"10046:14:89","typeDescriptions":{"typeIdentifier":"t_contract$_ISpokeConnector_$24154","typeString":"contract ISpokeConnector"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":24667,"name":"_spokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24654,"src":"10079:15:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24666,"name":"ISpokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24154,"src":"10063:15:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISpokeConnector_$24154_$","typeString":"type(contract ISpokeConnector)"}},"id":24668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10063:32:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISpokeConnector_$24154","typeString":"contract ISpokeConnector"}},"src":"10046:49:89","typeDescriptions":{"typeIdentifier":"t_contract$_ISpokeConnector_$24154","typeString":"contract ISpokeConnector"}},"id":24670,"nodeType":"ExpressionStatement","src":"10046:49:89"}]},"id":24672,"implemented":true,"kind":"function","modifiers":[],"name":"_setSpokeConnector","nameLocation":"9913:18:89","nodeType":"FunctionDefinition","parameters":{"id":24655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24654,"mutability":"mutable","name":"_spokeConnector","nameLocation":"9940:15:89","nodeType":"VariableDeclaration","scope":24672,"src":"9932:23:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24653,"name":"address","nodeType":"ElementaryTypeName","src":"9932:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9931:25:89"},"returnParameters":{"id":24656,"nodeType":"ParameterList","parameters":[],"src":"9966:0:89"},"scope":24709,"src":"9904:196:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":24689,"nodeType":"Block","src":"10164:112:89","statements":[{"eventCall":{"arguments":[{"id":24678,"name":"_gelatoRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24674,"src":"10196:14:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":24681,"name":"gelatoRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24163,"src":"10220:13:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24680,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10212:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24679,"name":"address","nodeType":"ElementaryTypeName","src":"10212:7:89","typeDescriptions":{}}},"id":24682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10212:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24677,"name":"GelatoRelayerChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24248,"src":"10175:20:89","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":24683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10175:60:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24684,"nodeType":"EmitStatement","src":"10170:65:89"},{"expression":{"id":24687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24685,"name":"gelatoRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24163,"src":"10241:13:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24686,"name":"_gelatoRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24674,"src":"10257:14:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10241:30:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":24688,"nodeType":"ExpressionStatement","src":"10241:30:89"}]},"id":24690,"implemented":true,"kind":"function","modifiers":[],"name":"_setGelatoRelayer","nameLocation":"10113:17:89","nodeType":"FunctionDefinition","parameters":{"id":24675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24674,"mutability":"mutable","name":"_gelatoRelayer","nameLocation":"10139:14:89","nodeType":"VariableDeclaration","scope":24690,"src":"10131:22:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24673,"name":"address","nodeType":"ElementaryTypeName","src":"10131:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10130:24:89"},"returnParameters":{"id":24676,"nodeType":"ParameterList","parameters":[],"src":"10164:0:89"},"scope":24709,"src":"10104:172:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":24707,"nodeType":"Block","src":"10338:107:89","statements":[{"eventCall":{"arguments":[{"id":24696,"name":"_feeCollector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24692,"src":"10369:13:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":24699,"name":"feeCollector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24165,"src":"10392:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24698,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10384:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24697,"name":"address","nodeType":"ElementaryTypeName","src":"10384:7:89","typeDescriptions":{}}},"id":24700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10384:21:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24695,"name":"FeeCollectorChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24255,"src":"10349:19:89","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":24701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10349:57:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24702,"nodeType":"EmitStatement","src":"10344:62:89"},{"expression":{"id":24705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24703,"name":"feeCollector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24165,"src":"10412:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24704,"name":"_feeCollector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24692,"src":"10427:13:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10412:28:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":24706,"nodeType":"ExpressionStatement","src":"10412:28:89"}]},"id":24708,"implemented":true,"kind":"function","modifiers":[],"name":"_setFeeCollector","nameLocation":"10289:16:89","nodeType":"FunctionDefinition","parameters":{"id":24693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24692,"mutability":"mutable","name":"_feeCollector","nameLocation":"10314:13:89","nodeType":"VariableDeclaration","scope":24708,"src":"10306:21:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24691,"name":"address","nodeType":"ElementaryTypeName","src":"10306:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10305:23:89"},"returnParameters":{"id":24694,"nodeType":"ParameterList","parameters":[],"src":"10338:0:89"},"scope":24709,"src":"10280:165:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":24710,"src":"1117:9330:89","usedErrors":[49697,49699,49701,49703,49705,49707,49709]}],"src":"46:10402:89"},"id":89},"contracts/core/connext/helpers/RelayerProxyHub.sol":{"ast":{"absolutePath":"contracts/core/connext/helpers/RelayerProxyHub.sol","exportedSymbols":{"Address":[11484],"GelatoRelayFeeCollector":[48],"IRootManager":[47888],"ProposedOwnable":[49928],"ReentrancyGuard":[10734],"RelayerProxy":[24709],"RelayerProxyHub":[24867]},"id":24868,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":24711,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:90"},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":24713,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24868,"sourceUnit":11485,"src":"71:66:90","symbolAliases":[{"foreign":{"id":24712,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"79:7:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/security/ReentrancyGuard.sol","file":"@openzeppelin/contracts/security/ReentrancyGuard.sol","id":24715,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24868,"sourceUnit":10735,"src":"138:85:90","symbolAliases":[{"foreign":{"id":24714,"name":"ReentrancyGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10734,"src":"146:15:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol","file":"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol","id":24717,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24868,"sourceUnit":49,"src":"224:107:90","symbolAliases":[{"foreign":{"id":24716,"name":"GelatoRelayFeeCollector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48,"src":"232:23:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/ProposedOwnable.sol","file":"../../../shared/ProposedOwnable.sol","id":24719,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24868,"sourceUnit":49929,"src":"333:68:90","symbolAliases":[{"foreign":{"id":24718,"name":"ProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49928,"src":"341:15:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/IRootManager.sol","file":"../../../messaging/interfaces/IRootManager.sol","id":24721,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24868,"sourceUnit":47889,"src":"402:76:90","symbolAliases":[{"foreign":{"id":24720,"name":"IRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47888,"src":"410:12:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/helpers/RelayerProxy.sol","file":"./RelayerProxy.sol","id":24723,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24868,"sourceUnit":24710,"src":"479:48:90","symbolAliases":[{"foreign":{"id":24722,"name":"RelayerProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24709,"src":"487:12:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24725,"name":"RelayerProxy","nameLocations":["864:12:90"],"nodeType":"IdentifierPath","referencedDeclaration":24709,"src":"864:12:90"},"id":24726,"nodeType":"InheritanceSpecifier","src":"864:12:90"}],"canonicalName":"RelayerProxyHub","contractDependencies":[],"contractKind":"contract","documentation":{"id":24724,"nodeType":"StructuredDocumentation","src":"529:306:90","text":" @title RelayerProxyHub\n @author Connext Labs, Inc.\n @notice This is a temporary contract that wraps the Connext RootManager's propagate() function so that it can be called by\n Gelato's legacy relayer network. The contract stores native assets and pays them to the relayer on function call."},"fullyImplemented":true,"id":24867,"linearizedBaseContracts":[24867,24709,48,77,10734,49928,50003],"name":"RelayerProxyHub","nameLocation":"845:15:90","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"db205635","id":24729,"mutability":"mutable","name":"rootManager","nameLocation":"944:11:90","nodeType":"VariableDeclaration","scope":24867,"src":"924:31:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRootManager_$47888","typeString":"contract IRootManager"},"typeName":{"id":24728,"nodeType":"UserDefinedTypeName","pathNode":{"id":24727,"name":"IRootManager","nameLocations":["924:12:90"],"nodeType":"IdentifierPath","referencedDeclaration":47888,"src":"924:12:90"},"referencedDeclaration":47888,"src":"924:12:90","typeDescriptions":{"typeIdentifier":"t_contract$_IRootManager_$47888","typeString":"contract IRootManager"}},"visibility":"public"},{"anonymous":false,"eventSelector":"3124eaf4f16c6ddd81951200c6d8f65d5800753bef06584bd672c8b22c76b487","id":24735,"name":"RootManagerChanged","nameLocation":"1004:18:90","nodeType":"EventDefinition","parameters":{"id":24734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24731,"indexed":false,"mutability":"mutable","name":"rootManager","nameLocation":"1031:11:90","nodeType":"VariableDeclaration","scope":24735,"src":"1023:19:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24730,"name":"address","nodeType":"ElementaryTypeName","src":"1023:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24733,"indexed":false,"mutability":"mutable","name":"oldRootManager","nameLocation":"1052:14:90","nodeType":"VariableDeclaration","scope":24735,"src":"1044:22:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24732,"name":"address","nodeType":"ElementaryTypeName","src":"1044:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1022:45:90"},"src":"998:70:90"},{"body":{"id":24759,"nodeType":"Block","src":"1774:40:90","statements":[{"expression":{"arguments":[{"id":24756,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24746,"src":"1796:12:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24755,"name":"_setRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24866,"src":"1780:15:90","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":24757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1780:29:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24758,"nodeType":"ExpressionStatement","src":"1780:29:90"}]},"documentation":{"id":24736,"nodeType":"StructuredDocumentation","src":"1116:436:90","text":" @notice Creates a new RelayerProxyHub instance.\n @param _connext The address of the Connext on this domain.\n @param _spokeConnector The address of the SpokeConnector on this domain.\n @param _gelatoRelayer The address of the Gelato relayer on this domain.\n @param _feeCollector The address of the Gelato Fee Collector on this domain.\n @param _rootManager The address of the Root Manager on this domain."},"id":24760,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":24749,"name":"_connext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24738,"src":"1716:8:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24750,"name":"_spokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24740,"src":"1726:15:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24751,"name":"_gelatoRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24742,"src":"1743:14:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24752,"name":"_feeCollector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24744,"src":"1759:13:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":24753,"kind":"baseConstructorSpecifier","modifierName":{"id":24748,"name":"RelayerProxy","nameLocations":["1703:12:90"],"nodeType":"IdentifierPath","referencedDeclaration":24709,"src":"1703:12:90"},"nodeType":"ModifierInvocation","src":"1703:70:90"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24738,"mutability":"mutable","name":"_connext","nameLocation":"1580:8:90","nodeType":"VariableDeclaration","scope":24760,"src":"1572:16:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24737,"name":"address","nodeType":"ElementaryTypeName","src":"1572:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24740,"mutability":"mutable","name":"_spokeConnector","nameLocation":"1602:15:90","nodeType":"VariableDeclaration","scope":24760,"src":"1594:23:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24739,"name":"address","nodeType":"ElementaryTypeName","src":"1594:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24742,"mutability":"mutable","name":"_gelatoRelayer","nameLocation":"1631:14:90","nodeType":"VariableDeclaration","scope":24760,"src":"1623:22:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24741,"name":"address","nodeType":"ElementaryTypeName","src":"1623:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24744,"mutability":"mutable","name":"_feeCollector","nameLocation":"1659:13:90","nodeType":"VariableDeclaration","scope":24760,"src":"1651:21:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24743,"name":"address","nodeType":"ElementaryTypeName","src":"1651:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24746,"mutability":"mutable","name":"_rootManager","nameLocation":"1686:12:90","nodeType":"VariableDeclaration","scope":24760,"src":"1678:20:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24745,"name":"address","nodeType":"ElementaryTypeName","src":"1678:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1566:136:90"},"returnParameters":{"id":24754,"nodeType":"ParameterList","parameters":[],"src":"1774:0:90"},"scope":24867,"src":"1555:259:90","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":24775,"nodeType":"Block","src":"2094:40:90","statements":[{"expression":{"arguments":[{"id":24772,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24763,"src":"2116:12:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24771,"name":"_setRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24866,"src":"2100:15:90","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":24773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2100:29:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24774,"nodeType":"ExpressionStatement","src":"2100:29:90"}]},"documentation":{"id":24761,"nodeType":"StructuredDocumentation","src":"1866:131:90","text":" @notice Updates the RootManager address.\n @param _rootManager The address of the new RootManager on this domain."},"functionSelector":"f0a67eba","id":24776,"implemented":true,"kind":"function","modifiers":[{"id":24766,"kind":"modifierInvocation","modifierName":{"id":24765,"name":"onlyOwner","nameLocations":["2055:9:90"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"2055:9:90"},"nodeType":"ModifierInvocation","src":"2055:9:90"},{"arguments":[{"id":24768,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24763,"src":"2080:12:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":24769,"kind":"modifierInvocation","modifierName":{"id":24767,"name":"definedAddress","nameLocations":["2065:14:90"],"nodeType":"IdentifierPath","referencedDeclaration":24203,"src":"2065:14:90"},"nodeType":"ModifierInvocation","src":"2065:28:90"}],"name":"setRootManager","nameLocation":"2009:14:90","nodeType":"FunctionDefinition","parameters":{"id":24764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24763,"mutability":"mutable","name":"_rootManager","nameLocation":"2032:12:90","nodeType":"VariableDeclaration","scope":24776,"src":"2024:20:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24762,"name":"address","nodeType":"ElementaryTypeName","src":"2024:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2023:22:90"},"returnParameters":{"id":24770,"nodeType":"ParameterList","parameters":[],"src":"2094:0:90"},"scope":24867,"src":"2000:134:90","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24845,"nodeType":"Block","src":"2983:347:90","statements":[{"assignments":[24796],"declarations":[{"constant":false,"id":24796,"mutability":"mutable","name":"sum","nameLocation":"2997:3:90","nodeType":"VariableDeclaration","scope":24845,"src":"2989:11:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24795,"name":"uint256","nodeType":"ElementaryTypeName","src":"2989:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24798,"initialValue":{"hexValue":"30","id":24797,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3003:1:90","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2989:15:90"},{"assignments":[24800],"declarations":[{"constant":false,"id":24800,"mutability":"mutable","name":"length","nameLocation":"3018:6:90","nodeType":"VariableDeclaration","scope":24845,"src":"3010:14:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24799,"name":"uint256","nodeType":"ElementaryTypeName","src":"3010:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24803,"initialValue":{"expression":{"id":24801,"name":"_connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24780,"src":"3027:11:90","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":24802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3039:6:90","memberName":"length","nodeType":"MemberAccess","src":"3027:18:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3010:35:90"},{"body":{"id":24820,"nodeType":"Block","src":"3080:76:90","statements":[{"expression":{"id":24814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24810,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24796,"src":"3088:3:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":24811,"name":"_messageFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24783,"src":"3095:12:90","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":24813,"indexExpression":{"id":24812,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24805,"src":"3108:1:90","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3095:15:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3088:22:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24815,"nodeType":"ExpressionStatement","src":"3088:22:90"},{"id":24819,"nodeType":"UncheckedBlock","src":"3118:32:90","statements":[{"expression":{"id":24817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3138:3:90","subExpression":{"id":24816,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24805,"src":"3140:1:90","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":24818,"nodeType":"ExpressionStatement","src":"3138:3:90"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24807,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24805,"src":"3066:1:90","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":24808,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24800,"src":"3070:6:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3066:10:90","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24821,"initializationExpression":{"assignments":[24805],"declarations":[{"constant":false,"id":24805,"mutability":"mutable","name":"i","nameLocation":"3063:1:90","nodeType":"VariableDeclaration","scope":24821,"src":"3056:8:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":24804,"name":"uint32","nodeType":"ElementaryTypeName","src":"3056:6:90","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":24806,"nodeType":"VariableDeclarationStatement","src":"3056:8:90"},"nodeType":"ForStatement","src":"3051:105:90"},{"expression":{"arguments":[{"id":24827,"name":"_connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24780,"src":"3196:11:90","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":24828,"name":"_messageFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24783,"src":"3209:12:90","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},{"id":24829,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24786,"src":"3223:12:90","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}],"expression":{"id":24822,"name":"rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24729,"src":"3162:11:90","typeDescriptions":{"typeIdentifier":"t_contract$_IRootManager_$47888","typeString":"contract IRootManager"}},"id":24824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3174:9:90","memberName":"propagate","nodeType":"MemberAccess","referencedDeclaration":47879,"src":"3162:21:90","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory,uint256[] memory,bytes memory[] memory) payable external"}},"id":24826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":24825,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24796,"src":"3191:3:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"3162:33:90","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$returns$__$value","typeString":"function (address[] memory,uint256[] memory,bytes memory[] memory) payable external"}},"id":24830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3162:74:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24831,"nodeType":"ExpressionStatement","src":"3162:74:90"},{"eventCall":{"arguments":[{"id":24833,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24796,"src":"3261:3:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"arguments":[{"id":24836,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3274:4:90","typeDescriptions":{"typeIdentifier":"t_contract$_RelayerProxyHub_$24867","typeString":"contract RelayerProxyHub"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RelayerProxyHub_$24867","typeString":"contract RelayerProxyHub"}],"id":24835,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3266:7:90","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24834,"name":"address","nodeType":"ElementaryTypeName","src":"3266:7:90","typeDescriptions":{}}},"id":24837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3266:13:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":24838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3280:7:90","memberName":"balance","nodeType":"MemberAccess","src":"3266:21:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24832,"name":"FundsDeducted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24217,"src":"3247:13:90","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":24839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3247:41:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24840,"nodeType":"EmitStatement","src":"3242:46:90"},{"expression":{"arguments":[{"id":24842,"name":"_relayerFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24788,"src":"3313:11:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24841,"name":"transferRelayerFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24585,"src":"3294:18:90","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":24843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3294:31:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24844,"nodeType":"ExpressionStatement","src":"3294:31:90"}]},"documentation":{"id":24777,"nodeType":"StructuredDocumentation","src":"2189:603:90","text":" @notice Wraps the call to propagate() on RootManager and pays either the caller or hardcoded relayer\n from this contract's balance for completing the transaction.\n @param _connectors Array of connectors: should match exactly the array of `connectors` in storage;\n used here to reduce gas costs, and keep them static regardless of number of supported domains.\n @param _messageFees Array of fees in native token for an AMB if required\n @param _encodedData Array of encodedData: extra params for each AMB if required\n @param _relayerFee Fee to be paid to relayer"},"functionSelector":"9a2652db","id":24846,"implemented":true,"kind":"function","modifiers":[{"id":24791,"kind":"modifierInvocation","modifierName":{"id":24790,"name":"onlyRelayer","nameLocations":["2958:11:90"],"nodeType":"IdentifierPath","referencedDeclaration":24187,"src":"2958:11:90"},"nodeType":"ModifierInvocation","src":"2958:11:90"},{"id":24793,"kind":"modifierInvocation","modifierName":{"id":24792,"name":"nonReentrant","nameLocations":["2970:12:90"],"nodeType":"IdentifierPath","referencedDeclaration":10710,"src":"2970:12:90"},"nodeType":"ModifierInvocation","src":"2970:12:90"}],"name":"propagate","nameLocation":"2804:9:90","nodeType":"FunctionDefinition","parameters":{"id":24789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24780,"mutability":"mutable","name":"_connectors","nameLocation":"2838:11:90","nodeType":"VariableDeclaration","scope":24846,"src":"2819:30:90","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":24778,"name":"address","nodeType":"ElementaryTypeName","src":"2819:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":24779,"nodeType":"ArrayTypeName","src":"2819:9:90","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":24783,"mutability":"mutable","name":"_messageFees","nameLocation":"2874:12:90","nodeType":"VariableDeclaration","scope":24846,"src":"2855:31:90","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":24781,"name":"uint256","nodeType":"ElementaryTypeName","src":"2855:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24782,"nodeType":"ArrayTypeName","src":"2855:9:90","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":24786,"mutability":"mutable","name":"_encodedData","nameLocation":"2907:12:90","nodeType":"VariableDeclaration","scope":24846,"src":"2892:27:90","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":24784,"name":"bytes","nodeType":"ElementaryTypeName","src":"2892:5:90","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":24785,"nodeType":"ArrayTypeName","src":"2892:7:90","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"},{"constant":false,"id":24788,"mutability":"mutable","name":"_relayerFee","nameLocation":"2933:11:90","nodeType":"VariableDeclaration","scope":24846,"src":"2925:19:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24787,"name":"uint256","nodeType":"ElementaryTypeName","src":"2925:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2813:135:90"},"returnParameters":{"id":24794,"nodeType":"ParameterList","parameters":[],"src":"2983:0:90"},"scope":24867,"src":"2795:535:90","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24865,"nodeType":"Block","src":"3440:116:90","statements":[{"eventCall":{"arguments":[{"id":24852,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24848,"src":"3470:12:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":24855,"name":"rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24729,"src":"3492:11:90","typeDescriptions":{"typeIdentifier":"t_contract$_IRootManager_$47888","typeString":"contract IRootManager"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRootManager_$47888","typeString":"contract IRootManager"}],"id":24854,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3484:7:90","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24853,"name":"address","nodeType":"ElementaryTypeName","src":"3484:7:90","typeDescriptions":{}}},"id":24856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3484:20:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24851,"name":"RootManagerChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24735,"src":"3451:18:90","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":24857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3451:54:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24858,"nodeType":"EmitStatement","src":"3446:59:90"},{"expression":{"id":24863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24859,"name":"rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24729,"src":"3511:11:90","typeDescriptions":{"typeIdentifier":"t_contract$_IRootManager_$47888","typeString":"contract IRootManager"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":24861,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24848,"src":"3538:12:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24860,"name":"IRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47888,"src":"3525:12:90","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRootManager_$47888_$","typeString":"type(contract IRootManager)"}},"id":24862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3525:26:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRootManager_$47888","typeString":"contract IRootManager"}},"src":"3511:40:90","typeDescriptions":{"typeIdentifier":"t_contract$_IRootManager_$47888","typeString":"contract IRootManager"}},"id":24864,"nodeType":"ExpressionStatement","src":"3511:40:90"}]},"id":24866,"implemented":true,"kind":"function","modifiers":[],"name":"_setRootManager","nameLocation":"3393:15:90","nodeType":"FunctionDefinition","parameters":{"id":24849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24848,"mutability":"mutable","name":"_rootManager","nameLocation":"3417:12:90","nodeType":"VariableDeclaration","scope":24866,"src":"3409:20:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24847,"name":"address","nodeType":"ElementaryTypeName","src":"3409:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3408:22:90"},"returnParameters":{"id":24850,"nodeType":"ParameterList","parameters":[],"src":"3440:0:90"},"scope":24867,"src":"3384:172:90","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":24868,"src":"836:2722:90","usedErrors":[49697,49699,49701,49703,49705,49707,49709]}],"src":"46:3513:90"},"id":90},"contracts/core/connext/helpers/StableSwap.sol":{"ast":{"absolutePath":"contracts/core/connext/helpers/StableSwap.sol","exportedSymbols":{"Clones":[9871],"Constants":[29304],"IERC20":[10812],"IStableSwap":[27329],"LPToken":[23179],"OwnerPausableUpgradeable":[24094],"ReentrancyGuardUpgradeable":[8438],"StableSwap":[25825],"SwapUtils":[37721]},"id":25826,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":24869,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:91"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":24871,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25826,"sourceUnit":11155,"src":"64:79:91","symbolAliases":[{"foreign":{"id":24870,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10812,"src":"72:6:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/proxy/Clones.sol","file":"@openzeppelin/contracts/proxy/Clones.sol","id":24873,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25826,"sourceUnit":9872,"src":"144:64:91","symbolAliases":[{"foreign":{"id":24872,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9871,"src":"152:6:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol","id":24875,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25826,"sourceUnit":8439,"src":"209:119:91","symbolAliases":[{"foreign":{"id":24874,"name":"ReentrancyGuardUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8438,"src":"217:26:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IStableSwap.sol","file":"../interfaces/IStableSwap.sol","id":24877,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25826,"sourceUnit":27330,"src":"330:58:91","symbolAliases":[{"foreign":{"id":24876,"name":"IStableSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27329,"src":"338:11:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/SwapUtilsExternal.sol","file":"../libraries/SwapUtilsExternal.sol","id":24879,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25826,"sourceUnit":37722,"src":"389:82:91","symbolAliases":[{"foreign":{"id":24878,"name":"SwapUtilsExternal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37721,"src":"397:17:91","typeDescriptions":{}},"local":"SwapUtils","nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/Constants.sol","file":"../libraries/Constants.sol","id":24881,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25826,"sourceUnit":29305,"src":"472:53:91","symbolAliases":[{"foreign":{"id":24880,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"480:9:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/helpers/OwnerPausableUpgradeable.sol","file":"./OwnerPausableUpgradeable.sol","id":24883,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25826,"sourceUnit":24095,"src":"527:72:91","symbolAliases":[{"foreign":{"id":24882,"name":"OwnerPausableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24094,"src":"535:24:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/helpers/LPToken.sol","file":"./LPToken.sol","id":24885,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25826,"sourceUnit":23180,"src":"600:38:91","symbolAliases":[{"foreign":{"id":24884,"name":"LPToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23179,"src":"608:7:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24887,"name":"IStableSwap","nameLocations":["1585:11:91"],"nodeType":"IdentifierPath","referencedDeclaration":27329,"src":"1585:11:91"},"id":24888,"nodeType":"InheritanceSpecifier","src":"1585:11:91"},{"baseName":{"id":24889,"name":"OwnerPausableUpgradeable","nameLocations":["1598:24:91"],"nodeType":"IdentifierPath","referencedDeclaration":24094,"src":"1598:24:91"},"id":24890,"nodeType":"InheritanceSpecifier","src":"1598:24:91"},{"baseName":{"id":24891,"name":"ReentrancyGuardUpgradeable","nameLocations":["1624:26:91"],"nodeType":"IdentifierPath","referencedDeclaration":8438,"src":"1624:26:91"},"id":24892,"nodeType":"InheritanceSpecifier","src":"1624:26:91"}],"canonicalName":"StableSwap","contractDependencies":[],"contractKind":"contract","documentation":{"id":24886,"nodeType":"StructuredDocumentation","src":"640:921:91","text":" @title Swap - A StableSwap implementation in solidity.\n @notice This contract is responsible for custody of closely pegged assets (eg. group of stablecoins)\n and automatic market making system. Users become an LP (Liquidity Provider) by depositing their tokens\n in desired ratios for an exchange of the pool token that represents their share of the pool.\n Users can burn pool tokens and withdraw their share of token(s).\n Each time a swap between the pooled tokens happens, a set fee incurs which effectively gets\n distributed to the LPs.\n In case of emergencies, admin can pause additional deposits, swaps, or single-asset withdraws - which\n stops the ratio of the tokens in the pool from changing.\n Users can always withdraw their tokens via multi-asset withdraws.\n @dev Most of the logic is stored as a library `SwapUtils` for the sake of reducing contract's\n deployment size."},"fullyImplemented":true,"id":25825,"linearizedBaseContracts":[25825,8438,24094,8365,8069,9543,8238,27329],"name":"StableSwap","nameLocation":"1571:10:91","nodeType":"ContractDefinition","nodes":[{"global":false,"id":24896,"libraryName":{"id":24893,"name":"SwapUtils","nameLocations":["1661:9:91"],"nodeType":"IdentifierPath","referencedDeclaration":37721,"src":"1661:9:91"},"nodeType":"UsingForDirective","src":"1655:35:91","typeName":{"id":24895,"nodeType":"UserDefinedTypeName","pathNode":{"id":24894,"name":"SwapUtils.Swap","nameLocations":["1675:9:91","1685:4:91"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"1675:14:91"},"referencedDeclaration":34379,"src":"1675:14:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}}},{"anonymous":false,"eventSelector":"8ba0c15f86c46b5773beb451b4d8d5744f7642ab1004c0a7e59e215710fb3aba","id":24903,"name":"SwapInitialized","nameLocation":"1738:15:91","nodeType":"EventDefinition","parameters":{"id":24902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24899,"indexed":false,"mutability":"mutable","name":"swap","nameLocation":"1769:4:91","nodeType":"VariableDeclaration","scope":24903,"src":"1754:19:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_memory_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":24898,"nodeType":"UserDefinedTypeName","pathNode":{"id":24897,"name":"SwapUtils.Swap","nameLocations":["1754:9:91","1764:4:91"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"1754:14:91"},"referencedDeclaration":34379,"src":"1754:14:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":24901,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"1783:6:91","nodeType":"VariableDeclaration","scope":24903,"src":"1775:14:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24900,"name":"address","nodeType":"ElementaryTypeName","src":"1775:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1753:37:91"},"src":"1732:59:91"},{"constant":false,"functionSelector":"5fd65f0f","id":24906,"mutability":"mutable","name":"swapStorage","nameLocation":"2047:11:91","nodeType":"VariableDeclaration","scope":25825,"src":"2025:33:91","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":24905,"nodeType":"UserDefinedTypeName","pathNode":{"id":24904,"name":"SwapUtils.Swap","nameLocations":["2025:9:91","2035:4:91"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"2025:14:91"},"referencedDeclaration":34379,"src":"2025:14:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"public"},{"constant":false,"id":24910,"mutability":"mutable","name":"tokenIndexes","nameLocation":"2273:12:91","nodeType":"VariableDeclaration","scope":25825,"src":"2239:46:91","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"},"typeName":{"id":24909,"keyType":{"id":24907,"name":"address","nodeType":"ElementaryTypeName","src":"2247:7:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2239:25:91","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"},"valueType":{"id":24908,"name":"uint8","nodeType":"ElementaryTypeName","src":"2258:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}},"visibility":"private"},{"baseFunctions":[27278],"body":{"id":25201,"nodeType":"Block","src":"3552:2302:91","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":24936,"name":"__OwnerPausable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24065,"src":"3558:20:91","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":24937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3558:22:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24938,"nodeType":"ExpressionStatement","src":"3558:22:91"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":24939,"name":"__ReentrancyGuard_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8388,"src":"3586:22:91","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":24940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3586:24:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24941,"nodeType":"ExpressionStatement","src":"3586:24:91"},{"assignments":[24943],"declarations":[{"constant":false,"id":24943,"mutability":"mutable","name":"numPooledTokens","nameLocation":"3625:15:91","nodeType":"VariableDeclaration","scope":25201,"src":"3617:23:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24942,"name":"uint256","nodeType":"ElementaryTypeName","src":"3617:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24946,"initialValue":{"expression":{"id":24944,"name":"_pooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24915,"src":"3643:13:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":24945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3657:6:91","memberName":"length","nodeType":"MemberAccess","src":"3643:20:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3617:46:91"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24948,"name":"numPooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24943,"src":"3730:15:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24952,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"expression":{"id":24949,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"3748:9:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":24950,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3758:21:91","memberName":"MINIMUM_POOLED_TOKENS","nodeType":"MemberAccess","referencedDeclaration":29259,"src":"3748:31:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":24951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3782:1:91","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3748:35:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3730:53:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5f706f6f6c6564546f6b656e732e6c656e67746820696e73756666696369656e74","id":24954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3785:35:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_d942505f5a21659daedb4f74215666300f325ec8e6deb29a6240331f6ece39d6","typeString":"literal_string \"_pooledTokens.length insufficient\""},"value":"_pooledTokens.length insufficient"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d942505f5a21659daedb4f74215666300f325ec8e6deb29a6240331f6ece39d6","typeString":"literal_string \"_pooledTokens.length insufficient\""}],"id":24947,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3722:7:91","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3722:99:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24956,"nodeType":"ExpressionStatement","src":"3722:99:91"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24958,"name":"numPooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24943,"src":"3835:15:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24962,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"expression":{"id":24959,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"3853:9:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":24960,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3863:21:91","memberName":"MAXIMUM_POOLED_TOKENS","nodeType":"MemberAccess","referencedDeclaration":29262,"src":"3853:31:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":24961,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3887:1:91","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3853:35:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3835:53:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5f706f6f6c6564546f6b656e732e6c656e67746820746f6f206c61726765","id":24964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3890:32:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_a7a86fffacc19e5c55f7740c49d3c43b8158ebebe8d693c955c37638cd63750e","typeString":"literal_string \"_pooledTokens.length too large\""},"value":"_pooledTokens.length too large"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a7a86fffacc19e5c55f7740c49d3c43b8158ebebe8d693c955c37638cd63750e","typeString":"literal_string \"_pooledTokens.length too large\""}],"id":24957,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3827:7:91","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3827:96:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24966,"nodeType":"ExpressionStatement","src":"3827:96:91"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24968,"name":"numPooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24943,"src":"3937:15:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":24969,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24918,"src":"3956:8:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[] memory"}},"id":24970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3965:6:91","memberName":"length","nodeType":"MemberAccess","src":"3956:15:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3937:34:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5f706f6f6c6564546f6b656e7320646563696d616c73206d69736d61746368","id":24972,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3973:33:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_920ab7aea64abf6f625f3ec866769a336d71d85943ea085dcc6d4f83565e10e2","typeString":"literal_string \"_pooledTokens decimals mismatch\""},"value":"_pooledTokens decimals mismatch"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_920ab7aea64abf6f625f3ec866769a336d71d85943ea085dcc6d4f83565e10e2","typeString":"literal_string \"_pooledTokens decimals mismatch\""}],"id":24967,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3929:7:91","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3929:78:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24974,"nodeType":"ExpressionStatement","src":"3929:78:91"},{"assignments":[24979],"declarations":[{"constant":false,"id":24979,"mutability":"mutable","name":"precisionMultipliers","nameLocation":"4031:20:91","nodeType":"VariableDeclaration","scope":25201,"src":"4014:37:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":24977,"name":"uint256","nodeType":"ElementaryTypeName","src":"4014:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24978,"nodeType":"ArrayTypeName","src":"4014:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":24986,"initialValue":{"arguments":[{"expression":{"id":24983,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24918,"src":"4068:8:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[] memory"}},"id":24984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4077:6:91","memberName":"length","nodeType":"MemberAccess","src":"4068:15:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24982,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"4054:13:91","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":24980,"name":"uint256","nodeType":"ElementaryTypeName","src":"4058:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24981,"nodeType":"ArrayTypeName","src":"4058:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":24985,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4054:30:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"4014:70:91"},{"body":{"id":25082,"nodeType":"Block","src":"4134:647:91","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24994,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24988,"src":"4146:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":24995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4151:1:91","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4146:6:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25020,"nodeType":"IfStatement","src":"4142:254:91","trueBody":{"id":25019,"nodeType":"Block","src":"4154:242:91","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":25015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":25007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":24998,"name":"tokenIndexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24910,"src":"4263:12:91","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":25005,"indexExpression":{"arguments":[{"baseExpression":{"id":25001,"name":"_pooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24915,"src":"4284:13:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":25003,"indexExpression":{"id":25002,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24988,"src":"4298:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4284:16:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":25000,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4276:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24999,"name":"address","nodeType":"ElementaryTypeName","src":"4276:7:91","typeDescriptions":{}}},"id":25004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4276:25:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4263:39:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":25006,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4306:1:91","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4263:44:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"id":25014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":25008,"name":"_pooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24915,"src":"4311:13:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":25010,"indexExpression":{"hexValue":"30","id":25009,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4325:1:91","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4311:16:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"baseExpression":{"id":25011,"name":"_pooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24915,"src":"4331:13:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":25013,"indexExpression":{"id":25012,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24988,"src":"4345:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4331:16:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"src":"4311:36:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4263:84:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4475706c696361746520746f6b656e73","id":25016,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4359:18:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_468e0bfcb3e3ab0378a7d7aca9480e7f3c9394926fb120f85a78a58c132177eb","typeString":"literal_string \"Duplicate tokens\""},"value":"Duplicate tokens"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_468e0bfcb3e3ab0378a7d7aca9480e7f3c9394926fb120f85a78a58c132177eb","typeString":"literal_string \"Duplicate tokens\""}],"id":24997,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4244:7:91","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4244:143:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25018,"nodeType":"ExpressionStatement","src":"4244:143:91"}]}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":25032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"id":25024,"name":"_pooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24915,"src":"4419:13:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":25026,"indexExpression":{"id":25025,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24988,"src":"4433:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4419:16:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":25023,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4411:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":25022,"name":"address","nodeType":"ElementaryTypeName","src":"4411:7:91","typeDescriptions":{}}},"id":25027,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4411:25:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":25030,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4448:1:91","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":25029,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4440:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":25028,"name":"address","nodeType":"ElementaryTypeName","src":"4440:7:91","typeDescriptions":{}}},"id":25031,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4440:10:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4411:39:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546865203020616464726573732069736e277420616e204552432d3230","id":25033,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4452:31:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_b906ee6e71cd5815b0e043fe7cf4686b9eba5c13a6e0a21a7bb55e8a6681b39d","typeString":"literal_string \"The 0 address isn't an ERC-20\""},"value":"The 0 address isn't an ERC-20"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b906ee6e71cd5815b0e043fe7cf4686b9eba5c13a6e0a21a7bb55e8a6681b39d","typeString":"literal_string \"The 0 address isn't an ERC-20\""}],"id":25021,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4403:7:91","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4403:81:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25035,"nodeType":"ExpressionStatement","src":"4403:81:91"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":25044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":25037,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24918,"src":"4500:8:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[] memory"}},"id":25039,"indexExpression":{"id":25038,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24988,"src":"4509:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4500:11:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":25043,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"expression":{"id":25040,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"4514:9:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":25041,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4524:23:91","memberName":"POOL_PRECISION_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":29266,"src":"4514:33:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":25042,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4550:1:91","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4514:37:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"4500:51:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e20646563696d616c732065786365656473206d6178","id":25045,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4553:28:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_3659d4e5f95ff79d6b4bfc4ef30ecea959c6574585372b1f2b55fd5d9b45e4f4","typeString":"literal_string \"Token decimals exceeds max\""},"value":"Token decimals exceeds max"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3659d4e5f95ff79d6b4bfc4ef30ecea959c6574585372b1f2b55fd5d9b45e4f4","typeString":"literal_string \"Token decimals exceeds max\""}],"id":25036,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4492:7:91","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4492:90:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25047,"nodeType":"ExpressionStatement","src":"4492:90:91"},{"expression":{"id":25062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":25048,"name":"precisionMultipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24979,"src":"4590:20:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":25050,"indexExpression":{"id":25049,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24988,"src":"4611:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4590:23:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":25051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4616:2:91","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":25059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":25054,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"4628:9:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":25055,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4638:23:91","memberName":"POOL_PRECISION_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":29266,"src":"4628:33:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":25056,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24918,"src":"4664:8:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[] memory"}},"id":25058,"indexExpression":{"id":25057,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24988,"src":"4673:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4664:11:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"4628:47:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":25053,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4620:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":25052,"name":"uint256","nodeType":"ElementaryTypeName","src":"4620:7:91","typeDescriptions":{}}},"id":25060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4620:56:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4616:60:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4590:86:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25063,"nodeType":"ExpressionStatement","src":"4590:86:91"},{"expression":{"id":25076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":25064,"name":"tokenIndexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24910,"src":"4684:12:91","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":25071,"indexExpression":{"arguments":[{"baseExpression":{"id":25067,"name":"_pooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24915,"src":"4705:13:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":25069,"indexExpression":{"id":25068,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24988,"src":"4719:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4705:16:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":25066,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4697:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":25065,"name":"address","nodeType":"ElementaryTypeName","src":"4697:7:91","typeDescriptions":{}}},"id":25070,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4697:25:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4684:39:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":25074,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24988,"src":"4732:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":25073,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4726:5:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":25072,"name":"uint8","nodeType":"ElementaryTypeName","src":"4726:5:91","typeDescriptions":{}}},"id":25075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4726:8:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"4684:50:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":25077,"nodeType":"ExpressionStatement","src":"4684:50:91"},{"id":25081,"nodeType":"UncheckedBlock","src":"4743:32:91","statements":[{"expression":{"id":25079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4763:3:91","subExpression":{"id":25078,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24988,"src":"4765:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25080,"nodeType":"ExpressionStatement","src":"4763:3:91"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24991,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24988,"src":"4111:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":24992,"name":"numPooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24943,"src":"4115:15:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4111:19:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25083,"initializationExpression":{"assignments":[24988],"declarations":[{"constant":false,"id":24988,"mutability":"mutable","name":"i","nameLocation":"4104:1:91","nodeType":"VariableDeclaration","scope":25083,"src":"4096:9:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24987,"name":"uint256","nodeType":"ElementaryTypeName","src":"4096:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24990,"initialValue":{"hexValue":"30","id":24989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4108:1:91","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4096:13:91"},"nodeType":"ForStatement","src":"4091:690:91"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25085,"name":"_a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24924,"src":"4853:2:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":25086,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"4858:9:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":25087,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4868:5:91","memberName":"MAX_A","nodeType":"MemberAccess","referencedDeclaration":29294,"src":"4858:15:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4853:20:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5f612065786365656473206d6178696d756d","id":25089,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4875:20:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_6d10d9193d6dae542704df3b3ab8bcf0eeb6847d3d136ed4b04aee07a7f72dfe","typeString":"literal_string \"_a exceeds maximum\""},"value":"_a exceeds maximum"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6d10d9193d6dae542704df3b3ab8bcf0eeb6847d3d136ed4b04aee07a7f72dfe","typeString":"literal_string \"_a exceeds maximum\""}],"id":25084,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4845:7:91","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4845:51:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25091,"nodeType":"ExpressionStatement","src":"4845:51:91"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25093,"name":"_fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24926,"src":"4910:4:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":25094,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"4917:9:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":25095,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4927:12:91","memberName":"MAX_SWAP_FEE","nodeType":"MemberAccess","referencedDeclaration":29274,"src":"4917:22:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4910:29:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5f6665652065786365656473206d6178696d756d","id":25097,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4941:22:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_c2ec1c8b95f7fdd82a9cd723ab25579d58e30b4630228130b1c03ae94813d95b","typeString":"literal_string \"_fee exceeds maximum\""},"value":"_fee exceeds maximum"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c2ec1c8b95f7fdd82a9cd723ab25579d58e30b4630228130b1c03ae94813d95b","typeString":"literal_string \"_fee exceeds maximum\""}],"id":25092,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4902:7:91","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4902:62:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25099,"nodeType":"ExpressionStatement","src":"4902:62:91"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25101,"name":"_adminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24928,"src":"4978:9:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":25102,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"4990:9:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":25103,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5000:13:91","memberName":"MAX_ADMIN_FEE","nodeType":"MemberAccess","referencedDeclaration":29278,"src":"4990:23:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4978:35:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5f61646d696e4665652065786365656473206d6178696d756d","id":25105,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5015:27:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_5e9995c4674de2ad727ffbe3c3110784ecdbab72c3e1a2bdc6129e561bb0f370","typeString":"literal_string \"_adminFee exceeds maximum\""},"value":"_adminFee exceeds maximum"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5e9995c4674de2ad727ffbe3c3110784ecdbab72c3e1a2bdc6129e561bb0f370","typeString":"literal_string \"_adminFee exceeds maximum\""}],"id":25100,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4970:7:91","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4970:73:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25107,"nodeType":"ExpressionStatement","src":"4970:73:91"},{"assignments":[25110],"declarations":[{"constant":false,"id":25110,"mutability":"mutable","name":"lpToken","nameLocation":"5095:7:91","nodeType":"VariableDeclaration","scope":25201,"src":"5087:15:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"},"typeName":{"id":25109,"nodeType":"UserDefinedTypeName","pathNode":{"id":25108,"name":"LPToken","nameLocations":["5087:7:91"],"nodeType":"IdentifierPath","referencedDeclaration":23179,"src":"5087:7:91"},"referencedDeclaration":23179,"src":"5087:7:91","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"visibility":"internal"}],"id":25117,"initialValue":{"arguments":[{"arguments":[{"id":25114,"name":"lpTokenTargetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24930,"src":"5126:20:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25112,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9871,"src":"5113:6:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Clones_$9871_$","typeString":"type(library Clones)"}},"id":25113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5120:5:91","memberName":"clone","nodeType":"MemberAccess","referencedDeclaration":9814,"src":"5113:12:91","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_address_$","typeString":"function (address) returns (address)"}},"id":25115,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5113:34:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25111,"name":"LPToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23179,"src":"5105:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LPToken_$23179_$","typeString":"type(contract LPToken)"}},"id":25116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5105:43:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"nodeType":"VariableDeclarationStatement","src":"5087:61:91"},{"expression":{"arguments":[{"arguments":[{"id":25121,"name":"lpTokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24920,"src":"5181:11:91","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":25122,"name":"lpTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24922,"src":"5194:13:91","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":25119,"name":"lpToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25110,"src":"5162:7:91","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":25120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5170:10:91","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":23097,"src":"5162:18:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_bool_$","typeString":"function (string memory,string memory) external returns (bool)"}},"id":25123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5162:46:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f756c64206e6f7420696e6974206c70546f6b656e20636c6f6e65","id":25124,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5210:30:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_ef06697a0ef9ea911497bdcdba4dca4da1254e21c81d969c12b4cc8c2147f5f7","typeString":"literal_string \"could not init lpToken clone\""},"value":"could not init lpToken clone"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ef06697a0ef9ea911497bdcdba4dca4da1254e21c81d969c12b4cc8c2147f5f7","typeString":"literal_string \"could not init lpToken clone\""}],"id":25118,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5154:7:91","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5154:87:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25126,"nodeType":"ExpressionStatement","src":"5154:87:91"},{"expression":{"id":25131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":25127,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"5285:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25129,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5297:7:91","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":34365,"src":"5285:19:91","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":25130,"name":"lpToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25110,"src":"5307:7:91","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"src":"5285:29:91","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":25132,"nodeType":"ExpressionStatement","src":"5285:29:91"},{"expression":{"id":25137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":25133,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"5320:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25135,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5332:12:91","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"5320:24:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":25136,"name":"_pooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24915,"src":"5347:13:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"src":"5320:40:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":25138,"nodeType":"ExpressionStatement","src":"5320:40:91"},{"expression":{"id":25143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":25139,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"5366:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25141,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5378:25:91","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":34372,"src":"5366:37:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":25142,"name":"precisionMultipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24979,"src":"5406:20:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"5366:60:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":25144,"nodeType":"ExpressionStatement","src":"5366:60:91"},{"expression":{"id":25153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":25145,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"5432:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25147,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5444:8:91","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"5432:20:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":25151,"name":"numPooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24943,"src":"5469:15:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":25150,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"5455:13:91","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":25148,"name":"uint256","nodeType":"ElementaryTypeName","src":"5459:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25149,"nodeType":"ArrayTypeName","src":"5459:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":25152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5455:30:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"5432:53:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":25154,"nodeType":"ExpressionStatement","src":"5432:53:91"},{"expression":{"id":25163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":25155,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"5491:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25157,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5503:9:91","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":34378,"src":"5491:21:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":25161,"name":"numPooledTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24943,"src":"5529:15:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":25160,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"5515:13:91","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":25158,"name":"uint256","nodeType":"ElementaryTypeName","src":"5519:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25159,"nodeType":"ArrayTypeName","src":"5519:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":25162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5515:30:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"5491:54:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":25164,"nodeType":"ExpressionStatement","src":"5491:54:91"},{"expression":{"id":25172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":25165,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"5551:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25167,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5563:8:91","memberName":"initialA","nodeType":"MemberAccess","referencedDeclaration":34352,"src":"5551:20:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25168,"name":"_a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24924,"src":"5574:2:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":25169,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"5579:9:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":25170,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5589:11:91","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"5579:21:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5574:26:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5551:49:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25173,"nodeType":"ExpressionStatement","src":"5551:49:91"},{"expression":{"id":25181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":25174,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"5606:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25176,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5618:7:91","memberName":"futureA","nodeType":"MemberAccess","referencedDeclaration":34354,"src":"5606:19:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25177,"name":"_a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24924,"src":"5628:2:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":25178,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"5633:9:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":25179,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5643:11:91","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"5633:21:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5628:26:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5606:48:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25182,"nodeType":"ExpressionStatement","src":"5606:48:91"},{"expression":{"id":25187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":25183,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"5733:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25185,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5745:7:91","memberName":"swapFee","nodeType":"MemberAccess","referencedDeclaration":34360,"src":"5733:19:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":25186,"name":"_fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24926,"src":"5755:4:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5733:26:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25188,"nodeType":"ExpressionStatement","src":"5733:26:91"},{"expression":{"id":25193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":25189,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"5765:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25191,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5777:8:91","memberName":"adminFee","nodeType":"MemberAccess","referencedDeclaration":34362,"src":"5765:20:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":25192,"name":"_adminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24928,"src":"5788:9:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5765:32:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25194,"nodeType":"ExpressionStatement","src":"5765:32:91"},{"eventCall":{"arguments":[{"id":25196,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"5825:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},{"expression":{"id":25197,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5838:3:91","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5842:6:91","memberName":"sender","nodeType":"MemberAccess","src":"5838:10:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"},{"typeIdentifier":"t_address","typeString":"address"}],"id":25195,"name":"SwapInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24903,"src":"5809:15:91","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_struct$_Swap_$34379_memory_ptr_$_t_address_$returns$__$","typeString":"function (struct SwapUtilsExternal.Swap memory,address)"}},"id":25199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5809:40:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25200,"nodeType":"EmitStatement","src":"5804:45:91"}]},"documentation":{"id":24911,"nodeType":"StructuredDocumentation","src":"2335:943:91","text":" @notice Initializes this Swap contract with the given parameters.\n This will also clone a LPToken contract that represents users'\n LP positions. The owner of LPToken will be this contract - which means\n only this contract is allowed to mint/burn tokens.\n @param _pooledTokens an array of ERC20s this pool will accept\n @param decimals the decimals to use for each pooled token,\n eg 8 for WBTC. Cannot be larger than POOL_PRECISION_DECIMALS\n @param lpTokenName the long-form name of the token to be deployed\n @param lpTokenSymbol the short symbol for the token to be deployed\n @param _a the amplification coefficient * n ** (n - 1). See the\n StableSwap paper for details\n @param _fee default swap fee to be initialized with\n @param _adminFee default adminFee to be initialized with\n @param lpTokenTargetAddress the address of an existing LPToken contract to use as a target"},"functionSelector":"b28cb6dc","id":25202,"implemented":true,"kind":"function","modifiers":[{"id":24934,"kind":"modifierInvocation","modifierName":{"id":24933,"name":"initializer","nameLocations":["3540:11:91"],"nodeType":"IdentifierPath","referencedDeclaration":8140,"src":"3540:11:91"},"nodeType":"ModifierInvocation","src":"3540:11:91"}],"name":"initialize","nameLocation":"3290:10:91","nodeType":"FunctionDefinition","overrides":{"id":24932,"nodeType":"OverrideSpecifier","overrides":[],"src":"3531:8:91"},"parameters":{"id":24931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24915,"mutability":"mutable","name":"_pooledTokens","nameLocation":"3322:13:91","nodeType":"VariableDeclaration","scope":25202,"src":"3306:29:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":24913,"nodeType":"UserDefinedTypeName","pathNode":{"id":24912,"name":"IERC20","nameLocations":["3306:6:91"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"3306:6:91"},"referencedDeclaration":10812,"src":"3306:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":24914,"nodeType":"ArrayTypeName","src":"3306:8:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":24918,"mutability":"mutable","name":"decimals","nameLocation":"3356:8:91","nodeType":"VariableDeclaration","scope":25202,"src":"3341:23:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[]"},"typeName":{"baseType":{"id":24916,"name":"uint8","nodeType":"ElementaryTypeName","src":"3341:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":24917,"nodeType":"ArrayTypeName","src":"3341:7:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_storage_ptr","typeString":"uint8[]"}},"visibility":"internal"},{"constant":false,"id":24920,"mutability":"mutable","name":"lpTokenName","nameLocation":"3384:11:91","nodeType":"VariableDeclaration","scope":25202,"src":"3370:25:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":24919,"name":"string","nodeType":"ElementaryTypeName","src":"3370:6:91","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":24922,"mutability":"mutable","name":"lpTokenSymbol","nameLocation":"3415:13:91","nodeType":"VariableDeclaration","scope":25202,"src":"3401:27:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":24921,"name":"string","nodeType":"ElementaryTypeName","src":"3401:6:91","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":24924,"mutability":"mutable","name":"_a","nameLocation":"3442:2:91","nodeType":"VariableDeclaration","scope":25202,"src":"3434:10:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24923,"name":"uint256","nodeType":"ElementaryTypeName","src":"3434:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24926,"mutability":"mutable","name":"_fee","nameLocation":"3458:4:91","nodeType":"VariableDeclaration","scope":25202,"src":"3450:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24925,"name":"uint256","nodeType":"ElementaryTypeName","src":"3450:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24928,"mutability":"mutable","name":"_adminFee","nameLocation":"3476:9:91","nodeType":"VariableDeclaration","scope":25202,"src":"3468:17:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24927,"name":"uint256","nodeType":"ElementaryTypeName","src":"3468:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24930,"mutability":"mutable","name":"lpTokenTargetAddress","nameLocation":"3499:20:91","nodeType":"VariableDeclaration","scope":25202,"src":"3491:28:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24929,"name":"address","nodeType":"ElementaryTypeName","src":"3491:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3300:223:91"},"returnParameters":{"id":24935,"nodeType":"ParameterList","parameters":[],"src":"3552:0:91"},"scope":25825,"src":"3281:2573:91","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":25216,"nodeType":"Block","src":"6084:74:91","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":25208,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"6098:5:91","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":25209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6104:9:91","memberName":"timestamp","nodeType":"MemberAccess","src":"6098:15:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":25210,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25205,"src":"6117:8:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6098:27:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"446561646c696e65206e6f74206d6574","id":25212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6127:18:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_a167df2a4d2ab6c5ee865e91ee543461cb54682b898fb54f9c2d17424e75a781","typeString":"literal_string \"Deadline not met\""},"value":"Deadline not met"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a167df2a4d2ab6c5ee865e91ee543461cb54682b898fb54f9c2d17424e75a781","typeString":"literal_string \"Deadline not met\""}],"id":25207,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6090:7:91","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6090:56:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25214,"nodeType":"ExpressionStatement","src":"6090:56:91"},{"id":25215,"nodeType":"PlaceholderStatement","src":"6152:1:91"}]},"documentation":{"id":25203,"nodeType":"StructuredDocumentation","src":"5900:140:91","text":" @notice Modifier to check deadline against current timestamp\n @param deadline latest timestamp to accept this transaction"},"id":25217,"name":"deadlineCheck","nameLocation":"6052:13:91","nodeType":"ModifierDefinition","parameters":{"id":25206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25205,"mutability":"mutable","name":"deadline","nameLocation":"6074:8:91","nodeType":"VariableDeclaration","scope":25217,"src":"6066:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25204,"name":"uint256","nodeType":"ElementaryTypeName","src":"6066:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6065:18:91"},"src":"6043:115:91","virtual":false,"visibility":"internal"},{"baseFunctions":[27158],"body":{"id":25228,"nodeType":"Block","src":"6418:36:91","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25224,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"6431:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25225,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6443:4:91","memberName":"getA","nodeType":"MemberAccess","referencedDeclaration":34427,"src":"6431:16:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_view$_t_struct$_Swap_$34379_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer) view returns (uint256)"}},"id":25226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6431:18:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25223,"id":25227,"nodeType":"Return","src":"6424:25:91"}]},"documentation":{"id":25218,"nodeType":"StructuredDocumentation","src":"6209:149:91","text":" @notice Return A, the amplification coefficient * n ** (n - 1)\n @dev See the StableSwap paper for details\n @return A parameter"},"functionSelector":"d46300fd","id":25229,"implemented":true,"kind":"function","modifiers":[],"name":"getA","nameLocation":"6370:4:91","nodeType":"FunctionDefinition","overrides":{"id":25220,"nodeType":"OverrideSpecifier","overrides":[],"src":"6391:8:91"},"parameters":{"id":25219,"nodeType":"ParameterList","parameters":[],"src":"6374:2:91"},"returnParameters":{"id":25223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25222,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25229,"src":"6409:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25221,"name":"uint256","nodeType":"ElementaryTypeName","src":"6409:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6408:9:91"},"scope":25825,"src":"6361:93:91","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":25239,"nodeType":"Block","src":"6671:43:91","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25235,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"6684:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25236,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6696:11:91","memberName":"getAPrecise","nodeType":"MemberAccess","referencedDeclaration":34441,"src":"6684:23:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_view$_t_struct$_Swap_$34379_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer) view returns (uint256)"}},"id":25237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6684:25:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25234,"id":25238,"nodeType":"Return","src":"6677:32:91"}]},"documentation":{"id":25230,"nodeType":"StructuredDocumentation","src":"6458:155:91","text":" @notice Return A in its raw precision form\n @dev See the StableSwap paper for details\n @return A parameter in its raw precision form"},"functionSelector":"0ba81959","id":25240,"implemented":true,"kind":"function","modifiers":[],"name":"getAPrecise","nameLocation":"6625:11:91","nodeType":"FunctionDefinition","parameters":{"id":25231,"nodeType":"ParameterList","parameters":[],"src":"6636:2:91"},"returnParameters":{"id":25234,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25233,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25240,"src":"6662:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25232,"name":"uint256","nodeType":"ElementaryTypeName","src":"6662:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6661:9:91"},"scope":25825,"src":"6616:98:91","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[27166],"body":{"id":25264,"nodeType":"Block","src":"6992:119:91","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25251,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25243,"src":"7006:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":25252,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"7014:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25253,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7026:12:91","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"7014:24:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":25254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7039:6:91","memberName":"length","nodeType":"MemberAccess","src":"7014:31:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7006:39:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f7574206f662072616e6765","id":25256,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7047:14:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_c8de02deba8e639087754d5067b8a43e5887b03be7353558822d412acbff2048","typeString":"literal_string \"Out of range\""},"value":"Out of range"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c8de02deba8e639087754d5067b8a43e5887b03be7353558822d412acbff2048","typeString":"literal_string \"Out of range\""}],"id":25250,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6998:7:91","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6998:64:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25258,"nodeType":"ExpressionStatement","src":"6998:64:91"},{"expression":{"baseExpression":{"expression":{"id":25259,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"7075:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25260,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7087:12:91","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"7075:24:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":25262,"indexExpression":{"id":25261,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25243,"src":"7100:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7075:31:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"functionReturnParameters":25249,"id":25263,"nodeType":"Return","src":"7068:38:91"}]},"documentation":{"id":25241,"nodeType":"StructuredDocumentation","src":"6718:202:91","text":" @notice Return address of the pooled token at given index. Reverts if tokenIndex is out of range.\n @param index the index of the token\n @return address of the token at given index"},"functionSelector":"82b86600","id":25265,"implemented":true,"kind":"function","modifiers":[],"name":"getToken","nameLocation":"6932:8:91","nodeType":"FunctionDefinition","overrides":{"id":25245,"nodeType":"OverrideSpecifier","overrides":[],"src":"6966:8:91"},"parameters":{"id":25244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25243,"mutability":"mutable","name":"index","nameLocation":"6947:5:91","nodeType":"VariableDeclaration","scope":25265,"src":"6941:11:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25242,"name":"uint8","nodeType":"ElementaryTypeName","src":"6941:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"6940:13:91"},"returnParameters":{"id":25249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25248,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25265,"src":"6984:6:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":25247,"nodeType":"UserDefinedTypeName","pathNode":{"id":25246,"name":"IERC20","nameLocations":["6984:6:91"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"6984:6:91"},"referencedDeclaration":10812,"src":"6984:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6983:8:91"},"scope":25825,"src":"6923:188:91","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[27173],"body":{"id":25294,"nodeType":"Block","src":"7407:148:91","statements":[{"assignments":[25275],"declarations":[{"constant":false,"id":25275,"mutability":"mutable","name":"index","nameLocation":"7419:5:91","nodeType":"VariableDeclaration","scope":25294,"src":"7413:11:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25274,"name":"uint8","nodeType":"ElementaryTypeName","src":"7413:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":25279,"initialValue":{"baseExpression":{"id":25276,"name":"tokenIndexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24910,"src":"7427:12:91","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":25278,"indexExpression":{"id":25277,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25268,"src":"7440:12:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7427:26:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"7413:40:91"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":25288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":25284,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25275,"src":"7484:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":25283,"name":"getToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25265,"src":"7475:8:91","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint8_$returns$_t_contract$_IERC20_$10812_$","typeString":"function (uint8) view returns (contract IERC20)"}},"id":25285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7475:15:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":25282,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7467:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":25281,"name":"address","nodeType":"ElementaryTypeName","src":"7467:7:91","typeDescriptions":{}}},"id":25286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7467:24:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":25287,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25268,"src":"7495:12:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7467:40:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e20646f6573206e6f74206578697374","id":25289,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7509:22:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_547be7f5ed2d17cca91d35e8212265e350385ed13daeee07722cf3e686dd6726","typeString":"literal_string \"Token does not exist\""},"value":"Token does not exist"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_547be7f5ed2d17cca91d35e8212265e350385ed13daeee07722cf3e686dd6726","typeString":"literal_string \"Token does not exist\""}],"id":25280,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7459:7:91","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7459:73:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25291,"nodeType":"ExpressionStatement","src":"7459:73:91"},{"expression":{"id":25292,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25275,"src":"7545:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":25273,"id":25293,"nodeType":"Return","src":"7538:12:91"}]},"documentation":{"id":25266,"nodeType":"StructuredDocumentation","src":"7115:207:91","text":" @notice Return the index of the given token address. Reverts if no matching\n token is found.\n @param tokenAddress address of the token\n @return the index of the given token address"},"functionSelector":"66c0bd24","id":25295,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenIndex","nameLocation":"7334:13:91","nodeType":"FunctionDefinition","overrides":{"id":25270,"nodeType":"OverrideSpecifier","overrides":[],"src":"7382:8:91"},"parameters":{"id":25269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25268,"mutability":"mutable","name":"tokenAddress","nameLocation":"7356:12:91","nodeType":"VariableDeclaration","scope":25295,"src":"7348:20:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25267,"name":"address","nodeType":"ElementaryTypeName","src":"7348:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7347:22:91"},"returnParameters":{"id":25273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25272,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25295,"src":"7400:5:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25271,"name":"uint8","nodeType":"ElementaryTypeName","src":"7400:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"7399:7:91"},"scope":25825,"src":"7325:230:91","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[27180],"body":{"id":25318,"nodeType":"Block","src":"7856:121:91","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25305,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25298,"src":"7870:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":25306,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"7878:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25307,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7890:12:91","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"7878:24:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":25308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7903:6:91","memberName":"length","nodeType":"MemberAccess","src":"7878:31:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7870:39:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e646578206f7574206f662072616e6765","id":25310,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7911:20:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_c9580fd05844cb84bf0a747c48ec42a21f1dca0bc044d3619707fb319eddae0d","typeString":"literal_string \"Index out of range\""},"value":"Index out of range"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c9580fd05844cb84bf0a747c48ec42a21f1dca0bc044d3619707fb319eddae0d","typeString":"literal_string \"Index out of range\""}],"id":25304,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7862:7:91","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7862:70:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25312,"nodeType":"ExpressionStatement","src":"7862:70:91"},{"expression":{"baseExpression":{"expression":{"id":25313,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"7945:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25314,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7957:8:91","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"7945:20:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":25316,"indexExpression":{"id":25315,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25298,"src":"7966:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7945:27:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25303,"id":25317,"nodeType":"Return","src":"7938:34:91"}]},"documentation":{"id":25296,"nodeType":"StructuredDocumentation","src":"7559:215:91","text":" @notice Return current balance of the pooled token at given index\n @param index the index of the token\n @return current balance of the pooled token at given index with token's native precision"},"functionSelector":"91ceb3eb","id":25319,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenBalance","nameLocation":"7786:15:91","nodeType":"FunctionDefinition","overrides":{"id":25300,"nodeType":"OverrideSpecifier","overrides":[],"src":"7829:8:91"},"parameters":{"id":25299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25298,"mutability":"mutable","name":"index","nameLocation":"7808:5:91","nodeType":"VariableDeclaration","scope":25319,"src":"7802:11:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25297,"name":"uint8","nodeType":"ElementaryTypeName","src":"7802:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"7801:13:91"},"returnParameters":{"id":25303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25302,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25319,"src":"7847:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25301,"name":"uint256","nodeType":"ElementaryTypeName","src":"7847:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7846:9:91"},"scope":25825,"src":"7777:200:91","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[27185],"body":{"id":25330,"nodeType":"Block","src":"8192:47:91","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25326,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"8205:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25327,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8217:15:91","memberName":"getVirtualPrice","nodeType":"MemberAccess","referencedDeclaration":35250,"src":"8205:27:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_view$_t_struct$_Swap_$34379_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer) view returns (uint256)"}},"id":25328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8205:29:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25325,"id":25329,"nodeType":"Return","src":"8198:36:91"}]},"documentation":{"id":25320,"nodeType":"StructuredDocumentation","src":"7981:140:91","text":" @notice Get the virtual price, to help calculate profit\n @return the virtual price, scaled to the POOL_PRECISION_DECIMALS"},"functionSelector":"e25aa5fa","id":25331,"implemented":true,"kind":"function","modifiers":[],"name":"getVirtualPrice","nameLocation":"8133:15:91","nodeType":"FunctionDefinition","overrides":{"id":25322,"nodeType":"OverrideSpecifier","overrides":[],"src":"8165:8:91"},"parameters":{"id":25321,"nodeType":"ParameterList","parameters":[],"src":"8148:2:91"},"returnParameters":{"id":25325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25324,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25331,"src":"8183:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25323,"name":"uint256","nodeType":"ElementaryTypeName","src":"8183:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8182:9:91"},"scope":25825,"src":"8124:115:91","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[27196],"body":{"id":25351,"nodeType":"Block","src":"8776:77:91","statements":[{"expression":{"arguments":[{"id":25346,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25334,"src":"8815:14:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25347,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25336,"src":"8831:12:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25348,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25338,"src":"8845:2:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25344,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"8789:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25345,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8801:13:91","memberName":"calculateSwap","nodeType":"MemberAccess","referencedDeclaration":35480,"src":"8789:25:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_view$_t_struct$_Swap_$34379_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint8,uint8,uint256) view returns (uint256)"}},"id":25349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8789:59:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25343,"id":25350,"nodeType":"Return","src":"8782:66:91"}]},"documentation":{"id":25332,"nodeType":"StructuredDocumentation","src":"8243:396:91","text":" @notice Calculate amount of tokens you receive on swap\n @param tokenIndexFrom the token the user wants to sell\n @param tokenIndexTo the token the user wants to buy\n @param dx the amount of tokens the user wants to sell. If the token charges\n a fee on transfers, use the amount that gets transferred after the fee.\n @return amount of tokens the user will receive"},"functionSelector":"a95b089f","id":25352,"implemented":true,"kind":"function","modifiers":[],"name":"calculateSwap","nameLocation":"8651:13:91","nodeType":"FunctionDefinition","overrides":{"id":25340,"nodeType":"OverrideSpecifier","overrides":[],"src":"8749:8:91"},"parameters":{"id":25339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25334,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"8676:14:91","nodeType":"VariableDeclaration","scope":25352,"src":"8670:20:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25333,"name":"uint8","nodeType":"ElementaryTypeName","src":"8670:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":25336,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"8702:12:91","nodeType":"VariableDeclaration","scope":25352,"src":"8696:18:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25335,"name":"uint8","nodeType":"ElementaryTypeName","src":"8696:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":25338,"mutability":"mutable","name":"dx","nameLocation":"8728:2:91","nodeType":"VariableDeclaration","scope":25352,"src":"8720:10:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25337,"name":"uint256","nodeType":"ElementaryTypeName","src":"8720:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8664:70:91"},"returnParameters":{"id":25343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25342,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25352,"src":"8767:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25341,"name":"uint256","nodeType":"ElementaryTypeName","src":"8767:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8766:9:91"},"scope":25825,"src":"8642:211:91","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[27207],"body":{"id":25372,"nodeType":"Block","src":"9297:80:91","statements":[{"expression":{"arguments":[{"id":25367,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25355,"src":"9339:14:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25368,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25357,"src":"9355:12:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25369,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25359,"src":"9369:2:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25365,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"9310:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25366,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9322:16:91","memberName":"calculateSwapInv","nodeType":"MemberAccess","referencedDeclaration":35508,"src":"9310:28:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_view$_t_struct$_Swap_$34379_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint8,uint8,uint256) view returns (uint256)"}},"id":25370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9310:62:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25364,"id":25371,"nodeType":"Return","src":"9303:69:91"}]},"documentation":{"id":25353,"nodeType":"StructuredDocumentation","src":"8857:300:91","text":" @notice Calculate amount of tokens you receive on swap\n @param tokenIndexFrom the token the user wants to sell\n @param tokenIndexTo the token the user wants to buy\n @param dy the amount of tokens the user wants to buy\n @return amount of tokens the user have to transfer"},"functionSelector":"6b1dc08b","id":25373,"implemented":true,"kind":"function","modifiers":[],"name":"calculateSwapOut","nameLocation":"9169:16:91","nodeType":"FunctionDefinition","overrides":{"id":25361,"nodeType":"OverrideSpecifier","overrides":[],"src":"9270:8:91"},"parameters":{"id":25360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25355,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"9197:14:91","nodeType":"VariableDeclaration","scope":25373,"src":"9191:20:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25354,"name":"uint8","nodeType":"ElementaryTypeName","src":"9191:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":25357,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"9223:12:91","nodeType":"VariableDeclaration","scope":25373,"src":"9217:18:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25356,"name":"uint8","nodeType":"ElementaryTypeName","src":"9217:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":25359,"mutability":"mutable","name":"dy","nameLocation":"9249:2:91","nodeType":"VariableDeclaration","scope":25373,"src":"9241:10:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25358,"name":"uint256","nodeType":"ElementaryTypeName","src":"9241:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9185:70:91"},"returnParameters":{"id":25364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25363,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25373,"src":"9288:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25362,"name":"uint256","nodeType":"ElementaryTypeName","src":"9288:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9287:9:91"},"scope":25825,"src":"9160:217:91","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[27218],"body":{"id":25405,"nodeType":"Block","src":"9834:184:91","statements":[{"assignments":[25387],"declarations":[{"constant":false,"id":25387,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"9846:14:91","nodeType":"VariableDeclaration","scope":25405,"src":"9840:20:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25386,"name":"uint8","nodeType":"ElementaryTypeName","src":"9840:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":25391,"initialValue":{"arguments":[{"id":25389,"name":"assetIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25376,"src":"9877:7:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25388,"name":"getTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25295,"src":"9863:13:91","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint8_$","typeString":"function (address) view returns (uint8)"}},"id":25390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9863:22:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"9840:45:91"},{"assignments":[25393],"declarations":[{"constant":false,"id":25393,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"9897:12:91","nodeType":"VariableDeclaration","scope":25405,"src":"9891:18:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25392,"name":"uint8","nodeType":"ElementaryTypeName","src":"9891:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":25397,"initialValue":{"arguments":[{"id":25395,"name":"assetOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25378,"src":"9926:8:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25394,"name":"getTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25295,"src":"9912:13:91","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint8_$","typeString":"function (address) view returns (uint8)"}},"id":25396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9912:23:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"9891:44:91"},{"expression":{"arguments":[{"id":25400,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25387,"src":"9974:14:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25401,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25393,"src":"9990:12:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25402,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25380,"src":"10004:8:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25398,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"9948:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25399,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9960:13:91","memberName":"calculateSwap","nodeType":"MemberAccess","referencedDeclaration":35480,"src":"9948:25:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_view$_t_struct$_Swap_$34379_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint8,uint8,uint256) view returns (uint256)"}},"id":25403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9948:65:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25385,"id":25404,"nodeType":"Return","src":"9941:72:91"}]},"documentation":{"id":25374,"nodeType":"StructuredDocumentation","src":"9381:306:91","text":" @notice Calculate amount of tokens you receive on swap\n @param assetIn the token the user wants to swap from\n @param assetOut the token the user wants to swap to\n @param amountIn the amount of tokens the user wants to swap from\n @return amount of tokens the user will receive"},"functionSelector":"7f41e7ef","id":25406,"implemented":true,"kind":"function","modifiers":[],"name":"calculateSwapFromAddress","nameLocation":"9699:24:91","nodeType":"FunctionDefinition","overrides":{"id":25382,"nodeType":"OverrideSpecifier","overrides":[],"src":"9807:8:91"},"parameters":{"id":25381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25376,"mutability":"mutable","name":"assetIn","nameLocation":"9737:7:91","nodeType":"VariableDeclaration","scope":25406,"src":"9729:15:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25375,"name":"address","nodeType":"ElementaryTypeName","src":"9729:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25378,"mutability":"mutable","name":"assetOut","nameLocation":"9758:8:91","nodeType":"VariableDeclaration","scope":25406,"src":"9750:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25377,"name":"address","nodeType":"ElementaryTypeName","src":"9750:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25380,"mutability":"mutable","name":"amountIn","nameLocation":"9780:8:91","nodeType":"VariableDeclaration","scope":25406,"src":"9772:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25379,"name":"uint256","nodeType":"ElementaryTypeName","src":"9772:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9723:69:91"},"returnParameters":{"id":25385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25384,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25406,"src":"9825:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25383,"name":"uint256","nodeType":"ElementaryTypeName","src":"9825:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9824:9:91"},"scope":25825,"src":"9690:328:91","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[27229],"body":{"id":25438,"nodeType":"Block","src":"10478:188:91","statements":[{"assignments":[25420],"declarations":[{"constant":false,"id":25420,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"10490:14:91","nodeType":"VariableDeclaration","scope":25438,"src":"10484:20:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25419,"name":"uint8","nodeType":"ElementaryTypeName","src":"10484:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":25424,"initialValue":{"arguments":[{"id":25422,"name":"assetIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25409,"src":"10521:7:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25421,"name":"getTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25295,"src":"10507:13:91","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint8_$","typeString":"function (address) view returns (uint8)"}},"id":25423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10507:22:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"10484:45:91"},{"assignments":[25426],"declarations":[{"constant":false,"id":25426,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"10541:12:91","nodeType":"VariableDeclaration","scope":25438,"src":"10535:18:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25425,"name":"uint8","nodeType":"ElementaryTypeName","src":"10535:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":25430,"initialValue":{"arguments":[{"id":25428,"name":"assetOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25411,"src":"10570:8:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25427,"name":"getTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25295,"src":"10556:13:91","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint8_$","typeString":"function (address) view returns (uint8)"}},"id":25429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10556:23:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"10535:44:91"},{"expression":{"arguments":[{"id":25433,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25420,"src":"10621:14:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25434,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25426,"src":"10637:12:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25435,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25413,"src":"10651:9:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25431,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"10592:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25432,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10604:16:91","memberName":"calculateSwapInv","nodeType":"MemberAccess","referencedDeclaration":35508,"src":"10592:28:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_view$_t_struct$_Swap_$34379_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint8,uint8,uint256) view returns (uint256)"}},"id":25436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10592:69:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25418,"id":25437,"nodeType":"Return","src":"10585:76:91"}]},"documentation":{"id":25407,"nodeType":"StructuredDocumentation","src":"10022:305:91","text":" @notice Calculate amount of tokens you receive on swap\n @param assetIn the token the user wants to swap from\n @param assetOut the token the user wants to swap to\n @param amountOut the amount of tokens the user wants to swap to\n @return amount of tokens the user will receive"},"functionSelector":"f9a15fb9","id":25439,"implemented":true,"kind":"function","modifiers":[],"name":"calculateSwapOutFromAddress","nameLocation":"10339:27:91","nodeType":"FunctionDefinition","overrides":{"id":25415,"nodeType":"OverrideSpecifier","overrides":[],"src":"10451:8:91"},"parameters":{"id":25414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25409,"mutability":"mutable","name":"assetIn","nameLocation":"10380:7:91","nodeType":"VariableDeclaration","scope":25439,"src":"10372:15:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25408,"name":"address","nodeType":"ElementaryTypeName","src":"10372:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25411,"mutability":"mutable","name":"assetOut","nameLocation":"10401:8:91","nodeType":"VariableDeclaration","scope":25439,"src":"10393:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25410,"name":"address","nodeType":"ElementaryTypeName","src":"10393:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25413,"mutability":"mutable","name":"amountOut","nameLocation":"10423:9:91","nodeType":"VariableDeclaration","scope":25439,"src":"10415:17:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25412,"name":"uint256","nodeType":"ElementaryTypeName","src":"10415:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10366:70:91"},"returnParameters":{"id":25418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25417,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25439,"src":"10469:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25416,"name":"uint256","nodeType":"ElementaryTypeName","src":"10469:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10468:9:91"},"scope":25825,"src":"10330:336:91","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[27239],"body":{"id":25457,"nodeType":"Block","src":"11484:68:91","statements":[{"expression":{"arguments":[{"id":25453,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25443,"src":"11530:7:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},{"id":25454,"name":"deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25445,"src":"11539:7:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":25451,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"11497:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25452,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11509:20:91","memberName":"calculateTokenAmount","nodeType":"MemberAccess","referencedDeclaration":35964,"src":"11497:32:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_view$_t_struct$_Swap_$34379_storage_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bool_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint256[] memory,bool) view returns (uint256)"}},"id":25455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11497:50:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25450,"id":25456,"nodeType":"Return","src":"11490:57:91"}]},"documentation":{"id":25440,"nodeType":"StructuredDocumentation","src":"10670:698:91","text":" @notice A simple method to calculate prices from deposits or\n withdrawals, excluding fees but including slippage. This is\n helpful as an input into the various \"min\" parameters on calls\n to fight front-running\n @dev This shouldn't be used outside frontends for user estimates.\n @param amounts an array of token amounts to deposit or withdrawal,\n corresponding to pooledTokens. The amount should be in each\n pooled token's native precision. If a token charges a fee on transfers,\n use the amount that gets transferred after the fee.\n @param deposit whether this is a deposit or a withdrawal\n @return token amount the user will receive"},"functionSelector":"e6ab2806","id":25458,"implemented":true,"kind":"function","modifiers":[],"name":"calculateTokenAmount","nameLocation":"11380:20:91","nodeType":"FunctionDefinition","overrides":{"id":25447,"nodeType":"OverrideSpecifier","overrides":[],"src":"11457:8:91"},"parameters":{"id":25446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25443,"mutability":"mutable","name":"amounts","nameLocation":"11420:7:91","nodeType":"VariableDeclaration","scope":25458,"src":"11401:26:91","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":25441,"name":"uint256","nodeType":"ElementaryTypeName","src":"11401:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25442,"nodeType":"ArrayTypeName","src":"11401:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":25445,"mutability":"mutable","name":"deposit","nameLocation":"11434:7:91","nodeType":"VariableDeclaration","scope":25458,"src":"11429:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25444,"name":"bool","nodeType":"ElementaryTypeName","src":"11429:4:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11400:42:91"},"returnParameters":{"id":25450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25449,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25458,"src":"11475:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25448,"name":"uint256","nodeType":"ElementaryTypeName","src":"11475:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11474:9:91"},"scope":25825,"src":"11371:181:91","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[27247],"body":{"id":25473,"nodeType":"Block","src":"11946:62:91","statements":[{"expression":{"arguments":[{"id":25470,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25461,"src":"11996:6:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25468,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"11959:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25469,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11971:24:91","memberName":"calculateRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":35767,"src":"11959:36:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_view$_t_struct$_Swap_$34379_storage_ptr_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint256) view returns (uint256[] memory)"}},"id":25471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11959:44:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":25467,"id":25472,"nodeType":"Return","src":"11952:51:91"}]},"documentation":{"id":25459,"nodeType":"StructuredDocumentation","src":"11556:287:91","text":" @notice A simple method to calculate amount of each underlying\n tokens that is returned upon burning given amount of LP tokens\n @param amount the amount of LP tokens that would be burned on withdrawal\n @return array of token balances that the user will receive"},"functionSelector":"f2fad2b6","id":25474,"implemented":true,"kind":"function","modifiers":[],"name":"calculateRemoveLiquidity","nameLocation":"11855:24:91","nodeType":"FunctionDefinition","overrides":{"id":25463,"nodeType":"OverrideSpecifier","overrides":[],"src":"11910:8:91"},"parameters":{"id":25462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25461,"mutability":"mutable","name":"amount","nameLocation":"11888:6:91","nodeType":"VariableDeclaration","scope":25474,"src":"11880:14:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25460,"name":"uint256","nodeType":"ElementaryTypeName","src":"11880:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11879:16:91"},"returnParameters":{"id":25467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25466,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25474,"src":"11928:16:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":25464,"name":"uint256","nodeType":"ElementaryTypeName","src":"11928:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25465,"nodeType":"ArrayTypeName","src":"11928:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11927:18:91"},"scope":25825,"src":"11846:162:91","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[27256],"body":{"id":25491,"nodeType":"Block","src":"12521:80:91","statements":[{"expression":{"arguments":[{"id":25487,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25477,"src":"12572:11:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25488,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25479,"src":"12585:10:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":25485,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"12534:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25486,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12546:25:91","memberName":"calculateWithdrawOneToken","nodeType":"MemberAccess","referencedDeclaration":34510,"src":"12534:37:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_view$_t_struct$_Swap_$34379_storage_ptr_$_t_uint256_$_t_uint8_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint256,uint8) view returns (uint256)"}},"id":25489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12534:62:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25484,"id":25490,"nodeType":"Return","src":"12527:69:91"}]},"documentation":{"id":25475,"nodeType":"StructuredDocumentation","src":"12012:345:91","text":" @notice Calculate the amount of underlying token available to withdraw\n when withdrawing via only single token\n @param tokenAmount the amount of LP token to burn\n @param tokenIndex index of which token will be withdrawn\n @return availableTokenAmount calculated amount of underlying token\n available to withdraw"},"functionSelector":"342a87a1","id":25492,"implemented":true,"kind":"function","modifiers":[],"name":"calculateRemoveLiquidityOneToken","nameLocation":"12369:32:91","nodeType":"FunctionDefinition","overrides":{"id":25481,"nodeType":"OverrideSpecifier","overrides":[],"src":"12467:8:91"},"parameters":{"id":25480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25477,"mutability":"mutable","name":"tokenAmount","nameLocation":"12410:11:91","nodeType":"VariableDeclaration","scope":25492,"src":"12402:19:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25476,"name":"uint256","nodeType":"ElementaryTypeName","src":"12402:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25479,"mutability":"mutable","name":"tokenIndex","nameLocation":"12429:10:91","nodeType":"VariableDeclaration","scope":25492,"src":"12423:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25478,"name":"uint8","nodeType":"ElementaryTypeName","src":"12423:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"12401:39:91"},"returnParameters":{"id":25484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25483,"mutability":"mutable","name":"availableTokenAmount","nameLocation":"12497:20:91","nodeType":"VariableDeclaration","scope":25492,"src":"12489:28:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25482,"name":"uint256","nodeType":"ElementaryTypeName","src":"12489:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12488:30:91"},"scope":25825,"src":"12360:241:91","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":25505,"nodeType":"Block","src":"12893:52:91","statements":[{"expression":{"arguments":[{"id":25502,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25495,"src":"12934:5:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25500,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"12906:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25501,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12918:15:91","memberName":"getAdminBalance","nodeType":"MemberAccess","referencedDeclaration":35990,"src":"12906:27:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_view$_t_struct$_Swap_$34379_storage_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint256) view returns (uint256)"}},"id":25503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12906:34:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25499,"id":25504,"nodeType":"Return","src":"12899:41:91"}]},"documentation":{"id":25493,"nodeType":"StructuredDocumentation","src":"12605:213:91","text":" @notice This function reads the accumulated amount of admin fees of the token with given index\n @param index Index of the pooled token\n @return admin's token balance in the token's precision"},"functionSelector":"ef0a712f","id":25506,"implemented":true,"kind":"function","modifiers":[],"name":"getAdminBalance","nameLocation":"12830:15:91","nodeType":"FunctionDefinition","parameters":{"id":25496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25495,"mutability":"mutable","name":"index","nameLocation":"12854:5:91","nodeType":"VariableDeclaration","scope":25506,"src":"12846:13:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25494,"name":"uint256","nodeType":"ElementaryTypeName","src":"12846:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12845:15:91"},"returnParameters":{"id":25499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25498,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25506,"src":"12884:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25497,"name":"uint256","nodeType":"ElementaryTypeName","src":"12884:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12883:9:91"},"scope":25825,"src":"12821:124:91","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[27123],"body":{"id":25538,"nodeType":"Block","src":"13600:75:91","statements":[{"expression":{"arguments":[{"id":25532,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25509,"src":"13630:14:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25533,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25511,"src":"13646:12:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25534,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25513,"src":"13660:2:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25535,"name":"minDy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25515,"src":"13664:5:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25530,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"13613:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13625:4:91","memberName":"swap","nodeType":"MemberAccess","referencedDeclaration":36181,"src":"13613:16:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_Swap_$34379_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint8,uint8,uint256,uint256) returns (uint256)"}},"id":25536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13613:57:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25529,"id":25537,"nodeType":"Return","src":"13606:64:91"}]},"documentation":{"id":25507,"nodeType":"StructuredDocumentation","src":"13000:385:91","text":" @notice Swap two tokens using this pool\n @param tokenIndexFrom the token the user wants to swap from\n @param tokenIndexTo the token the user wants to swap to\n @param dx the amount of tokens the user wants to swap from\n @param minDy the min amount the user would like to receive, or revert.\n @param deadline latest timestamp to accept this transaction"},"functionSelector":"91695586","id":25539,"implemented":true,"kind":"function","modifiers":[{"id":25521,"kind":"modifierInvocation","modifierName":{"id":25520,"name":"nonReentrant","nameLocations":["13531:12:91"],"nodeType":"IdentifierPath","referencedDeclaration":8409,"src":"13531:12:91"},"nodeType":"ModifierInvocation","src":"13531:12:91"},{"id":25523,"kind":"modifierInvocation","modifierName":{"id":25522,"name":"whenNotPaused","nameLocations":["13544:13:91"],"nodeType":"IdentifierPath","referencedDeclaration":8287,"src":"13544:13:91"},"nodeType":"ModifierInvocation","src":"13544:13:91"},{"arguments":[{"id":25525,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25517,"src":"13572:8:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":25526,"kind":"modifierInvocation","modifierName":{"id":25524,"name":"deadlineCheck","nameLocations":["13558:13:91"],"nodeType":"IdentifierPath","referencedDeclaration":25217,"src":"13558:13:91"},"nodeType":"ModifierInvocation","src":"13558:23:91"}],"name":"swap","nameLocation":"13397:4:91","nodeType":"FunctionDefinition","overrides":{"id":25519,"nodeType":"OverrideSpecifier","overrides":[],"src":"13522:8:91"},"parameters":{"id":25518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25509,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"13413:14:91","nodeType":"VariableDeclaration","scope":25539,"src":"13407:20:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25508,"name":"uint8","nodeType":"ElementaryTypeName","src":"13407:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":25511,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"13439:12:91","nodeType":"VariableDeclaration","scope":25539,"src":"13433:18:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25510,"name":"uint8","nodeType":"ElementaryTypeName","src":"13433:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":25513,"mutability":"mutable","name":"dx","nameLocation":"13465:2:91","nodeType":"VariableDeclaration","scope":25539,"src":"13457:10:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25512,"name":"uint256","nodeType":"ElementaryTypeName","src":"13457:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25515,"mutability":"mutable","name":"minDy","nameLocation":"13481:5:91","nodeType":"VariableDeclaration","scope":25539,"src":"13473:13:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25514,"name":"uint256","nodeType":"ElementaryTypeName","src":"13473:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25517,"mutability":"mutable","name":"deadline","nameLocation":"13500:8:91","nodeType":"VariableDeclaration","scope":25539,"src":"13492:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25516,"name":"uint256","nodeType":"ElementaryTypeName","src":"13492:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13401:111:91"},"returnParameters":{"id":25529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25528,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25539,"src":"13591:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25527,"name":"uint256","nodeType":"ElementaryTypeName","src":"13591:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13590:9:91"},"scope":25825,"src":"13388:287:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[27138],"body":{"id":25583,"nodeType":"Block","src":"14228:189:91","statements":[{"assignments":[25564],"declarations":[{"constant":false,"id":25564,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"14240:14:91","nodeType":"VariableDeclaration","scope":25583,"src":"14234:20:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25563,"name":"uint8","nodeType":"ElementaryTypeName","src":"14234:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":25568,"initialValue":{"arguments":[{"id":25566,"name":"assetIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25544,"src":"14271:7:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25565,"name":"getTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25295,"src":"14257:13:91","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint8_$","typeString":"function (address) view returns (uint8)"}},"id":25567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14257:22:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"14234:45:91"},{"assignments":[25570],"declarations":[{"constant":false,"id":25570,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"14291:12:91","nodeType":"VariableDeclaration","scope":25583,"src":"14285:18:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25569,"name":"uint8","nodeType":"ElementaryTypeName","src":"14285:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":25574,"initialValue":{"arguments":[{"id":25572,"name":"assetOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25546,"src":"14320:8:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25571,"name":"getTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25295,"src":"14306:13:91","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint8_$","typeString":"function (address) view returns (uint8)"}},"id":25573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14306:23:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"14285:44:91"},{"expression":{"arguments":[{"id":25577,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25564,"src":"14359:14:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25578,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25570,"src":"14375:12:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25579,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25542,"src":"14389:8:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25580,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25548,"src":"14399:12:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25575,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"14342:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25576,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14354:4:91","memberName":"swap","nodeType":"MemberAccess","referencedDeclaration":36181,"src":"14342:16:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_Swap_$34379_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint8,uint8,uint256,uint256) returns (uint256)"}},"id":25581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14342:70:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25562,"id":25582,"nodeType":"Return","src":"14335:77:91"}]},"documentation":{"id":25540,"nodeType":"StructuredDocumentation","src":"13679:315:91","text":" @notice Swap two tokens using this pool\n @param assetIn the token the user wants to swap from\n @param assetOut the token the user wants to swap to\n @param amountIn the amount of tokens the user wants to swap from\n @param minAmountOut the min amount of tokens the user wants to swap to"},"functionSelector":"d460f0a2","id":25584,"implemented":true,"kind":"function","modifiers":[{"id":25554,"kind":"modifierInvocation","modifierName":{"id":25553,"name":"nonReentrant","nameLocations":["14159:12:91"],"nodeType":"IdentifierPath","referencedDeclaration":8409,"src":"14159:12:91"},"nodeType":"ModifierInvocation","src":"14159:12:91"},{"id":25556,"kind":"modifierInvocation","modifierName":{"id":25555,"name":"whenNotPaused","nameLocations":["14172:13:91"],"nodeType":"IdentifierPath","referencedDeclaration":8287,"src":"14172:13:91"},"nodeType":"ModifierInvocation","src":"14172:13:91"},{"arguments":[{"id":25558,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25550,"src":"14200:8:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":25559,"kind":"modifierInvocation","modifierName":{"id":25557,"name":"deadlineCheck","nameLocations":["14186:13:91"],"nodeType":"IdentifierPath","referencedDeclaration":25217,"src":"14186:13:91"},"nodeType":"ModifierInvocation","src":"14186:23:91"}],"name":"swapExact","nameLocation":"14006:9:91","nodeType":"FunctionDefinition","overrides":{"id":25552,"nodeType":"OverrideSpecifier","overrides":[],"src":"14150:8:91"},"parameters":{"id":25551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25542,"mutability":"mutable","name":"amountIn","nameLocation":"14029:8:91","nodeType":"VariableDeclaration","scope":25584,"src":"14021:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25541,"name":"uint256","nodeType":"ElementaryTypeName","src":"14021:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25544,"mutability":"mutable","name":"assetIn","nameLocation":"14051:7:91","nodeType":"VariableDeclaration","scope":25584,"src":"14043:15:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25543,"name":"address","nodeType":"ElementaryTypeName","src":"14043:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25546,"mutability":"mutable","name":"assetOut","nameLocation":"14072:8:91","nodeType":"VariableDeclaration","scope":25584,"src":"14064:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25545,"name":"address","nodeType":"ElementaryTypeName","src":"14064:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25548,"mutability":"mutable","name":"minAmountOut","nameLocation":"14094:12:91","nodeType":"VariableDeclaration","scope":25584,"src":"14086:20:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25547,"name":"uint256","nodeType":"ElementaryTypeName","src":"14086:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25550,"mutability":"mutable","name":"deadline","nameLocation":"14120:8:91","nodeType":"VariableDeclaration","scope":25584,"src":"14112:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25549,"name":"uint256","nodeType":"ElementaryTypeName","src":"14112:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14015:117:91"},"returnParameters":{"id":25562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25561,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25584,"src":"14219:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25560,"name":"uint256","nodeType":"ElementaryTypeName","src":"14219:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14218:9:91"},"scope":25825,"src":"13997:420:91","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[27153],"body":{"id":25628,"nodeType":"Block","src":"14973:192:91","statements":[{"assignments":[25609],"declarations":[{"constant":false,"id":25609,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"14985:14:91","nodeType":"VariableDeclaration","scope":25628,"src":"14979:20:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25608,"name":"uint8","nodeType":"ElementaryTypeName","src":"14979:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":25613,"initialValue":{"arguments":[{"id":25611,"name":"assetIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25589,"src":"15016:7:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25610,"name":"getTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25295,"src":"15002:13:91","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint8_$","typeString":"function (address) view returns (uint8)"}},"id":25612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15002:22:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"14979:45:91"},{"assignments":[25615],"declarations":[{"constant":false,"id":25615,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"15036:12:91","nodeType":"VariableDeclaration","scope":25628,"src":"15030:18:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25614,"name":"uint8","nodeType":"ElementaryTypeName","src":"15030:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":25619,"initialValue":{"arguments":[{"id":25617,"name":"assetOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25591,"src":"15065:8:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25616,"name":"getTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25295,"src":"15051:13:91","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint8_$","typeString":"function (address) view returns (uint8)"}},"id":25618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15051:23:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"15030:44:91"},{"expression":{"arguments":[{"id":25622,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25609,"src":"15107:14:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25623,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25615,"src":"15123:12:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25624,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25587,"src":"15137:9:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25625,"name":"maxAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25593,"src":"15148:11:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25620,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"15087:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25621,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15099:7:91","memberName":"swapOut","nodeType":"MemberAccess","referencedDeclaration":36358,"src":"15087:19:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_Swap_$34379_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint8,uint8,uint256,uint256) returns (uint256)"}},"id":25626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15087:73:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25607,"id":25627,"nodeType":"Return","src":"15080:80:91"}]},"documentation":{"id":25585,"nodeType":"StructuredDocumentation","src":"14421:315:91","text":" @notice Swap two tokens using this pool\n @param assetIn the token the user wants to swap from\n @param assetOut the token the user wants to swap to\n @param amountOut the amount of tokens the user wants to swap to\n @param maxAmountIn the max amount of tokens the user wants to swap from"},"functionSelector":"5428c117","id":25629,"implemented":true,"kind":"function","modifiers":[{"id":25599,"kind":"modifierInvocation","modifierName":{"id":25598,"name":"nonReentrant","nameLocations":["14904:12:91"],"nodeType":"IdentifierPath","referencedDeclaration":8409,"src":"14904:12:91"},"nodeType":"ModifierInvocation","src":"14904:12:91"},{"id":25601,"kind":"modifierInvocation","modifierName":{"id":25600,"name":"whenNotPaused","nameLocations":["14917:13:91"],"nodeType":"IdentifierPath","referencedDeclaration":8287,"src":"14917:13:91"},"nodeType":"ModifierInvocation","src":"14917:13:91"},{"arguments":[{"id":25603,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25595,"src":"14945:8:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":25604,"kind":"modifierInvocation","modifierName":{"id":25602,"name":"deadlineCheck","nameLocations":["14931:13:91"],"nodeType":"IdentifierPath","referencedDeclaration":25217,"src":"14931:13:91"},"nodeType":"ModifierInvocation","src":"14931:23:91"}],"name":"swapExactOut","nameLocation":"14748:12:91","nodeType":"FunctionDefinition","overrides":{"id":25597,"nodeType":"OverrideSpecifier","overrides":[],"src":"14895:8:91"},"parameters":{"id":25596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25587,"mutability":"mutable","name":"amountOut","nameLocation":"14774:9:91","nodeType":"VariableDeclaration","scope":25629,"src":"14766:17:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25586,"name":"uint256","nodeType":"ElementaryTypeName","src":"14766:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25589,"mutability":"mutable","name":"assetIn","nameLocation":"14797:7:91","nodeType":"VariableDeclaration","scope":25629,"src":"14789:15:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25588,"name":"address","nodeType":"ElementaryTypeName","src":"14789:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25591,"mutability":"mutable","name":"assetOut","nameLocation":"14818:8:91","nodeType":"VariableDeclaration","scope":25629,"src":"14810:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25590,"name":"address","nodeType":"ElementaryTypeName","src":"14810:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25593,"mutability":"mutable","name":"maxAmountIn","nameLocation":"14840:11:91","nodeType":"VariableDeclaration","scope":25629,"src":"14832:19:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25592,"name":"uint256","nodeType":"ElementaryTypeName","src":"14832:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25595,"mutability":"mutable","name":"deadline","nameLocation":"14865:8:91","nodeType":"VariableDeclaration","scope":25629,"src":"14857:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25594,"name":"uint256","nodeType":"ElementaryTypeName","src":"14857:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14760:117:91"},"returnParameters":{"id":25607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25606,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25629,"src":"14964:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25605,"name":"uint256","nodeType":"ElementaryTypeName","src":"14964:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14963:9:91"},"scope":25825,"src":"14739:426:91","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[27290],"body":{"id":25656,"nodeType":"Block","src":"15792:62:91","statements":[{"expression":{"arguments":[{"id":25652,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25633,"src":"15830:7:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},{"id":25653,"name":"minToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25635,"src":"15839:9:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25650,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"15805:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25651,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15817:12:91","memberName":"addLiquidity","nodeType":"MemberAccess","referencedDeclaration":36746,"src":"15805:24:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_Swap_$34379_storage_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint256[] memory,uint256) returns (uint256)"}},"id":25654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15805:44:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25649,"id":25655,"nodeType":"Return","src":"15798:51:91"}]},"documentation":{"id":25630,"nodeType":"StructuredDocumentation","src":"15169:430:91","text":" @notice Add liquidity to the pool with the given amounts of tokens\n @param amounts the amounts of each token to add, in their native precision\n @param minToMint the minimum LP tokens adding this amount of liquidity\n should mint, otherwise revert. Handy for front-running mitigation\n @param deadline latest timestamp to accept this transaction\n @return amount of LP token user minted and received"},"functionSelector":"4d49e87d","id":25657,"implemented":true,"kind":"function","modifiers":[{"id":25641,"kind":"modifierInvocation","modifierName":{"id":25640,"name":"nonReentrant","nameLocations":["15723:12:91"],"nodeType":"IdentifierPath","referencedDeclaration":8409,"src":"15723:12:91"},"nodeType":"ModifierInvocation","src":"15723:12:91"},{"id":25643,"kind":"modifierInvocation","modifierName":{"id":25642,"name":"whenNotPaused","nameLocations":["15736:13:91"],"nodeType":"IdentifierPath","referencedDeclaration":8287,"src":"15736:13:91"},"nodeType":"ModifierInvocation","src":"15736:13:91"},{"arguments":[{"id":25645,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25637,"src":"15764:8:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":25646,"kind":"modifierInvocation","modifierName":{"id":25644,"name":"deadlineCheck","nameLocations":["15750:13:91"],"nodeType":"IdentifierPath","referencedDeclaration":25217,"src":"15750:13:91"},"nodeType":"ModifierInvocation","src":"15750:23:91"}],"name":"addLiquidity","nameLocation":"15611:12:91","nodeType":"FunctionDefinition","overrides":{"id":25639,"nodeType":"OverrideSpecifier","overrides":[],"src":"15714:8:91"},"parameters":{"id":25638,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25633,"mutability":"mutable","name":"amounts","nameLocation":"15648:7:91","nodeType":"VariableDeclaration","scope":25657,"src":"15629:26:91","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":25631,"name":"uint256","nodeType":"ElementaryTypeName","src":"15629:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25632,"nodeType":"ArrayTypeName","src":"15629:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":25635,"mutability":"mutable","name":"minToMint","nameLocation":"15669:9:91","nodeType":"VariableDeclaration","scope":25657,"src":"15661:17:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25634,"name":"uint256","nodeType":"ElementaryTypeName","src":"15661:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25637,"mutability":"mutable","name":"deadline","nameLocation":"15692:8:91","nodeType":"VariableDeclaration","scope":25657,"src":"15684:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25636,"name":"uint256","nodeType":"ElementaryTypeName","src":"15684:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15623:81:91"},"returnParameters":{"id":25649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25648,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25657,"src":"15783:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25647,"name":"uint256","nodeType":"ElementaryTypeName","src":"15783:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15782:9:91"},"scope":25825,"src":"15602:252:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[27303],"body":{"id":25685,"nodeType":"Block","src":"16606:65:91","statements":[{"expression":{"arguments":[{"id":25681,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25660,"src":"16647:6:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25682,"name":"minAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25663,"src":"16655:10:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}],"expression":{"id":25679,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"16619:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25680,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16631:15:91","memberName":"removeLiquidity","nodeType":"MemberAccess","referencedDeclaration":36896,"src":"16619:27:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_Swap_$34379_storage_ptr_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint256,uint256[] memory) returns (uint256[] memory)"}},"id":25683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16619:47:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":25678,"id":25684,"nodeType":"Return","src":"16612:54:91"}]},"documentation":{"id":25658,"nodeType":"StructuredDocumentation","src":"15858:543:91","text":" @notice Burn LP tokens to remove liquidity from the pool. Withdraw fee that decays linearly\n over period of 4 weeks since last deposit will apply.\n @dev Liquidity can always be removed, even when the pool is paused.\n @param amount the amount of LP tokens to burn\n @param minAmounts the minimum amounts of each token in the pool\n        acceptable for this burn. Useful as a front-running mitigation\n @param deadline latest timestamp to accept this transaction\n @return amounts of tokens user received"},"functionSelector":"31cd52b0","id":25686,"implemented":true,"kind":"function","modifiers":[{"id":25669,"kind":"modifierInvocation","modifierName":{"id":25668,"name":"nonReentrant","nameLocations":["16528:12:91"],"nodeType":"IdentifierPath","referencedDeclaration":8409,"src":"16528:12:91"},"nodeType":"ModifierInvocation","src":"16528:12:91"},{"id":25671,"kind":"modifierInvocation","modifierName":{"id":25670,"name":"whenNotPaused","nameLocations":["16541:13:91"],"nodeType":"IdentifierPath","referencedDeclaration":8287,"src":"16541:13:91"},"nodeType":"ModifierInvocation","src":"16541:13:91"},{"arguments":[{"id":25673,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25665,"src":"16569:8:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":25674,"kind":"modifierInvocation","modifierName":{"id":25672,"name":"deadlineCheck","nameLocations":["16555:13:91"],"nodeType":"IdentifierPath","referencedDeclaration":25217,"src":"16555:13:91"},"nodeType":"ModifierInvocation","src":"16555:23:91"}],"name":"removeLiquidity","nameLocation":"16413:15:91","nodeType":"FunctionDefinition","overrides":{"id":25667,"nodeType":"OverrideSpecifier","overrides":[],"src":"16519:8:91"},"parameters":{"id":25666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25660,"mutability":"mutable","name":"amount","nameLocation":"16442:6:91","nodeType":"VariableDeclaration","scope":25686,"src":"16434:14:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25659,"name":"uint256","nodeType":"ElementaryTypeName","src":"16434:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25663,"mutability":"mutable","name":"minAmounts","nameLocation":"16473:10:91","nodeType":"VariableDeclaration","scope":25686,"src":"16454:29:91","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":25661,"name":"uint256","nodeType":"ElementaryTypeName","src":"16454:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25662,"nodeType":"ArrayTypeName","src":"16454:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":25665,"mutability":"mutable","name":"deadline","nameLocation":"16497:8:91","nodeType":"VariableDeclaration","scope":25686,"src":"16489:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25664,"name":"uint256","nodeType":"ElementaryTypeName","src":"16489:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16428:81:91"},"returnParameters":{"id":25678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25677,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25686,"src":"16588:16:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":25675,"name":"uint256","nodeType":"ElementaryTypeName","src":"16588:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25676,"nodeType":"ArrayTypeName","src":"16588:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"16587:18:91"},"scope":25825,"src":"16404:267:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[27316],"body":{"id":25715,"nodeType":"Block","src":"17378:89:91","statements":[{"expression":{"arguments":[{"id":25710,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25689,"src":"17427:11:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25711,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25691,"src":"17440:10:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25712,"name":"minAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25693,"src":"17452:9:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25708,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"17391:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25709,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17403:23:91","memberName":"removeLiquidityOneToken","nodeType":"MemberAccess","referencedDeclaration":37045,"src":"17391:35:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_Swap_$34379_storage_ptr_$_t_uint256_$_t_uint8_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint256,uint8,uint256) returns (uint256)"}},"id":25713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17391:71:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25707,"id":25714,"nodeType":"Return","src":"17384:78:91"}]},"documentation":{"id":25687,"nodeType":"StructuredDocumentation","src":"16675:484:91","text":" @notice Remove liquidity from the pool all in one token. Withdraw fee that decays linearly\n over period of 4 weeks since last deposit will apply.\n @param tokenAmount the amount of the token you want to receive\n @param tokenIndex the index of the token you want to receive\n @param minAmount the minimum amount to withdraw, otherwise revert\n @param deadline latest timestamp to accept this transaction\n @return amount of chosen token user received"},"functionSelector":"3e3a1560","id":25716,"implemented":true,"kind":"function","modifiers":[{"id":25699,"kind":"modifierInvocation","modifierName":{"id":25698,"name":"nonReentrant","nameLocations":["17309:12:91"],"nodeType":"IdentifierPath","referencedDeclaration":8409,"src":"17309:12:91"},"nodeType":"ModifierInvocation","src":"17309:12:91"},{"id":25701,"kind":"modifierInvocation","modifierName":{"id":25700,"name":"whenNotPaused","nameLocations":["17322:13:91"],"nodeType":"IdentifierPath","referencedDeclaration":8287,"src":"17322:13:91"},"nodeType":"ModifierInvocation","src":"17322:13:91"},{"arguments":[{"id":25703,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25695,"src":"17350:8:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":25704,"kind":"modifierInvocation","modifierName":{"id":25702,"name":"deadlineCheck","nameLocations":["17336:13:91"],"nodeType":"IdentifierPath","referencedDeclaration":25217,"src":"17336:13:91"},"nodeType":"ModifierInvocation","src":"17336:23:91"}],"name":"removeLiquidityOneToken","nameLocation":"17171:23:91","nodeType":"FunctionDefinition","overrides":{"id":25697,"nodeType":"OverrideSpecifier","overrides":[],"src":"17300:8:91"},"parameters":{"id":25696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25689,"mutability":"mutable","name":"tokenAmount","nameLocation":"17208:11:91","nodeType":"VariableDeclaration","scope":25716,"src":"17200:19:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25688,"name":"uint256","nodeType":"ElementaryTypeName","src":"17200:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25691,"mutability":"mutable","name":"tokenIndex","nameLocation":"17231:10:91","nodeType":"VariableDeclaration","scope":25716,"src":"17225:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25690,"name":"uint8","nodeType":"ElementaryTypeName","src":"17225:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":25693,"mutability":"mutable","name":"minAmount","nameLocation":"17255:9:91","nodeType":"VariableDeclaration","scope":25716,"src":"17247:17:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25692,"name":"uint256","nodeType":"ElementaryTypeName","src":"17247:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25695,"mutability":"mutable","name":"deadline","nameLocation":"17278:8:91","nodeType":"VariableDeclaration","scope":25716,"src":"17270:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25694,"name":"uint256","nodeType":"ElementaryTypeName","src":"17270:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17194:96:91"},"returnParameters":{"id":25707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25706,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25716,"src":"17369:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25705,"name":"uint256","nodeType":"ElementaryTypeName","src":"17369:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17368:9:91"},"scope":25825,"src":"17162:305:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[27328],"body":{"id":25743,"nodeType":"Block","src":"18181:78:91","statements":[{"expression":{"arguments":[{"id":25739,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25720,"src":"18231:7:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},{"id":25740,"name":"maxBurnAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25722,"src":"18240:13:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25737,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"18194:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25738,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18206:24:91","memberName":"removeLiquidityImbalance","nodeType":"MemberAccess","referencedDeclaration":37421,"src":"18194:36:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_Swap_$34379_storage_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint256[] memory,uint256) returns (uint256)"}},"id":25741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18194:60:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25736,"id":25742,"nodeType":"Return","src":"18187:67:91"}]},"documentation":{"id":25717,"nodeType":"StructuredDocumentation","src":"17471:501:91","text":" @notice Remove liquidity from the pool, weighted differently than the\n pool's current balances. Withdraw fee that decays linearly\n over period of 4 weeks since last deposit will apply.\n @param amounts how much of each token to withdraw\n @param maxBurnAmount the max LP token provider is willing to pay to\n remove liquidity. Useful as a front-running mitigation.\n @param deadline latest timestamp to accept this transaction\n @return amount of LP tokens burned"},"functionSelector":"84cdd9bc","id":25744,"implemented":true,"kind":"function","modifiers":[{"id":25728,"kind":"modifierInvocation","modifierName":{"id":25727,"name":"nonReentrant","nameLocations":["18112:12:91"],"nodeType":"IdentifierPath","referencedDeclaration":8409,"src":"18112:12:91"},"nodeType":"ModifierInvocation","src":"18112:12:91"},{"id":25730,"kind":"modifierInvocation","modifierName":{"id":25729,"name":"whenNotPaused","nameLocations":["18125:13:91"],"nodeType":"IdentifierPath","referencedDeclaration":8287,"src":"18125:13:91"},"nodeType":"ModifierInvocation","src":"18125:13:91"},{"arguments":[{"id":25732,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25724,"src":"18153:8:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":25733,"kind":"modifierInvocation","modifierName":{"id":25731,"name":"deadlineCheck","nameLocations":["18139:13:91"],"nodeType":"IdentifierPath","referencedDeclaration":25217,"src":"18139:13:91"},"nodeType":"ModifierInvocation","src":"18139:23:91"}],"name":"removeLiquidityImbalance","nameLocation":"17984:24:91","nodeType":"FunctionDefinition","overrides":{"id":25726,"nodeType":"OverrideSpecifier","overrides":[],"src":"18103:8:91"},"parameters":{"id":25725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25720,"mutability":"mutable","name":"amounts","nameLocation":"18033:7:91","nodeType":"VariableDeclaration","scope":25744,"src":"18014:26:91","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":25718,"name":"uint256","nodeType":"ElementaryTypeName","src":"18014:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25719,"nodeType":"ArrayTypeName","src":"18014:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":25722,"mutability":"mutable","name":"maxBurnAmount","nameLocation":"18054:13:91","nodeType":"VariableDeclaration","scope":25744,"src":"18046:21:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25721,"name":"uint256","nodeType":"ElementaryTypeName","src":"18046:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25724,"mutability":"mutable","name":"deadline","nameLocation":"18081:8:91","nodeType":"VariableDeclaration","scope":25744,"src":"18073:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25723,"name":"uint256","nodeType":"ElementaryTypeName","src":"18073:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18008:85:91"},"returnParameters":{"id":25736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25735,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25744,"src":"18172:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25734,"name":"uint256","nodeType":"ElementaryTypeName","src":"18172:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18171:9:91"},"scope":25825,"src":"17975:284:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":25759,"nodeType":"Block","src":"18443:49:91","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":25755,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7992,"src":"18479:5:91","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":25756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18479:7:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25752,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"18449:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25754,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18461:17:91","memberName":"withdrawAdminFees","nodeType":"MemberAccess","referencedDeclaration":37486,"src":"18449:29:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_Swap_$34379_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,address)"}},"id":25757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18449:38:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25758,"nodeType":"ExpressionStatement","src":"18449:38:91"}]},"documentation":{"id":25745,"nodeType":"StructuredDocumentation","src":"18311:68:91","text":" @notice Withdraw all admin fees to the contract owner"},"functionSelector":"0419b45a","id":25760,"implemented":true,"kind":"function","modifiers":[{"id":25748,"kind":"modifierInvocation","modifierName":{"id":25747,"name":"nonReentrant","nameLocations":["18420:12:91"],"nodeType":"IdentifierPath","referencedDeclaration":8409,"src":"18420:12:91"},"nodeType":"ModifierInvocation","src":"18420:12:91"},{"id":25750,"kind":"modifierInvocation","modifierName":{"id":25749,"name":"onlyOwner","nameLocations":["18433:9:91"],"nodeType":"IdentifierPath","referencedDeclaration":7983,"src":"18433:9:91"},"nodeType":"ModifierInvocation","src":"18433:9:91"}],"name":"withdrawAdminFees","nameLocation":"18391:17:91","nodeType":"FunctionDefinition","parameters":{"id":25746,"nodeType":"ParameterList","parameters":[],"src":"18408:2:91"},"returnParameters":{"id":25751,"nodeType":"ParameterList","parameters":[],"src":"18443:0:91"},"scope":25825,"src":"18382:110:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":25774,"nodeType":"Block","src":"18720:47:91","statements":[{"expression":{"arguments":[{"id":25771,"name":"newAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25763,"src":"18750:11:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25768,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"18726:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25770,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18738:11:91","memberName":"setAdminFee","nodeType":"MemberAccess","referencedDeclaration":37516,"src":"18726:23:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_Swap_$34379_storage_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint256)"}},"id":25772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18726:36:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25773,"nodeType":"ExpressionStatement","src":"18726:36:91"}]},"documentation":{"id":25761,"nodeType":"StructuredDocumentation","src":"18496:160:91","text":" @notice Update the admin fee. Admin fee takes portion of the swap fee.\n @param newAdminFee new admin fee to be applied on future transactions"},"functionSelector":"8beb60b6","id":25775,"implemented":true,"kind":"function","modifiers":[{"id":25766,"kind":"modifierInvocation","modifierName":{"id":25765,"name":"onlyOwner","nameLocations":["18710:9:91"],"nodeType":"IdentifierPath","referencedDeclaration":7983,"src":"18710:9:91"},"nodeType":"ModifierInvocation","src":"18710:9:91"}],"name":"setAdminFee","nameLocation":"18668:11:91","nodeType":"FunctionDefinition","parameters":{"id":25764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25763,"mutability":"mutable","name":"newAdminFee","nameLocation":"18688:11:91","nodeType":"VariableDeclaration","scope":25775,"src":"18680:19:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25762,"name":"uint256","nodeType":"ElementaryTypeName","src":"18680:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18679:21:91"},"returnParameters":{"id":25767,"nodeType":"ParameterList","parameters":[],"src":"18720:0:91"},"scope":25825,"src":"18659:108:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":25789,"nodeType":"Block","src":"18971:45:91","statements":[{"expression":{"arguments":[{"id":25786,"name":"newSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25778,"src":"19000:10:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25783,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"18977:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25785,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18989:10:91","memberName":"setSwapFee","nodeType":"MemberAccess","referencedDeclaration":37546,"src":"18977:22:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_Swap_$34379_storage_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint256)"}},"id":25787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18977:34:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25788,"nodeType":"ExpressionStatement","src":"18977:34:91"}]},"documentation":{"id":25776,"nodeType":"StructuredDocumentation","src":"18771:138:91","text":" @notice Update the swap fee to be applied on swaps\n @param newSwapFee new swap fee to be applied on future transactions"},"functionSelector":"34e19907","id":25790,"implemented":true,"kind":"function","modifiers":[{"id":25781,"kind":"modifierInvocation","modifierName":{"id":25780,"name":"onlyOwner","nameLocations":["18961:9:91"],"nodeType":"IdentifierPath","referencedDeclaration":7983,"src":"18961:9:91"},"nodeType":"ModifierInvocation","src":"18961:9:91"}],"name":"setSwapFee","nameLocation":"18921:10:91","nodeType":"FunctionDefinition","parameters":{"id":25779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25778,"mutability":"mutable","name":"newSwapFee","nameLocation":"18940:10:91","nodeType":"VariableDeclaration","scope":25790,"src":"18932:18:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25777,"name":"uint256","nodeType":"ElementaryTypeName","src":"18932:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18931:20:91"},"returnParameters":{"id":25782,"nodeType":"ParameterList","parameters":[],"src":"18971:0:91"},"scope":25825,"src":"18912:104:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":25807,"nodeType":"Block","src":"19417:49:91","statements":[{"expression":{"arguments":[{"id":25803,"name":"futureA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25793,"src":"19441:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25804,"name":"futureTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25795,"src":"19450:10:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25800,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"19423:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25802,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19435:5:91","memberName":"rampA","nodeType":"MemberAccess","referencedDeclaration":37665,"src":"19423:17:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_Swap_$34379_storage_ptr_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint256,uint256)"}},"id":25805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19423:38:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25806,"nodeType":"ExpressionStatement","src":"19423:38:91"}]},"documentation":{"id":25791,"nodeType":"StructuredDocumentation","src":"19020:323:91","text":" @notice Start ramping up or down A parameter towards given futureA and futureTime\n Checks if the change is too rapid, and commits the new A value only when it falls under\n the limit range.\n @param futureA the new A to ramp towards\n @param futureTime timestamp when the new A should be reached"},"functionSelector":"593d132c","id":25808,"implemented":true,"kind":"function","modifiers":[{"id":25798,"kind":"modifierInvocation","modifierName":{"id":25797,"name":"onlyOwner","nameLocations":["19407:9:91"],"nodeType":"IdentifierPath","referencedDeclaration":7983,"src":"19407:9:91"},"nodeType":"ModifierInvocation","src":"19407:9:91"}],"name":"rampA","nameLocation":"19355:5:91","nodeType":"FunctionDefinition","parameters":{"id":25796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25793,"mutability":"mutable","name":"futureA","nameLocation":"19369:7:91","nodeType":"VariableDeclaration","scope":25808,"src":"19361:15:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25792,"name":"uint256","nodeType":"ElementaryTypeName","src":"19361:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25795,"mutability":"mutable","name":"futureTime","nameLocation":"19386:10:91","nodeType":"VariableDeclaration","scope":25808,"src":"19378:18:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25794,"name":"uint256","nodeType":"ElementaryTypeName","src":"19378:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19360:37:91"},"returnParameters":{"id":25799,"nodeType":"ParameterList","parameters":[],"src":"19417:0:91"},"scope":25825,"src":"19346:120:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":25819,"nodeType":"Block","src":"19601:34:91","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25814,"name":"swapStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24906,"src":"19607:11:91","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage","typeString":"struct SwapUtilsExternal.Swap storage ref"}},"id":25816,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19619:9:91","memberName":"stopRampA","nodeType":"MemberAccess","referencedDeclaration":37720,"src":"19607:21:91","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_Swap_$34379_storage_ptr_$returns$__$bound_to$_t_struct$_Swap_$34379_storage_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer)"}},"id":25817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19607:23:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25818,"nodeType":"ExpressionStatement","src":"19607:23:91"}]},"documentation":{"id":25809,"nodeType":"StructuredDocumentation","src":"19470:88:91","text":" @notice Stop ramping A immediately. Reverts if ramp A is already stopped."},"functionSelector":"c4db7fa0","id":25820,"implemented":true,"kind":"function","modifiers":[{"id":25812,"kind":"modifierInvocation","modifierName":{"id":25811,"name":"onlyOwner","nameLocations":["19591:9:91"],"nodeType":"IdentifierPath","referencedDeclaration":7983,"src":"19591:9:91"},"nodeType":"ModifierInvocation","src":"19591:9:91"}],"name":"stopRampA","nameLocation":"19570:9:91","nodeType":"FunctionDefinition","parameters":{"id":25810,"nodeType":"ParameterList","parameters":[],"src":"19579:2:91"},"returnParameters":{"id":25813,"nodeType":"ParameterList","parameters":[],"src":"19601:0:91"},"scope":25825,"src":"19561:74:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"constant":false,"id":25824,"mutability":"mutable","name":"__GAP","nameLocation":"19702:5:91","nodeType":"VariableDeclaration","scope":25825,"src":"19682:25:91","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$48_storage","typeString":"uint256[48]"},"typeName":{"baseType":{"id":25821,"name":"uint256","nodeType":"ElementaryTypeName","src":"19682:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25823,"length":{"hexValue":"3438","id":25822,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19690:2:91","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},"nodeType":"ArrayTypeName","src":"19682:11:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$48_storage_ptr","typeString":"uint256[48]"}},"visibility":"private"}],"scope":25826,"src":"1562:18174:91","usedErrors":[]}],"src":"39:19698:91"},"id":91},"contracts/core/connext/interfaces/IAavePool.sol":{"ast":{"absolutePath":"contracts/core/connext/interfaces/IAavePool.sol","exportedSymbols":{"IAavePool":[25862]},"id":25863,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":25827,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:92"},{"abstract":false,"baseContracts":[],"canonicalName":"IAavePool","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":25862,"linearizedBaseContracts":[25862],"name":"IAavePool","nameLocation":"74:9:92","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":25828,"nodeType":"StructuredDocumentation","src":"88:426:92","text":" @dev Mints an `amount` of aTokens to the `onBehalfOf`\n @param asset The address of the underlying asset to mint\n @param amount The amount to mint\n @param onBehalfOf The address that will receive the aTokens\n @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man*"},"functionSelector":"69a933a5","id":25839,"implemented":false,"kind":"function","modifiers":[],"name":"mintUnbacked","nameLocation":"526:12:92","nodeType":"FunctionDefinition","parameters":{"id":25837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25830,"mutability":"mutable","name":"asset","nameLocation":"552:5:92","nodeType":"VariableDeclaration","scope":25839,"src":"544:13:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25829,"name":"address","nodeType":"ElementaryTypeName","src":"544:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25832,"mutability":"mutable","name":"amount","nameLocation":"571:6:92","nodeType":"VariableDeclaration","scope":25839,"src":"563:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25831,"name":"uint256","nodeType":"ElementaryTypeName","src":"563:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25834,"mutability":"mutable","name":"onBehalfOf","nameLocation":"591:10:92","nodeType":"VariableDeclaration","scope":25839,"src":"583:18:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25833,"name":"address","nodeType":"ElementaryTypeName","src":"583:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25836,"mutability":"mutable","name":"referralCode","nameLocation":"614:12:92","nodeType":"VariableDeclaration","scope":25839,"src":"607:19:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":25835,"name":"uint16","nodeType":"ElementaryTypeName","src":"607:6:92","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"538:92:92"},"returnParameters":{"id":25838,"nodeType":"ParameterList","parameters":[],"src":"639:0:92"},"scope":25862,"src":"517:123:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":25840,"nodeType":"StructuredDocumentation","src":"644:226:92","text":" @dev Back the current unbacked underlying with `amount` and pay `fee`.\n @param asset The address of the underlying asset to back\n @param amount The amount to back\n @param fee The amount paid in fees*"},"functionSelector":"d65dc7a1","id":25849,"implemented":false,"kind":"function","modifiers":[],"name":"backUnbacked","nameLocation":"882:12:92","nodeType":"FunctionDefinition","parameters":{"id":25847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25842,"mutability":"mutable","name":"asset","nameLocation":"908:5:92","nodeType":"VariableDeclaration","scope":25849,"src":"900:13:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25841,"name":"address","nodeType":"ElementaryTypeName","src":"900:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25844,"mutability":"mutable","name":"amount","nameLocation":"927:6:92","nodeType":"VariableDeclaration","scope":25849,"src":"919:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25843,"name":"uint256","nodeType":"ElementaryTypeName","src":"919:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25846,"mutability":"mutable","name":"fee","nameLocation":"947:3:92","nodeType":"VariableDeclaration","scope":25849,"src":"939:11:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25845,"name":"uint256","nodeType":"ElementaryTypeName","src":"939:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"894:60:92"},"returnParameters":{"id":25848,"nodeType":"ParameterList","parameters":[],"src":"963:0:92"},"scope":25862,"src":"873:91:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":25850,"nodeType":"StructuredDocumentation","src":"968:672:92","text":" @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\n E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\n @param asset The address of the underlying asset to withdraw\n @param amount The underlying amount to be withdrawn\n   - Send the value type(uint256).max in order to withdraw the whole aToken balance\n @param to The address that will receive the underlying, same as msg.sender if the user\n   wants to receive it on his own wallet, or a different address if the beneficiary is a\n   different wallet\n @return The final amount withdrawn*"},"functionSelector":"69328dec","id":25861,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"1652:8:92","nodeType":"FunctionDefinition","parameters":{"id":25857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25852,"mutability":"mutable","name":"asset","nameLocation":"1674:5:92","nodeType":"VariableDeclaration","scope":25861,"src":"1666:13:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25851,"name":"address","nodeType":"ElementaryTypeName","src":"1666:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25854,"mutability":"mutable","name":"amount","nameLocation":"1693:6:92","nodeType":"VariableDeclaration","scope":25861,"src":"1685:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25853,"name":"uint256","nodeType":"ElementaryTypeName","src":"1685:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25856,"mutability":"mutable","name":"to","nameLocation":"1713:2:92","nodeType":"VariableDeclaration","scope":25861,"src":"1705:10:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25855,"name":"address","nodeType":"ElementaryTypeName","src":"1705:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1660:59:92"},"returnParameters":{"id":25860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25859,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25861,"src":"1738:7:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25858,"name":"uint256","nodeType":"ElementaryTypeName","src":"1738:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1737:9:92"},"scope":25862,"src":"1643:104:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":25863,"src":"64:1685:92","usedErrors":[]}],"src":"39:1711:92"},"id":92},"contracts/core/connext/interfaces/IBridgeToken.sol":{"ast":{"absolutePath":"contracts/core/connext/interfaces/IBridgeToken.sol","exportedSymbols":{"IBridgeToken":[25890],"IERC20Metadata":[10837]},"id":25891,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":25864,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:93"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","id":25866,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25891,"sourceUnit":10838,"src":"71:97:93","symbolAliases":[{"foreign":{"id":25865,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10837,"src":"79:14:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":25867,"name":"IERC20Metadata","nameLocations":["196:14:93"],"nodeType":"IdentifierPath","referencedDeclaration":10837,"src":"196:14:93"},"id":25868,"nodeType":"InheritanceSpecifier","src":"196:14:93"}],"canonicalName":"IBridgeToken","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":25890,"linearizedBaseContracts":[25890,10837,10812],"name":"IBridgeToken","nameLocation":"180:12:93","nodeType":"ContractDefinition","nodes":[{"functionSelector":"9dc29fac","id":25875,"implemented":false,"kind":"function","modifiers":[],"name":"burn","nameLocation":"224:4:93","nodeType":"FunctionDefinition","parameters":{"id":25873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25870,"mutability":"mutable","name":"_from","nameLocation":"237:5:93","nodeType":"VariableDeclaration","scope":25875,"src":"229:13:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25869,"name":"address","nodeType":"ElementaryTypeName","src":"229:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25872,"mutability":"mutable","name":"_amnt","nameLocation":"252:5:93","nodeType":"VariableDeclaration","scope":25875,"src":"244:13:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25871,"name":"uint256","nodeType":"ElementaryTypeName","src":"244:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"228:30:93"},"returnParameters":{"id":25874,"nodeType":"ParameterList","parameters":[],"src":"267:0:93"},"scope":25890,"src":"215:53:93","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"40c10f19","id":25882,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"281:4:93","nodeType":"FunctionDefinition","parameters":{"id":25880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25877,"mutability":"mutable","name":"_to","nameLocation":"294:3:93","nodeType":"VariableDeclaration","scope":25882,"src":"286:11:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25876,"name":"address","nodeType":"ElementaryTypeName","src":"286:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25879,"mutability":"mutable","name":"_amnt","nameLocation":"307:5:93","nodeType":"VariableDeclaration","scope":25882,"src":"299:13:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25878,"name":"uint256","nodeType":"ElementaryTypeName","src":"299:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"285:28:93"},"returnParameters":{"id":25881,"nodeType":"ParameterList","parameters":[],"src":"322:0:93"},"scope":25890,"src":"272:51:93","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"b7b090ee","id":25889,"implemented":false,"kind":"function","modifiers":[],"name":"setDetails","nameLocation":"336:10:93","nodeType":"FunctionDefinition","parameters":{"id":25887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25884,"mutability":"mutable","name":"_name","nameLocation":"363:5:93","nodeType":"VariableDeclaration","scope":25889,"src":"347:21:93","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":25883,"name":"string","nodeType":"ElementaryTypeName","src":"347:6:93","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":25886,"mutability":"mutable","name":"_symbol","nameLocation":"386:7:93","nodeType":"VariableDeclaration","scope":25889,"src":"370:23:93","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":25885,"name":"string","nodeType":"ElementaryTypeName","src":"370:6:93","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"346:48:93"},"returnParameters":{"id":25888,"nodeType":"ParameterList","parameters":[],"src":"403:0:93"},"scope":25890,"src":"327:77:93","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":25891,"src":"170:236:93","usedErrors":[]}],"src":"46:361:93"},"id":93},"contracts/core/connext/interfaces/IConnext.sol":{"ast":{"absolutePath":"contracts/core/connext/interfaces/IConnext.sol","exportedSymbols":{"DestinationTransferStatus":[29324],"ExecuteArgs":[29365],"IConnext":[26846],"IDiamondCut":[26944],"IDiamondLoupe":[26985],"IERC20":[10812],"IStableSwap":[27329],"LibDiamond":[30596],"SwapUtils":[34244],"TokenId":[37728],"TransferInfo":[29351]},"id":26847,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":25892,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:94"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":25894,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26847,"sourceUnit":11155,"src":"64:79:94","symbolAliases":[{"foreign":{"id":25893,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10812,"src":"72:6:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/LibConnextStorage.sol","file":"../libraries/LibConnextStorage.sol","id":25898,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26847,"sourceUnit":29546,"src":"145:104:94","symbolAliases":[{"foreign":{"id":25895,"name":"ExecuteArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29365,"src":"153:11:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":25896,"name":"TransferInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29351,"src":"166:12:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":25897,"name":"DestinationTransferStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29324,"src":"180:25:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/LibDiamond.sol","file":"../libraries/LibDiamond.sol","id":25900,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26847,"sourceUnit":30597,"src":"250:55:94","symbolAliases":[{"foreign":{"id":25899,"name":"LibDiamond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30596,"src":"258:10:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/SwapUtils.sol","file":"../libraries/SwapUtils.sol","id":25902,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26847,"sourceUnit":34245,"src":"306:53:94","symbolAliases":[{"foreign":{"id":25901,"name":"SwapUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34244,"src":"314:9:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/TokenId.sol","file":"../libraries/TokenId.sol","id":25904,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26847,"sourceUnit":37729,"src":"360:49:94","symbolAliases":[{"foreign":{"id":25903,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37728,"src":"368:7:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IStableSwap.sol","file":"./IStableSwap.sol","id":25906,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26847,"sourceUnit":27330,"src":"411:46:94","symbolAliases":[{"foreign":{"id":25905,"name":"IStableSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27329,"src":"419:11:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IDiamondCut.sol","file":"./IDiamondCut.sol","id":25908,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26847,"sourceUnit":26945,"src":"459:46:94","symbolAliases":[{"foreign":{"id":25907,"name":"IDiamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26944,"src":"467:11:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IDiamondLoupe.sol","file":"./IDiamondLoupe.sol","id":25910,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26847,"sourceUnit":26986,"src":"506:50:94","symbolAliases":[{"foreign":{"id":25909,"name":"IDiamondLoupe","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26985,"src":"514:13:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":25911,"name":"IDiamondLoupe","nameLocations":["580:13:94"],"nodeType":"IdentifierPath","referencedDeclaration":26985,"src":"580:13:94"},"id":25912,"nodeType":"InheritanceSpecifier","src":"580:13:94"},{"baseName":{"id":25913,"name":"IDiamondCut","nameLocations":["595:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":26944,"src":"595:11:94"},"id":25914,"nodeType":"InheritanceSpecifier","src":"595:11:94"}],"canonicalName":"IConnext","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":26846,"linearizedBaseContracts":[26846,26944,26985],"name":"IConnext","nameLocation":"568:8:94","nodeType":"ContractDefinition","nodes":[{"functionSelector":"2c1999d0","id":25921,"implemented":false,"kind":"function","modifiers":[],"name":"canonicalToAdopted","nameLocation":"636:18:94","nodeType":"FunctionDefinition","parameters":{"id":25917,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25916,"mutability":"mutable","name":"_key","nameLocation":"663:4:94","nodeType":"VariableDeclaration","scope":25921,"src":"655:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25915,"name":"bytes32","nodeType":"ElementaryTypeName","src":"655:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"654:14:94"},"returnParameters":{"id":25920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25919,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25921,"src":"692:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25918,"name":"address","nodeType":"ElementaryTypeName","src":"692:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"691:9:94"},"scope":26846,"src":"627:74:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"bd8671a7","id":25929,"implemented":false,"kind":"function","modifiers":[],"name":"canonicalToAdopted","nameLocation":"714:18:94","nodeType":"FunctionDefinition","parameters":{"id":25925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25924,"mutability":"mutable","name":"_canonical","nameLocation":"750:10:94","nodeType":"VariableDeclaration","scope":25929,"src":"733:27:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":25923,"nodeType":"UserDefinedTypeName","pathNode":{"id":25922,"name":"TokenId","nameLocations":["733:7:94"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"733:7:94"},"referencedDeclaration":37728,"src":"733:7:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"src":"732:29:94"},"returnParameters":{"id":25928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25927,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25929,"src":"785:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25926,"name":"address","nodeType":"ElementaryTypeName","src":"785:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"784:9:94"},"scope":26846,"src":"705:89:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"60062091","id":25937,"implemented":false,"kind":"function","modifiers":[],"name":"adoptedToCanonical","nameLocation":"807:18:94","nodeType":"FunctionDefinition","parameters":{"id":25932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25931,"mutability":"mutable","name":"_adopted","nameLocation":"834:8:94","nodeType":"VariableDeclaration","scope":25937,"src":"826:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25930,"name":"address","nodeType":"ElementaryTypeName","src":"826:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"825:18:94"},"returnParameters":{"id":25936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25935,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25937,"src":"867:14:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":25934,"nodeType":"UserDefinedTypeName","pathNode":{"id":25933,"name":"TokenId","nameLocations":["867:7:94"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"867:7:94"},"referencedDeclaration":37728,"src":"867:7:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"src":"866:16:94"},"scope":26846,"src":"798:85:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"1ecf6f9f","id":25944,"implemented":false,"kind":"function","modifiers":[],"name":"canonicalToRepresentation","nameLocation":"896:25:94","nodeType":"FunctionDefinition","parameters":{"id":25940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25939,"mutability":"mutable","name":"_key","nameLocation":"930:4:94","nodeType":"VariableDeclaration","scope":25944,"src":"922:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25938,"name":"bytes32","nodeType":"ElementaryTypeName","src":"922:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"921:14:94"},"returnParameters":{"id":25943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25942,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25944,"src":"959:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25941,"name":"address","nodeType":"ElementaryTypeName","src":"959:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"958:9:94"},"scope":26846,"src":"887:81:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"ad4c7771","id":25952,"implemented":false,"kind":"function","modifiers":[],"name":"canonicalToRepresentation","nameLocation":"981:25:94","nodeType":"FunctionDefinition","parameters":{"id":25948,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25947,"mutability":"mutable","name":"_canonical","nameLocation":"1024:10:94","nodeType":"VariableDeclaration","scope":25952,"src":"1007:27:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":25946,"nodeType":"UserDefinedTypeName","pathNode":{"id":25945,"name":"TokenId","nameLocations":["1007:7:94"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"1007:7:94"},"referencedDeclaration":37728,"src":"1007:7:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"src":"1006:29:94"},"returnParameters":{"id":25951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25950,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25952,"src":"1059:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25949,"name":"address","nodeType":"ElementaryTypeName","src":"1059:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1058:9:94"},"scope":26846,"src":"972:96:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"03e418c2","id":25960,"implemented":false,"kind":"function","modifiers":[],"name":"representationToCanonical","nameLocation":"1081:25:94","nodeType":"FunctionDefinition","parameters":{"id":25955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25954,"mutability":"mutable","name":"_adopted","nameLocation":"1115:8:94","nodeType":"VariableDeclaration","scope":25960,"src":"1107:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25953,"name":"address","nodeType":"ElementaryTypeName","src":"1107:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1106:18:94"},"returnParameters":{"id":25959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25958,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25960,"src":"1148:14:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":25957,"nodeType":"UserDefinedTypeName","pathNode":{"id":25956,"name":"TokenId","nameLocations":["1148:7:94"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"1148:7:94"},"referencedDeclaration":37728,"src":"1148:7:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"src":"1147:16:94"},"scope":26846,"src":"1072:92:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"07a38d7b","id":25971,"implemented":false,"kind":"function","modifiers":[],"name":"getLocalAndAdoptedToken","nameLocation":"1177:23:94","nodeType":"FunctionDefinition","parameters":{"id":25965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25962,"mutability":"mutable","name":"_id","nameLocation":"1209:3:94","nodeType":"VariableDeclaration","scope":25971,"src":"1201:11:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25961,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1201:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":25964,"mutability":"mutable","name":"_domain","nameLocation":"1221:7:94","nodeType":"VariableDeclaration","scope":25971,"src":"1214:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":25963,"name":"uint32","nodeType":"ElementaryTypeName","src":"1214:6:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1200:29:94"},"returnParameters":{"id":25970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25967,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25971,"src":"1253:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25966,"name":"address","nodeType":"ElementaryTypeName","src":"1253:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25969,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25971,"src":"1262:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25968,"name":"address","nodeType":"ElementaryTypeName","src":"1262:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1252:18:94"},"scope":26846,"src":"1168:103:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"57bd0a32","id":25978,"implemented":false,"kind":"function","modifiers":[],"name":"approvedAssets","nameLocation":"1284:14:94","nodeType":"FunctionDefinition","parameters":{"id":25974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25973,"mutability":"mutable","name":"_key","nameLocation":"1307:4:94","nodeType":"VariableDeclaration","scope":25978,"src":"1299:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25972,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1299:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1298:14:94"},"returnParameters":{"id":25977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25976,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25978,"src":"1336:4:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25975,"name":"bool","nodeType":"ElementaryTypeName","src":"1336:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1335:6:94"},"scope":26846,"src":"1275:67:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"ae8bc0de","id":25986,"implemented":false,"kind":"function","modifiers":[],"name":"approvedAssets","nameLocation":"1355:14:94","nodeType":"FunctionDefinition","parameters":{"id":25982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25981,"mutability":"mutable","name":"_canonical","nameLocation":"1387:10:94","nodeType":"VariableDeclaration","scope":25986,"src":"1370:27:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":25980,"nodeType":"UserDefinedTypeName","pathNode":{"id":25979,"name":"TokenId","nameLocations":["1370:7:94"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"1370:7:94"},"referencedDeclaration":37728,"src":"1370:7:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"src":"1369:29:94"},"returnParameters":{"id":25985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25984,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25986,"src":"1422:4:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25983,"name":"bool","nodeType":"ElementaryTypeName","src":"1422:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1421:6:94"},"scope":26846,"src":"1346:82:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"9b598519","id":25994,"implemented":false,"kind":"function","modifiers":[],"name":"adoptedToLocalExternalPools","nameLocation":"1441:27:94","nodeType":"FunctionDefinition","parameters":{"id":25989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25988,"mutability":"mutable","name":"_key","nameLocation":"1477:4:94","nodeType":"VariableDeclaration","scope":25994,"src":"1469:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25987,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1469:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1468:14:94"},"returnParameters":{"id":25993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25992,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25994,"src":"1506:11:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"},"typeName":{"id":25991,"nodeType":"UserDefinedTypeName","pathNode":{"id":25990,"name":"IStableSwap","nameLocations":["1506:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":27329,"src":"1506:11:94"},"referencedDeclaration":27329,"src":"1506:11:94","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}},"visibility":"internal"}],"src":"1505:13:94"},"scope":26846,"src":"1432:87:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"80dc2248","id":26003,"implemented":false,"kind":"function","modifiers":[],"name":"adoptedToLocalExternalPools","nameLocation":"1532:27:94","nodeType":"FunctionDefinition","parameters":{"id":25998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25997,"mutability":"mutable","name":"_canonical","nameLocation":"1577:10:94","nodeType":"VariableDeclaration","scope":26003,"src":"1560:27:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":25996,"nodeType":"UserDefinedTypeName","pathNode":{"id":25995,"name":"TokenId","nameLocations":["1560:7:94"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"1560:7:94"},"referencedDeclaration":37728,"src":"1560:7:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"src":"1559:29:94"},"returnParameters":{"id":26002,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26001,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26003,"src":"1612:11:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"},"typeName":{"id":26000,"nodeType":"UserDefinedTypeName","pathNode":{"id":25999,"name":"IStableSwap","nameLocations":["1612:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":27329,"src":"1612:11:94"},"referencedDeclaration":27329,"src":"1612:11:94","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}},"visibility":"internal"}],"src":"1611:13:94"},"scope":26846,"src":"1523:102:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"f1537686","id":26011,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenId","nameLocation":"1638:10:94","nodeType":"FunctionDefinition","parameters":{"id":26006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26005,"mutability":"mutable","name":"_candidate","nameLocation":"1657:10:94","nodeType":"VariableDeclaration","scope":26011,"src":"1649:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26004,"name":"address","nodeType":"ElementaryTypeName","src":"1649:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1648:20:94"},"returnParameters":{"id":26010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26009,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26011,"src":"1692:14:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":26008,"nodeType":"UserDefinedTypeName","pathNode":{"id":26007,"name":"TokenId","nameLocations":["1692:7:94"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"1692:7:94"},"referencedDeclaration":37728,"src":"1692:7:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"src":"1691:16:94"},"scope":26846,"src":"1629:79:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"949de969","id":26018,"implemented":false,"kind":"function","modifiers":[],"name":"getCustodiedAmount","nameLocation":"1721:18:94","nodeType":"FunctionDefinition","parameters":{"id":26014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26013,"mutability":"mutable","name":"_key","nameLocation":"1748:4:94","nodeType":"VariableDeclaration","scope":26018,"src":"1740:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26012,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1740:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1739:14:94"},"returnParameters":{"id":26017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26016,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26018,"src":"1777:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26015,"name":"uint256","nodeType":"ElementaryTypeName","src":"1777:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1776:9:94"},"scope":26846,"src":"1712:74:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b64a5e07","id":26038,"implemented":false,"kind":"function","modifiers":[],"name":"setupAsset","nameLocation":"1799:10:94","nodeType":"FunctionDefinition","parameters":{"id":26034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26021,"mutability":"mutable","name":"_canonical","nameLocation":"1832:10:94","nodeType":"VariableDeclaration","scope":26038,"src":"1815:27:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":26020,"nodeType":"UserDefinedTypeName","pathNode":{"id":26019,"name":"TokenId","nameLocations":["1815:7:94"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"1815:7:94"},"referencedDeclaration":37728,"src":"1815:7:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":26023,"mutability":"mutable","name":"_canonicalDecimals","nameLocation":"1854:18:94","nodeType":"VariableDeclaration","scope":26038,"src":"1848:24:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":26022,"name":"uint8","nodeType":"ElementaryTypeName","src":"1848:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":26025,"mutability":"mutable","name":"_representationName","nameLocation":"1892:19:94","nodeType":"VariableDeclaration","scope":26038,"src":"1878:33:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":26024,"name":"string","nodeType":"ElementaryTypeName","src":"1878:6:94","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":26027,"mutability":"mutable","name":"_representationSymbol","nameLocation":"1931:21:94","nodeType":"VariableDeclaration","scope":26038,"src":"1917:35:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":26026,"name":"string","nodeType":"ElementaryTypeName","src":"1917:6:94","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":26029,"mutability":"mutable","name":"_adoptedAssetId","nameLocation":"1966:15:94","nodeType":"VariableDeclaration","scope":26038,"src":"1958:23:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26028,"name":"address","nodeType":"ElementaryTypeName","src":"1958:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26031,"mutability":"mutable","name":"_stableSwapPool","nameLocation":"1995:15:94","nodeType":"VariableDeclaration","scope":26038,"src":"1987:23:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26030,"name":"address","nodeType":"ElementaryTypeName","src":"1987:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26033,"mutability":"mutable","name":"_cap","nameLocation":"2024:4:94","nodeType":"VariableDeclaration","scope":26038,"src":"2016:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26032,"name":"uint256","nodeType":"ElementaryTypeName","src":"2016:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1809:223:94"},"returnParameters":{"id":26037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26036,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26038,"src":"2051:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26035,"name":"address","nodeType":"ElementaryTypeName","src":"2051:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2050:9:94"},"scope":26846,"src":"1790:270:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"e1cb3958","id":26052,"implemented":false,"kind":"function","modifiers":[],"name":"setupAssetWithDeployedRepresentation","nameLocation":"2073:36:94","nodeType":"FunctionDefinition","parameters":{"id":26048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26041,"mutability":"mutable","name":"_canonical","nameLocation":"2132:10:94","nodeType":"VariableDeclaration","scope":26052,"src":"2115:27:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":26040,"nodeType":"UserDefinedTypeName","pathNode":{"id":26039,"name":"TokenId","nameLocations":["2115:7:94"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"2115:7:94"},"referencedDeclaration":37728,"src":"2115:7:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":26043,"mutability":"mutable","name":"_representation","nameLocation":"2156:15:94","nodeType":"VariableDeclaration","scope":26052,"src":"2148:23:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26042,"name":"address","nodeType":"ElementaryTypeName","src":"2148:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26045,"mutability":"mutable","name":"_adoptedAssetId","nameLocation":"2185:15:94","nodeType":"VariableDeclaration","scope":26052,"src":"2177:23:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26044,"name":"address","nodeType":"ElementaryTypeName","src":"2177:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26047,"mutability":"mutable","name":"_stableSwapPool","nameLocation":"2214:15:94","nodeType":"VariableDeclaration","scope":26052,"src":"2206:23:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26046,"name":"address","nodeType":"ElementaryTypeName","src":"2206:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2109:124:94"},"returnParameters":{"id":26051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26050,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26052,"src":"2252:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26049,"name":"address","nodeType":"ElementaryTypeName","src":"2252:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2251:9:94"},"scope":26846,"src":"2064:197:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"1506e463","id":26060,"implemented":false,"kind":"function","modifiers":[],"name":"addStableSwapPool","nameLocation":"2274:17:94","nodeType":"FunctionDefinition","parameters":{"id":26058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26055,"mutability":"mutable","name":"_canonical","nameLocation":"2309:10:94","nodeType":"VariableDeclaration","scope":26060,"src":"2292:27:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":26054,"nodeType":"UserDefinedTypeName","pathNode":{"id":26053,"name":"TokenId","nameLocations":["2292:7:94"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"2292:7:94"},"referencedDeclaration":37728,"src":"2292:7:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":26057,"mutability":"mutable","name":"_stableSwapPool","nameLocation":"2329:15:94","nodeType":"VariableDeclaration","scope":26060,"src":"2321:23:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26056,"name":"address","nodeType":"ElementaryTypeName","src":"2321:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2291:54:94"},"returnParameters":{"id":26059,"nodeType":"ParameterList","parameters":[],"src":"2354:0:94"},"scope":26846,"src":"2265:90:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"e9d7bcec","id":26068,"implemented":false,"kind":"function","modifiers":[],"name":"updateLiquidityCap","nameLocation":"2368:18:94","nodeType":"FunctionDefinition","parameters":{"id":26066,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26063,"mutability":"mutable","name":"_canonical","nameLocation":"2404:10:94","nodeType":"VariableDeclaration","scope":26068,"src":"2387:27:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":26062,"nodeType":"UserDefinedTypeName","pathNode":{"id":26061,"name":"TokenId","nameLocations":["2387:7:94"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"2387:7:94"},"referencedDeclaration":37728,"src":"2387:7:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":26065,"mutability":"mutable","name":"_updated","nameLocation":"2424:8:94","nodeType":"VariableDeclaration","scope":26068,"src":"2416:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26064,"name":"uint256","nodeType":"ElementaryTypeName","src":"2416:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2386:47:94"},"returnParameters":{"id":26067,"nodeType":"ParameterList","parameters":[],"src":"2442:0:94"},"scope":26846,"src":"2359:84:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"a1b19301","id":26077,"implemented":false,"kind":"function","modifiers":[],"name":"removeAssetId","nameLocation":"2456:13:94","nodeType":"FunctionDefinition","parameters":{"id":26075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26070,"mutability":"mutable","name":"_key","nameLocation":"2483:4:94","nodeType":"VariableDeclaration","scope":26077,"src":"2475:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26069,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2475:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26072,"mutability":"mutable","name":"_adoptedAssetId","nameLocation":"2501:15:94","nodeType":"VariableDeclaration","scope":26077,"src":"2493:23:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26071,"name":"address","nodeType":"ElementaryTypeName","src":"2493:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26074,"mutability":"mutable","name":"_representation","nameLocation":"2530:15:94","nodeType":"VariableDeclaration","scope":26077,"src":"2522:23:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26073,"name":"address","nodeType":"ElementaryTypeName","src":"2522:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2469:80:94"},"returnParameters":{"id":26076,"nodeType":"ParameterList","parameters":[],"src":"2558:0:94"},"scope":26846,"src":"2447:112:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"5a2164e5","id":26087,"implemented":false,"kind":"function","modifiers":[],"name":"removeAssetId","nameLocation":"2572:13:94","nodeType":"FunctionDefinition","parameters":{"id":26085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26080,"mutability":"mutable","name":"_canonical","nameLocation":"2608:10:94","nodeType":"VariableDeclaration","scope":26087,"src":"2591:27:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":26079,"nodeType":"UserDefinedTypeName","pathNode":{"id":26078,"name":"TokenId","nameLocations":["2591:7:94"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"2591:7:94"},"referencedDeclaration":37728,"src":"2591:7:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":26082,"mutability":"mutable","name":"_adoptedAssetId","nameLocation":"2632:15:94","nodeType":"VariableDeclaration","scope":26087,"src":"2624:23:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26081,"name":"address","nodeType":"ElementaryTypeName","src":"2624:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26084,"mutability":"mutable","name":"_representation","nameLocation":"2661:15:94","nodeType":"VariableDeclaration","scope":26087,"src":"2653:23:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26083,"name":"address","nodeType":"ElementaryTypeName","src":"2653:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2585:95:94"},"returnParameters":{"id":26086,"nodeType":"ParameterList","parameters":[],"src":"2689:0:94"},"scope":26846,"src":"2563:127:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"c4058429","id":26097,"implemented":false,"kind":"function","modifiers":[],"name":"updateDetails","nameLocation":"2703:13:94","nodeType":"FunctionDefinition","parameters":{"id":26095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26090,"mutability":"mutable","name":"_canonical","nameLocation":"2739:10:94","nodeType":"VariableDeclaration","scope":26097,"src":"2722:27:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_calldata_ptr","typeString":"struct TokenId"},"typeName":{"id":26089,"nodeType":"UserDefinedTypeName","pathNode":{"id":26088,"name":"TokenId","nameLocations":["2722:7:94"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"2722:7:94"},"referencedDeclaration":37728,"src":"2722:7:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"},{"constant":false,"id":26092,"mutability":"mutable","name":"_name","nameLocation":"2769:5:94","nodeType":"VariableDeclaration","scope":26097,"src":"2755:19:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":26091,"name":"string","nodeType":"ElementaryTypeName","src":"2755:6:94","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":26094,"mutability":"mutable","name":"_symbol","nameLocation":"2794:7:94","nodeType":"VariableDeclaration","scope":26097,"src":"2780:21:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":26093,"name":"string","nodeType":"ElementaryTypeName","src":"2780:6:94","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2716:89:94"},"returnParameters":{"id":26096,"nodeType":"ParameterList","parameters":[],"src":"2814:0:94"},"scope":26846,"src":"2694:121:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"1a8bc0e1","id":26105,"implemented":false,"kind":"function","modifiers":[],"name":"routedTransfers","nameLocation":"2868:15:94","nodeType":"FunctionDefinition","parameters":{"id":26100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26099,"mutability":"mutable","name":"_transferId","nameLocation":"2892:11:94","nodeType":"VariableDeclaration","scope":26105,"src":"2884:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26098,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2884:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2883:21:94"},"returnParameters":{"id":26104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26103,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26105,"src":"2928:16:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":26101,"name":"address","nodeType":"ElementaryTypeName","src":"2928:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":26102,"nodeType":"ArrayTypeName","src":"2928:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2927:18:94"},"scope":26846,"src":"2859:87:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"bfd79030","id":26113,"implemented":false,"kind":"function","modifiers":[],"name":"transferStatus","nameLocation":"2959:14:94","nodeType":"FunctionDefinition","parameters":{"id":26108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26107,"mutability":"mutable","name":"_transferId","nameLocation":"2982:11:94","nodeType":"VariableDeclaration","scope":26113,"src":"2974:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26106,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2974:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2973:21:94"},"returnParameters":{"id":26112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26111,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26113,"src":"3018:25:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"},"typeName":{"id":26110,"nodeType":"UserDefinedTypeName","pathNode":{"id":26109,"name":"DestinationTransferStatus","nameLocations":["3018:25:94"],"nodeType":"IdentifierPath","referencedDeclaration":29324,"src":"3018:25:94"},"referencedDeclaration":29324,"src":"3018:25:94","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}},"visibility":"internal"}],"src":"3017:27:94"},"scope":26846,"src":"2950:95:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"121cca31","id":26120,"implemented":false,"kind":"function","modifiers":[],"name":"remote","nameLocation":"3058:6:94","nodeType":"FunctionDefinition","parameters":{"id":26116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26115,"mutability":"mutable","name":"_domain","nameLocation":"3072:7:94","nodeType":"VariableDeclaration","scope":26120,"src":"3065:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":26114,"name":"uint32","nodeType":"ElementaryTypeName","src":"3065:6:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"3064:16:94"},"returnParameters":{"id":26119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26118,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26120,"src":"3104:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26117,"name":"address","nodeType":"ElementaryTypeName","src":"3104:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3103:9:94"},"scope":26846,"src":"3049:64:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"c2fb26a6","id":26125,"implemented":false,"kind":"function","modifiers":[],"name":"domain","nameLocation":"3126:6:94","nodeType":"FunctionDefinition","parameters":{"id":26121,"nodeType":"ParameterList","parameters":[],"src":"3132:2:94"},"returnParameters":{"id":26124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26123,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26125,"src":"3158:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26122,"name":"uint256","nodeType":"ElementaryTypeName","src":"3158:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3157:9:94"},"scope":26846,"src":"3117:50:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"affed0e0","id":26130,"implemented":false,"kind":"function","modifiers":[],"name":"nonce","nameLocation":"3180:5:94","nodeType":"FunctionDefinition","parameters":{"id":26126,"nodeType":"ParameterList","parameters":[],"src":"3185:2:94"},"returnParameters":{"id":26129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26128,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26130,"src":"3211:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26127,"name":"uint256","nodeType":"ElementaryTypeName","src":"3211:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3210:9:94"},"scope":26846,"src":"3171:49:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"159e041f","id":26137,"implemented":false,"kind":"function","modifiers":[],"name":"approvedSequencers","nameLocation":"3233:18:94","nodeType":"FunctionDefinition","parameters":{"id":26133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26132,"mutability":"mutable","name":"_sequencer","nameLocation":"3260:10:94","nodeType":"VariableDeclaration","scope":26137,"src":"3252:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26131,"name":"address","nodeType":"ElementaryTypeName","src":"3252:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3251:20:94"},"returnParameters":{"id":26136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26135,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26137,"src":"3295:4:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":26134,"name":"bool","nodeType":"ElementaryTypeName","src":"3295:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3294:6:94"},"scope":26846,"src":"3224:77:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"3339df96","id":26142,"implemented":false,"kind":"function","modifiers":[],"name":"xAppConnectionManager","nameLocation":"3314:21:94","nodeType":"FunctionDefinition","parameters":{"id":26138,"nodeType":"ParameterList","parameters":[],"src":"3335:2:94"},"returnParameters":{"id":26141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26140,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26142,"src":"3361:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26139,"name":"address","nodeType":"ElementaryTypeName","src":"3361:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3360:9:94"},"scope":26846,"src":"3305:65:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b4b483ff","id":26149,"implemented":false,"kind":"function","modifiers":[],"name":"addConnextion","nameLocation":"3383:13:94","nodeType":"FunctionDefinition","parameters":{"id":26147,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26144,"mutability":"mutable","name":"_domain","nameLocation":"3404:7:94","nodeType":"VariableDeclaration","scope":26149,"src":"3397:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":26143,"name":"uint32","nodeType":"ElementaryTypeName","src":"3397:6:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":26146,"mutability":"mutable","name":"_connext","nameLocation":"3421:8:94","nodeType":"VariableDeclaration","scope":26149,"src":"3413:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26145,"name":"address","nodeType":"ElementaryTypeName","src":"3413:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3396:34:94"},"returnParameters":{"id":26148,"nodeType":"ParameterList","parameters":[],"src":"3439:0:94"},"scope":26846,"src":"3374:66:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"8a336231","id":26154,"implemented":false,"kind":"function","modifiers":[],"name":"addSequencer","nameLocation":"3453:12:94","nodeType":"FunctionDefinition","parameters":{"id":26152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26151,"mutability":"mutable","name":"_sequencer","nameLocation":"3474:10:94","nodeType":"VariableDeclaration","scope":26154,"src":"3466:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26150,"name":"address","nodeType":"ElementaryTypeName","src":"3466:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3465:20:94"},"returnParameters":{"id":26153,"nodeType":"ParameterList","parameters":[],"src":"3494:0:94"},"scope":26846,"src":"3444:51:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"6989ca7c","id":26159,"implemented":false,"kind":"function","modifiers":[],"name":"removeSequencer","nameLocation":"3508:15:94","nodeType":"FunctionDefinition","parameters":{"id":26157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26156,"mutability":"mutable","name":"_sequencer","nameLocation":"3532:10:94","nodeType":"VariableDeclaration","scope":26159,"src":"3524:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26155,"name":"address","nodeType":"ElementaryTypeName","src":"3524:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3523:20:94"},"returnParameters":{"id":26158,"nodeType":"ParameterList","parameters":[],"src":"3552:0:94"},"scope":26846,"src":"3499:54:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"8aac16ba","id":26178,"implemented":false,"kind":"function","modifiers":[],"name":"xcall","nameLocation":"3566:5:94","nodeType":"FunctionDefinition","parameters":{"id":26174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26161,"mutability":"mutable","name":"_destination","nameLocation":"3584:12:94","nodeType":"VariableDeclaration","scope":26178,"src":"3577:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":26160,"name":"uint32","nodeType":"ElementaryTypeName","src":"3577:6:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":26163,"mutability":"mutable","name":"_to","nameLocation":"3610:3:94","nodeType":"VariableDeclaration","scope":26178,"src":"3602:11:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26162,"name":"address","nodeType":"ElementaryTypeName","src":"3602:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26165,"mutability":"mutable","name":"_asset","nameLocation":"3627:6:94","nodeType":"VariableDeclaration","scope":26178,"src":"3619:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26164,"name":"address","nodeType":"ElementaryTypeName","src":"3619:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26167,"mutability":"mutable","name":"_delegate","nameLocation":"3647:9:94","nodeType":"VariableDeclaration","scope":26178,"src":"3639:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26166,"name":"address","nodeType":"ElementaryTypeName","src":"3639:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26169,"mutability":"mutable","name":"_amount","nameLocation":"3670:7:94","nodeType":"VariableDeclaration","scope":26178,"src":"3662:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26168,"name":"uint256","nodeType":"ElementaryTypeName","src":"3662:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26171,"mutability":"mutable","name":"_slippage","nameLocation":"3691:9:94","nodeType":"VariableDeclaration","scope":26178,"src":"3683:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26170,"name":"uint256","nodeType":"ElementaryTypeName","src":"3683:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26173,"mutability":"mutable","name":"_callData","nameLocation":"3721:9:94","nodeType":"VariableDeclaration","scope":26178,"src":"3706:24:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":26172,"name":"bytes","nodeType":"ElementaryTypeName","src":"3706:5:94","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3571:163:94"},"returnParameters":{"id":26177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26176,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26178,"src":"3761:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26175,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3761:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3760:9:94"},"scope":26846,"src":"3557:213:94","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"91f5de79","id":26197,"implemented":false,"kind":"function","modifiers":[],"name":"xcallIntoLocal","nameLocation":"3783:14:94","nodeType":"FunctionDefinition","parameters":{"id":26193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26180,"mutability":"mutable","name":"_destination","nameLocation":"3810:12:94","nodeType":"VariableDeclaration","scope":26197,"src":"3803:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":26179,"name":"uint32","nodeType":"ElementaryTypeName","src":"3803:6:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":26182,"mutability":"mutable","name":"_to","nameLocation":"3836:3:94","nodeType":"VariableDeclaration","scope":26197,"src":"3828:11:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26181,"name":"address","nodeType":"ElementaryTypeName","src":"3828:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26184,"mutability":"mutable","name":"_asset","nameLocation":"3853:6:94","nodeType":"VariableDeclaration","scope":26197,"src":"3845:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26183,"name":"address","nodeType":"ElementaryTypeName","src":"3845:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26186,"mutability":"mutable","name":"_delegate","nameLocation":"3873:9:94","nodeType":"VariableDeclaration","scope":26197,"src":"3865:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26185,"name":"address","nodeType":"ElementaryTypeName","src":"3865:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26188,"mutability":"mutable","name":"_amount","nameLocation":"3896:7:94","nodeType":"VariableDeclaration","scope":26197,"src":"3888:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26187,"name":"uint256","nodeType":"ElementaryTypeName","src":"3888:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26190,"mutability":"mutable","name":"_slippage","nameLocation":"3917:9:94","nodeType":"VariableDeclaration","scope":26197,"src":"3909:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26189,"name":"uint256","nodeType":"ElementaryTypeName","src":"3909:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26192,"mutability":"mutable","name":"_callData","nameLocation":"3947:9:94","nodeType":"VariableDeclaration","scope":26197,"src":"3932:24:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":26191,"name":"bytes","nodeType":"ElementaryTypeName","src":"3932:5:94","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3797:163:94"},"returnParameters":{"id":26196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26195,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26197,"src":"3987:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26194,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3987:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3986:9:94"},"scope":26846,"src":"3774:222:94","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"63e3e7d2","id":26205,"implemented":false,"kind":"function","modifiers":[],"name":"execute","nameLocation":"4009:7:94","nodeType":"FunctionDefinition","parameters":{"id":26201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26200,"mutability":"mutable","name":"_args","nameLocation":"4038:5:94","nodeType":"VariableDeclaration","scope":26205,"src":"4017:26:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_calldata_ptr","typeString":"struct ExecuteArgs"},"typeName":{"id":26199,"nodeType":"UserDefinedTypeName","pathNode":{"id":26198,"name":"ExecuteArgs","nameLocations":["4017:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":29365,"src":"4017:11:94"},"referencedDeclaration":29365,"src":"4017:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteArgs_$29365_storage_ptr","typeString":"struct ExecuteArgs"}},"visibility":"internal"}],"src":"4016:28:94"},"returnParameters":{"id":26204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26203,"mutability":"mutable","name":"transferId","nameLocation":"4071:10:94","nodeType":"VariableDeclaration","scope":26205,"src":"4063:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26202,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4063:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4062:20:94"},"scope":26846,"src":"4000:83:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"54126711","id":26213,"implemented":false,"kind":"function","modifiers":[],"name":"forceUpdateSlippage","nameLocation":"4096:19:94","nodeType":"FunctionDefinition","parameters":{"id":26211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26208,"mutability":"mutable","name":"_params","nameLocation":"4138:7:94","nodeType":"VariableDeclaration","scope":26213,"src":"4116:29:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo"},"typeName":{"id":26207,"nodeType":"UserDefinedTypeName","pathNode":{"id":26206,"name":"TransferInfo","nameLocations":["4116:12:94"],"nodeType":"IdentifierPath","referencedDeclaration":29351,"src":"4116:12:94"},"referencedDeclaration":29351,"src":"4116:12:94","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_storage_ptr","typeString":"struct TransferInfo"}},"visibility":"internal"},{"constant":false,"id":26210,"mutability":"mutable","name":"_slippage","nameLocation":"4155:9:94","nodeType":"VariableDeclaration","scope":26213,"src":"4147:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26209,"name":"uint256","nodeType":"ElementaryTypeName","src":"4147:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4115:50:94"},"returnParameters":{"id":26212,"nodeType":"ParameterList","parameters":[],"src":"4174:0:94"},"scope":26846,"src":"4087:88:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"cb8058ba","id":26219,"implemented":false,"kind":"function","modifiers":[],"name":"forceReceiveLocal","nameLocation":"4188:17:94","nodeType":"FunctionDefinition","parameters":{"id":26217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26216,"mutability":"mutable","name":"_params","nameLocation":"4228:7:94","nodeType":"VariableDeclaration","scope":26219,"src":"4206:29:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo"},"typeName":{"id":26215,"nodeType":"UserDefinedTypeName","pathNode":{"id":26214,"name":"TransferInfo","nameLocations":["4206:12:94"],"nodeType":"IdentifierPath","referencedDeclaration":29351,"src":"4206:12:94"},"referencedDeclaration":29351,"src":"4206:12:94","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_storage_ptr","typeString":"struct TransferInfo"}},"visibility":"internal"}],"src":"4205:31:94"},"returnParameters":{"id":26218,"nodeType":"ParameterList","parameters":[],"src":"4245:0:94"},"scope":26846,"src":"4179:67:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"2424401f","id":26224,"implemented":false,"kind":"function","modifiers":[],"name":"bumpTransfer","nameLocation":"4259:12:94","nodeType":"FunctionDefinition","parameters":{"id":26222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26221,"mutability":"mutable","name":"_transferId","nameLocation":"4280:11:94","nodeType":"VariableDeclaration","scope":26224,"src":"4272:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26220,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4272:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4271:21:94"},"returnParameters":{"id":26223,"nodeType":"ParameterList","parameters":[],"src":"4309:0:94"},"scope":26846,"src":"4250:60:94","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"41bdc8b5","id":26229,"implemented":false,"kind":"function","modifiers":[],"name":"setXAppConnectionManager","nameLocation":"4323:24:94","nodeType":"FunctionDefinition","parameters":{"id":26227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26226,"mutability":"mutable","name":"_xAppConnectionManager","nameLocation":"4356:22:94","nodeType":"VariableDeclaration","scope":26229,"src":"4348:30:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26225,"name":"address","nodeType":"ElementaryTypeName","src":"4348:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4347:32:94"},"returnParameters":{"id":26228,"nodeType":"ParameterList","parameters":[],"src":"4388:0:94"},"scope":26846,"src":"4314:75:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"b49c53a7","id":26236,"implemented":false,"kind":"function","modifiers":[],"name":"enrollRemoteRouter","nameLocation":"4402:18:94","nodeType":"FunctionDefinition","parameters":{"id":26234,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26231,"mutability":"mutable","name":"_domain","nameLocation":"4428:7:94","nodeType":"VariableDeclaration","scope":26236,"src":"4421:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":26230,"name":"uint32","nodeType":"ElementaryTypeName","src":"4421:6:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":26233,"mutability":"mutable","name":"_router","nameLocation":"4445:7:94","nodeType":"VariableDeclaration","scope":26236,"src":"4437:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26232,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4437:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4420:33:94"},"returnParameters":{"id":26235,"nodeType":"ParameterList","parameters":[],"src":"4462:0:94"},"scope":26846,"src":"4393:70:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"28b1aea0","id":26245,"implemented":false,"kind":"function","modifiers":[],"name":"enrollCustom","nameLocation":"4476:12:94","nodeType":"FunctionDefinition","parameters":{"id":26243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26238,"mutability":"mutable","name":"_domain","nameLocation":"4501:7:94","nodeType":"VariableDeclaration","scope":26245,"src":"4494:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":26237,"name":"uint32","nodeType":"ElementaryTypeName","src":"4494:6:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":26240,"mutability":"mutable","name":"_id","nameLocation":"4522:3:94","nodeType":"VariableDeclaration","scope":26245,"src":"4514:11:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26239,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4514:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26242,"mutability":"mutable","name":"_custom","nameLocation":"4539:7:94","nodeType":"VariableDeclaration","scope":26245,"src":"4531:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26241,"name":"address","nodeType":"ElementaryTypeName","src":"4531:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4488:62:94"},"returnParameters":{"id":26244,"nodeType":"ParameterList","parameters":[],"src":"4559:0:94"},"scope":26846,"src":"4467:93:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"ab2dc3f5","id":26256,"implemented":false,"kind":"function","modifiers":[],"name":"handle","nameLocation":"4590:6:94","nodeType":"FunctionDefinition","parameters":{"id":26254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26247,"mutability":"mutable","name":"_origin","nameLocation":"4609:7:94","nodeType":"VariableDeclaration","scope":26256,"src":"4602:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":26246,"name":"uint32","nodeType":"ElementaryTypeName","src":"4602:6:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":26249,"mutability":"mutable","name":"_nonce","nameLocation":"4629:6:94","nodeType":"VariableDeclaration","scope":26256,"src":"4622:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":26248,"name":"uint32","nodeType":"ElementaryTypeName","src":"4622:6:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":26251,"mutability":"mutable","name":"_sender","nameLocation":"4649:7:94","nodeType":"VariableDeclaration","scope":26256,"src":"4641:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26250,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4641:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26253,"mutability":"mutable","name":"_message","nameLocation":"4675:8:94","nodeType":"VariableDeclaration","scope":26256,"src":"4662:21:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":26252,"name":"bytes","nodeType":"ElementaryTypeName","src":"4662:5:94","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4596:91:94"},"returnParameters":{"id":26255,"nodeType":"ParameterList","parameters":[],"src":"4696:0:94"},"scope":26846,"src":"4581:116:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"8da5cb5b","id":26261,"implemented":false,"kind":"function","modifiers":[],"name":"owner","nameLocation":"4737:5:94","nodeType":"FunctionDefinition","parameters":{"id":26257,"nodeType":"ParameterList","parameters":[],"src":"4742:2:94"},"returnParameters":{"id":26260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26259,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26261,"src":"4768:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26258,"name":"address","nodeType":"ElementaryTypeName","src":"4768:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4767:9:94"},"scope":26846,"src":"4728:49:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"6be55785","id":26266,"implemented":false,"kind":"function","modifiers":[],"name":"routerAllowlistRemoved","nameLocation":"4790:22:94","nodeType":"FunctionDefinition","parameters":{"id":26262,"nodeType":"ParameterList","parameters":[],"src":"4812:2:94"},"returnParameters":{"id":26265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26264,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26266,"src":"4838:4:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":26263,"name":"bool","nodeType":"ElementaryTypeName","src":"4838:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4837:6:94"},"scope":26846,"src":"4781:63:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"d1851c92","id":26271,"implemented":false,"kind":"function","modifiers":[],"name":"proposed","nameLocation":"4857:8:94","nodeType":"FunctionDefinition","parameters":{"id":26267,"nodeType":"ParameterList","parameters":[],"src":"4865:2:94"},"returnParameters":{"id":26270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26269,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26271,"src":"4891:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26268,"name":"address","nodeType":"ElementaryTypeName","src":"4891:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4890:9:94"},"scope":26846,"src":"4848:52:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"3cf52ffb","id":26276,"implemented":false,"kind":"function","modifiers":[],"name":"proposedTimestamp","nameLocation":"4913:17:94","nodeType":"FunctionDefinition","parameters":{"id":26272,"nodeType":"ParameterList","parameters":[],"src":"4930:2:94"},"returnParameters":{"id":26275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26274,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26276,"src":"4956:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26273,"name":"uint256","nodeType":"ElementaryTypeName","src":"4956:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4955:9:94"},"scope":26846,"src":"4904:61:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"12232937","id":26281,"implemented":false,"kind":"function","modifiers":[],"name":"routerAllowlistTimestamp","nameLocation":"4978:24:94","nodeType":"FunctionDefinition","parameters":{"id":26277,"nodeType":"ParameterList","parameters":[],"src":"5002:2:94"},"returnParameters":{"id":26280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26279,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26281,"src":"5028:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26278,"name":"uint256","nodeType":"ElementaryTypeName","src":"5028:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5027:9:94"},"scope":26846,"src":"4969:68:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"6a42b8f8","id":26286,"implemented":false,"kind":"function","modifiers":[],"name":"delay","nameLocation":"5050:5:94","nodeType":"FunctionDefinition","parameters":{"id":26282,"nodeType":"ParameterList","parameters":[],"src":"5055:2:94"},"returnParameters":{"id":26285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26284,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26286,"src":"5081:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26283,"name":"uint256","nodeType":"ElementaryTypeName","src":"5081:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5080:9:94"},"scope":26846,"src":"5041:49:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"5c975abb","id":26291,"implemented":false,"kind":"function","modifiers":[],"name":"paused","nameLocation":"5103:6:94","nodeType":"FunctionDefinition","parameters":{"id":26287,"nodeType":"ParameterList","parameters":[],"src":"5109:2:94"},"returnParameters":{"id":26290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26289,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26291,"src":"5135:4:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":26288,"name":"bool","nodeType":"ElementaryTypeName","src":"5135:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5134:6:94"},"scope":26846,"src":"5094:47:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"c56ce358","id":26294,"implemented":false,"kind":"function","modifiers":[],"name":"proposeRouterAllowlistRemoval","nameLocation":"5154:29:94","nodeType":"FunctionDefinition","parameters":{"id":26292,"nodeType":"ParameterList","parameters":[],"src":"5183:2:94"},"returnParameters":{"id":26293,"nodeType":"ParameterList","parameters":[],"src":"5194:0:94"},"scope":26846,"src":"5145:50:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"23986f7d","id":26297,"implemented":false,"kind":"function","modifiers":[],"name":"removeRouterAllowlist","nameLocation":"5208:21:94","nodeType":"FunctionDefinition","parameters":{"id":26295,"nodeType":"ParameterList","parameters":[],"src":"5229:2:94"},"returnParameters":{"id":26296,"nodeType":"ParameterList","parameters":[],"src":"5240:0:94"},"scope":26846,"src":"5199:42:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"b1f8100d","id":26302,"implemented":false,"kind":"function","modifiers":[],"name":"proposeNewOwner","nameLocation":"5254:15:94","nodeType":"FunctionDefinition","parameters":{"id":26300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26299,"mutability":"mutable","name":"newlyProposed","nameLocation":"5278:13:94","nodeType":"VariableDeclaration","scope":26302,"src":"5270:21:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26298,"name":"address","nodeType":"ElementaryTypeName","src":"5270:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5269:23:94"},"returnParameters":{"id":26301,"nodeType":"ParameterList","parameters":[],"src":"5301:0:94"},"scope":26846,"src":"5245:57:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"c5b350df","id":26305,"implemented":false,"kind":"function","modifiers":[],"name":"acceptProposedOwner","nameLocation":"5315:19:94","nodeType":"FunctionDefinition","parameters":{"id":26303,"nodeType":"ParameterList","parameters":[],"src":"5334:2:94"},"returnParameters":{"id":26304,"nodeType":"ParameterList","parameters":[],"src":"5345:0:94"},"scope":26846,"src":"5306:40:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"8456cb59","id":26308,"implemented":false,"kind":"function","modifiers":[],"name":"pause","nameLocation":"5359:5:94","nodeType":"FunctionDefinition","parameters":{"id":26306,"nodeType":"ParameterList","parameters":[],"src":"5364:2:94"},"returnParameters":{"id":26307,"nodeType":"ParameterList","parameters":[],"src":"5375:0:94"},"scope":26846,"src":"5350:26:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"3f4ba83a","id":26311,"implemented":false,"kind":"function","modifiers":[],"name":"unpause","nameLocation":"5389:7:94","nodeType":"FunctionDefinition","parameters":{"id":26309,"nodeType":"ParameterList","parameters":[],"src":"5396:2:94"},"returnParameters":{"id":26310,"nodeType":"ParameterList","parameters":[],"src":"5407:0:94"},"scope":26846,"src":"5380:28:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"8cba8b6a","id":26318,"implemented":false,"kind":"function","modifiers":[],"name":"approvedRelayers","nameLocation":"5439:16:94","nodeType":"FunctionDefinition","parameters":{"id":26314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26313,"mutability":"mutable","name":"_relayer","nameLocation":"5464:8:94","nodeType":"VariableDeclaration","scope":26318,"src":"5456:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26312,"name":"address","nodeType":"ElementaryTypeName","src":"5456:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5455:18:94"},"returnParameters":{"id":26317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26316,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26318,"src":"5497:4:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":26315,"name":"bool","nodeType":"ElementaryTypeName","src":"5497:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5496:6:94"},"scope":26846,"src":"5430:73:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"65bc8582","id":26323,"implemented":false,"kind":"function","modifiers":[],"name":"relayerFeeVault","nameLocation":"5516:15:94","nodeType":"FunctionDefinition","parameters":{"id":26319,"nodeType":"ParameterList","parameters":[],"src":"5531:2:94"},"returnParameters":{"id":26322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26321,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26323,"src":"5557:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26320,"name":"address","nodeType":"ElementaryTypeName","src":"5557:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5556:9:94"},"scope":26846,"src":"5507:59:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"f01b3e01","id":26328,"implemented":false,"kind":"function","modifiers":[],"name":"setRelayerFeeVault","nameLocation":"5579:18:94","nodeType":"FunctionDefinition","parameters":{"id":26326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26325,"mutability":"mutable","name":"_relayerFeeVault","nameLocation":"5606:16:94","nodeType":"VariableDeclaration","scope":26328,"src":"5598:24:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26324,"name":"address","nodeType":"ElementaryTypeName","src":"5598:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5597:26:94"},"returnParameters":{"id":26327,"nodeType":"ParameterList","parameters":[],"src":"5632:0:94"},"scope":26846,"src":"5570:63:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"dd39f00d","id":26333,"implemented":false,"kind":"function","modifiers":[],"name":"addRelayer","nameLocation":"5646:10:94","nodeType":"FunctionDefinition","parameters":{"id":26331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26330,"mutability":"mutable","name":"_relayer","nameLocation":"5665:8:94","nodeType":"VariableDeclaration","scope":26333,"src":"5657:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26329,"name":"address","nodeType":"ElementaryTypeName","src":"5657:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5656:18:94"},"returnParameters":{"id":26332,"nodeType":"ParameterList","parameters":[],"src":"5683:0:94"},"scope":26846,"src":"5637:47:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"60f0a5ac","id":26338,"implemented":false,"kind":"function","modifiers":[],"name":"removeRelayer","nameLocation":"5697:13:94","nodeType":"FunctionDefinition","parameters":{"id":26336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26335,"mutability":"mutable","name":"_relayer","nameLocation":"5719:8:94","nodeType":"VariableDeclaration","scope":26338,"src":"5711:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26334,"name":"address","nodeType":"ElementaryTypeName","src":"5711:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5710:18:94"},"returnParameters":{"id":26337,"nodeType":"ParameterList","parameters":[],"src":"5737:0:94"},"scope":26846,"src":"5688:50:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"0951d6d8","id":26343,"implemented":false,"kind":"function","modifiers":[],"name":"LIQUIDITY_FEE_NUMERATOR","nameLocation":"5769:23:94","nodeType":"FunctionDefinition","parameters":{"id":26339,"nodeType":"ParameterList","parameters":[],"src":"5792:2:94"},"returnParameters":{"id":26342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26341,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26343,"src":"5818:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26340,"name":"uint256","nodeType":"ElementaryTypeName","src":"5818:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5817:9:94"},"scope":26846,"src":"5760:67:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"4b72c5da","id":26348,"implemented":false,"kind":"function","modifiers":[],"name":"LIQUIDITY_FEE_DENOMINATOR","nameLocation":"5840:25:94","nodeType":"FunctionDefinition","parameters":{"id":26344,"nodeType":"ParameterList","parameters":[],"src":"5865:2:94"},"returnParameters":{"id":26347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26346,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26348,"src":"5891:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26345,"name":"uint256","nodeType":"ElementaryTypeName","src":"5891:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5890:9:94"},"scope":26846,"src":"5831:69:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"1407093b","id":26355,"implemented":false,"kind":"function","modifiers":[],"name":"getRouterApproval","nameLocation":"5913:17:94","nodeType":"FunctionDefinition","parameters":{"id":26351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26350,"mutability":"mutable","name":"_router","nameLocation":"5939:7:94","nodeType":"VariableDeclaration","scope":26355,"src":"5931:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26349,"name":"address","nodeType":"ElementaryTypeName","src":"5931:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5930:17:94"},"returnParameters":{"id":26354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26353,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26355,"src":"5971:4:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":26352,"name":"bool","nodeType":"ElementaryTypeName","src":"5971:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5970:6:94"},"scope":26846,"src":"5904:73:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"c6bf691d","id":26362,"implemented":false,"kind":"function","modifiers":[],"name":"getRouterRecipient","nameLocation":"5990:18:94","nodeType":"FunctionDefinition","parameters":{"id":26358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26357,"mutability":"mutable","name":"_router","nameLocation":"6017:7:94","nodeType":"VariableDeclaration","scope":26362,"src":"6009:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26356,"name":"address","nodeType":"ElementaryTypeName","src":"6009:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6008:17:94"},"returnParameters":{"id":26361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26360,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26362,"src":"6049:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26359,"name":"address","nodeType":"ElementaryTypeName","src":"6049:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6048:9:94"},"scope":26846,"src":"5981:77:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"e9160f3e","id":26369,"implemented":false,"kind":"function","modifiers":[],"name":"getRouterOwner","nameLocation":"6071:14:94","nodeType":"FunctionDefinition","parameters":{"id":26365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26364,"mutability":"mutable","name":"_router","nameLocation":"6094:7:94","nodeType":"VariableDeclaration","scope":26369,"src":"6086:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26363,"name":"address","nodeType":"ElementaryTypeName","src":"6086:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6085:17:94"},"returnParameters":{"id":26368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26367,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26369,"src":"6126:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26366,"name":"address","nodeType":"ElementaryTypeName","src":"6126:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6125:9:94"},"scope":26846,"src":"6062:73:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"3b688da6","id":26376,"implemented":false,"kind":"function","modifiers":[],"name":"getProposedRouterOwner","nameLocation":"6148:22:94","nodeType":"FunctionDefinition","parameters":{"id":26372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26371,"mutability":"mutable","name":"_router","nameLocation":"6179:7:94","nodeType":"VariableDeclaration","scope":26376,"src":"6171:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26370,"name":"address","nodeType":"ElementaryTypeName","src":"6171:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6170:17:94"},"returnParameters":{"id":26375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26374,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26376,"src":"6211:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26373,"name":"address","nodeType":"ElementaryTypeName","src":"6211:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6210:9:94"},"scope":26846,"src":"6139:81:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"12d57170","id":26383,"implemented":false,"kind":"function","modifiers":[],"name":"getProposedRouterOwnerTimestamp","nameLocation":"6233:31:94","nodeType":"FunctionDefinition","parameters":{"id":26379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26378,"mutability":"mutable","name":"_router","nameLocation":"6273:7:94","nodeType":"VariableDeclaration","scope":26383,"src":"6265:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26377,"name":"address","nodeType":"ElementaryTypeName","src":"6265:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6264:17:94"},"returnParameters":{"id":26382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26381,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26383,"src":"6305:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26380,"name":"uint256","nodeType":"ElementaryTypeName","src":"6305:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6304:9:94"},"scope":26846,"src":"6224:90:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"9bf6d875","id":26388,"implemented":false,"kind":"function","modifiers":[],"name":"maxRoutersPerTransfer","nameLocation":"6327:21:94","nodeType":"FunctionDefinition","parameters":{"id":26384,"nodeType":"ParameterList","parameters":[],"src":"6348:2:94"},"returnParameters":{"id":26387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26386,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26388,"src":"6374:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26385,"name":"uint256","nodeType":"ElementaryTypeName","src":"6374:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6373:9:94"},"scope":26846,"src":"6318:65:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"41258b5c","id":26397,"implemented":false,"kind":"function","modifiers":[],"name":"routerBalances","nameLocation":"6396:14:94","nodeType":"FunctionDefinition","parameters":{"id":26393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26390,"mutability":"mutable","name":"_router","nameLocation":"6419:7:94","nodeType":"VariableDeclaration","scope":26397,"src":"6411:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26389,"name":"address","nodeType":"ElementaryTypeName","src":"6411:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26392,"mutability":"mutable","name":"_asset","nameLocation":"6436:6:94","nodeType":"VariableDeclaration","scope":26397,"src":"6428:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26391,"name":"address","nodeType":"ElementaryTypeName","src":"6428:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6410:33:94"},"returnParameters":{"id":26396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26395,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26397,"src":"6467:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26394,"name":"uint256","nodeType":"ElementaryTypeName","src":"6467:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6466:9:94"},"scope":26846,"src":"6387:89:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"8770e682","id":26404,"implemented":false,"kind":"function","modifiers":[],"name":"getRouterApprovalForPortal","nameLocation":"6489:26:94","nodeType":"FunctionDefinition","parameters":{"id":26400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26399,"mutability":"mutable","name":"_router","nameLocation":"6524:7:94","nodeType":"VariableDeclaration","scope":26404,"src":"6516:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26398,"name":"address","nodeType":"ElementaryTypeName","src":"6516:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6515:17:94"},"returnParameters":{"id":26403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26402,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26404,"src":"6556:4:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":26401,"name":"bool","nodeType":"ElementaryTypeName","src":"6556:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6555:6:94"},"scope":26846,"src":"6480:82:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"f259cd27","id":26409,"implemented":false,"kind":"function","modifiers":[],"name":"approveRouter","nameLocation":"6575:13:94","nodeType":"FunctionDefinition","parameters":{"id":26407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26406,"mutability":"mutable","name":"router","nameLocation":"6597:6:94","nodeType":"VariableDeclaration","scope":26409,"src":"6589:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26405,"name":"address","nodeType":"ElementaryTypeName","src":"6589:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6588:16:94"},"returnParameters":{"id":26408,"nodeType":"ParameterList","parameters":[],"src":"6613:0:94"},"scope":26846,"src":"6566:48:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"b214c901","id":26416,"implemented":false,"kind":"function","modifiers":[],"name":"initializeRouter","nameLocation":"6627:16:94","nodeType":"FunctionDefinition","parameters":{"id":26414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26411,"mutability":"mutable","name":"owner","nameLocation":"6652:5:94","nodeType":"VariableDeclaration","scope":26416,"src":"6644:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26410,"name":"address","nodeType":"ElementaryTypeName","src":"6644:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26413,"mutability":"mutable","name":"recipient","nameLocation":"6667:9:94","nodeType":"VariableDeclaration","scope":26416,"src":"6659:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26412,"name":"address","nodeType":"ElementaryTypeName","src":"6659:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6643:34:94"},"returnParameters":{"id":26415,"nodeType":"ParameterList","parameters":[],"src":"6686:0:94"},"scope":26846,"src":"6618:69:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"911b8ee2","id":26421,"implemented":false,"kind":"function","modifiers":[],"name":"unapproveRouter","nameLocation":"6700:15:94","nodeType":"FunctionDefinition","parameters":{"id":26419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26418,"mutability":"mutable","name":"router","nameLocation":"6724:6:94","nodeType":"VariableDeclaration","scope":26421,"src":"6716:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26417,"name":"address","nodeType":"ElementaryTypeName","src":"6716:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6715:16:94"},"returnParameters":{"id":26420,"nodeType":"ParameterList","parameters":[],"src":"6740:0:94"},"scope":26846,"src":"6691:50:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"82904716","id":26426,"implemented":false,"kind":"function","modifiers":[],"name":"setMaxRoutersPerTransfer","nameLocation":"6754:24:94","nodeType":"FunctionDefinition","parameters":{"id":26424,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26423,"mutability":"mutable","name":"_newMaxRouters","nameLocation":"6787:14:94","nodeType":"VariableDeclaration","scope":26426,"src":"6779:22:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26422,"name":"uint256","nodeType":"ElementaryTypeName","src":"6779:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6778:24:94"},"returnParameters":{"id":26425,"nodeType":"ParameterList","parameters":[],"src":"6811:0:94"},"scope":26846,"src":"6745:67:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"582c78d2","id":26431,"implemented":false,"kind":"function","modifiers":[],"name":"setLiquidityFeeNumerator","nameLocation":"6825:24:94","nodeType":"FunctionDefinition","parameters":{"id":26429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26428,"mutability":"mutable","name":"_numerator","nameLocation":"6858:10:94","nodeType":"VariableDeclaration","scope":26431,"src":"6850:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26427,"name":"uint256","nodeType":"ElementaryTypeName","src":"6850:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6849:20:94"},"returnParameters":{"id":26430,"nodeType":"ParameterList","parameters":[],"src":"6878:0:94"},"scope":26846,"src":"6816:63:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"da3a892f","id":26436,"implemented":false,"kind":"function","modifiers":[],"name":"approveRouterForPortal","nameLocation":"6892:22:94","nodeType":"FunctionDefinition","parameters":{"id":26434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26433,"mutability":"mutable","name":"_router","nameLocation":"6923:7:94","nodeType":"VariableDeclaration","scope":26436,"src":"6915:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26432,"name":"address","nodeType":"ElementaryTypeName","src":"6915:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6914:17:94"},"returnParameters":{"id":26435,"nodeType":"ParameterList","parameters":[],"src":"6940:0:94"},"scope":26846,"src":"6883:58:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"04376ff4","id":26441,"implemented":false,"kind":"function","modifiers":[],"name":"unapproveRouterForPortal","nameLocation":"6954:24:94","nodeType":"FunctionDefinition","parameters":{"id":26439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26438,"mutability":"mutable","name":"_router","nameLocation":"6987:7:94","nodeType":"VariableDeclaration","scope":26441,"src":"6979:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26437,"name":"address","nodeType":"ElementaryTypeName","src":"6979:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6978:17:94"},"returnParameters":{"id":26440,"nodeType":"ParameterList","parameters":[],"src":"7004:0:94"},"scope":26846,"src":"6945:60:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"ffaf3f1a","id":26448,"implemented":false,"kind":"function","modifiers":[],"name":"setRouterRecipient","nameLocation":"7018:18:94","nodeType":"FunctionDefinition","parameters":{"id":26446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26443,"mutability":"mutable","name":"router","nameLocation":"7045:6:94","nodeType":"VariableDeclaration","scope":26448,"src":"7037:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26442,"name":"address","nodeType":"ElementaryTypeName","src":"7037:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26445,"mutability":"mutable","name":"recipient","nameLocation":"7061:9:94","nodeType":"VariableDeclaration","scope":26448,"src":"7053:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26444,"name":"address","nodeType":"ElementaryTypeName","src":"7053:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7036:35:94"},"returnParameters":{"id":26447,"nodeType":"ParameterList","parameters":[],"src":"7080:0:94"},"scope":26846,"src":"7009:72:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"22a3c007","id":26455,"implemented":false,"kind":"function","modifiers":[],"name":"proposeRouterOwner","nameLocation":"7094:18:94","nodeType":"FunctionDefinition","parameters":{"id":26453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26450,"mutability":"mutable","name":"router","nameLocation":"7121:6:94","nodeType":"VariableDeclaration","scope":26455,"src":"7113:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26449,"name":"address","nodeType":"ElementaryTypeName","src":"7113:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26452,"mutability":"mutable","name":"proposed","nameLocation":"7137:8:94","nodeType":"VariableDeclaration","scope":26455,"src":"7129:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26451,"name":"address","nodeType":"ElementaryTypeName","src":"7129:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7112:34:94"},"returnParameters":{"id":26454,"nodeType":"ParameterList","parameters":[],"src":"7155:0:94"},"scope":26846,"src":"7085:71:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"09935b8f","id":26460,"implemented":false,"kind":"function","modifiers":[],"name":"acceptProposedRouterOwner","nameLocation":"7169:25:94","nodeType":"FunctionDefinition","parameters":{"id":26458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26457,"mutability":"mutable","name":"router","nameLocation":"7203:6:94","nodeType":"VariableDeclaration","scope":26460,"src":"7195:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26456,"name":"address","nodeType":"ElementaryTypeName","src":"7195:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7194:16:94"},"returnParameters":{"id":26459,"nodeType":"ParameterList","parameters":[],"src":"7219:0:94"},"scope":26846,"src":"7160:60:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"2d3f9ef6","id":26469,"implemented":false,"kind":"function","modifiers":[],"name":"addRouterLiquidityFor","nameLocation":"7233:21:94","nodeType":"FunctionDefinition","parameters":{"id":26467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26462,"mutability":"mutable","name":"_amount","nameLocation":"7268:7:94","nodeType":"VariableDeclaration","scope":26469,"src":"7260:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26461,"name":"uint256","nodeType":"ElementaryTypeName","src":"7260:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26464,"mutability":"mutable","name":"_local","nameLocation":"7289:6:94","nodeType":"VariableDeclaration","scope":26469,"src":"7281:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26463,"name":"address","nodeType":"ElementaryTypeName","src":"7281:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26466,"mutability":"mutable","name":"_router","nameLocation":"7309:7:94","nodeType":"VariableDeclaration","scope":26469,"src":"7301:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26465,"name":"address","nodeType":"ElementaryTypeName","src":"7301:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7254:66:94"},"returnParameters":{"id":26468,"nodeType":"ParameterList","parameters":[],"src":"7337:0:94"},"scope":26846,"src":"7224:114:94","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"54064594","id":26476,"implemented":false,"kind":"function","modifiers":[],"name":"addRouterLiquidity","nameLocation":"7351:18:94","nodeType":"FunctionDefinition","parameters":{"id":26474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26471,"mutability":"mutable","name":"_amount","nameLocation":"7378:7:94","nodeType":"VariableDeclaration","scope":26476,"src":"7370:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26470,"name":"uint256","nodeType":"ElementaryTypeName","src":"7370:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26473,"mutability":"mutable","name":"_local","nameLocation":"7395:6:94","nodeType":"VariableDeclaration","scope":26476,"src":"7387:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26472,"name":"address","nodeType":"ElementaryTypeName","src":"7387:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7369:33:94"},"returnParameters":{"id":26475,"nodeType":"ParameterList","parameters":[],"src":"7419:0:94"},"scope":26846,"src":"7342:78:94","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"197c139d","id":26487,"implemented":false,"kind":"function","modifiers":[],"name":"removeRouterLiquidityFor","nameLocation":"7433:24:94","nodeType":"FunctionDefinition","parameters":{"id":26485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26478,"mutability":"mutable","name":"_amount","nameLocation":"7471:7:94","nodeType":"VariableDeclaration","scope":26487,"src":"7463:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26477,"name":"uint256","nodeType":"ElementaryTypeName","src":"7463:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26480,"mutability":"mutable","name":"_local","nameLocation":"7492:6:94","nodeType":"VariableDeclaration","scope":26487,"src":"7484:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26479,"name":"address","nodeType":"ElementaryTypeName","src":"7484:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26482,"mutability":"mutable","name":"_to","nameLocation":"7520:3:94","nodeType":"VariableDeclaration","scope":26487,"src":"7504:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":26481,"name":"address","nodeType":"ElementaryTypeName","src":"7504:15:94","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":26484,"mutability":"mutable","name":"_router","nameLocation":"7537:7:94","nodeType":"VariableDeclaration","scope":26487,"src":"7529:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26483,"name":"address","nodeType":"ElementaryTypeName","src":"7529:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7457:91:94"},"returnParameters":{"id":26486,"nodeType":"ParameterList","parameters":[],"src":"7557:0:94"},"scope":26846,"src":"7424:134:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"899962a1","id":26496,"implemented":false,"kind":"function","modifiers":[],"name":"removeRouterLiquidity","nameLocation":"7571:21:94","nodeType":"FunctionDefinition","parameters":{"id":26494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26489,"mutability":"mutable","name":"_amount","nameLocation":"7606:7:94","nodeType":"VariableDeclaration","scope":26496,"src":"7598:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26488,"name":"uint256","nodeType":"ElementaryTypeName","src":"7598:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26491,"mutability":"mutable","name":"_local","nameLocation":"7627:6:94","nodeType":"VariableDeclaration","scope":26496,"src":"7619:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26490,"name":"address","nodeType":"ElementaryTypeName","src":"7619:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26493,"mutability":"mutable","name":"_to","nameLocation":"7655:3:94","nodeType":"VariableDeclaration","scope":26496,"src":"7639:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":26492,"name":"address","nodeType":"ElementaryTypeName","src":"7639:15:94","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"7592:70:94"},"returnParameters":{"id":26495,"nodeType":"ParameterList","parameters":[],"src":"7671:0:94"},"scope":26846,"src":"7562:110:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"09d7ba54","id":26503,"implemented":false,"kind":"function","modifiers":[],"name":"getAavePortalDebt","nameLocation":"7702:17:94","nodeType":"FunctionDefinition","parameters":{"id":26499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26498,"mutability":"mutable","name":"_transferId","nameLocation":"7728:11:94","nodeType":"VariableDeclaration","scope":26503,"src":"7720:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26497,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7720:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7719:21:94"},"returnParameters":{"id":26502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26501,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26503,"src":"7764:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26500,"name":"uint256","nodeType":"ElementaryTypeName","src":"7764:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7763:9:94"},"scope":26846,"src":"7693:80:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"d1e5f31c","id":26510,"implemented":false,"kind":"function","modifiers":[],"name":"getAavePortalFeeDebt","nameLocation":"7786:20:94","nodeType":"FunctionDefinition","parameters":{"id":26506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26505,"mutability":"mutable","name":"_transferId","nameLocation":"7815:11:94","nodeType":"VariableDeclaration","scope":26510,"src":"7807:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26504,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7807:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7806:21:94"},"returnParameters":{"id":26509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26508,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26510,"src":"7851:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26507,"name":"uint256","nodeType":"ElementaryTypeName","src":"7851:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7850:9:94"},"scope":26846,"src":"7777:83:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"a03e4bc3","id":26515,"implemented":false,"kind":"function","modifiers":[],"name":"aavePool","nameLocation":"7873:8:94","nodeType":"FunctionDefinition","parameters":{"id":26511,"nodeType":"ParameterList","parameters":[],"src":"7881:2:94"},"returnParameters":{"id":26514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26513,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26515,"src":"7907:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26512,"name":"address","nodeType":"ElementaryTypeName","src":"7907:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7906:9:94"},"scope":26846,"src":"7864:52:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"ef1eb0c1","id":26520,"implemented":false,"kind":"function","modifiers":[],"name":"aavePortalFee","nameLocation":"7929:13:94","nodeType":"FunctionDefinition","parameters":{"id":26516,"nodeType":"ParameterList","parameters":[],"src":"7942:2:94"},"returnParameters":{"id":26519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26518,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26520,"src":"7968:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26517,"name":"uint256","nodeType":"ElementaryTypeName","src":"7968:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7967:9:94"},"scope":26846,"src":"7920:57:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"349f937c","id":26525,"implemented":false,"kind":"function","modifiers":[],"name":"setAavePool","nameLocation":"7990:11:94","nodeType":"FunctionDefinition","parameters":{"id":26523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26522,"mutability":"mutable","name":"_aavePool","nameLocation":"8010:9:94","nodeType":"VariableDeclaration","scope":26525,"src":"8002:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26521,"name":"address","nodeType":"ElementaryTypeName","src":"8002:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8001:19:94"},"returnParameters":{"id":26524,"nodeType":"ParameterList","parameters":[],"src":"8029:0:94"},"scope":26846,"src":"7981:49:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"3bd30d34","id":26530,"implemented":false,"kind":"function","modifiers":[],"name":"setAavePortalFee","nameLocation":"8043:16:94","nodeType":"FunctionDefinition","parameters":{"id":26528,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26527,"mutability":"mutable","name":"_aavePortalFeeNumerator","nameLocation":"8068:23:94","nodeType":"VariableDeclaration","scope":26530,"src":"8060:31:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26526,"name":"uint256","nodeType":"ElementaryTypeName","src":"8060:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8059:33:94"},"returnParameters":{"id":26529,"nodeType":"ParameterList","parameters":[],"src":"8101:0:94"},"scope":26846,"src":"8034:68:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"b3f62fcb","id":26542,"implemented":false,"kind":"function","modifiers":[],"name":"repayAavePortal","nameLocation":"8115:15:94","nodeType":"FunctionDefinition","parameters":{"id":26540,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26533,"mutability":"mutable","name":"_params","nameLocation":"8158:7:94","nodeType":"VariableDeclaration","scope":26542,"src":"8136:29:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo"},"typeName":{"id":26532,"nodeType":"UserDefinedTypeName","pathNode":{"id":26531,"name":"TransferInfo","nameLocations":["8136:12:94"],"nodeType":"IdentifierPath","referencedDeclaration":29351,"src":"8136:12:94"},"referencedDeclaration":29351,"src":"8136:12:94","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_storage_ptr","typeString":"struct TransferInfo"}},"visibility":"internal"},{"constant":false,"id":26535,"mutability":"mutable","name":"_backingAmount","nameLocation":"8179:14:94","nodeType":"VariableDeclaration","scope":26542,"src":"8171:22:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26534,"name":"uint256","nodeType":"ElementaryTypeName","src":"8171:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26537,"mutability":"mutable","name":"_feeAmount","nameLocation":"8207:10:94","nodeType":"VariableDeclaration","scope":26542,"src":"8199:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26536,"name":"uint256","nodeType":"ElementaryTypeName","src":"8199:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26539,"mutability":"mutable","name":"_maxIn","nameLocation":"8231:6:94","nodeType":"VariableDeclaration","scope":26542,"src":"8223:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26538,"name":"uint256","nodeType":"ElementaryTypeName","src":"8223:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8130:111:94"},"returnParameters":{"id":26541,"nodeType":"ParameterList","parameters":[],"src":"8250:0:94"},"scope":26846,"src":"8106:145:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"6a39b95d","id":26552,"implemented":false,"kind":"function","modifiers":[],"name":"repayAavePortalFor","nameLocation":"8264:18:94","nodeType":"FunctionDefinition","parameters":{"id":26550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26545,"mutability":"mutable","name":"_params","nameLocation":"8310:7:94","nodeType":"VariableDeclaration","scope":26552,"src":"8288:29:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_calldata_ptr","typeString":"struct TransferInfo"},"typeName":{"id":26544,"nodeType":"UserDefinedTypeName","pathNode":{"id":26543,"name":"TransferInfo","nameLocations":["8288:12:94"],"nodeType":"IdentifierPath","referencedDeclaration":29351,"src":"8288:12:94"},"referencedDeclaration":29351,"src":"8288:12:94","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_storage_ptr","typeString":"struct TransferInfo"}},"visibility":"internal"},{"constant":false,"id":26547,"mutability":"mutable","name":"_backingAmount","nameLocation":"8331:14:94","nodeType":"VariableDeclaration","scope":26552,"src":"8323:22:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26546,"name":"uint256","nodeType":"ElementaryTypeName","src":"8323:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26549,"mutability":"mutable","name":"_feeAmount","nameLocation":"8359:10:94","nodeType":"VariableDeclaration","scope":26552,"src":"8351:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26548,"name":"uint256","nodeType":"ElementaryTypeName","src":"8351:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8282:91:94"},"returnParameters":{"id":26551,"nodeType":"ParameterList","parameters":[],"src":"8382:0:94"},"scope":26846,"src":"8255:128:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"2d91a515","id":26560,"implemented":false,"kind":"function","modifiers":[],"name":"getSwapStorage","nameLocation":"8417:14:94","nodeType":"FunctionDefinition","parameters":{"id":26555,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26554,"mutability":"mutable","name":"canonicalId","nameLocation":"8440:11:94","nodeType":"VariableDeclaration","scope":26560,"src":"8432:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26553,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8432:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8431:21:94"},"returnParameters":{"id":26559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26558,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26560,"src":"8476:21:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_memory_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":26557,"nodeType":"UserDefinedTypeName","pathNode":{"id":26556,"name":"SwapUtils.Swap","nameLocations":["8476:9:94","8486:4:94"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"8476:14:94"},"referencedDeclaration":30786,"src":"8476:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"}],"src":"8475:23:94"},"scope":26846,"src":"8408:91:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"8b480b12","id":26567,"implemented":false,"kind":"function","modifiers":[],"name":"getSwapLPToken","nameLocation":"8512:14:94","nodeType":"FunctionDefinition","parameters":{"id":26563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26562,"mutability":"mutable","name":"canonicalId","nameLocation":"8535:11:94","nodeType":"VariableDeclaration","scope":26567,"src":"8527:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26561,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8527:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8526:21:94"},"returnParameters":{"id":26566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26565,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26567,"src":"8571:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26564,"name":"address","nodeType":"ElementaryTypeName","src":"8571:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8570:9:94"},"scope":26846,"src":"8503:77:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"d251dc35","id":26574,"implemented":false,"kind":"function","modifiers":[],"name":"getSwapA","nameLocation":"8593:8:94","nodeType":"FunctionDefinition","parameters":{"id":26570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26569,"mutability":"mutable","name":"canonicalId","nameLocation":"8610:11:94","nodeType":"VariableDeclaration","scope":26574,"src":"8602:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26568,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8602:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8601:21:94"},"returnParameters":{"id":26573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26572,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26574,"src":"8646:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26571,"name":"uint256","nodeType":"ElementaryTypeName","src":"8646:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8645:9:94"},"scope":26846,"src":"8584:71:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"7652f59d","id":26581,"implemented":false,"kind":"function","modifiers":[],"name":"getSwapAPrecise","nameLocation":"8668:15:94","nodeType":"FunctionDefinition","parameters":{"id":26577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26576,"mutability":"mutable","name":"canonicalId","nameLocation":"8692:11:94","nodeType":"VariableDeclaration","scope":26581,"src":"8684:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26575,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8684:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8683:21:94"},"returnParameters":{"id":26580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26579,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26581,"src":"8728:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26578,"name":"uint256","nodeType":"ElementaryTypeName","src":"8728:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8727:9:94"},"scope":26846,"src":"8659:78:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b3a4eab4","id":26591,"implemented":false,"kind":"function","modifiers":[],"name":"getSwapToken","nameLocation":"8750:12:94","nodeType":"FunctionDefinition","parameters":{"id":26586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26583,"mutability":"mutable","name":"canonicalId","nameLocation":"8771:11:94","nodeType":"VariableDeclaration","scope":26591,"src":"8763:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26582,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8763:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26585,"mutability":"mutable","name":"index","nameLocation":"8790:5:94","nodeType":"VariableDeclaration","scope":26591,"src":"8784:11:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":26584,"name":"uint8","nodeType":"ElementaryTypeName","src":"8784:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"8762:34:94"},"returnParameters":{"id":26590,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26589,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26591,"src":"8820:6:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":26588,"nodeType":"UserDefinedTypeName","pathNode":{"id":26587,"name":"IERC20","nameLocations":["8820:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"8820:6:94"},"referencedDeclaration":10812,"src":"8820:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"8819:8:94"},"scope":26846,"src":"8741:87:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"ad94911b","id":26600,"implemented":false,"kind":"function","modifiers":[],"name":"getSwapTokenIndex","nameLocation":"8841:17:94","nodeType":"FunctionDefinition","parameters":{"id":26596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26593,"mutability":"mutable","name":"canonicalId","nameLocation":"8867:11:94","nodeType":"VariableDeclaration","scope":26600,"src":"8859:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26592,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8859:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26595,"mutability":"mutable","name":"tokenAddress","nameLocation":"8888:12:94","nodeType":"VariableDeclaration","scope":26600,"src":"8880:20:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26594,"name":"address","nodeType":"ElementaryTypeName","src":"8880:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8858:43:94"},"returnParameters":{"id":26599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26598,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26600,"src":"8925:5:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":26597,"name":"uint8","nodeType":"ElementaryTypeName","src":"8925:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"8924:7:94"},"scope":26846,"src":"8832:100:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"bb0577eb","id":26609,"implemented":false,"kind":"function","modifiers":[],"name":"getSwapTokenBalance","nameLocation":"8945:19:94","nodeType":"FunctionDefinition","parameters":{"id":26605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26602,"mutability":"mutable","name":"canonicalId","nameLocation":"8973:11:94","nodeType":"VariableDeclaration","scope":26609,"src":"8965:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26601,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8965:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26604,"mutability":"mutable","name":"index","nameLocation":"8992:5:94","nodeType":"VariableDeclaration","scope":26609,"src":"8986:11:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":26603,"name":"uint8","nodeType":"ElementaryTypeName","src":"8986:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"8964:34:94"},"returnParameters":{"id":26608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26607,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26609,"src":"9022:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26606,"name":"uint256","nodeType":"ElementaryTypeName","src":"9022:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9021:9:94"},"scope":26846,"src":"8936:95:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"f495e807","id":26616,"implemented":false,"kind":"function","modifiers":[],"name":"getSwapVirtualPrice","nameLocation":"9044:19:94","nodeType":"FunctionDefinition","parameters":{"id":26612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26611,"mutability":"mutable","name":"canonicalId","nameLocation":"9072:11:94","nodeType":"VariableDeclaration","scope":26616,"src":"9064:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26610,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9064:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9063:21:94"},"returnParameters":{"id":26615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26614,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26616,"src":"9108:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26613,"name":"uint256","nodeType":"ElementaryTypeName","src":"9108:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9107:9:94"},"scope":26846,"src":"9035:82:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"8f11d27f","id":26629,"implemented":false,"kind":"function","modifiers":[],"name":"calculateSwap","nameLocation":"9130:13:94","nodeType":"FunctionDefinition","parameters":{"id":26625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26618,"mutability":"mutable","name":"canonicalId","nameLocation":"9157:11:94","nodeType":"VariableDeclaration","scope":26629,"src":"9149:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26617,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9149:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26620,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"9180:14:94","nodeType":"VariableDeclaration","scope":26629,"src":"9174:20:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":26619,"name":"uint8","nodeType":"ElementaryTypeName","src":"9174:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":26622,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"9206:12:94","nodeType":"VariableDeclaration","scope":26629,"src":"9200:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":26621,"name":"uint8","nodeType":"ElementaryTypeName","src":"9200:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":26624,"mutability":"mutable","name":"dx","nameLocation":"9232:2:94","nodeType":"VariableDeclaration","scope":26629,"src":"9224:10:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26623,"name":"uint256","nodeType":"ElementaryTypeName","src":"9224:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9143:95:94"},"returnParameters":{"id":26628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26627,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26629,"src":"9262:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26626,"name":"uint256","nodeType":"ElementaryTypeName","src":"9262:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9261:9:94"},"scope":26846,"src":"9121:150:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"76ca2e52","id":26641,"implemented":false,"kind":"function","modifiers":[],"name":"calculateSwapTokenAmount","nameLocation":"9284:24:94","nodeType":"FunctionDefinition","parameters":{"id":26637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26631,"mutability":"mutable","name":"canonicalId","nameLocation":"9322:11:94","nodeType":"VariableDeclaration","scope":26641,"src":"9314:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26630,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9314:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26634,"mutability":"mutable","name":"amounts","nameLocation":"9358:7:94","nodeType":"VariableDeclaration","scope":26641,"src":"9339:26:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":26632,"name":"uint256","nodeType":"ElementaryTypeName","src":"9339:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26633,"nodeType":"ArrayTypeName","src":"9339:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":26636,"mutability":"mutable","name":"deposit","nameLocation":"9376:7:94","nodeType":"VariableDeclaration","scope":26641,"src":"9371:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":26635,"name":"bool","nodeType":"ElementaryTypeName","src":"9371:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9308:79:94"},"returnParameters":{"id":26640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26639,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26641,"src":"9411:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26638,"name":"uint256","nodeType":"ElementaryTypeName","src":"9411:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9410:9:94"},"scope":26846,"src":"9275:145:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"a02288f4","id":26651,"implemented":false,"kind":"function","modifiers":[],"name":"calculateRemoveSwapLiquidity","nameLocation":"9433:28:94","nodeType":"FunctionDefinition","parameters":{"id":26646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26643,"mutability":"mutable","name":"canonicalId","nameLocation":"9470:11:94","nodeType":"VariableDeclaration","scope":26651,"src":"9462:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26642,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9462:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26645,"mutability":"mutable","name":"amount","nameLocation":"9491:6:94","nodeType":"VariableDeclaration","scope":26651,"src":"9483:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26644,"name":"uint256","nodeType":"ElementaryTypeName","src":"9483:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9461:37:94"},"returnParameters":{"id":26650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26649,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26651,"src":"9522:16:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":26647,"name":"uint256","nodeType":"ElementaryTypeName","src":"9522:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26648,"nodeType":"ArrayTypeName","src":"9522:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9521:18:94"},"scope":26846,"src":"9424:116:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"29d99b10","id":26662,"implemented":false,"kind":"function","modifiers":[],"name":"calculateRemoveSwapLiquidityOneToken","nameLocation":"9553:36:94","nodeType":"FunctionDefinition","parameters":{"id":26658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26653,"mutability":"mutable","name":"canonicalId","nameLocation":"9603:11:94","nodeType":"VariableDeclaration","scope":26662,"src":"9595:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26652,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9595:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26655,"mutability":"mutable","name":"tokenAmount","nameLocation":"9628:11:94","nodeType":"VariableDeclaration","scope":26662,"src":"9620:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26654,"name":"uint256","nodeType":"ElementaryTypeName","src":"9620:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26657,"mutability":"mutable","name":"tokenIndex","nameLocation":"9651:10:94","nodeType":"VariableDeclaration","scope":26662,"src":"9645:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":26656,"name":"uint8","nodeType":"ElementaryTypeName","src":"9645:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"9589:76:94"},"returnParameters":{"id":26661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26660,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26662,"src":"9689:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26659,"name":"uint256","nodeType":"ElementaryTypeName","src":"9689:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9688:9:94"},"scope":26846,"src":"9544:154:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"1301caa2","id":26671,"implemented":false,"kind":"function","modifiers":[],"name":"getSwapAdminBalance","nameLocation":"9711:19:94","nodeType":"FunctionDefinition","parameters":{"id":26667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26664,"mutability":"mutable","name":"canonicalId","nameLocation":"9739:11:94","nodeType":"VariableDeclaration","scope":26671,"src":"9731:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26663,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9731:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26666,"mutability":"mutable","name":"index","nameLocation":"9760:5:94","nodeType":"VariableDeclaration","scope":26671,"src":"9752:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26665,"name":"uint256","nodeType":"ElementaryTypeName","src":"9752:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9730:36:94"},"returnParameters":{"id":26670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26669,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26671,"src":"9790:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26668,"name":"uint256","nodeType":"ElementaryTypeName","src":"9790:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9789:9:94"},"scope":26846,"src":"9702:97:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"ff126de9","id":26688,"implemented":false,"kind":"function","modifiers":[],"name":"swap","nameLocation":"9812:4:94","nodeType":"FunctionDefinition","parameters":{"id":26684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26673,"mutability":"mutable","name":"canonicalId","nameLocation":"9830:11:94","nodeType":"VariableDeclaration","scope":26688,"src":"9822:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26672,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9822:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26675,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"9853:14:94","nodeType":"VariableDeclaration","scope":26688,"src":"9847:20:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":26674,"name":"uint8","nodeType":"ElementaryTypeName","src":"9847:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":26677,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"9879:12:94","nodeType":"VariableDeclaration","scope":26688,"src":"9873:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":26676,"name":"uint8","nodeType":"ElementaryTypeName","src":"9873:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":26679,"mutability":"mutable","name":"dx","nameLocation":"9905:2:94","nodeType":"VariableDeclaration","scope":26688,"src":"9897:10:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26678,"name":"uint256","nodeType":"ElementaryTypeName","src":"9897:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26681,"mutability":"mutable","name":"minDy","nameLocation":"9921:5:94","nodeType":"VariableDeclaration","scope":26688,"src":"9913:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26680,"name":"uint256","nodeType":"ElementaryTypeName","src":"9913:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26683,"mutability":"mutable","name":"deadline","nameLocation":"9940:8:94","nodeType":"VariableDeclaration","scope":26688,"src":"9932:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26682,"name":"uint256","nodeType":"ElementaryTypeName","src":"9932:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9816:136:94"},"returnParameters":{"id":26687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26686,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26688,"src":"9971:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26685,"name":"uint256","nodeType":"ElementaryTypeName","src":"9971:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9970:9:94"},"scope":26846,"src":"9803:177:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"80b297e8","id":26705,"implemented":false,"kind":"function","modifiers":[],"name":"swapExact","nameLocation":"9993:9:94","nodeType":"FunctionDefinition","parameters":{"id":26701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26690,"mutability":"mutable","name":"canonicalId","nameLocation":"10016:11:94","nodeType":"VariableDeclaration","scope":26705,"src":"10008:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26689,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10008:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26692,"mutability":"mutable","name":"amountIn","nameLocation":"10041:8:94","nodeType":"VariableDeclaration","scope":26705,"src":"10033:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26691,"name":"uint256","nodeType":"ElementaryTypeName","src":"10033:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26694,"mutability":"mutable","name":"assetIn","nameLocation":"10063:7:94","nodeType":"VariableDeclaration","scope":26705,"src":"10055:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26693,"name":"address","nodeType":"ElementaryTypeName","src":"10055:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26696,"mutability":"mutable","name":"assetOut","nameLocation":"10084:8:94","nodeType":"VariableDeclaration","scope":26705,"src":"10076:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26695,"name":"address","nodeType":"ElementaryTypeName","src":"10076:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26698,"mutability":"mutable","name":"minAmountOut","nameLocation":"10106:12:94","nodeType":"VariableDeclaration","scope":26705,"src":"10098:20:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26697,"name":"uint256","nodeType":"ElementaryTypeName","src":"10098:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26700,"mutability":"mutable","name":"deadline","nameLocation":"10132:8:94","nodeType":"VariableDeclaration","scope":26705,"src":"10124:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26699,"name":"uint256","nodeType":"ElementaryTypeName","src":"10124:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10002:142:94"},"returnParameters":{"id":26704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26703,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26705,"src":"10171:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26702,"name":"uint256","nodeType":"ElementaryTypeName","src":"10171:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10170:9:94"},"scope":26846,"src":"9984:196:94","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"74c6b89b","id":26722,"implemented":false,"kind":"function","modifiers":[],"name":"swapExactOut","nameLocation":"10193:12:94","nodeType":"FunctionDefinition","parameters":{"id":26718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26707,"mutability":"mutable","name":"canonicalId","nameLocation":"10219:11:94","nodeType":"VariableDeclaration","scope":26722,"src":"10211:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26706,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10211:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26709,"mutability":"mutable","name":"amountOut","nameLocation":"10244:9:94","nodeType":"VariableDeclaration","scope":26722,"src":"10236:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26708,"name":"uint256","nodeType":"ElementaryTypeName","src":"10236:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26711,"mutability":"mutable","name":"assetIn","nameLocation":"10267:7:94","nodeType":"VariableDeclaration","scope":26722,"src":"10259:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26710,"name":"address","nodeType":"ElementaryTypeName","src":"10259:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26713,"mutability":"mutable","name":"assetOut","nameLocation":"10288:8:94","nodeType":"VariableDeclaration","scope":26722,"src":"10280:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26712,"name":"address","nodeType":"ElementaryTypeName","src":"10280:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26715,"mutability":"mutable","name":"maxAmountIn","nameLocation":"10310:11:94","nodeType":"VariableDeclaration","scope":26722,"src":"10302:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26714,"name":"uint256","nodeType":"ElementaryTypeName","src":"10302:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26717,"mutability":"mutable","name":"deadline","nameLocation":"10335:8:94","nodeType":"VariableDeclaration","scope":26722,"src":"10327:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26716,"name":"uint256","nodeType":"ElementaryTypeName","src":"10327:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10205:142:94"},"returnParameters":{"id":26721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26720,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26722,"src":"10374:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26719,"name":"uint256","nodeType":"ElementaryTypeName","src":"10374:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10373:9:94"},"scope":26846,"src":"10184:199:94","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"8d365457","id":26736,"implemented":false,"kind":"function","modifiers":[],"name":"addSwapLiquidity","nameLocation":"10396:16:94","nodeType":"FunctionDefinition","parameters":{"id":26732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26724,"mutability":"mutable","name":"canonicalId","nameLocation":"10426:11:94","nodeType":"VariableDeclaration","scope":26736,"src":"10418:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26723,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10418:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26727,"mutability":"mutable","name":"amounts","nameLocation":"10462:7:94","nodeType":"VariableDeclaration","scope":26736,"src":"10443:26:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":26725,"name":"uint256","nodeType":"ElementaryTypeName","src":"10443:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26726,"nodeType":"ArrayTypeName","src":"10443:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":26729,"mutability":"mutable","name":"minToMint","nameLocation":"10483:9:94","nodeType":"VariableDeclaration","scope":26736,"src":"10475:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26728,"name":"uint256","nodeType":"ElementaryTypeName","src":"10475:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26731,"mutability":"mutable","name":"deadline","nameLocation":"10506:8:94","nodeType":"VariableDeclaration","scope":26736,"src":"10498:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26730,"name":"uint256","nodeType":"ElementaryTypeName","src":"10498:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10412:106:94"},"returnParameters":{"id":26735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26734,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26736,"src":"10537:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26733,"name":"uint256","nodeType":"ElementaryTypeName","src":"10537:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10536:9:94"},"scope":26846,"src":"10387:159:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"4bbcba8e","id":26751,"implemented":false,"kind":"function","modifiers":[],"name":"removeSwapLiquidity","nameLocation":"10559:19:94","nodeType":"FunctionDefinition","parameters":{"id":26746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26738,"mutability":"mutable","name":"canonicalId","nameLocation":"10592:11:94","nodeType":"VariableDeclaration","scope":26751,"src":"10584:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26737,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10584:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26740,"mutability":"mutable","name":"amount","nameLocation":"10617:6:94","nodeType":"VariableDeclaration","scope":26751,"src":"10609:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26739,"name":"uint256","nodeType":"ElementaryTypeName","src":"10609:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26743,"mutability":"mutable","name":"minAmounts","nameLocation":"10648:10:94","nodeType":"VariableDeclaration","scope":26751,"src":"10629:29:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":26741,"name":"uint256","nodeType":"ElementaryTypeName","src":"10629:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26742,"nodeType":"ArrayTypeName","src":"10629:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":26745,"mutability":"mutable","name":"deadline","nameLocation":"10672:8:94","nodeType":"VariableDeclaration","scope":26751,"src":"10664:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26744,"name":"uint256","nodeType":"ElementaryTypeName","src":"10664:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10578:106:94"},"returnParameters":{"id":26750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26749,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26751,"src":"10703:16:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":26747,"name":"uint256","nodeType":"ElementaryTypeName","src":"10703:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26748,"nodeType":"ArrayTypeName","src":"10703:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10702:18:94"},"scope":26846,"src":"10550:171:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"b6618dff","id":26766,"implemented":false,"kind":"function","modifiers":[],"name":"removeSwapLiquidityOneToken","nameLocation":"10734:27:94","nodeType":"FunctionDefinition","parameters":{"id":26762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26753,"mutability":"mutable","name":"canonicalId","nameLocation":"10775:11:94","nodeType":"VariableDeclaration","scope":26766,"src":"10767:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26752,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10767:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26755,"mutability":"mutable","name":"tokenAmount","nameLocation":"10800:11:94","nodeType":"VariableDeclaration","scope":26766,"src":"10792:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26754,"name":"uint256","nodeType":"ElementaryTypeName","src":"10792:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26757,"mutability":"mutable","name":"tokenIndex","nameLocation":"10823:10:94","nodeType":"VariableDeclaration","scope":26766,"src":"10817:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":26756,"name":"uint8","nodeType":"ElementaryTypeName","src":"10817:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":26759,"mutability":"mutable","name":"minAmount","nameLocation":"10847:9:94","nodeType":"VariableDeclaration","scope":26766,"src":"10839:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26758,"name":"uint256","nodeType":"ElementaryTypeName","src":"10839:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26761,"mutability":"mutable","name":"deadline","nameLocation":"10870:8:94","nodeType":"VariableDeclaration","scope":26766,"src":"10862:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26760,"name":"uint256","nodeType":"ElementaryTypeName","src":"10862:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10761:121:94"},"returnParameters":{"id":26765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26764,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26766,"src":"10901:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26763,"name":"uint256","nodeType":"ElementaryTypeName","src":"10901:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10900:9:94"},"scope":26846,"src":"10725:185:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"241ca57a","id":26780,"implemented":false,"kind":"function","modifiers":[],"name":"removeSwapLiquidityImbalance","nameLocation":"10923:28:94","nodeType":"FunctionDefinition","parameters":{"id":26776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26768,"mutability":"mutable","name":"canonicalId","nameLocation":"10965:11:94","nodeType":"VariableDeclaration","scope":26780,"src":"10957:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26767,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10957:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26771,"mutability":"mutable","name":"amounts","nameLocation":"11001:7:94","nodeType":"VariableDeclaration","scope":26780,"src":"10982:26:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":26769,"name":"uint256","nodeType":"ElementaryTypeName","src":"10982:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26770,"nodeType":"ArrayTypeName","src":"10982:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":26773,"mutability":"mutable","name":"maxBurnAmount","nameLocation":"11022:13:94","nodeType":"VariableDeclaration","scope":26780,"src":"11014:21:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26772,"name":"uint256","nodeType":"ElementaryTypeName","src":"11014:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26775,"mutability":"mutable","name":"deadline","nameLocation":"11049:8:94","nodeType":"VariableDeclaration","scope":26780,"src":"11041:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26774,"name":"uint256","nodeType":"ElementaryTypeName","src":"11041:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10951:110:94"},"returnParameters":{"id":26779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26778,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26780,"src":"11080:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26777,"name":"uint256","nodeType":"ElementaryTypeName","src":"11080:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11079:9:94"},"scope":26846,"src":"10914:175:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"e5f6220f","id":26802,"implemented":false,"kind":"function","modifiers":[],"name":"initializeSwap","nameLocation":"11123:14:94","nodeType":"FunctionDefinition","parameters":{"id":26800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26782,"mutability":"mutable","name":"_canonicalId","nameLocation":"11151:12:94","nodeType":"VariableDeclaration","scope":26802,"src":"11143:20:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26781,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11143:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26786,"mutability":"mutable","name":"_pooledTokens","nameLocation":"11185:13:94","nodeType":"VariableDeclaration","scope":26802,"src":"11169:29:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":26784,"nodeType":"UserDefinedTypeName","pathNode":{"id":26783,"name":"IERC20","nameLocations":["11169:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"11169:6:94"},"referencedDeclaration":10812,"src":"11169:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":26785,"nodeType":"ArrayTypeName","src":"11169:8:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":26789,"mutability":"mutable","name":"decimals","nameLocation":"11219:8:94","nodeType":"VariableDeclaration","scope":26802,"src":"11204:23:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[]"},"typeName":{"baseType":{"id":26787,"name":"uint8","nodeType":"ElementaryTypeName","src":"11204:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":26788,"nodeType":"ArrayTypeName","src":"11204:7:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_storage_ptr","typeString":"uint8[]"}},"visibility":"internal"},{"constant":false,"id":26791,"mutability":"mutable","name":"lpTokenName","nameLocation":"11247:11:94","nodeType":"VariableDeclaration","scope":26802,"src":"11233:25:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":26790,"name":"string","nodeType":"ElementaryTypeName","src":"11233:6:94","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":26793,"mutability":"mutable","name":"lpTokenSymbol","nameLocation":"11278:13:94","nodeType":"VariableDeclaration","scope":26802,"src":"11264:27:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":26792,"name":"string","nodeType":"ElementaryTypeName","src":"11264:6:94","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":26795,"mutability":"mutable","name":"_a","nameLocation":"11305:2:94","nodeType":"VariableDeclaration","scope":26802,"src":"11297:10:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26794,"name":"uint256","nodeType":"ElementaryTypeName","src":"11297:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26797,"mutability":"mutable","name":"_fee","nameLocation":"11321:4:94","nodeType":"VariableDeclaration","scope":26802,"src":"11313:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26796,"name":"uint256","nodeType":"ElementaryTypeName","src":"11313:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26799,"mutability":"mutable","name":"_adminFee","nameLocation":"11339:9:94","nodeType":"VariableDeclaration","scope":26802,"src":"11331:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26798,"name":"uint256","nodeType":"ElementaryTypeName","src":"11331:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11137:215:94"},"returnParameters":{"id":26801,"nodeType":"ParameterList","parameters":[],"src":"11361:0:94"},"scope":26846,"src":"11114:248:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"a1a23c29","id":26807,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawSwapAdminFees","nameLocation":"11375:21:94","nodeType":"FunctionDefinition","parameters":{"id":26805,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26804,"mutability":"mutable","name":"canonicalId","nameLocation":"11405:11:94","nodeType":"VariableDeclaration","scope":26807,"src":"11397:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26803,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11397:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11396:21:94"},"returnParameters":{"id":26806,"nodeType":"ParameterList","parameters":[],"src":"11426:0:94"},"scope":26846,"src":"11366:61:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"9c8eab97","id":26814,"implemented":false,"kind":"function","modifiers":[],"name":"setSwapAdminFee","nameLocation":"11440:15:94","nodeType":"FunctionDefinition","parameters":{"id":26812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26809,"mutability":"mutable","name":"canonicalId","nameLocation":"11464:11:94","nodeType":"VariableDeclaration","scope":26814,"src":"11456:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26808,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11456:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26811,"mutability":"mutable","name":"newAdminFee","nameLocation":"11485:11:94","nodeType":"VariableDeclaration","scope":26814,"src":"11477:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26810,"name":"uint256","nodeType":"ElementaryTypeName","src":"11477:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11455:42:94"},"returnParameters":{"id":26813,"nodeType":"ParameterList","parameters":[],"src":"11506:0:94"},"scope":26846,"src":"11431:76:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"43be5eaf","id":26821,"implemented":false,"kind":"function","modifiers":[],"name":"setSwapFee","nameLocation":"11520:10:94","nodeType":"FunctionDefinition","parameters":{"id":26819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26816,"mutability":"mutable","name":"canonicalId","nameLocation":"11539:11:94","nodeType":"VariableDeclaration","scope":26821,"src":"11531:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26815,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11531:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26818,"mutability":"mutable","name":"newSwapFee","nameLocation":"11560:10:94","nodeType":"VariableDeclaration","scope":26821,"src":"11552:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26817,"name":"uint256","nodeType":"ElementaryTypeName","src":"11552:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11530:41:94"},"returnParameters":{"id":26820,"nodeType":"ParameterList","parameters":[],"src":"11580:0:94"},"scope":26846,"src":"11511:70:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"1963e426","id":26830,"implemented":false,"kind":"function","modifiers":[],"name":"rampA","nameLocation":"11594:5:94","nodeType":"FunctionDefinition","parameters":{"id":26828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26823,"mutability":"mutable","name":"canonicalId","nameLocation":"11613:11:94","nodeType":"VariableDeclaration","scope":26830,"src":"11605:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26822,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11605:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":26825,"mutability":"mutable","name":"futureA","nameLocation":"11638:7:94","nodeType":"VariableDeclaration","scope":26830,"src":"11630:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26824,"name":"uint256","nodeType":"ElementaryTypeName","src":"11630:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26827,"mutability":"mutable","name":"futureTime","nameLocation":"11659:10:94","nodeType":"VariableDeclaration","scope":26830,"src":"11651:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26826,"name":"uint256","nodeType":"ElementaryTypeName","src":"11651:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11599:74:94"},"returnParameters":{"id":26829,"nodeType":"ParameterList","parameters":[],"src":"11682:0:94"},"scope":26846,"src":"11585:98:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"72a30e08","id":26835,"implemented":false,"kind":"function","modifiers":[],"name":"stopRampA","nameLocation":"11696:9:94","nodeType":"FunctionDefinition","parameters":{"id":26833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26832,"mutability":"mutable","name":"canonicalId","nameLocation":"11714:11:94","nodeType":"VariableDeclaration","scope":26835,"src":"11706:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":26831,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11706:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11705:21:94"},"returnParameters":{"id":26834,"nodeType":"ParameterList","parameters":[],"src":"11735:0:94"},"scope":26846,"src":"11687:49:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"2bf63bcc","id":26840,"implemented":false,"kind":"function","modifiers":[],"name":"lpTokenTargetAddress","nameLocation":"11749:20:94","nodeType":"FunctionDefinition","parameters":{"id":26836,"nodeType":"ParameterList","parameters":[],"src":"11769:2:94"},"returnParameters":{"id":26839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26838,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26840,"src":"11795:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26837,"name":"address","nodeType":"ElementaryTypeName","src":"11795:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11794:9:94"},"scope":26846,"src":"11740:64:94","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"8dc51484","id":26845,"implemented":false,"kind":"function","modifiers":[],"name":"updateLpTokenTarget","nameLocation":"11817:19:94","nodeType":"FunctionDefinition","parameters":{"id":26843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26842,"mutability":"mutable","name":"newAddress","nameLocation":"11845:10:94","nodeType":"VariableDeclaration","scope":26845,"src":"11837:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26841,"name":"address","nodeType":"ElementaryTypeName","src":"11837:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11836:20:94"},"returnParameters":{"id":26844,"nodeType":"ParameterList","parameters":[],"src":"11865:0:94"},"scope":26846,"src":"11808:58:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":26847,"src":"558:11310:94","usedErrors":[]}],"src":"39:11830:94"},"id":94},"contracts/core/connext/interfaces/IDiamondCut.sol":{"ast":{"absolutePath":"contracts/core/connext/interfaces/IDiamondCut.sol","exportedSymbols":{"IDiamondCut":[26944]},"id":26945,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":26848,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"32:23:95"},{"abstract":false,"baseContracts":[],"canonicalName":"IDiamondCut","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":26944,"linearizedBaseContracts":[26944],"name":"IDiamondCut","nameLocation":"372:11:95","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IDiamondCut.FacetCutAction","id":26852,"members":[{"id":26849,"name":"Add","nameLocation":"414:3:95","nodeType":"EnumValue","src":"414:3:95"},{"id":26850,"name":"Replace","nameLocation":"423:7:95","nodeType":"EnumValue","src":"423:7:95"},{"id":26851,"name":"Remove","nameLocation":"436:6:95","nodeType":"EnumValue","src":"436:6:95"}],"name":"FacetCutAction","nameLocation":"393:14:95","nodeType":"EnumDefinition","src":"388:58:95"},{"canonicalName":"IDiamondCut.FacetCut","id":26861,"members":[{"constant":false,"id":26854,"mutability":"mutable","name":"facetAddress","nameLocation":"512:12:95","nodeType":"VariableDeclaration","scope":26861,"src":"504:20:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26853,"name":"address","nodeType":"ElementaryTypeName","src":"504:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26857,"mutability":"mutable","name":"action","nameLocation":"545:6:95","nodeType":"VariableDeclaration","scope":26861,"src":"530:21:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_FacetCutAction_$26852","typeString":"enum IDiamondCut.FacetCutAction"},"typeName":{"id":26856,"nodeType":"UserDefinedTypeName","pathNode":{"id":26855,"name":"FacetCutAction","nameLocations":["530:14:95"],"nodeType":"IdentifierPath","referencedDeclaration":26852,"src":"530:14:95"},"referencedDeclaration":26852,"src":"530:14:95","typeDescriptions":{"typeIdentifier":"t_enum$_FacetCutAction_$26852","typeString":"enum IDiamondCut.FacetCutAction"}},"visibility":"internal"},{"constant":false,"id":26860,"mutability":"mutable","name":"functionSelectors","nameLocation":"566:17:95","nodeType":"VariableDeclaration","scope":26861,"src":"557:26:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"},"typeName":{"baseType":{"id":26858,"name":"bytes4","nodeType":"ElementaryTypeName","src":"557:6:95","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":26859,"nodeType":"ArrayTypeName","src":"557:8:95","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"}},"visibility":"internal"}],"name":"FacetCut","nameLocation":"489:8:95","nodeType":"StructDefinition","scope":26944,"src":"482:106:95","visibility":"public"},{"documentation":{"id":26862,"nodeType":"StructuredDocumentation","src":"592:439:95","text":"@notice Propose to add/replace/remove any number of functions and optionally execute\n         a function with delegatecall\n @param _diamondCut Contains the facet addresses and function selectors\n @param _init The address of the contract or facet to execute _calldata\n @param _calldata A function call, including function selector and arguments\n                  _calldata is executed with delegatecall on _init"},"functionSelector":"bbf2358e","id":26873,"implemented":false,"kind":"function","modifiers":[],"name":"proposeDiamondCut","nameLocation":"1043:17:95","nodeType":"FunctionDefinition","parameters":{"id":26871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26866,"mutability":"mutable","name":"_diamondCut","nameLocation":"1086:11:95","nodeType":"VariableDeclaration","scope":26873,"src":"1066:31:95","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IDiamondCut.FacetCut[]"},"typeName":{"baseType":{"id":26864,"nodeType":"UserDefinedTypeName","pathNode":{"id":26863,"name":"FacetCut","nameLocations":["1066:8:95"],"nodeType":"IdentifierPath","referencedDeclaration":26861,"src":"1066:8:95"},"referencedDeclaration":26861,"src":"1066:8:95","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_storage_ptr","typeString":"struct IDiamondCut.FacetCut"}},"id":26865,"nodeType":"ArrayTypeName","src":"1066:10:95","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_storage_$dyn_storage_ptr","typeString":"struct IDiamondCut.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":26868,"mutability":"mutable","name":"_init","nameLocation":"1111:5:95","nodeType":"VariableDeclaration","scope":26873,"src":"1103:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26867,"name":"address","nodeType":"ElementaryTypeName","src":"1103:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26870,"mutability":"mutable","name":"_calldata","nameLocation":"1137:9:95","nodeType":"VariableDeclaration","scope":26873,"src":"1122:24:95","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":26869,"name":"bytes","nodeType":"ElementaryTypeName","src":"1122:5:95","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1060:90:95"},"returnParameters":{"id":26872,"nodeType":"ParameterList","parameters":[],"src":"1159:0:95"},"scope":26944,"src":"1034:126:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"anonymous":false,"eventSelector":"6c20294df7018c510b52fd6cc0352d7b78056de164d751b75da6ef7b63daa83e","id":26885,"name":"DiamondCutProposed","nameLocation":"1170:18:95","nodeType":"EventDefinition","parameters":{"id":26884,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26877,"indexed":false,"mutability":"mutable","name":"_diamondCut","nameLocation":"1200:11:95","nodeType":"VariableDeclaration","scope":26885,"src":"1189:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut[]"},"typeName":{"baseType":{"id":26875,"nodeType":"UserDefinedTypeName","pathNode":{"id":26874,"name":"FacetCut","nameLocations":["1189:8:95"],"nodeType":"IdentifierPath","referencedDeclaration":26861,"src":"1189:8:95"},"referencedDeclaration":26861,"src":"1189:8:95","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_storage_ptr","typeString":"struct IDiamondCut.FacetCut"}},"id":26876,"nodeType":"ArrayTypeName","src":"1189:10:95","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_storage_$dyn_storage_ptr","typeString":"struct IDiamondCut.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":26879,"indexed":false,"mutability":"mutable","name":"_init","nameLocation":"1221:5:95","nodeType":"VariableDeclaration","scope":26885,"src":"1213:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26878,"name":"address","nodeType":"ElementaryTypeName","src":"1213:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26881,"indexed":false,"mutability":"mutable","name":"_calldata","nameLocation":"1234:9:95","nodeType":"VariableDeclaration","scope":26885,"src":"1228:15:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":26880,"name":"bytes","nodeType":"ElementaryTypeName","src":"1228:5:95","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":26883,"indexed":false,"mutability":"mutable","name":"deadline","nameLocation":"1253:8:95","nodeType":"VariableDeclaration","scope":26885,"src":"1245:16:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26882,"name":"uint256","nodeType":"ElementaryTypeName","src":"1245:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1188:74:95"},"src":"1164:99:95"},{"documentation":{"id":26886,"nodeType":"StructuredDocumentation","src":"1267:428:95","text":"@notice Add/replace/remove any number of functions and optionally execute\n         a function with delegatecall\n @param _diamondCut Contains the facet addresses and function selectors\n @param _init The address of the contract or facet to execute _calldata\n @param _calldata A function call, including function selector and arguments\n                  _calldata is executed with delegatecall on _init"},"functionSelector":"1f931c1c","id":26897,"implemented":false,"kind":"function","modifiers":[],"name":"diamondCut","nameLocation":"1707:10:95","nodeType":"FunctionDefinition","parameters":{"id":26895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26890,"mutability":"mutable","name":"_diamondCut","nameLocation":"1743:11:95","nodeType":"VariableDeclaration","scope":26897,"src":"1723:31:95","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IDiamondCut.FacetCut[]"},"typeName":{"baseType":{"id":26888,"nodeType":"UserDefinedTypeName","pathNode":{"id":26887,"name":"FacetCut","nameLocations":["1723:8:95"],"nodeType":"IdentifierPath","referencedDeclaration":26861,"src":"1723:8:95"},"referencedDeclaration":26861,"src":"1723:8:95","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_storage_ptr","typeString":"struct IDiamondCut.FacetCut"}},"id":26889,"nodeType":"ArrayTypeName","src":"1723:10:95","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_storage_$dyn_storage_ptr","typeString":"struct IDiamondCut.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":26892,"mutability":"mutable","name":"_init","nameLocation":"1768:5:95","nodeType":"VariableDeclaration","scope":26897,"src":"1760:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26891,"name":"address","nodeType":"ElementaryTypeName","src":"1760:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26894,"mutability":"mutable","name":"_calldata","nameLocation":"1794:9:95","nodeType":"VariableDeclaration","scope":26897,"src":"1779:24:95","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":26893,"name":"bytes","nodeType":"ElementaryTypeName","src":"1779:5:95","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1717:90:95"},"returnParameters":{"id":26896,"nodeType":"ParameterList","parameters":[],"src":"1816:0:95"},"scope":26944,"src":"1698:119:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"anonymous":false,"eventSelector":"8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673","id":26907,"name":"DiamondCut","nameLocation":"1827:10:95","nodeType":"EventDefinition","parameters":{"id":26906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26901,"indexed":false,"mutability":"mutable","name":"_diamondCut","nameLocation":"1849:11:95","nodeType":"VariableDeclaration","scope":26907,"src":"1838:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut[]"},"typeName":{"baseType":{"id":26899,"nodeType":"UserDefinedTypeName","pathNode":{"id":26898,"name":"FacetCut","nameLocations":["1838:8:95"],"nodeType":"IdentifierPath","referencedDeclaration":26861,"src":"1838:8:95"},"referencedDeclaration":26861,"src":"1838:8:95","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_storage_ptr","typeString":"struct IDiamondCut.FacetCut"}},"id":26900,"nodeType":"ArrayTypeName","src":"1838:10:95","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_storage_$dyn_storage_ptr","typeString":"struct IDiamondCut.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":26903,"indexed":false,"mutability":"mutable","name":"_init","nameLocation":"1870:5:95","nodeType":"VariableDeclaration","scope":26907,"src":"1862:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26902,"name":"address","nodeType":"ElementaryTypeName","src":"1862:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26905,"indexed":false,"mutability":"mutable","name":"_calldata","nameLocation":"1883:9:95","nodeType":"VariableDeclaration","scope":26907,"src":"1877:15:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":26904,"name":"bytes","nodeType":"ElementaryTypeName","src":"1877:5:95","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1837:56:95"},"src":"1821:73:95"},{"documentation":{"id":26908,"nodeType":"StructuredDocumentation","src":"1898:439:95","text":"@notice Propose to add/replace/remove any number of functions and optionally execute\n         a function with delegatecall\n @param _diamondCut Contains the facet addresses and function selectors\n @param _init The address of the contract or facet to execute _calldata\n @param _calldata A function call, including function selector and arguments\n                  _calldata is executed with delegatecall on _init"},"functionSelector":"2c67849c","id":26919,"implemented":false,"kind":"function","modifiers":[],"name":"rescindDiamondCut","nameLocation":"2349:17:95","nodeType":"FunctionDefinition","parameters":{"id":26917,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26912,"mutability":"mutable","name":"_diamondCut","nameLocation":"2392:11:95","nodeType":"VariableDeclaration","scope":26919,"src":"2372:31:95","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IDiamondCut.FacetCut[]"},"typeName":{"baseType":{"id":26910,"nodeType":"UserDefinedTypeName","pathNode":{"id":26909,"name":"FacetCut","nameLocations":["2372:8:95"],"nodeType":"IdentifierPath","referencedDeclaration":26861,"src":"2372:8:95"},"referencedDeclaration":26861,"src":"2372:8:95","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_storage_ptr","typeString":"struct IDiamondCut.FacetCut"}},"id":26911,"nodeType":"ArrayTypeName","src":"2372:10:95","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_storage_$dyn_storage_ptr","typeString":"struct IDiamondCut.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":26914,"mutability":"mutable","name":"_init","nameLocation":"2417:5:95","nodeType":"VariableDeclaration","scope":26919,"src":"2409:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26913,"name":"address","nodeType":"ElementaryTypeName","src":"2409:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26916,"mutability":"mutable","name":"_calldata","nameLocation":"2443:9:95","nodeType":"VariableDeclaration","scope":26919,"src":"2428:24:95","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":26915,"name":"bytes","nodeType":"ElementaryTypeName","src":"2428:5:95","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2366:90:95"},"returnParameters":{"id":26918,"nodeType":"ParameterList","parameters":[],"src":"2465:0:95"},"scope":26944,"src":"2340:126:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":26920,"nodeType":"StructuredDocumentation","src":"2470:358:95","text":" @notice Returns the acceptance time for a given proposal\n @param _diamondCut Contains the facet addresses and function selectors\n @param _init The address of the contract or facet to execute _calldata\n @param _calldata A function call, including function selector and arguments _calldata is\n executed with delegatecall on _init"},"functionSelector":"56a8ea48","id":26933,"implemented":false,"kind":"function","modifiers":[],"name":"getAcceptanceTime","nameLocation":"2840:17:95","nodeType":"FunctionDefinition","parameters":{"id":26929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26924,"mutability":"mutable","name":"_diamondCut","nameLocation":"2883:11:95","nodeType":"VariableDeclaration","scope":26933,"src":"2863:31:95","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IDiamondCut.FacetCut[]"},"typeName":{"baseType":{"id":26922,"nodeType":"UserDefinedTypeName","pathNode":{"id":26921,"name":"FacetCut","nameLocations":["2863:8:95"],"nodeType":"IdentifierPath","referencedDeclaration":26861,"src":"2863:8:95"},"referencedDeclaration":26861,"src":"2863:8:95","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_storage_ptr","typeString":"struct IDiamondCut.FacetCut"}},"id":26923,"nodeType":"ArrayTypeName","src":"2863:10:95","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_storage_$dyn_storage_ptr","typeString":"struct IDiamondCut.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":26926,"mutability":"mutable","name":"_init","nameLocation":"2908:5:95","nodeType":"VariableDeclaration","scope":26933,"src":"2900:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26925,"name":"address","nodeType":"ElementaryTypeName","src":"2900:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26928,"mutability":"mutable","name":"_calldata","nameLocation":"2934:9:95","nodeType":"VariableDeclaration","scope":26933,"src":"2919:24:95","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":26927,"name":"bytes","nodeType":"ElementaryTypeName","src":"2919:5:95","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2857:90:95"},"returnParameters":{"id":26932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26931,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26933,"src":"2966:7:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26930,"name":"uint256","nodeType":"ElementaryTypeName","src":"2966:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2965:9:95"},"scope":26944,"src":"2831:144:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"anonymous":false,"eventSelector":"47b4eb69218cd939e2a72afd9d24fe3a6ca02515a6d712ff3942062df2eedbdb","id":26943,"name":"DiamondCutRescinded","nameLocation":"2985:19:95","nodeType":"EventDefinition","parameters":{"id":26942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26937,"indexed":false,"mutability":"mutable","name":"_diamondCut","nameLocation":"3016:11:95","nodeType":"VariableDeclaration","scope":26943,"src":"3005:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut[]"},"typeName":{"baseType":{"id":26935,"nodeType":"UserDefinedTypeName","pathNode":{"id":26934,"name":"FacetCut","nameLocations":["3005:8:95"],"nodeType":"IdentifierPath","referencedDeclaration":26861,"src":"3005:8:95"},"referencedDeclaration":26861,"src":"3005:8:95","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_storage_ptr","typeString":"struct IDiamondCut.FacetCut"}},"id":26936,"nodeType":"ArrayTypeName","src":"3005:10:95","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_storage_$dyn_storage_ptr","typeString":"struct IDiamondCut.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":26939,"indexed":false,"mutability":"mutable","name":"_init","nameLocation":"3037:5:95","nodeType":"VariableDeclaration","scope":26943,"src":"3029:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26938,"name":"address","nodeType":"ElementaryTypeName","src":"3029:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26941,"indexed":false,"mutability":"mutable","name":"_calldata","nameLocation":"3050:9:95","nodeType":"VariableDeclaration","scope":26943,"src":"3044:15:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":26940,"name":"bytes","nodeType":"ElementaryTypeName","src":"3044:5:95","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3004:56:95"},"src":"2979:82:95"}],"scope":26945,"src":"362:2701:95","usedErrors":[]}],"src":"32:3032:95"},"id":95},"contracts/core/connext/interfaces/IDiamondLoupe.sol":{"ast":{"absolutePath":"contracts/core/connext/interfaces/IDiamondLoupe.sol","exportedSymbols":{"IDiamondLoupe":[26985]},"id":26986,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":26946,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"32:23:96"},{"abstract":false,"baseContracts":[],"canonicalName":"IDiamondLoupe","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":26985,"linearizedBaseContracts":[26985],"name":"IDiamondLoupe","nameLocation":"473:13:96","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IDiamondLoupe.Facet","id":26952,"members":[{"constant":false,"id":26948,"mutability":"mutable","name":"facetAddress","nameLocation":"594:12:96","nodeType":"VariableDeclaration","scope":26952,"src":"586:20:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26947,"name":"address","nodeType":"ElementaryTypeName","src":"586:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26951,"mutability":"mutable","name":"functionSelectors","nameLocation":"621:17:96","nodeType":"VariableDeclaration","scope":26952,"src":"612:26:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"},"typeName":{"baseType":{"id":26949,"name":"bytes4","nodeType":"ElementaryTypeName","src":"612:6:96","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":26950,"nodeType":"ArrayTypeName","src":"612:8:96","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"}},"visibility":"internal"}],"name":"Facet","nameLocation":"574:5:96","nodeType":"StructDefinition","scope":26985,"src":"567:76:96","visibility":"public"},{"documentation":{"id":26953,"nodeType":"StructuredDocumentation","src":"647:104:96","text":"@notice Gets all facet addresses and their four byte function selectors.\n @return facets_ Facet"},"functionSelector":"7a0ed627","id":26960,"implemented":false,"kind":"function","modifiers":[],"name":"facets","nameLocation":"763:6:96","nodeType":"FunctionDefinition","parameters":{"id":26954,"nodeType":"ParameterList","parameters":[],"src":"769:2:96"},"returnParameters":{"id":26959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26958,"mutability":"mutable","name":"facets_","nameLocation":"810:7:96","nodeType":"VariableDeclaration","scope":26960,"src":"795:22:96","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Facet_$26952_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondLoupe.Facet[]"},"typeName":{"baseType":{"id":26956,"nodeType":"UserDefinedTypeName","pathNode":{"id":26955,"name":"Facet","nameLocations":["795:5:96"],"nodeType":"IdentifierPath","referencedDeclaration":26952,"src":"795:5:96"},"referencedDeclaration":26952,"src":"795:5:96","typeDescriptions":{"typeIdentifier":"t_struct$_Facet_$26952_storage_ptr","typeString":"struct IDiamondLoupe.Facet"}},"id":26957,"nodeType":"ArrayTypeName","src":"795:7:96","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Facet_$26952_storage_$dyn_storage_ptr","typeString":"struct IDiamondLoupe.Facet[]"}},"visibility":"internal"}],"src":"794:24:96"},"scope":26985,"src":"754:65:96","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":26961,"nodeType":"StructuredDocumentation","src":"823:151:96","text":"@notice Gets all the function selectors supported by a specific facet.\n @param _facet The facet address.\n @return facetFunctionSelectors_"},"functionSelector":"adfca15e","id":26969,"implemented":false,"kind":"function","modifiers":[],"name":"facetFunctionSelectors","nameLocation":"986:22:96","nodeType":"FunctionDefinition","parameters":{"id":26964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26963,"mutability":"mutable","name":"_facet","nameLocation":"1017:6:96","nodeType":"VariableDeclaration","scope":26969,"src":"1009:14:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26962,"name":"address","nodeType":"ElementaryTypeName","src":"1009:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1008:16:96"},"returnParameters":{"id":26968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26967,"mutability":"mutable","name":"facetFunctionSelectors_","nameLocation":"1064:23:96","nodeType":"VariableDeclaration","scope":26969,"src":"1048:39:96","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[]"},"typeName":{"baseType":{"id":26965,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1048:6:96","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":26966,"nodeType":"ArrayTypeName","src":"1048:8:96","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"}},"visibility":"internal"}],"src":"1047:41:96"},"scope":26985,"src":"977:112:96","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":26970,"nodeType":"StructuredDocumentation","src":"1093:88:96","text":"@notice Get all the facet addresses used by a diamond.\n @return facetAddresses_"},"functionSelector":"52ef6b2c","id":26976,"implemented":false,"kind":"function","modifiers":[],"name":"facetAddresses","nameLocation":"1193:14:96","nodeType":"FunctionDefinition","parameters":{"id":26971,"nodeType":"ParameterList","parameters":[],"src":"1207:2:96"},"returnParameters":{"id":26975,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26974,"mutability":"mutable","name":"facetAddresses_","nameLocation":"1250:15:96","nodeType":"VariableDeclaration","scope":26976,"src":"1233:32:96","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":26972,"name":"address","nodeType":"ElementaryTypeName","src":"1233:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":26973,"nodeType":"ArrayTypeName","src":"1233:9:96","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1232:34:96"},"scope":26985,"src":"1184:83:96","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":26977,"nodeType":"StructuredDocumentation","src":"1271:213:96","text":"@notice Gets the facet that supports the given selector.\n @dev If facet is not found return address(0).\n @param _functionSelector The function selector.\n @return facetAddress_ The facet address."},"functionSelector":"cdffacc6","id":26984,"implemented":false,"kind":"function","modifiers":[],"name":"facetAddress","nameLocation":"1496:12:96","nodeType":"FunctionDefinition","parameters":{"id":26980,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26979,"mutability":"mutable","name":"_functionSelector","nameLocation":"1516:17:96","nodeType":"VariableDeclaration","scope":26984,"src":"1509:24:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":26978,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1509:6:96","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1508:26:96"},"returnParameters":{"id":26983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26982,"mutability":"mutable","name":"facetAddress_","nameLocation":"1566:13:96","nodeType":"VariableDeclaration","scope":26984,"src":"1558:21:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26981,"name":"address","nodeType":"ElementaryTypeName","src":"1558:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1557:23:96"},"scope":26985,"src":"1487:94:96","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":26986,"src":"463:1120:96","usedErrors":[]}],"src":"32:1552:96"},"id":96},"contracts/core/connext/interfaces/IERC165.sol":{"ast":{"absolutePath":"contracts/core/connext/interfaces/IERC165.sol","exportedSymbols":{"IERC165":[26996]},"id":26997,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":26987,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"32:23:97"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC165","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":26996,"linearizedBaseContracts":[26996],"name":"IERC165","nameLocation":"67:7:97","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":26988,"nodeType":"StructuredDocumentation","src":"79:363:97","text":"@notice Query if a contract implements an interface\n @param interfaceId The interface identifier, as specified in ERC-165\n @dev Interface identification is specified in ERC-165. This function\n  uses less than 30,000 gas.\n @return `true` if the contract implements `interfaceID` and\n  `interfaceID` is not 0xffffffff, `false` otherwise"},"functionSelector":"01ffc9a7","id":26995,"implemented":false,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"454:17:97","nodeType":"FunctionDefinition","parameters":{"id":26991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26990,"mutability":"mutable","name":"interfaceId","nameLocation":"479:11:97","nodeType":"VariableDeclaration","scope":26995,"src":"472:18:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":26989,"name":"bytes4","nodeType":"ElementaryTypeName","src":"472:6:97","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"471:20:97"},"returnParameters":{"id":26994,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26993,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26995,"src":"515:4:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":26992,"name":"bool","nodeType":"ElementaryTypeName","src":"515:4:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"514:6:97"},"scope":26996,"src":"445:76:97","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":26997,"src":"57:466:97","usedErrors":[]}],"src":"32:492:97"},"id":97},"contracts/core/connext/interfaces/IPriceOracle.sol":{"ast":{"absolutePath":"contracts/core/connext/interfaces/IPriceOracle.sol","exportedSymbols":{"IPriceOracle":[27015]},"id":27016,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":26998,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:98"},{"abstract":false,"baseContracts":[],"canonicalName":"IPriceOracle","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":27015,"linearizedBaseContracts":[27015],"name":"IPriceOracle","nameLocation":"74:12:98","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":26999,"nodeType":"StructuredDocumentation","src":"91:194:98","text":" @notice Get the price of a token\n @param token The token to get the price of\n @return The asset price mantissa (scaled by 1e18).\n  Zero means the price is unavailable."},"functionSelector":"d02641a0","id":27006,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenPrice","nameLocation":"297:13:98","nodeType":"FunctionDefinition","parameters":{"id":27002,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27001,"mutability":"mutable","name":"token","nameLocation":"319:5:98","nodeType":"VariableDeclaration","scope":27006,"src":"311:13:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27000,"name":"address","nodeType":"ElementaryTypeName","src":"311:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"310:15:98"},"returnParameters":{"id":27005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27004,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27006,"src":"349:7:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27003,"name":"uint256","nodeType":"ElementaryTypeName","src":"349:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"348:9:98"},"scope":27015,"src":"288:70:98","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":27007,"nodeType":"StructuredDocumentation","src":"362:209:98","text":" @notice Get the price of a token from ChainLink\n @param token The token to get the price of\n @return The asset price mantissa (scaled by 1e18).\n  Zero means the price is unavailable."},"functionSelector":"856d562d","id":27014,"implemented":false,"kind":"function","modifiers":[],"name":"getPriceFromChainlink","nameLocation":"583:21:98","nodeType":"FunctionDefinition","parameters":{"id":27010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27009,"mutability":"mutable","name":"token","nameLocation":"613:5:98","nodeType":"VariableDeclaration","scope":27014,"src":"605:13:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27008,"name":"address","nodeType":"ElementaryTypeName","src":"605:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"604:15:98"},"returnParameters":{"id":27013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27012,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27014,"src":"643:7:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27011,"name":"uint256","nodeType":"ElementaryTypeName","src":"643:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"642:9:98"},"scope":27015,"src":"574:78:98","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":27016,"src":"64:590:98","usedErrors":[]}],"src":"39:616:98"},"id":98},"contracts/core/connext/interfaces/IStableSwap.sol":{"ast":{"absolutePath":"contracts/core/connext/interfaces/IStableSwap.sol","exportedSymbols":{"IERC20":[10812],"IStableSwap":[27329]},"id":27330,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":27017,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:99"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":27019,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27330,"sourceUnit":10813,"src":"64:70:99","symbolAliases":[{"foreign":{"id":27018,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10812,"src":"72:6:99","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IStableSwap","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":27329,"linearizedBaseContracts":[27329],"name":"IStableSwap","nameLocation":"146:11:99","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"c6c1e0630dbe9130cc068028486c0d118ddcea348550819defd5cb8c257f8a38","id":27031,"name":"TokenSwap","nameLocation":"271:9:99","nodeType":"EventDefinition","parameters":{"id":27030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27021,"indexed":true,"mutability":"mutable","name":"buyer","nameLocation":"297:5:99","nodeType":"VariableDeclaration","scope":27031,"src":"281:21:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27020,"name":"address","nodeType":"ElementaryTypeName","src":"281:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27023,"indexed":false,"mutability":"mutable","name":"tokensSold","nameLocation":"312:10:99","nodeType":"VariableDeclaration","scope":27031,"src":"304:18:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27022,"name":"uint256","nodeType":"ElementaryTypeName","src":"304:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27025,"indexed":false,"mutability":"mutable","name":"tokensBought","nameLocation":"332:12:99","nodeType":"VariableDeclaration","scope":27031,"src":"324:20:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27024,"name":"uint256","nodeType":"ElementaryTypeName","src":"324:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27027,"indexed":false,"mutability":"mutable","name":"soldId","nameLocation":"354:6:99","nodeType":"VariableDeclaration","scope":27031,"src":"346:14:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":27026,"name":"uint128","nodeType":"ElementaryTypeName","src":"346:7:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":27029,"indexed":false,"mutability":"mutable","name":"boughtId","nameLocation":"370:8:99","nodeType":"VariableDeclaration","scope":27031,"src":"362:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":27028,"name":"uint128","nodeType":"ElementaryTypeName","src":"362:7:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"280:99:99"},"src":"265:115:99"},{"anonymous":false,"eventSelector":"189c623b666b1b45b83d7178f39b8c087cb09774317ca2f53c2d3c3726f222a2","id":27045,"name":"AddLiquidity","nameLocation":"389:12:99","nodeType":"EventDefinition","parameters":{"id":27044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27033,"indexed":true,"mutability":"mutable","name":"provider","nameLocation":"423:8:99","nodeType":"VariableDeclaration","scope":27045,"src":"407:24:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27032,"name":"address","nodeType":"ElementaryTypeName","src":"407:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27036,"indexed":false,"mutability":"mutable","name":"tokenAmounts","nameLocation":"447:12:99","nodeType":"VariableDeclaration","scope":27045,"src":"437:22:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":27034,"name":"uint256","nodeType":"ElementaryTypeName","src":"437:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27035,"nodeType":"ArrayTypeName","src":"437:9:99","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":27039,"indexed":false,"mutability":"mutable","name":"fees","nameLocation":"475:4:99","nodeType":"VariableDeclaration","scope":27045,"src":"465:14:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":27037,"name":"uint256","nodeType":"ElementaryTypeName","src":"465:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27038,"nodeType":"ArrayTypeName","src":"465:9:99","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":27041,"indexed":false,"mutability":"mutable","name":"invariant","nameLocation":"493:9:99","nodeType":"VariableDeclaration","scope":27045,"src":"485:17:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27040,"name":"uint256","nodeType":"ElementaryTypeName","src":"485:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27043,"indexed":false,"mutability":"mutable","name":"lpTokenSupply","nameLocation":"516:13:99","nodeType":"VariableDeclaration","scope":27045,"src":"508:21:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27042,"name":"uint256","nodeType":"ElementaryTypeName","src":"508:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"401:132:99"},"src":"383:151:99"},{"anonymous":false,"eventSelector":"88d38ed598fdd809c2bf01ee49cd24b7fdabf379a83d29567952b60324d58cef","id":27054,"name":"RemoveLiquidity","nameLocation":"543:15:99","nodeType":"EventDefinition","parameters":{"id":27053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27047,"indexed":true,"mutability":"mutable","name":"provider","nameLocation":"575:8:99","nodeType":"VariableDeclaration","scope":27054,"src":"559:24:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27046,"name":"address","nodeType":"ElementaryTypeName","src":"559:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27050,"indexed":false,"mutability":"mutable","name":"tokenAmounts","nameLocation":"595:12:99","nodeType":"VariableDeclaration","scope":27054,"src":"585:22:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":27048,"name":"uint256","nodeType":"ElementaryTypeName","src":"585:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27049,"nodeType":"ArrayTypeName","src":"585:9:99","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":27052,"indexed":false,"mutability":"mutable","name":"lpTokenSupply","nameLocation":"617:13:99","nodeType":"VariableDeclaration","scope":27054,"src":"609:21:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27051,"name":"uint256","nodeType":"ElementaryTypeName","src":"609:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"558:73:99"},"src":"537:95:99"},{"anonymous":false,"eventSelector":"43fb02998f4e03da2e0e6fff53fdbf0c40a9f45f145dc377fc30615d7d7a8a64","id":27066,"name":"RemoveLiquidityOne","nameLocation":"641:18:99","nodeType":"EventDefinition","parameters":{"id":27065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27056,"indexed":true,"mutability":"mutable","name":"provider","nameLocation":"681:8:99","nodeType":"VariableDeclaration","scope":27066,"src":"665:24:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27055,"name":"address","nodeType":"ElementaryTypeName","src":"665:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27058,"indexed":false,"mutability":"mutable","name":"lpTokenAmount","nameLocation":"703:13:99","nodeType":"VariableDeclaration","scope":27066,"src":"695:21:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27057,"name":"uint256","nodeType":"ElementaryTypeName","src":"695:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27060,"indexed":false,"mutability":"mutable","name":"lpTokenSupply","nameLocation":"730:13:99","nodeType":"VariableDeclaration","scope":27066,"src":"722:21:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27059,"name":"uint256","nodeType":"ElementaryTypeName","src":"722:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27062,"indexed":false,"mutability":"mutable","name":"boughtId","nameLocation":"757:8:99","nodeType":"VariableDeclaration","scope":27066,"src":"749:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27061,"name":"uint256","nodeType":"ElementaryTypeName","src":"749:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27064,"indexed":false,"mutability":"mutable","name":"tokensBought","nameLocation":"779:12:99","nodeType":"VariableDeclaration","scope":27066,"src":"771:20:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27063,"name":"uint256","nodeType":"ElementaryTypeName","src":"771:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"659:136:99"},"src":"635:161:99"},{"anonymous":false,"eventSelector":"3631c28b1f9dd213e0319fb167b554d76b6c283a41143eb400a0d1adb1af1755","id":27080,"name":"RemoveLiquidityImbalance","nameLocation":"805:24:99","nodeType":"EventDefinition","parameters":{"id":27079,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27068,"indexed":true,"mutability":"mutable","name":"provider","nameLocation":"851:8:99","nodeType":"VariableDeclaration","scope":27080,"src":"835:24:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27067,"name":"address","nodeType":"ElementaryTypeName","src":"835:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27071,"indexed":false,"mutability":"mutable","name":"tokenAmounts","nameLocation":"875:12:99","nodeType":"VariableDeclaration","scope":27080,"src":"865:22:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":27069,"name":"uint256","nodeType":"ElementaryTypeName","src":"865:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27070,"nodeType":"ArrayTypeName","src":"865:9:99","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":27074,"indexed":false,"mutability":"mutable","name":"fees","nameLocation":"903:4:99","nodeType":"VariableDeclaration","scope":27080,"src":"893:14:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":27072,"name":"uint256","nodeType":"ElementaryTypeName","src":"893:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27073,"nodeType":"ArrayTypeName","src":"893:9:99","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":27076,"indexed":false,"mutability":"mutable","name":"invariant","nameLocation":"921:9:99","nodeType":"VariableDeclaration","scope":27080,"src":"913:17:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27075,"name":"uint256","nodeType":"ElementaryTypeName","src":"913:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27078,"indexed":false,"mutability":"mutable","name":"lpTokenSupply","nameLocation":"944:13:99","nodeType":"VariableDeclaration","scope":27080,"src":"936:21:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27077,"name":"uint256","nodeType":"ElementaryTypeName","src":"936:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"829:132:99"},"src":"799:163:99"},{"anonymous":false,"eventSelector":"ab599d640ca80cde2b09b128a4154a8dfe608cb80f4c9399c8b954b01fd35f38","id":27084,"name":"NewAdminFee","nameLocation":"971:11:99","nodeType":"EventDefinition","parameters":{"id":27083,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27082,"indexed":false,"mutability":"mutable","name":"newAdminFee","nameLocation":"991:11:99","nodeType":"VariableDeclaration","scope":27084,"src":"983:19:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27081,"name":"uint256","nodeType":"ElementaryTypeName","src":"983:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"982:21:99"},"src":"965:39:99"},{"anonymous":false,"eventSelector":"d88ea5155021c6f8dafa1a741e173f595cdf77ce7c17d43342131d7f06afdfe5","id":27088,"name":"NewSwapFee","nameLocation":"1013:10:99","nodeType":"EventDefinition","parameters":{"id":27087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27086,"indexed":false,"mutability":"mutable","name":"newSwapFee","nameLocation":"1032:10:99","nodeType":"VariableDeclaration","scope":27088,"src":"1024:18:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27085,"name":"uint256","nodeType":"ElementaryTypeName","src":"1024:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1023:20:99"},"src":"1007:37:99"},{"anonymous":false,"eventSelector":"d5fe46099fa396290a7f57e36c3c3c8774e2562c18ed5d1dcc0fa75071e03f1d","id":27092,"name":"NewWithdrawFee","nameLocation":"1053:14:99","nodeType":"EventDefinition","parameters":{"id":27091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27090,"indexed":false,"mutability":"mutable","name":"newWithdrawFee","nameLocation":"1076:14:99","nodeType":"VariableDeclaration","scope":27092,"src":"1068:22:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27089,"name":"uint256","nodeType":"ElementaryTypeName","src":"1068:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1067:24:99"},"src":"1047:45:99"},{"anonymous":false,"eventSelector":"a2b71ec6df949300b59aab36b55e189697b750119dd349fcfa8c0f779e83c254","id":27102,"name":"RampA","nameLocation":"1101:5:99","nodeType":"EventDefinition","parameters":{"id":27101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27094,"indexed":false,"mutability":"mutable","name":"oldA","nameLocation":"1115:4:99","nodeType":"VariableDeclaration","scope":27102,"src":"1107:12:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27093,"name":"uint256","nodeType":"ElementaryTypeName","src":"1107:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27096,"indexed":false,"mutability":"mutable","name":"newA","nameLocation":"1129:4:99","nodeType":"VariableDeclaration","scope":27102,"src":"1121:12:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27095,"name":"uint256","nodeType":"ElementaryTypeName","src":"1121:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27098,"indexed":false,"mutability":"mutable","name":"initialTime","nameLocation":"1143:11:99","nodeType":"VariableDeclaration","scope":27102,"src":"1135:19:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27097,"name":"uint256","nodeType":"ElementaryTypeName","src":"1135:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27100,"indexed":false,"mutability":"mutable","name":"futureTime","nameLocation":"1164:10:99","nodeType":"VariableDeclaration","scope":27102,"src":"1156:18:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27099,"name":"uint256","nodeType":"ElementaryTypeName","src":"1156:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1106:69:99"},"src":"1095:81:99"},{"anonymous":false,"eventSelector":"46e22fb3709ad289f62ce63d469248536dbc78d82b84a3d7e74ad606dc201938","id":27108,"name":"StopRampA","nameLocation":"1185:9:99","nodeType":"EventDefinition","parameters":{"id":27107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27104,"indexed":false,"mutability":"mutable","name":"currentA","nameLocation":"1203:8:99","nodeType":"VariableDeclaration","scope":27108,"src":"1195:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27103,"name":"uint256","nodeType":"ElementaryTypeName","src":"1195:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27106,"indexed":false,"mutability":"mutable","name":"time","nameLocation":"1221:4:99","nodeType":"VariableDeclaration","scope":27108,"src":"1213:12:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27105,"name":"uint256","nodeType":"ElementaryTypeName","src":"1213:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1194:32:99"},"src":"1179:48:99"},{"functionSelector":"91695586","id":27123,"implemented":false,"kind":"function","modifiers":[],"name":"swap","nameLocation":"1240:4:99","nodeType":"FunctionDefinition","parameters":{"id":27119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27110,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"1256:14:99","nodeType":"VariableDeclaration","scope":27123,"src":"1250:20:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27109,"name":"uint8","nodeType":"ElementaryTypeName","src":"1250:5:99","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":27112,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"1282:12:99","nodeType":"VariableDeclaration","scope":27123,"src":"1276:18:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27111,"name":"uint8","nodeType":"ElementaryTypeName","src":"1276:5:99","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":27114,"mutability":"mutable","name":"dx","nameLocation":"1308:2:99","nodeType":"VariableDeclaration","scope":27123,"src":"1300:10:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27113,"name":"uint256","nodeType":"ElementaryTypeName","src":"1300:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27116,"mutability":"mutable","name":"minDy","nameLocation":"1324:5:99","nodeType":"VariableDeclaration","scope":27123,"src":"1316:13:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27115,"name":"uint256","nodeType":"ElementaryTypeName","src":"1316:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27118,"mutability":"mutable","name":"deadline","nameLocation":"1343:8:99","nodeType":"VariableDeclaration","scope":27123,"src":"1335:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27117,"name":"uint256","nodeType":"ElementaryTypeName","src":"1335:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1244:111:99"},"returnParameters":{"id":27122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27121,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27123,"src":"1374:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27120,"name":"uint256","nodeType":"ElementaryTypeName","src":"1374:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1373:9:99"},"scope":27329,"src":"1231:152:99","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"d460f0a2","id":27138,"implemented":false,"kind":"function","modifiers":[],"name":"swapExact","nameLocation":"1396:9:99","nodeType":"FunctionDefinition","parameters":{"id":27134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27125,"mutability":"mutable","name":"amountIn","nameLocation":"1419:8:99","nodeType":"VariableDeclaration","scope":27138,"src":"1411:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27124,"name":"uint256","nodeType":"ElementaryTypeName","src":"1411:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27127,"mutability":"mutable","name":"assetIn","nameLocation":"1441:7:99","nodeType":"VariableDeclaration","scope":27138,"src":"1433:15:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27126,"name":"address","nodeType":"ElementaryTypeName","src":"1433:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27129,"mutability":"mutable","name":"assetOut","nameLocation":"1462:8:99","nodeType":"VariableDeclaration","scope":27138,"src":"1454:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27128,"name":"address","nodeType":"ElementaryTypeName","src":"1454:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27131,"mutability":"mutable","name":"minAmountOut","nameLocation":"1484:12:99","nodeType":"VariableDeclaration","scope":27138,"src":"1476:20:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27130,"name":"uint256","nodeType":"ElementaryTypeName","src":"1476:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27133,"mutability":"mutable","name":"deadline","nameLocation":"1510:8:99","nodeType":"VariableDeclaration","scope":27138,"src":"1502:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27132,"name":"uint256","nodeType":"ElementaryTypeName","src":"1502:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1405:117:99"},"returnParameters":{"id":27137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27136,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27138,"src":"1549:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27135,"name":"uint256","nodeType":"ElementaryTypeName","src":"1549:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1548:9:99"},"scope":27329,"src":"1387:171:99","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"5428c117","id":27153,"implemented":false,"kind":"function","modifiers":[],"name":"swapExactOut","nameLocation":"1571:12:99","nodeType":"FunctionDefinition","parameters":{"id":27149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27140,"mutability":"mutable","name":"amountOut","nameLocation":"1597:9:99","nodeType":"VariableDeclaration","scope":27153,"src":"1589:17:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27139,"name":"uint256","nodeType":"ElementaryTypeName","src":"1589:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27142,"mutability":"mutable","name":"assetIn","nameLocation":"1620:7:99","nodeType":"VariableDeclaration","scope":27153,"src":"1612:15:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27141,"name":"address","nodeType":"ElementaryTypeName","src":"1612:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27144,"mutability":"mutable","name":"assetOut","nameLocation":"1641:8:99","nodeType":"VariableDeclaration","scope":27153,"src":"1633:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27143,"name":"address","nodeType":"ElementaryTypeName","src":"1633:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27146,"mutability":"mutable","name":"maxAmountIn","nameLocation":"1663:11:99","nodeType":"VariableDeclaration","scope":27153,"src":"1655:19:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27145,"name":"uint256","nodeType":"ElementaryTypeName","src":"1655:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27148,"mutability":"mutable","name":"deadline","nameLocation":"1688:8:99","nodeType":"VariableDeclaration","scope":27153,"src":"1680:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27147,"name":"uint256","nodeType":"ElementaryTypeName","src":"1680:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1583:117:99"},"returnParameters":{"id":27152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27151,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27153,"src":"1727:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27150,"name":"uint256","nodeType":"ElementaryTypeName","src":"1727:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1726:9:99"},"scope":27329,"src":"1562:174:99","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"d46300fd","id":27158,"implemented":false,"kind":"function","modifiers":[],"name":"getA","nameLocation":"1749:4:99","nodeType":"FunctionDefinition","parameters":{"id":27154,"nodeType":"ParameterList","parameters":[],"src":"1753:2:99"},"returnParameters":{"id":27157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27156,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27158,"src":"1779:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27155,"name":"uint256","nodeType":"ElementaryTypeName","src":"1779:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1778:9:99"},"scope":27329,"src":"1740:48:99","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"82b86600","id":27166,"implemented":false,"kind":"function","modifiers":[],"name":"getToken","nameLocation":"1801:8:99","nodeType":"FunctionDefinition","parameters":{"id":27161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27160,"mutability":"mutable","name":"index","nameLocation":"1816:5:99","nodeType":"VariableDeclaration","scope":27166,"src":"1810:11:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27159,"name":"uint8","nodeType":"ElementaryTypeName","src":"1810:5:99","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1809:13:99"},"returnParameters":{"id":27165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27164,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27166,"src":"1846:6:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":27163,"nodeType":"UserDefinedTypeName","pathNode":{"id":27162,"name":"IERC20","nameLocations":["1846:6:99"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"1846:6:99"},"referencedDeclaration":10812,"src":"1846:6:99","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1845:8:99"},"scope":27329,"src":"1792:62:99","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"66c0bd24","id":27173,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenIndex","nameLocation":"1867:13:99","nodeType":"FunctionDefinition","parameters":{"id":27169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27168,"mutability":"mutable","name":"tokenAddress","nameLocation":"1889:12:99","nodeType":"VariableDeclaration","scope":27173,"src":"1881:20:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27167,"name":"address","nodeType":"ElementaryTypeName","src":"1881:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1880:22:99"},"returnParameters":{"id":27172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27171,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27173,"src":"1926:5:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27170,"name":"uint8","nodeType":"ElementaryTypeName","src":"1926:5:99","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1925:7:99"},"scope":27329,"src":"1858:75:99","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"91ceb3eb","id":27180,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenBalance","nameLocation":"1946:15:99","nodeType":"FunctionDefinition","parameters":{"id":27176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27175,"mutability":"mutable","name":"index","nameLocation":"1968:5:99","nodeType":"VariableDeclaration","scope":27180,"src":"1962:11:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27174,"name":"uint8","nodeType":"ElementaryTypeName","src":"1962:5:99","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1961:13:99"},"returnParameters":{"id":27179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27178,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27180,"src":"1998:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27177,"name":"uint256","nodeType":"ElementaryTypeName","src":"1998:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1997:9:99"},"scope":27329,"src":"1937:70:99","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"e25aa5fa","id":27185,"implemented":false,"kind":"function","modifiers":[],"name":"getVirtualPrice","nameLocation":"2020:15:99","nodeType":"FunctionDefinition","parameters":{"id":27181,"nodeType":"ParameterList","parameters":[],"src":"2035:2:99"},"returnParameters":{"id":27184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27183,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27185,"src":"2061:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27182,"name":"uint256","nodeType":"ElementaryTypeName","src":"2061:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2060:9:99"},"scope":27329,"src":"2011:59:99","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"a95b089f","id":27196,"implemented":false,"kind":"function","modifiers":[],"name":"calculateSwap","nameLocation":"2121:13:99","nodeType":"FunctionDefinition","parameters":{"id":27192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27187,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"2146:14:99","nodeType":"VariableDeclaration","scope":27196,"src":"2140:20:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27186,"name":"uint8","nodeType":"ElementaryTypeName","src":"2140:5:99","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":27189,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"2172:12:99","nodeType":"VariableDeclaration","scope":27196,"src":"2166:18:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27188,"name":"uint8","nodeType":"ElementaryTypeName","src":"2166:5:99","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":27191,"mutability":"mutable","name":"dx","nameLocation":"2198:2:99","nodeType":"VariableDeclaration","scope":27196,"src":"2190:10:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27190,"name":"uint256","nodeType":"ElementaryTypeName","src":"2190:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2134:70:99"},"returnParameters":{"id":27195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27194,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27196,"src":"2228:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27193,"name":"uint256","nodeType":"ElementaryTypeName","src":"2228:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2227:9:99"},"scope":27329,"src":"2112:125:99","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"6b1dc08b","id":27207,"implemented":false,"kind":"function","modifiers":[],"name":"calculateSwapOut","nameLocation":"2250:16:99","nodeType":"FunctionDefinition","parameters":{"id":27203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27198,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"2278:14:99","nodeType":"VariableDeclaration","scope":27207,"src":"2272:20:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27197,"name":"uint8","nodeType":"ElementaryTypeName","src":"2272:5:99","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":27200,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"2304:12:99","nodeType":"VariableDeclaration","scope":27207,"src":"2298:18:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27199,"name":"uint8","nodeType":"ElementaryTypeName","src":"2298:5:99","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":27202,"mutability":"mutable","name":"dy","nameLocation":"2330:2:99","nodeType":"VariableDeclaration","scope":27207,"src":"2322:10:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27201,"name":"uint256","nodeType":"ElementaryTypeName","src":"2322:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2266:70:99"},"returnParameters":{"id":27206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27205,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27207,"src":"2360:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27204,"name":"uint256","nodeType":"ElementaryTypeName","src":"2360:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2359:9:99"},"scope":27329,"src":"2241:128:99","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"7f41e7ef","id":27218,"implemented":false,"kind":"function","modifiers":[],"name":"calculateSwapFromAddress","nameLocation":"2382:24:99","nodeType":"FunctionDefinition","parameters":{"id":27214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27209,"mutability":"mutable","name":"assetIn","nameLocation":"2420:7:99","nodeType":"VariableDeclaration","scope":27218,"src":"2412:15:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27208,"name":"address","nodeType":"ElementaryTypeName","src":"2412:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27211,"mutability":"mutable","name":"assetOut","nameLocation":"2441:8:99","nodeType":"VariableDeclaration","scope":27218,"src":"2433:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27210,"name":"address","nodeType":"ElementaryTypeName","src":"2433:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27213,"mutability":"mutable","name":"amountIn","nameLocation":"2463:8:99","nodeType":"VariableDeclaration","scope":27218,"src":"2455:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27212,"name":"uint256","nodeType":"ElementaryTypeName","src":"2455:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2406:69:99"},"returnParameters":{"id":27217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27216,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27218,"src":"2499:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27215,"name":"uint256","nodeType":"ElementaryTypeName","src":"2499:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2498:9:99"},"scope":27329,"src":"2373:135:99","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"f9a15fb9","id":27229,"implemented":false,"kind":"function","modifiers":[],"name":"calculateSwapOutFromAddress","nameLocation":"2521:27:99","nodeType":"FunctionDefinition","parameters":{"id":27225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27220,"mutability":"mutable","name":"assetIn","nameLocation":"2562:7:99","nodeType":"VariableDeclaration","scope":27229,"src":"2554:15:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27219,"name":"address","nodeType":"ElementaryTypeName","src":"2554:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27222,"mutability":"mutable","name":"assetOut","nameLocation":"2583:8:99","nodeType":"VariableDeclaration","scope":27229,"src":"2575:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27221,"name":"address","nodeType":"ElementaryTypeName","src":"2575:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27224,"mutability":"mutable","name":"amountOut","nameLocation":"2605:9:99","nodeType":"VariableDeclaration","scope":27229,"src":"2597:17:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27223,"name":"uint256","nodeType":"ElementaryTypeName","src":"2597:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2548:70:99"},"returnParameters":{"id":27228,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27227,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27229,"src":"2642:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27226,"name":"uint256","nodeType":"ElementaryTypeName","src":"2642:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2641:9:99"},"scope":27329,"src":"2512:139:99","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"e6ab2806","id":27239,"implemented":false,"kind":"function","modifiers":[],"name":"calculateTokenAmount","nameLocation":"2664:20:99","nodeType":"FunctionDefinition","parameters":{"id":27235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27232,"mutability":"mutable","name":"amounts","nameLocation":"2704:7:99","nodeType":"VariableDeclaration","scope":27239,"src":"2685:26:99","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":27230,"name":"uint256","nodeType":"ElementaryTypeName","src":"2685:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27231,"nodeType":"ArrayTypeName","src":"2685:9:99","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":27234,"mutability":"mutable","name":"deposit","nameLocation":"2718:7:99","nodeType":"VariableDeclaration","scope":27239,"src":"2713:12:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27233,"name":"bool","nodeType":"ElementaryTypeName","src":"2713:4:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2684:42:99"},"returnParameters":{"id":27238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27237,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27239,"src":"2750:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27236,"name":"uint256","nodeType":"ElementaryTypeName","src":"2750:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2749:9:99"},"scope":27329,"src":"2655:104:99","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"f2fad2b6","id":27247,"implemented":false,"kind":"function","modifiers":[],"name":"calculateRemoveLiquidity","nameLocation":"2772:24:99","nodeType":"FunctionDefinition","parameters":{"id":27242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27241,"mutability":"mutable","name":"amount","nameLocation":"2805:6:99","nodeType":"VariableDeclaration","scope":27247,"src":"2797:14:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27240,"name":"uint256","nodeType":"ElementaryTypeName","src":"2797:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2796:16:99"},"returnParameters":{"id":27246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27245,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27247,"src":"2836:16:99","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":27243,"name":"uint256","nodeType":"ElementaryTypeName","src":"2836:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27244,"nodeType":"ArrayTypeName","src":"2836:9:99","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2835:18:99"},"scope":27329,"src":"2763:91:99","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"342a87a1","id":27256,"implemented":false,"kind":"function","modifiers":[],"name":"calculateRemoveLiquidityOneToken","nameLocation":"2867:32:99","nodeType":"FunctionDefinition","parameters":{"id":27252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27249,"mutability":"mutable","name":"tokenAmount","nameLocation":"2908:11:99","nodeType":"VariableDeclaration","scope":27256,"src":"2900:19:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27248,"name":"uint256","nodeType":"ElementaryTypeName","src":"2900:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27251,"mutability":"mutable","name":"tokenIndex","nameLocation":"2927:10:99","nodeType":"VariableDeclaration","scope":27256,"src":"2921:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27250,"name":"uint8","nodeType":"ElementaryTypeName","src":"2921:5:99","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"2899:39:99"},"returnParameters":{"id":27255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27254,"mutability":"mutable","name":"availableTokenAmount","nameLocation":"2982:20:99","nodeType":"VariableDeclaration","scope":27256,"src":"2974:28:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27253,"name":"uint256","nodeType":"ElementaryTypeName","src":"2974:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2973:30:99"},"scope":27329,"src":"2858:146:99","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b28cb6dc","id":27278,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"3048:10:99","nodeType":"FunctionDefinition","parameters":{"id":27276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27260,"mutability":"mutable","name":"pooledTokens","nameLocation":"3080:12:99","nodeType":"VariableDeclaration","scope":27278,"src":"3064:28:99","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":27258,"nodeType":"UserDefinedTypeName","pathNode":{"id":27257,"name":"IERC20","nameLocations":["3064:6:99"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"3064:6:99"},"referencedDeclaration":10812,"src":"3064:6:99","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":27259,"nodeType":"ArrayTypeName","src":"3064:8:99","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":27263,"mutability":"mutable","name":"decimals","nameLocation":"3113:8:99","nodeType":"VariableDeclaration","scope":27278,"src":"3098:23:99","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[]"},"typeName":{"baseType":{"id":27261,"name":"uint8","nodeType":"ElementaryTypeName","src":"3098:5:99","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":27262,"nodeType":"ArrayTypeName","src":"3098:7:99","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_storage_ptr","typeString":"uint8[]"}},"visibility":"internal"},{"constant":false,"id":27265,"mutability":"mutable","name":"lpTokenName","nameLocation":"3141:11:99","nodeType":"VariableDeclaration","scope":27278,"src":"3127:25:99","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":27264,"name":"string","nodeType":"ElementaryTypeName","src":"3127:6:99","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":27267,"mutability":"mutable","name":"lpTokenSymbol","nameLocation":"3172:13:99","nodeType":"VariableDeclaration","scope":27278,"src":"3158:27:99","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":27266,"name":"string","nodeType":"ElementaryTypeName","src":"3158:6:99","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":27269,"mutability":"mutable","name":"a","nameLocation":"3199:1:99","nodeType":"VariableDeclaration","scope":27278,"src":"3191:9:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27268,"name":"uint256","nodeType":"ElementaryTypeName","src":"3191:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27271,"mutability":"mutable","name":"fee","nameLocation":"3214:3:99","nodeType":"VariableDeclaration","scope":27278,"src":"3206:11:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27270,"name":"uint256","nodeType":"ElementaryTypeName","src":"3206:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27273,"mutability":"mutable","name":"adminFee","nameLocation":"3231:8:99","nodeType":"VariableDeclaration","scope":27278,"src":"3223:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27272,"name":"uint256","nodeType":"ElementaryTypeName","src":"3223:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27275,"mutability":"mutable","name":"lpTokenTargetAddress","nameLocation":"3253:20:99","nodeType":"VariableDeclaration","scope":27278,"src":"3245:28:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27274,"name":"address","nodeType":"ElementaryTypeName","src":"3245:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3058:219:99"},"returnParameters":{"id":27277,"nodeType":"ParameterList","parameters":[],"src":"3286:0:99"},"scope":27329,"src":"3039:248:99","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"4d49e87d","id":27290,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidity","nameLocation":"3300:12:99","nodeType":"FunctionDefinition","parameters":{"id":27286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27281,"mutability":"mutable","name":"amounts","nameLocation":"3337:7:99","nodeType":"VariableDeclaration","scope":27290,"src":"3318:26:99","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":27279,"name":"uint256","nodeType":"ElementaryTypeName","src":"3318:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27280,"nodeType":"ArrayTypeName","src":"3318:9:99","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":27283,"mutability":"mutable","name":"minToMint","nameLocation":"3358:9:99","nodeType":"VariableDeclaration","scope":27290,"src":"3350:17:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27282,"name":"uint256","nodeType":"ElementaryTypeName","src":"3350:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27285,"mutability":"mutable","name":"deadline","nameLocation":"3381:8:99","nodeType":"VariableDeclaration","scope":27290,"src":"3373:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27284,"name":"uint256","nodeType":"ElementaryTypeName","src":"3373:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3312:81:99"},"returnParameters":{"id":27289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27288,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27290,"src":"3412:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27287,"name":"uint256","nodeType":"ElementaryTypeName","src":"3412:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3411:9:99"},"scope":27329,"src":"3291:130:99","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"31cd52b0","id":27303,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidity","nameLocation":"3434:15:99","nodeType":"FunctionDefinition","parameters":{"id":27298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27292,"mutability":"mutable","name":"amount","nameLocation":"3463:6:99","nodeType":"VariableDeclaration","scope":27303,"src":"3455:14:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27291,"name":"uint256","nodeType":"ElementaryTypeName","src":"3455:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27295,"mutability":"mutable","name":"minAmounts","nameLocation":"3494:10:99","nodeType":"VariableDeclaration","scope":27303,"src":"3475:29:99","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":27293,"name":"uint256","nodeType":"ElementaryTypeName","src":"3475:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27294,"nodeType":"ArrayTypeName","src":"3475:9:99","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":27297,"mutability":"mutable","name":"deadline","nameLocation":"3518:8:99","nodeType":"VariableDeclaration","scope":27303,"src":"3510:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27296,"name":"uint256","nodeType":"ElementaryTypeName","src":"3510:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3449:81:99"},"returnParameters":{"id":27302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27301,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27303,"src":"3549:16:99","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":27299,"name":"uint256","nodeType":"ElementaryTypeName","src":"3549:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27300,"nodeType":"ArrayTypeName","src":"3549:9:99","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3548:18:99"},"scope":27329,"src":"3425:142:99","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"3e3a1560","id":27316,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityOneToken","nameLocation":"3580:23:99","nodeType":"FunctionDefinition","parameters":{"id":27312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27305,"mutability":"mutable","name":"tokenAmount","nameLocation":"3617:11:99","nodeType":"VariableDeclaration","scope":27316,"src":"3609:19:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27304,"name":"uint256","nodeType":"ElementaryTypeName","src":"3609:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27307,"mutability":"mutable","name":"tokenIndex","nameLocation":"3640:10:99","nodeType":"VariableDeclaration","scope":27316,"src":"3634:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27306,"name":"uint8","nodeType":"ElementaryTypeName","src":"3634:5:99","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":27309,"mutability":"mutable","name":"minAmount","nameLocation":"3664:9:99","nodeType":"VariableDeclaration","scope":27316,"src":"3656:17:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27308,"name":"uint256","nodeType":"ElementaryTypeName","src":"3656:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27311,"mutability":"mutable","name":"deadline","nameLocation":"3687:8:99","nodeType":"VariableDeclaration","scope":27316,"src":"3679:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27310,"name":"uint256","nodeType":"ElementaryTypeName","src":"3679:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3603:96:99"},"returnParameters":{"id":27315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27314,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27316,"src":"3718:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27313,"name":"uint256","nodeType":"ElementaryTypeName","src":"3718:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3717:9:99"},"scope":27329,"src":"3571:156:99","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"84cdd9bc","id":27328,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityImbalance","nameLocation":"3740:24:99","nodeType":"FunctionDefinition","parameters":{"id":27324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27319,"mutability":"mutable","name":"amounts","nameLocation":"3789:7:99","nodeType":"VariableDeclaration","scope":27328,"src":"3770:26:99","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":27317,"name":"uint256","nodeType":"ElementaryTypeName","src":"3770:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27318,"nodeType":"ArrayTypeName","src":"3770:9:99","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":27321,"mutability":"mutable","name":"maxBurnAmount","nameLocation":"3810:13:99","nodeType":"VariableDeclaration","scope":27328,"src":"3802:21:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27320,"name":"uint256","nodeType":"ElementaryTypeName","src":"3802:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27323,"mutability":"mutable","name":"deadline","nameLocation":"3837:8:99","nodeType":"VariableDeclaration","scope":27328,"src":"3829:16:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27322,"name":"uint256","nodeType":"ElementaryTypeName","src":"3829:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3764:85:99"},"returnParameters":{"id":27327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27326,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27328,"src":"3868:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27325,"name":"uint256","nodeType":"ElementaryTypeName","src":"3868:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3867:9:99"},"scope":27329,"src":"3731:146:99","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":27330,"src":"136:3743:99","usedErrors":[]}],"src":"39:3841:99"},"id":99},"contracts/core/connext/interfaces/IXReceiver.sol":{"ast":{"absolutePath":"contracts/core/connext/interfaces/IXReceiver.sol","exportedSymbols":{"IXReceiver":[27349]},"id":27350,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":27331,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:100"},{"abstract":false,"baseContracts":[],"canonicalName":"IXReceiver","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":27349,"linearizedBaseContracts":[27349],"name":"IXReceiver","nameLocation":"74:10:100","nodeType":"ContractDefinition","nodes":[{"functionSelector":"fd614f41","id":27348,"implemented":false,"kind":"function","modifiers":[],"name":"xReceive","nameLocation":"98:8:100","nodeType":"FunctionDefinition","parameters":{"id":27344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27333,"mutability":"mutable","name":"_transferId","nameLocation":"120:11:100","nodeType":"VariableDeclaration","scope":27348,"src":"112:19:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27332,"name":"bytes32","nodeType":"ElementaryTypeName","src":"112:7:100","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":27335,"mutability":"mutable","name":"_amount","nameLocation":"145:7:100","nodeType":"VariableDeclaration","scope":27348,"src":"137:15:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27334,"name":"uint256","nodeType":"ElementaryTypeName","src":"137:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27337,"mutability":"mutable","name":"_asset","nameLocation":"166:6:100","nodeType":"VariableDeclaration","scope":27348,"src":"158:14:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27336,"name":"address","nodeType":"ElementaryTypeName","src":"158:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27339,"mutability":"mutable","name":"_originSender","nameLocation":"186:13:100","nodeType":"VariableDeclaration","scope":27348,"src":"178:21:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27338,"name":"address","nodeType":"ElementaryTypeName","src":"178:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27341,"mutability":"mutable","name":"_origin","nameLocation":"212:7:100","nodeType":"VariableDeclaration","scope":27348,"src":"205:14:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":27340,"name":"uint32","nodeType":"ElementaryTypeName","src":"205:6:100","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":27343,"mutability":"mutable","name":"_callData","nameLocation":"238:9:100","nodeType":"VariableDeclaration","scope":27348,"src":"225:22:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":27342,"name":"bytes","nodeType":"ElementaryTypeName","src":"225:5:100","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"106:145:100"},"returnParameters":{"id":27347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27346,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27348,"src":"270:12:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":27345,"name":"bytes","nodeType":"ElementaryTypeName","src":"270:5:100","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"269:14:100"},"scope":27349,"src":"89:195:100","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":27350,"src":"64:222:100","usedErrors":[]}],"src":"39:248:100"},"id":100},"contracts/core/connext/libraries/AmplificationUtils.sol":{"ast":{"absolutePath":"contracts/core/connext/libraries/AmplificationUtils.sol","exportedSymbols":{"AmplificationUtils":[27626],"Constants":[29304],"SwapUtils":[34244]},"id":27627,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":27351,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:101"},{"absolutePath":"contracts/core/connext/libraries/SwapUtils.sol","file":"./SwapUtils.sol","id":27353,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27627,"sourceUnit":34245,"src":"64:42:101","symbolAliases":[{"foreign":{"id":27352,"name":"SwapUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34244,"src":"72:9:101","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/Constants.sol","file":"./Constants.sol","id":27355,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27627,"sourceUnit":29305,"src":"107:42:101","symbolAliases":[{"foreign":{"id":27354,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"115:9:101","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"AmplificationUtils","contractDependencies":[],"contractKind":"library","documentation":{"id":27356,"nodeType":"StructuredDocumentation","src":"151:194:101","text":" @title AmplificationUtils library\n @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\n This library assumes the struct is fully validated."},"fullyImplemented":true,"id":27626,"linearizedBaseContracts":[27626],"name":"AmplificationUtils","nameLocation":"354:18:101","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"a2b71ec6df949300b59aab36b55e189697b750119dd349fcfa8c0f779e83c254","id":27366,"name":"RampA","nameLocation":"383:5:101","nodeType":"EventDefinition","parameters":{"id":27365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27358,"indexed":false,"mutability":"mutable","name":"oldA","nameLocation":"397:4:101","nodeType":"VariableDeclaration","scope":27366,"src":"389:12:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27357,"name":"uint256","nodeType":"ElementaryTypeName","src":"389:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27360,"indexed":false,"mutability":"mutable","name":"newA","nameLocation":"411:4:101","nodeType":"VariableDeclaration","scope":27366,"src":"403:12:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27359,"name":"uint256","nodeType":"ElementaryTypeName","src":"403:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27362,"indexed":false,"mutability":"mutable","name":"initialTime","nameLocation":"425:11:101","nodeType":"VariableDeclaration","scope":27366,"src":"417:19:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27361,"name":"uint256","nodeType":"ElementaryTypeName","src":"417:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27364,"indexed":false,"mutability":"mutable","name":"futureTime","nameLocation":"446:10:101","nodeType":"VariableDeclaration","scope":27366,"src":"438:18:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27363,"name":"uint256","nodeType":"ElementaryTypeName","src":"438:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"388:69:101"},"src":"377:81:101"},{"anonymous":false,"eventSelector":"46e22fb3709ad289f62ce63d469248536dbc78d82b84a3d7e74ad606dc201938","id":27372,"name":"StopRampA","nameLocation":"467:9:101","nodeType":"EventDefinition","parameters":{"id":27371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27368,"indexed":false,"mutability":"mutable","name":"currentA","nameLocation":"485:8:101","nodeType":"VariableDeclaration","scope":27372,"src":"477:16:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27367,"name":"uint256","nodeType":"ElementaryTypeName","src":"477:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27370,"indexed":false,"mutability":"mutable","name":"time","nameLocation":"503:4:101","nodeType":"VariableDeclaration","scope":27372,"src":"495:12:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27369,"name":"uint256","nodeType":"ElementaryTypeName","src":"495:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"476:32:101"},"src":"461:48:101"},{"body":{"id":27388,"nodeType":"Block","src":"782:60:101","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":27382,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27376,"src":"808:4:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}],"id":27381,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27444,"src":"795:12:101","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (uint256)"}},"id":27383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"795:18:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":27384,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"816:9:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":27385,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"826:11:101","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"816:21:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"795:42:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":27380,"id":27387,"nodeType":"Return","src":"788:49:101"}]},"documentation":{"id":27373,"nodeType":"StructuredDocumentation","src":"513:191:101","text":" @notice Return A, the amplification coefficient * n ** (n - 1)\n @dev See the StableSwap paper for details\n @param self Swap struct to read from\n @return A parameter"},"id":27389,"implemented":true,"kind":"function","modifiers":[],"name":"getA","nameLocation":"716:4:101","nodeType":"FunctionDefinition","parameters":{"id":27377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27376,"mutability":"mutable","name":"self","nameLocation":"744:4:101","nodeType":"VariableDeclaration","scope":27389,"src":"721:27:101","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":27375,"nodeType":"UserDefinedTypeName","pathNode":{"id":27374,"name":"SwapUtils.Swap","nameLocations":["721:9:101","731:4:101"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"721:14:101"},"referencedDeclaration":30786,"src":"721:14:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"}],"src":"720:29:101"},"returnParameters":{"id":27380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27379,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27389,"src":"773:7:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27378,"name":"uint256","nodeType":"ElementaryTypeName","src":"773:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"772:9:101"},"scope":27626,"src":"707:135:101","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":27402,"nodeType":"Block","src":"1123:36:101","statements":[{"expression":{"arguments":[{"id":27399,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27393,"src":"1149:4:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}],"id":27398,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27444,"src":"1136:12:101","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (uint256)"}},"id":27400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1136:18:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":27397,"id":27401,"nodeType":"Return","src":"1129:25:101"}]},"documentation":{"id":27390,"nodeType":"StructuredDocumentation","src":"846:192:101","text":" @notice Return A in its raw precision\n @dev See the StableSwap paper for details\n @param self Swap struct to read from\n @return A parameter in its raw precision form"},"id":27403,"implemented":true,"kind":"function","modifiers":[],"name":"getAPrecise","nameLocation":"1050:11:101","nodeType":"FunctionDefinition","parameters":{"id":27394,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27393,"mutability":"mutable","name":"self","nameLocation":"1085:4:101","nodeType":"VariableDeclaration","scope":27403,"src":"1062:27:101","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":27392,"nodeType":"UserDefinedTypeName","pathNode":{"id":27391,"name":"SwapUtils.Swap","nameLocations":["1062:9:101","1072:4:101"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"1062:14:101"},"referencedDeclaration":30786,"src":"1062:14:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"}],"src":"1061:29:101"},"returnParameters":{"id":27397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27396,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27403,"src":"1114:7:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27395,"name":"uint256","nodeType":"ElementaryTypeName","src":"1114:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1113:9:101"},"scope":27626,"src":"1041:118:101","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":27443,"nodeType":"Block","src":"1459:469:101","statements":[{"assignments":[27413],"declarations":[{"constant":false,"id":27413,"mutability":"mutable","name":"t1","nameLocation":"1473:2:101","nodeType":"VariableDeclaration","scope":27443,"src":"1465:10:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27412,"name":"uint256","nodeType":"ElementaryTypeName","src":"1465:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27416,"initialValue":{"expression":{"id":27414,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27407,"src":"1478:4:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":27415,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1483:11:101","memberName":"futureATime","nodeType":"MemberAccess","referencedDeclaration":30761,"src":"1478:16:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1465:29:101"},{"expression":{"id":27420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":27417,"name":"currentA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27410,"src":"1530:8:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":27418,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27407,"src":"1541:4:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":27419,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1546:7:101","memberName":"futureA","nodeType":"MemberAccess","referencedDeclaration":30757,"src":"1541:12:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1530:23:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27421,"nodeType":"ExpressionStatement","src":"1530:23:101"},{"assignments":[27423],"declarations":[{"constant":false,"id":27423,"mutability":"mutable","name":"a0","nameLocation":"1606:2:101","nodeType":"VariableDeclaration","scope":27443,"src":"1598:10:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27422,"name":"uint256","nodeType":"ElementaryTypeName","src":"1598:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27426,"initialValue":{"expression":{"id":27424,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27407,"src":"1611:4:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":27425,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1616:8:101","memberName":"initialA","nodeType":"MemberAccess","referencedDeclaration":30755,"src":"1611:13:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1598:26:101"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":27434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27427,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27423,"src":"1675:2:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":27428,"name":"currentA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27410,"src":"1681:8:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1675:14:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":27430,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1693:5:101","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":27431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1699:9:101","memberName":"timestamp","nodeType":"MemberAccess","src":"1693:15:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":27432,"name":"t1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27413,"src":"1711:2:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1693:20:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1675:38:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27442,"nodeType":"IfStatement","src":"1671:253:101","trueBody":{"id":27441,"nodeType":"Block","src":"1715:209:101","statements":[{"assignments":[27436],"declarations":[{"constant":false,"id":27436,"mutability":"mutable","name":"t0","nameLocation":"1731:2:101","nodeType":"VariableDeclaration","scope":27441,"src":"1723:10:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27435,"name":"uint256","nodeType":"ElementaryTypeName","src":"1723:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27439,"initialValue":{"expression":{"id":27437,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27407,"src":"1736:4:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":27438,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1741:12:101","memberName":"initialATime","nodeType":"MemberAccess","referencedDeclaration":30759,"src":"1736:17:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1723:30:101"},{"AST":{"nodeType":"YulBlock","src":"1799:119:101","statements":[{"nodeType":"YulAssignment","src":"1809:101:101","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a0","nodeType":"YulIdentifier","src":"1833:2:101"},{"arguments":[{"name":"t1","nodeType":"YulIdentifier","src":"1841:2:101"},{"arguments":[],"functionName":{"name":"timestamp","nodeType":"YulIdentifier","src":"1845:9:101"},"nodeType":"YulFunctionCall","src":"1845:11:101"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1837:3:101"},"nodeType":"YulFunctionCall","src":"1837:20:101"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"1829:3:101"},"nodeType":"YulFunctionCall","src":"1829:29:101"},{"arguments":[{"name":"currentA","nodeType":"YulIdentifier","src":"1864:8:101"},{"arguments":[{"arguments":[],"functionName":{"name":"timestamp","nodeType":"YulIdentifier","src":"1878:9:101"},"nodeType":"YulFunctionCall","src":"1878:11:101"},{"name":"t0","nodeType":"YulIdentifier","src":"1891:2:101"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1874:3:101"},"nodeType":"YulFunctionCall","src":"1874:20:101"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"1860:3:101"},"nodeType":"YulFunctionCall","src":"1860:35:101"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1825:3:101"},"nodeType":"YulFunctionCall","src":"1825:71:101"},{"arguments":[{"name":"t1","nodeType":"YulIdentifier","src":"1902:2:101"},{"name":"t0","nodeType":"YulIdentifier","src":"1906:2:101"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1898:3:101"},"nodeType":"YulFunctionCall","src":"1898:11:101"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"1821:3:101"},"nodeType":"YulFunctionCall","src":"1821:89:101"},"variableNames":[{"name":"currentA","nodeType":"YulIdentifier","src":"1809:8:101"}]}]},"evmVersion":"london","externalReferences":[{"declaration":27423,"isOffset":false,"isSlot":false,"src":"1833:2:101","valueSize":1},{"declaration":27410,"isOffset":false,"isSlot":false,"src":"1809:8:101","valueSize":1},{"declaration":27410,"isOffset":false,"isSlot":false,"src":"1864:8:101","valueSize":1},{"declaration":27436,"isOffset":false,"isSlot":false,"src":"1891:2:101","valueSize":1},{"declaration":27436,"isOffset":false,"isSlot":false,"src":"1906:2:101","valueSize":1},{"declaration":27413,"isOffset":false,"isSlot":false,"src":"1841:2:101","valueSize":1},{"declaration":27413,"isOffset":false,"isSlot":false,"src":"1902:2:101","valueSize":1}],"id":27440,"nodeType":"InlineAssembly","src":"1790:128:101"}]}}]},"documentation":{"id":27404,"nodeType":"StructuredDocumentation","src":"1163:201:101","text":" @notice Return A in its raw precision\n @dev See the StableSwap paper for details\n @param self Swap struct to read from\n @return currentA A parameter in its raw precision form"},"id":27444,"implemented":true,"kind":"function","modifiers":[],"name":"_getAPrecise","nameLocation":"1376:12:101","nodeType":"FunctionDefinition","parameters":{"id":27408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27407,"mutability":"mutable","name":"self","nameLocation":"1412:4:101","nodeType":"VariableDeclaration","scope":27444,"src":"1389:27:101","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":27406,"nodeType":"UserDefinedTypeName","pathNode":{"id":27405,"name":"SwapUtils.Swap","nameLocations":["1389:9:101","1399:4:101"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"1389:14:101"},"referencedDeclaration":30786,"src":"1389:14:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"}],"src":"1388:29:101"},"returnParameters":{"id":27411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27410,"mutability":"mutable","name":"currentA","nameLocation":"1449:8:101","nodeType":"VariableDeclaration","scope":27444,"src":"1441:16:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27409,"name":"uint256","nodeType":"ElementaryTypeName","src":"1441:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1440:18:101"},"scope":27626,"src":"1367:561:101","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":27569,"nodeType":"Block","src":"2409:980:101","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":27456,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2423:5:101","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":27457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2429:9:101","memberName":"timestamp","nodeType":"MemberAccess","src":"2423:15:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":27458,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27448,"src":"2442:4:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":27459,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2447:12:101","memberName":"initialATime","nodeType":"MemberAccess","referencedDeclaration":30759,"src":"2442:17:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":27460,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"2462:9:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":27461,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2472:14:101","memberName":"MIN_RAMP_DELAY","nodeType":"MemberAccess","referencedDeclaration":29303,"src":"2462:24:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2442:44:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2423:63:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"57616974203120646179206265666f7265207374617274696e672072616d70","id":27464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2488:33:101","typeDescriptions":{"typeIdentifier":"t_stringliteral_1b53e581d849d126253991f586658292489ca99b95601d0e9a46e8a40560683c","typeString":"literal_string \"Wait 1 day before starting ramp\""},"value":"Wait 1 day before starting ramp"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1b53e581d849d126253991f586658292489ca99b95601d0e9a46e8a40560683c","typeString":"literal_string \"Wait 1 day before starting ramp\""}],"id":27455,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2415:7:101","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2415:107:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27466,"nodeType":"ExpressionStatement","src":"2415:107:101"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27468,"name":"futureTime_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27452,"src":"2536:11:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":27469,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2551:5:101","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":27470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2557:9:101","memberName":"timestamp","nodeType":"MemberAccess","src":"2551:15:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":27471,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"2569:9:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":27472,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2579:13:101","memberName":"MIN_RAMP_TIME","nodeType":"MemberAccess","referencedDeclaration":29300,"src":"2569:23:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2551:41:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2536:56:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e73756666696369656e742072616d702074696d65","id":27475,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2594:24:101","typeDescriptions":{"typeIdentifier":"t_stringliteral_4c79bf4677fbadf48dfed0cfd80497295366e965c13f89299485a45d83898b6a","typeString":"literal_string \"Insufficient ramp time\""},"value":"Insufficient ramp time"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4c79bf4677fbadf48dfed0cfd80497295366e965c13f89299485a45d83898b6a","typeString":"literal_string \"Insufficient ramp time\""}],"id":27467,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2528:7:101","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2528:91:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27477,"nodeType":"ExpressionStatement","src":"2528:91:101"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":27486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27479,"name":"futureA_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27450,"src":"2633:8:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":27480,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2645:1:101","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2633:13:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27482,"name":"futureA_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27450,"src":"2650:8:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":27483,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"2661:9:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":27484,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2671:5:101","memberName":"MAX_A","nodeType":"MemberAccess","referencedDeclaration":29294,"src":"2661:15:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2650:26:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2633:43:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"667574757265415f206d757374206265203e203020616e64203c204d41585f41","id":27487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2678:34:101","typeDescriptions":{"typeIdentifier":"t_stringliteral_97176162870e7e456f7a0a31334045c46f00da24e81344128ac9050ab0db28db","typeString":"literal_string \"futureA_ must be > 0 and < MAX_A\""},"value":"futureA_ must be > 0 and < MAX_A"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_97176162870e7e456f7a0a31334045c46f00da24e81344128ac9050ab0db28db","typeString":"literal_string \"futureA_ must be > 0 and < MAX_A\""}],"id":27478,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2625:7:101","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2625:88:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27489,"nodeType":"ExpressionStatement","src":"2625:88:101"},{"assignments":[27491],"declarations":[{"constant":false,"id":27491,"mutability":"mutable","name":"initialAPrecise","nameLocation":"2728:15:101","nodeType":"VariableDeclaration","scope":27569,"src":"2720:23:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27490,"name":"uint256","nodeType":"ElementaryTypeName","src":"2720:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27495,"initialValue":{"arguments":[{"id":27493,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27448,"src":"2759:4:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}],"id":27492,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27444,"src":"2746:12:101","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (uint256)"}},"id":27494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2746:18:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2720:44:101"},{"assignments":[27497],"declarations":[{"constant":false,"id":27497,"mutability":"mutable","name":"futureAPrecise","nameLocation":"2778:14:101","nodeType":"VariableDeclaration","scope":27569,"src":"2770:22:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27496,"name":"uint256","nodeType":"ElementaryTypeName","src":"2770:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27502,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27498,"name":"futureA_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27450,"src":"2795:8:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":27499,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"2806:9:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":27500,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2816:11:101","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"2806:21:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2795:32:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2770:57:101"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27504,"name":"initialAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27491,"src":"2841:15:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":27505,"name":"futureAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27497,"src":"2860:14:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2841:33:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2176616c69642072616d70","id":27507,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2876:13:101","typeDescriptions":{"typeIdentifier":"t_stringliteral_44788ed50b2245d8a26f7d03698b757639551ce6b3f4191322e3b922fdd0abc9","typeString":"literal_string \"!valid ramp\""},"value":"!valid ramp"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_44788ed50b2245d8a26f7d03698b757639551ce6b3f4191322e3b922fdd0abc9","typeString":"literal_string \"!valid ramp\""}],"id":27503,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2833:7:101","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2833:57:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27509,"nodeType":"ExpressionStatement","src":"2833:57:101"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27510,"name":"futureAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27497,"src":"2901:14:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":27511,"name":"initialAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27491,"src":"2918:15:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2901:32:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":27534,"nodeType":"Block","src":"3048:107:101","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27525,"name":"futureAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27497,"src":"3064:14:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27526,"name":"initialAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27491,"src":"3082:15:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":27527,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"3100:9:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":27528,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3110:12:101","memberName":"MAX_A_CHANGE","nodeType":"MemberAccess","referencedDeclaration":29297,"src":"3100:22:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3082:40:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3064:58:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"667574757265415f20697320746f6f206c61726765","id":27531,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3124:23:101","typeDescriptions":{"typeIdentifier":"t_stringliteral_2ee4dedb99ff885c57b93a92e7fecc104d42f54e9af51e109d9629ee80d199e9","typeString":"literal_string \"futureA_ is too large\""},"value":"futureA_ is too large"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2ee4dedb99ff885c57b93a92e7fecc104d42f54e9af51e109d9629ee80d199e9","typeString":"literal_string \"futureA_ is too large\""}],"id":27524,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3056:7:101","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3056:92:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27533,"nodeType":"ExpressionStatement","src":"3056:92:101"}]},"id":27535,"nodeType":"IfStatement","src":"2897:258:101","trueBody":{"id":27523,"nodeType":"Block","src":"2935:107:101","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27514,"name":"futureAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27497,"src":"2951:14:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":27515,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"2968:9:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":27516,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2978:12:101","memberName":"MAX_A_CHANGE","nodeType":"MemberAccess","referencedDeclaration":29297,"src":"2968:22:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2951:39:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":27518,"name":"initialAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27491,"src":"2994:15:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2951:58:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"667574757265415f20697320746f6f20736d616c6c","id":27520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3011:23:101","typeDescriptions":{"typeIdentifier":"t_stringliteral_70ef023479c1247bc56a8110e918ad65744efc349b9118a585df0f3c4ddea941","typeString":"literal_string \"futureA_ is too small\""},"value":"futureA_ is too small"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_70ef023479c1247bc56a8110e918ad65744efc349b9118a585df0f3c4ddea941","typeString":"literal_string \"futureA_ is too small\""}],"id":27513,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2943:7:101","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2943:92:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27522,"nodeType":"ExpressionStatement","src":"2943:92:101"}]}},{"expression":{"id":27540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":27536,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27448,"src":"3161:4:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":27538,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3166:8:101","memberName":"initialA","nodeType":"MemberAccess","referencedDeclaration":30755,"src":"3161:13:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":27539,"name":"initialAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27491,"src":"3177:15:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3161:31:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27541,"nodeType":"ExpressionStatement","src":"3161:31:101"},{"expression":{"id":27546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":27542,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27448,"src":"3198:4:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":27544,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3203:7:101","memberName":"futureA","nodeType":"MemberAccess","referencedDeclaration":30757,"src":"3198:12:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":27545,"name":"futureAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27497,"src":"3213:14:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3198:29:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27547,"nodeType":"ExpressionStatement","src":"3198:29:101"},{"expression":{"id":27553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":27548,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27448,"src":"3233:4:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":27550,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3238:12:101","memberName":"initialATime","nodeType":"MemberAccess","referencedDeclaration":30759,"src":"3233:17:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":27551,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3253:5:101","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":27552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3259:9:101","memberName":"timestamp","nodeType":"MemberAccess","src":"3253:15:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3233:35:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27554,"nodeType":"ExpressionStatement","src":"3233:35:101"},{"expression":{"id":27559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":27555,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27448,"src":"3274:4:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":27557,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3279:11:101","memberName":"futureATime","nodeType":"MemberAccess","referencedDeclaration":30761,"src":"3274:16:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":27558,"name":"futureTime_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27452,"src":"3293:11:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3274:30:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27560,"nodeType":"ExpressionStatement","src":"3274:30:101"},{"eventCall":{"arguments":[{"id":27562,"name":"initialAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27491,"src":"3322:15:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27563,"name":"futureAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27497,"src":"3339:14:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":27564,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3355:5:101","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":27565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3361:9:101","memberName":"timestamp","nodeType":"MemberAccess","src":"3355:15:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27566,"name":"futureTime_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27452,"src":"3372:11:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27561,"name":"RampA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27366,"src":"3316:5:101","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256,uint256)"}},"id":27567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3316:68:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27568,"nodeType":"EmitStatement","src":"3311:73:101"}]},"documentation":{"id":27445,"nodeType":"StructuredDocumentation","src":"1932:366:101","text":" @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\n Checks if the change is too rapid, and commits the new A value only when it falls under\n the limit range.\n @param self Swap struct to update\n @param futureA_ the new A to ramp towards\n @param futureTime_ timestamp when the new A should be reached"},"id":27570,"implemented":true,"kind":"function","modifiers":[],"name":"rampA","nameLocation":"2310:5:101","nodeType":"FunctionDefinition","parameters":{"id":27453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27448,"mutability":"mutable","name":"self","nameLocation":"2344:4:101","nodeType":"VariableDeclaration","scope":27570,"src":"2321:27:101","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":27447,"nodeType":"UserDefinedTypeName","pathNode":{"id":27446,"name":"SwapUtils.Swap","nameLocations":["2321:9:101","2331:4:101"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"2321:14:101"},"referencedDeclaration":30786,"src":"2321:14:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":27450,"mutability":"mutable","name":"futureA_","nameLocation":"2362:8:101","nodeType":"VariableDeclaration","scope":27570,"src":"2354:16:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27449,"name":"uint256","nodeType":"ElementaryTypeName","src":"2354:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27452,"mutability":"mutable","name":"futureTime_","nameLocation":"2384:11:101","nodeType":"VariableDeclaration","scope":27570,"src":"2376:19:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27451,"name":"uint256","nodeType":"ElementaryTypeName","src":"2376:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2315:84:101"},"returnParameters":{"id":27454,"nodeType":"ParameterList","parameters":[],"src":"2409:0:101"},"scope":27626,"src":"2301:1088:101","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":27624,"nodeType":"Block","src":"3624:313:101","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":27578,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27574,"src":"3638:4:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":27579,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3643:11:101","memberName":"futureATime","nodeType":"MemberAccess","referencedDeclaration":30761,"src":"3638:16:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":27580,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3657:5:101","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":27581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3663:9:101","memberName":"timestamp","nodeType":"MemberAccess","src":"3657:15:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3638:34:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"52616d7020697320616c72656164792073746f70706564","id":27583,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3674:25:101","typeDescriptions":{"typeIdentifier":"t_stringliteral_1a473326c7eab86a4c1915be8a93321772f3ce5660b51eb1a81d3ac6b9907aa3","typeString":"literal_string \"Ramp is already stopped\""},"value":"Ramp is already stopped"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1a473326c7eab86a4c1915be8a93321772f3ce5660b51eb1a81d3ac6b9907aa3","typeString":"literal_string \"Ramp is already stopped\""}],"id":27577,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3630:7:101","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3630:70:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27585,"nodeType":"ExpressionStatement","src":"3630:70:101"},{"assignments":[27587],"declarations":[{"constant":false,"id":27587,"mutability":"mutable","name":"currentA","nameLocation":"3715:8:101","nodeType":"VariableDeclaration","scope":27624,"src":"3707:16:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27586,"name":"uint256","nodeType":"ElementaryTypeName","src":"3707:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27591,"initialValue":{"arguments":[{"id":27589,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27574,"src":"3739:4:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}],"id":27588,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27444,"src":"3726:12:101","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (uint256)"}},"id":27590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3726:18:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3707:37:101"},{"expression":{"id":27596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":27592,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27574,"src":"3750:4:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":27594,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3755:8:101","memberName":"initialA","nodeType":"MemberAccess","referencedDeclaration":30755,"src":"3750:13:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":27595,"name":"currentA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27587,"src":"3766:8:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3750:24:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27597,"nodeType":"ExpressionStatement","src":"3750:24:101"},{"expression":{"id":27602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":27598,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27574,"src":"3780:4:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":27600,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3785:7:101","memberName":"futureA","nodeType":"MemberAccess","referencedDeclaration":30757,"src":"3780:12:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":27601,"name":"currentA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27587,"src":"3795:8:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3780:23:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27603,"nodeType":"ExpressionStatement","src":"3780:23:101"},{"expression":{"id":27609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":27604,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27574,"src":"3809:4:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":27606,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3814:12:101","memberName":"initialATime","nodeType":"MemberAccess","referencedDeclaration":30759,"src":"3809:17:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":27607,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3829:5:101","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":27608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3835:9:101","memberName":"timestamp","nodeType":"MemberAccess","src":"3829:15:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3809:35:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27610,"nodeType":"ExpressionStatement","src":"3809:35:101"},{"expression":{"id":27616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":27611,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27574,"src":"3850:4:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":27613,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3855:11:101","memberName":"futureATime","nodeType":"MemberAccess","referencedDeclaration":30761,"src":"3850:16:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":27614,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3869:5:101","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":27615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3875:9:101","memberName":"timestamp","nodeType":"MemberAccess","src":"3869:15:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3850:34:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27617,"nodeType":"ExpressionStatement","src":"3850:34:101"},{"eventCall":{"arguments":[{"id":27619,"name":"currentA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27587,"src":"3906:8:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":27620,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3916:5:101","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":27621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3922:9:101","memberName":"timestamp","nodeType":"MemberAccess","src":"3916:15:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27618,"name":"StopRampA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27372,"src":"3896:9:101","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":27622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3896:36:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27623,"nodeType":"EmitStatement","src":"3891:41:101"}]},"documentation":{"id":27571,"nodeType":"StructuredDocumentation","src":"3393:171:101","text":" @notice Stops ramping A immediately. Once this function is called, rampA()\n cannot be called for another 24 hours\n @param self Swap struct to update"},"id":27625,"implemented":true,"kind":"function","modifiers":[],"name":"stopRampA","nameLocation":"3576:9:101","nodeType":"FunctionDefinition","parameters":{"id":27575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27574,"mutability":"mutable","name":"self","nameLocation":"3609:4:101","nodeType":"VariableDeclaration","scope":27625,"src":"3586:27:101","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":27573,"nodeType":"UserDefinedTypeName","pathNode":{"id":27572,"name":"SwapUtils.Swap","nameLocations":["3586:9:101","3596:4:101"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"3586:14:101"},"referencedDeclaration":30786,"src":"3586:14:101","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"}],"src":"3585:29:101"},"returnParameters":{"id":27576,"nodeType":"ParameterList","parameters":[],"src":"3624:0:101"},"scope":27626,"src":"3567:370:101","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":27627,"src":"346:3593:101","usedErrors":[]}],"src":"39:3901:101"},"id":101},"contracts/core/connext/libraries/AssetLogic.sol":{"ast":{"absolutePath":"contracts/core/connext/libraries/AssetLogic.sol","exportedSymbols":{"AppStorage":[29536],"AssetLogic":[28696],"Constants":[29304],"IERC20Metadata":[10837],"IStableSwap":[27329],"LibConnextStorage":[29545],"SafeERC20":[11154],"SwapUtils":[34244],"TokenConfig":[29395],"TokenId":[37728],"TypeCasts":[50188]},"id":28697,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":27628,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:102"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":27630,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28697,"sourceUnit":11155,"src":"64:82:102","symbolAliases":[{"foreign":{"id":27629,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11154,"src":"72:9:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","id":27632,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28697,"sourceUnit":10838,"src":"147:97:102","symbolAliases":[{"foreign":{"id":27631,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10837,"src":"155:14:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/libraries/TypeCasts.sol","file":"../../../shared/libraries/TypeCasts.sol","id":27634,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28697,"sourceUnit":50189,"src":"246:66:102","symbolAliases":[{"foreign":{"id":27633,"name":"TypeCasts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50188,"src":"254:9:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IStableSwap.sol","file":"../interfaces/IStableSwap.sol","id":27636,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28697,"sourceUnit":27330,"src":"314:58:102","symbolAliases":[{"foreign":{"id":27635,"name":"IStableSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27329,"src":"322:11:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/LibConnextStorage.sol","file":"./LibConnextStorage.sol","id":27640,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28697,"sourceUnit":29546,"src":"374:83:102","symbolAliases":[{"foreign":{"id":27637,"name":"LibConnextStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29545,"src":"382:17:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":27638,"name":"AppStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29536,"src":"401:10:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":27639,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29395,"src":"413:11:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/SwapUtils.sol","file":"./SwapUtils.sol","id":27642,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28697,"sourceUnit":34245,"src":"458:42:102","symbolAliases":[{"foreign":{"id":27641,"name":"SwapUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34244,"src":"466:9:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/Constants.sol","file":"./Constants.sol","id":27644,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28697,"sourceUnit":29305,"src":"501:42:102","symbolAliases":[{"foreign":{"id":27643,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"509:9:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/TokenId.sol","file":"./TokenId.sol","id":27646,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28697,"sourceUnit":37729,"src":"544:38:102","symbolAliases":[{"foreign":{"id":27645,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37728,"src":"552:7:102","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"AssetLogic","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":28696,"linearizedBaseContracts":[28696],"name":"AssetLogic","nameLocation":"592:10:102","nodeType":"ContractDefinition","nodes":[{"global":false,"id":27650,"libraryName":{"id":27647,"name":"SwapUtils","nameLocations":["655:9:102"],"nodeType":"IdentifierPath","referencedDeclaration":34244,"src":"655:9:102"},"nodeType":"UsingForDirective","src":"649:35:102","typeName":{"id":27649,"nodeType":"UserDefinedTypeName","pathNode":{"id":27648,"name":"SwapUtils.Swap","nameLocations":["669:9:102","679:4:102"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"669:14:102"},"referencedDeclaration":30786,"src":"669:14:102","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}}},{"global":false,"id":27654,"libraryName":{"id":27651,"name":"SafeERC20","nameLocations":["693:9:102"],"nodeType":"IdentifierPath","referencedDeclaration":11154,"src":"693:9:102"},"nodeType":"UsingForDirective","src":"687:35:102","typeName":{"id":27653,"nodeType":"UserDefinedTypeName","pathNode":{"id":27652,"name":"IERC20Metadata","nameLocations":["707:14:102"],"nodeType":"IdentifierPath","referencedDeclaration":10837,"src":"707:14:102"},"referencedDeclaration":10837,"src":"707:14:102","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}}},{"errorSelector":"2a38b133","id":27656,"name":"AssetLogic__handleIncomingAsset_nativeAssetNotSupported","nameLocation":"771:55:102","nodeType":"ErrorDefinition","parameters":{"id":27655,"nodeType":"ParameterList","parameters":[],"src":"826:2:102"},"src":"765:64:102"},{"errorSelector":"3901dcd4","id":27658,"name":"AssetLogic__handleIncomingAsset_feeOnTransferNotSupported","nameLocation":"838:57:102","nodeType":"ErrorDefinition","parameters":{"id":27657,"nodeType":"ParameterList","parameters":[],"src":"895:2:102"},"src":"832:66:102"},{"errorSelector":"749194f6","id":27660,"name":"AssetLogic__handleOutgoingAsset_notNative","nameLocation":"907:41:102","nodeType":"ErrorDefinition","parameters":{"id":27659,"nodeType":"ParameterList","parameters":[],"src":"948:2:102"},"src":"901:50:102"},{"errorSelector":"54e44290","id":27662,"name":"AssetLogic__getTokenIndexFromStableSwapPool_notExist","nameLocation":"960:52:102","nodeType":"ErrorDefinition","parameters":{"id":27661,"nodeType":"ParameterList","parameters":[],"src":"1012:2:102"},"src":"954:61:102"},{"errorSelector":"c319947e","id":27664,"name":"AssetLogic__getConfig_notRegistered","nameLocation":"1024:35:102","nodeType":"ErrorDefinition","parameters":{"id":27663,"nodeType":"ParameterList","parameters":[],"src":"1059:2:102"},"src":"1018:44:102"},{"errorSelector":"b8dd3225","id":27666,"name":"AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist","nameLocation":"1071:56:102","nodeType":"ErrorDefinition","parameters":{"id":27665,"nodeType":"ParameterList","parameters":[],"src":"1127:2:102"},"src":"1065:65:102"},{"body":{"id":27700,"nodeType":"Block","src":"1269:494:102","statements":[{"assignments":[27676],"declarations":[{"constant":false,"id":27676,"mutability":"mutable","name":"s","nameLocation":"1294:1:102","nodeType":"VariableDeclaration","scope":27700,"src":"1275:20:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"},"typeName":{"id":27675,"nodeType":"UserDefinedTypeName","pathNode":{"id":27674,"name":"AppStorage","nameLocations":["1275:10:102"],"nodeType":"IdentifierPath","referencedDeclaration":29536,"src":"1275:10:102"},"referencedDeclaration":29536,"src":"1275:10:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"}},"visibility":"internal"}],"id":27680,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27677,"name":"LibConnextStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29545,"src":"1298:17:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibConnextStorage_$29545_$","typeString":"type(library LibConnextStorage)"}},"id":27678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1316:14:102","memberName":"connextStorage","nodeType":"MemberAccess","referencedDeclaration":29544,"src":"1298:32:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_AppStorage_$29536_storage_ptr_$","typeString":"function () pure returns (struct AppStorage storage pointer)"}},"id":27679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1298:34:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"1275:57:102"},{"assignments":[27683],"declarations":[{"constant":false,"id":27683,"mutability":"mutable","name":"config","nameLocation":"1358:6:102","nodeType":"VariableDeclaration","scope":27700,"src":"1338:26:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig"},"typeName":{"id":27682,"nodeType":"UserDefinedTypeName","pathNode":{"id":27681,"name":"TokenConfig","nameLocations":["1338:11:102"],"nodeType":"IdentifierPath","referencedDeclaration":29395,"src":"1338:11:102"},"referencedDeclaration":29395,"src":"1338:11:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig"}},"visibility":"internal"}],"id":27688,"initialValue":{"baseExpression":{"expression":{"id":27684,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27676,"src":"1367:1:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}},"id":27685,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1369:12:102","memberName":"tokenConfigs","nodeType":"MemberAccess","referencedDeclaration":29426,"src":"1367:14:102","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig storage ref)"}},"id":27687,"indexExpression":{"id":27686,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27668,"src":"1382:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1367:20:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage","typeString":"struct TokenConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"1338:49:102"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":27692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":27689,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27683,"src":"1652:6:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":27690,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1659:15:102","memberName":"adoptedDecimals","nodeType":"MemberAccess","referencedDeclaration":29386,"src":"1652:22:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"31","id":27691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1677:1:102","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1652:26:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27697,"nodeType":"IfStatement","src":"1648:91:102","trueBody":{"id":27696,"nodeType":"Block","src":"1680:59:102","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":27693,"name":"AssetLogic__getConfig_notRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27664,"src":"1695:35:102","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":27694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1695:37:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27695,"nodeType":"RevertStatement","src":"1688:44:102"}]}},{"expression":{"id":27698,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27683,"src":"1752:6:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"functionReturnParameters":27673,"id":27699,"nodeType":"Return","src":"1745:13:102"}]},"id":27701,"implemented":true,"kind":"function","modifiers":[],"name":"getConfig","nameLocation":"1201:9:102","nodeType":"FunctionDefinition","parameters":{"id":27669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27668,"mutability":"mutable","name":"_key","nameLocation":"1219:4:102","nodeType":"VariableDeclaration","scope":27701,"src":"1211:12:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27667,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1211:7:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1210:14:102"},"returnParameters":{"id":27673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27672,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27701,"src":"1248:19:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig"},"typeName":{"id":27671,"nodeType":"UserDefinedTypeName","pathNode":{"id":27670,"name":"TokenConfig","nameLocations":["1248:11:102"],"nodeType":"IdentifierPath","referencedDeclaration":29395,"src":"1248:11:102"},"referencedDeclaration":29395,"src":"1248:11:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig"}},"visibility":"internal"}],"src":"1247:21:102"},"scope":28696,"src":"1192:571:102","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":27771,"nodeType":"Block","src":"2123:772:102","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27709,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27706,"src":"2182:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":27710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2193:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2182:12:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27714,"nodeType":"IfStatement","src":"2178:39:102","trueBody":{"id":27713,"nodeType":"Block","src":"2196:21:102","statements":[{"functionReturnParameters":27708,"id":27712,"nodeType":"Return","src":"2204:7:102"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":27720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27715,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27704,"src":"2274:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":27718,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2292:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":27717,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2284:7:102","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":27716,"name":"address","nodeType":"ElementaryTypeName","src":"2284:7:102","typeDescriptions":{}}},"id":27719,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2284:10:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2274:20:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27725,"nodeType":"IfStatement","src":"2270:105:102","trueBody":{"id":27724,"nodeType":"Block","src":"2296:79:102","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":27721,"name":"AssetLogic__handleIncomingAsset_nativeAssetNotSupported","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27656,"src":"2311:55:102","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":27722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2311:57:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27723,"nodeType":"RevertStatement","src":"2304:64:102"}]}},{"assignments":[27728],"declarations":[{"constant":false,"id":27728,"mutability":"mutable","name":"asset","nameLocation":"2396:5:102","nodeType":"VariableDeclaration","scope":27771,"src":"2381:20:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"},"typeName":{"id":27727,"nodeType":"UserDefinedTypeName","pathNode":{"id":27726,"name":"IERC20Metadata","nameLocations":["2381:14:102"],"nodeType":"IdentifierPath","referencedDeclaration":10837,"src":"2381:14:102"},"referencedDeclaration":10837,"src":"2381:14:102","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},"visibility":"internal"}],"id":27732,"initialValue":{"arguments":[{"id":27730,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27704,"src":"2419:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":27729,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10837,"src":"2404:14:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$10837_$","typeString":"type(contract IERC20Metadata)"}},"id":27731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2404:22:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},"nodeType":"VariableDeclarationStatement","src":"2381:45:102"},{"assignments":[27734],"declarations":[{"constant":false,"id":27734,"mutability":"mutable","name":"starting","nameLocation":"2514:8:102","nodeType":"VariableDeclaration","scope":27771,"src":"2506:16:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27733,"name":"uint256","nodeType":"ElementaryTypeName","src":"2506:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27742,"initialValue":{"arguments":[{"arguments":[{"id":27739,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2549:4:102","typeDescriptions":{"typeIdentifier":"t_contract$_AssetLogic_$28696","typeString":"library AssetLogic"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AssetLogic_$28696","typeString":"library AssetLogic"}],"id":27738,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2541:7:102","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":27737,"name":"address","nodeType":"ElementaryTypeName","src":"2541:7:102","typeDescriptions":{}}},"id":27740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2541:13:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27735,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27728,"src":"2525:5:102","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},"id":27736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2531:9:102","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10769,"src":"2525:15:102","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":27741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2525:30:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2506:49:102"},{"expression":{"arguments":[{"expression":{"id":27746,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2620:3:102","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":27747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2624:6:102","memberName":"sender","nodeType":"MemberAccess","src":"2620:10:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":27750,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2640:4:102","typeDescriptions":{"typeIdentifier":"t_contract$_AssetLogic_$28696","typeString":"library AssetLogic"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AssetLogic_$28696","typeString":"library AssetLogic"}],"id":27749,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2632:7:102","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":27748,"name":"address","nodeType":"ElementaryTypeName","src":"2632:7:102","typeDescriptions":{}}},"id":27751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2632:13:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27752,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27706,"src":"2647:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":27743,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27728,"src":"2597:5:102","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},"id":27745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2603:16:102","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":10931,"src":"2597:22:102","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10812_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$10812_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":27753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2597:58:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27754,"nodeType":"ExpressionStatement","src":"2597:58:102"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":27759,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2780:4:102","typeDescriptions":{"typeIdentifier":"t_contract$_AssetLogic_$28696","typeString":"library AssetLogic"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AssetLogic_$28696","typeString":"library AssetLogic"}],"id":27758,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2772:7:102","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":27757,"name":"address","nodeType":"ElementaryTypeName","src":"2772:7:102","typeDescriptions":{}}},"id":27760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2772:13:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27755,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27728,"src":"2756:5:102","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},"id":27756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2762:9:102","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10769,"src":"2756:15:102","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":27761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2756:30:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":27762,"name":"starting","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27734,"src":"2789:8:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2756:41:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":27764,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27706,"src":"2801:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2756:52:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27770,"nodeType":"IfStatement","src":"2752:139:102","trueBody":{"id":27769,"nodeType":"Block","src":"2810:81:102","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":27766,"name":"AssetLogic__handleIncomingAsset_feeOnTransferNotSupported","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27658,"src":"2825:57:102","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":27767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2825:59:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27768,"nodeType":"RevertStatement","src":"2818:66:102"}]}}]},"documentation":{"id":27702,"nodeType":"StructuredDocumentation","src":"1767:282:102","text":" @notice Handles transferring funds from msg.sender to the Connext contract.\n @dev Does NOT work with fee-on-transfer tokens: will revert.\n @param _asset - The address of the ERC20 token to transfer.\n @param _amount - The specified amount to transfer."},"id":27772,"implemented":true,"kind":"function","modifiers":[],"name":"handleIncomingAsset","nameLocation":"2061:19:102","nodeType":"FunctionDefinition","parameters":{"id":27707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27704,"mutability":"mutable","name":"_asset","nameLocation":"2089:6:102","nodeType":"VariableDeclaration","scope":27772,"src":"2081:14:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27703,"name":"address","nodeType":"ElementaryTypeName","src":"2081:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27706,"mutability":"mutable","name":"_amount","nameLocation":"2105:7:102","nodeType":"VariableDeclaration","scope":27772,"src":"2097:15:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27705,"name":"uint256","nodeType":"ElementaryTypeName","src":"2097:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2080:33:102"},"returnParameters":{"id":27708,"nodeType":"ParameterList","parameters":[],"src":"2123:0:102"},"scope":28696,"src":"2052:843:102","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":27808,"nodeType":"Block","src":"3294:344:102","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27782,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27779,"src":"3353:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":27783,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3364:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3353:12:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27787,"nodeType":"IfStatement","src":"3349:39:102","trueBody":{"id":27786,"nodeType":"Block","src":"3367:21:102","statements":[{"functionReturnParameters":27781,"id":27785,"nodeType":"Return","src":"3375:7:102"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":27793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27788,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27775,"src":"3445:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":27791,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3463:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":27790,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3455:7:102","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":27789,"name":"address","nodeType":"ElementaryTypeName","src":"3455:7:102","typeDescriptions":{}}},"id":27792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3455:10:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3445:20:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27797,"nodeType":"IfStatement","src":"3441:76:102","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":27794,"name":"AssetLogic__handleOutgoingAsset_notNative","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27660,"src":"3474:41:102","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":27795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3474:43:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27796,"nodeType":"RevertStatement","src":"3467:50:102"}},{"expression":{"arguments":[{"arguments":[{"id":27802,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27775,"src":"3611:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":27801,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10837,"src":"3596:14:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$10837_$","typeString":"type(contract IERC20Metadata)"}},"id":27803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3596:22:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},{"id":27804,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27777,"src":"3620:3:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27805,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27779,"src":"3625:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":27798,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11154,"src":"3573:9:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeERC20_$11154_$","typeString":"type(library SafeERC20)"}},"id":27800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3583:12:102","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10905,"src":"3573:22:102","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10812_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":27806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3573:60:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27807,"nodeType":"ExpressionStatement","src":"3573:60:102"}]},"documentation":{"id":27773,"nodeType":"StructuredDocumentation","src":"2899:292:102","text":" @notice Handles transferring funds from the Connext contract to a specified address\n @param _asset - The address of the ERC20 token to transfer.\n @param _to - The recipient address that will receive the funds.\n @param _amount - The amount to withdraw from contract."},"id":27809,"implemented":true,"kind":"function","modifiers":[],"name":"handleOutgoingAsset","nameLocation":"3203:19:102","nodeType":"FunctionDefinition","parameters":{"id":27780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27775,"mutability":"mutable","name":"_asset","nameLocation":"3236:6:102","nodeType":"VariableDeclaration","scope":27809,"src":"3228:14:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27774,"name":"address","nodeType":"ElementaryTypeName","src":"3228:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27777,"mutability":"mutable","name":"_to","nameLocation":"3256:3:102","nodeType":"VariableDeclaration","scope":27809,"src":"3248:11:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27776,"name":"address","nodeType":"ElementaryTypeName","src":"3248:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27779,"mutability":"mutable","name":"_amount","nameLocation":"3273:7:102","nodeType":"VariableDeclaration","scope":27809,"src":"3265:15:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27778,"name":"uint256","nodeType":"ElementaryTypeName","src":"3265:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3222:62:102"},"returnParameters":{"id":27781,"nodeType":"ParameterList","parameters":[],"src":"3294:0:102"},"scope":28696,"src":"3194:444:102","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":27853,"nodeType":"Block","src":"4073:282:102","statements":[{"assignments":[27821],"declarations":[{"constant":false,"id":27821,"mutability":"mutable","name":"s","nameLocation":"4098:1:102","nodeType":"VariableDeclaration","scope":27853,"src":"4079:20:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"},"typeName":{"id":27820,"nodeType":"UserDefinedTypeName","pathNode":{"id":27819,"name":"AppStorage","nameLocations":["4079:10:102"],"nodeType":"IdentifierPath","referencedDeclaration":29536,"src":"4079:10:102"},"referencedDeclaration":29536,"src":"4079:10:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"}},"visibility":"internal"}],"id":27825,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27822,"name":"LibConnextStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29545,"src":"4102:17:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibConnextStorage_$29545_$","typeString":"type(library LibConnextStorage)"}},"id":27823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4120:14:102","memberName":"connextStorage","nodeType":"MemberAccess","referencedDeclaration":29544,"src":"4102:32:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_AppStorage_$29536_storage_ptr_$","typeString":"function () pure returns (struct AppStorage storage pointer)"}},"id":27824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4102:34:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4079:57:102"},{"assignments":[27827],"declarations":[{"constant":false,"id":27827,"mutability":"mutable","name":"index","nameLocation":"4148:5:102","nodeType":"VariableDeclaration","scope":27853,"src":"4142:11:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27826,"name":"uint8","nodeType":"ElementaryTypeName","src":"4142:5:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":27834,"initialValue":{"baseExpression":{"baseExpression":{"expression":{"id":27828,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27821,"src":"4156:1:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}},"id":27829,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4158:12:102","memberName":"tokenIndexes","nodeType":"MemberAccess","referencedDeclaration":29504,"src":"4156:14:102","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_uint8_$_$","typeString":"mapping(bytes32 => mapping(address => uint8))"}},"id":27831,"indexExpression":{"id":27830,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27812,"src":"4171:3:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4156:19:102","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":27833,"indexExpression":{"id":27832,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27814,"src":"4176:12:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4156:33:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"4142:47:102"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":27846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"expression":{"baseExpression":{"expression":{"id":27837,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27821,"src":"4207:1:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}},"id":27838,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4209:12:102","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"4207:14:102","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":27840,"indexExpression":{"id":27839,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27812,"src":"4222:3:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4207:19:102","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"id":27841,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4227:12:102","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"4207:32:102","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":27843,"indexExpression":{"id":27842,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27827,"src":"4240:5:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4207:39:102","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":27836,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4199:7:102","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":27835,"name":"address","nodeType":"ElementaryTypeName","src":"4199:7:102","typeDescriptions":{}}},"id":27844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4199:48:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":27845,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27814,"src":"4251:12:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4199:64:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27850,"nodeType":"IfStatement","src":"4195:137:102","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":27847,"name":"AssetLogic__getTokenIndexFromStableSwapPool_notExist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27662,"src":"4278:52:102","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":27848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4278:54:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27849,"nodeType":"RevertStatement","src":"4271:61:102"}},{"expression":{"id":27851,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27827,"src":"4345:5:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":27818,"id":27852,"nodeType":"Return","src":"4338:12:102"}]},"documentation":{"id":27810,"nodeType":"StructuredDocumentation","src":"3701:263:102","text":" @notice Return the index of the given token address. Reverts if no matching\n token is found.\n @param key the hash of the canonical id and domain\n @param tokenAddress address of the token\n @return the index of the given token address"},"id":27854,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenIndexFromStableSwapPool","nameLocation":"3976:31:102","nodeType":"FunctionDefinition","parameters":{"id":27815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27812,"mutability":"mutable","name":"key","nameLocation":"4016:3:102","nodeType":"VariableDeclaration","scope":27854,"src":"4008:11:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27811,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4008:7:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":27814,"mutability":"mutable","name":"tokenAddress","nameLocation":"4029:12:102","nodeType":"VariableDeclaration","scope":27854,"src":"4021:20:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27813,"name":"address","nodeType":"ElementaryTypeName","src":"4021:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4007:35:102"},"returnParameters":{"id":27818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27817,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27854,"src":"4066:5:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27816,"name":"uint8","nodeType":"ElementaryTypeName","src":"4066:5:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"4065:7:102"},"scope":28696,"src":"3967:388:102","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":27910,"nodeType":"Block","src":"5109:590:102","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27870,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27863,"src":"5165:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":27871,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5176:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5165:12:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27876,"nodeType":"IfStatement","src":"5161:41:102","trueBody":{"id":27875,"nodeType":"Block","src":"5179:23:102","statements":[{"expression":{"hexValue":"30","id":27873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5194:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":27869,"id":27874,"nodeType":"Return","src":"5187:8:102"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":27879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27877,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27861,"src":"5304:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":27878,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27859,"src":"5314:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5304:16:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27883,"nodeType":"IfStatement","src":"5300:51:102","trueBody":{"id":27882,"nodeType":"Block","src":"5322:29:102","statements":[{"expression":{"id":27880,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27863,"src":"5337:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":27869,"id":27881,"nodeType":"Return","src":"5330:14:102"}]}},{"assignments":[27886],"declarations":[{"constant":false,"id":27886,"mutability":"mutable","name":"config","nameLocation":"5401:6:102","nodeType":"VariableDeclaration","scope":27910,"src":"5381:26:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig"},"typeName":{"id":27885,"nodeType":"UserDefinedTypeName","pathNode":{"id":27884,"name":"TokenConfig","nameLocations":["5381:11:102"],"nodeType":"IdentifierPath","referencedDeclaration":29395,"src":"5381:11:102"},"referencedDeclaration":29395,"src":"5381:11:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig"}},"visibility":"internal"}],"id":27890,"initialValue":{"arguments":[{"id":27888,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27857,"src":"5420:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":27887,"name":"getConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27701,"src":"5410:9:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_struct$_TokenConfig_$29395_storage_ptr_$","typeString":"function (bytes32) view returns (struct TokenConfig storage pointer)"}},"id":27889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5410:15:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5381:44:102"},{"assignments":[27892,null],"declarations":[{"constant":false,"id":27892,"mutability":"mutable","name":"out","nameLocation":"5490:3:102","nodeType":"VariableDeclaration","scope":27910,"src":"5482:11:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27891,"name":"uint256","nodeType":"ElementaryTypeName","src":"5482:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":27907,"initialValue":{"arguments":[{"id":27894,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27857,"src":"5517:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":27895,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27859,"src":"5529:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27896,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27861,"src":"5543:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27897,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27863,"src":"5557:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":27899,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27886,"src":"5598:6:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":27900,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5605:15:102","memberName":"adoptedDecimals","nodeType":"MemberAccess","referencedDeclaration":29386,"src":"5598:22:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"id":27901,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27886,"src":"5622:6:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":27902,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5629:22:102","memberName":"representationDecimals","nodeType":"MemberAccess","referencedDeclaration":29382,"src":"5622:29:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":27903,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27863,"src":"5653:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27904,"name":"_slippage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27865,"src":"5662:9:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27898,"name":"calculateSlippageBoundary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28640,"src":"5572:25:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint8_$_t_uint8_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint8,uint8,uint256,uint256) pure returns (uint256)"}},"id":27905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5572:100:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27893,"name":"_swapAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28131,"src":"5499:10:102","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_address_$","typeString":"function (bytes32,address,address,uint256,uint256) returns (uint256,address)"}},"id":27906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5499:179:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"nodeType":"VariableDeclarationStatement","src":"5481:197:102"},{"expression":{"id":27908,"name":"out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27892,"src":"5691:3:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":27869,"id":27909,"nodeType":"Return","src":"5684:10:102"}]},"documentation":{"id":27855,"nodeType":"StructuredDocumentation","src":"4413:526:102","text":" @notice Swaps an adopted asset to the local (representation or canonical) asset.\n @dev Will not swap if the asset passed in is the local asset.\n @param _key - The hash of canonical id and domain.\n @param _asset - The address of the adopted asset to swap into the local asset.\n @param _amount - The amount of the adopted asset to swap.\n @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\n @return uint256 The amount of local asset received from swap."},"id":27911,"implemented":true,"kind":"function","modifiers":[],"name":"swapToLocalAssetIfNeeded","nameLocation":"4951:24:102","nodeType":"FunctionDefinition","parameters":{"id":27866,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27857,"mutability":"mutable","name":"_key","nameLocation":"4989:4:102","nodeType":"VariableDeclaration","scope":27911,"src":"4981:12:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27856,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4981:7:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":27859,"mutability":"mutable","name":"_asset","nameLocation":"5007:6:102","nodeType":"VariableDeclaration","scope":27911,"src":"4999:14:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27858,"name":"address","nodeType":"ElementaryTypeName","src":"4999:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27861,"mutability":"mutable","name":"_local","nameLocation":"5027:6:102","nodeType":"VariableDeclaration","scope":27911,"src":"5019:14:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27860,"name":"address","nodeType":"ElementaryTypeName","src":"5019:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27863,"mutability":"mutable","name":"_amount","nameLocation":"5047:7:102","nodeType":"VariableDeclaration","scope":27911,"src":"5039:15:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27862,"name":"uint256","nodeType":"ElementaryTypeName","src":"5039:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27865,"mutability":"mutable","name":"_slippage","nameLocation":"5068:9:102","nodeType":"VariableDeclaration","scope":27911,"src":"5060:17:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27864,"name":"uint256","nodeType":"ElementaryTypeName","src":"5060:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4975:106:102"},"returnParameters":{"id":27869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27868,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27911,"src":"5100:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27867,"name":"uint256","nodeType":"ElementaryTypeName","src":"5100:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5099:9:102"},"scope":28696,"src":"4942:757:102","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":27974,"nodeType":"Block","src":"6582:917:102","statements":[{"assignments":[27931],"declarations":[{"constant":false,"id":27931,"mutability":"mutable","name":"config","nameLocation":"6637:6:102","nodeType":"VariableDeclaration","scope":27974,"src":"6617:26:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig"},"typeName":{"id":27930,"nodeType":"UserDefinedTypeName","pathNode":{"id":27929,"name":"TokenConfig","nameLocations":["6617:11:102"],"nodeType":"IdentifierPath","referencedDeclaration":29395,"src":"6617:11:102"},"referencedDeclaration":29395,"src":"6617:11:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig"}},"visibility":"internal"}],"id":27935,"initialValue":{"arguments":[{"id":27933,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27914,"src":"6656:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":27932,"name":"getConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27701,"src":"6646:9:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_struct$_TokenConfig_$29395_storage_ptr_$","typeString":"function (bytes32) view returns (struct TokenConfig storage pointer)"}},"id":27934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6646:15:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6617:44:102"},{"assignments":[27937],"declarations":[{"constant":false,"id":27937,"mutability":"mutable","name":"adopted","nameLocation":"6675:7:102","nodeType":"VariableDeclaration","scope":27974,"src":"6667:15:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27936,"name":"address","nodeType":"ElementaryTypeName","src":"6667:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":27940,"initialValue":{"expression":{"id":27938,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27931,"src":"6685:6:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":27939,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6692:7:102","memberName":"adopted","nodeType":"MemberAccess","referencedDeclaration":29384,"src":"6685:14:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6667:32:102"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":27943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27941,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27937,"src":"6775:7:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":27942,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27916,"src":"6786:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6775:17:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27949,"nodeType":"IfStatement","src":"6771:63:102","trueBody":{"id":27948,"nodeType":"Block","src":"6794:40:102","statements":[{"expression":{"components":[{"id":27944,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27918,"src":"6810:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27945,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27937,"src":"6819:7:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27946,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6809:18:102","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"functionReturnParameters":27928,"id":27947,"nodeType":"Return","src":"6802:25:102"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27950,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27918,"src":"6890:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":27951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6901:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6890:12:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27958,"nodeType":"IfStatement","src":"6886:58:102","trueBody":{"id":27957,"nodeType":"Block","src":"6904:40:102","statements":[{"expression":{"components":[{"id":27953,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27918,"src":"6920:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27954,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27937,"src":"6929:7:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27955,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6919:18:102","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"functionReturnParameters":27928,"id":27956,"nodeType":"Return","src":"6912:25:102"}]}},{"expression":{"arguments":[{"id":27960,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27914,"src":"7031:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":27961,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27916,"src":"7045:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27962,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27937,"src":"7061:7:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27963,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27918,"src":"7078:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":27965,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"7359:9:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":27966,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7369:27:102","memberName":"DEFAULT_NORMALIZED_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":29247,"src":"7359:37:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"id":27967,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27931,"src":"7408:6:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":27968,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7415:15:102","memberName":"adoptedDecimals","nodeType":"MemberAccess","referencedDeclaration":29386,"src":"7408:22:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":27969,"name":"_normalizedIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27922,"src":"7442:13:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27970,"name":"_slippage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27920,"src":"7467:9:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27964,"name":"calculateSlippageBoundary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28640,"src":"7322:25:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint8_$_t_uint8_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint8,uint8,uint256,uint256) pure returns (uint256)"}},"id":27971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7322:164:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27959,"name":"_swapAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28131,"src":"7011:10:102","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_address_$","typeString":"function (bytes32,address,address,uint256,uint256) returns (uint256,address)"}},"id":27972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7011:483:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"functionReturnParameters":27928,"id":27973,"nodeType":"Return","src":"6998:496:102"}]},"documentation":{"id":27912,"nodeType":"StructuredDocumentation","src":"5703:691:102","text":" @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\n @dev Will not swap if the asset passed in is the adopted asset\n @param _key the hash of the canonical id and domain\n @param _asset - The address of the local asset to swap into the adopted asset\n @param _amount - The amount of the local asset to swap\n @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\n @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\n by convention\n @return The amount of adopted asset received from swap\n @return The address of asset received post-swap"},"id":27975,"implemented":true,"kind":"function","modifiers":[],"name":"swapFromLocalAssetIfNeeded","nameLocation":"6406:26:102","nodeType":"FunctionDefinition","parameters":{"id":27923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27914,"mutability":"mutable","name":"_key","nameLocation":"6446:4:102","nodeType":"VariableDeclaration","scope":27975,"src":"6438:12:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27913,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6438:7:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":27916,"mutability":"mutable","name":"_asset","nameLocation":"6464:6:102","nodeType":"VariableDeclaration","scope":27975,"src":"6456:14:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27915,"name":"address","nodeType":"ElementaryTypeName","src":"6456:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27918,"mutability":"mutable","name":"_amount","nameLocation":"6484:7:102","nodeType":"VariableDeclaration","scope":27975,"src":"6476:15:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27917,"name":"uint256","nodeType":"ElementaryTypeName","src":"6476:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27920,"mutability":"mutable","name":"_slippage","nameLocation":"6505:9:102","nodeType":"VariableDeclaration","scope":27975,"src":"6497:17:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27919,"name":"uint256","nodeType":"ElementaryTypeName","src":"6497:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27922,"mutability":"mutable","name":"_normalizedIn","nameLocation":"6528:13:102","nodeType":"VariableDeclaration","scope":27975,"src":"6520:21:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27921,"name":"uint256","nodeType":"ElementaryTypeName","src":"6520:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6432:113:102"},"returnParameters":{"id":27928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27925,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27975,"src":"6564:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27924,"name":"uint256","nodeType":"ElementaryTypeName","src":"6564:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27927,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27975,"src":"6573:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27926,"name":"address","nodeType":"ElementaryTypeName","src":"6573:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6563:18:102"},"scope":28696,"src":"6397:1102:102","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":28020,"nodeType":"Block","src":"8211:294:102","statements":[{"assignments":[27993],"declarations":[{"constant":false,"id":27993,"mutability":"mutable","name":"config","nameLocation":"8237:6:102","nodeType":"VariableDeclaration","scope":28020,"src":"8217:26:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig"},"typeName":{"id":27992,"nodeType":"UserDefinedTypeName","pathNode":{"id":27991,"name":"TokenConfig","nameLocations":["8217:11:102"],"nodeType":"IdentifierPath","referencedDeclaration":29395,"src":"8217:11:102"},"referencedDeclaration":29395,"src":"8217:11:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig"}},"visibility":"internal"}],"id":27997,"initialValue":{"arguments":[{"id":27995,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27978,"src":"8256:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":27994,"name":"getConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27701,"src":"8246:9:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_struct$_TokenConfig_$29395_storage_ptr_$","typeString":"function (bytes32) view returns (struct TokenConfig storage pointer)"}},"id":27996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8246:15:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"8217:44:102"},{"assignments":[27999],"declarations":[{"constant":false,"id":27999,"mutability":"mutable","name":"adopted","nameLocation":"8341:7:102","nodeType":"VariableDeclaration","scope":28020,"src":"8333:15:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27998,"name":"address","nodeType":"ElementaryTypeName","src":"8333:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":28002,"initialValue":{"expression":{"id":28000,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27993,"src":"8351:6:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":28001,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8358:7:102","memberName":"adopted","nodeType":"MemberAccess","referencedDeclaration":29384,"src":"8351:14:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8333:32:102"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":28005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28003,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27999,"src":"8375:7:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":28004,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27980,"src":"8386:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8375:17:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28011,"nodeType":"IfStatement","src":"8371:63:102","trueBody":{"id":28010,"nodeType":"Block","src":"8394:40:102","statements":[{"expression":{"components":[{"id":28006,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27982,"src":"8410:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28007,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27999,"src":"8419:7:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":28008,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8409:18:102","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"functionReturnParameters":27990,"id":28009,"nodeType":"Return","src":"8402:25:102"}]}},{"expression":{"arguments":[{"id":28013,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27978,"src":"8461:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":28014,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27980,"src":"8467:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28015,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27999,"src":"8475:7:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28016,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27982,"src":"8484:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28017,"name":"_maxIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27984,"src":"8493:6:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28012,"name":"_swapAssetOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28253,"src":"8447:13:102","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_address_$","typeString":"function (bytes32,address,address,uint256,uint256) returns (uint256,address)"}},"id":28018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8447:53:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"functionReturnParameters":27990,"id":28019,"nodeType":"Return","src":"8440:60:102"}]},"documentation":{"id":27976,"nodeType":"StructuredDocumentation","src":"7503:539:102","text":" @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\n @dev Will not swap if the asset passed in is the adopted asset\n @param _key the hash of the canonical id and domain\n @param _asset - The address of the local asset to swap into the adopted asset\n @param _amount - The exact amount to receive out of the swap\n @param _maxIn - The most you will supply to the swap\n @return The amount of local asset put into  swap\n @return The address of asset received post-swap"},"id":28021,"implemented":true,"kind":"function","modifiers":[],"name":"swapFromLocalAssetIfNeededForExactOut","nameLocation":"8054:37:102","nodeType":"FunctionDefinition","parameters":{"id":27985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27978,"mutability":"mutable","name":"_key","nameLocation":"8105:4:102","nodeType":"VariableDeclaration","scope":28021,"src":"8097:12:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27977,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8097:7:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":27980,"mutability":"mutable","name":"_asset","nameLocation":"8123:6:102","nodeType":"VariableDeclaration","scope":28021,"src":"8115:14:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27979,"name":"address","nodeType":"ElementaryTypeName","src":"8115:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27982,"mutability":"mutable","name":"_amount","nameLocation":"8143:7:102","nodeType":"VariableDeclaration","scope":28021,"src":"8135:15:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27981,"name":"uint256","nodeType":"ElementaryTypeName","src":"8135:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27984,"mutability":"mutable","name":"_maxIn","nameLocation":"8164:6:102","nodeType":"VariableDeclaration","scope":28021,"src":"8156:14:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27983,"name":"uint256","nodeType":"ElementaryTypeName","src":"8156:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8091:83:102"},"returnParameters":{"id":27990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27987,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28021,"src":"8193:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27986,"name":"uint256","nodeType":"ElementaryTypeName","src":"8193:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27989,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28021,"src":"8202:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27988,"name":"address","nodeType":"ElementaryTypeName","src":"8202:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8192:18:102"},"scope":28696,"src":"8045:460:102","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":28130,"nodeType":"Block","src":"9228:1032:102","statements":[{"assignments":[28041],"declarations":[{"constant":false,"id":28041,"mutability":"mutable","name":"s","nameLocation":"9253:1:102","nodeType":"VariableDeclaration","scope":28130,"src":"9234:20:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"},"typeName":{"id":28040,"nodeType":"UserDefinedTypeName","pathNode":{"id":28039,"name":"AppStorage","nameLocations":["9234:10:102"],"nodeType":"IdentifierPath","referencedDeclaration":29536,"src":"9234:10:102"},"referencedDeclaration":29536,"src":"9234:10:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"}},"visibility":"internal"}],"id":28045,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28042,"name":"LibConnextStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29545,"src":"9257:17:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibConnextStorage_$29545_$","typeString":"type(library LibConnextStorage)"}},"id":28043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9275:14:102","memberName":"connextStorage","nodeType":"MemberAccess","referencedDeclaration":29544,"src":"9257:32:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_AppStorage_$29536_storage_ptr_$","typeString":"function () pure returns (struct AppStorage storage pointer)"}},"id":28044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9257:34:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"9234:57:102"},{"assignments":[28050],"declarations":[{"constant":false,"id":28050,"mutability":"mutable","name":"ipool","nameLocation":"9367:5:102","nodeType":"VariableDeclaration","scope":28130,"src":"9344:28:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":28049,"nodeType":"UserDefinedTypeName","pathNode":{"id":28048,"name":"SwapUtils.Swap","nameLocations":["9344:9:102","9354:4:102"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"9344:14:102"},"referencedDeclaration":30786,"src":"9344:14:102","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"}],"id":28055,"initialValue":{"baseExpression":{"expression":{"id":28051,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28041,"src":"9375:1:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}},"id":28052,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9377:12:102","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"9375:14:102","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":28054,"indexExpression":{"id":28053,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28024,"src":"9390:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9375:20:102","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"9344:51:102"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28056,"name":"ipool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28050,"src":"9406:5:102","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":28057,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9412:6:102","memberName":"exists","nodeType":"MemberAccess","referencedDeclaration":34243,"src":"9406:12:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_bool_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (bool)"}},"id":28058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9406:14:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":28128,"nodeType":"Block","src":"9709:547:102","statements":[{"assignments":[28078],"declarations":[{"constant":false,"id":28078,"mutability":"mutable","name":"pool","nameLocation":"9784:4:102","nodeType":"VariableDeclaration","scope":28128,"src":"9772:16:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"},"typeName":{"id":28077,"nodeType":"UserDefinedTypeName","pathNode":{"id":28076,"name":"IStableSwap","nameLocations":["9772:11:102"],"nodeType":"IdentifierPath","referencedDeclaration":27329,"src":"9772:11:102"},"referencedDeclaration":27329,"src":"9772:11:102","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}},"visibility":"internal"}],"id":28085,"initialValue":{"arguments":[{"expression":{"arguments":[{"id":28081,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28024,"src":"9813:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":28080,"name":"getConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27701,"src":"9803:9:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_struct$_TokenConfig_$29395_storage_ptr_$","typeString":"function (bytes32) view returns (struct TokenConfig storage pointer)"}},"id":28082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9803:15:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":28083,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9819:27:102","memberName":"adoptedToLocalExternalPools","nodeType":"MemberAccess","referencedDeclaration":29388,"src":"9803:43:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28079,"name":"IStableSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27329,"src":"9791:11:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableSwap_$27329_$","typeString":"type(contract IStableSwap)"}},"id":28084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9791:56:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}},"nodeType":"VariableDeclarationStatement","src":"9772:75:102"},{"assignments":[28088],"declarations":[{"constant":false,"id":28088,"mutability":"mutable","name":"assetIn","nameLocation":"9871:7:102","nodeType":"VariableDeclaration","scope":28128,"src":"9856:22:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"},"typeName":{"id":28087,"nodeType":"UserDefinedTypeName","pathNode":{"id":28086,"name":"IERC20Metadata","nameLocations":["9856:14:102"],"nodeType":"IdentifierPath","referencedDeclaration":10837,"src":"9856:14:102"},"referencedDeclaration":10837,"src":"9856:14:102","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},"visibility":"internal"}],"id":28092,"initialValue":{"arguments":[{"id":28090,"name":"_assetIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28026,"src":"9896:8:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28089,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10837,"src":"9881:14:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$10837_$","typeString":"type(contract IERC20Metadata)"}},"id":28091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9881:24:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},"nodeType":"VariableDeclarationStatement","src":"9856:49:102"},{"expression":{"arguments":[{"arguments":[{"id":28098,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28078,"src":"9942:4:102","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}],"id":28097,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9934:7:102","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28096,"name":"address","nodeType":"ElementaryTypeName","src":"9934:7:102","typeDescriptions":{}}},"id":28099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9934:13:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":28100,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9949:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":28093,"name":"assetIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28088,"src":"9914:7:102","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},"id":28095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9922:11:102","memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":10975,"src":"9914:19:102","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10812_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$10812_$","typeString":"function (contract IERC20,address,uint256)"}},"id":28101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9914:37:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28102,"nodeType":"ExpressionStatement","src":"9914:37:102"},{"expression":{"arguments":[{"arguments":[{"id":28108,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28078,"src":"9997:4:102","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}],"id":28107,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9989:7:102","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28106,"name":"address","nodeType":"ElementaryTypeName","src":"9989:7:102","typeDescriptions":{}}},"id":28109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9989:13:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28110,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28030,"src":"10004:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28103,"name":"assetIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28088,"src":"9959:7:102","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},"id":28105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9967:21:102","memberName":"safeIncreaseAllowance","nodeType":"MemberAccess","referencedDeclaration":11011,"src":"9959:29:102","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10812_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$10812_$","typeString":"function (contract IERC20,address,uint256)"}},"id":28111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9959:53:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28112,"nodeType":"ExpressionStatement","src":"9959:53:102"},{"expression":{"components":[{"arguments":[{"id":28115,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28030,"src":"10128:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28116,"name":"_assetIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28026,"src":"10137:8:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28117,"name":"_assetOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28028,"src":"10147:9:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28118,"name":"_minOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28032,"src":"10158:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":28119,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"10167:5:102","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":28120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10173:9:102","memberName":"timestamp","nodeType":"MemberAccess","src":"10167:15:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":28121,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"10185:9:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":28122,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10195:26:102","memberName":"DEFAULT_DEADLINE_EXTENSION","nodeType":"MemberAccess","referencedDeclaration":29255,"src":"10185:36:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10167:54:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28113,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28078,"src":"10113:4:102","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}},"id":28114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10118:9:102","memberName":"swapExact","nodeType":"MemberAccess","referencedDeclaration":27138,"src":"10113:14:102","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,address,address,uint256,uint256) payable external returns (uint256)"}},"id":28124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10113:109:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28125,"name":"_assetOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28028,"src":"10232:9:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":28126,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10103:146:102","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"functionReturnParameters":28038,"id":28127,"nodeType":"Return","src":"10096:153:102"}]},"id":28129,"nodeType":"IfStatement","src":"9402:854:102","trueBody":{"id":28075,"nodeType":"Block","src":"9422:281:102","statements":[{"expression":{"components":[{"arguments":[{"arguments":[{"id":28062,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28024,"src":"9546:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":28063,"name":"_assetIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28026,"src":"9552:8:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":28061,"name":"getTokenIndexFromStableSwapPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27854,"src":"9514:31:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_uint8_$","typeString":"function (bytes32,address) view returns (uint8)"}},"id":28064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9514:47:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[{"id":28066,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28024,"src":"9605:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":28067,"name":"_assetOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28028,"src":"9611:9:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":28065,"name":"getTokenIndexFromStableSwapPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27854,"src":"9573:31:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_uint8_$","typeString":"function (bytes32,address) view returns (uint8)"}},"id":28068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9573:48:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":28069,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28030,"src":"9633:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28070,"name":"_minOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28032,"src":"9652:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28059,"name":"ipool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28050,"src":"9484:5:102","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":28060,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9490:12:102","memberName":"swapInternal","nodeType":"MemberAccess","referencedDeclaration":32875,"src":"9484:18:102","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Swap_$30786_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint8,uint8,uint256,uint256) returns (uint256)"}},"id":28071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9484:185:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28072,"name":"_assetOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28028,"src":"9679:9:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":28073,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9474:222:102","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"functionReturnParameters":28038,"id":28074,"nodeType":"Return","src":"9467:229:102"}]}}]},"documentation":{"id":28022,"nodeType":"StructuredDocumentation","src":"8509:551:102","text":" @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\n @dev Will not swap if the asset passed in is the adopted asset\n @param _key - The hash of canonical id and domain.\n @param _assetIn - The address of the from asset\n @param _assetOut - The address of the to asset\n @param _amount - The amount of the local asset to swap\n @param _minOut - The minimum amount of `_assetOut` the user will accept\n @return The amount of asset received\n @return The address of asset received"},"id":28131,"implemented":true,"kind":"function","modifiers":[],"name":"_swapAsset","nameLocation":"9072:10:102","nodeType":"FunctionDefinition","parameters":{"id":28033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28024,"mutability":"mutable","name":"_key","nameLocation":"9096:4:102","nodeType":"VariableDeclaration","scope":28131,"src":"9088:12:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28023,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9088:7:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":28026,"mutability":"mutable","name":"_assetIn","nameLocation":"9114:8:102","nodeType":"VariableDeclaration","scope":28131,"src":"9106:16:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28025,"name":"address","nodeType":"ElementaryTypeName","src":"9106:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28028,"mutability":"mutable","name":"_assetOut","nameLocation":"9136:9:102","nodeType":"VariableDeclaration","scope":28131,"src":"9128:17:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28027,"name":"address","nodeType":"ElementaryTypeName","src":"9128:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28030,"mutability":"mutable","name":"_amount","nameLocation":"9159:7:102","nodeType":"VariableDeclaration","scope":28131,"src":"9151:15:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28029,"name":"uint256","nodeType":"ElementaryTypeName","src":"9151:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28032,"mutability":"mutable","name":"_minOut","nameLocation":"9180:7:102","nodeType":"VariableDeclaration","scope":28131,"src":"9172:15:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28031,"name":"uint256","nodeType":"ElementaryTypeName","src":"9172:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9082:109:102"},"returnParameters":{"id":28038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28035,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28131,"src":"9210:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28034,"name":"uint256","nodeType":"ElementaryTypeName","src":"9210:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28037,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28131,"src":"9219:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28036,"name":"address","nodeType":"ElementaryTypeName","src":"9219:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9209:18:102"},"scope":28696,"src":"9063:1197:102","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":28252,"nodeType":"Block","src":"10988:1956:102","statements":[{"assignments":[28151],"declarations":[{"constant":false,"id":28151,"mutability":"mutable","name":"s","nameLocation":"11013:1:102","nodeType":"VariableDeclaration","scope":28252,"src":"10994:20:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"},"typeName":{"id":28150,"nodeType":"UserDefinedTypeName","pathNode":{"id":28149,"name":"AppStorage","nameLocations":["10994:10:102"],"nodeType":"IdentifierPath","referencedDeclaration":29536,"src":"10994:10:102"},"referencedDeclaration":29536,"src":"10994:10:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"}},"visibility":"internal"}],"id":28155,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28152,"name":"LibConnextStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29545,"src":"11017:17:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibConnextStorage_$29545_$","typeString":"type(library LibConnextStorage)"}},"id":28153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11035:14:102","memberName":"connextStorage","nodeType":"MemberAccess","referencedDeclaration":29544,"src":"11017:32:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_AppStorage_$29536_storage_ptr_$","typeString":"function () pure returns (struct AppStorage storage pointer)"}},"id":28154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11017:34:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"10994:57:102"},{"assignments":[28160],"declarations":[{"constant":false,"id":28160,"mutability":"mutable","name":"ipool","nameLocation":"11207:5:102","nodeType":"VariableDeclaration","scope":28252,"src":"11184:28:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":28159,"nodeType":"UserDefinedTypeName","pathNode":{"id":28158,"name":"SwapUtils.Swap","nameLocations":["11184:9:102","11194:4:102"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"11184:14:102"},"referencedDeclaration":30786,"src":"11184:14:102","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"}],"id":28165,"initialValue":{"baseExpression":{"expression":{"id":28161,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28151,"src":"11215:1:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}},"id":28162,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11217:12:102","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"11215:14:102","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":28164,"indexExpression":{"id":28163,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28134,"src":"11230:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11215:20:102","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"11184:51:102"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28166,"name":"ipool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28160,"src":"11396:5:102","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":28167,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11402:6:102","memberName":"exists","nodeType":"MemberAccess","referencedDeclaration":34243,"src":"11396:12:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_bool_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (bool)"}},"id":28168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11396:14:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":28250,"nodeType":"Block","src":"11704:1236:102","statements":[{"assignments":[28188],"declarations":[{"constant":false,"id":28188,"mutability":"mutable","name":"pool","nameLocation":"11863:4:102","nodeType":"VariableDeclaration","scope":28250,"src":"11851:16:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"},"typeName":{"id":28187,"nodeType":"UserDefinedTypeName","pathNode":{"id":28186,"name":"IStableSwap","nameLocations":["11851:11:102"],"nodeType":"IdentifierPath","referencedDeclaration":27329,"src":"11851:11:102"},"referencedDeclaration":27329,"src":"11851:11:102","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}},"visibility":"internal"}],"id":28195,"initialValue":{"arguments":[{"expression":{"arguments":[{"id":28191,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28134,"src":"11892:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":28190,"name":"getConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27701,"src":"11882:9:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_struct$_TokenConfig_$29395_storage_ptr_$","typeString":"function (bytes32) view returns (struct TokenConfig storage pointer)"}},"id":28192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11882:15:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":28193,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11898:27:102","memberName":"adoptedToLocalExternalPools","nodeType":"MemberAccess","referencedDeclaration":29388,"src":"11882:43:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28189,"name":"IStableSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27329,"src":"11870:11:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableSwap_$27329_$","typeString":"type(contract IStableSwap)"}},"id":28194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11870:56:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}},"nodeType":"VariableDeclarationStatement","src":"11851:75:102"},{"assignments":[28197],"declarations":[{"constant":false,"id":28197,"mutability":"mutable","name":"poolAddress","nameLocation":"11942:11:102","nodeType":"VariableDeclaration","scope":28250,"src":"11934:19:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28196,"name":"address","nodeType":"ElementaryTypeName","src":"11934:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":28202,"initialValue":{"arguments":[{"id":28200,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28188,"src":"11964:4:102","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}],"id":28199,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11956:7:102","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28198,"name":"address","nodeType":"ElementaryTypeName","src":"11956:7:102","typeDescriptions":{}}},"id":28201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11956:13:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"11934:35:102"},{"assignments":[28205],"declarations":[{"constant":false,"id":28205,"mutability":"mutable","name":"assetIn","nameLocation":"12512:7:102","nodeType":"VariableDeclaration","scope":28250,"src":"12497:22:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"},"typeName":{"id":28204,"nodeType":"UserDefinedTypeName","pathNode":{"id":28203,"name":"IERC20Metadata","nameLocations":["12497:14:102"],"nodeType":"IdentifierPath","referencedDeclaration":10837,"src":"12497:14:102"},"referencedDeclaration":10837,"src":"12497:14:102","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},"visibility":"internal"}],"id":28209,"initialValue":{"arguments":[{"id":28207,"name":"_assetIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28136,"src":"12537:8:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28206,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10837,"src":"12522:14:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$10837_$","typeString":"type(contract IERC20Metadata)"}},"id":28208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12522:24:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},"nodeType":"VariableDeclarationStatement","src":"12497:49:102"},{"expression":{"arguments":[{"id":28213,"name":"poolAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28197,"src":"12575:11:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":28214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12588:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":28210,"name":"assetIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28205,"src":"12555:7:102","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},"id":28212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12563:11:102","memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":10975,"src":"12555:19:102","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10812_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$10812_$","typeString":"function (contract IERC20,address,uint256)"}},"id":28215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12555:35:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28216,"nodeType":"ExpressionStatement","src":"12555:35:102"},{"expression":{"arguments":[{"id":28220,"name":"poolAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28197,"src":"12628:11:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28221,"name":"_maxIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28142,"src":"12641:6:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28217,"name":"assetIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28205,"src":"12598:7:102","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},"id":28219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12606:21:102","memberName":"safeIncreaseAllowance","nodeType":"MemberAccess","referencedDeclaration":11011,"src":"12598:29:102","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10812_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$10812_$","typeString":"function (contract IERC20,address,uint256)"}},"id":28222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12598:50:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28223,"nodeType":"ExpressionStatement","src":"12598:50:102"},{"assignments":[28225],"declarations":[{"constant":false,"id":28225,"mutability":"mutable","name":"out","nameLocation":"12665:3:102","nodeType":"VariableDeclaration","scope":28250,"src":"12657:11:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28224,"name":"uint256","nodeType":"ElementaryTypeName","src":"12657:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28238,"initialValue":{"arguments":[{"id":28228,"name":"_amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28140,"src":"12698:10:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28229,"name":"_assetIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28136,"src":"12718:8:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28230,"name":"_assetOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28138,"src":"12736:9:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28231,"name":"_maxIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28142,"src":"12755:6:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":28232,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"12771:5:102","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":28233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12777:9:102","memberName":"timestamp","nodeType":"MemberAccess","src":"12771:15:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":28234,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"12789:9:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":28235,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12799:26:102","memberName":"DEFAULT_DEADLINE_EXTENSION","nodeType":"MemberAccess","referencedDeclaration":29255,"src":"12789:36:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12771:54:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28226,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28188,"src":"12671:4:102","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}},"id":28227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12676:12:102","memberName":"swapExactOut","nodeType":"MemberAccess","referencedDeclaration":27153,"src":"12671:17:102","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,address,address,uint256,uint256) payable external returns (uint256)"}},"id":28237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12671:162:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12657:176:102"},{"expression":{"arguments":[{"id":28242,"name":"poolAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28197,"src":"12887:11:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":28243,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12900:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":28239,"name":"assetIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28205,"src":"12867:7:102","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$10837","typeString":"contract IERC20Metadata"}},"id":28241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12875:11:102","memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":10975,"src":"12867:19:102","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10812_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$10812_$","typeString":"function (contract IERC20,address,uint256)"}},"id":28244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12867:35:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28245,"nodeType":"ExpressionStatement","src":"12867:35:102"},{"expression":{"components":[{"id":28246,"name":"out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28225,"src":"12918:3:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28247,"name":"_assetOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28138,"src":"12923:9:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":28248,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12917:16:102","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"functionReturnParameters":28148,"id":28249,"nodeType":"Return","src":"12910:23:102"}]},"id":28251,"nodeType":"IfStatement","src":"11392:1548:102","trueBody":{"id":28185,"nodeType":"Block","src":"11412:286:102","statements":[{"expression":{"components":[{"arguments":[{"arguments":[{"id":28172,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28134,"src":"11539:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":28173,"name":"_assetIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28136,"src":"11545:8:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":28171,"name":"getTokenIndexFromStableSwapPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27854,"src":"11507:31:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_uint8_$","typeString":"function (bytes32,address) view returns (uint8)"}},"id":28174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11507:47:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[{"id":28176,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28134,"src":"11598:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":28177,"name":"_assetOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28138,"src":"11604:9:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":28175,"name":"getTokenIndexFromStableSwapPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27854,"src":"11566:31:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_uint8_$","typeString":"function (bytes32,address) view returns (uint8)"}},"id":28178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11566:48:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":28179,"name":"_amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28140,"src":"11626:10:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28180,"name":"_maxIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28142,"src":"11648:6:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28169,"name":"ipool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28160,"src":"11474:5:102","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":28170,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11480:15:102","memberName":"swapInternalOut","nodeType":"MemberAccess","referencedDeclaration":33016,"src":"11474:21:102","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Swap_$30786_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint8,uint8,uint256,uint256) returns (uint256)"}},"id":28181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11474:190:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28182,"name":"_assetOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28138,"src":"11674:9:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":28183,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11464:227:102","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"functionReturnParameters":28148,"id":28184,"nodeType":"Return","src":"11457:234:102"}]}}]},"documentation":{"id":28132,"nodeType":"StructuredDocumentation","src":"10264:551:102","text":" @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\n @param _key - The hash of the canonical id and domain.\n @param _assetIn - The address of the from asset.\n @param _assetOut - The address of the to asset.\n @param _amountOut - The amount of the _assetOut to swap.\n @param _maxIn - The most you will supply to the swap.\n @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\n too high).\n @return assetOut The address of asset received."},"id":28253,"implemented":true,"kind":"function","modifiers":[],"name":"_swapAssetOut","nameLocation":"10827:13:102","nodeType":"FunctionDefinition","parameters":{"id":28143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28134,"mutability":"mutable","name":"_key","nameLocation":"10854:4:102","nodeType":"VariableDeclaration","scope":28253,"src":"10846:12:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28133,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10846:7:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":28136,"mutability":"mutable","name":"_assetIn","nameLocation":"10872:8:102","nodeType":"VariableDeclaration","scope":28253,"src":"10864:16:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28135,"name":"address","nodeType":"ElementaryTypeName","src":"10864:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28138,"mutability":"mutable","name":"_assetOut","nameLocation":"10894:9:102","nodeType":"VariableDeclaration","scope":28253,"src":"10886:17:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28137,"name":"address","nodeType":"ElementaryTypeName","src":"10886:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28140,"mutability":"mutable","name":"_amountOut","nameLocation":"10917:10:102","nodeType":"VariableDeclaration","scope":28253,"src":"10909:18:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28139,"name":"uint256","nodeType":"ElementaryTypeName","src":"10909:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28142,"mutability":"mutable","name":"_maxIn","nameLocation":"10941:6:102","nodeType":"VariableDeclaration","scope":28253,"src":"10933:14:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28141,"name":"uint256","nodeType":"ElementaryTypeName","src":"10933:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10840:111:102"},"returnParameters":{"id":28148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28145,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28253,"src":"10970:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28144,"name":"uint256","nodeType":"ElementaryTypeName","src":"10970:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28147,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28253,"src":"10979:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28146,"name":"address","nodeType":"ElementaryTypeName","src":"10979:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10969:18:102"},"scope":28696,"src":"10818:2126:102","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":28351,"nodeType":"Block","src":"13640:1002:102","statements":[{"assignments":[28269],"declarations":[{"constant":false,"id":28269,"mutability":"mutable","name":"s","nameLocation":"13665:1:102","nodeType":"VariableDeclaration","scope":28351,"src":"13646:20:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"},"typeName":{"id":28268,"nodeType":"UserDefinedTypeName","pathNode":{"id":28267,"name":"AppStorage","nameLocations":["13646:10:102"],"nodeType":"IdentifierPath","referencedDeclaration":29536,"src":"13646:10:102"},"referencedDeclaration":29536,"src":"13646:10:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"}},"visibility":"internal"}],"id":28273,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28270,"name":"LibConnextStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29545,"src":"13669:17:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibConnextStorage_$29545_$","typeString":"type(library LibConnextStorage)"}},"id":28271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13687:14:102","memberName":"connextStorage","nodeType":"MemberAccess","referencedDeclaration":29544,"src":"13669:32:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_AppStorage_$29536_storage_ptr_$","typeString":"function () pure returns (struct AppStorage storage pointer)"}},"id":28272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13669:34:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"13646:57:102"},{"assignments":[28276],"declarations":[{"constant":false,"id":28276,"mutability":"mutable","name":"config","nameLocation":"13795:6:102","nodeType":"VariableDeclaration","scope":28351,"src":"13775:26:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig"},"typeName":{"id":28275,"nodeType":"UserDefinedTypeName","pathNode":{"id":28274,"name":"TokenConfig","nameLocations":["13775:11:102"],"nodeType":"IdentifierPath","referencedDeclaration":29395,"src":"13775:11:102"},"referencedDeclaration":29395,"src":"13775:11:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig"}},"visibility":"internal"}],"id":28280,"initialValue":{"arguments":[{"id":28278,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"13814:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":28277,"name":"getConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27701,"src":"13804:9:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_struct$_TokenConfig_$29395_storage_ptr_$","typeString":"function (bytes32) view returns (struct TokenConfig storage pointer)"}},"id":28279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13804:15:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"13775:44:102"},{"assignments":[28282],"declarations":[{"constant":false,"id":28282,"mutability":"mutable","name":"adopted","nameLocation":"13833:7:102","nodeType":"VariableDeclaration","scope":28351,"src":"13825:15:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28281,"name":"address","nodeType":"ElementaryTypeName","src":"13825:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":28285,"initialValue":{"expression":{"id":28283,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28276,"src":"13843:6:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":28284,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13850:7:102","memberName":"adopted","nodeType":"MemberAccess","referencedDeclaration":29384,"src":"13843:14:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"13825:32:102"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":28288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28286,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28282,"src":"13867:7:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":28287,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28258,"src":"13878:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13867:17:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28294,"nodeType":"IfStatement","src":"13863:63:102","trueBody":{"id":28293,"nodeType":"Block","src":"13886:40:102","statements":[{"expression":{"components":[{"id":28289,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28260,"src":"13902:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28290,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28282,"src":"13911:7:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":28291,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13901:18:102","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"functionReturnParameters":28266,"id":28292,"nodeType":"Return","src":"13894:25:102"}]}},{"assignments":[28299],"declarations":[{"constant":false,"id":28299,"mutability":"mutable","name":"ipool","nameLocation":"13955:5:102","nodeType":"VariableDeclaration","scope":28351,"src":"13932:28:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":28298,"nodeType":"UserDefinedTypeName","pathNode":{"id":28297,"name":"SwapUtils.Swap","nameLocations":["13932:9:102","13942:4:102"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"13932:14:102"},"referencedDeclaration":30786,"src":"13932:14:102","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"}],"id":28304,"initialValue":{"baseExpression":{"expression":{"id":28300,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28269,"src":"13963:1:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}},"id":28301,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13965:12:102","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"13963:14:102","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":28303,"indexExpression":{"id":28302,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"13978:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13963:20:102","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"13932:51:102"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28305,"name":"ipool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28299,"src":"14048:5:102","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":28306,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14054:6:102","memberName":"exists","nodeType":"MemberAccess","referencedDeclaration":34243,"src":"14048:12:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_bool_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (bool)"}},"id":28307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14048:14:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":28349,"nodeType":"Block","src":"14354:284:102","statements":[{"assignments":[28334],"declarations":[{"constant":false,"id":28334,"mutability":"mutable","name":"pool","nameLocation":"14431:4:102","nodeType":"VariableDeclaration","scope":28349,"src":"14419:16:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"},"typeName":{"id":28333,"nodeType":"UserDefinedTypeName","pathNode":{"id":28332,"name":"IStableSwap","nameLocations":["14419:11:102"],"nodeType":"IdentifierPath","referencedDeclaration":27329,"src":"14419:11:102"},"referencedDeclaration":27329,"src":"14419:11:102","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}},"visibility":"internal"}],"id":28339,"initialValue":{"arguments":[{"expression":{"id":28336,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28276,"src":"14450:6:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":28337,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14457:27:102","memberName":"adoptedToLocalExternalPools","nodeType":"MemberAccess","referencedDeclaration":29388,"src":"14450:34:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28335,"name":"IStableSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27329,"src":"14438:11:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableSwap_$27329_$","typeString":"type(contract IStableSwap)"}},"id":28338,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14438:47:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}},"nodeType":"VariableDeclarationStatement","src":"14419:66:102"},{"expression":{"components":[{"arguments":[{"id":28342,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28258,"src":"14596:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28343,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28282,"src":"14604:7:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28344,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28260,"src":"14613:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28340,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28334,"src":"14566:4:102","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}},"id":28341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14571:24:102","memberName":"calculateSwapFromAddress","nodeType":"MemberAccess","referencedDeclaration":27218,"src":"14566:29:102","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,address,uint256) view external returns (uint256)"}},"id":28345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14566:55:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28346,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28282,"src":"14623:7:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":28347,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14565:66:102","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"functionReturnParameters":28266,"id":28348,"nodeType":"Return","src":"14558:73:102"}]},"id":28350,"nodeType":"IfStatement","src":"14044:594:102","trueBody":{"id":28331,"nodeType":"Block","src":"14064:284:102","statements":[{"assignments":[28309],"declarations":[{"constant":false,"id":28309,"mutability":"mutable","name":"tokenIndexIn","nameLocation":"14122:12:102","nodeType":"VariableDeclaration","scope":28331,"src":"14116:18:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":28308,"name":"uint8","nodeType":"ElementaryTypeName","src":"14116:5:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":28314,"initialValue":{"arguments":[{"id":28311,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"14169:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":28312,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28258,"src":"14175:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":28310,"name":"getTokenIndexFromStableSwapPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27854,"src":"14137:31:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_uint8_$","typeString":"function (bytes32,address) view returns (uint8)"}},"id":28313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14137:45:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"14116:66:102"},{"assignments":[28316],"declarations":[{"constant":false,"id":28316,"mutability":"mutable","name":"tokenIndexOut","nameLocation":"14196:13:102","nodeType":"VariableDeclaration","scope":28331,"src":"14190:19:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":28315,"name":"uint8","nodeType":"ElementaryTypeName","src":"14190:5:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":28321,"initialValue":{"arguments":[{"id":28318,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"14244:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":28319,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28282,"src":"14250:7:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":28317,"name":"getTokenIndexFromStableSwapPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27854,"src":"14212:31:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_uint8_$","typeString":"function (bytes32,address) view returns (uint8)"}},"id":28320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14212:46:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"14190:68:102"},{"expression":{"components":[{"arguments":[{"id":28324,"name":"tokenIndexIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28309,"src":"14294:12:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":28325,"name":"tokenIndexOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28316,"src":"14308:13:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":28326,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28260,"src":"14323:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28322,"name":"ipool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28299,"src":"14274:5:102","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":28323,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14280:13:102","memberName":"calculateSwap","nodeType":"MemberAccess","referencedDeclaration":31829,"src":"14274:19:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint8,uint8,uint256) view returns (uint256)"}},"id":28327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14274:57:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28328,"name":"adopted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28282,"src":"14333:7:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":28329,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14273:68:102","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"functionReturnParameters":28266,"id":28330,"nodeType":"Return","src":"14266:75:102"}]}}]},"documentation":{"id":28254,"nodeType":"StructuredDocumentation","src":"12948:540:102","text":" @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\n using the stored stable swap\n @dev Will not use the stored stable swap if the asset passed in is the local asset\n @param _key - The hash of the canonical id and domain\n @param _asset - The address of the local asset to swap into the local asset\n @param _amount - The amount of the local asset to swap\n @return The amount of local asset received from swap\n @return The address of asset received post-swap"},"id":28352,"implemented":true,"kind":"function","modifiers":[],"name":"calculateSwapFromLocalAssetIfNeeded","nameLocation":"13500:35:102","nodeType":"FunctionDefinition","parameters":{"id":28261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28256,"mutability":"mutable","name":"_key","nameLocation":"13549:4:102","nodeType":"VariableDeclaration","scope":28352,"src":"13541:12:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28255,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13541:7:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":28258,"mutability":"mutable","name":"_asset","nameLocation":"13567:6:102","nodeType":"VariableDeclaration","scope":28352,"src":"13559:14:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28257,"name":"address","nodeType":"ElementaryTypeName","src":"13559:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28260,"mutability":"mutable","name":"_amount","nameLocation":"13587:7:102","nodeType":"VariableDeclaration","scope":28352,"src":"13579:15:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28259,"name":"uint256","nodeType":"ElementaryTypeName","src":"13579:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13535:63:102"},"returnParameters":{"id":28266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28263,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28352,"src":"13622:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28262,"name":"uint256","nodeType":"ElementaryTypeName","src":"13622:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28265,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28352,"src":"13631:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28264,"name":"address","nodeType":"ElementaryTypeName","src":"13631:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13621:18:102"},"scope":28696,"src":"13491:1151:102","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":28442,"nodeType":"Block","src":"15285:780:102","statements":[{"assignments":[28370],"declarations":[{"constant":false,"id":28370,"mutability":"mutable","name":"s","nameLocation":"15310:1:102","nodeType":"VariableDeclaration","scope":28442,"src":"15291:20:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"},"typeName":{"id":28369,"nodeType":"UserDefinedTypeName","pathNode":{"id":28368,"name":"AppStorage","nameLocations":["15291:10:102"],"nodeType":"IdentifierPath","referencedDeclaration":29536,"src":"15291:10:102"},"referencedDeclaration":29536,"src":"15291:10:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"}},"visibility":"internal"}],"id":28374,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28371,"name":"LibConnextStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29545,"src":"15314:17:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibConnextStorage_$29545_$","typeString":"type(library LibConnextStorage)"}},"id":28372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15332:14:102","memberName":"connextStorage","nodeType":"MemberAccess","referencedDeclaration":29544,"src":"15314:32:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_AppStorage_$29536_storage_ptr_$","typeString":"function () pure returns (struct AppStorage storage pointer)"}},"id":28373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15314:34:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"15291:57:102"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":28377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28375,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28357,"src":"15414:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":28376,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28359,"src":"15424:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15414:16:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28383,"nodeType":"IfStatement","src":"15410:61:102","trueBody":{"id":28382,"nodeType":"Block","src":"15432:39:102","statements":[{"expression":{"components":[{"id":28378,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28361,"src":"15448:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28379,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28359,"src":"15457:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":28380,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15447:17:102","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"functionReturnParameters":28367,"id":28381,"nodeType":"Return","src":"15440:24:102"}]}},{"assignments":[28388],"declarations":[{"constant":false,"id":28388,"mutability":"mutable","name":"ipool","nameLocation":"15500:5:102","nodeType":"VariableDeclaration","scope":28442,"src":"15477:28:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":28387,"nodeType":"UserDefinedTypeName","pathNode":{"id":28386,"name":"SwapUtils.Swap","nameLocations":["15477:9:102","15487:4:102"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"15477:14:102"},"referencedDeclaration":30786,"src":"15477:14:102","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"}],"id":28393,"initialValue":{"baseExpression":{"expression":{"id":28389,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28370,"src":"15508:1:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}},"id":28390,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15510:12:102","memberName":"swapStorages","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"15508:14:102","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap storage ref)"}},"id":28392,"indexExpression":{"id":28391,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28355,"src":"15523:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15508:20:102","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage","typeString":"struct SwapUtils.Swap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"15477:51:102"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28394,"name":"ipool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28388,"src":"15593:5:102","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":28395,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15599:6:102","memberName":"exists","nodeType":"MemberAccess","referencedDeclaration":34243,"src":"15593:12:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_bool_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (bool)"}},"id":28396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15593:14:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":28440,"nodeType":"Block","src":"15891:170:102","statements":[{"assignments":[28423],"declarations":[{"constant":false,"id":28423,"mutability":"mutable","name":"pool","nameLocation":"15911:4:102","nodeType":"VariableDeclaration","scope":28440,"src":"15899:16:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"},"typeName":{"id":28422,"nodeType":"UserDefinedTypeName","pathNode":{"id":28421,"name":"IStableSwap","nameLocations":["15899:11:102"],"nodeType":"IdentifierPath","referencedDeclaration":27329,"src":"15899:11:102"},"referencedDeclaration":27329,"src":"15899:11:102","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}},"visibility":"internal"}],"id":28430,"initialValue":{"arguments":[{"expression":{"arguments":[{"id":28426,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28355,"src":"15940:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":28425,"name":"getConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27701,"src":"15930:9:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_struct$_TokenConfig_$29395_storage_ptr_$","typeString":"function (bytes32) view returns (struct TokenConfig storage pointer)"}},"id":28427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15930:15:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":28428,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15946:27:102","memberName":"adoptedToLocalExternalPools","nodeType":"MemberAccess","referencedDeclaration":29388,"src":"15930:43:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":28424,"name":"IStableSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27329,"src":"15918:11:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableSwap_$27329_$","typeString":"type(contract IStableSwap)"}},"id":28429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15918:56:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}},"nodeType":"VariableDeclarationStatement","src":"15899:75:102"},{"expression":{"components":[{"arguments":[{"id":28433,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28357,"src":"16021:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28434,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28359,"src":"16029:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28435,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28361,"src":"16037:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28431,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28423,"src":"15991:4:102","typeDescriptions":{"typeIdentifier":"t_contract$_IStableSwap_$27329","typeString":"contract IStableSwap"}},"id":28432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15996:24:102","memberName":"calculateSwapFromAddress","nodeType":"MemberAccess","referencedDeclaration":27218,"src":"15991:29:102","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,address,uint256) view external returns (uint256)"}},"id":28436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15991:54:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28437,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28359,"src":"16047:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":28438,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15990:64:102","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"functionReturnParameters":28367,"id":28439,"nodeType":"Return","src":"15983:71:102"}]},"id":28441,"nodeType":"IfStatement","src":"15589:472:102","trueBody":{"id":28420,"nodeType":"Block","src":"15609:276:102","statements":[{"assignments":[28398],"declarations":[{"constant":false,"id":28398,"mutability":"mutable","name":"tokenIndexIn","nameLocation":"15661:12:102","nodeType":"VariableDeclaration","scope":28420,"src":"15655:18:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":28397,"name":"uint8","nodeType":"ElementaryTypeName","src":"15655:5:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":28403,"initialValue":{"arguments":[{"id":28400,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28355,"src":"15708:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":28401,"name":"_asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28357,"src":"15714:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":28399,"name":"getTokenIndexFromStableSwapPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27854,"src":"15676:31:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_uint8_$","typeString":"function (bytes32,address) view returns (uint8)"}},"id":28402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15676:45:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"15655:66:102"},{"assignments":[28405],"declarations":[{"constant":false,"id":28405,"mutability":"mutable","name":"tokenIndexOut","nameLocation":"15735:13:102","nodeType":"VariableDeclaration","scope":28420,"src":"15729:19:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":28404,"name":"uint8","nodeType":"ElementaryTypeName","src":"15729:5:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":28410,"initialValue":{"arguments":[{"id":28407,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28355,"src":"15783:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":28408,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28359,"src":"15789:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":28406,"name":"getTokenIndexFromStableSwapPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27854,"src":"15751:31:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_uint8_$","typeString":"function (bytes32,address) view returns (uint8)"}},"id":28409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15751:45:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"15729:67:102"},{"expression":{"components":[{"arguments":[{"id":28413,"name":"tokenIndexIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28398,"src":"15832:12:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":28414,"name":"tokenIndexOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28405,"src":"15846:13:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":28415,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28361,"src":"15861:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28411,"name":"ipool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28388,"src":"15812:5:102","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":28412,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15818:13:102","memberName":"calculateSwap","nodeType":"MemberAccess","referencedDeclaration":31829,"src":"15812:19:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_Swap_$30786_storage_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint8,uint8,uint256) view returns (uint256)"}},"id":28416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15812:57:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28417,"name":"_local","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28359,"src":"15871:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":28418,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15811:67:102","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_address_$","typeString":"tuple(uint256,address)"}},"functionReturnParameters":28367,"id":28419,"nodeType":"Return","src":"15804:74:102"}]}}]},"documentation":{"id":28353,"nodeType":"StructuredDocumentation","src":"14646:469:102","text":" @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\n using the stored stable swap\n @dev Will not use the stored stable swap if the asset passed in is the local asset\n @param _asset - The address of the asset to swap into the local asset\n @param _amount - The amount of the asset to swap\n @return The amount of local asset received from swap\n @return The address of asset received post-swap"},"id":28443,"implemented":true,"kind":"function","modifiers":[],"name":"calculateSwapToLocalAssetIfNeeded","nameLocation":"15127:33:102","nodeType":"FunctionDefinition","parameters":{"id":28362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28355,"mutability":"mutable","name":"_key","nameLocation":"15174:4:102","nodeType":"VariableDeclaration","scope":28443,"src":"15166:12:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28354,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15166:7:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":28357,"mutability":"mutable","name":"_asset","nameLocation":"15192:6:102","nodeType":"VariableDeclaration","scope":28443,"src":"15184:14:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28356,"name":"address","nodeType":"ElementaryTypeName","src":"15184:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28359,"mutability":"mutable","name":"_local","nameLocation":"15212:6:102","nodeType":"VariableDeclaration","scope":28443,"src":"15204:14:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28358,"name":"address","nodeType":"ElementaryTypeName","src":"15204:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28361,"mutability":"mutable","name":"_amount","nameLocation":"15232:7:102","nodeType":"VariableDeclaration","scope":28443,"src":"15224:15:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28360,"name":"uint256","nodeType":"ElementaryTypeName","src":"15224:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15160:83:102"},"returnParameters":{"id":28367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28364,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28443,"src":"15267:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28363,"name":"uint256","nodeType":"ElementaryTypeName","src":"15267:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28366,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28443,"src":"15276:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28365,"name":"address","nodeType":"ElementaryTypeName","src":"15276:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15266:18:102"},"scope":28696,"src":"15118:947:102","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":28516,"nodeType":"Block","src":"16543:1008:102","statements":[{"assignments":[28457],"declarations":[{"constant":false,"id":28457,"mutability":"mutable","name":"_canonical","nameLocation":"16564:10:102","nodeType":"VariableDeclaration","scope":28516,"src":"16549:25:102","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":28456,"nodeType":"UserDefinedTypeName","pathNode":{"id":28455,"name":"TokenId","nameLocations":["16549:7:102"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"16549:7:102"},"referencedDeclaration":37728,"src":"16549:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"id":28458,"nodeType":"VariableDeclarationStatement","src":"16549:25:102"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":28464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28459,"name":"_candidate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28446,"src":"16649:10:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":28462,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16671:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":28461,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16663:7:102","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28460,"name":"address","nodeType":"ElementaryTypeName","src":"16663:7:102","typeDescriptions":{}}},"id":28463,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16663:10:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16649:24:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28468,"nodeType":"IfStatement","src":"16645:62:102","trueBody":{"id":28467,"nodeType":"Block","src":"16675:32:102","statements":[{"expression":{"id":28465,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28457,"src":"16690:10:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"functionReturnParameters":28454,"id":28466,"nodeType":"Return","src":"16683:17:102"}]}},{"expression":{"id":28474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":28469,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28457,"src":"16767:10:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":28470,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28449,"src":"16780:1:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}},"id":28471,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16782:18:102","memberName":"adoptedToCanonical","nodeType":"MemberAccess","referencedDeclaration":29414,"src":"16780:20:102","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId storage ref)"}},"id":28473,"indexExpression":{"id":28472,"name":"_candidate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28446,"src":"16801:10:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16780:32:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage","typeString":"struct TokenId storage ref"}},"src":"16767:45:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":28475,"nodeType":"ExpressionStatement","src":"16767:45:102"},{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":28479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":28476,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28457,"src":"16822:10:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":28477,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16833:6:102","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"16822:17:102","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":28478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16843:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16822:22:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28483,"nodeType":"IfStatement","src":"16818:123:102","trueBody":{"id":28482,"nodeType":"Block","src":"16846:95:102","statements":[{"expression":{"id":28480,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28457,"src":"16924:10:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"functionReturnParameters":28454,"id":28481,"nodeType":"Return","src":"16917:17:102"}]}},{"condition":{"arguments":[{"id":28485,"name":"_candidate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28446,"src":"17162:10:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28486,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28449,"src":"17174:1:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}],"id":28484,"name":"isLocalOrigin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28546,"src":"17148:13:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_struct$_AppStorage_$29536_storage_ptr_$returns$_t_bool_$","typeString":"function (address,struct AppStorage storage pointer) view returns (bool)"}},"id":28487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17148:28:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":28512,"nodeType":"Block","src":"17402:122:102","statements":[{"expression":{"id":28510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":28505,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28457,"src":"17465:10:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":28506,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28449,"src":"17478:1:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}},"id":28507,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17480:25:102","memberName":"representationToCanonical","nodeType":"MemberAccess","referencedDeclaration":29420,"src":"17478:27:102","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId storage ref)"}},"id":28509,"indexExpression":{"id":28508,"name":"_candidate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28446,"src":"17506:10:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17478:39:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage","typeString":"struct TokenId storage ref"}},"src":"17465:52:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":28511,"nodeType":"ExpressionStatement","src":"17465:52:102"}]},"id":28513,"nodeType":"IfStatement","src":"17144:380:102","trueBody":{"id":28504,"nodeType":"Block","src":"17178:218:102","statements":[{"expression":{"id":28493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":28488,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28457,"src":"17299:10:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":28490,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"17310:6:102","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"17299:17:102","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":28491,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28449,"src":"17319:1:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}},"id":28492,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17321:6:102","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"17319:8:102","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"17299:28:102","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":28494,"nodeType":"ExpressionStatement","src":"17299:28:102"},{"expression":{"id":28502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":28495,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28457,"src":"17335:10:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":28497,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"17346:2:102","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"17335:13:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":28500,"name":"_candidate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28446,"src":"17378:10:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28498,"name":"TypeCasts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50188,"src":"17351:9:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TypeCasts_$50188_$","typeString":"type(library TypeCasts)"}},"id":28499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17361:16:102","memberName":"addressToBytes32","nodeType":"MemberAccess","referencedDeclaration":50168,"src":"17351:26:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$_t_bytes32_$","typeString":"function (address) pure returns (bytes32)"}},"id":28501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17351:38:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"17335:54:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28503,"nodeType":"ExpressionStatement","src":"17335:54:102"}]}},{"expression":{"id":28514,"name":"_canonical","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28457,"src":"17536:10:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"functionReturnParameters":28454,"id":28515,"nodeType":"Return","src":"17529:17:102"}]},"documentation":{"id":28444,"nodeType":"StructuredDocumentation","src":"16128:302:102","text":" @notice Gets the canonical information for a given candidate.\n @dev First checks the `address(0)` convention, then checks if the asset given is the\n adopted asset, then calculates the local address.\n @return TokenId The canonical token ID information for the given candidate."},"id":28517,"implemented":true,"kind":"function","modifiers":[],"name":"getCanonicalTokenId","nameLocation":"16442:19:102","nodeType":"FunctionDefinition","parameters":{"id":28450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28446,"mutability":"mutable","name":"_candidate","nameLocation":"16470:10:102","nodeType":"VariableDeclaration","scope":28517,"src":"16462:18:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28445,"name":"address","nodeType":"ElementaryTypeName","src":"16462:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28449,"mutability":"mutable","name":"s","nameLocation":"16501:1:102","nodeType":"VariableDeclaration","scope":28517,"src":"16482:20:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"},"typeName":{"id":28448,"nodeType":"UserDefinedTypeName","pathNode":{"id":28447,"name":"AppStorage","nameLocations":["16482:10:102"],"nodeType":"IdentifierPath","referencedDeclaration":29536,"src":"16482:10:102"},"referencedDeclaration":29536,"src":"16482:10:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"}},"visibility":"internal"}],"src":"16461:42:102"},"returnParameters":{"id":28454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28453,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28517,"src":"16527:14:102","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":28452,"nodeType":"UserDefinedTypeName","pathNode":{"id":28451,"name":"TokenId","nameLocations":["16527:7:102"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"16527:7:102"},"referencedDeclaration":37728,"src":"16527:7:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"src":"16526:16:102"},"scope":28696,"src":"16433:1118:102","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":28545,"nodeType":"Block","src":"17906:425:102","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":28534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"expression":{"id":28528,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28523,"src":"18056:1:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}},"id":28529,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18058:25:102","memberName":"representationToCanonical","nodeType":"MemberAccess","referencedDeclaration":29420,"src":"18056:27:102","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId storage ref)"}},"id":28531,"indexExpression":{"id":28530,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28520,"src":"18084:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18056:35:102","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage","typeString":"struct TokenId storage ref"}},"id":28532,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18092:6:102","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"18056:42:102","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":28533,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18102:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18056:47:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28538,"nodeType":"IfStatement","src":"18052:80:102","trueBody":{"id":28537,"nodeType":"Block","src":"18105:27:102","statements":[{"expression":{"hexValue":"66616c7365","id":28535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"18120:5:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":28527,"id":28536,"nodeType":"Return","src":"18113:12:102"}]}},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":28539,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28520,"src":"18303:6:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":28540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18310:4:102","memberName":"code","nodeType":"MemberAccess","src":"18303:11:102","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":28541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18315:6:102","memberName":"length","nodeType":"MemberAccess","src":"18303:18:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":28542,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18325:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18303:23:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28527,"id":28544,"nodeType":"Return","src":"18296:30:102"}]},"documentation":{"id":28518,"nodeType":"StructuredDocumentation","src":"17555:258:102","text":" @notice Determine if token is of local origin (i.e. it is a locally originating contract,\n and NOT a token deployed by the bridge).\n @param s AppStorage instance.\n @return bool true if token is locally originating, false otherwise."},"id":28546,"implemented":true,"kind":"function","modifiers":[],"name":"isLocalOrigin","nameLocation":"17825:13:102","nodeType":"FunctionDefinition","parameters":{"id":28524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28520,"mutability":"mutable","name":"_token","nameLocation":"17847:6:102","nodeType":"VariableDeclaration","scope":28546,"src":"17839:14:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28519,"name":"address","nodeType":"ElementaryTypeName","src":"17839:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28523,"mutability":"mutable","name":"s","nameLocation":"17874:1:102","nodeType":"VariableDeclaration","scope":28546,"src":"17855:20:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"},"typeName":{"id":28522,"nodeType":"UserDefinedTypeName","pathNode":{"id":28521,"name":"AppStorage","nameLocations":["17855:10:102"],"nodeType":"IdentifierPath","referencedDeclaration":29536,"src":"17855:10:102"},"referencedDeclaration":29536,"src":"17855:10:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"}},"visibility":"internal"}],"src":"17838:38:102"},"returnParameters":{"id":28527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28526,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28546,"src":"17900:4:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28525,"name":"bool","nodeType":"ElementaryTypeName","src":"17900:4:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"17899:6:102"},"scope":28696,"src":"17816:515:102","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":28578,"nodeType":"Block","src":"18775:243:102","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":28564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28561,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28553,"src":"18785:7:102","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":28562,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28556,"src":"18796:1:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage storage pointer"}},"id":28563,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18798:6:102","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":29408,"src":"18796:8:102","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"18785:19:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":28576,"nodeType":"Block","src":"18899:115:102","statements":[{"expression":{"expression":{"arguments":[{"id":28572,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28549,"src":"18987:4:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":28571,"name":"getConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27701,"src":"18977:9:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_struct$_TokenConfig_$29395_storage_ptr_$","typeString":"function (bytes32) view returns (struct TokenConfig storage pointer)"}},"id":28573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18977:15:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig storage pointer"}},"id":28574,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18993:14:102","memberName":"representation","nodeType":"MemberAccess","referencedDeclaration":29380,"src":"18977:30:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":28560,"id":28575,"nodeType":"Return","src":"18970:37:102"}]},"id":28577,"nodeType":"IfStatement","src":"18781:233:102","trueBody":{"id":28570,"nodeType":"Block","src":"18806:87:102","statements":[{"expression":{"arguments":[{"id":28567,"name":"_id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28551,"src":"18882:3:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":28565,"name":"TypeCasts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50188,"src":"18855:9:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TypeCasts_$50188_$","typeString":"type(library TypeCasts)"}},"id":28566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18865:16:102","memberName":"bytes32ToAddress","nodeType":"MemberAccess","referencedDeclaration":50187,"src":"18855:26:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) pure returns (address)"}},"id":28568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18855:31:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":28560,"id":28569,"nodeType":"Return","src":"18848:38:102"}]}}]},"documentation":{"id":28547,"nodeType":"StructuredDocumentation","src":"18335:297:102","text":" @notice Get the local asset address for a given canonical key, id, and domain.\n @param _key - The hash of canonical id and domain.\n @param _id Canonical ID.\n @param _domain Canonical domain.\n @param s AppStorage instance.\n @return address of the the local asset."},"id":28579,"implemented":true,"kind":"function","modifiers":[],"name":"getLocalAsset","nameLocation":"18644:13:102","nodeType":"FunctionDefinition","parameters":{"id":28557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28549,"mutability":"mutable","name":"_key","nameLocation":"18671:4:102","nodeType":"VariableDeclaration","scope":28579,"src":"18663:12:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28548,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18663:7:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":28551,"mutability":"mutable","name":"_id","nameLocation":"18689:3:102","nodeType":"VariableDeclaration","scope":28579,"src":"18681:11:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28550,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18681:7:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":28553,"mutability":"mutable","name":"_domain","nameLocation":"18705:7:102","nodeType":"VariableDeclaration","scope":28579,"src":"18698:14:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":28552,"name":"uint32","nodeType":"ElementaryTypeName","src":"18698:6:102","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":28556,"mutability":"mutable","name":"s","nameLocation":"18737:1:102","nodeType":"VariableDeclaration","scope":28579,"src":"18718:20:102","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"},"typeName":{"id":28555,"nodeType":"UserDefinedTypeName","pathNode":{"id":28554,"name":"AppStorage","nameLocations":["18718:10:102"],"nodeType":"IdentifierPath","referencedDeclaration":29536,"src":"18718:10:102"},"referencedDeclaration":29536,"src":"18718:10:102","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"}},"visibility":"internal"}],"src":"18657:85:102"},"returnParameters":{"id":28560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28559,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28579,"src":"18766:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28558,"name":"address","nodeType":"ElementaryTypeName","src":"18766:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18765:9:102"},"scope":28696,"src":"18635:383:102","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":28597,"nodeType":"Block","src":"19417:53:102","statements":[{"expression":{"arguments":[{"arguments":[{"id":28592,"name":"_id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28582,"src":"19451:3:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":28593,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28584,"src":"19456:7:102","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":28590,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"19440:3:102","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":28591,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"19444:6:102","memberName":"encode","nodeType":"MemberAccess","src":"19440:10:102","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":28594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19440:24:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":28589,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"19430:9:102","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":28595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19430:35:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":28588,"id":28596,"nodeType":"Return","src":"19423:42:102"}]},"documentation":{"id":28580,"nodeType":"StructuredDocumentation","src":"19022:299:102","text":" @notice Calculates the hash of canonical ID and domain.\n @dev This hash is used as the key for many asset-related mappings.\n @param _id Canonical ID.\n @param _domain Canonical domain.\n @return bytes32 Canonical hash, used as key for accessing token info from mappings."},"id":28598,"implemented":true,"kind":"function","modifiers":[],"name":"calculateCanonicalHash","nameLocation":"19333:22:102","nodeType":"FunctionDefinition","parameters":{"id":28585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28582,"mutability":"mutable","name":"_id","nameLocation":"19364:3:102","nodeType":"VariableDeclaration","scope":28598,"src":"19356:11:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28581,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19356:7:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":28584,"mutability":"mutable","name":"_domain","nameLocation":"19376:7:102","nodeType":"VariableDeclaration","scope":28598,"src":"19369:14:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":28583,"name":"uint32","nodeType":"ElementaryTypeName","src":"19369:6:102","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"19355:29:102"},"returnParameters":{"id":28588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28587,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28598,"src":"19408:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28586,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19408:7:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"19407:9:102"},"scope":28696,"src":"19324:146:102","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28639,"nodeType":"Block","src":"20141:268:102","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28612,"name":"_amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28605,"src":"20151:9:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":28613,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20164:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20151:14:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28618,"nodeType":"IfStatement","src":"20147:43:102","trueBody":{"id":28617,"nodeType":"Block","src":"20167:23:102","statements":[{"expression":{"hexValue":"30","id":28615,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20182:1:102","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":28611,"id":28616,"nodeType":"Return","src":"20175:8:102"}]}},{"assignments":[28620],"declarations":[{"constant":false,"id":28620,"mutability":"mutable","name":"min","nameLocation":"20263:3:102","nodeType":"VariableDeclaration","scope":28639,"src":"20255:11:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28619,"name":"uint256","nodeType":"ElementaryTypeName","src":"20255:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28632,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28621,"name":"_amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28605,"src":"20270:9:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":28622,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"20283:9:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":28623,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20293:19:102","memberName":"BPS_FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29220,"src":"20283:29:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":28624,"name":"_slippage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28607,"src":"20315:9:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20283:41:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":28626,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20282:43:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20270:55:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":28628,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20269:57:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":28629,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"20329:9:102","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":28630,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20339:19:102","memberName":"BPS_FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29220,"src":"20329:29:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20269:89:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20255:103:102"},{"expression":{"arguments":[{"id":28634,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28601,"src":"20389:3:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":28635,"name":"_out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28603,"src":"20394:4:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":28636,"name":"min","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28620,"src":"20400:3:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28633,"name":"normalizeDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28695,"src":"20371:17:102","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint8_$_t_uint8_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint8,uint8,uint256) pure returns (uint256)"}},"id":28637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20371:33:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":28611,"id":28638,"nodeType":"Return","src":"20364:40:102"}]},"documentation":{"id":28599,"nodeType":"StructuredDocumentation","src":"19521:469:102","text":" @notice This function calculates slippage as a %age of the amount in, and normalizes\n That to the `_out` decimals.\n @dev This *ONLY* works for 1:1 assets\n @param _in The decimals of the asset in / amount in\n @param _out The decimals of the target asset\n @param _amountIn The starting amount for the swap\n @param _slippage The slippage allowed for the swap, in BPS\n @return uint256 The minimum amount out for the swap"},"id":28640,"implemented":true,"kind":"function","modifiers":[],"name":"calculateSlippageBoundary","nameLocation":"20002:25:102","nodeType":"FunctionDefinition","parameters":{"id":28608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28601,"mutability":"mutable","name":"_in","nameLocation":"20039:3:102","nodeType":"VariableDeclaration","scope":28640,"src":"20033:9:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":28600,"name":"uint8","nodeType":"ElementaryTypeName","src":"20033:5:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":28603,"mutability":"mutable","name":"_out","nameLocation":"20054:4:102","nodeType":"VariableDeclaration","scope":28640,"src":"20048:10:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":28602,"name":"uint8","nodeType":"ElementaryTypeName","src":"20048:5:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":28605,"mutability":"mutable","name":"_amountIn","nameLocation":"20072:9:102","nodeType":"VariableDeclaration","scope":28640,"src":"20064:17:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28604,"name":"uint256","nodeType":"ElementaryTypeName","src":"20064:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28607,"mutability":"mutable","name":"_slippage","nameLocation":"20095:9:102","nodeType":"VariableDeclaration","scope":28640,"src":"20087:17:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28606,"name":"uint256","nodeType":"ElementaryTypeName","src":"20087:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20027:81:102"},"returnParameters":{"id":28611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28610,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28640,"src":"20132:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28609,"name":"uint256","nodeType":"ElementaryTypeName","src":"20132:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20131:9:102"},"scope":28696,"src":"19993:416:102","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28694,"nodeType":"Block","src":"20848:297:102","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":28654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28652,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28643,"src":"20858:3:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":28653,"name":"_out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28645,"src":"20865:4:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"20858:11:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28658,"nodeType":"IfStatement","src":"20854:46:102","trueBody":{"id":28657,"nodeType":"Block","src":"20871:29:102","statements":[{"expression":{"id":28655,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28647,"src":"20886:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":28651,"id":28656,"nodeType":"Return","src":"20879:14:102"}]}},{"assignments":[28660],"declarations":[{"constant":false,"id":28660,"mutability":"mutable","name":"normalized","nameLocation":"20968:10:102","nodeType":"VariableDeclaration","scope":28694,"src":"20960:18:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28659,"name":"uint256","nodeType":"ElementaryTypeName","src":"20960:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28661,"nodeType":"VariableDeclarationStatement","src":"20960:18:102"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":28664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28662,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28643,"src":"20988:3:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":28663,"name":"_out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28645,"src":"20994:4:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"20988:10:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":28690,"nodeType":"Block","src":"21062:56:102","statements":[{"expression":{"id":28688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":28678,"name":"normalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28660,"src":"21070:10:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28679,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28647,"src":"21083:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":28680,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21094:2:102","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":28683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28681,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28643,"src":"21099:3:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":28682,"name":"_out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28645,"src":"21105:4:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"21099:10:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":28684,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21098:12:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"21094:16:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":28686,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21093:18:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21083:28:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21070:41:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28689,"nodeType":"ExpressionStatement","src":"21070:41:102"}]},"id":28691,"nodeType":"IfStatement","src":"20984:134:102","trueBody":{"id":28677,"nodeType":"Block","src":"21000:56:102","statements":[{"expression":{"id":28675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":28665,"name":"normalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28660,"src":"21008:10:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28666,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28647,"src":"21021:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":28667,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21032:2:102","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":28670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28668,"name":"_out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28645,"src":"21037:4:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":28669,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28643,"src":"21044:3:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"21037:10:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":28671,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21036:12:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"21032:16:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":28673,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21031:18:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21021:28:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21008:41:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28676,"nodeType":"ExpressionStatement","src":"21008:41:102"}]}},{"expression":{"id":28692,"name":"normalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28660,"src":"21130:10:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":28651,"id":28693,"nodeType":"Return","src":"21123:17:102"}]},"documentation":{"id":28641,"nodeType":"StructuredDocumentation","src":"20413:317:102","text":" @notice This function translates the _amount in _in decimals\n to _out decimals\n @param _in The decimals of the asset in / amount in\n @param _out The decimals of the target asset\n @param _amount The value to normalize to the `_out` decimals\n @return uint256 Normalized decimals."},"id":28695,"implemented":true,"kind":"function","modifiers":[],"name":"normalizeDecimals","nameLocation":"20742:17:102","nodeType":"FunctionDefinition","parameters":{"id":28648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28643,"mutability":"mutable","name":"_in","nameLocation":"20771:3:102","nodeType":"VariableDeclaration","scope":28695,"src":"20765:9:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":28642,"name":"uint8","nodeType":"ElementaryTypeName","src":"20765:5:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":28645,"mutability":"mutable","name":"_out","nameLocation":"20786:4:102","nodeType":"VariableDeclaration","scope":28695,"src":"20780:10:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":28644,"name":"uint8","nodeType":"ElementaryTypeName","src":"20780:5:102","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":28647,"mutability":"mutable","name":"_amount","nameLocation":"20804:7:102","nodeType":"VariableDeclaration","scope":28695,"src":"20796:15:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28646,"name":"uint256","nodeType":"ElementaryTypeName","src":"20796:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20759:56:102"},"returnParameters":{"id":28651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28650,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28695,"src":"20839:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28649,"name":"uint256","nodeType":"ElementaryTypeName","src":"20839:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20838:9:102"},"scope":28696,"src":"20733:412:102","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":28697,"src":"584:20563:102","usedErrors":[27656,27658,27660,27662,27664,27666]}],"src":"39:21109:102"},"id":102},"contracts/core/connext/libraries/BridgeMessage.sol":{"ast":{"absolutePath":"contracts/core/connext/libraries/BridgeMessage.sol","exportedSymbols":{"BridgeMessage":[29188],"TokenId":[37728],"TypedMemView":[51265]},"id":29189,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":28698,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:103"},{"absolutePath":"contracts/shared/libraries/TypedMemView.sol","file":"../../../shared/libraries/TypedMemView.sol","id":28700,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29189,"sourceUnit":51266,"src":"117:72:103","symbolAliases":[{"foreign":{"id":28699,"name":"TypedMemView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51265,"src":"125:12:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/TokenId.sol","file":"./TokenId.sol","id":28702,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29189,"sourceUnit":37729,"src":"190:38:103","symbolAliases":[{"foreign":{"id":28701,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37728,"src":"198:7:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"BridgeMessage","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":29188,"linearizedBaseContracts":[29188],"name":"BridgeMessage","nameLocation":"238:13:103","nodeType":"ContractDefinition","nodes":[{"global":false,"id":28705,"libraryName":{"id":28703,"name":"TypedMemView","nameLocations":["304:12:103"],"nodeType":"IdentifierPath","referencedDeclaration":51265,"src":"304:12:103"},"nodeType":"UsingForDirective","src":"298:29:103","typeName":{"id":28704,"name":"bytes","nodeType":"ElementaryTypeName","src":"321:5:103","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},{"global":false,"id":28708,"libraryName":{"id":28706,"name":"TypedMemView","nameLocations":["336:12:103"],"nodeType":"IdentifierPath","referencedDeclaration":51265,"src":"336:12:103"},"nodeType":"UsingForDirective","src":"330:31:103","typeName":{"id":28707,"name":"bytes29","nodeType":"ElementaryTypeName","src":"353:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}},{"canonicalName":"BridgeMessage.Types","id":28713,"members":[{"id":28709,"name":"Invalid","nameLocation":"1382:7:103","nodeType":"EnumValue","src":"1382:7:103"},{"id":28710,"name":"TokenId","nameLocation":"1400:7:103","nodeType":"EnumValue","src":"1400:7:103"},{"id":28711,"name":"Message","nameLocation":"1418:7:103","nodeType":"EnumValue","src":"1418:7:103"},{"id":28712,"name":"Transfer","nameLocation":"1436:8:103","nodeType":"EnumValue","src":"1436:8:103"}],"name":"Types","nameLocation":"1370:5:103","nodeType":"EnumDefinition","src":"1365:88:103"},{"constant":true,"id":28716,"mutability":"constant","name":"TOKEN_ID_LEN","nameLocation":"1524:12:103","nodeType":"VariableDeclaration","scope":29188,"src":"1499:42:103","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28714,"name":"uint256","nodeType":"ElementaryTypeName","src":"1499:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3336","id":28715,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1539:2:103","typeDescriptions":{"typeIdentifier":"t_rational_36_by_1","typeString":"int_const 36"},"value":"36"},"visibility":"private"},{"constant":true,"id":28719,"mutability":"constant","name":"IDENTIFIER_LEN","nameLocation":"1602:14:103","nodeType":"VariableDeclaration","scope":29188,"src":"1577:43:103","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28717,"name":"uint256","nodeType":"ElementaryTypeName","src":"1577:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":28718,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1619:1:103","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"private"},{"constant":true,"id":28722,"mutability":"constant","name":"TRANSFER_LEN","nameLocation":"1649:12:103","nodeType":"VariableDeclaration","scope":29188,"src":"1624:42:103","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28720,"name":"uint256","nodeType":"ElementaryTypeName","src":"1624:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3635","id":28721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1664:2:103","typeDescriptions":{"typeIdentifier":"t_rational_65_by_1","typeString":"int_const 65"},"value":"65"},"visibility":"private"},{"body":{"id":28740,"nodeType":"Block","src":"1942:46:103","statements":[{"expression":{"arguments":[{"arguments":[{"id":28735,"name":"_t","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28728,"src":"1972:2:103","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}],"id":28734,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1965:6:103","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":28733,"name":"uint40","nodeType":"ElementaryTypeName","src":"1965:6:103","typeDescriptions":{}}},"id":28736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1965:10:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":28730,"name":"_view","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28725,"src":"1948:5:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":28732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1954:10:103","memberName":"assertType","nodeType":"MemberAccess","referencedDeclaration":50471,"src":"1948:16:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint40) pure returns (bytes29)"}},"id":28737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1948:28:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":28738,"nodeType":"ExpressionStatement","src":"1948:28:103"},{"id":28739,"nodeType":"PlaceholderStatement","src":"1982:1:103"}]},"documentation":{"id":28723,"nodeType":"StructuredDocumentation","src":"1775:119:103","text":" @notice Asserts a message is of type `_t`\n @param _view The message\n @param _t The expected type"},"id":28741,"name":"typeAssert","nameLocation":"1906:10:103","nodeType":"ModifierDefinition","parameters":{"id":28729,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28725,"mutability":"mutable","name":"_view","nameLocation":"1925:5:103","nodeType":"VariableDeclaration","scope":28741,"src":"1917:13:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":28724,"name":"bytes29","nodeType":"ElementaryTypeName","src":"1917:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":28728,"mutability":"mutable","name":"_t","nameLocation":"1938:2:103","nodeType":"VariableDeclaration","scope":28741,"src":"1932:8:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"},"typeName":{"id":28727,"nodeType":"UserDefinedTypeName","pathNode":{"id":28726,"name":"Types","nameLocations":["1932:5:103"],"nodeType":"IdentifierPath","referencedDeclaration":28713,"src":"1932:5:103"},"referencedDeclaration":28713,"src":"1932:5:103","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}},"visibility":"internal"}],"src":"1916:25:103"},"src":"1897:91:103","virtual":false,"visibility":"internal"},{"body":{"id":28753,"nodeType":"Block","src":"2238:37:103","statements":[{"expression":{"arguments":[{"id":28750,"name":"_action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28744,"src":"2262:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":28749,"name":"isTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28887,"src":"2251:10:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bool_$","typeString":"function (bytes29) pure returns (bool)"}},"id":28751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2251:19:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28748,"id":28752,"nodeType":"Return","src":"2244:26:103"}]},"documentation":{"id":28742,"nodeType":"StructuredDocumentation","src":"2043:123:103","text":" @notice Checks that Action is valid type\n @param _action The action\n @return TRUE if action is valid"},"id":28754,"implemented":true,"kind":"function","modifiers":[],"name":"isValidAction","nameLocation":"2178:13:103","nodeType":"FunctionDefinition","parameters":{"id":28745,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28744,"mutability":"mutable","name":"_action","nameLocation":"2200:7:103","nodeType":"VariableDeclaration","scope":28754,"src":"2192:15:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":28743,"name":"bytes29","nodeType":"ElementaryTypeName","src":"2192:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"2191:17:103"},"returnParameters":{"id":28748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28747,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28754,"src":"2232:4:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28746,"name":"bool","nodeType":"ElementaryTypeName","src":"2232:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2231:6:103"},"scope":29188,"src":"2169:106:103","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28774,"nodeType":"Block","src":"2494:85:103","statements":[{"assignments":[28763],"declarations":[{"constant":false,"id":28763,"mutability":"mutable","name":"_len","nameLocation":"2508:4:103","nodeType":"VariableDeclaration","scope":28774,"src":"2500:12:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28762,"name":"uint256","nodeType":"ElementaryTypeName","src":"2500:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28767,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28764,"name":"_view","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28757,"src":"2515:5:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":28765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2521:3:103","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":50665,"src":"2515:9:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":28766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2515:11:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"2500:26:103"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28768,"name":"_len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28763,"src":"2539:4:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28771,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":28769,"name":"TOKEN_ID_LEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28716,"src":"2547:12:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":28770,"name":"TRANSFER_LEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28722,"src":"2562:12:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2547:27:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2539:35:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28761,"id":28773,"nodeType":"Return","src":"2532:42:103"}]},"documentation":{"id":28755,"nodeType":"StructuredDocumentation","src":"2279:138:103","text":" @notice Checks that view is a valid message length\n @param _view The bytes string\n @return TRUE if message is valid"},"id":28775,"implemented":true,"kind":"function","modifiers":[],"name":"isValidMessageLength","nameLocation":"2429:20:103","nodeType":"FunctionDefinition","parameters":{"id":28758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28757,"mutability":"mutable","name":"_view","nameLocation":"2458:5:103","nodeType":"VariableDeclaration","scope":28775,"src":"2450:13:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":28756,"name":"bytes29","nodeType":"ElementaryTypeName","src":"2450:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"2449:15:103"},"returnParameters":{"id":28761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28760,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28775,"src":"2488:4:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28759,"name":"bool","nodeType":"ElementaryTypeName","src":"2488:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2487:6:103"},"scope":29188,"src":"2420:159:103","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28825,"nodeType":"Block","src":"2883:190:103","statements":[{"expression":{"arguments":[{"arguments":[{"id":28792,"name":"_action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28780,"src":"2911:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":28791,"name":"isValidAction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28754,"src":"2897:13:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bool_$","typeString":"function (bytes29) pure returns (bool)"}},"id":28793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2897:22:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21616374696f6e","id":28794,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2921:9:103","typeDescriptions":{"typeIdentifier":"t_stringliteral_677bddb5fb0400bc8f0292043908c7b57427ef4ef8f2bd6107e675f051b2e46b","typeString":"literal_string \"!action\""},"value":"!action"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_677bddb5fb0400bc8f0292043908c7b57427ef4ef8f2bd6107e675f051b2e46b","typeString":"literal_string \"!action\""}],"id":28790,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2889:7:103","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":28795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2889:42:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28796,"nodeType":"ExpressionStatement","src":"2889:42:103"},{"assignments":[28801],"declarations":[{"constant":false,"id":28801,"mutability":"mutable","name":"_views","nameLocation":"2954:6:103","nodeType":"VariableDeclaration","scope":28825,"src":"2937:23:103","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes29_$dyn_memory_ptr","typeString":"bytes29[]"},"typeName":{"baseType":{"id":28799,"name":"bytes29","nodeType":"ElementaryTypeName","src":"2937:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":28800,"nodeType":"ArrayTypeName","src":"2937:9:103","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes29_$dyn_storage_ptr","typeString":"bytes29[]"}},"visibility":"internal"}],"id":28807,"initialValue":{"arguments":[{"hexValue":"32","id":28805,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2977:1:103","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"id":28804,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2963:13:103","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes29_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes29[] memory)"},"typeName":{"baseType":{"id":28802,"name":"bytes29","nodeType":"ElementaryTypeName","src":"2967:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":28803,"nodeType":"ArrayTypeName","src":"2967:9:103","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes29_$dyn_storage_ptr","typeString":"bytes29[]"}}},"id":28806,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2963:16:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes29_$dyn_memory_ptr","typeString":"bytes29[] memory"}},"nodeType":"VariableDeclarationStatement","src":"2937:42:103"},{"expression":{"id":28812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":28808,"name":"_views","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28801,"src":"2985:6:103","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes29_$dyn_memory_ptr","typeString":"bytes29[] memory"}},"id":28810,"indexExpression":{"hexValue":"30","id":28809,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2992:1:103","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2985:9:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":28811,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28778,"src":"2997:8:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"src":"2985:20:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":28813,"nodeType":"ExpressionStatement","src":"2985:20:103"},{"expression":{"id":28818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":28814,"name":"_views","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28801,"src":"3011:6:103","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes29_$dyn_memory_ptr","typeString":"bytes29[] memory"}},"id":28816,"indexExpression":{"hexValue":"31","id":28815,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3018:1:103","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3011:9:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":28817,"name":"_action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28780,"src":"3023:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"src":"3011:19:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":28819,"nodeType":"ExpressionStatement","src":"3011:19:103"},{"expression":{"arguments":[{"id":28822,"name":"_views","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28801,"src":"3061:6:103","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes29_$dyn_memory_ptr","typeString":"bytes29[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes29_$dyn_memory_ptr","typeString":"bytes29[] memory"}],"expression":{"id":28820,"name":"TypedMemView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51265,"src":"3043:12:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TypedMemView_$51265_$","typeString":"type(library TypedMemView)"}},"id":28821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3056:4:103","memberName":"join","nodeType":"MemberAccess","referencedDeclaration":51264,"src":"3043:17:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_bytes29_$dyn_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes29[] memory) view returns (bytes memory)"}},"id":28823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3043:25:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":28789,"id":28824,"nodeType":"Return","src":"3036:32:103"}]},"documentation":{"id":28776,"nodeType":"StructuredDocumentation","src":"2583:148:103","text":" @notice Formats an action message\n @param _tokenId The token ID\n @param _action The action\n @return The formatted message"},"id":28826,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":28783,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28778,"src":"2829:8:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},{"expression":{"id":28784,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28713,"src":"2839:5:103","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Types_$28713_$","typeString":"type(enum BridgeMessage.Types)"}},"id":28785,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2845:7:103","memberName":"TokenId","nodeType":"MemberAccess","referencedDeclaration":28710,"src":"2839:13:103","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}}],"id":28786,"kind":"modifierInvocation","modifierName":{"id":28782,"name":"typeAssert","nameLocations":["2818:10:103"],"nodeType":"IdentifierPath","referencedDeclaration":28741,"src":"2818:10:103"},"nodeType":"ModifierInvocation","src":"2818:35:103"}],"name":"formatMessage","nameLocation":"2743:13:103","nodeType":"FunctionDefinition","parameters":{"id":28781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28778,"mutability":"mutable","name":"_tokenId","nameLocation":"2765:8:103","nodeType":"VariableDeclaration","scope":28826,"src":"2757:16:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":28777,"name":"bytes29","nodeType":"ElementaryTypeName","src":"2757:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":28780,"mutability":"mutable","name":"_action","nameLocation":"2783:7:103","nodeType":"VariableDeclaration","scope":28826,"src":"2775:15:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":28779,"name":"bytes29","nodeType":"ElementaryTypeName","src":"2775:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"2756:35:103"},"returnParameters":{"id":28789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28788,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28826,"src":"2867:12:103","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":28787,"name":"bytes","nodeType":"ElementaryTypeName","src":"2867:5:103","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2866:14:103"},"scope":29188,"src":"2734:339:103","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":28844,"nodeType":"Block","src":"3267:46:103","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28838,"name":"_view","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28829,"src":"3292:5:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":28839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3298:6:103","memberName":"typeOf","nodeType":"MemberAccess","referencedDeclaration":50601,"src":"3292:12:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (uint40)"}},"id":28840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3292:14:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"}],"id":28837,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3286:5:103","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":28836,"name":"uint8","nodeType":"ElementaryTypeName","src":"3286:5:103","typeDescriptions":{}}},"id":28841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3286:21:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":28835,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28713,"src":"3280:5:103","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Types_$28713_$","typeString":"type(enum BridgeMessage.Types)"}},"id":28842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3280:28:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}},"functionReturnParameters":28834,"id":28843,"nodeType":"Return","src":"3273:35:103"}]},"documentation":{"id":28827,"nodeType":"StructuredDocumentation","src":"3077:121:103","text":" @notice Returns the type of the message\n @param _view The message\n @return The type of the message"},"id":28845,"implemented":true,"kind":"function","modifiers":[],"name":"messageType","nameLocation":"3210:11:103","nodeType":"FunctionDefinition","parameters":{"id":28830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28829,"mutability":"mutable","name":"_view","nameLocation":"3230:5:103","nodeType":"VariableDeclaration","scope":28845,"src":"3222:13:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":28828,"name":"bytes29","nodeType":"ElementaryTypeName","src":"3222:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"3221:15:103"},"returnParameters":{"id":28834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28833,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28845,"src":"3260:5:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"},"typeName":{"id":28832,"nodeType":"UserDefinedTypeName","pathNode":{"id":28831,"name":"Types","nameLocations":["3260:5:103"],"nodeType":"IdentifierPath","referencedDeclaration":28713,"src":"3260:5:103"},"referencedDeclaration":28713,"src":"3260:5:103","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}},"visibility":"internal"}],"src":"3259:7:103"},"scope":29188,"src":"3201:112:103","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28871,"nodeType":"Block","src":"3596:86:103","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":28869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":28863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":28857,"name":"_action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28848,"src":"3620:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":28856,"name":"actionType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29052,"src":"3609:10:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint8_$","typeString":"function (bytes29) pure returns (uint8)"}},"id":28858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3609:19:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":28861,"name":"_type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28851,"src":"3638:5:103","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}],"id":28860,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3632:5:103","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":28859,"name":"uint8","nodeType":"ElementaryTypeName","src":"3632:5:103","typeDescriptions":{}}},"id":28862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3632:12:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"3609:35:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"},"id":28868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":28865,"name":"_action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28848,"src":"3660:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":28864,"name":"messageType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28845,"src":"3648:11:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_enum$_Types_$28713_$","typeString":"function (bytes29) pure returns (enum BridgeMessage.Types)"}},"id":28866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3648:20:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":28867,"name":"_type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28851,"src":"3672:5:103","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}},"src":"3648:29:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3609:68:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28855,"id":28870,"nodeType":"Return","src":"3602:75:103"}]},"documentation":{"id":28846,"nodeType":"StructuredDocumentation","src":"3317:201:103","text":" @notice Checks that the message is of the specified type\n @param _type the type to check for\n @param _action The message\n @return True if the message is of the specified type"},"id":28872,"implemented":true,"kind":"function","modifiers":[],"name":"isType","nameLocation":"3530:6:103","nodeType":"FunctionDefinition","parameters":{"id":28852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28848,"mutability":"mutable","name":"_action","nameLocation":"3545:7:103","nodeType":"VariableDeclaration","scope":28872,"src":"3537:15:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":28847,"name":"bytes29","nodeType":"ElementaryTypeName","src":"3537:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":28851,"mutability":"mutable","name":"_type","nameLocation":"3560:5:103","nodeType":"VariableDeclaration","scope":28872,"src":"3554:11:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"},"typeName":{"id":28850,"nodeType":"UserDefinedTypeName","pathNode":{"id":28849,"name":"Types","nameLocations":["3554:5:103"],"nodeType":"IdentifierPath","referencedDeclaration":28713,"src":"3554:5:103"},"referencedDeclaration":28713,"src":"3554:5:103","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}},"visibility":"internal"}],"src":"3536:30:103"},"returnParameters":{"id":28855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28854,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28872,"src":"3590:4:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28853,"name":"bool","nodeType":"ElementaryTypeName","src":"3590:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3589:6:103"},"scope":29188,"src":"3521:161:103","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28886,"nodeType":"Block","src":"3906:49:103","statements":[{"expression":{"arguments":[{"id":28881,"name":"_action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28875,"src":"3926:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},{"expression":{"id":28882,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28713,"src":"3935:5:103","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Types_$28713_$","typeString":"type(enum BridgeMessage.Types)"}},"id":28883,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3941:8:103","memberName":"Transfer","nodeType":"MemberAccess","referencedDeclaration":28712,"src":"3935:14:103","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"},{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}],"id":28880,"name":"isType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28872,"src":"3919:6:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_enum$_Types_$28713_$returns$_t_bool_$","typeString":"function (bytes29,enum BridgeMessage.Types) pure returns (bool)"}},"id":28884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3919:31:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28879,"id":28885,"nodeType":"Return","src":"3912:38:103"}]},"documentation":{"id":28873,"nodeType":"StructuredDocumentation","src":"3686:151:103","text":" @notice Checks that the message is of type Transfer\n @param _action The message\n @return True if the message is of type Transfer"},"id":28887,"implemented":true,"kind":"function","modifiers":[],"name":"isTransfer","nameLocation":"3849:10:103","nodeType":"FunctionDefinition","parameters":{"id":28876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28875,"mutability":"mutable","name":"_action","nameLocation":"3868:7:103","nodeType":"VariableDeclaration","scope":28887,"src":"3860:15:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":28874,"name":"bytes29","nodeType":"ElementaryTypeName","src":"3860:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"3859:17:103"},"returnParameters":{"id":28879,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28878,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28887,"src":"3900:4:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28877,"name":"bool","nodeType":"ElementaryTypeName","src":"3900:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3899:6:103"},"scope":29188,"src":"3840:115:103","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28912,"nodeType":"Block","src":"4206:98:103","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":28907,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28713,"src":"4283:5:103","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Types_$28713_$","typeString":"type(enum BridgeMessage.Types)"}},"id":28908,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4289:8:103","memberName":"Transfer","nodeType":"MemberAccess","referencedDeclaration":28712,"src":"4283:14:103","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}],"id":28906,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4276:6:103","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":28905,"name":"uint40","nodeType":"ElementaryTypeName","src":"4276:6:103","typeDescriptions":{}}},"id":28909,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4276:22:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"arguments":[{"expression":{"id":28899,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28713,"src":"4236:5:103","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Types_$28713_$","typeString":"type(enum BridgeMessage.Types)"}},"id":28900,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4242:8:103","memberName":"Transfer","nodeType":"MemberAccess","referencedDeclaration":28712,"src":"4236:14:103","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}},{"id":28901,"name":"_amnt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28890,"src":"4252:5:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28902,"name":"_transferId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28892,"src":"4259:11:103","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":28897,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4219:3:103","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":28898,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4223:12:103","memberName":"encodePacked","nodeType":"MemberAccess","src":"4219:16:103","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":28903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4219:52:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":28904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4272:3:103","memberName":"ref","nodeType":"MemberAccess","referencedDeclaration":50591,"src":"4219:56:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,uint40) pure returns (bytes29)"}},"id":28910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4219:80:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"functionReturnParameters":28896,"id":28911,"nodeType":"Return","src":"4212:87:103"}]},"documentation":{"id":28888,"nodeType":"StructuredDocumentation","src":"3959:152:103","text":" @notice Formats Transfer\n @param _amnt The transfer amount\n @param _transferId The unique identifier of the transfer\n @return"},"id":28913,"implemented":true,"kind":"function","modifiers":[],"name":"formatTransfer","nameLocation":"4123:14:103","nodeType":"FunctionDefinition","parameters":{"id":28893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28890,"mutability":"mutable","name":"_amnt","nameLocation":"4146:5:103","nodeType":"VariableDeclaration","scope":28913,"src":"4138:13:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28889,"name":"uint256","nodeType":"ElementaryTypeName","src":"4138:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28892,"mutability":"mutable","name":"_transferId","nameLocation":"4161:11:103","nodeType":"VariableDeclaration","scope":28913,"src":"4153:19:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28891,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4153:7:103","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4137:36:103"},"returnParameters":{"id":28896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28895,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28913,"src":"4197:7:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":28894,"name":"bytes29","nodeType":"ElementaryTypeName","src":"4197:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"4196:9:103"},"scope":29188,"src":"4114:190:103","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28929,"nodeType":"Block","src":"4519:61:103","statements":[{"expression":{"arguments":[{"expression":{"id":28923,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28917,"src":"4546:8:103","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":28924,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4555:6:103","memberName":"domain","nodeType":"MemberAccess","referencedDeclaration":37725,"src":"4546:15:103","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"id":28925,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28917,"src":"4563:8:103","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId memory"}},"id":28926,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4572:2:103","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":37727,"src":"4563:11:103","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":28922,"name":"formatTokenId","nodeType":"Identifier","overloadedDeclarations":[28930,28954],"referencedDeclaration":28954,"src":"4532:13:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint32_$_t_bytes32_$returns$_t_bytes29_$","typeString":"function (uint32,bytes32) pure returns (bytes29)"}},"id":28927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4532:43:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"functionReturnParameters":28921,"id":28928,"nodeType":"Return","src":"4525:50:103"}]},"documentation":{"id":28914,"nodeType":"StructuredDocumentation","src":"4308:128:103","text":" @notice Serializes a Token ID struct\n @param _tokenId The token id struct\n @return The formatted Token ID"},"id":28930,"implemented":true,"kind":"function","modifiers":[],"name":"formatTokenId","nameLocation":"4448:13:103","nodeType":"FunctionDefinition","parameters":{"id":28918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28917,"mutability":"mutable","name":"_tokenId","nameLocation":"4477:8:103","nodeType":"VariableDeclaration","scope":28930,"src":"4462:23:103","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_memory_ptr","typeString":"struct TokenId"},"typeName":{"id":28916,"nodeType":"UserDefinedTypeName","pathNode":{"id":28915,"name":"TokenId","nameLocations":["4462:7:103"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"4462:7:103"},"referencedDeclaration":37728,"src":"4462:7:103","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}},"visibility":"internal"}],"src":"4461:25:103"},"returnParameters":{"id":28921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28920,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28930,"src":"4510:7:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":28919,"name":"bytes29","nodeType":"ElementaryTypeName","src":"4510:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"4509:9:103"},"scope":29188,"src":"4439:141:103","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28953,"nodeType":"Block","src":"4829:75:103","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":28948,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28713,"src":"4884:5:103","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Types_$28713_$","typeString":"type(enum BridgeMessage.Types)"}},"id":28949,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4890:7:103","memberName":"TokenId","nodeType":"MemberAccess","referencedDeclaration":28710,"src":"4884:13:103","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}],"id":28947,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4877:6:103","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":28946,"name":"uint40","nodeType":"ElementaryTypeName","src":"4877:6:103","typeDescriptions":{}}},"id":28950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4877:21:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"arguments":[{"id":28942,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28933,"src":"4859:7:103","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":28943,"name":"_id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28935,"src":"4868:3:103","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":28940,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4842:3:103","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":28941,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4846:12:103","memberName":"encodePacked","nodeType":"MemberAccess","src":"4842:16:103","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":28944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4842:30:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":28945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4873:3:103","memberName":"ref","nodeType":"MemberAccess","referencedDeclaration":50591,"src":"4842:34:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,uint40) pure returns (bytes29)"}},"id":28951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4842:57:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"functionReturnParameters":28939,"id":28952,"nodeType":"Return","src":"4835:64:103"}]},"documentation":{"id":28931,"nodeType":"StructuredDocumentation","src":"4584:158:103","text":" @notice Creates a serialized Token ID from components\n @param _domain The domain\n @param _id The ID\n @return The formatted Token ID"},"id":28954,"implemented":true,"kind":"function","modifiers":[],"name":"formatTokenId","nameLocation":"4754:13:103","nodeType":"FunctionDefinition","parameters":{"id":28936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28933,"mutability":"mutable","name":"_domain","nameLocation":"4775:7:103","nodeType":"VariableDeclaration","scope":28954,"src":"4768:14:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":28932,"name":"uint32","nodeType":"ElementaryTypeName","src":"4768:6:103","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":28935,"mutability":"mutable","name":"_id","nameLocation":"4792:3:103","nodeType":"VariableDeclaration","scope":28954,"src":"4784:11:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28934,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4784:7:103","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4767:29:103"},"returnParameters":{"id":28939,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28938,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28954,"src":"4820:7:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":28937,"name":"bytes29","nodeType":"ElementaryTypeName","src":"4820:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"4819:9:103"},"scope":29188,"src":"4745:159:103","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28976,"nodeType":"Block","src":"5127:50:103","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":28971,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5166:1:103","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"34","id":28972,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5169:1:103","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"}],"expression":{"id":28969,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28957,"src":"5147:8:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":28970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5156:9:103","memberName":"indexUint","nodeType":"MemberAccess","referencedDeclaration":50882,"src":"5147:18:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_uint256_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint256,uint8) pure returns (uint256)"}},"id":28973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5147:24:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28968,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5140:6:103","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":28967,"name":"uint32","nodeType":"ElementaryTypeName","src":"5140:6:103","typeDescriptions":{}}},"id":28974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5140:32:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":28966,"id":28975,"nodeType":"Return","src":"5133:39:103"}]},"documentation":{"id":28955,"nodeType":"StructuredDocumentation","src":"4908:115:103","text":" @notice Retrieves the domain from a TokenID\n @param _tokenId The message\n @return The domain"},"id":28977,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":28960,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28957,"src":"5085:8:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},{"expression":{"id":28961,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28713,"src":"5095:5:103","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Types_$28713_$","typeString":"type(enum BridgeMessage.Types)"}},"id":28962,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5101:7:103","memberName":"TokenId","nodeType":"MemberAccess","referencedDeclaration":28710,"src":"5095:13:103","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}}],"id":28963,"kind":"modifierInvocation","modifierName":{"id":28959,"name":"typeAssert","nameLocations":["5074:10:103"],"nodeType":"IdentifierPath","referencedDeclaration":28741,"src":"5074:10:103"},"nodeType":"ModifierInvocation","src":"5074:35:103"}],"name":"domain","nameLocation":"5035:6:103","nodeType":"FunctionDefinition","parameters":{"id":28958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28957,"mutability":"mutable","name":"_tokenId","nameLocation":"5050:8:103","nodeType":"VariableDeclaration","scope":28977,"src":"5042:16:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":28956,"name":"bytes29","nodeType":"ElementaryTypeName","src":"5042:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"5041:18:103"},"returnParameters":{"id":28966,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28965,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28977,"src":"5119:6:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":28964,"name":"uint32","nodeType":"ElementaryTypeName","src":"5119:6:103","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"5118:8:103"},"scope":29188,"src":"5026:151:103","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28996,"nodeType":"Block","src":"5389:70:103","statements":[{"expression":{"arguments":[{"hexValue":"34","id":28992,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5448:1:103","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},{"hexValue":"3332","id":28993,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5451:2:103","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}],"expression":{"id":28990,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28980,"src":"5433:8:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":28991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5442:5:103","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":50852,"src":"5433:14:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_bytes32_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint256,uint8) pure returns (bytes32)"}},"id":28994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5433:21:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":28989,"id":28995,"nodeType":"Return","src":"5426:28:103"}]},"documentation":{"id":28978,"nodeType":"StructuredDocumentation","src":"5181:107:103","text":" @notice Retrieves the ID from a TokenID\n @param _tokenId The message\n @return The ID"},"id":28997,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":28983,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28980,"src":"5346:8:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},{"expression":{"id":28984,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28713,"src":"5356:5:103","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Types_$28713_$","typeString":"type(enum BridgeMessage.Types)"}},"id":28985,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5362:7:103","memberName":"TokenId","nodeType":"MemberAccess","referencedDeclaration":28710,"src":"5356:13:103","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}}],"id":28986,"kind":"modifierInvocation","modifierName":{"id":28982,"name":"typeAssert","nameLocations":["5335:10:103"],"nodeType":"IdentifierPath","referencedDeclaration":28741,"src":"5335:10:103"},"nodeType":"ModifierInvocation","src":"5335:35:103"}],"name":"id","nameLocation":"5300:2:103","nodeType":"FunctionDefinition","parameters":{"id":28981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28980,"mutability":"mutable","name":"_tokenId","nameLocation":"5311:8:103","nodeType":"VariableDeclaration","scope":28997,"src":"5303:16:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":28979,"name":"bytes29","nodeType":"ElementaryTypeName","src":"5303:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"5302:18:103"},"returnParameters":{"id":28989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28988,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28997,"src":"5380:7:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28987,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5380:7:103","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5379:9:103"},"scope":29188,"src":"5291:168:103","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29015,"nodeType":"Block","src":"5667:111:103","statements":[{"expression":{"arguments":[{"hexValue":"3136","id":29012,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5770:2:103","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"}],"expression":{"id":29010,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29000,"src":"5748:8:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":29011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5757:12:103","memberName":"indexAddress","nodeType":"MemberAccess","referencedDeclaration":50929,"src":"5748:21:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$returns$_t_address_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint256) pure returns (address)"}},"id":29013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5748:25:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":29009,"id":29014,"nodeType":"Return","src":"5741:32:103"}]},"documentation":{"id":28998,"nodeType":"StructuredDocumentation","src":"5463:100:103","text":" @notice Retrieves the EVM ID\n @param _tokenId The message\n @return The EVM ID"},"id":29016,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":29003,"name":"_tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29000,"src":"5624:8:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},{"expression":{"id":29004,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28713,"src":"5634:5:103","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Types_$28713_$","typeString":"type(enum BridgeMessage.Types)"}},"id":29005,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5640:7:103","memberName":"TokenId","nodeType":"MemberAccess","referencedDeclaration":28710,"src":"5634:13:103","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}}],"id":29006,"kind":"modifierInvocation","modifierName":{"id":29002,"name":"typeAssert","nameLocations":["5613:10:103"],"nodeType":"IdentifierPath","referencedDeclaration":28741,"src":"5613:10:103"},"nodeType":"ModifierInvocation","src":"5613:35:103"}],"name":"evmId","nameLocation":"5575:5:103","nodeType":"FunctionDefinition","parameters":{"id":29001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29000,"mutability":"mutable","name":"_tokenId","nameLocation":"5589:8:103","nodeType":"VariableDeclaration","scope":29016,"src":"5581:16:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":28999,"name":"bytes29","nodeType":"ElementaryTypeName","src":"5581:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"5580:18:103"},"returnParameters":{"id":29009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29008,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29016,"src":"5658:7:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29007,"name":"address","nodeType":"ElementaryTypeName","src":"5658:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5657:9:103"},"scope":29188,"src":"5566:212:103","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29033,"nodeType":"Block","src":"5979:60:103","statements":[{"expression":{"arguments":[{"arguments":[{"id":29028,"name":"TOKEN_ID_LEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28716,"src":"6017:12:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"31","id":29029,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6031:1:103","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":29026,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29019,"src":"5998:8:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":29027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6007:9:103","memberName":"indexUint","nodeType":"MemberAccess","referencedDeclaration":50882,"src":"5998:18:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_uint256_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint256,uint8) pure returns (uint256)"}},"id":29030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5998:35:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29025,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5992:5:103","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":29024,"name":"uint8","nodeType":"ElementaryTypeName","src":"5992:5:103","typeDescriptions":{}}},"id":29031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5992:42:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":29023,"id":29032,"nodeType":"Return","src":"5985:49:103"}]},"documentation":{"id":29017,"nodeType":"StructuredDocumentation","src":"5782:129:103","text":" @notice Retrieves the action identifier from message\n @param _message The action\n @return The message type"},"id":29034,"implemented":true,"kind":"function","modifiers":[],"name":"msgType","nameLocation":"5923:7:103","nodeType":"FunctionDefinition","parameters":{"id":29020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29019,"mutability":"mutable","name":"_message","nameLocation":"5939:8:103","nodeType":"VariableDeclaration","scope":29034,"src":"5931:16:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":29018,"name":"bytes29","nodeType":"ElementaryTypeName","src":"5931:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"5930:18:103"},"returnParameters":{"id":29023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29022,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29034,"src":"5972:5:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29021,"name":"uint8","nodeType":"ElementaryTypeName","src":"5972:5:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"5971:7:103"},"scope":29188,"src":"5914:125:103","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29051,"nodeType":"Block","src":"6232:48:103","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":29046,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6269:1:103","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"31","id":29047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6272:1:103","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"expression":{"id":29044,"name":"_action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29037,"src":"6251:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":29045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6259:9:103","memberName":"indexUint","nodeType":"MemberAccess","referencedDeclaration":50882,"src":"6251:17:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_uint256_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint256,uint8) pure returns (uint256)"}},"id":29048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6251:23:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29043,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6245:5:103","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":29042,"name":"uint8","nodeType":"ElementaryTypeName","src":"6245:5:103","typeDescriptions":{}}},"id":29049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6245:30:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":29041,"id":29050,"nodeType":"Return","src":"6238:37:103"}]},"documentation":{"id":29035,"nodeType":"StructuredDocumentation","src":"6043:119:103","text":" @notice Retrieves the identifier from action\n @param _action The action\n @return The action type"},"id":29052,"implemented":true,"kind":"function","modifiers":[],"name":"actionType","nameLocation":"6174:10:103","nodeType":"FunctionDefinition","parameters":{"id":29038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29037,"mutability":"mutable","name":"_action","nameLocation":"6193:7:103","nodeType":"VariableDeclaration","scope":29052,"src":"6185:15:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":29036,"name":"bytes29","nodeType":"ElementaryTypeName","src":"6185:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"6184:17:103"},"returnParameters":{"id":29041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29040,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29052,"src":"6225:5:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29039,"name":"uint8","nodeType":"ElementaryTypeName","src":"6225:5:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"6224:7:103"},"scope":29188,"src":"6165:115:103","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29066,"nodeType":"Block","src":"6481:94:103","statements":[{"expression":{"arguments":[{"hexValue":"31","id":29062,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6564:1:103","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"hexValue":"3332","id":29063,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6567:2:103","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}],"expression":{"id":29060,"name":"_transferAction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29055,"src":"6538:15:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":29061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6554:9:103","memberName":"indexUint","nodeType":"MemberAccess","referencedDeclaration":50882,"src":"6538:25:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_uint256_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint256,uint8) pure returns (uint256)"}},"id":29064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6538:32:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":29059,"id":29065,"nodeType":"Return","src":"6531:39:103"}]},"documentation":{"id":29053,"nodeType":"StructuredDocumentation","src":"6284:123:103","text":" @notice Retrieves the amount from a Transfer\n @param _transferAction The message\n @return The amount"},"id":29067,"implemented":true,"kind":"function","modifiers":[],"name":"amnt","nameLocation":"6419:4:103","nodeType":"FunctionDefinition","parameters":{"id":29056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29055,"mutability":"mutable","name":"_transferAction","nameLocation":"6432:15:103","nodeType":"VariableDeclaration","scope":29067,"src":"6424:23:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":29054,"name":"bytes29","nodeType":"ElementaryTypeName","src":"6424:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"6423:25:103"},"returnParameters":{"id":29059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29058,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29067,"src":"6472:7:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29057,"name":"uint256","nodeType":"ElementaryTypeName","src":"6472:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6471:9:103"},"scope":29188,"src":"6410:165:103","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29081,"nodeType":"Block","src":"6783:110:103","statements":[{"expression":{"arguments":[{"hexValue":"3333","id":29077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6881:2:103","typeDescriptions":{"typeIdentifier":"t_rational_33_by_1","typeString":"int_const 33"},"value":"33"},{"hexValue":"3332","id":29078,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6885:2:103","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_33_by_1","typeString":"int_const 33"},{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}],"expression":{"id":29075,"name":"_transferAction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29070,"src":"6859:15:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":29076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6875:5:103","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":50852,"src":"6859:21:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_bytes32_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint256,uint8) pure returns (bytes32)"}},"id":29079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6859:29:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":29074,"id":29080,"nodeType":"Return","src":"6852:36:103"}]},"documentation":{"id":29068,"nodeType":"StructuredDocumentation","src":"6579:124:103","text":" @notice Retrieves the transfer id from a Transfer\n @param _transferAction The message\n @return The id"},"id":29082,"implemented":true,"kind":"function","modifiers":[],"name":"transferId","nameLocation":"6715:10:103","nodeType":"FunctionDefinition","parameters":{"id":29071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29070,"mutability":"mutable","name":"_transferAction","nameLocation":"6734:15:103","nodeType":"VariableDeclaration","scope":29082,"src":"6726:23:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":29069,"name":"bytes29","nodeType":"ElementaryTypeName","src":"6726:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"6725:25:103"},"returnParameters":{"id":29074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29073,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29082,"src":"6774:7:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":29072,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6774:7:103","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6773:9:103"},"scope":29188,"src":"6706:187:103","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29106,"nodeType":"Block","src":"7116:72:103","statements":[{"expression":{"arguments":[{"hexValue":"30","id":29097,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7144:1:103","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":29098,"name":"TOKEN_ID_LEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28716,"src":"7147:12:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":29101,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28713,"src":"7168:5:103","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Types_$28713_$","typeString":"type(enum BridgeMessage.Types)"}},"id":29102,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7174:7:103","memberName":"TokenId","nodeType":"MemberAccess","referencedDeclaration":28710,"src":"7168:13:103","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}],"id":29100,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7161:6:103","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":29099,"name":"uint40","nodeType":"ElementaryTypeName","src":"7161:6:103","typeDescriptions":{}}},"id":29103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7161:21:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":29095,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29085,"src":"7129:8:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":29096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7138:5:103","memberName":"slice","nodeType":"MemberAccess","referencedDeclaration":50729,"src":"7129:14:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint256_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint256,uint256,uint40) pure returns (bytes29)"}},"id":29104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7129:54:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"functionReturnParameters":29094,"id":29105,"nodeType":"Return","src":"7122:61:103"}]},"documentation":{"id":29083,"nodeType":"StructuredDocumentation","src":"6897:113:103","text":" @notice Retrieves the token ID from a Message\n @param _message The message\n @return The ID"},"id":29107,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":29088,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29085,"src":"7073:8:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},{"expression":{"id":29089,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28713,"src":"7083:5:103","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Types_$28713_$","typeString":"type(enum BridgeMessage.Types)"}},"id":29090,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7089:7:103","memberName":"Message","nodeType":"MemberAccess","referencedDeclaration":28711,"src":"7083:13:103","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}}],"id":29091,"kind":"modifierInvocation","modifierName":{"id":29087,"name":"typeAssert","nameLocations":["7062:10:103"],"nodeType":"IdentifierPath","referencedDeclaration":28741,"src":"7062:10:103"},"nodeType":"ModifierInvocation","src":"7062:35:103"}],"name":"tokenId","nameLocation":"7022:7:103","nodeType":"FunctionDefinition","parameters":{"id":29086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29085,"mutability":"mutable","name":"_message","nameLocation":"7038:8:103","nodeType":"VariableDeclaration","scope":29107,"src":"7030:16:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":29084,"name":"bytes29","nodeType":"ElementaryTypeName","src":"7030:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"7029:18:103"},"returnParameters":{"id":29094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29093,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29107,"src":"7107:7:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":29092,"name":"bytes29","nodeType":"ElementaryTypeName","src":"7107:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"7106:9:103"},"scope":29188,"src":"7013:175:103","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29144,"nodeType":"Block","src":"7417:167:103","statements":[{"assignments":[29121],"declarations":[{"constant":false,"id":29121,"mutability":"mutable","name":"_actionLen","nameLocation":"7431:10:103","nodeType":"VariableDeclaration","scope":29144,"src":"7423:18:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29120,"name":"uint256","nodeType":"ElementaryTypeName","src":"7423:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29127,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29122,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29110,"src":"7444:8:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":29123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7453:3:103","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":50665,"src":"7444:12:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":29124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7444:14:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":29125,"name":"TOKEN_ID_LEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28716,"src":"7461:12:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7444:29:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7423:50:103"},{"assignments":[29129],"declarations":[{"constant":false,"id":29129,"mutability":"mutable","name":"_type","nameLocation":"7486:5:103","nodeType":"VariableDeclaration","scope":29144,"src":"7479:12:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":29128,"name":"uint40","nodeType":"ElementaryTypeName","src":"7479:6:103","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"id":29136,"initialValue":{"arguments":[{"arguments":[{"id":29133,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29110,"src":"7509:8:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":29132,"name":"msgType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29034,"src":"7501:7:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint8_$","typeString":"function (bytes29) pure returns (uint8)"}},"id":29134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7501:17:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":29131,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7494:6:103","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":29130,"name":"uint40","nodeType":"ElementaryTypeName","src":"7494:6:103","typeDescriptions":{}}},"id":29135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7494:25:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"VariableDeclarationStatement","src":"7479:40:103"},{"expression":{"arguments":[{"id":29139,"name":"TOKEN_ID_LEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28716,"src":"7547:12:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29140,"name":"_actionLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29121,"src":"7561:10:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29141,"name":"_type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29129,"src":"7573:5:103","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":29137,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29110,"src":"7532:8:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":29138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7541:5:103","memberName":"slice","nodeType":"MemberAccess","referencedDeclaration":50729,"src":"7532:14:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint256_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint256,uint256,uint40) pure returns (bytes29)"}},"id":29142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7532:47:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"functionReturnParameters":29119,"id":29143,"nodeType":"Return","src":"7525:54:103"}]},"documentation":{"id":29108,"nodeType":"StructuredDocumentation","src":"7192:120:103","text":" @notice Retrieves the action data from a Message\n @param _message The message\n @return The action"},"id":29145,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":29113,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29110,"src":"7374:8:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},{"expression":{"id":29114,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28713,"src":"7384:5:103","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Types_$28713_$","typeString":"type(enum BridgeMessage.Types)"}},"id":29115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7390:7:103","memberName":"Message","nodeType":"MemberAccess","referencedDeclaration":28711,"src":"7384:13:103","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}}],"id":29116,"kind":"modifierInvocation","modifierName":{"id":29112,"name":"typeAssert","nameLocations":["7363:10:103"],"nodeType":"IdentifierPath","referencedDeclaration":28741,"src":"7363:10:103"},"nodeType":"ModifierInvocation","src":"7363:35:103"}],"name":"action","nameLocation":"7324:6:103","nodeType":"FunctionDefinition","parameters":{"id":29111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29110,"mutability":"mutable","name":"_message","nameLocation":"7339:8:103","nodeType":"VariableDeclaration","scope":29145,"src":"7331:16:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":29109,"name":"bytes29","nodeType":"ElementaryTypeName","src":"7331:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"7330:18:103"},"returnParameters":{"id":29119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29118,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29145,"src":"7408:7:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":29117,"name":"bytes29","nodeType":"ElementaryTypeName","src":"7408:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"7407:9:103"},"scope":29188,"src":"7315:269:103","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29171,"nodeType":"Block","src":"7777:142:103","statements":[{"condition":{"arguments":[{"id":29154,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29148,"src":"7808:8:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":29153,"name":"isValidMessageLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28775,"src":"7787:20:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bool_$","typeString":"function (bytes29) pure returns (bool)"}},"id":29155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7787:30:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29166,"nodeType":"IfStatement","src":"7783:96:103","trueBody":{"id":29165,"nodeType":"Block","src":"7819:60:103","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":29160,"name":"Types","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28713,"src":"7857:5:103","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Types_$28713_$","typeString":"type(enum BridgeMessage.Types)"}},"id":29161,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7863:7:103","memberName":"Message","nodeType":"MemberAccess","referencedDeclaration":28711,"src":"7857:13:103","typeDescriptions":{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Types_$28713","typeString":"enum BridgeMessage.Types"}],"id":29159,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7850:6:103","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":29158,"name":"uint40","nodeType":"ElementaryTypeName","src":"7850:6:103","typeDescriptions":{}}},"id":29162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7850:21:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":29156,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29148,"src":"7834:8:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":29157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7843:6:103","memberName":"castTo","nodeType":"MemberAccess","referencedDeclaration":50483,"src":"7834:15:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint40) pure returns (bytes29)"}},"id":29163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7834:38:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"functionReturnParameters":29152,"id":29164,"nodeType":"Return","src":"7827:45:103"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29167,"name":"TypedMemView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51265,"src":"7891:12:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TypedMemView_$51265_$","typeString":"type(library TypedMemView)"}},"id":29168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7904:8:103","memberName":"nullView","nodeType":"MemberAccess","referencedDeclaration":50351,"src":"7891:21:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_bytes29_$","typeString":"function () pure returns (bytes29)"}},"id":29169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7891:23:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"functionReturnParameters":29152,"id":29170,"nodeType":"Return","src":"7884:30:103"}]},"documentation":{"id":29146,"nodeType":"StructuredDocumentation","src":"7588:114:103","text":" @notice Converts to a Message\n @param _message The message\n @return The newly typed message"},"id":29172,"implemented":true,"kind":"function","modifiers":[],"name":"tryAsMessage","nameLocation":"7714:12:103","nodeType":"FunctionDefinition","parameters":{"id":29149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29148,"mutability":"mutable","name":"_message","nameLocation":"7735:8:103","nodeType":"VariableDeclaration","scope":29172,"src":"7727:16:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":29147,"name":"bytes29","nodeType":"ElementaryTypeName","src":"7727:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"7726:18:103"},"returnParameters":{"id":29152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29151,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29172,"src":"7768:7:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":29150,"name":"bytes29","nodeType":"ElementaryTypeName","src":"7768:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"7767:9:103"},"scope":29188,"src":"7705:214:103","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29186,"nodeType":"Block","src":"8117:51:103","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":29181,"name":"_view","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29175,"src":"8143:5:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":29180,"name":"tryAsMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29172,"src":"8130:12:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bytes29_$","typeString":"function (bytes29) pure returns (bytes29)"}},"id":29182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8130:19:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":29183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8150:11:103","memberName":"assertValid","nodeType":"MemberAccess","referencedDeclaration":50421,"src":"8130:31:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bytes29_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (bytes29)"}},"id":29184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8130:33:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"functionReturnParameters":29179,"id":29185,"nodeType":"Return","src":"8123:40:103"}]},"documentation":{"id":29173,"nodeType":"StructuredDocumentation","src":"7923:121:103","text":" @notice Asserts that the message is of type Message\n @param _view The message\n @return The message"},"id":29187,"implemented":true,"kind":"function","modifiers":[],"name":"mustBeMessage","nameLocation":"8056:13:103","nodeType":"FunctionDefinition","parameters":{"id":29176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29175,"mutability":"mutable","name":"_view","nameLocation":"8078:5:103","nodeType":"VariableDeclaration","scope":29187,"src":"8070:13:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":29174,"name":"bytes29","nodeType":"ElementaryTypeName","src":"8070:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"8069:15:103"},"returnParameters":{"id":29179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29178,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29187,"src":"8108:7:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":29177,"name":"bytes29","nodeType":"ElementaryTypeName","src":"8108:7:103","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"8107:9:103"},"scope":29188,"src":"8047:121:103","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":29189,"src":"230:7940:103","usedErrors":[]}],"src":"46:8125:103"},"id":103},"contracts/core/connext/libraries/Constants.sol":{"ast":{"absolutePath":"contracts/core/connext/libraries/Constants.sol","exportedSymbols":{"Constants":[29304]},"id":29305,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":29190,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:104"},{"abstract":false,"baseContracts":[],"canonicalName":"Constants","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":29304,"linearizedBaseContracts":[29304],"name":"Constants","nameLocation":"79:9:104","nodeType":"ContractDefinition","nodes":[{"constant":true,"documentation":{"id":29191,"nodeType":"StructuredDocumentation","src":"142:55:104","text":" @notice Sets the initial lp fee at 5 bps"},"functionSelector":"834f3b70","id":29194,"mutability":"constant","name":"INITIAL_LIQUIDITY_FEE_NUMERATOR","nameLocation":"224:31:104","nodeType":"VariableDeclaration","scope":29304,"src":"200:63:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29192,"name":"uint256","nodeType":"ElementaryTypeName","src":"200:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"395f393935","id":29193,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"258:5:104","typeDescriptions":{"typeIdentifier":"t_rational_9995_by_1","typeString":"int_const 9995"},"value":"9_995"},"visibility":"public"},{"constant":true,"documentation":{"id":29195,"nodeType":"StructuredDocumentation","src":"268:64:104","text":" @notice Sets the initial max routers per transfer"},"functionSelector":"51a7b98f","id":29198,"mutability":"constant","name":"INITIAL_MAX_ROUTERS","nameLocation":"359:19:104","nodeType":"VariableDeclaration","scope":29304,"src":"335:47:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29196,"name":"uint256","nodeType":"ElementaryTypeName","src":"335:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"35","id":29197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"381:1:104","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"visibility":"public"},{"constant":true,"documentation":{"id":29199,"nodeType":"StructuredDocumentation","src":"387:64:104","text":" @notice Sets the initial max routers per transfer"},"functionSelector":"f1828d56","id":29202,"mutability":"constant","name":"INITIAL_AAVE_REFERRAL_CODE","nameLocation":"477:26:104","nodeType":"VariableDeclaration","scope":29304,"src":"454:53:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":29200,"name":"uint16","nodeType":"ElementaryTypeName","src":"454:6:104","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"value":{"hexValue":"30","id":29201,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"506:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"public"},{"constant":true,"documentation":{"id":29203,"nodeType":"StructuredDocumentation","src":"612:54:104","text":" @notice Reentrancy modifier for diamond"},"id":29206,"mutability":"constant","name":"NOT_ENTERED","nameLocation":"695:11:104","nodeType":"VariableDeclaration","scope":29304,"src":"669:41:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29204,"name":"uint256","nodeType":"ElementaryTypeName","src":"669:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":29205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"709:1:104","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"internal"},{"constant":true,"documentation":{"id":29207,"nodeType":"StructuredDocumentation","src":"715:54:104","text":" @notice Reentrancy modifier for diamond"},"id":29210,"mutability":"constant","name":"ENTERED","nameLocation":"798:7:104","nodeType":"VariableDeclaration","scope":29304,"src":"772:37:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29208,"name":"uint256","nodeType":"ElementaryTypeName","src":"772:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":29209,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"808:1:104","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"internal"},{"constant":true,"documentation":{"id":29211,"nodeType":"StructuredDocumentation","src":"814:51:104","text":" @notice Contains hash of empty bytes"},"id":29216,"mutability":"constant","name":"EMPTY_HASH","nameLocation":"894:10:104","nodeType":"VariableDeclaration","scope":29304,"src":"868:52:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":29212,"name":"bytes32","nodeType":"ElementaryTypeName","src":"868:7:104","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"","id":29214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"917:2:104","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":29213,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"907:9:104","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":29215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"907:13:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":true,"documentation":{"id":29217,"nodeType":"StructuredDocumentation","src":"925:49:104","text":" @notice Denominator for BPS values"},"functionSelector":"60e26bb4","id":29220,"mutability":"constant","name":"BPS_FEE_DENOMINATOR","nameLocation":"1001:19:104","nodeType":"VariableDeclaration","scope":29304,"src":"977:52:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29218,"name":"uint256","nodeType":"ElementaryTypeName","src":"977:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31305f303030","id":29219,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1023:6:104","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10_000"},"visibility":"public"},{"constant":true,"documentation":{"id":29221,"nodeType":"StructuredDocumentation","src":"1034:57:104","text":" @notice Value for delay used on governance"},"functionSelector":"b0b54895","id":29224,"mutability":"constant","name":"GOVERNANCE_DELAY","nameLocation":"1118:16:104","nodeType":"VariableDeclaration","scope":29304,"src":"1094:49:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29222,"name":"uint256","nodeType":"ElementaryTypeName","src":"1094:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"37","id":29223,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1137:6:104","subdenomination":"days","typeDescriptions":{"typeIdentifier":"t_rational_604800_by_1","typeString":"int_const 604800"},"value":"7"},"visibility":"public"},{"constant":true,"documentation":{"id":29225,"nodeType":"StructuredDocumentation","src":"1148:146:104","text":" @notice Required gas amount to be leftover after passing in `gasleft` when\n executing calldata (see `_executeCalldata` method)."},"functionSelector":"28c8d10e","id":29228,"mutability":"constant","name":"EXECUTE_CALLDATA_RESERVE_GAS","nameLocation":"1321:28:104","nodeType":"VariableDeclaration","scope":29304,"src":"1297:61:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29226,"name":"uint256","nodeType":"ElementaryTypeName","src":"1297:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31305f303030","id":29227,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1352:6:104","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10_000"},"visibility":"public"},{"constant":true,"documentation":{"id":29229,"nodeType":"StructuredDocumentation","src":"1363:43:104","text":" @notice Portal referral code"},"functionSelector":"05a363de","id":29232,"mutability":"constant","name":"AAVE_REFERRAL_CODE","nameLocation":"1432:18:104","nodeType":"VariableDeclaration","scope":29304,"src":"1409:45:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":29230,"name":"uint16","nodeType":"ElementaryTypeName","src":"1409:6:104","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"value":{"hexValue":"30","id":29231,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1453:1:104","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"public"},{"constant":true,"documentation":{"id":29233,"nodeType":"StructuredDocumentation","src":"1497:77:104","text":" @notice Valid period for a price delivered by the price oracle"},"functionSelector":"443841ef","id":29236,"mutability":"constant","name":"ORACLE_VALID_PERIOD","nameLocation":"1601:19:104","nodeType":"VariableDeclaration","scope":29304,"src":"1577:55:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29234,"name":"uint256","nodeType":"ElementaryTypeName","src":"1577:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":29235,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1623:9:104","subdenomination":"minutes","typeDescriptions":{"typeIdentifier":"t_rational_60_by_1","typeString":"int_const 60"},"value":"1"},"visibility":"public"},{"constant":true,"documentation":{"id":29237,"nodeType":"StructuredDocumentation","src":"1637:92:104","text":" @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`"},"functionSelector":"43bbce58","id":29240,"mutability":"constant","name":"FUTURE_TIME_BUFFER","nameLocation":"1756:18:104","nodeType":"VariableDeclaration","scope":29304,"src":"1732:46:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29238,"name":"uint256","nodeType":"ElementaryTypeName","src":"1732:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"33","id":29239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1777:1:104","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"visibility":"public"},{"constant":true,"documentation":{"id":29241,"nodeType":"StructuredDocumentation","src":"1783:63:104","text":" @notice Defalt decimals values are normalized to"},"functionSelector":"dab597ea","id":29247,"mutability":"constant","name":"DEFAULT_NORMALIZED_DECIMALS","nameLocation":"1871:27:104","nodeType":"VariableDeclaration","scope":29304,"src":"1849:61:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29242,"name":"uint8","nodeType":"ElementaryTypeName","src":"1849:5:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"arguments":[{"hexValue":"3138","id":29245,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1907:2:104","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"}],"id":29244,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1901:5:104","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":29243,"name":"uint8","nodeType":"ElementaryTypeName","src":"1901:5:104","typeDescriptions":{}}},"id":29246,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1901:9:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"documentation":{"id":29248,"nodeType":"StructuredDocumentation","src":"1915:88:104","text":" @notice Bytes of return data copied back when using `excessivelySafeCall`"},"functionSelector":"c8d5d89e","id":29251,"mutability":"constant","name":"DEFAULT_COPY_BYTES","nameLocation":"2029:18:104","nodeType":"VariableDeclaration","scope":29304,"src":"2006:47:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":29249,"name":"uint16","nodeType":"ElementaryTypeName","src":"2006:6:104","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"value":{"hexValue":"323536","id":29250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2050:3:104","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"visibility":"public"},{"constant":true,"documentation":{"id":29252,"nodeType":"StructuredDocumentation","src":"2058:72:104","text":" @notice Valid deadline extension used when swapping (1hr)"},"functionSelector":"59f491c8","id":29255,"mutability":"constant","name":"DEFAULT_DEADLINE_EXTENSION","nameLocation":"2157:26:104","nodeType":"VariableDeclaration","scope":29304,"src":"2133:57:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29253,"name":"uint256","nodeType":"ElementaryTypeName","src":"2133:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"33363030","id":29254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2186:4:104","typeDescriptions":{"typeIdentifier":"t_rational_3600_by_1","typeString":"int_const 3600"},"value":"3600"},"visibility":"public"},{"constant":true,"documentation":{"id":29256,"nodeType":"StructuredDocumentation","src":"2220:588:104","text":" @notice the precision all pools tokens will be converted to\n @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\n The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\n we do not have pools supporting this number of token, allowing a larger value leaves\n the possibility open to pool multiple stable local/adopted pairs, garnering greater\n capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\n default of 32 and what we will realistically host in pools."},"functionSelector":"30d356c4","id":29259,"mutability":"constant","name":"MINIMUM_POOLED_TOKENS","nameLocation":"2835:21:104","nodeType":"VariableDeclaration","scope":29304,"src":"2811:49:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29257,"name":"uint256","nodeType":"ElementaryTypeName","src":"2811:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":29258,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2859:1:104","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"public"},{"constant":true,"functionSelector":"6037af42","id":29262,"mutability":"constant","name":"MAXIMUM_POOLED_TOKENS","nameLocation":"2888:21:104","nodeType":"VariableDeclaration","scope":29304,"src":"2864:50:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29260,"name":"uint256","nodeType":"ElementaryTypeName","src":"2864:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3136","id":29261,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2912:2:104","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"visibility":"public"},{"constant":true,"documentation":{"id":29263,"nodeType":"StructuredDocumentation","src":"2919:163:104","text":" @notice the precision all pools tokens will be converted to\n @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`"},"functionSelector":"0296ab50","id":29266,"mutability":"constant","name":"POOL_PRECISION_DECIMALS","nameLocation":"3107:23:104","nodeType":"VariableDeclaration","scope":29304,"src":"3085:50:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29264,"name":"uint8","nodeType":"ElementaryTypeName","src":"3085:5:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"3138","id":29265,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3133:2:104","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"visibility":"public"},{"constant":true,"documentation":{"id":29267,"nodeType":"StructuredDocumentation","src":"3140:258:104","text":" @notice the denominator used to calculate admin and LP fees. For example, an\n LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\n @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`"},"functionSelector":"d73792a9","id":29270,"mutability":"constant","name":"FEE_DENOMINATOR","nameLocation":"3425:15:104","nodeType":"VariableDeclaration","scope":29304,"src":"3401:46:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29268,"name":"uint256","nodeType":"ElementaryTypeName","src":"3401:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653130","id":29269,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3443:4:104","typeDescriptions":{"typeIdentifier":"t_rational_10000000000_by_1","typeString":"int_const 10000000000"},"value":"1e10"},"visibility":"public"},{"constant":true,"documentation":{"id":29271,"nodeType":"StructuredDocumentation","src":"3452:153:104","text":" @notice Max swap fee is 1% or 100bps of each swap\n @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`"},"functionSelector":"ab3d8544","id":29274,"mutability":"constant","name":"MAX_SWAP_FEE","nameLocation":"3632:12:104","nodeType":"VariableDeclaration","scope":29304,"src":"3608:42:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29272,"name":"uint256","nodeType":"ElementaryTypeName","src":"3608:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"316538","id":29273,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3647:3:104","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"value":"1e8"},"visibility":"public"},{"constant":true,"documentation":{"id":29275,"nodeType":"StructuredDocumentation","src":"3655:331:104","text":" @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\n Instead it takes a certain % of the swapFee. Therefore it has no impact on the\n users but only on the earnings of LPs\n @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`"},"functionSelector":"f3de0362","id":29278,"mutability":"constant","name":"MAX_ADMIN_FEE","nameLocation":"4013:13:104","nodeType":"VariableDeclaration","scope":29304,"src":"3989:44:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29276,"name":"uint256","nodeType":"ElementaryTypeName","src":"3989:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653130","id":29277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4029:4:104","typeDescriptions":{"typeIdentifier":"t_rational_10000000000_by_1","typeString":"int_const 10000000000"},"value":"1e10"},"visibility":"public"},{"constant":true,"documentation":{"id":29279,"nodeType":"StructuredDocumentation","src":"4038:149:104","text":" @notice constant value used as max loop limit\n @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`"},"functionSelector":"c86a23ee","id":29282,"mutability":"constant","name":"MAX_LOOP_LIMIT","nameLocation":"4214:14:104","nodeType":"VariableDeclaration","scope":29304,"src":"4190:44:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29280,"name":"uint256","nodeType":"ElementaryTypeName","src":"4190:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"323536","id":29281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4231:3:104","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"visibility":"public"},{"constant":true,"id":29285,"mutability":"constant","name":"REMOVE_DELAY","nameLocation":"4341:12:104","nodeType":"VariableDeclaration","scope":29304,"src":"4315:47:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29283,"name":"uint256","nodeType":"ElementaryTypeName","src":"4315:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"37","id":29284,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4356:6:104","subdenomination":"days","typeDescriptions":{"typeIdentifier":"t_rational_604800_by_1","typeString":"int_const 604800"},"value":"7"},"visibility":"internal"},{"constant":true,"documentation":{"id":29286,"nodeType":"StructuredDocumentation","src":"4367:158:104","text":" @notice constant values used in ramping A calculations\n @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`"},"functionSelector":"d011f918","id":29289,"mutability":"constant","name":"A_PRECISION","nameLocation":"4552:11:104","nodeType":"VariableDeclaration","scope":29304,"src":"4528:41:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29287,"name":"uint256","nodeType":"ElementaryTypeName","src":"4528:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"313030","id":29288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4566:3:104","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"visibility":"public"},{"constant":true,"functionSelector":"39698415","id":29294,"mutability":"constant","name":"MAX_A","nameLocation":"4597:5:104","nodeType":"VariableDeclaration","scope":29304,"src":"4573:37:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29290,"name":"uint256","nodeType":"ElementaryTypeName","src":"4573:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_1000000_by_1","typeString":"int_const 1000000"},"id":29293,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":29291,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4605:2:104","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"36","id":29292,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4609:1:104","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"4605:5:104","typeDescriptions":{"typeIdentifier":"t_rational_1000000_by_1","typeString":"int_const 1000000"}},"visibility":"public"},{"constant":true,"functionSelector":"ab5ac061","id":29297,"mutability":"constant","name":"MAX_A_CHANGE","nameLocation":"4638:12:104","nodeType":"VariableDeclaration","scope":29304,"src":"4614:40:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29295,"name":"uint256","nodeType":"ElementaryTypeName","src":"4614:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":29296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4653:1:104","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"public"},{"constant":true,"functionSelector":"06e9481c","id":29300,"mutability":"constant","name":"MIN_RAMP_TIME","nameLocation":"4682:13:104","nodeType":"VariableDeclaration","scope":29304,"src":"4658:47:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29298,"name":"uint256","nodeType":"ElementaryTypeName","src":"4658:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3134","id":29299,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4698:7:104","subdenomination":"days","typeDescriptions":{"typeIdentifier":"t_rational_1209600_by_1","typeString":"int_const 1209600"},"value":"14"},"visibility":"public"},{"constant":true,"functionSelector":"19b693e9","id":29303,"mutability":"constant","name":"MIN_RAMP_DELAY","nameLocation":"4733:14:104","nodeType":"VariableDeclaration","scope":29304,"src":"4709:47:104","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29301,"name":"uint256","nodeType":"ElementaryTypeName","src":"4709:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":29302,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4750:6:104","subdenomination":"days","typeDescriptions":{"typeIdentifier":"t_rational_86400_by_1","typeString":"int_const 86400"},"value":"1"},"visibility":"public"}],"scope":29305,"src":"71:4688:104","usedErrors":[]}],"src":"46:4714:104"},"id":104},"contracts/core/connext/libraries/LibConnextStorage.sol":{"ast":{"absolutePath":"contracts/core/connext/libraries/LibConnextStorage.sol","exportedSymbols":{"AppStorage":[29536],"DestinationTransferStatus":[29324],"ExecuteArgs":[29365],"IConnectorManager":[47805],"IStableSwap":[27329],"LibConnextStorage":[29545],"Role":[29319],"RouterConfig":[29378],"SwapUtils":[34244],"TokenConfig":[29395],"TokenId":[37728],"TransferInfo":[29351]},"id":29546,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":29306,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:105"},{"absolutePath":"contracts/core/connext/interfaces/IStableSwap.sol","file":"../interfaces/IStableSwap.sol","id":29308,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29546,"sourceUnit":27330,"src":"64:58:105","symbolAliases":[{"foreign":{"id":29307,"name":"IStableSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27329,"src":"72:11:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/IConnectorManager.sol","file":"../../../messaging/interfaces/IConnectorManager.sol","id":29310,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29546,"sourceUnit":47806,"src":"123:86:105","symbolAliases":[{"foreign":{"id":29309,"name":"IConnectorManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47805,"src":"131:17:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/SwapUtils.sol","file":"./SwapUtils.sol","id":29312,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29546,"sourceUnit":34245,"src":"210:42:105","symbolAliases":[{"foreign":{"id":29311,"name":"SwapUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34244,"src":"218:9:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/TokenId.sol","file":"./TokenId.sol","id":29314,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29546,"sourceUnit":37729,"src":"253:38:105","symbolAliases":[{"foreign":{"id":29313,"name":"TokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37728,"src":"261:7:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"Role","id":29319,"members":[{"id":29315,"name":"None","nameLocation":"786:4:105","nodeType":"EnumValue","src":"786:4:105"},{"id":29316,"name":"RouterAdmin","nameLocation":"794:11:105","nodeType":"EnumValue","src":"794:11:105"},{"id":29317,"name":"Watcher","nameLocation":"809:7:105","nodeType":"EnumValue","src":"809:7:105"},{"id":29318,"name":"Admin","nameLocation":"820:5:105","nodeType":"EnumValue","src":"820:5:105"}],"name":"Role","nameLocation":"777:4:105","nodeType":"EnumDefinition","src":"772:55:105"},{"canonicalName":"DestinationTransferStatus","id":29324,"members":[{"id":29320,"name":"None","nameLocation":"1080:4:105","nodeType":"EnumValue","src":"1080:4:105"},{"id":29321,"name":"Reconciled","nameLocation":"1093:10:105","nodeType":"EnumValue","src":"1093:10:105"},{"id":29322,"name":"Executed","nameLocation":"1112:8:105","nodeType":"EnumValue","src":"1112:8:105"},{"id":29323,"name":"Completed","nameLocation":"1129:9:105","nodeType":"EnumValue","src":"1129:9:105"}],"name":"DestinationTransferStatus","nameLocation":"1050:25:105","nodeType":"EnumDefinition","src":"1045:124:105"},{"canonicalName":"TransferInfo","id":29351,"members":[{"constant":false,"id":29326,"mutability":"mutable","name":"originDomain","nameLocation":"2713:12:105","nodeType":"VariableDeclaration","scope":29351,"src":"2706:19:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":29325,"name":"uint32","nodeType":"ElementaryTypeName","src":"2706:6:105","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":29328,"mutability":"mutable","name":"destinationDomain","nameLocation":"2736:17:105","nodeType":"VariableDeclaration","scope":29351,"src":"2729:24:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":29327,"name":"uint32","nodeType":"ElementaryTypeName","src":"2729:6:105","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":29330,"mutability":"mutable","name":"canonicalDomain","nameLocation":"2764:15:105","nodeType":"VariableDeclaration","scope":29351,"src":"2757:22:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":29329,"name":"uint32","nodeType":"ElementaryTypeName","src":"2757:6:105","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":29332,"mutability":"mutable","name":"to","nameLocation":"2791:2:105","nodeType":"VariableDeclaration","scope":29351,"src":"2783:10:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29331,"name":"address","nodeType":"ElementaryTypeName","src":"2783:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29334,"mutability":"mutable","name":"delegate","nameLocation":"2805:8:105","nodeType":"VariableDeclaration","scope":29351,"src":"2797:16:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29333,"name":"address","nodeType":"ElementaryTypeName","src":"2797:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29336,"mutability":"mutable","name":"receiveLocal","nameLocation":"2822:12:105","nodeType":"VariableDeclaration","scope":29351,"src":"2817:17:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29335,"name":"bool","nodeType":"ElementaryTypeName","src":"2817:4:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":29338,"mutability":"mutable","name":"callData","nameLocation":"2844:8:105","nodeType":"VariableDeclaration","scope":29351,"src":"2838:14:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":29337,"name":"bytes","nodeType":"ElementaryTypeName","src":"2838:5:105","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":29340,"mutability":"mutable","name":"slippage","nameLocation":"2864:8:105","nodeType":"VariableDeclaration","scope":29351,"src":"2856:16:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29339,"name":"uint256","nodeType":"ElementaryTypeName","src":"2856:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29342,"mutability":"mutable","name":"originSender","nameLocation":"2884:12:105","nodeType":"VariableDeclaration","scope":29351,"src":"2876:20:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29341,"name":"address","nodeType":"ElementaryTypeName","src":"2876:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29344,"mutability":"mutable","name":"bridgedAmt","nameLocation":"2908:10:105","nodeType":"VariableDeclaration","scope":29351,"src":"2900:18:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29343,"name":"uint256","nodeType":"ElementaryTypeName","src":"2900:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29346,"mutability":"mutable","name":"normalizedIn","nameLocation":"2930:12:105","nodeType":"VariableDeclaration","scope":29351,"src":"2922:20:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29345,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29348,"mutability":"mutable","name":"nonce","nameLocation":"2954:5:105","nodeType":"VariableDeclaration","scope":29351,"src":"2946:13:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29347,"name":"uint256","nodeType":"ElementaryTypeName","src":"2946:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29350,"mutability":"mutable","name":"canonicalId","nameLocation":"2971:11:105","nodeType":"VariableDeclaration","scope":29351,"src":"2963:19:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":29349,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2963:7:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"TransferInfo","nameLocation":"2689:12:105","nodeType":"StructDefinition","scope":29546,"src":"2682:303:105","visibility":"public"},{"canonicalName":"ExecuteArgs","id":29365,"members":[{"constant":false,"id":29354,"mutability":"mutable","name":"params","nameLocation":"3562:6:105","nodeType":"VariableDeclaration","scope":29365,"src":"3549:19:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_storage_ptr","typeString":"struct TransferInfo"},"typeName":{"id":29353,"nodeType":"UserDefinedTypeName","pathNode":{"id":29352,"name":"TransferInfo","nameLocations":["3549:12:105"],"nodeType":"IdentifierPath","referencedDeclaration":29351,"src":"3549:12:105"},"referencedDeclaration":29351,"src":"3549:12:105","typeDescriptions":{"typeIdentifier":"t_struct$_TransferInfo_$29351_storage_ptr","typeString":"struct TransferInfo"}},"visibility":"internal"},{"constant":false,"id":29357,"mutability":"mutable","name":"routers","nameLocation":"3582:7:105","nodeType":"VariableDeclaration","scope":29365,"src":"3572:17:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":29355,"name":"address","nodeType":"ElementaryTypeName","src":"3572:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":29356,"nodeType":"ArrayTypeName","src":"3572:9:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":29360,"mutability":"mutable","name":"routerSignatures","nameLocation":"3601:16:105","nodeType":"VariableDeclaration","scope":29365,"src":"3593:24:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":29358,"name":"bytes","nodeType":"ElementaryTypeName","src":"3593:5:105","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":29359,"nodeType":"ArrayTypeName","src":"3593:7:105","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"},{"constant":false,"id":29362,"mutability":"mutable","name":"sequencer","nameLocation":"3629:9:105","nodeType":"VariableDeclaration","scope":29365,"src":"3621:17:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29361,"name":"address","nodeType":"ElementaryTypeName","src":"3621:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29364,"mutability":"mutable","name":"sequencerSignature","nameLocation":"3648:18:105","nodeType":"VariableDeclaration","scope":29365,"src":"3642:24:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":29363,"name":"bytes","nodeType":"ElementaryTypeName","src":"3642:5:105","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"ExecuteArgs","nameLocation":"3533:11:105","nodeType":"StructDefinition","scope":29546,"src":"3526:143:105","visibility":"public"},{"canonicalName":"RouterConfig","id":29378,"members":[{"constant":false,"id":29367,"mutability":"mutable","name":"approved","nameLocation":"4130:8:105","nodeType":"VariableDeclaration","scope":29378,"src":"4125:13:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29366,"name":"bool","nodeType":"ElementaryTypeName","src":"4125:4:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":29369,"mutability":"mutable","name":"portalApproved","nameLocation":"4147:14:105","nodeType":"VariableDeclaration","scope":29378,"src":"4142:19:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29368,"name":"bool","nodeType":"ElementaryTypeName","src":"4142:4:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":29371,"mutability":"mutable","name":"owner","nameLocation":"4173:5:105","nodeType":"VariableDeclaration","scope":29378,"src":"4165:13:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29370,"name":"address","nodeType":"ElementaryTypeName","src":"4165:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29373,"mutability":"mutable","name":"recipient","nameLocation":"4190:9:105","nodeType":"VariableDeclaration","scope":29378,"src":"4182:17:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29372,"name":"address","nodeType":"ElementaryTypeName","src":"4182:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29375,"mutability":"mutable","name":"proposed","nameLocation":"4211:8:105","nodeType":"VariableDeclaration","scope":29378,"src":"4203:16:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29374,"name":"address","nodeType":"ElementaryTypeName","src":"4203:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29377,"mutability":"mutable","name":"proposedTimestamp","nameLocation":"4231:17:105","nodeType":"VariableDeclaration","scope":29378,"src":"4223:25:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29376,"name":"uint256","nodeType":"ElementaryTypeName","src":"4223:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"RouterConfig","nameLocation":"4108:12:105","nodeType":"StructDefinition","scope":29546,"src":"4101:150:105","visibility":"public"},{"canonicalName":"TokenConfig","id":29395,"members":[{"constant":false,"id":29380,"mutability":"mutable","name":"representation","nameLocation":"5412:14:105","nodeType":"VariableDeclaration","scope":29395,"src":"5404:22:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29379,"name":"address","nodeType":"ElementaryTypeName","src":"5404:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29382,"mutability":"mutable","name":"representationDecimals","nameLocation":"5436:22:105","nodeType":"VariableDeclaration","scope":29395,"src":"5430:28:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29381,"name":"uint8","nodeType":"ElementaryTypeName","src":"5430:5:105","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":29384,"mutability":"mutable","name":"adopted","nameLocation":"5470:7:105","nodeType":"VariableDeclaration","scope":29395,"src":"5462:15:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29383,"name":"address","nodeType":"ElementaryTypeName","src":"5462:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29386,"mutability":"mutable","name":"adoptedDecimals","nameLocation":"5487:15:105","nodeType":"VariableDeclaration","scope":29395,"src":"5481:21:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29385,"name":"uint8","nodeType":"ElementaryTypeName","src":"5481:5:105","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":29388,"mutability":"mutable","name":"adoptedToLocalExternalPools","nameLocation":"5514:27:105","nodeType":"VariableDeclaration","scope":29395,"src":"5506:35:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29387,"name":"address","nodeType":"ElementaryTypeName","src":"5506:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29390,"mutability":"mutable","name":"approval","nameLocation":"5550:8:105","nodeType":"VariableDeclaration","scope":29395,"src":"5545:13:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29389,"name":"bool","nodeType":"ElementaryTypeName","src":"5545:4:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":29392,"mutability":"mutable","name":"cap","nameLocation":"5570:3:105","nodeType":"VariableDeclaration","scope":29395,"src":"5562:11:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29391,"name":"uint256","nodeType":"ElementaryTypeName","src":"5562:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29394,"mutability":"mutable","name":"custodied","nameLocation":"5585:9:105","nodeType":"VariableDeclaration","scope":29395,"src":"5577:17:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29393,"name":"uint256","nodeType":"ElementaryTypeName","src":"5577:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"TokenConfig","nameLocation":"5388:11:105","nodeType":"StructDefinition","scope":29546,"src":"5381:216:105","visibility":"public"},{"canonicalName":"AppStorage","id":29536,"members":[{"constant":false,"id":29397,"mutability":"mutable","name":"initialized","nameLocation":"5638:11:105","nodeType":"VariableDeclaration","scope":29536,"src":"5633:16:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29396,"name":"bool","nodeType":"ElementaryTypeName","src":"5633:4:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":29399,"mutability":"mutable","name":"LIQUIDITY_FEE_NUMERATOR","nameLocation":"5691:23:105","nodeType":"VariableDeclaration","scope":29536,"src":"5683:31:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29398,"name":"uint256","nodeType":"ElementaryTypeName","src":"5683:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29402,"mutability":"mutable","name":"relayerFeeVault","nameLocation":"5808:15:105","nodeType":"VariableDeclaration","scope":29536,"src":"5800:23:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29401,"name":"address","nodeType":"ElementaryTypeName","src":"5800:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29405,"mutability":"mutable","name":"nonce","nameLocation":"5991:5:105","nodeType":"VariableDeclaration","scope":29536,"src":"5983:13:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29404,"name":"uint256","nodeType":"ElementaryTypeName","src":"5983:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29408,"mutability":"mutable","name":"domain","nameLocation":"6157:6:105","nodeType":"VariableDeclaration","scope":29536,"src":"6150:13:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":29407,"name":"uint32","nodeType":"ElementaryTypeName","src":"6150:6:105","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":29414,"mutability":"mutable","name":"adoptedToCanonical","nameLocation":"6278:18:105","nodeType":"VariableDeclaration","scope":29536,"src":"6250:46:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId)"},"typeName":{"id":29413,"keyType":{"id":29410,"name":"address","nodeType":"ElementaryTypeName","src":"6258:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6250:27:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId)"},"valueType":{"id":29412,"nodeType":"UserDefinedTypeName","pathNode":{"id":29411,"name":"TokenId","nameLocations":["6269:7:105"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"6269:7:105"},"referencedDeclaration":37728,"src":"6269:7:105","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}}},"visibility":"internal"},{"constant":false,"id":29420,"mutability":"mutable","name":"representationToCanonical","nameLocation":"6418:25:105","nodeType":"VariableDeclaration","scope":29536,"src":"6390:53:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId)"},"typeName":{"id":29419,"keyType":{"id":29416,"name":"address","nodeType":"ElementaryTypeName","src":"6398:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6390:27:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_TokenId_$37728_storage_$","typeString":"mapping(address => struct TokenId)"},"valueType":{"id":29418,"nodeType":"UserDefinedTypeName","pathNode":{"id":29417,"name":"TokenId","nameLocations":["6409:7:105"],"nodeType":"IdentifierPath","referencedDeclaration":37728,"src":"6409:7:105"},"referencedDeclaration":37728,"src":"6409:7:105","typeDescriptions":{"typeIdentifier":"t_struct$_TokenId_$37728_storage_ptr","typeString":"struct TokenId"}}},"visibility":"internal"},{"constant":false,"id":29426,"mutability":"mutable","name":"tokenConfigs","nameLocation":"6589:12:105","nodeType":"VariableDeclaration","scope":29536,"src":"6557:44:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig)"},"typeName":{"id":29425,"keyType":{"id":29422,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6565:7:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"6557:31:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_TokenConfig_$29395_storage_$","typeString":"mapping(bytes32 => struct TokenConfig)"},"valueType":{"id":29424,"nodeType":"UserDefinedTypeName","pathNode":{"id":29423,"name":"TokenConfig","nameLocations":["6576:11:105"],"nodeType":"IdentifierPath","referencedDeclaration":29395,"src":"6576:11:105"},"referencedDeclaration":29395,"src":"6576:11:105","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$29395_storage_ptr","typeString":"struct TokenConfig"}}},"visibility":"internal"},{"constant":false,"id":29432,"mutability":"mutable","name":"transferStatus","nameLocation":"6738:14:105","nodeType":"VariableDeclaration","scope":29536,"src":"6692:60:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"mapping(bytes32 => enum DestinationTransferStatus)"},"typeName":{"id":29431,"keyType":{"id":29428,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6700:7:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"6692:45:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_DestinationTransferStatus_$29324_$","typeString":"mapping(bytes32 => enum DestinationTransferStatus)"},"valueType":{"id":29430,"nodeType":"UserDefinedTypeName","pathNode":{"id":29429,"name":"DestinationTransferStatus","nameLocations":["6711:25:105"],"nodeType":"IdentifierPath","referencedDeclaration":29324,"src":"6711:25:105"},"referencedDeclaration":29324,"src":"6711:25:105","typeDescriptions":{"typeIdentifier":"t_enum$_DestinationTransferStatus_$29324","typeString":"enum DestinationTransferStatus"}}},"visibility":"internal"},{"constant":false,"id":29438,"mutability":"mutable","name":"routedTransfers","nameLocation":"6879:15:105","nodeType":"VariableDeclaration","scope":29536,"src":"6849:45:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_address_$dyn_storage_$","typeString":"mapping(bytes32 => address[])"},"typeName":{"id":29437,"keyType":{"id":29434,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6857:7:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"6849:29:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_address_$dyn_storage_$","typeString":"mapping(bytes32 => address[])"},"valueType":{"baseType":{"id":29435,"name":"address","nodeType":"ElementaryTypeName","src":"6868:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":29436,"nodeType":"ArrayTypeName","src":"6868:9:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"visibility":"internal"},{"constant":false,"id":29445,"mutability":"mutable","name":"routerBalances","nameLocation":"7165:14:105","nodeType":"VariableDeclaration","scope":29536,"src":"7117:62:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":29444,"keyType":{"id":29440,"name":"address","nodeType":"ElementaryTypeName","src":"7125:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"7117:47:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueType":{"id":29443,"keyType":{"id":29441,"name":"address","nodeType":"ElementaryTypeName","src":"7144:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"7136:27:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":29442,"name":"uint256","nodeType":"ElementaryTypeName","src":"7155:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"constant":false,"id":29450,"mutability":"mutable","name":"approvedRelayers","nameLocation":"7349:16:105","nodeType":"VariableDeclaration","scope":29536,"src":"7324:41:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":29449,"keyType":{"id":29447,"name":"address","nodeType":"ElementaryTypeName","src":"7332:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"7324:24:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueType":{"id":29448,"name":"bool","nodeType":"ElementaryTypeName","src":"7343:4:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":29453,"mutability":"mutable","name":"maxRoutersPerTransfer","nameLocation":"7469:21:105","nodeType":"VariableDeclaration","scope":29536,"src":"7461:29:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29452,"name":"uint256","nodeType":"ElementaryTypeName","src":"7461:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29458,"mutability":"mutable","name":"slippage","nameLocation":"7610:8:105","nodeType":"VariableDeclaration","scope":29536,"src":"7582:36:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"typeName":{"id":29457,"keyType":{"id":29455,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7590:7:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"7582:27:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueType":{"id":29456,"name":"uint256","nodeType":"ElementaryTypeName","src":"7601:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":29463,"mutability":"mutable","name":"receiveLocalOverride","nameLocation":"7740:20:105","nodeType":"VariableDeclaration","scope":29536,"src":"7715:45:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"typeName":{"id":29462,"keyType":{"id":29460,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7723:7:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"7715:24:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"valueType":{"id":29461,"name":"bool","nodeType":"ElementaryTypeName","src":"7734:4:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":29468,"mutability":"mutable","name":"remotes","nameLocation":"8045:7:105","nodeType":"VariableDeclaration","scope":29536,"src":"8018:34:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint32_$_t_bytes32_$","typeString":"mapping(uint32 => bytes32)"},"typeName":{"id":29467,"keyType":{"id":29465,"name":"uint32","nodeType":"ElementaryTypeName","src":"8026:6:105","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Mapping","src":"8018:26:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint32_$_t_bytes32_$","typeString":"mapping(uint32 => bytes32)"},"valueType":{"id":29466,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8036:7:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"},{"constant":false,"id":29470,"mutability":"mutable","name":"_proposed","nameLocation":"8103:9:105","nodeType":"VariableDeclaration","scope":29536,"src":"8095:17:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29469,"name":"address","nodeType":"ElementaryTypeName","src":"8095:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29472,"mutability":"mutable","name":"_proposedOwnershipTimestamp","nameLocation":"8132:27:105","nodeType":"VariableDeclaration","scope":29536,"src":"8124:35:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29471,"name":"uint256","nodeType":"ElementaryTypeName","src":"8124:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29474,"mutability":"mutable","name":"_routerAllowlistRemoved","nameLocation":"8176:23:105","nodeType":"VariableDeclaration","scope":29536,"src":"8171:28:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29473,"name":"bool","nodeType":"ElementaryTypeName","src":"8171:4:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":29476,"mutability":"mutable","name":"_routerAllowlistTimestamp","nameLocation":"8219:25:105","nodeType":"VariableDeclaration","scope":29536,"src":"8211:33:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29475,"name":"uint256","nodeType":"ElementaryTypeName","src":"8211:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29482,"mutability":"mutable","name":"roles","nameLocation":"8399:5:105","nodeType":"VariableDeclaration","scope":29536,"src":"8374:30:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_Role_$29319_$","typeString":"mapping(address => enum Role)"},"typeName":{"id":29481,"keyType":{"id":29478,"name":"address","nodeType":"ElementaryTypeName","src":"8382:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"8374:24:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_enum$_Role_$29319_$","typeString":"mapping(address => enum Role)"},"valueType":{"id":29480,"nodeType":"UserDefinedTypeName","pathNode":{"id":29479,"name":"Role","nameLocations":["8393:4:105"],"nodeType":"IdentifierPath","referencedDeclaration":29319,"src":"8393:4:105"},"referencedDeclaration":29319,"src":"8393:4:105","typeDescriptions":{"typeIdentifier":"t_enum$_Role_$29319","typeString":"enum Role"}}},"visibility":"internal"},{"constant":false,"id":29487,"mutability":"mutable","name":"routerConfigs","nameLocation":"8476:13:105","nodeType":"VariableDeclaration","scope":29536,"src":"8443:46:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig)"},"typeName":{"id":29486,"keyType":{"id":29483,"name":"address","nodeType":"ElementaryTypeName","src":"8451:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"8443:32:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RouterConfig_$29378_storage_$","typeString":"mapping(address => struct RouterConfig)"},"valueType":{"id":29485,"nodeType":"UserDefinedTypeName","pathNode":{"id":29484,"name":"RouterConfig","nameLocations":["8462:12:105"],"nodeType":"IdentifierPath","referencedDeclaration":29378,"src":"8462:12:105"},"referencedDeclaration":29378,"src":"8462:12:105","typeDescriptions":{"typeIdentifier":"t_struct$_RouterConfig_$29378_storage_ptr","typeString":"struct RouterConfig"}}},"visibility":"internal"},{"constant":false,"id":29489,"mutability":"mutable","name":"_status","nameLocation":"8540:7:105","nodeType":"VariableDeclaration","scope":29536,"src":"8532:15:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29488,"name":"uint256","nodeType":"ElementaryTypeName","src":"8532:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29491,"mutability":"mutable","name":"_xcallStatus","nameLocation":"8567:12:105","nodeType":"VariableDeclaration","scope":29536,"src":"8559:20:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29490,"name":"uint256","nodeType":"ElementaryTypeName","src":"8559:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29497,"mutability":"mutable","name":"swapStorages","nameLocation":"9032:12:105","nodeType":"VariableDeclaration","scope":29536,"src":"8997:47:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap)"},"typeName":{"id":29496,"keyType":{"id":29493,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9005:7:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"8997:34:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_Swap_$30786_storage_$","typeString":"mapping(bytes32 => struct SwapUtils.Swap)"},"valueType":{"id":29495,"nodeType":"UserDefinedTypeName","pathNode":{"id":29494,"name":"SwapUtils.Swap","nameLocations":["9016:9:105","9026:4:105"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"9016:14:105"},"referencedDeclaration":30786,"src":"9016:14:105","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}}},"visibility":"internal"},{"constant":false,"id":29504,"mutability":"mutable","name":"tokenIndexes","nameLocation":"9303:12:105","nodeType":"VariableDeclaration","scope":29536,"src":"9257:58:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_uint8_$_$","typeString":"mapping(bytes32 => mapping(address => uint8))"},"typeName":{"id":29503,"keyType":{"id":29499,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9265:7:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"9257:45:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_uint8_$_$","typeString":"mapping(bytes32 => mapping(address => uint8))"},"valueType":{"id":29502,"keyType":{"id":29500,"name":"address","nodeType":"ElementaryTypeName","src":"9284:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"9276:25:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"},"valueType":{"id":29501,"name":"uint8","nodeType":"ElementaryTypeName","src":"9295:5:105","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}}},"visibility":"internal"},{"constant":false,"id":29507,"mutability":"mutable","name":"lpTokenTargetAddress","nameLocation":"9490:20:105","nodeType":"VariableDeclaration","scope":29536,"src":"9482:28:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29506,"name":"address","nodeType":"ElementaryTypeName","src":"9482:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29510,"mutability":"mutable","name":"_paused","nameLocation":"9607:7:105","nodeType":"VariableDeclaration","scope":29536,"src":"9602:12:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29509,"name":"bool","nodeType":"ElementaryTypeName","src":"9602:4:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":29513,"mutability":"mutable","name":"aavePool","nameLocation":"9717:8:105","nodeType":"VariableDeclaration","scope":29536,"src":"9709:16:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29512,"name":"address","nodeType":"ElementaryTypeName","src":"9709:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29516,"mutability":"mutable","name":"aavePortalFeeNumerator","nameLocation":"9885:22:105","nodeType":"VariableDeclaration","scope":29536,"src":"9877:30:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29515,"name":"uint256","nodeType":"ElementaryTypeName","src":"9877:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29521,"mutability":"mutable","name":"portalDebt","nameLocation":"10045:10:105","nodeType":"VariableDeclaration","scope":29536,"src":"10017:38:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"typeName":{"id":29520,"keyType":{"id":29518,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10025:7:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"10017:27:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueType":{"id":29519,"name":"uint256","nodeType":"ElementaryTypeName","src":"10036:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":29526,"mutability":"mutable","name":"portalFeeDebt","nameLocation":"10193:13:105","nodeType":"VariableDeclaration","scope":29536,"src":"10165:41:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"typeName":{"id":29525,"keyType":{"id":29523,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10173:7:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"10165:27:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueType":{"id":29524,"name":"uint256","nodeType":"ElementaryTypeName","src":"10184:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":29531,"mutability":"mutable","name":"approvedSequencers","nameLocation":"10435:18:105","nodeType":"VariableDeclaration","scope":29536,"src":"10410:43:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":29530,"keyType":{"id":29528,"name":"address","nodeType":"ElementaryTypeName","src":"10418:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"10410:24:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueType":{"id":29529,"name":"bool","nodeType":"ElementaryTypeName","src":"10429:4:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":29535,"mutability":"mutable","name":"xAppConnectionManager","nameLocation":"10544:21:105","nodeType":"VariableDeclaration","scope":29536,"src":"10526:39:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"},"typeName":{"id":29534,"nodeType":"UserDefinedTypeName","pathNode":{"id":29533,"name":"IConnectorManager","nameLocations":["10526:17:105"],"nodeType":"IdentifierPath","referencedDeclaration":47805,"src":"10526:17:105"},"referencedDeclaration":47805,"src":"10526:17:105","typeDescriptions":{"typeIdentifier":"t_contract$_IConnectorManager_$47805","typeString":"contract IConnectorManager"}},"visibility":"internal"}],"name":"AppStorage","nameLocation":"5606:10:105","nodeType":"StructDefinition","scope":29546,"src":"5599:4969:105","visibility":"public"},{"abstract":false,"baseContracts":[],"canonicalName":"LibConnextStorage","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":29545,"linearizedBaseContracts":[29545],"name":"LibConnextStorage","nameLocation":"10578:17:105","nodeType":"ContractDefinition","nodes":[{"body":{"id":29543,"nodeType":"Block","src":"10672:45:105","statements":[{"AST":{"nodeType":"YulBlock","src":"10687:26:105","statements":[{"nodeType":"YulAssignment","src":"10695:12:105","value":{"kind":"number","nodeType":"YulLiteral","src":"10706:1:105","type":"","value":"0"},"variableNames":[{"name":"ds.slot","nodeType":"YulIdentifier","src":"10695:7:105"}]}]},"evmVersion":"london","externalReferences":[{"declaration":29540,"isOffset":false,"isSlot":true,"src":"10695:7:105","suffix":"slot","valueSize":1}],"id":29542,"nodeType":"InlineAssembly","src":"10678:35:105"}]},"id":29544,"implemented":true,"kind":"function","modifiers":[],"name":"connextStorage","nameLocation":"10609:14:105","nodeType":"FunctionDefinition","parameters":{"id":29537,"nodeType":"ParameterList","parameters":[],"src":"10623:2:105"},"returnParameters":{"id":29541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29540,"mutability":"mutable","name":"ds","nameLocation":"10668:2:105","nodeType":"VariableDeclaration","scope":29544,"src":"10649:21:105","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"},"typeName":{"id":29539,"nodeType":"UserDefinedTypeName","pathNode":{"id":29538,"name":"AppStorage","nameLocations":["10649:10:105"],"nodeType":"IdentifierPath","referencedDeclaration":29536,"src":"10649:10:105"},"referencedDeclaration":29536,"src":"10649:10:105","typeDescriptions":{"typeIdentifier":"t_struct$_AppStorage_$29536_storage_ptr","typeString":"struct AppStorage"}},"visibility":"internal"}],"src":"10648:23:105"},"scope":29545,"src":"10600:117:105","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":29546,"src":"10570:149:105","usedErrors":[]}],"src":"39:10681:105"},"id":105},"contracts/core/connext/libraries/LibDiamond.sol":{"ast":{"absolutePath":"contracts/core/connext/libraries/LibDiamond.sol","exportedSymbols":{"IDiamondCut":[26944],"LibDiamond":[30596]},"id":30597,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":29547,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"32:23:106"},{"absolutePath":"contracts/core/connext/interfaces/IDiamondCut.sol","file":"../interfaces/IDiamondCut.sol","id":29549,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30597,"sourceUnit":26945,"src":"361:58:106","symbolAliases":[{"foreign":{"id":29548,"name":"IDiamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26944,"src":"369:11:106","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"LibDiamond","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":30596,"linearizedBaseContracts":[30596],"name":"LibDiamond","nameLocation":"577:10:106","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":29554,"mutability":"constant","name":"DIAMOND_STORAGE_POSITION","nameLocation":"609:24:106","nodeType":"VariableDeclaration","scope":30596,"src":"592:89:106","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":29550,"name":"bytes32","nodeType":"ElementaryTypeName","src":"592:7:106","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"6469616d6f6e642e7374616e646172642e6469616d6f6e642e73746f72616765","id":29552,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"646:34:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c","typeString":"literal_string \"diamond.standard.diamond.storage\""},"value":"diamond.standard.diamond.storage"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c","typeString":"literal_string \"diamond.standard.diamond.storage\""}],"id":29551,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"636:9:106","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":29553,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"636:45:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"canonicalName":"LibDiamond.FacetAddressAndPosition","id":29559,"members":[{"constant":false,"id":29556,"mutability":"mutable","name":"facetAddress","nameLocation":"731:12:106","nodeType":"VariableDeclaration","scope":29559,"src":"723:20:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29555,"name":"address","nodeType":"ElementaryTypeName","src":"723:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29558,"mutability":"mutable","name":"functionSelectorPosition","nameLocation":"756:24:106","nodeType":"VariableDeclaration","scope":29559,"src":"749:31:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":29557,"name":"uint96","nodeType":"ElementaryTypeName","src":"749:6:106","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"name":"FacetAddressAndPosition","nameLocation":"693:23:106","nodeType":"StructDefinition","scope":30596,"src":"686:161:106","visibility":"public"},{"canonicalName":"LibDiamond.FacetFunctionSelectors","id":29565,"members":[{"constant":false,"id":29562,"mutability":"mutable","name":"functionSelectors","nameLocation":"896:17:106","nodeType":"VariableDeclaration","scope":29565,"src":"887:26:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"},"typeName":{"baseType":{"id":29560,"name":"bytes4","nodeType":"ElementaryTypeName","src":"887:6:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":29561,"nodeType":"ArrayTypeName","src":"887:8:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"}},"visibility":"internal"},{"constant":false,"id":29564,"mutability":"mutable","name":"facetAddressPosition","nameLocation":"927:20:106","nodeType":"VariableDeclaration","scope":29565,"src":"919:28:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29563,"name":"uint256","nodeType":"ElementaryTypeName","src":"919:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"FacetFunctionSelectors","nameLocation":"858:22:106","nodeType":"StructDefinition","scope":30596,"src":"851:153:106","visibility":"public"},{"canonicalName":"LibDiamond.DiamondStorage","id":29591,"members":[{"constant":false,"id":29570,"mutability":"mutable","name":"selectorToFacetAndPosition","nameLocation":"1216:26:106","nodeType":"VariableDeclaration","scope":29591,"src":"1173:69:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$29559_storage_$","typeString":"mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition)"},"typeName":{"id":29569,"keyType":{"id":29566,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1181:6:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"Mapping","src":"1173:42:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$29559_storage_$","typeString":"mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition)"},"valueType":{"id":29568,"nodeType":"UserDefinedTypeName","pathNode":{"id":29567,"name":"FacetAddressAndPosition","nameLocations":["1191:23:106"],"nodeType":"IdentifierPath","referencedDeclaration":29559,"src":"1191:23:106"},"referencedDeclaration":29559,"src":"1191:23:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetAddressAndPosition_$29559_storage_ptr","typeString":"struct LibDiamond.FacetAddressAndPosition"}}},"visibility":"internal"},{"constant":false,"id":29575,"mutability":"mutable","name":"facetFunctionSelectors","nameLocation":"1341:22:106","nodeType":"VariableDeclaration","scope":29591,"src":"1298:65:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$29565_storage_$","typeString":"mapping(address => struct LibDiamond.FacetFunctionSelectors)"},"typeName":{"id":29574,"keyType":{"id":29571,"name":"address","nodeType":"ElementaryTypeName","src":"1306:7:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1298:42:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$29565_storage_$","typeString":"mapping(address => struct LibDiamond.FacetFunctionSelectors)"},"valueType":{"id":29573,"nodeType":"UserDefinedTypeName","pathNode":{"id":29572,"name":"FacetFunctionSelectors","nameLocations":["1317:22:106"],"nodeType":"IdentifierPath","referencedDeclaration":29565,"src":"1317:22:106"},"referencedDeclaration":29565,"src":"1317:22:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetFunctionSelectors_$29565_storage_ptr","typeString":"struct LibDiamond.FacetFunctionSelectors"}}},"visibility":"internal"},{"constant":false,"id":29578,"mutability":"mutable","name":"facetAddresses","nameLocation":"1402:14:106","nodeType":"VariableDeclaration","scope":29591,"src":"1392:24:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":29576,"name":"address","nodeType":"ElementaryTypeName","src":"1392:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":29577,"nodeType":"ArrayTypeName","src":"1392:9:106","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":29582,"mutability":"mutable","name":"supportedInterfaces","nameLocation":"1540:19:106","nodeType":"VariableDeclaration","scope":29591,"src":"1516:43:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_bool_$","typeString":"mapping(bytes4 => bool)"},"typeName":{"id":29581,"keyType":{"id":29579,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1524:6:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"Mapping","src":"1516:23:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_bool_$","typeString":"mapping(bytes4 => bool)"},"valueType":{"id":29580,"name":"bool","nodeType":"ElementaryTypeName","src":"1534:4:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":29584,"mutability":"mutable","name":"contractOwner","nameLocation":"1602:13:106","nodeType":"VariableDeclaration","scope":29591,"src":"1594:21:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29583,"name":"address","nodeType":"ElementaryTypeName","src":"1594:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29588,"mutability":"mutable","name":"acceptanceTimes","nameLocation":"1699:15:106","nodeType":"VariableDeclaration","scope":29591,"src":"1671:43:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"typeName":{"id":29587,"keyType":{"id":29585,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1679:7:106","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"1671:27:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueType":{"id":29586,"name":"uint256","nodeType":"ElementaryTypeName","src":"1690:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":29590,"mutability":"mutable","name":"acceptanceDelay","nameLocation":"1773:15:106","nodeType":"VariableDeclaration","scope":29591,"src":"1765:23:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29589,"name":"uint256","nodeType":"ElementaryTypeName","src":"1765:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"DiamondStorage","nameLocation":"1015:14:106","nodeType":"StructDefinition","scope":30596,"src":"1008:785:106","visibility":"public"},{"body":{"id":29602,"nodeType":"Block","src":"1873:101:106","statements":[{"assignments":[29598],"declarations":[{"constant":false,"id":29598,"mutability":"mutable","name":"position","nameLocation":"1887:8:106","nodeType":"VariableDeclaration","scope":29602,"src":"1879:16:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":29597,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1879:7:106","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":29600,"initialValue":{"id":29599,"name":"DIAMOND_STORAGE_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29554,"src":"1898:24:106","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1879:43:106"},{"AST":{"nodeType":"YulBlock","src":"1937:33:106","statements":[{"nodeType":"YulAssignment","src":"1945:19:106","value":{"name":"position","nodeType":"YulIdentifier","src":"1956:8:106"},"variableNames":[{"name":"ds.slot","nodeType":"YulIdentifier","src":"1945:7:106"}]}]},"evmVersion":"london","externalReferences":[{"declaration":29595,"isOffset":false,"isSlot":true,"src":"1945:7:106","suffix":"slot","valueSize":1},{"declaration":29598,"isOffset":false,"isSlot":false,"src":"1956:8:106","valueSize":1}],"id":29601,"nodeType":"InlineAssembly","src":"1928:42:106"}]},"id":29603,"implemented":true,"kind":"function","modifiers":[],"name":"diamondStorage","nameLocation":"1806:14:106","nodeType":"FunctionDefinition","parameters":{"id":29592,"nodeType":"ParameterList","parameters":[],"src":"1820:2:106"},"returnParameters":{"id":29596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29595,"mutability":"mutable","name":"ds","nameLocation":"1869:2:106","nodeType":"VariableDeclaration","scope":29603,"src":"1846:25:106","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"},"typeName":{"id":29594,"nodeType":"UserDefinedTypeName","pathNode":{"id":29593,"name":"DiamondStorage","nameLocations":["1846:14:106"],"nodeType":"IdentifierPath","referencedDeclaration":29591,"src":"1846:14:106"},"referencedDeclaration":29591,"src":"1846:14:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"}},"visibility":"internal"}],"src":"1845:27:106"},"scope":30596,"src":"1797:177:106","stateMutability":"pure","virtual":false,"visibility":"internal"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":29609,"name":"OwnershipTransferred","nameLocation":"1984:20:106","nodeType":"EventDefinition","parameters":{"id":29608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29605,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"2021:13:106","nodeType":"VariableDeclaration","scope":29609,"src":"2005:29:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29604,"name":"address","nodeType":"ElementaryTypeName","src":"2005:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29607,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"2052:8:106","nodeType":"VariableDeclaration","scope":29609,"src":"2036:24:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29606,"name":"address","nodeType":"ElementaryTypeName","src":"2036:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2004:57:106"},"src":"1978:84:106"},{"body":{"id":29632,"nodeType":"Block","src":"2120:149:106","statements":[{"assignments":[29616],"declarations":[{"constant":false,"id":29616,"mutability":"mutable","name":"ds","nameLocation":"2149:2:106","nodeType":"VariableDeclaration","scope":29632,"src":"2126:25:106","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"},"typeName":{"id":29615,"nodeType":"UserDefinedTypeName","pathNode":{"id":29614,"name":"DiamondStorage","nameLocations":["2126:14:106"],"nodeType":"IdentifierPath","referencedDeclaration":29591,"src":"2126:14:106"},"referencedDeclaration":29591,"src":"2126:14:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"}},"visibility":"internal"}],"id":29619,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":29617,"name":"diamondStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29603,"src":"2154:14:106","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$29591_storage_ptr_$","typeString":"function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"}},"id":29618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2154:16:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2126:44:106"},{"eventCall":{"arguments":[{"expression":{"id":29621,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29616,"src":"2202:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":29622,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2205:13:106","memberName":"contractOwner","nodeType":"MemberAccess","referencedDeclaration":29584,"src":"2202:16:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29623,"name":"_newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29611,"src":"2220:9:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":29620,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29609,"src":"2181:20:106","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":29624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2181:49:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29625,"nodeType":"EmitStatement","src":"2176:54:106"},{"expression":{"id":29630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":29626,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29616,"src":"2236:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":29628,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2239:13:106","memberName":"contractOwner","nodeType":"MemberAccess","referencedDeclaration":29584,"src":"2236:16:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":29629,"name":"_newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29611,"src":"2255:9:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2236:28:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":29631,"nodeType":"ExpressionStatement","src":"2236:28:106"}]},"id":29633,"implemented":true,"kind":"function","modifiers":[],"name":"setContractOwner","nameLocation":"2075:16:106","nodeType":"FunctionDefinition","parameters":{"id":29612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29611,"mutability":"mutable","name":"_newOwner","nameLocation":"2100:9:106","nodeType":"VariableDeclaration","scope":29633,"src":"2092:17:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29610,"name":"address","nodeType":"ElementaryTypeName","src":"2092:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2091:19:106"},"returnParameters":{"id":29613,"nodeType":"ParameterList","parameters":[],"src":"2120:0:106"},"scope":30596,"src":"2066:203:106","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":29644,"nodeType":"Block","src":"2345:58:106","statements":[{"expression":{"id":29642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29638,"name":"contractOwner_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29636,"src":"2351:14:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":29639,"name":"diamondStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29603,"src":"2368:14:106","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$29591_storage_ptr_$","typeString":"function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"}},"id":29640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2368:16:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":29641,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2385:13:106","memberName":"contractOwner","nodeType":"MemberAccess","referencedDeclaration":29584,"src":"2368:30:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2351:47:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":29643,"nodeType":"ExpressionStatement","src":"2351:47:106"}]},"id":29645,"implemented":true,"kind":"function","modifiers":[],"name":"contractOwner","nameLocation":"2282:13:106","nodeType":"FunctionDefinition","parameters":{"id":29634,"nodeType":"ParameterList","parameters":[],"src":"2295:2:106"},"returnParameters":{"id":29637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29636,"mutability":"mutable","name":"contractOwner_","nameLocation":"2329:14:106","nodeType":"VariableDeclaration","scope":29645,"src":"2321:22:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29635,"name":"address","nodeType":"ElementaryTypeName","src":"2321:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2320:24:106"},"scope":30596,"src":"2273:130:106","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":29654,"nodeType":"Block","src":"2466:50:106","statements":[{"expression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":29650,"name":"diamondStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29603,"src":"2479:14:106","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$29591_storage_ptr_$","typeString":"function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"}},"id":29651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2479:16:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":29652,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2496:15:106","memberName":"acceptanceDelay","nodeType":"MemberAccess","referencedDeclaration":29590,"src":"2479:32:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":29649,"id":29653,"nodeType":"Return","src":"2472:39:106"}]},"id":29655,"implemented":true,"kind":"function","modifiers":[],"name":"acceptanceDelay","nameLocation":"2416:15:106","nodeType":"FunctionDefinition","parameters":{"id":29646,"nodeType":"ParameterList","parameters":[],"src":"2431:2:106"},"returnParameters":{"id":29649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29648,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29655,"src":"2457:7:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29647,"name":"uint256","nodeType":"ElementaryTypeName","src":"2457:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2456:9:106"},"scope":30596,"src":"2407:109:106","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":29668,"nodeType":"Block","src":"2590:56:106","statements":[{"expression":{"baseExpression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":29662,"name":"diamondStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29603,"src":"2603:14:106","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$29591_storage_ptr_$","typeString":"function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"}},"id":29663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2603:16:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":29664,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2620:15:106","memberName":"acceptanceTimes","nodeType":"MemberAccess","referencedDeclaration":29588,"src":"2603:32:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":29666,"indexExpression":{"id":29665,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29657,"src":"2636:4:106","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2603:38:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":29661,"id":29667,"nodeType":"Return","src":"2596:45:106"}]},"id":29669,"implemented":true,"kind":"function","modifiers":[],"name":"acceptanceTime","nameLocation":"2529:14:106","nodeType":"FunctionDefinition","parameters":{"id":29658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29657,"mutability":"mutable","name":"_key","nameLocation":"2552:4:106","nodeType":"VariableDeclaration","scope":29669,"src":"2544:12:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":29656,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2544:7:106","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2543:14:106"},"returnParameters":{"id":29661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29660,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29669,"src":"2581:7:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29659,"name":"uint256","nodeType":"ElementaryTypeName","src":"2581:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2580:9:106"},"scope":30596,"src":"2520:126:106","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":29682,"nodeType":"Block","src":"2698:95:106","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":29678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":29673,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2712:3:106","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":29674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2716:6:106","memberName":"sender","nodeType":"MemberAccess","src":"2712:10:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":29675,"name":"diamondStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29603,"src":"2726:14:106","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$29591_storage_ptr_$","typeString":"function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"}},"id":29676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2726:16:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":29677,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2743:13:106","memberName":"contractOwner","nodeType":"MemberAccess","referencedDeclaration":29584,"src":"2726:30:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2712:44:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c69624469616d6f6e643a2021636f6e7472616374206f776e6572","id":29679,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2758:29:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_4beb0b63f903eb8754578ce7af3eb73865b73e0886b8ef814c8fa0e6d2575299","typeString":"literal_string \"LibDiamond: !contract owner\""},"value":"LibDiamond: !contract owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4beb0b63f903eb8754578ce7af3eb73865b73e0886b8ef814c8fa0e6d2575299","typeString":"literal_string \"LibDiamond: !contract owner\""}],"id":29672,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2704:7:106","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2704:84:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29681,"nodeType":"ExpressionStatement","src":"2704:84:106"}]},"id":29683,"implemented":true,"kind":"function","modifiers":[],"name":"enforceIsContractOwner","nameLocation":"2659:22:106","nodeType":"FunctionDefinition","parameters":{"id":29670,"nodeType":"ParameterList","parameters":[],"src":"2681:2:106"},"returnParameters":{"id":29671,"nodeType":"ParameterList","parameters":[],"src":"2698:0:106"},"scope":30596,"src":"2650:143:106","stateMutability":"view","virtual":false,"visibility":"internal"},{"anonymous":false,"eventSelector":"6c20294df7018c510b52fd6cc0352d7b78056de164d751b75da6ef7b63daa83e","id":29695,"name":"DiamondCutProposed","nameLocation":"2803:18:106","nodeType":"EventDefinition","parameters":{"id":29694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29687,"indexed":false,"mutability":"mutable","name":"_diamondCut","nameLocation":"2845:11:106","nodeType":"VariableDeclaration","scope":29695,"src":"2822:34:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut[]"},"typeName":{"baseType":{"id":29685,"nodeType":"UserDefinedTypeName","pathNode":{"id":29684,"name":"IDiamondCut.FacetCut","nameLocations":["2822:11:106","2834:8:106"],"nodeType":"IdentifierPath","referencedDeclaration":26861,"src":"2822:20:106"},"referencedDeclaration":26861,"src":"2822:20:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_storage_ptr","typeString":"struct IDiamondCut.FacetCut"}},"id":29686,"nodeType":"ArrayTypeName","src":"2822:22:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_storage_$dyn_storage_ptr","typeString":"struct IDiamondCut.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":29689,"indexed":false,"mutability":"mutable","name":"_init","nameLocation":"2866:5:106","nodeType":"VariableDeclaration","scope":29695,"src":"2858:13:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29688,"name":"address","nodeType":"ElementaryTypeName","src":"2858:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29691,"indexed":false,"mutability":"mutable","name":"_calldata","nameLocation":"2879:9:106","nodeType":"VariableDeclaration","scope":29695,"src":"2873:15:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":29690,"name":"bytes","nodeType":"ElementaryTypeName","src":"2873:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":29693,"indexed":false,"mutability":"mutable","name":"deadline","nameLocation":"2898:8:106","nodeType":"VariableDeclaration","scope":29695,"src":"2890:16:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29692,"name":"uint256","nodeType":"ElementaryTypeName","src":"2890:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2821:86:106"},"src":"2797:111:106"},{"body":{"id":29742,"nodeType":"Block","src":"3046:548:106","statements":[{"assignments":[29708],"declarations":[{"constant":false,"id":29708,"mutability":"mutable","name":"ds","nameLocation":"3342:2:106","nodeType":"VariableDeclaration","scope":29742,"src":"3319:25:106","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"},"typeName":{"id":29707,"nodeType":"UserDefinedTypeName","pathNode":{"id":29706,"name":"DiamondStorage","nameLocations":["3319:14:106"],"nodeType":"IdentifierPath","referencedDeclaration":29591,"src":"3319:14:106"},"referencedDeclaration":29591,"src":"3319:14:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"}},"visibility":"internal"}],"id":29711,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":29709,"name":"diamondStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29603,"src":"3347:14:106","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$29591_storage_ptr_$","typeString":"function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"}},"id":29710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3347:16:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3319:44:106"},{"assignments":[29713],"declarations":[{"constant":false,"id":29713,"mutability":"mutable","name":"acceptance","nameLocation":"3377:10:106","nodeType":"VariableDeclaration","scope":29742,"src":"3369:18:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29712,"name":"uint256","nodeType":"ElementaryTypeName","src":"3369:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29719,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":29714,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3390:5:106","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":29715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3396:9:106","memberName":"timestamp","nodeType":"MemberAccess","src":"3390:15:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":29716,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29708,"src":"3408:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":29717,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3411:15:106","memberName":"acceptanceDelay","nodeType":"MemberAccess","referencedDeclaration":29590,"src":"3408:18:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3390:36:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3369:57:106"},{"expression":{"id":29733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":29720,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29708,"src":"3432:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":29730,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3435:15:106","memberName":"acceptanceTimes","nodeType":"MemberAccess","referencedDeclaration":29588,"src":"3432:18:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":29731,"indexExpression":{"arguments":[{"arguments":[{"id":29725,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29699,"src":"3472:11:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"}},{"id":29726,"name":"_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29701,"src":"3485:5:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29727,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29703,"src":"3492:9:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":29723,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3461:3:106","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":29724,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3465:6:106","memberName":"encode","nodeType":"MemberAccess","src":"3461:10:106","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":29728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3461:41:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":29722,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3451:9:106","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":29729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3451:52:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3432:72:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":29732,"name":"acceptance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29713,"src":"3507:10:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3432:85:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29734,"nodeType":"ExpressionStatement","src":"3432:85:106"},{"eventCall":{"arguments":[{"id":29736,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29699,"src":"3547:11:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"}},{"id":29737,"name":"_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29701,"src":"3560:5:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29738,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29703,"src":"3567:9:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":29739,"name":"acceptance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29713,"src":"3578:10:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29735,"name":"DiamondCutProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29695,"src":"3528:18:106","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (struct IDiamondCut.FacetCut memory[] memory,address,bytes memory,uint256)"}},"id":29740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3528:61:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29741,"nodeType":"EmitStatement","src":"3523:66:106"}]},"id":29743,"implemented":true,"kind":"function","modifiers":[],"name":"proposeDiamondCut","nameLocation":"2921:17:106","nodeType":"FunctionDefinition","parameters":{"id":29704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29699,"mutability":"mutable","name":"_diamondCut","nameLocation":"2974:11:106","nodeType":"VariableDeclaration","scope":29743,"src":"2944:41:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut[]"},"typeName":{"baseType":{"id":29697,"nodeType":"UserDefinedTypeName","pathNode":{"id":29696,"name":"IDiamondCut.FacetCut","nameLocations":["2944:11:106","2956:8:106"],"nodeType":"IdentifierPath","referencedDeclaration":26861,"src":"2944:20:106"},"referencedDeclaration":26861,"src":"2944:20:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_storage_ptr","typeString":"struct IDiamondCut.FacetCut"}},"id":29698,"nodeType":"ArrayTypeName","src":"2944:22:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_storage_$dyn_storage_ptr","typeString":"struct IDiamondCut.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":29701,"mutability":"mutable","name":"_init","nameLocation":"2999:5:106","nodeType":"VariableDeclaration","scope":29743,"src":"2991:13:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29700,"name":"address","nodeType":"ElementaryTypeName","src":"2991:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29703,"mutability":"mutable","name":"_calldata","nameLocation":"3023:9:106","nodeType":"VariableDeclaration","scope":29743,"src":"3010:22:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":29702,"name":"bytes","nodeType":"ElementaryTypeName","src":"3010:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2938:98:106"},"returnParameters":{"id":29705,"nodeType":"ParameterList","parameters":[],"src":"3046:0:106"},"scope":30596,"src":"2912:682:106","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"anonymous":false,"eventSelector":"47b4eb69218cd939e2a72afd9d24fe3a6ca02515a6d712ff3942062df2eedbdb","id":29753,"name":"DiamondCutRescinded","nameLocation":"3604:19:106","nodeType":"EventDefinition","parameters":{"id":29752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29747,"indexed":false,"mutability":"mutable","name":"_diamondCut","nameLocation":"3647:11:106","nodeType":"VariableDeclaration","scope":29753,"src":"3624:34:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut[]"},"typeName":{"baseType":{"id":29745,"nodeType":"UserDefinedTypeName","pathNode":{"id":29744,"name":"IDiamondCut.FacetCut","nameLocations":["3624:11:106","3636:8:106"],"nodeType":"IdentifierPath","referencedDeclaration":26861,"src":"3624:20:106"},"referencedDeclaration":26861,"src":"3624:20:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_storage_ptr","typeString":"struct IDiamondCut.FacetCut"}},"id":29746,"nodeType":"ArrayTypeName","src":"3624:22:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_storage_$dyn_storage_ptr","typeString":"struct IDiamondCut.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":29749,"indexed":false,"mutability":"mutable","name":"_init","nameLocation":"3668:5:106","nodeType":"VariableDeclaration","scope":29753,"src":"3660:13:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29748,"name":"address","nodeType":"ElementaryTypeName","src":"3660:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29751,"indexed":false,"mutability":"mutable","name":"_calldata","nameLocation":"3681:9:106","nodeType":"VariableDeclaration","scope":29753,"src":"3675:15:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":29750,"name":"bytes","nodeType":"ElementaryTypeName","src":"3675:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3623:68:106"},"src":"3598:94:106"},{"body":{"id":29784,"nodeType":"Block","src":"3830:309:106","statements":[{"expression":{"id":29776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"3980:93:106","subExpression":{"baseExpression":{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":29764,"name":"diamondStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29603,"src":"3987:14:106","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$29591_storage_ptr_$","typeString":"function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"}},"id":29765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3987:16:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":29766,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4004:15:106","memberName":"acceptanceTimes","nodeType":"MemberAccess","referencedDeclaration":29588,"src":"3987:32:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":29775,"indexExpression":{"arguments":[{"arguments":[{"id":29770,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29757,"src":"4041:11:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"}},{"id":29771,"name":"_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29759,"src":"4054:5:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29772,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29761,"src":"4061:9:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":29768,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4030:3:106","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":29769,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4034:6:106","memberName":"encode","nodeType":"MemberAccess","src":"4030:10:106","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":29773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4030:41:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":29767,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4020:9:106","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":29774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4020:52:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3987:86:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29777,"nodeType":"ExpressionStatement","src":"3980:93:106"},{"eventCall":{"arguments":[{"id":29779,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29757,"src":"4104:11:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"}},{"id":29780,"name":"_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29759,"src":"4117:5:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29781,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29761,"src":"4124:9:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":29778,"name":"DiamondCutRescinded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29753,"src":"4084:19:106","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (struct IDiamondCut.FacetCut memory[] memory,address,bytes memory)"}},"id":29782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4084:50:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29783,"nodeType":"EmitStatement","src":"4079:55:106"}]},"id":29785,"implemented":true,"kind":"function","modifiers":[],"name":"rescindDiamondCut","nameLocation":"3705:17:106","nodeType":"FunctionDefinition","parameters":{"id":29762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29757,"mutability":"mutable","name":"_diamondCut","nameLocation":"3758:11:106","nodeType":"VariableDeclaration","scope":29785,"src":"3728:41:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut[]"},"typeName":{"baseType":{"id":29755,"nodeType":"UserDefinedTypeName","pathNode":{"id":29754,"name":"IDiamondCut.FacetCut","nameLocations":["3728:11:106","3740:8:106"],"nodeType":"IdentifierPath","referencedDeclaration":26861,"src":"3728:20:106"},"referencedDeclaration":26861,"src":"3728:20:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_storage_ptr","typeString":"struct IDiamondCut.FacetCut"}},"id":29756,"nodeType":"ArrayTypeName","src":"3728:22:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_storage_$dyn_storage_ptr","typeString":"struct IDiamondCut.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":29759,"mutability":"mutable","name":"_init","nameLocation":"3783:5:106","nodeType":"VariableDeclaration","scope":29785,"src":"3775:13:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29758,"name":"address","nodeType":"ElementaryTypeName","src":"3775:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29761,"mutability":"mutable","name":"_calldata","nameLocation":"3807:9:106","nodeType":"VariableDeclaration","scope":29785,"src":"3794:22:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":29760,"name":"bytes","nodeType":"ElementaryTypeName","src":"3794:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3722:98:106"},"returnParameters":{"id":29763,"nodeType":"ParameterList","parameters":[],"src":"3830:0:106"},"scope":30596,"src":"3696:443:106","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"anonymous":false,"eventSelector":"8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673","id":29795,"name":"DiamondCut","nameLocation":"4149:10:106","nodeType":"EventDefinition","parameters":{"id":29794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29789,"indexed":false,"mutability":"mutable","name":"_diamondCut","nameLocation":"4183:11:106","nodeType":"VariableDeclaration","scope":29795,"src":"4160:34:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut[]"},"typeName":{"baseType":{"id":29787,"nodeType":"UserDefinedTypeName","pathNode":{"id":29786,"name":"IDiamondCut.FacetCut","nameLocations":["4160:11:106","4172:8:106"],"nodeType":"IdentifierPath","referencedDeclaration":26861,"src":"4160:20:106"},"referencedDeclaration":26861,"src":"4160:20:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_storage_ptr","typeString":"struct IDiamondCut.FacetCut"}},"id":29788,"nodeType":"ArrayTypeName","src":"4160:22:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_storage_$dyn_storage_ptr","typeString":"struct IDiamondCut.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":29791,"indexed":false,"mutability":"mutable","name":"_init","nameLocation":"4204:5:106","nodeType":"VariableDeclaration","scope":29795,"src":"4196:13:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29790,"name":"address","nodeType":"ElementaryTypeName","src":"4196:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29793,"indexed":false,"mutability":"mutable","name":"_calldata","nameLocation":"4217:9:106","nodeType":"VariableDeclaration","scope":29795,"src":"4211:15:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":29792,"name":"bytes","nodeType":"ElementaryTypeName","src":"4211:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4159:68:106"},"src":"4143:85:106"},{"body":{"id":29952,"nodeType":"Block","src":"4404:1916:106","statements":[{"assignments":[29808],"declarations":[{"constant":false,"id":29808,"mutability":"mutable","name":"ds","nameLocation":"4433:2:106","nodeType":"VariableDeclaration","scope":29952,"src":"4410:25:106","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"},"typeName":{"id":29807,"nodeType":"UserDefinedTypeName","pathNode":{"id":29806,"name":"DiamondStorage","nameLocations":["4410:14:106"],"nodeType":"IdentifierPath","referencedDeclaration":29591,"src":"4410:14:106"},"referencedDeclaration":29591,"src":"4410:14:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"}},"visibility":"internal"}],"id":29811,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":29809,"name":"diamondStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29603,"src":"4438:14:106","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$29591_storage_ptr_$","typeString":"function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"}},"id":29810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4438:16:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4410:44:106"},{"assignments":[29813],"declarations":[{"constant":false,"id":29813,"mutability":"mutable","name":"key","nameLocation":"4468:3:106","nodeType":"VariableDeclaration","scope":29952,"src":"4460:11:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":29812,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4460:7:106","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":29822,"initialValue":{"arguments":[{"arguments":[{"id":29817,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29799,"src":"4495:11:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"}},{"id":29818,"name":"_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29801,"src":"4508:5:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29819,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29803,"src":"4515:9:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":29815,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4484:3:106","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":29816,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4488:6:106","memberName":"encode","nodeType":"MemberAccess","src":"4484:10:106","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":29820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4484:41:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":29814,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4474:9:106","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":29821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4474:52:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4460:66:106"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":29823,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29808,"src":"4536:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":29824,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4539:14:106","memberName":"facetAddresses","nodeType":"MemberAccess","referencedDeclaration":29578,"src":"4536:17:106","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":29825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4554:6:106","memberName":"length","nodeType":"MemberAccess","src":"4536:24:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":29826,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4564:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4536:29:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29854,"nodeType":"IfStatement","src":"4532:802:106","trueBody":{"id":29853,"nodeType":"Block","src":"4567:767:106","statements":[{"assignments":[29829],"declarations":[{"constant":false,"id":29829,"mutability":"mutable","name":"time","nameLocation":"4583:4:106","nodeType":"VariableDeclaration","scope":29853,"src":"4575:12:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29828,"name":"uint256","nodeType":"ElementaryTypeName","src":"4575:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29834,"initialValue":{"baseExpression":{"expression":{"id":29830,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29808,"src":"4590:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":29831,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4593:15:106","memberName":"acceptanceTimes","nodeType":"MemberAccess","referencedDeclaration":29588,"src":"4590:18:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":29833,"indexExpression":{"id":29832,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29813,"src":"4609:3:106","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4590:23:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4575:38:106"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29836,"name":"time","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29829,"src":"4629:4:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":29837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4637:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4629:9:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29839,"name":"time","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29829,"src":"4642:4:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":29840,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4650:5:106","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":29841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4656:9:106","memberName":"timestamp","nodeType":"MemberAccess","src":"4650:15:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4642:23:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4629:36:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c69624469616d6f6e643a2064656c6179206e6f7420656c6170736564","id":29844,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4667:31:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_bf74910c6b16e2fe967a9c2fd1df7451e7594bd2184362aed0a451068a63c3f3","typeString":"literal_string \"LibDiamond: delay not elapsed\""},"value":"LibDiamond: delay not elapsed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bf74910c6b16e2fe967a9c2fd1df7451e7594bd2184362aed0a451068a63c3f3","typeString":"literal_string \"LibDiamond: delay not elapsed\""}],"id":29835,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4621:7:106","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4621:78:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29846,"nodeType":"ExpressionStatement","src":"4621:78:106"},{"expression":{"id":29851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"5297:30:106","subExpression":{"baseExpression":{"expression":{"id":29847,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29808,"src":"5304:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":29848,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5307:15:106","memberName":"acceptanceTimes","nodeType":"MemberAccess","referencedDeclaration":29588,"src":"5304:18:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":29850,"indexExpression":{"id":29849,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29813,"src":"5323:3:106","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5304:23:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29852,"nodeType":"ExpressionStatement","src":"5297:30:106"}]}},{"assignments":[29856],"declarations":[{"constant":false,"id":29856,"mutability":"mutable","name":"len","nameLocation":"5434:3:106","nodeType":"VariableDeclaration","scope":29952,"src":"5426:11:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29855,"name":"uint256","nodeType":"ElementaryTypeName","src":"5426:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29859,"initialValue":{"expression":{"id":29857,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29799,"src":"5440:11:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"}},"id":29858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5452:6:106","memberName":"length","nodeType":"MemberAccess","src":"5440:18:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5426:32:106"},{"body":{"id":29939,"nodeType":"Block","src":"5509:711:106","statements":[{"assignments":[29870],"declarations":[{"constant":false,"id":29870,"mutability":"mutable","name":"action","nameLocation":"5544:6:106","nodeType":"VariableDeclaration","scope":29939,"src":"5517:33:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_FacetCutAction_$26852","typeString":"enum IDiamondCut.FacetCutAction"},"typeName":{"id":29869,"nodeType":"UserDefinedTypeName","pathNode":{"id":29868,"name":"IDiamondCut.FacetCutAction","nameLocations":["5517:11:106","5529:14:106"],"nodeType":"IdentifierPath","referencedDeclaration":26852,"src":"5517:26:106"},"referencedDeclaration":26852,"src":"5517:26:106","typeDescriptions":{"typeIdentifier":"t_enum$_FacetCutAction_$26852","typeString":"enum IDiamondCut.FacetCutAction"}},"visibility":"internal"}],"id":29875,"initialValue":{"expression":{"baseExpression":{"id":29871,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29799,"src":"5553:11:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"}},"id":29873,"indexExpression":{"id":29872,"name":"facetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29861,"src":"5565:10:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5553:23:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory"}},"id":29874,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5577:6:106","memberName":"action","nodeType":"MemberAccess","referencedDeclaration":26857,"src":"5553:30:106","typeDescriptions":{"typeIdentifier":"t_enum$_FacetCutAction_$26852","typeString":"enum IDiamondCut.FacetCutAction"}},"nodeType":"VariableDeclarationStatement","src":"5517:66:106"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_FacetCutAction_$26852","typeString":"enum IDiamondCut.FacetCutAction"},"id":29880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29876,"name":"action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29870,"src":"5595:6:106","typeDescriptions":{"typeIdentifier":"t_enum$_FacetCutAction_$26852","typeString":"enum IDiamondCut.FacetCutAction"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":29877,"name":"IDiamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26944,"src":"5605:11:106","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IDiamondCut_$26944_$","typeString":"type(contract IDiamondCut)"}},"id":29878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5617:14:106","memberName":"FacetCutAction","nodeType":"MemberAccess","referencedDeclaration":26852,"src":"5605:26:106","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_FacetCutAction_$26852_$","typeString":"type(enum IDiamondCut.FacetCutAction)"}},"id":29879,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5632:3:106","memberName":"Add","nodeType":"MemberAccess","referencedDeclaration":26849,"src":"5605:30:106","typeDescriptions":{"typeIdentifier":"t_enum$_FacetCutAction_$26852","typeString":"enum IDiamondCut.FacetCutAction"}},"src":"5595:40:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_FacetCutAction_$26852","typeString":"enum IDiamondCut.FacetCutAction"},"id":29897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29893,"name":"action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29870,"src":"5759:6:106","typeDescriptions":{"typeIdentifier":"t_enum$_FacetCutAction_$26852","typeString":"enum IDiamondCut.FacetCutAction"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":29894,"name":"IDiamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26944,"src":"5769:11:106","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IDiamondCut_$26944_$","typeString":"type(contract IDiamondCut)"}},"id":29895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5781:14:106","memberName":"FacetCutAction","nodeType":"MemberAccess","referencedDeclaration":26852,"src":"5769:26:106","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_FacetCutAction_$26852_$","typeString":"type(enum IDiamondCut.FacetCutAction)"}},"id":29896,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5796:7:106","memberName":"Replace","nodeType":"MemberAccess","referencedDeclaration":26850,"src":"5769:34:106","typeDescriptions":{"typeIdentifier":"t_enum$_FacetCutAction_$26852","typeString":"enum IDiamondCut.FacetCutAction"}},"src":"5759:44:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_FacetCutAction_$26852","typeString":"enum IDiamondCut.FacetCutAction"},"id":29914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29910,"name":"action","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29870,"src":"5931:6:106","typeDescriptions":{"typeIdentifier":"t_enum$_FacetCutAction_$26852","typeString":"enum IDiamondCut.FacetCutAction"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":29911,"name":"IDiamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26944,"src":"5941:11:106","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IDiamondCut_$26944_$","typeString":"type(contract IDiamondCut)"}},"id":29912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5953:14:106","memberName":"FacetCutAction","nodeType":"MemberAccess","referencedDeclaration":26852,"src":"5941:26:106","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_FacetCutAction_$26852_$","typeString":"type(enum IDiamondCut.FacetCutAction)"}},"id":29913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5968:6:106","memberName":"Remove","nodeType":"MemberAccess","referencedDeclaration":26851,"src":"5941:33:106","typeDescriptions":{"typeIdentifier":"t_enum$_FacetCutAction_$26852","typeString":"enum IDiamondCut.FacetCutAction"}},"src":"5931:43:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":29931,"nodeType":"Block","src":"6097:68:106","statements":[{"expression":{"arguments":[{"hexValue":"4c69624469616d6f6e644375743a20496e636f7272656374204661636574437574416374696f6e","id":29928,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6114:41:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54","typeString":"literal_string \"LibDiamondCut: Incorrect FacetCutAction\""},"value":"LibDiamondCut: Incorrect FacetCutAction"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54","typeString":"literal_string \"LibDiamondCut: Incorrect FacetCutAction\""}],"id":29927,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"6107:6:106","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":29929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6107:49:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29930,"nodeType":"ExpressionStatement","src":"6107:49:106"}]},"id":29932,"nodeType":"IfStatement","src":"5927:238:106","trueBody":{"id":29926,"nodeType":"Block","src":"5976:115:106","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"id":29916,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29799,"src":"6002:11:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"}},"id":29918,"indexExpression":{"id":29917,"name":"facetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29861,"src":"6014:10:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6002:23:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory"}},"id":29919,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6026:12:106","memberName":"facetAddress","nodeType":"MemberAccess","referencedDeclaration":26854,"src":"6002:36:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":29920,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29799,"src":"6040:11:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"}},"id":29922,"indexExpression":{"id":29921,"name":"facetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29861,"src":"6052:10:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6040:23:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory"}},"id":29923,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6064:17:106","memberName":"functionSelectors","nodeType":"MemberAccess","referencedDeclaration":26860,"src":"6040:41:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}],"id":29915,"name":"removeFunctions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30260,"src":"5986:15:106","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_bytes4_$dyn_memory_ptr_$returns$__$","typeString":"function (address,bytes4[] memory)"}},"id":29924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5986:96:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29925,"nodeType":"ExpressionStatement","src":"5986:96:106"}]}},"id":29933,"nodeType":"IfStatement","src":"5755:410:106","trueBody":{"id":29909,"nodeType":"Block","src":"5805:116:106","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"id":29899,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29799,"src":"5832:11:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"}},"id":29901,"indexExpression":{"id":29900,"name":"facetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29861,"src":"5844:10:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5832:23:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory"}},"id":29902,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5856:12:106","memberName":"facetAddress","nodeType":"MemberAccess","referencedDeclaration":26854,"src":"5832:36:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":29903,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29799,"src":"5870:11:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"}},"id":29905,"indexExpression":{"id":29904,"name":"facetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29861,"src":"5882:10:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5870:23:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory"}},"id":29906,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5894:17:106","memberName":"functionSelectors","nodeType":"MemberAccess","referencedDeclaration":26860,"src":"5870:41:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}],"id":29898,"name":"replaceFunctions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30167,"src":"5815:16:106","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_bytes4_$dyn_memory_ptr_$returns$__$","typeString":"function (address,bytes4[] memory)"}},"id":29907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5815:97:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29908,"nodeType":"ExpressionStatement","src":"5815:97:106"}]}},"id":29934,"nodeType":"IfStatement","src":"5591:574:106","trueBody":{"id":29892,"nodeType":"Block","src":"5637:112:106","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"id":29882,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29799,"src":"5660:11:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"}},"id":29884,"indexExpression":{"id":29883,"name":"facetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29861,"src":"5672:10:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5660:23:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory"}},"id":29885,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5684:12:106","memberName":"facetAddress","nodeType":"MemberAccess","referencedDeclaration":26854,"src":"5660:36:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":29886,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29799,"src":"5698:11:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"}},"id":29888,"indexExpression":{"id":29887,"name":"facetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29861,"src":"5710:10:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5698:23:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory"}},"id":29889,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5722:17:106","memberName":"functionSelectors","nodeType":"MemberAccess","referencedDeclaration":26860,"src":"5698:41:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}],"id":29881,"name":"addFunctions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30059,"src":"5647:12:106","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_bytes4_$dyn_memory_ptr_$returns$__$","typeString":"function (address,bytes4[] memory)"}},"id":29890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5647:93:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29891,"nodeType":"ExpressionStatement","src":"5647:93:106"}]}},{"id":29938,"nodeType":"UncheckedBlock","src":"6173:41:106","statements":[{"expression":{"id":29936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"6193:12:106","subExpression":{"id":29935,"name":"facetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29861,"src":"6195:10:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29937,"nodeType":"ExpressionStatement","src":"6193:12:106"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29863,"name":"facetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29861,"src":"5489:10:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":29864,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29856,"src":"5502:3:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5489:16:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29940,"initializationExpression":{"assignments":[29861],"declarations":[{"constant":false,"id":29861,"mutability":"mutable","name":"facetIndex","nameLocation":"5477:10:106","nodeType":"VariableDeclaration","scope":29940,"src":"5469:18:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29860,"name":"uint256","nodeType":"ElementaryTypeName","src":"5469:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29862,"nodeType":"VariableDeclarationStatement","src":"5469:18:106"},"nodeType":"ForStatement","src":"5464:756:106"},{"eventCall":{"arguments":[{"id":29942,"name":"_diamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29799,"src":"6241:11:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"}},{"id":29943,"name":"_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29801,"src":"6254:5:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29944,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29803,"src":"6261:9:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut memory[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":29941,"name":"DiamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29795,"src":"6230:10:106","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (struct IDiamondCut.FacetCut memory[] memory,address,bytes memory)"}},"id":29945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6230:41:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29946,"nodeType":"EmitStatement","src":"6225:46:106"},{"expression":{"arguments":[{"id":29948,"name":"_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29801,"src":"6298:5:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29949,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29803,"src":"6305:9:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":29947,"name":"initializeDiamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30578,"src":"6277:20:106","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory)"}},"id":29950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6277:38:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29951,"nodeType":"ExpressionStatement","src":"6277:38:106"}]},"id":29953,"implemented":true,"kind":"function","modifiers":[],"name":"diamondCut","nameLocation":"4286:10:106","nodeType":"FunctionDefinition","parameters":{"id":29804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29799,"mutability":"mutable","name":"_diamondCut","nameLocation":"4332:11:106","nodeType":"VariableDeclaration","scope":29953,"src":"4302:41:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","typeString":"struct IDiamondCut.FacetCut[]"},"typeName":{"baseType":{"id":29797,"nodeType":"UserDefinedTypeName","pathNode":{"id":29796,"name":"IDiamondCut.FacetCut","nameLocations":["4302:11:106","4314:8:106"],"nodeType":"IdentifierPath","referencedDeclaration":26861,"src":"4302:20:106"},"referencedDeclaration":26861,"src":"4302:20:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetCut_$26861_storage_ptr","typeString":"struct IDiamondCut.FacetCut"}},"id":29798,"nodeType":"ArrayTypeName","src":"4302:22:106","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_FacetCut_$26861_storage_$dyn_storage_ptr","typeString":"struct IDiamondCut.FacetCut[]"}},"visibility":"internal"},{"constant":false,"id":29801,"mutability":"mutable","name":"_init","nameLocation":"4357:5:106","nodeType":"VariableDeclaration","scope":29953,"src":"4349:13:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29800,"name":"address","nodeType":"ElementaryTypeName","src":"4349:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29803,"mutability":"mutable","name":"_calldata","nameLocation":"4381:9:106","nodeType":"VariableDeclaration","scope":29953,"src":"4368:22:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":29802,"name":"bytes","nodeType":"ElementaryTypeName","src":"4368:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4296:98:106"},"returnParameters":{"id":29805,"nodeType":"ParameterList","parameters":[],"src":"4404:0:106"},"scope":30596,"src":"4277:2043:106","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":30058,"nodeType":"Block","src":"6414:966:106","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":29962,"name":"_functionSelectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29958,"src":"6428:18:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"id":29963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6447:6:106","memberName":"length","nodeType":"MemberAccess","src":"6428:25:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":29964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6457:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6428:30:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e20666163657420746f20637574","id":29966,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6460:45:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0","typeString":"literal_string \"LibDiamondCut: No selectors in facet to cut\""},"value":"LibDiamondCut: No selectors in facet to cut"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0","typeString":"literal_string \"LibDiamondCut: No selectors in facet to cut\""}],"id":29961,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6420:7:106","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6420:86:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29968,"nodeType":"ExpressionStatement","src":"6420:86:106"},{"assignments":[29971],"declarations":[{"constant":false,"id":29971,"mutability":"mutable","name":"ds","nameLocation":"6535:2:106","nodeType":"VariableDeclaration","scope":30058,"src":"6512:25:106","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"},"typeName":{"id":29970,"nodeType":"UserDefinedTypeName","pathNode":{"id":29969,"name":"DiamondStorage","nameLocations":["6512:14:106"],"nodeType":"IdentifierPath","referencedDeclaration":29591,"src":"6512:14:106"},"referencedDeclaration":29591,"src":"6512:14:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"}},"visibility":"internal"}],"id":29974,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":29972,"name":"diamondStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29603,"src":"6540:14:106","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$29591_storage_ptr_$","typeString":"function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"}},"id":29973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6540:16:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6512:44:106"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":29981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29976,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29955,"src":"6570:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":29979,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6595:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":29978,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6587:7:106","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29977,"name":"address","nodeType":"ElementaryTypeName","src":"6587:7:106","typeDescriptions":{}}},"id":29980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6587:10:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6570:27:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c69624469616d6f6e644375743a204164642066616365742063616e27742062652061646472657373283029","id":29982,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6599:46:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a","typeString":"literal_string \"LibDiamondCut: Add facet can't be address(0)\""},"value":"LibDiamondCut: Add facet can't be address(0)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a","typeString":"literal_string \"LibDiamondCut: Add facet can't be address(0)\""}],"id":29975,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6562:7:106","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6562:84:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29984,"nodeType":"ExpressionStatement","src":"6562:84:106"},{"assignments":[29986],"declarations":[{"constant":false,"id":29986,"mutability":"mutable","name":"selectorPosition","nameLocation":"6659:16:106","nodeType":"VariableDeclaration","scope":30058,"src":"6652:23:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":29985,"name":"uint96","nodeType":"ElementaryTypeName","src":"6652:6:106","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"id":29996,"initialValue":{"arguments":[{"expression":{"expression":{"baseExpression":{"expression":{"id":29989,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29971,"src":"6685:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":29990,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6688:22:106","memberName":"facetFunctionSelectors","nodeType":"MemberAccess","referencedDeclaration":29575,"src":"6685:25:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$29565_storage_$","typeString":"mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"}},"id":29992,"indexExpression":{"id":29991,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29955,"src":"6711:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6685:40:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetFunctionSelectors_$29565_storage","typeString":"struct LibDiamond.FacetFunctionSelectors storage ref"}},"id":29993,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6726:17:106","memberName":"functionSelectors","nodeType":"MemberAccess","referencedDeclaration":29562,"src":"6685:58:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage","typeString":"bytes4[] storage ref"}},"id":29994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6744:6:106","memberName":"length","nodeType":"MemberAccess","src":"6685:65:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29988,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6678:6:106","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":29987,"name":"uint96","nodeType":"ElementaryTypeName","src":"6678:6:106","typeDescriptions":{}}},"id":29995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6678:73:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"6652:99:106"},{"condition":{"commonType":{"typeIdentifier":"t_uint96","typeString":"uint96"},"id":29999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29997,"name":"selectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29986,"src":"6811:16:106","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":29998,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6831:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6811:21:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30006,"nodeType":"IfStatement","src":"6807:69:106","trueBody":{"id":30005,"nodeType":"Block","src":"6834:42:106","statements":[{"expression":{"arguments":[{"id":30001,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29971,"src":"6851:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},{"id":30002,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29955,"src":"6855:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"},{"typeIdentifier":"t_address","typeString":"address"}],"id":30000,"name":"addFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30293,"src":"6842:8:106","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_DiamondStorage_$29591_storage_ptr_$_t_address_$returns$__$","typeString":"function (struct LibDiamond.DiamondStorage storage pointer,address)"}},"id":30003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6842:27:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30004,"nodeType":"ExpressionStatement","src":"6842:27:106"}]}},{"assignments":[30008],"declarations":[{"constant":false,"id":30008,"mutability":"mutable","name":"len","nameLocation":"6889:3:106","nodeType":"VariableDeclaration","scope":30058,"src":"6881:11:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30007,"name":"uint256","nodeType":"ElementaryTypeName","src":"6881:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30011,"initialValue":{"expression":{"id":30009,"name":"_functionSelectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29958,"src":"6895:18:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"id":30010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6914:6:106","memberName":"length","nodeType":"MemberAccess","src":"6895:25:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6881:39:106"},{"body":{"id":30056,"nodeType":"Block","src":"6977:399:106","statements":[{"assignments":[30019],"declarations":[{"constant":false,"id":30019,"mutability":"mutable","name":"selector","nameLocation":"6992:8:106","nodeType":"VariableDeclaration","scope":30056,"src":"6985:15:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":30018,"name":"bytes4","nodeType":"ElementaryTypeName","src":"6985:6:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":30023,"initialValue":{"baseExpression":{"id":30020,"name":"_functionSelectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29958,"src":"7003:18:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"id":30022,"indexExpression":{"id":30021,"name":"selectorIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30013,"src":"7022:13:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7003:33:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"6985:51:106"},{"assignments":[30025],"declarations":[{"constant":false,"id":30025,"mutability":"mutable","name":"oldFacetAddress","nameLocation":"7052:15:106","nodeType":"VariableDeclaration","scope":30056,"src":"7044:23:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30024,"name":"address","nodeType":"ElementaryTypeName","src":"7044:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":30031,"initialValue":{"expression":{"baseExpression":{"expression":{"id":30026,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29971,"src":"7070:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30027,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7073:26:106","memberName":"selectorToFacetAndPosition","nodeType":"MemberAccess","referencedDeclaration":29570,"src":"7070:29:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$29559_storage_$","typeString":"mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"}},"id":30029,"indexExpression":{"id":30028,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30019,"src":"7100:8:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7070:39:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetAddressAndPosition_$29559_storage","typeString":"struct LibDiamond.FacetAddressAndPosition storage ref"}},"id":30030,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7110:12:106","memberName":"facetAddress","nodeType":"MemberAccess","referencedDeclaration":29556,"src":"7070:52:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"7044:78:106"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":30038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30033,"name":"oldFacetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30025,"src":"7138:15:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":30036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7165:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":30035,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7157:7:106","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30034,"name":"address","nodeType":"ElementaryTypeName","src":"7157:7:106","typeDescriptions":{}}},"id":30037,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7157:10:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7138:29:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6e207468617420616c726561647920657869737473","id":30039,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7169:55:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700","typeString":"literal_string \"LibDiamondCut: Can't add function that already exists\""},"value":"LibDiamondCut: Can't add function that already exists"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700","typeString":"literal_string \"LibDiamondCut: Can't add function that already exists\""}],"id":30032,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7130:7:106","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7130:95:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30041,"nodeType":"ExpressionStatement","src":"7130:95:106"},{"expression":{"arguments":[{"id":30043,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29971,"src":"7245:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},{"id":30044,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30019,"src":"7249:8:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":30045,"name":"selectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29986,"src":"7259:16:106","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},{"id":30046,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29955,"src":"7277:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_uint96","typeString":"uint96"},{"typeIdentifier":"t_address","typeString":"address"}],"id":30042,"name":"addFunction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30334,"src":"7233:11:106","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_DiamondStorage_$29591_storage_ptr_$_t_bytes4_$_t_uint96_$_t_address_$returns$__$","typeString":"function (struct LibDiamond.DiamondStorage storage pointer,bytes4,uint96,address)"}},"id":30047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7233:58:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30048,"nodeType":"ExpressionStatement","src":"7233:58:106"},{"expression":{"id":30050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"7299:18:106","subExpression":{"id":30049,"name":"selectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29986,"src":"7299:16:106","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"id":30051,"nodeType":"ExpressionStatement","src":"7299:18:106"},{"id":30055,"nodeType":"UncheckedBlock","src":"7326:44:106","statements":[{"expression":{"id":30053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7346:15:106","subExpression":{"id":30052,"name":"selectorIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30013,"src":"7348:13:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30054,"nodeType":"ExpressionStatement","src":"7346:15:106"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30015,"name":"selectorIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30013,"src":"6954:13:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":30016,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30008,"src":"6970:3:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6954:19:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30057,"initializationExpression":{"assignments":[30013],"declarations":[{"constant":false,"id":30013,"mutability":"mutable","name":"selectorIndex","nameLocation":"6939:13:106","nodeType":"VariableDeclaration","scope":30057,"src":"6931:21:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30012,"name":"uint256","nodeType":"ElementaryTypeName","src":"6931:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30014,"nodeType":"VariableDeclarationStatement","src":"6931:21:106"},"nodeType":"ForStatement","src":"6926:450:106"}]},"id":30059,"implemented":true,"kind":"function","modifiers":[],"name":"addFunctions","nameLocation":"6333:12:106","nodeType":"FunctionDefinition","parameters":{"id":29959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29955,"mutability":"mutable","name":"_facetAddress","nameLocation":"6354:13:106","nodeType":"VariableDeclaration","scope":30059,"src":"6346:21:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29954,"name":"address","nodeType":"ElementaryTypeName","src":"6346:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29958,"mutability":"mutable","name":"_functionSelectors","nameLocation":"6385:18:106","nodeType":"VariableDeclaration","scope":30059,"src":"6369:34:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[]"},"typeName":{"baseType":{"id":29956,"name":"bytes4","nodeType":"ElementaryTypeName","src":"6369:6:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":29957,"nodeType":"ArrayTypeName","src":"6369:8:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"}},"visibility":"internal"}],"src":"6345:59:106"},"returnParameters":{"id":29960,"nodeType":"ParameterList","parameters":[],"src":"6414:0:106"},"scope":30596,"src":"6324:1056:106","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":30166,"nodeType":"Block","src":"7478:1003:106","statements":[{"assignments":[30068],"declarations":[{"constant":false,"id":30068,"mutability":"mutable","name":"len","nameLocation":"7492:3:106","nodeType":"VariableDeclaration","scope":30166,"src":"7484:11:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30067,"name":"uint256","nodeType":"ElementaryTypeName","src":"7484:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30071,"initialValue":{"expression":{"id":30069,"name":"_functionSelectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30064,"src":"7498:18:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"id":30070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7517:6:106","memberName":"length","nodeType":"MemberAccess","src":"7498:25:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7484:39:106"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30073,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30068,"src":"7537:3:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":30074,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7544:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7537:8:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e20666163657420746f20637574","id":30076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7547:45:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0","typeString":"literal_string \"LibDiamondCut: No selectors in facet to cut\""},"value":"LibDiamondCut: No selectors in facet to cut"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0","typeString":"literal_string \"LibDiamondCut: No selectors in facet to cut\""}],"id":30072,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7529:7:106","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7529:64:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30078,"nodeType":"ExpressionStatement","src":"7529:64:106"},{"assignments":[30081],"declarations":[{"constant":false,"id":30081,"mutability":"mutable","name":"ds","nameLocation":"7622:2:106","nodeType":"VariableDeclaration","scope":30166,"src":"7599:25:106","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"},"typeName":{"id":30080,"nodeType":"UserDefinedTypeName","pathNode":{"id":30079,"name":"DiamondStorage","nameLocations":["7599:14:106"],"nodeType":"IdentifierPath","referencedDeclaration":29591,"src":"7599:14:106"},"referencedDeclaration":29591,"src":"7599:14:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"}},"visibility":"internal"}],"id":30084,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":30082,"name":"diamondStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29603,"src":"7627:14:106","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$29591_storage_ptr_$","typeString":"function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"}},"id":30083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7627:16:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7599:44:106"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":30091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30086,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30061,"src":"7657:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":30089,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7682:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":30088,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7674:7:106","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30087,"name":"address","nodeType":"ElementaryTypeName","src":"7674:7:106","typeDescriptions":{}}},"id":30090,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7674:10:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7657:27:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c69624469616d6f6e644375743a204164642066616365742063616e27742062652061646472657373283029","id":30092,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7686:46:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a","typeString":"literal_string \"LibDiamondCut: Add facet can't be address(0)\""},"value":"LibDiamondCut: Add facet can't be address(0)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a","typeString":"literal_string \"LibDiamondCut: Add facet can't be address(0)\""}],"id":30085,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7649:7:106","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7649:84:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30094,"nodeType":"ExpressionStatement","src":"7649:84:106"},{"assignments":[30096],"declarations":[{"constant":false,"id":30096,"mutability":"mutable","name":"selectorPosition","nameLocation":"7746:16:106","nodeType":"VariableDeclaration","scope":30166,"src":"7739:23:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":30095,"name":"uint96","nodeType":"ElementaryTypeName","src":"7739:6:106","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"id":30106,"initialValue":{"arguments":[{"expression":{"expression":{"baseExpression":{"expression":{"id":30099,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30081,"src":"7772:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30100,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7775:22:106","memberName":"facetFunctionSelectors","nodeType":"MemberAccess","referencedDeclaration":29575,"src":"7772:25:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$29565_storage_$","typeString":"mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"}},"id":30102,"indexExpression":{"id":30101,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30061,"src":"7798:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7772:40:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetFunctionSelectors_$29565_storage","typeString":"struct LibDiamond.FacetFunctionSelectors storage ref"}},"id":30103,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7813:17:106","memberName":"functionSelectors","nodeType":"MemberAccess","referencedDeclaration":29562,"src":"7772:58:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage","typeString":"bytes4[] storage ref"}},"id":30104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7831:6:106","memberName":"length","nodeType":"MemberAccess","src":"7772:65:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30098,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7765:6:106","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":30097,"name":"uint96","nodeType":"ElementaryTypeName","src":"7765:6:106","typeDescriptions":{}}},"id":30105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7765:73:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"7739:99:106"},{"condition":{"commonType":{"typeIdentifier":"t_uint96","typeString":"uint96"},"id":30109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30107,"name":"selectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30096,"src":"7898:16:106","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":30108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7918:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7898:21:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30116,"nodeType":"IfStatement","src":"7894:69:106","trueBody":{"id":30115,"nodeType":"Block","src":"7921:42:106","statements":[{"expression":{"arguments":[{"id":30111,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30081,"src":"7938:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},{"id":30112,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30061,"src":"7942:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"},{"typeIdentifier":"t_address","typeString":"address"}],"id":30110,"name":"addFacet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30293,"src":"7929:8:106","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_DiamondStorage_$29591_storage_ptr_$_t_address_$returns$__$","typeString":"function (struct LibDiamond.DiamondStorage storage pointer,address)"}},"id":30113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7929:27:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30114,"nodeType":"ExpressionStatement","src":"7929:27:106"}]}},{"body":{"id":30164,"nodeType":"Block","src":"8019:458:106","statements":[{"assignments":[30124],"declarations":[{"constant":false,"id":30124,"mutability":"mutable","name":"selector","nameLocation":"8034:8:106","nodeType":"VariableDeclaration","scope":30164,"src":"8027:15:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":30123,"name":"bytes4","nodeType":"ElementaryTypeName","src":"8027:6:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":30128,"initialValue":{"baseExpression":{"id":30125,"name":"_functionSelectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30064,"src":"8045:18:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"id":30127,"indexExpression":{"id":30126,"name":"selectorIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30118,"src":"8064:13:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8045:33:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"8027:51:106"},{"assignments":[30130],"declarations":[{"constant":false,"id":30130,"mutability":"mutable","name":"oldFacetAddress","nameLocation":"8094:15:106","nodeType":"VariableDeclaration","scope":30164,"src":"8086:23:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30129,"name":"address","nodeType":"ElementaryTypeName","src":"8086:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":30136,"initialValue":{"expression":{"baseExpression":{"expression":{"id":30131,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30081,"src":"8112:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30132,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8115:26:106","memberName":"selectorToFacetAndPosition","nodeType":"MemberAccess","referencedDeclaration":29570,"src":"8112:29:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$29559_storage_$","typeString":"mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"}},"id":30134,"indexExpression":{"id":30133,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30124,"src":"8142:8:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8112:39:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetAddressAndPosition_$29559_storage","typeString":"struct LibDiamond.FacetAddressAndPosition storage ref"}},"id":30135,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8152:12:106","memberName":"facetAddress","nodeType":"MemberAccess","referencedDeclaration":29556,"src":"8112:52:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8086:78:106"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":30140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30138,"name":"oldFacetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30130,"src":"8180:15:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":30139,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30061,"src":"8199:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8180:32:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e6374696f6e20776974682073616d652066756e6374696f6e","id":30141,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8214:58:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078","typeString":"literal_string \"LibDiamondCut: Can't replace function with same function\""},"value":"LibDiamondCut: Can't replace function with same function"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078","typeString":"literal_string \"LibDiamondCut: Can't replace function with same function\""}],"id":30137,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8172:7:106","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8172:101:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30143,"nodeType":"ExpressionStatement","src":"8172:101:106"},{"expression":{"arguments":[{"id":30145,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30081,"src":"8296:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},{"id":30146,"name":"oldFacetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30130,"src":"8300:15:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30147,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30124,"src":"8317:8:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":30144,"name":"removeFunction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30501,"src":"8281:14:106","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_DiamondStorage_$29591_storage_ptr_$_t_address_$_t_bytes4_$returns$__$","typeString":"function (struct LibDiamond.DiamondStorage storage pointer,address,bytes4)"}},"id":30148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8281:45:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30149,"nodeType":"ExpressionStatement","src":"8281:45:106"},{"expression":{"arguments":[{"id":30151,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30081,"src":"8346:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},{"id":30152,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30124,"src":"8350:8:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":30153,"name":"selectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30096,"src":"8360:16:106","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},{"id":30154,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30061,"src":"8378:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_uint96","typeString":"uint96"},{"typeIdentifier":"t_address","typeString":"address"}],"id":30150,"name":"addFunction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30334,"src":"8334:11:106","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_DiamondStorage_$29591_storage_ptr_$_t_bytes4_$_t_uint96_$_t_address_$returns$__$","typeString":"function (struct LibDiamond.DiamondStorage storage pointer,bytes4,uint96,address)"}},"id":30155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8334:58:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30156,"nodeType":"ExpressionStatement","src":"8334:58:106"},{"expression":{"id":30158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8400:18:106","subExpression":{"id":30157,"name":"selectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30096,"src":"8400:16:106","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"id":30159,"nodeType":"ExpressionStatement","src":"8400:18:106"},{"id":30163,"nodeType":"UncheckedBlock","src":"8427:44:106","statements":[{"expression":{"id":30161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"8447:15:106","subExpression":{"id":30160,"name":"selectorIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30118,"src":"8449:13:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30162,"nodeType":"ExpressionStatement","src":"8447:15:106"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30120,"name":"selectorIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30118,"src":"7996:13:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":30121,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30068,"src":"8012:3:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7996:19:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30165,"initializationExpression":{"assignments":[30118],"declarations":[{"constant":false,"id":30118,"mutability":"mutable","name":"selectorIndex","nameLocation":"7981:13:106","nodeType":"VariableDeclaration","scope":30165,"src":"7973:21:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30117,"name":"uint256","nodeType":"ElementaryTypeName","src":"7973:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30119,"nodeType":"VariableDeclarationStatement","src":"7973:21:106"},"nodeType":"ForStatement","src":"7968:509:106"}]},"id":30167,"implemented":true,"kind":"function","modifiers":[],"name":"replaceFunctions","nameLocation":"7393:16:106","nodeType":"FunctionDefinition","parameters":{"id":30065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30061,"mutability":"mutable","name":"_facetAddress","nameLocation":"7418:13:106","nodeType":"VariableDeclaration","scope":30167,"src":"7410:21:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30060,"name":"address","nodeType":"ElementaryTypeName","src":"7410:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30064,"mutability":"mutable","name":"_functionSelectors","nameLocation":"7449:18:106","nodeType":"VariableDeclaration","scope":30167,"src":"7433:34:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[]"},"typeName":{"baseType":{"id":30062,"name":"bytes4","nodeType":"ElementaryTypeName","src":"7433:6:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":30063,"nodeType":"ArrayTypeName","src":"7433:8:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"}},"visibility":"internal"}],"src":"7409:59:106"},"returnParameters":{"id":30066,"nodeType":"ParameterList","parameters":[],"src":"7478:0:106"},"scope":30596,"src":"7384:1097:106","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":30259,"nodeType":"Block","src":"8578:977:106","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":30176,"name":"_functionSelectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30172,"src":"8592:18:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"id":30177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8611:6:106","memberName":"length","nodeType":"MemberAccess","src":"8592:25:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":30178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8621:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8592:30:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e20666163657420746f20637574","id":30180,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8624:45:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0","typeString":"literal_string \"LibDiamondCut: No selectors in facet to cut\""},"value":"LibDiamondCut: No selectors in facet to cut"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0","typeString":"literal_string \"LibDiamondCut: No selectors in facet to cut\""}],"id":30175,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8584:7:106","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8584:86:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30182,"nodeType":"ExpressionStatement","src":"8584:86:106"},{"assignments":[30185],"declarations":[{"constant":false,"id":30185,"mutability":"mutable","name":"ds","nameLocation":"8699:2:106","nodeType":"VariableDeclaration","scope":30259,"src":"8676:25:106","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"},"typeName":{"id":30184,"nodeType":"UserDefinedTypeName","pathNode":{"id":30183,"name":"DiamondStorage","nameLocations":["8676:14:106"],"nodeType":"IdentifierPath","referencedDeclaration":29591,"src":"8676:14:106"},"referencedDeclaration":29591,"src":"8676:14:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"}},"visibility":"internal"}],"id":30188,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":30186,"name":"diamondStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29603,"src":"8704:14:106","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$29591_storage_ptr_$","typeString":"function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"}},"id":30187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8704:16:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"8676:44:106"},{"assignments":[30190],"declarations":[{"constant":false,"id":30190,"mutability":"mutable","name":"proposeSelector","nameLocation":"8800:15:106","nodeType":"VariableDeclaration","scope":30259,"src":"8793:22:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":30189,"name":"bytes4","nodeType":"ElementaryTypeName","src":"8793:6:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":30194,"initialValue":{"expression":{"expression":{"id":30191,"name":"IDiamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26944,"src":"8818:11:106","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IDiamondCut_$26944_$","typeString":"type(contract IDiamondCut)"}},"id":30192,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8830:17:106","memberName":"proposeDiamondCut","nodeType":"MemberAccess","referencedDeclaration":26873,"src":"8818:29:106","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr_$_t_address_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function IDiamondCut.proposeDiamondCut(struct IDiamondCut.FacetCut calldata[] calldata,address,bytes calldata)"}},"id":30193,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8848:8:106","memberName":"selector","nodeType":"MemberAccess","src":"8818:38:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"8793:63:106"},{"assignments":[30196],"declarations":[{"constant":false,"id":30196,"mutability":"mutable","name":"cutSelector","nameLocation":"8869:11:106","nodeType":"VariableDeclaration","scope":30259,"src":"8862:18:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":30195,"name":"bytes4","nodeType":"ElementaryTypeName","src":"8862:6:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":30200,"initialValue":{"expression":{"expression":{"id":30197,"name":"IDiamondCut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26944,"src":"8883:11:106","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IDiamondCut_$26944_$","typeString":"type(contract IDiamondCut)"}},"id":30198,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8895:10:106","memberName":"diamondCut","nodeType":"MemberAccess","referencedDeclaration":26897,"src":"8883:22:106","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr_$_t_address_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function IDiamondCut.diamondCut(struct IDiamondCut.FacetCut calldata[] calldata,address,bytes calldata)"}},"id":30199,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8906:8:106","memberName":"selector","nodeType":"MemberAccess","src":"8883:31:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"8862:52:106"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":30207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30202,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30169,"src":"8989:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":30205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9014:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":30204,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9006:7:106","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30203,"name":"address","nodeType":"ElementaryTypeName","src":"9006:7:106","typeDescriptions":{}}},"id":30206,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9006:10:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8989:27:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472657373206d7573742062652061646472657373283029","id":30208,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9018:56:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4","typeString":"literal_string \"LibDiamondCut: Remove facet address must be address(0)\""},"value":"LibDiamondCut: Remove facet address must be address(0)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4","typeString":"literal_string \"LibDiamondCut: Remove facet address must be address(0)\""}],"id":30201,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8981:7:106","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8981:94:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30210,"nodeType":"ExpressionStatement","src":"8981:94:106"},{"assignments":[30212],"declarations":[{"constant":false,"id":30212,"mutability":"mutable","name":"len","nameLocation":"9089:3:106","nodeType":"VariableDeclaration","scope":30259,"src":"9081:11:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30211,"name":"uint256","nodeType":"ElementaryTypeName","src":"9081:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30215,"initialValue":{"expression":{"id":30213,"name":"_functionSelectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30172,"src":"9095:18:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"id":30214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9114:6:106","memberName":"length","nodeType":"MemberAccess","src":"9095:25:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9081:39:106"},{"body":{"id":30257,"nodeType":"Block","src":"9177:374:106","statements":[{"assignments":[30223],"declarations":[{"constant":false,"id":30223,"mutability":"mutable","name":"selector","nameLocation":"9192:8:106","nodeType":"VariableDeclaration","scope":30257,"src":"9185:15:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":30222,"name":"bytes4","nodeType":"ElementaryTypeName","src":"9185:6:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":30227,"initialValue":{"baseExpression":{"id":30224,"name":"_functionSelectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30172,"src":"9203:18:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[] memory"}},"id":30226,"indexExpression":{"id":30225,"name":"selectorIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30217,"src":"9222:13:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9203:33:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"9185:51:106"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":30235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":30231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30229,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30223,"src":"9252:8:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":30230,"name":"proposeSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30190,"src":"9264:15:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"9252:27:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":30234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30232,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30223,"src":"9283:8:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":30233,"name":"cutSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30196,"src":"9295:11:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"9283:23:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9252:54:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c69624469616d6f6e644375743a2043616e6e6f742072656d6f7665206375742073656c6563746f7273","id":30236,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9308:44:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_6dc3f1dab50ff21fc15088aa16d05815257e5abe70c54939829f018f001302c3","typeString":"literal_string \"LibDiamondCut: Cannot remove cut selectors\""},"value":"LibDiamondCut: Cannot remove cut selectors"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6dc3f1dab50ff21fc15088aa16d05815257e5abe70c54939829f018f001302c3","typeString":"literal_string \"LibDiamondCut: Cannot remove cut selectors\""}],"id":30228,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9244:7:106","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9244:109:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30238,"nodeType":"ExpressionStatement","src":"9244:109:106"},{"assignments":[30240],"declarations":[{"constant":false,"id":30240,"mutability":"mutable","name":"oldFacetAddress","nameLocation":"9369:15:106","nodeType":"VariableDeclaration","scope":30257,"src":"9361:23:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30239,"name":"address","nodeType":"ElementaryTypeName","src":"9361:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":30246,"initialValue":{"expression":{"baseExpression":{"expression":{"id":30241,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30185,"src":"9387:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30242,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9390:26:106","memberName":"selectorToFacetAndPosition","nodeType":"MemberAccess","referencedDeclaration":29570,"src":"9387:29:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$29559_storage_$","typeString":"mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"}},"id":30244,"indexExpression":{"id":30243,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30223,"src":"9417:8:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9387:39:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetAddressAndPosition_$29559_storage","typeString":"struct LibDiamond.FacetAddressAndPosition storage ref"}},"id":30245,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9427:12:106","memberName":"facetAddress","nodeType":"MemberAccess","referencedDeclaration":29556,"src":"9387:52:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"9361:78:106"},{"expression":{"arguments":[{"id":30248,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30185,"src":"9462:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},{"id":30249,"name":"oldFacetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30240,"src":"9466:15:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30250,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30223,"src":"9483:8:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":30247,"name":"removeFunction","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30501,"src":"9447:14:106","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_DiamondStorage_$29591_storage_ptr_$_t_address_$_t_bytes4_$returns$__$","typeString":"function (struct LibDiamond.DiamondStorage storage pointer,address,bytes4)"}},"id":30251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9447:45:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30252,"nodeType":"ExpressionStatement","src":"9447:45:106"},{"id":30256,"nodeType":"UncheckedBlock","src":"9501:44:106","statements":[{"expression":{"id":30254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"9521:15:106","subExpression":{"id":30253,"name":"selectorIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30217,"src":"9523:13:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30255,"nodeType":"ExpressionStatement","src":"9521:15:106"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30219,"name":"selectorIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30217,"src":"9154:13:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":30220,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30212,"src":"9170:3:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9154:19:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30258,"initializationExpression":{"assignments":[30217],"declarations":[{"constant":false,"id":30217,"mutability":"mutable","name":"selectorIndex","nameLocation":"9139:13:106","nodeType":"VariableDeclaration","scope":30258,"src":"9131:21:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30216,"name":"uint256","nodeType":"ElementaryTypeName","src":"9131:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30218,"nodeType":"VariableDeclarationStatement","src":"9131:21:106"},"nodeType":"ForStatement","src":"9126:425:106"}]},"id":30260,"implemented":true,"kind":"function","modifiers":[],"name":"removeFunctions","nameLocation":"8494:15:106","nodeType":"FunctionDefinition","parameters":{"id":30173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30169,"mutability":"mutable","name":"_facetAddress","nameLocation":"8518:13:106","nodeType":"VariableDeclaration","scope":30260,"src":"8510:21:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30168,"name":"address","nodeType":"ElementaryTypeName","src":"8510:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30172,"mutability":"mutable","name":"_functionSelectors","nameLocation":"8549:18:106","nodeType":"VariableDeclaration","scope":30260,"src":"8533:34:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_memory_ptr","typeString":"bytes4[]"},"typeName":{"baseType":{"id":30170,"name":"bytes4","nodeType":"ElementaryTypeName","src":"8533:6:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":30171,"nodeType":"ArrayTypeName","src":"8533:8:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage_ptr","typeString":"bytes4[]"}},"visibility":"internal"}],"src":"8509:59:106"},"returnParameters":{"id":30174,"nodeType":"ParameterList","parameters":[],"src":"8578:0:106"},"scope":30596,"src":"8485:1070:106","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":30292,"nodeType":"Block","src":"9636:225:106","statements":[{"expression":{"arguments":[{"id":30269,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30265,"src":"9665:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"4c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465","id":30270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9680:38:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_846ccbeb9c32d4d40d2c1bf991251db6ab65744a2f52b273947cee088a65504b","typeString":"literal_string \"LibDiamondCut: New facet has no code\""},"value":"LibDiamondCut: New facet has no code"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_846ccbeb9c32d4d40d2c1bf991251db6ab65744a2f52b273947cee088a65504b","typeString":"literal_string \"LibDiamondCut: New facet has no code\""}],"id":30268,"name":"enforceHasContractCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30595,"src":"9642:22:106","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory) view"}},"id":30271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9642:77:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30272,"nodeType":"ExpressionStatement","src":"9642:77:106"},{"expression":{"id":30282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":30273,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30263,"src":"9725:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30276,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9728:22:106","memberName":"facetFunctionSelectors","nodeType":"MemberAccess","referencedDeclaration":29575,"src":"9725:25:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$29565_storage_$","typeString":"mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"}},"id":30277,"indexExpression":{"id":30275,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30265,"src":"9751:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9725:40:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetFunctionSelectors_$29565_storage","typeString":"struct LibDiamond.FacetFunctionSelectors storage ref"}},"id":30278,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9766:20:106","memberName":"facetAddressPosition","nodeType":"MemberAccess","referencedDeclaration":29564,"src":"9725:61:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":30279,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30263,"src":"9789:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30280,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9792:14:106","memberName":"facetAddresses","nodeType":"MemberAccess","referencedDeclaration":29578,"src":"9789:17:106","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":30281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9807:6:106","memberName":"length","nodeType":"MemberAccess","src":"9789:24:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9725:88:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30283,"nodeType":"ExpressionStatement","src":"9725:88:106"},{"expression":{"arguments":[{"id":30289,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30265,"src":"9842:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":30284,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30263,"src":"9819:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30287,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9822:14:106","memberName":"facetAddresses","nodeType":"MemberAccess","referencedDeclaration":29578,"src":"9819:17:106","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":30288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9837:4:106","memberName":"push","nodeType":"MemberAccess","src":"9819:22:106","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer,address)"}},"id":30290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9819:37:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30291,"nodeType":"ExpressionStatement","src":"9819:37:106"}]},"id":30293,"implemented":true,"kind":"function","modifiers":[],"name":"addFacet","nameLocation":"9568:8:106","nodeType":"FunctionDefinition","parameters":{"id":30266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30263,"mutability":"mutable","name":"ds","nameLocation":"9600:2:106","nodeType":"VariableDeclaration","scope":30293,"src":"9577:25:106","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"},"typeName":{"id":30262,"nodeType":"UserDefinedTypeName","pathNode":{"id":30261,"name":"DiamondStorage","nameLocations":["9577:14:106"],"nodeType":"IdentifierPath","referencedDeclaration":29591,"src":"9577:14:106"},"referencedDeclaration":29591,"src":"9577:14:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"}},"visibility":"internal"},{"constant":false,"id":30265,"mutability":"mutable","name":"_facetAddress","nameLocation":"9612:13:106","nodeType":"VariableDeclaration","scope":30293,"src":"9604:21:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30264,"name":"address","nodeType":"ElementaryTypeName","src":"9604:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9576:50:106"},"returnParameters":{"id":30267,"nodeType":"ParameterList","parameters":[],"src":"9636:0:106"},"scope":30596,"src":"9559:302:106","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":30333,"nodeType":"Block","src":"10009:251:106","statements":[{"expression":{"id":30312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":30305,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30296,"src":"10015:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30308,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10018:26:106","memberName":"selectorToFacetAndPosition","nodeType":"MemberAccess","referencedDeclaration":29570,"src":"10015:29:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$29559_storage_$","typeString":"mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"}},"id":30309,"indexExpression":{"id":30307,"name":"_selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30298,"src":"10045:9:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10015:40:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetAddressAndPosition_$29559_storage","typeString":"struct LibDiamond.FacetAddressAndPosition storage ref"}},"id":30310,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10056:24:106","memberName":"functionSelectorPosition","nodeType":"MemberAccess","referencedDeclaration":29558,"src":"10015:65:106","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30311,"name":"_selectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30300,"src":"10083:17:106","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"10015:85:106","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"id":30313,"nodeType":"ExpressionStatement","src":"10015:85:106"},{"expression":{"arguments":[{"id":30321,"name":"_selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30298,"src":"10170:9:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"expression":{"baseExpression":{"expression":{"id":30314,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30296,"src":"10106:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30317,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10109:22:106","memberName":"facetFunctionSelectors","nodeType":"MemberAccess","referencedDeclaration":29575,"src":"10106:25:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$29565_storage_$","typeString":"mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"}},"id":30318,"indexExpression":{"id":30316,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30302,"src":"10132:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10106:40:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetFunctionSelectors_$29565_storage","typeString":"struct LibDiamond.FacetFunctionSelectors storage ref"}},"id":30319,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10147:17:106","memberName":"functionSelectors","nodeType":"MemberAccess","referencedDeclaration":29562,"src":"10106:58:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage","typeString":"bytes4[] storage ref"}},"id":30320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10165:4:106","memberName":"push","nodeType":"MemberAccess","src":"10106:63:106","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_bytes4_$dyn_storage_ptr_$_t_bytes4_$returns$__$bound_to$_t_array$_t_bytes4_$dyn_storage_ptr_$","typeString":"function (bytes4[] storage pointer,bytes4)"}},"id":30322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10106:74:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30323,"nodeType":"ExpressionStatement","src":"10106:74:106"},{"expression":{"id":30331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":30324,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30296,"src":"10186:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30327,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10189:26:106","memberName":"selectorToFacetAndPosition","nodeType":"MemberAccess","referencedDeclaration":29570,"src":"10186:29:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$29559_storage_$","typeString":"mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"}},"id":30328,"indexExpression":{"id":30326,"name":"_selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30298,"src":"10216:9:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10186:40:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetAddressAndPosition_$29559_storage","typeString":"struct LibDiamond.FacetAddressAndPosition storage ref"}},"id":30329,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10227:12:106","memberName":"facetAddress","nodeType":"MemberAccess","referencedDeclaration":29556,"src":"10186:53:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30330,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30302,"src":"10242:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10186:69:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":30332,"nodeType":"ExpressionStatement","src":"10186:69:106"}]},"id":30334,"implemented":true,"kind":"function","modifiers":[],"name":"addFunction","nameLocation":"9874:11:106","nodeType":"FunctionDefinition","parameters":{"id":30303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30296,"mutability":"mutable","name":"ds","nameLocation":"9914:2:106","nodeType":"VariableDeclaration","scope":30334,"src":"9891:25:106","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"},"typeName":{"id":30295,"nodeType":"UserDefinedTypeName","pathNode":{"id":30294,"name":"DiamondStorage","nameLocations":["9891:14:106"],"nodeType":"IdentifierPath","referencedDeclaration":29591,"src":"9891:14:106"},"referencedDeclaration":29591,"src":"9891:14:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"}},"visibility":"internal"},{"constant":false,"id":30298,"mutability":"mutable","name":"_selector","nameLocation":"9929:9:106","nodeType":"VariableDeclaration","scope":30334,"src":"9922:16:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":30297,"name":"bytes4","nodeType":"ElementaryTypeName","src":"9922:6:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"},{"constant":false,"id":30300,"mutability":"mutable","name":"_selectorPosition","nameLocation":"9951:17:106","nodeType":"VariableDeclaration","scope":30334,"src":"9944:24:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":30299,"name":"uint96","nodeType":"ElementaryTypeName","src":"9944:6:106","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"},{"constant":false,"id":30302,"mutability":"mutable","name":"_facetAddress","nameLocation":"9982:13:106","nodeType":"VariableDeclaration","scope":30334,"src":"9974:21:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30301,"name":"address","nodeType":"ElementaryTypeName","src":"9974:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9885:114:106"},"returnParameters":{"id":30304,"nodeType":"ParameterList","parameters":[],"src":"10009:0:106"},"scope":30596,"src":"9865:395:106","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":30500,"nodeType":"Block","src":"10381:1935:106","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":30350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30345,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30339,"src":"10395:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":30348,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10420:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":30347,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10412:7:106","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30346,"name":"address","nodeType":"ElementaryTypeName","src":"10412:7:106","typeDescriptions":{}}},"id":30349,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10412:10:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10395:27:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6374696f6e207468617420646f65736e2774206578697374","id":30351,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10424:57:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71","typeString":"literal_string \"LibDiamondCut: Can't remove function that doesn't exist\""},"value":"LibDiamondCut: Can't remove function that doesn't exist"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71","typeString":"literal_string \"LibDiamondCut: Can't remove function that doesn't exist\""}],"id":30344,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10387:7:106","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10387:95:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30353,"nodeType":"ExpressionStatement","src":"10387:95:106"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":30360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30355,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30339,"src":"10569:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":30358,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10594:4:106","typeDescriptions":{"typeIdentifier":"t_contract$_LibDiamond_$30596","typeString":"library LibDiamond"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LibDiamond_$30596","typeString":"library LibDiamond"}],"id":30357,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10586:7:106","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30356,"name":"address","nodeType":"ElementaryTypeName","src":"10586:7:106","typeDescriptions":{}}},"id":30359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10586:13:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10569:30:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d757461626c652066756e6374696f6e","id":30361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10601:48:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21","typeString":"literal_string \"LibDiamondCut: Can't remove immutable function\""},"value":"LibDiamondCut: Can't remove immutable function"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21","typeString":"literal_string \"LibDiamondCut: Can't remove immutable function\""}],"id":30354,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10561:7:106","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30362,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10561:89:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30363,"nodeType":"ExpressionStatement","src":"10561:89:106"},{"assignments":[30365],"declarations":[{"constant":false,"id":30365,"mutability":"mutable","name":"selectorPosition","nameLocation":"10734:16:106","nodeType":"VariableDeclaration","scope":30500,"src":"10726:24:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30364,"name":"uint256","nodeType":"ElementaryTypeName","src":"10726:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30371,"initialValue":{"expression":{"baseExpression":{"expression":{"id":30366,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30337,"src":"10753:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30367,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10756:26:106","memberName":"selectorToFacetAndPosition","nodeType":"MemberAccess","referencedDeclaration":29570,"src":"10753:29:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$29559_storage_$","typeString":"mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"}},"id":30369,"indexExpression":{"id":30368,"name":"_selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30341,"src":"10783:9:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10753:40:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetAddressAndPosition_$29559_storage","typeString":"struct LibDiamond.FacetAddressAndPosition storage ref"}},"id":30370,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10794:24:106","memberName":"functionSelectorPosition","nodeType":"MemberAccess","referencedDeclaration":29558,"src":"10753:65:106","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"10726:92:106"},{"assignments":[30373],"declarations":[{"constant":false,"id":30373,"mutability":"mutable","name":"lastSelectorPosition","nameLocation":"10832:20:106","nodeType":"VariableDeclaration","scope":30500,"src":"10824:28:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30372,"name":"uint256","nodeType":"ElementaryTypeName","src":"10824:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30382,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"baseExpression":{"expression":{"id":30374,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30337,"src":"10855:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30375,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10858:22:106","memberName":"facetFunctionSelectors","nodeType":"MemberAccess","referencedDeclaration":29575,"src":"10855:25:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$29565_storage_$","typeString":"mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"}},"id":30377,"indexExpression":{"id":30376,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30339,"src":"10881:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10855:40:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetFunctionSelectors_$29565_storage","typeString":"struct LibDiamond.FacetFunctionSelectors storage ref"}},"id":30378,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10896:17:106","memberName":"functionSelectors","nodeType":"MemberAccess","referencedDeclaration":29562,"src":"10855:58:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage","typeString":"bytes4[] storage ref"}},"id":30379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10914:6:106","memberName":"length","nodeType":"MemberAccess","src":"10855:65:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":30380,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10923:1:106","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10855:69:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10824:100:106"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30383,"name":"selectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30365,"src":"10998:16:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":30384,"name":"lastSelectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30373,"src":"11018:20:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10998:40:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30420,"nodeType":"IfStatement","src":"10994:365:106","trueBody":{"id":30419,"nodeType":"Block","src":"11040:319:106","statements":[{"assignments":[30387],"declarations":[{"constant":false,"id":30387,"mutability":"mutable","name":"lastSelector","nameLocation":"11055:12:106","nodeType":"VariableDeclaration","scope":30419,"src":"11048:19:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":30386,"name":"bytes4","nodeType":"ElementaryTypeName","src":"11048:6:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":30395,"initialValue":{"baseExpression":{"expression":{"baseExpression":{"expression":{"id":30388,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30337,"src":"11070:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30389,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11073:22:106","memberName":"facetFunctionSelectors","nodeType":"MemberAccess","referencedDeclaration":29575,"src":"11070:25:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$29565_storage_$","typeString":"mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"}},"id":30391,"indexExpression":{"id":30390,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30339,"src":"11096:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11070:40:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetFunctionSelectors_$29565_storage","typeString":"struct LibDiamond.FacetFunctionSelectors storage ref"}},"id":30392,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11111:17:106","memberName":"functionSelectors","nodeType":"MemberAccess","referencedDeclaration":29562,"src":"11070:58:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage","typeString":"bytes4[] storage ref"}},"id":30394,"indexExpression":{"id":30393,"name":"lastSelectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30373,"src":"11129:20:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11070:80:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"11048:102:106"},{"expression":{"id":30405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"baseExpression":{"expression":{"id":30396,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30337,"src":"11158:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30399,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11161:22:106","memberName":"facetFunctionSelectors","nodeType":"MemberAccess","referencedDeclaration":29575,"src":"11158:25:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$29565_storage_$","typeString":"mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"}},"id":30400,"indexExpression":{"id":30398,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30339,"src":"11184:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11158:40:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetFunctionSelectors_$29565_storage","typeString":"struct LibDiamond.FacetFunctionSelectors storage ref"}},"id":30401,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11199:17:106","memberName":"functionSelectors","nodeType":"MemberAccess","referencedDeclaration":29562,"src":"11158:58:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage","typeString":"bytes4[] storage ref"}},"id":30403,"indexExpression":{"id":30402,"name":"selectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30365,"src":"11217:16:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11158:76:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30404,"name":"lastSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30387,"src":"11237:12:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"11158:91:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"id":30406,"nodeType":"ExpressionStatement","src":"11158:91:106"},{"expression":{"id":30417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":30407,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30337,"src":"11257:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30410,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11260:26:106","memberName":"selectorToFacetAndPosition","nodeType":"MemberAccess","referencedDeclaration":29570,"src":"11257:29:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$29559_storage_$","typeString":"mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"}},"id":30411,"indexExpression":{"id":30409,"name":"lastSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30387,"src":"11287:12:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11257:43:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetAddressAndPosition_$29559_storage","typeString":"struct LibDiamond.FacetAddressAndPosition storage ref"}},"id":30412,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11301:24:106","memberName":"functionSelectorPosition","nodeType":"MemberAccess","referencedDeclaration":29558,"src":"11257:68:106","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":30415,"name":"selectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30365,"src":"11335:16:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30414,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11328:6:106","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":30413,"name":"uint96","nodeType":"ElementaryTypeName","src":"11328:6:106","typeDescriptions":{}}},"id":30416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11328:24:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"11257:95:106","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"id":30418,"nodeType":"ExpressionStatement","src":"11257:95:106"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"baseExpression":{"expression":{"id":30421,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30337,"src":"11396:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30424,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11399:22:106","memberName":"facetFunctionSelectors","nodeType":"MemberAccess","referencedDeclaration":29575,"src":"11396:25:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$29565_storage_$","typeString":"mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"}},"id":30425,"indexExpression":{"id":30423,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30339,"src":"11422:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11396:40:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetFunctionSelectors_$29565_storage","typeString":"struct LibDiamond.FacetFunctionSelectors storage ref"}},"id":30426,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11437:17:106","memberName":"functionSelectors","nodeType":"MemberAccess","referencedDeclaration":29562,"src":"11396:58:106","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes4_$dyn_storage","typeString":"bytes4[] storage ref"}},"id":30427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11455:3:106","memberName":"pop","nodeType":"MemberAccess","src":"11396:62:106","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_bytes4_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_bytes4_$dyn_storage_ptr_$","typeString":"function (bytes4[] storage pointer)"}},"id":30428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11396:64:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30429,"nodeType":"ExpressionStatement","src":"11396:64:106"},{"expression":{"id":30434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"11466:47:106","subExpression":{"baseExpression":{"expression":{"id":30430,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30337,"src":"11473:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30431,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11476:26:106","memberName":"selectorToFacetAndPosition","nodeType":"MemberAccess","referencedDeclaration":29570,"src":"11473:29:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$29559_storage_$","typeString":"mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"}},"id":30433,"indexExpression":{"id":30432,"name":"_selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30341,"src":"11503:9:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11473:40:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetAddressAndPosition_$29559_storage","typeString":"struct LibDiamond.FacetAddressAndPosition storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30435,"nodeType":"ExpressionStatement","src":"11466:47:106"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30436,"name":"lastSelectorPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30373,"src":"11600:20:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":30437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11624:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11600:25:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30499,"nodeType":"IfStatement","src":"11596:716:106","trueBody":{"id":30498,"nodeType":"Block","src":"11627:685:106","statements":[{"assignments":[30440],"declarations":[{"constant":false,"id":30440,"mutability":"mutable","name":"lastFacetAddressPosition","nameLocation":"11728:24:106","nodeType":"VariableDeclaration","scope":30498,"src":"11720:32:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30439,"name":"uint256","nodeType":"ElementaryTypeName","src":"11720:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30446,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":30441,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30337,"src":"11755:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30442,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11758:14:106","memberName":"facetAddresses","nodeType":"MemberAccess","referencedDeclaration":29578,"src":"11755:17:106","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":30443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11773:6:106","memberName":"length","nodeType":"MemberAccess","src":"11755:24:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":30444,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11782:1:106","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11755:28:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11720:63:106"},{"assignments":[30448],"declarations":[{"constant":false,"id":30448,"mutability":"mutable","name":"facetAddressPosition","nameLocation":"11799:20:106","nodeType":"VariableDeclaration","scope":30498,"src":"11791:28:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30447,"name":"uint256","nodeType":"ElementaryTypeName","src":"11791:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30454,"initialValue":{"expression":{"baseExpression":{"expression":{"id":30449,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30337,"src":"11822:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30450,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11825:22:106","memberName":"facetFunctionSelectors","nodeType":"MemberAccess","referencedDeclaration":29575,"src":"11822:25:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$29565_storage_$","typeString":"mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"}},"id":30452,"indexExpression":{"id":30451,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30339,"src":"11848:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11822:40:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetFunctionSelectors_$29565_storage","typeString":"struct LibDiamond.FacetFunctionSelectors storage ref"}},"id":30453,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11863:20:106","memberName":"facetAddressPosition","nodeType":"MemberAccess","referencedDeclaration":29564,"src":"11822:61:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11791:92:106"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30455,"name":"facetAddressPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30448,"src":"11895:20:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":30456,"name":"lastFacetAddressPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30440,"src":"11919:24:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11895:48:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30483,"nodeType":"IfStatement","src":"11891:308:106","trueBody":{"id":30482,"nodeType":"Block","src":"11945:254:106","statements":[{"assignments":[30459],"declarations":[{"constant":false,"id":30459,"mutability":"mutable","name":"lastFacetAddress","nameLocation":"11963:16:106","nodeType":"VariableDeclaration","scope":30482,"src":"11955:24:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30458,"name":"address","nodeType":"ElementaryTypeName","src":"11955:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":30464,"initialValue":{"baseExpression":{"expression":{"id":30460,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30337,"src":"11982:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30461,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11985:14:106","memberName":"facetAddresses","nodeType":"MemberAccess","referencedDeclaration":29578,"src":"11982:17:106","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":30463,"indexExpression":{"id":30462,"name":"lastFacetAddressPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30440,"src":"12000:24:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11982:43:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"11955:70:106"},{"expression":{"id":30471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":30465,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30337,"src":"12035:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30468,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12038:14:106","memberName":"facetAddresses","nodeType":"MemberAccess","referencedDeclaration":29578,"src":"12035:17:106","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":30469,"indexExpression":{"id":30467,"name":"facetAddressPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30448,"src":"12053:20:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12035:39:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30470,"name":"lastFacetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30459,"src":"12077:16:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12035:58:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":30472,"nodeType":"ExpressionStatement","src":"12035:58:106"},{"expression":{"id":30480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":30473,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30337,"src":"12103:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30476,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12106:22:106","memberName":"facetFunctionSelectors","nodeType":"MemberAccess","referencedDeclaration":29575,"src":"12103:25:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$29565_storage_$","typeString":"mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"}},"id":30477,"indexExpression":{"id":30475,"name":"lastFacetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30459,"src":"12129:16:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12103:43:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetFunctionSelectors_$29565_storage","typeString":"struct LibDiamond.FacetFunctionSelectors storage ref"}},"id":30478,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"12147:20:106","memberName":"facetAddressPosition","nodeType":"MemberAccess","referencedDeclaration":29564,"src":"12103:64:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30479,"name":"facetAddressPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30448,"src":"12170:20:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12103:87:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30481,"nodeType":"ExpressionStatement","src":"12103:87:106"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":30484,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30337,"src":"12206:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30487,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12209:14:106","memberName":"facetAddresses","nodeType":"MemberAccess","referencedDeclaration":29578,"src":"12206:17:106","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":30488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12224:3:106","memberName":"pop","nodeType":"MemberAccess","src":"12206:21:106","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer)"}},"id":30489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12206:23:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30490,"nodeType":"ExpressionStatement","src":"12206:23:106"},{"expression":{"id":30496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"12237:68:106","subExpression":{"expression":{"baseExpression":{"expression":{"id":30491,"name":"ds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30337,"src":"12244:2:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage storage pointer"}},"id":30492,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12247:22:106","memberName":"facetFunctionSelectors","nodeType":"MemberAccess","referencedDeclaration":29575,"src":"12244:25:106","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$29565_storage_$","typeString":"mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"}},"id":30494,"indexExpression":{"id":30493,"name":"_facetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30339,"src":"12270:13:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12244:40:106","typeDescriptions":{"typeIdentifier":"t_struct$_FacetFunctionSelectors_$29565_storage","typeString":"struct LibDiamond.FacetFunctionSelectors storage ref"}},"id":30495,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"12285:20:106","memberName":"facetAddressPosition","nodeType":"MemberAccess","referencedDeclaration":29564,"src":"12244:61:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30497,"nodeType":"ExpressionStatement","src":"12237:68:106"}]}}]},"id":30501,"implemented":true,"kind":"function","modifiers":[],"name":"removeFunction","nameLocation":"10273:14:106","nodeType":"FunctionDefinition","parameters":{"id":30342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30337,"mutability":"mutable","name":"ds","nameLocation":"10316:2:106","nodeType":"VariableDeclaration","scope":30501,"src":"10293:25:106","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"},"typeName":{"id":30336,"nodeType":"UserDefinedTypeName","pathNode":{"id":30335,"name":"DiamondStorage","nameLocations":["10293:14:106"],"nodeType":"IdentifierPath","referencedDeclaration":29591,"src":"10293:14:106"},"referencedDeclaration":29591,"src":"10293:14:106","typeDescriptions":{"typeIdentifier":"t_struct$_DiamondStorage_$29591_storage_ptr","typeString":"struct LibDiamond.DiamondStorage"}},"visibility":"internal"},{"constant":false,"id":30339,"mutability":"mutable","name":"_facetAddress","nameLocation":"10332:13:106","nodeType":"VariableDeclaration","scope":30501,"src":"10324:21:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30338,"name":"address","nodeType":"ElementaryTypeName","src":"10324:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30341,"mutability":"mutable","name":"_selector","nameLocation":"10358:9:106","nodeType":"VariableDeclaration","scope":30501,"src":"10351:16:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":30340,"name":"bytes4","nodeType":"ElementaryTypeName","src":"10351:6:106","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"10287:84:106"},"returnParameters":{"id":30343,"nodeType":"ParameterList","parameters":[],"src":"10381:0:106"},"scope":30596,"src":"10264:2052:106","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":30577,"nodeType":"Block","src":"12398:677:106","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":30513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30508,"name":"_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30503,"src":"12408:5:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":30511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12425:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":30510,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12417:7:106","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30509,"name":"address","nodeType":"ElementaryTypeName","src":"12417:7:106","typeDescriptions":{}}},"id":30512,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12417:10:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12408:19:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":30575,"nodeType":"Block","src":"12544:527:106","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":30524,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30505,"src":"12560:9:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":30525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12570:6:106","memberName":"length","nodeType":"MemberAccess","src":"12560:16:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":30526,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12580:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12560:21:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d70747920627574205f696e6974206973206e6f742061646472657373283029","id":30528,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12583:63:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042","typeString":"literal_string \"LibDiamondCut: _calldata is empty but _init is not address(0)\""},"value":"LibDiamondCut: _calldata is empty but _init is not address(0)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042","typeString":"literal_string \"LibDiamondCut: _calldata is empty but _init is not address(0)\""}],"id":30523,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12552:7:106","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12552:95:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30530,"nodeType":"ExpressionStatement","src":"12552:95:106"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":30536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30531,"name":"_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30503,"src":"12659:5:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":30534,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12676:4:106","typeDescriptions":{"typeIdentifier":"t_contract$_LibDiamond_$30596","typeString":"library LibDiamond"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LibDiamond_$30596","typeString":"library LibDiamond"}],"id":30533,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12668:7:106","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30532,"name":"address","nodeType":"ElementaryTypeName","src":"12668:7:106","typeDescriptions":{}}},"id":30535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12668:13:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12659:22:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30543,"nodeType":"IfStatement","src":"12655:120:106","trueBody":{"id":30542,"nodeType":"Block","src":"12683:92:106","statements":[{"expression":{"arguments":[{"id":30538,"name":"_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30503,"src":"12716:5:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f6465","id":30539,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12723:42:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_460f8f0920c649146ef02741816b1cf9ce4f02ea288ceb73adf027cefe9069a0","typeString":"literal_string \"LibDiamondCut: _init address has no code\""},"value":"LibDiamondCut: _init address has no code"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_460f8f0920c649146ef02741816b1cf9ce4f02ea288ceb73adf027cefe9069a0","typeString":"literal_string \"LibDiamondCut: _init address has no code\""}],"id":30537,"name":"enforceHasContractCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30595,"src":"12693:22:106","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,string memory) view"}},"id":30540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12693:73:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30541,"nodeType":"ExpressionStatement","src":"12693:73:106"}]}},{"assignments":[30545,30547],"declarations":[{"constant":false,"id":30545,"mutability":"mutable","name":"success","nameLocation":"12788:7:106","nodeType":"VariableDeclaration","scope":30575,"src":"12783:12:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30544,"name":"bool","nodeType":"ElementaryTypeName","src":"12783:4:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":30547,"mutability":"mutable","name":"error","nameLocation":"12810:5:106","nodeType":"VariableDeclaration","scope":30575,"src":"12797:18:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":30546,"name":"bytes","nodeType":"ElementaryTypeName","src":"12797:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":30552,"initialValue":{"arguments":[{"id":30550,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30505,"src":"12838:9:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":30548,"name":"_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30503,"src":"12819:5:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":30549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12825:12:106","memberName":"delegatecall","nodeType":"MemberAccess","src":"12819:18:106","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":30551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12819:29:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"12782:66:106"},{"condition":{"id":30554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"12860:8:106","subExpression":{"id":30553,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30545,"src":"12861:7:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30574,"nodeType":"IfStatement","src":"12856:209:106","trueBody":{"id":30573,"nodeType":"Block","src":"12870:195:106","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":30555,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30547,"src":"12884:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":30556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12890:6:106","memberName":"length","nodeType":"MemberAccess","src":"12884:12:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":30557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12900:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12884:17:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":30571,"nodeType":"Block","src":"12986:71:106","statements":[{"expression":{"arguments":[{"hexValue":"4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e207265766572746564","id":30568,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13005:40:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d","typeString":"literal_string \"LibDiamondCut: _init function reverted\""},"value":"LibDiamondCut: _init function reverted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d","typeString":"literal_string \"LibDiamondCut: _init function reverted\""}],"id":30567,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"12998:6:106","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":30569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12998:48:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30570,"nodeType":"ExpressionStatement","src":"12998:48:106"}]},"id":30572,"nodeType":"IfStatement","src":"12880:177:106","trueBody":{"id":30566,"nodeType":"Block","src":"12903:77:106","statements":[{"expression":{"arguments":[{"arguments":[{"id":30562,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30547,"src":"12962:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":30561,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12955:6:106","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":30560,"name":"string","nodeType":"ElementaryTypeName","src":"12955:6:106","typeDescriptions":{}}},"id":30563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12955:13:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30559,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"12948:6:106","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":30564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12948:21:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30565,"nodeType":"ExpressionStatement","src":"12948:21:106"}]}}]}}]},"id":30576,"nodeType":"IfStatement","src":"12404:667:106","trueBody":{"id":30522,"nodeType":"Block","src":"12429:109:106","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":30515,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30505,"src":"12445:9:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":30516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12455:6:106","memberName":"length","nodeType":"MemberAccess","src":"12445:16:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":30517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12465:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12445:21:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c69624469616d6f6e644375743a205f696e69742069732061646472657373283029206275745f63616c6c64617461206973206e6f7420656d707479","id":30519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12468:62:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8","typeString":"literal_string \"LibDiamondCut: _init is address(0) but_calldata is not empty\""},"value":"LibDiamondCut: _init is address(0) but_calldata is not empty"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8","typeString":"literal_string \"LibDiamondCut: _init is address(0) but_calldata is not empty\""}],"id":30514,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12437:7:106","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12437:94:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30521,"nodeType":"ExpressionStatement","src":"12437:94:106"}]}}]},"id":30578,"implemented":true,"kind":"function","modifiers":[],"name":"initializeDiamondCut","nameLocation":"12329:20:106","nodeType":"FunctionDefinition","parameters":{"id":30506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30503,"mutability":"mutable","name":"_init","nameLocation":"12358:5:106","nodeType":"VariableDeclaration","scope":30578,"src":"12350:13:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30502,"name":"address","nodeType":"ElementaryTypeName","src":"12350:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30505,"mutability":"mutable","name":"_calldata","nameLocation":"12378:9:106","nodeType":"VariableDeclaration","scope":30578,"src":"12365:22:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":30504,"name":"bytes","nodeType":"ElementaryTypeName","src":"12365:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12349:39:106"},"returnParameters":{"id":30507,"nodeType":"ParameterList","parameters":[],"src":"12398:0:106"},"scope":30596,"src":"12320:755:106","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":30594,"nodeType":"Block","src":"13173:61:106","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":30586,"name":"_contract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30580,"src":"13187:9:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":30587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13197:4:106","memberName":"code","nodeType":"MemberAccess","src":"13187:14:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":30588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13202:6:106","memberName":"length","nodeType":"MemberAccess","src":"13187:21:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":30589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13212:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13187:26:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":30591,"name":"_errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30582,"src":"13215:13:106","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":30585,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"13179:7:106","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13179:50:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30593,"nodeType":"ExpressionStatement","src":"13179:50:106"}]},"id":30595,"implemented":true,"kind":"function","modifiers":[],"name":"enforceHasContractCode","nameLocation":"13088:22:106","nodeType":"FunctionDefinition","parameters":{"id":30583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30580,"mutability":"mutable","name":"_contract","nameLocation":"13119:9:106","nodeType":"VariableDeclaration","scope":30595,"src":"13111:17:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30579,"name":"address","nodeType":"ElementaryTypeName","src":"13111:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30582,"mutability":"mutable","name":"_errorMessage","nameLocation":"13144:13:106","nodeType":"VariableDeclaration","scope":30595,"src":"13130:27:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":30581,"name":"string","nodeType":"ElementaryTypeName","src":"13130:6:106","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"13110:48:106"},"returnParameters":{"id":30584,"nodeType":"ParameterList","parameters":[],"src":"13173:0:106"},"scope":30596,"src":"13079:155:106","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":30597,"src":"569:12667:106","usedErrors":[]}],"src":"32:13205:106"},"id":106},"contracts/core/connext/libraries/MathUtils.sol":{"ast":{"absolutePath":"contracts/core/connext/libraries/MathUtils.sol","exportedSymbols":{"MathUtils":[30645]},"id":30646,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":30598,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:107"},{"abstract":false,"baseContracts":[],"canonicalName":"MathUtils","contractDependencies":[],"contractKind":"library","documentation":{"id":30599,"nodeType":"StructuredDocumentation","src":"64:168:107","text":" @title MathUtils library\n @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\n differences between two uint256."},"fullyImplemented":true,"id":30645,"linearizedBaseContracts":[30645],"name":"MathUtils","nameLocation":"241:9:107","nodeType":"ContractDefinition","nodes":[{"body":{"id":30619,"nodeType":"Block","src":"657:62:107","statements":[{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":30610,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30602,"src":"682:1:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30611,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30604,"src":"685:1:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30609,"name":"difference","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30644,"src":"671:10:107","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":30612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"671:16:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"id":30615,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":30613,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"690:1:107","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":30614,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"694:1:107","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"690:5:107","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}},"src":"671:24:107","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":30617,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"670:26:107","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":30608,"id":30618,"nodeType":"Return","src":"663:33:107"}]},"documentation":{"id":30600,"nodeType":"StructuredDocumentation","src":"255:331:107","text":" @notice Compares a and b and returns true if the difference between a and b\n         is less than 1 or equal to each other.\n @param a uint256 to compare with\n @param b uint256 to compare with\n @return True if the difference between a and b is less than 1 or equal,\n         otherwise return false"},"id":30620,"implemented":true,"kind":"function","modifiers":[],"name":"within1","nameLocation":"598:7:107","nodeType":"FunctionDefinition","parameters":{"id":30605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30602,"mutability":"mutable","name":"a","nameLocation":"614:1:107","nodeType":"VariableDeclaration","scope":30620,"src":"606:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30601,"name":"uint256","nodeType":"ElementaryTypeName","src":"606:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30604,"mutability":"mutable","name":"b","nameLocation":"625:1:107","nodeType":"VariableDeclaration","scope":30620,"src":"617:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30603,"name":"uint256","nodeType":"ElementaryTypeName","src":"617:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"605:22:107"},"returnParameters":{"id":30608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30607,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30620,"src":"651:4:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30606,"name":"bool","nodeType":"ElementaryTypeName","src":"651:4:107","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"650:6:107"},"scope":30645,"src":"589:130:107","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":30643,"nodeType":"Block","src":"985:66:107","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30630,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30623,"src":"995:1:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":30631,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30625,"src":"999:1:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"995:5:107","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30638,"nodeType":"IfStatement","src":"991:38:107","trueBody":{"id":30637,"nodeType":"Block","src":"1002:27:107","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30633,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30623,"src":"1017:1:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":30634,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30625,"src":"1021:1:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1017:5:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":30629,"id":30636,"nodeType":"Return","src":"1010:12:107"}]}},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30639,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30625,"src":"1041:1:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":30640,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30623,"src":"1045:1:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1041:5:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":30629,"id":30642,"nodeType":"Return","src":"1034:12:107"}]},"documentation":{"id":30621,"nodeType":"StructuredDocumentation","src":"723:185:107","text":" @notice Calculates absolute difference between a and b\n @param a uint256 to compare with\n @param b uint256 to compare with\n @return Difference between a and b"},"id":30644,"implemented":true,"kind":"function","modifiers":[],"name":"difference","nameLocation":"920:10:107","nodeType":"FunctionDefinition","parameters":{"id":30626,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30623,"mutability":"mutable","name":"a","nameLocation":"939:1:107","nodeType":"VariableDeclaration","scope":30644,"src":"931:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30622,"name":"uint256","nodeType":"ElementaryTypeName","src":"931:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30625,"mutability":"mutable","name":"b","nameLocation":"950:1:107","nodeType":"VariableDeclaration","scope":30644,"src":"942:9:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30624,"name":"uint256","nodeType":"ElementaryTypeName","src":"942:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"930:22:107"},"returnParameters":{"id":30629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30628,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30644,"src":"976:7:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30627,"name":"uint256","nodeType":"ElementaryTypeName","src":"976:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"975:9:107"},"scope":30645,"src":"911:140:107","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":30646,"src":"233:820:107","usedErrors":[]}],"src":"39:1015:107"},"id":107},"contracts/core/connext/libraries/SwapUtils.sol":{"ast":{"absolutePath":"contracts/core/connext/libraries/SwapUtils.sol","exportedSymbols":{"AmplificationUtils":[27626],"AssetLogic":[28696],"Constants":[29304],"IERC20":[10812],"LPToken":[23179],"MathUtils":[30645],"SafeERC20":[11154],"SwapUtils":[34244]},"id":34245,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":30647,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:108"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":30650,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34245,"sourceUnit":11155,"src":"64:90:108","symbolAliases":[{"foreign":{"id":30648,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11154,"src":"72:9:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":30649,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10812,"src":"83:6:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/helpers/LPToken.sol","file":"../helpers/LPToken.sol","id":30652,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34245,"sourceUnit":23180,"src":"156:47:108","symbolAliases":[{"foreign":{"id":30651,"name":"LPToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23179,"src":"164:7:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/AmplificationUtils.sol","file":"./AmplificationUtils.sol","id":30654,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34245,"sourceUnit":27627,"src":"205:60:108","symbolAliases":[{"foreign":{"id":30653,"name":"AmplificationUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27626,"src":"213:18:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/MathUtils.sol","file":"./MathUtils.sol","id":30656,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34245,"sourceUnit":30646,"src":"266:42:108","symbolAliases":[{"foreign":{"id":30655,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30645,"src":"274:9:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/AssetLogic.sol","file":"./AssetLogic.sol","id":30658,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34245,"sourceUnit":28697,"src":"309:44:108","symbolAliases":[{"foreign":{"id":30657,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"317:10:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/Constants.sol","file":"./Constants.sol","id":30660,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34245,"sourceUnit":29305,"src":"354:42:108","symbolAliases":[{"foreign":{"id":30659,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"362:9:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SwapUtils","contractDependencies":[],"contractKind":"library","documentation":{"id":30661,"nodeType":"StructuredDocumentation","src":"398:435:108","text":" @title SwapUtils library\n @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\n @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\n for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\n Admin functions should be protected within contracts using this library."},"fullyImplemented":true,"id":34244,"linearizedBaseContracts":[34244],"name":"SwapUtils","nameLocation":"842:9:108","nodeType":"ContractDefinition","nodes":[{"global":false,"id":30665,"libraryName":{"id":30662,"name":"SafeERC20","nameLocations":["862:9:108"],"nodeType":"IdentifierPath","referencedDeclaration":11154,"src":"862:9:108"},"nodeType":"UsingForDirective","src":"856:27:108","typeName":{"id":30664,"nodeType":"UserDefinedTypeName","pathNode":{"id":30663,"name":"IERC20","nameLocations":["876:6:108"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"876:6:108"},"referencedDeclaration":10812,"src":"876:6:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}},{"global":false,"id":30668,"libraryName":{"id":30666,"name":"MathUtils","nameLocations":["892:9:108"],"nodeType":"IdentifierPath","referencedDeclaration":30645,"src":"892:9:108"},"nodeType":"UsingForDirective","src":"886:28:108","typeName":{"id":30667,"name":"uint256","nodeType":"ElementaryTypeName","src":"906:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"anonymous":false,"eventSelector":"28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df320","id":30682,"name":"TokenSwap","nameLocation":"944:9:108","nodeType":"EventDefinition","parameters":{"id":30681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30670,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"975:3:108","nodeType":"VariableDeclaration","scope":30682,"src":"959:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30669,"name":"bytes32","nodeType":"ElementaryTypeName","src":"959:7:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":30672,"indexed":true,"mutability":"mutable","name":"buyer","nameLocation":"1000:5:108","nodeType":"VariableDeclaration","scope":30682,"src":"984:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30671,"name":"address","nodeType":"ElementaryTypeName","src":"984:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30674,"indexed":false,"mutability":"mutable","name":"tokensSold","nameLocation":"1019:10:108","nodeType":"VariableDeclaration","scope":30682,"src":"1011:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30673,"name":"uint256","nodeType":"ElementaryTypeName","src":"1011:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30676,"indexed":false,"mutability":"mutable","name":"tokensBought","nameLocation":"1043:12:108","nodeType":"VariableDeclaration","scope":30682,"src":"1035:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30675,"name":"uint256","nodeType":"ElementaryTypeName","src":"1035:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30678,"indexed":false,"mutability":"mutable","name":"soldId","nameLocation":"1069:6:108","nodeType":"VariableDeclaration","scope":30682,"src":"1061:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":30677,"name":"uint128","nodeType":"ElementaryTypeName","src":"1061:7:108","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":30680,"indexed":false,"mutability":"mutable","name":"boughtId","nameLocation":"1089:8:108","nodeType":"VariableDeclaration","scope":30682,"src":"1081:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":30679,"name":"uint128","nodeType":"ElementaryTypeName","src":"1081:7:108","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"953:148:108"},"src":"938:164:108"},{"anonymous":false,"eventSelector":"bcb1ab680ee25ef87d34ec297263a10e0a823cd81326b0aa6bc55b86cb2a4188","id":30698,"name":"AddLiquidity","nameLocation":"1111:12:108","nodeType":"EventDefinition","parameters":{"id":30697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30684,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"1145:3:108","nodeType":"VariableDeclaration","scope":30698,"src":"1129:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30683,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1129:7:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":30686,"indexed":true,"mutability":"mutable","name":"provider","nameLocation":"1170:8:108","nodeType":"VariableDeclaration","scope":30698,"src":"1154:24:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30685,"name":"address","nodeType":"ElementaryTypeName","src":"1154:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30689,"indexed":false,"mutability":"mutable","name":"tokenAmounts","nameLocation":"1194:12:108","nodeType":"VariableDeclaration","scope":30698,"src":"1184:22:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":30687,"name":"uint256","nodeType":"ElementaryTypeName","src":"1184:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30688,"nodeType":"ArrayTypeName","src":"1184:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":30692,"indexed":false,"mutability":"mutable","name":"fees","nameLocation":"1222:4:108","nodeType":"VariableDeclaration","scope":30698,"src":"1212:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":30690,"name":"uint256","nodeType":"ElementaryTypeName","src":"1212:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30691,"nodeType":"ArrayTypeName","src":"1212:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":30694,"indexed":false,"mutability":"mutable","name":"invariant","nameLocation":"1240:9:108","nodeType":"VariableDeclaration","scope":30698,"src":"1232:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30693,"name":"uint256","nodeType":"ElementaryTypeName","src":"1232:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30696,"indexed":false,"mutability":"mutable","name":"lpTokenSupply","nameLocation":"1263:13:108","nodeType":"VariableDeclaration","scope":30698,"src":"1255:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30695,"name":"uint256","nodeType":"ElementaryTypeName","src":"1255:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1123:157:108"},"src":"1105:176:108"},{"anonymous":false,"eventSelector":"58f96d387ac27c23fb6350424cb6b032322b14ffd82029e96aeed2c525e790e8","id":30709,"name":"RemoveLiquidity","nameLocation":"1290:15:108","nodeType":"EventDefinition","parameters":{"id":30708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30700,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"1322:3:108","nodeType":"VariableDeclaration","scope":30709,"src":"1306:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30699,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1306:7:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":30702,"indexed":true,"mutability":"mutable","name":"provider","nameLocation":"1343:8:108","nodeType":"VariableDeclaration","scope":30709,"src":"1327:24:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30701,"name":"address","nodeType":"ElementaryTypeName","src":"1327:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30705,"indexed":false,"mutability":"mutable","name":"tokenAmounts","nameLocation":"1363:12:108","nodeType":"VariableDeclaration","scope":30709,"src":"1353:22:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":30703,"name":"uint256","nodeType":"ElementaryTypeName","src":"1353:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30704,"nodeType":"ArrayTypeName","src":"1353:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":30707,"indexed":false,"mutability":"mutable","name":"lpTokenSupply","nameLocation":"1385:13:108","nodeType":"VariableDeclaration","scope":30709,"src":"1377:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30706,"name":"uint256","nodeType":"ElementaryTypeName","src":"1377:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1305:94:108"},"src":"1284:116:108"},{"anonymous":false,"eventSelector":"1a66f6ea1c14e22a62ab434f3414908bb5f49133d673c872c8957aa961e4c215","id":30723,"name":"RemoveLiquidityOne","nameLocation":"1409:18:108","nodeType":"EventDefinition","parameters":{"id":30722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30711,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"1449:3:108","nodeType":"VariableDeclaration","scope":30723,"src":"1433:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30710,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1433:7:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":30713,"indexed":true,"mutability":"mutable","name":"provider","nameLocation":"1474:8:108","nodeType":"VariableDeclaration","scope":30723,"src":"1458:24:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30712,"name":"address","nodeType":"ElementaryTypeName","src":"1458:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30715,"indexed":false,"mutability":"mutable","name":"lpTokenAmount","nameLocation":"1496:13:108","nodeType":"VariableDeclaration","scope":30723,"src":"1488:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30714,"name":"uint256","nodeType":"ElementaryTypeName","src":"1488:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30717,"indexed":false,"mutability":"mutable","name":"lpTokenSupply","nameLocation":"1523:13:108","nodeType":"VariableDeclaration","scope":30723,"src":"1515:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30716,"name":"uint256","nodeType":"ElementaryTypeName","src":"1515:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30719,"indexed":false,"mutability":"mutable","name":"boughtId","nameLocation":"1550:8:108","nodeType":"VariableDeclaration","scope":30723,"src":"1542:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30718,"name":"uint256","nodeType":"ElementaryTypeName","src":"1542:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30721,"indexed":false,"mutability":"mutable","name":"tokensBought","nameLocation":"1572:12:108","nodeType":"VariableDeclaration","scope":30723,"src":"1564:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30720,"name":"uint256","nodeType":"ElementaryTypeName","src":"1564:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1427:161:108"},"src":"1403:186:108"},{"anonymous":false,"eventSelector":"a404896827f41a3845de89f154bf1f4fe5cbdf79da7c7805263a3d0b7de9e672","id":30739,"name":"RemoveLiquidityImbalance","nameLocation":"1598:24:108","nodeType":"EventDefinition","parameters":{"id":30738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30725,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"1644:3:108","nodeType":"VariableDeclaration","scope":30739,"src":"1628:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30724,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1628:7:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":30727,"indexed":true,"mutability":"mutable","name":"provider","nameLocation":"1669:8:108","nodeType":"VariableDeclaration","scope":30739,"src":"1653:24:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30726,"name":"address","nodeType":"ElementaryTypeName","src":"1653:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30730,"indexed":false,"mutability":"mutable","name":"tokenAmounts","nameLocation":"1693:12:108","nodeType":"VariableDeclaration","scope":30739,"src":"1683:22:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":30728,"name":"uint256","nodeType":"ElementaryTypeName","src":"1683:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30729,"nodeType":"ArrayTypeName","src":"1683:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":30733,"indexed":false,"mutability":"mutable","name":"fees","nameLocation":"1721:4:108","nodeType":"VariableDeclaration","scope":30739,"src":"1711:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":30731,"name":"uint256","nodeType":"ElementaryTypeName","src":"1711:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30732,"nodeType":"ArrayTypeName","src":"1711:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":30735,"indexed":false,"mutability":"mutable","name":"invariant","nameLocation":"1739:9:108","nodeType":"VariableDeclaration","scope":30739,"src":"1731:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30734,"name":"uint256","nodeType":"ElementaryTypeName","src":"1731:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30737,"indexed":false,"mutability":"mutable","name":"lpTokenSupply","nameLocation":"1762:13:108","nodeType":"VariableDeclaration","scope":30739,"src":"1754:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30736,"name":"uint256","nodeType":"ElementaryTypeName","src":"1754:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1622:157:108"},"src":"1592:188:108"},{"anonymous":false,"eventSelector":"7b4e02f2e320870ba4f764edf60a5289a465018a3fe159f0d72ba33139b0a616","id":30745,"name":"NewAdminFee","nameLocation":"1789:11:108","nodeType":"EventDefinition","parameters":{"id":30744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30741,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"1817:3:108","nodeType":"VariableDeclaration","scope":30745,"src":"1801:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30740,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1801:7:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":30743,"indexed":false,"mutability":"mutable","name":"newAdminFee","nameLocation":"1830:11:108","nodeType":"VariableDeclaration","scope":30745,"src":"1822:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30742,"name":"uint256","nodeType":"ElementaryTypeName","src":"1822:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1800:42:108"},"src":"1783:60:108"},{"anonymous":false,"eventSelector":"29aee3d14d18e1b8ace81481838ab2996fee9446a44336847d1d5c7fdf2471b1","id":30751,"name":"NewSwapFee","nameLocation":"1852:10:108","nodeType":"EventDefinition","parameters":{"id":30750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30747,"indexed":true,"mutability":"mutable","name":"key","nameLocation":"1879:3:108","nodeType":"VariableDeclaration","scope":30751,"src":"1863:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30746,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1863:7:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":30749,"indexed":false,"mutability":"mutable","name":"newSwapFee","nameLocation":"1892:10:108","nodeType":"VariableDeclaration","scope":30751,"src":"1884:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30748,"name":"uint256","nodeType":"ElementaryTypeName","src":"1884:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1862:41:108"},"src":"1846:58:108"},{"canonicalName":"SwapUtils.Swap","id":30786,"members":[{"constant":false,"id":30753,"mutability":"mutable","name":"key","nameLocation":"2082:3:108","nodeType":"VariableDeclaration","scope":30786,"src":"2074:11:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30752,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2074:7:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":30755,"mutability":"mutable","name":"initialA","nameLocation":"2099:8:108","nodeType":"VariableDeclaration","scope":30786,"src":"2091:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30754,"name":"uint256","nodeType":"ElementaryTypeName","src":"2091:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30757,"mutability":"mutable","name":"futureA","nameLocation":"2121:7:108","nodeType":"VariableDeclaration","scope":30786,"src":"2113:15:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30756,"name":"uint256","nodeType":"ElementaryTypeName","src":"2113:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30759,"mutability":"mutable","name":"initialATime","nameLocation":"2142:12:108","nodeType":"VariableDeclaration","scope":30786,"src":"2134:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30758,"name":"uint256","nodeType":"ElementaryTypeName","src":"2134:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30761,"mutability":"mutable","name":"futureATime","nameLocation":"2168:11:108","nodeType":"VariableDeclaration","scope":30786,"src":"2160:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30760,"name":"uint256","nodeType":"ElementaryTypeName","src":"2160:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30763,"mutability":"mutable","name":"swapFee","nameLocation":"2216:7:108","nodeType":"VariableDeclaration","scope":30786,"src":"2208:15:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30762,"name":"uint256","nodeType":"ElementaryTypeName","src":"2208:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30765,"mutability":"mutable","name":"adminFee","nameLocation":"2237:8:108","nodeType":"VariableDeclaration","scope":30786,"src":"2229:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30764,"name":"uint256","nodeType":"ElementaryTypeName","src":"2229:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30768,"mutability":"mutable","name":"lpToken","nameLocation":"2259:7:108","nodeType":"VariableDeclaration","scope":30786,"src":"2251:15:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"},"typeName":{"id":30767,"nodeType":"UserDefinedTypeName","pathNode":{"id":30766,"name":"LPToken","nameLocations":["2251:7:108"],"nodeType":"IdentifierPath","referencedDeclaration":23179,"src":"2251:7:108"},"referencedDeclaration":23179,"src":"2251:7:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"visibility":"internal"},{"constant":false,"id":30772,"mutability":"mutable","name":"pooledTokens","nameLocation":"2336:12:108","nodeType":"VariableDeclaration","scope":30786,"src":"2327:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":30770,"nodeType":"UserDefinedTypeName","pathNode":{"id":30769,"name":"IERC20","nameLocations":["2327:6:108"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"2327:6:108"},"referencedDeclaration":10812,"src":"2327:6:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":30771,"nodeType":"ArrayTypeName","src":"2327:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":30775,"mutability":"mutable","name":"tokenPrecisionMultipliers","nameLocation":"2612:25:108","nodeType":"VariableDeclaration","scope":30786,"src":"2602:35:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":30773,"name":"uint256","nodeType":"ElementaryTypeName","src":"2602:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30774,"nodeType":"ArrayTypeName","src":"2602:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":30778,"mutability":"mutable","name":"balances","nameLocation":"2773:8:108","nodeType":"VariableDeclaration","scope":30786,"src":"2763:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":30776,"name":"uint256","nodeType":"ElementaryTypeName","src":"2763:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30777,"nodeType":"ArrayTypeName","src":"2763:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":30781,"mutability":"mutable","name":"adminFees","nameLocation":"2866:9:108","nodeType":"VariableDeclaration","scope":30786,"src":"2856:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":30779,"name":"uint256","nodeType":"ElementaryTypeName","src":"2856:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30780,"nodeType":"ArrayTypeName","src":"2856:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":30783,"mutability":"mutable","name":"disabled","nameLocation":"2982:8:108","nodeType":"VariableDeclaration","scope":30786,"src":"2977:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30782,"name":"bool","nodeType":"ElementaryTypeName","src":"2977:4:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":30785,"mutability":"mutable","name":"removeTime","nameLocation":"3096:10:108","nodeType":"VariableDeclaration","scope":30786,"src":"3088:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30784,"name":"uint256","nodeType":"ElementaryTypeName","src":"3088:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Swap","nameLocation":"1915:4:108","nodeType":"StructDefinition","scope":34244,"src":"1908:1203:108","visibility":"public"},{"canonicalName":"SwapUtils.CalculateWithdrawOneTokenDYInfo","id":30797,"members":[{"constant":false,"id":30788,"mutability":"mutable","name":"d0","nameLocation":"3299:2:108","nodeType":"VariableDeclaration","scope":30797,"src":"3291:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30787,"name":"uint256","nodeType":"ElementaryTypeName","src":"3291:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30790,"mutability":"mutable","name":"d1","nameLocation":"3315:2:108","nodeType":"VariableDeclaration","scope":30797,"src":"3307:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30789,"name":"uint256","nodeType":"ElementaryTypeName","src":"3307:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30792,"mutability":"mutable","name":"newY","nameLocation":"3331:4:108","nodeType":"VariableDeclaration","scope":30797,"src":"3323:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30791,"name":"uint256","nodeType":"ElementaryTypeName","src":"3323:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30794,"mutability":"mutable","name":"feePerToken","nameLocation":"3349:11:108","nodeType":"VariableDeclaration","scope":30797,"src":"3341:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30793,"name":"uint256","nodeType":"ElementaryTypeName","src":"3341:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30796,"mutability":"mutable","name":"preciseA","nameLocation":"3374:8:108","nodeType":"VariableDeclaration","scope":30797,"src":"3366:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30795,"name":"uint256","nodeType":"ElementaryTypeName","src":"3366:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"CalculateWithdrawOneTokenDYInfo","nameLocation":"3253:31:108","nodeType":"StructDefinition","scope":34244,"src":"3246:141:108","visibility":"public"},{"canonicalName":"SwapUtils.ManageLiquidityInfo","id":30817,"members":[{"constant":false,"id":30799,"mutability":"mutable","name":"d0","nameLocation":"3558:2:108","nodeType":"VariableDeclaration","scope":30817,"src":"3550:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30798,"name":"uint256","nodeType":"ElementaryTypeName","src":"3550:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30801,"mutability":"mutable","name":"d1","nameLocation":"3574:2:108","nodeType":"VariableDeclaration","scope":30817,"src":"3566:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30800,"name":"uint256","nodeType":"ElementaryTypeName","src":"3566:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30803,"mutability":"mutable","name":"d2","nameLocation":"3590:2:108","nodeType":"VariableDeclaration","scope":30817,"src":"3582:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30802,"name":"uint256","nodeType":"ElementaryTypeName","src":"3582:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30805,"mutability":"mutable","name":"preciseA","nameLocation":"3606:8:108","nodeType":"VariableDeclaration","scope":30817,"src":"3598:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30804,"name":"uint256","nodeType":"ElementaryTypeName","src":"3598:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30808,"mutability":"mutable","name":"lpToken","nameLocation":"3628:7:108","nodeType":"VariableDeclaration","scope":30817,"src":"3620:15:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"},"typeName":{"id":30807,"nodeType":"UserDefinedTypeName","pathNode":{"id":30806,"name":"LPToken","nameLocations":["3620:7:108"],"nodeType":"IdentifierPath","referencedDeclaration":23179,"src":"3620:7:108"},"referencedDeclaration":23179,"src":"3620:7:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"visibility":"internal"},{"constant":false,"id":30810,"mutability":"mutable","name":"totalSupply","nameLocation":"3649:11:108","nodeType":"VariableDeclaration","scope":30817,"src":"3641:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30809,"name":"uint256","nodeType":"ElementaryTypeName","src":"3641:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30813,"mutability":"mutable","name":"balances","nameLocation":"3676:8:108","nodeType":"VariableDeclaration","scope":30817,"src":"3666:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":30811,"name":"uint256","nodeType":"ElementaryTypeName","src":"3666:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30812,"nodeType":"ArrayTypeName","src":"3666:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":30816,"mutability":"mutable","name":"multipliers","nameLocation":"3700:11:108","nodeType":"VariableDeclaration","scope":30817,"src":"3690:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":30814,"name":"uint256","nodeType":"ElementaryTypeName","src":"3690:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30815,"nodeType":"ArrayTypeName","src":"3690:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"ManageLiquidityInfo","nameLocation":"3524:19:108","nodeType":"StructDefinition","scope":34244,"src":"3517:199:108","visibility":"public"},{"body":{"id":30830,"nodeType":"Block","src":"3827:55:108","statements":[{"expression":{"arguments":[{"id":30827,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30820,"src":"3872:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}],"expression":{"id":30825,"name":"AmplificationUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27626,"src":"3840:18:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AmplificationUtils_$27626_$","typeString":"type(library AmplificationUtils)"}},"id":30826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3859:12:108","memberName":"_getAPrecise","nodeType":"MemberAccess","referencedDeclaration":27444,"src":"3840:31:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (uint256)"}},"id":30828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3840:37:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":30824,"id":30829,"nodeType":"Return","src":"3833:44:108"}]},"id":30831,"implemented":true,"kind":"function","modifiers":[],"name":"_getAPrecise","nameLocation":"3764:12:108","nodeType":"FunctionDefinition","parameters":{"id":30821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30820,"mutability":"mutable","name":"self","nameLocation":"3790:4:108","nodeType":"VariableDeclaration","scope":30831,"src":"3777:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":30819,"nodeType":"UserDefinedTypeName","pathNode":{"id":30818,"name":"Swap","nameLocations":["3777:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"3777:4:108"},"referencedDeclaration":30786,"src":"3777:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"}],"src":"3776:19:108"},"returnParameters":{"id":30824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30823,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30831,"src":"3818:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30822,"name":"uint256","nodeType":"ElementaryTypeName","src":"3818:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3817:9:108"},"scope":34244,"src":"3755:127:108","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":30858,"nodeType":"Block","src":"4380:194:108","statements":[{"assignments":[30845,null],"declarations":[{"constant":false,"id":30845,"mutability":"mutable","name":"availableTokenAmount","nameLocation":"4395:20:108","nodeType":"VariableDeclaration","scope":30858,"src":"4387:28:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30844,"name":"uint256","nodeType":"ElementaryTypeName","src":"4387:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":30855,"initialValue":{"arguments":[{"id":30847,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30835,"src":"4455:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},{"id":30848,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30837,"src":"4467:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30849,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30839,"src":"4486:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":30850,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30835,"src":"4504:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":30851,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4509:7:108","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":30768,"src":"4504:12:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":30852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4517:11:108","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":8543,"src":"4504:24:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":30853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4504:26:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30846,"name":"_calculateWithdrawOneToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30915,"src":"4421:26:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$_t_uint256_$_t_uint8_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint256,uint8,uint256) view returns (uint256,uint256)"}},"id":30854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4421:115:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4386:150:108"},{"expression":{"id":30856,"name":"availableTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30845,"src":"4549:20:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":30843,"id":30857,"nodeType":"Return","src":"4542:27:108"}]},"documentation":{"id":30832,"nodeType":"StructuredDocumentation","src":"3886:350:108","text":" @notice Calculate the dy, the amount of selected token that user receives and\n the fee of withdrawing in one token\n @param tokenAmount the amount to withdraw in the pool's precision\n @param tokenIndex which token will be withdrawn\n @param self Swap struct to read from\n @return the amount of token user will receive"},"id":30859,"implemented":true,"kind":"function","modifiers":[],"name":"calculateWithdrawOneToken","nameLocation":"4248:25:108","nodeType":"FunctionDefinition","parameters":{"id":30840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30835,"mutability":"mutable","name":"self","nameLocation":"4292:4:108","nodeType":"VariableDeclaration","scope":30859,"src":"4279:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":30834,"nodeType":"UserDefinedTypeName","pathNode":{"id":30833,"name":"Swap","nameLocations":["4279:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"4279:4:108"},"referencedDeclaration":30786,"src":"4279:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":30837,"mutability":"mutable","name":"tokenAmount","nameLocation":"4310:11:108","nodeType":"VariableDeclaration","scope":30859,"src":"4302:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30836,"name":"uint256","nodeType":"ElementaryTypeName","src":"4302:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30839,"mutability":"mutable","name":"tokenIndex","nameLocation":"4333:10:108","nodeType":"VariableDeclaration","scope":30859,"src":"4327:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":30838,"name":"uint8","nodeType":"ElementaryTypeName","src":"4327:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"4273:74:108"},"returnParameters":{"id":30843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30842,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30859,"src":"4371:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30841,"name":"uint256","nodeType":"ElementaryTypeName","src":"4371:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4370:9:108"},"scope":34244,"src":"4239:335:108","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":30914,"nodeType":"Block","src":"4753:334:108","statements":[{"assignments":[30876],"declarations":[{"constant":false,"id":30876,"mutability":"mutable","name":"dy","nameLocation":"4767:2:108","nodeType":"VariableDeclaration","scope":30914,"src":"4759:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30875,"name":"uint256","nodeType":"ElementaryTypeName","src":"4759:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30877,"nodeType":"VariableDeclarationStatement","src":"4759:10:108"},{"assignments":[30879],"declarations":[{"constant":false,"id":30879,"mutability":"mutable","name":"newY","nameLocation":"4783:4:108","nodeType":"VariableDeclaration","scope":30914,"src":"4775:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30878,"name":"uint256","nodeType":"ElementaryTypeName","src":"4775:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30880,"nodeType":"VariableDeclarationStatement","src":"4775:12:108"},{"assignments":[30882],"declarations":[{"constant":false,"id":30882,"mutability":"mutable","name":"currentY","nameLocation":"4801:8:108","nodeType":"VariableDeclaration","scope":30914,"src":"4793:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30881,"name":"uint256","nodeType":"ElementaryTypeName","src":"4793:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30883,"nodeType":"VariableDeclarationStatement","src":"4793:16:108"},{"expression":{"id":30894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":30884,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30876,"src":"4817:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30885,"name":"newY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30879,"src":"4821:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30886,"name":"currentY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30882,"src":"4827:8:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":30887,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"4816:20:108","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":30889,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30862,"src":"4867:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},{"id":30890,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30866,"src":"4873:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":30891,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30864,"src":"4885:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30892,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30868,"src":"4898:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30888,"name":"calculateWithdrawOneTokenDY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31145,"src":"4839:27:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$_t_uint8_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint8,uint256,uint256) view returns (uint256,uint256,uint256)"}},"id":30893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4839:71:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"src":"4816:94:108","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30895,"nodeType":"ExpressionStatement","src":"4816:94:108"},{"assignments":[30897],"declarations":[{"constant":false,"id":30897,"mutability":"mutable","name":"dySwapFee","nameLocation":"4974:9:108","nodeType":"VariableDeclaration","scope":30914,"src":"4966:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30896,"name":"uint256","nodeType":"ElementaryTypeName","src":"4966:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30909,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30898,"name":"currentY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30882,"src":"4987:8:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":30899,"name":"newY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30879,"src":"4998:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4987:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":30901,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4986:17:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"expression":{"id":30902,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30862,"src":"5006:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":30903,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5011:25:108","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":30775,"src":"5006:30:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":30905,"indexExpression":{"id":30904,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30866,"src":"5037:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5006:42:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4986:62:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":30907,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30876,"src":"5051:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4986:67:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4966:87:108"},{"expression":{"components":[{"id":30910,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30876,"src":"5068:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30911,"name":"dySwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30897,"src":"5072:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":30912,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5067:15:108","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":30874,"id":30913,"nodeType":"Return","src":"5060:22:108"}]},"id":30915,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateWithdrawOneToken","nameLocation":"4587:26:108","nodeType":"FunctionDefinition","parameters":{"id":30869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30862,"mutability":"mutable","name":"self","nameLocation":"4632:4:108","nodeType":"VariableDeclaration","scope":30915,"src":"4619:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":30861,"nodeType":"UserDefinedTypeName","pathNode":{"id":30860,"name":"Swap","nameLocations":["4619:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"4619:4:108"},"referencedDeclaration":30786,"src":"4619:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":30864,"mutability":"mutable","name":"tokenAmount","nameLocation":"4650:11:108","nodeType":"VariableDeclaration","scope":30915,"src":"4642:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30863,"name":"uint256","nodeType":"ElementaryTypeName","src":"4642:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30866,"mutability":"mutable","name":"tokenIndex","nameLocation":"4673:10:108","nodeType":"VariableDeclaration","scope":30915,"src":"4667:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":30865,"name":"uint8","nodeType":"ElementaryTypeName","src":"4667:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":30868,"mutability":"mutable","name":"totalSupply","nameLocation":"4697:11:108","nodeType":"VariableDeclaration","scope":30915,"src":"4689:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30867,"name":"uint256","nodeType":"ElementaryTypeName","src":"4689:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4613:99:108"},"returnParameters":{"id":30874,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30871,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30915,"src":"4735:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30870,"name":"uint256","nodeType":"ElementaryTypeName","src":"4735:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30873,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30915,"src":"4744:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30872,"name":"uint256","nodeType":"ElementaryTypeName","src":"4744:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4734:18:108"},"scope":34244,"src":"4578:509:108","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":31144,"nodeType":"Block","src":"5611:1451:108","statements":[{"assignments":[30938],"declarations":[{"constant":false,"id":30938,"mutability":"mutable","name":"xp","nameLocation":"5727:2:108","nodeType":"VariableDeclaration","scope":31144,"src":"5710:19:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":30936,"name":"uint256","nodeType":"ElementaryTypeName","src":"5710:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30937,"nodeType":"ArrayTypeName","src":"5710:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":30942,"initialValue":{"arguments":[{"id":30940,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30919,"src":"5736:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}],"id":30939,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[31527,31545],"referencedDeclaration":31545,"src":"5732:3:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (uint256[] memory)"}},"id":30941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5732:9:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"5710:31:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30944,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30921,"src":"5756:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":30945,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30938,"src":"5769:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5772:6:108","memberName":"length","nodeType":"MemberAccess","src":"5769:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5756:22:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e646578206f7574206f662072616e6765","id":30948,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5780:20:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d","typeString":"literal_string \"index out of range\""},"value":"index out of range"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d","typeString":"literal_string \"index out of range\""}],"id":30943,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5748:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5748:53:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30950,"nodeType":"ExpressionStatement","src":"5748:53:108"},{"assignments":[30953],"declarations":[{"constant":false,"id":30953,"mutability":"mutable","name":"v","nameLocation":"5847:1:108","nodeType":"VariableDeclaration","scope":31144,"src":"5808:40:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo"},"typeName":{"id":30952,"nodeType":"UserDefinedTypeName","pathNode":{"id":30951,"name":"CalculateWithdrawOneTokenDYInfo","nameLocations":["5808:31:108"],"nodeType":"IdentifierPath","referencedDeclaration":30797,"src":"5808:31:108"},"referencedDeclaration":30797,"src":"5808:31:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_storage_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo"}},"visibility":"internal"}],"id":30961,"initialValue":{"arguments":[{"hexValue":"30","id":30955,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5883:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":30956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5886:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":30957,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5889:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":30958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5892:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":30959,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5895:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":30954,"name":"CalculateWithdrawOneTokenDYInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30797,"src":"5851:31:108","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_storage_ptr_$","typeString":"type(struct SwapUtils.CalculateWithdrawOneTokenDYInfo storage pointer)"}},"id":30960,"isConstant":false,"isLValue":false,"isPure":true,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5851:46:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"nodeType":"VariableDeclarationStatement","src":"5808:89:108"},{"expression":{"id":30968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":30962,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"5903:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":30964,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5905:8:108","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":30796,"src":"5903:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":30966,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30919,"src":"5929:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}],"id":30965,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30831,"src":"5916:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (uint256)"}},"id":30967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5916:18:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5903:31:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30969,"nodeType":"ExpressionStatement","src":"5903:31:108"},{"expression":{"id":30978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":30970,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"5940:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":30972,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5942:2:108","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":30788,"src":"5940:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":30974,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30938,"src":"5952:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":30975,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"5956:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":30976,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5958:8:108","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":30796,"src":"5956:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30973,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31463,"src":"5947:4:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":30977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5947:20:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5940:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30979,"nodeType":"ExpressionStatement","src":"5940:27:108"},{"expression":{"id":30994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":30980,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"5973:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":30982,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5975:2:108","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":30790,"src":"5973:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":30983,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"5980:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":30984,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5982:2:108","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":30788,"src":"5980:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30985,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30923,"src":"5989:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":30986,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"6003:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":30987,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6005:2:108","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":30788,"src":"6003:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5989:18:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":30989,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5988:20:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":30990,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30925,"src":"6011:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5988:34:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":30992,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5987:36:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5980:43:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5973:50:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30995,"nodeType":"ExpressionStatement","src":"5973:50:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30997,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30923,"src":"6038:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"baseExpression":{"id":30998,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30938,"src":"6053:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31000,"indexExpression":{"id":30999,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30921,"src":"6056:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6053:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6038:29:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6578636565647320617661696c61626c65","id":31002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6069:19:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_cfeed71d91768718346c2ea3c2ab2e22b6f1283f91f1be8620ac590423d0fe0f","typeString":"literal_string \"exceeds available\""},"value":"exceeds available"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cfeed71d91768718346c2ea3c2ab2e22b6f1283f91f1be8620ac590423d0fe0f","typeString":"literal_string \"exceeds available\""}],"id":30996,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6030:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":31003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6030:59:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31004,"nodeType":"ExpressionStatement","src":"6030:59:108"},{"expression":{"id":31016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31005,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"6096:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":31007,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6098:4:108","memberName":"newY","nodeType":"MemberAccess","referencedDeclaration":30792,"src":"6096:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":31009,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"6111:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":31010,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6113:8:108","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":30796,"src":"6111:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31011,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30921,"src":"6123:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":31012,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30938,"src":"6135:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":31013,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"6139:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":31014,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6141:2:108","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":30790,"src":"6139:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31008,"name":"getYD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31307,"src":"6105:5:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint8_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint8,uint256[] memory,uint256) pure returns (uint256)"}},"id":31015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6105:39:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6096:48:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31017,"nodeType":"ExpressionStatement","src":"6096:48:108"},{"assignments":[31022],"declarations":[{"constant":false,"id":31022,"mutability":"mutable","name":"xpReduced","nameLocation":"6168:9:108","nodeType":"VariableDeclaration","scope":31144,"src":"6151:26:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31020,"name":"uint256","nodeType":"ElementaryTypeName","src":"6151:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31021,"nodeType":"ArrayTypeName","src":"6151:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":31029,"initialValue":{"arguments":[{"expression":{"id":31026,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30938,"src":"6194:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6197:6:108","memberName":"length","nodeType":"MemberAccess","src":"6194:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31025,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"6180:13:108","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":31023,"name":"uint256","nodeType":"ElementaryTypeName","src":"6184:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31024,"nodeType":"ArrayTypeName","src":"6184:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":31028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6180:24:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"6151:53:108"},{"expression":{"id":31039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31030,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"6211:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":31032,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6213:11:108","memberName":"feePerToken","nodeType":"MemberAccess","referencedDeclaration":30794,"src":"6211:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":31034,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30919,"src":"6240:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":31035,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6245:7:108","memberName":"swapFee","nodeType":"MemberAccess","referencedDeclaration":30763,"src":"6240:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":31036,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30938,"src":"6254:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6257:6:108","memberName":"length","nodeType":"MemberAccess","src":"6254:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31033,"name":"_feePerToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32372,"src":"6227:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":31038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6227:37:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6211:53:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31040,"nodeType":"ExpressionStatement","src":"6211:53:108"},{"assignments":[31042],"declarations":[{"constant":false,"id":31042,"mutability":"mutable","name":"len","nameLocation":"6365:3:108","nodeType":"VariableDeclaration","scope":31144,"src":"6357:11:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31041,"name":"uint256","nodeType":"ElementaryTypeName","src":"6357:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31045,"initialValue":{"expression":{"id":31043,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30938,"src":"6371:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6374:6:108","memberName":"length","nodeType":"MemberAccess","src":"6371:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6357:23:108"},{"body":{"id":31106,"nodeType":"Block","src":"6413:447:108","statements":[{"assignments":[31053],"declarations":[{"constant":false,"id":31053,"mutability":"mutable","name":"xpi","nameLocation":"6429:3:108","nodeType":"VariableDeclaration","scope":31106,"src":"6421:11:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31052,"name":"uint256","nodeType":"ElementaryTypeName","src":"6421:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31057,"initialValue":{"baseExpression":{"id":31054,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30938,"src":"6435:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31056,"indexExpression":{"id":31055,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31047,"src":"6438:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6435:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6421:19:108"},{"expression":{"id":31100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":31058,"name":"xpReduced","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31022,"src":"6636:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31060,"indexExpression":{"id":31059,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31047,"src":"6646:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6636:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31061,"name":"xpi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31053,"src":"6659:3:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"condition":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31062,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31047,"src":"6677:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":31063,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30921,"src":"6682:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"6677:15:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":31065,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6676:17:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31078,"name":"xpi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31053,"src":"6730:3:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31079,"name":"xpi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31053,"src":"6737:3:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":31080,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"6743:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":31081,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6745:2:108","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":30790,"src":"6743:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6737:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31083,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6736:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":31084,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"6751:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":31085,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6753:2:108","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":30788,"src":"6751:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6736:19:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6730:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31088,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6729:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6676:80:108","trueExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31066,"name":"xpi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31053,"src":"6698:3:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":31067,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"6704:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":31068,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6706:2:108","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":30790,"src":"6704:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6698:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31070,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6697:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":31071,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"6712:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":31072,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6714:2:108","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":30788,"src":"6712:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6697:19:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":31074,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"6719:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":31075,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6721:4:108","memberName":"newY","nodeType":"MemberAccess","referencedDeclaration":30792,"src":"6719:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6697:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31077,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6696:30:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31090,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6675:82:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":31091,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"6760:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":31092,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6762:11:108","memberName":"feePerToken","nodeType":"MemberAccess","referencedDeclaration":30794,"src":"6760:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6675:98:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31094,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6674:100:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":31095,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"6787:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":31096,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6797:15:108","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"6787:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6674:138:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31098,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6673:140:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6659:154:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6636:177:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31101,"nodeType":"ExpressionStatement","src":"6636:177:108"},{"id":31105,"nodeType":"UncheckedBlock","src":"6822:32:108","statements":[{"expression":{"id":31103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"6842:3:108","subExpression":{"id":31102,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31047,"src":"6844:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31104,"nodeType":"ExpressionStatement","src":"6842:3:108"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31049,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31047,"src":"6402:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":31050,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31042,"src":"6406:3:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6402:7:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31107,"initializationExpression":{"assignments":[31047],"declarations":[{"constant":false,"id":31047,"mutability":"mutable","name":"i","nameLocation":"6399:1:108","nodeType":"VariableDeclaration","scope":31107,"src":"6391:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31046,"name":"uint256","nodeType":"ElementaryTypeName","src":"6391:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31048,"nodeType":"VariableDeclarationStatement","src":"6391:9:108"},"nodeType":"ForStatement","src":"6386:474:108"},{"assignments":[31109],"declarations":[{"constant":false,"id":31109,"mutability":"mutable","name":"dy","nameLocation":"6874:2:108","nodeType":"VariableDeclaration","scope":31144,"src":"6866:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31108,"name":"uint256","nodeType":"ElementaryTypeName","src":"6866:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31122,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":31110,"name":"xpReduced","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31022,"src":"6879:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31112,"indexExpression":{"id":31111,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30921,"src":"6889:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6879:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"expression":{"id":31114,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"6909:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":31115,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6911:8:108","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":30796,"src":"6909:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31116,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30921,"src":"6921:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":31117,"name":"xpReduced","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31022,"src":"6933:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":31118,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"6944:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":31119,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6946:2:108","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":30790,"src":"6944:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31113,"name":"getYD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31307,"src":"6903:5:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint8_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint8,uint256[] memory,uint256) pure returns (uint256)"}},"id":31120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6903:46:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6879:70:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6866:83:108"},{"expression":{"id":31134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31123,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31109,"src":"6955:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31124,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31109,"src":"6961:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":31125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6966:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6961:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31127,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6960:8:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"baseExpression":{"expression":{"id":31128,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30919,"src":"6972:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":31129,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6977:25:108","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":30775,"src":"6972:30:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":31131,"indexExpression":{"id":31130,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30921,"src":"7003:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6972:42:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31132,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6971:44:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6960:55:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6955:60:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31135,"nodeType":"ExpressionStatement","src":"6955:60:108"},{"expression":{"components":[{"id":31136,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31109,"src":"7030:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":31137,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30953,"src":"7034:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$30797_memory_ptr","typeString":"struct SwapUtils.CalculateWithdrawOneTokenDYInfo memory"}},"id":31138,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7036:4:108","memberName":"newY","nodeType":"MemberAccess","referencedDeclaration":30792,"src":"7034:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":31139,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30938,"src":"7042:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31141,"indexExpression":{"id":31140,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30921,"src":"7045:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7042:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31142,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7029:28:108","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"functionReturnParameters":30933,"id":31143,"nodeType":"Return","src":"7022:35:108"}]},"documentation":{"id":30916,"nodeType":"StructuredDocumentation","src":"5091:293:108","text":" @notice Calculate the dy of withdrawing in one token\n @param self Swap struct to read from\n @param tokenIndex which token will be withdrawn\n @param tokenAmount the amount to withdraw in the pools precision\n @return the d and the new y after withdrawing one token"},"id":31145,"implemented":true,"kind":"function","modifiers":[],"name":"calculateWithdrawOneTokenDY","nameLocation":"5396:27:108","nodeType":"FunctionDefinition","parameters":{"id":30926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30919,"mutability":"mutable","name":"self","nameLocation":"5442:4:108","nodeType":"VariableDeclaration","scope":31145,"src":"5429:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":30918,"nodeType":"UserDefinedTypeName","pathNode":{"id":30917,"name":"Swap","nameLocations":["5429:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"5429:4:108"},"referencedDeclaration":30786,"src":"5429:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":30921,"mutability":"mutable","name":"tokenIndex","nameLocation":"5458:10:108","nodeType":"VariableDeclaration","scope":31145,"src":"5452:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":30920,"name":"uint8","nodeType":"ElementaryTypeName","src":"5452:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":30923,"mutability":"mutable","name":"tokenAmount","nameLocation":"5482:11:108","nodeType":"VariableDeclaration","scope":31145,"src":"5474:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30922,"name":"uint256","nodeType":"ElementaryTypeName","src":"5474:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30925,"mutability":"mutable","name":"totalSupply","nameLocation":"5507:11:108","nodeType":"VariableDeclaration","scope":31145,"src":"5499:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30924,"name":"uint256","nodeType":"ElementaryTypeName","src":"5499:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5423:99:108"},"returnParameters":{"id":30933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30928,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31145,"src":"5565:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30927,"name":"uint256","nodeType":"ElementaryTypeName","src":"5565:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30930,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31145,"src":"5580:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30929,"name":"uint256","nodeType":"ElementaryTypeName","src":"5580:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30932,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31145,"src":"5595:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30931,"name":"uint256","nodeType":"ElementaryTypeName","src":"5595:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5557:51:108"},"scope":34244,"src":"5387:1675:108","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":31306,"nodeType":"Block","src":"8034:1168:108","statements":[{"assignments":[31161],"declarations":[{"constant":false,"id":31161,"mutability":"mutable","name":"numTokens","nameLocation":"8048:9:108","nodeType":"VariableDeclaration","scope":31306,"src":"8040:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31160,"name":"uint256","nodeType":"ElementaryTypeName","src":"8040:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31164,"initialValue":{"expression":{"id":31162,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31153,"src":"8060:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8063:6:108","memberName":"length","nodeType":"MemberAccess","src":"8060:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8040:29:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31166,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31150,"src":"8083:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":31167,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31161,"src":"8096:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8083:22:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e206e6f7420666f756e64","id":31169,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8107:17:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_487af3faa279cd1df07c0d1897feb1b8a94d7a439a5fcca3a8f816912eee96c2","typeString":"literal_string \"Token not found\""},"value":"Token not found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_487af3faa279cd1df07c0d1897feb1b8a94d7a439a5fcca3a8f816912eee96c2","typeString":"literal_string \"Token not found\""}],"id":31165,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8075:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":31170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8075:50:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31171,"nodeType":"ExpressionStatement","src":"8075:50:108"},{"assignments":[31173],"declarations":[{"constant":false,"id":31173,"mutability":"mutable","name":"c","nameLocation":"8140:1:108","nodeType":"VariableDeclaration","scope":31306,"src":"8132:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31172,"name":"uint256","nodeType":"ElementaryTypeName","src":"8132:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31175,"initialValue":{"id":31174,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31155,"src":"8144:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8132:13:108"},{"assignments":[31177],"declarations":[{"constant":false,"id":31177,"mutability":"mutable","name":"s","nameLocation":"8159:1:108","nodeType":"VariableDeclaration","scope":31306,"src":"8151:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31176,"name":"uint256","nodeType":"ElementaryTypeName","src":"8151:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31178,"nodeType":"VariableDeclarationStatement","src":"8151:9:108"},{"assignments":[31180],"declarations":[{"constant":false,"id":31180,"mutability":"mutable","name":"nA","nameLocation":"8174:2:108","nodeType":"VariableDeclaration","scope":31306,"src":"8166:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31179,"name":"uint256","nodeType":"ElementaryTypeName","src":"8166:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31184,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31181,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31148,"src":"8179:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31182,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31161,"src":"8183:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8179:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8166:26:108"},{"body":{"id":31220,"nodeType":"Block","src":"8232:386:108","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31191,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31186,"src":"8244:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":31192,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31150,"src":"8249:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8244:15:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31215,"nodeType":"IfStatement","src":"8240:332:108","trueBody":{"id":31214,"nodeType":"Block","src":"8261:311:108","statements":[{"expression":{"id":31198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31194,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31177,"src":"8271:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":31195,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31153,"src":"8276:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31197,"indexExpression":{"id":31196,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31186,"src":"8279:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8276:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8271:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31199,"nodeType":"ExpressionStatement","src":"8271:10:108"},{"expression":{"id":31212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31200,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31173,"src":"8291:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31201,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31173,"src":"8296:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31202,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31155,"src":"8300:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8296:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31204,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8295:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":31205,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31153,"src":"8306:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31207,"indexExpression":{"id":31206,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31186,"src":"8309:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8306:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31208,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31161,"src":"8314:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8306:17:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31210,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8305:19:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8295:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8291:33:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31213,"nodeType":"ExpressionStatement","src":"8291:33:108"}]}},{"id":31219,"nodeType":"UncheckedBlock","src":"8580:32:108","statements":[{"expression":{"id":31217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"8600:3:108","subExpression":{"id":31216,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31186,"src":"8602:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31218,"nodeType":"ExpressionStatement","src":"8600:3:108"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31188,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31186,"src":"8215:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":31189,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31161,"src":"8219:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8215:13:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31221,"initializationExpression":{"assignments":[31186],"declarations":[{"constant":false,"id":31186,"mutability":"mutable","name":"i","nameLocation":"8212:1:108","nodeType":"VariableDeclaration","scope":31221,"src":"8204:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31185,"name":"uint256","nodeType":"ElementaryTypeName","src":"8204:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31187,"nodeType":"VariableDeclarationStatement","src":"8204:9:108"},"nodeType":"ForStatement","src":"8199:419:108"},{"expression":{"id":31235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31222,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31173,"src":"8623:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31223,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31173,"src":"8628:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31224,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31155,"src":"8632:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8628:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":31226,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"8636:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":31227,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8646:11:108","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"8636:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8628:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31229,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8627:31:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31230,"name":"nA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31180,"src":"8662:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31231,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31161,"src":"8667:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8662:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31233,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8661:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8627:50:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8623:54:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31236,"nodeType":"ExpressionStatement","src":"8623:54:108"},{"assignments":[31238],"declarations":[{"constant":false,"id":31238,"mutability":"mutable","name":"b","nameLocation":"8692:1:108","nodeType":"VariableDeclaration","scope":31306,"src":"8684:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31237,"name":"uint256","nodeType":"ElementaryTypeName","src":"8684:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31249,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31239,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31177,"src":"8696:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31240,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31155,"src":"8702:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":31241,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"8706:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":31242,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8716:11:108","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"8706:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8702:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31244,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8701:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":31245,"name":"nA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31180,"src":"8731:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8701:32:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31247,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8700:34:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8696:38:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8684:50:108"},{"assignments":[31251],"declarations":[{"constant":false,"id":31251,"mutability":"mutable","name":"yPrev","nameLocation":"8748:5:108","nodeType":"VariableDeclaration","scope":31306,"src":"8740:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31250,"name":"uint256","nodeType":"ElementaryTypeName","src":"8740:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31252,"nodeType":"VariableDeclarationStatement","src":"8740:13:108"},{"assignments":[31254],"declarations":[{"constant":false,"id":31254,"mutability":"mutable","name":"y","nameLocation":"8928:1:108","nodeType":"VariableDeclaration","scope":31306,"src":"8920:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31253,"name":"uint256","nodeType":"ElementaryTypeName","src":"8920:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31256,"initialValue":{"id":31255,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31155,"src":"8932:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8920:13:108"},{"body":{"id":31300,"nodeType":"Block","src":"8987:165:108","statements":[{"expression":{"id":31266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31264,"name":"yPrev","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31251,"src":"8995:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":31265,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31254,"src":"9003:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8995:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31267,"nodeType":"ExpressionStatement","src":"8995:9:108"},{"expression":{"id":31286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31268,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31254,"src":"9012:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31269,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31254,"src":"9018:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31270,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31254,"src":"9022:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9018:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31272,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9017:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":31273,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31173,"src":"9027:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9017:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31275,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9016:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31276,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31254,"src":"9034:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":31277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9038:1:108","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"9034:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31279,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9033:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":31280,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31238,"src":"9043:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9033:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":31282,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31155,"src":"9047:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9033:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31284,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9032:17:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9016:33:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9012:37:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31287,"nodeType":"ExpressionStatement","src":"9012:37:108"},{"condition":{"arguments":[{"id":31290,"name":"yPrev","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31251,"src":"9071:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":31288,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31254,"src":"9061:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9063:7:108","memberName":"within1","nodeType":"MemberAccess","referencedDeclaration":30620,"src":"9061:9:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":31291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9061:16:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31295,"nodeType":"IfStatement","src":"9057:49:108","trueBody":{"id":31294,"nodeType":"Block","src":"9079:27:108","statements":[{"expression":{"id":31292,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31254,"src":"9096:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":31159,"id":31293,"nodeType":"Return","src":"9089:8:108"}]}},{"id":31299,"nodeType":"UncheckedBlock","src":"9114:32:108","statements":[{"expression":{"id":31297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"9134:3:108","subExpression":{"id":31296,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31258,"src":"9136:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31298,"nodeType":"ExpressionStatement","src":"9134:3:108"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31260,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31258,"src":"8955:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":31261,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"8959:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":31262,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8969:14:108","memberName":"MAX_LOOP_LIMIT","nodeType":"MemberAccess","referencedDeclaration":29282,"src":"8959:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8955:28:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31301,"initializationExpression":{"assignments":[31258],"declarations":[{"constant":false,"id":31258,"mutability":"mutable","name":"i","nameLocation":"8952:1:108","nodeType":"VariableDeclaration","scope":31301,"src":"8944:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31257,"name":"uint256","nodeType":"ElementaryTypeName","src":"8944:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31259,"nodeType":"VariableDeclarationStatement","src":"8944:9:108"},"nodeType":"ForStatement","src":"8939:213:108"},{"expression":{"arguments":[{"hexValue":"417070726f78696d6174696f6e20646964206e6f7420636f6e7665726765","id":31303,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9164:32:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05","typeString":"literal_string \"Approximation did not converge\""},"value":"Approximation did not converge"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05","typeString":"literal_string \"Approximation did not converge\""}],"id":31302,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"9157:6:108","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":31304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9157:40:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31305,"nodeType":"ExpressionStatement","src":"9157:40:108"}]},"documentation":{"id":31146,"nodeType":"StructuredDocumentation","src":"7066:837:108","text":" @notice Calculate the price of a token in the pool with given\n precision-adjusted balances and a particular D.\n @dev This is accomplished via solving the invariant iteratively.\n See the StableSwap paper and Curve.fi implementation for further details.\n x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\n x_1**2 + b*x_1 = c\n x_1 = (x_1**2 + c) / (2*x_1 + b)\n @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\n @param tokenIndex Index of token we are calculating for.\n @param xp a precision-adjusted set of pool balances. Array should be\n the same cardinality as the pool.\n @param d the stableswap invariant\n @return the price of the token, in the same precision as in xp"},"id":31307,"implemented":true,"kind":"function","modifiers":[],"name":"getYD","nameLocation":"7915:5:108","nodeType":"FunctionDefinition","parameters":{"id":31156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31148,"mutability":"mutable","name":"a","nameLocation":"7934:1:108","nodeType":"VariableDeclaration","scope":31307,"src":"7926:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31147,"name":"uint256","nodeType":"ElementaryTypeName","src":"7926:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31150,"mutability":"mutable","name":"tokenIndex","nameLocation":"7947:10:108","nodeType":"VariableDeclaration","scope":31307,"src":"7941:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":31149,"name":"uint8","nodeType":"ElementaryTypeName","src":"7941:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":31153,"mutability":"mutable","name":"xp","nameLocation":"7980:2:108","nodeType":"VariableDeclaration","scope":31307,"src":"7963:19:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31151,"name":"uint256","nodeType":"ElementaryTypeName","src":"7963:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31152,"nodeType":"ArrayTypeName","src":"7963:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":31155,"mutability":"mutable","name":"d","nameLocation":"7996:1:108","nodeType":"VariableDeclaration","scope":31307,"src":"7988:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31154,"name":"uint256","nodeType":"ElementaryTypeName","src":"7988:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7920:81:108"},"returnParameters":{"id":31159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31158,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31307,"src":"8025:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31157,"name":"uint256","nodeType":"ElementaryTypeName","src":"8025:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8024:9:108"},"scope":34244,"src":"7906:1296:108","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":31462,"nodeType":"Block","src":"9676:1298:108","statements":[{"assignments":[31319],"declarations":[{"constant":false,"id":31319,"mutability":"mutable","name":"numTokens","nameLocation":"9690:9:108","nodeType":"VariableDeclaration","scope":31462,"src":"9682:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31318,"name":"uint256","nodeType":"ElementaryTypeName","src":"9682:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31322,"initialValue":{"expression":{"id":31320,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31311,"src":"9702:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9705:6:108","memberName":"length","nodeType":"MemberAccess","src":"9702:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9682:29:108"},{"assignments":[31324],"declarations":[{"constant":false,"id":31324,"mutability":"mutable","name":"s","nameLocation":"9725:1:108","nodeType":"VariableDeclaration","scope":31462,"src":"9717:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31323,"name":"uint256","nodeType":"ElementaryTypeName","src":"9717:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31325,"nodeType":"VariableDeclarationStatement","src":"9717:9:108"},{"body":{"id":31342,"nodeType":"Block","src":"9765:65:108","statements":[{"expression":{"id":31336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31332,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31324,"src":"9773:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":31333,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31311,"src":"9778:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31335,"indexExpression":{"id":31334,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31327,"src":"9781:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9778:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9773:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31337,"nodeType":"ExpressionStatement","src":"9773:10:108"},{"id":31341,"nodeType":"UncheckedBlock","src":"9792:32:108","statements":[{"expression":{"id":31339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"9812:3:108","subExpression":{"id":31338,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31327,"src":"9814:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31340,"nodeType":"ExpressionStatement","src":"9812:3:108"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31329,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31327,"src":"9748:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":31330,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31319,"src":"9752:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9748:13:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31343,"initializationExpression":{"assignments":[31327],"declarations":[{"constant":false,"id":31327,"mutability":"mutable","name":"i","nameLocation":"9745:1:108","nodeType":"VariableDeclaration","scope":31343,"src":"9737:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31326,"name":"uint256","nodeType":"ElementaryTypeName","src":"9737:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31328,"nodeType":"VariableDeclarationStatement","src":"9737:9:108"},"nodeType":"ForStatement","src":"9732:98:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31344,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31324,"src":"9839:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":31345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9844:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9839:6:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31350,"nodeType":"IfStatement","src":"9835:35:108","trueBody":{"id":31349,"nodeType":"Block","src":"9847:23:108","statements":[{"expression":{"hexValue":"30","id":31347,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9862:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":31317,"id":31348,"nodeType":"Return","src":"9855:8:108"}]}},{"assignments":[31352],"declarations":[{"constant":false,"id":31352,"mutability":"mutable","name":"prevD","nameLocation":"9884:5:108","nodeType":"VariableDeclaration","scope":31462,"src":"9876:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31351,"name":"uint256","nodeType":"ElementaryTypeName","src":"9876:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31353,"nodeType":"VariableDeclarationStatement","src":"9876:13:108"},{"assignments":[31355],"declarations":[{"constant":false,"id":31355,"mutability":"mutable","name":"d","nameLocation":"9903:1:108","nodeType":"VariableDeclaration","scope":31462,"src":"9895:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31354,"name":"uint256","nodeType":"ElementaryTypeName","src":"9895:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31357,"initialValue":{"id":31356,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31324,"src":"9907:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9895:13:108"},{"assignments":[31359],"declarations":[{"constant":false,"id":31359,"mutability":"mutable","name":"nA","nameLocation":"9922:2:108","nodeType":"VariableDeclaration","scope":31462,"src":"9914:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31358,"name":"uint256","nodeType":"ElementaryTypeName","src":"9914:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31363,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31360,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31313,"src":"9927:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31361,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31319,"src":"9931:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9927:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9914:26:108"},{"body":{"id":31456,"nodeType":"Block","src":"9995:696:108","statements":[{"assignments":[31372],"declarations":[{"constant":false,"id":31372,"mutability":"mutable","name":"dP","nameLocation":"10011:2:108","nodeType":"VariableDeclaration","scope":31456,"src":"10003:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31371,"name":"uint256","nodeType":"ElementaryTypeName","src":"10003:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31374,"initialValue":{"id":31373,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31355,"src":"10016:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10003:14:108"},{"body":{"id":31399,"nodeType":"Block","src":"10058:341:108","statements":[{"expression":{"id":31393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31381,"name":"dP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31372,"src":"10068:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31382,"name":"dP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31372,"src":"10074:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31383,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31355,"src":"10079:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10074:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31385,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10073:8:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":31386,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31311,"src":"10085:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31388,"indexExpression":{"id":31387,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31376,"src":"10088:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10085:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31389,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31319,"src":"10093:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10085:17:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31391,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10084:19:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10073:30:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10068:35:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31394,"nodeType":"ExpressionStatement","src":"10068:35:108"},{"id":31398,"nodeType":"UncheckedBlock","src":"10355:36:108","statements":[{"expression":{"id":31396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"10377:3:108","subExpression":{"id":31395,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31376,"src":"10379:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31397,"nodeType":"ExpressionStatement","src":"10377:3:108"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31378,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31376,"src":"10041:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":31379,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31319,"src":"10045:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10041:13:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31400,"initializationExpression":{"assignments":[31376],"declarations":[{"constant":false,"id":31376,"mutability":"mutable","name":"j","nameLocation":"10038:1:108","nodeType":"VariableDeclaration","scope":31400,"src":"10030:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31375,"name":"uint256","nodeType":"ElementaryTypeName","src":"10030:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31377,"nodeType":"VariableDeclarationStatement","src":"10030:9:108"},"nodeType":"ForStatement","src":"10025:374:108"},{"expression":{"id":31403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31401,"name":"prevD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31352,"src":"10406:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":31402,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31355,"src":"10414:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10406:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31404,"nodeType":"ExpressionStatement","src":"10406:9:108"},{"expression":{"id":31442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31405,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31355,"src":"10423:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31406,"name":"nA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31359,"src":"10438:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31407,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31324,"src":"10443:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10438:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31409,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10437:8:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":31410,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"10448:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":31411,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10458:11:108","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"10448:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10437:32:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31413,"name":"dP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31372,"src":"10472:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31414,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31319,"src":"10477:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10472:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10437:49:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31417,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10436:51:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31418,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31355,"src":"10490:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10436:55:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31420,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10435:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31421,"name":"nA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31359,"src":"10507:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":31422,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"10512:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":31423,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10522:11:108","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"10512:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10507:26:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31425,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10506:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31426,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31355,"src":"10537:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10506:32:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31428,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10505:34:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":31429,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"10542:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":31430,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10552:11:108","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"10542:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10505:58:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31432,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31319,"src":"10567:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":31433,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10579:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10567:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31435,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10566:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31436,"name":"dP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31372,"src":"10584:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10566:20:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10505:81:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31439,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10504:83:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31440,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10503:85:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10435:153:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10423:165:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31443,"nodeType":"ExpressionStatement","src":"10423:165:108"},{"condition":{"arguments":[{"id":31446,"name":"prevD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31352,"src":"10610:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":31444,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31355,"src":"10600:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10602:7:108","memberName":"within1","nodeType":"MemberAccess","referencedDeclaration":30620,"src":"10600:9:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":31447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10600:16:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31451,"nodeType":"IfStatement","src":"10596:49:108","trueBody":{"id":31450,"nodeType":"Block","src":"10618:27:108","statements":[{"expression":{"id":31448,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31355,"src":"10635:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":31317,"id":31449,"nodeType":"Return","src":"10628:8:108"}]}},{"id":31455,"nodeType":"UncheckedBlock","src":"10653:32:108","statements":[{"expression":{"id":31453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"10673:3:108","subExpression":{"id":31452,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"10675:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31454,"nodeType":"ExpressionStatement","src":"10673:3:108"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31367,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"9963:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":31368,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"9967:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":31369,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9977:14:108","memberName":"MAX_LOOP_LIMIT","nodeType":"MemberAccess","referencedDeclaration":29282,"src":"9967:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9963:28:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31457,"initializationExpression":{"assignments":[31365],"declarations":[{"constant":false,"id":31365,"mutability":"mutable","name":"i","nameLocation":"9960:1:108","nodeType":"VariableDeclaration","scope":31457,"src":"9952:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31364,"name":"uint256","nodeType":"ElementaryTypeName","src":"9952:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31366,"nodeType":"VariableDeclarationStatement","src":"9952:9:108"},"nodeType":"ForStatement","src":"9947:744:108"},{"expression":{"arguments":[{"hexValue":"4420646f6573206e6f7420636f6e7665726765","id":31459,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10947:21:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_eb80683d13e69e40aa7f57ce3558136d2c8c4c88f682021213f7030fc3d23afd","typeString":"literal_string \"D does not converge\""},"value":"D does not converge"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_eb80683d13e69e40aa7f57ce3558136d2c8c4c88f682021213f7030fc3d23afd","typeString":"literal_string \"D does not converge\""}],"id":31458,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"10940:6:108","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":31460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10940:29:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31461,"nodeType":"ExpressionStatement","src":"10940:29:108"}]},"documentation":{"id":31308,"nodeType":"StructuredDocumentation","src":"9206:389:108","text":" @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\n @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\n as the pool.\n @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\n See the StableSwap paper for details\n @return the invariant, at the precision of the pool"},"id":31463,"implemented":true,"kind":"function","modifiers":[],"name":"getD","nameLocation":"9607:4:108","nodeType":"FunctionDefinition","parameters":{"id":31314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31311,"mutability":"mutable","name":"xp","nameLocation":"9629:2:108","nodeType":"VariableDeclaration","scope":31463,"src":"9612:19:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31309,"name":"uint256","nodeType":"ElementaryTypeName","src":"9612:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31310,"nodeType":"ArrayTypeName","src":"9612:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":31313,"mutability":"mutable","name":"a","nameLocation":"9641:1:108","nodeType":"VariableDeclaration","scope":31463,"src":"9633:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31312,"name":"uint256","nodeType":"ElementaryTypeName","src":"9633:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9611:32:108"},"returnParameters":{"id":31317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31316,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31463,"src":"9667:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31315,"name":"uint256","nodeType":"ElementaryTypeName","src":"9667:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9666:9:108"},"scope":34244,"src":"9598:1376:108","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":31526,"nodeType":"Block","src":"11646:330:108","statements":[{"assignments":[31477],"declarations":[{"constant":false,"id":31477,"mutability":"mutable","name":"numTokens","nameLocation":"11660:9:108","nodeType":"VariableDeclaration","scope":31526,"src":"11652:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31476,"name":"uint256","nodeType":"ElementaryTypeName","src":"11652:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31480,"initialValue":{"expression":{"id":31478,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31467,"src":"11672:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11681:6:108","memberName":"length","nodeType":"MemberAccess","src":"11672:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11652:35:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31482,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31477,"src":"11701:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":31483,"name":"precisionMultipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31470,"src":"11714:20:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11735:6:108","memberName":"length","nodeType":"MemberAccess","src":"11714:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11701:40:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d69736d61746368206d756c7469706c69657273","id":31486,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11743:22:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_d9b2e328f4209b3735eca19488e3afd57ba32c456d5e1a010a233e595f7b0b47","typeString":"literal_string \"mismatch multipliers\""},"value":"mismatch multipliers"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d9b2e328f4209b3735eca19488e3afd57ba32c456d5e1a010a233e595f7b0b47","typeString":"literal_string \"mismatch multipliers\""}],"id":31481,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11693:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":31487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11693:73:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31488,"nodeType":"ExpressionStatement","src":"11693:73:108"},{"assignments":[31493],"declarations":[{"constant":false,"id":31493,"mutability":"mutable","name":"xp","nameLocation":"11789:2:108","nodeType":"VariableDeclaration","scope":31526,"src":"11772:19:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31491,"name":"uint256","nodeType":"ElementaryTypeName","src":"11772:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31492,"nodeType":"ArrayTypeName","src":"11772:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":31499,"initialValue":{"arguments":[{"id":31497,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31477,"src":"11808:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31496,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"11794:13:108","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":31494,"name":"uint256","nodeType":"ElementaryTypeName","src":"11798:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31495,"nodeType":"ArrayTypeName","src":"11798:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":31498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11794:24:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"11772:46:108"},{"body":{"id":31522,"nodeType":"Block","src":"11857:100:108","statements":[{"expression":{"id":31516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":31506,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31493,"src":"11865:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31508,"indexExpression":{"id":31507,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31501,"src":"11868:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11865:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":31509,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31467,"src":"11873:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31511,"indexExpression":{"id":31510,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31501,"src":"11882:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11873:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"baseExpression":{"id":31512,"name":"precisionMultipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31470,"src":"11887:20:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31514,"indexExpression":{"id":31513,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31501,"src":"11908:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11887:23:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11873:37:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11865:45:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31517,"nodeType":"ExpressionStatement","src":"11865:45:108"},{"id":31521,"nodeType":"UncheckedBlock","src":"11919:32:108","statements":[{"expression":{"id":31519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11939:3:108","subExpression":{"id":31518,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31501,"src":"11941:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31520,"nodeType":"ExpressionStatement","src":"11939:3:108"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31503,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31501,"src":"11840:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":31504,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31477,"src":"11844:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11840:13:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31523,"initializationExpression":{"assignments":[31501],"declarations":[{"constant":false,"id":31501,"mutability":"mutable","name":"i","nameLocation":"11837:1:108","nodeType":"VariableDeclaration","scope":31523,"src":"11829:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31500,"name":"uint256","nodeType":"ElementaryTypeName","src":"11829:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31502,"nodeType":"VariableDeclarationStatement","src":"11829:9:108"},"nodeType":"ForStatement","src":"11824:133:108"},{"expression":{"id":31524,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31493,"src":"11969:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":31475,"id":31525,"nodeType":"Return","src":"11962:9:108"}]},"documentation":{"id":31464,"nodeType":"StructuredDocumentation","src":"10978:531:108","text":" @notice Given a set of balances and precision multipliers, return the\n precision-adjusted balances.\n @param balances an array of token balances, in their native precisions.\n These should generally correspond with pooled tokens.\n @param precisionMultipliers an array of multipliers, corresponding to\n the amounts in the balances array. When multiplied together they\n should yield amounts at the pool's precision.\n @return an array of amounts \"scaled\" to the pool's precision"},"id":31527,"implemented":true,"kind":"function","modifiers":[],"name":"_xp","nameLocation":"11521:3:108","nodeType":"FunctionDefinition","parameters":{"id":31471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31467,"mutability":"mutable","name":"balances","nameLocation":"11542:8:108","nodeType":"VariableDeclaration","scope":31527,"src":"11525:25:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31465,"name":"uint256","nodeType":"ElementaryTypeName","src":"11525:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31466,"nodeType":"ArrayTypeName","src":"11525:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":31470,"mutability":"mutable","name":"precisionMultipliers","nameLocation":"11569:20:108","nodeType":"VariableDeclaration","scope":31527,"src":"11552:37:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31468,"name":"uint256","nodeType":"ElementaryTypeName","src":"11552:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31469,"nodeType":"ArrayTypeName","src":"11552:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11524:66:108"},"returnParameters":{"id":31475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31474,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31527,"src":"11626:16:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31472,"name":"uint256","nodeType":"ElementaryTypeName","src":"11626:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31473,"nodeType":"ArrayTypeName","src":"11626:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11625:18:108"},"scope":34244,"src":"11512:464:108","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":31544,"nodeType":"Block","src":"12297:68:108","statements":[{"expression":{"arguments":[{"expression":{"id":31538,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31531,"src":"12314:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":31539,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12319:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"12314:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},{"expression":{"id":31540,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31531,"src":"12329:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":31541,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12334:25:108","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":30775,"src":"12329:30:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"},{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}],"id":31537,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[31527,31545],"referencedDeclaration":31527,"src":"12310:3:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":31542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12310:50:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":31536,"id":31543,"nodeType":"Return","src":"12303:57:108"}]},"documentation":{"id":31528,"nodeType":"StructuredDocumentation","src":"11980:241:108","text":" @notice Return the precision-adjusted balances of all tokens in the pool\n @param self Swap struct to read from\n @return the pool balances \"scaled\" to the pool's precision, allowing\n them to be more easily compared."},"id":31545,"implemented":true,"kind":"function","modifiers":[],"name":"_xp","nameLocation":"12233:3:108","nodeType":"FunctionDefinition","parameters":{"id":31532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31531,"mutability":"mutable","name":"self","nameLocation":"12250:4:108","nodeType":"VariableDeclaration","scope":31545,"src":"12237:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":31530,"nodeType":"UserDefinedTypeName","pathNode":{"id":31529,"name":"Swap","nameLocations":["12237:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"12237:4:108"},"referencedDeclaration":30786,"src":"12237:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"}],"src":"12236:19:108"},"returnParameters":{"id":31536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31535,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31545,"src":"12279:16:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31533,"name":"uint256","nodeType":"ElementaryTypeName","src":"12279:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31534,"nodeType":"ArrayTypeName","src":"12279:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"12278:18:108"},"scope":34244,"src":"12224:141:108","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":31598,"nodeType":"Block","src":"12649:259:108","statements":[{"assignments":[31555],"declarations":[{"constant":false,"id":31555,"mutability":"mutable","name":"d","nameLocation":"12663:1:108","nodeType":"VariableDeclaration","scope":31598,"src":"12655:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31554,"name":"uint256","nodeType":"ElementaryTypeName","src":"12655:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31564,"initialValue":{"arguments":[{"arguments":[{"id":31558,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31549,"src":"12676:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}],"id":31557,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[31527,31545],"referencedDeclaration":31545,"src":"12672:3:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (uint256[] memory)"}},"id":31559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12672:9:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"id":31561,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31549,"src":"12696:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}],"id":31560,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30831,"src":"12683:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (uint256)"}},"id":31562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12683:18:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31556,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31463,"src":"12667:4:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":31563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12667:35:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12655:47:108"},{"assignments":[31567],"declarations":[{"constant":false,"id":31567,"mutability":"mutable","name":"lpToken","nameLocation":"12716:7:108","nodeType":"VariableDeclaration","scope":31598,"src":"12708:15:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"},"typeName":{"id":31566,"nodeType":"UserDefinedTypeName","pathNode":{"id":31565,"name":"LPToken","nameLocations":["12708:7:108"],"nodeType":"IdentifierPath","referencedDeclaration":23179,"src":"12708:7:108"},"referencedDeclaration":23179,"src":"12708:7:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"visibility":"internal"}],"id":31570,"initialValue":{"expression":{"id":31568,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31549,"src":"12726:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":31569,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12731:7:108","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":30768,"src":"12726:12:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"nodeType":"VariableDeclarationStatement","src":"12708:30:108"},{"assignments":[31572],"declarations":[{"constant":false,"id":31572,"mutability":"mutable","name":"supply","nameLocation":"12752:6:108","nodeType":"VariableDeclaration","scope":31598,"src":"12744:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31571,"name":"uint256","nodeType":"ElementaryTypeName","src":"12744:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31576,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":31573,"name":"lpToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31567,"src":"12761:7:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":31574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12769:11:108","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":8543,"src":"12761:19:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":31575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12761:21:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12744:38:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31577,"name":"supply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31572,"src":"12792:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":31578,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12802:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12792:11:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31595,"nodeType":"IfStatement","src":"12788:102:108","trueBody":{"id":31594,"nodeType":"Block","src":"12805:85:108","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31580,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31555,"src":"12821:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31587,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":31581,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12826:2:108","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[{"expression":{"id":31584,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"12838:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":31585,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12848:23:108","memberName":"POOL_PRECISION_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":29266,"src":"12838:33:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":31583,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12830:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":31582,"name":"uint256","nodeType":"ElementaryTypeName","src":"12830:7:108","typeDescriptions":{}}},"id":31586,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12830:42:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12826:46:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31588,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"12825:48:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12821:52:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31590,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12820:54:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":31591,"name":"supply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31572,"src":"12877:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12820:63:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":31553,"id":31593,"nodeType":"Return","src":"12813:70:108"}]}},{"expression":{"hexValue":"30","id":31596,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12902:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":31553,"id":31597,"nodeType":"Return","src":"12895:8:108"}]},"documentation":{"id":31546,"nodeType":"StructuredDocumentation","src":"12369:201:108","text":" @notice Get the virtual price, to help calculate profit\n @param self Swap struct to read from\n @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS"},"id":31599,"implemented":true,"kind":"function","modifiers":[],"name":"getVirtualPrice","nameLocation":"12582:15:108","nodeType":"FunctionDefinition","parameters":{"id":31550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31549,"mutability":"mutable","name":"self","nameLocation":"12611:4:108","nodeType":"VariableDeclaration","scope":31599,"src":"12598:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":31548,"nodeType":"UserDefinedTypeName","pathNode":{"id":31547,"name":"Swap","nameLocations":["12598:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"12598:4:108"},"referencedDeclaration":30786,"src":"12598:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"}],"src":"12597:19:108"},"returnParameters":{"id":31553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31552,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31599,"src":"12640:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31551,"name":"uint256","nodeType":"ElementaryTypeName","src":"12640:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12639:9:108"},"scope":34244,"src":"12573:335:108","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":31800,"nodeType":"Block","src":"13684:1341:108","statements":[{"assignments":[31617],"declarations":[{"constant":false,"id":31617,"mutability":"mutable","name":"numTokens","nameLocation":"13698:9:108","nodeType":"VariableDeclaration","scope":31800,"src":"13690:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31616,"name":"uint256","nodeType":"ElementaryTypeName","src":"13690:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31620,"initialValue":{"expression":{"id":31618,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31611,"src":"13710:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13713:6:108","memberName":"length","nodeType":"MemberAccess","src":"13710:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13690:29:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":31624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31622,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31604,"src":"13733:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":31623,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31606,"src":"13751:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"13733:30:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6d7061726520746f6b656e20746f20697473656c66","id":31625,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13765:25:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941","typeString":"literal_string \"compare token to itself\""},"value":"compare token to itself"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941","typeString":"literal_string \"compare token to itself\""}],"id":31621,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"13725:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":31626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13725:66:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31627,"nodeType":"ExpressionStatement","src":"13725:66:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":31635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31629,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31604,"src":"13805:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":31630,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31617,"src":"13822:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13805:26:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31632,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31606,"src":"13835:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":31633,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31617,"src":"13850:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13835:24:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13805:54:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"746f6b656e206e6f7420666f756e64","id":31636,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13861:17:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_9696d201946a7b6efbea55f1e57c9bbecf77447f35c86ca3cfdc292daa9e8b3d","typeString":"literal_string \"token not found\""},"value":"token not found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9696d201946a7b6efbea55f1e57c9bbecf77447f35c86ca3cfdc292daa9e8b3d","typeString":"literal_string \"token not found\""}],"id":31628,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"13797:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":31637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13797:82:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31638,"nodeType":"ExpressionStatement","src":"13797:82:108"},{"assignments":[31640],"declarations":[{"constant":false,"id":31640,"mutability":"mutable","name":"d","nameLocation":"13894:1:108","nodeType":"VariableDeclaration","scope":31800,"src":"13886:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31639,"name":"uint256","nodeType":"ElementaryTypeName","src":"13886:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31645,"initialValue":{"arguments":[{"id":31642,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31611,"src":"13903:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":31643,"name":"preciseA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31602,"src":"13907:8:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31641,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31463,"src":"13898:4:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":31644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13898:18:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13886:30:108"},{"assignments":[31647],"declarations":[{"constant":false,"id":31647,"mutability":"mutable","name":"c","nameLocation":"13930:1:108","nodeType":"VariableDeclaration","scope":31800,"src":"13922:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31646,"name":"uint256","nodeType":"ElementaryTypeName","src":"13922:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31649,"initialValue":{"id":31648,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31640,"src":"13934:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13922:13:108"},{"assignments":[31651],"declarations":[{"constant":false,"id":31651,"mutability":"mutable","name":"s","nameLocation":"13949:1:108","nodeType":"VariableDeclaration","scope":31800,"src":"13941:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31650,"name":"uint256","nodeType":"ElementaryTypeName","src":"13941:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31652,"nodeType":"VariableDeclarationStatement","src":"13941:9:108"},{"assignments":[31654],"declarations":[{"constant":false,"id":31654,"mutability":"mutable","name":"nA","nameLocation":"13964:2:108","nodeType":"VariableDeclaration","scope":31800,"src":"13956:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31653,"name":"uint256","nodeType":"ElementaryTypeName","src":"13956:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31658,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31655,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31617,"src":"13969:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31656,"name":"preciseA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31602,"src":"13981:8:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13969:20:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13956:33:108"},{"assignments":[31660],"declarations":[{"constant":false,"id":31660,"mutability":"mutable","name":"_x","nameLocation":"14004:2:108","nodeType":"VariableDeclaration","scope":31800,"src":"13996:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31659,"name":"uint256","nodeType":"ElementaryTypeName","src":"13996:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31661,"nodeType":"VariableDeclarationStatement","src":"13996:10:108"},{"body":{"id":31714,"nodeType":"Block","src":"14045:526:108","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31668,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31663,"src":"14057:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":31669,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31604,"src":"14062:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"14057:19:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31676,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31663,"src":"14113:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":31677,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31606,"src":"14118:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"14113:17:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":31691,"nodeType":"Block","src":"14167:72:108","statements":[{"id":31689,"nodeType":"UncheckedBlock","src":"14177:36:108","statements":[{"expression":{"id":31687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"14199:3:108","subExpression":{"id":31686,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31663,"src":"14201:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31688,"nodeType":"ExpressionStatement","src":"14199:3:108"}]},{"id":31690,"nodeType":"Continue","src":"14222:8:108"}]},"id":31692,"nodeType":"IfStatement","src":"14109:130:108","trueBody":{"id":31685,"nodeType":"Block","src":"14132:29:108","statements":[{"expression":{"id":31683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31679,"name":"_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31660,"src":"14142:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":31680,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31611,"src":"14147:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31682,"indexExpression":{"id":31681,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31663,"src":"14150:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14147:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14142:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31684,"nodeType":"ExpressionStatement","src":"14142:10:108"}]}},"id":31693,"nodeType":"IfStatement","src":"14053:186:108","trueBody":{"id":31675,"nodeType":"Block","src":"14078:25:108","statements":[{"expression":{"id":31673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31671,"name":"_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31660,"src":"14088:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":31672,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31608,"src":"14093:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14088:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31674,"nodeType":"ExpressionStatement","src":"14088:6:108"}]}},{"expression":{"id":31696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31694,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31651,"src":"14246:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":31695,"name":"_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31660,"src":"14251:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14246:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31697,"nodeType":"ExpressionStatement","src":"14246:7:108"},{"expression":{"id":31708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31698,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31647,"src":"14261:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31699,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31647,"src":"14266:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31700,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31640,"src":"14270:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14266:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31702,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14265:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31703,"name":"_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31660,"src":"14276:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31704,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31617,"src":"14281:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14276:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31706,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14275:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14265:26:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14261:30:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31709,"nodeType":"ExpressionStatement","src":"14261:30:108"},{"id":31713,"nodeType":"UncheckedBlock","src":"14533:32:108","statements":[{"expression":{"id":31711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"14553:3:108","subExpression":{"id":31710,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31663,"src":"14555:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31712,"nodeType":"ExpressionStatement","src":"14553:3:108"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31665,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31663,"src":"14028:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":31666,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31617,"src":"14032:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14028:13:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31715,"initializationExpression":{"assignments":[31663],"declarations":[{"constant":false,"id":31663,"mutability":"mutable","name":"i","nameLocation":"14025:1:108","nodeType":"VariableDeclaration","scope":31715,"src":"14017:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31662,"name":"uint256","nodeType":"ElementaryTypeName","src":"14017:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31664,"nodeType":"VariableDeclarationStatement","src":"14017:9:108"},"nodeType":"ForStatement","src":"14012:559:108"},{"expression":{"id":31729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31716,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31647,"src":"14576:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31717,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31647,"src":"14581:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31718,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31640,"src":"14585:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14581:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":31720,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"14589:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":31721,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14599:11:108","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"14589:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14581:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31723,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14580:31:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31724,"name":"nA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31654,"src":"14615:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31725,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31617,"src":"14620:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14615:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31727,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14614:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14580:50:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14576:54:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31730,"nodeType":"ExpressionStatement","src":"14576:54:108"},{"assignments":[31732],"declarations":[{"constant":false,"id":31732,"mutability":"mutable","name":"b","nameLocation":"14644:1:108","nodeType":"VariableDeclaration","scope":31800,"src":"14636:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31731,"name":"uint256","nodeType":"ElementaryTypeName","src":"14636:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31743,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31733,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31651,"src":"14648:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31734,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31640,"src":"14654:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":31735,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"14658:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":31736,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14668:11:108","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"14658:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14654:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31738,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14653:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":31739,"name":"nA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31654,"src":"14683:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14653:32:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31741,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14652:34:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14648:38:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14636:50:108"},{"assignments":[31745],"declarations":[{"constant":false,"id":31745,"mutability":"mutable","name":"yPrev","nameLocation":"14700:5:108","nodeType":"VariableDeclaration","scope":31800,"src":"14692:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31744,"name":"uint256","nodeType":"ElementaryTypeName","src":"14692:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31746,"nodeType":"VariableDeclarationStatement","src":"14692:13:108"},{"assignments":[31748],"declarations":[{"constant":false,"id":31748,"mutability":"mutable","name":"y","nameLocation":"14719:1:108","nodeType":"VariableDeclaration","scope":31800,"src":"14711:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31747,"name":"uint256","nodeType":"ElementaryTypeName","src":"14711:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31750,"initialValue":{"id":31749,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31640,"src":"14723:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14711:13:108"},{"body":{"id":31794,"nodeType":"Block","src":"14810:165:108","statements":[{"expression":{"id":31760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31758,"name":"yPrev","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31745,"src":"14818:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":31759,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31748,"src":"14826:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14818:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31761,"nodeType":"ExpressionStatement","src":"14818:9:108"},{"expression":{"id":31780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31762,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31748,"src":"14835:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31763,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31748,"src":"14841:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":31764,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31748,"src":"14845:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14841:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31766,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14840:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":31767,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31647,"src":"14850:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14840:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31769,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14839:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31770,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31748,"src":"14857:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":31771,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14861:1:108","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"14857:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31773,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14856:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":31774,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31732,"src":"14866:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14856:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":31776,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31640,"src":"14870:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14856:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31778,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14855:17:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14839:33:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14835:37:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31781,"nodeType":"ExpressionStatement","src":"14835:37:108"},{"condition":{"arguments":[{"id":31784,"name":"yPrev","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31745,"src":"14894:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":31782,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31748,"src":"14884:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14886:7:108","memberName":"within1","nodeType":"MemberAccess","referencedDeclaration":30620,"src":"14884:9:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":31785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14884:16:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31789,"nodeType":"IfStatement","src":"14880:49:108","trueBody":{"id":31788,"nodeType":"Block","src":"14902:27:108","statements":[{"expression":{"id":31786,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31748,"src":"14919:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":31615,"id":31787,"nodeType":"Return","src":"14912:8:108"}]}},{"id":31793,"nodeType":"UncheckedBlock","src":"14937:32:108","statements":[{"expression":{"id":31791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"14957:3:108","subExpression":{"id":31790,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31752,"src":"14959:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31792,"nodeType":"ExpressionStatement","src":"14957:3:108"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31754,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31752,"src":"14778:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":31755,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"14782:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":31756,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14792:14:108","memberName":"MAX_LOOP_LIMIT","nodeType":"MemberAccess","referencedDeclaration":29282,"src":"14782:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14778:28:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31795,"initializationExpression":{"assignments":[31752],"declarations":[{"constant":false,"id":31752,"mutability":"mutable","name":"i","nameLocation":"14775:1:108","nodeType":"VariableDeclaration","scope":31795,"src":"14767:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31751,"name":"uint256","nodeType":"ElementaryTypeName","src":"14767:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31753,"nodeType":"VariableDeclarationStatement","src":"14767:9:108"},"nodeType":"ForStatement","src":"14762:213:108"},{"expression":{"arguments":[{"hexValue":"417070726f78696d6174696f6e20646964206e6f7420636f6e7665726765","id":31797,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14987:32:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05","typeString":"literal_string \"Approximation did not converge\""},"value":"Approximation did not converge"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05","typeString":"literal_string \"Approximation did not converge\""}],"id":31796,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"14980:6:108","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":31798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14980:40:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31799,"nodeType":"ExpressionStatement","src":"14980:40:108"}]},"documentation":{"id":31600,"nodeType":"StructuredDocumentation","src":"12912:607:108","text":" @notice Calculate the new balances of the tokens given the indexes of the token\n that is swapped from (FROM) and the token that is swapped to (TO).\n This function is used as a helper function to calculate how much TO token\n the user should receive on swap.\n @param preciseA precise form of amplification coefficient\n @param tokenIndexFrom index of FROM token\n @param tokenIndexTo index of TO token\n @param x the new total amount of FROM token\n @param xp balances of the tokens in the pool\n @return the amount of TO token that should remain in the pool"},"id":31801,"implemented":true,"kind":"function","modifiers":[],"name":"getY","nameLocation":"13531:4:108","nodeType":"FunctionDefinition","parameters":{"id":31612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31602,"mutability":"mutable","name":"preciseA","nameLocation":"13549:8:108","nodeType":"VariableDeclaration","scope":31801,"src":"13541:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31601,"name":"uint256","nodeType":"ElementaryTypeName","src":"13541:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31604,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"13569:14:108","nodeType":"VariableDeclaration","scope":31801,"src":"13563:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":31603,"name":"uint8","nodeType":"ElementaryTypeName","src":"13563:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":31606,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"13595:12:108","nodeType":"VariableDeclaration","scope":31801,"src":"13589:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":31605,"name":"uint8","nodeType":"ElementaryTypeName","src":"13589:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":31608,"mutability":"mutable","name":"x","nameLocation":"13621:1:108","nodeType":"VariableDeclaration","scope":31801,"src":"13613:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31607,"name":"uint256","nodeType":"ElementaryTypeName","src":"13613:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31611,"mutability":"mutable","name":"xp","nameLocation":"13645:2:108","nodeType":"VariableDeclaration","scope":31801,"src":"13628:19:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31609,"name":"uint256","nodeType":"ElementaryTypeName","src":"13628:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31610,"nodeType":"ArrayTypeName","src":"13628:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"13535:116:108"},"returnParameters":{"id":31615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31614,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31801,"src":"13675:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31613,"name":"uint256","nodeType":"ElementaryTypeName","src":"13675:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13674:9:108"},"scope":34244,"src":"13522:1503:108","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":31828,"nodeType":"Block","src":"15581:89:108","statements":[{"expression":{"id":31826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":31816,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31814,"src":"15588:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null],"id":31817,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"15587:6:108","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$__$","typeString":"tuple(uint256,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":31819,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31805,"src":"15611:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},{"id":31820,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31807,"src":"15617:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":31821,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31809,"src":"15633:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":31822,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31811,"src":"15647:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":31823,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31805,"src":"15651:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":31824,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15656:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"15651:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}],"id":31818,"name":"_calculateSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31965,"src":"15596:14:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint8,uint8,uint256,uint256[] memory) view returns (uint256,uint256)"}},"id":31825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15596:69:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"15587:78:108","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31827,"nodeType":"ExpressionStatement","src":"15587:78:108"}]},"documentation":{"id":31802,"nodeType":"StructuredDocumentation","src":"15029:398:108","text":" @notice Externally calculates a swap between two tokens.\n @param self Swap struct to read from\n @param tokenIndexFrom the token to sell\n @param tokenIndexTo the token to buy\n @param dx the number of tokens to sell. If the token charges a fee on transfers,\n use the amount that gets transferred after the fee.\n @return dy the number of tokens the user will get"},"id":31829,"implemented":true,"kind":"function","modifiers":[],"name":"calculateSwap","nameLocation":"15439:13:108","nodeType":"FunctionDefinition","parameters":{"id":31812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31805,"mutability":"mutable","name":"self","nameLocation":"15471:4:108","nodeType":"VariableDeclaration","scope":31829,"src":"15458:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":31804,"nodeType":"UserDefinedTypeName","pathNode":{"id":31803,"name":"Swap","nameLocations":["15458:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"15458:4:108"},"referencedDeclaration":30786,"src":"15458:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":31807,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"15487:14:108","nodeType":"VariableDeclaration","scope":31829,"src":"15481:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":31806,"name":"uint8","nodeType":"ElementaryTypeName","src":"15481:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":31809,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"15513:12:108","nodeType":"VariableDeclaration","scope":31829,"src":"15507:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":31808,"name":"uint8","nodeType":"ElementaryTypeName","src":"15507:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":31811,"mutability":"mutable","name":"dx","nameLocation":"15539:2:108","nodeType":"VariableDeclaration","scope":31829,"src":"15531:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31810,"name":"uint256","nodeType":"ElementaryTypeName","src":"15531:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15452:93:108"},"returnParameters":{"id":31815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31814,"mutability":"mutable","name":"dy","nameLocation":"15577:2:108","nodeType":"VariableDeclaration","scope":31829,"src":"15569:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31813,"name":"uint256","nodeType":"ElementaryTypeName","src":"15569:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15568:12:108"},"scope":34244,"src":"15430:240:108","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":31856,"nodeType":"Block","src":"16144:92:108","statements":[{"expression":{"id":31854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":31844,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31842,"src":"16151:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null],"id":31845,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"16150:6:108","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$__$","typeString":"tuple(uint256,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":31847,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31833,"src":"16177:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},{"id":31848,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31835,"src":"16183:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":31849,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31837,"src":"16199:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":31850,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31839,"src":"16213:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":31851,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31833,"src":"16217:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":31852,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16222:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"16217:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}],"id":31846,"name":"_calculateSwapInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32094,"src":"16159:17:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint8,uint8,uint256,uint256[] memory) view returns (uint256,uint256)"}},"id":31853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16159:72:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"16150:81:108","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31855,"nodeType":"ExpressionStatement","src":"16150:81:108"}]},"documentation":{"id":31830,"nodeType":"StructuredDocumentation","src":"15674:313:108","text":" @notice Externally calculates a swap between two tokens.\n @param self Swap struct to read from\n @param tokenIndexFrom the token to sell\n @param tokenIndexTo the token to buy\n @param dy the number of tokens to buy.\n @return dx the number of tokens the user have to transfer + fee"},"id":31857,"implemented":true,"kind":"function","modifiers":[],"name":"calculateSwapInv","nameLocation":"15999:16:108","nodeType":"FunctionDefinition","parameters":{"id":31840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31833,"mutability":"mutable","name":"self","nameLocation":"16034:4:108","nodeType":"VariableDeclaration","scope":31857,"src":"16021:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":31832,"nodeType":"UserDefinedTypeName","pathNode":{"id":31831,"name":"Swap","nameLocations":["16021:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"16021:4:108"},"referencedDeclaration":30786,"src":"16021:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":31835,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"16050:14:108","nodeType":"VariableDeclaration","scope":31857,"src":"16044:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":31834,"name":"uint8","nodeType":"ElementaryTypeName","src":"16044:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":31837,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"16076:12:108","nodeType":"VariableDeclaration","scope":31857,"src":"16070:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":31836,"name":"uint8","nodeType":"ElementaryTypeName","src":"16070:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":31839,"mutability":"mutable","name":"dy","nameLocation":"16102:2:108","nodeType":"VariableDeclaration","scope":31857,"src":"16094:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31838,"name":"uint256","nodeType":"ElementaryTypeName","src":"16094:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16015:93:108"},"returnParameters":{"id":31843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31842,"mutability":"mutable","name":"dx","nameLocation":"16140:2:108","nodeType":"VariableDeclaration","scope":31857,"src":"16132:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31841,"name":"uint256","nodeType":"ElementaryTypeName","src":"16132:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16131:12:108"},"scope":34244,"src":"15990:246:108","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":31964,"nodeType":"Block","src":"17094:514:108","statements":[{"assignments":[31881],"declarations":[{"constant":false,"id":31881,"mutability":"mutable","name":"multipliers","nameLocation":"17117:11:108","nodeType":"VariableDeclaration","scope":31964,"src":"17100:28:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31879,"name":"uint256","nodeType":"ElementaryTypeName","src":"17100:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31880,"nodeType":"ArrayTypeName","src":"17100:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":31884,"initialValue":{"expression":{"id":31882,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31861,"src":"17131:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":31883,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17136:25:108","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":30775,"src":"17131:30:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"17100:61:108"},{"assignments":[31889],"declarations":[{"constant":false,"id":31889,"mutability":"mutable","name":"xp","nameLocation":"17184:2:108","nodeType":"VariableDeclaration","scope":31964,"src":"17167:19:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31887,"name":"uint256","nodeType":"ElementaryTypeName","src":"17167:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31888,"nodeType":"ArrayTypeName","src":"17167:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":31894,"initialValue":{"arguments":[{"id":31891,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31870,"src":"17193:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":31892,"name":"multipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31881,"src":"17203:11:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":31890,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[31527,31545],"referencedDeclaration":31527,"src":"17189:3:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":31893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17189:26:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"17167:48:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":31904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31896,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31863,"src":"17229:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":31897,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31889,"src":"17246:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17249:6:108","memberName":"length","nodeType":"MemberAccess","src":"17246:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17229:26:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31900,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31865,"src":"17259:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":31901,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31889,"src":"17274:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17277:6:108","memberName":"length","nodeType":"MemberAccess","src":"17274:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17259:24:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17229:54:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e646578206f7574206f662072616e6765","id":31905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17285:20:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d","typeString":"literal_string \"index out of range\""},"value":"index out of range"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d","typeString":"literal_string \"index out of range\""}],"id":31895,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17221:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":31906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17221:85:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31907,"nodeType":"ExpressionStatement","src":"17221:85:108"},{"assignments":[31909],"declarations":[{"constant":false,"id":31909,"mutability":"mutable","name":"x","nameLocation":"17320:1:108","nodeType":"VariableDeclaration","scope":31964,"src":"17312:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31908,"name":"uint256","nodeType":"ElementaryTypeName","src":"17312:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31919,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31910,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31867,"src":"17324:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"baseExpression":{"id":31911,"name":"multipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31881,"src":"17329:11:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31913,"indexExpression":{"id":31912,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31863,"src":"17341:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17329:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17324:32:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"baseExpression":{"id":31915,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31889,"src":"17359:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31917,"indexExpression":{"id":31916,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31863,"src":"17362:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17359:18:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17324:53:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17312:65:108"},{"assignments":[31921],"declarations":[{"constant":false,"id":31921,"mutability":"mutable","name":"y","nameLocation":"17391:1:108","nodeType":"VariableDeclaration","scope":31964,"src":"17383:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31920,"name":"uint256","nodeType":"ElementaryTypeName","src":"17383:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31931,"initialValue":{"arguments":[{"arguments":[{"id":31924,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31861,"src":"17413:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}],"id":31923,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30831,"src":"17400:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (uint256)"}},"id":31925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17400:18:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31926,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31863,"src":"17420:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":31927,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31865,"src":"17436:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":31928,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31909,"src":"17450:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31929,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31889,"src":"17453:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":31922,"name":"getY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31801,"src":"17395:4:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint8_$_t_uint8_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,uint8,uint8,uint256,uint256[] memory) pure returns (uint256)"}},"id":31930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17395:61:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17383:73:108"},{"expression":{"id":31940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31932,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31873,"src":"17462:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":31933,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31889,"src":"17467:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31935,"indexExpression":{"id":31934,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31865,"src":"17470:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17467:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":31936,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31921,"src":"17486:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17467:20:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":31938,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17490:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"17467:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17462:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31941,"nodeType":"ExpressionStatement","src":"17462:29:108"},{"expression":{"id":31951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31942,"name":"dyFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31875,"src":"17497:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31943,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31873,"src":"17506:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":31944,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31861,"src":"17511:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":31945,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17516:7:108","memberName":"swapFee","nodeType":"MemberAccess","referencedDeclaration":30763,"src":"17511:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17506:17:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31947,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17505:19:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":31948,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"17527:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":31949,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17537:15:108","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"17527:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17505:47:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17497:55:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31952,"nodeType":"ExpressionStatement","src":"17497:55:108"},{"expression":{"id":31962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31953,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31873,"src":"17558:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31954,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31873,"src":"17564:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":31955,"name":"dyFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31875,"src":"17569:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17564:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31957,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17563:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"id":31958,"name":"multipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31881,"src":"17578:11:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31960,"indexExpression":{"id":31959,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31865,"src":"17590:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17578:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17563:40:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17558:45:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31963,"nodeType":"ExpressionStatement","src":"17558:45:108"}]},"documentation":{"id":31858,"nodeType":"StructuredDocumentation","src":"16240:653:108","text":" @notice Internally calculates a swap between two tokens.\n @dev The caller is expected to transfer the actual amounts (dx and dy)\n using the token contracts.\n @param self Swap struct to read from\n @param tokenIndexFrom the token to sell\n @param tokenIndexTo the token to buy\n @param dx the number of tokens to sell. If the token charges a fee on transfers,\n use the amount that gets transferred after the fee.\n @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\n @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)"},"id":31965,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateSwap","nameLocation":"16905:14:108","nodeType":"FunctionDefinition","parameters":{"id":31871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31861,"mutability":"mutable","name":"self","nameLocation":"16938:4:108","nodeType":"VariableDeclaration","scope":31965,"src":"16925:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":31860,"nodeType":"UserDefinedTypeName","pathNode":{"id":31859,"name":"Swap","nameLocations":["16925:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"16925:4:108"},"referencedDeclaration":30786,"src":"16925:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":31863,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"16954:14:108","nodeType":"VariableDeclaration","scope":31965,"src":"16948:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":31862,"name":"uint8","nodeType":"ElementaryTypeName","src":"16948:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":31865,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"16980:12:108","nodeType":"VariableDeclaration","scope":31965,"src":"16974:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":31864,"name":"uint8","nodeType":"ElementaryTypeName","src":"16974:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":31867,"mutability":"mutable","name":"dx","nameLocation":"17006:2:108","nodeType":"VariableDeclaration","scope":31965,"src":"16998:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31866,"name":"uint256","nodeType":"ElementaryTypeName","src":"16998:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31870,"mutability":"mutable","name":"balances","nameLocation":"17031:8:108","nodeType":"VariableDeclaration","scope":31965,"src":"17014:25:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31868,"name":"uint256","nodeType":"ElementaryTypeName","src":"17014:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31869,"nodeType":"ArrayTypeName","src":"17014:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"16919:124:108"},"returnParameters":{"id":31876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31873,"mutability":"mutable","name":"dy","nameLocation":"17075:2:108","nodeType":"VariableDeclaration","scope":31965,"src":"17067:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31872,"name":"uint256","nodeType":"ElementaryTypeName","src":"17067:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31875,"mutability":"mutable","name":"dyFee","nameLocation":"17087:5:108","nodeType":"VariableDeclaration","scope":31965,"src":"17079:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31874,"name":"uint256","nodeType":"ElementaryTypeName","src":"17079:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17066:27:108"},"scope":34244,"src":"16896:712:108","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":32093,"nodeType":"Block","src":"18475:636:108","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":31988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31986,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31971,"src":"18489:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":31987,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31973,"src":"18507:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"18489:30:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6d7061726520746f6b656e20746f20697473656c66","id":31989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18521:25:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941","typeString":"literal_string \"compare token to itself\""},"value":"compare token to itself"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941","typeString":"literal_string \"compare token to itself\""}],"id":31985,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18481:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":31990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18481:66:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31991,"nodeType":"ExpressionStatement","src":"18481:66:108"},{"assignments":[31996],"declarations":[{"constant":false,"id":31996,"mutability":"mutable","name":"multipliers","nameLocation":"18570:11:108","nodeType":"VariableDeclaration","scope":32093,"src":"18553:28:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31994,"name":"uint256","nodeType":"ElementaryTypeName","src":"18553:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31995,"nodeType":"ArrayTypeName","src":"18553:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":31999,"initialValue":{"expression":{"id":31997,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31969,"src":"18584:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":31998,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18589:25:108","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":30775,"src":"18584:30:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"18553:61:108"},{"assignments":[32004],"declarations":[{"constant":false,"id":32004,"mutability":"mutable","name":"xp","nameLocation":"18637:2:108","nodeType":"VariableDeclaration","scope":32093,"src":"18620:19:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":32002,"name":"uint256","nodeType":"ElementaryTypeName","src":"18620:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32003,"nodeType":"ArrayTypeName","src":"18620:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":32009,"initialValue":{"arguments":[{"id":32006,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31978,"src":"18646:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":32007,"name":"multipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31996,"src":"18656:11:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":32005,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[31527,31545],"referencedDeclaration":31527,"src":"18642:3:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":32008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18642:26:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"18620:48:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":32019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32011,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31971,"src":"18682:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":32012,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32004,"src":"18699:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18702:6:108","memberName":"length","nodeType":"MemberAccess","src":"18699:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18682:26:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32015,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31973,"src":"18712:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":32016,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32004,"src":"18727:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18730:6:108","memberName":"length","nodeType":"MemberAccess","src":"18727:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18712:24:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"18682:54:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e646578206f7574206f662072616e6765","id":32020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18738:20:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d","typeString":"literal_string \"index out of range\""},"value":"index out of range"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d","typeString":"literal_string \"index out of range\""}],"id":32010,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18674:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18674:85:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32022,"nodeType":"ExpressionStatement","src":"18674:85:108"},{"assignments":[32024],"declarations":[{"constant":false,"id":32024,"mutability":"mutable","name":"a","nameLocation":"18774:1:108","nodeType":"VariableDeclaration","scope":32093,"src":"18766:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32023,"name":"uint256","nodeType":"ElementaryTypeName","src":"18766:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32028,"initialValue":{"arguments":[{"id":32026,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31969,"src":"18791:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}],"id":32025,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30831,"src":"18778:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (uint256)"}},"id":32027,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18778:18:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18766:30:108"},{"assignments":[32030],"declarations":[{"constant":false,"id":32030,"mutability":"mutable","name":"d0","nameLocation":"18810:2:108","nodeType":"VariableDeclaration","scope":32093,"src":"18802:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32029,"name":"uint256","nodeType":"ElementaryTypeName","src":"18802:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32035,"initialValue":{"arguments":[{"id":32032,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32004,"src":"18820:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":32033,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32024,"src":"18824:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":32031,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31463,"src":"18815:4:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":32034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18815:11:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18802:24:108"},{"expression":{"id":32049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":32036,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32004,"src":"18833:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32038,"indexExpression":{"id":32037,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31973,"src":"18836:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18833:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":32039,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32004,"src":"18852:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32041,"indexExpression":{"id":32040,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31973,"src":"18855:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18852:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32042,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31975,"src":"18872:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"baseExpression":{"id":32043,"name":"multipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31996,"src":"18877:11:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32045,"indexExpression":{"id":32044,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31973,"src":"18889:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18877:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18872:30:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32047,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18871:32:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18852:51:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18833:70:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32050,"nodeType":"ExpressionStatement","src":"18833:70:108"},{"assignments":[32052],"declarations":[{"constant":false,"id":32052,"mutability":"mutable","name":"x","nameLocation":"18917:1:108","nodeType":"VariableDeclaration","scope":32093,"src":"18909:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32051,"name":"uint256","nodeType":"ElementaryTypeName","src":"18909:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32059,"initialValue":{"arguments":[{"id":32054,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32024,"src":"18927:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":32055,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31971,"src":"18930:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":32056,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32004,"src":"18946:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":32057,"name":"d0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32030,"src":"18950:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":32053,"name":"getYD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31307,"src":"18921:5:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint8_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint8,uint256[] memory,uint256) pure returns (uint256)"}},"id":32058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18921:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18909:44:108"},{"expression":{"id":32069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":32060,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31981,"src":"18959:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32061,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32052,"src":"18965:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":32062,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18969:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"18965:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32064,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18964:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":32065,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32004,"src":"18974:2:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32067,"indexExpression":{"id":32066,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31971,"src":"18977:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18974:18:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18964:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18959:33:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32070,"nodeType":"ExpressionStatement","src":"18959:33:108"},{"expression":{"id":32080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":32071,"name":"dxFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31983,"src":"18998:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32072,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31981,"src":"19007:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":32073,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31969,"src":"19012:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32074,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19017:7:108","memberName":"swapFee","nodeType":"MemberAccess","referencedDeclaration":30763,"src":"19012:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19007:17:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32076,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19006:19:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":32077,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"19028:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":32078,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"19038:15:108","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"19028:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19006:47:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18998:55:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32081,"nodeType":"ExpressionStatement","src":"18998:55:108"},{"expression":{"id":32091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":32082,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31981,"src":"19059:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32083,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31981,"src":"19065:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":32084,"name":"dxFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31983,"src":"19070:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19065:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32086,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19064:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"id":32087,"name":"multipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31996,"src":"19079:11:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32089,"indexExpression":{"id":32088,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31971,"src":"19091:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19079:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19064:42:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19059:47:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32092,"nodeType":"ExpressionStatement","src":"19059:47:108"}]},"documentation":{"id":31966,"nodeType":"StructuredDocumentation","src":"17612:659:108","text":" @notice Internally calculates a swap between two tokens.\n @dev The caller is expected to transfer the actual amounts (dx and dy)\n using the token contracts.\n @param self Swap struct to read from\n @param tokenIndexFrom the token to sell\n @param tokenIndexTo the token to buy\n @param dy the number of tokens to buy. If the token charges a fee on transfers,\n use the amount that gets transferred after the fee.\n @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\n @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)"},"id":32094,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateSwapInv","nameLocation":"18283:17:108","nodeType":"FunctionDefinition","parameters":{"id":31979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31969,"mutability":"mutable","name":"self","nameLocation":"18319:4:108","nodeType":"VariableDeclaration","scope":32094,"src":"18306:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":31968,"nodeType":"UserDefinedTypeName","pathNode":{"id":31967,"name":"Swap","nameLocations":["18306:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"18306:4:108"},"referencedDeclaration":30786,"src":"18306:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":31971,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"18335:14:108","nodeType":"VariableDeclaration","scope":32094,"src":"18329:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":31970,"name":"uint8","nodeType":"ElementaryTypeName","src":"18329:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":31973,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"18361:12:108","nodeType":"VariableDeclaration","scope":32094,"src":"18355:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":31972,"name":"uint8","nodeType":"ElementaryTypeName","src":"18355:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":31975,"mutability":"mutable","name":"dy","nameLocation":"18387:2:108","nodeType":"VariableDeclaration","scope":32094,"src":"18379:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31974,"name":"uint256","nodeType":"ElementaryTypeName","src":"18379:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31978,"mutability":"mutable","name":"balances","nameLocation":"18412:8:108","nodeType":"VariableDeclaration","scope":32094,"src":"18395:25:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31976,"name":"uint256","nodeType":"ElementaryTypeName","src":"18395:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31977,"nodeType":"ArrayTypeName","src":"18395:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"18300:124:108"},"returnParameters":{"id":31984,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31981,"mutability":"mutable","name":"dx","nameLocation":"18456:2:108","nodeType":"VariableDeclaration","scope":32094,"src":"18448:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31980,"name":"uint256","nodeType":"ElementaryTypeName","src":"18448:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31983,"mutability":"mutable","name":"dxFee","nameLocation":"18468:5:108","nodeType":"VariableDeclaration","scope":32094,"src":"18460:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31982,"name":"uint256","nodeType":"ElementaryTypeName","src":"18460:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18447:27:108"},"scope":34244,"src":"18274:837:108","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":32116,"nodeType":"Block","src":"19527:94:108","statements":[{"expression":{"arguments":[{"expression":{"id":32107,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32098,"src":"19566:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32108,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19571:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"19566:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},{"id":32109,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32100,"src":"19581:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":32110,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32098,"src":"19589:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32111,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19594:7:108","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":30768,"src":"19589:12:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":32112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19602:11:108","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":8543,"src":"19589:24:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":32113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19589:26:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":32106,"name":"_calculateRemoveLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32181,"src":"19540:25:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256[] memory)"}},"id":32114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19540:76:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":32105,"id":32115,"nodeType":"Return","src":"19533:83:108"}]},"documentation":{"id":32095,"nodeType":"StructuredDocumentation","src":"19115:299:108","text":" @notice A simple method to calculate amount of each underlying\n tokens that is returned upon burning given amount of\n LP tokens\n @param amount the amount of LP tokens that would to be burned on\n withdrawal\n @return array of amounts of tokens user will receive"},"id":32117,"implemented":true,"kind":"function","modifiers":[],"name":"calculateRemoveLiquidity","nameLocation":"19426:24:108","nodeType":"FunctionDefinition","parameters":{"id":32101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32098,"mutability":"mutable","name":"self","nameLocation":"19464:4:108","nodeType":"VariableDeclaration","scope":32117,"src":"19451:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":32097,"nodeType":"UserDefinedTypeName","pathNode":{"id":32096,"name":"Swap","nameLocations":["19451:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"19451:4:108"},"referencedDeclaration":30786,"src":"19451:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":32100,"mutability":"mutable","name":"amount","nameLocation":"19478:6:108","nodeType":"VariableDeclaration","scope":32117,"src":"19470:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32099,"name":"uint256","nodeType":"ElementaryTypeName","src":"19470:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19450:35:108"},"returnParameters":{"id":32105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32104,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32117,"src":"19509:16:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":32102,"name":"uint256","nodeType":"ElementaryTypeName","src":"19509:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32103,"nodeType":"ArrayTypeName","src":"19509:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"19508:18:108"},"scope":34244,"src":"19417:204:108","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":32180,"nodeType":"Block","src":"19781:332:108","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32131,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32122,"src":"19795:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":32132,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32124,"src":"19805:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19795:21:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"65786365656420746f74616c20737570706c79","id":32134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19818:21:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_b19f02778fe2ebdf3ae6da8b526e4f3fcfda929b6d006b58be5eb0b43957bde5","typeString":"literal_string \"exceed total supply\""},"value":"exceed total supply"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b19f02778fe2ebdf3ae6da8b526e4f3fcfda929b6d006b58be5eb0b43957bde5","typeString":"literal_string \"exceed total supply\""}],"id":32130,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19787:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19787:53:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32136,"nodeType":"ExpressionStatement","src":"19787:53:108"},{"assignments":[32138],"declarations":[{"constant":false,"id":32138,"mutability":"mutable","name":"numBalances","nameLocation":"19855:11:108","nodeType":"VariableDeclaration","scope":32180,"src":"19847:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32137,"name":"uint256","nodeType":"ElementaryTypeName","src":"19847:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32141,"initialValue":{"expression":{"id":32139,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32120,"src":"19869:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19878:6:108","memberName":"length","nodeType":"MemberAccess","src":"19869:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19847:37:108"},{"assignments":[32146],"declarations":[{"constant":false,"id":32146,"mutability":"mutable","name":"amounts","nameLocation":"19907:7:108","nodeType":"VariableDeclaration","scope":32180,"src":"19890:24:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":32144,"name":"uint256","nodeType":"ElementaryTypeName","src":"19890:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32145,"nodeType":"ArrayTypeName","src":"19890:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":32152,"initialValue":{"arguments":[{"id":32150,"name":"numBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32138,"src":"19931:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":32149,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"19917:13:108","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":32147,"name":"uint256","nodeType":"ElementaryTypeName","src":"19921:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32148,"nodeType":"ArrayTypeName","src":"19921:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":32151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19917:26:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"19890:53:108"},{"body":{"id":32176,"nodeType":"Block","src":"19985:104:108","statements":[{"expression":{"id":32170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":32159,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32146,"src":"19993:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32161,"indexExpression":{"id":32160,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32154,"src":"20001:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"19993:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":32162,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32120,"src":"20007:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32164,"indexExpression":{"id":32163,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32154,"src":"20016:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20007:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":32165,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32122,"src":"20021:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20007:20:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32167,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20006:22:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":32168,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32124,"src":"20031:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20006:36:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19993:49:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32171,"nodeType":"ExpressionStatement","src":"19993:49:108"},{"id":32175,"nodeType":"UncheckedBlock","src":"20051:32:108","statements":[{"expression":{"id":32173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"20071:3:108","subExpression":{"id":32172,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32154,"src":"20073:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32174,"nodeType":"ExpressionStatement","src":"20071:3:108"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32156,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32154,"src":"19966:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":32157,"name":"numBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32138,"src":"19970:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19966:15:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32177,"initializationExpression":{"assignments":[32154],"declarations":[{"constant":false,"id":32154,"mutability":"mutable","name":"i","nameLocation":"19963:1:108","nodeType":"VariableDeclaration","scope":32177,"src":"19955:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32153,"name":"uint256","nodeType":"ElementaryTypeName","src":"19955:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32155,"nodeType":"VariableDeclarationStatement","src":"19955:9:108"},"nodeType":"ForStatement","src":"19950:139:108"},{"expression":{"id":32178,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32146,"src":"20101:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":32129,"id":32179,"nodeType":"Return","src":"20094:14:108"}]},"id":32181,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateRemoveLiquidity","nameLocation":"19634:25:108","nodeType":"FunctionDefinition","parameters":{"id":32125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32120,"mutability":"mutable","name":"balances","nameLocation":"19682:8:108","nodeType":"VariableDeclaration","scope":32181,"src":"19665:25:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":32118,"name":"uint256","nodeType":"ElementaryTypeName","src":"19665:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32119,"nodeType":"ArrayTypeName","src":"19665:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":32122,"mutability":"mutable","name":"amount","nameLocation":"19704:6:108","nodeType":"VariableDeclaration","scope":32181,"src":"19696:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32121,"name":"uint256","nodeType":"ElementaryTypeName","src":"19696:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":32124,"mutability":"mutable","name":"totalSupply","nameLocation":"19724:11:108","nodeType":"VariableDeclaration","scope":32181,"src":"19716:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32123,"name":"uint256","nodeType":"ElementaryTypeName","src":"19716:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19659:80:108"},"returnParameters":{"id":32129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32128,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32181,"src":"19763:16:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":32126,"name":"uint256","nodeType":"ElementaryTypeName","src":"19763:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32127,"nodeType":"ArrayTypeName","src":"19763:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"19762:18:108"},"scope":34244,"src":"19625:488:108","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":32321,"nodeType":"Block","src":"21106:791:108","statements":[{"assignments":[32199],"declarations":[{"constant":false,"id":32199,"mutability":"mutable","name":"balances","nameLocation":"21129:8:108","nodeType":"VariableDeclaration","scope":32321,"src":"21112:25:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":32197,"name":"uint256","nodeType":"ElementaryTypeName","src":"21112:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32198,"nodeType":"ArrayTypeName","src":"21112:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":32202,"initialValue":{"expression":{"id":32200,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32185,"src":"21140:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32201,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21145:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"21140:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"21112:41:108"},{"assignments":[32204],"declarations":[{"constant":false,"id":32204,"mutability":"mutable","name":"numBalances","nameLocation":"21167:11:108","nodeType":"VariableDeclaration","scope":32321,"src":"21159:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32203,"name":"uint256","nodeType":"ElementaryTypeName","src":"21159:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32207,"initialValue":{"expression":{"id":32205,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32199,"src":"21181:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21190:6:108","memberName":"length","nodeType":"MemberAccess","src":"21181:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21159:37:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":32209,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32188,"src":"21210:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":32210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21218:6:108","memberName":"length","nodeType":"MemberAccess","src":"21210:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":32211,"name":"numBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32204,"src":"21228:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21210:29:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c6964206c656e677468206f6620616d6f756e7473","id":32213,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"21241:27:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_080aeafdd82a5e4bff11e63d1393c2f6239b0d47ad30f78715e3cb5585e8484e","typeString":"literal_string \"invalid length of amounts\""},"value":"invalid length of amounts"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_080aeafdd82a5e4bff11e63d1393c2f6239b0d47ad30f78715e3cb5585e8484e","typeString":"literal_string \"invalid length of amounts\""}],"id":32208,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"21202:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21202:67:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32215,"nodeType":"ExpressionStatement","src":"21202:67:108"},{"assignments":[32217],"declarations":[{"constant":false,"id":32217,"mutability":"mutable","name":"a","nameLocation":"21284:1:108","nodeType":"VariableDeclaration","scope":32321,"src":"21276:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32216,"name":"uint256","nodeType":"ElementaryTypeName","src":"21276:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32221,"initialValue":{"arguments":[{"id":32219,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32185,"src":"21301:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}],"id":32218,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30831,"src":"21288:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (uint256)"}},"id":32220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21288:18:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21276:30:108"},{"assignments":[32226],"declarations":[{"constant":false,"id":32226,"mutability":"mutable","name":"multipliers","nameLocation":"21329:11:108","nodeType":"VariableDeclaration","scope":32321,"src":"21312:28:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":32224,"name":"uint256","nodeType":"ElementaryTypeName","src":"21312:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32225,"nodeType":"ArrayTypeName","src":"21312:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":32229,"initialValue":{"expression":{"id":32227,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32185,"src":"21343:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32228,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21348:25:108","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":30775,"src":"21343:30:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"21312:61:108"},{"assignments":[32231],"declarations":[{"constant":false,"id":32231,"mutability":"mutable","name":"d0","nameLocation":"21388:2:108","nodeType":"VariableDeclaration","scope":32321,"src":"21380:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32230,"name":"uint256","nodeType":"ElementaryTypeName","src":"21380:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32239,"initialValue":{"arguments":[{"arguments":[{"id":32234,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32199,"src":"21402:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":32235,"name":"multipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32226,"src":"21412:11:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":32233,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[31527,31545],"referencedDeclaration":31527,"src":"21398:3:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":32236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21398:26:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":32237,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32217,"src":"21426:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":32232,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31463,"src":"21393:4:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":32238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21393:35:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21380:48:108"},{"body":{"id":32278,"nodeType":"Block","src":"21469:187:108","statements":[{"condition":{"id":32246,"name":"deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32190,"src":"21481:7:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":32272,"nodeType":"Block","src":"21553:57:108","statements":[{"expression":{"id":32270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":32260,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32199,"src":"21563:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32262,"indexExpression":{"id":32261,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32241,"src":"21572:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21563:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":32263,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32199,"src":"21577:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32265,"indexExpression":{"id":32264,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32241,"src":"21586:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21577:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":32266,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32188,"src":"21591:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":32268,"indexExpression":{"id":32267,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32241,"src":"21599:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21591:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21577:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21563:38:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32271,"nodeType":"ExpressionStatement","src":"21563:38:108"}]},"id":32273,"nodeType":"IfStatement","src":"21477:133:108","trueBody":{"id":32259,"nodeType":"Block","src":"21490:57:108","statements":[{"expression":{"id":32257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":32247,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32199,"src":"21500:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32249,"indexExpression":{"id":32248,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32241,"src":"21509:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21500:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":32250,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32199,"src":"21514:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32252,"indexExpression":{"id":32251,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32241,"src":"21523:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21514:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"baseExpression":{"id":32253,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32188,"src":"21528:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":32255,"indexExpression":{"id":32254,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32241,"src":"21536:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21528:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21514:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21500:38:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32258,"nodeType":"ExpressionStatement","src":"21500:38:108"}]}},{"id":32277,"nodeType":"UncheckedBlock","src":"21618:32:108","statements":[{"expression":{"id":32275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"21638:3:108","subExpression":{"id":32274,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32241,"src":"21640:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32276,"nodeType":"ExpressionStatement","src":"21638:3:108"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32243,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32241,"src":"21450:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":32244,"name":"numBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32204,"src":"21454:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21450:15:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32279,"initializationExpression":{"assignments":[32241],"declarations":[{"constant":false,"id":32241,"mutability":"mutable","name":"i","nameLocation":"21447:1:108","nodeType":"VariableDeclaration","scope":32279,"src":"21439:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32240,"name":"uint256","nodeType":"ElementaryTypeName","src":"21439:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32242,"nodeType":"VariableDeclarationStatement","src":"21439:9:108"},"nodeType":"ForStatement","src":"21434:222:108"},{"assignments":[32281],"declarations":[{"constant":false,"id":32281,"mutability":"mutable","name":"d1","nameLocation":"21669:2:108","nodeType":"VariableDeclaration","scope":32321,"src":"21661:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32280,"name":"uint256","nodeType":"ElementaryTypeName","src":"21661:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32289,"initialValue":{"arguments":[{"arguments":[{"id":32284,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32199,"src":"21683:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":32285,"name":"multipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32226,"src":"21693:11:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":32283,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[31527,31545],"referencedDeclaration":31527,"src":"21679:3:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":32286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21679:26:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":32287,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32217,"src":"21707:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":32282,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31463,"src":"21674:4:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":32288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21674:35:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21661:48:108"},{"assignments":[32291],"declarations":[{"constant":false,"id":32291,"mutability":"mutable","name":"totalSupply","nameLocation":"21723:11:108","nodeType":"VariableDeclaration","scope":32321,"src":"21715:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32290,"name":"uint256","nodeType":"ElementaryTypeName","src":"21715:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32296,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":32292,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32185,"src":"21737:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32293,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21742:7:108","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":30768,"src":"21737:12:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":32294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21750:11:108","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":8543,"src":"21737:24:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":32295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21737:26:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21715:48:108"},{"condition":{"id":32297,"name":"deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32190,"src":"21774:7:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":32319,"nodeType":"Block","src":"21841:52:108","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32309,"name":"d0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32231,"src":"21858:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":32310,"name":"d1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32281,"src":"21863:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21858:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32312,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21857:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":32313,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32291,"src":"21869:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21857:23:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32315,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21856:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":32316,"name":"d0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32231,"src":"21884:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21856:30:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":32194,"id":32318,"nodeType":"Return","src":"21849:37:108"}]},"id":32320,"nodeType":"IfStatement","src":"21770:123:108","trueBody":{"id":32308,"nodeType":"Block","src":"21783:52:108","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32298,"name":"d1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32281,"src":"21800:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":32299,"name":"d0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32231,"src":"21805:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21800:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32301,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21799:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":32302,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32291,"src":"21811:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21799:23:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32304,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21798:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":32305,"name":"d0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32231,"src":"21826:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21798:30:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":32194,"id":32307,"nodeType":"Return","src":"21791:37:108"}]}}]},"documentation":{"id":32182,"nodeType":"StructuredDocumentation","src":"20117:847:108","text":" @notice A simple method to calculate prices from deposits or\n withdrawals, excluding fees but including slippage. This is\n helpful as an input into the various \"min\" parameters on calls\n to fight front-running\n @dev This shouldn't be used outside frontends for user estimates.\n @param self Swap struct to read from\n @param amounts an array of token amounts to deposit or withdrawal,\n corresponding to pooledTokens. The amount should be in each\n pooled token's native precision. If a token charges a fee on transfers,\n use the amount that gets transferred after the fee.\n @param deposit whether this is a deposit or a withdrawal\n @return if deposit was true, total amount of lp token that will be minted and if\n deposit was false, total amount of lp token that will be burned"},"id":32322,"implemented":true,"kind":"function","modifiers":[],"name":"calculateTokenAmount","nameLocation":"20976:20:108","nodeType":"FunctionDefinition","parameters":{"id":32191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32185,"mutability":"mutable","name":"self","nameLocation":"21015:4:108","nodeType":"VariableDeclaration","scope":32322,"src":"21002:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":32184,"nodeType":"UserDefinedTypeName","pathNode":{"id":32183,"name":"Swap","nameLocations":["21002:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"21002:4:108"},"referencedDeclaration":30786,"src":"21002:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":32188,"mutability":"mutable","name":"amounts","nameLocation":"21044:7:108","nodeType":"VariableDeclaration","scope":32322,"src":"21025:26:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":32186,"name":"uint256","nodeType":"ElementaryTypeName","src":"21025:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32187,"nodeType":"ArrayTypeName","src":"21025:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":32190,"mutability":"mutable","name":"deposit","nameLocation":"21062:7:108","nodeType":"VariableDeclaration","scope":32322,"src":"21057:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32189,"name":"bool","nodeType":"ElementaryTypeName","src":"21057:4:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20996:77:108"},"returnParameters":{"id":32194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32193,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32322,"src":"21097:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32192,"name":"uint256","nodeType":"ElementaryTypeName","src":"21097:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21096:9:108"},"scope":34244,"src":"20967:930:108","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":32347,"nodeType":"Block","src":"22225:108:108","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32334,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32328,"src":"22239:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":32335,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32326,"src":"22247:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32336,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22252:12:108","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"22247:17:108","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":32337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22265:6:108","memberName":"length","nodeType":"MemberAccess","src":"22247:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22239:32:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e646578206f7574206f662072616e6765","id":32339,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"22273:20:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d","typeString":"literal_string \"index out of range\""},"value":"index out of range"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d","typeString":"literal_string \"index out of range\""}],"id":32333,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"22231:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22231:63:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32341,"nodeType":"ExpressionStatement","src":"22231:63:108"},{"expression":{"baseExpression":{"expression":{"id":32342,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32326,"src":"22307:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32343,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22312:9:108","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":30781,"src":"22307:14:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32345,"indexExpression":{"id":32344,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32328,"src":"22322:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22307:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":32332,"id":32346,"nodeType":"Return","src":"22300:28:108"}]},"documentation":{"id":32323,"nodeType":"StructuredDocumentation","src":"21901:230:108","text":" @notice return accumulated amount of admin fees of the token with given index\n @param self Swap struct to read from\n @param index Index of the pooled token\n @return admin balance in the token's precision"},"id":32348,"implemented":true,"kind":"function","modifiers":[],"name":"getAdminBalance","nameLocation":"22143:15:108","nodeType":"FunctionDefinition","parameters":{"id":32329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32326,"mutability":"mutable","name":"self","nameLocation":"22172:4:108","nodeType":"VariableDeclaration","scope":32348,"src":"22159:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":32325,"nodeType":"UserDefinedTypeName","pathNode":{"id":32324,"name":"Swap","nameLocations":["22159:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"22159:4:108"},"referencedDeclaration":30786,"src":"22159:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":32328,"mutability":"mutable","name":"index","nameLocation":"22186:5:108","nodeType":"VariableDeclaration","scope":32348,"src":"22178:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32327,"name":"uint256","nodeType":"ElementaryTypeName","src":"22178:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22158:34:108"},"returnParameters":{"id":32332,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32331,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32348,"src":"22216:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32330,"name":"uint256","nodeType":"ElementaryTypeName","src":"22216:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22215:9:108"},"scope":34244,"src":"22134:199:108","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":32371,"nodeType":"Block","src":"22640:63:108","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32358,"name":"swapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32351,"src":"22654:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":32359,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32353,"src":"22664:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22654:19:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32361,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22653:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32362,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32353,"src":"22679:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":32363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22691:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"22679:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32365,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22678:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"34","id":32366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22696:1:108","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"22678:19:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32368,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22677:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22653:45:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":32357,"id":32370,"nodeType":"Return","src":"22646:52:108"}]},"documentation":{"id":32349,"nodeType":"StructuredDocumentation","src":"22337:210:108","text":" @notice internal helper function to calculate fee per token multiplier used in\n swap fee calculations\n @param swapFee swap fee for the tokens\n @param numTokens number of tokens pooled"},"id":32372,"implemented":true,"kind":"function","modifiers":[],"name":"_feePerToken","nameLocation":"22559:12:108","nodeType":"FunctionDefinition","parameters":{"id":32354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32351,"mutability":"mutable","name":"swapFee","nameLocation":"22580:7:108","nodeType":"VariableDeclaration","scope":32372,"src":"22572:15:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32350,"name":"uint256","nodeType":"ElementaryTypeName","src":"22572:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":32353,"mutability":"mutable","name":"numTokens","nameLocation":"22597:9:108","nodeType":"VariableDeclaration","scope":32372,"src":"22589:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32352,"name":"uint256","nodeType":"ElementaryTypeName","src":"22589:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22571:36:108"},"returnParameters":{"id":32357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32356,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32372,"src":"22631:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32355,"name":"uint256","nodeType":"ElementaryTypeName","src":"22631:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22630:9:108"},"scope":34244,"src":"22550:153:108","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":32547,"nodeType":"Block","src":"23310:1096:108","statements":[{"expression":{"arguments":[{"id":32392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"23324:14:108","subExpression":{"expression":{"id":32390,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32376,"src":"23325:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32391,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23330:8:108","memberName":"disabled","nodeType":"MemberAccess","referencedDeclaration":30783,"src":"23325:13:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"64697361626c656420706f6f6c","id":32393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23340:15:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de","typeString":"literal_string \"disabled pool\""},"value":"disabled pool"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de","typeString":"literal_string \"disabled pool\""}],"id":32389,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"23316:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23316:40:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32395,"nodeType":"ExpressionStatement","src":"23316:40:108"},{"id":32425,"nodeType":"Block","src":"23362:246:108","statements":[{"assignments":[32398],"declarations":[{"constant":false,"id":32398,"mutability":"mutable","name":"tokenFrom","nameLocation":"23377:9:108","nodeType":"VariableDeclaration","scope":32425,"src":"23370:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":32397,"nodeType":"UserDefinedTypeName","pathNode":{"id":32396,"name":"IERC20","nameLocations":["23370:6:108"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"23370:6:108"},"referencedDeclaration":10812,"src":"23370:6:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"}],"id":32403,"initialValue":{"baseExpression":{"expression":{"id":32399,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32376,"src":"23389:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32400,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23394:12:108","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"23389:17:108","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":32402,"indexExpression":{"id":32401,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32378,"src":"23407:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23389:33:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"23370:52:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32405,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32382,"src":"23438:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"expression":{"id":32408,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"23464:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":32409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23468:6:108","memberName":"sender","nodeType":"MemberAccess","src":"23464:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32406,"name":"tokenFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32398,"src":"23444:9:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":32407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23454:9:108","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10769,"src":"23444:19:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":32410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23444:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23438:37:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"73776170206d6f7265207468616e20796f75206f776e","id":32412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23477:24:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_1b3f2c393a520e73eb7bdb3fda675794175327c242b37d24eefae133e4d40778","typeString":"literal_string \"swap more than you own\""},"value":"swap more than you own"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1b3f2c393a520e73eb7bdb3fda675794175327c242b37d24eefae133e4d40778","typeString":"literal_string \"swap more than you own\""}],"id":32404,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"23430:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23430:72:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32414,"nodeType":"ExpressionStatement","src":"23430:72:108"},{"expression":{"arguments":[{"arguments":[{"id":32420,"name":"tokenFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32398,"src":"23586:9:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":32419,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23578:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32418,"name":"address","nodeType":"ElementaryTypeName","src":"23578:7:108","typeDescriptions":{}}},"id":32421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23578:18:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32422,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32382,"src":"23598:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":32415,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"23547:10:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":32417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23558:19:108","memberName":"handleIncomingAsset","nodeType":"MemberAccess","referencedDeclaration":27772,"src":"23547:30:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":32423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23547:54:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32424,"nodeType":"ExpressionStatement","src":"23547:54:108"}]},{"assignments":[32427],"declarations":[{"constant":false,"id":32427,"mutability":"mutable","name":"dy","nameLocation":"23622:2:108","nodeType":"VariableDeclaration","scope":32547,"src":"23614:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32426,"name":"uint256","nodeType":"ElementaryTypeName","src":"23614:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32428,"nodeType":"VariableDeclarationStatement","src":"23614:10:108"},{"assignments":[32430],"declarations":[{"constant":false,"id":32430,"mutability":"mutable","name":"dyFee","nameLocation":"23638:5:108","nodeType":"VariableDeclaration","scope":32547,"src":"23630:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32429,"name":"uint256","nodeType":"ElementaryTypeName","src":"23630:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32431,"nodeType":"VariableDeclarationStatement","src":"23630:13:108"},{"assignments":[32436],"declarations":[{"constant":false,"id":32436,"mutability":"mutable","name":"balances","nameLocation":"23666:8:108","nodeType":"VariableDeclaration","scope":32547,"src":"23649:25:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":32434,"name":"uint256","nodeType":"ElementaryTypeName","src":"23649:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32435,"nodeType":"ArrayTypeName","src":"23649:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":32439,"initialValue":{"expression":{"id":32437,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32376,"src":"23677:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32438,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23682:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"23677:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"23649:41:108"},{"expression":{"id":32450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":32440,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32427,"src":"23697:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":32441,"name":"dyFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32430,"src":"23701:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32442,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"23696:11:108","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":32444,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32376,"src":"23725:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},{"id":32445,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32378,"src":"23731:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":32446,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32380,"src":"23747:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":32447,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32382,"src":"23761:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":32448,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32436,"src":"23765:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":32443,"name":"_calculateSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31965,"src":"23710:14:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint8,uint8,uint256,uint256[] memory) view returns (uint256,uint256)"}},"id":32449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23710:64:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"23696:78:108","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32451,"nodeType":"ExpressionStatement","src":"23696:78:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32453,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32427,"src":"23788:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":32454,"name":"minDy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32384,"src":"23794:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23788:11:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6479203c206d696e4479","id":32456,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23801:12:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_6e40b987a1bdbab1b9eb0952052a8ed8be99e503ecda84e0b9bc15992dc05932","typeString":"literal_string \"dy < minDy\""},"value":"dy < minDy"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6e40b987a1bdbab1b9eb0952052a8ed8be99e503ecda84e0b9bc15992dc05932","typeString":"literal_string \"dy < minDy\""}],"id":32452,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"23780:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23780:34:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32458,"nodeType":"ExpressionStatement","src":"23780:34:108"},{"assignments":[32460],"declarations":[{"constant":false,"id":32460,"mutability":"mutable","name":"dyAdminFee","nameLocation":"23829:10:108","nodeType":"VariableDeclaration","scope":32547,"src":"23821:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32459,"name":"uint256","nodeType":"ElementaryTypeName","src":"23821:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32474,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32461,"name":"dyFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32430,"src":"23843:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":32462,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32376,"src":"23851:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32463,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23856:8:108","memberName":"adminFee","nodeType":"MemberAccess","referencedDeclaration":30765,"src":"23851:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23843:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32465,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"23842:23:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":32466,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"23874:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":32467,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"23884:15:108","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"23874:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23842:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"expression":{"id":32469,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32376,"src":"23908:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32470,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23913:25:108","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":30775,"src":"23908:30:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32472,"indexExpression":{"id":32471,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32380,"src":"23939:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23908:44:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23842:110:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23821:131:108"},{"expression":{"id":32485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":32475,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32376,"src":"23959:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32478,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23964:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"23959:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32479,"indexExpression":{"id":32477,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32378,"src":"23973:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23959:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":32480,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32436,"src":"23991:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32482,"indexExpression":{"id":32481,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32378,"src":"24000:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23991:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":32483,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32382,"src":"24018:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23991:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23959:61:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32486,"nodeType":"ExpressionStatement","src":"23959:61:108"},{"expression":{"id":32499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":32487,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32376,"src":"24026:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32490,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24031:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"24026:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32491,"indexExpression":{"id":32489,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32380,"src":"24040:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24026:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":32492,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32436,"src":"24056:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32494,"indexExpression":{"id":32493,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32380,"src":"24065:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24056:22:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":32495,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32427,"src":"24081:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24056:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":32497,"name":"dyAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32460,"src":"24086:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24056:40:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24026:70:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32500,"nodeType":"ExpressionStatement","src":"24026:70:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32501,"name":"dyAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32460,"src":"24106:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":32502,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24120:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"24106:15:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32518,"nodeType":"IfStatement","src":"24102:108:108","trueBody":{"id":32517,"nodeType":"Block","src":"24123:87:108","statements":[{"expression":{"id":32515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":32504,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32376,"src":"24131:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32507,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24136:9:108","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":30781,"src":"24131:14:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32508,"indexExpression":{"id":32506,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32380,"src":"24146:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24131:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":32509,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32376,"src":"24162:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32510,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24167:9:108","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":30781,"src":"24162:14:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32512,"indexExpression":{"id":32511,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32380,"src":"24177:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24162:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":32513,"name":"dyAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32460,"src":"24193:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24162:41:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24131:72:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32516,"nodeType":"ExpressionStatement","src":"24131:72:108"}]}},{"expression":{"arguments":[{"arguments":[{"baseExpression":{"expression":{"id":32524,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32376,"src":"24255:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32525,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24260:12:108","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"24255:17:108","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":32527,"indexExpression":{"id":32526,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32380,"src":"24273:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24255:31:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":32523,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24247:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32522,"name":"address","nodeType":"ElementaryTypeName","src":"24247:7:108","typeDescriptions":{}}},"id":32528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24247:40:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":32529,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"24289:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":32530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24293:6:108","memberName":"sender","nodeType":"MemberAccess","src":"24289:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32531,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32427,"src":"24301:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":32519,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"24216:10:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":32521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24227:19:108","memberName":"handleOutgoingAsset","nodeType":"MemberAccess","referencedDeclaration":27809,"src":"24216:30:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":32532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24216:88:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32533,"nodeType":"ExpressionStatement","src":"24216:88:108"},{"eventCall":{"arguments":[{"expression":{"id":32535,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32376,"src":"24326:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32536,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24331:3:108","memberName":"key","nodeType":"MemberAccess","referencedDeclaration":30753,"src":"24326:8:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":32537,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"24336:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":32538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24340:6:108","memberName":"sender","nodeType":"MemberAccess","src":"24336:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32539,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32382,"src":"24348:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":32540,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32427,"src":"24352:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":32541,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32378,"src":"24356:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":32542,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32380,"src":"24372:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":32534,"name":"TokenSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30682,"src":"24316:9:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint256_$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,uint256,uint256,uint128,uint128)"}},"id":32543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24316:69:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32544,"nodeType":"EmitStatement","src":"24311:74:108"},{"expression":{"id":32545,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32427,"src":"24399:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":32388,"id":32546,"nodeType":"Return","src":"24392:9:108"}]},"documentation":{"id":32373,"nodeType":"StructuredDocumentation","src":"22746:408:108","text":" @notice swap two tokens in the pool\n @param self Swap struct to read from and write to\n @param tokenIndexFrom the token the user wants to sell\n @param tokenIndexTo the token the user wants to buy\n @param dx the amount of tokens the user wants to sell\n @param minDy the min amount the user would like to receive, or revert.\n @return amount of token user received on swap"},"id":32548,"implemented":true,"kind":"function","modifiers":[],"name":"swap","nameLocation":"23166:4:108","nodeType":"FunctionDefinition","parameters":{"id":32385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32376,"mutability":"mutable","name":"self","nameLocation":"23189:4:108","nodeType":"VariableDeclaration","scope":32548,"src":"23176:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":32375,"nodeType":"UserDefinedTypeName","pathNode":{"id":32374,"name":"Swap","nameLocations":["23176:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"23176:4:108"},"referencedDeclaration":30786,"src":"23176:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":32378,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"23205:14:108","nodeType":"VariableDeclaration","scope":32548,"src":"23199:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":32377,"name":"uint8","nodeType":"ElementaryTypeName","src":"23199:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":32380,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"23231:12:108","nodeType":"VariableDeclaration","scope":32548,"src":"23225:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":32379,"name":"uint8","nodeType":"ElementaryTypeName","src":"23225:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":32382,"mutability":"mutable","name":"dx","nameLocation":"23257:2:108","nodeType":"VariableDeclaration","scope":32548,"src":"23249:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32381,"name":"uint256","nodeType":"ElementaryTypeName","src":"23249:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":32384,"mutability":"mutable","name":"minDy","nameLocation":"23273:5:108","nodeType":"VariableDeclaration","scope":32548,"src":"23265:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32383,"name":"uint256","nodeType":"ElementaryTypeName","src":"23265:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23170:112:108"},"returnParameters":{"id":32388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32387,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32548,"src":"23301:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32386,"name":"uint256","nodeType":"ElementaryTypeName","src":"23301:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23300:9:108"},"scope":34244,"src":"23157:1249:108","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":32733,"nodeType":"Block","src":"24970:1166:108","statements":[{"expression":{"arguments":[{"id":32568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"24984:14:108","subExpression":{"expression":{"id":32566,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32552,"src":"24985:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32567,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24990:8:108","memberName":"disabled","nodeType":"MemberAccess","referencedDeclaration":30783,"src":"24985:13:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"64697361626c656420706f6f6c","id":32569,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"25000:15:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de","typeString":"literal_string \"disabled pool\""},"value":"disabled pool"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de","typeString":"literal_string \"disabled pool\""}],"id":32565,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"24976:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24976:40:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32571,"nodeType":"ExpressionStatement","src":"24976:40:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32573,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32558,"src":"25030:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"baseExpression":{"expression":{"id":32574,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32552,"src":"25036:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32575,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25041:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"25036:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32577,"indexExpression":{"id":32576,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32556,"src":"25050:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25036:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25030:33:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"3e706f6f6c2062616c616e6365","id":32579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"25065:15:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_4798a1cccb10622ad3eddce5aec990d3b316e4246900ba5afea19b6d9d371948","typeString":"literal_string \">pool balance\""},"value":">pool balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4798a1cccb10622ad3eddce5aec990d3b316e4246900ba5afea19b6d9d371948","typeString":"literal_string \">pool balance\""}],"id":32572,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"25022:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25022:59:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32581,"nodeType":"ExpressionStatement","src":"25022:59:108"},{"assignments":[32583],"declarations":[{"constant":false,"id":32583,"mutability":"mutable","name":"dx","nameLocation":"25096:2:108","nodeType":"VariableDeclaration","scope":32733,"src":"25088:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32582,"name":"uint256","nodeType":"ElementaryTypeName","src":"25088:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32584,"nodeType":"VariableDeclarationStatement","src":"25088:10:108"},{"assignments":[32586],"declarations":[{"constant":false,"id":32586,"mutability":"mutable","name":"dxFee","nameLocation":"25112:5:108","nodeType":"VariableDeclaration","scope":32733,"src":"25104:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32585,"name":"uint256","nodeType":"ElementaryTypeName","src":"25104:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32587,"nodeType":"VariableDeclarationStatement","src":"25104:13:108"},{"assignments":[32592],"declarations":[{"constant":false,"id":32592,"mutability":"mutable","name":"balances","nameLocation":"25140:8:108","nodeType":"VariableDeclaration","scope":32733,"src":"25123:25:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":32590,"name":"uint256","nodeType":"ElementaryTypeName","src":"25123:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32591,"nodeType":"ArrayTypeName","src":"25123:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":32595,"initialValue":{"expression":{"id":32593,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32552,"src":"25151:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32594,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25156:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"25151:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"25123:41:108"},{"expression":{"id":32606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":32596,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32583,"src":"25171:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":32597,"name":"dxFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32586,"src":"25175:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32598,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"25170:11:108","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":32600,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32552,"src":"25202:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},{"id":32601,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32554,"src":"25208:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":32602,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32556,"src":"25224:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":32603,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32558,"src":"25238:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":32604,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32592,"src":"25242:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":32599,"name":"_calculateSwapInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32094,"src":"25184:17:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint8,uint8,uint256,uint256[] memory) view returns (uint256,uint256)"}},"id":32605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25184:67:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"25170:81:108","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32607,"nodeType":"ExpressionStatement","src":"25170:81:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32609,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32583,"src":"25265:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":32610,"name":"maxDx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32560,"src":"25271:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25265:11:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6478203e206d61784478","id":32612,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"25278:12:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_4406c1e208c572ab95085aa92d385cddaa474035df8163bb5a0a2c403800484d","typeString":"literal_string \"dx > maxDx\""},"value":"dx > maxDx"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4406c1e208c572ab95085aa92d385cddaa474035df8163bb5a0a2c403800484d","typeString":"literal_string \"dx > maxDx\""}],"id":32608,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"25257:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25257:34:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32614,"nodeType":"ExpressionStatement","src":"25257:34:108"},{"assignments":[32616],"declarations":[{"constant":false,"id":32616,"mutability":"mutable","name":"dxAdminFee","nameLocation":"25306:10:108","nodeType":"VariableDeclaration","scope":32733,"src":"25298:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32615,"name":"uint256","nodeType":"ElementaryTypeName","src":"25298:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32630,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32617,"name":"dxFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32586,"src":"25320:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":32618,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32552,"src":"25328:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32619,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25333:8:108","memberName":"adminFee","nodeType":"MemberAccess","referencedDeclaration":30765,"src":"25328:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25320:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32621,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"25319:23:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":32622,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"25351:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":32623,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"25361:15:108","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"25351:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25319:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"expression":{"id":32625,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32552,"src":"25385:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32626,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25390:25:108","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":30775,"src":"25385:30:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32628,"indexExpression":{"id":32627,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32554,"src":"25416:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25385:46:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25319:112:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25298:133:108"},{"expression":{"id":32643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":32631,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32552,"src":"25438:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32634,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25443:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"25438:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32635,"indexExpression":{"id":32633,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32554,"src":"25452:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"25438:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":32636,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32592,"src":"25470:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32638,"indexExpression":{"id":32637,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32554,"src":"25479:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25470:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":32639,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32583,"src":"25497:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25470:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":32641,"name":"dxAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32616,"src":"25502:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25470:42:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25438:74:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32644,"nodeType":"ExpressionStatement","src":"25438:74:108"},{"expression":{"id":32655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":32645,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32552,"src":"25518:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32648,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25523:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"25518:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32649,"indexExpression":{"id":32647,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32556,"src":"25532:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"25518:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":32650,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32592,"src":"25548:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32652,"indexExpression":{"id":32651,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32556,"src":"25557:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25548:22:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":32653,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32558,"src":"25573:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25548:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25518:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32656,"nodeType":"ExpressionStatement","src":"25518:57:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32657,"name":"dxAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32616,"src":"25585:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":32658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25599:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"25585:15:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32674,"nodeType":"IfStatement","src":"25581:112:108","trueBody":{"id":32673,"nodeType":"Block","src":"25602:91:108","statements":[{"expression":{"id":32671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":32660,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32552,"src":"25610:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32663,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25615:9:108","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":30781,"src":"25610:14:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32664,"indexExpression":{"id":32662,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32554,"src":"25625:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"25610:30:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":32665,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32552,"src":"25643:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32666,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25648:9:108","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":30781,"src":"25643:14:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32668,"indexExpression":{"id":32667,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32554,"src":"25658:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25643:30:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":32669,"name":"dxAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32616,"src":"25676:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25643:43:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25610:76:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32672,"nodeType":"ExpressionStatement","src":"25610:76:108"}]}},{"id":32704,"nodeType":"Block","src":"25699:241:108","statements":[{"assignments":[32677],"declarations":[{"constant":false,"id":32677,"mutability":"mutable","name":"tokenFrom","nameLocation":"25714:9:108","nodeType":"VariableDeclaration","scope":32704,"src":"25707:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":32676,"nodeType":"UserDefinedTypeName","pathNode":{"id":32675,"name":"IERC20","nameLocations":["25707:6:108"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"25707:6:108"},"referencedDeclaration":10812,"src":"25707:6:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"}],"id":32682,"initialValue":{"baseExpression":{"expression":{"id":32678,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32552,"src":"25726:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32679,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25731:12:108","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"25726:17:108","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":32681,"indexExpression":{"id":32680,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32554,"src":"25744:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25726:33:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"25707:52:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32684,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32583,"src":"25775:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"expression":{"id":32687,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"25801:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":32688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25805:6:108","memberName":"sender","nodeType":"MemberAccess","src":"25801:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32685,"name":"tokenFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32677,"src":"25781:9:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":32686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25791:9:108","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10769,"src":"25781:19:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":32689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25781:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25775:37:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d6f7265207468616e20796f75206f776e","id":32691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"25814:19:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_49b5230bcef6bb857dbf12a192f051cfc648d5c34767bdb2c1c4044373c29ca8","typeString":"literal_string \"more than you own\""},"value":"more than you own"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_49b5230bcef6bb857dbf12a192f051cfc648d5c34767bdb2c1c4044373c29ca8","typeString":"literal_string \"more than you own\""}],"id":32683,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"25767:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25767:67:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32693,"nodeType":"ExpressionStatement","src":"25767:67:108"},{"expression":{"arguments":[{"arguments":[{"id":32699,"name":"tokenFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32677,"src":"25918:9:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":32698,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25910:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32697,"name":"address","nodeType":"ElementaryTypeName","src":"25910:7:108","typeDescriptions":{}}},"id":32700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25910:18:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32701,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32583,"src":"25930:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":32694,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"25879:10:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":32696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25890:19:108","memberName":"handleIncomingAsset","nodeType":"MemberAccess","referencedDeclaration":27772,"src":"25879:30:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":32702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25879:54:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32703,"nodeType":"ExpressionStatement","src":"25879:54:108"}]},{"expression":{"arguments":[{"arguments":[{"baseExpression":{"expression":{"id":32710,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32552,"src":"25985:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32711,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25990:12:108","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"25985:17:108","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":32713,"indexExpression":{"id":32712,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32556,"src":"26003:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25985:31:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":32709,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25977:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32708,"name":"address","nodeType":"ElementaryTypeName","src":"25977:7:108","typeDescriptions":{}}},"id":32714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25977:40:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":32715,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"26019:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":32716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26023:6:108","memberName":"sender","nodeType":"MemberAccess","src":"26019:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32717,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32558,"src":"26031:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":32705,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"25946:10:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":32707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25957:19:108","memberName":"handleOutgoingAsset","nodeType":"MemberAccess","referencedDeclaration":27809,"src":"25946:30:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":32718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25946:88:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32719,"nodeType":"ExpressionStatement","src":"25946:88:108"},{"eventCall":{"arguments":[{"expression":{"id":32721,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32552,"src":"26056:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32722,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26061:3:108","memberName":"key","nodeType":"MemberAccess","referencedDeclaration":30753,"src":"26056:8:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":32723,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"26066:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":32724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26070:6:108","memberName":"sender","nodeType":"MemberAccess","src":"26066:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32725,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32583,"src":"26078:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":32726,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32558,"src":"26082:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":32727,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32554,"src":"26086:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":32728,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32556,"src":"26102:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":32720,"name":"TokenSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30682,"src":"26046:9:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint256_$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,uint256,uint256,uint128,uint128)"}},"id":32729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26046:69:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32730,"nodeType":"EmitStatement","src":"26041:74:108"},{"expression":{"id":32731,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32583,"src":"26129:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":32564,"id":32732,"nodeType":"Return","src":"26122:9:108"}]},"documentation":{"id":32549,"nodeType":"StructuredDocumentation","src":"24410:401:108","text":" @notice swap two tokens in the pool\n @param self Swap struct to read from and write to\n @param tokenIndexFrom the token the user wants to sell\n @param tokenIndexTo the token the user wants to buy\n @param dy the amount of tokens the user wants to buy\n @param maxDx the max amount the user would like to send.\n @return amount of token user have to transfer on swap"},"id":32734,"implemented":true,"kind":"function","modifiers":[],"name":"swapOut","nameLocation":"24823:7:108","nodeType":"FunctionDefinition","parameters":{"id":32561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32552,"mutability":"mutable","name":"self","nameLocation":"24849:4:108","nodeType":"VariableDeclaration","scope":32734,"src":"24836:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":32551,"nodeType":"UserDefinedTypeName","pathNode":{"id":32550,"name":"Swap","nameLocations":["24836:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"24836:4:108"},"referencedDeclaration":30786,"src":"24836:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":32554,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"24865:14:108","nodeType":"VariableDeclaration","scope":32734,"src":"24859:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":32553,"name":"uint8","nodeType":"ElementaryTypeName","src":"24859:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":32556,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"24891:12:108","nodeType":"VariableDeclaration","scope":32734,"src":"24885:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":32555,"name":"uint8","nodeType":"ElementaryTypeName","src":"24885:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":32558,"mutability":"mutable","name":"dy","nameLocation":"24917:2:108","nodeType":"VariableDeclaration","scope":32734,"src":"24909:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32557,"name":"uint256","nodeType":"ElementaryTypeName","src":"24909:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":32560,"mutability":"mutable","name":"maxDx","nameLocation":"24933:5:108","nodeType":"VariableDeclaration","scope":32734,"src":"24925:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32559,"name":"uint256","nodeType":"ElementaryTypeName","src":"24925:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24830:112:108"},"returnParameters":{"id":32564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32563,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32734,"src":"24961:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32562,"name":"uint256","nodeType":"ElementaryTypeName","src":"24961:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24960:9:108"},"scope":34244,"src":"24814:1322:108","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":32874,"nodeType":"Block","src":"26723:827:108","statements":[{"expression":{"arguments":[{"id":32754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"26737:14:108","subExpression":{"expression":{"id":32752,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32738,"src":"26738:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32753,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26743:8:108","memberName":"disabled","nodeType":"MemberAccess","referencedDeclaration":30783,"src":"26738:13:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"64697361626c656420706f6f6c","id":32755,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"26753:15:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de","typeString":"literal_string \"disabled pool\""},"value":"disabled pool"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de","typeString":"literal_string \"disabled pool\""}],"id":32751,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"26729:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26729:40:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32757,"nodeType":"ExpressionStatement","src":"26729:40:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32759,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32744,"src":"26783:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"baseExpression":{"expression":{"id":32760,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32738,"src":"26789:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32761,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26794:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"26789:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32763,"indexExpression":{"id":32762,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32740,"src":"26803:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26789:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26783:35:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d6f7265207468616e20706f6f6c2062616c616e6365","id":32765,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"26820:24:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_e8a8072019b830892cd4deb2ef47d584565d80622116f9044abf32bb22a18a4f","typeString":"literal_string \"more than pool balance\""},"value":"more than pool balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e8a8072019b830892cd4deb2ef47d584565d80622116f9044abf32bb22a18a4f","typeString":"literal_string \"more than pool balance\""}],"id":32758,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"26775:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26775:70:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32767,"nodeType":"ExpressionStatement","src":"26775:70:108"},{"assignments":[32769],"declarations":[{"constant":false,"id":32769,"mutability":"mutable","name":"dy","nameLocation":"26860:2:108","nodeType":"VariableDeclaration","scope":32874,"src":"26852:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32768,"name":"uint256","nodeType":"ElementaryTypeName","src":"26852:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32770,"nodeType":"VariableDeclarationStatement","src":"26852:10:108"},{"assignments":[32772],"declarations":[{"constant":false,"id":32772,"mutability":"mutable","name":"dyFee","nameLocation":"26876:5:108","nodeType":"VariableDeclaration","scope":32874,"src":"26868:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32771,"name":"uint256","nodeType":"ElementaryTypeName","src":"26868:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32773,"nodeType":"VariableDeclarationStatement","src":"26868:13:108"},{"assignments":[32778],"declarations":[{"constant":false,"id":32778,"mutability":"mutable","name":"balances","nameLocation":"26904:8:108","nodeType":"VariableDeclaration","scope":32874,"src":"26887:25:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":32776,"name":"uint256","nodeType":"ElementaryTypeName","src":"26887:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32777,"nodeType":"ArrayTypeName","src":"26887:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":32781,"initialValue":{"expression":{"id":32779,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32738,"src":"26915:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32780,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26920:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"26915:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"26887:41:108"},{"expression":{"id":32792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":32782,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32769,"src":"26935:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":32783,"name":"dyFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32772,"src":"26939:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32784,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"26934:11:108","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":32786,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32738,"src":"26963:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},{"id":32787,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32740,"src":"26969:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":32788,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32742,"src":"26985:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":32789,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32744,"src":"26999:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":32790,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32778,"src":"27003:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":32785,"name":"_calculateSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31965,"src":"26948:14:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint8,uint8,uint256,uint256[] memory) view returns (uint256,uint256)"}},"id":32791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26948:64:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"26934:78:108","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32793,"nodeType":"ExpressionStatement","src":"26934:78:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32795,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32769,"src":"27026:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":32796,"name":"minDy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32746,"src":"27032:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27026:11:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6479203c206d696e4479","id":32798,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"27039:12:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_6e40b987a1bdbab1b9eb0952052a8ed8be99e503ecda84e0b9bc15992dc05932","typeString":"literal_string \"dy < minDy\""},"value":"dy < minDy"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6e40b987a1bdbab1b9eb0952052a8ed8be99e503ecda84e0b9bc15992dc05932","typeString":"literal_string \"dy < minDy\""}],"id":32794,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"27018:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27018:34:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32800,"nodeType":"ExpressionStatement","src":"27018:34:108"},{"assignments":[32802],"declarations":[{"constant":false,"id":32802,"mutability":"mutable","name":"dyAdminFee","nameLocation":"27067:10:108","nodeType":"VariableDeclaration","scope":32874,"src":"27059:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32801,"name":"uint256","nodeType":"ElementaryTypeName","src":"27059:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32816,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32803,"name":"dyFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32772,"src":"27081:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":32804,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32738,"src":"27089:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32805,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27094:8:108","memberName":"adminFee","nodeType":"MemberAccess","referencedDeclaration":30765,"src":"27089:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27081:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32807,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27080:23:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":32808,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"27112:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":32809,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27122:15:108","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"27112:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27080:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"expression":{"id":32811,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32738,"src":"27146:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32812,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27151:25:108","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":30775,"src":"27146:30:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32814,"indexExpression":{"id":32813,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32742,"src":"27177:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27146:44:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27080:110:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"27059:131:108"},{"expression":{"id":32827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":32817,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32738,"src":"27197:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32820,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27202:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"27197:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32821,"indexExpression":{"id":32819,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32740,"src":"27211:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27197:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":32822,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32778,"src":"27229:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32824,"indexExpression":{"id":32823,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32740,"src":"27238:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27229:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":32825,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32744,"src":"27256:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27229:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27197:61:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32828,"nodeType":"ExpressionStatement","src":"27197:61:108"},{"expression":{"id":32841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":32829,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32738,"src":"27264:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32832,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27269:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"27264:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32833,"indexExpression":{"id":32831,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32742,"src":"27278:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27264:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":32834,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32778,"src":"27294:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32836,"indexExpression":{"id":32835,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32742,"src":"27303:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27294:22:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":32837,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32769,"src":"27319:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27294:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":32839,"name":"dyAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32802,"src":"27324:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27294:40:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27264:70:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32842,"nodeType":"ExpressionStatement","src":"27264:70:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32843,"name":"dyAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32802,"src":"27345:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":32844,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27359:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"27345:15:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32860,"nodeType":"IfStatement","src":"27341:108:108","trueBody":{"id":32859,"nodeType":"Block","src":"27362:87:108","statements":[{"expression":{"id":32857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":32846,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32738,"src":"27370:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32849,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27375:9:108","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":30781,"src":"27370:14:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32850,"indexExpression":{"id":32848,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32742,"src":"27385:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27370:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":32851,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32738,"src":"27401:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32852,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27406:9:108","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":30781,"src":"27401:14:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32854,"indexExpression":{"id":32853,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32742,"src":"27416:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27401:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":32855,"name":"dyAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32802,"src":"27432:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27401:41:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27370:72:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32858,"nodeType":"ExpressionStatement","src":"27370:72:108"}]}},{"eventCall":{"arguments":[{"expression":{"id":32862,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32738,"src":"27470:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32863,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27475:3:108","memberName":"key","nodeType":"MemberAccess","referencedDeclaration":30753,"src":"27470:8:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":32864,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"27480:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":32865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27484:6:108","memberName":"sender","nodeType":"MemberAccess","src":"27480:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32866,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32744,"src":"27492:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":32867,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32769,"src":"27496:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":32868,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32740,"src":"27500:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":32869,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32742,"src":"27516:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":32861,"name":"TokenSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30682,"src":"27460:9:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint256_$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,uint256,uint256,uint128,uint128)"}},"id":32870,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27460:69:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32871,"nodeType":"EmitStatement","src":"27455:74:108"},{"expression":{"id":32872,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32769,"src":"27543:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":32750,"id":32873,"nodeType":"Return","src":"27536:9:108"}]},"documentation":{"id":32735,"nodeType":"StructuredDocumentation","src":"26140:419:108","text":" @notice swap two tokens in the pool internally\n @param self Swap struct to read from and write to\n @param tokenIndexFrom the token the user wants to sell\n @param tokenIndexTo the token the user wants to buy\n @param dx the amount of tokens the user wants to sell\n @param minDy the min amount the user would like to receive, or revert.\n @return amount of token user received on swap"},"id":32875,"implemented":true,"kind":"function","modifiers":[],"name":"swapInternal","nameLocation":"26571:12:108","nodeType":"FunctionDefinition","parameters":{"id":32747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32738,"mutability":"mutable","name":"self","nameLocation":"26602:4:108","nodeType":"VariableDeclaration","scope":32875,"src":"26589:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":32737,"nodeType":"UserDefinedTypeName","pathNode":{"id":32736,"name":"Swap","nameLocations":["26589:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"26589:4:108"},"referencedDeclaration":30786,"src":"26589:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":32740,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"26618:14:108","nodeType":"VariableDeclaration","scope":32875,"src":"26612:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":32739,"name":"uint8","nodeType":"ElementaryTypeName","src":"26612:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":32742,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"26644:12:108","nodeType":"VariableDeclaration","scope":32875,"src":"26638:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":32741,"name":"uint8","nodeType":"ElementaryTypeName","src":"26638:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":32744,"mutability":"mutable","name":"dx","nameLocation":"26670:2:108","nodeType":"VariableDeclaration","scope":32875,"src":"26662:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32743,"name":"uint256","nodeType":"ElementaryTypeName","src":"26662:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":32746,"mutability":"mutable","name":"minDy","nameLocation":"26686:5:108","nodeType":"VariableDeclaration","scope":32875,"src":"26678:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32745,"name":"uint256","nodeType":"ElementaryTypeName","src":"26678:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26583:112:108"},"returnParameters":{"id":32750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32749,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32875,"src":"26714:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32748,"name":"uint256","nodeType":"ElementaryTypeName","src":"26714:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26713:9:108"},"scope":34244,"src":"26562:988:108","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":33015,"nodeType":"Block","src":"27795:834:108","statements":[{"expression":{"arguments":[{"id":32895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"27809:14:108","subExpression":{"expression":{"id":32893,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32879,"src":"27810:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32894,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27815:8:108","memberName":"disabled","nodeType":"MemberAccess","referencedDeclaration":30783,"src":"27810:13:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"64697361626c656420706f6f6c","id":32896,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"27825:15:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de","typeString":"literal_string \"disabled pool\""},"value":"disabled pool"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de","typeString":"literal_string \"disabled pool\""}],"id":32892,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"27801:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27801:40:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32898,"nodeType":"ExpressionStatement","src":"27801:40:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32900,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32885,"src":"27855:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"baseExpression":{"expression":{"id":32901,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32879,"src":"27861:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32902,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27866:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"27861:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32904,"indexExpression":{"id":32903,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32883,"src":"27875:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27861:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27855:33:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d6f7265207468616e20706f6f6c2062616c616e6365","id":32906,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"27890:24:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_e8a8072019b830892cd4deb2ef47d584565d80622116f9044abf32bb22a18a4f","typeString":"literal_string \"more than pool balance\""},"value":"more than pool balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e8a8072019b830892cd4deb2ef47d584565d80622116f9044abf32bb22a18a4f","typeString":"literal_string \"more than pool balance\""}],"id":32899,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"27847:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27847:68:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32908,"nodeType":"ExpressionStatement","src":"27847:68:108"},{"assignments":[32910],"declarations":[{"constant":false,"id":32910,"mutability":"mutable","name":"dx","nameLocation":"27930:2:108","nodeType":"VariableDeclaration","scope":33015,"src":"27922:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32909,"name":"uint256","nodeType":"ElementaryTypeName","src":"27922:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32911,"nodeType":"VariableDeclarationStatement","src":"27922:10:108"},{"assignments":[32913],"declarations":[{"constant":false,"id":32913,"mutability":"mutable","name":"dxFee","nameLocation":"27946:5:108","nodeType":"VariableDeclaration","scope":33015,"src":"27938:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32912,"name":"uint256","nodeType":"ElementaryTypeName","src":"27938:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32914,"nodeType":"VariableDeclarationStatement","src":"27938:13:108"},{"assignments":[32919],"declarations":[{"constant":false,"id":32919,"mutability":"mutable","name":"balances","nameLocation":"27974:8:108","nodeType":"VariableDeclaration","scope":33015,"src":"27957:25:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":32917,"name":"uint256","nodeType":"ElementaryTypeName","src":"27957:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32918,"nodeType":"ArrayTypeName","src":"27957:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":32922,"initialValue":{"expression":{"id":32920,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32879,"src":"27985:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32921,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27990:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"27985:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"27957:41:108"},{"expression":{"id":32933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":32923,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32910,"src":"28005:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":32924,"name":"dxFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32913,"src":"28009:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32925,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"28004:11:108","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":32927,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32879,"src":"28036:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},{"id":32928,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32881,"src":"28042:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":32929,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32883,"src":"28058:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":32930,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32885,"src":"28072:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":32931,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32919,"src":"28076:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":32926,"name":"_calculateSwapInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32094,"src":"28018:17:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint8,uint8,uint256,uint256[] memory) view returns (uint256,uint256)"}},"id":32932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28018:67:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"28004:81:108","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32934,"nodeType":"ExpressionStatement","src":"28004:81:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32936,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32910,"src":"28099:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":32937,"name":"maxDx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32887,"src":"28105:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28099:11:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6478203e206d61784478","id":32939,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"28112:12:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_4406c1e208c572ab95085aa92d385cddaa474035df8163bb5a0a2c403800484d","typeString":"literal_string \"dx > maxDx\""},"value":"dx > maxDx"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4406c1e208c572ab95085aa92d385cddaa474035df8163bb5a0a2c403800484d","typeString":"literal_string \"dx > maxDx\""}],"id":32935,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"28091:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28091:34:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32941,"nodeType":"ExpressionStatement","src":"28091:34:108"},{"assignments":[32943],"declarations":[{"constant":false,"id":32943,"mutability":"mutable","name":"dxAdminFee","nameLocation":"28140:10:108","nodeType":"VariableDeclaration","scope":33015,"src":"28132:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32942,"name":"uint256","nodeType":"ElementaryTypeName","src":"28132:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32957,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32944,"name":"dxFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32913,"src":"28154:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":32945,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32879,"src":"28162:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32946,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28167:8:108","memberName":"adminFee","nodeType":"MemberAccess","referencedDeclaration":30765,"src":"28162:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28154:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32948,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28153:23:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":32949,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"28185:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":32950,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28195:15:108","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"28185:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28153:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"expression":{"id":32952,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32879,"src":"28219:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32953,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28224:25:108","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":30775,"src":"28219:30:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32955,"indexExpression":{"id":32954,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32881,"src":"28250:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28219:46:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28153:112:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28132:133:108"},{"expression":{"id":32970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":32958,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32879,"src":"28272:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32961,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28277:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"28272:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32962,"indexExpression":{"id":32960,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32881,"src":"28286:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28272:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":32963,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32919,"src":"28304:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32965,"indexExpression":{"id":32964,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32881,"src":"28313:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28304:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":32966,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32910,"src":"28331:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28304:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":32968,"name":"dxAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32943,"src":"28336:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28304:42:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28272:74:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32971,"nodeType":"ExpressionStatement","src":"28272:74:108"},{"expression":{"id":32982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":32972,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32879,"src":"28352:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32975,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28357:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"28352:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32976,"indexExpression":{"id":32974,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32883,"src":"28366:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28352:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":32977,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32919,"src":"28382:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":32979,"indexExpression":{"id":32978,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32883,"src":"28391:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28382:22:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":32980,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32885,"src":"28407:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28382:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28352:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32983,"nodeType":"ExpressionStatement","src":"28352:57:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32984,"name":"dxAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32943,"src":"28420:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":32985,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28434:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"28420:15:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33001,"nodeType":"IfStatement","src":"28416:112:108","trueBody":{"id":33000,"nodeType":"Block","src":"28437:91:108","statements":[{"expression":{"id":32998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":32987,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32879,"src":"28445:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32990,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28450:9:108","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":30781,"src":"28445:14:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32991,"indexExpression":{"id":32989,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32881,"src":"28460:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28445:30:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":32992,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32879,"src":"28478:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":32993,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28483:9:108","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":30781,"src":"28478:14:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":32995,"indexExpression":{"id":32994,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32881,"src":"28493:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28478:30:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":32996,"name":"dxAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32943,"src":"28511:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28478:43:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28445:76:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32999,"nodeType":"ExpressionStatement","src":"28445:76:108"}]}},{"eventCall":{"arguments":[{"expression":{"id":33003,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32879,"src":"28549:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33004,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28554:3:108","memberName":"key","nodeType":"MemberAccess","referencedDeclaration":30753,"src":"28549:8:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":33005,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"28559:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":33006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28563:6:108","memberName":"sender","nodeType":"MemberAccess","src":"28559:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":33007,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32910,"src":"28571:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":33008,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32885,"src":"28575:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":33009,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32881,"src":"28579:14:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":33010,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32883,"src":"28595:12:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":33002,"name":"TokenSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30682,"src":"28539:9:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint256_$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,uint256,uint256,uint128,uint128)"}},"id":33011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28539:69:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33012,"nodeType":"EmitStatement","src":"28534:74:108"},{"expression":{"id":33013,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32910,"src":"28622:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":32891,"id":33014,"nodeType":"Return","src":"28615:9:108"}]},"documentation":{"id":32876,"nodeType":"StructuredDocumentation","src":"27554:74:108","text":" @notice Should get exact amount out of AMM for asset put in"},"id":33016,"implemented":true,"kind":"function","modifiers":[],"name":"swapInternalOut","nameLocation":"27640:15:108","nodeType":"FunctionDefinition","parameters":{"id":32888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32879,"mutability":"mutable","name":"self","nameLocation":"27674:4:108","nodeType":"VariableDeclaration","scope":33016,"src":"27661:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":32878,"nodeType":"UserDefinedTypeName","pathNode":{"id":32877,"name":"Swap","nameLocations":["27661:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"27661:4:108"},"referencedDeclaration":30786,"src":"27661:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":32881,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"27690:14:108","nodeType":"VariableDeclaration","scope":33016,"src":"27684:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":32880,"name":"uint8","nodeType":"ElementaryTypeName","src":"27684:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":32883,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"27716:12:108","nodeType":"VariableDeclaration","scope":33016,"src":"27710:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":32882,"name":"uint8","nodeType":"ElementaryTypeName","src":"27710:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":32885,"mutability":"mutable","name":"dy","nameLocation":"27742:2:108","nodeType":"VariableDeclaration","scope":33016,"src":"27734:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32884,"name":"uint256","nodeType":"ElementaryTypeName","src":"27734:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":32887,"mutability":"mutable","name":"maxDx","nameLocation":"27758:5:108","nodeType":"VariableDeclaration","scope":33016,"src":"27750:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32886,"name":"uint256","nodeType":"ElementaryTypeName","src":"27750:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27655:112:108"},"returnParameters":{"id":32891,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32890,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33016,"src":"27786:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32889,"name":"uint256","nodeType":"ElementaryTypeName","src":"27786:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27785:9:108"},"scope":34244,"src":"27631:998:108","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":33412,"nodeType":"Block","src":"29245:2505:108","statements":[{"expression":{"arguments":[{"id":33033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"29259:14:108","subExpression":{"expression":{"id":33031,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33020,"src":"29260:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33032,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29265:8:108","memberName":"disabled","nodeType":"MemberAccess","referencedDeclaration":30783,"src":"29260:13:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"64697361626c656420706f6f6c","id":33034,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"29275:15:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de","typeString":"literal_string \"disabled pool\""},"value":"disabled pool"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de","typeString":"literal_string \"disabled pool\""}],"id":33030,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"29251:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":33035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29251:40:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33036,"nodeType":"ExpressionStatement","src":"29251:40:108"},{"assignments":[33038],"declarations":[{"constant":false,"id":33038,"mutability":"mutable","name":"numTokens","nameLocation":"29306:9:108","nodeType":"VariableDeclaration","scope":33412,"src":"29298:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33037,"name":"uint256","nodeType":"ElementaryTypeName","src":"29298:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33042,"initialValue":{"expression":{"expression":{"id":33039,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33020,"src":"29318:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33040,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29323:12:108","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"29318:17:108","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":33041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29336:6:108","memberName":"length","nodeType":"MemberAccess","src":"29318:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29298:44:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":33044,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33023,"src":"29356:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29364:6:108","memberName":"length","nodeType":"MemberAccess","src":"29356:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":33046,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33038,"src":"29374:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29356:27:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d69736d6174636820706f6f6c656420746f6b656e73","id":33048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"29385:24:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_407c82c74f364e90cf3f20876b92912fd15eeb935ea71a01446be03014fed388","typeString":"literal_string \"mismatch pooled tokens\""},"value":"mismatch pooled tokens"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_407c82c74f364e90cf3f20876b92912fd15eeb935ea71a01446be03014fed388","typeString":"literal_string \"mismatch pooled tokens\""}],"id":33043,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"29348:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":33049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29348:62:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33050,"nodeType":"ExpressionStatement","src":"29348:62:108"},{"assignments":[33053],"declarations":[{"constant":false,"id":33053,"mutability":"mutable","name":"v","nameLocation":"29465:1:108","nodeType":"VariableDeclaration","scope":33412,"src":"29438:28:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo"},"typeName":{"id":33052,"nodeType":"UserDefinedTypeName","pathNode":{"id":33051,"name":"ManageLiquidityInfo","nameLocations":["29438:19:108"],"nodeType":"IdentifierPath","referencedDeclaration":30817,"src":"29438:19:108"},"referencedDeclaration":30817,"src":"29438:19:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_storage_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo"}},"visibility":"internal"}],"id":33069,"initialValue":{"arguments":[{"hexValue":"30","id":33055,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29496:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":33056,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29505:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":33057,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29514:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"id":33059,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33020,"src":"29536:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}],"id":33058,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30831,"src":"29523:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (uint256)"}},"id":33060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29523:18:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":33061,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33020,"src":"29549:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33062,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29554:7:108","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":30768,"src":"29549:12:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},{"hexValue":"30","id":33063,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29569:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":33064,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33020,"src":"29578:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33065,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29583:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"29578:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},{"expression":{"id":33066,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33020,"src":"29599:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33067,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29604:25:108","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":30775,"src":"29599:30:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"},{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}],"id":33054,"name":"ManageLiquidityInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30817,"src":"29469:19:108","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ManageLiquidityInfo_$30817_storage_ptr_$","typeString":"type(struct SwapUtils.ManageLiquidityInfo storage pointer)"}},"id":33068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29469:166:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"nodeType":"VariableDeclarationStatement","src":"29438:197:108"},{"expression":{"id":33077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33070,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"29641:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33072,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"29643:11:108","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":30810,"src":"29641:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":33073,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"29657:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33074,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29659:7:108","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":30808,"src":"29657:9:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":33075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29667:11:108","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":8543,"src":"29657:21:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":33076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29657:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29641:39:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33078,"nodeType":"ExpressionStatement","src":"29641:39:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":33079,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"29690:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33080,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29692:11:108","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":30810,"src":"29690:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":33081,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29707:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29690:18:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33099,"nodeType":"IfStatement","src":"29686:94:108","trueBody":{"id":33098,"nodeType":"Block","src":"29710:70:108","statements":[{"expression":{"id":33096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33083,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"29718:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33085,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"29720:2:108","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":30799,"src":"29718:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"expression":{"id":33088,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"29734:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33089,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29736:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30813,"src":"29734:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":33090,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"29746:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33091,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29748:11:108","memberName":"multipliers","nodeType":"MemberAccess","referencedDeclaration":30816,"src":"29746:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":33087,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[31527,31545],"referencedDeclaration":31527,"src":"29730:3:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":33092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29730:30:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":33093,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"29762:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33094,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29764:8:108","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":30805,"src":"29762:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33086,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31463,"src":"29725:4:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":33095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29725:48:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29718:55:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33097,"nodeType":"ExpressionStatement","src":"29718:55:108"}]}},{"assignments":[33104],"declarations":[{"constant":false,"id":33104,"mutability":"mutable","name":"newBalances","nameLocation":"29803:11:108","nodeType":"VariableDeclaration","scope":33412,"src":"29786:28:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33102,"name":"uint256","nodeType":"ElementaryTypeName","src":"29786:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33103,"nodeType":"ArrayTypeName","src":"29786:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":33110,"initialValue":{"arguments":[{"id":33108,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33038,"src":"29831:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33107,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"29817:13:108","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":33105,"name":"uint256","nodeType":"ElementaryTypeName","src":"29821:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33106,"nodeType":"ArrayTypeName","src":"29821:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":33109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29817:24:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"29786:55:108"},{"body":{"id":33175,"nodeType":"Block","src":"29881:436:108","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":33127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":33118,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"29897:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33119,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29899:11:108","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":30810,"src":"29897:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":33120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29914:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29897:18:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":33122,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33023,"src":"29919:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33124,"indexExpression":{"id":33123,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33112,"src":"29927:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29919:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":33125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29933:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29919:15:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"29897:37:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21737570706c7920616c6c20746f6b656e73","id":33128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"29936:20:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_3dce4b63d19b87f59f00e1c83d4e9014c5f915f724b6e06015f43e433d5a13b8","typeString":"literal_string \"!supply all tokens\""},"value":"!supply all tokens"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3dce4b63d19b87f59f00e1c83d4e9014c5f915f724b6e06015f43e433d5a13b8","typeString":"literal_string \"!supply all tokens\""}],"id":33117,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"29889:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":33129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29889:68:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33130,"nodeType":"ExpressionStatement","src":"29889:68:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":33131,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33023,"src":"30041:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33133,"indexExpression":{"id":33132,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33112,"src":"30049:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30041:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":33134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30055:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30041:15:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33157,"nodeType":"IfStatement","src":"30037:182:108","trueBody":{"id":33156,"nodeType":"Block","src":"30058:161:108","statements":[{"assignments":[33138],"declarations":[{"constant":false,"id":33138,"mutability":"mutable","name":"token","nameLocation":"30075:5:108","nodeType":"VariableDeclaration","scope":33156,"src":"30068:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":33137,"nodeType":"UserDefinedTypeName","pathNode":{"id":33136,"name":"IERC20","nameLocations":["30068:6:108"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"30068:6:108"},"referencedDeclaration":10812,"src":"30068:6:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"}],"id":33143,"initialValue":{"baseExpression":{"expression":{"id":33139,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33020,"src":"30083:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33140,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30088:12:108","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"30083:17:108","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":33142,"indexExpression":{"id":33141,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33112,"src":"30101:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30083:20:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"30068:35:108"},{"expression":{"arguments":[{"arguments":[{"id":33149,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33138,"src":"30191:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":33148,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30183:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":33147,"name":"address","nodeType":"ElementaryTypeName","src":"30183:7:108","typeDescriptions":{}}},"id":33150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30183:14:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":33151,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33023,"src":"30199:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33153,"indexExpression":{"id":33152,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33112,"src":"30207:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30199:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33144,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"30152:10:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":33146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30163:19:108","memberName":"handleIncomingAsset","nodeType":"MemberAccess","referencedDeclaration":27772,"src":"30152:30:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":33154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30152:58:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33155,"nodeType":"ExpressionStatement","src":"30152:58:108"}]}},{"expression":{"id":33169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":33158,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33104,"src":"30227:11:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33160,"indexExpression":{"id":33159,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33112,"src":"30239:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"30227:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":33161,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"30244:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33162,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30246:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30813,"src":"30244:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33164,"indexExpression":{"id":33163,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33112,"src":"30255:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30244:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"baseExpression":{"id":33165,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33023,"src":"30260:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33167,"indexExpression":{"id":33166,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33112,"src":"30268:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30260:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30244:26:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30227:43:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33170,"nodeType":"ExpressionStatement","src":"30227:43:108"},{"id":33174,"nodeType":"UncheckedBlock","src":"30279:32:108","statements":[{"expression":{"id":33172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"30299:3:108","subExpression":{"id":33171,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33112,"src":"30301:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33173,"nodeType":"ExpressionStatement","src":"30299:3:108"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33114,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33112,"src":"29864:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":33115,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33038,"src":"29868:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29864:13:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33176,"initializationExpression":{"assignments":[33112],"declarations":[{"constant":false,"id":33112,"mutability":"mutable","name":"i","nameLocation":"29861:1:108","nodeType":"VariableDeclaration","scope":33176,"src":"29853:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33111,"name":"uint256","nodeType":"ElementaryTypeName","src":"29853:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33113,"nodeType":"VariableDeclarationStatement","src":"29853:9:108"},"nodeType":"ForStatement","src":"29848:469:108"},{"expression":{"id":33189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33177,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"30353:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33179,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"30355:2:108","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":30801,"src":"30353:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":33182,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33104,"src":"30369:11:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":33183,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"30382:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33184,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30384:11:108","memberName":"multipliers","nodeType":"MemberAccess","referencedDeclaration":30816,"src":"30382:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":33181,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[31527,31545],"referencedDeclaration":31527,"src":"30365:3:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":33185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30365:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":33186,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"30398:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33187,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30400:8:108","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":30805,"src":"30398:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33180,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31463,"src":"30360:4:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":33188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30360:49:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30353:56:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33190,"nodeType":"ExpressionStatement","src":"30353:56:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":33192,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"30423:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33193,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30425:2:108","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":30801,"src":"30423:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":33194,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"30430:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33195,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30432:2:108","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":30799,"src":"30430:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30423:11:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"442073686f756c6420696e637265617365","id":33197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"30436:19:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_bb9053a0213fd7b0c31f2850e8d9176b933be82fddca9a3800fc76e83e2e796c","typeString":"literal_string \"D should increase\""},"value":"D should increase"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bb9053a0213fd7b0c31f2850e8d9176b933be82fddca9a3800fc76e83e2e796c","typeString":"literal_string \"D should increase\""}],"id":33191,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"30415:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":33198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30415:41:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33199,"nodeType":"ExpressionStatement","src":"30415:41:108"},{"expression":{"id":33205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33200,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"30529:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33202,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"30531:2:108","memberName":"d2","nodeType":"MemberAccess","referencedDeclaration":30803,"src":"30529:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":33203,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"30536:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33204,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30538:2:108","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":30801,"src":"30536:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30529:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33206,"nodeType":"ExpressionStatement","src":"30529:11:108"},{"assignments":[33211],"declarations":[{"constant":false,"id":33211,"mutability":"mutable","name":"fees","nameLocation":"30563:4:108","nodeType":"VariableDeclaration","scope":33412,"src":"30546:21:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33209,"name":"uint256","nodeType":"ElementaryTypeName","src":"30546:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33210,"nodeType":"ArrayTypeName","src":"30546:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":33217,"initialValue":{"arguments":[{"id":33215,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33038,"src":"30584:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33214,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"30570:13:108","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":33212,"name":"uint256","nodeType":"ElementaryTypeName","src":"30574:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33213,"nodeType":"ArrayTypeName","src":"30574:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":33216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30570:24:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"30546:48:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":33218,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"30605:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33219,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30607:11:108","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":30810,"src":"30605:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":33220,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30622:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30605:18:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":33345,"nodeType":"Block","src":"31276:90:108","statements":[{"expression":{"id":33343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33339,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33020,"src":"31332:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33341,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"31337:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"31332:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33342,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33104,"src":"31348:11:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"31332:27:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":33344,"nodeType":"ExpressionStatement","src":"31332:27:108"}]},"id":33346,"nodeType":"IfStatement","src":"30601:765:108","trueBody":{"id":33338,"nodeType":"Block","src":"30625:645:108","statements":[{"assignments":[33223],"declarations":[{"constant":false,"id":33223,"mutability":"mutable","name":"feePerToken","nameLocation":"30641:11:108","nodeType":"VariableDeclaration","scope":33338,"src":"30633:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33222,"name":"uint256","nodeType":"ElementaryTypeName","src":"30633:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33229,"initialValue":{"arguments":[{"expression":{"id":33225,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33020,"src":"30668:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33226,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30673:7:108","memberName":"swapFee","nodeType":"MemberAccess","referencedDeclaration":30763,"src":"30668:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":33227,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33038,"src":"30682:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33224,"name":"_feePerToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32372,"src":"30655:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":33228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30655:37:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30633:59:108"},{"body":{"id":33322,"nodeType":"Block","src":"30733:467:108","statements":[{"assignments":[33237],"declarations":[{"constant":false,"id":33237,"mutability":"mutable","name":"idealBalance","nameLocation":"30751:12:108","nodeType":"VariableDeclaration","scope":33322,"src":"30743:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33236,"name":"uint256","nodeType":"ElementaryTypeName","src":"30743:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33249,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":33238,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"30767:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33239,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30769:2:108","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":30801,"src":"30767:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"baseExpression":{"expression":{"id":33240,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"30774:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33241,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30776:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30813,"src":"30774:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33243,"indexExpression":{"id":33242,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33231,"src":"30785:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30774:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30767:20:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":33245,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"30766:22:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":33246,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"30791:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33247,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30793:2:108","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":30799,"src":"30791:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30766:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30743:52:108"},{"expression":{"id":33266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":33250,"name":"fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33211,"src":"30805:4:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33252,"indexExpression":{"id":33251,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33231,"src":"30810:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"30805:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33253,"name":"feePerToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33223,"src":"30816:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"arguments":[{"baseExpression":{"id":33256,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33104,"src":"30855:11:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33258,"indexExpression":{"id":33257,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33231,"src":"30867:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30855:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33254,"name":"idealBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33237,"src":"30831:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30844:10:108","memberName":"difference","nodeType":"MemberAccess","referencedDeclaration":30644,"src":"30831:23:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":33259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30831:39:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":33260,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"30830:41:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30816:55:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":33262,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"30815:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":33263,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"30875:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":33264,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"30885:15:108","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"30875:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30815:85:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30805:95:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33267,"nodeType":"ExpressionStatement","src":"30805:95:108"},{"assignments":[33269],"declarations":[{"constant":false,"id":33269,"mutability":"mutable","name":"adminFee","nameLocation":"30918:8:108","nodeType":"VariableDeclaration","scope":33322,"src":"30910:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33268,"name":"uint256","nodeType":"ElementaryTypeName","src":"30910:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33280,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":33270,"name":"fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33211,"src":"30930:4:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33272,"indexExpression":{"id":33271,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33231,"src":"30935:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30930:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":33273,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33020,"src":"30940:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33274,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30945:8:108","memberName":"adminFee","nodeType":"MemberAccess","referencedDeclaration":30765,"src":"30940:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30930:23:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":33276,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"30929:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":33277,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"30957:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":33278,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"30967:15:108","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"30957:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30929:53:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30910:72:108"},{"expression":{"id":33291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":33281,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33020,"src":"30992:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33284,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30997:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"30992:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":33285,"indexExpression":{"id":33283,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33231,"src":"31006:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"30992:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":33286,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33104,"src":"31011:11:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33288,"indexExpression":{"id":33287,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33231,"src":"31023:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31011:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":33289,"name":"adminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33269,"src":"31028:8:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31011:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30992:44:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33292,"nodeType":"ExpressionStatement","src":"30992:44:108"},{"expression":{"id":33304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":33293,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33020,"src":"31046:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33296,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31051:9:108","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":30781,"src":"31046:14:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":33297,"indexExpression":{"id":33295,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33231,"src":"31061:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"31046:17:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":33298,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33020,"src":"31066:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33299,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31071:9:108","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":30781,"src":"31066:14:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":33301,"indexExpression":{"id":33300,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33231,"src":"31081:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31066:17:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":33302,"name":"adminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33269,"src":"31086:8:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31066:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31046:48:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33305,"nodeType":"ExpressionStatement","src":"31046:48:108"},{"expression":{"id":33316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":33306,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33104,"src":"31104:11:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33308,"indexExpression":{"id":33307,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33231,"src":"31116:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"31104:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":33309,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33104,"src":"31121:11:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33311,"indexExpression":{"id":33310,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33231,"src":"31133:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31121:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":33312,"name":"fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33211,"src":"31138:4:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33314,"indexExpression":{"id":33313,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33231,"src":"31143:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31138:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31121:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31104:41:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33317,"nodeType":"ExpressionStatement","src":"31104:41:108"},{"id":33321,"nodeType":"UncheckedBlock","src":"31156:36:108","statements":[{"expression":{"id":33319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"31178:3:108","subExpression":{"id":33318,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33231,"src":"31180:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33320,"nodeType":"ExpressionStatement","src":"31178:3:108"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33233,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33231,"src":"30716:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":33234,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33038,"src":"30720:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30716:13:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33323,"initializationExpression":{"assignments":[33231],"declarations":[{"constant":false,"id":33231,"mutability":"mutable","name":"i","nameLocation":"30713:1:108","nodeType":"VariableDeclaration","scope":33323,"src":"30705:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33230,"name":"uint256","nodeType":"ElementaryTypeName","src":"30705:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33232,"nodeType":"VariableDeclarationStatement","src":"30705:9:108"},"nodeType":"ForStatement","src":"30700:500:108"},{"expression":{"id":33336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33324,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"31207:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33326,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"31209:2:108","memberName":"d2","nodeType":"MemberAccess","referencedDeclaration":30803,"src":"31207:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":33329,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33104,"src":"31223:11:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":33330,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"31236:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33331,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31238:11:108","memberName":"multipliers","nodeType":"MemberAccess","referencedDeclaration":30816,"src":"31236:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":33328,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[31527,31545],"referencedDeclaration":31527,"src":"31219:3:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":33332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31219:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":33333,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"31252:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33334,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31254:8:108","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":30805,"src":"31252:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33327,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31463,"src":"31214:4:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":33335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31214:49:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31207:56:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33337,"nodeType":"ExpressionStatement","src":"31207:56:108"}]}},{"assignments":[33348],"declarations":[{"constant":false,"id":33348,"mutability":"mutable","name":"toMint","nameLocation":"31380:6:108","nodeType":"VariableDeclaration","scope":33412,"src":"31372:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33347,"name":"uint256","nodeType":"ElementaryTypeName","src":"31372:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33349,"nodeType":"VariableDeclarationStatement","src":"31372:14:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":33350,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"31396:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33351,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31398:11:108","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":30810,"src":"31396:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":33352,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31413:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"31396:18:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":33376,"nodeType":"Block","src":"31450:62:108","statements":[{"expression":{"id":33374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33360,"name":"toMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33348,"src":"31458:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":33361,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"31469:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33362,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31471:2:108","memberName":"d2","nodeType":"MemberAccess","referencedDeclaration":30803,"src":"31469:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":33363,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"31476:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33364,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31478:2:108","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":30799,"src":"31476:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31469:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":33366,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31468:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":33367,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"31484:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33368,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31486:11:108","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":30810,"src":"31484:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31468:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":33370,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31467:31:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":33371,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"31501:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33372,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31503:2:108","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":30799,"src":"31501:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31467:38:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31458:47:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33375,"nodeType":"ExpressionStatement","src":"31458:47:108"}]},"id":33377,"nodeType":"IfStatement","src":"31392:120:108","trueBody":{"id":33359,"nodeType":"Block","src":"31416:28:108","statements":[{"expression":{"id":33357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33354,"name":"toMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33348,"src":"31424:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":33355,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"31433:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33356,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31435:2:108","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":30801,"src":"31433:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31424:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33358,"nodeType":"ExpressionStatement","src":"31424:13:108"}]}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33379,"name":"toMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33348,"src":"31526:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":33380,"name":"minToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33025,"src":"31536:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31526:19:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d696e74203c206d696e","id":33382,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"31547:12:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_6ddd7f5b4f156ad60913b3898ca8aedad82b4753c6391199bcbb48583e596887","typeString":"literal_string \"mint < min\""},"value":"mint < min"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6ddd7f5b4f156ad60913b3898ca8aedad82b4753c6391199bcbb48583e596887","typeString":"literal_string \"mint < min\""}],"id":33378,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"31518:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":33383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31518:42:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33384,"nodeType":"ExpressionStatement","src":"31518:42:108"},{"expression":{"arguments":[{"expression":{"id":33390,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"31615:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":33391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31619:6:108","memberName":"sender","nodeType":"MemberAccess","src":"31615:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":33392,"name":"toMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33348,"src":"31627:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":33385,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"31600:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33388,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31602:7:108","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":30808,"src":"31600:9:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":33389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31610:4:108","memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":23120,"src":"31600:14:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":33393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31600:34:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33394,"nodeType":"ExpressionStatement","src":"31600:34:108"},{"eventCall":{"arguments":[{"expression":{"id":33396,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33020,"src":"31659:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33397,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31664:3:108","memberName":"key","nodeType":"MemberAccess","referencedDeclaration":30753,"src":"31659:8:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":33398,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"31669:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":33399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31673:6:108","memberName":"sender","nodeType":"MemberAccess","src":"31669:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":33400,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33023,"src":"31681:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":33401,"name":"fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33211,"src":"31690:4:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":33402,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"31696:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33403,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31698:2:108","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":30801,"src":"31696:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":33404,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33053,"src":"31702:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33405,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31704:11:108","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":30810,"src":"31702:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":33406,"name":"toMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33348,"src":"31718:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31702:22:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33395,"name":"AddLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30698,"src":"31646:12:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (bytes32,address,uint256[] memory,uint256[] memory,uint256,uint256)"}},"id":33408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31646:79:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33409,"nodeType":"EmitStatement","src":"31641:84:108"},{"expression":{"id":33410,"name":"toMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33348,"src":"31739:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":33029,"id":33411,"nodeType":"Return","src":"31732:13:108"}]},"documentation":{"id":33017,"nodeType":"StructuredDocumentation","src":"28633:480:108","text":" @notice Add liquidity to the pool\n @param self Swap struct to read from and write to\n @param amounts the amounts of each token to add, in their native precision\n @param minToMint the minimum LP tokens adding this amount of liquidity\n should mint, otherwise revert. Handy for front-running mitigation\n allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\n @return amount of LP token user received"},"id":33413,"implemented":true,"kind":"function","modifiers":[],"name":"addLiquidity","nameLocation":"29125:12:108","nodeType":"FunctionDefinition","parameters":{"id":33026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33020,"mutability":"mutable","name":"self","nameLocation":"29156:4:108","nodeType":"VariableDeclaration","scope":33413,"src":"29143:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":33019,"nodeType":"UserDefinedTypeName","pathNode":{"id":33018,"name":"Swap","nameLocations":["29143:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"29143:4:108"},"referencedDeclaration":30786,"src":"29143:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":33023,"mutability":"mutable","name":"amounts","nameLocation":"29183:7:108","nodeType":"VariableDeclaration","scope":33413,"src":"29166:24:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33021,"name":"uint256","nodeType":"ElementaryTypeName","src":"29166:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33022,"nodeType":"ArrayTypeName","src":"29166:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":33025,"mutability":"mutable","name":"minToMint","nameLocation":"29204:9:108","nodeType":"VariableDeclaration","scope":33413,"src":"29196:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33024,"name":"uint256","nodeType":"ElementaryTypeName","src":"29196:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29137:80:108"},"returnParameters":{"id":33029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33028,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33413,"src":"29236:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33027,"name":"uint256","nodeType":"ElementaryTypeName","src":"29236:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29235:9:108"},"scope":34244,"src":"29116:2634:108","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":33564,"nodeType":"Block","src":"32337:907:108","statements":[{"assignments":[33430],"declarations":[{"constant":false,"id":33430,"mutability":"mutable","name":"lpToken","nameLocation":"32351:7:108","nodeType":"VariableDeclaration","scope":33564,"src":"32343:15:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"},"typeName":{"id":33429,"nodeType":"UserDefinedTypeName","pathNode":{"id":33428,"name":"LPToken","nameLocations":["32343:7:108"],"nodeType":"IdentifierPath","referencedDeclaration":23179,"src":"32343:7:108"},"referencedDeclaration":23179,"src":"32343:7:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"visibility":"internal"}],"id":33433,"initialValue":{"expression":{"id":33431,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33417,"src":"32361:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33432,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32366:7:108","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":30768,"src":"32361:12:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"nodeType":"VariableDeclarationStatement","src":"32343:30:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33435,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33419,"src":"32387:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"expression":{"id":33438,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"32415:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":33439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32419:6:108","memberName":"sender","nodeType":"MemberAccess","src":"32415:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":33436,"name":"lpToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33430,"src":"32397:7:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":33437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32405:9:108","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":8557,"src":"32397:17:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":33440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32397:29:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32387:39:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"3e4c502e62616c616e63654f66","id":33442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"32428:15:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_f6ffe39fc3cc1849a13d51ded78dcf3b5c94216cc465a3b1b92bc78f59ae6cef","typeString":"literal_string \">LP.balanceOf\""},"value":">LP.balanceOf"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f6ffe39fc3cc1849a13d51ded78dcf3b5c94216cc465a3b1b92bc78f59ae6cef","typeString":"literal_string \">LP.balanceOf\""}],"id":33434,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"32379:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":33443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32379:65:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33444,"nodeType":"ExpressionStatement","src":"32379:65:108"},{"assignments":[33446],"declarations":[{"constant":false,"id":33446,"mutability":"mutable","name":"numTokens","nameLocation":"32458:9:108","nodeType":"VariableDeclaration","scope":33564,"src":"32450:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33445,"name":"uint256","nodeType":"ElementaryTypeName","src":"32450:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33450,"initialValue":{"expression":{"expression":{"id":33447,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33417,"src":"32470:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33448,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32475:12:108","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"32470:17:108","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":33449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32488:6:108","memberName":"length","nodeType":"MemberAccess","src":"32470:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"32450:44:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":33452,"name":"minAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33422,"src":"32508:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":33453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32519:6:108","memberName":"length","nodeType":"MemberAccess","src":"32508:17:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":33454,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33446,"src":"32529:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32508:30:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d69736d6174636820706f6f6c546f6b656e73","id":33456,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"32540:21:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_4ad81e79192646de58c05c664c8c46273241020a112976d2773155fc181b7641","typeString":"literal_string \"mismatch poolTokens\""},"value":"mismatch poolTokens"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4ad81e79192646de58c05c664c8c46273241020a112976d2773155fc181b7641","typeString":"literal_string \"mismatch poolTokens\""}],"id":33451,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"32500:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":33457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32500:62:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33458,"nodeType":"ExpressionStatement","src":"32500:62:108"},{"assignments":[33463],"declarations":[{"constant":false,"id":33463,"mutability":"mutable","name":"balances","nameLocation":"32586:8:108","nodeType":"VariableDeclaration","scope":33564,"src":"32569:25:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33461,"name":"uint256","nodeType":"ElementaryTypeName","src":"32569:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33462,"nodeType":"ArrayTypeName","src":"32569:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":33466,"initialValue":{"expression":{"id":33464,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33417,"src":"32597:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33465,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32602:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"32597:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"32569:41:108"},{"assignments":[33468],"declarations":[{"constant":false,"id":33468,"mutability":"mutable","name":"totalSupply","nameLocation":"32624:11:108","nodeType":"VariableDeclaration","scope":33564,"src":"32616:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33467,"name":"uint256","nodeType":"ElementaryTypeName","src":"32616:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33472,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":33469,"name":"lpToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33430,"src":"32638:7:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":33470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32646:11:108","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":8543,"src":"32638:19:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":33471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32638:21:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"32616:43:108"},{"assignments":[33477],"declarations":[{"constant":false,"id":33477,"mutability":"mutable","name":"amounts","nameLocation":"32683:7:108","nodeType":"VariableDeclaration","scope":33564,"src":"32666:24:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33475,"name":"uint256","nodeType":"ElementaryTypeName","src":"32666:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33476,"nodeType":"ArrayTypeName","src":"32666:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":33483,"initialValue":{"arguments":[{"id":33479,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33463,"src":"32719:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":33480,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33419,"src":"32729:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":33481,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33468,"src":"32737:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33478,"name":"_calculateRemoveLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32181,"src":"32693:25:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256[] memory)"}},"id":33482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32693:56:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"32666:83:108"},{"assignments":[33485],"declarations":[{"constant":false,"id":33485,"mutability":"mutable","name":"numAmounts","nameLocation":"32764:10:108","nodeType":"VariableDeclaration","scope":33564,"src":"32756:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33484,"name":"uint256","nodeType":"ElementaryTypeName","src":"32756:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33488,"initialValue":{"expression":{"id":33486,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33477,"src":"32777:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32785:6:108","memberName":"length","nodeType":"MemberAccess","src":"32777:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"32756:35:108"},{"body":{"id":33541,"nodeType":"Block","src":"32831:265:108","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":33496,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33477,"src":"32847:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33498,"indexExpression":{"id":33497,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33490,"src":"32855:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"32847:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"baseExpression":{"id":33499,"name":"minAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33422,"src":"32861:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":33501,"indexExpression":{"id":33500,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33490,"src":"32872:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"32861:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32847:27:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616d6f756e74735b695d203c206d696e416d6f756e74735b695d","id":33503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"32876:28:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_f9716ead0cbfa1f0d7e4fb0f8f862f9707576ae17b9c27448547344167a1c211","typeString":"literal_string \"amounts[i] < minAmounts[i]\""},"value":"amounts[i] < minAmounts[i]"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f9716ead0cbfa1f0d7e4fb0f8f862f9707576ae17b9c27448547344167a1c211","typeString":"literal_string \"amounts[i] < minAmounts[i]\""}],"id":33495,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"32839:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":33504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32839:66:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33505,"nodeType":"ExpressionStatement","src":"32839:66:108"},{"expression":{"id":33518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":33506,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33417,"src":"32913:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33509,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32918:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"32913:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":33510,"indexExpression":{"id":33508,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33490,"src":"32927:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"32913:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":33511,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33463,"src":"32932:8:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33513,"indexExpression":{"id":33512,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33490,"src":"32941:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"32932:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":33514,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33477,"src":"32946:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33516,"indexExpression":{"id":33515,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33490,"src":"32954:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"32946:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32932:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32913:43:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33519,"nodeType":"ExpressionStatement","src":"32913:43:108"},{"expression":{"arguments":[{"arguments":[{"baseExpression":{"expression":{"id":33525,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33417,"src":"33003:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33526,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33008:12:108","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"33003:17:108","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":33528,"indexExpression":{"id":33527,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33490,"src":"33021:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"33003:20:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":33524,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32995:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":33523,"name":"address","nodeType":"ElementaryTypeName","src":"32995:7:108","typeDescriptions":{}}},"id":33529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32995:29:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":33530,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"33026:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":33531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33030:6:108","memberName":"sender","nodeType":"MemberAccess","src":"33026:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":33532,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33477,"src":"33038:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33534,"indexExpression":{"id":33533,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33490,"src":"33046:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"33038:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33520,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"32964:10:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":33522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32975:19:108","memberName":"handleOutgoingAsset","nodeType":"MemberAccess","referencedDeclaration":27809,"src":"32964:30:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":33535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32964:85:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33536,"nodeType":"ExpressionStatement","src":"32964:85:108"},{"id":33540,"nodeType":"UncheckedBlock","src":"33058:32:108","statements":[{"expression":{"id":33538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"33078:3:108","subExpression":{"id":33537,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33490,"src":"33080:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33539,"nodeType":"ExpressionStatement","src":"33078:3:108"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33492,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33490,"src":"32813:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":33493,"name":"numAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33485,"src":"32817:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32813:14:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33542,"initializationExpression":{"assignments":[33490],"declarations":[{"constant":false,"id":33490,"mutability":"mutable","name":"i","nameLocation":"32810:1:108","nodeType":"VariableDeclaration","scope":33542,"src":"32802:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33489,"name":"uint256","nodeType":"ElementaryTypeName","src":"32802:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33491,"nodeType":"VariableDeclarationStatement","src":"32802:9:108"},"nodeType":"ForStatement","src":"32797:299:108"},{"expression":{"arguments":[{"expression":{"id":33546,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"33119:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":33547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33123:6:108","memberName":"sender","nodeType":"MemberAccess","src":"33119:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":33548,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33419,"src":"33131:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33543,"name":"lpToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33430,"src":"33102:7:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":33545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33110:8:108","memberName":"burnFrom","nodeType":"MemberAccess","referencedDeclaration":23143,"src":"33102:16:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":33549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33102:36:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33550,"nodeType":"ExpressionStatement","src":"33102:36:108"},{"eventCall":{"arguments":[{"expression":{"id":33552,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33417,"src":"33166:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33171:3:108","memberName":"key","nodeType":"MemberAccess","referencedDeclaration":30753,"src":"33166:8:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":33554,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"33176:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":33555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33180:6:108","memberName":"sender","nodeType":"MemberAccess","src":"33176:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":33556,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33477,"src":"33188:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33557,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33468,"src":"33197:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":33558,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33419,"src":"33211:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33197:20:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33551,"name":"RemoveLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30709,"src":"33150:15:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (bytes32,address,uint256[] memory,uint256)"}},"id":33560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33150:68:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33561,"nodeType":"EmitStatement","src":"33145:73:108"},{"expression":{"id":33562,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33477,"src":"33232:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":33427,"id":33563,"nodeType":"Return","src":"33225:14:108"}]},"documentation":{"id":33414,"nodeType":"StructuredDocumentation","src":"31754:437:108","text":" @notice Burn LP tokens to remove liquidity from the pool.\n @dev Liquidity can always be removed, even when the pool is paused.\n @param self Swap struct to read from and write to\n @param amount the amount of LP tokens to burn\n @param minAmounts the minimum amounts of each token in the pool\n acceptable for this burn. Useful as a front-running mitigation\n @return amounts of tokens the user received"},"id":33565,"implemented":true,"kind":"function","modifiers":[],"name":"removeLiquidity","nameLocation":"32203:15:108","nodeType":"FunctionDefinition","parameters":{"id":33423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33417,"mutability":"mutable","name":"self","nameLocation":"32237:4:108","nodeType":"VariableDeclaration","scope":33565,"src":"32224:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":33416,"nodeType":"UserDefinedTypeName","pathNode":{"id":33415,"name":"Swap","nameLocations":["32224:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"32224:4:108"},"referencedDeclaration":30786,"src":"32224:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":33419,"mutability":"mutable","name":"amount","nameLocation":"32255:6:108","nodeType":"VariableDeclaration","scope":33565,"src":"32247:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33418,"name":"uint256","nodeType":"ElementaryTypeName","src":"32247:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":33422,"mutability":"mutable","name":"minAmounts","nameLocation":"32286:10:108","nodeType":"VariableDeclaration","scope":33565,"src":"32267:29:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33420,"name":"uint256","nodeType":"ElementaryTypeName","src":"32267:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33421,"nodeType":"ArrayTypeName","src":"32267:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"32218:82:108"},"returnParameters":{"id":33427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33426,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33565,"src":"32319:16:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33424,"name":"uint256","nodeType":"ElementaryTypeName","src":"32319:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33425,"nodeType":"ArrayTypeName","src":"32319:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"32318:18:108"},"scope":34244,"src":"32194:1050:108","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":33715,"nodeType":"Block","src":"33783:932:108","statements":[{"assignments":[33582],"declarations":[{"constant":false,"id":33582,"mutability":"mutable","name":"lpToken","nameLocation":"33797:7:108","nodeType":"VariableDeclaration","scope":33715,"src":"33789:15:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"},"typeName":{"id":33581,"nodeType":"UserDefinedTypeName","pathNode":{"id":33580,"name":"LPToken","nameLocations":["33789:7:108"],"nodeType":"IdentifierPath","referencedDeclaration":23179,"src":"33789:7:108"},"referencedDeclaration":23179,"src":"33789:7:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"visibility":"internal"}],"id":33585,"initialValue":{"expression":{"id":33583,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33569,"src":"33807:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33584,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33812:7:108","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":30768,"src":"33807:12:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"nodeType":"VariableDeclarationStatement","src":"33789:30:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33587,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33571,"src":"33834:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"expression":{"id":33590,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"33867:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":33591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33871:6:108","memberName":"sender","nodeType":"MemberAccess","src":"33867:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":33588,"name":"lpToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33582,"src":"33849:7:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":33589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33857:9:108","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":8557,"src":"33849:17:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":33592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33849:29:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33834:44:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"3e4c502e62616c616e63654f66","id":33594,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"33880:15:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_f6ffe39fc3cc1849a13d51ded78dcf3b5c94216cc465a3b1b92bc78f59ae6cef","typeString":"literal_string \">LP.balanceOf\""},"value":">LP.balanceOf"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f6ffe39fc3cc1849a13d51ded78dcf3b5c94216cc465a3b1b92bc78f59ae6cef","typeString":"literal_string \">LP.balanceOf\""}],"id":33586,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"33826:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":33595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33826:70:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33596,"nodeType":"ExpressionStatement","src":"33826:70:108"},{"assignments":[33598],"declarations":[{"constant":false,"id":33598,"mutability":"mutable","name":"numTokens","nameLocation":"33910:9:108","nodeType":"VariableDeclaration","scope":33715,"src":"33902:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33597,"name":"uint256","nodeType":"ElementaryTypeName","src":"33902:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33602,"initialValue":{"expression":{"expression":{"id":33599,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33569,"src":"33922:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33600,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33927:12:108","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"33922:17:108","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":33601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33940:6:108","memberName":"length","nodeType":"MemberAccess","src":"33922:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"33902:44:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33604,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33573,"src":"33960:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":33605,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33598,"src":"33973:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33960:22:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6e6f7420666f756e64","id":33607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"33984:11:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_9b887cfddc434e3cf41b666954131afc611b880c7637aac66ca1f629f8984c5b","typeString":"literal_string \"not found\""},"value":"not found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9b887cfddc434e3cf41b666954131afc611b880c7637aac66ca1f629f8984c5b","typeString":"literal_string \"not found\""}],"id":33603,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"33952:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":33608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33952:44:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33609,"nodeType":"ExpressionStatement","src":"33952:44:108"},{"assignments":[33611],"declarations":[{"constant":false,"id":33611,"mutability":"mutable","name":"totalSupply","nameLocation":"34011:11:108","nodeType":"VariableDeclaration","scope":33715,"src":"34003:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33610,"name":"uint256","nodeType":"ElementaryTypeName","src":"34003:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33615,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":33612,"name":"lpToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33582,"src":"34025:7:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":33613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34033:11:108","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":8543,"src":"34025:19:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":33614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34025:21:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"34003:43:108"},{"assignments":[33617,33619],"declarations":[{"constant":false,"id":33617,"mutability":"mutable","name":"dy","nameLocation":"34062:2:108","nodeType":"VariableDeclaration","scope":33715,"src":"34054:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33616,"name":"uint256","nodeType":"ElementaryTypeName","src":"34054:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":33619,"mutability":"mutable","name":"dyFee","nameLocation":"34074:5:108","nodeType":"VariableDeclaration","scope":33715,"src":"34066:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33618,"name":"uint256","nodeType":"ElementaryTypeName","src":"34066:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33626,"initialValue":{"arguments":[{"id":33621,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33569,"src":"34110:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},{"id":33622,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33571,"src":"34116:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":33623,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33573,"src":"34129:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":33624,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33611,"src":"34141:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33620,"name":"_calculateWithdrawOneToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30915,"src":"34083:26:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$_t_uint256_$_t_uint8_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer,uint256,uint8,uint256) view returns (uint256,uint256)"}},"id":33625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34083:70:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"34053:100:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33628,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33617,"src":"34168:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":33629,"name":"minAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33575,"src":"34174:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34168:15:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6479203c206d696e416d6f756e74","id":33631,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"34185:16:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_3569a113599fc30dddee53f7bfa525ade1d72800ee559c1f223157ef9a1e0da6","typeString":"literal_string \"dy < minAmount\""},"value":"dy < minAmount"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3569a113599fc30dddee53f7bfa525ade1d72800ee559c1f223157ef9a1e0da6","typeString":"literal_string \"dy < minAmount\""}],"id":33627,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"34160:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":33632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34160:42:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33633,"nodeType":"ExpressionStatement","src":"34160:42:108"},{"assignments":[33635],"declarations":[{"constant":false,"id":33635,"mutability":"mutable","name":"adminFee","nameLocation":"34217:8:108","nodeType":"VariableDeclaration","scope":33715,"src":"34209:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33634,"name":"uint256","nodeType":"ElementaryTypeName","src":"34209:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33644,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33636,"name":"dyFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33619,"src":"34229:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":33637,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33569,"src":"34237:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33638,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34242:8:108","memberName":"adminFee","nodeType":"MemberAccess","referencedDeclaration":30765,"src":"34237:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34229:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":33640,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34228:23:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":33641,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"34254:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":33642,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34264:15:108","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"34254:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34228:51:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"34209:70:108"},{"expression":{"id":33659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":33645,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33569,"src":"34285:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33648,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34290:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"34285:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":33649,"indexExpression":{"id":33647,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33573,"src":"34299:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"34285:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":33650,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33569,"src":"34313:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33651,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34318:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"34313:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":33653,"indexExpression":{"id":33652,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33573,"src":"34327:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34313:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33654,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33617,"src":"34342:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":33655,"name":"adminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33635,"src":"34347:8:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34342:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":33657,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34341:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34313:43:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34285:71:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33660,"nodeType":"ExpressionStatement","src":"34285:71:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33661,"name":"adminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33635,"src":"34366:8:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":33662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34378:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"34366:13:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33678,"nodeType":"IfStatement","src":"34362:100:108","trueBody":{"id":33677,"nodeType":"Block","src":"34381:81:108","statements":[{"expression":{"id":33675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":33664,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33569,"src":"34389:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33667,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34394:9:108","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":30781,"src":"34389:14:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":33668,"indexExpression":{"id":33666,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33573,"src":"34404:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"34389:26:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":33669,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33569,"src":"34418:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33670,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34423:9:108","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":30781,"src":"34418:14:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":33672,"indexExpression":{"id":33671,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33573,"src":"34433:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34418:26:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":33673,"name":"adminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33635,"src":"34447:8:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34418:37:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34389:66:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33676,"nodeType":"ExpressionStatement","src":"34389:66:108"}]}},{"expression":{"arguments":[{"expression":{"id":33682,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"34484:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":33683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34488:6:108","memberName":"sender","nodeType":"MemberAccess","src":"34484:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":33684,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33571,"src":"34496:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33679,"name":"lpToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33582,"src":"34467:7:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":33681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34475:8:108","memberName":"burnFrom","nodeType":"MemberAccess","referencedDeclaration":23143,"src":"34467:16:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":33685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34467:41:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33686,"nodeType":"ExpressionStatement","src":"34467:41:108"},{"expression":{"arguments":[{"arguments":[{"baseExpression":{"expression":{"id":33692,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33569,"src":"34553:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33693,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34558:12:108","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"34553:17:108","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":33695,"indexExpression":{"id":33694,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33573,"src":"34571:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34553:29:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":33691,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34545:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":33690,"name":"address","nodeType":"ElementaryTypeName","src":"34545:7:108","typeDescriptions":{}}},"id":33696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34545:38:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":33697,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"34585:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":33698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34589:6:108","memberName":"sender","nodeType":"MemberAccess","src":"34585:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":33699,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33617,"src":"34597:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33687,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"34514:10:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":33689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34525:19:108","memberName":"handleOutgoingAsset","nodeType":"MemberAccess","referencedDeclaration":27809,"src":"34514:30:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":33700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34514:86:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33701,"nodeType":"ExpressionStatement","src":"34514:86:108"},{"eventCall":{"arguments":[{"expression":{"id":33703,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33569,"src":"34631:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33704,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34636:3:108","memberName":"key","nodeType":"MemberAccess","referencedDeclaration":30753,"src":"34631:8:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":33705,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"34641:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":33706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34645:6:108","memberName":"sender","nodeType":"MemberAccess","src":"34641:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":33707,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33571,"src":"34653:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":33708,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33611,"src":"34666:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":33709,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33573,"src":"34679:10:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":33710,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33617,"src":"34691:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33702,"name":"RemoveLiquidityOne","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30723,"src":"34612:18:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (bytes32,address,uint256,uint256,uint256,uint256)"}},"id":33711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34612:82:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33712,"nodeType":"EmitStatement","src":"34607:87:108"},{"expression":{"id":33713,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33617,"src":"34708:2:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":33579,"id":33714,"nodeType":"Return","src":"34701:9:108"}]},"documentation":{"id":33566,"nodeType":"StructuredDocumentation","src":"33248:375:108","text":" @notice Remove liquidity from the pool all in one token.\n @param self Swap struct to read from and write to\n @param tokenAmount the amount of the lp tokens to burn\n @param tokenIndex the index of the token you want to receive\n @param minAmount the minimum amount to withdraw, otherwise revert\n @return amount chosen token that user received"},"id":33716,"implemented":true,"kind":"function","modifiers":[],"name":"removeLiquidityOneToken","nameLocation":"33635:23:108","nodeType":"FunctionDefinition","parameters":{"id":33576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33569,"mutability":"mutable","name":"self","nameLocation":"33677:4:108","nodeType":"VariableDeclaration","scope":33716,"src":"33664:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":33568,"nodeType":"UserDefinedTypeName","pathNode":{"id":33567,"name":"Swap","nameLocations":["33664:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"33664:4:108"},"referencedDeclaration":30786,"src":"33664:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":33571,"mutability":"mutable","name":"tokenAmount","nameLocation":"33695:11:108","nodeType":"VariableDeclaration","scope":33716,"src":"33687:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33570,"name":"uint256","nodeType":"ElementaryTypeName","src":"33687:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":33573,"mutability":"mutable","name":"tokenIndex","nameLocation":"33718:10:108","nodeType":"VariableDeclaration","scope":33716,"src":"33712:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":33572,"name":"uint8","nodeType":"ElementaryTypeName","src":"33712:5:108","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":33575,"mutability":"mutable","name":"minAmount","nameLocation":"33742:9:108","nodeType":"VariableDeclaration","scope":33716,"src":"33734:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33574,"name":"uint256","nodeType":"ElementaryTypeName","src":"33734:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33658:97:108"},"returnParameters":{"id":33579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33578,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33716,"src":"33774:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33577,"name":"uint256","nodeType":"ElementaryTypeName","src":"33774:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33773:9:108"},"scope":34244,"src":"33626:1089:108","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":34093,"nodeType":"Block","src":"35295:2267:108","statements":[{"assignments":[33732],"declarations":[{"constant":false,"id":33732,"mutability":"mutable","name":"v","nameLocation":"35328:1:108","nodeType":"VariableDeclaration","scope":34093,"src":"35301:28:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo"},"typeName":{"id":33731,"nodeType":"UserDefinedTypeName","pathNode":{"id":33730,"name":"ManageLiquidityInfo","nameLocations":["35301:19:108"],"nodeType":"IdentifierPath","referencedDeclaration":30817,"src":"35301:19:108"},"referencedDeclaration":30817,"src":"35301:19:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_storage_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo"}},"visibility":"internal"}],"id":33748,"initialValue":{"arguments":[{"hexValue":"30","id":33734,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35359:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":33735,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35368:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":33736,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35377:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"id":33738,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33720,"src":"35399:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}],"id":33737,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30831,"src":"35386:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$30786_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtils.Swap storage pointer) view returns (uint256)"}},"id":33739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35386:18:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":33740,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33720,"src":"35412:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33741,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35417:7:108","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":30768,"src":"35412:12:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},{"hexValue":"30","id":33742,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35432:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":33743,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33720,"src":"35441:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33744,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35446:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"35441:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},{"expression":{"id":33745,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33720,"src":"35462:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33746,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35467:25:108","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":30775,"src":"35462:30:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"},{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}],"id":33733,"name":"ManageLiquidityInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30817,"src":"35332:19:108","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ManageLiquidityInfo_$30817_storage_ptr_$","typeString":"type(struct SwapUtils.ManageLiquidityInfo storage pointer)"}},"id":33747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35332:166:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"nodeType":"VariableDeclarationStatement","src":"35301:197:108"},{"expression":{"id":33756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33749,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"35504:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33751,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"35506:11:108","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":30810,"src":"35504:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":33752,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"35520:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33753,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35522:7:108","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":30808,"src":"35520:9:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":33754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35530:11:108","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":8543,"src":"35520:21:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":33755,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35520:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35504:39:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33757,"nodeType":"ExpressionStatement","src":"35504:39:108"},{"assignments":[33759],"declarations":[{"constant":false,"id":33759,"mutability":"mutable","name":"numTokens","nameLocation":"35558:9:108","nodeType":"VariableDeclaration","scope":34093,"src":"35550:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33758,"name":"uint256","nodeType":"ElementaryTypeName","src":"35550:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33763,"initialValue":{"expression":{"expression":{"id":33760,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33720,"src":"35570:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33761,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35575:12:108","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"35570:17:108","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":33762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35588:6:108","memberName":"length","nodeType":"MemberAccess","src":"35570:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"35550:44:108"},{"assignments":[33765],"declarations":[{"constant":false,"id":33765,"mutability":"mutable","name":"numAmounts","nameLocation":"35608:10:108","nodeType":"VariableDeclaration","scope":34093,"src":"35600:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33764,"name":"uint256","nodeType":"ElementaryTypeName","src":"35600:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33768,"initialValue":{"expression":{"id":33766,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33723,"src":"35621:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35629:6:108","memberName":"length","nodeType":"MemberAccess","src":"35621:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"35600:35:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33770,"name":"numAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33765,"src":"35649:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":33771,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33759,"src":"35663:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35649:23:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d69736d6174636820706f6f6c20746f6b656e73","id":33773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"35674:22:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_2f637b5966c86516cd0e8631a2a2dbb5ced6ddd78c0dceb24f758a9d4073aab8","typeString":"literal_string \"mismatch pool tokens\""},"value":"mismatch pool tokens"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2f637b5966c86516cd0e8631a2a2dbb5ced6ddd78c0dceb24f758a9d4073aab8","typeString":"literal_string \"mismatch pool tokens\""}],"id":33769,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"35641:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":33774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35641:56:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33775,"nodeType":"ExpressionStatement","src":"35641:56:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":33788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33777,"name":"maxBurnAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33725,"src":"35712:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"expression":{"id":33781,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"35749:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":33782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35753:6:108","memberName":"sender","nodeType":"MemberAccess","src":"35749:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":33778,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"35729:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33779,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35731:7:108","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":30808,"src":"35729:9:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":33780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35739:9:108","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":8557,"src":"35729:19:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":33783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35729:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35712:48:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33785,"name":"maxBurnAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33725,"src":"35764:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":33786,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35781:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"35764:18:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"35712:70:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"3e4c502e62616c616e63654f66","id":33789,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"35784:15:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_f6ffe39fc3cc1849a13d51ded78dcf3b5c94216cc465a3b1b92bc78f59ae6cef","typeString":"literal_string \">LP.balanceOf\""},"value":">LP.balanceOf"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f6ffe39fc3cc1849a13d51ded78dcf3b5c94216cc465a3b1b92bc78f59ae6cef","typeString":"literal_string \">LP.balanceOf\""}],"id":33776,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"35704:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":33790,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35704:96:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33791,"nodeType":"ExpressionStatement","src":"35704:96:108"},{"assignments":[33793],"declarations":[{"constant":false,"id":33793,"mutability":"mutable","name":"feePerToken","nameLocation":"35815:11:108","nodeType":"VariableDeclaration","scope":34093,"src":"35807:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33792,"name":"uint256","nodeType":"ElementaryTypeName","src":"35807:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33799,"initialValue":{"arguments":[{"expression":{"id":33795,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33720,"src":"35842:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33796,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35847:7:108","memberName":"swapFee","nodeType":"MemberAccess","referencedDeclaration":30763,"src":"35842:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":33797,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33759,"src":"35856:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33794,"name":"_feePerToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32372,"src":"35829:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":33798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35829:37:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"35807:59:108"},{"assignments":[33804],"declarations":[{"constant":false,"id":33804,"mutability":"mutable","name":"fees","nameLocation":"35889:4:108","nodeType":"VariableDeclaration","scope":34093,"src":"35872:21:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33802,"name":"uint256","nodeType":"ElementaryTypeName","src":"35872:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33803,"nodeType":"ArrayTypeName","src":"35872:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":33810,"initialValue":{"arguments":[{"id":33808,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33759,"src":"35910:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33807,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"35896:13:108","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":33805,"name":"uint256","nodeType":"ElementaryTypeName","src":"35900:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33806,"nodeType":"ArrayTypeName","src":"35900:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":33809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35896:24:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"35872:48:108"},{"id":34000,"nodeType":"Block","src":"35926:1047:108","statements":[{"assignments":[33815],"declarations":[{"constant":false,"id":33815,"mutability":"mutable","name":"balances1","nameLocation":"35951:9:108","nodeType":"VariableDeclaration","scope":34000,"src":"35934:26:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33813,"name":"uint256","nodeType":"ElementaryTypeName","src":"35934:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33814,"nodeType":"ArrayTypeName","src":"35934:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":33821,"initialValue":{"arguments":[{"id":33819,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33759,"src":"35977:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33818,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"35963:13:108","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":33816,"name":"uint256","nodeType":"ElementaryTypeName","src":"35967:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33817,"nodeType":"ArrayTypeName","src":"35967:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":33820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35963:24:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"35934:53:108"},{"expression":{"id":33835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33822,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"35995:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33824,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"35997:2:108","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":30799,"src":"35995:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"expression":{"id":33827,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"36011:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33828,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36013:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30813,"src":"36011:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":33829,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"36023:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33830,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36025:11:108","memberName":"multipliers","nodeType":"MemberAccess","referencedDeclaration":30816,"src":"36023:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":33826,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[31527,31545],"referencedDeclaration":31527,"src":"36007:3:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":33831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36007:30:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":33832,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"36039:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33833,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36041:8:108","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":30805,"src":"36039:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33825,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31463,"src":"36002:4:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":33834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36002:48:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35995:55:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33836,"nodeType":"ExpressionStatement","src":"35995:55:108"},{"body":{"id":33872,"nodeType":"Block","src":"36091:186:108","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":33844,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"36109:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33845,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36111:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30813,"src":"36109:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33847,"indexExpression":{"id":33846,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33838,"src":"36120:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"36109:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"baseExpression":{"id":33848,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33723,"src":"36126:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33850,"indexExpression":{"id":33849,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33838,"src":"36134:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"36126:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36109:27:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7769746864726177206d6f7265207468616e20617661696c61626c65","id":33852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"36138:30:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_a5d69ce6c1af4155857291c80267a8fe45eaf0a8a37d5e7aef002f4e00be6446","typeString":"literal_string \"withdraw more than available\""},"value":"withdraw more than available"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a5d69ce6c1af4155857291c80267a8fe45eaf0a8a37d5e7aef002f4e00be6446","typeString":"literal_string \"withdraw more than available\""}],"id":33843,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"36101:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":33853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36101:68:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33854,"nodeType":"ExpressionStatement","src":"36101:68:108"},{"id":33871,"nodeType":"UncheckedBlock","src":"36180:89:108","statements":[{"expression":{"id":33866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":33855,"name":"balances1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33815,"src":"36202:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33857,"indexExpression":{"id":33856,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33838,"src":"36212:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"36202:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":33858,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"36217:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33859,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36219:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30813,"src":"36217:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33861,"indexExpression":{"id":33860,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33838,"src":"36228:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"36217:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":33862,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33723,"src":"36233:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33864,"indexExpression":{"id":33863,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33838,"src":"36241:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"36233:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36217:26:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36202:41:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33867,"nodeType":"ExpressionStatement","src":"36202:41:108"},{"expression":{"id":33869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"36255:3:108","subExpression":{"id":33868,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33838,"src":"36257:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33870,"nodeType":"ExpressionStatement","src":"36255:3:108"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33840,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33838,"src":"36074:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":33841,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33759,"src":"36078:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36074:13:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33873,"initializationExpression":{"assignments":[33838],"declarations":[{"constant":false,"id":33838,"mutability":"mutable","name":"i","nameLocation":"36071:1:108","nodeType":"VariableDeclaration","scope":33873,"src":"36063:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33837,"name":"uint256","nodeType":"ElementaryTypeName","src":"36063:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33839,"nodeType":"VariableDeclarationStatement","src":"36063:9:108"},"nodeType":"ForStatement","src":"36058:219:108"},{"expression":{"id":33886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33874,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"36284:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33876,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"36286:2:108","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":30801,"src":"36284:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":33879,"name":"balances1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33815,"src":"36300:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":33880,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"36311:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33881,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36313:11:108","memberName":"multipliers","nodeType":"MemberAccess","referencedDeclaration":30816,"src":"36311:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":33878,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[31527,31545],"referencedDeclaration":31527,"src":"36296:3:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":33882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36296:29:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":33883,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"36327:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33884,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36329:8:108","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":30805,"src":"36327:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33877,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31463,"src":"36291:4:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":33885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36291:47:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36284:54:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33887,"nodeType":"ExpressionStatement","src":"36284:54:108"},{"body":{"id":33984,"nodeType":"Block","src":"36380:524:108","statements":[{"id":33929,"nodeType":"Block","src":"36390:221:108","statements":[{"assignments":[33895],"declarations":[{"constant":false,"id":33895,"mutability":"mutable","name":"idealBalance","nameLocation":"36410:12:108","nodeType":"VariableDeclaration","scope":33929,"src":"36402:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33894,"name":"uint256","nodeType":"ElementaryTypeName","src":"36402:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33907,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":33896,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"36426:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33897,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36428:2:108","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":30801,"src":"36426:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"baseExpression":{"expression":{"id":33898,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"36433:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33899,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36435:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30813,"src":"36433:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33901,"indexExpression":{"id":33900,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33889,"src":"36444:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"36433:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36426:20:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":33903,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"36425:22:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":33904,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"36450:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33905,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36452:2:108","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":30799,"src":"36450:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36425:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"36402:52:108"},{"assignments":[33909],"declarations":[{"constant":false,"id":33909,"mutability":"mutable","name":"difference","nameLocation":"36474:10:108","nodeType":"VariableDeclaration","scope":33929,"src":"36466:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33908,"name":"uint256","nodeType":"ElementaryTypeName","src":"36466:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33916,"initialValue":{"arguments":[{"baseExpression":{"id":33912,"name":"balances1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33815,"src":"36511:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33914,"indexExpression":{"id":33913,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33889,"src":"36521:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"36511:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33910,"name":"idealBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33895,"src":"36487:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"36500:10:108","memberName":"difference","nodeType":"MemberAccess","referencedDeclaration":30644,"src":"36487:23:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":33915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36487:37:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"36466:58:108"},{"expression":{"id":33927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":33917,"name":"fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33804,"src":"36536:4:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33919,"indexExpression":{"id":33918,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33889,"src":"36541:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"36536:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33920,"name":"feePerToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33793,"src":"36547:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":33921,"name":"difference","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33909,"src":"36561:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36547:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":33923,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"36546:26:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":33924,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"36575:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":33925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"36585:15:108","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"36575:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36546:54:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36536:64:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33928,"nodeType":"ExpressionStatement","src":"36536:64:108"}]},{"assignments":[33931],"declarations":[{"constant":false,"id":33931,"mutability":"mutable","name":"adminFee","nameLocation":"36628:8:108","nodeType":"VariableDeclaration","scope":33984,"src":"36620:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33930,"name":"uint256","nodeType":"ElementaryTypeName","src":"36620:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33942,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":33932,"name":"fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33804,"src":"36640:4:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33934,"indexExpression":{"id":33933,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33889,"src":"36645:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"36640:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":33935,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33720,"src":"36650:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33936,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36655:8:108","memberName":"adminFee","nodeType":"MemberAccess","referencedDeclaration":30765,"src":"36650:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36640:23:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":33938,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"36639:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":33939,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"36667:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":33940,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"36677:15:108","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"36667:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36639:53:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"36620:72:108"},{"expression":{"id":33953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":33943,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33720,"src":"36702:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33946,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36707:8:108","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":30778,"src":"36702:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":33947,"indexExpression":{"id":33945,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33889,"src":"36716:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"36702:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":33948,"name":"balances1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33815,"src":"36721:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33950,"indexExpression":{"id":33949,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33889,"src":"36731:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"36721:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":33951,"name":"adminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33931,"src":"36736:8:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36721:23:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36702:42:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33954,"nodeType":"ExpressionStatement","src":"36702:42:108"},{"expression":{"id":33966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":33955,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33720,"src":"36754:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33958,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36759:9:108","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":30781,"src":"36754:14:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":33959,"indexExpression":{"id":33957,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33889,"src":"36769:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"36754:17:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":33960,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33720,"src":"36774:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":33961,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36779:9:108","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":30781,"src":"36774:14:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":33963,"indexExpression":{"id":33962,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33889,"src":"36789:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"36774:17:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":33964,"name":"adminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33931,"src":"36794:8:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36774:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36754:48:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33967,"nodeType":"ExpressionStatement","src":"36754:48:108"},{"expression":{"id":33978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":33968,"name":"balances1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33815,"src":"36812:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33970,"indexExpression":{"id":33969,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33889,"src":"36822:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"36812:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":33971,"name":"balances1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33815,"src":"36827:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33973,"indexExpression":{"id":33972,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33889,"src":"36837:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"36827:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":33974,"name":"fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33804,"src":"36842:4:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33976,"indexExpression":{"id":33975,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33889,"src":"36847:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"36842:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36827:22:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36812:37:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33979,"nodeType":"ExpressionStatement","src":"36812:37:108"},{"id":33983,"nodeType":"UncheckedBlock","src":"36860:36:108","statements":[{"expression":{"id":33981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"36882:3:108","subExpression":{"id":33980,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33889,"src":"36884:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33982,"nodeType":"ExpressionStatement","src":"36882:3:108"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33891,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33889,"src":"36363:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":33892,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33759,"src":"36367:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36363:13:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33985,"initializationExpression":{"assignments":[33889],"declarations":[{"constant":false,"id":33889,"mutability":"mutable","name":"i","nameLocation":"36360:1:108","nodeType":"VariableDeclaration","scope":33985,"src":"36352:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33888,"name":"uint256","nodeType":"ElementaryTypeName","src":"36352:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33890,"nodeType":"VariableDeclarationStatement","src":"36352:9:108"},"nodeType":"ForStatement","src":"36347:557:108"},{"expression":{"id":33998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33986,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"36912:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33988,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"36914:2:108","memberName":"d2","nodeType":"MemberAccess","referencedDeclaration":30803,"src":"36912:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":33991,"name":"balances1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33815,"src":"36928:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":33992,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"36939:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33993,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36941:11:108","memberName":"multipliers","nodeType":"MemberAccess","referencedDeclaration":30816,"src":"36939:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":33990,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[31527,31545],"referencedDeclaration":31527,"src":"36924:3:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":33994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36924:29:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":33995,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"36955:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":33996,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36957:8:108","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":30805,"src":"36955:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33989,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31463,"src":"36919:4:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":33997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36919:47:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36912:54:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33999,"nodeType":"ExpressionStatement","src":"36912:54:108"}]},{"assignments":[34002],"declarations":[{"constant":false,"id":34002,"mutability":"mutable","name":"tokenAmount","nameLocation":"36986:11:108","nodeType":"VariableDeclaration","scope":34093,"src":"36978:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34001,"name":"uint256","nodeType":"ElementaryTypeName","src":"36978:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34016,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":34003,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"37002:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":34004,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37004:2:108","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":30799,"src":"37002:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":34005,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"37009:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":34006,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37011:2:108","memberName":"d2","nodeType":"MemberAccess","referencedDeclaration":30803,"src":"37009:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37002:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34008,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"37001:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":34009,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"37017:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":34010,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37019:11:108","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":30810,"src":"37017:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37001:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34012,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"37000:31:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":34013,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"37034:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":34014,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37036:2:108","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":30799,"src":"37034:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37000:38:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"36978:60:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34018,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34002,"src":"37052:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":34019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"37067:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"37052:16:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"217a65726f20616d6f756e74","id":34021,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"37070:14:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_ad3743fd30ada6469788b58d66f88c735cea919feecd588df3ad8b7d9a2a3507","typeString":"literal_string \"!zero amount\""},"value":"!zero amount"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ad3743fd30ada6469788b58d66f88c735cea919feecd588df3ad8b7d9a2a3507","typeString":"literal_string \"!zero amount\""}],"id":34017,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"37044:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":34022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37044:41:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34023,"nodeType":"ExpressionStatement","src":"37044:41:108"},{"expression":{"id":34028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34024,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34002,"src":"37091:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34025,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34002,"src":"37105:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":34026,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"37119:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"37105:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37091:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34029,"nodeType":"ExpressionStatement","src":"37091:29:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34031,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34002,"src":"37135:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":34032,"name":"maxBurnAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33725,"src":"37150:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37135:28:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"746f6b656e416d6f756e74203e206d61784275726e416d6f756e74","id":34034,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"37165:29:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_a7a312f14c5778159227ed2c11234cdc582e54216594239df89b5aac8a9fbfd9","typeString":"literal_string \"tokenAmount > maxBurnAmount\""},"value":"tokenAmount > maxBurnAmount"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a7a312f14c5778159227ed2c11234cdc582e54216594239df89b5aac8a9fbfd9","typeString":"literal_string \"tokenAmount > maxBurnAmount\""}],"id":34030,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"37127:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":34035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37127:68:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34036,"nodeType":"ExpressionStatement","src":"37127:68:108"},{"expression":{"arguments":[{"expression":{"id":34042,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"37221:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37225:6:108","memberName":"sender","nodeType":"MemberAccess","src":"37221:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34044,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34002,"src":"37233:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":34037,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"37202:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":34040,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37204:7:108","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":30808,"src":"37202:9:108","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":34041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37212:8:108","memberName":"burnFrom","nodeType":"MemberAccess","referencedDeclaration":23143,"src":"37202:18:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":34045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37202:43:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34046,"nodeType":"ExpressionStatement","src":"37202:43:108"},{"body":{"id":34074,"nodeType":"Block","src":"37285:140:108","statements":[{"expression":{"arguments":[{"arguments":[{"baseExpression":{"expression":{"id":34058,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33720,"src":"37332:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":34059,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37337:12:108","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"37332:17:108","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":34061,"indexExpression":{"id":34060,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34048,"src":"37350:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"37332:20:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":34057,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"37324:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34056,"name":"address","nodeType":"ElementaryTypeName","src":"37324:7:108","typeDescriptions":{}}},"id":34062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37324:29:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":34063,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"37355:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37359:6:108","memberName":"sender","nodeType":"MemberAccess","src":"37355:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":34065,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33723,"src":"37367:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34067,"indexExpression":{"id":34066,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34048,"src":"37375:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"37367:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":34053,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"37293:10:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":34055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37304:19:108","memberName":"handleOutgoingAsset","nodeType":"MemberAccess","referencedDeclaration":27809,"src":"37293:30:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":34068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37293:85:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34069,"nodeType":"ExpressionStatement","src":"37293:85:108"},{"id":34073,"nodeType":"UncheckedBlock","src":"37387:32:108","statements":[{"expression":{"id":34071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"37407:3:108","subExpression":{"id":34070,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34048,"src":"37409:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34072,"nodeType":"ExpressionStatement","src":"37407:3:108"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34050,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34048,"src":"37268:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":34051,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33759,"src":"37272:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37268:13:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34075,"initializationExpression":{"assignments":[34048],"declarations":[{"constant":false,"id":34048,"mutability":"mutable","name":"i","nameLocation":"37265:1:108","nodeType":"VariableDeclaration","scope":34075,"src":"37257:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34047,"name":"uint256","nodeType":"ElementaryTypeName","src":"37257:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34049,"nodeType":"VariableDeclarationStatement","src":"37257:9:108"},"nodeType":"ForStatement","src":"37252:173:108"},{"eventCall":{"arguments":[{"expression":{"id":34077,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33720,"src":"37461:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":34078,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37466:3:108","memberName":"key","nodeType":"MemberAccess","referencedDeclaration":30753,"src":"37461:8:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":34079,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"37471:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37475:6:108","memberName":"sender","nodeType":"MemberAccess","src":"37471:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34081,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33723,"src":"37483:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":34082,"name":"fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33804,"src":"37492:4:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":34083,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"37498:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":34084,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37500:2:108","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":30801,"src":"37498:4:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":34085,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33732,"src":"37504:1:108","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$30817_memory_ptr","typeString":"struct SwapUtils.ManageLiquidityInfo memory"}},"id":34086,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37506:11:108","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":30810,"src":"37504:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":34087,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34002,"src":"37520:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37504:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":34076,"name":"RemoveLiquidityImbalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30739,"src":"37436:24:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (bytes32,address,uint256[] memory,uint256[] memory,uint256,uint256)"}},"id":34089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37436:96:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34090,"nodeType":"EmitStatement","src":"37431:101:108"},{"expression":{"id":34091,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34002,"src":"37546:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":33729,"id":34092,"nodeType":"Return","src":"37539:18:108"}]},"documentation":{"id":33717,"nodeType":"StructuredDocumentation","src":"34719:428:108","text":" @notice Remove liquidity from the pool, weighted differently than the\n pool's current balances.\n @param self Swap struct to read from and write to\n @param amounts how much of each token to withdraw\n @param maxBurnAmount the max LP token provider is willing to pay to\n remove liquidity. Useful as a front-running mitigation.\n @return actual amount of LP tokens burned in the withdrawal"},"id":34094,"implemented":true,"kind":"function","modifiers":[],"name":"removeLiquidityImbalance","nameLocation":"35159:24:108","nodeType":"FunctionDefinition","parameters":{"id":33726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33720,"mutability":"mutable","name":"self","nameLocation":"35202:4:108","nodeType":"VariableDeclaration","scope":34094,"src":"35189:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":33719,"nodeType":"UserDefinedTypeName","pathNode":{"id":33718,"name":"Swap","nameLocations":["35189:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"35189:4:108"},"referencedDeclaration":30786,"src":"35189:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":33723,"mutability":"mutable","name":"amounts","nameLocation":"35229:7:108","nodeType":"VariableDeclaration","scope":34094,"src":"35212:24:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33721,"name":"uint256","nodeType":"ElementaryTypeName","src":"35212:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33722,"nodeType":"ArrayTypeName","src":"35212:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":33725,"mutability":"mutable","name":"maxBurnAmount","nameLocation":"35250:13:108","nodeType":"VariableDeclaration","scope":34094,"src":"35242:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33724,"name":"uint256","nodeType":"ElementaryTypeName","src":"35242:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"35183:84:108"},"returnParameters":{"id":33729,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33728,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34094,"src":"35286:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33727,"name":"uint256","nodeType":"ElementaryTypeName","src":"35286:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"35285:9:108"},"scope":34244,"src":"35150:2412:108","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":34158,"nodeType":"Block","src":"37795:363:108","statements":[{"assignments":[34104],"declarations":[{"constant":false,"id":34104,"mutability":"mutable","name":"numTokens","nameLocation":"37809:9:108","nodeType":"VariableDeclaration","scope":34158,"src":"37801:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34103,"name":"uint256","nodeType":"ElementaryTypeName","src":"37801:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34108,"initialValue":{"expression":{"expression":{"id":34105,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34098,"src":"37821:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":34106,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37826:12:108","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"37821:17:108","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":34107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37839:6:108","memberName":"length","nodeType":"MemberAccess","src":"37821:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"37801:44:108"},{"body":{"id":34156,"nodeType":"Block","src":"37884:270:108","statements":[{"assignments":[34117],"declarations":[{"constant":false,"id":34117,"mutability":"mutable","name":"token","nameLocation":"37899:5:108","nodeType":"VariableDeclaration","scope":34156,"src":"37892:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":34116,"nodeType":"UserDefinedTypeName","pathNode":{"id":34115,"name":"IERC20","nameLocations":["37892:6:108"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"37892:6:108"},"referencedDeclaration":10812,"src":"37892:6:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"}],"id":34122,"initialValue":{"baseExpression":{"expression":{"id":34118,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34098,"src":"37907:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":34119,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37912:12:108","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"37907:17:108","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":34121,"indexExpression":{"id":34120,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34110,"src":"37925:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"37907:20:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"37892:35:108"},{"assignments":[34124],"declarations":[{"constant":false,"id":34124,"mutability":"mutable","name":"balance","nameLocation":"37943:7:108","nodeType":"VariableDeclaration","scope":34156,"src":"37935:15:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34123,"name":"uint256","nodeType":"ElementaryTypeName","src":"37935:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34129,"initialValue":{"baseExpression":{"expression":{"id":34125,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34098,"src":"37953:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":34126,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37958:9:108","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":30781,"src":"37953:14:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":34128,"indexExpression":{"id":34127,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34110,"src":"37968:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"37953:17:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"37935:35:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34130,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34124,"src":"37982:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":34131,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"37993:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"37982:12:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34151,"nodeType":"IfStatement","src":"37978:130:108","trueBody":{"id":34150,"nodeType":"Block","src":"37996:112:108","statements":[{"expression":{"id":34137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"38006:24:108","subExpression":{"baseExpression":{"expression":{"id":34133,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34098,"src":"38013:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":34134,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"38018:9:108","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":30781,"src":"38013:14:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":34136,"indexExpression":{"id":34135,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34110,"src":"38028:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"38013:17:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34138,"nodeType":"ExpressionStatement","src":"38006:24:108"},{"expression":{"arguments":[{"arguments":[{"id":34144,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34117,"src":"38079:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":34143,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"38071:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34142,"name":"address","nodeType":"ElementaryTypeName","src":"38071:7:108","typeDescriptions":{}}},"id":34145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38071:14:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34146,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34100,"src":"38087:2:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34147,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34124,"src":"38091:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":34139,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"38040:10:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":34141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38051:19:108","memberName":"handleOutgoingAsset","nodeType":"MemberAccess","referencedDeclaration":27809,"src":"38040:30:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":34148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38040:59:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34149,"nodeType":"ExpressionStatement","src":"38040:59:108"}]}},{"id":34155,"nodeType":"UncheckedBlock","src":"38116:32:108","statements":[{"expression":{"id":34153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"38136:3:108","subExpression":{"id":34152,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34110,"src":"38138:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34154,"nodeType":"ExpressionStatement","src":"38136:3:108"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34112,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34110,"src":"37867:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":34113,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34104,"src":"37871:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37867:13:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34157,"initializationExpression":{"assignments":[34110],"declarations":[{"constant":false,"id":34110,"mutability":"mutable","name":"i","nameLocation":"37864:1:108","nodeType":"VariableDeclaration","scope":34157,"src":"37856:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34109,"name":"uint256","nodeType":"ElementaryTypeName","src":"37856:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34111,"nodeType":"VariableDeclarationStatement","src":"37856:9:108"},"nodeType":"ForStatement","src":"37851:303:108"}]},"documentation":{"id":34095,"nodeType":"StructuredDocumentation","src":"37566:159:108","text":" @notice withdraw all admin fees to a given address\n @param self Swap struct to withdraw fees from\n @param to Address to send the fees to"},"id":34159,"implemented":true,"kind":"function","modifiers":[],"name":"withdrawAdminFees","nameLocation":"37737:17:108","nodeType":"FunctionDefinition","parameters":{"id":34101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34098,"mutability":"mutable","name":"self","nameLocation":"37768:4:108","nodeType":"VariableDeclaration","scope":34159,"src":"37755:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":34097,"nodeType":"UserDefinedTypeName","pathNode":{"id":34096,"name":"Swap","nameLocations":["37755:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"37755:4:108"},"referencedDeclaration":30786,"src":"37755:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":34100,"mutability":"mutable","name":"to","nameLocation":"37782:2:108","nodeType":"VariableDeclaration","scope":34159,"src":"37774:10:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34099,"name":"address","nodeType":"ElementaryTypeName","src":"37774:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"37754:31:108"},"returnParameters":{"id":34102,"nodeType":"ParameterList","parameters":[],"src":"37795:0:108"},"scope":34244,"src":"37728:430:108","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":34190,"nodeType":"Block","src":"38452:152:108","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34169,"name":"newAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34165,"src":"38466:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34173,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"expression":{"id":34170,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"38480:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":34171,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"38490:13:108","memberName":"MAX_ADMIN_FEE","nodeType":"MemberAccess","referencedDeclaration":29278,"src":"38480:23:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":34172,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"38506:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"38480:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"38466:41:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"746f6f2068696768","id":34175,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"38509:10:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_8649b1e5b06e4f5968b2a3f0fa64e06710ce221cf73d9057a24a3fccd677b635","typeString":"literal_string \"too high\""},"value":"too high"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8649b1e5b06e4f5968b2a3f0fa64e06710ce221cf73d9057a24a3fccd677b635","typeString":"literal_string \"too high\""}],"id":34168,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"38458:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":34176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38458:62:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34177,"nodeType":"ExpressionStatement","src":"38458:62:108"},{"expression":{"id":34182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":34178,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34163,"src":"38526:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":34180,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"38531:8:108","memberName":"adminFee","nodeType":"MemberAccess","referencedDeclaration":30765,"src":"38526:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":34181,"name":"newAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34165,"src":"38542:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"38526:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34183,"nodeType":"ExpressionStatement","src":"38526:27:108"},{"eventCall":{"arguments":[{"expression":{"id":34185,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34163,"src":"38577:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":34186,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"38582:3:108","memberName":"key","nodeType":"MemberAccess","referencedDeclaration":30753,"src":"38577:8:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":34187,"name":"newAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34165,"src":"38587:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":34184,"name":"NewAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30745,"src":"38565:11:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,uint256)"}},"id":34188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38565:34:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34189,"nodeType":"EmitStatement","src":"38560:39:108"}]},"documentation":{"id":34160,"nodeType":"StructuredDocumentation","src":"38162:217:108","text":" @notice Sets the admin fee\n @dev adminFee cannot be higher than 100% of the swap fee\n @param self Swap struct to update\n @param newAdminFee new admin fee to be applied on future transactions"},"id":34191,"implemented":true,"kind":"function","modifiers":[],"name":"setAdminFee","nameLocation":"38391:11:108","nodeType":"FunctionDefinition","parameters":{"id":34166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34163,"mutability":"mutable","name":"self","nameLocation":"38416:4:108","nodeType":"VariableDeclaration","scope":34191,"src":"38403:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":34162,"nodeType":"UserDefinedTypeName","pathNode":{"id":34161,"name":"Swap","nameLocations":["38403:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"38403:4:108"},"referencedDeclaration":30786,"src":"38403:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":34165,"mutability":"mutable","name":"newAdminFee","nameLocation":"38430:11:108","nodeType":"VariableDeclaration","scope":34191,"src":"38422:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34164,"name":"uint256","nodeType":"ElementaryTypeName","src":"38422:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"38402:40:108"},"returnParameters":{"id":34167,"nodeType":"ParameterList","parameters":[],"src":"38452:0:108"},"scope":34244,"src":"38382:222:108","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":34222,"nodeType":"Block","src":"38885:146:108","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34201,"name":"newSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34197,"src":"38899:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34205,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"expression":{"id":34202,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"38912:9:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":34203,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"38922:12:108","memberName":"MAX_SWAP_FEE","nodeType":"MemberAccess","referencedDeclaration":29274,"src":"38912:22:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":34204,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"38937:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"38912:26:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"38899:39:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"746f6f2068696768","id":34207,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"38940:10:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_8649b1e5b06e4f5968b2a3f0fa64e06710ce221cf73d9057a24a3fccd677b635","typeString":"literal_string \"too high\""},"value":"too high"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8649b1e5b06e4f5968b2a3f0fa64e06710ce221cf73d9057a24a3fccd677b635","typeString":"literal_string \"too high\""}],"id":34200,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"38891:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":34208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38891:60:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34209,"nodeType":"ExpressionStatement","src":"38891:60:108"},{"expression":{"id":34214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":34210,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34195,"src":"38957:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":34212,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"38962:7:108","memberName":"swapFee","nodeType":"MemberAccess","referencedDeclaration":30763,"src":"38957:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":34213,"name":"newSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34197,"src":"38972:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"38957:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34215,"nodeType":"ExpressionStatement","src":"38957:25:108"},{"eventCall":{"arguments":[{"expression":{"id":34217,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34195,"src":"39005:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":34218,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39010:3:108","memberName":"key","nodeType":"MemberAccess","referencedDeclaration":30753,"src":"39005:8:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":34219,"name":"newSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34197,"src":"39015:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":34216,"name":"NewSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30751,"src":"38994:10:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,uint256)"}},"id":34220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38994:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34221,"nodeType":"EmitStatement","src":"38989:37:108"}]},"documentation":{"id":34192,"nodeType":"StructuredDocumentation","src":"38608:206:108","text":" @notice update the swap fee\n @dev fee cannot be higher than 1% of each swap\n @param self Swap struct to update\n @param newSwapFee new swap fee to be applied on future transactions"},"id":34223,"implemented":true,"kind":"function","modifiers":[],"name":"setSwapFee","nameLocation":"38826:10:108","nodeType":"FunctionDefinition","parameters":{"id":34198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34195,"mutability":"mutable","name":"self","nameLocation":"38850:4:108","nodeType":"VariableDeclaration","scope":34223,"src":"38837:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":34194,"nodeType":"UserDefinedTypeName","pathNode":{"id":34193,"name":"Swap","nameLocations":["38837:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"38837:4:108"},"referencedDeclaration":30786,"src":"38837:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"},{"constant":false,"id":34197,"mutability":"mutable","name":"newSwapFee","nameLocation":"38864:10:108","nodeType":"VariableDeclaration","scope":34223,"src":"38856:18:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34196,"name":"uint256","nodeType":"ElementaryTypeName","src":"38856:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"38836:39:108"},"returnParameters":{"id":34199,"nodeType":"ParameterList","parameters":[],"src":"38885:0:108"},"scope":34244,"src":"38817:214:108","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":34242,"nodeType":"Block","src":"39306:65:108","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":34240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"39319:14:108","subExpression":{"expression":{"id":34232,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34227,"src":"39320:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":34233,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39325:8:108","memberName":"disabled","nodeType":"MemberAccess","referencedDeclaration":30783,"src":"39320:13:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":34235,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34227,"src":"39337:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap storage pointer"}},"id":34236,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39342:12:108","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":30772,"src":"39337:17:108","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":34237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39355:6:108","memberName":"length","nodeType":"MemberAccess","src":"39337:24:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":34238,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"39365:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"39337:29:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"39319:47:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":34231,"id":34241,"nodeType":"Return","src":"39312:54:108"}]},"documentation":{"id":34224,"nodeType":"StructuredDocumentation","src":"39035:204:108","text":" @notice Check if this stableswap pool exists and is valid (i.e. has been\n initialized and tokens have been added).\n @return bool true if this stableswap pool is valid, false if not."},"id":34243,"implemented":true,"kind":"function","modifiers":[],"name":"exists","nameLocation":"39251:6:108","nodeType":"FunctionDefinition","parameters":{"id":34228,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34227,"mutability":"mutable","name":"self","nameLocation":"39271:4:108","nodeType":"VariableDeclaration","scope":34243,"src":"39258:17:108","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"},"typeName":{"id":34226,"nodeType":"UserDefinedTypeName","pathNode":{"id":34225,"name":"Swap","nameLocations":["39258:4:108"],"nodeType":"IdentifierPath","referencedDeclaration":30786,"src":"39258:4:108"},"referencedDeclaration":30786,"src":"39258:4:108","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$30786_storage_ptr","typeString":"struct SwapUtils.Swap"}},"visibility":"internal"}],"src":"39257:19:108"},"returnParameters":{"id":34231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34230,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34243,"src":"39300:4:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":34229,"name":"bool","nodeType":"ElementaryTypeName","src":"39300:4:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"39299:6:108"},"scope":34244,"src":"39242:129:108","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":34245,"src":"834:38539:108","usedErrors":[]}],"src":"39:39335:108"},"id":108},"contracts/core/connext/libraries/SwapUtilsExternal.sol":{"ast":{"absolutePath":"contracts/core/connext/libraries/SwapUtilsExternal.sol","exportedSymbols":{"AssetLogic":[28696],"Constants":[29304],"IERC20":[10812],"LPToken":[23179],"MathUtils":[30645],"SafeERC20":[11154],"SwapUtilsExternal":[37721]},"id":37722,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":34246,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:109"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":34249,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":37722,"sourceUnit":11155,"src":"64:90:109","symbolAliases":[{"foreign":{"id":34247,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11154,"src":"72:9:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":34248,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10812,"src":"83:6:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/helpers/LPToken.sol","file":"../helpers/LPToken.sol","id":34251,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":37722,"sourceUnit":23180,"src":"156:47:109","symbolAliases":[{"foreign":{"id":34250,"name":"LPToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23179,"src":"164:7:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/MathUtils.sol","file":"./MathUtils.sol","id":34253,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":37722,"sourceUnit":30646,"src":"205:42:109","symbolAliases":[{"foreign":{"id":34252,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30645,"src":"213:9:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/AssetLogic.sol","file":"./AssetLogic.sol","id":34255,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":37722,"sourceUnit":28697,"src":"248:44:109","symbolAliases":[{"foreign":{"id":34254,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"256:10:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/libraries/Constants.sol","file":"./Constants.sol","id":34257,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":37722,"sourceUnit":29305,"src":"293:42:109","symbolAliases":[{"foreign":{"id":34256,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"301:9:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SwapUtilsExternal","contractDependencies":[],"contractKind":"library","documentation":{"id":34258,"nodeType":"StructuredDocumentation","src":"337:443:109","text":" @title SwapUtilsExternal library\n @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\n @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\n for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\n Admin functions should be protected within contracts using this library."},"fullyImplemented":true,"id":37721,"linearizedBaseContracts":[37721],"name":"SwapUtilsExternal","nameLocation":"789:17:109","nodeType":"ContractDefinition","nodes":[{"global":false,"id":34262,"libraryName":{"id":34259,"name":"SafeERC20","nameLocations":["817:9:109"],"nodeType":"IdentifierPath","referencedDeclaration":11154,"src":"817:9:109"},"nodeType":"UsingForDirective","src":"811:27:109","typeName":{"id":34261,"nodeType":"UserDefinedTypeName","pathNode":{"id":34260,"name":"IERC20","nameLocations":["831:6:109"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"831:6:109"},"referencedDeclaration":10812,"src":"831:6:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}},{"global":false,"id":34265,"libraryName":{"id":34263,"name":"MathUtils","nameLocations":["847:9:109"],"nodeType":"IdentifierPath","referencedDeclaration":30645,"src":"847:9:109"},"nodeType":"UsingForDirective","src":"841:28:109","typeName":{"id":34264,"name":"uint256","nodeType":"ElementaryTypeName","src":"861:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"anonymous":false,"eventSelector":"c6c1e0630dbe9130cc068028486c0d118ddcea348550819defd5cb8c257f8a38","id":34277,"name":"TokenSwap","nameLocation":"899:9:109","nodeType":"EventDefinition","parameters":{"id":34276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34267,"indexed":true,"mutability":"mutable","name":"buyer","nameLocation":"925:5:109","nodeType":"VariableDeclaration","scope":34277,"src":"909:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34266,"name":"address","nodeType":"ElementaryTypeName","src":"909:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34269,"indexed":false,"mutability":"mutable","name":"tokensSold","nameLocation":"940:10:109","nodeType":"VariableDeclaration","scope":34277,"src":"932:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34268,"name":"uint256","nodeType":"ElementaryTypeName","src":"932:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34271,"indexed":false,"mutability":"mutable","name":"tokensBought","nameLocation":"960:12:109","nodeType":"VariableDeclaration","scope":34277,"src":"952:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34270,"name":"uint256","nodeType":"ElementaryTypeName","src":"952:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34273,"indexed":false,"mutability":"mutable","name":"soldId","nameLocation":"982:6:109","nodeType":"VariableDeclaration","scope":34277,"src":"974:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":34272,"name":"uint128","nodeType":"ElementaryTypeName","src":"974:7:109","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":34275,"indexed":false,"mutability":"mutable","name":"boughtId","nameLocation":"998:8:109","nodeType":"VariableDeclaration","scope":34277,"src":"990:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":34274,"name":"uint128","nodeType":"ElementaryTypeName","src":"990:7:109","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"908:99:109"},"src":"893:115:109"},{"anonymous":false,"eventSelector":"189c623b666b1b45b83d7178f39b8c087cb09774317ca2f53c2d3c3726f222a2","id":34291,"name":"AddLiquidity","nameLocation":"1017:12:109","nodeType":"EventDefinition","parameters":{"id":34290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34279,"indexed":true,"mutability":"mutable","name":"provider","nameLocation":"1051:8:109","nodeType":"VariableDeclaration","scope":34291,"src":"1035:24:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34278,"name":"address","nodeType":"ElementaryTypeName","src":"1035:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34282,"indexed":false,"mutability":"mutable","name":"tokenAmounts","nameLocation":"1075:12:109","nodeType":"VariableDeclaration","scope":34291,"src":"1065:22:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34280,"name":"uint256","nodeType":"ElementaryTypeName","src":"1065:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34281,"nodeType":"ArrayTypeName","src":"1065:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34285,"indexed":false,"mutability":"mutable","name":"fees","nameLocation":"1103:4:109","nodeType":"VariableDeclaration","scope":34291,"src":"1093:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34283,"name":"uint256","nodeType":"ElementaryTypeName","src":"1093:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34284,"nodeType":"ArrayTypeName","src":"1093:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34287,"indexed":false,"mutability":"mutable","name":"invariant","nameLocation":"1121:9:109","nodeType":"VariableDeclaration","scope":34291,"src":"1113:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34286,"name":"uint256","nodeType":"ElementaryTypeName","src":"1113:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34289,"indexed":false,"mutability":"mutable","name":"lpTokenSupply","nameLocation":"1144:13:109","nodeType":"VariableDeclaration","scope":34291,"src":"1136:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34288,"name":"uint256","nodeType":"ElementaryTypeName","src":"1136:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1029:132:109"},"src":"1011:151:109"},{"anonymous":false,"eventSelector":"88d38ed598fdd809c2bf01ee49cd24b7fdabf379a83d29567952b60324d58cef","id":34300,"name":"RemoveLiquidity","nameLocation":"1171:15:109","nodeType":"EventDefinition","parameters":{"id":34299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34293,"indexed":true,"mutability":"mutable","name":"provider","nameLocation":"1203:8:109","nodeType":"VariableDeclaration","scope":34300,"src":"1187:24:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34292,"name":"address","nodeType":"ElementaryTypeName","src":"1187:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34296,"indexed":false,"mutability":"mutable","name":"tokenAmounts","nameLocation":"1223:12:109","nodeType":"VariableDeclaration","scope":34300,"src":"1213:22:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34294,"name":"uint256","nodeType":"ElementaryTypeName","src":"1213:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34295,"nodeType":"ArrayTypeName","src":"1213:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34298,"indexed":false,"mutability":"mutable","name":"lpTokenSupply","nameLocation":"1245:13:109","nodeType":"VariableDeclaration","scope":34300,"src":"1237:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34297,"name":"uint256","nodeType":"ElementaryTypeName","src":"1237:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1186:73:109"},"src":"1165:95:109"},{"anonymous":false,"eventSelector":"43fb02998f4e03da2e0e6fff53fdbf0c40a9f45f145dc377fc30615d7d7a8a64","id":34312,"name":"RemoveLiquidityOne","nameLocation":"1269:18:109","nodeType":"EventDefinition","parameters":{"id":34311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34302,"indexed":true,"mutability":"mutable","name":"provider","nameLocation":"1309:8:109","nodeType":"VariableDeclaration","scope":34312,"src":"1293:24:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34301,"name":"address","nodeType":"ElementaryTypeName","src":"1293:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34304,"indexed":false,"mutability":"mutable","name":"lpTokenAmount","nameLocation":"1331:13:109","nodeType":"VariableDeclaration","scope":34312,"src":"1323:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34303,"name":"uint256","nodeType":"ElementaryTypeName","src":"1323:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34306,"indexed":false,"mutability":"mutable","name":"lpTokenSupply","nameLocation":"1358:13:109","nodeType":"VariableDeclaration","scope":34312,"src":"1350:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34305,"name":"uint256","nodeType":"ElementaryTypeName","src":"1350:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34308,"indexed":false,"mutability":"mutable","name":"boughtId","nameLocation":"1385:8:109","nodeType":"VariableDeclaration","scope":34312,"src":"1377:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34307,"name":"uint256","nodeType":"ElementaryTypeName","src":"1377:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34310,"indexed":false,"mutability":"mutable","name":"tokensBought","nameLocation":"1407:12:109","nodeType":"VariableDeclaration","scope":34312,"src":"1399:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34309,"name":"uint256","nodeType":"ElementaryTypeName","src":"1399:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1287:136:109"},"src":"1263:161:109"},{"anonymous":false,"eventSelector":"3631c28b1f9dd213e0319fb167b554d76b6c283a41143eb400a0d1adb1af1755","id":34326,"name":"RemoveLiquidityImbalance","nameLocation":"1433:24:109","nodeType":"EventDefinition","parameters":{"id":34325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34314,"indexed":true,"mutability":"mutable","name":"provider","nameLocation":"1479:8:109","nodeType":"VariableDeclaration","scope":34326,"src":"1463:24:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34313,"name":"address","nodeType":"ElementaryTypeName","src":"1463:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34317,"indexed":false,"mutability":"mutable","name":"tokenAmounts","nameLocation":"1503:12:109","nodeType":"VariableDeclaration","scope":34326,"src":"1493:22:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34315,"name":"uint256","nodeType":"ElementaryTypeName","src":"1493:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34316,"nodeType":"ArrayTypeName","src":"1493:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34320,"indexed":false,"mutability":"mutable","name":"fees","nameLocation":"1531:4:109","nodeType":"VariableDeclaration","scope":34326,"src":"1521:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34318,"name":"uint256","nodeType":"ElementaryTypeName","src":"1521:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34319,"nodeType":"ArrayTypeName","src":"1521:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34322,"indexed":false,"mutability":"mutable","name":"invariant","nameLocation":"1549:9:109","nodeType":"VariableDeclaration","scope":34326,"src":"1541:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34321,"name":"uint256","nodeType":"ElementaryTypeName","src":"1541:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34324,"indexed":false,"mutability":"mutable","name":"lpTokenSupply","nameLocation":"1572:13:109","nodeType":"VariableDeclaration","scope":34326,"src":"1564:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34323,"name":"uint256","nodeType":"ElementaryTypeName","src":"1564:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1457:132:109"},"src":"1427:163:109"},{"anonymous":false,"eventSelector":"ab599d640ca80cde2b09b128a4154a8dfe608cb80f4c9399c8b954b01fd35f38","id":34330,"name":"NewAdminFee","nameLocation":"1599:11:109","nodeType":"EventDefinition","parameters":{"id":34329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34328,"indexed":false,"mutability":"mutable","name":"newAdminFee","nameLocation":"1619:11:109","nodeType":"VariableDeclaration","scope":34330,"src":"1611:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34327,"name":"uint256","nodeType":"ElementaryTypeName","src":"1611:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1610:21:109"},"src":"1593:39:109"},{"anonymous":false,"eventSelector":"d88ea5155021c6f8dafa1a741e173f595cdf77ce7c17d43342131d7f06afdfe5","id":34334,"name":"NewSwapFee","nameLocation":"1641:10:109","nodeType":"EventDefinition","parameters":{"id":34333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34332,"indexed":false,"mutability":"mutable","name":"newSwapFee","nameLocation":"1660:10:109","nodeType":"VariableDeclaration","scope":34334,"src":"1652:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34331,"name":"uint256","nodeType":"ElementaryTypeName","src":"1652:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1651:20:109"},"src":"1635:37:109"},{"anonymous":false,"eventSelector":"a2b71ec6df949300b59aab36b55e189697b750119dd349fcfa8c0f779e83c254","id":34344,"name":"RampA","nameLocation":"1682:5:109","nodeType":"EventDefinition","parameters":{"id":34343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34336,"indexed":false,"mutability":"mutable","name":"oldA","nameLocation":"1696:4:109","nodeType":"VariableDeclaration","scope":34344,"src":"1688:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34335,"name":"uint256","nodeType":"ElementaryTypeName","src":"1688:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34338,"indexed":false,"mutability":"mutable","name":"newA","nameLocation":"1710:4:109","nodeType":"VariableDeclaration","scope":34344,"src":"1702:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34337,"name":"uint256","nodeType":"ElementaryTypeName","src":"1702:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34340,"indexed":false,"mutability":"mutable","name":"initialTime","nameLocation":"1724:11:109","nodeType":"VariableDeclaration","scope":34344,"src":"1716:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34339,"name":"uint256","nodeType":"ElementaryTypeName","src":"1716:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34342,"indexed":false,"mutability":"mutable","name":"futureTime","nameLocation":"1745:10:109","nodeType":"VariableDeclaration","scope":34344,"src":"1737:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34341,"name":"uint256","nodeType":"ElementaryTypeName","src":"1737:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1687:69:109"},"src":"1676:81:109"},{"anonymous":false,"eventSelector":"46e22fb3709ad289f62ce63d469248536dbc78d82b84a3d7e74ad606dc201938","id":34350,"name":"StopRampA","nameLocation":"1766:9:109","nodeType":"EventDefinition","parameters":{"id":34349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34346,"indexed":false,"mutability":"mutable","name":"currentA","nameLocation":"1784:8:109","nodeType":"VariableDeclaration","scope":34350,"src":"1776:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34345,"name":"uint256","nodeType":"ElementaryTypeName","src":"1776:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34348,"indexed":false,"mutability":"mutable","name":"time","nameLocation":"1802:4:109","nodeType":"VariableDeclaration","scope":34350,"src":"1794:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34347,"name":"uint256","nodeType":"ElementaryTypeName","src":"1794:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1775:32:109"},"src":"1760:48:109"},{"canonicalName":"SwapUtilsExternal.Swap","id":34379,"members":[{"constant":false,"id":34352,"mutability":"mutable","name":"initialA","nameLocation":"1986:8:109","nodeType":"VariableDeclaration","scope":34379,"src":"1978:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34351,"name":"uint256","nodeType":"ElementaryTypeName","src":"1978:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34354,"mutability":"mutable","name":"futureA","nameLocation":"2008:7:109","nodeType":"VariableDeclaration","scope":34379,"src":"2000:15:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34353,"name":"uint256","nodeType":"ElementaryTypeName","src":"2000:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34356,"mutability":"mutable","name":"initialATime","nameLocation":"2029:12:109","nodeType":"VariableDeclaration","scope":34379,"src":"2021:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34355,"name":"uint256","nodeType":"ElementaryTypeName","src":"2021:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34358,"mutability":"mutable","name":"futureATime","nameLocation":"2055:11:109","nodeType":"VariableDeclaration","scope":34379,"src":"2047:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34357,"name":"uint256","nodeType":"ElementaryTypeName","src":"2047:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34360,"mutability":"mutable","name":"swapFee","nameLocation":"2103:7:109","nodeType":"VariableDeclaration","scope":34379,"src":"2095:15:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34359,"name":"uint256","nodeType":"ElementaryTypeName","src":"2095:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34362,"mutability":"mutable","name":"adminFee","nameLocation":"2124:8:109","nodeType":"VariableDeclaration","scope":34379,"src":"2116:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34361,"name":"uint256","nodeType":"ElementaryTypeName","src":"2116:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34365,"mutability":"mutable","name":"lpToken","nameLocation":"2146:7:109","nodeType":"VariableDeclaration","scope":34379,"src":"2138:15:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"},"typeName":{"id":34364,"nodeType":"UserDefinedTypeName","pathNode":{"id":34363,"name":"LPToken","nameLocations":["2138:7:109"],"nodeType":"IdentifierPath","referencedDeclaration":23179,"src":"2138:7:109"},"referencedDeclaration":23179,"src":"2138:7:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"visibility":"internal"},{"constant":false,"id":34369,"mutability":"mutable","name":"pooledTokens","nameLocation":"2223:12:109","nodeType":"VariableDeclaration","scope":34379,"src":"2214:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":34367,"nodeType":"UserDefinedTypeName","pathNode":{"id":34366,"name":"IERC20","nameLocations":["2214:6:109"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"2214:6:109"},"referencedDeclaration":10812,"src":"2214:6:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":34368,"nodeType":"ArrayTypeName","src":"2214:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":34372,"mutability":"mutable","name":"tokenPrecisionMultipliers","nameLocation":"2499:25:109","nodeType":"VariableDeclaration","scope":34379,"src":"2489:35:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34370,"name":"uint256","nodeType":"ElementaryTypeName","src":"2489:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34371,"nodeType":"ArrayTypeName","src":"2489:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34375,"mutability":"mutable","name":"balances","nameLocation":"2660:8:109","nodeType":"VariableDeclaration","scope":34379,"src":"2650:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34373,"name":"uint256","nodeType":"ElementaryTypeName","src":"2650:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34374,"nodeType":"ArrayTypeName","src":"2650:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34378,"mutability":"mutable","name":"adminFees","nameLocation":"2753:9:109","nodeType":"VariableDeclaration","scope":34379,"src":"2743:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34376,"name":"uint256","nodeType":"ElementaryTypeName","src":"2743:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34377,"nodeType":"ArrayTypeName","src":"2743:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"Swap","nameLocation":"1819:4:109","nodeType":"StructDefinition","scope":37721,"src":"1812:955:109","visibility":"public"},{"canonicalName":"SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo","id":34390,"members":[{"constant":false,"id":34381,"mutability":"mutable","name":"d0","nameLocation":"2955:2:109","nodeType":"VariableDeclaration","scope":34390,"src":"2947:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34380,"name":"uint256","nodeType":"ElementaryTypeName","src":"2947:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34383,"mutability":"mutable","name":"d1","nameLocation":"2971:2:109","nodeType":"VariableDeclaration","scope":34390,"src":"2963:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34382,"name":"uint256","nodeType":"ElementaryTypeName","src":"2963:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34385,"mutability":"mutable","name":"newY","nameLocation":"2987:4:109","nodeType":"VariableDeclaration","scope":34390,"src":"2979:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34384,"name":"uint256","nodeType":"ElementaryTypeName","src":"2979:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34387,"mutability":"mutable","name":"feePerToken","nameLocation":"3005:11:109","nodeType":"VariableDeclaration","scope":34390,"src":"2997:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34386,"name":"uint256","nodeType":"ElementaryTypeName","src":"2997:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34389,"mutability":"mutable","name":"preciseA","nameLocation":"3030:8:109","nodeType":"VariableDeclaration","scope":34390,"src":"3022:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34388,"name":"uint256","nodeType":"ElementaryTypeName","src":"3022:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"CalculateWithdrawOneTokenDYInfo","nameLocation":"2909:31:109","nodeType":"StructDefinition","scope":37721,"src":"2902:141:109","visibility":"public"},{"canonicalName":"SwapUtilsExternal.ManageLiquidityInfo","id":34410,"members":[{"constant":false,"id":34392,"mutability":"mutable","name":"d0","nameLocation":"3214:2:109","nodeType":"VariableDeclaration","scope":34410,"src":"3206:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34391,"name":"uint256","nodeType":"ElementaryTypeName","src":"3206:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34394,"mutability":"mutable","name":"d1","nameLocation":"3230:2:109","nodeType":"VariableDeclaration","scope":34410,"src":"3222:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34393,"name":"uint256","nodeType":"ElementaryTypeName","src":"3222:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34396,"mutability":"mutable","name":"d2","nameLocation":"3246:2:109","nodeType":"VariableDeclaration","scope":34410,"src":"3238:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34395,"name":"uint256","nodeType":"ElementaryTypeName","src":"3238:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34398,"mutability":"mutable","name":"preciseA","nameLocation":"3262:8:109","nodeType":"VariableDeclaration","scope":34410,"src":"3254:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34397,"name":"uint256","nodeType":"ElementaryTypeName","src":"3254:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34401,"mutability":"mutable","name":"lpToken","nameLocation":"3284:7:109","nodeType":"VariableDeclaration","scope":34410,"src":"3276:15:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"},"typeName":{"id":34400,"nodeType":"UserDefinedTypeName","pathNode":{"id":34399,"name":"LPToken","nameLocations":["3276:7:109"],"nodeType":"IdentifierPath","referencedDeclaration":23179,"src":"3276:7:109"},"referencedDeclaration":23179,"src":"3276:7:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"visibility":"internal"},{"constant":false,"id":34403,"mutability":"mutable","name":"totalSupply","nameLocation":"3305:11:109","nodeType":"VariableDeclaration","scope":34410,"src":"3297:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34402,"name":"uint256","nodeType":"ElementaryTypeName","src":"3297:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34406,"mutability":"mutable","name":"balances","nameLocation":"3332:8:109","nodeType":"VariableDeclaration","scope":34410,"src":"3322:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34404,"name":"uint256","nodeType":"ElementaryTypeName","src":"3322:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34405,"nodeType":"ArrayTypeName","src":"3322:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34409,"mutability":"mutable","name":"multipliers","nameLocation":"3356:11:109","nodeType":"VariableDeclaration","scope":34410,"src":"3346:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34407,"name":"uint256","nodeType":"ElementaryTypeName","src":"3346:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34408,"nodeType":"ArrayTypeName","src":"3346:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"ManageLiquidityInfo","nameLocation":"3180:19:109","nodeType":"StructDefinition","scope":37721,"src":"3173:199:109","visibility":"public"},{"body":{"id":34426,"nodeType":"Block","src":"3669:60:109","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":34420,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34414,"src":"3695:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}],"id":34419,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"3682:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer) view returns (uint256)"}},"id":34421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3682:18:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":34422,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"3703:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":34423,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3713:11:109","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"3703:21:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3682:42:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":34418,"id":34425,"nodeType":"Return","src":"3675:49:109"}]},"documentation":{"id":34411,"nodeType":"StructuredDocumentation","src":"3410:191:109","text":" @notice Return A, the amplification coefficient * n ** (n - 1)\n @dev See the StableSwap paper for details\n @param self Swap struct to read from\n @return A parameter"},"functionSelector":"22b1b5f6","id":34427,"implemented":true,"kind":"function","modifiers":[],"name":"getA","nameLocation":"3613:4:109","nodeType":"FunctionDefinition","parameters":{"id":34415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34414,"mutability":"mutable","name":"self","nameLocation":"3631:4:109","nodeType":"VariableDeclaration","scope":34427,"src":"3618:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":34413,"nodeType":"UserDefinedTypeName","pathNode":{"id":34412,"name":"Swap","nameLocations":["3618:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"3618:4:109"},"referencedDeclaration":34379,"src":"3618:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"}],"src":"3617:19:109"},"returnParameters":{"id":34418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34417,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34427,"src":"3660:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34416,"name":"uint256","nodeType":"ElementaryTypeName","src":"3660:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3659:9:109"},"scope":37721,"src":"3604:125:109","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":34440,"nodeType":"Block","src":"4000:36:109","statements":[{"expression":{"arguments":[{"id":34437,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34431,"src":"4026:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}],"id":34436,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"4013:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer) view returns (uint256)"}},"id":34438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4013:18:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":34435,"id":34439,"nodeType":"Return","src":"4006:25:109"}]},"documentation":{"id":34428,"nodeType":"StructuredDocumentation","src":"3733:192:109","text":" @notice Return A in its raw precision\n @dev See the StableSwap paper for details\n @param self Swap struct to read from\n @return A parameter in its raw precision form"},"functionSelector":"f43dee53","id":34441,"implemented":true,"kind":"function","modifiers":[],"name":"getAPrecise","nameLocation":"3937:11:109","nodeType":"FunctionDefinition","parameters":{"id":34432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34431,"mutability":"mutable","name":"self","nameLocation":"3962:4:109","nodeType":"VariableDeclaration","scope":34441,"src":"3949:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":34430,"nodeType":"UserDefinedTypeName","pathNode":{"id":34429,"name":"Swap","nameLocations":["3949:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"3949:4:109"},"referencedDeclaration":34379,"src":"3949:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"}],"src":"3948:19:109"},"returnParameters":{"id":34435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34434,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34441,"src":"3991:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34433,"name":"uint256","nodeType":"ElementaryTypeName","src":"3991:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3990:9:109"},"scope":37721,"src":"3928:108:109","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":34481,"nodeType":"Block","src":"4326:469:109","statements":[{"assignments":[34451],"declarations":[{"constant":false,"id":34451,"mutability":"mutable","name":"t1","nameLocation":"4340:2:109","nodeType":"VariableDeclaration","scope":34481,"src":"4332:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34450,"name":"uint256","nodeType":"ElementaryTypeName","src":"4332:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34454,"initialValue":{"expression":{"id":34452,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34445,"src":"4345:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":34453,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4350:11:109","memberName":"futureATime","nodeType":"MemberAccess","referencedDeclaration":34358,"src":"4345:16:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4332:29:109"},{"expression":{"id":34458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34455,"name":"currentA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34448,"src":"4397:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":34456,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34445,"src":"4408:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":34457,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4413:7:109","memberName":"futureA","nodeType":"MemberAccess","referencedDeclaration":34354,"src":"4408:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4397:23:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34459,"nodeType":"ExpressionStatement","src":"4397:23:109"},{"assignments":[34461],"declarations":[{"constant":false,"id":34461,"mutability":"mutable","name":"a0","nameLocation":"4473:2:109","nodeType":"VariableDeclaration","scope":34481,"src":"4465:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34460,"name":"uint256","nodeType":"ElementaryTypeName","src":"4465:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34464,"initialValue":{"expression":{"id":34462,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34445,"src":"4478:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":34463,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4483:8:109","memberName":"initialA","nodeType":"MemberAccess","referencedDeclaration":34352,"src":"4478:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4465:26:109"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":34472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34465,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34461,"src":"4542:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":34466,"name":"currentA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34448,"src":"4548:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4542:14:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":34468,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4560:5:109","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":34469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4566:9:109","memberName":"timestamp","nodeType":"MemberAccess","src":"4560:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":34470,"name":"t1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34451,"src":"4578:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4560:20:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4542:38:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34480,"nodeType":"IfStatement","src":"4538:253:109","trueBody":{"id":34479,"nodeType":"Block","src":"4582:209:109","statements":[{"assignments":[34474],"declarations":[{"constant":false,"id":34474,"mutability":"mutable","name":"t0","nameLocation":"4598:2:109","nodeType":"VariableDeclaration","scope":34479,"src":"4590:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34473,"name":"uint256","nodeType":"ElementaryTypeName","src":"4590:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34477,"initialValue":{"expression":{"id":34475,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34445,"src":"4603:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":34476,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4608:12:109","memberName":"initialATime","nodeType":"MemberAccess","referencedDeclaration":34356,"src":"4603:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4590:30:109"},{"AST":{"nodeType":"YulBlock","src":"4666:119:109","statements":[{"nodeType":"YulAssignment","src":"4676:101:109","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a0","nodeType":"YulIdentifier","src":"4700:2:109"},{"arguments":[{"name":"t1","nodeType":"YulIdentifier","src":"4708:2:109"},{"arguments":[],"functionName":{"name":"timestamp","nodeType":"YulIdentifier","src":"4712:9:109"},"nodeType":"YulFunctionCall","src":"4712:11:109"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4704:3:109"},"nodeType":"YulFunctionCall","src":"4704:20:109"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"4696:3:109"},"nodeType":"YulFunctionCall","src":"4696:29:109"},{"arguments":[{"name":"currentA","nodeType":"YulIdentifier","src":"4731:8:109"},{"arguments":[{"arguments":[],"functionName":{"name":"timestamp","nodeType":"YulIdentifier","src":"4745:9:109"},"nodeType":"YulFunctionCall","src":"4745:11:109"},{"name":"t0","nodeType":"YulIdentifier","src":"4758:2:109"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4741:3:109"},"nodeType":"YulFunctionCall","src":"4741:20:109"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"4727:3:109"},"nodeType":"YulFunctionCall","src":"4727:35:109"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4692:3:109"},"nodeType":"YulFunctionCall","src":"4692:71:109"},{"arguments":[{"name":"t1","nodeType":"YulIdentifier","src":"4769:2:109"},{"name":"t0","nodeType":"YulIdentifier","src":"4773:2:109"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4765:3:109"},"nodeType":"YulFunctionCall","src":"4765:11:109"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"4688:3:109"},"nodeType":"YulFunctionCall","src":"4688:89:109"},"variableNames":[{"name":"currentA","nodeType":"YulIdentifier","src":"4676:8:109"}]}]},"evmVersion":"london","externalReferences":[{"declaration":34461,"isOffset":false,"isSlot":false,"src":"4700:2:109","valueSize":1},{"declaration":34448,"isOffset":false,"isSlot":false,"src":"4676:8:109","valueSize":1},{"declaration":34448,"isOffset":false,"isSlot":false,"src":"4731:8:109","valueSize":1},{"declaration":34474,"isOffset":false,"isSlot":false,"src":"4758:2:109","valueSize":1},{"declaration":34474,"isOffset":false,"isSlot":false,"src":"4773:2:109","valueSize":1},{"declaration":34451,"isOffset":false,"isSlot":false,"src":"4708:2:109","valueSize":1},{"declaration":34451,"isOffset":false,"isSlot":false,"src":"4769:2:109","valueSize":1}],"id":34478,"nodeType":"InlineAssembly","src":"4657:128:109"}]}}]},"documentation":{"id":34442,"nodeType":"StructuredDocumentation","src":"4040:201:109","text":" @notice Return A in its raw precision\n @dev See the StableSwap paper for details\n @param self Swap struct to read from\n @return currentA A parameter in its raw precision form"},"id":34482,"implemented":true,"kind":"function","modifiers":[],"name":"_getAPrecise","nameLocation":"4253:12:109","nodeType":"FunctionDefinition","parameters":{"id":34446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34445,"mutability":"mutable","name":"self","nameLocation":"4279:4:109","nodeType":"VariableDeclaration","scope":34482,"src":"4266:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":34444,"nodeType":"UserDefinedTypeName","pathNode":{"id":34443,"name":"Swap","nameLocations":["4266:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"4266:4:109"},"referencedDeclaration":34379,"src":"4266:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"}],"src":"4265:19:109"},"returnParameters":{"id":34449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34448,"mutability":"mutable","name":"currentA","nameLocation":"4316:8:109","nodeType":"VariableDeclaration","scope":34482,"src":"4308:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34447,"name":"uint256","nodeType":"ElementaryTypeName","src":"4308:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4307:18:109"},"scope":37721,"src":"4244:551:109","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":34509,"nodeType":"Block","src":"5293:194:109","statements":[{"assignments":[34496,null],"declarations":[{"constant":false,"id":34496,"mutability":"mutable","name":"availableTokenAmount","nameLocation":"5308:20:109","nodeType":"VariableDeclaration","scope":34509,"src":"5300:28:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34495,"name":"uint256","nodeType":"ElementaryTypeName","src":"5300:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":34506,"initialValue":{"arguments":[{"id":34498,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34486,"src":"5368:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},{"id":34499,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34488,"src":"5380:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":34500,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34490,"src":"5399:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":34501,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34486,"src":"5417:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":34502,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5422:7:109","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":34365,"src":"5417:12:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":34503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5430:11:109","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":8543,"src":"5417:24:109","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":34504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5417:26:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":34497,"name":"_calculateWithdrawOneToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34566,"src":"5334:26:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$_t_uint256_$_t_uint8_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint256,uint8,uint256) view returns (uint256,uint256)"}},"id":34505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5334:115:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"5299:150:109"},{"expression":{"id":34507,"name":"availableTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34496,"src":"5462:20:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":34494,"id":34508,"nodeType":"Return","src":"5455:27:109"}]},"documentation":{"id":34483,"nodeType":"StructuredDocumentation","src":"4799:350:109","text":" @notice Calculate the dy, the amount of selected token that user receives and\n the fee of withdrawing in one token\n @param tokenAmount the amount to withdraw in the pool's precision\n @param tokenIndex which token will be withdrawn\n @param self Swap struct to read from\n @return the amount of token user will receive"},"functionSelector":"84eeef27","id":34510,"implemented":true,"kind":"function","modifiers":[],"name":"calculateWithdrawOneToken","nameLocation":"5161:25:109","nodeType":"FunctionDefinition","parameters":{"id":34491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34486,"mutability":"mutable","name":"self","nameLocation":"5205:4:109","nodeType":"VariableDeclaration","scope":34510,"src":"5192:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":34485,"nodeType":"UserDefinedTypeName","pathNode":{"id":34484,"name":"Swap","nameLocations":["5192:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"5192:4:109"},"referencedDeclaration":34379,"src":"5192:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":34488,"mutability":"mutable","name":"tokenAmount","nameLocation":"5223:11:109","nodeType":"VariableDeclaration","scope":34510,"src":"5215:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34487,"name":"uint256","nodeType":"ElementaryTypeName","src":"5215:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34490,"mutability":"mutable","name":"tokenIndex","nameLocation":"5246:10:109","nodeType":"VariableDeclaration","scope":34510,"src":"5240:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":34489,"name":"uint8","nodeType":"ElementaryTypeName","src":"5240:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"5186:74:109"},"returnParameters":{"id":34494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34493,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34510,"src":"5284:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34492,"name":"uint256","nodeType":"ElementaryTypeName","src":"5284:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5283:9:109"},"scope":37721,"src":"5152:335:109","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":34565,"nodeType":"Block","src":"5666:334:109","statements":[{"assignments":[34527],"declarations":[{"constant":false,"id":34527,"mutability":"mutable","name":"dy","nameLocation":"5680:2:109","nodeType":"VariableDeclaration","scope":34565,"src":"5672:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34526,"name":"uint256","nodeType":"ElementaryTypeName","src":"5672:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34528,"nodeType":"VariableDeclarationStatement","src":"5672:10:109"},{"assignments":[34530],"declarations":[{"constant":false,"id":34530,"mutability":"mutable","name":"newY","nameLocation":"5696:4:109","nodeType":"VariableDeclaration","scope":34565,"src":"5688:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34529,"name":"uint256","nodeType":"ElementaryTypeName","src":"5688:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34531,"nodeType":"VariableDeclarationStatement","src":"5688:12:109"},{"assignments":[34533],"declarations":[{"constant":false,"id":34533,"mutability":"mutable","name":"currentY","nameLocation":"5714:8:109","nodeType":"VariableDeclaration","scope":34565,"src":"5706:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34532,"name":"uint256","nodeType":"ElementaryTypeName","src":"5706:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34534,"nodeType":"VariableDeclarationStatement","src":"5706:16:109"},{"expression":{"id":34545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":34535,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34527,"src":"5730:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":34536,"name":"newY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34530,"src":"5734:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":34537,"name":"currentY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34533,"src":"5740:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34538,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5729:20:109","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":34540,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34513,"src":"5780:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},{"id":34541,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34517,"src":"5786:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":34542,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34515,"src":"5798:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":34543,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34519,"src":"5811:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":34539,"name":"calculateWithdrawOneTokenDY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34796,"src":"5752:27:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$_t_uint8_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint8,uint256,uint256) view returns (uint256,uint256,uint256)"}},"id":34544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5752:71:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"src":"5729:94:109","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34546,"nodeType":"ExpressionStatement","src":"5729:94:109"},{"assignments":[34548],"declarations":[{"constant":false,"id":34548,"mutability":"mutable","name":"dySwapFee","nameLocation":"5887:9:109","nodeType":"VariableDeclaration","scope":34565,"src":"5879:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34547,"name":"uint256","nodeType":"ElementaryTypeName","src":"5879:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34560,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34549,"name":"currentY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34533,"src":"5900:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":34550,"name":"newY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34530,"src":"5911:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5900:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34552,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5899:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"expression":{"id":34553,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34513,"src":"5919:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":34554,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5924:25:109","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":34372,"src":"5919:30:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":34556,"indexExpression":{"id":34555,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34517,"src":"5950:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5919:42:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5899:62:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":34558,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34527,"src":"5964:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5899:67:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5879:87:109"},{"expression":{"components":[{"id":34561,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34527,"src":"5981:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":34562,"name":"dySwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34548,"src":"5985:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34563,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5980:15:109","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":34525,"id":34564,"nodeType":"Return","src":"5973:22:109"}]},"id":34566,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateWithdrawOneToken","nameLocation":"5500:26:109","nodeType":"FunctionDefinition","parameters":{"id":34520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34513,"mutability":"mutable","name":"self","nameLocation":"5545:4:109","nodeType":"VariableDeclaration","scope":34566,"src":"5532:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":34512,"nodeType":"UserDefinedTypeName","pathNode":{"id":34511,"name":"Swap","nameLocations":["5532:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"5532:4:109"},"referencedDeclaration":34379,"src":"5532:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":34515,"mutability":"mutable","name":"tokenAmount","nameLocation":"5563:11:109","nodeType":"VariableDeclaration","scope":34566,"src":"5555:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34514,"name":"uint256","nodeType":"ElementaryTypeName","src":"5555:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34517,"mutability":"mutable","name":"tokenIndex","nameLocation":"5586:10:109","nodeType":"VariableDeclaration","scope":34566,"src":"5580:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":34516,"name":"uint8","nodeType":"ElementaryTypeName","src":"5580:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":34519,"mutability":"mutable","name":"totalSupply","nameLocation":"5610:11:109","nodeType":"VariableDeclaration","scope":34566,"src":"5602:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34518,"name":"uint256","nodeType":"ElementaryTypeName","src":"5602:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5526:99:109"},"returnParameters":{"id":34525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34522,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34566,"src":"5648:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34521,"name":"uint256","nodeType":"ElementaryTypeName","src":"5648:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34524,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34566,"src":"5657:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34523,"name":"uint256","nodeType":"ElementaryTypeName","src":"5657:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5647:18:109"},"scope":37721,"src":"5491:509:109","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":34795,"nodeType":"Block","src":"6522:1365:109","statements":[{"assignments":[34589],"declarations":[{"constant":false,"id":34589,"mutability":"mutable","name":"xp","nameLocation":"6638:2:109","nodeType":"VariableDeclaration","scope":34795,"src":"6621:19:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34587,"name":"uint256","nodeType":"ElementaryTypeName","src":"6621:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34588,"nodeType":"ArrayTypeName","src":"6621:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":34593,"initialValue":{"arguments":[{"id":34591,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34570,"src":"6647:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}],"id":34590,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[35178,35196],"referencedDeclaration":35196,"src":"6643:3:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer) view returns (uint256[] memory)"}},"id":34592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6643:9:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"6621:31:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34595,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34572,"src":"6667:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":34596,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34589,"src":"6680:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6683:6:109","memberName":"length","nodeType":"MemberAccess","src":"6680:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6667:22:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e646578206f7574206f662072616e6765","id":34599,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6691:20:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d","typeString":"literal_string \"index out of range\""},"value":"index out of range"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d","typeString":"literal_string \"index out of range\""}],"id":34594,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6659:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":34600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6659:53:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34601,"nodeType":"ExpressionStatement","src":"6659:53:109"},{"assignments":[34604],"declarations":[{"constant":false,"id":34604,"mutability":"mutable","name":"v","nameLocation":"6758:1:109","nodeType":"VariableDeclaration","scope":34795,"src":"6719:40:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo"},"typeName":{"id":34603,"nodeType":"UserDefinedTypeName","pathNode":{"id":34602,"name":"CalculateWithdrawOneTokenDYInfo","nameLocations":["6719:31:109"],"nodeType":"IdentifierPath","referencedDeclaration":34390,"src":"6719:31:109"},"referencedDeclaration":34390,"src":"6719:31:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_storage_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo"}},"visibility":"internal"}],"id":34612,"initialValue":{"arguments":[{"hexValue":"30","id":34606,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6794:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":34607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6797:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":34608,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6800:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":34609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6803:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":34610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6806:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":34605,"name":"CalculateWithdrawOneTokenDYInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34390,"src":"6762:31:109","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_storage_ptr_$","typeString":"type(struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo storage pointer)"}},"id":34611,"isConstant":false,"isLValue":false,"isPure":true,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6762:46:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"nodeType":"VariableDeclarationStatement","src":"6719:89:109"},{"expression":{"id":34619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":34613,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"6814:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34615,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6816:8:109","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":34389,"src":"6814:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":34617,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34570,"src":"6840:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}],"id":34616,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"6827:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer) view returns (uint256)"}},"id":34618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6827:18:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6814:31:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34620,"nodeType":"ExpressionStatement","src":"6814:31:109"},{"expression":{"id":34629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":34621,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"6851:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34623,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6853:2:109","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":34381,"src":"6851:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":34625,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34589,"src":"6863:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":34626,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"6867:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34627,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6869:8:109","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":34389,"src":"6867:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":34624,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35114,"src":"6858:4:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":34628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6858:20:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6851:27:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34630,"nodeType":"ExpressionStatement","src":"6851:27:109"},{"expression":{"id":34645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":34631,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"6884:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34633,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6886:2:109","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":34383,"src":"6884:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":34634,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"6891:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34635,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6893:2:109","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":34381,"src":"6891:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34636,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34574,"src":"6900:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":34637,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"6914:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34638,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6916:2:109","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":34381,"src":"6914:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6900:18:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34640,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6899:20:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":34641,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34576,"src":"6922:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6899:34:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34643,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6898:36:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6891:43:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6884:50:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34646,"nodeType":"ExpressionStatement","src":"6884:50:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34648,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34574,"src":"6949:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"baseExpression":{"id":34649,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34589,"src":"6964:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34651,"indexExpression":{"id":34650,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34572,"src":"6967:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6964:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6949:29:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6578636565647320617661696c61626c65","id":34653,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6980:19:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_cfeed71d91768718346c2ea3c2ab2e22b6f1283f91f1be8620ac590423d0fe0f","typeString":"literal_string \"exceeds available\""},"value":"exceeds available"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cfeed71d91768718346c2ea3c2ab2e22b6f1283f91f1be8620ac590423d0fe0f","typeString":"literal_string \"exceeds available\""}],"id":34647,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6941:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":34654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6941:59:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34655,"nodeType":"ExpressionStatement","src":"6941:59:109"},{"expression":{"id":34667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":34656,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"7007:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34658,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"7009:4:109","memberName":"newY","nodeType":"MemberAccess","referencedDeclaration":34385,"src":"7007:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":34660,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"7022:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34661,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7024:8:109","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":34389,"src":"7022:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":34662,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34572,"src":"7034:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":34663,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34589,"src":"7046:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":34664,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"7050:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34665,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7052:2:109","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":34383,"src":"7050:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":34659,"name":"getYD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34958,"src":"7016:5:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint8_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint8,uint256[] memory,uint256) pure returns (uint256)"}},"id":34666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7016:39:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7007:48:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34668,"nodeType":"ExpressionStatement","src":"7007:48:109"},{"assignments":[34673],"declarations":[{"constant":false,"id":34673,"mutability":"mutable","name":"xpReduced","nameLocation":"7079:9:109","nodeType":"VariableDeclaration","scope":34795,"src":"7062:26:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34671,"name":"uint256","nodeType":"ElementaryTypeName","src":"7062:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34672,"nodeType":"ArrayTypeName","src":"7062:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":34680,"initialValue":{"arguments":[{"expression":{"id":34677,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34589,"src":"7105:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7108:6:109","memberName":"length","nodeType":"MemberAccess","src":"7105:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":34676,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"7091:13:109","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":34674,"name":"uint256","nodeType":"ElementaryTypeName","src":"7095:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34675,"nodeType":"ArrayTypeName","src":"7095:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":34679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7091:24:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"7062:53:109"},{"expression":{"id":34690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":34681,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"7122:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34683,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"7124:11:109","memberName":"feePerToken","nodeType":"MemberAccess","referencedDeclaration":34387,"src":"7122:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":34685,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34570,"src":"7151:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":34686,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7156:7:109","memberName":"swapFee","nodeType":"MemberAccess","referencedDeclaration":34360,"src":"7151:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":34687,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34589,"src":"7165:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7168:6:109","memberName":"length","nodeType":"MemberAccess","src":"7165:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":34684,"name":"_feePerToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36014,"src":"7138:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":34689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7138:37:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7122:53:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34691,"nodeType":"ExpressionStatement","src":"7122:53:109"},{"assignments":[34693],"declarations":[{"constant":false,"id":34693,"mutability":"mutable","name":"len","nameLocation":"7190:3:109","nodeType":"VariableDeclaration","scope":34795,"src":"7182:11:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34692,"name":"uint256","nodeType":"ElementaryTypeName","src":"7182:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34696,"initialValue":{"expression":{"id":34694,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34589,"src":"7196:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7199:6:109","memberName":"length","nodeType":"MemberAccess","src":"7196:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7182:23:109"},{"body":{"id":34757,"nodeType":"Block","src":"7238:447:109","statements":[{"assignments":[34704],"declarations":[{"constant":false,"id":34704,"mutability":"mutable","name":"xpi","nameLocation":"7254:3:109","nodeType":"VariableDeclaration","scope":34757,"src":"7246:11:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34703,"name":"uint256","nodeType":"ElementaryTypeName","src":"7246:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34708,"initialValue":{"baseExpression":{"id":34705,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34589,"src":"7260:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34707,"indexExpression":{"id":34706,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34698,"src":"7263:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7260:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7246:19:109"},{"expression":{"id":34751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":34709,"name":"xpReduced","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34673,"src":"7461:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34711,"indexExpression":{"id":34710,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34698,"src":"7471:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7461:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34712,"name":"xpi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34704,"src":"7484:3:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"condition":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34713,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34698,"src":"7502:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":34714,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34572,"src":"7507:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"7502:15:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":34716,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7501:17:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34729,"name":"xpi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34704,"src":"7555:3:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34730,"name":"xpi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34704,"src":"7562:3:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":34731,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"7568:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34732,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7570:2:109","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":34383,"src":"7568:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7562:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34734,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7561:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":34735,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"7576:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34736,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7578:2:109","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":34381,"src":"7576:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7561:19:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7555:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34739,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7554:27:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"7501:80:109","trueExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34717,"name":"xpi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34704,"src":"7523:3:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":34718,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"7529:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34719,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7531:2:109","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":34383,"src":"7529:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7523:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34721,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7522:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":34722,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"7537:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34723,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7539:2:109","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":34381,"src":"7537:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7522:19:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":34725,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"7544:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34726,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7546:4:109","memberName":"newY","nodeType":"MemberAccess","referencedDeclaration":34385,"src":"7544:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7522:28:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34728,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7521:30:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34741,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7500:82:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":34742,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"7585:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34743,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7587:11:109","memberName":"feePerToken","nodeType":"MemberAccess","referencedDeclaration":34387,"src":"7585:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7500:98:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34745,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7499:100:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":34746,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"7612:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":34747,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7622:15:109","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"7612:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7499:138:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34749,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7498:140:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7484:154:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7461:177:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34752,"nodeType":"ExpressionStatement","src":"7461:177:109"},{"id":34756,"nodeType":"UncheckedBlock","src":"7647:32:109","statements":[{"expression":{"id":34754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7667:3:109","subExpression":{"id":34753,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34698,"src":"7669:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34755,"nodeType":"ExpressionStatement","src":"7667:3:109"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34700,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34698,"src":"7227:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":34701,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34693,"src":"7231:3:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7227:7:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34758,"initializationExpression":{"assignments":[34698],"declarations":[{"constant":false,"id":34698,"mutability":"mutable","name":"i","nameLocation":"7224:1:109","nodeType":"VariableDeclaration","scope":34758,"src":"7216:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34697,"name":"uint256","nodeType":"ElementaryTypeName","src":"7216:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34699,"nodeType":"VariableDeclarationStatement","src":"7216:9:109"},"nodeType":"ForStatement","src":"7211:474:109"},{"assignments":[34760],"declarations":[{"constant":false,"id":34760,"mutability":"mutable","name":"dy","nameLocation":"7699:2:109","nodeType":"VariableDeclaration","scope":34795,"src":"7691:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34759,"name":"uint256","nodeType":"ElementaryTypeName","src":"7691:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34773,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":34761,"name":"xpReduced","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34673,"src":"7704:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34763,"indexExpression":{"id":34762,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34572,"src":"7714:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7704:21:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"expression":{"id":34765,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"7734:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34766,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7736:8:109","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":34389,"src":"7734:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":34767,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34572,"src":"7746:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":34768,"name":"xpReduced","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34673,"src":"7758:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":34769,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"7769:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34770,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7771:2:109","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":34383,"src":"7769:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":34764,"name":"getYD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34958,"src":"7728:5:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint8_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint8,uint256[] memory,uint256) pure returns (uint256)"}},"id":34771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7728:46:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7704:70:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7691:83:109"},{"expression":{"id":34785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34774,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34760,"src":"7780:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34775,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34760,"src":"7786:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":34776,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7791:1:109","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7786:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34778,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7785:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"baseExpression":{"expression":{"id":34779,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34570,"src":"7797:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":34780,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7802:25:109","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":34372,"src":"7797:30:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":34782,"indexExpression":{"id":34781,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34572,"src":"7828:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7797:42:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34783,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7796:44:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7785:55:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7780:60:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34786,"nodeType":"ExpressionStatement","src":"7780:60:109"},{"expression":{"components":[{"id":34787,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34760,"src":"7855:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":34788,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34604,"src":"7859:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateWithdrawOneTokenDYInfo_$34390_memory_ptr","typeString":"struct SwapUtilsExternal.CalculateWithdrawOneTokenDYInfo memory"}},"id":34789,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7861:4:109","memberName":"newY","nodeType":"MemberAccess","referencedDeclaration":34385,"src":"7859:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":34790,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34589,"src":"7867:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34792,"indexExpression":{"id":34791,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34572,"src":"7870:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7867:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34793,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7854:28:109","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"functionReturnParameters":34584,"id":34794,"nodeType":"Return","src":"7847:35:109"}]},"documentation":{"id":34567,"nodeType":"StructuredDocumentation","src":"6004:293:109","text":" @notice Calculate the dy of withdrawing in one token\n @param self Swap struct to read from\n @param tokenIndex which token will be withdrawn\n @param tokenAmount the amount to withdraw in the pools precision\n @return the d and the new y after withdrawing one token"},"functionSelector":"38e630de","id":34796,"implemented":true,"kind":"function","modifiers":[],"name":"calculateWithdrawOneTokenDY","nameLocation":"6309:27:109","nodeType":"FunctionDefinition","parameters":{"id":34577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34570,"mutability":"mutable","name":"self","nameLocation":"6355:4:109","nodeType":"VariableDeclaration","scope":34796,"src":"6342:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":34569,"nodeType":"UserDefinedTypeName","pathNode":{"id":34568,"name":"Swap","nameLocations":["6342:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"6342:4:109"},"referencedDeclaration":34379,"src":"6342:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":34572,"mutability":"mutable","name":"tokenIndex","nameLocation":"6371:10:109","nodeType":"VariableDeclaration","scope":34796,"src":"6365:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":34571,"name":"uint8","nodeType":"ElementaryTypeName","src":"6365:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":34574,"mutability":"mutable","name":"tokenAmount","nameLocation":"6395:11:109","nodeType":"VariableDeclaration","scope":34796,"src":"6387:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34573,"name":"uint256","nodeType":"ElementaryTypeName","src":"6387:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34576,"mutability":"mutable","name":"totalSupply","nameLocation":"6420:11:109","nodeType":"VariableDeclaration","scope":34796,"src":"6412:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34575,"name":"uint256","nodeType":"ElementaryTypeName","src":"6412:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6336:99:109"},"returnParameters":{"id":34584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34579,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34796,"src":"6476:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34578,"name":"uint256","nodeType":"ElementaryTypeName","src":"6476:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34581,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34796,"src":"6491:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34580,"name":"uint256","nodeType":"ElementaryTypeName","src":"6491:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34583,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34796,"src":"6506:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34582,"name":"uint256","nodeType":"ElementaryTypeName","src":"6506:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6468:51:109"},"scope":37721,"src":"6300:1587:109","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":34957,"nodeType":"Block","src":"8857:1007:109","statements":[{"assignments":[34812],"declarations":[{"constant":false,"id":34812,"mutability":"mutable","name":"numTokens","nameLocation":"8871:9:109","nodeType":"VariableDeclaration","scope":34957,"src":"8863:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34811,"name":"uint256","nodeType":"ElementaryTypeName","src":"8863:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34815,"initialValue":{"expression":{"id":34813,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34804,"src":"8883:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8886:6:109","memberName":"length","nodeType":"MemberAccess","src":"8883:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8863:29:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34817,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34801,"src":"8906:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":34818,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34812,"src":"8919:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8906:22:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e206e6f7420666f756e64","id":34820,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8930:17:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_487af3faa279cd1df07c0d1897feb1b8a94d7a439a5fcca3a8f816912eee96c2","typeString":"literal_string \"Token not found\""},"value":"Token not found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_487af3faa279cd1df07c0d1897feb1b8a94d7a439a5fcca3a8f816912eee96c2","typeString":"literal_string \"Token not found\""}],"id":34816,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8898:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":34821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8898:50:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34822,"nodeType":"ExpressionStatement","src":"8898:50:109"},{"assignments":[34824],"declarations":[{"constant":false,"id":34824,"mutability":"mutable","name":"c","nameLocation":"8963:1:109","nodeType":"VariableDeclaration","scope":34957,"src":"8955:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34823,"name":"uint256","nodeType":"ElementaryTypeName","src":"8955:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34826,"initialValue":{"id":34825,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34806,"src":"8967:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8955:13:109"},{"assignments":[34828],"declarations":[{"constant":false,"id":34828,"mutability":"mutable","name":"s","nameLocation":"8982:1:109","nodeType":"VariableDeclaration","scope":34957,"src":"8974:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34827,"name":"uint256","nodeType":"ElementaryTypeName","src":"8974:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34829,"nodeType":"VariableDeclarationStatement","src":"8974:9:109"},{"assignments":[34831],"declarations":[{"constant":false,"id":34831,"mutability":"mutable","name":"nA","nameLocation":"8997:2:109","nodeType":"VariableDeclaration","scope":34957,"src":"8989:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34830,"name":"uint256","nodeType":"ElementaryTypeName","src":"8989:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34835,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34832,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34799,"src":"9002:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":34833,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34812,"src":"9006:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9002:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8989:26:109"},{"body":{"id":34871,"nodeType":"Block","src":"9055:386:109","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34842,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34837,"src":"9067:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":34843,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34801,"src":"9072:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"9067:15:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34866,"nodeType":"IfStatement","src":"9063:332:109","trueBody":{"id":34865,"nodeType":"Block","src":"9084:311:109","statements":[{"expression":{"id":34849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34845,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34828,"src":"9094:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":34846,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34804,"src":"9099:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34848,"indexExpression":{"id":34847,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34837,"src":"9102:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9099:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9094:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34850,"nodeType":"ExpressionStatement","src":"9094:10:109"},{"expression":{"id":34863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34851,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34824,"src":"9114:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34852,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34824,"src":"9119:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":34853,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34806,"src":"9123:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9119:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34855,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9118:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":34856,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34804,"src":"9129:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34858,"indexExpression":{"id":34857,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34837,"src":"9132:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9129:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":34859,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34812,"src":"9137:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9129:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34861,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9128:19:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9118:29:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9114:33:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34864,"nodeType":"ExpressionStatement","src":"9114:33:109"}]}},{"id":34870,"nodeType":"UncheckedBlock","src":"9403:32:109","statements":[{"expression":{"id":34868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"9423:3:109","subExpression":{"id":34867,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34837,"src":"9425:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34869,"nodeType":"ExpressionStatement","src":"9423:3:109"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34839,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34837,"src":"9038:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":34840,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34812,"src":"9042:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9038:13:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34872,"initializationExpression":{"assignments":[34837],"declarations":[{"constant":false,"id":34837,"mutability":"mutable","name":"i","nameLocation":"9035:1:109","nodeType":"VariableDeclaration","scope":34872,"src":"9027:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34836,"name":"uint256","nodeType":"ElementaryTypeName","src":"9027:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34838,"nodeType":"VariableDeclarationStatement","src":"9027:9:109"},"nodeType":"ForStatement","src":"9022:419:109"},{"expression":{"id":34886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34873,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34824,"src":"9446:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34874,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34824,"src":"9451:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":34875,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34806,"src":"9455:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9451:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":34877,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"9459:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":34878,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9469:11:109","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"9459:21:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9451:29:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34880,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9450:31:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34881,"name":"nA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34831,"src":"9485:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":34882,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34812,"src":"9490:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9485:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34884,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9484:16:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9450:50:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9446:54:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34887,"nodeType":"ExpressionStatement","src":"9446:54:109"},{"assignments":[34889],"declarations":[{"constant":false,"id":34889,"mutability":"mutable","name":"b","nameLocation":"9515:1:109","nodeType":"VariableDeclaration","scope":34957,"src":"9507:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34888,"name":"uint256","nodeType":"ElementaryTypeName","src":"9507:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34900,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34890,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34828,"src":"9519:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34891,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34806,"src":"9525:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":34892,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"9529:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":34893,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9539:11:109","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"9529:21:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9525:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34895,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9524:27:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":34896,"name":"nA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34831,"src":"9554:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9524:32:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34898,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9523:34:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9519:38:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9507:50:109"},{"assignments":[34902],"declarations":[{"constant":false,"id":34902,"mutability":"mutable","name":"yPrev","nameLocation":"9571:5:109","nodeType":"VariableDeclaration","scope":34957,"src":"9563:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34901,"name":"uint256","nodeType":"ElementaryTypeName","src":"9563:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34903,"nodeType":"VariableDeclarationStatement","src":"9563:13:109"},{"assignments":[34905],"declarations":[{"constant":false,"id":34905,"mutability":"mutable","name":"y","nameLocation":"9590:1:109","nodeType":"VariableDeclaration","scope":34957,"src":"9582:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34904,"name":"uint256","nodeType":"ElementaryTypeName","src":"9582:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34907,"initialValue":{"id":34906,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34806,"src":"9594:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9582:13:109"},{"body":{"id":34951,"nodeType":"Block","src":"9649:165:109","statements":[{"expression":{"id":34917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34915,"name":"yPrev","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34902,"src":"9657:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":34916,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34905,"src":"9665:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9657:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34918,"nodeType":"ExpressionStatement","src":"9657:9:109"},{"expression":{"id":34937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34919,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34905,"src":"9674:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34920,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34905,"src":"9680:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":34921,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34905,"src":"9684:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9680:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34923,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9679:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":34924,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34824,"src":"9689:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9679:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34926,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9678:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34927,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34905,"src":"9696:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":34928,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9700:1:109","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"9696:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34930,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9695:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":34931,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34889,"src":"9705:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9695:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":34933,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34806,"src":"9709:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9695:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34935,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9694:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9678:33:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9674:37:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34938,"nodeType":"ExpressionStatement","src":"9674:37:109"},{"condition":{"arguments":[{"id":34941,"name":"yPrev","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34902,"src":"9733:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":34939,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34905,"src":"9723:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9725:7:109","memberName":"within1","nodeType":"MemberAccess","referencedDeclaration":30620,"src":"9723:9:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":34942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9723:16:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34946,"nodeType":"IfStatement","src":"9719:49:109","trueBody":{"id":34945,"nodeType":"Block","src":"9741:27:109","statements":[{"expression":{"id":34943,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34905,"src":"9758:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":34810,"id":34944,"nodeType":"Return","src":"9751:8:109"}]}},{"id":34950,"nodeType":"UncheckedBlock","src":"9776:32:109","statements":[{"expression":{"id":34948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"9796:3:109","subExpression":{"id":34947,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34909,"src":"9798:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34949,"nodeType":"ExpressionStatement","src":"9796:3:109"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34911,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34909,"src":"9617:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":34912,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"9621:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":34913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9631:14:109","memberName":"MAX_LOOP_LIMIT","nodeType":"MemberAccess","referencedDeclaration":29282,"src":"9621:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9617:28:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34952,"initializationExpression":{"assignments":[34909],"declarations":[{"constant":false,"id":34909,"mutability":"mutable","name":"i","nameLocation":"9614:1:109","nodeType":"VariableDeclaration","scope":34952,"src":"9606:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34908,"name":"uint256","nodeType":"ElementaryTypeName","src":"9606:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34910,"nodeType":"VariableDeclarationStatement","src":"9606:9:109"},"nodeType":"ForStatement","src":"9601:213:109"},{"expression":{"arguments":[{"hexValue":"417070726f78696d6174696f6e20646964206e6f7420636f6e7665726765","id":34954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9826:32:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05","typeString":"literal_string \"Approximation did not converge\""},"value":"Approximation did not converge"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05","typeString":"literal_string \"Approximation did not converge\""}],"id":34953,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"9819:6:109","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":34955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9819:40:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34956,"nodeType":"ExpressionStatement","src":"9819:40:109"}]},"documentation":{"id":34797,"nodeType":"StructuredDocumentation","src":"7891:837:109","text":" @notice Calculate the price of a token in the pool with given\n precision-adjusted balances and a particular D.\n @dev This is accomplished via solving the invariant iteratively.\n See the StableSwap paper and Curve.fi implementation for further details.\n x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\n x_1**2 + b*x_1 = c\n x_1 = (x_1**2 + c) / (2*x_1 + b)\n @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\n @param tokenIndex Index of token we are calculating for.\n @param xp a precision-adjusted set of pool balances. Array should be\n the same cardinality as the pool.\n @param d the stableswap invariant\n @return the price of the token, in the same precision as in xp"},"functionSelector":"6967280a","id":34958,"implemented":true,"kind":"function","modifiers":[],"name":"getYD","nameLocation":"8740:5:109","nodeType":"FunctionDefinition","parameters":{"id":34807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34799,"mutability":"mutable","name":"a","nameLocation":"8759:1:109","nodeType":"VariableDeclaration","scope":34958,"src":"8751:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34798,"name":"uint256","nodeType":"ElementaryTypeName","src":"8751:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34801,"mutability":"mutable","name":"tokenIndex","nameLocation":"8772:10:109","nodeType":"VariableDeclaration","scope":34958,"src":"8766:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":34800,"name":"uint8","nodeType":"ElementaryTypeName","src":"8766:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":34804,"mutability":"mutable","name":"xp","nameLocation":"8805:2:109","nodeType":"VariableDeclaration","scope":34958,"src":"8788:19:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34802,"name":"uint256","nodeType":"ElementaryTypeName","src":"8788:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34803,"nodeType":"ArrayTypeName","src":"8788:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34806,"mutability":"mutable","name":"d","nameLocation":"8821:1:109","nodeType":"VariableDeclaration","scope":34958,"src":"8813:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34805,"name":"uint256","nodeType":"ElementaryTypeName","src":"8813:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8745:81:109"},"returnParameters":{"id":34810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34809,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34958,"src":"8848:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34808,"name":"uint256","nodeType":"ElementaryTypeName","src":"8848:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8847:9:109"},"scope":37721,"src":"8731:1133:109","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":35113,"nodeType":"Block","src":"10346:1298:109","statements":[{"assignments":[34970],"declarations":[{"constant":false,"id":34970,"mutability":"mutable","name":"numTokens","nameLocation":"10360:9:109","nodeType":"VariableDeclaration","scope":35113,"src":"10352:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34969,"name":"uint256","nodeType":"ElementaryTypeName","src":"10352:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34973,"initialValue":{"expression":{"id":34971,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34962,"src":"10372:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10375:6:109","memberName":"length","nodeType":"MemberAccess","src":"10372:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10352:29:109"},{"assignments":[34975],"declarations":[{"constant":false,"id":34975,"mutability":"mutable","name":"s","nameLocation":"10395:1:109","nodeType":"VariableDeclaration","scope":35113,"src":"10387:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34974,"name":"uint256","nodeType":"ElementaryTypeName","src":"10387:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34976,"nodeType":"VariableDeclarationStatement","src":"10387:9:109"},{"body":{"id":34993,"nodeType":"Block","src":"10435:65:109","statements":[{"expression":{"id":34987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34983,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34975,"src":"10443:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":34984,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34962,"src":"10448:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34986,"indexExpression":{"id":34985,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34978,"src":"10451:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10448:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10443:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34988,"nodeType":"ExpressionStatement","src":"10443:10:109"},{"id":34992,"nodeType":"UncheckedBlock","src":"10462:32:109","statements":[{"expression":{"id":34990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"10482:3:109","subExpression":{"id":34989,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34978,"src":"10484:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34991,"nodeType":"ExpressionStatement","src":"10482:3:109"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34980,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34978,"src":"10418:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":34981,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34970,"src":"10422:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10418:13:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34994,"initializationExpression":{"assignments":[34978],"declarations":[{"constant":false,"id":34978,"mutability":"mutable","name":"i","nameLocation":"10415:1:109","nodeType":"VariableDeclaration","scope":34994,"src":"10407:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34977,"name":"uint256","nodeType":"ElementaryTypeName","src":"10407:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34979,"nodeType":"VariableDeclarationStatement","src":"10407:9:109"},"nodeType":"ForStatement","src":"10402:98:109"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34995,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34975,"src":"10509:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":34996,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10514:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10509:6:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35001,"nodeType":"IfStatement","src":"10505:35:109","trueBody":{"id":35000,"nodeType":"Block","src":"10517:23:109","statements":[{"expression":{"hexValue":"30","id":34998,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10532:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":34968,"id":34999,"nodeType":"Return","src":"10525:8:109"}]}},{"assignments":[35003],"declarations":[{"constant":false,"id":35003,"mutability":"mutable","name":"prevD","nameLocation":"10554:5:109","nodeType":"VariableDeclaration","scope":35113,"src":"10546:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35002,"name":"uint256","nodeType":"ElementaryTypeName","src":"10546:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35004,"nodeType":"VariableDeclarationStatement","src":"10546:13:109"},{"assignments":[35006],"declarations":[{"constant":false,"id":35006,"mutability":"mutable","name":"d","nameLocation":"10573:1:109","nodeType":"VariableDeclaration","scope":35113,"src":"10565:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35005,"name":"uint256","nodeType":"ElementaryTypeName","src":"10565:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35008,"initialValue":{"id":35007,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34975,"src":"10577:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10565:13:109"},{"assignments":[35010],"declarations":[{"constant":false,"id":35010,"mutability":"mutable","name":"nA","nameLocation":"10592:2:109","nodeType":"VariableDeclaration","scope":35113,"src":"10584:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35009,"name":"uint256","nodeType":"ElementaryTypeName","src":"10584:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35014,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35011,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34964,"src":"10597:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":35012,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34970,"src":"10601:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10597:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10584:26:109"},{"body":{"id":35107,"nodeType":"Block","src":"10665:696:109","statements":[{"assignments":[35023],"declarations":[{"constant":false,"id":35023,"mutability":"mutable","name":"dP","nameLocation":"10681:2:109","nodeType":"VariableDeclaration","scope":35107,"src":"10673:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35022,"name":"uint256","nodeType":"ElementaryTypeName","src":"10673:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35025,"initialValue":{"id":35024,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35006,"src":"10686:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10673:14:109"},{"body":{"id":35050,"nodeType":"Block","src":"10728:341:109","statements":[{"expression":{"id":35044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35032,"name":"dP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35023,"src":"10738:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35033,"name":"dP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35023,"src":"10744:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":35034,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35006,"src":"10749:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10744:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35036,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10743:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":35037,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34962,"src":"10755:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35039,"indexExpression":{"id":35038,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35027,"src":"10758:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10755:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":35040,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34970,"src":"10763:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10755:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35042,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10754:19:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10743:30:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10738:35:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35045,"nodeType":"ExpressionStatement","src":"10738:35:109"},{"id":35049,"nodeType":"UncheckedBlock","src":"11025:36:109","statements":[{"expression":{"id":35047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11047:3:109","subExpression":{"id":35046,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35027,"src":"11049:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35048,"nodeType":"ExpressionStatement","src":"11047:3:109"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35029,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35027,"src":"10711:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":35030,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34970,"src":"10715:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10711:13:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35051,"initializationExpression":{"assignments":[35027],"declarations":[{"constant":false,"id":35027,"mutability":"mutable","name":"j","nameLocation":"10708:1:109","nodeType":"VariableDeclaration","scope":35051,"src":"10700:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35026,"name":"uint256","nodeType":"ElementaryTypeName","src":"10700:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35028,"nodeType":"VariableDeclarationStatement","src":"10700:9:109"},"nodeType":"ForStatement","src":"10695:374:109"},{"expression":{"id":35054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35052,"name":"prevD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35003,"src":"11076:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35053,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35006,"src":"11084:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11076:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35055,"nodeType":"ExpressionStatement","src":"11076:9:109"},{"expression":{"id":35093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35056,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35006,"src":"11093:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35057,"name":"nA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35010,"src":"11108:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":35058,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34975,"src":"11113:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11108:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35060,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11107:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":35061,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"11118:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":35062,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11128:11:109","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"11118:21:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11107:32:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35064,"name":"dP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35023,"src":"11142:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":35065,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34970,"src":"11147:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11142:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11107:49:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35068,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11106:51:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":35069,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35006,"src":"11160:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11106:55:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35071,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11105:57:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35072,"name":"nA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35010,"src":"11177:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":35073,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"11182:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":35074,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11192:11:109","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"11182:21:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11177:26:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35076,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11176:28:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":35077,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35006,"src":"11207:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11176:32:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35079,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11175:34:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":35080,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"11212:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":35081,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11222:11:109","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"11212:21:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11175:58:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35083,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34970,"src":"11237:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":35084,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11249:1:109","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11237:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35086,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11236:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":35087,"name":"dP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35023,"src":"11254:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11236:20:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11175:81:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35090,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11174:83:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35091,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11173:85:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11105:153:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11093:165:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35094,"nodeType":"ExpressionStatement","src":"11093:165:109"},{"condition":{"arguments":[{"id":35097,"name":"prevD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35003,"src":"11280:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":35095,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35006,"src":"11270:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11272:7:109","memberName":"within1","nodeType":"MemberAccess","referencedDeclaration":30620,"src":"11270:9:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":35098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11270:16:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35102,"nodeType":"IfStatement","src":"11266:49:109","trueBody":{"id":35101,"nodeType":"Block","src":"11288:27:109","statements":[{"expression":{"id":35099,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35006,"src":"11305:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":34968,"id":35100,"nodeType":"Return","src":"11298:8:109"}]}},{"id":35106,"nodeType":"UncheckedBlock","src":"11323:32:109","statements":[{"expression":{"id":35104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11343:3:109","subExpression":{"id":35103,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35016,"src":"11345:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35105,"nodeType":"ExpressionStatement","src":"11343:3:109"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35018,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35016,"src":"10633:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":35019,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"10637:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":35020,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10647:14:109","memberName":"MAX_LOOP_LIMIT","nodeType":"MemberAccess","referencedDeclaration":29282,"src":"10637:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10633:28:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35108,"initializationExpression":{"assignments":[35016],"declarations":[{"constant":false,"id":35016,"mutability":"mutable","name":"i","nameLocation":"10630:1:109","nodeType":"VariableDeclaration","scope":35108,"src":"10622:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35015,"name":"uint256","nodeType":"ElementaryTypeName","src":"10622:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35017,"nodeType":"VariableDeclarationStatement","src":"10622:9:109"},"nodeType":"ForStatement","src":"10617:744:109"},{"expression":{"arguments":[{"hexValue":"4420646f6573206e6f7420636f6e7665726765","id":35110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11617:21:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_eb80683d13e69e40aa7f57ce3558136d2c8c4c88f682021213f7030fc3d23afd","typeString":"literal_string \"D does not converge\""},"value":"D does not converge"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_eb80683d13e69e40aa7f57ce3558136d2c8c4c88f682021213f7030fc3d23afd","typeString":"literal_string \"D does not converge\""}],"id":35109,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"11610:6:109","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":35111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11610:29:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35112,"nodeType":"ExpressionStatement","src":"11610:29:109"}]},"documentation":{"id":34959,"nodeType":"StructuredDocumentation","src":"9868:399:109","text":" @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\n @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\n as the pool.\n @param a the amplification coefficient * n ** (n - 1) in Constants.A_PRECISION.\n See the StableSwap paper for details\n @return the invariant, at the precision of the pool"},"functionSelector":"76a3b67c","id":35114,"implemented":true,"kind":"function","modifiers":[],"name":"getD","nameLocation":"10279:4:109","nodeType":"FunctionDefinition","parameters":{"id":34965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34962,"mutability":"mutable","name":"xp","nameLocation":"10301:2:109","nodeType":"VariableDeclaration","scope":35114,"src":"10284:19:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34960,"name":"uint256","nodeType":"ElementaryTypeName","src":"10284:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34961,"nodeType":"ArrayTypeName","src":"10284:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34964,"mutability":"mutable","name":"a","nameLocation":"10313:1:109","nodeType":"VariableDeclaration","scope":35114,"src":"10305:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34963,"name":"uint256","nodeType":"ElementaryTypeName","src":"10305:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10283:32:109"},"returnParameters":{"id":34968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34967,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35114,"src":"10337:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34966,"name":"uint256","nodeType":"ElementaryTypeName","src":"10337:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10336:9:109"},"scope":37721,"src":"10270:1374:109","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":35177,"nodeType":"Block","src":"12316:330:109","statements":[{"assignments":[35128],"declarations":[{"constant":false,"id":35128,"mutability":"mutable","name":"numTokens","nameLocation":"12330:9:109","nodeType":"VariableDeclaration","scope":35177,"src":"12322:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35127,"name":"uint256","nodeType":"ElementaryTypeName","src":"12322:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35131,"initialValue":{"expression":{"id":35129,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35118,"src":"12342:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12351:6:109","memberName":"length","nodeType":"MemberAccess","src":"12342:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12322:35:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35133,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35128,"src":"12371:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":35134,"name":"precisionMultipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35121,"src":"12384:20:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12405:6:109","memberName":"length","nodeType":"MemberAccess","src":"12384:27:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12371:40:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d69736d61746368206d756c7469706c69657273","id":35137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12413:22:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_d9b2e328f4209b3735eca19488e3afd57ba32c456d5e1a010a233e595f7b0b47","typeString":"literal_string \"mismatch multipliers\""},"value":"mismatch multipliers"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d9b2e328f4209b3735eca19488e3afd57ba32c456d5e1a010a233e595f7b0b47","typeString":"literal_string \"mismatch multipliers\""}],"id":35132,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12363:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12363:73:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35139,"nodeType":"ExpressionStatement","src":"12363:73:109"},{"assignments":[35144],"declarations":[{"constant":false,"id":35144,"mutability":"mutable","name":"xp","nameLocation":"12459:2:109","nodeType":"VariableDeclaration","scope":35177,"src":"12442:19:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35142,"name":"uint256","nodeType":"ElementaryTypeName","src":"12442:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35143,"nodeType":"ArrayTypeName","src":"12442:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":35150,"initialValue":{"arguments":[{"id":35148,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35128,"src":"12478:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":35147,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"12464:13:109","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":35145,"name":"uint256","nodeType":"ElementaryTypeName","src":"12468:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35146,"nodeType":"ArrayTypeName","src":"12468:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":35149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12464:24:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"12442:46:109"},{"body":{"id":35173,"nodeType":"Block","src":"12527:100:109","statements":[{"expression":{"id":35167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":35157,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35144,"src":"12535:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35159,"indexExpression":{"id":35158,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35152,"src":"12538:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12535:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":35160,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35118,"src":"12543:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35162,"indexExpression":{"id":35161,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35152,"src":"12552:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12543:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"baseExpression":{"id":35163,"name":"precisionMultipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35121,"src":"12557:20:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35165,"indexExpression":{"id":35164,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35152,"src":"12578:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12557:23:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12543:37:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12535:45:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35168,"nodeType":"ExpressionStatement","src":"12535:45:109"},{"id":35172,"nodeType":"UncheckedBlock","src":"12589:32:109","statements":[{"expression":{"id":35170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"12609:3:109","subExpression":{"id":35169,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35152,"src":"12611:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35171,"nodeType":"ExpressionStatement","src":"12609:3:109"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35154,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35152,"src":"12510:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":35155,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35128,"src":"12514:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12510:13:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35174,"initializationExpression":{"assignments":[35152],"declarations":[{"constant":false,"id":35152,"mutability":"mutable","name":"i","nameLocation":"12507:1:109","nodeType":"VariableDeclaration","scope":35174,"src":"12499:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35151,"name":"uint256","nodeType":"ElementaryTypeName","src":"12499:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35153,"nodeType":"VariableDeclarationStatement","src":"12499:9:109"},"nodeType":"ForStatement","src":"12494:133:109"},{"expression":{"id":35175,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35144,"src":"12639:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":35126,"id":35176,"nodeType":"Return","src":"12632:9:109"}]},"documentation":{"id":35115,"nodeType":"StructuredDocumentation","src":"11648:531:109","text":" @notice Given a set of balances and precision multipliers, return the\n precision-adjusted balances.\n @param balances an array of token balances, in their native precisions.\n These should generally correspond with pooled tokens.\n @param precisionMultipliers an array of multipliers, corresponding to\n the amounts in the balances array. When multiplied together they\n should yield amounts at the pool's precision.\n @return an array of amounts \"scaled\" to the pool's precision"},"id":35178,"implemented":true,"kind":"function","modifiers":[],"name":"_xp","nameLocation":"12191:3:109","nodeType":"FunctionDefinition","parameters":{"id":35122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35118,"mutability":"mutable","name":"balances","nameLocation":"12212:8:109","nodeType":"VariableDeclaration","scope":35178,"src":"12195:25:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35116,"name":"uint256","nodeType":"ElementaryTypeName","src":"12195:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35117,"nodeType":"ArrayTypeName","src":"12195:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":35121,"mutability":"mutable","name":"precisionMultipliers","nameLocation":"12239:20:109","nodeType":"VariableDeclaration","scope":35178,"src":"12222:37:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35119,"name":"uint256","nodeType":"ElementaryTypeName","src":"12222:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35120,"nodeType":"ArrayTypeName","src":"12222:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"12194:66:109"},"returnParameters":{"id":35126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35125,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35178,"src":"12296:16:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35123,"name":"uint256","nodeType":"ElementaryTypeName","src":"12296:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35124,"nodeType":"ArrayTypeName","src":"12296:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"12295:18:109"},"scope":37721,"src":"12182:464:109","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":35195,"nodeType":"Block","src":"12967:68:109","statements":[{"expression":{"arguments":[{"expression":{"id":35189,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35182,"src":"12984:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":35190,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12989:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"12984:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},{"expression":{"id":35191,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35182,"src":"12999:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":35192,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13004:25:109","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":34372,"src":"12999:30:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"},{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}],"id":35188,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[35178,35196],"referencedDeclaration":35178,"src":"12980:3:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":35193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12980:50:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":35187,"id":35194,"nodeType":"Return","src":"12973:57:109"}]},"documentation":{"id":35179,"nodeType":"StructuredDocumentation","src":"12650:241:109","text":" @notice Return the precision-adjusted balances of all tokens in the pool\n @param self Swap struct to read from\n @return the pool balances \"scaled\" to the pool's precision, allowing\n them to be more easily compared."},"id":35196,"implemented":true,"kind":"function","modifiers":[],"name":"_xp","nameLocation":"12903:3:109","nodeType":"FunctionDefinition","parameters":{"id":35183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35182,"mutability":"mutable","name":"self","nameLocation":"12920:4:109","nodeType":"VariableDeclaration","scope":35196,"src":"12907:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":35181,"nodeType":"UserDefinedTypeName","pathNode":{"id":35180,"name":"Swap","nameLocations":["12907:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"12907:4:109"},"referencedDeclaration":34379,"src":"12907:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"}],"src":"12906:19:109"},"returnParameters":{"id":35187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35186,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35196,"src":"12949:16:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35184,"name":"uint256","nodeType":"ElementaryTypeName","src":"12949:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35185,"nodeType":"ArrayTypeName","src":"12949:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"12948:18:109"},"scope":37721,"src":"12894:141:109","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":35249,"nodeType":"Block","src":"13319:259:109","statements":[{"assignments":[35206],"declarations":[{"constant":false,"id":35206,"mutability":"mutable","name":"d","nameLocation":"13333:1:109","nodeType":"VariableDeclaration","scope":35249,"src":"13325:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35205,"name":"uint256","nodeType":"ElementaryTypeName","src":"13325:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35215,"initialValue":{"arguments":[{"arguments":[{"id":35209,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35200,"src":"13346:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}],"id":35208,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[35178,35196],"referencedDeclaration":35196,"src":"13342:3:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer) view returns (uint256[] memory)"}},"id":35210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13342:9:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"id":35212,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35200,"src":"13366:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}],"id":35211,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"13353:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer) view returns (uint256)"}},"id":35213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13353:18:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":35207,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35114,"src":"13337:4:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":35214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13337:35:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13325:47:109"},{"assignments":[35218],"declarations":[{"constant":false,"id":35218,"mutability":"mutable","name":"lpToken","nameLocation":"13386:7:109","nodeType":"VariableDeclaration","scope":35249,"src":"13378:15:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"},"typeName":{"id":35217,"nodeType":"UserDefinedTypeName","pathNode":{"id":35216,"name":"LPToken","nameLocations":["13378:7:109"],"nodeType":"IdentifierPath","referencedDeclaration":23179,"src":"13378:7:109"},"referencedDeclaration":23179,"src":"13378:7:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"visibility":"internal"}],"id":35221,"initialValue":{"expression":{"id":35219,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35200,"src":"13396:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":35220,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13401:7:109","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":34365,"src":"13396:12:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"nodeType":"VariableDeclarationStatement","src":"13378:30:109"},{"assignments":[35223],"declarations":[{"constant":false,"id":35223,"mutability":"mutable","name":"supply","nameLocation":"13422:6:109","nodeType":"VariableDeclaration","scope":35249,"src":"13414:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35222,"name":"uint256","nodeType":"ElementaryTypeName","src":"13414:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35227,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":35224,"name":"lpToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35218,"src":"13431:7:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":35225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13439:11:109","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":8543,"src":"13431:19:109","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":35226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13431:21:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13414:38:109"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35228,"name":"supply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35223,"src":"13462:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":35229,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13472:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13462:11:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35246,"nodeType":"IfStatement","src":"13458:102:109","trueBody":{"id":35245,"nodeType":"Block","src":"13475:85:109","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35231,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35206,"src":"13491:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35238,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":35232,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13496:2:109","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[{"expression":{"id":35235,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"13508:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":35236,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13518:23:109","memberName":"POOL_PRECISION_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":29266,"src":"13508:33:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":35234,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13500:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":35233,"name":"uint256","nodeType":"ElementaryTypeName","src":"13500:7:109","typeDescriptions":{}}},"id":35237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13500:42:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13496:46:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35239,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"13495:48:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13491:52:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35241,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13490:54:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":35242,"name":"supply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35223,"src":"13547:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13490:63:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":35204,"id":35244,"nodeType":"Return","src":"13483:70:109"}]}},{"expression":{"hexValue":"30","id":35247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13572:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":35204,"id":35248,"nodeType":"Return","src":"13565:8:109"}]},"documentation":{"id":35197,"nodeType":"StructuredDocumentation","src":"13039:201:109","text":" @notice Get the virtual price, to help calculate profit\n @param self Swap struct to read from\n @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS"},"functionSelector":"8be1e523","id":35250,"implemented":true,"kind":"function","modifiers":[],"name":"getVirtualPrice","nameLocation":"13252:15:109","nodeType":"FunctionDefinition","parameters":{"id":35201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35200,"mutability":"mutable","name":"self","nameLocation":"13281:4:109","nodeType":"VariableDeclaration","scope":35250,"src":"13268:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":35199,"nodeType":"UserDefinedTypeName","pathNode":{"id":35198,"name":"Swap","nameLocations":["13268:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"13268:4:109"},"referencedDeclaration":34379,"src":"13268:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"}],"src":"13267:19:109"},"returnParameters":{"id":35204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35203,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35250,"src":"13310:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35202,"name":"uint256","nodeType":"ElementaryTypeName","src":"13310:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13309:9:109"},"scope":37721,"src":"13243:335:109","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":35451,"nodeType":"Block","src":"14352:1341:109","statements":[{"assignments":[35268],"declarations":[{"constant":false,"id":35268,"mutability":"mutable","name":"numTokens","nameLocation":"14366:9:109","nodeType":"VariableDeclaration","scope":35451,"src":"14358:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35267,"name":"uint256","nodeType":"ElementaryTypeName","src":"14358:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35271,"initialValue":{"expression":{"id":35269,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35262,"src":"14378:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14381:6:109","memberName":"length","nodeType":"MemberAccess","src":"14378:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14358:29:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":35275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35273,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35255,"src":"14401:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":35274,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35257,"src":"14419:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"14401:30:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6d7061726520746f6b656e20746f20697473656c66","id":35276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14433:25:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941","typeString":"literal_string \"compare token to itself\""},"value":"compare token to itself"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941","typeString":"literal_string \"compare token to itself\""}],"id":35272,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14393:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14393:66:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35278,"nodeType":"ExpressionStatement","src":"14393:66:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":35286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35280,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35255,"src":"14473:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":35281,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35268,"src":"14490:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14473:26:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35283,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35257,"src":"14503:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":35284,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35268,"src":"14518:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14503:24:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14473:54:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"746f6b656e206e6f7420666f756e64","id":35287,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14529:17:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_9696d201946a7b6efbea55f1e57c9bbecf77447f35c86ca3cfdc292daa9e8b3d","typeString":"literal_string \"token not found\""},"value":"token not found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9696d201946a7b6efbea55f1e57c9bbecf77447f35c86ca3cfdc292daa9e8b3d","typeString":"literal_string \"token not found\""}],"id":35279,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14465:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14465:82:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35289,"nodeType":"ExpressionStatement","src":"14465:82:109"},{"assignments":[35291],"declarations":[{"constant":false,"id":35291,"mutability":"mutable","name":"d","nameLocation":"14562:1:109","nodeType":"VariableDeclaration","scope":35451,"src":"14554:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35290,"name":"uint256","nodeType":"ElementaryTypeName","src":"14554:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35296,"initialValue":{"arguments":[{"id":35293,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35262,"src":"14571:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":35294,"name":"preciseA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35253,"src":"14575:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":35292,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35114,"src":"14566:4:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":35295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14566:18:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14554:30:109"},{"assignments":[35298],"declarations":[{"constant":false,"id":35298,"mutability":"mutable","name":"c","nameLocation":"14598:1:109","nodeType":"VariableDeclaration","scope":35451,"src":"14590:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35297,"name":"uint256","nodeType":"ElementaryTypeName","src":"14590:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35300,"initialValue":{"id":35299,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35291,"src":"14602:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14590:13:109"},{"assignments":[35302],"declarations":[{"constant":false,"id":35302,"mutability":"mutable","name":"s","nameLocation":"14617:1:109","nodeType":"VariableDeclaration","scope":35451,"src":"14609:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35301,"name":"uint256","nodeType":"ElementaryTypeName","src":"14609:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35303,"nodeType":"VariableDeclarationStatement","src":"14609:9:109"},{"assignments":[35305],"declarations":[{"constant":false,"id":35305,"mutability":"mutable","name":"nA","nameLocation":"14632:2:109","nodeType":"VariableDeclaration","scope":35451,"src":"14624:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35304,"name":"uint256","nodeType":"ElementaryTypeName","src":"14624:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35309,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35306,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35268,"src":"14637:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":35307,"name":"preciseA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35253,"src":"14649:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14637:20:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14624:33:109"},{"assignments":[35311],"declarations":[{"constant":false,"id":35311,"mutability":"mutable","name":"_x","nameLocation":"14672:2:109","nodeType":"VariableDeclaration","scope":35451,"src":"14664:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35310,"name":"uint256","nodeType":"ElementaryTypeName","src":"14664:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35312,"nodeType":"VariableDeclarationStatement","src":"14664:10:109"},{"body":{"id":35365,"nodeType":"Block","src":"14713:526:109","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35319,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35314,"src":"14725:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":35320,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35255,"src":"14730:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"14725:19:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35327,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35314,"src":"14781:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":35328,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35257,"src":"14786:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"14781:17:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":35342,"nodeType":"Block","src":"14835:72:109","statements":[{"id":35340,"nodeType":"UncheckedBlock","src":"14845:36:109","statements":[{"expression":{"id":35338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"14867:3:109","subExpression":{"id":35337,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35314,"src":"14869:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35339,"nodeType":"ExpressionStatement","src":"14867:3:109"}]},{"id":35341,"nodeType":"Continue","src":"14890:8:109"}]},"id":35343,"nodeType":"IfStatement","src":"14777:130:109","trueBody":{"id":35336,"nodeType":"Block","src":"14800:29:109","statements":[{"expression":{"id":35334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35330,"name":"_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35311,"src":"14810:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":35331,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35262,"src":"14815:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35333,"indexExpression":{"id":35332,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35314,"src":"14818:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14815:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14810:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35335,"nodeType":"ExpressionStatement","src":"14810:10:109"}]}},"id":35344,"nodeType":"IfStatement","src":"14721:186:109","trueBody":{"id":35326,"nodeType":"Block","src":"14746:25:109","statements":[{"expression":{"id":35324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35322,"name":"_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35311,"src":"14756:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35323,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35259,"src":"14761:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14756:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35325,"nodeType":"ExpressionStatement","src":"14756:6:109"}]}},{"expression":{"id":35347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35345,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35302,"src":"14914:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":35346,"name":"_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35311,"src":"14919:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14914:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35348,"nodeType":"ExpressionStatement","src":"14914:7:109"},{"expression":{"id":35359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35349,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35298,"src":"14929:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35350,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35298,"src":"14934:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":35351,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35291,"src":"14938:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14934:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35353,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14933:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35354,"name":"_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35311,"src":"14944:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":35355,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35268,"src":"14949:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14944:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35357,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14943:16:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14933:26:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14929:30:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35360,"nodeType":"ExpressionStatement","src":"14929:30:109"},{"id":35364,"nodeType":"UncheckedBlock","src":"15201:32:109","statements":[{"expression":{"id":35362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15221:3:109","subExpression":{"id":35361,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35314,"src":"15223:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35363,"nodeType":"ExpressionStatement","src":"15221:3:109"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35316,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35314,"src":"14696:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":35317,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35268,"src":"14700:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14696:13:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35366,"initializationExpression":{"assignments":[35314],"declarations":[{"constant":false,"id":35314,"mutability":"mutable","name":"i","nameLocation":"14693:1:109","nodeType":"VariableDeclaration","scope":35366,"src":"14685:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35313,"name":"uint256","nodeType":"ElementaryTypeName","src":"14685:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35315,"nodeType":"VariableDeclarationStatement","src":"14685:9:109"},"nodeType":"ForStatement","src":"14680:559:109"},{"expression":{"id":35380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35367,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35298,"src":"15244:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35368,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35298,"src":"15249:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":35369,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35291,"src":"15253:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15249:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":35371,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"15257:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":35372,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15267:11:109","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"15257:21:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15249:29:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35374,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15248:31:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35375,"name":"nA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35305,"src":"15283:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":35376,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35268,"src":"15288:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15283:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35378,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15282:16:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15248:50:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15244:54:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35381,"nodeType":"ExpressionStatement","src":"15244:54:109"},{"assignments":[35383],"declarations":[{"constant":false,"id":35383,"mutability":"mutable","name":"b","nameLocation":"15312:1:109","nodeType":"VariableDeclaration","scope":35451,"src":"15304:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35382,"name":"uint256","nodeType":"ElementaryTypeName","src":"15304:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35394,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35384,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35302,"src":"15316:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35385,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35291,"src":"15322:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":35386,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"15326:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":35387,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15336:11:109","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"15326:21:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15322:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35389,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15321:27:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":35390,"name":"nA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35305,"src":"15351:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15321:32:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35392,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15320:34:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15316:38:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15304:50:109"},{"assignments":[35396],"declarations":[{"constant":false,"id":35396,"mutability":"mutable","name":"yPrev","nameLocation":"15368:5:109","nodeType":"VariableDeclaration","scope":35451,"src":"15360:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35395,"name":"uint256","nodeType":"ElementaryTypeName","src":"15360:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35397,"nodeType":"VariableDeclarationStatement","src":"15360:13:109"},{"assignments":[35399],"declarations":[{"constant":false,"id":35399,"mutability":"mutable","name":"y","nameLocation":"15387:1:109","nodeType":"VariableDeclaration","scope":35451,"src":"15379:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35398,"name":"uint256","nodeType":"ElementaryTypeName","src":"15379:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35401,"initialValue":{"id":35400,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35291,"src":"15391:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15379:13:109"},{"body":{"id":35445,"nodeType":"Block","src":"15478:165:109","statements":[{"expression":{"id":35411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35409,"name":"yPrev","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35396,"src":"15486:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35410,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35399,"src":"15494:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15486:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35412,"nodeType":"ExpressionStatement","src":"15486:9:109"},{"expression":{"id":35431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35413,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35399,"src":"15503:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35414,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35399,"src":"15509:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":35415,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35399,"src":"15513:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15509:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35417,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15508:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":35418,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35298,"src":"15518:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15508:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35420,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15507:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35421,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35399,"src":"15525:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":35422,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15529:1:109","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"15525:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35424,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15524:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":35425,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35383,"src":"15534:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15524:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":35427,"name":"d","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35291,"src":"15538:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15524:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35429,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15523:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15507:33:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15503:37:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35432,"nodeType":"ExpressionStatement","src":"15503:37:109"},{"condition":{"arguments":[{"id":35435,"name":"yPrev","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35396,"src":"15562:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":35433,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35399,"src":"15552:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15554:7:109","memberName":"within1","nodeType":"MemberAccess","referencedDeclaration":30620,"src":"15552:9:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":35436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15552:16:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35440,"nodeType":"IfStatement","src":"15548:49:109","trueBody":{"id":35439,"nodeType":"Block","src":"15570:27:109","statements":[{"expression":{"id":35437,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35399,"src":"15587:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":35266,"id":35438,"nodeType":"Return","src":"15580:8:109"}]}},{"id":35444,"nodeType":"UncheckedBlock","src":"15605:32:109","statements":[{"expression":{"id":35442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15625:3:109","subExpression":{"id":35441,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35403,"src":"15627:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35443,"nodeType":"ExpressionStatement","src":"15625:3:109"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35405,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35403,"src":"15446:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":35406,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"15450:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":35407,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15460:14:109","memberName":"MAX_LOOP_LIMIT","nodeType":"MemberAccess","referencedDeclaration":29282,"src":"15450:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15446:28:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35446,"initializationExpression":{"assignments":[35403],"declarations":[{"constant":false,"id":35403,"mutability":"mutable","name":"i","nameLocation":"15443:1:109","nodeType":"VariableDeclaration","scope":35446,"src":"15435:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35402,"name":"uint256","nodeType":"ElementaryTypeName","src":"15435:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35404,"nodeType":"VariableDeclarationStatement","src":"15435:9:109"},"nodeType":"ForStatement","src":"15430:213:109"},{"expression":{"arguments":[{"hexValue":"417070726f78696d6174696f6e20646964206e6f7420636f6e7665726765","id":35448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15655:32:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05","typeString":"literal_string \"Approximation did not converge\""},"value":"Approximation did not converge"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05","typeString":"literal_string \"Approximation did not converge\""}],"id":35447,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"15648:6:109","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":35449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15648:40:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35450,"nodeType":"ExpressionStatement","src":"15648:40:109"}]},"documentation":{"id":35251,"nodeType":"StructuredDocumentation","src":"13582:607:109","text":" @notice Calculate the new balances of the tokens given the indexes of the token\n that is swapped from (FROM) and the token that is swapped to (TO).\n This function is used as a helper function to calculate how much TO token\n the user should receive on swap.\n @param preciseA precise form of amplification coefficient\n @param tokenIndexFrom index of FROM token\n @param tokenIndexTo index of TO token\n @param x the new total amount of FROM token\n @param xp balances of the tokens in the pool\n @return the amount of TO token that should remain in the pool"},"functionSelector":"80ba0f2d","id":35452,"implemented":true,"kind":"function","modifiers":[],"name":"getY","nameLocation":"14201:4:109","nodeType":"FunctionDefinition","parameters":{"id":35263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35253,"mutability":"mutable","name":"preciseA","nameLocation":"14219:8:109","nodeType":"VariableDeclaration","scope":35452,"src":"14211:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35252,"name":"uint256","nodeType":"ElementaryTypeName","src":"14211:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35255,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"14239:14:109","nodeType":"VariableDeclaration","scope":35452,"src":"14233:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":35254,"name":"uint8","nodeType":"ElementaryTypeName","src":"14233:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":35257,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"14265:12:109","nodeType":"VariableDeclaration","scope":35452,"src":"14259:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":35256,"name":"uint8","nodeType":"ElementaryTypeName","src":"14259:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":35259,"mutability":"mutable","name":"x","nameLocation":"14291:1:109","nodeType":"VariableDeclaration","scope":35452,"src":"14283:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35258,"name":"uint256","nodeType":"ElementaryTypeName","src":"14283:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35262,"mutability":"mutable","name":"xp","nameLocation":"14315:2:109","nodeType":"VariableDeclaration","scope":35452,"src":"14298:19:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35260,"name":"uint256","nodeType":"ElementaryTypeName","src":"14298:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35261,"nodeType":"ArrayTypeName","src":"14298:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"14205:116:109"},"returnParameters":{"id":35266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35265,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35452,"src":"14343:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35264,"name":"uint256","nodeType":"ElementaryTypeName","src":"14343:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14342:9:109"},"scope":37721,"src":"14192:1501:109","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":35479,"nodeType":"Block","src":"16249:89:109","statements":[{"expression":{"id":35477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":35467,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35465,"src":"16256:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null],"id":35468,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"16255:6:109","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$__$","typeString":"tuple(uint256,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":35470,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35456,"src":"16279:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},{"id":35471,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35458,"src":"16285:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":35472,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35460,"src":"16301:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":35473,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35462,"src":"16315:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":35474,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35456,"src":"16319:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":35475,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16324:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"16319:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}],"id":35469,"name":"_calculateSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35616,"src":"16264:14:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint8,uint8,uint256,uint256[] memory) view returns (uint256,uint256)"}},"id":35476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16264:69:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"16255:78:109","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35478,"nodeType":"ExpressionStatement","src":"16255:78:109"}]},"documentation":{"id":35453,"nodeType":"StructuredDocumentation","src":"15697:398:109","text":" @notice Externally calculates a swap between two tokens.\n @param self Swap struct to read from\n @param tokenIndexFrom the token to sell\n @param tokenIndexTo the token to buy\n @param dx the number of tokens to sell. If the token charges a fee on transfers,\n use the amount that gets transferred after the fee.\n @return dy the number of tokens the user will get"},"functionSelector":"2f4998ad","id":35480,"implemented":true,"kind":"function","modifiers":[],"name":"calculateSwap","nameLocation":"16107:13:109","nodeType":"FunctionDefinition","parameters":{"id":35463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35456,"mutability":"mutable","name":"self","nameLocation":"16139:4:109","nodeType":"VariableDeclaration","scope":35480,"src":"16126:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":35455,"nodeType":"UserDefinedTypeName","pathNode":{"id":35454,"name":"Swap","nameLocations":["16126:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"16126:4:109"},"referencedDeclaration":34379,"src":"16126:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":35458,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"16155:14:109","nodeType":"VariableDeclaration","scope":35480,"src":"16149:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":35457,"name":"uint8","nodeType":"ElementaryTypeName","src":"16149:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":35460,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"16181:12:109","nodeType":"VariableDeclaration","scope":35480,"src":"16175:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":35459,"name":"uint8","nodeType":"ElementaryTypeName","src":"16175:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":35462,"mutability":"mutable","name":"dx","nameLocation":"16207:2:109","nodeType":"VariableDeclaration","scope":35480,"src":"16199:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35461,"name":"uint256","nodeType":"ElementaryTypeName","src":"16199:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16120:93:109"},"returnParameters":{"id":35466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35465,"mutability":"mutable","name":"dy","nameLocation":"16245:2:109","nodeType":"VariableDeclaration","scope":35480,"src":"16237:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35464,"name":"uint256","nodeType":"ElementaryTypeName","src":"16237:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16236:12:109"},"scope":37721,"src":"16098:240:109","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":35507,"nodeType":"Block","src":"16812:92:109","statements":[{"expression":{"id":35505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":35495,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35493,"src":"16819:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null],"id":35496,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"16818:6:109","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$__$","typeString":"tuple(uint256,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":35498,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35484,"src":"16845:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},{"id":35499,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35486,"src":"16851:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":35500,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35488,"src":"16867:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":35501,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35490,"src":"16881:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":35502,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35484,"src":"16885:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":35503,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16890:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"16885:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}],"id":35497,"name":"_calculateSwapInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35744,"src":"16827:17:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint8,uint8,uint256,uint256[] memory) view returns (uint256,uint256)"}},"id":35504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16827:72:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"16818:81:109","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35506,"nodeType":"ExpressionStatement","src":"16818:81:109"}]},"documentation":{"id":35481,"nodeType":"StructuredDocumentation","src":"16342:313:109","text":" @notice Externally calculates a swap between two tokens.\n @param self Swap struct to read from\n @param tokenIndexFrom the token to sell\n @param tokenIndexTo the token to buy\n @param dy the number of tokens to buy.\n @return dx the number of tokens the user have to transfer + fee"},"functionSelector":"b92fa35c","id":35508,"implemented":true,"kind":"function","modifiers":[],"name":"calculateSwapInv","nameLocation":"16667:16:109","nodeType":"FunctionDefinition","parameters":{"id":35491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35484,"mutability":"mutable","name":"self","nameLocation":"16702:4:109","nodeType":"VariableDeclaration","scope":35508,"src":"16689:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":35483,"nodeType":"UserDefinedTypeName","pathNode":{"id":35482,"name":"Swap","nameLocations":["16689:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"16689:4:109"},"referencedDeclaration":34379,"src":"16689:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":35486,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"16718:14:109","nodeType":"VariableDeclaration","scope":35508,"src":"16712:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":35485,"name":"uint8","nodeType":"ElementaryTypeName","src":"16712:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":35488,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"16744:12:109","nodeType":"VariableDeclaration","scope":35508,"src":"16738:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":35487,"name":"uint8","nodeType":"ElementaryTypeName","src":"16738:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":35490,"mutability":"mutable","name":"dy","nameLocation":"16770:2:109","nodeType":"VariableDeclaration","scope":35508,"src":"16762:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35489,"name":"uint256","nodeType":"ElementaryTypeName","src":"16762:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16683:93:109"},"returnParameters":{"id":35494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35493,"mutability":"mutable","name":"dx","nameLocation":"16808:2:109","nodeType":"VariableDeclaration","scope":35508,"src":"16800:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35492,"name":"uint256","nodeType":"ElementaryTypeName","src":"16800:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16799:12:109"},"scope":37721,"src":"16658:246:109","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":35615,"nodeType":"Block","src":"17762:514:109","statements":[{"assignments":[35532],"declarations":[{"constant":false,"id":35532,"mutability":"mutable","name":"multipliers","nameLocation":"17785:11:109","nodeType":"VariableDeclaration","scope":35615,"src":"17768:28:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35530,"name":"uint256","nodeType":"ElementaryTypeName","src":"17768:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35531,"nodeType":"ArrayTypeName","src":"17768:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":35535,"initialValue":{"expression":{"id":35533,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35512,"src":"17799:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":35534,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17804:25:109","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":34372,"src":"17799:30:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"17768:61:109"},{"assignments":[35540],"declarations":[{"constant":false,"id":35540,"mutability":"mutable","name":"xp","nameLocation":"17852:2:109","nodeType":"VariableDeclaration","scope":35615,"src":"17835:19:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35538,"name":"uint256","nodeType":"ElementaryTypeName","src":"17835:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35539,"nodeType":"ArrayTypeName","src":"17835:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":35545,"initialValue":{"arguments":[{"id":35542,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35521,"src":"17861:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":35543,"name":"multipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35532,"src":"17871:11:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":35541,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[35178,35196],"referencedDeclaration":35178,"src":"17857:3:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":35544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17857:26:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"17835:48:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":35555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35547,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35514,"src":"17897:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":35548,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35540,"src":"17914:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17917:6:109","memberName":"length","nodeType":"MemberAccess","src":"17914:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17897:26:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35551,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35516,"src":"17927:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":35552,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35540,"src":"17942:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17945:6:109","memberName":"length","nodeType":"MemberAccess","src":"17942:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17927:24:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17897:54:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e646578206f7574206f662072616e6765","id":35556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17953:20:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d","typeString":"literal_string \"index out of range\""},"value":"index out of range"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d","typeString":"literal_string \"index out of range\""}],"id":35546,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17889:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17889:85:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35558,"nodeType":"ExpressionStatement","src":"17889:85:109"},{"assignments":[35560],"declarations":[{"constant":false,"id":35560,"mutability":"mutable","name":"x","nameLocation":"17988:1:109","nodeType":"VariableDeclaration","scope":35615,"src":"17980:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35559,"name":"uint256","nodeType":"ElementaryTypeName","src":"17980:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35570,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35561,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35518,"src":"17992:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"baseExpression":{"id":35562,"name":"multipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35532,"src":"17997:11:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35564,"indexExpression":{"id":35563,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35514,"src":"18009:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17997:27:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17992:32:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"baseExpression":{"id":35566,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35540,"src":"18027:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35568,"indexExpression":{"id":35567,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35514,"src":"18030:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18027:18:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17992:53:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17980:65:109"},{"assignments":[35572],"declarations":[{"constant":false,"id":35572,"mutability":"mutable","name":"y","nameLocation":"18059:1:109","nodeType":"VariableDeclaration","scope":35615,"src":"18051:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35571,"name":"uint256","nodeType":"ElementaryTypeName","src":"18051:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35582,"initialValue":{"arguments":[{"arguments":[{"id":35575,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35512,"src":"18081:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}],"id":35574,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"18068:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer) view returns (uint256)"}},"id":35576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18068:18:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":35577,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35514,"src":"18088:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":35578,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35516,"src":"18104:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":35579,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35560,"src":"18118:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":35580,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35540,"src":"18121:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":35573,"name":"getY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35452,"src":"18063:4:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint8_$_t_uint8_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,uint8,uint8,uint256,uint256[] memory) pure returns (uint256)"}},"id":35581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18063:61:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18051:73:109"},{"expression":{"id":35591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35583,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35524,"src":"18130:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":35584,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35540,"src":"18135:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35586,"indexExpression":{"id":35585,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35516,"src":"18138:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18135:16:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":35587,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35572,"src":"18154:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18135:20:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":35589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18158:1:109","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"18135:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18130:29:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35592,"nodeType":"ExpressionStatement","src":"18130:29:109"},{"expression":{"id":35602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35593,"name":"dyFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35526,"src":"18165:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35594,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35524,"src":"18174:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":35595,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35512,"src":"18179:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":35596,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18184:7:109","memberName":"swapFee","nodeType":"MemberAccess","referencedDeclaration":34360,"src":"18179:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18174:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35598,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18173:19:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":35599,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"18195:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":35600,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"18205:15:109","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"18195:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18173:47:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18165:55:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35603,"nodeType":"ExpressionStatement","src":"18165:55:109"},{"expression":{"id":35613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35604,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35524,"src":"18226:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35605,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35524,"src":"18232:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":35606,"name":"dyFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35526,"src":"18237:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18232:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35608,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18231:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"id":35609,"name":"multipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35532,"src":"18246:11:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35611,"indexExpression":{"id":35610,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35516,"src":"18258:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18246:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18231:40:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18226:45:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35614,"nodeType":"ExpressionStatement","src":"18226:45:109"}]},"documentation":{"id":35509,"nodeType":"StructuredDocumentation","src":"16908:653:109","text":" @notice Internally calculates a swap between two tokens.\n @dev The caller is expected to transfer the actual amounts (dx and dy)\n using the token contracts.\n @param self Swap struct to read from\n @param tokenIndexFrom the token to sell\n @param tokenIndexTo the token to buy\n @param dx the number of tokens to sell. If the token charges a fee on transfers,\n use the amount that gets transferred after the fee.\n @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\n @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)"},"id":35616,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateSwap","nameLocation":"17573:14:109","nodeType":"FunctionDefinition","parameters":{"id":35522,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35512,"mutability":"mutable","name":"self","nameLocation":"17606:4:109","nodeType":"VariableDeclaration","scope":35616,"src":"17593:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":35511,"nodeType":"UserDefinedTypeName","pathNode":{"id":35510,"name":"Swap","nameLocations":["17593:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"17593:4:109"},"referencedDeclaration":34379,"src":"17593:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":35514,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"17622:14:109","nodeType":"VariableDeclaration","scope":35616,"src":"17616:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":35513,"name":"uint8","nodeType":"ElementaryTypeName","src":"17616:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":35516,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"17648:12:109","nodeType":"VariableDeclaration","scope":35616,"src":"17642:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":35515,"name":"uint8","nodeType":"ElementaryTypeName","src":"17642:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":35518,"mutability":"mutable","name":"dx","nameLocation":"17674:2:109","nodeType":"VariableDeclaration","scope":35616,"src":"17666:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35517,"name":"uint256","nodeType":"ElementaryTypeName","src":"17666:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35521,"mutability":"mutable","name":"balances","nameLocation":"17699:8:109","nodeType":"VariableDeclaration","scope":35616,"src":"17682:25:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35519,"name":"uint256","nodeType":"ElementaryTypeName","src":"17682:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35520,"nodeType":"ArrayTypeName","src":"17682:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"17587:124:109"},"returnParameters":{"id":35527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35524,"mutability":"mutable","name":"dy","nameLocation":"17743:2:109","nodeType":"VariableDeclaration","scope":35616,"src":"17735:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35523,"name":"uint256","nodeType":"ElementaryTypeName","src":"17735:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35526,"mutability":"mutable","name":"dyFee","nameLocation":"17755:5:109","nodeType":"VariableDeclaration","scope":35616,"src":"17747:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35525,"name":"uint256","nodeType":"ElementaryTypeName","src":"17747:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17734:27:109"},"scope":37721,"src":"17564:712:109","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":35743,"nodeType":"Block","src":"19143:634:109","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":35639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35637,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35622,"src":"19157:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":35638,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35624,"src":"19175:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"19157:30:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6d7061726520746f6b656e20746f20697473656c66","id":35640,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19189:25:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941","typeString":"literal_string \"compare token to itself\""},"value":"compare token to itself"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941","typeString":"literal_string \"compare token to itself\""}],"id":35636,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19149:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19149:66:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35642,"nodeType":"ExpressionStatement","src":"19149:66:109"},{"assignments":[35647],"declarations":[{"constant":false,"id":35647,"mutability":"mutable","name":"multipliers","nameLocation":"19238:11:109","nodeType":"VariableDeclaration","scope":35743,"src":"19221:28:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35645,"name":"uint256","nodeType":"ElementaryTypeName","src":"19221:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35646,"nodeType":"ArrayTypeName","src":"19221:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":35650,"initialValue":{"expression":{"id":35648,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35620,"src":"19252:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":35649,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19257:25:109","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":34372,"src":"19252:30:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"19221:61:109"},{"assignments":[35655],"declarations":[{"constant":false,"id":35655,"mutability":"mutable","name":"xp","nameLocation":"19305:2:109","nodeType":"VariableDeclaration","scope":35743,"src":"19288:19:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35653,"name":"uint256","nodeType":"ElementaryTypeName","src":"19288:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35654,"nodeType":"ArrayTypeName","src":"19288:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":35660,"initialValue":{"arguments":[{"id":35657,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35629,"src":"19314:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":35658,"name":"multipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35647,"src":"19324:11:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":35656,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[35178,35196],"referencedDeclaration":35178,"src":"19310:3:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":35659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19310:26:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"19288:48:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":35670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35662,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35622,"src":"19350:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":35663,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35655,"src":"19367:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19370:6:109","memberName":"length","nodeType":"MemberAccess","src":"19367:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19350:26:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35666,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35624,"src":"19380:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":35667,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35655,"src":"19395:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19398:6:109","memberName":"length","nodeType":"MemberAccess","src":"19395:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19380:24:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19350:54:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e646578206f7574206f662072616e6765","id":35671,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19406:20:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d","typeString":"literal_string \"index out of range\""},"value":"index out of range"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d","typeString":"literal_string \"index out of range\""}],"id":35661,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19342:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19342:85:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35673,"nodeType":"ExpressionStatement","src":"19342:85:109"},{"assignments":[35675],"declarations":[{"constant":false,"id":35675,"mutability":"mutable","name":"a","nameLocation":"19442:1:109","nodeType":"VariableDeclaration","scope":35743,"src":"19434:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35674,"name":"uint256","nodeType":"ElementaryTypeName","src":"19434:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35679,"initialValue":{"arguments":[{"id":35677,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35620,"src":"19459:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}],"id":35676,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"19446:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer) view returns (uint256)"}},"id":35678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19446:18:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19434:30:109"},{"assignments":[35681],"declarations":[{"constant":false,"id":35681,"mutability":"mutable","name":"d0","nameLocation":"19478:2:109","nodeType":"VariableDeclaration","scope":35743,"src":"19470:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35680,"name":"uint256","nodeType":"ElementaryTypeName","src":"19470:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35686,"initialValue":{"arguments":[{"id":35683,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35655,"src":"19488:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":35684,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35675,"src":"19492:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":35682,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35114,"src":"19483:4:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":35685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19483:11:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19470:24:109"},{"expression":{"id":35700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":35687,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35655,"src":"19501:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35689,"indexExpression":{"id":35688,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35624,"src":"19504:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"19501:16:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":35690,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35655,"src":"19520:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35692,"indexExpression":{"id":35691,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35624,"src":"19523:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19520:16:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35693,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35626,"src":"19540:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"baseExpression":{"id":35694,"name":"multipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35647,"src":"19545:11:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35696,"indexExpression":{"id":35695,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35624,"src":"19557:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19545:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19540:30:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35698,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19539:32:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19520:51:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19501:70:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35701,"nodeType":"ExpressionStatement","src":"19501:70:109"},{"assignments":[35703],"declarations":[{"constant":false,"id":35703,"mutability":"mutable","name":"x","nameLocation":"19585:1:109","nodeType":"VariableDeclaration","scope":35743,"src":"19577:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35702,"name":"uint256","nodeType":"ElementaryTypeName","src":"19577:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35710,"initialValue":{"arguments":[{"id":35705,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35675,"src":"19595:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":35706,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35622,"src":"19598:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":35707,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35655,"src":"19614:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":35708,"name":"d0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35681,"src":"19618:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":35704,"name":"getYD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34958,"src":"19589:5:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint8_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint8,uint256[] memory,uint256) pure returns (uint256)"}},"id":35709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19589:32:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19577:44:109"},{"expression":{"id":35719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35711,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35632,"src":"19627:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35712,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35703,"src":"19632:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":35713,"name":"xp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35655,"src":"19636:2:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35715,"indexExpression":{"id":35714,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35622,"src":"19639:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19636:18:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19632:22:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":35717,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19657:1:109","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"19632:26:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19627:31:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35720,"nodeType":"ExpressionStatement","src":"19627:31:109"},{"expression":{"id":35730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35721,"name":"dxFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35634,"src":"19664:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35722,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35632,"src":"19673:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":35723,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35620,"src":"19678:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":35724,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19683:7:109","memberName":"swapFee","nodeType":"MemberAccess","referencedDeclaration":34360,"src":"19678:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19673:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35726,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19672:19:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":35727,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"19694:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":35728,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"19704:15:109","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"19694:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19672:47:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19664:55:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35731,"nodeType":"ExpressionStatement","src":"19664:55:109"},{"expression":{"id":35741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35732,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35632,"src":"19725:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35733,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35632,"src":"19731:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":35734,"name":"dxFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35634,"src":"19736:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19731:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35736,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19730:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"id":35737,"name":"multipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35647,"src":"19745:11:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35739,"indexExpression":{"id":35738,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35622,"src":"19757:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19745:27:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19730:42:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19725:47:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35742,"nodeType":"ExpressionStatement","src":"19725:47:109"}]},"documentation":{"id":35617,"nodeType":"StructuredDocumentation","src":"18280:659:109","text":" @notice Internally calculates a swap between two tokens.\n @dev The caller is expected to transfer the actual amounts (dx and dy)\n using the token contracts.\n @param self Swap struct to read from\n @param tokenIndexFrom the token to sell\n @param tokenIndexTo the token to buy\n @param dy the number of tokens to buy. If the token charges a fee on transfers,\n use the amount that gets transferred after the fee.\n @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\n @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)"},"id":35744,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateSwapInv","nameLocation":"18951:17:109","nodeType":"FunctionDefinition","parameters":{"id":35630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35620,"mutability":"mutable","name":"self","nameLocation":"18987:4:109","nodeType":"VariableDeclaration","scope":35744,"src":"18974:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":35619,"nodeType":"UserDefinedTypeName","pathNode":{"id":35618,"name":"Swap","nameLocations":["18974:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"18974:4:109"},"referencedDeclaration":34379,"src":"18974:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":35622,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"19003:14:109","nodeType":"VariableDeclaration","scope":35744,"src":"18997:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":35621,"name":"uint8","nodeType":"ElementaryTypeName","src":"18997:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":35624,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"19029:12:109","nodeType":"VariableDeclaration","scope":35744,"src":"19023:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":35623,"name":"uint8","nodeType":"ElementaryTypeName","src":"19023:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":35626,"mutability":"mutable","name":"dy","nameLocation":"19055:2:109","nodeType":"VariableDeclaration","scope":35744,"src":"19047:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35625,"name":"uint256","nodeType":"ElementaryTypeName","src":"19047:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35629,"mutability":"mutable","name":"balances","nameLocation":"19080:8:109","nodeType":"VariableDeclaration","scope":35744,"src":"19063:25:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35627,"name":"uint256","nodeType":"ElementaryTypeName","src":"19063:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35628,"nodeType":"ArrayTypeName","src":"19063:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"18968:124:109"},"returnParameters":{"id":35635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35632,"mutability":"mutable","name":"dx","nameLocation":"19124:2:109","nodeType":"VariableDeclaration","scope":35744,"src":"19116:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35631,"name":"uint256","nodeType":"ElementaryTypeName","src":"19116:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35634,"mutability":"mutable","name":"dxFee","nameLocation":"19136:5:109","nodeType":"VariableDeclaration","scope":35744,"src":"19128:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35633,"name":"uint256","nodeType":"ElementaryTypeName","src":"19128:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19115:27:109"},"scope":37721,"src":"18942:835:109","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":35766,"nodeType":"Block","src":"20193:94:109","statements":[{"expression":{"arguments":[{"expression":{"id":35757,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35748,"src":"20232:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":35758,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20237:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"20232:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},{"id":35759,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35750,"src":"20247:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":35760,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35748,"src":"20255:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":35761,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20260:7:109","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":34365,"src":"20255:12:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":35762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20268:11:109","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":8543,"src":"20255:24:109","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":35763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20255:26:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":35756,"name":"_calculateRemoveLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35831,"src":"20206:25:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256[] memory)"}},"id":35764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20206:76:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":35755,"id":35765,"nodeType":"Return","src":"20199:83:109"}]},"documentation":{"id":35745,"nodeType":"StructuredDocumentation","src":"19781:299:109","text":" @notice A simple method to calculate amount of each underlying\n tokens that is returned upon burning given amount of\n LP tokens\n @param amount the amount of LP tokens that would to be burned on\n withdrawal\n @return array of amounts of tokens user will receive"},"functionSelector":"8cc122bb","id":35767,"implemented":true,"kind":"function","modifiers":[],"name":"calculateRemoveLiquidity","nameLocation":"20092:24:109","nodeType":"FunctionDefinition","parameters":{"id":35751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35748,"mutability":"mutable","name":"self","nameLocation":"20130:4:109","nodeType":"VariableDeclaration","scope":35767,"src":"20117:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":35747,"nodeType":"UserDefinedTypeName","pathNode":{"id":35746,"name":"Swap","nameLocations":["20117:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"20117:4:109"},"referencedDeclaration":34379,"src":"20117:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":35750,"mutability":"mutable","name":"amount","nameLocation":"20144:6:109","nodeType":"VariableDeclaration","scope":35767,"src":"20136:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35749,"name":"uint256","nodeType":"ElementaryTypeName","src":"20136:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20116:35:109"},"returnParameters":{"id":35755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35754,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35767,"src":"20175:16:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35752,"name":"uint256","nodeType":"ElementaryTypeName","src":"20175:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35753,"nodeType":"ArrayTypeName","src":"20175:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20174:18:109"},"scope":37721,"src":"20083:204:109","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":35830,"nodeType":"Block","src":"20447:332:109","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35781,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35772,"src":"20461:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":35782,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35774,"src":"20471:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20461:21:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"65786365656420746f74616c20737570706c79","id":35784,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"20484:21:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_b19f02778fe2ebdf3ae6da8b526e4f3fcfda929b6d006b58be5eb0b43957bde5","typeString":"literal_string \"exceed total supply\""},"value":"exceed total supply"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b19f02778fe2ebdf3ae6da8b526e4f3fcfda929b6d006b58be5eb0b43957bde5","typeString":"literal_string \"exceed total supply\""}],"id":35780,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"20453:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20453:53:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35786,"nodeType":"ExpressionStatement","src":"20453:53:109"},{"assignments":[35788],"declarations":[{"constant":false,"id":35788,"mutability":"mutable","name":"numBalances","nameLocation":"20521:11:109","nodeType":"VariableDeclaration","scope":35830,"src":"20513:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35787,"name":"uint256","nodeType":"ElementaryTypeName","src":"20513:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35791,"initialValue":{"expression":{"id":35789,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35770,"src":"20535:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20544:6:109","memberName":"length","nodeType":"MemberAccess","src":"20535:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20513:37:109"},{"assignments":[35796],"declarations":[{"constant":false,"id":35796,"mutability":"mutable","name":"amounts","nameLocation":"20573:7:109","nodeType":"VariableDeclaration","scope":35830,"src":"20556:24:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35794,"name":"uint256","nodeType":"ElementaryTypeName","src":"20556:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35795,"nodeType":"ArrayTypeName","src":"20556:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":35802,"initialValue":{"arguments":[{"id":35800,"name":"numBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35788,"src":"20597:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":35799,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"20583:13:109","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":35797,"name":"uint256","nodeType":"ElementaryTypeName","src":"20587:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35798,"nodeType":"ArrayTypeName","src":"20587:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":35801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20583:26:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"20556:53:109"},{"body":{"id":35826,"nodeType":"Block","src":"20651:104:109","statements":[{"expression":{"id":35820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":35809,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35796,"src":"20659:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35811,"indexExpression":{"id":35810,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35804,"src":"20667:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20659:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":35812,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35770,"src":"20673:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35814,"indexExpression":{"id":35813,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35804,"src":"20682:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20673:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":35815,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35772,"src":"20687:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20673:20:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35817,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20672:22:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":35818,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35774,"src":"20697:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20672:36:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20659:49:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35821,"nodeType":"ExpressionStatement","src":"20659:49:109"},{"id":35825,"nodeType":"UncheckedBlock","src":"20717:32:109","statements":[{"expression":{"id":35823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"20737:3:109","subExpression":{"id":35822,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35804,"src":"20739:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35824,"nodeType":"ExpressionStatement","src":"20737:3:109"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35806,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35804,"src":"20632:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":35807,"name":"numBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35788,"src":"20636:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20632:15:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35827,"initializationExpression":{"assignments":[35804],"declarations":[{"constant":false,"id":35804,"mutability":"mutable","name":"i","nameLocation":"20629:1:109","nodeType":"VariableDeclaration","scope":35827,"src":"20621:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35803,"name":"uint256","nodeType":"ElementaryTypeName","src":"20621:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35805,"nodeType":"VariableDeclarationStatement","src":"20621:9:109"},"nodeType":"ForStatement","src":"20616:139:109"},{"expression":{"id":35828,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35796,"src":"20767:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":35779,"id":35829,"nodeType":"Return","src":"20760:14:109"}]},"id":35831,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateRemoveLiquidity","nameLocation":"20300:25:109","nodeType":"FunctionDefinition","parameters":{"id":35775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35770,"mutability":"mutable","name":"balances","nameLocation":"20348:8:109","nodeType":"VariableDeclaration","scope":35831,"src":"20331:25:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35768,"name":"uint256","nodeType":"ElementaryTypeName","src":"20331:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35769,"nodeType":"ArrayTypeName","src":"20331:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":35772,"mutability":"mutable","name":"amount","nameLocation":"20370:6:109","nodeType":"VariableDeclaration","scope":35831,"src":"20362:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35771,"name":"uint256","nodeType":"ElementaryTypeName","src":"20362:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35774,"mutability":"mutable","name":"totalSupply","nameLocation":"20390:11:109","nodeType":"VariableDeclaration","scope":35831,"src":"20382:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35773,"name":"uint256","nodeType":"ElementaryTypeName","src":"20382:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20325:80:109"},"returnParameters":{"id":35779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35778,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35831,"src":"20429:16:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35776,"name":"uint256","nodeType":"ElementaryTypeName","src":"20429:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35777,"nodeType":"ArrayTypeName","src":"20429:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20428:18:109"},"scope":37721,"src":"20291:488:109","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":35963,"nodeType":"Block","src":"21772:717:109","statements":[{"assignments":[35846],"declarations":[{"constant":false,"id":35846,"mutability":"mutable","name":"a","nameLocation":"21786:1:109","nodeType":"VariableDeclaration","scope":35963,"src":"21778:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35845,"name":"uint256","nodeType":"ElementaryTypeName","src":"21778:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35850,"initialValue":{"arguments":[{"id":35848,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35835,"src":"21803:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}],"id":35847,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"21790:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer) view returns (uint256)"}},"id":35849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21790:18:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21778:30:109"},{"assignments":[35855],"declarations":[{"constant":false,"id":35855,"mutability":"mutable","name":"balances","nameLocation":"21831:8:109","nodeType":"VariableDeclaration","scope":35963,"src":"21814:25:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35853,"name":"uint256","nodeType":"ElementaryTypeName","src":"21814:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35854,"nodeType":"ArrayTypeName","src":"21814:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":35858,"initialValue":{"expression":{"id":35856,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35835,"src":"21842:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":35857,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21847:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"21842:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"21814:41:109"},{"assignments":[35863],"declarations":[{"constant":false,"id":35863,"mutability":"mutable","name":"multipliers","nameLocation":"21878:11:109","nodeType":"VariableDeclaration","scope":35963,"src":"21861:28:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35861,"name":"uint256","nodeType":"ElementaryTypeName","src":"21861:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35862,"nodeType":"ArrayTypeName","src":"21861:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":35866,"initialValue":{"expression":{"id":35864,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35835,"src":"21892:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":35865,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21897:25:109","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":34372,"src":"21892:30:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"21861:61:109"},{"assignments":[35868],"declarations":[{"constant":false,"id":35868,"mutability":"mutable","name":"numBalances","nameLocation":"21937:11:109","nodeType":"VariableDeclaration","scope":35963,"src":"21929:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35867,"name":"uint256","nodeType":"ElementaryTypeName","src":"21929:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35871,"initialValue":{"expression":{"id":35869,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35855,"src":"21951:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21960:6:109","memberName":"length","nodeType":"MemberAccess","src":"21951:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21929:37:109"},{"assignments":[35873],"declarations":[{"constant":false,"id":35873,"mutability":"mutable","name":"d0","nameLocation":"21980:2:109","nodeType":"VariableDeclaration","scope":35963,"src":"21972:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35872,"name":"uint256","nodeType":"ElementaryTypeName","src":"21972:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35881,"initialValue":{"arguments":[{"arguments":[{"id":35876,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35855,"src":"21994:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":35877,"name":"multipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35863,"src":"22004:11:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":35875,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[35178,35196],"referencedDeclaration":35178,"src":"21990:3:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":35878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21990:26:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":35879,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35846,"src":"22018:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":35874,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35114,"src":"21985:4:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":35880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21985:35:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21972:48:109"},{"body":{"id":35920,"nodeType":"Block","src":"22061:187:109","statements":[{"condition":{"id":35888,"name":"deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35840,"src":"22073:7:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":35914,"nodeType":"Block","src":"22145:57:109","statements":[{"expression":{"id":35912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":35902,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35855,"src":"22155:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35904,"indexExpression":{"id":35903,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35883,"src":"22164:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22155:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":35905,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35855,"src":"22169:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35907,"indexExpression":{"id":35906,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35883,"src":"22178:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22169:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":35908,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35838,"src":"22183:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":35910,"indexExpression":{"id":35909,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35883,"src":"22191:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22183:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22169:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22155:38:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35913,"nodeType":"ExpressionStatement","src":"22155:38:109"}]},"id":35915,"nodeType":"IfStatement","src":"22069:133:109","trueBody":{"id":35901,"nodeType":"Block","src":"22082:57:109","statements":[{"expression":{"id":35899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":35889,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35855,"src":"22092:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35891,"indexExpression":{"id":35890,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35883,"src":"22101:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22092:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":35892,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35855,"src":"22106:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35894,"indexExpression":{"id":35893,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35883,"src":"22115:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22106:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"baseExpression":{"id":35895,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35838,"src":"22120:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":35897,"indexExpression":{"id":35896,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35883,"src":"22128:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22120:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22106:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22092:38:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35900,"nodeType":"ExpressionStatement","src":"22092:38:109"}]}},{"id":35919,"nodeType":"UncheckedBlock","src":"22210:32:109","statements":[{"expression":{"id":35917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"22230:3:109","subExpression":{"id":35916,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35883,"src":"22232:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35918,"nodeType":"ExpressionStatement","src":"22230:3:109"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35885,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35883,"src":"22042:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":35886,"name":"numBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35868,"src":"22046:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22042:15:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35921,"initializationExpression":{"assignments":[35883],"declarations":[{"constant":false,"id":35883,"mutability":"mutable","name":"i","nameLocation":"22039:1:109","nodeType":"VariableDeclaration","scope":35921,"src":"22031:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35882,"name":"uint256","nodeType":"ElementaryTypeName","src":"22031:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35884,"nodeType":"VariableDeclarationStatement","src":"22031:9:109"},"nodeType":"ForStatement","src":"22026:222:109"},{"assignments":[35923],"declarations":[{"constant":false,"id":35923,"mutability":"mutable","name":"d1","nameLocation":"22261:2:109","nodeType":"VariableDeclaration","scope":35963,"src":"22253:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35922,"name":"uint256","nodeType":"ElementaryTypeName","src":"22253:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35931,"initialValue":{"arguments":[{"arguments":[{"id":35926,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35855,"src":"22275:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":35927,"name":"multipliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35863,"src":"22285:11:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":35925,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[35178,35196],"referencedDeclaration":35178,"src":"22271:3:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":35928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22271:26:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":35929,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35846,"src":"22299:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":35924,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35114,"src":"22266:4:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":35930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22266:35:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22253:48:109"},{"assignments":[35933],"declarations":[{"constant":false,"id":35933,"mutability":"mutable","name":"totalSupply","nameLocation":"22315:11:109","nodeType":"VariableDeclaration","scope":35963,"src":"22307:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35932,"name":"uint256","nodeType":"ElementaryTypeName","src":"22307:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35938,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":35934,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35835,"src":"22329:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":35935,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22334:7:109","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":34365,"src":"22329:12:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":35936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22342:11:109","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":8543,"src":"22329:24:109","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":35937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22329:26:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22307:48:109"},{"condition":{"id":35939,"name":"deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35840,"src":"22366:7:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":35961,"nodeType":"Block","src":"22433:52:109","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35951,"name":"d0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35873,"src":"22450:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":35952,"name":"d1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35923,"src":"22455:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22450:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35954,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22449:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":35955,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35933,"src":"22461:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22449:23:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35957,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22448:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":35958,"name":"d0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35873,"src":"22476:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22448:30:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":35844,"id":35960,"nodeType":"Return","src":"22441:37:109"}]},"id":35962,"nodeType":"IfStatement","src":"22362:123:109","trueBody":{"id":35950,"nodeType":"Block","src":"22375:52:109","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35940,"name":"d1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35923,"src":"22392:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":35941,"name":"d0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35873,"src":"22397:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22392:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35943,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22391:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":35944,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35933,"src":"22403:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22391:23:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35946,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22390:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":35947,"name":"d0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35873,"src":"22418:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22390:30:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":35844,"id":35949,"nodeType":"Return","src":"22383:37:109"}]}}]},"documentation":{"id":35832,"nodeType":"StructuredDocumentation","src":"20783:847:109","text":" @notice A simple method to calculate prices from deposits or\n withdrawals, excluding fees but including slippage. This is\n helpful as an input into the various \"min\" parameters on calls\n to fight front-running\n @dev This shouldn't be used outside frontends for user estimates.\n @param self Swap struct to read from\n @param amounts an array of token amounts to deposit or withdrawal,\n corresponding to pooledTokens. The amount should be in each\n pooled token's native precision. If a token charges a fee on transfers,\n use the amount that gets transferred after the fee.\n @param deposit whether this is a deposit or a withdrawal\n @return if deposit was true, total amount of lp token that will be minted and if\n deposit was false, total amount of lp token that will be burned"},"functionSelector":"22b2b607","id":35964,"implemented":true,"kind":"function","modifiers":[],"name":"calculateTokenAmount","nameLocation":"21642:20:109","nodeType":"FunctionDefinition","parameters":{"id":35841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35835,"mutability":"mutable","name":"self","nameLocation":"21681:4:109","nodeType":"VariableDeclaration","scope":35964,"src":"21668:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":35834,"nodeType":"UserDefinedTypeName","pathNode":{"id":35833,"name":"Swap","nameLocations":["21668:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"21668:4:109"},"referencedDeclaration":34379,"src":"21668:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":35838,"mutability":"mutable","name":"amounts","nameLocation":"21710:7:109","nodeType":"VariableDeclaration","scope":35964,"src":"21691:26:109","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35836,"name":"uint256","nodeType":"ElementaryTypeName","src":"21691:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35837,"nodeType":"ArrayTypeName","src":"21691:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":35840,"mutability":"mutable","name":"deposit","nameLocation":"21728:7:109","nodeType":"VariableDeclaration","scope":35964,"src":"21723:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35839,"name":"bool","nodeType":"ElementaryTypeName","src":"21723:4:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"21662:77:109"},"returnParameters":{"id":35844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35843,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35964,"src":"21763:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35842,"name":"uint256","nodeType":"ElementaryTypeName","src":"21763:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21762:9:109"},"scope":37721,"src":"21633:856:109","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":35989,"nodeType":"Block","src":"22817:108:109","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35976,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35970,"src":"22831:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":35977,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35968,"src":"22839:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":35978,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22844:12:109","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"22839:17:109","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":35979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22857:6:109","memberName":"length","nodeType":"MemberAccess","src":"22839:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22831:32:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e646578206f7574206f662072616e6765","id":35981,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"22865:20:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d","typeString":"literal_string \"index out of range\""},"value":"index out of range"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d","typeString":"literal_string \"index out of range\""}],"id":35975,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"22823:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22823:63:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35983,"nodeType":"ExpressionStatement","src":"22823:63:109"},{"expression":{"baseExpression":{"expression":{"id":35984,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35968,"src":"22899:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":35985,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22904:9:109","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":34378,"src":"22899:14:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":35987,"indexExpression":{"id":35986,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35970,"src":"22914:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22899:21:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":35974,"id":35988,"nodeType":"Return","src":"22892:28:109"}]},"documentation":{"id":35965,"nodeType":"StructuredDocumentation","src":"22493:230:109","text":" @notice return accumulated amount of admin fees of the token with given index\n @param self Swap struct to read from\n @param index Index of the pooled token\n @return admin balance in the token's precision"},"functionSelector":"1ce9046f","id":35990,"implemented":true,"kind":"function","modifiers":[],"name":"getAdminBalance","nameLocation":"22735:15:109","nodeType":"FunctionDefinition","parameters":{"id":35971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35968,"mutability":"mutable","name":"self","nameLocation":"22764:4:109","nodeType":"VariableDeclaration","scope":35990,"src":"22751:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":35967,"nodeType":"UserDefinedTypeName","pathNode":{"id":35966,"name":"Swap","nameLocations":["22751:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"22751:4:109"},"referencedDeclaration":34379,"src":"22751:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":35970,"mutability":"mutable","name":"index","nameLocation":"22778:5:109","nodeType":"VariableDeclaration","scope":35990,"src":"22770:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35969,"name":"uint256","nodeType":"ElementaryTypeName","src":"22770:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22750:34:109"},"returnParameters":{"id":35974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35973,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35990,"src":"22808:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35972,"name":"uint256","nodeType":"ElementaryTypeName","src":"22808:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22807:9:109"},"scope":37721,"src":"22726:199:109","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":36013,"nodeType":"Block","src":"23232:63:109","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36002,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36000,"name":"swapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35993,"src":"23246:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":36001,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35995,"src":"23256:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23246:19:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":36003,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"23245:21:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36004,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35995,"src":"23271:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":36005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23283:1:109","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"23271:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":36007,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"23270:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"34","id":36008,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23288:1:109","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"23270:19:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":36010,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"23269:21:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23245:45:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":35999,"id":36012,"nodeType":"Return","src":"23238:52:109"}]},"documentation":{"id":35991,"nodeType":"StructuredDocumentation","src":"22929:210:109","text":" @notice internal helper function to calculate fee per token multiplier used in\n swap fee calculations\n @param swapFee swap fee for the tokens\n @param numTokens number of tokens pooled"},"id":36014,"implemented":true,"kind":"function","modifiers":[],"name":"_feePerToken","nameLocation":"23151:12:109","nodeType":"FunctionDefinition","parameters":{"id":35996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35993,"mutability":"mutable","name":"swapFee","nameLocation":"23172:7:109","nodeType":"VariableDeclaration","scope":36014,"src":"23164:15:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35992,"name":"uint256","nodeType":"ElementaryTypeName","src":"23164:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35995,"mutability":"mutable","name":"numTokens","nameLocation":"23189:9:109","nodeType":"VariableDeclaration","scope":36014,"src":"23181:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35994,"name":"uint256","nodeType":"ElementaryTypeName","src":"23181:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23163:36:109"},"returnParameters":{"id":35999,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35998,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36014,"src":"23223:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35997,"name":"uint256","nodeType":"ElementaryTypeName","src":"23223:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23222:9:109"},"scope":37721,"src":"23142:153:109","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":36180,"nodeType":"Block","src":"23902:1040:109","statements":[{"id":36060,"nodeType":"Block","src":"23908:246:109","statements":[{"assignments":[36033],"declarations":[{"constant":false,"id":36033,"mutability":"mutable","name":"tokenFrom","nameLocation":"23923:9:109","nodeType":"VariableDeclaration","scope":36060,"src":"23916:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":36032,"nodeType":"UserDefinedTypeName","pathNode":{"id":36031,"name":"IERC20","nameLocations":["23916:6:109"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"23916:6:109"},"referencedDeclaration":10812,"src":"23916:6:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"}],"id":36038,"initialValue":{"baseExpression":{"expression":{"id":36034,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36018,"src":"23935:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36035,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23940:12:109","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"23935:17:109","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":36037,"indexExpression":{"id":36036,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36020,"src":"23953:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23935:33:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"23916:52:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36040,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36024,"src":"23984:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"expression":{"id":36043,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"24010:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24014:6:109","memberName":"sender","nodeType":"MemberAccess","src":"24010:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":36041,"name":"tokenFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36033,"src":"23990:9:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":36042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24000:9:109","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10769,"src":"23990:19:109","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":36045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23990:31:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23984:37:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"73776170206d6f7265207468616e20796f75206f776e","id":36047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"24023:24:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_1b3f2c393a520e73eb7bdb3fda675794175327c242b37d24eefae133e4d40778","typeString":"literal_string \"swap more than you own\""},"value":"swap more than you own"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1b3f2c393a520e73eb7bdb3fda675794175327c242b37d24eefae133e4d40778","typeString":"literal_string \"swap more than you own\""}],"id":36039,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"23976:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23976:72:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36049,"nodeType":"ExpressionStatement","src":"23976:72:109"},{"expression":{"arguments":[{"arguments":[{"id":36055,"name":"tokenFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36033,"src":"24132:9:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":36054,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24124:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36053,"name":"address","nodeType":"ElementaryTypeName","src":"24124:7:109","typeDescriptions":{}}},"id":36056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24124:18:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36057,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36024,"src":"24144:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":36050,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"24093:10:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":36052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24104:19:109","memberName":"handleIncomingAsset","nodeType":"MemberAccess","referencedDeclaration":27772,"src":"24093:30:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":36058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24093:54:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36059,"nodeType":"ExpressionStatement","src":"24093:54:109"}]},{"assignments":[36062],"declarations":[{"constant":false,"id":36062,"mutability":"mutable","name":"dy","nameLocation":"24168:2:109","nodeType":"VariableDeclaration","scope":36180,"src":"24160:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36061,"name":"uint256","nodeType":"ElementaryTypeName","src":"24160:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36063,"nodeType":"VariableDeclarationStatement","src":"24160:10:109"},{"assignments":[36065],"declarations":[{"constant":false,"id":36065,"mutability":"mutable","name":"dyFee","nameLocation":"24184:5:109","nodeType":"VariableDeclaration","scope":36180,"src":"24176:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36064,"name":"uint256","nodeType":"ElementaryTypeName","src":"24176:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36066,"nodeType":"VariableDeclarationStatement","src":"24176:13:109"},{"assignments":[36071],"declarations":[{"constant":false,"id":36071,"mutability":"mutable","name":"balances","nameLocation":"24212:8:109","nodeType":"VariableDeclaration","scope":36180,"src":"24195:25:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":36069,"name":"uint256","nodeType":"ElementaryTypeName","src":"24195:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36070,"nodeType":"ArrayTypeName","src":"24195:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":36074,"initialValue":{"expression":{"id":36072,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36018,"src":"24223:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36073,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24228:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"24223:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"24195:41:109"},{"expression":{"id":36085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":36075,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36062,"src":"24243:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":36076,"name":"dyFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36065,"src":"24247:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":36077,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"24242:11:109","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":36079,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36018,"src":"24271:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},{"id":36080,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36020,"src":"24277:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":36081,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36022,"src":"24293:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":36082,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36024,"src":"24307:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":36083,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36071,"src":"24311:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":36078,"name":"_calculateSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35616,"src":"24256:14:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint8,uint8,uint256,uint256[] memory) view returns (uint256,uint256)"}},"id":36084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24256:64:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"24242:78:109","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36086,"nodeType":"ExpressionStatement","src":"24242:78:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36088,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36062,"src":"24334:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":36089,"name":"minDy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36026,"src":"24340:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24334:11:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6479203c206d696e4479","id":36091,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"24347:12:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_6e40b987a1bdbab1b9eb0952052a8ed8be99e503ecda84e0b9bc15992dc05932","typeString":"literal_string \"dy < minDy\""},"value":"dy < minDy"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6e40b987a1bdbab1b9eb0952052a8ed8be99e503ecda84e0b9bc15992dc05932","typeString":"literal_string \"dy < minDy\""}],"id":36087,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"24326:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24326:34:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36093,"nodeType":"ExpressionStatement","src":"24326:34:109"},{"assignments":[36095],"declarations":[{"constant":false,"id":36095,"mutability":"mutable","name":"dyAdminFee","nameLocation":"24375:10:109","nodeType":"VariableDeclaration","scope":36180,"src":"24367:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36094,"name":"uint256","nodeType":"ElementaryTypeName","src":"24367:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36109,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36096,"name":"dyFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36065,"src":"24389:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":36097,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36018,"src":"24397:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36098,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24402:8:109","memberName":"adminFee","nodeType":"MemberAccess","referencedDeclaration":34362,"src":"24397:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24389:21:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":36100,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24388:23:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":36101,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"24420:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":36102,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"24430:15:109","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"24420:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24388:57:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"expression":{"id":36104,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36018,"src":"24454:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36105,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24459:25:109","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":34372,"src":"24454:30:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36107,"indexExpression":{"id":36106,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36022,"src":"24485:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24454:44:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24388:110:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"24367:131:109"},{"expression":{"id":36120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":36110,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36018,"src":"24505:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36113,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24510:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"24505:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36114,"indexExpression":{"id":36112,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36020,"src":"24519:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24505:29:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":36115,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36071,"src":"24537:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36117,"indexExpression":{"id":36116,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36020,"src":"24546:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24537:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":36118,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36024,"src":"24564:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24537:29:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24505:61:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36121,"nodeType":"ExpressionStatement","src":"24505:61:109"},{"expression":{"id":36134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":36122,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36018,"src":"24572:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36125,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24577:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"24572:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36126,"indexExpression":{"id":36124,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36022,"src":"24586:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24572:27:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":36127,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36071,"src":"24602:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36129,"indexExpression":{"id":36128,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36022,"src":"24611:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24602:22:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":36130,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36062,"src":"24627:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24602:27:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":36132,"name":"dyAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36095,"src":"24632:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24602:40:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24572:70:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36135,"nodeType":"ExpressionStatement","src":"24572:70:109"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36136,"name":"dyAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36095,"src":"24652:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":36137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24666:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"24652:15:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36153,"nodeType":"IfStatement","src":"24648:108:109","trueBody":{"id":36152,"nodeType":"Block","src":"24669:87:109","statements":[{"expression":{"id":36150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":36139,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36018,"src":"24677:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36142,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24682:9:109","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":34378,"src":"24677:14:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36143,"indexExpression":{"id":36141,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36022,"src":"24692:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24677:28:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":36144,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36018,"src":"24708:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36145,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24713:9:109","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":34378,"src":"24708:14:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36147,"indexExpression":{"id":36146,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36022,"src":"24723:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24708:28:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":36148,"name":"dyAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36095,"src":"24739:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24708:41:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24677:72:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36151,"nodeType":"ExpressionStatement","src":"24677:72:109"}]}},{"expression":{"arguments":[{"arguments":[{"baseExpression":{"expression":{"id":36159,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36018,"src":"24801:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36160,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24806:12:109","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"24801:17:109","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":36162,"indexExpression":{"id":36161,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36022,"src":"24819:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24801:31:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":36158,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24793:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36157,"name":"address","nodeType":"ElementaryTypeName","src":"24793:7:109","typeDescriptions":{}}},"id":36163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24793:40:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":36164,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"24835:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24839:6:109","memberName":"sender","nodeType":"MemberAccess","src":"24835:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36166,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36062,"src":"24847:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":36154,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"24762:10:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":36156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24773:19:109","memberName":"handleOutgoingAsset","nodeType":"MemberAccess","referencedDeclaration":27809,"src":"24762:30:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":36167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24762:88:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36168,"nodeType":"ExpressionStatement","src":"24762:88:109"},{"eventCall":{"arguments":[{"expression":{"id":36170,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"24872:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24876:6:109","memberName":"sender","nodeType":"MemberAccess","src":"24872:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36172,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36024,"src":"24884:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":36173,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36062,"src":"24888:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":36174,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36020,"src":"24892:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":36175,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36022,"src":"24908:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":36169,"name":"TokenSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34277,"src":"24862:9:109","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (address,uint256,uint256,uint128,uint128)"}},"id":36176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24862:59:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36177,"nodeType":"EmitStatement","src":"24857:64:109"},{"expression":{"id":36178,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36062,"src":"24935:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":36030,"id":36179,"nodeType":"Return","src":"24928:9:109"}]},"documentation":{"id":36015,"nodeType":"StructuredDocumentation","src":"23338:408:109","text":" @notice swap two tokens in the pool\n @param self Swap struct to read from and write to\n @param tokenIndexFrom the token the user wants to sell\n @param tokenIndexTo the token the user wants to buy\n @param dx the amount of tokens the user wants to sell\n @param minDy the min amount the user would like to receive, or revert.\n @return amount of token user received on swap"},"functionSelector":"f2042939","id":36181,"implemented":true,"kind":"function","modifiers":[],"name":"swap","nameLocation":"23758:4:109","nodeType":"FunctionDefinition","parameters":{"id":36027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36018,"mutability":"mutable","name":"self","nameLocation":"23781:4:109","nodeType":"VariableDeclaration","scope":36181,"src":"23768:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":36017,"nodeType":"UserDefinedTypeName","pathNode":{"id":36016,"name":"Swap","nameLocations":["23768:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"23768:4:109"},"referencedDeclaration":34379,"src":"23768:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":36020,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"23797:14:109","nodeType":"VariableDeclaration","scope":36181,"src":"23791:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":36019,"name":"uint8","nodeType":"ElementaryTypeName","src":"23791:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":36022,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"23823:12:109","nodeType":"VariableDeclaration","scope":36181,"src":"23817:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":36021,"name":"uint8","nodeType":"ElementaryTypeName","src":"23817:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":36024,"mutability":"mutable","name":"dx","nameLocation":"23849:2:109","nodeType":"VariableDeclaration","scope":36181,"src":"23841:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36023,"name":"uint256","nodeType":"ElementaryTypeName","src":"23841:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":36026,"mutability":"mutable","name":"minDy","nameLocation":"23865:5:109","nodeType":"VariableDeclaration","scope":36181,"src":"23857:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36025,"name":"uint256","nodeType":"ElementaryTypeName","src":"23857:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23762:112:109"},"returnParameters":{"id":36030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36029,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36181,"src":"23893:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36028,"name":"uint256","nodeType":"ElementaryTypeName","src":"23893:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23892:9:109"},"scope":37721,"src":"23749:1193:109","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":36357,"nodeType":"Block","src":"25506:1110:109","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36199,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36191,"src":"25520:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"baseExpression":{"expression":{"id":36200,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36185,"src":"25526:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36201,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25531:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"25526:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36203,"indexExpression":{"id":36202,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36189,"src":"25540:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25526:27:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25520:33:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"3e706f6f6c2062616c616e6365","id":36205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"25555:15:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_4798a1cccb10622ad3eddce5aec990d3b316e4246900ba5afea19b6d9d371948","typeString":"literal_string \">pool balance\""},"value":">pool balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4798a1cccb10622ad3eddce5aec990d3b316e4246900ba5afea19b6d9d371948","typeString":"literal_string \">pool balance\""}],"id":36198,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"25512:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25512:59:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36207,"nodeType":"ExpressionStatement","src":"25512:59:109"},{"assignments":[36209],"declarations":[{"constant":false,"id":36209,"mutability":"mutable","name":"dx","nameLocation":"25586:2:109","nodeType":"VariableDeclaration","scope":36357,"src":"25578:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36208,"name":"uint256","nodeType":"ElementaryTypeName","src":"25578:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36210,"nodeType":"VariableDeclarationStatement","src":"25578:10:109"},{"assignments":[36212],"declarations":[{"constant":false,"id":36212,"mutability":"mutable","name":"dxFee","nameLocation":"25602:5:109","nodeType":"VariableDeclaration","scope":36357,"src":"25594:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36211,"name":"uint256","nodeType":"ElementaryTypeName","src":"25594:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36213,"nodeType":"VariableDeclarationStatement","src":"25594:13:109"},{"assignments":[36218],"declarations":[{"constant":false,"id":36218,"mutability":"mutable","name":"balances","nameLocation":"25630:8:109","nodeType":"VariableDeclaration","scope":36357,"src":"25613:25:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":36216,"name":"uint256","nodeType":"ElementaryTypeName","src":"25613:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36217,"nodeType":"ArrayTypeName","src":"25613:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":36221,"initialValue":{"expression":{"id":36219,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36185,"src":"25641:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36220,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25646:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"25641:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"25613:41:109"},{"expression":{"id":36232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":36222,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36209,"src":"25661:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":36223,"name":"dxFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36212,"src":"25665:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":36224,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"25660:11:109","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":36226,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36185,"src":"25692:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},{"id":36227,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36187,"src":"25698:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":36228,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36189,"src":"25714:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":36229,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36191,"src":"25728:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":36230,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36218,"src":"25732:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":36225,"name":"_calculateSwapInv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35744,"src":"25674:17:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$_t_uint8_$_t_uint8_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint8,uint8,uint256,uint256[] memory) view returns (uint256,uint256)"}},"id":36231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25674:67:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"25660:81:109","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36233,"nodeType":"ExpressionStatement","src":"25660:81:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36235,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36209,"src":"25755:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":36236,"name":"maxDx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36193,"src":"25761:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25755:11:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6478203e206d61784478","id":36238,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"25768:12:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_4406c1e208c572ab95085aa92d385cddaa474035df8163bb5a0a2c403800484d","typeString":"literal_string \"dx > maxDx\""},"value":"dx > maxDx"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4406c1e208c572ab95085aa92d385cddaa474035df8163bb5a0a2c403800484d","typeString":"literal_string \"dx > maxDx\""}],"id":36234,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"25747:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25747:34:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36240,"nodeType":"ExpressionStatement","src":"25747:34:109"},{"assignments":[36242],"declarations":[{"constant":false,"id":36242,"mutability":"mutable","name":"dxAdminFee","nameLocation":"25796:10:109","nodeType":"VariableDeclaration","scope":36357,"src":"25788:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36241,"name":"uint256","nodeType":"ElementaryTypeName","src":"25788:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36256,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36243,"name":"dxFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36212,"src":"25810:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":36244,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36185,"src":"25818:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36245,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25823:8:109","memberName":"adminFee","nodeType":"MemberAccess","referencedDeclaration":34362,"src":"25818:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25810:21:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":36247,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"25809:23:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":36248,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"25841:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":36249,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"25851:15:109","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"25841:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25809:57:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"expression":{"id":36251,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36185,"src":"25875:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36252,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25880:25:109","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":34372,"src":"25875:30:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36254,"indexExpression":{"id":36253,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36187,"src":"25906:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25875:46:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25809:112:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25788:133:109"},{"expression":{"id":36269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":36257,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36185,"src":"25928:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36260,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25933:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"25928:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36261,"indexExpression":{"id":36259,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36187,"src":"25942:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"25928:29:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":36262,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36218,"src":"25960:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36264,"indexExpression":{"id":36263,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36187,"src":"25969:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25960:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":36265,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36209,"src":"25987:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25960:29:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":36267,"name":"dxAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36242,"src":"25992:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25960:42:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25928:74:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36270,"nodeType":"ExpressionStatement","src":"25928:74:109"},{"expression":{"id":36281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":36271,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36185,"src":"26008:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36274,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26013:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"26008:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36275,"indexExpression":{"id":36273,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36189,"src":"26022:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26008:27:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":36276,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36218,"src":"26038:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36278,"indexExpression":{"id":36277,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36189,"src":"26047:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26038:22:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":36279,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36191,"src":"26063:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26038:27:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26008:57:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36282,"nodeType":"ExpressionStatement","src":"26008:57:109"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36283,"name":"dxAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36242,"src":"26075:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":36284,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26089:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"26075:15:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36300,"nodeType":"IfStatement","src":"26071:112:109","trueBody":{"id":36299,"nodeType":"Block","src":"26092:91:109","statements":[{"expression":{"id":36297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":36286,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36185,"src":"26100:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36289,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26105:9:109","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":34378,"src":"26100:14:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36290,"indexExpression":{"id":36288,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36187,"src":"26115:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26100:30:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":36291,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36185,"src":"26133:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36292,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26138:9:109","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":34378,"src":"26133:14:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36294,"indexExpression":{"id":36293,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36187,"src":"26148:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26133:30:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":36295,"name":"dxAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36242,"src":"26166:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26133:43:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26100:76:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36298,"nodeType":"ExpressionStatement","src":"26100:76:109"}]}},{"id":36330,"nodeType":"Block","src":"26189:241:109","statements":[{"assignments":[36303],"declarations":[{"constant":false,"id":36303,"mutability":"mutable","name":"tokenFrom","nameLocation":"26204:9:109","nodeType":"VariableDeclaration","scope":36330,"src":"26197:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":36302,"nodeType":"UserDefinedTypeName","pathNode":{"id":36301,"name":"IERC20","nameLocations":["26197:6:109"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"26197:6:109"},"referencedDeclaration":10812,"src":"26197:6:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"}],"id":36308,"initialValue":{"baseExpression":{"expression":{"id":36304,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36185,"src":"26216:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36305,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26221:12:109","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"26216:17:109","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":36307,"indexExpression":{"id":36306,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36187,"src":"26234:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26216:33:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"26197:52:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36310,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36209,"src":"26265:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"expression":{"id":36313,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"26291:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26295:6:109","memberName":"sender","nodeType":"MemberAccess","src":"26291:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":36311,"name":"tokenFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36303,"src":"26271:9:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":36312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26281:9:109","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10769,"src":"26271:19:109","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":36315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26271:31:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26265:37:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d6f7265207468616e20796f75206f776e","id":36317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"26304:19:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_49b5230bcef6bb857dbf12a192f051cfc648d5c34767bdb2c1c4044373c29ca8","typeString":"literal_string \"more than you own\""},"value":"more than you own"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_49b5230bcef6bb857dbf12a192f051cfc648d5c34767bdb2c1c4044373c29ca8","typeString":"literal_string \"more than you own\""}],"id":36309,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"26257:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26257:67:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36319,"nodeType":"ExpressionStatement","src":"26257:67:109"},{"expression":{"arguments":[{"arguments":[{"id":36325,"name":"tokenFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36303,"src":"26408:9:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":36324,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26400:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36323,"name":"address","nodeType":"ElementaryTypeName","src":"26400:7:109","typeDescriptions":{}}},"id":36326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26400:18:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36327,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36209,"src":"26420:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":36320,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"26369:10:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":36322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26380:19:109","memberName":"handleIncomingAsset","nodeType":"MemberAccess","referencedDeclaration":27772,"src":"26369:30:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":36328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26369:54:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36329,"nodeType":"ExpressionStatement","src":"26369:54:109"}]},{"expression":{"arguments":[{"arguments":[{"baseExpression":{"expression":{"id":36336,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36185,"src":"26475:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36337,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26480:12:109","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"26475:17:109","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":36339,"indexExpression":{"id":36338,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36189,"src":"26493:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26475:31:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":36335,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26467:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36334,"name":"address","nodeType":"ElementaryTypeName","src":"26467:7:109","typeDescriptions":{}}},"id":36340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26467:40:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":36341,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"26509:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26513:6:109","memberName":"sender","nodeType":"MemberAccess","src":"26509:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36343,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36191,"src":"26521:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":36331,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"26436:10:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":36333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26447:19:109","memberName":"handleOutgoingAsset","nodeType":"MemberAccess","referencedDeclaration":27809,"src":"26436:30:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":36344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26436:88:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36345,"nodeType":"ExpressionStatement","src":"26436:88:109"},{"eventCall":{"arguments":[{"expression":{"id":36347,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"26546:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26550:6:109","memberName":"sender","nodeType":"MemberAccess","src":"26546:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36349,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36209,"src":"26558:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":36350,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36191,"src":"26562:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":36351,"name":"tokenIndexFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36187,"src":"26566:14:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":36352,"name":"tokenIndexTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36189,"src":"26582:12:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":36346,"name":"TokenSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34277,"src":"26536:9:109","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (address,uint256,uint256,uint128,uint128)"}},"id":36353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26536:59:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36354,"nodeType":"EmitStatement","src":"26531:64:109"},{"expression":{"id":36355,"name":"dx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36209,"src":"26609:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":36197,"id":36356,"nodeType":"Return","src":"26602:9:109"}]},"documentation":{"id":36182,"nodeType":"StructuredDocumentation","src":"24946:401:109","text":" @notice swap two tokens in the pool\n @param self Swap struct to read from and write to\n @param tokenIndexFrom the token the user wants to sell\n @param tokenIndexTo the token the user wants to buy\n @param dy the amount of tokens the user wants to buy\n @param maxDx the max amount the user would like to send.\n @return amount of token user have to transfer on swap"},"functionSelector":"e07805aa","id":36358,"implemented":true,"kind":"function","modifiers":[],"name":"swapOut","nameLocation":"25359:7:109","nodeType":"FunctionDefinition","parameters":{"id":36194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36185,"mutability":"mutable","name":"self","nameLocation":"25385:4:109","nodeType":"VariableDeclaration","scope":36358,"src":"25372:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":36184,"nodeType":"UserDefinedTypeName","pathNode":{"id":36183,"name":"Swap","nameLocations":["25372:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"25372:4:109"},"referencedDeclaration":34379,"src":"25372:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":36187,"mutability":"mutable","name":"tokenIndexFrom","nameLocation":"25401:14:109","nodeType":"VariableDeclaration","scope":36358,"src":"25395:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":36186,"name":"uint8","nodeType":"ElementaryTypeName","src":"25395:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":36189,"mutability":"mutable","name":"tokenIndexTo","nameLocation":"25427:12:109","nodeType":"VariableDeclaration","scope":36358,"src":"25421:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":36188,"name":"uint8","nodeType":"ElementaryTypeName","src":"25421:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":36191,"mutability":"mutable","name":"dy","nameLocation":"25453:2:109","nodeType":"VariableDeclaration","scope":36358,"src":"25445:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36190,"name":"uint256","nodeType":"ElementaryTypeName","src":"25445:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":36193,"mutability":"mutable","name":"maxDx","nameLocation":"25469:5:109","nodeType":"VariableDeclaration","scope":36358,"src":"25461:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36192,"name":"uint256","nodeType":"ElementaryTypeName","src":"25461:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25366:112:109"},"returnParameters":{"id":36197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36196,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36358,"src":"25497:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36195,"name":"uint256","nodeType":"ElementaryTypeName","src":"25497:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25496:9:109"},"scope":37721,"src":"25350:1266:109","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":36745,"nodeType":"Block","src":"27232:2447:109","statements":[{"assignments":[36373],"declarations":[{"constant":false,"id":36373,"mutability":"mutable","name":"numTokens","nameLocation":"27246:9:109","nodeType":"VariableDeclaration","scope":36745,"src":"27238:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36372,"name":"uint256","nodeType":"ElementaryTypeName","src":"27238:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36377,"initialValue":{"expression":{"expression":{"id":36374,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36362,"src":"27258:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36375,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27263:12:109","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"27258:17:109","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":36376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27276:6:109","memberName":"length","nodeType":"MemberAccess","src":"27258:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"27238:44:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":36379,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36365,"src":"27296:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27304:6:109","memberName":"length","nodeType":"MemberAccess","src":"27296:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":36381,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36373,"src":"27314:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27296:27:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d69736d6174636820706f6f6c656420746f6b656e73","id":36383,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"27325:24:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_407c82c74f364e90cf3f20876b92912fd15eeb935ea71a01446be03014fed388","typeString":"literal_string \"mismatch pooled tokens\""},"value":"mismatch pooled tokens"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_407c82c74f364e90cf3f20876b92912fd15eeb935ea71a01446be03014fed388","typeString":"literal_string \"mismatch pooled tokens\""}],"id":36378,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"27288:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27288:62:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36385,"nodeType":"ExpressionStatement","src":"27288:62:109"},{"assignments":[36388],"declarations":[{"constant":false,"id":36388,"mutability":"mutable","name":"v","nameLocation":"27405:1:109","nodeType":"VariableDeclaration","scope":36745,"src":"27378:28:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo"},"typeName":{"id":36387,"nodeType":"UserDefinedTypeName","pathNode":{"id":36386,"name":"ManageLiquidityInfo","nameLocations":["27378:19:109"],"nodeType":"IdentifierPath","referencedDeclaration":34410,"src":"27378:19:109"},"referencedDeclaration":34410,"src":"27378:19:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_storage_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo"}},"visibility":"internal"}],"id":36404,"initialValue":{"arguments":[{"hexValue":"30","id":36390,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27436:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":36391,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27445:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":36392,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27454:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"id":36394,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36362,"src":"27476:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}],"id":36393,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"27463:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer) view returns (uint256)"}},"id":36395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27463:18:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":36396,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36362,"src":"27489:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36397,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27494:7:109","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":34365,"src":"27489:12:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},{"hexValue":"30","id":36398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27509:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":36399,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36362,"src":"27518:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36400,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27523:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"27518:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},{"expression":{"id":36401,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36362,"src":"27539:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36402,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27544:25:109","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":34372,"src":"27539:30:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"},{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}],"id":36389,"name":"ManageLiquidityInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34410,"src":"27409:19:109","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ManageLiquidityInfo_$34410_storage_ptr_$","typeString":"type(struct SwapUtilsExternal.ManageLiquidityInfo storage pointer)"}},"id":36403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27409:166:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"nodeType":"VariableDeclarationStatement","src":"27378:197:109"},{"expression":{"id":36412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":36405,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"27581:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36407,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"27583:11:109","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":34403,"src":"27581:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":36408,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"27597:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36409,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27599:7:109","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":34401,"src":"27597:9:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":36410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27607:11:109","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":8543,"src":"27597:21:109","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":36411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27597:23:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27581:39:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36413,"nodeType":"ExpressionStatement","src":"27581:39:109"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":36414,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"27630:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36415,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27632:11:109","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":34403,"src":"27630:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":36416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27647:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"27630:18:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36434,"nodeType":"IfStatement","src":"27626:94:109","trueBody":{"id":36433,"nodeType":"Block","src":"27650:70:109","statements":[{"expression":{"id":36431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":36418,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"27658:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36420,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"27660:2:109","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":34392,"src":"27658:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"expression":{"id":36423,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"27674:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36424,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27676:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34406,"src":"27674:10:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":36425,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"27686:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36426,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27688:11:109","memberName":"multipliers","nodeType":"MemberAccess","referencedDeclaration":34409,"src":"27686:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":36422,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[35178,35196],"referencedDeclaration":35178,"src":"27670:3:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":36427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27670:30:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":36428,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"27702:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36429,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27704:8:109","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":34398,"src":"27702:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36421,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35114,"src":"27665:4:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":36430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27665:48:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27658:55:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36432,"nodeType":"ExpressionStatement","src":"27658:55:109"}]}},{"assignments":[36439],"declarations":[{"constant":false,"id":36439,"mutability":"mutable","name":"newBalances","nameLocation":"27743:11:109","nodeType":"VariableDeclaration","scope":36745,"src":"27726:28:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":36437,"name":"uint256","nodeType":"ElementaryTypeName","src":"27726:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36438,"nodeType":"ArrayTypeName","src":"27726:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":36445,"initialValue":{"arguments":[{"id":36443,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36373,"src":"27771:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36442,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"27757:13:109","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":36440,"name":"uint256","nodeType":"ElementaryTypeName","src":"27761:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36441,"nodeType":"ArrayTypeName","src":"27761:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":36444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27757:24:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"27726:55:109"},{"body":{"id":36510,"nodeType":"Block","src":"27821:435:109","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":36462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":36453,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"27837:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36454,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27839:11:109","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":34403,"src":"27837:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":36455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27854:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"27837:18:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":36457,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36365,"src":"27859:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36459,"indexExpression":{"id":36458,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36447,"src":"27867:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27859:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":36460,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27873:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"27859:15:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"27837:37:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21737570706c7920616c6c20746f6b656e73","id":36463,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"27876:20:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_3dce4b63d19b87f59f00e1c83d4e9014c5f915f724b6e06015f43e433d5a13b8","typeString":"literal_string \"!supply all tokens\""},"value":"!supply all tokens"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3dce4b63d19b87f59f00e1c83d4e9014c5f915f724b6e06015f43e433d5a13b8","typeString":"literal_string \"!supply all tokens\""}],"id":36452,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"27829:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27829:68:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36465,"nodeType":"ExpressionStatement","src":"27829:68:109"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":36466,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36365,"src":"27981:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36468,"indexExpression":{"id":36467,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36447,"src":"27989:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27981:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":36469,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27995:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"27981:15:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36492,"nodeType":"IfStatement","src":"27977:181:109","trueBody":{"id":36491,"nodeType":"Block","src":"27998:160:109","statements":[{"assignments":[36473],"declarations":[{"constant":false,"id":36473,"mutability":"mutable","name":"token","nameLocation":"28015:5:109","nodeType":"VariableDeclaration","scope":36491,"src":"28008:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":36472,"nodeType":"UserDefinedTypeName","pathNode":{"id":36471,"name":"IERC20","nameLocations":["28008:6:109"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"28008:6:109"},"referencedDeclaration":10812,"src":"28008:6:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"}],"id":36478,"initialValue":{"baseExpression":{"expression":{"id":36474,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36362,"src":"28023:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36475,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28028:12:109","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"28023:17:109","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":36477,"indexExpression":{"id":36476,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36447,"src":"28041:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28023:20:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"28008:35:109"},{"expression":{"arguments":[{"arguments":[{"id":36484,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36473,"src":"28130:5:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":36483,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28122:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36482,"name":"address","nodeType":"ElementaryTypeName","src":"28122:7:109","typeDescriptions":{}}},"id":36485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28122:14:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":36486,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36365,"src":"28138:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36488,"indexExpression":{"id":36487,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36447,"src":"28146:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28138:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":36479,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"28091:10:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":36481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28102:19:109","memberName":"handleIncomingAsset","nodeType":"MemberAccess","referencedDeclaration":27772,"src":"28091:30:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":36489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28091:58:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36490,"nodeType":"ExpressionStatement","src":"28091:58:109"}]}},{"expression":{"id":36504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":36493,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36439,"src":"28166:11:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36495,"indexExpression":{"id":36494,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36447,"src":"28178:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28166:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":36496,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"28183:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36497,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28185:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34406,"src":"28183:10:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36499,"indexExpression":{"id":36498,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36447,"src":"28194:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28183:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"baseExpression":{"id":36500,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36365,"src":"28199:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36502,"indexExpression":{"id":36501,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36447,"src":"28207:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28199:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28183:26:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28166:43:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36505,"nodeType":"ExpressionStatement","src":"28166:43:109"},{"id":36509,"nodeType":"UncheckedBlock","src":"28218:32:109","statements":[{"expression":{"id":36507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"28238:3:109","subExpression":{"id":36506,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36447,"src":"28240:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36508,"nodeType":"ExpressionStatement","src":"28238:3:109"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36449,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36447,"src":"27804:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":36450,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36373,"src":"27808:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27804:13:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36511,"initializationExpression":{"assignments":[36447],"declarations":[{"constant":false,"id":36447,"mutability":"mutable","name":"i","nameLocation":"27801:1:109","nodeType":"VariableDeclaration","scope":36511,"src":"27793:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36446,"name":"uint256","nodeType":"ElementaryTypeName","src":"27793:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36448,"nodeType":"VariableDeclarationStatement","src":"27793:9:109"},"nodeType":"ForStatement","src":"27788:468:109"},{"expression":{"id":36524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":36512,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"28292:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36514,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"28294:2:109","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":34394,"src":"28292:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":36517,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36439,"src":"28308:11:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":36518,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"28321:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36519,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28323:11:109","memberName":"multipliers","nodeType":"MemberAccess","referencedDeclaration":34409,"src":"28321:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":36516,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[35178,35196],"referencedDeclaration":35178,"src":"28304:3:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":36520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28304:31:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":36521,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"28337:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36522,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28339:8:109","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":34398,"src":"28337:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36515,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35114,"src":"28299:4:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":36523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28299:49:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28292:56:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36525,"nodeType":"ExpressionStatement","src":"28292:56:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":36527,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"28362:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36528,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28364:2:109","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":34394,"src":"28362:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":36529,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"28369:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36530,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28371:2:109","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":34392,"src":"28369:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28362:11:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"442073686f756c6420696e637265617365","id":36532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"28375:19:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_bb9053a0213fd7b0c31f2850e8d9176b933be82fddca9a3800fc76e83e2e796c","typeString":"literal_string \"D should increase\""},"value":"D should increase"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bb9053a0213fd7b0c31f2850e8d9176b933be82fddca9a3800fc76e83e2e796c","typeString":"literal_string \"D should increase\""}],"id":36526,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"28354:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28354:41:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36534,"nodeType":"ExpressionStatement","src":"28354:41:109"},{"expression":{"id":36540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":36535,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"28468:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36537,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"28470:2:109","memberName":"d2","nodeType":"MemberAccess","referencedDeclaration":34396,"src":"28468:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":36538,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"28475:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36539,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28477:2:109","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":34394,"src":"28475:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28468:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36541,"nodeType":"ExpressionStatement","src":"28468:11:109"},{"assignments":[36546],"declarations":[{"constant":false,"id":36546,"mutability":"mutable","name":"fees","nameLocation":"28502:4:109","nodeType":"VariableDeclaration","scope":36745,"src":"28485:21:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":36544,"name":"uint256","nodeType":"ElementaryTypeName","src":"28485:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36545,"nodeType":"ArrayTypeName","src":"28485:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":36552,"initialValue":{"arguments":[{"id":36550,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36373,"src":"28523:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36549,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"28509:13:109","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":36547,"name":"uint256","nodeType":"ElementaryTypeName","src":"28513:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36548,"nodeType":"ArrayTypeName","src":"28513:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":36551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28509:24:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"28485:48:109"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":36553,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"28544:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36554,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28546:11:109","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":34403,"src":"28544:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":36555,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28561:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"28544:18:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":36680,"nodeType":"Block","src":"29215:90:109","statements":[{"expression":{"id":36678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":36674,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36362,"src":"29271:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36676,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"29276:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"29271:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":36677,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36439,"src":"29287:11:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"29271:27:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36679,"nodeType":"ExpressionStatement","src":"29271:27:109"}]},"id":36681,"nodeType":"IfStatement","src":"28540:765:109","trueBody":{"id":36673,"nodeType":"Block","src":"28564:645:109","statements":[{"assignments":[36558],"declarations":[{"constant":false,"id":36558,"mutability":"mutable","name":"feePerToken","nameLocation":"28580:11:109","nodeType":"VariableDeclaration","scope":36673,"src":"28572:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36557,"name":"uint256","nodeType":"ElementaryTypeName","src":"28572:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36564,"initialValue":{"arguments":[{"expression":{"id":36560,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36362,"src":"28607:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36561,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28612:7:109","memberName":"swapFee","nodeType":"MemberAccess","referencedDeclaration":34360,"src":"28607:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":36562,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36373,"src":"28621:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36559,"name":"_feePerToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36014,"src":"28594:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":36563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28594:37:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28572:59:109"},{"body":{"id":36657,"nodeType":"Block","src":"28672:467:109","statements":[{"assignments":[36572],"declarations":[{"constant":false,"id":36572,"mutability":"mutable","name":"idealBalance","nameLocation":"28690:12:109","nodeType":"VariableDeclaration","scope":36657,"src":"28682:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36571,"name":"uint256","nodeType":"ElementaryTypeName","src":"28682:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36584,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":36573,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"28706:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36574,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28708:2:109","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":34394,"src":"28706:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"baseExpression":{"expression":{"id":36575,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"28713:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36576,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28715:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34406,"src":"28713:10:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36578,"indexExpression":{"id":36577,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36566,"src":"28724:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28713:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28706:20:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":36580,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28705:22:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":36581,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"28730:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36582,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28732:2:109","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":34392,"src":"28730:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28705:29:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28682:52:109"},{"expression":{"id":36601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":36585,"name":"fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36546,"src":"28744:4:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36587,"indexExpression":{"id":36586,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36566,"src":"28749:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28744:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36588,"name":"feePerToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36558,"src":"28755:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"arguments":[{"baseExpression":{"id":36591,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36439,"src":"28794:11:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36593,"indexExpression":{"id":36592,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36566,"src":"28806:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28794:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":36589,"name":"idealBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36572,"src":"28770:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28783:10:109","memberName":"difference","nodeType":"MemberAccess","referencedDeclaration":30644,"src":"28770:23:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":36594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28770:39:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":36595,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28769:41:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28755:55:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":36597,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28754:57:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":36598,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"28814:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":36599,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28824:15:109","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"28814:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28754:85:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28744:95:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36602,"nodeType":"ExpressionStatement","src":"28744:95:109"},{"assignments":[36604],"declarations":[{"constant":false,"id":36604,"mutability":"mutable","name":"adminFee","nameLocation":"28857:8:109","nodeType":"VariableDeclaration","scope":36657,"src":"28849:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36603,"name":"uint256","nodeType":"ElementaryTypeName","src":"28849:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36615,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":36605,"name":"fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36546,"src":"28869:4:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36607,"indexExpression":{"id":36606,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36566,"src":"28874:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28869:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":36608,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36362,"src":"28879:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36609,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28884:8:109","memberName":"adminFee","nodeType":"MemberAccess","referencedDeclaration":34362,"src":"28879:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28869:23:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":36611,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28868:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":36612,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"28896:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":36613,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28906:15:109","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"28896:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28868:53:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28849:72:109"},{"expression":{"id":36626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":36616,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36362,"src":"28931:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36619,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28936:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"28931:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36620,"indexExpression":{"id":36618,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36566,"src":"28945:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28931:16:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":36621,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36439,"src":"28950:11:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36623,"indexExpression":{"id":36622,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36566,"src":"28962:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28950:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":36624,"name":"adminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36604,"src":"28967:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28950:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28931:44:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36627,"nodeType":"ExpressionStatement","src":"28931:44:109"},{"expression":{"id":36639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":36628,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36362,"src":"28985:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36631,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28990:9:109","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":34378,"src":"28985:14:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36632,"indexExpression":{"id":36630,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36566,"src":"29000:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28985:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":36633,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36362,"src":"29005:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36634,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29010:9:109","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":34378,"src":"29005:14:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36636,"indexExpression":{"id":36635,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36566,"src":"29020:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29005:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":36637,"name":"adminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36604,"src":"29025:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29005:28:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28985:48:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36640,"nodeType":"ExpressionStatement","src":"28985:48:109"},{"expression":{"id":36651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":36641,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36439,"src":"29043:11:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36643,"indexExpression":{"id":36642,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36566,"src":"29055:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"29043:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":36644,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36439,"src":"29060:11:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36646,"indexExpression":{"id":36645,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36566,"src":"29072:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29060:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":36647,"name":"fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36546,"src":"29077:4:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36649,"indexExpression":{"id":36648,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36566,"src":"29082:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29077:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29060:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29043:41:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36652,"nodeType":"ExpressionStatement","src":"29043:41:109"},{"id":36656,"nodeType":"UncheckedBlock","src":"29095:36:109","statements":[{"expression":{"id":36654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"29117:3:109","subExpression":{"id":36653,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36566,"src":"29119:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36655,"nodeType":"ExpressionStatement","src":"29117:3:109"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36568,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36566,"src":"28655:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":36569,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36373,"src":"28659:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28655:13:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36658,"initializationExpression":{"assignments":[36566],"declarations":[{"constant":false,"id":36566,"mutability":"mutable","name":"i","nameLocation":"28652:1:109","nodeType":"VariableDeclaration","scope":36658,"src":"28644:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36565,"name":"uint256","nodeType":"ElementaryTypeName","src":"28644:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36567,"nodeType":"VariableDeclarationStatement","src":"28644:9:109"},"nodeType":"ForStatement","src":"28639:500:109"},{"expression":{"id":36671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":36659,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"29146:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36661,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"29148:2:109","memberName":"d2","nodeType":"MemberAccess","referencedDeclaration":34396,"src":"29146:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":36664,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36439,"src":"29162:11:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":36665,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"29175:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36666,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29177:11:109","memberName":"multipliers","nodeType":"MemberAccess","referencedDeclaration":34409,"src":"29175:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":36663,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[35178,35196],"referencedDeclaration":35178,"src":"29158:3:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":36667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29158:31:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":36668,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"29191:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36669,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29193:8:109","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":34398,"src":"29191:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36662,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35114,"src":"29153:4:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":36670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29153:49:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29146:56:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36672,"nodeType":"ExpressionStatement","src":"29146:56:109"}]}},{"assignments":[36683],"declarations":[{"constant":false,"id":36683,"mutability":"mutable","name":"toMint","nameLocation":"29319:6:109","nodeType":"VariableDeclaration","scope":36745,"src":"29311:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36682,"name":"uint256","nodeType":"ElementaryTypeName","src":"29311:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36684,"nodeType":"VariableDeclarationStatement","src":"29311:14:109"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":36685,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"29335:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36686,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29337:11:109","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":34403,"src":"29335:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":36687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29352:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29335:18:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":36711,"nodeType":"Block","src":"29389:62:109","statements":[{"expression":{"id":36709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36695,"name":"toMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36683,"src":"29397:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":36696,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"29408:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36697,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29410:2:109","memberName":"d2","nodeType":"MemberAccess","referencedDeclaration":34396,"src":"29408:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":36698,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"29415:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36699,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29417:2:109","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":34392,"src":"29415:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29408:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":36701,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"29407:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":36702,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"29423:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36703,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29425:11:109","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":34403,"src":"29423:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29407:29:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":36705,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"29406:31:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":36706,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"29440:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36707,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29442:2:109","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":34392,"src":"29440:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29406:38:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29397:47:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36710,"nodeType":"ExpressionStatement","src":"29397:47:109"}]},"id":36712,"nodeType":"IfStatement","src":"29331:120:109","trueBody":{"id":36694,"nodeType":"Block","src":"29355:28:109","statements":[{"expression":{"id":36692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36689,"name":"toMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36683,"src":"29363:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":36690,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"29372:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36691,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29374:2:109","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":34394,"src":"29372:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29363:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36693,"nodeType":"ExpressionStatement","src":"29363:13:109"}]}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36714,"name":"toMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36683,"src":"29465:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":36715,"name":"minToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36367,"src":"29475:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29465:19:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d696e74203c206d696e","id":36717,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"29486:12:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_6ddd7f5b4f156ad60913b3898ca8aedad82b4753c6391199bcbb48583e596887","typeString":"literal_string \"mint < min\""},"value":"mint < min"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6ddd7f5b4f156ad60913b3898ca8aedad82b4753c6391199bcbb48583e596887","typeString":"literal_string \"mint < min\""}],"id":36713,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"29457:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29457:42:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36719,"nodeType":"ExpressionStatement","src":"29457:42:109"},{"expression":{"arguments":[{"expression":{"id":36725,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"29554:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29558:6:109","memberName":"sender","nodeType":"MemberAccess","src":"29554:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36727,"name":"toMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36683,"src":"29566:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":36720,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"29539:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36723,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29541:7:109","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":34401,"src":"29539:9:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":36724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29549:4:109","memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":23120,"src":"29539:14:109","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":36728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29539:34:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36729,"nodeType":"ExpressionStatement","src":"29539:34:109"},{"eventCall":{"arguments":[{"expression":{"id":36731,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"29598:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29602:6:109","memberName":"sender","nodeType":"MemberAccess","src":"29598:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36733,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36365,"src":"29610:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":36734,"name":"fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36546,"src":"29619:4:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":36735,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"29625:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36736,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29627:2:109","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":34394,"src":"29625:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":36737,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36388,"src":"29631:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":36738,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29633:11:109","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":34403,"src":"29631:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":36739,"name":"toMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36683,"src":"29647:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29631:22:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36730,"name":"AddLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34291,"src":"29585:12:109","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256[] memory,uint256[] memory,uint256,uint256)"}},"id":36741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29585:69:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36742,"nodeType":"EmitStatement","src":"29580:74:109"},{"expression":{"id":36743,"name":"toMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36683,"src":"29668:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":36371,"id":36744,"nodeType":"Return","src":"29661:13:109"}]},"documentation":{"id":36359,"nodeType":"StructuredDocumentation","src":"26620:480:109","text":" @notice Add liquidity to the pool\n @param self Swap struct to read from and write to\n @param amounts the amounts of each token to add, in their native precision\n @param minToMint the minimum LP tokens adding this amount of liquidity\n should mint, otherwise revert. Handy for front-running mitigation\n allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\n @return amount of LP token user received"},"functionSelector":"67487f2a","id":36746,"implemented":true,"kind":"function","modifiers":[],"name":"addLiquidity","nameLocation":"27112:12:109","nodeType":"FunctionDefinition","parameters":{"id":36368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36362,"mutability":"mutable","name":"self","nameLocation":"27143:4:109","nodeType":"VariableDeclaration","scope":36746,"src":"27130:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":36361,"nodeType":"UserDefinedTypeName","pathNode":{"id":36360,"name":"Swap","nameLocations":["27130:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"27130:4:109"},"referencedDeclaration":34379,"src":"27130:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":36365,"mutability":"mutable","name":"amounts","nameLocation":"27170:7:109","nodeType":"VariableDeclaration","scope":36746,"src":"27153:24:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":36363,"name":"uint256","nodeType":"ElementaryTypeName","src":"27153:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36364,"nodeType":"ArrayTypeName","src":"27153:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":36367,"mutability":"mutable","name":"minToMint","nameLocation":"27191:9:109","nodeType":"VariableDeclaration","scope":36746,"src":"27183:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36366,"name":"uint256","nodeType":"ElementaryTypeName","src":"27183:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27124:80:109"},"returnParameters":{"id":36371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36370,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36746,"src":"27223:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36369,"name":"uint256","nodeType":"ElementaryTypeName","src":"27223:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27222:9:109"},"scope":37721,"src":"27103:2576:109","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":36895,"nodeType":"Block","src":"30266:897:109","statements":[{"assignments":[36763],"declarations":[{"constant":false,"id":36763,"mutability":"mutable","name":"lpToken","nameLocation":"30280:7:109","nodeType":"VariableDeclaration","scope":36895,"src":"30272:15:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"},"typeName":{"id":36762,"nodeType":"UserDefinedTypeName","pathNode":{"id":36761,"name":"LPToken","nameLocations":["30272:7:109"],"nodeType":"IdentifierPath","referencedDeclaration":23179,"src":"30272:7:109"},"referencedDeclaration":23179,"src":"30272:7:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"visibility":"internal"}],"id":36766,"initialValue":{"expression":{"id":36764,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36750,"src":"30290:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36765,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30295:7:109","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":34365,"src":"30290:12:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"nodeType":"VariableDeclarationStatement","src":"30272:30:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36768,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36752,"src":"30316:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"expression":{"id":36771,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"30344:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30348:6:109","memberName":"sender","nodeType":"MemberAccess","src":"30344:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":36769,"name":"lpToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36763,"src":"30326:7:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":36770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30334:9:109","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":8557,"src":"30326:17:109","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":36773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30326:29:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30316:39:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"3e4c502e62616c616e63654f66","id":36775,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"30357:15:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_f6ffe39fc3cc1849a13d51ded78dcf3b5c94216cc465a3b1b92bc78f59ae6cef","typeString":"literal_string \">LP.balanceOf\""},"value":">LP.balanceOf"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f6ffe39fc3cc1849a13d51ded78dcf3b5c94216cc465a3b1b92bc78f59ae6cef","typeString":"literal_string \">LP.balanceOf\""}],"id":36767,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"30308:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30308:65:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36777,"nodeType":"ExpressionStatement","src":"30308:65:109"},{"assignments":[36779],"declarations":[{"constant":false,"id":36779,"mutability":"mutable","name":"numTokens","nameLocation":"30387:9:109","nodeType":"VariableDeclaration","scope":36895,"src":"30379:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36778,"name":"uint256","nodeType":"ElementaryTypeName","src":"30379:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36783,"initialValue":{"expression":{"expression":{"id":36780,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36750,"src":"30399:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36781,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30404:12:109","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"30399:17:109","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":36782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30417:6:109","memberName":"length","nodeType":"MemberAccess","src":"30399:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30379:44:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":36785,"name":"minAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36755,"src":"30437:10:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":36786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30448:6:109","memberName":"length","nodeType":"MemberAccess","src":"30437:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":36787,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36779,"src":"30458:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30437:30:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d69736d6174636820706f6f6c546f6b656e73","id":36789,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"30469:21:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_4ad81e79192646de58c05c664c8c46273241020a112976d2773155fc181b7641","typeString":"literal_string \"mismatch poolTokens\""},"value":"mismatch poolTokens"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4ad81e79192646de58c05c664c8c46273241020a112976d2773155fc181b7641","typeString":"literal_string \"mismatch poolTokens\""}],"id":36784,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"30429:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36790,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30429:62:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36791,"nodeType":"ExpressionStatement","src":"30429:62:109"},{"assignments":[36796],"declarations":[{"constant":false,"id":36796,"mutability":"mutable","name":"balances","nameLocation":"30515:8:109","nodeType":"VariableDeclaration","scope":36895,"src":"30498:25:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":36794,"name":"uint256","nodeType":"ElementaryTypeName","src":"30498:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36795,"nodeType":"ArrayTypeName","src":"30498:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":36799,"initialValue":{"expression":{"id":36797,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36750,"src":"30526:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36798,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30531:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"30526:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"30498:41:109"},{"assignments":[36801],"declarations":[{"constant":false,"id":36801,"mutability":"mutable","name":"totalSupply","nameLocation":"30553:11:109","nodeType":"VariableDeclaration","scope":36895,"src":"30545:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36800,"name":"uint256","nodeType":"ElementaryTypeName","src":"30545:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36805,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":36802,"name":"lpToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36763,"src":"30567:7:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":36803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30575:11:109","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":8543,"src":"30567:19:109","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":36804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30567:21:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30545:43:109"},{"assignments":[36810],"declarations":[{"constant":false,"id":36810,"mutability":"mutable","name":"amounts","nameLocation":"30612:7:109","nodeType":"VariableDeclaration","scope":36895,"src":"30595:24:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":36808,"name":"uint256","nodeType":"ElementaryTypeName","src":"30595:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36809,"nodeType":"ArrayTypeName","src":"30595:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":36816,"initialValue":{"arguments":[{"id":36812,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36796,"src":"30648:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":36813,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36752,"src":"30658:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":36814,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36801,"src":"30666:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36811,"name":"_calculateRemoveLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35831,"src":"30622:25:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256[] memory)"}},"id":36815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30622:56:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"30595:83:109"},{"assignments":[36818],"declarations":[{"constant":false,"id":36818,"mutability":"mutable","name":"numAmounts","nameLocation":"30693:10:109","nodeType":"VariableDeclaration","scope":36895,"src":"30685:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36817,"name":"uint256","nodeType":"ElementaryTypeName","src":"30685:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36821,"initialValue":{"expression":{"id":36819,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36810,"src":"30706:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30714:6:109","memberName":"length","nodeType":"MemberAccess","src":"30706:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30685:35:109"},{"body":{"id":36874,"nodeType":"Block","src":"30760:265:109","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":36829,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36810,"src":"30776:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36831,"indexExpression":{"id":36830,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36823,"src":"30784:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30776:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"baseExpression":{"id":36832,"name":"minAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36755,"src":"30790:10:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":36834,"indexExpression":{"id":36833,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36823,"src":"30801:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30790:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30776:27:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616d6f756e74735b695d203c206d696e416d6f756e74735b695d","id":36836,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"30805:28:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_f9716ead0cbfa1f0d7e4fb0f8f862f9707576ae17b9c27448547344167a1c211","typeString":"literal_string \"amounts[i] < minAmounts[i]\""},"value":"amounts[i] < minAmounts[i]"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f9716ead0cbfa1f0d7e4fb0f8f862f9707576ae17b9c27448547344167a1c211","typeString":"literal_string \"amounts[i] < minAmounts[i]\""}],"id":36828,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"30768:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30768:66:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36838,"nodeType":"ExpressionStatement","src":"30768:66:109"},{"expression":{"id":36851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":36839,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36750,"src":"30842:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36842,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30847:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"30842:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36843,"indexExpression":{"id":36841,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36823,"src":"30856:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"30842:16:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":36844,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36796,"src":"30861:8:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36846,"indexExpression":{"id":36845,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36823,"src":"30870:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30861:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":36847,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36810,"src":"30875:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36849,"indexExpression":{"id":36848,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36823,"src":"30883:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30875:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30861:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30842:43:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36852,"nodeType":"ExpressionStatement","src":"30842:43:109"},{"expression":{"arguments":[{"arguments":[{"baseExpression":{"expression":{"id":36858,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36750,"src":"30932:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36859,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30937:12:109","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"30932:17:109","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":36861,"indexExpression":{"id":36860,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36823,"src":"30950:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30932:20:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":36857,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30924:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36856,"name":"address","nodeType":"ElementaryTypeName","src":"30924:7:109","typeDescriptions":{}}},"id":36862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30924:29:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":36863,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"30955:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30959:6:109","memberName":"sender","nodeType":"MemberAccess","src":"30955:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":36865,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36810,"src":"30967:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36867,"indexExpression":{"id":36866,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36823,"src":"30975:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30967:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":36853,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"30893:10:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":36855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30904:19:109","memberName":"handleOutgoingAsset","nodeType":"MemberAccess","referencedDeclaration":27809,"src":"30893:30:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":36868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30893:85:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36869,"nodeType":"ExpressionStatement","src":"30893:85:109"},{"id":36873,"nodeType":"UncheckedBlock","src":"30987:32:109","statements":[{"expression":{"id":36871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"31007:3:109","subExpression":{"id":36870,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36823,"src":"31009:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36872,"nodeType":"ExpressionStatement","src":"31007:3:109"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36825,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36823,"src":"30742:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":36826,"name":"numAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36818,"src":"30746:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30742:14:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36875,"initializationExpression":{"assignments":[36823],"declarations":[{"constant":false,"id":36823,"mutability":"mutable","name":"i","nameLocation":"30739:1:109","nodeType":"VariableDeclaration","scope":36875,"src":"30731:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36822,"name":"uint256","nodeType":"ElementaryTypeName","src":"30731:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36824,"nodeType":"VariableDeclarationStatement","src":"30731:9:109"},"nodeType":"ForStatement","src":"30726:299:109"},{"expression":{"arguments":[{"expression":{"id":36879,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"31048:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31052:6:109","memberName":"sender","nodeType":"MemberAccess","src":"31048:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36881,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36752,"src":"31060:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":36876,"name":"lpToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36763,"src":"31031:7:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":36878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31039:8:109","memberName":"burnFrom","nodeType":"MemberAccess","referencedDeclaration":23143,"src":"31031:16:109","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":36882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31031:36:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36883,"nodeType":"ExpressionStatement","src":"31031:36:109"},{"eventCall":{"arguments":[{"expression":{"id":36885,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"31095:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31099:6:109","memberName":"sender","nodeType":"MemberAccess","src":"31095:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36887,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36810,"src":"31107:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36888,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36801,"src":"31116:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":36889,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36752,"src":"31130:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31116:20:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36884,"name":"RemoveLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34300,"src":"31079:15:109","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (address,uint256[] memory,uint256)"}},"id":36891,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31079:58:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36892,"nodeType":"EmitStatement","src":"31074:63:109"},{"expression":{"id":36893,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36810,"src":"31151:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":36760,"id":36894,"nodeType":"Return","src":"31144:14:109"}]},"documentation":{"id":36747,"nodeType":"StructuredDocumentation","src":"29683:437:109","text":" @notice Burn LP tokens to remove liquidity from the pool.\n @dev Liquidity can always be removed, even when the pool is paused.\n @param self Swap struct to read from and write to\n @param amount the amount of LP tokens to burn\n @param minAmounts the minimum amounts of each token in the pool\n acceptable for this burn. Useful as a front-running mitigation\n @return amounts of tokens the user received"},"functionSelector":"6fbb250c","id":36896,"implemented":true,"kind":"function","modifiers":[],"name":"removeLiquidity","nameLocation":"30132:15:109","nodeType":"FunctionDefinition","parameters":{"id":36756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36750,"mutability":"mutable","name":"self","nameLocation":"30166:4:109","nodeType":"VariableDeclaration","scope":36896,"src":"30153:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":36749,"nodeType":"UserDefinedTypeName","pathNode":{"id":36748,"name":"Swap","nameLocations":["30153:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"30153:4:109"},"referencedDeclaration":34379,"src":"30153:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":36752,"mutability":"mutable","name":"amount","nameLocation":"30184:6:109","nodeType":"VariableDeclaration","scope":36896,"src":"30176:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36751,"name":"uint256","nodeType":"ElementaryTypeName","src":"30176:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":36755,"mutability":"mutable","name":"minAmounts","nameLocation":"30215:10:109","nodeType":"VariableDeclaration","scope":36896,"src":"30196:29:109","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":36753,"name":"uint256","nodeType":"ElementaryTypeName","src":"30196:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36754,"nodeType":"ArrayTypeName","src":"30196:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"30147:82:109"},"returnParameters":{"id":36760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36759,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36896,"src":"30248:16:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":36757,"name":"uint256","nodeType":"ElementaryTypeName","src":"30248:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36758,"nodeType":"ArrayTypeName","src":"30248:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"30247:18:109"},"scope":37721,"src":"30123:1040:109","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":37044,"nodeType":"Block","src":"31702:922:109","statements":[{"assignments":[36913],"declarations":[{"constant":false,"id":36913,"mutability":"mutable","name":"lpToken","nameLocation":"31716:7:109","nodeType":"VariableDeclaration","scope":37044,"src":"31708:15:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"},"typeName":{"id":36912,"nodeType":"UserDefinedTypeName","pathNode":{"id":36911,"name":"LPToken","nameLocations":["31708:7:109"],"nodeType":"IdentifierPath","referencedDeclaration":23179,"src":"31708:7:109"},"referencedDeclaration":23179,"src":"31708:7:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"visibility":"internal"}],"id":36916,"initialValue":{"expression":{"id":36914,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36900,"src":"31726:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36915,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31731:7:109","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":34365,"src":"31726:12:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"nodeType":"VariableDeclarationStatement","src":"31708:30:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36918,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36902,"src":"31753:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"expression":{"id":36921,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"31786:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31790:6:109","memberName":"sender","nodeType":"MemberAccess","src":"31786:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":36919,"name":"lpToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36913,"src":"31768:7:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":36920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31776:9:109","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":8557,"src":"31768:17:109","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":36923,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31768:29:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31753:44:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"3e4c502e62616c616e63654f66","id":36925,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"31799:15:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_f6ffe39fc3cc1849a13d51ded78dcf3b5c94216cc465a3b1b92bc78f59ae6cef","typeString":"literal_string \">LP.balanceOf\""},"value":">LP.balanceOf"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f6ffe39fc3cc1849a13d51ded78dcf3b5c94216cc465a3b1b92bc78f59ae6cef","typeString":"literal_string \">LP.balanceOf\""}],"id":36917,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"31745:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31745:70:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36927,"nodeType":"ExpressionStatement","src":"31745:70:109"},{"assignments":[36929],"declarations":[{"constant":false,"id":36929,"mutability":"mutable","name":"numTokens","nameLocation":"31829:9:109","nodeType":"VariableDeclaration","scope":37044,"src":"31821:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36928,"name":"uint256","nodeType":"ElementaryTypeName","src":"31821:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36933,"initialValue":{"expression":{"expression":{"id":36930,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36900,"src":"31841:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36931,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31846:12:109","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"31841:17:109","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":36932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31859:6:109","memberName":"length","nodeType":"MemberAccess","src":"31841:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"31821:44:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36935,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36904,"src":"31879:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":36936,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36929,"src":"31892:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31879:22:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6e6f7420666f756e64","id":36938,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"31903:11:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_9b887cfddc434e3cf41b666954131afc611b880c7637aac66ca1f629f8984c5b","typeString":"literal_string \"not found\""},"value":"not found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9b887cfddc434e3cf41b666954131afc611b880c7637aac66ca1f629f8984c5b","typeString":"literal_string \"not found\""}],"id":36934,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"31871:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31871:44:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36940,"nodeType":"ExpressionStatement","src":"31871:44:109"},{"assignments":[36942],"declarations":[{"constant":false,"id":36942,"mutability":"mutable","name":"totalSupply","nameLocation":"31930:11:109","nodeType":"VariableDeclaration","scope":37044,"src":"31922:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36941,"name":"uint256","nodeType":"ElementaryTypeName","src":"31922:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36946,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":36943,"name":"lpToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36913,"src":"31944:7:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":36944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31952:11:109","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":8543,"src":"31944:19:109","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":36945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31944:21:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"31922:43:109"},{"assignments":[36948,36950],"declarations":[{"constant":false,"id":36948,"mutability":"mutable","name":"dy","nameLocation":"31981:2:109","nodeType":"VariableDeclaration","scope":37044,"src":"31973:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36947,"name":"uint256","nodeType":"ElementaryTypeName","src":"31973:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":36950,"mutability":"mutable","name":"dyFee","nameLocation":"31993:5:109","nodeType":"VariableDeclaration","scope":37044,"src":"31985:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36949,"name":"uint256","nodeType":"ElementaryTypeName","src":"31985:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36957,"initialValue":{"arguments":[{"id":36952,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36900,"src":"32029:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},{"id":36953,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36902,"src":"32035:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":36954,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36904,"src":"32048:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":36955,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36942,"src":"32060:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36951,"name":"_calculateWithdrawOneToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34566,"src":"32002:26:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$_t_uint256_$_t_uint8_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer,uint256,uint8,uint256) view returns (uint256,uint256)"}},"id":36956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32002:70:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"31972:100:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36959,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36948,"src":"32087:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":36960,"name":"minAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36906,"src":"32093:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32087:15:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6479203c206d696e416d6f756e74","id":36962,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"32104:16:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_3569a113599fc30dddee53f7bfa525ade1d72800ee559c1f223157ef9a1e0da6","typeString":"literal_string \"dy < minAmount\""},"value":"dy < minAmount"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3569a113599fc30dddee53f7bfa525ade1d72800ee559c1f223157ef9a1e0da6","typeString":"literal_string \"dy < minAmount\""}],"id":36958,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"32079:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32079:42:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36964,"nodeType":"ExpressionStatement","src":"32079:42:109"},{"assignments":[36966],"declarations":[{"constant":false,"id":36966,"mutability":"mutable","name":"adminFee","nameLocation":"32136:8:109","nodeType":"VariableDeclaration","scope":37044,"src":"32128:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36965,"name":"uint256","nodeType":"ElementaryTypeName","src":"32128:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36975,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36967,"name":"dyFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36950,"src":"32148:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":36968,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36900,"src":"32156:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36969,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32161:8:109","memberName":"adminFee","nodeType":"MemberAccess","referencedDeclaration":34362,"src":"32156:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32148:21:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":36971,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"32147:23:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":36972,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"32173:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":36973,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32183:15:109","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"32173:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32147:51:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"32128:70:109"},{"expression":{"id":36990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":36976,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36900,"src":"32204:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36979,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32209:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"32204:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36980,"indexExpression":{"id":36978,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36904,"src":"32218:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"32204:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":36981,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36900,"src":"32232:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36982,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32237:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"32232:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36984,"indexExpression":{"id":36983,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36904,"src":"32246:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"32232:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36985,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36948,"src":"32261:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":36986,"name":"adminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36966,"src":"32266:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32261:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":36988,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"32260:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32232:43:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32204:71:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36991,"nodeType":"ExpressionStatement","src":"32204:71:109"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36992,"name":"adminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36966,"src":"32285:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":36993,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32297:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"32285:13:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37009,"nodeType":"IfStatement","src":"32281:100:109","trueBody":{"id":37008,"nodeType":"Block","src":"32300:81:109","statements":[{"expression":{"id":37006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":36995,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36900,"src":"32308:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":36998,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32313:9:109","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":34378,"src":"32308:14:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":36999,"indexExpression":{"id":36997,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36904,"src":"32323:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"32308:26:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":37000,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36900,"src":"32337:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37001,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32342:9:109","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":34378,"src":"32337:14:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":37003,"indexExpression":{"id":37002,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36904,"src":"32352:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"32337:26:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":37004,"name":"adminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36966,"src":"32366:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32337:37:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32308:66:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37007,"nodeType":"ExpressionStatement","src":"32308:66:109"}]}},{"expression":{"arguments":[{"expression":{"id":37013,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"32403:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":37014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32407:6:109","memberName":"sender","nodeType":"MemberAccess","src":"32403:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37015,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36902,"src":"32415:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":37010,"name":"lpToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36913,"src":"32386:7:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":37012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32394:8:109","memberName":"burnFrom","nodeType":"MemberAccess","referencedDeclaration":23143,"src":"32386:16:109","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":37016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32386:41:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37017,"nodeType":"ExpressionStatement","src":"32386:41:109"},{"expression":{"arguments":[{"arguments":[{"baseExpression":{"expression":{"id":37023,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36900,"src":"32472:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37024,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32477:12:109","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"32472:17:109","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":37026,"indexExpression":{"id":37025,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36904,"src":"32490:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"32472:29:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":37022,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32464:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37021,"name":"address","nodeType":"ElementaryTypeName","src":"32464:7:109","typeDescriptions":{}}},"id":37027,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32464:38:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":37028,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"32504:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":37029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32508:6:109","memberName":"sender","nodeType":"MemberAccess","src":"32504:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37030,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36948,"src":"32516:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":37018,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"32433:10:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":37020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32444:19:109","memberName":"handleOutgoingAsset","nodeType":"MemberAccess","referencedDeclaration":27809,"src":"32433:30:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":37031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32433:86:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37032,"nodeType":"ExpressionStatement","src":"32433:86:109"},{"eventCall":{"arguments":[{"expression":{"id":37034,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"32550:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":37035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32554:6:109","memberName":"sender","nodeType":"MemberAccess","src":"32550:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37036,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36902,"src":"32562:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":37037,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36942,"src":"32575:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":37038,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36904,"src":"32588:10:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":37039,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36948,"src":"32600:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37033,"name":"RemoveLiquidityOne","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34312,"src":"32531:18:109","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256,uint256,uint256)"}},"id":37040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32531:72:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37041,"nodeType":"EmitStatement","src":"32526:77:109"},{"expression":{"id":37042,"name":"dy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36948,"src":"32617:2:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":36910,"id":37043,"nodeType":"Return","src":"32610:9:109"}]},"documentation":{"id":36897,"nodeType":"StructuredDocumentation","src":"31167:375:109","text":" @notice Remove liquidity from the pool all in one token.\n @param self Swap struct to read from and write to\n @param tokenAmount the amount of the lp tokens to burn\n @param tokenIndex the index of the token you want to receive\n @param minAmount the minimum amount to withdraw, otherwise revert\n @return amount chosen token that user received"},"functionSelector":"ae3feedc","id":37045,"implemented":true,"kind":"function","modifiers":[],"name":"removeLiquidityOneToken","nameLocation":"31554:23:109","nodeType":"FunctionDefinition","parameters":{"id":36907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36900,"mutability":"mutable","name":"self","nameLocation":"31596:4:109","nodeType":"VariableDeclaration","scope":37045,"src":"31583:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":36899,"nodeType":"UserDefinedTypeName","pathNode":{"id":36898,"name":"Swap","nameLocations":["31583:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"31583:4:109"},"referencedDeclaration":34379,"src":"31583:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":36902,"mutability":"mutable","name":"tokenAmount","nameLocation":"31614:11:109","nodeType":"VariableDeclaration","scope":37045,"src":"31606:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36901,"name":"uint256","nodeType":"ElementaryTypeName","src":"31606:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":36904,"mutability":"mutable","name":"tokenIndex","nameLocation":"31637:10:109","nodeType":"VariableDeclaration","scope":37045,"src":"31631:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":36903,"name":"uint8","nodeType":"ElementaryTypeName","src":"31631:5:109","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":36906,"mutability":"mutable","name":"minAmount","nameLocation":"31661:9:109","nodeType":"VariableDeclaration","scope":37045,"src":"31653:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36905,"name":"uint256","nodeType":"ElementaryTypeName","src":"31653:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31577:97:109"},"returnParameters":{"id":36910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36909,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37045,"src":"31693:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36908,"name":"uint256","nodeType":"ElementaryTypeName","src":"31693:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31692:9:109"},"scope":37721,"src":"31545:1079:109","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":37420,"nodeType":"Block","src":"33204:2257:109","statements":[{"assignments":[37061],"declarations":[{"constant":false,"id":37061,"mutability":"mutable","name":"v","nameLocation":"33237:1:109","nodeType":"VariableDeclaration","scope":37420,"src":"33210:28:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo"},"typeName":{"id":37060,"nodeType":"UserDefinedTypeName","pathNode":{"id":37059,"name":"ManageLiquidityInfo","nameLocations":["33210:19:109"],"nodeType":"IdentifierPath","referencedDeclaration":34410,"src":"33210:19:109"},"referencedDeclaration":34410,"src":"33210:19:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_storage_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo"}},"visibility":"internal"}],"id":37077,"initialValue":{"arguments":[{"hexValue":"30","id":37063,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33268:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":37064,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33277:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":37065,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33286:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"id":37067,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37049,"src":"33308:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}],"id":37066,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"33295:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer) view returns (uint256)"}},"id":37068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33295:18:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":37069,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37049,"src":"33321:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37070,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33326:7:109","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":34365,"src":"33321:12:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},{"hexValue":"30","id":37071,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33341:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":37072,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37049,"src":"33350:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37073,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33355:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"33350:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},{"expression":{"id":37074,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37049,"src":"33371:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37075,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33376:25:109","memberName":"tokenPrecisionMultipliers","nodeType":"MemberAccess","referencedDeclaration":34372,"src":"33371:30:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"},{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}],"id":37062,"name":"ManageLiquidityInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34410,"src":"33241:19:109","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ManageLiquidityInfo_$34410_storage_ptr_$","typeString":"type(struct SwapUtilsExternal.ManageLiquidityInfo storage pointer)"}},"id":37076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33241:166:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"nodeType":"VariableDeclarationStatement","src":"33210:197:109"},{"expression":{"id":37085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":37078,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"33413:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37080,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"33415:11:109","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":34403,"src":"33413:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":37081,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"33429:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37082,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33431:7:109","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":34401,"src":"33429:9:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":37083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33439:11:109","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":8543,"src":"33429:21:109","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":37084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33429:23:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33413:39:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37086,"nodeType":"ExpressionStatement","src":"33413:39:109"},{"assignments":[37088],"declarations":[{"constant":false,"id":37088,"mutability":"mutable","name":"numTokens","nameLocation":"33467:9:109","nodeType":"VariableDeclaration","scope":37420,"src":"33459:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37087,"name":"uint256","nodeType":"ElementaryTypeName","src":"33459:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37092,"initialValue":{"expression":{"expression":{"id":37089,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37049,"src":"33479:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37090,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33484:12:109","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"33479:17:109","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":37091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33497:6:109","memberName":"length","nodeType":"MemberAccess","src":"33479:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"33459:44:109"},{"assignments":[37094],"declarations":[{"constant":false,"id":37094,"mutability":"mutable","name":"numAmounts","nameLocation":"33517:10:109","nodeType":"VariableDeclaration","scope":37420,"src":"33509:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37093,"name":"uint256","nodeType":"ElementaryTypeName","src":"33509:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37097,"initialValue":{"expression":{"id":37095,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37052,"src":"33530:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33538:6:109","memberName":"length","nodeType":"MemberAccess","src":"33530:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"33509:35:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37099,"name":"numAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37094,"src":"33558:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":37100,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37088,"src":"33572:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33558:23:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d69736d6174636820706f6f6c20746f6b656e73","id":37102,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"33583:22:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_2f637b5966c86516cd0e8631a2a2dbb5ced6ddd78c0dceb24f758a9d4073aab8","typeString":"literal_string \"mismatch pool tokens\""},"value":"mismatch pool tokens"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2f637b5966c86516cd0e8631a2a2dbb5ced6ddd78c0dceb24f758a9d4073aab8","typeString":"literal_string \"mismatch pool tokens\""}],"id":37098,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"33550:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33550:56:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37104,"nodeType":"ExpressionStatement","src":"33550:56:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":37117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37106,"name":"maxBurnAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37054,"src":"33621:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"expression":{"id":37110,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"33658:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":37111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33662:6:109","memberName":"sender","nodeType":"MemberAccess","src":"33658:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":37107,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"33638:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37108,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33640:7:109","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":34401,"src":"33638:9:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":37109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33648:9:109","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":8557,"src":"33638:19:109","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":37112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33638:31:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33621:48:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37114,"name":"maxBurnAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37054,"src":"33673:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":37115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33690:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"33673:18:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"33621:70:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"3e4c502e62616c616e63654f66","id":37118,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"33693:15:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_f6ffe39fc3cc1849a13d51ded78dcf3b5c94216cc465a3b1b92bc78f59ae6cef","typeString":"literal_string \">LP.balanceOf\""},"value":">LP.balanceOf"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f6ffe39fc3cc1849a13d51ded78dcf3b5c94216cc465a3b1b92bc78f59ae6cef","typeString":"literal_string \">LP.balanceOf\""}],"id":37105,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"33613:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33613:96:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37120,"nodeType":"ExpressionStatement","src":"33613:96:109"},{"assignments":[37122],"declarations":[{"constant":false,"id":37122,"mutability":"mutable","name":"feePerToken","nameLocation":"33724:11:109","nodeType":"VariableDeclaration","scope":37420,"src":"33716:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37121,"name":"uint256","nodeType":"ElementaryTypeName","src":"33716:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37128,"initialValue":{"arguments":[{"expression":{"id":37124,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37049,"src":"33751:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37125,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33756:7:109","memberName":"swapFee","nodeType":"MemberAccess","referencedDeclaration":34360,"src":"33751:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":37126,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37088,"src":"33765:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37123,"name":"_feePerToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36014,"src":"33738:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":37127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33738:37:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"33716:59:109"},{"assignments":[37133],"declarations":[{"constant":false,"id":37133,"mutability":"mutable","name":"fees","nameLocation":"33798:4:109","nodeType":"VariableDeclaration","scope":37420,"src":"33781:21:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":37131,"name":"uint256","nodeType":"ElementaryTypeName","src":"33781:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37132,"nodeType":"ArrayTypeName","src":"33781:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":37139,"initialValue":{"arguments":[{"id":37137,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37088,"src":"33819:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37136,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"33805:13:109","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":37134,"name":"uint256","nodeType":"ElementaryTypeName","src":"33809:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37135,"nodeType":"ArrayTypeName","src":"33809:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":37138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33805:24:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"33781:48:109"},{"id":37329,"nodeType":"Block","src":"33835:1047:109","statements":[{"assignments":[37144],"declarations":[{"constant":false,"id":37144,"mutability":"mutable","name":"balances1","nameLocation":"33860:9:109","nodeType":"VariableDeclaration","scope":37329,"src":"33843:26:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":37142,"name":"uint256","nodeType":"ElementaryTypeName","src":"33843:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37143,"nodeType":"ArrayTypeName","src":"33843:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":37150,"initialValue":{"arguments":[{"id":37148,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37088,"src":"33886:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37147,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"33872:13:109","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":37145,"name":"uint256","nodeType":"ElementaryTypeName","src":"33876:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37146,"nodeType":"ArrayTypeName","src":"33876:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":37149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33872:24:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"33843:53:109"},{"expression":{"id":37164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":37151,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"33904:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37153,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"33906:2:109","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":34392,"src":"33904:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"expression":{"id":37156,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"33920:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37157,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33922:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34406,"src":"33920:10:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":37158,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"33932:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37159,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33934:11:109","memberName":"multipliers","nodeType":"MemberAccess","referencedDeclaration":34409,"src":"33932:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":37155,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[35178,35196],"referencedDeclaration":35178,"src":"33916:3:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":37160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33916:30:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":37161,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"33948:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37162,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33950:8:109","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":34398,"src":"33948:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37154,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35114,"src":"33911:4:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":37163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33911:48:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33904:55:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37165,"nodeType":"ExpressionStatement","src":"33904:55:109"},{"body":{"id":37201,"nodeType":"Block","src":"34000:186:109","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":37173,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"34018:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37174,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34020:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34406,"src":"34018:10:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37176,"indexExpression":{"id":37175,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37167,"src":"34029:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34018:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"baseExpression":{"id":37177,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37052,"src":"34035:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37179,"indexExpression":{"id":37178,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37167,"src":"34043:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34035:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34018:27:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7769746864726177206d6f7265207468616e20617661696c61626c65","id":37181,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"34047:30:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_a5d69ce6c1af4155857291c80267a8fe45eaf0a8a37d5e7aef002f4e00be6446","typeString":"literal_string \"withdraw more than available\""},"value":"withdraw more than available"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a5d69ce6c1af4155857291c80267a8fe45eaf0a8a37d5e7aef002f4e00be6446","typeString":"literal_string \"withdraw more than available\""}],"id":37172,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"34010:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34010:68:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37183,"nodeType":"ExpressionStatement","src":"34010:68:109"},{"id":37200,"nodeType":"UncheckedBlock","src":"34089:89:109","statements":[{"expression":{"id":37195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":37184,"name":"balances1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37144,"src":"34111:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37186,"indexExpression":{"id":37185,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37167,"src":"34121:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"34111:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":37187,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"34126:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37188,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34128:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34406,"src":"34126:10:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37190,"indexExpression":{"id":37189,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37167,"src":"34137:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34126:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":37191,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37052,"src":"34142:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37193,"indexExpression":{"id":37192,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37167,"src":"34150:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34142:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34126:26:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34111:41:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37196,"nodeType":"ExpressionStatement","src":"34111:41:109"},{"expression":{"id":37198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"34164:3:109","subExpression":{"id":37197,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37167,"src":"34166:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37199,"nodeType":"ExpressionStatement","src":"34164:3:109"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37169,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37167,"src":"33983:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":37170,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37088,"src":"33987:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33983:13:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37202,"initializationExpression":{"assignments":[37167],"declarations":[{"constant":false,"id":37167,"mutability":"mutable","name":"i","nameLocation":"33980:1:109","nodeType":"VariableDeclaration","scope":37202,"src":"33972:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37166,"name":"uint256","nodeType":"ElementaryTypeName","src":"33972:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37168,"nodeType":"VariableDeclarationStatement","src":"33972:9:109"},"nodeType":"ForStatement","src":"33967:219:109"},{"expression":{"id":37215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":37203,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"34193:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37205,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"34195:2:109","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":34394,"src":"34193:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":37208,"name":"balances1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37144,"src":"34209:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":37209,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"34220:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37210,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34222:11:109","memberName":"multipliers","nodeType":"MemberAccess","referencedDeclaration":34409,"src":"34220:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":37207,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[35178,35196],"referencedDeclaration":35178,"src":"34205:3:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":37211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34205:29:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":37212,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"34236:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37213,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34238:8:109","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":34398,"src":"34236:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37206,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35114,"src":"34200:4:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":37214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34200:47:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34193:54:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37216,"nodeType":"ExpressionStatement","src":"34193:54:109"},{"body":{"id":37313,"nodeType":"Block","src":"34289:524:109","statements":[{"id":37258,"nodeType":"Block","src":"34299:221:109","statements":[{"assignments":[37224],"declarations":[{"constant":false,"id":37224,"mutability":"mutable","name":"idealBalance","nameLocation":"34319:12:109","nodeType":"VariableDeclaration","scope":37258,"src":"34311:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37223,"name":"uint256","nodeType":"ElementaryTypeName","src":"34311:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37236,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":37225,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"34335:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37226,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34337:2:109","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":34394,"src":"34335:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"baseExpression":{"expression":{"id":37227,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"34342:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37228,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34344:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34406,"src":"34342:10:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37230,"indexExpression":{"id":37229,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37218,"src":"34353:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34342:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34335:20:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":37232,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34334:22:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":37233,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"34359:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37234,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34361:2:109","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":34392,"src":"34359:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34334:29:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"34311:52:109"},{"assignments":[37238],"declarations":[{"constant":false,"id":37238,"mutability":"mutable","name":"difference","nameLocation":"34383:10:109","nodeType":"VariableDeclaration","scope":37258,"src":"34375:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37237,"name":"uint256","nodeType":"ElementaryTypeName","src":"34375:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37245,"initialValue":{"arguments":[{"baseExpression":{"id":37241,"name":"balances1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37144,"src":"34420:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37243,"indexExpression":{"id":37242,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37218,"src":"34430:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34420:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":37239,"name":"idealBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37224,"src":"34396:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34409:10:109","memberName":"difference","nodeType":"MemberAccess","referencedDeclaration":30644,"src":"34396:23:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":37244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34396:37:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"34375:58:109"},{"expression":{"id":37256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":37246,"name":"fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37133,"src":"34445:4:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37248,"indexExpression":{"id":37247,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37218,"src":"34450:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"34445:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37249,"name":"feePerToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37122,"src":"34456:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":37250,"name":"difference","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37238,"src":"34470:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34456:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":37252,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34455:26:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":37253,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"34484:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":37254,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34494:15:109","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"34484:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34455:54:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34445:64:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37257,"nodeType":"ExpressionStatement","src":"34445:64:109"}]},{"assignments":[37260],"declarations":[{"constant":false,"id":37260,"mutability":"mutable","name":"adminFee","nameLocation":"34537:8:109","nodeType":"VariableDeclaration","scope":37313,"src":"34529:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37259,"name":"uint256","nodeType":"ElementaryTypeName","src":"34529:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37271,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":37261,"name":"fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37133,"src":"34549:4:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37263,"indexExpression":{"id":37262,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37218,"src":"34554:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34549:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":37264,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37049,"src":"34559:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37265,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34564:8:109","memberName":"adminFee","nodeType":"MemberAccess","referencedDeclaration":34362,"src":"34559:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34549:23:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":37267,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34548:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":37268,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"34576:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":37269,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34586:15:109","memberName":"FEE_DENOMINATOR","nodeType":"MemberAccess","referencedDeclaration":29270,"src":"34576:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34548:53:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"34529:72:109"},{"expression":{"id":37282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":37272,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37049,"src":"34611:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37275,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34616:8:109","memberName":"balances","nodeType":"MemberAccess","referencedDeclaration":34375,"src":"34611:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":37276,"indexExpression":{"id":37274,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37218,"src":"34625:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"34611:16:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":37277,"name":"balances1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37144,"src":"34630:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37279,"indexExpression":{"id":37278,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37218,"src":"34640:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34630:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":37280,"name":"adminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37260,"src":"34645:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34630:23:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34611:42:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37283,"nodeType":"ExpressionStatement","src":"34611:42:109"},{"expression":{"id":37295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":37284,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37049,"src":"34663:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37287,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34668:9:109","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":34378,"src":"34663:14:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":37288,"indexExpression":{"id":37286,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37218,"src":"34678:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"34663:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":37289,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37049,"src":"34683:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37290,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34688:9:109","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":34378,"src":"34683:14:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":37292,"indexExpression":{"id":37291,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37218,"src":"34698:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34683:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":37293,"name":"adminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37260,"src":"34703:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34683:28:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34663:48:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37296,"nodeType":"ExpressionStatement","src":"34663:48:109"},{"expression":{"id":37307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":37297,"name":"balances1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37144,"src":"34721:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37299,"indexExpression":{"id":37298,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37218,"src":"34731:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"34721:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":37300,"name":"balances1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37144,"src":"34736:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37302,"indexExpression":{"id":37301,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37218,"src":"34746:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34736:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":37303,"name":"fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37133,"src":"34751:4:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37305,"indexExpression":{"id":37304,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37218,"src":"34756:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34751:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34736:22:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34721:37:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37308,"nodeType":"ExpressionStatement","src":"34721:37:109"},{"id":37312,"nodeType":"UncheckedBlock","src":"34769:36:109","statements":[{"expression":{"id":37310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"34791:3:109","subExpression":{"id":37309,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37218,"src":"34793:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37311,"nodeType":"ExpressionStatement","src":"34791:3:109"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37220,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37218,"src":"34272:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":37221,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37088,"src":"34276:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34272:13:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37314,"initializationExpression":{"assignments":[37218],"declarations":[{"constant":false,"id":37218,"mutability":"mutable","name":"i","nameLocation":"34269:1:109","nodeType":"VariableDeclaration","scope":37314,"src":"34261:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37217,"name":"uint256","nodeType":"ElementaryTypeName","src":"34261:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37219,"nodeType":"VariableDeclarationStatement","src":"34261:9:109"},"nodeType":"ForStatement","src":"34256:557:109"},{"expression":{"id":37327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":37315,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"34821:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37317,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"34823:2:109","memberName":"d2","nodeType":"MemberAccess","referencedDeclaration":34396,"src":"34821:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":37320,"name":"balances1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37144,"src":"34837:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":37321,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"34848:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37322,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34850:11:109","memberName":"multipliers","nodeType":"MemberAccess","referencedDeclaration":34409,"src":"34848:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":37319,"name":"_xp","nodeType":"Identifier","overloadedDeclarations":[35178,35196],"referencedDeclaration":35178,"src":"34833:3:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":37323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34833:29:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":37324,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"34864:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37325,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34866:8:109","memberName":"preciseA","nodeType":"MemberAccess","referencedDeclaration":34398,"src":"34864:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37318,"name":"getD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35114,"src":"34828:4:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":37326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34828:47:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34821:54:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37328,"nodeType":"ExpressionStatement","src":"34821:54:109"}]},{"assignments":[37331],"declarations":[{"constant":false,"id":37331,"mutability":"mutable","name":"tokenAmount","nameLocation":"34895:11:109","nodeType":"VariableDeclaration","scope":37420,"src":"34887:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37330,"name":"uint256","nodeType":"ElementaryTypeName","src":"34887:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37345,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":37332,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"34911:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37333,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34913:2:109","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":34392,"src":"34911:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":37334,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"34918:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37335,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34920:2:109","memberName":"d2","nodeType":"MemberAccess","referencedDeclaration":34396,"src":"34918:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34911:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":37337,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34910:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":37338,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"34926:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37339,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34928:11:109","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":34403,"src":"34926:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34910:29:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":37341,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34909:31:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":37342,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"34943:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37343,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34945:2:109","memberName":"d0","nodeType":"MemberAccess","referencedDeclaration":34392,"src":"34943:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34909:38:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"34887:60:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37347,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37331,"src":"34961:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":37348,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34976:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"34961:16:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"217a65726f20616d6f756e74","id":37350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"34979:14:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_ad3743fd30ada6469788b58d66f88c735cea919feecd588df3ad8b7d9a2a3507","typeString":"literal_string \"!zero amount\""},"value":"!zero amount"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ad3743fd30ada6469788b58d66f88c735cea919feecd588df3ad8b7d9a2a3507","typeString":"literal_string \"!zero amount\""}],"id":37346,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"34953:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34953:41:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37352,"nodeType":"ExpressionStatement","src":"34953:41:109"},{"expression":{"id":37357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37353,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37331,"src":"35000:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37354,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37331,"src":"35014:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":37355,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35028:1:109","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"35014:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35000:29:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37358,"nodeType":"ExpressionStatement","src":"35000:29:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37360,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37331,"src":"35044:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":37361,"name":"maxBurnAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37054,"src":"35059:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35044:28:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"746f6b656e416d6f756e74203e206d61784275726e416d6f756e74","id":37363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"35074:29:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_a7a312f14c5778159227ed2c11234cdc582e54216594239df89b5aac8a9fbfd9","typeString":"literal_string \"tokenAmount > maxBurnAmount\""},"value":"tokenAmount > maxBurnAmount"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a7a312f14c5778159227ed2c11234cdc582e54216594239df89b5aac8a9fbfd9","typeString":"literal_string \"tokenAmount > maxBurnAmount\""}],"id":37359,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"35036:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35036:68:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37365,"nodeType":"ExpressionStatement","src":"35036:68:109"},{"expression":{"arguments":[{"expression":{"id":37371,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"35130:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":37372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35134:6:109","memberName":"sender","nodeType":"MemberAccess","src":"35130:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37373,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37331,"src":"35142:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":37366,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"35111:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37369,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35113:7:109","memberName":"lpToken","nodeType":"MemberAccess","referencedDeclaration":34401,"src":"35111:9:109","typeDescriptions":{"typeIdentifier":"t_contract$_LPToken_$23179","typeString":"contract LPToken"}},"id":37370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35121:8:109","memberName":"burnFrom","nodeType":"MemberAccess","referencedDeclaration":23143,"src":"35111:18:109","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":37374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35111:43:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37375,"nodeType":"ExpressionStatement","src":"35111:43:109"},{"body":{"id":37403,"nodeType":"Block","src":"35194:140:109","statements":[{"expression":{"arguments":[{"arguments":[{"baseExpression":{"expression":{"id":37387,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37049,"src":"35241:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37388,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35246:12:109","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"35241:17:109","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":37390,"indexExpression":{"id":37389,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37377,"src":"35259:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35241:20:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":37386,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"35233:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37385,"name":"address","nodeType":"ElementaryTypeName","src":"35233:7:109","typeDescriptions":{}}},"id":37391,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35233:29:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":37392,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"35264:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":37393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35268:6:109","memberName":"sender","nodeType":"MemberAccess","src":"35264:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":37394,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37052,"src":"35276:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37396,"indexExpression":{"id":37395,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37377,"src":"35284:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35276:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":37382,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"35202:10:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":37384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35213:19:109","memberName":"handleOutgoingAsset","nodeType":"MemberAccess","referencedDeclaration":27809,"src":"35202:30:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":37397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35202:85:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37398,"nodeType":"ExpressionStatement","src":"35202:85:109"},{"id":37402,"nodeType":"UncheckedBlock","src":"35296:32:109","statements":[{"expression":{"id":37400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"35316:3:109","subExpression":{"id":37399,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37377,"src":"35318:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37401,"nodeType":"ExpressionStatement","src":"35316:3:109"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37379,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37377,"src":"35177:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":37380,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37088,"src":"35181:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35177:13:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37404,"initializationExpression":{"assignments":[37377],"declarations":[{"constant":false,"id":37377,"mutability":"mutable","name":"i","nameLocation":"35174:1:109","nodeType":"VariableDeclaration","scope":37404,"src":"35166:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37376,"name":"uint256","nodeType":"ElementaryTypeName","src":"35166:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37378,"nodeType":"VariableDeclarationStatement","src":"35166:9:109"},"nodeType":"ForStatement","src":"35161:173:109"},{"eventCall":{"arguments":[{"expression":{"id":37406,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"35370:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":37407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35374:6:109","memberName":"sender","nodeType":"MemberAccess","src":"35370:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37408,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37052,"src":"35382:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":37409,"name":"fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37133,"src":"35391:4:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":37410,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"35397:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37411,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35399:2:109","memberName":"d1","nodeType":"MemberAccess","referencedDeclaration":34394,"src":"35397:4:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":37412,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37061,"src":"35403:1:109","typeDescriptions":{"typeIdentifier":"t_struct$_ManageLiquidityInfo_$34410_memory_ptr","typeString":"struct SwapUtilsExternal.ManageLiquidityInfo memory"}},"id":37413,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35405:11:109","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":34403,"src":"35403:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":37414,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37331,"src":"35419:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35403:27:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37405,"name":"RemoveLiquidityImbalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34326,"src":"35345:24:109","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256[] memory,uint256[] memory,uint256,uint256)"}},"id":37416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35345:86:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37417,"nodeType":"EmitStatement","src":"35340:91:109"},{"expression":{"id":37418,"name":"tokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37331,"src":"35445:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":37058,"id":37419,"nodeType":"Return","src":"35438:18:109"}]},"documentation":{"id":37046,"nodeType":"StructuredDocumentation","src":"32628:428:109","text":" @notice Remove liquidity from the pool, weighted differently than the\n pool's current balances.\n @param self Swap struct to read from and write to\n @param amounts how much of each token to withdraw\n @param maxBurnAmount the max LP token provider is willing to pay to\n remove liquidity. Useful as a front-running mitigation.\n @return actual amount of LP tokens burned in the withdrawal"},"functionSelector":"77b83d30","id":37421,"implemented":true,"kind":"function","modifiers":[],"name":"removeLiquidityImbalance","nameLocation":"33068:24:109","nodeType":"FunctionDefinition","parameters":{"id":37055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37049,"mutability":"mutable","name":"self","nameLocation":"33111:4:109","nodeType":"VariableDeclaration","scope":37421,"src":"33098:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":37048,"nodeType":"UserDefinedTypeName","pathNode":{"id":37047,"name":"Swap","nameLocations":["33098:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"33098:4:109"},"referencedDeclaration":34379,"src":"33098:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":37052,"mutability":"mutable","name":"amounts","nameLocation":"33138:7:109","nodeType":"VariableDeclaration","scope":37421,"src":"33121:24:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":37050,"name":"uint256","nodeType":"ElementaryTypeName","src":"33121:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37051,"nodeType":"ArrayTypeName","src":"33121:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":37054,"mutability":"mutable","name":"maxBurnAmount","nameLocation":"33159:13:109","nodeType":"VariableDeclaration","scope":37421,"src":"33151:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37053,"name":"uint256","nodeType":"ElementaryTypeName","src":"33151:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33092:84:109"},"returnParameters":{"id":37058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37057,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37421,"src":"33195:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37056,"name":"uint256","nodeType":"ElementaryTypeName","src":"33195:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33194:9:109"},"scope":37721,"src":"33059:2402:109","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":37485,"nodeType":"Block","src":"35694:363:109","statements":[{"assignments":[37431],"declarations":[{"constant":false,"id":37431,"mutability":"mutable","name":"numTokens","nameLocation":"35708:9:109","nodeType":"VariableDeclaration","scope":37485,"src":"35700:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37430,"name":"uint256","nodeType":"ElementaryTypeName","src":"35700:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37435,"initialValue":{"expression":{"expression":{"id":37432,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37425,"src":"35720:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37433,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35725:12:109","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"35720:17:109","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":37434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35738:6:109","memberName":"length","nodeType":"MemberAccess","src":"35720:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"35700:44:109"},{"body":{"id":37483,"nodeType":"Block","src":"35783:270:109","statements":[{"assignments":[37444],"declarations":[{"constant":false,"id":37444,"mutability":"mutable","name":"token","nameLocation":"35798:5:109","nodeType":"VariableDeclaration","scope":37483,"src":"35791:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"},"typeName":{"id":37443,"nodeType":"UserDefinedTypeName","pathNode":{"id":37442,"name":"IERC20","nameLocations":["35791:6:109"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"35791:6:109"},"referencedDeclaration":10812,"src":"35791:6:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"visibility":"internal"}],"id":37449,"initialValue":{"baseExpression":{"expression":{"id":37445,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37425,"src":"35806:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37446,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35811:12:109","memberName":"pooledTokens","nodeType":"MemberAccess","referencedDeclaration":34369,"src":"35806:17:109","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10812_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":37448,"indexExpression":{"id":37447,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37437,"src":"35824:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35806:20:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"35791:35:109"},{"assignments":[37451],"declarations":[{"constant":false,"id":37451,"mutability":"mutable","name":"balance","nameLocation":"35842:7:109","nodeType":"VariableDeclaration","scope":37483,"src":"35834:15:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37450,"name":"uint256","nodeType":"ElementaryTypeName","src":"35834:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37456,"initialValue":{"baseExpression":{"expression":{"id":37452,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37425,"src":"35852:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37453,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35857:9:109","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":34378,"src":"35852:14:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":37455,"indexExpression":{"id":37454,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37437,"src":"35867:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35852:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"35834:35:109"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37457,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37451,"src":"35881:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":37458,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35892:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"35881:12:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37478,"nodeType":"IfStatement","src":"35877:130:109","trueBody":{"id":37477,"nodeType":"Block","src":"35895:112:109","statements":[{"expression":{"id":37464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"35905:24:109","subExpression":{"baseExpression":{"expression":{"id":37460,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37425,"src":"35912:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37461,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35917:9:109","memberName":"adminFees","nodeType":"MemberAccess","referencedDeclaration":34378,"src":"35912:14:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":37463,"indexExpression":{"id":37462,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37437,"src":"35927:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"35912:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37465,"nodeType":"ExpressionStatement","src":"35905:24:109"},{"expression":{"arguments":[{"arguments":[{"id":37471,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37444,"src":"35978:5:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}],"id":37470,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"35970:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37469,"name":"address","nodeType":"ElementaryTypeName","src":"35970:7:109","typeDescriptions":{}}},"id":37472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35970:14:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37473,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37427,"src":"35986:2:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37474,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37451,"src":"35990:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":37466,"name":"AssetLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28696,"src":"35939:10:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AssetLogic_$28696_$","typeString":"type(library AssetLogic)"}},"id":37468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35950:19:109","memberName":"handleOutgoingAsset","nodeType":"MemberAccess","referencedDeclaration":27809,"src":"35939:30:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":37475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35939:59:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37476,"nodeType":"ExpressionStatement","src":"35939:59:109"}]}},{"id":37482,"nodeType":"UncheckedBlock","src":"36015:32:109","statements":[{"expression":{"id":37480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"36035:3:109","subExpression":{"id":37479,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37437,"src":"36037:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37481,"nodeType":"ExpressionStatement","src":"36035:3:109"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37439,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37437,"src":"35766:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":37440,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37431,"src":"35770:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35766:13:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37484,"initializationExpression":{"assignments":[37437],"declarations":[{"constant":false,"id":37437,"mutability":"mutable","name":"i","nameLocation":"35763:1:109","nodeType":"VariableDeclaration","scope":37484,"src":"35755:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37436,"name":"uint256","nodeType":"ElementaryTypeName","src":"35755:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37438,"nodeType":"VariableDeclarationStatement","src":"35755:9:109"},"nodeType":"ForStatement","src":"35750:303:109"}]},"documentation":{"id":37422,"nodeType":"StructuredDocumentation","src":"35465:159:109","text":" @notice withdraw all admin fees to a given address\n @param self Swap struct to withdraw fees from\n @param to Address to send the fees to"},"functionSelector":"9cbd2406","id":37486,"implemented":true,"kind":"function","modifiers":[],"name":"withdrawAdminFees","nameLocation":"35636:17:109","nodeType":"FunctionDefinition","parameters":{"id":37428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37425,"mutability":"mutable","name":"self","nameLocation":"35667:4:109","nodeType":"VariableDeclaration","scope":37486,"src":"35654:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":37424,"nodeType":"UserDefinedTypeName","pathNode":{"id":37423,"name":"Swap","nameLocations":["35654:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"35654:4:109"},"referencedDeclaration":34379,"src":"35654:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":37427,"mutability":"mutable","name":"to","nameLocation":"35681:2:109","nodeType":"VariableDeclaration","scope":37486,"src":"35673:10:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37426,"name":"address","nodeType":"ElementaryTypeName","src":"35673:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"35653:31:109"},"returnParameters":{"id":37429,"nodeType":"ParameterList","parameters":[],"src":"35694:0:109"},"scope":37721,"src":"35627:430:109","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":37515,"nodeType":"Block","src":"36351:142:109","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37496,"name":"newAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37492,"src":"36365:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37500,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"expression":{"id":37497,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"36379:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":37498,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"36389:13:109","memberName":"MAX_ADMIN_FEE","nodeType":"MemberAccess","referencedDeclaration":29278,"src":"36379:23:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":37499,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"36405:1:109","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"36379:27:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36365:41:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"746f6f2068696768","id":37502,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"36408:10:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_8649b1e5b06e4f5968b2a3f0fa64e06710ce221cf73d9057a24a3fccd677b635","typeString":"literal_string \"too high\""},"value":"too high"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8649b1e5b06e4f5968b2a3f0fa64e06710ce221cf73d9057a24a3fccd677b635","typeString":"literal_string \"too high\""}],"id":37495,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"36357:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36357:62:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37504,"nodeType":"ExpressionStatement","src":"36357:62:109"},{"expression":{"id":37509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":37505,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37490,"src":"36425:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37507,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"36430:8:109","memberName":"adminFee","nodeType":"MemberAccess","referencedDeclaration":34362,"src":"36425:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":37508,"name":"newAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37492,"src":"36441:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36425:27:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37510,"nodeType":"ExpressionStatement","src":"36425:27:109"},{"eventCall":{"arguments":[{"id":37512,"name":"newAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37492,"src":"36476:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37511,"name":"NewAdminFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34330,"src":"36464:11:109","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":37513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36464:24:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37514,"nodeType":"EmitStatement","src":"36459:29:109"}]},"documentation":{"id":37487,"nodeType":"StructuredDocumentation","src":"36061:217:109","text":" @notice Sets the admin fee\n @dev adminFee cannot be higher than 100% of the swap fee\n @param self Swap struct to update\n @param newAdminFee new admin fee to be applied on future transactions"},"functionSelector":"08bbaa23","id":37516,"implemented":true,"kind":"function","modifiers":[],"name":"setAdminFee","nameLocation":"36290:11:109","nodeType":"FunctionDefinition","parameters":{"id":37493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37490,"mutability":"mutable","name":"self","nameLocation":"36315:4:109","nodeType":"VariableDeclaration","scope":37516,"src":"36302:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":37489,"nodeType":"UserDefinedTypeName","pathNode":{"id":37488,"name":"Swap","nameLocations":["36302:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"36302:4:109"},"referencedDeclaration":34379,"src":"36302:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":37492,"mutability":"mutable","name":"newAdminFee","nameLocation":"36329:11:109","nodeType":"VariableDeclaration","scope":37516,"src":"36321:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37491,"name":"uint256","nodeType":"ElementaryTypeName","src":"36321:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"36301:40:109"},"returnParameters":{"id":37494,"nodeType":"ParameterList","parameters":[],"src":"36351:0:109"},"scope":37721,"src":"36281:212:109","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":37545,"nodeType":"Block","src":"36774:136:109","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37526,"name":"newSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37522,"src":"36788:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37530,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"expression":{"id":37527,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"36801:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":37528,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"36811:12:109","memberName":"MAX_SWAP_FEE","nodeType":"MemberAccess","referencedDeclaration":29274,"src":"36801:22:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":37529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"36826:1:109","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"36801:26:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36788:39:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"746f6f2068696768","id":37532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"36829:10:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_8649b1e5b06e4f5968b2a3f0fa64e06710ce221cf73d9057a24a3fccd677b635","typeString":"literal_string \"too high\""},"value":"too high"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8649b1e5b06e4f5968b2a3f0fa64e06710ce221cf73d9057a24a3fccd677b635","typeString":"literal_string \"too high\""}],"id":37525,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"36780:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36780:60:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37534,"nodeType":"ExpressionStatement","src":"36780:60:109"},{"expression":{"id":37539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":37535,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37520,"src":"36846:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37537,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"36851:7:109","memberName":"swapFee","nodeType":"MemberAccess","referencedDeclaration":34360,"src":"36846:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":37538,"name":"newSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37522,"src":"36861:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36846:25:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37540,"nodeType":"ExpressionStatement","src":"36846:25:109"},{"eventCall":{"arguments":[{"id":37542,"name":"newSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37522,"src":"36894:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37541,"name":"NewSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34334,"src":"36883:10:109","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":37543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36883:22:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37544,"nodeType":"EmitStatement","src":"36878:27:109"}]},"documentation":{"id":37517,"nodeType":"StructuredDocumentation","src":"36497:206:109","text":" @notice update the swap fee\n @dev fee cannot be higher than 1% of each swap\n @param self Swap struct to update\n @param newSwapFee new swap fee to be applied on future transactions"},"functionSelector":"59d9996a","id":37546,"implemented":true,"kind":"function","modifiers":[],"name":"setSwapFee","nameLocation":"36715:10:109","nodeType":"FunctionDefinition","parameters":{"id":37523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37520,"mutability":"mutable","name":"self","nameLocation":"36739:4:109","nodeType":"VariableDeclaration","scope":37546,"src":"36726:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":37519,"nodeType":"UserDefinedTypeName","pathNode":{"id":37518,"name":"Swap","nameLocations":["36726:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"36726:4:109"},"referencedDeclaration":34379,"src":"36726:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":37522,"mutability":"mutable","name":"newSwapFee","nameLocation":"36753:10:109","nodeType":"VariableDeclaration","scope":37546,"src":"36745:18:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37521,"name":"uint256","nodeType":"ElementaryTypeName","src":"36745:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"36725:39:109"},"returnParameters":{"id":37524,"nodeType":"ParameterList","parameters":[],"src":"36774:0:109"},"scope":37721,"src":"36706:204:109","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":37664,"nodeType":"Block","src":"37381:927:109","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":37558,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"37395:5:109","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":37559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37401:9:109","memberName":"timestamp","nodeType":"MemberAccess","src":"37395:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":37560,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37550,"src":"37414:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37561,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37419:12:109","memberName":"initialATime","nodeType":"MemberAccess","referencedDeclaration":34356,"src":"37414:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":37562,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"37434:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":37563,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"37444:14:109","memberName":"MIN_RAMP_DELAY","nodeType":"MemberAccess","referencedDeclaration":29303,"src":"37434:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37414:44:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37395:63:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"57616974203120646179206265666f7265207374617274696e672072616d70","id":37566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"37460:33:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_1b53e581d849d126253991f586658292489ca99b95601d0e9a46e8a40560683c","typeString":"literal_string \"Wait 1 day before starting ramp\""},"value":"Wait 1 day before starting ramp"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1b53e581d849d126253991f586658292489ca99b95601d0e9a46e8a40560683c","typeString":"literal_string \"Wait 1 day before starting ramp\""}],"id":37557,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"37387:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37387:107:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37568,"nodeType":"ExpressionStatement","src":"37387:107:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37570,"name":"futureTime_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37554,"src":"37508:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":37571,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"37523:5:109","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":37572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37529:9:109","memberName":"timestamp","nodeType":"MemberAccess","src":"37523:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":37573,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"37541:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":37574,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"37551:13:109","memberName":"MIN_RAMP_TIME","nodeType":"MemberAccess","referencedDeclaration":29300,"src":"37541:23:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37523:41:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37508:56:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e73756666696369656e742072616d702074696d65","id":37577,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"37566:24:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_4c79bf4677fbadf48dfed0cfd80497295366e965c13f89299485a45d83898b6a","typeString":"literal_string \"Insufficient ramp time\""},"value":"Insufficient ramp time"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4c79bf4677fbadf48dfed0cfd80497295366e965c13f89299485a45d83898b6a","typeString":"literal_string \"Insufficient ramp time\""}],"id":37569,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"37500:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37500:91:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37579,"nodeType":"ExpressionStatement","src":"37500:91:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":37588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37581,"name":"futureA_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37552,"src":"37605:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":37582,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"37617:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"37605:13:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37584,"name":"futureA_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37552,"src":"37622:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":37585,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"37633:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":37586,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"37643:5:109","memberName":"MAX_A","nodeType":"MemberAccess","referencedDeclaration":29294,"src":"37633:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37622:26:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"37605:43:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"667574757265415f206d757374206265203e203020616e64203c20436f6e7374616e74732e4d41585f41","id":37589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"37650:44:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_16c70a682a636bc60694f91b894e08a15c0bb032c076db7a2d2d265f7f743409","typeString":"literal_string \"futureA_ must be > 0 and < Constants.MAX_A\""},"value":"futureA_ must be > 0 and < Constants.MAX_A"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_16c70a682a636bc60694f91b894e08a15c0bb032c076db7a2d2d265f7f743409","typeString":"literal_string \"futureA_ must be > 0 and < Constants.MAX_A\""}],"id":37580,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"37597:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37597:98:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37591,"nodeType":"ExpressionStatement","src":"37597:98:109"},{"assignments":[37593],"declarations":[{"constant":false,"id":37593,"mutability":"mutable","name":"initialAPrecise","nameLocation":"37710:15:109","nodeType":"VariableDeclaration","scope":37664,"src":"37702:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37592,"name":"uint256","nodeType":"ElementaryTypeName","src":"37702:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37597,"initialValue":{"arguments":[{"id":37595,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37550,"src":"37741:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}],"id":37594,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"37728:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer) view returns (uint256)"}},"id":37596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37728:18:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"37702:44:109"},{"assignments":[37599],"declarations":[{"constant":false,"id":37599,"mutability":"mutable","name":"futureAPrecise","nameLocation":"37760:14:109","nodeType":"VariableDeclaration","scope":37664,"src":"37752:22:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37598,"name":"uint256","nodeType":"ElementaryTypeName","src":"37752:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37604,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37600,"name":"futureA_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37552,"src":"37777:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":37601,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"37788:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":37602,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"37798:11:109","memberName":"A_PRECISION","nodeType":"MemberAccess","referencedDeclaration":29289,"src":"37788:21:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37777:32:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"37752:57:109"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37605,"name":"futureAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37599,"src":"37820:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":37606,"name":"initialAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37593,"src":"37837:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37820:32:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":37629,"nodeType":"Block","src":"37967:107:109","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37620,"name":"futureAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37599,"src":"37983:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37621,"name":"initialAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37593,"src":"38001:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":37622,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"38019:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":37623,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"38029:12:109","memberName":"MAX_A_CHANGE","nodeType":"MemberAccess","referencedDeclaration":29297,"src":"38019:22:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"38001:40:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37983:58:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"667574757265415f20697320746f6f206c61726765","id":37626,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"38043:23:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_2ee4dedb99ff885c57b93a92e7fecc104d42f54e9af51e109d9629ee80d199e9","typeString":"literal_string \"futureA_ is too large\""},"value":"futureA_ is too large"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2ee4dedb99ff885c57b93a92e7fecc104d42f54e9af51e109d9629ee80d199e9","typeString":"literal_string \"futureA_ is too large\""}],"id":37619,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"37975:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37975:92:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37628,"nodeType":"ExpressionStatement","src":"37975:92:109"}]},"id":37630,"nodeType":"IfStatement","src":"37816:258:109","trueBody":{"id":37618,"nodeType":"Block","src":"37854:107:109","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37609,"name":"futureAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37599,"src":"37870:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":37610,"name":"Constants","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29304,"src":"37887:9:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Constants_$29304_$","typeString":"type(library Constants)"}},"id":37611,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"37897:12:109","memberName":"MAX_A_CHANGE","nodeType":"MemberAccess","referencedDeclaration":29297,"src":"37887:22:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37870:39:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":37613,"name":"initialAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37593,"src":"37913:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37870:58:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"667574757265415f20697320746f6f20736d616c6c","id":37615,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"37930:23:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_70ef023479c1247bc56a8110e918ad65744efc349b9118a585df0f3c4ddea941","typeString":"literal_string \"futureA_ is too small\""},"value":"futureA_ is too small"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_70ef023479c1247bc56a8110e918ad65744efc349b9118a585df0f3c4ddea941","typeString":"literal_string \"futureA_ is too small\""}],"id":37608,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"37862:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37862:92:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37617,"nodeType":"ExpressionStatement","src":"37862:92:109"}]}},{"expression":{"id":37635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":37631,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37550,"src":"38080:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37633,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"38085:8:109","memberName":"initialA","nodeType":"MemberAccess","referencedDeclaration":34352,"src":"38080:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":37634,"name":"initialAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37593,"src":"38096:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"38080:31:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37636,"nodeType":"ExpressionStatement","src":"38080:31:109"},{"expression":{"id":37641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":37637,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37550,"src":"38117:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37639,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"38122:7:109","memberName":"futureA","nodeType":"MemberAccess","referencedDeclaration":34354,"src":"38117:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":37640,"name":"futureAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37599,"src":"38132:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"38117:29:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37642,"nodeType":"ExpressionStatement","src":"38117:29:109"},{"expression":{"id":37648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":37643,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37550,"src":"38152:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37645,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"38157:12:109","memberName":"initialATime","nodeType":"MemberAccess","referencedDeclaration":34356,"src":"38152:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":37646,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"38172:5:109","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":37647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38178:9:109","memberName":"timestamp","nodeType":"MemberAccess","src":"38172:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"38152:35:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37649,"nodeType":"ExpressionStatement","src":"38152:35:109"},{"expression":{"id":37654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":37650,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37550,"src":"38193:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37652,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"38198:11:109","memberName":"futureATime","nodeType":"MemberAccess","referencedDeclaration":34358,"src":"38193:16:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":37653,"name":"futureTime_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37554,"src":"38212:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"38193:30:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37655,"nodeType":"ExpressionStatement","src":"38193:30:109"},{"eventCall":{"arguments":[{"id":37657,"name":"initialAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37593,"src":"38241:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":37658,"name":"futureAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37599,"src":"38258:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":37659,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"38274:5:109","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":37660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38280:9:109","memberName":"timestamp","nodeType":"MemberAccess","src":"38274:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":37661,"name":"futureTime_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37554,"src":"38291:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37656,"name":"RampA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34344,"src":"38235:5:109","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256,uint256)"}},"id":37662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38235:68:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37663,"nodeType":"EmitStatement","src":"38230:73:109"}]},"documentation":{"id":37547,"nodeType":"StructuredDocumentation","src":"36914:366:109","text":" @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\n Checks if the change is too rapid, and commits the new A value only when it falls under\n the limit range.\n @param self Swap struct to update\n @param futureA_ the new A to ramp towards\n @param futureTime_ timestamp when the new A should be reached"},"functionSelector":"fc784184","id":37665,"implemented":true,"kind":"function","modifiers":[],"name":"rampA","nameLocation":"37292:5:109","nodeType":"FunctionDefinition","parameters":{"id":37555,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37550,"mutability":"mutable","name":"self","nameLocation":"37316:4:109","nodeType":"VariableDeclaration","scope":37665,"src":"37303:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":37549,"nodeType":"UserDefinedTypeName","pathNode":{"id":37548,"name":"Swap","nameLocations":["37303:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"37303:4:109"},"referencedDeclaration":34379,"src":"37303:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"},{"constant":false,"id":37552,"mutability":"mutable","name":"futureA_","nameLocation":"37334:8:109","nodeType":"VariableDeclaration","scope":37665,"src":"37326:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37551,"name":"uint256","nodeType":"ElementaryTypeName","src":"37326:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":37554,"mutability":"mutable","name":"futureTime_","nameLocation":"37356:11:109","nodeType":"VariableDeclaration","scope":37665,"src":"37348:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37553,"name":"uint256","nodeType":"ElementaryTypeName","src":"37348:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"37297:74:109"},"returnParameters":{"id":37556,"nodeType":"ParameterList","parameters":[],"src":"37381:0:109"},"scope":37721,"src":"37283:1025:109","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":37719,"nodeType":"Block","src":"38533:313:109","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":37673,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37669,"src":"38547:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37674,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"38552:11:109","memberName":"futureATime","nodeType":"MemberAccess","referencedDeclaration":34358,"src":"38547:16:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":37675,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"38566:5:109","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":37676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38572:9:109","memberName":"timestamp","nodeType":"MemberAccess","src":"38566:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"38547:34:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"52616d7020697320616c72656164792073746f70706564","id":37678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"38583:25:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_1a473326c7eab86a4c1915be8a93321772f3ce5660b51eb1a81d3ac6b9907aa3","typeString":"literal_string \"Ramp is already stopped\""},"value":"Ramp is already stopped"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1a473326c7eab86a4c1915be8a93321772f3ce5660b51eb1a81d3ac6b9907aa3","typeString":"literal_string \"Ramp is already stopped\""}],"id":37672,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"38539:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38539:70:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37680,"nodeType":"ExpressionStatement","src":"38539:70:109"},{"assignments":[37682],"declarations":[{"constant":false,"id":37682,"mutability":"mutable","name":"currentA","nameLocation":"38624:8:109","nodeType":"VariableDeclaration","scope":37719,"src":"38616:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37681,"name":"uint256","nodeType":"ElementaryTypeName","src":"38616:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37686,"initialValue":{"arguments":[{"id":37684,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37669,"src":"38648:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}],"id":37683,"name":"_getAPrecise","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"38635:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Swap_$34379_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct SwapUtilsExternal.Swap storage pointer) view returns (uint256)"}},"id":37685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38635:18:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"38616:37:109"},{"expression":{"id":37691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":37687,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37669,"src":"38659:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37689,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"38664:8:109","memberName":"initialA","nodeType":"MemberAccess","referencedDeclaration":34352,"src":"38659:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":37690,"name":"currentA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37682,"src":"38675:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"38659:24:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37692,"nodeType":"ExpressionStatement","src":"38659:24:109"},{"expression":{"id":37697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":37693,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37669,"src":"38689:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37695,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"38694:7:109","memberName":"futureA","nodeType":"MemberAccess","referencedDeclaration":34354,"src":"38689:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":37696,"name":"currentA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37682,"src":"38704:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"38689:23:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37698,"nodeType":"ExpressionStatement","src":"38689:23:109"},{"expression":{"id":37704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":37699,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37669,"src":"38718:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37701,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"38723:12:109","memberName":"initialATime","nodeType":"MemberAccess","referencedDeclaration":34356,"src":"38718:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":37702,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"38738:5:109","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":37703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38744:9:109","memberName":"timestamp","nodeType":"MemberAccess","src":"38738:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"38718:35:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37705,"nodeType":"ExpressionStatement","src":"38718:35:109"},{"expression":{"id":37711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":37706,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37669,"src":"38759:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap storage pointer"}},"id":37708,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"38764:11:109","memberName":"futureATime","nodeType":"MemberAccess","referencedDeclaration":34358,"src":"38759:16:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":37709,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"38778:5:109","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":37710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38784:9:109","memberName":"timestamp","nodeType":"MemberAccess","src":"38778:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"38759:34:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37712,"nodeType":"ExpressionStatement","src":"38759:34:109"},{"eventCall":{"arguments":[{"id":37714,"name":"currentA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37682,"src":"38815:8:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":37715,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"38825:5:109","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":37716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38831:9:109","memberName":"timestamp","nodeType":"MemberAccess","src":"38825:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37713,"name":"StopRampA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34350,"src":"38805:9:109","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":37717,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38805:36:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37718,"nodeType":"EmitStatement","src":"38800:41:109"}]},"documentation":{"id":37666,"nodeType":"StructuredDocumentation","src":"38312:171:109","text":" @notice Stops ramping A immediately. Once this function is called, rampA()\n cannot be called for another 24 hours\n @param self Swap struct to update"},"functionSelector":"e5b994c5","id":37720,"implemented":true,"kind":"function","modifiers":[],"name":"stopRampA","nameLocation":"38495:9:109","nodeType":"FunctionDefinition","parameters":{"id":37670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37669,"mutability":"mutable","name":"self","nameLocation":"38518:4:109","nodeType":"VariableDeclaration","scope":37720,"src":"38505:17:109","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"},"typeName":{"id":37668,"nodeType":"UserDefinedTypeName","pathNode":{"id":37667,"name":"Swap","nameLocations":["38505:4:109"],"nodeType":"IdentifierPath","referencedDeclaration":34379,"src":"38505:4:109"},"referencedDeclaration":34379,"src":"38505:4:109","typeDescriptions":{"typeIdentifier":"t_struct$_Swap_$34379_storage_ptr","typeString":"struct SwapUtilsExternal.Swap"}},"visibility":"internal"}],"src":"38504:19:109"},"returnParameters":{"id":37671,"nodeType":"ParameterList","parameters":[],"src":"38533:0:109"},"scope":37721,"src":"38486:360:109","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":37722,"src":"781:38067:109","usedErrors":[27656,27658,27660]}],"src":"39:38810:109"},"id":109},"contracts/core/connext/libraries/TokenId.sol":{"ast":{"absolutePath":"contracts/core/connext/libraries/TokenId.sol","exportedSymbols":{"TokenId":[37728]},"id":37729,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":37723,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:110"},{"canonicalName":"TokenId","id":37728,"members":[{"constant":false,"id":37725,"mutability":"mutable","name":"domain","nameLocation":"349:6:110","nodeType":"VariableDeclaration","scope":37728,"src":"342:13:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":37724,"name":"uint32","nodeType":"ElementaryTypeName","src":"342:6:110","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":37727,"mutability":"mutable","name":"id","nameLocation":"367:2:110","nodeType":"VariableDeclaration","scope":37728,"src":"359:10:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":37726,"name":"bytes32","nodeType":"ElementaryTypeName","src":"359:7:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"TokenId","nameLocation":"330:7:110","nodeType":"StructDefinition","scope":37729,"src":"323:49:110","visibility":"public"}],"src":"46:327:110"},"id":110},"contracts/core/xreceivers/Unwrapper.sol":{"ast":{"absolutePath":"contracts/core/xreceivers/Unwrapper.sol","exportedSymbols":{"Address":[11484],"IERC20":[10812],"IWrapper":[37755],"IXReceiver":[27349],"ProposedOwnable":[49928],"SafeERC20":[11154],"Unwrapper":[38012]},"id":38013,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":37730,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:111"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":37732,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38013,"sourceUnit":11155,"src":"71:82:111","symbolAliases":[{"foreign":{"id":37731,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11154,"src":"79:9:111","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":37734,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38013,"sourceUnit":10813,"src":"154:70:111","symbolAliases":[{"foreign":{"id":37733,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10812,"src":"162:6:111","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":37736,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38013,"sourceUnit":11485,"src":"225:66:111","symbolAliases":[{"foreign":{"id":37735,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"233:7:111","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/ProposedOwnable.sol","file":"../../shared/ProposedOwnable.sol","id":37738,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38013,"sourceUnit":49929,"src":"293:65:111","symbolAliases":[{"foreign":{"id":37737,"name":"ProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49928,"src":"301:15:111","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IXReceiver.sol","file":"../connext/interfaces/IXReceiver.sol","id":37740,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38013,"sourceUnit":27350,"src":"359:64:111","symbolAliases":[{"foreign":{"id":37739,"name":"IXReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27349,"src":"367:10:111","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IWrapper","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":37755,"linearizedBaseContracts":[37755],"name":"IWrapper","nameLocation":"435:8:111","nodeType":"ContractDefinition","nodes":[{"functionSelector":"2e1a7d4d","id":37745,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"457:8:111","nodeType":"FunctionDefinition","parameters":{"id":37743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37742,"mutability":"mutable","name":"wad","nameLocation":"474:3:111","nodeType":"VariableDeclaration","scope":37745,"src":"466:11:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37741,"name":"uint256","nodeType":"ElementaryTypeName","src":"466:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"465:13:111"},"returnParameters":{"id":37744,"nodeType":"ParameterList","parameters":[],"src":"487:0:111"},"scope":37755,"src":"448:40:111","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"a9059cbb","id":37754,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"501:8:111","nodeType":"FunctionDefinition","parameters":{"id":37750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37747,"mutability":"mutable","name":"dst","nameLocation":"518:3:111","nodeType":"VariableDeclaration","scope":37754,"src":"510:11:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37746,"name":"address","nodeType":"ElementaryTypeName","src":"510:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37749,"mutability":"mutable","name":"wad","nameLocation":"531:3:111","nodeType":"VariableDeclaration","scope":37754,"src":"523:11:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37748,"name":"uint256","nodeType":"ElementaryTypeName","src":"523:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"509:26:111"},"returnParameters":{"id":37753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37752,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37754,"src":"554:4:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":37751,"name":"bool","nodeType":"ElementaryTypeName","src":"554:4:111","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"553:6:111"},"scope":37755,"src":"492:68:111","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":38013,"src":"425:137:111","usedErrors":[]},{"abstract":false,"baseContracts":[{"baseName":{"id":37757,"name":"ProposedOwnable","nameLocations":["1526:15:111"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"1526:15:111"},"id":37758,"nodeType":"InheritanceSpecifier","src":"1526:15:111"},{"baseName":{"id":37759,"name":"IXReceiver","nameLocations":["1543:10:111"],"nodeType":"IdentifierPath","referencedDeclaration":27349,"src":"1543:10:111"},"id":37760,"nodeType":"InheritanceSpecifier","src":"1543:10:111"}],"canonicalName":"Unwrapper","contractDependencies":[],"contractKind":"contract","documentation":{"id":37756,"nodeType":"StructuredDocumentation","src":"564:939:111","text":" @notice A utility contract for unwrapping native tokens at the destination.\n @dev The `xreceive` function of contract may fail in the following ways:\n - unwrapping fails\n - the wrong asset is delivered, and transferring that fails\n - sending the native asset fails\n - the caller is not connext\n - the amount is zero\n - balance of the contract != amount\n In the event of these failures, funds for the crosschain transfer will be sent\n to this contract and will be held here. To rescue them, the owner of this contract\n can call `sweep` or `unwrapAndSweep` to transfer assets from this contract to a\n specified address.\n It is unlikely failures of these types will occur, so ownership of this contract\n should be renounced after a suitable trial period on mainnet.\n @dev Ownership of this contract is governed using the same ProposedOwnable setup\n that is prevalent throughout the system."},"fullyImplemented":true,"id":38012,"linearizedBaseContracts":[38012,27349,49928,50003],"name":"Unwrapper","nameLocation":"1513:9:111","nodeType":"ContractDefinition","nodes":[{"global":false,"id":37764,"libraryName":{"id":37761,"name":"SafeERC20","nameLocations":["1606:9:111"],"nodeType":"IdentifierPath","referencedDeclaration":11154,"src":"1606:9:111"},"nodeType":"UsingForDirective","src":"1600:27:111","typeName":{"id":37763,"nodeType":"UserDefinedTypeName","pathNode":{"id":37762,"name":"IERC20","nameLocations":["1620:6:111"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"1620:6:111"},"referencedDeclaration":10812,"src":"1620:6:111","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}}},{"anonymous":false,"documentation":{"id":37765,"nodeType":"StructuredDocumentation","src":"1670:156:111","text":" @notice Emitted if the wrong wrapper asset is sent.\n @param recipient - The target recipient address.\n @param asset - The asset sent."},"eventSelector":"9f79eedfea1da16b88bd43866c5385861173a9895ac74e1628662f7f2192962e","id":37771,"name":"WrongAsset","nameLocation":"1835:10:111","nodeType":"EventDefinition","parameters":{"id":37770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37767,"indexed":false,"mutability":"mutable","name":"recipient","nameLocation":"1854:9:111","nodeType":"VariableDeclaration","scope":37771,"src":"1846:17:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37766,"name":"address","nodeType":"ElementaryTypeName","src":"1846:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37769,"indexed":false,"mutability":"mutable","name":"asset","nameLocation":"1873:5:111","nodeType":"VariableDeclaration","scope":37771,"src":"1865:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37768,"name":"address","nodeType":"ElementaryTypeName","src":"1865:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1845:34:111"},"src":"1829:51:111"},{"anonymous":false,"documentation":{"id":37772,"nodeType":"StructuredDocumentation","src":"1884:209:111","text":" @notice Emitted when funds are sent from this contract\n @param recipient - The target recipient address.\n @param asset - The asset sent.\n @param amount - The amount of the asset sent"},"eventSelector":"91ebf95f2932ae1bb84918555319ba9cf24fd2359b03932337af5599f2553fa9","id":37780,"name":"FundsDelivered","nameLocation":"2102:14:111","nodeType":"EventDefinition","parameters":{"id":37779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37774,"indexed":false,"mutability":"mutable","name":"recipient","nameLocation":"2125:9:111","nodeType":"VariableDeclaration","scope":37780,"src":"2117:17:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37773,"name":"address","nodeType":"ElementaryTypeName","src":"2117:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37776,"indexed":false,"mutability":"mutable","name":"asset","nameLocation":"2144:5:111","nodeType":"VariableDeclaration","scope":37780,"src":"2136:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37775,"name":"address","nodeType":"ElementaryTypeName","src":"2136:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37778,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2159:6:111","nodeType":"VariableDeclaration","scope":37780,"src":"2151:14:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37777,"name":"uint256","nodeType":"ElementaryTypeName","src":"2151:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2116:50:111"},"src":"2096:71:111"},{"constant":false,"documentation":{"id":37781,"nodeType":"StructuredDocumentation","src":"2214:105:111","text":" @notice Connext (diamond proxy) address, the only address permissioned to call `xReceive`."},"functionSelector":"92f75cb2","id":37783,"mutability":"immutable","name":"CONNEXT","nameLocation":"2347:7:111","nodeType":"VariableDeclaration","scope":38012,"src":"2322:32:111","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37782,"name":"address","nodeType":"ElementaryTypeName","src":"2322:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"documentation":{"id":37784,"nodeType":"StructuredDocumentation","src":"2359:107:111","text":" @notice The wrapper contract that this contract will always use for unwrapping native token."},"functionSelector":"e1eb13c1","id":37787,"mutability":"immutable","name":"WRAPPER","nameLocation":"2495:7:111","nodeType":"VariableDeclaration","scope":38012,"src":"2469:33:111","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrapper_$37755","typeString":"contract IWrapper"},"typeName":{"id":37786,"nodeType":"UserDefinedTypeName","pathNode":{"id":37785,"name":"IWrapper","nameLocations":["2469:8:111"],"nodeType":"IdentifierPath","referencedDeclaration":37755,"src":"2469:8:111"},"referencedDeclaration":37755,"src":"2469:8:111","typeDescriptions":{"typeIdentifier":"t_contract$_IWrapper_$37755","typeString":"contract IWrapper"}},"visibility":"public"},{"body":{"id":37799,"nodeType":"Block","src":"2661:68:111","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":37794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":37791,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2675:3:111","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":37792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2679:6:111","memberName":"sender","nodeType":"MemberAccess","src":"2675:10:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":37793,"name":"CONNEXT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37783,"src":"2689:7:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2675:21:111","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"756e777261703a2021636f6e6e657874","id":37795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2698:18:111","typeDescriptions":{"typeIdentifier":"t_stringliteral_85be980d4507f0657beebd307f4d94376373ccb3a8c00b1d7f4054754d3deb94","typeString":"literal_string \"unwrap: !connext\""},"value":"unwrap: !connext"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_85be980d4507f0657beebd307f4d94376373ccb3a8c00b1d7f4054754d3deb94","typeString":"literal_string \"unwrap: !connext\""}],"id":37790,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2667:7:111","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2667:50:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37797,"nodeType":"ExpressionStatement","src":"2667:50:111"},{"id":37798,"nodeType":"PlaceholderStatement","src":"2723:1:111"}]},"documentation":{"id":37788,"nodeType":"StructuredDocumentation","src":"2552:83:111","text":" @notice Ensure caller is only the designated CONNEXT bridge address."},"id":37800,"name":"onlyConnext","nameLocation":"2647:11:111","nodeType":"ModifierDefinition","parameters":{"id":37789,"nodeType":"ParameterList","parameters":[],"src":"2658:2:111"},"src":"2638:91:111","virtual":false,"visibility":"internal"},{"body":{"id":37825,"nodeType":"Block","src":"2925:88:111","statements":[{"expression":{"arguments":[{"expression":{"id":37811,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2941:3:111","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":37812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2945:6:111","memberName":"sender","nodeType":"MemberAccess","src":"2941:10:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":37810,"name":"_setOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49908,"src":"2931:9:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":37813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2931:21:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37814,"nodeType":"ExpressionStatement","src":"2931:21:111"},{"expression":{"id":37819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37815,"name":"WRAPPER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37787,"src":"2958:7:111","typeDescriptions":{"typeIdentifier":"t_contract$_IWrapper_$37755","typeString":"contract IWrapper"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":37817,"name":"wrapper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37805,"src":"2977:7:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":37816,"name":"IWrapper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37755,"src":"2968:8:111","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrapper_$37755_$","typeString":"type(contract IWrapper)"}},"id":37818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2968:17:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrapper_$37755","typeString":"contract IWrapper"}},"src":"2958:27:111","typeDescriptions":{"typeIdentifier":"t_contract$_IWrapper_$37755","typeString":"contract IWrapper"}},"id":37820,"nodeType":"ExpressionStatement","src":"2958:27:111"},{"expression":{"id":37823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37821,"name":"CONNEXT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37783,"src":"2991:7:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":37822,"name":"connext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37803,"src":"3001:7:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2991:17:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37824,"nodeType":"ExpressionStatement","src":"2991:17:111"}]},"documentation":{"id":37801,"nodeType":"StructuredDocumentation","src":"2777:81:111","text":" @dev The initial owner is set to the `msg.sender` of the contract."},"id":37826,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":37808,"kind":"baseConstructorSpecifier","modifierName":{"id":37807,"name":"ProposedOwnable","nameLocations":["2907:15:111"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"2907:15:111"},"nodeType":"ModifierInvocation","src":"2907:17:111"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":37806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37803,"mutability":"mutable","name":"connext","nameLocation":"2881:7:111","nodeType":"VariableDeclaration","scope":37826,"src":"2873:15:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37802,"name":"address","nodeType":"ElementaryTypeName","src":"2873:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37805,"mutability":"mutable","name":"wrapper","nameLocation":"2898:7:111","nodeType":"VariableDeclaration","scope":37826,"src":"2890:15:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37804,"name":"address","nodeType":"ElementaryTypeName","src":"2890:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2872:34:111"},"returnParameters":{"id":37809,"nodeType":"ParameterList","parameters":[],"src":"2925:0:111"},"scope":38012,"src":"2861:152:111","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":37851,"nodeType":"Block","src":"3969:197:111","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37839,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37833,"src":"4061:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":37840,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4071:1:111","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4061:11:111","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"73776565703a2021616d6f756e74","id":37842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4074:16:111","typeDescriptions":{"typeIdentifier":"t_stringliteral_fb99164e55f7b3308ec747cacc565501aaa56f31de542fdcfd357ae2932ce29e","typeString":"literal_string \"sweep: !amount\""},"value":"sweep: !amount"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fb99164e55f7b3308ec747cacc565501aaa56f31de542fdcfd357ae2932ce29e","typeString":"literal_string \"sweep: !amount\""}],"id":37838,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4053:7:111","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4053:38:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37844,"nodeType":"ExpressionStatement","src":"4053:38:111"},{"expression":{"arguments":[{"id":37846,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37829,"src":"4136:9:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37847,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37831,"src":"4147:5:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37848,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37833,"src":"4154:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37845,"name":"_sweep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38011,"src":"4129:6:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":37849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4129:32:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37850,"nodeType":"ExpressionStatement","src":"4129:32:111"}]},"documentation":{"id":37827,"nodeType":"StructuredDocumentation","src":"3065:803:111","text":" @notice Sweeps the provided token from this address to a designated recipient.\n @dev Only the owner of this contract can call this function.\n @dev Funds will end up on this contract IFF the external call on the Connext contract\n fails and the transfer is reconciled. The `xreceive` function can fail in the following\n cases:\n - unwrapping fails\n - transferring the asset fails\n - `connext` is not the caller (should not sweep in this case)\n - amount is zero (should not sweep in this case).\n It is left to the admin to determine the proper amounts to sweep.\n @param recipient The address to send the funds to\n @param asset The asset to send from the contract to recipient\n @param amount Amount of asset to sweep from contract"},"functionSelector":"62c06767","id":37852,"implemented":true,"kind":"function","modifiers":[{"id":37836,"kind":"modifierInvocation","modifierName":{"id":37835,"name":"onlyOwner","nameLocations":["3959:9:111"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"3959:9:111"},"nodeType":"ModifierInvocation","src":"3959:9:111"}],"name":"sweep","nameLocation":"3880:5:111","nodeType":"FunctionDefinition","parameters":{"id":37834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37829,"mutability":"mutable","name":"recipient","nameLocation":"3899:9:111","nodeType":"VariableDeclaration","scope":37852,"src":"3891:17:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37828,"name":"address","nodeType":"ElementaryTypeName","src":"3891:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37831,"mutability":"mutable","name":"asset","nameLocation":"3922:5:111","nodeType":"VariableDeclaration","scope":37852,"src":"3914:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37830,"name":"address","nodeType":"ElementaryTypeName","src":"3914:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37833,"mutability":"mutable","name":"amount","nameLocation":"3941:6:111","nodeType":"VariableDeclaration","scope":37852,"src":"3933:14:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37832,"name":"uint256","nodeType":"ElementaryTypeName","src":"3933:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3885:66:111"},"returnParameters":{"id":37837,"nodeType":"ParameterList","parameters":[],"src":"3969:0:111"},"scope":38012,"src":"3871:295:111","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":37884,"nodeType":"Block","src":"4997:271:111","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37863,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37857,"src":"5089:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":37864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5099:1:111","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5089:11:111","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"756e77726170416e6453776565703a2021616d6f756e74","id":37866,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5102:25:111","typeDescriptions":{"typeIdentifier":"t_stringliteral_563eccbd29ff954ff175621bfcdb95dc0390d7ad04bfb287ad7ab7da8b297fb5","typeString":"literal_string \"unwrapAndSweep: !amount\""},"value":"unwrapAndSweep: !amount"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_563eccbd29ff954ff175621bfcdb95dc0390d7ad04bfb287ad7ab7da8b297fb5","typeString":"literal_string \"unwrapAndSweep: !amount\""}],"id":37862,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5081:7:111","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5081:47:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37868,"nodeType":"ExpressionStatement","src":"5081:47:111"},{"expression":{"arguments":[{"id":37872,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37857,"src":"5181:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":37869,"name":"WRAPPER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37787,"src":"5164:7:111","typeDescriptions":{"typeIdentifier":"t_contract$_IWrapper_$37755","typeString":"contract IWrapper"}},"id":37871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5172:8:111","memberName":"withdraw","nodeType":"MemberAccess","referencedDeclaration":37745,"src":"5164:16:111","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":37873,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5164:24:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37874,"nodeType":"ExpressionStatement","src":"5164:24:111"},{"expression":{"arguments":[{"id":37876,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37855,"src":"5233:9:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":37879,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5252:1:111","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":37878,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5244:7:111","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37877,"name":"address","nodeType":"ElementaryTypeName","src":"5244:7:111","typeDescriptions":{}}},"id":37880,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5244:10:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37881,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37857,"src":"5256:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37875,"name":"_sweep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38011,"src":"5226:6:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":37882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5226:37:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37883,"nodeType":"ExpressionStatement","src":"5226:37:111"}]},"documentation":{"id":37853,"nodeType":"StructuredDocumentation","src":"4170:748:111","text":" @notice Unwraps and sweeps the provided token from this address to a designated recipient.\n @dev Only the owner of this contract can call this function.\n @dev Funds will end up on this contract IFF the external call on the Connext contract\n fails and the transfer is reconciled. The `xreceive` function can fail in the following\n cases:\n - unwrapping fails\n - transferring the asset fails\n - `connext` is not the caller (should not sweep in this case)\n - amount is zero (should not sweep in this case).\n It is left to the admin to determine the proper amounts to sweep.\n @param recipient The address to send the funds to\n @param amount Amount of asset to sweep from contract"},"functionSelector":"e03720c0","id":37885,"implemented":true,"kind":"function","modifiers":[{"id":37860,"kind":"modifierInvocation","modifierName":{"id":37859,"name":"onlyOwner","nameLocations":["4987:9:111"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"4987:9:111"},"nodeType":"ModifierInvocation","src":"4987:9:111"}],"name":"unwrapAndSweep","nameLocation":"4930:14:111","nodeType":"FunctionDefinition","parameters":{"id":37858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37855,"mutability":"mutable","name":"recipient","nameLocation":"4953:9:111","nodeType":"VariableDeclaration","scope":37885,"src":"4945:17:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37854,"name":"address","nodeType":"ElementaryTypeName","src":"4945:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37857,"mutability":"mutable","name":"amount","nameLocation":"4972:6:111","nodeType":"VariableDeclaration","scope":37885,"src":"4964:14:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37856,"name":"uint256","nodeType":"ElementaryTypeName","src":"4964:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4944:35:111"},"returnParameters":{"id":37861,"nodeType":"ParameterList","parameters":[],"src":"4997:0:111"},"scope":38012,"src":"4921:347:111","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[27348],"body":{"id":37961,"nodeType":"Block","src":"6661:828:111","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37906,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37890,"src":"6753:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":37907,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6763:1:111","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6753:11:111","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"756e777261703a2021616d6f756e74","id":37909,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6766:17:111","typeDescriptions":{"typeIdentifier":"t_stringliteral_cdadfa8ff838c2b763346808853241e42c0873538a85ca34705f70db22f5030b","typeString":"literal_string \"unwrap: !amount\""},"value":"unwrap: !amount"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cdadfa8ff838c2b763346808853241e42c0873538a85ca34705f70db22f5030b","typeString":"literal_string \"unwrap: !amount\""}],"id":37905,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6745:7:111","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6745:39:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37911,"nodeType":"ExpressionStatement","src":"6745:39:111"},{"assignments":[37913],"declarations":[{"constant":false,"id":37913,"mutability":"mutable","name":"recipient","nameLocation":"6934:9:111","nodeType":"VariableDeclaration","scope":37961,"src":"6926:17:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37912,"name":"address","nodeType":"ElementaryTypeName","src":"6926:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":37921,"initialValue":{"arguments":[{"id":37916,"name":"callData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37898,"src":"6957:8:111","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":37918,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6968:7:111","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37917,"name":"address","nodeType":"ElementaryTypeName","src":"6968:7:111","typeDescriptions":{}}}],"id":37919,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6967:9:111","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}],"expression":{"id":37914,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6946:3:111","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":37915,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6950:6:111","memberName":"decode","nodeType":"MemberAccess","src":"6946:10:111","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":37920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6946:31:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"VariableDeclarationStatement","src":"6926:51:111"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":37927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37922,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37892,"src":"7058:5:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":37925,"name":"WRAPPER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37787,"src":"7075:7:111","typeDescriptions":{"typeIdentifier":"t_contract$_IWrapper_$37755","typeString":"contract IWrapper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWrapper_$37755","typeString":"contract IWrapper"}],"id":37924,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7067:7:111","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37923,"name":"address","nodeType":"ElementaryTypeName","src":"7067:7:111","typeDescriptions":{}}},"id":37926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7067:16:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7058:25:111","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37945,"nodeType":"IfStatement","src":"7054:236:111","trueBody":{"id":37944,"nodeType":"Block","src":"7085:205:111","statements":[{"eventCall":{"arguments":[{"id":37929,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37913,"src":"7109:9:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37930,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37892,"src":"7120:5:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":37928,"name":"WrongAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37771,"src":"7098:10:111","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":37931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7098:28:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37932,"nodeType":"EmitStatement","src":"7093:33:111"},{"expression":{"arguments":[{"id":37934,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37913,"src":"7234:9:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37935,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37892,"src":"7245:5:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37936,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37890,"src":"7252:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37933,"name":"_sweep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38011,"src":"7227:6:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":37937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7227:32:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37938,"nodeType":"ExpressionStatement","src":"7227:32:111"},{"expression":{"arguments":[{"hexValue":"","id":37941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7280:2:111","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":37940,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7274:5:111","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":37939,"name":"bytes","nodeType":"ElementaryTypeName","src":"7274:5:111","typeDescriptions":{}}},"id":37942,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7274:9:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":37904,"id":37943,"nodeType":"Return","src":"7267:16:111"}]}},{"expression":{"arguments":[{"id":37949,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37890,"src":"7408:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":37946,"name":"WRAPPER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37787,"src":"7391:7:111","typeDescriptions":{"typeIdentifier":"t_contract$_IWrapper_$37755","typeString":"contract IWrapper"}},"id":37948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7399:8:111","memberName":"withdraw","nodeType":"MemberAccess","referencedDeclaration":37745,"src":"7391:16:111","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":37950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7391:24:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37951,"nodeType":"ExpressionStatement","src":"7391:24:111"},{"expression":{"arguments":[{"id":37953,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37913,"src":"7454:9:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":37956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7473:1:111","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":37955,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7465:7:111","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37954,"name":"address","nodeType":"ElementaryTypeName","src":"7465:7:111","typeDescriptions":{}}},"id":37957,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7465:10:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37958,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37890,"src":"7477:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37952,"name":"_sweep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38011,"src":"7447:6:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":37959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7447:37:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37960,"nodeType":"ExpressionStatement","src":"7447:37:111"}]},"documentation":{"id":37886,"nodeType":"StructuredDocumentation","src":"5321:1120:111","text":" @notice xReceive implementation for receiving cross-chain calls from Connext.\n @dev We mostly ignore `originSender` argument: this could be a contract or EOA, but our\n recipient should be specified in our `callData`! We only fallback to using `originSender` IFF\n recipient argument is missing.\n @dev If unwrapping (i.e. `withdraw`) fails, will emit UnwrappingFailed event! We will attempt\n to transfer the wrapped tokens to the\n @param amount - The amount to transfer. Should NOT be 0, or this call will revert.\n @param asset - This *should be* the wrapper contract address, an ERC20 token approved by the\n Connext bridge. IFF this does NOT match the WRAPPER contract address stored in this contract,\n we'll try to `IERC20.transfer` the assets to the intended recipient.\n @param callData - Should be a tuple of just `(address)`. The address is the intended\n recipient of the unwrapped native tokens. Whether it's ether or wether (i.e. whether it's\n wrapped native tokens or native tokens) depends on whether we succeeded in the unwrapping\n process."},"functionSelector":"fd614f41","id":37962,"implemented":true,"kind":"function","modifiers":[{"id":37901,"kind":"modifierInvocation","modifierName":{"id":37900,"name":"onlyConnext","nameLocations":["6626:11:111"],"nodeType":"IdentifierPath","referencedDeclaration":37800,"src":"6626:11:111"},"nodeType":"ModifierInvocation","src":"6626:11:111"}],"name":"xReceive","nameLocation":"6453:8:111","nodeType":"FunctionDefinition","parameters":{"id":37899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37888,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37962,"src":"6467:7:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":37887,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6467:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":37890,"mutability":"mutable","name":"amount","nameLocation":"6502:6:111","nodeType":"VariableDeclaration","scope":37962,"src":"6494:14:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37889,"name":"uint256","nodeType":"ElementaryTypeName","src":"6494:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":37892,"mutability":"mutable","name":"asset","nameLocation":"6522:5:111","nodeType":"VariableDeclaration","scope":37962,"src":"6514:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37891,"name":"address","nodeType":"ElementaryTypeName","src":"6514:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37894,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37962,"src":"6533:7:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37893,"name":"address","nodeType":"ElementaryTypeName","src":"6533:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37896,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37962,"src":"6562:6:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":37895,"name":"uint32","nodeType":"ElementaryTypeName","src":"6562:6:111","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":37898,"mutability":"mutable","name":"callData","nameLocation":"6604:8:111","nodeType":"VariableDeclaration","scope":37962,"src":"6591:21:111","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":37897,"name":"bytes","nodeType":"ElementaryTypeName","src":"6591:5:111","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6461:155:111"},"returnParameters":{"id":37904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37903,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37962,"src":"6647:12:111","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":37902,"name":"bytes","nodeType":"ElementaryTypeName","src":"6647:5:111","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6646:14:111"},"scope":38012,"src":"6444:1045:111","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":37966,"nodeType":"Block","src":"7612:2:111","statements":[]},"documentation":{"id":37963,"nodeType":"StructuredDocumentation","src":"7493:89:111","text":" @notice Fallback function so this contract can receive the funds from WETH"},"id":37967,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":37964,"nodeType":"ParameterList","parameters":[],"src":"7592:2:111"},"returnParameters":{"id":37965,"nodeType":"ParameterList","parameters":[],"src":"7612:0:111"},"scope":38012,"src":"7585:29:111","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":38010,"nodeType":"Block","src":"8111:208:111","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":37982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37977,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37972,"src":"8121:5:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":37980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8138:1:111","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":37979,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8130:7:111","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37978,"name":"address","nodeType":"ElementaryTypeName","src":"8130:7:111","typeDescriptions":{}}},"id":37981,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8130:10:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8121:19:111","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":38002,"nodeType":"Block","src":"8208:56:111","statements":[{"expression":{"arguments":[{"id":37998,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37970,"src":"8239:9:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37999,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37974,"src":"8250:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":37995,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37972,"src":"8223:5:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":37994,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10812,"src":"8216:6:111","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10812_$","typeString":"type(contract IERC20)"}},"id":37996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8216:13:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10812","typeString":"contract IERC20"}},"id":37997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8230:8:111","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":10779,"src":"8216:22:111","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":38000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8216:41:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38001,"nodeType":"ExpressionStatement","src":"8216:41:111"}]},"id":38003,"nodeType":"IfStatement","src":"8117:147:111","trueBody":{"id":37993,"nodeType":"Block","src":"8142:60:111","statements":[{"expression":{"arguments":[{"arguments":[{"id":37988,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37970,"src":"8176:9:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":37987,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8168:8:111","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":37986,"name":"address","nodeType":"ElementaryTypeName","src":"8168:8:111","stateMutability":"payable","typeDescriptions":{}}},"id":37989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8168:18:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":37990,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37974,"src":"8188:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":37983,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"8150:7:111","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11484_$","typeString":"type(library Address)"}},"id":37985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8158:9:111","memberName":"sendValue","nodeType":"MemberAccess","referencedDeclaration":11206,"src":"8150:17:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$","typeString":"function (address payable,uint256)"}},"id":37991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8150:45:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37992,"nodeType":"ExpressionStatement","src":"8150:45:111"}]}},{"eventCall":{"arguments":[{"id":38005,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37970,"src":"8289:9:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":38006,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37972,"src":"8300:5:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":38007,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37974,"src":"8307:6:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38004,"name":"FundsDelivered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37780,"src":"8274:14:111","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":38008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8274:40:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38009,"nodeType":"EmitStatement","src":"8269:45:111"}]},"documentation":{"id":37968,"nodeType":"StructuredDocumentation","src":"7669:348:111","text":" @notice Sweeps the provided token from this address to a designated recipient.\n @dev Emits the `FundsDelivered` event\n @param recipient The address to send the funds to\n @param asset The asset (or address(0) for native) to send from the contract to recipient\n @param amount Amount of asset to sweep from contract"},"id":38011,"implemented":true,"kind":"function","modifiers":[],"name":"_sweep","nameLocation":"8029:6:111","nodeType":"FunctionDefinition","parameters":{"id":37975,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37970,"mutability":"mutable","name":"recipient","nameLocation":"8049:9:111","nodeType":"VariableDeclaration","scope":38011,"src":"8041:17:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37969,"name":"address","nodeType":"ElementaryTypeName","src":"8041:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37972,"mutability":"mutable","name":"asset","nameLocation":"8072:5:111","nodeType":"VariableDeclaration","scope":38011,"src":"8064:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37971,"name":"address","nodeType":"ElementaryTypeName","src":"8064:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37974,"mutability":"mutable","name":"amount","nameLocation":"8091:6:111","nodeType":"VariableDeclaration","scope":38011,"src":"8083:14:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37973,"name":"uint256","nodeType":"ElementaryTypeName","src":"8083:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8035:66:111"},"returnParameters":{"id":37976,"nodeType":"ParameterList","parameters":[],"src":"8111:0:111"},"scope":38012,"src":"8020:299:111","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":38013,"src":"1504:6817:111","usedErrors":[49697,49699,49701,49703,49705,49707,49709]}],"src":"46:8276:111"},"id":111},"contracts/messaging/MerkleTreeManager.sol":{"ast":{"absolutePath":"contracts/messaging/MerkleTreeManager.sol","exportedSymbols":{"MerkleLib":[48999],"MerkleTreeManager":[38317],"ProposedOwnableUpgradeable":[49965]},"id":38318,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":38014,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:112"},{"absolutePath":"contracts/shared/ProposedOwnableUpgradeable.sol","file":"../shared/ProposedOwnableUpgradeable.sol","id":38016,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38318,"sourceUnit":49966,"src":"71:84:112","symbolAliases":[{"foreign":{"id":38015,"name":"ProposedOwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49965,"src":"79:26:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/libraries/MerkleLib.sol","file":"./libraries/MerkleLib.sol","id":38018,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38318,"sourceUnit":49000,"src":"156:52:112","symbolAliases":[{"foreign":{"id":38017,"name":"MerkleLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48999,"src":"164:9:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":38020,"name":"ProposedOwnableUpgradeable","nameLocations":["490:26:112"],"nodeType":"IdentifierPath","referencedDeclaration":49965,"src":"490:26:112"},"id":38021,"nodeType":"InheritanceSpecifier","src":"490:26:112"}],"canonicalName":"MerkleTreeManager","contractDependencies":[],"contractKind":"contract","documentation":{"id":38019,"nodeType":"StructuredDocumentation","src":"210:249:112","text":" @title MerkleTreeManager\n @notice Contains a Merkle tree instance and exposes read/write functions for the tree.\n @dev On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector."},"fullyImplemented":true,"id":38317,"linearizedBaseContracts":[38317,49965,49928,50003,8238],"name":"MerkleTreeManager","nameLocation":"469:17:112","nodeType":"ContractDefinition","nodes":[{"errorSelector":"18234a5a","id":38023,"name":"MerkleTreeManager__setArborist_zeroAddress","nameLocation":"570:42:112","nodeType":"ErrorDefinition","parameters":{"id":38022,"nodeType":"ParameterList","parameters":[],"src":"612:2:112"},"src":"564:51:112"},{"errorSelector":"c0dd2af6","id":38025,"name":"MerkleTreeManager__setArborist_alreadyArborist","nameLocation":"624:46:112","nodeType":"ErrorDefinition","parameters":{"id":38024,"nodeType":"ParameterList","parameters":[],"src":"670:2:112"},"src":"618:55:112"},{"anonymous":false,"eventSelector":"f2fa31e21376edb31995720340ba00a41a12a7c8744a9bde552660121f4b7771","id":38031,"name":"ArboristUpdated","nameLocation":"722:15:112","nodeType":"EventDefinition","parameters":{"id":38030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38027,"indexed":false,"mutability":"mutable","name":"previous","nameLocation":"746:8:112","nodeType":"VariableDeclaration","scope":38031,"src":"738:16:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38026,"name":"address","nodeType":"ElementaryTypeName","src":"738:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38029,"indexed":false,"mutability":"mutable","name":"updated","nameLocation":"764:7:112","nodeType":"VariableDeclaration","scope":38031,"src":"756:15:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38028,"name":"address","nodeType":"ElementaryTypeName","src":"756:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"737:35:112"},"src":"716:57:112"},{"anonymous":false,"eventSelector":"d50e83984b64a106ac2ee6314d689ec4d2a656d5ece6d94c585796944b52240c","id":38039,"name":"LeafInserted","nameLocation":"783:12:112","nodeType":"EventDefinition","parameters":{"id":38038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38033,"indexed":false,"mutability":"mutable","name":"root","nameLocation":"804:4:112","nodeType":"VariableDeclaration","scope":38039,"src":"796:12:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38032,"name":"bytes32","nodeType":"ElementaryTypeName","src":"796:7:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":38035,"indexed":false,"mutability":"mutable","name":"count","nameLocation":"818:5:112","nodeType":"VariableDeclaration","scope":38039,"src":"810:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38034,"name":"uint256","nodeType":"ElementaryTypeName","src":"810:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38037,"indexed":false,"mutability":"mutable","name":"leaf","nameLocation":"833:4:112","nodeType":"VariableDeclaration","scope":38039,"src":"825:12:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38036,"name":"bytes32","nodeType":"ElementaryTypeName","src":"825:7:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"795:43:112"},"src":"777:62:112"},{"anonymous":false,"eventSelector":"3ef8438c07c6b4b67e70eace906a07e9b294c2f0066803f58e705567e1aa4f1b","id":38048,"name":"LeavesInserted","nameLocation":"849:14:112","nodeType":"EventDefinition","parameters":{"id":38047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38041,"indexed":false,"mutability":"mutable","name":"root","nameLocation":"872:4:112","nodeType":"VariableDeclaration","scope":38048,"src":"864:12:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38040,"name":"bytes32","nodeType":"ElementaryTypeName","src":"864:7:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":38043,"indexed":false,"mutability":"mutable","name":"count","nameLocation":"886:5:112","nodeType":"VariableDeclaration","scope":38048,"src":"878:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38042,"name":"uint256","nodeType":"ElementaryTypeName","src":"878:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38046,"indexed":false,"mutability":"mutable","name":"leaves","nameLocation":"903:6:112","nodeType":"VariableDeclaration","scope":38048,"src":"893:16:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":38044,"name":"bytes32","nodeType":"ElementaryTypeName","src":"893:7:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":38045,"nodeType":"ArrayTypeName","src":"893:9:112","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"863:47:112"},"src":"843:68:112"},{"global":false,"id":38052,"libraryName":{"id":38049,"name":"MerkleLib","nameLocations":["963:9:112"],"nodeType":"IdentifierPath","referencedDeclaration":48999,"src":"963:9:112"},"nodeType":"UsingForDirective","src":"957:35:112","typeName":{"id":38051,"nodeType":"UserDefinedTypeName","pathNode":{"id":38050,"name":"MerkleLib.Tree","nameLocations":["977:9:112","987:4:112"],"nodeType":"IdentifierPath","referencedDeclaration":48880,"src":"977:14:112"},"referencedDeclaration":48880,"src":"977:14:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage_ptr","typeString":"struct MerkleLib.Tree"}}},{"constant":false,"documentation":{"id":38053,"nodeType":"StructuredDocumentation","src":"1043:146:112","text":" @notice Core data structure with which this contract is tasked with keeping custody.\n Writable only by the designated arborist."},"functionSelector":"fd54b228","id":38056,"mutability":"mutable","name":"tree","nameLocation":"1214:4:112","nodeType":"VariableDeclaration","scope":38317,"src":"1192:26:112","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage","typeString":"struct MerkleLib.Tree"},"typeName":{"id":38055,"nodeType":"UserDefinedTypeName","pathNode":{"id":38054,"name":"MerkleLib.Tree","nameLocations":["1192:9:112","1202:4:112"],"nodeType":"IdentifierPath","referencedDeclaration":48880,"src":"1192:14:112"},"referencedDeclaration":48880,"src":"1192:14:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage_ptr","typeString":"struct MerkleLib.Tree"}},"visibility":"public"},{"constant":false,"documentation":{"id":38057,"nodeType":"StructuredDocumentation","src":"1223:181:112","text":" @notice The arborist contract that has permission to write to this tree.\n @dev This could be the root manager contract or a spoke connector contract, for example."},"functionSelector":"31d0913c","id":38059,"mutability":"mutable","name":"arborist","nameLocation":"1422:8:112","nodeType":"VariableDeclaration","scope":38317,"src":"1407:23:112","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38058,"name":"address","nodeType":"ElementaryTypeName","src":"1407:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"body":{"id":38070,"nodeType":"Block","src":"1501:62:112","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":38065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38062,"name":"arborist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38059,"src":"1515:8:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":38063,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1527:3:112","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":38064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1531:6:112","memberName":"sender","nodeType":"MemberAccess","src":"1527:10:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1515:22:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216172626f72697374","id":38066,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1539:11:112","typeDescriptions":{"typeIdentifier":"t_stringliteral_144b471da8d21e2e7d9e3c76d3f72ab61efa53056eb4b5716c6251d10014587c","typeString":"literal_string \"!arborist\""},"value":"!arborist"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_144b471da8d21e2e7d9e3c76d3f72ab61efa53056eb4b5716c6251d10014587c","typeString":"literal_string \"!arborist\""}],"id":38061,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1507:7:112","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":38067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1507:44:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38068,"nodeType":"ExpressionStatement","src":"1507:44:112"},{"id":38069,"nodeType":"PlaceholderStatement","src":"1557:1:112"}]},"id":38071,"name":"onlyArborist","nameLocation":"1486:12:112","nodeType":"ModifierDefinition","parameters":{"id":38060,"nodeType":"ParameterList","parameters":[],"src":"1498:2:112"},"src":"1477:86:112","virtual":false,"visibility":"internal"},{"body":{"id":38082,"nodeType":"Block","src":"1719:29:112","statements":[{"expression":{"expression":{"id":38079,"name":"tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38056,"src":"1732:4:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage","typeString":"struct MerkleLib.Tree storage ref"}},"id":38080,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1737:6:112","memberName":"branch","nodeType":"MemberAccess","referencedDeclaration":48877,"src":"1732:11:112","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_storage","typeString":"bytes32[32] storage ref"}},"functionReturnParameters":38078,"id":38081,"nodeType":"Return","src":"1725:18:112"}]},"documentation":{"id":38072,"nodeType":"StructuredDocumentation","src":"1607:50:112","text":" @notice Returns the current branch."},"functionSelector":"4b72d0d4","id":38083,"implemented":true,"kind":"function","modifiers":[],"name":"branch","nameLocation":"1669:6:112","nodeType":"FunctionDefinition","parameters":{"id":38073,"nodeType":"ParameterList","parameters":[],"src":"1675:2:112"},"returnParameters":{"id":38078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38077,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38083,"src":"1699:18:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_memory_ptr","typeString":"bytes32[32]"},"typeName":{"baseType":{"id":38074,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1699:7:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":38076,"length":{"hexValue":"3332","id":38075,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1707:2:112","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"nodeType":"ArrayTypeName","src":"1699:11:112","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_storage_ptr","typeString":"bytes32[32]"}},"visibility":"internal"}],"src":"1698:20:112"},"scope":38317,"src":"1660:88:112","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":38093,"nodeType":"Block","src":"1864:29:112","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":38089,"name":"tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38056,"src":"1877:4:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage","typeString":"struct MerkleLib.Tree storage ref"}},"id":38090,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1882:4:112","memberName":"root","nodeType":"MemberAccess","referencedDeclaration":48982,"src":"1877:9:112","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Tree_$48880_storage_ptr_$returns$_t_bytes32_$bound_to$_t_struct$_Tree_$48880_storage_ptr_$","typeString":"function (struct MerkleLib.Tree storage pointer) view returns (bytes32)"}},"id":38091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1877:11:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":38088,"id":38092,"nodeType":"Return","src":"1870:18:112"}]},"documentation":{"id":38084,"nodeType":"StructuredDocumentation","src":"1752:63:112","text":" @notice Calculates and returns the current root."},"functionSelector":"ebf0c717","id":38094,"implemented":true,"kind":"function","modifiers":[],"name":"root","nameLocation":"1827:4:112","nodeType":"FunctionDefinition","parameters":{"id":38085,"nodeType":"ParameterList","parameters":[],"src":"1831:2:112"},"returnParameters":{"id":38088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38087,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38094,"src":"1855:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38086,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1855:7:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1854:9:112"},"scope":38317,"src":"1818:75:112","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":38103,"nodeType":"Block","src":"2036:28:112","statements":[{"expression":{"expression":{"id":38100,"name":"tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38056,"src":"2049:4:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage","typeString":"struct MerkleLib.Tree storage ref"}},"id":38101,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2054:5:112","memberName":"count","nodeType":"MemberAccess","referencedDeclaration":48879,"src":"2049:10:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":38099,"id":38102,"nodeType":"Return","src":"2042:17:112"}]},"documentation":{"id":38095,"nodeType":"StructuredDocumentation","src":"1897:89:112","text":" @notice Returns the number of inserted leaves in the tree (current index)."},"functionSelector":"06661abd","id":38104,"implemented":true,"kind":"function","modifiers":[],"name":"count","nameLocation":"1998:5:112","nodeType":"FunctionDefinition","parameters":{"id":38096,"nodeType":"ParameterList","parameters":[],"src":"2003:2:112"},"returnParameters":{"id":38099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38098,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38104,"src":"2027:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38097,"name":"uint256","nodeType":"ElementaryTypeName","src":"2027:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2026:9:112"},"scope":38317,"src":"1989:75:112","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":38119,"nodeType":"Block","src":"2204:43:112","statements":[{"expression":{"components":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":38112,"name":"tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38056,"src":"2218:4:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage","typeString":"struct MerkleLib.Tree storage ref"}},"id":38113,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2223:4:112","memberName":"root","nodeType":"MemberAccess","referencedDeclaration":48982,"src":"2218:9:112","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Tree_$48880_storage_ptr_$returns$_t_bytes32_$bound_to$_t_struct$_Tree_$48880_storage_ptr_$","typeString":"function (struct MerkleLib.Tree storage pointer) view returns (bytes32)"}},"id":38114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2218:11:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":38115,"name":"tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38056,"src":"2231:4:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage","typeString":"struct MerkleLib.Tree storage ref"}},"id":38116,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2236:5:112","memberName":"count","nodeType":"MemberAccess","referencedDeclaration":48879,"src":"2231:10:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":38117,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2217:25:112","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_uint256_$","typeString":"tuple(bytes32,uint256)"}},"functionReturnParameters":38111,"id":38118,"nodeType":"Return","src":"2210:32:112"}]},"documentation":{"id":38105,"nodeType":"StructuredDocumentation","src":"2068:70:112","text":" @notice Convenience getter: returns the root and count."},"functionSelector":"c9b0a6de","id":38120,"implemented":true,"kind":"function","modifiers":[],"name":"rootAndCount","nameLocation":"2150:12:112","nodeType":"FunctionDefinition","parameters":{"id":38106,"nodeType":"ParameterList","parameters":[],"src":"2162:2:112"},"returnParameters":{"id":38111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38108,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38120,"src":"2186:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38107,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2186:7:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":38110,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38120,"src":"2195:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38109,"name":"uint256","nodeType":"ElementaryTypeName","src":"2195:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2185:18:112"},"scope":38317,"src":"2141:106:112","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":38134,"nodeType":"Block","src":"2346:76:112","statements":[{"expression":{"arguments":[{"id":38128,"name":"_arborist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38122,"src":"2377:9:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38127,"name":"__MerkleTreeManager_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38148,"src":"2352:24:112","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":38129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2352:35:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38130,"nodeType":"ExpressionStatement","src":"2352:35:112"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":38131,"name":"__ProposedOwnable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49948,"src":"2393:22:112","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":38132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2393:24:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38133,"nodeType":"ExpressionStatement","src":"2393:24:112"}]},"functionSelector":"c4d66de8","id":38135,"implemented":true,"kind":"function","modifiers":[{"id":38125,"kind":"modifierInvocation","modifierName":{"id":38124,"name":"initializer","nameLocations":["2334:11:112"],"nodeType":"IdentifierPath","referencedDeclaration":8140,"src":"2334:11:112"},"nodeType":"ModifierInvocation","src":"2334:11:112"}],"name":"initialize","nameLocation":"2297:10:112","nodeType":"FunctionDefinition","parameters":{"id":38123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38122,"mutability":"mutable","name":"_arborist","nameLocation":"2316:9:112","nodeType":"VariableDeclaration","scope":38135,"src":"2308:17:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38121,"name":"address","nodeType":"ElementaryTypeName","src":"2308:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2307:19:112"},"returnParameters":{"id":38126,"nodeType":"ParameterList","parameters":[],"src":"2346:0:112"},"scope":38317,"src":"2288:134:112","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":38147,"nodeType":"Block","src":"2615:56:112","statements":[{"expression":{"arguments":[{"id":38144,"name":"_arborist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38138,"src":"2656:9:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38143,"name":"__MerkleTreeManager_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38160,"src":"2621:34:112","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":38145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2621:45:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38146,"nodeType":"ExpressionStatement","src":"2621:45:112"}]},"documentation":{"id":38136,"nodeType":"StructuredDocumentation","src":"2426:107:112","text":" @dev Initializes MerkleTreeManager instance. Sets the msg.sender as the initial permissioned"},"id":38148,"implemented":true,"kind":"function","modifiers":[{"id":38141,"kind":"modifierInvocation","modifierName":{"id":38140,"name":"onlyInitializing","nameLocations":["2598:16:112"],"nodeType":"IdentifierPath","referencedDeclaration":8183,"src":"2598:16:112"},"nodeType":"ModifierInvocation","src":"2598:16:112"}],"name":"__MerkleTreeManager_init","nameLocation":"2545:24:112","nodeType":"FunctionDefinition","parameters":{"id":38139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38138,"mutability":"mutable","name":"_arborist","nameLocation":"2578:9:112","nodeType":"VariableDeclaration","scope":38148,"src":"2570:17:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38137,"name":"address","nodeType":"ElementaryTypeName","src":"2570:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2569:19:112"},"returnParameters":{"id":38142,"nodeType":"ParameterList","parameters":[],"src":"2615:0:112"},"scope":38317,"src":"2536:135:112","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":38159,"nodeType":"Block","src":"2764:31:112","statements":[{"expression":{"id":38157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38155,"name":"arborist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38059,"src":"2770:8:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":38156,"name":"_arborist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38150,"src":"2781:9:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2770:20:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":38158,"nodeType":"ExpressionStatement","src":"2770:20:112"}]},"id":38160,"implemented":true,"kind":"function","modifiers":[{"id":38153,"kind":"modifierInvocation","modifierName":{"id":38152,"name":"onlyInitializing","nameLocations":["2747:16:112"],"nodeType":"IdentifierPath","referencedDeclaration":8183,"src":"2747:16:112"},"nodeType":"ModifierInvocation","src":"2747:16:112"}],"name":"__MerkleTreeManager_init_unchained","nameLocation":"2684:34:112","nodeType":"FunctionDefinition","parameters":{"id":38151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38150,"mutability":"mutable","name":"_arborist","nameLocation":"2727:9:112","nodeType":"VariableDeclaration","scope":38160,"src":"2719:17:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38149,"name":"address","nodeType":"ElementaryTypeName","src":"2719:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2718:19:112"},"returnParameters":{"id":38154,"nodeType":"ParameterList","parameters":[],"src":"2764:0:112"},"scope":38317,"src":"2675:120:112","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":38198,"nodeType":"Block","src":"3086:318:112","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":38173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38168,"name":"newArborist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38163,"src":"3096:11:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":38171,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3119:1:112","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":38170,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3111:7:112","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":38169,"name":"address","nodeType":"ElementaryTypeName","src":"3111:7:112","typeDescriptions":{}}},"id":38172,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3111:10:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3096:25:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38177,"nodeType":"IfStatement","src":"3092:82:112","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":38174,"name":"MerkleTreeManager__setArborist_zeroAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38023,"src":"3130:42:112","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":38175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3130:44:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38176,"nodeType":"RevertStatement","src":"3123:51:112"}},{"assignments":[38179],"declarations":[{"constant":false,"id":38179,"mutability":"mutable","name":"current","nameLocation":"3188:7:112","nodeType":"VariableDeclaration","scope":38198,"src":"3180:15:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38178,"name":"address","nodeType":"ElementaryTypeName","src":"3180:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":38181,"initialValue":{"id":38180,"name":"arborist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38059,"src":"3198:8:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3180:26:112"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":38184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38182,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38179,"src":"3216:7:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":38183,"name":"newArborist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38163,"src":"3227:11:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3216:22:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38188,"nodeType":"IfStatement","src":"3212:83:112","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":38185,"name":"MerkleTreeManager__setArborist_alreadyArborist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38025,"src":"3247:46:112","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":38186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3247:48:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38187,"nodeType":"RevertStatement","src":"3240:55:112"}},{"eventCall":{"arguments":[{"id":38190,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38179,"src":"3349:7:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":38191,"name":"newArborist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38163,"src":"3358:11:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":38189,"name":"ArboristUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38031,"src":"3333:15:112","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":38192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3333:37:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38193,"nodeType":"EmitStatement","src":"3328:42:112"},{"expression":{"id":38196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38194,"name":"arborist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38059,"src":"3377:8:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":38195,"name":"newArborist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38163,"src":"3388:11:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3377:22:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":38197,"nodeType":"ExpressionStatement","src":"3377:22:112"}]},"documentation":{"id":38161,"nodeType":"StructuredDocumentation","src":"2849:173:112","text":" @notice Method for the current arborist to assign write permissions to a new arborist.\n @param newArborist The new address to set as the current arborist."},"functionSelector":"1b373a98","id":38199,"implemented":true,"kind":"function","modifiers":[{"id":38166,"kind":"modifierInvocation","modifierName":{"id":38165,"name":"onlyOwner","nameLocations":["3076:9:112"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"3076:9:112"},"nodeType":"ModifierInvocation","src":"3076:9:112"}],"name":"setArborist","nameLocation":"3034:11:112","nodeType":"FunctionDefinition","parameters":{"id":38164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38163,"mutability":"mutable","name":"newArborist","nameLocation":"3054:11:112","nodeType":"VariableDeclaration","scope":38199,"src":"3046:19:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38162,"name":"address","nodeType":"ElementaryTypeName","src":"3046:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3045:21:112"},"returnParameters":{"id":38167,"nodeType":"ParameterList","parameters":[],"src":"3086:0:112"},"scope":38317,"src":"3025:379:112","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[49874],"body":{"id":38206,"nodeType":"Block","src":"3647:2:112","statements":[]},"documentation":{"id":38200,"nodeType":"StructuredDocumentation","src":"3408:173:112","text":" @notice Remove ability to renounce ownership\n @dev Renounce ownership should be impossible as long as there is a possibility the\n arborist may change."},"functionSelector":"715018a6","id":38207,"implemented":true,"kind":"function","modifiers":[{"id":38204,"kind":"modifierInvocation","modifierName":{"id":38203,"name":"onlyOwner","nameLocations":["3637:9:112"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"3637:9:112"},"nodeType":"ModifierInvocation","src":"3637:9:112"}],"name":"renounceOwnership","nameLocation":"3593:17:112","nodeType":"FunctionDefinition","overrides":{"id":38202,"nodeType":"OverrideSpecifier","overrides":[],"src":"3628:8:112"},"parameters":{"id":38201,"nodeType":"ParameterList","parameters":[],"src":"3610:2:112"},"returnParameters":{"id":38205,"nodeType":"ParameterList","parameters":[],"src":"3647:0:112"},"scope":38317,"src":"3584:65:112","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":38274,"nodeType":"Block","src":"4103:733:112","statements":[{"assignments":[38224],"declarations":[{"constant":false,"id":38224,"mutability":"mutable","name":"_tree","nameLocation":"4319:5:112","nodeType":"VariableDeclaration","scope":38274,"src":"4297:27:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_memory_ptr","typeString":"struct MerkleLib.Tree"},"typeName":{"id":38223,"nodeType":"UserDefinedTypeName","pathNode":{"id":38222,"name":"MerkleLib.Tree","nameLocations":["4297:9:112","4307:4:112"],"nodeType":"IdentifierPath","referencedDeclaration":48880,"src":"4297:14:112"},"referencedDeclaration":48880,"src":"4297:14:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage_ptr","typeString":"struct MerkleLib.Tree"}},"visibility":"internal"}],"id":38226,"initialValue":{"id":38225,"name":"tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38056,"src":"4327:4:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage","typeString":"struct MerkleLib.Tree storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4297:34:112"},{"assignments":[38228],"declarations":[{"constant":false,"id":38228,"mutability":"mutable","name":"leafCount","nameLocation":"4346:9:112","nodeType":"VariableDeclaration","scope":38274,"src":"4338:17:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38227,"name":"uint256","nodeType":"ElementaryTypeName","src":"4338:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38231,"initialValue":{"expression":{"id":38229,"name":"leaves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38211,"src":"4358:6:112","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":38230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4365:6:112","memberName":"length","nodeType":"MemberAccess","src":"4358:13:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4338:33:112"},{"body":{"id":38251,"nodeType":"Block","src":"4410:140:112","statements":[{"expression":{"id":38245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38238,"name":"_tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"4473:5:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_memory_ptr","typeString":"struct MerkleLib.Tree memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":38241,"name":"leaves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38211,"src":"4494:6:112","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":38243,"indexExpression":{"id":38242,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38233,"src":"4501:1:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4494:9:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":38239,"name":"_tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"4481:5:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_memory_ptr","typeString":"struct MerkleLib.Tree memory"}},"id":38240,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4487:6:112","memberName":"insert","nodeType":"MemberAccess","referencedDeclaration":48956,"src":"4481:12:112","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Tree_$48880_memory_ptr_$_t_bytes32_$returns$_t_struct$_Tree_$48880_memory_ptr_$bound_to$_t_struct$_Tree_$48880_memory_ptr_$","typeString":"function (struct MerkleLib.Tree memory,bytes32) pure returns (struct MerkleLib.Tree memory)"}},"id":38244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4481:23:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_memory_ptr","typeString":"struct MerkleLib.Tree memory"}},"src":"4473:31:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_memory_ptr","typeString":"struct MerkleLib.Tree memory"}},"id":38246,"nodeType":"ExpressionStatement","src":"4473:31:112"},{"id":38250,"nodeType":"UncheckedBlock","src":"4512:32:112","statements":[{"expression":{"id":38248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4532:3:112","subExpression":{"id":38247,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38233,"src":"4534:1:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38249,"nodeType":"ExpressionStatement","src":"4532:3:112"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38235,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38233,"src":"4393:1:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":38236,"name":"leafCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38228,"src":"4397:9:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4393:13:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38252,"initializationExpression":{"assignments":[38233],"declarations":[{"constant":false,"id":38233,"mutability":"mutable","name":"i","nameLocation":"4390:1:112","nodeType":"VariableDeclaration","scope":38252,"src":"4382:9:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38232,"name":"uint256","nodeType":"ElementaryTypeName","src":"4382:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38234,"nodeType":"VariableDeclarationStatement","src":"4382:9:112"},"nodeType":"ForStatement","src":"4377:173:112"},{"expression":{"id":38255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38253,"name":"tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38056,"src":"4603:4:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage","typeString":"struct MerkleLib.Tree storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":38254,"name":"_tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"4610:5:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_memory_ptr","typeString":"struct MerkleLib.Tree memory"}},"src":"4603:12:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage","typeString":"struct MerkleLib.Tree storage ref"}},"id":38256,"nodeType":"ExpressionStatement","src":"4603:12:112"},{"expression":{"id":38260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38257,"name":"_count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38218,"src":"4665:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":38258,"name":"_tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"4674:5:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_memory_ptr","typeString":"struct MerkleLib.Tree memory"}},"id":38259,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4680:5:112","memberName":"count","nodeType":"MemberAccess","referencedDeclaration":48879,"src":"4674:11:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4665:20:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38261,"nodeType":"ExpressionStatement","src":"4665:20:112"},{"expression":{"id":38266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38262,"name":"_root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38216,"src":"4763:5:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":38263,"name":"tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38056,"src":"4771:4:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage","typeString":"struct MerkleLib.Tree storage ref"}},"id":38264,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4776:4:112","memberName":"root","nodeType":"MemberAccess","referencedDeclaration":48982,"src":"4771:9:112","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Tree_$48880_storage_ptr_$returns$_t_bytes32_$bound_to$_t_struct$_Tree_$48880_storage_ptr_$","typeString":"function (struct MerkleLib.Tree storage pointer) view returns (bytes32)"}},"id":38265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4771:11:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4763:19:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":38267,"nodeType":"ExpressionStatement","src":"4763:19:112"},{"eventCall":{"arguments":[{"id":38269,"name":"_root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38216,"src":"4809:5:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":38270,"name":"_count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38218,"src":"4816:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38271,"name":"leaves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38211,"src":"4824:6:112","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}],"id":38268,"name":"LeavesInserted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38048,"src":"4794:14:112","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$","typeString":"function (bytes32,uint256,bytes32[] memory)"}},"id":38272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4794:37:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38273,"nodeType":"EmitStatement","src":"4789:42:112"}]},"documentation":{"id":38208,"nodeType":"StructuredDocumentation","src":"3696:303:112","text":" @notice Inserts the given leaves into the tree.\n @param leaves The leaves to be inserted into the tree.\n @return _root Current root for convenience.\n @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\n provided for convenience."},"functionSelector":"34a55ee6","id":38275,"implemented":true,"kind":"function","modifiers":[{"id":38214,"kind":"modifierInvocation","modifierName":{"id":38213,"name":"onlyArborist","nameLocations":["4050:12:112"],"nodeType":"IdentifierPath","referencedDeclaration":38071,"src":"4050:12:112"},"nodeType":"ModifierInvocation","src":"4050:12:112"}],"name":"insert","nameLocation":"4011:6:112","nodeType":"FunctionDefinition","parameters":{"id":38212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38211,"mutability":"mutable","name":"leaves","nameLocation":"4035:6:112","nodeType":"VariableDeclaration","scope":38275,"src":"4018:23:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":38209,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4018:7:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":38210,"nodeType":"ArrayTypeName","src":"4018:9:112","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"4017:25:112"},"returnParameters":{"id":38219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38216,"mutability":"mutable","name":"_root","nameLocation":"4080:5:112","nodeType":"VariableDeclaration","scope":38275,"src":"4072:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38215,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4072:7:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":38218,"mutability":"mutable","name":"_count","nameLocation":"4095:6:112","nodeType":"VariableDeclaration","scope":38275,"src":"4087:14:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38217,"name":"uint256","nodeType":"ElementaryTypeName","src":"4087:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4071:31:112"},"scope":38317,"src":"4002:834:112","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":38311,"nodeType":"Block","src":"5230:158:112","statements":[{"expression":{"id":38292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38287,"name":"tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38056,"src":"5264:4:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage","typeString":"struct MerkleLib.Tree storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":38290,"name":"leaf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38278,"src":"5283:4:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":38288,"name":"tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38056,"src":"5271:4:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage","typeString":"struct MerkleLib.Tree storage ref"}},"id":38289,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5276:6:112","memberName":"insert","nodeType":"MemberAccess","referencedDeclaration":48956,"src":"5271:11:112","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Tree_$48880_memory_ptr_$_t_bytes32_$returns$_t_struct$_Tree_$48880_memory_ptr_$bound_to$_t_struct$_Tree_$48880_memory_ptr_$","typeString":"function (struct MerkleLib.Tree memory,bytes32) pure returns (struct MerkleLib.Tree memory)"}},"id":38291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5271:17:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_memory_ptr","typeString":"struct MerkleLib.Tree memory"}},"src":"5264:24:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage","typeString":"struct MerkleLib.Tree storage ref"}},"id":38293,"nodeType":"ExpressionStatement","src":"5264:24:112"},{"expression":{"id":38297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38294,"name":"_count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38285,"src":"5294:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":38295,"name":"tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38056,"src":"5303:4:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage","typeString":"struct MerkleLib.Tree storage ref"}},"id":38296,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5308:5:112","memberName":"count","nodeType":"MemberAccess","referencedDeclaration":48879,"src":"5303:10:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5294:19:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38298,"nodeType":"ExpressionStatement","src":"5294:19:112"},{"expression":{"id":38303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38299,"name":"_root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38283,"src":"5319:5:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":38300,"name":"tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38056,"src":"5327:4:112","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage","typeString":"struct MerkleLib.Tree storage ref"}},"id":38301,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5332:4:112","memberName":"root","nodeType":"MemberAccess","referencedDeclaration":48982,"src":"5327:9:112","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Tree_$48880_storage_ptr_$returns$_t_bytes32_$bound_to$_t_struct$_Tree_$48880_storage_ptr_$","typeString":"function (struct MerkleLib.Tree storage pointer) view returns (bytes32)"}},"id":38302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5327:11:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5319:19:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":38304,"nodeType":"ExpressionStatement","src":"5319:19:112"},{"eventCall":{"arguments":[{"id":38306,"name":"_root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38283,"src":"5363:5:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":38307,"name":"_count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38285,"src":"5370:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38308,"name":"leaf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38278,"src":"5378:4:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":38305,"name":"LeafInserted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38039,"src":"5350:12:112","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_bytes32_$returns$__$","typeString":"function (bytes32,uint256,bytes32)"}},"id":38309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5350:33:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38310,"nodeType":"EmitStatement","src":"5345:38:112"}]},"documentation":{"id":38276,"nodeType":"StructuredDocumentation","src":"4840:297:112","text":" @notice Inserts the given leaf into the tree.\n @param leaf The leaf to be inserted into the tree.\n @return _root Current root for convenience.\n @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\n provided for convenience."},"functionSelector":"2d287e43","id":38312,"implemented":true,"kind":"function","modifiers":[{"id":38281,"kind":"modifierInvocation","modifierName":{"id":38280,"name":"onlyArborist","nameLocations":["5177:12:112"],"nodeType":"IdentifierPath","referencedDeclaration":38071,"src":"5177:12:112"},"nodeType":"ModifierInvocation","src":"5177:12:112"}],"name":"insert","nameLocation":"5149:6:112","nodeType":"FunctionDefinition","parameters":{"id":38279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38278,"mutability":"mutable","name":"leaf","nameLocation":"5164:4:112","nodeType":"VariableDeclaration","scope":38312,"src":"5156:12:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38277,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5156:7:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5155:14:112"},"returnParameters":{"id":38286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38283,"mutability":"mutable","name":"_root","nameLocation":"5207:5:112","nodeType":"VariableDeclaration","scope":38312,"src":"5199:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38282,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5199:7:112","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":38285,"mutability":"mutable","name":"_count","nameLocation":"5222:6:112","nodeType":"VariableDeclaration","scope":38312,"src":"5214:14:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38284,"name":"uint256","nodeType":"ElementaryTypeName","src":"5214:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5198:31:112"},"scope":38317,"src":"5140:248:112","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"constant":false,"id":38316,"mutability":"mutable","name":"__GAP","nameLocation":"5455:5:112","nodeType":"VariableDeclaration","scope":38317,"src":"5435:25:112","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$48_storage","typeString":"uint256[48]"},"typeName":{"baseType":{"id":38313,"name":"uint256","nodeType":"ElementaryTypeName","src":"5435:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38315,"length":{"hexValue":"3438","id":38314,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5443:2:112","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},"nodeType":"ArrayTypeName","src":"5435:11:112","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$48_storage_ptr","typeString":"uint256[48]"}},"visibility":"private"}],"scope":38318,"src":"460:5029:112","usedErrors":[38023,38025,48763,49697,49699,49701,49703,49705,49707,49709]}],"src":"46:5444:112"},"id":112},"contracts/messaging/RootManager.sol":{"ast":{"absolutePath":"contracts/messaging/RootManager.sol","exportedSymbols":{"DomainIndexer":[48758],"IHubConnector":[47819],"IRootManager":[47888],"MerkleTreeManager":[38317],"ProposedOwnable":[49928],"QueueLib":[49625],"RootManager":[38802],"WatcherClient":[38914]},"id":38803,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":38319,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:113"},{"absolutePath":"contracts/shared/ProposedOwnable.sol","file":"../shared/ProposedOwnable.sol","id":38321,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38803,"sourceUnit":49929,"src":"71:62:113","symbolAliases":[{"foreign":{"id":38320,"name":"ProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49928,"src":"79:15:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/IRootManager.sol","file":"./interfaces/IRootManager.sol","id":38323,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38803,"sourceUnit":47889,"src":"135:59:113","symbolAliases":[{"foreign":{"id":38322,"name":"IRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47888,"src":"143:12:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/IHubConnector.sol","file":"./interfaces/IHubConnector.sol","id":38325,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38803,"sourceUnit":47820,"src":"195:61:113","symbolAliases":[{"foreign":{"id":38324,"name":"IHubConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47819,"src":"203:13:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/libraries/Queue.sol","file":"./libraries/Queue.sol","id":38327,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38803,"sourceUnit":49626,"src":"257:47:113","symbolAliases":[{"foreign":{"id":38326,"name":"QueueLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49625,"src":"265:8:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/libraries/DomainIndexer.sol","file":"./libraries/DomainIndexer.sol","id":38329,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38803,"sourceUnit":48759,"src":"305:60:113","symbolAliases":[{"foreign":{"id":38328,"name":"DomainIndexer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48758,"src":"313:13:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/MerkleTreeManager.sol","file":"./MerkleTreeManager.sol","id":38331,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38803,"sourceUnit":38318,"src":"367:58:113","symbolAliases":[{"foreign":{"id":38330,"name":"MerkleTreeManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38317,"src":"375:17:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/WatcherClient.sol","file":"./WatcherClient.sol","id":38333,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38803,"sourceUnit":38915,"src":"426:50:113","symbolAliases":[{"foreign":{"id":38332,"name":"WatcherClient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38914,"src":"434:13:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":38335,"name":"ProposedOwnable","nameLocations":["739:15:113"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"739:15:113"},"id":38336,"nodeType":"InheritanceSpecifier","src":"739:15:113"},{"baseName":{"id":38337,"name":"IRootManager","nameLocations":["756:12:113"],"nodeType":"IdentifierPath","referencedDeclaration":47888,"src":"756:12:113"},"id":38338,"nodeType":"InheritanceSpecifier","src":"756:12:113"},{"baseName":{"id":38339,"name":"WatcherClient","nameLocations":["770:13:113"],"nodeType":"IdentifierPath","referencedDeclaration":38914,"src":"770:13:113"},"id":38340,"nodeType":"InheritanceSpecifier","src":"770:13:113"},{"baseName":{"id":38341,"name":"DomainIndexer","nameLocations":["785:13:113"],"nodeType":"IdentifierPath","referencedDeclaration":48758,"src":"785:13:113"},"id":38342,"nodeType":"InheritanceSpecifier","src":"785:13:113"}],"canonicalName":"RootManager","contractDependencies":[],"contractKind":"contract","documentation":{"id":38334,"nodeType":"StructuredDocumentation","src":"478:236:113","text":" @notice This contract exists at cluster hubs, and aggregates all transfer roots from messaging\n spokes into a single merkle tree. Regularly broadcasts the root of the aggregator tree back out\n to all the messaging spokes."},"fullyImplemented":true,"id":38802,"linearizedBaseContracts":[38802,48758,38914,10680,11506,47888,49928,50003],"name":"RootManager","nameLocation":"724:11:113","nodeType":"ContractDefinition","nodes":[{"global":false,"id":38346,"libraryName":{"id":38343,"name":"QueueLib","nameLocations":["851:8:113"],"nodeType":"IdentifierPath","referencedDeclaration":49625,"src":"851:8:113"},"nodeType":"UsingForDirective","src":"845:34:113","typeName":{"id":38345,"nodeType":"UserDefinedTypeName","pathNode":{"id":38344,"name":"QueueLib.Queue","nameLocations":["864:8:113","873:5:113"],"nodeType":"IdentifierPath","referencedDeclaration":49241,"src":"864:14:113"},"referencedDeclaration":49241,"src":"864:14:113","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue"}}},{"anonymous":false,"eventSelector":"ef322fd61cb3d8514326f0b28140a92a29cd10996ad80d0671e43d2483464c1d","id":38352,"name":"DelayBlocksUpdated","nameLocation":"928:18:113","nodeType":"EventDefinition","parameters":{"id":38351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38348,"indexed":false,"mutability":"mutable","name":"previous","nameLocation":"955:8:113","nodeType":"VariableDeclaration","scope":38352,"src":"947:16:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38347,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38350,"indexed":false,"mutability":"mutable","name":"updated","nameLocation":"973:7:113","nodeType":"VariableDeclaration","scope":38352,"src":"965:15:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38349,"name":"uint256","nodeType":"ElementaryTypeName","src":"965:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"946:35:113"},"src":"922:60:113"},{"anonymous":false,"eventSelector":"1daad24ee1bf0bcc72ab681d29df86ec2794361b223da31f148b9f826cd135a8","id":38360,"name":"RootReceived","nameLocation":"992:12:113","nodeType":"EventDefinition","parameters":{"id":38359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38354,"indexed":false,"mutability":"mutable","name":"domain","nameLocation":"1012:6:113","nodeType":"VariableDeclaration","scope":38360,"src":"1005:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":38353,"name":"uint32","nodeType":"ElementaryTypeName","src":"1005:6:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":38356,"indexed":false,"mutability":"mutable","name":"receivedRoot","nameLocation":"1028:12:113","nodeType":"VariableDeclaration","scope":38360,"src":"1020:20:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38355,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1020:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":38358,"indexed":false,"mutability":"mutable","name":"queueIndex","nameLocation":"1050:10:113","nodeType":"VariableDeclaration","scope":38360,"src":"1042:18:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38357,"name":"uint256","nodeType":"ElementaryTypeName","src":"1042:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1004:57:113"},"src":"986:76:113"},{"anonymous":false,"eventSelector":"41b13c36968d02a1fd71e0f5db55ba2fb043c215a4d1e17633293ff273a77cd4","id":38369,"name":"RootsAggregated","nameLocation":"1072:15:113","nodeType":"EventDefinition","parameters":{"id":38368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38362,"indexed":false,"mutability":"mutable","name":"aggregateRoot","nameLocation":"1096:13:113","nodeType":"VariableDeclaration","scope":38369,"src":"1088:21:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38361,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1088:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":38364,"indexed":false,"mutability":"mutable","name":"count","nameLocation":"1119:5:113","nodeType":"VariableDeclaration","scope":38369,"src":"1111:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38363,"name":"uint256","nodeType":"ElementaryTypeName","src":"1111:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38367,"indexed":false,"mutability":"mutable","name":"aggregatedMessageRoots","nameLocation":"1136:22:113","nodeType":"VariableDeclaration","scope":38369,"src":"1126:32:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":38365,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1126:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":38366,"nodeType":"ArrayTypeName","src":"1126:9:113","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"1087:72:113"},"src":"1066:94:113"},{"anonymous":false,"eventSelector":"3fcedb4669de80ca7de6e18b7b25cc8e4f6861796f1db0f2409fcdf0d6901f56","id":38377,"name":"RootPropagated","nameLocation":"1170:14:113","nodeType":"EventDefinition","parameters":{"id":38376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38371,"indexed":false,"mutability":"mutable","name":"aggregateRoot","nameLocation":"1193:13:113","nodeType":"VariableDeclaration","scope":38377,"src":"1185:21:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38370,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1185:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":38373,"indexed":false,"mutability":"mutable","name":"count","nameLocation":"1216:5:113","nodeType":"VariableDeclaration","scope":38377,"src":"1208:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38372,"name":"uint256","nodeType":"ElementaryTypeName","src":"1208:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38375,"indexed":false,"mutability":"mutable","name":"domainsHash","nameLocation":"1231:11:113","nodeType":"VariableDeclaration","scope":38377,"src":"1223:19:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38374,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1223:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1184:59:113"},"src":"1164:80:113"},{"anonymous":false,"eventSelector":"d2a17a10ab346c94fae909b2fbfa0fedaf30d08983e74dcc0a92be2c40c437f9","id":38381,"name":"RootDiscarded","nameLocation":"1254:13:113","nodeType":"EventDefinition","parameters":{"id":38380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38379,"indexed":false,"mutability":"mutable","name":"fraudulentRoot","nameLocation":"1276:14:113","nodeType":"VariableDeclaration","scope":38381,"src":"1268:22:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38378,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1268:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1267:24:113"},"src":"1248:44:113"},{"anonymous":false,"eventSelector":"95ef69787290b89c35a092c89db1b283b43724d01263e683cfb560c758cdbe70","id":38393,"name":"ConnectorAdded","nameLocation":"1302:14:113","nodeType":"EventDefinition","parameters":{"id":38392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38383,"indexed":false,"mutability":"mutable","name":"domain","nameLocation":"1324:6:113","nodeType":"VariableDeclaration","scope":38393,"src":"1317:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":38382,"name":"uint32","nodeType":"ElementaryTypeName","src":"1317:6:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":38385,"indexed":false,"mutability":"mutable","name":"connector","nameLocation":"1340:9:113","nodeType":"VariableDeclaration","scope":38393,"src":"1332:17:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38384,"name":"address","nodeType":"ElementaryTypeName","src":"1332:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38388,"indexed":false,"mutability":"mutable","name":"domains","nameLocation":"1360:7:113","nodeType":"VariableDeclaration","scope":38393,"src":"1351:16:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_memory_ptr","typeString":"uint32[]"},"typeName":{"baseType":{"id":38386,"name":"uint32","nodeType":"ElementaryTypeName","src":"1351:6:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":38387,"nodeType":"ArrayTypeName","src":"1351:8:113","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage_ptr","typeString":"uint32[]"}},"visibility":"internal"},{"constant":false,"id":38391,"indexed":false,"mutability":"mutable","name":"connectors","nameLocation":"1379:10:113","nodeType":"VariableDeclaration","scope":38393,"src":"1369:20:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":38389,"name":"address","nodeType":"ElementaryTypeName","src":"1369:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":38390,"nodeType":"ArrayTypeName","src":"1369:9:113","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1316:74:113"},"src":"1296:95:113"},{"anonymous":false,"eventSelector":"6a1097f391a37dc63e0860e64ec34442971eeed2fda4d1a90141fa9ce25eb7eb","id":38407,"name":"ConnectorRemoved","nameLocation":"1401:16:113","nodeType":"EventDefinition","parameters":{"id":38406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38395,"indexed":false,"mutability":"mutable","name":"domain","nameLocation":"1425:6:113","nodeType":"VariableDeclaration","scope":38407,"src":"1418:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":38394,"name":"uint32","nodeType":"ElementaryTypeName","src":"1418:6:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":38397,"indexed":false,"mutability":"mutable","name":"connector","nameLocation":"1441:9:113","nodeType":"VariableDeclaration","scope":38407,"src":"1433:17:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38396,"name":"address","nodeType":"ElementaryTypeName","src":"1433:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38400,"indexed":false,"mutability":"mutable","name":"domains","nameLocation":"1461:7:113","nodeType":"VariableDeclaration","scope":38407,"src":"1452:16:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_memory_ptr","typeString":"uint32[]"},"typeName":{"baseType":{"id":38398,"name":"uint32","nodeType":"ElementaryTypeName","src":"1452:6:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":38399,"nodeType":"ArrayTypeName","src":"1452:8:113","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage_ptr","typeString":"uint32[]"}},"visibility":"internal"},{"constant":false,"id":38403,"indexed":false,"mutability":"mutable","name":"connectors","nameLocation":"1480:10:113","nodeType":"VariableDeclaration","scope":38407,"src":"1470:20:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":38401,"name":"address","nodeType":"ElementaryTypeName","src":"1470:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":38402,"nodeType":"ArrayTypeName","src":"1470:9:113","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":38405,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"1500:6:113","nodeType":"VariableDeclaration","scope":38407,"src":"1492:14:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38404,"name":"address","nodeType":"ElementaryTypeName","src":"1492:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1417:90:113"},"src":"1395:113:113"},{"anonymous":false,"eventSelector":"51f2ef0ced5ef0ec14268d79d48589f9ccff35b2b0baf5059a90166caffea7a7","id":38413,"name":"PropagateFailed","nameLocation":"1518:15:113","nodeType":"EventDefinition","parameters":{"id":38412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38409,"indexed":false,"mutability":"mutable","name":"domain","nameLocation":"1541:6:113","nodeType":"VariableDeclaration","scope":38413,"src":"1534:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":38408,"name":"uint32","nodeType":"ElementaryTypeName","src":"1534:6:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":38411,"indexed":false,"mutability":"mutable","name":"connector","nameLocation":"1557:9:113","nodeType":"VariableDeclaration","scope":38413,"src":"1549:17:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38410,"name":"address","nodeType":"ElementaryTypeName","src":"1549:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1533:34:113"},"src":"1512:56:113"},{"constant":true,"documentation":{"id":38414,"nodeType":"StructuredDocumentation","src":"1615:163:113","text":" @notice Maximum number of values to dequeue from the queue in one sitting (one call of `propagate`\n or `dequeue`). Used to cap gas requirements."},"functionSelector":"aa0d60a3","id":38417,"mutability":"constant","name":"DEQUEUE_MAX","nameLocation":"1805:11:113","nodeType":"VariableDeclaration","scope":38802,"src":"1781:41:113","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":38415,"name":"uint128","nodeType":"ElementaryTypeName","src":"1781:7:113","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"value":{"hexValue":"313030","id":38416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1819:3:113","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"visibility":"public"},{"constant":false,"documentation":{"id":38418,"nodeType":"StructuredDocumentation","src":"1827:150:113","text":" @notice Number of blocks to delay the processing of a message to allow for watchers to verify\n the validity and pause if necessary."},"functionSelector":"ad9c0c2e","id":38420,"mutability":"mutable","name":"delayBlocks","nameLocation":"1995:11:113","nodeType":"VariableDeclaration","scope":38802,"src":"1980:26:113","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38419,"name":"uint256","nodeType":"ElementaryTypeName","src":"1980:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":38421,"nodeType":"StructuredDocumentation","src":"2011:371:113","text":" @notice Queue used for management of verification for inbound roots from spoke chains. Once\n the verification period elapses, the inbound messages can be aggregated into the merkle tree\n for propagation to spoke chains.\n @dev Watchers should be able to watch this queue for fraudulent messages and pause this contract\n if fraud is detected."},"functionSelector":"7d534308","id":38424,"mutability":"mutable","name":"pendingInboundRoots","nameLocation":"2407:19:113","nodeType":"VariableDeclaration","scope":38802,"src":"2385:41:113","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage","typeString":"struct QueueLib.Queue"},"typeName":{"id":38423,"nodeType":"UserDefinedTypeName","pathNode":{"id":38422,"name":"QueueLib.Queue","nameLocations":["2385:8:113","2394:5:113"],"nodeType":"IdentifierPath","referencedDeclaration":49241,"src":"2385:14:113"},"referencedDeclaration":49241,"src":"2385:14:113","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue"}},"visibility":"public"},{"constant":false,"documentation":{"id":38425,"nodeType":"StructuredDocumentation","src":"2431:148:113","text":" @notice The last aggregate root we propagated to spoke chains. Used to prevent sending redundant\n aggregate roots in `propagate`."},"functionSelector":"0165bc81","id":38427,"mutability":"mutable","name":"lastPropagatedRoot","nameLocation":"2597:18:113","nodeType":"VariableDeclaration","scope":38802,"src":"2582:33:113","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38426,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2582:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":false,"documentation":{"id":38428,"nodeType":"StructuredDocumentation","src":"2620:194:113","text":" @notice MerkleTreeManager contract instance. Will hold the active tree of aggregated inbound roots.\n The root of this tree will be distributed crosschain to all spoke domains."},"functionSelector":"a01892a5","id":38431,"mutability":"immutable","name":"MERKLE","nameLocation":"2852:6:113","nodeType":"VariableDeclaration","scope":38802,"src":"2817:41:113","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_MerkleTreeManager_$38317","typeString":"contract MerkleTreeManager"},"typeName":{"id":38430,"nodeType":"UserDefinedTypeName","pathNode":{"id":38429,"name":"MerkleTreeManager","nameLocations":["2817:17:113"],"nodeType":"IdentifierPath","referencedDeclaration":38317,"src":"2817:17:113"},"referencedDeclaration":38317,"src":"2817:17:113","typeDescriptions":{"typeIdentifier":"t_contract$_MerkleTreeManager_$38317","typeString":"contract MerkleTreeManager"}},"visibility":"public"},{"body":{"id":38446,"nodeType":"Block","src":"2944:85:113","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":38441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":38437,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38433,"src":"2980:7:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":38436,"name":"getConnectorForDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48495,"src":"2958:21:113","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint32_$returns$_t_address_$","typeString":"function (uint32) view returns (address)"}},"id":38438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2958:30:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":38439,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2992:3:113","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":38440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2996:6:113","memberName":"sender","nodeType":"MemberAccess","src":"2992:10:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2958:44:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21636f6e6e6563746f72","id":38442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3004:12:113","typeDescriptions":{"typeIdentifier":"t_stringliteral_f07da7b975140f505677e7936eeabdf78b829042e2b339dd9ec88a01bc429624","typeString":"literal_string \"!connector\""},"value":"!connector"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f07da7b975140f505677e7936eeabdf78b829042e2b339dd9ec88a01bc429624","typeString":"literal_string \"!connector\""}],"id":38435,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2950:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":38443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2950:67:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38444,"nodeType":"ExpressionStatement","src":"2950:67:113"},{"id":38445,"nodeType":"PlaceholderStatement","src":"3023:1:113"}]},"id":38447,"name":"onlyConnector","nameLocation":"2914:13:113","nodeType":"ModifierDefinition","parameters":{"id":38434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38433,"mutability":"mutable","name":"_domain","nameLocation":"2935:7:113","nodeType":"VariableDeclaration","scope":38447,"src":"2928:14:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":38432,"name":"uint32","nodeType":"ElementaryTypeName","src":"2928:6:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2927:16:113"},"src":"2905:124:113","virtual":false,"visibility":"internal"},{"body":{"id":38492,"nodeType":"Block","src":"3524:244:113","statements":[{"expression":{"arguments":[{"expression":{"id":38463,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3540:3:113","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":38464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3544:6:113","memberName":"sender","nodeType":"MemberAccess","src":"3540:10:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38462,"name":"_setOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49908,"src":"3530:9:113","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":38465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3530:21:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38466,"nodeType":"ExpressionStatement","src":"3530:21:113"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":38473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38468,"name":"_merkle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38452,"src":"3566:7:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":38471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3585:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":38470,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3577:7:113","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":38469,"name":"address","nodeType":"ElementaryTypeName","src":"3577:7:113","typeDescriptions":{}}},"id":38472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3577:10:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3566:21:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"217a65726f206d65726b6c65","id":38474,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3589:14:113","typeDescriptions":{"typeIdentifier":"t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8","typeString":"literal_string \"!zero merkle\""},"value":"!zero merkle"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8","typeString":"literal_string \"!zero merkle\""}],"id":38467,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3558:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":38475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3558:46:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38476,"nodeType":"ExpressionStatement","src":"3558:46:113"},{"expression":{"id":38481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38477,"name":"MERKLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38431,"src":"3610:6:113","typeDescriptions":{"typeIdentifier":"t_contract$_MerkleTreeManager_$38317","typeString":"contract MerkleTreeManager"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":38479,"name":"_merkle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38452,"src":"3637:7:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38478,"name":"MerkleTreeManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38317,"src":"3619:17:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MerkleTreeManager_$38317_$","typeString":"type(contract MerkleTreeManager)"}},"id":38480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3619:26:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_MerkleTreeManager_$38317","typeString":"contract MerkleTreeManager"}},"src":"3610:35:113","typeDescriptions":{"typeIdentifier":"t_contract$_MerkleTreeManager_$38317","typeString":"contract MerkleTreeManager"}},"id":38482,"nodeType":"ExpressionStatement","src":"3610:35:113"},{"expression":{"id":38485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38483,"name":"delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38420,"src":"3652:11:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":38484,"name":"_delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38450,"src":"3666:12:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3652:26:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38486,"nodeType":"ExpressionStatement","src":"3652:26:113"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":38487,"name":"pendingInboundRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38424,"src":"3731:19:113","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage","typeString":"struct QueueLib.Queue storage ref"}},"id":38489,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3751:10:113","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":49259,"src":"3731:30:113","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Queue_$49241_storage_ptr_$returns$__$bound_to$_t_struct$_Queue_$49241_storage_ptr_$","typeString":"function (struct QueueLib.Queue storage pointer)"}},"id":38490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3731:32:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38491,"nodeType":"ExpressionStatement","src":"3731:32:113"}]},"documentation":{"id":38448,"nodeType":"StructuredDocumentation","src":"3077:303:113","text":" @notice Creates a new RootManager instance.\n @param _delayBlocks The delay for the validation period for incoming messages in blocks.\n @param _merkle The address of the MerkleTreeManager on this domain.\n @param _watcherManager The address of the WatcherManager on this domain."},"id":38493,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":38457,"kind":"baseConstructorSpecifier","modifierName":{"id":38456,"name":"ProposedOwnable","nameLocations":["3475:15:113"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"3475:15:113"},"nodeType":"ModifierInvocation","src":"3475:17:113"},{"arguments":[{"id":38459,"name":"_watcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38454,"src":"3507:15:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":38460,"kind":"baseConstructorSpecifier","modifierName":{"id":38458,"name":"WatcherClient","nameLocations":["3493:13:113"],"nodeType":"IdentifierPath","referencedDeclaration":38914,"src":"3493:13:113"},"nodeType":"ModifierInvocation","src":"3493:30:113"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":38455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38450,"mutability":"mutable","name":"_delayBlocks","nameLocation":"3408:12:113","nodeType":"VariableDeclaration","scope":38493,"src":"3400:20:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38449,"name":"uint256","nodeType":"ElementaryTypeName","src":"3400:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38452,"mutability":"mutable","name":"_merkle","nameLocation":"3434:7:113","nodeType":"VariableDeclaration","scope":38493,"src":"3426:15:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38451,"name":"address","nodeType":"ElementaryTypeName","src":"3426:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38454,"mutability":"mutable","name":"_watcherManager","nameLocation":"3455:15:113","nodeType":"VariableDeclaration","scope":38493,"src":"3447:23:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38453,"name":"address","nodeType":"ElementaryTypeName","src":"3447:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3394:80:113"},"returnParameters":{"id":38461,"nodeType":"ParameterList","parameters":[],"src":"3524:0:113"},"scope":38802,"src":"3383:385:113","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":38502,"nodeType":"Block","src":"3889:46:113","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":38498,"name":"pendingInboundRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38424,"src":"3902:19:113","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage","typeString":"struct QueueLib.Queue storage ref"}},"id":38499,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3922:6:113","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":49604,"src":"3902:26:113","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Queue_$49241_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Queue_$49241_storage_ptr_$","typeString":"function (struct QueueLib.Queue storage pointer) view returns (uint256)"}},"id":38500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3902:28:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":38497,"id":38501,"nodeType":"Return","src":"3895:35:113"}]},"functionSelector":"909907cb","id":38503,"implemented":true,"kind":"function","modifiers":[],"name":"getPendingInboundRootsCount","nameLocation":"3829:27:113","nodeType":"FunctionDefinition","parameters":{"id":38494,"nodeType":"ParameterList","parameters":[],"src":"3856:2:113"},"returnParameters":{"id":38497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38496,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38503,"src":"3880:7:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38495,"name":"uint256","nodeType":"ElementaryTypeName","src":"3880:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3879:9:113"},"scope":38802,"src":"3820:115:113","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":38527,"nodeType":"Block","src":"4168:151:113","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38512,"name":"_delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38506,"src":"4182:12:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":38513,"name":"delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38420,"src":"4198:11:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4182:27:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2164656c6179426c6f636b73","id":38515,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4211:14:113","typeDescriptions":{"typeIdentifier":"t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2","typeString":"literal_string \"!delayBlocks\""},"value":"!delayBlocks"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2","typeString":"literal_string \"!delayBlocks\""}],"id":38511,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4174:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":38516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4174:52:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38517,"nodeType":"ExpressionStatement","src":"4174:52:113"},{"eventCall":{"arguments":[{"id":38519,"name":"_delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38506,"src":"4256:12:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38520,"name":"delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38420,"src":"4270:11:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38518,"name":"DelayBlocksUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38352,"src":"4237:18:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":38521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4237:45:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38522,"nodeType":"EmitStatement","src":"4232:50:113"},{"expression":{"id":38525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38523,"name":"delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38420,"src":"4288:11:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":38524,"name":"_delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38506,"src":"4302:12:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4288:26:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38526,"nodeType":"ExpressionStatement","src":"4288:26:113"}]},"documentation":{"id":38504,"nodeType":"StructuredDocumentation","src":"3987:115:113","text":" @notice Set the `delayBlocks`, the period in blocks over which an incoming message\n is verified."},"functionSelector":"1eeaabea","id":38528,"implemented":true,"kind":"function","modifiers":[{"id":38509,"kind":"modifierInvocation","modifierName":{"id":38508,"name":"onlyOwner","nameLocations":["4158:9:113"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"4158:9:113"},"nodeType":"ModifierInvocation","src":"4158:9:113"}],"name":"setDelayBlocks","nameLocation":"4114:14:113","nodeType":"FunctionDefinition","parameters":{"id":38507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38506,"mutability":"mutable","name":"_delayBlocks","nameLocation":"4137:12:113","nodeType":"VariableDeclaration","scope":38528,"src":"4129:20:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38505,"name":"uint256","nodeType":"ElementaryTypeName","src":"4129:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4128:22:113"},"returnParameters":{"id":38510,"nodeType":"ParameterList","parameters":[],"src":"4168:0:113"},"scope":38802,"src":"4105:214:113","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":38550,"nodeType":"Block","src":"4881:108:113","statements":[{"expression":{"arguments":[{"id":38539,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38531,"src":"4897:7:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":38540,"name":"_connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38533,"src":"4906:10:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":38538,"name":"addDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48625,"src":"4887:9:113","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint32_$_t_address_$returns$__$","typeString":"function (uint32,address)"}},"id":38541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4887:30:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38542,"nodeType":"ExpressionStatement","src":"4887:30:113"},{"eventCall":{"arguments":[{"id":38544,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38531,"src":"4943:7:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":38545,"name":"_connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38533,"src":"4952:10:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":38546,"name":"domains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48424,"src":"4964:7:113","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage","typeString":"uint32[] storage ref"}},{"id":38547,"name":"connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48431,"src":"4973:10:113","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint32_$dyn_storage","typeString":"uint32[] storage ref"},{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}],"id":38543,"name":"ConnectorAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38393,"src":"4928:14:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint32_$_t_address_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (uint32,address,uint32[] memory,address[] memory)"}},"id":38548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4928:56:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38549,"nodeType":"EmitStatement","src":"4923:61:113"}]},"documentation":{"id":38529,"nodeType":"StructuredDocumentation","src":"4323:478:113","text":" @notice Add a new supported domain and corresponding hub connector to the system. This new domain\n will receive the propagated aggregate root.\n @dev Only owner can add a new connector. Address should be the connector on L1.\n @dev Cannot add address(0) to avoid duplicated domain in array and reduce gas fee while propagating.\n @param _domain The target spoke domain of the given connector.\n @param _connector Address of the hub connector."},"functionSelector":"b904670f","id":38551,"implemented":true,"kind":"function","modifiers":[{"id":38536,"kind":"modifierInvocation","modifierName":{"id":38535,"name":"onlyOwner","nameLocations":["4871:9:113"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"4871:9:113"},"nodeType":"ModifierInvocation","src":"4871:9:113"}],"name":"addConnector","nameLocation":"4813:12:113","nodeType":"FunctionDefinition","parameters":{"id":38534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38531,"mutability":"mutable","name":"_domain","nameLocation":"4833:7:113","nodeType":"VariableDeclaration","scope":38551,"src":"4826:14:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":38530,"name":"uint32","nodeType":"ElementaryTypeName","src":"4826:6:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":38533,"mutability":"mutable","name":"_connector","nameLocation":"4850:10:113","nodeType":"VariableDeclaration","scope":38551,"src":"4842:18:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38532,"name":"address","nodeType":"ElementaryTypeName","src":"4842:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4825:36:113"},"returnParameters":{"id":38537,"nodeType":"ParameterList","parameters":[],"src":"4881:0:113"},"scope":38802,"src":"4804:185:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":38574,"nodeType":"Block","src":"5441:134:113","statements":[{"assignments":[38560],"declarations":[{"constant":false,"id":38560,"mutability":"mutable","name":"_connector","nameLocation":"5455:10:113","nodeType":"VariableDeclaration","scope":38574,"src":"5447:18:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38559,"name":"address","nodeType":"ElementaryTypeName","src":"5447:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":38564,"initialValue":{"arguments":[{"id":38562,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38554,"src":"5481:7:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":38561,"name":"removeDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48720,"src":"5468:12:113","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint32_$returns$_t_address_$","typeString":"function (uint32) returns (address)"}},"id":38563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5468:21:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5447:42:113"},{"eventCall":{"arguments":[{"id":38566,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38554,"src":"5517:7:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":38567,"name":"_connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38560,"src":"5526:10:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":38568,"name":"domains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48424,"src":"5538:7:113","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage","typeString":"uint32[] storage ref"}},{"id":38569,"name":"connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48431,"src":"5547:10:113","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},{"expression":{"id":38570,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5559:3:113","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":38571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5563:6:113","memberName":"sender","nodeType":"MemberAccess","src":"5559:10:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint32_$dyn_storage","typeString":"uint32[] storage ref"},{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"},{"typeIdentifier":"t_address","typeString":"address"}],"id":38565,"name":"ConnectorRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38407,"src":"5500:16:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint32_$_t_address_$_t_array$_t_uint32_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$returns$__$","typeString":"function (uint32,address,uint32[] memory,address[] memory,address)"}},"id":38572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5500:70:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38573,"nodeType":"EmitStatement","src":"5495:75:113"}]},"documentation":{"id":38552,"nodeType":"StructuredDocumentation","src":"4993:385:113","text":" @notice Remove support for a connector and respective domain. That connector/domain will no longer\n receive updates for the latest aggregate root.\n @dev Only watcher can remove a connector.\n TODO: Could add a metatx-able `removeConnectorWithSig` if we want to use relayers?\n @param _domain The spoke domain of the target connector we want to remove."},"functionSelector":"e6f1208d","id":38575,"implemented":true,"kind":"function","modifiers":[{"id":38557,"kind":"modifierInvocation","modifierName":{"id":38556,"name":"onlyWatcher","nameLocations":["5429:11:113"],"nodeType":"IdentifierPath","referencedDeclaration":38852,"src":"5429:11:113"},"nodeType":"ModifierInvocation","src":"5429:11:113"}],"name":"removeConnector","nameLocation":"5390:15:113","nodeType":"FunctionDefinition","parameters":{"id":38555,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38554,"mutability":"mutable","name":"_domain","nameLocation":"5413:7:113","nodeType":"VariableDeclaration","scope":38575,"src":"5406:14:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":38553,"name":"uint32","nodeType":"ElementaryTypeName","src":"5406:6:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"5405:16:113"},"returnParameters":{"id":38558,"nodeType":"ParameterList","parameters":[],"src":"5441:0:113"},"scope":38802,"src":"5381:194:113","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":38595,"nodeType":"Block","src":"6089:75:113","statements":[{"expression":{"arguments":[{"id":38588,"name":"_root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38578,"src":"6122:5:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":38585,"name":"pendingInboundRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38424,"src":"6095:19:113","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage","typeString":"struct QueueLib.Queue storage ref"}},"id":38587,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6115:6:113","memberName":"remove","nodeType":"MemberAccess","referencedDeclaration":49563,"src":"6095:26:113","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Queue_$49241_storage_ptr_$_t_bytes32_$returns$__$bound_to$_t_struct$_Queue_$49241_storage_ptr_$","typeString":"function (struct QueueLib.Queue storage pointer,bytes32)"}},"id":38589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6095:33:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38590,"nodeType":"ExpressionStatement","src":"6095:33:113"},{"eventCall":{"arguments":[{"id":38592,"name":"_root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38578,"src":"6153:5:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":38591,"name":"RootDiscarded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38381,"src":"6139:13:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":38593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6139:20:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38594,"nodeType":"EmitStatement","src":"6134:25:113"}]},"documentation":{"id":38576,"nodeType":"StructuredDocumentation","src":"5579:443:113","text":" @notice Removes (effectively blocklists) a given (fraudulent) root from the queue of pending\n inbound roots.\n @dev The given root does NOT have to currently be in the queue. It isn't removed from the queue\n directly, but instead is filtered out when dequeuing is done for the sake of aggregation.\n @dev Can only be called by the owner when the protocol is paused.\n @param _root The root to be discarded."},"functionSelector":"0f8ef4ee","id":38596,"implemented":true,"kind":"function","modifiers":[{"id":38581,"kind":"modifierInvocation","modifierName":{"id":38580,"name":"onlyOwner","nameLocations":["6068:9:113"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"6068:9:113"},"nodeType":"ModifierInvocation","src":"6068:9:113"},{"id":38583,"kind":"modifierInvocation","modifierName":{"id":38582,"name":"whenPaused","nameLocations":["6078:10:113"],"nodeType":"IdentifierPath","referencedDeclaration":10615,"src":"6078:10:113"},"nodeType":"ModifierInvocation","src":"6078:10:113"}],"name":"discardRoot","nameLocation":"6034:11:113","nodeType":"FunctionDefinition","parameters":{"id":38579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38578,"mutability":"mutable","name":"_root","nameLocation":"6054:5:113","nodeType":"VariableDeclaration","scope":38596,"src":"6046:13:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38577,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6046:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6045:15:113"},"returnParameters":{"id":38584,"nodeType":"ParameterList","parameters":[],"src":"6089:0:113"},"scope":38802,"src":"6025:139:113","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[38901,49874],"body":{"id":38605,"nodeType":"Block","src":"6466:2:113","statements":[]},"documentation":{"id":38597,"nodeType":"StructuredDocumentation","src":"6168:200:113","text":" @notice Remove ability to renounce ownership\n @dev Renounce ownership should be impossible as long as watchers can freely remove connectors\n and only the owner can add them back"},"functionSelector":"715018a6","id":38606,"implemented":true,"kind":"function","modifiers":[{"id":38603,"kind":"modifierInvocation","modifierName":{"id":38602,"name":"onlyOwner","nameLocations":["6456:9:113"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"6456:9:113"},"nodeType":"ModifierInvocation","src":"6456:9:113"}],"name":"renounceOwnership","nameLocation":"6380:17:113","nodeType":"FunctionDefinition","overrides":{"id":38601,"nodeType":"OverrideSpecifier","overrides":[{"id":38599,"name":"ProposedOwnable","nameLocations":["6424:15:113"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"6424:15:113"},{"id":38600,"name":"WatcherClient","nameLocations":["6441:13:113"],"nodeType":"IdentifierPath","referencedDeclaration":38914,"src":"6441:13:113"}],"src":"6415:40:113"},"parameters":{"id":38598,"nodeType":"ParameterList","parameters":[],"src":"6397:2:113"},"returnParameters":{"id":38604,"nodeType":"ParameterList","parameters":[],"src":"6466:0:113"},"scope":38802,"src":"6371:97:113","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[47879],"body":{"id":38722,"nodeType":"Block","src":"7275:1393:113","statements":[{"expression":{"arguments":[{"id":38622,"name":"_connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38610,"src":"7300:11:113","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}],"id":38621,"name":"validateConnectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48559,"src":"7281:18:113","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_address_$dyn_calldata_ptr_$returns$__$","typeString":"function (address[] calldata) view"}},"id":38623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7281:31:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38624,"nodeType":"ExpressionStatement","src":"7281:31:113"},{"assignments":[38626],"declarations":[{"constant":false,"id":38626,"mutability":"mutable","name":"_numDomains","nameLocation":"7327:11:113","nodeType":"VariableDeclaration","scope":38722,"src":"7319:19:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38625,"name":"uint256","nodeType":"ElementaryTypeName","src":"7319:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38629,"initialValue":{"expression":{"id":38627,"name":"_connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38610,"src":"7341:11:113","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":38628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7353:6:113","memberName":"length","nodeType":"MemberAccess","src":"7341:18:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7319:40:113"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":38639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":38631,"name":"_fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38613,"src":"7450:5:113","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":38632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7456:6:113","memberName":"length","nodeType":"MemberAccess","src":"7450:12:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":38633,"name":"_numDomains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38626,"src":"7466:11:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7450:27:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":38635,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38616,"src":"7481:12:113","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"id":38636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7494:6:113","memberName":"length","nodeType":"MemberAccess","src":"7481:19:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":38637,"name":"_numDomains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38626,"src":"7504:11:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7481:34:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7450:65:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c6964206c656e67746873","id":38640,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7517:17:113","typeDescriptions":{"typeIdentifier":"t_stringliteral_79659e2a9d2f01c1bf48982e1eb3a21b05a6255fb73515db14625380c6699c98","typeString":"literal_string \"invalid lengths\""},"value":"invalid lengths"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_79659e2a9d2f01c1bf48982e1eb3a21b05a6255fb73515db14625380c6699c98","typeString":"literal_string \"invalid lengths\""}],"id":38630,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7442:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":38641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7442:93:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38642,"nodeType":"ExpressionStatement","src":"7442:93:113"},{"assignments":[38644,38646],"declarations":[{"constant":false,"id":38644,"mutability":"mutable","name":"_aggregateRoot","nameLocation":"7622:14:113","nodeType":"VariableDeclaration","scope":38722,"src":"7614:22:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38643,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7614:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":38646,"mutability":"mutable","name":"_count","nameLocation":"7646:6:113","nodeType":"VariableDeclaration","scope":38722,"src":"7638:14:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38645,"name":"uint256","nodeType":"ElementaryTypeName","src":"7638:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38649,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":38647,"name":"dequeue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38801,"src":"7656:7:113","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_bytes32_$_t_uint256_$","typeString":"function () returns (bytes32,uint256)"}},"id":38648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7656:9:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_uint256_$","typeString":"tuple(bytes32,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"7613:52:113"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":38653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38651,"name":"_aggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38644,"src":"7762:14:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":38652,"name":"lastPropagatedRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38427,"src":"7780:18:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7762:36:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726564756e64616e7420726f6f74","id":38654,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7800:16:113","typeDescriptions":{"typeIdentifier":"t_stringliteral_e18affcae4aea5951cc6c3a501fd639ac8a06ed7c7513fba47119a1500ba1b8d","typeString":"literal_string \"redundant root\""},"value":"redundant root"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e18affcae4aea5951cc6c3a501fd639ac8a06ed7c7513fba47119a1500ba1b8d","typeString":"literal_string \"redundant root\""}],"id":38650,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7754:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":38655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7754:63:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38656,"nodeType":"ExpressionStatement","src":"7754:63:113"},{"expression":{"id":38659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38657,"name":"lastPropagatedRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38427,"src":"7823:18:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":38658,"name":"_aggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38644,"src":"7844:14:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7823:35:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":38660,"nodeType":"ExpressionStatement","src":"7823:35:113"},{"assignments":[38662],"declarations":[{"constant":false,"id":38662,"mutability":"mutable","name":"sum","nameLocation":"7873:3:113","nodeType":"VariableDeclaration","scope":38722,"src":"7865:11:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38661,"name":"uint256","nodeType":"ElementaryTypeName","src":"7865:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38665,"initialValue":{"expression":{"id":38663,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7879:3:113","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":38664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7883:5:113","memberName":"value","nodeType":"MemberAccess","src":"7879:9:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7865:23:113"},{"body":{"id":38714,"nodeType":"Block","src":"7928:673:113","statements":[{"clauses":[{"block":{"id":38696,"nodeType":"Block","src":"8183:298:113","statements":[{"expression":{"id":38694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38690,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38662,"src":"8457:3:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"baseExpression":{"id":38691,"name":"_fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38613,"src":"8464:5:113","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":38693,"indexExpression":{"id":38692,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38667,"src":"8470:1:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8464:8:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8457:15:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38695,"nodeType":"ExpressionStatement","src":"8457:15:113"}]},"errorName":"","id":38697,"nodeType":"TryCatchClause","src":"8183:298:113"},{"block":{"id":38707,"nodeType":"Block","src":"8488:67:113","statements":[{"eventCall":{"arguments":[{"baseExpression":{"id":38699,"name":"domains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48424,"src":"8519:7:113","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage","typeString":"uint32[] storage ref"}},"id":38701,"indexExpression":{"id":38700,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38667,"src":"8527:1:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8519:10:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"baseExpression":{"id":38702,"name":"_connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38610,"src":"8531:11:113","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":38704,"indexExpression":{"id":38703,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38667,"src":"8543:1:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8531:14:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":38698,"name":"PropagateFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38413,"src":"8503:15:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint32_$_t_address_$returns$__$","typeString":"function (uint32,address)"}},"id":38705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8503:43:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38706,"nodeType":"EmitStatement","src":"8498:48:113"}]},"errorName":"","id":38708,"nodeType":"TryCatchClause","src":"8482:73:113"}],"externalCall":{"arguments":[{"arguments":[{"id":38684,"name":"_aggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38644,"src":"8143:14:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":38682,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8126:3:113","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":38683,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8130:12:113","memberName":"encodePacked","nodeType":"MemberAccess","src":"8126:16:113","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":38685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8126:32:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"baseExpression":{"id":38686,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38616,"src":"8160:12:113","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"id":38688,"indexExpression":{"id":38687,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38667,"src":"8173:1:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8160:15:113","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"baseExpression":{"id":38673,"name":"_connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38610,"src":"8081:11:113","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":38675,"indexExpression":{"id":38674,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38667,"src":"8093:1:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8081:14:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38672,"name":"IHubConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47819,"src":"8067:13:113","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IHubConnector_$47819_$","typeString":"type(contract IHubConnector)"}},"id":38676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8067:29:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IHubConnector_$47819","typeString":"contract IHubConnector"}},"id":38677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8097:11:113","memberName":"sendMessage","nodeType":"MemberAccess","referencedDeclaration":47818,"src":"8067:41:113","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory,bytes memory) payable external"}},"id":38681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"baseExpression":{"id":38678,"name":"_fees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38613,"src":"8116:5:113","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":38680,"indexExpression":{"id":38679,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38667,"src":"8122:1:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8116:8:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"8067:58:113","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$value","typeString":"function (bytes memory,bytes memory) payable external"}},"id":38689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8067:109:113","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38709,"nodeType":"TryStatement","src":"8055:500:113"},{"id":38713,"nodeType":"UncheckedBlock","src":"8563:32:113","statements":[{"expression":{"id":38711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"8583:3:113","subExpression":{"id":38710,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38667,"src":"8585:1:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":38712,"nodeType":"ExpressionStatement","src":"8583:3:113"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38669,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38667,"src":"7909:1:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":38670,"name":"_numDomains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38626,"src":"7913:11:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7909:15:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38715,"initializationExpression":{"assignments":[38667],"declarations":[{"constant":false,"id":38667,"mutability":"mutable","name":"i","nameLocation":"7906:1:113","nodeType":"VariableDeclaration","scope":38715,"src":"7899:8:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":38666,"name":"uint32","nodeType":"ElementaryTypeName","src":"7899:6:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":38668,"nodeType":"VariableDeclarationStatement","src":"7899:8:113"},"nodeType":"ForStatement","src":"7894:707:113"},{"eventCall":{"arguments":[{"id":38717,"name":"_aggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38644,"src":"8627:14:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":38718,"name":"_count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38646,"src":"8643:6:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38719,"name":"domainsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48427,"src":"8651:11:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":38716,"name":"RootPropagated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38377,"src":"8612:14:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_bytes32_$returns$__$","typeString":"function (bytes32,uint256,bytes32)"}},"id":38720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8612:51:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38721,"nodeType":"EmitStatement","src":"8607:56:113"}]},"documentation":{"id":38607,"nodeType":"StructuredDocumentation","src":"6521:598:113","text":" @notice This is called by relayers to take the current aggregate tree root and propagate it to all\n spoke domains (via their respective hub connectors).\n @dev Should be called by relayers at a regular interval.\n @param _connectors Array of connectors: should match exactly the array of `connectors` in storage;\n used here to reduce gas costs, and keep them static regardless of number of supported domains.\n @param _fees Array of fees in native token for an AMB if required\n @param _encodedData Array of encodedData: extra params for each AMB if required"},"functionSelector":"412e12db","id":38723,"implemented":true,"kind":"function","modifiers":[{"id":38619,"kind":"modifierInvocation","modifierName":{"id":38618,"name":"whenNotPaused","nameLocations":["7261:13:113"],"nodeType":"IdentifierPath","referencedDeclaration":10607,"src":"7261:13:113"},"nodeType":"ModifierInvocation","src":"7261:13:113"}],"name":"propagate","nameLocation":"7131:9:113","nodeType":"FunctionDefinition","parameters":{"id":38617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38610,"mutability":"mutable","name":"_connectors","nameLocation":"7165:11:113","nodeType":"VariableDeclaration","scope":38723,"src":"7146:30:113","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":38608,"name":"address","nodeType":"ElementaryTypeName","src":"7146:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":38609,"nodeType":"ArrayTypeName","src":"7146:9:113","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":38613,"mutability":"mutable","name":"_fees","nameLocation":"7201:5:113","nodeType":"VariableDeclaration","scope":38723,"src":"7182:24:113","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":38611,"name":"uint256","nodeType":"ElementaryTypeName","src":"7182:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38612,"nodeType":"ArrayTypeName","src":"7182:9:113","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":38616,"mutability":"mutable","name":"_encodedData","nameLocation":"7227:12:113","nodeType":"VariableDeclaration","scope":38723,"src":"7212:27:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":38614,"name":"bytes","nodeType":"ElementaryTypeName","src":"7212:5:113","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":38615,"nodeType":"ArrayTypeName","src":"7212:7:113","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"7140:103:113"},"returnParameters":{"id":38620,"nodeType":"ParameterList","parameters":[],"src":"7275:0:113"},"scope":38802,"src":"7122:1546:113","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[47887],"body":{"id":38749,"nodeType":"Block","src":"9313:121:113","statements":[{"assignments":[38737],"declarations":[{"constant":false,"id":38737,"mutability":"mutable","name":"lastIndex","nameLocation":"9327:9:113","nodeType":"VariableDeclaration","scope":38749,"src":"9319:17:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":38736,"name":"uint128","nodeType":"ElementaryTypeName","src":"9319:7:113","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":38742,"initialValue":{"arguments":[{"id":38740,"name":"_inbound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38728,"src":"9367:8:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":38738,"name":"pendingInboundRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38424,"src":"9339:19:113","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage","typeString":"struct QueueLib.Queue storage ref"}},"id":38739,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9359:7:113","memberName":"enqueue","nodeType":"MemberAccess","referencedDeclaration":49298,"src":"9339:27:113","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Queue_$49241_storage_ptr_$_t_bytes32_$returns$_t_uint128_$bound_to$_t_struct$_Queue_$49241_storage_ptr_$","typeString":"function (struct QueueLib.Queue storage pointer,bytes32) returns (uint128)"}},"id":38741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9339:37:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"9319:57:113"},{"eventCall":{"arguments":[{"id":38744,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38726,"src":"9400:7:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":38745,"name":"_inbound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38728,"src":"9409:8:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":38746,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38737,"src":"9419:9:113","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":38743,"name":"RootReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38360,"src":"9387:12:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint32_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (uint32,bytes32,uint256)"}},"id":38747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9387:42:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38748,"nodeType":"EmitStatement","src":"9382:47:113"}]},"documentation":{"id":38724,"nodeType":"StructuredDocumentation","src":"8672:539:113","text":" @notice Accept an inbound root coming from a given domain's hub connector, enqueuing this incoming\n root into the current queue as it awaits the verification period.\n @dev The aggregate tree's root, which will include this inbound root, will be propagated to all spoke\n domains (via `propagate`) on a regular basis assuming the verification period is surpassed without\n dispute.\n @param _domain The source domain of the given root.\n @param _inbound The inbound root coming from the given domain."},"functionSelector":"8e7d93fa","id":38750,"implemented":true,"kind":"function","modifiers":[{"id":38731,"kind":"modifierInvocation","modifierName":{"id":38730,"name":"whenNotPaused","nameLocations":["9276:13:113"],"nodeType":"IdentifierPath","referencedDeclaration":10607,"src":"9276:13:113"},"nodeType":"ModifierInvocation","src":"9276:13:113"},{"arguments":[{"id":38733,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38726,"src":"9304:7:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"id":38734,"kind":"modifierInvocation","modifierName":{"id":38732,"name":"onlyConnector","nameLocations":["9290:13:113"],"nodeType":"IdentifierPath","referencedDeclaration":38447,"src":"9290:13:113"},"nodeType":"ModifierInvocation","src":"9290:22:113"}],"name":"aggregate","nameLocation":"9223:9:113","nodeType":"FunctionDefinition","parameters":{"id":38729,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38726,"mutability":"mutable","name":"_domain","nameLocation":"9240:7:113","nodeType":"VariableDeclaration","scope":38750,"src":"9233:14:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":38725,"name":"uint32","nodeType":"ElementaryTypeName","src":"9233:6:113","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":38728,"mutability":"mutable","name":"_inbound","nameLocation":"9257:8:113","nodeType":"VariableDeclaration","scope":38750,"src":"9249:16:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38727,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9249:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9232:34:113"},"returnParameters":{"id":38735,"nodeType":"ParameterList","parameters":[],"src":"9313:0:113"},"scope":38802,"src":"9214:220:113","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":38800,"nodeType":"Block","src":"9970:655:113","statements":[{"assignments":[38764],"declarations":[{"constant":false,"id":38764,"mutability":"mutable","name":"_verifiedInboundRoots","nameLocation":"10046:21:113","nodeType":"VariableDeclaration","scope":38800,"src":"10029:38:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":38762,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10029:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":38763,"nodeType":"ArrayTypeName","src":"10029:9:113","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":38770,"initialValue":{"arguments":[{"id":38767,"name":"delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38420,"src":"10106:11:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38768,"name":"DEQUEUE_MAX","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38417,"src":"10119:11:113","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":38765,"name":"pendingInboundRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38424,"src":"10070:19:113","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage","typeString":"struct QueueLib.Queue storage ref"}},"id":38766,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10090:15:113","memberName":"dequeueVerified","nodeType":"MemberAccess","referencedDeclaration":49536,"src":"10070:35:113","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Queue_$49241_storage_ptr_$_t_uint256_$_t_uint128_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$bound_to$_t_struct$_Queue_$49241_storage_ptr_$","typeString":"function (struct QueueLib.Queue storage pointer,uint256,uint128) returns (bytes32[] memory)"}},"id":38769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10070:61:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10029:102:113"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":38771,"name":"_verifiedInboundRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38764,"src":"10210:21:113","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":38772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10232:6:113","memberName":"length","nodeType":"MemberAccess","src":"10210:28:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":38773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10242:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10210:33:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38780,"nodeType":"IfStatement","src":"10206:82:113","trueBody":{"id":38779,"nodeType":"Block","src":"10245:43:113","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":38775,"name":"MERKLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38431,"src":"10260:6:113","typeDescriptions":{"typeIdentifier":"t_contract$_MerkleTreeManager_$38317","typeString":"contract MerkleTreeManager"}},"id":38776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10267:12:113","memberName":"rootAndCount","nodeType":"MemberAccess","referencedDeclaration":38120,"src":"10260:19:113","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$_t_uint256_$","typeString":"function () view external returns (bytes32,uint256)"}},"id":38777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10260:21:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_uint256_$","typeString":"tuple(bytes32,uint256)"}},"functionReturnParameters":38759,"id":38778,"nodeType":"Return","src":"10253:28:113"}]}},{"assignments":[38782,38784],"declarations":[{"constant":false,"id":38782,"mutability":"mutable","name":"_aggregateRoot","nameLocation":"10438:14:113","nodeType":"VariableDeclaration","scope":38800,"src":"10430:22:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38781,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10430:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":38784,"mutability":"mutable","name":"_count","nameLocation":"10462:6:113","nodeType":"VariableDeclaration","scope":38800,"src":"10454:14:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38783,"name":"uint256","nodeType":"ElementaryTypeName","src":"10454:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38789,"initialValue":{"arguments":[{"id":38787,"name":"_verifiedInboundRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38764,"src":"10486:21:113","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}],"expression":{"id":38785,"name":"MERKLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38431,"src":"10472:6:113","typeDescriptions":{"typeIdentifier":"t_contract$_MerkleTreeManager_$38317","typeString":"contract MerkleTreeManager"}},"id":38786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10479:6:113","memberName":"insert","nodeType":"MemberAccess","referencedDeclaration":38275,"src":"10472:13:113","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_bytes32_$_t_uint256_$","typeString":"function (bytes32[] memory) external returns (bytes32,uint256)"}},"id":38788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10472:36:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_uint256_$","typeString":"tuple(bytes32,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"10429:79:113"},{"eventCall":{"arguments":[{"id":38791,"name":"_aggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38782,"src":"10536:14:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":38792,"name":"_count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38784,"src":"10552:6:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38793,"name":"_verifiedInboundRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38764,"src":"10560:21:113","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}],"id":38790,"name":"RootsAggregated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38369,"src":"10520:15:113","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$","typeString":"function (bytes32,uint256,bytes32[] memory)"}},"id":38794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10520:62:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38795,"nodeType":"EmitStatement","src":"10515:67:113"},{"expression":{"components":[{"id":38796,"name":"_aggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38782,"src":"10597:14:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":38797,"name":"_count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38784,"src":"10613:6:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":38798,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10596:24:113","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_uint256_$","typeString":"tuple(bytes32,uint256)"}},"functionReturnParameters":38759,"id":38799,"nodeType":"Return","src":"10589:31:113"}]},"documentation":{"id":38751,"nodeType":"StructuredDocumentation","src":"9438:462:113","text":" @notice Dequeue verified inbound roots and insert them into the aggregator tree.\n @dev Will dequeue a fixed maximum amount of roots to prevent out of gas errors. As such, this\n method is public and separate from `propagate` so we can curtail an overloaded queue as needed.\n @dev Reverts if no verified inbound roots are found.\n @return bytes32 The new aggregate root.\n @return uint256 The updated count (number of leaves)."},"functionSelector":"957908d1","id":38801,"implemented":true,"kind":"function","modifiers":[{"id":38754,"kind":"modifierInvocation","modifierName":{"id":38753,"name":"whenNotPaused","nameLocations":["9929:13:113"],"nodeType":"IdentifierPath","referencedDeclaration":10607,"src":"9929:13:113"},"nodeType":"ModifierInvocation","src":"9929:13:113"}],"name":"dequeue","nameLocation":"9912:7:113","nodeType":"FunctionDefinition","parameters":{"id":38752,"nodeType":"ParameterList","parameters":[],"src":"9919:2:113"},"returnParameters":{"id":38759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38756,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38801,"src":"9952:7:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38755,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9952:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":38758,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38801,"src":"9961:7:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38757,"name":"uint256","nodeType":"ElementaryTypeName","src":"9961:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9951:18:113"},"scope":38802,"src":"9903:722:113","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":38803,"src":"715:9912:113","usedErrors":[49697,49699,49701,49703,49705,49707,49709]}],"src":"46:10582:113"},"id":113},"contracts/messaging/WatcherClient.sol":{"ast":{"absolutePath":"contracts/messaging/WatcherClient.sol","exportedSymbols":{"Pausable":[10680],"ProposedOwnable":[49928],"WatcherClient":[38914],"WatcherManager":[39005]},"id":38915,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":38804,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:114"},{"absolutePath":"@openzeppelin/contracts/security/Pausable.sol","file":"@openzeppelin/contracts/security/Pausable.sol","id":38806,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38915,"sourceUnit":10681,"src":"71:71:114","symbolAliases":[{"foreign":{"id":38805,"name":"Pausable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10680,"src":"79:8:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/ProposedOwnable.sol","file":"../shared/ProposedOwnable.sol","id":38808,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38915,"sourceUnit":49929,"src":"144:62:114","symbolAliases":[{"foreign":{"id":38807,"name":"ProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49928,"src":"152:15:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/WatcherManager.sol","file":"./WatcherManager.sol","id":38810,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38915,"sourceUnit":39006,"src":"207:52:114","symbolAliases":[{"foreign":{"id":38809,"name":"WatcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39005,"src":"215:14:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":38812,"name":"ProposedOwnable","nameLocations":["472:15:114"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"472:15:114"},"id":38813,"nodeType":"InheritanceSpecifier","src":"472:15:114"},{"baseName":{"id":38814,"name":"Pausable","nameLocations":["489:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":10680,"src":"489:8:114"},"id":38815,"nodeType":"InheritanceSpecifier","src":"489:8:114"}],"canonicalName":"WatcherClient","contractDependencies":[],"contractKind":"contract","documentation":{"id":38811,"nodeType":"StructuredDocumentation","src":"261:183:114","text":" @notice This contract abstracts the functionality of the watcher manager.\n Contracts can inherit this contract to be able to use the watcher manager's shared watcher set."},"fullyImplemented":true,"id":38914,"linearizedBaseContracts":[38914,10680,11506,49928,50003],"name":"WatcherClient","nameLocation":"455:13:114","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":38816,"nodeType":"StructuredDocumentation","src":"540:110:114","text":" @notice Emitted when the manager address changes\n @param watcherManager The updated manager"},"eventSelector":"c16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c","id":38820,"name":"WatcherManagerChanged","nameLocation":"659:21:114","nodeType":"EventDefinition","parameters":{"id":38819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38818,"indexed":false,"mutability":"mutable","name":"watcherManager","nameLocation":"689:14:114","nodeType":"VariableDeclaration","scope":38820,"src":"681:22:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38817,"name":"address","nodeType":"ElementaryTypeName","src":"681:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"680:24:114"},"src":"653:52:114"},{"constant":false,"documentation":{"id":38821,"nodeType":"StructuredDocumentation","src":"751:157:114","text":" @notice The `WatcherManager` contract governs the watcher allowlist.\n @dev Multiple clients can share a watcher set using the same manager"},"functionSelector":"a792c29b","id":38824,"mutability":"mutable","name":"watcherManager","nameLocation":"933:14:114","nodeType":"VariableDeclaration","scope":38914,"src":"911:36:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_WatcherManager_$39005","typeString":"contract WatcherManager"},"typeName":{"id":38823,"nodeType":"UserDefinedTypeName","pathNode":{"id":38822,"name":"WatcherManager","nameLocations":["911:14:114"],"nodeType":"IdentifierPath","referencedDeclaration":39005,"src":"911:14:114"},"referencedDeclaration":39005,"src":"911:14:114","typeDescriptions":{"typeIdentifier":"t_contract$_WatcherManager_$39005","typeString":"contract WatcherManager"}},"visibility":"public"},{"body":{"id":38837,"nodeType":"Block","src":"1050:59:114","statements":[{"expression":{"id":38835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38831,"name":"watcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38824,"src":"1056:14:114","typeDescriptions":{"typeIdentifier":"t_contract$_WatcherManager_$39005","typeString":"contract WatcherManager"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":38833,"name":"_watcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38826,"src":"1088:15:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38832,"name":"WatcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39005,"src":"1073:14:114","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WatcherManager_$39005_$","typeString":"type(contract WatcherManager)"}},"id":38834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1073:31:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_WatcherManager_$39005","typeString":"contract WatcherManager"}},"src":"1056:48:114","typeDescriptions":{"typeIdentifier":"t_contract$_WatcherManager_$39005","typeString":"contract WatcherManager"}},"id":38836,"nodeType":"ExpressionStatement","src":"1056:48:114"}]},"id":38838,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":38829,"kind":"baseConstructorSpecifier","modifierName":{"id":38828,"name":"ProposedOwnable","nameLocations":["1032:15:114"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"1032:15:114"},"nodeType":"ModifierInvocation","src":"1032:17:114"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":38827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38826,"mutability":"mutable","name":"_watcherManager","nameLocation":"1015:15:114","nodeType":"VariableDeclaration","scope":38838,"src":"1007:23:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38825,"name":"address","nodeType":"ElementaryTypeName","src":"1007:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1006:25:114"},"returnParameters":{"id":38830,"nodeType":"ParameterList","parameters":[],"src":"1050:0:114"},"scope":38914,"src":"995:114:114","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":38851,"nodeType":"Block","src":"1237:75:114","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":38844,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1276:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":38845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1280:6:114","memberName":"sender","nodeType":"MemberAccess","src":"1276:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":38842,"name":"watcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38824,"src":"1251:14:114","typeDescriptions":{"typeIdentifier":"t_contract$_WatcherManager_$39005","typeString":"contract WatcherManager"}},"id":38843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1266:9:114","memberName":"isWatcher","nodeType":"MemberAccess","referencedDeclaration":38933,"src":"1251:24:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":38846,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1251:36:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2177617463686572","id":38847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1289:10:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff","typeString":"literal_string \"!watcher\""},"value":"!watcher"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff","typeString":"literal_string \"!watcher\""}],"id":38841,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1243:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":38848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1243:57:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38849,"nodeType":"ExpressionStatement","src":"1243:57:114"},{"id":38850,"nodeType":"PlaceholderStatement","src":"1306:1:114"}]},"documentation":{"id":38839,"nodeType":"StructuredDocumentation","src":"1154:57:114","text":" @notice Enforces the sender is the watcher"},"id":38852,"name":"onlyWatcher","nameLocation":"1223:11:114","nodeType":"ModifierDefinition","parameters":{"id":38840,"nodeType":"ParameterList","parameters":[],"src":"1234:2:114"},"src":"1214:98:114","virtual":false,"visibility":"internal"},{"body":{"id":38880,"nodeType":"Block","src":"1528:192:114","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":38866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38861,"name":"_watcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38855,"src":"1542:15:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":38864,"name":"watcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38824,"src":"1569:14:114","typeDescriptions":{"typeIdentifier":"t_contract$_WatcherManager_$39005","typeString":"contract WatcherManager"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_WatcherManager_$39005","typeString":"contract WatcherManager"}],"id":38863,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1561:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":38862,"name":"address","nodeType":"ElementaryTypeName","src":"1561:7:114","typeDescriptions":{}}},"id":38865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1561:23:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1542:42:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616c72656164792077617463686572206d616e61676572","id":38867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1586:25:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088","typeString":"literal_string \"already watcher manager\""},"value":"already watcher manager"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088","typeString":"literal_string \"already watcher manager\""}],"id":38860,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1534:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":38868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1534:78:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38869,"nodeType":"ExpressionStatement","src":"1534:78:114"},{"expression":{"id":38874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38870,"name":"watcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38824,"src":"1618:14:114","typeDescriptions":{"typeIdentifier":"t_contract$_WatcherManager_$39005","typeString":"contract WatcherManager"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":38872,"name":"_watcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38855,"src":"1650:15:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38871,"name":"WatcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39005,"src":"1635:14:114","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WatcherManager_$39005_$","typeString":"type(contract WatcherManager)"}},"id":38873,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1635:31:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_WatcherManager_$39005","typeString":"contract WatcherManager"}},"src":"1618:48:114","typeDescriptions":{"typeIdentifier":"t_contract$_WatcherManager_$39005","typeString":"contract WatcherManager"}},"id":38875,"nodeType":"ExpressionStatement","src":"1618:48:114"},{"eventCall":{"arguments":[{"id":38877,"name":"_watcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38855,"src":"1699:15:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38876,"name":"WatcherManagerChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38820,"src":"1677:21:114","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":38878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1677:38:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38879,"nodeType":"EmitStatement","src":"1672:43:114"}]},"documentation":{"id":38853,"nodeType":"StructuredDocumentation","src":"1357:97:114","text":" @notice Owner can enroll a watcher (abilities are defined by inheriting contracts)"},"functionSelector":"d2a3cc71","id":38881,"implemented":true,"kind":"function","modifiers":[{"id":38858,"kind":"modifierInvocation","modifierName":{"id":38857,"name":"onlyOwner","nameLocations":["1518:9:114"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"1518:9:114"},"nodeType":"ModifierInvocation","src":"1518:9:114"}],"name":"setWatcherManager","nameLocation":"1466:17:114","nodeType":"FunctionDefinition","parameters":{"id":38856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38855,"mutability":"mutable","name":"_watcherManager","nameLocation":"1492:15:114","nodeType":"VariableDeclaration","scope":38881,"src":"1484:23:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38854,"name":"address","nodeType":"ElementaryTypeName","src":"1484:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1483:25:114"},"returnParameters":{"id":38859,"nodeType":"ParameterList","parameters":[],"src":"1528:0:114"},"scope":38914,"src":"1457:263:114","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":38892,"nodeType":"Block","src":"1859:21:114","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":38889,"name":"_unpause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10679,"src":"1865:8:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":38890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1865:10:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38891,"nodeType":"ExpressionStatement","src":"1865:10:114"}]},"documentation":{"id":38882,"nodeType":"StructuredDocumentation","src":"1724:83:114","text":" @notice Owner can unpause contracts if fraud is detected by watchers"},"functionSelector":"3f4ba83a","id":38893,"implemented":true,"kind":"function","modifiers":[{"id":38885,"kind":"modifierInvocation","modifierName":{"id":38884,"name":"onlyOwner","nameLocations":["1838:9:114"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"1838:9:114"},"nodeType":"ModifierInvocation","src":"1838:9:114"},{"id":38887,"kind":"modifierInvocation","modifierName":{"id":38886,"name":"whenPaused","nameLocations":["1848:10:114"],"nodeType":"IdentifierPath","referencedDeclaration":10615,"src":"1848:10:114"},"nodeType":"ModifierInvocation","src":"1848:10:114"}],"name":"unpause","nameLocation":"1819:7:114","nodeType":"FunctionDefinition","parameters":{"id":38883,"nodeType":"ParameterList","parameters":[],"src":"1826:2:114"},"returnParameters":{"id":38888,"nodeType":"ParameterList","parameters":[],"src":"1859:0:114"},"scope":38914,"src":"1810:70:114","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[49874],"body":{"id":38900,"nodeType":"Block","src":"2196:2:114","statements":[]},"documentation":{"id":38894,"nodeType":"StructuredDocumentation","src":"1884:246:114","text":" @notice Remove ability to renounce ownership\n @dev Renounce ownership should be impossible as long as only the owner\n is able to unpause the contracts. You can still propose `address(0)`,\n but it will never be accepted."},"functionSelector":"715018a6","id":38901,"implemented":true,"kind":"function","modifiers":[{"id":38898,"kind":"modifierInvocation","modifierName":{"id":38897,"name":"onlyOwner","nameLocations":["2186:9:114"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"2186:9:114"},"nodeType":"ModifierInvocation","src":"2186:9:114"}],"name":"renounceOwnership","nameLocation":"2142:17:114","nodeType":"FunctionDefinition","overrides":{"id":38896,"nodeType":"OverrideSpecifier","overrides":[],"src":"2177:8:114"},"parameters":{"id":38895,"nodeType":"ParameterList","parameters":[],"src":"2159:2:114"},"returnParameters":{"id":38899,"nodeType":"ParameterList","parameters":[],"src":"2196:0:114"},"scope":38914,"src":"2133:65:114","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":38912,"nodeType":"Block","src":"2373:19:114","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":38909,"name":"_pause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10663,"src":"2379:6:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":38910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2379:8:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38911,"nodeType":"ExpressionStatement","src":"2379:8:114"}]},"documentation":{"id":38902,"nodeType":"StructuredDocumentation","src":"2246:72:114","text":" @notice Watchers can pause contracts if fraud is detected"},"functionSelector":"8456cb59","id":38913,"implemented":true,"kind":"function","modifiers":[{"id":38905,"kind":"modifierInvocation","modifierName":{"id":38904,"name":"onlyWatcher","nameLocations":["2347:11:114"],"nodeType":"IdentifierPath","referencedDeclaration":38852,"src":"2347:11:114"},"nodeType":"ModifierInvocation","src":"2347:11:114"},{"id":38907,"kind":"modifierInvocation","modifierName":{"id":38906,"name":"whenNotPaused","nameLocations":["2359:13:114"],"nodeType":"IdentifierPath","referencedDeclaration":10607,"src":"2359:13:114"},"nodeType":"ModifierInvocation","src":"2359:13:114"}],"name":"pause","nameLocation":"2330:5:114","nodeType":"FunctionDefinition","parameters":{"id":38903,"nodeType":"ParameterList","parameters":[],"src":"2335:2:114"},"returnParameters":{"id":38908,"nodeType":"ParameterList","parameters":[],"src":"2373:0:114"},"scope":38914,"src":"2321:71:114","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":38915,"src":"446:1948:114","usedErrors":[49697,49699,49701,49703,49705,49707,49709]}],"src":"46:2349:114"},"id":114},"contracts/messaging/WatcherManager.sol":{"ast":{"absolutePath":"contracts/messaging/WatcherManager.sol","exportedSymbols":{"ProposedOwnable":[49928],"WatcherManager":[39005]},"id":39006,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":38916,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:115"},{"absolutePath":"contracts/shared/ProposedOwnable.sol","file":"../shared/ProposedOwnable.sol","id":38918,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39006,"sourceUnit":49929,"src":"71:62:115","symbolAliases":[{"foreign":{"id":38917,"name":"ProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49928,"src":"79:15:115","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":38920,"name":"ProposedOwnable","nameLocations":["336:15:115"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"336:15:115"},"id":38921,"nodeType":"InheritanceSpecifier","src":"336:15:115"}],"canonicalName":"WatcherManager","contractDependencies":[],"contractKind":"contract","documentation":{"id":38919,"nodeType":"StructuredDocumentation","src":"135:172:115","text":" @notice This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can\n inherit to make use of the same watcher set."},"fullyImplemented":true,"id":39005,"linearizedBaseContracts":[39005,49928,50003],"name":"WatcherManager","nameLocation":"318:14:115","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"bd71030f437353231b6e5bedade573b1e0da5cb6e8bdde37c33c1fea986c29c7","id":38925,"name":"WatcherAdded","nameLocation":"400:12:115","nodeType":"EventDefinition","parameters":{"id":38924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38923,"indexed":false,"mutability":"mutable","name":"watcher","nameLocation":"421:7:115","nodeType":"VariableDeclaration","scope":38925,"src":"413:15:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38922,"name":"address","nodeType":"ElementaryTypeName","src":"413:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"412:17:115"},"src":"394:36:115"},{"anonymous":false,"eventSelector":"fa8eab6357bec870e7048c2413cbaa813236bb29ebac113541a76fef429e94dc","id":38929,"name":"WatcherRemoved","nameLocation":"440:14:115","nodeType":"EventDefinition","parameters":{"id":38928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38927,"indexed":false,"mutability":"mutable","name":"watcher","nameLocation":"463:7:115","nodeType":"VariableDeclaration","scope":38929,"src":"455:15:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38926,"name":"address","nodeType":"ElementaryTypeName","src":"455:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"454:17:115"},"src":"434:38:115"},{"constant":false,"functionSelector":"84785ecd","id":38933,"mutability":"mutable","name":"isWatcher","nameLocation":"550:9:115","nodeType":"VariableDeclaration","scope":39005,"src":"518:41:115","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":38932,"keyType":{"id":38930,"name":"address","nodeType":"ElementaryTypeName","src":"526:7:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"518:24:115","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueType":{"id":38931,"name":"bool","nodeType":"ElementaryTypeName","src":"537:4:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"body":{"id":38943,"nodeType":"Block","src":"639:32:115","statements":[{"expression":{"arguments":[{"expression":{"id":38939,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"655:3:115","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":38940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"659:6:115","memberName":"sender","nodeType":"MemberAccess","src":"655:10:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38938,"name":"_setOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49908,"src":"645:9:115","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":38941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"645:21:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38942,"nodeType":"ExpressionStatement","src":"645:21:115"}]},"id":38944,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":38936,"kind":"baseConstructorSpecifier","modifierName":{"id":38935,"name":"ProposedOwnable","nameLocations":["621:15:115"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"621:15:115"},"nodeType":"ModifierInvocation","src":"621:17:115"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":38934,"nodeType":"ParameterList","parameters":[],"src":"618:2:115"},"returnParameters":{"id":38937,"nodeType":"ParameterList","parameters":[],"src":"639:0:115"},"scope":39005,"src":"607:64:115","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":38970,"nodeType":"Block","src":"912:124:115","statements":[{"expression":{"arguments":[{"id":38956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"926:20:115","subExpression":{"baseExpression":{"id":38953,"name":"isWatcher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38933,"src":"927:9:115","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":38955,"indexExpression":{"id":38954,"name":"_watcher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38947,"src":"937:8:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"927:19:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616c72656164792077617463686572","id":38957,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"948:17:115","typeDescriptions":{"typeIdentifier":"t_stringliteral_b907d927c8ab6270bf39fcacf585b097f2d3028ddd9d1d0922580e4793de1b71","typeString":"literal_string \"already watcher\""},"value":"already watcher"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b907d927c8ab6270bf39fcacf585b097f2d3028ddd9d1d0922580e4793de1b71","typeString":"literal_string \"already watcher\""}],"id":38952,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"918:7:115","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":38958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"918:48:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38959,"nodeType":"ExpressionStatement","src":"918:48:115"},{"expression":{"id":38964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":38960,"name":"isWatcher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38933,"src":"972:9:115","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":38962,"indexExpression":{"id":38961,"name":"_watcher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38947,"src":"982:8:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"972:19:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":38963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"994:4:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"972:26:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38965,"nodeType":"ExpressionStatement","src":"972:26:115"},{"eventCall":{"arguments":[{"id":38967,"name":"_watcher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38947,"src":"1022:8:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38966,"name":"WatcherAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38925,"src":"1009:12:115","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":38968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1009:22:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38969,"nodeType":"EmitStatement","src":"1004:27:115"}]},"documentation":{"id":38945,"nodeType":"StructuredDocumentation","src":"758:94:115","text":" @dev Owner can enroll a watcher (abilities are defined by inheriting contracts)"},"functionSelector":"24bdff8c","id":38971,"implemented":true,"kind":"function","modifiers":[{"id":38950,"kind":"modifierInvocation","modifierName":{"id":38949,"name":"onlyOwner","nameLocations":["902:9:115"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"902:9:115"},"nodeType":"ModifierInvocation","src":"902:9:115"}],"name":"addWatcher","nameLocation":"864:10:115","nodeType":"FunctionDefinition","parameters":{"id":38948,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38947,"mutability":"mutable","name":"_watcher","nameLocation":"883:8:115","nodeType":"VariableDeclaration","scope":38971,"src":"875:16:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38946,"name":"address","nodeType":"ElementaryTypeName","src":"875:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"874:18:115"},"returnParameters":{"id":38951,"nodeType":"ParameterList","parameters":[],"src":"912:0:115"},"scope":39005,"src":"855:181:115","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":38995,"nodeType":"Block","src":"1199:116:115","statements":[{"expression":{"arguments":[{"baseExpression":{"id":38980,"name":"isWatcher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38933,"src":"1213:9:115","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":38982,"indexExpression":{"id":38981,"name":"_watcher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38974,"src":"1223:8:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1213:19:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216578697374","id":38983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1234:8:115","typeDescriptions":{"typeIdentifier":"t_stringliteral_141db340a5766d2c35f2bd7e6d00399af66800794e0975c892a58724345fc018","typeString":"literal_string \"!exist\""},"value":"!exist"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_141db340a5766d2c35f2bd7e6d00399af66800794e0975c892a58724345fc018","typeString":"literal_string \"!exist\""}],"id":38979,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1205:7:115","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":38984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1205:38:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38985,"nodeType":"ExpressionStatement","src":"1205:38:115"},{"expression":{"id":38989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"1249:26:115","subExpression":{"baseExpression":{"id":38986,"name":"isWatcher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38933,"src":"1256:9:115","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":38988,"indexExpression":{"id":38987,"name":"_watcher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38974,"src":"1266:8:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1256:19:115","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38990,"nodeType":"ExpressionStatement","src":"1249:26:115"},{"eventCall":{"arguments":[{"id":38992,"name":"_watcher","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38974,"src":"1301:8:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38991,"name":"WatcherRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38929,"src":"1286:14:115","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":38993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1286:24:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38994,"nodeType":"EmitStatement","src":"1281:29:115"}]},"documentation":{"id":38972,"nodeType":"StructuredDocumentation","src":"1040:96:115","text":" @dev Owner can unenroll a watcher (abilities are defined by inheriting contracts)"},"functionSelector":"ec2b1345","id":38996,"implemented":true,"kind":"function","modifiers":[{"id":38977,"kind":"modifierInvocation","modifierName":{"id":38976,"name":"onlyOwner","nameLocations":["1189:9:115"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"1189:9:115"},"nodeType":"ModifierInvocation","src":"1189:9:115"}],"name":"removeWatcher","nameLocation":"1148:13:115","nodeType":"FunctionDefinition","parameters":{"id":38975,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38974,"mutability":"mutable","name":"_watcher","nameLocation":"1170:8:115","nodeType":"VariableDeclaration","scope":38996,"src":"1162:16:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38973,"name":"address","nodeType":"ElementaryTypeName","src":"1162:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1161:18:115"},"returnParameters":{"id":38978,"nodeType":"ParameterList","parameters":[],"src":"1199:0:115"},"scope":39005,"src":"1139:176:115","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[49874],"body":{"id":39003,"nodeType":"Block","src":"1613:2:115","statements":[]},"documentation":{"id":38997,"nodeType":"StructuredDocumentation","src":"1319:228:115","text":" @notice Remove ability to renounce ownership\n @dev Renounce ownership should be impossible as long as the watcher griefing\n vector exists. You can still propose `address(0)`, but it will never be accepted."},"functionSelector":"715018a6","id":39004,"implemented":true,"kind":"function","modifiers":[{"id":39001,"kind":"modifierInvocation","modifierName":{"id":39000,"name":"onlyOwner","nameLocations":["1603:9:115"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"1603:9:115"},"nodeType":"ModifierInvocation","src":"1603:9:115"}],"name":"renounceOwnership","nameLocation":"1559:17:115","nodeType":"FunctionDefinition","overrides":{"id":38999,"nodeType":"OverrideSpecifier","overrides":[],"src":"1594:8:115"},"parameters":{"id":38998,"nodeType":"ParameterList","parameters":[],"src":"1576:2:115"},"returnParameters":{"id":39002,"nodeType":"ParameterList","parameters":[],"src":"1613:0:115"},"scope":39005,"src":"1550:65:115","stateMutability":"nonpayable","virtual":true,"visibility":"public"}],"scope":39006,"src":"309:1308:115","usedErrors":[49697,49699,49701,49703,49705,49707,49709]}],"src":"46:1572:115"},"id":115},"contracts/messaging/connectors/Connector.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/Connector.sol","exportedSymbols":{"Connector":[39244],"IConnector":[47778],"ProposedOwnable":[49928]},"id":39245,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":39007,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:116"},{"absolutePath":"contracts/shared/ProposedOwnable.sol","file":"../../shared/ProposedOwnable.sol","id":39009,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39245,"sourceUnit":49929,"src":"71:65:116","symbolAliases":[{"foreign":{"id":39008,"name":"ProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49928,"src":"79:15:116","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/IConnector.sol","file":"../interfaces/IConnector.sol","id":39011,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39245,"sourceUnit":47779,"src":"137:56:116","symbolAliases":[{"foreign":{"id":39010,"name":"IConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47778,"src":"145:10:116","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":39013,"name":"ProposedOwnable","nameLocations":["754:15:116"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"754:15:116"},"id":39014,"nodeType":"InheritanceSpecifier","src":"754:15:116"},{"baseName":{"id":39015,"name":"IConnector","nameLocations":["771:10:116"],"nodeType":"IdentifierPath","referencedDeclaration":47778,"src":"771:10:116"},"id":39016,"nodeType":"InheritanceSpecifier","src":"771:10:116"}],"canonicalName":"Connector","contractDependencies":[],"contractKind":"contract","documentation":{"id":39012,"nodeType":"StructuredDocumentation","src":"195:527:116","text":" @title Connector\n @author Connext Labs, Inc.\n @notice This contract has the messaging interface functions used by all connectors.\n @dev This contract stores information about mirror connectors, but can be used as a\n base for contracts that do not have a mirror (i.e. the connector handling messaging on\n mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\n will be empty\n @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\n or `mirrorGas`"},"fullyImplemented":false,"id":39244,"linearizedBaseContracts":[39244,47778,49928,50003],"name":"Connector","nameLocation":"741:9:116","nodeType":"ContractDefinition","nodes":[{"errorSelector":"5b0bf6d4","id":39018,"name":"Connector__processMessage_notUsed","nameLocation":"835:33:116","nodeType":"ErrorDefinition","parameters":{"id":39017,"nodeType":"ParameterList","parameters":[],"src":"868:2:116"},"src":"829:42:116"},{"anonymous":false,"eventSelector":"4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f0","id":39030,"name":"NewConnector","nameLocation":"920:12:116","nodeType":"EventDefinition","parameters":{"id":39029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39020,"indexed":true,"mutability":"mutable","name":"domain","nameLocation":"953:6:116","nodeType":"VariableDeclaration","scope":39030,"src":"938:21:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39019,"name":"uint32","nodeType":"ElementaryTypeName","src":"938:6:116","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":39022,"indexed":true,"mutability":"mutable","name":"mirrorDomain","nameLocation":"980:12:116","nodeType":"VariableDeclaration","scope":39030,"src":"965:27:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39021,"name":"uint32","nodeType":"ElementaryTypeName","src":"965:6:116","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":39024,"indexed":false,"mutability":"mutable","name":"amb","nameLocation":"1006:3:116","nodeType":"VariableDeclaration","scope":39030,"src":"998:11:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39023,"name":"address","nodeType":"ElementaryTypeName","src":"998:7:116","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39026,"indexed":false,"mutability":"mutable","name":"rootManager","nameLocation":"1023:11:116","nodeType":"VariableDeclaration","scope":39030,"src":"1015:19:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39025,"name":"address","nodeType":"ElementaryTypeName","src":"1015:7:116","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39028,"indexed":false,"mutability":"mutable","name":"mirrorConnector","nameLocation":"1048:15:116","nodeType":"VariableDeclaration","scope":39030,"src":"1040:23:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39027,"name":"address","nodeType":"ElementaryTypeName","src":"1040:7:116","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"932:135:116"},"src":"914:154:116"},{"anonymous":false,"eventSelector":"c77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc","id":39036,"name":"MirrorConnectorUpdated","nameLocation":"1078:22:116","nodeType":"EventDefinition","parameters":{"id":39035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39032,"indexed":false,"mutability":"mutable","name":"previous","nameLocation":"1109:8:116","nodeType":"VariableDeclaration","scope":39036,"src":"1101:16:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39031,"name":"address","nodeType":"ElementaryTypeName","src":"1101:7:116","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39034,"indexed":false,"mutability":"mutable","name":"current","nameLocation":"1127:7:116","nodeType":"VariableDeclaration","scope":39036,"src":"1119:15:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39033,"name":"address","nodeType":"ElementaryTypeName","src":"1119:7:116","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1100:35:116"},"src":"1072:64:116"},{"constant":false,"documentation":{"id":39037,"nodeType":"StructuredDocumentation","src":"1187:78:116","text":" @notice The domain of this Messaging (i.e. Connector) contract."},"functionSelector":"52a9674b","id":39039,"mutability":"immutable","name":"DOMAIN","nameLocation":"1292:6:116","nodeType":"VariableDeclaration","scope":39244,"src":"1268:30:116","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39038,"name":"uint32","nodeType":"ElementaryTypeName","src":"1268:6:116","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"public"},{"constant":false,"documentation":{"id":39040,"nodeType":"StructuredDocumentation","src":"1303:57:116","text":" @notice Address of the AMB on this domain."},"functionSelector":"d69f9d61","id":39042,"mutability":"immutable","name":"AMB","nameLocation":"1388:3:116","nodeType":"VariableDeclaration","scope":39244,"src":"1363:28:116","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39041,"name":"address","nodeType":"ElementaryTypeName","src":"1363:7:116","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"documentation":{"id":39043,"nodeType":"StructuredDocumentation","src":"1396:52:116","text":" @notice RootManager contract address."},"functionSelector":"5f61e3ec","id":39045,"mutability":"immutable","name":"ROOT_MANAGER","nameLocation":"1476:12:116","nodeType":"VariableDeclaration","scope":39244,"src":"1451:37:116","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39044,"name":"address","nodeType":"ElementaryTypeName","src":"1451:7:116","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"documentation":{"id":39046,"nodeType":"StructuredDocumentation","src":"1493:91:116","text":" @notice The domain of the corresponding messaging (i.e. Connector) contract."},"functionSelector":"14168416","id":39048,"mutability":"immutable","name":"MIRROR_DOMAIN","nameLocation":"1611:13:116","nodeType":"VariableDeclaration","scope":39244,"src":"1587:37:116","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39047,"name":"uint32","nodeType":"ElementaryTypeName","src":"1587:6:116","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"public"},{"constant":false,"documentation":{"id":39049,"nodeType":"StructuredDocumentation","src":"1629:73:116","text":" @notice Connector on L2 for L1 connectors, and vice versa."},"functionSelector":"cc394283","id":39051,"mutability":"mutable","name":"mirrorConnector","nameLocation":"1720:15:116","nodeType":"VariableDeclaration","scope":39244,"src":"1705:30:116","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39050,"name":"address","nodeType":"ElementaryTypeName","src":"1705:7:116","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"body":{"id":39063,"nodeType":"Block","src":"1877:52:116","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":39058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":39055,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1891:3:116","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":39056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1895:6:116","memberName":"sender","nodeType":"MemberAccess","src":"1891:10:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":39057,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"1905:3:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1891:17:116","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21414d42","id":39059,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1910:6:116","typeDescriptions":{"typeIdentifier":"t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e","typeString":"literal_string \"!AMB\""},"value":"!AMB"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e","typeString":"literal_string \"!AMB\""}],"id":39054,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1883:7:116","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":39060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1883:34:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39061,"nodeType":"ExpressionStatement","src":"1883:34:116"},{"id":39062,"nodeType":"PlaceholderStatement","src":"1923:1:116"}]},"documentation":{"id":39052,"nodeType":"StructuredDocumentation","src":"1782:73:116","text":" @notice Errors if the msg.sender is not the registered AMB"},"id":39064,"name":"onlyAMB","nameLocation":"1867:7:116","nodeType":"ModifierDefinition","parameters":{"id":39053,"nodeType":"ParameterList","parameters":[],"src":"1874:2:116"},"src":"1858:71:116","virtual":false,"visibility":"internal"},{"body":{"id":39076,"nodeType":"Block","src":"2045:222:116","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":39071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":39068,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2212:3:116","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":39069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2216:6:116","memberName":"sender","nodeType":"MemberAccess","src":"2212:10:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":39070,"name":"ROOT_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39045,"src":"2226:12:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2212:26:116","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21726f6f744d616e61676572","id":39072,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2240:14:116","typeDescriptions":{"typeIdentifier":"t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2","typeString":"literal_string \"!rootManager\""},"value":"!rootManager"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2","typeString":"literal_string \"!rootManager\""}],"id":39067,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2204:7:116","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":39073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2204:51:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39074,"nodeType":"ExpressionStatement","src":"2204:51:116"},{"id":39075,"nodeType":"PlaceholderStatement","src":"2261:1:116"}]},"documentation":{"id":39065,"nodeType":"StructuredDocumentation","src":"1933:82:116","text":" @notice Errors if the msg.sender is not the registered ROOT_MANAGER"},"id":39077,"name":"onlyRootManager","nameLocation":"2027:15:116","nodeType":"ModifierDefinition","parameters":{"id":39066,"nodeType":"ParameterList","parameters":[],"src":"2042:2:116"},"src":"2018:249:116","virtual":false,"visibility":"internal"},{"body":{"id":39151,"nodeType":"Block","src":"3011:612:116","statements":[{"expression":{"arguments":[{"expression":{"id":39094,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3048:3:116","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":39095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3052:6:116","memberName":"sender","nodeType":"MemberAccess","src":"3048:10:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39093,"name":"_setOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49908,"src":"3038:9:116","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":39096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3038:21:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39097,"nodeType":"ExpressionStatement","src":"3038:21:116"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":39101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39099,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39080,"src":"3105:7:116","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":39100,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3116:1:116","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3105:12:116","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"656d70747920646f6d61696e","id":39102,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3119:14:116","typeDescriptions":{"typeIdentifier":"t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04","typeString":"literal_string \"empty domain\""},"value":"empty domain"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04","typeString":"literal_string \"empty domain\""}],"id":39098,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3097:7:116","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":39103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3097:37:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39104,"nodeType":"ExpressionStatement","src":"3097:37:116"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":39111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39106,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39086,"src":"3148:12:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":39109,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3172:1:116","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39108,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3164:7:116","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39107,"name":"address","nodeType":"ElementaryTypeName","src":"3164:7:116","typeDescriptions":{}}},"id":39110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3164:10:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3148:26:116","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"656d70747920726f6f744d616e61676572","id":39112,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3176:19:116","typeDescriptions":{"typeIdentifier":"t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1","typeString":"literal_string \"empty rootManager\""},"value":"empty rootManager"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1","typeString":"literal_string \"empty rootManager\""}],"id":39105,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3140:7:116","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":39113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3140:56:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39114,"nodeType":"ExpressionStatement","src":"3140:56:116"},{"expression":{"id":39117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":39115,"name":"DOMAIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39039,"src":"3308:6:116","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":39116,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39080,"src":"3317:7:116","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"3308:16:116","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":39118,"nodeType":"ExpressionStatement","src":"3308:16:116"},{"expression":{"id":39121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":39119,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"3330:3:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":39120,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39084,"src":"3336:4:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3330:10:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39122,"nodeType":"ExpressionStatement","src":"3330:10:116"},{"expression":{"id":39125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":39123,"name":"ROOT_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39045,"src":"3346:12:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":39124,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39086,"src":"3361:12:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3346:27:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39126,"nodeType":"ExpressionStatement","src":"3346:27:116"},{"expression":{"id":39129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":39127,"name":"MIRROR_DOMAIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39048,"src":"3379:13:116","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":39128,"name":"_mirrorDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39082,"src":"3395:13:116","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"3379:29:116","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":39130,"nodeType":"ExpressionStatement","src":"3379:29:116"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":39136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39131,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39088,"src":"3449:16:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":39134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3477:1:116","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39133,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3469:7:116","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39132,"name":"address","nodeType":"ElementaryTypeName","src":"3469:7:116","typeDescriptions":{}}},"id":39135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3469:10:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3449:30:116","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39142,"nodeType":"IfStatement","src":"3445:88:116","trueBody":{"id":39141,"nodeType":"Block","src":"3481:52:116","statements":[{"expression":{"arguments":[{"id":39138,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39088,"src":"3509:16:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39137,"name":"_setMirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39243,"src":"3489:19:116","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":39139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3489:37:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39140,"nodeType":"ExpressionStatement","src":"3489:37:116"}]}},{"eventCall":{"arguments":[{"id":39144,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39080,"src":"3557:7:116","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":39145,"name":"_mirrorDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39082,"src":"3566:13:116","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":39146,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39084,"src":"3581:4:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39147,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39086,"src":"3587:12:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39148,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39088,"src":"3601:16:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":39143,"name":"NewConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39030,"src":"3544:12:116","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint32_$_t_uint32_$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (uint32,uint32,address,address,address)"}},"id":39149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3544:74:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39150,"nodeType":"EmitStatement","src":"3539:79:116"}]},"documentation":{"id":39078,"nodeType":"StructuredDocumentation","src":"2315:539:116","text":" @notice Creates a new HubConnector instance\n @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\n for optimism, there is one connector on optimism and one connector on mainnet)\n @param _domain The domain this connector lives on\n @param _mirrorDomain The spoke domain\n @param _amb The address of the amb on the domain this connector lives on\n @param _rootManager The address of the RootManager on mainnet\n @param _mirrorConnector The address of the spoke connector"},"id":39152,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":39091,"kind":"baseConstructorSpecifier","modifierName":{"id":39090,"name":"ProposedOwnable","nameLocations":["2993:15:116"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"2993:15:116"},"nodeType":"ModifierInvocation","src":"2993:17:116"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":39089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39080,"mutability":"mutable","name":"_domain","nameLocation":"2881:7:116","nodeType":"VariableDeclaration","scope":39152,"src":"2874:14:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39079,"name":"uint32","nodeType":"ElementaryTypeName","src":"2874:6:116","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":39082,"mutability":"mutable","name":"_mirrorDomain","nameLocation":"2901:13:116","nodeType":"VariableDeclaration","scope":39152,"src":"2894:20:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39081,"name":"uint32","nodeType":"ElementaryTypeName","src":"2894:6:116","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":39084,"mutability":"mutable","name":"_amb","nameLocation":"2928:4:116","nodeType":"VariableDeclaration","scope":39152,"src":"2920:12:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39083,"name":"address","nodeType":"ElementaryTypeName","src":"2920:7:116","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39086,"mutability":"mutable","name":"_rootManager","nameLocation":"2946:12:116","nodeType":"VariableDeclaration","scope":39152,"src":"2938:20:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39085,"name":"address","nodeType":"ElementaryTypeName","src":"2938:7:116","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39088,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"2972:16:116","nodeType":"VariableDeclaration","scope":39152,"src":"2964:24:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39087,"name":"address","nodeType":"ElementaryTypeName","src":"2964:7:116","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2868:124:116"},"returnParameters":{"id":39092,"nodeType":"ParameterList","parameters":[],"src":"3011:0:116"},"scope":39244,"src":"2857:766:116","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":39156,"nodeType":"Block","src":"3808:2:116","statements":[]},"documentation":{"id":39153,"nodeType":"StructuredDocumentation","src":"3669:109:116","text":" @notice Connectors may need to receive native asset to handle fees when sending a\n message"},"id":39157,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":39154,"nodeType":"ParameterList","parameters":[],"src":"3788:2:116"},"returnParameters":{"id":39155,"nodeType":"ParameterList","parameters":[],"src":"3808:0:116"},"scope":39244,"src":"3781:29:116","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":39169,"nodeType":"Block","src":"4010:48:116","statements":[{"expression":{"arguments":[{"id":39166,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39160,"src":"4036:16:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39165,"name":"_setMirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39243,"src":"4016:19:116","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":39167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4016:37:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39168,"nodeType":"ExpressionStatement","src":"4016:37:116"}]},"documentation":{"id":39158,"nodeType":"StructuredDocumentation","src":"3862:74:116","text":" @notice Sets the address of the l2Connector for this domain"},"functionSelector":"5bd11efc","id":39170,"implemented":true,"kind":"function","modifiers":[{"id":39163,"kind":"modifierInvocation","modifierName":{"id":39162,"name":"onlyOwner","nameLocations":["4000:9:116"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"4000:9:116"},"nodeType":"ModifierInvocation","src":"4000:9:116"}],"name":"setMirrorConnector","nameLocation":"3948:18:116","nodeType":"FunctionDefinition","parameters":{"id":39161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39160,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"3975:16:116","nodeType":"VariableDeclaration","scope":39170,"src":"3967:24:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39159,"name":"address","nodeType":"ElementaryTypeName","src":"3967:7:116","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3966:26:116"},"returnParameters":{"id":39164,"nodeType":"ParameterList","parameters":[],"src":"4010:0:116"},"scope":39244,"src":"3939:119:116","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[47770],"body":{"id":39188,"nodeType":"Block","src":"4331:79:116","statements":[{"expression":{"arguments":[{"id":39179,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39173,"src":"4353:5:116","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":39178,"name":"_processMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39220,"src":"4337:15:116","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory)"}},"id":39180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4337:22:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39181,"nodeType":"ExpressionStatement","src":"4337:22:116"},{"eventCall":{"arguments":[{"id":39183,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39173,"src":"4387:5:116","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"id":39184,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4394:3:116","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":39185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4398:6:116","memberName":"sender","nodeType":"MemberAccess","src":"4394:10:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":39182,"name":"MessageProcessed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47765,"src":"4370:16:116","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_address_$returns$__$","typeString":"function (bytes memory,address)"}},"id":39186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4370:35:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39187,"nodeType":"EmitStatement","src":"4365:40:116"}]},"documentation":{"id":39171,"nodeType":"StructuredDocumentation","src":"4111:148:116","text":" @notice Processes a message received by an AMB\n @dev This is called by AMBs to process messages originating from mirror connector"},"functionSelector":"4ff746f6","id":39189,"implemented":true,"kind":"function","modifiers":[{"id":39176,"kind":"modifierInvocation","modifierName":{"id":39175,"name":"onlyAMB","nameLocations":["4323:7:116"],"nodeType":"IdentifierPath","referencedDeclaration":39064,"src":"4323:7:116"},"nodeType":"ModifierInvocation","src":"4323:7:116"}],"name":"processMessage","nameLocation":"4271:14:116","nodeType":"FunctionDefinition","parameters":{"id":39174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39173,"mutability":"mutable","name":"_data","nameLocation":"4299:5:116","nodeType":"VariableDeclaration","scope":39189,"src":"4286:18:116","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":39172,"name":"bytes","nodeType":"ElementaryTypeName","src":"4286:5:116","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4285:20:116"},"returnParameters":{"id":39177,"nodeType":"ParameterList","parameters":[],"src":"4331:0:116"},"scope":39244,"src":"4262:148:116","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[47777],"body":{"id":39201,"nodeType":"Block","src":"4555:42:116","statements":[{"expression":{"arguments":[{"id":39198,"name":"_expected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39192,"src":"4582:9:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39197,"name":"_verifySender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39228,"src":"4568:13:116","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_bool_$","typeString":"function (address) returns (bool)"}},"id":39199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4568:24:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":39196,"id":39200,"nodeType":"Return","src":"4561:31:116"}]},"documentation":{"id":39190,"nodeType":"StructuredDocumentation","src":"4414:73:116","text":" @notice Checks the cross domain sender for a given address"},"functionSelector":"db1b7659","id":39202,"implemented":true,"kind":"function","modifiers":[],"name":"verifySender","nameLocation":"4499:12:116","nodeType":"FunctionDefinition","parameters":{"id":39193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39192,"mutability":"mutable","name":"_expected","nameLocation":"4520:9:116","nodeType":"VariableDeclaration","scope":39202,"src":"4512:17:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39191,"name":"address","nodeType":"ElementaryTypeName","src":"4512:7:116","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4511:19:116"},"returnParameters":{"id":39196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39195,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39202,"src":"4549:4:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":39194,"name":"bool","nodeType":"ElementaryTypeName","src":"4549:4:116","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4548:6:116"},"scope":39244,"src":"4490:107:116","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39203,"nodeType":"StructuredDocumentation","src":"4651:326:116","text":" @notice This function is used by the Connext contract on the l2 domain to send a message to the\n l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\n @param _data The contents of the message\n @param _encodedData Data used to send the message; specific to connector"},"id":39210,"implemented":false,"kind":"function","modifiers":[],"name":"_sendMessage","nameLocation":"4989:12:116","nodeType":"FunctionDefinition","parameters":{"id":39208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39205,"mutability":"mutable","name":"_data","nameLocation":"5015:5:116","nodeType":"VariableDeclaration","scope":39210,"src":"5002:18:116","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":39204,"name":"bytes","nodeType":"ElementaryTypeName","src":"5002:5:116","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":39207,"mutability":"mutable","name":"_encodedData","nameLocation":"5035:12:116","nodeType":"VariableDeclaration","scope":39210,"src":"5022:25:116","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":39206,"name":"bytes","nodeType":"ElementaryTypeName","src":"5022:5:116","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5001:47:116"},"returnParameters":{"id":39209,"nodeType":"ParameterList","parameters":[],"src":"5065:0:116"},"scope":39244,"src":"4980:86:116","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":39219,"nodeType":"Block","src":"5296:191:116","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":39216,"name":"Connector__processMessage_notUsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39018,"src":"5447:33:116","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":39217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5447:35:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39218,"nodeType":"RevertStatement","src":"5440:42:116"}]},"documentation":{"id":39211,"nodeType":"StructuredDocumentation","src":"5070:147:116","text":" @notice This function is used by the AMBs to handle incoming messages. Should store the latest\n root generated on the l2 domain."},"id":39220,"implemented":true,"kind":"function","modifiers":[],"name":"_processMessage","nameLocation":"5229:15:116","nodeType":"FunctionDefinition","parameters":{"id":39214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39213,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39220,"src":"5250:12:116","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":39212,"name":"bytes","nodeType":"ElementaryTypeName","src":"5250:5:116","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5244:34:116"},"returnParameters":{"id":39215,"nodeType":"ParameterList","parameters":[],"src":"5296:0:116"},"scope":39244,"src":"5220:267:116","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"documentation":{"id":39221,"nodeType":"StructuredDocumentation","src":"5491:216:116","text":" @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\n is the expected address.\n @dev Should be overridden by the implementing Connector contract."},"id":39228,"implemented":false,"kind":"function","modifiers":[],"name":"_verifySender","nameLocation":"5719:13:116","nodeType":"FunctionDefinition","parameters":{"id":39224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39223,"mutability":"mutable","name":"_expected","nameLocation":"5741:9:116","nodeType":"VariableDeclaration","scope":39228,"src":"5733:17:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39222,"name":"address","nodeType":"ElementaryTypeName","src":"5733:7:116","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5732:19:116"},"returnParameters":{"id":39227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39226,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39228,"src":"5778:4:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":39225,"name":"bool","nodeType":"ElementaryTypeName","src":"5778:4:116","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5777:6:116"},"scope":39244,"src":"5710:74:116","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":39242,"nodeType":"Block","src":"5910:113:116","statements":[{"eventCall":{"arguments":[{"id":39234,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"5944:15:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39235,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39230,"src":"5961:16:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":39233,"name":"MirrorConnectorUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39036,"src":"5921:22:116","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":39236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5921:57:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39237,"nodeType":"EmitStatement","src":"5916:62:116"},{"expression":{"id":39240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":39238,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"5984:15:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":39239,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39230,"src":"6002:16:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5984:34:116","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39241,"nodeType":"ExpressionStatement","src":"5984:34:116"}]},"id":39243,"implemented":true,"kind":"function","modifiers":[],"name":"_setMirrorConnector","nameLocation":"5847:19:116","nodeType":"FunctionDefinition","parameters":{"id":39231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39230,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"5875:16:116","nodeType":"VariableDeclaration","scope":39243,"src":"5867:24:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39229,"name":"address","nodeType":"ElementaryTypeName","src":"5867:7:116","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5866:26:116"},"returnParameters":{"id":39232,"nodeType":"ParameterList","parameters":[],"src":"5910:0:116"},"scope":39244,"src":"5838:185:116","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":39245,"src":"723:5302:116","usedErrors":[39018,49697,49699,49701,49703,49705,49707,49709]}],"src":"46:5980:116"},"id":116},"contracts/messaging/connectors/ConnectorManager.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/ConnectorManager.sol","exportedSymbols":{"ConnectorManager":[39292],"IConnectorManager":[47805],"IOutbox":[47864]},"id":39293,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":39246,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:117"},{"absolutePath":"contracts/messaging/interfaces/IConnectorManager.sol","file":"../interfaces/IConnectorManager.sol","id":39248,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39293,"sourceUnit":47806,"src":"71:70:117","symbolAliases":[{"foreign":{"id":39247,"name":"IConnectorManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47805,"src":"79:17:117","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/IOutbox.sol","file":"../interfaces/IOutbox.sol","id":39250,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39293,"sourceUnit":47865,"src":"142:50:117","symbolAliases":[{"foreign":{"id":39249,"name":"IOutbox","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47864,"src":"150:7:117","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":39252,"name":"IConnectorManager","nameLocations":["673:17:117"],"nodeType":"IdentifierPath","referencedDeclaration":47805,"src":"673:17:117"},"id":39253,"nodeType":"InheritanceSpecifier","src":"673:17:117"}],"canonicalName":"ConnectorManager","contractDependencies":[],"contractKind":"contract","documentation":{"id":39251,"nodeType":"StructuredDocumentation","src":"194:440:117","text":" @notice This is an interface to allow the `Messaging` contract to be used\n as a `XappConnectionManager` on all router contracts.\n @dev Each nomad router contract has a `XappConnectionClient`, which references a\n XappConnectionManager to get the `Home` (outbox) and approved `Replica` (inbox)\n instances. At any point the client can replace the manager it's pointing to,\n changing the underlying messaging connection."},"fullyImplemented":false,"id":39292,"linearizedBaseContracts":[39292,47805],"name":"ConnectorManager","nameLocation":"653:16:117","nodeType":"ContractDefinition","nodes":[{"body":{"id":39256,"nodeType":"Block","src":"709:2:117","statements":[]},"id":39257,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":39254,"nodeType":"ParameterList","parameters":[],"src":"706:2:117"},"returnParameters":{"id":39255,"nodeType":"ParameterList","parameters":[],"src":"709:0:117"},"scope":39292,"src":"695:16:117","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[47790],"body":{"id":39270,"nodeType":"Block","src":"761:40:117","statements":[{"expression":{"arguments":[{"arguments":[{"id":39266,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"790:4:117","typeDescriptions":{"typeIdentifier":"t_contract$_ConnectorManager_$39292","typeString":"contract ConnectorManager"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ConnectorManager_$39292","typeString":"contract ConnectorManager"}],"id":39265,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"782:7:117","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39264,"name":"address","nodeType":"ElementaryTypeName","src":"782:7:117","typeDescriptions":{}}},"id":39267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"782:13:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39263,"name":"IOutbox","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47864,"src":"774:7:117","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IOutbox_$47864_$","typeString":"type(contract IOutbox)"}},"id":39268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"774:22:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IOutbox_$47864","typeString":"contract IOutbox"}},"functionReturnParameters":39262,"id":39269,"nodeType":"Return","src":"767:29:117"}]},"functionSelector":"9fa92f9d","id":39271,"implemented":true,"kind":"function","modifiers":[],"name":"home","nameLocation":"724:4:117","nodeType":"FunctionDefinition","parameters":{"id":39258,"nodeType":"ParameterList","parameters":[],"src":"728:2:117"},"returnParameters":{"id":39262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39261,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39271,"src":"752:7:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IOutbox_$47864","typeString":"contract IOutbox"},"typeName":{"id":39260,"nodeType":"UserDefinedTypeName","pathNode":{"id":39259,"name":"IOutbox","nameLocations":["752:7:117"],"nodeType":"IdentifierPath","referencedDeclaration":47864,"src":"752:7:117"},"referencedDeclaration":47864,"src":"752:7:117","typeDescriptions":{"typeIdentifier":"t_contract$_IOutbox_$47864","typeString":"contract IOutbox"}},"visibility":"internal"}],"src":"751:9:117"},"scope":39292,"src":"715:86:117","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[47798],"body":{"id":39285,"nodeType":"Block","src":"878:52:117","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":39283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39278,"name":"_potentialReplica","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39273,"src":"891:17:117","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":39281,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"920:4:117","typeDescriptions":{"typeIdentifier":"t_contract$_ConnectorManager_$39292","typeString":"contract ConnectorManager"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ConnectorManager_$39292","typeString":"contract ConnectorManager"}],"id":39280,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"912:7:117","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39279,"name":"address","nodeType":"ElementaryTypeName","src":"912:7:117","typeDescriptions":{}}},"id":39282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"912:13:117","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"891:34:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":39277,"id":39284,"nodeType":"Return","src":"884:41:117"}]},"functionSelector":"5190bc53","id":39286,"implemented":true,"kind":"function","modifiers":[],"name":"isReplica","nameLocation":"814:9:117","nodeType":"FunctionDefinition","parameters":{"id":39274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39273,"mutability":"mutable","name":"_potentialReplica","nameLocation":"832:17:117","nodeType":"VariableDeclaration","scope":39286,"src":"824:25:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39272,"name":"address","nodeType":"ElementaryTypeName","src":"824:7:117","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"823:27:117"},"returnParameters":{"id":39277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39276,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39286,"src":"872:4:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":39275,"name":"bool","nodeType":"ElementaryTypeName","src":"872:4:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"871:6:117"},"scope":39292,"src":"805:125:117","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[47804],"functionSelector":"8d3638f4","id":39291,"implemented":false,"kind":"function","modifiers":[],"name":"localDomain","nameLocation":"943:11:117","nodeType":"FunctionDefinition","parameters":{"id":39287,"nodeType":"ParameterList","parameters":[],"src":"954:2:117"},"returnParameters":{"id":39290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39289,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39291,"src":"988:6:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39288,"name":"uint32","nodeType":"ElementaryTypeName","src":"988:6:117","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"987:8:117"},"scope":39292,"src":"934:62:117","stateMutability":"view","virtual":true,"visibility":"external"}],"scope":39293,"src":"635:363:117","usedErrors":[]}],"src":"46:953:117"},"id":117},"contracts/messaging/connectors/GasCap.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/GasCap.sol","exportedSymbols":{"GasCap":[39367],"ProposedOwnable":[49928]},"id":39368,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":39294,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:118"},{"absolutePath":"contracts/shared/ProposedOwnable.sol","file":"../../shared/ProposedOwnable.sol","id":39296,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39368,"sourceUnit":49929,"src":"71:65:118","symbolAliases":[{"foreign":{"id":39295,"name":"ProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49928,"src":"79:15:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":39297,"name":"ProposedOwnable","nameLocations":["166:15:118"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"166:15:118"},"id":39298,"nodeType":"InheritanceSpecifier","src":"166:15:118"}],"canonicalName":"GasCap","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":39367,"linearizedBaseContracts":[39367,49928,50003],"name":"GasCap","nameLocation":"156:6:118","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":39299,"nodeType":"StructuredDocumentation","src":"225:224:118","text":" @notice The gnosis amb requires destination gas to be specified on the origin.\n The gas used will be passed in by the relayer to allow for real-time estimates,\n but will be capped at the admin-set cap."},"id":39301,"mutability":"mutable","name":"gasCap","nameLocation":"460:6:118","nodeType":"VariableDeclaration","scope":39367,"src":"452:14:118","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39300,"name":"uint256","nodeType":"ElementaryTypeName","src":"452:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"anonymous":false,"documentation":{"id":39302,"nodeType":"StructuredDocumentation","src":"510:139:118","text":" @notice Emitted when admin updates the gas cap\n @param _previous The starting value\n @param _updated The final value"},"eventSelector":"877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5","id":39308,"name":"GasCapUpdated","nameLocation":"658:13:118","nodeType":"EventDefinition","parameters":{"id":39307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39304,"indexed":false,"mutability":"mutable","name":"_previous","nameLocation":"680:9:118","nodeType":"VariableDeclaration","scope":39308,"src":"672:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39303,"name":"uint256","nodeType":"ElementaryTypeName","src":"672:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39306,"indexed":false,"mutability":"mutable","name":"_updated","nameLocation":"699:8:118","nodeType":"VariableDeclaration","scope":39308,"src":"691:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39305,"name":"uint256","nodeType":"ElementaryTypeName","src":"691:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"671:37:118"},"src":"652:57:118"},{"body":{"id":39317,"nodeType":"Block","src":"785:30:118","statements":[{"expression":{"arguments":[{"id":39314,"name":"_gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39310,"src":"802:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":39313,"name":"_setGasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39346,"src":"791:10:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":39315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"791:19:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39316,"nodeType":"ExpressionStatement","src":"791:19:118"}]},"id":39318,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":39311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39310,"mutability":"mutable","name":"_gasCap","nameLocation":"776:7:118","nodeType":"VariableDeclaration","scope":39318,"src":"768:15:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39309,"name":"uint256","nodeType":"ElementaryTypeName","src":"768:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"767:17:118"},"returnParameters":{"id":39312,"nodeType":"ParameterList","parameters":[],"src":"785:0:118"},"scope":39367,"src":"756:59:118","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":39329,"nodeType":"Block","src":"913:30:118","statements":[{"expression":{"arguments":[{"id":39326,"name":"_gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39320,"src":"930:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":39325,"name":"_setGasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39346,"src":"919:10:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":39327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"919:19:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39328,"nodeType":"ExpressionStatement","src":"919:19:118"}]},"functionSelector":"7850b020","id":39330,"implemented":true,"kind":"function","modifiers":[{"id":39323,"kind":"modifierInvocation","modifierName":{"id":39322,"name":"onlyOwner","nameLocations":["903:9:118"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"903:9:118"},"nodeType":"ModifierInvocation","src":"903:9:118"}],"name":"setGasCap","nameLocation":"869:9:118","nodeType":"FunctionDefinition","parameters":{"id":39321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39320,"mutability":"mutable","name":"_gasCap","nameLocation":"887:7:118","nodeType":"VariableDeclaration","scope":39330,"src":"879:15:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39319,"name":"uint256","nodeType":"ElementaryTypeName","src":"879:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"878:17:118"},"returnParameters":{"id":39324,"nodeType":"ParameterList","parameters":[],"src":"913:0:118"},"scope":39367,"src":"860:83:118","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":39345,"nodeType":"Block","src":"1135:68:118","statements":[{"eventCall":{"arguments":[{"id":39337,"name":"gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39301,"src":"1160:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":39338,"name":"_gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39333,"src":"1168:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":39336,"name":"GasCapUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39308,"src":"1146:13:118","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":39339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1146:30:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39340,"nodeType":"EmitStatement","src":"1141:35:118"},{"expression":{"id":39343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":39341,"name":"gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39301,"src":"1182:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":39342,"name":"_gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39333,"src":"1191:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1182:16:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39344,"nodeType":"ExpressionStatement","src":"1182:16:118"}]},"documentation":{"id":39331,"nodeType":"StructuredDocumentation","src":"992:94:118","text":" @notice Used (by admin) to update the gas cap\n @param _gasCap The new value"},"id":39346,"implemented":true,"kind":"function","modifiers":[],"name":"_setGasCap","nameLocation":"1098:10:118","nodeType":"FunctionDefinition","parameters":{"id":39334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39333,"mutability":"mutable","name":"_gasCap","nameLocation":"1117:7:118","nodeType":"VariableDeclaration","scope":39346,"src":"1109:15:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39332,"name":"uint256","nodeType":"ElementaryTypeName","src":"1109:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1108:17:118"},"returnParameters":{"id":39335,"nodeType":"ParameterList","parameters":[],"src":"1135:0:118"},"scope":39367,"src":"1089:114:118","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":39365,"nodeType":"Block","src":"1423:74:118","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":39356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39354,"name":"_gas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39349,"src":"1433:4:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":39355,"name":"gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39301,"src":"1440:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1433:13:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39362,"nodeType":"IfStatement","src":"1429:47:118","trueBody":{"id":39361,"nodeType":"Block","src":"1448:28:118","statements":[{"expression":{"id":39359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":39357,"name":"_gas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39349,"src":"1456:4:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":39358,"name":"gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39301,"src":"1463:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1456:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39360,"nodeType":"ExpressionStatement","src":"1456:13:118"}]}},{"expression":{"id":39363,"name":"_gas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39349,"src":"1488:4:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":39353,"id":39364,"nodeType":"Return","src":"1481:11:118"}]},"documentation":{"id":39347,"nodeType":"StructuredDocumentation","src":"1207:150:118","text":" @notice Used to get the gas to use. Will be the original value IFF it\n is less than the cap\n @param _gas The proposed gas value"},"id":39366,"implemented":true,"kind":"function","modifiers":[],"name":"_getGas","nameLocation":"1369:7:118","nodeType":"FunctionDefinition","parameters":{"id":39350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39349,"mutability":"mutable","name":"_gas","nameLocation":"1385:4:118","nodeType":"VariableDeclaration","scope":39366,"src":"1377:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39348,"name":"uint256","nodeType":"ElementaryTypeName","src":"1377:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1376:14:118"},"returnParameters":{"id":39353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39352,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39366,"src":"1414:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39351,"name":"uint256","nodeType":"ElementaryTypeName","src":"1414:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1413:9:118"},"scope":39367,"src":"1360:137:118","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":39368,"src":"138:1361:118","usedErrors":[49697,49699,49701,49703,49705,49707,49709]}],"src":"46:1454:118"},"id":118},"contracts/messaging/connectors/HubConnector.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/HubConnector.sol","exportedSymbols":{"Connector":[39244],"HubConnector":[39420]},"id":39421,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":39369,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:119"},{"absolutePath":"contracts/messaging/connectors/Connector.sol","file":"./Connector.sol","id":39371,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39421,"sourceUnit":39245,"src":"71:42:119","symbolAliases":[{"foreign":{"id":39370,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"79:9:119","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":39373,"name":"Connector","nameLocations":["653:9:119"],"nodeType":"IdentifierPath","referencedDeclaration":39244,"src":"653:9:119"},"id":39374,"nodeType":"InheritanceSpecifier","src":"653:9:119"}],"canonicalName":"HubConnector","contractDependencies":[],"contractKind":"contract","documentation":{"id":39372,"nodeType":"StructuredDocumentation","src":"115:503:119","text":" @title HubConnector\n @author Connext Labs, Inc.\n @notice This contract implements the messaging functions needed on the hub-side of a given AMB.\n The HubConnector has a limited set of functionality compared to the SpokeConnector, namely that\n it contains no logic to store or prove messages.\n @dev This contract should be deployed on the hub-side of an AMB (i.e. on L1), and contracts\n which extend this should implement the virtual functions defined in the BaseConnector class"},"fullyImplemented":false,"id":39420,"linearizedBaseContracts":[39420,39244,47778,49928,50003],"name":"HubConnector","nameLocation":"637:12:119","nodeType":"ContractDefinition","nodes":[{"body":{"id":39395,"nodeType":"Block","src":"1417:2:119","statements":[]},"documentation":{"id":39375,"nodeType":"StructuredDocumentation","src":"667:539:119","text":" @notice Creates a new HubConnector instance\n @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\n for optimism, there is one connector on optimism and one connector on mainnet)\n @param _domain The domain this connector lives on\n @param _mirrorDomain The spoke domain\n @param _amb The address of the amb on the domain this connector lives on\n @param _rootManager The address of the RootManager on mainnet\n @param _mirrorConnector The address of the spoke connector"},"id":39396,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":39388,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39377,"src":"1355:7:119","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":39389,"name":"_mirrorDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39379,"src":"1364:13:119","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":39390,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39381,"src":"1379:4:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39391,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39383,"src":"1385:12:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39392,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39385,"src":"1399:16:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":39393,"kind":"baseConstructorSpecifier","modifierName":{"id":39387,"name":"Connector","nameLocations":["1345:9:119"],"nodeType":"IdentifierPath","referencedDeclaration":39244,"src":"1345:9:119"},"nodeType":"ModifierInvocation","src":"1345:71:119"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":39386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39377,"mutability":"mutable","name":"_domain","nameLocation":"1233:7:119","nodeType":"VariableDeclaration","scope":39396,"src":"1226:14:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39376,"name":"uint32","nodeType":"ElementaryTypeName","src":"1226:6:119","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":39379,"mutability":"mutable","name":"_mirrorDomain","nameLocation":"1253:13:119","nodeType":"VariableDeclaration","scope":39396,"src":"1246:20:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39378,"name":"uint32","nodeType":"ElementaryTypeName","src":"1246:6:119","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":39381,"mutability":"mutable","name":"_amb","nameLocation":"1280:4:119","nodeType":"VariableDeclaration","scope":39396,"src":"1272:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39380,"name":"address","nodeType":"ElementaryTypeName","src":"1272:7:119","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39383,"mutability":"mutable","name":"_rootManager","nameLocation":"1298:12:119","nodeType":"VariableDeclaration","scope":39396,"src":"1290:20:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39382,"name":"address","nodeType":"ElementaryTypeName","src":"1290:7:119","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39385,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"1324:16:119","nodeType":"VariableDeclaration","scope":39396,"src":"1316:24:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39384,"name":"address","nodeType":"ElementaryTypeName","src":"1316:7:119","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1220:124:119"},"returnParameters":{"id":39394,"nodeType":"ParameterList","parameters":[],"src":"1417:0:119"},"scope":39420,"src":"1209:210:119","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":39418,"nodeType":"Block","src":"1715:99:119","statements":[{"expression":{"arguments":[{"id":39407,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39399,"src":"1734:5:119","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":39408,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39401,"src":"1741:12:119","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":39406,"name":"_sendMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39210,"src":"1721:12:119","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory,bytes memory)"}},"id":39409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1721:33:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39410,"nodeType":"ExpressionStatement","src":"1721:33:119"},{"eventCall":{"arguments":[{"id":39412,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39399,"src":"1777:5:119","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":39413,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39401,"src":"1784:12:119","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"id":39414,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1798:3:119","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":39415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1802:6:119","memberName":"sender","nodeType":"MemberAccess","src":"1798:10:119","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":39411,"name":"MessageSent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47758,"src":"1765:11:119","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_address_$returns$__$","typeString":"function (bytes memory,bytes memory,address)"}},"id":39416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1765:44:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39417,"nodeType":"EmitStatement","src":"1760:49:119"}]},"documentation":{"id":39397,"nodeType":"StructuredDocumentation","src":"1465:146:119","text":" @notice Sends a message over the amb\n @dev This is called by the root manager *only* on mainnet to propagate the aggregate root"},"functionSelector":"48e6fa23","id":39419,"implemented":true,"kind":"function","modifiers":[{"id":39404,"kind":"modifierInvocation","modifierName":{"id":39403,"name":"onlyRootManager","nameLocations":["1699:15:119"],"nodeType":"IdentifierPath","referencedDeclaration":39077,"src":"1699:15:119"},"nodeType":"ModifierInvocation","src":"1699:15:119"}],"name":"sendMessage","nameLocation":"1623:11:119","nodeType":"FunctionDefinition","parameters":{"id":39402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39399,"mutability":"mutable","name":"_data","nameLocation":"1648:5:119","nodeType":"VariableDeclaration","scope":39419,"src":"1635:18:119","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":39398,"name":"bytes","nodeType":"ElementaryTypeName","src":"1635:5:119","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":39401,"mutability":"mutable","name":"_encodedData","nameLocation":"1668:12:119","nodeType":"VariableDeclaration","scope":39419,"src":"1655:25:119","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":39400,"name":"bytes","nodeType":"ElementaryTypeName","src":"1655:5:119","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1634:47:119"},"returnParameters":{"id":39405,"nodeType":"ParameterList","parameters":[],"src":"1715:0:119"},"scope":39420,"src":"1614:200:119","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":39421,"src":"619:1197:119","usedErrors":[39018,49697,49699,49701,49703,49705,49707,49709]}],"src":"46:1771:119"},"id":119},"contracts/messaging/connectors/SpokeConnector.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/SpokeConnector.sol","exportedSymbols":{"Address":[11484],"Connector":[39244],"ConnectorManager":[39292],"ExcessivelySafeCall":[50104],"MerkleLib":[48999],"MerkleTreeManager":[38317],"Message":[49221],"ProposedOwnable":[49928],"RateLimited":[49688],"ReentrancyGuard":[10734],"SpokeConnector":[40428],"TypeCasts":[50188],"TypedMemView":[51265],"WatcherClient":[38914]},"id":40429,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":39422,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:120"},{"absolutePath":"@openzeppelin/contracts/security/ReentrancyGuard.sol","file":"@openzeppelin/contracts/security/ReentrancyGuard.sol","id":39424,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40429,"sourceUnit":10735,"src":"71:85:120","symbolAliases":[{"foreign":{"id":39423,"name":"ReentrancyGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10734,"src":"79:15:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":39426,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40429,"sourceUnit":11485,"src":"157:66:120","symbolAliases":[{"foreign":{"id":39425,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"165:7:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/libraries/TypedMemView.sol","file":"../../shared/libraries/TypedMemView.sol","id":39428,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40429,"sourceUnit":51266,"src":"225:69:120","symbolAliases":[{"foreign":{"id":39427,"name":"TypedMemView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51265,"src":"233:12:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/libraries/ExcessivelySafeCall.sol","file":"../../shared/libraries/ExcessivelySafeCall.sol","id":39430,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40429,"sourceUnit":50105,"src":"295:83:120","symbolAliases":[{"foreign":{"id":39429,"name":"ExcessivelySafeCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50104,"src":"303:19:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/libraries/TypeCasts.sol","file":"../../shared/libraries/TypeCasts.sol","id":39432,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40429,"sourceUnit":50189,"src":"379:63:120","symbolAliases":[{"foreign":{"id":39431,"name":"TypeCasts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50188,"src":"387:9:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/libraries/MerkleLib.sol","file":"../libraries/MerkleLib.sol","id":39434,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40429,"sourceUnit":49000,"src":"444:53:120","symbolAliases":[{"foreign":{"id":39433,"name":"MerkleLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48999,"src":"452:9:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/libraries/Message.sol","file":"../libraries/Message.sol","id":39436,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40429,"sourceUnit":49222,"src":"498:49:120","symbolAliases":[{"foreign":{"id":39435,"name":"Message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49221,"src":"506:7:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/libraries/RateLimited.sol","file":"../libraries/RateLimited.sol","id":39438,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40429,"sourceUnit":49689,"src":"548:57:120","symbolAliases":[{"foreign":{"id":39437,"name":"RateLimited","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49688,"src":"556:11:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/MerkleTreeManager.sol","file":"../MerkleTreeManager.sol","id":39440,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40429,"sourceUnit":38318,"src":"607:59:120","symbolAliases":[{"foreign":{"id":39439,"name":"MerkleTreeManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38317,"src":"615:17:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/WatcherClient.sol","file":"../WatcherClient.sol","id":39442,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40429,"sourceUnit":38915,"src":"667:51:120","symbolAliases":[{"foreign":{"id":39441,"name":"WatcherClient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38914,"src":"675:13:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/Connector.sol","file":"./Connector.sol","id":39445,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40429,"sourceUnit":39245,"src":"720:59:120","symbolAliases":[{"foreign":{"id":39443,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"728:9:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":39444,"name":"ProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49928,"src":"739:15:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/ConnectorManager.sol","file":"./ConnectorManager.sol","id":39447,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40429,"sourceUnit":39293,"src":"780:56:120","symbolAliases":[{"foreign":{"id":39446,"name":"ConnectorManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39292,"src":"788:16:120","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":39449,"name":"Connector","nameLocations":["1278:9:120"],"nodeType":"IdentifierPath","referencedDeclaration":39244,"src":"1278:9:120"},"id":39450,"nodeType":"InheritanceSpecifier","src":"1278:9:120"},{"baseName":{"id":39451,"name":"ConnectorManager","nameLocations":["1289:16:120"],"nodeType":"IdentifierPath","referencedDeclaration":39292,"src":"1289:16:120"},"id":39452,"nodeType":"InheritanceSpecifier","src":"1289:16:120"},{"baseName":{"id":39453,"name":"WatcherClient","nameLocations":["1307:13:120"],"nodeType":"IdentifierPath","referencedDeclaration":38914,"src":"1307:13:120"},"id":39454,"nodeType":"InheritanceSpecifier","src":"1307:13:120"},{"baseName":{"id":39455,"name":"RateLimited","nameLocations":["1322:11:120"],"nodeType":"IdentifierPath","referencedDeclaration":49688,"src":"1322:11:120"},"id":39456,"nodeType":"InheritanceSpecifier","src":"1322:11:120"},{"baseName":{"id":39457,"name":"ReentrancyGuard","nameLocations":["1335:15:120"],"nodeType":"IdentifierPath","referencedDeclaration":10734,"src":"1335:15:120"},"id":39458,"nodeType":"InheritanceSpecifier","src":"1335:15:120"}],"canonicalName":"SpokeConnector","contractDependencies":[],"contractKind":"contract","documentation":{"id":39448,"nodeType":"StructuredDocumentation","src":"838:403:120","text":" @title SpokeConnector\n @author Connext Labs, Inc.\n @notice This contract implements the messaging functions needed on the spoke-side of a given AMB.\n The SpokeConnector extends the HubConnector functionality by being able to send, store, and prove\n messages.\n @dev If you are deploying this contract to mainnet, then the mirror values stored in the HubConnector\n will be unused"},"fullyImplemented":false,"id":40428,"linearizedBaseContracts":[40428,10734,49688,38914,10680,11506,39292,47805,39244,47778,49928,50003],"name":"SpokeConnector","nameLocation":"1260:14:120","nodeType":"ContractDefinition","nodes":[{"global":false,"id":39462,"libraryName":{"id":39459,"name":"MerkleLib","nameLocations":["1403:9:120"],"nodeType":"IdentifierPath","referencedDeclaration":48999,"src":"1403:9:120"},"nodeType":"UsingForDirective","src":"1397:35:120","typeName":{"id":39461,"nodeType":"UserDefinedTypeName","pathNode":{"id":39460,"name":"MerkleLib.Tree","nameLocations":["1417:9:120","1427:4:120"],"nodeType":"IdentifierPath","referencedDeclaration":48880,"src":"1417:14:120"},"referencedDeclaration":48880,"src":"1417:14:120","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage_ptr","typeString":"struct MerkleLib.Tree"}}},{"global":false,"id":39465,"libraryName":{"id":39463,"name":"TypedMemView","nameLocations":["1441:12:120"],"nodeType":"IdentifierPath","referencedDeclaration":51265,"src":"1441:12:120"},"nodeType":"UsingForDirective","src":"1435:29:120","typeName":{"id":39464,"name":"bytes","nodeType":"ElementaryTypeName","src":"1458:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},{"global":false,"id":39468,"libraryName":{"id":39466,"name":"TypedMemView","nameLocations":["1473:12:120"],"nodeType":"IdentifierPath","referencedDeclaration":51265,"src":"1473:12:120"},"nodeType":"UsingForDirective","src":"1467:31:120","typeName":{"id":39467,"name":"bytes29","nodeType":"ElementaryTypeName","src":"1490:7:120","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}},{"global":false,"id":39471,"libraryName":{"id":39469,"name":"Message","nameLocations":["1507:7:120"],"nodeType":"IdentifierPath","referencedDeclaration":49221,"src":"1507:7:120"},"nodeType":"UsingForDirective","src":"1501:26:120","typeName":{"id":39470,"name":"bytes29","nodeType":"ElementaryTypeName","src":"1519:7:120","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}},{"anonymous":false,"eventSelector":"d65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d87","id":39475,"name":"SenderAdded","nameLocation":"1576:11:120","nodeType":"EventDefinition","parameters":{"id":39474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39473,"indexed":false,"mutability":"mutable","name":"sender","nameLocation":"1596:6:120","nodeType":"VariableDeclaration","scope":39475,"src":"1588:14:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39472,"name":"address","nodeType":"ElementaryTypeName","src":"1588:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1587:16:120"},"src":"1570:34:120"},{"anonymous":false,"eventSelector":"384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad","id":39479,"name":"SenderRemoved","nameLocation":"1614:13:120","nodeType":"EventDefinition","parameters":{"id":39478,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39477,"indexed":false,"mutability":"mutable","name":"sender","nameLocation":"1636:6:120","nodeType":"VariableDeclaration","scope":39479,"src":"1628:14:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39476,"name":"address","nodeType":"ElementaryTypeName","src":"1628:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1627:16:120"},"src":"1608:36:120"},{"anonymous":false,"eventSelector":"84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc8","id":39483,"name":"AggregateRootReceived","nameLocation":"1654:21:120","nodeType":"EventDefinition","parameters":{"id":39482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39481,"indexed":false,"mutability":"mutable","name":"root","nameLocation":"1684:4:120","nodeType":"VariableDeclaration","scope":39483,"src":"1676:12:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":39480,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1676:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1675:14:120"},"src":"1648:42:120"},{"anonymous":false,"eventSelector":"f51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc739","id":39487,"name":"AggregateRootRemoved","nameLocation":"1700:20:120","nodeType":"EventDefinition","parameters":{"id":39486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39485,"indexed":false,"mutability":"mutable","name":"root","nameLocation":"1729:4:120","nodeType":"VariableDeclaration","scope":39487,"src":"1721:12:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":39484,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1721:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1720:14:120"},"src":"1694:41:120"},{"anonymous":false,"eventSelector":"36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a","id":39491,"name":"AggregateRootVerified","nameLocation":"1745:21:120","nodeType":"EventDefinition","parameters":{"id":39490,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39489,"indexed":true,"mutability":"mutable","name":"root","nameLocation":"1783:4:120","nodeType":"VariableDeclaration","scope":39491,"src":"1767:20:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":39488,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1767:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1766:22:120"},"src":"1739:50:120"},{"anonymous":false,"eventSelector":"40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f","id":39501,"name":"Dispatch","nameLocation":"1799:8:120","nodeType":"EventDefinition","parameters":{"id":39500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39493,"indexed":false,"mutability":"mutable","name":"leaf","nameLocation":"1816:4:120","nodeType":"VariableDeclaration","scope":39501,"src":"1808:12:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":39492,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1808:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":39495,"indexed":false,"mutability":"mutable","name":"index","nameLocation":"1830:5:120","nodeType":"VariableDeclaration","scope":39501,"src":"1822:13:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39494,"name":"uint256","nodeType":"ElementaryTypeName","src":"1822:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39497,"indexed":false,"mutability":"mutable","name":"root","nameLocation":"1845:4:120","nodeType":"VariableDeclaration","scope":39501,"src":"1837:12:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":39496,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1837:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":39499,"indexed":false,"mutability":"mutable","name":"message","nameLocation":"1857:7:120","nodeType":"VariableDeclaration","scope":39501,"src":"1851:13:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":39498,"name":"bytes","nodeType":"ElementaryTypeName","src":"1851:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1807:58:120"},"src":"1793:73:120"},{"anonymous":false,"eventSelector":"d42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe48","id":39509,"name":"Process","nameLocation":"1876:7:120","nodeType":"EventDefinition","parameters":{"id":39508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39503,"indexed":false,"mutability":"mutable","name":"leaf","nameLocation":"1892:4:120","nodeType":"VariableDeclaration","scope":39509,"src":"1884:12:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":39502,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1884:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":39505,"indexed":false,"mutability":"mutable","name":"success","nameLocation":"1903:7:120","nodeType":"VariableDeclaration","scope":39509,"src":"1898:12:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":39504,"name":"bool","nodeType":"ElementaryTypeName","src":"1898:4:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":39507,"indexed":false,"mutability":"mutable","name":"returnData","nameLocation":"1918:10:120","nodeType":"VariableDeclaration","scope":39509,"src":"1912:16:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":39506,"name":"bytes","nodeType":"ElementaryTypeName","src":"1912:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1883:46:120"},"src":"1870:60:120"},{"anonymous":false,"eventSelector":"8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e","id":39515,"name":"DelayBlocksUpdated","nameLocation":"1940:18:120","nodeType":"EventDefinition","parameters":{"id":39514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39511,"indexed":true,"mutability":"mutable","name":"updated","nameLocation":"1975:7:120","nodeType":"VariableDeclaration","scope":39515,"src":"1959:23:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39510,"name":"uint256","nodeType":"ElementaryTypeName","src":"1959:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39513,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"1992:6:120","nodeType":"VariableDeclaration","scope":39515,"src":"1984:14:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39512,"name":"address","nodeType":"ElementaryTypeName","src":"1984:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1958:41:120"},"src":"1934:66:120"},{"anonymous":false,"documentation":{"id":39516,"nodeType":"StructuredDocumentation","src":"2004:192:120","text":" @notice Emitted when funds are withdrawn by the admin\n @dev See comments in `withdrawFunds`\n @param to The recipient of the funds\n @param amount The amount withdrawn"},"eventSelector":"eaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d","id":39522,"name":"FundsWithdrawn","nameLocation":"2205:14:120","nodeType":"EventDefinition","parameters":{"id":39521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39518,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"2236:2:120","nodeType":"VariableDeclaration","scope":39522,"src":"2220:18:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39517,"name":"address","nodeType":"ElementaryTypeName","src":"2220:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39520,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2248:6:120","nodeType":"VariableDeclaration","scope":39522,"src":"2240:14:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39519,"name":"uint256","nodeType":"ElementaryTypeName","src":"2240:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2219:36:120"},"src":"2199:57:120"},{"anonymous":false,"eventSelector":"7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a8","id":39530,"name":"MessageProven","nameLocation":"2266:13:120","nodeType":"EventDefinition","parameters":{"id":39529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39524,"indexed":true,"mutability":"mutable","name":"leaf","nameLocation":"2296:4:120","nodeType":"VariableDeclaration","scope":39530,"src":"2280:20:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":39523,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2280:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":39526,"indexed":true,"mutability":"mutable","name":"aggregateRoot","nameLocation":"2318:13:120","nodeType":"VariableDeclaration","scope":39530,"src":"2302:29:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":39525,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2302:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":39528,"indexed":false,"mutability":"mutable","name":"aggregateIndex","nameLocation":"2341:14:120","nodeType":"VariableDeclaration","scope":39530,"src":"2333:22:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39527,"name":"uint256","nodeType":"ElementaryTypeName","src":"2333:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2279:77:120"},"src":"2260:97:120"},{"canonicalName":"SpokeConnector.MessageStatus","id":39534,"members":[{"id":39531,"name":"None","nameLocation":"2636:4:120","nodeType":"EnumValue","src":"2636:4:120"},{"id":39532,"name":"Proven","nameLocation":"2646:6:120","nodeType":"EnumValue","src":"2646:6:120"},{"id":39533,"name":"Processed","nameLocation":"2658:9:120","nodeType":"EnumValue","src":"2658:9:120"}],"name":"MessageStatus","nameLocation":"2616:13:120","nodeType":"EnumDefinition","src":"2611:60:120"},{"canonicalName":"SpokeConnector.Proof","id":39543,"members":[{"constant":false,"id":39536,"mutability":"mutable","name":"message","nameLocation":"3019:7:120","nodeType":"VariableDeclaration","scope":39543,"src":"3013:13:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":39535,"name":"bytes","nodeType":"ElementaryTypeName","src":"3013:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":39540,"mutability":"mutable","name":"path","nameLocation":"3044:4:120","nodeType":"VariableDeclaration","scope":39543,"src":"3032:16:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_storage_ptr","typeString":"bytes32[32]"},"typeName":{"baseType":{"id":39537,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3032:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":39539,"length":{"hexValue":"3332","id":39538,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3040:2:120","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"nodeType":"ArrayTypeName","src":"3032:11:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_storage_ptr","typeString":"bytes32[32]"}},"visibility":"internal"},{"constant":false,"id":39542,"mutability":"mutable","name":"index","nameLocation":"3062:5:120","nodeType":"VariableDeclaration","scope":39543,"src":"3054:13:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39541,"name":"uint256","nodeType":"ElementaryTypeName","src":"3054:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Proof","nameLocation":"3001:5:120","nodeType":"StructDefinition","scope":40428,"src":"2994:78:120","visibility":"public"},{"constant":false,"documentation":{"id":39544,"nodeType":"StructuredDocumentation","src":"3123:150:120","text":" @notice Number of blocks to delay the processing of a message to allow for watchers to verify\n the validity and pause if necessary."},"functionSelector":"ad9c0c2e","id":39546,"mutability":"mutable","name":"delayBlocks","nameLocation":"3291:11:120","nodeType":"VariableDeclaration","scope":40428,"src":"3276:26:120","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39545,"name":"uint256","nodeType":"ElementaryTypeName","src":"3276:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":39547,"nodeType":"StructuredDocumentation","src":"3307:191:120","text":" @notice MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root\n will be sent crosschain to the hub for aggregation and redistribution."},"functionSelector":"a01892a5","id":39550,"mutability":"immutable","name":"MERKLE","nameLocation":"3536:6:120","nodeType":"VariableDeclaration","scope":40428,"src":"3501:41:120","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_MerkleTreeManager_$38317","typeString":"contract MerkleTreeManager"},"typeName":{"id":39549,"nodeType":"UserDefinedTypeName","pathNode":{"id":39548,"name":"MerkleTreeManager","nameLocations":["3501:17:120"],"nodeType":"IdentifierPath","referencedDeclaration":38317,"src":"3501:17:120"},"referencedDeclaration":38317,"src":"3501:17:120","typeDescriptions":{"typeIdentifier":"t_contract$_MerkleTreeManager_$38317","typeString":"contract MerkleTreeManager"}},"visibility":"public"},{"constant":false,"documentation":{"id":39551,"nodeType":"StructuredDocumentation","src":"3547:90:120","text":" @notice Minimum gas for processing a received message (reserved for handle)"},"functionSelector":"d88beda2","id":39553,"mutability":"immutable","name":"PROCESS_GAS","nameLocation":"3665:11:120","nodeType":"VariableDeclaration","scope":40428,"src":"3640:36:120","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39552,"name":"uint256","nodeType":"ElementaryTypeName","src":"3640:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":39554,"nodeType":"StructuredDocumentation","src":"3681:96:120","text":" @notice Reserved gas (to ensure tx completes in case message processing runs out)"},"functionSelector":"25e3beda","id":39556,"mutability":"immutable","name":"RESERVE_GAS","nameLocation":"3805:11:120","nodeType":"VariableDeclaration","scope":40428,"src":"3780:36:120","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39555,"name":"uint256","nodeType":"ElementaryTypeName","src":"3780:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":39557,"nodeType":"StructuredDocumentation","src":"3821:488:120","text":" @notice This will hold the commit block for incoming aggregateRoots from the hub chain. Once\n they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can\n be used for proving inclusion of crosschain messages.\n @dev NOTE: A commit block of 0 should be considered invalid (it is an empty entry in the\n mapping). We must ALWAYS ensure the value is not 0 before checking whether it has surpassed the\n verification period."},"functionSelector":"9d3117c7","id":39561,"mutability":"mutable","name":"pendingAggregateRoots","nameLocation":"4347:21:120","nodeType":"VariableDeclaration","scope":40428,"src":"4312:56:120","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"typeName":{"id":39560,"keyType":{"id":39558,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4320:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"4312:27:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueType":{"id":39559,"name":"uint256","nodeType":"ElementaryTypeName","src":"4331:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"public"},{"constant":false,"documentation":{"id":39562,"nodeType":"StructuredDocumentation","src":"4373:347:120","text":" @notice This tracks the roots of the aggregate tree containing outbound roots from all other\n supported domains. The current version is the one that is known to be past the delayBlocks\n time period.\n @dev This root is the root of the tree that is aggregated on mainnet (composed of all the roots\n of previous trees)."},"functionSelector":"301f07c3","id":39566,"mutability":"mutable","name":"provenAggregateRoots","nameLocation":"4755:20:120","nodeType":"VariableDeclaration","scope":40428,"src":"4723:52:120","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"typeName":{"id":39565,"keyType":{"id":39563,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4731:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"4723:24:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"valueType":{"id":39564,"name":"bool","nodeType":"ElementaryTypeName","src":"4742:4:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"constant":false,"documentation":{"id":39567,"nodeType":"StructuredDocumentation","src":"4780:234:120","text":" @notice This tracks whether the root has been proven to exist within the given aggregate root.\n @dev Tracking this is an optimization so you dont have to prove inclusion of the same constituent\n root many times."},"functionSelector":"98c9f2b9","id":39571,"mutability":"mutable","name":"provenMessageRoots","nameLocation":"5049:18:120","nodeType":"VariableDeclaration","scope":40428,"src":"5017:50:120","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"typeName":{"id":39570,"keyType":{"id":39568,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5025:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"5017:24:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"valueType":{"id":39569,"name":"bool","nodeType":"ElementaryTypeName","src":"5036:4:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"constant":false,"documentation":{"id":39572,"nodeType":"StructuredDocumentation","src":"5072:162:120","text":" @notice This mapping records all message roots that have already been sent in order to prevent\n redundant message roots from being sent to hub."},"functionSelector":"572386ca","id":39576,"mutability":"mutable","name":"sentMessageRoots","nameLocation":"5269:16:120","nodeType":"VariableDeclaration","scope":40428,"src":"5237:48:120","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"typeName":{"id":39575,"keyType":{"id":39573,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5245:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"5237:24:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"valueType":{"id":39574,"name":"bool","nodeType":"ElementaryTypeName","src":"5256:4:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"constant":false,"documentation":{"id":39577,"nodeType":"StructuredDocumentation","src":"5290:131:120","text":" @dev This is used for the `onlyAllowlistedSender` modifier, which gates who\n can send messages using `dispatch`."},"functionSelector":"6159ada1","id":39581,"mutability":"mutable","name":"allowlistedSenders","nameLocation":"5456:18:120","nodeType":"VariableDeclaration","scope":40428,"src":"5424:50:120","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":39580,"keyType":{"id":39578,"name":"address","nodeType":"ElementaryTypeName","src":"5432:7:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5424:24:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueType":{"id":39579,"name":"bool","nodeType":"ElementaryTypeName","src":"5443:4:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"constant":false,"documentation":{"id":39582,"nodeType":"StructuredDocumentation","src":"5479:69:120","text":" @notice domain => next available nonce for the domain."},"functionSelector":"b95a2001","id":39586,"mutability":"mutable","name":"nonces","nameLocation":"5584:6:120","nodeType":"VariableDeclaration","scope":40428,"src":"5551:39:120","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint32_$_t_uint32_$","typeString":"mapping(uint32 => uint32)"},"typeName":{"id":39585,"keyType":{"id":39583,"name":"uint32","nodeType":"ElementaryTypeName","src":"5559:6:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Mapping","src":"5551:25:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint32_$_t_uint32_$","typeString":"mapping(uint32 => uint32)"},"valueType":{"id":39584,"name":"uint32","nodeType":"ElementaryTypeName","src":"5569:6:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}},"visibility":"public"},{"constant":false,"documentation":{"id":39587,"nodeType":"StructuredDocumentation","src":"5595:81:120","text":" @notice Mapping of message leaves to MessageStatus, keyed on leaf."},"functionSelector":"2bbd59ca","id":39592,"mutability":"mutable","name":"messages","nameLocation":"5720:8:120","nodeType":"VariableDeclaration","scope":40428,"src":"5679:49:120","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_MessageStatus_$39534_$","typeString":"mapping(bytes32 => enum SpokeConnector.MessageStatus)"},"typeName":{"id":39591,"keyType":{"id":39588,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5687:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"5679:33:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_MessageStatus_$39534_$","typeString":"mapping(bytes32 => enum SpokeConnector.MessageStatus)"},"valueType":{"id":39590,"nodeType":"UserDefinedTypeName","pathNode":{"id":39589,"name":"MessageStatus","nameLocations":["5698:13:120"],"nodeType":"IdentifierPath","referencedDeclaration":39534,"src":"5698:13:120"},"referencedDeclaration":39534,"src":"5698:13:120","typeDescriptions":{"typeIdentifier":"t_enum$_MessageStatus_$39534","typeString":"enum SpokeConnector.MessageStatus"}}},"visibility":"public"},{"body":{"id":39603,"nodeType":"Block","src":"5808:73:120","statements":[{"expression":{"arguments":[{"baseExpression":{"id":39595,"name":"allowlistedSenders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39581,"src":"5822:18:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":39598,"indexExpression":{"expression":{"id":39596,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5841:3:120","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":39597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5845:6:120","memberName":"sender","nodeType":"MemberAccess","src":"5841:10:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5822:30:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21616c6c6f776c6973746564","id":39599,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5854:14:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4","typeString":"literal_string \"!allowlisted\""},"value":"!allowlisted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4","typeString":"literal_string \"!allowlisted\""}],"id":39594,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5814:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":39600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5814:55:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39601,"nodeType":"ExpressionStatement","src":"5814:55:120"},{"id":39602,"nodeType":"PlaceholderStatement","src":"5875:1:120"}]},"id":39604,"name":"onlyAllowlistedSender","nameLocation":"5784:21:120","nodeType":"ModifierDefinition","parameters":{"id":39593,"nodeType":"ParameterList","parameters":[],"src":"5805:2:120"},"src":"5775:106:120","virtual":false,"visibility":"internal"},{"body":{"id":39686,"nodeType":"Block","src":"7230:352:120","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":39645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39641,"name":"_processGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39617,"src":"7291:11:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_rational_849999_by_1","typeString":"int_const 849999"},"id":39644,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3835305f303030","id":39642,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7305:7:120","typeDescriptions":{"typeIdentifier":"t_rational_850000_by_1","typeString":"int_const 850000"},"value":"850_000"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":39643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7315:1:120","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7305:11:120","typeDescriptions":{"typeIdentifier":"t_rational_849999_by_1","typeString":"int_const 849999"}},"src":"7291:25:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2170726f6365737320676173","id":39646,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7318:14:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8","typeString":"literal_string \"!process gas\""},"value":"!process gas"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8","typeString":"literal_string \"!process gas\""}],"id":39640,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7283:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":39647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7283:50:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39648,"nodeType":"ExpressionStatement","src":"7283:50:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":39654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39650,"name":"_reserveGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39619,"src":"7347:11:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_rational_14999_by_1","typeString":"int_const 14999"},"id":39653,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31355f303030","id":39651,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7361:6:120","typeDescriptions":{"typeIdentifier":"t_rational_15000_by_1","typeString":"int_const 15000"},"value":"15_000"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":39652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7370:1:120","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7361:10:120","typeDescriptions":{"typeIdentifier":"t_rational_14999_by_1","typeString":"int_const 14999"}},"src":"7347:24:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"217265736572766520676173","id":39655,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7373:14:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d","typeString":"literal_string \"!reserve gas\""},"value":"!reserve gas"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d","typeString":"literal_string \"!reserve gas\""}],"id":39649,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7339:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":39656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7339:49:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39657,"nodeType":"ExpressionStatement","src":"7339:49:120"},{"expression":{"id":39660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":39658,"name":"PROCESS_GAS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39553,"src":"7394:11:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":39659,"name":"_processGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39617,"src":"7408:11:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7394:25:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39661,"nodeType":"ExpressionStatement","src":"7394:25:120"},{"expression":{"id":39664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":39662,"name":"RESERVE_GAS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39556,"src":"7425:11:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":39663,"name":"_reserveGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39619,"src":"7439:11:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7425:25:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39665,"nodeType":"ExpressionStatement","src":"7425:25:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":39672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39667,"name":"_merkle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39623,"src":"7465:7:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":39670,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7484:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39669,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7476:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39668,"name":"address","nodeType":"ElementaryTypeName","src":"7476:7:120","typeDescriptions":{}}},"id":39671,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7476:10:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7465:21:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"217a65726f206d65726b6c65","id":39673,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7488:14:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8","typeString":"literal_string \"!zero merkle\""},"value":"!zero merkle"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8","typeString":"literal_string \"!zero merkle\""}],"id":39666,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7457:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":39674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7457:46:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39675,"nodeType":"ExpressionStatement","src":"7457:46:120"},{"expression":{"id":39680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":39676,"name":"MERKLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39550,"src":"7509:6:120","typeDescriptions":{"typeIdentifier":"t_contract$_MerkleTreeManager_$38317","typeString":"contract MerkleTreeManager"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":39678,"name":"_merkle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39623,"src":"7536:7:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39677,"name":"MerkleTreeManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38317,"src":"7518:17:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MerkleTreeManager_$38317_$","typeString":"type(contract MerkleTreeManager)"}},"id":39679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7518:26:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_MerkleTreeManager_$38317","typeString":"contract MerkleTreeManager"}},"src":"7509:35:120","typeDescriptions":{"typeIdentifier":"t_contract$_MerkleTreeManager_$38317","typeString":"contract MerkleTreeManager"}},"id":39681,"nodeType":"ExpressionStatement","src":"7509:35:120"},{"expression":{"id":39684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":39682,"name":"delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39546,"src":"7551:11:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":39683,"name":"_delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39621,"src":"7565:12:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7551:26:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39685,"nodeType":"ExpressionStatement","src":"7551:26:120"}]},"documentation":{"id":39605,"nodeType":"StructuredDocumentation","src":"5929:900:120","text":" @notice Creates a new SpokeConnector instance.\n @param _domain The domain this connector lives on.\n @param _mirrorDomain The hub domain.\n @param _amb The address of the AMB on the spoke domain this connector lives on.\n @param _rootManager The address of the RootManager on the hub.\n @param _mirrorConnector The address of the spoke connector.\n @param _processGas The gas costs used in `handle` to ensure meaningful state changes can occur (minimum gas needed\n to handle transaction).\n @param _reserveGas The gas costs reserved when `handle` is called to ensure failures are handled.\n @param _delayBlocks The delay for the validation period for incoming messages in blocks.\n @param _merkle The address of the MerkleTreeManager on this spoke domain.\n @param _watcherManager The address of the WatcherManager to whom this connector is a client."},"id":39687,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":39628,"kind":"baseConstructorSpecifier","modifierName":{"id":39627,"name":"ConnectorManager","nameLocations":["7098:16:120"],"nodeType":"IdentifierPath","referencedDeclaration":39292,"src":"7098:16:120"},"nodeType":"ModifierInvocation","src":"7098:18:120"},{"arguments":[{"id":39630,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39607,"src":"7131:7:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":39631,"name":"_mirrorDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39609,"src":"7140:13:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":39632,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39611,"src":"7155:4:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39633,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39613,"src":"7161:12:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39634,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39615,"src":"7175:16:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":39635,"kind":"baseConstructorSpecifier","modifierName":{"id":39629,"name":"Connector","nameLocations":["7121:9:120"],"nodeType":"IdentifierPath","referencedDeclaration":39244,"src":"7121:9:120"},"nodeType":"ModifierInvocation","src":"7121:71:120"},{"arguments":[{"id":39637,"name":"_watcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39625,"src":"7211:15:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":39638,"kind":"baseConstructorSpecifier","modifierName":{"id":39636,"name":"WatcherClient","nameLocations":["7197:13:120"],"nodeType":"IdentifierPath","referencedDeclaration":38914,"src":"7197:13:120"},"nodeType":"ModifierInvocation","src":"7197:30:120"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":39626,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39607,"mutability":"mutable","name":"_domain","nameLocation":"6856:7:120","nodeType":"VariableDeclaration","scope":39687,"src":"6849:14:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39606,"name":"uint32","nodeType":"ElementaryTypeName","src":"6849:6:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":39609,"mutability":"mutable","name":"_mirrorDomain","nameLocation":"6876:13:120","nodeType":"VariableDeclaration","scope":39687,"src":"6869:20:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39608,"name":"uint32","nodeType":"ElementaryTypeName","src":"6869:6:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":39611,"mutability":"mutable","name":"_amb","nameLocation":"6903:4:120","nodeType":"VariableDeclaration","scope":39687,"src":"6895:12:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39610,"name":"address","nodeType":"ElementaryTypeName","src":"6895:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39613,"mutability":"mutable","name":"_rootManager","nameLocation":"6921:12:120","nodeType":"VariableDeclaration","scope":39687,"src":"6913:20:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39612,"name":"address","nodeType":"ElementaryTypeName","src":"6913:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39615,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"6947:16:120","nodeType":"VariableDeclaration","scope":39687,"src":"6939:24:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39614,"name":"address","nodeType":"ElementaryTypeName","src":"6939:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39617,"mutability":"mutable","name":"_processGas","nameLocation":"6977:11:120","nodeType":"VariableDeclaration","scope":39687,"src":"6969:19:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39616,"name":"uint256","nodeType":"ElementaryTypeName","src":"6969:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39619,"mutability":"mutable","name":"_reserveGas","nameLocation":"7002:11:120","nodeType":"VariableDeclaration","scope":39687,"src":"6994:19:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39618,"name":"uint256","nodeType":"ElementaryTypeName","src":"6994:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39621,"mutability":"mutable","name":"_delayBlocks","nameLocation":"7027:12:120","nodeType":"VariableDeclaration","scope":39687,"src":"7019:20:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39620,"name":"uint256","nodeType":"ElementaryTypeName","src":"7019:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39623,"mutability":"mutable","name":"_merkle","nameLocation":"7053:7:120","nodeType":"VariableDeclaration","scope":39687,"src":"7045:15:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39622,"name":"address","nodeType":"ElementaryTypeName","src":"7045:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39625,"mutability":"mutable","name":"_watcherManager","nameLocation":"7074:15:120","nodeType":"VariableDeclaration","scope":39687,"src":"7066:23:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39624,"name":"address","nodeType":"ElementaryTypeName","src":"7066:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6843:250:120"},"returnParameters":{"id":39639,"nodeType":"ParameterList","parameters":[],"src":"7230:0:120"},"scope":40428,"src":"6832:750:120","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":39705,"nodeType":"Block","src":"7810:76:120","statements":[{"expression":{"id":39699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":39695,"name":"allowlistedSenders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39581,"src":"7816:18:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":39697,"indexExpression":{"id":39696,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39690,"src":"7835:7:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7816:27:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":39698,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7846:4:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"7816:34:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39700,"nodeType":"ExpressionStatement","src":"7816:34:120"},{"eventCall":{"arguments":[{"id":39702,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39690,"src":"7873:7:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39701,"name":"SenderAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39475,"src":"7861:11:120","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":39703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7861:20:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39704,"nodeType":"EmitStatement","src":"7856:25:120"}]},"documentation":{"id":39688,"nodeType":"StructuredDocumentation","src":"7634:120:120","text":" @notice Adds a sender to the allowlist.\n @dev Only allowlisted routers (senders) can call `dispatch`."},"functionSelector":"b697f531","id":39706,"implemented":true,"kind":"function","modifiers":[{"id":39693,"kind":"modifierInvocation","modifierName":{"id":39692,"name":"onlyOwner","nameLocations":["7800:9:120"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"7800:9:120"},"nodeType":"ModifierInvocation","src":"7800:9:120"}],"name":"addSender","nameLocation":"7766:9:120","nodeType":"FunctionDefinition","parameters":{"id":39691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39690,"mutability":"mutable","name":"_sender","nameLocation":"7784:7:120","nodeType":"VariableDeclaration","scope":39706,"src":"7776:15:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39689,"name":"address","nodeType":"ElementaryTypeName","src":"7776:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7775:17:120"},"returnParameters":{"id":39694,"nodeType":"ParameterList","parameters":[],"src":"7810:0:120"},"scope":40428,"src":"7757:129:120","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":39723,"nodeType":"Block","src":"8074:78:120","statements":[{"expression":{"id":39717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"8080:34:120","subExpression":{"baseExpression":{"id":39714,"name":"allowlistedSenders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39581,"src":"8087:18:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":39716,"indexExpression":{"id":39715,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39709,"src":"8106:7:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8087:27:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39718,"nodeType":"ExpressionStatement","src":"8080:34:120"},{"eventCall":{"arguments":[{"id":39720,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39709,"src":"8139:7:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39719,"name":"SenderRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39479,"src":"8125:13:120","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":39721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8125:22:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39722,"nodeType":"EmitStatement","src":"8120:27:120"}]},"documentation":{"id":39707,"nodeType":"StructuredDocumentation","src":"7890:125:120","text":" @notice Removes a sender from the allowlist.\n @dev Only allowlisted routers (senders) can call `dispatch`."},"functionSelector":"b2f87643","id":39724,"implemented":true,"kind":"function","modifiers":[{"id":39712,"kind":"modifierInvocation","modifierName":{"id":39711,"name":"onlyOwner","nameLocations":["8064:9:120"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"8064:9:120"},"nodeType":"ModifierInvocation","src":"8064:9:120"}],"name":"removeSender","nameLocation":"8027:12:120","nodeType":"FunctionDefinition","parameters":{"id":39710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39709,"mutability":"mutable","name":"_sender","nameLocation":"8048:7:120","nodeType":"VariableDeclaration","scope":39724,"src":"8040:15:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39708,"name":"address","nodeType":"ElementaryTypeName","src":"8040:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8039:17:120"},"returnParameters":{"id":39713,"nodeType":"ParameterList","parameters":[],"src":"8074:0:120"},"scope":40428,"src":"8018:134:120","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":39749,"nodeType":"Block","src":"8337:150:120","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":39735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39733,"name":"_delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39727,"src":"8351:12:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":39734,"name":"delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39546,"src":"8367:11:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8351:27:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2164656c6179426c6f636b73","id":39736,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8380:14:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2","typeString":"literal_string \"!delayBlocks\""},"value":"!delayBlocks"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2","typeString":"literal_string \"!delayBlocks\""}],"id":39732,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8343:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":39737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8343:52:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39738,"nodeType":"ExpressionStatement","src":"8343:52:120"},{"eventCall":{"arguments":[{"id":39740,"name":"_delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39727,"src":"8425:12:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":39741,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8439:3:120","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":39742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8443:6:120","memberName":"sender","nodeType":"MemberAccess","src":"8439:10:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":39739,"name":"DelayBlocksUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39515,"src":"8406:18:120","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":39743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8406:44:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39744,"nodeType":"EmitStatement","src":"8401:49:120"},{"expression":{"id":39747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":39745,"name":"delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39546,"src":"8456:11:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":39746,"name":"_delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39727,"src":"8470:12:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8456:26:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39748,"nodeType":"ExpressionStatement","src":"8456:26:120"}]},"documentation":{"id":39725,"nodeType":"StructuredDocumentation","src":"8156:115:120","text":" @notice Set the `delayBlocks`, the period in blocks over which an incoming message\n is verified."},"functionSelector":"1eeaabea","id":39750,"implemented":true,"kind":"function","modifiers":[{"id":39730,"kind":"modifierInvocation","modifierName":{"id":39729,"name":"onlyOwner","nameLocations":["8327:9:120"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"8327:9:120"},"nodeType":"ModifierInvocation","src":"8327:9:120"}],"name":"setDelayBlocks","nameLocation":"8283:14:120","nodeType":"FunctionDefinition","parameters":{"id":39728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39727,"mutability":"mutable","name":"_delayBlocks","nameLocation":"8306:12:120","nodeType":"VariableDeclaration","scope":39750,"src":"8298:20:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39726,"name":"uint256","nodeType":"ElementaryTypeName","src":"8298:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8297:22:120"},"returnParameters":{"id":39731,"nodeType":"ParameterList","parameters":[],"src":"8337:0:120"},"scope":40428,"src":"8274:213:120","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":39762,"nodeType":"Block","src":"8957:42:120","statements":[{"expression":{"arguments":[{"id":39759,"name":"_rateLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39753,"src":"8983:10:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":39758,"name":"_setRateLimitBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49687,"src":"8963:19:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":39760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8963:31:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39761,"nodeType":"ExpressionStatement","src":"8963:31:120"}]},"documentation":{"id":39751,"nodeType":"StructuredDocumentation","src":"8491:398:120","text":" @notice Set the rate limit (number of blocks) at which we can send messages from\n this contract to the hub chain using the `send` method.\n @dev Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\n @param _rateLimit The number of blocks require between sending messages. If set to\n 0, rate limiting for this spoke connector will be disabled."},"functionSelector":"e0fed010","id":39763,"implemented":true,"kind":"function","modifiers":[{"id":39756,"kind":"modifierInvocation","modifierName":{"id":39755,"name":"onlyOwner","nameLocations":["8947:9:120"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"8947:9:120"},"nodeType":"ModifierInvocation","src":"8947:9:120"}],"name":"setRateLimitBlocks","nameLocation":"8901:18:120","nodeType":"FunctionDefinition","parameters":{"id":39754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39753,"mutability":"mutable","name":"_rateLimit","nameLocation":"8928:10:120","nodeType":"VariableDeclaration","scope":39763,"src":"8920:18:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39752,"name":"uint256","nodeType":"ElementaryTypeName","src":"8920:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8919:20:120"},"returnParameters":{"id":39757,"nodeType":"ParameterList","parameters":[],"src":"8957:0:120"},"scope":40428,"src":"8892:107:120","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":39791,"nodeType":"Block","src":"9401:239:120","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":39778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":39774,"name":"pendingAggregateRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39561,"src":"9467:21:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":39776,"indexExpression":{"id":39775,"name":"_fraudulentRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39766,"src":"9489:15:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9467:38:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":39777,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9509:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9467:43:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616767726567617465526f6f742021657869737473","id":39779,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9512:23:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f","typeString":"literal_string \"aggregateRoot !exists\""},"value":"aggregateRoot !exists"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f","typeString":"literal_string \"aggregateRoot !exists\""}],"id":39773,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9459:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":39780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9459:77:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39781,"nodeType":"ExpressionStatement","src":"9459:77:120"},{"expression":{"id":39785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"9542:45:120","subExpression":{"baseExpression":{"id":39782,"name":"pendingAggregateRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39561,"src":"9549:21:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":39784,"indexExpression":{"id":39783,"name":"_fraudulentRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39766,"src":"9571:15:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9549:38:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39786,"nodeType":"ExpressionStatement","src":"9542:45:120"},{"eventCall":{"arguments":[{"id":39788,"name":"_fraudulentRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39766,"src":"9619:15:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":39787,"name":"AggregateRootRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39487,"src":"9598:20:120","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":39789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9598:37:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39790,"nodeType":"EmitStatement","src":"9593:42:120"}]},"documentation":{"id":39764,"nodeType":"StructuredDocumentation","src":"9003:306:120","text":" @notice Manually remove a pending aggregateRoot by owner if the contract is paused.\n @dev This method is required for handling fraud cases in the current construction.\n @param _fraudulentRoot Target fraudulent root that should be erased from the\n `pendingAggregateRoots` mapping."},"functionSelector":"6b04a933","id":39792,"implemented":true,"kind":"function","modifiers":[{"id":39769,"kind":"modifierInvocation","modifierName":{"id":39768,"name":"onlyOwner","nameLocations":["9380:9:120"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"9380:9:120"},"nodeType":"ModifierInvocation","src":"9380:9:120"},{"id":39771,"kind":"modifierInvocation","modifierName":{"id":39770,"name":"whenPaused","nameLocations":["9390:10:120"],"nodeType":"IdentifierPath","referencedDeclaration":10615,"src":"9390:10:120"},"nodeType":"ModifierInvocation","src":"9390:10:120"}],"name":"removePendingAggregateRoot","nameLocation":"9321:26:120","nodeType":"FunctionDefinition","parameters":{"id":39767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39766,"mutability":"mutable","name":"_fraudulentRoot","nameLocation":"9356:15:120","nodeType":"VariableDeclaration","scope":39792,"src":"9348:23:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":39765,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9348:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9347:25:120"},"returnParameters":{"id":39772,"nodeType":"ParameterList","parameters":[],"src":"9401:0:120"},"scope":40428,"src":"9312:328:120","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":39823,"nodeType":"Block","src":"9949:132:120","statements":[{"assignments":[39801],"declarations":[{"constant":false,"id":39801,"mutability":"mutable","name":"amount","nameLocation":"9963:6:120","nodeType":"VariableDeclaration","scope":39823,"src":"9955:14:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39800,"name":"uint256","nodeType":"ElementaryTypeName","src":"9955:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":39807,"initialValue":{"expression":{"arguments":[{"id":39804,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9980:4:120","typeDescriptions":{"typeIdentifier":"t_contract$_SpokeConnector_$40428","typeString":"contract SpokeConnector"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SpokeConnector_$40428","typeString":"contract SpokeConnector"}],"id":39803,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9972:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39802,"name":"address","nodeType":"ElementaryTypeName","src":"9972:7:120","typeDescriptions":{}}},"id":39805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9972:13:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9986:7:120","memberName":"balance","nodeType":"MemberAccess","src":"9972:21:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9955:38:120"},{"expression":{"arguments":[{"arguments":[{"id":39813,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39795,"src":"10025:3:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39812,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10017:8:120","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":39811,"name":"address","nodeType":"ElementaryTypeName","src":"10017:8:120","stateMutability":"payable","typeDescriptions":{}}},"id":39814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10017:12:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":39815,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39801,"src":"10031:6:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":39808,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"9999:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11484_$","typeString":"type(library Address)"}},"id":39810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10007:9:120","memberName":"sendValue","nodeType":"MemberAccess","referencedDeclaration":11206,"src":"9999:17:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$","typeString":"function (address payable,uint256)"}},"id":39816,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9999:39:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39817,"nodeType":"ExpressionStatement","src":"9999:39:120"},{"eventCall":{"arguments":[{"id":39819,"name":"_to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39795,"src":"10064:3:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39820,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39801,"src":"10069:6:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":39818,"name":"FundsWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39522,"src":"10049:14:120","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":39821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10049:27:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39822,"nodeType":"EmitStatement","src":"10044:32:120"}]},"documentation":{"id":39793,"nodeType":"StructuredDocumentation","src":"9644:249:120","text":" @notice This function should be callable by owner, and send funds trapped on\n a connector to the provided recipient.\n @dev Withdraws the entire balance of the contract.\n @param _to The recipient of the funds withdrawn"},"functionSelector":"68742da6","id":39824,"implemented":true,"kind":"function","modifiers":[{"id":39798,"kind":"modifierInvocation","modifierName":{"id":39797,"name":"onlyOwner","nameLocations":["9939:9:120"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"9939:9:120"},"nodeType":"ModifierInvocation","src":"9939:9:120"}],"name":"withdrawFunds","nameLocation":"9905:13:120","nodeType":"FunctionDefinition","parameters":{"id":39796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39795,"mutability":"mutable","name":"_to","nameLocation":"9927:3:120","nodeType":"VariableDeclaration","scope":39824,"src":"9919:11:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39794,"name":"address","nodeType":"ElementaryTypeName","src":"9919:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9918:13:120"},"returnParameters":{"id":39799,"nodeType":"ParameterList","parameters":[],"src":"9949:0:120"},"scope":40428,"src":"9896:185:120","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[38901,49874],"body":{"id":39833,"nodeType":"Block","src":"10425:2:120","statements":[]},"documentation":{"id":39825,"nodeType":"StructuredDocumentation","src":"10085:242:120","text":" @notice Remove ability to renounce ownership\n @dev Renounce ownership should be impossible as long as it is impossible in the\n WatcherClient, and as long as only the owner can remove pending roots in case of\n fraud."},"functionSelector":"715018a6","id":39834,"implemented":true,"kind":"function","modifiers":[{"id":39831,"kind":"modifierInvocation","modifierName":{"id":39830,"name":"onlyOwner","nameLocations":["10415:9:120"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"10415:9:120"},"nodeType":"ModifierInvocation","src":"10415:9:120"}],"name":"renounceOwnership","nameLocation":"10339:17:120","nodeType":"FunctionDefinition","overrides":{"id":39829,"nodeType":"OverrideSpecifier","overrides":[{"id":39827,"name":"ProposedOwnable","nameLocations":["10383:15:120"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"10383:15:120"},{"id":39828,"name":"WatcherClient","nameLocations":["10400:13:120"],"nodeType":"IdentifierPath","referencedDeclaration":38914,"src":"10400:13:120"}],"src":"10374:40:120"},"parameters":{"id":39826,"nodeType":"ParameterList","parameters":[],"src":"10356:2:120"},"returnParameters":{"id":39832,"nodeType":"ParameterList","parameters":[],"src":"10425:0:120"},"scope":40428,"src":"10330:97:120","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":39844,"nodeType":"Block","src":"10671:31:120","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":39840,"name":"MERKLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39550,"src":"10684:6:120","typeDescriptions":{"typeIdentifier":"t_contract$_MerkleTreeManager_$38317","typeString":"contract MerkleTreeManager"}},"id":39841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10691:4:120","memberName":"root","nodeType":"MemberAccess","referencedDeclaration":38094,"src":"10684:11:120","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":39842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10684:13:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":39839,"id":39843,"nodeType":"Return","src":"10677:20:120"}]},"documentation":{"id":39835,"nodeType":"StructuredDocumentation","src":"10480:132:120","text":" @notice This returns the root of all messages with the origin domain as this domain (i.e.\n all outbound messages)"},"functionSelector":"65eaf11b","id":39845,"implemented":true,"kind":"function","modifiers":[],"name":"outboundRoot","nameLocation":"10624:12:120","nodeType":"FunctionDefinition","parameters":{"id":39836,"nodeType":"ParameterList","parameters":[],"src":"10636:2:120"},"returnParameters":{"id":39839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39838,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39845,"src":"10662:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":39837,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10662:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10661:9:120"},"scope":40428,"src":"10615:87:120","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[39291],"body":{"id":39854,"nodeType":"Block","src":"10916:24:120","statements":[{"expression":{"id":39852,"name":"DOMAIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39039,"src":"10929:6:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":39851,"id":39853,"nodeType":"Return","src":"10922:13:120"}]},"documentation":{"id":39846,"nodeType":"StructuredDocumentation","src":"10706:144:120","text":" @notice This provides the implementation for what is defined in the ConnectorManager\n to avoid storing the domain redundantly"},"functionSelector":"8d3638f4","id":39855,"implemented":true,"kind":"function","modifiers":[],"name":"localDomain","nameLocation":"10862:11:120","nodeType":"FunctionDefinition","overrides":{"id":39848,"nodeType":"OverrideSpecifier","overrides":[],"src":"10890:8:120"},"parameters":{"id":39847,"nodeType":"ParameterList","parameters":[],"src":"10873:2:120"},"returnParameters":{"id":39851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39850,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39855,"src":"10908:6:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39849,"name":"uint32","nodeType":"ElementaryTypeName","src":"10908:6:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"10907:8:120"},"scope":40428,"src":"10853:87:120","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":39905,"nodeType":"Block","src":"11163:284:120","statements":[{"assignments":[39866],"declarations":[{"constant":false,"id":39866,"mutability":"mutable","name":"root","nameLocation":"11177:4:120","nodeType":"VariableDeclaration","scope":39905,"src":"11169:12:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":39865,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11169:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":39870,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":39867,"name":"MERKLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39550,"src":"11184:6:120","typeDescriptions":{"typeIdentifier":"t_contract$_MerkleTreeManager_$38317","typeString":"contract MerkleTreeManager"}},"id":39868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11191:4:120","memberName":"root","nodeType":"MemberAccess","referencedDeclaration":38094,"src":"11184:11:120","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":39869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11184:13:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"11169:28:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":39876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":39872,"name":"sentMessageRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39576,"src":"11211:16:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":39874,"indexExpression":{"id":39873,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39866,"src":"11228:4:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11211:22:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":39875,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11237:5:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"11211:31:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f6f7420616c72656164792073656e74","id":39877,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11244:19:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c","typeString":"literal_string \"root already sent\""},"value":"root already sent"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c","typeString":"literal_string \"root already sent\""}],"id":39871,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11203:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":39878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11203:61:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39879,"nodeType":"ExpressionStatement","src":"11203:61:120"},{"assignments":[39881],"declarations":[{"constant":false,"id":39881,"mutability":"mutable","name":"_data","nameLocation":"11283:5:120","nodeType":"VariableDeclaration","scope":39905,"src":"11270:18:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":39880,"name":"bytes","nodeType":"ElementaryTypeName","src":"11270:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":39886,"initialValue":{"arguments":[{"id":39884,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39866,"src":"11308:4:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":39882,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"11291:3:120","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":39883,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11295:12:120","memberName":"encodePacked","nodeType":"MemberAccess","src":"11291:16:120","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":39885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11291:22:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"11270:43:120"},{"expression":{"arguments":[{"id":39888,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39881,"src":"11332:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":39889,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39858,"src":"11339:12:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":39887,"name":"_sendMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39210,"src":"11319:12:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory,bytes memory)"}},"id":39890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11319:33:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39891,"nodeType":"ExpressionStatement","src":"11319:33:120"},{"expression":{"id":39896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":39892,"name":"sentMessageRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39576,"src":"11358:16:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":39894,"indexExpression":{"id":39893,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39866,"src":"11375:4:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11358:22:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":39895,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11383:4:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"11358:29:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39897,"nodeType":"ExpressionStatement","src":"11358:29:120"},{"eventCall":{"arguments":[{"id":39899,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39881,"src":"11410:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":39900,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39858,"src":"11417:12:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"id":39901,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11431:3:120","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":39902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11435:6:120","memberName":"sender","nodeType":"MemberAccess","src":"11431:10:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":39898,"name":"MessageSent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47758,"src":"11398:11:120","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_address_$returns$__$","typeString":"function (bytes memory,bytes memory,address)"}},"id":39903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11398:44:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39904,"nodeType":"EmitStatement","src":"11393:49:120"}]},"documentation":{"id":39856,"nodeType":"StructuredDocumentation","src":"10944:132:120","text":" @notice This returns the root of all messages with the origin domain as this domain (i.e.\n all outbound messages)"},"functionSelector":"2bb1ae7c","id":39906,"implemented":true,"kind":"function","modifiers":[{"id":39861,"kind":"modifierInvocation","modifierName":{"id":39860,"name":"whenNotPaused","nameLocations":["11137:13:120"],"nodeType":"IdentifierPath","referencedDeclaration":10607,"src":"11137:13:120"},"nodeType":"ModifierInvocation","src":"11137:13:120"},{"id":39863,"kind":"modifierInvocation","modifierName":{"id":39862,"name":"rateLimited","nameLocations":["11151:11:120"],"nodeType":"IdentifierPath","referencedDeclaration":49663,"src":"11151:11:120"},"nodeType":"ModifierInvocation","src":"11151:11:120"}],"name":"send","nameLocation":"11088:4:120","nodeType":"FunctionDefinition","parameters":{"id":39859,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39858,"mutability":"mutable","name":"_encodedData","nameLocation":"11106:12:120","nodeType":"VariableDeclaration","scope":39906,"src":"11093:25:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":39857,"name":"bytes","nodeType":"ElementaryTypeName","src":"11093:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11092:27:120"},"returnParameters":{"id":39864,"nodeType":"ParameterList","parameters":[],"src":"11163:0:120"},"scope":40428,"src":"11079:368:120","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":39973,"nodeType":"Block","src":"12132:889:120","statements":[{"assignments":[39923],"declarations":[{"constant":false,"id":39923,"mutability":"mutable","name":"_nonce","nameLocation":"12218:6:120","nodeType":"VariableDeclaration","scope":39973,"src":"12211:13:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39922,"name":"uint32","nodeType":"ElementaryTypeName","src":"12211:6:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":39928,"initialValue":{"id":39927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"12227:28:120","subExpression":{"baseExpression":{"id":39924,"name":"nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39586,"src":"12227:6:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint32_$_t_uint32_$","typeString":"mapping(uint32 => uint32)"}},"id":39926,"indexExpression":{"id":39925,"name":"_destinationDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39909,"src":"12234:18:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12227:26:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"12211:44:120"},{"assignments":[39930],"declarations":[{"constant":false,"id":39930,"mutability":"mutable","name":"_message","nameLocation":"12320:8:120","nodeType":"VariableDeclaration","scope":39973,"src":"12307:21:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":39929,"name":"bytes","nodeType":"ElementaryTypeName","src":"12307:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":39944,"initialValue":{"arguments":[{"id":39933,"name":"DOMAIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39039,"src":"12360:6:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"arguments":[{"expression":{"id":39936,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12401:3:120","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":39937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12405:6:120","memberName":"sender","nodeType":"MemberAccess","src":"12401:10:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":39934,"name":"TypeCasts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50188,"src":"12374:9:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TypeCasts_$50188_$","typeString":"type(library TypeCasts)"}},"id":39935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12384:16:120","memberName":"addressToBytes32","nodeType":"MemberAccess","referencedDeclaration":50168,"src":"12374:26:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$_t_bytes32_$","typeString":"function (address) pure returns (bytes32)"}},"id":39938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12374:38:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":39939,"name":"_nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39923,"src":"12420:6:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":39940,"name":"_destinationDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39909,"src":"12434:18:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":39941,"name":"_recipientAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39911,"src":"12460:17:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":39942,"name":"_messageBody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39913,"src":"12485:12:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":39931,"name":"Message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49221,"src":"12331:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Message_$49221_$","typeString":"type(library Message)"}},"id":39932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12339:13:120","memberName":"formatMessage","nodeType":"MemberAccess","referencedDeclaration":49044,"src":"12331:21:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint32_$_t_bytes32_$_t_uint32_$_t_uint32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint32,bytes32,uint32,uint32,bytes32,bytes memory) pure returns (bytes memory)"}},"id":39943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12331:172:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"12307:196:120"},{"assignments":[39946],"declarations":[{"constant":false,"id":39946,"mutability":"mutable","name":"_messageHash","nameLocation":"12573:12:120","nodeType":"VariableDeclaration","scope":39973,"src":"12565:20:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":39945,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12565:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":39950,"initialValue":{"arguments":[{"id":39948,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39930,"src":"12598:8:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":39947,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"12588:9:120","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":39949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12588:19:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"12565:42:120"},{"assignments":[39952,39954],"declarations":[{"constant":false,"id":39952,"mutability":"mutable","name":"_root","nameLocation":"12724:5:120","nodeType":"VariableDeclaration","scope":39973,"src":"12716:13:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":39951,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12716:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":39954,"mutability":"mutable","name":"_count","nameLocation":"12739:6:120","nodeType":"VariableDeclaration","scope":39973,"src":"12731:14:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39953,"name":"uint256","nodeType":"ElementaryTypeName","src":"12731:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":39959,"initialValue":{"arguments":[{"id":39957,"name":"_messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39946,"src":"12763:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":39955,"name":"MERKLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39550,"src":"12749:6:120","typeDescriptions":{"typeIdentifier":"t_contract$_MerkleTreeManager_$38317","typeString":"contract MerkleTreeManager"}},"id":39956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12756:6:120","memberName":"insert","nodeType":"MemberAccess","referencedDeclaration":38312,"src":"12749:13:120","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$returns$_t_bytes32_$_t_uint256_$","typeString":"function (bytes32) external returns (bytes32,uint256)"}},"id":39958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12749:27:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_uint256_$","typeString":"tuple(bytes32,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"12715:61:120"},{"eventCall":{"arguments":[{"id":39961,"name":"_messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39946,"src":"12937:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":39964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39962,"name":"_count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39954,"src":"12951:6:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":39963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12960:1:120","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12951:10:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":39965,"name":"_root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39952,"src":"12963:5:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":39966,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39930,"src":"12970:8:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":39960,"name":"Dispatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39501,"src":"12928:8:120","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes32,uint256,bytes32,bytes memory)"}},"id":39967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12928:51:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39968,"nodeType":"EmitStatement","src":"12923:56:120"},{"expression":{"components":[{"id":39969,"name":"_messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39946,"src":"12993:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":39970,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39930,"src":"13007:8:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":39971,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12992:24:120","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_bytes_memory_ptr_$","typeString":"tuple(bytes32,bytes memory)"}},"functionReturnParameters":39921,"id":39972,"nodeType":"Return","src":"12985:31:120"}]},"documentation":{"id":39907,"nodeType":"StructuredDocumentation","src":"11451:500:120","text":" @notice This function adds transfers to the outbound transfer merkle tree.\n @dev The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \"hub\"),\n it will be combined into a single aggregate root by RootManager (along with outbound roots from other\n chains). This aggregate root will be redistributed to all destination chains.\n NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions"},"functionSelector":"fa31de01","id":39974,"implemented":true,"kind":"function","modifiers":[{"id":39916,"kind":"modifierInvocation","modifierName":{"id":39915,"name":"onlyAllowlistedSender","nameLocations":["12078:21:120"],"nodeType":"IdentifierPath","referencedDeclaration":39604,"src":"12078:21:120"},"nodeType":"ModifierInvocation","src":"12078:21:120"}],"name":"dispatch","nameLocation":"11963:8:120","nodeType":"FunctionDefinition","parameters":{"id":39914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39909,"mutability":"mutable","name":"_destinationDomain","nameLocation":"11984:18:120","nodeType":"VariableDeclaration","scope":39974,"src":"11977:25:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39908,"name":"uint32","nodeType":"ElementaryTypeName","src":"11977:6:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":39911,"mutability":"mutable","name":"_recipientAddress","nameLocation":"12016:17:120","nodeType":"VariableDeclaration","scope":39974,"src":"12008:25:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":39910,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12008:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":39913,"mutability":"mutable","name":"_messageBody","nameLocation":"12052:12:120","nodeType":"VariableDeclaration","scope":39974,"src":"12039:25:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":39912,"name":"bytes","nodeType":"ElementaryTypeName","src":"12039:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11971:97:120"},"returnParameters":{"id":39921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39918,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39974,"src":"12109:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":39917,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12109:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":39920,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39974,"src":"12118:12:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":39919,"name":"bytes","nodeType":"ElementaryTypeName","src":"12118:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12108:23:120"},"scope":40428,"src":"11954:1067:120","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":40114,"nodeType":"Block","src":"14783:1931:120","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":39998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":39995,"name":"_proofs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39979,"src":"14839:7:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptr","typeString":"struct SpokeConnector.Proof calldata[] calldata"}},"id":39996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14847:6:120","memberName":"length","nodeType":"MemberAccess","src":"14839:14:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":39997,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14856:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14839:18:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2170726f6f6673","id":39999,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14859:9:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd","typeString":"literal_string \"!proofs\""},"value":"!proofs"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd","typeString":"literal_string \"!proofs\""}],"id":39994,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14831:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14831:38:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40001,"nodeType":"ExpressionStatement","src":"14831:38:120"},{"assignments":[40003],"declarations":[{"constant":false,"id":40003,"mutability":"mutable","name":"_messageHash","nameLocation":"15130:12:120","nodeType":"VariableDeclaration","scope":40114,"src":"15122:20:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40002,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15122:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":40010,"initialValue":{"arguments":[{"expression":{"baseExpression":{"id":40005,"name":"_proofs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39979,"src":"15155:7:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptr","typeString":"struct SpokeConnector.Proof calldata[] calldata"}},"id":40007,"indexExpression":{"hexValue":"30","id":40006,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15163:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15155:10:120","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$39543_calldata_ptr","typeString":"struct SpokeConnector.Proof calldata"}},"id":40008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15166:7:120","memberName":"message","nodeType":"MemberAccess","referencedDeclaration":39536,"src":"15155:18:120","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":40004,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15145:9:120","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":40009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15145:29:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"15122:52:120"},{"assignments":[40012],"declarations":[{"constant":false,"id":40012,"mutability":"mutable","name":"_messageRoot","nameLocation":"15312:12:120","nodeType":"VariableDeclaration","scope":40114,"src":"15304:20:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40011,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15304:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":40024,"initialValue":{"arguments":[{"id":40014,"name":"_messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40003,"src":"15348:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"baseExpression":{"id":40015,"name":"_proofs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39979,"src":"15362:7:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptr","typeString":"struct SpokeConnector.Proof calldata[] calldata"}},"id":40017,"indexExpression":{"hexValue":"30","id":40016,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15370:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15362:10:120","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$39543_calldata_ptr","typeString":"struct SpokeConnector.Proof calldata"}},"id":40018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15373:4:120","memberName":"path","nodeType":"MemberAccess","referencedDeclaration":39540,"src":"15362:15:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_calldata_ptr","typeString":"bytes32[32] calldata"}},{"expression":{"baseExpression":{"id":40019,"name":"_proofs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39979,"src":"15379:7:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptr","typeString":"struct SpokeConnector.Proof calldata[] calldata"}},"id":40021,"indexExpression":{"hexValue":"30","id":40020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15387:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15379:10:120","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$39543_calldata_ptr","typeString":"struct SpokeConnector.Proof calldata"}},"id":40022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15390:5:120","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":39542,"src":"15379:16:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes32_$32_calldata_ptr","typeString":"bytes32[32] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40013,"name":"calculateMessageRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40253,"src":"15327:20:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_bytes32_$32_calldata_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32[32] calldata,uint256) view returns (bytes32)"}},"id":40023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15327:69:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"15304:92:120"},{"expression":{"arguments":[{"id":40026,"name":"_messageRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40012,"src":"15502:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":40027,"name":"_aggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39981,"src":"15516:14:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":40028,"name":"_aggregatePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39985,"src":"15532:14:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_calldata_ptr","typeString":"bytes32[32] calldata"}},{"id":40029,"name":"_aggregateIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39987,"src":"15548:15:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes32_$32_calldata_ptr","typeString":"bytes32[32] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40025,"name":"proveMessageRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40306,"src":"15485:16:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_array$_t_bytes32_$32_calldata_ptr_$_t_uint256_$returns$__$","typeString":"function (bytes32,bytes32,bytes32[32] calldata,uint256)"}},"id":40030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15485:79:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40031,"nodeType":"ExpressionStatement","src":"15485:79:120"},{"expression":{"id":40037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":40032,"name":"messages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39592,"src":"15667:8:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_MessageStatus_$39534_$","typeString":"mapping(bytes32 => enum SpokeConnector.MessageStatus)"}},"id":40034,"indexExpression":{"id":40033,"name":"_messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40003,"src":"15676:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15667:22:120","typeDescriptions":{"typeIdentifier":"t_enum$_MessageStatus_$39534","typeString":"enum SpokeConnector.MessageStatus"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":40035,"name":"MessageStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39534,"src":"15692:13:120","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_MessageStatus_$39534_$","typeString":"type(enum SpokeConnector.MessageStatus)"}},"id":40036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15706:6:120","memberName":"Proven","nodeType":"MemberAccess","referencedDeclaration":39532,"src":"15692:20:120","typeDescriptions":{"typeIdentifier":"t_enum$_MessageStatus_$39534","typeString":"enum SpokeConnector.MessageStatus"}},"src":"15667:45:120","typeDescriptions":{"typeIdentifier":"t_enum$_MessageStatus_$39534","typeString":"enum SpokeConnector.MessageStatus"}},"id":40038,"nodeType":"ExpressionStatement","src":"15667:45:120"},{"assignments":[40040],"declarations":[{"constant":false,"id":40040,"mutability":"mutable","name":"len","nameLocation":"15846:3:120","nodeType":"VariableDeclaration","scope":40114,"src":"15838:11:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40039,"name":"uint256","nodeType":"ElementaryTypeName","src":"15838:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":40043,"initialValue":{"expression":{"id":40041,"name":"_proofs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39979,"src":"15852:7:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptr","typeString":"struct SpokeConnector.Proof calldata[] calldata"}},"id":40042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15860:6:120","memberName":"length","nodeType":"MemberAccess","src":"15852:14:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15838:28:120"},{"body":{"id":40092,"nodeType":"Block","src":"15902:411:120","statements":[{"expression":{"id":40058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40051,"name":"_messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40003,"src":"15910:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"baseExpression":{"id":40053,"name":"_proofs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39979,"src":"15935:7:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptr","typeString":"struct SpokeConnector.Proof calldata[] calldata"}},"id":40055,"indexExpression":{"id":40054,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40045,"src":"15943:1:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15935:10:120","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$39543_calldata_ptr","typeString":"struct SpokeConnector.Proof calldata"}},"id":40056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15946:7:120","memberName":"message","nodeType":"MemberAccess","referencedDeclaration":39536,"src":"15935:18:120","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":40052,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15925:9:120","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":40057,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15925:29:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"15910:44:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":40059,"nodeType":"ExpressionStatement","src":"15910:44:120"},{"assignments":[40061],"declarations":[{"constant":false,"id":40061,"mutability":"mutable","name":"_calculatedRoot","nameLocation":"15970:15:120","nodeType":"VariableDeclaration","scope":40092,"src":"15962:23:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40060,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15962:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":40073,"initialValue":{"arguments":[{"id":40063,"name":"_messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40003,"src":"16009:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"baseExpression":{"id":40064,"name":"_proofs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39979,"src":"16023:7:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptr","typeString":"struct SpokeConnector.Proof calldata[] calldata"}},"id":40066,"indexExpression":{"id":40065,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40045,"src":"16031:1:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16023:10:120","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$39543_calldata_ptr","typeString":"struct SpokeConnector.Proof calldata"}},"id":40067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16034:4:120","memberName":"path","nodeType":"MemberAccess","referencedDeclaration":39540,"src":"16023:15:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_calldata_ptr","typeString":"bytes32[32] calldata"}},{"expression":{"baseExpression":{"id":40068,"name":"_proofs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39979,"src":"16040:7:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptr","typeString":"struct SpokeConnector.Proof calldata[] calldata"}},"id":40070,"indexExpression":{"id":40069,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40045,"src":"16048:1:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16040:10:120","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$39543_calldata_ptr","typeString":"struct SpokeConnector.Proof calldata"}},"id":40071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16051:5:120","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":39542,"src":"16040:16:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes32_$32_calldata_ptr","typeString":"bytes32[32] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40062,"name":"calculateMessageRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40253,"src":"15988:20:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_bytes32_$32_calldata_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32[32] calldata,uint256) view returns (bytes32)"}},"id":40072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15988:69:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"15962:95:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":40077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40075,"name":"_calculatedRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40061,"src":"16138:15:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":40076,"name":"_messageRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40012,"src":"16157:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"16138:31:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21736861726564526f6f74","id":40078,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16171:13:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6","typeString":"literal_string \"!sharedRoot\""},"value":"!sharedRoot"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6","typeString":"literal_string \"!sharedRoot\""}],"id":40074,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16130:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16130:55:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40080,"nodeType":"ExpressionStatement","src":"16130:55:120"},{"expression":{"id":40086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":40081,"name":"messages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39592,"src":"16221:8:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_MessageStatus_$39534_$","typeString":"mapping(bytes32 => enum SpokeConnector.MessageStatus)"}},"id":40083,"indexExpression":{"id":40082,"name":"_messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40003,"src":"16230:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16221:22:120","typeDescriptions":{"typeIdentifier":"t_enum$_MessageStatus_$39534","typeString":"enum SpokeConnector.MessageStatus"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":40084,"name":"MessageStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39534,"src":"16246:13:120","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_MessageStatus_$39534_$","typeString":"type(enum SpokeConnector.MessageStatus)"}},"id":40085,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16260:6:120","memberName":"Proven","nodeType":"MemberAccess","referencedDeclaration":39532,"src":"16246:20:120","typeDescriptions":{"typeIdentifier":"t_enum$_MessageStatus_$39534","typeString":"enum SpokeConnector.MessageStatus"}},"src":"16221:45:120","typeDescriptions":{"typeIdentifier":"t_enum$_MessageStatus_$39534","typeString":"enum SpokeConnector.MessageStatus"}},"id":40087,"nodeType":"ExpressionStatement","src":"16221:45:120"},{"id":40091,"nodeType":"UncheckedBlock","src":"16275:32:120","statements":[{"expression":{"id":40089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"16295:3:120","subExpression":{"id":40088,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40045,"src":"16297:1:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":40090,"nodeType":"ExpressionStatement","src":"16295:3:120"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40048,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40045,"src":"15891:1:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":40049,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40040,"src":"15895:3:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15891:7:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40093,"initializationExpression":{"assignments":[40045],"declarations":[{"constant":false,"id":40045,"mutability":"mutable","name":"i","nameLocation":"15884:1:120","nodeType":"VariableDeclaration","scope":40093,"src":"15877:8:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":40044,"name":"uint32","nodeType":"ElementaryTypeName","src":"15877:6:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":40047,"initialValue":{"hexValue":"31","id":40046,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15888:1:120","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"15877:12:120"},"nodeType":"ForStatement","src":"15872:441:120"},{"body":{"id":40112,"nodeType":"Block","src":"16629:81:120","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"id":40102,"name":"_proofs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39979,"src":"16645:7:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptr","typeString":"struct SpokeConnector.Proof calldata[] calldata"}},"id":40104,"indexExpression":{"id":40103,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40095,"src":"16653:1:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16645:10:120","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$39543_calldata_ptr","typeString":"struct SpokeConnector.Proof calldata"}},"id":40105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16656:7:120","memberName":"message","nodeType":"MemberAccess","referencedDeclaration":39536,"src":"16645:18:120","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":40101,"name":"process","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40427,"src":"16637:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (bytes memory) returns (bool)"}},"id":40106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16637:27:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40107,"nodeType":"ExpressionStatement","src":"16637:27:120"},{"id":40111,"nodeType":"UncheckedBlock","src":"16672:32:120","statements":[{"expression":{"id":40109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"16692:3:120","subExpression":{"id":40108,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40095,"src":"16694:1:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":40110,"nodeType":"ExpressionStatement","src":"16692:3:120"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40098,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40095,"src":"16618:1:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":40099,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40040,"src":"16622:3:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16618:7:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40113,"initializationExpression":{"assignments":[40095],"declarations":[{"constant":false,"id":40095,"mutability":"mutable","name":"i","nameLocation":"16611:1:120","nodeType":"VariableDeclaration","scope":40113,"src":"16604:8:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":40094,"name":"uint32","nodeType":"ElementaryTypeName","src":"16604:6:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":40097,"initialValue":{"hexValue":"30","id":40096,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16615:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16604:12:120"},"nodeType":"ForStatement","src":"16599:111:120"}]},"documentation":{"id":39975,"nodeType":"StructuredDocumentation","src":"13025:1562:120","text":" @notice Must be able to call the `handle` function on the BridgeRouter contract. This is called\n on the destination domain to handle incoming messages.\n Proving:\n Calculates the expected inbound root from an origin chain given a leaf (message hash),\n the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this\n calculated inbound root is included in the current aggregateRoot, given its index in the aggregator\n tree and the proof of inclusion.\n Processing:\n After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for\n execution.\n @dev Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they\n must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.\n @dev Intended to be called by the relayer at specific intervals during runtime.\n @dev Will record a calculated root as having been proven if we've already proven that it was included\n in the aggregateRoot.\n @param _proofs Batch of Proofs containing messages for proving/processing.\n @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\n already been delivered to this spoke connector contract and surpassed the validation period.\n @param _aggregatePath Merkle path of inclusion for the inbound root.\n @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub."},"functionSelector":"508a109b","id":40115,"implemented":true,"kind":"function","modifiers":[{"id":39990,"kind":"modifierInvocation","modifierName":{"id":39989,"name":"whenNotPaused","nameLocations":["14756:13:120"],"nodeType":"IdentifierPath","referencedDeclaration":10607,"src":"14756:13:120"},"nodeType":"ModifierInvocation","src":"14756:13:120"},{"id":39992,"kind":"modifierInvocation","modifierName":{"id":39991,"name":"nonReentrant","nameLocations":["14770:12:120"],"nodeType":"IdentifierPath","referencedDeclaration":10710,"src":"14770:12:120"},"nodeType":"ModifierInvocation","src":"14770:12:120"}],"name":"proveAndProcess","nameLocation":"14599:15:120","nodeType":"FunctionDefinition","parameters":{"id":39988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39979,"mutability":"mutable","name":"_proofs","nameLocation":"14637:7:120","nodeType":"VariableDeclaration","scope":40115,"src":"14620:24:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptr","typeString":"struct SpokeConnector.Proof[]"},"typeName":{"baseType":{"id":39977,"nodeType":"UserDefinedTypeName","pathNode":{"id":39976,"name":"Proof","nameLocations":["14620:5:120"],"nodeType":"IdentifierPath","referencedDeclaration":39543,"src":"14620:5:120"},"referencedDeclaration":39543,"src":"14620:5:120","typeDescriptions":{"typeIdentifier":"t_struct$_Proof_$39543_storage_ptr","typeString":"struct SpokeConnector.Proof"}},"id":39978,"nodeType":"ArrayTypeName","src":"14620:7:120","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Proof_$39543_storage_$dyn_storage_ptr","typeString":"struct SpokeConnector.Proof[]"}},"visibility":"internal"},{"constant":false,"id":39981,"mutability":"mutable","name":"_aggregateRoot","nameLocation":"14658:14:120","nodeType":"VariableDeclaration","scope":40115,"src":"14650:22:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":39980,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14650:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":39985,"mutability":"mutable","name":"_aggregatePath","nameLocation":"14699:14:120","nodeType":"VariableDeclaration","scope":40115,"src":"14678:35:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_calldata_ptr","typeString":"bytes32[32]"},"typeName":{"baseType":{"id":39982,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14678:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":39984,"length":{"hexValue":"3332","id":39983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14686:2:120","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"nodeType":"ArrayTypeName","src":"14678:11:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_storage_ptr","typeString":"bytes32[32]"}},"visibility":"internal"},{"constant":false,"id":39987,"mutability":"mutable","name":"_aggregateIndex","nameLocation":"14727:15:120","nodeType":"VariableDeclaration","scope":40115,"src":"14719:23:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39986,"name":"uint256","nodeType":"ElementaryTypeName","src":"14719:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14614:132:120"},"returnParameters":{"id":39993,"nodeType":"ParameterList","parameters":[],"src":"14783:0:120"},"scope":40428,"src":"14590:2124:120","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":40159,"nodeType":"Block","src":"17155:300:120","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":40127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40122,"name":"_newRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40118,"src":"17169:8:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"","id":40125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17189:2:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":40124,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17181:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":40123,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17181:7:120","typeDescriptions":{}}},"id":40126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17181:11:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"17169:23:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6e657720726f6f7420656d707479","id":40128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17194:16:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8","typeString":"literal_string \"new root empty\""},"value":"new root empty"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8","typeString":"literal_string \"new root empty\""}],"id":40121,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17161:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17161:50:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40130,"nodeType":"ExpressionStatement","src":"17161:50:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":40132,"name":"pendingAggregateRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39561,"src":"17225:21:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":40134,"indexExpression":{"id":40133,"name":"_newRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40118,"src":"17247:8:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17225:31:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":40135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17260:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17225:36:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f6f7420616c72656164792070656e64696e67","id":40137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17263:22:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d","typeString":"literal_string \"root already pending\""},"value":"root already pending"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d","typeString":"literal_string \"root already pending\""}],"id":40131,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17217:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17217:69:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40139,"nodeType":"ExpressionStatement","src":"17217:69:120"},{"expression":{"arguments":[{"id":40144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"17300:31:120","subExpression":{"baseExpression":{"id":40141,"name":"provenAggregateRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39566,"src":"17301:20:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":40143,"indexExpression":{"id":40142,"name":"_newRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40118,"src":"17322:8:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17301:30:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"726f6f7420616c72656164792070726f76656e","id":40145,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17333:21:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c","typeString":"literal_string \"root already proven\""},"value":"root already proven"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c","typeString":"literal_string \"root already proven\""}],"id":40140,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17292:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17292:63:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40147,"nodeType":"ExpressionStatement","src":"17292:63:120"},{"expression":{"id":40153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":40148,"name":"pendingAggregateRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39561,"src":"17362:21:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":40150,"indexExpression":{"id":40149,"name":"_newRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40118,"src":"17384:8:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"17362:31:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":40151,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"17396:5:120","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":40152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17402:6:120","memberName":"number","nodeType":"MemberAccess","src":"17396:12:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17362:46:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40154,"nodeType":"ExpressionStatement","src":"17362:46:120"},{"eventCall":{"arguments":[{"id":40156,"name":"_newRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40118,"src":"17441:8:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":40155,"name":"AggregateRootReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39483,"src":"17419:21:120","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":40157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17419:31:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40158,"nodeType":"EmitStatement","src":"17414:36:120"}]},"documentation":{"id":40116,"nodeType":"StructuredDocumentation","src":"16768:327:120","text":" @notice This is either called by the Connector (AKA `this`) on the spoke (L2) chain after retrieving\n latest `aggregateRoot` from the AMB (sourced from mainnet) OR called by the AMB directly.\n @dev Must check the msg.sender on the origin chain to ensure only the root manager is passing\n these roots."},"id":40160,"implemented":true,"kind":"function","modifiers":[],"name":"receiveAggregateRoot","nameLocation":"17107:20:120","nodeType":"FunctionDefinition","parameters":{"id":40119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40118,"mutability":"mutable","name":"_newRoot","nameLocation":"17136:8:120","nodeType":"VariableDeclaration","scope":40160,"src":"17128:16:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40117,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17128:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"17127:18:120"},"returnParameters":{"id":40120,"nodeType":"ParameterList","parameters":[],"src":"17155:0:120"},"scope":40428,"src":"17098:357:120","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":40220,"nodeType":"Block","src":"17953:1118:120","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":40172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40167,"name":"_aggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40163,"src":"18006:14:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"","id":40170,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18032:2:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":40169,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18024:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":40168,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18024:7:120","typeDescriptions":{}}},"id":40171,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18024:11:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"18006:29:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616767726567617465526f6f7420656d707479","id":40173,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18037:21:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617","typeString":"literal_string \"aggregateRoot empty\""},"value":"aggregateRoot empty"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617","typeString":"literal_string \"aggregateRoot empty\""}],"id":40166,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17998:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17998:61:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40175,"nodeType":"ExpressionStatement","src":"17998:61:120"},{"condition":{"baseExpression":{"id":40176,"name":"provenAggregateRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39566,"src":"18149:20:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":40178,"indexExpression":{"id":40177,"name":"_aggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40163,"src":"18170:14:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18149:36:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40181,"nodeType":"IfStatement","src":"18145:104:120","trueBody":{"id":40180,"nodeType":"Block","src":"18187:62:120","statements":[{"functionReturnParameters":40165,"id":40179,"nodeType":"Return","src":"18195:7:120"}]}},{"assignments":[40183],"declarations":[{"constant":false,"id":40183,"mutability":"mutable","name":"_aggregateRootCommitBlock","nameLocation":"18362:25:120","nodeType":"VariableDeclaration","scope":40220,"src":"18354:33:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40182,"name":"uint256","nodeType":"ElementaryTypeName","src":"18354:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":40187,"initialValue":{"baseExpression":{"id":40184,"name":"pendingAggregateRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39561,"src":"18390:21:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":40186,"indexExpression":{"id":40185,"name":"_aggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40163,"src":"18412:14:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18390:37:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18354:73:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40189,"name":"_aggregateRootCommitBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40183,"src":"18441:25:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":40190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18470:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18441:30:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616767726567617465526f6f7420216578697374","id":40192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18473:22:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9","typeString":"literal_string \"aggregateRoot !exist\""},"value":"aggregateRoot !exist"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9","typeString":"literal_string \"aggregateRoot !exist\""}],"id":40188,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18433:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18433:63:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40194,"nodeType":"ExpressionStatement","src":"18433:63:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40196,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"18597:5:120","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":40197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18603:6:120","memberName":"number","nodeType":"MemberAccess","src":"18597:12:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":40198,"name":"_aggregateRootCommitBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40183,"src":"18612:25:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18597:40:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":40200,"name":"delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39546,"src":"18641:11:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18597:55:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616767726567617465526f6f7420217665726966696564","id":40202,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18654:25:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89","typeString":"literal_string \"aggregateRoot !verified\""},"value":"aggregateRoot !verified"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89","typeString":"literal_string \"aggregateRoot !verified\""}],"id":40195,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18589:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18589:91:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40204,"nodeType":"ExpressionStatement","src":"18589:91:120"},{"expression":{"id":40209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":40205,"name":"provenAggregateRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39566,"src":"18808:20:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":40207,"indexExpression":{"id":40206,"name":"_aggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40163,"src":"18829:14:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18808:36:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":40208,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"18847:4:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"18808:43:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40210,"nodeType":"ExpressionStatement","src":"18808:43:120"},{"eventCall":{"arguments":[{"id":40212,"name":"_aggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40163,"src":"18884:14:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":40211,"name":"AggregateRootVerified","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39491,"src":"18862:21:120","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":40213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18862:37:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40214,"nodeType":"EmitStatement","src":"18857:42:120"},{"expression":{"id":40218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"19022:44:120","subExpression":{"baseExpression":{"id":40215,"name":"pendingAggregateRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39561,"src":"19029:21:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":40217,"indexExpression":{"id":40216,"name":"_aggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40163,"src":"19051:14:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"19029:37:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40219,"nodeType":"ExpressionStatement","src":"19022:44:120"}]},"documentation":{"id":40161,"nodeType":"StructuredDocumentation","src":"17459:429:120","text":" @notice Checks whether the given aggregate root has surpassed the verification period.\n @dev Reverts if the given aggregate root is invalid (does not exist) OR has not surpassed\n verification period.\n @dev If the target aggregate root is pending and HAS surpassed the verification period, then we will\n move it over to the proven mapping.\n @param _aggregateRoot Target aggregate root to verify."},"id":40221,"implemented":true,"kind":"function","modifiers":[],"name":"verifyAggregateRoot","nameLocation":"17900:19:120","nodeType":"FunctionDefinition","parameters":{"id":40164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40163,"mutability":"mutable","name":"_aggregateRoot","nameLocation":"17928:14:120","nodeType":"VariableDeclaration","scope":40221,"src":"17920:22:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40162,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17920:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"17919:24:120"},"returnParameters":{"id":40165,"nodeType":"ParameterList","parameters":[],"src":"17953:0:120"},"scope":40428,"src":"17891:1180:120","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":40252,"nodeType":"Block","src":"19831:572:120","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_MessageStatus_$39534","typeString":"enum SpokeConnector.MessageStatus"},"id":40241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":40236,"name":"messages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39592,"src":"19925:8:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_MessageStatus_$39534_$","typeString":"mapping(bytes32 => enum SpokeConnector.MessageStatus)"}},"id":40238,"indexExpression":{"id":40237,"name":"_messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40224,"src":"19934:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19925:22:120","typeDescriptions":{"typeIdentifier":"t_enum$_MessageStatus_$39534","typeString":"enum SpokeConnector.MessageStatus"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":40239,"name":"MessageStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39534,"src":"19951:13:120","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_MessageStatus_$39534_$","typeString":"type(enum SpokeConnector.MessageStatus)"}},"id":40240,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"19965:4:120","memberName":"None","nodeType":"MemberAccess","referencedDeclaration":39531,"src":"19951:18:120","typeDescriptions":{"typeIdentifier":"t_enum$_MessageStatus_$39534","typeString":"enum SpokeConnector.MessageStatus"}},"src":"19925:44:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"214d6573736167655374617475732e4e6f6e65","id":40242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19971:21:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd","typeString":"literal_string \"!MessageStatus.None\""},"value":"!MessageStatus.None"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd","typeString":"literal_string \"!MessageStatus.None\""}],"id":40235,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19917:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19917:76:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40244,"nodeType":"ExpressionStatement","src":"19917:76:120"},{"expression":{"arguments":[{"id":40247,"name":"_messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40224,"src":"20356:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":40248,"name":"_messagePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40228,"src":"20370:12:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_calldata_ptr","typeString":"bytes32[32] calldata"}},{"id":40249,"name":"_messageIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40230,"src":"20384:13:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes32_$32_calldata_ptr","typeString":"bytes32[32] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":40245,"name":"MerkleLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48999,"src":"20335:9:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MerkleLib_$48999_$","typeString":"type(library MerkleLib)"}},"id":40246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20345:10:120","memberName":"branchRoot","nodeType":"MemberAccess","referencedDeclaration":48998,"src":"20335:20:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_array$_t_bytes32_$32_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32[32] memory,uint256) pure returns (bytes32)"}},"id":40250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20335:63:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":40234,"id":40251,"nodeType":"Return","src":"20328:70:120"}]},"documentation":{"id":40222,"nodeType":"StructuredDocumentation","src":"19075:595:120","text":" @notice Checks whether a given message is valid. If so, calculates the expected inbound root from an\n origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion.\n @dev Reverts if message's MessageStatus != None (i.e. if message was already proven or processed).\n @param _messageHash Leaf (message hash) that requires proving.\n @param _messagePath Merkle path of inclusion for the leaf.\n @param _messageIndex Index of leaf in the merkle tree on the origin chain of the message.\n @return bytes32 Calculated root.*"},"id":40253,"implemented":true,"kind":"function","modifiers":[],"name":"calculateMessageRoot","nameLocation":"19682:20:120","nodeType":"FunctionDefinition","parameters":{"id":40231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40224,"mutability":"mutable","name":"_messageHash","nameLocation":"19716:12:120","nodeType":"VariableDeclaration","scope":40253,"src":"19708:20:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40223,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19708:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":40228,"mutability":"mutable","name":"_messagePath","nameLocation":"19755:12:120","nodeType":"VariableDeclaration","scope":40253,"src":"19734:33:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_calldata_ptr","typeString":"bytes32[32]"},"typeName":{"baseType":{"id":40225,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19734:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":40227,"length":{"hexValue":"3332","id":40226,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19742:2:120","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"nodeType":"ArrayTypeName","src":"19734:11:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_storage_ptr","typeString":"bytes32[32]"}},"visibility":"internal"},{"constant":false,"id":40230,"mutability":"mutable","name":"_messageIndex","nameLocation":"19781:13:120","nodeType":"VariableDeclaration","scope":40253,"src":"19773:21:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40229,"name":"uint256","nodeType":"ElementaryTypeName","src":"19773:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19702:96:120"},"returnParameters":{"id":40234,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40233,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40253,"src":"19822:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40232,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19822:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"19821:9:120"},"scope":40428,"src":"19673:730:120","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":40305,"nodeType":"Block","src":"21121:1098:120","statements":[{"condition":{"baseExpression":{"id":40267,"name":"provenMessageRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39571,"src":"21206:18:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":40269,"indexExpression":{"id":40268,"name":"_messageRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40256,"src":"21225:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21206:32:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40272,"nodeType":"IfStatement","src":"21202:342:120","trueBody":{"id":40271,"nodeType":"Block","src":"21240:304:120","statements":[{"functionReturnParameters":40266,"id":40270,"nodeType":"Return","src":"21531:7:120"}]}},{"expression":{"arguments":[{"id":40274,"name":"_aggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40258,"src":"21619:14:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":40273,"name":"verifyAggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40221,"src":"21599:19:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":40275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21599:35:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40276,"nodeType":"ExpressionStatement","src":"21599:35:120"},{"assignments":[40278],"declarations":[{"constant":false,"id":40278,"mutability":"mutable","name":"_calculatedAggregateRoot","nameLocation":"21748:24:120","nodeType":"VariableDeclaration","scope":40305,"src":"21740:32:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40277,"name":"bytes32","nodeType":"ElementaryTypeName","src":"21740:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":40285,"initialValue":{"arguments":[{"id":40281,"name":"_messageRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40256,"src":"21796:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":40282,"name":"_aggregatePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40262,"src":"21810:14:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_calldata_ptr","typeString":"bytes32[32] calldata"}},{"id":40283,"name":"_aggregateIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40264,"src":"21826:15:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes32_$32_calldata_ptr","typeString":"bytes32[32] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":40279,"name":"MerkleLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48999,"src":"21775:9:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MerkleLib_$48999_$","typeString":"type(library MerkleLib)"}},"id":40280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21785:10:120","memberName":"branchRoot","nodeType":"MemberAccess","referencedDeclaration":48998,"src":"21775:20:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_array$_t_bytes32_$32_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32[32] memory,uint256) pure returns (bytes32)"}},"id":40284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21775:67:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"21740:102:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":40289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40287,"name":"_calculatedAggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40278,"src":"21940:24:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":40288,"name":"_aggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40258,"src":"21968:14:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"21940:42:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c696420696e626f756e64526f6f74","id":40290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"21984:21:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28","typeString":"literal_string \"invalid inboundRoot\""},"value":"invalid inboundRoot"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28","typeString":"literal_string \"invalid inboundRoot\""}],"id":40286,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"21932:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21932:74:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40292,"nodeType":"ExpressionStatement","src":"21932:74:120"},{"expression":{"id":40297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":40293,"name":"provenMessageRoots","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39571,"src":"22104:18:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":40295,"indexExpression":{"id":40294,"name":"_messageRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40256,"src":"22123:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22104:32:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":40296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"22139:4:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"22104:39:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40298,"nodeType":"ExpressionStatement","src":"22104:39:120"},{"eventCall":{"arguments":[{"id":40300,"name":"_messageRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40256,"src":"22168:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":40301,"name":"_aggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40258,"src":"22182:14:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":40302,"name":"_aggregateIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40264,"src":"22198:15:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40299,"name":"MessageProven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39530,"src":"22154:13:120","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,bytes32,uint256)"}},"id":40303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22154:60:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40304,"nodeType":"EmitStatement","src":"22149:65:120"}]},"documentation":{"id":40254,"nodeType":"StructuredDocumentation","src":"20407:548:120","text":" @notice Prove an inbound message root from another chain is included in the target aggregateRoot.\n @param _messageRoot The message root we want to verify.\n @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\n already been delivered to this spoke connector contract and surpassed the validation period.\n @param _aggregatePath Merkle path of inclusion for the inbound root.\n @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub."},"id":40306,"implemented":true,"kind":"function","modifiers":[],"name":"proveMessageRoot","nameLocation":"20967:16:120","nodeType":"FunctionDefinition","parameters":{"id":40265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40256,"mutability":"mutable","name":"_messageRoot","nameLocation":"20997:12:120","nodeType":"VariableDeclaration","scope":40306,"src":"20989:20:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40255,"name":"bytes32","nodeType":"ElementaryTypeName","src":"20989:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":40258,"mutability":"mutable","name":"_aggregateRoot","nameLocation":"21023:14:120","nodeType":"VariableDeclaration","scope":40306,"src":"21015:22:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40257,"name":"bytes32","nodeType":"ElementaryTypeName","src":"21015:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":40262,"mutability":"mutable","name":"_aggregatePath","nameLocation":"21064:14:120","nodeType":"VariableDeclaration","scope":40306,"src":"21043:35:120","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_calldata_ptr","typeString":"bytes32[32]"},"typeName":{"baseType":{"id":40259,"name":"bytes32","nodeType":"ElementaryTypeName","src":"21043:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":40261,"length":{"hexValue":"3332","id":40260,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21051:2:120","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"nodeType":"ArrayTypeName","src":"21043:11:120","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_storage_ptr","typeString":"bytes32[32]"}},"visibility":"internal"},{"constant":false,"id":40264,"mutability":"mutable","name":"_aggregateIndex","nameLocation":"21092:15:120","nodeType":"VariableDeclaration","scope":40306,"src":"21084:23:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40263,"name":"uint256","nodeType":"ElementaryTypeName","src":"21084:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20983:128:120"},"returnParameters":{"id":40266,"nodeType":"ParameterList","parameters":[],"src":"21121:0:120"},"scope":40428,"src":"20958:1261:120","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":40426,"nodeType":"Block","src":"22777:1658:120","statements":[{"assignments":[40315],"declarations":[{"constant":false,"id":40315,"mutability":"mutable","name":"_m","nameLocation":"22791:2:120","nodeType":"VariableDeclaration","scope":40426,"src":"22783:10:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":40314,"name":"bytes29","nodeType":"ElementaryTypeName","src":"22783:7:120","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"id":40320,"initialValue":{"arguments":[{"hexValue":"30","id":40318,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22809:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":40316,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40309,"src":"22796:8:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":40317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22805:3:120","memberName":"ref","nodeType":"MemberAccess","referencedDeclaration":50591,"src":"22796:12:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,uint40) pure returns (bytes29)"}},"id":40319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22796:15:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"nodeType":"VariableDeclarationStatement","src":"22783:28:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":40326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":40322,"name":"_m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40315,"src":"22873:2:120","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":40323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22876:11:120","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":49143,"src":"22873:14:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (uint32)"}},"id":40324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22873:16:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":40325,"name":"DOMAIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39039,"src":"22893:6:120","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"22873:26:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2164657374696e6174696f6e","id":40327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"22901:14:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77","typeString":"literal_string \"!destination\""},"value":"!destination"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77","typeString":"literal_string \"!destination\""}],"id":40321,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"22865:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22865:51:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40329,"nodeType":"ExpressionStatement","src":"22865:51:120"},{"assignments":[40331],"declarations":[{"constant":false,"id":40331,"mutability":"mutable","name":"_messageHash","nameLocation":"22968:12:120","nodeType":"VariableDeclaration","scope":40426,"src":"22960:20:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40330,"name":"bytes32","nodeType":"ElementaryTypeName","src":"22960:7:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":40335,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":40332,"name":"_m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40315,"src":"22983:2:120","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":40333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22986:6:120","memberName":"keccak","nodeType":"MemberAccess","referencedDeclaration":50951,"src":"22983:9:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (bytes32)"}},"id":40334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22983:11:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"22960:34:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_MessageStatus_$39534","typeString":"enum SpokeConnector.MessageStatus"},"id":40342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":40337,"name":"messages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39592,"src":"23008:8:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_MessageStatus_$39534_$","typeString":"mapping(bytes32 => enum SpokeConnector.MessageStatus)"}},"id":40339,"indexExpression":{"id":40338,"name":"_messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40331,"src":"23017:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23008:22:120","typeDescriptions":{"typeIdentifier":"t_enum$_MessageStatus_$39534","typeString":"enum SpokeConnector.MessageStatus"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":40340,"name":"MessageStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39534,"src":"23034:13:120","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_MessageStatus_$39534_$","typeString":"type(enum SpokeConnector.MessageStatus)"}},"id":40341,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"23048:6:120","memberName":"Proven","nodeType":"MemberAccess","referencedDeclaration":39532,"src":"23034:20:120","typeDescriptions":{"typeIdentifier":"t_enum$_MessageStatus_$39534","typeString":"enum SpokeConnector.MessageStatus"}},"src":"23008:46:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2170726f76656e","id":40343,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23056:9:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab","typeString":"literal_string \"!proven\""},"value":"!proven"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab","typeString":"literal_string \"!proven\""}],"id":40336,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"23000:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23000:66:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40345,"nodeType":"ExpressionStatement","src":"23000:66:120"},{"expression":{"id":40351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":40346,"name":"messages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39592,"src":"23209:8:120","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_MessageStatus_$39534_$","typeString":"mapping(bytes32 => enum SpokeConnector.MessageStatus)"}},"id":40348,"indexExpression":{"id":40347,"name":"_messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40331,"src":"23218:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23209:22:120","typeDescriptions":{"typeIdentifier":"t_enum$_MessageStatus_$39534","typeString":"enum SpokeConnector.MessageStatus"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":40349,"name":"MessageStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39534,"src":"23234:13:120","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_MessageStatus_$39534_$","typeString":"type(enum SpokeConnector.MessageStatus)"}},"id":40350,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"23248:9:120","memberName":"Processed","nodeType":"MemberAccess","referencedDeclaration":39533,"src":"23234:23:120","typeDescriptions":{"typeIdentifier":"t_enum$_MessageStatus_$39534","typeString":"enum SpokeConnector.MessageStatus"}},"src":"23209:48:120","typeDescriptions":{"typeIdentifier":"t_enum$_MessageStatus_$39534","typeString":"enum SpokeConnector.MessageStatus"}},"id":40352,"nodeType":"ExpressionStatement","src":"23209:48:120"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":40354,"name":"gasleft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-7,"src":"23734:7:120","typeDescriptions":{"typeIdentifier":"t_function_gasleft_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":40355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23734:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40356,"name":"PROCESS_GAS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39553,"src":"23746:11:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":40357,"name":"RESERVE_GAS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39556,"src":"23760:11:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23746:25:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":40359,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23774:1:120","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"23746:29:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23734:41:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21676173","id":40362,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23777:6:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479","typeString":"literal_string \"!gas\""},"value":"!gas"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479","typeString":"literal_string \"!gas\""}],"id":40353,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"23726:7:120","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23726:58:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40364,"nodeType":"ExpressionStatement","src":"23726:58:120"},{"assignments":[40366],"declarations":[{"constant":false,"id":40366,"mutability":"mutable","name":"_recipient","nameLocation":"23831:10:120","nodeType":"VariableDeclaration","scope":40426,"src":"23823:18:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40365,"name":"address","nodeType":"ElementaryTypeName","src":"23823:7:120","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":40370,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":40367,"name":"_m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40315,"src":"23844:2:120","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":40368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23847:16:120","memberName":"recipientAddress","nodeType":"MemberAccess","referencedDeclaration":49174,"src":"23844:19:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_address_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (address)"}},"id":40369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23844:21:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"23823:42:120"},{"assignments":[40372],"declarations":[{"constant":false,"id":40372,"mutability":"mutable","name":"_gas","nameLocation":"23911:4:120","nodeType":"VariableDeclaration","scope":40426,"src":"23903:12:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40371,"name":"uint256","nodeType":"ElementaryTypeName","src":"23903:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":40374,"initialValue":{"id":40373,"name":"PROCESS_GAS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39553,"src":"23918:11:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23903:26:120"},{"assignments":[40376],"declarations":[{"constant":false,"id":40376,"mutability":"mutable","name":"_maxCopy","nameLocation":"23942:8:120","nodeType":"VariableDeclaration","scope":40426,"src":"23935:15:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":40375,"name":"uint16","nodeType":"ElementaryTypeName","src":"23935:6:120","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":40378,"initialValue":{"hexValue":"323536","id":40377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23953:3:120","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"nodeType":"VariableDeclarationStatement","src":"23935:21:120"},{"assignments":[40380],"declarations":[{"constant":false,"id":40380,"mutability":"mutable","name":"_returnData","nameLocation":"24013:11:120","nodeType":"VariableDeclaration","scope":40426,"src":"24000:24:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40379,"name":"bytes","nodeType":"ElementaryTypeName","src":"24000:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":40385,"initialValue":{"arguments":[{"id":40383,"name":"_maxCopy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40376,"src":"24037:8:120","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":40382,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"24027:9:120","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":40381,"name":"bytes","nodeType":"ElementaryTypeName","src":"24031:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":40384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24027:19:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"24000:46:120"},{"assignments":[40387],"declarations":[{"constant":false,"id":40387,"mutability":"mutable","name":"_calldata","nameLocation":"24065:9:120","nodeType":"VariableDeclaration","scope":40426,"src":"24052:22:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40386,"name":"bytes","nodeType":"ElementaryTypeName","src":"24052:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":40406,"initialValue":{"arguments":[{"hexValue":"68616e646c652875696e7433322c75696e7433322c627974657333322c627974657329","id":40390,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"24108:37:120","typeDescriptions":{"typeIdentifier":"t_stringliteral_ab2dc3f5b8c3e5604c88d1122382f1cf63855552aa478c712decccba98e2fc29","typeString":"literal_string \"handle(uint32,uint32,bytes32,bytes)\""},"value":"handle(uint32,uint32,bytes32,bytes)"},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":40391,"name":"_m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40315,"src":"24153:2:120","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":40392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24156:6:120","memberName":"origin","nodeType":"MemberAccess","referencedDeclaration":49092,"src":"24153:9:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (uint32)"}},"id":40393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24153:11:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":40394,"name":"_m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40315,"src":"24172:2:120","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":40395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24175:5:120","memberName":"nonce","nodeType":"MemberAccess","referencedDeclaration":49125,"src":"24172:8:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (uint32)"}},"id":40396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24172:10:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":40397,"name":"_m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40315,"src":"24190:2:120","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":40398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24193:6:120","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":49107,"src":"24190:9:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (bytes32)"}},"id":40399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24190:11:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":40400,"name":"_m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40315,"src":"24209:2:120","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":40401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24212:4:120","memberName":"body","nodeType":"MemberAccess","referencedDeclaration":49194,"src":"24209:7:120","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bytes29_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (bytes29)"}},"id":40402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24209:9:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":40403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24219:5:120","memberName":"clone","nodeType":"MemberAccess","referencedDeclaration":51141,"src":"24209:15:120","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes29_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes29_$","typeString":"function (bytes29) view returns (bytes memory)"}},"id":40404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24209:17:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_ab2dc3f5b8c3e5604c88d1122382f1cf63855552aa478c712decccba98e2fc29","typeString":"literal_string \"handle(uint32,uint32,bytes32,bytes)\""},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":40388,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"24077:3:120","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":40389,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"24081:19:120","memberName":"encodeWithSignature","nodeType":"MemberAccess","src":"24077:23:120","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (string memory) pure returns (bytes memory)"}},"id":40405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24077:155:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"24052:180:120"},{"expression":{"id":40418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":40407,"name":"_success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40312,"src":"24240:8:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":40408,"name":"_returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40380,"src":"24250:11:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":40409,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"24239:23:120","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":40412,"name":"_recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40366,"src":"24305:10:120","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40413,"name":"_gas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40372,"src":"24317:4:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":40414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24323:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":40415,"name":"_maxCopy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40376,"src":"24326:8:120","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":40416,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40387,"src":"24336:9:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":40410,"name":"ExcessivelySafeCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50104,"src":"24265:19:120","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ExcessivelySafeCall_$50104_$","typeString":"type(library ExcessivelySafeCall)"}},"id":40411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24285:19:120","memberName":"excessivelySafeCall","nodeType":"MemberAccess","referencedDeclaration":50045,"src":"24265:39:120","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint16_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (address,uint256,uint256,uint16,bytes memory) returns (bool,bytes memory)"}},"id":40417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24265:81:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"src":"24239:107:120","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40419,"nodeType":"ExpressionStatement","src":"24239:107:120"},{"eventCall":{"arguments":[{"id":40421,"name":"_messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40331,"src":"24394:12:120","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":40422,"name":"_success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40312,"src":"24408:8:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":40423,"name":"_returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40380,"src":"24418:11:120","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":40420,"name":"Process","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39509,"src":"24386:7:120","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes32,bool,bytes memory)"}},"id":40424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24386:44:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40425,"nodeType":"EmitStatement","src":"24381:49:120"}]},"documentation":{"id":40307,"nodeType":"StructuredDocumentation","src":"22223:478:120","text":" @notice Given formatted message, attempts to dispatch message payload to end recipient.\n @dev Recipient must implement a `handle` method (refer to IMessageRecipient.sol)\n Reverts if formatted message's destination domain is not the Replica's domain,\n if message has not been proven,\n or if not enough gas is provided for the dispatch transaction.\n @param _message Formatted message\n @return _success TRUE iff dispatch transaction succeeded"},"id":40427,"implemented":true,"kind":"function","modifiers":[],"name":"process","nameLocation":"22713:7:120","nodeType":"FunctionDefinition","parameters":{"id":40310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40309,"mutability":"mutable","name":"_message","nameLocation":"22734:8:120","nodeType":"VariableDeclaration","scope":40427,"src":"22721:21:120","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40308,"name":"bytes","nodeType":"ElementaryTypeName","src":"22721:5:120","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22720:23:120"},"returnParameters":{"id":40313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40312,"mutability":"mutable","name":"_success","nameLocation":"22767:8:120","nodeType":"VariableDeclaration","scope":40427,"src":"22762:13:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40311,"name":"bool","nodeType":"ElementaryTypeName","src":"22762:4:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22761:15:120"},"scope":40428,"src":"22704:1731:120","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":40429,"src":"1242:23195:120","usedErrors":[39018,49630,49697,49699,49701,49703,49705,49707,49709,50225,50227,50229,50231,50233]}],"src":"46:24392:120"},"id":120},"contracts/messaging/connectors/arbitrum/ArbitrumHubConnector.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/arbitrum/ArbitrumHubConnector.sol","exportedSymbols":{"ArbitrumHubConnector":[40991],"Connector":[39244],"HubConnector":[39420],"IArbitrumInbox":[48076],"IArbitrumOutbox":[48239],"IArbitrumRollup":[48276],"IRootManager":[47888],"L2Message":[40462],"LibArbitrumL1":[9720],"Node":[48266],"TypedMemView":[51265]},"id":40992,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":40430,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:121"},{"absolutePath":"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL1.sol","file":"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL1.sol","id":40432,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40992,"sourceUnit":9721,"src":"71:92:121","symbolAliases":[{"foreign":{"id":40431,"name":"LibArbitrumL1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9720,"src":"79:13:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/libraries/TypedMemView.sol","file":"../../../shared/libraries/TypedMemView.sol","id":40434,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40992,"sourceUnit":51266,"src":"165:72:121","symbolAliases":[{"foreign":{"id":40433,"name":"TypedMemView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51265,"src":"173:12:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/IRootManager.sol","file":"../../interfaces/IRootManager.sol","id":40436,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40992,"sourceUnit":47889,"src":"239:63:121","symbolAliases":[{"foreign":{"id":40435,"name":"IRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47888,"src":"247:12:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumInbox.sol","file":"../../interfaces/ambs/arbitrum/IArbitrumInbox.sol","id":40438,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40992,"sourceUnit":48077,"src":"303:81:121","symbolAliases":[{"foreign":{"id":40437,"name":"IArbitrumInbox","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48076,"src":"311:14:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumOutbox.sol","file":"../../interfaces/ambs/arbitrum/IArbitrumOutbox.sol","id":40440,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40992,"sourceUnit":48240,"src":"385:83:121","symbolAliases":[{"foreign":{"id":40439,"name":"IArbitrumOutbox","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48239,"src":"393:15:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumRollup.sol","file":"../../interfaces/ambs/arbitrum/IArbitrumRollup.sol","id":40443,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40992,"sourceUnit":48277,"src":"469:89:121","symbolAliases":[{"foreign":{"id":40441,"name":"IArbitrumRollup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48276,"src":"477:15:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":40442,"name":"Node","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48266,"src":"494:4:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/HubConnector.sol","file":"../HubConnector.sol","id":40445,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40992,"sourceUnit":39421,"src":"560:49:121","symbolAliases":[{"foreign":{"id":40444,"name":"HubConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39420,"src":"568:12:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/Connector.sol","file":"../Connector.sol","id":40447,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40992,"sourceUnit":39245,"src":"610:43:121","symbolAliases":[{"foreign":{"id":40446,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"618:9:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"L2Message","id":40462,"members":[{"constant":false,"id":40449,"mutability":"mutable","name":"l2Sender","nameLocation":"684:8:121","nodeType":"VariableDeclaration","scope":40462,"src":"676:16:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40448,"name":"address","nodeType":"ElementaryTypeName","src":"676:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40451,"mutability":"mutable","name":"to","nameLocation":"704:2:121","nodeType":"VariableDeclaration","scope":40462,"src":"696:10:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40450,"name":"address","nodeType":"ElementaryTypeName","src":"696:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40453,"mutability":"mutable","name":"l2Block","nameLocation":"718:7:121","nodeType":"VariableDeclaration","scope":40462,"src":"710:15:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40452,"name":"uint256","nodeType":"ElementaryTypeName","src":"710:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40455,"mutability":"mutable","name":"l1Block","nameLocation":"737:7:121","nodeType":"VariableDeclaration","scope":40462,"src":"729:15:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40454,"name":"uint256","nodeType":"ElementaryTypeName","src":"729:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40457,"mutability":"mutable","name":"l2Timestamp","nameLocation":"756:11:121","nodeType":"VariableDeclaration","scope":40462,"src":"748:19:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40456,"name":"uint256","nodeType":"ElementaryTypeName","src":"748:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40459,"mutability":"mutable","name":"value","nameLocation":"779:5:121","nodeType":"VariableDeclaration","scope":40462,"src":"771:13:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40458,"name":"uint256","nodeType":"ElementaryTypeName","src":"771:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40461,"mutability":"mutable","name":"callData","nameLocation":"794:8:121","nodeType":"VariableDeclaration","scope":40462,"src":"788:14:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":40460,"name":"bytes","nodeType":"ElementaryTypeName","src":"788:5:121","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"L2Message","nameLocation":"662:9:121","nodeType":"StructDefinition","scope":40992,"src":"655:150:121","visibility":"public"},{"abstract":false,"baseContracts":[{"baseName":{"id":40463,"name":"HubConnector","nameLocations":["840:12:121"],"nodeType":"IdentifierPath","referencedDeclaration":39420,"src":"840:12:121"},"id":40464,"nodeType":"InheritanceSpecifier","src":"840:12:121"}],"canonicalName":"ArbitrumHubConnector","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":40991,"linearizedBaseContracts":[40991,39420,39244,47778,49928,50003],"name":"ArbitrumHubConnector","nameLocation":"816:20:121","nodeType":"ContractDefinition","nodes":[{"global":false,"id":40467,"libraryName":{"id":40465,"name":"TypedMemView","nameLocations":["904:12:121"],"nodeType":"IdentifierPath","referencedDeclaration":51265,"src":"904:12:121"},"nodeType":"UsingForDirective","src":"898:29:121","typeName":{"id":40466,"name":"bytes","nodeType":"ElementaryTypeName","src":"921:5:121","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},{"global":false,"id":40470,"libraryName":{"id":40468,"name":"TypedMemView","nameLocations":["936:12:121"],"nodeType":"IdentifierPath","referencedDeclaration":51265,"src":"936:12:121"},"nodeType":"UsingForDirective","src":"930:31:121","typeName":{"id":40469,"name":"bytes29","nodeType":"ElementaryTypeName","src":"953:7:121","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}},{"constant":false,"functionSelector":"ce11e6ab","id":40473,"mutability":"mutable","name":"outbox","nameLocation":"1028:6:121","nodeType":"VariableDeclaration","scope":40991,"src":"1005:29:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IArbitrumOutbox_$48239","typeString":"contract IArbitrumOutbox"},"typeName":{"id":40472,"nodeType":"UserDefinedTypeName","pathNode":{"id":40471,"name":"IArbitrumOutbox","nameLocations":["1005:15:121"],"nodeType":"IdentifierPath","referencedDeclaration":48239,"src":"1005:15:121"},"referencedDeclaration":48239,"src":"1005:15:121","typeDescriptions":{"typeIdentifier":"t_contract$_IArbitrumOutbox_$48239","typeString":"contract IArbitrumOutbox"}},"visibility":"public"},{"constant":false,"functionSelector":"cb23bcb5","id":40476,"mutability":"mutable","name":"rollup","nameLocation":"1061:6:121","nodeType":"VariableDeclaration","scope":40991,"src":"1038:29:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IArbitrumRollup_$48276","typeString":"contract IArbitrumRollup"},"typeName":{"id":40475,"nodeType":"UserDefinedTypeName","pathNode":{"id":40474,"name":"IArbitrumRollup","nameLocations":["1038:15:121"],"nodeType":"IdentifierPath","referencedDeclaration":48276,"src":"1038:15:121"},"referencedDeclaration":48276,"src":"1038:15:121","typeDescriptions":{"typeIdentifier":"t_contract$_IArbitrumRollup_$48276","typeString":"contract IArbitrumRollup"}},"visibility":"public"},{"constant":false,"documentation":{"id":40477,"nodeType":"StructuredDocumentation","src":"1072:316:121","text":" @notice Sets cap on maxSubmissionCost used in `createRetryableTicket`\n @dev The value used in `createRetryableTicket` is the lesser of the cap or\n a value passed in via `_encodedData` in `_sendMessage`.\n This value represents amount of ETH allocated to pay for the base submission fee"},"functionSelector":"0fca49cd","id":40479,"mutability":"mutable","name":"maxSubmissionCostCap","nameLocation":"1406:20:121","nodeType":"VariableDeclaration","scope":40991,"src":"1391:35:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40478,"name":"uint256","nodeType":"ElementaryTypeName","src":"1391:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":40480,"nodeType":"StructuredDocumentation","src":"1431:291:121","text":" @notice Sets cap on maxGas used in `createRetryableTicket`\n @dev The value used in `createRetryableTicket` is the lesser of the cap or\n a value passed in via `_encodedData` in `_sendMessage`.\n This value represents gas limit for immediate L2 execution attempt"},"functionSelector":"b64d327e","id":40482,"mutability":"mutable","name":"maxGasCap","nameLocation":"1740:9:121","nodeType":"VariableDeclaration","scope":40991,"src":"1725:24:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40481,"name":"uint256","nodeType":"ElementaryTypeName","src":"1725:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":40483,"nodeType":"StructuredDocumentation","src":"1754:300:121","text":" @notice Sets cap on gasPrice used in `createRetryableTicket`\n @dev The value used in `createRetryableTicket` is the lesser of the cap or\n a value passed in via `_encodedData` in `_sendMessage`.\n This value represents L2 gas price bid for immediate L2 execution attempt"},"functionSelector":"e2ce3c64","id":40485,"mutability":"mutable","name":"gasPriceCap","nameLocation":"2072:11:121","nodeType":"VariableDeclaration","scope":40991,"src":"2057:26:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40484,"name":"uint256","nodeType":"ElementaryTypeName","src":"2057:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":40486,"nodeType":"StructuredDocumentation","src":"2088:76:121","text":" @notice Tracks which messages have been processed from bridge"},"functionSelector":"05a79e06","id":40490,"mutability":"mutable","name":"processed","nameLocation":"2199:9:121","nodeType":"VariableDeclaration","scope":40991,"src":"2167:41:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bool_$","typeString":"mapping(uint256 => bool)"},"typeName":{"id":40489,"keyType":{"id":40487,"name":"uint256","nodeType":"ElementaryTypeName","src":"2175:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"2167:24:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bool_$","typeString":"mapping(uint256 => bool)"},"valueType":{"id":40488,"name":"bool","nodeType":"ElementaryTypeName","src":"2186:4:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"anonymous":false,"eventSelector":"de92b5b7839f4a2c640f5e3bbb66d415458dadc57a487b0c7fa562ed7c9c896f","id":40494,"name":"RetryableTicketCreated","nameLocation":"2337:22:121","nodeType":"EventDefinition","parameters":{"id":40493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40492,"indexed":true,"mutability":"mutable","name":"ticketId","nameLocation":"2376:8:121","nodeType":"VariableDeclaration","scope":40494,"src":"2360:24:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40491,"name":"uint256","nodeType":"ElementaryTypeName","src":"2360:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2359:26:121"},"src":"2331:55:121"},{"anonymous":false,"documentation":{"id":40495,"nodeType":"StructuredDocumentation","src":"2390:148:121","text":" @notice Emitted when admin updates the maxSubmissionCap\n @param _previous The starting value\n @param _updated The final value"},"eventSelector":"8826388bbfa56ae5df40ee5607d9d354fa66549d854624242c77b5af2a5e4c3b","id":40501,"name":"MaxSubmissionCapUpdated","nameLocation":"2547:23:121","nodeType":"EventDefinition","parameters":{"id":40500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40497,"indexed":false,"mutability":"mutable","name":"_previous","nameLocation":"2579:9:121","nodeType":"VariableDeclaration","scope":40501,"src":"2571:17:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40496,"name":"uint256","nodeType":"ElementaryTypeName","src":"2571:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40499,"indexed":false,"mutability":"mutable","name":"_updated","nameLocation":"2598:8:121","nodeType":"VariableDeclaration","scope":40501,"src":"2590:16:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40498,"name":"uint256","nodeType":"ElementaryTypeName","src":"2590:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2570:37:121"},"src":"2541:67:121"},{"anonymous":false,"documentation":{"id":40502,"nodeType":"StructuredDocumentation","src":"2612:141:121","text":" @notice Emitted when admin updates the maxGasCap\n @param _previous The starting value\n @param _updated The final value"},"eventSelector":"57bffb29c4c6b672a2e334fa00ea826dba286d6cb34d61bebc6c667abb579c62","id":40508,"name":"MaxGasCapUpdated","nameLocation":"2762:16:121","nodeType":"EventDefinition","parameters":{"id":40507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40504,"indexed":false,"mutability":"mutable","name":"_previous","nameLocation":"2787:9:121","nodeType":"VariableDeclaration","scope":40508,"src":"2779:17:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40503,"name":"uint256","nodeType":"ElementaryTypeName","src":"2779:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40506,"indexed":false,"mutability":"mutable","name":"_updated","nameLocation":"2806:8:121","nodeType":"VariableDeclaration","scope":40508,"src":"2798:16:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40505,"name":"uint256","nodeType":"ElementaryTypeName","src":"2798:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2778:37:121"},"src":"2756:60:121"},{"anonymous":false,"documentation":{"id":40509,"nodeType":"StructuredDocumentation","src":"2820:143:121","text":" @notice Emitted when admin updates the gasPriceCap\n @param _previous The starting value\n @param _updated The final value"},"eventSelector":"7f46895145f361561c5e9bbaf45b71269a4399dc3064511f123ebf4c6f04e357","id":40515,"name":"GasPriceCapUpdated","nameLocation":"2972:18:121","nodeType":"EventDefinition","parameters":{"id":40514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40511,"indexed":false,"mutability":"mutable","name":"_previous","nameLocation":"2999:9:121","nodeType":"VariableDeclaration","scope":40515,"src":"2991:17:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40510,"name":"uint256","nodeType":"ElementaryTypeName","src":"2991:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40513,"indexed":false,"mutability":"mutable","name":"_updated","nameLocation":"3018:8:121","nodeType":"VariableDeclaration","scope":40515,"src":"3010:16:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40512,"name":"uint256","nodeType":"ElementaryTypeName","src":"3010:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2990:37:121"},"src":"2966:62:121"},{"body":{"id":40569,"nodeType":"Block","src":"3392:248:121","statements":[{"expression":{"id":40547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40543,"name":"outbox","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40473,"src":"3398:6:121","typeDescriptions":{"typeIdentifier":"t_contract$_IArbitrumOutbox_$48239","typeString":"contract IArbitrumOutbox"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":40545,"name":"_outbox","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40527,"src":"3423:7:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40544,"name":"IArbitrumOutbox","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48239,"src":"3407:15:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IArbitrumOutbox_$48239_$","typeString":"type(contract IArbitrumOutbox)"}},"id":40546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3407:24:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IArbitrumOutbox_$48239","typeString":"contract IArbitrumOutbox"}},"src":"3398:33:121","typeDescriptions":{"typeIdentifier":"t_contract$_IArbitrumOutbox_$48239","typeString":"contract IArbitrumOutbox"}},"id":40548,"nodeType":"ExpressionStatement","src":"3398:33:121"},{"expression":{"id":40555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40549,"name":"rollup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40476,"src":"3437:6:121","typeDescriptions":{"typeIdentifier":"t_contract$_IArbitrumRollup_$48276","typeString":"contract IArbitrumRollup"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":40551,"name":"outbox","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40473,"src":"3462:6:121","typeDescriptions":{"typeIdentifier":"t_contract$_IArbitrumOutbox_$48239","typeString":"contract IArbitrumOutbox"}},"id":40552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3469:6:121","memberName":"rollup","nodeType":"MemberAccess","referencedDeclaration":48100,"src":"3462:13:121","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":40553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3462:15:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40550,"name":"IArbitrumRollup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48276,"src":"3446:15:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IArbitrumRollup_$48276_$","typeString":"type(contract IArbitrumRollup)"}},"id":40554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3446:32:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IArbitrumRollup_$48276","typeString":"contract IArbitrumRollup"}},"src":"3437:41:121","typeDescriptions":{"typeIdentifier":"t_contract$_IArbitrumRollup_$48276","typeString":"contract IArbitrumRollup"}},"id":40556,"nodeType":"ExpressionStatement","src":"3437:41:121"},{"expression":{"id":40559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40557,"name":"maxSubmissionCostCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40479,"src":"3531:20:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":40558,"name":"_maxSubmissionCostCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40529,"src":"3554:21:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3531:44:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40560,"nodeType":"ExpressionStatement","src":"3531:44:121"},{"expression":{"id":40563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40561,"name":"maxGasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40482,"src":"3581:9:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":40562,"name":"_maxGasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40531,"src":"3593:10:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3581:22:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40564,"nodeType":"ExpressionStatement","src":"3581:22:121"},{"expression":{"id":40567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40565,"name":"gasPriceCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40485,"src":"3609:11:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":40566,"name":"_gasPriceCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40533,"src":"3623:12:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3609:26:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40568,"nodeType":"ExpressionStatement","src":"3609:26:121"}]},"id":40570,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":40536,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40517,"src":"3330:7:121","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":40537,"name":"_mirrorDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40519,"src":"3339:13:121","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":40538,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40521,"src":"3354:4:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40539,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40523,"src":"3360:12:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40540,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40525,"src":"3374:16:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":40541,"kind":"baseConstructorSpecifier","modifierName":{"id":40535,"name":"HubConnector","nameLocations":["3317:12:121"],"nodeType":"IdentifierPath","referencedDeclaration":39420,"src":"3317:12:121"},"nodeType":"ModifierInvocation","src":"3317:74:121"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":40534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40517,"mutability":"mutable","name":"_domain","nameLocation":"3099:7:121","nodeType":"VariableDeclaration","scope":40570,"src":"3092:14:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":40516,"name":"uint32","nodeType":"ElementaryTypeName","src":"3092:6:121","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":40519,"mutability":"mutable","name":"_mirrorDomain","nameLocation":"3119:13:121","nodeType":"VariableDeclaration","scope":40570,"src":"3112:20:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":40518,"name":"uint32","nodeType":"ElementaryTypeName","src":"3112:6:121","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":40521,"mutability":"mutable","name":"_amb","nameLocation":"3146:4:121","nodeType":"VariableDeclaration","scope":40570,"src":"3138:12:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40520,"name":"address","nodeType":"ElementaryTypeName","src":"3138:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40523,"mutability":"mutable","name":"_rootManager","nameLocation":"3164:12:121","nodeType":"VariableDeclaration","scope":40570,"src":"3156:20:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40522,"name":"address","nodeType":"ElementaryTypeName","src":"3156:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40525,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"3190:16:121","nodeType":"VariableDeclaration","scope":40570,"src":"3182:24:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40524,"name":"address","nodeType":"ElementaryTypeName","src":"3182:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40527,"mutability":"mutable","name":"_outbox","nameLocation":"3220:7:121","nodeType":"VariableDeclaration","scope":40570,"src":"3212:15:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40526,"name":"address","nodeType":"ElementaryTypeName","src":"3212:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40529,"mutability":"mutable","name":"_maxSubmissionCostCap","nameLocation":"3241:21:121","nodeType":"VariableDeclaration","scope":40570,"src":"3233:29:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40528,"name":"uint256","nodeType":"ElementaryTypeName","src":"3233:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40531,"mutability":"mutable","name":"_maxGasCap","nameLocation":"3276:10:121","nodeType":"VariableDeclaration","scope":40570,"src":"3268:18:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40530,"name":"uint256","nodeType":"ElementaryTypeName","src":"3268:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40533,"mutability":"mutable","name":"_gasPriceCap","nameLocation":"3300:12:121","nodeType":"VariableDeclaration","scope":40570,"src":"3292:20:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40532,"name":"uint256","nodeType":"ElementaryTypeName","src":"3292:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3086:230:121"},"returnParameters":{"id":40542,"nodeType":"ParameterList","parameters":[],"src":"3392:0:121"},"scope":40991,"src":"3075:565:121","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":40587,"nodeType":"Block","src":"3865:108:121","statements":[{"eventCall":{"arguments":[{"id":40579,"name":"maxSubmissionCostCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40479,"src":"3900:20:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40580,"name":"_updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40573,"src":"3922:8:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40578,"name":"MaxSubmissionCapUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40501,"src":"3876:23:121","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":40581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3876:55:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40582,"nodeType":"EmitStatement","src":"3871:60:121"},{"expression":{"id":40585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40583,"name":"maxSubmissionCostCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40479,"src":"3937:20:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":40584,"name":"_updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40573,"src":"3960:8:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3937:31:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40586,"nodeType":"ExpressionStatement","src":"3937:31:121"}]},"documentation":{"id":40571,"nodeType":"StructuredDocumentation","src":"3686:108:121","text":" @notice Used (by admin) to update the maxSubmissionCostCap\n @param _updated The new value"},"functionSelector":"3327998d","id":40588,"implemented":true,"kind":"function","modifiers":[{"id":40576,"kind":"modifierInvocation","modifierName":{"id":40575,"name":"onlyOwner","nameLocations":["3855:9:121"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"3855:9:121"},"nodeType":"ModifierInvocation","src":"3855:9:121"}],"name":"setMaxSubmissionCostCap","nameLocation":"3806:23:121","nodeType":"FunctionDefinition","parameters":{"id":40574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40573,"mutability":"mutable","name":"_updated","nameLocation":"3838:8:121","nodeType":"VariableDeclaration","scope":40588,"src":"3830:16:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40572,"name":"uint256","nodeType":"ElementaryTypeName","src":"3830:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3829:18:121"},"returnParameters":{"id":40577,"nodeType":"ParameterList","parameters":[],"src":"3865:0:121"},"scope":40991,"src":"3797:176:121","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":40605,"nodeType":"Block","src":"4134:79:121","statements":[{"eventCall":{"arguments":[{"id":40597,"name":"maxGasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40482,"src":"4162:9:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40598,"name":"_updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40591,"src":"4173:8:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40596,"name":"MaxGasCapUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40508,"src":"4145:16:121","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":40599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4145:37:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40600,"nodeType":"EmitStatement","src":"4140:42:121"},{"expression":{"id":40603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40601,"name":"maxGasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40482,"src":"4188:9:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":40602,"name":"_updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40591,"src":"4200:8:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4188:20:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40604,"nodeType":"ExpressionStatement","src":"4188:20:121"}]},"documentation":{"id":40589,"nodeType":"StructuredDocumentation","src":"3977:97:121","text":" @notice Used (by admin) to update the maxGasCap\n @param _updated The new value"},"functionSelector":"9ab0563b","id":40606,"implemented":true,"kind":"function","modifiers":[{"id":40594,"kind":"modifierInvocation","modifierName":{"id":40593,"name":"onlyOwner","nameLocations":["4124:9:121"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"4124:9:121"},"nodeType":"ModifierInvocation","src":"4124:9:121"}],"name":"setMaxGasCap","nameLocation":"4086:12:121","nodeType":"FunctionDefinition","parameters":{"id":40592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40591,"mutability":"mutable","name":"_updated","nameLocation":"4107:8:121","nodeType":"VariableDeclaration","scope":40606,"src":"4099:16:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40590,"name":"uint256","nodeType":"ElementaryTypeName","src":"4099:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4098:18:121"},"returnParameters":{"id":40595,"nodeType":"ParameterList","parameters":[],"src":"4134:0:121"},"scope":40991,"src":"4077:136:121","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":40623,"nodeType":"Block","src":"4378:94:121","statements":[{"eventCall":{"arguments":[{"id":40615,"name":"maxSubmissionCostCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40479,"src":"4408:20:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40616,"name":"_updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40609,"src":"4430:8:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40614,"name":"GasPriceCapUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40515,"src":"4389:18:121","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":40617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4389:50:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40618,"nodeType":"EmitStatement","src":"4384:55:121"},{"expression":{"id":40621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40619,"name":"gasPriceCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40485,"src":"4445:11:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":40620,"name":"_updated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40609,"src":"4459:8:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4445:22:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40622,"nodeType":"ExpressionStatement","src":"4445:22:121"}]},"documentation":{"id":40607,"nodeType":"StructuredDocumentation","src":"4217:99:121","text":" @notice Used (by admin) to update the gasPriceCap\n @param _updated The new value"},"functionSelector":"fbd4006b","id":40624,"implemented":true,"kind":"function","modifiers":[{"id":40612,"kind":"modifierInvocation","modifierName":{"id":40611,"name":"onlyOwner","nameLocations":["4368:9:121"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"4368:9:121"},"nodeType":"ModifierInvocation","src":"4368:9:121"}],"name":"setGasPriceCap","nameLocation":"4328:14:121","nodeType":"FunctionDefinition","parameters":{"id":40610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40609,"mutability":"mutable","name":"_updated","nameLocation":"4351:8:121","nodeType":"VariableDeclaration","scope":40624,"src":"4343:16:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40608,"name":"uint256","nodeType":"ElementaryTypeName","src":"4343:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4342:18:121"},"returnParameters":{"id":40613,"nodeType":"ParameterList","parameters":[],"src":"4378:0:121"},"scope":40991,"src":"4319:153:121","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[39228],"body":{"id":40639,"nodeType":"Block","src":"4600:66:121","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":40637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40632,"name":"_expected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40626,"src":"4613:9:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":40635,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"4657:3:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":40633,"name":"LibArbitrumL1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9720,"src":"4626:13:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibArbitrumL1_$9720_$","typeString":"type(library LibArbitrumL1)"}},"id":40634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4640:16:121","memberName":"crossChainSender","nodeType":"MemberAccess","referencedDeclaration":9719,"src":"4626:30:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":40636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4626:35:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4613:48:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":40631,"id":40638,"nodeType":"Return","src":"4606:55:121"}]},"id":40640,"implemented":true,"kind":"function","modifiers":[],"name":"_verifySender","nameLocation":"4529:13:121","nodeType":"FunctionDefinition","overrides":{"id":40628,"nodeType":"OverrideSpecifier","overrides":[],"src":"4576:8:121"},"parameters":{"id":40627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40626,"mutability":"mutable","name":"_expected","nameLocation":"4551:9:121","nodeType":"VariableDeclaration","scope":40640,"src":"4543:17:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40625,"name":"address","nodeType":"ElementaryTypeName","src":"4543:7:121","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4542:19:121"},"returnParameters":{"id":40631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40630,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40640,"src":"4594:4:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40629,"name":"bool","nodeType":"ElementaryTypeName","src":"4594:4:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4593:6:121"},"scope":40991,"src":"4520:146:121","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":40657,"nodeType":"Block","src":"4866:35:121","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40650,"name":"_a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40643,"src":"4879:2:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":40651,"name":"_b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40645,"src":"4884:2:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4879:7:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":40654,"name":"_b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40645,"src":"4894:2:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"4879:17:121","trueExpression":{"id":40653,"name":"_a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40643,"src":"4889:2:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":40649,"id":40656,"nodeType":"Return","src":"4872:24:121"}]},"documentation":{"id":40641,"nodeType":"StructuredDocumentation","src":"4670:118:121","text":" @notice Helper to return the lesser of two values\n @param _a Some number\n @param _b Some number"},"id":40658,"implemented":true,"kind":"function","modifiers":[],"name":"_lesserOf","nameLocation":"4800:9:121","nodeType":"FunctionDefinition","parameters":{"id":40646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40643,"mutability":"mutable","name":"_a","nameLocation":"4818:2:121","nodeType":"VariableDeclaration","scope":40658,"src":"4810:10:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40642,"name":"uint256","nodeType":"ElementaryTypeName","src":"4810:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40645,"mutability":"mutable","name":"_b","nameLocation":"4830:2:121","nodeType":"VariableDeclaration","scope":40658,"src":"4822:10:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40644,"name":"uint256","nodeType":"ElementaryTypeName","src":"4822:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4809:24:121"},"returnParameters":{"id":40649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40648,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40658,"src":"4857:7:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40647,"name":"uint256","nodeType":"ElementaryTypeName","src":"4857:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4856:9:121"},"scope":40991,"src":"4791:110:121","stateMutability":"pure","virtual":false,"visibility":"internal"},{"baseFunctions":[39210],"body":{"id":40745,"nodeType":"Block","src":"4992:1351:121","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40667,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40660,"src":"5061:5:121","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":40668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5067:6:121","memberName":"length","nodeType":"MemberAccess","src":"5061:12:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":40669,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5077:2:121","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"5061:18:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c656e677468","id":40671,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5081:9:121","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""},"value":"!length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""}],"id":40666,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5053:7:121","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5053:38:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40673,"nodeType":"ExpressionStatement","src":"5053:38:121"},{"assignments":[40675],"declarations":[{"constant":false,"id":40675,"mutability":"mutable","name":"_calldata","nameLocation":"5134:9:121","nodeType":"VariableDeclaration","scope":40745,"src":"5121:22:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40674,"name":"bytes","nodeType":"ElementaryTypeName","src":"5121:5:121","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":40683,"initialValue":{"arguments":[{"expression":{"expression":{"id":40678,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"5169:9:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Connector_$39244_$","typeString":"type(contract Connector)"}},"id":40679,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5179:14:121","memberName":"processMessage","nodeType":"MemberAccess","referencedDeclaration":39189,"src":"5169:24:121","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function Connector.processMessage(bytes memory)"}},"id":40680,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5194:8:121","memberName":"selector","nodeType":"MemberAccess","src":"5169:33:121","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":40681,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40660,"src":"5204:5:121","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":40676,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5146:3:121","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":40677,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5150:18:121","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"5146:22:121","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":40682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5146:64:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"5121:89:121"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40685,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40662,"src":"5268:12:121","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":40686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5281:6:121","memberName":"length","nodeType":"MemberAccess","src":"5268:19:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"id":40689,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3332","id":40687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5292:2:121","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"33","id":40688,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5297:1:121","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"5292:6:121","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"}}],"id":40690,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5291:8:121","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"}},"src":"5268:31:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2164617461206c656e677468","id":40692,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5301:14:121","typeDescriptions":{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""},"value":"!data length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""}],"id":40684,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5260:7:121","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5260:56:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40694,"nodeType":"ExpressionStatement","src":"5260:56:121"},{"assignments":[40696,40698,40700],"declarations":[{"constant":false,"id":40696,"mutability":"mutable","name":"maxSubmissionCost","nameLocation":"5380:17:121","nodeType":"VariableDeclaration","scope":40745,"src":"5372:25:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40695,"name":"uint256","nodeType":"ElementaryTypeName","src":"5372:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40698,"mutability":"mutable","name":"maxGas","nameLocation":"5407:6:121","nodeType":"VariableDeclaration","scope":40745,"src":"5399:14:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40697,"name":"uint256","nodeType":"ElementaryTypeName","src":"5399:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40700,"mutability":"mutable","name":"gasPrice","nameLocation":"5423:8:121","nodeType":"VariableDeclaration","scope":40745,"src":"5415:16:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40699,"name":"uint256","nodeType":"ElementaryTypeName","src":"5415:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":40712,"initialValue":{"arguments":[{"id":40703,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40662,"src":"5453:12:121","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":40705,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5474:7:121","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":40704,"name":"uint256","nodeType":"ElementaryTypeName","src":"5474:7:121","typeDescriptions":{}}},{"id":40707,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5483:7:121","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":40706,"name":"uint256","nodeType":"ElementaryTypeName","src":"5483:7:121","typeDescriptions":{}}},{"id":40709,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5492:7:121","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":40708,"name":"uint256","nodeType":"ElementaryTypeName","src":"5492:7:121","typeDescriptions":{}}}],"id":40710,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5473:27:121","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(uint256),type(uint256),type(uint256))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(uint256),type(uint256),type(uint256))"}],"expression":{"id":40701,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5435:3:121","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":40702,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5439:6:121","memberName":"decode","nodeType":"MemberAccess","src":"5435:10:121","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":40711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5435:71:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"5371:135:121"},{"assignments":[40714],"declarations":[{"constant":false,"id":40714,"mutability":"mutable","name":"ticketID","nameLocation":"5543:8:121","nodeType":"VariableDeclaration","scope":40745,"src":"5535:16:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40713,"name":"uint256","nodeType":"ElementaryTypeName","src":"5535:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":40740,"initialValue":{"arguments":[{"id":40722,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"5621:15:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":40723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5656:1:121","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"id":40725,"name":"maxSubmissionCost","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40696,"src":"5693:17:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40726,"name":"maxSubmissionCostCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40479,"src":"5712:20:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40724,"name":"_lesserOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40658,"src":"5683:9:121","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":40727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5683:50:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40728,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"5822:15:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40729,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"5923:15:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":40731,"name":"maxGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40698,"src":"6082:6:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40732,"name":"maxGasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40482,"src":"6090:9:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40730,"name":"_lesserOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40658,"src":"6072:9:121","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":40733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6072:28:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":40735,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40700,"src":"6174:8:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40736,"name":"gasPriceCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40485,"src":"6184:11:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40734,"name":"_lesserOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40658,"src":"6164:9:121","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":40737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6164:32:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40738,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40675,"src":"6272:9:121","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":40716,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"5569:3:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40715,"name":"IArbitrumInbox","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48076,"src":"5554:14:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IArbitrumInbox_$48076_$","typeString":"type(contract IArbitrumInbox)"}},"id":40717,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5554:19:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IArbitrumInbox_$48076","typeString":"contract IArbitrumInbox"}},"id":40718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5574:21:121","memberName":"createRetryableTicket","nodeType":"MemberAccess","referencedDeclaration":48075,"src":"5554:41:121","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,uint256,uint256,address,address,uint256,uint256,bytes memory) payable external returns (uint256)"}},"id":40721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":40719,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5603:3:121","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":40720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5607:5:121","memberName":"value","nodeType":"MemberAccess","src":"5603:9:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"5554:59:121","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$value","typeString":"function (address,uint256,uint256,address,address,uint256,uint256,bytes memory) payable external returns (uint256)"}},"id":40739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5554:741:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5535:760:121"},{"eventCall":{"arguments":[{"id":40742,"name":"ticketID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40714,"src":"6329:8:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40741,"name":"RetryableTicketCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40494,"src":"6306:22:121","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":40743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6306:32:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40744,"nodeType":"EmitStatement","src":"6301:37:121"}]},"id":40746,"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessage","nameLocation":"4914:12:121","nodeType":"FunctionDefinition","overrides":{"id":40664,"nodeType":"OverrideSpecifier","overrides":[],"src":"4983:8:121"},"parameters":{"id":40663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40660,"mutability":"mutable","name":"_data","nameLocation":"4940:5:121","nodeType":"VariableDeclaration","scope":40746,"src":"4927:18:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40659,"name":"bytes","nodeType":"ElementaryTypeName","src":"4927:5:121","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":40662,"mutability":"mutable","name":"_encodedData","nameLocation":"4960:12:121","nodeType":"VariableDeclaration","scope":40746,"src":"4947:25:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40661,"name":"bytes","nodeType":"ElementaryTypeName","src":"4947:5:121","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4926:47:121"},"returnParameters":{"id":40665,"nodeType":"ParameterList","parameters":[],"src":"4992:0:121"},"scope":40991,"src":"4905:1438:121","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":40814,"nodeType":"Block","src":"6683:1133:121","statements":[{"expression":{"arguments":[{"id":40764,"name":"_nodeNum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40748,"src":"6787:8:121","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":40765,"name":"_sendRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40750,"src":"6797:9:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":40766,"name":"_blockHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40752,"src":"6808:10:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":40763,"name":"_validateSendRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40861,"src":"6769:17:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint64_$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (uint64,bytes32,bytes32) view"}},"id":40767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6769:50:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40768,"nodeType":"ExpressionStatement","src":"6769:50:121"},{"expression":{"arguments":[{"id":40770,"name":"_sendRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40750,"src":"6907:9:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":40771,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40755,"src":"6918:6:121","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},{"id":40772,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40757,"src":"6926:6:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40773,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40760,"src":"6934:8:121","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$40462_calldata_ptr","typeString":"struct L2Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_L2Message_$40462_calldata_ptr","typeString":"struct L2Message calldata"}],"id":40769,"name":"_validateMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40910,"src":"6890:16:121","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_array$_t_bytes32_$dyn_calldata_ptr_$_t_uint256_$_t_struct$_L2Message_$40462_calldata_ptr_$returns$__$","typeString":"function (bytes32,bytes32[] calldata,uint256,struct L2Message calldata)"}},"id":40774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6890:53:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40775,"nodeType":"ExpressionStatement","src":"6890:53:121"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":40777,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40760,"src":"7353:8:121","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$40462_calldata_ptr","typeString":"struct L2Message calldata"}},"id":40778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7362:8:121","memberName":"callData","nodeType":"MemberAccess","referencedDeclaration":40461,"src":"7353:17:121","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":40779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7371:6:121","memberName":"length","nodeType":"MemberAccess","src":"7353:24:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"313030","id":40780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7381:3:121","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"7353:31:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c656e677468","id":40782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7386:9:121","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""},"value":"!length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""}],"id":40776,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7345:7:121","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7345:51:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40784,"nodeType":"ExpressionStatement","src":"7345:51:121"},{"assignments":[40786],"declarations":[{"constant":false,"id":40786,"mutability":"mutable","name":"_data","nameLocation":"7596:5:121","nodeType":"VariableDeclaration","scope":40814,"src":"7588:13:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40785,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7588:7:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":40796,"initialValue":{"arguments":[{"hexValue":"3638","id":40793,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7635:2:121","typeDescriptions":{"typeIdentifier":"t_rational_68_by_1","typeString":"int_const 68"},"value":"68"},{"hexValue":"3332","id":40794,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7639:2:121","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_68_by_1","typeString":"int_const 68"},{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}],"expression":{"arguments":[{"hexValue":"30","id":40790,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7626:1:121","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"expression":{"id":40787,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40760,"src":"7604:8:121","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$40462_calldata_ptr","typeString":"struct L2Message calldata"}},"id":40788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7613:8:121","memberName":"callData","nodeType":"MemberAccess","referencedDeclaration":40461,"src":"7604:17:121","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":40789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7622:3:121","memberName":"ref","nodeType":"MemberAccess","referencedDeclaration":50591,"src":"7604:21:121","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,uint40) pure returns (bytes29)"}},"id":40791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7604:24:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":40792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7629:5:121","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":50852,"src":"7604:30:121","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_bytes32_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint256,uint8) pure returns (bytes32)"}},"id":40795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7604:38:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"7588:54:121"},{"expression":{"arguments":[{"id":40801,"name":"MIRROR_DOMAIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39048,"src":"7713:13:121","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":40802,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40786,"src":"7728:5:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"arguments":[{"id":40798,"name":"ROOT_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39045,"src":"7689:12:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40797,"name":"IRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47888,"src":"7676:12:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRootManager_$47888_$","typeString":"type(contract IRootManager)"}},"id":40799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7676:26:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRootManager_$47888","typeString":"contract IRootManager"}},"id":40800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7703:9:121","memberName":"aggregate","nodeType":"MemberAccess","referencedDeclaration":47887,"src":"7676:36:121","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint32_$_t_bytes32_$returns$__$","typeString":"function (uint32,bytes32) external"}},"id":40803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7676:58:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40804,"nodeType":"ExpressionStatement","src":"7676:58:121"},{"eventCall":{"arguments":[{"arguments":[{"id":40808,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40786,"src":"7792:5:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":40806,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7781:3:121","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":40807,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7785:6:121","memberName":"encode","nodeType":"MemberAccess","src":"7781:10:121","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":40809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7781:17:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"id":40810,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7800:3:121","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":40811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7804:6:121","memberName":"sender","nodeType":"MemberAccess","src":"7800:10:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":40805,"name":"MessageProcessed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47765,"src":"7764:16:121","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_address_$returns$__$","typeString":"function (bytes memory,address)"}},"id":40812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7764:47:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40813,"nodeType":"EmitStatement","src":"7759:52:121"}]},"functionSelector":"9d4373a4","id":40815,"implemented":true,"kind":"function","modifiers":[],"name":"processMessageFromRoot","nameLocation":"6495:22:121","nodeType":"FunctionDefinition","parameters":{"id":40761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40748,"mutability":"mutable","name":"_nodeNum","nameLocation":"6530:8:121","nodeType":"VariableDeclaration","scope":40815,"src":"6523:15:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":40747,"name":"uint64","nodeType":"ElementaryTypeName","src":"6523:6:121","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":40750,"mutability":"mutable","name":"_sendRoot","nameLocation":"6552:9:121","nodeType":"VariableDeclaration","scope":40815,"src":"6544:17:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40749,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6544:7:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":40752,"mutability":"mutable","name":"_blockHash","nameLocation":"6575:10:121","nodeType":"VariableDeclaration","scope":40815,"src":"6567:18:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40751,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6567:7:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":40755,"mutability":"mutable","name":"_proof","nameLocation":"6610:6:121","nodeType":"VariableDeclaration","scope":40815,"src":"6591:25:121","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":40753,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6591:7:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":40754,"nodeType":"ArrayTypeName","src":"6591:9:121","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":40757,"mutability":"mutable","name":"_index","nameLocation":"6630:6:121","nodeType":"VariableDeclaration","scope":40815,"src":"6622:14:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40756,"name":"uint256","nodeType":"ElementaryTypeName","src":"6622:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40760,"mutability":"mutable","name":"_message","nameLocation":"6661:8:121","nodeType":"VariableDeclaration","scope":40815,"src":"6642:27:121","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$40462_calldata_ptr","typeString":"struct L2Message"},"typeName":{"id":40759,"nodeType":"UserDefinedTypeName","pathNode":{"id":40758,"name":"L2Message","nameLocations":["6642:9:121"],"nodeType":"IdentifierPath","referencedDeclaration":40462,"src":"6642:9:121"},"referencedDeclaration":40462,"src":"6642:9:121","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$40462_storage_ptr","typeString":"struct L2Message"}},"visibility":"internal"}],"src":"6517:156:121"},"returnParameters":{"id":40762,"nodeType":"ParameterList","parameters":[],"src":"6683:0:121"},"scope":40991,"src":"6486:1330:121","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":40860,"nodeType":"Block","src":"7933:799:121","statements":[{"assignments":[40825],"declarations":[{"constant":false,"id":40825,"mutability":"mutable","name":"confirmData","nameLocation":"8060:11:121","nodeType":"VariableDeclaration","scope":40860,"src":"8052:19:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40824,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8052:7:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":40830,"initialValue":{"arguments":[{"id":40827,"name":"_blockHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40821,"src":"8087:10:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":40828,"name":"_sendRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40819,"src":"8099:9:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":40826,"name":"_confirmHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40928,"src":"8074:12:121","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32) pure returns (bytes32)"}},"id":40829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8074:35:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"8052:57:121"},{"assignments":[40833],"declarations":[{"constant":false,"id":40833,"mutability":"mutable","name":"node","nameLocation":"8200:4:121","nodeType":"VariableDeclaration","scope":40860,"src":"8188:16:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Node_$48266_memory_ptr","typeString":"struct Node"},"typeName":{"id":40832,"nodeType":"UserDefinedTypeName","pathNode":{"id":40831,"name":"Node","nameLocations":["8188:4:121"],"nodeType":"IdentifierPath","referencedDeclaration":48266,"src":"8188:4:121"},"referencedDeclaration":48266,"src":"8188:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_Node_$48266_storage_ptr","typeString":"struct Node"}},"visibility":"internal"}],"id":40838,"initialValue":{"arguments":[{"id":40836,"name":"_nodeNum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40817,"src":"8222:8:121","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"expression":{"id":40834,"name":"rollup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40476,"src":"8207:6:121","typeDescriptions":{"typeIdentifier":"t_contract$_IArbitrumRollup_$48276","typeString":"contract IArbitrumRollup"}},"id":40835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8214:7:121","memberName":"getNode","nodeType":"MemberAccess","referencedDeclaration":48275,"src":"8207:14:121","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint64_$returns$_t_struct$_Node_$48266_memory_ptr_$","typeString":"function (uint64) view external returns (struct Node memory)"}},"id":40837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8207:24:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Node_$48266_memory_ptr","typeString":"struct Node memory"}},"nodeType":"VariableDeclarationStatement","src":"8188:43:121"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":40843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40840,"name":"node","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40833,"src":"8245:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_Node_$48266_memory_ptr","typeString":"struct Node memory"}},"id":40841,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8250:11:121","memberName":"confirmData","nodeType":"MemberAccess","referencedDeclaration":48247,"src":"8245:16:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":40842,"name":"confirmData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40825,"src":"8265:11:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8245:31:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21636f6e6669726d44617461","id":40844,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8278:14:121","typeDescriptions":{"typeIdentifier":"t_stringliteral_3ec35b7201b3898115e81df5644e6a328a1ab31166b374a7e0d4467479763910","typeString":"literal_string \"!confirmData\""},"value":"!confirmData"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3ec35b7201b3898115e81df5644e6a328a1ab31166b374a7e0d4467479763910","typeString":"literal_string \"!confirmData\""}],"id":40839,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8237:7:121","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8237:56:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40846,"nodeType":"ExpressionStatement","src":"8237:56:121"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":40856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":40851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40848,"name":"node","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40833,"src":"8666:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_Node_$48266_memory_ptr","typeString":"struct Node memory"}},"id":40849,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8671:11:121","memberName":"stakerCount","nodeType":"MemberAccess","referencedDeclaration":48255,"src":"8666:16:121","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":40850,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8685:1:121","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8666:20:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":40855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40852,"name":"node","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40833,"src":"8690:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_Node_$48266_memory_ptr","typeString":"struct Node memory"}},"id":40853,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8695:16:121","memberName":"childStakerCount","nodeType":"MemberAccess","referencedDeclaration":48257,"src":"8690:21:121","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":40854,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8714:1:121","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8690:25:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8666:49:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"217374616b6564","id":40857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8717:9:121","typeDescriptions":{"typeIdentifier":"t_stringliteral_80b056f9550ecc47107329535d0b0e6d2c94a4e6fda289320403c71d34aecf05","typeString":"literal_string \"!staked\""},"value":"!staked"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_80b056f9550ecc47107329535d0b0e6d2c94a4e6fda289320403c71d34aecf05","typeString":"literal_string \"!staked\""}],"id":40847,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8658:7:121","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8658:69:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40859,"nodeType":"ExpressionStatement","src":"8658:69:121"}]},"id":40861,"implemented":true,"kind":"function","modifiers":[],"name":"_validateSendRoot","nameLocation":"7829:17:121","nodeType":"FunctionDefinition","parameters":{"id":40822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40817,"mutability":"mutable","name":"_nodeNum","nameLocation":"7859:8:121","nodeType":"VariableDeclaration","scope":40861,"src":"7852:15:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":40816,"name":"uint64","nodeType":"ElementaryTypeName","src":"7852:6:121","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":40819,"mutability":"mutable","name":"_sendRoot","nameLocation":"7881:9:121","nodeType":"VariableDeclaration","scope":40861,"src":"7873:17:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40818,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7873:7:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":40821,"mutability":"mutable","name":"_blockHash","nameLocation":"7904:10:121","nodeType":"VariableDeclaration","scope":40861,"src":"7896:18:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40820,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7896:7:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7846:72:121"},"returnParameters":{"id":40823,"nodeType":"ParameterList","parameters":[],"src":"7933:0:121"},"scope":40991,"src":"7820:912:121","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":40909,"nodeType":"Block","src":"8937:504:121","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":40878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40875,"name":"_msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40871,"src":"9006:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$40462_calldata_ptr","typeString":"struct L2Message calldata"}},"id":40876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9011:8:121","memberName":"l2Sender","nodeType":"MemberAccess","referencedDeclaration":40449,"src":"9006:13:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":40877,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"9023:15:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9006:32:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216d6972726f72436f6e6e6563746f72","id":40879,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9040:18:121","typeDescriptions":{"typeIdentifier":"t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d","typeString":"literal_string \"!mirrorConnector\""},"value":"!mirrorConnector"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d","typeString":"literal_string \"!mirrorConnector\""}],"id":40874,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8998:7:121","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8998:61:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40881,"nodeType":"ExpressionStatement","src":"8998:61:121"},{"assignments":[40883],"declarations":[{"constant":false,"id":40883,"mutability":"mutable","name":"userTx","nameLocation":"9146:6:121","nodeType":"VariableDeclaration","scope":40909,"src":"9138:14:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40882,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9138:7:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":40901,"initialValue":{"arguments":[{"expression":{"id":40886,"name":"_msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40871,"src":"9187:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$40462_calldata_ptr","typeString":"struct L2Message calldata"}},"id":40887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9192:8:121","memberName":"l2Sender","nodeType":"MemberAccess","referencedDeclaration":40449,"src":"9187:13:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":40888,"name":"_msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40871,"src":"9208:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$40462_calldata_ptr","typeString":"struct L2Message calldata"}},"id":40889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9213:2:121","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":40451,"src":"9208:7:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":40890,"name":"_msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40871,"src":"9223:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$40462_calldata_ptr","typeString":"struct L2Message calldata"}},"id":40891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9228:7:121","memberName":"l2Block","nodeType":"MemberAccess","referencedDeclaration":40453,"src":"9223:12:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":40892,"name":"_msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40871,"src":"9243:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$40462_calldata_ptr","typeString":"struct L2Message calldata"}},"id":40893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9248:7:121","memberName":"l1Block","nodeType":"MemberAccess","referencedDeclaration":40455,"src":"9243:12:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":40894,"name":"_msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40871,"src":"9263:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$40462_calldata_ptr","typeString":"struct L2Message calldata"}},"id":40895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9268:11:121","memberName":"l2Timestamp","nodeType":"MemberAccess","referencedDeclaration":40457,"src":"9263:16:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":40896,"name":"_msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40871,"src":"9287:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$40462_calldata_ptr","typeString":"struct L2Message calldata"}},"id":40897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9292:5:121","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":40459,"src":"9287:10:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":40898,"name":"_msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40871,"src":"9305:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$40462_calldata_ptr","typeString":"struct L2Message calldata"}},"id":40899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9310:8:121","memberName":"callData","nodeType":"MemberAccess","referencedDeclaration":40461,"src":"9305:13:121","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":40884,"name":"outbox","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40473,"src":"9155:6:121","typeDescriptions":{"typeIdentifier":"t_contract$_IArbitrumOutbox_$48239","typeString":"contract IArbitrumOutbox"}},"id":40885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9162:17:121","memberName":"calculateItemHash","nodeType":"MemberAccess","referencedDeclaration":48226,"src":"9155:24:121","typeDescriptions":{"typeIdentifier":"t_function_external_pure$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (address,address,uint256,uint256,uint256,uint256,bytes memory) pure external returns (bytes32)"}},"id":40900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9155:169:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9138:186:121"},{"expression":{"arguments":[{"id":40903,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40866,"src":"9402:6:121","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}},{"id":40904,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40868,"src":"9410:6:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40905,"name":"userTx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40883,"src":"9418:6:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":40906,"name":"_sendRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40863,"src":"9426:9:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":40902,"name":"_recordOutputAsSpent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40990,"src":"9381:20:121","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_uint256_$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32[] memory,uint256,bytes32,bytes32)"}},"id":40907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9381:55:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40908,"nodeType":"ExpressionStatement","src":"9381:55:121"}]},"id":40910,"implemented":true,"kind":"function","modifiers":[],"name":"_validateMessage","nameLocation":"8804:16:121","nodeType":"FunctionDefinition","parameters":{"id":40872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40863,"mutability":"mutable","name":"_sendRoot","nameLocation":"8834:9:121","nodeType":"VariableDeclaration","scope":40910,"src":"8826:17:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40862,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8826:7:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":40866,"mutability":"mutable","name":"_proof","nameLocation":"8868:6:121","nodeType":"VariableDeclaration","scope":40910,"src":"8849:25:121","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":40864,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8849:7:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":40865,"nodeType":"ArrayTypeName","src":"8849:9:121","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":40868,"mutability":"mutable","name":"_index","nameLocation":"8888:6:121","nodeType":"VariableDeclaration","scope":40910,"src":"8880:14:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40867,"name":"uint256","nodeType":"ElementaryTypeName","src":"8880:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40871,"mutability":"mutable","name":"_msg","nameLocation":"8919:4:121","nodeType":"VariableDeclaration","scope":40910,"src":"8900:23:121","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$40462_calldata_ptr","typeString":"struct L2Message"},"typeName":{"id":40870,"nodeType":"UserDefinedTypeName","pathNode":{"id":40869,"name":"L2Message","nameLocations":["8900:9:121"],"nodeType":"IdentifierPath","referencedDeclaration":40462,"src":"8900:9:121"},"referencedDeclaration":40462,"src":"8900:9:121","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$40462_storage_ptr","typeString":"struct L2Message"}},"visibility":"internal"}],"src":"8820:107:121"},"returnParameters":{"id":40873,"nodeType":"ParameterList","parameters":[],"src":"8937:0:121"},"scope":40991,"src":"8795:646:121","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":40927,"nodeType":"Block","src":"9684:68:121","statements":[{"expression":{"arguments":[{"arguments":[{"id":40922,"name":"_blockHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40912,"src":"9724:10:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":40923,"name":"_sendRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40914,"src":"9736:9:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":40920,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"9707:3:121","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":40921,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9711:12:121","memberName":"encodePacked","nodeType":"MemberAccess","src":"9707:16:121","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":40924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9707:39:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":40919,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"9697:9:121","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":40925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9697:50:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":40918,"id":40926,"nodeType":"Return","src":"9690:57:121"}]},"id":40928,"implemented":true,"kind":"function","modifiers":[],"name":"_confirmHash","nameLocation":"9600:12:121","nodeType":"FunctionDefinition","parameters":{"id":40915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40912,"mutability":"mutable","name":"_blockHash","nameLocation":"9621:10:121","nodeType":"VariableDeclaration","scope":40928,"src":"9613:18:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40911,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9613:7:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":40914,"mutability":"mutable","name":"_sendRoot","nameLocation":"9641:9:121","nodeType":"VariableDeclaration","scope":40928,"src":"9633:17:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40913,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9633:7:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9612:39:121"},"returnParameters":{"id":40918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40917,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40928,"src":"9675:7:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40916,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9675:7:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9674:9:121"},"scope":40991,"src":"9591:161:121","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":40989,"nodeType":"Block","src":"10036:890:121","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40941,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40931,"src":"10050:6:121","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":40942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10057:6:121","memberName":"length","nodeType":"MemberAccess","src":"10050:13:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"323536","id":40943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10066:3:121","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"src":"10050:19:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726f6f66206c656e677468","id":40945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10071:14:121","typeDescriptions":{"typeIdentifier":"t_stringliteral_074c928f9cc6a62a1da1b53ff6e65bf75d16d1a0f00aef506fe7fb31f0fea797","typeString":"literal_string \"proof length\""},"value":"proof length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_074c928f9cc6a62a1da1b53ff6e65bf75d16d1a0f00aef506fe7fb31f0fea797","typeString":"literal_string \"proof length\""}],"id":40940,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10042:7:121","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10042:44:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40947,"nodeType":"ExpressionStatement","src":"10042:44:121"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40949,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40933,"src":"10101:6:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"expression":{"id":40950,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40931,"src":"10111:6:121","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":40951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10118:6:121","memberName":"length","nodeType":"MemberAccess","src":"10111:13:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10101:23:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":40953,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10100:25:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":40954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10129:1:121","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10100:30:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216d696e696d616c2070726f6f66","id":40956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10132:16:121","typeDescriptions":{"typeIdentifier":"t_stringliteral_4668219ae76e9cb73254550f287325fe9549e37f583b0dbd12da792460a151e1","typeString":"literal_string \"!minimal proof\""},"value":"!minimal proof"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4668219ae76e9cb73254550f287325fe9549e37f583b0dbd12da792460a151e1","typeString":"literal_string \"!minimal proof\""}],"id":40948,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10092:7:121","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10092:57:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40958,"nodeType":"ExpressionStatement","src":"10092:57:121"},{"expression":{"arguments":[{"id":40963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10534:18:121","subExpression":{"baseExpression":{"id":40960,"name":"processed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40490,"src":"10535:9:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bool_$","typeString":"mapping(uint256 => bool)"}},"id":40962,"indexExpression":{"id":40961,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40933,"src":"10545:6:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10535:17:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7370656e74","id":40964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10554:7:121","typeDescriptions":{"typeIdentifier":"t_stringliteral_95a88df2976f6e0e24378e2dd0fe64cc4cbcc7e4055ddf10761c8f53ffdd40e6","typeString":"literal_string \"spent\""},"value":"spent"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_95a88df2976f6e0e24378e2dd0fe64cc4cbcc7e4055ddf10761c8f53ffdd40e6","typeString":"literal_string \"spent\""}],"id":40959,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10526:7:121","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10526:36:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40966,"nodeType":"ExpressionStatement","src":"10526:36:121"},{"assignments":[40968],"declarations":[{"constant":false,"id":40968,"mutability":"mutable","name":"calcRoot","nameLocation":"10603:8:121","nodeType":"VariableDeclaration","scope":40989,"src":"10595:16:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40967,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10595:7:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":40975,"initialValue":{"arguments":[{"id":40971,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40931,"src":"10641:6:121","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},{"id":40972,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40933,"src":"10649:6:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40973,"name":"_item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40935,"src":"10657:5:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":40969,"name":"outbox","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40473,"src":"10614:6:121","typeDescriptions":{"typeIdentifier":"t_contract$_IArbitrumOutbox_$48239","typeString":"contract IArbitrumOutbox"}},"id":40970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10621:19:121","memberName":"calculateMerkleRoot","nodeType":"MemberAccess","referencedDeclaration":48238,"src":"10614:26:121","typeDescriptions":{"typeIdentifier":"t_function_external_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32[] memory,uint256,bytes32) pure external returns (bytes32)"}},"id":40974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10614:49:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"10595:68:121"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":40979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40977,"name":"calcRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40968,"src":"10837:8:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":40978,"name":"_sendRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40937,"src":"10849:9:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"10837:21:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2170726f6f66","id":40980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10860:8:121","typeDescriptions":{"typeIdentifier":"t_stringliteral_6257fa65cb3e2131130f078fa0b2c0b28695aa9be00e6235d4f462589ad75bec","typeString":"literal_string \"!proof\""},"value":"!proof"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6257fa65cb3e2131130f078fa0b2c0b28695aa9be00e6235d4f462589ad75bec","typeString":"literal_string \"!proof\""}],"id":40976,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10829:7:121","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10829:40:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40982,"nodeType":"ExpressionStatement","src":"10829:40:121"},{"expression":{"id":40987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":40983,"name":"processed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40490,"src":"10897:9:121","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bool_$","typeString":"mapping(uint256 => bool)"}},"id":40985,"indexExpression":{"id":40984,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40933,"src":"10907:6:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10897:17:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":40986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10917:4:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"10897:24:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40988,"nodeType":"ExpressionStatement","src":"10897:24:121"}]},"id":40990,"implemented":true,"kind":"function","modifiers":[],"name":"_recordOutputAsSpent","nameLocation":"9911:20:121","nodeType":"FunctionDefinition","parameters":{"id":40938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40931,"mutability":"mutable","name":"_proof","nameLocation":"9954:6:121","nodeType":"VariableDeclaration","scope":40990,"src":"9937:23:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":40929,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9937:7:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":40930,"nodeType":"ArrayTypeName","src":"9937:9:121","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":40933,"mutability":"mutable","name":"_index","nameLocation":"9974:6:121","nodeType":"VariableDeclaration","scope":40990,"src":"9966:14:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40932,"name":"uint256","nodeType":"ElementaryTypeName","src":"9966:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40935,"mutability":"mutable","name":"_item","nameLocation":"9994:5:121","nodeType":"VariableDeclaration","scope":40990,"src":"9986:13:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40934,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9986:7:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":40937,"mutability":"mutable","name":"_sendRoot","nameLocation":"10013:9:121","nodeType":"VariableDeclaration","scope":40990,"src":"10005:17:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40936,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10005:7:121","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9931:95:121"},"returnParameters":{"id":40939,"nodeType":"ParameterList","parameters":[],"src":"10036:0:121"},"scope":40991,"src":"9902:1024:121","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":40992,"src":"807:10121:121","usedErrors":[9772,39018,49697,49699,49701,49703,49705,49707,49709,50225,50227]}],"src":"46:10883:121"},"id":121},"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol","exportedSymbols":{"ArbitrumL2Amb":[48051],"ArbitrumSpokeConnector":[41224],"Connector":[39244],"IArbSys":[13341],"LibArbitrumL2":[9768],"SpokeConnector":[40428]},"id":41225,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":40993,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:122"},{"absolutePath":"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL2.sol","file":"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL2.sol","id":40995,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41225,"sourceUnit":9769,"src":"71:92:122","symbolAliases":[{"foreign":{"id":40994,"name":"LibArbitrumL2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9768,"src":"79:13:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/vendor/arbitrum/IArbSys.sol","file":"@openzeppelin/contracts/vendor/arbitrum/IArbSys.sol","id":40997,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41225,"sourceUnit":13342,"src":"164:76:122","symbolAliases":[{"foreign":{"id":40996,"name":"IArbSys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13341,"src":"172:7:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/ambs/arbitrum/ArbitrumL2Amb.sol","file":"../../interfaces/ambs/arbitrum/ArbitrumL2Amb.sol","id":40999,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41225,"sourceUnit":48052,"src":"242:79:122","symbolAliases":[{"foreign":{"id":40998,"name":"ArbitrumL2Amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48051,"src":"250:13:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/SpokeConnector.sol","file":"../SpokeConnector.sol","id":41001,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41225,"sourceUnit":40429,"src":"323:53:122","symbolAliases":[{"foreign":{"id":41000,"name":"SpokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40428,"src":"331:14:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/Connector.sol","file":"../Connector.sol","id":41003,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41225,"sourceUnit":39245,"src":"377:43:122","symbolAliases":[{"foreign":{"id":41002,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"385:9:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":41004,"name":"SpokeConnector","nameLocations":["457:14:122"],"nodeType":"IdentifierPath","referencedDeclaration":40428,"src":"457:14:122"},"id":41005,"nodeType":"InheritanceSpecifier","src":"457:14:122"}],"canonicalName":"ArbitrumSpokeConnector","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":41224,"linearizedBaseContracts":[41224,40428,10734,49688,38914,10680,11506,39292,47805,39244,47778,49928,50003],"name":"ArbitrumSpokeConnector","nameLocation":"431:22:122","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"138b2e0015ac8e1842fbb73cdefea5574fd42dd33df05e84271a7adc811d6b3d","id":41011,"name":"AliasedSenderUpdated","nameLocation":"521:20:122","nodeType":"EventDefinition","parameters":{"id":41010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41007,"indexed":false,"mutability":"mutable","name":"previous","nameLocation":"550:8:122","nodeType":"VariableDeclaration","scope":41011,"src":"542:16:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41006,"name":"address","nodeType":"ElementaryTypeName","src":"542:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41009,"indexed":false,"mutability":"mutable","name":"current","nameLocation":"568:7:122","nodeType":"VariableDeclaration","scope":41011,"src":"560:15:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41008,"name":"address","nodeType":"ElementaryTypeName","src":"560:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"541:35:122"},"src":"515:62:122"},{"constant":false,"documentation":{"id":41012,"nodeType":"StructuredDocumentation","src":"628:235:122","text":" @notice Aliased address of mirror connector. This value should be calculated and set\n when the `_mirrorConnector` address is set.\n @dev See: https://developer.arbitrum.io/arbos/l1-to-l2-messaging#address-aliasing"},"functionSelector":"361d88ac","id":41014,"mutability":"mutable","name":"aliasedSender","nameLocation":"881:13:122","nodeType":"VariableDeclaration","scope":41224,"src":"866:28:122","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41013,"name":"address","nodeType":"ElementaryTypeName","src":"866:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"body":{"id":41026,"nodeType":"Block","src":"1040:72:122","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":41021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41018,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1054:3:122","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":41019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1058:6:122","memberName":"sender","nodeType":"MemberAccess","src":"1054:10:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":41020,"name":"aliasedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41014,"src":"1068:13:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1054:27:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21616c696173656453656e646572","id":41022,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1083:16:122","typeDescriptions":{"typeIdentifier":"t_stringliteral_d61267da0fbec4006445194cefd99ca77e8e2e85eead97f9e0e59557740611c0","typeString":"literal_string \"!aliasedSender\""},"value":"!aliasedSender"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d61267da0fbec4006445194cefd99ca77e8e2e85eead97f9e0e59557740611c0","typeString":"literal_string \"!aliasedSender\""}],"id":41017,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1046:7:122","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1046:54:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41024,"nodeType":"ExpressionStatement","src":"1046:54:122"},{"id":41025,"nodeType":"PlaceholderStatement","src":"1106:1:122"}]},"documentation":{"id":41015,"nodeType":"StructuredDocumentation","src":"941:73:122","text":" @notice Errors if the msg.sender is not the aliased sender"},"id":41027,"name":"onlyAliased","nameLocation":"1026:11:122","nodeType":"ModifierDefinition","parameters":{"id":41016,"nodeType":"ParameterList","parameters":[],"src":"1037:2:122"},"src":"1017:95:122","virtual":false,"visibility":"internal"},{"body":{"id":41066,"nodeType":"Block","src":"1637:46:122","statements":[{"expression":{"arguments":[{"id":41063,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41037,"src":"1661:16:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41062,"name":"_setAliasedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41223,"src":"1643:17:122","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":41064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1643:35:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41065,"nodeType":"ExpressionStatement","src":"1643:35:122"}]},"id":41067,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":41050,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41029,"src":"1448:7:122","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":41051,"name":"_mirrorDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41031,"src":"1463:13:122","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":41052,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41033,"src":"1484:4:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41053,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41035,"src":"1496:12:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41054,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41037,"src":"1516:16:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41055,"name":"_processGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41039,"src":"1540:11:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":41056,"name":"_reserveGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41041,"src":"1559:11:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":41057,"name":"_delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41043,"src":"1578:12:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":41058,"name":"_merkle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41045,"src":"1598:7:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41059,"name":"_watcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41047,"src":"1613:15:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":41060,"kind":"baseConstructorSpecifier","modifierName":{"id":41049,"name":"SpokeConnector","nameLocations":["1426:14:122"],"nodeType":"IdentifierPath","referencedDeclaration":40428,"src":"1426:14:122"},"nodeType":"ModifierInvocation","src":"1426:208:122"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":41048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41029,"mutability":"mutable","name":"_domain","nameLocation":"1184:7:122","nodeType":"VariableDeclaration","scope":41067,"src":"1177:14:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":41028,"name":"uint32","nodeType":"ElementaryTypeName","src":"1177:6:122","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":41031,"mutability":"mutable","name":"_mirrorDomain","nameLocation":"1204:13:122","nodeType":"VariableDeclaration","scope":41067,"src":"1197:20:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":41030,"name":"uint32","nodeType":"ElementaryTypeName","src":"1197:6:122","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":41033,"mutability":"mutable","name":"_amb","nameLocation":"1231:4:122","nodeType":"VariableDeclaration","scope":41067,"src":"1223:12:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41032,"name":"address","nodeType":"ElementaryTypeName","src":"1223:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41035,"mutability":"mutable","name":"_rootManager","nameLocation":"1249:12:122","nodeType":"VariableDeclaration","scope":41067,"src":"1241:20:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41034,"name":"address","nodeType":"ElementaryTypeName","src":"1241:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41037,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"1275:16:122","nodeType":"VariableDeclaration","scope":41067,"src":"1267:24:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41036,"name":"address","nodeType":"ElementaryTypeName","src":"1267:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41039,"mutability":"mutable","name":"_processGas","nameLocation":"1305:11:122","nodeType":"VariableDeclaration","scope":41067,"src":"1297:19:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41038,"name":"uint256","nodeType":"ElementaryTypeName","src":"1297:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41041,"mutability":"mutable","name":"_reserveGas","nameLocation":"1330:11:122","nodeType":"VariableDeclaration","scope":41067,"src":"1322:19:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41040,"name":"uint256","nodeType":"ElementaryTypeName","src":"1322:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41043,"mutability":"mutable","name":"_delayBlocks","nameLocation":"1355:12:122","nodeType":"VariableDeclaration","scope":41067,"src":"1347:20:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41042,"name":"uint256","nodeType":"ElementaryTypeName","src":"1347:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41045,"mutability":"mutable","name":"_merkle","nameLocation":"1381:7:122","nodeType":"VariableDeclaration","scope":41067,"src":"1373:15:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41044,"name":"address","nodeType":"ElementaryTypeName","src":"1373:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41047,"mutability":"mutable","name":"_watcherManager","nameLocation":"1402:15:122","nodeType":"VariableDeclaration","scope":41067,"src":"1394:23:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41046,"name":"address","nodeType":"ElementaryTypeName","src":"1394:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1171:250:122"},"returnParameters":{"id":41061,"nodeType":"ParameterList","parameters":[],"src":"1637:0:122"},"scope":41224,"src":"1160:523:122","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[39189],"body":{"id":41086,"nodeType":"Block","src":"1961:79:122","statements":[{"expression":{"arguments":[{"id":41077,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41070,"src":"1983:5:122","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41076,"name":"_processMessage","nodeType":"Identifier","overloadedDeclarations":[41175],"referencedDeclaration":41175,"src":"1967:15:122","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory)"}},"id":41078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1967:22:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41079,"nodeType":"ExpressionStatement","src":"1967:22:122"},{"eventCall":{"arguments":[{"id":41081,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41070,"src":"2017:5:122","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"id":41082,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2024:3:122","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":41083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2028:6:122","memberName":"sender","nodeType":"MemberAccess","src":"2024:10:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":41080,"name":"MessageProcessed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47765,"src":"2000:16:122","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_address_$returns$__$","typeString":"function (bytes memory,address)"}},"id":41084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2000:35:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41085,"nodeType":"EmitStatement","src":"1995:40:122"}]},"documentation":{"id":41068,"nodeType":"StructuredDocumentation","src":"1736:148:122","text":" @notice Processes a message received by an AMB\n @dev This is called by AMBs to process messages originating from mirror connector"},"functionSelector":"4ff746f6","id":41087,"implemented":true,"kind":"function","modifiers":[{"id":41074,"kind":"modifierInvocation","modifierName":{"id":41073,"name":"onlyAliased","nameLocations":["1949:11:122"],"nodeType":"IdentifierPath","referencedDeclaration":41027,"src":"1949:11:122"},"nodeType":"ModifierInvocation","src":"1949:11:122"}],"name":"processMessage","nameLocation":"1896:14:122","nodeType":"FunctionDefinition","overrides":{"id":41072,"nodeType":"OverrideSpecifier","overrides":[],"src":"1940:8:122"},"parameters":{"id":41071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41070,"mutability":"mutable","name":"_data","nameLocation":"1924:5:122","nodeType":"VariableDeclaration","scope":41087,"src":"1911:18:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41069,"name":"bytes","nodeType":"ElementaryTypeName","src":"1911:5:122","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1910:20:122"},"returnParameters":{"id":41075,"nodeType":"ParameterList","parameters":[],"src":"1961:0:122"},"scope":41224,"src":"1887:153:122","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39228],"body":{"id":41102,"nodeType":"Block","src":"2174:66:122","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":41100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41095,"name":"_expected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41089,"src":"2187:9:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":41098,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"2231:3:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":41096,"name":"LibArbitrumL2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9768,"src":"2200:13:122","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibArbitrumL2_$9768_$","typeString":"type(library LibArbitrumL2)"}},"id":41097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2214:16:122","memberName":"crossChainSender","nodeType":"MemberAccess","referencedDeclaration":9767,"src":"2200:30:122","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":41099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2200:35:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2187:48:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":41094,"id":41101,"nodeType":"Return","src":"2180:55:122"}]},"id":41103,"implemented":true,"kind":"function","modifiers":[],"name":"_verifySender","nameLocation":"2103:13:122","nodeType":"FunctionDefinition","overrides":{"id":41091,"nodeType":"OverrideSpecifier","overrides":[],"src":"2150:8:122"},"parameters":{"id":41090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41089,"mutability":"mutable","name":"_expected","nameLocation":"2125:9:122","nodeType":"VariableDeclaration","scope":41103,"src":"2117:17:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41088,"name":"address","nodeType":"ElementaryTypeName","src":"2117:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2116:19:122"},"returnParameters":{"id":41094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41093,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41103,"src":"2168:4:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41092,"name":"bool","nodeType":"ElementaryTypeName","src":"2168:4:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2167:6:122"},"scope":41224,"src":"2094:146:122","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[39210],"body":{"id":41145,"nodeType":"Block","src":"2331:406:122","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41112,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41105,"src":"2400:5:122","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2406:6:122","memberName":"length","nodeType":"MemberAccess","src":"2400:12:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":41114,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2416:2:122","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"2400:18:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c656e677468","id":41116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2420:9:122","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""},"value":"!length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""}],"id":41111,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2392:7:122","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2392:38:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41118,"nodeType":"ExpressionStatement","src":"2392:38:122"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41120,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41107,"src":"2491:12:122","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2504:6:122","memberName":"length","nodeType":"MemberAccess","src":"2491:19:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":41122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2514:1:122","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2491:24:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2164617461206c656e677468","id":41124,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2517:14:122","typeDescriptions":{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""},"value":"!data length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""}],"id":41119,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2483:7:122","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2483:49:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41126,"nodeType":"ExpressionStatement","src":"2483:49:122"},{"assignments":[41128],"declarations":[{"constant":false,"id":41128,"mutability":"mutable","name":"_calldata","nameLocation":"2575:9:122","nodeType":"VariableDeclaration","scope":41145,"src":"2562:22:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41127,"name":"bytes","nodeType":"ElementaryTypeName","src":"2562:5:122","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":41136,"initialValue":{"arguments":[{"expression":{"expression":{"id":41131,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"2610:9:122","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Connector_$39244_$","typeString":"type(contract Connector)"}},"id":41132,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2620:14:122","memberName":"processMessage","nodeType":"MemberAccess","referencedDeclaration":39189,"src":"2610:24:122","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function Connector.processMessage(bytes memory)"}},"id":41133,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2635:8:122","memberName":"selector","nodeType":"MemberAccess","src":"2610:33:122","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":41134,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41105,"src":"2645:5:122","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":41129,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2587:3:122","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":41130,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2591:18:122","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2587:22:122","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":41135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2587:64:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"2562:89:122"},{"expression":{"arguments":[{"id":41141,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"2705:15:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41142,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41128,"src":"2722:9:122","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":41138,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"2689:3:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41137,"name":"ArbitrumL2Amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48051,"src":"2675:13:122","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ArbitrumL2Amb_$48051_$","typeString":"type(contract ArbitrumL2Amb)"}},"id":41139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2675:18:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ArbitrumL2Amb_$48051","typeString":"contract ArbitrumL2Amb"}},"id":41140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2694:10:122","memberName":"sendTxToL1","nodeType":"MemberAccess","referencedDeclaration":48050,"src":"2675:29:122","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory) payable external"}},"id":41143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2675:57:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41144,"nodeType":"ExpressionStatement","src":"2675:57:122"}]},"id":41146,"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessage","nameLocation":"2253:12:122","nodeType":"FunctionDefinition","overrides":{"id":41109,"nodeType":"OverrideSpecifier","overrides":[],"src":"2322:8:122"},"parameters":{"id":41108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41105,"mutability":"mutable","name":"_data","nameLocation":"2279:5:122","nodeType":"VariableDeclaration","scope":41146,"src":"2266:18:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41104,"name":"bytes","nodeType":"ElementaryTypeName","src":"2266:5:122","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":41107,"mutability":"mutable","name":"_encodedData","nameLocation":"2299:12:122","nodeType":"VariableDeclaration","scope":41146,"src":"2286:25:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41106,"name":"bytes","nodeType":"ElementaryTypeName","src":"2286:5:122","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2265:47:122"},"returnParameters":{"id":41110,"nodeType":"ParameterList","parameters":[],"src":"2331:0:122"},"scope":41224,"src":"2244:493:122","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[39220],"body":{"id":41174,"nodeType":"Block","src":"2804:295:122","statements":[{"expression":{"arguments":[{"arguments":[{"id":41154,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"2873:15:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41153,"name":"_verifySender","nodeType":"Identifier","overloadedDeclarations":[41103],"referencedDeclaration":41103,"src":"2859:13:122","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":41155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2859:30:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216d6972726f72436f6e6e6563746f72","id":41156,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2891:18:122","typeDescriptions":{"typeIdentifier":"t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d","typeString":"literal_string \"!mirrorConnector\""},"value":"!mirrorConnector"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d","typeString":"literal_string \"!mirrorConnector\""}],"id":41152,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2851:7:122","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2851:59:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41158,"nodeType":"ExpressionStatement","src":"2851:59:122"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41160,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41148,"src":"2975:5:122","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2981:6:122","memberName":"length","nodeType":"MemberAccess","src":"2975:12:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":41162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2991:2:122","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"2975:18:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c656e677468","id":41164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2995:9:122","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""},"value":"!length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""}],"id":41159,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2967:7:122","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2967:38:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41166,"nodeType":"ExpressionStatement","src":"2967:38:122"},{"expression":{"arguments":[{"arguments":[{"id":41170,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41148,"src":"3087:5:122","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41169,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3079:7:122","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":41168,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3079:7:122","typeDescriptions":{}}},"id":41171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3079:14:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":41167,"name":"receiveAggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40160,"src":"3058:20:122","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":41172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3058:36:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41173,"nodeType":"ExpressionStatement","src":"3058:36:122"}]},"id":41175,"implemented":true,"kind":"function","modifiers":[],"name":"_processMessage","nameLocation":"2750:15:122","nodeType":"FunctionDefinition","overrides":{"id":41150,"nodeType":"OverrideSpecifier","overrides":[],"src":"2795:8:122"},"parameters":{"id":41149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41148,"mutability":"mutable","name":"_data","nameLocation":"2779:5:122","nodeType":"VariableDeclaration","scope":41175,"src":"2766:18:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41147,"name":"bytes","nodeType":"ElementaryTypeName","src":"2766:5:122","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2765:20:122"},"returnParameters":{"id":41151,"nodeType":"ParameterList","parameters":[],"src":"2804:0:122"},"scope":41224,"src":"2741:358:122","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[39243],"body":{"id":41194,"nodeType":"Block","src":"3176:154:122","statements":[{"expression":{"arguments":[{"id":41182,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41177,"src":"3200:16:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41181,"name":"_setAliasedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41223,"src":"3182:17:122","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":41183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3182:35:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41184,"nodeType":"ExpressionStatement","src":"3182:35:122"},{"eventCall":{"arguments":[{"id":41186,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"3251:15:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41187,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41177,"src":"3268:16:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":41185,"name":"MirrorConnectorUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39036,"src":"3228:22:122","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":41188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3228:57:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41189,"nodeType":"EmitStatement","src":"3223:62:122"},{"expression":{"id":41192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41190,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"3291:15:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":41191,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41177,"src":"3309:16:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3291:34:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":41193,"nodeType":"ExpressionStatement","src":"3291:34:122"}]},"id":41195,"implemented":true,"kind":"function","modifiers":[],"name":"_setMirrorConnector","nameLocation":"3112:19:122","nodeType":"FunctionDefinition","overrides":{"id":41179,"nodeType":"OverrideSpecifier","overrides":[],"src":"3167:8:122"},"parameters":{"id":41178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41177,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"3140:16:122","nodeType":"VariableDeclaration","scope":41195,"src":"3132:24:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41176,"name":"address","nodeType":"ElementaryTypeName","src":"3132:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3131:26:122"},"returnParameters":{"id":41180,"nodeType":"ParameterList","parameters":[],"src":"3176:0:122"},"scope":41224,"src":"3103:227:122","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":41222,"nodeType":"Block","src":"3396:294:122","statements":[{"assignments":[41201],"declarations":[{"constant":false,"id":41201,"mutability":"mutable","name":"_alias","nameLocation":"3446:6:122","nodeType":"VariableDeclaration","scope":41222,"src":"3438:14:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41200,"name":"address","nodeType":"ElementaryTypeName","src":"3438:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":41212,"initialValue":{"arguments":[{"id":41206,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41197,"src":"3504:16:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":41209,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3530:1:122","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":41208,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3522:7:122","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41207,"name":"address","nodeType":"ElementaryTypeName","src":"3522:7:122","typeDescriptions":{}}},"id":41210,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3522:10:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":41203,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"3463:3:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41202,"name":"IArbSys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13341,"src":"3455:7:122","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IArbSys_$13341_$","typeString":"type(contract IArbSys)"}},"id":41204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3455:12:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IArbSys_$13341","typeString":"contract IArbSys"}},"id":41205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3468:35:122","memberName":"mapL1SenderContractAddressToL2Alias","nodeType":"MemberAccess","referencedDeclaration":13246,"src":"3455:48:122","typeDescriptions":{"typeIdentifier":"t_function_external_pure$_t_address_$_t_address_$returns$_t_address_$","typeString":"function (address,address) pure external returns (address)"}},"id":41211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3455:78:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3438:95:122"},{"eventCall":{"arguments":[{"id":41214,"name":"aliasedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41014,"src":"3565:13:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41215,"name":"_alias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41201,"src":"3580:6:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":41213,"name":"AliasedSenderUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41011,"src":"3544:20:122","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":41216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3544:43:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41217,"nodeType":"EmitStatement","src":"3539:48:122"},{"expression":{"id":41220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41218,"name":"aliasedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41014,"src":"3663:13:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":41219,"name":"_alias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41201,"src":"3679:6:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3663:22:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":41221,"nodeType":"ExpressionStatement","src":"3663:22:122"}]},"id":41223,"implemented":true,"kind":"function","modifiers":[],"name":"_setAliasedSender","nameLocation":"3343:17:122","nodeType":"FunctionDefinition","parameters":{"id":41198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41197,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"3369:16:122","nodeType":"VariableDeclaration","scope":41223,"src":"3361:24:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41196,"name":"address","nodeType":"ElementaryTypeName","src":"3361:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3360:26:122"},"returnParameters":{"id":41199,"nodeType":"ParameterList","parameters":[],"src":"3396:0:122"},"scope":41224,"src":"3334:356:122","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":41225,"src":"422:3270:122","usedErrors":[9772,39018,49630,49697,49699,49701,49703,49705,49707,49709,50225,50227,50229,50231,50233]}],"src":"46:3647:122"},"id":122},"contracts/messaging/connectors/gnosis/GnosisBase.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/gnosis/GnosisBase.sol","exportedSymbols":{"GasCap":[39367],"GnosisAmb":[47999],"GnosisBase":[41315]},"id":41316,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":41226,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:123"},{"absolutePath":"contracts/messaging/interfaces/ambs/GnosisAmb.sol","file":"../../interfaces/ambs/GnosisAmb.sol","id":41228,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41316,"sourceUnit":48000,"src":"71:62:123","symbolAliases":[{"foreign":{"id":41227,"name":"GnosisAmb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47999,"src":"79:9:123","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/GasCap.sol","file":"../GasCap.sol","id":41230,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41316,"sourceUnit":39368,"src":"135:37:123","symbolAliases":[{"foreign":{"id":41229,"name":"GasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39367,"src":"143:6:123","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":41231,"name":"GasCap","nameLocations":["206:6:123"],"nodeType":"IdentifierPath","referencedDeclaration":39367,"src":"206:6:123"},"id":41232,"nodeType":"InheritanceSpecifier","src":"206:6:123"}],"canonicalName":"GnosisBase","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":41315,"linearizedBaseContracts":[41315,39367,49928,50003],"name":"GnosisBase","nameLocation":"192:10:123","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"c8a4d690","id":41234,"mutability":"immutable","name":"MIRROR_CHAIN_ID","nameLocation":"281:15:123","nodeType":"VariableDeclaration","scope":41315,"src":"256:40:123","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41233,"name":"uint256","nodeType":"ElementaryTypeName","src":"256:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"body":{"id":41248,"nodeType":"Block","src":"413:43:123","statements":[{"expression":{"id":41246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41244,"name":"MIRROR_CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41234,"src":"419:15:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":41245,"name":"_mirrorChainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41238,"src":"437:14:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"419:32:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":41247,"nodeType":"ExpressionStatement","src":"419:32:123"}]},"id":41249,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":41241,"name":"_gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41236,"src":"404:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":41242,"kind":"baseConstructorSpecifier","modifierName":{"id":41240,"name":"GasCap","nameLocations":["397:6:123"],"nodeType":"IdentifierPath","referencedDeclaration":39367,"src":"397:6:123"},"nodeType":"ModifierInvocation","src":"397:15:123"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":41239,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41236,"mutability":"mutable","name":"_gasCap","nameLocation":"364:7:123","nodeType":"VariableDeclaration","scope":41249,"src":"356:15:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41235,"name":"uint256","nodeType":"ElementaryTypeName","src":"356:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41238,"mutability":"mutable","name":"_mirrorChainId","nameLocation":"381:14:123","nodeType":"VariableDeclaration","scope":41249,"src":"373:22:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41237,"name":"uint256","nodeType":"ElementaryTypeName","src":"373:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"355:41:123"},"returnParameters":{"id":41243,"nodeType":"ParameterList","parameters":[],"src":"413:0:123"},"scope":41315,"src":"344:112:123","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":41284,"nodeType":"Block","src":"694:163:123","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":41265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41262,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"708:3:123","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":41263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"712:6:123","memberName":"sender","nodeType":"MemberAccess","src":"708:10:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":41264,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41252,"src":"722:4:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"708:18:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21627269646765","id":41266,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"728:9:123","typeDescriptions":{"typeIdentifier":"t_stringliteral_5bd20fa0eac50a6892371dae18efeb7d2b1c7a8479150f38626e21052ac8472c","typeString":"literal_string \"!bridge\""},"value":"!bridge"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5bd20fa0eac50a6892371dae18efeb7d2b1c7a8479150f38626e21052ac8472c","typeString":"literal_string \"!bridge\""}],"id":41261,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"700:7:123","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"700:38:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41268,"nodeType":"ExpressionStatement","src":"700:38:123"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41270,"name":"_sourceChain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41256,"src":"752:12:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":41271,"name":"MIRROR_CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41234,"src":"768:15:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"752:31:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21736f75726365","id":41273,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"785:9:123","typeDescriptions":{"typeIdentifier":"t_stringliteral_599616dc1fbc723d39bc96590d652f93d467afd415e9f46bd106f14abf00049d","typeString":"literal_string \"!source\""},"value":"!source"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_599616dc1fbc723d39bc96590d652f93d467afd415e9f46bd106f14abf00049d","typeString":"literal_string \"!source\""}],"id":41269,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"744:7:123","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"744:51:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41275,"nodeType":"ExpressionStatement","src":"744:51:123"},{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":41282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":41277,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41252,"src":"818:4:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41276,"name":"GnosisAmb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47999,"src":"808:9:123","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GnosisAmb_$47999_$","typeString":"type(contract GnosisAmb)"}},"id":41278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"808:15:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_GnosisAmb_$47999","typeString":"contract GnosisAmb"}},"id":41279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"824:13:123","memberName":"messageSender","nodeType":"MemberAccess","referencedDeclaration":47895,"src":"808:29:123","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":41280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"808:31:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":41281,"name":"_expected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41254,"src":"843:9:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"808:44:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":41260,"id":41283,"nodeType":"Return","src":"801:51:123"}]},"documentation":{"id":41250,"nodeType":"StructuredDocumentation","src":"504:64:123","text":" @dev Asserts the sender of a cross domain message"},"id":41285,"implemented":true,"kind":"function","modifiers":[],"name":"_verifySender","nameLocation":"580:13:123","nodeType":"FunctionDefinition","parameters":{"id":41257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41252,"mutability":"mutable","name":"_amb","nameLocation":"607:4:123","nodeType":"VariableDeclaration","scope":41285,"src":"599:12:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41251,"name":"address","nodeType":"ElementaryTypeName","src":"599:7:123","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41254,"mutability":"mutable","name":"_expected","nameLocation":"625:9:123","nodeType":"VariableDeclaration","scope":41285,"src":"617:17:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41253,"name":"address","nodeType":"ElementaryTypeName","src":"617:7:123","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41256,"mutability":"mutable","name":"_sourceChain","nameLocation":"648:12:123","nodeType":"VariableDeclaration","scope":41285,"src":"640:20:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41255,"name":"uint256","nodeType":"ElementaryTypeName","src":"640:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"593:71:123"},"returnParameters":{"id":41260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41259,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41285,"src":"688:4:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41258,"name":"bool","nodeType":"ElementaryTypeName","src":"688:4:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"687:6:123"},"scope":41315,"src":"571:286:123","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":41313,"nodeType":"Block","src":"1052:235:123","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41294,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41288,"src":"1123:12:123","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1136:6:123","memberName":"length","nodeType":"MemberAccess","src":"1123:19:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":41296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1146:2:123","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"1123:25:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2164617461206c656e677468","id":41298,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1150:14:123","typeDescriptions":{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""},"value":"!data length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""}],"id":41293,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1115:7:123","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41299,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1115:50:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41300,"nodeType":"ExpressionStatement","src":"1115:50:123"},{"expression":{"id":41311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41301,"name":"_gas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41291,"src":"1231:4:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":41305,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41288,"src":"1257:12:123","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":41307,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1272:7:123","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":41306,"name":"uint256","nodeType":"ElementaryTypeName","src":"1272:7:123","typeDescriptions":{}}}],"id":41308,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1271:9:123","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":41303,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1246:3:123","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":41304,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1250:6:123","memberName":"decode","nodeType":"MemberAccess","src":"1246:10:123","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":41309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1246:35:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":41302,"name":"_getGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39366,"src":"1238:7:123","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":41310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1238:44:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1231:51:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":41312,"nodeType":"ExpressionStatement","src":"1231:51:123"}]},"documentation":{"id":41286,"nodeType":"StructuredDocumentation","src":"861:96:123","text":" @notice Using Gnosis AMB, the gas is provided to `sendMessage` as an encoded uint"},"id":41314,"implemented":true,"kind":"function","modifiers":[],"name":"_getGasFromEncoded","nameLocation":"969:18:123","nodeType":"FunctionDefinition","parameters":{"id":41289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41288,"mutability":"mutable","name":"_encodedData","nameLocation":"1001:12:123","nodeType":"VariableDeclaration","scope":41314,"src":"988:25:123","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41287,"name":"bytes","nodeType":"ElementaryTypeName","src":"988:5:123","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"987:27:123"},"returnParameters":{"id":41292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41291,"mutability":"mutable","name":"_gas","nameLocation":"1046:4:123","nodeType":"VariableDeclaration","scope":41314,"src":"1038:12:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41290,"name":"uint256","nodeType":"ElementaryTypeName","src":"1038:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1037:14:123"},"scope":41315,"src":"960:327:123","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":41316,"src":"174:1115:123","usedErrors":[49697,49699,49701,49703,49705,49707,49709]}],"src":"46:1244:123"},"id":123},"contracts/messaging/connectors/gnosis/GnosisHubConnector.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/gnosis/GnosisHubConnector.sol","exportedSymbols":{"Connector":[39244],"GnosisAmb":[47999],"GnosisBase":[41315],"GnosisHubConnector":[41478],"HubConnector":[39420],"IRootManager":[47888]},"id":41479,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":41317,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:124"},{"absolutePath":"contracts/messaging/interfaces/IRootManager.sol","file":"../../interfaces/IRootManager.sol","id":41319,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41479,"sourceUnit":47889,"src":"71:63:124","symbolAliases":[{"foreign":{"id":41318,"name":"IRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47888,"src":"79:12:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/ambs/GnosisAmb.sol","file":"../../interfaces/ambs/GnosisAmb.sol","id":41321,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41479,"sourceUnit":48000,"src":"135:62:124","symbolAliases":[{"foreign":{"id":41320,"name":"GnosisAmb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47999,"src":"143:9:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/Connector.sol","file":"../Connector.sol","id":41323,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41479,"sourceUnit":39245,"src":"199:43:124","symbolAliases":[{"foreign":{"id":41322,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"207:9:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/HubConnector.sol","file":"../HubConnector.sol","id":41325,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41479,"sourceUnit":39421,"src":"243:49:124","symbolAliases":[{"foreign":{"id":41324,"name":"HubConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39420,"src":"251:12:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/gnosis/GnosisBase.sol","file":"./GnosisBase.sol","id":41327,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41479,"sourceUnit":41316,"src":"294:44:124","symbolAliases":[{"foreign":{"id":41326,"name":"GnosisBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41315,"src":"302:10:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":41328,"name":"HubConnector","nameLocations":["371:12:124"],"nodeType":"IdentifierPath","referencedDeclaration":39420,"src":"371:12:124"},"id":41329,"nodeType":"InheritanceSpecifier","src":"371:12:124"},{"baseName":{"id":41330,"name":"GnosisBase","nameLocations":["385:10:124"],"nodeType":"IdentifierPath","referencedDeclaration":41315,"src":"385:10:124"},"id":41331,"nodeType":"InheritanceSpecifier","src":"385:10:124"}],"canonicalName":"GnosisHubConnector","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":41478,"linearizedBaseContracts":[41478,41315,39367,39420,39244,47778,49928,50003],"name":"GnosisHubConnector","nameLocation":"349:18:124","nodeType":"ContractDefinition","nodes":[{"body":{"id":41359,"nodeType":"Block","src":"739:2:124","statements":[]},"id":41360,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":41348,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41333,"src":"641:7:124","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":41349,"name":"_mirrorDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41335,"src":"650:13:124","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":41350,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41337,"src":"665:4:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41351,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41339,"src":"671:12:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41352,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41341,"src":"685:16:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":41353,"kind":"baseConstructorSpecifier","modifierName":{"id":41347,"name":"HubConnector","nameLocations":["628:12:124"],"nodeType":"IdentifierPath","referencedDeclaration":39420,"src":"628:12:124"},"nodeType":"ModifierInvocation","src":"628:74:124"},{"arguments":[{"id":41355,"name":"_gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41343,"src":"714:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":41356,"name":"_mirrorChainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41345,"src":"723:14:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":41357,"kind":"baseConstructorSpecifier","modifierName":{"id":41354,"name":"GnosisBase","nameLocations":["703:10:124"],"nodeType":"IdentifierPath","referencedDeclaration":41315,"src":"703:10:124"},"nodeType":"ModifierInvocation","src":"703:35:124"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":41346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41333,"mutability":"mutable","name":"_domain","nameLocation":"467:7:124","nodeType":"VariableDeclaration","scope":41360,"src":"460:14:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":41332,"name":"uint32","nodeType":"ElementaryTypeName","src":"460:6:124","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":41335,"mutability":"mutable","name":"_mirrorDomain","nameLocation":"487:13:124","nodeType":"VariableDeclaration","scope":41360,"src":"480:20:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":41334,"name":"uint32","nodeType":"ElementaryTypeName","src":"480:6:124","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":41337,"mutability":"mutable","name":"_amb","nameLocation":"514:4:124","nodeType":"VariableDeclaration","scope":41360,"src":"506:12:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41336,"name":"address","nodeType":"ElementaryTypeName","src":"506:7:124","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41339,"mutability":"mutable","name":"_rootManager","nameLocation":"532:12:124","nodeType":"VariableDeclaration","scope":41360,"src":"524:20:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41338,"name":"address","nodeType":"ElementaryTypeName","src":"524:7:124","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41341,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"558:16:124","nodeType":"VariableDeclaration","scope":41360,"src":"550:24:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41340,"name":"address","nodeType":"ElementaryTypeName","src":"550:7:124","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41343,"mutability":"mutable","name":"_gasCap","nameLocation":"588:7:124","nodeType":"VariableDeclaration","scope":41360,"src":"580:15:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41342,"name":"uint256","nodeType":"ElementaryTypeName","src":"580:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41345,"mutability":"mutable","name":"_mirrorChainId","nameLocation":"609:14:124","nodeType":"VariableDeclaration","scope":41360,"src":"601:22:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41344,"name":"uint256","nodeType":"ElementaryTypeName","src":"601:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"454:173:124"},"returnParameters":{"id":41358,"nodeType":"ParameterList","parameters":[],"src":"739:0:124"},"scope":41478,"src":"443:298:124","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":41375,"nodeType":"Block","src":"889:63:124","statements":[{"expression":{"arguments":[{"id":41371,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41362,"src":"928:5:124","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":41372,"name":"_signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41364,"src":"935:11:124","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":41368,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"905:3:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41367,"name":"GnosisAmb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47999,"src":"895:9:124","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GnosisAmb_$47999_$","typeString":"type(contract GnosisAmb)"}},"id":41369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"895:14:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_GnosisAmb_$47999","typeString":"contract GnosisAmb"}},"id":41370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"910:17:124","memberName":"executeSignatures","nodeType":"MemberAccess","referencedDeclaration":47991,"src":"895:32:124","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory,bytes memory) external"}},"id":41373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"895:52:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41374,"nodeType":"ExpressionStatement","src":"895:52:124"}]},"functionSelector":"3f7658fd","id":41376,"implemented":true,"kind":"function","modifiers":[],"name":"executeSignatures","nameLocation":"816:17:124","nodeType":"FunctionDefinition","parameters":{"id":41365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41362,"mutability":"mutable","name":"_data","nameLocation":"847:5:124","nodeType":"VariableDeclaration","scope":41376,"src":"834:18:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41361,"name":"bytes","nodeType":"ElementaryTypeName","src":"834:5:124","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":41364,"mutability":"mutable","name":"_signatures","nameLocation":"867:11:124","nodeType":"VariableDeclaration","scope":41376,"src":"854:24:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41363,"name":"bytes","nodeType":"ElementaryTypeName","src":"854:5:124","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"833:46:124"},"returnParameters":{"id":41366,"nodeType":"ParameterList","parameters":[],"src":"889:0:124"},"scope":41478,"src":"807:145:124","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39228],"body":{"id":41395,"nodeType":"Block","src":"1146:84:124","statements":[{"expression":{"arguments":[{"id":41386,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"1173:3:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41387,"name":"_expected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41379,"src":"1178:9:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":41389,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"1199:3:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41388,"name":"GnosisAmb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47999,"src":"1189:9:124","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GnosisAmb_$47999_$","typeString":"type(contract GnosisAmb)"}},"id":41390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1189:14:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_GnosisAmb_$47999","typeString":"contract GnosisAmb"}},"id":41391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1204:18:124","memberName":"destinationChainId","nodeType":"MemberAccess","referencedDeclaration":47984,"src":"1189:33:124","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":41392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1189:35:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":41385,"name":"_verifySender","nodeType":"Identifier","overloadedDeclarations":[41396,41285],"referencedDeclaration":41285,"src":"1159:13:124","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) view returns (bool)"}},"id":41393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1159:66:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":41384,"id":41394,"nodeType":"Return","src":"1152:73:124"}]},"documentation":{"id":41377,"nodeType":"StructuredDocumentation","src":"999:64:124","text":" @dev Asserts the sender of a cross domain message"},"id":41396,"implemented":true,"kind":"function","modifiers":[],"name":"_verifySender","nameLocation":"1075:13:124","nodeType":"FunctionDefinition","overrides":{"id":41381,"nodeType":"OverrideSpecifier","overrides":[],"src":"1122:8:124"},"parameters":{"id":41380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41379,"mutability":"mutable","name":"_expected","nameLocation":"1097:9:124","nodeType":"VariableDeclaration","scope":41396,"src":"1089:17:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41378,"name":"address","nodeType":"ElementaryTypeName","src":"1089:7:124","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1088:19:124"},"returnParameters":{"id":41384,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41383,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41396,"src":"1140:4:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41382,"name":"bool","nodeType":"ElementaryTypeName","src":"1140:4:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1139:6:124"},"scope":41478,"src":"1066:164:124","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[39210],"body":{"id":41430,"nodeType":"Block","src":"1399:378:124","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41406,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41399,"src":"1468:5:124","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1474:6:124","memberName":"length","nodeType":"MemberAccess","src":"1468:12:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":41408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1484:2:124","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"1468:18:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c656e677468","id":41410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1488:9:124","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""},"value":"!length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""}],"id":41405,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1460:7:124","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1460:38:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41412,"nodeType":"ExpressionStatement","src":"1460:38:124"},{"expression":{"arguments":[{"id":41417,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"1639:15:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":41420,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"1685:9:124","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Connector_$39244_$","typeString":"type(contract Connector)"}},"id":41421,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1695:14:124","memberName":"processMessage","nodeType":"MemberAccess","referencedDeclaration":39189,"src":"1685:24:124","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function Connector.processMessage(bytes memory)"}},"id":41422,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1710:8:124","memberName":"selector","nodeType":"MemberAccess","src":"1685:33:124","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":41423,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41399,"src":"1720:5:124","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":41418,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1662:3:124","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":41419,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1666:18:124","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"1662:22:124","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":41424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1662:64:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":41426,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41401,"src":"1753:12:124","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41425,"name":"_getGasFromEncoded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41314,"src":"1734:18:124","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (bytes memory) view returns (uint256)"}},"id":41427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1734:32:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":41414,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"1606:3:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41413,"name":"GnosisAmb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47999,"src":"1596:9:124","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GnosisAmb_$47999_$","typeString":"type(contract GnosisAmb)"}},"id":41415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1596:14:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_GnosisAmb_$47999","typeString":"contract GnosisAmb"}},"id":41416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1611:20:124","memberName":"requireToPassMessage","nodeType":"MemberAccess","referencedDeclaration":47954,"src":"1596:35:124","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (address,bytes memory,uint256) external returns (bytes32)"}},"id":41428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1596:176:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":41429,"nodeType":"ExpressionStatement","src":"1596:176:124"}]},"documentation":{"id":41397,"nodeType":"StructuredDocumentation","src":"1234:75:124","text":" @dev Messaging uses this function to send data to l2 via amb"},"id":41431,"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessage","nameLocation":"1321:12:124","nodeType":"FunctionDefinition","overrides":{"id":41403,"nodeType":"OverrideSpecifier","overrides":[],"src":"1390:8:124"},"parameters":{"id":41402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41399,"mutability":"mutable","name":"_data","nameLocation":"1347:5:124","nodeType":"VariableDeclaration","scope":41431,"src":"1334:18:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41398,"name":"bytes","nodeType":"ElementaryTypeName","src":"1334:5:124","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":41401,"mutability":"mutable","name":"_encodedData","nameLocation":"1367:12:124","nodeType":"VariableDeclaration","scope":41431,"src":"1354:25:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41400,"name":"bytes","nodeType":"ElementaryTypeName","src":"1354:5:124","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1333:47:124"},"returnParameters":{"id":41404,"nodeType":"ParameterList","parameters":[],"src":"1399:0:124"},"scope":41478,"src":"1312:465:124","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[39220],"body":{"id":41476,"nodeType":"Block","src":"1933:444:124","statements":[{"expression":{"arguments":[{"arguments":[{"id":41440,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"2009:15:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41439,"name":"_verifySender","nodeType":"Identifier","overloadedDeclarations":[41396,41285],"referencedDeclaration":41396,"src":"1995:13:124","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":41441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1995:30:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c32436f6e6e6563746f72","id":41442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2027:14:124","typeDescriptions":{"typeIdentifier":"t_stringliteral_72c4e0ea3426978b633b2efe37087a856f506ae7eacb1b1e7c169974142d9a69","typeString":"literal_string \"!l2Connector\""},"value":"!l2Connector"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_72c4e0ea3426978b633b2efe37087a856f506ae7eacb1b1e7c169974142d9a69","typeString":"literal_string \"!l2Connector\""}],"id":41438,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1987:7:124","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1987:55:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41444,"nodeType":"ExpressionStatement","src":"1987:55:124"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":41447,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"2108:3:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41446,"name":"GnosisAmb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47999,"src":"2098:9:124","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GnosisAmb_$47999_$","typeString":"type(contract GnosisAmb)"}},"id":41448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2098:14:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_GnosisAmb_$47999","typeString":"contract GnosisAmb"}},"id":41449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2113:13:124","memberName":"sourceChainId","nodeType":"MemberAccess","referencedDeclaration":47979,"src":"2098:28:124","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":41450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2098:30:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":41451,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2132:5:124","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":41452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2138:7:124","memberName":"chainid","nodeType":"MemberAccess","src":"2132:13:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2098:47:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21736f75726365436861696e","id":41454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2147:14:124","typeDescriptions":{"typeIdentifier":"t_stringliteral_0d5605680c5f886aed2495c7e7998d97b3239c9572097b625996bd4acc3f63dd","typeString":"literal_string \"!sourceChain\""},"value":"!sourceChain"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0d5605680c5f886aed2495c7e7998d97b3239c9572097b625996bd4acc3f63dd","typeString":"literal_string \"!sourceChain\""}],"id":41445,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2090:7:124","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2090:72:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41456,"nodeType":"ExpressionStatement","src":"2090:72:124"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41458,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41434,"src":"2226:5:124","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2232:6:124","memberName":"length","nodeType":"MemberAccess","src":"2226:12:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":41460,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2242:2:124","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"2226:18:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c656e677468","id":41462,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2246:9:124","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""},"value":"!length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""}],"id":41457,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2218:7:124","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2218:38:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41464,"nodeType":"ExpressionStatement","src":"2218:38:124"},{"expression":{"arguments":[{"id":41469,"name":"MIRROR_DOMAIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39048,"src":"2342:13:124","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"arguments":[{"id":41472,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41434,"src":"2365:5:124","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41471,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2357:7:124","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":41470,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2357:7:124","typeDescriptions":{}}},"id":41473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2357:14:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"arguments":[{"id":41466,"name":"ROOT_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39045,"src":"2318:12:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41465,"name":"IRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47888,"src":"2305:12:124","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRootManager_$47888_$","typeString":"type(contract IRootManager)"}},"id":41467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2305:26:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRootManager_$47888","typeString":"contract IRootManager"}},"id":41468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2332:9:124","memberName":"aggregate","nodeType":"MemberAccess","referencedDeclaration":47887,"src":"2305:36:124","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint32_$_t_bytes32_$returns$__$","typeString":"function (uint32,bytes32) external"}},"id":41474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2305:67:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41475,"nodeType":"ExpressionStatement","src":"2305:67:124"}]},"documentation":{"id":41432,"nodeType":"StructuredDocumentation","src":"1781:86:124","text":" @dev L2 connector calls this function to pass down latest outbound root"},"id":41477,"implemented":true,"kind":"function","modifiers":[],"name":"_processMessage","nameLocation":"1879:15:124","nodeType":"FunctionDefinition","overrides":{"id":41436,"nodeType":"OverrideSpecifier","overrides":[],"src":"1924:8:124"},"parameters":{"id":41435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41434,"mutability":"mutable","name":"_data","nameLocation":"1908:5:124","nodeType":"VariableDeclaration","scope":41477,"src":"1895:18:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41433,"name":"bytes","nodeType":"ElementaryTypeName","src":"1895:5:124","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1894:20:124"},"returnParameters":{"id":41437,"nodeType":"ParameterList","parameters":[],"src":"1933:0:124"},"scope":41478,"src":"1870:507:124","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":41479,"src":"340:2039:124","usedErrors":[39018,49697,49699,49701,49703,49705,49707,49709]}],"src":"46:2334:124"},"id":124},"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol","exportedSymbols":{"Connector":[39244],"GnosisAmb":[47999],"GnosisBase":[41315],"GnosisSpokeConnector":[41653],"ProposedOwnable":[49928],"SpokeConnector":[40428]},"id":41654,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":41480,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:125"},{"absolutePath":"contracts/messaging/interfaces/ambs/GnosisAmb.sol","file":"../../interfaces/ambs/GnosisAmb.sol","id":41482,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41654,"sourceUnit":48000,"src":"71:62:125","symbolAliases":[{"foreign":{"id":41481,"name":"GnosisAmb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47999,"src":"79:9:125","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/SpokeConnector.sol","file":"../SpokeConnector.sol","id":41485,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41654,"sourceUnit":40429,"src":"135:70:125","symbolAliases":[{"foreign":{"id":41483,"name":"SpokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40428,"src":"143:14:125","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":41484,"name":"ProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49928,"src":"159:15:125","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/Connector.sol","file":"../Connector.sol","id":41487,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41654,"sourceUnit":39245,"src":"206:43:125","symbolAliases":[{"foreign":{"id":41486,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"214:9:125","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/gnosis/GnosisBase.sol","file":"./GnosisBase.sol","id":41489,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41654,"sourceUnit":41316,"src":"251:44:125","symbolAliases":[{"foreign":{"id":41488,"name":"GnosisBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41315,"src":"259:10:125","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":41490,"name":"SpokeConnector","nameLocations":["330:14:125"],"nodeType":"IdentifierPath","referencedDeclaration":40428,"src":"330:14:125"},"id":41491,"nodeType":"InheritanceSpecifier","src":"330:14:125"},{"baseName":{"id":41492,"name":"GnosisBase","nameLocations":["346:10:125"],"nodeType":"IdentifierPath","referencedDeclaration":41315,"src":"346:10:125"},"id":41493,"nodeType":"InheritanceSpecifier","src":"346:10:125"}],"canonicalName":"GnosisSpokeConnector","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":41653,"linearizedBaseContracts":[41653,41315,39367,40428,10734,49688,38914,10680,11506,39292,47805,39244,47778,49928,50003],"name":"GnosisSpokeConnector","nameLocation":"306:20:125","nodeType":"ContractDefinition","nodes":[{"body":{"id":41536,"nodeType":"Block","src":"1008:2:125","statements":[]},"id":41537,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":41520,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41495,"src":"779:7:125","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":41521,"name":"_mirrorDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41497,"src":"794:13:125","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":41522,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41499,"src":"815:4:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41523,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41501,"src":"827:12:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41524,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41503,"src":"847:16:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41525,"name":"_processGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41505,"src":"871:11:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":41526,"name":"_reserveGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41507,"src":"890:11:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":41527,"name":"_delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41509,"src":"909:12:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":41528,"name":"_merkle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41511,"src":"929:7:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41529,"name":"_watcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41513,"src":"944:15:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":41530,"kind":"baseConstructorSpecifier","modifierName":{"id":41519,"name":"SpokeConnector","nameLocations":["757:14:125"],"nodeType":"IdentifierPath","referencedDeclaration":40428,"src":"757:14:125"},"nodeType":"ModifierInvocation","src":"757:208:125"},{"arguments":[{"id":41532,"name":"_gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41515,"src":"981:7:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":41533,"name":"_mirrorChainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41517,"src":"990:14:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":41534,"kind":"baseConstructorSpecifier","modifierName":{"id":41531,"name":"GnosisBase","nameLocations":["970:10:125"],"nodeType":"IdentifierPath","referencedDeclaration":41315,"src":"970:10:125"},"nodeType":"ModifierInvocation","src":"970:35:125"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":41518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41495,"mutability":"mutable","name":"_domain","nameLocation":"428:7:125","nodeType":"VariableDeclaration","scope":41537,"src":"421:14:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":41494,"name":"uint32","nodeType":"ElementaryTypeName","src":"421:6:125","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":41497,"mutability":"mutable","name":"_mirrorDomain","nameLocation":"448:13:125","nodeType":"VariableDeclaration","scope":41537,"src":"441:20:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":41496,"name":"uint32","nodeType":"ElementaryTypeName","src":"441:6:125","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":41499,"mutability":"mutable","name":"_amb","nameLocation":"475:4:125","nodeType":"VariableDeclaration","scope":41537,"src":"467:12:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41498,"name":"address","nodeType":"ElementaryTypeName","src":"467:7:125","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41501,"mutability":"mutable","name":"_rootManager","nameLocation":"493:12:125","nodeType":"VariableDeclaration","scope":41537,"src":"485:20:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41500,"name":"address","nodeType":"ElementaryTypeName","src":"485:7:125","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41503,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"519:16:125","nodeType":"VariableDeclaration","scope":41537,"src":"511:24:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41502,"name":"address","nodeType":"ElementaryTypeName","src":"511:7:125","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41505,"mutability":"mutable","name":"_processGas","nameLocation":"549:11:125","nodeType":"VariableDeclaration","scope":41537,"src":"541:19:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41504,"name":"uint256","nodeType":"ElementaryTypeName","src":"541:7:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41507,"mutability":"mutable","name":"_reserveGas","nameLocation":"574:11:125","nodeType":"VariableDeclaration","scope":41537,"src":"566:19:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41506,"name":"uint256","nodeType":"ElementaryTypeName","src":"566:7:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41509,"mutability":"mutable","name":"_delayBlocks","nameLocation":"599:12:125","nodeType":"VariableDeclaration","scope":41537,"src":"591:20:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41508,"name":"uint256","nodeType":"ElementaryTypeName","src":"591:7:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41511,"mutability":"mutable","name":"_merkle","nameLocation":"625:7:125","nodeType":"VariableDeclaration","scope":41537,"src":"617:15:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41510,"name":"address","nodeType":"ElementaryTypeName","src":"617:7:125","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41513,"mutability":"mutable","name":"_watcherManager","nameLocation":"646:15:125","nodeType":"VariableDeclaration","scope":41537,"src":"638:23:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41512,"name":"address","nodeType":"ElementaryTypeName","src":"638:7:125","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41515,"mutability":"mutable","name":"_gasCap","nameLocation":"675:7:125","nodeType":"VariableDeclaration","scope":41537,"src":"667:15:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41514,"name":"uint256","nodeType":"ElementaryTypeName","src":"667:7:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41517,"mutability":"mutable","name":"_mirrorChainId","nameLocation":"734:14:125","nodeType":"VariableDeclaration","scope":41537,"src":"726:22:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41516,"name":"uint256","nodeType":"ElementaryTypeName","src":"726:7:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"415:337:125"},"returnParameters":{"id":41535,"nodeType":"ParameterList","parameters":[],"src":"1008:0:125"},"scope":41653,"src":"404:606:125","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[39834,49874],"body":{"id":41546,"nodeType":"Block","src":"1176:2:125","statements":[]},"documentation":{"id":41538,"nodeType":"StructuredDocumentation","src":"1014:63:125","text":" @notice Should not be able to renounce ownership"},"functionSelector":"715018a6","id":41547,"implemented":true,"kind":"function","modifiers":[{"id":41544,"kind":"modifierInvocation","modifierName":{"id":41543,"name":"onlyOwner","nameLocations":["1166:9:125"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"1166:9:125"},"nodeType":"ModifierInvocation","src":"1166:9:125"}],"name":"renounceOwnership","nameLocation":"1089:17:125","nodeType":"FunctionDefinition","overrides":{"id":41542,"nodeType":"OverrideSpecifier","overrides":[{"id":41540,"name":"SpokeConnector","nameLocations":["1133:14:125"],"nodeType":"IdentifierPath","referencedDeclaration":40428,"src":"1133:14:125"},{"id":41541,"name":"ProposedOwnable","nameLocations":["1149:15:125"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"1149:15:125"}],"src":"1124:41:125"},"parameters":{"id":41539,"nodeType":"ParameterList","parameters":[],"src":"1106:2:125"},"returnParameters":{"id":41545,"nodeType":"ParameterList","parameters":[],"src":"1176:0:125"},"scope":41653,"src":"1080:98:125","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[39228],"body":{"id":41566,"nodeType":"Block","src":"1372:84:125","statements":[{"expression":{"arguments":[{"id":41557,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"1399:3:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41558,"name":"_expected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41550,"src":"1404:9:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":41560,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"1425:3:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41559,"name":"GnosisAmb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47999,"src":"1415:9:125","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GnosisAmb_$47999_$","typeString":"type(contract GnosisAmb)"}},"id":41561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1415:14:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_GnosisAmb_$47999","typeString":"contract GnosisAmb"}},"id":41562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1430:18:125","memberName":"destinationChainId","nodeType":"MemberAccess","referencedDeclaration":47984,"src":"1415:33:125","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":41563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1415:35:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":41556,"name":"_verifySender","nodeType":"Identifier","overloadedDeclarations":[41567,41285],"referencedDeclaration":41285,"src":"1385:13:125","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) view returns (bool)"}},"id":41564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1385:66:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":41555,"id":41565,"nodeType":"Return","src":"1378:73:125"}]},"documentation":{"id":41548,"nodeType":"StructuredDocumentation","src":"1225:64:125","text":" @dev Asserts the sender of a cross domain message"},"id":41567,"implemented":true,"kind":"function","modifiers":[],"name":"_verifySender","nameLocation":"1301:13:125","nodeType":"FunctionDefinition","overrides":{"id":41552,"nodeType":"OverrideSpecifier","overrides":[],"src":"1348:8:125"},"parameters":{"id":41551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41550,"mutability":"mutable","name":"_expected","nameLocation":"1323:9:125","nodeType":"VariableDeclaration","scope":41567,"src":"1315:17:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41549,"name":"address","nodeType":"ElementaryTypeName","src":"1315:7:125","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1314:19:125"},"returnParameters":{"id":41555,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41554,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41567,"src":"1366:4:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41553,"name":"bool","nodeType":"ElementaryTypeName","src":"1366:4:125","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1365:6:125"},"scope":41653,"src":"1292:164:125","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[39210],"body":{"id":41609,"nodeType":"Block","src":"1754:470:125","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41577,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41570,"src":"1822:5:125","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1828:6:125","memberName":"length","nodeType":"MemberAccess","src":"1822:12:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":41579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1838:2:125","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"1822:18:125","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c656e677468","id":41581,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1842:9:125","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""},"value":"!length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""}],"id":41576,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1814:7:125","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1814:38:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41583,"nodeType":"ExpressionStatement","src":"1814:38:125"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41585,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41572,"src":"1922:12:125","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1935:6:125","memberName":"length","nodeType":"MemberAccess","src":"1922:19:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":41587,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1945:2:125","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"1922:25:125","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2164617461206c656e677468","id":41589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1949:14:125","typeDescriptions":{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""},"value":"!data length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""}],"id":41584,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1914:7:125","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1914:50:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41591,"nodeType":"ExpressionStatement","src":"1914:50:125"},{"expression":{"arguments":[{"id":41596,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"2086:15:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":41599,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"2132:9:125","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Connector_$39244_$","typeString":"type(contract Connector)"}},"id":41600,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2142:14:125","memberName":"processMessage","nodeType":"MemberAccess","referencedDeclaration":39189,"src":"2132:24:125","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function Connector.processMessage(bytes memory)"}},"id":41601,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2157:8:125","memberName":"selector","nodeType":"MemberAccess","src":"2132:33:125","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":41602,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41570,"src":"2167:5:125","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":41597,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2109:3:125","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":41598,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2113:18:125","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2109:22:125","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":41603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2109:64:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":41605,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41572,"src":"2200:12:125","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41604,"name":"_getGasFromEncoded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41314,"src":"2181:18:125","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (bytes memory) view returns (uint256)"}},"id":41606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2181:32:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":41593,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"2053:3:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41592,"name":"GnosisAmb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47999,"src":"2043:9:125","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GnosisAmb_$47999_$","typeString":"type(contract GnosisAmb)"}},"id":41594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2043:14:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_GnosisAmb_$47999","typeString":"contract GnosisAmb"}},"id":41595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2058:20:125","memberName":"requireToPassMessage","nodeType":"MemberAccess","referencedDeclaration":47954,"src":"2043:35:125","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (address,bytes memory,uint256) external returns (bytes32)"}},"id":41607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2043:176:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":41608,"nodeType":"ExpressionStatement","src":"2043:176:125"}]},"documentation":{"id":41568,"nodeType":"StructuredDocumentation","src":"1460:204:125","text":" @dev Messaging uses this function to send data to mainnet via amb\n @param _encodedData Should be encoding of gas to be provided in execution of the method call on\n the mirror domain"},"id":41610,"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessage","nameLocation":"1676:12:125","nodeType":"FunctionDefinition","overrides":{"id":41574,"nodeType":"OverrideSpecifier","overrides":[],"src":"1745:8:125"},"parameters":{"id":41573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41570,"mutability":"mutable","name":"_data","nameLocation":"1702:5:125","nodeType":"VariableDeclaration","scope":41610,"src":"1689:18:125","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41569,"name":"bytes","nodeType":"ElementaryTypeName","src":"1689:5:125","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":41572,"mutability":"mutable","name":"_encodedData","nameLocation":"1722:12:125","nodeType":"VariableDeclaration","scope":41610,"src":"1709:25:125","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41571,"name":"bytes","nodeType":"ElementaryTypeName","src":"1709:5:125","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1688:47:125"},"returnParameters":{"id":41575,"nodeType":"ParameterList","parameters":[],"src":"1754:0:125"},"scope":41653,"src":"1667:557:125","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[39220],"body":{"id":41651,"nodeType":"Block","src":"2397:422:125","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41618,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41613,"src":"2462:5:125","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2468:6:125","memberName":"length","nodeType":"MemberAccess","src":"2462:12:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":41620,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2478:2:125","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"2462:18:125","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c656e677468","id":41622,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2482:9:125","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""},"value":"!length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""}],"id":41617,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2454:7:125","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2454:38:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41624,"nodeType":"ExpressionStatement","src":"2454:38:125"},{"expression":{"arguments":[{"arguments":[{"id":41627,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"2568:15:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41626,"name":"_verifySender","nodeType":"Identifier","overloadedDeclarations":[41567,41285],"referencedDeclaration":41567,"src":"2554:13:125","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":41628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2554:30:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216d6972726f72436f6e6e6563746f72","id":41629,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2586:18:125","typeDescriptions":{"typeIdentifier":"t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d","typeString":"literal_string \"!mirrorConnector\""},"value":"!mirrorConnector"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d","typeString":"literal_string \"!mirrorConnector\""}],"id":41625,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2546:7:125","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2546:59:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41631,"nodeType":"ExpressionStatement","src":"2546:59:125"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":41634,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"2671:3:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41633,"name":"GnosisAmb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47999,"src":"2661:9:125","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GnosisAmb_$47999_$","typeString":"type(contract GnosisAmb)"}},"id":41635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2661:14:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_GnosisAmb_$47999","typeString":"contract GnosisAmb"}},"id":41636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2676:13:125","memberName":"sourceChainId","nodeType":"MemberAccess","referencedDeclaration":47979,"src":"2661:28:125","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":41637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2661:30:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":41638,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2695:5:125","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":41639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2701:7:125","memberName":"chainid","nodeType":"MemberAccess","src":"2695:13:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2661:47:125","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21736f75726365436861696e","id":41641,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2710:14:125","typeDescriptions":{"typeIdentifier":"t_stringliteral_0d5605680c5f886aed2495c7e7998d97b3239c9572097b625996bd4acc3f63dd","typeString":"literal_string \"!sourceChain\""},"value":"!sourceChain"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0d5605680c5f886aed2495c7e7998d97b3239c9572097b625996bd4acc3f63dd","typeString":"literal_string \"!sourceChain\""}],"id":41632,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2653:7:125","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2653:72:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41643,"nodeType":"ExpressionStatement","src":"2653:72:125"},{"expression":{"arguments":[{"arguments":[{"id":41647,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41613,"src":"2807:5:125","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41646,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2799:7:125","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":41645,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2799:7:125","typeDescriptions":{}}},"id":41648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2799:14:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":41644,"name":"receiveAggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40160,"src":"2778:20:125","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":41649,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2778:36:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41650,"nodeType":"ExpressionStatement","src":"2778:36:125"}]},"documentation":{"id":41611,"nodeType":"StructuredDocumentation","src":"2228:103:125","text":" @dev AMB calls this function to store aggregate root that is sent up by the root manager"},"id":41652,"implemented":true,"kind":"function","modifiers":[],"name":"_processMessage","nameLocation":"2343:15:125","nodeType":"FunctionDefinition","overrides":{"id":41615,"nodeType":"OverrideSpecifier","overrides":[],"src":"2388:8:125"},"parameters":{"id":41614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41613,"mutability":"mutable","name":"_data","nameLocation":"2372:5:125","nodeType":"VariableDeclaration","scope":41652,"src":"2359:18:125","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41612,"name":"bytes","nodeType":"ElementaryTypeName","src":"2359:5:125","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2358:20:125"},"returnParameters":{"id":41616,"nodeType":"ParameterList","parameters":[],"src":"2397:0:125"},"scope":41653,"src":"2334:485:125","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":41654,"src":"297:2524:125","usedErrors":[39018,49630,49697,49699,49701,49703,49705,49707,49709,50225,50227,50229,50231,50233]}],"src":"46:2776:125"},"id":125},"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol","exportedSymbols":{"IHubConnector":[47819],"IRootManager":[47888],"MainnetSpokeConnector":[41813],"SpokeConnector":[40428]},"id":41814,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":41655,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:126"},{"absolutePath":"contracts/messaging/interfaces/IRootManager.sol","file":"../../interfaces/IRootManager.sol","id":41657,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41814,"sourceUnit":47889,"src":"71:63:126","symbolAliases":[{"foreign":{"id":41656,"name":"IRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47888,"src":"79:12:126","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/IHubConnector.sol","file":"../../interfaces/IHubConnector.sol","id":41659,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41814,"sourceUnit":47820,"src":"135:65:126","symbolAliases":[{"foreign":{"id":41658,"name":"IHubConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47819,"src":"143:13:126","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/SpokeConnector.sol","file":"../SpokeConnector.sol","id":41661,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41814,"sourceUnit":40429,"src":"202:53:126","symbolAliases":[{"foreign":{"id":41660,"name":"SpokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40428,"src":"210:14:126","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":41662,"name":"SpokeConnector","nameLocations":["291:14:126"],"nodeType":"IdentifierPath","referencedDeclaration":40428,"src":"291:14:126"},"id":41663,"nodeType":"InheritanceSpecifier","src":"291:14:126"},{"baseName":{"id":41664,"name":"IHubConnector","nameLocations":["307:13:126"],"nodeType":"IdentifierPath","referencedDeclaration":47819,"src":"307:13:126"},"id":41665,"nodeType":"InheritanceSpecifier","src":"307:13:126"}],"canonicalName":"MainnetSpokeConnector","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":41813,"linearizedBaseContracts":[41813,47819,40428,10734,49688,38914,10680,11506,39292,47805,39244,47778,49928,50003],"name":"MainnetSpokeConnector","nameLocation":"266:21:126","nodeType":"ContractDefinition","nodes":[{"body":{"id":41700,"nodeType":"Block","src":"845:2:126","statements":[]},"id":41701,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":41688,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41667,"src":"656:7:126","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":41689,"name":"_mirrorDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41669,"src":"671:13:126","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":41690,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41671,"src":"692:4:126","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41691,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41673,"src":"704:12:126","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41692,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41675,"src":"724:16:126","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41693,"name":"_processGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41677,"src":"748:11:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":41694,"name":"_reserveGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41679,"src":"767:11:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":41695,"name":"_delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41681,"src":"786:12:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":41696,"name":"_merkle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41683,"src":"806:7:126","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41697,"name":"_watcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41685,"src":"821:15:126","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":41698,"kind":"baseConstructorSpecifier","modifierName":{"id":41687,"name":"SpokeConnector","nameLocations":["634:14:126"],"nodeType":"IdentifierPath","referencedDeclaration":40428,"src":"634:14:126"},"nodeType":"ModifierInvocation","src":"634:208:126"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":41686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41667,"mutability":"mutable","name":"_domain","nameLocation":"392:7:126","nodeType":"VariableDeclaration","scope":41701,"src":"385:14:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":41666,"name":"uint32","nodeType":"ElementaryTypeName","src":"385:6:126","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":41669,"mutability":"mutable","name":"_mirrorDomain","nameLocation":"412:13:126","nodeType":"VariableDeclaration","scope":41701,"src":"405:20:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":41668,"name":"uint32","nodeType":"ElementaryTypeName","src":"405:6:126","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":41671,"mutability":"mutable","name":"_amb","nameLocation":"439:4:126","nodeType":"VariableDeclaration","scope":41701,"src":"431:12:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41670,"name":"address","nodeType":"ElementaryTypeName","src":"431:7:126","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41673,"mutability":"mutable","name":"_rootManager","nameLocation":"457:12:126","nodeType":"VariableDeclaration","scope":41701,"src":"449:20:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41672,"name":"address","nodeType":"ElementaryTypeName","src":"449:7:126","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41675,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"483:16:126","nodeType":"VariableDeclaration","scope":41701,"src":"475:24:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41674,"name":"address","nodeType":"ElementaryTypeName","src":"475:7:126","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41677,"mutability":"mutable","name":"_processGas","nameLocation":"513:11:126","nodeType":"VariableDeclaration","scope":41701,"src":"505:19:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41676,"name":"uint256","nodeType":"ElementaryTypeName","src":"505:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41679,"mutability":"mutable","name":"_reserveGas","nameLocation":"538:11:126","nodeType":"VariableDeclaration","scope":41701,"src":"530:19:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41678,"name":"uint256","nodeType":"ElementaryTypeName","src":"530:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41681,"mutability":"mutable","name":"_delayBlocks","nameLocation":"563:12:126","nodeType":"VariableDeclaration","scope":41701,"src":"555:20:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41680,"name":"uint256","nodeType":"ElementaryTypeName","src":"555:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41683,"mutability":"mutable","name":"_merkle","nameLocation":"589:7:126","nodeType":"VariableDeclaration","scope":41701,"src":"581:15:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41682,"name":"address","nodeType":"ElementaryTypeName","src":"581:7:126","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41685,"mutability":"mutable","name":"_watcherManager","nameLocation":"610:15:126","nodeType":"VariableDeclaration","scope":41701,"src":"602:23:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41684,"name":"address","nodeType":"ElementaryTypeName","src":"602:7:126","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"379:250:126"},"returnParameters":{"id":41699,"nodeType":"ParameterList","parameters":[],"src":"845:0:126"},"scope":41813,"src":"368:479:126","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[47818],"body":{"id":41737,"nodeType":"Block","src":"1221:195:126","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41712,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41706,"src":"1282:12:126","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1295:6:126","memberName":"length","nodeType":"MemberAccess","src":"1282:19:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":41714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1305:1:126","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1282:24:126","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2164617461206c656e677468","id":41716,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1308:14:126","typeDescriptions":{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""},"value":"!data length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""}],"id":41711,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1274:7:126","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41717,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1274:49:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41718,"nodeType":"ExpressionStatement","src":"1274:49:126"},{"expression":{"arguments":[{"id":41720,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41704,"src":"1342:5:126","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"hexValue":"","id":41723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1355:2:126","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":41722,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1349:5:126","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":41721,"name":"bytes","nodeType":"ElementaryTypeName","src":"1349:5:126","typeDescriptions":{}}},"id":41724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1349:9:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41719,"name":"_sendMessage","nodeType":"Identifier","overloadedDeclarations":[41804],"referencedDeclaration":41804,"src":"1329:12:126","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory,bytes memory)"}},"id":41725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1329:30:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41726,"nodeType":"ExpressionStatement","src":"1329:30:126"},{"eventCall":{"arguments":[{"id":41728,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41704,"src":"1382:5:126","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"hexValue":"","id":41731,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1395:2:126","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":41730,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1389:5:126","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":41729,"name":"bytes","nodeType":"ElementaryTypeName","src":"1389:5:126","typeDescriptions":{}}},"id":41732,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1389:9:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"id":41733,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1400:3:126","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":41734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1404:6:126","memberName":"sender","nodeType":"MemberAccess","src":"1400:10:126","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":41727,"name":"MessageSent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47758,"src":"1370:11:126","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_address_$returns$__$","typeString":"function (bytes memory,bytes memory,address)"}},"id":41735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1370:41:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41736,"nodeType":"EmitStatement","src":"1365:46:126"}]},"documentation":{"id":41702,"nodeType":"StructuredDocumentation","src":"893:224:126","text":" @notice Sends a message over the amb\n @dev This is called by the root manager *only* on mainnet to propagate the aggregate root\n @dev Get 'Base constructor arguments given twice' when trying to inherit"},"functionSelector":"48e6fa23","id":41738,"implemented":true,"kind":"function","modifiers":[{"id":41709,"kind":"modifierInvocation","modifierName":{"id":41708,"name":"onlyRootManager","nameLocations":["1205:15:126"],"nodeType":"IdentifierPath","referencedDeclaration":39077,"src":"1205:15:126"},"nodeType":"ModifierInvocation","src":"1205:15:126"}],"name":"sendMessage","nameLocation":"1129:11:126","nodeType":"FunctionDefinition","parameters":{"id":41707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41704,"mutability":"mutable","name":"_data","nameLocation":"1154:5:126","nodeType":"VariableDeclaration","scope":41738,"src":"1141:18:126","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41703,"name":"bytes","nodeType":"ElementaryTypeName","src":"1141:5:126","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":41706,"mutability":"mutable","name":"_encodedData","nameLocation":"1174:12:126","nodeType":"VariableDeclaration","scope":41738,"src":"1161:25:126","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41705,"name":"bytes","nodeType":"ElementaryTypeName","src":"1161:5:126","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1140:47:126"},"returnParameters":{"id":41710,"nodeType":"ParameterList","parameters":[],"src":"1221:0:126"},"scope":41813,"src":"1120:296:126","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[39228],"body":{"id":41752,"nodeType":"Block","src":"1649:41:126","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":41750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41747,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1662:3:126","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":41748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1666:6:126","memberName":"sender","nodeType":"MemberAccess","src":"1662:10:126","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":41749,"name":"_expected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41741,"src":"1676:9:126","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1662:23:126","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":41746,"id":41751,"nodeType":"Return","src":"1655:30:126"}]},"documentation":{"id":41739,"nodeType":"StructuredDocumentation","src":"1463:103:126","text":" @dev Asserts the sender of a cross domain message. On mainnet all senders should be this"},"id":41753,"implemented":true,"kind":"function","modifiers":[],"name":"_verifySender","nameLocation":"1578:13:126","nodeType":"FunctionDefinition","overrides":{"id":41743,"nodeType":"OverrideSpecifier","overrides":[],"src":"1625:8:126"},"parameters":{"id":41742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41741,"mutability":"mutable","name":"_expected","nameLocation":"1600:9:126","nodeType":"VariableDeclaration","scope":41753,"src":"1592:17:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41740,"name":"address","nodeType":"ElementaryTypeName","src":"1592:7:126","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1591:19:126"},"returnParameters":{"id":41746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41745,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41753,"src":"1643:4:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41744,"name":"bool","nodeType":"ElementaryTypeName","src":"1643:4:126","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1642:6:126"},"scope":41813,"src":"1569:121:126","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[39210],"body":{"id":41803,"nodeType":"Block","src":"2007:519:126","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41763,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41758,"src":"2068:12:126","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2081:6:126","memberName":"length","nodeType":"MemberAccess","src":"2068:19:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":41765,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2091:1:126","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2068:24:126","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2164617461206c656e677468","id":41767,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2094:14:126","typeDescriptions":{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""},"value":"!data length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""}],"id":41762,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2060:7:126","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2060:49:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41769,"nodeType":"ExpressionStatement","src":"2060:49:126"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41771,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41756,"src":"2214:5:126","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2220:6:126","memberName":"length","nodeType":"MemberAccess","src":"2214:12:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":41773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2230:2:126","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"2214:18:126","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c656e677468","id":41775,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2234:9:126","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""},"value":"!length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""}],"id":41770,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2206:7:126","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2206:38:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41777,"nodeType":"ExpressionStatement","src":"2206:38:126"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":41781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41778,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2254:3:126","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":41779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2258:6:126","memberName":"sender","nodeType":"MemberAccess","src":"2254:10:126","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":41780,"name":"ROOT_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39045,"src":"2268:12:126","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2254:26:126","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":41791,"nodeType":"IfStatement","src":"2250:132:126","trueBody":{"id":41790,"nodeType":"Block","src":"2282:100:126","statements":[{"expression":{"arguments":[{"arguments":[{"id":41785,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41756,"src":"2354:5:126","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41784,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2346:7:126","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":41783,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2346:7:126","typeDescriptions":{}}},"id":41786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2346:14:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":41782,"name":"receiveAggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40160,"src":"2325:20:126","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":41787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2325:36:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41788,"nodeType":"ExpressionStatement","src":"2325:36:126"},{"functionReturnParameters":41761,"id":41789,"nodeType":"Return","src":"2369:7:126"}]}},{"expression":{"arguments":[{"id":41796,"name":"DOMAIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39039,"src":"2498:6:126","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"arguments":[{"id":41799,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41756,"src":"2514:5:126","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41798,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2506:7:126","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":41797,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2506:7:126","typeDescriptions":{}}},"id":41800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2506:14:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"arguments":[{"id":41793,"name":"ROOT_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39045,"src":"2474:12:126","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41792,"name":"IRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47888,"src":"2461:12:126","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRootManager_$47888_$","typeString":"type(contract IRootManager)"}},"id":41794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2461:26:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRootManager_$47888","typeString":"contract IRootManager"}},"id":41795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2488:9:126","memberName":"aggregate","nodeType":"MemberAccess","referencedDeclaration":47887,"src":"2461:36:126","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint32_$_t_bytes32_$returns$__$","typeString":"function (uint32,bytes32) external"}},"id":41801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2461:60:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41802,"nodeType":"ExpressionStatement","src":"2461:60:126"}]},"documentation":{"id":41754,"nodeType":"StructuredDocumentation","src":"1694:223:126","text":" @dev There are two times messages get \"sent\" from this connector:\n 1. `RootManager` calls `sendMessage` during `propagate`\n 2. Relayers call `send`, which calls `_sendMessage` to set the outbound root"},"id":41804,"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessage","nameLocation":"1929:12:126","nodeType":"FunctionDefinition","overrides":{"id":41760,"nodeType":"OverrideSpecifier","overrides":[],"src":"1998:8:126"},"parameters":{"id":41759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41756,"mutability":"mutable","name":"_data","nameLocation":"1955:5:126","nodeType":"VariableDeclaration","scope":41804,"src":"1942:18:126","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41755,"name":"bytes","nodeType":"ElementaryTypeName","src":"1942:5:126","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":41758,"mutability":"mutable","name":"_encodedData","nameLocation":"1975:12:126","nodeType":"VariableDeclaration","scope":41804,"src":"1962:25:126","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41757,"name":"bytes","nodeType":"ElementaryTypeName","src":"1962:5:126","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1941:47:126"},"returnParameters":{"id":41761,"nodeType":"ParameterList","parameters":[],"src":"2007:0:126"},"scope":41813,"src":"1920:606:126","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[39220],"body":{"id":41811,"nodeType":"Block","src":"2782:2:126","statements":[]},"documentation":{"id":41805,"nodeType":"StructuredDocumentation","src":"2530:186:126","text":" @dev The `RootManager` calls `.sendMessage` on all connectors, there is nothing on mainnet\n that would be processing \"inbound messages\", so do nothing in this function"},"id":41812,"implemented":true,"kind":"function","modifiers":[],"name":"_processMessage","nameLocation":"2728:15:126","nodeType":"FunctionDefinition","overrides":{"id":41809,"nodeType":"OverrideSpecifier","overrides":[],"src":"2773:8:126"},"parameters":{"id":41808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41807,"mutability":"mutable","name":"_data","nameLocation":"2757:5:126","nodeType":"VariableDeclaration","scope":41812,"src":"2744:18:126","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41806,"name":"bytes","nodeType":"ElementaryTypeName","src":"2744:5:126","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2743:20:126"},"returnParameters":{"id":41810,"nodeType":"ParameterList","parameters":[],"src":"2782:0:126"},"scope":41813,"src":"2719:65:126","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":41814,"src":"257:2529:126","usedErrors":[39018,49630,49697,49699,49701,49703,49705,49707,49709,50225,50227,50229,50231,50233]}],"src":"46:2741:126"},"id":126},"contracts/messaging/connectors/multichain/BaseMultichain.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/multichain/BaseMultichain.sol","exportedSymbols":{"BaseMultichain":[41996],"GasCap":[39367],"Multichain":[48041]},"id":41997,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":41815,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:127"},{"absolutePath":"contracts/messaging/interfaces/ambs/Multichain.sol","file":"../../interfaces/ambs/Multichain.sol","id":41817,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41997,"sourceUnit":48042,"src":"71:64:127","symbolAliases":[{"foreign":{"id":41816,"name":"Multichain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48041,"src":"79:10:127","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/GasCap.sol","file":"../GasCap.sol","id":41819,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41997,"sourceUnit":39368,"src":"137:37:127","symbolAliases":[{"foreign":{"id":41818,"name":"GasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39367,"src":"145:6:127","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":41820,"name":"GasCap","nameLocations":["212:6:127"],"nodeType":"IdentifierPath","referencedDeclaration":39367,"src":"212:6:127"},"id":41821,"nodeType":"InheritanceSpecifier","src":"212:6:127"}],"canonicalName":"BaseMultichain","contractDependencies":[],"contractKind":"contract","fullyImplemented":false,"id":41996,"linearizedBaseContracts":[41996,39367,49928,50003],"name":"BaseMultichain","nameLocation":"194:14:127","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":41823,"mutability":"immutable","name":"EXECUTOR","nameLocation":"298:8:127","nodeType":"VariableDeclaration","scope":41996,"src":"271:35:127","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41822,"name":"address","nodeType":"ElementaryTypeName","src":"271:7:127","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41825,"mutability":"immutable","name":"MIRROR_CHAIN_ID","nameLocation":"410:15:127","nodeType":"VariableDeclaration","scope":41996,"src":"383:42:127","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41824,"name":"uint256","nodeType":"ElementaryTypeName","src":"383:7:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":41866,"nodeType":"Block","src":"604:244:127","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41838,"name":"_mirrorChainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41829,"src":"639:14:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":41839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"657:1:127","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"639:19:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216d6972726f72436861696e4964","id":41841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"660:16:127","typeDescriptions":{"typeIdentifier":"t_stringliteral_620aa21aff383647ce0e5ebd652fee0a2b799ab25acda9de7376f45202465bab","typeString":"literal_string \"!mirrorChainId\""},"value":"!mirrorChainId"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_620aa21aff383647ce0e5ebd652fee0a2b799ab25acda9de7376f45202465bab","typeString":"literal_string \"!mirrorChainId\""}],"id":41837,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"631:7:127","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"631:46:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41843,"nodeType":"ExpressionStatement","src":"631:46:127"},{"expression":{"id":41850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41844,"name":"EXECUTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41823,"src":"717:8:127","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":41846,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41827,"src":"739:4:127","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41845,"name":"Multichain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48041,"src":"728:10:127","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Multichain_$48041_$","typeString":"type(contract Multichain)"}},"id":41847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"728:16:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Multichain_$48041","typeString":"contract Multichain"}},"id":41848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"745:8:127","memberName":"executor","nodeType":"MemberAccess","referencedDeclaration":48029,"src":"728:25:127","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":41849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"728:27:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"717:38:127","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":41851,"nodeType":"ExpressionStatement","src":"717:38:127"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":41858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41853,"name":"EXECUTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41823,"src":"769:8:127","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":41856,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"789:1:127","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":41855,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"781:7:127","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41854,"name":"address","nodeType":"ElementaryTypeName","src":"781:7:127","typeDescriptions":{}}},"id":41857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"781:10:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"769:22:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216578656375746f72","id":41859,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"793:11:127","typeDescriptions":{"typeIdentifier":"t_stringliteral_78201d9d8a76cb57609402a557d055ee4f4bd3859f343728f9681a9fe9675816","typeString":"literal_string \"!executor\""},"value":"!executor"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_78201d9d8a76cb57609402a557d055ee4f4bd3859f343728f9681a9fe9675816","typeString":"literal_string \"!executor\""}],"id":41852,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"761:7:127","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"761:44:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41861,"nodeType":"ExpressionStatement","src":"761:44:127"},{"expression":{"id":41864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41862,"name":"MIRROR_CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41825,"src":"811:15:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":41863,"name":"_mirrorChainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41829,"src":"829:14:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"811:32:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":41865,"nodeType":"ExpressionStatement","src":"811:32:127"}]},"id":41867,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":41834,"name":"_gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41831,"src":"595:7:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":41835,"kind":"baseConstructorSpecifier","modifierName":{"id":41833,"name":"GasCap","nameLocations":["588:6:127"],"nodeType":"IdentifierPath","referencedDeclaration":39367,"src":"588:6:127"},"nodeType":"ModifierInvocation","src":"588:15:127"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":41832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41827,"mutability":"mutable","name":"_amb","nameLocation":"498:4:127","nodeType":"VariableDeclaration","scope":41867,"src":"490:12:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41826,"name":"address","nodeType":"ElementaryTypeName","src":"490:7:127","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41829,"mutability":"mutable","name":"_mirrorChainId","nameLocation":"516:14:127","nodeType":"VariableDeclaration","scope":41867,"src":"508:22:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41828,"name":"uint256","nodeType":"ElementaryTypeName","src":"508:7:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41831,"mutability":"mutable","name":"_gasCap","nameLocation":"544:7:127","nodeType":"VariableDeclaration","scope":41867,"src":"536:15:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41830,"name":"uint256","nodeType":"ElementaryTypeName","src":"536:7:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"484:103:127"},"returnParameters":{"id":41836,"nodeType":"ParameterList","parameters":[],"src":"604:0:127"},"scope":41996,"src":"473:375:127","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":41880,"nodeType":"Block","src":"987:33:127","statements":[{"expression":{"arguments":[{"id":41877,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41869,"src":"1009:5:127","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41876,"name":"_processMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41887,"src":"993:15:127","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory)"}},"id":41878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"993:22:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41879,"nodeType":"ExpressionStatement","src":"993:22:127"}]},"functionSelector":"9abaf479","id":41881,"implemented":true,"kind":"function","modifiers":[],"name":"anyExecute","nameLocation":"903:10:127","nodeType":"FunctionDefinition","parameters":{"id":41870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41869,"mutability":"mutable","name":"_data","nameLocation":"927:5:127","nodeType":"VariableDeclaration","scope":41881,"src":"914:18:127","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41868,"name":"bytes","nodeType":"ElementaryTypeName","src":"914:5:127","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"913:20:127"},"returnParameters":{"id":41875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41872,"mutability":"mutable","name":"success","nameLocation":"957:7:127","nodeType":"VariableDeclaration","scope":41881,"src":"952:12:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41871,"name":"bool","nodeType":"ElementaryTypeName","src":"952:4:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":41874,"mutability":"mutable","name":"result","nameLocation":"979:6:127","nodeType":"VariableDeclaration","scope":41881,"src":"966:19:127","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41873,"name":"bytes","nodeType":"ElementaryTypeName","src":"966:5:127","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"951:35:127"},"scope":41996,"src":"894:126:127","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":41882,"nodeType":"StructuredDocumentation","src":"1067:147:127","text":" @notice This function is used by the AMBs to handle incoming messages. Should store the latest\n root generated on the l2 domain."},"id":41887,"implemented":false,"kind":"function","modifiers":[],"name":"_processMessage","nameLocation":"1226:15:127","nodeType":"FunctionDefinition","parameters":{"id":41885,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41884,"mutability":"mutable","name":"_data","nameLocation":"1255:5:127","nodeType":"VariableDeclaration","scope":41887,"src":"1242:18:127","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41883,"name":"bytes","nodeType":"ElementaryTypeName","src":"1242:5:127","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1241:20:127"},"returnParameters":{"id":41886,"nodeType":"ParameterList","parameters":[],"src":"1278:0:127"},"scope":41996,"src":"1217:62:127","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":41958,"nodeType":"Block","src":"1500:902:127","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41900,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41894,"src":"1560:5:127","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1566:6:127","memberName":"length","nodeType":"MemberAccess","src":"1560:12:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":41902,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1576:2:127","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"1560:18:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2164617461206c656e677468","id":41904,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1580:14:127","typeDescriptions":{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""},"value":"!data length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""}],"id":41899,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1552:7:127","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1552:43:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41906,"nodeType":"ExpressionStatement","src":"1552:43:127"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41908,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41896,"src":"1649:12:127","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1662:6:127","memberName":"length","nodeType":"MemberAccess","src":"1649:19:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":41910,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1672:1:127","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1649:24:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2164617461206c656e677468","id":41912,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1675:14:127","typeDescriptions":{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""},"value":"!data length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""}],"id":41907,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1641:7:127","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1641:49:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41914,"nodeType":"ExpressionStatement","src":"1641:49:127"},{"assignments":[41916],"declarations":[{"constant":false,"id":41916,"mutability":"mutable","name":"supplied","nameLocation":"1737:8:127","nodeType":"VariableDeclaration","scope":41958,"src":"1729:16:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41915,"name":"uint256","nodeType":"ElementaryTypeName","src":"1729:7:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":41921,"initialValue":{"arguments":[{"expression":{"id":41918,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1756:3:127","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":41919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1760:5:127","memberName":"value","nodeType":"MemberAccess","src":"1756:9:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":41917,"name":"_getGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39366,"src":"1748:7:127","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":41920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1748:18:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1729:37:127"},{"assignments":[41923],"declarations":[{"constant":false,"id":41923,"mutability":"mutable","name":"required","nameLocation":"1889:8:127","nodeType":"VariableDeclaration","scope":41958,"src":"1881:16:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41922,"name":"uint256","nodeType":"ElementaryTypeName","src":"1881:7:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":41932,"initialValue":{"arguments":[{"hexValue":"","id":41928,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1936:2:127","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},{"id":41929,"name":"MIRROR_CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41825,"src":"1956:15:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"3332","id":41930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2000:2:127","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}],"expression":{"arguments":[{"id":41925,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41890,"src":"1911:4:127","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41924,"name":"Multichain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48041,"src":"1900:10:127","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Multichain_$48041_$","typeString":"type(contract Multichain)"}},"id":41926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1900:16:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Multichain_$48041","typeString":"contract Multichain"}},"id":41927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1917:11:127","memberName":"calcSrcFees","nodeType":"MemberAccess","referencedDeclaration":48040,"src":"1900:28:127","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (string memory,uint256,uint256) view external returns (uint256)"}},"id":41931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1900:140:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1881:159:127"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41934,"name":"required","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41923,"src":"2095:8:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41935,"name":"supplied","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41916,"src":"2106:8:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":41936,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2117:1:127","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2106:12:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2095:23:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2166656573","id":41939,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2120:7:127","typeDescriptions":{"typeIdentifier":"t_stringliteral_867777f634bb94108a594889ab4f827c256cf5677bbf34c222dbb2e03cd5a0d3","typeString":"literal_string \"!fees\""},"value":"!fees"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_867777f634bb94108a594889ab4f827c256cf5677bbf34c222dbb2e03cd5a0d3","typeString":"literal_string \"!fees\""}],"id":41933,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2087:7:127","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2087:41:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41941,"nodeType":"ExpressionStatement","src":"2087:41:127"},{"expression":{"arguments":[{"id":41948,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41892,"src":"2184:16:127","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41949,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41894,"src":"2242:5:127","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"hexValue":"30","id":41952,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2292:1:127","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":41951,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2284:7:127","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41950,"name":"address","nodeType":"ElementaryTypeName","src":"2284:7:127","typeDescriptions":{}}},"id":41953,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2284:10:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41954,"name":"MIRROR_CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41825,"src":"2338:15:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"32","id":41955,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2361:1:127","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"expression":{"arguments":[{"id":41943,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41890,"src":"2146:4:127","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41942,"name":"Multichain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48041,"src":"2135:10:127","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Multichain_$48041_$","typeString":"type(contract Multichain)"}},"id":41944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2135:16:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Multichain_$48041","typeString":"contract Multichain"}},"id":41945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2152:7:127","memberName":"anyCall","nodeType":"MemberAccess","referencedDeclaration":48015,"src":"2135:24:127","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,bytes memory,address,uint256,uint256) payable external"}},"id":41947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":41946,"name":"supplied","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41916,"src":"2167:8:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"2135:41:127","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$value","typeString":"function (address,bytes memory,address,uint256,uint256) payable external"}},"id":41956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2135:262:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41957,"nodeType":"ExpressionStatement","src":"2135:262:127"}]},"documentation":{"id":41888,"nodeType":"StructuredDocumentation","src":"1283:76:127","text":" @dev Sends `outboundRoot` to root manager on the mirror chain"},"id":41959,"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessage","nameLocation":"1371:12:127","nodeType":"FunctionDefinition","parameters":{"id":41897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41890,"mutability":"mutable","name":"_amb","nameLocation":"1397:4:127","nodeType":"VariableDeclaration","scope":41959,"src":"1389:12:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41889,"name":"address","nodeType":"ElementaryTypeName","src":"1389:7:127","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41892,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"1415:16:127","nodeType":"VariableDeclaration","scope":41959,"src":"1407:24:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41891,"name":"address","nodeType":"ElementaryTypeName","src":"1407:7:127","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41894,"mutability":"mutable","name":"_data","nameLocation":"1450:5:127","nodeType":"VariableDeclaration","scope":41959,"src":"1437:18:127","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41893,"name":"bytes","nodeType":"ElementaryTypeName","src":"1437:5:127","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":41896,"mutability":"mutable","name":"_encodedData","nameLocation":"1474:12:127","nodeType":"VariableDeclaration","scope":41959,"src":"1461:25:127","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41895,"name":"bytes","nodeType":"ElementaryTypeName","src":"1461:5:127","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1383:107:127"},"returnParameters":{"id":41898,"nodeType":"ParameterList","parameters":[],"src":"1500:0:127"},"scope":41996,"src":"1362:1040:127","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":41994,"nodeType":"Block","src":"2491:196:127","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":41972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41969,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2505:3:127","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":41970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2509:6:127","memberName":"sender","nodeType":"MemberAccess","src":"2505:10:127","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":41971,"name":"EXECUTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41823,"src":"2519:8:127","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2505:22:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216578656375746f72","id":41973,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2529:11:127","typeDescriptions":{"typeIdentifier":"t_stringliteral_78201d9d8a76cb57609402a557d055ee4f4bd3859f343728f9681a9fe9675816","typeString":"literal_string \"!executor\""},"value":"!executor"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_78201d9d8a76cb57609402a557d055ee4f4bd3859f343728f9681a9fe9675816","typeString":"literal_string \"!executor\""}],"id":41968,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2497:7:127","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2497:44:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41975,"nodeType":"ExpressionStatement","src":"2497:44:127"},{"assignments":[41977,41979,null],"declarations":[{"constant":false,"id":41977,"mutability":"mutable","name":"from","nameLocation":"2557:4:127","nodeType":"VariableDeclaration","scope":41994,"src":"2549:12:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41976,"name":"address","nodeType":"ElementaryTypeName","src":"2549:7:127","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41979,"mutability":"mutable","name":"fromChainId","nameLocation":"2571:11:127","nodeType":"VariableDeclaration","scope":41994,"src":"2563:19:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41978,"name":"uint256","nodeType":"ElementaryTypeName","src":"2563:7:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":41985,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":41981,"name":"EXECUTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41823,"src":"2599:8:127","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41980,"name":"Multichain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48041,"src":"2588:10:127","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Multichain_$48041_$","typeString":"type(contract Multichain)"}},"id":41982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2588:20:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Multichain_$48041","typeString":"contract Multichain"}},"id":41983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2609:7:127","memberName":"context","nodeType":"MemberAccess","referencedDeclaration":48024,"src":"2588:28:127","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$_t_uint256_$_t_uint256_$","typeString":"function () view external returns (address,uint256,uint256)"}},"id":41984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2588:30:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$_t_uint256_$","typeString":"tuple(address,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"2548:70:127"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":41992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":41988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41986,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41977,"src":"2631:4:127","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":41987,"name":"_expected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41963,"src":"2639:9:127","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2631:17:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41989,"name":"fromChainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41979,"src":"2652:11:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":41990,"name":"MIRROR_CHAIN_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41825,"src":"2667:15:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2652:30:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2631:51:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":41967,"id":41993,"nodeType":"Return","src":"2624:58:127"}]},"id":41995,"implemented":true,"kind":"function","modifiers":[],"name":"_verifySender","nameLocation":"2415:13:127","nodeType":"FunctionDefinition","parameters":{"id":41964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41961,"mutability":"mutable","name":"_amb","nameLocation":"2437:4:127","nodeType":"VariableDeclaration","scope":41995,"src":"2429:12:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41960,"name":"address","nodeType":"ElementaryTypeName","src":"2429:7:127","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41963,"mutability":"mutable","name":"_expected","nameLocation":"2451:9:127","nodeType":"VariableDeclaration","scope":41995,"src":"2443:17:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41962,"name":"address","nodeType":"ElementaryTypeName","src":"2443:7:127","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2428:33:127"},"returnParameters":{"id":41967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41966,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41995,"src":"2485:4:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41965,"name":"bool","nodeType":"ElementaryTypeName","src":"2485:4:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2484:6:127"},"scope":41996,"src":"2406:281:127","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":41997,"src":"176:2513:127","usedErrors":[49697,49699,49701,49703,49705,49707,49709]}],"src":"46:2644:127"},"id":127},"contracts/messaging/connectors/multichain/MultichainHubConnector.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/multichain/MultichainHubConnector.sol","exportedSymbols":{"BaseMultichain":[41996],"Connector":[39244],"HubConnector":[39420],"IRootManager":[47888],"MultichainHubConnector":[42106]},"id":42107,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":41998,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:128"},{"absolutePath":"contracts/messaging/interfaces/IRootManager.sol","file":"../../interfaces/IRootManager.sol","id":42000,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42107,"sourceUnit":47889,"src":"71:63:128","symbolAliases":[{"foreign":{"id":41999,"name":"IRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47888,"src":"79:12:128","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/HubConnector.sol","file":"../HubConnector.sol","id":42003,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42107,"sourceUnit":39421,"src":"136:60:128","symbolAliases":[{"foreign":{"id":42001,"name":"HubConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39420,"src":"144:12:128","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":42002,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"158:9:128","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/multichain/BaseMultichain.sol","file":"./BaseMultichain.sol","id":42005,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42107,"sourceUnit":41997,"src":"198:52:128","symbolAliases":[{"foreign":{"id":42004,"name":"BaseMultichain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41996,"src":"206:14:128","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":42006,"name":"HubConnector","nameLocations":["287:12:128"],"nodeType":"IdentifierPath","referencedDeclaration":39420,"src":"287:12:128"},"id":42007,"nodeType":"InheritanceSpecifier","src":"287:12:128"},{"baseName":{"id":42008,"name":"BaseMultichain","nameLocations":["301:14:128"],"nodeType":"IdentifierPath","referencedDeclaration":41996,"src":"301:14:128"},"id":42009,"nodeType":"InheritanceSpecifier","src":"301:14:128"}],"canonicalName":"MultichainHubConnector","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":42106,"linearizedBaseContracts":[42106,41996,39367,39420,39244,47778,49928,50003],"name":"MultichainHubConnector","nameLocation":"261:22:128","nodeType":"ContractDefinition","nodes":[{"body":{"id":42038,"nodeType":"Block","src":"679:2:128","statements":[]},"id":42039,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":42026,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42011,"src":"565:7:128","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":42027,"name":"_mirrorDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42013,"src":"574:13:128","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":42028,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42015,"src":"589:4:128","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42029,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42017,"src":"595:12:128","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42030,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42019,"src":"609:16:128","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":42031,"kind":"baseConstructorSpecifier","modifierName":{"id":42025,"name":"HubConnector","nameLocations":["552:12:128"],"nodeType":"IdentifierPath","referencedDeclaration":39420,"src":"552:12:128"},"nodeType":"ModifierInvocation","src":"552:74:128"},{"arguments":[{"id":42033,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42015,"src":"646:4:128","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42034,"name":"_mirrorChainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42021,"src":"652:14:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":42035,"name":"_gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42023,"src":"668:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42036,"kind":"baseConstructorSpecifier","modifierName":{"id":42032,"name":"BaseMultichain","nameLocations":["631:14:128"],"nodeType":"IdentifierPath","referencedDeclaration":41996,"src":"631:14:128"},"nodeType":"ModifierInvocation","src":"631:45:128"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":42024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42011,"mutability":"mutable","name":"_domain","nameLocation":"387:7:128","nodeType":"VariableDeclaration","scope":42039,"src":"380:14:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":42010,"name":"uint32","nodeType":"ElementaryTypeName","src":"380:6:128","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":42013,"mutability":"mutable","name":"_mirrorDomain","nameLocation":"407:13:128","nodeType":"VariableDeclaration","scope":42039,"src":"400:20:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":42012,"name":"uint32","nodeType":"ElementaryTypeName","src":"400:6:128","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":42015,"mutability":"mutable","name":"_amb","nameLocation":"434:4:128","nodeType":"VariableDeclaration","scope":42039,"src":"426:12:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42014,"name":"address","nodeType":"ElementaryTypeName","src":"426:7:128","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42017,"mutability":"mutable","name":"_rootManager","nameLocation":"452:12:128","nodeType":"VariableDeclaration","scope":42039,"src":"444:20:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42016,"name":"address","nodeType":"ElementaryTypeName","src":"444:7:128","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42019,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"478:16:128","nodeType":"VariableDeclaration","scope":42039,"src":"470:24:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42018,"name":"address","nodeType":"ElementaryTypeName","src":"470:7:128","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42021,"mutability":"mutable","name":"_mirrorChainId","nameLocation":"508:14:128","nodeType":"VariableDeclaration","scope":42039,"src":"500:22:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42020,"name":"uint256","nodeType":"ElementaryTypeName","src":"500:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42023,"mutability":"mutable","name":"_gasCap","nameLocation":"536:7:128","nodeType":"VariableDeclaration","scope":42039,"src":"528:15:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42022,"name":"uint256","nodeType":"ElementaryTypeName","src":"528:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"374:173:128"},"returnParameters":{"id":42037,"nodeType":"ParameterList","parameters":[],"src":"679:0:128"},"scope":42106,"src":"363:318:128","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[39220,41887],"body":{"id":42074,"nodeType":"Block","src":"875:323:128","statements":[{"expression":{"arguments":[{"arguments":[{"id":42050,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"949:15:128","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":42049,"name":"_verifySender","nodeType":"Identifier","overloadedDeclarations":[42105,41995],"referencedDeclaration":42105,"src":"935:13:128","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":42051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"935:30:128","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c32436f6e6e6563746f72","id":42052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"967:14:128","typeDescriptions":{"typeIdentifier":"t_stringliteral_72c4e0ea3426978b633b2efe37087a856f506ae7eacb1b1e7c169974142d9a69","typeString":"literal_string \"!l2Connector\""},"value":"!l2Connector"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_72c4e0ea3426978b633b2efe37087a856f506ae7eacb1b1e7c169974142d9a69","typeString":"literal_string \"!l2Connector\""}],"id":42048,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"927:7:128","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"927:55:128","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42054,"nodeType":"ExpressionStatement","src":"927:55:128"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":42056,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42042,"src":"1046:5:128","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":42057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1052:6:128","memberName":"length","nodeType":"MemberAccess","src":"1046:12:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":42058,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1062:2:128","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"1046:18:128","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c656e677468","id":42060,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1066:9:128","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""},"value":"!length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""}],"id":42055,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1038:7:128","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1038:38:128","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42062,"nodeType":"ExpressionStatement","src":"1038:38:128"},{"expression":{"arguments":[{"id":42067,"name":"MIRROR_DOMAIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39048,"src":"1163:13:128","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"arguments":[{"id":42070,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42042,"src":"1186:5:128","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":42069,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1178:7:128","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":42068,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1178:7:128","typeDescriptions":{}}},"id":42071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1178:14:128","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"arguments":[{"id":42064,"name":"ROOT_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39045,"src":"1139:12:128","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":42063,"name":"IRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47888,"src":"1126:12:128","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRootManager_$47888_$","typeString":"type(contract IRootManager)"}},"id":42065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1126:26:128","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRootManager_$47888","typeString":"contract IRootManager"}},"id":42066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1153:9:128","memberName":"aggregate","nodeType":"MemberAccess","referencedDeclaration":47887,"src":"1126:36:128","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint32_$_t_bytes32_$returns$__$","typeString":"function (uint32,bytes32) external"}},"id":42072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1126:67:128","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42073,"nodeType":"ExpressionStatement","src":"1126:67:128"}]},"documentation":{"id":42040,"nodeType":"StructuredDocumentation","src":"728:54:128","text":" @dev Handles an incoming `outboundRoot`"},"id":42075,"implemented":true,"kind":"function","modifiers":[],"name":"_processMessage","nameLocation":"794:15:128","nodeType":"FunctionDefinition","overrides":{"id":42046,"nodeType":"OverrideSpecifier","overrides":[{"id":42044,"name":"Connector","nameLocations":["848:9:128"],"nodeType":"IdentifierPath","referencedDeclaration":39244,"src":"848:9:128"},{"id":42045,"name":"BaseMultichain","nameLocations":["859:14:128"],"nodeType":"IdentifierPath","referencedDeclaration":41996,"src":"859:14:128"}],"src":"839:35:128"},"parameters":{"id":42043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42042,"mutability":"mutable","name":"_data","nameLocation":"823:5:128","nodeType":"VariableDeclaration","scope":42075,"src":"810:18:128","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42041,"name":"bytes","nodeType":"ElementaryTypeName","src":"810:5:128","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"809:20:128"},"returnParameters":{"id":42047,"nodeType":"ParameterList","parameters":[],"src":"875:0:128"},"scope":42106,"src":"785:413:128","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[39210],"body":{"id":42090,"nodeType":"Block","src":"1289:66:128","statements":[{"expression":{"arguments":[{"id":42084,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"1308:3:128","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42085,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"1313:15:128","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42086,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42077,"src":"1330:5:128","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":42087,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42079,"src":"1337:12:128","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":42083,"name":"_sendMessage","nodeType":"Identifier","overloadedDeclarations":[42091,41959],"referencedDeclaration":41959,"src":"1295:12:128","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,bytes memory,bytes memory)"}},"id":42088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1295:55:128","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42089,"nodeType":"ExpressionStatement","src":"1295:55:128"}]},"id":42091,"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessage","nameLocation":"1211:12:128","nodeType":"FunctionDefinition","overrides":{"id":42081,"nodeType":"OverrideSpecifier","overrides":[],"src":"1280:8:128"},"parameters":{"id":42080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42077,"mutability":"mutable","name":"_data","nameLocation":"1237:5:128","nodeType":"VariableDeclaration","scope":42091,"src":"1224:18:128","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42076,"name":"bytes","nodeType":"ElementaryTypeName","src":"1224:5:128","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":42079,"mutability":"mutable","name":"_encodedData","nameLocation":"1257:12:128","nodeType":"VariableDeclaration","scope":42091,"src":"1244:25:128","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42078,"name":"bytes","nodeType":"ElementaryTypeName","src":"1244:5:128","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1223:47:128"},"returnParameters":{"id":42082,"nodeType":"ParameterList","parameters":[],"src":"1289:0:128"},"scope":42106,"src":"1202:153:128","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[39228],"body":{"id":42104,"nodeType":"Block","src":"1439:47:128","statements":[{"expression":{"arguments":[{"id":42100,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"1466:3:128","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42101,"name":"_expected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42093,"src":"1471:9:128","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":42099,"name":"_verifySender","nodeType":"Identifier","overloadedDeclarations":[42105,41995],"referencedDeclaration":41995,"src":"1452:13:128","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) view returns (bool)"}},"id":42102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1452:29:128","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":42098,"id":42103,"nodeType":"Return","src":"1445:36:128"}]},"id":42105,"implemented":true,"kind":"function","modifiers":[],"name":"_verifySender","nameLocation":"1368:13:128","nodeType":"FunctionDefinition","overrides":{"id":42095,"nodeType":"OverrideSpecifier","overrides":[],"src":"1415:8:128"},"parameters":{"id":42094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42093,"mutability":"mutable","name":"_expected","nameLocation":"1390:9:128","nodeType":"VariableDeclaration","scope":42105,"src":"1382:17:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42092,"name":"address","nodeType":"ElementaryTypeName","src":"1382:7:128","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1381:19:128"},"returnParameters":{"id":42098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42097,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42105,"src":"1433:4:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":42096,"name":"bool","nodeType":"ElementaryTypeName","src":"1433:4:128","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1432:6:128"},"scope":42106,"src":"1359:127:128","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":42107,"src":"252:1236:128","usedErrors":[39018,49697,49699,49701,49703,49705,49707,49709]}],"src":"46:1443:128"},"id":128},"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol","exportedSymbols":{"BaseMultichain":[41996],"Connector":[39244],"MultichainSpokeConnector":[42237],"ProposedOwnable":[49928],"SpokeConnector":[40428]},"id":42238,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":42108,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:129"},{"absolutePath":"contracts/messaging/connectors/SpokeConnector.sol","file":"../SpokeConnector.sol","id":42111,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42238,"sourceUnit":40429,"src":"71:70:129","symbolAliases":[{"foreign":{"id":42109,"name":"SpokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40428,"src":"79:14:129","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":42110,"name":"ProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49928,"src":"95:15:129","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/Connector.sol","file":"../Connector.sol","id":42113,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42238,"sourceUnit":39245,"src":"142:43:129","symbolAliases":[{"foreign":{"id":42112,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"150:9:129","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/multichain/BaseMultichain.sol","file":"./BaseMultichain.sol","id":42115,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42238,"sourceUnit":41997,"src":"187:52:129","symbolAliases":[{"foreign":{"id":42114,"name":"BaseMultichain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41996,"src":"195:14:129","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":42116,"name":"SpokeConnector","nameLocations":["278:14:129"],"nodeType":"IdentifierPath","referencedDeclaration":40428,"src":"278:14:129"},"id":42117,"nodeType":"InheritanceSpecifier","src":"278:14:129"},{"baseName":{"id":42118,"name":"BaseMultichain","nameLocations":["294:14:129"],"nodeType":"IdentifierPath","referencedDeclaration":41996,"src":"294:14:129"},"id":42119,"nodeType":"InheritanceSpecifier","src":"294:14:129"}],"canonicalName":"MultichainSpokeConnector","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":42237,"linearizedBaseContracts":[42237,41996,39367,40428,10734,49688,38914,10680,11506,39292,47805,39244,47778,49928,50003],"name":"MultichainSpokeConnector","nameLocation":"250:24:129","nodeType":"ContractDefinition","nodes":[{"body":{"id":42163,"nodeType":"Block","src":"932:2:129","statements":[]},"id":42164,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":42146,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42121,"src":"693:7:129","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":42147,"name":"_mirrorDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42123,"src":"708:13:129","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":42148,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42125,"src":"729:4:129","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42149,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42127,"src":"741:12:129","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42150,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42129,"src":"761:16:129","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42151,"name":"_processGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42131,"src":"785:11:129","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":42152,"name":"_reserveGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42133,"src":"804:11:129","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":42153,"name":"_delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42135,"src":"823:12:129","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":42154,"name":"_merkle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42137,"src":"843:7:129","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42155,"name":"_watcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42139,"src":"858:15:129","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":42156,"kind":"baseConstructorSpecifier","modifierName":{"id":42145,"name":"SpokeConnector","nameLocations":["671:14:129"],"nodeType":"IdentifierPath","referencedDeclaration":40428,"src":"671:14:129"},"nodeType":"ModifierInvocation","src":"671:208:129"},{"arguments":[{"id":42158,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42125,"src":"899:4:129","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42159,"name":"_mirrorChainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42141,"src":"905:14:129","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":42160,"name":"_gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42143,"src":"921:7:129","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42161,"kind":"baseConstructorSpecifier","modifierName":{"id":42157,"name":"BaseMultichain","nameLocations":["884:14:129"],"nodeType":"IdentifierPath","referencedDeclaration":41996,"src":"884:14:129"},"nodeType":"ModifierInvocation","src":"884:45:129"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":42144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42121,"mutability":"mutable","name":"_domain","nameLocation":"380:7:129","nodeType":"VariableDeclaration","scope":42164,"src":"373:14:129","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":42120,"name":"uint32","nodeType":"ElementaryTypeName","src":"373:6:129","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":42123,"mutability":"mutable","name":"_mirrorDomain","nameLocation":"400:13:129","nodeType":"VariableDeclaration","scope":42164,"src":"393:20:129","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":42122,"name":"uint32","nodeType":"ElementaryTypeName","src":"393:6:129","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":42125,"mutability":"mutable","name":"_amb","nameLocation":"427:4:129","nodeType":"VariableDeclaration","scope":42164,"src":"419:12:129","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42124,"name":"address","nodeType":"ElementaryTypeName","src":"419:7:129","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42127,"mutability":"mutable","name":"_rootManager","nameLocation":"445:12:129","nodeType":"VariableDeclaration","scope":42164,"src":"437:20:129","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42126,"name":"address","nodeType":"ElementaryTypeName","src":"437:7:129","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42129,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"471:16:129","nodeType":"VariableDeclaration","scope":42164,"src":"463:24:129","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42128,"name":"address","nodeType":"ElementaryTypeName","src":"463:7:129","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42131,"mutability":"mutable","name":"_processGas","nameLocation":"501:11:129","nodeType":"VariableDeclaration","scope":42164,"src":"493:19:129","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42130,"name":"uint256","nodeType":"ElementaryTypeName","src":"493:7:129","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42133,"mutability":"mutable","name":"_reserveGas","nameLocation":"526:11:129","nodeType":"VariableDeclaration","scope":42164,"src":"518:19:129","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42132,"name":"uint256","nodeType":"ElementaryTypeName","src":"518:7:129","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42135,"mutability":"mutable","name":"_delayBlocks","nameLocation":"551:12:129","nodeType":"VariableDeclaration","scope":42164,"src":"543:20:129","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42134,"name":"uint256","nodeType":"ElementaryTypeName","src":"543:7:129","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42137,"mutability":"mutable","name":"_merkle","nameLocation":"577:7:129","nodeType":"VariableDeclaration","scope":42164,"src":"569:15:129","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42136,"name":"address","nodeType":"ElementaryTypeName","src":"569:7:129","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42139,"mutability":"mutable","name":"_watcherManager","nameLocation":"598:15:129","nodeType":"VariableDeclaration","scope":42164,"src":"590:23:129","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42138,"name":"address","nodeType":"ElementaryTypeName","src":"590:7:129","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42141,"mutability":"mutable","name":"_mirrorChainId","nameLocation":"627:14:129","nodeType":"VariableDeclaration","scope":42164,"src":"619:22:129","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42140,"name":"uint256","nodeType":"ElementaryTypeName","src":"619:7:129","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42143,"mutability":"mutable","name":"_gasCap","nameLocation":"655:7:129","nodeType":"VariableDeclaration","scope":42164,"src":"647:15:129","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42142,"name":"uint256","nodeType":"ElementaryTypeName","src":"647:7:129","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"367:299:129"},"returnParameters":{"id":42162,"nodeType":"ParameterList","parameters":[],"src":"932:0:129"},"scope":42237,"src":"356:578:129","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[39834,49874],"body":{"id":42173,"nodeType":"Block","src":"1142:2:129","statements":[]},"documentation":{"id":42165,"nodeType":"StructuredDocumentation","src":"980:63:129","text":" @notice Should not be able to renounce ownership"},"functionSelector":"715018a6","id":42174,"implemented":true,"kind":"function","modifiers":[{"id":42171,"kind":"modifierInvocation","modifierName":{"id":42170,"name":"onlyOwner","nameLocations":["1132:9:129"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"1132:9:129"},"nodeType":"ModifierInvocation","src":"1132:9:129"}],"name":"renounceOwnership","nameLocation":"1055:17:129","nodeType":"FunctionDefinition","overrides":{"id":42169,"nodeType":"OverrideSpecifier","overrides":[{"id":42167,"name":"SpokeConnector","nameLocations":["1099:14:129"],"nodeType":"IdentifierPath","referencedDeclaration":40428,"src":"1099:14:129"},{"id":42168,"name":"ProposedOwnable","nameLocations":["1115:15:129"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"1115:15:129"}],"src":"1090:41:129"},"parameters":{"id":42166,"nodeType":"ParameterList","parameters":[],"src":"1072:2:129"},"returnParameters":{"id":42172,"nodeType":"ParameterList","parameters":[],"src":"1142:0:129"},"scope":42237,"src":"1046:98:129","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[39220,41887],"body":{"id":42205,"nodeType":"Block","src":"1404:290:129","statements":[{"expression":{"arguments":[{"arguments":[{"id":42185,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"1478:15:129","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":42184,"name":"_verifySender","nodeType":"Identifier","overloadedDeclarations":[42236,41995],"referencedDeclaration":42236,"src":"1464:13:129","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":42186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1464:30:129","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216d6972726f72436f6e6e6563746f72","id":42187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1496:18:129","typeDescriptions":{"typeIdentifier":"t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d","typeString":"literal_string \"!mirrorConnector\""},"value":"!mirrorConnector"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d","typeString":"literal_string \"!mirrorConnector\""}],"id":42183,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1456:7:129","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1456:59:129","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42189,"nodeType":"ExpressionStatement","src":"1456:59:129"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":42191,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42177,"src":"1562:5:129","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":42192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1568:6:129","memberName":"length","nodeType":"MemberAccess","src":"1562:12:129","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":42193,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1578:2:129","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"1562:18:129","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c656e677468","id":42195,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1582:9:129","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""},"value":"!length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""}],"id":42190,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1554:7:129","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1554:38:129","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42197,"nodeType":"ExpressionStatement","src":"1554:38:129"},{"expression":{"arguments":[{"arguments":[{"id":42201,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42177,"src":"1682:5:129","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":42200,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1674:7:129","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":42199,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1674:7:129","typeDescriptions":{}}},"id":42202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1674:14:129","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":42198,"name":"receiveAggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40160,"src":"1653:20:129","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":42203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1653:36:129","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42204,"nodeType":"ExpressionStatement","src":"1653:36:129"}]},"documentation":{"id":42175,"nodeType":"StructuredDocumentation","src":"1191:120:129","text":" @dev Handles an incoming `aggregateRoot`\n NOTE: Could store latest root sent and prove aggregate root"},"id":42206,"implemented":true,"kind":"function","modifiers":[],"name":"_processMessage","nameLocation":"1323:15:129","nodeType":"FunctionDefinition","overrides":{"id":42181,"nodeType":"OverrideSpecifier","overrides":[{"id":42179,"name":"Connector","nameLocations":["1377:9:129"],"nodeType":"IdentifierPath","referencedDeclaration":39244,"src":"1377:9:129"},{"id":42180,"name":"BaseMultichain","nameLocations":["1388:14:129"],"nodeType":"IdentifierPath","referencedDeclaration":41996,"src":"1388:14:129"}],"src":"1368:35:129"},"parameters":{"id":42178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42177,"mutability":"mutable","name":"_data","nameLocation":"1352:5:129","nodeType":"VariableDeclaration","scope":42206,"src":"1339:18:129","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42176,"name":"bytes","nodeType":"ElementaryTypeName","src":"1339:5:129","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1338:20:129"},"returnParameters":{"id":42182,"nodeType":"ParameterList","parameters":[],"src":"1404:0:129"},"scope":42237,"src":"1314:380:129","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[39210],"body":{"id":42221,"nodeType":"Block","src":"1785:66:129","statements":[{"expression":{"arguments":[{"id":42215,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"1804:3:129","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42216,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"1809:15:129","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42217,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42208,"src":"1826:5:129","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":42218,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42210,"src":"1833:12:129","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":42214,"name":"_sendMessage","nodeType":"Identifier","overloadedDeclarations":[42222,41959],"referencedDeclaration":41959,"src":"1791:12:129","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,bytes memory,bytes memory)"}},"id":42219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1791:55:129","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42220,"nodeType":"ExpressionStatement","src":"1791:55:129"}]},"id":42222,"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessage","nameLocation":"1707:12:129","nodeType":"FunctionDefinition","overrides":{"id":42212,"nodeType":"OverrideSpecifier","overrides":[],"src":"1776:8:129"},"parameters":{"id":42211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42208,"mutability":"mutable","name":"_data","nameLocation":"1733:5:129","nodeType":"VariableDeclaration","scope":42222,"src":"1720:18:129","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42207,"name":"bytes","nodeType":"ElementaryTypeName","src":"1720:5:129","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":42210,"mutability":"mutable","name":"_encodedData","nameLocation":"1753:12:129","nodeType":"VariableDeclaration","scope":42222,"src":"1740:25:129","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42209,"name":"bytes","nodeType":"ElementaryTypeName","src":"1740:5:129","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1719:47:129"},"returnParameters":{"id":42213,"nodeType":"ParameterList","parameters":[],"src":"1785:0:129"},"scope":42237,"src":"1698:153:129","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[39228],"body":{"id":42235,"nodeType":"Block","src":"1935:47:129","statements":[{"expression":{"arguments":[{"id":42231,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"1962:3:129","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42232,"name":"_expected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42224,"src":"1967:9:129","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":42230,"name":"_verifySender","nodeType":"Identifier","overloadedDeclarations":[42236,41995],"referencedDeclaration":41995,"src":"1948:13:129","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) view returns (bool)"}},"id":42233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1948:29:129","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":42229,"id":42234,"nodeType":"Return","src":"1941:36:129"}]},"id":42236,"implemented":true,"kind":"function","modifiers":[],"name":"_verifySender","nameLocation":"1864:13:129","nodeType":"FunctionDefinition","overrides":{"id":42226,"nodeType":"OverrideSpecifier","overrides":[],"src":"1911:8:129"},"parameters":{"id":42225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42224,"mutability":"mutable","name":"_expected","nameLocation":"1886:9:129","nodeType":"VariableDeclaration","scope":42236,"src":"1878:17:129","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42223,"name":"address","nodeType":"ElementaryTypeName","src":"1878:7:129","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1877:19:129"},"returnParameters":{"id":42229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42228,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42236,"src":"1929:4:129","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":42227,"name":"bool","nodeType":"ElementaryTypeName","src":"1929:4:129","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1928:6:129"},"scope":42237,"src":"1855:127:129","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":42238,"src":"241:1743:129","usedErrors":[39018,49630,49697,49699,49701,49703,49705,49707,49709,50225,50227,50229,50231,50233]}],"src":"46:1939:129"},"id":129},"contracts/messaging/connectors/optimism/BaseOptimism.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/optimism/BaseOptimism.sol","exportedSymbols":{"BaseOptimism":[42310],"GasCap":[39367],"OptimismAmb":[48403]},"id":42311,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":42239,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:130"},{"absolutePath":"contracts/messaging/interfaces/ambs/optimism/OptimismAmb.sol","file":"../../interfaces/ambs/optimism/OptimismAmb.sol","id":42241,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42311,"sourceUnit":48404,"src":"71:75:130","symbolAliases":[{"foreign":{"id":42240,"name":"OptimismAmb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48403,"src":"79:11:130","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/GasCap.sol","file":"../GasCap.sol","id":42243,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42311,"sourceUnit":39368,"src":"148:37:130","symbolAliases":[{"foreign":{"id":42242,"name":"GasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39367,"src":"156:6:130","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":42244,"name":"GasCap","nameLocations":["221:6:130"],"nodeType":"IdentifierPath","referencedDeclaration":39367,"src":"221:6:130"},"id":42245,"nodeType":"InheritanceSpecifier","src":"221:6:130"}],"canonicalName":"BaseOptimism","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":42310,"linearizedBaseContracts":[42310,39367,49928,50003],"name":"BaseOptimism","nameLocation":"205:12:130","nodeType":"ContractDefinition","nodes":[{"body":{"id":42253,"nodeType":"Block","src":"320:2:130","statements":[]},"id":42254,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":42250,"name":"_gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42247,"src":"311:7:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42251,"kind":"baseConstructorSpecifier","modifierName":{"id":42249,"name":"GasCap","nameLocations":["304:6:130"],"nodeType":"IdentifierPath","referencedDeclaration":39367,"src":"304:6:130"},"nodeType":"ModifierInvocation","src":"304:15:130"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":42248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42247,"mutability":"mutable","name":"_gasCap","nameLocation":"295:7:130","nodeType":"VariableDeclaration","scope":42254,"src":"287:15:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42246,"name":"uint256","nodeType":"ElementaryTypeName","src":"287:7:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"286:17:130"},"returnParameters":{"id":42252,"nodeType":"ParameterList","parameters":[],"src":"320:0:130"},"scope":42310,"src":"275:47:130","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":42279,"nodeType":"Block","src":"455:115:130","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":42267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":42264,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"469:3:130","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":42265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"473:6:130","memberName":"sender","nodeType":"MemberAccess","src":"469:10:130","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":42266,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42256,"src":"483:4:130","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"469:18:130","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21627269646765","id":42268,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"489:9:130","typeDescriptions":{"typeIdentifier":"t_stringliteral_5bd20fa0eac50a6892371dae18efeb7d2b1c7a8479150f38626e21052ac8472c","typeString":"literal_string \"!bridge\""},"value":"!bridge"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5bd20fa0eac50a6892371dae18efeb7d2b1c7a8479150f38626e21052ac8472c","typeString":"literal_string \"!bridge\""}],"id":42263,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"461:7:130","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"461:38:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42270,"nodeType":"ExpressionStatement","src":"461:38:130"},{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":42277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":42272,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42256,"src":"524:4:130","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":42271,"name":"OptimismAmb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48403,"src":"512:11:130","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_OptimismAmb_$48403_$","typeString":"type(contract OptimismAmb)"}},"id":42273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"512:17:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_OptimismAmb_$48403","typeString":"contract OptimismAmb"}},"id":42274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"530:20:130","memberName":"xDomainMessageSender","nodeType":"MemberAccess","referencedDeclaration":48402,"src":"512:38:130","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":42275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"512:40:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":42276,"name":"_expected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42258,"src":"556:9:130","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"512:53:130","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":42262,"id":42278,"nodeType":"Return","src":"505:60:130"}]},"id":42280,"implemented":true,"kind":"function","modifiers":[],"name":"_verifySender","nameLocation":"379:13:130","nodeType":"FunctionDefinition","parameters":{"id":42259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42256,"mutability":"mutable","name":"_amb","nameLocation":"401:4:130","nodeType":"VariableDeclaration","scope":42280,"src":"393:12:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42255,"name":"address","nodeType":"ElementaryTypeName","src":"393:7:130","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42258,"mutability":"mutable","name":"_expected","nameLocation":"415:9:130","nodeType":"VariableDeclaration","scope":42280,"src":"407:17:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42257,"name":"address","nodeType":"ElementaryTypeName","src":"407:7:130","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"392:33:130"},"returnParameters":{"id":42262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42261,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42280,"src":"449:4:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":42260,"name":"bool","nodeType":"ElementaryTypeName","src":"449:4:130","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"448:6:130"},"scope":42310,"src":"370:200:130","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":42308,"nodeType":"Block","src":"767:233:130","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":42289,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42283,"src":"836:12:130","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":42290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"849:6:130","memberName":"length","nodeType":"MemberAccess","src":"836:19:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":42291,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"859:2:130","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"836:25:130","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2164617461206c656e677468","id":42293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"863:14:130","typeDescriptions":{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""},"value":"!data length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""}],"id":42288,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"828:7:130","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"828:50:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42295,"nodeType":"ExpressionStatement","src":"828:50:130"},{"expression":{"id":42306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42296,"name":"_gas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42286,"src":"944:4:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":42300,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42283,"src":"970:12:130","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":42302,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"985:7:130","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":42301,"name":"uint256","nodeType":"ElementaryTypeName","src":"985:7:130","typeDescriptions":{}}}],"id":42303,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"984:9:130","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":42298,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"959:3:130","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":42299,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"963:6:130","memberName":"decode","nodeType":"MemberAccess","src":"959:10:130","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":42304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"959:35:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":42297,"name":"_getGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39366,"src":"951:7:130","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":42305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"951:44:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"944:51:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42307,"nodeType":"ExpressionStatement","src":"944:51:130"}]},"documentation":{"id":42281,"nodeType":"StructuredDocumentation","src":"574:98:130","text":" @notice Using Optimism AMB, the gas is provided to `sendMessage` as an encoded uint"},"id":42309,"implemented":true,"kind":"function","modifiers":[],"name":"_getGasFromEncoded","nameLocation":"684:18:130","nodeType":"FunctionDefinition","parameters":{"id":42284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42283,"mutability":"mutable","name":"_encodedData","nameLocation":"716:12:130","nodeType":"VariableDeclaration","scope":42309,"src":"703:25:130","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42282,"name":"bytes","nodeType":"ElementaryTypeName","src":"703:5:130","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"702:27:130"},"returnParameters":{"id":42287,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42286,"mutability":"mutable","name":"_gas","nameLocation":"761:4:130","nodeType":"VariableDeclaration","scope":42309,"src":"753:12:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42285,"name":"uint256","nodeType":"ElementaryTypeName","src":"753:7:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"752:14:130"},"scope":42310,"src":"675:325:130","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":42311,"src":"187:815:130","usedErrors":[49697,49699,49701,49703,49705,49707,49709]}],"src":"46:957:130"},"id":130},"contracts/messaging/connectors/optimism/OptimismHubConnector.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/optimism/OptimismHubConnector.sol","exportedSymbols":{"BaseOptimism":[42310],"Connector":[39244],"HubConnector":[39420],"IRootManager":[47888],"IStateCommitmentChain":[48385],"L2MessageInclusionProof":[48308],"OVMCodec":[43845],"OptimismAmb":[48403],"OptimismHubConnector":[42688],"PredeployAddresses":[43885],"SecureMerkleTrie":[44709],"TypedMemView":[51265]},"id":42689,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":42312,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:131"},{"absolutePath":"contracts/messaging/interfaces/IRootManager.sol","file":"../../interfaces/IRootManager.sol","id":42314,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42689,"sourceUnit":47889,"src":"71:63:131","symbolAliases":[{"foreign":{"id":42313,"name":"IRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47888,"src":"79:12:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/ambs/optimism/OptimismAmb.sol","file":"../../interfaces/ambs/optimism/OptimismAmb.sol","id":42316,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42689,"sourceUnit":48404,"src":"135:75:131","symbolAliases":[{"foreign":{"id":42315,"name":"OptimismAmb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48403,"src":"143:11:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/ambs/optimism/IStateCommitmentChain.sol","file":"../../interfaces/ambs/optimism/IStateCommitmentChain.sol","id":42319,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42689,"sourceUnit":48386,"src":"211:120:131","symbolAliases":[{"foreign":{"id":42317,"name":"IStateCommitmentChain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48385,"src":"219:21:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":42318,"name":"L2MessageInclusionProof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48308,"src":"242:23:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/libraries/TypedMemView.sol","file":"../../../shared/libraries/TypedMemView.sol","id":42321,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42689,"sourceUnit":51266,"src":"333:72:131","symbolAliases":[{"foreign":{"id":42320,"name":"TypedMemView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51265,"src":"341:12:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/HubConnector.sol","file":"../HubConnector.sol","id":42323,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42689,"sourceUnit":39421,"src":"407:49:131","symbolAliases":[{"foreign":{"id":42322,"name":"HubConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39420,"src":"415:12:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/Connector.sol","file":"../Connector.sol","id":42325,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42689,"sourceUnit":39245,"src":"457:43:131","symbolAliases":[{"foreign":{"id":42324,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"465:9:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/optimism/lib/PredeployAddresses.sol","file":"./lib/PredeployAddresses.sol","id":42327,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42689,"sourceUnit":43886,"src":"502:64:131","symbolAliases":[{"foreign":{"id":42326,"name":"PredeployAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43885,"src":"510:18:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/optimism/lib/OVMCodec.sol","file":"./lib/OVMCodec.sol","id":42329,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42689,"sourceUnit":43846,"src":"567:44:131","symbolAliases":[{"foreign":{"id":42328,"name":"OVMCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43845,"src":"575:8:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/optimism/lib/SecureMerkleTrie.sol","file":"./lib/SecureMerkleTrie.sol","id":42331,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42689,"sourceUnit":44710,"src":"612:60:131","symbolAliases":[{"foreign":{"id":42330,"name":"SecureMerkleTrie","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44709,"src":"620:16:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/optimism/BaseOptimism.sol","file":"./BaseOptimism.sol","id":42333,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42689,"sourceUnit":42311,"src":"674:48:131","symbolAliases":[{"foreign":{"id":42332,"name":"BaseOptimism","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42310,"src":"682:12:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":42334,"name":"HubConnector","nameLocations":["757:12:131"],"nodeType":"IdentifierPath","referencedDeclaration":39420,"src":"757:12:131"},"id":42335,"nodeType":"InheritanceSpecifier","src":"757:12:131"},{"baseName":{"id":42336,"name":"BaseOptimism","nameLocations":["771:12:131"],"nodeType":"IdentifierPath","referencedDeclaration":42310,"src":"771:12:131"},"id":42337,"nodeType":"InheritanceSpecifier","src":"771:12:131"}],"canonicalName":"OptimismHubConnector","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":42688,"linearizedBaseContracts":[42688,42310,39367,39420,39244,47778,49928,50003],"name":"OptimismHubConnector","nameLocation":"733:20:131","nodeType":"ContractDefinition","nodes":[{"global":false,"id":42340,"libraryName":{"id":42338,"name":"TypedMemView","nameLocations":["835:12:131"],"nodeType":"IdentifierPath","referencedDeclaration":51265,"src":"835:12:131"},"nodeType":"UsingForDirective","src":"829:29:131","typeName":{"id":42339,"name":"bytes","nodeType":"ElementaryTypeName","src":"852:5:131","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},{"global":false,"id":42343,"libraryName":{"id":42341,"name":"TypedMemView","nameLocations":["867:12:131"],"nodeType":"IdentifierPath","referencedDeclaration":51265,"src":"867:12:131"},"nodeType":"UsingForDirective","src":"861:31:131","typeName":{"id":42342,"name":"bytes29","nodeType":"ElementaryTypeName","src":"884:7:131","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}},{"constant":false,"functionSelector":"0f329ef8","id":42346,"mutability":"immutable","name":"stateCommitmentChain","nameLocation":"974:20:131","nodeType":"VariableDeclaration","scope":42688,"src":"935:59:131","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IStateCommitmentChain_$48385","typeString":"contract IStateCommitmentChain"},"typeName":{"id":42345,"nodeType":"UserDefinedTypeName","pathNode":{"id":42344,"name":"IStateCommitmentChain","nameLocations":["935:21:131"],"nodeType":"IdentifierPath","referencedDeclaration":48385,"src":"935:21:131"},"referencedDeclaration":48385,"src":"935:21:131","typeDescriptions":{"typeIdentifier":"t_contract$_IStateCommitmentChain_$48385","typeString":"contract IStateCommitmentChain"}},"visibility":"public"},{"constant":false,"functionSelector":"c1f0808a","id":42350,"mutability":"mutable","name":"processed","nameLocation":"1419:9:131","nodeType":"VariableDeclaration","scope":42688,"src":"1387:41:131","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"typeName":{"id":42349,"keyType":{"id":42347,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1395:7:131","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"1387:24:131","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"valueType":{"id":42348,"name":"bool","nodeType":"ElementaryTypeName","src":"1406:4:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"body":{"id":42383,"nodeType":"Block","src":"1765:78:131","statements":[{"expression":{"id":42381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42377,"name":"stateCommitmentChain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42346,"src":"1771:20:131","typeDescriptions":{"typeIdentifier":"t_contract$_IStateCommitmentChain_$48385","typeString":"contract IStateCommitmentChain"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":42379,"name":"_stateCommitmentChain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42362,"src":"1816:21:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":42378,"name":"IStateCommitmentChain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48385,"src":"1794:21:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStateCommitmentChain_$48385_$","typeString":"type(contract IStateCommitmentChain)"}},"id":42380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1794:44:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStateCommitmentChain_$48385","typeString":"contract IStateCommitmentChain"}},"src":"1771:67:131","typeDescriptions":{"typeIdentifier":"t_contract$_IStateCommitmentChain_$48385","typeString":"contract IStateCommitmentChain"}},"id":42382,"nodeType":"ExpressionStatement","src":"1771:67:131"}]},"id":42384,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":42367,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42352,"src":"1681:7:131","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":42368,"name":"_mirrorDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42354,"src":"1690:13:131","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":42369,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42356,"src":"1705:4:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42370,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42358,"src":"1711:12:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42371,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42360,"src":"1725:16:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":42372,"kind":"baseConstructorSpecifier","modifierName":{"id":42366,"name":"HubConnector","nameLocations":["1668:12:131"],"nodeType":"IdentifierPath","referencedDeclaration":39420,"src":"1668:12:131"},"nodeType":"ModifierInvocation","src":"1668:74:131"},{"arguments":[{"id":42374,"name":"_gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42364,"src":"1756:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42375,"kind":"baseConstructorSpecifier","modifierName":{"id":42373,"name":"BaseOptimism","nameLocations":["1743:12:131"],"nodeType":"IdentifierPath","referencedDeclaration":42310,"src":"1743:12:131"},"nodeType":"ModifierInvocation","src":"1743:21:131"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":42365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42352,"mutability":"mutable","name":"_domain","nameLocation":"1500:7:131","nodeType":"VariableDeclaration","scope":42384,"src":"1493:14:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":42351,"name":"uint32","nodeType":"ElementaryTypeName","src":"1493:6:131","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":42354,"mutability":"mutable","name":"_mirrorDomain","nameLocation":"1520:13:131","nodeType":"VariableDeclaration","scope":42384,"src":"1513:20:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":42353,"name":"uint32","nodeType":"ElementaryTypeName","src":"1513:6:131","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":42356,"mutability":"mutable","name":"_amb","nameLocation":"1547:4:131","nodeType":"VariableDeclaration","scope":42384,"src":"1539:12:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42355,"name":"address","nodeType":"ElementaryTypeName","src":"1539:7:131","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42358,"mutability":"mutable","name":"_rootManager","nameLocation":"1565:12:131","nodeType":"VariableDeclaration","scope":42384,"src":"1557:20:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42357,"name":"address","nodeType":"ElementaryTypeName","src":"1557:7:131","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42360,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"1591:16:131","nodeType":"VariableDeclaration","scope":42384,"src":"1583:24:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42359,"name":"address","nodeType":"ElementaryTypeName","src":"1583:7:131","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42362,"mutability":"mutable","name":"_stateCommitmentChain","nameLocation":"1621:21:131","nodeType":"VariableDeclaration","scope":42384,"src":"1613:29:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42361,"name":"address","nodeType":"ElementaryTypeName","src":"1613:7:131","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42364,"mutability":"mutable","name":"_gasCap","nameLocation":"1656:7:131","nodeType":"VariableDeclaration","scope":42384,"src":"1648:15:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42363,"name":"uint256","nodeType":"ElementaryTypeName","src":"1648:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1487:180:131"},"returnParameters":{"id":42376,"nodeType":"ParameterList","parameters":[],"src":"1765:0:131"},"scope":42688,"src":"1476:367:131","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[39228],"body":{"id":42397,"nodeType":"Block","src":"1971:47:131","statements":[{"expression":{"arguments":[{"id":42393,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"1998:3:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42394,"name":"_expected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42386,"src":"2003:9:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":42392,"name":"_verifySender","nodeType":"Identifier","overloadedDeclarations":[42398,42280],"referencedDeclaration":42280,"src":"1984:13:131","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) view returns (bool)"}},"id":42395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1984:29:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":42391,"id":42396,"nodeType":"Return","src":"1977:36:131"}]},"id":42398,"implemented":true,"kind":"function","modifiers":[],"name":"_verifySender","nameLocation":"1900:13:131","nodeType":"FunctionDefinition","overrides":{"id":42388,"nodeType":"OverrideSpecifier","overrides":[],"src":"1947:8:131"},"parameters":{"id":42387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42386,"mutability":"mutable","name":"_expected","nameLocation":"1922:9:131","nodeType":"VariableDeclaration","scope":42398,"src":"1914:17:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42385,"name":"address","nodeType":"ElementaryTypeName","src":"1914:7:131","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1913:19:131"},"returnParameters":{"id":42391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42390,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42398,"src":"1965:4:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":42389,"name":"bool","nodeType":"ElementaryTypeName","src":"1965:4:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1964:6:131"},"scope":42688,"src":"1891:127:131","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[39210],"body":{"id":42437,"nodeType":"Block","src":"2172:325:131","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":42408,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42401,"src":"2241:5:131","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":42409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2247:6:131","memberName":"length","nodeType":"MemberAccess","src":"2241:12:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":42410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2257:2:131","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"2241:18:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c656e677468","id":42412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2261:9:131","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""},"value":"!length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""}],"id":42407,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2233:7:131","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2233:38:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42414,"nodeType":"ExpressionStatement","src":"2233:38:131"},{"assignments":[42416],"declarations":[{"constant":false,"id":42416,"mutability":"mutable","name":"_calldata","nameLocation":"2314:9:131","nodeType":"VariableDeclaration","scope":42437,"src":"2301:22:131","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42415,"name":"bytes","nodeType":"ElementaryTypeName","src":"2301:5:131","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":42424,"initialValue":{"arguments":[{"expression":{"expression":{"id":42419,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"2349:9:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Connector_$39244_$","typeString":"type(contract Connector)"}},"id":42420,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2359:14:131","memberName":"processMessage","nodeType":"MemberAccess","referencedDeclaration":39189,"src":"2349:24:131","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function Connector.processMessage(bytes memory)"}},"id":42421,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2374:8:131","memberName":"selector","nodeType":"MemberAccess","src":"2349:33:131","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":42422,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42401,"src":"2384:5:131","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":42417,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2326:3:131","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":42418,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2330:18:131","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2326:22:131","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":42423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2326:64:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"2301:89:131"},{"expression":{"arguments":[{"id":42429,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"2449:15:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42430,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42416,"src":"2466:9:131","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":42433,"name":"gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39301,"src":"2484:6:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":42432,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2477:6:131","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":42431,"name":"uint32","nodeType":"ElementaryTypeName","src":"2477:6:131","typeDescriptions":{}}},"id":42434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2477:14:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"arguments":[{"id":42426,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"2432:3:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":42425,"name":"OptimismAmb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48403,"src":"2420:11:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_OptimismAmb_$48403_$","typeString":"type(contract OptimismAmb)"}},"id":42427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2420:16:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_OptimismAmb_$48403","typeString":"contract OptimismAmb"}},"id":42428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2437:11:131","memberName":"sendMessage","nodeType":"MemberAccess","referencedDeclaration":48397,"src":"2420:28:131","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint32_$returns$__$","typeString":"function (address,bytes memory,uint32) external"}},"id":42435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2420:72:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42436,"nodeType":"ExpressionStatement","src":"2420:72:131"}]},"documentation":{"id":42399,"nodeType":"StructuredDocumentation","src":"2022:60:131","text":" @dev Sends `aggregateRoot` to messaging on l2"},"id":42438,"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessage","nameLocation":"2094:12:131","nodeType":"FunctionDefinition","overrides":{"id":42405,"nodeType":"OverrideSpecifier","overrides":[],"src":"2163:8:131"},"parameters":{"id":42404,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42401,"mutability":"mutable","name":"_data","nameLocation":"2120:5:131","nodeType":"VariableDeclaration","scope":42438,"src":"2107:18:131","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42400,"name":"bytes","nodeType":"ElementaryTypeName","src":"2107:5:131","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":42403,"mutability":"mutable","name":"_encodedData","nameLocation":"2140:12:131","nodeType":"VariableDeclaration","scope":42438,"src":"2127:25:131","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42402,"name":"bytes","nodeType":"ElementaryTypeName","src":"2127:5:131","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2106:47:131"},"returnParameters":{"id":42406,"nodeType":"ParameterList","parameters":[],"src":"2172:0:131"},"scope":42688,"src":"2085:412:131","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":42535,"nodeType":"Block","src":"3027:1567:131","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":42456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42454,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42443,"src":"3085:7:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":42455,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"3096:15:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3085:26:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216d6972726f72436f6e6e6563746f72","id":42457,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3113:18:131","typeDescriptions":{"typeIdentifier":"t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d","typeString":"literal_string \"!mirrorConnector\""},"value":"!mirrorConnector"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d","typeString":"literal_string \"!mirrorConnector\""}],"id":42453,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3077:7:131","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3077:55:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42459,"nodeType":"ExpressionStatement","src":"3077:55:131"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":42466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42461,"name":"_target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42441,"src":"3189:7:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":42464,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3208:4:131","typeDescriptions":{"typeIdentifier":"t_contract$_OptimismHubConnector_$42688","typeString":"contract OptimismHubConnector"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_OptimismHubConnector_$42688","typeString":"contract OptimismHubConnector"}],"id":42463,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3200:7:131","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":42462,"name":"address","nodeType":"ElementaryTypeName","src":"3200:7:131","typeDescriptions":{}}},"id":42465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3200:13:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3189:24:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2174686973","id":42467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3215:7:131","typeDescriptions":{"typeIdentifier":"t_stringliteral_1945466d8297d124a74cd1815c3681e97e828860265acaaea52d7392b2e28033","typeString":"literal_string \"!this\""},"value":"!this"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1945466d8297d124a74cd1815c3681e97e828860265acaaea52d7392b2e28033","typeString":"literal_string \"!this\""}],"id":42460,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3181:7:131","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3181:42:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42469,"nodeType":"ExpressionStatement","src":"3181:42:131"},{"assignments":[42471],"declarations":[{"constant":false,"id":42471,"mutability":"mutable","name":"xDomainData","nameLocation":"3271:11:131","nodeType":"VariableDeclaration","scope":42535,"src":"3258:24:131","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42470,"name":"bytes","nodeType":"ElementaryTypeName","src":"3258:5:131","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":42478,"initialValue":{"arguments":[{"id":42473,"name":"_target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42441,"src":"3308:7:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42474,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42443,"src":"3317:7:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42475,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42445,"src":"3326:8:131","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":42476,"name":"_messageNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42447,"src":"3336:13:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":42472,"name":"_encodeXDomainCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42687,"src":"3285:22:131","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,address,bytes memory,uint256) pure returns (bytes memory)"}},"id":42477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3285:65:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3258:92:131"},{"expression":{"arguments":[{"arguments":[{"id":42481,"name":"xDomainData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42471,"src":"3387:11:131","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":42482,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42450,"src":"3400:6:131","typeDescriptions":{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_memory_ptr","typeString":"struct L2MessageInclusionProof memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_memory_ptr","typeString":"struct L2MessageInclusionProof memory"}],"id":42480,"name":"_verifyXDomainMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42558,"src":"3365:21:131","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$_t_struct$_L2MessageInclusionProof_$48308_memory_ptr_$returns$_t_bool_$","typeString":"function (bytes memory,struct L2MessageInclusionProof memory) view returns (bool)"}},"id":42483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3365:42:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2170726f6f66","id":42484,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3409:8:131","typeDescriptions":{"typeIdentifier":"t_stringliteral_6257fa65cb3e2131130f078fa0b2c0b28695aa9be00e6235d4f462589ad75bec","typeString":"literal_string \"!proof\""},"value":"!proof"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6257fa65cb3e2131130f078fa0b2c0b28695aa9be00e6235d4f462589ad75bec","typeString":"literal_string \"!proof\""}],"id":42479,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3357:7:131","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3357:61:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42486,"nodeType":"ExpressionStatement","src":"3357:61:131"},{"assignments":[42488],"declarations":[{"constant":false,"id":42488,"mutability":"mutable","name":"_view","nameLocation":"4195:5:131","nodeType":"VariableDeclaration","scope":42535,"src":"4187:13:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":42487,"name":"bytes29","nodeType":"ElementaryTypeName","src":"4187:7:131","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"id":42493,"initialValue":{"arguments":[{"hexValue":"30","id":42491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4216:1:131","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":42489,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42445,"src":"4203:8:131","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":42490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4212:3:131","memberName":"ref","nodeType":"MemberAccess","referencedDeclaration":50591,"src":"4203:12:131","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,uint40) pure returns (bytes29)"}},"id":42492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4203:15:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"nodeType":"VariableDeclarationStatement","src":"4187:31:131"},{"assignments":[42495],"declarations":[{"constant":false,"id":42495,"mutability":"mutable","name":"root","nameLocation":"4232:4:131","nodeType":"VariableDeclaration","scope":42535,"src":"4224:12:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":42494,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4224:7:131","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":42505,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint96","typeString":"uint96"},"id":42502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":42498,"name":"_view","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42488,"src":"4251:5:131","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":42499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4257:3:131","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":50665,"src":"4251:9:131","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":42500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4251:11:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"3332","id":42501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4265:2:131","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"4251:16:131","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},{"hexValue":"3332","id":42503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4269:2:131","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint96","typeString":"uint96"},{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}],"expression":{"id":42496,"name":"_view","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42488,"src":"4239:5:131","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":42497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4245:5:131","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":50852,"src":"4239:11:131","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_bytes32_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint256,uint8) pure returns (bytes32)"}},"id":42504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4239:33:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4224:48:131"},{"condition":{"id":42509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4283:16:131","subExpression":{"baseExpression":{"id":42506,"name":"processed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42350,"src":"4284:9:131","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":42508,"indexExpression":{"id":42507,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42495,"src":"4294:4:131","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4284:15:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42534,"nodeType":"IfStatement","src":"4279:260:131","trueBody":{"id":42533,"nodeType":"Block","src":"4301:238:131","statements":[{"expression":{"id":42514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":42510,"name":"processed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42350,"src":"4340:9:131","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":42512,"indexExpression":{"id":42511,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42495,"src":"4350:4:131","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4340:15:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":42513,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4358:4:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"4340:22:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42515,"nodeType":"ExpressionStatement","src":"4340:22:131"},{"expression":{"arguments":[{"id":42520,"name":"MIRROR_DOMAIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39048,"src":"4452:13:131","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":42521,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42495,"src":"4467:4:131","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"arguments":[{"id":42517,"name":"ROOT_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39045,"src":"4428:12:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":42516,"name":"IRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47888,"src":"4415:12:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRootManager_$47888_$","typeString":"type(contract IRootManager)"}},"id":42518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4415:26:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRootManager_$47888","typeString":"contract IRootManager"}},"id":42519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4442:9:131","memberName":"aggregate","nodeType":"MemberAccess","referencedDeclaration":47887,"src":"4415:36:131","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint32_$_t_bytes32_$returns$__$","typeString":"function (uint32,bytes32) external"}},"id":42522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4415:57:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42523,"nodeType":"ExpressionStatement","src":"4415:57:131"},{"eventCall":{"arguments":[{"arguments":[{"id":42527,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42495,"src":"4514:4:131","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":42525,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4503:3:131","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":42526,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4507:6:131","memberName":"encode","nodeType":"MemberAccess","src":"4503:10:131","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":42528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4503:16:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"id":42529,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4521:3:131","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":42530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4525:6:131","memberName":"sender","nodeType":"MemberAccess","src":"4521:10:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":42524,"name":"MessageProcessed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47765,"src":"4486:16:131","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_address_$returns$__$","typeString":"function (bytes memory,address)"}},"id":42531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4486:46:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42532,"nodeType":"EmitStatement","src":"4481:51:131"}]}}]},"documentation":{"id":42439,"nodeType":"StructuredDocumentation","src":"2640:200:131","text":" @dev modified from: https://github.com/ethereum-optimism/optimism/blob/9973c1da3211e094a180a8a96ba9f8bb1ab1b389/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol#L165"},"functionSelector":"6e2edb4e","id":42536,"implemented":true,"kind":"function","modifiers":[],"name":"processMessageFromRoot","nameLocation":"2852:22:131","nodeType":"FunctionDefinition","parameters":{"id":42451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42441,"mutability":"mutable","name":"_target","nameLocation":"2888:7:131","nodeType":"VariableDeclaration","scope":42536,"src":"2880:15:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42440,"name":"address","nodeType":"ElementaryTypeName","src":"2880:7:131","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42443,"mutability":"mutable","name":"_sender","nameLocation":"2909:7:131","nodeType":"VariableDeclaration","scope":42536,"src":"2901:15:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42442,"name":"address","nodeType":"ElementaryTypeName","src":"2901:7:131","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42445,"mutability":"mutable","name":"_message","nameLocation":"2935:8:131","nodeType":"VariableDeclaration","scope":42536,"src":"2922:21:131","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42444,"name":"bytes","nodeType":"ElementaryTypeName","src":"2922:5:131","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":42447,"mutability":"mutable","name":"_messageNonce","nameLocation":"2957:13:131","nodeType":"VariableDeclaration","scope":42536,"src":"2949:21:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42446,"name":"uint256","nodeType":"ElementaryTypeName","src":"2949:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42450,"mutability":"mutable","name":"_proof","nameLocation":"3007:6:131","nodeType":"VariableDeclaration","scope":42536,"src":"2976:37:131","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_memory_ptr","typeString":"struct L2MessageInclusionProof"},"typeName":{"id":42449,"nodeType":"UserDefinedTypeName","pathNode":{"id":42448,"name":"L2MessageInclusionProof","nameLocations":["2976:23:131"],"nodeType":"IdentifierPath","referencedDeclaration":48308,"src":"2976:23:131"},"referencedDeclaration":48308,"src":"2976:23:131","typeDescriptions":{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_storage_ptr","typeString":"struct L2MessageInclusionProof"}},"visibility":"internal"}],"src":"2874:143:131"},"returnParameters":{"id":42452,"nodeType":"ParameterList","parameters":[],"src":"3027:0:131"},"scope":42688,"src":"2843:1751:131","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":42557,"nodeType":"Block","src":"5157:98:131","statements":[{"expression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":42554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":42548,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42542,"src":"5193:6:131","typeDescriptions":{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_memory_ptr","typeString":"struct L2MessageInclusionProof memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_memory_ptr","typeString":"struct L2MessageInclusionProof memory"}],"id":42547,"name":"_verifyStateRootProof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42578,"src":"5171:21:131","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_L2MessageInclusionProof_$48308_memory_ptr_$returns$_t_bool_$","typeString":"function (struct L2MessageInclusionProof memory) view returns (bool)"}},"id":42549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5171:29:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"arguments":[{"id":42551,"name":"_xDomainCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42539,"src":"5224:16:131","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":42552,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42542,"src":"5242:6:131","typeDescriptions":{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_memory_ptr","typeString":"struct L2MessageInclusionProof memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_memory_ptr","typeString":"struct L2MessageInclusionProof memory"}],"id":42550,"name":"_verifyStorageProof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42663,"src":"5204:19:131","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_struct$_L2MessageInclusionProof_$48308_memory_ptr_$returns$_t_bool_$","typeString":"function (bytes memory,struct L2MessageInclusionProof memory) pure returns (bool)"}},"id":42553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5204:45:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5171:78:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":42555,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5170:80:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":42546,"id":42556,"nodeType":"Return","src":"5163:87:131"}]},"documentation":{"id":42537,"nodeType":"StructuredDocumentation","src":"4598:412:131","text":" Verifies that the given message is valid.\n @dev modified from: https://github.com/ethereum-optimism/optimism/blob/9973c1da3211e094a180a8a96ba9f8bb1ab1b389/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol#L283-L288\n @param _xDomainCalldata Calldata to verify.\n @param _proof Inclusion proof for the message.\n @return Whether or not the provided message is valid."},"id":42558,"implemented":true,"kind":"function","modifiers":[],"name":"_verifyXDomainMessage","nameLocation":"5022:21:131","nodeType":"FunctionDefinition","parameters":{"id":42543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42539,"mutability":"mutable","name":"_xDomainCalldata","nameLocation":"5057:16:131","nodeType":"VariableDeclaration","scope":42558,"src":"5044:29:131","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42538,"name":"bytes","nodeType":"ElementaryTypeName","src":"5044:5:131","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":42542,"mutability":"mutable","name":"_proof","nameLocation":"5106:6:131","nodeType":"VariableDeclaration","scope":42558,"src":"5075:37:131","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_memory_ptr","typeString":"struct L2MessageInclusionProof"},"typeName":{"id":42541,"nodeType":"UserDefinedTypeName","pathNode":{"id":42540,"name":"L2MessageInclusionProof","nameLocations":["5075:23:131"],"nodeType":"IdentifierPath","referencedDeclaration":48308,"src":"5075:23:131"},"referencedDeclaration":48308,"src":"5075:23:131","typeDescriptions":{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_storage_ptr","typeString":"struct L2MessageInclusionProof"}},"visibility":"internal"}],"src":"5043:70:131"},"returnParameters":{"id":42546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42545,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42558,"src":"5149:4:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":42544,"name":"bool","nodeType":"ElementaryTypeName","src":"5149:4:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5148:6:131"},"scope":42688,"src":"5013:242:131","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":42577,"nodeType":"Block","src":"5737:136:131","statements":[{"expression":{"arguments":[{"expression":{"id":42569,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42562,"src":"5799:6:131","typeDescriptions":{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_memory_ptr","typeString":"struct L2MessageInclusionProof memory"}},"id":42570,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5806:9:131","memberName":"stateRoot","nodeType":"MemberAccess","referencedDeclaration":48297,"src":"5799:16:131","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":42571,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42562,"src":"5817:6:131","typeDescriptions":{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_memory_ptr","typeString":"struct L2MessageInclusionProof memory"}},"id":42572,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5824:20:131","memberName":"stateRootBatchHeader","nodeType":"MemberAccess","referencedDeclaration":48300,"src":"5817:27:131","typeDescriptions":{"typeIdentifier":"t_struct$_ChainBatchHeader_$48289_memory_ptr","typeString":"struct ChainBatchHeader memory"}},{"expression":{"id":42573,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42562,"src":"5846:6:131","typeDescriptions":{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_memory_ptr","typeString":"struct L2MessageInclusionProof memory"}},"id":42574,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5853:14:131","memberName":"stateRootProof","nodeType":"MemberAccess","referencedDeclaration":48303,"src":"5846:21:131","typeDescriptions":{"typeIdentifier":"t_struct$_ChainInclusionProof_$48295_memory_ptr","typeString":"struct ChainInclusionProof memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_struct$_ChainBatchHeader_$48289_memory_ptr","typeString":"struct ChainBatchHeader memory"},{"typeIdentifier":"t_struct$_ChainInclusionProof_$48295_memory_ptr","typeString":"struct ChainInclusionProof memory"}],"expression":{"id":42567,"name":"stateCommitmentChain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42346,"src":"5756:20:131","typeDescriptions":{"typeIdentifier":"t_contract$_IStateCommitmentChain_$48385","typeString":"contract IStateCommitmentChain"}},"id":42568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5777:21:131","memberName":"verifyStateCommitment","nodeType":"MemberAccess","referencedDeclaration":48375,"src":"5756:42:131","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_struct$_ChainBatchHeader_$48289_memory_ptr_$_t_struct$_ChainInclusionProof_$48295_memory_ptr_$returns$_t_bool_$","typeString":"function (bytes32,struct ChainBatchHeader memory,struct ChainInclusionProof memory) view external returns (bool)"}},"id":42575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5756:112:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":42566,"id":42576,"nodeType":"Return","src":"5743:125:131"}]},"documentation":{"id":42559,"nodeType":"StructuredDocumentation","src":"5259:376:131","text":" Verifies that the state root within an inclusion proof is valid.\n @dev modified from: https://github.com/ethereum-optimism/optimism/blob/9973c1da3211e094a180a8a96ba9f8bb1ab1b389/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol#L295-L311\n @param _proof Message inclusion proof.\n @return Whether or not the provided proof is valid."},"id":42578,"implemented":true,"kind":"function","modifiers":[],"name":"_verifyStateRootProof","nameLocation":"5647:21:131","nodeType":"FunctionDefinition","parameters":{"id":42563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42562,"mutability":"mutable","name":"_proof","nameLocation":"5700:6:131","nodeType":"VariableDeclaration","scope":42578,"src":"5669:37:131","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_memory_ptr","typeString":"struct L2MessageInclusionProof"},"typeName":{"id":42561,"nodeType":"UserDefinedTypeName","pathNode":{"id":42560,"name":"L2MessageInclusionProof","nameLocations":["5669:23:131"],"nodeType":"IdentifierPath","referencedDeclaration":48308,"src":"5669:23:131"},"referencedDeclaration":48308,"src":"5669:23:131","typeDescriptions":{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_storage_ptr","typeString":"struct L2MessageInclusionProof"}},"visibility":"internal"}],"src":"5668:39:131"},"returnParameters":{"id":42566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42565,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42578,"src":"5731:4:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":42564,"name":"bool","nodeType":"ElementaryTypeName","src":"5731:4:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5730:6:131"},"scope":42688,"src":"5638:235:131","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":42662,"nodeType":"Block","src":"6456:828:131","statements":[{"assignments":[42590],"declarations":[{"constant":false,"id":42590,"mutability":"mutable","name":"storageKey","nameLocation":"6470:10:131","nodeType":"VariableDeclaration","scope":42662,"src":"6462:18:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":42589,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6462:7:131","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":42608,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":42597,"name":"_xDomainCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42581,"src":"6553:16:131","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"id":42598,"name":"PredeployAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43885,"src":"6571:18:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PredeployAddresses_$43885_$","typeString":"type(library PredeployAddresses)"}},"id":42599,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6590:25:131","memberName":"L2_CROSS_DOMAIN_MESSENGER","nodeType":"MemberAccess","referencedDeclaration":43866,"src":"6571:44:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":42595,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6536:3:131","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":42596,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6540:12:131","memberName":"encodePacked","nodeType":"MemberAccess","src":"6536:16:131","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":42600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6536:80:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":42594,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"6526:9:131","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":42601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6526:91:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"hexValue":"30","id":42604,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6635:1:131","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":42603,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6627:7:131","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":42602,"name":"uint256","nodeType":"ElementaryTypeName","src":"6627:7:131","typeDescriptions":{}}},"id":42605,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6627:10:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":42592,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6500:3:131","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":42593,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6504:12:131","memberName":"encodePacked","nodeType":"MemberAccess","src":"6500:16:131","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":42606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6500:145:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":42591,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"6483:9:131","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":42607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6483:168:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6462:189:131"},{"assignments":[42610,42612],"declarations":[{"constant":false,"id":42610,"mutability":"mutable","name":"exists","nameLocation":"6664:6:131","nodeType":"VariableDeclaration","scope":42662,"src":"6659:11:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":42609,"name":"bool","nodeType":"ElementaryTypeName","src":"6659:4:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":42612,"mutability":"mutable","name":"encodedMessagePassingAccount","nameLocation":"6685:28:131","nodeType":"VariableDeclaration","scope":42662,"src":"6672:41:131","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42611,"name":"bytes","nodeType":"ElementaryTypeName","src":"6672:5:131","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":42625,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":42617,"name":"PredeployAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43885,"src":"6762:18:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PredeployAddresses_$43885_$","typeString":"type(library PredeployAddresses)"}},"id":42618,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6781:23:131","memberName":"L2_TO_L1_MESSAGE_PASSER","nodeType":"MemberAccess","referencedDeclaration":43851,"src":"6762:42:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":42615,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6745:3:131","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":42616,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6749:12:131","memberName":"encodePacked","nodeType":"MemberAccess","src":"6745:16:131","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":42619,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6745:60:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"id":42620,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42584,"src":"6813:6:131","typeDescriptions":{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_memory_ptr","typeString":"struct L2MessageInclusionProof memory"}},"id":42621,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6820:16:131","memberName":"stateTrieWitness","nodeType":"MemberAccess","referencedDeclaration":48305,"src":"6813:23:131","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"id":42622,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42584,"src":"6844:6:131","typeDescriptions":{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_memory_ptr","typeString":"struct L2MessageInclusionProof memory"}},"id":42623,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6851:9:131","memberName":"stateRoot","nodeType":"MemberAccess","referencedDeclaration":48297,"src":"6844:16:131","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":42613,"name":"SecureMerkleTrie","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44709,"src":"6717:16:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SecureMerkleTrie_$44709_$","typeString":"type(library SecureMerkleTrie)"}},"id":42614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6734:3:131","memberName":"get","nodeType":"MemberAccess","referencedDeclaration":44692,"src":"6717:20:131","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,bytes memory,bytes32) pure returns (bool,bytes memory)"}},"id":42624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6717:149:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6658:208:131"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":42629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42627,"name":"exists","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42610,"src":"6881:6:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"74727565","id":42628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6891:4:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"6881:14:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d6573736167652070617373696e67207072656465706c6f7920686173206e6f74206265656e20696e697469616c697a6564206f7220696e76616c69642070726f6f662070726f76696465642e","id":42630,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6897:79:131","typeDescriptions":{"typeIdentifier":"t_stringliteral_39eecfdff5c282a731d38dbcdc63390f0cf2731e0f36b58f09ddf52a0f962492","typeString":"literal_string \"Message passing predeploy has not been initialized or invalid proof provided.\""},"value":"Message passing predeploy has not been initialized or invalid proof provided."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_39eecfdff5c282a731d38dbcdc63390f0cf2731e0f36b58f09ddf52a0f962492","typeString":"literal_string \"Message passing predeploy has not been initialized or invalid proof provided.\""}],"id":42626,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6873:7:131","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6873:104:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42632,"nodeType":"ExpressionStatement","src":"6873:104:131"},{"assignments":[42637],"declarations":[{"constant":false,"id":42637,"mutability":"mutable","name":"account","nameLocation":"7011:7:131","nodeType":"VariableDeclaration","scope":42662,"src":"6984:34:131","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_EVMAccount_$43796_memory_ptr","typeString":"struct OVMCodec.EVMAccount"},"typeName":{"id":42636,"nodeType":"UserDefinedTypeName","pathNode":{"id":42635,"name":"OVMCodec.EVMAccount","nameLocations":["6984:8:131","6993:10:131"],"nodeType":"IdentifierPath","referencedDeclaration":43796,"src":"6984:19:131"},"referencedDeclaration":43796,"src":"6984:19:131","typeDescriptions":{"typeIdentifier":"t_struct$_EVMAccount_$43796_storage_ptr","typeString":"struct OVMCodec.EVMAccount"}},"visibility":"internal"}],"id":42642,"initialValue":{"arguments":[{"id":42640,"name":"encodedMessagePassingAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42612,"src":"7047:28:131","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":42638,"name":"OVMCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43845,"src":"7021:8:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_OVMCodec_$43845_$","typeString":"type(library OVMCodec)"}},"id":42639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7030:16:131","memberName":"decodeEVMAccount","nodeType":"MemberAccess","referencedDeclaration":43844,"src":"7021:25:131","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_EVMAccount_$43796_memory_ptr_$","typeString":"function (bytes memory) pure returns (struct OVMCodec.EVMAccount memory)"}},"id":42641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7021:55:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_EVMAccount_$43796_memory_ptr","typeString":"struct OVMCodec.EVMAccount memory"}},"nodeType":"VariableDeclarationStatement","src":"6984:92:131"},{"expression":{"arguments":[{"arguments":[{"id":42647,"name":"storageKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42590,"src":"7160:10:131","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":42645,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7143:3:131","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":42646,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7147:12:131","memberName":"encodePacked","nodeType":"MemberAccess","src":"7143:16:131","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":42648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7143:28:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"arguments":[{"hexValue":"31","id":42653,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7204:1:131","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":42652,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7198:5:131","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":42651,"name":"uint8","nodeType":"ElementaryTypeName","src":"7198:5:131","typeDescriptions":{}}},"id":42654,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7198:8:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":42649,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7181:3:131","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":42650,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7185:12:131","memberName":"encodePacked","nodeType":"MemberAccess","src":"7181:16:131","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":42655,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7181:26:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"id":42656,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42584,"src":"7217:6:131","typeDescriptions":{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_memory_ptr","typeString":"struct L2MessageInclusionProof memory"}},"id":42657,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7224:18:131","memberName":"storageTrieWitness","nodeType":"MemberAccess","referencedDeclaration":48307,"src":"7217:25:131","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"id":42658,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42637,"src":"7252:7:131","typeDescriptions":{"typeIdentifier":"t_struct$_EVMAccount_$43796_memory_ptr","typeString":"struct OVMCodec.EVMAccount memory"}},"id":42659,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7260:11:131","memberName":"storageRoot","nodeType":"MemberAccess","referencedDeclaration":43793,"src":"7252:19:131","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":42643,"name":"SecureMerkleTrie","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44709,"src":"7096:16:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SecureMerkleTrie_$44709_$","typeString":"type(library SecureMerkleTrie)"}},"id":42644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7113:20:131","memberName":"verifyInclusionProof","nodeType":"MemberAccess","referencedDeclaration":44664,"src":"7096:37:131","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes memory,bytes memory,bytes memory,bytes32) pure returns (bool)"}},"id":42660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7096:183:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":42588,"id":42661,"nodeType":"Return","src":"7083:196:131"}]},"documentation":{"id":42579,"nodeType":"StructuredDocumentation","src":"5877:434:131","text":" Verifies that the storage proof within an inclusion proof is valid.\n @dev modified from: https://github.com/ethereum-optimism/optimism/blob/9973c1da3211e094a180a8a96ba9f8bb1ab1b389/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol#L313-L357\n @param _xDomainCalldata Encoded message calldata.\n @param _proof Message inclusion proof.\n @return Whether or not the provided proof is valid."},"id":42663,"implemented":true,"kind":"function","modifiers":[],"name":"_verifyStorageProof","nameLocation":"6323:19:131","nodeType":"FunctionDefinition","parameters":{"id":42585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42581,"mutability":"mutable","name":"_xDomainCalldata","nameLocation":"6356:16:131","nodeType":"VariableDeclaration","scope":42663,"src":"6343:29:131","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42580,"name":"bytes","nodeType":"ElementaryTypeName","src":"6343:5:131","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":42584,"mutability":"mutable","name":"_proof","nameLocation":"6405:6:131","nodeType":"VariableDeclaration","scope":42663,"src":"6374:37:131","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_memory_ptr","typeString":"struct L2MessageInclusionProof"},"typeName":{"id":42583,"nodeType":"UserDefinedTypeName","pathNode":{"id":42582,"name":"L2MessageInclusionProof","nameLocations":["6374:23:131"],"nodeType":"IdentifierPath","referencedDeclaration":48308,"src":"6374:23:131"},"referencedDeclaration":48308,"src":"6374:23:131","typeDescriptions":{"typeIdentifier":"t_struct$_L2MessageInclusionProof_$48308_storage_ptr","typeString":"struct L2MessageInclusionProof"}},"visibility":"internal"}],"src":"6342:70:131"},"returnParameters":{"id":42588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42587,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42663,"src":"6448:4:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":42586,"name":"bool","nodeType":"ElementaryTypeName","src":"6448:4:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6447:6:131"},"scope":42688,"src":"6314:970:131","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42686,"nodeType":"Block","src":"7932:137:131","statements":[{"expression":{"arguments":[{"hexValue":"72656c61794d65737361676528616464726573732c616464726573732c62797465732c75696e7432353629","id":42679,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7975:45:131","typeDescriptions":{"typeIdentifier":"t_stringliteral_cbd4ece909957cc1dd89405b09b9838fb740ff058af3432bb6de0c5c84b205ce","typeString":"literal_string \"relayMessage(address,address,bytes,uint256)\""},"value":"relayMessage(address,address,bytes,uint256)"},{"id":42680,"name":"_target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42666,"src":"8022:7:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42681,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42668,"src":"8031:7:131","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42682,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42670,"src":"8040:8:131","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":42683,"name":"_messageNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42672,"src":"8050:13:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_cbd4ece909957cc1dd89405b09b9838fb740ff058af3432bb6de0c5c84b205ce","typeString":"literal_string \"relayMessage(address,address,bytes,uint256)\""},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":42677,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7951:3:131","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":42678,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7955:19:131","memberName":"encodeWithSignature","nodeType":"MemberAccess","src":"7951:23:131","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (string memory) pure returns (bytes memory)"}},"id":42684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7951:113:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":42676,"id":42685,"nodeType":"Return","src":"7938:126:131"}]},"documentation":{"id":42664,"nodeType":"StructuredDocumentation","src":"7288:472:131","text":" Generates the correct cross domain calldata for a message.\n @dev taken from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/bridge/Lib_CrossDomainUtils.sol\n @param _target Target contract address.\n @param _sender Message sender address.\n @param _message Message to send to the target.\n @param _messageNonce Nonce for the provided message.\n @return ABI encoded cross domain calldata."},"id":42687,"implemented":true,"kind":"function","modifiers":[],"name":"_encodeXDomainCalldata","nameLocation":"7772:22:131","nodeType":"FunctionDefinition","parameters":{"id":42673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42666,"mutability":"mutable","name":"_target","nameLocation":"7808:7:131","nodeType":"VariableDeclaration","scope":42687,"src":"7800:15:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42665,"name":"address","nodeType":"ElementaryTypeName","src":"7800:7:131","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42668,"mutability":"mutable","name":"_sender","nameLocation":"7829:7:131","nodeType":"VariableDeclaration","scope":42687,"src":"7821:15:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42667,"name":"address","nodeType":"ElementaryTypeName","src":"7821:7:131","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42670,"mutability":"mutable","name":"_message","nameLocation":"7855:8:131","nodeType":"VariableDeclaration","scope":42687,"src":"7842:21:131","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42669,"name":"bytes","nodeType":"ElementaryTypeName","src":"7842:5:131","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":42672,"mutability":"mutable","name":"_messageNonce","nameLocation":"7877:13:131","nodeType":"VariableDeclaration","scope":42687,"src":"7869:21:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42671,"name":"uint256","nodeType":"ElementaryTypeName","src":"7869:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7794:100:131"},"returnParameters":{"id":42676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42675,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42687,"src":"7918:12:131","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42674,"name":"bytes","nodeType":"ElementaryTypeName","src":"7918:5:131","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7917:14:131"},"scope":42688,"src":"7763:306:131","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":42689,"src":"724:7347:131","usedErrors":[39018,49697,49699,49701,49703,49705,49707,49709,50225,50227]}],"src":"46:8026:131"},"id":131},"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol","exportedSymbols":{"BaseOptimism":[42310],"Connector":[39244],"OptimismAmb":[48403],"OptimismSpokeConnector":[42841],"ProposedOwnable":[49928],"SpokeConnector":[40428]},"id":42842,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":42690,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:132"},{"absolutePath":"contracts/messaging/interfaces/ambs/optimism/OptimismAmb.sol","file":"../../interfaces/ambs/optimism/OptimismAmb.sol","id":42692,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42842,"sourceUnit":48404,"src":"71:75:132","symbolAliases":[{"foreign":{"id":42691,"name":"OptimismAmb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48403,"src":"79:11:132","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/SpokeConnector.sol","file":"../SpokeConnector.sol","id":42695,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42842,"sourceUnit":40429,"src":"148:70:132","symbolAliases":[{"foreign":{"id":42693,"name":"SpokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40428,"src":"156:14:132","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":42694,"name":"ProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49928,"src":"172:15:132","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/Connector.sol","file":"../Connector.sol","id":42697,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42842,"sourceUnit":39245,"src":"219:43:132","symbolAliases":[{"foreign":{"id":42696,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"227:9:132","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/optimism/BaseOptimism.sol","file":"./BaseOptimism.sol","id":42699,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42842,"sourceUnit":42311,"src":"264:48:132","symbolAliases":[{"foreign":{"id":42698,"name":"BaseOptimism","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42310,"src":"272:12:132","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":42700,"name":"SpokeConnector","nameLocations":["349:14:132"],"nodeType":"IdentifierPath","referencedDeclaration":40428,"src":"349:14:132"},"id":42701,"nodeType":"InheritanceSpecifier","src":"349:14:132"},{"baseName":{"id":42702,"name":"BaseOptimism","nameLocations":["365:12:132"],"nodeType":"IdentifierPath","referencedDeclaration":42310,"src":"365:12:132"},"id":42703,"nodeType":"InheritanceSpecifier","src":"365:12:132"}],"canonicalName":"OptimismSpokeConnector","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":42841,"linearizedBaseContracts":[42841,42310,39367,40428,10734,49688,38914,10680,11506,39292,47805,39244,47778,49928,50003],"name":"OptimismSpokeConnector","nameLocation":"323:22:132","nodeType":"ContractDefinition","nodes":[{"body":{"id":42743,"nodeType":"Block","src":"983:2:132","statements":[]},"id":42744,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":42728,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42705,"src":"768:7:132","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":42729,"name":"_mirrorDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42707,"src":"783:13:132","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":42730,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42709,"src":"804:4:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42731,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42711,"src":"816:12:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42732,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42713,"src":"836:16:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42733,"name":"_processGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42715,"src":"860:11:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":42734,"name":"_reserveGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42717,"src":"879:11:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":42735,"name":"_delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42719,"src":"898:12:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":42736,"name":"_merkle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42721,"src":"918:7:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42737,"name":"_watcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42723,"src":"933:15:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":42738,"kind":"baseConstructorSpecifier","modifierName":{"id":42727,"name":"SpokeConnector","nameLocations":["746:14:132"],"nodeType":"IdentifierPath","referencedDeclaration":40428,"src":"746:14:132"},"nodeType":"ModifierInvocation","src":"746:208:132"},{"arguments":[{"id":42740,"name":"_gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42725,"src":"972:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42741,"kind":"baseConstructorSpecifier","modifierName":{"id":42739,"name":"BaseOptimism","nameLocations":["959:12:132"],"nodeType":"IdentifierPath","referencedDeclaration":42310,"src":"959:12:132"},"nodeType":"ModifierInvocation","src":"959:21:132"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":42726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42705,"mutability":"mutable","name":"_domain","nameLocation":"449:7:132","nodeType":"VariableDeclaration","scope":42744,"src":"442:14:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":42704,"name":"uint32","nodeType":"ElementaryTypeName","src":"442:6:132","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":42707,"mutability":"mutable","name":"_mirrorDomain","nameLocation":"469:13:132","nodeType":"VariableDeclaration","scope":42744,"src":"462:20:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":42706,"name":"uint32","nodeType":"ElementaryTypeName","src":"462:6:132","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":42709,"mutability":"mutable","name":"_amb","nameLocation":"496:4:132","nodeType":"VariableDeclaration","scope":42744,"src":"488:12:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42708,"name":"address","nodeType":"ElementaryTypeName","src":"488:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42711,"mutability":"mutable","name":"_rootManager","nameLocation":"514:12:132","nodeType":"VariableDeclaration","scope":42744,"src":"506:20:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42710,"name":"address","nodeType":"ElementaryTypeName","src":"506:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42713,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"540:16:132","nodeType":"VariableDeclaration","scope":42744,"src":"532:24:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42712,"name":"address","nodeType":"ElementaryTypeName","src":"532:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42715,"mutability":"mutable","name":"_processGas","nameLocation":"570:11:132","nodeType":"VariableDeclaration","scope":42744,"src":"562:19:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42714,"name":"uint256","nodeType":"ElementaryTypeName","src":"562:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42717,"mutability":"mutable","name":"_reserveGas","nameLocation":"595:11:132","nodeType":"VariableDeclaration","scope":42744,"src":"587:19:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42716,"name":"uint256","nodeType":"ElementaryTypeName","src":"587:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42719,"mutability":"mutable","name":"_delayBlocks","nameLocation":"620:12:132","nodeType":"VariableDeclaration","scope":42744,"src":"612:20:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42718,"name":"uint256","nodeType":"ElementaryTypeName","src":"612:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42721,"mutability":"mutable","name":"_merkle","nameLocation":"646:7:132","nodeType":"VariableDeclaration","scope":42744,"src":"638:15:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42720,"name":"address","nodeType":"ElementaryTypeName","src":"638:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42723,"mutability":"mutable","name":"_watcherManager","nameLocation":"667:15:132","nodeType":"VariableDeclaration","scope":42744,"src":"659:23:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42722,"name":"address","nodeType":"ElementaryTypeName","src":"659:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42725,"mutability":"mutable","name":"_gasCap","nameLocation":"696:7:132","nodeType":"VariableDeclaration","scope":42744,"src":"688:15:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42724,"name":"uint256","nodeType":"ElementaryTypeName","src":"688:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"436:305:132"},"returnParameters":{"id":42742,"nodeType":"ParameterList","parameters":[],"src":"983:0:132"},"scope":42841,"src":"425:560:132","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[39228],"body":{"id":42757,"nodeType":"Block","src":"1113:47:132","statements":[{"expression":{"arguments":[{"id":42753,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"1140:3:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42754,"name":"_expected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42746,"src":"1145:9:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":42752,"name":"_verifySender","nodeType":"Identifier","overloadedDeclarations":[42758,42280],"referencedDeclaration":42280,"src":"1126:13:132","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) view returns (bool)"}},"id":42755,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1126:29:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":42751,"id":42756,"nodeType":"Return","src":"1119:36:132"}]},"id":42758,"implemented":true,"kind":"function","modifiers":[],"name":"_verifySender","nameLocation":"1042:13:132","nodeType":"FunctionDefinition","overrides":{"id":42748,"nodeType":"OverrideSpecifier","overrides":[],"src":"1089:8:132"},"parameters":{"id":42747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42746,"mutability":"mutable","name":"_expected","nameLocation":"1064:9:132","nodeType":"VariableDeclaration","scope":42758,"src":"1056:17:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42745,"name":"address","nodeType":"ElementaryTypeName","src":"1056:7:132","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1055:19:132"},"returnParameters":{"id":42751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42750,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42758,"src":"1107:4:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":42749,"name":"bool","nodeType":"ElementaryTypeName","src":"1107:4:132","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1106:6:132"},"scope":42841,"src":"1033:127:132","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[39834,49874],"body":{"id":42767,"nodeType":"Block","src":"1326:2:132","statements":[]},"documentation":{"id":42759,"nodeType":"StructuredDocumentation","src":"1164:63:132","text":" @notice Should not be able to renounce ownership"},"functionSelector":"715018a6","id":42768,"implemented":true,"kind":"function","modifiers":[{"id":42765,"kind":"modifierInvocation","modifierName":{"id":42764,"name":"onlyOwner","nameLocations":["1316:9:132"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"1316:9:132"},"nodeType":"ModifierInvocation","src":"1316:9:132"}],"name":"renounceOwnership","nameLocation":"1239:17:132","nodeType":"FunctionDefinition","overrides":{"id":42763,"nodeType":"OverrideSpecifier","overrides":[{"id":42761,"name":"SpokeConnector","nameLocations":["1283:14:132"],"nodeType":"IdentifierPath","referencedDeclaration":40428,"src":"1283:14:132"},{"id":42762,"name":"ProposedOwnable","nameLocations":["1299:15:132"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"1299:15:132"}],"src":"1274:41:132"},"parameters":{"id":42760,"nodeType":"ParameterList","parameters":[],"src":"1256:2:132"},"returnParameters":{"id":42766,"nodeType":"ParameterList","parameters":[],"src":"1326:0:132"},"scope":42841,"src":"1230:98:132","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[39210],"body":{"id":42809,"nodeType":"Block","src":"1484:303:132","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":42778,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42771,"src":"1548:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":42779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1554:6:132","memberName":"length","nodeType":"MemberAccess","src":"1548:12:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":42780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1564:2:132","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"1548:18:132","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2164617461206c656e677468","id":42782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1568:14:132","typeDescriptions":{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""},"value":"!data length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""}],"id":42777,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1540:7:132","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1540:43:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42784,"nodeType":"ExpressionStatement","src":"1540:43:132"},{"assignments":[42786],"declarations":[{"constant":false,"id":42786,"mutability":"mutable","name":"_calldata","nameLocation":"1602:9:132","nodeType":"VariableDeclaration","scope":42809,"src":"1589:22:132","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42785,"name":"bytes","nodeType":"ElementaryTypeName","src":"1589:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":42794,"initialValue":{"arguments":[{"expression":{"expression":{"id":42789,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"1637:9:132","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Connector_$39244_$","typeString":"type(contract Connector)"}},"id":42790,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1647:14:132","memberName":"processMessage","nodeType":"MemberAccess","referencedDeclaration":39189,"src":"1637:24:132","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function Connector.processMessage(bytes memory)"}},"id":42791,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1662:8:132","memberName":"selector","nodeType":"MemberAccess","src":"1637:33:132","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":42792,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42771,"src":"1672:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":42787,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1614:3:132","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":42788,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1618:18:132","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"1614:22:132","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":42793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1614:64:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"1589:89:132"},{"expression":{"arguments":[{"id":42799,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"1713:15:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42800,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42786,"src":"1730:9:132","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"arguments":[{"id":42804,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42773,"src":"1767:12:132","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":42803,"name":"_getGasFromEncoded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42309,"src":"1748:18:132","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (bytes memory) view returns (uint256)"}},"id":42805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1748:32:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":42802,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1741:6:132","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":42801,"name":"uint32","nodeType":"ElementaryTypeName","src":"1741:6:132","typeDescriptions":{}}},"id":42806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1741:40:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"arguments":[{"id":42796,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"1696:3:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":42795,"name":"OptimismAmb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48403,"src":"1684:11:132","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_OptimismAmb_$48403_$","typeString":"type(contract OptimismAmb)"}},"id":42797,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1684:16:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_OptimismAmb_$48403","typeString":"contract OptimismAmb"}},"id":42798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1701:11:132","memberName":"sendMessage","nodeType":"MemberAccess","referencedDeclaration":48397,"src":"1684:28:132","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint32_$returns$__$","typeString":"function (address,bytes memory,uint32) external"}},"id":42807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1684:98:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42808,"nodeType":"ExpressionStatement","src":"1684:98:132"}]},"documentation":{"id":42769,"nodeType":"StructuredDocumentation","src":"1332:62:132","text":" @dev Sends `outboundRoot` to root manager on l1"},"id":42810,"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessage","nameLocation":"1406:12:132","nodeType":"FunctionDefinition","overrides":{"id":42775,"nodeType":"OverrideSpecifier","overrides":[],"src":"1475:8:132"},"parameters":{"id":42774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42771,"mutability":"mutable","name":"_data","nameLocation":"1432:5:132","nodeType":"VariableDeclaration","scope":42810,"src":"1419:18:132","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42770,"name":"bytes","nodeType":"ElementaryTypeName","src":"1419:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":42773,"mutability":"mutable","name":"_encodedData","nameLocation":"1452:12:132","nodeType":"VariableDeclaration","scope":42810,"src":"1439:25:132","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42772,"name":"bytes","nodeType":"ElementaryTypeName","src":"1439:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1418:47:132"},"returnParameters":{"id":42776,"nodeType":"ParameterList","parameters":[],"src":"1484:0:132"},"scope":42841,"src":"1397:390:132","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[39220],"body":{"id":42839,"nodeType":"Block","src":"1977:283:132","statements":[{"expression":{"arguments":[{"arguments":[{"id":42819,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"2051:15:132","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":42818,"name":"_verifySender","nodeType":"Identifier","overloadedDeclarations":[42758,42280],"referencedDeclaration":42758,"src":"2037:13:132","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":42820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2037:30:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216d6972726f72436f6e6e6563746f72","id":42821,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2069:18:132","typeDescriptions":{"typeIdentifier":"t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d","typeString":"literal_string \"!mirrorConnector\""},"value":"!mirrorConnector"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d","typeString":"literal_string \"!mirrorConnector\""}],"id":42817,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2029:7:132","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2029:59:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42823,"nodeType":"ExpressionStatement","src":"2029:59:132"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":42825,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42813,"src":"2153:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":42826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2159:6:132","memberName":"length","nodeType":"MemberAccess","src":"2153:12:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":42827,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2169:2:132","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"2153:18:132","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c656e677468","id":42829,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2173:9:132","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""},"value":"!length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""}],"id":42824,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2145:7:132","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2145:38:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42831,"nodeType":"ExpressionStatement","src":"2145:38:132"},{"expression":{"arguments":[{"arguments":[{"id":42835,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42813,"src":"2248:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":42834,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2240:7:132","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":42833,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2240:7:132","typeDescriptions":{}}},"id":42836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2240:14:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":42832,"name":"receiveAggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40160,"src":"2219:20:132","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":42837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2219:36:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42838,"nodeType":"ExpressionStatement","src":"2219:36:132"}]},"documentation":{"id":42811,"nodeType":"StructuredDocumentation","src":"1791:120:132","text":" @dev Handles an incoming `aggregateRoot`\n NOTE: Could store latest root sent and prove aggregate root"},"id":42840,"implemented":true,"kind":"function","modifiers":[],"name":"_processMessage","nameLocation":"1923:15:132","nodeType":"FunctionDefinition","overrides":{"id":42815,"nodeType":"OverrideSpecifier","overrides":[],"src":"1968:8:132"},"parameters":{"id":42814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42813,"mutability":"mutable","name":"_data","nameLocation":"1952:5:132","nodeType":"VariableDeclaration","scope":42840,"src":"1939:18:132","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42812,"name":"bytes","nodeType":"ElementaryTypeName","src":"1939:5:132","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1938:20:132"},"returnParameters":{"id":42816,"nodeType":"ParameterList","parameters":[],"src":"1977:0:132"},"scope":42841,"src":"1914:346:132","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":42842,"src":"314:1948:132","usedErrors":[39018,49630,49697,49699,49701,49703,49705,49707,49709,50225,50227,50229,50231,50233]}],"src":"46:2217:132"},"id":132},"contracts/messaging/connectors/optimism/lib/BytesUtils.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/optimism/lib/BytesUtils.sol","exportedSymbols":{"BytesUtils":[43112]},"id":43113,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":42843,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:133"},{"abstract":false,"baseContracts":[],"canonicalName":"BytesUtils","contractDependencies":[],"contractKind":"library","documentation":{"id":42844,"nodeType":"StructuredDocumentation","src":"71:177:133","text":" @title BytesUtils\n @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/utils/Lib_BytesUtils.sol"},"fullyImplemented":true,"id":43112,"linearizedBaseContracts":[43112],"name":"BytesUtils","nameLocation":"257:10:133","nodeType":"ContractDefinition","nodes":[{"body":{"id":42889,"nodeType":"Block","src":"474:2330:133","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42856,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42850,"src":"488:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"3331","id":42857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"498:2:133","typeDescriptions":{"typeIdentifier":"t_rational_31_by_1","typeString":"int_const 31"},"value":"31"},"src":"488:12:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":42859,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42850,"src":"504:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"488:23:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"736c6963655f6f766572666c6f77","id":42861,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"513:16:133","typeDescriptions":{"typeIdentifier":"t_stringliteral_5d3d629f76473d94377d221b1f1c8f2161f7b65cab69e095662ec5d0e026c17e","typeString":"literal_string \"slice_overflow\""},"value":"slice_overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5d3d629f76473d94377d221b1f1c8f2161f7b65cab69e095662ec5d0e026c17e","typeString":"literal_string \"slice_overflow\""}],"id":42855,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"480:7:133","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"480:50:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42863,"nodeType":"ExpressionStatement","src":"480:50:133"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42865,"name":"_start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42848,"src":"544:6:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":42866,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42850,"src":"553:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"544:16:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":42868,"name":"_start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42848,"src":"564:6:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"544:26:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"736c6963655f6f766572666c6f77","id":42870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"572:16:133","typeDescriptions":{"typeIdentifier":"t_stringliteral_5d3d629f76473d94377d221b1f1c8f2161f7b65cab69e095662ec5d0e026c17e","typeString":"literal_string \"slice_overflow\""},"value":"slice_overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5d3d629f76473d94377d221b1f1c8f2161f7b65cab69e095662ec5d0e026c17e","typeString":"literal_string \"slice_overflow\""}],"id":42864,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"536:7:133","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"536:53:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42872,"nodeType":"ExpressionStatement","src":"536:53:133"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":42874,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42846,"src":"603:6:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":42875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"610:6:133","memberName":"length","nodeType":"MemberAccess","src":"603:13:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42876,"name":"_start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42848,"src":"620:6:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":42877,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42850,"src":"629:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"620:16:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"603:33:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"736c6963655f6f75744f66426f756e6473","id":42880,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"638:19:133","typeDescriptions":{"typeIdentifier":"t_stringliteral_cca2258dcc0d08c244435525255fbef9116c9a31b4c29471218f002bbbceb7a0","typeString":"literal_string \"slice_outOfBounds\""},"value":"slice_outOfBounds"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cca2258dcc0d08c244435525255fbef9116c9a31b4c29471218f002bbbceb7a0","typeString":"literal_string \"slice_outOfBounds\""}],"id":42873,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"595:7:133","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"595:63:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42882,"nodeType":"ExpressionStatement","src":"595:63:133"},{"assignments":[42884],"declarations":[{"constant":false,"id":42884,"mutability":"mutable","name":"tempBytes","nameLocation":"678:9:133","nodeType":"VariableDeclaration","scope":42889,"src":"665:22:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42883,"name":"bytes","nodeType":"ElementaryTypeName","src":"665:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":42885,"nodeType":"VariableDeclarationStatement","src":"665:22:133"},{"AST":{"nodeType":"YulBlock","src":"703:2074:133","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"747:1686:133","statements":[{"nodeType":"YulAssignment","src":"879:24:133","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"898:4:133","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"892:5:133"},"nodeType":"YulFunctionCall","src":"892:11:133"},"variableNames":[{"name":"tempBytes","nodeType":"YulIdentifier","src":"879:9:133"}]},{"nodeType":"YulVariableDeclaration","src":"1455:33:133","value":{"arguments":[{"name":"_length","nodeType":"YulIdentifier","src":"1476:7:133"},{"kind":"number","nodeType":"YulLiteral","src":"1485:2:133","type":"","value":"31"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1472:3:133"},"nodeType":"YulFunctionCall","src":"1472:16:133"},"variables":[{"name":"lengthmod","nodeType":"YulTypedName","src":"1459:9:133","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1769:70:133","value":{"arguments":[{"arguments":[{"name":"tempBytes","nodeType":"YulIdentifier","src":"1787:9:133"},{"name":"lengthmod","nodeType":"YulIdentifier","src":"1798:9:133"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1783:3:133"},"nodeType":"YulFunctionCall","src":"1783:25:133"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1814:4:133","type":"","value":"0x20"},{"arguments":[{"name":"lengthmod","nodeType":"YulIdentifier","src":"1827:9:133"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1820:6:133"},"nodeType":"YulFunctionCall","src":"1820:17:133"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"1810:3:133"},"nodeType":"YulFunctionCall","src":"1810:28:133"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1779:3:133"},"nodeType":"YulFunctionCall","src":"1779:60:133"},"variables":[{"name":"mc","nodeType":"YulTypedName","src":"1773:2:133","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1848:27:133","value":{"arguments":[{"name":"mc","nodeType":"YulIdentifier","src":"1863:2:133"},{"name":"_length","nodeType":"YulIdentifier","src":"1867:7:133"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1859:3:133"},"nodeType":"YulFunctionCall","src":"1859:16:133"},"variables":[{"name":"end","nodeType":"YulTypedName","src":"1852:3:133","type":""}]},{"body":{"nodeType":"YulBlock","src":"2183:43:133","statements":[{"expression":{"arguments":[{"name":"mc","nodeType":"YulIdentifier","src":"2202:2:133"},{"arguments":[{"name":"cc","nodeType":"YulIdentifier","src":"2212:2:133"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2206:5:133"},"nodeType":"YulFunctionCall","src":"2206:9:133"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2195:6:133"},"nodeType":"YulFunctionCall","src":"2195:21:133"},"nodeType":"YulExpressionStatement","src":"2195:21:133"}]},"condition":{"arguments":[{"name":"mc","nodeType":"YulIdentifier","src":"2102:2:133"},{"name":"end","nodeType":"YulIdentifier","src":"2106:3:133"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2099:2:133"},"nodeType":"YulFunctionCall","src":"2099:11:133"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2111:71:133","statements":[{"nodeType":"YulAssignment","src":"2123:19:133","value":{"arguments":[{"name":"mc","nodeType":"YulIdentifier","src":"2133:2:133"},{"kind":"number","nodeType":"YulLiteral","src":"2137:4:133","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2129:3:133"},"nodeType":"YulFunctionCall","src":"2129:13:133"},"variableNames":[{"name":"mc","nodeType":"YulIdentifier","src":"2123:2:133"}]},{"nodeType":"YulAssignment","src":"2153:19:133","value":{"arguments":[{"name":"cc","nodeType":"YulIdentifier","src":"2163:2:133"},{"kind":"number","nodeType":"YulLiteral","src":"2167:4:133","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2159:3:133"},"nodeType":"YulFunctionCall","src":"2159:13:133"},"variableNames":[{"name":"cc","nodeType":"YulIdentifier","src":"2153:2:133"}]}]},"pre":{"nodeType":"YulBlock","src":"1889:209:133","statements":[{"nodeType":"YulVariableDeclaration","src":"2008:80:133","value":{"arguments":[{"arguments":[{"arguments":[{"name":"_bytes","nodeType":"YulIdentifier","src":"2030:6:133"},{"name":"lengthmod","nodeType":"YulIdentifier","src":"2038:9:133"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2026:3:133"},"nodeType":"YulFunctionCall","src":"2026:22:133"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2054:4:133","type":"","value":"0x20"},{"arguments":[{"name":"lengthmod","nodeType":"YulIdentifier","src":"2067:9:133"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2060:6:133"},"nodeType":"YulFunctionCall","src":"2060:17:133"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"2050:3:133"},"nodeType":"YulFunctionCall","src":"2050:28:133"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2022:3:133"},"nodeType":"YulFunctionCall","src":"2022:57:133"},{"name":"_start","nodeType":"YulIdentifier","src":"2081:6:133"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2018:3:133"},"nodeType":"YulFunctionCall","src":"2018:70:133"},"variables":[{"name":"cc","nodeType":"YulTypedName","src":"2012:2:133","type":""}]}]},"src":"1885:341:133"},{"expression":{"arguments":[{"name":"tempBytes","nodeType":"YulIdentifier","src":"2243:9:133"},{"name":"_length","nodeType":"YulIdentifier","src":"2254:7:133"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2236:6:133"},"nodeType":"YulFunctionCall","src":"2236:26:133"},"nodeType":"YulExpressionStatement","src":"2236:26:133"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2393:4:133","type":"","value":"0x40"},{"arguments":[{"arguments":[{"name":"mc","nodeType":"YulIdentifier","src":"2407:2:133"},{"kind":"number","nodeType":"YulLiteral","src":"2411:2:133","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2403:3:133"},"nodeType":"YulFunctionCall","src":"2403:11:133"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2420:2:133","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2416:3:133"},"nodeType":"YulFunctionCall","src":"2416:7:133"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2399:3:133"},"nodeType":"YulFunctionCall","src":"2399:25:133"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2386:6:133"},"nodeType":"YulFunctionCall","src":"2386:39:133"},"nodeType":"YulExpressionStatement","src":"2386:39:133"}]},"nodeType":"YulCase","src":"740:1693:133","value":{"kind":"number","nodeType":"YulLiteral","src":"745:1:133","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"2525:246:133","statements":[{"nodeType":"YulAssignment","src":"2535:24:133","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2554:4:133","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2548:5:133"},"nodeType":"YulFunctionCall","src":"2548:11:133"},"variableNames":[{"name":"tempBytes","nodeType":"YulIdentifier","src":"2535:9:133"}]},{"expression":{"arguments":[{"name":"tempBytes","nodeType":"YulIdentifier","src":"2706:9:133"},{"kind":"number","nodeType":"YulLiteral","src":"2717:1:133","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2699:6:133"},"nodeType":"YulFunctionCall","src":"2699:20:133"},"nodeType":"YulExpressionStatement","src":"2699:20:133"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2736:4:133","type":"","value":"0x40"},{"arguments":[{"name":"tempBytes","nodeType":"YulIdentifier","src":"2746:9:133"},{"kind":"number","nodeType":"YulLiteral","src":"2757:4:133","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2742:3:133"},"nodeType":"YulFunctionCall","src":"2742:20:133"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2729:6:133"},"nodeType":"YulFunctionCall","src":"2729:34:133"},"nodeType":"YulExpressionStatement","src":"2729:34:133"}]},"nodeType":"YulCase","src":"2517:254:133","value":"default"}],"expression":{"arguments":[{"name":"_length","nodeType":"YulIdentifier","src":"725:7:133"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"718:6:133"},"nodeType":"YulFunctionCall","src":"718:15:133"},"nodeType":"YulSwitch","src":"711:2060:133"}]},"evmVersion":"london","externalReferences":[{"declaration":42846,"isOffset":false,"isSlot":false,"src":"2030:6:133","valueSize":1},{"declaration":42850,"isOffset":false,"isSlot":false,"src":"1476:7:133","valueSize":1},{"declaration":42850,"isOffset":false,"isSlot":false,"src":"1867:7:133","valueSize":1},{"declaration":42850,"isOffset":false,"isSlot":false,"src":"2254:7:133","valueSize":1},{"declaration":42850,"isOffset":false,"isSlot":false,"src":"725:7:133","valueSize":1},{"declaration":42848,"isOffset":false,"isSlot":false,"src":"2081:6:133","valueSize":1},{"declaration":42884,"isOffset":false,"isSlot":false,"src":"1787:9:133","valueSize":1},{"declaration":42884,"isOffset":false,"isSlot":false,"src":"2243:9:133","valueSize":1},{"declaration":42884,"isOffset":false,"isSlot":false,"src":"2535:9:133","valueSize":1},{"declaration":42884,"isOffset":false,"isSlot":false,"src":"2706:9:133","valueSize":1},{"declaration":42884,"isOffset":false,"isSlot":false,"src":"2746:9:133","valueSize":1},{"declaration":42884,"isOffset":false,"isSlot":false,"src":"879:9:133","valueSize":1}],"id":42886,"nodeType":"InlineAssembly","src":"694:2083:133"},{"expression":{"id":42887,"name":"tempBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42884,"src":"2790:9:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":42854,"id":42888,"nodeType":"Return","src":"2783:16:133"}]},"id":42890,"implemented":true,"kind":"function","modifiers":[],"name":"slice","nameLocation":"361:5:133","nodeType":"FunctionDefinition","parameters":{"id":42851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42846,"mutability":"mutable","name":"_bytes","nameLocation":"385:6:133","nodeType":"VariableDeclaration","scope":42890,"src":"372:19:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42845,"name":"bytes","nodeType":"ElementaryTypeName","src":"372:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":42848,"mutability":"mutable","name":"_start","nameLocation":"405:6:133","nodeType":"VariableDeclaration","scope":42890,"src":"397:14:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42847,"name":"uint256","nodeType":"ElementaryTypeName","src":"397:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42850,"mutability":"mutable","name":"_length","nameLocation":"425:7:133","nodeType":"VariableDeclaration","scope":42890,"src":"417:15:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42849,"name":"uint256","nodeType":"ElementaryTypeName","src":"417:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"366:70:133"},"returnParameters":{"id":42854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42853,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42890,"src":"460:12:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42852,"name":"bytes","nodeType":"ElementaryTypeName","src":"460:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"459:14:133"},"scope":43112,"src":"352:2452:133","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42919,"nodeType":"Block","src":"2897:129:133","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42899,"name":"_start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42894,"src":"2907:6:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":42900,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42892,"src":"2917:6:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":42901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2924:6:133","memberName":"length","nodeType":"MemberAccess","src":"2917:13:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2907:23:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42909,"nodeType":"IfStatement","src":"2903:60:133","trueBody":{"id":42908,"nodeType":"Block","src":"2932:31:133","statements":[{"expression":{"arguments":[{"hexValue":"","id":42905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2953:2:133","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":42904,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2947:5:133","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":42903,"name":"bytes","nodeType":"ElementaryTypeName","src":"2947:5:133","typeDescriptions":{}}},"id":42906,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2947:9:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":42898,"id":42907,"nodeType":"Return","src":"2940:16:133"}]}},{"expression":{"arguments":[{"id":42911,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42892,"src":"2982:6:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":42912,"name":"_start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42894,"src":"2990:6:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":42913,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42892,"src":"2998:6:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":42914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3005:6:133","memberName":"length","nodeType":"MemberAccess","src":"2998:13:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":42915,"name":"_start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42894,"src":"3014:6:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2998:22:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":42910,"name":"slice","nodeType":"Identifier","overloadedDeclarations":[42890,42920],"referencedDeclaration":42890,"src":"2976:5:133","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,uint256,uint256) pure returns (bytes memory)"}},"id":42917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2976:45:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":42898,"id":42918,"nodeType":"Return","src":"2969:52:133"}]},"id":42920,"implemented":true,"kind":"function","modifiers":[],"name":"slice","nameLocation":"2817:5:133","nodeType":"FunctionDefinition","parameters":{"id":42895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42892,"mutability":"mutable","name":"_bytes","nameLocation":"2836:6:133","nodeType":"VariableDeclaration","scope":42920,"src":"2823:19:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42891,"name":"bytes","nodeType":"ElementaryTypeName","src":"2823:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":42894,"mutability":"mutable","name":"_start","nameLocation":"2852:6:133","nodeType":"VariableDeclaration","scope":42920,"src":"2844:14:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42893,"name":"uint256","nodeType":"ElementaryTypeName","src":"2844:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2822:37:133"},"returnParameters":{"id":42898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42897,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42920,"src":"2883:12:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42896,"name":"bytes","nodeType":"ElementaryTypeName","src":"2883:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2882:14:133"},"scope":43112,"src":"2808:218:133","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42947,"nodeType":"Block","src":"3102:228:133","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":42927,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42922,"src":"3112:6:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":42928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3119:6:133","memberName":"length","nodeType":"MemberAccess","src":"3112:13:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"3332","id":42929,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3128:2:133","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"3112:18:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42938,"nodeType":"IfStatement","src":"3108:131:133","trueBody":{"id":42937,"nodeType":"Block","src":"3132:107:133","statements":[{"assignments":[42932],"declarations":[{"constant":false,"id":42932,"mutability":"mutable","name":"ret","nameLocation":"3148:3:133","nodeType":"VariableDeclaration","scope":42937,"src":"3140:11:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":42931,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3140:7:133","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":42933,"nodeType":"VariableDeclarationStatement","src":"3140:11:133"},{"AST":{"nodeType":"YulBlock","src":"3168:47:133","statements":[{"nodeType":"YulAssignment","src":"3178:29:133","value":{"arguments":[{"arguments":[{"name":"_bytes","nodeType":"YulIdentifier","src":"3195:6:133"},{"kind":"number","nodeType":"YulLiteral","src":"3203:2:133","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3191:3:133"},"nodeType":"YulFunctionCall","src":"3191:15:133"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3185:5:133"},"nodeType":"YulFunctionCall","src":"3185:22:133"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"3178:3:133"}]}]},"evmVersion":"london","externalReferences":[{"declaration":42922,"isOffset":false,"isSlot":false,"src":"3195:6:133","valueSize":1},{"declaration":42932,"isOffset":false,"isSlot":false,"src":"3178:3:133","valueSize":1}],"id":42934,"nodeType":"InlineAssembly","src":"3159:56:133"},{"expression":{"id":42935,"name":"ret","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42932,"src":"3229:3:133","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":42926,"id":42936,"nodeType":"Return","src":"3222:10:133"}]}},{"expression":{"arguments":[{"id":42941,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42922,"src":"3263:6:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":42943,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3272:7:133","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":42942,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3272:7:133","typeDescriptions":{}}}],"id":42944,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3271:9:133","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"}],"expression":{"id":42939,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3252:3:133","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":42940,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3256:6:133","memberName":"decode","nodeType":"MemberAccess","src":"3252:10:133","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":42945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3252:29:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":42926,"id":42946,"nodeType":"Return","src":"3245:36:133"}]},"id":42948,"implemented":true,"kind":"function","modifiers":[],"name":"toBytes32","nameLocation":"3039:9:133","nodeType":"FunctionDefinition","parameters":{"id":42923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42922,"mutability":"mutable","name":"_bytes","nameLocation":"3062:6:133","nodeType":"VariableDeclaration","scope":42948,"src":"3049:19:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42921,"name":"bytes","nodeType":"ElementaryTypeName","src":"3049:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3048:21:133"},"returnParameters":{"id":42926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42925,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42948,"src":"3093:7:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":42924,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3093:7:133","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3092:9:133"},"scope":43112,"src":"3030:300:133","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42962,"nodeType":"Block","src":"3406:44:133","statements":[{"expression":{"arguments":[{"arguments":[{"id":42958,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42950,"src":"3437:6:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":42957,"name":"toBytes32","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42948,"src":"3427:9:133","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":42959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3427:17:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":42956,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3419:7:133","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":42955,"name":"uint256","nodeType":"ElementaryTypeName","src":"3419:7:133","typeDescriptions":{}}},"id":42960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3419:26:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":42954,"id":42961,"nodeType":"Return","src":"3412:33:133"}]},"id":42963,"implemented":true,"kind":"function","modifiers":[],"name":"toUint256","nameLocation":"3343:9:133","nodeType":"FunctionDefinition","parameters":{"id":42951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42950,"mutability":"mutable","name":"_bytes","nameLocation":"3366:6:133","nodeType":"VariableDeclaration","scope":42963,"src":"3353:19:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42949,"name":"bytes","nodeType":"ElementaryTypeName","src":"3353:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3352:21:133"},"returnParameters":{"id":42954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42953,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42963,"src":"3397:7:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42952,"name":"uint256","nodeType":"ElementaryTypeName","src":"3397:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3396:9:133"},"scope":43112,"src":"3334:116:133","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43032,"nodeType":"Block","src":"3531:297:133","statements":[{"assignments":[42971],"declarations":[{"constant":false,"id":42971,"mutability":"mutable","name":"nibbles","nameLocation":"3550:7:133","nodeType":"VariableDeclaration","scope":43032,"src":"3537:20:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42970,"name":"bytes","nodeType":"ElementaryTypeName","src":"3537:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":42979,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":42974,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42965,"src":"3570:6:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":42975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3577:6:133","memberName":"length","nodeType":"MemberAccess","src":"3570:13:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":42976,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3586:1:133","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"3570:17:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":42973,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3560:9:133","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":42972,"name":"bytes","nodeType":"ElementaryTypeName","src":"3564:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":42978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3560:28:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3537:51:133"},{"assignments":[42981],"declarations":[{"constant":false,"id":42981,"mutability":"mutable","name":"len","nameLocation":"3603:3:133","nodeType":"VariableDeclaration","scope":43032,"src":"3595:11:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42980,"name":"uint256","nodeType":"ElementaryTypeName","src":"3595:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42984,"initialValue":{"expression":{"id":42982,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42965,"src":"3609:6:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":42983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3616:6:133","memberName":"length","nodeType":"MemberAccess","src":"3609:13:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3595:27:133"},{"body":{"id":43028,"nodeType":"Block","src":"3659:144:133","statements":[{"expression":{"id":43002,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":42992,"name":"nibbles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42971,"src":"3667:7:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":42996,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42993,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42986,"src":"3675:1:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":42994,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3679:1:133","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"3675:5:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3667:14:133","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":43001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":42997,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42965,"src":"3684:6:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":42999,"indexExpression":{"id":42998,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42986,"src":"3691:1:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3684:9:133","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"34","id":43000,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3697:1:133","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"3684:14:133","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"3667:31:133","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":43003,"nodeType":"ExpressionStatement","src":"3667:31:133"},{"expression":{"id":43022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":43004,"name":"nibbles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42971,"src":"3706:7:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43010,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43005,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42986,"src":"3714:1:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":43006,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3718:1:133","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"3714:5:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":43008,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3722:1:133","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3714:9:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3706:18:133","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":43020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"id":43015,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42965,"src":"3740:6:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43017,"indexExpression":{"id":43016,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42986,"src":"3747:1:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3740:9:133","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":43014,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3734:5:133","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":43013,"name":"uint8","nodeType":"ElementaryTypeName","src":"3734:5:133","typeDescriptions":{}}},"id":43018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3734:16:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"3136","id":43019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3753:2:133","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"3734:21:133","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":43012,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3727:6:133","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":43011,"name":"bytes1","nodeType":"ElementaryTypeName","src":"3727:6:133","typeDescriptions":{}}},"id":43021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3727:29:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"3706:50:133","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":43023,"nodeType":"ExpressionStatement","src":"3706:50:133"},{"id":43027,"nodeType":"UncheckedBlock","src":"3765:32:133","statements":[{"expression":{"id":43025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3785:3:133","subExpression":{"id":43024,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42986,"src":"3787:1:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43026,"nodeType":"ExpressionStatement","src":"3785:3:133"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42989,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42986,"src":"3648:1:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":42990,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42981,"src":"3652:3:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3648:7:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43029,"initializationExpression":{"assignments":[42986],"declarations":[{"constant":false,"id":42986,"mutability":"mutable","name":"i","nameLocation":"3641:1:133","nodeType":"VariableDeclaration","scope":43029,"src":"3633:9:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42985,"name":"uint256","nodeType":"ElementaryTypeName","src":"3633:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42988,"initialValue":{"hexValue":"30","id":42987,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3645:1:133","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3633:13:133"},"nodeType":"ForStatement","src":"3628:175:133"},{"expression":{"id":43030,"name":"nibbles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42971,"src":"3816:7:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":42969,"id":43031,"nodeType":"Return","src":"3809:14:133"}]},"id":43033,"implemented":true,"kind":"function","modifiers":[],"name":"toNibbles","nameLocation":"3463:9:133","nodeType":"FunctionDefinition","parameters":{"id":42966,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42965,"mutability":"mutable","name":"_bytes","nameLocation":"3486:6:133","nodeType":"VariableDeclaration","scope":43033,"src":"3473:19:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42964,"name":"bytes","nodeType":"ElementaryTypeName","src":"3473:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3472:21:133"},"returnParameters":{"id":42969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42968,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43033,"src":"3517:12:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42967,"name":"bytes","nodeType":"ElementaryTypeName","src":"3517:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3516:14:133"},"scope":43112,"src":"3454:374:133","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43092,"nodeType":"Block","src":"3911:248:133","statements":[{"assignments":[43041],"declarations":[{"constant":false,"id":43041,"mutability":"mutable","name":"ret","nameLocation":"3930:3:133","nodeType":"VariableDeclaration","scope":43092,"src":"3917:16:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43040,"name":"bytes","nodeType":"ElementaryTypeName","src":"3917:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":43049,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":43044,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43035,"src":"3946:6:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3953:6:133","memberName":"length","nodeType":"MemberAccess","src":"3946:13:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":43046,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3962:1:133","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"3946:17:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43043,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3936:9:133","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":43042,"name":"bytes","nodeType":"ElementaryTypeName","src":"3940:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":43048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3936:28:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3917:47:133"},{"assignments":[43051],"declarations":[{"constant":false,"id":43051,"mutability":"mutable","name":"len","nameLocation":"3979:3:133","nodeType":"VariableDeclaration","scope":43092,"src":"3971:11:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43050,"name":"uint256","nodeType":"ElementaryTypeName","src":"3971:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":43054,"initialValue":{"expression":{"id":43052,"name":"ret","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43041,"src":"3985:3:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3989:6:133","memberName":"length","nodeType":"MemberAccess","src":"3985:10:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3971:24:133"},{"body":{"id":43088,"nodeType":"Block","src":"4032:106:133","statements":[{"expression":{"id":43082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":43062,"name":"ret","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43041,"src":"4040:3:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43064,"indexExpression":{"id":43063,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43056,"src":"4044:1:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4040:6:133","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":43081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":43071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":43065,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43035,"src":"4050:6:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43069,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43066,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43056,"src":"4057:1:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":43067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4061:1:133","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4057:5:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4050:13:133","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"34","id":43070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4067:1:133","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"4050:18:133","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"id":43072,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4049:20:133","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"baseExpression":{"id":43073,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43035,"src":"4073:6:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43079,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43074,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43056,"src":"4080:1:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":43075,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4084:1:133","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4080:5:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":43077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4088:1:133","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4080:9:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4073:17:133","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"id":43080,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4072:19:133","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"4049:42:133","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"4040:51:133","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":43083,"nodeType":"ExpressionStatement","src":"4040:51:133"},{"id":43087,"nodeType":"UncheckedBlock","src":"4100:32:133","statements":[{"expression":{"id":43085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4120:3:133","subExpression":{"id":43084,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43056,"src":"4122:1:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43086,"nodeType":"ExpressionStatement","src":"4120:3:133"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43059,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43056,"src":"4021:1:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":43060,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43051,"src":"4025:3:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4021:7:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43089,"initializationExpression":{"assignments":[43056],"declarations":[{"constant":false,"id":43056,"mutability":"mutable","name":"i","nameLocation":"4014:1:133","nodeType":"VariableDeclaration","scope":43089,"src":"4006:9:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43055,"name":"uint256","nodeType":"ElementaryTypeName","src":"4006:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":43058,"initialValue":{"hexValue":"30","id":43057,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4018:1:133","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4006:13:133"},"nodeType":"ForStatement","src":"4001:137:133"},{"expression":{"id":43090,"name":"ret","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43041,"src":"4151:3:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":43039,"id":43091,"nodeType":"Return","src":"4144:10:133"}]},"id":43093,"implemented":true,"kind":"function","modifiers":[],"name":"fromNibbles","nameLocation":"3841:11:133","nodeType":"FunctionDefinition","parameters":{"id":43036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43035,"mutability":"mutable","name":"_bytes","nameLocation":"3866:6:133","nodeType":"VariableDeclaration","scope":43093,"src":"3853:19:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43034,"name":"bytes","nodeType":"ElementaryTypeName","src":"3853:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3852:21:133"},"returnParameters":{"id":43039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43038,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43093,"src":"3897:12:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43037,"name":"bytes","nodeType":"ElementaryTypeName","src":"3897:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3896:14:133"},"scope":43112,"src":"3832:327:133","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43110,"nodeType":"Block","src":"4249:56:133","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":43108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":43103,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43095,"src":"4272:6:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":43102,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4262:9:133","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":43104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4262:17:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":43106,"name":"_other","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43097,"src":"4293:6:133","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":43105,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4283:9:133","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":43107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4283:17:133","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4262:38:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":43101,"id":43109,"nodeType":"Return","src":"4255:45:133"}]},"id":43111,"implemented":true,"kind":"function","modifiers":[],"name":"equal","nameLocation":"4172:5:133","nodeType":"FunctionDefinition","parameters":{"id":43098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43095,"mutability":"mutable","name":"_bytes","nameLocation":"4191:6:133","nodeType":"VariableDeclaration","scope":43111,"src":"4178:19:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43094,"name":"bytes","nodeType":"ElementaryTypeName","src":"4178:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":43097,"mutability":"mutable","name":"_other","nameLocation":"4212:6:133","nodeType":"VariableDeclaration","scope":43111,"src":"4199:19:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43096,"name":"bytes","nodeType":"ElementaryTypeName","src":"4199:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4177:42:133"},"returnParameters":{"id":43101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43100,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43111,"src":"4243:4:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":43099,"name":"bool","nodeType":"ElementaryTypeName","src":"4243:4:133","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4242:6:133"},"scope":43112,"src":"4163:142:133","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":43113,"src":"249:4058:133","usedErrors":[]}],"src":"46:4262:133"},"id":133},"contracts/messaging/connectors/optimism/lib/MerkleTrie.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/optimism/lib/MerkleTrie.sol","exportedSymbols":{"BytesUtils":[43112],"MerkleTrie":[43782],"RLPReader":[44630]},"id":43783,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":43114,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:134"},{"absolutePath":"contracts/messaging/connectors/optimism/lib/BytesUtils.sol","file":"./BytesUtils.sol","id":43116,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":43783,"sourceUnit":43113,"src":"93:44:134","symbolAliases":[{"foreign":{"id":43115,"name":"BytesUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43112,"src":"101:10:134","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/optimism/lib/RLPReader.sol","file":"./RLPReader.sol","id":43118,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":43783,"sourceUnit":44631,"src":"138:42:134","symbolAliases":[{"foreign":{"id":43117,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44630,"src":"146:9:134","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"MerkleTrie","contractDependencies":[],"contractKind":"library","documentation":{"id":43119,"nodeType":"StructuredDocumentation","src":"182:176:134","text":" @title MerkleTrie\n @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/trie/Lib_MerkleTrie.sol"},"fullyImplemented":true,"id":43782,"linearizedBaseContracts":[43782],"name":"MerkleTrie","nameLocation":"367:10:134","nodeType":"ContractDefinition","nodes":[{"canonicalName":"MerkleTrie.NodeType","id":43123,"members":[{"id":43120,"name":"BranchNode","nameLocation":"473:10:134","nodeType":"EnumValue","src":"473:10:134"},{"id":43121,"name":"ExtensionNode","nameLocation":"489:13:134","nodeType":"EnumValue","src":"489:13:134"},{"id":43122,"name":"LeafNode","nameLocation":"508:8:134","nodeType":"EnumValue","src":"508:8:134"}],"name":"NodeType","nameLocation":"458:8:134","nodeType":"EnumDefinition","src":"453:67:134"},{"canonicalName":"MerkleTrie.TrieNode","id":43130,"members":[{"constant":false,"id":43125,"mutability":"mutable","name":"encoded","nameLocation":"552:7:134","nodeType":"VariableDeclaration","scope":43130,"src":"546:13:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":43124,"name":"bytes","nodeType":"ElementaryTypeName","src":"546:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":43129,"mutability":"mutable","name":"decoded","nameLocation":"585:7:134","nodeType":"VariableDeclaration","scope":43130,"src":"565:27:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"},"typeName":{"baseType":{"id":43127,"nodeType":"UserDefinedTypeName","pathNode":{"id":43126,"name":"RLPReader.RLPItem","nameLocations":["565:9:134","575:7:134"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"565:17:134"},"referencedDeclaration":43899,"src":"565:17:134","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"id":43128,"nodeType":"ArrayTypeName","src":"565:19:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"}},"visibility":"internal"}],"name":"TrieNode","nameLocation":"531:8:134","nodeType":"StructDefinition","scope":43782,"src":"524:73:134","visibility":"public"},{"constant":true,"id":43133,"mutability":"constant","name":"TREE_RADIX","nameLocation":"765:10:134","nodeType":"VariableDeclaration","scope":43782,"src":"748:32:134","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43131,"name":"uint256","nodeType":"ElementaryTypeName","src":"748:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3136","id":43132,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"778:2:134","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"visibility":"internal"},{"constant":true,"id":43138,"mutability":"constant","name":"BRANCH_NODE_LENGTH","nameLocation":"877:18:134","nodeType":"VariableDeclaration","scope":43782,"src":"860:52:134","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43134,"name":"uint256","nodeType":"ElementaryTypeName","src":"860:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43137,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":43135,"name":"TREE_RADIX","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43133,"src":"898:10:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":43136,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"911:1:134","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"898:14:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":43141,"mutability":"constant","name":"LEAF_OR_EXTENSION_NODE_LENGTH","nameLocation":"1019:29:134","nodeType":"VariableDeclaration","scope":43782,"src":"1002:50:134","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43139,"name":"uint256","nodeType":"ElementaryTypeName","src":"1002:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":43140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1051:1:134","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"internal"},{"constant":true,"id":43144,"mutability":"constant","name":"PREFIX_EXTENSION_EVEN","nameLocation":"1449:21:134","nodeType":"VariableDeclaration","scope":43782,"src":"1434:40:134","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":43142,"name":"uint8","nodeType":"ElementaryTypeName","src":"1434:5:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"30","id":43143,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1473:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"internal"},{"constant":true,"id":43147,"mutability":"constant","name":"PREFIX_EXTENSION_ODD","nameLocation":"1493:20:134","nodeType":"VariableDeclaration","scope":43782,"src":"1478:39:134","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":43145,"name":"uint8","nodeType":"ElementaryTypeName","src":"1478:5:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"31","id":43146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1516:1:134","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"internal"},{"constant":true,"id":43150,"mutability":"constant","name":"PREFIX_LEAF_EVEN","nameLocation":"1536:16:134","nodeType":"VariableDeclaration","scope":43782,"src":"1521:35:134","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":43148,"name":"uint8","nodeType":"ElementaryTypeName","src":"1521:5:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"32","id":43149,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1555:1:134","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"internal"},{"constant":true,"id":43153,"mutability":"constant","name":"PREFIX_LEAF_ODD","nameLocation":"1575:15:134","nodeType":"VariableDeclaration","scope":43782,"src":"1560:34:134","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":43151,"name":"uint8","nodeType":"ElementaryTypeName","src":"1560:5:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"33","id":43152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1593:1:134","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"visibility":"internal"},{"constant":true,"id":43159,"mutability":"constant","name":"RLP_NULL","nameLocation":"1676:8:134","nodeType":"VariableDeclaration","scope":43782,"src":"1660:39:134","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":43154,"name":"bytes1","nodeType":"ElementaryTypeName","src":"1660:6:134","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"value":{"arguments":[{"hexValue":"30783830","id":43157,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1694:4:134","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"0x80"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"}],"id":43156,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1687:6:134","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":43155,"name":"bytes1","nodeType":"ElementaryTypeName","src":"1687:6:134","typeDescriptions":{}}},"id":43158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1687:12:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"body":{"id":43192,"nodeType":"Block","src":"2623:128:134","statements":[{"assignments":[43174,43176],"declarations":[{"constant":false,"id":43174,"mutability":"mutable","name":"exists","nameLocation":"2635:6:134","nodeType":"VariableDeclaration","scope":43192,"src":"2630:11:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":43173,"name":"bool","nodeType":"ElementaryTypeName","src":"2630:4:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":43176,"mutability":"mutable","name":"value","nameLocation":"2656:5:134","nodeType":"VariableDeclaration","scope":43192,"src":"2643:18:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43175,"name":"bytes","nodeType":"ElementaryTypeName","src":"2643:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":43182,"initialValue":{"arguments":[{"id":43178,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43162,"src":"2669:4:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":43179,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43166,"src":"2675:6:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":43180,"name":"_root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43168,"src":"2683:5:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":43177,"name":"get","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43263,"src":"2665:3:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,bytes memory,bytes32) pure returns (bool,bytes memory)"}},"id":43181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2665:24:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"2629:60:134"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":43189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43183,"name":"exists","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43174,"src":"2704:6:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"arguments":[{"id":43186,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43164,"src":"2731:6:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":43187,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43176,"src":"2739:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":43184,"name":"BytesUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43112,"src":"2714:10:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BytesUtils_$43112_$","typeString":"type(library BytesUtils)"}},"id":43185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2725:5:134","memberName":"equal","nodeType":"MemberAccess","referencedDeclaration":43111,"src":"2714:16:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (bytes memory,bytes memory) pure returns (bool)"}},"id":43188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2714:31:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2704:41:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":43190,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2703:43:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":43172,"id":43191,"nodeType":"Return","src":"2696:50:134"}]},"documentation":{"id":43160,"nodeType":"StructuredDocumentation","src":"1784:671:134","text":" @notice Verifies a proof that a given key/value pair is present in the\n Merkle trie.\n @param _key Key of the node to search for, as a hex string.\n @param _value Value of the node to search for, as a hex string.\n @param _proof Merkle trie inclusion proof for the desired node. Unlike\n traditional Merkle trees, this proof is executed top-down and consists\n of a list of RLP-encoded nodes that make a path down to the target node.\n @param _root Known root of the Merkle trie. Used to verify that the\n included proof is correctly constructed.\n @return _verified `true` if the k/v pair exists in the trie, `false` otherwise."},"id":43193,"implemented":true,"kind":"function","modifiers":[],"name":"verifyInclusionProof","nameLocation":"2467:20:134","nodeType":"FunctionDefinition","parameters":{"id":43169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43162,"mutability":"mutable","name":"_key","nameLocation":"2506:4:134","nodeType":"VariableDeclaration","scope":43193,"src":"2493:17:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43161,"name":"bytes","nodeType":"ElementaryTypeName","src":"2493:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":43164,"mutability":"mutable","name":"_value","nameLocation":"2529:6:134","nodeType":"VariableDeclaration","scope":43193,"src":"2516:19:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43163,"name":"bytes","nodeType":"ElementaryTypeName","src":"2516:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":43166,"mutability":"mutable","name":"_proof","nameLocation":"2554:6:134","nodeType":"VariableDeclaration","scope":43193,"src":"2541:19:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43165,"name":"bytes","nodeType":"ElementaryTypeName","src":"2541:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":43168,"mutability":"mutable","name":"_root","nameLocation":"2574:5:134","nodeType":"VariableDeclaration","scope":43193,"src":"2566:13:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":43167,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2566:7:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2487:96:134"},"returnParameters":{"id":43172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43171,"mutability":"mutable","name":"_verified","nameLocation":"2612:9:134","nodeType":"VariableDeclaration","scope":43193,"src":"2607:14:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":43170,"name":"bool","nodeType":"ElementaryTypeName","src":"2607:4:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2606:16:134"},"scope":43782,"src":"2458:293:134","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43262,"nodeType":"Block","src":"3233:389:134","statements":[{"assignments":[43211],"declarations":[{"constant":false,"id":43211,"mutability":"mutable","name":"proof","nameLocation":"3257:5:134","nodeType":"VariableDeclaration","scope":43262,"src":"3239:23:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TrieNode_$43130_memory_ptr_$dyn_memory_ptr","typeString":"struct MerkleTrie.TrieNode[]"},"typeName":{"baseType":{"id":43209,"nodeType":"UserDefinedTypeName","pathNode":{"id":43208,"name":"TrieNode","nameLocations":["3239:8:134"],"nodeType":"IdentifierPath","referencedDeclaration":43130,"src":"3239:8:134"},"referencedDeclaration":43130,"src":"3239:8:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_storage_ptr","typeString":"struct MerkleTrie.TrieNode"}},"id":43210,"nodeType":"ArrayTypeName","src":"3239:10:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TrieNode_$43130_storage_$dyn_storage_ptr","typeString":"struct MerkleTrie.TrieNode[]"}},"visibility":"internal"}],"id":43215,"initialValue":{"arguments":[{"id":43213,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43198,"src":"3277:6:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":43212,"name":"_parseProof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43660,"src":"3265:11:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_array$_t_struct$_TrieNode_$43130_memory_ptr_$dyn_memory_ptr_$","typeString":"function (bytes memory) pure returns (struct MerkleTrie.TrieNode memory[] memory)"}},"id":43214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3265:19:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TrieNode_$43130_memory_ptr_$dyn_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"3239:45:134"},{"assignments":[43217,43219,43221],"declarations":[{"constant":false,"id":43217,"mutability":"mutable","name":"pathLength","nameLocation":"3299:10:134","nodeType":"VariableDeclaration","scope":43262,"src":"3291:18:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43216,"name":"uint256","nodeType":"ElementaryTypeName","src":"3291:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":43219,"mutability":"mutable","name":"keyRemainder","nameLocation":"3324:12:134","nodeType":"VariableDeclaration","scope":43262,"src":"3311:25:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43218,"name":"bytes","nodeType":"ElementaryTypeName","src":"3311:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":43221,"mutability":"mutable","name":"isFinalNode","nameLocation":"3343:11:134","nodeType":"VariableDeclaration","scope":43262,"src":"3338:16:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":43220,"name":"bool","nodeType":"ElementaryTypeName","src":"3338:4:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":43227,"initialValue":{"arguments":[{"id":43223,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43211,"src":"3372:5:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TrieNode_$43130_memory_ptr_$dyn_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory[] memory"}},{"id":43224,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43196,"src":"3379:4:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":43225,"name":"_root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43200,"src":"3385:5:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_TrieNode_$43130_memory_ptr_$dyn_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":43222,"name":"_walkNodePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43584,"src":"3358:13:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_struct$_TrieNode_$43130_memory_ptr_$dyn_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_uint256_$_t_bytes_memory_ptr_$_t_bool_$","typeString":"function (struct MerkleTrie.TrieNode memory[] memory,bytes memory,bytes32) pure returns (uint256,bytes memory,bool)"}},"id":43226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3358:33:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bytes_memory_ptr_$_t_bool_$","typeString":"tuple(uint256,bytes memory,bool)"}},"nodeType":"VariableDeclarationStatement","src":"3290:101:134"},{"assignments":[43229],"declarations":[{"constant":false,"id":43229,"mutability":"mutable","name":"exists","nameLocation":"3403:6:134","nodeType":"VariableDeclaration","scope":43262,"src":"3398:11:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":43228,"name":"bool","nodeType":"ElementaryTypeName","src":"3398:4:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":43234,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":43230,"name":"keyRemainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43219,"src":"3412:12:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3425:6:134","memberName":"length","nodeType":"MemberAccess","src":"3412:19:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":43232,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3435:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3412:24:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3398:38:134"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":43238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43236,"name":"exists","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43229,"src":"3451:6:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":43237,"name":"isFinalNode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43221,"src":"3461:11:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3451:21:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"50726f76696465642070726f6f6620697320696e76616c69642e","id":43239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3474:28:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_1e7ade99c3b21d92da381624c75600d4d8827f17ae2b049a19c6287b6f740403","typeString":"literal_string \"Provided proof is invalid.\""},"value":"Provided proof is invalid."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1e7ade99c3b21d92da381624c75600d4d8827f17ae2b049a19c6287b6f740403","typeString":"literal_string \"Provided proof is invalid.\""}],"id":43235,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3443:7:134","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":43240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3443:60:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":43241,"nodeType":"ExpressionStatement","src":"3443:60:134"},{"assignments":[43243],"declarations":[{"constant":false,"id":43243,"mutability":"mutable","name":"value","nameLocation":"3523:5:134","nodeType":"VariableDeclaration","scope":43262,"src":"3510:18:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43242,"name":"bytes","nodeType":"ElementaryTypeName","src":"3510:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":43257,"initialValue":{"condition":{"id":43244,"name":"exists","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43229,"src":"3531:6:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"hexValue":"","id":43254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3585:2:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":43253,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3579:5:134","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":43252,"name":"bytes","nodeType":"ElementaryTypeName","src":"3579:5:134","typeDescriptions":{}}},"id":43255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3579:9:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"3531:57:134","trueExpression":{"arguments":[{"baseExpression":{"id":43246,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43211,"src":"3554:5:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TrieNode_$43130_memory_ptr_$dyn_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory[] memory"}},"id":43250,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43247,"name":"pathLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43217,"src":"3560:10:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":43248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3573:1:134","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3560:14:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3554:21:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}],"id":43245,"name":"_getNodeValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43742,"src":"3540:13:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_TrieNode_$43130_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct MerkleTrie.TrieNode memory) pure returns (bytes memory)"}},"id":43251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3540:36:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3510:78:134"},{"expression":{"components":[{"id":43258,"name":"exists","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43229,"src":"3603:6:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":43259,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43243,"src":"3611:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":43260,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3602:15:134","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"functionReturnParameters":43206,"id":43261,"nodeType":"Return","src":"3595:22:134"}]},"documentation":{"id":43194,"nodeType":"StructuredDocumentation","src":"2755:333:134","text":" @notice Retrieves the value associated with a given key.\n @param _key Key to search for, as hex bytes.\n @param _proof Merkle trie inclusion proof for the key.\n @param _root Known root of the Merkle trie.\n @return _exists Whether or not the key exists.\n @return _value Value of the key if it exists."},"id":43263,"implemented":true,"kind":"function","modifiers":[],"name":"get","nameLocation":"3100:3:134","nodeType":"FunctionDefinition","parameters":{"id":43201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43196,"mutability":"mutable","name":"_key","nameLocation":"3122:4:134","nodeType":"VariableDeclaration","scope":43263,"src":"3109:17:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43195,"name":"bytes","nodeType":"ElementaryTypeName","src":"3109:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":43198,"mutability":"mutable","name":"_proof","nameLocation":"3145:6:134","nodeType":"VariableDeclaration","scope":43263,"src":"3132:19:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43197,"name":"bytes","nodeType":"ElementaryTypeName","src":"3132:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":43200,"mutability":"mutable","name":"_root","nameLocation":"3165:5:134","nodeType":"VariableDeclaration","scope":43263,"src":"3157:13:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":43199,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3157:7:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3103:71:134"},"returnParameters":{"id":43206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43203,"mutability":"mutable","name":"_exists","nameLocation":"3203:7:134","nodeType":"VariableDeclaration","scope":43263,"src":"3198:12:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":43202,"name":"bool","nodeType":"ElementaryTypeName","src":"3198:4:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":43205,"mutability":"mutable","name":"_value","nameLocation":"3225:6:134","nodeType":"VariableDeclaration","scope":43263,"src":"3212:19:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43204,"name":"bytes","nodeType":"ElementaryTypeName","src":"3212:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3197:35:134"},"scope":43782,"src":"3091:531:134","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43583,"nodeType":"Block","src":"4320:3882:134","statements":[{"assignments":[43282],"declarations":[{"constant":false,"id":43282,"mutability":"mutable","name":"pathLength","nameLocation":"4334:10:134","nodeType":"VariableDeclaration","scope":43583,"src":"4326:18:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43281,"name":"uint256","nodeType":"ElementaryTypeName","src":"4326:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":43284,"initialValue":{"hexValue":"30","id":43283,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4347:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4326:22:134"},{"assignments":[43286],"declarations":[{"constant":false,"id":43286,"mutability":"mutable","name":"key","nameLocation":"4367:3:134","nodeType":"VariableDeclaration","scope":43583,"src":"4354:16:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43285,"name":"bytes","nodeType":"ElementaryTypeName","src":"4354:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":43291,"initialValue":{"arguments":[{"id":43289,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43270,"src":"4394:4:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":43287,"name":"BytesUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43112,"src":"4373:10:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BytesUtils_$43112_$","typeString":"type(library BytesUtils)"}},"id":43288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4384:9:134","memberName":"toNibbles","nodeType":"MemberAccess","referencedDeclaration":43033,"src":"4373:20:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bytes memory)"}},"id":43290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4373:26:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4354:45:134"},{"assignments":[43293],"declarations":[{"constant":false,"id":43293,"mutability":"mutable","name":"currentNodeID","nameLocation":"4414:13:134","nodeType":"VariableDeclaration","scope":43583,"src":"4406:21:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":43292,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4406:7:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":43295,"initialValue":{"id":43294,"name":"_root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43272,"src":"4430:5:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4406:29:134"},{"assignments":[43297],"declarations":[{"constant":false,"id":43297,"mutability":"mutable","name":"currentKeyIndex","nameLocation":"4449:15:134","nodeType":"VariableDeclaration","scope":43583,"src":"4441:23:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43296,"name":"uint256","nodeType":"ElementaryTypeName","src":"4441:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":43299,"initialValue":{"hexValue":"30","id":43298,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4467:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4441:27:134"},{"assignments":[43301],"declarations":[{"constant":false,"id":43301,"mutability":"mutable","name":"currentKeyIncrement","nameLocation":"4482:19:134","nodeType":"VariableDeclaration","scope":43583,"src":"4474:27:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43300,"name":"uint256","nodeType":"ElementaryTypeName","src":"4474:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":43303,"initialValue":{"hexValue":"30","id":43302,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4504:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4474:31:134"},{"assignments":[43306],"declarations":[{"constant":false,"id":43306,"mutability":"mutable","name":"currentNode","nameLocation":"4527:11:134","nodeType":"VariableDeclaration","scope":43583,"src":"4511:27:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode"},"typeName":{"id":43305,"nodeType":"UserDefinedTypeName","pathNode":{"id":43304,"name":"TrieNode","nameLocations":["4511:8:134"],"nodeType":"IdentifierPath","referencedDeclaration":43130,"src":"4511:8:134"},"referencedDeclaration":43130,"src":"4511:8:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_storage_ptr","typeString":"struct MerkleTrie.TrieNode"}},"visibility":"internal"}],"id":43307,"nodeType":"VariableDeclarationStatement","src":"4511:27:134"},{"assignments":[43309],"declarations":[{"constant":false,"id":43309,"mutability":"mutable","name":"len","nameLocation":"4620:3:134","nodeType":"VariableDeclaration","scope":43583,"src":"4612:11:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43308,"name":"uint256","nodeType":"ElementaryTypeName","src":"4612:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":43312,"initialValue":{"expression":{"id":43310,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43268,"src":"4626:6:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TrieNode_$43130_memory_ptr_$dyn_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory[] memory"}},"id":43311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4633:6:134","memberName":"length","nodeType":"MemberAccess","src":"4626:13:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4612:27:134"},{"body":{"id":43563,"nodeType":"Block","src":"4676:3327:134","statements":[{"expression":{"id":43324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43320,"name":"currentNode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43306,"src":"4684:11:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":43321,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43268,"src":"4698:6:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TrieNode_$43130_memory_ptr_$dyn_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory[] memory"}},"id":43323,"indexExpression":{"id":43322,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43314,"src":"4705:1:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4698:9:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}},"src":"4684:23:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}},"id":43325,"nodeType":"ExpressionStatement","src":"4684:23:134"},{"expression":{"id":43328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43326,"name":"currentKeyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43297,"src":"4715:15:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":43327,"name":"currentKeyIncrement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43301,"src":"4734:19:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4715:38:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43329,"nodeType":"ExpressionStatement","src":"4715:38:134"},{"expression":{"id":43332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43330,"name":"pathLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43282,"src":"4898:10:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":43331,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4912:1:134","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4898:15:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43333,"nodeType":"ExpressionStatement","src":"4898:15:134"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43334,"name":"currentKeyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43297,"src":"4926:15:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":43335,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4945:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4926:20:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":43348,"name":"currentNode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43306,"src":"5110:11:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}},"id":43349,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5122:7:134","memberName":"encoded","nodeType":"MemberAccess","referencedDeclaration":43125,"src":"5110:19:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5130:6:134","memberName":"length","nodeType":"MemberAccess","src":"5110:26:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_rational_31_by_1","typeString":"int_const 31"},"id":43353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3332","id":43351,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5139:2:134","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":43352,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5144:1:134","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5139:6:134","typeDescriptions":{"typeIdentifier":"t_rational_31_by_1","typeString":"int_const 31"}},"src":"5110:35:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":43377,"nodeType":"Block","src":"5327:170:134","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":43373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":43369,"name":"currentNode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43306,"src":"5420:11:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}},"id":43370,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5432:7:134","memberName":"encoded","nodeType":"MemberAccess","referencedDeclaration":43125,"src":"5420:19:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":43367,"name":"BytesUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43112,"src":"5399:10:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BytesUtils_$43112_$","typeString":"type(library BytesUtils)"}},"id":43368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5410:9:134","memberName":"toBytes32","nodeType":"MemberAccess","referencedDeclaration":42948,"src":"5399:20:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":43371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5399:41:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":43372,"name":"currentNodeID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43293,"src":"5444:13:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5399:58:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420696e7465726e616c206e6f64652068617368","id":43374,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5459:28:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_e9e55fd097279baafdb4899794fb4962ef0a885668e60ace65bd9cacedd5b27b","typeString":"literal_string \"Invalid internal node hash\""},"value":"Invalid internal node hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e9e55fd097279baafdb4899794fb4962ef0a885668e60ace65bd9cacedd5b27b","typeString":"literal_string \"Invalid internal node hash\""}],"id":43366,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5391:7:134","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":43375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5391:97:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":43376,"nodeType":"ExpressionStatement","src":"5391:97:134"}]},"id":43378,"nodeType":"IfStatement","src":"5106:391:134","trueBody":{"id":43365,"nodeType":"Block","src":"5147:174:134","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":43361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":43357,"name":"currentNode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43306,"src":"5243:11:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}},"id":43358,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5255:7:134","memberName":"encoded","nodeType":"MemberAccess","referencedDeclaration":43125,"src":"5243:19:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":43356,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5233:9:134","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":43359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5233:30:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":43360,"name":"currentNodeID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43293,"src":"5267:13:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5233:47:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c6964206c6172676520696e7465726e616c2068617368","id":43362,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5282:29:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_17a91ad79ff0ffb523ce6bd4cec4c7a194c9236c41f13271d5e41d6bee8604ec","typeString":"literal_string \"Invalid large internal hash\""},"value":"Invalid large internal hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_17a91ad79ff0ffb523ce6bd4cec4c7a194c9236c41f13271d5e41d6bee8604ec","typeString":"literal_string \"Invalid large internal hash\""}],"id":43355,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5225:7:134","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":43363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5225:87:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":43364,"nodeType":"ExpressionStatement","src":"5225:87:134"}]}},"id":43379,"nodeType":"IfStatement","src":"4922:575:134","trueBody":{"id":43347,"nodeType":"Block","src":"4948:152:134","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":43343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":43339,"name":"currentNode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43306,"src":"5032:11:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}},"id":43340,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5044:7:134","memberName":"encoded","nodeType":"MemberAccess","referencedDeclaration":43125,"src":"5032:19:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":43338,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5022:9:134","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":43341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5022:30:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":43342,"name":"currentNodeID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43293,"src":"5056:13:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5022:47:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420726f6f742068617368","id":43344,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5071:19:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_f80c2a45ec3706bf6827e456edd04bddc9929616615a2e1a2a2462809e20942c","typeString":"literal_string \"Invalid root hash\""},"value":"Invalid root hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f80c2a45ec3706bf6827e456edd04bddc9929616615a2e1a2a2462809e20942c","typeString":"literal_string \"Invalid root hash\""}],"id":43337,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5014:7:134","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":43345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5014:77:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":43346,"nodeType":"ExpressionStatement","src":"5014:77:134"}]}},{"id":43383,"nodeType":"UncheckedBlock","src":"5573:32:134","statements":[{"expression":{"id":43381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5593:3:134","subExpression":{"id":43380,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43314,"src":"5595:1:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43382,"nodeType":"ExpressionStatement","src":"5593:3:134"}]},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":43384,"name":"currentNode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43306,"src":"5617:11:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}},"id":43385,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5629:7:134","memberName":"decoded","nodeType":"MemberAccess","referencedDeclaration":43129,"src":"5617:19:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":43386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5637:6:134","memberName":"length","nodeType":"MemberAccess","src":"5617:26:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":43387,"name":"BRANCH_NODE_LENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43138,"src":"5647:18:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5617:48:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":43428,"name":"currentNode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43306,"src":"6241:11:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}},"id":43429,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6253:7:134","memberName":"decoded","nodeType":"MemberAccess","referencedDeclaration":43129,"src":"6241:19:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":43430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6261:6:134","memberName":"length","nodeType":"MemberAccess","src":"6241:26:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":43431,"name":"LEAF_OR_EXTENSION_NODE_LENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43141,"src":"6271:29:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6241:59:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":43560,"nodeType":"Block","src":"7939:58:134","statements":[{"expression":{"arguments":[{"hexValue":"526563656976656420616e20756e706172736561626c65206e6f64652e","id":43557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7956:31:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_44be0f743167942a406d825903e699357e663ee7ba0bc41f4d988c3023209e40","typeString":"literal_string \"Received an unparseable node.\""},"value":"Received an unparseable node."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_44be0f743167942a406d825903e699357e663ee7ba0bc41f4d988c3023209e40","typeString":"literal_string \"Received an unparseable node.\""}],"id":43556,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"7949:6:134","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":43558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7949:39:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":43559,"nodeType":"ExpressionStatement","src":"7949:39:134"}]},"id":43561,"nodeType":"IfStatement","src":"6237:1760:134","trueBody":{"id":43555,"nodeType":"Block","src":"6302:1631:134","statements":[{"assignments":[43434],"declarations":[{"constant":false,"id":43434,"mutability":"mutable","name":"path","nameLocation":"6325:4:134","nodeType":"VariableDeclaration","scope":43555,"src":"6312:17:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43433,"name":"bytes","nodeType":"ElementaryTypeName","src":"6312:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":43438,"initialValue":{"arguments":[{"id":43436,"name":"currentNode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43306,"src":"6345:11:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}],"id":43435,"name":"_getNodePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43720,"src":"6332:12:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_TrieNode_$43130_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct MerkleTrie.TrieNode memory) pure returns (bytes memory)"}},"id":43437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6332:25:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"6312:45:134"},{"assignments":[43440],"declarations":[{"constant":false,"id":43440,"mutability":"mutable","name":"prefix","nameLocation":"6373:6:134","nodeType":"VariableDeclaration","scope":43555,"src":"6367:12:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":43439,"name":"uint8","nodeType":"ElementaryTypeName","src":"6367:5:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":43447,"initialValue":{"arguments":[{"baseExpression":{"id":43443,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43434,"src":"6388:4:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43445,"indexExpression":{"hexValue":"30","id":43444,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6393:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6388:7:134","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":43442,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6382:5:134","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":43441,"name":"uint8","nodeType":"ElementaryTypeName","src":"6382:5:134","typeDescriptions":{}}},"id":43446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6382:14:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"6367:29:134"},{"assignments":[43449],"declarations":[{"constant":false,"id":43449,"mutability":"mutable","name":"offset","nameLocation":"6412:6:134","nodeType":"VariableDeclaration","scope":43555,"src":"6406:12:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":43448,"name":"uint8","nodeType":"ElementaryTypeName","src":"6406:5:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":43456,"initialValue":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":43455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":43450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6421:1:134","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":43453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43451,"name":"prefix","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43440,"src":"6426:6:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"32","id":43452,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6435:1:134","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"6426:10:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":43454,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6425:12:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"6421:16:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"6406:31:134"},{"assignments":[43458],"declarations":[{"constant":false,"id":43458,"mutability":"mutable","name":"pathRemainder","nameLocation":"6460:13:134","nodeType":"VariableDeclaration","scope":43555,"src":"6447:26:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43457,"name":"bytes","nodeType":"ElementaryTypeName","src":"6447:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":43464,"initialValue":{"arguments":[{"id":43461,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43434,"src":"6493:4:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":43462,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43449,"src":"6499:6:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":43459,"name":"BytesUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43112,"src":"6476:10:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BytesUtils_$43112_$","typeString":"type(library BytesUtils)"}},"id":43460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6487:5:134","memberName":"slice","nodeType":"MemberAccess","referencedDeclaration":42920,"src":"6476:16:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,uint256) pure returns (bytes memory)"}},"id":43463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6476:30:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"6447:59:134"},{"assignments":[43466],"declarations":[{"constant":false,"id":43466,"mutability":"mutable","name":"keyRemainder","nameLocation":"6529:12:134","nodeType":"VariableDeclaration","scope":43555,"src":"6516:25:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43465,"name":"bytes","nodeType":"ElementaryTypeName","src":"6516:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":43472,"initialValue":{"arguments":[{"id":43469,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43286,"src":"6561:3:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":43470,"name":"currentKeyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43297,"src":"6566:15:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":43467,"name":"BytesUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43112,"src":"6544:10:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BytesUtils_$43112_$","typeString":"type(library BytesUtils)"}},"id":43468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6555:5:134","memberName":"slice","nodeType":"MemberAccess","referencedDeclaration":42920,"src":"6544:16:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,uint256) pure returns (bytes memory)"}},"id":43471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6544:38:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"6516:66:134"},{"assignments":[43474],"declarations":[{"constant":false,"id":43474,"mutability":"mutable","name":"sharedNibbleLength","nameLocation":"6600:18:134","nodeType":"VariableDeclaration","scope":43555,"src":"6592:26:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43473,"name":"uint256","nodeType":"ElementaryTypeName","src":"6592:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":43479,"initialValue":{"arguments":[{"id":43476,"name":"pathRemainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43458,"src":"6644:13:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":43477,"name":"keyRemainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43466,"src":"6659:12:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":43475,"name":"_getSharedNibbleLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43781,"src":"6621:22:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (bytes memory,bytes memory) pure returns (uint256)"}},"id":43478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6621:51:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6592:80:134"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":43486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":43482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43480,"name":"prefix","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43440,"src":"6687:6:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":43481,"name":"PREFIX_LEAF_EVEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43150,"src":"6697:16:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"6687:26:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":43485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43483,"name":"prefix","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43440,"src":"6717:6:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":43484,"name":"PREFIX_LEAF_ODD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43153,"src":"6727:15:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"6717:25:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6687:55:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":43517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":43513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43511,"name":"prefix","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43440,"src":"7207:6:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":43512,"name":"PREFIX_EXTENSION_EVEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43144,"src":"7217:21:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"7207:31:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":43516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43514,"name":"prefix","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43440,"src":"7242:6:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":43515,"name":"PREFIX_EXTENSION_ODD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43147,"src":"7252:20:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"7242:30:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7207:65:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":43552,"nodeType":"Block","src":"7854:71:134","statements":[{"expression":{"arguments":[{"hexValue":"52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e20707265666978","id":43549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7873:40:134","typeDescriptions":{"typeIdentifier":"t_stringliteral_907f215123609329de6771559e9fb247bc5ec60375a7811e373541560cb612bc","typeString":"literal_string \"Received a node with an unknown prefix\""},"value":"Received a node with an unknown prefix"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_907f215123609329de6771559e9fb247bc5ec60375a7811e373541560cb612bc","typeString":"literal_string \"Received a node with an unknown prefix\""}],"id":43548,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"7866:6:134","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":43550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7866:48:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":43551,"nodeType":"ExpressionStatement","src":"7866:48:134"}]},"id":43553,"nodeType":"IfStatement","src":"7203:722:134","trueBody":{"id":43547,"nodeType":"Block","src":"7274:574:134","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43518,"name":"sharedNibbleLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43474,"src":"7290:18:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":43519,"name":"pathRemainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43458,"src":"7312:13:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7326:6:134","memberName":"length","nodeType":"MemberAccess","src":"7312:20:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7290:42:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":43545,"nodeType":"Block","src":"7593:245:134","statements":[{"expression":{"id":43538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43531,"name":"currentNodeID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43293,"src":"7699:13:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":43533,"name":"currentNode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43306,"src":"7726:11:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}},"id":43534,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7738:7:134","memberName":"decoded","nodeType":"MemberAccess","referencedDeclaration":43129,"src":"7726:19:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":43536,"indexExpression":{"hexValue":"31","id":43535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7746:1:134","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7726:22:134","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":43532,"name":"_getNodeID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43699,"src":"7715:10:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes32)"}},"id":43537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7715:34:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7699:50:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":43539,"nodeType":"ExpressionStatement","src":"7699:50:134"},{"expression":{"id":43542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43540,"name":"currentKeyIncrement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43301,"src":"7763:19:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":43541,"name":"sharedNibbleLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43474,"src":"7785:18:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7763:40:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43543,"nodeType":"ExpressionStatement","src":"7763:40:134"},{"id":43544,"nodeType":"Continue","src":"7817:8:134"}]},"id":43546,"nodeType":"IfStatement","src":"7286:552:134","trueBody":{"id":43530,"nodeType":"Block","src":"7334:253:134","statements":[{"expression":{"id":43527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43522,"name":"currentNodeID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43293,"src":"7522:13:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":43525,"name":"RLP_NULL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43159,"src":"7546:8:134","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":43524,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7538:7:134","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":43523,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7538:7:134","typeDescriptions":{}}},"id":43526,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7538:17:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7522:33:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":43528,"nodeType":"ExpressionStatement","src":"7522:33:134"},{"id":43529,"nodeType":"Break","src":"7569:5:134"}]}}]}},"id":43554,"nodeType":"IfStatement","src":"6683:1242:134","trueBody":{"id":43510,"nodeType":"Block","src":"6744:453:134","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":43495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":43487,"name":"pathRemainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43458,"src":"6760:13:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6774:6:134","memberName":"length","nodeType":"MemberAccess","src":"6760:20:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":43489,"name":"sharedNibbleLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43474,"src":"6784:18:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6760:42:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":43491,"name":"keyRemainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43466,"src":"6806:12:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6819:6:134","memberName":"length","nodeType":"MemberAccess","src":"6806:19:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":43493,"name":"sharedNibbleLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43474,"src":"6829:18:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6806:41:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6760:87:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43501,"nodeType":"IfStatement","src":"6756:299:134","trueBody":{"id":43500,"nodeType":"Block","src":"6849:206:134","statements":[{"expression":{"id":43498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43496,"name":"currentKeyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43297,"src":"7005:15:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":43497,"name":"sharedNibbleLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43474,"src":"7024:18:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7005:37:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43499,"nodeType":"ExpressionStatement","src":"7005:37:134"}]}},{"expression":{"id":43507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43502,"name":"currentNodeID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43293,"src":"7136:13:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":43505,"name":"RLP_NULL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43159,"src":"7160:8:134","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":43504,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7152:7:134","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":43503,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7152:7:134","typeDescriptions":{}}},"id":43506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7152:17:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7136:33:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":43508,"nodeType":"ExpressionStatement","src":"7136:33:134"},{"id":43509,"nodeType":"Break","src":"7181:5:134"}]}}]}},"id":43562,"nodeType":"IfStatement","src":"5613:2384:134","trueBody":{"id":43427,"nodeType":"Block","src":"5667:564:134","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43389,"name":"currentKeyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43297,"src":"5681:15:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":43390,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43286,"src":"5700:3:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5704:6:134","memberName":"length","nodeType":"MemberAccess","src":"5700:10:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5681:29:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":43425,"nodeType":"Block","src":"5854:369:134","statements":[{"assignments":[43396],"declarations":[{"constant":false,"id":43396,"mutability":"mutable","name":"branchKey","nameLocation":"5992:9:134","nodeType":"VariableDeclaration","scope":43425,"src":"5986:15:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":43395,"name":"uint8","nodeType":"ElementaryTypeName","src":"5986:5:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":43403,"initialValue":{"arguments":[{"baseExpression":{"id":43399,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43286,"src":"6010:3:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43401,"indexExpression":{"id":43400,"name":"currentKeyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43297,"src":"6014:15:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6010:20:134","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":43398,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6004:5:134","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":43397,"name":"uint8","nodeType":"ElementaryTypeName","src":"6004:5:134","typeDescriptions":{}}},"id":43402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6004:27:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"5986:45:134"},{"assignments":[43408],"declarations":[{"constant":false,"id":43408,"mutability":"mutable","name":"nextNode","nameLocation":"6068:8:134","nodeType":"VariableDeclaration","scope":43425,"src":"6043:33:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":43407,"nodeType":"UserDefinedTypeName","pathNode":{"id":43406,"name":"RLPReader.RLPItem","nameLocations":["6043:9:134","6053:7:134"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"6043:17:134"},"referencedDeclaration":43899,"src":"6043:17:134","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"id":43413,"initialValue":{"baseExpression":{"expression":{"id":43409,"name":"currentNode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43306,"src":"6079:11:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}},"id":43410,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6091:7:134","memberName":"decoded","nodeType":"MemberAccess","referencedDeclaration":43129,"src":"6079:19:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":43412,"indexExpression":{"id":43411,"name":"branchKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43396,"src":"6099:9:134","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6079:30:134","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"nodeType":"VariableDeclarationStatement","src":"6043:66:134"},{"expression":{"id":43418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43414,"name":"currentNodeID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43293,"src":"6121:13:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":43416,"name":"nextNode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43408,"src":"6148:8:134","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":43415,"name":"_getNodeID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43699,"src":"6137:10:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes32)"}},"id":43417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6137:20:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"6121:36:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":43419,"nodeType":"ExpressionStatement","src":"6121:36:134"},{"expression":{"id":43422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43420,"name":"currentKeyIncrement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43301,"src":"6169:19:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":43421,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6191:1:134","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6169:23:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43423,"nodeType":"ExpressionStatement","src":"6169:23:134"},{"id":43424,"nodeType":"Continue","src":"6204:8:134"}]},"id":43426,"nodeType":"IfStatement","src":"5677:546:134","trueBody":{"id":43394,"nodeType":"Block","src":"5712:136:134","statements":[{"id":43393,"nodeType":"Break","src":"5832:5:134"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43317,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43314,"src":"4665:1:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":43318,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43309,"src":"4669:3:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4665:7:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43564,"initializationExpression":{"assignments":[43314],"declarations":[{"constant":false,"id":43314,"mutability":"mutable","name":"i","nameLocation":"4658:1:134","nodeType":"VariableDeclaration","scope":43564,"src":"4650:9:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43313,"name":"uint256","nodeType":"ElementaryTypeName","src":"4650:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":43316,"initialValue":{"hexValue":"30","id":43315,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4662:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4650:13:134"},"nodeType":"ForStatement","src":"4645:3358:134"},{"assignments":[43566],"declarations":[{"constant":false,"id":43566,"mutability":"mutable","name":"isFinalNode","nameLocation":"8071:11:134","nodeType":"VariableDeclaration","scope":43583,"src":"8066:16:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":43565,"name":"bool","nodeType":"ElementaryTypeName","src":"8066:4:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":43573,"initialValue":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":43572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43567,"name":"currentNodeID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43293,"src":"8085:13:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":43570,"name":"RLP_NULL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43159,"src":"8110:8:134","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":43569,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8102:7:134","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":43568,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8102:7:134","typeDescriptions":{}}},"id":43571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8102:17:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8085:34:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"8066:53:134"},{"expression":{"components":[{"id":43574,"name":"pathLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43282,"src":"8133:10:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":43577,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43286,"src":"8162:3:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":43578,"name":"currentKeyIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43297,"src":"8167:15:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":43575,"name":"BytesUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43112,"src":"8145:10:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BytesUtils_$43112_$","typeString":"type(library BytesUtils)"}},"id":43576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8156:5:134","memberName":"slice","nodeType":"MemberAccess","referencedDeclaration":42920,"src":"8145:16:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,uint256) pure returns (bytes memory)"}},"id":43579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8145:38:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":43580,"name":"isFinalNode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43566,"src":"8185:11:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":43581,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8132:65:134","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bytes_memory_ptr_$_t_bool_$","typeString":"tuple(uint256,bytes memory,bool)"}},"functionReturnParameters":43280,"id":43582,"nodeType":"Return","src":"8125:72:134"}]},"documentation":{"id":43264,"nodeType":"StructuredDocumentation","src":"3703:387:134","text":" @notice Walks through a proof using a provided key.\n @param _proof Inclusion proof to walk through.\n @param _key Key to use for the walk.\n @param _root Known root of the trie.\n @return _pathLength Length of the final path\n @return _keyRemainder Portion of the key remaining after the walk.\n @return _isFinalNode Whether or not we've hit a dead end."},"id":43584,"implemented":true,"kind":"function","modifiers":[],"name":"_walkNodePath","nameLocation":"4102:13:134","nodeType":"FunctionDefinition","parameters":{"id":43273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43268,"mutability":"mutable","name":"_proof","nameLocation":"4139:6:134","nodeType":"VariableDeclaration","scope":43584,"src":"4121:24:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TrieNode_$43130_memory_ptr_$dyn_memory_ptr","typeString":"struct MerkleTrie.TrieNode[]"},"typeName":{"baseType":{"id":43266,"nodeType":"UserDefinedTypeName","pathNode":{"id":43265,"name":"TrieNode","nameLocations":["4121:8:134"],"nodeType":"IdentifierPath","referencedDeclaration":43130,"src":"4121:8:134"},"referencedDeclaration":43130,"src":"4121:8:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_storage_ptr","typeString":"struct MerkleTrie.TrieNode"}},"id":43267,"nodeType":"ArrayTypeName","src":"4121:10:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TrieNode_$43130_storage_$dyn_storage_ptr","typeString":"struct MerkleTrie.TrieNode[]"}},"visibility":"internal"},{"constant":false,"id":43270,"mutability":"mutable","name":"_key","nameLocation":"4164:4:134","nodeType":"VariableDeclaration","scope":43584,"src":"4151:17:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43269,"name":"bytes","nodeType":"ElementaryTypeName","src":"4151:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":43272,"mutability":"mutable","name":"_root","nameLocation":"4182:5:134","nodeType":"VariableDeclaration","scope":43584,"src":"4174:13:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":43271,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4174:7:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4115:76:134"},"returnParameters":{"id":43280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43275,"mutability":"mutable","name":"_pathLength","nameLocation":"4241:11:134","nodeType":"VariableDeclaration","scope":43584,"src":"4233:19:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43274,"name":"uint256","nodeType":"ElementaryTypeName","src":"4233:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":43277,"mutability":"mutable","name":"_keyRemainder","nameLocation":"4273:13:134","nodeType":"VariableDeclaration","scope":43584,"src":"4260:26:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43276,"name":"bytes","nodeType":"ElementaryTypeName","src":"4260:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":43279,"mutability":"mutable","name":"_isFinalNode","nameLocation":"4299:12:134","nodeType":"VariableDeclaration","scope":43584,"src":"4294:17:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":43278,"name":"bool","nodeType":"ElementaryTypeName","src":"4294:4:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4225:92:134"},"scope":43782,"src":"4093:4109:134","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":43659,"nodeType":"Block","src":"8491:412:134","statements":[{"assignments":[43599],"declarations":[{"constant":false,"id":43599,"mutability":"mutable","name":"nodes","nameLocation":"8524:5:134","nodeType":"VariableDeclaration","scope":43659,"src":"8497:32:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem[]"},"typeName":{"baseType":{"id":43597,"nodeType":"UserDefinedTypeName","pathNode":{"id":43596,"name":"RLPReader.RLPItem","nameLocations":["8497:9:134","8507:7:134"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"8497:17:134"},"referencedDeclaration":43899,"src":"8497:17:134","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"id":43598,"nodeType":"ArrayTypeName","src":"8497:19:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"}},"visibility":"internal"}],"id":43604,"initialValue":{"arguments":[{"id":43602,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43587,"src":"8551:6:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":43600,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44630,"src":"8532:9:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$44630_$","typeString":"type(library RLPReader)"}},"id":43601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8542:8:134","memberName":"readList","nodeType":"MemberAccess","referencedDeclaration":44042,"src":"8532:18:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr_$","typeString":"function (bytes memory) pure returns (struct RLPReader.RLPItem memory[] memory)"}},"id":43603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8532:26:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"8497:61:134"},{"assignments":[43609],"declarations":[{"constant":false,"id":43609,"mutability":"mutable","name":"proof","nameLocation":"8582:5:134","nodeType":"VariableDeclaration","scope":43659,"src":"8564:23:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TrieNode_$43130_memory_ptr_$dyn_memory_ptr","typeString":"struct MerkleTrie.TrieNode[]"},"typeName":{"baseType":{"id":43607,"nodeType":"UserDefinedTypeName","pathNode":{"id":43606,"name":"TrieNode","nameLocations":["8564:8:134"],"nodeType":"IdentifierPath","referencedDeclaration":43130,"src":"8564:8:134"},"referencedDeclaration":43130,"src":"8564:8:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_storage_ptr","typeString":"struct MerkleTrie.TrieNode"}},"id":43608,"nodeType":"ArrayTypeName","src":"8564:10:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TrieNode_$43130_storage_$dyn_storage_ptr","typeString":"struct MerkleTrie.TrieNode[]"}},"visibility":"internal"}],"id":43617,"initialValue":{"arguments":[{"expression":{"id":43614,"name":"nodes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43599,"src":"8605:5:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":43615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8611:6:134","memberName":"length","nodeType":"MemberAccess","src":"8605:12:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43613,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8590:14:134","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_TrieNode_$43130_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct MerkleTrie.TrieNode memory[] memory)"},"typeName":{"baseType":{"id":43611,"nodeType":"UserDefinedTypeName","pathNode":{"id":43610,"name":"TrieNode","nameLocations":["8594:8:134"],"nodeType":"IdentifierPath","referencedDeclaration":43130,"src":"8594:8:134"},"referencedDeclaration":43130,"src":"8594:8:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_storage_ptr","typeString":"struct MerkleTrie.TrieNode"}},"id":43612,"nodeType":"ArrayTypeName","src":"8594:10:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TrieNode_$43130_storage_$dyn_storage_ptr","typeString":"struct MerkleTrie.TrieNode[]"}}},"id":43616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8590:28:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TrieNode_$43130_memory_ptr_$dyn_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"8564:54:134"},{"assignments":[43619],"declarations":[{"constant":false,"id":43619,"mutability":"mutable","name":"len","nameLocation":"8633:3:134","nodeType":"VariableDeclaration","scope":43659,"src":"8625:11:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43618,"name":"uint256","nodeType":"ElementaryTypeName","src":"8625:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":43622,"initialValue":{"expression":{"id":43620,"name":"nodes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43599,"src":"8639:5:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":43621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8645:6:134","memberName":"length","nodeType":"MemberAccess","src":"8639:12:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8625:26:134"},{"body":{"id":43655,"nodeType":"Block","src":"8688:192:134","statements":[{"assignments":[43631],"declarations":[{"constant":false,"id":43631,"mutability":"mutable","name":"encoded","nameLocation":"8709:7:134","nodeType":"VariableDeclaration","scope":43655,"src":"8696:20:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43630,"name":"bytes","nodeType":"ElementaryTypeName","src":"8696:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":43638,"initialValue":{"arguments":[{"baseExpression":{"id":43634,"name":"nodes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43599,"src":"8739:5:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":43636,"indexExpression":{"id":43635,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43624,"src":"8745:1:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8739:8:134","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"expression":{"id":43632,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44630,"src":"8719:9:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$44630_$","typeString":"type(library RLPReader)"}},"id":43633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8729:9:134","memberName":"readBytes","nodeType":"MemberAccess","referencedDeclaration":44078,"src":"8719:19:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes memory)"}},"id":43637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8719:29:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"8696:52:134"},{"expression":{"id":43649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":43639,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43609,"src":"8756:5:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TrieNode_$43130_memory_ptr_$dyn_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory[] memory"}},"id":43641,"indexExpression":{"id":43640,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43624,"src":"8762:1:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8756:8:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":43643,"name":"encoded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43631,"src":"8786:7:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":43646,"name":"encoded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43631,"src":"8823:7:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":43644,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44630,"src":"8804:9:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$44630_$","typeString":"type(library RLPReader)"}},"id":43645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8814:8:134","memberName":"readList","nodeType":"MemberAccess","referencedDeclaration":44042,"src":"8804:18:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr_$","typeString":"function (bytes memory) pure returns (struct RLPReader.RLPItem memory[] memory)"}},"id":43647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8804:27:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}],"id":43642,"name":"TrieNode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43130,"src":"8767:8:134","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_TrieNode_$43130_storage_ptr_$","typeString":"type(struct MerkleTrie.TrieNode storage pointer)"}},"id":43648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["8777:7:134","8795:7:134"],"names":["encoded","decoded"],"nodeType":"FunctionCall","src":"8767:66:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}},"src":"8756:77:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}},"id":43650,"nodeType":"ExpressionStatement","src":"8756:77:134"},{"id":43654,"nodeType":"UncheckedBlock","src":"8842:32:134","statements":[{"expression":{"id":43652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"8862:3:134","subExpression":{"id":43651,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43624,"src":"8864:1:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43653,"nodeType":"ExpressionStatement","src":"8862:3:134"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43627,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43624,"src":"8677:1:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":43628,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43619,"src":"8681:3:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8677:7:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43656,"initializationExpression":{"assignments":[43624],"declarations":[{"constant":false,"id":43624,"mutability":"mutable","name":"i","nameLocation":"8670:1:134","nodeType":"VariableDeclaration","scope":43656,"src":"8662:9:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43623,"name":"uint256","nodeType":"ElementaryTypeName","src":"8662:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":43626,"initialValue":{"hexValue":"30","id":43625,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8674:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8662:13:134"},"nodeType":"ForStatement","src":"8657:223:134"},{"expression":{"id":43657,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43609,"src":"8893:5:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TrieNode_$43130_memory_ptr_$dyn_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory[] memory"}},"functionReturnParameters":43593,"id":43658,"nodeType":"Return","src":"8886:12:134"}]},"documentation":{"id":43585,"nodeType":"StructuredDocumentation","src":"8206:191:134","text":" @notice Parses an RLP-encoded proof into something more useful.\n @param _proof RLP-encoded proof to parse.\n @return _parsed Proof parsed into easily accessible structs."},"id":43660,"implemented":true,"kind":"function","modifiers":[],"name":"_parseProof","nameLocation":"8409:11:134","nodeType":"FunctionDefinition","parameters":{"id":43588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43587,"mutability":"mutable","name":"_proof","nameLocation":"8434:6:134","nodeType":"VariableDeclaration","scope":43660,"src":"8421:19:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43586,"name":"bytes","nodeType":"ElementaryTypeName","src":"8421:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8420:21:134"},"returnParameters":{"id":43593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43592,"mutability":"mutable","name":"_parsed","nameLocation":"8482:7:134","nodeType":"VariableDeclaration","scope":43660,"src":"8464:25:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TrieNode_$43130_memory_ptr_$dyn_memory_ptr","typeString":"struct MerkleTrie.TrieNode[]"},"typeName":{"baseType":{"id":43590,"nodeType":"UserDefinedTypeName","pathNode":{"id":43589,"name":"TrieNode","nameLocations":["8464:8:134"],"nodeType":"IdentifierPath","referencedDeclaration":43130,"src":"8464:8:134"},"referencedDeclaration":43130,"src":"8464:8:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_storage_ptr","typeString":"struct MerkleTrie.TrieNode"}},"id":43591,"nodeType":"ArrayTypeName","src":"8464:10:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TrieNode_$43130_storage_$dyn_storage_ptr","typeString":"struct MerkleTrie.TrieNode[]"}},"visibility":"internal"}],"src":"8463:27:134"},"scope":43782,"src":"8400:503:134","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":43698,"nodeType":"Block","src":"9290:310:134","statements":[{"assignments":[43670],"declarations":[{"constant":false,"id":43670,"mutability":"mutable","name":"nodeID","nameLocation":"9309:6:134","nodeType":"VariableDeclaration","scope":43698,"src":"9296:19:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43669,"name":"bytes","nodeType":"ElementaryTypeName","src":"9296:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":43671,"nodeType":"VariableDeclarationStatement","src":"9296:19:134"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":43672,"name":"_node","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43664,"src":"9326:5:134","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":43673,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9332:6:134","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":43896,"src":"9326:12:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"3332","id":43674,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9341:2:134","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"9326:17:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":43691,"nodeType":"Block","src":"9458:96:134","statements":[{"expression":{"id":43689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43684,"name":"nodeID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43670,"src":"9512:6:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":43687,"name":"_node","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43664,"src":"9541:5:134","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"expression":{"id":43685,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44630,"src":"9521:9:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$44630_$","typeString":"type(library RLPReader)"}},"id":43686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9531:9:134","memberName":"readBytes","nodeType":"MemberAccess","referencedDeclaration":44078,"src":"9521:19:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes memory)"}},"id":43688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9521:26:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"9512:35:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43690,"nodeType":"ExpressionStatement","src":"9512:35:134"}]},"id":43692,"nodeType":"IfStatement","src":"9322:232:134","trueBody":{"id":43683,"nodeType":"Block","src":"9345:107:134","statements":[{"expression":{"id":43681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43676,"name":"nodeID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43670,"src":"9407:6:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":43679,"name":"_node","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43664,"src":"9439:5:134","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"expression":{"id":43677,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44630,"src":"9416:9:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$44630_$","typeString":"type(library RLPReader)"}},"id":43678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9426:12:134","memberName":"readRawBytes","nodeType":"MemberAccess","referencedDeclaration":44349,"src":"9416:22:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes memory)"}},"id":43680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9416:29:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"9407:38:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43682,"nodeType":"ExpressionStatement","src":"9407:38:134"}]}},{"expression":{"arguments":[{"id":43695,"name":"nodeID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43670,"src":"9588:6:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":43693,"name":"BytesUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43112,"src":"9567:10:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BytesUtils_$43112_$","typeString":"type(library BytesUtils)"}},"id":43694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9578:9:134","memberName":"toBytes32","nodeType":"MemberAccess","referencedDeclaration":42948,"src":"9567:20:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":43696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9567:28:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":43668,"id":43697,"nodeType":"Return","src":"9560:35:134"}]},"documentation":{"id":43661,"nodeType":"StructuredDocumentation","src":"8907:289:134","text":" @notice Picks out the ID for a node. Node ID is referred to as the\n \"hash\" within the specification, but nodes < 32 bytes are not actually\n hashed.\n @param _node Node to pull an ID for.\n @return _nodeID ID for the node, depending on the size of its contents."},"id":43699,"implemented":true,"kind":"function","modifiers":[],"name":"_getNodeID","nameLocation":"9208:10:134","nodeType":"FunctionDefinition","parameters":{"id":43665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43664,"mutability":"mutable","name":"_node","nameLocation":"9244:5:134","nodeType":"VariableDeclaration","scope":43699,"src":"9219:30:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":43663,"nodeType":"UserDefinedTypeName","pathNode":{"id":43662,"name":"RLPReader.RLPItem","nameLocations":["9219:9:134","9229:7:134"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"9219:17:134"},"referencedDeclaration":43899,"src":"9219:17:134","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"9218:32:134"},"returnParameters":{"id":43668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43667,"mutability":"mutable","name":"_nodeID","nameLocation":"9281:7:134","nodeType":"VariableDeclaration","scope":43699,"src":"9273:15:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":43666,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9273:7:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9272:17:134"},"scope":43782,"src":"9199:401:134","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":43719,"nodeType":"Block","src":"9866:77:134","statements":[{"expression":{"arguments":[{"arguments":[{"baseExpression":{"expression":{"id":43712,"name":"_node","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43703,"src":"9920:5:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}},"id":43713,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9926:7:134","memberName":"decoded","nodeType":"MemberAccess","referencedDeclaration":43129,"src":"9920:13:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":43715,"indexExpression":{"hexValue":"30","id":43714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9934:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9920:16:134","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"expression":{"id":43710,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44630,"src":"9900:9:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$44630_$","typeString":"type(library RLPReader)"}},"id":43711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9910:9:134","memberName":"readBytes","nodeType":"MemberAccess","referencedDeclaration":44078,"src":"9900:19:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes memory)"}},"id":43716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9900:37:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":43708,"name":"BytesUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43112,"src":"9879:10:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BytesUtils_$43112_$","typeString":"type(library BytesUtils)"}},"id":43709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9890:9:134","memberName":"toNibbles","nodeType":"MemberAccess","referencedDeclaration":43033,"src":"9879:20:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bytes memory)"}},"id":43717,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9879:59:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":43707,"id":43718,"nodeType":"Return","src":"9872:66:134"}]},"documentation":{"id":43700,"nodeType":"StructuredDocumentation","src":"9604:172:134","text":" @notice Gets the path for a leaf or extension node.\n @param _node Node to get a path for.\n @return _path Node path, converted to an array of nibbles."},"id":43720,"implemented":true,"kind":"function","modifiers":[],"name":"_getNodePath","nameLocation":"9788:12:134","nodeType":"FunctionDefinition","parameters":{"id":43704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43703,"mutability":"mutable","name":"_node","nameLocation":"9817:5:134","nodeType":"VariableDeclaration","scope":43720,"src":"9801:21:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode"},"typeName":{"id":43702,"nodeType":"UserDefinedTypeName","pathNode":{"id":43701,"name":"TrieNode","nameLocations":["9801:8:134"],"nodeType":"IdentifierPath","referencedDeclaration":43130,"src":"9801:8:134"},"referencedDeclaration":43130,"src":"9801:8:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_storage_ptr","typeString":"struct MerkleTrie.TrieNode"}},"visibility":"internal"}],"src":"9800:23:134"},"returnParameters":{"id":43707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43706,"mutability":"mutable","name":"_path","nameLocation":"9859:5:134","nodeType":"VariableDeclaration","scope":43720,"src":"9846:18:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43705,"name":"bytes","nodeType":"ElementaryTypeName","src":"9846:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9845:20:134"},"scope":43782,"src":"9779:164:134","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":43741,"nodeType":"Block","src":"10176:78:134","statements":[{"expression":{"arguments":[{"baseExpression":{"expression":{"id":43731,"name":"_node","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43724,"src":"10209:5:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}},"id":43732,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10215:7:134","memberName":"decoded","nodeType":"MemberAccess","referencedDeclaration":43129,"src":"10209:13:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":43738,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":43733,"name":"_node","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43724,"src":"10223:5:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode memory"}},"id":43734,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10229:7:134","memberName":"decoded","nodeType":"MemberAccess","referencedDeclaration":43129,"src":"10223:13:134","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":43735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10237:6:134","memberName":"length","nodeType":"MemberAccess","src":"10223:20:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":43736,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10246:1:134","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10223:24:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10209:39:134","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"expression":{"id":43729,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44630,"src":"10189:9:134","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$44630_$","typeString":"type(library RLPReader)"}},"id":43730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10199:9:134","memberName":"readBytes","nodeType":"MemberAccess","referencedDeclaration":44078,"src":"10189:19:134","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes memory)"}},"id":43739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10189:60:134","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":43728,"id":43740,"nodeType":"Return","src":"10182:67:134"}]},"documentation":{"id":43721,"nodeType":"StructuredDocumentation","src":"9947:137:134","text":" @notice Gets the path for a node.\n @param _node Node to get a value for.\n @return _value Node value, as hex bytes."},"id":43742,"implemented":true,"kind":"function","modifiers":[],"name":"_getNodeValue","nameLocation":"10096:13:134","nodeType":"FunctionDefinition","parameters":{"id":43725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43724,"mutability":"mutable","name":"_node","nameLocation":"10126:5:134","nodeType":"VariableDeclaration","scope":43742,"src":"10110:21:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_memory_ptr","typeString":"struct MerkleTrie.TrieNode"},"typeName":{"id":43723,"nodeType":"UserDefinedTypeName","pathNode":{"id":43722,"name":"TrieNode","nameLocations":["10110:8:134"],"nodeType":"IdentifierPath","referencedDeclaration":43130,"src":"10110:8:134"},"referencedDeclaration":43130,"src":"10110:8:134","typeDescriptions":{"typeIdentifier":"t_struct$_TrieNode_$43130_storage_ptr","typeString":"struct MerkleTrie.TrieNode"}},"visibility":"internal"}],"src":"10109:23:134"},"returnParameters":{"id":43728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43727,"mutability":"mutable","name":"_value","nameLocation":"10168:6:134","nodeType":"VariableDeclaration","scope":43742,"src":"10155:19:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43726,"name":"bytes","nodeType":"ElementaryTypeName","src":"10155:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10154:21:134"},"scope":43782,"src":"10087:167:134","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":43780,"nodeType":"Block","src":"10587:118:134","statements":[{"assignments":[43753],"declarations":[{"constant":false,"id":43753,"mutability":"mutable","name":"i","nameLocation":"10601:1:134","nodeType":"VariableDeclaration","scope":43780,"src":"10593:9:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43752,"name":"uint256","nodeType":"ElementaryTypeName","src":"10593:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":43755,"initialValue":{"hexValue":"30","id":43754,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10605:1:134","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10593:13:134"},{"body":{"id":43776,"nodeType":"Block","src":"10669:18:134","statements":[{"expression":{"id":43774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"10677:3:134","subExpression":{"id":43773,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43753,"src":"10677:1:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43775,"nodeType":"ExpressionStatement","src":"10677:3:134"}]},"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":43772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":43764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":43756,"name":"_a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43745,"src":"10619:2:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10622:6:134","memberName":"length","nodeType":"MemberAccess","src":"10619:9:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":43758,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43753,"src":"10631:1:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10619:13:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":43760,"name":"_b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43747,"src":"10636:2:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10639:6:134","memberName":"length","nodeType":"MemberAccess","src":"10636:9:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":43762,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43753,"src":"10648:1:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10636:13:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10619:30:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":43771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":43765,"name":"_a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43745,"src":"10653:2:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43767,"indexExpression":{"id":43766,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43753,"src":"10656:1:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10653:5:134","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"baseExpression":{"id":43768,"name":"_b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43747,"src":"10662:2:134","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43770,"indexExpression":{"id":43769,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43753,"src":"10665:1:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10662:5:134","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"10653:14:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10619:48:134","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43777,"nodeType":"WhileStatement","src":"10612:75:134"},{"expression":{"id":43778,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43753,"src":"10699:1:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":43751,"id":43779,"nodeType":"Return","src":"10692:8:134"}]},"documentation":{"id":43743,"nodeType":"StructuredDocumentation","src":"10258:221:134","text":" @notice Utility; determines the number of nibbles shared between two\n nibble arrays.\n @param _a First nibble array.\n @param _b Second nibble array.\n @return _shared Number of shared nibbles."},"id":43781,"implemented":true,"kind":"function","modifiers":[],"name":"_getSharedNibbleLength","nameLocation":"10491:22:134","nodeType":"FunctionDefinition","parameters":{"id":43748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43745,"mutability":"mutable","name":"_a","nameLocation":"10527:2:134","nodeType":"VariableDeclaration","scope":43781,"src":"10514:15:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43744,"name":"bytes","nodeType":"ElementaryTypeName","src":"10514:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":43747,"mutability":"mutable","name":"_b","nameLocation":"10544:2:134","nodeType":"VariableDeclaration","scope":43781,"src":"10531:15:134","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43746,"name":"bytes","nodeType":"ElementaryTypeName","src":"10531:5:134","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10513:34:134"},"returnParameters":{"id":43751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43750,"mutability":"mutable","name":"_shared","nameLocation":"10578:7:134","nodeType":"VariableDeclaration","scope":43781,"src":"10570:15:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43749,"name":"uint256","nodeType":"ElementaryTypeName","src":"10570:7:134","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10569:17:134"},"scope":43782,"src":"10482:223:134","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":43783,"src":"359:10348:134","usedErrors":[]}],"src":"46:10662:134"},"id":134},"contracts/messaging/connectors/optimism/lib/OVMCodec.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/optimism/lib/OVMCodec.sol","exportedSymbols":{"OVMCodec":[43845],"RLPReader":[44630]},"id":43846,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":43784,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:135"},{"absolutePath":"contracts/messaging/connectors/optimism/lib/RLPReader.sol","file":"./RLPReader.sol","id":43786,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":43846,"sourceUnit":44631,"src":"93:42:135","symbolAliases":[{"foreign":{"id":43785,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44630,"src":"101:9:135","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"OVMCodec","contractDependencies":[],"contractKind":"library","documentation":{"id":43787,"nodeType":"StructuredDocumentation","src":"137:173:135","text":" @title OVMCodec\n @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/codec/Lib_OVMCodec.sol"},"fullyImplemented":true,"id":43845,"linearizedBaseContracts":[43845],"name":"OVMCodec","nameLocation":"319:8:135","nodeType":"ContractDefinition","nodes":[{"canonicalName":"OVMCodec.EVMAccount","id":43796,"members":[{"constant":false,"id":43789,"mutability":"mutable","name":"nonce","nameLocation":"411:5:135","nodeType":"VariableDeclaration","scope":43796,"src":"403:13:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43788,"name":"uint256","nodeType":"ElementaryTypeName","src":"403:7:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":43791,"mutability":"mutable","name":"balance","nameLocation":"430:7:135","nodeType":"VariableDeclaration","scope":43796,"src":"422:15:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43790,"name":"uint256","nodeType":"ElementaryTypeName","src":"422:7:135","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":43793,"mutability":"mutable","name":"storageRoot","nameLocation":"451:11:135","nodeType":"VariableDeclaration","scope":43796,"src":"443:19:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":43792,"name":"bytes32","nodeType":"ElementaryTypeName","src":"443:7:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":43795,"mutability":"mutable","name":"codeHash","nameLocation":"476:8:135","nodeType":"VariableDeclaration","scope":43796,"src":"468:16:135","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":43794,"name":"bytes32","nodeType":"ElementaryTypeName","src":"468:7:135","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"EVMAccount","nameLocation":"386:10:135","nodeType":"StructDefinition","scope":43845,"src":"379:110:135","visibility":"public"},{"body":{"id":43843,"nodeType":"Block","src":"751:352:135","statements":[{"assignments":[43810],"declarations":[{"constant":false,"id":43810,"mutability":"mutable","name":"accountState","nameLocation":"784:12:135","nodeType":"VariableDeclaration","scope":43843,"src":"757:39:135","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem[]"},"typeName":{"baseType":{"id":43808,"nodeType":"UserDefinedTypeName","pathNode":{"id":43807,"name":"RLPReader.RLPItem","nameLocations":["757:9:135","767:7:135"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"757:17:135"},"referencedDeclaration":43899,"src":"757:17:135","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"id":43809,"nodeType":"ArrayTypeName","src":"757:19:135","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"}},"visibility":"internal"}],"id":43815,"initialValue":{"arguments":[{"id":43813,"name":"_encoded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43799,"src":"818:8:135","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":43811,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44630,"src":"799:9:135","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$44630_$","typeString":"type(library RLPReader)"}},"id":43812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"809:8:135","memberName":"readList","nodeType":"MemberAccess","referencedDeclaration":44042,"src":"799:18:135","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr_$","typeString":"function (bytes memory) pure returns (struct RLPReader.RLPItem memory[] memory)"}},"id":43814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"799:28:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"757:70:135"},{"expression":{"arguments":[{"arguments":[{"baseExpression":{"id":43819,"name":"accountState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43810,"src":"897:12:135","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":43821,"indexExpression":{"hexValue":"30","id":43820,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"910:1:135","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"897:15:135","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"expression":{"id":43817,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44630,"src":"875:9:135","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$44630_$","typeString":"type(library RLPReader)"}},"id":43818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"885:11:135","memberName":"readUint256","nodeType":"MemberAccess","referencedDeclaration":44209,"src":"875:21:135","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256)"}},"id":43822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"875:38:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"baseExpression":{"id":43825,"name":"accountState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43810,"src":"954:12:135","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":43827,"indexExpression":{"hexValue":"31","id":43826,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"967:1:135","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"954:15:135","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"expression":{"id":43823,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44630,"src":"932:9:135","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$44630_$","typeString":"type(library RLPReader)"}},"id":43824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"942:11:135","memberName":"readUint256","nodeType":"MemberAccess","referencedDeclaration":44209,"src":"932:21:135","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256)"}},"id":43828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"932:38:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"baseExpression":{"id":43831,"name":"accountState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43810,"src":"1015:12:135","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":43833,"indexExpression":{"hexValue":"32","id":43832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1028:1:135","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1015:15:135","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"expression":{"id":43829,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44630,"src":"993:9:135","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$44630_$","typeString":"type(library RLPReader)"}},"id":43830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1003:11:135","memberName":"readBytes32","nodeType":"MemberAccess","referencedDeclaration":44177,"src":"993:21:135","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes32)"}},"id":43834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"993:38:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"baseExpression":{"id":43837,"name":"accountState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43810,"src":"1073:12:135","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":43839,"indexExpression":{"hexValue":"33","id":43838,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1086:1:135","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1073:15:135","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"expression":{"id":43835,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44630,"src":"1051:9:135","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$44630_$","typeString":"type(library RLPReader)"}},"id":43836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1061:11:135","memberName":"readBytes32","nodeType":"MemberAccess","referencedDeclaration":44177,"src":"1051:21:135","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes32)"}},"id":43840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1051:38:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":43816,"name":"EVMAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43796,"src":"847:10:135","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_EVMAccount_$43796_storage_ptr_$","typeString":"type(struct OVMCodec.EVMAccount storage pointer)"}},"id":43841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["868:5:135","923:7:135","980:11:135","1041:8:135"],"names":["nonce","balance","storageRoot","codeHash"],"nodeType":"FunctionCall","src":"847:251:135","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_EVMAccount_$43796_memory_ptr","typeString":"struct OVMCodec.EVMAccount memory"}},"functionReturnParameters":43804,"id":43842,"nodeType":"Return","src":"834:264:135"}]},"documentation":{"id":43797,"nodeType":"StructuredDocumentation","src":"493:164:135","text":" @notice Decodes an RLP-encoded account state into a useful struct.\n @param _encoded RLP-encoded account state.\n @return Account state struct."},"id":43844,"implemented":true,"kind":"function","modifiers":[],"name":"decodeEVMAccount","nameLocation":"669:16:135","nodeType":"FunctionDefinition","parameters":{"id":43800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43799,"mutability":"mutable","name":"_encoded","nameLocation":"699:8:135","nodeType":"VariableDeclaration","scope":43844,"src":"686:21:135","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43798,"name":"bytes","nodeType":"ElementaryTypeName","src":"686:5:135","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"685:23:135"},"returnParameters":{"id":43804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43803,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43844,"src":"732:17:135","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_EVMAccount_$43796_memory_ptr","typeString":"struct OVMCodec.EVMAccount"},"typeName":{"id":43802,"nodeType":"UserDefinedTypeName","pathNode":{"id":43801,"name":"EVMAccount","nameLocations":["732:10:135"],"nodeType":"IdentifierPath","referencedDeclaration":43796,"src":"732:10:135"},"referencedDeclaration":43796,"src":"732:10:135","typeDescriptions":{"typeIdentifier":"t_struct$_EVMAccount_$43796_storage_ptr","typeString":"struct OVMCodec.EVMAccount"}},"visibility":"internal"}],"src":"731:19:135"},"scope":43845,"src":"660:443:135","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":43846,"src":"311:794:135","usedErrors":[]}],"src":"46:1060:135"},"id":135},"contracts/messaging/connectors/optimism/lib/PredeployAddresses.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/optimism/lib/PredeployAddresses.sol","exportedSymbols":{"PredeployAddresses":[43885]},"id":43886,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":43847,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:136"},{"abstract":false,"baseContracts":[],"canonicalName":"PredeployAddresses","contractDependencies":[],"contractKind":"library","documentation":{"id":43848,"nodeType":"StructuredDocumentation","src":"71:197:136","text":" @title PredeployAddresses\n @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/constants/Lib_PredeployAddresses.sol"},"fullyImplemented":true,"id":43885,"linearizedBaseContracts":[43885],"name":"PredeployAddresses","nameLocation":"277:18:136","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":43851,"mutability":"constant","name":"L2_TO_L1_MESSAGE_PASSER","nameLocation":"326:23:136","nodeType":"VariableDeclaration","scope":43885,"src":"300:94:136","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43849,"name":"address","nodeType":"ElementaryTypeName","src":"300:7:136","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307834323030303030303030303030303030303030303030303030303030303030303030303030303030","id":43850,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"352:42:136","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x4200000000000000000000000000000000000000"},"visibility":"internal"},{"constant":true,"id":43854,"mutability":"constant","name":"L1_MESSAGE_SENDER","nameLocation":"424:17:136","nodeType":"VariableDeclaration","scope":43885,"src":"398:88:136","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43852,"name":"address","nodeType":"ElementaryTypeName","src":"398:7:136","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307834323030303030303030303030303030303030303030303030303030303030303030303030303031","id":43853,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"444:42:136","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x4200000000000000000000000000000000000001"},"visibility":"internal"},{"constant":true,"id":43857,"mutability":"constant","name":"DEPLOYER_WHITELIST","nameLocation":"516:18:136","nodeType":"VariableDeclaration","scope":43885,"src":"490:89:136","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43855,"name":"address","nodeType":"ElementaryTypeName","src":"490:7:136","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307834323030303030303030303030303030303030303030303030303030303030303030303030303032","id":43856,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"537:42:136","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x4200000000000000000000000000000000000002"},"visibility":"internal"},{"constant":true,"id":43863,"mutability":"constant","name":"OVM_ETH","nameLocation":"617:7:136","nodeType":"VariableDeclaration","scope":43885,"src":"583:95:136","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":43858,"name":"address","nodeType":"ElementaryTypeName","src":"583:15:136","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"value":{"arguments":[{"hexValue":"307844656164446541646465416464454164646561644445614444454164446561444465414430303030","id":43861,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"635:42:136","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":43860,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"627:8:136","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":43859,"name":"address","nodeType":"ElementaryTypeName","src":"627:8:136","stateMutability":"payable","typeDescriptions":{}}},"id":43862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"627:51:136","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":true,"id":43866,"mutability":"constant","name":"L2_CROSS_DOMAIN_MESSENGER","nameLocation":"708:25:136","nodeType":"VariableDeclaration","scope":43885,"src":"682:96:136","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43864,"name":"address","nodeType":"ElementaryTypeName","src":"682:7:136","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307834323030303030303030303030303030303030303030303030303030303030303030303030303037","id":43865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"736:42:136","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x4200000000000000000000000000000000000007"},"visibility":"internal"},{"constant":true,"id":43869,"mutability":"constant","name":"LIB_ADDRESS_MANAGER","nameLocation":"808:19:136","nodeType":"VariableDeclaration","scope":43885,"src":"782:90:136","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43867,"name":"address","nodeType":"ElementaryTypeName","src":"782:7:136","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307834323030303030303030303030303030303030303030303030303030303030303030303030303038","id":43868,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"830:42:136","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x4200000000000000000000000000000000000008"},"visibility":"internal"},{"constant":true,"id":43872,"mutability":"constant","name":"PROXY_EOA","nameLocation":"902:9:136","nodeType":"VariableDeclaration","scope":43885,"src":"876:80:136","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43870,"name":"address","nodeType":"ElementaryTypeName","src":"876:7:136","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307834323030303030303030303030303030303030303030303030303030303030303030303030303039","id":43871,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"914:42:136","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x4200000000000000000000000000000000000009"},"visibility":"internal"},{"constant":true,"id":43875,"mutability":"constant","name":"L2_STANDARD_BRIDGE","nameLocation":"986:18:136","nodeType":"VariableDeclaration","scope":43885,"src":"960:89:136","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43873,"name":"address","nodeType":"ElementaryTypeName","src":"960:7:136","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307834323030303030303030303030303030303030303030303030303030303030303030303030303130","id":43874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1007:42:136","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x4200000000000000000000000000000000000010"},"visibility":"internal"},{"constant":true,"id":43878,"mutability":"constant","name":"SEQUENCER_FEE_WALLET","nameLocation":"1079:20:136","nodeType":"VariableDeclaration","scope":43885,"src":"1053:91:136","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43876,"name":"address","nodeType":"ElementaryTypeName","src":"1053:7:136","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307834323030303030303030303030303030303030303030303030303030303030303030303030303131","id":43877,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1102:42:136","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x4200000000000000000000000000000000000011"},"visibility":"internal"},{"constant":true,"id":43881,"mutability":"constant","name":"L2_STANDARD_TOKEN_FACTORY","nameLocation":"1174:25:136","nodeType":"VariableDeclaration","scope":43885,"src":"1148:96:136","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43879,"name":"address","nodeType":"ElementaryTypeName","src":"1148:7:136","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307834323030303030303030303030303030303030303030303030303030303030303030303030303132","id":43880,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1202:42:136","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x4200000000000000000000000000000000000012"},"visibility":"internal"},{"constant":true,"id":43884,"mutability":"constant","name":"L1_BLOCK_NUMBER","nameLocation":"1274:15:136","nodeType":"VariableDeclaration","scope":43885,"src":"1248:86:136","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43882,"name":"address","nodeType":"ElementaryTypeName","src":"1248:7:136","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307834323030303030303030303030303030303030303030303030303030303030303030303030303133","id":43883,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1292:42:136","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x4200000000000000000000000000000000000013"},"visibility":"internal"}],"scope":43886,"src":"269:1068:136","usedErrors":[]}],"src":"46:1292:136"},"id":136},"contracts/messaging/connectors/optimism/lib/RLPReader.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/optimism/lib/RLPReader.sol","exportedSymbols":{"RLPReader":[44630]},"id":44631,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":43887,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:137"},{"abstract":false,"baseContracts":[],"canonicalName":"RLPReader","contractDependencies":[],"contractKind":"library","documentation":{"id":43888,"nodeType":"StructuredDocumentation","src":"71:170:137","text":" @title RLPReader\n @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/rlp/Lib_RLPReader.sol"},"fullyImplemented":true,"id":44630,"linearizedBaseContracts":[44630],"name":"RLPReader","nameLocation":"250:9:137","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":43891,"mutability":"constant","name":"MAX_LIST_LENGTH","nameLocation":"343:15:137","nodeType":"VariableDeclaration","scope":44630,"src":"317:46:137","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43889,"name":"uint256","nodeType":"ElementaryTypeName","src":"317:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3332","id":43890,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"361:2:137","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"visibility":"internal"},{"canonicalName":"RLPReader.RLPItemType","id":43894,"members":[{"id":43892,"name":"DATA_ITEM","nameLocation":"432:9:137","nodeType":"EnumValue","src":"432:9:137"},{"id":43893,"name":"LIST_ITEM","nameLocation":"447:9:137","nodeType":"EnumValue","src":"447:9:137"}],"name":"RLPItemType","nameLocation":"414:11:137","nodeType":"EnumDefinition","src":"409:51:137"},{"canonicalName":"RLPReader.RLPItem","id":43899,"members":[{"constant":false,"id":43896,"mutability":"mutable","name":"length","nameLocation":"540:6:137","nodeType":"VariableDeclaration","scope":43899,"src":"532:14:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43895,"name":"uint256","nodeType":"ElementaryTypeName","src":"532:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":43898,"mutability":"mutable","name":"ptr","nameLocation":"560:3:137","nodeType":"VariableDeclaration","scope":43899,"src":"552:11:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43897,"name":"uint256","nodeType":"ElementaryTypeName","src":"552:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"RLPItem","nameLocation":"518:7:137","nodeType":"StructDefinition","scope":44630,"src":"511:57:137","visibility":"public"},{"body":{"id":43918,"nodeType":"Block","src":"884:122:137","statements":[{"assignments":[43909],"declarations":[{"constant":false,"id":43909,"mutability":"mutable","name":"ptr","nameLocation":"898:3:137","nodeType":"VariableDeclaration","scope":43918,"src":"890:11:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43908,"name":"uint256","nodeType":"ElementaryTypeName","src":"890:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":43910,"nodeType":"VariableDeclarationStatement","src":"890:11:137"},{"AST":{"nodeType":"YulBlock","src":"916:33:137","statements":[{"nodeType":"YulAssignment","src":"924:19:137","value":{"arguments":[{"name":"_in","nodeType":"YulIdentifier","src":"935:3:137"},{"kind":"number","nodeType":"YulLiteral","src":"940:2:137","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"931:3:137"},"nodeType":"YulFunctionCall","src":"931:12:137"},"variableNames":[{"name":"ptr","nodeType":"YulIdentifier","src":"924:3:137"}]}]},"evmVersion":"london","externalReferences":[{"declaration":43902,"isOffset":false,"isSlot":false,"src":"935:3:137","valueSize":1},{"declaration":43909,"isOffset":false,"isSlot":false,"src":"924:3:137","valueSize":1}],"id":43911,"nodeType":"InlineAssembly","src":"907:42:137"},{"expression":{"arguments":[{"expression":{"id":43913,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43902,"src":"979:3:137","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":43914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"983:6:137","memberName":"length","nodeType":"MemberAccess","src":"979:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":43915,"name":"ptr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43909,"src":"996:3:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43912,"name":"RLPItem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43899,"src":"962:7:137","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RLPItem_$43899_storage_ptr_$","typeString":"type(struct RLPReader.RLPItem storage pointer)"}},"id":43916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["971:6:137","991:3:137"],"names":["length","ptr"],"nodeType":"FunctionCall","src":"962:39:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"functionReturnParameters":43907,"id":43917,"nodeType":"Return","src":"955:46:137"}]},"documentation":{"id":43900,"nodeType":"StructuredDocumentation","src":"652:153:137","text":" Converts bytes to a reference to memory position and length.\n @param _in Input bytes to convert.\n @return Output memory reference."},"id":43919,"implemented":true,"kind":"function","modifiers":[],"name":"toRLPItem","nameLocation":"817:9:137","nodeType":"FunctionDefinition","parameters":{"id":43903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43902,"mutability":"mutable","name":"_in","nameLocation":"840:3:137","nodeType":"VariableDeclaration","scope":43919,"src":"827:16:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":43901,"name":"bytes","nodeType":"ElementaryTypeName","src":"827:5:137","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"826:18:137"},"returnParameters":{"id":43907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43906,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43919,"src":"868:14:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":43905,"nodeType":"UserDefinedTypeName","pathNode":{"id":43904,"name":"RLPItem","nameLocations":["868:7:137"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"868:7:137"},"referencedDeclaration":43899,"src":"868:7:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"867:16:137"},"scope":44630,"src":"808:198:137","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44024,"nodeType":"Block","src":"1225:1211:137","statements":[{"assignments":[43931,null,43934],"declarations":[{"constant":false,"id":43931,"mutability":"mutable","name":"listOffset","nameLocation":"1240:10:137","nodeType":"VariableDeclaration","scope":44024,"src":"1232:18:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43930,"name":"uint256","nodeType":"ElementaryTypeName","src":"1232:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null,{"constant":false,"id":43934,"mutability":"mutable","name":"itemType","nameLocation":"1266:8:137","nodeType":"VariableDeclaration","scope":44024,"src":"1254:20:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"},"typeName":{"id":43933,"nodeType":"UserDefinedTypeName","pathNode":{"id":43932,"name":"RLPItemType","nameLocations":["1254:11:137"],"nodeType":"IdentifierPath","referencedDeclaration":43894,"src":"1254:11:137"},"referencedDeclaration":43894,"src":"1254:11:137","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"}},"visibility":"internal"}],"id":43938,"initialValue":{"arguments":[{"id":43936,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43923,"src":"1292:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":43935,"name":"_decodeLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44528,"src":"1278:13:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_enum$_RLPItemType_$43894_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256,uint256,enum RLPReader.RLPItemType)"}},"id":43937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1278:18:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_enum$_RLPItemType_$43894_$","typeString":"tuple(uint256,uint256,enum RLPReader.RLPItemType)"}},"nodeType":"VariableDeclarationStatement","src":"1231:65:137"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"},"id":43943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43940,"name":"itemType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43934,"src":"1311:8:137","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":43941,"name":"RLPItemType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43894,"src":"1323:11:137","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RLPItemType_$43894_$","typeString":"type(enum RLPReader.RLPItemType)"}},"id":43942,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1335:9:137","memberName":"LIST_ITEM","nodeType":"MemberAccess","referencedDeclaration":43893,"src":"1323:21:137","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"}},"src":"1311:33:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420524c50206c6973742076616c75652e","id":43944,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1346:25:137","typeDescriptions":{"typeIdentifier":"t_stringliteral_848de431415f0c3627b6ae0a9dbc7e8072c165b6a18cec94d54fe6ab8855172a","typeString":"literal_string \"Invalid RLP list value.\""},"value":"Invalid RLP list value."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_848de431415f0c3627b6ae0a9dbc7e8072c165b6a18cec94d54fe6ab8855172a","typeString":"literal_string \"Invalid RLP list value.\""}],"id":43939,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1303:7:137","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":43945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1303:69:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":43946,"nodeType":"ExpressionStatement","src":"1303:69:137"},{"assignments":[43951],"declarations":[{"constant":false,"id":43951,"mutability":"mutable","name":"out","nameLocation":"1772:3:137","nodeType":"VariableDeclaration","scope":44024,"src":"1755:20:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem[]"},"typeName":{"baseType":{"id":43949,"nodeType":"UserDefinedTypeName","pathNode":{"id":43948,"name":"RLPItem","nameLocations":["1755:7:137"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"1755:7:137"},"referencedDeclaration":43899,"src":"1755:7:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"id":43950,"nodeType":"ArrayTypeName","src":"1755:9:137","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"}},"visibility":"internal"}],"id":43958,"initialValue":{"arguments":[{"id":43956,"name":"MAX_LIST_LENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43891,"src":"1792:15:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43955,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1778:13:137","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct RLPReader.RLPItem memory[] memory)"},"typeName":{"baseType":{"id":43953,"nodeType":"UserDefinedTypeName","pathNode":{"id":43952,"name":"RLPItem","nameLocations":["1782:7:137"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"1782:7:137"},"referencedDeclaration":43899,"src":"1782:7:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"id":43954,"nodeType":"ArrayTypeName","src":"1782:9:137","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"}}},"id":43957,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1778:30:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1755:53:137"},{"assignments":[43960],"declarations":[{"constant":false,"id":43960,"mutability":"mutable","name":"itemCount","nameLocation":"1823:9:137","nodeType":"VariableDeclaration","scope":44024,"src":"1815:17:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43959,"name":"uint256","nodeType":"ElementaryTypeName","src":"1815:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":43962,"initialValue":{"hexValue":"30","id":43961,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1835:1:137","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1815:21:137"},{"assignments":[43964],"declarations":[{"constant":false,"id":43964,"mutability":"mutable","name":"offset","nameLocation":"1850:6:137","nodeType":"VariableDeclaration","scope":44024,"src":"1842:14:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43963,"name":"uint256","nodeType":"ElementaryTypeName","src":"1842:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":43966,"initialValue":{"id":43965,"name":"listOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43931,"src":"1859:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1842:27:137"},{"body":{"id":44019,"nodeType":"Block","src":"1903:398:137","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43972,"name":"itemCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43960,"src":"1919:9:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":43973,"name":"MAX_LIST_LENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43891,"src":"1931:15:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1919:27:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"50726f766964656420524c50206c6973742065786365656473206d6178206c697374206c656e6774682e","id":43975,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1948:44:137","typeDescriptions":{"typeIdentifier":"t_stringliteral_5087e62b30af24eb438474b5124c062b0df85cd3cdf4ea6c03991870220714c1","typeString":"literal_string \"Provided RLP list exceeds max list length.\""},"value":"Provided RLP list exceeds max list length."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5087e62b30af24eb438474b5124c062b0df85cd3cdf4ea6c03991870220714c1","typeString":"literal_string \"Provided RLP list exceeds max list length.\""}],"id":43971,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1911:7:137","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":43976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1911:82:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":43977,"nodeType":"ExpressionStatement","src":"1911:82:137"},{"assignments":[43979,43981,null],"declarations":[{"constant":false,"id":43979,"mutability":"mutable","name":"itemOffset","nameLocation":"2011:10:137","nodeType":"VariableDeclaration","scope":44019,"src":"2003:18:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43978,"name":"uint256","nodeType":"ElementaryTypeName","src":"2003:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":43981,"mutability":"mutable","name":"itemLength","nameLocation":"2031:10:137","nodeType":"VariableDeclaration","scope":44019,"src":"2023:18:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43980,"name":"uint256","nodeType":"ElementaryTypeName","src":"2023:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":43994,"initialValue":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":43984,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43923,"src":"2087:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":43985,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2091:6:137","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":43896,"src":"2087:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":43986,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43964,"src":"2100:6:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2087:19:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":43988,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43923,"src":"2113:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":43989,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2117:3:137","memberName":"ptr","nodeType":"MemberAccess","referencedDeclaration":43898,"src":"2113:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":43990,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43964,"src":"2123:6:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2113:16:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43983,"name":"RLPItem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43899,"src":"2070:7:137","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RLPItem_$43899_storage_ptr_$","typeString":"type(struct RLPReader.RLPItem storage pointer)"}},"id":43992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["2079:6:137","2108:3:137"],"names":["length","ptr"],"nodeType":"FunctionCall","src":"2070:61:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":43982,"name":"_decodeLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44528,"src":"2047:13:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_enum$_RLPItemType_$43894_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256,uint256,enum RLPReader.RLPItemType)"}},"id":43993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2047:92:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_enum$_RLPItemType_$43894_$","typeString":"tuple(uint256,uint256,enum RLPReader.RLPItemType)"}},"nodeType":"VariableDeclarationStatement","src":"2002:137:137"},{"expression":{"id":44007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":43995,"name":"out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43951,"src":"2148:3:137","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":43997,"indexExpression":{"id":43996,"name":"itemCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43960,"src":"2152:9:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2148:14:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43999,"name":"itemLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43981,"src":"2182:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":44000,"name":"itemOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43979,"src":"2195:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2182:23:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":44002,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43923,"src":"2212:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44003,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2216:3:137","memberName":"ptr","nodeType":"MemberAccess","referencedDeclaration":43898,"src":"2212:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":44004,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43964,"src":"2222:6:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2212:16:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43998,"name":"RLPItem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43899,"src":"2165:7:137","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RLPItem_$43899_storage_ptr_$","typeString":"type(struct RLPReader.RLPItem storage pointer)"}},"id":44006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["2174:6:137","2207:3:137"],"names":["length","ptr"],"nodeType":"FunctionCall","src":"2165:65:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"src":"2148:82:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44008,"nodeType":"ExpressionStatement","src":"2148:82:137"},{"expression":{"id":44011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44009,"name":"itemCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43960,"src":"2239:9:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":44010,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2252:1:137","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2239:14:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":44012,"nodeType":"ExpressionStatement","src":"2239:14:137"},{"expression":{"id":44017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44013,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43964,"src":"2261:6:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44014,"name":"itemOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43979,"src":"2271:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":44015,"name":"itemLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43981,"src":"2284:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2271:23:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2261:33:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":44018,"nodeType":"ExpressionStatement","src":"2261:33:137"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43967,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43964,"src":"1882:6:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":43968,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43923,"src":"1891:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":43969,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1895:6:137","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":43896,"src":"1891:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1882:19:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44020,"nodeType":"WhileStatement","src":"1875:426:137"},{"AST":{"nodeType":"YulBlock","src":"2379:36:137","statements":[{"expression":{"arguments":[{"name":"out","nodeType":"YulIdentifier","src":"2394:3:137"},{"name":"itemCount","nodeType":"YulIdentifier","src":"2399:9:137"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2387:6:137"},"nodeType":"YulFunctionCall","src":"2387:22:137"},"nodeType":"YulExpressionStatement","src":"2387:22:137"}]},"evmVersion":"london","externalReferences":[{"declaration":43960,"isOffset":false,"isSlot":false,"src":"2399:9:137","valueSize":1},{"declaration":43951,"isOffset":false,"isSlot":false,"src":"2394:3:137","valueSize":1}],"id":44021,"nodeType":"InlineAssembly","src":"2370:45:137"},{"expression":{"id":44022,"name":"out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43951,"src":"2428:3:137","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"functionReturnParameters":43929,"id":44023,"nodeType":"Return","src":"2421:10:137"}]},"documentation":{"id":43920,"nodeType":"StructuredDocumentation","src":"1010:133:137","text":" Reads an RLP list value into a list of RLP items.\n @param _in RLP list value.\n @return Decoded RLP list items."},"id":44025,"implemented":true,"kind":"function","modifiers":[],"name":"readList","nameLocation":"1155:8:137","nodeType":"FunctionDefinition","parameters":{"id":43924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43923,"mutability":"mutable","name":"_in","nameLocation":"1179:3:137","nodeType":"VariableDeclaration","scope":44025,"src":"1164:18:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":43922,"nodeType":"UserDefinedTypeName","pathNode":{"id":43921,"name":"RLPItem","nameLocations":["1164:7:137"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"1164:7:137"},"referencedDeclaration":43899,"src":"1164:7:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"1163:20:137"},"returnParameters":{"id":43929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43928,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44025,"src":"1207:16:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem[]"},"typeName":{"baseType":{"id":43926,"nodeType":"UserDefinedTypeName","pathNode":{"id":43925,"name":"RLPItem","nameLocations":["1207:7:137"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"1207:7:137"},"referencedDeclaration":43899,"src":"1207:7:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"id":43927,"nodeType":"ArrayTypeName","src":"1207:9:137","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"}},"visibility":"internal"}],"src":"1206:18:137"},"scope":44630,"src":"1146:1290:137","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44041,"nodeType":"Block","src":"2653:42:137","statements":[{"expression":{"arguments":[{"arguments":[{"id":44037,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44028,"src":"2685:3:137","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":44036,"name":"toRLPItem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43919,"src":"2675:9:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_RLPItem_$43899_memory_ptr_$","typeString":"function (bytes memory) pure returns (struct RLPReader.RLPItem memory)"}},"id":44038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2675:14:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":44035,"name":"readList","nodeType":"Identifier","overloadedDeclarations":[44025,44042],"referencedDeclaration":44025,"src":"2666:8:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (struct RLPReader.RLPItem memory[] memory)"}},"id":44039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2666:24:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"functionReturnParameters":44034,"id":44040,"nodeType":"Return","src":"2659:31:137"}]},"documentation":{"id":44026,"nodeType":"StructuredDocumentation","src":"2440:133:137","text":" Reads an RLP list value into a list of RLP items.\n @param _in RLP list value.\n @return Decoded RLP list items."},"id":44042,"implemented":true,"kind":"function","modifiers":[],"name":"readList","nameLocation":"2585:8:137","nodeType":"FunctionDefinition","parameters":{"id":44029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44028,"mutability":"mutable","name":"_in","nameLocation":"2607:3:137","nodeType":"VariableDeclaration","scope":44042,"src":"2594:16:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44027,"name":"bytes","nodeType":"ElementaryTypeName","src":"2594:5:137","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2593:18:137"},"returnParameters":{"id":44034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44033,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44042,"src":"2635:16:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem[]"},"typeName":{"baseType":{"id":44031,"nodeType":"UserDefinedTypeName","pathNode":{"id":44030,"name":"RLPItem","nameLocations":["2635:7:137"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"2635:7:137"},"referencedDeclaration":43899,"src":"2635:7:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"id":44032,"nodeType":"ArrayTypeName","src":"2635:9:137","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$43899_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"}},"visibility":"internal"}],"src":"2634:18:137"},"scope":44630,"src":"2576:119:137","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44077,"nodeType":"Block","src":"2890:223:137","statements":[{"assignments":[44052,44054,44057],"declarations":[{"constant":false,"id":44052,"mutability":"mutable","name":"itemOffset","nameLocation":"2905:10:137","nodeType":"VariableDeclaration","scope":44077,"src":"2897:18:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44051,"name":"uint256","nodeType":"ElementaryTypeName","src":"2897:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":44054,"mutability":"mutable","name":"itemLength","nameLocation":"2925:10:137","nodeType":"VariableDeclaration","scope":44077,"src":"2917:18:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44053,"name":"uint256","nodeType":"ElementaryTypeName","src":"2917:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":44057,"mutability":"mutable","name":"itemType","nameLocation":"2949:8:137","nodeType":"VariableDeclaration","scope":44077,"src":"2937:20:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"},"typeName":{"id":44056,"nodeType":"UserDefinedTypeName","pathNode":{"id":44055,"name":"RLPItemType","nameLocations":["2937:11:137"],"nodeType":"IdentifierPath","referencedDeclaration":43894,"src":"2937:11:137"},"referencedDeclaration":43894,"src":"2937:11:137","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"}},"visibility":"internal"}],"id":44061,"initialValue":{"arguments":[{"id":44059,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44046,"src":"2975:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":44058,"name":"_decodeLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44528,"src":"2961:13:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_enum$_RLPItemType_$43894_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256,uint256,enum RLPReader.RLPItemType)"}},"id":44060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2961:18:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_enum$_RLPItemType_$43894_$","typeString":"tuple(uint256,uint256,enum RLPReader.RLPItemType)"}},"nodeType":"VariableDeclarationStatement","src":"2896:83:137"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"},"id":44066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44063,"name":"itemType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44057,"src":"2994:8:137","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":44064,"name":"RLPItemType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43894,"src":"3006:11:137","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RLPItemType_$43894_$","typeString":"type(enum RLPReader.RLPItemType)"}},"id":44065,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3018:9:137","memberName":"DATA_ITEM","nodeType":"MemberAccess","referencedDeclaration":43892,"src":"3006:21:137","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"}},"src":"2994:33:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420524c502062797465732076616c75652e","id":44067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3029:26:137","typeDescriptions":{"typeIdentifier":"t_stringliteral_ea5c908f6fb9ba591809871c4bac08fa77a46fe28384af8030ba9c22e2978554","typeString":"literal_string \"Invalid RLP bytes value.\""},"value":"Invalid RLP bytes value."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ea5c908f6fb9ba591809871c4bac08fa77a46fe28384af8030ba9c22e2978554","typeString":"literal_string \"Invalid RLP bytes value.\""}],"id":44062,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2986:7:137","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":44068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2986:70:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44069,"nodeType":"ExpressionStatement","src":"2986:70:137"},{"expression":{"arguments":[{"expression":{"id":44071,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44046,"src":"3076:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44072,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3080:3:137","memberName":"ptr","nodeType":"MemberAccess","referencedDeclaration":43898,"src":"3076:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":44073,"name":"itemOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44052,"src":"3085:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":44074,"name":"itemLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44054,"src":"3097:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":44070,"name":"_copy","nodeType":"Identifier","overloadedDeclarations":[44611,44629],"referencedDeclaration":44611,"src":"3070:5:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256,uint256,uint256) pure returns (bytes memory)"}},"id":44075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3070:38:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":44050,"id":44076,"nodeType":"Return","src":"3063:45:137"}]},"documentation":{"id":44043,"nodeType":"StructuredDocumentation","src":"2699:112:137","text":" Reads an RLP bytes value into bytes.\n @param _in RLP bytes value.\n @return Decoded bytes."},"id":44078,"implemented":true,"kind":"function","modifiers":[],"name":"readBytes","nameLocation":"2823:9:137","nodeType":"FunctionDefinition","parameters":{"id":44047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44046,"mutability":"mutable","name":"_in","nameLocation":"2848:3:137","nodeType":"VariableDeclaration","scope":44078,"src":"2833:18:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":44045,"nodeType":"UserDefinedTypeName","pathNode":{"id":44044,"name":"RLPItem","nameLocations":["2833:7:137"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"2833:7:137"},"referencedDeclaration":43899,"src":"2833:7:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"2832:20:137"},"returnParameters":{"id":44050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44049,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44078,"src":"2876:12:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44048,"name":"bytes","nodeType":"ElementaryTypeName","src":"2876:5:137","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2875:14:137"},"scope":44630,"src":"2814:299:137","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44092,"nodeType":"Block","src":"3306:43:137","statements":[{"expression":{"arguments":[{"arguments":[{"id":44088,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44081,"src":"3339:3:137","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":44087,"name":"toRLPItem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43919,"src":"3329:9:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_RLPItem_$43899_memory_ptr_$","typeString":"function (bytes memory) pure returns (struct RLPReader.RLPItem memory)"}},"id":44089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3329:14:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":44086,"name":"readBytes","nodeType":"Identifier","overloadedDeclarations":[44078,44093],"referencedDeclaration":44078,"src":"3319:9:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes memory)"}},"id":44090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3319:25:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":44085,"id":44091,"nodeType":"Return","src":"3312:32:137"}]},"documentation":{"id":44079,"nodeType":"StructuredDocumentation","src":"3117:112:137","text":" Reads an RLP bytes value into bytes.\n @param _in RLP bytes value.\n @return Decoded bytes."},"id":44093,"implemented":true,"kind":"function","modifiers":[],"name":"readBytes","nameLocation":"3241:9:137","nodeType":"FunctionDefinition","parameters":{"id":44082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44081,"mutability":"mutable","name":"_in","nameLocation":"3264:3:137","nodeType":"VariableDeclaration","scope":44093,"src":"3251:16:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44080,"name":"bytes","nodeType":"ElementaryTypeName","src":"3251:5:137","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3250:18:137"},"returnParameters":{"id":44085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44084,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44093,"src":"3292:12:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44083,"name":"bytes","nodeType":"ElementaryTypeName","src":"3292:5:137","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3291:14:137"},"scope":44630,"src":"3232:117:137","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44109,"nodeType":"Block","src":"3552:40:137","statements":[{"expression":{"arguments":[{"arguments":[{"id":44105,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44097,"src":"3582:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":44104,"name":"readBytes","nodeType":"Identifier","overloadedDeclarations":[44078,44093],"referencedDeclaration":44078,"src":"3572:9:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes memory)"}},"id":44106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3572:14:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":44103,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3565:6:137","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":44102,"name":"string","nodeType":"ElementaryTypeName","src":"3565:6:137","typeDescriptions":{}}},"id":44107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3565:22:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":44101,"id":44108,"nodeType":"Return","src":"3558:29:137"}]},"documentation":{"id":44094,"nodeType":"StructuredDocumentation","src":"3353:118:137","text":" Reads an RLP string value into a string.\n @param _in RLP string value.\n @return Decoded string."},"id":44110,"implemented":true,"kind":"function","modifiers":[],"name":"readString","nameLocation":"3483:10:137","nodeType":"FunctionDefinition","parameters":{"id":44098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44097,"mutability":"mutable","name":"_in","nameLocation":"3509:3:137","nodeType":"VariableDeclaration","scope":44110,"src":"3494:18:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":44096,"nodeType":"UserDefinedTypeName","pathNode":{"id":44095,"name":"RLPItem","nameLocations":["3494:7:137"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"3494:7:137"},"referencedDeclaration":43899,"src":"3494:7:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"3493:20:137"},"returnParameters":{"id":44101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44100,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44110,"src":"3537:13:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":44099,"name":"string","nodeType":"ElementaryTypeName","src":"3537:6:137","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3536:15:137"},"scope":44630,"src":"3474:118:137","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44124,"nodeType":"Block","src":"3793:44:137","statements":[{"expression":{"arguments":[{"arguments":[{"id":44120,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44113,"src":"3827:3:137","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":44119,"name":"toRLPItem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43919,"src":"3817:9:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_RLPItem_$43899_memory_ptr_$","typeString":"function (bytes memory) pure returns (struct RLPReader.RLPItem memory)"}},"id":44121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3817:14:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":44118,"name":"readString","nodeType":"Identifier","overloadedDeclarations":[44110,44125],"referencedDeclaration":44110,"src":"3806:10:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_string_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (string memory)"}},"id":44122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3806:26:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":44117,"id":44123,"nodeType":"Return","src":"3799:33:137"}]},"documentation":{"id":44111,"nodeType":"StructuredDocumentation","src":"3596:118:137","text":" Reads an RLP string value into a string.\n @param _in RLP string value.\n @return Decoded string."},"id":44125,"implemented":true,"kind":"function","modifiers":[],"name":"readString","nameLocation":"3726:10:137","nodeType":"FunctionDefinition","parameters":{"id":44114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44113,"mutability":"mutable","name":"_in","nameLocation":"3750:3:137","nodeType":"VariableDeclaration","scope":44125,"src":"3737:16:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44112,"name":"bytes","nodeType":"ElementaryTypeName","src":"3737:5:137","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3736:18:137"},"returnParameters":{"id":44117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44116,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44125,"src":"3778:13:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":44115,"name":"string","nodeType":"ElementaryTypeName","src":"3778:6:137","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3777:15:137"},"scope":44630,"src":"3717:120:137","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44176,"nodeType":"Block","src":"4039:530:137","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":44135,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44129,"src":"4077:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44136,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4081:6:137","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":43896,"src":"4077:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_rational_34_by_1","typeString":"int_const 34"},"id":44139,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3333","id":44137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4090:2:137","typeDescriptions":{"typeIdentifier":"t_rational_33_by_1","typeString":"int_const 33"},"value":"33"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":44138,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4095:1:137","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4090:6:137","typeDescriptions":{"typeIdentifier":"t_rational_34_by_1","typeString":"int_const 34"}},"src":"4077:19:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420524c5020627974657333322076616c75652e","id":44141,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4098:28:137","typeDescriptions":{"typeIdentifier":"t_stringliteral_697f2b4b75a3a3464c831501f59169c7eaa7683b6eb1ecfc8fd6c0d4011086b5","typeString":"literal_string \"Invalid RLP bytes32 value.\""},"value":"Invalid RLP bytes32 value."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_697f2b4b75a3a3464c831501f59169c7eaa7683b6eb1ecfc8fd6c0d4011086b5","typeString":"literal_string \"Invalid RLP bytes32 value.\""}],"id":44134,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4069:7:137","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":44142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4069:58:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44143,"nodeType":"ExpressionStatement","src":"4069:58:137"},{"assignments":[44145,44147,44150],"declarations":[{"constant":false,"id":44145,"mutability":"mutable","name":"itemOffset","nameLocation":"4143:10:137","nodeType":"VariableDeclaration","scope":44176,"src":"4135:18:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44144,"name":"uint256","nodeType":"ElementaryTypeName","src":"4135:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":44147,"mutability":"mutable","name":"itemLength","nameLocation":"4163:10:137","nodeType":"VariableDeclaration","scope":44176,"src":"4155:18:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44146,"name":"uint256","nodeType":"ElementaryTypeName","src":"4155:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":44150,"mutability":"mutable","name":"itemType","nameLocation":"4187:8:137","nodeType":"VariableDeclaration","scope":44176,"src":"4175:20:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"},"typeName":{"id":44149,"nodeType":"UserDefinedTypeName","pathNode":{"id":44148,"name":"RLPItemType","nameLocations":["4175:11:137"],"nodeType":"IdentifierPath","referencedDeclaration":43894,"src":"4175:11:137"},"referencedDeclaration":43894,"src":"4175:11:137","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"}},"visibility":"internal"}],"id":44154,"initialValue":{"arguments":[{"id":44152,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44129,"src":"4213:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":44151,"name":"_decodeLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44528,"src":"4199:13:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_enum$_RLPItemType_$43894_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256,uint256,enum RLPReader.RLPItemType)"}},"id":44153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4199:18:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_enum$_RLPItemType_$43894_$","typeString":"tuple(uint256,uint256,enum RLPReader.RLPItemType)"}},"nodeType":"VariableDeclarationStatement","src":"4134:83:137"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"},"id":44159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44156,"name":"itemType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44150,"src":"4232:8:137","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":44157,"name":"RLPItemType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43894,"src":"4244:11:137","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RLPItemType_$43894_$","typeString":"type(enum RLPReader.RLPItemType)"}},"id":44158,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4256:9:137","memberName":"DATA_ITEM","nodeType":"MemberAccess","referencedDeclaration":43892,"src":"4244:21:137","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"}},"src":"4232:33:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420524c5020627974657333322076616c75652e","id":44160,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4267:28:137","typeDescriptions":{"typeIdentifier":"t_stringliteral_697f2b4b75a3a3464c831501f59169c7eaa7683b6eb1ecfc8fd6c0d4011086b5","typeString":"literal_string \"Invalid RLP bytes32 value.\""},"value":"Invalid RLP bytes32 value."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_697f2b4b75a3a3464c831501f59169c7eaa7683b6eb1ecfc8fd6c0d4011086b5","typeString":"literal_string \"Invalid RLP bytes32 value.\""}],"id":44155,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4224:7:137","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":44161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4224:72:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44162,"nodeType":"ExpressionStatement","src":"4224:72:137"},{"assignments":[44164],"declarations":[{"constant":false,"id":44164,"mutability":"mutable","name":"ptr","nameLocation":"4311:3:137","nodeType":"VariableDeclaration","scope":44176,"src":"4303:11:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44163,"name":"uint256","nodeType":"ElementaryTypeName","src":"4303:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":44169,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":44165,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44129,"src":"4317:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44166,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4321:3:137","memberName":"ptr","nodeType":"MemberAccess","referencedDeclaration":43898,"src":"4317:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":44167,"name":"itemOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44145,"src":"4327:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4317:20:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4303:34:137"},{"assignments":[44171],"declarations":[{"constant":false,"id":44171,"mutability":"mutable","name":"out","nameLocation":"4351:3:137","nodeType":"VariableDeclaration","scope":44176,"src":"4343:11:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":44170,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4343:7:137","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":44172,"nodeType":"VariableDeclarationStatement","src":"4343:11:137"},{"AST":{"nodeType":"YulBlock","src":"4369:179:137","statements":[{"nodeType":"YulAssignment","src":"4377:17:137","value":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"4390:3:137"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4384:5:137"},"nodeType":"YulFunctionCall","src":"4384:10:137"},"variableNames":[{"name":"out","nodeType":"YulIdentifier","src":"4377:3:137"}]},{"body":{"nodeType":"YulBlock","src":"4478:64:137","statements":[{"nodeType":"YulAssignment","src":"4488:46:137","value":{"arguments":[{"name":"out","nodeType":"YulIdentifier","src":"4499:3:137"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4508:3:137","type":"","value":"256"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4517:2:137","type":"","value":"32"},{"name":"itemLength","nodeType":"YulIdentifier","src":"4521:10:137"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4513:3:137"},"nodeType":"YulFunctionCall","src":"4513:19:137"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"4504:3:137"},"nodeType":"YulFunctionCall","src":"4504:29:137"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"4495:3:137"},"nodeType":"YulFunctionCall","src":"4495:39:137"},"variableNames":[{"name":"out","nodeType":"YulIdentifier","src":"4488:3:137"}]}]},"condition":{"arguments":[{"name":"itemLength","nodeType":"YulIdentifier","src":"4462:10:137"},{"kind":"number","nodeType":"YulLiteral","src":"4474:2:137","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4459:2:137"},"nodeType":"YulFunctionCall","src":"4459:18:137"},"nodeType":"YulIf","src":"4456:86:137"}]},"evmVersion":"london","externalReferences":[{"declaration":44147,"isOffset":false,"isSlot":false,"src":"4462:10:137","valueSize":1},{"declaration":44147,"isOffset":false,"isSlot":false,"src":"4521:10:137","valueSize":1},{"declaration":44171,"isOffset":false,"isSlot":false,"src":"4377:3:137","valueSize":1},{"declaration":44171,"isOffset":false,"isSlot":false,"src":"4488:3:137","valueSize":1},{"declaration":44171,"isOffset":false,"isSlot":false,"src":"4499:3:137","valueSize":1},{"declaration":44164,"isOffset":false,"isSlot":false,"src":"4390:3:137","valueSize":1}],"id":44173,"nodeType":"InlineAssembly","src":"4360:188:137"},{"expression":{"id":44174,"name":"out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44171,"src":"4561:3:137","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":44133,"id":44175,"nodeType":"Return","src":"4554:10:137"}]},"documentation":{"id":44126,"nodeType":"StructuredDocumentation","src":"3841:122:137","text":" Reads an RLP bytes32 value into a bytes32.\n @param _in RLP bytes32 value.\n @return Decoded bytes32."},"id":44177,"implemented":true,"kind":"function","modifiers":[],"name":"readBytes32","nameLocation":"3975:11:137","nodeType":"FunctionDefinition","parameters":{"id":44130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44129,"mutability":"mutable","name":"_in","nameLocation":"4002:3:137","nodeType":"VariableDeclaration","scope":44177,"src":"3987:18:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":44128,"nodeType":"UserDefinedTypeName","pathNode":{"id":44127,"name":"RLPItem","nameLocations":["3987:7:137"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"3987:7:137"},"referencedDeclaration":43899,"src":"3987:7:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"3986:20:137"},"returnParameters":{"id":44133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44132,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44177,"src":"4030:7:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":44131,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4030:7:137","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4029:9:137"},"scope":44630,"src":"3966:603:137","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44191,"nodeType":"Block","src":"4769:45:137","statements":[{"expression":{"arguments":[{"arguments":[{"id":44187,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44180,"src":"4804:3:137","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":44186,"name":"toRLPItem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43919,"src":"4794:9:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_RLPItem_$43899_memory_ptr_$","typeString":"function (bytes memory) pure returns (struct RLPReader.RLPItem memory)"}},"id":44188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4794:14:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":44185,"name":"readBytes32","nodeType":"Identifier","overloadedDeclarations":[44177,44192],"referencedDeclaration":44177,"src":"4782:11:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes32)"}},"id":44189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4782:27:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":44184,"id":44190,"nodeType":"Return","src":"4775:34:137"}]},"documentation":{"id":44178,"nodeType":"StructuredDocumentation","src":"4573:122:137","text":" Reads an RLP bytes32 value into a bytes32.\n @param _in RLP bytes32 value.\n @return Decoded bytes32."},"id":44192,"implemented":true,"kind":"function","modifiers":[],"name":"readBytes32","nameLocation":"4707:11:137","nodeType":"FunctionDefinition","parameters":{"id":44181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44180,"mutability":"mutable","name":"_in","nameLocation":"4732:3:137","nodeType":"VariableDeclaration","scope":44192,"src":"4719:16:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44179,"name":"bytes","nodeType":"ElementaryTypeName","src":"4719:5:137","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4718:18:137"},"returnParameters":{"id":44184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44183,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44192,"src":"4760:7:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":44182,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4760:7:137","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4759:9:137"},"scope":44630,"src":"4698:116:137","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44208,"nodeType":"Block","src":"5016:43:137","statements":[{"expression":{"arguments":[{"arguments":[{"id":44204,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44196,"src":"5049:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":44203,"name":"readBytes32","nodeType":"Identifier","overloadedDeclarations":[44177,44192],"referencedDeclaration":44177,"src":"5037:11:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes32)"}},"id":44205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5037:16:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":44202,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5029:7:137","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":44201,"name":"uint256","nodeType":"ElementaryTypeName","src":"5029:7:137","typeDescriptions":{}}},"id":44206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5029:25:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":44200,"id":44207,"nodeType":"Return","src":"5022:32:137"}]},"documentation":{"id":44193,"nodeType":"StructuredDocumentation","src":"4818:122:137","text":" Reads an RLP uint256 value into a uint256.\n @param _in RLP uint256 value.\n @return Decoded uint256."},"id":44209,"implemented":true,"kind":"function","modifiers":[],"name":"readUint256","nameLocation":"4952:11:137","nodeType":"FunctionDefinition","parameters":{"id":44197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44196,"mutability":"mutable","name":"_in","nameLocation":"4979:3:137","nodeType":"VariableDeclaration","scope":44209,"src":"4964:18:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":44195,"nodeType":"UserDefinedTypeName","pathNode":{"id":44194,"name":"RLPItem","nameLocations":["4964:7:137"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"4964:7:137"},"referencedDeclaration":43899,"src":"4964:7:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"4963:20:137"},"returnParameters":{"id":44200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44199,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44209,"src":"5007:7:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44198,"name":"uint256","nodeType":"ElementaryTypeName","src":"5007:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5006:9:137"},"scope":44630,"src":"4943:116:137","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44223,"nodeType":"Block","src":"5259:45:137","statements":[{"expression":{"arguments":[{"arguments":[{"id":44219,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44212,"src":"5294:3:137","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":44218,"name":"toRLPItem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43919,"src":"5284:9:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_RLPItem_$43899_memory_ptr_$","typeString":"function (bytes memory) pure returns (struct RLPReader.RLPItem memory)"}},"id":44220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5284:14:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":44217,"name":"readUint256","nodeType":"Identifier","overloadedDeclarations":[44209,44224],"referencedDeclaration":44209,"src":"5272:11:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256)"}},"id":44221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5272:27:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":44216,"id":44222,"nodeType":"Return","src":"5265:34:137"}]},"documentation":{"id":44210,"nodeType":"StructuredDocumentation","src":"5063:122:137","text":" Reads an RLP uint256 value into a uint256.\n @param _in RLP uint256 value.\n @return Decoded uint256."},"id":44224,"implemented":true,"kind":"function","modifiers":[],"name":"readUint256","nameLocation":"5197:11:137","nodeType":"FunctionDefinition","parameters":{"id":44213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44212,"mutability":"mutable","name":"_in","nameLocation":"5222:3:137","nodeType":"VariableDeclaration","scope":44224,"src":"5209:16:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44211,"name":"bytes","nodeType":"ElementaryTypeName","src":"5209:5:137","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5208:18:137"},"returnParameters":{"id":44216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44215,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44224,"src":"5250:7:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44214,"name":"uint256","nodeType":"ElementaryTypeName","src":"5250:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5249:9:137"},"scope":44630,"src":"5188:116:137","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44265,"nodeType":"Block","src":"5488:282:137","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":44234,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44228,"src":"5502:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44235,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5506:6:137","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":43896,"src":"5502:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":44236,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5516:1:137","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5502:15:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420524c5020626f6f6c65616e2076616c75652e","id":44238,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5519:28:137","typeDescriptions":{"typeIdentifier":"t_stringliteral_4f8f0c9c05acf0cd50562c9d3d6d407e972c8243af862a438314d07063a3dca1","typeString":"literal_string \"Invalid RLP boolean value.\""},"value":"Invalid RLP boolean value."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4f8f0c9c05acf0cd50562c9d3d6d407e972c8243af862a438314d07063a3dca1","typeString":"literal_string \"Invalid RLP boolean value.\""}],"id":44233,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5494:7:137","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":44239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5494:54:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44240,"nodeType":"ExpressionStatement","src":"5494:54:137"},{"assignments":[44242],"declarations":[{"constant":false,"id":44242,"mutability":"mutable","name":"ptr","nameLocation":"5563:3:137","nodeType":"VariableDeclaration","scope":44265,"src":"5555:11:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44241,"name":"uint256","nodeType":"ElementaryTypeName","src":"5555:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":44245,"initialValue":{"expression":{"id":44243,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44228,"src":"5569:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44244,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5573:3:137","memberName":"ptr","nodeType":"MemberAccess","referencedDeclaration":43898,"src":"5569:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5555:21:137"},{"assignments":[44247],"declarations":[{"constant":false,"id":44247,"mutability":"mutable","name":"out","nameLocation":"5590:3:137","nodeType":"VariableDeclaration","scope":44265,"src":"5582:11:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44246,"name":"uint256","nodeType":"ElementaryTypeName","src":"5582:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":44248,"nodeType":"VariableDeclarationStatement","src":"5582:11:137"},{"AST":{"nodeType":"YulBlock","src":"5608:40:137","statements":[{"nodeType":"YulAssignment","src":"5616:26:137","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5628:1:137","type":"","value":"0"},{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"5637:3:137"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5631:5:137"},"nodeType":"YulFunctionCall","src":"5631:10:137"}],"functionName":{"name":"byte","nodeType":"YulIdentifier","src":"5623:4:137"},"nodeType":"YulFunctionCall","src":"5623:19:137"},"variableNames":[{"name":"out","nodeType":"YulIdentifier","src":"5616:3:137"}]}]},"evmVersion":"london","externalReferences":[{"declaration":44247,"isOffset":false,"isSlot":false,"src":"5616:3:137","valueSize":1},{"declaration":44242,"isOffset":false,"isSlot":false,"src":"5637:3:137","valueSize":1}],"id":44249,"nodeType":"InlineAssembly","src":"5599:49:137"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":44257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44251,"name":"out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44247,"src":"5662:3:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":44252,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5669:1:137","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5662:8:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44254,"name":"out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44247,"src":"5674:3:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":44255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5681:1:137","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5674:8:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5662:20:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c69625f524c505265616465723a20496e76616c696420524c5020626f6f6c65616e2076616c75652c206d7573742062652030206f722031","id":44258,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5684:58:137","typeDescriptions":{"typeIdentifier":"t_stringliteral_fde08809139da424e56770eb1214d54bfc635eebfb4310c90ffede9d9074c3c0","typeString":"literal_string \"Lib_RLPReader: Invalid RLP boolean value, must be 0 or 1\""},"value":"Lib_RLPReader: Invalid RLP boolean value, must be 0 or 1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fde08809139da424e56770eb1214d54bfc635eebfb4310c90ffede9d9074c3c0","typeString":"literal_string \"Lib_RLPReader: Invalid RLP boolean value, must be 0 or 1\""}],"id":44250,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5654:7:137","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":44259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5654:89:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44260,"nodeType":"ExpressionStatement","src":"5654:89:137"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44261,"name":"out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44247,"src":"5757:3:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":44262,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5764:1:137","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5757:8:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":44232,"id":44264,"nodeType":"Return","src":"5750:15:137"}]},"documentation":{"id":44225,"nodeType":"StructuredDocumentation","src":"5308:110:137","text":" Reads an RLP bool value into a bool.\n @param _in RLP bool value.\n @return Decoded bool."},"id":44266,"implemented":true,"kind":"function","modifiers":[],"name":"readBool","nameLocation":"5430:8:137","nodeType":"FunctionDefinition","parameters":{"id":44229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44228,"mutability":"mutable","name":"_in","nameLocation":"5454:3:137","nodeType":"VariableDeclaration","scope":44266,"src":"5439:18:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":44227,"nodeType":"UserDefinedTypeName","pathNode":{"id":44226,"name":"RLPItem","nameLocations":["5439:7:137"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"5439:7:137"},"referencedDeclaration":43899,"src":"5439:7:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"5438:20:137"},"returnParameters":{"id":44232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44231,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44266,"src":"5482:4:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":44230,"name":"bool","nodeType":"ElementaryTypeName","src":"5482:4:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5481:6:137"},"scope":44630,"src":"5421:349:137","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44280,"nodeType":"Block","src":"5952:42:137","statements":[{"expression":{"arguments":[{"arguments":[{"id":44276,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44269,"src":"5984:3:137","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":44275,"name":"toRLPItem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43919,"src":"5974:9:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_RLPItem_$43899_memory_ptr_$","typeString":"function (bytes memory) pure returns (struct RLPReader.RLPItem memory)"}},"id":44277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5974:14:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":44274,"name":"readBool","nodeType":"Identifier","overloadedDeclarations":[44266,44281],"referencedDeclaration":44266,"src":"5965:8:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_bool_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bool)"}},"id":44278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5965:24:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":44273,"id":44279,"nodeType":"Return","src":"5958:31:137"}]},"documentation":{"id":44267,"nodeType":"StructuredDocumentation","src":"5774:110:137","text":" Reads an RLP bool value into a bool.\n @param _in RLP bool value.\n @return Decoded bool."},"id":44281,"implemented":true,"kind":"function","modifiers":[],"name":"readBool","nameLocation":"5896:8:137","nodeType":"FunctionDefinition","parameters":{"id":44270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44269,"mutability":"mutable","name":"_in","nameLocation":"5918:3:137","nodeType":"VariableDeclaration","scope":44281,"src":"5905:16:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44268,"name":"bytes","nodeType":"ElementaryTypeName","src":"5905:5:137","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5904:18:137"},"returnParameters":{"id":44273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44272,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44281,"src":"5946:4:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":44271,"name":"bool","nodeType":"ElementaryTypeName","src":"5946:4:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5945:6:137"},"scope":44630,"src":"5887:107:137","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44319,"nodeType":"Block","src":"6196:173:137","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":44290,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44285,"src":"6206:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44291,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6210:6:137","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":43896,"src":"6206:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":44292,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6220:1:137","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6206:15:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44300,"nodeType":"IfStatement","src":"6202:53:137","trueBody":{"id":44299,"nodeType":"Block","src":"6223:32:137","statements":[{"expression":{"arguments":[{"hexValue":"30","id":44296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6246:1:137","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":44295,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6238:7:137","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":44294,"name":"address","nodeType":"ElementaryTypeName","src":"6238:7:137","typeDescriptions":{}}},"id":44297,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6238:10:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":44289,"id":44298,"nodeType":"Return","src":"6231:17:137"}]}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":44302,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44285,"src":"6269:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44303,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6273:6:137","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":43896,"src":"6269:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3231","id":44304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6283:2:137","typeDescriptions":{"typeIdentifier":"t_rational_21_by_1","typeString":"int_const 21"},"value":"21"},"src":"6269:16:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420524c5020616464726573732076616c75652e","id":44306,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6287:28:137","typeDescriptions":{"typeIdentifier":"t_stringliteral_a3c570d87b7de672f933cbe715f40a3d65ef8c8e2e231b1b150ebbdb2d252b9f","typeString":"literal_string \"Invalid RLP address value.\""},"value":"Invalid RLP address value."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a3c570d87b7de672f933cbe715f40a3d65ef8c8e2e231b1b150ebbdb2d252b9f","typeString":"literal_string \"Invalid RLP address value.\""}],"id":44301,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6261:7:137","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":44307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6261:55:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44308,"nodeType":"ExpressionStatement","src":"6261:55:137"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":44314,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44285,"src":"6358:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":44313,"name":"readUint256","nodeType":"Identifier","overloadedDeclarations":[44209,44224],"referencedDeclaration":44209,"src":"6346:11:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256)"}},"id":44315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6346:16:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":44312,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6338:7:137","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":44311,"name":"uint160","nodeType":"ElementaryTypeName","src":"6338:7:137","typeDescriptions":{}}},"id":44316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6338:25:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":44310,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6330:7:137","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":44309,"name":"address","nodeType":"ElementaryTypeName","src":"6330:7:137","typeDescriptions":{}}},"id":44317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6330:34:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":44289,"id":44318,"nodeType":"Return","src":"6323:41:137"}]},"documentation":{"id":44282,"nodeType":"StructuredDocumentation","src":"5998:122:137","text":" Reads an RLP address value into a address.\n @param _in RLP address value.\n @return Decoded address."},"id":44320,"implemented":true,"kind":"function","modifiers":[],"name":"readAddress","nameLocation":"6132:11:137","nodeType":"FunctionDefinition","parameters":{"id":44286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44285,"mutability":"mutable","name":"_in","nameLocation":"6159:3:137","nodeType":"VariableDeclaration","scope":44320,"src":"6144:18:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":44284,"nodeType":"UserDefinedTypeName","pathNode":{"id":44283,"name":"RLPItem","nameLocations":["6144:7:137"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"6144:7:137"},"referencedDeclaration":43899,"src":"6144:7:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"6143:20:137"},"returnParameters":{"id":44289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44288,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44320,"src":"6187:7:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":44287,"name":"address","nodeType":"ElementaryTypeName","src":"6187:7:137","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6186:9:137"},"scope":44630,"src":"6123:246:137","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44334,"nodeType":"Block","src":"6569:45:137","statements":[{"expression":{"arguments":[{"arguments":[{"id":44330,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44323,"src":"6604:3:137","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":44329,"name":"toRLPItem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43919,"src":"6594:9:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_RLPItem_$43899_memory_ptr_$","typeString":"function (bytes memory) pure returns (struct RLPReader.RLPItem memory)"}},"id":44331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6594:14:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":44328,"name":"readAddress","nodeType":"Identifier","overloadedDeclarations":[44320,44335],"referencedDeclaration":44320,"src":"6582:11:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_address_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (address)"}},"id":44332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6582:27:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":44327,"id":44333,"nodeType":"Return","src":"6575:34:137"}]},"documentation":{"id":44321,"nodeType":"StructuredDocumentation","src":"6373:122:137","text":" Reads an RLP address value into a address.\n @param _in RLP address value.\n @return Decoded address."},"id":44335,"implemented":true,"kind":"function","modifiers":[],"name":"readAddress","nameLocation":"6507:11:137","nodeType":"FunctionDefinition","parameters":{"id":44324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44323,"mutability":"mutable","name":"_in","nameLocation":"6532:3:137","nodeType":"VariableDeclaration","scope":44335,"src":"6519:16:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44322,"name":"bytes","nodeType":"ElementaryTypeName","src":"6519:5:137","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6518:18:137"},"returnParameters":{"id":44327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44326,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44335,"src":"6560:7:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":44325,"name":"address","nodeType":"ElementaryTypeName","src":"6560:7:137","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6559:9:137"},"scope":44630,"src":"6498:116:137","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44348,"nodeType":"Block","src":"6812:28:137","statements":[{"expression":{"arguments":[{"id":44345,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44339,"src":"6831:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":44344,"name":"_copy","nodeType":"Identifier","overloadedDeclarations":[44611,44629],"referencedDeclaration":44629,"src":"6825:5:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$43899_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes memory)"}},"id":44346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6825:10:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":44343,"id":44347,"nodeType":"Return","src":"6818:17:137"}]},"documentation":{"id":44336,"nodeType":"StructuredDocumentation","src":"6618:112:137","text":" Reads the raw bytes of an RLP item.\n @param _in RLP item to read.\n @return Raw RLP bytes."},"id":44349,"implemented":true,"kind":"function","modifiers":[],"name":"readRawBytes","nameLocation":"6742:12:137","nodeType":"FunctionDefinition","parameters":{"id":44340,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44339,"mutability":"mutable","name":"_in","nameLocation":"6770:3:137","nodeType":"VariableDeclaration","scope":44349,"src":"6755:18:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":44338,"nodeType":"UserDefinedTypeName","pathNode":{"id":44337,"name":"RLPItem","nameLocations":["6755:7:137"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"6755:7:137"},"referencedDeclaration":43899,"src":"6755:7:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"6754:20:137"},"returnParameters":{"id":44343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44342,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44349,"src":"6798:12:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44341,"name":"bytes","nodeType":"ElementaryTypeName","src":"6798:5:137","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6797:14:137"},"scope":44630,"src":"6733:107:137","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44527,"nodeType":"Block","src":"7278:1738:137","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":44364,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44353,"src":"7292:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44365,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7296:6:137","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":43896,"src":"7292:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":44366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7305:1:137","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7292:14:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"524c50206974656d2063616e6e6f74206265206e756c6c2e","id":44368,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7308:26:137","typeDescriptions":{"typeIdentifier":"t_stringliteral_cbfd45d6cbabcf1f972bc6e670a58703dc2f15f95d28d9e580f69e92be3c3b29","typeString":"literal_string \"RLP item cannot be null.\""},"value":"RLP item cannot be null."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cbfd45d6cbabcf1f972bc6e670a58703dc2f15f95d28d9e580f69e92be3c3b29","typeString":"literal_string \"RLP item cannot be null.\""}],"id":44363,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7284:7:137","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":44369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7284:51:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44370,"nodeType":"ExpressionStatement","src":"7284:51:137"},{"assignments":[44372],"declarations":[{"constant":false,"id":44372,"mutability":"mutable","name":"ptr","nameLocation":"7350:3:137","nodeType":"VariableDeclaration","scope":44527,"src":"7342:11:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44371,"name":"uint256","nodeType":"ElementaryTypeName","src":"7342:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":44375,"initialValue":{"expression":{"id":44373,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44353,"src":"7356:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44374,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7360:3:137","memberName":"ptr","nodeType":"MemberAccess","referencedDeclaration":43898,"src":"7356:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7342:21:137"},{"assignments":[44377],"declarations":[{"constant":false,"id":44377,"mutability":"mutable","name":"prefix","nameLocation":"7377:6:137","nodeType":"VariableDeclaration","scope":44527,"src":"7369:14:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44376,"name":"uint256","nodeType":"ElementaryTypeName","src":"7369:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":44378,"nodeType":"VariableDeclarationStatement","src":"7369:14:137"},{"AST":{"nodeType":"YulBlock","src":"7398:43:137","statements":[{"nodeType":"YulAssignment","src":"7406:29:137","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7421:1:137","type":"","value":"0"},{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"7430:3:137"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7424:5:137"},"nodeType":"YulFunctionCall","src":"7424:10:137"}],"functionName":{"name":"byte","nodeType":"YulIdentifier","src":"7416:4:137"},"nodeType":"YulFunctionCall","src":"7416:19:137"},"variableNames":[{"name":"prefix","nodeType":"YulIdentifier","src":"7406:6:137"}]}]},"evmVersion":"london","externalReferences":[{"declaration":44377,"isOffset":false,"isSlot":false,"src":"7406:6:137","valueSize":1},{"declaration":44372,"isOffset":false,"isSlot":false,"src":"7430:3:137","valueSize":1}],"id":44379,"nodeType":"InlineAssembly","src":"7389:52:137"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44380,"name":"prefix","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44377,"src":"7451:6:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"id":44383,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"30783766","id":44381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7460:4:137","typeDescriptions":{"typeIdentifier":"t_rational_127_by_1","typeString":"int_const 127"},"value":"0x7f"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":44382,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7467:1:137","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7460:8:137","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"}},"src":"7451:17:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44392,"name":"prefix","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44377,"src":"7554:6:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"id":44395,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"30786237","id":44393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7563:4:137","typeDescriptions":{"typeIdentifier":"t_rational_183_by_1","typeString":"int_const 183"},"value":"0xb7"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":44394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7570:1:137","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7563:8:137","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"}},"src":"7554:17:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44418,"name":"prefix","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44377,"src":"7818:6:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"id":44421,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"30786266","id":44419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7827:4:137","typeDescriptions":{"typeIdentifier":"t_rational_191_by_1","typeString":"int_const 191"},"value":"0xbf"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":44420,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7834:1:137","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7827:8:137","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"}},"src":"7818:17:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44460,"name":"prefix","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44377,"src":"8300:6:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"id":44463,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"30786637","id":44461,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8309:4:137","typeDescriptions":{"typeIdentifier":"t_rational_247_by_1","typeString":"int_const 247"},"value":"0xf7"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":44462,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8316:1:137","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8309:8:137","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"}},"src":"8300:17:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":44522,"nodeType":"Block","src":"8558:454:137","statements":[{"assignments":[44487],"declarations":[{"constant":false,"id":44487,"mutability":"mutable","name":"lenOfListLen","nameLocation":"8594:12:137","nodeType":"VariableDeclaration","scope":44522,"src":"8586:20:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44486,"name":"uint256","nodeType":"ElementaryTypeName","src":"8586:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":44491,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44488,"name":"prefix","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44377,"src":"8609:6:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"30786637","id":44489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8618:4:137","typeDescriptions":{"typeIdentifier":"t_rational_247_by_1","typeString":"int_const 247"},"value":"0xf7"},"src":"8609:13:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8586:36:137"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":44493,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44353,"src":"8639:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44494,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8643:6:137","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":43896,"src":"8639:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":44495,"name":"lenOfListLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44487,"src":"8652:12:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8639:25:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420524c50206c6f6e67206c697374206c656e6774682e","id":44497,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8666:31:137","typeDescriptions":{"typeIdentifier":"t_stringliteral_1ab842401d58445ea8b599f677fc3eda93bc858b970ca455538ed6faecc256da","typeString":"literal_string \"Invalid RLP long list length.\""},"value":"Invalid RLP long list length."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1ab842401d58445ea8b599f677fc3eda93bc858b970ca455538ed6faecc256da","typeString":"literal_string \"Invalid RLP long list length.\""}],"id":44492,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8631:7:137","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":44498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8631:67:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44499,"nodeType":"ExpressionStatement","src":"8631:67:137"},{"assignments":[44501],"declarations":[{"constant":false,"id":44501,"mutability":"mutable","name":"listLen","nameLocation":"8715:7:137","nodeType":"VariableDeclaration","scope":44522,"src":"8707:15:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44500,"name":"uint256","nodeType":"ElementaryTypeName","src":"8707:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":44502,"nodeType":"VariableDeclarationStatement","src":"8707:15:137"},{"AST":{"nodeType":"YulBlock","src":"8739:122:137","statements":[{"nodeType":"YulAssignment","src":"8786:67:137","value":{"arguments":[{"arguments":[{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"8811:3:137"},{"kind":"number","nodeType":"YulLiteral","src":"8816:1:137","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8807:3:137"},"nodeType":"YulFunctionCall","src":"8807:11:137"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8801:5:137"},"nodeType":"YulFunctionCall","src":"8801:18:137"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8825:3:137","type":"","value":"256"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8834:2:137","type":"","value":"32"},{"name":"lenOfListLen","nodeType":"YulIdentifier","src":"8838:12:137"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8830:3:137"},"nodeType":"YulFunctionCall","src":"8830:21:137"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"8821:3:137"},"nodeType":"YulFunctionCall","src":"8821:31:137"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"8797:3:137"},"nodeType":"YulFunctionCall","src":"8797:56:137"},"variableNames":[{"name":"listLen","nodeType":"YulIdentifier","src":"8786:7:137"}]}]},"evmVersion":"london","externalReferences":[{"declaration":44487,"isOffset":false,"isSlot":false,"src":"8838:12:137","valueSize":1},{"declaration":44501,"isOffset":false,"isSlot":false,"src":"8786:7:137","valueSize":1},{"declaration":44372,"isOffset":false,"isSlot":false,"src":"8811:3:137","valueSize":1}],"id":44503,"nodeType":"InlineAssembly","src":"8730:131:137"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":44505,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44353,"src":"8877:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44506,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8881:6:137","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":43896,"src":"8877:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44507,"name":"lenOfListLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44487,"src":"8890:12:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":44508,"name":"listLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44501,"src":"8905:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8890:22:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8877:35:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420524c50206c6f6e67206c6973742e","id":44511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8914:24:137","typeDescriptions":{"typeIdentifier":"t_stringliteral_20f694aafe1a6d12fb1d006f7106bcafe640e6950031327d022975fd11504e5a","typeString":"literal_string \"Invalid RLP long list.\""},"value":"Invalid RLP long list."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_20f694aafe1a6d12fb1d006f7106bcafe640e6950031327d022975fd11504e5a","typeString":"literal_string \"Invalid RLP long list.\""}],"id":44504,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8869:7:137","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":44512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8869:70:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44513,"nodeType":"ExpressionStatement","src":"8869:70:137"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":44514,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8956:1:137","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":44515,"name":"lenOfListLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44487,"src":"8960:12:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8956:16:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":44517,"name":"listLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44501,"src":"8974:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":44518,"name":"RLPItemType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43894,"src":"8983:11:137","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RLPItemType_$43894_$","typeString":"type(enum RLPReader.RLPItemType)"}},"id":44519,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8995:9:137","memberName":"LIST_ITEM","nodeType":"MemberAccess","referencedDeclaration":43893,"src":"8983:21:137","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"}}],"id":44520,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8955:50:137","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_enum$_RLPItemType_$43894_$","typeString":"tuple(uint256,uint256,enum RLPReader.RLPItemType)"}},"functionReturnParameters":44362,"id":44521,"nodeType":"Return","src":"8948:57:137"}]},"id":44523,"nodeType":"IfStatement","src":"8296:716:137","trueBody":{"id":44485,"nodeType":"Block","src":"8319:233:137","statements":[{"assignments":[44466],"declarations":[{"constant":false,"id":44466,"mutability":"mutable","name":"listLen","nameLocation":"8406:7:137","nodeType":"VariableDeclaration","scope":44485,"src":"8398:15:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44465,"name":"uint256","nodeType":"ElementaryTypeName","src":"8398:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":44470,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44467,"name":"prefix","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44377,"src":"8416:6:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"30786330","id":44468,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8425:4:137","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"0xc0"},"src":"8416:13:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8398:31:137"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":44472,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44353,"src":"8446:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44473,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8450:6:137","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":43896,"src":"8446:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":44474,"name":"listLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44466,"src":"8459:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8446:20:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420524c502073686f7274206c6973742e","id":44476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8468:25:137","typeDescriptions":{"typeIdentifier":"t_stringliteral_faacf826bd31e02dc921ea35583cf601fa5cc747d5ee46904a18ead089c4f2e1","typeString":"literal_string \"Invalid RLP short list.\""},"value":"Invalid RLP short list."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_faacf826bd31e02dc921ea35583cf601fa5cc747d5ee46904a18ead089c4f2e1","typeString":"literal_string \"Invalid RLP short list.\""}],"id":44471,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8438:7:137","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":44477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8438:56:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44478,"nodeType":"ExpressionStatement","src":"8438:56:137"},{"expression":{"components":[{"hexValue":"31","id":44479,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8511:1:137","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"id":44480,"name":"listLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44466,"src":"8514:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":44481,"name":"RLPItemType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43894,"src":"8523:11:137","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RLPItemType_$43894_$","typeString":"type(enum RLPReader.RLPItemType)"}},"id":44482,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8535:9:137","memberName":"LIST_ITEM","nodeType":"MemberAccess","referencedDeclaration":43893,"src":"8523:21:137","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"}}],"id":44483,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8510:35:137","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_1_by_1_$_t_uint256_$_t_enum$_RLPItemType_$43894_$","typeString":"tuple(int_const 1,uint256,enum RLPReader.RLPItemType)"}},"functionReturnParameters":44362,"id":44484,"nodeType":"Return","src":"8503:42:137"}]}},"id":44524,"nodeType":"IfStatement","src":"7814:1198:137","trueBody":{"id":44459,"nodeType":"Block","src":"7837:453:137","statements":[{"assignments":[44424],"declarations":[{"constant":false,"id":44424,"mutability":"mutable","name":"lenOfStrLen","nameLocation":"7875:11:137","nodeType":"VariableDeclaration","scope":44459,"src":"7867:19:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44423,"name":"uint256","nodeType":"ElementaryTypeName","src":"7867:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":44428,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44425,"name":"prefix","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44377,"src":"7889:6:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"30786237","id":44426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7898:4:137","typeDescriptions":{"typeIdentifier":"t_rational_183_by_1","typeString":"int_const 183"},"value":"0xb7"},"src":"7889:13:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7867:35:137"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":44430,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44353,"src":"7919:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44431,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7923:6:137","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":43896,"src":"7919:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":44432,"name":"lenOfStrLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44424,"src":"7932:11:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7919:24:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e","id":44434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7945:33:137","typeDescriptions":{"typeIdentifier":"t_stringliteral_4bb18a3f980d71dabb635b00d5ab88ff971a36edd9dc79fbb99312849c9fce67","typeString":"literal_string \"Invalid RLP long string length.\""},"value":"Invalid RLP long string length."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4bb18a3f980d71dabb635b00d5ab88ff971a36edd9dc79fbb99312849c9fce67","typeString":"literal_string \"Invalid RLP long string length.\""}],"id":44429,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7911:7:137","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":44435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7911:68:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44436,"nodeType":"ExpressionStatement","src":"7911:68:137"},{"assignments":[44438],"declarations":[{"constant":false,"id":44438,"mutability":"mutable","name":"strLen","nameLocation":"7996:6:137","nodeType":"VariableDeclaration","scope":44459,"src":"7988:14:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44437,"name":"uint256","nodeType":"ElementaryTypeName","src":"7988:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":44439,"nodeType":"VariableDeclarationStatement","src":"7988:14:137"},{"AST":{"nodeType":"YulBlock","src":"8019:122:137","statements":[{"nodeType":"YulAssignment","src":"8068:65:137","value":{"arguments":[{"arguments":[{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"8092:3:137"},{"kind":"number","nodeType":"YulLiteral","src":"8097:1:137","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8088:3:137"},"nodeType":"YulFunctionCall","src":"8088:11:137"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8082:5:137"},"nodeType":"YulFunctionCall","src":"8082:18:137"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8106:3:137","type":"","value":"256"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8115:2:137","type":"","value":"32"},{"name":"lenOfStrLen","nodeType":"YulIdentifier","src":"8119:11:137"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8111:3:137"},"nodeType":"YulFunctionCall","src":"8111:20:137"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"8102:3:137"},"nodeType":"YulFunctionCall","src":"8102:30:137"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"8078:3:137"},"nodeType":"YulFunctionCall","src":"8078:55:137"},"variableNames":[{"name":"strLen","nodeType":"YulIdentifier","src":"8068:6:137"}]}]},"evmVersion":"london","externalReferences":[{"declaration":44424,"isOffset":false,"isSlot":false,"src":"8119:11:137","valueSize":1},{"declaration":44372,"isOffset":false,"isSlot":false,"src":"8092:3:137","valueSize":1},{"declaration":44438,"isOffset":false,"isSlot":false,"src":"8068:6:137","valueSize":1}],"id":44440,"nodeType":"InlineAssembly","src":"8010:131:137"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":44442,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44353,"src":"8157:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44443,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8161:6:137","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":43896,"src":"8157:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44444,"name":"lenOfStrLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44424,"src":"8170:11:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":44445,"name":"strLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44438,"src":"8184:6:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8170:20:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8157:33:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420524c50206c6f6e6720737472696e672e","id":44448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8192:26:137","typeDescriptions":{"typeIdentifier":"t_stringliteral_e91bee799143bea684e6e3b2005af43754801e59e0ad19b6af4182fcfef3328b","typeString":"literal_string \"Invalid RLP long string.\""},"value":"Invalid RLP long string."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e91bee799143bea684e6e3b2005af43754801e59e0ad19b6af4182fcfef3328b","typeString":"literal_string \"Invalid RLP long string.\""}],"id":44441,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8149:7:137","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":44449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8149:70:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44450,"nodeType":"ExpressionStatement","src":"8149:70:137"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":44451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8236:1:137","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":44452,"name":"lenOfStrLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44424,"src":"8240:11:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8236:15:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":44454,"name":"strLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44438,"src":"8253:6:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":44455,"name":"RLPItemType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43894,"src":"8261:11:137","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RLPItemType_$43894_$","typeString":"type(enum RLPReader.RLPItemType)"}},"id":44456,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8273:9:137","memberName":"DATA_ITEM","nodeType":"MemberAccess","referencedDeclaration":43892,"src":"8261:21:137","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"}}],"id":44457,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8235:48:137","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_enum$_RLPItemType_$43894_$","typeString":"tuple(uint256,uint256,enum RLPReader.RLPItemType)"}},"functionReturnParameters":44362,"id":44458,"nodeType":"Return","src":"8228:55:137"}]}},"id":44525,"nodeType":"IfStatement","src":"7550:1462:137","trueBody":{"id":44417,"nodeType":"Block","src":"7573:235:137","statements":[{"assignments":[44398],"declarations":[{"constant":false,"id":44398,"mutability":"mutable","name":"strLen","nameLocation":"7663:6:137","nodeType":"VariableDeclaration","scope":44417,"src":"7655:14:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44397,"name":"uint256","nodeType":"ElementaryTypeName","src":"7655:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":44402,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44399,"name":"prefix","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44377,"src":"7672:6:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"30783830","id":44400,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7681:4:137","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"0x80"},"src":"7672:13:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7655:30:137"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":44404,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44353,"src":"7702:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44405,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7706:6:137","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":43896,"src":"7702:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":44406,"name":"strLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44398,"src":"7715:6:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7702:19:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c696420524c502073686f727420737472696e672e","id":44408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7723:27:137","typeDescriptions":{"typeIdentifier":"t_stringliteral_8aca44bbbcae5e1f45d4afe6279225dc68170211b861c4daf13bd2681ef32975","typeString":"literal_string \"Invalid RLP short string.\""},"value":"Invalid RLP short string."}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8aca44bbbcae5e1f45d4afe6279225dc68170211b861c4daf13bd2681ef32975","typeString":"literal_string \"Invalid RLP short string.\""}],"id":44403,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7694:7:137","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":44409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7694:57:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44410,"nodeType":"ExpressionStatement","src":"7694:57:137"},{"expression":{"components":[{"hexValue":"31","id":44411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7768:1:137","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"id":44412,"name":"strLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44398,"src":"7771:6:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":44413,"name":"RLPItemType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43894,"src":"7779:11:137","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RLPItemType_$43894_$","typeString":"type(enum RLPReader.RLPItemType)"}},"id":44414,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7791:9:137","memberName":"DATA_ITEM","nodeType":"MemberAccess","referencedDeclaration":43892,"src":"7779:21:137","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"}}],"id":44415,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7767:34:137","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_1_by_1_$_t_uint256_$_t_enum$_RLPItemType_$43894_$","typeString":"tuple(int_const 1,uint256,enum RLPReader.RLPItemType)"}},"functionReturnParameters":44362,"id":44416,"nodeType":"Return","src":"7760:41:137"}]}},"id":44526,"nodeType":"IfStatement","src":"7447:1565:137","trueBody":{"id":44391,"nodeType":"Block","src":"7470:74:137","statements":[{"expression":{"components":[{"hexValue":"30","id":44385,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7509:1:137","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"31","id":44386,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7512:1:137","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"expression":{"id":44387,"name":"RLPItemType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43894,"src":"7515:11:137","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RLPItemType_$43894_$","typeString":"type(enum RLPReader.RLPItemType)"}},"id":44388,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7527:9:137","memberName":"DATA_ITEM","nodeType":"MemberAccess","referencedDeclaration":43892,"src":"7515:21:137","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"}}],"id":44389,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"7508:29:137","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_1_by_1_$_t_enum$_RLPItemType_$43894_$","typeString":"tuple(int_const 0,int_const 1,enum RLPReader.RLPItemType)"}},"functionReturnParameters":44362,"id":44390,"nodeType":"Return","src":"7501:36:137"}]}}]},"documentation":{"id":44350,"nodeType":"StructuredDocumentation","src":"6921:220:137","text":" Decodes the length of an RLP item.\n @param _in RLP item to decode.\n @return Offset of the encoded data.\n @return Length of the encoded data.\n @return RLP item type (LIST_ITEM or DATA_ITEM)."},"id":44528,"implemented":true,"kind":"function","modifiers":[],"name":"_decodeLength","nameLocation":"7153:13:137","nodeType":"FunctionDefinition","parameters":{"id":44354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44353,"mutability":"mutable","name":"_in","nameLocation":"7182:3:137","nodeType":"VariableDeclaration","scope":44528,"src":"7167:18:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":44352,"nodeType":"UserDefinedTypeName","pathNode":{"id":44351,"name":"RLPItem","nameLocations":["7167:7:137"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"7167:7:137"},"referencedDeclaration":43899,"src":"7167:7:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"7166:20:137"},"returnParameters":{"id":44362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44356,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44528,"src":"7228:7:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44355,"name":"uint256","nodeType":"ElementaryTypeName","src":"7228:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":44358,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44528,"src":"7243:7:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44357,"name":"uint256","nodeType":"ElementaryTypeName","src":"7243:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":44361,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44528,"src":"7258:11:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"},"typeName":{"id":44360,"nodeType":"UserDefinedTypeName","pathNode":{"id":44359,"name":"RLPItemType","nameLocations":["7258:11:137"],"nodeType":"IdentifierPath","referencedDeclaration":43894,"src":"7258:11:137"},"referencedDeclaration":43894,"src":"7258:11:137","typeDescriptions":{"typeIdentifier":"t_enum$_RLPItemType_$43894","typeString":"enum RLPReader.RLPItemType"}},"visibility":"internal"}],"src":"7220:55:137"},"scope":44630,"src":"7144:1872:137","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":44610,"nodeType":"Block","src":"9370:674:137","statements":[{"assignments":[44541],"declarations":[{"constant":false,"id":44541,"mutability":"mutable","name":"out","nameLocation":"9389:3:137","nodeType":"VariableDeclaration","scope":44610,"src":"9376:16:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44540,"name":"bytes","nodeType":"ElementaryTypeName","src":"9376:5:137","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":44546,"initialValue":{"arguments":[{"id":44544,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44535,"src":"9405:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":44543,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"9395:9:137","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":44542,"name":"bytes","nodeType":"ElementaryTypeName","src":"9399:5:137","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":44545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9395:18:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"9376:37:137"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":44547,"name":"out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44541,"src":"9423:3:137","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":44548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9427:6:137","memberName":"length","nodeType":"MemberAccess","src":"9423:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":44549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9437:1:137","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9423:15:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44554,"nodeType":"IfStatement","src":"9419:46:137","trueBody":{"id":44553,"nodeType":"Block","src":"9440:25:137","statements":[{"expression":{"id":44551,"name":"out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44541,"src":"9455:3:137","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":44539,"id":44552,"nodeType":"Return","src":"9448:10:137"}]}},{"assignments":[44556],"declarations":[{"constant":false,"id":44556,"mutability":"mutable","name":"src","nameLocation":"9479:3:137","nodeType":"VariableDeclaration","scope":44610,"src":"9471:11:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44555,"name":"uint256","nodeType":"ElementaryTypeName","src":"9471:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":44560,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44557,"name":"_src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44531,"src":"9485:4:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":44558,"name":"_offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44533,"src":"9492:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9485:14:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9471:28:137"},{"assignments":[44562],"declarations":[{"constant":false,"id":44562,"mutability":"mutable","name":"dest","nameLocation":"9513:4:137","nodeType":"VariableDeclaration","scope":44610,"src":"9505:12:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44561,"name":"uint256","nodeType":"ElementaryTypeName","src":"9505:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":44563,"nodeType":"VariableDeclarationStatement","src":"9505:12:137"},{"AST":{"nodeType":"YulBlock","src":"9532:34:137","statements":[{"nodeType":"YulAssignment","src":"9540:20:137","value":{"arguments":[{"name":"out","nodeType":"YulIdentifier","src":"9552:3:137"},{"kind":"number","nodeType":"YulLiteral","src":"9557:2:137","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9548:3:137"},"nodeType":"YulFunctionCall","src":"9548:12:137"},"variableNames":[{"name":"dest","nodeType":"YulIdentifier","src":"9540:4:137"}]}]},"evmVersion":"london","externalReferences":[{"declaration":44562,"isOffset":false,"isSlot":false,"src":"9540:4:137","valueSize":1},{"declaration":44541,"isOffset":false,"isSlot":false,"src":"9552:3:137","valueSize":1}],"id":44564,"nodeType":"InlineAssembly","src":"9523:43:137"},{"body":{"id":44587,"nodeType":"Block","src":"9663:141:137","statements":[{"AST":{"nodeType":"YulBlock","src":"9680:42:137","statements":[{"expression":{"arguments":[{"name":"dest","nodeType":"YulIdentifier","src":"9697:4:137"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"9709:3:137"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9703:5:137"},"nodeType":"YulFunctionCall","src":"9703:10:137"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9690:6:137"},"nodeType":"YulFunctionCall","src":"9690:24:137"},"nodeType":"YulExpressionStatement","src":"9690:24:137"}]},"evmVersion":"london","externalReferences":[{"declaration":44562,"isOffset":false,"isSlot":false,"src":"9697:4:137","valueSize":1},{"declaration":44556,"isOffset":false,"isSlot":false,"src":"9709:3:137","valueSize":1}],"id":44574,"nodeType":"InlineAssembly","src":"9671:51:137"},{"expression":{"id":44577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44575,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44556,"src":"9730:3:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":44576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9737:2:137","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"9730:9:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":44578,"nodeType":"ExpressionStatement","src":"9730:9:137"},{"expression":{"id":44581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44579,"name":"dest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44562,"src":"9747:4:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":44580,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9755:2:137","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"9747:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":44582,"nodeType":"ExpressionStatement","src":"9747:10:137"},{"id":44586,"nodeType":"UncheckedBlock","src":"9766:32:137","statements":[{"expression":{"id":44584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"9786:3:137","subExpression":{"id":44583,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44566,"src":"9788:1:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":44585,"nodeType":"ExpressionStatement","src":"9786:3:137"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44569,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44566,"src":"9643:1:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44570,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44535,"src":"9647:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3332","id":44571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9657:2:137","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"9647:12:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9643:16:137","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44588,"initializationExpression":{"assignments":[44566],"declarations":[{"constant":false,"id":44566,"mutability":"mutable","name":"i","nameLocation":"9636:1:137","nodeType":"VariableDeclaration","scope":44588,"src":"9628:9:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44565,"name":"uint256","nodeType":"ElementaryTypeName","src":"9628:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":44568,"initialValue":{"hexValue":"30","id":44567,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9640:1:137","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9628:13:137"},"nodeType":"ForStatement","src":"9623:181:137"},{"assignments":[44590],"declarations":[{"constant":false,"id":44590,"mutability":"mutable","name":"mask","nameLocation":"9855:4:137","nodeType":"VariableDeclaration","scope":44610,"src":"9847:12:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44589,"name":"uint256","nodeType":"ElementaryTypeName","src":"9847:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":44591,"nodeType":"VariableDeclarationStatement","src":"9847:12:137"},{"id":44606,"nodeType":"UncheckedBlock","src":"9865:62:137","statements":[{"expression":{"id":44604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44592,"name":"mask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44590,"src":"9883:4:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"323536","id":44593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9890:3:137","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3332","id":44594,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9896:2:137","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44595,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44535,"src":"9902:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"3332","id":44596,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9912:2:137","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"9902:12:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":44598,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9901:14:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9896:19:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":44600,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9895:21:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9890:26:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":44602,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9919:1:137","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9890:30:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9883:37:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":44605,"nodeType":"ExpressionStatement","src":"9883:37:137"}]},{"AST":{"nodeType":"YulBlock","src":"9942:82:137","statements":[{"expression":{"arguments":[{"name":"dest","nodeType":"YulIdentifier","src":"9957:4:137"},{"arguments":[{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"9976:3:137"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9970:5:137"},"nodeType":"YulFunctionCall","src":"9970:10:137"},{"arguments":[{"name":"mask","nodeType":"YulIdentifier","src":"9986:4:137"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"9982:3:137"},"nodeType":"YulFunctionCall","src":"9982:9:137"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9966:3:137"},"nodeType":"YulFunctionCall","src":"9966:26:137"},{"arguments":[{"arguments":[{"name":"dest","nodeType":"YulIdentifier","src":"10004:4:137"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9998:5:137"},"nodeType":"YulFunctionCall","src":"9998:11:137"},{"name":"mask","nodeType":"YulIdentifier","src":"10011:4:137"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9994:3:137"},"nodeType":"YulFunctionCall","src":"9994:22:137"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"9963:2:137"},"nodeType":"YulFunctionCall","src":"9963:54:137"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9950:6:137"},"nodeType":"YulFunctionCall","src":"9950:68:137"},"nodeType":"YulExpressionStatement","src":"9950:68:137"}]},"evmVersion":"london","externalReferences":[{"declaration":44562,"isOffset":false,"isSlot":false,"src":"10004:4:137","valueSize":1},{"declaration":44562,"isOffset":false,"isSlot":false,"src":"9957:4:137","valueSize":1},{"declaration":44590,"isOffset":false,"isSlot":false,"src":"10011:4:137","valueSize":1},{"declaration":44590,"isOffset":false,"isSlot":false,"src":"9986:4:137","valueSize":1},{"declaration":44556,"isOffset":false,"isSlot":false,"src":"9976:3:137","valueSize":1}],"id":44607,"nodeType":"InlineAssembly","src":"9933:91:137"},{"expression":{"id":44608,"name":"out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44541,"src":"10036:3:137","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":44539,"id":44609,"nodeType":"Return","src":"10029:10:137"}]},"documentation":{"id":44529,"nodeType":"StructuredDocumentation","src":"9020:232:137","text":" Copies the bytes from a memory location.\n @param _src Pointer to the location to read from.\n @param _offset Offset to start reading from.\n @param _length Number of bytes to read.\n @return Copied bytes."},"id":44611,"implemented":true,"kind":"function","modifiers":[],"name":"_copy","nameLocation":"9264:5:137","nodeType":"FunctionDefinition","parameters":{"id":44536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44531,"mutability":"mutable","name":"_src","nameLocation":"9283:4:137","nodeType":"VariableDeclaration","scope":44611,"src":"9275:12:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44530,"name":"uint256","nodeType":"ElementaryTypeName","src":"9275:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":44533,"mutability":"mutable","name":"_offset","nameLocation":"9301:7:137","nodeType":"VariableDeclaration","scope":44611,"src":"9293:15:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44532,"name":"uint256","nodeType":"ElementaryTypeName","src":"9293:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":44535,"mutability":"mutable","name":"_length","nameLocation":"9322:7:137","nodeType":"VariableDeclaration","scope":44611,"src":"9314:15:137","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44534,"name":"uint256","nodeType":"ElementaryTypeName","src":"9314:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9269:64:137"},"returnParameters":{"id":44539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44538,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44611,"src":"9356:12:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44537,"name":"bytes","nodeType":"ElementaryTypeName","src":"9356:5:137","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9355:14:137"},"scope":44630,"src":"9255:789:137","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":44628,"nodeType":"Block","src":"10228:47:137","statements":[{"expression":{"arguments":[{"expression":{"id":44621,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44615,"src":"10247:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44622,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10251:3:137","memberName":"ptr","nodeType":"MemberAccess","referencedDeclaration":43898,"src":"10247:7:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":44623,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10256:1:137","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":44624,"name":"_in","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44615,"src":"10259:3:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":44625,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10263:6:137","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":43896,"src":"10259:10:137","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":44620,"name":"_copy","nodeType":"Identifier","overloadedDeclarations":[44611,44629],"referencedDeclaration":44611,"src":"10241:5:137","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256,uint256,uint256) pure returns (bytes memory)"}},"id":44626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10241:29:137","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":44619,"id":44627,"nodeType":"Return","src":"10234:36:137"}]},"documentation":{"id":44612,"nodeType":"StructuredDocumentation","src":"10048:106:137","text":" Copies an RLP item into bytes.\n @param _in RLP item to copy.\n @return Copied bytes."},"id":44629,"implemented":true,"kind":"function","modifiers":[],"name":"_copy","nameLocation":"10166:5:137","nodeType":"FunctionDefinition","parameters":{"id":44616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44615,"mutability":"mutable","name":"_in","nameLocation":"10187:3:137","nodeType":"VariableDeclaration","scope":44629,"src":"10172:18:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":44614,"nodeType":"UserDefinedTypeName","pathNode":{"id":44613,"name":"RLPItem","nameLocations":["10172:7:137"],"nodeType":"IdentifierPath","referencedDeclaration":43899,"src":"10172:7:137"},"referencedDeclaration":43899,"src":"10172:7:137","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$43899_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"10171:20:137"},"returnParameters":{"id":44619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44618,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44629,"src":"10214:12:137","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44617,"name":"bytes","nodeType":"ElementaryTypeName","src":"10214:5:137","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10213:14:137"},"scope":44630,"src":"10157:118:137","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":44631,"src":"242:10035:137","usedErrors":[]}],"src":"46:10232:137"},"id":137},"contracts/messaging/connectors/optimism/lib/SecureMerkleTrie.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/optimism/lib/SecureMerkleTrie.sol","exportedSymbols":{"MerkleTrie":[43782],"SecureMerkleTrie":[44709]},"id":44710,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":44632,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:138"},{"absolutePath":"contracts/messaging/connectors/optimism/lib/MerkleTrie.sol","file":"./MerkleTrie.sol","id":44634,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":44710,"sourceUnit":43783,"src":"93:44:138","symbolAliases":[{"foreign":{"id":44633,"name":"MerkleTrie","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43782,"src":"101:10:138","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SecureMerkleTrie","contractDependencies":[],"contractKind":"library","documentation":{"id":44635,"nodeType":"StructuredDocumentation","src":"139:188:138","text":" @title SecureMerkleTrie\n @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/trie/Lib_SecureMerkleTrie.sol"},"fullyImplemented":true,"id":44709,"linearizedBaseContracts":[44709],"name":"SecureMerkleTrie","nameLocation":"336:16:138","nodeType":"ContractDefinition","nodes":[{"body":{"id":44663,"nodeType":"Block","src":"1276:121:138","statements":[{"assignments":[44650],"declarations":[{"constant":false,"id":44650,"mutability":"mutable","name":"key","nameLocation":"1295:3:138","nodeType":"VariableDeclaration","scope":44663,"src":"1282:16:138","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44649,"name":"bytes","nodeType":"ElementaryTypeName","src":"1282:5:138","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":44654,"initialValue":{"arguments":[{"id":44652,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44638,"src":"1315:4:138","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":44651,"name":"_getSecureKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44708,"src":"1301:13:138","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bytes memory)"}},"id":44653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1301:19:138","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"1282:38:138"},{"expression":{"arguments":[{"id":44657,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44650,"src":"1365:3:138","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":44658,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44640,"src":"1370:6:138","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":44659,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44642,"src":"1378:6:138","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":44660,"name":"_root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44644,"src":"1386:5:138","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":44655,"name":"MerkleTrie","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43782,"src":"1333:10:138","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MerkleTrie_$43782_$","typeString":"type(library MerkleTrie)"}},"id":44656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1344:20:138","memberName":"verifyInclusionProof","nodeType":"MemberAccess","referencedDeclaration":43193,"src":"1333:31:138","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes memory,bytes memory,bytes memory,bytes32) pure returns (bool)"}},"id":44661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1333:59:138","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":44648,"id":44662,"nodeType":"Return","src":"1326:66:138"}]},"documentation":{"id":44636,"nodeType":"StructuredDocumentation","src":"437:671:138","text":" @notice Verifies a proof that a given key/value pair is present in the\n Merkle trie.\n @param _key Key of the node to search for, as a hex string.\n @param _value Value of the node to search for, as a hex string.\n @param _proof Merkle trie inclusion proof for the desired node. Unlike\n traditional Merkle trees, this proof is executed top-down and consists\n of a list of RLP-encoded nodes that make a path down to the target node.\n @param _root Known root of the Merkle trie. Used to verify that the\n included proof is correctly constructed.\n @return _verified `true` if the k/v pair exists in the trie, `false` otherwise."},"id":44664,"implemented":true,"kind":"function","modifiers":[],"name":"verifyInclusionProof","nameLocation":"1120:20:138","nodeType":"FunctionDefinition","parameters":{"id":44645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44638,"mutability":"mutable","name":"_key","nameLocation":"1159:4:138","nodeType":"VariableDeclaration","scope":44664,"src":"1146:17:138","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44637,"name":"bytes","nodeType":"ElementaryTypeName","src":"1146:5:138","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":44640,"mutability":"mutable","name":"_value","nameLocation":"1182:6:138","nodeType":"VariableDeclaration","scope":44664,"src":"1169:19:138","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44639,"name":"bytes","nodeType":"ElementaryTypeName","src":"1169:5:138","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":44642,"mutability":"mutable","name":"_proof","nameLocation":"1207:6:138","nodeType":"VariableDeclaration","scope":44664,"src":"1194:19:138","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44641,"name":"bytes","nodeType":"ElementaryTypeName","src":"1194:5:138","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":44644,"mutability":"mutable","name":"_root","nameLocation":"1227:5:138","nodeType":"VariableDeclaration","scope":44664,"src":"1219:13:138","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":44643,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1219:7:138","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1140:96:138"},"returnParameters":{"id":44648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44647,"mutability":"mutable","name":"_verified","nameLocation":"1265:9:138","nodeType":"VariableDeclaration","scope":44664,"src":"1260:14:138","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":44646,"name":"bool","nodeType":"ElementaryTypeName","src":"1260:4:138","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1259:16:138"},"scope":44709,"src":"1111:286:138","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44691,"nodeType":"Block","src":"1879:96:138","statements":[{"assignments":[44679],"declarations":[{"constant":false,"id":44679,"mutability":"mutable","name":"key","nameLocation":"1898:3:138","nodeType":"VariableDeclaration","scope":44691,"src":"1885:16:138","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44678,"name":"bytes","nodeType":"ElementaryTypeName","src":"1885:5:138","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":44683,"initialValue":{"arguments":[{"id":44681,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44667,"src":"1918:4:138","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":44680,"name":"_getSecureKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44708,"src":"1904:13:138","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bytes memory)"}},"id":44682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1904:19:138","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"1885:38:138"},{"expression":{"arguments":[{"id":44686,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44679,"src":"1951:3:138","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":44687,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44669,"src":"1956:6:138","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":44688,"name":"_root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44671,"src":"1964:5:138","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":44684,"name":"MerkleTrie","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43782,"src":"1936:10:138","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MerkleTrie_$43782_$","typeString":"type(library MerkleTrie)"}},"id":44685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1947:3:138","memberName":"get","nodeType":"MemberAccess","referencedDeclaration":43263,"src":"1936:14:138","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,bytes memory,bytes32) pure returns (bool,bytes memory)"}},"id":44689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1936:34:138","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"functionReturnParameters":44677,"id":44690,"nodeType":"Return","src":"1929:41:138"}]},"documentation":{"id":44665,"nodeType":"StructuredDocumentation","src":"1401:333:138","text":" @notice Retrieves the value associated with a given key.\n @param _key Key to search for, as hex bytes.\n @param _proof Merkle trie inclusion proof for the key.\n @param _root Known root of the Merkle trie.\n @return _exists Whether or not the key exists.\n @return _value Value of the key if it exists."},"id":44692,"implemented":true,"kind":"function","modifiers":[],"name":"get","nameLocation":"1746:3:138","nodeType":"FunctionDefinition","parameters":{"id":44672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44667,"mutability":"mutable","name":"_key","nameLocation":"1768:4:138","nodeType":"VariableDeclaration","scope":44692,"src":"1755:17:138","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44666,"name":"bytes","nodeType":"ElementaryTypeName","src":"1755:5:138","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":44669,"mutability":"mutable","name":"_proof","nameLocation":"1791:6:138","nodeType":"VariableDeclaration","scope":44692,"src":"1778:19:138","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44668,"name":"bytes","nodeType":"ElementaryTypeName","src":"1778:5:138","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":44671,"mutability":"mutable","name":"_root","nameLocation":"1811:5:138","nodeType":"VariableDeclaration","scope":44692,"src":"1803:13:138","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":44670,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1803:7:138","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1749:71:138"},"returnParameters":{"id":44677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44674,"mutability":"mutable","name":"_exists","nameLocation":"1849:7:138","nodeType":"VariableDeclaration","scope":44692,"src":"1844:12:138","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":44673,"name":"bool","nodeType":"ElementaryTypeName","src":"1844:4:138","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":44676,"mutability":"mutable","name":"_value","nameLocation":"1871:6:138","nodeType":"VariableDeclaration","scope":44692,"src":"1858:19:138","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44675,"name":"bytes","nodeType":"ElementaryTypeName","src":"1858:5:138","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1843:35:138"},"scope":44709,"src":"1737:238:138","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44707,"nodeType":"Block","src":"2302:51:138","statements":[{"expression":{"arguments":[{"arguments":[{"id":44703,"name":"_key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44695,"src":"2342:4:138","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":44702,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2332:9:138","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":44704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2332:15:138","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":44700,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2315:3:138","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":44701,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2319:12:138","memberName":"encodePacked","nodeType":"MemberAccess","src":"2315:16:138","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":44705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2315:33:138","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":44699,"id":44706,"nodeType":"Return","src":"2308:40:138"}]},"documentation":{"id":44693,"nodeType":"StructuredDocumentation","src":"2056:154:138","text":" Computes the secure counterpart to a key.\n @param _key Key to get a secure key from.\n @return _secureKey Secure version of the key."},"id":44708,"implemented":true,"kind":"function","modifiers":[],"name":"_getSecureKey","nameLocation":"2222:13:138","nodeType":"FunctionDefinition","parameters":{"id":44696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44695,"mutability":"mutable","name":"_key","nameLocation":"2249:4:138","nodeType":"VariableDeclaration","scope":44708,"src":"2236:17:138","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44694,"name":"bytes","nodeType":"ElementaryTypeName","src":"2236:5:138","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2235:19:138"},"returnParameters":{"id":44699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44698,"mutability":"mutable","name":"_secureKey","nameLocation":"2290:10:138","nodeType":"VariableDeclaration","scope":44708,"src":"2277:23:138","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44697,"name":"bytes","nodeType":"ElementaryTypeName","src":"2277:5:138","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2276:25:138"},"scope":44709,"src":"2213:140:138","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":44710,"src":"328:2027:138","usedErrors":[]}],"src":"46:2310:138"},"id":138},"contracts/messaging/connectors/polygon/PolygonHubConnector.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/polygon/PolygonHubConnector.sol","exportedSymbols":{"FxBaseRootTunnel":[47389],"HubConnector":[39420],"IRootManager":[47888],"PolygonHubConnector":[44830]},"id":44831,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":44711,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:139"},{"absolutePath":"contracts/messaging/interfaces/IRootManager.sol","file":"../../interfaces/IRootManager.sol","id":44713,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":44831,"sourceUnit":47889,"src":"71:63:139","symbolAliases":[{"foreign":{"id":44712,"name":"IRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47888,"src":"79:12:139","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol","file":"./tunnel/FxBaseRootTunnel.sol","id":44715,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":44831,"sourceUnit":47390,"src":"136:63:139","symbolAliases":[{"foreign":{"id":44714,"name":"FxBaseRootTunnel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47389,"src":"144:16:139","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/HubConnector.sol","file":"../HubConnector.sol","id":44717,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":44831,"sourceUnit":39421,"src":"201:49:139","symbolAliases":[{"foreign":{"id":44716,"name":"HubConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39420,"src":"209:12:139","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":44718,"name":"HubConnector","nameLocations":["284:12:139"],"nodeType":"IdentifierPath","referencedDeclaration":39420,"src":"284:12:139"},"id":44719,"nodeType":"InheritanceSpecifier","src":"284:12:139"},{"baseName":{"id":44720,"name":"FxBaseRootTunnel","nameLocations":["298:16:139"],"nodeType":"IdentifierPath","referencedDeclaration":47389,"src":"298:16:139"},"id":44721,"nodeType":"InheritanceSpecifier","src":"298:16:139"}],"canonicalName":"PolygonHubConnector","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":44830,"linearizedBaseContracts":[44830,47389,39420,39244,47778,49928,50003],"name":"PolygonHubConnector","nameLocation":"261:19:139","nodeType":"ContractDefinition","nodes":[{"body":{"id":44747,"nodeType":"Block","src":"658:2:139","statements":[]},"id":44748,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":44736,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44723,"src":"547:7:139","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":44737,"name":"_mirrorDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44725,"src":"556:13:139","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":44738,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44727,"src":"571:4:139","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":44739,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44729,"src":"577:12:139","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":44740,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44731,"src":"591:16:139","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":44741,"kind":"baseConstructorSpecifier","modifierName":{"id":44735,"name":"HubConnector","nameLocations":["534:12:139"],"nodeType":"IdentifierPath","referencedDeclaration":39420,"src":"534:12:139"},"nodeType":"ModifierInvocation","src":"534:74:139"},{"arguments":[{"id":44743,"name":"_checkPointManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44733,"src":"630:18:139","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":44744,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44727,"src":"650:4:139","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":44745,"kind":"baseConstructorSpecifier","modifierName":{"id":44742,"name":"FxBaseRootTunnel","nameLocations":["613:16:139"],"nodeType":"IdentifierPath","referencedDeclaration":47389,"src":"613:16:139"},"nodeType":"ModifierInvocation","src":"613:42:139"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":44734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44723,"mutability":"mutable","name":"_domain","nameLocation":"386:7:139","nodeType":"VariableDeclaration","scope":44748,"src":"379:14:139","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":44722,"name":"uint32","nodeType":"ElementaryTypeName","src":"379:6:139","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":44725,"mutability":"mutable","name":"_mirrorDomain","nameLocation":"406:13:139","nodeType":"VariableDeclaration","scope":44748,"src":"399:20:139","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":44724,"name":"uint32","nodeType":"ElementaryTypeName","src":"399:6:139","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":44727,"mutability":"mutable","name":"_amb","nameLocation":"433:4:139","nodeType":"VariableDeclaration","scope":44748,"src":"425:12:139","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":44726,"name":"address","nodeType":"ElementaryTypeName","src":"425:7:139","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":44729,"mutability":"mutable","name":"_rootManager","nameLocation":"451:12:139","nodeType":"VariableDeclaration","scope":44748,"src":"443:20:139","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":44728,"name":"address","nodeType":"ElementaryTypeName","src":"443:7:139","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":44731,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"477:16:139","nodeType":"VariableDeclaration","scope":44748,"src":"469:24:139","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":44730,"name":"address","nodeType":"ElementaryTypeName","src":"469:7:139","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":44733,"mutability":"mutable","name":"_checkPointManager","nameLocation":"507:18:139","nodeType":"VariableDeclaration","scope":44748,"src":"499:26:139","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":44732,"name":"address","nodeType":"ElementaryTypeName","src":"499:7:139","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"373:156:139"},"returnParameters":{"id":44746,"nodeType":"ParameterList","parameters":[],"src":"658:0:139"},"scope":44830,"src":"362:298:139","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[39228],"body":{"id":44758,"nodeType":"Block","src":"788:67:139","statements":[{"expression":{"hexValue":"66616c7365","id":44756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"845:5:139","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":44755,"id":44757,"nodeType":"Return","src":"838:12:139"}]},"id":44759,"implemented":true,"kind":"function","modifiers":[],"name":"_verifySender","nameLocation":"717:13:139","nodeType":"FunctionDefinition","overrides":{"id":44752,"nodeType":"OverrideSpecifier","overrides":[],"src":"764:8:139"},"parameters":{"id":44751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44750,"mutability":"mutable","name":"_expected","nameLocation":"739:9:139","nodeType":"VariableDeclaration","scope":44759,"src":"731:17:139","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":44749,"name":"address","nodeType":"ElementaryTypeName","src":"731:7:139","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"730:19:139"},"returnParameters":{"id":44755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44754,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44759,"src":"782:4:139","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":44753,"name":"bool","nodeType":"ElementaryTypeName","src":"782:4:139","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"781:6:139"},"scope":44830,"src":"708:147:139","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[39210],"body":{"id":44779,"nodeType":"Block","src":"946:139:139","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":44768,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44763,"src":"1007:12:139","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":44769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1020:6:139","memberName":"length","nodeType":"MemberAccess","src":"1007:19:139","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":44770,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1030:1:139","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1007:24:139","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2164617461206c656e677468","id":44772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1033:14:139","typeDescriptions":{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""},"value":"!data length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""}],"id":44767,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"999:7:139","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":44773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"999:49:139","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44774,"nodeType":"ExpressionStatement","src":"999:49:139"},{"expression":{"arguments":[{"id":44776,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44761,"src":"1074:5:139","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":44775,"name":"_sendMessageToChild","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47151,"src":"1054:19:139","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory)"}},"id":44777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1054:26:139","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44778,"nodeType":"ExpressionStatement","src":"1054:26:139"}]},"id":44780,"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessage","nameLocation":"868:12:139","nodeType":"FunctionDefinition","overrides":{"id":44765,"nodeType":"OverrideSpecifier","overrides":[],"src":"937:8:139"},"parameters":{"id":44764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44761,"mutability":"mutable","name":"_data","nameLocation":"894:5:139","nodeType":"VariableDeclaration","scope":44780,"src":"881:18:139","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44760,"name":"bytes","nodeType":"ElementaryTypeName","src":"881:5:139","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":44763,"mutability":"mutable","name":"_encodedData","nameLocation":"914:12:139","nodeType":"VariableDeclaration","scope":44780,"src":"901:25:139","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44762,"name":"bytes","nodeType":"ElementaryTypeName","src":"901:5:139","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"880:47:139"},"returnParameters":{"id":44766,"nodeType":"ParameterList","parameters":[],"src":"946:0:139"},"scope":44830,"src":"859:226:139","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[47388],"body":{"id":44811,"nodeType":"Block","src":"1163:469:139","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":44787,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44782,"src":"1428:7:139","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":44788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1436:6:139","memberName":"length","nodeType":"MemberAccess","src":"1428:14:139","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":44789,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1446:2:139","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"1428:20:139","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c656e677468","id":44791,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1450:9:139","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""},"value":"!length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""}],"id":44786,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1420:7:139","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":44792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1420:40:139","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44793,"nodeType":"ExpressionStatement","src":"1420:40:139"},{"expression":{"arguments":[{"id":44798,"name":"MIRROR_DOMAIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39048,"src":"1546:13:139","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"arguments":[{"id":44801,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44782,"src":"1569:7:139","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":44800,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1561:7:139","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":44799,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1561:7:139","typeDescriptions":{}}},"id":44802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1561:16:139","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"arguments":[{"id":44795,"name":"ROOT_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39045,"src":"1522:12:139","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":44794,"name":"IRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47888,"src":"1509:12:139","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRootManager_$47888_$","typeString":"type(contract IRootManager)"}},"id":44796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1509:26:139","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRootManager_$47888","typeString":"contract IRootManager"}},"id":44797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1536:9:139","memberName":"aggregate","nodeType":"MemberAccess","referencedDeclaration":47887,"src":"1509:36:139","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint32_$_t_bytes32_$returns$__$","typeString":"function (uint32,bytes32) external"}},"id":44803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1509:69:139","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44804,"nodeType":"ExpressionStatement","src":"1509:69:139"},{"eventCall":{"arguments":[{"id":44806,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44782,"src":"1607:7:139","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"id":44807,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1616:3:139","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":44808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1620:6:139","memberName":"sender","nodeType":"MemberAccess","src":"1616:10:139","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":44805,"name":"MessageProcessed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47765,"src":"1590:16:139","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_address_$returns$__$","typeString":"function (bytes memory,address)"}},"id":44809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1590:37:139","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44810,"nodeType":"EmitStatement","src":"1585:42:139"}]},"id":44812,"implemented":true,"kind":"function","modifiers":[],"name":"_processMessageFromChild","nameLocation":"1098:24:139","nodeType":"FunctionDefinition","overrides":{"id":44784,"nodeType":"OverrideSpecifier","overrides":[],"src":"1154:8:139"},"parameters":{"id":44783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44782,"mutability":"mutable","name":"message","nameLocation":"1136:7:139","nodeType":"VariableDeclaration","scope":44812,"src":"1123:20:139","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44781,"name":"bytes","nodeType":"ElementaryTypeName","src":"1123:5:139","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1122:22:139"},"returnParameters":{"id":44785,"nodeType":"ParameterList","parameters":[],"src":"1163:0:139"},"scope":44830,"src":"1089:543:139","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[39243],"body":{"id":44828,"nodeType":"Block","src":"1850:456:139","statements":[{"expression":{"arguments":[{"id":44821,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44814,"src":"2243:16:139","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":44818,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2217:5:139","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_PolygonHubConnector_$44830_$","typeString":"type(contract super PolygonHubConnector)"}},"id":44820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2223:19:139","memberName":"_setMirrorConnector","nodeType":"MemberAccess","referencedDeclaration":39243,"src":"2217:25:139","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":44822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2217:43:139","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44823,"nodeType":"ExpressionStatement","src":"2217:43:139"},{"expression":{"arguments":[{"id":44825,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44814,"src":"2284:16:139","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":44824,"name":"setFxChildTunnel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47137,"src":"2267:16:139","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":44826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2267:34:139","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44827,"nodeType":"ExpressionStatement","src":"2267:34:139"}]},"id":44829,"implemented":true,"kind":"function","modifiers":[],"name":"_setMirrorConnector","nameLocation":"1786:19:139","nodeType":"FunctionDefinition","overrides":{"id":44816,"nodeType":"OverrideSpecifier","overrides":[],"src":"1841:8:139"},"parameters":{"id":44815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44814,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"1814:16:139","nodeType":"VariableDeclaration","scope":44829,"src":"1806:24:139","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":44813,"name":"address","nodeType":"ElementaryTypeName","src":"1806:7:139","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1805:26:139"},"returnParameters":{"id":44817,"nodeType":"ParameterList","parameters":[],"src":"1850:0:139"},"scope":44830,"src":"1777:529:139","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":44831,"src":"252:2056:139","usedErrors":[39018,49697,49699,49701,49703,49705,49707,49709]}],"src":"46:2263:139"},"id":139},"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol","exportedSymbols":{"FxBaseChildTunnel":[47021],"PolygonSpokeConnector":[44964],"SpokeConnector":[40428]},"id":44965,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":44832,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:140"},{"absolutePath":"contracts/messaging/connectors/polygon/tunnel/FxBaseChildTunnel.sol","file":"./tunnel/FxBaseChildTunnel.sol","id":44834,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":44965,"sourceUnit":47022,"src":"71:65:140","symbolAliases":[{"foreign":{"id":44833,"name":"FxBaseChildTunnel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47021,"src":"79:17:140","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/SpokeConnector.sol","file":"../SpokeConnector.sol","id":44836,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":44965,"sourceUnit":40429,"src":"138:53:140","symbolAliases":[{"foreign":{"id":44835,"name":"SpokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40428,"src":"146:14:140","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":44837,"name":"SpokeConnector","nameLocations":["742:14:140"],"nodeType":"IdentifierPath","referencedDeclaration":40428,"src":"742:14:140"},"id":44838,"nodeType":"InheritanceSpecifier","src":"742:14:140"},{"baseName":{"id":44839,"name":"FxBaseChildTunnel","nameLocations":["758:17:140"],"nodeType":"IdentifierPath","referencedDeclaration":47021,"src":"758:17:140"},"id":44840,"nodeType":"InheritanceSpecifier","src":"758:17:140"}],"canonicalName":"PolygonSpokeConnector","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":44964,"linearizedBaseContracts":[44964,47021,46920,40428,10734,49688,38914,10680,11506,39292,47805,39244,47778,49928,50003],"name":"PolygonSpokeConnector","nameLocation":"717:21:140","nodeType":"ContractDefinition","nodes":[{"body":{"id":44878,"nodeType":"Block","src":"1328:2:140","statements":[]},"id":44879,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":44863,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44842,"src":"1111:7:140","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":44864,"name":"_mirrorDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44844,"src":"1126:13:140","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":44865,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44846,"src":"1147:4:140","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":44866,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44848,"src":"1159:12:140","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":44867,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44850,"src":"1179:16:140","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":44868,"name":"_processGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44852,"src":"1203:11:140","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":44869,"name":"_reserveGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44854,"src":"1222:11:140","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":44870,"name":"_delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44856,"src":"1241:12:140","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":44871,"name":"_merkle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44858,"src":"1261:7:140","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":44872,"name":"_watcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44860,"src":"1276:15:140","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":44873,"kind":"baseConstructorSpecifier","modifierName":{"id":44862,"name":"SpokeConnector","nameLocations":["1089:14:140"],"nodeType":"IdentifierPath","referencedDeclaration":40428,"src":"1089:14:140"},"nodeType":"ModifierInvocation","src":"1089:208:140"},{"arguments":[{"id":44875,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44846,"src":"1320:4:140","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":44876,"kind":"baseConstructorSpecifier","modifierName":{"id":44874,"name":"FxBaseChildTunnel","nameLocations":["1302:17:140"],"nodeType":"IdentifierPath","referencedDeclaration":47021,"src":"1302:17:140"},"nodeType":"ModifierInvocation","src":"1302:23:140"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":44861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44842,"mutability":"mutable","name":"_domain","nameLocation":"847:7:140","nodeType":"VariableDeclaration","scope":44879,"src":"840:14:140","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":44841,"name":"uint32","nodeType":"ElementaryTypeName","src":"840:6:140","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":44844,"mutability":"mutable","name":"_mirrorDomain","nameLocation":"867:13:140","nodeType":"VariableDeclaration","scope":44879,"src":"860:20:140","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":44843,"name":"uint32","nodeType":"ElementaryTypeName","src":"860:6:140","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":44846,"mutability":"mutable","name":"_amb","nameLocation":"894:4:140","nodeType":"VariableDeclaration","scope":44879,"src":"886:12:140","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":44845,"name":"address","nodeType":"ElementaryTypeName","src":"886:7:140","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":44848,"mutability":"mutable","name":"_rootManager","nameLocation":"912:12:140","nodeType":"VariableDeclaration","scope":44879,"src":"904:20:140","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":44847,"name":"address","nodeType":"ElementaryTypeName","src":"904:7:140","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":44850,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"938:16:140","nodeType":"VariableDeclaration","scope":44879,"src":"930:24:140","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":44849,"name":"address","nodeType":"ElementaryTypeName","src":"930:7:140","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":44852,"mutability":"mutable","name":"_processGas","nameLocation":"968:11:140","nodeType":"VariableDeclaration","scope":44879,"src":"960:19:140","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44851,"name":"uint256","nodeType":"ElementaryTypeName","src":"960:7:140","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":44854,"mutability":"mutable","name":"_reserveGas","nameLocation":"993:11:140","nodeType":"VariableDeclaration","scope":44879,"src":"985:19:140","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44853,"name":"uint256","nodeType":"ElementaryTypeName","src":"985:7:140","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":44856,"mutability":"mutable","name":"_delayBlocks","nameLocation":"1018:12:140","nodeType":"VariableDeclaration","scope":44879,"src":"1010:20:140","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44855,"name":"uint256","nodeType":"ElementaryTypeName","src":"1010:7:140","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":44858,"mutability":"mutable","name":"_merkle","nameLocation":"1044:7:140","nodeType":"VariableDeclaration","scope":44879,"src":"1036:15:140","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":44857,"name":"address","nodeType":"ElementaryTypeName","src":"1036:7:140","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":44860,"mutability":"mutable","name":"_watcherManager","nameLocation":"1065:15:140","nodeType":"VariableDeclaration","scope":44879,"src":"1057:23:140","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":44859,"name":"address","nodeType":"ElementaryTypeName","src":"1057:7:140","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"834:250:140"},"returnParameters":{"id":44877,"nodeType":"ParameterList","parameters":[],"src":"1328:0:140"},"scope":44964,"src":"823:507:140","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[39228],"body":{"id":44889,"nodeType":"Block","src":"1458:168:140","statements":[{"expression":{"hexValue":"66616c7365","id":44887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1616:5:140","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":44886,"id":44888,"nodeType":"Return","src":"1609:12:140"}]},"id":44890,"implemented":true,"kind":"function","modifiers":[],"name":"_verifySender","nameLocation":"1387:13:140","nodeType":"FunctionDefinition","overrides":{"id":44883,"nodeType":"OverrideSpecifier","overrides":[],"src":"1434:8:140"},"parameters":{"id":44882,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44881,"mutability":"mutable","name":"_expected","nameLocation":"1409:9:140","nodeType":"VariableDeclaration","scope":44890,"src":"1401:17:140","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":44880,"name":"address","nodeType":"ElementaryTypeName","src":"1401:7:140","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1400:19:140"},"returnParameters":{"id":44886,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44885,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44890,"src":"1452:4:140","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":44884,"name":"bool","nodeType":"ElementaryTypeName","src":"1452:4:140","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1451:6:140"},"scope":44964,"src":"1378:248:140","stateMutability":"pure","virtual":false,"visibility":"internal"},{"baseFunctions":[39210],"body":{"id":44910,"nodeType":"Block","src":"1717:138:140","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":44899,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44894,"src":"1778:12:140","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":44900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1791:6:140","memberName":"length","nodeType":"MemberAccess","src":"1778:19:140","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":44901,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1801:1:140","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1778:24:140","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2164617461206c656e677468","id":44903,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1804:14:140","typeDescriptions":{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""},"value":"!data length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""}],"id":44898,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1770:7:140","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":44904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1770:49:140","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44905,"nodeType":"ExpressionStatement","src":"1770:49:140"},{"expression":{"arguments":[{"id":44907,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44892,"src":"1844:5:140","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":44906,"name":"_sendMessageToRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47010,"src":"1825:18:140","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory)"}},"id":44908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1825:25:140","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44909,"nodeType":"ExpressionStatement","src":"1825:25:140"}]},"id":44911,"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessage","nameLocation":"1639:12:140","nodeType":"FunctionDefinition","overrides":{"id":44896,"nodeType":"OverrideSpecifier","overrides":[],"src":"1708:8:140"},"parameters":{"id":44895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44892,"mutability":"mutable","name":"_data","nameLocation":"1665:5:140","nodeType":"VariableDeclaration","scope":44911,"src":"1652:18:140","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44891,"name":"bytes","nodeType":"ElementaryTypeName","src":"1652:5:140","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":44894,"mutability":"mutable","name":"_encodedData","nameLocation":"1685:12:140","nodeType":"VariableDeclaration","scope":44911,"src":"1672:25:140","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44893,"name":"bytes","nodeType":"ElementaryTypeName","src":"1672:5:140","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1651:47:140"},"returnParameters":{"id":44897,"nodeType":"ParameterList","parameters":[],"src":"1717:0:140"},"scope":44964,"src":"1630:225:140","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[47020],"body":{"id":44945,"nodeType":"Block","src":"2007:336:140","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":44925,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44917,"src":"2175:4:140","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":44926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2180:6:140","memberName":"length","nodeType":"MemberAccess","src":"2175:11:140","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":44927,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2190:2:140","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"2175:17:140","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c656e677468","id":44929,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2194:9:140","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""},"value":"!length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""}],"id":44924,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2167:7:140","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":44930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2167:37:140","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44931,"nodeType":"ExpressionStatement","src":"2167:37:140"},{"expression":{"arguments":[{"arguments":[{"id":44935,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44917,"src":"2286:4:140","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":44934,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2278:7:140","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":44933,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2278:7:140","typeDescriptions":{}}},"id":44936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2278:13:140","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":44932,"name":"receiveAggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40160,"src":"2257:20:140","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":44937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2257:35:140","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44938,"nodeType":"ExpressionStatement","src":"2257:35:140"},{"eventCall":{"arguments":[{"id":44940,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44917,"src":"2321:4:140","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"expression":{"id":44941,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2327:3:140","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":44942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2331:6:140","memberName":"sender","nodeType":"MemberAccess","src":"2327:10:140","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":44939,"name":"MessageProcessed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47765,"src":"2304:16:140","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_address_$returns$__$","typeString":"function (bytes memory,address)"}},"id":44943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2304:34:140","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44944,"nodeType":"EmitStatement","src":"2299:39:140"}]},"id":44946,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":44921,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44915,"src":"1999:6:140","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":44922,"kind":"modifierInvocation","modifierName":{"id":44920,"name":"validateSender","nameLocations":["1984:14:140"],"nodeType":"IdentifierPath","referencedDeclaration":46954,"src":"1984:14:140"},"nodeType":"ModifierInvocation","src":"1984:22:140"}],"name":"_processMessageFromRoot","nameLocation":"1868:23:140","nodeType":"FunctionDefinition","overrides":{"id":44919,"nodeType":"OverrideSpecifier","overrides":[],"src":"1975:8:140"},"parameters":{"id":44918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44913,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44946,"src":"1897:7:140","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44912,"name":"uint256","nodeType":"ElementaryTypeName","src":"1897:7:140","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":44915,"mutability":"mutable","name":"sender","nameLocation":"1932:6:140","nodeType":"VariableDeclaration","scope":44946,"src":"1924:14:140","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":44914,"name":"address","nodeType":"ElementaryTypeName","src":"1924:7:140","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":44917,"mutability":"mutable","name":"data","nameLocation":"1957:4:140","nodeType":"VariableDeclaration","scope":44946,"src":"1944:17:140","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":44916,"name":"bytes","nodeType":"ElementaryTypeName","src":"1944:5:140","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1891:74:140"},"returnParameters":{"id":44923,"nodeType":"ParameterList","parameters":[],"src":"2007:0:140"},"scope":44964,"src":"1859:484:140","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[39243],"body":{"id":44962,"nodeType":"Block","src":"2559:451:140","statements":[{"expression":{"arguments":[{"id":44955,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44948,"src":"2948:16:140","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":44952,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2922:5:140","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_PolygonSpokeConnector_$44964_$","typeString":"type(contract super PolygonSpokeConnector)"}},"id":44954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2928:19:140","memberName":"_setMirrorConnector","nodeType":"MemberAccess","referencedDeclaration":39243,"src":"2922:25:140","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":44956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2922:43:140","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44957,"nodeType":"ExpressionStatement","src":"2922:43:140"},{"expression":{"arguments":[{"id":44959,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44948,"src":"2988:16:140","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":44958,"name":"setFxRootTunnel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46974,"src":"2972:15:140","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":44960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2972:33:140","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":44961,"nodeType":"ExpressionStatement","src":"2972:33:140"}]},"id":44963,"implemented":true,"kind":"function","modifiers":[],"name":"_setMirrorConnector","nameLocation":"2495:19:140","nodeType":"FunctionDefinition","overrides":{"id":44950,"nodeType":"OverrideSpecifier","overrides":[],"src":"2550:8:140"},"parameters":{"id":44949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44948,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"2523:16:140","nodeType":"VariableDeclaration","scope":44963,"src":"2515:24:140","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":44947,"name":"address","nodeType":"ElementaryTypeName","src":"2515:7:140","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2514:26:140"},"returnParameters":{"id":44951,"nodeType":"ParameterList","parameters":[],"src":"2559:0:140"},"scope":44964,"src":"2486:524:140","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":44965,"src":"708:2304:140","usedErrors":[39018,49630,49697,49699,49701,49703,49705,49707,49709,50225,50227,50229,50231,50233]}],"src":"46:2967:140"},"id":140},"contracts/messaging/connectors/polygon/lib/ExitPayloadReader.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/polygon/lib/ExitPayloadReader.sol","exportedSymbols":{"ExitPayloadReader":[45470],"RLPReader":[46908]},"id":45471,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":44966,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"120:23:141"},{"absolutePath":"contracts/messaging/connectors/polygon/lib/RLPReader.sol","file":"./RLPReader.sol","id":44968,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":45471,"sourceUnit":46909,"src":"145:42:141","symbolAliases":[{"foreign":{"id":44967,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46908,"src":"153:9:141","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ExitPayloadReader","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":45470,"linearizedBaseContracts":[45470],"name":"ExitPayloadReader","nameLocation":"197:17:141","nodeType":"ContractDefinition","nodes":[{"global":false,"id":44971,"libraryName":{"id":44969,"name":"RLPReader","nameLocations":["225:9:141"],"nodeType":"IdentifierPath","referencedDeclaration":46908,"src":"225:9:141"},"nodeType":"UsingForDirective","src":"219:26:141","typeName":{"id":44970,"name":"bytes","nodeType":"ElementaryTypeName","src":"239:5:141","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},{"global":false,"id":44975,"libraryName":{"id":44972,"name":"RLPReader","nameLocations":["254:9:141"],"nodeType":"IdentifierPath","referencedDeclaration":46908,"src":"254:9:141"},"nodeType":"UsingForDirective","src":"248:38:141","typeName":{"id":44974,"nodeType":"UserDefinedTypeName","pathNode":{"id":44973,"name":"RLPReader.RLPItem","nameLocations":["268:9:141","278:7:141"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"268:17:141"},"referencedDeclaration":46106,"src":"268:17:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}}},{"constant":true,"id":44978,"mutability":"constant","name":"WORD_SIZE","nameLocation":"305:9:141","nodeType":"VariableDeclaration","scope":45470,"src":"290:29:141","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":44976,"name":"uint8","nodeType":"ElementaryTypeName","src":"290:5:141","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"3332","id":44977,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"317:2:141","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"visibility":"internal"},{"canonicalName":"ExitPayloadReader.ExitPayload","id":44983,"members":[{"constant":false,"id":44982,"mutability":"mutable","name":"data","nameLocation":"369:4:141","nodeType":"VariableDeclaration","scope":44983,"src":"349:24:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"},"typeName":{"baseType":{"id":44980,"nodeType":"UserDefinedTypeName","pathNode":{"id":44979,"name":"RLPReader.RLPItem","nameLocations":["349:9:141","359:7:141"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"349:17:141"},"referencedDeclaration":46106,"src":"349:17:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"id":44981,"nodeType":"ArrayTypeName","src":"349:19:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"}},"visibility":"internal"}],"name":"ExitPayload","nameLocation":"331:11:141","nodeType":"StructDefinition","scope":45470,"src":"324:54:141","visibility":"public"},{"canonicalName":"ExitPayloadReader.Receipt","id":44992,"members":[{"constant":false,"id":44987,"mutability":"mutable","name":"data","nameLocation":"423:4:141","nodeType":"VariableDeclaration","scope":44992,"src":"403:24:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"},"typeName":{"baseType":{"id":44985,"nodeType":"UserDefinedTypeName","pathNode":{"id":44984,"name":"RLPReader.RLPItem","nameLocations":["403:9:141","413:7:141"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"403:17:141"},"referencedDeclaration":46106,"src":"403:17:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"id":44986,"nodeType":"ArrayTypeName","src":"403:19:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"}},"visibility":"internal"},{"constant":false,"id":44989,"mutability":"mutable","name":"raw","nameLocation":"439:3:141","nodeType":"VariableDeclaration","scope":44992,"src":"433:9:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":44988,"name":"bytes","nodeType":"ElementaryTypeName","src":"433:5:141","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":44991,"mutability":"mutable","name":"logIndex","nameLocation":"456:8:141","nodeType":"VariableDeclaration","scope":44992,"src":"448:16:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44990,"name":"uint256","nodeType":"ElementaryTypeName","src":"448:7:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Receipt","nameLocation":"389:7:141","nodeType":"StructDefinition","scope":45470,"src":"382:87:141","visibility":"public"},{"canonicalName":"ExitPayloadReader.Log","id":45000,"members":[{"constant":false,"id":44995,"mutability":"mutable","name":"data","nameLocation":"508:4:141","nodeType":"VariableDeclaration","scope":45000,"src":"490:22:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":44994,"nodeType":"UserDefinedTypeName","pathNode":{"id":44993,"name":"RLPReader.RLPItem","nameLocations":["490:9:141","500:7:141"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"490:17:141"},"referencedDeclaration":46106,"src":"490:17:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"},{"constant":false,"id":44999,"mutability":"mutable","name":"list","nameLocation":"538:4:141","nodeType":"VariableDeclaration","scope":45000,"src":"518:24:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"},"typeName":{"baseType":{"id":44997,"nodeType":"UserDefinedTypeName","pathNode":{"id":44996,"name":"RLPReader.RLPItem","nameLocations":["518:9:141","528:7:141"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"518:17:141"},"referencedDeclaration":46106,"src":"518:17:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"id":44998,"nodeType":"ArrayTypeName","src":"518:19:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"}},"visibility":"internal"}],"name":"Log","nameLocation":"480:3:141","nodeType":"StructDefinition","scope":45470,"src":"473:74:141","visibility":"public"},{"canonicalName":"ExitPayloadReader.LogTopics","id":45005,"members":[{"constant":false,"id":45004,"mutability":"mutable","name":"data","nameLocation":"594:4:141","nodeType":"VariableDeclaration","scope":45005,"src":"574:24:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"},"typeName":{"baseType":{"id":45002,"nodeType":"UserDefinedTypeName","pathNode":{"id":45001,"name":"RLPReader.RLPItem","nameLocations":["574:9:141","584:7:141"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"574:17:141"},"referencedDeclaration":46106,"src":"574:17:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"id":45003,"nodeType":"ArrayTypeName","src":"574:19:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"}},"visibility":"internal"}],"name":"LogTopics","nameLocation":"558:9:141","nodeType":"StructDefinition","scope":45470,"src":"551:52:141","visibility":"public"},{"body":{"id":45056,"nodeType":"Block","src":"779:586:141","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45014,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45011,"src":"789:3:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":45015,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"796:1:141","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"789:8:141","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45018,"nodeType":"IfStatement","src":"785:21:141","trueBody":{"functionReturnParameters":45013,"id":45017,"nodeType":"Return","src":"799:7:141"}},{"body":{"id":45037,"nodeType":"Block","src":"901:115:141","statements":[{"AST":{"nodeType":"YulBlock","src":"918:42:141","statements":[{"expression":{"arguments":[{"name":"dest","nodeType":"YulIdentifier","src":"935:4:141"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"947:3:141"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"941:5:141"},"nodeType":"YulFunctionCall","src":"941:10:141"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"928:6:141"},"nodeType":"YulFunctionCall","src":"928:24:141"},"nodeType":"YulExpressionStatement","src":"928:24:141"}]},"evmVersion":"london","externalReferences":[{"declaration":45009,"isOffset":false,"isSlot":false,"src":"935:4:141","valueSize":1},{"declaration":45007,"isOffset":false,"isSlot":false,"src":"947:3:141","valueSize":1}],"id":45028,"nodeType":"InlineAssembly","src":"909:51:141"},{"expression":{"id":45031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45029,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45007,"src":"968:3:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":45030,"name":"WORD_SIZE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44978,"src":"975:9:141","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"968:16:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45032,"nodeType":"ExpressionStatement","src":"968:16:141"},{"expression":{"id":45035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45033,"name":"dest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45009,"src":"992:4:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":45034,"name":"WORD_SIZE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44978,"src":"1000:9:141","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"992:17:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45036,"nodeType":"ExpressionStatement","src":"992:17:141"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45019,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45011,"src":"862:3:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":45022,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":45020,"name":"WORD_SIZE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44978,"src":"868:9:141","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":45021,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"880:1:141","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"868:13:141","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"862:19:141","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45038,"loopExpression":{"expression":{"id":45026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45024,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45011,"src":"883:3:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":45025,"name":"WORD_SIZE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44978,"src":"890:9:141","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"883:16:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45027,"nodeType":"ExpressionStatement","src":"883:16:141"},"nodeType":"ForStatement","src":"855:161:141"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45039,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45011,"src":"1026:3:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":45040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1033:1:141","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1026:8:141","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45043,"nodeType":"IfStatement","src":"1022:21:141","trueBody":{"functionReturnParameters":45013,"id":45042,"nodeType":"Return","src":"1036:7:141"}},{"assignments":[45045],"declarations":[{"constant":false,"id":45045,"mutability":"mutable","name":"mask","nameLocation":"1133:4:141","nodeType":"VariableDeclaration","scope":45056,"src":"1125:12:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45044,"name":"uint256","nodeType":"ElementaryTypeName","src":"1125:7:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45054,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"323536","id":45046,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1140:3:141","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45047,"name":"WORD_SIZE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44978,"src":"1146:9:141","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":45048,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45011,"src":"1158:3:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1146:15:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":45050,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1145:17:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1140:22:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":45052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1165:1:141","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1140:26:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1125:41:141"},{"AST":{"nodeType":"YulBlock","src":"1181:180:141","statements":[{"nodeType":"YulVariableDeclaration","src":"1189:41:141","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"1214:3:141"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1208:5:141"},"nodeType":"YulFunctionCall","src":"1208:10:141"},{"arguments":[{"name":"mask","nodeType":"YulIdentifier","src":"1224:4:141"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1220:3:141"},"nodeType":"YulFunctionCall","src":"1220:9:141"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1204:3:141"},"nodeType":"YulFunctionCall","src":"1204:26:141"},"variables":[{"name":"srcpart","nodeType":"YulTypedName","src":"1193:7:141","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1253:38:141","value":{"arguments":[{"arguments":[{"name":"dest","nodeType":"YulIdentifier","src":"1279:4:141"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1273:5:141"},"nodeType":"YulFunctionCall","src":"1273:11:141"},{"name":"mask","nodeType":"YulIdentifier","src":"1286:4:141"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1269:3:141"},"nodeType":"YulFunctionCall","src":"1269:22:141"},"variables":[{"name":"destpart","nodeType":"YulTypedName","src":"1257:8:141","type":""}]},{"expression":{"arguments":[{"name":"dest","nodeType":"YulIdentifier","src":"1327:4:141"},{"arguments":[{"name":"destpart","nodeType":"YulIdentifier","src":"1336:8:141"},{"name":"srcpart","nodeType":"YulIdentifier","src":"1346:7:141"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1333:2:141"},"nodeType":"YulFunctionCall","src":"1333:21:141"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1320:6:141"},"nodeType":"YulFunctionCall","src":"1320:35:141"},"nodeType":"YulExpressionStatement","src":"1320:35:141"}]},"evmVersion":"london","externalReferences":[{"declaration":45009,"isOffset":false,"isSlot":false,"src":"1279:4:141","valueSize":1},{"declaration":45009,"isOffset":false,"isSlot":false,"src":"1327:4:141","valueSize":1},{"declaration":45045,"isOffset":false,"isSlot":false,"src":"1224:4:141","valueSize":1},{"declaration":45045,"isOffset":false,"isSlot":false,"src":"1286:4:141","valueSize":1},{"declaration":45007,"isOffset":false,"isSlot":false,"src":"1214:3:141","valueSize":1}],"id":45055,"nodeType":"InlineAssembly","src":"1172:189:141"}]},"id":45057,"implemented":true,"kind":"function","modifiers":[],"name":"copy","nameLocation":"705:4:141","nodeType":"FunctionDefinition","parameters":{"id":45012,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45007,"mutability":"mutable","name":"src","nameLocation":"723:3:141","nodeType":"VariableDeclaration","scope":45057,"src":"715:11:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45006,"name":"uint256","nodeType":"ElementaryTypeName","src":"715:7:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":45009,"mutability":"mutable","name":"dest","nameLocation":"740:4:141","nodeType":"VariableDeclaration","scope":45057,"src":"732:12:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45008,"name":"uint256","nodeType":"ElementaryTypeName","src":"732:7:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":45011,"mutability":"mutable","name":"len","nameLocation":"758:3:141","nodeType":"VariableDeclaration","scope":45057,"src":"750:11:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45010,"name":"uint256","nodeType":"ElementaryTypeName","src":"750:7:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"709:56:141"},"returnParameters":{"id":45013,"nodeType":"ParameterList","parameters":[],"src":"779:0:141"},"scope":45470,"src":"696:669:141","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":45081,"nodeType":"Block","src":"1454:115:141","statements":[{"assignments":[45070],"declarations":[{"constant":false,"id":45070,"mutability":"mutable","name":"payloadData","nameLocation":"1487:11:141","nodeType":"VariableDeclaration","scope":45081,"src":"1460:38:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem[]"},"typeName":{"baseType":{"id":45068,"nodeType":"UserDefinedTypeName","pathNode":{"id":45067,"name":"RLPReader.RLPItem","nameLocations":["1460:9:141","1470:7:141"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"1460:17:141"},"referencedDeclaration":46106,"src":"1460:17:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"id":45069,"nodeType":"ArrayTypeName","src":"1460:19:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"}},"visibility":"internal"}],"id":45076,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":45071,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45059,"src":"1501:4:141","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1506:9:141","memberName":"toRlpItem","nodeType":"MemberAccess","referencedDeclaration":46195,"src":"1501:14:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_RLPItem_$46106_memory_ptr_$bound_to$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (struct RLPReader.RLPItem memory)"}},"id":45073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1501:16:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45074,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1518:6:141","memberName":"toList","nodeType":"MemberAccess","referencedDeclaration":46339,"src":"1501:23:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (struct RLPReader.RLPItem memory[] memory)"}},"id":45075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1501:25:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1460:66:141"},{"expression":{"arguments":[{"id":45078,"name":"payloadData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45070,"src":"1552:11:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}],"id":45077,"name":"ExitPayload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44983,"src":"1540:11:141","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExitPayload_$44983_storage_ptr_$","typeString":"type(struct ExitPayloadReader.ExitPayload storage pointer)"}},"id":45079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1540:24:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"functionReturnParameters":45064,"id":45080,"nodeType":"Return","src":"1533:31:141"}]},"id":45082,"implemented":true,"kind":"function","modifiers":[],"name":"toExitPayload","nameLocation":"1378:13:141","nodeType":"FunctionDefinition","parameters":{"id":45060,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45059,"mutability":"mutable","name":"data","nameLocation":"1405:4:141","nodeType":"VariableDeclaration","scope":45082,"src":"1392:17:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45058,"name":"bytes","nodeType":"ElementaryTypeName","src":"1392:5:141","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1391:19:141"},"returnParameters":{"id":45064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45063,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45082,"src":"1434:18:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload"},"typeName":{"id":45062,"nodeType":"UserDefinedTypeName","pathNode":{"id":45061,"name":"ExitPayload","nameLocations":["1434:11:141"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"1434:11:141"},"referencedDeclaration":44983,"src":"1434:11:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_storage_ptr","typeString":"struct ExitPayloadReader.ExitPayload"}},"visibility":"internal"}],"src":"1433:20:141"},"scope":45470,"src":"1369:200:141","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45097,"nodeType":"Block","src":"1658:42:141","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":45090,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45085,"src":"1671:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":45091,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1679:4:141","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"1671:12:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45093,"indexExpression":{"hexValue":"30","id":45092,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1684:1:141","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1671:15:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45094,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1687:6:141","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":46603,"src":"1671:22:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256)"}},"id":45095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1671:24:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45089,"id":45096,"nodeType":"Return","src":"1664:31:141"}]},"id":45098,"implemented":true,"kind":"function","modifiers":[],"name":"getHeaderNumber","nameLocation":"1582:15:141","nodeType":"FunctionDefinition","parameters":{"id":45086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45085,"mutability":"mutable","name":"payload","nameLocation":"1617:7:141","nodeType":"VariableDeclaration","scope":45098,"src":"1598:26:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload"},"typeName":{"id":45084,"nodeType":"UserDefinedTypeName","pathNode":{"id":45083,"name":"ExitPayload","nameLocations":["1598:11:141"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"1598:11:141"},"referencedDeclaration":44983,"src":"1598:11:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_storage_ptr","typeString":"struct ExitPayloadReader.ExitPayload"}},"visibility":"internal"}],"src":"1597:28:141"},"returnParameters":{"id":45089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45088,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45098,"src":"1649:7:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45087,"name":"uint256","nodeType":"ElementaryTypeName","src":"1649:7:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1648:9:141"},"scope":45470,"src":"1573:127:141","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45113,"nodeType":"Block","src":"1792:43:141","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":45106,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45101,"src":"1805:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":45107,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1813:4:141","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"1805:12:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45109,"indexExpression":{"hexValue":"31","id":45108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1818:1:141","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1805:15:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45110,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1821:7:141","memberName":"toBytes","nodeType":"MemberAccess","referencedDeclaration":46684,"src":"1805:23:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes memory)"}},"id":45111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1805:25:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":45105,"id":45112,"nodeType":"Return","src":"1798:32:141"}]},"id":45114,"implemented":true,"kind":"function","modifiers":[],"name":"getBlockProof","nameLocation":"1713:13:141","nodeType":"FunctionDefinition","parameters":{"id":45102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45101,"mutability":"mutable","name":"payload","nameLocation":"1746:7:141","nodeType":"VariableDeclaration","scope":45114,"src":"1727:26:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload"},"typeName":{"id":45100,"nodeType":"UserDefinedTypeName","pathNode":{"id":45099,"name":"ExitPayload","nameLocations":["1727:11:141"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"1727:11:141"},"referencedDeclaration":44983,"src":"1727:11:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_storage_ptr","typeString":"struct ExitPayloadReader.ExitPayload"}},"visibility":"internal"}],"src":"1726:28:141"},"returnParameters":{"id":45105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45104,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45114,"src":"1778:12:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45103,"name":"bytes","nodeType":"ElementaryTypeName","src":"1778:5:141","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1777:14:141"},"scope":45470,"src":"1704:131:141","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45129,"nodeType":"Block","src":"1923:42:141","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":45122,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45117,"src":"1936:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":45123,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1944:4:141","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"1936:12:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45125,"indexExpression":{"hexValue":"32","id":45124,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1949:1:141","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1936:15:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45126,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1952:6:141","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":46603,"src":"1936:22:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256)"}},"id":45127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1936:24:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45121,"id":45128,"nodeType":"Return","src":"1929:31:141"}]},"id":45130,"implemented":true,"kind":"function","modifiers":[],"name":"getBlockNumber","nameLocation":"1848:14:141","nodeType":"FunctionDefinition","parameters":{"id":45118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45117,"mutability":"mutable","name":"payload","nameLocation":"1882:7:141","nodeType":"VariableDeclaration","scope":45130,"src":"1863:26:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload"},"typeName":{"id":45116,"nodeType":"UserDefinedTypeName","pathNode":{"id":45115,"name":"ExitPayload","nameLocations":["1863:11:141"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"1863:11:141"},"referencedDeclaration":44983,"src":"1863:11:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_storage_ptr","typeString":"struct ExitPayloadReader.ExitPayload"}},"visibility":"internal"}],"src":"1862:28:141"},"returnParameters":{"id":45121,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45120,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45130,"src":"1914:7:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45119,"name":"uint256","nodeType":"ElementaryTypeName","src":"1914:7:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1913:9:141"},"scope":45470,"src":"1839:126:141","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45145,"nodeType":"Block","src":"2051:42:141","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":45138,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45133,"src":"2064:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":45139,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2072:4:141","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"2064:12:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45141,"indexExpression":{"hexValue":"33","id":45140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2077:1:141","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2064:15:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45142,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2080:6:141","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":46603,"src":"2064:22:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256)"}},"id":45143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2064:24:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45137,"id":45144,"nodeType":"Return","src":"2057:31:141"}]},"id":45146,"implemented":true,"kind":"function","modifiers":[],"name":"getBlockTime","nameLocation":"1978:12:141","nodeType":"FunctionDefinition","parameters":{"id":45134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45133,"mutability":"mutable","name":"payload","nameLocation":"2010:7:141","nodeType":"VariableDeclaration","scope":45146,"src":"1991:26:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload"},"typeName":{"id":45132,"nodeType":"UserDefinedTypeName","pathNode":{"id":45131,"name":"ExitPayload","nameLocations":["1991:11:141"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"1991:11:141"},"referencedDeclaration":44983,"src":"1991:11:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_storage_ptr","typeString":"struct ExitPayloadReader.ExitPayload"}},"visibility":"internal"}],"src":"1990:28:141"},"returnParameters":{"id":45137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45136,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45146,"src":"2042:7:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45135,"name":"uint256","nodeType":"ElementaryTypeName","src":"2042:7:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2041:9:141"},"scope":45470,"src":"1969:124:141","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45164,"nodeType":"Block","src":"2176:51:141","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":45156,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45149,"src":"2197:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":45157,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2205:4:141","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"2197:12:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45159,"indexExpression":{"hexValue":"34","id":45158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2210:1:141","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2197:15:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45160,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2213:6:141","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":46603,"src":"2197:22:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256)"}},"id":45161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2197:24:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":45155,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2189:7:141","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":45154,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2189:7:141","typeDescriptions":{}}},"id":45162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2189:33:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":45153,"id":45163,"nodeType":"Return","src":"2182:40:141"}]},"id":45165,"implemented":true,"kind":"function","modifiers":[],"name":"getTxRoot","nameLocation":"2106:9:141","nodeType":"FunctionDefinition","parameters":{"id":45150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45149,"mutability":"mutable","name":"payload","nameLocation":"2135:7:141","nodeType":"VariableDeclaration","scope":45165,"src":"2116:26:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload"},"typeName":{"id":45148,"nodeType":"UserDefinedTypeName","pathNode":{"id":45147,"name":"ExitPayload","nameLocations":["2116:11:141"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"2116:11:141"},"referencedDeclaration":44983,"src":"2116:11:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_storage_ptr","typeString":"struct ExitPayloadReader.ExitPayload"}},"visibility":"internal"}],"src":"2115:28:141"},"returnParameters":{"id":45153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45152,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45165,"src":"2167:7:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":45151,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2167:7:141","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2166:9:141"},"scope":45470,"src":"2097:130:141","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45183,"nodeType":"Block","src":"2315:51:141","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":45175,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45168,"src":"2336:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":45176,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2344:4:141","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"2336:12:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45178,"indexExpression":{"hexValue":"35","id":45177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2349:1:141","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2336:15:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45179,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2352:6:141","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":46603,"src":"2336:22:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256)"}},"id":45180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2336:24:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":45174,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2328:7:141","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":45173,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2328:7:141","typeDescriptions":{}}},"id":45181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2328:33:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":45172,"id":45182,"nodeType":"Return","src":"2321:40:141"}]},"id":45184,"implemented":true,"kind":"function","modifiers":[],"name":"getReceiptRoot","nameLocation":"2240:14:141","nodeType":"FunctionDefinition","parameters":{"id":45169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45168,"mutability":"mutable","name":"payload","nameLocation":"2274:7:141","nodeType":"VariableDeclaration","scope":45184,"src":"2255:26:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload"},"typeName":{"id":45167,"nodeType":"UserDefinedTypeName","pathNode":{"id":45166,"name":"ExitPayload","nameLocations":["2255:11:141"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"2255:11:141"},"referencedDeclaration":44983,"src":"2255:11:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_storage_ptr","typeString":"struct ExitPayloadReader.ExitPayload"}},"visibility":"internal"}],"src":"2254:28:141"},"returnParameters":{"id":45172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45171,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45184,"src":"2306:7:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":45170,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2306:7:141","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2305:9:141"},"scope":45470,"src":"2231:135:141","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45277,"nodeType":"Block","src":"2465:700:141","statements":[{"expression":{"id":45202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":45193,"name":"receipt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45191,"src":"2471:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_memory_ptr","typeString":"struct ExitPayloadReader.Receipt memory"}},"id":45195,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2479:3:141","memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":44989,"src":"2471:11:141","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":45196,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45187,"src":"2485:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":45197,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2493:4:141","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"2485:12:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45199,"indexExpression":{"hexValue":"36","id":45198,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2498:1:141","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2485:15:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45200,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2501:7:141","memberName":"toBytes","nodeType":"MemberAccess","referencedDeclaration":46684,"src":"2485:23:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes memory)"}},"id":45201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2485:25:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"2471:39:141","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45203,"nodeType":"ExpressionStatement","src":"2471:39:141"},{"assignments":[45208],"declarations":[{"constant":false,"id":45208,"mutability":"mutable","name":"receiptItem","nameLocation":"2541:11:141","nodeType":"VariableDeclaration","scope":45277,"src":"2516:36:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":45207,"nodeType":"UserDefinedTypeName","pathNode":{"id":45206,"name":"RLPReader.RLPItem","nameLocations":["2516:9:141","2526:7:141"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"2516:17:141"},"referencedDeclaration":46106,"src":"2516:17:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"id":45213,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":45209,"name":"receipt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45191,"src":"2555:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_memory_ptr","typeString":"struct ExitPayloadReader.Receipt memory"}},"id":45210,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2563:3:141","memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":44989,"src":"2555:11:141","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2567:9:141","memberName":"toRlpItem","nodeType":"MemberAccess","referencedDeclaration":46195,"src":"2555:21:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_RLPItem_$46106_memory_ptr_$bound_to$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (struct RLPReader.RLPItem memory)"}},"id":45212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2555:23:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"nodeType":"VariableDeclarationStatement","src":"2516:62:141"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":45214,"name":"receiptItem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45208,"src":"2589:11:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45215,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2601:6:141","memberName":"isList","nodeType":"MemberAccess","referencedDeclaration":46372,"src":"2589:18:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bool)"}},"id":45216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2589:20:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":45265,"nodeType":"Block","src":"2686:402:141","statements":[{"assignments":[45227],"declarations":[{"constant":false,"id":45227,"mutability":"mutable","name":"typedBytes","nameLocation":"2755:10:141","nodeType":"VariableDeclaration","scope":45265,"src":"2742:23:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45226,"name":"bytes","nodeType":"ElementaryTypeName","src":"2742:5:141","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":45230,"initialValue":{"expression":{"id":45228,"name":"receipt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45191,"src":"2768:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_memory_ptr","typeString":"struct ExitPayloadReader.Receipt memory"}},"id":45229,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2776:3:141","memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":44989,"src":"2768:11:141","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"2742:37:141"},{"assignments":[45232],"declarations":[{"constant":false,"id":45232,"mutability":"mutable","name":"result","nameLocation":"2800:6:141","nodeType":"VariableDeclaration","scope":45265,"src":"2787:19:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45231,"name":"bytes","nodeType":"ElementaryTypeName","src":"2787:5:141","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":45240,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":45235,"name":"typedBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45227,"src":"2819:10:141","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2830:6:141","memberName":"length","nodeType":"MemberAccess","src":"2819:17:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":45237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2839:1:141","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2819:21:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":45234,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2809:9:141","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":45233,"name":"bytes","nodeType":"ElementaryTypeName","src":"2813:5:141","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":45239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2809:32:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"2787:54:141"},{"assignments":[45242],"declarations":[{"constant":false,"id":45242,"mutability":"mutable","name":"srcPtr","nameLocation":"2857:6:141","nodeType":"VariableDeclaration","scope":45265,"src":"2849:14:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45241,"name":"uint256","nodeType":"ElementaryTypeName","src":"2849:7:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45243,"nodeType":"VariableDeclarationStatement","src":"2849:14:141"},{"assignments":[45245],"declarations":[{"constant":false,"id":45245,"mutability":"mutable","name":"destPtr","nameLocation":"2879:7:141","nodeType":"VariableDeclaration","scope":45265,"src":"2871:15:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45244,"name":"uint256","nodeType":"ElementaryTypeName","src":"2871:7:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45246,"nodeType":"VariableDeclarationStatement","src":"2871:15:141"},{"AST":{"nodeType":"YulBlock","src":"2903:84:141","statements":[{"nodeType":"YulAssignment","src":"2913:29:141","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2927:2:141","type":"","value":"33"},{"name":"typedBytes","nodeType":"YulIdentifier","src":"2931:10:141"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2923:3:141"},"nodeType":"YulFunctionCall","src":"2923:19:141"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2913:6:141"}]},{"nodeType":"YulAssignment","src":"2951:28:141","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2966:4:141","type":"","value":"0x20"},{"name":"result","nodeType":"YulIdentifier","src":"2972:6:141"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2962:3:141"},"nodeType":"YulFunctionCall","src":"2962:17:141"},"variableNames":[{"name":"destPtr","nodeType":"YulIdentifier","src":"2951:7:141"}]}]},"evmVersion":"london","externalReferences":[{"declaration":45245,"isOffset":false,"isSlot":false,"src":"2951:7:141","valueSize":1},{"declaration":45232,"isOffset":false,"isSlot":false,"src":"2972:6:141","valueSize":1},{"declaration":45242,"isOffset":false,"isSlot":false,"src":"2913:6:141","valueSize":1},{"declaration":45227,"isOffset":false,"isSlot":false,"src":"2931:10:141","valueSize":1}],"id":45247,"nodeType":"InlineAssembly","src":"2894:93:141"},{"expression":{"arguments":[{"id":45249,"name":"srcPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45242,"src":"3000:6:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":45250,"name":"destPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45245,"src":"3008:7:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":45251,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45232,"src":"3017:6:141","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3024:6:141","memberName":"length","nodeType":"MemberAccess","src":"3017:13:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":45248,"name":"copy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45057,"src":"2995:4:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":45253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2995:36:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":45254,"nodeType":"ExpressionStatement","src":"2995:36:141"},{"expression":{"id":45263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":45255,"name":"receipt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45191,"src":"3039:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_memory_ptr","typeString":"struct ExitPayloadReader.Receipt memory"}},"id":45257,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3047:4:141","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":44987,"src":"3039:12:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":45258,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45232,"src":"3054:6:141","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3061:9:141","memberName":"toRlpItem","nodeType":"MemberAccess","referencedDeclaration":46195,"src":"3054:16:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_RLPItem_$46106_memory_ptr_$bound_to$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (struct RLPReader.RLPItem memory)"}},"id":45260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3054:18:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45261,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3073:6:141","memberName":"toList","nodeType":"MemberAccess","referencedDeclaration":46339,"src":"3054:25:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (struct RLPReader.RLPItem memory[] memory)"}},"id":45262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3054:27:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"src":"3039:42:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45264,"nodeType":"ExpressionStatement","src":"3039:42:141"}]},"id":45266,"nodeType":"IfStatement","src":"2585:503:141","trueBody":{"id":45225,"nodeType":"Block","src":"2611:69:141","statements":[{"expression":{"id":45223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":45217,"name":"receipt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45191,"src":"2638:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_memory_ptr","typeString":"struct ExitPayloadReader.Receipt memory"}},"id":45219,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2646:4:141","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":44987,"src":"2638:12:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":45220,"name":"receiptItem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45208,"src":"2653:11:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45221,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2665:6:141","memberName":"toList","nodeType":"MemberAccess","referencedDeclaration":46339,"src":"2653:18:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (struct RLPReader.RLPItem memory[] memory)"}},"id":45222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2653:20:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"src":"2638:35:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45224,"nodeType":"ExpressionStatement","src":"2638:35:141"}]}},{"expression":{"id":45273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":45267,"name":"receipt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45191,"src":"3094:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_memory_ptr","typeString":"struct ExitPayloadReader.Receipt memory"}},"id":45269,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3102:8:141","memberName":"logIndex","nodeType":"MemberAccess","referencedDeclaration":44991,"src":"3094:16:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":45271,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45187,"src":"3132:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}],"id":45270,"name":"getReceiptLogIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45342,"src":"3113:18:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ExitPayload_$44983_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct ExitPayloadReader.ExitPayload memory) pure returns (uint256)"}},"id":45272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3113:27:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3094:46:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45274,"nodeType":"ExpressionStatement","src":"3094:46:141"},{"expression":{"id":45275,"name":"receipt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45191,"src":"3153:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_memory_ptr","typeString":"struct ExitPayloadReader.Receipt memory"}},"functionReturnParameters":45192,"id":45276,"nodeType":"Return","src":"3146:14:141"}]},"id":45278,"implemented":true,"kind":"function","modifiers":[],"name":"getReceipt","nameLocation":"2379:10:141","nodeType":"FunctionDefinition","parameters":{"id":45188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45187,"mutability":"mutable","name":"payload","nameLocation":"2409:7:141","nodeType":"VariableDeclaration","scope":45278,"src":"2390:26:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload"},"typeName":{"id":45186,"nodeType":"UserDefinedTypeName","pathNode":{"id":45185,"name":"ExitPayload","nameLocations":["2390:11:141"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"2390:11:141"},"referencedDeclaration":44983,"src":"2390:11:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_storage_ptr","typeString":"struct ExitPayloadReader.ExitPayload"}},"visibility":"internal"}],"src":"2389:28:141"},"returnParameters":{"id":45192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45191,"mutability":"mutable","name":"receipt","nameLocation":"2456:7:141","nodeType":"VariableDeclaration","scope":45278,"src":"2441:22:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_memory_ptr","typeString":"struct ExitPayloadReader.Receipt"},"typeName":{"id":45190,"nodeType":"UserDefinedTypeName","pathNode":{"id":45189,"name":"Receipt","nameLocations":["2441:7:141"],"nodeType":"IdentifierPath","referencedDeclaration":44992,"src":"2441:7:141"},"referencedDeclaration":44992,"src":"2441:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_storage_ptr","typeString":"struct ExitPayloadReader.Receipt"}},"visibility":"internal"}],"src":"2440:24:141"},"scope":45470,"src":"2370:795:141","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45293,"nodeType":"Block","src":"3259:43:141","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":45286,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45281,"src":"3272:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":45287,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3280:4:141","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"3272:12:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45289,"indexExpression":{"hexValue":"37","id":45288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3285:1:141","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3272:15:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45290,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3288:7:141","memberName":"toBytes","nodeType":"MemberAccess","referencedDeclaration":46684,"src":"3272:23:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes memory)"}},"id":45291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3272:25:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":45285,"id":45292,"nodeType":"Return","src":"3265:32:141"}]},"id":45294,"implemented":true,"kind":"function","modifiers":[],"name":"getReceiptProof","nameLocation":"3178:15:141","nodeType":"FunctionDefinition","parameters":{"id":45282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45281,"mutability":"mutable","name":"payload","nameLocation":"3213:7:141","nodeType":"VariableDeclaration","scope":45294,"src":"3194:26:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload"},"typeName":{"id":45280,"nodeType":"UserDefinedTypeName","pathNode":{"id":45279,"name":"ExitPayload","nameLocations":["3194:11:141"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"3194:11:141"},"referencedDeclaration":44983,"src":"3194:11:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_storage_ptr","typeString":"struct ExitPayloadReader.ExitPayload"}},"visibility":"internal"}],"src":"3193:28:141"},"returnParameters":{"id":45285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45284,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45294,"src":"3245:12:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45283,"name":"bytes","nodeType":"ElementaryTypeName","src":"3245:5:141","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3244:14:141"},"scope":45470,"src":"3169:133:141","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45309,"nodeType":"Block","src":"3401:43:141","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":45302,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45297,"src":"3414:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":45303,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3422:4:141","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"3414:12:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45305,"indexExpression":{"hexValue":"38","id":45304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3427:1:141","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3414:15:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45306,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3430:7:141","memberName":"toBytes","nodeType":"MemberAccess","referencedDeclaration":46684,"src":"3414:23:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes memory)"}},"id":45307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3414:25:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":45301,"id":45308,"nodeType":"Return","src":"3407:32:141"}]},"id":45310,"implemented":true,"kind":"function","modifiers":[],"name":"getBranchMaskAsBytes","nameLocation":"3315:20:141","nodeType":"FunctionDefinition","parameters":{"id":45298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45297,"mutability":"mutable","name":"payload","nameLocation":"3355:7:141","nodeType":"VariableDeclaration","scope":45310,"src":"3336:26:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload"},"typeName":{"id":45296,"nodeType":"UserDefinedTypeName","pathNode":{"id":45295,"name":"ExitPayload","nameLocations":["3336:11:141"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"3336:11:141"},"referencedDeclaration":44983,"src":"3336:11:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_storage_ptr","typeString":"struct ExitPayloadReader.ExitPayload"}},"visibility":"internal"}],"src":"3335:28:141"},"returnParameters":{"id":45301,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45300,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45310,"src":"3387:12:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45299,"name":"bytes","nodeType":"ElementaryTypeName","src":"3387:5:141","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3386:14:141"},"scope":45470,"src":"3306:138:141","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45325,"nodeType":"Block","src":"3537:42:141","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":45318,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45313,"src":"3550:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":45319,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3558:4:141","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"3550:12:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45321,"indexExpression":{"hexValue":"38","id":45320,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3563:1:141","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3550:15:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45322,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3566:6:141","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":46603,"src":"3550:22:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256)"}},"id":45323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3550:24:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45317,"id":45324,"nodeType":"Return","src":"3543:31:141"}]},"id":45326,"implemented":true,"kind":"function","modifiers":[],"name":"getBranchMaskAsUint","nameLocation":"3457:19:141","nodeType":"FunctionDefinition","parameters":{"id":45314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45313,"mutability":"mutable","name":"payload","nameLocation":"3496:7:141","nodeType":"VariableDeclaration","scope":45326,"src":"3477:26:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload"},"typeName":{"id":45312,"nodeType":"UserDefinedTypeName","pathNode":{"id":45311,"name":"ExitPayload","nameLocations":["3477:11:141"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"3477:11:141"},"referencedDeclaration":44983,"src":"3477:11:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_storage_ptr","typeString":"struct ExitPayloadReader.ExitPayload"}},"visibility":"internal"}],"src":"3476:28:141"},"returnParameters":{"id":45317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45316,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45326,"src":"3528:7:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45315,"name":"uint256","nodeType":"ElementaryTypeName","src":"3528:7:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3527:9:141"},"scope":45470,"src":"3448:131:141","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45341,"nodeType":"Block","src":"3671:42:141","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":45334,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45329,"src":"3684:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":45335,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3692:4:141","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"3684:12:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45337,"indexExpression":{"hexValue":"39","id":45336,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3697:1:141","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3684:15:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45338,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3700:6:141","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":46603,"src":"3684:22:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256)"}},"id":45339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3684:24:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45333,"id":45340,"nodeType":"Return","src":"3677:31:141"}]},"id":45342,"implemented":true,"kind":"function","modifiers":[],"name":"getReceiptLogIndex","nameLocation":"3592:18:141","nodeType":"FunctionDefinition","parameters":{"id":45330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45329,"mutability":"mutable","name":"payload","nameLocation":"3630:7:141","nodeType":"VariableDeclaration","scope":45342,"src":"3611:26:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload"},"typeName":{"id":45328,"nodeType":"UserDefinedTypeName","pathNode":{"id":45327,"name":"ExitPayload","nameLocations":["3611:11:141"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"3611:11:141"},"referencedDeclaration":44983,"src":"3611:11:141","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_storage_ptr","typeString":"struct ExitPayloadReader.ExitPayload"}},"visibility":"internal"}],"src":"3610:28:141"},"returnParameters":{"id":45333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45332,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45342,"src":"3662:7:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45331,"name":"uint256","nodeType":"ElementaryTypeName","src":"3662:7:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3661:9:141"},"scope":45470,"src":"3583:130:141","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45353,"nodeType":"Block","src":"3816:29:141","statements":[{"expression":{"expression":{"id":45350,"name":"receipt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45345,"src":"3829:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_memory_ptr","typeString":"struct ExitPayloadReader.Receipt memory"}},"id":45351,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3837:3:141","memberName":"raw","nodeType":"MemberAccess","referencedDeclaration":44989,"src":"3829:11:141","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":45349,"id":45352,"nodeType":"Return","src":"3822:18:141"}]},"id":45354,"implemented":true,"kind":"function","modifiers":[],"name":"toBytes","nameLocation":"3747:7:141","nodeType":"FunctionDefinition","parameters":{"id":45346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45345,"mutability":"mutable","name":"receipt","nameLocation":"3770:7:141","nodeType":"VariableDeclaration","scope":45354,"src":"3755:22:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_memory_ptr","typeString":"struct ExitPayloadReader.Receipt"},"typeName":{"id":45344,"nodeType":"UserDefinedTypeName","pathNode":{"id":45343,"name":"Receipt","nameLocations":["3755:7:141"],"nodeType":"IdentifierPath","referencedDeclaration":44992,"src":"3755:7:141"},"referencedDeclaration":44992,"src":"3755:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_storage_ptr","typeString":"struct ExitPayloadReader.Receipt"}},"visibility":"internal"}],"src":"3754:24:141"},"returnParameters":{"id":45349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45348,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45354,"src":"3802:12:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45347,"name":"bytes","nodeType":"ElementaryTypeName","src":"3802:5:141","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3801:14:141"},"scope":45470,"src":"3738:107:141","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45385,"nodeType":"Block","src":"3924:131:141","statements":[{"assignments":[45367],"declarations":[{"constant":false,"id":45367,"mutability":"mutable","name":"logData","nameLocation":"3955:7:141","nodeType":"VariableDeclaration","scope":45385,"src":"3930:32:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":45366,"nodeType":"UserDefinedTypeName","pathNode":{"id":45365,"name":"RLPReader.RLPItem","nameLocations":["3930:9:141","3940:7:141"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"3930:17:141"},"referencedDeclaration":46106,"src":"3930:17:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"id":45377,"initialValue":{"baseExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":45368,"name":"receipt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45357,"src":"3965:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_memory_ptr","typeString":"struct ExitPayloadReader.Receipt memory"}},"id":45369,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3973:4:141","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":44987,"src":"3965:12:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45371,"indexExpression":{"hexValue":"33","id":45370,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3978:1:141","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3965:15:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45372,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3981:6:141","memberName":"toList","nodeType":"MemberAccess","referencedDeclaration":46339,"src":"3965:22:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (struct RLPReader.RLPItem memory[] memory)"}},"id":45373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3965:24:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45376,"indexExpression":{"expression":{"id":45374,"name":"receipt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45357,"src":"3990:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_memory_ptr","typeString":"struct ExitPayloadReader.Receipt memory"}},"id":45375,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3998:8:141","memberName":"logIndex","nodeType":"MemberAccess","referencedDeclaration":44991,"src":"3990:16:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3965:42:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"nodeType":"VariableDeclarationStatement","src":"3930:77:141"},{"expression":{"arguments":[{"id":45379,"name":"logData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45367,"src":"4024:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":45380,"name":"logData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45367,"src":"4033:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45381,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4041:6:141","memberName":"toList","nodeType":"MemberAccess","referencedDeclaration":46339,"src":"4033:14:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (struct RLPReader.RLPItem memory[] memory)"}},"id":45382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4033:16:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"},{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}],"id":45378,"name":"Log","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45000,"src":"4020:3:141","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Log_$45000_storage_ptr_$","typeString":"type(struct ExitPayloadReader.Log storage pointer)"}},"id":45383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4020:30:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_memory_ptr","typeString":"struct ExitPayloadReader.Log memory"}},"functionReturnParameters":45362,"id":45384,"nodeType":"Return","src":"4013:37:141"}]},"id":45386,"implemented":true,"kind":"function","modifiers":[],"name":"getLog","nameLocation":"3858:6:141","nodeType":"FunctionDefinition","parameters":{"id":45358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45357,"mutability":"mutable","name":"receipt","nameLocation":"3880:7:141","nodeType":"VariableDeclaration","scope":45386,"src":"3865:22:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_memory_ptr","typeString":"struct ExitPayloadReader.Receipt"},"typeName":{"id":45356,"nodeType":"UserDefinedTypeName","pathNode":{"id":45355,"name":"Receipt","nameLocations":["3865:7:141"],"nodeType":"IdentifierPath","referencedDeclaration":44992,"src":"3865:7:141"},"referencedDeclaration":44992,"src":"3865:7:141","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_storage_ptr","typeString":"struct ExitPayloadReader.Receipt"}},"visibility":"internal"}],"src":"3864:24:141"},"returnParameters":{"id":45362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45361,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45386,"src":"3912:10:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_memory_ptr","typeString":"struct ExitPayloadReader.Log"},"typeName":{"id":45360,"nodeType":"UserDefinedTypeName","pathNode":{"id":45359,"name":"Log","nameLocations":["3912:3:141"],"nodeType":"IdentifierPath","referencedDeclaration":45000,"src":"3912:3:141"},"referencedDeclaration":45000,"src":"3912:3:141","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_storage_ptr","typeString":"struct ExitPayloadReader.Log"}},"visibility":"internal"}],"src":"3911:12:141"},"scope":45470,"src":"3849:206:141","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45402,"nodeType":"Block","src":"4144:50:141","statements":[{"expression":{"arguments":[{"baseExpression":{"expression":{"id":45396,"name":"log","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45389,"src":"4177:3:141","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_memory_ptr","typeString":"struct ExitPayloadReader.Log memory"}},"id":45397,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4181:4:141","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":44999,"src":"4177:8:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45399,"indexExpression":{"hexValue":"30","id":45398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4186:1:141","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4177:11:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"expression":{"id":45394,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46908,"src":"4157:9:141","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$46908_$","typeString":"type(library RLPReader)"}},"id":45395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4167:9:141","memberName":"toAddress","nodeType":"MemberAccess","referencedDeclaration":46553,"src":"4157:19:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_address_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (address)"}},"id":45400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4157:32:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":45393,"id":45401,"nodeType":"Return","src":"4150:39:141"}]},"id":45403,"implemented":true,"kind":"function","modifiers":[],"name":"getEmitter","nameLocation":"4085:10:141","nodeType":"FunctionDefinition","parameters":{"id":45390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45389,"mutability":"mutable","name":"log","nameLocation":"4107:3:141","nodeType":"VariableDeclaration","scope":45403,"src":"4096:14:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_memory_ptr","typeString":"struct ExitPayloadReader.Log"},"typeName":{"id":45388,"nodeType":"UserDefinedTypeName","pathNode":{"id":45387,"name":"Log","nameLocations":["4096:3:141"],"nodeType":"IdentifierPath","referencedDeclaration":45000,"src":"4096:3:141"},"referencedDeclaration":45000,"src":"4096:3:141","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_storage_ptr","typeString":"struct ExitPayloadReader.Log"}},"visibility":"internal"}],"src":"4095:16:141"},"returnParameters":{"id":45393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45392,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45403,"src":"4135:7:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":45391,"name":"address","nodeType":"ElementaryTypeName","src":"4135:7:141","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4134:9:141"},"scope":45470,"src":"4076:118:141","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45421,"nodeType":"Block","src":"4274:49:141","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":45413,"name":"log","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45406,"src":"4297:3:141","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_memory_ptr","typeString":"struct ExitPayloadReader.Log memory"}},"id":45414,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4301:4:141","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":44999,"src":"4297:8:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45416,"indexExpression":{"hexValue":"31","id":45415,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4306:1:141","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4297:11:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45417,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4309:6:141","memberName":"toList","nodeType":"MemberAccess","referencedDeclaration":46339,"src":"4297:18:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (struct RLPReader.RLPItem memory[] memory)"}},"id":45418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4297:20:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}],"id":45412,"name":"LogTopics","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45005,"src":"4287:9:141","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_LogTopics_$45005_storage_ptr_$","typeString":"type(struct ExitPayloadReader.LogTopics storage pointer)"}},"id":45419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4287:31:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LogTopics_$45005_memory_ptr","typeString":"struct ExitPayloadReader.LogTopics memory"}},"functionReturnParameters":45411,"id":45420,"nodeType":"Return","src":"4280:38:141"}]},"id":45422,"implemented":true,"kind":"function","modifiers":[],"name":"getTopics","nameLocation":"4207:9:141","nodeType":"FunctionDefinition","parameters":{"id":45407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45406,"mutability":"mutable","name":"log","nameLocation":"4228:3:141","nodeType":"VariableDeclaration","scope":45422,"src":"4217:14:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_memory_ptr","typeString":"struct ExitPayloadReader.Log"},"typeName":{"id":45405,"nodeType":"UserDefinedTypeName","pathNode":{"id":45404,"name":"Log","nameLocations":["4217:3:141"],"nodeType":"IdentifierPath","referencedDeclaration":45000,"src":"4217:3:141"},"referencedDeclaration":45000,"src":"4217:3:141","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_storage_ptr","typeString":"struct ExitPayloadReader.Log"}},"visibility":"internal"}],"src":"4216:16:141"},"returnParameters":{"id":45411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45410,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45422,"src":"4256:16:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LogTopics_$45005_memory_ptr","typeString":"struct ExitPayloadReader.LogTopics"},"typeName":{"id":45409,"nodeType":"UserDefinedTypeName","pathNode":{"id":45408,"name":"LogTopics","nameLocations":["4256:9:141"],"nodeType":"IdentifierPath","referencedDeclaration":45005,"src":"4256:9:141"},"referencedDeclaration":45005,"src":"4256:9:141","typeDescriptions":{"typeIdentifier":"t_struct$_LogTopics_$45005_storage_ptr","typeString":"struct ExitPayloadReader.LogTopics"}},"visibility":"internal"}],"src":"4255:18:141"},"scope":45470,"src":"4198:125:141","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45437,"nodeType":"Block","src":"4397:39:141","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":45430,"name":"log","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45425,"src":"4410:3:141","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_memory_ptr","typeString":"struct ExitPayloadReader.Log memory"}},"id":45431,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4414:4:141","memberName":"list","nodeType":"MemberAccess","referencedDeclaration":44999,"src":"4410:8:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45433,"indexExpression":{"hexValue":"32","id":45432,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4419:1:141","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4410:11:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45434,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4422:7:141","memberName":"toBytes","nodeType":"MemberAccess","referencedDeclaration":46684,"src":"4410:19:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes memory)"}},"id":45435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4410:21:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":45429,"id":45436,"nodeType":"Return","src":"4403:28:141"}]},"id":45438,"implemented":true,"kind":"function","modifiers":[],"name":"getData","nameLocation":"4336:7:141","nodeType":"FunctionDefinition","parameters":{"id":45426,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45425,"mutability":"mutable","name":"log","nameLocation":"4355:3:141","nodeType":"VariableDeclaration","scope":45438,"src":"4344:14:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_memory_ptr","typeString":"struct ExitPayloadReader.Log"},"typeName":{"id":45424,"nodeType":"UserDefinedTypeName","pathNode":{"id":45423,"name":"Log","nameLocations":["4344:3:141"],"nodeType":"IdentifierPath","referencedDeclaration":45000,"src":"4344:3:141"},"referencedDeclaration":45000,"src":"4344:3:141","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_storage_ptr","typeString":"struct ExitPayloadReader.Log"}},"visibility":"internal"}],"src":"4343:16:141"},"returnParameters":{"id":45429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45428,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45438,"src":"4383:12:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45427,"name":"bytes","nodeType":"ElementaryTypeName","src":"4383:5:141","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4382:14:141"},"scope":45470,"src":"4327:109:141","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45451,"nodeType":"Block","src":"4513:39:141","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":45446,"name":"log","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45441,"src":"4526:3:141","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_memory_ptr","typeString":"struct ExitPayloadReader.Log memory"}},"id":45447,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4530:4:141","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":44995,"src":"4526:8:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":45448,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4535:10:141","memberName":"toRlpBytes","nodeType":"MemberAccess","referencedDeclaration":46495,"src":"4526:19:141","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes memory)"}},"id":45449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4526:21:141","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":45445,"id":45450,"nodeType":"Return","src":"4519:28:141"}]},"id":45452,"implemented":true,"kind":"function","modifiers":[],"name":"toRlpBytes","nameLocation":"4449:10:141","nodeType":"FunctionDefinition","parameters":{"id":45442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45441,"mutability":"mutable","name":"log","nameLocation":"4471:3:141","nodeType":"VariableDeclaration","scope":45452,"src":"4460:14:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_memory_ptr","typeString":"struct ExitPayloadReader.Log"},"typeName":{"id":45440,"nodeType":"UserDefinedTypeName","pathNode":{"id":45439,"name":"Log","nameLocations":["4460:3:141"],"nodeType":"IdentifierPath","referencedDeclaration":45000,"src":"4460:3:141"},"referencedDeclaration":45000,"src":"4460:3:141","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_storage_ptr","typeString":"struct ExitPayloadReader.Log"}},"visibility":"internal"}],"src":"4459:16:141"},"returnParameters":{"id":45445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45444,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45452,"src":"4499:12:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45443,"name":"bytes","nodeType":"ElementaryTypeName","src":"4499:5:141","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4498:14:141"},"scope":45470,"src":"4440:112:141","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45468,"nodeType":"Block","src":"4686:36:141","statements":[{"expression":{"baseExpression":{"expression":{"id":45463,"name":"topics","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45455,"src":"4699:6:141","typeDescriptions":{"typeIdentifier":"t_struct$_LogTopics_$45005_memory_ptr","typeString":"struct ExitPayloadReader.LogTopics memory"}},"id":45464,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4706:4:141","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":45004,"src":"4699:11:141","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45466,"indexExpression":{"id":45465,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45457,"src":"4711:5:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4699:18:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"functionReturnParameters":45462,"id":45467,"nodeType":"Return","src":"4692:25:141"}]},"id":45469,"implemented":true,"kind":"function","modifiers":[],"name":"getField","nameLocation":"4588:8:141","nodeType":"FunctionDefinition","parameters":{"id":45458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45455,"mutability":"mutable","name":"topics","nameLocation":"4614:6:141","nodeType":"VariableDeclaration","scope":45469,"src":"4597:23:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LogTopics_$45005_memory_ptr","typeString":"struct ExitPayloadReader.LogTopics"},"typeName":{"id":45454,"nodeType":"UserDefinedTypeName","pathNode":{"id":45453,"name":"LogTopics","nameLocations":["4597:9:141"],"nodeType":"IdentifierPath","referencedDeclaration":45005,"src":"4597:9:141"},"referencedDeclaration":45005,"src":"4597:9:141","typeDescriptions":{"typeIdentifier":"t_struct$_LogTopics_$45005_storage_ptr","typeString":"struct ExitPayloadReader.LogTopics"}},"visibility":"internal"},{"constant":false,"id":45457,"mutability":"mutable","name":"index","nameLocation":"4630:5:141","nodeType":"VariableDeclaration","scope":45469,"src":"4622:13:141","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45456,"name":"uint256","nodeType":"ElementaryTypeName","src":"4622:7:141","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4596:40:141"},"returnParameters":{"id":45462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45461,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45469,"src":"4660:24:141","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":45460,"nodeType":"UserDefinedTypeName","pathNode":{"id":45459,"name":"RLPReader.RLPItem","nameLocations":["4660:9:141","4670:7:141"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"4660:17:141"},"referencedDeclaration":46106,"src":"4660:17:141","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"4659:26:141"},"scope":45470,"src":"4579:143:141","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":45471,"src":"189:4535:141","usedErrors":[]}],"src":"120:4605:141"},"id":141},"contracts/messaging/connectors/polygon/lib/Merkle.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/polygon/lib/Merkle.sol","exportedSymbols":{"Merkle":[45580]},"id":45581,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":45472,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"109:23:142"},{"abstract":false,"baseContracts":[],"canonicalName":"Merkle","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":45580,"linearizedBaseContracts":[45580],"name":"Merkle","nameLocation":"142:6:142","nodeType":"ContractDefinition","nodes":[{"body":{"id":45578,"nodeType":"Block","src":"294:820:142","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":45486,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45480,"src":"308:5:142","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"314:6:142","memberName":"length","nodeType":"MemberAccess","src":"308:12:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"3332","id":45488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"323:2:142","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"308:17:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":45490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"329:1:142","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"308:22:142","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c69642070726f6f66206c656e677468","id":45492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"332:22:142","typeDescriptions":{"typeIdentifier":"t_stringliteral_a384685b2d9864ca58af3cdeb11675a5eb31234b321579291672bb93c38d256c","typeString":"literal_string \"Invalid proof length\""},"value":"Invalid proof length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a384685b2d9864ca58af3cdeb11675a5eb31234b321579291672bb93c38d256c","typeString":"literal_string \"Invalid proof length\""}],"id":45485,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"300:7:142","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":45493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"300:55:142","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":45494,"nodeType":"ExpressionStatement","src":"300:55:142"},{"assignments":[45496],"declarations":[{"constant":false,"id":45496,"mutability":"mutable","name":"proofHeight","nameLocation":"369:11:142","nodeType":"VariableDeclaration","scope":45578,"src":"361:19:142","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45495,"name":"uint256","nodeType":"ElementaryTypeName","src":"361:7:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45501,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":45497,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45480,"src":"383:5:142","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"389:6:142","memberName":"length","nodeType":"MemberAccess","src":"383:12:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3332","id":45499,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"398:2:142","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"383:17:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"361:39:142"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45503,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45476,"src":"532:5:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":45504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"540:1:142","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":45505,"name":"proofHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45496,"src":"543:11:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"540:14:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"532:22:142","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4c65616620696e64657820697320746f6f20626967","id":45508,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"556:23:142","typeDescriptions":{"typeIdentifier":"t_stringliteral_a93d72abfb9ed65892e9dea7aa76fdb1003bad3c2be9fdc6e43aa17d2648b99c","typeString":"literal_string \"Leaf index is too big\""},"value":"Leaf index is too big"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a93d72abfb9ed65892e9dea7aa76fdb1003bad3c2be9fdc6e43aa17d2648b99c","typeString":"literal_string \"Leaf index is too big\""}],"id":45502,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"524:7:142","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":45509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"524:56:142","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":45510,"nodeType":"ExpressionStatement","src":"524:56:142"},{"assignments":[45512],"declarations":[{"constant":false,"id":45512,"mutability":"mutable","name":"proofElement","nameLocation":"595:12:142","nodeType":"VariableDeclaration","scope":45578,"src":"587:20:142","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":45511,"name":"bytes32","nodeType":"ElementaryTypeName","src":"587:7:142","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":45513,"nodeType":"VariableDeclarationStatement","src":"587:20:142"},{"assignments":[45515],"declarations":[{"constant":false,"id":45515,"mutability":"mutable","name":"computedHash","nameLocation":"621:12:142","nodeType":"VariableDeclaration","scope":45578,"src":"613:20:142","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":45514,"name":"bytes32","nodeType":"ElementaryTypeName","src":"613:7:142","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":45517,"initialValue":{"id":45516,"name":"leaf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45474,"src":"636:4:142","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"613:27:142"},{"assignments":[45519],"declarations":[{"constant":false,"id":45519,"mutability":"mutable","name":"len","nameLocation":"654:3:142","nodeType":"VariableDeclaration","scope":45578,"src":"646:11:142","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45518,"name":"uint256","nodeType":"ElementaryTypeName","src":"646:7:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45524,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":45520,"name":"proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45480,"src":"660:5:142","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"666:6:142","memberName":"length","nodeType":"MemberAccess","src":"660:12:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":45522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"675:1:142","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"660:16:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"646:30:142"},{"body":{"id":45572,"nodeType":"Block","src":"714:359:142","statements":[{"AST":{"nodeType":"YulBlock","src":"731:54:142","statements":[{"nodeType":"YulAssignment","src":"741:36:142","value":{"arguments":[{"arguments":[{"name":"proof","nodeType":"YulIdentifier","src":"767:5:142"},{"name":"i","nodeType":"YulIdentifier","src":"774:1:142"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"763:3:142"},"nodeType":"YulFunctionCall","src":"763:13:142"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"757:5:142"},"nodeType":"YulFunctionCall","src":"757:20:142"},"variableNames":[{"name":"proofElement","nodeType":"YulIdentifier","src":"741:12:142"}]}]},"evmVersion":"london","externalReferences":[{"declaration":45526,"isOffset":false,"isSlot":false,"src":"774:1:142","valueSize":1},{"declaration":45480,"isOffset":false,"isSlot":false,"src":"767:5:142","valueSize":1},{"declaration":45512,"isOffset":false,"isSlot":false,"src":"741:12:142","valueSize":1}],"id":45532,"nodeType":"InlineAssembly","src":"722:63:142"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45533,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45476,"src":"797:5:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"32","id":45534,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"805:1:142","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"797:9:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":45536,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"810:1:142","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"797:14:142","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":45559,"nodeType":"Block","src":"908:89:142","statements":[{"expression":{"id":45557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45549,"name":"computedHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45515,"src":"918:12:142","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":45553,"name":"proofElement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45512,"src":"960:12:142","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":45554,"name":"computedHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45515,"src":"974:12:142","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":45551,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"943:3:142","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":45552,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"947:12:142","memberName":"encodePacked","nodeType":"MemberAccess","src":"943:16:142","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":45555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"943:44:142","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":45550,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"933:9:142","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":45556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"933:55:142","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"918:70:142","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":45558,"nodeType":"ExpressionStatement","src":"918:70:142"}]},"id":45560,"nodeType":"IfStatement","src":"793:204:142","trueBody":{"id":45548,"nodeType":"Block","src":"813:89:142","statements":[{"expression":{"id":45546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45538,"name":"computedHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45515,"src":"823:12:142","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":45542,"name":"computedHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45515,"src":"865:12:142","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":45543,"name":"proofElement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45512,"src":"879:12:142","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":45540,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"848:3:142","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":45541,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"852:12:142","memberName":"encodePacked","nodeType":"MemberAccess","src":"848:16:142","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":45544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"848:44:142","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":45539,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"838:9:142","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":45545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"838:55:142","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"823:70:142","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":45547,"nodeType":"ExpressionStatement","src":"823:70:142"}]}},{"expression":{"id":45565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45561,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45476,"src":"1005:5:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45562,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45476,"src":"1013:5:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":45563,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1021:1:142","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"1013:9:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1005:17:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45566,"nodeType":"ExpressionStatement","src":"1005:17:142"},{"id":45571,"nodeType":"UncheckedBlock","src":"1031:36:142","statements":[{"expression":{"id":45569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45567,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45526,"src":"1051:1:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":45568,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1056:2:142","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"1051:7:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45570,"nodeType":"ExpressionStatement","src":"1051:7:142"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45529,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45526,"src":"703:1:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":45530,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45519,"src":"707:3:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"703:7:142","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45573,"initializationExpression":{"assignments":[45526],"declarations":[{"constant":false,"id":45526,"mutability":"mutable","name":"i","nameLocation":"695:1:142","nodeType":"VariableDeclaration","scope":45573,"src":"687:9:142","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45525,"name":"uint256","nodeType":"ElementaryTypeName","src":"687:7:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45528,"initialValue":{"hexValue":"3332","id":45527,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"699:2:142","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"nodeType":"VariableDeclarationStatement","src":"687:14:142"},"nodeType":"ForStatement","src":"682:391:142"},{"expression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":45576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45574,"name":"computedHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45515,"src":"1085:12:142","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":45575,"name":"rootHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45478,"src":"1101:8:142","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1085:24:142","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":45484,"id":45577,"nodeType":"Return","src":"1078:31:142"}]},"id":45579,"implemented":true,"kind":"function","modifiers":[],"name":"checkMembership","nameLocation":"162:15:142","nodeType":"FunctionDefinition","parameters":{"id":45481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45474,"mutability":"mutable","name":"leaf","nameLocation":"191:4:142","nodeType":"VariableDeclaration","scope":45579,"src":"183:12:142","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":45473,"name":"bytes32","nodeType":"ElementaryTypeName","src":"183:7:142","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":45476,"mutability":"mutable","name":"index","nameLocation":"209:5:142","nodeType":"VariableDeclaration","scope":45579,"src":"201:13:142","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45475,"name":"uint256","nodeType":"ElementaryTypeName","src":"201:7:142","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":45478,"mutability":"mutable","name":"rootHash","nameLocation":"228:8:142","nodeType":"VariableDeclaration","scope":45579,"src":"220:16:142","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":45477,"name":"bytes32","nodeType":"ElementaryTypeName","src":"220:7:142","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":45480,"mutability":"mutable","name":"proof","nameLocation":"255:5:142","nodeType":"VariableDeclaration","scope":45579,"src":"242:18:142","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45479,"name":"bytes","nodeType":"ElementaryTypeName","src":"242:5:142","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"177:87:142"},"returnParameters":{"id":45484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45483,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45579,"src":"288:4:142","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":45482,"name":"bool","nodeType":"ElementaryTypeName","src":"288:4:142","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"287:6:142"},"scope":45580,"src":"153:961:142","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":45581,"src":"134:982:142","usedErrors":[]}],"src":"109:1008:142"},"id":142},"contracts/messaging/connectors/polygon/lib/MerklePatriciaProof.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/polygon/lib/MerklePatriciaProof.sol","exportedSymbols":{"MerklePatriciaProof":[46084],"RLPReader":[46908]},"id":46085,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":45582,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"122:23:143"},{"absolutePath":"contracts/messaging/connectors/polygon/lib/RLPReader.sol","file":"./RLPReader.sol","id":45584,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":46085,"sourceUnit":46909,"src":"147:42:143","symbolAliases":[{"foreign":{"id":45583,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46908,"src":"155:9:143","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"MerklePatriciaProof","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":46084,"linearizedBaseContracts":[46084],"name":"MerklePatriciaProof","nameLocation":"199:19:143","nodeType":"ContractDefinition","nodes":[{"body":{"id":45838,"nodeType":"Block","src":"699:1896:143","statements":[{"assignments":[45601],"declarations":[{"constant":false,"id":45601,"mutability":"mutable","name":"item","nameLocation":"730:4:143","nodeType":"VariableDeclaration","scope":45838,"src":"705:29:143","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":45600,"nodeType":"UserDefinedTypeName","pathNode":{"id":45599,"name":"RLPReader.RLPItem","nameLocations":["705:9:143","715:7:143"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"705:17:143"},"referencedDeclaration":46106,"src":"705:17:143","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"id":45606,"initialValue":{"arguments":[{"id":45604,"name":"rlpParentNodes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45590,"src":"757:14:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":45602,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46908,"src":"737:9:143","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$46908_$","typeString":"type(library RLPReader)"}},"id":45603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"747:9:143","memberName":"toRlpItem","nodeType":"MemberAccess","referencedDeclaration":46195,"src":"737:19:143","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (bytes memory) pure returns (struct RLPReader.RLPItem memory)"}},"id":45605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"737:35:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"nodeType":"VariableDeclarationStatement","src":"705:67:143"},{"assignments":[45612],"declarations":[{"constant":false,"id":45612,"mutability":"mutable","name":"parentNodes","nameLocation":"805:11:143","nodeType":"VariableDeclaration","scope":45838,"src":"778:38:143","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem[]"},"typeName":{"baseType":{"id":45610,"nodeType":"UserDefinedTypeName","pathNode":{"id":45609,"name":"RLPReader.RLPItem","nameLocations":["778:9:143","788:7:143"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"778:17:143"},"referencedDeclaration":46106,"src":"778:17:143","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"id":45611,"nodeType":"ArrayTypeName","src":"778:19:143","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"}},"visibility":"internal"}],"id":45617,"initialValue":{"arguments":[{"id":45615,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45601,"src":"836:4:143","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"expression":{"id":45613,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46908,"src":"819:9:143","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$46908_$","typeString":"type(library RLPReader)"}},"id":45614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"829:6:143","memberName":"toList","nodeType":"MemberAccess","referencedDeclaration":46339,"src":"819:16:143","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (struct RLPReader.RLPItem memory[] memory)"}},"id":45616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"819:22:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"778:63:143"},{"assignments":[45619],"declarations":[{"constant":false,"id":45619,"mutability":"mutable","name":"currentNode","nameLocation":"861:11:143","nodeType":"VariableDeclaration","scope":45838,"src":"848:24:143","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45618,"name":"bytes","nodeType":"ElementaryTypeName","src":"848:5:143","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":45620,"nodeType":"VariableDeclarationStatement","src":"848:24:143"},{"assignments":[45626],"declarations":[{"constant":false,"id":45626,"mutability":"mutable","name":"currentNodeList","nameLocation":"905:15:143","nodeType":"VariableDeclaration","scope":45838,"src":"878:42:143","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem[]"},"typeName":{"baseType":{"id":45624,"nodeType":"UserDefinedTypeName","pathNode":{"id":45623,"name":"RLPReader.RLPItem","nameLocations":["878:9:143","888:7:143"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"878:17:143"},"referencedDeclaration":46106,"src":"878:17:143","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"id":45625,"nodeType":"ArrayTypeName","src":"878:19:143","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"}},"visibility":"internal"}],"id":45627,"nodeType":"VariableDeclarationStatement","src":"878:42:143"},{"assignments":[45629],"declarations":[{"constant":false,"id":45629,"mutability":"mutable","name":"nodeKey","nameLocation":"935:7:143","nodeType":"VariableDeclaration","scope":45838,"src":"927:15:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":45628,"name":"bytes32","nodeType":"ElementaryTypeName","src":"927:7:143","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":45631,"initialValue":{"id":45630,"name":"root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45592,"src":"945:4:143","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"927:22:143"},{"assignments":[45633],"declarations":[{"constant":false,"id":45633,"mutability":"mutable","name":"pathPtr","nameLocation":"963:7:143","nodeType":"VariableDeclaration","scope":45838,"src":"955:15:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45632,"name":"uint256","nodeType":"ElementaryTypeName","src":"955:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45635,"initialValue":{"hexValue":"30","id":45634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"973:1:143","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"955:19:143"},{"assignments":[45637],"declarations":[{"constant":false,"id":45637,"mutability":"mutable","name":"path","nameLocation":"994:4:143","nodeType":"VariableDeclaration","scope":45838,"src":"981:17:143","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45636,"name":"bytes","nodeType":"ElementaryTypeName","src":"981:5:143","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":45641,"initialValue":{"arguments":[{"id":45639,"name":"encodedPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45588,"src":"1017:11:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":45638,"name":"_getNibbleArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46043,"src":"1001:15:143","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bytes memory)"}},"id":45640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1001:28:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"981:48:143"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":45642,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45637,"src":"1039:4:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1044:6:143","memberName":"length","nodeType":"MemberAccess","src":"1039:11:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":45644,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1054:1:143","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1039:16:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45649,"nodeType":"IfStatement","src":"1035:49:143","trueBody":{"id":45648,"nodeType":"Block","src":"1057:27:143","statements":[{"expression":{"hexValue":"66616c7365","id":45646,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1072:5:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":45596,"id":45647,"nodeType":"Return","src":"1065:12:143"}]}},{"assignments":[45651],"declarations":[{"constant":false,"id":45651,"mutability":"mutable","name":"len","nameLocation":"1098:3:143","nodeType":"VariableDeclaration","scope":45838,"src":"1090:11:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45650,"name":"uint256","nodeType":"ElementaryTypeName","src":"1090:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45654,"initialValue":{"expression":{"id":45652,"name":"parentNodes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45612,"src":"1104:11:143","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1116:6:143","memberName":"length","nodeType":"MemberAccess","src":"1104:18:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1090:32:143"},{"body":{"id":45836,"nodeType":"Block","src":"1159:1432:143","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45662,"name":"pathPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45633,"src":"1171:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":45663,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45637,"src":"1181:4:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1186:6:143","memberName":"length","nodeType":"MemberAccess","src":"1181:11:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1171:21:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45669,"nodeType":"IfStatement","src":"1167:58:143","trueBody":{"id":45668,"nodeType":"Block","src":"1194:31:143","statements":[{"expression":{"hexValue":"66616c7365","id":45666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1211:5:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":45596,"id":45667,"nodeType":"Return","src":"1204:12:143"}]}},{"expression":{"id":45677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45670,"name":"currentNode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45619,"src":"1233:11:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":45673,"name":"parentNodes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45612,"src":"1268:11:143","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45675,"indexExpression":{"id":45674,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45656,"src":"1280:1:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1268:14:143","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"expression":{"id":45671,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46908,"src":"1247:9:143","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$46908_$","typeString":"type(library RLPReader)"}},"id":45672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1257:10:143","memberName":"toRlpBytes","nodeType":"MemberAccess","referencedDeclaration":46495,"src":"1247:20:143","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes memory)"}},"id":45676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1247:36:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"1233:50:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45678,"nodeType":"ExpressionStatement","src":"1233:50:143"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":45683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45679,"name":"nodeKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45629,"src":"1295:7:143","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":45681,"name":"currentNode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45619,"src":"1316:11:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":45680,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1306:9:143","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":45682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1306:22:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1295:33:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45687,"nodeType":"IfStatement","src":"1291:70:143","trueBody":{"id":45686,"nodeType":"Block","src":"1330:31:143","statements":[{"expression":{"hexValue":"66616c7365","id":45684,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1347:5:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":45596,"id":45685,"nodeType":"Return","src":"1340:12:143"}]}},{"expression":{"id":45695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45688,"name":"currentNodeList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45626,"src":"1368:15:143","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":45691,"name":"parentNodes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45612,"src":"1403:11:143","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45693,"indexExpression":{"id":45692,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45656,"src":"1415:1:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1403:14:143","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"expression":{"id":45689,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46908,"src":"1386:9:143","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$46908_$","typeString":"type(library RLPReader)"}},"id":45690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1396:6:143","memberName":"toList","nodeType":"MemberAccess","referencedDeclaration":46339,"src":"1386:16:143","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (struct RLPReader.RLPItem memory[] memory)"}},"id":45694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1386:32:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"src":"1368:50:143","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45696,"nodeType":"ExpressionStatement","src":"1368:50:143"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":45697,"name":"currentNodeList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45626,"src":"1431:15:143","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1447:6:143","memberName":"length","nodeType":"MemberAccess","src":"1431:22:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3137","id":45699,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1457:2:143","typeDescriptions":{"typeIdentifier":"t_rational_17_by_1","typeString":"int_const 17"},"value":"17"},"src":"1431:28:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":45759,"name":"currentNodeList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45626,"src":"1926:15:143","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1942:6:143","memberName":"length","nodeType":"MemberAccess","src":"1926:22:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"32","id":45761,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1952:1:143","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"1926:27:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":45829,"nodeType":"Block","src":"2514:31:143","statements":[{"expression":{"hexValue":"66616c7365","id":45827,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2531:5:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":45596,"id":45828,"nodeType":"Return","src":"2524:12:143"}]},"id":45830,"nodeType":"IfStatement","src":"1922:623:143","trueBody":{"id":45826,"nodeType":"Block","src":"1955:553:143","statements":[{"assignments":[45764],"declarations":[{"constant":false,"id":45764,"mutability":"mutable","name":"traversed","nameLocation":"1973:9:143","nodeType":"VariableDeclaration","scope":45826,"src":"1965:17:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45763,"name":"uint256","nodeType":"ElementaryTypeName","src":"1965:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45775,"initialValue":{"arguments":[{"arguments":[{"baseExpression":{"id":45768,"name":"currentNodeList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45626,"src":"2022:15:143","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45770,"indexExpression":{"hexValue":"30","id":45769,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2038:1:143","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2022:18:143","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"expression":{"id":45766,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46908,"src":"2004:9:143","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$46908_$","typeString":"type(library RLPReader)"}},"id":45767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2014:7:143","memberName":"toBytes","nodeType":"MemberAccess","referencedDeclaration":46684,"src":"2004:17:143","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes memory)"}},"id":45771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2004:37:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":45772,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45637,"src":"2043:4:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":45773,"name":"pathPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45633,"src":"2049:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":45765,"name":"_nibblesToTraverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45924,"src":"1985:18:143","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bytes memory,bytes memory,uint256) pure returns (uint256)"}},"id":45774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1985:72:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1965:92:143"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45776,"name":"pathPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45633,"src":"2071:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":45777,"name":"traversed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45764,"src":"2081:9:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2071:19:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":45779,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45637,"src":"2094:4:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2099:6:143","memberName":"length","nodeType":"MemberAccess","src":"2094:11:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2071:34:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45802,"nodeType":"IfStatement","src":"2067:241:143","trueBody":{"id":45801,"nodeType":"Block","src":"2107:201:143","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":45793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"baseExpression":{"id":45785,"name":"currentNodeList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45626,"src":"2173:15:143","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45787,"indexExpression":{"hexValue":"31","id":45786,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2189:1:143","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2173:18:143","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"expression":{"id":45783,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46908,"src":"2155:9:143","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$46908_$","typeString":"type(library RLPReader)"}},"id":45784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2165:7:143","memberName":"toBytes","nodeType":"MemberAccess","referencedDeclaration":46684,"src":"2155:17:143","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes memory)"}},"id":45788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2155:37:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":45782,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2145:9:143","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":45789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2145:48:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":45791,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45586,"src":"2207:5:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":45790,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2197:9:143","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":45792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2197:16:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2145:68:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":45799,"nodeType":"Block","src":"2259:39:143","statements":[{"expression":{"hexValue":"66616c7365","id":45797,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2280:5:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":45596,"id":45798,"nodeType":"Return","src":"2273:12:143"}]},"id":45800,"nodeType":"IfStatement","src":"2141:157:143","trueBody":{"id":45796,"nodeType":"Block","src":"2215:38:143","statements":[{"expression":{"hexValue":"74727565","id":45794,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2236:4:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":45596,"id":45795,"nodeType":"Return","src":"2229:11:143"}]}}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45803,"name":"traversed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45764,"src":"2347:9:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":45804,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2360:1:143","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2347:14:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45809,"nodeType":"IfStatement","src":"2343:55:143","trueBody":{"id":45808,"nodeType":"Block","src":"2363:35:143","statements":[{"expression":{"hexValue":"66616c7365","id":45806,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2382:5:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":45596,"id":45807,"nodeType":"Return","src":"2375:12:143"}]}},{"expression":{"id":45812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45810,"name":"pathPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45633,"src":"2408:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":45811,"name":"traversed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45764,"src":"2419:9:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2408:20:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45813,"nodeType":"ExpressionStatement","src":"2408:20:143"},{"expression":{"id":45824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45814,"name":"nodeKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45629,"src":"2438:7:143","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"baseExpression":{"id":45819,"name":"currentNodeList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45626,"src":"2479:15:143","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45821,"indexExpression":{"hexValue":"31","id":45820,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2495:1:143","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2479:18:143","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"expression":{"id":45817,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46908,"src":"2456:9:143","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$46908_$","typeString":"type(library RLPReader)"}},"id":45818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2466:12:143","memberName":"toUintStrict","nodeType":"MemberAccess","referencedDeclaration":46632,"src":"2456:22:143","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256)"}},"id":45822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2456:42:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":45816,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2448:7:143","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":45815,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2448:7:143","typeDescriptions":{}}},"id":45823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2448:51:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2438:61:143","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":45825,"nodeType":"ExpressionStatement","src":"2438:61:143"}]}},"id":45831,"nodeType":"IfStatement","src":"1427:1118:143","trueBody":{"id":45758,"nodeType":"Block","src":"1461:455:143","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45701,"name":"pathPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45633,"src":"1475:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":45702,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45637,"src":"1486:4:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1491:6:143","memberName":"length","nodeType":"MemberAccess","src":"1486:11:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1475:22:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45725,"nodeType":"IfStatement","src":"1471:208:143","trueBody":{"id":45724,"nodeType":"Block","src":"1499:180:143","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":45716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"baseExpression":{"id":45708,"name":"currentNodeList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45626,"src":"1543:15:143","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45710,"indexExpression":{"hexValue":"3136","id":45709,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1559:2:143","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1543:19:143","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"expression":{"id":45706,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46908,"src":"1525:9:143","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$46908_$","typeString":"type(library RLPReader)"}},"id":45707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1535:7:143","memberName":"toBytes","nodeType":"MemberAccess","referencedDeclaration":46684,"src":"1525:17:143","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bytes memory)"}},"id":45711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1525:38:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":45705,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1515:9:143","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":45712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1515:49:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":45714,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45586,"src":"1578:5:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":45713,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1568:9:143","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":45715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1568:16:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1515:69:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":45722,"nodeType":"Block","src":"1630:39:143","statements":[{"expression":{"hexValue":"66616c7365","id":45720,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1651:5:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":45596,"id":45721,"nodeType":"Return","src":"1644:12:143"}]},"id":45723,"nodeType":"IfStatement","src":"1511:158:143","trueBody":{"id":45719,"nodeType":"Block","src":"1586:38:143","statements":[{"expression":{"hexValue":"74727565","id":45717,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1607:4:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":45596,"id":45718,"nodeType":"Return","src":"1600:11:143"}]}}]}},{"assignments":[45727],"declarations":[{"constant":false,"id":45727,"mutability":"mutable","name":"nextPathNibble","nameLocation":"1695:14:143","nodeType":"VariableDeclaration","scope":45758,"src":"1689:20:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":45726,"name":"uint8","nodeType":"ElementaryTypeName","src":"1689:5:143","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":45734,"initialValue":{"arguments":[{"baseExpression":{"id":45730,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45637,"src":"1718:4:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45732,"indexExpression":{"id":45731,"name":"pathPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45633,"src":"1723:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1718:13:143","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":45729,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1712:5:143","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":45728,"name":"uint8","nodeType":"ElementaryTypeName","src":"1712:5:143","typeDescriptions":{}}},"id":45733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1712:20:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"1689:43:143"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":45737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45735,"name":"nextPathNibble","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45727,"src":"1746:14:143","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3136","id":45736,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1763:2:143","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"1746:19:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45741,"nodeType":"IfStatement","src":"1742:60:143","trueBody":{"id":45740,"nodeType":"Block","src":"1767:35:143","statements":[{"expression":{"hexValue":"66616c7365","id":45738,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1786:5:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":45596,"id":45739,"nodeType":"Return","src":"1779:12:143"}]}},{"expression":{"id":45752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45742,"name":"nodeKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45629,"src":"1811:7:143","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"baseExpression":{"id":45747,"name":"currentNodeList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45626,"src":"1852:15:143","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":45749,"indexExpression":{"id":45748,"name":"nextPathNibble","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45727,"src":"1868:14:143","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1852:31:143","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"expression":{"id":45745,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46908,"src":"1829:9:143","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RLPReader_$46908_$","typeString":"type(library RLPReader)"}},"id":45746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1839:12:143","memberName":"toUintStrict","nodeType":"MemberAccess","referencedDeclaration":46632,"src":"1829:22:143","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256)"}},"id":45750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1829:55:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":45744,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1821:7:143","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":45743,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1821:7:143","typeDescriptions":{}}},"id":45751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1821:64:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1811:74:143","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":45753,"nodeType":"ExpressionStatement","src":"1811:74:143"},{"expression":{"id":45756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45754,"name":"pathPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45633,"src":"1895:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":45755,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1906:1:143","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1895:12:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45757,"nodeType":"ExpressionStatement","src":"1895:12:143"}]}},{"id":45835,"nodeType":"UncheckedBlock","src":"2553:32:143","statements":[{"expression":{"id":45833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2573:3:143","subExpression":{"id":45832,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45656,"src":"2575:1:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45834,"nodeType":"ExpressionStatement","src":"2573:3:143"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45659,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45656,"src":"1148:1:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":45660,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45651,"src":"1152:3:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1148:7:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45837,"initializationExpression":{"assignments":[45656],"declarations":[{"constant":false,"id":45656,"mutability":"mutable","name":"i","nameLocation":"1141:1:143","nodeType":"VariableDeclaration","scope":45837,"src":"1133:9:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45655,"name":"uint256","nodeType":"ElementaryTypeName","src":"1133:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45658,"initialValue":{"hexValue":"30","id":45657,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1145:1:143","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1133:13:143"},"nodeType":"ForStatement","src":"1128:1463:143"}]},"id":45839,"implemented":true,"kind":"function","modifiers":[],"name":"verify","nameLocation":"554:6:143","nodeType":"FunctionDefinition","parameters":{"id":45593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45586,"mutability":"mutable","name":"value","nameLocation":"579:5:143","nodeType":"VariableDeclaration","scope":45839,"src":"566:18:143","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45585,"name":"bytes","nodeType":"ElementaryTypeName","src":"566:5:143","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":45588,"mutability":"mutable","name":"encodedPath","nameLocation":"603:11:143","nodeType":"VariableDeclaration","scope":45839,"src":"590:24:143","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45587,"name":"bytes","nodeType":"ElementaryTypeName","src":"590:5:143","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":45590,"mutability":"mutable","name":"rlpParentNodes","nameLocation":"633:14:143","nodeType":"VariableDeclaration","scope":45839,"src":"620:27:143","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45589,"name":"bytes","nodeType":"ElementaryTypeName","src":"620:5:143","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":45592,"mutability":"mutable","name":"root","nameLocation":"661:4:143","nodeType":"VariableDeclaration","scope":45839,"src":"653:12:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":45591,"name":"bytes32","nodeType":"ElementaryTypeName","src":"653:7:143","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"560:109:143"},"returnParameters":{"id":45596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45595,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45839,"src":"693:4:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":45594,"name":"bool","nodeType":"ElementaryTypeName","src":"693:4:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"692:6:143"},"scope":46084,"src":"545:2050:143","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45923,"nodeType":"Block","src":"2743:780:143","statements":[{"assignments":[45851],"declarations":[{"constant":false,"id":45851,"mutability":"mutable","name":"len","nameLocation":"2757:3:143","nodeType":"VariableDeclaration","scope":45923,"src":"2749:11:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45850,"name":"uint256","nodeType":"ElementaryTypeName","src":"2749:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45853,"initialValue":{"hexValue":"30","id":45852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2763:1:143","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2749:15:143"},{"assignments":[45855],"declarations":[{"constant":false,"id":45855,"mutability":"mutable","name":"partialPath","nameLocation":"2960:11:143","nodeType":"VariableDeclaration","scope":45923,"src":"2947:24:143","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45854,"name":"bytes","nodeType":"ElementaryTypeName","src":"2947:5:143","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":45859,"initialValue":{"arguments":[{"id":45857,"name":"encodedPartialPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45841,"src":"2990:18:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":45856,"name":"_getNibbleArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46043,"src":"2974:15:143","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bytes memory)"}},"id":45858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2974:35:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"2947:62:143"},{"assignments":[45861],"declarations":[{"constant":false,"id":45861,"mutability":"mutable","name":"slicedPath","nameLocation":"3028:10:143","nodeType":"VariableDeclaration","scope":45923,"src":"3015:23:143","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45860,"name":"bytes","nodeType":"ElementaryTypeName","src":"3015:5:143","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":45867,"initialValue":{"arguments":[{"expression":{"id":45864,"name":"partialPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45855,"src":"3051:11:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3063:6:143","memberName":"length","nodeType":"MemberAccess","src":"3051:18:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":45863,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3041:9:143","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":45862,"name":"bytes","nodeType":"ElementaryTypeName","src":"3045:5:143","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":45866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3041:29:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3015:55:143"},{"assignments":[45869],"declarations":[{"constant":false,"id":45869,"mutability":"mutable","name":"_len","nameLocation":"3172:4:143","nodeType":"VariableDeclaration","scope":45923,"src":"3164:12:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45868,"name":"uint256","nodeType":"ElementaryTypeName","src":"3164:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45874,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45870,"name":"pathPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45845,"src":"3179:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":45871,"name":"partialPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45855,"src":"3189:11:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3201:6:143","memberName":"length","nodeType":"MemberAccess","src":"3189:18:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3179:28:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3164:43:143"},{"body":{"id":45900,"nodeType":"Block","src":"3251:126:143","statements":[{"assignments":[45883],"declarations":[{"constant":false,"id":45883,"mutability":"mutable","name":"pathNibble","nameLocation":"3266:10:143","nodeType":"VariableDeclaration","scope":45900,"src":"3259:17:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":45882,"name":"bytes1","nodeType":"ElementaryTypeName","src":"3259:6:143","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"}],"id":45887,"initialValue":{"baseExpression":{"id":45884,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45843,"src":"3279:4:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45886,"indexExpression":{"id":45885,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45876,"src":"3284:1:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3279:7:143","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"VariableDeclarationStatement","src":"3259:27:143"},{"expression":{"id":45894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":45888,"name":"slicedPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45861,"src":"3294:10:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45892,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45889,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45876,"src":"3305:1:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":45890,"name":"pathPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45845,"src":"3309:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3305:11:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3294:23:143","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45893,"name":"pathNibble","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45883,"src":"3320:10:143","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"3294:36:143","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":45895,"nodeType":"ExpressionStatement","src":"3294:36:143"},{"id":45899,"nodeType":"UncheckedBlock","src":"3339:32:143","statements":[{"expression":{"id":45897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3359:3:143","subExpression":{"id":45896,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45876,"src":"3361:1:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45898,"nodeType":"ExpressionStatement","src":"3359:3:143"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45879,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45876,"src":"3239:1:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":45880,"name":"_len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45869,"src":"3243:4:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3239:8:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45901,"initializationExpression":{"assignments":[45876],"declarations":[{"constant":false,"id":45876,"mutability":"mutable","name":"i","nameLocation":"3226:1:143","nodeType":"VariableDeclaration","scope":45901,"src":"3218:9:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45875,"name":"uint256","nodeType":"ElementaryTypeName","src":"3218:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45878,"initialValue":{"id":45877,"name":"pathPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45845,"src":"3230:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3218:19:143"},"nodeType":"ForStatement","src":"3213:164:143"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":45908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":45903,"name":"partialPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45855,"src":"3397:11:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":45902,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3387:9:143","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":45904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3387:22:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":45906,"name":"slicedPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45861,"src":"3423:10:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":45905,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3413:9:143","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":45907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3413:21:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3387:47:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":45919,"nodeType":"Block","src":"3481:22:143","statements":[{"expression":{"id":45917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45915,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45851,"src":"3489:3:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":45916,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3495:1:143","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3489:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45918,"nodeType":"ExpressionStatement","src":"3489:7:143"}]},"id":45920,"nodeType":"IfStatement","src":"3383:120:143","trueBody":{"id":45914,"nodeType":"Block","src":"3436:39:143","statements":[{"expression":{"id":45912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45909,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45851,"src":"3444:3:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":45910,"name":"partialPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45855,"src":"3450:11:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3462:6:143","memberName":"length","nodeType":"MemberAccess","src":"3450:18:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3444:24:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45913,"nodeType":"ExpressionStatement","src":"3444:24:143"}]}},{"expression":{"id":45921,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45851,"src":"3515:3:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45849,"id":45922,"nodeType":"Return","src":"3508:10:143"}]},"id":45924,"implemented":true,"kind":"function","modifiers":[],"name":"_nibblesToTraverse","nameLocation":"2608:18:143","nodeType":"FunctionDefinition","parameters":{"id":45846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45841,"mutability":"mutable","name":"encodedPartialPath","nameLocation":"2645:18:143","nodeType":"VariableDeclaration","scope":45924,"src":"2632:31:143","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45840,"name":"bytes","nodeType":"ElementaryTypeName","src":"2632:5:143","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":45843,"mutability":"mutable","name":"path","nameLocation":"2682:4:143","nodeType":"VariableDeclaration","scope":45924,"src":"2669:17:143","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45842,"name":"bytes","nodeType":"ElementaryTypeName","src":"2669:5:143","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":45845,"mutability":"mutable","name":"pathPtr","nameLocation":"2700:7:143","nodeType":"VariableDeclaration","scope":45924,"src":"2692:15:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45844,"name":"uint256","nodeType":"ElementaryTypeName","src":"2692:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2626:85:143"},"returnParameters":{"id":45849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45848,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45924,"src":"2734:7:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45847,"name":"uint256","nodeType":"ElementaryTypeName","src":"2734:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2733:9:143"},"scope":46084,"src":"2599:924:143","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":46042,"nodeType":"Block","src":"3637:649:143","statements":[{"assignments":[45932],"declarations":[{"constant":false,"id":45932,"mutability":"mutable","name":"nibbles","nameLocation":"3656:7:143","nodeType":"VariableDeclaration","scope":46042,"src":"3643:20:143","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45931,"name":"bytes","nodeType":"ElementaryTypeName","src":"3643:5:143","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":45934,"initialValue":{"hexValue":"","id":45933,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3666:2:143","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},"nodeType":"VariableDeclarationStatement","src":"3643:25:143"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":45935,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45926,"src":"3678:1:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3680:6:143","memberName":"length","nodeType":"MemberAccess","src":"3678:8:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":45937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3689:1:143","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3678:12:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46039,"nodeType":"IfStatement","src":"3674:588:143","trueBody":{"id":46038,"nodeType":"Block","src":"3692:570:143","statements":[{"assignments":[45940],"declarations":[{"constant":false,"id":45940,"mutability":"mutable","name":"offset","nameLocation":"3706:6:143","nodeType":"VariableDeclaration","scope":46038,"src":"3700:12:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":45939,"name":"uint8","nodeType":"ElementaryTypeName","src":"3700:5:143","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":45941,"nodeType":"VariableDeclarationStatement","src":"3700:12:143"},{"assignments":[45943],"declarations":[{"constant":false,"id":45943,"mutability":"mutable","name":"hpNibble","nameLocation":"3726:8:143","nodeType":"VariableDeclaration","scope":46038,"src":"3720:14:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":45942,"name":"uint8","nodeType":"ElementaryTypeName","src":"3720:5:143","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":45951,"initialValue":{"arguments":[{"arguments":[{"hexValue":"30","id":45947,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3764:1:143","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":45948,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45926,"src":"3767:1:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":45946,"name":"_getNthNibbleOfBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46083,"src":"3743:20:143","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes1_$","typeString":"function (uint256,bytes memory) pure returns (bytes1)"}},"id":45949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3743:26:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":45945,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3737:5:143","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":45944,"name":"uint8","nodeType":"ElementaryTypeName","src":"3737:5:143","typeDescriptions":{}}},"id":45950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3737:33:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"3720:50:143"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":45958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":45954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45952,"name":"hpNibble","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45943,"src":"3782:8:143","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":45953,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3794:1:143","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3782:13:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":45957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45955,"name":"hpNibble","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45943,"src":"3799:8:143","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"33","id":45956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3811:1:143","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"3799:13:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3782:30:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":46005,"nodeType":"Block","src":"3983:76:143","statements":[{"expression":{"id":45999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45989,"name":"nibbles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45932,"src":"3993:7:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":45992,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45926,"src":"4013:1:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4015:6:143","memberName":"length","nodeType":"MemberAccess","src":"4013:8:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":45994,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4024:1:143","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4013:12:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"32","id":45996,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4028:1:143","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4013:16:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":45991,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"4003:9:143","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":45990,"name":"bytes","nodeType":"ElementaryTypeName","src":"4007:5:143","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":45998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4003:27:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"3993:37:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":46000,"nodeType":"ExpressionStatement","src":"3993:37:143"},{"expression":{"id":46003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46001,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45940,"src":"4040:6:143","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":46002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4049:1:143","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4040:10:143","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":46004,"nodeType":"ExpressionStatement","src":"4040:10:143"}]},"id":46006,"nodeType":"IfStatement","src":"3778:281:143","trueBody":{"id":45988,"nodeType":"Block","src":"3814:163:143","statements":[{"expression":{"id":45969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45959,"name":"nibbles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45932,"src":"3824:7:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":45962,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45926,"src":"3844:1:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3846:6:143","memberName":"length","nodeType":"MemberAccess","src":"3844:8:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":45964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3855:1:143","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"3844:12:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":45966,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3859:1:143","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3844:16:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":45961,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3834:9:143","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":45960,"name":"bytes","nodeType":"ElementaryTypeName","src":"3838:5:143","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":45968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3834:27:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"3824:37:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45970,"nodeType":"ExpressionStatement","src":"3824:37:143"},{"assignments":[45972],"declarations":[{"constant":false,"id":45972,"mutability":"mutable","name":"oddNibble","nameLocation":"3878:9:143","nodeType":"VariableDeclaration","scope":45988,"src":"3871:16:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":45971,"name":"bytes1","nodeType":"ElementaryTypeName","src":"3871:6:143","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"}],"id":45977,"initialValue":{"arguments":[{"hexValue":"31","id":45974,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3911:1:143","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"id":45975,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45926,"src":"3914:1:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":45973,"name":"_getNthNibbleOfBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46083,"src":"3890:20:143","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes1_$","typeString":"function (uint256,bytes memory) pure returns (bytes1)"}},"id":45976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3890:26:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"VariableDeclarationStatement","src":"3871:45:143"},{"expression":{"id":45982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":45978,"name":"nibbles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45932,"src":"3926:7:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":45980,"indexExpression":{"hexValue":"30","id":45979,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3934:1:143","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3926:10:143","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45981,"name":"oddNibble","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45972,"src":"3939:9:143","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"3926:22:143","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":45983,"nodeType":"ExpressionStatement","src":"3926:22:143"},{"expression":{"id":45986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45984,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45940,"src":"3958:6:143","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":45985,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3967:1:143","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3958:10:143","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":45987,"nodeType":"ExpressionStatement","src":"3958:10:143"}]}},{"assignments":[46008],"declarations":[{"constant":false,"id":46008,"mutability":"mutable","name":"len","nameLocation":"4075:3:143","nodeType":"VariableDeclaration","scope":46038,"src":"4067:11:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46007,"name":"uint256","nodeType":"ElementaryTypeName","src":"4067:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46011,"initialValue":{"expression":{"id":46009,"name":"nibbles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45932,"src":"4081:7:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":46010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4089:6:143","memberName":"length","nodeType":"MemberAccess","src":"4081:14:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4067:28:143"},{"body":{"id":46036,"nodeType":"Block","src":"4139:117:143","statements":[{"expression":{"id":46030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":46019,"name":"nibbles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45932,"src":"4149:7:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":46021,"indexExpression":{"id":46020,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46013,"src":"4157:1:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4149:10:143","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46023,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46013,"src":"4183:1:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":46024,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45940,"src":"4187:6:143","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"4183:10:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32","id":46026,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4196:1:143","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4183:14:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":46028,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45926,"src":"4199:1:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":46022,"name":"_getNthNibbleOfBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46083,"src":"4162:20:143","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes1_$","typeString":"function (uint256,bytes memory) pure returns (bytes1)"}},"id":46029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4162:39:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"4149:52:143","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":46031,"nodeType":"ExpressionStatement","src":"4149:52:143"},{"id":46035,"nodeType":"UncheckedBlock","src":"4212:36:143","statements":[{"expression":{"id":46033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4234:3:143","subExpression":{"id":46032,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46013,"src":"4236:1:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46034,"nodeType":"ExpressionStatement","src":"4234:3:143"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46016,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46013,"src":"4128:1:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":46017,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46008,"src":"4132:3:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4128:7:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46037,"initializationExpression":{"assignments":[46013],"declarations":[{"constant":false,"id":46013,"mutability":"mutable","name":"i","nameLocation":"4116:1:143","nodeType":"VariableDeclaration","scope":46037,"src":"4108:9:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46012,"name":"uint256","nodeType":"ElementaryTypeName","src":"4108:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46015,"initialValue":{"id":46014,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45940,"src":"4120:6:143","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"4108:18:143"},"nodeType":"ForStatement","src":"4103:153:143"}]}},{"expression":{"id":46040,"name":"nibbles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45932,"src":"4274:7:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":45930,"id":46041,"nodeType":"Return","src":"4267:14:143"}]},"id":46043,"implemented":true,"kind":"function","modifiers":[],"name":"_getNibbleArray","nameLocation":"3568:15:143","nodeType":"FunctionDefinition","parameters":{"id":45927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45926,"mutability":"mutable","name":"b","nameLocation":"3597:1:143","nodeType":"VariableDeclaration","scope":46043,"src":"3584:14:143","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45925,"name":"bytes","nodeType":"ElementaryTypeName","src":"3584:5:143","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3583:16:143"},"returnParameters":{"id":45930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45929,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46043,"src":"3623:12:143","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":45928,"name":"bytes","nodeType":"ElementaryTypeName","src":"3623:5:143","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3622:14:143"},"scope":46084,"src":"3559:727:143","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":46082,"nodeType":"Block","src":"4379:90:143","statements":[{"expression":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46054,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46045,"src":"4399:1:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"32","id":46055,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4403:1:143","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4399:5:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":46057,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4408:1:143","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4399:10:143","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":46078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"id":46071,"name":"str","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46047,"src":"4445:3:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":46075,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46072,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46045,"src":"4449:1:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":46073,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4453:1:143","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4449:5:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4445:10:143","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":46070,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4439:5:143","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":46069,"name":"uint8","nodeType":"ElementaryTypeName","src":"4439:5:143","typeDescriptions":{}}},"id":46076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4439:17:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"30783130","id":46077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4459:4:143","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"0x10"},"src":"4439:24:143","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":46079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"4399:64:143","trueExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":46068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"id":46061,"name":"str","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46047,"src":"4418:3:143","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":46065,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46062,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46045,"src":"4422:1:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":46063,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4426:1:143","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4422:5:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4418:10:143","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":46060,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4412:5:143","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":46059,"name":"uint8","nodeType":"ElementaryTypeName","src":"4412:5:143","typeDescriptions":{}}},"id":46066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4412:17:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"30783130","id":46067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4432:4:143","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"0x10"},"src":"4412:24:143","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":46053,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4392:6:143","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":46052,"name":"bytes1","nodeType":"ElementaryTypeName","src":"4392:6:143","typeDescriptions":{}}},"id":46080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4392:72:143","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"functionReturnParameters":46051,"id":46081,"nodeType":"Return","src":"4385:79:143"}]},"id":46083,"implemented":true,"kind":"function","modifiers":[],"name":"_getNthNibbleOfBytes","nameLocation":"4299:20:143","nodeType":"FunctionDefinition","parameters":{"id":46048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46045,"mutability":"mutable","name":"n","nameLocation":"4328:1:143","nodeType":"VariableDeclaration","scope":46083,"src":"4320:9:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46044,"name":"uint256","nodeType":"ElementaryTypeName","src":"4320:7:143","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":46047,"mutability":"mutable","name":"str","nameLocation":"4344:3:143","nodeType":"VariableDeclaration","scope":46083,"src":"4331:16:143","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":46046,"name":"bytes","nodeType":"ElementaryTypeName","src":"4331:5:143","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4319:29:143"},"returnParameters":{"id":46051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46050,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46083,"src":"4371:6:143","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":46049,"name":"bytes1","nodeType":"ElementaryTypeName","src":"4371:6:143","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"}],"src":"4370:8:143"},"scope":46084,"src":"4290:179:143","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":46085,"src":"191:4280:143","usedErrors":[]}],"src":"122:4350:143"},"id":143},"contracts/messaging/connectors/polygon/lib/RLPReader.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/polygon/lib/RLPReader.sol","exportedSymbols":{"RLPReader":[46908]},"id":46909,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":46086,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"112:23:144"},{"abstract":false,"baseContracts":[],"canonicalName":"RLPReader","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":46908,"linearizedBaseContracts":[46908],"name":"RLPReader","nameLocation":"145:9:144","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":46089,"mutability":"constant","name":"STRING_SHORT_START","nameLocation":"174:18:144","nodeType":"VariableDeclaration","scope":46908,"src":"159:40:144","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":46087,"name":"uint8","nodeType":"ElementaryTypeName","src":"159:5:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"30783830","id":46088,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"195:4:144","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"0x80"},"visibility":"internal"},{"constant":true,"id":46092,"mutability":"constant","name":"STRING_LONG_START","nameLocation":"218:17:144","nodeType":"VariableDeclaration","scope":46908,"src":"203:39:144","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":46090,"name":"uint8","nodeType":"ElementaryTypeName","src":"203:5:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"30786238","id":46091,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"238:4:144","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"0xb8"},"visibility":"internal"},{"constant":true,"id":46095,"mutability":"constant","name":"LIST_SHORT_START","nameLocation":"261:16:144","nodeType":"VariableDeclaration","scope":46908,"src":"246:38:144","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":46093,"name":"uint8","nodeType":"ElementaryTypeName","src":"246:5:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"30786330","id":46094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"280:4:144","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"0xc0"},"visibility":"internal"},{"constant":true,"id":46098,"mutability":"constant","name":"LIST_LONG_START","nameLocation":"303:15:144","nodeType":"VariableDeclaration","scope":46908,"src":"288:37:144","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":46096,"name":"uint8","nodeType":"ElementaryTypeName","src":"288:5:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"30786638","id":46097,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"321:4:144","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"0xf8"},"visibility":"internal"},{"constant":true,"id":46101,"mutability":"constant","name":"WORD_SIZE","nameLocation":"344:9:144","nodeType":"VariableDeclaration","scope":46908,"src":"329:29:144","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":46099,"name":"uint8","nodeType":"ElementaryTypeName","src":"329:5:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"3332","id":46100,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"356:2:144","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"visibility":"internal"},{"canonicalName":"RLPReader.RLPItem","id":46106,"members":[{"constant":false,"id":46103,"mutability":"mutable","name":"len","nameLocation":"392:3:144","nodeType":"VariableDeclaration","scope":46106,"src":"384:11:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46102,"name":"uint256","nodeType":"ElementaryTypeName","src":"384:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":46105,"mutability":"mutable","name":"memPtr","nameLocation":"409:6:144","nodeType":"VariableDeclaration","scope":46106,"src":"401:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46104,"name":"uint256","nodeType":"ElementaryTypeName","src":"401:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"RLPItem","nameLocation":"370:7:144","nodeType":"StructDefinition","scope":46908,"src":"363:57:144","visibility":"public"},{"canonicalName":"RLPReader.Iterator","id":46112,"members":[{"constant":false,"id":46109,"mutability":"mutable","name":"item","nameLocation":"454:4:144","nodeType":"VariableDeclaration","scope":46112,"src":"446:12:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46108,"nodeType":"UserDefinedTypeName","pathNode":{"id":46107,"name":"RLPItem","nameLocations":["446:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"446:7:144"},"referencedDeclaration":46106,"src":"446:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"},{"constant":false,"id":46111,"mutability":"mutable","name":"nextPtr","nameLocation":"508:7:144","nodeType":"VariableDeclaration","scope":46112,"src":"500:15:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46110,"name":"uint256","nodeType":"ElementaryTypeName","src":"500:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Iterator","nameLocation":"431:8:144","nodeType":"StructDefinition","scope":46908,"src":"424:138:144","visibility":"public"},{"body":{"id":46151,"nodeType":"Block","src":"820:184:144","statements":[{"expression":{"arguments":[{"arguments":[{"id":46123,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46115,"src":"842:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_Iterator_$46112_memory_ptr","typeString":"struct RLPReader.Iterator memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Iterator_$46112_memory_ptr","typeString":"struct RLPReader.Iterator memory"}],"id":46122,"name":"hasNext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46176,"src":"834:7:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Iterator_$46112_memory_ptr_$returns$_t_bool_$","typeString":"function (struct RLPReader.Iterator memory) pure returns (bool)"}},"id":46124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"834:13:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":46121,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"826:7:144","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":46125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"826:22:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46126,"nodeType":"ExpressionStatement","src":"826:22:144"},{"assignments":[46128],"declarations":[{"constant":false,"id":46128,"mutability":"mutable","name":"ptr","nameLocation":"863:3:144","nodeType":"VariableDeclaration","scope":46151,"src":"855:11:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46127,"name":"uint256","nodeType":"ElementaryTypeName","src":"855:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46131,"initialValue":{"expression":{"id":46129,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46115,"src":"869:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_Iterator_$46112_memory_ptr","typeString":"struct RLPReader.Iterator memory"}},"id":46130,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"874:7:144","memberName":"nextPtr","nodeType":"MemberAccess","referencedDeclaration":46111,"src":"869:12:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"855:26:144"},{"assignments":[46133],"declarations":[{"constant":false,"id":46133,"mutability":"mutable","name":"itemLength","nameLocation":"895:10:144","nodeType":"VariableDeclaration","scope":46151,"src":"887:18:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46132,"name":"uint256","nodeType":"ElementaryTypeName","src":"887:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46137,"initialValue":{"arguments":[{"id":46135,"name":"ptr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46128,"src":"920:3:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46134,"name":"_itemLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46798,"src":"908:11:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":46136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"908:16:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"887:37:144"},{"expression":{"id":46144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46138,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46115,"src":"930:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_Iterator_$46112_memory_ptr","typeString":"struct RLPReader.Iterator memory"}},"id":46140,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"935:7:144","memberName":"nextPtr","nodeType":"MemberAccess","referencedDeclaration":46111,"src":"930:12:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46141,"name":"ptr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46128,"src":"945:3:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":46142,"name":"itemLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46133,"src":"951:10:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"945:16:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"930:31:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46145,"nodeType":"ExpressionStatement","src":"930:31:144"},{"expression":{"arguments":[{"id":46147,"name":"itemLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46133,"src":"983:10:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":46148,"name":"ptr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46128,"src":"995:3:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46146,"name":"RLPItem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46106,"src":"975:7:144","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RLPItem_$46106_storage_ptr_$","typeString":"type(struct RLPReader.RLPItem storage pointer)"}},"id":46149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"975:24:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"functionReturnParameters":46120,"id":46150,"nodeType":"Return","src":"968:31:144"}]},"id":46152,"implemented":true,"kind":"function","modifiers":[],"name":"next","nameLocation":"754:4:144","nodeType":"FunctionDefinition","parameters":{"id":46116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46115,"mutability":"mutable","name":"self","nameLocation":"775:4:144","nodeType":"VariableDeclaration","scope":46152,"src":"759:20:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Iterator_$46112_memory_ptr","typeString":"struct RLPReader.Iterator"},"typeName":{"id":46114,"nodeType":"UserDefinedTypeName","pathNode":{"id":46113,"name":"Iterator","nameLocations":["759:8:144"],"nodeType":"IdentifierPath","referencedDeclaration":46112,"src":"759:8:144"},"referencedDeclaration":46112,"src":"759:8:144","typeDescriptions":{"typeIdentifier":"t_struct$_Iterator_$46112_storage_ptr","typeString":"struct RLPReader.Iterator"}},"visibility":"internal"}],"src":"758:22:144"},"returnParameters":{"id":46120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46119,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46152,"src":"804:14:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46118,"nodeType":"UserDefinedTypeName","pathNode":{"id":46117,"name":"RLPItem","nameLocations":["804:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"804:7:144"},"referencedDeclaration":46106,"src":"804:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"803:16:144"},"scope":46908,"src":"745:259:144","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":46175,"nodeType":"Block","src":"1231:92:144","statements":[{"assignments":[46162],"declarations":[{"constant":false,"id":46162,"mutability":"mutable","name":"item","nameLocation":"1252:4:144","nodeType":"VariableDeclaration","scope":46175,"src":"1237:19:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46161,"nodeType":"UserDefinedTypeName","pathNode":{"id":46160,"name":"RLPItem","nameLocations":["1237:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"1237:7:144"},"referencedDeclaration":46106,"src":"1237:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"id":46165,"initialValue":{"expression":{"id":46163,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46155,"src":"1259:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_Iterator_$46112_memory_ptr","typeString":"struct RLPReader.Iterator memory"}},"id":46164,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1264:4:144","memberName":"item","nodeType":"MemberAccess","referencedDeclaration":46109,"src":"1259:9:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"nodeType":"VariableDeclarationStatement","src":"1237:31:144"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46166,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46155,"src":"1281:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_Iterator_$46112_memory_ptr","typeString":"struct RLPReader.Iterator memory"}},"id":46167,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1286:7:144","memberName":"nextPtr","nodeType":"MemberAccess","referencedDeclaration":46111,"src":"1281:12:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46168,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46162,"src":"1296:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46169,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1301:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"1296:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":46170,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46162,"src":"1310:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46171,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1315:3:144","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":46103,"src":"1310:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1296:22:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1281:37:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":46159,"id":46174,"nodeType":"Return","src":"1274:44:144"}]},"id":46176,"implemented":true,"kind":"function","modifiers":[],"name":"hasNext","nameLocation":"1172:7:144","nodeType":"FunctionDefinition","parameters":{"id":46156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46155,"mutability":"mutable","name":"self","nameLocation":"1196:4:144","nodeType":"VariableDeclaration","scope":46176,"src":"1180:20:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Iterator_$46112_memory_ptr","typeString":"struct RLPReader.Iterator"},"typeName":{"id":46154,"nodeType":"UserDefinedTypeName","pathNode":{"id":46153,"name":"Iterator","nameLocations":["1180:8:144"],"nodeType":"IdentifierPath","referencedDeclaration":46112,"src":"1180:8:144"},"referencedDeclaration":46112,"src":"1180:8:144","typeDescriptions":{"typeIdentifier":"t_struct$_Iterator_$46112_storage_ptr","typeString":"struct RLPReader.Iterator"}},"visibility":"internal"}],"src":"1179:22:144"},"returnParameters":{"id":46159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46158,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46176,"src":"1225:4:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":46157,"name":"bool","nodeType":"ElementaryTypeName","src":"1225:4:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1224:6:144"},"scope":46908,"src":"1163:160:144","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":46194,"nodeType":"Block","src":"1450:120:144","statements":[{"assignments":[46185],"declarations":[{"constant":false,"id":46185,"mutability":"mutable","name":"memPtr","nameLocation":"1464:6:144","nodeType":"VariableDeclaration","scope":46194,"src":"1456:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46184,"name":"uint256","nodeType":"ElementaryTypeName","src":"1456:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46186,"nodeType":"VariableDeclarationStatement","src":"1456:14:144"},{"AST":{"nodeType":"YulBlock","src":"1485:39:144","statements":[{"nodeType":"YulAssignment","src":"1493:25:144","value":{"arguments":[{"name":"item","nodeType":"YulIdentifier","src":"1507:4:144"},{"kind":"number","nodeType":"YulLiteral","src":"1513:4:144","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1503:3:144"},"nodeType":"YulFunctionCall","src":"1503:15:144"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1493:6:144"}]}]},"evmVersion":"london","externalReferences":[{"declaration":46178,"isOffset":false,"isSlot":false,"src":"1507:4:144","valueSize":1},{"declaration":46185,"isOffset":false,"isSlot":false,"src":"1493:6:144","valueSize":1}],"id":46187,"nodeType":"InlineAssembly","src":"1476:48:144"},{"expression":{"arguments":[{"expression":{"id":46189,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46178,"src":"1545:4:144","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":46190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1550:6:144","memberName":"length","nodeType":"MemberAccess","src":"1545:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":46191,"name":"memPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46185,"src":"1558:6:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46188,"name":"RLPItem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46106,"src":"1537:7:144","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RLPItem_$46106_storage_ptr_$","typeString":"type(struct RLPReader.RLPItem storage pointer)"}},"id":46192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1537:28:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"functionReturnParameters":46183,"id":46193,"nodeType":"Return","src":"1530:35:144"}]},"id":46195,"implemented":true,"kind":"function","modifiers":[],"name":"toRlpItem","nameLocation":"1382:9:144","nodeType":"FunctionDefinition","parameters":{"id":46179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46178,"mutability":"mutable","name":"item","nameLocation":"1405:4:144","nodeType":"VariableDeclaration","scope":46195,"src":"1392:17:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":46177,"name":"bytes","nodeType":"ElementaryTypeName","src":"1392:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1391:19:144"},"returnParameters":{"id":46183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46182,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46195,"src":"1434:14:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46181,"nodeType":"UserDefinedTypeName","pathNode":{"id":46180,"name":"RLPItem","nameLocations":["1434:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"1434:7:144"},"referencedDeclaration":46106,"src":"1434:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"1433:16:144"},"scope":46908,"src":"1373:197:144","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":46225,"nodeType":"Block","src":"1798:126:144","statements":[{"expression":{"arguments":[{"arguments":[{"id":46206,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46198,"src":"1819:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":46205,"name":"isList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46372,"src":"1812:6:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_bool_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bool)"}},"id":46207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1812:12:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":46204,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1804:7:144","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":46208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1804:21:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46209,"nodeType":"ExpressionStatement","src":"1804:21:144"},{"assignments":[46211],"declarations":[{"constant":false,"id":46211,"mutability":"mutable","name":"ptr","nameLocation":"1840:3:144","nodeType":"VariableDeclaration","scope":46225,"src":"1832:11:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46210,"name":"uint256","nodeType":"ElementaryTypeName","src":"1832:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46219,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46212,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46198,"src":"1846:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46213,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1851:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"1846:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"expression":{"id":46215,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46198,"src":"1875:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46216,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1880:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"1875:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46214,"name":"_payloadOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46855,"src":"1860:14:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":46217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1860:27:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1846:41:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1832:55:144"},{"expression":{"arguments":[{"id":46221,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46198,"src":"1909:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},{"id":46222,"name":"ptr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46211,"src":"1915:3:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46220,"name":"Iterator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46112,"src":"1900:8:144","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Iterator_$46112_storage_ptr_$","typeString":"type(struct RLPReader.Iterator storage pointer)"}},"id":46223,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1900:19:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Iterator_$46112_memory_ptr","typeString":"struct RLPReader.Iterator memory"}},"functionReturnParameters":46203,"id":46224,"nodeType":"Return","src":"1893:26:144"}]},"id":46226,"implemented":true,"kind":"function","modifiers":[],"name":"iterator","nameLocation":"1728:8:144","nodeType":"FunctionDefinition","parameters":{"id":46199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46198,"mutability":"mutable","name":"self","nameLocation":"1752:4:144","nodeType":"VariableDeclaration","scope":46226,"src":"1737:19:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46197,"nodeType":"UserDefinedTypeName","pathNode":{"id":46196,"name":"RLPItem","nameLocations":["1737:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"1737:7:144"},"referencedDeclaration":46106,"src":"1737:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"1736:21:144"},"returnParameters":{"id":46203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46202,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46226,"src":"1781:15:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Iterator_$46112_memory_ptr","typeString":"struct RLPReader.Iterator"},"typeName":{"id":46201,"nodeType":"UserDefinedTypeName","pathNode":{"id":46200,"name":"Iterator","nameLocations":["1781:8:144"],"nodeType":"IdentifierPath","referencedDeclaration":46112,"src":"1781:8:144"},"referencedDeclaration":46112,"src":"1781:8:144","typeDescriptions":{"typeIdentifier":"t_struct$_Iterator_$46112_storage_ptr","typeString":"struct RLPReader.Iterator"}},"visibility":"internal"}],"src":"1780:17:144"},"scope":46908,"src":"1719:205:144","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":46237,"nodeType":"Block","src":"2043:26:144","statements":[{"expression":{"expression":{"id":46234,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46229,"src":"2056:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46235,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2061:3:144","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":46103,"src":"2056:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":46233,"id":46236,"nodeType":"Return","src":"2049:15:144"}]},"id":46238,"implemented":true,"kind":"function","modifiers":[],"name":"rlpLen","nameLocation":"1983:6:144","nodeType":"FunctionDefinition","parameters":{"id":46230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46229,"mutability":"mutable","name":"item","nameLocation":"2005:4:144","nodeType":"VariableDeclaration","scope":46238,"src":"1990:19:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46228,"nodeType":"UserDefinedTypeName","pathNode":{"id":46227,"name":"RLPItem","nameLocations":["1990:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"1990:7:144"},"referencedDeclaration":46106,"src":"1990:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"1989:21:144"},"returnParameters":{"id":46233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46232,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46238,"src":"2034:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46231,"name":"uint256","nodeType":"ElementaryTypeName","src":"2034:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2033:9:144"},"scope":46908,"src":"1974:95:144","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":46254,"nodeType":"Block","src":"2192:56:144","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46246,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46241,"src":"2205:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46247,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2210:3:144","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":46103,"src":"2205:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"expression":{"id":46249,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46241,"src":"2231:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46250,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2236:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"2231:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46248,"name":"_payloadOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46855,"src":"2216:14:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":46251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2216:27:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2205:38:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":46245,"id":46253,"nodeType":"Return","src":"2198:45:144"}]},"id":46255,"implemented":true,"kind":"function","modifiers":[],"name":"payloadLen","nameLocation":"2128:10:144","nodeType":"FunctionDefinition","parameters":{"id":46242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46241,"mutability":"mutable","name":"item","nameLocation":"2154:4:144","nodeType":"VariableDeclaration","scope":46255,"src":"2139:19:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46240,"nodeType":"UserDefinedTypeName","pathNode":{"id":46239,"name":"RLPItem","nameLocations":["2139:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"2139:7:144"},"referencedDeclaration":46106,"src":"2139:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"2138:21:144"},"returnParameters":{"id":46245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46244,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46255,"src":"2183:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46243,"name":"uint256","nodeType":"ElementaryTypeName","src":"2183:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2182:9:144"},"scope":46908,"src":"2119:129:144","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":46338,"nodeType":"Block","src":"2384:426:144","statements":[{"expression":{"arguments":[{"arguments":[{"id":46267,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46258,"src":"2405:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":46266,"name":"isList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46372,"src":"2398:6:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_bool_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (bool)"}},"id":46268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2398:12:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":46265,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2390:7:144","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":46269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2390:21:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46270,"nodeType":"ExpressionStatement","src":"2390:21:144"},{"assignments":[46272],"declarations":[{"constant":false,"id":46272,"mutability":"mutable","name":"items","nameLocation":"2426:5:144","nodeType":"VariableDeclaration","scope":46338,"src":"2418:13:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46271,"name":"uint256","nodeType":"ElementaryTypeName","src":"2418:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46276,"initialValue":{"arguments":[{"id":46274,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46258,"src":"2443:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":46273,"name":"numItems","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46740,"src":"2434:8:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256)"}},"id":46275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2434:14:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2418:30:144"},{"assignments":[46281],"declarations":[{"constant":false,"id":46281,"mutability":"mutable","name":"result","nameLocation":"2471:6:144","nodeType":"VariableDeclaration","scope":46338,"src":"2454:23:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem[]"},"typeName":{"baseType":{"id":46279,"nodeType":"UserDefinedTypeName","pathNode":{"id":46278,"name":"RLPItem","nameLocations":["2454:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"2454:7:144"},"referencedDeclaration":46106,"src":"2454:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"id":46280,"nodeType":"ArrayTypeName","src":"2454:9:144","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"}},"visibility":"internal"}],"id":46288,"initialValue":{"arguments":[{"id":46286,"name":"items","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46272,"src":"2494:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46285,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2480:13:144","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct RLPReader.RLPItem memory[] memory)"},"typeName":{"baseType":{"id":46283,"nodeType":"UserDefinedTypeName","pathNode":{"id":46282,"name":"RLPItem","nameLocations":["2484:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"2484:7:144"},"referencedDeclaration":46106,"src":"2484:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"id":46284,"nodeType":"ArrayTypeName","src":"2484:9:144","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"}}},"id":46287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2480:20:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"2454:46:144"},{"assignments":[46290],"declarations":[{"constant":false,"id":46290,"mutability":"mutable","name":"memPtr","nameLocation":"2515:6:144","nodeType":"VariableDeclaration","scope":46338,"src":"2507:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46289,"name":"uint256","nodeType":"ElementaryTypeName","src":"2507:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46298,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46291,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46258,"src":"2524:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46292,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2529:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"2524:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"expression":{"id":46294,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46258,"src":"2553:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46295,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2558:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"2553:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46293,"name":"_payloadOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46855,"src":"2538:14:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":46296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2538:27:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2524:41:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2507:58:144"},{"assignments":[46300],"declarations":[{"constant":false,"id":46300,"mutability":"mutable","name":"dataLen","nameLocation":"2579:7:144","nodeType":"VariableDeclaration","scope":46338,"src":"2571:15:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46299,"name":"uint256","nodeType":"ElementaryTypeName","src":"2571:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46301,"nodeType":"VariableDeclarationStatement","src":"2571:15:144"},{"body":{"id":46334,"nodeType":"Block","src":"2625:161:144","statements":[{"expression":{"id":46313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46309,"name":"dataLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46300,"src":"2633:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":46311,"name":"memPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46290,"src":"2655:6:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46310,"name":"_itemLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46798,"src":"2643:11:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":46312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2643:19:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2633:29:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46314,"nodeType":"ExpressionStatement","src":"2633:29:144"},{"expression":{"id":46322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":46315,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46281,"src":"2670:6:144","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"id":46317,"indexExpression":{"id":46316,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46303,"src":"2677:1:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2670:9:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":46319,"name":"dataLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46300,"src":"2690:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":46320,"name":"memPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46290,"src":"2699:6:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46318,"name":"RLPItem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46106,"src":"2682:7:144","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RLPItem_$46106_storage_ptr_$","typeString":"type(struct RLPReader.RLPItem storage pointer)"}},"id":46321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2682:24:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"src":"2670:36:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46323,"nodeType":"ExpressionStatement","src":"2670:36:144"},{"expression":{"id":46328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46324,"name":"memPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46290,"src":"2714:6:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46325,"name":"memPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46290,"src":"2723:6:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":46326,"name":"dataLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46300,"src":"2732:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2723:16:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2714:25:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46329,"nodeType":"ExpressionStatement","src":"2714:25:144"},{"id":46333,"nodeType":"UncheckedBlock","src":"2748:32:144","statements":[{"expression":{"id":46331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2768:3:144","subExpression":{"id":46330,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46303,"src":"2770:1:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46332,"nodeType":"ExpressionStatement","src":"2768:3:144"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46306,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46303,"src":"2612:1:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":46307,"name":"items","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46272,"src":"2616:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2612:9:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46335,"initializationExpression":{"assignments":[46303],"declarations":[{"constant":false,"id":46303,"mutability":"mutable","name":"i","nameLocation":"2605:1:144","nodeType":"VariableDeclaration","scope":46335,"src":"2597:9:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46302,"name":"uint256","nodeType":"ElementaryTypeName","src":"2597:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46305,"initialValue":{"hexValue":"30","id":46304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2609:1:144","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2597:13:144"},"nodeType":"ForStatement","src":"2592:194:144"},{"expression":{"id":46336,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46281,"src":"2799:6:144","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem memory[] memory"}},"functionReturnParameters":46264,"id":46337,"nodeType":"Return","src":"2792:13:144"}]},"id":46339,"implemented":true,"kind":"function","modifiers":[],"name":"toList","nameLocation":"2315:6:144","nodeType":"FunctionDefinition","parameters":{"id":46259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46258,"mutability":"mutable","name":"item","nameLocation":"2337:4:144","nodeType":"VariableDeclaration","scope":46339,"src":"2322:19:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46257,"nodeType":"UserDefinedTypeName","pathNode":{"id":46256,"name":"RLPItem","nameLocations":["2322:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"2322:7:144"},"referencedDeclaration":46106,"src":"2322:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"2321:21:144"},"returnParameters":{"id":46264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46263,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46339,"src":"2366:16:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_memory_ptr_$dyn_memory_ptr","typeString":"struct RLPReader.RLPItem[]"},"typeName":{"baseType":{"id":46261,"nodeType":"UserDefinedTypeName","pathNode":{"id":46260,"name":"RLPItem","nameLocations":["2366:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"2366:7:144"},"referencedDeclaration":46106,"src":"2366:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"id":46262,"nodeType":"ArrayTypeName","src":"2366:9:144","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RLPItem_$46106_storage_$dyn_storage_ptr","typeString":"struct RLPReader.RLPItem[]"}},"visibility":"internal"}],"src":"2365:18:144"},"scope":46908,"src":"2306:504:144","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":46371,"nodeType":"Block","src":"2976:219:144","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46347,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46342,"src":"2986:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46348,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2991:3:144","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":46103,"src":"2986:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":46349,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2998:1:144","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2986:13:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46353,"nodeType":"IfStatement","src":"2982:31:144","trueBody":{"expression":{"hexValue":"66616c7365","id":46351,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3008:5:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":46346,"id":46352,"nodeType":"Return","src":"3001:12:144"}},{"assignments":[46355],"declarations":[{"constant":false,"id":46355,"mutability":"mutable","name":"byte0","nameLocation":"3026:5:144","nodeType":"VariableDeclaration","scope":46371,"src":"3020:11:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":46354,"name":"uint8","nodeType":"ElementaryTypeName","src":"3020:5:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":46356,"nodeType":"VariableDeclarationStatement","src":"3020:11:144"},{"assignments":[46358],"declarations":[{"constant":false,"id":46358,"mutability":"mutable","name":"memPtr","nameLocation":"3045:6:144","nodeType":"VariableDeclaration","scope":46371,"src":"3037:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46357,"name":"uint256","nodeType":"ElementaryTypeName","src":"3037:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46361,"initialValue":{"expression":{"id":46359,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46342,"src":"3054:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46360,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3059:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"3054:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3037:28:144"},{"AST":{"nodeType":"YulBlock","src":"3080:45:144","statements":[{"nodeType":"YulAssignment","src":"3088:31:144","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3102:1:144","type":"","value":"0"},{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3111:6:144"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3105:5:144"},"nodeType":"YulFunctionCall","src":"3105:13:144"}],"functionName":{"name":"byte","nodeType":"YulIdentifier","src":"3097:4:144"},"nodeType":"YulFunctionCall","src":"3097:22:144"},"variableNames":[{"name":"byte0","nodeType":"YulIdentifier","src":"3088:5:144"}]}]},"evmVersion":"london","externalReferences":[{"declaration":46355,"isOffset":false,"isSlot":false,"src":"3088:5:144","valueSize":1},{"declaration":46358,"isOffset":false,"isSlot":false,"src":"3111:6:144","valueSize":1}],"id":46362,"nodeType":"InlineAssembly","src":"3071:54:144"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":46365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46363,"name":"byte0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46355,"src":"3135:5:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":46364,"name":"LIST_SHORT_START","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46095,"src":"3143:16:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"3135:24:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46368,"nodeType":"IfStatement","src":"3131:42:144","trueBody":{"expression":{"hexValue":"66616c7365","id":46366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3168:5:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":46346,"id":46367,"nodeType":"Return","src":"3161:12:144"}},{"expression":{"hexValue":"74727565","id":46369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3186:4:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":46346,"id":46370,"nodeType":"Return","src":"3179:11:144"}]},"id":46372,"implemented":true,"kind":"function","modifiers":[],"name":"isList","nameLocation":"2919:6:144","nodeType":"FunctionDefinition","parameters":{"id":46343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46342,"mutability":"mutable","name":"item","nameLocation":"2941:4:144","nodeType":"VariableDeclaration","scope":46372,"src":"2926:19:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46341,"nodeType":"UserDefinedTypeName","pathNode":{"id":46340,"name":"RLPItem","nameLocations":["2926:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"2926:7:144"},"referencedDeclaration":46106,"src":"2926:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"2925:21:144"},"returnParameters":{"id":46346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46345,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46372,"src":"2970:4:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":46344,"name":"bool","nodeType":"ElementaryTypeName","src":"2970:4:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2969:6:144"},"scope":46908,"src":"2910:285:144","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":46396,"nodeType":"Block","src":"3427:160:144","statements":[{"assignments":[46381],"declarations":[{"constant":false,"id":46381,"mutability":"mutable","name":"ptr","nameLocation":"3441:3:144","nodeType":"VariableDeclaration","scope":46396,"src":"3433:11:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46380,"name":"uint256","nodeType":"ElementaryTypeName","src":"3433:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46384,"initialValue":{"expression":{"id":46382,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46375,"src":"3447:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46383,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3452:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"3447:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3433:25:144"},{"assignments":[46386],"declarations":[{"constant":false,"id":46386,"mutability":"mutable","name":"len","nameLocation":"3472:3:144","nodeType":"VariableDeclaration","scope":46396,"src":"3464:11:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46385,"name":"uint256","nodeType":"ElementaryTypeName","src":"3464:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46389,"initialValue":{"expression":{"id":46387,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46375,"src":"3478:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46388,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3483:3:144","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":46103,"src":"3478:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3464:22:144"},{"assignments":[46391],"declarations":[{"constant":false,"id":46391,"mutability":"mutable","name":"result","nameLocation":"3500:6:144","nodeType":"VariableDeclaration","scope":46396,"src":"3492:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":46390,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3492:7:144","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":46392,"nodeType":"VariableDeclarationStatement","src":"3492:14:144"},{"AST":{"nodeType":"YulBlock","src":"3521:43:144","statements":[{"nodeType":"YulAssignment","src":"3529:29:144","value":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"3549:3:144"},{"name":"len","nodeType":"YulIdentifier","src":"3554:3:144"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"3539:9:144"},"nodeType":"YulFunctionCall","src":"3539:19:144"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"3529:6:144"}]}]},"evmVersion":"london","externalReferences":[{"declaration":46386,"isOffset":false,"isSlot":false,"src":"3554:3:144","valueSize":1},{"declaration":46381,"isOffset":false,"isSlot":false,"src":"3549:3:144","valueSize":1},{"declaration":46391,"isOffset":false,"isSlot":false,"src":"3529:6:144","valueSize":1}],"id":46393,"nodeType":"InlineAssembly","src":"3512:52:144"},{"expression":{"id":46394,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46391,"src":"3576:6:144","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":46379,"id":46395,"nodeType":"Return","src":"3569:13:144"}]},"id":46397,"implemented":true,"kind":"function","modifiers":[],"name":"rlpBytesKeccak256","nameLocation":"3356:17:144","nodeType":"FunctionDefinition","parameters":{"id":46376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46375,"mutability":"mutable","name":"item","nameLocation":"3389:4:144","nodeType":"VariableDeclaration","scope":46397,"src":"3374:19:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46374,"nodeType":"UserDefinedTypeName","pathNode":{"id":46373,"name":"RLPItem","nameLocations":["3374:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"3374:7:144"},"referencedDeclaration":46106,"src":"3374:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"3373:21:144"},"returnParameters":{"id":46379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46378,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46397,"src":"3418:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":46377,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3418:7:144","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3417:9:144"},"scope":46908,"src":"3347:240:144","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":46432,"nodeType":"Block","src":"3678:176:144","statements":[{"assignments":[46408],"declarations":[{"constant":false,"id":46408,"mutability":"mutable","name":"offset","nameLocation":"3692:6:144","nodeType":"VariableDeclaration","scope":46432,"src":"3684:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46407,"name":"uint256","nodeType":"ElementaryTypeName","src":"3684:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46413,"initialValue":{"arguments":[{"expression":{"id":46410,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46400,"src":"3716:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46411,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3721:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"3716:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46409,"name":"_payloadOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46855,"src":"3701:14:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":46412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3701:27:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3684:44:144"},{"assignments":[46415],"declarations":[{"constant":false,"id":46415,"mutability":"mutable","name":"memPtr","nameLocation":"3742:6:144","nodeType":"VariableDeclaration","scope":46432,"src":"3734:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46414,"name":"uint256","nodeType":"ElementaryTypeName","src":"3734:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46420,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46416,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46400,"src":"3751:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46417,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3756:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"3751:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":46418,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46408,"src":"3765:6:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3751:20:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3734:37:144"},{"assignments":[46422],"declarations":[{"constant":false,"id":46422,"mutability":"mutable","name":"len","nameLocation":"3785:3:144","nodeType":"VariableDeclaration","scope":46432,"src":"3777:11:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46421,"name":"uint256","nodeType":"ElementaryTypeName","src":"3777:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46427,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46423,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46400,"src":"3791:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46424,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3796:3:144","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":46103,"src":"3791:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":46425,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46408,"src":"3802:6:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3791:17:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3777:31:144"},{"expression":{"components":[{"id":46428,"name":"memPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46415,"src":"3837:6:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":46429,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46422,"src":"3845:3:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":46430,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3836:13:144","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":46406,"id":46431,"nodeType":"Return","src":"3829:20:144"}]},"id":46433,"implemented":true,"kind":"function","modifiers":[],"name":"payloadLocation","nameLocation":"3600:15:144","nodeType":"FunctionDefinition","parameters":{"id":46401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46400,"mutability":"mutable","name":"item","nameLocation":"3631:4:144","nodeType":"VariableDeclaration","scope":46433,"src":"3616:19:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46399,"nodeType":"UserDefinedTypeName","pathNode":{"id":46398,"name":"RLPItem","nameLocations":["3616:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"3616:7:144"},"referencedDeclaration":46106,"src":"3616:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"3615:21:144"},"returnParameters":{"id":46406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46403,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46433,"src":"3660:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46402,"name":"uint256","nodeType":"ElementaryTypeName","src":"3660:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":46405,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46433,"src":"3669:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46404,"name":"uint256","nodeType":"ElementaryTypeName","src":"3669:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3659:18:144"},"scope":46908,"src":"3591:263:144","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":46455,"nodeType":"Block","src":"4081:163:144","statements":[{"assignments":[46442,46444],"declarations":[{"constant":false,"id":46442,"mutability":"mutable","name":"memPtr","nameLocation":"4096:6:144","nodeType":"VariableDeclaration","scope":46455,"src":"4088:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46441,"name":"uint256","nodeType":"ElementaryTypeName","src":"4088:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":46444,"mutability":"mutable","name":"len","nameLocation":"4112:3:144","nodeType":"VariableDeclaration","scope":46455,"src":"4104:11:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46443,"name":"uint256","nodeType":"ElementaryTypeName","src":"4104:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46448,"initialValue":{"arguments":[{"id":46446,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46436,"src":"4135:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":46445,"name":"payloadLocation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46433,"src":"4119:15:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256,uint256)"}},"id":46447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4119:21:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4087:53:144"},{"assignments":[46450],"declarations":[{"constant":false,"id":46450,"mutability":"mutable","name":"result","nameLocation":"4154:6:144","nodeType":"VariableDeclaration","scope":46455,"src":"4146:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":46449,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4146:7:144","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":46451,"nodeType":"VariableDeclarationStatement","src":"4146:14:144"},{"AST":{"nodeType":"YulBlock","src":"4175:46:144","statements":[{"nodeType":"YulAssignment","src":"4183:32:144","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4203:6:144"},{"name":"len","nodeType":"YulIdentifier","src":"4211:3:144"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"4193:9:144"},"nodeType":"YulFunctionCall","src":"4193:22:144"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"4183:6:144"}]}]},"evmVersion":"london","externalReferences":[{"declaration":46444,"isOffset":false,"isSlot":false,"src":"4211:3:144","valueSize":1},{"declaration":46442,"isOffset":false,"isSlot":false,"src":"4203:6:144","valueSize":1},{"declaration":46450,"isOffset":false,"isSlot":false,"src":"4183:6:144","valueSize":1}],"id":46452,"nodeType":"InlineAssembly","src":"4166:55:144"},{"expression":{"id":46453,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46450,"src":"4233:6:144","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":46440,"id":46454,"nodeType":"Return","src":"4226:13:144"}]},"id":46456,"implemented":true,"kind":"function","modifiers":[],"name":"payloadKeccak256","nameLocation":"4011:16:144","nodeType":"FunctionDefinition","parameters":{"id":46437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46436,"mutability":"mutable","name":"item","nameLocation":"4043:4:144","nodeType":"VariableDeclaration","scope":46456,"src":"4028:19:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46435,"nodeType":"UserDefinedTypeName","pathNode":{"id":46434,"name":"RLPItem","nameLocations":["4028:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"4028:7:144"},"referencedDeclaration":46106,"src":"4028:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"4027:21:144"},"returnParameters":{"id":46440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46439,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46456,"src":"4072:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":46438,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4072:7:144","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4071:9:144"},"scope":46908,"src":"4002:242:144","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":46494,"nodeType":"Block","src":"4413:223:144","statements":[{"assignments":[46466],"declarations":[{"constant":false,"id":46466,"mutability":"mutable","name":"result","nameLocation":"4432:6:144","nodeType":"VariableDeclaration","scope":46494,"src":"4419:19:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":46465,"name":"bytes","nodeType":"ElementaryTypeName","src":"4419:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":46472,"initialValue":{"arguments":[{"expression":{"id":46469,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46460,"src":"4451:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46470,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4456:3:144","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":46103,"src":"4451:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46468,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"4441:9:144","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":46467,"name":"bytes","nodeType":"ElementaryTypeName","src":"4445:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":46471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4441:19:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4419:41:144"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46473,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46466,"src":"4470:6:144","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":46474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4477:6:144","memberName":"length","nodeType":"MemberAccess","src":"4470:13:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":46475,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4487:1:144","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4470:18:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46479,"nodeType":"IfStatement","src":"4466:37:144","trueBody":{"expression":{"id":46477,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46466,"src":"4497:6:144","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":46464,"id":46478,"nodeType":"Return","src":"4490:13:144"}},{"assignments":[46481],"declarations":[{"constant":false,"id":46481,"mutability":"mutable","name":"ptr","nameLocation":"4518:3:144","nodeType":"VariableDeclaration","scope":46494,"src":"4510:11:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46480,"name":"uint256","nodeType":"ElementaryTypeName","src":"4510:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46482,"nodeType":"VariableDeclarationStatement","src":"4510:11:144"},{"AST":{"nodeType":"YulBlock","src":"4536:38:144","statements":[{"nodeType":"YulAssignment","src":"4544:24:144","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4555:4:144","type":"","value":"0x20"},{"name":"result","nodeType":"YulIdentifier","src":"4561:6:144"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4551:3:144"},"nodeType":"YulFunctionCall","src":"4551:17:144"},"variableNames":[{"name":"ptr","nodeType":"YulIdentifier","src":"4544:3:144"}]}]},"evmVersion":"london","externalReferences":[{"declaration":46481,"isOffset":false,"isSlot":false,"src":"4544:3:144","valueSize":1},{"declaration":46466,"isOffset":false,"isSlot":false,"src":"4561:6:144","valueSize":1}],"id":46483,"nodeType":"InlineAssembly","src":"4527:47:144"},{"expression":{"arguments":[{"expression":{"id":46485,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46460,"src":"4585:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46486,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4590:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"4585:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":46487,"name":"ptr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46481,"src":"4598:3:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":46488,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46460,"src":"4603:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46489,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4608:3:144","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":46103,"src":"4603:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46484,"name":"copy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46907,"src":"4580:4:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":46490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4580:32:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46491,"nodeType":"ExpressionStatement","src":"4580:32:144"},{"expression":{"id":46492,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46466,"src":"4625:6:144","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":46464,"id":46493,"nodeType":"Return","src":"4618:13:144"}]},"documentation":{"id":46457,"nodeType":"StructuredDocumentation","src":"4248:43:144","text":"RLPItem conversions into data types *"},"id":46495,"implemented":true,"kind":"function","modifiers":[],"name":"toRlpBytes","nameLocation":"4344:10:144","nodeType":"FunctionDefinition","parameters":{"id":46461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46460,"mutability":"mutable","name":"item","nameLocation":"4370:4:144","nodeType":"VariableDeclaration","scope":46495,"src":"4355:19:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46459,"nodeType":"UserDefinedTypeName","pathNode":{"id":46458,"name":"RLPItem","nameLocations":["4355:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"4355:7:144"},"referencedDeclaration":46106,"src":"4355:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"4354:21:144"},"returnParameters":{"id":46464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46463,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46495,"src":"4399:12:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":46462,"name":"bytes","nodeType":"ElementaryTypeName","src":"4399:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4398:14:144"},"scope":46908,"src":"4335:301:144","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":46526,"nodeType":"Block","src":"4751:187:144","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46504,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46498,"src":"4765:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46505,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4770:3:144","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":46103,"src":"4765:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":46506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4777:1:144","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4765:13:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":46503,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4757:7:144","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":46508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4757:22:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46509,"nodeType":"ExpressionStatement","src":"4757:22:144"},{"assignments":[46511],"declarations":[{"constant":false,"id":46511,"mutability":"mutable","name":"result","nameLocation":"4793:6:144","nodeType":"VariableDeclaration","scope":46526,"src":"4785:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46510,"name":"uint256","nodeType":"ElementaryTypeName","src":"4785:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46512,"nodeType":"VariableDeclarationStatement","src":"4785:14:144"},{"assignments":[46514],"declarations":[{"constant":false,"id":46514,"mutability":"mutable","name":"memPtr","nameLocation":"4813:6:144","nodeType":"VariableDeclaration","scope":46526,"src":"4805:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46513,"name":"uint256","nodeType":"ElementaryTypeName","src":"4805:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46517,"initialValue":{"expression":{"id":46515,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46498,"src":"4822:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46516,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4827:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"4822:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4805:28:144"},{"AST":{"nodeType":"YulBlock","src":"4848:46:144","statements":[{"nodeType":"YulAssignment","src":"4856:32:144","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4871:1:144","type":"","value":"0"},{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4880:6:144"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4874:5:144"},"nodeType":"YulFunctionCall","src":"4874:13:144"}],"functionName":{"name":"byte","nodeType":"YulIdentifier","src":"4866:4:144"},"nodeType":"YulFunctionCall","src":"4866:22:144"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"4856:6:144"}]}]},"evmVersion":"london","externalReferences":[{"declaration":46514,"isOffset":false,"isSlot":false,"src":"4880:6:144","valueSize":1},{"declaration":46511,"isOffset":false,"isSlot":false,"src":"4856:6:144","valueSize":1}],"id":46518,"nodeType":"InlineAssembly","src":"4839:55:144"},{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46519,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46511,"src":"4907:6:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":46520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4917:1:144","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4907:11:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"74727565","id":46523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4929:4:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"id":46524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"4907:26:144","trueExpression":{"hexValue":"66616c7365","id":46522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4921:5:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":46502,"id":46525,"nodeType":"Return","src":"4900:33:144"}]},"id":46527,"implemented":true,"kind":"function","modifiers":[],"name":"toBoolean","nameLocation":"4691:9:144","nodeType":"FunctionDefinition","parameters":{"id":46499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46498,"mutability":"mutable","name":"item","nameLocation":"4716:4:144","nodeType":"VariableDeclaration","scope":46527,"src":"4701:19:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46497,"nodeType":"UserDefinedTypeName","pathNode":{"id":46496,"name":"RLPItem","nameLocations":["4701:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"4701:7:144"},"referencedDeclaration":46106,"src":"4701:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"4700:21:144"},"returnParameters":{"id":46502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46501,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46527,"src":"4745:4:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":46500,"name":"bool","nodeType":"ElementaryTypeName","src":"4745:4:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4744:6:144"},"scope":46908,"src":"4682:256:144","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":46552,"nodeType":"Block","src":"5014:114:144","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46536,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46530,"src":"5064:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46537,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5069:3:144","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":46103,"src":"5064:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3231","id":46538,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5076:2:144","typeDescriptions":{"typeIdentifier":"t_rational_21_by_1","typeString":"int_const 21"},"value":"21"},"src":"5064:14:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":46535,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5056:7:144","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":46540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5056:23:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46541,"nodeType":"ExpressionStatement","src":"5056:23:144"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":46547,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46530,"src":"5116:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}],"id":46546,"name":"toUint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46603,"src":"5109:6:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256)"}},"id":46548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5109:12:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46545,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5101:7:144","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":46544,"name":"uint160","nodeType":"ElementaryTypeName","src":"5101:7:144","typeDescriptions":{}}},"id":46549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5101:21:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":46543,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5093:7:144","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":46542,"name":"address","nodeType":"ElementaryTypeName","src":"5093:7:144","typeDescriptions":{}}},"id":46550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5093:30:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":46534,"id":46551,"nodeType":"Return","src":"5086:37:144"}]},"id":46553,"implemented":true,"kind":"function","modifiers":[],"name":"toAddress","nameLocation":"4951:9:144","nodeType":"FunctionDefinition","parameters":{"id":46531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46530,"mutability":"mutable","name":"item","nameLocation":"4976:4:144","nodeType":"VariableDeclaration","scope":46553,"src":"4961:19:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46529,"nodeType":"UserDefinedTypeName","pathNode":{"id":46528,"name":"RLPItem","nameLocations":["4961:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"4961:7:144"},"referencedDeclaration":46106,"src":"4961:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"4960:21:144"},"returnParameters":{"id":46534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46533,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46553,"src":"5005:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":46532,"name":"address","nodeType":"ElementaryTypeName","src":"5005:7:144","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5004:9:144"},"scope":46908,"src":"4942:186:144","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":46602,"nodeType":"Block","src":"5201:414:144","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":46572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46562,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46556,"src":"5215:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46563,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5220:3:144","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":46103,"src":"5215:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":46564,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5226:1:144","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5215:12:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46566,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46556,"src":"5231:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46567,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5236:3:144","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":46103,"src":"5231:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_rational_34_by_1","typeString":"int_const 34"},"id":46570,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3333","id":46568,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5242:2:144","typeDescriptions":{"typeIdentifier":"t_rational_33_by_1","typeString":"int_const 33"},"value":"33"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":46569,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5247:1:144","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5242:6:144","typeDescriptions":{"typeIdentifier":"t_rational_34_by_1","typeString":"int_const 34"}},"src":"5231:17:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5215:33:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":46561,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5207:7:144","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":46573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5207:42:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46574,"nodeType":"ExpressionStatement","src":"5207:42:144"},{"assignments":[46576],"declarations":[{"constant":false,"id":46576,"mutability":"mutable","name":"offset","nameLocation":"5264:6:144","nodeType":"VariableDeclaration","scope":46602,"src":"5256:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46575,"name":"uint256","nodeType":"ElementaryTypeName","src":"5256:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46581,"initialValue":{"arguments":[{"expression":{"id":46578,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46556,"src":"5288:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46579,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5293:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"5288:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46577,"name":"_payloadOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46855,"src":"5273:14:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":46580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5273:27:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5256:44:144"},{"assignments":[46583],"declarations":[{"constant":false,"id":46583,"mutability":"mutable","name":"len","nameLocation":"5314:3:144","nodeType":"VariableDeclaration","scope":46602,"src":"5306:11:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46582,"name":"uint256","nodeType":"ElementaryTypeName","src":"5306:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46588,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46584,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46556,"src":"5320:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46585,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5325:3:144","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":46103,"src":"5320:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":46586,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46576,"src":"5331:6:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5320:17:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5306:31:144"},{"assignments":[46590],"declarations":[{"constant":false,"id":46590,"mutability":"mutable","name":"result","nameLocation":"5352:6:144","nodeType":"VariableDeclaration","scope":46602,"src":"5344:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46589,"name":"uint256","nodeType":"ElementaryTypeName","src":"5344:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46591,"nodeType":"VariableDeclarationStatement","src":"5344:14:144"},{"assignments":[46593],"declarations":[{"constant":false,"id":46593,"mutability":"mutable","name":"memPtr","nameLocation":"5372:6:144","nodeType":"VariableDeclaration","scope":46602,"src":"5364:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46592,"name":"uint256","nodeType":"ElementaryTypeName","src":"5364:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46598,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46594,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46556,"src":"5381:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46595,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5386:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"5381:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":46596,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46576,"src":"5395:6:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5381:20:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5364:37:144"},{"AST":{"nodeType":"YulBlock","src":"5416:175:144","statements":[{"nodeType":"YulAssignment","src":"5424:23:144","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"5440:6:144"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5434:5:144"},"nodeType":"YulFunctionCall","src":"5434:13:144"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"5424:6:144"}]},{"body":{"nodeType":"YulBlock","src":"5522:63:144","statements":[{"nodeType":"YulAssignment","src":"5532:45:144","value":{"arguments":[{"name":"result","nodeType":"YulIdentifier","src":"5546:6:144"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5558:3:144","type":"","value":"256"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5567:2:144","type":"","value":"32"},{"name":"len","nodeType":"YulIdentifier","src":"5571:3:144"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5563:3:144"},"nodeType":"YulFunctionCall","src":"5563:12:144"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"5554:3:144"},"nodeType":"YulFunctionCall","src":"5554:22:144"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"5542:3:144"},"nodeType":"YulFunctionCall","src":"5542:35:144"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"5532:6:144"}]}]},"condition":{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"5513:3:144"},{"kind":"number","nodeType":"YulLiteral","src":"5518:2:144","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5510:2:144"},"nodeType":"YulFunctionCall","src":"5510:11:144"},"nodeType":"YulIf","src":"5507:78:144"}]},"evmVersion":"london","externalReferences":[{"declaration":46583,"isOffset":false,"isSlot":false,"src":"5513:3:144","valueSize":1},{"declaration":46583,"isOffset":false,"isSlot":false,"src":"5571:3:144","valueSize":1},{"declaration":46593,"isOffset":false,"isSlot":false,"src":"5440:6:144","valueSize":1},{"declaration":46590,"isOffset":false,"isSlot":false,"src":"5424:6:144","valueSize":1},{"declaration":46590,"isOffset":false,"isSlot":false,"src":"5532:6:144","valueSize":1},{"declaration":46590,"isOffset":false,"isSlot":false,"src":"5546:6:144","valueSize":1}],"id":46599,"nodeType":"InlineAssembly","src":"5407:184:144"},{"expression":{"id":46600,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46590,"src":"5604:6:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":46560,"id":46601,"nodeType":"Return","src":"5597:13:144"}]},"id":46603,"implemented":true,"kind":"function","modifiers":[],"name":"toUint","nameLocation":"5141:6:144","nodeType":"FunctionDefinition","parameters":{"id":46557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46556,"mutability":"mutable","name":"item","nameLocation":"5163:4:144","nodeType":"VariableDeclaration","scope":46603,"src":"5148:19:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46555,"nodeType":"UserDefinedTypeName","pathNode":{"id":46554,"name":"RLPItem","nameLocations":["5148:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"5148:7:144"},"referencedDeclaration":46106,"src":"5148:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"5147:21:144"},"returnParameters":{"id":46560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46559,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46603,"src":"5192:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46558,"name":"uint256","nodeType":"ElementaryTypeName","src":"5192:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5191:9:144"},"scope":46908,"src":"5132:483:144","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":46631,"nodeType":"Block","src":"5723:187:144","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46612,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46606,"src":"5760:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46613,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5765:3:144","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":46103,"src":"5760:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3333","id":46614,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5772:2:144","typeDescriptions":{"typeIdentifier":"t_rational_33_by_1","typeString":"int_const 33"},"value":"33"},"src":"5760:14:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":46611,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5752:7:144","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":46616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5752:23:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46617,"nodeType":"ExpressionStatement","src":"5752:23:144"},{"assignments":[46619],"declarations":[{"constant":false,"id":46619,"mutability":"mutable","name":"result","nameLocation":"5790:6:144","nodeType":"VariableDeclaration","scope":46631,"src":"5782:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46618,"name":"uint256","nodeType":"ElementaryTypeName","src":"5782:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46620,"nodeType":"VariableDeclarationStatement","src":"5782:14:144"},{"assignments":[46622],"declarations":[{"constant":false,"id":46622,"mutability":"mutable","name":"memPtr","nameLocation":"5810:6:144","nodeType":"VariableDeclaration","scope":46631,"src":"5802:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46621,"name":"uint256","nodeType":"ElementaryTypeName","src":"5802:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46627,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46623,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46606,"src":"5819:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46624,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5824:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"5819:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":46625,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5833:1:144","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5819:15:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5802:32:144"},{"AST":{"nodeType":"YulBlock","src":"5849:37:144","statements":[{"nodeType":"YulAssignment","src":"5857:23:144","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"5873:6:144"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5867:5:144"},"nodeType":"YulFunctionCall","src":"5867:13:144"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"5857:6:144"}]}]},"evmVersion":"london","externalReferences":[{"declaration":46622,"isOffset":false,"isSlot":false,"src":"5873:6:144","valueSize":1},{"declaration":46619,"isOffset":false,"isSlot":false,"src":"5857:6:144","valueSize":1}],"id":46628,"nodeType":"InlineAssembly","src":"5840:46:144"},{"expression":{"id":46629,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46619,"src":"5899:6:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":46610,"id":46630,"nodeType":"Return","src":"5892:13:144"}]},"id":46632,"implemented":true,"kind":"function","modifiers":[],"name":"toUintStrict","nameLocation":"5657:12:144","nodeType":"FunctionDefinition","parameters":{"id":46607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46606,"mutability":"mutable","name":"item","nameLocation":"5685:4:144","nodeType":"VariableDeclaration","scope":46632,"src":"5670:19:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46605,"nodeType":"UserDefinedTypeName","pathNode":{"id":46604,"name":"RLPItem","nameLocations":["5670:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"5670:7:144"},"referencedDeclaration":46106,"src":"5670:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"5669:21:144"},"returnParameters":{"id":46610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46609,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46632,"src":"5714:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46608,"name":"uint256","nodeType":"ElementaryTypeName","src":"5714:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5713:9:144"},"scope":46908,"src":"5648:262:144","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":46683,"nodeType":"Block","src":"5989:321:144","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46641,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46635,"src":"6003:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46642,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6008:3:144","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":46103,"src":"6003:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":46643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6014:1:144","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6003:12:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":46640,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5995:7:144","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":46645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5995:21:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46646,"nodeType":"ExpressionStatement","src":"5995:21:144"},{"assignments":[46648],"declarations":[{"constant":false,"id":46648,"mutability":"mutable","name":"offset","nameLocation":"6031:6:144","nodeType":"VariableDeclaration","scope":46683,"src":"6023:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46647,"name":"uint256","nodeType":"ElementaryTypeName","src":"6023:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46653,"initialValue":{"arguments":[{"expression":{"id":46650,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46635,"src":"6055:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46651,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6060:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"6055:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46649,"name":"_payloadOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46855,"src":"6040:14:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":46652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6040:27:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6023:44:144"},{"assignments":[46655],"declarations":[{"constant":false,"id":46655,"mutability":"mutable","name":"len","nameLocation":"6081:3:144","nodeType":"VariableDeclaration","scope":46683,"src":"6073:11:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46654,"name":"uint256","nodeType":"ElementaryTypeName","src":"6073:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46660,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46656,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46635,"src":"6087:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46657,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6092:3:144","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":46103,"src":"6087:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":46658,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46648,"src":"6098:6:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6087:17:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6073:31:144"},{"assignments":[46662],"declarations":[{"constant":false,"id":46662,"mutability":"mutable","name":"result","nameLocation":"6138:6:144","nodeType":"VariableDeclaration","scope":46683,"src":"6125:19:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":46661,"name":"bytes","nodeType":"ElementaryTypeName","src":"6125:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":46667,"initialValue":{"arguments":[{"id":46665,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46655,"src":"6157:3:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46664,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"6147:9:144","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":46663,"name":"bytes","nodeType":"ElementaryTypeName","src":"6151:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":46666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6147:14:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"6125:36:144"},{"assignments":[46669],"declarations":[{"constant":false,"id":46669,"mutability":"mutable","name":"destPtr","nameLocation":"6176:7:144","nodeType":"VariableDeclaration","scope":46683,"src":"6168:15:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46668,"name":"uint256","nodeType":"ElementaryTypeName","src":"6168:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46670,"nodeType":"VariableDeclarationStatement","src":"6168:15:144"},{"AST":{"nodeType":"YulBlock","src":"6198:42:144","statements":[{"nodeType":"YulAssignment","src":"6206:28:144","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6221:4:144","type":"","value":"0x20"},{"name":"result","nodeType":"YulIdentifier","src":"6227:6:144"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6217:3:144"},"nodeType":"YulFunctionCall","src":"6217:17:144"},"variableNames":[{"name":"destPtr","nodeType":"YulIdentifier","src":"6206:7:144"}]}]},"evmVersion":"london","externalReferences":[{"declaration":46669,"isOffset":false,"isSlot":false,"src":"6206:7:144","valueSize":1},{"declaration":46662,"isOffset":false,"isSlot":false,"src":"6227:6:144","valueSize":1}],"id":46671,"nodeType":"InlineAssembly","src":"6189:51:144"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46673,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46635,"src":"6251:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46674,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6256:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"6251:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":46675,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46648,"src":"6265:6:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6251:20:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":46677,"name":"destPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46669,"src":"6273:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":46678,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46655,"src":"6282:3:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46672,"name":"copy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46907,"src":"6246:4:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":46679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6246:40:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46680,"nodeType":"ExpressionStatement","src":"6246:40:144"},{"expression":{"id":46681,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46662,"src":"6299:6:144","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":46639,"id":46682,"nodeType":"Return","src":"6292:13:144"}]},"id":46684,"implemented":true,"kind":"function","modifiers":[],"name":"toBytes","nameLocation":"5923:7:144","nodeType":"FunctionDefinition","parameters":{"id":46636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46635,"mutability":"mutable","name":"item","nameLocation":"5946:4:144","nodeType":"VariableDeclaration","scope":46684,"src":"5931:19:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46634,"nodeType":"UserDefinedTypeName","pathNode":{"id":46633,"name":"RLPItem","nameLocations":["5931:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"5931:7:144"},"referencedDeclaration":46106,"src":"5931:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"5930:21:144"},"returnParameters":{"id":46639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46638,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46684,"src":"5975:12:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":46637,"name":"bytes","nodeType":"ElementaryTypeName","src":"5975:5:144","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5974:14:144"},"scope":46908,"src":"5914:396:144","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":46739,"nodeType":"Block","src":"6478:312:144","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46692,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46687,"src":"6488:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46693,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6493:3:144","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":46103,"src":"6488:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":46694,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6500:1:144","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6488:13:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46698,"nodeType":"IfStatement","src":"6484:27:144","trueBody":{"expression":{"hexValue":"30","id":46696,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6510:1:144","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":46691,"id":46697,"nodeType":"Return","src":"6503:8:144"}},{"assignments":[46700],"declarations":[{"constant":false,"id":46700,"mutability":"mutable","name":"count","nameLocation":"6526:5:144","nodeType":"VariableDeclaration","scope":46739,"src":"6518:13:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46699,"name":"uint256","nodeType":"ElementaryTypeName","src":"6518:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46702,"initialValue":{"hexValue":"30","id":46701,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6534:1:144","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6518:17:144"},{"assignments":[46704],"declarations":[{"constant":false,"id":46704,"mutability":"mutable","name":"currPtr","nameLocation":"6549:7:144","nodeType":"VariableDeclaration","scope":46739,"src":"6541:15:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46703,"name":"uint256","nodeType":"ElementaryTypeName","src":"6541:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46712,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46705,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46687,"src":"6559:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46706,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6564:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"6559:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"expression":{"id":46708,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46687,"src":"6588:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46709,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6593:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"6588:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46707,"name":"_payloadOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46855,"src":"6573:14:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":46710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6573:27:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6559:41:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6541:59:144"},{"assignments":[46714],"declarations":[{"constant":false,"id":46714,"mutability":"mutable","name":"endPtr","nameLocation":"6614:6:144","nodeType":"VariableDeclaration","scope":46739,"src":"6606:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46713,"name":"uint256","nodeType":"ElementaryTypeName","src":"6606:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46720,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46715,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46687,"src":"6623:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46716,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6628:6:144","memberName":"memPtr","nodeType":"MemberAccess","referencedDeclaration":46105,"src":"6623:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":46717,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46687,"src":"6637:4:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":46718,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6642:3:144","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":46103,"src":"6637:8:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6623:22:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6606:39:144"},{"body":{"id":46735,"nodeType":"Block","src":"6676:91:144","statements":[{"expression":{"id":46730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46724,"name":"currPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46704,"src":"6684:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46725,"name":"currPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46704,"src":"6694:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":46727,"name":"currPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46704,"src":"6716:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46726,"name":"_itemLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46798,"src":"6704:11:144","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":46728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6704:20:144","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6694:30:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6684:40:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46731,"nodeType":"ExpressionStatement","src":"6684:40:144"},{"expression":{"id":46733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"6753:7:144","subExpression":{"id":46732,"name":"count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46700,"src":"6753:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46734,"nodeType":"ExpressionStatement","src":"6753:7:144"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46721,"name":"currPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46704,"src":"6658:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":46722,"name":"endPtr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46714,"src":"6668:6:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6658:16:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46736,"nodeType":"WhileStatement","src":"6651:116:144"},{"expression":{"id":46737,"name":"count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46700,"src":"6780:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":46691,"id":46738,"nodeType":"Return","src":"6773:12:144"}]},"id":46740,"implemented":true,"kind":"function","modifiers":[],"name":"numItems","nameLocation":"6417:8:144","nodeType":"FunctionDefinition","parameters":{"id":46688,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46687,"mutability":"mutable","name":"item","nameLocation":"6441:4:144","nodeType":"VariableDeclaration","scope":46740,"src":"6426:19:144","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem"},"typeName":{"id":46686,"nodeType":"UserDefinedTypeName","pathNode":{"id":46685,"name":"RLPItem","nameLocations":["6426:7:144"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"6426:7:144"},"referencedDeclaration":46106,"src":"6426:7:144","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}},"visibility":"internal"}],"src":"6425:21:144"},"returnParameters":{"id":46691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46690,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46740,"src":"6469:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46689,"name":"uint256","nodeType":"ElementaryTypeName","src":"6469:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6468:9:144"},"scope":46908,"src":"6408:382:144","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":46797,"nodeType":"Block","src":"6903:1008:144","statements":[{"assignments":[46748],"declarations":[{"constant":false,"id":46748,"mutability":"mutable","name":"itemLen","nameLocation":"6917:7:144","nodeType":"VariableDeclaration","scope":46797,"src":"6909:15:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46747,"name":"uint256","nodeType":"ElementaryTypeName","src":"6909:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46749,"nodeType":"VariableDeclarationStatement","src":"6909:15:144"},{"assignments":[46751],"declarations":[{"constant":false,"id":46751,"mutability":"mutable","name":"byte0","nameLocation":"6938:5:144","nodeType":"VariableDeclaration","scope":46797,"src":"6930:13:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46750,"name":"uint256","nodeType":"ElementaryTypeName","src":"6930:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46752,"nodeType":"VariableDeclarationStatement","src":"6930:13:144"},{"AST":{"nodeType":"YulBlock","src":"6958:45:144","statements":[{"nodeType":"YulAssignment","src":"6966:31:144","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6980:1:144","type":"","value":"0"},{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6989:6:144"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6983:5:144"},"nodeType":"YulFunctionCall","src":"6983:13:144"}],"functionName":{"name":"byte","nodeType":"YulIdentifier","src":"6975:4:144"},"nodeType":"YulFunctionCall","src":"6975:22:144"},"variableNames":[{"name":"byte0","nodeType":"YulIdentifier","src":"6966:5:144"}]}]},"evmVersion":"london","externalReferences":[{"declaration":46751,"isOffset":false,"isSlot":false,"src":"6966:5:144","valueSize":1},{"declaration":46742,"isOffset":false,"isSlot":false,"src":"6989:6:144","valueSize":1}],"id":46753,"nodeType":"InlineAssembly","src":"6949:54:144"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46754,"name":"byte0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46751,"src":"7013:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":46755,"name":"STRING_SHORT_START","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46089,"src":"7021:18:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"7013:26:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46761,"name":"byte0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46751,"src":"7067:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":46762,"name":"STRING_LONG_START","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46092,"src":"7075:17:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"7067:25:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46772,"name":"byte0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46751,"src":"7149:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":46773,"name":"LIST_SHORT_START","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46095,"src":"7157:16:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"7149:24:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46777,"name":"byte0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46751,"src":"7537:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":46778,"name":"LIST_LONG_START","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46098,"src":"7545:15:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"7537:23:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":46790,"nodeType":"Block","src":"7621:265:144","statements":[{"AST":{"nodeType":"YulBlock","src":"7638:242:144","statements":[{"nodeType":"YulVariableDeclaration","src":"7648:31:144","value":{"arguments":[{"name":"byte0","nodeType":"YulIdentifier","src":"7667:5:144"},{"kind":"number","nodeType":"YulLiteral","src":"7674:4:144","type":"","value":"0xf7"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7663:3:144"},"nodeType":"YulFunctionCall","src":"7663:16:144"},"variables":[{"name":"byteLen","nodeType":"YulTypedName","src":"7652:7:144","type":""}]},{"nodeType":"YulAssignment","src":"7688:24:144","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7702:6:144"},{"kind":"number","nodeType":"YulLiteral","src":"7710:1:144","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7698:3:144"},"nodeType":"YulFunctionCall","src":"7698:14:144"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7688:6:144"}]},{"nodeType":"YulVariableDeclaration","src":"7722:61:144","value":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7747:6:144"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7741:5:144"},"nodeType":"YulFunctionCall","src":"7741:13:144"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7760:3:144","type":"","value":"256"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7769:2:144","type":"","value":"32"},{"name":"byteLen","nodeType":"YulIdentifier","src":"7773:7:144"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7765:3:144"},"nodeType":"YulFunctionCall","src":"7765:16:144"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"7756:3:144"},"nodeType":"YulFunctionCall","src":"7756:26:144"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"7737:3:144"},"nodeType":"YulFunctionCall","src":"7737:46:144"},"variables":[{"name":"dataLen","nodeType":"YulTypedName","src":"7726:7:144","type":""}]},{"nodeType":"YulAssignment","src":"7832:40:144","value":{"arguments":[{"name":"dataLen","nodeType":"YulIdentifier","src":"7847:7:144"},{"arguments":[{"name":"byteLen","nodeType":"YulIdentifier","src":"7860:7:144"},{"kind":"number","nodeType":"YulLiteral","src":"7869:1:144","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7856:3:144"},"nodeType":"YulFunctionCall","src":"7856:15:144"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7843:3:144"},"nodeType":"YulFunctionCall","src":"7843:29:144"},"variableNames":[{"name":"itemLen","nodeType":"YulIdentifier","src":"7832:7:144"}]}]},"evmVersion":"london","externalReferences":[{"declaration":46751,"isOffset":false,"isSlot":false,"src":"7667:5:144","valueSize":1},{"declaration":46748,"isOffset":false,"isSlot":false,"src":"7832:7:144","valueSize":1},{"declaration":46742,"isOffset":false,"isSlot":false,"src":"7688:6:144","valueSize":1},{"declaration":46742,"isOffset":false,"isSlot":false,"src":"7702:6:144","valueSize":1},{"declaration":46742,"isOffset":false,"isSlot":false,"src":"7747:6:144","valueSize":1}],"id":46789,"nodeType":"InlineAssembly","src":"7629:251:144"}]},"id":46791,"nodeType":"IfStatement","src":"7533:353:144","trueBody":{"id":46788,"nodeType":"Block","src":"7562:53:144","statements":[{"expression":{"id":46786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46780,"name":"itemLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46748,"src":"7570:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46781,"name":"byte0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46751,"src":"7580:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":46782,"name":"LIST_SHORT_START","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46095,"src":"7588:16:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"7580:24:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":46784,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7607:1:144","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7580:28:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7570:38:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46787,"nodeType":"ExpressionStatement","src":"7570:38:144"}]}},"id":46792,"nodeType":"IfStatement","src":"7145:741:144","trueBody":{"id":46776,"nodeType":"Block","src":"7175:352:144","statements":[{"AST":{"nodeType":"YulBlock","src":"7192:329:144","statements":[{"nodeType":"YulVariableDeclaration","src":"7202:31:144","value":{"arguments":[{"name":"byte0","nodeType":"YulIdentifier","src":"7221:5:144"},{"kind":"number","nodeType":"YulLiteral","src":"7228:4:144","type":"","value":"0xb7"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7217:3:144"},"nodeType":"YulFunctionCall","src":"7217:16:144"},"variables":[{"name":"byteLen","nodeType":"YulTypedName","src":"7206:7:144","type":""}]},{"nodeType":"YulAssignment","src":"7277:24:144","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7291:6:144"},{"kind":"number","nodeType":"YulLiteral","src":"7299:1:144","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7287:3:144"},"nodeType":"YulFunctionCall","src":"7287:14:144"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7277:6:144"}]},{"nodeType":"YulVariableDeclaration","src":"7370:61:144","value":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7395:6:144"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7389:5:144"},"nodeType":"YulFunctionCall","src":"7389:13:144"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7408:3:144","type":"","value":"256"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7417:2:144","type":"","value":"32"},{"name":"byteLen","nodeType":"YulIdentifier","src":"7421:7:144"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7413:3:144"},"nodeType":"YulFunctionCall","src":"7413:16:144"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"7404:3:144"},"nodeType":"YulFunctionCall","src":"7404:26:144"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"7385:3:144"},"nodeType":"YulFunctionCall","src":"7385:46:144"},"variables":[{"name":"dataLen","nodeType":"YulTypedName","src":"7374:7:144","type":""}]},{"nodeType":"YulAssignment","src":"7473:40:144","value":{"arguments":[{"name":"dataLen","nodeType":"YulIdentifier","src":"7488:7:144"},{"arguments":[{"name":"byteLen","nodeType":"YulIdentifier","src":"7501:7:144"},{"kind":"number","nodeType":"YulLiteral","src":"7510:1:144","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7497:3:144"},"nodeType":"YulFunctionCall","src":"7497:15:144"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7484:3:144"},"nodeType":"YulFunctionCall","src":"7484:29:144"},"variableNames":[{"name":"itemLen","nodeType":"YulIdentifier","src":"7473:7:144"}]}]},"evmVersion":"london","externalReferences":[{"declaration":46751,"isOffset":false,"isSlot":false,"src":"7221:5:144","valueSize":1},{"declaration":46748,"isOffset":false,"isSlot":false,"src":"7473:7:144","valueSize":1},{"declaration":46742,"isOffset":false,"isSlot":false,"src":"7277:6:144","valueSize":1},{"declaration":46742,"isOffset":false,"isSlot":false,"src":"7291:6:144","valueSize":1},{"declaration":46742,"isOffset":false,"isSlot":false,"src":"7395:6:144","valueSize":1}],"id":46775,"nodeType":"InlineAssembly","src":"7183:338:144"}]}},"id":46793,"nodeType":"IfStatement","src":"7063:823:144","trueBody":{"expression":{"id":46770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46764,"name":"itemLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46748,"src":"7094:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46765,"name":"byte0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46751,"src":"7104:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":46766,"name":"STRING_SHORT_START","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46089,"src":"7112:18:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"7104:26:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":46768,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7133:1:144","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7104:30:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7094:40:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46771,"nodeType":"ExpressionStatement","src":"7094:40:144"}},"id":46794,"nodeType":"IfStatement","src":"7009:877:144","trueBody":{"expression":{"id":46759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46757,"name":"itemLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46748,"src":"7041:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":46758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7051:1:144","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7041:11:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46760,"nodeType":"ExpressionStatement","src":"7041:11:144"}},{"expression":{"id":46795,"name":"itemLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46748,"src":"7899:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":46746,"id":46796,"nodeType":"Return","src":"7892:14:144"}]},"id":46798,"implemented":true,"kind":"function","modifiers":[],"name":"_itemLength","nameLocation":"6844:11:144","nodeType":"FunctionDefinition","parameters":{"id":46743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46742,"mutability":"mutable","name":"memPtr","nameLocation":"6864:6:144","nodeType":"VariableDeclaration","scope":46798,"src":"6856:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46741,"name":"uint256","nodeType":"ElementaryTypeName","src":"6856:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6855:16:144"},"returnParameters":{"id":46746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46745,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46798,"src":"6894:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46744,"name":"uint256","nodeType":"ElementaryTypeName","src":"6894:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6893:9:144"},"scope":46908,"src":"6835:1076:144","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":46854,"nodeType":"Block","src":"8030:405:144","statements":[{"assignments":[46806],"declarations":[{"constant":false,"id":46806,"mutability":"mutable","name":"byte0","nameLocation":"8044:5:144","nodeType":"VariableDeclaration","scope":46854,"src":"8036:13:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46805,"name":"uint256","nodeType":"ElementaryTypeName","src":"8036:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46807,"nodeType":"VariableDeclarationStatement","src":"8036:13:144"},{"AST":{"nodeType":"YulBlock","src":"8064:45:144","statements":[{"nodeType":"YulAssignment","src":"8072:31:144","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8086:1:144","type":"","value":"0"},{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"8095:6:144"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8089:5:144"},"nodeType":"YulFunctionCall","src":"8089:13:144"}],"functionName":{"name":"byte","nodeType":"YulIdentifier","src":"8081:4:144"},"nodeType":"YulFunctionCall","src":"8081:22:144"},"variableNames":[{"name":"byte0","nodeType":"YulIdentifier","src":"8072:5:144"}]}]},"evmVersion":"london","externalReferences":[{"declaration":46806,"isOffset":false,"isSlot":false,"src":"8072:5:144","valueSize":1},{"declaration":46800,"isOffset":false,"isSlot":false,"src":"8095:6:144","valueSize":1}],"id":46808,"nodeType":"InlineAssembly","src":"8055:54:144"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46809,"name":"byte0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46806,"src":"8119:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":46810,"name":"STRING_SHORT_START","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46089,"src":"8127:18:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8119:26:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":46827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46814,"name":"byte0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46806,"src":"8170:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":46815,"name":"STRING_LONG_START","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46092,"src":"8178:17:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8170:25:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":46825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46817,"name":"byte0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46806,"src":"8200:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":46820,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":46818,"name":"LIST_SHORT_START","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46095,"src":"8208:16:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":46819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8227:1:144","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8208:20:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8200:28:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46822,"name":"byte0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46806,"src":"8232:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":46823,"name":"LIST_LONG_START","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46098,"src":"8240:15:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8232:23:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8200:55:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":46826,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8199:57:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8170:86:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46830,"name":"byte0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46806,"src":"8281:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":46831,"name":"LIST_SHORT_START","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46095,"src":"8289:16:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8281:24:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46842,"name":"byte0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46806,"src":"8397:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":46845,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":46843,"name":"LIST_LONG_START","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46098,"src":"8406:15:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":46844,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8424:1:144","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8406:19:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":46846,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"8405:21:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8397:29:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":46848,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8429:1:144","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8397:33:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":46804,"id":46850,"nodeType":"Return","src":"8390:40:144"},"id":46851,"nodeType":"IfStatement","src":"8277:153:144","trueBody":{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46833,"name":"byte0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46806,"src":"8344:5:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":46836,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":46834,"name":"STRING_LONG_START","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46092,"src":"8353:17:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":46835,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8373:1:144","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8353:21:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":46837,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"8352:23:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8344:31:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":46839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8378:1:144","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8344:35:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":46804,"id":46841,"nodeType":"Return","src":"8337:42:144"}},"id":46852,"nodeType":"IfStatement","src":"8166:264:144","trueBody":{"expression":{"hexValue":"31","id":46828,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8265:1:144","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"functionReturnParameters":46804,"id":46829,"nodeType":"Return","src":"8258:8:144"}},"id":46853,"nodeType":"IfStatement","src":"8115:315:144","trueBody":{"expression":{"hexValue":"30","id":46812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8154:1:144","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":46804,"id":46813,"nodeType":"Return","src":"8147:8:144"}}]},"id":46855,"implemented":true,"kind":"function","modifiers":[],"name":"_payloadOffset","nameLocation":"7968:14:144","nodeType":"FunctionDefinition","parameters":{"id":46801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46800,"mutability":"mutable","name":"memPtr","nameLocation":"7991:6:144","nodeType":"VariableDeclaration","scope":46855,"src":"7983:14:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46799,"name":"uint256","nodeType":"ElementaryTypeName","src":"7983:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7982:16:144"},"returnParameters":{"id":46804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46803,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46855,"src":"8021:7:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46802,"name":"uint256","nodeType":"ElementaryTypeName","src":"8021:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8020:9:144"},"scope":46908,"src":"7959:476:144","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":46906,"nodeType":"Block","src":"8664:587:144","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46864,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46861,"src":"8674:3:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":46865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8681:1:144","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8674:8:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46868,"nodeType":"IfStatement","src":"8670:21:144","trueBody":{"functionReturnParameters":46863,"id":46867,"nodeType":"Return","src":"8684:7:144"}},{"body":{"id":46887,"nodeType":"Block","src":"8786:115:144","statements":[{"AST":{"nodeType":"YulBlock","src":"8803:42:144","statements":[{"expression":{"arguments":[{"name":"dest","nodeType":"YulIdentifier","src":"8820:4:144"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"8832:3:144"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8826:5:144"},"nodeType":"YulFunctionCall","src":"8826:10:144"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8813:6:144"},"nodeType":"YulFunctionCall","src":"8813:24:144"},"nodeType":"YulExpressionStatement","src":"8813:24:144"}]},"evmVersion":"london","externalReferences":[{"declaration":46859,"isOffset":false,"isSlot":false,"src":"8820:4:144","valueSize":1},{"declaration":46857,"isOffset":false,"isSlot":false,"src":"8832:3:144","valueSize":1}],"id":46878,"nodeType":"InlineAssembly","src":"8794:51:144"},{"expression":{"id":46881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46879,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46857,"src":"8853:3:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":46880,"name":"WORD_SIZE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46101,"src":"8860:9:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8853:16:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46882,"nodeType":"ExpressionStatement","src":"8853:16:144"},{"expression":{"id":46885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46883,"name":"dest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46859,"src":"8877:4:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":46884,"name":"WORD_SIZE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46101,"src":"8885:9:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8877:17:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46886,"nodeType":"ExpressionStatement","src":"8877:17:144"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46869,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46861,"src":"8747:3:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":46872,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":46870,"name":"WORD_SIZE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46101,"src":"8753:9:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":46871,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8765:1:144","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8753:13:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8747:19:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46888,"loopExpression":{"expression":{"id":46876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46874,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46861,"src":"8768:3:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":46875,"name":"WORD_SIZE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46101,"src":"8775:9:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8768:16:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46877,"nodeType":"ExpressionStatement","src":"8768:16:144"},"nodeType":"ForStatement","src":"8740:161:144"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46889,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46861,"src":"8911:3:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":46890,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8918:1:144","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8911:8:144","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46893,"nodeType":"IfStatement","src":"8907:21:144","trueBody":{"functionReturnParameters":46863,"id":46892,"nodeType":"Return","src":"8921:7:144"}},{"assignments":[46895],"declarations":[{"constant":false,"id":46895,"mutability":"mutable","name":"mask","nameLocation":"9018:4:144","nodeType":"VariableDeclaration","scope":46906,"src":"9010:12:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46894,"name":"uint256","nodeType":"ElementaryTypeName","src":"9010:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46904,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"323536","id":46896,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9025:3:144","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46897,"name":"WORD_SIZE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46101,"src":"9031:9:144","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":46898,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46861,"src":"9043:3:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9031:15:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":46900,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9030:17:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9025:22:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":46902,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9050:1:144","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9025:26:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9010:41:144"},{"AST":{"nodeType":"YulBlock","src":"9067:180:144","statements":[{"nodeType":"YulVariableDeclaration","src":"9075:41:144","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"9100:3:144"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9094:5:144"},"nodeType":"YulFunctionCall","src":"9094:10:144"},{"arguments":[{"name":"mask","nodeType":"YulIdentifier","src":"9110:4:144"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"9106:3:144"},"nodeType":"YulFunctionCall","src":"9106:9:144"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9090:3:144"},"nodeType":"YulFunctionCall","src":"9090:26:144"},"variables":[{"name":"srcpart","nodeType":"YulTypedName","src":"9079:7:144","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9139:38:144","value":{"arguments":[{"arguments":[{"name":"dest","nodeType":"YulIdentifier","src":"9165:4:144"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9159:5:144"},"nodeType":"YulFunctionCall","src":"9159:11:144"},{"name":"mask","nodeType":"YulIdentifier","src":"9172:4:144"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9155:3:144"},"nodeType":"YulFunctionCall","src":"9155:22:144"},"variables":[{"name":"destpart","nodeType":"YulTypedName","src":"9143:8:144","type":""}]},{"expression":{"arguments":[{"name":"dest","nodeType":"YulIdentifier","src":"9213:4:144"},{"arguments":[{"name":"destpart","nodeType":"YulIdentifier","src":"9222:8:144"},{"name":"srcpart","nodeType":"YulIdentifier","src":"9232:7:144"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"9219:2:144"},"nodeType":"YulFunctionCall","src":"9219:21:144"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9206:6:144"},"nodeType":"YulFunctionCall","src":"9206:35:144"},"nodeType":"YulExpressionStatement","src":"9206:35:144"}]},"evmVersion":"london","externalReferences":[{"declaration":46859,"isOffset":false,"isSlot":false,"src":"9165:4:144","valueSize":1},{"declaration":46859,"isOffset":false,"isSlot":false,"src":"9213:4:144","valueSize":1},{"declaration":46895,"isOffset":false,"isSlot":false,"src":"9110:4:144","valueSize":1},{"declaration":46895,"isOffset":false,"isSlot":false,"src":"9172:4:144","valueSize":1},{"declaration":46857,"isOffset":false,"isSlot":false,"src":"9100:3:144","valueSize":1}],"id":46905,"nodeType":"InlineAssembly","src":"9058:189:144"}]},"id":46907,"implemented":true,"kind":"function","modifiers":[],"name":"copy","nameLocation":"8590:4:144","nodeType":"FunctionDefinition","parameters":{"id":46862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46857,"mutability":"mutable","name":"src","nameLocation":"8608:3:144","nodeType":"VariableDeclaration","scope":46907,"src":"8600:11:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46856,"name":"uint256","nodeType":"ElementaryTypeName","src":"8600:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":46859,"mutability":"mutable","name":"dest","nameLocation":"8625:4:144","nodeType":"VariableDeclaration","scope":46907,"src":"8617:12:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46858,"name":"uint256","nodeType":"ElementaryTypeName","src":"8617:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":46861,"mutability":"mutable","name":"len","nameLocation":"8643:3:144","nodeType":"VariableDeclaration","scope":46907,"src":"8635:11:144","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46860,"name":"uint256","nodeType":"ElementaryTypeName","src":"8635:7:144","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8594:56:144"},"returnParameters":{"id":46863,"nodeType":"ParameterList","parameters":[],"src":"8664:0:144"},"scope":46908,"src":"8581:670:144","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":46909,"src":"137:9116:144","usedErrors":[]}],"src":"112:9142:144"},"id":144},"contracts/messaging/connectors/polygon/tunnel/FxBaseChildTunnel.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/polygon/tunnel/FxBaseChildTunnel.sol","exportedSymbols":{"FxBaseChildTunnel":[47021],"IFxMessageProcessor":[46920]},"id":47022,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":46910,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"123:23:145"},{"abstract":false,"baseContracts":[],"canonicalName":"IFxMessageProcessor","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":46920,"linearizedBaseContracts":[46920],"name":"IFxMessageProcessor","nameLocation":"221:19:145","nodeType":"ContractDefinition","nodes":[{"functionSelector":"9a7c4b71","id":46919,"implemented":false,"kind":"function","modifiers":[],"name":"processMessageFromRoot","nameLocation":"254:22:145","nodeType":"FunctionDefinition","parameters":{"id":46917,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46912,"mutability":"mutable","name":"stateId","nameLocation":"290:7:145","nodeType":"VariableDeclaration","scope":46919,"src":"282:15:145","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46911,"name":"uint256","nodeType":"ElementaryTypeName","src":"282:7:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":46914,"mutability":"mutable","name":"rootMessageSender","nameLocation":"311:17:145","nodeType":"VariableDeclaration","scope":46919,"src":"303:25:145","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":46913,"name":"address","nodeType":"ElementaryTypeName","src":"303:7:145","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":46916,"mutability":"mutable","name":"data","nameLocation":"349:4:145","nodeType":"VariableDeclaration","scope":46919,"src":"334:19:145","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":46915,"name":"bytes","nodeType":"ElementaryTypeName","src":"334:5:145","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"276:81:145"},"returnParameters":{"id":46918,"nodeType":"ParameterList","parameters":[],"src":"366:0:145"},"scope":46920,"src":"245:122:145","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":47022,"src":"211:158:145","usedErrors":[]},{"abstract":true,"baseContracts":[{"baseName":{"id":46922,"name":"IFxMessageProcessor","nameLocations":["492:19:145"],"nodeType":"IdentifierPath","referencedDeclaration":46920,"src":"492:19:145"},"id":46923,"nodeType":"InheritanceSpecifier","src":"492:19:145"}],"canonicalName":"FxBaseChildTunnel","contractDependencies":[],"contractKind":"contract","documentation":{"id":46921,"nodeType":"StructuredDocumentation","src":"371:81:145","text":" @notice Mock child tunnel contract to receive and send message from L2"},"fullyImplemented":false,"id":47021,"linearizedBaseContracts":[47021,46920],"name":"FxBaseChildTunnel","nameLocation":"471:17:145","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036","id":46927,"name":"MessageSent","nameLocation":"577:11:145","nodeType":"EventDefinition","parameters":{"id":46926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46925,"indexed":false,"mutability":"mutable","name":"message","nameLocation":"595:7:145","nodeType":"VariableDeclaration","scope":46927,"src":"589:13:145","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":46924,"name":"bytes","nodeType":"ElementaryTypeName","src":"589:5:145","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"588:15:145"},"src":"571:33:145"},{"constant":false,"functionSelector":"450d11f0","id":46929,"mutability":"mutable","name":"fxChild","nameLocation":"637:7:145","nodeType":"VariableDeclaration","scope":47021,"src":"622:22:145","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":46928,"name":"address","nodeType":"ElementaryTypeName","src":"622:7:145","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"7f1e9cb0","id":46931,"mutability":"mutable","name":"fxRootTunnel","nameLocation":"684:12:145","nodeType":"VariableDeclaration","scope":47021,"src":"669:27:145","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":46930,"name":"address","nodeType":"ElementaryTypeName","src":"669:7:145","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"body":{"id":46940,"nodeType":"Block","src":"731:29:145","statements":[{"expression":{"id":46938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46936,"name":"fxChild","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46929,"src":"737:7:145","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46937,"name":"_fxChild","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46933,"src":"747:8:145","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"737:18:145","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":46939,"nodeType":"ExpressionStatement","src":"737:18:145"}]},"id":46941,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":46934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46933,"mutability":"mutable","name":"_fxChild","nameLocation":"721:8:145","nodeType":"VariableDeclaration","scope":46941,"src":"713:16:145","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":46932,"name":"address","nodeType":"ElementaryTypeName","src":"713:7:145","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"712:18:145"},"returnParameters":{"id":46935,"nodeType":"ParameterList","parameters":[],"src":"731:0:145"},"scope":47021,"src":"701:59:145","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":46953,"nodeType":"Block","src":"861:96:145","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":46948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46946,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46943,"src":"875:6:145","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":46947,"name":"fxRootTunnel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46931,"src":"885:12:145","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"875:22:145","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e4445525f46524f4d5f524f4f54","id":46949,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"899:45:145","typeDescriptions":{"typeIdentifier":"t_stringliteral_1b951f8525e63633d83b1eade825f5af300eb77e95eaebd60efd7481ae921a45","typeString":"literal_string \"FxBaseChildTunnel: INVALID_SENDER_FROM_ROOT\""},"value":"FxBaseChildTunnel: INVALID_SENDER_FROM_ROOT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1b951f8525e63633d83b1eade825f5af300eb77e95eaebd60efd7481ae921a45","typeString":"literal_string \"FxBaseChildTunnel: INVALID_SENDER_FROM_ROOT\""}],"id":46945,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"867:7:145","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":46950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"867:78:145","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46951,"nodeType":"ExpressionStatement","src":"867:78:145"},{"id":46952,"nodeType":"PlaceholderStatement","src":"951:1:145"}]},"id":46954,"name":"validateSender","nameLocation":"830:14:145","nodeType":"ModifierDefinition","parameters":{"id":46944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46943,"mutability":"mutable","name":"sender","nameLocation":"853:6:145","nodeType":"VariableDeclaration","scope":46954,"src":"845:14:145","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":46942,"name":"address","nodeType":"ElementaryTypeName","src":"845:7:145","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"844:16:145"},"src":"821:136:145","virtual":false,"visibility":"internal"},{"body":{"id":46973,"nodeType":"Block","src":"1067:128:145","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":46965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46960,"name":"fxRootTunnel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46931,"src":"1081:12:145","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"307830","id":46963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1105:3:145","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":46962,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1097:7:145","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":46961,"name":"address","nodeType":"ElementaryTypeName","src":"1097:7:145","typeDescriptions":{}}},"id":46964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1097:12:145","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1081:28:145","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4678426173654368696c6454756e6e656c3a20524f4f545f54554e4e454c5f414c52454144595f534554","id":46966,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1111:44:145","typeDescriptions":{"typeIdentifier":"t_stringliteral_f7974c7c2deac4fad00669eceb145d6535e698a8bcd8493990c8db551188166b","typeString":"literal_string \"FxBaseChildTunnel: ROOT_TUNNEL_ALREADY_SET\""},"value":"FxBaseChildTunnel: ROOT_TUNNEL_ALREADY_SET"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f7974c7c2deac4fad00669eceb145d6535e698a8bcd8493990c8db551188166b","typeString":"literal_string \"FxBaseChildTunnel: ROOT_TUNNEL_ALREADY_SET\""}],"id":46959,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1073:7:145","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":46967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1073:83:145","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46968,"nodeType":"ExpressionStatement","src":"1073:83:145"},{"expression":{"id":46971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46969,"name":"fxRootTunnel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46931,"src":"1162:12:145","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46970,"name":"_fxRootTunnel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46956,"src":"1177:13:145","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1162:28:145","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":46972,"nodeType":"ExpressionStatement","src":"1162:28:145"}]},"id":46974,"implemented":true,"kind":"function","modifiers":[],"name":"setFxRootTunnel","nameLocation":"1011:15:145","nodeType":"FunctionDefinition","parameters":{"id":46957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46956,"mutability":"mutable","name":"_fxRootTunnel","nameLocation":"1035:13:145","nodeType":"VariableDeclaration","scope":46974,"src":"1027:21:145","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":46955,"name":"address","nodeType":"ElementaryTypeName","src":"1027:7:145","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1026:23:145"},"returnParameters":{"id":46958,"nodeType":"ParameterList","parameters":[],"src":"1067:0:145"},"scope":47021,"src":"1002:193:145","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[46919],"body":{"id":46998,"nodeType":"Block","src":"1330:141:145","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":46988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46985,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1344:3:145","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":46986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1348:6:145","memberName":"sender","nodeType":"MemberAccess","src":"1344:10:145","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":46987,"name":"fxChild","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46929,"src":"1358:7:145","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1344:21:145","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e444552","id":46989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1367:35:145","typeDescriptions":{"typeIdentifier":"t_stringliteral_0127552a73259d4875e4bb85e64334729d5119ce836ba2001f26ffe4d150b533","typeString":"literal_string \"FxBaseChildTunnel: INVALID_SENDER\""},"value":"FxBaseChildTunnel: INVALID_SENDER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0127552a73259d4875e4bb85e64334729d5119ce836ba2001f26ffe4d150b533","typeString":"literal_string \"FxBaseChildTunnel: INVALID_SENDER\""}],"id":46984,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1336:7:145","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":46990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1336:67:145","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46991,"nodeType":"ExpressionStatement","src":"1336:67:145"},{"expression":{"arguments":[{"id":46993,"name":"stateId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46976,"src":"1433:7:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":46994,"name":"rootMessageSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46978,"src":"1442:17:145","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":46995,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46980,"src":"1461:4:145","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":46992,"name":"_processMessageFromRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47020,"src":"1409:23:145","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (uint256,address,bytes memory)"}},"id":46996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1409:57:145","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46997,"nodeType":"ExpressionStatement","src":"1409:57:145"}]},"functionSelector":"9a7c4b71","id":46999,"implemented":true,"kind":"function","modifiers":[],"name":"processMessageFromRoot","nameLocation":"1208:22:145","nodeType":"FunctionDefinition","overrides":{"id":46982,"nodeType":"OverrideSpecifier","overrides":[],"src":"1321:8:145"},"parameters":{"id":46981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46976,"mutability":"mutable","name":"stateId","nameLocation":"1244:7:145","nodeType":"VariableDeclaration","scope":46999,"src":"1236:15:145","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46975,"name":"uint256","nodeType":"ElementaryTypeName","src":"1236:7:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":46978,"mutability":"mutable","name":"rootMessageSender","nameLocation":"1265:17:145","nodeType":"VariableDeclaration","scope":46999,"src":"1257:25:145","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":46977,"name":"address","nodeType":"ElementaryTypeName","src":"1257:7:145","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":46980,"mutability":"mutable","name":"data","nameLocation":"1303:4:145","nodeType":"VariableDeclaration","scope":46999,"src":"1288:19:145","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":46979,"name":"bytes","nodeType":"ElementaryTypeName","src":"1288:5:145","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1230:81:145"},"returnParameters":{"id":46983,"nodeType":"ParameterList","parameters":[],"src":"1330:0:145"},"scope":47021,"src":"1199:272:145","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":47009,"nodeType":"Block","src":"1883:36:145","statements":[{"eventCall":{"arguments":[{"id":47006,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47002,"src":"1906:7:145","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":47005,"name":"MessageSent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46927,"src":"1894:11:145","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory)"}},"id":47007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1894:20:145","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47008,"nodeType":"EmitStatement","src":"1889:25:145"}]},"documentation":{"id":47000,"nodeType":"StructuredDocumentation","src":"1475:346:145","text":" @notice Emit message that can be received on Root Tunnel\n @dev Call the internal function when need to emit message\n @param message bytes message that will be sent to Root Tunnel\n some message examples -\n   abi.encode(tokenId);\n   abi.encode(tokenId, tokenMetadata);\n   abi.encode(messageType, messageData);"},"id":47010,"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessageToRoot","nameLocation":"1833:18:145","nodeType":"FunctionDefinition","parameters":{"id":47003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47002,"mutability":"mutable","name":"message","nameLocation":"1865:7:145","nodeType":"VariableDeclaration","scope":47010,"src":"1852:20:145","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47001,"name":"bytes","nodeType":"ElementaryTypeName","src":"1852:5:145","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1851:22:145"},"returnParameters":{"id":47004,"nodeType":"ParameterList","parameters":[],"src":"1883:0:145"},"scope":47021,"src":"1824:95:145","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"documentation":{"id":47011,"nodeType":"StructuredDocumentation","src":"1923:427:145","text":" @notice Process message received from Root Tunnel\n @dev function needs to be implemented to handle message as per requirement\n This is called by onStateReceive function.\n Since it is called via a system call, any event will not be emitted during its execution.\n @param stateId unique state id\n @param sender root message sender\n @param message bytes message that was sent from Root Tunnel"},"id":47020,"implemented":false,"kind":"function","modifiers":[],"name":"_processMessageFromRoot","nameLocation":"2362:23:145","nodeType":"FunctionDefinition","parameters":{"id":47018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47013,"mutability":"mutable","name":"stateId","nameLocation":"2399:7:145","nodeType":"VariableDeclaration","scope":47020,"src":"2391:15:145","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47012,"name":"uint256","nodeType":"ElementaryTypeName","src":"2391:7:145","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47015,"mutability":"mutable","name":"sender","nameLocation":"2420:6:145","nodeType":"VariableDeclaration","scope":47020,"src":"2412:14:145","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47014,"name":"address","nodeType":"ElementaryTypeName","src":"2412:7:145","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47017,"mutability":"mutable","name":"message","nameLocation":"2445:7:145","nodeType":"VariableDeclaration","scope":47020,"src":"2432:20:145","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47016,"name":"bytes","nodeType":"ElementaryTypeName","src":"2432:5:145","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2385:71:145"},"returnParameters":{"id":47019,"nodeType":"ParameterList","parameters":[],"src":"2473:0:145"},"scope":47021,"src":"2353:121:145","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":47022,"src":"453:2023:145","usedErrors":[]}],"src":"123:2354:145"},"id":145},"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol","exportedSymbols":{"ExitPayloadReader":[45470],"FxBaseRootTunnel":[47389],"ICheckpointManager":[47056],"IFxStateSender":[47038],"Merkle":[45580],"MerklePatriciaProof":[46084],"RLPReader":[46908]},"id":47390,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":47023,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"122:23:146"},{"absolutePath":"contracts/messaging/connectors/polygon/lib/RLPReader.sol","file":"../lib/RLPReader.sol","id":47025,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47390,"sourceUnit":46909,"src":"147:47:146","symbolAliases":[{"foreign":{"id":47024,"name":"RLPReader","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46908,"src":"155:9:146","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/polygon/lib/MerklePatriciaProof.sol","file":"../lib/MerklePatriciaProof.sol","id":47027,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47390,"sourceUnit":46085,"src":"195:67:146","symbolAliases":[{"foreign":{"id":47026,"name":"MerklePatriciaProof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46084,"src":"203:19:146","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/polygon/lib/Merkle.sol","file":"../lib/Merkle.sol","id":47029,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47390,"sourceUnit":45581,"src":"263:41:146","symbolAliases":[{"foreign":{"id":47028,"name":"Merkle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45580,"src":"271:6:146","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/polygon/lib/ExitPayloadReader.sol","file":"../lib/ExitPayloadReader.sol","id":47030,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47390,"sourceUnit":45471,"src":"305:38:146","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IFxStateSender","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":47038,"linearizedBaseContracts":[47038],"name":"IFxStateSender","nameLocation":"355:14:146","nodeType":"ContractDefinition","nodes":[{"functionSelector":"b4720477","id":47037,"implemented":false,"kind":"function","modifiers":[],"name":"sendMessageToChild","nameLocation":"383:18:146","nodeType":"FunctionDefinition","parameters":{"id":47035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47032,"mutability":"mutable","name":"_receiver","nameLocation":"410:9:146","nodeType":"VariableDeclaration","scope":47037,"src":"402:17:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47031,"name":"address","nodeType":"ElementaryTypeName","src":"402:7:146","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47034,"mutability":"mutable","name":"_data","nameLocation":"436:5:146","nodeType":"VariableDeclaration","scope":47037,"src":"421:20:146","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":47033,"name":"bytes","nodeType":"ElementaryTypeName","src":"421:5:146","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"401:41:146"},"returnParameters":{"id":47036,"nodeType":"ParameterList","parameters":[],"src":"451:0:146"},"scope":47038,"src":"374:78:146","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":47390,"src":"345:109:146","usedErrors":[]},{"abstract":false,"baseContracts":[],"canonicalName":"ICheckpointManager","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":47056,"linearizedBaseContracts":[47056],"name":"ICheckpointManager","nameLocation":"465:18:146","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ICheckpointManager.HeaderBlock","id":47049,"members":[{"constant":false,"id":47040,"mutability":"mutable","name":"root","nameLocation":"521:4:146","nodeType":"VariableDeclaration","scope":47049,"src":"513:12:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47039,"name":"bytes32","nodeType":"ElementaryTypeName","src":"513:7:146","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":47042,"mutability":"mutable","name":"start","nameLocation":"539:5:146","nodeType":"VariableDeclaration","scope":47049,"src":"531:13:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47041,"name":"uint256","nodeType":"ElementaryTypeName","src":"531:7:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47044,"mutability":"mutable","name":"end","nameLocation":"558:3:146","nodeType":"VariableDeclaration","scope":47049,"src":"550:11:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47043,"name":"uint256","nodeType":"ElementaryTypeName","src":"550:7:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47046,"mutability":"mutable","name":"createdAt","nameLocation":"575:9:146","nodeType":"VariableDeclaration","scope":47049,"src":"567:17:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47045,"name":"uint256","nodeType":"ElementaryTypeName","src":"567:7:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47048,"mutability":"mutable","name":"proposer","nameLocation":"598:8:146","nodeType":"VariableDeclaration","scope":47049,"src":"590:16:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47047,"name":"address","nodeType":"ElementaryTypeName","src":"590:7:146","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"HeaderBlock","nameLocation":"495:11:146","nodeType":"StructDefinition","scope":47056,"src":"488:123:146","visibility":"public"},{"constant":false,"documentation":{"id":47050,"nodeType":"StructuredDocumentation","src":"615:137:146","text":" @notice mapping of checkpoint header numbers to block details\n @dev These checkpoints are submited by plasma contracts"},"functionSelector":"41539d4a","id":47055,"mutability":"mutable","name":"headerBlocks","nameLocation":"794:12:146","nodeType":"VariableDeclaration","scope":47056,"src":"755:51:146","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_HeaderBlock_$47049_storage_$","typeString":"mapping(uint256 => struct ICheckpointManager.HeaderBlock)"},"typeName":{"id":47054,"keyType":{"id":47051,"name":"uint256","nodeType":"ElementaryTypeName","src":"763:7:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"755:31:146","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_HeaderBlock_$47049_storage_$","typeString":"mapping(uint256 => struct ICheckpointManager.HeaderBlock)"},"valueType":{"id":47053,"nodeType":"UserDefinedTypeName","pathNode":{"id":47052,"name":"HeaderBlock","nameLocations":["774:11:146"],"nodeType":"IdentifierPath","referencedDeclaration":47049,"src":"774:11:146"},"referencedDeclaration":47049,"src":"774:11:146","typeDescriptions":{"typeIdentifier":"t_struct$_HeaderBlock_$47049_storage_ptr","typeString":"struct ICheckpointManager.HeaderBlock"}}},"visibility":"public"}],"scope":47390,"src":"456:353:146","usedErrors":[]},{"abstract":true,"baseContracts":[],"canonicalName":"FxBaseRootTunnel","contractDependencies":[],"contractKind":"contract","fullyImplemented":false,"id":47389,"linearizedBaseContracts":[47389],"name":"FxBaseRootTunnel","nameLocation":"829:16:146","nodeType":"ContractDefinition","nodes":[{"global":false,"id":47060,"libraryName":{"id":47057,"name":"RLPReader","nameLocations":["856:9:146"],"nodeType":"IdentifierPath","referencedDeclaration":46908,"src":"856:9:146"},"nodeType":"UsingForDirective","src":"850:38:146","typeName":{"id":47059,"nodeType":"UserDefinedTypeName","pathNode":{"id":47058,"name":"RLPReader.RLPItem","nameLocations":["870:9:146","880:7:146"],"nodeType":"IdentifierPath","referencedDeclaration":46106,"src":"870:17:146"},"referencedDeclaration":46106,"src":"870:17:146","typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_storage_ptr","typeString":"struct RLPReader.RLPItem"}}},{"global":false,"id":47063,"libraryName":{"id":47061,"name":"Merkle","nameLocations":["897:6:146"],"nodeType":"IdentifierPath","referencedDeclaration":45580,"src":"897:6:146"},"nodeType":"UsingForDirective","src":"891:25:146","typeName":{"id":47062,"name":"bytes32","nodeType":"ElementaryTypeName","src":"908:7:146","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":47066,"libraryName":{"id":47064,"name":"ExitPayloadReader","nameLocations":["925:17:146"],"nodeType":"IdentifierPath","referencedDeclaration":45470,"src":"925:17:146"},"nodeType":"UsingForDirective","src":"919:34:146","typeName":{"id":47065,"name":"bytes","nodeType":"ElementaryTypeName","src":"947:5:146","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},{"global":false,"id":47070,"libraryName":{"id":47067,"name":"ExitPayloadReader","nameLocations":["962:17:146"],"nodeType":"IdentifierPath","referencedDeclaration":45470,"src":"962:17:146"},"nodeType":"UsingForDirective","src":"956:58:146","typeName":{"id":47069,"nodeType":"UserDefinedTypeName","pathNode":{"id":47068,"name":"ExitPayloadReader.ExitPayload","nameLocations":["984:17:146","1002:11:146"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"984:29:146"},"referencedDeclaration":44983,"src":"984:29:146","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_storage_ptr","typeString":"struct ExitPayloadReader.ExitPayload"}}},{"global":false,"id":47074,"libraryName":{"id":47071,"name":"ExitPayloadReader","nameLocations":["1023:17:146"],"nodeType":"IdentifierPath","referencedDeclaration":45470,"src":"1023:17:146"},"nodeType":"UsingForDirective","src":"1017:50:146","typeName":{"id":47073,"nodeType":"UserDefinedTypeName","pathNode":{"id":47072,"name":"ExitPayloadReader.Log","nameLocations":["1045:17:146","1063:3:146"],"nodeType":"IdentifierPath","referencedDeclaration":45000,"src":"1045:21:146"},"referencedDeclaration":45000,"src":"1045:21:146","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_storage_ptr","typeString":"struct ExitPayloadReader.Log"}}},{"global":false,"id":47078,"libraryName":{"id":47075,"name":"ExitPayloadReader","nameLocations":["1076:17:146"],"nodeType":"IdentifierPath","referencedDeclaration":45470,"src":"1076:17:146"},"nodeType":"UsingForDirective","src":"1070:56:146","typeName":{"id":47077,"nodeType":"UserDefinedTypeName","pathNode":{"id":47076,"name":"ExitPayloadReader.LogTopics","nameLocations":["1098:17:146","1116:9:146"],"nodeType":"IdentifierPath","referencedDeclaration":45005,"src":"1098:27:146"},"referencedDeclaration":45005,"src":"1098:27:146","typeDescriptions":{"typeIdentifier":"t_struct$_LogTopics_$45005_storage_ptr","typeString":"struct ExitPayloadReader.LogTopics"}}},{"global":false,"id":47082,"libraryName":{"id":47079,"name":"ExitPayloadReader","nameLocations":["1135:17:146"],"nodeType":"IdentifierPath","referencedDeclaration":45470,"src":"1135:17:146"},"nodeType":"UsingForDirective","src":"1129:54:146","typeName":{"id":47081,"nodeType":"UserDefinedTypeName","pathNode":{"id":47080,"name":"ExitPayloadReader.Receipt","nameLocations":["1157:17:146","1175:7:146"],"nodeType":"IdentifierPath","referencedDeclaration":44992,"src":"1157:25:146"},"referencedDeclaration":44992,"src":"1157:25:146","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_storage_ptr","typeString":"struct ExitPayloadReader.Receipt"}}},{"constant":true,"functionSelector":"0e387de6","id":47085,"mutability":"constant","name":"SEND_MESSAGE_EVENT_SIG","nameLocation":"1246:22:146","nodeType":"VariableDeclaration","scope":47389,"src":"1222:115:146","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47083,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1222:7:146","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307838633532363136363836393663653232373538393130643035626162386631383664366562323437636561633261663265383263376463313736363962303336","id":47084,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1271:66:146","typeDescriptions":{"typeIdentifier":"t_rational_63469352494453205371370597584683032582937416986488740256034378337537890037814_by_1","typeString":"int_const 6346...(69 digits omitted)...7814"},"value":"0x8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036"},"visibility":"public"},{"constant":false,"functionSelector":"de9b771f","id":47088,"mutability":"mutable","name":"fxRoot","nameLocation":"1391:6:146","nodeType":"VariableDeclaration","scope":47389,"src":"1369:28:146","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IFxStateSender_$47038","typeString":"contract IFxStateSender"},"typeName":{"id":47087,"nodeType":"UserDefinedTypeName","pathNode":{"id":47086,"name":"IFxStateSender","nameLocations":["1369:14:146"],"nodeType":"IdentifierPath","referencedDeclaration":47038,"src":"1369:14:146"},"referencedDeclaration":47038,"src":"1369:14:146","typeDescriptions":{"typeIdentifier":"t_contract$_IFxStateSender_$47038","typeString":"contract IFxStateSender"}},"visibility":"public"},{"constant":false,"functionSelector":"c0857ba0","id":47091,"mutability":"mutable","name":"checkpointManager","nameLocation":"1451:17:146","nodeType":"VariableDeclaration","scope":47389,"src":"1425:43:146","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ICheckpointManager_$47056","typeString":"contract ICheckpointManager"},"typeName":{"id":47090,"nodeType":"UserDefinedTypeName","pathNode":{"id":47089,"name":"ICheckpointManager","nameLocations":["1425:18:146"],"nodeType":"IdentifierPath","referencedDeclaration":47056,"src":"1425:18:146"},"referencedDeclaration":47056,"src":"1425:18:146","typeDescriptions":{"typeIdentifier":"t_contract$_ICheckpointManager_$47056","typeString":"contract ICheckpointManager"}},"visibility":"public"},{"constant":false,"functionSelector":"972c4928","id":47093,"mutability":"mutable","name":"fxChildTunnel","nameLocation":"1548:13:146","nodeType":"VariableDeclaration","scope":47389,"src":"1533:28:146","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47092,"name":"address","nodeType":"ElementaryTypeName","src":"1533:7:146","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"607f2d42","id":47097,"mutability":"mutable","name":"processedExits","nameLocation":"1636:14:146","nodeType":"VariableDeclaration","scope":47389,"src":"1604:46:146","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"typeName":{"id":47096,"keyType":{"id":47094,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1612:7:146","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"1604:24:146","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"valueType":{"id":47095,"name":"bool","nodeType":"ElementaryTypeName","src":"1623:4:146","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"body":{"id":47116,"nodeType":"Block","src":"1712:107:146","statements":[{"expression":{"id":47108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":47104,"name":"checkpointManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47091,"src":"1718:17:146","typeDescriptions":{"typeIdentifier":"t_contract$_ICheckpointManager_$47056","typeString":"contract ICheckpointManager"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":47106,"name":"_checkpointManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47099,"src":"1757:18:146","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":47105,"name":"ICheckpointManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47056,"src":"1738:18:146","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICheckpointManager_$47056_$","typeString":"type(contract ICheckpointManager)"}},"id":47107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1738:38:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICheckpointManager_$47056","typeString":"contract ICheckpointManager"}},"src":"1718:58:146","typeDescriptions":{"typeIdentifier":"t_contract$_ICheckpointManager_$47056","typeString":"contract ICheckpointManager"}},"id":47109,"nodeType":"ExpressionStatement","src":"1718:58:146"},{"expression":{"id":47114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":47110,"name":"fxRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47088,"src":"1782:6:146","typeDescriptions":{"typeIdentifier":"t_contract$_IFxStateSender_$47038","typeString":"contract IFxStateSender"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":47112,"name":"_fxRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47101,"src":"1806:7:146","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":47111,"name":"IFxStateSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47038,"src":"1791:14:146","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IFxStateSender_$47038_$","typeString":"type(contract IFxStateSender)"}},"id":47113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1791:23:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IFxStateSender_$47038","typeString":"contract IFxStateSender"}},"src":"1782:32:146","typeDescriptions":{"typeIdentifier":"t_contract$_IFxStateSender_$47038","typeString":"contract IFxStateSender"}},"id":47115,"nodeType":"ExpressionStatement","src":"1782:32:146"}]},"id":47117,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":47102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47099,"mutability":"mutable","name":"_checkpointManager","nameLocation":"1675:18:146","nodeType":"VariableDeclaration","scope":47117,"src":"1667:26:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47098,"name":"address","nodeType":"ElementaryTypeName","src":"1667:7:146","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47101,"mutability":"mutable","name":"_fxRoot","nameLocation":"1703:7:146","nodeType":"VariableDeclaration","scope":47117,"src":"1695:15:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47100,"name":"address","nodeType":"ElementaryTypeName","src":"1695:7:146","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1666:45:146"},"returnParameters":{"id":47103,"nodeType":"ParameterList","parameters":[],"src":"1712:0:146"},"scope":47389,"src":"1655:164:146","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":47136,"nodeType":"Block","src":"1932:131:146","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":47128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47123,"name":"fxChildTunnel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47093,"src":"1946:13:146","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"307830","id":47126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1971:3:146","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":47125,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1963:7:146","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":47124,"name":"address","nodeType":"ElementaryTypeName","src":"1963:7:146","typeDescriptions":{}}},"id":47127,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1963:12:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1946:29:146","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"467842617365526f6f7454756e6e656c3a204348494c445f54554e4e454c5f414c52454144595f534554","id":47129,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1977:44:146","typeDescriptions":{"typeIdentifier":"t_stringliteral_1dc310af12cba7b1018a7df66f4a5d342cf94c76291e27400d58d59cb64eb899","typeString":"literal_string \"FxBaseRootTunnel: CHILD_TUNNEL_ALREADY_SET\""},"value":"FxBaseRootTunnel: CHILD_TUNNEL_ALREADY_SET"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1dc310af12cba7b1018a7df66f4a5d342cf94c76291e27400d58d59cb64eb899","typeString":"literal_string \"FxBaseRootTunnel: CHILD_TUNNEL_ALREADY_SET\""}],"id":47122,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1938:7:146","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":47130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1938:84:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47131,"nodeType":"ExpressionStatement","src":"1938:84:146"},{"expression":{"id":47134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":47132,"name":"fxChildTunnel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47093,"src":"2028:13:146","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":47133,"name":"_fxChildTunnel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47119,"src":"2044:14:146","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2028:30:146","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":47135,"nodeType":"ExpressionStatement","src":"2028:30:146"}]},"id":47137,"implemented":true,"kind":"function","modifiers":[],"name":"setFxChildTunnel","nameLocation":"1874:16:146","nodeType":"FunctionDefinition","parameters":{"id":47120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47119,"mutability":"mutable","name":"_fxChildTunnel","nameLocation":"1899:14:146","nodeType":"VariableDeclaration","scope":47137,"src":"1891:22:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47118,"name":"address","nodeType":"ElementaryTypeName","src":"1891:7:146","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1890:24:146"},"returnParameters":{"id":47121,"nodeType":"ParameterList","parameters":[],"src":"1932:0:146"},"scope":47389,"src":"1865:198:146","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":47150,"nodeType":"Block","src":"2400:60:146","statements":[{"expression":{"arguments":[{"id":47146,"name":"fxChildTunnel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47093,"src":"2432:13:146","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":47147,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47140,"src":"2447:7:146","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":47143,"name":"fxRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47088,"src":"2406:6:146","typeDescriptions":{"typeIdentifier":"t_contract$_IFxStateSender_$47038","typeString":"contract IFxStateSender"}},"id":47145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2413:18:146","memberName":"sendMessageToChild","nodeType":"MemberAccess","referencedDeclaration":47037,"src":"2406:25:146","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory) external"}},"id":47148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2406:49:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47149,"nodeType":"ExpressionStatement","src":"2406:49:146"}]},"documentation":{"id":47138,"nodeType":"StructuredDocumentation","src":"2067:270:146","text":" @notice Send bytes message to Child Tunnel\n @param message bytes message that will be sent to Child Tunnel\n some message examples -\n   abi.encode(tokenId);\n   abi.encode(tokenId, tokenMetadata);\n   abi.encode(messageType, messageData);"},"id":47151,"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessageToChild","nameLocation":"2349:19:146","nodeType":"FunctionDefinition","parameters":{"id":47141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47140,"mutability":"mutable","name":"message","nameLocation":"2382:7:146","nodeType":"VariableDeclaration","scope":47151,"src":"2369:20:146","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47139,"name":"bytes","nodeType":"ElementaryTypeName","src":"2369:5:146","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2368:22:146"},"returnParameters":{"id":47142,"nodeType":"ParameterList","parameters":[],"src":"2400:0:146"},"scope":47389,"src":"2340:120:146","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":47313,"nodeType":"Block","src":"2556:2040:146","statements":[{"assignments":[47162],"declarations":[{"constant":false,"id":47162,"mutability":"mutable","name":"payload","nameLocation":"2599:7:146","nodeType":"VariableDeclaration","scope":47313,"src":"2562:44:146","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload"},"typeName":{"id":47161,"nodeType":"UserDefinedTypeName","pathNode":{"id":47160,"name":"ExitPayloadReader.ExitPayload","nameLocations":["2562:17:146","2580:11:146"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"2562:29:146"},"referencedDeclaration":44983,"src":"2562:29:146","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_storage_ptr","typeString":"struct ExitPayloadReader.ExitPayload"}},"visibility":"internal"}],"id":47166,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47163,"name":"inputData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47153,"src":"2609:9:146","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":47164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2619:13:146","memberName":"toExitPayload","nodeType":"MemberAccess","referencedDeclaration":45082,"src":"2609:23:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_ExitPayload_$44983_memory_ptr_$bound_to$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (struct ExitPayloadReader.ExitPayload memory)"}},"id":47165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2609:25:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"nodeType":"VariableDeclarationStatement","src":"2562:72:146"},{"assignments":[47168],"declarations":[{"constant":false,"id":47168,"mutability":"mutable","name":"branchMaskBytes","nameLocation":"2654:15:146","nodeType":"VariableDeclaration","scope":47313,"src":"2641:28:146","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47167,"name":"bytes","nodeType":"ElementaryTypeName","src":"2641:5:146","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":47172,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47169,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47162,"src":"2672:7:146","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":47170,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2680:20:146","memberName":"getBranchMaskAsBytes","nodeType":"MemberAccess","referencedDeclaration":45310,"src":"2672:28:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ExitPayload_$44983_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_ExitPayload_$44983_memory_ptr_$","typeString":"function (struct ExitPayloadReader.ExitPayload memory) pure returns (bytes memory)"}},"id":47171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2672:30:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"2641:61:146"},{"assignments":[47174],"declarations":[{"constant":false,"id":47174,"mutability":"mutable","name":"blockNumber","nameLocation":"2716:11:146","nodeType":"VariableDeclaration","scope":47313,"src":"2708:19:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47173,"name":"uint256","nodeType":"ElementaryTypeName","src":"2708:7:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":47178,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47175,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47162,"src":"2730:7:146","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":47176,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2738:14:146","memberName":"getBlockNumber","nodeType":"MemberAccess","referencedDeclaration":45130,"src":"2730:22:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ExitPayload_$44983_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ExitPayload_$44983_memory_ptr_$","typeString":"function (struct ExitPayloadReader.ExitPayload memory) pure returns (uint256)"}},"id":47177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2730:24:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2708:46:146"},{"assignments":[47180],"declarations":[{"constant":false,"id":47180,"mutability":"mutable","name":"exitHash","nameLocation":"2909:8:146","nodeType":"VariableDeclaration","scope":47313,"src":"2901:16:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47179,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2901:7:146","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":47194,"initialValue":{"arguments":[{"arguments":[{"id":47184,"name":"blockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47174,"src":"2963:11:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":47187,"name":"branchMaskBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47168,"src":"3259:15:146","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":47185,"name":"MerklePatriciaProof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46084,"src":"3223:19:146","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MerklePatriciaProof_$46084_$","typeString":"type(library MerklePatriciaProof)"}},"id":47186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3243:15:146","memberName":"_getNibbleArray","nodeType":"MemberAccess","referencedDeclaration":46043,"src":"3223:35:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bytes memory)"}},"id":47188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3223:52:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47189,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47162,"src":"3285:7:146","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":47190,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3293:18:146","memberName":"getReceiptLogIndex","nodeType":"MemberAccess","referencedDeclaration":45342,"src":"3285:26:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ExitPayload_$44983_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ExitPayload_$44983_memory_ptr_$","typeString":"function (struct ExitPayloadReader.ExitPayload memory) pure returns (uint256)"}},"id":47191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3285:28:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":47182,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2937:3:146","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":47183,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2941:12:146","memberName":"encodePacked","nodeType":"MemberAccess","src":"2937:16:146","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":47192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2937:384:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":47181,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2920:9:146","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":47193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2920:407:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2901:426:146"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":47200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":47196,"name":"processedExits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47097,"src":"3341:14:146","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":47198,"indexExpression":{"id":47197,"name":"exitHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47180,"src":"3356:8:146","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3341:24:146","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":47199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3369:5:146","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"3341:33:146","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4678526f6f7454756e6e656c3a20455849545f414c52454144595f50524f434553534544","id":47201,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3376:38:146","typeDescriptions":{"typeIdentifier":"t_stringliteral_346ac4d916e6e0ff921470f98a98a708e34aa5c8a93b4076794f133e004e36a5","typeString":"literal_string \"FxRootTunnel: EXIT_ALREADY_PROCESSED\""},"value":"FxRootTunnel: EXIT_ALREADY_PROCESSED"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_346ac4d916e6e0ff921470f98a98a708e34aa5c8a93b4076794f133e004e36a5","typeString":"literal_string \"FxRootTunnel: EXIT_ALREADY_PROCESSED\""}],"id":47195,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3333:7:146","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":47202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3333:82:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47203,"nodeType":"ExpressionStatement","src":"3333:82:146"},{"expression":{"id":47208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":47204,"name":"processedExits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47097,"src":"3421:14:146","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":47206,"indexExpression":{"id":47205,"name":"exitHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47180,"src":"3436:8:146","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3421:24:146","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":47207,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3448:4:146","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"3421:31:146","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47209,"nodeType":"ExpressionStatement","src":"3421:31:146"},{"assignments":[47214],"declarations":[{"constant":false,"id":47214,"mutability":"mutable","name":"receipt","nameLocation":"3492:7:146","nodeType":"VariableDeclaration","scope":47313,"src":"3459:40:146","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_memory_ptr","typeString":"struct ExitPayloadReader.Receipt"},"typeName":{"id":47213,"nodeType":"UserDefinedTypeName","pathNode":{"id":47212,"name":"ExitPayloadReader.Receipt","nameLocations":["3459:17:146","3477:7:146"],"nodeType":"IdentifierPath","referencedDeclaration":44992,"src":"3459:25:146"},"referencedDeclaration":44992,"src":"3459:25:146","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_storage_ptr","typeString":"struct ExitPayloadReader.Receipt"}},"visibility":"internal"}],"id":47218,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47215,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47162,"src":"3502:7:146","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":47216,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3510:10:146","memberName":"getReceipt","nodeType":"MemberAccess","referencedDeclaration":45278,"src":"3502:18:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ExitPayload_$44983_memory_ptr_$returns$_t_struct$_Receipt_$44992_memory_ptr_$bound_to$_t_struct$_ExitPayload_$44983_memory_ptr_$","typeString":"function (struct ExitPayloadReader.ExitPayload memory) pure returns (struct ExitPayloadReader.Receipt memory)"}},"id":47217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3502:20:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_memory_ptr","typeString":"struct ExitPayloadReader.Receipt memory"}},"nodeType":"VariableDeclarationStatement","src":"3459:63:146"},{"assignments":[47223],"declarations":[{"constant":false,"id":47223,"mutability":"mutable","name":"log","nameLocation":"3557:3:146","nodeType":"VariableDeclaration","scope":47313,"src":"3528:32:146","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_memory_ptr","typeString":"struct ExitPayloadReader.Log"},"typeName":{"id":47222,"nodeType":"UserDefinedTypeName","pathNode":{"id":47221,"name":"ExitPayloadReader.Log","nameLocations":["3528:17:146","3546:3:146"],"nodeType":"IdentifierPath","referencedDeclaration":45000,"src":"3528:21:146"},"referencedDeclaration":45000,"src":"3528:21:146","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_storage_ptr","typeString":"struct ExitPayloadReader.Log"}},"visibility":"internal"}],"id":47227,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47224,"name":"receipt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47214,"src":"3563:7:146","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_memory_ptr","typeString":"struct ExitPayloadReader.Receipt memory"}},"id":47225,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3571:6:146","memberName":"getLog","nodeType":"MemberAccess","referencedDeclaration":45386,"src":"3563:14:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Receipt_$44992_memory_ptr_$returns$_t_struct$_Log_$45000_memory_ptr_$bound_to$_t_struct$_Receipt_$44992_memory_ptr_$","typeString":"function (struct ExitPayloadReader.Receipt memory) pure returns (struct ExitPayloadReader.Log memory)"}},"id":47226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3563:16:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_memory_ptr","typeString":"struct ExitPayloadReader.Log memory"}},"nodeType":"VariableDeclarationStatement","src":"3528:51:146"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":47233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47229,"name":"fxChildTunnel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47093,"src":"3620:13:146","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47230,"name":"log","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47223,"src":"3637:3:146","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_memory_ptr","typeString":"struct ExitPayloadReader.Log memory"}},"id":47231,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3641:10:146","memberName":"getEmitter","nodeType":"MemberAccess","referencedDeclaration":45403,"src":"3637:14:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Log_$45000_memory_ptr_$returns$_t_address_$bound_to$_t_struct$_Log_$45000_memory_ptr_$","typeString":"function (struct ExitPayloadReader.Log memory) pure returns (address)"}},"id":47232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3637:16:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3620:33:146","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4678526f6f7454756e6e656c3a20494e56414c49445f46585f4348494c445f54554e4e454c","id":47234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3655:39:146","typeDescriptions":{"typeIdentifier":"t_stringliteral_e20402930bc2a62dcad7f5124f56dbfe0c166bf9b0c73c01cd54b14a41c30523","typeString":"literal_string \"FxRootTunnel: INVALID_FX_CHILD_TUNNEL\""},"value":"FxRootTunnel: INVALID_FX_CHILD_TUNNEL"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e20402930bc2a62dcad7f5124f56dbfe0c166bf9b0c73c01cd54b14a41c30523","typeString":"literal_string \"FxRootTunnel: INVALID_FX_CHILD_TUNNEL\""}],"id":47228,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3612:7:146","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":47235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3612:83:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47236,"nodeType":"ExpressionStatement","src":"3612:83:146"},{"assignments":[47238],"declarations":[{"constant":false,"id":47238,"mutability":"mutable","name":"receiptRoot","nameLocation":"3710:11:146","nodeType":"VariableDeclaration","scope":47313,"src":"3702:19:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47237,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3702:7:146","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":47242,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47239,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47162,"src":"3724:7:146","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":47240,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3732:14:146","memberName":"getReceiptRoot","nodeType":"MemberAccess","referencedDeclaration":45184,"src":"3724:22:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ExitPayload_$44983_memory_ptr_$returns$_t_bytes32_$bound_to$_t_struct$_ExitPayload_$44983_memory_ptr_$","typeString":"function (struct ExitPayloadReader.ExitPayload memory) pure returns (bytes32)"}},"id":47241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3724:24:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3702:46:146"},{"expression":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47246,"name":"receipt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47214,"src":"3828:7:146","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$44992_memory_ptr","typeString":"struct ExitPayloadReader.Receipt memory"}},"id":47247,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3836:7:146","memberName":"toBytes","nodeType":"MemberAccess","referencedDeclaration":45354,"src":"3828:15:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Receipt_$44992_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Receipt_$44992_memory_ptr_$","typeString":"function (struct ExitPayloadReader.Receipt memory) pure returns (bytes memory)"}},"id":47248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3828:17:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":47249,"name":"branchMaskBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47168,"src":"3847:15:146","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47250,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47162,"src":"3864:7:146","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":47251,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3872:15:146","memberName":"getReceiptProof","nodeType":"MemberAccess","referencedDeclaration":45294,"src":"3864:23:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ExitPayload_$44983_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_ExitPayload_$44983_memory_ptr_$","typeString":"function (struct ExitPayloadReader.ExitPayload memory) pure returns (bytes memory)"}},"id":47252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3864:25:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":47253,"name":"receiptRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47238,"src":"3891:11:146","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":47244,"name":"MerklePatriciaProof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46084,"src":"3801:19:146","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MerklePatriciaProof_$46084_$","typeString":"type(library MerklePatriciaProof)"}},"id":47245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3821:6:146","memberName":"verify","nodeType":"MemberAccess","referencedDeclaration":45839,"src":"3801:26:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes memory,bytes memory,bytes memory,bytes32) pure returns (bool)"}},"id":47254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3801:102:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4678526f6f7454756e6e656c3a20494e56414c49445f524543454950545f50524f4f46","id":47255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3911:37:146","typeDescriptions":{"typeIdentifier":"t_stringliteral_2ce2fedc24e79d64f58937c7672062618900d7fda5b396849b04c1ef7692f676","typeString":"literal_string \"FxRootTunnel: INVALID_RECEIPT_PROOF\""},"value":"FxRootTunnel: INVALID_RECEIPT_PROOF"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2ce2fedc24e79d64f58937c7672062618900d7fda5b396849b04c1ef7692f676","typeString":"literal_string \"FxRootTunnel: INVALID_RECEIPT_PROOF\""}],"id":47243,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3786:7:146","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":47256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3786:168:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47257,"nodeType":"ExpressionStatement","src":"3786:168:146"},{"expression":{"arguments":[{"id":47259,"name":"blockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47174,"src":"4037:11:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47260,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47162,"src":"4056:7:146","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":47261,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4064:12:146","memberName":"getBlockTime","nodeType":"MemberAccess","referencedDeclaration":45146,"src":"4056:20:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ExitPayload_$44983_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ExitPayload_$44983_memory_ptr_$","typeString":"function (struct ExitPayloadReader.ExitPayload memory) pure returns (uint256)"}},"id":47262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4056:22:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47263,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47162,"src":"4086:7:146","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":47264,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4094:9:146","memberName":"getTxRoot","nodeType":"MemberAccess","referencedDeclaration":45165,"src":"4086:17:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ExitPayload_$44983_memory_ptr_$returns$_t_bytes32_$bound_to$_t_struct$_ExitPayload_$44983_memory_ptr_$","typeString":"function (struct ExitPayloadReader.ExitPayload memory) pure returns (bytes32)"}},"id":47265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4086:19:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":47266,"name":"receiptRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47238,"src":"4113:11:146","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47267,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47162,"src":"4132:7:146","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":47268,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4140:15:146","memberName":"getHeaderNumber","nodeType":"MemberAccess","referencedDeclaration":45098,"src":"4132:23:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ExitPayload_$44983_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ExitPayload_$44983_memory_ptr_$","typeString":"function (struct ExitPayloadReader.ExitPayload memory) pure returns (uint256)"}},"id":47269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4132:25:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47270,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47162,"src":"4165:7:146","typeDescriptions":{"typeIdentifier":"t_struct$_ExitPayload_$44983_memory_ptr","typeString":"struct ExitPayloadReader.ExitPayload memory"}},"id":47271,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4173:13:146","memberName":"getBlockProof","nodeType":"MemberAccess","referencedDeclaration":45114,"src":"4165:21:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ExitPayload_$44983_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_ExitPayload_$44983_memory_ptr_$","typeString":"function (struct ExitPayloadReader.ExitPayload memory) pure returns (bytes memory)"}},"id":47272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4165:23:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":47258,"name":"_checkBlockMembershipInCheckpoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47365,"src":"3996:33:146","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_bytes32_$_t_bytes32_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,uint256,bytes32,bytes32,uint256,bytes memory) view returns (uint256)"}},"id":47273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3996:198:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47274,"nodeType":"ExpressionStatement","src":"3996:198:146"},{"assignments":[47279],"declarations":[{"constant":false,"id":47279,"mutability":"mutable","name":"topics","nameLocation":"4236:6:146","nodeType":"VariableDeclaration","scope":47313,"src":"4201:41:146","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LogTopics_$45005_memory_ptr","typeString":"struct ExitPayloadReader.LogTopics"},"typeName":{"id":47278,"nodeType":"UserDefinedTypeName","pathNode":{"id":47277,"name":"ExitPayloadReader.LogTopics","nameLocations":["4201:17:146","4219:9:146"],"nodeType":"IdentifierPath","referencedDeclaration":45005,"src":"4201:27:146"},"referencedDeclaration":45005,"src":"4201:27:146","typeDescriptions":{"typeIdentifier":"t_struct$_LogTopics_$45005_storage_ptr","typeString":"struct ExitPayloadReader.LogTopics"}},"visibility":"internal"}],"id":47283,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47280,"name":"log","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47223,"src":"4245:3:146","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_memory_ptr","typeString":"struct ExitPayloadReader.Log memory"}},"id":47281,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4249:9:146","memberName":"getTopics","nodeType":"MemberAccess","referencedDeclaration":45422,"src":"4245:13:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Log_$45000_memory_ptr_$returns$_t_struct$_LogTopics_$45005_memory_ptr_$bound_to$_t_struct$_Log_$45000_memory_ptr_$","typeString":"function (struct ExitPayloadReader.Log memory) pure returns (struct ExitPayloadReader.LogTopics memory)"}},"id":47282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4245:15:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LogTopics_$45005_memory_ptr","typeString":"struct ExitPayloadReader.LogTopics memory"}},"nodeType":"VariableDeclarationStatement","src":"4201:59:146"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":47295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"hexValue":"30","id":47289,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4306:1:146","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":47287,"name":"topics","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47279,"src":"4290:6:146","typeDescriptions":{"typeIdentifier":"t_struct$_LogTopics_$45005_memory_ptr","typeString":"struct ExitPayloadReader.LogTopics memory"}},"id":47288,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4297:8:146","memberName":"getField","nodeType":"MemberAccess","referencedDeclaration":45469,"src":"4290:15:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_LogTopics_$45005_memory_ptr_$_t_uint256_$returns$_t_struct$_RLPItem_$46106_memory_ptr_$bound_to$_t_struct$_LogTopics_$45005_memory_ptr_$","typeString":"function (struct ExitPayloadReader.LogTopics memory,uint256) pure returns (struct RLPReader.RLPItem memory)"}},"id":47290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4290:18:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RLPItem_$46106_memory_ptr","typeString":"struct RLPReader.RLPItem memory"}},"id":47291,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4309:6:146","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":46603,"src":"4290:25:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_RLPItem_$46106_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_RLPItem_$46106_memory_ptr_$","typeString":"function (struct RLPReader.RLPItem memory) pure returns (uint256)"}},"id":47292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4290:27:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":47286,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4282:7:146","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":47285,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4282:7:146","typeDescriptions":{}}},"id":47293,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4282:36:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":47294,"name":"SEND_MESSAGE_EVENT_SIG","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47085,"src":"4322:22:146","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4282:62:146","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4678526f6f7454756e6e656c3a20494e56414c49445f5349474e4154555245","id":47296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4375:33:146","typeDescriptions":{"typeIdentifier":"t_stringliteral_bb7a552d748e26b221e0250d9c5275afe2a0161f67e052c27f605992e65ad73d","typeString":"literal_string \"FxRootTunnel: INVALID_SIGNATURE\""},"value":"FxRootTunnel: INVALID_SIGNATURE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bb7a552d748e26b221e0250d9c5275afe2a0161f67e052c27f605992e65ad73d","typeString":"literal_string \"FxRootTunnel: INVALID_SIGNATURE\""}],"id":47284,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4267:7:146","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":47297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4267:147:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47298,"nodeType":"ExpressionStatement","src":"4267:147:146"},{"assignments":[47300],"declarations":[{"constant":false,"id":47300,"mutability":"mutable","name":"message","nameLocation":"4463:7:146","nodeType":"VariableDeclaration","scope":47313,"src":"4450:20:146","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47299,"name":"bytes","nodeType":"ElementaryTypeName","src":"4450:5:146","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":47310,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47303,"name":"log","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47223,"src":"4484:3:146","typeDescriptions":{"typeIdentifier":"t_struct$_Log_$45000_memory_ptr","typeString":"struct ExitPayloadReader.Log memory"}},"id":47304,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4488:7:146","memberName":"getData","nodeType":"MemberAccess","referencedDeclaration":45438,"src":"4484:11:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Log_$45000_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Log_$45000_memory_ptr_$","typeString":"function (struct ExitPayloadReader.Log memory) pure returns (bytes memory)"}},"id":47305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4484:13:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":47307,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4500:5:146","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":47306,"name":"bytes","nodeType":"ElementaryTypeName","src":"4500:5:146","typeDescriptions":{}}}],"id":47308,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4499:7:146","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"}],"expression":{"id":47301,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4473:3:146","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":47302,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4477:6:146","memberName":"decode","nodeType":"MemberAccess","src":"4473:10:146","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":47309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4473:34:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4450:57:146"},{"expression":{"id":47311,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47300,"src":"4584:7:146","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":47157,"id":47312,"nodeType":"Return","src":"4577:14:146"}]},"id":47314,"implemented":true,"kind":"function","modifiers":[],"name":"_validateAndExtractMessage","nameLocation":"2473:26:146","nodeType":"FunctionDefinition","parameters":{"id":47154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47153,"mutability":"mutable","name":"inputData","nameLocation":"2513:9:146","nodeType":"VariableDeclaration","scope":47314,"src":"2500:22:146","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47152,"name":"bytes","nodeType":"ElementaryTypeName","src":"2500:5:146","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2499:24:146"},"returnParameters":{"id":47157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47156,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47314,"src":"2542:12:146","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47155,"name":"bytes","nodeType":"ElementaryTypeName","src":"2542:5:146","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2541:14:146"},"scope":47389,"src":"2464:2132:146","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":47364,"nodeType":"Block","src":"4826:379:146","statements":[{"assignments":[47332,47334,null,47336,null],"declarations":[{"constant":false,"id":47332,"mutability":"mutable","name":"headerRoot","nameLocation":"4841:10:146","nodeType":"VariableDeclaration","scope":47364,"src":"4833:18:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47331,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4833:7:146","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":47334,"mutability":"mutable","name":"startBlock","nameLocation":"4861:10:146","nodeType":"VariableDeclaration","scope":47364,"src":"4853:18:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47333,"name":"uint256","nodeType":"ElementaryTypeName","src":"4853:7:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null,{"constant":false,"id":47336,"mutability":"mutable","name":"createdAt","nameLocation":"4883:9:146","nodeType":"VariableDeclaration","scope":47364,"src":"4875:17:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47335,"name":"uint256","nodeType":"ElementaryTypeName","src":"4875:7:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":47341,"initialValue":{"arguments":[{"id":47339,"name":"headerNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47324,"src":"4929:12:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":47337,"name":"checkpointManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47091,"src":"4898:17:146","typeDescriptions":{"typeIdentifier":"t_contract$_ICheckpointManager_$47056","typeString":"contract ICheckpointManager"}},"id":47338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4916:12:146","memberName":"headerBlocks","nodeType":"MemberAccess","referencedDeclaration":47055,"src":"4898:30:146","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$","typeString":"function (uint256) view external returns (bytes32,uint256,uint256,uint256,address)"}},"id":47340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4898:44:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$","typeString":"tuple(bytes32,uint256,uint256,uint256,address)"}},"nodeType":"VariableDeclarationStatement","src":"4832:110:146"},{"expression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47353,"name":"blockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47316,"src":"5062:11:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":47354,"name":"startBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47334,"src":"5076:10:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5062:24:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47356,"name":"headerRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47332,"src":"5096:10:146","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":47357,"name":"blockProof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47326,"src":"5116:10:146","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"arguments":[{"id":47346,"name":"blockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47316,"src":"4991:11:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47347,"name":"blockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47318,"src":"5004:9:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47348,"name":"txRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47320,"src":"5015:6:146","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":47349,"name":"receiptRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47322,"src":"5023:11:146","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":47344,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4974:3:146","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":47345,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4978:12:146","memberName":"encodePacked","nodeType":"MemberAccess","src":"4974:16:146","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":47350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4974:61:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":47343,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4964:9:146","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":47351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4964:72:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":47352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5037:15:146","memberName":"checkMembership","nodeType":"MemberAccess","referencedDeclaration":45579,"src":"4964:88:146","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes32_$","typeString":"function (bytes32,uint256,bytes32,bytes memory) pure returns (bool)"}},"id":47358,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4964:170:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4678526f6f7454756e6e656c3a20494e56414c49445f484541444552","id":47359,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5142:30:146","typeDescriptions":{"typeIdentifier":"t_stringliteral_ad52eb458dc59be89b09f31cb50841858fb84683b2cb7a41fdcd5c7d6e7430d9","typeString":"literal_string \"FxRootTunnel: INVALID_HEADER\""},"value":"FxRootTunnel: INVALID_HEADER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ad52eb458dc59be89b09f31cb50841858fb84683b2cb7a41fdcd5c7d6e7430d9","typeString":"literal_string \"FxRootTunnel: INVALID_HEADER\""}],"id":47342,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4949:7:146","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":47360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4949:229:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47361,"nodeType":"ExpressionStatement","src":"4949:229:146"},{"expression":{"id":47362,"name":"createdAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47336,"src":"5191:9:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":47330,"id":47363,"nodeType":"Return","src":"5184:16:146"}]},"id":47365,"implemented":true,"kind":"function","modifiers":[],"name":"_checkBlockMembershipInCheckpoint","nameLocation":"4609:33:146","nodeType":"FunctionDefinition","parameters":{"id":47327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47316,"mutability":"mutable","name":"blockNumber","nameLocation":"4656:11:146","nodeType":"VariableDeclaration","scope":47365,"src":"4648:19:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47315,"name":"uint256","nodeType":"ElementaryTypeName","src":"4648:7:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47318,"mutability":"mutable","name":"blockTime","nameLocation":"4681:9:146","nodeType":"VariableDeclaration","scope":47365,"src":"4673:17:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47317,"name":"uint256","nodeType":"ElementaryTypeName","src":"4673:7:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47320,"mutability":"mutable","name":"txRoot","nameLocation":"4704:6:146","nodeType":"VariableDeclaration","scope":47365,"src":"4696:14:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47319,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4696:7:146","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":47322,"mutability":"mutable","name":"receiptRoot","nameLocation":"4724:11:146","nodeType":"VariableDeclaration","scope":47365,"src":"4716:19:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47321,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4716:7:146","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":47324,"mutability":"mutable","name":"headerNumber","nameLocation":"4749:12:146","nodeType":"VariableDeclaration","scope":47365,"src":"4741:20:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47323,"name":"uint256","nodeType":"ElementaryTypeName","src":"4741:7:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47326,"mutability":"mutable","name":"blockProof","nameLocation":"4780:10:146","nodeType":"VariableDeclaration","scope":47365,"src":"4767:23:146","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47325,"name":"bytes","nodeType":"ElementaryTypeName","src":"4767:5:146","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4642:152:146"},"returnParameters":{"id":47330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47329,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47365,"src":"4817:7:146","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47328,"name":"uint256","nodeType":"ElementaryTypeName","src":"4817:7:146","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4816:9:146"},"scope":47389,"src":"4600:605:146","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":47381,"nodeType":"Block","src":"6205:110:146","statements":[{"assignments":[47372],"declarations":[{"constant":false,"id":47372,"mutability":"mutable","name":"message","nameLocation":"6224:7:146","nodeType":"VariableDeclaration","scope":47381,"src":"6211:20:146","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47371,"name":"bytes","nodeType":"ElementaryTypeName","src":"6211:5:146","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":47376,"initialValue":{"arguments":[{"id":47374,"name":"inputData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47368,"src":"6261:9:146","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":47373,"name":"_validateAndExtractMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47314,"src":"6234:26:146","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bytes memory)"}},"id":47375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6234:37:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"6211:60:146"},{"expression":{"arguments":[{"id":47378,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47372,"src":"6302:7:146","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":47377,"name":"_processMessageFromChild","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47388,"src":"6277:24:146","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory)"}},"id":47379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6277:33:146","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47380,"nodeType":"ExpressionStatement","src":"6277:33:146"}]},"documentation":{"id":47366,"nodeType":"StructuredDocumentation","src":"5209:930:146","text":" @notice receive message from  L2 to L1, validated by proof\n @dev This function verifies if the transaction actually happened on child chain\n @param inputData RLP encoded data of the reference tx containing following list of fields\n  0 - headerNumber - Checkpoint header block number containing the reference tx\n  1 - blockProof - Proof that the block header (in the child chain) is a leaf in the submitted merkle root\n  2 - blockNumber - Block number containing the reference tx on child chain\n  3 - blockTime - Reference tx block time\n  4 - txRoot - Transactions root of block\n  5 - receiptRoot - Receipts root of block\n  6 - receipt - Receipt of the reference transaction\n  7 - receiptProof - Merkle proof of the reference receipt\n  8 - branchMask - 32 bits denoting the path of receipt in merkle tree\n  9 - receiptLogIndex - Log Index to read from the receipt"},"functionSelector":"f953cec7","id":47382,"implemented":true,"kind":"function","modifiers":[],"name":"receiveMessage","nameLocation":"6151:14:146","nodeType":"FunctionDefinition","parameters":{"id":47369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47368,"mutability":"mutable","name":"inputData","nameLocation":"6179:9:146","nodeType":"VariableDeclaration","scope":47382,"src":"6166:22:146","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47367,"name":"bytes","nodeType":"ElementaryTypeName","src":"6166:5:146","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6165:24:146"},"returnParameters":{"id":47370,"nodeType":"ParameterList","parameters":[],"src":"6205:0:146"},"scope":47389,"src":"6142:173:146","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"documentation":{"id":47383,"nodeType":"StructuredDocumentation","src":"6319:354:146","text":" @notice Process message received from Child Tunnel\n @dev function needs to be implemented to handle message as per requirement\n This is called by onStateReceive function.\n Since it is called via a system call, any event will not be emitted during its execution.\n @param message bytes message that was sent from Child Tunnel"},"id":47388,"implemented":false,"kind":"function","modifiers":[],"name":"_processMessageFromChild","nameLocation":"6685:24:146","nodeType":"FunctionDefinition","parameters":{"id":47386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47385,"mutability":"mutable","name":"message","nameLocation":"6723:7:146","nodeType":"VariableDeclaration","scope":47388,"src":"6710:20:146","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47384,"name":"bytes","nodeType":"ElementaryTypeName","src":"6710:5:146","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6709:22:146"},"returnParameters":{"id":47387,"nodeType":"ParameterList","parameters":[],"src":"6748:0:146"},"scope":47389,"src":"6676:73:146","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":47390,"src":"811:5940:146","usedErrors":[]}],"src":"122:6630:146"},"id":146},"contracts/messaging/connectors/zksync/ZkSyncHubConnector.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/zksync/ZkSyncHubConnector.sol","exportedSymbols":{"Connector":[39244],"Diamond":[6011],"GasCap":[39367],"HubConnector":[39420],"IDiamondCut":[4805],"IERC20":[299],"IExecutor":[4915],"IGetters":[5015],"IGovernance":[5086],"IMailbox":[5218],"IRootManager":[47888],"IZkSync":[5236],"L2Log":[3769],"L2Message":[3776],"ZkSyncHubConnector":[47628]},"id":47629,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":47391,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:147"},{"absolutePath":"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IZkSync.sol","file":"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IZkSync.sol","id":47392,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47629,"sourceUnit":5237,"src":"110:81:147","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/messaging/interfaces/IRootManager.sol","file":"../../interfaces/IRootManager.sol","id":47394,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47629,"sourceUnit":47889,"src":"193:63:147","symbolAliases":[{"foreign":{"id":47393,"name":"IRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47888,"src":"201:12:147","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/HubConnector.sol","file":"../HubConnector.sol","id":47396,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47629,"sourceUnit":39421,"src":"257:49:147","symbolAliases":[{"foreign":{"id":47395,"name":"HubConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39420,"src":"265:12:147","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/Connector.sol","file":"../Connector.sol","id":47398,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47629,"sourceUnit":39245,"src":"307:43:147","symbolAliases":[{"foreign":{"id":47397,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"315:9:147","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/GasCap.sol","file":"../GasCap.sol","id":47400,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47629,"sourceUnit":39368,"src":"351:37:147","symbolAliases":[{"foreign":{"id":47399,"name":"GasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39367,"src":"359:6:147","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":47401,"name":"HubConnector","nameLocations":["421:12:147"],"nodeType":"IdentifierPath","referencedDeclaration":39420,"src":"421:12:147"},"id":47402,"nodeType":"InheritanceSpecifier","src":"421:12:147"},{"baseName":{"id":47403,"name":"GasCap","nameLocations":["435:6:147"],"nodeType":"IdentifierPath","referencedDeclaration":39367,"src":"435:6:147"},"id":47404,"nodeType":"InheritanceSpecifier","src":"435:6:147"}],"canonicalName":"ZkSyncHubConnector","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":47628,"linearizedBaseContracts":[47628,39367,39420,39244,47778,49928,50003],"name":"ZkSyncHubConnector","nameLocation":"399:18:147","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"c1f0808a","id":47408,"mutability":"mutable","name":"processed","nameLocation":"904:9:147","nodeType":"VariableDeclaration","scope":47628,"src":"872:41:147","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"typeName":{"id":47407,"keyType":{"id":47405,"name":"bytes32","nodeType":"ElementaryTypeName","src":"880:7:147","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"872:24:147","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"valueType":{"id":47406,"name":"bool","nodeType":"ElementaryTypeName","src":"891:4:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"body":{"id":47435,"nodeType":"Block","src":"1244:2:147","statements":[]},"id":47436,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":47425,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47410,"src":"1166:7:147","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":47426,"name":"_mirrorDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47412,"src":"1175:13:147","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":47427,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47414,"src":"1190:4:147","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":47428,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47416,"src":"1196:12:147","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":47429,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47418,"src":"1210:16:147","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":47430,"kind":"baseConstructorSpecifier","modifierName":{"id":47424,"name":"HubConnector","nameLocations":["1153:12:147"],"nodeType":"IdentifierPath","referencedDeclaration":39420,"src":"1153:12:147"},"nodeType":"ModifierInvocation","src":"1153:74:147"},{"arguments":[{"id":47432,"name":"_gasCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47422,"src":"1235:7:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":47433,"kind":"baseConstructorSpecifier","modifierName":{"id":47431,"name":"GasCap","nameLocations":["1228:6:147"],"nodeType":"IdentifierPath","referencedDeclaration":39367,"src":"1228:6:147"},"nodeType":"ModifierInvocation","src":"1228:15:147"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":47423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47410,"mutability":"mutable","name":"_domain","nameLocation":"985:7:147","nodeType":"VariableDeclaration","scope":47436,"src":"978:14:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":47409,"name":"uint32","nodeType":"ElementaryTypeName","src":"978:6:147","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":47412,"mutability":"mutable","name":"_mirrorDomain","nameLocation":"1005:13:147","nodeType":"VariableDeclaration","scope":47436,"src":"998:20:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":47411,"name":"uint32","nodeType":"ElementaryTypeName","src":"998:6:147","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":47414,"mutability":"mutable","name":"_amb","nameLocation":"1032:4:147","nodeType":"VariableDeclaration","scope":47436,"src":"1024:12:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47413,"name":"address","nodeType":"ElementaryTypeName","src":"1024:7:147","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47416,"mutability":"mutable","name":"_rootManager","nameLocation":"1050:12:147","nodeType":"VariableDeclaration","scope":47436,"src":"1042:20:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47415,"name":"address","nodeType":"ElementaryTypeName","src":"1042:7:147","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47418,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"1076:16:147","nodeType":"VariableDeclaration","scope":47436,"src":"1068:24:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47417,"name":"address","nodeType":"ElementaryTypeName","src":"1068:7:147","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47420,"mutability":"mutable","name":"_stateCommitmentChain","nameLocation":"1106:21:147","nodeType":"VariableDeclaration","scope":47436,"src":"1098:29:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47419,"name":"address","nodeType":"ElementaryTypeName","src":"1098:7:147","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47422,"mutability":"mutable","name":"_gasCap","nameLocation":"1141:7:147","nodeType":"VariableDeclaration","scope":47436,"src":"1133:15:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47421,"name":"uint256","nodeType":"ElementaryTypeName","src":"1133:7:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"972:180:147"},"returnParameters":{"id":47434,"nodeType":"ParameterList","parameters":[],"src":"1244:0:147"},"scope":47628,"src":"961:285:147","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[39228],"body":{"id":47446,"nodeType":"Block","src":"1364:399:147","statements":[{"expression":{"hexValue":"66616c7365","id":47444,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1753:5:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":47443,"id":47445,"nodeType":"Return","src":"1746:12:147"}]},"id":47447,"implemented":true,"kind":"function","modifiers":[],"name":"_verifySender","nameLocation":"1303:13:147","nodeType":"FunctionDefinition","overrides":{"id":47440,"nodeType":"OverrideSpecifier","overrides":[],"src":"1340:8:147"},"parameters":{"id":47439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47438,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47447,"src":"1317:7:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47437,"name":"address","nodeType":"ElementaryTypeName","src":"1317:7:147","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1316:9:147"},"returnParameters":{"id":47443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47442,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47447,"src":"1358:4:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":47441,"name":"bool","nodeType":"ElementaryTypeName","src":"1358:4:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1357:6:147"},"scope":47628,"src":"1294:469:147","stateMutability":"pure","virtual":false,"visibility":"internal"},{"baseFunctions":[39210],"body":{"id":47538,"nodeType":"Block","src":"1917:1450:147","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":47457,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47452,"src":"2017:12:147","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":47458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2030:6:147","memberName":"length","nodeType":"MemberAccess","src":"2017:19:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":47459,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2040:2:147","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"2017:25:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2164617461206c656e677468","id":47461,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2044:14:147","typeDescriptions":{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""},"value":"!data length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""}],"id":47456,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2009:7:147","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":47462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2009:50:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47463,"nodeType":"ExpressionStatement","src":"2009:50:147"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":47465,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47450,"src":"2128:5:147","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":47466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2134:6:147","memberName":"length","nodeType":"MemberAccess","src":"2128:12:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":47467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2144:2:147","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"2128:18:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c656e677468","id":47469,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2148:9:147","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""},"value":"!length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""}],"id":47464,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2120:7:147","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":47470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2120:38:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47471,"nodeType":"ExpressionStatement","src":"2120:38:147"},{"assignments":[47473],"declarations":[{"constant":false,"id":47473,"mutability":"mutable","name":"_calldata","nameLocation":"2201:9:147","nodeType":"VariableDeclaration","scope":47538,"src":"2188:22:147","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47472,"name":"bytes","nodeType":"ElementaryTypeName","src":"2188:5:147","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":47481,"initialValue":{"arguments":[{"expression":{"expression":{"id":47476,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"2236:9:147","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Connector_$39244_$","typeString":"type(contract Connector)"}},"id":47477,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2246:14:147","memberName":"processMessage","nodeType":"MemberAccess","referencedDeclaration":39189,"src":"2236:24:147","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function Connector.processMessage(bytes memory)"}},"id":47478,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2261:8:147","memberName":"selector","nodeType":"MemberAccess","src":"2236:33:147","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":47479,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47450,"src":"2271:5:147","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":47474,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2213:3:147","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":47475,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2217:18:147","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2213:22:147","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":47480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2213:64:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"2188:89:147"},{"assignments":[47483],"declarations":[{"constant":false,"id":47483,"mutability":"mutable","name":"gasPrice","nameLocation":"2315:8:147","nodeType":"VariableDeclaration","scope":47538,"src":"2307:16:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47482,"name":"uint256","nodeType":"ElementaryTypeName","src":"2307:7:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":47491,"initialValue":{"arguments":[{"id":47486,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47452,"src":"2337:12:147","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":47488,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2352:7:147","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":47487,"name":"uint256","nodeType":"ElementaryTypeName","src":"2352:7:147","typeDescriptions":{}}}],"id":47489,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"2351:9:147","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":47484,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2326:3:147","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":47485,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2330:6:147","memberName":"decode","nodeType":"MemberAccess","src":"2326:10:147","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":47490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2326:35:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2307:54:147"},{"assignments":[47493],"declarations":[{"constant":false,"id":47493,"mutability":"mutable","name":"ERGS_LIMIT","nameLocation":"2406:10:147","nodeType":"VariableDeclaration","scope":47538,"src":"2398:18:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47492,"name":"uint256","nodeType":"ElementaryTypeName","src":"2398:7:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":47495,"initialValue":{"hexValue":"3130303030","id":47494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2419:5:147","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"nodeType":"VariableDeclarationStatement","src":"2398:26:147"},{"assignments":[47497],"declarations":[{"constant":false,"id":47497,"mutability":"mutable","name":"fee","nameLocation":"2467:3:147","nodeType":"VariableDeclaration","scope":47538,"src":"2459:11:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47496,"name":"uint256","nodeType":"ElementaryTypeName","src":"2459:7:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":47502,"initialValue":{"arguments":[{"expression":{"id":47499,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2481:3:147","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":47500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2485:5:147","memberName":"value","nodeType":"MemberAccess","src":"2481:9:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":47498,"name":"_getGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39366,"src":"2473:7:147","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":47501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2473:18:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2459:32:147"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47504,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47497,"src":"2540:3:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"id":47509,"name":"gasPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47483,"src":"2581:8:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47510,"name":"ERGS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47493,"src":"2591:10:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":47513,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47473,"src":"2610:9:147","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":47514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2620:6:147","memberName":"length","nodeType":"MemberAccess","src":"2610:16:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":47512,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2603:6:147","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":47511,"name":"uint32","nodeType":"ElementaryTypeName","src":"2603:6:147","typeDescriptions":{}}},"id":47515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2603:24:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"arguments":[{"id":47506,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"2554:3:147","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":47505,"name":"IZkSync","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5236,"src":"2546:7:147","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZkSync_$5236_$","typeString":"type(contract IZkSync)"}},"id":47507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2546:12:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZkSync_$5236","typeString":"contract IZkSync"}},"id":47508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2559:21:147","memberName":"l2TransactionBaseCost","nodeType":"MemberAccess","referencedDeclaration":5202,"src":"2546:34:147","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$_t_uint256_$_t_uint32_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint32) view external returns (uint256)"}},"id":47516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2546:82:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2540:88:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2166656573","id":47518,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2630:7:147","typeDescriptions":{"typeIdentifier":"t_stringliteral_867777f634bb94108a594889ab4f827c256cf5677bbf34c222dbb2e03cd5a0d3","typeString":"literal_string \"!fees\""},"value":"!fees"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_867777f634bb94108a594889ab4f827c256cf5677bbf34c222dbb2e03cd5a0d3","typeString":"literal_string \"!fees\""}],"id":47503,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2532:7:147","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":47519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2532:106:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47520,"nodeType":"ExpressionStatement","src":"2532:106:147"},{"expression":{"arguments":[{"id":47527,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"3140:15:147","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":47528,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3201:1:147","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":47529,"name":"_calldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47473,"src":"3257:9:147","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":47530,"name":"ERGS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47493,"src":"3294:10:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":47534,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3354:1:147","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":47533,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3342:11:147","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory[] memory)"},"typeName":{"baseType":{"id":47531,"name":"bytes","nodeType":"ElementaryTypeName","src":"3346:5:147","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":47532,"nodeType":"ArrayTypeName","src":"3346:7:147","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}}},"id":47535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3342:14:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}],"expression":{"arguments":[{"id":47522,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"3047:3:147","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":47521,"name":"IZkSync","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5236,"src":"3039:7:147","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZkSync_$5236_$","typeString":"type(contract IZkSync)"}},"id":47523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3039:12:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZkSync_$5236","typeString":"contract IZkSync"}},"id":47524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3052:20:147","memberName":"requestL2Transaction","nodeType":"MemberAccess","referencedDeclaration":5191,"src":"3039:33:147","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$returns$_t_bytes32_$","typeString":"function (address,uint256,bytes memory,uint256,bytes memory[] memory) payable external returns (bytes32)"}},"id":47526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":47525,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47497,"src":"3080:3:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"3039:45:147","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$returns$_t_bytes32_$value","typeString":"function (address,uint256,bytes memory,uint256,bytes memory[] memory) payable external returns (bytes32)"}},"id":47536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3039:323:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":47537,"nodeType":"ExpressionStatement","src":"3039:323:147"}]},"documentation":{"id":47448,"nodeType":"StructuredDocumentation","src":"1767:60:147","text":" @dev Sends `aggregateRoot` to messaging on l2"},"id":47539,"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessage","nameLocation":"1839:12:147","nodeType":"FunctionDefinition","overrides":{"id":47454,"nodeType":"OverrideSpecifier","overrides":[],"src":"1908:8:147"},"parameters":{"id":47453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47450,"mutability":"mutable","name":"_data","nameLocation":"1865:5:147","nodeType":"VariableDeclaration","scope":47539,"src":"1852:18:147","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47449,"name":"bytes","nodeType":"ElementaryTypeName","src":"1852:5:147","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":47452,"mutability":"mutable","name":"_encodedData","nameLocation":"1885:12:147","nodeType":"VariableDeclaration","scope":47539,"src":"1872:25:147","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47451,"name":"bytes","nodeType":"ElementaryTypeName","src":"1872:5:147","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1851:47:147"},"returnParameters":{"id":47455,"nodeType":"ParameterList","parameters":[],"src":"1917:0:147"},"scope":47628,"src":"1830:1537:147","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":47626,"nodeType":"Block","src":"4197:1030:147","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":47555,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47548,"src":"4259:8:147","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":47556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4268:6:147","memberName":"length","nodeType":"MemberAccess","src":"4259:15:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":47557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4278:2:147","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"4259:21:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c656e677468","id":47559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4282:9:147","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""},"value":"!length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""}],"id":47554,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4251:7:147","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":47560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4251:41:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47561,"nodeType":"ExpressionStatement","src":"4251:41:147"},{"assignments":[47564],"declarations":[{"constant":false,"id":47564,"mutability":"mutable","name":"zksync","nameLocation":"4307:6:147","nodeType":"VariableDeclaration","scope":47626,"src":"4299:14:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IZkSync_$5236","typeString":"contract IZkSync"},"typeName":{"id":47563,"nodeType":"UserDefinedTypeName","pathNode":{"id":47562,"name":"IZkSync","nameLocations":["4299:7:147"],"nodeType":"IdentifierPath","referencedDeclaration":5236,"src":"4299:7:147"},"referencedDeclaration":5236,"src":"4299:7:147","typeDescriptions":{"typeIdentifier":"t_contract$_IZkSync_$5236","typeString":"contract IZkSync"}},"visibility":"internal"}],"id":47568,"initialValue":{"arguments":[{"id":47566,"name":"AMB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39042,"src":"4324:3:147","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":47565,"name":"IZkSync","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5236,"src":"4316:7:147","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IZkSync_$5236_$","typeString":"type(contract IZkSync)"}},"id":47567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4316:12:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IZkSync_$5236","typeString":"contract IZkSync"}},"nodeType":"VariableDeclarationStatement","src":"4299:29:147"},{"assignments":[47571],"declarations":[{"constant":false,"id":47571,"mutability":"mutable","name":"message","nameLocation":"4351:7:147","nodeType":"VariableDeclaration","scope":47626,"src":"4334:24:147","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$3776_memory_ptr","typeString":"struct L2Message"},"typeName":{"id":47570,"nodeType":"UserDefinedTypeName","pathNode":{"id":47569,"name":"L2Message","nameLocations":["4334:9:147"],"nodeType":"IdentifierPath","referencedDeclaration":3776,"src":"4334:9:147"},"referencedDeclaration":3776,"src":"4334:9:147","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$3776_storage_ptr","typeString":"struct L2Message"}},"visibility":"internal"}],"id":47577,"initialValue":{"arguments":[{"id":47573,"name":"_l2TxNumberInBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47546,"src":"4396:18:147","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":47574,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"4430:15:147","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":47575,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47548,"src":"4459:8:147","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":47572,"name":"L2Message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3776,"src":"4361:9:147","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_L2Message_$3776_storage_ptr_$","typeString":"type(struct L2Message storage pointer)"}},"id":47576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["4379:15:147","4422:6:147","4453:4:147"],"names":["txNumberInBlock","sender","data"],"nodeType":"FunctionCall","src":"4361:113:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$3776_memory_ptr","typeString":"struct L2Message memory"}},"nodeType":"VariableDeclarationStatement","src":"4334:140:147"},{"assignments":[47579],"declarations":[{"constant":false,"id":47579,"mutability":"mutable","name":"success","nameLocation":"4486:7:147","nodeType":"VariableDeclaration","scope":47626,"src":"4481:12:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":47578,"name":"bool","nodeType":"ElementaryTypeName","src":"4481:4:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":47587,"initialValue":{"arguments":[{"id":47582,"name":"_l2BlockNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47542,"src":"4527:14:147","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":47583,"name":"_l2MessageIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47544,"src":"4543:15:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47584,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47571,"src":"4560:7:147","typeDescriptions":{"typeIdentifier":"t_struct$_L2Message_$3776_memory_ptr","typeString":"struct L2Message memory"}},{"id":47585,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47551,"src":"4569:6:147","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_L2Message_$3776_memory_ptr","typeString":"struct L2Message memory"},{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[] calldata"}],"expression":{"id":47580,"name":"zksync","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47564,"src":"4496:6:147","typeDescriptions":{"typeIdentifier":"t_contract$_IZkSync_$5236","typeString":"contract IZkSync"}},"id":47581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4503:23:147","memberName":"proveL2MessageInclusion","nodeType":"MemberAccess","referencedDeclaration":5139,"src":"4496:30:147","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$_t_uint256_$_t_struct$_L2Message_$3776_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_bool_$","typeString":"function (uint256,uint256,struct L2Message memory,bytes32[] memory) view external returns (bool)"}},"id":47586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4496:80:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"4481:95:147"},{"expression":{"arguments":[{"id":47589,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47579,"src":"4590:7:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2170726f76656e","id":47590,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4599:9:147","typeDescriptions":{"typeIdentifier":"t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab","typeString":"literal_string \"!proven\""},"value":"!proven"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab","typeString":"literal_string \"!proven\""}],"id":47588,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4582:7:147","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":47591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4582:27:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47592,"nodeType":"ExpressionStatement","src":"4582:27:147"},{"assignments":[47594],"declarations":[{"constant":false,"id":47594,"mutability":"mutable","name":"_root","nameLocation":"4624:5:147","nodeType":"VariableDeclaration","scope":47626,"src":"4616:13:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47593,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4616:7:147","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":47599,"initialValue":{"arguments":[{"id":47597,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47548,"src":"4640:8:147","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":47596,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4632:7:147","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":47595,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4632:7:147","typeDescriptions":{}}},"id":47598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4632:17:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4616:33:147"},{"condition":{"id":47603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4922:17:147","subExpression":{"baseExpression":{"id":47600,"name":"processed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47408,"src":"4923:9:147","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":47602,"indexExpression":{"id":47601,"name":"_root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47594,"src":"4933:5:147","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4923:16:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47625,"nodeType":"IfStatement","src":"4918:254:147","trueBody":{"id":47624,"nodeType":"Block","src":"4941:231:147","statements":[{"expression":{"id":47608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":47604,"name":"processed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47408,"src":"4980:9:147","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":47606,"indexExpression":{"id":47605,"name":"_root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47594,"src":"4990:5:147","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4980:16:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":47607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4999:4:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"4980:23:147","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47609,"nodeType":"ExpressionStatement","src":"4980:23:147"},{"expression":{"arguments":[{"id":47614,"name":"MIRROR_DOMAIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39048,"src":"5093:13:147","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":47615,"name":"_root","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47594,"src":"5108:5:147","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"arguments":[{"id":47611,"name":"ROOT_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39045,"src":"5069:12:147","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":47610,"name":"IRootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47888,"src":"5056:12:147","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRootManager_$47888_$","typeString":"type(contract IRootManager)"}},"id":47612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5056:26:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRootManager_$47888","typeString":"contract IRootManager"}},"id":47613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5083:9:147","memberName":"aggregate","nodeType":"MemberAccess","referencedDeclaration":47887,"src":"5056:36:147","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint32_$_t_bytes32_$returns$__$","typeString":"function (uint32,bytes32) external"}},"id":47616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5056:58:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47617,"nodeType":"ExpressionStatement","src":"5056:58:147"},{"eventCall":{"arguments":[{"id":47619,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47548,"src":"5144:8:147","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":47620,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5154:3:147","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":47621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5158:6:147","memberName":"sender","nodeType":"MemberAccess","src":"5154:10:147","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_address","typeString":"address"}],"id":47618,"name":"MessageProcessed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47765,"src":"5127:16:147","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_address_$returns$__$","typeString":"function (bytes memory,address)"}},"id":47622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5127:38:147","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47623,"nodeType":"EmitStatement","src":"5122:43:147"}]}}]},"documentation":{"id":47540,"nodeType":"StructuredDocumentation","src":"3510:236:147","text":" @notice Processes message and proves inclusion of that message in the root.\n @dev modified from: https://v2-docs.zksync.io/dev/developer-guides/Bridging/l2-l1.html#prove-inclusion-of-the-message-into-the-l2-block"},"functionSelector":"e92a492f","id":47627,"implemented":true,"kind":"function","modifiers":[],"name":"processMessageFromRoot","nameLocation":"3758:22:147","nodeType":"FunctionDefinition","parameters":{"id":47552,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47542,"mutability":"mutable","name":"_l2BlockNumber","nameLocation":"3850:14:147","nodeType":"VariableDeclaration","scope":47627,"src":"3843:21:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":47541,"name":"uint32","nodeType":"ElementaryTypeName","src":"3843:6:147","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":47544,"mutability":"mutable","name":"_l2MessageIndex","nameLocation":"3929:15:147","nodeType":"VariableDeclaration","scope":47627,"src":"3921:23:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47543,"name":"uint256","nodeType":"ElementaryTypeName","src":"3921:7:147","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47546,"mutability":"mutable","name":"_l2TxNumberInBlock","nameLocation":"4028:18:147","nodeType":"VariableDeclaration","scope":47627,"src":"4021:25:147","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":47545,"name":"uint16","nodeType":"ElementaryTypeName","src":"4021:6:147","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":47548,"mutability":"mutable","name":"_message","nameLocation":"4108:8:147","nodeType":"VariableDeclaration","scope":47627,"src":"4093:23:147","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":47547,"name":"bytes","nodeType":"ElementaryTypeName","src":"4093:5:147","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":47551,"mutability":"mutable","name":"_proof","nameLocation":"4177:6:147","nodeType":"VariableDeclaration","scope":47627,"src":"4158:25:147","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":47549,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4158:7:147","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":47550,"nodeType":"ArrayTypeName","src":"4158:9:147","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"3780:407:147"},"returnParameters":{"id":47553,"nodeType":"ParameterList","parameters":[],"src":"4197:0:147"},"scope":47628,"src":"3749:1478:147","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":47629,"src":"390:4839:147","usedErrors":[39018,49697,49699,49701,49703,49705,49707,49709]}],"src":"46:5184:147"},"id":147},"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol":{"ast":{"absolutePath":"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol","exportedSymbols":{"ACCOUNT_CODE_STORAGE_SYSTEM_CONTRACT":[7466],"BOOTLOADER_FORMAL_ADDRESS":[7455],"BYTECODE_PUBLISHING_OVERHEAD":[7576],"Connector":[39244],"DEFAULT_ACCOUNT_CODE_HASH":[7573],"DEPLOYER_SYSTEM_CONTRACT":[7510],"ECRECOVER_SYSTEM_CONTRACT":[7438],"ETH_TOKEN_SYSTEM_CONTRACT":[7548],"FORCE_DEPLOYER":[7518],"IAccountCodeStorage":[7612],"IContractDeployer":[7699],"IEthToken":[7718],"IImmutableSimulator":[7744],"IKnownCodesStorage":[7768],"IL1Messenger":[7786],"IMMUTABLE_SIMULATOR_SYSTEM_CONTRACT":[7499],"INonceHolder":[7862],"ISystemContext":[7937],"ImmutableData":[7725],"KECCAK256_SYSTEM_CONTRACT":[7556],"KNOWN_CODE_STORAGE_CONTRACT":[7488],"L1_MESSENGER_CONTRACT":[7529],"MAX_SYSTEM_CONTRACT_ADDRESS":[7432],"MSG_VALUE_SIMULATOR_IS_SYSTEM_BIT":[7581],"MSG_VALUE_SYSTEM_CONTRACT":[7537],"NONCE_HOLDER_SYSTEM_CONTRACT":[7477],"SHA256_SYSTEM_CONTRACT":[7444],"SYSTEM_CONTEXT_CONTRACT":[7570],"SYSTEM_CONTRACTS_OFFSET":[7429],"SpokeConnector":[40428],"ZkSyncSpokeConnector":[47742]},"id":47743,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":47630,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:148"},{"absolutePath":"@matterlabs/zksync-contracts/l2/system-contracts/Constants.sol","file":"@matterlabs/zksync-contracts/l2/system-contracts/Constants.sol","id":47631,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47743,"sourceUnit":7582,"src":"133:72:148","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/SpokeConnector.sol","file":"../SpokeConnector.sol","id":47633,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47743,"sourceUnit":40429,"src":"207:53:148","symbolAliases":[{"foreign":{"id":47632,"name":"SpokeConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40428,"src":"215:14:148","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/messaging/connectors/Connector.sol","file":"../Connector.sol","id":47635,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47743,"sourceUnit":39245,"src":"261:43:148","symbolAliases":[{"foreign":{"id":47634,"name":"Connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39244,"src":"269:9:148","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":47636,"name":"SpokeConnector","nameLocations":["339:14:148"],"nodeType":"IdentifierPath","referencedDeclaration":40428,"src":"339:14:148"},"id":47637,"nodeType":"InheritanceSpecifier","src":"339:14:148"}],"canonicalName":"ZkSyncSpokeConnector","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":47742,"linearizedBaseContracts":[47742,40428,10734,49688,38914,10680,11506,39292,47805,39244,47778,49928,50003],"name":"ZkSyncSpokeConnector","nameLocation":"315:20:148","nodeType":"ContractDefinition","nodes":[{"body":{"id":47672,"nodeType":"Block","src":"878:2:148","statements":[]},"id":47673,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":47660,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47639,"src":"689:7:148","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":47661,"name":"_mirrorDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47641,"src":"704:13:148","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":47662,"name":"_amb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47643,"src":"725:4:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":47663,"name":"_rootManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47645,"src":"737:12:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":47664,"name":"_mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47647,"src":"757:16:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":47665,"name":"_processGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47649,"src":"781:11:148","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47666,"name":"_reserveGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47651,"src":"800:11:148","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47667,"name":"_delayBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47653,"src":"819:12:148","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47668,"name":"_merkle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47655,"src":"839:7:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":47669,"name":"_watcherManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47657,"src":"854:15:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":47670,"kind":"baseConstructorSpecifier","modifierName":{"id":47659,"name":"SpokeConnector","nameLocations":["667:14:148"],"nodeType":"IdentifierPath","referencedDeclaration":40428,"src":"667:14:148"},"nodeType":"ModifierInvocation","src":"667:208:148"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":47658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47639,"mutability":"mutable","name":"_domain","nameLocation":"425:7:148","nodeType":"VariableDeclaration","scope":47673,"src":"418:14:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":47638,"name":"uint32","nodeType":"ElementaryTypeName","src":"418:6:148","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":47641,"mutability":"mutable","name":"_mirrorDomain","nameLocation":"445:13:148","nodeType":"VariableDeclaration","scope":47673,"src":"438:20:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":47640,"name":"uint32","nodeType":"ElementaryTypeName","src":"438:6:148","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":47643,"mutability":"mutable","name":"_amb","nameLocation":"472:4:148","nodeType":"VariableDeclaration","scope":47673,"src":"464:12:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47642,"name":"address","nodeType":"ElementaryTypeName","src":"464:7:148","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47645,"mutability":"mutable","name":"_rootManager","nameLocation":"490:12:148","nodeType":"VariableDeclaration","scope":47673,"src":"482:20:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47644,"name":"address","nodeType":"ElementaryTypeName","src":"482:7:148","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47647,"mutability":"mutable","name":"_mirrorConnector","nameLocation":"516:16:148","nodeType":"VariableDeclaration","scope":47673,"src":"508:24:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47646,"name":"address","nodeType":"ElementaryTypeName","src":"508:7:148","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47649,"mutability":"mutable","name":"_processGas","nameLocation":"546:11:148","nodeType":"VariableDeclaration","scope":47673,"src":"538:19:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47648,"name":"uint256","nodeType":"ElementaryTypeName","src":"538:7:148","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47651,"mutability":"mutable","name":"_reserveGas","nameLocation":"571:11:148","nodeType":"VariableDeclaration","scope":47673,"src":"563:19:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47650,"name":"uint256","nodeType":"ElementaryTypeName","src":"563:7:148","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47653,"mutability":"mutable","name":"_delayBlocks","nameLocation":"596:12:148","nodeType":"VariableDeclaration","scope":47673,"src":"588:20:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47652,"name":"uint256","nodeType":"ElementaryTypeName","src":"588:7:148","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47655,"mutability":"mutable","name":"_merkle","nameLocation":"622:7:148","nodeType":"VariableDeclaration","scope":47673,"src":"614:15:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47654,"name":"address","nodeType":"ElementaryTypeName","src":"614:7:148","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47657,"mutability":"mutable","name":"_watcherManager","nameLocation":"643:15:148","nodeType":"VariableDeclaration","scope":47673,"src":"635:23:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47656,"name":"address","nodeType":"ElementaryTypeName","src":"635:7:148","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"412:250:148"},"returnParameters":{"id":47671,"nodeType":"ParameterList","parameters":[],"src":"878:0:148"},"scope":47742,"src":"401:479:148","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[39228],"body":{"id":47686,"nodeType":"Block","src":"1008:558:148","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":47684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":47681,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1538:3:148","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":47682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1542:6:148","memberName":"sender","nodeType":"MemberAccess","src":"1538:10:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":47683,"name":"_expected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47675,"src":"1552:9:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1538:23:148","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":47680,"id":47685,"nodeType":"Return","src":"1531:30:148"}]},"id":47687,"implemented":true,"kind":"function","modifiers":[],"name":"_verifySender","nameLocation":"937:13:148","nodeType":"FunctionDefinition","overrides":{"id":47677,"nodeType":"OverrideSpecifier","overrides":[],"src":"984:8:148"},"parameters":{"id":47676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47675,"mutability":"mutable","name":"_expected","nameLocation":"959:9:148","nodeType":"VariableDeclaration","scope":47687,"src":"951:17:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47674,"name":"address","nodeType":"ElementaryTypeName","src":"951:7:148","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"950:19:148"},"returnParameters":{"id":47680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47679,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47687,"src":"1002:4:148","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":47678,"name":"bool","nodeType":"ElementaryTypeName","src":"1002:4:148","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1001:6:148"},"scope":47742,"src":"928:638:148","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[39210],"body":{"id":47710,"nodeType":"Block","src":"1722:193:148","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":47697,"name":"_encodedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47692,"src":"1783:12:148","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":47698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1796:6:148","memberName":"length","nodeType":"MemberAccess","src":"1783:19:148","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":47699,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1806:1:148","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1783:24:148","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2164617461206c656e677468","id":47701,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1809:14:148","typeDescriptions":{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""},"value":"!data length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b","typeString":"literal_string \"!data length\""}],"id":47696,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1775:7:148","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":47702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1775:49:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47703,"nodeType":"ExpressionStatement","src":"1775:49:148"},{"expression":{"arguments":[{"id":47707,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47690,"src":"1904:5:148","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":47704,"name":"L1_MESSENGER_CONTRACT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7529,"src":"1873:21:148","typeDescriptions":{"typeIdentifier":"t_contract$_IL1Messenger_$7786","typeString":"contract IL1Messenger"}},"id":47706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1895:8:148","memberName":"sendToL1","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"1873:30:148","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) external returns (bytes32)"}},"id":47708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1873:37:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":47709,"nodeType":"ExpressionStatement","src":"1873:37:148"}]},"documentation":{"id":47688,"nodeType":"StructuredDocumentation","src":"1570:62:148","text":" @dev Sends `outboundRoot` to root manager on l1"},"id":47711,"implemented":true,"kind":"function","modifiers":[],"name":"_sendMessage","nameLocation":"1644:12:148","nodeType":"FunctionDefinition","overrides":{"id":47694,"nodeType":"OverrideSpecifier","overrides":[],"src":"1713:8:148"},"parameters":{"id":47693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47690,"mutability":"mutable","name":"_data","nameLocation":"1670:5:148","nodeType":"VariableDeclaration","scope":47711,"src":"1657:18:148","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47689,"name":"bytes","nodeType":"ElementaryTypeName","src":"1657:5:148","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":47692,"mutability":"mutable","name":"_encodedData","nameLocation":"1690:12:148","nodeType":"VariableDeclaration","scope":47711,"src":"1677:25:148","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47691,"name":"bytes","nodeType":"ElementaryTypeName","src":"1677:5:148","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1656:47:148"},"returnParameters":{"id":47695,"nodeType":"ParameterList","parameters":[],"src":"1722:0:148"},"scope":47742,"src":"1635:280:148","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[39220],"body":{"id":47740,"nodeType":"Block","src":"2105:283:148","statements":[{"expression":{"arguments":[{"arguments":[{"id":47720,"name":"mirrorConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"2179:15:148","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":47719,"name":"_verifySender","nodeType":"Identifier","overloadedDeclarations":[47687],"referencedDeclaration":47687,"src":"2165:13:148","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":47721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2165:30:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216d6972726f72436f6e6e6563746f72","id":47722,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2197:18:148","typeDescriptions":{"typeIdentifier":"t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d","typeString":"literal_string \"!mirrorConnector\""},"value":"!mirrorConnector"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d","typeString":"literal_string \"!mirrorConnector\""}],"id":47718,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2157:7:148","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":47723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2157:59:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47724,"nodeType":"ExpressionStatement","src":"2157:59:148"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":47726,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47714,"src":"2281:5:148","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":47727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2287:6:148","memberName":"length","nodeType":"MemberAccess","src":"2281:12:148","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3332","id":47728,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2297:2:148","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"2281:18:148","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216c656e677468","id":47730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2301:9:148","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""},"value":"!length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1","typeString":"literal_string \"!length\""}],"id":47725,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2273:7:148","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":47731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2273:38:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47732,"nodeType":"ExpressionStatement","src":"2273:38:148"},{"expression":{"arguments":[{"arguments":[{"id":47736,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47714,"src":"2376:5:148","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":47735,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2368:7:148","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":47734,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2368:7:148","typeDescriptions":{}}},"id":47737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2368:14:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":47733,"name":"receiveAggregateRoot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40160,"src":"2347:20:148","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":47738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2347:36:148","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47739,"nodeType":"ExpressionStatement","src":"2347:36:148"}]},"documentation":{"id":47712,"nodeType":"StructuredDocumentation","src":"1919:120:148","text":" @dev Handles an incoming `aggregateRoot`\n NOTE: Could store latest root sent and prove aggregate root"},"id":47741,"implemented":true,"kind":"function","modifiers":[],"name":"_processMessage","nameLocation":"2051:15:148","nodeType":"FunctionDefinition","overrides":{"id":47716,"nodeType":"OverrideSpecifier","overrides":[],"src":"2096:8:148"},"parameters":{"id":47715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47714,"mutability":"mutable","name":"_data","nameLocation":"2080:5:148","nodeType":"VariableDeclaration","scope":47741,"src":"2067:18:148","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47713,"name":"bytes","nodeType":"ElementaryTypeName","src":"2067:5:148","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2066:20:148"},"returnParameters":{"id":47717,"nodeType":"ParameterList","parameters":[],"src":"2105:0:148"},"scope":47742,"src":"2042:346:148","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":47743,"src":"306:2084:148","usedErrors":[39018,49630,49697,49699,49701,49703,49705,49707,49709,50225,50227,50229,50231,50233]}],"src":"46:2345:148"},"id":148},"contracts/messaging/interfaces/IConnector.sol":{"ast":{"absolutePath":"contracts/messaging/interfaces/IConnector.sol","exportedSymbols":{"IConnector":[47778],"IProposedOwnable":[50003]},"id":47779,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":47744,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:149"},{"absolutePath":"contracts/shared/interfaces/IProposedOwnable.sol","file":"../../shared/interfaces/IProposedOwnable.sol","id":47746,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47779,"sourceUnit":50004,"src":"71:78:149","symbolAliases":[{"foreign":{"id":47745,"name":"IProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50003,"src":"79:16:149","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":47748,"name":"IProposedOwnable","nameLocations":["1907:16:149"],"nodeType":"IdentifierPath","referencedDeclaration":50003,"src":"1907:16:149"},"id":47749,"nodeType":"InheritanceSpecifier","src":"1907:16:149"}],"canonicalName":"IConnector","contractDependencies":[],"contractKind":"interface","documentation":{"id":47747,"nodeType":"StructuredDocumentation","src":"151:1731:149","text":" @notice This interface is what the Connext contract will send and receive messages through.\n The messaging layer should conform to this interface, and should be interchangeable (i.e.\n could be Nomad or a generic AMB under the hood).\n @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\n Flow from transfer from polygon to optimism:\n 1. User calls `xcall` with destination specified\n 2. This will swap in to the bridge assets\n 3. The swapped assets will get burned\n 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\n    to the root\n 5. [At some time interval] Relayers call `send` to send the current root from polygon to\n    mainnet. This is done on all \"spoke\" domains.\n 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\n    root from all of the AMBs\n    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\n      tree root\n    - Will send the mixed root from all chains back through the respective AMBs to all other chains\n 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\n 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\n    process on the `Connext` contract\n 9. Takes minted bridge tokens and credits the LP\n AMB requirements:\n - Access `msg.sender` both from mainnet -> spoke and vice versa\n - Ability to read *our root* from the AMB\n AMBs:\n - PoS bridge from polygon\n - arbitrum bridge\n - optimism bridge\n - gnosis chain\n - bsc (use multichain for messaging)"},"fullyImplemented":false,"id":47778,"linearizedBaseContracts":[47778,50003],"name":"IConnector","nameLocation":"1893:10:149","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":47750,"nodeType":"StructuredDocumentation","src":"1966:266:149","text":" @notice Emitted whenever a message is successfully sent over an AMB\n @param data The contents of the message\n @param encodedData Data used to send the message; specific to connector\n @param caller Who called the function (sent the message)"},"eventSelector":"dcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e9355077","id":47758,"name":"MessageSent","nameLocation":"2241:11:149","nodeType":"EventDefinition","parameters":{"id":47757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47752,"indexed":false,"mutability":"mutable","name":"data","nameLocation":"2259:4:149","nodeType":"VariableDeclaration","scope":47758,"src":"2253:10:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47751,"name":"bytes","nodeType":"ElementaryTypeName","src":"2253:5:149","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":47754,"indexed":false,"mutability":"mutable","name":"encodedData","nameLocation":"2271:11:149","nodeType":"VariableDeclaration","scope":47758,"src":"2265:17:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47753,"name":"bytes","nodeType":"ElementaryTypeName","src":"2265:5:149","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":47756,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"2292:6:149","nodeType":"VariableDeclaration","scope":47758,"src":"2284:14:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47755,"name":"address","nodeType":"ElementaryTypeName","src":"2284:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2252:47:149"},"src":"2235:65:149"},{"anonymous":false,"documentation":{"id":47759,"nodeType":"StructuredDocumentation","src":"2304:174:149","text":" @notice Emitted whenever a message is successfully received over an AMB\n @param data The contents of the message\n @param caller Who called the function"},"eventSelector":"b3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced","id":47765,"name":"MessageProcessed","nameLocation":"2487:16:149","nodeType":"EventDefinition","parameters":{"id":47764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47761,"indexed":false,"mutability":"mutable","name":"data","nameLocation":"2510:4:149","nodeType":"VariableDeclaration","scope":47765,"src":"2504:10:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47760,"name":"bytes","nodeType":"ElementaryTypeName","src":"2504:5:149","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":47763,"indexed":false,"mutability":"mutable","name":"caller","nameLocation":"2524:6:149","nodeType":"VariableDeclaration","scope":47765,"src":"2516:14:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47762,"name":"address","nodeType":"ElementaryTypeName","src":"2516:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2503:28:149"},"src":"2481:51:149"},{"functionSelector":"4ff746f6","id":47770,"implemented":false,"kind":"function","modifiers":[],"name":"processMessage","nameLocation":"2588:14:149","nodeType":"FunctionDefinition","parameters":{"id":47768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47767,"mutability":"mutable","name":"_data","nameLocation":"2616:5:149","nodeType":"VariableDeclaration","scope":47770,"src":"2603:18:149","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47766,"name":"bytes","nodeType":"ElementaryTypeName","src":"2603:5:149","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2602:20:149"},"returnParameters":{"id":47769,"nodeType":"ParameterList","parameters":[],"src":"2631:0:149"},"scope":47778,"src":"2579:53:149","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"db1b7659","id":47777,"implemented":false,"kind":"function","modifiers":[],"name":"verifySender","nameLocation":"2645:12:149","nodeType":"FunctionDefinition","parameters":{"id":47773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47772,"mutability":"mutable","name":"_expected","nameLocation":"2666:9:149","nodeType":"VariableDeclaration","scope":47777,"src":"2658:17:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47771,"name":"address","nodeType":"ElementaryTypeName","src":"2658:7:149","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2657:19:149"},"returnParameters":{"id":47776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47775,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47777,"src":"2695:4:149","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":47774,"name":"bool","nodeType":"ElementaryTypeName","src":"2695:4:149","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2694:6:149"},"scope":47778,"src":"2636:65:149","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":47779,"src":"1883:820:149","usedErrors":[]}],"src":"46:2658:149"},"id":149},"contracts/messaging/interfaces/IConnectorManager.sol":{"ast":{"absolutePath":"contracts/messaging/interfaces/IConnectorManager.sol","exportedSymbols":{"IConnectorManager":[47805],"IOutbox":[47864]},"id":47806,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":47780,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:150"},{"absolutePath":"contracts/messaging/interfaces/IOutbox.sol","file":"./IOutbox.sol","id":47782,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47806,"sourceUnit":47865,"src":"71:38:150","symbolAliases":[{"foreign":{"id":47781,"name":"IOutbox","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47864,"src":"79:7:150","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IConnectorManager","contractDependencies":[],"contractKind":"interface","documentation":{"id":47783,"nodeType":"StructuredDocumentation","src":"111:354:150","text":" @notice Each router extends the `XAppConnectionClient` contract. This contract\n allows an admin to call `setXAppConnectionManager` to update the underlying\n pointers to the messaging inboxes (Replicas) and outboxes (Homes).\n @dev This interface only contains the functions needed for the `XAppConnectionClient`\n will interface with."},"fullyImplemented":false,"id":47805,"linearizedBaseContracts":[47805],"name":"IConnectorManager","nameLocation":"476:17:150","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":47784,"nodeType":"StructuredDocumentation","src":"498:222:150","text":" @notice Get the local inbox contract from the xAppConnectionManager\n @return The local inbox contract\n @dev The local inbox contract is a SpokeConnector with AMBs, and a\n Home contract with nomad"},"functionSelector":"9fa92f9d","id":47790,"implemented":false,"kind":"function","modifiers":[],"name":"home","nameLocation":"732:4:150","nodeType":"FunctionDefinition","parameters":{"id":47785,"nodeType":"ParameterList","parameters":[],"src":"736:2:150"},"returnParameters":{"id":47789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47788,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47790,"src":"762:7:150","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IOutbox_$47864","typeString":"contract IOutbox"},"typeName":{"id":47787,"nodeType":"UserDefinedTypeName","pathNode":{"id":47786,"name":"IOutbox","nameLocations":["762:7:150"],"nodeType":"IdentifierPath","referencedDeclaration":47864,"src":"762:7:150"},"referencedDeclaration":47864,"src":"762:7:150","typeDescriptions":{"typeIdentifier":"t_contract$_IOutbox_$47864","typeString":"contract IOutbox"}},"visibility":"internal"}],"src":"761:9:150"},"scope":47805,"src":"723:48:150","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":47791,"nodeType":"StructuredDocumentation","src":"775:174:150","text":" @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\n @return True if _potentialReplica is an enrolled Replica"},"functionSelector":"5190bc53","id":47798,"implemented":false,"kind":"function","modifiers":[],"name":"isReplica","nameLocation":"961:9:150","nodeType":"FunctionDefinition","parameters":{"id":47794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47793,"mutability":"mutable","name":"_potentialReplica","nameLocation":"979:17:150","nodeType":"VariableDeclaration","scope":47798,"src":"971:25:150","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47792,"name":"address","nodeType":"ElementaryTypeName","src":"971:7:150","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"970:27:150"},"returnParameters":{"id":47797,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47796,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47798,"src":"1021:4:150","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":47795,"name":"bool","nodeType":"ElementaryTypeName","src":"1021:4:150","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1020:6:150"},"scope":47805,"src":"952:75:150","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":47799,"nodeType":"StructuredDocumentation","src":"1031:104:150","text":" @notice Get the local domain from the xAppConnectionManager\n @return The local domain"},"functionSelector":"8d3638f4","id":47804,"implemented":false,"kind":"function","modifiers":[],"name":"localDomain","nameLocation":"1147:11:150","nodeType":"FunctionDefinition","parameters":{"id":47800,"nodeType":"ParameterList","parameters":[],"src":"1158:2:150"},"returnParameters":{"id":47803,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47802,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47804,"src":"1184:6:150","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":47801,"name":"uint32","nodeType":"ElementaryTypeName","src":"1184:6:150","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1183:8:150"},"scope":47805,"src":"1138:54:150","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":47806,"src":"466:728:150","usedErrors":[]}],"src":"46:1149:150"},"id":150},"contracts/messaging/interfaces/IHubConnector.sol":{"ast":{"absolutePath":"contracts/messaging/interfaces/IHubConnector.sol","exportedSymbols":{"IConnector":[47778],"IHubConnector":[47819]},"id":47820,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":47807,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:151"},{"absolutePath":"contracts/messaging/interfaces/IConnector.sol","file":"./IConnector.sol","id":47809,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47820,"sourceUnit":47779,"src":"71:44:151","symbolAliases":[{"foreign":{"id":47808,"name":"IConnector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47778,"src":"79:10:151","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":47810,"name":"IConnector","nameLocations":["144:10:151"],"nodeType":"IdentifierPath","referencedDeclaration":47778,"src":"144:10:151"},"id":47811,"nodeType":"InheritanceSpecifier","src":"144:10:151"}],"canonicalName":"IHubConnector","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":47819,"linearizedBaseContracts":[47819,47778,50003],"name":"IHubConnector","nameLocation":"127:13:151","nodeType":"ContractDefinition","nodes":[{"functionSelector":"48e6fa23","id":47818,"implemented":false,"kind":"function","modifiers":[],"name":"sendMessage","nameLocation":"168:11:151","nodeType":"FunctionDefinition","parameters":{"id":47816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47813,"mutability":"mutable","name":"_data","nameLocation":"193:5:151","nodeType":"VariableDeclaration","scope":47818,"src":"180:18:151","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47812,"name":"bytes","nodeType":"ElementaryTypeName","src":"180:5:151","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":47815,"mutability":"mutable","name":"_encodedData","nameLocation":"213:12:151","nodeType":"VariableDeclaration","scope":47818,"src":"200:25:151","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47814,"name":"bytes","nodeType":"ElementaryTypeName","src":"200:5:151","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"179:47:151"},"returnParameters":{"id":47817,"nodeType":"ParameterList","parameters":[],"src":"243:0:151"},"scope":47819,"src":"159:85:151","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":47820,"src":"117:129:151","usedErrors":[]}],"src":"46:201:151"},"id":151},"contracts/messaging/interfaces/IMessageRecipient.sol":{"ast":{"absolutePath":"contracts/messaging/interfaces/IMessageRecipient.sol","exportedSymbols":{"IMessageRecipient":[47833]},"id":47834,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":47821,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:152"},{"abstract":false,"baseContracts":[],"canonicalName":"IMessageRecipient","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":47833,"linearizedBaseContracts":[47833],"name":"IMessageRecipient","nameLocation":"81:17:152","nodeType":"ContractDefinition","nodes":[{"functionSelector":"ab2dc3f5","id":47832,"implemented":false,"kind":"function","modifiers":[],"name":"handle","nameLocation":"112:6:152","nodeType":"FunctionDefinition","parameters":{"id":47830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47823,"mutability":"mutable","name":"_origin","nameLocation":"131:7:152","nodeType":"VariableDeclaration","scope":47832,"src":"124:14:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":47822,"name":"uint32","nodeType":"ElementaryTypeName","src":"124:6:152","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":47825,"mutability":"mutable","name":"_nonce","nameLocation":"151:6:152","nodeType":"VariableDeclaration","scope":47832,"src":"144:13:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":47824,"name":"uint32","nodeType":"ElementaryTypeName","src":"144:6:152","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":47827,"mutability":"mutable","name":"_sender","nameLocation":"171:7:152","nodeType":"VariableDeclaration","scope":47832,"src":"163:15:152","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47826,"name":"bytes32","nodeType":"ElementaryTypeName","src":"163:7:152","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":47829,"mutability":"mutable","name":"_message","nameLocation":"197:8:152","nodeType":"VariableDeclaration","scope":47832,"src":"184:21:152","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47828,"name":"bytes","nodeType":"ElementaryTypeName","src":"184:5:152","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"118:91:152"},"returnParameters":{"id":47831,"nodeType":"ParameterList","parameters":[],"src":"218:0:152"},"scope":47833,"src":"103:116:152","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":47834,"src":"71:150:152","usedErrors":[]}],"src":"46:176:152"},"id":152},"contracts/messaging/interfaces/IOutbox.sol":{"ast":{"absolutePath":"contracts/messaging/interfaces/IOutbox.sol","exportedSymbols":{"IOutbox":[47864]},"id":47865,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":47835,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:153"},{"abstract":false,"baseContracts":[],"canonicalName":"IOutbox","contractDependencies":[],"contractKind":"interface","documentation":{"id":47836,"nodeType":"StructuredDocumentation","src":"71:234:153","text":" @notice Interface for all contracts sending messages originating on their\n current domain.\n @dev These are the Home.sol interface methods used by the `Router`\n and exposed via `home()` on the `XAppConnectionClient`"},"fullyImplemented":false,"id":47864,"linearizedBaseContracts":[47864],"name":"IOutbox","nameLocation":"316:7:153","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":47837,"nodeType":"StructuredDocumentation","src":"328:512:153","text":" @notice Emitted when a new message is added to an outbound message merkle root\n @param leafIndex Index of message's leaf in merkle tree\n @param destinationAndNonce Destination and destination-specific\n nonce combined in single field ((destination << 32) & nonce)\n @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\n @param committedRoot the latest notarized root submitted in the last signed Update\n @param message Raw bytes of message"},"eventSelector":"9d4c83d2e57d7d381feb264b44a5015e7f9ef26340f4fc46b558a6dc16dd811a","id":47849,"name":"Dispatch","nameLocation":"849:8:153","nodeType":"EventDefinition","parameters":{"id":47848,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47839,"indexed":true,"mutability":"mutable","name":"messageHash","nameLocation":"879:11:153","nodeType":"VariableDeclaration","scope":47849,"src":"863:27:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47838,"name":"bytes32","nodeType":"ElementaryTypeName","src":"863:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":47841,"indexed":true,"mutability":"mutable","name":"leafIndex","nameLocation":"912:9:153","nodeType":"VariableDeclaration","scope":47849,"src":"896:25:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47840,"name":"uint256","nodeType":"ElementaryTypeName","src":"896:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47843,"indexed":true,"mutability":"mutable","name":"destinationAndNonce","nameLocation":"942:19:153","nodeType":"VariableDeclaration","scope":47849,"src":"927:34:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":47842,"name":"uint64","nodeType":"ElementaryTypeName","src":"927:6:153","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":47845,"indexed":false,"mutability":"mutable","name":"committedRoot","nameLocation":"975:13:153","nodeType":"VariableDeclaration","scope":47849,"src":"967:21:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47844,"name":"bytes32","nodeType":"ElementaryTypeName","src":"967:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":47847,"indexed":false,"mutability":"mutable","name":"message","nameLocation":"1000:7:153","nodeType":"VariableDeclaration","scope":47849,"src":"994:13:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47846,"name":"bytes","nodeType":"ElementaryTypeName","src":"994:5:153","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"857:154:153"},"src":"843:169:153"},{"documentation":{"id":47850,"nodeType":"StructuredDocumentation","src":"1016:478:153","text":" @notice Dispatch the message it to the destination domain & recipient\n @dev Format the message, insert its hash into Merkle tree,\n enqueue the new Merkle root, and emit `Dispatch` event with message information.\n @param _destinationDomain Domain of destination chain\n @param _recipientAddress Address of recipient on destination chain as bytes32\n @param _messageBody Raw bytes content of message\n @return bytes32 The leaf added to the tree"},"functionSelector":"fa31de01","id":47863,"implemented":false,"kind":"function","modifiers":[],"name":"dispatch","nameLocation":"1506:8:153","nodeType":"FunctionDefinition","parameters":{"id":47857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47852,"mutability":"mutable","name":"_destinationDomain","nameLocation":"1527:18:153","nodeType":"VariableDeclaration","scope":47863,"src":"1520:25:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":47851,"name":"uint32","nodeType":"ElementaryTypeName","src":"1520:6:153","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":47854,"mutability":"mutable","name":"_recipientAddress","nameLocation":"1559:17:153","nodeType":"VariableDeclaration","scope":47863,"src":"1551:25:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47853,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1551:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":47856,"mutability":"mutable","name":"_messageBody","nameLocation":"1595:12:153","nodeType":"VariableDeclaration","scope":47863,"src":"1582:25:153","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47855,"name":"bytes","nodeType":"ElementaryTypeName","src":"1582:5:153","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1514:97:153"},"returnParameters":{"id":47862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47859,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47863,"src":"1630:7:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47858,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1630:7:153","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":47861,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47863,"src":"1639:12:153","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47860,"name":"bytes","nodeType":"ElementaryTypeName","src":"1639:5:153","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1629:23:153"},"scope":47864,"src":"1497:156:153","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":47865,"src":"306:1349:153","usedErrors":[]}],"src":"46:1610:153"},"id":153},"contracts/messaging/interfaces/IRootManager.sol":{"ast":{"absolutePath":"contracts/messaging/interfaces/IRootManager.sol","exportedSymbols":{"IRootManager":[47888]},"id":47889,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":47866,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:154"},{"abstract":false,"baseContracts":[],"canonicalName":"IRootManager","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":47888,"linearizedBaseContracts":[47888],"name":"IRootManager","nameLocation":"81:12:154","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":47867,"nodeType":"StructuredDocumentation","src":"98:203:154","text":" @notice This is called by relayers to generate + send the mixed root from mainnet via AMB to\n spoke domains.\n @dev This must read information for the root from the registered AMBs."},"functionSelector":"412e12db","id":47879,"implemented":false,"kind":"function","modifiers":[],"name":"propagate","nameLocation":"313:9:154","nodeType":"FunctionDefinition","parameters":{"id":47877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47870,"mutability":"mutable","name":"_connectors","nameLocation":"347:11:154","nodeType":"VariableDeclaration","scope":47879,"src":"328:30:154","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":47868,"name":"address","nodeType":"ElementaryTypeName","src":"328:7:154","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":47869,"nodeType":"ArrayTypeName","src":"328:9:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":47873,"mutability":"mutable","name":"_fees","nameLocation":"383:5:154","nodeType":"VariableDeclaration","scope":47879,"src":"364:24:154","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":47871,"name":"uint256","nodeType":"ElementaryTypeName","src":"364:7:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47872,"nodeType":"ArrayTypeName","src":"364:9:154","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":47876,"mutability":"mutable","name":"_encodedData","nameLocation":"409:12:154","nodeType":"VariableDeclaration","scope":47879,"src":"394:27:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":47874,"name":"bytes","nodeType":"ElementaryTypeName","src":"394:5:154","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":47875,"nodeType":"ArrayTypeName","src":"394:7:154","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"322:103:154"},"returnParameters":{"id":47878,"nodeType":"ParameterList","parameters":[],"src":"442:0:154"},"scope":47888,"src":"304:139:154","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":47880,"nodeType":"StructuredDocumentation","src":"447:198:154","text":" @notice Called by the connectors for various domains on the hub to aggregate their latest\n inbound root.\n @dev This must read information for the root from the registered AMBs"},"functionSelector":"8e7d93fa","id":47887,"implemented":false,"kind":"function","modifiers":[],"name":"aggregate","nameLocation":"657:9:154","nodeType":"FunctionDefinition","parameters":{"id":47885,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47882,"mutability":"mutable","name":"_domain","nameLocation":"674:7:154","nodeType":"VariableDeclaration","scope":47887,"src":"667:14:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":47881,"name":"uint32","nodeType":"ElementaryTypeName","src":"667:6:154","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":47884,"mutability":"mutable","name":"_outbound","nameLocation":"691:9:154","nodeType":"VariableDeclaration","scope":47887,"src":"683:17:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47883,"name":"bytes32","nodeType":"ElementaryTypeName","src":"683:7:154","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"666:35:154"},"returnParameters":{"id":47886,"nodeType":"ParameterList","parameters":[],"src":"710:0:154"},"scope":47888,"src":"648:63:154","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":47889,"src":"71:642:154","usedErrors":[]}],"src":"46:668:154"},"id":154},"contracts/messaging/interfaces/ambs/GnosisAmb.sol":{"ast":{"absolutePath":"contracts/messaging/interfaces/ambs/GnosisAmb.sol","exportedSymbols":{"GnosisAmb":[47999]},"id":48000,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":47890,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:155"},{"abstract":false,"baseContracts":[],"canonicalName":"GnosisAmb","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":47999,"linearizedBaseContracts":[47999],"name":"GnosisAmb","nameLocation":"184:9:155","nodeType":"ContractDefinition","nodes":[{"functionSelector":"d67bdd25","id":47895,"implemented":false,"kind":"function","modifiers":[],"name":"messageSender","nameLocation":"207:13:155","nodeType":"FunctionDefinition","parameters":{"id":47891,"nodeType":"ParameterList","parameters":[],"src":"220:2:155"},"returnParameters":{"id":47894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47893,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47895,"src":"246:7:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47892,"name":"address","nodeType":"ElementaryTypeName","src":"246:7:155","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"245:9:155"},"scope":47999,"src":"198:57:155","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"e5789d03","id":47900,"implemented":false,"kind":"function","modifiers":[],"name":"maxGasPerTx","nameLocation":"268:11:155","nodeType":"FunctionDefinition","parameters":{"id":47896,"nodeType":"ParameterList","parameters":[],"src":"279:2:155"},"returnParameters":{"id":47899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47898,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47900,"src":"305:7:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47897,"name":"uint256","nodeType":"ElementaryTypeName","src":"305:7:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"304:9:155"},"scope":47999,"src":"259:55:155","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"0ac1c313","id":47905,"implemented":false,"kind":"function","modifiers":[],"name":"transactionHash","nameLocation":"327:15:155","nodeType":"FunctionDefinition","parameters":{"id":47901,"nodeType":"ParameterList","parameters":[],"src":"342:2:155"},"returnParameters":{"id":47904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47903,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47905,"src":"368:7:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47902,"name":"bytes32","nodeType":"ElementaryTypeName","src":"368:7:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"367:9:155"},"scope":47999,"src":"318:59:155","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"669f618b","id":47910,"implemented":false,"kind":"function","modifiers":[],"name":"messageId","nameLocation":"390:9:155","nodeType":"FunctionDefinition","parameters":{"id":47906,"nodeType":"ParameterList","parameters":[],"src":"399:2:155"},"returnParameters":{"id":47909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47908,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47910,"src":"425:7:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47907,"name":"bytes32","nodeType":"ElementaryTypeName","src":"425:7:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"424:9:155"},"scope":47999,"src":"381:53:155","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"9e307dff","id":47915,"implemented":false,"kind":"function","modifiers":[],"name":"messageSourceChainId","nameLocation":"447:20:155","nodeType":"FunctionDefinition","parameters":{"id":47911,"nodeType":"ParameterList","parameters":[],"src":"467:2:155"},"returnParameters":{"id":47914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47913,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47915,"src":"493:7:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47912,"name":"bytes32","nodeType":"ElementaryTypeName","src":"493:7:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"492:9:155"},"scope":47999,"src":"438:64:155","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"cb08a10c","id":47922,"implemented":false,"kind":"function","modifiers":[],"name":"messageCallStatus","nameLocation":"515:17:155","nodeType":"FunctionDefinition","parameters":{"id":47918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47917,"mutability":"mutable","name":"_messageId","nameLocation":"541:10:155","nodeType":"VariableDeclaration","scope":47922,"src":"533:18:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47916,"name":"bytes32","nodeType":"ElementaryTypeName","src":"533:7:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"532:20:155"},"returnParameters":{"id":47921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47920,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47922,"src":"576:4:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":47919,"name":"bool","nodeType":"ElementaryTypeName","src":"576:4:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"575:6:155"},"scope":47999,"src":"506:76:155","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"e37c3289","id":47929,"implemented":false,"kind":"function","modifiers":[],"name":"failedMessageDataHash","nameLocation":"595:21:155","nodeType":"FunctionDefinition","parameters":{"id":47925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47924,"mutability":"mutable","name":"_messageId","nameLocation":"625:10:155","nodeType":"VariableDeclaration","scope":47929,"src":"617:18:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47923,"name":"bytes32","nodeType":"ElementaryTypeName","src":"617:7:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"616:20:155"},"returnParameters":{"id":47928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47927,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47929,"src":"660:7:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47926,"name":"bytes32","nodeType":"ElementaryTypeName","src":"660:7:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"659:9:155"},"scope":47999,"src":"586:83:155","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"3f9a8e7e","id":47936,"implemented":false,"kind":"function","modifiers":[],"name":"failedMessageReceiver","nameLocation":"682:21:155","nodeType":"FunctionDefinition","parameters":{"id":47932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47931,"mutability":"mutable","name":"_messageId","nameLocation":"712:10:155","nodeType":"VariableDeclaration","scope":47936,"src":"704:18:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47930,"name":"bytes32","nodeType":"ElementaryTypeName","src":"704:7:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"703:20:155"},"returnParameters":{"id":47935,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47934,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47936,"src":"747:7:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47933,"name":"address","nodeType":"ElementaryTypeName","src":"747:7:155","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"746:9:155"},"scope":47999,"src":"673:83:155","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"4a610b04","id":47943,"implemented":false,"kind":"function","modifiers":[],"name":"failedMessageSender","nameLocation":"769:19:155","nodeType":"FunctionDefinition","parameters":{"id":47939,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47938,"mutability":"mutable","name":"_messageId","nameLocation":"797:10:155","nodeType":"VariableDeclaration","scope":47943,"src":"789:18:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47937,"name":"bytes32","nodeType":"ElementaryTypeName","src":"789:7:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"788:20:155"},"returnParameters":{"id":47942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47941,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47943,"src":"832:7:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47940,"name":"address","nodeType":"ElementaryTypeName","src":"832:7:155","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"831:9:155"},"scope":47999,"src":"760:81:155","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"dc8601b3","id":47954,"implemented":false,"kind":"function","modifiers":[],"name":"requireToPassMessage","nameLocation":"854:20:155","nodeType":"FunctionDefinition","parameters":{"id":47950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47945,"mutability":"mutable","name":"_contract","nameLocation":"888:9:155","nodeType":"VariableDeclaration","scope":47954,"src":"880:17:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47944,"name":"address","nodeType":"ElementaryTypeName","src":"880:7:155","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47947,"mutability":"mutable","name":"_data","nameLocation":"916:5:155","nodeType":"VariableDeclaration","scope":47954,"src":"903:18:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47946,"name":"bytes","nodeType":"ElementaryTypeName","src":"903:5:155","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":47949,"mutability":"mutable","name":"_gas","nameLocation":"935:4:155","nodeType":"VariableDeclaration","scope":47954,"src":"927:12:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47948,"name":"uint256","nodeType":"ElementaryTypeName","src":"927:7:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"874:69:155"},"returnParameters":{"id":47953,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47952,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47954,"src":"962:7:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47951,"name":"bytes32","nodeType":"ElementaryTypeName","src":"962:7:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"961:9:155"},"scope":47999,"src":"845:126:155","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"94643f71","id":47965,"implemented":false,"kind":"function","modifiers":[],"name":"requireToConfirmMessage","nameLocation":"984:23:155","nodeType":"FunctionDefinition","parameters":{"id":47961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47956,"mutability":"mutable","name":"_contract","nameLocation":"1021:9:155","nodeType":"VariableDeclaration","scope":47965,"src":"1013:17:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47955,"name":"address","nodeType":"ElementaryTypeName","src":"1013:7:155","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47958,"mutability":"mutable","name":"_data","nameLocation":"1049:5:155","nodeType":"VariableDeclaration","scope":47965,"src":"1036:18:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47957,"name":"bytes","nodeType":"ElementaryTypeName","src":"1036:5:155","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":47960,"mutability":"mutable","name":"_gas","nameLocation":"1068:4:155","nodeType":"VariableDeclaration","scope":47965,"src":"1060:12:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47959,"name":"uint256","nodeType":"ElementaryTypeName","src":"1060:7:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1007:69:155"},"returnParameters":{"id":47964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47963,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47965,"src":"1095:7:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47962,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1095:7:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1094:9:155"},"scope":47999,"src":"975:129:155","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"525ea937","id":47974,"implemented":false,"kind":"function","modifiers":[],"name":"requireToGetInformation","nameLocation":"1117:23:155","nodeType":"FunctionDefinition","parameters":{"id":47970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47967,"mutability":"mutable","name":"_requestSelector","nameLocation":"1149:16:155","nodeType":"VariableDeclaration","scope":47974,"src":"1141:24:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47966,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1141:7:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":47969,"mutability":"mutable","name":"_data","nameLocation":"1180:5:155","nodeType":"VariableDeclaration","scope":47974,"src":"1167:18:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47968,"name":"bytes","nodeType":"ElementaryTypeName","src":"1167:5:155","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1140:46:155"},"returnParameters":{"id":47973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47972,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47974,"src":"1205:7:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47971,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1205:7:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1204:9:155"},"scope":47999,"src":"1108:106:155","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"1544298e","id":47979,"implemented":false,"kind":"function","modifiers":[],"name":"sourceChainId","nameLocation":"1227:13:155","nodeType":"FunctionDefinition","parameters":{"id":47975,"nodeType":"ParameterList","parameters":[],"src":"1240:2:155"},"returnParameters":{"id":47978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47977,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47979,"src":"1266:7:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47976,"name":"uint256","nodeType":"ElementaryTypeName","src":"1266:7:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1265:9:155"},"scope":47999,"src":"1218:57:155","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b0750611","id":47984,"implemented":false,"kind":"function","modifiers":[],"name":"destinationChainId","nameLocation":"1288:18:155","nodeType":"FunctionDefinition","parameters":{"id":47980,"nodeType":"ParameterList","parameters":[],"src":"1306:2:155"},"returnParameters":{"id":47983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47982,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47984,"src":"1332:7:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47981,"name":"uint256","nodeType":"ElementaryTypeName","src":"1332:7:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1331:9:155"},"scope":47999,"src":"1279:62:155","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"3f7658fd","id":47991,"implemented":false,"kind":"function","modifiers":[],"name":"executeSignatures","nameLocation":"1354:17:155","nodeType":"FunctionDefinition","parameters":{"id":47989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47986,"mutability":"mutable","name":"_data","nameLocation":"1385:5:155","nodeType":"VariableDeclaration","scope":47991,"src":"1372:18:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47985,"name":"bytes","nodeType":"ElementaryTypeName","src":"1372:5:155","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":47988,"mutability":"mutable","name":"_signatures","nameLocation":"1405:11:155","nodeType":"VariableDeclaration","scope":47991,"src":"1392:24:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47987,"name":"bytes","nodeType":"ElementaryTypeName","src":"1392:5:155","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1371:46:155"},"returnParameters":{"id":47990,"nodeType":"ParameterList","parameters":[],"src":"1426:0:155"},"scope":47999,"src":"1345:82:155","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"23caab49","id":47998,"implemented":false,"kind":"function","modifiers":[],"name":"safeExecuteSignaturesWithAutoGasLimit","nameLocation":"1440:37:155","nodeType":"FunctionDefinition","parameters":{"id":47996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47993,"mutability":"mutable","name":"_data","nameLocation":"1491:5:155","nodeType":"VariableDeclaration","scope":47998,"src":"1478:18:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47992,"name":"bytes","nodeType":"ElementaryTypeName","src":"1478:5:155","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":47995,"mutability":"mutable","name":"_signatures","nameLocation":"1511:11:155","nodeType":"VariableDeclaration","scope":47998,"src":"1498:24:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47994,"name":"bytes","nodeType":"ElementaryTypeName","src":"1498:5:155","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1477:46:155"},"returnParameters":{"id":47997,"nodeType":"ParameterList","parameters":[],"src":"1532:0:155"},"scope":47999,"src":"1431:102:155","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":48000,"src":"174:1361:155","usedErrors":[]}],"src":"46:1490:155"},"id":155},"contracts/messaging/interfaces/ambs/Multichain.sol":{"ast":{"absolutePath":"contracts/messaging/interfaces/ambs/Multichain.sol","exportedSymbols":{"Multichain":[48041]},"id":48042,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":48001,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:156"},{"abstract":false,"baseContracts":[],"canonicalName":"Multichain","contractDependencies":[],"contractKind":"interface","documentation":{"id":48002,"nodeType":"StructuredDocumentation","src":"71:197:156","text":" @dev interface to interact with multicall (prev anyswap) anycall proxy\n     see https://github.com/anyswap/multichain-smart-contracts/blob/main/contracts/anycall/AnyswapV6CallProxy.sol"},"fullyImplemented":false,"id":48041,"linearizedBaseContracts":[48041],"name":"Multichain","nameLocation":"279:10:156","nodeType":"ContractDefinition","nodes":[{"functionSelector":"bd45c4e7","id":48015,"implemented":false,"kind":"function","modifiers":[],"name":"anyCall","nameLocation":"303:7:156","nodeType":"FunctionDefinition","parameters":{"id":48013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48004,"mutability":"mutable","name":"_to","nameLocation":"324:3:156","nodeType":"VariableDeclaration","scope":48015,"src":"316:11:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48003,"name":"address","nodeType":"ElementaryTypeName","src":"316:7:156","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48006,"mutability":"mutable","name":"_data","nameLocation":"348:5:156","nodeType":"VariableDeclaration","scope":48015,"src":"333:20:156","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":48005,"name":"bytes","nodeType":"ElementaryTypeName","src":"333:5:156","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":48008,"mutability":"mutable","name":"_fallback","nameLocation":"367:9:156","nodeType":"VariableDeclaration","scope":48015,"src":"359:17:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48007,"name":"address","nodeType":"ElementaryTypeName","src":"359:7:156","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48010,"mutability":"mutable","name":"_toChainID","nameLocation":"390:10:156","nodeType":"VariableDeclaration","scope":48015,"src":"382:18:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48009,"name":"uint256","nodeType":"ElementaryTypeName","src":"382:7:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48012,"mutability":"mutable","name":"_flags","nameLocation":"414:6:156","nodeType":"VariableDeclaration","scope":48015,"src":"406:14:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48011,"name":"uint256","nodeType":"ElementaryTypeName","src":"406:7:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"310:114:156"},"returnParameters":{"id":48014,"nodeType":"ParameterList","parameters":[],"src":"441:0:156"},"scope":48041,"src":"294:148:156","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"d0496d6a","id":48024,"implemented":false,"kind":"function","modifiers":[],"name":"context","nameLocation":"455:7:156","nodeType":"FunctionDefinition","parameters":{"id":48016,"nodeType":"ParameterList","parameters":[],"src":"462:2:156"},"returnParameters":{"id":48023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48018,"mutability":"mutable","name":"from","nameLocation":"515:4:156","nodeType":"VariableDeclaration","scope":48024,"src":"507:12:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48017,"name":"address","nodeType":"ElementaryTypeName","src":"507:7:156","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48020,"mutability":"mutable","name":"fromChainID","nameLocation":"535:11:156","nodeType":"VariableDeclaration","scope":48024,"src":"527:19:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48019,"name":"uint256","nodeType":"ElementaryTypeName","src":"527:7:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48022,"mutability":"mutable","name":"nonce","nameLocation":"562:5:156","nodeType":"VariableDeclaration","scope":48024,"src":"554:13:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48021,"name":"uint256","nodeType":"ElementaryTypeName","src":"554:7:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"499:74:156"},"scope":48041,"src":"446:128:156","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"c34c08e5","id":48029,"implemented":false,"kind":"function","modifiers":[],"name":"executor","nameLocation":"587:8:156","nodeType":"FunctionDefinition","parameters":{"id":48025,"nodeType":"ParameterList","parameters":[],"src":"595:2:156"},"returnParameters":{"id":48028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48027,"mutability":"mutable","name":"executor","nameLocation":"629:8:156","nodeType":"VariableDeclaration","scope":48029,"src":"621:16:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48026,"name":"address","nodeType":"ElementaryTypeName","src":"621:7:156","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"620:18:156"},"scope":48041,"src":"578:61:156","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"66c96b37","id":48040,"implemented":false,"kind":"function","modifiers":[],"name":"calcSrcFees","nameLocation":"652:11:156","nodeType":"FunctionDefinition","parameters":{"id":48036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48031,"mutability":"mutable","name":"_appID","nameLocation":"685:6:156","nodeType":"VariableDeclaration","scope":48040,"src":"669:22:156","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":48030,"name":"string","nodeType":"ElementaryTypeName","src":"669:6:156","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":48033,"mutability":"mutable","name":"_toChainID","nameLocation":"705:10:156","nodeType":"VariableDeclaration","scope":48040,"src":"697:18:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48032,"name":"uint256","nodeType":"ElementaryTypeName","src":"697:7:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48035,"mutability":"mutable","name":"_dataLength","nameLocation":"729:11:156","nodeType":"VariableDeclaration","scope":48040,"src":"721:19:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48034,"name":"uint256","nodeType":"ElementaryTypeName","src":"721:7:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"663:81:156"},"returnParameters":{"id":48039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48038,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48040,"src":"768:7:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48037,"name":"uint256","nodeType":"ElementaryTypeName","src":"768:7:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"767:9:156"},"scope":48041,"src":"643:134:156","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":48042,"src":"269:510:156","usedErrors":[]}],"src":"46:734:156"},"id":156},"contracts/messaging/interfaces/ambs/arbitrum/ArbitrumL2Amb.sol":{"ast":{"absolutePath":"contracts/messaging/interfaces/ambs/arbitrum/ArbitrumL2Amb.sol","exportedSymbols":{"ArbitrumL2Amb":[48051]},"id":48052,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":48043,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:157"},{"abstract":false,"baseContracts":[],"canonicalName":"ArbitrumL2Amb","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":48051,"linearizedBaseContracts":[48051],"name":"ArbitrumL2Amb","nameLocation":"81:13:157","nodeType":"ContractDefinition","nodes":[{"functionSelector":"928c169a","id":48050,"implemented":false,"kind":"function","modifiers":[],"name":"sendTxToL1","nameLocation":"138:10:157","nodeType":"FunctionDefinition","parameters":{"id":48048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48045,"mutability":"mutable","name":"destAddr","nameLocation":"157:8:157","nodeType":"VariableDeclaration","scope":48050,"src":"149:16:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48044,"name":"address","nodeType":"ElementaryTypeName","src":"149:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48047,"mutability":"mutable","name":"calldataForL1","nameLocation":"182:13:157","nodeType":"VariableDeclaration","scope":48050,"src":"167:28:157","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":48046,"name":"bytes","nodeType":"ElementaryTypeName","src":"167:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"148:48:157"},"returnParameters":{"id":48049,"nodeType":"ParameterList","parameters":[],"src":"213:0:157"},"scope":48051,"src":"129:85:157","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":48052,"src":"71:145:157","usedErrors":[]}],"src":"46:171:157"},"id":157},"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumInbox.sol":{"ast":{"absolutePath":"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumInbox.sol","exportedSymbols":{"IArbitrumInbox":[48076]},"id":48077,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":48053,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:158"},{"abstract":false,"baseContracts":[],"canonicalName":"IArbitrumInbox","contractDependencies":[],"contractKind":"interface","documentation":{"id":48054,"nodeType":"StructuredDocumentation","src":"71:239:158","text":" @notice Interface for sending L1 -> L2 messagesto Arbitrum.\n @dev Arbitrum uses an inbox to aggregate messages going from L1 -> L2, source:\n https://github.com/OffchainLabs/nitro/blob/master/contracts/src/bridge/Inbox.sol"},"fullyImplemented":false,"id":48076,"linearizedBaseContracts":[48076],"name":"IArbitrumInbox","nameLocation":"321:14:158","nodeType":"ContractDefinition","nodes":[{"functionSelector":"679b6ded","id":48075,"implemented":false,"kind":"function","modifiers":[],"name":"createRetryableTicket","nameLocation":"349:21:158","nodeType":"FunctionDefinition","parameters":{"id":48071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48056,"mutability":"mutable","name":"destAddr","nameLocation":"384:8:158","nodeType":"VariableDeclaration","scope":48075,"src":"376:16:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48055,"name":"address","nodeType":"ElementaryTypeName","src":"376:7:158","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48058,"mutability":"mutable","name":"arbTxCallValue","nameLocation":"406:14:158","nodeType":"VariableDeclaration","scope":48075,"src":"398:22:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48057,"name":"uint256","nodeType":"ElementaryTypeName","src":"398:7:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48060,"mutability":"mutable","name":"maxSubmissionCost","nameLocation":"434:17:158","nodeType":"VariableDeclaration","scope":48075,"src":"426:25:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48059,"name":"uint256","nodeType":"ElementaryTypeName","src":"426:7:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48062,"mutability":"mutable","name":"submissionRefundAddress","nameLocation":"465:23:158","nodeType":"VariableDeclaration","scope":48075,"src":"457:31:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48061,"name":"address","nodeType":"ElementaryTypeName","src":"457:7:158","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48064,"mutability":"mutable","name":"valueRefundAddress","nameLocation":"502:18:158","nodeType":"VariableDeclaration","scope":48075,"src":"494:26:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48063,"name":"address","nodeType":"ElementaryTypeName","src":"494:7:158","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48066,"mutability":"mutable","name":"maxGas","nameLocation":"534:6:158","nodeType":"VariableDeclaration","scope":48075,"src":"526:14:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48065,"name":"uint256","nodeType":"ElementaryTypeName","src":"526:7:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48068,"mutability":"mutable","name":"gasPriceBid","nameLocation":"554:11:158","nodeType":"VariableDeclaration","scope":48075,"src":"546:19:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48067,"name":"uint256","nodeType":"ElementaryTypeName","src":"546:7:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48070,"mutability":"mutable","name":"data","nameLocation":"586:4:158","nodeType":"VariableDeclaration","scope":48075,"src":"571:19:158","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":48069,"name":"bytes","nodeType":"ElementaryTypeName","src":"571:5:158","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"370:224:158"},"returnParameters":{"id":48074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48073,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48075,"src":"621:7:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48072,"name":"uint256","nodeType":"ElementaryTypeName","src":"621:7:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"620:9:158"},"scope":48076,"src":"340:290:158","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":48077,"src":"311:321:158","usedErrors":[]}],"src":"46:587:158"},"id":158},"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumOutbox.sol":{"ast":{"absolutePath":"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumOutbox.sol","exportedSymbols":{"IArbitrumOutbox":[48239]},"id":48240,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":48078,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:159"},{"abstract":false,"baseContracts":[],"canonicalName":"IArbitrumOutbox","contractDependencies":[],"contractKind":"interface","documentation":{"id":48079,"nodeType":"StructuredDocumentation","src":"71:239:159","text":" @notice Interface for sending L1 -> L2 messagesto Arbitrum.\n @dev Arbitrum uses an inbox to aggregate messages going from L1 -> L2, source:\n https://github.com/OffchainLabs/nitro/blob/master/contracts/src/bridge/Inbox.sol"},"fullyImplemented":false,"id":48239,"linearizedBaseContracts":[48239],"name":"IArbitrumOutbox","nameLocation":"321:15:159","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"b4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f6748","id":48085,"name":"SendRootUpdated","nameLocation":"347:15:159","nodeType":"EventDefinition","parameters":{"id":48084,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48081,"indexed":true,"mutability":"mutable","name":"blockHash","nameLocation":"379:9:159","nodeType":"VariableDeclaration","scope":48085,"src":"363:25:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48080,"name":"bytes32","nodeType":"ElementaryTypeName","src":"363:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":48083,"indexed":true,"mutability":"mutable","name":"outputRoot","nameLocation":"406:10:159","nodeType":"VariableDeclaration","scope":48085,"src":"390:26:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48082,"name":"bytes32","nodeType":"ElementaryTypeName","src":"390:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"362:55:159"},"src":"341:77:159"},{"anonymous":false,"eventSelector":"20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab18964","id":48095,"name":"OutBoxTransactionExecuted","nameLocation":"427:25:159","nodeType":"EventDefinition","parameters":{"id":48094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48087,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"474:2:159","nodeType":"VariableDeclaration","scope":48095,"src":"458:18:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48086,"name":"address","nodeType":"ElementaryTypeName","src":"458:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48089,"indexed":true,"mutability":"mutable","name":"l2Sender","nameLocation":"498:8:159","nodeType":"VariableDeclaration","scope":48095,"src":"482:24:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48088,"name":"address","nodeType":"ElementaryTypeName","src":"482:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48091,"indexed":true,"mutability":"mutable","name":"zero","nameLocation":"528:4:159","nodeType":"VariableDeclaration","scope":48095,"src":"512:20:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48090,"name":"uint256","nodeType":"ElementaryTypeName","src":"512:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48093,"indexed":false,"mutability":"mutable","name":"transactionIndex","nameLocation":"546:16:159","nodeType":"VariableDeclaration","scope":48095,"src":"538:24:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48092,"name":"uint256","nodeType":"ElementaryTypeName","src":"538:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"452:114:159"},"src":"421:146:159"},{"functionSelector":"cb23bcb5","id":48100,"implemented":false,"kind":"function","modifiers":[],"name":"rollup","nameLocation":"580:6:159","nodeType":"FunctionDefinition","parameters":{"id":48096,"nodeType":"ParameterList","parameters":[],"src":"586:2:159"},"returnParameters":{"id":48099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48098,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48100,"src":"612:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48097,"name":"address","nodeType":"ElementaryTypeName","src":"612:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"611:9:159"},"scope":48239,"src":"571:50:159","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"d5b5cc23","id":48107,"implemented":false,"kind":"function","modifiers":[],"name":"spent","nameLocation":"737:5:159","nodeType":"FunctionDefinition","parameters":{"id":48103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48102,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48107,"src":"743:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48101,"name":"uint256","nodeType":"ElementaryTypeName","src":"743:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"742:9:159"},"returnParameters":{"id":48106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48105,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48107,"src":"775:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48104,"name":"bytes32","nodeType":"ElementaryTypeName","src":"775:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"774:9:159"},"scope":48239,"src":"728:56:159","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"ae6dead7","id":48114,"implemented":false,"kind":"function","modifiers":[],"name":"roots","nameLocation":"820:5:159","nodeType":"FunctionDefinition","parameters":{"id":48110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48109,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48114,"src":"826:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48108,"name":"bytes32","nodeType":"ElementaryTypeName","src":"826:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"825:9:159"},"returnParameters":{"id":48113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48112,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48114,"src":"858:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48111,"name":"bytes32","nodeType":"ElementaryTypeName","src":"858:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"857:9:159"},"scope":48239,"src":"811:56:159","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"c75184df","id":48119,"implemented":false,"kind":"function","modifiers":[],"name":"OUTBOX_VERSION","nameLocation":"968:14:159","nodeType":"FunctionDefinition","parameters":{"id":48115,"nodeType":"ParameterList","parameters":[],"src":"982:2:159"},"returnParameters":{"id":48118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48117,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48119,"src":"1008:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":48116,"name":"uint128","nodeType":"ElementaryTypeName","src":"1008:7:159","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1007:9:159"},"scope":48239,"src":"959:58:159","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"a04cee60","id":48126,"implemented":false,"kind":"function","modifiers":[],"name":"updateSendRoot","nameLocation":"1052:14:159","nodeType":"FunctionDefinition","parameters":{"id":48124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48121,"mutability":"mutable","name":"sendRoot","nameLocation":"1075:8:159","nodeType":"VariableDeclaration","scope":48126,"src":"1067:16:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48120,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1067:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":48123,"mutability":"mutable","name":"l2BlockHash","nameLocation":"1093:11:159","nodeType":"VariableDeclaration","scope":48126,"src":"1085:19:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48122,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1085:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1066:39:159"},"returnParameters":{"id":48125,"nodeType":"ParameterList","parameters":[],"src":"1114:0:159"},"scope":48239,"src":"1043:72:159","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":48127,"nodeType":"StructuredDocumentation","src":"1119:302:159","text":"@notice When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account\n         When the return value is zero, that means this is a system message\n @dev the l2ToL1Sender behaves as the tx.origin, the msg.sender should be validated to protect against reentrancies"},"functionSelector":"80648b02","id":48132,"implemented":false,"kind":"function","modifiers":[],"name":"l2ToL1Sender","nameLocation":"1433:12:159","nodeType":"FunctionDefinition","parameters":{"id":48128,"nodeType":"ParameterList","parameters":[],"src":"1445:2:159"},"returnParameters":{"id":48131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48130,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48132,"src":"1471:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48129,"name":"address","nodeType":"ElementaryTypeName","src":"1471:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1470:9:159"},"scope":48239,"src":"1424:56:159","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":48133,"nodeType":"StructuredDocumentation","src":"1484:106:159","text":"@return l2Block return L2 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active"},"functionSelector":"46547790","id":48138,"implemented":false,"kind":"function","modifiers":[],"name":"l2ToL1Block","nameLocation":"1602:11:159","nodeType":"FunctionDefinition","parameters":{"id":48134,"nodeType":"ParameterList","parameters":[],"src":"1613:2:159"},"returnParameters":{"id":48137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48136,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48138,"src":"1639:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48135,"name":"uint256","nodeType":"ElementaryTypeName","src":"1639:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1638:9:159"},"scope":48239,"src":"1593:55:159","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":48139,"nodeType":"StructuredDocumentation","src":"1652:106:159","text":"@return l1Block return L1 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active"},"functionSelector":"8515bc6a","id":48144,"implemented":false,"kind":"function","modifiers":[],"name":"l2ToL1EthBlock","nameLocation":"1770:14:159","nodeType":"FunctionDefinition","parameters":{"id":48140,"nodeType":"ParameterList","parameters":[],"src":"1784:2:159"},"returnParameters":{"id":48143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48142,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48144,"src":"1810:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48141,"name":"uint256","nodeType":"ElementaryTypeName","src":"1810:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1809:9:159"},"scope":48239,"src":"1761:58:159","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":48145,"nodeType":"StructuredDocumentation","src":"1823:112:159","text":"@return timestamp return L2 timestamp when the L2 tx was initiated or 0 if no L2 to L1 transaction is active"},"functionSelector":"b0f30537","id":48150,"implemented":false,"kind":"function","modifiers":[],"name":"l2ToL1Timestamp","nameLocation":"1947:15:159","nodeType":"FunctionDefinition","parameters":{"id":48146,"nodeType":"ParameterList","parameters":[],"src":"1962:2:159"},"returnParameters":{"id":48149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48148,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48150,"src":"1988:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48147,"name":"uint256","nodeType":"ElementaryTypeName","src":"1988:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1987:9:159"},"scope":48239,"src":"1938:59:159","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":48151,"nodeType":"StructuredDocumentation","src":"2001:118:159","text":"@return outputId returns the unique output identifier of the L2 to L1 tx or 0 if no L2 to L1 transaction is active"},"functionSelector":"72f2a8c7","id":48156,"implemented":false,"kind":"function","modifiers":[],"name":"l2ToL1OutputId","nameLocation":"2131:14:159","nodeType":"FunctionDefinition","parameters":{"id":48152,"nodeType":"ParameterList","parameters":[],"src":"2145:2:159"},"returnParameters":{"id":48155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48154,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48156,"src":"2171:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48153,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2171:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2170:9:159"},"scope":48239,"src":"2122:58:159","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":48157,"nodeType":"StructuredDocumentation","src":"2184:924:159","text":" @notice Executes a messages in an Outbox entry.\n @dev Reverts if dispute period hasn't expired, since the outbox entry\n      is only created once the rollup confirms the respective assertion.\n @dev it is not possible to execute any L2-to-L1 transaction which contains data\n      to a contract address without any code (as enforced by the Bridge contract).\n @param proof Merkle proof of message inclusion in send root\n @param index Merkle path to message\n @param l2Sender sender if original message (i.e., caller of ArbSys.sendTxToL1)\n @param to destination address for L1 contract call\n @param l2Block l2 block number at which sendTxToL1 call was made\n @param l1Block l1 block number at which sendTxToL1 call was made\n @param l2Timestamp l2 Timestamp at which sendTxToL1 call was made\n @param value wei in L1 message\n @param data abi-encoded L1 message data"},"functionSelector":"08635a95","id":48179,"implemented":false,"kind":"function","modifiers":[],"name":"executeTransaction","nameLocation":"3120:18:159","nodeType":"FunctionDefinition","parameters":{"id":48177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48160,"mutability":"mutable","name":"proof","nameLocation":"3163:5:159","nodeType":"VariableDeclaration","scope":48179,"src":"3144:24:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":48158,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3144:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":48159,"nodeType":"ArrayTypeName","src":"3144:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":48162,"mutability":"mutable","name":"index","nameLocation":"3182:5:159","nodeType":"VariableDeclaration","scope":48179,"src":"3174:13:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48161,"name":"uint256","nodeType":"ElementaryTypeName","src":"3174:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48164,"mutability":"mutable","name":"l2Sender","nameLocation":"3201:8:159","nodeType":"VariableDeclaration","scope":48179,"src":"3193:16:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48163,"name":"address","nodeType":"ElementaryTypeName","src":"3193:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48166,"mutability":"mutable","name":"to","nameLocation":"3223:2:159","nodeType":"VariableDeclaration","scope":48179,"src":"3215:10:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48165,"name":"address","nodeType":"ElementaryTypeName","src":"3215:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48168,"mutability":"mutable","name":"l2Block","nameLocation":"3239:7:159","nodeType":"VariableDeclaration","scope":48179,"src":"3231:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48167,"name":"uint256","nodeType":"ElementaryTypeName","src":"3231:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48170,"mutability":"mutable","name":"l1Block","nameLocation":"3260:7:159","nodeType":"VariableDeclaration","scope":48179,"src":"3252:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48169,"name":"uint256","nodeType":"ElementaryTypeName","src":"3252:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48172,"mutability":"mutable","name":"l2Timestamp","nameLocation":"3281:11:159","nodeType":"VariableDeclaration","scope":48179,"src":"3273:19:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48171,"name":"uint256","nodeType":"ElementaryTypeName","src":"3273:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48174,"mutability":"mutable","name":"value","nameLocation":"3306:5:159","nodeType":"VariableDeclaration","scope":48179,"src":"3298:13:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48173,"name":"uint256","nodeType":"ElementaryTypeName","src":"3298:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48176,"mutability":"mutable","name":"data","nameLocation":"3332:4:159","nodeType":"VariableDeclaration","scope":48179,"src":"3317:19:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":48175,"name":"bytes","nodeType":"ElementaryTypeName","src":"3317:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3138:202:159"},"returnParameters":{"id":48178,"nodeType":"ParameterList","parameters":[],"src":"3349:0:159"},"scope":48239,"src":"3111:239:159","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":48180,"nodeType":"StructuredDocumentation","src":"3354:914:159","text":"  @dev function used to simulate the result of a particular function call from the outbox\n       it is useful for things such as gas estimates. This function includes all costs except for\n       proof validation (which can be considered offchain as a somewhat of a fixed cost - it's\n       not really a fixed cost, but can be treated as so with a fixed overhead for gas estimation).\n       We can't include the cost of proof validation since this is intended to be used to simulate txs\n       that are included in yet-to-be confirmed merkle roots. The simulation entrypoint could instead pretend\n       to confirm a pending merkle root, but that would be less pratical for integrating with tooling.\n       It is only possible to trigger it when the msg sender is address zero, which should be impossible\n       unless under simulation in an eth_call or eth_estimateGas"},"functionSelector":"288e5b10","id":48199,"implemented":false,"kind":"function","modifiers":[],"name":"executeTransactionSimulation","nameLocation":"4280:28:159","nodeType":"FunctionDefinition","parameters":{"id":48197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48182,"mutability":"mutable","name":"index","nameLocation":"4322:5:159","nodeType":"VariableDeclaration","scope":48199,"src":"4314:13:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48181,"name":"uint256","nodeType":"ElementaryTypeName","src":"4314:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48184,"mutability":"mutable","name":"l2Sender","nameLocation":"4341:8:159","nodeType":"VariableDeclaration","scope":48199,"src":"4333:16:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48183,"name":"address","nodeType":"ElementaryTypeName","src":"4333:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48186,"mutability":"mutable","name":"to","nameLocation":"4363:2:159","nodeType":"VariableDeclaration","scope":48199,"src":"4355:10:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48185,"name":"address","nodeType":"ElementaryTypeName","src":"4355:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48188,"mutability":"mutable","name":"l2Block","nameLocation":"4379:7:159","nodeType":"VariableDeclaration","scope":48199,"src":"4371:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48187,"name":"uint256","nodeType":"ElementaryTypeName","src":"4371:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48190,"mutability":"mutable","name":"l1Block","nameLocation":"4400:7:159","nodeType":"VariableDeclaration","scope":48199,"src":"4392:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48189,"name":"uint256","nodeType":"ElementaryTypeName","src":"4392:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48192,"mutability":"mutable","name":"l2Timestamp","nameLocation":"4421:11:159","nodeType":"VariableDeclaration","scope":48199,"src":"4413:19:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48191,"name":"uint256","nodeType":"ElementaryTypeName","src":"4413:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48194,"mutability":"mutable","name":"value","nameLocation":"4446:5:159","nodeType":"VariableDeclaration","scope":48199,"src":"4438:13:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48193,"name":"uint256","nodeType":"ElementaryTypeName","src":"4438:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48196,"mutability":"mutable","name":"data","nameLocation":"4472:4:159","nodeType":"VariableDeclaration","scope":48199,"src":"4457:19:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":48195,"name":"bytes","nodeType":"ElementaryTypeName","src":"4457:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4308:172:159"},"returnParameters":{"id":48198,"nodeType":"ParameterList","parameters":[],"src":"4489:0:159"},"scope":48239,"src":"4271:219:159","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":48200,"nodeType":"StructuredDocumentation","src":"4494:98:159","text":" @param index Merkle path to message\n @return true if the message has been spent"},"functionSelector":"5a129efe","id":48207,"implemented":false,"kind":"function","modifiers":[],"name":"isSpent","nameLocation":"4604:7:159","nodeType":"FunctionDefinition","parameters":{"id":48203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48202,"mutability":"mutable","name":"index","nameLocation":"4620:5:159","nodeType":"VariableDeclaration","scope":48207,"src":"4612:13:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48201,"name":"uint256","nodeType":"ElementaryTypeName","src":"4612:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4611:15:159"},"returnParameters":{"id":48206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48205,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48207,"src":"4650:4:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":48204,"name":"bool","nodeType":"ElementaryTypeName","src":"4650:4:159","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4649:6:159"},"scope":48239,"src":"4595:61:159","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"9f0c04bf","id":48226,"implemented":false,"kind":"function","modifiers":[],"name":"calculateItemHash","nameLocation":"4669:17:159","nodeType":"FunctionDefinition","parameters":{"id":48222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48209,"mutability":"mutable","name":"l2Sender","nameLocation":"4700:8:159","nodeType":"VariableDeclaration","scope":48226,"src":"4692:16:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48208,"name":"address","nodeType":"ElementaryTypeName","src":"4692:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48211,"mutability":"mutable","name":"to","nameLocation":"4722:2:159","nodeType":"VariableDeclaration","scope":48226,"src":"4714:10:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48210,"name":"address","nodeType":"ElementaryTypeName","src":"4714:7:159","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48213,"mutability":"mutable","name":"l2Block","nameLocation":"4738:7:159","nodeType":"VariableDeclaration","scope":48226,"src":"4730:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48212,"name":"uint256","nodeType":"ElementaryTypeName","src":"4730:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48215,"mutability":"mutable","name":"l1Block","nameLocation":"4759:7:159","nodeType":"VariableDeclaration","scope":48226,"src":"4751:15:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48214,"name":"uint256","nodeType":"ElementaryTypeName","src":"4751:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48217,"mutability":"mutable","name":"l2Timestamp","nameLocation":"4780:11:159","nodeType":"VariableDeclaration","scope":48226,"src":"4772:19:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48216,"name":"uint256","nodeType":"ElementaryTypeName","src":"4772:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48219,"mutability":"mutable","name":"value","nameLocation":"4805:5:159","nodeType":"VariableDeclaration","scope":48226,"src":"4797:13:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48218,"name":"uint256","nodeType":"ElementaryTypeName","src":"4797:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48221,"mutability":"mutable","name":"data","nameLocation":"4831:4:159","nodeType":"VariableDeclaration","scope":48226,"src":"4816:19:159","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":48220,"name":"bytes","nodeType":"ElementaryTypeName","src":"4816:5:159","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4686:153:159"},"returnParameters":{"id":48225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48224,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48226,"src":"4863:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48223,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4863:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4862:9:159"},"scope":48239,"src":"4660:212:159","stateMutability":"pure","virtual":false,"visibility":"external"},{"functionSelector":"007436d3","id":48238,"implemented":false,"kind":"function","modifiers":[],"name":"calculateMerkleRoot","nameLocation":"4885:19:159","nodeType":"FunctionDefinition","parameters":{"id":48234,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48229,"mutability":"mutable","name":"proof","nameLocation":"4927:5:159","nodeType":"VariableDeclaration","scope":48238,"src":"4910:22:159","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":48227,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4910:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":48228,"nodeType":"ArrayTypeName","src":"4910:9:159","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":48231,"mutability":"mutable","name":"path","nameLocation":"4946:4:159","nodeType":"VariableDeclaration","scope":48238,"src":"4938:12:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48230,"name":"uint256","nodeType":"ElementaryTypeName","src":"4938:7:159","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48233,"mutability":"mutable","name":"item","nameLocation":"4964:4:159","nodeType":"VariableDeclaration","scope":48238,"src":"4956:12:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48232,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4956:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4904:68:159"},"returnParameters":{"id":48237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48236,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48238,"src":"4996:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48235,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4996:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4995:9:159"},"scope":48239,"src":"4876:129:159","stateMutability":"pure","virtual":false,"visibility":"external"}],"scope":48240,"src":"311:4696:159","usedErrors":[]}],"src":"46:4962:159"},"id":159},"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumRollup.sol":{"ast":{"absolutePath":"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumRollup.sol","exportedSymbols":{"IArbitrumRollup":[48276],"Node":[48266]},"id":48277,"nodeType":"SourceUnit","nodes":[{"id":48241,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"0:23:160"},{"canonicalName":"Node","id":48266,"members":[{"constant":false,"id":48243,"mutability":"mutable","name":"stateHash","nameLocation":"199:9:160","nodeType":"VariableDeclaration","scope":48266,"src":"191:17:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48242,"name":"bytes32","nodeType":"ElementaryTypeName","src":"191:7:160","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":48245,"mutability":"mutable","name":"challengeHash","nameLocation":"265:13:160","nodeType":"VariableDeclaration","scope":48266,"src":"257:21:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48244,"name":"bytes32","nodeType":"ElementaryTypeName","src":"257:7:160","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":48247,"mutability":"mutable","name":"confirmData","nameLocation":"361:11:160","nodeType":"VariableDeclaration","scope":48266,"src":"353:19:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48246,"name":"bytes32","nodeType":"ElementaryTypeName","src":"353:7:160","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":48249,"mutability":"mutable","name":"prevNum","nameLocation":"427:7:160","nodeType":"VariableDeclaration","scope":48266,"src":"420:14:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":48248,"name":"uint64","nodeType":"ElementaryTypeName","src":"420:6:160","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":48251,"mutability":"mutable","name":"deadlineBlock","nameLocation":"495:13:160","nodeType":"VariableDeclaration","scope":48266,"src":"488:20:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":48250,"name":"uint64","nodeType":"ElementaryTypeName","src":"488:6:160","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":48253,"mutability":"mutable","name":"noChildConfirmedBeforeBlock","nameLocation":"580:27:160","nodeType":"VariableDeclaration","scope":48266,"src":"573:34:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":48252,"name":"uint64","nodeType":"ElementaryTypeName","src":"573:6:160","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":48255,"mutability":"mutable","name":"stakerCount","nameLocation":"701:11:160","nodeType":"VariableDeclaration","scope":48266,"src":"694:18:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":48254,"name":"uint64","nodeType":"ElementaryTypeName","src":"694:6:160","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":48257,"mutability":"mutable","name":"childStakerCount","nameLocation":"809:16:160","nodeType":"VariableDeclaration","scope":48266,"src":"802:23:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":48256,"name":"uint64","nodeType":"ElementaryTypeName","src":"802:6:160","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":48259,"mutability":"mutable","name":"firstChildBlock","nameLocation":"1012:15:160","nodeType":"VariableDeclaration","scope":48266,"src":"1005:22:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":48258,"name":"uint64","nodeType":"ElementaryTypeName","src":"1005:6:160","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":48261,"mutability":"mutable","name":"latestChildNumber","nameLocation":"1101:17:160","nodeType":"VariableDeclaration","scope":48266,"src":"1094:24:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":48260,"name":"uint64","nodeType":"ElementaryTypeName","src":"1094:6:160","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":48263,"mutability":"mutable","name":"createdAtBlock","nameLocation":"1178:14:160","nodeType":"VariableDeclaration","scope":48266,"src":"1171:21:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":48262,"name":"uint64","nodeType":"ElementaryTypeName","src":"1171:6:160","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":48265,"mutability":"mutable","name":"nodeHash","nameLocation":"1300:8:160","nodeType":"VariableDeclaration","scope":48266,"src":"1292:16:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48264,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1292:7:160","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"Node","nameLocation":"130:4:160","nodeType":"StructDefinition","scope":48277,"src":"123:1188:160","visibility":"public"},{"abstract":false,"baseContracts":[],"canonicalName":"IArbitrumRollup","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":48276,"linearizedBaseContracts":[48276],"name":"IArbitrumRollup","nameLocation":"1428:15:160","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":48267,"nodeType":"StructuredDocumentation","src":"1448:56:160","text":" @notice Get the Node for the given index."},"functionSelector":"92c8134c","id":48275,"implemented":false,"kind":"function","modifiers":[],"name":"getNode","nameLocation":"1516:7:160","nodeType":"FunctionDefinition","parameters":{"id":48270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48269,"mutability":"mutable","name":"nodeNum","nameLocation":"1531:7:160","nodeType":"VariableDeclaration","scope":48275,"src":"1524:14:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":48268,"name":"uint64","nodeType":"ElementaryTypeName","src":"1524:6:160","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"1523:16:160"},"returnParameters":{"id":48274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48273,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48275,"src":"1563:11:160","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Node_$48266_memory_ptr","typeString":"struct Node"},"typeName":{"id":48272,"nodeType":"UserDefinedTypeName","pathNode":{"id":48271,"name":"Node","nameLocations":["1563:4:160"],"nodeType":"IdentifierPath","referencedDeclaration":48266,"src":"1563:4:160"},"referencedDeclaration":48266,"src":"1563:4:160","typeDescriptions":{"typeIdentifier":"t_struct$_Node_$48266_storage_ptr","typeString":"struct Node"}},"visibility":"internal"}],"src":"1562:13:160"},"scope":48276,"src":"1507:69:160","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":48277,"src":"1418:160:160","usedErrors":[]}],"src":"0:1579:160"},"id":160},"contracts/messaging/interfaces/ambs/optimism/IStateCommitmentChain.sol":{"ast":{"absolutePath":"contracts/messaging/interfaces/ambs/optimism/IStateCommitmentChain.sol","exportedSymbols":{"ChainBatchHeader":[48289],"ChainInclusionProof":[48295],"IStateCommitmentChain":[48385],"L2MessageInclusionProof":[48308]},"id":48386,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":48278,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:161"},{"canonicalName":"ChainBatchHeader","id":48289,"members":[{"constant":false,"id":48280,"mutability":"mutable","name":"batchIndex","nameLocation":"287:10:161","nodeType":"VariableDeclaration","scope":48289,"src":"279:18:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48279,"name":"uint256","nodeType":"ElementaryTypeName","src":"279:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48282,"mutability":"mutable","name":"batchRoot","nameLocation":"309:9:161","nodeType":"VariableDeclaration","scope":48289,"src":"301:17:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48281,"name":"bytes32","nodeType":"ElementaryTypeName","src":"301:7:161","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":48284,"mutability":"mutable","name":"batchSize","nameLocation":"330:9:161","nodeType":"VariableDeclaration","scope":48289,"src":"322:17:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48283,"name":"uint256","nodeType":"ElementaryTypeName","src":"322:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48286,"mutability":"mutable","name":"prevTotalElements","nameLocation":"351:17:161","nodeType":"VariableDeclaration","scope":48289,"src":"343:25:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48285,"name":"uint256","nodeType":"ElementaryTypeName","src":"343:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48288,"mutability":"mutable","name":"extraData","nameLocation":"378:9:161","nodeType":"VariableDeclaration","scope":48289,"src":"372:15:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":48287,"name":"bytes","nodeType":"ElementaryTypeName","src":"372:5:161","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"ChainBatchHeader","nameLocation":"258:16:161","nodeType":"StructDefinition","scope":48386,"src":"251:139:161","visibility":"public"},{"canonicalName":"ChainInclusionProof","id":48295,"members":[{"constant":false,"id":48291,"mutability":"mutable","name":"index","nameLocation":"611:5:161","nodeType":"VariableDeclaration","scope":48295,"src":"603:13:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48290,"name":"uint256","nodeType":"ElementaryTypeName","src":"603:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48294,"mutability":"mutable","name":"siblings","nameLocation":"630:8:161","nodeType":"VariableDeclaration","scope":48295,"src":"620:18:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":48292,"name":"bytes32","nodeType":"ElementaryTypeName","src":"620:7:161","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":48293,"nodeType":"ArrayTypeName","src":"620:9:161","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"name":"ChainInclusionProof","nameLocation":"579:19:161","nodeType":"StructDefinition","scope":48386,"src":"572:69:161","visibility":"public"},{"canonicalName":"L2MessageInclusionProof","id":48308,"members":[{"constant":false,"id":48297,"mutability":"mutable","name":"stateRoot","nameLocation":"874:9:161","nodeType":"VariableDeclaration","scope":48308,"src":"866:17:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48296,"name":"bytes32","nodeType":"ElementaryTypeName","src":"866:7:161","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":48300,"mutability":"mutable","name":"stateRootBatchHeader","nameLocation":"904:20:161","nodeType":"VariableDeclaration","scope":48308,"src":"887:37:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ChainBatchHeader_$48289_storage_ptr","typeString":"struct ChainBatchHeader"},"typeName":{"id":48299,"nodeType":"UserDefinedTypeName","pathNode":{"id":48298,"name":"ChainBatchHeader","nameLocations":["887:16:161"],"nodeType":"IdentifierPath","referencedDeclaration":48289,"src":"887:16:161"},"referencedDeclaration":48289,"src":"887:16:161","typeDescriptions":{"typeIdentifier":"t_struct$_ChainBatchHeader_$48289_storage_ptr","typeString":"struct ChainBatchHeader"}},"visibility":"internal"},{"constant":false,"id":48303,"mutability":"mutable","name":"stateRootProof","nameLocation":"948:14:161","nodeType":"VariableDeclaration","scope":48308,"src":"928:34:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ChainInclusionProof_$48295_storage_ptr","typeString":"struct ChainInclusionProof"},"typeName":{"id":48302,"nodeType":"UserDefinedTypeName","pathNode":{"id":48301,"name":"ChainInclusionProof","nameLocations":["928:19:161"],"nodeType":"IdentifierPath","referencedDeclaration":48295,"src":"928:19:161"},"referencedDeclaration":48295,"src":"928:19:161","typeDescriptions":{"typeIdentifier":"t_struct$_ChainInclusionProof_$48295_storage_ptr","typeString":"struct ChainInclusionProof"}},"visibility":"internal"},{"constant":false,"id":48305,"mutability":"mutable","name":"stateTrieWitness","nameLocation":"972:16:161","nodeType":"VariableDeclaration","scope":48308,"src":"966:22:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":48304,"name":"bytes","nodeType":"ElementaryTypeName","src":"966:5:161","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":48307,"mutability":"mutable","name":"storageTrieWitness","nameLocation":"998:18:161","nodeType":"VariableDeclaration","scope":48308,"src":"992:24:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":48306,"name":"bytes","nodeType":"ElementaryTypeName","src":"992:5:161","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"L2MessageInclusionProof","nameLocation":"838:23:161","nodeType":"StructDefinition","scope":48386,"src":"831:188:161","visibility":"public"},{"abstract":false,"baseContracts":[],"canonicalName":"IStateCommitmentChain","contractDependencies":[],"contractKind":"interface","documentation":{"id":48309,"nodeType":"StructuredDocumentation","src":"1021:189:161","text":" @title IStateCommitmentChain\n @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/rollup/IStateCommitmentChain.sol"},"fullyImplemented":false,"id":48385,"linearizedBaseContracts":[48385],"name":"IStateCommitmentChain","nameLocation":"1221:21:161","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"16be4c5129a4e03cf3350262e181dc02ddfb4a6008d925368c0899fcd97ca9c5","id":48321,"name":"StateBatchAppended","nameLocation":"1297:18:161","nodeType":"EventDefinition","parameters":{"id":48320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48311,"indexed":true,"mutability":"mutable","name":"_batchIndex","nameLocation":"1337:11:161","nodeType":"VariableDeclaration","scope":48321,"src":"1321:27:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48310,"name":"uint256","nodeType":"ElementaryTypeName","src":"1321:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48313,"indexed":false,"mutability":"mutable","name":"_batchRoot","nameLocation":"1362:10:161","nodeType":"VariableDeclaration","scope":48321,"src":"1354:18:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48312,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1354:7:161","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":48315,"indexed":false,"mutability":"mutable","name":"_batchSize","nameLocation":"1386:10:161","nodeType":"VariableDeclaration","scope":48321,"src":"1378:18:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48314,"name":"uint256","nodeType":"ElementaryTypeName","src":"1378:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48317,"indexed":false,"mutability":"mutable","name":"_prevTotalElements","nameLocation":"1410:18:161","nodeType":"VariableDeclaration","scope":48321,"src":"1402:26:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48316,"name":"uint256","nodeType":"ElementaryTypeName","src":"1402:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48319,"indexed":false,"mutability":"mutable","name":"_extraData","nameLocation":"1440:10:161","nodeType":"VariableDeclaration","scope":48321,"src":"1434:16:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":48318,"name":"bytes","nodeType":"ElementaryTypeName","src":"1434:5:161","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1315:139:161"},"src":"1291:164:161"},{"anonymous":false,"eventSelector":"8747b69ce8fdb31c3b9b0a67bd8049ad8c1a69ea417b69b12174068abd9cbd64","id":48327,"name":"StateBatchDeleted","nameLocation":"1465:17:161","nodeType":"EventDefinition","parameters":{"id":48326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48323,"indexed":true,"mutability":"mutable","name":"_batchIndex","nameLocation":"1499:11:161","nodeType":"VariableDeclaration","scope":48327,"src":"1483:27:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48322,"name":"uint256","nodeType":"ElementaryTypeName","src":"1483:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48325,"indexed":false,"mutability":"mutable","name":"_batchRoot","nameLocation":"1520:10:161","nodeType":"VariableDeclaration","scope":48327,"src":"1512:18:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48324,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1512:7:161","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1482:49:161"},"src":"1459:73:161"},{"documentation":{"id":48328,"nodeType":"StructuredDocumentation","src":"1610:118:161","text":" Retrieves the total number of elements submitted.\n @return _totalElements Total submitted elements."},"functionSelector":"7aa63a86","id":48333,"implemented":false,"kind":"function","modifiers":[],"name":"getTotalElements","nameLocation":"1740:16:161","nodeType":"FunctionDefinition","parameters":{"id":48329,"nodeType":"ParameterList","parameters":[],"src":"1756:2:161"},"returnParameters":{"id":48332,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48331,"mutability":"mutable","name":"_totalElements","nameLocation":"1790:14:161","nodeType":"VariableDeclaration","scope":48333,"src":"1782:22:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48330,"name":"uint256","nodeType":"ElementaryTypeName","src":"1782:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1781:24:161"},"scope":48385,"src":"1731:75:161","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":48334,"nodeType":"StructuredDocumentation","src":"1810:115:161","text":" Retrieves the total number of batches submitted.\n @return _totalBatches Total submitted batches."},"functionSelector":"e561dddc","id":48339,"implemented":false,"kind":"function","modifiers":[],"name":"getTotalBatches","nameLocation":"1937:15:161","nodeType":"FunctionDefinition","parameters":{"id":48335,"nodeType":"ParameterList","parameters":[],"src":"1952:2:161"},"returnParameters":{"id":48338,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48337,"mutability":"mutable","name":"_totalBatches","nameLocation":"1986:13:161","nodeType":"VariableDeclaration","scope":48339,"src":"1978:21:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48336,"name":"uint256","nodeType":"ElementaryTypeName","src":"1978:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1977:23:161"},"scope":48385,"src":"1928:73:161","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":48340,"nodeType":"StructuredDocumentation","src":"2005:153:161","text":" Retrieves the timestamp of the last batch submitted by the sequencer.\n @return _lastSequencerTimestamp Last sequencer batch timestamp."},"functionSelector":"7ad168a0","id":48345,"implemented":false,"kind":"function","modifiers":[],"name":"getLastSequencerTimestamp","nameLocation":"2170:25:161","nodeType":"FunctionDefinition","parameters":{"id":48341,"nodeType":"ParameterList","parameters":[],"src":"2195:2:161"},"returnParameters":{"id":48344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48343,"mutability":"mutable","name":"_lastSequencerTimestamp","nameLocation":"2229:23:161","nodeType":"VariableDeclaration","scope":48345,"src":"2221:31:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48342,"name":"uint256","nodeType":"ElementaryTypeName","src":"2221:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2220:33:161"},"scope":48385,"src":"2161:93:161","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":48346,"nodeType":"StructuredDocumentation","src":"2258:189:161","text":" Appends a batch of state roots to the chain.\n @param _batch Batch of state roots.\n @param _shouldStartAtElement Index of the element at which this batch should start."},"functionSelector":"8ca5cbb9","id":48354,"implemented":false,"kind":"function","modifiers":[],"name":"appendStateBatch","nameLocation":"2459:16:161","nodeType":"FunctionDefinition","parameters":{"id":48352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48349,"mutability":"mutable","name":"_batch","nameLocation":"2495:6:161","nodeType":"VariableDeclaration","scope":48354,"src":"2476:25:161","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_calldata_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":48347,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2476:7:161","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":48348,"nodeType":"ArrayTypeName","src":"2476:9:161","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":48351,"mutability":"mutable","name":"_shouldStartAtElement","nameLocation":"2511:21:161","nodeType":"VariableDeclaration","scope":48354,"src":"2503:29:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48350,"name":"uint256","nodeType":"ElementaryTypeName","src":"2503:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2475:58:161"},"returnParameters":{"id":48353,"nodeType":"ParameterList","parameters":[],"src":"2542:0:161"},"scope":48385,"src":"2450:93:161","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":48355,"nodeType":"StructuredDocumentation","src":"2547:144:161","text":" Deletes all state roots after (and including) a given batch.\n @param _batchHeader Header of the batch to start deleting from."},"functionSelector":"b8e189ac","id":48361,"implemented":false,"kind":"function","modifiers":[],"name":"deleteStateBatch","nameLocation":"2703:16:161","nodeType":"FunctionDefinition","parameters":{"id":48359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48358,"mutability":"mutable","name":"_batchHeader","nameLocation":"2744:12:161","nodeType":"VariableDeclaration","scope":48361,"src":"2720:36:161","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ChainBatchHeader_$48289_memory_ptr","typeString":"struct ChainBatchHeader"},"typeName":{"id":48357,"nodeType":"UserDefinedTypeName","pathNode":{"id":48356,"name":"ChainBatchHeader","nameLocations":["2720:16:161"],"nodeType":"IdentifierPath","referencedDeclaration":48289,"src":"2720:16:161"},"referencedDeclaration":48289,"src":"2720:16:161","typeDescriptions":{"typeIdentifier":"t_struct$_ChainBatchHeader_$48289_storage_ptr","typeString":"struct ChainBatchHeader"}},"visibility":"internal"}],"src":"2719:38:161"},"returnParameters":{"id":48360,"nodeType":"ParameterList","parameters":[],"src":"2766:0:161"},"scope":48385,"src":"2694:73:161","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":48362,"nodeType":"StructuredDocumentation","src":"2771:251:161","text":" Verifies a batch inclusion proof.\n @param _element Hash of the element to verify a proof for.\n @param _batchHeader Header of the batch in which the element was included.\n @param _proof Merkle inclusion proof for the element."},"functionSelector":"4d69ee57","id":48375,"implemented":false,"kind":"function","modifiers":[],"name":"verifyStateCommitment","nameLocation":"3034:21:161","nodeType":"FunctionDefinition","parameters":{"id":48371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48364,"mutability":"mutable","name":"_element","nameLocation":"3069:8:161","nodeType":"VariableDeclaration","scope":48375,"src":"3061:16:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48363,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3061:7:161","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":48367,"mutability":"mutable","name":"_batchHeader","nameLocation":"3107:12:161","nodeType":"VariableDeclaration","scope":48375,"src":"3083:36:161","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ChainBatchHeader_$48289_memory_ptr","typeString":"struct ChainBatchHeader"},"typeName":{"id":48366,"nodeType":"UserDefinedTypeName","pathNode":{"id":48365,"name":"ChainBatchHeader","nameLocations":["3083:16:161"],"nodeType":"IdentifierPath","referencedDeclaration":48289,"src":"3083:16:161"},"referencedDeclaration":48289,"src":"3083:16:161","typeDescriptions":{"typeIdentifier":"t_struct$_ChainBatchHeader_$48289_storage_ptr","typeString":"struct ChainBatchHeader"}},"visibility":"internal"},{"constant":false,"id":48370,"mutability":"mutable","name":"_proof","nameLocation":"3152:6:161","nodeType":"VariableDeclaration","scope":48375,"src":"3125:33:161","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ChainInclusionProof_$48295_memory_ptr","typeString":"struct ChainInclusionProof"},"typeName":{"id":48369,"nodeType":"UserDefinedTypeName","pathNode":{"id":48368,"name":"ChainInclusionProof","nameLocations":["3125:19:161"],"nodeType":"IdentifierPath","referencedDeclaration":48295,"src":"3125:19:161"},"referencedDeclaration":48295,"src":"3125:19:161","typeDescriptions":{"typeIdentifier":"t_struct$_ChainInclusionProof_$48295_storage_ptr","typeString":"struct ChainInclusionProof"}},"visibility":"internal"}],"src":"3055:107:161"},"returnParameters":{"id":48374,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48373,"mutability":"mutable","name":"_verified","nameLocation":"3191:9:161","nodeType":"VariableDeclaration","scope":48375,"src":"3186:14:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":48372,"name":"bool","nodeType":"ElementaryTypeName","src":"3186:4:161","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3185:16:161"},"scope":48385,"src":"3025:177:161","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":48376,"nodeType":"StructuredDocumentation","src":"3206:218:161","text":" Checks whether a given batch is still inside its fraud proof window.\n @param _batchHeader Header of the batch to check.\n @return _inside Whether or not the batch is inside the fraud proof window."},"functionSelector":"9418bddd","id":48384,"implemented":false,"kind":"function","modifiers":[],"name":"insideFraudProofWindow","nameLocation":"3436:22:161","nodeType":"FunctionDefinition","parameters":{"id":48380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48379,"mutability":"mutable","name":"_batchHeader","nameLocation":"3483:12:161","nodeType":"VariableDeclaration","scope":48384,"src":"3459:36:161","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ChainBatchHeader_$48289_memory_ptr","typeString":"struct ChainBatchHeader"},"typeName":{"id":48378,"nodeType":"UserDefinedTypeName","pathNode":{"id":48377,"name":"ChainBatchHeader","nameLocations":["3459:16:161"],"nodeType":"IdentifierPath","referencedDeclaration":48289,"src":"3459:16:161"},"referencedDeclaration":48289,"src":"3459:16:161","typeDescriptions":{"typeIdentifier":"t_struct$_ChainBatchHeader_$48289_storage_ptr","typeString":"struct ChainBatchHeader"}},"visibility":"internal"}],"src":"3458:38:161"},"returnParameters":{"id":48383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48382,"mutability":"mutable","name":"_inside","nameLocation":"3525:7:161","nodeType":"VariableDeclaration","scope":48384,"src":"3520:12:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":48381,"name":"bool","nodeType":"ElementaryTypeName","src":"3520:4:161","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3519:14:161"},"scope":48385,"src":"3427:107:161","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":48386,"src":"1211:2325:161","usedErrors":[]}],"src":"46:3491:161"},"id":161},"contracts/messaging/interfaces/ambs/optimism/OptimismAmb.sol":{"ast":{"absolutePath":"contracts/messaging/interfaces/ambs/optimism/OptimismAmb.sol","exportedSymbols":{"OptimismAmb":[48403]},"id":48404,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":48387,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:162"},{"abstract":false,"baseContracts":[],"canonicalName":"OptimismAmb","contractDependencies":[],"contractKind":"interface","documentation":{"id":48388,"nodeType":"StructuredDocumentation","src":"71:937:162","text":" @dev The optimism bridge shares both of these functions, but it is important\n to note that when going from L2 -> L1, the message cannot be processed by the\n AMB until the challenge period elapses.\n HOWEVER, before the challenge elapses, you can read the state of the L2 as it is\n placed on mainnet. By processing data from the L2 state, we are able to \"circumvent\"\n this delay to a reasonable degree.\n This means that for messages going L1 -> L2, you can call \"processMessage\" and expect\n the call to be executed to pass up the aggregate root. When going from L2 -> L1, you\n must read the root from the L2 state\n L2 messenger: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2CrossDomainMessenger.sol\n L1 messenger: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol"},"fullyImplemented":false,"id":48403,"linearizedBaseContracts":[48403],"name":"OptimismAmb","nameLocation":"1019:11:162","nodeType":"ContractDefinition","nodes":[{"functionSelector":"3dbb202b","id":48397,"implemented":false,"kind":"function","modifiers":[],"name":"sendMessage","nameLocation":"1044:11:162","nodeType":"FunctionDefinition","parameters":{"id":48395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48390,"mutability":"mutable","name":"_target","nameLocation":"1069:7:162","nodeType":"VariableDeclaration","scope":48397,"src":"1061:15:162","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48389,"name":"address","nodeType":"ElementaryTypeName","src":"1061:7:162","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48392,"mutability":"mutable","name":"_message","nameLocation":"1095:8:162","nodeType":"VariableDeclaration","scope":48397,"src":"1082:21:162","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":48391,"name":"bytes","nodeType":"ElementaryTypeName","src":"1082:5:162","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":48394,"mutability":"mutable","name":"_gasLimit","nameLocation":"1116:9:162","nodeType":"VariableDeclaration","scope":48397,"src":"1109:16:162","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":48393,"name":"uint32","nodeType":"ElementaryTypeName","src":"1109:6:162","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1055:74:162"},"returnParameters":{"id":48396,"nodeType":"ParameterList","parameters":[],"src":"1138:0:162"},"scope":48403,"src":"1035:104:162","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"6e296e45","id":48402,"implemented":false,"kind":"function","modifiers":[],"name":"xDomainMessageSender","nameLocation":"1152:20:162","nodeType":"FunctionDefinition","parameters":{"id":48398,"nodeType":"ParameterList","parameters":[],"src":"1172:2:162"},"returnParameters":{"id":48401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48400,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48402,"src":"1198:7:162","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48399,"name":"address","nodeType":"ElementaryTypeName","src":"1198:7:162","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1197:9:162"},"scope":48403,"src":"1143:64:162","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":48404,"src":"1009:200:162","usedErrors":[]}],"src":"46:1164:162"},"id":162},"contracts/messaging/libraries/DomainIndexer.sol":{"ast":{"absolutePath":"contracts/messaging/libraries/DomainIndexer.sol","exportedSymbols":{"DomainIndexer":[48758]},"id":48759,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":48405,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:163"},{"abstract":true,"baseContracts":[],"canonicalName":"DomainIndexer","contractDependencies":[],"contractKind":"contract","documentation":{"id":48406,"nodeType":"StructuredDocumentation","src":"71:458:163","text":" @notice This abstract contract was written to ensure domain and connector mutex is scalable for the\n purposes of messaging layer operations. In particular, it aims to reduce gas costs to be relatively\n static regardless of the number of domains kept in storage by enabling callers of `RootManager.propagate`\n to supply the `domains` and `connectors` arrays as params, and check the hashes of those params against\n those we keep in storage."},"fullyImplemented":true,"id":48758,"linearizedBaseContracts":[48758],"name":"DomainIndexer","nameLocation":"548:13:163","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"4fc27362d8ab3086efd93b7880e99ac02e906d0ba9b71ca90239ade53090f703","id":48412,"name":"DomainAdded","nameLocation":"611:11:163","nodeType":"EventDefinition","parameters":{"id":48411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48408,"indexed":false,"mutability":"mutable","name":"domain","nameLocation":"630:6:163","nodeType":"VariableDeclaration","scope":48412,"src":"623:13:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":48407,"name":"uint32","nodeType":"ElementaryTypeName","src":"623:6:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":48410,"indexed":false,"mutability":"mutable","name":"connector","nameLocation":"646:9:163","nodeType":"VariableDeclaration","scope":48412,"src":"638:17:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48409,"name":"address","nodeType":"ElementaryTypeName","src":"638:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"622:34:163"},"src":"605:52:163"},{"anonymous":false,"eventSelector":"7e560b48a4bba1688eb45afd6712a11fa42b9abbb48a8e14e2f15e467ab420e4","id":48416,"name":"DomainRemoved","nameLocation":"666:13:163","nodeType":"EventDefinition","parameters":{"id":48415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48414,"indexed":false,"mutability":"mutable","name":"domain","nameLocation":"687:6:163","nodeType":"VariableDeclaration","scope":48416,"src":"680:13:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":48413,"name":"uint32","nodeType":"ElementaryTypeName","src":"680:6:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"679:15:163"},"src":"660:35:163"},{"constant":true,"documentation":{"id":48417,"nodeType":"StructuredDocumentation","src":"742:605:163","text":" @notice The absolute maximum number of domains that we should support. Domain and connector arrays\n are naturally unbounded, but the gas cost of reading these arrays in `updateHashes()` is bounded by\n the block's gas limit.\n If we want to set a hard ceiling for gas costs for the `updateHashes()` method at approx. 500K gas,\n with an average SLOAD cost of 900 gas per domain (1 uint32, 1 address):\n       500K / 900 = ~555 domains\n Realistically, the cap on the number of domains will likely exist in other places, but we cap it\n here as a last resort."},"functionSelector":"c8ef89de","id":48420,"mutability":"constant","name":"MAX_DOMAINS","nameLocation":"1374:11:163","nodeType":"VariableDeclaration","scope":48758,"src":"1350:41:163","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48418,"name":"uint256","nodeType":"ElementaryTypeName","src":"1350:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"353030","id":48419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1388:3:163","typeDescriptions":{"typeIdentifier":"t_rational_500_by_1","typeString":"int_const 500"},"value":"500"},"visibility":"public"},{"constant":false,"documentation":{"id":48421,"nodeType":"StructuredDocumentation","src":"1396:287:163","text":" @notice Domains array tracks currently subscribed domains to this hub aggregator.\n We should distribute the aggregate root to all of these domains in the `propagate` method.\n @dev Whenever this domains array is updated, the connectors array should also be updated."},"functionSelector":"66cf8fab","id":48424,"mutability":"mutable","name":"domains","nameLocation":"1702:7:163","nodeType":"VariableDeclaration","scope":48758,"src":"1686:23:163","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage","typeString":"uint32[]"},"typeName":{"baseType":{"id":48422,"name":"uint32","nodeType":"ElementaryTypeName","src":"1686:6:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":48423,"nodeType":"ArrayTypeName","src":"1686:8:163","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage_ptr","typeString":"uint32[]"}},"visibility":"public"},{"constant":false,"documentation":{"id":48425,"nodeType":"StructuredDocumentation","src":"1714:255:163","text":" @notice A \"quick reference\" hash used in the `propagate` method below to validate that the provided\n array of domains matches the one we have in storage.\n @dev This hash should be re-calculated whenever the domains array is updated."},"functionSelector":"7bc24d99","id":48427,"mutability":"mutable","name":"domainsHash","nameLocation":"1987:11:163","nodeType":"VariableDeclaration","scope":48758,"src":"1972:26:163","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48426,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1972:7:163","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":false,"documentation":{"id":48428,"nodeType":"StructuredDocumentation","src":"2003:339:163","text":" @notice Tracks the addresses of the hub connector contracts corresponding to subscribed spoke domains.\n The index of any given connector in this array should match the index of that connector's target spoke\n domain in the `domains` array above.\n @dev This should be updated whenever the domains array is updated."},"functionSelector":"13ede1a1","id":48431,"mutability":"mutable","name":"connectors","nameLocation":"2362:10:163","nodeType":"VariableDeclaration","scope":48758,"src":"2345:27:163","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":48429,"name":"address","nodeType":"ElementaryTypeName","src":"2345:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":48430,"nodeType":"ArrayTypeName","src":"2345:9:163","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"public"},{"constant":false,"documentation":{"id":48432,"nodeType":"StructuredDocumentation","src":"2377:261:163","text":" @notice A \"quick reference\" hash used in the `propagate` method below to validate that the provided\n array of connectors matches the one we have in storage.\n @dev This hash should be re-calculated whenever the connectors array is updated."},"functionSelector":"498c2c2e","id":48434,"mutability":"mutable","name":"connectorsHash","nameLocation":"2656:14:163","nodeType":"VariableDeclaration","scope":48758,"src":"2641:29:163","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48433,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2641:7:163","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":false,"documentation":{"id":48435,"nodeType":"StructuredDocumentation","src":"2675:247:163","text":" @notice Shortcut to reverse lookup the index by domain. We index starting at one so the zero value can\n be considered invalid (see fn: `isDomainSupported`).\n @dev This should be updated whenever the domains array is updated."},"id":48439,"mutability":"mutable","name":"domainToIndexPlusOne","nameLocation":"2960:20:163","nodeType":"VariableDeclaration","scope":48758,"src":"2925:55:163","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint32_$_t_uint256_$","typeString":"mapping(uint32 => uint256)"},"typeName":{"id":48438,"keyType":{"id":48436,"name":"uint32","nodeType":"ElementaryTypeName","src":"2933:6:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Mapping","src":"2925:26:163","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint32_$_t_uint256_$","typeString":"mapping(uint32 => uint256)"},"valueType":{"id":48437,"name":"uint256","nodeType":"ElementaryTypeName","src":"2943:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"body":{"id":48453,"nodeType":"Block","src":"3242:52:163","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":48447,"name":"domainToIndexPlusOne","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48439,"src":"3255:20:163","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint32_$_t_uint256_$","typeString":"mapping(uint32 => uint256)"}},"id":48449,"indexExpression":{"id":48448,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48442,"src":"3276:7:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3255:29:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":48450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3288:1:163","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3255:34:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":48446,"id":48452,"nodeType":"Return","src":"3248:41:163"}]},"documentation":{"id":48440,"nodeType":"StructuredDocumentation","src":"3025:144:163","text":" @notice Convenience shortcut for supported domains. Used to sanity check adding new domains.\n @param _domain Domain to check."},"functionSelector":"24ec5d05","id":48454,"implemented":true,"kind":"function","modifiers":[],"name":"isDomainSupported","nameLocation":"3181:17:163","nodeType":"FunctionDefinition","parameters":{"id":48443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48442,"mutability":"mutable","name":"_domain","nameLocation":"3206:7:163","nodeType":"VariableDeclaration","scope":48454,"src":"3199:14:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":48441,"name":"uint32","nodeType":"ElementaryTypeName","src":"3199:6:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"3198:16:163"},"returnParameters":{"id":48446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48445,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48454,"src":"3236:4:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":48444,"name":"bool","nodeType":"ElementaryTypeName","src":"3236:4:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3235:6:163"},"scope":48758,"src":"3172:122:163","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":48479,"nodeType":"Block","src":"3575:117:163","statements":[{"assignments":[48463],"declarations":[{"constant":false,"id":48463,"mutability":"mutable","name":"index","nameLocation":"3589:5:163","nodeType":"VariableDeclaration","scope":48479,"src":"3581:13:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48462,"name":"uint256","nodeType":"ElementaryTypeName","src":"3581:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":48467,"initialValue":{"baseExpression":{"id":48464,"name":"domainToIndexPlusOne","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48439,"src":"3597:20:163","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint32_$_t_uint256_$","typeString":"mapping(uint32 => uint256)"}},"id":48466,"indexExpression":{"id":48465,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48457,"src":"3618:7:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3597:29:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3581:45:163"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48469,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48463,"src":"3640:5:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":48470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3649:1:163","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3640:10:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21737570706f72746564","id":48472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3652:12:163","typeDescriptions":{"typeIdentifier":"t_stringliteral_eead9a749bb70fe1ce8febf2e6a2513dd4a5ce75eba52d12379ec95d317c3d3f","typeString":"literal_string \"!supported\""},"value":"!supported"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_eead9a749bb70fe1ce8febf2e6a2513dd4a5ce75eba52d12379ec95d317c3d3f","typeString":"literal_string \"!supported\""}],"id":48468,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3632:7:163","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":48473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3632:33:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48474,"nodeType":"ExpressionStatement","src":"3632:33:163"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48475,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48463,"src":"3678:5:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":48476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3686:1:163","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3678:9:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":48461,"id":48478,"nodeType":"Return","src":"3671:16:163"}]},"documentation":{"id":48455,"nodeType":"StructuredDocumentation","src":"3298:204:163","text":" @notice Gets the index of a given domain in the domains and connectors arrays.\n @dev Reverts if domain is not supported.\n @param _domain The domain for which to get the index value."},"functionSelector":"3c4baaf8","id":48480,"implemented":true,"kind":"function","modifiers":[],"name":"getDomainIndex","nameLocation":"3514:14:163","nodeType":"FunctionDefinition","parameters":{"id":48458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48457,"mutability":"mutable","name":"_domain","nameLocation":"3536:7:163","nodeType":"VariableDeclaration","scope":48480,"src":"3529:14:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":48456,"name":"uint32","nodeType":"ElementaryTypeName","src":"3529:6:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"3528:16:163"},"returnParameters":{"id":48461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48460,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48480,"src":"3566:7:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48459,"name":"uint256","nodeType":"ElementaryTypeName","src":"3566:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3565:9:163"},"scope":48758,"src":"3505:187:163","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":48494,"nodeType":"Block","src":"4030:53:163","statements":[{"expression":{"baseExpression":{"id":48488,"name":"connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48431,"src":"4043:10:163","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":48492,"indexExpression":{"arguments":[{"id":48490,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48483,"src":"4069:7:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":48489,"name":"getDomainIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48480,"src":"4054:14:163","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint32_$returns$_t_uint256_$","typeString":"function (uint32) view returns (uint256)"}},"id":48491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4054:23:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4043:35:163","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":48487,"id":48493,"nodeType":"Return","src":"4036:42:163"}]},"documentation":{"id":48481,"nodeType":"StructuredDocumentation","src":"3696:254:163","text":" @notice Gets the corresponding hub connector address for a given spoke domain.\n @dev Inefficient, should only be used by caller if they have no index reference.\n @param _domain The domain for which to get the hub connector address."},"functionSelector":"7d434e91","id":48495,"implemented":true,"kind":"function","modifiers":[],"name":"getConnectorForDomain","nameLocation":"3962:21:163","nodeType":"FunctionDefinition","parameters":{"id":48484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48483,"mutability":"mutable","name":"_domain","nameLocation":"3991:7:163","nodeType":"VariableDeclaration","scope":48495,"src":"3984:14:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":48482,"name":"uint32","nodeType":"ElementaryTypeName","src":"3984:6:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"3983:16:163"},"returnParameters":{"id":48487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48486,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48495,"src":"4021:7:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48485,"name":"address","nodeType":"ElementaryTypeName","src":"4021:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4020:9:163"},"scope":48758,"src":"3953:130:163","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":48538,"nodeType":"Block","src":"4519:425:163","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":48506,"name":"_domains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48499,"src":"4581:8:163","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_calldata_ptr","typeString":"uint32[] calldata"}},"id":48507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4590:6:163","memberName":"length","nodeType":"MemberAccess","src":"4581:15:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":48508,"name":"_connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48502,"src":"4600:11:163","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":48509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4612:6:163","memberName":"length","nodeType":"MemberAccess","src":"4600:18:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4581:37:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216d61746368696e67206c656e677468","id":48511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4620:18:163","typeDescriptions":{"typeIdentifier":"t_stringliteral_1b3dad4847886d431ff5d32a756e774697e6b3066b8c2075a79c1c0724122a74","typeString":"literal_string \"!matching length\""},"value":"!matching length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1b3dad4847886d431ff5d32a756e774697e6b3066b8c2075a79c1c0724122a74","typeString":"literal_string \"!matching length\""}],"id":48505,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4573:7:163","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":48512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4573:66:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48513,"nodeType":"ExpressionStatement","src":"4573:66:163"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":48522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":48518,"name":"_domains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48499,"src":"4745:8:163","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_calldata_ptr","typeString":"uint32[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint32_$dyn_calldata_ptr","typeString":"uint32[] calldata"}],"expression":{"id":48516,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4734:3:163","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":48517,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4738:6:163","memberName":"encode","nodeType":"MemberAccess","src":"4734:10:163","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":48519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4734:20:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":48515,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4724:9:163","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":48520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4724:31:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":48521,"name":"domainsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48427,"src":"4759:11:163","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4724:46:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21646f6d61696e73","id":48523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4772:10:163","typeDescriptions":{"typeIdentifier":"t_stringliteral_069b0c751baa033a978be3583d0de58dbb093dd8290b507a8911c35f2d486c99","typeString":"literal_string \"!domains\""},"value":"!domains"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_069b0c751baa033a978be3583d0de58dbb093dd8290b507a8911c35f2d486c99","typeString":"literal_string \"!domains\""}],"id":48514,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4716:7:163","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":48524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4716:67:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48525,"nodeType":"ExpressionStatement","src":"4716:67:163"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":48534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":48530,"name":"_connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48502,"src":"4892:11:163","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}],"expression":{"id":48528,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4881:3:163","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":48529,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4885:6:163","memberName":"encode","nodeType":"MemberAccess","src":"4881:10:163","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":48531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4881:23:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":48527,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4871:9:163","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":48532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4871:34:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":48533,"name":"connectorsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48434,"src":"4909:14:163","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4871:52:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21636f6e6e6563746f7273","id":48535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4925:13:163","typeDescriptions":{"typeIdentifier":"t_stringliteral_2d87153ecfbf898378d31617525dca29b55718c58d32c8c1caea6770b56c7d98","typeString":"literal_string \"!connectors\""},"value":"!connectors"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2d87153ecfbf898378d31617525dca29b55718c58d32c8c1caea6770b56c7d98","typeString":"literal_string \"!connectors\""}],"id":48526,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4863:7:163","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":48536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4863:76:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48537,"nodeType":"ExpressionStatement","src":"4863:76:163"}]},"documentation":{"id":48496,"nodeType":"StructuredDocumentation","src":"4087:332:163","text":" @notice Validate given domains and connectors arrays are correct (i.e. they mirror what is\n currently saved in storage).\n @dev Reverts if domains or connectors do not match, including ordering.\n @param _domains The given domains array to check.\n @param _connectors The given connectors array to check."},"functionSelector":"db0f0169","id":48539,"implemented":true,"kind":"function","modifiers":[],"name":"validateDomains","nameLocation":"4431:15:163","nodeType":"FunctionDefinition","parameters":{"id":48503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48499,"mutability":"mutable","name":"_domains","nameLocation":"4465:8:163","nodeType":"VariableDeclaration","scope":48539,"src":"4447:26:163","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_calldata_ptr","typeString":"uint32[]"},"typeName":{"baseType":{"id":48497,"name":"uint32","nodeType":"ElementaryTypeName","src":"4447:6:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":48498,"nodeType":"ArrayTypeName","src":"4447:8:163","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage_ptr","typeString":"uint32[]"}},"visibility":"internal"},{"constant":false,"id":48502,"mutability":"mutable","name":"_connectors","nameLocation":"4494:11:163","nodeType":"VariableDeclaration","scope":48539,"src":"4475:30:163","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":48500,"name":"address","nodeType":"ElementaryTypeName","src":"4475:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":48501,"nodeType":"ArrayTypeName","src":"4475:9:163","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4446:60:163"},"returnParameters":{"id":48504,"nodeType":"ParameterList","parameters":[],"src":"4519:0:163"},"scope":48758,"src":"4422:522:163","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":48558,"nodeType":"Block","src":"5285:161:163","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":48554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":48550,"name":"_connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48543,"src":"5394:11:163","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}],"expression":{"id":48548,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5383:3:163","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":48549,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5387:6:163","memberName":"encode","nodeType":"MemberAccess","src":"5383:10:163","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":48551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5383:23:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":48547,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5373:9:163","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":48552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5373:34:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":48553,"name":"connectorsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48434,"src":"5411:14:163","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5373:52:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21636f6e6e6563746f7273","id":48555,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5427:13:163","typeDescriptions":{"typeIdentifier":"t_stringliteral_2d87153ecfbf898378d31617525dca29b55718c58d32c8c1caea6770b56c7d98","typeString":"literal_string \"!connectors\""},"value":"!connectors"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2d87153ecfbf898378d31617525dca29b55718c58d32c8c1caea6770b56c7d98","typeString":"literal_string \"!connectors\""}],"id":48546,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5365:7:163","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":48556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5365:76:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48557,"nodeType":"ExpressionStatement","src":"5365:76:163"}]},"documentation":{"id":48540,"nodeType":"StructuredDocumentation","src":"4948:262:163","text":" @notice Validate given connectors array is correct (i.e. it mirrors what is\n currently saved in storage).\n @dev Reverts if domains or connectors do not match, including ordering.\n @param _connectors The given connectors array to check."},"functionSelector":"27186c6a","id":48559,"implemented":true,"kind":"function","modifiers":[],"name":"validateConnectors","nameLocation":"5222:18:163","nodeType":"FunctionDefinition","parameters":{"id":48544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48543,"mutability":"mutable","name":"_connectors","nameLocation":"5260:11:163","nodeType":"VariableDeclaration","scope":48559,"src":"5241:30:163","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":48541,"name":"address","nodeType":"ElementaryTypeName","src":"5241:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":48542,"nodeType":"ArrayTypeName","src":"5241:9:163","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5240:32:163"},"returnParameters":{"id":48545,"nodeType":"ParameterList","parameters":[],"src":"5285:0:163"},"scope":48758,"src":"5213:233:163","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":48624,"nodeType":"Block","src":"5791:673:163","statements":[{"expression":{"arguments":[{"id":48571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5857:27:163","subExpression":{"arguments":[{"id":48569,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48562,"src":"5876:7:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":48568,"name":"isDomainSupported","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48454,"src":"5858:17:163","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint32_$returns$_t_bool_$","typeString":"function (uint32) view returns (bool)"}},"id":48570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5858:26:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"646f6d61696e20657869737473","id":48572,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5886:15:163","typeDescriptions":{"typeIdentifier":"t_stringliteral_a119ebcb269307a76882c3ab3433e191b381689141f8fce583b20a0c51f09799","typeString":"literal_string \"domain exists\""},"value":"domain exists"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a119ebcb269307a76882c3ab3433e191b381689141f8fce583b20a0c51f09799","typeString":"literal_string \"domain exists\""}],"id":48567,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5849:7:163","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":48573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5849:53:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48574,"nodeType":"ExpressionStatement","src":"5849:53:163"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":48581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48576,"name":"_connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48564,"src":"5962:10:163","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":48579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5984:1:163","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":48578,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5976:7:163","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":48577,"name":"address","nodeType":"ElementaryTypeName","src":"5976:7:163","typeDescriptions":{}}},"id":48580,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5976:10:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5962:24:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"21636f6e6e6563746f72","id":48582,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5988:12:163","typeDescriptions":{"typeIdentifier":"t_stringliteral_f07da7b975140f505677e7936eeabdf78b829042e2b339dd9ec88a01bc429624","typeString":"literal_string \"!connector\""},"value":"!connector"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f07da7b975140f505677e7936eeabdf78b829042e2b339dd9ec88a01bc429624","typeString":"literal_string \"!connector\""}],"id":48575,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5954:7:163","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":48583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5954:47:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48584,"nodeType":"ExpressionStatement","src":"5954:47:163"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":48586,"name":"domains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48424,"src":"6051:7:163","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage","typeString":"uint32[] storage ref"}},"id":48587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6059:6:163","memberName":"length","nodeType":"MemberAccess","src":"6051:14:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":48588,"name":"MAX_DOMAINS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48420,"src":"6068:11:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6051:28:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"446f6d61696e496e6465786572206174206361706163697479","id":48590,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6081:27:163","typeDescriptions":{"typeIdentifier":"t_stringliteral_9308cd27a729cf7a07f3d8b44d2c21a947a78dd47c28e8fba8bd6a0d96c10ccd","typeString":"literal_string \"DomainIndexer at capacity\""},"value":"DomainIndexer at capacity"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9308cd27a729cf7a07f3d8b44d2c21a947a78dd47c28e8fba8bd6a0d96c10ccd","typeString":"literal_string \"DomainIndexer at capacity\""}],"id":48585,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6043:7:163","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":48591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6043:66:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48592,"nodeType":"ExpressionStatement","src":"6043:66:163"},{"expression":{"arguments":[{"id":48596,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48562,"src":"6184:7:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":48593,"name":"domains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48424,"src":"6171:7:163","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage","typeString":"uint32[] storage ref"}},"id":48595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6179:4:163","memberName":"push","nodeType":"MemberAccess","src":"6171:12:163","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_uint32_$dyn_storage_ptr_$_t_uint32_$returns$__$bound_to$_t_array$_t_uint32_$dyn_storage_ptr_$","typeString":"function (uint32[] storage pointer,uint32)"}},"id":48597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6171:21:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48598,"nodeType":"ExpressionStatement","src":"6171:21:163"},{"expression":{"arguments":[{"id":48602,"name":"_connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48564,"src":"6214:10:163","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":48599,"name":"connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48431,"src":"6198:10:163","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":48601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6209:4:163","memberName":"push","nodeType":"MemberAccess","src":"6198:15:163","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer,address)"}},"id":48603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6198:27:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48604,"nodeType":"ExpressionStatement","src":"6198:27:163"},{"assignments":[48606],"declarations":[{"constant":false,"id":48606,"mutability":"mutable","name":"_indexPlusOne","nameLocation":"6266:13:163","nodeType":"VariableDeclaration","scope":48624,"src":"6258:21:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48605,"name":"uint256","nodeType":"ElementaryTypeName","src":"6258:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":48609,"initialValue":{"expression":{"id":48607,"name":"domains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48424,"src":"6282:7:163","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage","typeString":"uint32[] storage ref"}},"id":48608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6290:6:163","memberName":"length","nodeType":"MemberAccess","src":"6282:14:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6258:38:163"},{"expression":{"id":48614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":48610,"name":"domainToIndexPlusOne","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48439,"src":"6302:20:163","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint32_$_t_uint256_$","typeString":"mapping(uint32 => uint256)"}},"id":48612,"indexExpression":{"id":48611,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48562,"src":"6323:7:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6302:29:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":48613,"name":"_indexPlusOne","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48606,"src":"6334:13:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6302:45:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48615,"nodeType":"ExpressionStatement","src":"6302:45:163"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":48616,"name":"updateHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48757,"src":"6401:12:163","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":48617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6401:14:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48618,"nodeType":"ExpressionStatement","src":"6401:14:163"},{"eventCall":{"arguments":[{"id":48620,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48562,"src":"6439:7:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":48621,"name":"_connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48564,"src":"6448:10:163","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":48619,"name":"DomainAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48412,"src":"6427:11:163","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint32_$_t_address_$returns$__$","typeString":"function (uint32,address)"}},"id":48622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6427:32:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48623,"nodeType":"EmitStatement","src":"6422:37:163"}]},"documentation":{"id":48560,"nodeType":"StructuredDocumentation","src":"5499:225:163","text":" @notice Handles all mutex for adding support for a given domain.\n @param _domain Domain for which we are adding support.\n @param _connector Corresponding hub connector address belonging to given domain."},"id":48625,"implemented":true,"kind":"function","modifiers":[],"name":"addDomain","nameLocation":"5736:9:163","nodeType":"FunctionDefinition","parameters":{"id":48565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48562,"mutability":"mutable","name":"_domain","nameLocation":"5753:7:163","nodeType":"VariableDeclaration","scope":48625,"src":"5746:14:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":48561,"name":"uint32","nodeType":"ElementaryTypeName","src":"5746:6:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":48564,"mutability":"mutable","name":"_connector","nameLocation":"5770:10:163","nodeType":"VariableDeclaration","scope":48625,"src":"5762:18:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48563,"name":"address","nodeType":"ElementaryTypeName","src":"5762:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5745:36:163"},"returnParameters":{"id":48566,"nodeType":"ParameterList","parameters":[],"src":"5791:0:163"},"scope":48758,"src":"5727:737:163","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":48719,"nodeType":"Block","src":"6730:1267:163","statements":[{"assignments":[48634],"declarations":[{"constant":false,"id":48634,"mutability":"mutable","name":"_index","nameLocation":"6744:6:163","nodeType":"VariableDeclaration","scope":48719,"src":"6736:14:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48633,"name":"uint256","nodeType":"ElementaryTypeName","src":"6736:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":48638,"initialValue":{"arguments":[{"id":48636,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48628,"src":"6768:7:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":48635,"name":"getDomainIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48480,"src":"6753:14:163","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint32_$returns$_t_uint256_$","typeString":"function (uint32) view returns (uint256)"}},"id":48637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6753:23:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6736:40:163"},{"assignments":[48640],"declarations":[{"constant":false,"id":48640,"mutability":"mutable","name":"_connector","nameLocation":"6835:10:163","nodeType":"VariableDeclaration","scope":48719,"src":"6827:18:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48639,"name":"address","nodeType":"ElementaryTypeName","src":"6827:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":48644,"initialValue":{"baseExpression":{"id":48641,"name":"connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48431,"src":"6848:10:163","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":48643,"indexExpression":{"id":48642,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48634,"src":"6859:6:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6848:18:163","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6827:39:163"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":48651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48646,"name":"_connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48640,"src":"6919:10:163","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":48649,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6941:1:163","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":48648,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6933:7:163","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":48647,"name":"address","nodeType":"ElementaryTypeName","src":"6933:7:163","typeDescriptions":{}}},"id":48650,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6933:10:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6919:24:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6e6e6563746f722021657869737473","id":48652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6945:19:163","typeDescriptions":{"typeIdentifier":"t_stringliteral_d0dafca8381883f95defc09b28a81ebd60e1499d273f6a1ea9c522dc0a7ecdb1","typeString":"literal_string \"connector !exists\""},"value":"connector !exists"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d0dafca8381883f95defc09b28a81ebd60e1499d273f6a1ea9c522dc0a7ecdb1","typeString":"literal_string \"connector !exists\""}],"id":48645,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6911:7:163","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":48653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6911:54:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48654,"nodeType":"ExpressionStatement","src":"6911:54:163"},{"assignments":[48656],"declarations":[{"constant":false,"id":48656,"mutability":"mutable","name":"_lastIndex","nameLocation":"7144:10:163","nodeType":"VariableDeclaration","scope":48719,"src":"7136:18:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48655,"name":"uint256","nodeType":"ElementaryTypeName","src":"7136:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":48661,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":48657,"name":"domains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48424,"src":"7157:7:163","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage","typeString":"uint32[] storage ref"}},"id":48658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7165:6:163","memberName":"length","nodeType":"MemberAccess","src":"7157:14:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":48659,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7174:1:163","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7157:18:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7136:39:163"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48662,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48634,"src":"7185:6:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":48663,"name":"_lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48656,"src":"7194:10:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7185:19:163","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":48694,"nodeType":"IfStatement","src":"7181:533:163","trueBody":{"id":48693,"nodeType":"Block","src":"7206:508:163","statements":[{"assignments":[48666],"declarations":[{"constant":false,"id":48666,"mutability":"mutable","name":"copiedDomain","nameLocation":"7410:12:163","nodeType":"VariableDeclaration","scope":48693,"src":"7403:19:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":48665,"name":"uint32","nodeType":"ElementaryTypeName","src":"7403:6:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":48670,"initialValue":{"baseExpression":{"id":48667,"name":"domains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48424,"src":"7425:7:163","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage","typeString":"uint32[] storage ref"}},"id":48669,"indexExpression":{"id":48668,"name":"_lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48656,"src":"7433:10:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7425:19:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"7403:41:163"},{"expression":{"id":48675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":48671,"name":"domains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48424,"src":"7452:7:163","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage","typeString":"uint32[] storage ref"}},"id":48673,"indexExpression":{"id":48672,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48634,"src":"7460:6:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7452:15:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":48674,"name":"copiedDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48666,"src":"7470:12:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"7452:30:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":48676,"nodeType":"ExpressionStatement","src":"7452:30:163"},{"expression":{"id":48683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":48677,"name":"connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48431,"src":"7490:10:163","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":48679,"indexExpression":{"id":48678,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48634,"src":"7501:6:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7490:18:163","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":48680,"name":"connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48431,"src":"7511:10:163","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":48682,"indexExpression":{"id":48681,"name":"_lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48656,"src":"7522:10:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7511:22:163","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7490:43:163","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":48684,"nodeType":"ExpressionStatement","src":"7490:43:163"},{"expression":{"id":48691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":48685,"name":"domainToIndexPlusOne","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48439,"src":"7608:20:163","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint32_$_t_uint256_$","typeString":"mapping(uint32 => uint256)"}},"id":48687,"indexExpression":{"id":48686,"name":"copiedDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48666,"src":"7629:12:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7608:34:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48688,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48634,"src":"7645:6:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":48689,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7654:1:163","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7645:10:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7608:47:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48692,"nodeType":"ExpressionStatement","src":"7608:47:163"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":48695,"name":"domains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48424,"src":"7760:7:163","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage","typeString":"uint32[] storage ref"}},"id":48697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7768:3:163","memberName":"pop","nodeType":"MemberAccess","src":"7760:11:163","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_uint32_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_uint32_$dyn_storage_ptr_$","typeString":"function (uint32[] storage pointer)"}},"id":48698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7760:13:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48699,"nodeType":"ExpressionStatement","src":"7760:13:163"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":48700,"name":"connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48431,"src":"7779:10:163","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":48702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7790:3:163","memberName":"pop","nodeType":"MemberAccess","src":"7779:14:163","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer)"}},"id":48703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7779:16:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48704,"nodeType":"ExpressionStatement","src":"7779:16:163"},{"expression":{"id":48708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"7830:36:163","subExpression":{"baseExpression":{"id":48705,"name":"domainToIndexPlusOne","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48439,"src":"7837:20:163","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint32_$_t_uint256_$","typeString":"mapping(uint32 => uint256)"}},"id":48707,"indexExpression":{"id":48706,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48628,"src":"7858:7:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7837:29:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48709,"nodeType":"ExpressionStatement","src":"7830:36:163"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":48710,"name":"updateHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48757,"src":"7920:12:163","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":48711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7920:14:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48712,"nodeType":"ExpressionStatement","src":"7920:14:163"},{"eventCall":{"arguments":[{"id":48714,"name":"_domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48628,"src":"7960:7:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":48713,"name":"DomainRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48416,"src":"7946:13:163","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint32_$returns$__$","typeString":"function (uint32)"}},"id":48715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7946:22:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48716,"nodeType":"EmitStatement","src":"7941:27:163"},{"expression":{"id":48717,"name":"_connector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48640,"src":"7982:10:163","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":48632,"id":48718,"nodeType":"Return","src":"7975:17:163"}]},"documentation":{"id":48626,"nodeType":"StructuredDocumentation","src":"6468:194:163","text":" @notice Handles all mutex for removing support for a given domain.\n @param _domain Domain we are removing.\n @return address of the hub connector for the domain we removed."},"id":48720,"implemented":true,"kind":"function","modifiers":[],"name":"removeDomain","nameLocation":"6674:12:163","nodeType":"FunctionDefinition","parameters":{"id":48629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48628,"mutability":"mutable","name":"_domain","nameLocation":"6694:7:163","nodeType":"VariableDeclaration","scope":48720,"src":"6687:14:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":48627,"name":"uint32","nodeType":"ElementaryTypeName","src":"6687:6:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"6686:16:163"},"returnParameters":{"id":48632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48631,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48720,"src":"6721:7:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48630,"name":"address","nodeType":"ElementaryTypeName","src":"6721:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6720:9:163"},"scope":48758,"src":"6665:1332:163","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":48756,"nodeType":"Block","src":"8232:200:163","statements":[{"assignments":[48728],"declarations":[{"constant":false,"id":48728,"mutability":"mutable","name":"_domains","nameLocation":"8254:8:163","nodeType":"VariableDeclaration","scope":48756,"src":"8238:24:163","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_memory_ptr","typeString":"uint32[]"},"typeName":{"baseType":{"id":48726,"name":"uint32","nodeType":"ElementaryTypeName","src":"8238:6:163","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":48727,"nodeType":"ArrayTypeName","src":"8238:8:163","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage_ptr","typeString":"uint32[]"}},"visibility":"internal"}],"id":48730,"initialValue":{"id":48729,"name":"domains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48424,"src":"8265:7:163","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_storage","typeString":"uint32[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"8238:34:163"},{"assignments":[48735],"declarations":[{"constant":false,"id":48735,"mutability":"mutable","name":"_connectors","nameLocation":"8295:11:163","nodeType":"VariableDeclaration","scope":48756,"src":"8278:28:163","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":48733,"name":"address","nodeType":"ElementaryTypeName","src":"8278:7:163","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":48734,"nodeType":"ArrayTypeName","src":"8278:9:163","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":48737,"initialValue":{"id":48736,"name":"connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48431,"src":"8309:10:163","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"8278:41:163"},{"expression":{"id":48745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":48738,"name":"domainsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48427,"src":"8325:11:163","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":48742,"name":"_domains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48728,"src":"8360:8:163","typeDescriptions":{"typeIdentifier":"t_array$_t_uint32_$dyn_memory_ptr","typeString":"uint32[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint32_$dyn_memory_ptr","typeString":"uint32[] memory"}],"expression":{"id":48740,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8349:3:163","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":48741,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8353:6:163","memberName":"encode","nodeType":"MemberAccess","src":"8349:10:163","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":48743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8349:20:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":48739,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8339:9:163","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":48744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8339:31:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8325:45:163","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":48746,"nodeType":"ExpressionStatement","src":"8325:45:163"},{"expression":{"id":48754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":48747,"name":"connectorsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48434,"src":"8376:14:163","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":48751,"name":"_connectors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48735,"src":"8414:11:163","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"expression":{"id":48749,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8403:3:163","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":48750,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8407:6:163","memberName":"encode","nodeType":"MemberAccess","src":"8403:10:163","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":48752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8403:23:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":48748,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8393:9:163","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":48753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8393:34:163","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8376:51:163","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":48755,"nodeType":"ExpressionStatement","src":"8376:51:163"}]},"documentation":{"id":48721,"nodeType":"StructuredDocumentation","src":"8001:195:163","text":" @notice Calculate the new hashes for the domains and connectors arrays and update storage refs.\n @dev Used for the Connector update functions `addConnector`, `removeConnector`."},"id":48757,"implemented":true,"kind":"function","modifiers":[],"name":"updateHashes","nameLocation":"8208:12:163","nodeType":"FunctionDefinition","parameters":{"id":48722,"nodeType":"ParameterList","parameters":[],"src":"8220:2:163"},"returnParameters":{"id":48723,"nodeType":"ParameterList","parameters":[],"src":"8232:0:163"},"scope":48758,"src":"8199:233:163","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":48759,"src":"530:7904:163","usedErrors":[]}],"src":"46:8389:163"},"id":163},"contracts/messaging/libraries/MerkleLib.sol":{"ast":{"absolutePath":"contracts/messaging/libraries/MerkleLib.sol","exportedSymbols":{"MerkleLib":[48999]},"id":49000,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":48760,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:164"},{"abstract":false,"baseContracts":[],"canonicalName":"MerkleLib","contractDependencies":[],"contractKind":"library","documentation":{"id":48761,"nodeType":"StructuredDocumentation","src":"71:137:164","text":" @title MerkleLib\n @author Illusory Systems Inc.\n @notice An incremental merkle tree modeled on the eth2 deposit contract.*"},"fullyImplemented":true,"id":48999,"linearizedBaseContracts":[48999],"name":"MerkleLib","nameLocation":"217:9:164","nodeType":"ContractDefinition","nodes":[{"errorSelector":"8eab04bb","id":48763,"name":"MerkleLib__insert_treeIsFull","nameLocation":"280:28:164","nodeType":"ErrorDefinition","parameters":{"id":48762,"nodeType":"ParameterList","parameters":[],"src":"308:2:164"},"src":"274:37:164"},{"constant":true,"id":48766,"mutability":"constant","name":"TREE_DEPTH","nameLocation":"384:10:164","nodeType":"VariableDeclaration","scope":48999,"src":"358:41:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48764,"name":"uint256","nodeType":"ElementaryTypeName","src":"358:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3332","id":48765,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"397:2:164","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"visibility":"internal"},{"constant":true,"id":48773,"mutability":"constant","name":"MAX_LEAVES","nameLocation":"429:10:164","nodeType":"VariableDeclaration","scope":48999,"src":"403:56:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48767,"name":"uint256","nodeType":"ElementaryTypeName","src":"403:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48772,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48770,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":48768,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"442:1:164","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":48769,"name":"TREE_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48766,"src":"445:10:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"442:13:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":48771,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"458:1:164","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"442:17:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"documentation":{"id":48774,"nodeType":"StructuredDocumentation","src":"464:363:164","text":" @dev Z_i represent the hash values at different heights for a binary tree with leaf values equal to `0`.\n (e.g. Z_1 is the keccak256 hash of (0x0, 0x0), Z_2 is the keccak256 hash of (Z_1, Z_1), etc...)\n Z_0 is the bottom of the 33-layer tree, Z_32 is the top (i.e. root).\n Used to shortcut calculation in root calculation methods below."},"id":48777,"mutability":"constant","name":"Z_0","nameLocation":"856:3:164","nodeType":"VariableDeclaration","scope":48999,"src":"830:101:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48775,"name":"bytes32","nodeType":"ElementaryTypeName","src":"830:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"0000000000000000000000000000000000000000000000000000000000000000","id":48776,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"862:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563","typeString":"literal_string hex\"0000000000000000000000000000000000000000000000000000000000000000\""},"value":"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"},"visibility":"internal"},{"constant":true,"id":48780,"mutability":"constant","name":"Z_1","nameLocation":"961:3:164","nodeType":"VariableDeclaration","scope":48999,"src":"935:101:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48778,"name":"bytes32","nodeType":"ElementaryTypeName","src":"935:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5","id":48779,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"967:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_f0df3dcda05b4fbd9c655cde3d5ceb211e019e72ec816e127a59e7195f2cd7f5","typeString":"literal_string hex\"ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5\""}},"visibility":"internal"},{"constant":true,"id":48783,"mutability":"constant","name":"Z_2","nameLocation":"1066:3:164","nodeType":"VariableDeclaration","scope":48999,"src":"1040:101:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48781,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1040:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30","id":48782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"1072:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_7b564a9e24d07dd3d9bc143abe4a2bd2b5cdcabfe0817ea83e4ece65ab755a3a","typeString":"literal_string hex\"b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30\""}},"visibility":"internal"},{"constant":true,"id":48786,"mutability":"constant","name":"Z_3","nameLocation":"1171:3:164","nodeType":"VariableDeclaration","scope":48999,"src":"1145:101:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48784,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1145:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85","id":48785,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"1177:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_fe2ac19237f4c2050168dc54c9be0a9fbd8df4cdc4850692eb8acbb549f6c7e4","typeString":"literal_string hex\"21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85\""}},"visibility":"internal"},{"constant":true,"id":48789,"mutability":"constant","name":"Z_4","nameLocation":"1276:3:164","nodeType":"VariableDeclaration","scope":48999,"src":"1250:101:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48787,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1250:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344","id":48788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"1282:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_99fd602e0f9963514cd33ec24f4b24b723583dd9dad94351c3c1aa8cafac3d3e","typeString":"literal_string hex\"e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344\""}},"visibility":"internal"},{"constant":true,"id":48792,"mutability":"constant","name":"Z_5","nameLocation":"1381:3:164","nodeType":"VariableDeclaration","scope":48999,"src":"1355:101:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48790,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1355:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d","id":48791,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"1387:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_c99ffec43b895e4b2be536d4a37beca362370f6b6c29e27aa84819d92bd0aa1e","typeString":"literal_string hex\"0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d\""}},"visibility":"internal"},{"constant":true,"id":48795,"mutability":"constant","name":"Z_6","nameLocation":"1486:3:164","nodeType":"VariableDeclaration","scope":48999,"src":"1460:101:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48793,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1460:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968","id":48794,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"1492:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc6d2376e49490ce3aac7d7c1f881322fe6a13a906119e75427bb463aa3481ab","typeString":"literal_string hex\"887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968\""}},"visibility":"internal"},{"constant":true,"id":48798,"mutability":"constant","name":"Z_7","nameLocation":"1591:3:164","nodeType":"VariableDeclaration","scope":48999,"src":"1565:101:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48796,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1565:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83","id":48797,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"1597:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_c932083006395ebfe15d0611a2309f43d2f8a4dc927452d28e345fb5add30799","typeString":"literal_string hex\"ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83\""}},"visibility":"internal"},{"constant":true,"id":48801,"mutability":"constant","name":"Z_8","nameLocation":"1696:3:164","nodeType":"VariableDeclaration","scope":48999,"src":"1670:101:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48799,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1670:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af","id":48800,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"1702:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_1d5323a0459069924380ec43149545390349c2b2ebfd552095b7f4275eec0030","typeString":"literal_string hex\"9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af\""}},"visibility":"internal"},{"constant":true,"id":48804,"mutability":"constant","name":"Z_9","nameLocation":"1801:3:164","nodeType":"VariableDeclaration","scope":48999,"src":"1775:101:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48802,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1775:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"cefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0","id":48803,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"1807:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_48af3462fe073b70d13d1a2a12ff87942b28e34016741cda9a4410657e7da3cc","typeString":"literal_string hex\"cefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0\""}},"visibility":"internal"},{"constant":true,"id":48807,"mutability":"constant","name":"Z_10","nameLocation":"1906:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"1880:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48805,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1880:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5","id":48806,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"1913:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_5c174d174fd8079ab978e246171591e6daffb841490bd5dfa5599cf05691ad88","typeString":"literal_string hex\"f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5\""}},"visibility":"internal"},{"constant":true,"id":48810,"mutability":"constant","name":"Z_11","nameLocation":"2012:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"1986:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48808,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1986:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892","id":48809,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"2019:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_c3548ebce56adff37009b51f39cd2ca9c2c120a984385e026ac03ce7621a638e","typeString":"literal_string hex\"f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892\""}},"visibility":"internal"},{"constant":true,"id":48813,"mutability":"constant","name":"Z_12","nameLocation":"2118:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"2092:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48811,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2092:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c","id":48812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"2125:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_5f4c772934c7046fab75761a7c25f9abbf014ae596b8c3c9f77ac5728f933ff8","typeString":"literal_string hex\"3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c\""}},"visibility":"internal"},{"constant":true,"id":48816,"mutability":"constant","name":"Z_13","nameLocation":"2224:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"2198:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48814,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2198:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"c1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb","id":48815,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"2231:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_0587c21d2cd2ef279c66b69565df87a4a7bbf5d3c9d5458f140dd9808c027241","typeString":"literal_string hex\"c1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb\""}},"visibility":"internal"},{"constant":true,"id":48819,"mutability":"constant","name":"Z_14","nameLocation":"2330:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"2304:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48817,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2304:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc","id":48818,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"2337:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_4b2159c90895ebc71edc492280ad3aa657ac0c4f25d2054474bc65aba5403c07","typeString":"literal_string hex\"5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc\""}},"visibility":"internal"},{"constant":true,"id":48822,"mutability":"constant","name":"Z_15","nameLocation":"2436:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"2410:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48820,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2410:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"da7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2","id":48821,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"2443:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_83675985cce271673869509c5c4a050753af1ce06dd0923b78acaf379f4c87b8","typeString":"literal_string hex\"da7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2\""}},"visibility":"internal"},{"constant":true,"id":48825,"mutability":"constant","name":"Z_16","nameLocation":"2542:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"2516:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48823,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2516:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f","id":48824,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"2549:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_eb3ecd6a923a2ca7a82478773919e8fa1c332fc0236c5d7ac834313ded361f93","typeString":"literal_string hex\"2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f\""}},"visibility":"internal"},{"constant":true,"id":48828,"mutability":"constant","name":"Z_17","nameLocation":"2648:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"2622:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48826,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2622:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"e1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a","id":48827,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"2655:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_7a2f9cf2f54619a4cf3f8c72ae55337440224425095c75ea3df844a67243fa5d","typeString":"literal_string hex\"e1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a\""}},"visibility":"internal"},{"constant":true,"id":48831,"mutability":"constant","name":"Z_18","nameLocation":"2754:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"2728:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48829,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2728:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0","id":48830,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"2761:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_1a8f92cc54be0592b62bbad0b22ebfa5e03dad971d785f40c12b968f11c0f836","typeString":"literal_string hex\"5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0\""}},"visibility":"internal"},{"constant":true,"id":48834,"mutability":"constant","name":"Z_19","nameLocation":"2860:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"2834:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48832,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2834:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0","id":48833,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"2867:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_78719b183dd37fc0ea1bb20050fb0ced764156d497a2f836d3c210e74ecb1c94","typeString":"literal_string hex\"b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0\""}},"visibility":"internal"},{"constant":true,"id":48837,"mutability":"constant","name":"Z_20","nameLocation":"2966:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"2940:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48835,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2940:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2","id":48836,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"2973:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_527be2751a0b3c3deddf99d9f8266fb3accbbc16ea7a48222afbddfee2280516","typeString":"literal_string hex\"c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2\""}},"visibility":"internal"},{"constant":true,"id":48840,"mutability":"constant","name":"Z_21","nameLocation":"3072:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"3046:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48838,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3046:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9","id":48839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"3079:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_784a2771a8619804dcba6b8284b4dbed5f90a1ed4dce838bb393b322fb372c4f","typeString":"literal_string hex\"f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9\""}},"visibility":"internal"},{"constant":true,"id":48843,"mutability":"constant","name":"Z_22","nameLocation":"3178:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"3152:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48841,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3152:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377","id":48842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"3185:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_a5634761ac0cfb55aa6247b865dc6bc6d9d3eb556a16aabebe1c34e7de502c69","typeString":"literal_string hex\"5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377\""}},"visibility":"internal"},{"constant":true,"id":48846,"mutability":"constant","name":"Z_23","nameLocation":"3284:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"3258:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48844,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3258:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652","id":48845,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"3291:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_cd98951fedbfc42f1fb5317666c484281e49037f2d8eb6c4469364c06d75c987","typeString":"literal_string hex\"4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652\""}},"visibility":"internal"},{"constant":true,"id":48849,"mutability":"constant","name":"Z_24","nameLocation":"3390:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"3364:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48847,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3364:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef","id":48848,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"3397:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_b4b332ceeb49e6991b4b7134d1f6fd092654bf71ce334434874c303f9f1a34e7","typeString":"literal_string hex\"cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef\""}},"visibility":"internal"},{"constant":true,"id":48852,"mutability":"constant","name":"Z_25","nameLocation":"3496:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"3470:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48850,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3470:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d","id":48851,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"3503:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_8001000bbd17cde3e9fb9b4992ee1f2b1ed0598438b04da6c8f62bca12ec4b0c","typeString":"literal_string hex\"0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d\""}},"visibility":"internal"},{"constant":true,"id":48855,"mutability":"constant","name":"Z_26","nameLocation":"3602:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"3576:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48853,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3576:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"b8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0","id":48854,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"3609:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_541c76a9049ba531f95c3f79fb6342eca21168a7b74074440b51583a26f56a70","typeString":"literal_string hex\"b8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0\""}},"visibility":"internal"},{"constant":true,"id":48858,"mutability":"constant","name":"Z_27","nameLocation":"3708:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"3682:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48856,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3682:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e","id":48857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"3715:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_dae8fdae3cc84b68988c7bca6ba61d0ae2c9be491f7c3051608d3e516006075d","typeString":"literal_string hex\"838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e\""}},"visibility":"internal"},{"constant":true,"id":48861,"mutability":"constant","name":"Z_28","nameLocation":"3814:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"3788:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48859,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3788:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e","id":48860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"3821:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_259e415d06018dcefd2e0342dc290c04407e8ed3c98537389bdb6a5d8d726ef7","typeString":"literal_string hex\"662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e\""}},"visibility":"internal"},{"constant":true,"id":48864,"mutability":"constant","name":"Z_29","nameLocation":"3920:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"3894:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48862,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3894:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322","id":48863,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"3927:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_d3fa823e6310ab854232189332cb9594c4f543d73874e3b962c9bd660f9d86da","typeString":"literal_string hex\"388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322\""}},"visibility":"internal"},{"constant":true,"id":48867,"mutability":"constant","name":"Z_30","nameLocation":"4026:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"4000:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48865,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4000:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735","id":48866,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"4033:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_d154b8198b91b838823a12eb72943f8b46de8bbbcb07b7f7b7610422e6ffa62e","typeString":"literal_string hex\"93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735\""}},"visibility":"internal"},{"constant":true,"id":48870,"mutability":"constant","name":"Z_31","nameLocation":"4132:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"4106:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48868,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4106:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9","id":48869,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"4139:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_8d8c7ed122f6b6813365bcd16ddbf5ddd1894be3beb9286fb30646e66719c8b6","typeString":"literal_string hex\"8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9\""}},"visibility":"internal"},{"constant":true,"id":48873,"mutability":"constant","name":"Z_32","nameLocation":"4238:4:164","nodeType":"VariableDeclaration","scope":48999,"src":"4212:102:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48871,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4212:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757","id":48872,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"4245:69:164","typeDescriptions":{"typeIdentifier":"t_stringliteral_ac8bb11d065b4cf745ff003a247bee5632ec1636ab3dd136695386a4fc2fa122","typeString":"literal_string hex\"27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757\""}},"visibility":"internal"},{"canonicalName":"MerkleLib.Tree","id":48880,"members":[{"constant":false,"id":48877,"mutability":"mutable","name":"branch","nameLocation":"4547:6:164","nodeType":"VariableDeclaration","scope":48880,"src":"4527:26:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_storage_ptr","typeString":"bytes32[32]"},"typeName":{"baseType":{"id":48874,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4527:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":48876,"length":{"id":48875,"name":"TREE_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48766,"src":"4535:10:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"ArrayTypeName","src":"4527:19:164","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_storage_ptr","typeString":"bytes32[32]"}},"visibility":"internal"},{"constant":false,"id":48879,"mutability":"mutable","name":"count","nameLocation":"4567:5:164","nodeType":"VariableDeclaration","scope":48880,"src":"4559:13:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48878,"name":"uint256","nodeType":"ElementaryTypeName","src":"4559:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Tree","nameLocation":"4516:4:164","nodeType":"StructDefinition","scope":48999,"src":"4509:68:164","visibility":"public"},{"body":{"id":48955,"nodeType":"Block","src":"4982:1249:164","statements":[{"assignments":[48893],"declarations":[{"constant":false,"id":48893,"mutability":"mutable","name":"size","nameLocation":"5093:4:164","nodeType":"VariableDeclaration","scope":48955,"src":"5085:12:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48892,"name":"uint256","nodeType":"ElementaryTypeName","src":"5085:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":48897,"initialValue":{"id":48896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5100:12:164","subExpression":{"expression":{"id":48894,"name":"tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48884,"src":"5102:4:164","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_memory_ptr","typeString":"struct MerkleLib.Tree memory"}},"id":48895,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5107:5:164","memberName":"count","nodeType":"MemberAccess","referencedDeclaration":48879,"src":"5102:10:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5085:27:164"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48898,"name":"size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48893,"src":"5122:4:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":48899,"name":"MAX_LEAVES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48773,"src":"5129:10:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5122:17:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":48904,"nodeType":"IfStatement","src":"5118:60:164","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":48901,"name":"MerkleLib__insert_treeIsFull","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48763,"src":"5148:28:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":48902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5148:30:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48903,"nodeType":"RevertStatement","src":"5141:37:164"}},{"body":{"id":48950,"nodeType":"Block","src":"5441:593:164","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48911,"name":"size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48893,"src":"5552:4:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":48912,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5559:1:164","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5552:8:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":48914,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5551:10:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":48915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5565:1:164","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5551:15:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":48928,"nodeType":"IfStatement","src":"5547:202:164","trueBody":{"id":48927,"nodeType":"Block","src":"5568:181:164","statements":[{"expression":{"id":48923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":48917,"name":"tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48884,"src":"5698:4:164","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_memory_ptr","typeString":"struct MerkleLib.Tree memory"}},"id":48920,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5703:6:164","memberName":"branch","nodeType":"MemberAccess","referencedDeclaration":48877,"src":"5698:11:164","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_memory_ptr","typeString":"bytes32[32] memory"}},"id":48921,"indexExpression":{"id":48919,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48906,"src":"5710:1:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5698:14:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":48922,"name":"node","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48886,"src":"5715:4:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5698:21:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":48924,"nodeType":"ExpressionStatement","src":"5698:21:164"},{"expression":{"id":48925,"name":"tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48884,"src":"5736:4:164","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_memory_ptr","typeString":"struct MerkleLib.Tree memory"}},"functionReturnParameters":48891,"id":48926,"nodeType":"Return","src":"5729:11:164"}]}},{"expression":{"id":48940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":48929,"name":"node","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48886,"src":"5853:4:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"baseExpression":{"expression":{"id":48933,"name":"tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48884,"src":"5887:4:164","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_memory_ptr","typeString":"struct MerkleLib.Tree memory"}},"id":48934,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5892:6:164","memberName":"branch","nodeType":"MemberAccess","referencedDeclaration":48877,"src":"5887:11:164","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_memory_ptr","typeString":"bytes32[32] memory"}},"id":48936,"indexExpression":{"id":48935,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48906,"src":"5899:1:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5887:14:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":48937,"name":"node","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48886,"src":"5903:4:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":48931,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5870:3:164","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":48932,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5874:12:164","memberName":"encodePacked","nodeType":"MemberAccess","src":"5870:16:164","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":48938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5870:38:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":48930,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5860:9:164","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":48939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5860:49:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5853:56:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":48941,"nodeType":"ExpressionStatement","src":"5853:56:164"},{"expression":{"id":48944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":48942,"name":"size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48893,"src":"5917:4:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"31","id":48943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5926:1:164","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5917:10:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48945,"nodeType":"ExpressionStatement","src":"5917:10:164"},{"id":48949,"nodeType":"UncheckedBlock","src":"5996:32:164","statements":[{"expression":{"id":48947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"6016:3:164","subExpression":{"id":48946,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48906,"src":"6018:1:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48948,"nodeType":"ExpressionStatement","src":"6016:3:164"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48908,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48906,"src":"5423:1:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":48909,"name":"TREE_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48766,"src":"5427:10:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5423:14:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":48951,"initializationExpression":{"assignments":[48906],"declarations":[{"constant":false,"id":48906,"mutability":"mutable","name":"i","nameLocation":"5420:1:164","nodeType":"VariableDeclaration","scope":48951,"src":"5412:9:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48905,"name":"uint256","nodeType":"ElementaryTypeName","src":"5412:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":48907,"nodeType":"VariableDeclarationStatement","src":"5412:9:164"},"nodeType":"ForStatement","src":"5407:627:164"},{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":48952,"name":"MerkleLib__insert_treeIsFull","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48763,"src":"6196:28:164","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":48953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6196:30:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48954,"nodeType":"RevertStatement","src":"6189:37:164"}]},"documentation":{"id":48881,"nodeType":"StructuredDocumentation","src":"4621:274:164","text":" @notice Inserts a given node (leaf) into merkle tree. Operates on an in-memory tree and\n returns an updated version of that tree.\n @dev Reverts if the tree is already full.\n @param node Element to insert into tree.\n @return Tree Updated tree.*"},"id":48956,"implemented":true,"kind":"function","modifiers":[],"name":"insert","nameLocation":"4907:6:164","nodeType":"FunctionDefinition","parameters":{"id":48887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48884,"mutability":"mutable","name":"tree","nameLocation":"4926:4:164","nodeType":"VariableDeclaration","scope":48956,"src":"4914:16:164","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_memory_ptr","typeString":"struct MerkleLib.Tree"},"typeName":{"id":48883,"nodeType":"UserDefinedTypeName","pathNode":{"id":48882,"name":"Tree","nameLocations":["4914:4:164"],"nodeType":"IdentifierPath","referencedDeclaration":48880,"src":"4914:4:164"},"referencedDeclaration":48880,"src":"4914:4:164","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage_ptr","typeString":"struct MerkleLib.Tree"}},"visibility":"internal"},{"constant":false,"id":48886,"mutability":"mutable","name":"node","nameLocation":"4940:4:164","nodeType":"VariableDeclaration","scope":48956,"src":"4932:12:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48885,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4932:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4913:32:164"},"returnParameters":{"id":48891,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48890,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48956,"src":"4969:11:164","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_memory_ptr","typeString":"struct MerkleLib.Tree"},"typeName":{"id":48889,"nodeType":"UserDefinedTypeName","pathNode":{"id":48888,"name":"Tree","nameLocations":["4969:4:164"],"nodeType":"IdentifierPath","referencedDeclaration":48880,"src":"4969:4:164"},"referencedDeclaration":48880,"src":"4969:4:164","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage_ptr","typeString":"struct MerkleLib.Tree"}},"visibility":"internal"}],"src":"4968:13:164"},"scope":48999,"src":"4898:1333:164","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":48981,"nodeType":"Block","src":"6454:17992:164","statements":[{"assignments":[48966],"declarations":[{"constant":false,"id":48966,"mutability":"mutable","name":"_index","nameLocation":"6468:6:164","nodeType":"VariableDeclaration","scope":48981,"src":"6460:14:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48965,"name":"uint256","nodeType":"ElementaryTypeName","src":"6460:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":48969,"initialValue":{"expression":{"id":48967,"name":"tree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48960,"src":"6477:4:164","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage_ptr","typeString":"struct MerkleLib.Tree storage pointer"}},"id":48968,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6482:5:164","memberName":"count","nodeType":"MemberAccess","referencedDeclaration":48879,"src":"6477:10:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6460:27:164"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48970,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48966,"src":"6498:6:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":48971,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6508:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6498:11:164","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":48976,"nodeType":"IfStatement","src":"6494:43:164","trueBody":{"id":48975,"nodeType":"Block","src":"6511:26:164","statements":[{"expression":{"id":48973,"name":"Z_32","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48873,"src":"6526:4:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":48964,"id":48974,"nodeType":"Return","src":"6519:11:164"}]}},{"assignments":[48978],"declarations":[{"constant":false,"id":48978,"mutability":"mutable","name":"i","nameLocation":"6551:1:164","nodeType":"VariableDeclaration","scope":48981,"src":"6543:9:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48977,"name":"uint256","nodeType":"ElementaryTypeName","src":"6543:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":48979,"nodeType":"VariableDeclarationStatement","src":"6543:9:164"},{"AST":{"nodeType":"YulBlock","src":"6567:17875:164","statements":[{"nodeType":"YulVariableDeclaration","src":"6575:26:164","value":{"name":"tree.slot","nodeType":"YulIdentifier","src":"6592:9:164"},"variables":[{"name":"TREE_SLOT","nodeType":"YulTypedName","src":"6579:9:164","type":""}]},{"body":{"nodeType":"YulBlock","src":"6640:17796:164","statements":[{"body":{"nodeType":"YulBlock","src":"6685:6813:164","statements":[{"body":{"nodeType":"YulBlock","src":"6715:144:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6736:1:164","type":"","value":"0"},{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"6745:9:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"6739:5:164"},"nodeType":"YulFunctionCall","src":"6739:16:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6729:6:164"},"nodeType":"YulFunctionCall","src":"6729:27:164"},"nodeType":"YulExpressionStatement","src":"6729:27:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6776:4:164","type":"","value":"0x20"},{"name":"Z_0","nodeType":"YulIdentifier","src":"6782:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6769:6:164"},"nodeType":"YulFunctionCall","src":"6769:17:164"},"nodeType":"YulExpressionStatement","src":"6769:17:164"},{"nodeType":"YulAssignment","src":"6799:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6821:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6824:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"6811:9:164"},"nodeType":"YulFunctionCall","src":"6811:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"6799:8:164"}]},{"nodeType":"YulBreak","src":"6842:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"6704:6:164"},{"kind":"number","nodeType":"YulLiteral","src":"6712:1:164","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6700:3:164"},"nodeType":"YulFunctionCall","src":"6700:14:164"},"nodeType":"YulIf","src":"6697:162:164"},{"body":{"nodeType":"YulBlock","src":"6897:171:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6918:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"6931:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"6942:1:164","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6927:3:164"},"nodeType":"YulFunctionCall","src":"6927:17:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"6921:5:164"},"nodeType":"YulFunctionCall","src":"6921:24:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6911:6:164"},"nodeType":"YulFunctionCall","src":"6911:35:164"},"nodeType":"YulExpressionStatement","src":"6911:35:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6966:4:164","type":"","value":"0x20"},{"name":"Z_1","nodeType":"YulIdentifier","src":"6972:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6959:6:164"},"nodeType":"YulFunctionCall","src":"6959:17:164"},"nodeType":"YulExpressionStatement","src":"6959:17:164"},{"nodeType":"YulAssignment","src":"6989:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7011:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7014:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"7001:9:164"},"nodeType":"YulFunctionCall","src":"7001:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"6989:8:164"}]},{"nodeType":"YulAssignment","src":"7032:6:164","value":{"kind":"number","nodeType":"YulLiteral","src":"7037:1:164","type":"","value":"1"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"7032:1:164"}]},{"nodeType":"YulBreak","src":"7051:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"6878:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6890:1:164","type":"","value":"1"},{"kind":"number","nodeType":"YulLiteral","src":"6893:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6886:3:164"},"nodeType":"YulFunctionCall","src":"6886:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6874:3:164"},"nodeType":"YulFunctionCall","src":"6874:22:164"},"nodeType":"YulIf","src":"6871:197:164"},{"body":{"nodeType":"YulBlock","src":"7106:171:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7127:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"7140:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"7151:1:164","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7136:3:164"},"nodeType":"YulFunctionCall","src":"7136:17:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"7130:5:164"},"nodeType":"YulFunctionCall","src":"7130:24:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7120:6:164"},"nodeType":"YulFunctionCall","src":"7120:35:164"},"nodeType":"YulExpressionStatement","src":"7120:35:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7175:4:164","type":"","value":"0x20"},{"name":"Z_2","nodeType":"YulIdentifier","src":"7181:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7168:6:164"},"nodeType":"YulFunctionCall","src":"7168:17:164"},"nodeType":"YulExpressionStatement","src":"7168:17:164"},{"nodeType":"YulAssignment","src":"7198:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7220:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7223:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"7210:9:164"},"nodeType":"YulFunctionCall","src":"7210:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"7198:8:164"}]},{"nodeType":"YulAssignment","src":"7241:6:164","value":{"kind":"number","nodeType":"YulLiteral","src":"7246:1:164","type":"","value":"2"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"7241:1:164"}]},{"nodeType":"YulBreak","src":"7260:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"7087:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7099:1:164","type":"","value":"2"},{"kind":"number","nodeType":"YulLiteral","src":"7102:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7095:3:164"},"nodeType":"YulFunctionCall","src":"7095:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7083:3:164"},"nodeType":"YulFunctionCall","src":"7083:22:164"},"nodeType":"YulIf","src":"7080:197:164"},{"body":{"nodeType":"YulBlock","src":"7315:171:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7336:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"7349:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"7360:1:164","type":"","value":"3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7345:3:164"},"nodeType":"YulFunctionCall","src":"7345:17:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"7339:5:164"},"nodeType":"YulFunctionCall","src":"7339:24:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7329:6:164"},"nodeType":"YulFunctionCall","src":"7329:35:164"},"nodeType":"YulExpressionStatement","src":"7329:35:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7384:4:164","type":"","value":"0x20"},{"name":"Z_3","nodeType":"YulIdentifier","src":"7390:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7377:6:164"},"nodeType":"YulFunctionCall","src":"7377:17:164"},"nodeType":"YulExpressionStatement","src":"7377:17:164"},{"nodeType":"YulAssignment","src":"7407:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7429:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7432:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"7419:9:164"},"nodeType":"YulFunctionCall","src":"7419:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"7407:8:164"}]},{"nodeType":"YulAssignment","src":"7450:6:164","value":{"kind":"number","nodeType":"YulLiteral","src":"7455:1:164","type":"","value":"3"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"7450:1:164"}]},{"nodeType":"YulBreak","src":"7469:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"7296:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7308:1:164","type":"","value":"3"},{"kind":"number","nodeType":"YulLiteral","src":"7311:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7304:3:164"},"nodeType":"YulFunctionCall","src":"7304:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7292:3:164"},"nodeType":"YulFunctionCall","src":"7292:22:164"},"nodeType":"YulIf","src":"7289:197:164"},{"body":{"nodeType":"YulBlock","src":"7524:171:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7545:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"7558:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"7569:1:164","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7554:3:164"},"nodeType":"YulFunctionCall","src":"7554:17:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"7548:5:164"},"nodeType":"YulFunctionCall","src":"7548:24:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7538:6:164"},"nodeType":"YulFunctionCall","src":"7538:35:164"},"nodeType":"YulExpressionStatement","src":"7538:35:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7593:4:164","type":"","value":"0x20"},{"name":"Z_4","nodeType":"YulIdentifier","src":"7599:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7586:6:164"},"nodeType":"YulFunctionCall","src":"7586:17:164"},"nodeType":"YulExpressionStatement","src":"7586:17:164"},{"nodeType":"YulAssignment","src":"7616:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7638:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7641:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"7628:9:164"},"nodeType":"YulFunctionCall","src":"7628:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"7616:8:164"}]},{"nodeType":"YulAssignment","src":"7659:6:164","value":{"kind":"number","nodeType":"YulLiteral","src":"7664:1:164","type":"","value":"4"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"7659:1:164"}]},{"nodeType":"YulBreak","src":"7678:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"7505:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7517:1:164","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7520:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7513:3:164"},"nodeType":"YulFunctionCall","src":"7513:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7501:3:164"},"nodeType":"YulFunctionCall","src":"7501:22:164"},"nodeType":"YulIf","src":"7498:197:164"},{"body":{"nodeType":"YulBlock","src":"7733:171:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7754:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"7767:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"7778:1:164","type":"","value":"5"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7763:3:164"},"nodeType":"YulFunctionCall","src":"7763:17:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"7757:5:164"},"nodeType":"YulFunctionCall","src":"7757:24:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7747:6:164"},"nodeType":"YulFunctionCall","src":"7747:35:164"},"nodeType":"YulExpressionStatement","src":"7747:35:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7802:4:164","type":"","value":"0x20"},{"name":"Z_5","nodeType":"YulIdentifier","src":"7808:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7795:6:164"},"nodeType":"YulFunctionCall","src":"7795:17:164"},"nodeType":"YulExpressionStatement","src":"7795:17:164"},{"nodeType":"YulAssignment","src":"7825:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7847:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7850:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"7837:9:164"},"nodeType":"YulFunctionCall","src":"7837:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"7825:8:164"}]},{"nodeType":"YulAssignment","src":"7868:6:164","value":{"kind":"number","nodeType":"YulLiteral","src":"7873:1:164","type":"","value":"5"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"7868:1:164"}]},{"nodeType":"YulBreak","src":"7887:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"7714:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7726:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"7729:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7722:3:164"},"nodeType":"YulFunctionCall","src":"7722:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7710:3:164"},"nodeType":"YulFunctionCall","src":"7710:22:164"},"nodeType":"YulIf","src":"7707:197:164"},{"body":{"nodeType":"YulBlock","src":"7942:171:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7963:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"7976:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"7987:1:164","type":"","value":"6"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7972:3:164"},"nodeType":"YulFunctionCall","src":"7972:17:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"7966:5:164"},"nodeType":"YulFunctionCall","src":"7966:24:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7956:6:164"},"nodeType":"YulFunctionCall","src":"7956:35:164"},"nodeType":"YulExpressionStatement","src":"7956:35:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8011:4:164","type":"","value":"0x20"},{"name":"Z_6","nodeType":"YulIdentifier","src":"8017:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8004:6:164"},"nodeType":"YulFunctionCall","src":"8004:17:164"},"nodeType":"YulExpressionStatement","src":"8004:17:164"},{"nodeType":"YulAssignment","src":"8034:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8056:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8059:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"8046:9:164"},"nodeType":"YulFunctionCall","src":"8046:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"8034:8:164"}]},{"nodeType":"YulAssignment","src":"8077:6:164","value":{"kind":"number","nodeType":"YulLiteral","src":"8082:1:164","type":"","value":"6"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"8077:1:164"}]},{"nodeType":"YulBreak","src":"8096:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"7923:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7935:1:164","type":"","value":"6"},{"kind":"number","nodeType":"YulLiteral","src":"7938:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7931:3:164"},"nodeType":"YulFunctionCall","src":"7931:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7919:3:164"},"nodeType":"YulFunctionCall","src":"7919:22:164"},"nodeType":"YulIf","src":"7916:197:164"},{"body":{"nodeType":"YulBlock","src":"8151:171:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8172:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"8185:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"8196:1:164","type":"","value":"7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8181:3:164"},"nodeType":"YulFunctionCall","src":"8181:17:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"8175:5:164"},"nodeType":"YulFunctionCall","src":"8175:24:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8165:6:164"},"nodeType":"YulFunctionCall","src":"8165:35:164"},"nodeType":"YulExpressionStatement","src":"8165:35:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8220:4:164","type":"","value":"0x20"},{"name":"Z_7","nodeType":"YulIdentifier","src":"8226:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8213:6:164"},"nodeType":"YulFunctionCall","src":"8213:17:164"},"nodeType":"YulExpressionStatement","src":"8213:17:164"},{"nodeType":"YulAssignment","src":"8243:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8265:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8268:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"8255:9:164"},"nodeType":"YulFunctionCall","src":"8255:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"8243:8:164"}]},{"nodeType":"YulAssignment","src":"8286:6:164","value":{"kind":"number","nodeType":"YulLiteral","src":"8291:1:164","type":"","value":"7"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"8286:1:164"}]},{"nodeType":"YulBreak","src":"8305:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"8132:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8144:1:164","type":"","value":"7"},{"kind":"number","nodeType":"YulLiteral","src":"8147:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8140:3:164"},"nodeType":"YulFunctionCall","src":"8140:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8128:3:164"},"nodeType":"YulFunctionCall","src":"8128:22:164"},"nodeType":"YulIf","src":"8125:197:164"},{"body":{"nodeType":"YulBlock","src":"8360:171:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8381:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"8394:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"8405:1:164","type":"","value":"8"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8390:3:164"},"nodeType":"YulFunctionCall","src":"8390:17:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"8384:5:164"},"nodeType":"YulFunctionCall","src":"8384:24:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8374:6:164"},"nodeType":"YulFunctionCall","src":"8374:35:164"},"nodeType":"YulExpressionStatement","src":"8374:35:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8429:4:164","type":"","value":"0x20"},{"name":"Z_8","nodeType":"YulIdentifier","src":"8435:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8422:6:164"},"nodeType":"YulFunctionCall","src":"8422:17:164"},"nodeType":"YulExpressionStatement","src":"8422:17:164"},{"nodeType":"YulAssignment","src":"8452:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8474:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8477:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"8464:9:164"},"nodeType":"YulFunctionCall","src":"8464:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"8452:8:164"}]},{"nodeType":"YulAssignment","src":"8495:6:164","value":{"kind":"number","nodeType":"YulLiteral","src":"8500:1:164","type":"","value":"8"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"8495:1:164"}]},{"nodeType":"YulBreak","src":"8514:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"8341:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8353:1:164","type":"","value":"8"},{"kind":"number","nodeType":"YulLiteral","src":"8356:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8349:3:164"},"nodeType":"YulFunctionCall","src":"8349:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8337:3:164"},"nodeType":"YulFunctionCall","src":"8337:22:164"},"nodeType":"YulIf","src":"8334:197:164"},{"body":{"nodeType":"YulBlock","src":"8569:171:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8590:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"8603:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"8614:1:164","type":"","value":"9"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8599:3:164"},"nodeType":"YulFunctionCall","src":"8599:17:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"8593:5:164"},"nodeType":"YulFunctionCall","src":"8593:24:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8583:6:164"},"nodeType":"YulFunctionCall","src":"8583:35:164"},"nodeType":"YulExpressionStatement","src":"8583:35:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8638:4:164","type":"","value":"0x20"},{"name":"Z_9","nodeType":"YulIdentifier","src":"8644:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8631:6:164"},"nodeType":"YulFunctionCall","src":"8631:17:164"},"nodeType":"YulExpressionStatement","src":"8631:17:164"},{"nodeType":"YulAssignment","src":"8661:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8683:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8686:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"8673:9:164"},"nodeType":"YulFunctionCall","src":"8673:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"8661:8:164"}]},{"nodeType":"YulAssignment","src":"8704:6:164","value":{"kind":"number","nodeType":"YulLiteral","src":"8709:1:164","type":"","value":"9"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"8704:1:164"}]},{"nodeType":"YulBreak","src":"8723:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"8550:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8562:1:164","type":"","value":"9"},{"kind":"number","nodeType":"YulLiteral","src":"8565:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8558:3:164"},"nodeType":"YulFunctionCall","src":"8558:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8546:3:164"},"nodeType":"YulFunctionCall","src":"8546:22:164"},"nodeType":"YulIf","src":"8543:197:164"},{"body":{"nodeType":"YulBlock","src":"8779:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8800:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"8813:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"8824:2:164","type":"","value":"10"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8809:3:164"},"nodeType":"YulFunctionCall","src":"8809:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"8803:5:164"},"nodeType":"YulFunctionCall","src":"8803:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8793:6:164"},"nodeType":"YulFunctionCall","src":"8793:36:164"},"nodeType":"YulExpressionStatement","src":"8793:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8849:4:164","type":"","value":"0x20"},{"name":"Z_10","nodeType":"YulIdentifier","src":"8855:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8842:6:164"},"nodeType":"YulFunctionCall","src":"8842:18:164"},"nodeType":"YulExpressionStatement","src":"8842:18:164"},{"nodeType":"YulAssignment","src":"8873:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8895:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8898:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"8885:9:164"},"nodeType":"YulFunctionCall","src":"8885:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"8873:8:164"}]},{"nodeType":"YulAssignment","src":"8916:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"8921:2:164","type":"","value":"10"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"8916:1:164"}]},{"nodeType":"YulBreak","src":"8936:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"8759:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8771:2:164","type":"","value":"10"},{"kind":"number","nodeType":"YulLiteral","src":"8775:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8767:3:164"},"nodeType":"YulFunctionCall","src":"8767:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8755:3:164"},"nodeType":"YulFunctionCall","src":"8755:23:164"},"nodeType":"YulIf","src":"8752:201:164"},{"body":{"nodeType":"YulBlock","src":"8992:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9013:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"9026:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"9037:2:164","type":"","value":"11"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9022:3:164"},"nodeType":"YulFunctionCall","src":"9022:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"9016:5:164"},"nodeType":"YulFunctionCall","src":"9016:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9006:6:164"},"nodeType":"YulFunctionCall","src":"9006:36:164"},"nodeType":"YulExpressionStatement","src":"9006:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9062:4:164","type":"","value":"0x20"},{"name":"Z_11","nodeType":"YulIdentifier","src":"9068:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9055:6:164"},"nodeType":"YulFunctionCall","src":"9055:18:164"},"nodeType":"YulExpressionStatement","src":"9055:18:164"},{"nodeType":"YulAssignment","src":"9086:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9108:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9111:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"9098:9:164"},"nodeType":"YulFunctionCall","src":"9098:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"9086:8:164"}]},{"nodeType":"YulAssignment","src":"9129:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"9134:2:164","type":"","value":"11"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"9129:1:164"}]},{"nodeType":"YulBreak","src":"9149:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"8972:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8984:2:164","type":"","value":"11"},{"kind":"number","nodeType":"YulLiteral","src":"8988:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8980:3:164"},"nodeType":"YulFunctionCall","src":"8980:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8968:3:164"},"nodeType":"YulFunctionCall","src":"8968:23:164"},"nodeType":"YulIf","src":"8965:201:164"},{"body":{"nodeType":"YulBlock","src":"9205:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9226:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"9239:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"9250:2:164","type":"","value":"12"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9235:3:164"},"nodeType":"YulFunctionCall","src":"9235:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"9229:5:164"},"nodeType":"YulFunctionCall","src":"9229:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9219:6:164"},"nodeType":"YulFunctionCall","src":"9219:36:164"},"nodeType":"YulExpressionStatement","src":"9219:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9275:4:164","type":"","value":"0x20"},{"name":"Z_12","nodeType":"YulIdentifier","src":"9281:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9268:6:164"},"nodeType":"YulFunctionCall","src":"9268:18:164"},"nodeType":"YulExpressionStatement","src":"9268:18:164"},{"nodeType":"YulAssignment","src":"9299:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9321:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9324:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"9311:9:164"},"nodeType":"YulFunctionCall","src":"9311:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"9299:8:164"}]},{"nodeType":"YulAssignment","src":"9342:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"9347:2:164","type":"","value":"12"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"9342:1:164"}]},{"nodeType":"YulBreak","src":"9362:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"9185:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9197:2:164","type":"","value":"12"},{"kind":"number","nodeType":"YulLiteral","src":"9201:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9193:3:164"},"nodeType":"YulFunctionCall","src":"9193:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9181:3:164"},"nodeType":"YulFunctionCall","src":"9181:23:164"},"nodeType":"YulIf","src":"9178:201:164"},{"body":{"nodeType":"YulBlock","src":"9418:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9439:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"9452:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"9463:2:164","type":"","value":"13"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9448:3:164"},"nodeType":"YulFunctionCall","src":"9448:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"9442:5:164"},"nodeType":"YulFunctionCall","src":"9442:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9432:6:164"},"nodeType":"YulFunctionCall","src":"9432:36:164"},"nodeType":"YulExpressionStatement","src":"9432:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9488:4:164","type":"","value":"0x20"},{"name":"Z_13","nodeType":"YulIdentifier","src":"9494:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9481:6:164"},"nodeType":"YulFunctionCall","src":"9481:18:164"},"nodeType":"YulExpressionStatement","src":"9481:18:164"},{"nodeType":"YulAssignment","src":"9512:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9534:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9537:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"9524:9:164"},"nodeType":"YulFunctionCall","src":"9524:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"9512:8:164"}]},{"nodeType":"YulAssignment","src":"9555:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"9560:2:164","type":"","value":"13"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"9555:1:164"}]},{"nodeType":"YulBreak","src":"9575:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"9398:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9410:2:164","type":"","value":"13"},{"kind":"number","nodeType":"YulLiteral","src":"9414:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9406:3:164"},"nodeType":"YulFunctionCall","src":"9406:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9394:3:164"},"nodeType":"YulFunctionCall","src":"9394:23:164"},"nodeType":"YulIf","src":"9391:201:164"},{"body":{"nodeType":"YulBlock","src":"9631:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9652:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"9665:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"9676:2:164","type":"","value":"14"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9661:3:164"},"nodeType":"YulFunctionCall","src":"9661:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"9655:5:164"},"nodeType":"YulFunctionCall","src":"9655:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9645:6:164"},"nodeType":"YulFunctionCall","src":"9645:36:164"},"nodeType":"YulExpressionStatement","src":"9645:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9701:4:164","type":"","value":"0x20"},{"name":"Z_14","nodeType":"YulIdentifier","src":"9707:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9694:6:164"},"nodeType":"YulFunctionCall","src":"9694:18:164"},"nodeType":"YulExpressionStatement","src":"9694:18:164"},{"nodeType":"YulAssignment","src":"9725:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9747:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9750:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"9737:9:164"},"nodeType":"YulFunctionCall","src":"9737:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"9725:8:164"}]},{"nodeType":"YulAssignment","src":"9768:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"9773:2:164","type":"","value":"14"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"9768:1:164"}]},{"nodeType":"YulBreak","src":"9788:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"9611:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9623:2:164","type":"","value":"14"},{"kind":"number","nodeType":"YulLiteral","src":"9627:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9619:3:164"},"nodeType":"YulFunctionCall","src":"9619:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9607:3:164"},"nodeType":"YulFunctionCall","src":"9607:23:164"},"nodeType":"YulIf","src":"9604:201:164"},{"body":{"nodeType":"YulBlock","src":"9844:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9865:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"9878:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"9889:2:164","type":"","value":"15"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9874:3:164"},"nodeType":"YulFunctionCall","src":"9874:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"9868:5:164"},"nodeType":"YulFunctionCall","src":"9868:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9858:6:164"},"nodeType":"YulFunctionCall","src":"9858:36:164"},"nodeType":"YulExpressionStatement","src":"9858:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9914:4:164","type":"","value":"0x20"},{"name":"Z_15","nodeType":"YulIdentifier","src":"9920:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9907:6:164"},"nodeType":"YulFunctionCall","src":"9907:18:164"},"nodeType":"YulExpressionStatement","src":"9907:18:164"},{"nodeType":"YulAssignment","src":"9938:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9960:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9963:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"9950:9:164"},"nodeType":"YulFunctionCall","src":"9950:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"9938:8:164"}]},{"nodeType":"YulAssignment","src":"9981:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"9986:2:164","type":"","value":"15"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"9981:1:164"}]},{"nodeType":"YulBreak","src":"10001:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"9824:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9836:2:164","type":"","value":"15"},{"kind":"number","nodeType":"YulLiteral","src":"9840:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9832:3:164"},"nodeType":"YulFunctionCall","src":"9832:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9820:3:164"},"nodeType":"YulFunctionCall","src":"9820:23:164"},"nodeType":"YulIf","src":"9817:201:164"},{"body":{"nodeType":"YulBlock","src":"10057:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10078:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"10091:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"10102:2:164","type":"","value":"16"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10087:3:164"},"nodeType":"YulFunctionCall","src":"10087:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"10081:5:164"},"nodeType":"YulFunctionCall","src":"10081:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10071:6:164"},"nodeType":"YulFunctionCall","src":"10071:36:164"},"nodeType":"YulExpressionStatement","src":"10071:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10127:4:164","type":"","value":"0x20"},{"name":"Z_16","nodeType":"YulIdentifier","src":"10133:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10120:6:164"},"nodeType":"YulFunctionCall","src":"10120:18:164"},"nodeType":"YulExpressionStatement","src":"10120:18:164"},{"nodeType":"YulAssignment","src":"10151:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10173:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10176:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"10163:9:164"},"nodeType":"YulFunctionCall","src":"10163:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"10151:8:164"}]},{"nodeType":"YulAssignment","src":"10194:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"10199:2:164","type":"","value":"16"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"10194:1:164"}]},{"nodeType":"YulBreak","src":"10214:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"10037:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10049:2:164","type":"","value":"16"},{"kind":"number","nodeType":"YulLiteral","src":"10053:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10045:3:164"},"nodeType":"YulFunctionCall","src":"10045:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10033:3:164"},"nodeType":"YulFunctionCall","src":"10033:23:164"},"nodeType":"YulIf","src":"10030:201:164"},{"body":{"nodeType":"YulBlock","src":"10270:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10291:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"10304:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"10315:2:164","type":"","value":"17"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10300:3:164"},"nodeType":"YulFunctionCall","src":"10300:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"10294:5:164"},"nodeType":"YulFunctionCall","src":"10294:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10284:6:164"},"nodeType":"YulFunctionCall","src":"10284:36:164"},"nodeType":"YulExpressionStatement","src":"10284:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10340:4:164","type":"","value":"0x20"},{"name":"Z_17","nodeType":"YulIdentifier","src":"10346:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10333:6:164"},"nodeType":"YulFunctionCall","src":"10333:18:164"},"nodeType":"YulExpressionStatement","src":"10333:18:164"},{"nodeType":"YulAssignment","src":"10364:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10386:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10389:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"10376:9:164"},"nodeType":"YulFunctionCall","src":"10376:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"10364:8:164"}]},{"nodeType":"YulAssignment","src":"10407:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"10412:2:164","type":"","value":"17"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"10407:1:164"}]},{"nodeType":"YulBreak","src":"10427:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"10250:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10262:2:164","type":"","value":"17"},{"kind":"number","nodeType":"YulLiteral","src":"10266:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10258:3:164"},"nodeType":"YulFunctionCall","src":"10258:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10246:3:164"},"nodeType":"YulFunctionCall","src":"10246:23:164"},"nodeType":"YulIf","src":"10243:201:164"},{"body":{"nodeType":"YulBlock","src":"10483:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10504:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"10517:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"10528:2:164","type":"","value":"18"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10513:3:164"},"nodeType":"YulFunctionCall","src":"10513:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"10507:5:164"},"nodeType":"YulFunctionCall","src":"10507:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10497:6:164"},"nodeType":"YulFunctionCall","src":"10497:36:164"},"nodeType":"YulExpressionStatement","src":"10497:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10553:4:164","type":"","value":"0x20"},{"name":"Z_18","nodeType":"YulIdentifier","src":"10559:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10546:6:164"},"nodeType":"YulFunctionCall","src":"10546:18:164"},"nodeType":"YulExpressionStatement","src":"10546:18:164"},{"nodeType":"YulAssignment","src":"10577:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10599:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10602:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"10589:9:164"},"nodeType":"YulFunctionCall","src":"10589:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"10577:8:164"}]},{"nodeType":"YulAssignment","src":"10620:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"10625:2:164","type":"","value":"18"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"10620:1:164"}]},{"nodeType":"YulBreak","src":"10640:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"10463:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10475:2:164","type":"","value":"18"},{"kind":"number","nodeType":"YulLiteral","src":"10479:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10471:3:164"},"nodeType":"YulFunctionCall","src":"10471:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10459:3:164"},"nodeType":"YulFunctionCall","src":"10459:23:164"},"nodeType":"YulIf","src":"10456:201:164"},{"body":{"nodeType":"YulBlock","src":"10696:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10717:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"10730:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"10741:2:164","type":"","value":"19"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10726:3:164"},"nodeType":"YulFunctionCall","src":"10726:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"10720:5:164"},"nodeType":"YulFunctionCall","src":"10720:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10710:6:164"},"nodeType":"YulFunctionCall","src":"10710:36:164"},"nodeType":"YulExpressionStatement","src":"10710:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10766:4:164","type":"","value":"0x20"},{"name":"Z_19","nodeType":"YulIdentifier","src":"10772:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10759:6:164"},"nodeType":"YulFunctionCall","src":"10759:18:164"},"nodeType":"YulExpressionStatement","src":"10759:18:164"},{"nodeType":"YulAssignment","src":"10790:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10812:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10815:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"10802:9:164"},"nodeType":"YulFunctionCall","src":"10802:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"10790:8:164"}]},{"nodeType":"YulAssignment","src":"10833:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"10838:2:164","type":"","value":"19"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"10833:1:164"}]},{"nodeType":"YulBreak","src":"10853:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"10676:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10688:2:164","type":"","value":"19"},{"kind":"number","nodeType":"YulLiteral","src":"10692:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10684:3:164"},"nodeType":"YulFunctionCall","src":"10684:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10672:3:164"},"nodeType":"YulFunctionCall","src":"10672:23:164"},"nodeType":"YulIf","src":"10669:201:164"},{"body":{"nodeType":"YulBlock","src":"10909:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10930:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"10943:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"10954:2:164","type":"","value":"20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10939:3:164"},"nodeType":"YulFunctionCall","src":"10939:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"10933:5:164"},"nodeType":"YulFunctionCall","src":"10933:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10923:6:164"},"nodeType":"YulFunctionCall","src":"10923:36:164"},"nodeType":"YulExpressionStatement","src":"10923:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10979:4:164","type":"","value":"0x20"},{"name":"Z_20","nodeType":"YulIdentifier","src":"10985:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10972:6:164"},"nodeType":"YulFunctionCall","src":"10972:18:164"},"nodeType":"YulExpressionStatement","src":"10972:18:164"},{"nodeType":"YulAssignment","src":"11003:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11025:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11028:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"11015:9:164"},"nodeType":"YulFunctionCall","src":"11015:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"11003:8:164"}]},{"nodeType":"YulAssignment","src":"11046:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"11051:2:164","type":"","value":"20"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"11046:1:164"}]},{"nodeType":"YulBreak","src":"11066:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"10889:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10901:2:164","type":"","value":"20"},{"kind":"number","nodeType":"YulLiteral","src":"10905:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10897:3:164"},"nodeType":"YulFunctionCall","src":"10897:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10885:3:164"},"nodeType":"YulFunctionCall","src":"10885:23:164"},"nodeType":"YulIf","src":"10882:201:164"},{"body":{"nodeType":"YulBlock","src":"11122:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11143:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"11156:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"11167:2:164","type":"","value":"21"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11152:3:164"},"nodeType":"YulFunctionCall","src":"11152:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"11146:5:164"},"nodeType":"YulFunctionCall","src":"11146:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11136:6:164"},"nodeType":"YulFunctionCall","src":"11136:36:164"},"nodeType":"YulExpressionStatement","src":"11136:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11192:4:164","type":"","value":"0x20"},{"name":"Z_21","nodeType":"YulIdentifier","src":"11198:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11185:6:164"},"nodeType":"YulFunctionCall","src":"11185:18:164"},"nodeType":"YulExpressionStatement","src":"11185:18:164"},{"nodeType":"YulAssignment","src":"11216:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11238:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11241:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"11228:9:164"},"nodeType":"YulFunctionCall","src":"11228:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"11216:8:164"}]},{"nodeType":"YulAssignment","src":"11259:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"11264:2:164","type":"","value":"21"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"11259:1:164"}]},{"nodeType":"YulBreak","src":"11279:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"11102:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11114:2:164","type":"","value":"21"},{"kind":"number","nodeType":"YulLiteral","src":"11118:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11110:3:164"},"nodeType":"YulFunctionCall","src":"11110:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11098:3:164"},"nodeType":"YulFunctionCall","src":"11098:23:164"},"nodeType":"YulIf","src":"11095:201:164"},{"body":{"nodeType":"YulBlock","src":"11335:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11356:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"11369:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"11380:2:164","type":"","value":"22"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11365:3:164"},"nodeType":"YulFunctionCall","src":"11365:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"11359:5:164"},"nodeType":"YulFunctionCall","src":"11359:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11349:6:164"},"nodeType":"YulFunctionCall","src":"11349:36:164"},"nodeType":"YulExpressionStatement","src":"11349:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11405:4:164","type":"","value":"0x20"},{"name":"Z_22","nodeType":"YulIdentifier","src":"11411:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11398:6:164"},"nodeType":"YulFunctionCall","src":"11398:18:164"},"nodeType":"YulExpressionStatement","src":"11398:18:164"},{"nodeType":"YulAssignment","src":"11429:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11451:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11454:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"11441:9:164"},"nodeType":"YulFunctionCall","src":"11441:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"11429:8:164"}]},{"nodeType":"YulAssignment","src":"11472:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"11477:2:164","type":"","value":"22"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"11472:1:164"}]},{"nodeType":"YulBreak","src":"11492:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"11315:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11327:2:164","type":"","value":"22"},{"kind":"number","nodeType":"YulLiteral","src":"11331:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11323:3:164"},"nodeType":"YulFunctionCall","src":"11323:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11311:3:164"},"nodeType":"YulFunctionCall","src":"11311:23:164"},"nodeType":"YulIf","src":"11308:201:164"},{"body":{"nodeType":"YulBlock","src":"11548:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11569:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"11582:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"11593:2:164","type":"","value":"23"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11578:3:164"},"nodeType":"YulFunctionCall","src":"11578:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"11572:5:164"},"nodeType":"YulFunctionCall","src":"11572:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11562:6:164"},"nodeType":"YulFunctionCall","src":"11562:36:164"},"nodeType":"YulExpressionStatement","src":"11562:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11618:4:164","type":"","value":"0x20"},{"name":"Z_23","nodeType":"YulIdentifier","src":"11624:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11611:6:164"},"nodeType":"YulFunctionCall","src":"11611:18:164"},"nodeType":"YulExpressionStatement","src":"11611:18:164"},{"nodeType":"YulAssignment","src":"11642:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11664:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11667:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"11654:9:164"},"nodeType":"YulFunctionCall","src":"11654:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"11642:8:164"}]},{"nodeType":"YulAssignment","src":"11685:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"11690:2:164","type":"","value":"23"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"11685:1:164"}]},{"nodeType":"YulBreak","src":"11705:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"11528:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11540:2:164","type":"","value":"23"},{"kind":"number","nodeType":"YulLiteral","src":"11544:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11536:3:164"},"nodeType":"YulFunctionCall","src":"11536:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11524:3:164"},"nodeType":"YulFunctionCall","src":"11524:23:164"},"nodeType":"YulIf","src":"11521:201:164"},{"body":{"nodeType":"YulBlock","src":"11761:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11782:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"11795:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"11806:2:164","type":"","value":"24"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11791:3:164"},"nodeType":"YulFunctionCall","src":"11791:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"11785:5:164"},"nodeType":"YulFunctionCall","src":"11785:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11775:6:164"},"nodeType":"YulFunctionCall","src":"11775:36:164"},"nodeType":"YulExpressionStatement","src":"11775:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11831:4:164","type":"","value":"0x20"},{"name":"Z_24","nodeType":"YulIdentifier","src":"11837:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11824:6:164"},"nodeType":"YulFunctionCall","src":"11824:18:164"},"nodeType":"YulExpressionStatement","src":"11824:18:164"},{"nodeType":"YulAssignment","src":"11855:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11877:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11880:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"11867:9:164"},"nodeType":"YulFunctionCall","src":"11867:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"11855:8:164"}]},{"nodeType":"YulAssignment","src":"11898:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"11903:2:164","type":"","value":"24"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"11898:1:164"}]},{"nodeType":"YulBreak","src":"11918:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"11741:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11753:2:164","type":"","value":"24"},{"kind":"number","nodeType":"YulLiteral","src":"11757:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11749:3:164"},"nodeType":"YulFunctionCall","src":"11749:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11737:3:164"},"nodeType":"YulFunctionCall","src":"11737:23:164"},"nodeType":"YulIf","src":"11734:201:164"},{"body":{"nodeType":"YulBlock","src":"11974:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11995:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"12008:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"12019:2:164","type":"","value":"25"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12004:3:164"},"nodeType":"YulFunctionCall","src":"12004:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"11998:5:164"},"nodeType":"YulFunctionCall","src":"11998:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11988:6:164"},"nodeType":"YulFunctionCall","src":"11988:36:164"},"nodeType":"YulExpressionStatement","src":"11988:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12044:4:164","type":"","value":"0x20"},{"name":"Z_25","nodeType":"YulIdentifier","src":"12050:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12037:6:164"},"nodeType":"YulFunctionCall","src":"12037:18:164"},"nodeType":"YulExpressionStatement","src":"12037:18:164"},{"nodeType":"YulAssignment","src":"12068:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12090:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12093:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"12080:9:164"},"nodeType":"YulFunctionCall","src":"12080:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"12068:8:164"}]},{"nodeType":"YulAssignment","src":"12111:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"12116:2:164","type":"","value":"25"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"12111:1:164"}]},{"nodeType":"YulBreak","src":"12131:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"11954:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11966:2:164","type":"","value":"25"},{"kind":"number","nodeType":"YulLiteral","src":"11970:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11962:3:164"},"nodeType":"YulFunctionCall","src":"11962:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11950:3:164"},"nodeType":"YulFunctionCall","src":"11950:23:164"},"nodeType":"YulIf","src":"11947:201:164"},{"body":{"nodeType":"YulBlock","src":"12187:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12208:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"12221:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"12232:2:164","type":"","value":"26"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12217:3:164"},"nodeType":"YulFunctionCall","src":"12217:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"12211:5:164"},"nodeType":"YulFunctionCall","src":"12211:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12201:6:164"},"nodeType":"YulFunctionCall","src":"12201:36:164"},"nodeType":"YulExpressionStatement","src":"12201:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12257:4:164","type":"","value":"0x20"},{"name":"Z_26","nodeType":"YulIdentifier","src":"12263:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12250:6:164"},"nodeType":"YulFunctionCall","src":"12250:18:164"},"nodeType":"YulExpressionStatement","src":"12250:18:164"},{"nodeType":"YulAssignment","src":"12281:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12303:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12306:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"12293:9:164"},"nodeType":"YulFunctionCall","src":"12293:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"12281:8:164"}]},{"nodeType":"YulAssignment","src":"12324:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"12329:2:164","type":"","value":"26"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"12324:1:164"}]},{"nodeType":"YulBreak","src":"12344:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"12167:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12179:2:164","type":"","value":"26"},{"kind":"number","nodeType":"YulLiteral","src":"12183:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12175:3:164"},"nodeType":"YulFunctionCall","src":"12175:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12163:3:164"},"nodeType":"YulFunctionCall","src":"12163:23:164"},"nodeType":"YulIf","src":"12160:201:164"},{"body":{"nodeType":"YulBlock","src":"12400:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12421:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"12434:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"12445:2:164","type":"","value":"27"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12430:3:164"},"nodeType":"YulFunctionCall","src":"12430:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"12424:5:164"},"nodeType":"YulFunctionCall","src":"12424:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12414:6:164"},"nodeType":"YulFunctionCall","src":"12414:36:164"},"nodeType":"YulExpressionStatement","src":"12414:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12470:4:164","type":"","value":"0x20"},{"name":"Z_27","nodeType":"YulIdentifier","src":"12476:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12463:6:164"},"nodeType":"YulFunctionCall","src":"12463:18:164"},"nodeType":"YulExpressionStatement","src":"12463:18:164"},{"nodeType":"YulAssignment","src":"12494:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12516:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12519:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"12506:9:164"},"nodeType":"YulFunctionCall","src":"12506:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"12494:8:164"}]},{"nodeType":"YulAssignment","src":"12537:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"12542:2:164","type":"","value":"27"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"12537:1:164"}]},{"nodeType":"YulBreak","src":"12557:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"12380:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12392:2:164","type":"","value":"27"},{"kind":"number","nodeType":"YulLiteral","src":"12396:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12388:3:164"},"nodeType":"YulFunctionCall","src":"12388:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12376:3:164"},"nodeType":"YulFunctionCall","src":"12376:23:164"},"nodeType":"YulIf","src":"12373:201:164"},{"body":{"nodeType":"YulBlock","src":"12613:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12634:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"12647:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"12658:2:164","type":"","value":"28"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12643:3:164"},"nodeType":"YulFunctionCall","src":"12643:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"12637:5:164"},"nodeType":"YulFunctionCall","src":"12637:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12627:6:164"},"nodeType":"YulFunctionCall","src":"12627:36:164"},"nodeType":"YulExpressionStatement","src":"12627:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12683:4:164","type":"","value":"0x20"},{"name":"Z_28","nodeType":"YulIdentifier","src":"12689:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12676:6:164"},"nodeType":"YulFunctionCall","src":"12676:18:164"},"nodeType":"YulExpressionStatement","src":"12676:18:164"},{"nodeType":"YulAssignment","src":"12707:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12729:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12732:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"12719:9:164"},"nodeType":"YulFunctionCall","src":"12719:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"12707:8:164"}]},{"nodeType":"YulAssignment","src":"12750:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"12755:2:164","type":"","value":"28"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"12750:1:164"}]},{"nodeType":"YulBreak","src":"12770:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"12593:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12605:2:164","type":"","value":"28"},{"kind":"number","nodeType":"YulLiteral","src":"12609:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12601:3:164"},"nodeType":"YulFunctionCall","src":"12601:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12589:3:164"},"nodeType":"YulFunctionCall","src":"12589:23:164"},"nodeType":"YulIf","src":"12586:201:164"},{"body":{"nodeType":"YulBlock","src":"12826:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12847:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"12860:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"12871:2:164","type":"","value":"29"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12856:3:164"},"nodeType":"YulFunctionCall","src":"12856:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"12850:5:164"},"nodeType":"YulFunctionCall","src":"12850:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12840:6:164"},"nodeType":"YulFunctionCall","src":"12840:36:164"},"nodeType":"YulExpressionStatement","src":"12840:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12896:4:164","type":"","value":"0x20"},{"name":"Z_29","nodeType":"YulIdentifier","src":"12902:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12889:6:164"},"nodeType":"YulFunctionCall","src":"12889:18:164"},"nodeType":"YulExpressionStatement","src":"12889:18:164"},{"nodeType":"YulAssignment","src":"12920:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12942:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12945:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"12932:9:164"},"nodeType":"YulFunctionCall","src":"12932:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"12920:8:164"}]},{"nodeType":"YulAssignment","src":"12963:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"12968:2:164","type":"","value":"29"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"12963:1:164"}]},{"nodeType":"YulBreak","src":"12983:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"12806:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12818:2:164","type":"","value":"29"},{"kind":"number","nodeType":"YulLiteral","src":"12822:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12814:3:164"},"nodeType":"YulFunctionCall","src":"12814:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12802:3:164"},"nodeType":"YulFunctionCall","src":"12802:23:164"},"nodeType":"YulIf","src":"12799:201:164"},{"body":{"nodeType":"YulBlock","src":"13039:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13060:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"13073:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"13084:2:164","type":"","value":"30"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13069:3:164"},"nodeType":"YulFunctionCall","src":"13069:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"13063:5:164"},"nodeType":"YulFunctionCall","src":"13063:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13053:6:164"},"nodeType":"YulFunctionCall","src":"13053:36:164"},"nodeType":"YulExpressionStatement","src":"13053:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13109:4:164","type":"","value":"0x20"},{"name":"Z_30","nodeType":"YulIdentifier","src":"13115:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13102:6:164"},"nodeType":"YulFunctionCall","src":"13102:18:164"},"nodeType":"YulExpressionStatement","src":"13102:18:164"},{"nodeType":"YulAssignment","src":"13133:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13155:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13158:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"13145:9:164"},"nodeType":"YulFunctionCall","src":"13145:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"13133:8:164"}]},{"nodeType":"YulAssignment","src":"13176:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"13181:2:164","type":"","value":"30"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"13176:1:164"}]},{"nodeType":"YulBreak","src":"13196:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"13019:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13031:2:164","type":"","value":"30"},{"kind":"number","nodeType":"YulLiteral","src":"13035:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13027:3:164"},"nodeType":"YulFunctionCall","src":"13027:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13015:3:164"},"nodeType":"YulFunctionCall","src":"13015:23:164"},"nodeType":"YulIf","src":"13012:201:164"},{"body":{"nodeType":"YulBlock","src":"13252:174:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13273:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"13286:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"13297:2:164","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13282:3:164"},"nodeType":"YulFunctionCall","src":"13282:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"13276:5:164"},"nodeType":"YulFunctionCall","src":"13276:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13266:6:164"},"nodeType":"YulFunctionCall","src":"13266:36:164"},"nodeType":"YulExpressionStatement","src":"13266:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13322:4:164","type":"","value":"0x20"},{"name":"Z_31","nodeType":"YulIdentifier","src":"13328:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13315:6:164"},"nodeType":"YulFunctionCall","src":"13315:18:164"},"nodeType":"YulExpressionStatement","src":"13315:18:164"},{"nodeType":"YulAssignment","src":"13346:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13368:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13371:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"13358:9:164"},"nodeType":"YulFunctionCall","src":"13358:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"13346:8:164"}]},{"nodeType":"YulAssignment","src":"13389:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"13394:2:164","type":"","value":"31"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"13389:1:164"}]},{"nodeType":"YulBreak","src":"13409:5:164"}]},"condition":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"13232:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13244:2:164","type":"","value":"31"},{"kind":"number","nodeType":"YulLiteral","src":"13248:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13240:3:164"},"nodeType":"YulFunctionCall","src":"13240:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13228:3:164"},"nodeType":"YulFunctionCall","src":"13228:23:164"},"nodeType":"YulIf","src":"13225:201:164"},{"nodeType":"YulAssignment","src":"13438:16:164","value":{"name":"Z_32","nodeType":"YulIdentifier","src":"13450:4:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"13438:8:164"}]},{"nodeType":"YulAssignment","src":"13465:7:164","value":{"kind":"number","nodeType":"YulLiteral","src":"13470:2:164","type":"","value":"32"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"13465:1:164"}]},{"nodeType":"YulBreak","src":"13483:5:164"}]},"condition":{"kind":"bool","nodeType":"YulLiteral","src":"6667:4:164","type":"","value":"true"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6672:12:164","statements":[]},"pre":{"nodeType":"YulBlock","src":"6654:12:164","statements":[]},"src":"6650:6848:164"},{"body":{"nodeType":"YulBlock","src":"13521:27:164","statements":[{"nodeType":"YulBreak","src":"13533:5:164"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"13514:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"13517:2:164","type":"","value":"30"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13511:2:164"},"nodeType":"YulFunctionCall","src":"13511:9:164"},"nodeType":"YulIf","src":"13508:40:164"},{"nodeType":"YulBlock","src":"13558:10855:164","statements":[{"body":{"nodeType":"YulBlock","src":"13582:323:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"13645:81:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13668:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"13671:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13661:6:164"},"nodeType":"YulFunctionCall","src":"13661:19:164"},"nodeType":"YulExpressionStatement","src":"13661:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13702:4:164","type":"","value":"0x20"},{"name":"Z_1","nodeType":"YulIdentifier","src":"13708:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13695:6:164"},"nodeType":"YulFunctionCall","src":"13695:17:164"},"nodeType":"YulExpressionStatement","src":"13695:17:164"}]},"nodeType":"YulCase","src":"13638:88:164","value":{"kind":"number","nodeType":"YulLiteral","src":"13643:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"13747:102:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13770:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"13783:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"13794:1:164","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13779:3:164"},"nodeType":"YulFunctionCall","src":"13779:17:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"13773:5:164"},"nodeType":"YulFunctionCall","src":"13773:24:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13763:6:164"},"nodeType":"YulFunctionCall","src":"13763:35:164"},"nodeType":"YulExpressionStatement","src":"13763:35:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13820:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"13826:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13813:6:164"},"nodeType":"YulFunctionCall","src":"13813:22:164"},"nodeType":"YulExpressionStatement","src":"13813:22:164"}]},"nodeType":"YulCase","src":"13739:110:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"13607:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13619:1:164","type":"","value":"1"},{"kind":"number","nodeType":"YulLiteral","src":"13622:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13615:3:164"},"nodeType":"YulFunctionCall","src":"13615:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13603:3:164"},"nodeType":"YulFunctionCall","src":"13603:22:164"},"nodeType":"YulSwitch","src":"13596:253:164"},{"nodeType":"YulAssignment","src":"13863:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13885:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13888:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"13875:9:164"},"nodeType":"YulFunctionCall","src":"13875:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"13863:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"13576:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"13579:1:164","type":"","value":"1"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"13573:2:164"},"nodeType":"YulFunctionCall","src":"13573:8:164"},"nodeType":"YulIf","src":"13570:335:164"},{"body":{"nodeType":"YulBlock","src":"13929:323:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"13992:81:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14015:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"14018:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14008:6:164"},"nodeType":"YulFunctionCall","src":"14008:19:164"},"nodeType":"YulExpressionStatement","src":"14008:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14049:4:164","type":"","value":"0x20"},{"name":"Z_2","nodeType":"YulIdentifier","src":"14055:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14042:6:164"},"nodeType":"YulFunctionCall","src":"14042:17:164"},"nodeType":"YulExpressionStatement","src":"14042:17:164"}]},"nodeType":"YulCase","src":"13985:88:164","value":{"kind":"number","nodeType":"YulLiteral","src":"13990:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"14094:102:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14117:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"14130:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"14141:1:164","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14126:3:164"},"nodeType":"YulFunctionCall","src":"14126:17:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"14120:5:164"},"nodeType":"YulFunctionCall","src":"14120:24:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14110:6:164"},"nodeType":"YulFunctionCall","src":"14110:35:164"},"nodeType":"YulExpressionStatement","src":"14110:35:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14167:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"14173:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14160:6:164"},"nodeType":"YulFunctionCall","src":"14160:22:164"},"nodeType":"YulExpressionStatement","src":"14160:22:164"}]},"nodeType":"YulCase","src":"14086:110:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"13954:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13966:1:164","type":"","value":"2"},{"kind":"number","nodeType":"YulLiteral","src":"13969:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13962:3:164"},"nodeType":"YulFunctionCall","src":"13962:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13950:3:164"},"nodeType":"YulFunctionCall","src":"13950:22:164"},"nodeType":"YulSwitch","src":"13943:253:164"},{"nodeType":"YulAssignment","src":"14210:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14232:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14235:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"14222:9:164"},"nodeType":"YulFunctionCall","src":"14222:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"14210:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"13923:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"13926:1:164","type":"","value":"2"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"13920:2:164"},"nodeType":"YulFunctionCall","src":"13920:8:164"},"nodeType":"YulIf","src":"13917:335:164"},{"body":{"nodeType":"YulBlock","src":"14276:323:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"14339:81:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14362:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"14365:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14355:6:164"},"nodeType":"YulFunctionCall","src":"14355:19:164"},"nodeType":"YulExpressionStatement","src":"14355:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14396:4:164","type":"","value":"0x20"},{"name":"Z_3","nodeType":"YulIdentifier","src":"14402:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14389:6:164"},"nodeType":"YulFunctionCall","src":"14389:17:164"},"nodeType":"YulExpressionStatement","src":"14389:17:164"}]},"nodeType":"YulCase","src":"14332:88:164","value":{"kind":"number","nodeType":"YulLiteral","src":"14337:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"14441:102:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14464:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"14477:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"14488:1:164","type":"","value":"3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14473:3:164"},"nodeType":"YulFunctionCall","src":"14473:17:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"14467:5:164"},"nodeType":"YulFunctionCall","src":"14467:24:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14457:6:164"},"nodeType":"YulFunctionCall","src":"14457:35:164"},"nodeType":"YulExpressionStatement","src":"14457:35:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14514:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"14520:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14507:6:164"},"nodeType":"YulFunctionCall","src":"14507:22:164"},"nodeType":"YulExpressionStatement","src":"14507:22:164"}]},"nodeType":"YulCase","src":"14433:110:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"14301:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14313:1:164","type":"","value":"3"},{"kind":"number","nodeType":"YulLiteral","src":"14316:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14309:3:164"},"nodeType":"YulFunctionCall","src":"14309:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14297:3:164"},"nodeType":"YulFunctionCall","src":"14297:22:164"},"nodeType":"YulSwitch","src":"14290:253:164"},{"nodeType":"YulAssignment","src":"14557:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14579:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14582:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"14569:9:164"},"nodeType":"YulFunctionCall","src":"14569:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"14557:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"14270:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"14273:1:164","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14267:2:164"},"nodeType":"YulFunctionCall","src":"14267:8:164"},"nodeType":"YulIf","src":"14264:335:164"},{"body":{"nodeType":"YulBlock","src":"14623:323:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"14686:81:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14709:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"14712:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14702:6:164"},"nodeType":"YulFunctionCall","src":"14702:19:164"},"nodeType":"YulExpressionStatement","src":"14702:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14743:4:164","type":"","value":"0x20"},{"name":"Z_4","nodeType":"YulIdentifier","src":"14749:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14736:6:164"},"nodeType":"YulFunctionCall","src":"14736:17:164"},"nodeType":"YulExpressionStatement","src":"14736:17:164"}]},"nodeType":"YulCase","src":"14679:88:164","value":{"kind":"number","nodeType":"YulLiteral","src":"14684:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"14788:102:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14811:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"14824:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"14835:1:164","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14820:3:164"},"nodeType":"YulFunctionCall","src":"14820:17:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"14814:5:164"},"nodeType":"YulFunctionCall","src":"14814:24:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14804:6:164"},"nodeType":"YulFunctionCall","src":"14804:35:164"},"nodeType":"YulExpressionStatement","src":"14804:35:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14861:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"14867:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14854:6:164"},"nodeType":"YulFunctionCall","src":"14854:22:164"},"nodeType":"YulExpressionStatement","src":"14854:22:164"}]},"nodeType":"YulCase","src":"14780:110:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"14648:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14660:1:164","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"14663:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14656:3:164"},"nodeType":"YulFunctionCall","src":"14656:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14644:3:164"},"nodeType":"YulFunctionCall","src":"14644:22:164"},"nodeType":"YulSwitch","src":"14637:253:164"},{"nodeType":"YulAssignment","src":"14904:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14926:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14929:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"14916:9:164"},"nodeType":"YulFunctionCall","src":"14916:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"14904:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"14617:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"14620:1:164","type":"","value":"4"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14614:2:164"},"nodeType":"YulFunctionCall","src":"14614:8:164"},"nodeType":"YulIf","src":"14611:335:164"},{"body":{"nodeType":"YulBlock","src":"14970:323:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"15033:81:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15056:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"15059:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15049:6:164"},"nodeType":"YulFunctionCall","src":"15049:19:164"},"nodeType":"YulExpressionStatement","src":"15049:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15090:4:164","type":"","value":"0x20"},{"name":"Z_5","nodeType":"YulIdentifier","src":"15096:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15083:6:164"},"nodeType":"YulFunctionCall","src":"15083:17:164"},"nodeType":"YulExpressionStatement","src":"15083:17:164"}]},"nodeType":"YulCase","src":"15026:88:164","value":{"kind":"number","nodeType":"YulLiteral","src":"15031:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"15135:102:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15158:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"15171:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"15182:1:164","type":"","value":"5"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15167:3:164"},"nodeType":"YulFunctionCall","src":"15167:17:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"15161:5:164"},"nodeType":"YulFunctionCall","src":"15161:24:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15151:6:164"},"nodeType":"YulFunctionCall","src":"15151:35:164"},"nodeType":"YulExpressionStatement","src":"15151:35:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15208:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"15214:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15201:6:164"},"nodeType":"YulFunctionCall","src":"15201:22:164"},"nodeType":"YulExpressionStatement","src":"15201:22:164"}]},"nodeType":"YulCase","src":"15127:110:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"14995:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15007:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"15010:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"15003:3:164"},"nodeType":"YulFunctionCall","src":"15003:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14991:3:164"},"nodeType":"YulFunctionCall","src":"14991:22:164"},"nodeType":"YulSwitch","src":"14984:253:164"},{"nodeType":"YulAssignment","src":"15251:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15273:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15276:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"15263:9:164"},"nodeType":"YulFunctionCall","src":"15263:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"15251:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"14964:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"14967:1:164","type":"","value":"5"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14961:2:164"},"nodeType":"YulFunctionCall","src":"14961:8:164"},"nodeType":"YulIf","src":"14958:335:164"},{"body":{"nodeType":"YulBlock","src":"15317:323:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"15380:81:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15403:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"15406:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15396:6:164"},"nodeType":"YulFunctionCall","src":"15396:19:164"},"nodeType":"YulExpressionStatement","src":"15396:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15437:4:164","type":"","value":"0x20"},{"name":"Z_6","nodeType":"YulIdentifier","src":"15443:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15430:6:164"},"nodeType":"YulFunctionCall","src":"15430:17:164"},"nodeType":"YulExpressionStatement","src":"15430:17:164"}]},"nodeType":"YulCase","src":"15373:88:164","value":{"kind":"number","nodeType":"YulLiteral","src":"15378:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"15482:102:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15505:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"15518:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"15529:1:164","type":"","value":"6"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15514:3:164"},"nodeType":"YulFunctionCall","src":"15514:17:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"15508:5:164"},"nodeType":"YulFunctionCall","src":"15508:24:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15498:6:164"},"nodeType":"YulFunctionCall","src":"15498:35:164"},"nodeType":"YulExpressionStatement","src":"15498:35:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15555:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"15561:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15548:6:164"},"nodeType":"YulFunctionCall","src":"15548:22:164"},"nodeType":"YulExpressionStatement","src":"15548:22:164"}]},"nodeType":"YulCase","src":"15474:110:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"15342:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15354:1:164","type":"","value":"6"},{"kind":"number","nodeType":"YulLiteral","src":"15357:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"15350:3:164"},"nodeType":"YulFunctionCall","src":"15350:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15338:3:164"},"nodeType":"YulFunctionCall","src":"15338:22:164"},"nodeType":"YulSwitch","src":"15331:253:164"},{"nodeType":"YulAssignment","src":"15598:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15620:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15623:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"15610:9:164"},"nodeType":"YulFunctionCall","src":"15610:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"15598:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"15311:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"15314:1:164","type":"","value":"6"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15308:2:164"},"nodeType":"YulFunctionCall","src":"15308:8:164"},"nodeType":"YulIf","src":"15305:335:164"},{"body":{"nodeType":"YulBlock","src":"15664:323:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"15727:81:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15750:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"15753:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15743:6:164"},"nodeType":"YulFunctionCall","src":"15743:19:164"},"nodeType":"YulExpressionStatement","src":"15743:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15784:4:164","type":"","value":"0x20"},{"name":"Z_7","nodeType":"YulIdentifier","src":"15790:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15777:6:164"},"nodeType":"YulFunctionCall","src":"15777:17:164"},"nodeType":"YulExpressionStatement","src":"15777:17:164"}]},"nodeType":"YulCase","src":"15720:88:164","value":{"kind":"number","nodeType":"YulLiteral","src":"15725:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"15829:102:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15852:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"15865:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"15876:1:164","type":"","value":"7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15861:3:164"},"nodeType":"YulFunctionCall","src":"15861:17:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"15855:5:164"},"nodeType":"YulFunctionCall","src":"15855:24:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15845:6:164"},"nodeType":"YulFunctionCall","src":"15845:35:164"},"nodeType":"YulExpressionStatement","src":"15845:35:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15902:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"15908:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15895:6:164"},"nodeType":"YulFunctionCall","src":"15895:22:164"},"nodeType":"YulExpressionStatement","src":"15895:22:164"}]},"nodeType":"YulCase","src":"15821:110:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"15689:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15701:1:164","type":"","value":"7"},{"kind":"number","nodeType":"YulLiteral","src":"15704:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"15697:3:164"},"nodeType":"YulFunctionCall","src":"15697:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15685:3:164"},"nodeType":"YulFunctionCall","src":"15685:22:164"},"nodeType":"YulSwitch","src":"15678:253:164"},{"nodeType":"YulAssignment","src":"15945:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15967:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15970:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"15957:9:164"},"nodeType":"YulFunctionCall","src":"15957:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"15945:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"15658:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"15661:1:164","type":"","value":"7"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15655:2:164"},"nodeType":"YulFunctionCall","src":"15655:8:164"},"nodeType":"YulIf","src":"15652:335:164"},{"body":{"nodeType":"YulBlock","src":"16011:323:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"16074:81:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16097:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"16100:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16090:6:164"},"nodeType":"YulFunctionCall","src":"16090:19:164"},"nodeType":"YulExpressionStatement","src":"16090:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16131:4:164","type":"","value":"0x20"},{"name":"Z_8","nodeType":"YulIdentifier","src":"16137:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16124:6:164"},"nodeType":"YulFunctionCall","src":"16124:17:164"},"nodeType":"YulExpressionStatement","src":"16124:17:164"}]},"nodeType":"YulCase","src":"16067:88:164","value":{"kind":"number","nodeType":"YulLiteral","src":"16072:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"16176:102:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16199:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"16212:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"16223:1:164","type":"","value":"8"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16208:3:164"},"nodeType":"YulFunctionCall","src":"16208:17:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"16202:5:164"},"nodeType":"YulFunctionCall","src":"16202:24:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16192:6:164"},"nodeType":"YulFunctionCall","src":"16192:35:164"},"nodeType":"YulExpressionStatement","src":"16192:35:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16249:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"16255:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16242:6:164"},"nodeType":"YulFunctionCall","src":"16242:22:164"},"nodeType":"YulExpressionStatement","src":"16242:22:164"}]},"nodeType":"YulCase","src":"16168:110:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"16036:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16048:1:164","type":"","value":"8"},{"kind":"number","nodeType":"YulLiteral","src":"16051:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16044:3:164"},"nodeType":"YulFunctionCall","src":"16044:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16032:3:164"},"nodeType":"YulFunctionCall","src":"16032:22:164"},"nodeType":"YulSwitch","src":"16025:253:164"},{"nodeType":"YulAssignment","src":"16292:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16314:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16317:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"16304:9:164"},"nodeType":"YulFunctionCall","src":"16304:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"16292:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"16005:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"16008:1:164","type":"","value":"8"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16002:2:164"},"nodeType":"YulFunctionCall","src":"16002:8:164"},"nodeType":"YulIf","src":"15999:335:164"},{"body":{"nodeType":"YulBlock","src":"16358:323:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"16421:81:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16444:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"16447:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16437:6:164"},"nodeType":"YulFunctionCall","src":"16437:19:164"},"nodeType":"YulExpressionStatement","src":"16437:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16478:4:164","type":"","value":"0x20"},{"name":"Z_9","nodeType":"YulIdentifier","src":"16484:3:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16471:6:164"},"nodeType":"YulFunctionCall","src":"16471:17:164"},"nodeType":"YulExpressionStatement","src":"16471:17:164"}]},"nodeType":"YulCase","src":"16414:88:164","value":{"kind":"number","nodeType":"YulLiteral","src":"16419:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"16523:102:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16546:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"16559:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"16570:1:164","type":"","value":"9"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16555:3:164"},"nodeType":"YulFunctionCall","src":"16555:17:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"16549:5:164"},"nodeType":"YulFunctionCall","src":"16549:24:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16539:6:164"},"nodeType":"YulFunctionCall","src":"16539:35:164"},"nodeType":"YulExpressionStatement","src":"16539:35:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16596:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"16602:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16589:6:164"},"nodeType":"YulFunctionCall","src":"16589:22:164"},"nodeType":"YulExpressionStatement","src":"16589:22:164"}]},"nodeType":"YulCase","src":"16515:110:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"16383:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16395:1:164","type":"","value":"9"},{"kind":"number","nodeType":"YulLiteral","src":"16398:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16391:3:164"},"nodeType":"YulFunctionCall","src":"16391:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16379:3:164"},"nodeType":"YulFunctionCall","src":"16379:22:164"},"nodeType":"YulSwitch","src":"16372:253:164"},{"nodeType":"YulAssignment","src":"16639:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16661:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16664:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"16651:9:164"},"nodeType":"YulFunctionCall","src":"16651:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"16639:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"16352:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"16355:1:164","type":"","value":"9"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16349:2:164"},"nodeType":"YulFunctionCall","src":"16349:8:164"},"nodeType":"YulIf","src":"16346:335:164"},{"body":{"nodeType":"YulBlock","src":"16706:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"16770:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16793:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"16796:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16786:6:164"},"nodeType":"YulFunctionCall","src":"16786:19:164"},"nodeType":"YulExpressionStatement","src":"16786:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16827:4:164","type":"","value":"0x20"},{"name":"Z_10","nodeType":"YulIdentifier","src":"16833:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16820:6:164"},"nodeType":"YulFunctionCall","src":"16820:18:164"},"nodeType":"YulExpressionStatement","src":"16820:18:164"}]},"nodeType":"YulCase","src":"16763:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"16768:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"16873:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16896:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"16909:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"16920:2:164","type":"","value":"10"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16905:3:164"},"nodeType":"YulFunctionCall","src":"16905:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"16899:5:164"},"nodeType":"YulFunctionCall","src":"16899:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16889:6:164"},"nodeType":"YulFunctionCall","src":"16889:36:164"},"nodeType":"YulExpressionStatement","src":"16889:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16947:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"16953:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16940:6:164"},"nodeType":"YulFunctionCall","src":"16940:22:164"},"nodeType":"YulExpressionStatement","src":"16940:22:164"}]},"nodeType":"YulCase","src":"16865:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"16731:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16743:2:164","type":"","value":"10"},{"kind":"number","nodeType":"YulLiteral","src":"16747:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16739:3:164"},"nodeType":"YulFunctionCall","src":"16739:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16727:3:164"},"nodeType":"YulFunctionCall","src":"16727:23:164"},"nodeType":"YulSwitch","src":"16720:256:164"},{"nodeType":"YulAssignment","src":"16990:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17012:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17015:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"17002:9:164"},"nodeType":"YulFunctionCall","src":"17002:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"16990:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"16699:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"16702:2:164","type":"","value":"10"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16696:2:164"},"nodeType":"YulFunctionCall","src":"16696:9:164"},"nodeType":"YulIf","src":"16693:339:164"},{"body":{"nodeType":"YulBlock","src":"17057:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"17121:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17144:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"17147:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17137:6:164"},"nodeType":"YulFunctionCall","src":"17137:19:164"},"nodeType":"YulExpressionStatement","src":"17137:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17178:4:164","type":"","value":"0x20"},{"name":"Z_11","nodeType":"YulIdentifier","src":"17184:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17171:6:164"},"nodeType":"YulFunctionCall","src":"17171:18:164"},"nodeType":"YulExpressionStatement","src":"17171:18:164"}]},"nodeType":"YulCase","src":"17114:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"17119:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"17224:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17247:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"17260:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"17271:2:164","type":"","value":"11"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17256:3:164"},"nodeType":"YulFunctionCall","src":"17256:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"17250:5:164"},"nodeType":"YulFunctionCall","src":"17250:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17240:6:164"},"nodeType":"YulFunctionCall","src":"17240:36:164"},"nodeType":"YulExpressionStatement","src":"17240:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17298:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"17304:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17291:6:164"},"nodeType":"YulFunctionCall","src":"17291:22:164"},"nodeType":"YulExpressionStatement","src":"17291:22:164"}]},"nodeType":"YulCase","src":"17216:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"17082:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17094:2:164","type":"","value":"11"},{"kind":"number","nodeType":"YulLiteral","src":"17098:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"17090:3:164"},"nodeType":"YulFunctionCall","src":"17090:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17078:3:164"},"nodeType":"YulFunctionCall","src":"17078:23:164"},"nodeType":"YulSwitch","src":"17071:256:164"},{"nodeType":"YulAssignment","src":"17341:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17363:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17366:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"17353:9:164"},"nodeType":"YulFunctionCall","src":"17353:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"17341:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17050:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"17053:2:164","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17047:2:164"},"nodeType":"YulFunctionCall","src":"17047:9:164"},"nodeType":"YulIf","src":"17044:339:164"},{"body":{"nodeType":"YulBlock","src":"17408:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"17472:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17495:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"17498:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17488:6:164"},"nodeType":"YulFunctionCall","src":"17488:19:164"},"nodeType":"YulExpressionStatement","src":"17488:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17529:4:164","type":"","value":"0x20"},{"name":"Z_12","nodeType":"YulIdentifier","src":"17535:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17522:6:164"},"nodeType":"YulFunctionCall","src":"17522:18:164"},"nodeType":"YulExpressionStatement","src":"17522:18:164"}]},"nodeType":"YulCase","src":"17465:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"17470:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"17575:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17598:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"17611:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"17622:2:164","type":"","value":"12"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17607:3:164"},"nodeType":"YulFunctionCall","src":"17607:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"17601:5:164"},"nodeType":"YulFunctionCall","src":"17601:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17591:6:164"},"nodeType":"YulFunctionCall","src":"17591:36:164"},"nodeType":"YulExpressionStatement","src":"17591:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17649:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"17655:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17642:6:164"},"nodeType":"YulFunctionCall","src":"17642:22:164"},"nodeType":"YulExpressionStatement","src":"17642:22:164"}]},"nodeType":"YulCase","src":"17567:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"17433:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17445:2:164","type":"","value":"12"},{"kind":"number","nodeType":"YulLiteral","src":"17449:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"17441:3:164"},"nodeType":"YulFunctionCall","src":"17441:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17429:3:164"},"nodeType":"YulFunctionCall","src":"17429:23:164"},"nodeType":"YulSwitch","src":"17422:256:164"},{"nodeType":"YulAssignment","src":"17692:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17714:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17717:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"17704:9:164"},"nodeType":"YulFunctionCall","src":"17704:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"17692:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17401:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"17404:2:164","type":"","value":"12"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17398:2:164"},"nodeType":"YulFunctionCall","src":"17398:9:164"},"nodeType":"YulIf","src":"17395:339:164"},{"body":{"nodeType":"YulBlock","src":"17759:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"17823:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17846:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"17849:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17839:6:164"},"nodeType":"YulFunctionCall","src":"17839:19:164"},"nodeType":"YulExpressionStatement","src":"17839:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17880:4:164","type":"","value":"0x20"},{"name":"Z_13","nodeType":"YulIdentifier","src":"17886:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17873:6:164"},"nodeType":"YulFunctionCall","src":"17873:18:164"},"nodeType":"YulExpressionStatement","src":"17873:18:164"}]},"nodeType":"YulCase","src":"17816:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"17821:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"17926:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17949:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"17962:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"17973:2:164","type":"","value":"13"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17958:3:164"},"nodeType":"YulFunctionCall","src":"17958:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"17952:5:164"},"nodeType":"YulFunctionCall","src":"17952:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17942:6:164"},"nodeType":"YulFunctionCall","src":"17942:36:164"},"nodeType":"YulExpressionStatement","src":"17942:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18000:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"18006:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17993:6:164"},"nodeType":"YulFunctionCall","src":"17993:22:164"},"nodeType":"YulExpressionStatement","src":"17993:22:164"}]},"nodeType":"YulCase","src":"17918:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"17784:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17796:2:164","type":"","value":"13"},{"kind":"number","nodeType":"YulLiteral","src":"17800:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"17792:3:164"},"nodeType":"YulFunctionCall","src":"17792:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17780:3:164"},"nodeType":"YulFunctionCall","src":"17780:23:164"},"nodeType":"YulSwitch","src":"17773:256:164"},{"nodeType":"YulAssignment","src":"18043:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18065:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18068:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"18055:9:164"},"nodeType":"YulFunctionCall","src":"18055:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"18043:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17752:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"17755:2:164","type":"","value":"13"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17749:2:164"},"nodeType":"YulFunctionCall","src":"17749:9:164"},"nodeType":"YulIf","src":"17746:339:164"},{"body":{"nodeType":"YulBlock","src":"18110:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"18174:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18197:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"18200:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18190:6:164"},"nodeType":"YulFunctionCall","src":"18190:19:164"},"nodeType":"YulExpressionStatement","src":"18190:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18231:4:164","type":"","value":"0x20"},{"name":"Z_14","nodeType":"YulIdentifier","src":"18237:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18224:6:164"},"nodeType":"YulFunctionCall","src":"18224:18:164"},"nodeType":"YulExpressionStatement","src":"18224:18:164"}]},"nodeType":"YulCase","src":"18167:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"18172:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"18277:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18300:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"18313:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"18324:2:164","type":"","value":"14"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18309:3:164"},"nodeType":"YulFunctionCall","src":"18309:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"18303:5:164"},"nodeType":"YulFunctionCall","src":"18303:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18293:6:164"},"nodeType":"YulFunctionCall","src":"18293:36:164"},"nodeType":"YulExpressionStatement","src":"18293:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18351:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"18357:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18344:6:164"},"nodeType":"YulFunctionCall","src":"18344:22:164"},"nodeType":"YulExpressionStatement","src":"18344:22:164"}]},"nodeType":"YulCase","src":"18269:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"18135:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18147:2:164","type":"","value":"14"},{"kind":"number","nodeType":"YulLiteral","src":"18151:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"18143:3:164"},"nodeType":"YulFunctionCall","src":"18143:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18131:3:164"},"nodeType":"YulFunctionCall","src":"18131:23:164"},"nodeType":"YulSwitch","src":"18124:256:164"},{"nodeType":"YulAssignment","src":"18394:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18416:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18419:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"18406:9:164"},"nodeType":"YulFunctionCall","src":"18406:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"18394:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"18103:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"18106:2:164","type":"","value":"14"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"18100:2:164"},"nodeType":"YulFunctionCall","src":"18100:9:164"},"nodeType":"YulIf","src":"18097:339:164"},{"body":{"nodeType":"YulBlock","src":"18461:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"18525:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18548:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"18551:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18541:6:164"},"nodeType":"YulFunctionCall","src":"18541:19:164"},"nodeType":"YulExpressionStatement","src":"18541:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18582:4:164","type":"","value":"0x20"},{"name":"Z_15","nodeType":"YulIdentifier","src":"18588:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18575:6:164"},"nodeType":"YulFunctionCall","src":"18575:18:164"},"nodeType":"YulExpressionStatement","src":"18575:18:164"}]},"nodeType":"YulCase","src":"18518:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"18523:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"18628:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18651:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"18664:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"18675:2:164","type":"","value":"15"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18660:3:164"},"nodeType":"YulFunctionCall","src":"18660:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"18654:5:164"},"nodeType":"YulFunctionCall","src":"18654:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18644:6:164"},"nodeType":"YulFunctionCall","src":"18644:36:164"},"nodeType":"YulExpressionStatement","src":"18644:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18702:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"18708:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18695:6:164"},"nodeType":"YulFunctionCall","src":"18695:22:164"},"nodeType":"YulExpressionStatement","src":"18695:22:164"}]},"nodeType":"YulCase","src":"18620:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"18486:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18498:2:164","type":"","value":"15"},{"kind":"number","nodeType":"YulLiteral","src":"18502:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"18494:3:164"},"nodeType":"YulFunctionCall","src":"18494:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18482:3:164"},"nodeType":"YulFunctionCall","src":"18482:23:164"},"nodeType":"YulSwitch","src":"18475:256:164"},{"nodeType":"YulAssignment","src":"18745:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18767:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18770:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"18757:9:164"},"nodeType":"YulFunctionCall","src":"18757:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"18745:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"18454:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"18457:2:164","type":"","value":"15"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"18451:2:164"},"nodeType":"YulFunctionCall","src":"18451:9:164"},"nodeType":"YulIf","src":"18448:339:164"},{"body":{"nodeType":"YulBlock","src":"18812:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"18876:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18899:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"18902:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18892:6:164"},"nodeType":"YulFunctionCall","src":"18892:19:164"},"nodeType":"YulExpressionStatement","src":"18892:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18933:4:164","type":"","value":"0x20"},{"name":"Z_16","nodeType":"YulIdentifier","src":"18939:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18926:6:164"},"nodeType":"YulFunctionCall","src":"18926:18:164"},"nodeType":"YulExpressionStatement","src":"18926:18:164"}]},"nodeType":"YulCase","src":"18869:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"18874:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"18979:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19002:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"19015:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"19026:2:164","type":"","value":"16"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19011:3:164"},"nodeType":"YulFunctionCall","src":"19011:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"19005:5:164"},"nodeType":"YulFunctionCall","src":"19005:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18995:6:164"},"nodeType":"YulFunctionCall","src":"18995:36:164"},"nodeType":"YulExpressionStatement","src":"18995:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19053:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"19059:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19046:6:164"},"nodeType":"YulFunctionCall","src":"19046:22:164"},"nodeType":"YulExpressionStatement","src":"19046:22:164"}]},"nodeType":"YulCase","src":"18971:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"18837:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18849:2:164","type":"","value":"16"},{"kind":"number","nodeType":"YulLiteral","src":"18853:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"18845:3:164"},"nodeType":"YulFunctionCall","src":"18845:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18833:3:164"},"nodeType":"YulFunctionCall","src":"18833:23:164"},"nodeType":"YulSwitch","src":"18826:256:164"},{"nodeType":"YulAssignment","src":"19096:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19118:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19121:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"19108:9:164"},"nodeType":"YulFunctionCall","src":"19108:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"19096:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"18805:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"18808:2:164","type":"","value":"16"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"18802:2:164"},"nodeType":"YulFunctionCall","src":"18802:9:164"},"nodeType":"YulIf","src":"18799:339:164"},{"body":{"nodeType":"YulBlock","src":"19163:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"19227:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19250:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"19253:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19243:6:164"},"nodeType":"YulFunctionCall","src":"19243:19:164"},"nodeType":"YulExpressionStatement","src":"19243:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19284:4:164","type":"","value":"0x20"},{"name":"Z_17","nodeType":"YulIdentifier","src":"19290:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19277:6:164"},"nodeType":"YulFunctionCall","src":"19277:18:164"},"nodeType":"YulExpressionStatement","src":"19277:18:164"}]},"nodeType":"YulCase","src":"19220:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"19225:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"19330:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19353:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"19366:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"19377:2:164","type":"","value":"17"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19362:3:164"},"nodeType":"YulFunctionCall","src":"19362:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"19356:5:164"},"nodeType":"YulFunctionCall","src":"19356:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19346:6:164"},"nodeType":"YulFunctionCall","src":"19346:36:164"},"nodeType":"YulExpressionStatement","src":"19346:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19404:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"19410:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19397:6:164"},"nodeType":"YulFunctionCall","src":"19397:22:164"},"nodeType":"YulExpressionStatement","src":"19397:22:164"}]},"nodeType":"YulCase","src":"19322:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"19188:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19200:2:164","type":"","value":"17"},{"kind":"number","nodeType":"YulLiteral","src":"19204:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"19196:3:164"},"nodeType":"YulFunctionCall","src":"19196:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19184:3:164"},"nodeType":"YulFunctionCall","src":"19184:23:164"},"nodeType":"YulSwitch","src":"19177:256:164"},{"nodeType":"YulAssignment","src":"19447:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19469:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19472:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"19459:9:164"},"nodeType":"YulFunctionCall","src":"19459:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"19447:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"19156:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"19159:2:164","type":"","value":"17"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"19153:2:164"},"nodeType":"YulFunctionCall","src":"19153:9:164"},"nodeType":"YulIf","src":"19150:339:164"},{"body":{"nodeType":"YulBlock","src":"19514:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"19578:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19601:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"19604:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19594:6:164"},"nodeType":"YulFunctionCall","src":"19594:19:164"},"nodeType":"YulExpressionStatement","src":"19594:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19635:4:164","type":"","value":"0x20"},{"name":"Z_18","nodeType":"YulIdentifier","src":"19641:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19628:6:164"},"nodeType":"YulFunctionCall","src":"19628:18:164"},"nodeType":"YulExpressionStatement","src":"19628:18:164"}]},"nodeType":"YulCase","src":"19571:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"19576:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"19681:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19704:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"19717:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"19728:2:164","type":"","value":"18"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19713:3:164"},"nodeType":"YulFunctionCall","src":"19713:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"19707:5:164"},"nodeType":"YulFunctionCall","src":"19707:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19697:6:164"},"nodeType":"YulFunctionCall","src":"19697:36:164"},"nodeType":"YulExpressionStatement","src":"19697:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19755:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"19761:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19748:6:164"},"nodeType":"YulFunctionCall","src":"19748:22:164"},"nodeType":"YulExpressionStatement","src":"19748:22:164"}]},"nodeType":"YulCase","src":"19673:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"19539:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19551:2:164","type":"","value":"18"},{"kind":"number","nodeType":"YulLiteral","src":"19555:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"19547:3:164"},"nodeType":"YulFunctionCall","src":"19547:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19535:3:164"},"nodeType":"YulFunctionCall","src":"19535:23:164"},"nodeType":"YulSwitch","src":"19528:256:164"},{"nodeType":"YulAssignment","src":"19798:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19820:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19823:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"19810:9:164"},"nodeType":"YulFunctionCall","src":"19810:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"19798:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"19507:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"19510:2:164","type":"","value":"18"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"19504:2:164"},"nodeType":"YulFunctionCall","src":"19504:9:164"},"nodeType":"YulIf","src":"19501:339:164"},{"body":{"nodeType":"YulBlock","src":"19865:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"19929:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19952:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"19955:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19945:6:164"},"nodeType":"YulFunctionCall","src":"19945:19:164"},"nodeType":"YulExpressionStatement","src":"19945:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19986:4:164","type":"","value":"0x20"},{"name":"Z_19","nodeType":"YulIdentifier","src":"19992:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19979:6:164"},"nodeType":"YulFunctionCall","src":"19979:18:164"},"nodeType":"YulExpressionStatement","src":"19979:18:164"}]},"nodeType":"YulCase","src":"19922:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"19927:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"20032:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20055:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"20068:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"20079:2:164","type":"","value":"19"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20064:3:164"},"nodeType":"YulFunctionCall","src":"20064:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"20058:5:164"},"nodeType":"YulFunctionCall","src":"20058:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20048:6:164"},"nodeType":"YulFunctionCall","src":"20048:36:164"},"nodeType":"YulExpressionStatement","src":"20048:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20106:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"20112:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20099:6:164"},"nodeType":"YulFunctionCall","src":"20099:22:164"},"nodeType":"YulExpressionStatement","src":"20099:22:164"}]},"nodeType":"YulCase","src":"20024:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"19890:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19902:2:164","type":"","value":"19"},{"kind":"number","nodeType":"YulLiteral","src":"19906:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"19898:3:164"},"nodeType":"YulFunctionCall","src":"19898:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19886:3:164"},"nodeType":"YulFunctionCall","src":"19886:23:164"},"nodeType":"YulSwitch","src":"19879:256:164"},{"nodeType":"YulAssignment","src":"20149:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20171:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20174:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"20161:9:164"},"nodeType":"YulFunctionCall","src":"20161:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"20149:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"19858:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"19861:2:164","type":"","value":"19"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"19855:2:164"},"nodeType":"YulFunctionCall","src":"19855:9:164"},"nodeType":"YulIf","src":"19852:339:164"},{"body":{"nodeType":"YulBlock","src":"20216:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"20280:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20303:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"20306:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20296:6:164"},"nodeType":"YulFunctionCall","src":"20296:19:164"},"nodeType":"YulExpressionStatement","src":"20296:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20337:4:164","type":"","value":"0x20"},{"name":"Z_20","nodeType":"YulIdentifier","src":"20343:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20330:6:164"},"nodeType":"YulFunctionCall","src":"20330:18:164"},"nodeType":"YulExpressionStatement","src":"20330:18:164"}]},"nodeType":"YulCase","src":"20273:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"20278:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"20383:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20406:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"20419:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"20430:2:164","type":"","value":"20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20415:3:164"},"nodeType":"YulFunctionCall","src":"20415:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"20409:5:164"},"nodeType":"YulFunctionCall","src":"20409:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20399:6:164"},"nodeType":"YulFunctionCall","src":"20399:36:164"},"nodeType":"YulExpressionStatement","src":"20399:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20457:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"20463:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20450:6:164"},"nodeType":"YulFunctionCall","src":"20450:22:164"},"nodeType":"YulExpressionStatement","src":"20450:22:164"}]},"nodeType":"YulCase","src":"20375:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"20241:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20253:2:164","type":"","value":"20"},{"kind":"number","nodeType":"YulLiteral","src":"20257:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"20249:3:164"},"nodeType":"YulFunctionCall","src":"20249:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20237:3:164"},"nodeType":"YulFunctionCall","src":"20237:23:164"},"nodeType":"YulSwitch","src":"20230:256:164"},{"nodeType":"YulAssignment","src":"20500:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20522:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20525:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"20512:9:164"},"nodeType":"YulFunctionCall","src":"20512:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"20500:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"20209:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"20212:2:164","type":"","value":"20"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"20206:2:164"},"nodeType":"YulFunctionCall","src":"20206:9:164"},"nodeType":"YulIf","src":"20203:339:164"},{"body":{"nodeType":"YulBlock","src":"20567:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"20631:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20654:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"20657:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20647:6:164"},"nodeType":"YulFunctionCall","src":"20647:19:164"},"nodeType":"YulExpressionStatement","src":"20647:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20688:4:164","type":"","value":"0x20"},{"name":"Z_21","nodeType":"YulIdentifier","src":"20694:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20681:6:164"},"nodeType":"YulFunctionCall","src":"20681:18:164"},"nodeType":"YulExpressionStatement","src":"20681:18:164"}]},"nodeType":"YulCase","src":"20624:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"20629:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"20734:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20757:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"20770:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"20781:2:164","type":"","value":"21"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20766:3:164"},"nodeType":"YulFunctionCall","src":"20766:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"20760:5:164"},"nodeType":"YulFunctionCall","src":"20760:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20750:6:164"},"nodeType":"YulFunctionCall","src":"20750:36:164"},"nodeType":"YulExpressionStatement","src":"20750:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20808:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"20814:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20801:6:164"},"nodeType":"YulFunctionCall","src":"20801:22:164"},"nodeType":"YulExpressionStatement","src":"20801:22:164"}]},"nodeType":"YulCase","src":"20726:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"20592:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20604:2:164","type":"","value":"21"},{"kind":"number","nodeType":"YulLiteral","src":"20608:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"20600:3:164"},"nodeType":"YulFunctionCall","src":"20600:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20588:3:164"},"nodeType":"YulFunctionCall","src":"20588:23:164"},"nodeType":"YulSwitch","src":"20581:256:164"},{"nodeType":"YulAssignment","src":"20851:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20873:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20876:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"20863:9:164"},"nodeType":"YulFunctionCall","src":"20863:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"20851:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"20560:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"20563:2:164","type":"","value":"21"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"20557:2:164"},"nodeType":"YulFunctionCall","src":"20557:9:164"},"nodeType":"YulIf","src":"20554:339:164"},{"body":{"nodeType":"YulBlock","src":"20918:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"20982:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21005:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"21008:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20998:6:164"},"nodeType":"YulFunctionCall","src":"20998:19:164"},"nodeType":"YulExpressionStatement","src":"20998:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21039:4:164","type":"","value":"0x20"},{"name":"Z_22","nodeType":"YulIdentifier","src":"21045:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21032:6:164"},"nodeType":"YulFunctionCall","src":"21032:18:164"},"nodeType":"YulExpressionStatement","src":"21032:18:164"}]},"nodeType":"YulCase","src":"20975:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"20980:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"21085:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21108:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"21121:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"21132:2:164","type":"","value":"22"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21117:3:164"},"nodeType":"YulFunctionCall","src":"21117:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"21111:5:164"},"nodeType":"YulFunctionCall","src":"21111:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21101:6:164"},"nodeType":"YulFunctionCall","src":"21101:36:164"},"nodeType":"YulExpressionStatement","src":"21101:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21159:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"21165:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21152:6:164"},"nodeType":"YulFunctionCall","src":"21152:22:164"},"nodeType":"YulExpressionStatement","src":"21152:22:164"}]},"nodeType":"YulCase","src":"21077:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"20943:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20955:2:164","type":"","value":"22"},{"kind":"number","nodeType":"YulLiteral","src":"20959:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"20951:3:164"},"nodeType":"YulFunctionCall","src":"20951:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20939:3:164"},"nodeType":"YulFunctionCall","src":"20939:23:164"},"nodeType":"YulSwitch","src":"20932:256:164"},{"nodeType":"YulAssignment","src":"21202:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21224:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21227:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"21214:9:164"},"nodeType":"YulFunctionCall","src":"21214:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"21202:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"20911:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"20914:2:164","type":"","value":"22"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"20908:2:164"},"nodeType":"YulFunctionCall","src":"20908:9:164"},"nodeType":"YulIf","src":"20905:339:164"},{"body":{"nodeType":"YulBlock","src":"21269:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"21333:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21356:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"21359:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21349:6:164"},"nodeType":"YulFunctionCall","src":"21349:19:164"},"nodeType":"YulExpressionStatement","src":"21349:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21390:4:164","type":"","value":"0x20"},{"name":"Z_23","nodeType":"YulIdentifier","src":"21396:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21383:6:164"},"nodeType":"YulFunctionCall","src":"21383:18:164"},"nodeType":"YulExpressionStatement","src":"21383:18:164"}]},"nodeType":"YulCase","src":"21326:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"21331:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"21436:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21459:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"21472:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"21483:2:164","type":"","value":"23"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21468:3:164"},"nodeType":"YulFunctionCall","src":"21468:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"21462:5:164"},"nodeType":"YulFunctionCall","src":"21462:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21452:6:164"},"nodeType":"YulFunctionCall","src":"21452:36:164"},"nodeType":"YulExpressionStatement","src":"21452:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21510:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"21516:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21503:6:164"},"nodeType":"YulFunctionCall","src":"21503:22:164"},"nodeType":"YulExpressionStatement","src":"21503:22:164"}]},"nodeType":"YulCase","src":"21428:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"21294:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21306:2:164","type":"","value":"23"},{"kind":"number","nodeType":"YulLiteral","src":"21310:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21302:3:164"},"nodeType":"YulFunctionCall","src":"21302:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21290:3:164"},"nodeType":"YulFunctionCall","src":"21290:23:164"},"nodeType":"YulSwitch","src":"21283:256:164"},{"nodeType":"YulAssignment","src":"21553:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21575:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21578:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"21565:9:164"},"nodeType":"YulFunctionCall","src":"21565:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"21553:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"21262:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"21265:2:164","type":"","value":"23"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"21259:2:164"},"nodeType":"YulFunctionCall","src":"21259:9:164"},"nodeType":"YulIf","src":"21256:339:164"},{"body":{"nodeType":"YulBlock","src":"21620:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"21684:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21707:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"21710:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21700:6:164"},"nodeType":"YulFunctionCall","src":"21700:19:164"},"nodeType":"YulExpressionStatement","src":"21700:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21741:4:164","type":"","value":"0x20"},{"name":"Z_24","nodeType":"YulIdentifier","src":"21747:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21734:6:164"},"nodeType":"YulFunctionCall","src":"21734:18:164"},"nodeType":"YulExpressionStatement","src":"21734:18:164"}]},"nodeType":"YulCase","src":"21677:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"21682:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"21787:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21810:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"21823:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"21834:2:164","type":"","value":"24"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21819:3:164"},"nodeType":"YulFunctionCall","src":"21819:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"21813:5:164"},"nodeType":"YulFunctionCall","src":"21813:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21803:6:164"},"nodeType":"YulFunctionCall","src":"21803:36:164"},"nodeType":"YulExpressionStatement","src":"21803:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21861:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"21867:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21854:6:164"},"nodeType":"YulFunctionCall","src":"21854:22:164"},"nodeType":"YulExpressionStatement","src":"21854:22:164"}]},"nodeType":"YulCase","src":"21779:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"21645:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21657:2:164","type":"","value":"24"},{"kind":"number","nodeType":"YulLiteral","src":"21661:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21653:3:164"},"nodeType":"YulFunctionCall","src":"21653:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21641:3:164"},"nodeType":"YulFunctionCall","src":"21641:23:164"},"nodeType":"YulSwitch","src":"21634:256:164"},{"nodeType":"YulAssignment","src":"21904:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21926:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21929:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"21916:9:164"},"nodeType":"YulFunctionCall","src":"21916:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"21904:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"21613:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"21616:2:164","type":"","value":"24"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"21610:2:164"},"nodeType":"YulFunctionCall","src":"21610:9:164"},"nodeType":"YulIf","src":"21607:339:164"},{"body":{"nodeType":"YulBlock","src":"21971:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"22035:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22058:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"22061:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22051:6:164"},"nodeType":"YulFunctionCall","src":"22051:19:164"},"nodeType":"YulExpressionStatement","src":"22051:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22092:4:164","type":"","value":"0x20"},{"name":"Z_25","nodeType":"YulIdentifier","src":"22098:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22085:6:164"},"nodeType":"YulFunctionCall","src":"22085:18:164"},"nodeType":"YulExpressionStatement","src":"22085:18:164"}]},"nodeType":"YulCase","src":"22028:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"22033:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"22138:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22161:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"22174:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"22185:2:164","type":"","value":"25"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22170:3:164"},"nodeType":"YulFunctionCall","src":"22170:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"22164:5:164"},"nodeType":"YulFunctionCall","src":"22164:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22154:6:164"},"nodeType":"YulFunctionCall","src":"22154:36:164"},"nodeType":"YulExpressionStatement","src":"22154:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22212:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"22218:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22205:6:164"},"nodeType":"YulFunctionCall","src":"22205:22:164"},"nodeType":"YulExpressionStatement","src":"22205:22:164"}]},"nodeType":"YulCase","src":"22130:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"21996:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22008:2:164","type":"","value":"25"},{"kind":"number","nodeType":"YulLiteral","src":"22012:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"22004:3:164"},"nodeType":"YulFunctionCall","src":"22004:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21992:3:164"},"nodeType":"YulFunctionCall","src":"21992:23:164"},"nodeType":"YulSwitch","src":"21985:256:164"},{"nodeType":"YulAssignment","src":"22255:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22277:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22280:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"22267:9:164"},"nodeType":"YulFunctionCall","src":"22267:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"22255:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"21964:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"21967:2:164","type":"","value":"25"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"21961:2:164"},"nodeType":"YulFunctionCall","src":"21961:9:164"},"nodeType":"YulIf","src":"21958:339:164"},{"body":{"nodeType":"YulBlock","src":"22322:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"22386:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22409:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"22412:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22402:6:164"},"nodeType":"YulFunctionCall","src":"22402:19:164"},"nodeType":"YulExpressionStatement","src":"22402:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22443:4:164","type":"","value":"0x20"},{"name":"Z_26","nodeType":"YulIdentifier","src":"22449:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22436:6:164"},"nodeType":"YulFunctionCall","src":"22436:18:164"},"nodeType":"YulExpressionStatement","src":"22436:18:164"}]},"nodeType":"YulCase","src":"22379:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"22384:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"22489:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22512:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"22525:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"22536:2:164","type":"","value":"26"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22521:3:164"},"nodeType":"YulFunctionCall","src":"22521:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"22515:5:164"},"nodeType":"YulFunctionCall","src":"22515:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22505:6:164"},"nodeType":"YulFunctionCall","src":"22505:36:164"},"nodeType":"YulExpressionStatement","src":"22505:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22563:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"22569:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22556:6:164"},"nodeType":"YulFunctionCall","src":"22556:22:164"},"nodeType":"YulExpressionStatement","src":"22556:22:164"}]},"nodeType":"YulCase","src":"22481:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"22347:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22359:2:164","type":"","value":"26"},{"kind":"number","nodeType":"YulLiteral","src":"22363:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"22355:3:164"},"nodeType":"YulFunctionCall","src":"22355:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22343:3:164"},"nodeType":"YulFunctionCall","src":"22343:23:164"},"nodeType":"YulSwitch","src":"22336:256:164"},{"nodeType":"YulAssignment","src":"22606:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22628:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22631:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"22618:9:164"},"nodeType":"YulFunctionCall","src":"22618:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"22606:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"22315:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"22318:2:164","type":"","value":"26"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"22312:2:164"},"nodeType":"YulFunctionCall","src":"22312:9:164"},"nodeType":"YulIf","src":"22309:339:164"},{"body":{"nodeType":"YulBlock","src":"22673:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"22737:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22760:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"22763:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22753:6:164"},"nodeType":"YulFunctionCall","src":"22753:19:164"},"nodeType":"YulExpressionStatement","src":"22753:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22794:4:164","type":"","value":"0x20"},{"name":"Z_27","nodeType":"YulIdentifier","src":"22800:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22787:6:164"},"nodeType":"YulFunctionCall","src":"22787:18:164"},"nodeType":"YulExpressionStatement","src":"22787:18:164"}]},"nodeType":"YulCase","src":"22730:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"22735:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"22840:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22863:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"22876:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"22887:2:164","type":"","value":"27"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22872:3:164"},"nodeType":"YulFunctionCall","src":"22872:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"22866:5:164"},"nodeType":"YulFunctionCall","src":"22866:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22856:6:164"},"nodeType":"YulFunctionCall","src":"22856:36:164"},"nodeType":"YulExpressionStatement","src":"22856:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22914:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"22920:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22907:6:164"},"nodeType":"YulFunctionCall","src":"22907:22:164"},"nodeType":"YulExpressionStatement","src":"22907:22:164"}]},"nodeType":"YulCase","src":"22832:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"22698:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22710:2:164","type":"","value":"27"},{"kind":"number","nodeType":"YulLiteral","src":"22714:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"22706:3:164"},"nodeType":"YulFunctionCall","src":"22706:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22694:3:164"},"nodeType":"YulFunctionCall","src":"22694:23:164"},"nodeType":"YulSwitch","src":"22687:256:164"},{"nodeType":"YulAssignment","src":"22957:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22979:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22982:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"22969:9:164"},"nodeType":"YulFunctionCall","src":"22969:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"22957:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"22666:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"22669:2:164","type":"","value":"27"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"22663:2:164"},"nodeType":"YulFunctionCall","src":"22663:9:164"},"nodeType":"YulIf","src":"22660:339:164"},{"body":{"nodeType":"YulBlock","src":"23024:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"23088:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23111:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"23114:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23104:6:164"},"nodeType":"YulFunctionCall","src":"23104:19:164"},"nodeType":"YulExpressionStatement","src":"23104:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23145:4:164","type":"","value":"0x20"},{"name":"Z_28","nodeType":"YulIdentifier","src":"23151:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23138:6:164"},"nodeType":"YulFunctionCall","src":"23138:18:164"},"nodeType":"YulExpressionStatement","src":"23138:18:164"}]},"nodeType":"YulCase","src":"23081:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"23086:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"23191:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23214:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"23227:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"23238:2:164","type":"","value":"28"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23223:3:164"},"nodeType":"YulFunctionCall","src":"23223:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"23217:5:164"},"nodeType":"YulFunctionCall","src":"23217:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23207:6:164"},"nodeType":"YulFunctionCall","src":"23207:36:164"},"nodeType":"YulExpressionStatement","src":"23207:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23265:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"23271:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23258:6:164"},"nodeType":"YulFunctionCall","src":"23258:22:164"},"nodeType":"YulExpressionStatement","src":"23258:22:164"}]},"nodeType":"YulCase","src":"23183:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"23049:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23061:2:164","type":"","value":"28"},{"kind":"number","nodeType":"YulLiteral","src":"23065:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"23057:3:164"},"nodeType":"YulFunctionCall","src":"23057:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23045:3:164"},"nodeType":"YulFunctionCall","src":"23045:23:164"},"nodeType":"YulSwitch","src":"23038:256:164"},{"nodeType":"YulAssignment","src":"23308:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23330:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23333:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"23320:9:164"},"nodeType":"YulFunctionCall","src":"23320:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"23308:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"23017:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"23020:2:164","type":"","value":"28"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"23014:2:164"},"nodeType":"YulFunctionCall","src":"23014:9:164"},"nodeType":"YulIf","src":"23011:339:164"},{"body":{"nodeType":"YulBlock","src":"23375:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"23439:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23462:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"23465:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23455:6:164"},"nodeType":"YulFunctionCall","src":"23455:19:164"},"nodeType":"YulExpressionStatement","src":"23455:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23496:4:164","type":"","value":"0x20"},{"name":"Z_29","nodeType":"YulIdentifier","src":"23502:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23489:6:164"},"nodeType":"YulFunctionCall","src":"23489:18:164"},"nodeType":"YulExpressionStatement","src":"23489:18:164"}]},"nodeType":"YulCase","src":"23432:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"23437:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"23542:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23565:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"23578:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"23589:2:164","type":"","value":"29"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23574:3:164"},"nodeType":"YulFunctionCall","src":"23574:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"23568:5:164"},"nodeType":"YulFunctionCall","src":"23568:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23558:6:164"},"nodeType":"YulFunctionCall","src":"23558:36:164"},"nodeType":"YulExpressionStatement","src":"23558:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23616:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"23622:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23609:6:164"},"nodeType":"YulFunctionCall","src":"23609:22:164"},"nodeType":"YulExpressionStatement","src":"23609:22:164"}]},"nodeType":"YulCase","src":"23534:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"23400:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23412:2:164","type":"","value":"29"},{"kind":"number","nodeType":"YulLiteral","src":"23416:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"23408:3:164"},"nodeType":"YulFunctionCall","src":"23408:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23396:3:164"},"nodeType":"YulFunctionCall","src":"23396:23:164"},"nodeType":"YulSwitch","src":"23389:256:164"},{"nodeType":"YulAssignment","src":"23659:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23681:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23684:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"23671:9:164"},"nodeType":"YulFunctionCall","src":"23671:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"23659:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"23368:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"23371:2:164","type":"","value":"29"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"23365:2:164"},"nodeType":"YulFunctionCall","src":"23365:9:164"},"nodeType":"YulIf","src":"23362:339:164"},{"body":{"nodeType":"YulBlock","src":"23726:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"23790:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23813:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"23816:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23806:6:164"},"nodeType":"YulFunctionCall","src":"23806:19:164"},"nodeType":"YulExpressionStatement","src":"23806:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23847:4:164","type":"","value":"0x20"},{"name":"Z_30","nodeType":"YulIdentifier","src":"23853:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23840:6:164"},"nodeType":"YulFunctionCall","src":"23840:18:164"},"nodeType":"YulExpressionStatement","src":"23840:18:164"}]},"nodeType":"YulCase","src":"23783:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"23788:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"23893:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23916:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"23929:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"23940:2:164","type":"","value":"30"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23925:3:164"},"nodeType":"YulFunctionCall","src":"23925:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"23919:5:164"},"nodeType":"YulFunctionCall","src":"23919:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23909:6:164"},"nodeType":"YulFunctionCall","src":"23909:36:164"},"nodeType":"YulExpressionStatement","src":"23909:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23967:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"23973:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23960:6:164"},"nodeType":"YulFunctionCall","src":"23960:22:164"},"nodeType":"YulExpressionStatement","src":"23960:22:164"}]},"nodeType":"YulCase","src":"23885:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"23751:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23763:2:164","type":"","value":"30"},{"kind":"number","nodeType":"YulLiteral","src":"23767:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"23759:3:164"},"nodeType":"YulFunctionCall","src":"23759:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23747:3:164"},"nodeType":"YulFunctionCall","src":"23747:23:164"},"nodeType":"YulSwitch","src":"23740:256:164"},{"nodeType":"YulAssignment","src":"24010:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24032:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"24035:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"24022:9:164"},"nodeType":"YulFunctionCall","src":"24022:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"24010:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"23719:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"23722:2:164","type":"","value":"30"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"23716:2:164"},"nodeType":"YulFunctionCall","src":"23716:9:164"},"nodeType":"YulIf","src":"23713:339:164"},{"body":{"nodeType":"YulBlock","src":"24077:326:164","statements":[{"cases":[{"body":{"nodeType":"YulBlock","src":"24141:82:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24164:1:164","type":"","value":"0"},{"name":"_current","nodeType":"YulIdentifier","src":"24167:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24157:6:164"},"nodeType":"YulFunctionCall","src":"24157:19:164"},"nodeType":"YulExpressionStatement","src":"24157:19:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24198:4:164","type":"","value":"0x20"},{"name":"Z_31","nodeType":"YulIdentifier","src":"24204:4:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24191:6:164"},"nodeType":"YulFunctionCall","src":"24191:18:164"},"nodeType":"YulExpressionStatement","src":"24191:18:164"}]},"nodeType":"YulCase","src":"24134:89:164","value":{"kind":"number","nodeType":"YulLiteral","src":"24139:1:164","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"24244:103:164","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24267:1:164","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"TREE_SLOT","nodeType":"YulIdentifier","src":"24280:9:164"},{"kind":"number","nodeType":"YulLiteral","src":"24291:2:164","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24276:3:164"},"nodeType":"YulFunctionCall","src":"24276:18:164"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"24270:5:164"},"nodeType":"YulFunctionCall","src":"24270:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24260:6:164"},"nodeType":"YulFunctionCall","src":"24260:36:164"},"nodeType":"YulExpressionStatement","src":"24260:36:164"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24318:4:164","type":"","value":"0x20"},{"name":"_current","nodeType":"YulIdentifier","src":"24324:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24311:6:164"},"nodeType":"YulFunctionCall","src":"24311:22:164"},"nodeType":"YulExpressionStatement","src":"24311:22:164"}]},"nodeType":"YulCase","src":"24236:111:164","value":"default"}],"expression":{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"24102:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24114:2:164","type":"","value":"31"},{"kind":"number","nodeType":"YulLiteral","src":"24118:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"24110:3:164"},"nodeType":"YulFunctionCall","src":"24110:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24098:3:164"},"nodeType":"YulFunctionCall","src":"24098:23:164"},"nodeType":"YulSwitch","src":"24091:256:164"},{"nodeType":"YulAssignment","src":"24361:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24383:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"24386:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"24373:9:164"},"nodeType":"YulFunctionCall","src":"24373:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"24361:8:164"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"24070:1:164"},{"kind":"number","nodeType":"YulLiteral","src":"24073:2:164","type":"","value":"31"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"24067:2:164"},"nodeType":"YulFunctionCall","src":"24067:9:164"},"nodeType":"YulIf","src":"24064:339:164"}]},{"nodeType":"YulBreak","src":"24423:5:164"}]},"condition":{"kind":"bool","nodeType":"YulLiteral","src":"6624:4:164","type":"","value":"true"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6629:10:164","statements":[]},"pre":{"nodeType":"YulBlock","src":"6613:10:164","statements":[]},"src":"6609:17827:164"}]},"evmVersion":"london","externalReferences":[{"declaration":48777,"isOffset":false,"isSlot":false,"src":"6782:3:164","valueSize":1},{"declaration":48780,"isOffset":false,"isSlot":false,"src":"13708:3:164","valueSize":1},{"declaration":48780,"isOffset":false,"isSlot":false,"src":"6972:3:164","valueSize":1},{"declaration":48807,"isOffset":false,"isSlot":false,"src":"16833:4:164","valueSize":1},{"declaration":48807,"isOffset":false,"isSlot":false,"src":"8855:4:164","valueSize":1},{"declaration":48810,"isOffset":false,"isSlot":false,"src":"17184:4:164","valueSize":1},{"declaration":48810,"isOffset":false,"isSlot":false,"src":"9068:4:164","valueSize":1},{"declaration":48813,"isOffset":false,"isSlot":false,"src":"17535:4:164","valueSize":1},{"declaration":48813,"isOffset":false,"isSlot":false,"src":"9281:4:164","valueSize":1},{"declaration":48816,"isOffset":false,"isSlot":false,"src":"17886:4:164","valueSize":1},{"declaration":48816,"isOffset":false,"isSlot":false,"src":"9494:4:164","valueSize":1},{"declaration":48819,"isOffset":false,"isSlot":false,"src":"18237:4:164","valueSize":1},{"declaration":48819,"isOffset":false,"isSlot":false,"src":"9707:4:164","valueSize":1},{"declaration":48822,"isOffset":false,"isSlot":false,"src":"18588:4:164","valueSize":1},{"declaration":48822,"isOffset":false,"isSlot":false,"src":"9920:4:164","valueSize":1},{"declaration":48825,"isOffset":false,"isSlot":false,"src":"10133:4:164","valueSize":1},{"declaration":48825,"isOffset":false,"isSlot":false,"src":"18939:4:164","valueSize":1},{"declaration":48828,"isOffset":false,"isSlot":false,"src":"10346:4:164","valueSize":1},{"declaration":48828,"isOffset":false,"isSlot":false,"src":"19290:4:164","valueSize":1},{"declaration":48831,"isOffset":false,"isSlot":false,"src":"10559:4:164","valueSize":1},{"declaration":48831,"isOffset":false,"isSlot":false,"src":"19641:4:164","valueSize":1},{"declaration":48834,"isOffset":false,"isSlot":false,"src":"10772:4:164","valueSize":1},{"declaration":48834,"isOffset":false,"isSlot":false,"src":"19992:4:164","valueSize":1},{"declaration":48783,"isOffset":false,"isSlot":false,"src":"14055:3:164","valueSize":1},{"declaration":48783,"isOffset":false,"isSlot":false,"src":"7181:3:164","valueSize":1},{"declaration":48837,"isOffset":false,"isSlot":false,"src":"10985:4:164","valueSize":1},{"declaration":48837,"isOffset":false,"isSlot":false,"src":"20343:4:164","valueSize":1},{"declaration":48840,"isOffset":false,"isSlot":false,"src":"11198:4:164","valueSize":1},{"declaration":48840,"isOffset":false,"isSlot":false,"src":"20694:4:164","valueSize":1},{"declaration":48843,"isOffset":false,"isSlot":false,"src":"11411:4:164","valueSize":1},{"declaration":48843,"isOffset":false,"isSlot":false,"src":"21045:4:164","valueSize":1},{"declaration":48846,"isOffset":false,"isSlot":false,"src":"11624:4:164","valueSize":1},{"declaration":48846,"isOffset":false,"isSlot":false,"src":"21396:4:164","valueSize":1},{"declaration":48849,"isOffset":false,"isSlot":false,"src":"11837:4:164","valueSize":1},{"declaration":48849,"isOffset":false,"isSlot":false,"src":"21747:4:164","valueSize":1},{"declaration":48852,"isOffset":false,"isSlot":false,"src":"12050:4:164","valueSize":1},{"declaration":48852,"isOffset":false,"isSlot":false,"src":"22098:4:164","valueSize":1},{"declaration":48855,"isOffset":false,"isSlot":false,"src":"12263:4:164","valueSize":1},{"declaration":48855,"isOffset":false,"isSlot":false,"src":"22449:4:164","valueSize":1},{"declaration":48858,"isOffset":false,"isSlot":false,"src":"12476:4:164","valueSize":1},{"declaration":48858,"isOffset":false,"isSlot":false,"src":"22800:4:164","valueSize":1},{"declaration":48861,"isOffset":false,"isSlot":false,"src":"12689:4:164","valueSize":1},{"declaration":48861,"isOffset":false,"isSlot":false,"src":"23151:4:164","valueSize":1},{"declaration":48864,"isOffset":false,"isSlot":false,"src":"12902:4:164","valueSize":1},{"declaration":48864,"isOffset":false,"isSlot":false,"src":"23502:4:164","valueSize":1},{"declaration":48786,"isOffset":false,"isSlot":false,"src":"14402:3:164","valueSize":1},{"declaration":48786,"isOffset":false,"isSlot":false,"src":"7390:3:164","valueSize":1},{"declaration":48867,"isOffset":false,"isSlot":false,"src":"13115:4:164","valueSize":1},{"declaration":48867,"isOffset":false,"isSlot":false,"src":"23853:4:164","valueSize":1},{"declaration":48870,"isOffset":false,"isSlot":false,"src":"13328:4:164","valueSize":1},{"declaration":48870,"isOffset":false,"isSlot":false,"src":"24204:4:164","valueSize":1},{"declaration":48873,"isOffset":false,"isSlot":false,"src":"13450:4:164","valueSize":1},{"declaration":48789,"isOffset":false,"isSlot":false,"src":"14749:3:164","valueSize":1},{"declaration":48789,"isOffset":false,"isSlot":false,"src":"7599:3:164","valueSize":1},{"declaration":48792,"isOffset":false,"isSlot":false,"src":"15096:3:164","valueSize":1},{"declaration":48792,"isOffset":false,"isSlot":false,"src":"7808:3:164","valueSize":1},{"declaration":48795,"isOffset":false,"isSlot":false,"src":"15443:3:164","valueSize":1},{"declaration":48795,"isOffset":false,"isSlot":false,"src":"8017:3:164","valueSize":1},{"declaration":48798,"isOffset":false,"isSlot":false,"src":"15790:3:164","valueSize":1},{"declaration":48798,"isOffset":false,"isSlot":false,"src":"8226:3:164","valueSize":1},{"declaration":48801,"isOffset":false,"isSlot":false,"src":"16137:3:164","valueSize":1},{"declaration":48801,"isOffset":false,"isSlot":false,"src":"8435:3:164","valueSize":1},{"declaration":48804,"isOffset":false,"isSlot":false,"src":"16484:3:164","valueSize":1},{"declaration":48804,"isOffset":false,"isSlot":false,"src":"8644:3:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"10151:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"10364:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"10577:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"10790:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"11003:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"11216:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"11429:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"11642:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"11855:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"12068:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"12281:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"12494:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"12707:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"12920:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"13133:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"13346:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"13438:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"13671:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"13826:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"13863:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"14018:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"14173:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"14210:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"14365:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"14520:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"14557:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"14712:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"14867:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"14904:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"15059:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"15214:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"15251:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"15406:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"15561:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"15598:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"15753:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"15908:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"15945:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"16100:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"16255:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"16292:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"16447:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"16602:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"16639:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"16796:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"16953:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"16990:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"17147:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"17304:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"17341:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"17498:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"17655:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"17692:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"17849:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"18006:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"18043:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"18200:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"18357:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"18394:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"18551:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"18708:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"18745:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"18902:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"19059:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"19096:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"19253:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"19410:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"19447:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"19604:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"19761:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"19798:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"19955:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"20112:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"20149:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"20306:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"20463:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"20500:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"20657:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"20814:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"20851:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"21008:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"21165:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"21202:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"21359:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"21516:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"21553:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"21710:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"21867:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"21904:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"22061:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"22218:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"22255:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"22412:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"22569:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"22606:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"22763:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"22920:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"22957:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"23114:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"23271:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"23308:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"23465:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"23622:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"23659:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"23816:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"23973:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"24010:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"24167:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"24324:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"24361:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"6799:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"6989:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"7198:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"7407:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"7616:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"7825:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"8034:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"8243:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"8452:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"8661:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"8873:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"9086:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"9299:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"9512:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"9725:8:164","valueSize":1},{"declaration":48963,"isOffset":false,"isSlot":false,"src":"9938:8:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"10037:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"10250:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"10463:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"10676:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"10889:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"11102:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"11315:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"11528:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"11741:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"11954:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"12167:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"12380:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"12593:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"12806:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"13019:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"13232:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"13607:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"13954:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"14301:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"14648:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"14995:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"15342:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"15689:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"16036:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"16383:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"16731:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"17082:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"17433:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"17784:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"18135:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"18486:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"18837:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"19188:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"19539:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"19890:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"20241:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"20592:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"20943:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"21294:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"21645:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"21996:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"22347:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"22698:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"23049:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"23400:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"23751:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"24102:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"6704:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"6878:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"7087:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"7296:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"7505:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"7714:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"7923:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"8132:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"8341:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"8550:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"8759:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"8972:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"9185:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"9398:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"9611:6:164","valueSize":1},{"declaration":48966,"isOffset":false,"isSlot":false,"src":"9824:6:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"10194:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"10407:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"10620:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"10833:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"11046:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"11259:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"11472:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"11685:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"11898:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"12111:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"12324:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"12537:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"12750:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"12963:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"13176:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"13389:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"13465:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"13514:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"13576:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"13923:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"14270:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"14617:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"14964:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"15311:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"15658:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"16005:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"16352:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"16699:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"17050:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"17401:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"17752:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"18103:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"18454:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"18805:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"19156:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"19507:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"19858:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"20209:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"20560:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"20911:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"21262:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"21613:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"21964:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"22315:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"22666:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"23017:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"23368:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"23719:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"24070:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"7032:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"7241:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"7450:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"7659:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"7868:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"8077:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"8286:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"8495:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"8704:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"8916:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"9129:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"9342:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"9555:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"9768:1:164","valueSize":1},{"declaration":48978,"isOffset":false,"isSlot":false,"src":"9981:1:164","valueSize":1},{"declaration":48960,"isOffset":false,"isSlot":true,"src":"6592:9:164","suffix":"slot","valueSize":1}],"id":48980,"nodeType":"InlineAssembly","src":"6558:17884:164"}]},"documentation":{"id":48957,"nodeType":"StructuredDocumentation","src":"6274:103:164","text":" @notice Calculates and returns tree's current root.\n @return _current bytes32 root.*"},"id":48982,"implemented":true,"kind":"function","modifiers":[],"name":"root","nameLocation":"6389:4:164","nodeType":"FunctionDefinition","parameters":{"id":48961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48960,"mutability":"mutable","name":"tree","nameLocation":"6407:4:164","nodeType":"VariableDeclaration","scope":48982,"src":"6394:17:164","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage_ptr","typeString":"struct MerkleLib.Tree"},"typeName":{"id":48959,"nodeType":"UserDefinedTypeName","pathNode":{"id":48958,"name":"Tree","nameLocations":["6394:4:164"],"nodeType":"IdentifierPath","referencedDeclaration":48880,"src":"6394:4:164"},"referencedDeclaration":48880,"src":"6394:4:164","typeDescriptions":{"typeIdentifier":"t_struct$_Tree_$48880_storage_ptr","typeString":"struct MerkleLib.Tree"}},"visibility":"internal"}],"src":"6393:19:164"},"returnParameters":{"id":48964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48963,"mutability":"mutable","name":"_current","nameLocation":"6444:8:164","nodeType":"VariableDeclaration","scope":48982,"src":"6436:16:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48962,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6436:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6435:18:164"},"scope":48999,"src":"6380:18066:164","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":48997,"nodeType":"Block","src":"24899:6002:164","statements":[{"AST":{"nodeType":"YulBlock","src":"24914:5983:164","statements":[{"nodeType":"YulAssignment","src":"24922:17:164","value":{"name":"_item","nodeType":"YulIdentifier","src":"24934:5:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"24922:8:164"}]},{"nodeType":"YulVariableDeclaration","src":"24946:33:164","value":{"name":"_branch","nodeType":"YulIdentifier","src":"24972:7:164"},"variables":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulTypedName","src":"24950:18:164","type":""}]},{"nodeType":"YulVariableDeclaration","src":"24986:5:164","variables":[{"name":"f","nodeType":"YulTypedName","src":"24990:1:164","type":""}]},{"nodeType":"YulAssignment","src":"24999:27:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25008:1:164","type":"","value":"5"},{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"25015:6:164"},{"kind":"number","nodeType":"YulLiteral","src":"25023:1:164","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25011:3:164"},"nodeType":"YulFunctionCall","src":"25011:14:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"25004:3:164"},"nodeType":"YulFunctionCall","src":"25004:22:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"24999:1:164"}]},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"25040:1:164"},{"name":"_current","nodeType":"YulIdentifier","src":"25043:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25033:6:164"},"nodeType":"YulFunctionCall","src":"25033:19:164"},"nodeType":"YulExpressionStatement","src":"25033:19:164"},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25070:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"25076:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25066:3:164"},"nodeType":"YulFunctionCall","src":"25066:12:164"},{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"25086:18:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25080:5:164"},"nodeType":"YulFunctionCall","src":"25080:25:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25059:6:164"},"nodeType":"YulFunctionCall","src":"25059:47:164"},"nodeType":"YulExpressionStatement","src":"25059:47:164"},{"nodeType":"YulAssignment","src":"25113:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25135:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"25138:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"25125:9:164"},"nodeType":"YulFunctionCall","src":"25125:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"25113:8:164"}]},{"nodeType":"YulAssignment","src":"25151:43:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25160:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"25174:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25186:1:164","type":"","value":"1"},{"kind":"number","nodeType":"YulLiteral","src":"25189:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"25182:3:164"},"nodeType":"YulFunctionCall","src":"25182:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25170:3:164"},"nodeType":"YulFunctionCall","src":"25170:22:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"25163:6:164"},"nodeType":"YulFunctionCall","src":"25163:30:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"25156:3:164"},"nodeType":"YulFunctionCall","src":"25156:38:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"25151:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25212:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"25218:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25208:3:164"},"nodeType":"YulFunctionCall","src":"25208:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"25222:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25201:6:164"},"nodeType":"YulFunctionCall","src":"25201:30:164"},"nodeType":"YulExpressionStatement","src":"25201:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"25245:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"25258:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25282:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"25285:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"25278:3:164"},"nodeType":"YulFunctionCall","src":"25278:9:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25254:3:164"},"nodeType":"YulFunctionCall","src":"25254:34:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25248:5:164"},"nodeType":"YulFunctionCall","src":"25248:41:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25238:6:164"},"nodeType":"YulFunctionCall","src":"25238:52:164"},"nodeType":"YulExpressionStatement","src":"25238:52:164"},{"nodeType":"YulAssignment","src":"25297:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25319:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"25322:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"25309:9:164"},"nodeType":"YulFunctionCall","src":"25309:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"25297:8:164"}]},{"nodeType":"YulAssignment","src":"25335:43:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25344:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"25358:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25370:1:164","type":"","value":"2"},{"kind":"number","nodeType":"YulLiteral","src":"25373:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"25366:3:164"},"nodeType":"YulFunctionCall","src":"25366:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25354:3:164"},"nodeType":"YulFunctionCall","src":"25354:22:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"25347:6:164"},"nodeType":"YulFunctionCall","src":"25347:30:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"25340:3:164"},"nodeType":"YulFunctionCall","src":"25340:38:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"25335:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25396:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"25402:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25392:3:164"},"nodeType":"YulFunctionCall","src":"25392:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"25406:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25385:6:164"},"nodeType":"YulFunctionCall","src":"25385:30:164"},"nodeType":"YulExpressionStatement","src":"25385:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"25429:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"25442:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25466:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"25469:1:164","type":"","value":"2"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"25462:3:164"},"nodeType":"YulFunctionCall","src":"25462:9:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25438:3:164"},"nodeType":"YulFunctionCall","src":"25438:34:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25432:5:164"},"nodeType":"YulFunctionCall","src":"25432:41:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25422:6:164"},"nodeType":"YulFunctionCall","src":"25422:52:164"},"nodeType":"YulExpressionStatement","src":"25422:52:164"},{"nodeType":"YulAssignment","src":"25481:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25503:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"25506:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"25493:9:164"},"nodeType":"YulFunctionCall","src":"25493:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"25481:8:164"}]},{"nodeType":"YulAssignment","src":"25519:43:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25528:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"25542:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25554:1:164","type":"","value":"3"},{"kind":"number","nodeType":"YulLiteral","src":"25557:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"25550:3:164"},"nodeType":"YulFunctionCall","src":"25550:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25538:3:164"},"nodeType":"YulFunctionCall","src":"25538:22:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"25531:6:164"},"nodeType":"YulFunctionCall","src":"25531:30:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"25524:3:164"},"nodeType":"YulFunctionCall","src":"25524:38:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"25519:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25580:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"25586:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25576:3:164"},"nodeType":"YulFunctionCall","src":"25576:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"25590:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25569:6:164"},"nodeType":"YulFunctionCall","src":"25569:30:164"},"nodeType":"YulExpressionStatement","src":"25569:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"25613:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"25626:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25650:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"25653:1:164","type":"","value":"3"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"25646:3:164"},"nodeType":"YulFunctionCall","src":"25646:9:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25622:3:164"},"nodeType":"YulFunctionCall","src":"25622:34:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25616:5:164"},"nodeType":"YulFunctionCall","src":"25616:41:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25606:6:164"},"nodeType":"YulFunctionCall","src":"25606:52:164"},"nodeType":"YulExpressionStatement","src":"25606:52:164"},{"nodeType":"YulAssignment","src":"25665:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25687:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"25690:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"25677:9:164"},"nodeType":"YulFunctionCall","src":"25677:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"25665:8:164"}]},{"nodeType":"YulAssignment","src":"25703:43:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25712:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"25726:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25738:1:164","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"25741:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"25734:3:164"},"nodeType":"YulFunctionCall","src":"25734:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25722:3:164"},"nodeType":"YulFunctionCall","src":"25722:22:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"25715:6:164"},"nodeType":"YulFunctionCall","src":"25715:30:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"25708:3:164"},"nodeType":"YulFunctionCall","src":"25708:38:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"25703:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25764:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"25770:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25760:3:164"},"nodeType":"YulFunctionCall","src":"25760:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"25774:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25753:6:164"},"nodeType":"YulFunctionCall","src":"25753:30:164"},"nodeType":"YulExpressionStatement","src":"25753:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"25797:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"25810:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25834:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"25837:1:164","type":"","value":"4"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"25830:3:164"},"nodeType":"YulFunctionCall","src":"25830:9:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25806:3:164"},"nodeType":"YulFunctionCall","src":"25806:34:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25800:5:164"},"nodeType":"YulFunctionCall","src":"25800:41:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25790:6:164"},"nodeType":"YulFunctionCall","src":"25790:52:164"},"nodeType":"YulExpressionStatement","src":"25790:52:164"},{"nodeType":"YulAssignment","src":"25849:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25871:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"25874:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"25861:9:164"},"nodeType":"YulFunctionCall","src":"25861:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"25849:8:164"}]},{"nodeType":"YulAssignment","src":"25887:43:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25896:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"25910:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25922:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"25925:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"25918:3:164"},"nodeType":"YulFunctionCall","src":"25918:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25906:3:164"},"nodeType":"YulFunctionCall","src":"25906:22:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"25899:6:164"},"nodeType":"YulFunctionCall","src":"25899:30:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"25892:3:164"},"nodeType":"YulFunctionCall","src":"25892:38:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"25887:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25948:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"25954:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25944:3:164"},"nodeType":"YulFunctionCall","src":"25944:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"25958:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25937:6:164"},"nodeType":"YulFunctionCall","src":"25937:30:164"},"nodeType":"YulExpressionStatement","src":"25937:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"25981:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"25994:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26018:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"26021:1:164","type":"","value":"5"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26014:3:164"},"nodeType":"YulFunctionCall","src":"26014:9:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25990:3:164"},"nodeType":"YulFunctionCall","src":"25990:34:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25984:5:164"},"nodeType":"YulFunctionCall","src":"25984:41:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25974:6:164"},"nodeType":"YulFunctionCall","src":"25974:52:164"},"nodeType":"YulExpressionStatement","src":"25974:52:164"},{"nodeType":"YulAssignment","src":"26033:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26055:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"26058:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"26045:9:164"},"nodeType":"YulFunctionCall","src":"26045:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"26033:8:164"}]},{"nodeType":"YulAssignment","src":"26071:43:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26080:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"26094:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26106:1:164","type":"","value":"6"},{"kind":"number","nodeType":"YulLiteral","src":"26109:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26102:3:164"},"nodeType":"YulFunctionCall","src":"26102:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26090:3:164"},"nodeType":"YulFunctionCall","src":"26090:22:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"26083:6:164"},"nodeType":"YulFunctionCall","src":"26083:30:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26076:3:164"},"nodeType":"YulFunctionCall","src":"26076:38:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"26071:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26132:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"26138:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"26128:3:164"},"nodeType":"YulFunctionCall","src":"26128:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"26142:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26121:6:164"},"nodeType":"YulFunctionCall","src":"26121:30:164"},"nodeType":"YulExpressionStatement","src":"26121:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"26165:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"26178:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26202:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"26205:1:164","type":"","value":"6"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26198:3:164"},"nodeType":"YulFunctionCall","src":"26198:9:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26174:3:164"},"nodeType":"YulFunctionCall","src":"26174:34:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26168:5:164"},"nodeType":"YulFunctionCall","src":"26168:41:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26158:6:164"},"nodeType":"YulFunctionCall","src":"26158:52:164"},"nodeType":"YulExpressionStatement","src":"26158:52:164"},{"nodeType":"YulAssignment","src":"26217:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26239:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"26242:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"26229:9:164"},"nodeType":"YulFunctionCall","src":"26229:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"26217:8:164"}]},{"nodeType":"YulAssignment","src":"26255:43:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26264:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"26278:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26290:1:164","type":"","value":"7"},{"kind":"number","nodeType":"YulLiteral","src":"26293:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26286:3:164"},"nodeType":"YulFunctionCall","src":"26286:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26274:3:164"},"nodeType":"YulFunctionCall","src":"26274:22:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"26267:6:164"},"nodeType":"YulFunctionCall","src":"26267:30:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26260:3:164"},"nodeType":"YulFunctionCall","src":"26260:38:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"26255:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26316:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"26322:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"26312:3:164"},"nodeType":"YulFunctionCall","src":"26312:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"26326:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26305:6:164"},"nodeType":"YulFunctionCall","src":"26305:30:164"},"nodeType":"YulExpressionStatement","src":"26305:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"26349:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"26362:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26386:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"26389:1:164","type":"","value":"7"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26382:3:164"},"nodeType":"YulFunctionCall","src":"26382:9:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26358:3:164"},"nodeType":"YulFunctionCall","src":"26358:34:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26352:5:164"},"nodeType":"YulFunctionCall","src":"26352:41:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26342:6:164"},"nodeType":"YulFunctionCall","src":"26342:52:164"},"nodeType":"YulExpressionStatement","src":"26342:52:164"},{"nodeType":"YulAssignment","src":"26401:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26423:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"26426:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"26413:9:164"},"nodeType":"YulFunctionCall","src":"26413:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"26401:8:164"}]},{"nodeType":"YulAssignment","src":"26439:43:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26448:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"26462:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26474:1:164","type":"","value":"8"},{"kind":"number","nodeType":"YulLiteral","src":"26477:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26470:3:164"},"nodeType":"YulFunctionCall","src":"26470:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26458:3:164"},"nodeType":"YulFunctionCall","src":"26458:22:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"26451:6:164"},"nodeType":"YulFunctionCall","src":"26451:30:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26444:3:164"},"nodeType":"YulFunctionCall","src":"26444:38:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"26439:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26500:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"26506:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"26496:3:164"},"nodeType":"YulFunctionCall","src":"26496:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"26510:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26489:6:164"},"nodeType":"YulFunctionCall","src":"26489:30:164"},"nodeType":"YulExpressionStatement","src":"26489:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"26533:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"26546:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26570:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"26573:1:164","type":"","value":"8"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26566:3:164"},"nodeType":"YulFunctionCall","src":"26566:9:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26542:3:164"},"nodeType":"YulFunctionCall","src":"26542:34:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26536:5:164"},"nodeType":"YulFunctionCall","src":"26536:41:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26526:6:164"},"nodeType":"YulFunctionCall","src":"26526:52:164"},"nodeType":"YulExpressionStatement","src":"26526:52:164"},{"nodeType":"YulAssignment","src":"26585:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26607:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"26610:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"26597:9:164"},"nodeType":"YulFunctionCall","src":"26597:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"26585:8:164"}]},{"nodeType":"YulAssignment","src":"26623:43:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26632:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"26646:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26658:1:164","type":"","value":"9"},{"kind":"number","nodeType":"YulLiteral","src":"26661:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26654:3:164"},"nodeType":"YulFunctionCall","src":"26654:9:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26642:3:164"},"nodeType":"YulFunctionCall","src":"26642:22:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"26635:6:164"},"nodeType":"YulFunctionCall","src":"26635:30:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26628:3:164"},"nodeType":"YulFunctionCall","src":"26628:38:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"26623:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26684:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"26690:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"26680:3:164"},"nodeType":"YulFunctionCall","src":"26680:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"26694:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26673:6:164"},"nodeType":"YulFunctionCall","src":"26673:30:164"},"nodeType":"YulExpressionStatement","src":"26673:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"26717:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"26730:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26754:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"26757:1:164","type":"","value":"9"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26750:3:164"},"nodeType":"YulFunctionCall","src":"26750:9:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26726:3:164"},"nodeType":"YulFunctionCall","src":"26726:34:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26720:5:164"},"nodeType":"YulFunctionCall","src":"26720:41:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26710:6:164"},"nodeType":"YulFunctionCall","src":"26710:52:164"},"nodeType":"YulExpressionStatement","src":"26710:52:164"},{"nodeType":"YulAssignment","src":"26769:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26791:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"26794:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"26781:9:164"},"nodeType":"YulFunctionCall","src":"26781:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"26769:8:164"}]},{"nodeType":"YulAssignment","src":"26807:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26816:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"26830:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26842:2:164","type":"","value":"10"},{"kind":"number","nodeType":"YulLiteral","src":"26846:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26838:3:164"},"nodeType":"YulFunctionCall","src":"26838:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26826:3:164"},"nodeType":"YulFunctionCall","src":"26826:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"26819:6:164"},"nodeType":"YulFunctionCall","src":"26819:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26812:3:164"},"nodeType":"YulFunctionCall","src":"26812:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"26807:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26869:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"26875:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"26865:3:164"},"nodeType":"YulFunctionCall","src":"26865:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"26879:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26858:6:164"},"nodeType":"YulFunctionCall","src":"26858:30:164"},"nodeType":"YulExpressionStatement","src":"26858:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"26902:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"26915:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26939:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"26942:2:164","type":"","value":"10"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26935:3:164"},"nodeType":"YulFunctionCall","src":"26935:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26911:3:164"},"nodeType":"YulFunctionCall","src":"26911:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26905:5:164"},"nodeType":"YulFunctionCall","src":"26905:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26895:6:164"},"nodeType":"YulFunctionCall","src":"26895:53:164"},"nodeType":"YulExpressionStatement","src":"26895:53:164"},{"nodeType":"YulAssignment","src":"26955:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26977:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"26980:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"26967:9:164"},"nodeType":"YulFunctionCall","src":"26967:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"26955:8:164"}]},{"nodeType":"YulAssignment","src":"26993:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27002:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"27016:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27028:2:164","type":"","value":"11"},{"kind":"number","nodeType":"YulLiteral","src":"27032:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"27024:3:164"},"nodeType":"YulFunctionCall","src":"27024:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27012:3:164"},"nodeType":"YulFunctionCall","src":"27012:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"27005:6:164"},"nodeType":"YulFunctionCall","src":"27005:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26998:3:164"},"nodeType":"YulFunctionCall","src":"26998:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"26993:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27055:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"27061:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"27051:3:164"},"nodeType":"YulFunctionCall","src":"27051:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"27065:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27044:6:164"},"nodeType":"YulFunctionCall","src":"27044:30:164"},"nodeType":"YulExpressionStatement","src":"27044:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"27088:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"27101:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27125:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"27128:2:164","type":"","value":"11"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"27121:3:164"},"nodeType":"YulFunctionCall","src":"27121:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27097:3:164"},"nodeType":"YulFunctionCall","src":"27097:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27091:5:164"},"nodeType":"YulFunctionCall","src":"27091:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27081:6:164"},"nodeType":"YulFunctionCall","src":"27081:53:164"},"nodeType":"YulExpressionStatement","src":"27081:53:164"},{"nodeType":"YulAssignment","src":"27141:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27163:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"27166:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"27153:9:164"},"nodeType":"YulFunctionCall","src":"27153:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"27141:8:164"}]},{"nodeType":"YulAssignment","src":"27179:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27188:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"27202:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27214:2:164","type":"","value":"12"},{"kind":"number","nodeType":"YulLiteral","src":"27218:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"27210:3:164"},"nodeType":"YulFunctionCall","src":"27210:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27198:3:164"},"nodeType":"YulFunctionCall","src":"27198:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"27191:6:164"},"nodeType":"YulFunctionCall","src":"27191:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"27184:3:164"},"nodeType":"YulFunctionCall","src":"27184:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"27179:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27241:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"27247:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"27237:3:164"},"nodeType":"YulFunctionCall","src":"27237:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"27251:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27230:6:164"},"nodeType":"YulFunctionCall","src":"27230:30:164"},"nodeType":"YulExpressionStatement","src":"27230:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"27274:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"27287:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27311:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"27314:2:164","type":"","value":"12"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"27307:3:164"},"nodeType":"YulFunctionCall","src":"27307:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27283:3:164"},"nodeType":"YulFunctionCall","src":"27283:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27277:5:164"},"nodeType":"YulFunctionCall","src":"27277:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27267:6:164"},"nodeType":"YulFunctionCall","src":"27267:53:164"},"nodeType":"YulExpressionStatement","src":"27267:53:164"},{"nodeType":"YulAssignment","src":"27327:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27349:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"27352:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"27339:9:164"},"nodeType":"YulFunctionCall","src":"27339:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"27327:8:164"}]},{"nodeType":"YulAssignment","src":"27365:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27374:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"27388:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27400:2:164","type":"","value":"13"},{"kind":"number","nodeType":"YulLiteral","src":"27404:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"27396:3:164"},"nodeType":"YulFunctionCall","src":"27396:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27384:3:164"},"nodeType":"YulFunctionCall","src":"27384:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"27377:6:164"},"nodeType":"YulFunctionCall","src":"27377:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"27370:3:164"},"nodeType":"YulFunctionCall","src":"27370:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"27365:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27427:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"27433:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"27423:3:164"},"nodeType":"YulFunctionCall","src":"27423:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"27437:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27416:6:164"},"nodeType":"YulFunctionCall","src":"27416:30:164"},"nodeType":"YulExpressionStatement","src":"27416:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"27460:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"27473:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27497:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"27500:2:164","type":"","value":"13"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"27493:3:164"},"nodeType":"YulFunctionCall","src":"27493:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27469:3:164"},"nodeType":"YulFunctionCall","src":"27469:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27463:5:164"},"nodeType":"YulFunctionCall","src":"27463:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27453:6:164"},"nodeType":"YulFunctionCall","src":"27453:53:164"},"nodeType":"YulExpressionStatement","src":"27453:53:164"},{"nodeType":"YulAssignment","src":"27513:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27535:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"27538:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"27525:9:164"},"nodeType":"YulFunctionCall","src":"27525:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"27513:8:164"}]},{"nodeType":"YulAssignment","src":"27551:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27560:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"27574:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27586:2:164","type":"","value":"14"},{"kind":"number","nodeType":"YulLiteral","src":"27590:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"27582:3:164"},"nodeType":"YulFunctionCall","src":"27582:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27570:3:164"},"nodeType":"YulFunctionCall","src":"27570:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"27563:6:164"},"nodeType":"YulFunctionCall","src":"27563:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"27556:3:164"},"nodeType":"YulFunctionCall","src":"27556:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"27551:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27613:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"27619:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"27609:3:164"},"nodeType":"YulFunctionCall","src":"27609:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"27623:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27602:6:164"},"nodeType":"YulFunctionCall","src":"27602:30:164"},"nodeType":"YulExpressionStatement","src":"27602:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"27646:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"27659:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27683:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"27686:2:164","type":"","value":"14"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"27679:3:164"},"nodeType":"YulFunctionCall","src":"27679:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27655:3:164"},"nodeType":"YulFunctionCall","src":"27655:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27649:5:164"},"nodeType":"YulFunctionCall","src":"27649:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27639:6:164"},"nodeType":"YulFunctionCall","src":"27639:53:164"},"nodeType":"YulExpressionStatement","src":"27639:53:164"},{"nodeType":"YulAssignment","src":"27699:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27721:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"27724:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"27711:9:164"},"nodeType":"YulFunctionCall","src":"27711:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"27699:8:164"}]},{"nodeType":"YulAssignment","src":"27737:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27746:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"27760:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27772:2:164","type":"","value":"15"},{"kind":"number","nodeType":"YulLiteral","src":"27776:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"27768:3:164"},"nodeType":"YulFunctionCall","src":"27768:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27756:3:164"},"nodeType":"YulFunctionCall","src":"27756:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"27749:6:164"},"nodeType":"YulFunctionCall","src":"27749:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"27742:3:164"},"nodeType":"YulFunctionCall","src":"27742:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"27737:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27799:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"27805:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"27795:3:164"},"nodeType":"YulFunctionCall","src":"27795:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"27809:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27788:6:164"},"nodeType":"YulFunctionCall","src":"27788:30:164"},"nodeType":"YulExpressionStatement","src":"27788:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"27832:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"27845:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27869:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"27872:2:164","type":"","value":"15"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"27865:3:164"},"nodeType":"YulFunctionCall","src":"27865:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27841:3:164"},"nodeType":"YulFunctionCall","src":"27841:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27835:5:164"},"nodeType":"YulFunctionCall","src":"27835:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27825:6:164"},"nodeType":"YulFunctionCall","src":"27825:53:164"},"nodeType":"YulExpressionStatement","src":"27825:53:164"},{"nodeType":"YulAssignment","src":"27885:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27907:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"27910:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"27897:9:164"},"nodeType":"YulFunctionCall","src":"27897:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"27885:8:164"}]},{"nodeType":"YulAssignment","src":"27923:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27932:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"27946:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27958:2:164","type":"","value":"16"},{"kind":"number","nodeType":"YulLiteral","src":"27962:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"27954:3:164"},"nodeType":"YulFunctionCall","src":"27954:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27942:3:164"},"nodeType":"YulFunctionCall","src":"27942:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"27935:6:164"},"nodeType":"YulFunctionCall","src":"27935:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"27928:3:164"},"nodeType":"YulFunctionCall","src":"27928:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"27923:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27985:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"27991:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"27981:3:164"},"nodeType":"YulFunctionCall","src":"27981:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"27995:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27974:6:164"},"nodeType":"YulFunctionCall","src":"27974:30:164"},"nodeType":"YulExpressionStatement","src":"27974:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"28018:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"28031:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28055:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"28058:2:164","type":"","value":"16"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28051:3:164"},"nodeType":"YulFunctionCall","src":"28051:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28027:3:164"},"nodeType":"YulFunctionCall","src":"28027:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28021:5:164"},"nodeType":"YulFunctionCall","src":"28021:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28011:6:164"},"nodeType":"YulFunctionCall","src":"28011:53:164"},"nodeType":"YulExpressionStatement","src":"28011:53:164"},{"nodeType":"YulAssignment","src":"28071:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28093:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28096:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"28083:9:164"},"nodeType":"YulFunctionCall","src":"28083:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"28071:8:164"}]},{"nodeType":"YulAssignment","src":"28109:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28118:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"28132:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28144:2:164","type":"","value":"17"},{"kind":"number","nodeType":"YulLiteral","src":"28148:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28140:3:164"},"nodeType":"YulFunctionCall","src":"28140:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28128:3:164"},"nodeType":"YulFunctionCall","src":"28128:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"28121:6:164"},"nodeType":"YulFunctionCall","src":"28121:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28114:3:164"},"nodeType":"YulFunctionCall","src":"28114:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"28109:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28171:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"28177:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"28167:3:164"},"nodeType":"YulFunctionCall","src":"28167:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"28181:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28160:6:164"},"nodeType":"YulFunctionCall","src":"28160:30:164"},"nodeType":"YulExpressionStatement","src":"28160:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"28204:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"28217:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28241:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"28244:2:164","type":"","value":"17"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28237:3:164"},"nodeType":"YulFunctionCall","src":"28237:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28213:3:164"},"nodeType":"YulFunctionCall","src":"28213:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28207:5:164"},"nodeType":"YulFunctionCall","src":"28207:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28197:6:164"},"nodeType":"YulFunctionCall","src":"28197:53:164"},"nodeType":"YulExpressionStatement","src":"28197:53:164"},{"nodeType":"YulAssignment","src":"28257:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28279:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28282:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"28269:9:164"},"nodeType":"YulFunctionCall","src":"28269:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"28257:8:164"}]},{"nodeType":"YulAssignment","src":"28295:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28304:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"28318:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28330:2:164","type":"","value":"18"},{"kind":"number","nodeType":"YulLiteral","src":"28334:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28326:3:164"},"nodeType":"YulFunctionCall","src":"28326:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28314:3:164"},"nodeType":"YulFunctionCall","src":"28314:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"28307:6:164"},"nodeType":"YulFunctionCall","src":"28307:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28300:3:164"},"nodeType":"YulFunctionCall","src":"28300:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"28295:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28357:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"28363:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"28353:3:164"},"nodeType":"YulFunctionCall","src":"28353:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"28367:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28346:6:164"},"nodeType":"YulFunctionCall","src":"28346:30:164"},"nodeType":"YulExpressionStatement","src":"28346:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"28390:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"28403:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28427:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"28430:2:164","type":"","value":"18"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28423:3:164"},"nodeType":"YulFunctionCall","src":"28423:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28399:3:164"},"nodeType":"YulFunctionCall","src":"28399:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28393:5:164"},"nodeType":"YulFunctionCall","src":"28393:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28383:6:164"},"nodeType":"YulFunctionCall","src":"28383:53:164"},"nodeType":"YulExpressionStatement","src":"28383:53:164"},{"nodeType":"YulAssignment","src":"28443:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28465:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28468:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"28455:9:164"},"nodeType":"YulFunctionCall","src":"28455:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"28443:8:164"}]},{"nodeType":"YulAssignment","src":"28481:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28490:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"28504:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28516:2:164","type":"","value":"19"},{"kind":"number","nodeType":"YulLiteral","src":"28520:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28512:3:164"},"nodeType":"YulFunctionCall","src":"28512:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28500:3:164"},"nodeType":"YulFunctionCall","src":"28500:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"28493:6:164"},"nodeType":"YulFunctionCall","src":"28493:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28486:3:164"},"nodeType":"YulFunctionCall","src":"28486:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"28481:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28543:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"28549:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"28539:3:164"},"nodeType":"YulFunctionCall","src":"28539:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"28553:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28532:6:164"},"nodeType":"YulFunctionCall","src":"28532:30:164"},"nodeType":"YulExpressionStatement","src":"28532:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"28576:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"28589:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28613:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"28616:2:164","type":"","value":"19"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28609:3:164"},"nodeType":"YulFunctionCall","src":"28609:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28585:3:164"},"nodeType":"YulFunctionCall","src":"28585:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28579:5:164"},"nodeType":"YulFunctionCall","src":"28579:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28569:6:164"},"nodeType":"YulFunctionCall","src":"28569:53:164"},"nodeType":"YulExpressionStatement","src":"28569:53:164"},{"nodeType":"YulAssignment","src":"28629:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28651:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28654:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"28641:9:164"},"nodeType":"YulFunctionCall","src":"28641:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"28629:8:164"}]},{"nodeType":"YulAssignment","src":"28667:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28676:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"28690:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28702:2:164","type":"","value":"20"},{"kind":"number","nodeType":"YulLiteral","src":"28706:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28698:3:164"},"nodeType":"YulFunctionCall","src":"28698:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28686:3:164"},"nodeType":"YulFunctionCall","src":"28686:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"28679:6:164"},"nodeType":"YulFunctionCall","src":"28679:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28672:3:164"},"nodeType":"YulFunctionCall","src":"28672:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"28667:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28729:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"28735:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"28725:3:164"},"nodeType":"YulFunctionCall","src":"28725:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"28739:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28718:6:164"},"nodeType":"YulFunctionCall","src":"28718:30:164"},"nodeType":"YulExpressionStatement","src":"28718:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"28762:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"28775:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28799:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"28802:2:164","type":"","value":"20"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28795:3:164"},"nodeType":"YulFunctionCall","src":"28795:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28771:3:164"},"nodeType":"YulFunctionCall","src":"28771:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28765:5:164"},"nodeType":"YulFunctionCall","src":"28765:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28755:6:164"},"nodeType":"YulFunctionCall","src":"28755:53:164"},"nodeType":"YulExpressionStatement","src":"28755:53:164"},{"nodeType":"YulAssignment","src":"28815:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28837:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28840:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"28827:9:164"},"nodeType":"YulFunctionCall","src":"28827:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"28815:8:164"}]},{"nodeType":"YulAssignment","src":"28853:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28862:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"28876:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28888:2:164","type":"","value":"21"},{"kind":"number","nodeType":"YulLiteral","src":"28892:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28884:3:164"},"nodeType":"YulFunctionCall","src":"28884:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28872:3:164"},"nodeType":"YulFunctionCall","src":"28872:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"28865:6:164"},"nodeType":"YulFunctionCall","src":"28865:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28858:3:164"},"nodeType":"YulFunctionCall","src":"28858:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"28853:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28915:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"28921:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"28911:3:164"},"nodeType":"YulFunctionCall","src":"28911:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"28925:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28904:6:164"},"nodeType":"YulFunctionCall","src":"28904:30:164"},"nodeType":"YulExpressionStatement","src":"28904:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"28948:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"28961:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28985:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"28988:2:164","type":"","value":"21"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28981:3:164"},"nodeType":"YulFunctionCall","src":"28981:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28957:3:164"},"nodeType":"YulFunctionCall","src":"28957:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28951:5:164"},"nodeType":"YulFunctionCall","src":"28951:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28941:6:164"},"nodeType":"YulFunctionCall","src":"28941:53:164"},"nodeType":"YulExpressionStatement","src":"28941:53:164"},{"nodeType":"YulAssignment","src":"29001:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29023:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29026:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"29013:9:164"},"nodeType":"YulFunctionCall","src":"29013:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"29001:8:164"}]},{"nodeType":"YulAssignment","src":"29039:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29048:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"29062:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29074:2:164","type":"","value":"22"},{"kind":"number","nodeType":"YulLiteral","src":"29078:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29070:3:164"},"nodeType":"YulFunctionCall","src":"29070:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29058:3:164"},"nodeType":"YulFunctionCall","src":"29058:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29051:6:164"},"nodeType":"YulFunctionCall","src":"29051:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29044:3:164"},"nodeType":"YulFunctionCall","src":"29044:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"29039:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29101:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"29107:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29097:3:164"},"nodeType":"YulFunctionCall","src":"29097:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"29111:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29090:6:164"},"nodeType":"YulFunctionCall","src":"29090:30:164"},"nodeType":"YulExpressionStatement","src":"29090:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"29134:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"29147:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29171:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"29174:2:164","type":"","value":"22"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29167:3:164"},"nodeType":"YulFunctionCall","src":"29167:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29143:3:164"},"nodeType":"YulFunctionCall","src":"29143:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29137:5:164"},"nodeType":"YulFunctionCall","src":"29137:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29127:6:164"},"nodeType":"YulFunctionCall","src":"29127:53:164"},"nodeType":"YulExpressionStatement","src":"29127:53:164"},{"nodeType":"YulAssignment","src":"29187:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29209:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29212:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"29199:9:164"},"nodeType":"YulFunctionCall","src":"29199:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"29187:8:164"}]},{"nodeType":"YulAssignment","src":"29225:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29234:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"29248:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29260:2:164","type":"","value":"23"},{"kind":"number","nodeType":"YulLiteral","src":"29264:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29256:3:164"},"nodeType":"YulFunctionCall","src":"29256:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29244:3:164"},"nodeType":"YulFunctionCall","src":"29244:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29237:6:164"},"nodeType":"YulFunctionCall","src":"29237:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29230:3:164"},"nodeType":"YulFunctionCall","src":"29230:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"29225:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29287:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"29293:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29283:3:164"},"nodeType":"YulFunctionCall","src":"29283:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"29297:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29276:6:164"},"nodeType":"YulFunctionCall","src":"29276:30:164"},"nodeType":"YulExpressionStatement","src":"29276:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"29320:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"29333:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29357:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"29360:2:164","type":"","value":"23"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29353:3:164"},"nodeType":"YulFunctionCall","src":"29353:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29329:3:164"},"nodeType":"YulFunctionCall","src":"29329:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29323:5:164"},"nodeType":"YulFunctionCall","src":"29323:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29313:6:164"},"nodeType":"YulFunctionCall","src":"29313:53:164"},"nodeType":"YulExpressionStatement","src":"29313:53:164"},{"nodeType":"YulAssignment","src":"29373:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29395:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29398:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"29385:9:164"},"nodeType":"YulFunctionCall","src":"29385:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"29373:8:164"}]},{"nodeType":"YulAssignment","src":"29411:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29420:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"29434:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29446:2:164","type":"","value":"24"},{"kind":"number","nodeType":"YulLiteral","src":"29450:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29442:3:164"},"nodeType":"YulFunctionCall","src":"29442:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29430:3:164"},"nodeType":"YulFunctionCall","src":"29430:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29423:6:164"},"nodeType":"YulFunctionCall","src":"29423:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29416:3:164"},"nodeType":"YulFunctionCall","src":"29416:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"29411:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29473:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"29479:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29469:3:164"},"nodeType":"YulFunctionCall","src":"29469:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"29483:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29462:6:164"},"nodeType":"YulFunctionCall","src":"29462:30:164"},"nodeType":"YulExpressionStatement","src":"29462:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"29506:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"29519:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29543:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"29546:2:164","type":"","value":"24"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29539:3:164"},"nodeType":"YulFunctionCall","src":"29539:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29515:3:164"},"nodeType":"YulFunctionCall","src":"29515:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29509:5:164"},"nodeType":"YulFunctionCall","src":"29509:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29499:6:164"},"nodeType":"YulFunctionCall","src":"29499:53:164"},"nodeType":"YulExpressionStatement","src":"29499:53:164"},{"nodeType":"YulAssignment","src":"29559:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29581:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29584:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"29571:9:164"},"nodeType":"YulFunctionCall","src":"29571:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"29559:8:164"}]},{"nodeType":"YulAssignment","src":"29597:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29606:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"29620:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29632:2:164","type":"","value":"25"},{"kind":"number","nodeType":"YulLiteral","src":"29636:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29628:3:164"},"nodeType":"YulFunctionCall","src":"29628:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29616:3:164"},"nodeType":"YulFunctionCall","src":"29616:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29609:6:164"},"nodeType":"YulFunctionCall","src":"29609:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29602:3:164"},"nodeType":"YulFunctionCall","src":"29602:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"29597:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29659:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"29665:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29655:3:164"},"nodeType":"YulFunctionCall","src":"29655:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"29669:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29648:6:164"},"nodeType":"YulFunctionCall","src":"29648:30:164"},"nodeType":"YulExpressionStatement","src":"29648:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"29692:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"29705:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29729:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"29732:2:164","type":"","value":"25"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29725:3:164"},"nodeType":"YulFunctionCall","src":"29725:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29701:3:164"},"nodeType":"YulFunctionCall","src":"29701:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29695:5:164"},"nodeType":"YulFunctionCall","src":"29695:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29685:6:164"},"nodeType":"YulFunctionCall","src":"29685:53:164"},"nodeType":"YulExpressionStatement","src":"29685:53:164"},{"nodeType":"YulAssignment","src":"29745:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29767:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29770:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"29757:9:164"},"nodeType":"YulFunctionCall","src":"29757:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"29745:8:164"}]},{"nodeType":"YulAssignment","src":"29783:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29792:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"29806:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29818:2:164","type":"","value":"26"},{"kind":"number","nodeType":"YulLiteral","src":"29822:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29814:3:164"},"nodeType":"YulFunctionCall","src":"29814:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29802:3:164"},"nodeType":"YulFunctionCall","src":"29802:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29795:6:164"},"nodeType":"YulFunctionCall","src":"29795:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29788:3:164"},"nodeType":"YulFunctionCall","src":"29788:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"29783:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29845:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"29851:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29841:3:164"},"nodeType":"YulFunctionCall","src":"29841:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"29855:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29834:6:164"},"nodeType":"YulFunctionCall","src":"29834:30:164"},"nodeType":"YulExpressionStatement","src":"29834:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"29878:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"29891:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29915:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"29918:2:164","type":"","value":"26"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29911:3:164"},"nodeType":"YulFunctionCall","src":"29911:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29887:3:164"},"nodeType":"YulFunctionCall","src":"29887:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29881:5:164"},"nodeType":"YulFunctionCall","src":"29881:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29871:6:164"},"nodeType":"YulFunctionCall","src":"29871:53:164"},"nodeType":"YulExpressionStatement","src":"29871:53:164"},{"nodeType":"YulAssignment","src":"29931:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29953:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29956:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"29943:9:164"},"nodeType":"YulFunctionCall","src":"29943:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"29931:8:164"}]},{"nodeType":"YulAssignment","src":"29969:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29978:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"29992:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30004:2:164","type":"","value":"27"},{"kind":"number","nodeType":"YulLiteral","src":"30008:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30000:3:164"},"nodeType":"YulFunctionCall","src":"30000:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29988:3:164"},"nodeType":"YulFunctionCall","src":"29988:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29981:6:164"},"nodeType":"YulFunctionCall","src":"29981:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"29974:3:164"},"nodeType":"YulFunctionCall","src":"29974:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"29969:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30031:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"30037:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30027:3:164"},"nodeType":"YulFunctionCall","src":"30027:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"30041:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30020:6:164"},"nodeType":"YulFunctionCall","src":"30020:30:164"},"nodeType":"YulExpressionStatement","src":"30020:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"30064:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"30077:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30101:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"30104:2:164","type":"","value":"27"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30097:3:164"},"nodeType":"YulFunctionCall","src":"30097:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30073:3:164"},"nodeType":"YulFunctionCall","src":"30073:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30067:5:164"},"nodeType":"YulFunctionCall","src":"30067:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30057:6:164"},"nodeType":"YulFunctionCall","src":"30057:53:164"},"nodeType":"YulExpressionStatement","src":"30057:53:164"},{"nodeType":"YulAssignment","src":"30117:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30139:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"30142:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"30129:9:164"},"nodeType":"YulFunctionCall","src":"30129:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"30117:8:164"}]},{"nodeType":"YulAssignment","src":"30155:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30164:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"30178:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30190:2:164","type":"","value":"28"},{"kind":"number","nodeType":"YulLiteral","src":"30194:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30186:3:164"},"nodeType":"YulFunctionCall","src":"30186:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30174:3:164"},"nodeType":"YulFunctionCall","src":"30174:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"30167:6:164"},"nodeType":"YulFunctionCall","src":"30167:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30160:3:164"},"nodeType":"YulFunctionCall","src":"30160:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"30155:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30217:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"30223:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30213:3:164"},"nodeType":"YulFunctionCall","src":"30213:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"30227:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30206:6:164"},"nodeType":"YulFunctionCall","src":"30206:30:164"},"nodeType":"YulExpressionStatement","src":"30206:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"30250:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"30263:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30287:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"30290:2:164","type":"","value":"28"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30283:3:164"},"nodeType":"YulFunctionCall","src":"30283:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30259:3:164"},"nodeType":"YulFunctionCall","src":"30259:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30253:5:164"},"nodeType":"YulFunctionCall","src":"30253:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30243:6:164"},"nodeType":"YulFunctionCall","src":"30243:53:164"},"nodeType":"YulExpressionStatement","src":"30243:53:164"},{"nodeType":"YulAssignment","src":"30303:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30325:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"30328:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"30315:9:164"},"nodeType":"YulFunctionCall","src":"30315:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"30303:8:164"}]},{"nodeType":"YulAssignment","src":"30341:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30350:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"30364:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30376:2:164","type":"","value":"29"},{"kind":"number","nodeType":"YulLiteral","src":"30380:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30372:3:164"},"nodeType":"YulFunctionCall","src":"30372:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30360:3:164"},"nodeType":"YulFunctionCall","src":"30360:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"30353:6:164"},"nodeType":"YulFunctionCall","src":"30353:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30346:3:164"},"nodeType":"YulFunctionCall","src":"30346:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"30341:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30403:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"30409:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30399:3:164"},"nodeType":"YulFunctionCall","src":"30399:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"30413:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30392:6:164"},"nodeType":"YulFunctionCall","src":"30392:30:164"},"nodeType":"YulExpressionStatement","src":"30392:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"30436:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"30449:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30473:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"30476:2:164","type":"","value":"29"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30469:3:164"},"nodeType":"YulFunctionCall","src":"30469:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30445:3:164"},"nodeType":"YulFunctionCall","src":"30445:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30439:5:164"},"nodeType":"YulFunctionCall","src":"30439:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30429:6:164"},"nodeType":"YulFunctionCall","src":"30429:53:164"},"nodeType":"YulExpressionStatement","src":"30429:53:164"},{"nodeType":"YulAssignment","src":"30489:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30511:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"30514:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"30501:9:164"},"nodeType":"YulFunctionCall","src":"30501:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"30489:8:164"}]},{"nodeType":"YulAssignment","src":"30527:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30536:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"30550:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30562:2:164","type":"","value":"30"},{"kind":"number","nodeType":"YulLiteral","src":"30566:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30558:3:164"},"nodeType":"YulFunctionCall","src":"30558:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30546:3:164"},"nodeType":"YulFunctionCall","src":"30546:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"30539:6:164"},"nodeType":"YulFunctionCall","src":"30539:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30532:3:164"},"nodeType":"YulFunctionCall","src":"30532:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"30527:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30589:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"30595:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30585:3:164"},"nodeType":"YulFunctionCall","src":"30585:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"30599:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30578:6:164"},"nodeType":"YulFunctionCall","src":"30578:30:164"},"nodeType":"YulExpressionStatement","src":"30578:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"30622:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"30635:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30659:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"30662:2:164","type":"","value":"30"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30655:3:164"},"nodeType":"YulFunctionCall","src":"30655:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30631:3:164"},"nodeType":"YulFunctionCall","src":"30631:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30625:5:164"},"nodeType":"YulFunctionCall","src":"30625:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30615:6:164"},"nodeType":"YulFunctionCall","src":"30615:53:164"},"nodeType":"YulExpressionStatement","src":"30615:53:164"},{"nodeType":"YulAssignment","src":"30675:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30697:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"30700:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"30687:9:164"},"nodeType":"YulFunctionCall","src":"30687:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"30675:8:164"}]},{"nodeType":"YulAssignment","src":"30713:44:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30722:1:164","type":"","value":"5"},{"arguments":[{"arguments":[{"name":"_index","nodeType":"YulIdentifier","src":"30736:6:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30748:2:164","type":"","value":"31"},{"kind":"number","nodeType":"YulLiteral","src":"30752:1:164","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30744:3:164"},"nodeType":"YulFunctionCall","src":"30744:10:164"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30732:3:164"},"nodeType":"YulFunctionCall","src":"30732:23:164"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"30725:6:164"},"nodeType":"YulFunctionCall","src":"30725:31:164"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30718:3:164"},"nodeType":"YulFunctionCall","src":"30718:39:164"},"variableNames":[{"name":"f","nodeType":"YulIdentifier","src":"30713:1:164"}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30775:4:164","type":"","value":"0x20"},{"name":"f","nodeType":"YulIdentifier","src":"30781:1:164"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30771:3:164"},"nodeType":"YulFunctionCall","src":"30771:12:164"},{"name":"_current","nodeType":"YulIdentifier","src":"30785:8:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30764:6:164"},"nodeType":"YulFunctionCall","src":"30764:30:164"},"nodeType":"YulExpressionStatement","src":"30764:30:164"},{"expression":{"arguments":[{"name":"f","nodeType":"YulIdentifier","src":"30808:1:164"},{"arguments":[{"arguments":[{"name":"BRANCH_DATA_OFFSET","nodeType":"YulIdentifier","src":"30821:18:164"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30845:1:164","type":"","value":"5"},{"kind":"number","nodeType":"YulLiteral","src":"30848:2:164","type":"","value":"31"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30841:3:164"},"nodeType":"YulFunctionCall","src":"30841:10:164"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30817:3:164"},"nodeType":"YulFunctionCall","src":"30817:35:164"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30811:5:164"},"nodeType":"YulFunctionCall","src":"30811:42:164"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30801:6:164"},"nodeType":"YulFunctionCall","src":"30801:53:164"},"nodeType":"YulExpressionStatement","src":"30801:53:164"},{"nodeType":"YulAssignment","src":"30861:30:164","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30883:1:164","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"30886:4:164","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"30873:9:164"},"nodeType":"YulFunctionCall","src":"30873:18:164"},"variableNames":[{"name":"_current","nodeType":"YulIdentifier","src":"30861:8:164"}]}]},"evmVersion":"london","externalReferences":[{"declaration":48989,"isOffset":false,"isSlot":false,"src":"24972:7:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"24922:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"25043:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"25113:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"25222:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"25297:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"25406:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"25481:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"25590:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"25665:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"25774:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"25849:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"25958:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"26033:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"26142:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"26217:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"26326:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"26401:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"26510:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"26585:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"26694:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"26769:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"26879:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"26955:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"27065:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"27141:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"27251:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"27327:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"27437:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"27513:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"27623:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"27699:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"27809:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"27885:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"27995:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"28071:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"28181:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"28257:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"28367:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"28443:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"28553:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"28629:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"28739:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"28815:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"28925:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"29001:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"29111:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"29187:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"29297:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"29373:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"29483:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"29559:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"29669:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"29745:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"29855:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"29931:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"30041:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"30117:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"30227:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"30303:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"30413:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"30489:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"30599:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"30675:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"30785:8:164","valueSize":1},{"declaration":48994,"isOffset":false,"isSlot":false,"src":"30861:8:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"25015:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"25174:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"25358:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"25542:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"25726:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"25910:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"26094:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"26278:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"26462:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"26646:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"26830:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"27016:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"27202:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"27388:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"27574:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"27760:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"27946:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"28132:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"28318:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"28504:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"28690:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"28876:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"29062:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"29248:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"29434:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"29620:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"29806:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"29992:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"30178:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"30364:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"30550:6:164","valueSize":1},{"declaration":48991,"isOffset":false,"isSlot":false,"src":"30736:6:164","valueSize":1},{"declaration":48985,"isOffset":false,"isSlot":false,"src":"24934:5:164","valueSize":1}],"id":48996,"nodeType":"InlineAssembly","src":"24905:5992:164"}]},"documentation":{"id":48983,"nodeType":"StructuredDocumentation","src":"24450:302:164","text":" @notice Calculates and returns the merkle root for the given leaf `_item`,\n a merkle branch, and the index of `_item` in the tree.\n @param _item Merkle leaf\n @param _branch Merkle proof\n @param _index Index of `_item` in tree\n @return _current Calculated merkle root*"},"id":48998,"implemented":true,"kind":"function","modifiers":[],"name":"branchRoot","nameLocation":"24764:10:164","nodeType":"FunctionDefinition","parameters":{"id":48992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48985,"mutability":"mutable","name":"_item","nameLocation":"24788:5:164","nodeType":"VariableDeclaration","scope":48998,"src":"24780:13:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48984,"name":"bytes32","nodeType":"ElementaryTypeName","src":"24780:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":48989,"mutability":"mutable","name":"_branch","nameLocation":"24826:7:164","nodeType":"VariableDeclaration","scope":48998,"src":"24799:34:164","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_memory_ptr","typeString":"bytes32[32]"},"typeName":{"baseType":{"id":48986,"name":"bytes32","nodeType":"ElementaryTypeName","src":"24799:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":48988,"length":{"id":48987,"name":"TREE_DEPTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48766,"src":"24807:10:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"ArrayTypeName","src":"24799:19:164","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$32_storage_ptr","typeString":"bytes32[32]"}},"visibility":"internal"},{"constant":false,"id":48991,"mutability":"mutable","name":"_index","nameLocation":"24847:6:164","nodeType":"VariableDeclaration","scope":48998,"src":"24839:14:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48990,"name":"uint256","nodeType":"ElementaryTypeName","src":"24839:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24774:83:164"},"returnParameters":{"id":48995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48994,"mutability":"mutable","name":"_current","nameLocation":"24889:8:164","nodeType":"VariableDeclaration","scope":48998,"src":"24881:16:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48993,"name":"bytes32","nodeType":"ElementaryTypeName","src":"24881:7:164","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"24880:18:164"},"scope":48999,"src":"24755:6146:164","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":49000,"src":"209:30694:164","usedErrors":[48763]}],"src":"46:30858:164"},"id":164},"contracts/messaging/libraries/Message.sol":{"ast":{"absolutePath":"contracts/messaging/libraries/Message.sol","exportedSymbols":{"Message":[49221],"TypeCasts":[50188],"TypedMemView":[51265]},"id":49222,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":49001,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:165"},{"absolutePath":"contracts/shared/libraries/TypedMemView.sol","file":"../../shared/libraries/TypedMemView.sol","id":49003,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":49222,"sourceUnit":51266,"src":"71:69:165","symbolAliases":[{"foreign":{"id":49002,"name":"TypedMemView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51265,"src":"79:12:165","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/libraries/TypeCasts.sol","file":"../../shared/libraries/TypeCasts.sol","id":49005,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":49222,"sourceUnit":50189,"src":"141:63:165","symbolAliases":[{"foreign":{"id":49004,"name":"TypeCasts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50188,"src":"149:9:165","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Message","contractDependencies":[],"contractKind":"library","documentation":{"id":49006,"nodeType":"StructuredDocumentation","src":"206:135:165","text":" @title Message Library\n @author Illusory Systems Inc.\n @notice Library for formatted messages used by Home and Replica.*"},"fullyImplemented":true,"id":49221,"linearizedBaseContracts":[49221],"name":"Message","nameLocation":"350:7:165","nodeType":"ContractDefinition","nodes":[{"global":false,"id":49009,"libraryName":{"id":49007,"name":"TypedMemView","nameLocations":["368:12:165"],"nodeType":"IdentifierPath","referencedDeclaration":51265,"src":"368:12:165"},"nodeType":"UsingForDirective","src":"362:29:165","typeName":{"id":49008,"name":"bytes","nodeType":"ElementaryTypeName","src":"385:5:165","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},{"global":false,"id":49012,"libraryName":{"id":49010,"name":"TypedMemView","nameLocations":["400:12:165"],"nodeType":"IdentifierPath","referencedDeclaration":51265,"src":"400:12:165"},"nodeType":"UsingForDirective","src":"394:31:165","typeName":{"id":49011,"name":"bytes29","nodeType":"ElementaryTypeName","src":"417:7:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}},{"constant":true,"id":49015,"mutability":"constant","name":"PREFIX_LENGTH","nameLocation":"517:13:165","nodeType":"VariableDeclaration","scope":49221,"src":"491:44:165","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49013,"name":"uint256","nodeType":"ElementaryTypeName","src":"491:7:165","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3736","id":49014,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"533:2:165","typeDescriptions":{"typeIdentifier":"t_rational_76_by_1","typeString":"int_const 76"},"value":"76"},"visibility":"internal"},{"body":{"id":49043,"nodeType":"Block","src":"1197:112:165","statements":[{"expression":{"arguments":[{"id":49035,"name":"_originDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49018,"src":"1227:13:165","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":49036,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49020,"src":"1242:7:165","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":49037,"name":"_nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49022,"src":"1251:6:165","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":49038,"name":"_destinationDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49024,"src":"1259:18:165","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":49039,"name":"_recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49026,"src":"1279:10:165","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":49040,"name":"_messageBody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49028,"src":"1291:12:165","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":49033,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1210:3:165","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":49034,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1214:12:165","memberName":"encodePacked","nodeType":"MemberAccess","src":"1210:16:165","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":49041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1210:94:165","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":49032,"id":49042,"nodeType":"Return","src":"1203:101:165"}]},"documentation":{"id":49016,"nodeType":"StructuredDocumentation","src":"540:438:165","text":" @notice Returns formatted (packed) message with provided fields\n @param _originDomain Domain of home chain\n @param _sender Address of sender as bytes32\n @param _nonce Destination-specific nonce\n @param _destinationDomain Domain of destination chain\n @param _recipient Address of recipient on destination chain as bytes32\n @param _messageBody Raw bytes of message body\n @return Formatted message*"},"id":49044,"implemented":true,"kind":"function","modifiers":[],"name":"formatMessage","nameLocation":"990:13:165","nodeType":"FunctionDefinition","parameters":{"id":49029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49018,"mutability":"mutable","name":"_originDomain","nameLocation":"1016:13:165","nodeType":"VariableDeclaration","scope":49044,"src":"1009:20:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":49017,"name":"uint32","nodeType":"ElementaryTypeName","src":"1009:6:165","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":49020,"mutability":"mutable","name":"_sender","nameLocation":"1043:7:165","nodeType":"VariableDeclaration","scope":49044,"src":"1035:15:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49019,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1035:7:165","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":49022,"mutability":"mutable","name":"_nonce","nameLocation":"1063:6:165","nodeType":"VariableDeclaration","scope":49044,"src":"1056:13:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":49021,"name":"uint32","nodeType":"ElementaryTypeName","src":"1056:6:165","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":49024,"mutability":"mutable","name":"_destinationDomain","nameLocation":"1082:18:165","nodeType":"VariableDeclaration","scope":49044,"src":"1075:25:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":49023,"name":"uint32","nodeType":"ElementaryTypeName","src":"1075:6:165","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":49026,"mutability":"mutable","name":"_recipient","nameLocation":"1114:10:165","nodeType":"VariableDeclaration","scope":49044,"src":"1106:18:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49025,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1106:7:165","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":49028,"mutability":"mutable","name":"_messageBody","nameLocation":"1143:12:165","nodeType":"VariableDeclaration","scope":49044,"src":"1130:25:165","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":49027,"name":"bytes","nodeType":"ElementaryTypeName","src":"1130:5:165","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1003:156:165"},"returnParameters":{"id":49032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49031,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49044,"src":"1183:12:165","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":49030,"name":"bytes","nodeType":"ElementaryTypeName","src":"1183:5:165","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1182:14:165"},"scope":49221,"src":"981:328:165","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":49073,"nodeType":"Block","src":"1947:101:165","statements":[{"expression":{"arguments":[{"arguments":[{"id":49064,"name":"_origin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49047,"src":"1984:7:165","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":49065,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49049,"src":"1993:7:165","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":49066,"name":"_nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49051,"src":"2002:6:165","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":49067,"name":"_destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49053,"src":"2010:12:165","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":49068,"name":"_recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49055,"src":"2024:10:165","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":49069,"name":"_body","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49057,"src":"2036:5:165","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":49063,"name":"formatMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49044,"src":"1970:13:165","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint32_$_t_bytes32_$_t_uint32_$_t_uint32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint32,bytes32,uint32,uint32,bytes32,bytes memory) pure returns (bytes memory)"}},"id":49070,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1970:72:165","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":49062,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1960:9:165","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":49071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1960:83:165","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":49061,"id":49072,"nodeType":"Return","src":"1953:90:165"}]},"documentation":{"id":49045,"nodeType":"StructuredDocumentation","src":"1313:441:165","text":" @notice Returns leaf of formatted message with provided fields.\n @param _origin Domain of home chain\n @param _sender Address of sender as bytes32\n @param _nonce Destination-specific nonce number\n @param _destination Domain of destination chain\n @param _recipient Address of recipient on destination chain as bytes32\n @param _body Raw bytes of message body\n @return Leaf (hash) of formatted message*"},"id":49074,"implemented":true,"kind":"function","modifiers":[],"name":"messageHash","nameLocation":"1766:11:165","nodeType":"FunctionDefinition","parameters":{"id":49058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49047,"mutability":"mutable","name":"_origin","nameLocation":"1790:7:165","nodeType":"VariableDeclaration","scope":49074,"src":"1783:14:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":49046,"name":"uint32","nodeType":"ElementaryTypeName","src":"1783:6:165","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":49049,"mutability":"mutable","name":"_sender","nameLocation":"1811:7:165","nodeType":"VariableDeclaration","scope":49074,"src":"1803:15:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49048,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1803:7:165","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":49051,"mutability":"mutable","name":"_nonce","nameLocation":"1831:6:165","nodeType":"VariableDeclaration","scope":49074,"src":"1824:13:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":49050,"name":"uint32","nodeType":"ElementaryTypeName","src":"1824:6:165","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":49053,"mutability":"mutable","name":"_destination","nameLocation":"1850:12:165","nodeType":"VariableDeclaration","scope":49074,"src":"1843:19:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":49052,"name":"uint32","nodeType":"ElementaryTypeName","src":"1843:6:165","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":49055,"mutability":"mutable","name":"_recipient","nameLocation":"1876:10:165","nodeType":"VariableDeclaration","scope":49074,"src":"1868:18:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49054,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1868:7:165","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":49057,"mutability":"mutable","name":"_body","nameLocation":"1905:5:165","nodeType":"VariableDeclaration","scope":49074,"src":"1892:18:165","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":49056,"name":"bytes","nodeType":"ElementaryTypeName","src":"1892:5:165","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1777:137:165"},"returnParameters":{"id":49061,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49060,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49074,"src":"1938:7:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49059,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1938:7:165","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1937:9:165"},"scope":49221,"src":"1757:291:165","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":49091,"nodeType":"Block","src":"2162:50:165","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":49086,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2201:1:165","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"34","id":49087,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2204:1:165","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"}],"expression":{"id":49084,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49077,"src":"2182:8:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":49085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2191:9:165","memberName":"indexUint","nodeType":"MemberAccess","referencedDeclaration":50882,"src":"2182:18:165","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_uint256_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint256,uint8) pure returns (uint256)"}},"id":49088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2182:24:165","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":49083,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2175:6:165","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":49082,"name":"uint32","nodeType":"ElementaryTypeName","src":"2175:6:165","typeDescriptions":{}}},"id":49089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2175:32:165","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":49081,"id":49090,"nodeType":"Return","src":"2168:39:165"}]},"documentation":{"id":49075,"nodeType":"StructuredDocumentation","src":"2052:42:165","text":"@notice Returns message's origin field"},"id":49092,"implemented":true,"kind":"function","modifiers":[],"name":"origin","nameLocation":"2106:6:165","nodeType":"FunctionDefinition","parameters":{"id":49078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49077,"mutability":"mutable","name":"_message","nameLocation":"2121:8:165","nodeType":"VariableDeclaration","scope":49092,"src":"2113:16:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":49076,"name":"bytes29","nodeType":"ElementaryTypeName","src":"2113:7:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"2112:18:165"},"returnParameters":{"id":49081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49080,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49092,"src":"2154:6:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":49079,"name":"uint32","nodeType":"ElementaryTypeName","src":"2154:6:165","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2153:8:165"},"scope":49221,"src":"2097:115:165","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":49106,"nodeType":"Block","src":"2327:39:165","statements":[{"expression":{"arguments":[{"hexValue":"34","id":49102,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2355:1:165","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},{"hexValue":"3332","id":49103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2358:2:165","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}],"expression":{"id":49100,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49095,"src":"2340:8:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":49101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2349:5:165","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":50852,"src":"2340:14:165","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_bytes32_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint256,uint8) pure returns (bytes32)"}},"id":49104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2340:21:165","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":49099,"id":49105,"nodeType":"Return","src":"2333:28:165"}]},"documentation":{"id":49093,"nodeType":"StructuredDocumentation","src":"2216:42:165","text":"@notice Returns message's sender field"},"id":49107,"implemented":true,"kind":"function","modifiers":[],"name":"sender","nameLocation":"2270:6:165","nodeType":"FunctionDefinition","parameters":{"id":49096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49095,"mutability":"mutable","name":"_message","nameLocation":"2285:8:165","nodeType":"VariableDeclaration","scope":49107,"src":"2277:16:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":49094,"name":"bytes29","nodeType":"ElementaryTypeName","src":"2277:7:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"2276:18:165"},"returnParameters":{"id":49099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49098,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49107,"src":"2318:7:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49097,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2318:7:165","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2317:9:165"},"scope":49221,"src":"2261:105:165","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":49124,"nodeType":"Block","src":"2478:51:165","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"3336","id":49119,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2517:2:165","typeDescriptions":{"typeIdentifier":"t_rational_36_by_1","typeString":"int_const 36"},"value":"36"},{"hexValue":"34","id":49120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2521:1:165","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_36_by_1","typeString":"int_const 36"},{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"}],"expression":{"id":49117,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49110,"src":"2498:8:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":49118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2507:9:165","memberName":"indexUint","nodeType":"MemberAccess","referencedDeclaration":50882,"src":"2498:18:165","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_uint256_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint256,uint8) pure returns (uint256)"}},"id":49121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2498:25:165","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":49116,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2491:6:165","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":49115,"name":"uint32","nodeType":"ElementaryTypeName","src":"2491:6:165","typeDescriptions":{}}},"id":49122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2491:33:165","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":49114,"id":49123,"nodeType":"Return","src":"2484:40:165"}]},"documentation":{"id":49108,"nodeType":"StructuredDocumentation","src":"2370:41:165","text":"@notice Returns message's nonce field"},"id":49125,"implemented":true,"kind":"function","modifiers":[],"name":"nonce","nameLocation":"2423:5:165","nodeType":"FunctionDefinition","parameters":{"id":49111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49110,"mutability":"mutable","name":"_message","nameLocation":"2437:8:165","nodeType":"VariableDeclaration","scope":49125,"src":"2429:16:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":49109,"name":"bytes29","nodeType":"ElementaryTypeName","src":"2429:7:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"2428:18:165"},"returnParameters":{"id":49114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49113,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49125,"src":"2470:6:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":49112,"name":"uint32","nodeType":"ElementaryTypeName","src":"2470:6:165","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2469:8:165"},"scope":49221,"src":"2414:115:165","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":49142,"nodeType":"Block","src":"2653:51:165","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"3430","id":49137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2692:2:165","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"hexValue":"34","id":49138,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2696:1:165","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"}],"expression":{"id":49135,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49128,"src":"2673:8:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":49136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2682:9:165","memberName":"indexUint","nodeType":"MemberAccess","referencedDeclaration":50882,"src":"2673:18:165","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_uint256_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint256,uint8) pure returns (uint256)"}},"id":49139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2673:25:165","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":49134,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2666:6:165","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":49133,"name":"uint32","nodeType":"ElementaryTypeName","src":"2666:6:165","typeDescriptions":{}}},"id":49140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2666:33:165","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":49132,"id":49141,"nodeType":"Return","src":"2659:40:165"}]},"documentation":{"id":49126,"nodeType":"StructuredDocumentation","src":"2533:47:165","text":"@notice Returns message's destination field"},"id":49143,"implemented":true,"kind":"function","modifiers":[],"name":"destination","nameLocation":"2592:11:165","nodeType":"FunctionDefinition","parameters":{"id":49129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49128,"mutability":"mutable","name":"_message","nameLocation":"2612:8:165","nodeType":"VariableDeclaration","scope":49143,"src":"2604:16:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":49127,"name":"bytes29","nodeType":"ElementaryTypeName","src":"2604:7:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"2603:18:165"},"returnParameters":{"id":49132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49131,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49143,"src":"2645:6:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":49130,"name":"uint32","nodeType":"ElementaryTypeName","src":"2645:6:165","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2644:8:165"},"scope":49221,"src":"2583:121:165","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":49157,"nodeType":"Block","src":"2836:40:165","statements":[{"expression":{"arguments":[{"hexValue":"3434","id":49153,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2864:2:165","typeDescriptions":{"typeIdentifier":"t_rational_44_by_1","typeString":"int_const 44"},"value":"44"},{"hexValue":"3332","id":49154,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2868:2:165","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_44_by_1","typeString":"int_const 44"},{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}],"expression":{"id":49151,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49146,"src":"2849:8:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":49152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2858:5:165","memberName":"index","nodeType":"MemberAccess","referencedDeclaration":50852,"src":"2849:14:165","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_bytes32_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint256,uint8) pure returns (bytes32)"}},"id":49155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2849:22:165","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":49150,"id":49156,"nodeType":"Return","src":"2842:29:165"}]},"documentation":{"id":49144,"nodeType":"StructuredDocumentation","src":"2708:56:165","text":"@notice Returns message's recipient field as bytes32"},"id":49158,"implemented":true,"kind":"function","modifiers":[],"name":"recipient","nameLocation":"2776:9:165","nodeType":"FunctionDefinition","parameters":{"id":49147,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49146,"mutability":"mutable","name":"_message","nameLocation":"2794:8:165","nodeType":"VariableDeclaration","scope":49158,"src":"2786:16:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":49145,"name":"bytes29","nodeType":"ElementaryTypeName","src":"2786:7:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"2785:18:165"},"returnParameters":{"id":49150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49149,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49158,"src":"2827:7:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49148,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2827:7:165","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2826:9:165"},"scope":49221,"src":"2767:109:165","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":49173,"nodeType":"Block","src":"3018:65:165","statements":[{"expression":{"arguments":[{"arguments":[{"id":49169,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49161,"src":"3068:8:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":49168,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49158,"src":"3058:9:165","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$","typeString":"function (bytes29) pure returns (bytes32)"}},"id":49170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3058:19:165","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":49166,"name":"TypeCasts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50188,"src":"3031:9:165","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TypeCasts_$50188_$","typeString":"type(library TypeCasts)"}},"id":49167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3041:16:165","memberName":"bytes32ToAddress","nodeType":"MemberAccess","referencedDeclaration":50187,"src":"3031:26:165","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) pure returns (address)"}},"id":49171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3031:47:165","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":49165,"id":49172,"nodeType":"Return","src":"3024:54:165"}]},"documentation":{"id":49159,"nodeType":"StructuredDocumentation","src":"2880:59:165","text":"@notice Returns message's recipient field as an address"},"id":49174,"implemented":true,"kind":"function","modifiers":[],"name":"recipientAddress","nameLocation":"2951:16:165","nodeType":"FunctionDefinition","parameters":{"id":49162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49161,"mutability":"mutable","name":"_message","nameLocation":"2976:8:165","nodeType":"VariableDeclaration","scope":49174,"src":"2968:16:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":49160,"name":"bytes29","nodeType":"ElementaryTypeName","src":"2968:7:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"2967:18:165"},"returnParameters":{"id":49165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49164,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49174,"src":"3009:7:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49163,"name":"address","nodeType":"ElementaryTypeName","src":"3009:7:165","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3008:9:165"},"scope":49221,"src":"2942:141:165","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":49193,"nodeType":"Block","src":"3265:82:165","statements":[{"expression":{"arguments":[{"id":49184,"name":"PREFIX_LENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49015,"src":"3293:13:165","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49185,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49177,"src":"3308:8:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":49186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3317:3:165","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":50665,"src":"3308:12:165","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":49187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3308:14:165","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":49188,"name":"PREFIX_LENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49015,"src":"3325:13:165","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3308:30:165","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":49190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3340:1:165","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":49182,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49177,"src":"3278:8:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":49183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3287:5:165","memberName":"slice","nodeType":"MemberAccess","referencedDeclaration":50729,"src":"3278:14:165","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint256_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes29_$","typeString":"function (bytes29,uint256,uint256,uint40) pure returns (bytes29)"}},"id":49191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3278:64:165","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"functionReturnParameters":49181,"id":49192,"nodeType":"Return","src":"3271:71:165"}]},"documentation":{"id":49175,"nodeType":"StructuredDocumentation","src":"3087:111:165","text":"@notice Returns message's body field as bytes29 (refer to TypedMemView library for details on bytes29 type)"},"id":49194,"implemented":true,"kind":"function","modifiers":[],"name":"body","nameLocation":"3210:4:165","nodeType":"FunctionDefinition","parameters":{"id":49178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49177,"mutability":"mutable","name":"_message","nameLocation":"3223:8:165","nodeType":"VariableDeclaration","scope":49194,"src":"3215:16:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":49176,"name":"bytes29","nodeType":"ElementaryTypeName","src":"3215:7:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"3214:18:165"},"returnParameters":{"id":49181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49180,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49194,"src":"3256:7:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":49179,"name":"bytes29","nodeType":"ElementaryTypeName","src":"3256:7:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"3255:9:165"},"scope":49221,"src":"3201:146:165","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":49219,"nodeType":"Block","src":"3415:447:165","statements":[{"assignments":[49202],"declarations":[{"constant":false,"id":49202,"mutability":"mutable","name":"loc","nameLocation":"3429:3:165","nodeType":"VariableDeclaration","scope":49219,"src":"3421:11:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49201,"name":"uint256","nodeType":"ElementaryTypeName","src":"3421:7:165","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49206,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49203,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49196,"src":"3435:8:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":49204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3444:3:165","memberName":"loc","nodeType":"MemberAccess","referencedDeclaration":50615,"src":"3435:12:165","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":49205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3435:14:165","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"3421:28:165"},{"assignments":[49208],"declarations":[{"constant":false,"id":49208,"mutability":"mutable","name":"len","nameLocation":"3463:3:165","nodeType":"VariableDeclaration","scope":49219,"src":"3455:11:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49207,"name":"uint256","nodeType":"ElementaryTypeName","src":"3455:7:165","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49212,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":49209,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49196,"src":"3469:8:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":49210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3478:3:165","memberName":"len","nodeType":"MemberAccess","referencedDeclaration":50665,"src":"3469:12:165","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$bound_to$_t_bytes29_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":49211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3469:14:165","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"3455:28:165"},{"assignments":[49214],"declarations":[{"constant":false,"id":49214,"mutability":"mutable","name":"hash","nameLocation":"3781:4:165","nodeType":"VariableDeclaration","scope":49219,"src":"3773:12:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49213,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3773:7:165","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":49215,"nodeType":"VariableDeclarationStatement","src":"3773:12:165"},{"AST":{"nodeType":"YulBlock","src":"3800:41:165","statements":[{"nodeType":"YulAssignment","src":"3808:27:165","value":{"arguments":[{"name":"loc","nodeType":"YulIdentifier","src":"3826:3:165"},{"name":"len","nodeType":"YulIdentifier","src":"3831:3:165"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"3816:9:165"},"nodeType":"YulFunctionCall","src":"3816:19:165"},"variableNames":[{"name":"hash","nodeType":"YulIdentifier","src":"3808:4:165"}]}]},"evmVersion":"london","externalReferences":[{"declaration":49214,"isOffset":false,"isSlot":false,"src":"3808:4:165","valueSize":1},{"declaration":49208,"isOffset":false,"isSlot":false,"src":"3831:3:165","valueSize":1},{"declaration":49202,"isOffset":false,"isSlot":false,"src":"3826:3:165","valueSize":1}],"id":49216,"nodeType":"InlineAssembly","src":"3791:50:165"},{"expression":{"id":49217,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49214,"src":"3853:4:165","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":49200,"id":49218,"nodeType":"Return","src":"3846:11:165"}]},"id":49220,"implemented":true,"kind":"function","modifiers":[],"name":"leaf","nameLocation":"3360:4:165","nodeType":"FunctionDefinition","parameters":{"id":49197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49196,"mutability":"mutable","name":"_message","nameLocation":"3373:8:165","nodeType":"VariableDeclaration","scope":49220,"src":"3365:16:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":49195,"name":"bytes29","nodeType":"ElementaryTypeName","src":"3365:7:165","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"3364:18:165"},"returnParameters":{"id":49200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49199,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49220,"src":"3406:7:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49198,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3406:7:165","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3405:9:165"},"scope":49221,"src":"3351:511:165","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":49222,"src":"342:3522:165","usedErrors":[]}],"src":"46:3819:165"},"id":165},"contracts/messaging/libraries/Queue.sol":{"ast":{"absolutePath":"contracts/messaging/libraries/Queue.sol","exportedSymbols":{"QueueLib":[49625]},"id":49626,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":49223,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:166"},{"abstract":false,"baseContracts":[],"canonicalName":"QueueLib","contractDependencies":[],"contractKind":"library","documentation":{"id":49224,"nodeType":"StructuredDocumentation","src":"71:269:166","text":" @title QueueLib\n @notice Library containing queue struct and operations for queue used by RootManager and SpokeConnector\n for handling the verification period. Tracks both message data itself and the block that the message was\n committed to the queue.*"},"fullyImplemented":true,"id":49625,"linearizedBaseContracts":[49625],"name":"QueueLib","nameLocation":"349:8:166","nodeType":"ContractDefinition","nodes":[{"canonicalName":"QueueLib.Queue","id":49241,"members":[{"constant":false,"id":49226,"mutability":"mutable","name":"first","nameLocation":"564:5:166","nodeType":"VariableDeclaration","scope":49241,"src":"556:13:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":49225,"name":"uint128","nodeType":"ElementaryTypeName","src":"556:7:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":49228,"mutability":"mutable","name":"last","nameLocation":"583:4:166","nodeType":"VariableDeclaration","scope":49241,"src":"575:12:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":49227,"name":"uint128","nodeType":"ElementaryTypeName","src":"575:7:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":49232,"mutability":"mutable","name":"data","nameLocation":"674:4:166","nodeType":"VariableDeclaration","scope":49241,"src":"646:32:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":49231,"keyType":{"id":49229,"name":"uint256","nodeType":"ElementaryTypeName","src":"654:7:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"646:27:166","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueType":{"id":49230,"name":"bytes32","nodeType":"ElementaryTypeName","src":"665:7:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"},{"constant":false,"id":49236,"mutability":"mutable","name":"commitBlock","nameLocation":"766:11:166","nodeType":"VariableDeclaration","scope":49241,"src":"738:39:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"},"typeName":{"id":49235,"keyType":{"id":49233,"name":"uint256","nodeType":"ElementaryTypeName","src":"746:7:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"738:27:166","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"},"valueType":{"id":49234,"name":"uint256","nodeType":"ElementaryTypeName","src":"757:7:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":49240,"mutability":"mutable","name":"removed","nameLocation":"1015:7:166","nodeType":"VariableDeclaration","scope":49241,"src":"990:32:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"typeName":{"id":49239,"keyType":{"id":49237,"name":"bytes32","nodeType":"ElementaryTypeName","src":"998:7:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"990:24:166","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"},"valueType":{"id":49238,"name":"bool","nodeType":"ElementaryTypeName","src":"1009:4:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"}],"name":"Queue","nameLocation":"544:5:166","nodeType":"StructDefinition","scope":49625,"src":"537:490:166","visibility":"public"},{"body":{"id":49258,"nodeType":"Block","src":"1252:49:166","statements":[{"expression":{"id":49252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":49248,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49245,"src":"1258:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49250,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1264:5:166","memberName":"first","nodeType":"MemberAccess","referencedDeclaration":49226,"src":"1258:11:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":49251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1272:1:166","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1258:15:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":49253,"nodeType":"ExpressionStatement","src":"1258:15:166"},{"expression":{"id":49256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"1279:17:166","subExpression":{"expression":{"id":49254,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49245,"src":"1286:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49255,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1292:4:166","memberName":"last","nodeType":"MemberAccess","referencedDeclaration":49228,"src":"1286:10:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49257,"nodeType":"ExpressionStatement","src":"1279:17:166"}]},"documentation":{"id":49242,"nodeType":"StructuredDocumentation","src":"1031:168:166","text":" @notice Initializes the queue\n @dev Empty state denoted by queue.first > queue.last. Queue initialized with\n queue.first = 1 and queue.last = 0.*"},"id":49259,"implemented":true,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"1211:10:166","nodeType":"FunctionDefinition","parameters":{"id":49246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49245,"mutability":"mutable","name":"queue","nameLocation":"1236:5:166","nodeType":"VariableDeclaration","scope":49259,"src":"1222:19:166","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue"},"typeName":{"id":49244,"nodeType":"UserDefinedTypeName","pathNode":{"id":49243,"name":"Queue","nameLocations":["1222:5:166"],"nodeType":"IdentifierPath","referencedDeclaration":49241,"src":"1222:5:166"},"referencedDeclaration":49241,"src":"1222:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue"}},"visibility":"internal"}],"src":"1221:21:166"},"returnParameters":{"id":49247,"nodeType":"ParameterList","parameters":[],"src":"1252:0:166"},"scope":49625,"src":"1202:99:166","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":49297,"nodeType":"Block","src":"1620:296:166","statements":[{"assignments":[49271],"declarations":[{"constant":false,"id":49271,"mutability":"mutable","name":"commitBlock","nameLocation":"1709:11:166","nodeType":"VariableDeclaration","scope":49297,"src":"1701:19:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49270,"name":"uint256","nodeType":"ElementaryTypeName","src":"1701:7:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49274,"initialValue":{"expression":{"id":49272,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1723:5:166","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":49273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1729:6:166","memberName":"number","nodeType":"MemberAccess","src":"1723:12:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1701:34:166"},{"expression":{"id":49279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49275,"name":"last","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49268,"src":"1775:4:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"1782:12:166","subExpression":{"expression":{"id":49276,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49263,"src":"1784:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49277,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1790:4:166","memberName":"last","nodeType":"MemberAccess","referencedDeclaration":49228,"src":"1784:10:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"1775:19:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":49280,"nodeType":"ExpressionStatement","src":"1775:19:166"},{"expression":{"id":49287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":49281,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49263,"src":"1845:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49284,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1851:4:166","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":49232,"src":"1845:10:166","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":49285,"indexExpression":{"id":49283,"name":"last","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49268,"src":"1856:4:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1845:16:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49286,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49265,"src":"1864:4:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1845:23:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":49288,"nodeType":"ExpressionStatement","src":"1845:23:166"},{"expression":{"id":49295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":49289,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49263,"src":"1874:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49292,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1880:11:166","memberName":"commitBlock","nodeType":"MemberAccess","referencedDeclaration":49236,"src":"1874:17:166","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":49293,"indexExpression":{"id":49291,"name":"last","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49268,"src":"1892:4:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1874:23:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49294,"name":"commitBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49271,"src":"1900:11:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1874:37:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49296,"nodeType":"ExpressionStatement","src":"1874:37:166"}]},"documentation":{"id":49260,"nodeType":"StructuredDocumentation","src":"1305:228:166","text":" @notice Enqueues a single new element and records block number that the item was enqueued\n (i.e. current block).\n @param item New element to be enqueued.\n @return last Index of newly enqueued element.*"},"id":49298,"implemented":true,"kind":"function","modifiers":[],"name":"enqueue","nameLocation":"1545:7:166","nodeType":"FunctionDefinition","parameters":{"id":49266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49263,"mutability":"mutable","name":"queue","nameLocation":"1567:5:166","nodeType":"VariableDeclaration","scope":49298,"src":"1553:19:166","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue"},"typeName":{"id":49262,"nodeType":"UserDefinedTypeName","pathNode":{"id":49261,"name":"Queue","nameLocations":["1553:5:166"],"nodeType":"IdentifierPath","referencedDeclaration":49241,"src":"1553:5:166"},"referencedDeclaration":49241,"src":"1553:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue"}},"visibility":"internal"},{"constant":false,"id":49265,"mutability":"mutable","name":"item","nameLocation":"1582:4:166","nodeType":"VariableDeclaration","scope":49298,"src":"1574:12:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49264,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1574:7:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1552:35:166"},"returnParameters":{"id":49269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49268,"mutability":"mutable","name":"last","nameLocation":"1614:4:166","nodeType":"VariableDeclaration","scope":49298,"src":"1606:12:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":49267,"name":"uint128","nodeType":"ElementaryTypeName","src":"1606:7:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1605:14:166"},"scope":49625,"src":"1536:380:166","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":49535,"nodeType":"Block","src":"2581:3478:166","statements":[{"assignments":[49313],"declarations":[{"constant":false,"id":49313,"mutability":"mutable","name":"first","nameLocation":"2595:5:166","nodeType":"VariableDeclaration","scope":49535,"src":"2587:13:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":49312,"name":"uint128","nodeType":"ElementaryTypeName","src":"2587:7:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":49316,"initialValue":{"expression":{"id":49314,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49302,"src":"2603:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49315,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2609:5:166","memberName":"first","nodeType":"MemberAccess","referencedDeclaration":49226,"src":"2603:11:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"2587:27:166"},{"assignments":[49318],"declarations":[{"constant":false,"id":49318,"mutability":"mutable","name":"last","nameLocation":"2628:4:166","nodeType":"VariableDeclaration","scope":49535,"src":"2620:12:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":49317,"name":"uint128","nodeType":"ElementaryTypeName","src":"2620:7:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":49321,"initialValue":{"expression":{"id":49319,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49302,"src":"2635:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49320,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2641:4:166","memberName":"last","nodeType":"MemberAccess","referencedDeclaration":49228,"src":"2635:10:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"2620:25:166"},{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":49324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49322,"name":"last","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49318,"src":"2702:4:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":49323,"name":"first","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49313,"src":"2709:5:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2702:12:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49332,"nodeType":"IfStatement","src":"2698:56:166","trueBody":{"id":49331,"nodeType":"Block","src":"2716:38:166","statements":[{"expression":{"arguments":[{"hexValue":"30","id":49328,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2745:1:166","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":49327,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2731:13:166","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":49325,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2735:7:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":49326,"nodeType":"ArrayTypeName","src":"2735:9:166","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":49329,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2731:16:166","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":49311,"id":49330,"nodeType":"Return","src":"2724:23:166"}]}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":49336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49334,"name":"first","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49313,"src":"2796:5:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":49335,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2805:1:166","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2796:10:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"71756575652021696e69742764","id":49337,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2808:15:166","typeDescriptions":{"typeIdentifier":"t_stringliteral_858f5e5a76bb3dc38377e7f81e3338b01e1328003db4ac23cd71e280fddde026","typeString":"literal_string \"queue !init'd\""},"value":"queue !init'd"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_858f5e5a76bb3dc38377e7f81e3338b01e1328003db4ac23cd71e280fddde026","typeString":"literal_string \"queue !init'd\""}],"id":49333,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2788:7:166","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":49338,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2788:36:166","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49339,"nodeType":"ExpressionStatement","src":"2788:36:166"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":49343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49341,"name":"max","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49306,"src":"2838:3:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":49342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2844:1:166","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2838:7:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2161636365707461626c65206d6178","id":49344,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2847:17:166","typeDescriptions":{"typeIdentifier":"t_stringliteral_a8a92d31cbc8779211c13437809c468e10617644bdb6370cfbd56808dd627715","typeString":"literal_string \"!acceptable max\""},"value":"!acceptable max"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a8a92d31cbc8779211c13437809c468e10617644bdb6370cfbd56808dd627715","typeString":"literal_string \"!acceptable max\""}],"id":49340,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2830:7:166","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":49345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2830:35:166","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49346,"nodeType":"ExpressionStatement","src":"2830:35:166"},{"id":49364,"nodeType":"Block","src":"2872:338:166","statements":[{"assignments":[49348],"declarations":[{"constant":false,"id":49348,"mutability":"mutable","name":"highestAllowed","nameLocation":"3097:14:166","nodeType":"VariableDeclaration","scope":49364,"src":"3089:22:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":49347,"name":"uint128","nodeType":"ElementaryTypeName","src":"3089:7:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":49354,"initialValue":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":49353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":49351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49349,"name":"first","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49313,"src":"3114:5:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":49350,"name":"max","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49306,"src":"3122:3:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"3114:11:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":49352,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3128:1:166","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3114:15:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"3089:40:166"},{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":49357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49355,"name":"last","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49318,"src":"3141:4:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":49356,"name":"highestAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49348,"src":"3148:14:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"3141:21:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49363,"nodeType":"IfStatement","src":"3137:67:166","trueBody":{"id":49362,"nodeType":"Block","src":"3164:40:166","statements":[{"expression":{"id":49360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49358,"name":"last","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49318,"src":"3174:4:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49359,"name":"highestAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49348,"src":"3181:14:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"3174:21:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":49361,"nodeType":"ExpressionStatement","src":"3174:21:166"}]}}]},{"assignments":[49366],"declarations":[{"constant":false,"id":49366,"mutability":"mutable","name":"highestAcceptableCommitBlock","nameLocation":"3397:28:166","nodeType":"VariableDeclaration","scope":49535,"src":"3389:36:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49365,"name":"uint256","nodeType":"ElementaryTypeName","src":"3389:7:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49371,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":49367,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3428:5:166","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":49368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3434:6:166","memberName":"number","nodeType":"MemberAccess","src":"3428:12:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":49369,"name":"delay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49304,"src":"3443:5:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3428:20:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3389:59:166"},{"assignments":[49373],"declarations":[{"constant":false,"id":49373,"mutability":"mutable","name":"containsVerified","nameLocation":"3727:16:166","nodeType":"VariableDeclaration","scope":49535,"src":"3722:21:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":49372,"name":"bool","nodeType":"ElementaryTypeName","src":"3722:4:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":49374,"nodeType":"VariableDeclarationStatement","src":"3722:21:166"},{"body":{"id":49403,"nodeType":"Block","src":"3867:287:166","statements":[{"assignments":[49381],"declarations":[{"constant":false,"id":49381,"mutability":"mutable","name":"commitBlock","nameLocation":"3883:11:166","nodeType":"VariableDeclaration","scope":49403,"src":"3875:19:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49380,"name":"uint256","nodeType":"ElementaryTypeName","src":"3875:7:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49386,"initialValue":{"baseExpression":{"expression":{"id":49382,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49302,"src":"3897:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49383,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3903:11:166","memberName":"commitBlock","nodeType":"MemberAccess","referencedDeclaration":49236,"src":"3897:17:166","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":49385,"indexExpression":{"id":49384,"name":"last","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49318,"src":"3915:4:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3897:23:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3875:45:166"},{"condition":{"id":49391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4002:45:166","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49387,"name":"commitBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49381,"src":"4004:11:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":49388,"name":"highestAcceptableCommitBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49366,"src":"4018:28:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4004:42:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":49390,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4003:44:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49398,"nodeType":"IfStatement","src":"3998:108:166","trueBody":{"id":49397,"nodeType":"Block","src":"4049:57:166","statements":[{"expression":{"id":49394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49392,"name":"containsVerified","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49373,"src":"4059:16:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":49393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4078:4:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"4059:23:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49395,"nodeType":"ExpressionStatement","src":"4059:23:166"},{"id":49396,"nodeType":"Break","src":"4092:5:166"}]}},{"id":49402,"nodeType":"UncheckedBlock","src":"4113:35:166","statements":[{"expression":{"id":49400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":true,"src":"4133:6:166","subExpression":{"id":49399,"name":"last","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49318,"src":"4135:4:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":49401,"nodeType":"ExpressionStatement","src":"4133:6:166"}]}]},"condition":{"id":49379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3850:15:166","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":49377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49375,"name":"first","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49313,"src":"3852:5:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":49376,"name":"last","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49318,"src":"3860:4:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"3852:12:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":49378,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3851:14:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49404,"nodeType":"WhileStatement","src":"3843:311:166"},{"condition":{"id":49406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4239:17:166","subExpression":{"id":49405,"name":"containsVerified","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49373,"src":"4240:16:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49414,"nodeType":"IfStatement","src":"4235:61:166","trueBody":{"id":49413,"nodeType":"Block","src":"4258:38:166","statements":[{"expression":{"arguments":[{"hexValue":"30","id":49410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4287:1:166","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":49409,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"4273:13:166","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":49407,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4277:7:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":49408,"nodeType":"ArrayTypeName","src":"4277:9:166","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":49411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4273:16:166","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":49311,"id":49412,"nodeType":"Return","src":"4266:23:166"}]}},{"assignments":[49419],"declarations":[{"constant":false,"id":49419,"mutability":"mutable","name":"items","nameLocation":"4319:5:166","nodeType":"VariableDeclaration","scope":49535,"src":"4302:22:166","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":49417,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4302:7:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":49418,"nodeType":"ArrayTypeName","src":"4302:9:166","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":49429,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":49427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":49425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49423,"name":"last","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49318,"src":"4341:4:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":49424,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4348:1:166","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4341:8:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":49426,"name":"first","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49313,"src":"4352:5:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4341:16:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":49422,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"4327:13:166","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":49420,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4331:7:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":49421,"nodeType":"ArrayTypeName","src":"4331:9:166","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":49428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4327:31:166","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"4302:56:166"},{"assignments":[49431],"declarations":[{"constant":false,"id":49431,"mutability":"mutable","name":"index","nameLocation":"4372:5:166","nodeType":"VariableDeclaration","scope":49535,"src":"4364:13:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49430,"name":"uint256","nodeType":"ElementaryTypeName","src":"4364:7:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49432,"nodeType":"VariableDeclarationStatement","src":"4364:13:166"},{"assignments":[49434],"declarations":[{"constant":false,"id":49434,"mutability":"mutable","name":"removedCount","nameLocation":"4436:12:166","nodeType":"VariableDeclaration","scope":49535,"src":"4428:20:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49433,"name":"uint256","nodeType":"ElementaryTypeName","src":"4428:7:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49435,"nodeType":"VariableDeclarationStatement","src":"4428:20:166"},{"body":{"id":49486,"nodeType":"Block","src":"4628:785:166","statements":[{"assignments":[49442],"declarations":[{"constant":false,"id":49442,"mutability":"mutable","name":"item","nameLocation":"4644:4:166","nodeType":"VariableDeclaration","scope":49486,"src":"4636:12:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49441,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4636:7:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":49447,"initialValue":{"baseExpression":{"expression":{"id":49443,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49302,"src":"4651:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49444,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4657:4:166","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":49232,"src":"4651:10:166","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":49446,"indexExpression":{"id":49445,"name":"first","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49313,"src":"4662:5:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4651:17:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4636:32:166"},{"condition":{"id":49452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4765:20:166","subExpression":{"baseExpression":{"expression":{"id":49448,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49302,"src":"4766:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49449,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4772:7:166","memberName":"removed","nodeType":"MemberAccess","referencedDeclaration":49240,"src":"4766:13:166","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":49451,"indexExpression":{"id":49450,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49442,"src":"4780:4:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4766:19:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":49468,"nodeType":"Block","src":"4880:160:166","statements":[{"id":49467,"nodeType":"UncheckedBlock","src":"4985:47:166","statements":[{"expression":{"id":49465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5007:14:166","subExpression":{"id":49464,"name":"removedCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49434,"src":"5009:12:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49466,"nodeType":"ExpressionStatement","src":"5007:14:166"}]}]},"id":49469,"nodeType":"IfStatement","src":"4761:279:166","trueBody":{"id":49463,"nodeType":"Block","src":"4787:87:166","statements":[{"expression":{"id":49457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":49453,"name":"items","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49419,"src":"4797:5:166","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":49455,"indexExpression":{"id":49454,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49431,"src":"4803:5:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4797:12:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49456,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49442,"src":"4812:4:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4797:19:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":49458,"nodeType":"ExpressionStatement","src":"4797:19:166"},{"id":49462,"nodeType":"UncheckedBlock","src":"4826:40:166","statements":[{"expression":{"id":49460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4848:7:166","subExpression":{"id":49459,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49431,"src":"4850:5:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49461,"nodeType":"ExpressionStatement","src":"4848:7:166"}]}]}},{"expression":{"id":49474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"5299:24:166","subExpression":{"baseExpression":{"expression":{"id":49470,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49302,"src":"5306:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49471,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5312:4:166","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":49232,"src":"5306:10:166","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":49473,"indexExpression":{"id":49472,"name":"first","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49313,"src":"5317:5:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5306:17:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49475,"nodeType":"ExpressionStatement","src":"5299:24:166"},{"expression":{"id":49480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"5331:31:166","subExpression":{"baseExpression":{"expression":{"id":49476,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49302,"src":"5338:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49477,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5344:11:166","memberName":"commitBlock","nodeType":"MemberAccess","referencedDeclaration":49236,"src":"5338:17:166","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":49479,"indexExpression":{"id":49478,"name":"first","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49313,"src":"5356:5:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5338:24:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49481,"nodeType":"ExpressionStatement","src":"5331:31:166"},{"id":49485,"nodeType":"UncheckedBlock","src":"5371:36:166","statements":[{"expression":{"id":49483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5391:7:166","subExpression":{"id":49482,"name":"first","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49313,"src":"5393:5:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":49484,"nodeType":"ExpressionStatement","src":"5391:7:166"}]}]},"condition":{"id":49440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4611:15:166","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":49438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49436,"name":"first","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49313,"src":"4613:5:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":49437,"name":"last","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49318,"src":"4621:4:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4613:12:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":49439,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4612:14:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49487,"nodeType":"WhileStatement","src":"4604:809:166"},{"expression":{"id":49492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":49488,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49302,"src":"5518:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49490,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5524:5:166","memberName":"first","nodeType":"MemberAccess","referencedDeclaration":49226,"src":"5518:11:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49491,"name":"first","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49313,"src":"5532:5:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5518:19:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":49493,"nodeType":"ExpressionStatement","src":"5518:19:166"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49494,"name":"removedCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49434,"src":"5548:12:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":49495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5564:1:166","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5548:17:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":49533,"nodeType":"Block","src":"5600:455:166","statements":[{"assignments":[49504],"declarations":[{"constant":false,"id":49504,"mutability":"mutable","name":"amendedItems","nameLocation":"5821:12:166","nodeType":"VariableDeclaration","scope":49533,"src":"5804:29:166","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":49502,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5804:7:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":49503,"nodeType":"ArrayTypeName","src":"5804:9:166","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":49510,"initialValue":{"arguments":[{"id":49508,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49431,"src":"5850:5:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":49507,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"5836:13:166","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":49505,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5840:7:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":49506,"nodeType":"ArrayTypeName","src":"5840:9:166","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":49509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5836:20:166","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"5804:52:166"},{"body":{"id":49529,"nodeType":"Block","src":"5932:90:166","statements":[{"expression":{"id":49523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":49517,"name":"amendedItems","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49504,"src":"5942:12:166","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":49519,"indexExpression":{"id":49518,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49512,"src":"5955:1:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5942:15:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":49520,"name":"items","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49419,"src":"5960:5:166","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":49522,"indexExpression":{"id":49521,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49512,"src":"5966:1:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5960:8:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5942:26:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":49524,"nodeType":"ExpressionStatement","src":"5942:26:166"},{"id":49528,"nodeType":"UncheckedBlock","src":"5978:36:166","statements":[{"expression":{"id":49526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"6000:3:166","subExpression":{"id":49525,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49512,"src":"6002:1:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49527,"nodeType":"ExpressionStatement","src":"6000:3:166"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49514,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49512,"src":"5919:1:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":49515,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49431,"src":"5923:5:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5919:9:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49530,"initializationExpression":{"assignments":[49512],"declarations":[{"constant":false,"id":49512,"mutability":"mutable","name":"i","nameLocation":"5916:1:166","nodeType":"VariableDeclaration","scope":49530,"src":"5908:9:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49511,"name":"uint256","nodeType":"ElementaryTypeName","src":"5908:7:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49513,"nodeType":"VariableDeclarationStatement","src":"5908:9:166"},"nodeType":"ForStatement","src":"5903:119:166"},{"expression":{"id":49531,"name":"amendedItems","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49504,"src":"6036:12:166","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":49311,"id":49532,"nodeType":"Return","src":"6029:19:166"}]},"id":49534,"nodeType":"IfStatement","src":"5544:511:166","trueBody":{"id":49499,"nodeType":"Block","src":"5567:27:166","statements":[{"expression":{"id":49497,"name":"items","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49419,"src":"5582:5:166","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":49311,"id":49498,"nodeType":"Return","src":"5575:12:166"}]}}]},"documentation":{"id":49299,"nodeType":"StructuredDocumentation","src":"1920:532:166","text":" @notice Dequeues element at front of queue if it exists AND it's surpassed the given\n verification period (i.e. has been sitting in the queue for enough blocks).\n @param queue QueueStorage struct from contract.\n @param delay The required delay that must have been surpassed in order to merit dequeuing\n the element.\n @param max The maximum number of elements we are allowed to dequeue in this call.\n @return item Dequeued element IFF delay period has been surpassed; otherwise, empty bytes32.*"},"id":49536,"implemented":true,"kind":"function","modifiers":[],"name":"dequeueVerified","nameLocation":"2464:15:166","nodeType":"FunctionDefinition","parameters":{"id":49307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49302,"mutability":"mutable","name":"queue","nameLocation":"2499:5:166","nodeType":"VariableDeclaration","scope":49536,"src":"2485:19:166","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue"},"typeName":{"id":49301,"nodeType":"UserDefinedTypeName","pathNode":{"id":49300,"name":"Queue","nameLocations":["2485:5:166"],"nodeType":"IdentifierPath","referencedDeclaration":49241,"src":"2485:5:166"},"referencedDeclaration":49241,"src":"2485:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue"}},"visibility":"internal"},{"constant":false,"id":49304,"mutability":"mutable","name":"delay","nameLocation":"2518:5:166","nodeType":"VariableDeclaration","scope":49536,"src":"2510:13:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49303,"name":"uint256","nodeType":"ElementaryTypeName","src":"2510:7:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":49306,"mutability":"mutable","name":"max","nameLocation":"2537:3:166","nodeType":"VariableDeclaration","scope":49536,"src":"2529:11:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":49305,"name":"uint128","nodeType":"ElementaryTypeName","src":"2529:7:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"2479:65:166"},"returnParameters":{"id":49311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49310,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49536,"src":"2563:16:166","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":49308,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2563:7:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":49309,"nodeType":"ArrayTypeName","src":"2563:9:166","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"2562:18:166"},"scope":49625,"src":"2455:3604:166","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":49562,"nodeType":"Block","src":"6209:91:166","statements":[{"expression":{"arguments":[{"id":49550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6223:20:166","subExpression":{"baseExpression":{"expression":{"id":49546,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49540,"src":"6224:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49547,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6230:7:166","memberName":"removed","nodeType":"MemberAccess","referencedDeclaration":49240,"src":"6224:13:166","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":49549,"indexExpression":{"id":49548,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49542,"src":"6238:4:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6224:19:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616c72656164792072656d6f766564","id":49551,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6245:17:166","typeDescriptions":{"typeIdentifier":"t_stringliteral_c974277859dbe5199cac4a5dad47692593995fbef88ea0805b1b8f52600e925d","typeString":"literal_string \"already removed\""},"value":"already removed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c974277859dbe5199cac4a5dad47692593995fbef88ea0805b1b8f52600e925d","typeString":"literal_string \"already removed\""}],"id":49545,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6215:7:166","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":49552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6215:48:166","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49553,"nodeType":"ExpressionStatement","src":"6215:48:166"},{"expression":{"id":49560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":49554,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49540,"src":"6269:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49557,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6275:7:166","memberName":"removed","nodeType":"MemberAccess","referencedDeclaration":49240,"src":"6269:13:166","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_bool_$","typeString":"mapping(bytes32 => bool)"}},"id":49558,"indexExpression":{"id":49556,"name":"item","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49542,"src":"6283:4:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6269:19:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":49559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6291:4:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"6269:26:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49561,"nodeType":"ExpressionStatement","src":"6269:26:166"}]},"documentation":{"id":49537,"nodeType":"StructuredDocumentation","src":"6063:83:166","text":" @notice Sets a certain value to be ignored (skipped) when dequeuing."},"id":49563,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"6158:6:166","nodeType":"FunctionDefinition","parameters":{"id":49543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49540,"mutability":"mutable","name":"queue","nameLocation":"6179:5:166","nodeType":"VariableDeclaration","scope":49563,"src":"6165:19:166","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue"},"typeName":{"id":49539,"nodeType":"UserDefinedTypeName","pathNode":{"id":49538,"name":"Queue","nameLocations":["6165:5:166"],"nodeType":"IdentifierPath","referencedDeclaration":49241,"src":"6165:5:166"},"referencedDeclaration":49241,"src":"6165:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue"}},"visibility":"internal"},{"constant":false,"id":49542,"mutability":"mutable","name":"item","nameLocation":"6194:4:166","nodeType":"VariableDeclaration","scope":49563,"src":"6186:12:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49541,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6186:7:166","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6164:35:166"},"returnParameters":{"id":49544,"nodeType":"ParameterList","parameters":[],"src":"6209:0:166"},"scope":49625,"src":"6149:151:166","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":49578,"nodeType":"Block","src":"6548:42:166","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":49576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":49572,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49567,"src":"6561:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49573,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6567:4:166","memberName":"last","nodeType":"MemberAccess","referencedDeclaration":49228,"src":"6561:10:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":49574,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49567,"src":"6574:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49575,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6580:5:166","memberName":"first","nodeType":"MemberAccess","referencedDeclaration":49226,"src":"6574:11:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"6561:24:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":49571,"id":49577,"nodeType":"Return","src":"6554:31:166"}]},"documentation":{"id":49564,"nodeType":"StructuredDocumentation","src":"6304:174:166","text":" @notice Check whether the queue is empty.\n @param queue QueueStorage struct from contract.\n @return bool True if queue is empty and false if otherwise."},"id":49579,"implemented":true,"kind":"function","modifiers":[],"name":"isEmpty","nameLocation":"6490:7:166","nodeType":"FunctionDefinition","parameters":{"id":49568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49567,"mutability":"mutable","name":"queue","nameLocation":"6512:5:166","nodeType":"VariableDeclaration","scope":49579,"src":"6498:19:166","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue"},"typeName":{"id":49566,"nodeType":"UserDefinedTypeName","pathNode":{"id":49565,"name":"Queue","nameLocations":["6498:5:166"],"nodeType":"IdentifierPath","referencedDeclaration":49241,"src":"6498:5:166"},"referencedDeclaration":49241,"src":"6498:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue"}},"visibility":"internal"}],"src":"6497:21:166"},"returnParameters":{"id":49571,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49570,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49579,"src":"6542:4:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":49569,"name":"bool","nodeType":"ElementaryTypeName","src":"6542:4:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6541:6:166"},"scope":49625,"src":"6481:109:166","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":49603,"nodeType":"Block","src":"6778:153:166","statements":[{"assignments":[49589],"declarations":[{"constant":false,"id":49589,"mutability":"mutable","name":"last","nameLocation":"6792:4:166","nodeType":"VariableDeclaration","scope":49603,"src":"6784:12:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":49588,"name":"uint128","nodeType":"ElementaryTypeName","src":"6784:7:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":49592,"initialValue":{"expression":{"id":49590,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49583,"src":"6799:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49591,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6805:4:166","memberName":"last","nodeType":"MemberAccess","referencedDeclaration":49228,"src":"6799:10:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"6784:25:166"},{"assignments":[49594],"declarations":[{"constant":false,"id":49594,"mutability":"mutable","name":"first","nameLocation":"6823:5:166","nodeType":"VariableDeclaration","scope":49603,"src":"6815:13:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":49593,"name":"uint128","nodeType":"ElementaryTypeName","src":"6815:7:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":49597,"initialValue":{"expression":{"id":49595,"name":"queue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49583,"src":"6831:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue storage pointer"}},"id":49596,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6837:5:166","memberName":"first","nodeType":"MemberAccess","referencedDeclaration":49226,"src":"6831:11:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"6815:27:166"},{"expression":{"arguments":[{"id":49599,"name":"last","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49589,"src":"6914:4:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":49600,"name":"first","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49594,"src":"6920:5:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":49598,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49624,"src":"6906:7:166","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint128_$_t_uint128_$returns$_t_uint256_$","typeString":"function (uint128,uint128) pure returns (uint256)"}},"id":49601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6906:20:166","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":49587,"id":49602,"nodeType":"Return","src":"6899:27:166"}]},"documentation":{"id":49580,"nodeType":"StructuredDocumentation","src":"6594:112:166","text":" @notice Returns number of elements in queue.\n @param queue QueueStorage struct from contract."},"id":49604,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"6718:6:166","nodeType":"FunctionDefinition","parameters":{"id":49584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49583,"mutability":"mutable","name":"queue","nameLocation":"6739:5:166","nodeType":"VariableDeclaration","scope":49604,"src":"6725:19:166","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue"},"typeName":{"id":49582,"nodeType":"UserDefinedTypeName","pathNode":{"id":49581,"name":"Queue","nameLocations":["6725:5:166"],"nodeType":"IdentifierPath","referencedDeclaration":49241,"src":"6725:5:166"},"referencedDeclaration":49241,"src":"6725:5:166","typeDescriptions":{"typeIdentifier":"t_struct$_Queue_$49241_storage_ptr","typeString":"struct QueueLib.Queue"}},"visibility":"internal"}],"src":"6724:21:166"},"returnParameters":{"id":49587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49586,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49604,"src":"6769:7:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49585,"name":"uint256","nodeType":"ElementaryTypeName","src":"6769:7:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6768:9:166"},"scope":49625,"src":"6709:222:166","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":49623,"nodeType":"Block","src":"7195:43:166","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":49620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":49618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49616,"name":"last","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49607,"src":"7216:4:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":49617,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7223:1:166","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7216:8:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":49619,"name":"first","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49609,"src":"7227:5:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7216:16:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":49615,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7208:7:166","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":49614,"name":"uint256","nodeType":"ElementaryTypeName","src":"7208:7:166","typeDescriptions":{}}},"id":49621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7208:25:166","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":49613,"id":49622,"nodeType":"Return","src":"7201:32:166"}]},"documentation":{"id":49605,"nodeType":"StructuredDocumentation","src":"6935:179:166","text":" @notice Returns number of elements between `last` and `first` (used internally).\n @param last The last element index.\n @param first The first element index."},"id":49624,"implemented":true,"kind":"function","modifiers":[],"name":"_length","nameLocation":"7126:7:166","nodeType":"FunctionDefinition","parameters":{"id":49610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49607,"mutability":"mutable","name":"last","nameLocation":"7142:4:166","nodeType":"VariableDeclaration","scope":49624,"src":"7134:12:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":49606,"name":"uint128","nodeType":"ElementaryTypeName","src":"7134:7:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":49609,"mutability":"mutable","name":"first","nameLocation":"7156:5:166","nodeType":"VariableDeclaration","scope":49624,"src":"7148:13:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":49608,"name":"uint128","nodeType":"ElementaryTypeName","src":"7148:7:166","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"7133:29:166"},"returnParameters":{"id":49613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49612,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49624,"src":"7186:7:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49611,"name":"uint256","nodeType":"ElementaryTypeName","src":"7186:7:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7185:9:166"},"scope":49625,"src":"7117:121:166","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":49626,"src":"341:6899:166","usedErrors":[]}],"src":"46:7195:166"},"id":166},"contracts/messaging/libraries/RateLimited.sol":{"ast":{"absolutePath":"contracts/messaging/libraries/RateLimited.sol","exportedSymbols":{"RateLimited":[49688]},"id":49689,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":49627,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:167"},{"abstract":true,"baseContracts":[],"canonicalName":"RateLimited","contractDependencies":[],"contractKind":"contract","documentation":{"id":49628,"nodeType":"StructuredDocumentation","src":"71:271:167","text":" @notice An abstract contract intended to manage the rate limiting aspect of spoke\n connector messaging. Rate limiting the number of messages we can send over a span of\n blocks is used to mitigate key DoSing vectors for transporting messages between chains."},"fullyImplemented":true,"id":49688,"linearizedBaseContracts":[49688],"name":"RateLimited","nameLocation":"361:11:167","nodeType":"ContractDefinition","nodes":[{"errorSelector":"8d9e55e2","id":49630,"name":"RateLimited__rateLimited_messageSendRateExceeded","nameLocation":"426:48:167","nodeType":"ErrorDefinition","parameters":{"id":49629,"nodeType":"ParameterList","parameters":[],"src":"474:2:167"},"src":"420:57:167"},{"anonymous":false,"eventSelector":"8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a15","id":49636,"name":"SendRateLimitUpdated","nameLocation":"526:20:167","nodeType":"EventDefinition","parameters":{"id":49635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49632,"indexed":false,"mutability":"mutable","name":"updater","nameLocation":"555:7:167","nodeType":"VariableDeclaration","scope":49636,"src":"547:15:167","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49631,"name":"address","nodeType":"ElementaryTypeName","src":"547:7:167","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":49634,"indexed":false,"mutability":"mutable","name":"newRateLimit","nameLocation":"572:12:167","nodeType":"VariableDeclaration","scope":49636,"src":"564:20:167","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49633,"name":"uint256","nodeType":"ElementaryTypeName","src":"564:7:167","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"546:39:167"},"src":"520:66:167"},{"constant":false,"documentation":{"id":49637,"nodeType":"StructuredDocumentation","src":"637:213:167","text":" @notice The number of blocks required between message sending events.\n @dev NOTE: This value is 0 by default, meaning that rate limiting functionality\n will naturally be disabled by default."},"functionSelector":"579c1618","id":49639,"mutability":"mutable","name":"rateLimitBlocks","nameLocation":"868:15:167","nodeType":"VariableDeclaration","scope":49688,"src":"853:30:167","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49638,"name":"uint256","nodeType":"ElementaryTypeName","src":"853:7:167","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"documentation":{"id":49640,"nodeType":"StructuredDocumentation","src":"888:68:167","text":" @notice Tracks the last block that we sent a message."},"functionSelector":"d7d317b3","id":49642,"mutability":"mutable","name":"lastSentBlock","nameLocation":"974:13:167","nodeType":"VariableDeclaration","scope":49688,"src":"959:28:167","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49641,"name":"uint256","nodeType":"ElementaryTypeName","src":"959:7:167","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"body":{"id":49662,"nodeType":"Block","src":"1297:322:167","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49645,"name":"lastSentBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49642,"src":"1384:13:167","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":49646,"name":"rateLimitBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49639,"src":"1400:15:167","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1384:31:167","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":49648,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1418:5:167","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":49649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1424:6:167","memberName":"number","nodeType":"MemberAccess","src":"1418:12:167","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1384:46:167","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49655,"nodeType":"IfStatement","src":"1380:124:167","trueBody":{"id":49654,"nodeType":"Block","src":"1432:72:167","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":49651,"name":"RateLimited__rateLimited_messageSendRateExceeded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49630,"src":"1447:48:167","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":49652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1447:50:167","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49653,"nodeType":"RevertStatement","src":"1440:57:167"}]}},{"expression":{"id":49659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49656,"name":"lastSentBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49642,"src":"1579:13:167","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":49657,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1595:5:167","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":49658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1601:6:167","memberName":"number","nodeType":"MemberAccess","src":"1595:12:167","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1579:28:167","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49660,"nodeType":"ExpressionStatement","src":"1579:28:167"},{"id":49661,"nodeType":"PlaceholderStatement","src":"1613:1:167"}]},"documentation":{"id":49643,"nodeType":"StructuredDocumentation","src":"1034:237:167","text":" @notice Checks to see if we can send this block, given the current rate limit\n setting and the last block we sent a message. If rate limit has been surpassed,\n we update the `lastSentBlock` to be the current block."},"id":49663,"name":"rateLimited","nameLocation":"1283:11:167","nodeType":"ModifierDefinition","parameters":{"id":49644,"nodeType":"ParameterList","parameters":[],"src":"1294:2:167"},"src":"1274:345:167","virtual":false,"visibility":"internal"},{"body":{"id":49686,"nodeType":"Block","src":"1803:274:167","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49670,"name":"_newRateLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49666,"src":"1817:13:167","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":49671,"name":"rateLimitBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49639,"src":"1834:15:167","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1817:32:167","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"216e65772072617465206c696d6974","id":49673,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1851:17:167","typeDescriptions":{"typeIdentifier":"t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54","typeString":"literal_string \"!new rate limit\""},"value":"!new rate limit"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54","typeString":"literal_string \"!new rate limit\""}],"id":49669,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1809:7:167","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":49674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1809:60:167","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49675,"nodeType":"ExpressionStatement","src":"1809:60:167"},{"expression":{"id":49678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49676,"name":"rateLimitBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49639,"src":"1983:15:167","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49677,"name":"_newRateLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49666,"src":"2001:13:167","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1983:31:167","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49679,"nodeType":"ExpressionStatement","src":"1983:31:167"},{"eventCall":{"arguments":[{"expression":{"id":49681,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2046:3:167","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":49682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2050:6:167","memberName":"sender","nodeType":"MemberAccess","src":"2046:10:167","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":49683,"name":"_newRateLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49666,"src":"2058:13:167","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":49680,"name":"SendRateLimitUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49636,"src":"2025:20:167","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":49684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2025:47:167","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49685,"nodeType":"EmitStatement","src":"2020:52:167"}]},"documentation":{"id":49664,"nodeType":"StructuredDocumentation","src":"1671:68:167","text":" @notice Update the current rate limit to a new value."},"id":49687,"implemented":true,"kind":"function","modifiers":[],"name":"_setRateLimitBlocks","nameLocation":"1751:19:167","nodeType":"FunctionDefinition","parameters":{"id":49667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49666,"mutability":"mutable","name":"_newRateLimit","nameLocation":"1779:13:167","nodeType":"VariableDeclaration","scope":49687,"src":"1771:21:167","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49665,"name":"uint256","nodeType":"ElementaryTypeName","src":"1771:7:167","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1770:23:167"},"returnParameters":{"id":49668,"nodeType":"ParameterList","parameters":[],"src":"1803:0:167"},"scope":49688,"src":"1742:335:167","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":49689,"src":"343:1736:167","usedErrors":[49630]}],"src":"46:2034:167"},"id":167},"contracts/shared/ProposedOwnable.sol":{"ast":{"absolutePath":"contracts/shared/ProposedOwnable.sol","exportedSymbols":{"IProposedOwnable":[50003],"ProposedOwnable":[49928]},"id":49929,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":49690,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:168"},{"absolutePath":"contracts/shared/interfaces/IProposedOwnable.sol","file":"./interfaces/IProposedOwnable.sol","id":49692,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":49929,"sourceUnit":50004,"src":"64:67:168","symbolAliases":[{"foreign":{"id":49691,"name":"IProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50003,"src":"72:16:168","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":49694,"name":"IProposedOwnable","nameLocations":["872:16:168"],"nodeType":"IdentifierPath","referencedDeclaration":50003,"src":"872:16:168"},"id":49695,"nodeType":"InheritanceSpecifier","src":"872:16:168"}],"canonicalName":"ProposedOwnable","contractDependencies":[],"contractKind":"contract","documentation":{"id":49693,"nodeType":"StructuredDocumentation","src":"133:701:168","text":" @title ProposedOwnable\n @notice Contract module which provides a basic access control mechanism,\n where there is an account (an owner) that can be granted exclusive access to\n specific functions.\n By default, the owner account will be the one that deploys the contract. This\n can later be changed via a two step process:\n 1. Call `proposeOwner`\n 2. Wait out the delay period\n 3. Call `acceptOwner`\n @dev This module is used through inheritance. It will make available the\n modifier `onlyOwner`, which can be applied to your functions to restrict\n their use to the owner.\n @dev The majority of this code was taken from the openzeppelin Ownable\n contract"},"fullyImplemented":true,"id":49928,"linearizedBaseContracts":[49928,50003],"name":"ProposedOwnable","nameLocation":"853:15:168","nodeType":"ContractDefinition","nodes":[{"errorSelector":"8d450dd8","id":49697,"name":"ProposedOwnable__onlyOwner_notOwner","nameLocation":"942:35:168","nodeType":"ErrorDefinition","parameters":{"id":49696,"nodeType":"ParameterList","parameters":[],"src":"977:2:168"},"src":"936:44:168"},{"errorSelector":"234fe4e2","id":49699,"name":"ProposedOwnable__onlyProposed_notProposedOwner","nameLocation":"989:46:168","nodeType":"ErrorDefinition","parameters":{"id":49698,"nodeType":"ParameterList","parameters":[],"src":"1035:2:168"},"src":"983:55:168"},{"errorSelector":"9380a17c","id":49701,"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","nameLocation":"1047:54:168","nodeType":"ErrorDefinition","parameters":{"id":49700,"nodeType":"ParameterList","parameters":[],"src":"1101:2:168"},"src":"1041:63:168"},{"errorSelector":"23780cca","id":49703,"name":"ProposedOwnable__proposeNewOwner_invalidProposal","nameLocation":"1113:48:168","nodeType":"ErrorDefinition","parameters":{"id":49702,"nodeType":"ParameterList","parameters":[],"src":"1161:2:168"},"src":"1107:57:168"},{"errorSelector":"945f6e7e","id":49705,"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","nameLocation":"1173:50:168","nodeType":"ErrorDefinition","parameters":{"id":49704,"nodeType":"ParameterList","parameters":[],"src":"1223:2:168"},"src":"1167:59:168"},{"errorSelector":"392cc0fc","id":49707,"name":"ProposedOwnable__renounceOwnership_noProposal","nameLocation":"1235:45:168","nodeType":"ErrorDefinition","parameters":{"id":49706,"nodeType":"ParameterList","parameters":[],"src":"1280:2:168"},"src":"1229:54:168"},{"errorSelector":"23295ef9","id":49709,"name":"ProposedOwnable__renounceOwnership_invalidProposal","nameLocation":"1292:50:168","nodeType":"ErrorDefinition","parameters":{"id":49708,"nodeType":"ParameterList","parameters":[],"src":"1342:2:168"},"src":"1286:59:168"},{"constant":false,"id":49711,"mutability":"mutable","name":"_owner","nameLocation":"1408:6:168","nodeType":"VariableDeclaration","scope":49928,"src":"1392:22:168","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49710,"name":"address","nodeType":"ElementaryTypeName","src":"1392:7:168","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":49713,"mutability":"mutable","name":"_proposed","nameLocation":"1435:9:168","nodeType":"VariableDeclaration","scope":49928,"src":"1419:25:168","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49712,"name":"address","nodeType":"ElementaryTypeName","src":"1419:7:168","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":49715,"mutability":"mutable","name":"_proposedOwnershipTimestamp","nameLocation":"1464:27:168","nodeType":"VariableDeclaration","scope":49928,"src":"1448:43:168","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49714,"name":"uint256","nodeType":"ElementaryTypeName","src":"1448:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":true,"id":49718,"mutability":"constant","name":"_delay","nameLocation":"1521:6:168","nodeType":"VariableDeclaration","scope":49928,"src":"1496:40:168","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49716,"name":"uint256","nodeType":"ElementaryTypeName","src":"1496:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"37","id":49717,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1530:6:168","subdenomination":"days","typeDescriptions":{"typeIdentifier":"t_rational_604800_by_1","typeString":"int_const 604800"},"value":"7"},"visibility":"private"},{"baseFunctions":[49986],"body":{"id":49726,"nodeType":"Block","src":"1696:24:168","statements":[{"expression":{"id":49724,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49711,"src":"1709:6:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":49723,"id":49725,"nodeType":"Return","src":"1702:13:168"}]},"documentation":{"id":49719,"nodeType":"StructuredDocumentation","src":"1574:64:168","text":" @notice Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":49727,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"1650:5:168","nodeType":"FunctionDefinition","parameters":{"id":49720,"nodeType":"ParameterList","parameters":[],"src":"1655:2:168"},"returnParameters":{"id":49723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49722,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49727,"src":"1687:7:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49721,"name":"address","nodeType":"ElementaryTypeName","src":"1687:7:168","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1686:9:168"},"scope":49928,"src":"1641:79:168","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[49992],"body":{"id":49735,"nodeType":"Block","src":"1850:27:168","statements":[{"expression":{"id":49733,"name":"_proposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49713,"src":"1863:9:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":49732,"id":49734,"nodeType":"Return","src":"1856:16:168"}]},"documentation":{"id":49728,"nodeType":"StructuredDocumentation","src":"1724:65:168","text":" @notice Returns the address of the proposed owner."},"functionSelector":"d1851c92","id":49736,"implemented":true,"kind":"function","modifiers":[],"name":"proposed","nameLocation":"1801:8:168","nodeType":"FunctionDefinition","parameters":{"id":49729,"nodeType":"ParameterList","parameters":[],"src":"1809:2:168"},"returnParameters":{"id":49732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49731,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49736,"src":"1841:7:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49730,"name":"address","nodeType":"ElementaryTypeName","src":"1841:7:168","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1840:9:168"},"scope":49928,"src":"1792:85:168","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":49744,"nodeType":"Block","src":"2016:45:168","statements":[{"expression":{"id":49742,"name":"_proposedOwnershipTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49715,"src":"2029:27:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":49741,"id":49743,"nodeType":"Return","src":"2022:34:168"}]},"documentation":{"id":49737,"nodeType":"StructuredDocumentation","src":"1881:65:168","text":" @notice Returns the address of the proposed owner."},"functionSelector":"3cf52ffb","id":49745,"implemented":true,"kind":"function","modifiers":[],"name":"proposedTimestamp","nameLocation":"1958:17:168","nodeType":"FunctionDefinition","parameters":{"id":49738,"nodeType":"ParameterList","parameters":[],"src":"1975:2:168"},"returnParameters":{"id":49741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49740,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49745,"src":"2007:7:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49739,"name":"uint256","nodeType":"ElementaryTypeName","src":"2007:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2006:9:168"},"scope":49928,"src":"1949:112:168","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":49753,"nodeType":"Block","src":"2206:24:168","statements":[{"expression":{"id":49751,"name":"_delay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49718,"src":"2219:6:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":49750,"id":49752,"nodeType":"Return","src":"2212:13:168"}]},"documentation":{"id":49746,"nodeType":"StructuredDocumentation","src":"2065:83:168","text":" @notice Returns the delay period before a new owner can be accepted."},"functionSelector":"6a42b8f8","id":49754,"implemented":true,"kind":"function","modifiers":[],"name":"delay","nameLocation":"2160:5:168","nodeType":"FunctionDefinition","parameters":{"id":49747,"nodeType":"ParameterList","parameters":[],"src":"2165:2:168"},"returnParameters":{"id":49750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49749,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49754,"src":"2197:7:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49748,"name":"uint256","nodeType":"ElementaryTypeName","src":"2197:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2196:9:168"},"scope":49928,"src":"2151:79:168","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":49766,"nodeType":"Block","src":"2334:88:168","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":49760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49757,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49711,"src":"2344:6:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":49758,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2354:3:168","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":49759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2358:6:168","memberName":"sender","nodeType":"MemberAccess","src":"2354:10:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2344:20:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49764,"nodeType":"IfStatement","src":"2340:70:168","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":49761,"name":"ProposedOwnable__onlyOwner_notOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49697,"src":"2373:35:168","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":49762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2373:37:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49763,"nodeType":"RevertStatement","src":"2366:44:168"}},{"id":49765,"nodeType":"PlaceholderStatement","src":"2416:1:168"}]},"documentation":{"id":49755,"nodeType":"StructuredDocumentation","src":"2234:76:168","text":" @notice Throws if called by any account other than the owner."},"id":49767,"name":"onlyOwner","nameLocation":"2322:9:168","nodeType":"ModifierDefinition","parameters":{"id":49756,"nodeType":"ParameterList","parameters":[],"src":"2331:2:168"},"src":"2313:109:168","virtual":false,"visibility":"internal"},{"body":{"id":49779,"nodeType":"Block","src":"2538:102:168","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":49773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49770,"name":"_proposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49713,"src":"2548:9:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":49771,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2561:3:168","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":49772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2565:6:168","memberName":"sender","nodeType":"MemberAccess","src":"2561:10:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2548:23:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49777,"nodeType":"IfStatement","src":"2544:84:168","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":49774,"name":"ProposedOwnable__onlyProposed_notProposedOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49699,"src":"2580:46:168","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":49775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2580:48:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49776,"nodeType":"RevertStatement","src":"2573:55:168"}},{"id":49778,"nodeType":"PlaceholderStatement","src":"2634:1:168"}]},"documentation":{"id":49768,"nodeType":"StructuredDocumentation","src":"2426:85:168","text":" @notice Throws if called by any account other than the proposed owner."},"id":49780,"name":"onlyProposed","nameLocation":"2523:12:168","nodeType":"ModifierDefinition","parameters":{"id":49769,"nodeType":"ParameterList","parameters":[],"src":"2535:2:168"},"src":"2514:126:168","virtual":false,"visibility":"internal"},{"body":{"id":49795,"nodeType":"Block","src":"2748:182:168","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":49783,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2791:5:168","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":49784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2797:9:168","memberName":"timestamp","nodeType":"MemberAccess","src":"2791:15:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":49785,"name":"_proposedOwnershipTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49715,"src":"2809:27:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2791:45:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":49787,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2790:47:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":49788,"name":"_delay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49718,"src":"2841:6:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2790:57:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49793,"nodeType":"IfStatement","src":"2786:132:168","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":49790,"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49701,"src":"2862:54:168","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":49791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2862:56:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49792,"nodeType":"RevertStatement","src":"2855:63:168"}},{"id":49794,"nodeType":"PlaceholderStatement","src":"2924:1:168"}]},"documentation":{"id":49781,"nodeType":"StructuredDocumentation","src":"2644:68:168","text":" @notice Throws if the ownership delay has not elapsed"},"id":49796,"name":"ownershipDelayElapsed","nameLocation":"2724:21:168","nodeType":"ModifierDefinition","parameters":{"id":49782,"nodeType":"ParameterList","parameters":[],"src":"2745:2:168"},"src":"2715:215:168","virtual":false,"visibility":"internal"},{"body":{"id":49809,"nodeType":"Block","src":"3103:38:168","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":49807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49802,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49711,"src":"3116:6:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":49805,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3134:1:168","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":49804,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3126:7:168","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":49803,"name":"address","nodeType":"ElementaryTypeName","src":"3126:7:168","typeDescriptions":{}}},"id":49806,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3126:10:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3116:20:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":49801,"id":49808,"nodeType":"Return","src":"3109:27:168"}]},"documentation":{"id":49797,"nodeType":"StructuredDocumentation","src":"2934:118:168","text":" @notice Indicates if the ownership has been renounced() by\n checking if current owner is address(0)"},"functionSelector":"d232c220","id":49810,"implemented":true,"kind":"function","modifiers":[],"name":"renounced","nameLocation":"3064:9:168","nodeType":"FunctionDefinition","parameters":{"id":49798,"nodeType":"ParameterList","parameters":[],"src":"3073:2:168"},"returnParameters":{"id":49801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49800,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49810,"src":"3097:4:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":49799,"name":"bool","nodeType":"ElementaryTypeName","src":"3097:4:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3096:6:168"},"scope":49928,"src":"3055:86:168","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[49998],"body":{"id":49840,"nodeType":"Block","src":"3394:347:168","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":49824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":49820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49818,"name":"_proposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49713,"src":"3439:9:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":49819,"name":"newlyProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49813,"src":"3452:13:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3439:26:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49821,"name":"_proposedOwnershipTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49715,"src":"3469:27:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":49822,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3500:1:168","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3469:32:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3439:62:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49828,"nodeType":"IfStatement","src":"3435:131:168","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":49825,"name":"ProposedOwnable__proposeNewOwner_invalidProposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49703,"src":"3516:48:168","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":49826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3516:50:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49827,"nodeType":"RevertStatement","src":"3509:57:168"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":49831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49829,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49711,"src":"3618:6:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":49830,"name":"newlyProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49813,"src":"3628:13:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3618:23:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49835,"nodeType":"IfStatement","src":"3614:88:168","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":49832,"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49705,"src":"3650:50:168","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":49833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3650:52:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49834,"nodeType":"RevertStatement","src":"3643:59:168"}},{"expression":{"arguments":[{"id":49837,"name":"newlyProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49813,"src":"3722:13:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":49836,"name":"_setProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49927,"src":"3709:12:168","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":49838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3709:27:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49839,"nodeType":"ExpressionStatement","src":"3709:27:168"}]},"documentation":{"id":49811,"nodeType":"StructuredDocumentation","src":"3179:139:168","text":" @notice Sets the timestamp for an owner to be proposed, and sets the\n newly proposed owner as step 1 in a 2-step process"},"functionSelector":"b1f8100d","id":49841,"implemented":true,"kind":"function","modifiers":[{"id":49816,"kind":"modifierInvocation","modifierName":{"id":49815,"name":"onlyOwner","nameLocations":["3384:9:168"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"3384:9:168"},"nodeType":"ModifierInvocation","src":"3384:9:168"}],"name":"proposeNewOwner","nameLocation":"3330:15:168","nodeType":"FunctionDefinition","parameters":{"id":49814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49813,"mutability":"mutable","name":"newlyProposed","nameLocation":"3354:13:168","nodeType":"VariableDeclaration","scope":49841,"src":"3346:21:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49812,"name":"address","nodeType":"ElementaryTypeName","src":"3346:7:168","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3345:23:168"},"returnParameters":{"id":49817,"nodeType":"ParameterList","parameters":[],"src":"3394:0:168"},"scope":49928,"src":"3321:420:168","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":49873,"nodeType":"Block","src":"3896:366:168","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49849,"name":"_proposedOwnershipTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49715,"src":"3960:27:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":49850,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3991:1:168","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3960:32:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49855,"nodeType":"IfStatement","src":"3956:92:168","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":49852,"name":"ProposedOwnable__renounceOwnership_noProposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49707,"src":"4001:45:168","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":49853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4001:47:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49854,"nodeType":"RevertStatement","src":"3994:54:168"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":49861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49856,"name":"_proposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49713,"src":"4095:9:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":49859,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4116:1:168","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":49858,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4108:7:168","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":49857,"name":"address","nodeType":"ElementaryTypeName","src":"4108:7:168","typeDescriptions":{}}},"id":49860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4108:10:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4095:23:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49865,"nodeType":"IfStatement","src":"4091:88:168","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":49862,"name":"ProposedOwnable__renounceOwnership_invalidProposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49709,"src":"4127:50:168","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":49863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4127:52:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49864,"nodeType":"RevertStatement","src":"4120:59:168"}},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":49869,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4254:1:168","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":49868,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4246:7:168","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":49867,"name":"address","nodeType":"ElementaryTypeName","src":"4246:7:168","typeDescriptions":{}}},"id":49870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4246:10:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":49866,"name":"_setOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49908,"src":"4236:9:168","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":49871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4236:21:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49872,"nodeType":"ExpressionStatement","src":"4236:21:168"}]},"documentation":{"id":49842,"nodeType":"StructuredDocumentation","src":"3745:72:168","text":" @notice Renounces ownership of the contract after a delay"},"functionSelector":"715018a6","id":49874,"implemented":true,"kind":"function","modifiers":[{"id":49845,"kind":"modifierInvocation","modifierName":{"id":49844,"name":"onlyOwner","nameLocations":["3864:9:168"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"3864:9:168"},"nodeType":"ModifierInvocation","src":"3864:9:168"},{"id":49847,"kind":"modifierInvocation","modifierName":{"id":49846,"name":"ownershipDelayElapsed","nameLocations":["3874:21:168"],"nodeType":"IdentifierPath","referencedDeclaration":49796,"src":"3874:21:168"},"nodeType":"ModifierInvocation","src":"3874:21:168"}],"name":"renounceOwnership","nameLocation":"3829:17:168","nodeType":"FunctionDefinition","parameters":{"id":49843,"nodeType":"ParameterList","parameters":[],"src":"3846:2:168"},"returnParameters":{"id":49848,"nodeType":"ParameterList","parameters":[],"src":"3896:0:168"},"scope":49928,"src":"3820:442:168","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[50002],"body":{"id":49886,"nodeType":"Block","src":"4485:458:168","statements":[{"expression":{"arguments":[{"id":49883,"name":"_proposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49713,"src":"4928:9:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":49882,"name":"_setOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49908,"src":"4918:9:168","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":49884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4918:20:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49885,"nodeType":"ExpressionStatement","src":"4918:20:168"}]},"documentation":{"id":49875,"nodeType":"StructuredDocumentation","src":"4266:135:168","text":" @notice Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"c5b350df","id":49887,"implemented":true,"kind":"function","modifiers":[{"id":49878,"kind":"modifierInvocation","modifierName":{"id":49877,"name":"onlyProposed","nameLocations":["4450:12:168"],"nodeType":"IdentifierPath","referencedDeclaration":49780,"src":"4450:12:168"},"nodeType":"ModifierInvocation","src":"4450:12:168"},{"id":49880,"kind":"modifierInvocation","modifierName":{"id":49879,"name":"ownershipDelayElapsed","nameLocations":["4463:21:168"],"nodeType":"IdentifierPath","referencedDeclaration":49796,"src":"4463:21:168"},"nodeType":"ModifierInvocation","src":"4463:21:168"}],"name":"acceptProposedOwner","nameLocation":"4413:19:168","nodeType":"FunctionDefinition","parameters":{"id":49876,"nodeType":"ParameterList","parameters":[],"src":"4432:2:168"},"returnParameters":{"id":49881,"nodeType":"ParameterList","parameters":[],"src":"4485:0:168"},"scope":49928,"src":"4404:539:168","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":49907,"nodeType":"Block","src":"5027:139:168","statements":[{"eventCall":{"arguments":[{"id":49893,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49711,"src":"5059:6:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":49894,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49889,"src":"5067:8:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":49892,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49980,"src":"5038:20:168","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":49895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5038:38:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49896,"nodeType":"EmitStatement","src":"5033:43:168"},{"expression":{"id":49899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49897,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49711,"src":"5082:6:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49898,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49889,"src":"5091:8:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5082:17:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":49900,"nodeType":"ExpressionStatement","src":"5082:17:168"},{"expression":{"id":49902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"5105:34:168","subExpression":{"id":49901,"name":"_proposedOwnershipTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49715,"src":"5112:27:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49903,"nodeType":"ExpressionStatement","src":"5105:34:168"},{"expression":{"id":49905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"5145:16:168","subExpression":{"id":49904,"name":"_proposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49713,"src":"5152:9:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49906,"nodeType":"ExpressionStatement","src":"5145:16:168"}]},"id":49908,"implemented":true,"kind":"function","modifiers":[],"name":"_setOwner","nameLocation":"4990:9:168","nodeType":"FunctionDefinition","parameters":{"id":49890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49889,"mutability":"mutable","name":"newOwner","nameLocation":"5008:8:168","nodeType":"VariableDeclaration","scope":49908,"src":"5000:16:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49888,"name":"address","nodeType":"ElementaryTypeName","src":"5000:7:168","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4999:18:168"},"returnParameters":{"id":49891,"nodeType":"ParameterList","parameters":[],"src":"5027:0:168"},"scope":49928,"src":"4981:185:168","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":49926,"nodeType":"Block","src":"5223:130:168","statements":[{"expression":{"id":49916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49913,"name":"_proposedOwnershipTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49715,"src":"5229:27:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":49914,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"5259:5:168","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":49915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5265:9:168","memberName":"timestamp","nodeType":"MemberAccess","src":"5259:15:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5229:45:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49917,"nodeType":"ExpressionStatement","src":"5229:45:168"},{"expression":{"id":49920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49918,"name":"_proposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49713,"src":"5280:9:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49919,"name":"newlyProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49910,"src":"5292:13:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5280:25:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":49921,"nodeType":"ExpressionStatement","src":"5280:25:168"},{"eventCall":{"arguments":[{"id":49923,"name":"newlyProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49910,"src":"5334:13:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":49922,"name":"OwnershipProposed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49973,"src":"5316:17:168","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":49924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5316:32:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49925,"nodeType":"EmitStatement","src":"5311:37:168"}]},"id":49927,"implemented":true,"kind":"function","modifiers":[],"name":"_setProposed","nameLocation":"5179:12:168","nodeType":"FunctionDefinition","parameters":{"id":49911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49910,"mutability":"mutable","name":"newlyProposed","nameLocation":"5200:13:168","nodeType":"VariableDeclaration","scope":49927,"src":"5192:21:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49909,"name":"address","nodeType":"ElementaryTypeName","src":"5192:7:168","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5191:23:168"},"returnParameters":{"id":49912,"nodeType":"ParameterList","parameters":[],"src":"5223:0:168"},"scope":49928,"src":"5170:183:168","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":49929,"src":"835:4520:168","usedErrors":[49697,49699,49701,49703,49705,49707,49709]}],"src":"39:5317:168"},"id":168},"contracts/shared/ProposedOwnableUpgradeable.sol":{"ast":{"absolutePath":"contracts/shared/ProposedOwnableUpgradeable.sol","exportedSymbols":{"Initializable":[8238],"ProposedOwnable":[49928],"ProposedOwnableUpgradeable":[49965]},"id":49966,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":49930,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:169"},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","id":49932,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":49966,"sourceUnit":8239,"src":"64:96:169","symbolAliases":[{"foreign":{"id":49931,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8238,"src":"72:13:169","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/ProposedOwnable.sol","file":"./ProposedOwnable.sol","id":49934,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":49966,"sourceUnit":49929,"src":"162:54:169","symbolAliases":[{"foreign":{"id":49933,"name":"ProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49928,"src":"170:15:169","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":49935,"name":"Initializable","nameLocations":["266:13:169"],"nodeType":"IdentifierPath","referencedDeclaration":8238,"src":"266:13:169"},"id":49936,"nodeType":"InheritanceSpecifier","src":"266:13:169"},{"baseName":{"id":49937,"name":"ProposedOwnable","nameLocations":["281:15:169"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"281:15:169"},"id":49938,"nodeType":"InheritanceSpecifier","src":"281:15:169"}],"canonicalName":"ProposedOwnableUpgradeable","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":49965,"linearizedBaseContracts":[49965,49928,50003,8238],"name":"ProposedOwnableUpgradeable","nameLocation":"236:26:169","nodeType":"ContractDefinition","nodes":[{"body":{"id":49947,"nodeType":"Block","src":"444:45:169","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":49944,"name":"__ProposedOwnable_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49959,"src":"450:32:169","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":49945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"450:34:169","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49946,"nodeType":"ExpressionStatement","src":"450:34:169"}]},"documentation":{"id":49939,"nodeType":"StructuredDocumentation","src":"301:80:169","text":" @dev Initializes the contract setting the deployer as the initial"},"id":49948,"implemented":true,"kind":"function","modifiers":[{"id":49942,"kind":"modifierInvocation","modifierName":{"id":49941,"name":"onlyInitializing","nameLocations":["427:16:169"],"nodeType":"IdentifierPath","referencedDeclaration":8183,"src":"427:16:169"},"nodeType":"ModifierInvocation","src":"427:16:169"}],"name":"__ProposedOwnable_init","nameLocation":"393:22:169","nodeType":"FunctionDefinition","parameters":{"id":49940,"nodeType":"ParameterList","parameters":[],"src":"415:2:169"},"returnParameters":{"id":49943,"nodeType":"ParameterList","parameters":[],"src":"444:0:169"},"scope":49965,"src":"384:105:169","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":49958,"nodeType":"Block","src":"563:32:169","statements":[{"expression":{"arguments":[{"expression":{"id":49954,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"579:3:169","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":49955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"583:6:169","memberName":"sender","nodeType":"MemberAccess","src":"579:10:169","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":49953,"name":"_setOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49908,"src":"569:9:169","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":49956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"569:21:169","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49957,"nodeType":"ExpressionStatement","src":"569:21:169"}]},"id":49959,"implemented":true,"kind":"function","modifiers":[{"id":49951,"kind":"modifierInvocation","modifierName":{"id":49950,"name":"onlyInitializing","nameLocations":["546:16:169"],"nodeType":"IdentifierPath","referencedDeclaration":8183,"src":"546:16:169"},"nodeType":"ModifierInvocation","src":"546:16:169"}],"name":"__ProposedOwnable_init_unchained","nameLocation":"502:32:169","nodeType":"FunctionDefinition","parameters":{"id":49949,"nodeType":"ParameterList","parameters":[],"src":"534:2:169"},"returnParameters":{"id":49952,"nodeType":"ParameterList","parameters":[],"src":"563:0:169"},"scope":49965,"src":"493:102:169","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"constant":false,"documentation":{"id":49960,"nodeType":"StructuredDocumentation","src":"599:246:169","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":49964,"mutability":"mutable","name":"__GAP","nameLocation":"868:5:169","nodeType":"VariableDeclaration","scope":49965,"src":"848:25:169","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$47_storage","typeString":"uint256[47]"},"typeName":{"baseType":{"id":49961,"name":"uint256","nodeType":"ElementaryTypeName","src":"848:7:169","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49963,"length":{"hexValue":"3437","id":49962,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"856:2:169","typeDescriptions":{"typeIdentifier":"t_rational_47_by_1","typeString":"int_const 47"},"value":"47"},"nodeType":"ArrayTypeName","src":"848:11:169","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$47_storage_ptr","typeString":"uint256[47]"}},"visibility":"private"}],"scope":49966,"src":"218:658:169","usedErrors":[49697,49699,49701,49703,49705,49707,49709]}],"src":"39:838:169"},"id":169},"contracts/shared/interfaces/IProposedOwnable.sol":{"ast":{"absolutePath":"contracts/shared/interfaces/IProposedOwnable.sol","exportedSymbols":{"IProposedOwnable":[50003]},"id":50004,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":49967,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"32:23:170"},{"abstract":false,"baseContracts":[],"canonicalName":"IProposedOwnable","contractDependencies":[],"contractKind":"interface","documentation":{"id":49968,"nodeType":"StructuredDocumentation","src":"57:138:170","text":" @title IProposedOwnable\n @notice Defines a minimal interface for ownership with a two step proposal and acceptance\n process"},"fullyImplemented":false,"id":50003,"linearizedBaseContracts":[50003],"name":"IProposedOwnable","nameLocation":"206:16:170","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":49969,"nodeType":"StructuredDocumentation","src":"227:82:170","text":" @dev This emits when change in ownership of a contract is proposed."},"eventSelector":"6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a","id":49973,"name":"OwnershipProposed","nameLocation":"318:17:170","nodeType":"EventDefinition","parameters":{"id":49972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49971,"indexed":true,"mutability":"mutable","name":"proposedOwner","nameLocation":"352:13:170","nodeType":"VariableDeclaration","scope":49973,"src":"336:29:170","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49970,"name":"address","nodeType":"ElementaryTypeName","src":"336:7:170","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"335:31:170"},"src":"312:55:170"},{"anonymous":false,"documentation":{"id":49974,"nodeType":"StructuredDocumentation","src":"371:68:170","text":" @dev This emits when ownership of a contract changes."},"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":49980,"name":"OwnershipTransferred","nameLocation":"448:20:170","nodeType":"EventDefinition","parameters":{"id":49979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49976,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"485:13:170","nodeType":"VariableDeclaration","scope":49980,"src":"469:29:170","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49975,"name":"address","nodeType":"ElementaryTypeName","src":"469:7:170","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":49978,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"516:8:170","nodeType":"VariableDeclaration","scope":49980,"src":"500:24:170","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49977,"name":"address","nodeType":"ElementaryTypeName","src":"500:7:170","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"468:57:170"},"src":"442:84:170"},{"documentation":{"id":49981,"nodeType":"StructuredDocumentation","src":"530:97:170","text":" @notice Get the address of the owner\n @return owner_ The address of the owner."},"functionSelector":"8da5cb5b","id":49986,"implemented":false,"kind":"function","modifiers":[],"name":"owner","nameLocation":"639:5:170","nodeType":"FunctionDefinition","parameters":{"id":49982,"nodeType":"ParameterList","parameters":[],"src":"644:2:170"},"returnParameters":{"id":49985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49984,"mutability":"mutable","name":"owner_","nameLocation":"678:6:170","nodeType":"VariableDeclaration","scope":49986,"src":"670:14:170","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49983,"name":"address","nodeType":"ElementaryTypeName","src":"670:7:170","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"669:16:170"},"scope":50003,"src":"630:56:170","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":49987,"nodeType":"StructuredDocumentation","src":"690:112:170","text":" @notice Get the address of the proposed owner\n @return proposed_ The address of the proposed."},"functionSelector":"d1851c92","id":49992,"implemented":false,"kind":"function","modifiers":[],"name":"proposed","nameLocation":"814:8:170","nodeType":"FunctionDefinition","parameters":{"id":49988,"nodeType":"ParameterList","parameters":[],"src":"822:2:170"},"returnParameters":{"id":49991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49990,"mutability":"mutable","name":"proposed_","nameLocation":"856:9:170","nodeType":"VariableDeclaration","scope":49992,"src":"848:17:170","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49989,"name":"address","nodeType":"ElementaryTypeName","src":"848:7:170","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"847:19:170"},"scope":50003,"src":"805:62:170","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":49993,"nodeType":"StructuredDocumentation","src":"871:141:170","text":" @notice Set the address of the proposed owner of the contract\n @param newlyProposed The proposed new owner of the contract"},"functionSelector":"b1f8100d","id":49998,"implemented":false,"kind":"function","modifiers":[],"name":"proposeNewOwner","nameLocation":"1024:15:170","nodeType":"FunctionDefinition","parameters":{"id":49996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49995,"mutability":"mutable","name":"newlyProposed","nameLocation":"1048:13:170","nodeType":"VariableDeclaration","scope":49998,"src":"1040:21:170","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49994,"name":"address","nodeType":"ElementaryTypeName","src":"1040:7:170","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1039:23:170"},"returnParameters":{"id":49997,"nodeType":"ParameterList","parameters":[],"src":"1071:0:170"},"scope":50003,"src":"1015:57:170","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":49999,"nodeType":"StructuredDocumentation","src":"1076:76:170","text":" @notice Set the address of the proposed owner of the contract"},"functionSelector":"c5b350df","id":50002,"implemented":false,"kind":"function","modifiers":[],"name":"acceptProposedOwner","nameLocation":"1164:19:170","nodeType":"FunctionDefinition","parameters":{"id":50000,"nodeType":"ParameterList","parameters":[],"src":"1183:2:170"},"returnParameters":{"id":50001,"nodeType":"ParameterList","parameters":[],"src":"1194:0:170"},"scope":50003,"src":"1155:40:170","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":50004,"src":"196:1001:170","usedErrors":[]}],"src":"32:1166:170"},"id":170},"contracts/shared/libraries/ExcessivelySafeCall.sol":{"ast":{"absolutePath":"contracts/shared/libraries/ExcessivelySafeCall.sol","exportedSymbols":{"ExcessivelySafeCall":[50104]},"id":50105,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":50005,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:171"},{"abstract":false,"baseContracts":[],"canonicalName":"ExcessivelySafeCall","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":50104,"linearizedBaseContracts":[50104],"name":"ExcessivelySafeCall","nameLocation":"292:19:171","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":50008,"mutability":"constant","name":"LOW_28_MASK","nameLocation":"333:11:171","nodeType":"VariableDeclaration","scope":50104,"src":"316:97:171","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50006,"name":"uint256","nodeType":"ElementaryTypeName","src":"316:7:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307830303030303030306666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666","id":50007,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"347:66:171","typeDescriptions":{"typeIdentifier":"t_rational_26959946667150639794667015087019630673637144422540572481103610249215_by_1","typeString":"int_const 2695...(60 digits omitted)...9215"},"value":"0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},"visibility":"internal"},{"body":{"id":50044,"nodeType":"Block","src":"1539:938:171","statements":[{"assignments":[50027],"declarations":[{"constant":false,"id":50027,"mutability":"mutable","name":"_toCopy","nameLocation":"1585:7:171","nodeType":"VariableDeclaration","scope":50044,"src":"1577:15:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50026,"name":"uint256","nodeType":"ElementaryTypeName","src":"1577:7:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50028,"nodeType":"VariableDeclarationStatement","src":"1577:15:171"},{"assignments":[50030],"declarations":[{"constant":false,"id":50030,"mutability":"mutable","name":"_success","nameLocation":"1603:8:171","nodeType":"VariableDeclaration","scope":50044,"src":"1598:13:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50029,"name":"bool","nodeType":"ElementaryTypeName","src":"1598:4:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":50031,"nodeType":"VariableDeclarationStatement","src":"1598:13:171"},{"assignments":[50033],"declarations":[{"constant":false,"id":50033,"mutability":"mutable","name":"_returnData","nameLocation":"1630:11:171","nodeType":"VariableDeclaration","scope":50044,"src":"1617:24:171","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":50032,"name":"bytes","nodeType":"ElementaryTypeName","src":"1617:5:171","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":50038,"initialValue":{"arguments":[{"id":50036,"name":"_maxCopy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50017,"src":"1654:8:171","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":50035,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1644:9:171","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":50034,"name":"bytes","nodeType":"ElementaryTypeName","src":"1648:5:171","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":50037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1644:19:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"1617:46:171"},{"AST":{"nodeType":"YulBlock","src":"1872:565:171","statements":[{"nodeType":"YulAssignment","src":"1880:222:171","value":{"arguments":[{"name":"_gas","nodeType":"YulIdentifier","src":"1906:4:171"},{"name":"_target","nodeType":"YulIdentifier","src":"1927:7:171"},{"name":"_value","nodeType":"YulIdentifier","src":"1957:6:171"},{"arguments":[{"name":"_calldata","nodeType":"YulIdentifier","src":"1992:9:171"},{"kind":"number","nodeType":"YulLiteral","src":"2003:4:171","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1988:3:171"},"nodeType":"YulFunctionCall","src":"1988:20:171"},{"arguments":[{"name":"_calldata","nodeType":"YulIdentifier","src":"2033:9:171"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2027:5:171"},"nodeType":"YulFunctionCall","src":"2027:16:171"},{"kind":"number","nodeType":"YulLiteral","src":"2062:1:171","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2083:1:171","type":"","value":"0"}],"functionName":{"name":"call","nodeType":"YulIdentifier","src":"1892:4:171"},"nodeType":"YulFunctionCall","src":"1892:210:171"},"variableNames":[{"name":"_success","nodeType":"YulIdentifier","src":"1880:8:171"}]},{"nodeType":"YulAssignment","src":"2146:27:171","value":{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"2157:14:171"},"nodeType":"YulFunctionCall","src":"2157:16:171"},"variableNames":[{"name":"_toCopy","nodeType":"YulIdentifier","src":"2146:7:171"}]},{"body":{"nodeType":"YulBlock","src":"2205:37:171","statements":[{"nodeType":"YulAssignment","src":"2215:19:171","value":{"name":"_maxCopy","nodeType":"YulIdentifier","src":"2226:8:171"},"variableNames":[{"name":"_toCopy","nodeType":"YulIdentifier","src":"2215:7:171"}]}]},"condition":{"arguments":[{"name":"_toCopy","nodeType":"YulIdentifier","src":"2186:7:171"},{"name":"_maxCopy","nodeType":"YulIdentifier","src":"2195:8:171"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2183:2:171"},"nodeType":"YulFunctionCall","src":"2183:21:171"},"nodeType":"YulIf","src":"2180:62:171"},{"expression":{"arguments":[{"name":"_returnData","nodeType":"YulIdentifier","src":"2302:11:171"},{"name":"_toCopy","nodeType":"YulIdentifier","src":"2315:7:171"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2295:6:171"},"nodeType":"YulFunctionCall","src":"2295:28:171"},"nodeType":"YulExpressionStatement","src":"2295:28:171"},{"expression":{"arguments":[{"arguments":[{"name":"_returnData","nodeType":"YulIdentifier","src":"2400:11:171"},{"kind":"number","nodeType":"YulLiteral","src":"2413:4:171","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2396:3:171"},"nodeType":"YulFunctionCall","src":"2396:22:171"},{"kind":"number","nodeType":"YulLiteral","src":"2420:1:171","type":"","value":"0"},{"name":"_toCopy","nodeType":"YulIdentifier","src":"2423:7:171"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"2381:14:171"},"nodeType":"YulFunctionCall","src":"2381:50:171"},"nodeType":"YulExpressionStatement","src":"2381:50:171"}]},"evmVersion":"london","externalReferences":[{"declaration":50019,"isOffset":false,"isSlot":false,"src":"1992:9:171","valueSize":1},{"declaration":50019,"isOffset":false,"isSlot":false,"src":"2033:9:171","valueSize":1},{"declaration":50013,"isOffset":false,"isSlot":false,"src":"1906:4:171","valueSize":1},{"declaration":50017,"isOffset":false,"isSlot":false,"src":"2195:8:171","valueSize":1},{"declaration":50017,"isOffset":false,"isSlot":false,"src":"2226:8:171","valueSize":1},{"declaration":50033,"isOffset":false,"isSlot":false,"src":"2302:11:171","valueSize":1},{"declaration":50033,"isOffset":false,"isSlot":false,"src":"2400:11:171","valueSize":1},{"declaration":50030,"isOffset":false,"isSlot":false,"src":"1880:8:171","valueSize":1},{"declaration":50011,"isOffset":false,"isSlot":false,"src":"1927:7:171","valueSize":1},{"declaration":50027,"isOffset":false,"isSlot":false,"src":"2146:7:171","valueSize":1},{"declaration":50027,"isOffset":false,"isSlot":false,"src":"2186:7:171","valueSize":1},{"declaration":50027,"isOffset":false,"isSlot":false,"src":"2215:7:171","valueSize":1},{"declaration":50027,"isOffset":false,"isSlot":false,"src":"2315:7:171","valueSize":1},{"declaration":50027,"isOffset":false,"isSlot":false,"src":"2423:7:171","valueSize":1},{"declaration":50015,"isOffset":false,"isSlot":false,"src":"1957:6:171","valueSize":1}],"id":50039,"nodeType":"InlineAssembly","src":"1863:574:171"},{"expression":{"components":[{"id":50040,"name":"_success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50030,"src":"2450:8:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":50041,"name":"_returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50033,"src":"2460:11:171","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":50042,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2449:23:171","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"functionReturnParameters":50025,"id":50043,"nodeType":"Return","src":"2442:30:171"}]},"documentation":{"id":50009,"nodeType":"StructuredDocumentation","src":"418:939:171","text":"@notice Use when you _really_ really _really_ don't trust the called\n contract. This prevents the called contract from causing reversion of\n the caller in as many ways as we can.\n @dev The main difference between this and a solidity low-level call is\n that we limit the number of bytes that the callee can cause to be\n copied to caller memory. This prevents stupid things like malicious\n contracts returning 10,000,000 bytes causing a local OOG when copying\n to memory.\n @param _target The address to call\n @param _gas The amount of gas to forward to the remote contract\n @param _value The value in wei to send to the remote contract\n @param _maxCopy The maximum number of bytes of returndata to copy\n to memory.\n @param _calldata The data to send to the remote contract\n @return success and returndata, as `.call()`. Returndata is capped to\n `_maxCopy` bytes."},"id":50045,"implemented":true,"kind":"function","modifiers":[],"name":"excessivelySafeCall","nameLocation":"1369:19:171","nodeType":"FunctionDefinition","parameters":{"id":50020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50011,"mutability":"mutable","name":"_target","nameLocation":"1402:7:171","nodeType":"VariableDeclaration","scope":50045,"src":"1394:15:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50010,"name":"address","nodeType":"ElementaryTypeName","src":"1394:7:171","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":50013,"mutability":"mutable","name":"_gas","nameLocation":"1423:4:171","nodeType":"VariableDeclaration","scope":50045,"src":"1415:12:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50012,"name":"uint256","nodeType":"ElementaryTypeName","src":"1415:7:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50015,"mutability":"mutable","name":"_value","nameLocation":"1441:6:171","nodeType":"VariableDeclaration","scope":50045,"src":"1433:14:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50014,"name":"uint256","nodeType":"ElementaryTypeName","src":"1433:7:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50017,"mutability":"mutable","name":"_maxCopy","nameLocation":"1460:8:171","nodeType":"VariableDeclaration","scope":50045,"src":"1453:15:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":50016,"name":"uint16","nodeType":"ElementaryTypeName","src":"1453:6:171","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":50019,"mutability":"mutable","name":"_calldata","nameLocation":"1487:9:171","nodeType":"VariableDeclaration","scope":50045,"src":"1474:22:171","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":50018,"name":"bytes","nodeType":"ElementaryTypeName","src":"1474:5:171","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1388:112:171"},"returnParameters":{"id":50025,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50022,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50045,"src":"1519:4:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50021,"name":"bool","nodeType":"ElementaryTypeName","src":"1519:4:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":50024,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50045,"src":"1525:12:171","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":50023,"name":"bytes","nodeType":"ElementaryTypeName","src":"1525:5:171","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1518:20:171"},"scope":50104,"src":"1360:1117:171","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":50079,"nodeType":"Block","src":"3525:913:171","statements":[{"assignments":[50062],"declarations":[{"constant":false,"id":50062,"mutability":"mutable","name":"_toCopy","nameLocation":"3571:7:171","nodeType":"VariableDeclaration","scope":50079,"src":"3563:15:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50061,"name":"uint256","nodeType":"ElementaryTypeName","src":"3563:7:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50063,"nodeType":"VariableDeclarationStatement","src":"3563:15:171"},{"assignments":[50065],"declarations":[{"constant":false,"id":50065,"mutability":"mutable","name":"_success","nameLocation":"3589:8:171","nodeType":"VariableDeclaration","scope":50079,"src":"3584:13:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50064,"name":"bool","nodeType":"ElementaryTypeName","src":"3584:4:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":50066,"nodeType":"VariableDeclarationStatement","src":"3584:13:171"},{"assignments":[50068],"declarations":[{"constant":false,"id":50068,"mutability":"mutable","name":"_returnData","nameLocation":"3616:11:171","nodeType":"VariableDeclaration","scope":50079,"src":"3603:24:171","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":50067,"name":"bytes","nodeType":"ElementaryTypeName","src":"3603:5:171","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":50073,"initialValue":{"arguments":[{"id":50071,"name":"_maxCopy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50052,"src":"3640:8:171","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":50070,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3630:9:171","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":50069,"name":"bytes","nodeType":"ElementaryTypeName","src":"3634:5:171","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":50072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3630:19:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3603:46:171"},{"AST":{"nodeType":"YulBlock","src":"3858:540:171","statements":[{"nodeType":"YulAssignment","src":"3866:197:171","value":{"arguments":[{"name":"_gas","nodeType":"YulIdentifier","src":"3898:4:171"},{"name":"_target","nodeType":"YulIdentifier","src":"3919:7:171"},{"arguments":[{"name":"_calldata","nodeType":"YulIdentifier","src":"3953:9:171"},{"kind":"number","nodeType":"YulLiteral","src":"3964:4:171","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3949:3:171"},"nodeType":"YulFunctionCall","src":"3949:20:171"},{"arguments":[{"name":"_calldata","nodeType":"YulIdentifier","src":"3994:9:171"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3988:5:171"},"nodeType":"YulFunctionCall","src":"3988:16:171"},{"kind":"number","nodeType":"YulLiteral","src":"4023:1:171","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4044:1:171","type":"","value":"0"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"3878:10:171"},"nodeType":"YulFunctionCall","src":"3878:185:171"},"variableNames":[{"name":"_success","nodeType":"YulIdentifier","src":"3866:8:171"}]},{"nodeType":"YulAssignment","src":"4107:27:171","value":{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"4118:14:171"},"nodeType":"YulFunctionCall","src":"4118:16:171"},"variableNames":[{"name":"_toCopy","nodeType":"YulIdentifier","src":"4107:7:171"}]},{"body":{"nodeType":"YulBlock","src":"4166:37:171","statements":[{"nodeType":"YulAssignment","src":"4176:19:171","value":{"name":"_maxCopy","nodeType":"YulIdentifier","src":"4187:8:171"},"variableNames":[{"name":"_toCopy","nodeType":"YulIdentifier","src":"4176:7:171"}]}]},"condition":{"arguments":[{"name":"_toCopy","nodeType":"YulIdentifier","src":"4147:7:171"},{"name":"_maxCopy","nodeType":"YulIdentifier","src":"4156:8:171"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4144:2:171"},"nodeType":"YulFunctionCall","src":"4144:21:171"},"nodeType":"YulIf","src":"4141:62:171"},{"expression":{"arguments":[{"name":"_returnData","nodeType":"YulIdentifier","src":"4263:11:171"},{"name":"_toCopy","nodeType":"YulIdentifier","src":"4276:7:171"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4256:6:171"},"nodeType":"YulFunctionCall","src":"4256:28:171"},"nodeType":"YulExpressionStatement","src":"4256:28:171"},{"expression":{"arguments":[{"arguments":[{"name":"_returnData","nodeType":"YulIdentifier","src":"4361:11:171"},{"kind":"number","nodeType":"YulLiteral","src":"4374:4:171","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4357:3:171"},"nodeType":"YulFunctionCall","src":"4357:22:171"},{"kind":"number","nodeType":"YulLiteral","src":"4381:1:171","type":"","value":"0"},{"name":"_toCopy","nodeType":"YulIdentifier","src":"4384:7:171"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"4342:14:171"},"nodeType":"YulFunctionCall","src":"4342:50:171"},"nodeType":"YulExpressionStatement","src":"4342:50:171"}]},"evmVersion":"london","externalReferences":[{"declaration":50054,"isOffset":false,"isSlot":false,"src":"3953:9:171","valueSize":1},{"declaration":50054,"isOffset":false,"isSlot":false,"src":"3994:9:171","valueSize":1},{"declaration":50050,"isOffset":false,"isSlot":false,"src":"3898:4:171","valueSize":1},{"declaration":50052,"isOffset":false,"isSlot":false,"src":"4156:8:171","valueSize":1},{"declaration":50052,"isOffset":false,"isSlot":false,"src":"4187:8:171","valueSize":1},{"declaration":50068,"isOffset":false,"isSlot":false,"src":"4263:11:171","valueSize":1},{"declaration":50068,"isOffset":false,"isSlot":false,"src":"4361:11:171","valueSize":1},{"declaration":50065,"isOffset":false,"isSlot":false,"src":"3866:8:171","valueSize":1},{"declaration":50048,"isOffset":false,"isSlot":false,"src":"3919:7:171","valueSize":1},{"declaration":50062,"isOffset":false,"isSlot":false,"src":"4107:7:171","valueSize":1},{"declaration":50062,"isOffset":false,"isSlot":false,"src":"4147:7:171","valueSize":1},{"declaration":50062,"isOffset":false,"isSlot":false,"src":"4176:7:171","valueSize":1},{"declaration":50062,"isOffset":false,"isSlot":false,"src":"4276:7:171","valueSize":1},{"declaration":50062,"isOffset":false,"isSlot":false,"src":"4384:7:171","valueSize":1}],"id":50074,"nodeType":"InlineAssembly","src":"3849:549:171"},{"expression":{"components":[{"id":50075,"name":"_success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50065,"src":"4411:8:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":50076,"name":"_returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50068,"src":"4421:11:171","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":50077,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4410:23:171","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"functionReturnParameters":50060,"id":50078,"nodeType":"Return","src":"4403:30:171"}]},"documentation":{"id":50046,"nodeType":"StructuredDocumentation","src":"2481:871:171","text":"@notice Use when you _really_ really _really_ don't trust the called\n contract. This prevents the called contract from causing reversion of\n the caller in as many ways as we can.\n @dev The main difference between this and a solidity low-level call is\n that we limit the number of bytes that the callee can cause to be\n copied to caller memory. This prevents stupid things like malicious\n contracts returning 10,000,000 bytes causing a local OOG when copying\n to memory.\n @param _target The address to call\n @param _gas The amount of gas to forward to the remote contract\n @param _maxCopy The maximum number of bytes of returndata to copy\n to memory.\n @param _calldata The data to send to the remote contract\n @return success and returndata, as `.call()`. Returndata is capped to\n `_maxCopy` bytes."},"id":50080,"implemented":true,"kind":"function","modifiers":[],"name":"excessivelySafeStaticCall","nameLocation":"3364:25:171","nodeType":"FunctionDefinition","parameters":{"id":50055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50048,"mutability":"mutable","name":"_target","nameLocation":"3403:7:171","nodeType":"VariableDeclaration","scope":50080,"src":"3395:15:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50047,"name":"address","nodeType":"ElementaryTypeName","src":"3395:7:171","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":50050,"mutability":"mutable","name":"_gas","nameLocation":"3424:4:171","nodeType":"VariableDeclaration","scope":50080,"src":"3416:12:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50049,"name":"uint256","nodeType":"ElementaryTypeName","src":"3416:7:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50052,"mutability":"mutable","name":"_maxCopy","nameLocation":"3441:8:171","nodeType":"VariableDeclaration","scope":50080,"src":"3434:15:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":50051,"name":"uint16","nodeType":"ElementaryTypeName","src":"3434:6:171","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":50054,"mutability":"mutable","name":"_calldata","nameLocation":"3468:9:171","nodeType":"VariableDeclaration","scope":50080,"src":"3455:22:171","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":50053,"name":"bytes","nodeType":"ElementaryTypeName","src":"3455:5:171","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3389:92:171"},"returnParameters":{"id":50060,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50057,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50080,"src":"3505:4:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50056,"name":"bool","nodeType":"ElementaryTypeName","src":"3505:4:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":50059,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50080,"src":"3511:12:171","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":50058,"name":"bytes","nodeType":"ElementaryTypeName","src":"3511:5:171","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3504:20:171"},"scope":50104,"src":"3355:1083:171","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":50102,"nodeType":"Block","src":"4947:322:171","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":50089,"name":"_buf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50085,"src":"4961:4:171","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":50090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4966:6:171","memberName":"length","nodeType":"MemberAccess","src":"4961:11:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"id":50093,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":50091,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4975:1:171","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":50092,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4979:1:171","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4975:5:171","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"}},"src":"4961:19:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":50088,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4953:7:171","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":50095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4953:28:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50096,"nodeType":"ExpressionStatement","src":"4953:28:171"},{"assignments":[50098],"declarations":[{"constant":false,"id":50098,"mutability":"mutable","name":"_mask","nameLocation":"4995:5:171","nodeType":"VariableDeclaration","scope":50102,"src":"4987:13:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50097,"name":"uint256","nodeType":"ElementaryTypeName","src":"4987:7:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50100,"initialValue":{"id":50099,"name":"LOW_28_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50008,"src":"5003:11:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4987:27:171"},{"AST":{"nodeType":"YulBlock","src":"5029:236:171","statements":[{"nodeType":"YulVariableDeclaration","src":"5069:35:171","value":{"arguments":[{"arguments":[{"name":"_buf","nodeType":"YulIdentifier","src":"5092:4:171"},{"kind":"number","nodeType":"YulLiteral","src":"5098:4:171","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5088:3:171"},"nodeType":"YulFunctionCall","src":"5088:15:171"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5082:5:171"},"nodeType":"YulFunctionCall","src":"5082:22:171"},"variables":[{"name":"_word","nodeType":"YulTypedName","src":"5073:5:171","type":""}]},{"nodeType":"YulAssignment","src":"5157:26:171","value":{"arguments":[{"name":"_word","nodeType":"YulIdentifier","src":"5170:5:171"},{"name":"_mask","nodeType":"YulIdentifier","src":"5177:5:171"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5166:3:171"},"nodeType":"YulFunctionCall","src":"5166:17:171"},"variableNames":[{"name":"_word","nodeType":"YulIdentifier","src":"5157:5:171"}]},{"nodeType":"YulAssignment","src":"5190:32:171","value":{"arguments":[{"name":"_newSelector","nodeType":"YulIdentifier","src":"5202:12:171"},{"name":"_word","nodeType":"YulIdentifier","src":"5216:5:171"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"5199:2:171"},"nodeType":"YulFunctionCall","src":"5199:23:171"},"variableNames":[{"name":"_word","nodeType":"YulIdentifier","src":"5190:5:171"}]},{"expression":{"arguments":[{"arguments":[{"name":"_buf","nodeType":"YulIdentifier","src":"5240:4:171"},{"kind":"number","nodeType":"YulLiteral","src":"5246:4:171","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5236:3:171"},"nodeType":"YulFunctionCall","src":"5236:15:171"},{"name":"_word","nodeType":"YulIdentifier","src":"5253:5:171"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5229:6:171"},"nodeType":"YulFunctionCall","src":"5229:30:171"},"nodeType":"YulExpressionStatement","src":"5229:30:171"}]},"evmVersion":"london","externalReferences":[{"declaration":50085,"isOffset":false,"isSlot":false,"src":"5092:4:171","valueSize":1},{"declaration":50085,"isOffset":false,"isSlot":false,"src":"5240:4:171","valueSize":1},{"declaration":50098,"isOffset":false,"isSlot":false,"src":"5177:5:171","valueSize":1},{"declaration":50083,"isOffset":false,"isSlot":false,"src":"5202:12:171","valueSize":1}],"id":50101,"nodeType":"InlineAssembly","src":"5020:245:171"}]},"documentation":{"id":50081,"nodeType":"StructuredDocumentation","src":"4442:426:171","text":" @notice Swaps function selectors in encoded contract calls\n @dev Allows reuse of encoded calldata for functions with identical\n argument types but different names. It simply swaps out the first 4 bytes\n for the new selector. This function modifies memory in place, and should\n only be used with caution.\n @param _newSelector The new 4-byte selector\n @param _buf The encoded contract args"},"id":50103,"implemented":true,"kind":"function","modifiers":[],"name":"swapSelector","nameLocation":"4880:12:171","nodeType":"FunctionDefinition","parameters":{"id":50086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50083,"mutability":"mutable","name":"_newSelector","nameLocation":"4900:12:171","nodeType":"VariableDeclaration","scope":50103,"src":"4893:19:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":50082,"name":"bytes4","nodeType":"ElementaryTypeName","src":"4893:6:171","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"},{"constant":false,"id":50085,"mutability":"mutable","name":"_buf","nameLocation":"4927:4:171","nodeType":"VariableDeclaration","scope":50103,"src":"4914:17:171","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":50084,"name":"bytes","nodeType":"ElementaryTypeName","src":"4914:5:171","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4892:40:171"},"returnParameters":{"id":50087,"nodeType":"ParameterList","parameters":[],"src":"4947:0:171"},"scope":50104,"src":"4871:398:171","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":50105,"src":"284:4987:171","usedErrors":[]}],"src":"46:5226:171"},"id":171},"contracts/shared/libraries/Multisend.sol":{"ast":{"absolutePath":"contracts/shared/libraries/Multisend.sol","exportedSymbols":{"MultiSend":[50139]},"id":50140,"license":"LGPL-3.0-only","nodeType":"SourceUnit","nodes":[{"id":50106,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"42:23:172"},{"abstract":false,"baseContracts":[],"canonicalName":"MultiSend","contractDependencies":[],"contractKind":"contract","documentation":{"id":50107,"nodeType":"StructuredDocumentation","src":"67:267:172","text":" @notice Modified from https://github.com/safe-global/safe-contracts/blob/main/contracts/libraries/MultiSend.sol\n @dev Modification was to ensure this is called from an EOA, rather than enforcing the\n `delegatecall` usage as in the original contract."},"fullyImplemented":true,"id":50139,"linearizedBaseContracts":[50139],"name":"MultiSend","nameLocation":"344:9:172","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":50109,"mutability":"immutable","name":"multisendSingleton","nameLocation":"384:18:172","nodeType":"VariableDeclaration","scope":50139,"src":"358:44:172","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50108,"name":"address","nodeType":"ElementaryTypeName","src":"358:7:172","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"body":{"id":50119,"nodeType":"Block","src":"421:45:172","statements":[{"expression":{"id":50117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50112,"name":"multisendSingleton","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50109,"src":"427:18:172","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":50115,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"456:4:172","typeDescriptions":{"typeIdentifier":"t_contract$_MultiSend_$50139","typeString":"contract MultiSend"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MultiSend_$50139","typeString":"contract MultiSend"}],"id":50114,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"448:7:172","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50113,"name":"address","nodeType":"ElementaryTypeName","src":"448:7:172","typeDescriptions":{}}},"id":50116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"448:13:172","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"427:34:172","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50118,"nodeType":"ExpressionStatement","src":"427:34:172"}]},"id":50120,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":50110,"nodeType":"ParameterList","parameters":[],"src":"418:2:172"},"returnParameters":{"id":50111,"nodeType":"ParameterList","parameters":[],"src":"421:0:172"},"scope":50139,"src":"407:59:172","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":50137,"nodeType":"Block","src":"1114:1798:172","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"expression":{"id":50127,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1128:3:172","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1132:6:172","memberName":"sender","nodeType":"MemberAccess","src":"1128:10:172","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1139:4:172","memberName":"code","nodeType":"MemberAccess","src":"1128:15:172","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":50130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1144:6:172","memberName":"length","nodeType":"MemberAccess","src":"1128:22:172","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":50131,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1154:1:172","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1128:27:172","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d756c746953656e642073686f756c64206f6e6c792062652063616c6c65642076696120454f41","id":50133,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1157:41:172","typeDescriptions":{"typeIdentifier":"t_stringliteral_88894d6f5f7152e7c3be85deebf4900c215635145dce6cb9bd221eda9a4c021a","typeString":"literal_string \"MultiSend should only be called via EOA\""},"value":"MultiSend should only be called via EOA"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_88894d6f5f7152e7c3be85deebf4900c215635145dce6cb9bd221eda9a4c021a","typeString":"literal_string \"MultiSend should only be called via EOA\""}],"id":50126,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1120:7:172","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":50134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1120:79:172","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50135,"nodeType":"ExpressionStatement","src":"1120:79:172"},{"AST":{"nodeType":"YulBlock","src":"1266:1642:172","statements":[{"nodeType":"YulVariableDeclaration","src":"1274:33:172","value":{"arguments":[{"name":"transactions","nodeType":"YulIdentifier","src":"1294:12:172"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1288:5:172"},"nodeType":"YulFunctionCall","src":"1288:19:172"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1278:6:172","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1314:13:172","value":{"kind":"number","nodeType":"YulLiteral","src":"1323:4:172","type":"","value":"0x20"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"1318:1:172","type":""}]},{"body":{"nodeType":"YulBlock","src":"1471:1431:172","statements":[{"nodeType":"YulVariableDeclaration","src":"1697:55:172","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1718:4:172","type":"","value":"0xf8"},{"arguments":[{"arguments":[{"name":"transactions","nodeType":"YulIdentifier","src":"1734:12:172"},{"name":"i","nodeType":"YulIdentifier","src":"1748:1:172"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1730:3:172"},"nodeType":"YulFunctionCall","src":"1730:20:172"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1724:5:172"},"nodeType":"YulFunctionCall","src":"1724:27:172"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1714:3:172"},"nodeType":"YulFunctionCall","src":"1714:38:172"},"variables":[{"name":"operation","nodeType":"YulTypedName","src":"1701:9:172","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1947:59:172","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1961:4:172","type":"","value":"0x60"},{"arguments":[{"arguments":[{"name":"transactions","nodeType":"YulIdentifier","src":"1977:12:172"},{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1995:1:172"},{"kind":"number","nodeType":"YulLiteral","src":"1998:4:172","type":"","value":"0x01"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1991:3:172"},"nodeType":"YulFunctionCall","src":"1991:12:172"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1973:3:172"},"nodeType":"YulFunctionCall","src":"1973:31:172"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1967:5:172"},"nodeType":"YulFunctionCall","src":"1967:38:172"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1957:3:172"},"nodeType":"YulFunctionCall","src":"1957:49:172"},"variables":[{"name":"to","nodeType":"YulTypedName","src":"1951:2:172","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2100:51:172","value":{"arguments":[{"arguments":[{"name":"transactions","nodeType":"YulIdentifier","src":"2123:12:172"},{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2141:1:172"},{"kind":"number","nodeType":"YulLiteral","src":"2144:4:172","type":"","value":"0x15"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2137:3:172"},"nodeType":"YulFunctionCall","src":"2137:12:172"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2119:3:172"},"nodeType":"YulFunctionCall","src":"2119:31:172"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2113:5:172"},"nodeType":"YulFunctionCall","src":"2113:38:172"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2104:5:172","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2262:56:172","value":{"arguments":[{"arguments":[{"name":"transactions","nodeType":"YulIdentifier","src":"2290:12:172"},{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2308:1:172"},{"kind":"number","nodeType":"YulLiteral","src":"2311:4:172","type":"","value":"0x35"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2304:3:172"},"nodeType":"YulFunctionCall","src":"2304:12:172"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2286:3:172"},"nodeType":"YulFunctionCall","src":"2286:31:172"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2280:5:172"},"nodeType":"YulFunctionCall","src":"2280:38:172"},"variables":[{"name":"dataLength","nodeType":"YulTypedName","src":"2266:10:172","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2452:43:172","value":{"arguments":[{"name":"transactions","nodeType":"YulIdentifier","src":"2468:12:172"},{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2486:1:172"},{"kind":"number","nodeType":"YulLiteral","src":"2489:4:172","type":"","value":"0x55"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2482:3:172"},"nodeType":"YulFunctionCall","src":"2482:12:172"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2464:3:172"},"nodeType":"YulFunctionCall","src":"2464:31:172"},"variables":[{"name":"data","nodeType":"YulTypedName","src":"2456:4:172","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2504:16:172","value":{"kind":"number","nodeType":"YulLiteral","src":"2519:1:172","type":"","value":"0"},"variables":[{"name":"success","nodeType":"YulTypedName","src":"2508:7:172","type":""}]},{"cases":[{"body":{"nodeType":"YulBlock","src":"2561:79:172","statements":[{"nodeType":"YulAssignment","src":"2573:57:172","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"2589:3:172"},"nodeType":"YulFunctionCall","src":"2589:5:172"},{"name":"to","nodeType":"YulIdentifier","src":"2596:2:172"},{"name":"value","nodeType":"YulIdentifier","src":"2600:5:172"},{"name":"data","nodeType":"YulIdentifier","src":"2607:4:172"},{"name":"dataLength","nodeType":"YulIdentifier","src":"2613:10:172"},{"kind":"number","nodeType":"YulLiteral","src":"2625:1:172","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2628:1:172","type":"","value":"0"}],"functionName":{"name":"call","nodeType":"YulIdentifier","src":"2584:4:172"},"nodeType":"YulFunctionCall","src":"2584:46:172"},"variableNames":[{"name":"success","nodeType":"YulIdentifier","src":"2573:7:172"}]}]},"nodeType":"YulCase","src":"2554:86:172","value":{"kind":"number","nodeType":"YulLiteral","src":"2559:1:172","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"2656:80:172","statements":[{"nodeType":"YulAssignment","src":"2668:58:172","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"2692:3:172"},"nodeType":"YulFunctionCall","src":"2692:5:172"},{"name":"to","nodeType":"YulIdentifier","src":"2699:2:172"},{"name":"data","nodeType":"YulIdentifier","src":"2703:4:172"},{"name":"dataLength","nodeType":"YulIdentifier","src":"2709:10:172"},{"kind":"number","nodeType":"YulLiteral","src":"2721:1:172","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2724:1:172","type":"","value":"0"}],"functionName":{"name":"delegatecall","nodeType":"YulIdentifier","src":"2679:12:172"},"nodeType":"YulFunctionCall","src":"2679:47:172"},"variableNames":[{"name":"success","nodeType":"YulIdentifier","src":"2668:7:172"}]}]},"nodeType":"YulCase","src":"2649:87:172","value":{"kind":"number","nodeType":"YulLiteral","src":"2654:1:172","type":"","value":"1"}}],"expression":{"name":"operation","nodeType":"YulIdentifier","src":"2536:9:172"},"nodeType":"YulSwitch","src":"2529:207:172"},{"body":{"nodeType":"YulBlock","src":"2763:34:172","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2782:1:172","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2785:1:172","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2775:6:172"},"nodeType":"YulFunctionCall","src":"2775:12:172"},"nodeType":"YulExpressionStatement","src":"2775:12:172"}]},"condition":{"arguments":[{"name":"success","nodeType":"YulIdentifier","src":"2751:7:172"},{"kind":"number","nodeType":"YulLiteral","src":"2760:1:172","type":"","value":"0"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2748:2:172"},"nodeType":"YulFunctionCall","src":"2748:14:172"},"nodeType":"YulIf","src":"2745:52:172"},{"nodeType":"YulAssignment","src":"2860:34:172","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2869:1:172"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2876:4:172","type":"","value":"0x55"},{"name":"dataLength","nodeType":"YulIdentifier","src":"2882:10:172"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2872:3:172"},"nodeType":"YulFunctionCall","src":"2872:21:172"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2865:3:172"},"nodeType":"YulFunctionCall","src":"2865:29:172"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2860:1:172"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1400:1:172"},{"name":"length","nodeType":"YulIdentifier","src":"1403:6:172"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1397:2:172"},"nodeType":"YulFunctionCall","src":"1397:13:172"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1411:59:172","statements":[]},"pre":{"nodeType":"YulBlock","src":"1338:58:172","statements":[]},"src":"1334:1568:172"}]},"evmVersion":"london","externalReferences":[{"declaration":50123,"isOffset":false,"isSlot":false,"src":"1294:12:172","valueSize":1},{"declaration":50123,"isOffset":false,"isSlot":false,"src":"1734:12:172","valueSize":1},{"declaration":50123,"isOffset":false,"isSlot":false,"src":"1977:12:172","valueSize":1},{"declaration":50123,"isOffset":false,"isSlot":false,"src":"2123:12:172","valueSize":1},{"declaration":50123,"isOffset":false,"isSlot":false,"src":"2290:12:172","valueSize":1},{"declaration":50123,"isOffset":false,"isSlot":false,"src":"2468:12:172","valueSize":1}],"id":50136,"nodeType":"InlineAssembly","src":"1257:1651:172"}]},"documentation":{"id":50121,"nodeType":"StructuredDocumentation","src":"470:580:172","text":" @dev Sends multiple transactions and reverts all if one fails.\n @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of\n                     operation as a uint8 with 0 for a call or 1 for a delegatecall (=> 1 byte),\n                     to as a address (=> 20 bytes),\n                     value as a uint256 (=> 32 bytes),\n                     data length as a uint256 (=> 32 bytes),\n                     data as bytes.\n                     see abi.encodePacked for more information on packed encoding"},"functionSelector":"8d80ff0a","id":50138,"implemented":true,"kind":"function","modifiers":[],"name":"multiSend","nameLocation":"1062:9:172","nodeType":"FunctionDefinition","parameters":{"id":50124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50123,"mutability":"mutable","name":"transactions","nameLocation":"1085:12:172","nodeType":"VariableDeclaration","scope":50138,"src":"1072:25:172","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":50122,"name":"bytes","nodeType":"ElementaryTypeName","src":"1072:5:172","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1071:27:172"},"returnParameters":{"id":50125,"nodeType":"ParameterList","parameters":[],"src":"1114:0:172"},"scope":50139,"src":"1053:1859:172","stateMutability":"payable","virtual":false,"visibility":"public"}],"scope":50140,"src":"335:2579:172","usedErrors":[]}],"src":"42:2873:172"},"id":172},"contracts/shared/libraries/TypeCasts.sol":{"ast":{"absolutePath":"contracts/shared/libraries/TypeCasts.sol","exportedSymbols":{"TypeCasts":[50188],"TypedMemView":[51265]},"id":50189,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":50141,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:173"},{"absolutePath":"contracts/shared/libraries/TypedMemView.sol","file":"./TypedMemView.sol","id":50143,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":50189,"sourceUnit":51266,"src":"71:48:173","symbolAliases":[{"foreign":{"id":50142,"name":"TypedMemView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51265,"src":"79:12:173","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"TypeCasts","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":50188,"linearizedBaseContracts":[50188],"name":"TypeCasts","nameLocation":"129:9:173","nodeType":"ContractDefinition","nodes":[{"global":false,"id":50146,"libraryName":{"id":50144,"name":"TypedMemView","nameLocations":["149:12:173"],"nodeType":"IdentifierPath","referencedDeclaration":51265,"src":"149:12:173"},"nodeType":"UsingForDirective","src":"143:29:173","typeName":{"id":50145,"name":"bytes","nodeType":"ElementaryTypeName","src":"166:5:173","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},{"global":false,"id":50149,"libraryName":{"id":50147,"name":"TypedMemView","nameLocations":["181:12:173"],"nodeType":"IdentifierPath","referencedDeclaration":51265,"src":"181:12:173"},"nodeType":"UsingForDirective","src":"175:31:173","typeName":{"id":50148,"name":"bytes29","nodeType":"ElementaryTypeName","src":"198:7:173","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}},{"body":{"id":50167,"nodeType":"Block","src":"314:50:173","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":50162,"name":"_addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50151,"src":"351:5:173","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":50161,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"343:7:173","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":50160,"name":"uint160","nodeType":"ElementaryTypeName","src":"343:7:173","typeDescriptions":{}}},"id":50163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"343:14:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":50159,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"335:7:173","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":50158,"name":"uint256","nodeType":"ElementaryTypeName","src":"335:7:173","typeDescriptions":{}}},"id":50164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"335:23:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50157,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"327:7:173","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":50156,"name":"bytes32","nodeType":"ElementaryTypeName","src":"327:7:173","typeDescriptions":{}}},"id":50165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"327:32:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":50155,"id":50166,"nodeType":"Return","src":"320:39:173"}]},"id":50168,"implemented":true,"kind":"function","modifiers":[],"name":"addressToBytes32","nameLocation":"250:16:173","nodeType":"FunctionDefinition","parameters":{"id":50152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50151,"mutability":"mutable","name":"_addr","nameLocation":"275:5:173","nodeType":"VariableDeclaration","scope":50168,"src":"267:13:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50150,"name":"address","nodeType":"ElementaryTypeName","src":"267:7:173","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"266:15:173"},"returnParameters":{"id":50155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50154,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50168,"src":"305:7:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":50153,"name":"bytes32","nodeType":"ElementaryTypeName","src":"305:7:173","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"304:9:173"},"scope":50188,"src":"241:123:173","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50186,"nodeType":"Block","src":"471:49:173","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":50181,"name":"_buf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50170,"src":"508:4:173","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":50180,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"500:7:173","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":50179,"name":"uint256","nodeType":"ElementaryTypeName","src":"500:7:173","typeDescriptions":{}}},"id":50182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"500:13:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50178,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"492:7:173","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":50177,"name":"uint160","nodeType":"ElementaryTypeName","src":"492:7:173","typeDescriptions":{}}},"id":50183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"492:22:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":50176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"484:7:173","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50175,"name":"address","nodeType":"ElementaryTypeName","src":"484:7:173","typeDescriptions":{}}},"id":50184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"484:31:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":50174,"id":50185,"nodeType":"Return","src":"477:38:173"}]},"id":50187,"implemented":true,"kind":"function","modifiers":[],"name":"bytes32ToAddress","nameLocation":"408:16:173","nodeType":"FunctionDefinition","parameters":{"id":50171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50170,"mutability":"mutable","name":"_buf","nameLocation":"433:4:173","nodeType":"VariableDeclaration","scope":50187,"src":"425:12:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":50169,"name":"bytes32","nodeType":"ElementaryTypeName","src":"425:7:173","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"424:14:173"},"returnParameters":{"id":50174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50173,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50187,"src":"462:7:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50172,"name":"address","nodeType":"ElementaryTypeName","src":"462:7:173","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"461:9:173"},"scope":50188,"src":"399:121:173","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":50189,"src":"121:401:173","usedErrors":[]}],"src":"46:477:173"},"id":173},"contracts/shared/libraries/TypedMemView.sol":{"ast":{"absolutePath":"contracts/shared/libraries/TypedMemView.sol","exportedSymbols":{"TypedMemView":[51265]},"id":51266,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":50190,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:174"},{"abstract":false,"baseContracts":[],"canonicalName":"TypedMemView","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":51265,"linearizedBaseContracts":[51265],"name":"TypedMemView","nameLocation":"79:12:174","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"f26be3fc","id":50193,"mutability":"constant","name":"NULL","nameLocation":"2502:4:174","nodeType":"VariableDeclaration","scope":51265,"src":"2478:94:174","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50191,"name":"bytes29","nodeType":"ElementaryTypeName","src":"2478:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"value":{"hexValue":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","id":50192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"2509:63:174","typeDescriptions":{"typeIdentifier":"t_stringliteral_7894ac7152936831bdd146bb58cc79cdde7fa746d05d79c2b1dea4074b875c40","typeString":"literal_string hex\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\""}},"visibility":"public"},{"constant":true,"id":50196,"mutability":"constant","name":"LOW_12_MASK","nameLocation":"2593:11:174","nodeType":"VariableDeclaration","scope":51265,"src":"2576:57:174","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50194,"name":"uint256","nodeType":"ElementaryTypeName","src":"2576:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3078666666666666666666666666666666666666666666666666","id":50195,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2607:26:174","typeDescriptions":{"typeIdentifier":"t_rational_79228162514264337593543950335_by_1","typeString":"int_const 79228162514264337593543950335"},"value":"0xffffffffffffffffffffffff"},"visibility":"internal"},{"constant":true,"id":50201,"mutability":"constant","name":"TWENTY_SEVEN_BYTES","nameLocation":"2654:18:174","nodeType":"VariableDeclaration","scope":51265,"src":"2637:44:174","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50197,"name":"uint256","nodeType":"ElementaryTypeName","src":"2637:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"id":50200,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"38","id":50198,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2675:1:174","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3237","id":50199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2679:2:174","typeDescriptions":{"typeIdentifier":"t_rational_27_by_1","typeString":"int_const 27"},"value":"27"},"src":"2675:6:174","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"}},"visibility":"internal"},{"constant":true,"id":50206,"mutability":"constant","name":"_27_BYTES_IN_BITS","nameLocation":"2710:17:174","nodeType":"VariableDeclaration","scope":51265,"src":"2685:51:174","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50202,"name":"uint256","nodeType":"ElementaryTypeName","src":"2685:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"id":50205,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"38","id":50203,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2730:1:174","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3237","id":50204,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2734:2:174","typeDescriptions":{"typeIdentifier":"t_rational_27_by_1","typeString":"int_const 27"},"value":"27"},"src":"2730:6:174","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"}},"visibility":"private"},{"constant":true,"id":50209,"mutability":"constant","name":"LOW_27_BYTES_MASK","nameLocation":"2827:17:174","nodeType":"VariableDeclaration","scope":51265,"src":"2802:101:174","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50207,"name":"uint256","nodeType":"ElementaryTypeName","src":"2802:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3078666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666","id":50208,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2847:56:174","typeDescriptions":{"typeIdentifier":"t_rational_105312291668557186697918027683670432318895095400549111254310977535_by_1","typeString":"int_const 1053...(58 digits omitted)...7535"},"value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffff"},"visibility":"private"},{"errorSelector":"d32c1d37","id":50215,"name":"TypedMemView__assertType_typeAssertionFailed","nameLocation":"2990:44:174","nodeType":"ErrorDefinition","parameters":{"id":50214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50211,"mutability":"mutable","name":"actual","nameLocation":"3043:6:174","nodeType":"VariableDeclaration","scope":50215,"src":"3035:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50210,"name":"uint256","nodeType":"ElementaryTypeName","src":"3035:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50213,"mutability":"mutable","name":"expected","nameLocation":"3059:8:174","nodeType":"VariableDeclaration","scope":50215,"src":"3051:16:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50212,"name":"uint256","nodeType":"ElementaryTypeName","src":"3051:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3034:34:174"},"src":"2984:85:174"},{"errorSelector":"78218d29","id":50225,"name":"TypedMemView__index_overrun","nameLocation":"3078:27:174","nodeType":"ErrorDefinition","parameters":{"id":50224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50217,"mutability":"mutable","name":"loc","nameLocation":"3114:3:174","nodeType":"VariableDeclaration","scope":50225,"src":"3106:11:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50216,"name":"uint256","nodeType":"ElementaryTypeName","src":"3106:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50219,"mutability":"mutable","name":"len","nameLocation":"3127:3:174","nodeType":"VariableDeclaration","scope":50225,"src":"3119:11:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50218,"name":"uint256","nodeType":"ElementaryTypeName","src":"3119:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50221,"mutability":"mutable","name":"index","nameLocation":"3140:5:174","nodeType":"VariableDeclaration","scope":50225,"src":"3132:13:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50220,"name":"uint256","nodeType":"ElementaryTypeName","src":"3132:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50223,"mutability":"mutable","name":"slice","nameLocation":"3155:5:174","nodeType":"VariableDeclaration","scope":50225,"src":"3147:13:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50222,"name":"uint256","nodeType":"ElementaryTypeName","src":"3147:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3105:56:174"},"src":"3072:90:174"},{"errorSelector":"045df3f9","id":50227,"name":"TypedMemView__index_indexMoreThan32Bytes","nameLocation":"3171:40:174","nodeType":"ErrorDefinition","parameters":{"id":50226,"nodeType":"ParameterList","parameters":[],"src":"3211:2:174"},"src":"3165:49:174"},{"errorSelector":"523544cc","id":50229,"name":"TypedMemView__unsafeCopyTo_nullPointer","nameLocation":"3223:38:174","nodeType":"ErrorDefinition","parameters":{"id":50228,"nodeType":"ParameterList","parameters":[],"src":"3261:2:174"},"src":"3217:47:174"},{"errorSelector":"5dc12922","id":50231,"name":"TypedMemView__unsafeCopyTo_invalidPointer","nameLocation":"3273:41:174","nodeType":"ErrorDefinition","parameters":{"id":50230,"nodeType":"ParameterList","parameters":[],"src":"3314:2:174"},"src":"3267:50:174"},{"errorSelector":"abc6f66c","id":50233,"name":"TypedMemView__unsafeCopyTo_identityOOG","nameLocation":"3326:38:174","nodeType":"ErrorDefinition","parameters":{"id":50232,"nodeType":"ParameterList","parameters":[],"src":"3364:2:174"},"src":"3320:47:174"},{"errorSelector":"252e0d83","id":50235,"name":"TypedMemView__assertValid_validityAssertionFailed","nameLocation":"3376:49:174","nodeType":"ErrorDefinition","parameters":{"id":50234,"nodeType":"ParameterList","parameters":[],"src":"3425:2:174"},"src":"3370:58:174"},{"body":{"id":50331,"nodeType":"Block","src":"3763:928:174","statements":[{"expression":{"id":50245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50243,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50241,"src":"3769:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":50244,"name":"_b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50238,"src":"3773:2:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3769:6:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50246,"nodeType":"ExpressionStatement","src":"3769:6:174"},{"expression":{"id":50263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50247,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50241,"src":"3800:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50248,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50241,"src":"3812:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"38","id":50249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3817:1:174","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"3812:6:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50251,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3811:8:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307830304646303046463030464630304646303046463030464630304646303046463030464630304646303046463030464630304646303046463030464630304646","id":50252,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3822:66:174","typeDescriptions":{"typeIdentifier":"t_rational_450552876409790643671482431940419874915447411150352389258589821042463539455_by_1","typeString":"int_const 4505...(67 digits omitted)...9455"},"value":"0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF"},"src":"3811:77:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50254,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3810:79:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50255,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50241,"src":"3900:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307830304646303046463030464630304646303046463030464630304646303046463030464630304646303046463030464630304646303046463030464630304646","id":50256,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3904:66:174","typeDescriptions":{"typeIdentifier":"t_rational_450552876409790643671482431940419874915447411150352389258589821042463539455_by_1","typeString":"int_const 4505...(67 digits omitted)...9455"},"value":"0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF"},"src":"3900:70:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50258,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3899:72:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"38","id":50259,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3975:1:174","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"3899:77:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50261,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3898:79:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3810:167:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3800:177:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50264,"nodeType":"ExpressionStatement","src":"3800:177:174"},{"expression":{"id":50281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50265,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50241,"src":"4013:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50266,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50241,"src":"4025:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3136","id":50267,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4030:2:174","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"4025:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50269,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4024:9:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307830303030464646463030303046464646303030304646464630303030464646463030303046464646303030304646464630303030464646463030303046464646","id":50270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4036:66:174","typeDescriptions":{"typeIdentifier":"t_rational_1766820105243087041267848467410591083712559083657179364930612997358944255_by_1","typeString":"int_const 1766...(65 digits omitted)...4255"},"value":"0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF"},"src":"4024:78:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50272,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4023:80:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50273,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50241,"src":"4114:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307830303030464646463030303046464646303030304646464630303030464646463030303046464646303030304646464630303030464646463030303046464646","id":50274,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4118:66:174","typeDescriptions":{"typeIdentifier":"t_rational_1766820105243087041267848467410591083712559083657179364930612997358944255_by_1","typeString":"int_const 1766...(65 digits omitted)...4255"},"value":"0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF"},"src":"4114:70:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50276,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4113:72:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3136","id":50277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4189:2:174","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"4113:78:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50279,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4112:80:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4023:169:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4013:179:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50282,"nodeType":"ExpressionStatement","src":"4013:179:174"},{"expression":{"id":50299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50283,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50241,"src":"4228:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50284,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50241,"src":"4240:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3332","id":50285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4245:2:174","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"4240:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50287,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4239:9:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307830303030303030304646464646464646303030303030303046464646464646463030303030303030464646464646464630303030303030304646464646464646","id":50288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4251:66:174","typeDescriptions":{"typeIdentifier":"t_rational_26959946660873538060741835960174461801791452538186943042387869433855_by_1","typeString":"int_const 2695...(60 digits omitted)...3855"},"value":"0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF"},"src":"4239:78:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50290,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4238:80:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50291,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50241,"src":"4329:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307830303030303030304646464646464646303030303030303046464646464646463030303030303030464646464646464630303030303030304646464646464646","id":50292,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4333:66:174","typeDescriptions":{"typeIdentifier":"t_rational_26959946660873538060741835960174461801791452538186943042387869433855_by_1","typeString":"int_const 2695...(60 digits omitted)...3855"},"value":"0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF"},"src":"4329:70:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50294,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4328:72:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3332","id":50295,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4404:2:174","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"4328:78:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50297,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4327:80:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4238:169:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4228:179:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50300,"nodeType":"ExpressionStatement","src":"4228:179:174"},{"expression":{"id":50317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50301,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50241,"src":"4443:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50302,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50241,"src":"4455:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3634","id":50303,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4460:2:174","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"4455:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50305,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4454:9:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307830303030303030303030303030303030464646464646464646464646464646463030303030303030303030303030303046464646464646464646464646464646","id":50306,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4466:66:174","typeDescriptions":{"typeIdentifier":"t_rational_6277101735386680763495507056286727952657427581105975853055_by_1","typeString":"int_const 6277...(50 digits omitted)...3055"},"value":"0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF"},"src":"4454:78:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50308,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4453:80:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50309,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50241,"src":"4544:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307830303030303030303030303030303030464646464646464646464646464646463030303030303030303030303030303046464646464646464646464646464646","id":50310,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4548:66:174","typeDescriptions":{"typeIdentifier":"t_rational_6277101735386680763495507056286727952657427581105975853055_by_1","typeString":"int_const 6277...(50 digits omitted)...3055"},"value":"0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF"},"src":"4544:70:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50312,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4543:72:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3634","id":50313,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4619:2:174","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"4543:78:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50315,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4542:80:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4453:169:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4443:179:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50318,"nodeType":"ExpressionStatement","src":"4443:179:174"},{"expression":{"id":50329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50319,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50241,"src":"4659:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50320,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50241,"src":"4664:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"313238","id":50321,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4669:3:174","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"4664:8:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50323,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4663:10:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50324,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50241,"src":"4677:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"313238","id":50325,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4682:3:174","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"4677:8:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50327,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4676:10:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4663:23:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4659:27:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50330,"nodeType":"ExpressionStatement","src":"4659:27:174"}]},"documentation":{"id":50236,"nodeType":"StructuredDocumentation","src":"3432:258:174","text":" @notice          Changes the endianness of a uint256.\n @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\n @param _b        The unsigned integer to reverse\n @return          v - The reversed value"},"id":50332,"implemented":true,"kind":"function","modifiers":[],"name":"reverseUint256","nameLocation":"3702:14:174","nodeType":"FunctionDefinition","parameters":{"id":50239,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50238,"mutability":"mutable","name":"_b","nameLocation":"3725:2:174","nodeType":"VariableDeclaration","scope":50332,"src":"3717:10:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50237,"name":"uint256","nodeType":"ElementaryTypeName","src":"3717:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3716:12:174"},"returnParameters":{"id":50242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50241,"mutability":"mutable","name":"v","nameLocation":"3760:1:174","nodeType":"VariableDeclaration","scope":50332,"src":"3752:9:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50240,"name":"uint256","nodeType":"ElementaryTypeName","src":"3752:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3751:11:174"},"scope":51265,"src":"3693:998:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50341,"nodeType":"Block","src":"4902:220:174","statements":[{"AST":{"nodeType":"YulBlock","src":"4953:165:174","statements":[{"nodeType":"YulAssignment","src":"5019:93:174","value":{"arguments":[{"arguments":[{"name":"_len","nodeType":"YulIdentifier","src":"5035:4:174"},{"kind":"number","nodeType":"YulLiteral","src":"5041:1:174","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5031:3:174"},"nodeType":"YulFunctionCall","src":"5031:12:174"},{"kind":"number","nodeType":"YulLiteral","src":"5045:66:174","type":"","value":"0x8000000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"sar","nodeType":"YulIdentifier","src":"5027:3:174"},"nodeType":"YulFunctionCall","src":"5027:85:174"},"variableNames":[{"name":"mask","nodeType":"YulIdentifier","src":"5019:4:174"}]}]},"evmVersion":"london","externalReferences":[{"declaration":50335,"isOffset":false,"isSlot":false,"src":"5035:4:174","valueSize":1},{"declaration":50338,"isOffset":false,"isSlot":false,"src":"5019:4:174","valueSize":1}],"id":50340,"nodeType":"InlineAssembly","src":"4944:174:174"}]},"documentation":{"id":50333,"nodeType":"StructuredDocumentation","src":"4695:138:174","text":" @notice      Create a mask with the highest `_len` bits set.\n @param _len  The length\n @return      mask - The mask"},"id":50342,"implemented":true,"kind":"function","modifiers":[],"name":"leftMask","nameLocation":"4845:8:174","nodeType":"FunctionDefinition","parameters":{"id":50336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50335,"mutability":"mutable","name":"_len","nameLocation":"4860:4:174","nodeType":"VariableDeclaration","scope":50342,"src":"4854:10:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":50334,"name":"uint8","nodeType":"ElementaryTypeName","src":"4854:5:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"4853:12:174"},"returnParameters":{"id":50339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50338,"mutability":"mutable","name":"mask","nameLocation":"4896:4:174","nodeType":"VariableDeclaration","scope":50342,"src":"4888:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50337,"name":"uint256","nodeType":"ElementaryTypeName","src":"4888:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4887:14:174"},"scope":51265,"src":"4836:286:174","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":50350,"nodeType":"Block","src":"5272:22:174","statements":[{"expression":{"id":50348,"name":"NULL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50193,"src":"5285:4:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"functionReturnParameters":50347,"id":50349,"nodeType":"Return","src":"5278:11:174"}]},"documentation":{"id":50343,"nodeType":"StructuredDocumentation","src":"5126:91:174","text":" @notice      Return the null view.\n @return      bytes29 - The null view"},"id":50351,"implemented":true,"kind":"function","modifiers":[],"name":"nullView","nameLocation":"5229:8:174","nodeType":"FunctionDefinition","parameters":{"id":50344,"nodeType":"ParameterList","parameters":[],"src":"5237:2:174"},"returnParameters":{"id":50347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50346,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50351,"src":"5263:7:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50345,"name":"bytes29","nodeType":"ElementaryTypeName","src":"5263:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"5262:9:174"},"scope":51265,"src":"5220:74:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50363,"nodeType":"Block","src":"5467:33:174","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"id":50361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50359,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50354,"src":"5480:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":50360,"name":"NULL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50193,"src":"5491:4:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"src":"5480:15:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":50358,"id":50362,"nodeType":"Return","src":"5473:22:174"}]},"documentation":{"id":50352,"nodeType":"StructuredDocumentation","src":"5298:104:174","text":" @notice      Check if the view is null.\n @return      bool - True if the view is null"},"id":50364,"implemented":true,"kind":"function","modifiers":[],"name":"isNull","nameLocation":"5414:6:174","nodeType":"FunctionDefinition","parameters":{"id":50355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50354,"mutability":"mutable","name":"memView","nameLocation":"5429:7:174","nodeType":"VariableDeclaration","scope":50364,"src":"5421:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50353,"name":"bytes29","nodeType":"ElementaryTypeName","src":"5421:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"5420:17:174"},"returnParameters":{"id":50358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50357,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50364,"src":"5461:4:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50356,"name":"bool","nodeType":"ElementaryTypeName","src":"5461:4:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5460:6:174"},"scope":51265,"src":"5405:95:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50377,"nodeType":"Block","src":"5682:34:174","statements":[{"expression":{"id":50375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5695:16:174","subExpression":{"arguments":[{"id":50373,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50367,"src":"5703:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50372,"name":"isNull","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50364,"src":"5696:6:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bool_$","typeString":"function (bytes29) pure returns (bool)"}},"id":50374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5696:15:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":50371,"id":50376,"nodeType":"Return","src":"5688:23:174"}]},"documentation":{"id":50365,"nodeType":"StructuredDocumentation","src":"5504:112:174","text":" @notice      Check if the view is not null.\n @return      bool - True if the view is not null"},"id":50378,"implemented":true,"kind":"function","modifiers":[],"name":"notNull","nameLocation":"5628:7:174","nodeType":"FunctionDefinition","parameters":{"id":50368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50367,"mutability":"mutable","name":"memView","nameLocation":"5644:7:174","nodeType":"VariableDeclaration","scope":50378,"src":"5636:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50366,"name":"bytes29","nodeType":"ElementaryTypeName","src":"5636:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"5635:17:174"},"returnParameters":{"id":50371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50370,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50378,"src":"5676:4:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50369,"name":"bool","nodeType":"ElementaryTypeName","src":"5676:4:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5675:6:174"},"scope":51265,"src":"5619:97:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50402,"nodeType":"Block","src":"6191:220:174","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint40","typeString":"uint40"},"id":50390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":50387,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50381,"src":"6208:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50386,"name":"typeOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50601,"src":"6201:6:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$","typeString":"function (bytes29) pure returns (uint40)"}},"id":50388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6201:15:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"307866666666666666666666","id":50389,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6220:12:174","typeDescriptions":{"typeIdentifier":"t_rational_1099511627775_by_1","typeString":"int_const 1099511627775"},"value":"0xffffffffff"},"src":"6201:31:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50394,"nodeType":"IfStatement","src":"6197:63:174","trueBody":{"id":50393,"nodeType":"Block","src":"6234:26:174","statements":[{"expression":{"hexValue":"74727565","id":50391,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6249:4:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":50385,"id":50392,"nodeType":"Return","src":"6242:11:174"}]}},{"assignments":[50396],"declarations":[{"constant":false,"id":50396,"mutability":"mutable","name":"_end","nameLocation":"6273:4:174","nodeType":"VariableDeclaration","scope":50402,"src":"6265:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50395,"name":"uint256","nodeType":"ElementaryTypeName","src":"6265:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50400,"initialValue":{"arguments":[{"id":50398,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50381,"src":"6284:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50397,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50683,"src":"6280:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint256_$","typeString":"function (bytes29) pure returns (uint256)"}},"id":50399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6280:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6265:27:174"},{"AST":{"nodeType":"YulBlock","src":"6307:100:174","statements":[{"nodeType":"YulAssignment","src":"6373:28:174","value":{"arguments":[{"name":"_end","nodeType":"YulIdentifier","src":"6383:4:174"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6395:4:174","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6389:5:174"},"nodeType":"YulFunctionCall","src":"6389:11:174"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6380:2:174"},"nodeType":"YulFunctionCall","src":"6380:21:174"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"6373:3:174"}]}]},"evmVersion":"london","externalReferences":[{"declaration":50396,"isOffset":false,"isSlot":false,"src":"6383:4:174","valueSize":1},{"declaration":50384,"isOffset":false,"isSlot":false,"src":"6373:3:174","valueSize":1}],"id":50401,"nodeType":"InlineAssembly","src":"6298:109:174"}]},"documentation":{"id":50379,"nodeType":"StructuredDocumentation","src":"5720:398:174","text":" @notice          Check if the view is of a invalid type and points to a valid location\n                  in memory.\n @dev             We perform this check by examining solidity's unallocated memory\n                  pointer and ensuring that the view's upper bound is less than that.\n @param memView   The view\n @return          ret - True if the view is invalid"},"id":50403,"implemented":true,"kind":"function","modifiers":[],"name":"isNotValid","nameLocation":"6130:10:174","nodeType":"FunctionDefinition","parameters":{"id":50382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50381,"mutability":"mutable","name":"memView","nameLocation":"6149:7:174","nodeType":"VariableDeclaration","scope":50403,"src":"6141:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50380,"name":"bytes29","nodeType":"ElementaryTypeName","src":"6141:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"6140:17:174"},"returnParameters":{"id":50385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50384,"mutability":"mutable","name":"ret","nameLocation":"6186:3:174","nodeType":"VariableDeclaration","scope":50403,"src":"6181:8:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50383,"name":"bool","nodeType":"ElementaryTypeName","src":"6181:4:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6180:10:174"},"scope":51265,"src":"6121:290:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50420,"nodeType":"Block","src":"6702:114:174","statements":[{"condition":{"arguments":[{"id":50412,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50406,"src":"6723:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50411,"name":"isNotValid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50403,"src":"6712:10:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bool_$","typeString":"function (bytes29) pure returns (bool)"}},"id":50413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6712:19:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50417,"nodeType":"IfStatement","src":"6708:83:174","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":50414,"name":"TypedMemView__assertValid_validityAssertionFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50235,"src":"6740:49:174","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":50415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6740:51:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50416,"nodeType":"RevertStatement","src":"6733:58:174"}},{"expression":{"id":50418,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50406,"src":"6804:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"functionReturnParameters":50410,"id":50419,"nodeType":"Return","src":"6797:14:174"}]},"documentation":{"id":50404,"nodeType":"StructuredDocumentation","src":"6415:214:174","text":" @notice          Require that a typed memory view be valid.\n @dev             Returns the view for easy chaining.\n @param memView   The view\n @return          bytes29 - The validated view"},"id":50421,"implemented":true,"kind":"function","modifiers":[],"name":"assertValid","nameLocation":"6641:11:174","nodeType":"FunctionDefinition","parameters":{"id":50407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50406,"mutability":"mutable","name":"memView","nameLocation":"6661:7:174","nodeType":"VariableDeclaration","scope":50421,"src":"6653:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50405,"name":"bytes29","nodeType":"ElementaryTypeName","src":"6653:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"6652:17:174"},"returnParameters":{"id":50410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50409,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50421,"src":"6693:7:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50408,"name":"bytes29","nodeType":"ElementaryTypeName","src":"6693:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"6692:9:174"},"scope":51265,"src":"6632:184:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50437,"nodeType":"Block","src":"7147:46:174","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint40","typeString":"uint40"},"id":50435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":50432,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50424,"src":"7167:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50431,"name":"typeOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50601,"src":"7160:6:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$","typeString":"function (bytes29) pure returns (uint40)"}},"id":50433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7160:15:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":50434,"name":"_expected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50426,"src":"7179:9:174","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"7160:28:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":50430,"id":50436,"nodeType":"Return","src":"7153:35:174"}]},"documentation":{"id":50422,"nodeType":"StructuredDocumentation","src":"6820:244:174","text":" @notice          Return true if the memview is of the expected type. Otherwise false.\n @param memView   The view\n @param _expected The expected type\n @return          bool - True if the memview is of the expected type"},"id":50438,"implemented":true,"kind":"function","modifiers":[],"name":"isType","nameLocation":"7076:6:174","nodeType":"FunctionDefinition","parameters":{"id":50427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50424,"mutability":"mutable","name":"memView","nameLocation":"7091:7:174","nodeType":"VariableDeclaration","scope":50438,"src":"7083:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50423,"name":"bytes29","nodeType":"ElementaryTypeName","src":"7083:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":50426,"mutability":"mutable","name":"_expected","nameLocation":"7107:9:174","nodeType":"VariableDeclaration","scope":50438,"src":"7100:16:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":50425,"name":"uint40","nodeType":"ElementaryTypeName","src":"7100:6:174","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"7082:35:174"},"returnParameters":{"id":50430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50429,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50438,"src":"7141:4:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50428,"name":"bool","nodeType":"ElementaryTypeName","src":"7141:4:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7140:6:174"},"scope":51265,"src":"7067:126:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50470,"nodeType":"Block","src":"7562:175:174","statements":[{"condition":{"id":50452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7572:27:174","subExpression":{"arguments":[{"id":50449,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50441,"src":"7580:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},{"id":50450,"name":"_expected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50443,"src":"7589:9:174","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"id":50448,"name":"isType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50438,"src":"7573:6:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint40_$returns$_t_bool_$","typeString":"function (bytes29,uint40) pure returns (bool)"}},"id":50451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7573:26:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50467,"nodeType":"IfStatement","src":"7568:145:174","trueBody":{"id":50466,"nodeType":"Block","src":"7601:112:174","statements":[{"errorCall":{"arguments":[{"arguments":[{"arguments":[{"id":50457,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50441,"src":"7676:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50456,"name":"typeOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50601,"src":"7669:6:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$","typeString":"function (bytes29) pure returns (uint40)"}},"id":50458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7669:15:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"}],"id":50455,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7661:7:174","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":50454,"name":"uint256","nodeType":"ElementaryTypeName","src":"7661:7:174","typeDescriptions":{}}},"id":50459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7661:24:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":50462,"name":"_expected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50443,"src":"7695:9:174","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"}],"id":50461,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7687:7:174","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":50460,"name":"uint256","nodeType":"ElementaryTypeName","src":"7687:7:174","typeDescriptions":{}}},"id":50463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7687:18:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50453,"name":"TypedMemView__assertType_typeAssertionFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50215,"src":"7616:44:174","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":50464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7616:90:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50465,"nodeType":"RevertStatement","src":"7609:97:174"}]}},{"expression":{"id":50468,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50441,"src":"7725:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"functionReturnParameters":50447,"id":50469,"nodeType":"Return","src":"7718:14:174"}]},"documentation":{"id":50439,"nodeType":"StructuredDocumentation","src":"7197:275:174","text":" @notice          Require that a typed memory view has a specific type.\n @dev             Returns the view for easy chaining.\n @param memView   The view\n @param _expected The expected type\n @return          bytes29 - The view with validated type"},"id":50471,"implemented":true,"kind":"function","modifiers":[],"name":"assertType","nameLocation":"7484:10:174","nodeType":"FunctionDefinition","parameters":{"id":50444,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50441,"mutability":"mutable","name":"memView","nameLocation":"7503:7:174","nodeType":"VariableDeclaration","scope":50471,"src":"7495:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50440,"name":"bytes29","nodeType":"ElementaryTypeName","src":"7495:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":50443,"mutability":"mutable","name":"_expected","nameLocation":"7519:9:174","nodeType":"VariableDeclaration","scope":50471,"src":"7512:16:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":50442,"name":"uint40","nodeType":"ElementaryTypeName","src":"7512:6:174","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"7494:35:174"},"returnParameters":{"id":50447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50446,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50471,"src":"7553:7:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50445,"name":"bytes29","nodeType":"ElementaryTypeName","src":"7553:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"7552:9:174"},"scope":51265,"src":"7475:262:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50482,"nodeType":"Block","src":"8048:236:174","statements":[{"AST":{"nodeType":"YulBlock","src":"8093:187:174","statements":[{"nodeType":"YulAssignment","src":"8194:80:174","value":{"arguments":[{"arguments":[{"name":"memView","nodeType":"YulIdentifier","src":"8212:7:174"},{"name":"LOW_27_BYTES_MASK","nodeType":"YulIdentifier","src":"8221:17:174"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8208:3:174"},"nodeType":"YulFunctionCall","src":"8208:31:174"},{"arguments":[{"name":"_27_BYTES_IN_BITS","nodeType":"YulIdentifier","src":"8245:17:174"},{"name":"_newType","nodeType":"YulIdentifier","src":"8264:8:174"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8241:3:174"},"nodeType":"YulFunctionCall","src":"8241:32:174"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"8205:2:174"},"nodeType":"YulFunctionCall","src":"8205:69:174"},"variableNames":[{"name":"newView","nodeType":"YulIdentifier","src":"8194:7:174"}]}]},"evmVersion":"london","externalReferences":[{"declaration":50209,"isOffset":false,"isSlot":false,"src":"8221:17:174","valueSize":1},{"declaration":50206,"isOffset":false,"isSlot":false,"src":"8245:17:174","valueSize":1},{"declaration":50476,"isOffset":false,"isSlot":false,"src":"8264:8:174","valueSize":1},{"declaration":50474,"isOffset":false,"isSlot":false,"src":"8212:7:174","valueSize":1},{"declaration":50479,"isOffset":false,"isSlot":false,"src":"8194:7:174","valueSize":1}],"id":50481,"nodeType":"InlineAssembly","src":"8084:196:174"}]},"documentation":{"id":50472,"nodeType":"StructuredDocumentation","src":"7741:214:174","text":" @notice          Return an identical view with a different type.\n @param memView   The view\n @param _newType  The new type\n @return          newView - The new view with the specified type"},"id":50483,"implemented":true,"kind":"function","modifiers":[],"name":"castTo","nameLocation":"7967:6:174","nodeType":"FunctionDefinition","parameters":{"id":50477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50474,"mutability":"mutable","name":"memView","nameLocation":"7982:7:174","nodeType":"VariableDeclaration","scope":50483,"src":"7974:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50473,"name":"bytes29","nodeType":"ElementaryTypeName","src":"7974:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":50476,"mutability":"mutable","name":"_newType","nameLocation":"7998:8:174","nodeType":"VariableDeclaration","scope":50483,"src":"7991:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":50475,"name":"uint40","nodeType":"ElementaryTypeName","src":"7991:6:174","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"7973:34:174"},"returnParameters":{"id":50480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50479,"mutability":"mutable","name":"newView","nameLocation":"8039:7:174","nodeType":"VariableDeclaration","scope":50483,"src":"8031:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50478,"name":"bytes29","nodeType":"ElementaryTypeName","src":"8031:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"8030:17:174"},"scope":51265,"src":"7958:326:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50529,"nodeType":"Block","src":"8933:529:174","statements":[{"assignments":[50496],"declarations":[{"constant":false,"id":50496,"mutability":"mutable","name":"_uint96Bits","nameLocation":"8947:11:174","nodeType":"VariableDeclaration","scope":50529,"src":"8939:19:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50495,"name":"uint256","nodeType":"ElementaryTypeName","src":"8939:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50498,"initialValue":{"hexValue":"3936","id":50497,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8961:2:174","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},"nodeType":"VariableDeclarationStatement","src":"8939:24:174"},{"assignments":[50500],"declarations":[{"constant":false,"id":50500,"mutability":"mutable","name":"_emptyBits","nameLocation":"8977:10:174","nodeType":"VariableDeclaration","scope":50529,"src":"8969:18:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50499,"name":"uint256","nodeType":"ElementaryTypeName","src":"8969:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50502,"initialValue":{"hexValue":"3234","id":50501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8990:2:174","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},"nodeType":"VariableDeclarationStatement","src":"8969:23:174"},{"assignments":[50504],"declarations":[{"constant":false,"id":50504,"mutability":"mutable","name":"len_","nameLocation":"9062:4:174","nodeType":"VariableDeclaration","scope":50529,"src":"9055:11:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":50503,"name":"uint96","nodeType":"ElementaryTypeName","src":"9055:6:174","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"id":50509,"initialValue":{"arguments":[{"id":50507,"name":"_len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50490,"src":"9076:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50506,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9069:6:174","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":50505,"name":"uint96","nodeType":"ElementaryTypeName","src":"9069:6:174","typeDescriptions":{}}},"id":50508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9069:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"9055:26:174"},{"assignments":[50511],"declarations":[{"constant":false,"id":50511,"mutability":"mutable","name":"loc_","nameLocation":"9094:4:174","nodeType":"VariableDeclaration","scope":50529,"src":"9087:11:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":50510,"name":"uint96","nodeType":"ElementaryTypeName","src":"9087:6:174","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"id":50516,"initialValue":{"arguments":[{"id":50514,"name":"_loc","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50488,"src":"9108:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50513,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9101:6:174","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":50512,"name":"uint96","nodeType":"ElementaryTypeName","src":"9101:6:174","typeDescriptions":{}}},"id":50515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9101:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"9087:26:174"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":50524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50518,"name":"len_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50504,"src":"9127:4:174","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":50519,"name":"_len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50490,"src":"9135:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9127:12:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50521,"name":"loc_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50511,"src":"9143:4:174","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":50522,"name":"_loc","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50488,"src":"9151:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9143:12:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9127:28:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"217472756e6361746564","id":50525,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9157:12:174","typeDescriptions":{"typeIdentifier":"t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728","typeString":"literal_string \"!truncated\""},"value":"!truncated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728","typeString":"literal_string \"!truncated\""}],"id":50517,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9119:7:174","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":50526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9119:51:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50527,"nodeType":"ExpressionStatement","src":"9119:51:174"},{"AST":{"nodeType":"YulBlock","src":"9186:272:174","statements":[{"nodeType":"YulAssignment","src":"9260:34:174","value":{"arguments":[{"name":"_uint96Bits","nodeType":"YulIdentifier","src":"9275:11:174"},{"name":"_type","nodeType":"YulIdentifier","src":"9288:5:174"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9271:3:174"},"nodeType":"YulFunctionCall","src":"9271:23:174"},"variableNames":[{"name":"newView","nodeType":"YulIdentifier","src":"9260:7:174"}]},{"nodeType":"YulAssignment","src":"9316:46:174","value":{"arguments":[{"name":"_uint96Bits","nodeType":"YulIdentifier","src":"9331:11:174"},{"arguments":[{"name":"newView","nodeType":"YulIdentifier","src":"9347:7:174"},{"name":"loc_","nodeType":"YulIdentifier","src":"9356:4:174"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"9344:2:174"},"nodeType":"YulFunctionCall","src":"9344:17:174"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9327:3:174"},"nodeType":"YulFunctionCall","src":"9327:35:174"},"variableNames":[{"name":"newView","nodeType":"YulIdentifier","src":"9316:7:174"}]},{"nodeType":"YulAssignment","src":"9383:45:174","value":{"arguments":[{"name":"_emptyBits","nodeType":"YulIdentifier","src":"9398:10:174"},{"arguments":[{"name":"newView","nodeType":"YulIdentifier","src":"9413:7:174"},{"name":"len_","nodeType":"YulIdentifier","src":"9422:4:174"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"9410:2:174"},"nodeType":"YulFunctionCall","src":"9410:17:174"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9394:3:174"},"nodeType":"YulFunctionCall","src":"9394:34:174"},"variableNames":[{"name":"newView","nodeType":"YulIdentifier","src":"9383:7:174"}]}]},"evmVersion":"london","externalReferences":[{"declaration":50500,"isOffset":false,"isSlot":false,"src":"9398:10:174","valueSize":1},{"declaration":50486,"isOffset":false,"isSlot":false,"src":"9288:5:174","valueSize":1},{"declaration":50496,"isOffset":false,"isSlot":false,"src":"9275:11:174","valueSize":1},{"declaration":50496,"isOffset":false,"isSlot":false,"src":"9331:11:174","valueSize":1},{"declaration":50504,"isOffset":false,"isSlot":false,"src":"9422:4:174","valueSize":1},{"declaration":50511,"isOffset":false,"isSlot":false,"src":"9356:4:174","valueSize":1},{"declaration":50493,"isOffset":false,"isSlot":false,"src":"9260:7:174","valueSize":1},{"declaration":50493,"isOffset":false,"isSlot":false,"src":"9316:7:174","valueSize":1},{"declaration":50493,"isOffset":false,"isSlot":false,"src":"9347:7:174","valueSize":1},{"declaration":50493,"isOffset":false,"isSlot":false,"src":"9383:7:174","valueSize":1},{"declaration":50493,"isOffset":false,"isSlot":false,"src":"9413:7:174","valueSize":1}],"id":50528,"nodeType":"InlineAssembly","src":"9177:281:174"}]},"documentation":{"id":50484,"nodeType":"StructuredDocumentation","src":"8288:514:174","text":" @notice          Unsafe raw pointer construction. This should generally not be called\n                  directly. Prefer `ref` wherever possible.\n @dev             Unsafe raw pointer construction. This should generally not be called\n                  directly. Prefer `ref` wherever possible.\n @param _type     The type\n @param _loc      The memory address\n @param _len      The length\n @return          newView - The new view with the specified type, location and length"},"id":50530,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeBuildUnchecked","nameLocation":"8814:20:174","nodeType":"FunctionDefinition","parameters":{"id":50491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50486,"mutability":"mutable","name":"_type","nameLocation":"8848:5:174","nodeType":"VariableDeclaration","scope":50530,"src":"8840:13:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50485,"name":"uint256","nodeType":"ElementaryTypeName","src":"8840:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50488,"mutability":"mutable","name":"_loc","nameLocation":"8867:4:174","nodeType":"VariableDeclaration","scope":50530,"src":"8859:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50487,"name":"uint256","nodeType":"ElementaryTypeName","src":"8859:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50490,"mutability":"mutable","name":"_len","nameLocation":"8885:4:174","nodeType":"VariableDeclaration","scope":50530,"src":"8877:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50489,"name":"uint256","nodeType":"ElementaryTypeName","src":"8877:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8834:59:174"},"returnParameters":{"id":50494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50493,"mutability":"mutable","name":"newView","nameLocation":"8924:7:174","nodeType":"VariableDeclaration","scope":50530,"src":"8916:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50492,"name":"bytes29","nodeType":"ElementaryTypeName","src":"8916:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"8915:17:174"},"scope":51265,"src":"8805:657:174","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":50564,"nodeType":"Block","src":"10093:276:174","statements":[{"assignments":[50543],"declarations":[{"constant":false,"id":50543,"mutability":"mutable","name":"_end","nameLocation":"10107:4:174","nodeType":"VariableDeclaration","scope":50564,"src":"10099:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50542,"name":"uint256","nodeType":"ElementaryTypeName","src":"10099:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50547,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50544,"name":"_loc","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50535,"src":"10114:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":50545,"name":"_len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50537,"src":"10121:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10114:11:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10099:26:174"},{"AST":{"nodeType":"YulBlock","src":"10140:124:174","statements":[{"body":{"nodeType":"YulBlock","src":"10231:27:174","statements":[{"nodeType":"YulAssignment","src":"10241:9:174","value":{"kind":"number","nodeType":"YulLiteral","src":"10249:1:174","type":"","value":"0"},"variableNames":[{"name":"_end","nodeType":"YulIdentifier","src":"10241:4:174"}]}]},"condition":{"arguments":[{"name":"_end","nodeType":"YulIdentifier","src":"10212:4:174"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10224:4:174","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10218:5:174"},"nodeType":"YulFunctionCall","src":"10218:11:174"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10209:2:174"},"nodeType":"YulFunctionCall","src":"10209:21:174"},"nodeType":"YulIf","src":"10206:52:174"}]},"evmVersion":"london","externalReferences":[{"declaration":50543,"isOffset":false,"isSlot":false,"src":"10212:4:174","valueSize":1},{"declaration":50543,"isOffset":false,"isSlot":false,"src":"10241:4:174","valueSize":1}],"id":50548,"nodeType":"InlineAssembly","src":"10131:133:174"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50549,"name":"_end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50543,"src":"10273:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":50550,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10281:1:174","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10273:9:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50555,"nodeType":"IfStatement","src":"10269:41:174","trueBody":{"id":50554,"nodeType":"Block","src":"10284:26:174","statements":[{"expression":{"id":50552,"name":"NULL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50193,"src":"10299:4:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"functionReturnParameters":50541,"id":50553,"nodeType":"Return","src":"10292:11:174"}]}},{"expression":{"id":50562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50556,"name":"newView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50540,"src":"10315:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":50558,"name":"_type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50533,"src":"10346:5:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50559,"name":"_loc","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50535,"src":"10353:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50560,"name":"_len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50537,"src":"10359:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50557,"name":"unsafeBuildUnchecked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50530,"src":"10325:20:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes29_$","typeString":"function (uint256,uint256,uint256) pure returns (bytes29)"}},"id":50561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10325:39:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"src":"10315:49:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":50563,"nodeType":"ExpressionStatement","src":"10315:49:174"}]},"documentation":{"id":50531,"nodeType":"StructuredDocumentation","src":"9466:510:174","text":" @notice          Instantiate a new memory view. This should generally not be called\n                  directly. Prefer `ref` wherever possible.\n @dev             Instantiate a new memory view. This should generally not be called\n                  directly. Prefer `ref` wherever possible.\n @param _type     The type\n @param _loc      The memory address\n @param _len      The length\n @return          newView - The new view with the specified type, location and length"},"id":50565,"implemented":true,"kind":"function","modifiers":[],"name":"build","nameLocation":"9988:5:174","nodeType":"FunctionDefinition","parameters":{"id":50538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50533,"mutability":"mutable","name":"_type","nameLocation":"10007:5:174","nodeType":"VariableDeclaration","scope":50565,"src":"9999:13:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50532,"name":"uint256","nodeType":"ElementaryTypeName","src":"9999:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50535,"mutability":"mutable","name":"_loc","nameLocation":"10026:4:174","nodeType":"VariableDeclaration","scope":50565,"src":"10018:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50534,"name":"uint256","nodeType":"ElementaryTypeName","src":"10018:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50537,"mutability":"mutable","name":"_len","nameLocation":"10044:4:174","nodeType":"VariableDeclaration","scope":50565,"src":"10036:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50536,"name":"uint256","nodeType":"ElementaryTypeName","src":"10036:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9993:59:174"},"returnParameters":{"id":50541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50540,"mutability":"mutable","name":"newView","nameLocation":"10084:7:174","nodeType":"VariableDeclaration","scope":50565,"src":"10076:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50539,"name":"bytes29","nodeType":"ElementaryTypeName","src":"10076:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"10075:17:174"},"scope":51265,"src":"9979:390:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50590,"nodeType":"Block","src":"10827:246:174","statements":[{"assignments":[50576],"declarations":[{"constant":false,"id":50576,"mutability":"mutable","name":"_len","nameLocation":"10841:4:174","nodeType":"VariableDeclaration","scope":50590,"src":"10833:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50575,"name":"uint256","nodeType":"ElementaryTypeName","src":"10833:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50579,"initialValue":{"expression":{"id":50577,"name":"arr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50568,"src":"10848:3:174","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":50578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10852:6:174","memberName":"length","nodeType":"MemberAccess","src":"10848:10:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10833:25:174"},{"assignments":[50581],"declarations":[{"constant":false,"id":50581,"mutability":"mutable","name":"_loc","nameLocation":"10873:4:174","nodeType":"VariableDeclaration","scope":50590,"src":"10865:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50580,"name":"uint256","nodeType":"ElementaryTypeName","src":"10865:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50582,"nodeType":"VariableDeclarationStatement","src":"10865:12:174"},{"AST":{"nodeType":"YulBlock","src":"10892:137:174","statements":[{"nodeType":"YulAssignment","src":"10958:22:174","value":{"arguments":[{"name":"arr","nodeType":"YulIdentifier","src":"10970:3:174"},{"kind":"number","nodeType":"YulLiteral","src":"10975:4:174","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10966:3:174"},"nodeType":"YulFunctionCall","src":"10966:14:174"},"variableNames":[{"name":"_loc","nodeType":"YulIdentifier","src":"10958:4:174"}]}]},"evmVersion":"london","externalReferences":[{"declaration":50581,"isOffset":false,"isSlot":false,"src":"10958:4:174","valueSize":1},{"declaration":50568,"isOffset":false,"isSlot":false,"src":"10970:3:174","valueSize":1}],"id":50583,"nodeType":"InlineAssembly","src":"10883:146:174"},{"expression":{"arguments":[{"id":50585,"name":"newType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50570,"src":"11048:7:174","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},{"id":50586,"name":"_loc","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50581,"src":"11057:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50587,"name":"_len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50576,"src":"11063:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50584,"name":"build","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50565,"src":"11042:5:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes29_$","typeString":"function (uint256,uint256,uint256) pure returns (bytes29)"}},"id":50588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11042:26:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"functionReturnParameters":50574,"id":50589,"nodeType":"Return","src":"11035:33:174"}]},"documentation":{"id":50566,"nodeType":"StructuredDocumentation","src":"10373:372:174","text":" @notice          Instantiate a memory view from a byte array.\n @dev             Note that due to Solidity memory representation, it is not possible to\n                  implement a deref, as the `bytes` type stores its len in memory.\n @param arr       The byte array\n @param newType   The type\n @return          bytes29 - The memory view"},"id":50591,"implemented":true,"kind":"function","modifiers":[],"name":"ref","nameLocation":"10757:3:174","nodeType":"FunctionDefinition","parameters":{"id":50571,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50568,"mutability":"mutable","name":"arr","nameLocation":"10774:3:174","nodeType":"VariableDeclaration","scope":50591,"src":"10761:16:174","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":50567,"name":"bytes","nodeType":"ElementaryTypeName","src":"10761:5:174","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":50570,"mutability":"mutable","name":"newType","nameLocation":"10786:7:174","nodeType":"VariableDeclaration","scope":50591,"src":"10779:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":50569,"name":"uint40","nodeType":"ElementaryTypeName","src":"10779:6:174","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"10760:34:174"},"returnParameters":{"id":50574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50573,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50591,"src":"10818:7:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50572,"name":"bytes29","nodeType":"ElementaryTypeName","src":"10818:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"10817:9:174"},"scope":51265,"src":"10748:325:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50600,"nodeType":"Block","src":"11323:184:174","statements":[{"AST":{"nodeType":"YulBlock","src":"11338:165:174","statements":[{"nodeType":"YulAssignment","src":"11429:40:174","value":{"arguments":[{"name":"_27_BYTES_IN_BITS","nodeType":"YulIdentifier","src":"11442:17:174"},{"name":"memView","nodeType":"YulIdentifier","src":"11461:7:174"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"11438:3:174"},"nodeType":"YulFunctionCall","src":"11438:31:174"},"variableNames":[{"name":"_type","nodeType":"YulIdentifier","src":"11429:5:174"}]}]},"evmVersion":"london","externalReferences":[{"declaration":50206,"isOffset":false,"isSlot":false,"src":"11442:17:174","valueSize":1},{"declaration":50597,"isOffset":false,"isSlot":false,"src":"11429:5:174","valueSize":1},{"declaration":50594,"isOffset":false,"isSlot":false,"src":"11461:7:174","valueSize":1}],"id":50599,"nodeType":"InlineAssembly","src":"11329:174:174"}]},"documentation":{"id":50592,"nodeType":"StructuredDocumentation","src":"11077:173:174","text":" @notice          Return the associated type information.\n @param memView   The memory view\n @return          _type - The type associated with the view"},"id":50601,"implemented":true,"kind":"function","modifiers":[],"name":"typeOf","nameLocation":"11262:6:174","nodeType":"FunctionDefinition","parameters":{"id":50595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50594,"mutability":"mutable","name":"memView","nameLocation":"11277:7:174","nodeType":"VariableDeclaration","scope":50601,"src":"11269:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50593,"name":"bytes29","nodeType":"ElementaryTypeName","src":"11269:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"11268:17:174"},"returnParameters":{"id":50598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50597,"mutability":"mutable","name":"_type","nameLocation":"11316:5:174","nodeType":"VariableDeclaration","scope":50601,"src":"11309:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":50596,"name":"uint40","nodeType":"ElementaryTypeName","src":"11309:6:174","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"11308:14:174"},"scope":51265,"src":"11253:254:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50614,"nodeType":"Block","src":"11741:266:174","statements":[{"assignments":[50610],"declarations":[{"constant":false,"id":50610,"mutability":"mutable","name":"_mask","nameLocation":"11755:5:174","nodeType":"VariableDeclaration","scope":50614,"src":"11747:13:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50609,"name":"uint256","nodeType":"ElementaryTypeName","src":"11747:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50612,"initialValue":{"id":50611,"name":"LOW_12_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50196,"src":"11763:11:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11747:27:174"},{"AST":{"nodeType":"YulBlock","src":"11819:184:174","statements":[{"nodeType":"YulAssignment","src":"11960:37:174","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11976:3:174","type":"","value":"120"},{"name":"memView","nodeType":"YulIdentifier","src":"11981:7:174"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"11972:3:174"},"nodeType":"YulFunctionCall","src":"11972:17:174"},{"name":"_mask","nodeType":"YulIdentifier","src":"11991:5:174"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11968:3:174"},"nodeType":"YulFunctionCall","src":"11968:29:174"},"variableNames":[{"name":"_loc","nodeType":"YulIdentifier","src":"11960:4:174"}]}]},"evmVersion":"london","externalReferences":[{"declaration":50607,"isOffset":false,"isSlot":false,"src":"11960:4:174","valueSize":1},{"declaration":50610,"isOffset":false,"isSlot":false,"src":"11991:5:174","valueSize":1},{"declaration":50604,"isOffset":false,"isSlot":false,"src":"11981:7:174","valueSize":1}],"id":50613,"nodeType":"InlineAssembly","src":"11810:193:174"}]},"documentation":{"id":50602,"nodeType":"StructuredDocumentation","src":"11511:161:174","text":" @notice          Return the memory address of the underlying bytes.\n @param memView   The view\n @return          _loc - The memory address"},"id":50615,"implemented":true,"kind":"function","modifiers":[],"name":"loc","nameLocation":"11684:3:174","nodeType":"FunctionDefinition","parameters":{"id":50605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50604,"mutability":"mutable","name":"memView","nameLocation":"11696:7:174","nodeType":"VariableDeclaration","scope":50615,"src":"11688:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50603,"name":"bytes29","nodeType":"ElementaryTypeName","src":"11688:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"11687:17:174"},"returnParameters":{"id":50608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50607,"mutability":"mutable","name":"_loc","nameLocation":"11735:4:174","nodeType":"VariableDeclaration","scope":50615,"src":"11728:11:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":50606,"name":"uint96","nodeType":"ElementaryTypeName","src":"11728:6:174","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"11727:13:174"},"scope":51265,"src":"11675:332:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50635,"nodeType":"Block","src":"12265:51:174","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":50626,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50618,"src":"12291:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50625,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50665,"src":"12287:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":50627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12287:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint96","typeString":"uint96"}],"id":50624,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12279:7:174","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":50623,"name":"uint256","nodeType":"ElementaryTypeName","src":"12279:7:174","typeDescriptions":{}}},"id":50628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12279:21:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"3331","id":50629,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12303:2:174","typeDescriptions":{"typeIdentifier":"t_rational_31_by_1","typeString":"int_const 31"},"value":"31"},"src":"12279:26:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50631,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12278:28:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3332","id":50632,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12309:2:174","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"12278:33:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50622,"id":50634,"nodeType":"Return","src":"12271:40:174"}]},"documentation":{"id":50616,"nodeType":"StructuredDocumentation","src":"12011:187:174","text":" @notice          The number of memory words this memory view occupies, rounded up.\n @param memView   The view\n @return          uint256 - The number of memory words"},"id":50636,"implemented":true,"kind":"function","modifiers":[],"name":"words","nameLocation":"12210:5:174","nodeType":"FunctionDefinition","parameters":{"id":50619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50618,"mutability":"mutable","name":"memView","nameLocation":"12224:7:174","nodeType":"VariableDeclaration","scope":50636,"src":"12216:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50617,"name":"bytes29","nodeType":"ElementaryTypeName","src":"12216:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"12215:17:174"},"returnParameters":{"id":50622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50621,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50636,"src":"12256:7:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50620,"name":"uint256","nodeType":"ElementaryTypeName","src":"12256:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12255:9:174"},"scope":51265,"src":"12201:115:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50650,"nodeType":"Block","src":"12591:37:174","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":50645,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50639,"src":"12610:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50644,"name":"words","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50636,"src":"12604:5:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint256_$","typeString":"function (bytes29) pure returns (uint256)"}},"id":50646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12604:14:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3332","id":50647,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12621:2:174","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"12604:19:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50643,"id":50649,"nodeType":"Return","src":"12597:26:174"}]},"documentation":{"id":50637,"nodeType":"StructuredDocumentation","src":"12320:200:174","text":" @notice          The in-memory footprint of a fresh copy of the view.\n @param memView   The view\n @return          uint256 - The in-memory footprint of a fresh copy of the view."},"id":50651,"implemented":true,"kind":"function","modifiers":[],"name":"footprint","nameLocation":"12532:9:174","nodeType":"FunctionDefinition","parameters":{"id":50640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50639,"mutability":"mutable","name":"memView","nameLocation":"12550:7:174","nodeType":"VariableDeclaration","scope":50651,"src":"12542:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50638,"name":"bytes29","nodeType":"ElementaryTypeName","src":"12542:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"12541:17:174"},"returnParameters":{"id":50643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50642,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50651,"src":"12582:7:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50641,"name":"uint256","nodeType":"ElementaryTypeName","src":"12582:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12581:9:174"},"scope":51265,"src":"12523:105:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50664,"nodeType":"Block","src":"12848:190:174","statements":[{"assignments":[50660],"declarations":[{"constant":false,"id":50660,"mutability":"mutable","name":"_mask","nameLocation":"12862:5:174","nodeType":"VariableDeclaration","scope":50664,"src":"12854:13:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50659,"name":"uint256","nodeType":"ElementaryTypeName","src":"12854:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50662,"initialValue":{"id":50661,"name":"LOW_12_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50196,"src":"12870:11:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12854:27:174"},{"AST":{"nodeType":"YulBlock","src":"12926:108:174","statements":[{"nodeType":"YulAssignment","src":"12992:36:174","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13008:2:174","type":"","value":"24"},{"name":"memView","nodeType":"YulIdentifier","src":"13012:7:174"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"13004:3:174"},"nodeType":"YulFunctionCall","src":"13004:16:174"},{"name":"_mask","nodeType":"YulIdentifier","src":"13022:5:174"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13000:3:174"},"nodeType":"YulFunctionCall","src":"13000:28:174"},"variableNames":[{"name":"_len","nodeType":"YulIdentifier","src":"12992:4:174"}]}]},"evmVersion":"london","externalReferences":[{"declaration":50657,"isOffset":false,"isSlot":false,"src":"12992:4:174","valueSize":1},{"declaration":50660,"isOffset":false,"isSlot":false,"src":"13022:5:174","valueSize":1},{"declaration":50654,"isOffset":false,"isSlot":false,"src":"13012:7:174","valueSize":1}],"id":50663,"nodeType":"InlineAssembly","src":"12917:117:174"}]},"documentation":{"id":50652,"nodeType":"StructuredDocumentation","src":"12632:147:174","text":" @notice          The number of bytes of the view.\n @param memView   The view\n @return          _len - The length of the view"},"id":50665,"implemented":true,"kind":"function","modifiers":[],"name":"len","nameLocation":"12791:3:174","nodeType":"FunctionDefinition","parameters":{"id":50655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50654,"mutability":"mutable","name":"memView","nameLocation":"12803:7:174","nodeType":"VariableDeclaration","scope":50665,"src":"12795:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50653,"name":"bytes29","nodeType":"ElementaryTypeName","src":"12795:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"12794:17:174"},"returnParameters":{"id":50658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50657,"mutability":"mutable","name":"_len","nameLocation":"12842:4:174","nodeType":"VariableDeclaration","scope":50665,"src":"12835:11:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":50656,"name":"uint96","nodeType":"ElementaryTypeName","src":"12835:6:174","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"12834:13:174"},"scope":51265,"src":"12782:256:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50682,"nodeType":"Block","src":"13262:69:174","statements":[{"id":50681,"nodeType":"UncheckedBlock","src":"13268:59:174","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint96","typeString":"uint96"},"id":50679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":50674,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50668,"src":"13297:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50673,"name":"loc","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50615,"src":"13293:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":50675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13293:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":50677,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50668,"src":"13312:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50676,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50665,"src":"13308:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":50678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13308:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"13293:27:174","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":50672,"id":50680,"nodeType":"Return","src":"13286:34:174"}]}]},"documentation":{"id":50666,"nodeType":"StructuredDocumentation","src":"13042:155:174","text":" @notice          Returns the endpoint of `memView`.\n @param memView   The view\n @return          uint256 - The endpoint of `memView`"},"id":50683,"implemented":true,"kind":"function","modifiers":[],"name":"end","nameLocation":"13209:3:174","nodeType":"FunctionDefinition","parameters":{"id":50669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50668,"mutability":"mutable","name":"memView","nameLocation":"13221:7:174","nodeType":"VariableDeclaration","scope":50683,"src":"13213:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50667,"name":"bytes29","nodeType":"ElementaryTypeName","src":"13213:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"13212:17:174"},"returnParameters":{"id":50672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50671,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50683,"src":"13253:7:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50670,"name":"uint256","nodeType":"ElementaryTypeName","src":"13253:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13252:9:174"},"scope":51265,"src":"13200:131:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50728,"nodeType":"Block","src":"13723:219:174","statements":[{"assignments":[50698],"declarations":[{"constant":false,"id":50698,"mutability":"mutable","name":"_loc","nameLocation":"13737:4:174","nodeType":"VariableDeclaration","scope":50728,"src":"13729:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50697,"name":"uint256","nodeType":"ElementaryTypeName","src":"13729:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50702,"initialValue":{"arguments":[{"id":50700,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50686,"src":"13748:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50699,"name":"loc","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50615,"src":"13744:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":50701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13744:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"13729:27:174"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50703,"name":"_loc","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50698,"src":"13809:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":50704,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50688,"src":"13816:6:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13809:13:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":50706,"name":"_len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50690,"src":"13825:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13809:20:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"id":50709,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50686,"src":"13836:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50708,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50683,"src":"13832:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint256_$","typeString":"function (bytes29) pure returns (uint256)"}},"id":50710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13832:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13809:35:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50715,"nodeType":"IfStatement","src":"13805:67:174","trueBody":{"id":50714,"nodeType":"Block","src":"13846:26:174","statements":[{"expression":{"id":50712,"name":"NULL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50193,"src":"13861:4:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"functionReturnParameters":50696,"id":50713,"nodeType":"Return","src":"13854:11:174"}]}},{"expression":{"id":50720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50716,"name":"_loc","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50698,"src":"13878:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50717,"name":"_loc","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50698,"src":"13885:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":50718,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50688,"src":"13892:6:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13885:13:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13878:20:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50721,"nodeType":"ExpressionStatement","src":"13878:20:174"},{"expression":{"arguments":[{"id":50723,"name":"newType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50692,"src":"13917:7:174","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},{"id":50724,"name":"_loc","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50698,"src":"13926:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50725,"name":"_len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50690,"src":"13932:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50722,"name":"build","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50565,"src":"13911:5:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes29_$","typeString":"function (uint256,uint256,uint256) pure returns (bytes29)"}},"id":50726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13911:26:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"functionReturnParameters":50696,"id":50727,"nodeType":"Return","src":"13904:33:174"}]},"documentation":{"id":50684,"nodeType":"StructuredDocumentation","src":"13335:255:174","text":" @notice          Safe slicing without memory modification.\n @param memView   The view\n @param _index    The start index\n @param _len      The length\n @param newType   The new type\n @return          bytes29 - The new view"},"id":50729,"implemented":true,"kind":"function","modifiers":[],"name":"slice","nameLocation":"13602:5:174","nodeType":"FunctionDefinition","parameters":{"id":50693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50686,"mutability":"mutable","name":"memView","nameLocation":"13621:7:174","nodeType":"VariableDeclaration","scope":50729,"src":"13613:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50685,"name":"bytes29","nodeType":"ElementaryTypeName","src":"13613:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":50688,"mutability":"mutable","name":"_index","nameLocation":"13642:6:174","nodeType":"VariableDeclaration","scope":50729,"src":"13634:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50687,"name":"uint256","nodeType":"ElementaryTypeName","src":"13634:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50690,"mutability":"mutable","name":"_len","nameLocation":"13662:4:174","nodeType":"VariableDeclaration","scope":50729,"src":"13654:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50689,"name":"uint256","nodeType":"ElementaryTypeName","src":"13654:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50692,"mutability":"mutable","name":"newType","nameLocation":"13679:7:174","nodeType":"VariableDeclaration","scope":50729,"src":"13672:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":50691,"name":"uint40","nodeType":"ElementaryTypeName","src":"13672:6:174","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"13607:83:174"},"returnParameters":{"id":50696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50695,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50729,"src":"13714:7:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50694,"name":"bytes29","nodeType":"ElementaryTypeName","src":"13714:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"13713:9:174"},"scope":51265,"src":"13593:349:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50748,"nodeType":"Block","src":"14305:50:174","statements":[{"expression":{"arguments":[{"id":50742,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50732,"src":"14324:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},{"hexValue":"30","id":50743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14333:1:174","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":50744,"name":"_len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50734,"src":"14336:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50745,"name":"newType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50736,"src":"14342:7:174","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"id":50741,"name":"slice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50729,"src":"14318:5:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint256_$_t_uint40_$returns$_t_bytes29_$","typeString":"function (bytes29,uint256,uint256,uint40) pure returns (bytes29)"}},"id":50746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14318:32:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"functionReturnParameters":50740,"id":50747,"nodeType":"Return","src":"14311:39:174"}]},"documentation":{"id":50730,"nodeType":"StructuredDocumentation","src":"13946:245:174","text":" @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\n @param memView   The view\n @param _len      The length\n @param newType   The new type\n @return          bytes29 - The new view"},"id":50749,"implemented":true,"kind":"function","modifiers":[],"name":"prefix","nameLocation":"14203:6:174","nodeType":"FunctionDefinition","parameters":{"id":50737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50732,"mutability":"mutable","name":"memView","nameLocation":"14223:7:174","nodeType":"VariableDeclaration","scope":50749,"src":"14215:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50731,"name":"bytes29","nodeType":"ElementaryTypeName","src":"14215:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":50734,"mutability":"mutable","name":"_len","nameLocation":"14244:4:174","nodeType":"VariableDeclaration","scope":50749,"src":"14236:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50733,"name":"uint256","nodeType":"ElementaryTypeName","src":"14236:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50736,"mutability":"mutable","name":"newType","nameLocation":"14261:7:174","nodeType":"VariableDeclaration","scope":50749,"src":"14254:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":50735,"name":"uint40","nodeType":"ElementaryTypeName","src":"14254:6:174","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"14209:63:174"},"returnParameters":{"id":50740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50739,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50749,"src":"14296:7:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50738,"name":"bytes29","nodeType":"ElementaryTypeName","src":"14296:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"14295:9:174"},"scope":51265,"src":"14194:161:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50775,"nodeType":"Block","src":"14717:77:174","statements":[{"expression":{"arguments":[{"id":50762,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50752,"src":"14736:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":50766,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50752,"src":"14757:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50765,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50665,"src":"14753:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":50767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14753:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint96","typeString":"uint96"}],"id":50764,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14745:7:174","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":50763,"name":"uint256","nodeType":"ElementaryTypeName","src":"14745:7:174","typeDescriptions":{}}},"id":50768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14745:21:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":50769,"name":"_len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50754,"src":"14769:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14745:28:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50771,"name":"_len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50754,"src":"14775:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50772,"name":"newType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50756,"src":"14781:7:174","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"id":50761,"name":"slice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50729,"src":"14730:5:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint256_$_t_uint40_$returns$_t_bytes29_$","typeString":"function (bytes29,uint256,uint256,uint40) pure returns (bytes29)"}},"id":50773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14730:59:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"functionReturnParameters":50760,"id":50774,"nodeType":"Return","src":"14723:66:174"}]},"documentation":{"id":50750,"nodeType":"StructuredDocumentation","src":"14359:243:174","text":" @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\n @param memView   The view\n @param _len      The length\n @param newType   The new type\n @return          bytes29 - The new view"},"id":50776,"implemented":true,"kind":"function","modifiers":[],"name":"postfix","nameLocation":"14614:7:174","nodeType":"FunctionDefinition","parameters":{"id":50757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50752,"mutability":"mutable","name":"memView","nameLocation":"14635:7:174","nodeType":"VariableDeclaration","scope":50776,"src":"14627:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50751,"name":"bytes29","nodeType":"ElementaryTypeName","src":"14627:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":50754,"mutability":"mutable","name":"_len","nameLocation":"14656:4:174","nodeType":"VariableDeclaration","scope":50776,"src":"14648:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50753,"name":"uint256","nodeType":"ElementaryTypeName","src":"14648:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50756,"mutability":"mutable","name":"newType","nameLocation":"14673:7:174","nodeType":"VariableDeclaration","scope":50776,"src":"14666:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":50755,"name":"uint40","nodeType":"ElementaryTypeName","src":"14666:6:174","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"14621:63:174"},"returnParameters":{"id":50760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50759,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50776,"src":"14708:7:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50758,"name":"bytes29","nodeType":"ElementaryTypeName","src":"14708:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"14707:9:174"},"scope":51265,"src":"14605:189:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50851,"nodeType":"Block","src":"15391:698:174","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":50790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50788,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50783,"src":"15401:6:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":50789,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15411:1:174","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"15401:11:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50797,"nodeType":"IfStatement","src":"15397:49:174","trueBody":{"id":50796,"nodeType":"Block","src":"15414:32:174","statements":[{"expression":{"arguments":[{"hexValue":"30","id":50793,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15437:1:174","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":50792,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15429:7:174","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":50791,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15429:7:174","typeDescriptions":{}}},"id":50794,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15429:10:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":50787,"id":50795,"nodeType":"Return","src":"15422:17:174"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50798,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50781,"src":"15455:6:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":50799,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50783,"src":"15464:6:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"15455:15:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"id":50802,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50779,"src":"15477:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50801,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50665,"src":"15473:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":50803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15473:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"15455:30:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50820,"nodeType":"IfStatement","src":"15451:282:174","trueBody":{"id":50819,"nodeType":"Block","src":"15487:246:174","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":50807,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50779,"src":"15678:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50806,"name":"loc","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50615,"src":"15674:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":50808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15674:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},{"arguments":[{"id":50810,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50779,"src":"15692:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50809,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50665,"src":"15688:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":50811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15688:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},{"id":50812,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50781,"src":"15702:6:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":50815,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50783,"src":"15718:6:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":50814,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15710:7:174","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":50813,"name":"uint256","nodeType":"ElementaryTypeName","src":"15710:7:174","typeDescriptions":{}}},"id":50816,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15710:15:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint96","typeString":"uint96"},{"typeIdentifier":"t_uint96","typeString":"uint96"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50805,"name":"TypedMemView__index_overrun","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50225,"src":"15646:27:174","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256,uint256) pure"}},"id":50817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15646:80:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50818,"nodeType":"RevertStatement","src":"15639:87:174"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":50823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50821,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50783,"src":"15742:6:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3332","id":50822,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15751:2:174","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"15742:11:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50827,"nodeType":"IfStatement","src":"15738:66:174","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":50824,"name":"TypedMemView__index_indexMoreThan32Bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50227,"src":"15762:40:174","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":50825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15762:42:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50826,"nodeType":"RevertStatement","src":"15755:49:174"}},{"assignments":[50829],"declarations":[{"constant":false,"id":50829,"mutability":"mutable","name":"bitLength","nameLocation":"15817:9:174","nodeType":"VariableDeclaration","scope":50851,"src":"15811:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":50828,"name":"uint8","nodeType":"ElementaryTypeName","src":"15811:5:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":50830,"nodeType":"VariableDeclarationStatement","src":"15811:15:174"},{"id":50837,"nodeType":"UncheckedBlock","src":"15832:47:174","statements":[{"expression":{"id":50835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50831,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50829,"src":"15850:9:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":50834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50832,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50783,"src":"15862:6:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"38","id":50833,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15871:1:174","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"15862:10:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"15850:22:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":50836,"nodeType":"ExpressionStatement","src":"15850:22:174"}]},{"assignments":[50839],"declarations":[{"constant":false,"id":50839,"mutability":"mutable","name":"_loc","nameLocation":"15892:4:174","nodeType":"VariableDeclaration","scope":50851,"src":"15884:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50838,"name":"uint256","nodeType":"ElementaryTypeName","src":"15884:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50843,"initialValue":{"arguments":[{"id":50841,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50779,"src":"15903:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50840,"name":"loc","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50615,"src":"15899:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":50842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15899:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"15884:27:174"},{"assignments":[50845],"declarations":[{"constant":false,"id":50845,"mutability":"mutable","name":"_mask","nameLocation":"15925:5:174","nodeType":"VariableDeclaration","scope":50851,"src":"15917:13:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50844,"name":"uint256","nodeType":"ElementaryTypeName","src":"15917:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50849,"initialValue":{"arguments":[{"id":50847,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50829,"src":"15942:9:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":50846,"name":"leftMask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50342,"src":"15933:8:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint8_$returns$_t_uint256_$","typeString":"function (uint8) pure returns (uint256)"}},"id":50848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15933:19:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15917:35:174"},{"AST":{"nodeType":"YulBlock","src":"15967:118:174","statements":[{"nodeType":"YulAssignment","src":"16033:46:174","value":{"arguments":[{"arguments":[{"arguments":[{"name":"_loc","nodeType":"YulIdentifier","src":"16057:4:174"},{"name":"_index","nodeType":"YulIdentifier","src":"16063:6:174"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16053:3:174"},"nodeType":"YulFunctionCall","src":"16053:17:174"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16047:5:174"},"nodeType":"YulFunctionCall","src":"16047:24:174"},{"name":"_mask","nodeType":"YulIdentifier","src":"16073:5:174"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16043:3:174"},"nodeType":"YulFunctionCall","src":"16043:36:174"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"16033:6:174"}]}]},"evmVersion":"london","externalReferences":[{"declaration":50781,"isOffset":false,"isSlot":false,"src":"16063:6:174","valueSize":1},{"declaration":50839,"isOffset":false,"isSlot":false,"src":"16057:4:174","valueSize":1},{"declaration":50845,"isOffset":false,"isSlot":false,"src":"16073:5:174","valueSize":1},{"declaration":50786,"isOffset":false,"isSlot":false,"src":"16033:6:174","valueSize":1}],"id":50850,"nodeType":"InlineAssembly","src":"15958:127:174"}]},"documentation":{"id":50777,"nodeType":"StructuredDocumentation","src":"14798:473:174","text":" @notice          Load up to 32 bytes from the view onto the stack.\n @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\n                  This can be immediately cast to a smaller fixed-length byte array.\n                  To automatically cast to an integer, use `indexUint`.\n @param memView   The view\n @param _index    The index\n @param _bytes    The bytes\n @return          result - The 32 byte result"},"id":50852,"implemented":true,"kind":"function","modifiers":[],"name":"index","nameLocation":"15283:5:174","nodeType":"FunctionDefinition","parameters":{"id":50784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50779,"mutability":"mutable","name":"memView","nameLocation":"15302:7:174","nodeType":"VariableDeclaration","scope":50852,"src":"15294:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50778,"name":"bytes29","nodeType":"ElementaryTypeName","src":"15294:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":50781,"mutability":"mutable","name":"_index","nameLocation":"15323:6:174","nodeType":"VariableDeclaration","scope":50852,"src":"15315:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50780,"name":"uint256","nodeType":"ElementaryTypeName","src":"15315:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50783,"mutability":"mutable","name":"_bytes","nameLocation":"15341:6:174","nodeType":"VariableDeclaration","scope":50852,"src":"15335:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":50782,"name":"uint8","nodeType":"ElementaryTypeName","src":"15335:5:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"15288:63:174"},"returnParameters":{"id":50787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50786,"mutability":"mutable","name":"result","nameLocation":"15383:6:174","nodeType":"VariableDeclaration","scope":50852,"src":"15375:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":50785,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15375:7:174","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15374:16:174"},"scope":51265,"src":"15274:815:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50881,"nodeType":"Block","src":"16538:80:174","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":50867,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50855,"src":"16565:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},{"id":50868,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50857,"src":"16574:6:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50869,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50859,"src":"16582:6:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":50866,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50852,"src":"16559:5:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_bytes32_$","typeString":"function (bytes29,uint256,uint8) pure returns (bytes32)"}},"id":50870,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16559:30:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":50865,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16551:7:174","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":50864,"name":"uint256","nodeType":"ElementaryTypeName","src":"16551:7:174","typeDescriptions":{}}},"id":50871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16551:39:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":50877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":50874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3332","id":50872,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16596:2:174","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":50873,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50859,"src":"16601:6:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"16596:11:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":50875,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16595:13:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"38","id":50876,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16611:1:174","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"16595:17:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":50878,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16594:19:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"16551:62:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50863,"id":50880,"nodeType":"Return","src":"16544:69:174"}]},"documentation":{"id":50853,"nodeType":"StructuredDocumentation","src":"16093:321:174","text":" @notice          Parse an unsigned integer from the view at `_index`.\n @dev             Requires that the view have >= `_bytes` bytes following that index.\n @param memView   The view\n @param _index    The index\n @param _bytes    The bytes\n @return          result - The unsigned integer"},"id":50882,"implemented":true,"kind":"function","modifiers":[],"name":"indexUint","nameLocation":"16426:9:174","nodeType":"FunctionDefinition","parameters":{"id":50860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50855,"mutability":"mutable","name":"memView","nameLocation":"16449:7:174","nodeType":"VariableDeclaration","scope":50882,"src":"16441:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50854,"name":"bytes29","nodeType":"ElementaryTypeName","src":"16441:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":50857,"mutability":"mutable","name":"_index","nameLocation":"16470:6:174","nodeType":"VariableDeclaration","scope":50882,"src":"16462:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50856,"name":"uint256","nodeType":"ElementaryTypeName","src":"16462:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50859,"mutability":"mutable","name":"_bytes","nameLocation":"16488:6:174","nodeType":"VariableDeclaration","scope":50882,"src":"16482:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":50858,"name":"uint8","nodeType":"ElementaryTypeName","src":"16482:5:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"16435:63:174"},"returnParameters":{"id":50863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50862,"mutability":"mutable","name":"result","nameLocation":"16530:6:174","nodeType":"VariableDeclaration","scope":50882,"src":"16522:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50861,"name":"uint256","nodeType":"ElementaryTypeName","src":"16522:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16521:16:174"},"scope":51265,"src":"16417:201:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50905,"nodeType":"Block","src":"16967:73:174","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":50898,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50885,"src":"17009:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},{"id":50899,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50887,"src":"17018:6:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50900,"name":"_bytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50889,"src":"17026:6:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":50897,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50852,"src":"17003:5:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_bytes32_$","typeString":"function (bytes29,uint256,uint8) pure returns (bytes32)"}},"id":50901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17003:30:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":50896,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16995:7:174","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":50895,"name":"uint256","nodeType":"ElementaryTypeName","src":"16995:7:174","typeDescriptions":{}}},"id":50902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16995:39:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50894,"name":"reverseUint256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50332,"src":"16980:14:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":50903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16980:55:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50893,"id":50904,"nodeType":"Return","src":"16973:62:174"}]},"documentation":{"id":50883,"nodeType":"StructuredDocumentation","src":"16622:219:174","text":" @notice          Parse an unsigned integer from LE bytes.\n @param memView   The view\n @param _index    The index\n @param _bytes    The bytes\n @return          result - The unsigned integer"},"id":50906,"implemented":true,"kind":"function","modifiers":[],"name":"indexLEUint","nameLocation":"16853:11:174","nodeType":"FunctionDefinition","parameters":{"id":50890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50885,"mutability":"mutable","name":"memView","nameLocation":"16878:7:174","nodeType":"VariableDeclaration","scope":50906,"src":"16870:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50884,"name":"bytes29","nodeType":"ElementaryTypeName","src":"16870:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":50887,"mutability":"mutable","name":"_index","nameLocation":"16899:6:174","nodeType":"VariableDeclaration","scope":50906,"src":"16891:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50886,"name":"uint256","nodeType":"ElementaryTypeName","src":"16891:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50889,"mutability":"mutable","name":"_bytes","nameLocation":"16917:6:174","nodeType":"VariableDeclaration","scope":50906,"src":"16911:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":50888,"name":"uint8","nodeType":"ElementaryTypeName","src":"16911:5:174","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"16864:63:174"},"returnParameters":{"id":50893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50892,"mutability":"mutable","name":"result","nameLocation":"16959:6:174","nodeType":"VariableDeclaration","scope":50906,"src":"16951:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50891,"name":"uint256","nodeType":"ElementaryTypeName","src":"16951:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16950:16:174"},"scope":51265,"src":"16844:196:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50928,"nodeType":"Block","src":"17400:66:174","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":50921,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50909,"src":"17439:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},{"id":50922,"name":"_index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50911,"src":"17448:6:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"3230","id":50923,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17456:2:174","typeDescriptions":{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"},"value":"20"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"}],"id":50920,"name":"indexUint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50882,"src":"17429:9:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_uint256_$_t_uint8_$returns$_t_uint256_$","typeString":"function (bytes29,uint256,uint8) pure returns (uint256)"}},"id":50924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17429:30:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50919,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17421:7:174","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":50918,"name":"uint160","nodeType":"ElementaryTypeName","src":"17421:7:174","typeDescriptions":{}}},"id":50925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17421:39:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":50917,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17413:7:174","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50916,"name":"address","nodeType":"ElementaryTypeName","src":"17413:7:174","typeDescriptions":{}}},"id":50926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17413:48:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":50915,"id":50927,"nodeType":"Return","src":"17406:55:174"}]},"documentation":{"id":50907,"nodeType":"StructuredDocumentation","src":"17044:266:174","text":" @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\n                  following that index.\n @param memView   The view\n @param _index    The index\n @return          address - The address"},"id":50929,"implemented":true,"kind":"function","modifiers":[],"name":"indexAddress","nameLocation":"17322:12:174","nodeType":"FunctionDefinition","parameters":{"id":50912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50909,"mutability":"mutable","name":"memView","nameLocation":"17343:7:174","nodeType":"VariableDeclaration","scope":50929,"src":"17335:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50908,"name":"bytes29","nodeType":"ElementaryTypeName","src":"17335:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":50911,"mutability":"mutable","name":"_index","nameLocation":"17360:6:174","nodeType":"VariableDeclaration","scope":50929,"src":"17352:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50910,"name":"uint256","nodeType":"ElementaryTypeName","src":"17352:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17334:33:174"},"returnParameters":{"id":50915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50914,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50929,"src":"17391:7:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50913,"name":"address","nodeType":"ElementaryTypeName","src":"17391:7:174","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17390:9:174"},"scope":51265,"src":"17313:153:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50950,"nodeType":"Block","src":"17733:188:174","statements":[{"assignments":[50938],"declarations":[{"constant":false,"id":50938,"mutability":"mutable","name":"_loc","nameLocation":"17747:4:174","nodeType":"VariableDeclaration","scope":50950,"src":"17739:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50937,"name":"uint256","nodeType":"ElementaryTypeName","src":"17739:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50942,"initialValue":{"arguments":[{"id":50940,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50932,"src":"17758:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50939,"name":"loc","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50615,"src":"17754:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":50941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17754:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"17739:27:174"},{"assignments":[50944],"declarations":[{"constant":false,"id":50944,"mutability":"mutable","name":"_len","nameLocation":"17780:4:174","nodeType":"VariableDeclaration","scope":50950,"src":"17772:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50943,"name":"uint256","nodeType":"ElementaryTypeName","src":"17772:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50948,"initialValue":{"arguments":[{"id":50946,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50932,"src":"17791:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50945,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50665,"src":"17787:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":50947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17787:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"17772:27:174"},{"AST":{"nodeType":"YulBlock","src":"17814:103:174","statements":[{"nodeType":"YulAssignment","src":"17880:31:174","value":{"arguments":[{"name":"_loc","nodeType":"YulIdentifier","src":"17900:4:174"},{"name":"_len","nodeType":"YulIdentifier","src":"17906:4:174"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"17890:9:174"},"nodeType":"YulFunctionCall","src":"17890:21:174"},"variableNames":[{"name":"digest","nodeType":"YulIdentifier","src":"17880:6:174"}]}]},"evmVersion":"london","externalReferences":[{"declaration":50944,"isOffset":false,"isSlot":false,"src":"17906:4:174","valueSize":1},{"declaration":50938,"isOffset":false,"isSlot":false,"src":"17900:4:174","valueSize":1},{"declaration":50935,"isOffset":false,"isSlot":false,"src":"17880:6:174","valueSize":1}],"id":50949,"nodeType":"InlineAssembly","src":"17805:112:174"}]},"documentation":{"id":50930,"nodeType":"StructuredDocumentation","src":"17470:188:174","text":" @notice          Return the keccak256 hash of the underlying memory\n @param memView   The view\n @return          digest - The keccak256 hash of the underlying memory"},"id":50951,"implemented":true,"kind":"function","modifiers":[],"name":"keccak","nameLocation":"17670:6:174","nodeType":"FunctionDefinition","parameters":{"id":50933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50932,"mutability":"mutable","name":"memView","nameLocation":"17685:7:174","nodeType":"VariableDeclaration","scope":50951,"src":"17677:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50931,"name":"bytes29","nodeType":"ElementaryTypeName","src":"17677:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"17676:17:174"},"returnParameters":{"id":50936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50935,"mutability":"mutable","name":"digest","nameLocation":"17725:6:174","nodeType":"VariableDeclaration","scope":50951,"src":"17717:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":50934,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17717:7:174","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"17716:16:174"},"scope":51265,"src":"17661:260:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":50986,"nodeType":"Block","src":"18241:103:174","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":50984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":50975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint96","typeString":"uint96"},"id":50967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":50962,"name":"left","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50954,"src":"18259:4:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50961,"name":"loc","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50615,"src":"18255:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":50963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18255:9:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":50965,"name":"right","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50956,"src":"18272:5:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50964,"name":"loc","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50615,"src":"18268:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":50966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18268:10:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"18255:23:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint96","typeString":"uint96"},"id":50974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":50969,"name":"left","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50954,"src":"18286:4:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50968,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50665,"src":"18282:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":50970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18282:9:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":50972,"name":"right","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50956,"src":"18299:5:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50971,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50665,"src":"18295:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":50973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18295:10:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"18282:23:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"18255:50:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":50976,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18254:52:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":50983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":50978,"name":"left","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50954,"src":"18317:4:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50977,"name":"keccak","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50951,"src":"18310:6:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$","typeString":"function (bytes29) pure returns (bytes32)"}},"id":50979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18310:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":50981,"name":"right","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50956,"src":"18333:5:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50980,"name":"keccak","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50951,"src":"18326:6:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$","typeString":"function (bytes29) pure returns (bytes32)"}},"id":50982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18326:13:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"18310:29:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"18254:85:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":50960,"id":50985,"nodeType":"Return","src":"18247:92:174"}]},"documentation":{"id":50952,"nodeType":"StructuredDocumentation","src":"17925:233:174","text":" @notice          Return true if the underlying memory is equal. Else false.\n @param left      The first view\n @param right     The second view\n @return          bool - True if the underlying memory is equal"},"id":50987,"implemented":true,"kind":"function","modifiers":[],"name":"untypedEqual","nameLocation":"18170:12:174","nodeType":"FunctionDefinition","parameters":{"id":50957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50954,"mutability":"mutable","name":"left","nameLocation":"18191:4:174","nodeType":"VariableDeclaration","scope":50987,"src":"18183:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50953,"name":"bytes29","nodeType":"ElementaryTypeName","src":"18183:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":50956,"mutability":"mutable","name":"right","nameLocation":"18205:5:174","nodeType":"VariableDeclaration","scope":50987,"src":"18197:13:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50955,"name":"bytes29","nodeType":"ElementaryTypeName","src":"18197:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"18182:29:174"},"returnParameters":{"id":50960,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50959,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50987,"src":"18235:4:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50958,"name":"bool","nodeType":"ElementaryTypeName","src":"18235:4:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"18234:6:174"},"scope":51265,"src":"18161:183:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":51003,"nodeType":"Block","src":"18668:44:174","statements":[{"expression":{"id":51001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"18681:26:174","subExpression":{"arguments":[{"id":50998,"name":"left","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50990,"src":"18695:4:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},{"id":50999,"name":"right","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50992,"src":"18701:5:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"},{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":50997,"name":"untypedEqual","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50987,"src":"18682:12:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_bytes29_$returns$_t_bool_$","typeString":"function (bytes29,bytes29) pure returns (bool)"}},"id":51000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18682:25:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":50996,"id":51002,"nodeType":"Return","src":"18674:33:174"}]},"documentation":{"id":50988,"nodeType":"StructuredDocumentation","src":"18348:234:174","text":" @notice          Return false if the underlying memory is equal. Else true.\n @param left      The first view\n @param right     The second view\n @return          bool - False if the underlying memory is equal"},"id":51004,"implemented":true,"kind":"function","modifiers":[],"name":"untypedNotEqual","nameLocation":"18594:15:174","nodeType":"FunctionDefinition","parameters":{"id":50993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50990,"mutability":"mutable","name":"left","nameLocation":"18618:4:174","nodeType":"VariableDeclaration","scope":51004,"src":"18610:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50989,"name":"bytes29","nodeType":"ElementaryTypeName","src":"18610:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":50992,"mutability":"mutable","name":"right","nameLocation":"18632:5:174","nodeType":"VariableDeclaration","scope":51004,"src":"18624:13:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":50991,"name":"bytes29","nodeType":"ElementaryTypeName","src":"18624:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"18609:29:174"},"returnParameters":{"id":50996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50995,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":51004,"src":"18662:4:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50994,"name":"bool","nodeType":"ElementaryTypeName","src":"18662:4:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"18661:6:174"},"scope":51265,"src":"18585:127:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":51035,"nodeType":"Block","src":"19081:99:174","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":51033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"id":51016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":51014,"name":"left","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51007,"src":"19094:4:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":51015,"name":"right","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51009,"src":"19102:5:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"src":"19094:13:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":51031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint40","typeString":"uint40"},"id":51023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":51018,"name":"left","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51007,"src":"19119:4:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":51017,"name":"typeOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50601,"src":"19112:6:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$","typeString":"function (bytes29) pure returns (uint40)"}},"id":51019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19112:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":51021,"name":"right","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51009,"src":"19135:5:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":51020,"name":"typeOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50601,"src":"19128:6:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$","typeString":"function (bytes29) pure returns (uint40)"}},"id":51022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19128:13:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"19112:29:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":51030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":51025,"name":"left","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51007,"src":"19152:4:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":51024,"name":"keccak","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50951,"src":"19145:6:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$","typeString":"function (bytes29) pure returns (bytes32)"}},"id":51026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19145:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":51028,"name":"right","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51009,"src":"19168:5:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":51027,"name":"keccak","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50951,"src":"19161:6:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$","typeString":"function (bytes29) pure returns (bytes32)"}},"id":51029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19161:13:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"19145:29:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19112:62:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":51032,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19111:64:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19094:81:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":51013,"id":51034,"nodeType":"Return","src":"19087:88:174"}]},"documentation":{"id":51005,"nodeType":"StructuredDocumentation","src":"18716:289:174","text":" @notice          Compares type equality.\n @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\n @param left      The first view\n @param right     The second view\n @return          bool - True if the types are the same"},"id":51036,"implemented":true,"kind":"function","modifiers":[],"name":"equal","nameLocation":"19017:5:174","nodeType":"FunctionDefinition","parameters":{"id":51010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51007,"mutability":"mutable","name":"left","nameLocation":"19031:4:174","nodeType":"VariableDeclaration","scope":51036,"src":"19023:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":51006,"name":"bytes29","nodeType":"ElementaryTypeName","src":"19023:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":51009,"mutability":"mutable","name":"right","nameLocation":"19045:5:174","nodeType":"VariableDeclaration","scope":51036,"src":"19037:13:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":51008,"name":"bytes29","nodeType":"ElementaryTypeName","src":"19037:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"19022:29:174"},"returnParameters":{"id":51013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51012,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":51036,"src":"19075:4:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":51011,"name":"bool","nodeType":"ElementaryTypeName","src":"19075:4:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19074:6:174"},"scope":51265,"src":"19008:172:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":51052,"nodeType":"Block","src":"19558:37:174","statements":[{"expression":{"id":51050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"19571:19:174","subExpression":{"arguments":[{"id":51047,"name":"left","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51039,"src":"19578:4:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},{"id":51048,"name":"right","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51041,"src":"19584:5:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"},{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":51046,"name":"equal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51036,"src":"19572:5:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$_t_bytes29_$returns$_t_bool_$","typeString":"function (bytes29,bytes29) pure returns (bool)"}},"id":51049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19572:18:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":51045,"id":51051,"nodeType":"Return","src":"19564:26:174"}]},"documentation":{"id":51037,"nodeType":"StructuredDocumentation","src":"19184:295:174","text":" @notice          Compares type inequality.\n @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\n @param left      The first view\n @param right     The second view\n @return          bool - True if the types are not the same"},"id":51053,"implemented":true,"kind":"function","modifiers":[],"name":"notEqual","nameLocation":"19491:8:174","nodeType":"FunctionDefinition","parameters":{"id":51042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51039,"mutability":"mutable","name":"left","nameLocation":"19508:4:174","nodeType":"VariableDeclaration","scope":51053,"src":"19500:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":51038,"name":"bytes29","nodeType":"ElementaryTypeName","src":"19500:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":51041,"mutability":"mutable","name":"right","nameLocation":"19522:5:174","nodeType":"VariableDeclaration","scope":51053,"src":"19514:13:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":51040,"name":"bytes29","nodeType":"ElementaryTypeName","src":"19514:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"19499:29:174"},"returnParameters":{"id":51045,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51044,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":51053,"src":"19552:4:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":51043,"name":"bool","nodeType":"ElementaryTypeName","src":"19552:4:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19551:6:174"},"scope":51265,"src":"19482:113:174","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":51112,"nodeType":"Block","src":"20228:798:174","statements":[{"condition":{"arguments":[{"id":51064,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51056,"src":"20245:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":51063,"name":"isNull","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50364,"src":"20238:6:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bool_$","typeString":"function (bytes29) pure returns (bool)"}},"id":51065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20238:15:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":51069,"nodeType":"IfStatement","src":"20234:68:174","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":51066,"name":"TypedMemView__unsafeCopyTo_nullPointer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50229,"src":"20262:38:174","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":51067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20262:40:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51068,"nodeType":"RevertStatement","src":"20255:47:174"}},{"condition":{"arguments":[{"id":51071,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51056,"src":"20323:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":51070,"name":"isNotValid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50403,"src":"20312:10:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bool_$","typeString":"function (bytes29) pure returns (bool)"}},"id":51072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20312:19:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":51076,"nodeType":"IfStatement","src":"20308:75:174","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":51073,"name":"TypedMemView__unsafeCopyTo_invalidPointer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50231,"src":"20340:41:174","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":51074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20340:43:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51075,"nodeType":"RevertStatement","src":"20333:50:174"}},{"assignments":[51078],"declarations":[{"constant":false,"id":51078,"mutability":"mutable","name":"_len","nameLocation":"20398:4:174","nodeType":"VariableDeclaration","scope":51112,"src":"20390:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51077,"name":"uint256","nodeType":"ElementaryTypeName","src":"20390:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":51082,"initialValue":{"arguments":[{"id":51080,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51056,"src":"20409:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":51079,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50665,"src":"20405:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":51081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20405:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"20390:27:174"},{"assignments":[51084],"declarations":[{"constant":false,"id":51084,"mutability":"mutable","name":"_oldLoc","nameLocation":"20431:7:174","nodeType":"VariableDeclaration","scope":51112,"src":"20423:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51083,"name":"uint256","nodeType":"ElementaryTypeName","src":"20423:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":51088,"initialValue":{"arguments":[{"id":51086,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51056,"src":"20445:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":51085,"name":"loc","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50615,"src":"20441:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":51087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20441:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"20423:30:174"},{"assignments":[51090],"declarations":[{"constant":false,"id":51090,"mutability":"mutable","name":"ptr","nameLocation":"20468:3:174","nodeType":"VariableDeclaration","scope":51112,"src":"20460:11:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51089,"name":"uint256","nodeType":"ElementaryTypeName","src":"20460:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":51091,"nodeType":"VariableDeclarationStatement","src":"20460:11:174"},{"assignments":[51093],"declarations":[{"constant":false,"id":51093,"mutability":"mutable","name":"res","nameLocation":"20482:3:174","nodeType":"VariableDeclaration","scope":51112,"src":"20477:8:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":51092,"name":"bool","nodeType":"ElementaryTypeName","src":"20477:4:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":51094,"nodeType":"VariableDeclarationStatement","src":"20477:8:174"},{"AST":{"nodeType":"YulBlock","src":"20500:391:174","statements":[{"nodeType":"YulAssignment","src":"20566:18:174","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20579:4:174","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"20573:5:174"},"nodeType":"YulFunctionCall","src":"20573:11:174"},"variableNames":[{"name":"ptr","nodeType":"YulIdentifier","src":"20566:3:174"}]},{"body":{"nodeType":"YulBlock","src":"20663:60:174","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20680:4:174","type":"","value":"0x60"},{"kind":"number","nodeType":"YulLiteral","src":"20686:4:174","type":"","value":"0x20"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20673:6:174"},"nodeType":"YulFunctionCall","src":"20673:18:174"},"nodeType":"YulExpressionStatement","src":"20673:18:174"}]},"condition":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"20649:3:174"},{"name":"_newLoc","nodeType":"YulIdentifier","src":"20654:7:174"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20646:2:174"},"nodeType":"YulFunctionCall","src":"20646:16:174"},"nodeType":"YulIf","src":"20643:80:174"},{"nodeType":"YulAssignment","src":"20828:57:174","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"20846:3:174"},"nodeType":"YulFunctionCall","src":"20846:5:174"},{"kind":"number","nodeType":"YulLiteral","src":"20853:1:174","type":"","value":"4"},{"name":"_oldLoc","nodeType":"YulIdentifier","src":"20856:7:174"},{"name":"_len","nodeType":"YulIdentifier","src":"20865:4:174"},{"name":"_newLoc","nodeType":"YulIdentifier","src":"20871:7:174"},{"name":"_len","nodeType":"YulIdentifier","src":"20880:4:174"}],"functionName":{"name":"staticcall","nodeType":"YulIdentifier","src":"20835:10:174"},"nodeType":"YulFunctionCall","src":"20835:50:174"},"variableNames":[{"name":"res","nodeType":"YulIdentifier","src":"20828:3:174"}]}]},"evmVersion":"london","externalReferences":[{"declaration":51078,"isOffset":false,"isSlot":false,"src":"20865:4:174","valueSize":1},{"declaration":51078,"isOffset":false,"isSlot":false,"src":"20880:4:174","valueSize":1},{"declaration":51058,"isOffset":false,"isSlot":false,"src":"20654:7:174","valueSize":1},{"declaration":51058,"isOffset":false,"isSlot":false,"src":"20871:7:174","valueSize":1},{"declaration":51084,"isOffset":false,"isSlot":false,"src":"20856:7:174","valueSize":1},{"declaration":51090,"isOffset":false,"isSlot":false,"src":"20566:3:174","valueSize":1},{"declaration":51090,"isOffset":false,"isSlot":false,"src":"20649:3:174","valueSize":1},{"declaration":51093,"isOffset":false,"isSlot":false,"src":"20828:3:174","valueSize":1}],"id":51095,"nodeType":"InlineAssembly","src":"20491:400:174"},{"condition":{"id":51097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"20900:4:174","subExpression":{"id":51096,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51093,"src":"20901:3:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":51101,"nodeType":"IfStatement","src":"20896:57:174","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":51098,"name":"TypedMemView__unsafeCopyTo_identityOOG","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50233,"src":"20913:38:174","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":51099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20913:40:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51100,"nodeType":"RevertStatement","src":"20906:47:174"}},{"expression":{"id":51110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51102,"name":"written","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51061,"src":"20959:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":51105,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51056,"src":"20997:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":51104,"name":"typeOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50601,"src":"20990:6:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint40_$","typeString":"function (bytes29) pure returns (uint40)"}},"id":51106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20990:15:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},{"id":51107,"name":"_newLoc","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51058,"src":"21007:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":51108,"name":"_len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51078,"src":"21016:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":51103,"name":"unsafeBuildUnchecked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50530,"src":"20969:20:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes29_$","typeString":"function (uint256,uint256,uint256) pure returns (bytes29)"}},"id":51109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20969:52:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"src":"20959:62:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":51111,"nodeType":"ExpressionStatement","src":"20959:62:174"}]},"documentation":{"id":51054,"nodeType":"StructuredDocumentation","src":"19599:531:174","text":" @notice          Copy the view to a location, return an unsafe memory reference\n @dev             Super Dangerous direct memory access.\n                  This reference can be overwritten if anything else modifies memory (!!!).\n                  As such it MUST be consumed IMMEDIATELY.\n                  This function is private to prevent unsafe usage by callers.\n @param memView   The view\n @param _newLoc   The new location\n @return          written - the unsafe memory reference"},"id":51113,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeCopyTo","nameLocation":"20142:12:174","nodeType":"FunctionDefinition","parameters":{"id":51059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51056,"mutability":"mutable","name":"memView","nameLocation":"20163:7:174","nodeType":"VariableDeclaration","scope":51113,"src":"20155:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":51055,"name":"bytes29","nodeType":"ElementaryTypeName","src":"20155:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"},{"constant":false,"id":51058,"mutability":"mutable","name":"_newLoc","nameLocation":"20180:7:174","nodeType":"VariableDeclaration","scope":51113,"src":"20172:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51057,"name":"uint256","nodeType":"ElementaryTypeName","src":"20172:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20154:34:174"},"returnParameters":{"id":51062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51061,"mutability":"mutable","name":"written","nameLocation":"20219:7:174","nodeType":"VariableDeclaration","scope":51113,"src":"20211:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":51060,"name":"bytes29","nodeType":"ElementaryTypeName","src":"20211:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"20210:17:174"},"scope":51265,"src":"20133:893:174","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":51140,"nodeType":"Block","src":"21453:483:174","statements":[{"assignments":[51122],"declarations":[{"constant":false,"id":51122,"mutability":"mutable","name":"ptr","nameLocation":"21467:3:174","nodeType":"VariableDeclaration","scope":51140,"src":"21459:11:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51121,"name":"uint256","nodeType":"ElementaryTypeName","src":"21459:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":51123,"nodeType":"VariableDeclarationStatement","src":"21459:11:174"},{"assignments":[51125],"declarations":[{"constant":false,"id":51125,"mutability":"mutable","name":"_len","nameLocation":"21484:4:174","nodeType":"VariableDeclaration","scope":51140,"src":"21476:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51124,"name":"uint256","nodeType":"ElementaryTypeName","src":"21476:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":51129,"initialValue":{"arguments":[{"id":51127,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51116,"src":"21495:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":51126,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50665,"src":"21491:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":51128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21491:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"21476:27:174"},{"AST":{"nodeType":"YulBlock","src":"21518:137:174","statements":[{"nodeType":"YulAssignment","src":"21584:18:174","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21597:4:174","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"21591:5:174"},"nodeType":"YulFunctionCall","src":"21591:11:174"},"variableNames":[{"name":"ptr","nodeType":"YulIdentifier","src":"21584:3:174"}]},{"nodeType":"YulAssignment","src":"21639:10:174","value":{"name":"ptr","nodeType":"YulIdentifier","src":"21646:3:174"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"21639:3:174"}]}]},"evmVersion":"london","externalReferences":[{"declaration":51122,"isOffset":false,"isSlot":false,"src":"21584:3:174","valueSize":1},{"declaration":51122,"isOffset":false,"isSlot":false,"src":"21646:3:174","valueSize":1},{"declaration":51119,"isOffset":false,"isSlot":false,"src":"21639:3:174","valueSize":1}],"id":51130,"nodeType":"InlineAssembly","src":"21509:146:174"},{"id":51138,"nodeType":"UncheckedBlock","src":"21660:58:174","statements":[{"expression":{"arguments":[{"id":51132,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51116,"src":"21691:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":51135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":51133,"name":"ptr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51122,"src":"21700:3:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783230","id":51134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21706:4:174","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"21700:10:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":51131,"name":"unsafeCopyTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51113,"src":"21678:12:174","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes29_$_t_uint256_$returns$_t_bytes29_$","typeString":"function (bytes29,uint256) view returns (bytes29)"}},"id":51136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21678:33:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":51137,"nodeType":"ExpressionStatement","src":"21678:33:174"}]},{"AST":{"nodeType":"YulBlock","src":"21732:200:174","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21805:4:174","type":"","value":"0x40"},{"arguments":[{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"21819:3:174"},{"name":"_len","nodeType":"YulIdentifier","src":"21824:4:174"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21815:3:174"},"nodeType":"YulFunctionCall","src":"21815:14:174"},{"kind":"number","nodeType":"YulLiteral","src":"21831:4:174","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21811:3:174"},"nodeType":"YulFunctionCall","src":"21811:25:174"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21798:6:174"},"nodeType":"YulFunctionCall","src":"21798:39:174"},"nodeType":"YulExpressionStatement","src":"21798:39:174"},{"expression":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"21879:3:174"},{"name":"_len","nodeType":"YulIdentifier","src":"21884:4:174"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21872:6:174"},"nodeType":"YulFunctionCall","src":"21872:17:174"},"nodeType":"YulExpressionStatement","src":"21872:17:174"}]},"evmVersion":"london","externalReferences":[{"declaration":51125,"isOffset":false,"isSlot":false,"src":"21824:4:174","valueSize":1},{"declaration":51125,"isOffset":false,"isSlot":false,"src":"21884:4:174","valueSize":1},{"declaration":51122,"isOffset":false,"isSlot":false,"src":"21819:3:174","valueSize":1},{"declaration":51122,"isOffset":false,"isSlot":false,"src":"21879:3:174","valueSize":1}],"id":51139,"nodeType":"InlineAssembly","src":"21723:209:174"}]},"documentation":{"id":51114,"nodeType":"StructuredDocumentation","src":"21030:347:174","text":" @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\n                  the new memory\n @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\n @param memView   The view\n @return          ret - The view pointing to the new memory"},"id":51141,"implemented":true,"kind":"function","modifiers":[],"name":"clone","nameLocation":"21389:5:174","nodeType":"FunctionDefinition","parameters":{"id":51117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51116,"mutability":"mutable","name":"memView","nameLocation":"21403:7:174","nodeType":"VariableDeclaration","scope":51141,"src":"21395:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":51115,"name":"bytes29","nodeType":"ElementaryTypeName","src":"21395:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"21394:17:174"},"returnParameters":{"id":51120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51119,"mutability":"mutable","name":"ret","nameLocation":"21448:3:174","nodeType":"VariableDeclaration","scope":51141,"src":"21435:16:174","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":51118,"name":"bytes","nodeType":"ElementaryTypeName","src":"21435:5:174","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21434:18:174"},"scope":51265,"src":"21380:556:174","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":51202,"nodeType":"Block","src":"22570:583:174","statements":[{"AST":{"nodeType":"YulBlock","src":"22585:235:174","statements":[{"nodeType":"YulVariableDeclaration","src":"22651:22:174","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22668:4:174","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"22662:5:174"},"nodeType":"YulFunctionCall","src":"22662:11:174"},"variables":[{"name":"ptr","nodeType":"YulTypedName","src":"22655:3:174","type":""}]},{"body":{"nodeType":"YulBlock","src":"22754:60:174","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22771:4:174","type":"","value":"0x60"},{"kind":"number","nodeType":"YulLiteral","src":"22777:4:174","type":"","value":"0x20"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22764:6:174"},"nodeType":"YulFunctionCall","src":"22764:18:174"},"nodeType":"YulExpressionStatement","src":"22764:18:174"}]},"condition":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"22738:3:174"},{"name":"_location","nodeType":"YulIdentifier","src":"22743:9:174"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"22735:2:174"},"nodeType":"YulFunctionCall","src":"22735:18:174"},"nodeType":"YulIf","src":"22732:82:174"}]},"evmVersion":"london","externalReferences":[{"declaration":51147,"isOffset":false,"isSlot":false,"src":"22743:9:174","valueSize":1}],"id":51152,"nodeType":"InlineAssembly","src":"22576:244:174"},{"assignments":[51154],"declarations":[{"constant":false,"id":51154,"mutability":"mutable","name":"_offset","nameLocation":"22834:7:174","nodeType":"VariableDeclaration","scope":51202,"src":"22826:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51153,"name":"uint256","nodeType":"ElementaryTypeName","src":"22826:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":51156,"initialValue":{"hexValue":"30","id":51155,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22844:1:174","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"22826:19:174"},{"assignments":[51158],"declarations":[{"constant":false,"id":51158,"mutability":"mutable","name":"_len","nameLocation":"22859:4:174","nodeType":"VariableDeclaration","scope":51202,"src":"22851:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51157,"name":"uint256","nodeType":"ElementaryTypeName","src":"22851:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":51161,"initialValue":{"expression":{"id":51159,"name":"memViews","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51145,"src":"22866:8:174","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes29_$dyn_memory_ptr","typeString":"bytes29[] memory"}},"id":51160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22875:6:174","memberName":"length","nodeType":"MemberAccess","src":"22866:15:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22851:30:174"},{"body":{"id":51192,"nodeType":"Block","src":"22919:168:174","statements":[{"assignments":[51170],"declarations":[{"constant":false,"id":51170,"mutability":"mutable","name":"memView","nameLocation":"22935:7:174","nodeType":"VariableDeclaration","scope":51192,"src":"22927:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":51169,"name":"bytes29","nodeType":"ElementaryTypeName","src":"22927:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"id":51174,"initialValue":{"baseExpression":{"id":51171,"name":"memViews","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51145,"src":"22945:8:174","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes29_$dyn_memory_ptr","typeString":"bytes29[] memory"}},"id":51173,"indexExpression":{"id":51172,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51163,"src":"22954:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22945:11:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"nodeType":"VariableDeclarationStatement","src":"22927:29:174"},{"id":51191,"nodeType":"UncheckedBlock","src":"22964:117:174","statements":[{"expression":{"arguments":[{"id":51176,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51170,"src":"22997:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":51179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":51177,"name":"_location","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51147,"src":"23006:9:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":51178,"name":"_offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51154,"src":"23018:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23006:19:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":51175,"name":"unsafeCopyTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51113,"src":"22984:12:174","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes29_$_t_uint256_$returns$_t_bytes29_$","typeString":"function (bytes29,uint256) view returns (bytes29)"}},"id":51180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22984:42:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":51181,"nodeType":"ExpressionStatement","src":"22984:42:174"},{"expression":{"id":51186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51182,"name":"_offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51154,"src":"23036:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":51184,"name":"memView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51170,"src":"23051:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":51183,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50665,"src":"23047:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":51185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23047:12:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"23036:23:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":51187,"nodeType":"ExpressionStatement","src":"23036:23:174"},{"expression":{"id":51189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"23069:3:174","subExpression":{"id":51188,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51163,"src":"23071:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":51190,"nodeType":"ExpressionStatement","src":"23069:3:174"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":51168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":51166,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51163,"src":"22907:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":51167,"name":"_len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51158,"src":"22911:4:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22907:8:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":51193,"initializationExpression":{"assignments":[51163],"declarations":[{"constant":false,"id":51163,"mutability":"mutable","name":"i","nameLocation":"22900:1:174","nodeType":"VariableDeclaration","scope":51193,"src":"22892:9:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51162,"name":"uint256","nodeType":"ElementaryTypeName","src":"22892:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":51165,"initialValue":{"hexValue":"30","id":51164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22904:1:174","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"22892:13:174"},"nodeType":"ForStatement","src":"22887:200:174"},{"expression":{"id":51200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51194,"name":"unsafeView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51150,"src":"23092:10:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":51196,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23126:1:174","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":51197,"name":"_location","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51147,"src":"23129:9:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":51198,"name":"_offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51154,"src":"23140:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":51195,"name":"unsafeBuildUnchecked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50530,"src":"23105:20:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes29_$","typeString":"function (uint256,uint256,uint256) pure returns (bytes29)"}},"id":51199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23105:43:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"src":"23092:56:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":51201,"nodeType":"ExpressionStatement","src":"23092:56:174"}]},"documentation":{"id":51142,"nodeType":"StructuredDocumentation","src":"21940:519:174","text":" @notice          Join the views in memory, return an unsafe reference to the memory.\n @dev             Super Dangerous direct memory access.\n                  This reference can be overwritten if anything else modifies memory (!!!).\n                  As such it MUST be consumed IMMEDIATELY.\n                  This function is private to prevent unsafe usage by callers.\n @param memViews  The views\n @return          unsafeView - The conjoined view pointing to the new memory"},"id":51203,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeJoin","nameLocation":"22471:10:174","nodeType":"FunctionDefinition","parameters":{"id":51148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51145,"mutability":"mutable","name":"memViews","nameLocation":"22499:8:174","nodeType":"VariableDeclaration","scope":51203,"src":"22482:25:174","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes29_$dyn_memory_ptr","typeString":"bytes29[]"},"typeName":{"baseType":{"id":51143,"name":"bytes29","nodeType":"ElementaryTypeName","src":"22482:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":51144,"nodeType":"ArrayTypeName","src":"22482:9:174","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes29_$dyn_storage_ptr","typeString":"bytes29[]"}},"visibility":"internal"},{"constant":false,"id":51147,"mutability":"mutable","name":"_location","nameLocation":"22517:9:174","nodeType":"VariableDeclaration","scope":51203,"src":"22509:17:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51146,"name":"uint256","nodeType":"ElementaryTypeName","src":"22509:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22481:46:174"},"returnParameters":{"id":51151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51150,"mutability":"mutable","name":"unsafeView","nameLocation":"22558:10:174","nodeType":"VariableDeclaration","scope":51203,"src":"22550:18:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":51149,"name":"bytes29","nodeType":"ElementaryTypeName","src":"22550:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"src":"22549:20:174"},"scope":51265,"src":"22462:691:174","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":51223,"nodeType":"Block","src":"23432:202:174","statements":[{"assignments":[51213],"declarations":[{"constant":false,"id":51213,"mutability":"mutable","name":"ptr","nameLocation":"23446:3:174","nodeType":"VariableDeclaration","scope":51223,"src":"23438:11:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51212,"name":"uint256","nodeType":"ElementaryTypeName","src":"23438:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":51214,"nodeType":"VariableDeclarationStatement","src":"23438:11:174"},{"AST":{"nodeType":"YulBlock","src":"23464:120:174","statements":[{"nodeType":"YulAssignment","src":"23530:18:174","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23543:4:174","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"23537:5:174"},"nodeType":"YulFunctionCall","src":"23537:11:174"},"variableNames":[{"name":"ptr","nodeType":"YulIdentifier","src":"23530:3:174"}]}]},"evmVersion":"london","externalReferences":[{"declaration":51213,"isOffset":false,"isSlot":false,"src":"23530:3:174","valueSize":1}],"id":51215,"nodeType":"InlineAssembly","src":"23455:129:174"},{"expression":{"arguments":[{"arguments":[{"id":51218,"name":"memViews","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51207,"src":"23614:8:174","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes29_$dyn_memory_ptr","typeString":"bytes29[] memory"}},{"id":51219,"name":"ptr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51213,"src":"23624:3:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes29_$dyn_memory_ptr","typeString":"bytes29[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":51217,"name":"unsafeJoin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51203,"src":"23603:10:174","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_bytes29_$dyn_memory_ptr_$_t_uint256_$returns$_t_bytes29_$","typeString":"function (bytes29[] memory,uint256) view returns (bytes29)"}},"id":51220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23603:25:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":51216,"name":"keccak","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50951,"src":"23596:6:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$","typeString":"function (bytes29) pure returns (bytes32)"}},"id":51221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23596:33:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":51211,"id":51222,"nodeType":"Return","src":"23589:40:174"}]},"documentation":{"id":51204,"nodeType":"StructuredDocumentation","src":"23157:193:174","text":" @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\n @param memViews  The views\n @return          bytes32 - The keccak256 digest"},"id":51224,"implemented":true,"kind":"function","modifiers":[],"name":"joinKeccak","nameLocation":"23362:10:174","nodeType":"FunctionDefinition","parameters":{"id":51208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51207,"mutability":"mutable","name":"memViews","nameLocation":"23390:8:174","nodeType":"VariableDeclaration","scope":51224,"src":"23373:25:174","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes29_$dyn_memory_ptr","typeString":"bytes29[]"},"typeName":{"baseType":{"id":51205,"name":"bytes29","nodeType":"ElementaryTypeName","src":"23373:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":51206,"nodeType":"ArrayTypeName","src":"23373:9:174","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes29_$dyn_storage_ptr","typeString":"bytes29[]"}},"visibility":"internal"}],"src":"23372:27:174"},"returnParameters":{"id":51211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51210,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":51224,"src":"23423:7:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":51209,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23423:7:174","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"23422:9:174"},"scope":51265,"src":"23353:281:174","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":51263,"nodeType":"Block","src":"23884:602:174","statements":[{"assignments":[51234],"declarations":[{"constant":false,"id":51234,"mutability":"mutable","name":"ptr","nameLocation":"23898:3:174","nodeType":"VariableDeclaration","scope":51263,"src":"23890:11:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51233,"name":"uint256","nodeType":"ElementaryTypeName","src":"23890:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":51235,"nodeType":"VariableDeclarationStatement","src":"23890:11:174"},{"AST":{"nodeType":"YulBlock","src":"23916:120:174","statements":[{"nodeType":"YulAssignment","src":"23982:18:174","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23995:4:174","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"23989:5:174"},"nodeType":"YulFunctionCall","src":"23989:11:174"},"variableNames":[{"name":"ptr","nodeType":"YulIdentifier","src":"23982:3:174"}]}]},"evmVersion":"london","externalReferences":[{"declaration":51234,"isOffset":false,"isSlot":false,"src":"23982:3:174","valueSize":1}],"id":51236,"nodeType":"InlineAssembly","src":"23907:129:174"},{"assignments":[51238],"declarations":[{"constant":false,"id":51238,"mutability":"mutable","name":"_newView","nameLocation":"24050:8:174","nodeType":"VariableDeclaration","scope":51263,"src":"24042:16:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"},"typeName":{"id":51237,"name":"bytes29","nodeType":"ElementaryTypeName","src":"24042:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"visibility":"internal"}],"id":51239,"nodeType":"VariableDeclarationStatement","src":"24042:16:174"},{"id":51249,"nodeType":"UncheckedBlock","src":"24064:68:174","statements":[{"expression":{"id":51247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51240,"name":"_newView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51238,"src":"24082:8:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":51242,"name":"memViews","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51228,"src":"24104:8:174","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes29_$dyn_memory_ptr","typeString":"bytes29[] memory"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":51245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":51243,"name":"ptr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51234,"src":"24114:3:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783230","id":51244,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24120:4:174","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"24114:10:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes29_$dyn_memory_ptr","typeString":"bytes29[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":51241,"name":"unsafeJoin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51203,"src":"24093:10:174","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_bytes29_$dyn_memory_ptr_$_t_uint256_$returns$_t_bytes29_$","typeString":"function (bytes29[] memory,uint256) view returns (bytes29)"}},"id":51246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24093:32:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"src":"24082:43:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":51248,"nodeType":"ExpressionStatement","src":"24082:43:174"}]},{"assignments":[51251],"declarations":[{"constant":false,"id":51251,"mutability":"mutable","name":"_written","nameLocation":"24145:8:174","nodeType":"VariableDeclaration","scope":51263,"src":"24137:16:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51250,"name":"uint256","nodeType":"ElementaryTypeName","src":"24137:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":51255,"initialValue":{"arguments":[{"id":51253,"name":"_newView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51238,"src":"24160:8:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":51252,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50665,"src":"24156:3:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint96_$","typeString":"function (bytes29) pure returns (uint96)"}},"id":51254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24156:13:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"24137:32:174"},{"assignments":[51257],"declarations":[{"constant":false,"id":51257,"mutability":"mutable","name":"_footprint","nameLocation":"24183:10:174","nodeType":"VariableDeclaration","scope":51263,"src":"24175:18:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51256,"name":"uint256","nodeType":"ElementaryTypeName","src":"24175:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":51261,"initialValue":{"arguments":[{"id":51259,"name":"_newView","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51238,"src":"24206:8:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes29","typeString":"bytes29"}],"id":51258,"name":"footprint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50651,"src":"24196:9:174","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes29_$returns$_t_uint256_$","typeString":"function (bytes29) pure returns (uint256)"}},"id":51260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24196:19:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"24175:40:174"},{"AST":{"nodeType":"YulBlock","src":"24231:251:174","statements":[{"expression":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"24330:3:174"},{"name":"_written","nodeType":"YulIdentifier","src":"24335:8:174"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24323:6:174"},"nodeType":"YulFunctionCall","src":"24323:21:174"},"nodeType":"YulExpressionStatement","src":"24323:21:174"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24421:4:174","type":"","value":"0x40"},{"arguments":[{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"24435:3:174"},{"name":"_footprint","nodeType":"YulIdentifier","src":"24440:10:174"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24431:3:174"},"nodeType":"YulFunctionCall","src":"24431:20:174"},{"kind":"number","nodeType":"YulLiteral","src":"24453:4:174","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24427:3:174"},"nodeType":"YulFunctionCall","src":"24427:31:174"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24414:6:174"},"nodeType":"YulFunctionCall","src":"24414:45:174"},"nodeType":"YulExpressionStatement","src":"24414:45:174"},{"nodeType":"YulAssignment","src":"24466:10:174","value":{"name":"ptr","nodeType":"YulIdentifier","src":"24473:3:174"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"24466:3:174"}]}]},"evmVersion":"london","externalReferences":[{"declaration":51257,"isOffset":false,"isSlot":false,"src":"24440:10:174","valueSize":1},{"declaration":51251,"isOffset":false,"isSlot":false,"src":"24335:8:174","valueSize":1},{"declaration":51234,"isOffset":false,"isSlot":false,"src":"24330:3:174","valueSize":1},{"declaration":51234,"isOffset":false,"isSlot":false,"src":"24435:3:174","valueSize":1},{"declaration":51234,"isOffset":false,"isSlot":false,"src":"24473:3:174","valueSize":1},{"declaration":51231,"isOffset":false,"isSlot":false,"src":"24466:3:174","valueSize":1}],"id":51262,"nodeType":"InlineAssembly","src":"24222:260:174"}]},"documentation":{"id":51225,"nodeType":"StructuredDocumentation","src":"23638:161:174","text":" @notice          copies all views, joins them into a new bytearray.\n @param memViews  The views\n @return          ret - The new byte array"},"id":51264,"implemented":true,"kind":"function","modifiers":[],"name":"join","nameLocation":"23811:4:174","nodeType":"FunctionDefinition","parameters":{"id":51229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51228,"mutability":"mutable","name":"memViews","nameLocation":"23833:8:174","nodeType":"VariableDeclaration","scope":51264,"src":"23816:25:174","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes29_$dyn_memory_ptr","typeString":"bytes29[]"},"typeName":{"baseType":{"id":51226,"name":"bytes29","nodeType":"ElementaryTypeName","src":"23816:7:174","typeDescriptions":{"typeIdentifier":"t_bytes29","typeString":"bytes29"}},"id":51227,"nodeType":"ArrayTypeName","src":"23816:9:174","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes29_$dyn_storage_ptr","typeString":"bytes29[]"}},"visibility":"internal"}],"src":"23815:27:174"},"returnParameters":{"id":51232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51231,"mutability":"mutable","name":"ret","nameLocation":"23879:3:174","nodeType":"VariableDeclaration","scope":51264,"src":"23866:16:174","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":51230,"name":"bytes","nodeType":"ElementaryTypeName","src":"23866:5:174","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"23865:18:174"},"scope":51265,"src":"23802:684:174","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":51266,"src":"71:24417:174","usedErrors":[50215,50225,50227,50229,50231,50233,50235]}],"src":"46:24443:174"},"id":174},"contracts/shared/upgrade/UpgradeBeacon.sol":{"ast":{"absolutePath":"contracts/shared/upgrade/UpgradeBeacon.sol","exportedSymbols":{"Address":[11484],"UpgradeBeacon":[51347]},"id":51348,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":51267,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:175"},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":51269,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":51348,"sourceUnit":11485,"src":"117:66:175","symbolAliases":[{"foreign":{"id":51268,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"125:7:175","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"UpgradeBeacon","contractDependencies":[],"contractKind":"contract","documentation":{"id":51270,"nodeType":"StructuredDocumentation","src":"185:705:175","text":" @title UpgradeBeacon\n @notice Stores the address of an implementation contract\n and allows a controller to upgrade the implementation address\n @dev This implementation combines the gas savings of having no function selectors\n found in 0age's implementation:\n https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol\n With the added niceties of a safety check that each implementation is a contract\n and an Upgrade event emitted each time the implementation is changed\n found in OpenZeppelin's implementation:\n https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol"},"fullyImplemented":true,"id":51347,"linearizedBaseContracts":[51347],"name":"UpgradeBeacon","nameLocation":"900:13:175","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":51272,"mutability":"immutable","name":"controller","nameLocation":"1058:10:175","nodeType":"VariableDeclaration","scope":51347,"src":"1032:36:175","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51271,"name":"address","nodeType":"ElementaryTypeName","src":"1032:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":51274,"mutability":"mutable","name":"implementation","nameLocation":"1209:14:175","nodeType":"VariableDeclaration","scope":51347,"src":"1193:30:175","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51273,"name":"address","nodeType":"ElementaryTypeName","src":"1193:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"eventSelector":"f78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d","id":51278,"name":"Upgrade","nameLocation":"1375:7:175","nodeType":"EventDefinition","parameters":{"id":51277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51276,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"1399:14:175","nodeType":"VariableDeclaration","scope":51278,"src":"1383:30:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51275,"name":"address","nodeType":"ElementaryTypeName","src":"1383:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1382:32:175"},"src":"1369:46:175"},{"body":{"id":51294,"nodeType":"Block","src":"1815:83:175","statements":[{"expression":{"arguments":[{"id":51287,"name":"_initialImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51281,"src":"1840:22:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":51286,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51346,"src":"1821:18:175","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":51288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1821:42:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51289,"nodeType":"ExpressionStatement","src":"1821:42:175"},{"expression":{"id":51292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51290,"name":"controller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51272,"src":"1869:10:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":51291,"name":"_controller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51283,"src":"1882:11:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1869:24:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":51293,"nodeType":"ExpressionStatement","src":"1869:24:175"}]},"documentation":{"id":51279,"nodeType":"StructuredDocumentation","src":"1463:276:175","text":" @notice Validate the initial implementation and store it.\n Store the controller immutably.\n @param _initialImplementation Address of the initial implementation contract\n @param _controller Address of the controller who can upgrade the implementation"},"id":51295,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":51284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51281,"mutability":"mutable","name":"_initialImplementation","nameLocation":"1762:22:175","nodeType":"VariableDeclaration","scope":51295,"src":"1754:30:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51280,"name":"address","nodeType":"ElementaryTypeName","src":"1754:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":51283,"mutability":"mutable","name":"_controller","nameLocation":"1794:11:175","nodeType":"VariableDeclaration","scope":51295,"src":"1786:19:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51282,"name":"address","nodeType":"ElementaryTypeName","src":"1786:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1753:53:175"},"returnParameters":{"id":51285,"nodeType":"ParameterList","parameters":[],"src":"1815:0:175"},"scope":51347,"src":"1742:156:175","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":51315,"nodeType":"Block","src":"2331:563:175","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":51302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":51299,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2341:3:175","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":51300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2345:6:175","memberName":"sender","nodeType":"MemberAccess","src":"2341:10:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":51301,"name":"controller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51272,"src":"2355:10:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2341:24:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":51313,"nodeType":"Block","src":"2581:309:175","statements":[{"assignments":[51306],"declarations":[{"constant":false,"id":51306,"mutability":"mutable","name":"_newImplementation","nameLocation":"2712:18:175","nodeType":"VariableDeclaration","scope":51313,"src":"2704:26:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51305,"name":"address","nodeType":"ElementaryTypeName","src":"2704:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":51307,"nodeType":"VariableDeclarationStatement","src":"2704:26:175"},{"AST":{"nodeType":"YulBlock","src":"2747:55:175","statements":[{"nodeType":"YulAssignment","src":"2757:37:175","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2792:1:175","type":"","value":"0"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2779:12:175"},"nodeType":"YulFunctionCall","src":"2779:15:175"},"variableNames":[{"name":"_newImplementation","nodeType":"YulIdentifier","src":"2757:18:175"}]}]},"evmVersion":"london","externalReferences":[{"declaration":51306,"isOffset":false,"isSlot":false,"src":"2757:18:175","valueSize":1}],"id":51308,"nodeType":"InlineAssembly","src":"2738:64:175"},{"expression":{"arguments":[{"id":51310,"name":"_newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51306,"src":"2864:18:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":51309,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51346,"src":"2845:18:175","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":51311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2845:38:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51312,"nodeType":"ExpressionStatement","src":"2845:38:175"}]},"id":51314,"nodeType":"IfStatement","src":"2337:553:175","trueBody":{"id":51304,"nodeType":"Block","src":"2367:208:175","statements":[{"AST":{"nodeType":"YulBlock","src":"2510:59:175","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2527:1:175","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2536:1:175","type":"","value":"0"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"2530:5:175"},"nodeType":"YulFunctionCall","src":"2530:8:175"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2520:6:175"},"nodeType":"YulFunctionCall","src":"2520:19:175"},"nodeType":"YulExpressionStatement","src":"2520:19:175"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2555:1:175","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2558:2:175","type":"","value":"32"}],"functionName":{"name":"return","nodeType":"YulIdentifier","src":"2548:6:175"},"nodeType":"YulFunctionCall","src":"2548:13:175"},"nodeType":"YulExpressionStatement","src":"2548:13:175"}]},"evmVersion":"london","externalReferences":[],"id":51303,"nodeType":"InlineAssembly","src":"2501:68:175"}]}}]},"documentation":{"id":51296,"nodeType":"StructuredDocumentation","src":"1953:347:175","text":" @notice For all callers except the controller, return the current implementation address.\n If called by the Controller, update the implementation address\n to the address passed in the calldata.\n Note: this requires inline assembly because Solidity fallback functions\n do not natively take arguments or return values."},"id":51316,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":51297,"nodeType":"ParameterList","parameters":[],"src":"2311:2:175"},"returnParameters":{"id":51298,"nodeType":"ParameterList","parameters":[],"src":"2331:0:175"},"scope":51347,"src":"2303:591:175","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":51345,"nodeType":"Block","src":"3236:396:175","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":51325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":51323,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51274,"src":"3327:14:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":51324,"name":"_newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51319,"src":"3345:18:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3327:36:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"2175706772616465","id":51326,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3365:10:175","typeDescriptions":{"typeIdentifier":"t_stringliteral_46c85c57ceaa4579e3e908abc1b992f5ebc8c86a6809c17d59c98ec622400853","typeString":"literal_string \"!upgrade\""},"value":"!upgrade"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_46c85c57ceaa4579e3e908abc1b992f5ebc8c86a6809c17d59c98ec622400853","typeString":"literal_string \"!upgrade\""}],"id":51322,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3319:7:175","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":51327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3319:57:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51328,"nodeType":"ExpressionStatement","src":"3319:57:175"},{"expression":{"arguments":[{"arguments":[{"id":51332,"name":"_newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51319,"src":"3466:18:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":51330,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"3447:7:175","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11484_$","typeString":"type(library Address)"}},"id":51331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3455:10:175","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":11172,"src":"3447:18:175","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":51333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3447:38:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696d706c656d656e746174696f6e2021636f6e7472616374","id":51334,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3487:26:175","typeDescriptions":{"typeIdentifier":"t_stringliteral_b54c71a6fbb2ca345b95c1e2a89104a71ffbc5a4655ce78640a26a7da0e72d58","typeString":"literal_string \"implementation !contract\""},"value":"implementation !contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b54c71a6fbb2ca345b95c1e2a89104a71ffbc5a4655ce78640a26a7da0e72d58","typeString":"literal_string \"implementation !contract\""}],"id":51329,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3439:7:175","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":51335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3439:75:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51336,"nodeType":"ExpressionStatement","src":"3439:75:175"},{"expression":{"id":51339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51337,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51274,"src":"3554:14:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":51338,"name":"_newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51319,"src":"3571:18:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3554:35:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":51340,"nodeType":"ExpressionStatement","src":"3554:35:175"},{"eventCall":{"arguments":[{"id":51342,"name":"_newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51319,"src":"3608:18:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":51341,"name":"Upgrade","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51278,"src":"3600:7:175","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":51343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3600:27:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51344,"nodeType":"EmitStatement","src":"3595:32:175"}]},"documentation":{"id":51317,"nodeType":"StructuredDocumentation","src":"2948:221:175","text":" @notice Perform checks on the new implementation address\n then upgrade the stored implementation.\n @param _newImplementation Address of the new implementation contract which will replace the old one"},"id":51346,"implemented":true,"kind":"function","modifiers":[],"name":"_setImplementation","nameLocation":"3181:18:175","nodeType":"FunctionDefinition","parameters":{"id":51320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51319,"mutability":"mutable","name":"_newImplementation","nameLocation":"3208:18:175","nodeType":"VariableDeclaration","scope":51346,"src":"3200:26:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51318,"name":"address","nodeType":"ElementaryTypeName","src":"3200:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3199:28:175"},"returnParameters":{"id":51321,"nodeType":"ParameterList","parameters":[],"src":"3236:0:175"},"scope":51347,"src":"3172:460:175","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":51348,"src":"891:2743:175","usedErrors":[]}],"src":"46:3589:175"},"id":175},"contracts/shared/upgrade/UpgradeBeaconController.sol":{"ast":{"absolutePath":"contracts/shared/upgrade/UpgradeBeaconController.sol","exportedSymbols":{"Address":[11484],"ProposedOwnable":[49928],"UpgradeBeacon":[51347],"UpgradeBeaconController":[51413]},"id":51414,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":51349,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:176"},{"absolutePath":"contracts/shared/ProposedOwnable.sol","file":"../ProposedOwnable.sol","id":51351,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":51414,"sourceUnit":49929,"src":"117:55:176","symbolAliases":[{"foreign":{"id":51350,"name":"ProposedOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49928,"src":"125:15:176","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/shared/upgrade/UpgradeBeacon.sol","file":"./UpgradeBeacon.sol","id":51353,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":51414,"sourceUnit":51348,"src":"174:50:176","symbolAliases":[{"foreign":{"id":51352,"name":"UpgradeBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51347,"src":"182:13:176","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":51355,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":51414,"sourceUnit":11485,"src":"272:66:176","symbolAliases":[{"foreign":{"id":51354,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"280:7:176","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":51357,"name":"ProposedOwnable","nameLocations":["883:15:176"],"nodeType":"IdentifierPath","referencedDeclaration":49928,"src":"883:15:176"},"id":51358,"nodeType":"InheritanceSpecifier","src":"883:15:176"}],"canonicalName":"UpgradeBeaconController","contractDependencies":[],"contractKind":"contract","documentation":{"id":51356,"nodeType":"StructuredDocumentation","src":"340:506:176","text":" @title UpgradeBeaconController\n @notice Set as the controller of UpgradeBeacon contract(s),\n capable of changing their stored implementation address.\n @dev This implementation is a minimal version inspired by 0age's implementation:\n https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/upgradeability/DharmaUpgradeBeaconController.sol\n @dev Do *NOT* remove ownership unless all UpgradeBeacons registered with this controller\n are willing to lose upgradeability."},"fullyImplemented":true,"id":51413,"linearizedBaseContracts":[51413,49928,50003],"name":"UpgradeBeaconController","nameLocation":"856:23:176","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"c945ae30494f6ee00b9e4bf1fec5653ced7244b559666f44f9a88ea732e957b0","id":51364,"name":"BeaconUpgraded","nameLocation":"948:14:176","nodeType":"EventDefinition","parameters":{"id":51363,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51360,"indexed":true,"mutability":"mutable","name":"beacon","nameLocation":"979:6:176","nodeType":"VariableDeclaration","scope":51364,"src":"963:22:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51359,"name":"address","nodeType":"ElementaryTypeName","src":"963:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":51362,"indexed":false,"mutability":"mutable","name":"implementation","nameLocation":"995:14:176","nodeType":"VariableDeclaration","scope":51364,"src":"987:22:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51361,"name":"address","nodeType":"ElementaryTypeName","src":"987:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"962:48:176"},"src":"942:69:176"},{"body":{"id":51372,"nodeType":"Block","src":"1072:32:176","statements":[{"expression":{"arguments":[{"expression":{"id":51368,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1088:3:176","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":51369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1092:6:176","memberName":"sender","nodeType":"MemberAccess","src":"1088:10:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":51367,"name":"_setOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49908,"src":"1078:9:176","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":51370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1078:21:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51371,"nodeType":"ExpressionStatement","src":"1078:21:176"}]},"id":51373,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":51365,"nodeType":"ParameterList","parameters":[],"src":"1069:2:176"},"returnParameters":{"id":51366,"nodeType":"ParameterList","parameters":[],"src":"1072:0:176"},"scope":51413,"src":"1058:46:176","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":51411,"nodeType":"Block","src":"1581:525:176","statements":[{"expression":{"arguments":[{"arguments":[{"id":51386,"name":"_beacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51376,"src":"1659:7:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":51384,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"1640:7:176","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11484_$","typeString":"type(library Address)"}},"id":51385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1648:10:176","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":11172,"src":"1640:18:176","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":51387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1640:27:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"626561636f6e2021636f6e7472616374","id":51388,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1669:18:176","typeDescriptions":{"typeIdentifier":"t_stringliteral_d6fa84775b2f5d8dc72e8983563c49fd6df479405c5f9def94921322ed3ad41c","typeString":"literal_string \"beacon !contract\""},"value":"beacon !contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d6fa84775b2f5d8dc72e8983563c49fd6df479405c5f9def94921322ed3ad41c","typeString":"literal_string \"beacon !contract\""}],"id":51383,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1632:7:176","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":51389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1632:56:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51390,"nodeType":"ExpressionStatement","src":"1632:56:176"},{"assignments":[51392,null],"declarations":[{"constant":false,"id":51392,"mutability":"mutable","name":"_success","nameLocation":"1779:8:176","nodeType":"VariableDeclaration","scope":51411,"src":"1774:13:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":51391,"name":"bool","nodeType":"ElementaryTypeName","src":"1774:4:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":51400,"initialValue":{"arguments":[{"arguments":[{"id":51397,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51378,"src":"1817:15:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":51395,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1806:3:176","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":51396,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1810:6:176","memberName":"encode","nodeType":"MemberAccess","src":"1806:10:176","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":51398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1806:27:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":51393,"name":"_beacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51376,"src":"1793:7:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":51394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1801:4:176","memberName":"call","nodeType":"MemberAccess","src":"1793:12:176","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":51399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1793:41:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1773:61:176"},{"condition":{"id":51402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1925:9:176","subExpression":{"id":51401,"name":"_success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51392,"src":"1926:8:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":51405,"nodeType":"IfStatement","src":"1921:130:176","trueBody":{"id":51404,"nodeType":"Block","src":"1936:115:176","statements":[{"AST":{"nodeType":"YulBlock","src":"1953:92:176","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1978:1:176","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1981:1:176","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1984:14:176"},"nodeType":"YulFunctionCall","src":"1984:16:176"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"1963:14:176"},"nodeType":"YulFunctionCall","src":"1963:38:176"},"nodeType":"YulExpressionStatement","src":"1963:38:176"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2017:1:176","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"2020:14:176"},"nodeType":"YulFunctionCall","src":"2020:16:176"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2010:6:176"},"nodeType":"YulFunctionCall","src":"2010:27:176"},"nodeType":"YulExpressionStatement","src":"2010:27:176"}]},"evmVersion":"london","externalReferences":[],"id":51403,"nodeType":"InlineAssembly","src":"1944:101:176"}]}},{"eventCall":{"arguments":[{"id":51407,"name":"_beacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51376,"src":"2076:7:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":51408,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51378,"src":"2085:15:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":51406,"name":"BeaconUpgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51364,"src":"2061:14:176","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":51409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2061:40:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51410,"nodeType":"EmitStatement","src":"2056:45:176"}]},"documentation":{"id":51374,"nodeType":"StructuredDocumentation","src":"1159:341:176","text":" @notice Modify the implementation stored in the UpgradeBeacon,\n which will upgrade the implementation used by all\n Proxy contracts using that UpgradeBeacon\n @param _beacon Address of the UpgradeBeacon which will be updated\n @param _implementation Address of the Implementation contract to upgrade the Beacon to"},"functionSelector":"99a88ec4","id":51412,"implemented":true,"kind":"function","modifiers":[{"id":51381,"kind":"modifierInvocation","modifierName":{"id":51380,"name":"onlyOwner","nameLocations":["1571:9:176"],"nodeType":"IdentifierPath","referencedDeclaration":49767,"src":"1571:9:176"},"nodeType":"ModifierInvocation","src":"1571:9:176"}],"name":"upgrade","nameLocation":"1512:7:176","nodeType":"FunctionDefinition","parameters":{"id":51379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51376,"mutability":"mutable","name":"_beacon","nameLocation":"1528:7:176","nodeType":"VariableDeclaration","scope":51412,"src":"1520:15:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51375,"name":"address","nodeType":"ElementaryTypeName","src":"1520:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":51378,"mutability":"mutable","name":"_implementation","nameLocation":"1545:15:176","nodeType":"VariableDeclaration","scope":51412,"src":"1537:23:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51377,"name":"address","nodeType":"ElementaryTypeName","src":"1537:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1519:42:176"},"returnParameters":{"id":51382,"nodeType":"ParameterList","parameters":[],"src":"1581:0:176"},"scope":51413,"src":"1503:603:176","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":51414,"src":"847:1261:176","usedErrors":[49697,49699,49701,49703,49705,49707,49709]}],"src":"46:2063:176"},"id":176},"contracts/shared/upgrade/UpgradeBeaconProxy.sol":{"ast":{"absolutePath":"contracts/shared/upgrade/UpgradeBeaconProxy.sol","exportedSymbols":{"Address":[11484],"UpgradeBeaconProxy":[51571]},"id":51572,"license":"MIT OR Apache-2.0","nodeType":"SourceUnit","nodes":[{"id":51415,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"46:23:177"},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":51417,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":51572,"sourceUnit":11485,"src":"117:66:177","symbolAliases":[{"foreign":{"id":51416,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"125:7:177","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"UpgradeBeaconProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":51418,"nodeType":"StructuredDocumentation","src":"185:951:177","text":" @title UpgradeBeaconProxy\n @notice\n Proxy contract which delegates all logic, including initialization,\n to an implementation contract.\n The implementation contract is stored within an Upgrade Beacon contract;\n the implementation contract can be changed by performing an upgrade on the Upgrade Beacon contract.\n The Upgrade Beacon contract for this Proxy is immutably specified at deployment.\n @dev This implementation combines the gas savings of keeping the UpgradeBeacon address outside of contract storage\n found in 0age's implementation:\n https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol\n With the added safety checks that the UpgradeBeacon and implementation are contracts at time of deployment\n found in OpenZeppelin's implementation:\n https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol"},"fullyImplemented":true,"id":51571,"linearizedBaseContracts":[51571],"name":"UpgradeBeaconProxy","nameLocation":"1146:18:177","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":51420,"mutability":"immutable","name":"upgradeBeacon","nameLocation":"1320:13:177","nodeType":"VariableDeclaration","scope":51571,"src":"1294:39:177","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51419,"name":"address","nodeType":"ElementaryTypeName","src":"1294:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"body":{"id":51465,"nodeType":"Block","src":"2028:564:177","statements":[{"expression":{"arguments":[{"arguments":[{"id":51431,"name":"_upgradeBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51423,"src":"2110:14:177","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":51429,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"2091:7:177","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11484_$","typeString":"type(library Address)"}},"id":51430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2099:10:177","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":11172,"src":"2091:18:177","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":51432,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2091:34:177","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"626561636f6e2021636f6e7472616374","id":51433,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2127:18:177","typeDescriptions":{"typeIdentifier":"t_stringliteral_d6fa84775b2f5d8dc72e8983563c49fd6df479405c5f9def94921322ed3ad41c","typeString":"literal_string \"beacon !contract\""},"value":"beacon !contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d6fa84775b2f5d8dc72e8983563c49fd6df479405c5f9def94921322ed3ad41c","typeString":"literal_string \"beacon !contract\""}],"id":51428,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2083:7:177","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":51434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2083:63:177","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51435,"nodeType":"ExpressionStatement","src":"2083:63:177"},{"expression":{"id":51438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51436,"name":"upgradeBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51420,"src":"2182:13:177","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":51437,"name":"_upgradeBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51423,"src":"2198:14:177","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2182:30:177","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":51439,"nodeType":"ExpressionStatement","src":"2182:30:177"},{"assignments":[51441],"declarations":[{"constant":false,"id":51441,"mutability":"mutable","name":"_implementation","nameLocation":"2275:15:177","nodeType":"VariableDeclaration","scope":51465,"src":"2267:23:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51440,"name":"address","nodeType":"ElementaryTypeName","src":"2267:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":51445,"initialValue":{"arguments":[{"id":51443,"name":"_upgradeBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51423,"src":"2312:14:177","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":51442,"name":"_getImplementation","nodeType":"Identifier","overloadedDeclarations":[51534,51570],"referencedDeclaration":51570,"src":"2293:18:177","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":51444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2293:34:177","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2267:60:177"},{"expression":{"arguments":[{"arguments":[{"id":51449,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51441,"src":"2360:15:177","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":51447,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"2341:7:177","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11484_$","typeString":"type(library Address)"}},"id":51448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2349:10:177","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":11172,"src":"2341:18:177","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":51450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2341:35:177","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"626561636f6e20696d706c656d656e746174696f6e2021636f6e7472616374","id":51451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2378:33:177","typeDescriptions":{"typeIdentifier":"t_stringliteral_1885e83655ef1ce5d48047c111cf8c2459adf32b677f5b8e678f940b377eea04","typeString":"literal_string \"beacon implementation !contract\""},"value":"beacon implementation !contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1885e83655ef1ce5d48047c111cf8c2459adf32b677f5b8e678f940b377eea04","typeString":"literal_string \"beacon implementation !contract\""}],"id":51446,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2333:7:177","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":51452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2333:79:177","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51453,"nodeType":"ExpressionStatement","src":"2333:79:177"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":51457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":51454,"name":"_initializationCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51425,"src":"2484:23:177","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":51455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2508:6:177","memberName":"length","nodeType":"MemberAccess","src":"2484:30:177","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":51456,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2517:1:177","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2484:34:177","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":51464,"nodeType":"IfStatement","src":"2480:108:177","trueBody":{"id":51463,"nodeType":"Block","src":"2520:68:177","statements":[{"expression":{"arguments":[{"id":51459,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51441,"src":"2540:15:177","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":51460,"name":"_initializationCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51425,"src":"2557:23:177","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":51458,"name":"_initialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51503,"src":"2528:11:177","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory)"}},"id":51461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2528:53:177","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51462,"nodeType":"ExpressionStatement","src":"2528:53:177"}]}}]},"documentation":{"id":51421,"nodeType":"StructuredDocumentation","src":"1382:561:177","text":" @notice Validate that the Upgrade Beacon is a contract, then set its\n address immutably within this contract.\n Validate that the implementation is also a contract,\n Then call the initialization function defined at the implementation.\n The deployment will revert and pass along the\n revert reason if the initialization function reverts.\n @param _upgradeBeacon Address of the Upgrade Beacon to be stored immutably in the contract\n @param _initializationCalldata Calldata supplied when calling the initialization function"},"id":51466,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":51426,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51423,"mutability":"mutable","name":"_upgradeBeacon","nameLocation":"1966:14:177","nodeType":"VariableDeclaration","scope":51466,"src":"1958:22:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51422,"name":"address","nodeType":"ElementaryTypeName","src":"1958:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":51425,"mutability":"mutable","name":"_initializationCalldata","nameLocation":"1995:23:177","nodeType":"VariableDeclaration","scope":51466,"src":"1982:36:177","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":51424,"name":"bytes","nodeType":"ElementaryTypeName","src":"1982:5:177","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1957:62:177"},"returnParameters":{"id":51427,"nodeType":"ParameterList","parameters":[],"src":"2028:0:177"},"scope":51571,"src":"1946:646:177","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":51473,"nodeType":"Block","src":"2825:22:177","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":51470,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51513,"src":"2831:9:177","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":51471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2831:11:177","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51472,"nodeType":"ExpressionStatement","src":"2831:11:177"}]},"documentation":{"id":51467,"nodeType":"StructuredDocumentation","src":"2647:147:177","text":" @notice Forwards all calls with data to _fallback()\n No public functions are declared on the contract, so all calls hit fallback"},"id":51474,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":51468,"nodeType":"ParameterList","parameters":[],"src":"2805:2:177"},"returnParameters":{"id":51469,"nodeType":"ParameterList","parameters":[],"src":"2825:0:177"},"scope":51571,"src":"2797:50:177","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":51481,"nodeType":"Block","src":"2950:22:177","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":51478,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51513,"src":"2956:9:177","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":51479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2956:11:177","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51480,"nodeType":"ExpressionStatement","src":"2956:11:177"}]},"documentation":{"id":51475,"nodeType":"StructuredDocumentation","src":"2851:69:177","text":" @notice Forwards all calls with no data to _fallback()"},"id":51482,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":51476,"nodeType":"ParameterList","parameters":[],"src":"2930:2:177"},"returnParameters":{"id":51477,"nodeType":"ParameterList","parameters":[],"src":"2950:0:177"},"scope":51571,"src":"2923:49:177","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":51502,"nodeType":"Block","src":"3495:370:177","statements":[{"assignments":[51491,null],"declarations":[{"constant":false,"id":51491,"mutability":"mutable","name":"_ok","nameLocation":"3587:3:177","nodeType":"VariableDeclaration","scope":51502,"src":"3582:8:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":51490,"name":"bool","nodeType":"ElementaryTypeName","src":"3582:4:177","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":51496,"initialValue":{"arguments":[{"id":51494,"name":"_initializationCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51487,"src":"3625:23:177","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":51492,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51485,"src":"3596:15:177","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":51493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3612:12:177","memberName":"delegatecall","nodeType":"MemberAccess","src":"3596:28:177","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":51495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3596:53:177","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3581:68:177"},{"condition":{"id":51498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3740:4:177","subExpression":{"id":51497,"name":"_ok","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51491,"src":"3741:3:177","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":51501,"nodeType":"IfStatement","src":"3736:125:177","trueBody":{"id":51500,"nodeType":"Block","src":"3746:115:177","statements":[{"AST":{"nodeType":"YulBlock","src":"3763:92:177","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3788:1:177","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3791:1:177","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"3794:14:177"},"nodeType":"YulFunctionCall","src":"3794:16:177"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"3773:14:177"},"nodeType":"YulFunctionCall","src":"3773:38:177"},"nodeType":"YulExpressionStatement","src":"3773:38:177"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3827:1:177","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"3830:14:177"},"nodeType":"YulFunctionCall","src":"3830:16:177"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3820:6:177"},"nodeType":"YulFunctionCall","src":"3820:27:177"},"nodeType":"YulExpressionStatement","src":"3820:27:177"}]},"evmVersion":"london","externalReferences":[],"id":51499,"nodeType":"InlineAssembly","src":"3754:101:177"}]}}]},"documentation":{"id":51483,"nodeType":"StructuredDocumentation","src":"3026:374:177","text":" @notice Call the initialization function on the implementation\n Used at deployment to initialize the proxy\n based on the logic for initialization defined at the implementation\n @param _implementation - Contract to which the initalization is delegated\n @param _initializationCalldata - Calldata supplied when calling the initialization function"},"id":51503,"implemented":true,"kind":"function","modifiers":[],"name":"_initialize","nameLocation":"3412:11:177","nodeType":"FunctionDefinition","parameters":{"id":51488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51485,"mutability":"mutable","name":"_implementation","nameLocation":"3432:15:177","nodeType":"VariableDeclaration","scope":51503,"src":"3424:23:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51484,"name":"address","nodeType":"ElementaryTypeName","src":"3424:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":51487,"mutability":"mutable","name":"_initializationCalldata","nameLocation":"3462:23:177","nodeType":"VariableDeclaration","scope":51503,"src":"3449:36:177","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":51486,"name":"bytes","nodeType":"ElementaryTypeName","src":"3449:5:177","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3423:63:177"},"returnParameters":{"id":51489,"nodeType":"ParameterList","parameters":[],"src":"3495:0:177"},"scope":51571,"src":"3403:462:177","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":51512,"nodeType":"Block","src":"4010:42:177","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":51508,"name":"_getImplementation","nodeType":"Identifier","overloadedDeclarations":[51534,51570],"referencedDeclaration":51534,"src":"4026:18:177","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":51509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4026:20:177","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":51507,"name":"_delegate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51521,"src":"4016:9:177","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":51510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4016:31:177","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51511,"nodeType":"ExpressionStatement","src":"4016:31:177"}]},"documentation":{"id":51504,"nodeType":"StructuredDocumentation","src":"3869:109:177","text":" @notice Delegates function calls to the implementation contract returned by the Upgrade Beacon"},"id":51513,"implemented":true,"kind":"function","modifiers":[],"name":"_fallback","nameLocation":"3990:9:177","nodeType":"FunctionDefinition","parameters":{"id":51505,"nodeType":"ParameterList","parameters":[],"src":"3999:2:177"},"returnParameters":{"id":51506,"nodeType":"ParameterList","parameters":[],"src":"4010:0:177"},"scope":51571,"src":"3981:71:177","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":51520,"nodeType":"Block","src":"4525:787:177","statements":[{"AST":{"nodeType":"YulBlock","src":"4540:768:177","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4769:1:177","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4772:1:177","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"4775:12:177"},"nodeType":"YulFunctionCall","src":"4775:14:177"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"4756:12:177"},"nodeType":"YulFunctionCall","src":"4756:34:177"},"nodeType":"YulExpressionStatement","src":"4756:34:177"},{"nodeType":"YulVariableDeclaration","src":"4945:75:177","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"4972:3:177"},"nodeType":"YulFunctionCall","src":"4972:5:177"},{"name":"_implementation","nodeType":"YulIdentifier","src":"4979:15:177"},{"kind":"number","nodeType":"YulLiteral","src":"4996:1:177","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"4999:12:177"},"nodeType":"YulFunctionCall","src":"4999:14:177"},{"kind":"number","nodeType":"YulLiteral","src":"5015:1:177","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5018:1:177","type":"","value":"0"}],"functionName":{"name":"delegatecall","nodeType":"YulIdentifier","src":"4959:12:177"},"nodeType":"YulFunctionCall","src":"4959:61:177"},"variables":[{"name":"result","nodeType":"YulTypedName","src":"4949:6:177","type":""}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5098:1:177","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5101:1:177","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"5104:14:177"},"nodeType":"YulFunctionCall","src":"5104:16:177"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"5083:14:177"},"nodeType":"YulFunctionCall","src":"5083:38:177"},"nodeType":"YulExpressionStatement","src":"5083:38:177"},{"cases":[{"body":{"nodeType":"YulBlock","src":"5197:45:177","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5214:1:177","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"5217:14:177"},"nodeType":"YulFunctionCall","src":"5217:16:177"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5207:6:177"},"nodeType":"YulFunctionCall","src":"5207:27:177"},"nodeType":"YulExpressionStatement","src":"5207:27:177"}]},"nodeType":"YulCase","src":"5190:52:177","value":{"kind":"number","nodeType":"YulLiteral","src":"5195:1:177","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"5257:45:177","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5274:1:177","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"5277:14:177"},"nodeType":"YulFunctionCall","src":"5277:16:177"}],"functionName":{"name":"return","nodeType":"YulIdentifier","src":"5267:6:177"},"nodeType":"YulFunctionCall","src":"5267:27:177"},"nodeType":"YulExpressionStatement","src":"5267:27:177"}]},"nodeType":"YulCase","src":"5249:53:177","value":"default"}],"expression":{"name":"result","nodeType":"YulIdentifier","src":"5135:6:177"},"nodeType":"YulSwitch","src":"5128:174:177"}]},"evmVersion":"london","externalReferences":[{"declaration":51516,"isOffset":false,"isSlot":false,"src":"4979:15:177","valueSize":1}],"id":51519,"nodeType":"InlineAssembly","src":"4531:777:177"}]},"documentation":{"id":51514,"nodeType":"StructuredDocumentation","src":"4056:414:177","text":" @notice Delegate function execution to the implementation contract\n @dev This is a low level function that doesn't return to its internal\n call site. It will return whatever is returned by the implementation to the\n external caller, reverting and returning the revert data if implementation\n reverts.\n @param _implementation - Address to which the function execution is delegated"},"id":51521,"implemented":true,"kind":"function","modifiers":[],"name":"_delegate","nameLocation":"4482:9:177","nodeType":"FunctionDefinition","parameters":{"id":51517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51516,"mutability":"mutable","name":"_implementation","nameLocation":"4500:15:177","nodeType":"VariableDeclaration","scope":51521,"src":"4492:23:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51515,"name":"address","nodeType":"ElementaryTypeName","src":"4492:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4491:25:177"},"returnParameters":{"id":51518,"nodeType":"ParameterList","parameters":[],"src":"4525:0:177"},"scope":51571,"src":"4473:839:177","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":51533,"nodeType":"Block","src":"5561:62:177","statements":[{"expression":{"id":51531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51527,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51525,"src":"5567:15:177","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":51529,"name":"upgradeBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51420,"src":"5604:13:177","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":51528,"name":"_getImplementation","nodeType":"Identifier","overloadedDeclarations":[51534,51570],"referencedDeclaration":51570,"src":"5585:18:177","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":51530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5585:33:177","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5567:51:177","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":51532,"nodeType":"ExpressionStatement","src":"5567:51:177"}]},"documentation":{"id":51522,"nodeType":"StructuredDocumentation","src":"5316:165:177","text":" @notice Call the Upgrade Beacon to get the current implementation contract address\n @return _implementation Address of the current implementation."},"id":51534,"implemented":true,"kind":"function","modifiers":[],"name":"_getImplementation","nameLocation":"5493:18:177","nodeType":"FunctionDefinition","parameters":{"id":51523,"nodeType":"ParameterList","parameters":[],"src":"5511:2:177"},"returnParameters":{"id":51526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51525,"mutability":"mutable","name":"_implementation","nameLocation":"5544:15:177","nodeType":"VariableDeclaration","scope":51534,"src":"5536:23:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51524,"name":"address","nodeType":"ElementaryTypeName","src":"5536:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5535:25:177"},"scope":51571,"src":"5484:139:177","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":51569,"nodeType":"Block","src":"6146:405:177","statements":[{"assignments":[51543,51545],"declarations":[{"constant":false,"id":51543,"mutability":"mutable","name":"_ok","nameLocation":"6229:3:177","nodeType":"VariableDeclaration","scope":51569,"src":"6224:8:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":51542,"name":"bool","nodeType":"ElementaryTypeName","src":"6224:4:177","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":51545,"mutability":"mutable","name":"_returnData","nameLocation":"6247:11:177","nodeType":"VariableDeclaration","scope":51569,"src":"6234:24:177","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":51544,"name":"bytes","nodeType":"ElementaryTypeName","src":"6234:5:177","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":51550,"initialValue":{"arguments":[{"hexValue":"","id":51548,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6288:2:177","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":51546,"name":"_upgradeBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51537,"src":"6262:14:177","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":51547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6277:10:177","memberName":"staticcall","nodeType":"MemberAccess","src":"6262:25:177","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":51549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6262:29:177","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6223:68:177"},{"expression":{"arguments":[{"id":51552,"name":"_ok","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51543,"src":"6384:3:177","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[{"id":51555,"name":"_returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51545,"src":"6396:11:177","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":51554,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6389:6:177","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":51553,"name":"string","nodeType":"ElementaryTypeName","src":"6389:6:177","typeDescriptions":{}}},"id":51556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6389:19:177","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":51551,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6376:7:177","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":51557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6376:33:177","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51558,"nodeType":"ExpressionStatement","src":"6376:33:177"},{"expression":{"id":51567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51559,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51540,"src":"6494:15:177","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":51562,"name":"_returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51545,"src":"6523:11:177","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":51564,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6537:7:177","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":51563,"name":"address","nodeType":"ElementaryTypeName","src":"6537:7:177","typeDescriptions":{}}}],"id":51565,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6536:9:177","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}],"expression":{"id":51560,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6512:3:177","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":51561,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6516:6:177","memberName":"decode","nodeType":"MemberAccess","src":"6512:10:177","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":51566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6512:34:177","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"6494:52:177","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":51568,"nodeType":"ExpressionStatement","src":"6494:52:177"}]},"documentation":{"id":51535,"nodeType":"StructuredDocumentation","src":"5627:417:177","text":" @notice Call the Upgrade Beacon to get the current implementation contract address\n @dev _upgradeBeacon is passed as a parameter so that\n we can also use this function in the constructor,\n where we can't access immutable variables.\n @param _upgradeBeacon Address of the UpgradeBeacon storing the current implementation\n @return _implementation Address of the current implementation."},"id":51570,"implemented":true,"kind":"function","modifiers":[],"name":"_getImplementation","nameLocation":"6056:18:177","nodeType":"FunctionDefinition","parameters":{"id":51538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51537,"mutability":"mutable","name":"_upgradeBeacon","nameLocation":"6083:14:177","nodeType":"VariableDeclaration","scope":51570,"src":"6075:22:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51536,"name":"address","nodeType":"ElementaryTypeName","src":"6075:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6074:24:177"},"returnParameters":{"id":51541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51540,"mutability":"mutable","name":"_implementation","nameLocation":"6129:15:177","nodeType":"VariableDeclaration","scope":51570,"src":"6121:23:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51539,"name":"address","nodeType":"ElementaryTypeName","src":"6121:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6120:25:177"},"scope":51571,"src":"6047:504:177","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":51572,"src":"1137:5416:177","usedErrors":[]}],"src":"46:6508:177"},"id":177},"contracts/test/TestAavePool.sol":{"ast":{"absolutePath":"contracts/test/TestAavePool.sol","exportedSymbols":{"IAavePool":[25862],"TestAavePool":[51644]},"id":51645,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":51573,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:178"},{"absolutePath":"contracts/core/connext/interfaces/IAavePool.sol","file":"../core/connext/interfaces/IAavePool.sol","id":51575,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":51645,"sourceUnit":25863,"src":"64:67:178","symbolAliases":[{"foreign":{"id":51574,"name":"IAavePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25862,"src":"72:9:178","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":51576,"name":"IAavePool","nameLocations":["158:9:178"],"nodeType":"IdentifierPath","referencedDeclaration":25862,"src":"158:9:178"},"id":51577,"nodeType":"InheritanceSpecifier","src":"158:9:178"}],"canonicalName":"TestAavePool","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":51644,"linearizedBaseContracts":[51644,25862],"name":"TestAavePool","nameLocation":"142:12:178","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":51579,"mutability":"mutable","name":"revertCall","nameLocation":"177:10:178","nodeType":"VariableDeclaration","scope":51644,"src":"172:15:178","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":51578,"name":"bool","nodeType":"ElementaryTypeName","src":"172:4:178","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"body":{"id":51588,"nodeType":"Block","src":"238:31:178","statements":[{"expression":{"id":51586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51584,"name":"revertCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51579,"src":"244:10:178","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":51585,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51581,"src":"257:7:178","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"244:20:178","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":51587,"nodeType":"ExpressionStatement","src":"244:20:178"}]},"functionSelector":"d33d5c86","id":51589,"implemented":true,"kind":"function","modifiers":[],"name":"setRevertCall","nameLocation":"201:13:178","nodeType":"FunctionDefinition","parameters":{"id":51582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51581,"mutability":"mutable","name":"_revert","nameLocation":"220:7:178","nodeType":"VariableDeclaration","scope":51589,"src":"215:12:178","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":51580,"name":"bool","nodeType":"ElementaryTypeName","src":"215:4:178","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"214:14:178"},"returnParameters":{"id":51583,"nodeType":"ParameterList","parameters":[],"src":"238:0:178"},"scope":51644,"src":"192:77:178","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[25839],"body":{"id":51606,"nodeType":"Block","src":"412:56:178","statements":[{"expression":{"arguments":[{"id":51602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"426:11:178","subExpression":{"id":51601,"name":"revertCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51579,"src":"427:10:178","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d696e74556e6261636b6564207265766572746564","id":51603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"439:23:178","typeDescriptions":{"typeIdentifier":"t_stringliteral_b8c940c5bc4068edee8aa2c147b5f47671be9440b61ef89f0ffefa2c238bd716","typeString":"literal_string \"mintUnbacked reverted\""},"value":"mintUnbacked reverted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b8c940c5bc4068edee8aa2c147b5f47671be9440b61ef89f0ffefa2c238bd716","typeString":"literal_string \"mintUnbacked reverted\""}],"id":51600,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"418:7:178","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":51604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"418:45:178","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51605,"nodeType":"ExpressionStatement","src":"418:45:178"}]},"functionSelector":"69a933a5","id":51607,"implemented":true,"kind":"function","modifiers":[],"name":"mintUnbacked","nameLocation":"282:12:178","nodeType":"FunctionDefinition","parameters":{"id":51598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51591,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":51607,"src":"300:7:178","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51590,"name":"address","nodeType":"ElementaryTypeName","src":"300:7:178","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":51593,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":51607,"src":"322:7:178","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51592,"name":"uint256","nodeType":"ElementaryTypeName","src":"322:7:178","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":51595,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":51607,"src":"345:7:178","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51594,"name":"address","nodeType":"ElementaryTypeName","src":"345:7:178","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":51597,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":51607,"src":"372:6:178","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":51596,"name":"uint16","nodeType":"ElementaryTypeName","src":"372:6:178","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"294:103:178"},"returnParameters":{"id":51599,"nodeType":"ParameterList","parameters":[],"src":"412:0:178"},"scope":51644,"src":"273:195:178","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[25849],"body":{"id":51622,"nodeType":"Block","src":"578:56:178","statements":[{"expression":{"arguments":[{"id":51618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"592:11:178","subExpression":{"id":51617,"name":"revertCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51579,"src":"593:10:178","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6261636b556e6261636b6564207265766572746564","id":51619,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"605:23:178","typeDescriptions":{"typeIdentifier":"t_stringliteral_e021d3ad20c537e7db3c05104b8ab0828de45d089ad17db88ee2ef82e19c715c","typeString":"literal_string \"backUnbacked reverted\""},"value":"backUnbacked reverted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e021d3ad20c537e7db3c05104b8ab0828de45d089ad17db88ee2ef82e19c715c","typeString":"literal_string \"backUnbacked reverted\""}],"id":51616,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"584:7:178","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":51620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"584:45:178","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51621,"nodeType":"ExpressionStatement","src":"584:45:178"}]},"functionSelector":"d65dc7a1","id":51623,"implemented":true,"kind":"function","modifiers":[],"name":"backUnbacked","nameLocation":"481:12:178","nodeType":"FunctionDefinition","parameters":{"id":51614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51609,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":51623,"src":"499:7:178","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51608,"name":"address","nodeType":"ElementaryTypeName","src":"499:7:178","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":51611,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":51623,"src":"521:7:178","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51610,"name":"uint256","nodeType":"ElementaryTypeName","src":"521:7:178","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":51613,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":51623,"src":"545:7:178","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51612,"name":"uint256","nodeType":"ElementaryTypeName","src":"545:7:178","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"493:70:178"},"returnParameters":{"id":51615,"nodeType":"ParameterList","parameters":[],"src":"578:0:178"},"scope":51644,"src":"472:162:178","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[25861],"body":{"id":51642,"nodeType":"Block","src":"753:71:178","statements":[{"expression":{"arguments":[{"id":51636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"767:11:178","subExpression":{"id":51635,"name":"revertCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51579,"src":"768:10:178","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"7769746864726177207265766572746564","id":51637,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"780:19:178","typeDescriptions":{"typeIdentifier":"t_stringliteral_8959e0939ce9e74deaf43a35d4296b903ab372b79f43f57e422127c0622e04d5","typeString":"literal_string \"withdraw reverted\""},"value":"withdraw reverted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8959e0939ce9e74deaf43a35d4296b903ab372b79f43f57e422127c0622e04d5","typeString":"literal_string \"withdraw reverted\""}],"id":51634,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"759:7:178","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":51638,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"759:41:178","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51639,"nodeType":"ExpressionStatement","src":"759:41:178"},{"expression":{"id":51640,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51627,"src":"813:6:178","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":51633,"id":51641,"nodeType":"Return","src":"806:13:178"}]},"functionSelector":"69328dec","id":51643,"implemented":true,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"647:8:178","nodeType":"FunctionDefinition","parameters":{"id":51630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51625,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":51643,"src":"661:7:178","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51624,"name":"address","nodeType":"ElementaryTypeName","src":"661:7:178","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":51627,"mutability":"mutable","name":"amount","nameLocation":"692:6:178","nodeType":"VariableDeclaration","scope":51643,"src":"684:14:178","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51626,"name":"uint256","nodeType":"ElementaryTypeName","src":"684:7:178","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":51629,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":51643,"src":"704:7:178","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51628,"name":"address","nodeType":"ElementaryTypeName","src":"704:7:178","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"655:65:178"},"returnParameters":{"id":51633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51632,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":51643,"src":"744:7:178","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51631,"name":"uint256","nodeType":"ElementaryTypeName","src":"744:7:178","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"743:9:178"},"scope":51644,"src":"638:186:178","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":51645,"src":"133:693:178","usedErrors":[]}],"src":"39:788:178"},"id":178},"contracts/test/TestAggregator.sol":{"ast":{"absolutePath":"contracts/test/TestAggregator.sol","exportedSymbols":{"TestAggregator":[51802]},"id":51803,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":51646,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:179"},{"abstract":false,"baseContracts":[],"canonicalName":"TestAggregator","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":51802,"linearizedBaseContracts":[51802],"name":"TestAggregator","nameLocation":"126:14:179","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"313ce567","id":51649,"mutability":"mutable","name":"decimals","nameLocation":"158:8:179","nodeType":"VariableDeclaration","scope":51802,"src":"145:26:179","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":51647,"name":"uint8","nodeType":"ElementaryTypeName","src":"145:5:179","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"3138","id":51648,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"169:2:179","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"visibility":"public"},{"constant":false,"functionSelector":"7284e416","id":51652,"mutability":"mutable","name":"description","nameLocation":"190:11:179","nodeType":"VariableDeclaration","scope":51802,"src":"176:55:179","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":51650,"name":"string","nodeType":"ElementaryTypeName","src":"176:6:179","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"436861696e6c696e6b20546573742041676772656761746f72","id":51651,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"204:27:179","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f585770b405d99ec5c1693aad83e864db9fa80f1f0fe3607e6d8dbed0451102","typeString":"literal_string \"Chainlink Test Aggregator\""},"value":"Chainlink Test Aggregator"},"visibility":"public"},{"constant":false,"functionSelector":"54fd4d50","id":51655,"mutability":"mutable","name":"version","nameLocation":"251:7:179","nodeType":"VariableDeclaration","scope":51802,"src":"236:26:179","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51653,"name":"uint256","nodeType":"ElementaryTypeName","src":"236:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":51654,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"261:1:179","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"public"},{"constant":false,"id":51658,"mutability":"mutable","name":"_mockRoundId","nameLocation":"274:12:179","nodeType":"VariableDeclaration","scope":51802,"src":"267:23:179","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":51656,"name":"uint80","nodeType":"ElementaryTypeName","src":"267:6:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"value":{"hexValue":"31","id":51657,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"289:1:179","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"internal"},{"constant":false,"id":51661,"mutability":"mutable","name":"_mockAnswer","nameLocation":"302:11:179","nodeType":"VariableDeclaration","scope":51802,"src":"295:22:179","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":51659,"name":"int256","nodeType":"ElementaryTypeName","src":"295:6:179","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31","id":51660,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"316:1:179","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"internal"},{"constant":false,"id":51663,"mutability":"mutable","name":"_mockUpdateAt","nameLocation":"330:13:179","nodeType":"VariableDeclaration","scope":51802,"src":"322:21:179","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51662,"name":"uint256","nodeType":"ElementaryTypeName","src":"322:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":51666,"mutability":"mutable","name":"_mockAnsweredInRound","nameLocation":"355:20:179","nodeType":"VariableDeclaration","scope":51802,"src":"348:31:179","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":51664,"name":"uint80","nodeType":"ElementaryTypeName","src":"348:6:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"value":{"hexValue":"31","id":51665,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"378:1:179","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"internal"},{"constant":false,"id":51668,"mutability":"mutable","name":"stopped","nameLocation":"389:7:179","nodeType":"VariableDeclaration","scope":51802,"src":"384:12:179","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":51667,"name":"bool","nodeType":"ElementaryTypeName","src":"384:4:179","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"errorSelector":"30a05051","id":51670,"name":"TestAggregator_Stopped","nameLocation":"447:22:179","nodeType":"ErrorDefinition","parameters":{"id":51669,"nodeType":"ParameterList","parameters":[],"src":"469:2:179"},"src":"441:31:179"},{"body":{"id":51684,"nodeType":"Block","src":"505:68:179","statements":[{"expression":{"id":51677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51675,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51649,"src":"511:8:179","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":51676,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51672,"src":"522:9:179","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"511:20:179","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":51678,"nodeType":"ExpressionStatement","src":"511:20:179"},{"expression":{"id":51682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51679,"name":"_mockUpdateAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51663,"src":"537:13:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":51680,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"553:5:179","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":51681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"559:9:179","memberName":"timestamp","nodeType":"MemberAccess","src":"553:15:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"537:31:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":51683,"nodeType":"ExpressionStatement","src":"537:31:179"}]},"id":51685,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":51673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51672,"mutability":"mutable","name":"_decimals","nameLocation":"494:9:179","nodeType":"VariableDeclaration","scope":51685,"src":"488:15:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":51671,"name":"uint8","nodeType":"ElementaryTypeName","src":"488:5:179","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"487:17:179"},"returnParameters":{"id":51674,"nodeType":"ParameterList","parameters":[],"src":"505:0:179"},"scope":51802,"src":"476:97:179","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":51720,"nodeType":"Block","src":"993:168:179","statements":[{"condition":{"id":51700,"name":"stopped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51668,"src":"1003:7:179","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":51705,"nodeType":"IfStatement","src":"999:59:179","trueBody":{"id":51704,"nodeType":"Block","src":"1012:46:179","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":51701,"name":"TestAggregator_Stopped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51670,"src":"1027:22:179","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":51702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1027:24:179","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51703,"nodeType":"RevertStatement","src":"1020:31:179"}]}},{"expression":{"components":[{"id":51706,"name":"_roundId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51687,"src":"1071:8:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":51714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":51707,"name":"_mockAnswer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51661,"src":"1081:11:179","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":51712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":51710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1102:2:179","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":51711,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51649,"src":"1106:8:179","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1102:12:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":51709,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1095:6:179","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":51708,"name":"int256","nodeType":"ElementaryTypeName","src":"1095:6:179","typeDescriptions":{}}},"id":51713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1095:20:179","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1081:34:179","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"hexValue":"30","id":51715,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1117:1:179","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":51716,"name":"_mockUpdateAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51663,"src":"1120:13:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":51717,"name":"_mockAnsweredInRound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51666,"src":"1135:20:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}}],"id":51718,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1070:86:179","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint80_$_t_int256_$_t_rational_0_by_1_$_t_uint256_$_t_uint80_$","typeString":"tuple(uint80,int256,int_const 0,uint256,uint80)"}},"functionReturnParameters":51699,"id":51719,"nodeType":"Return","src":"1063:93:179"}]},"functionSelector":"9a6fc8f5","id":51721,"implemented":true,"kind":"function","modifiers":[],"name":"getRoundData","nameLocation":"797:12:179","nodeType":"FunctionDefinition","parameters":{"id":51688,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51687,"mutability":"mutable","name":"_roundId","nameLocation":"817:8:179","nodeType":"VariableDeclaration","scope":51721,"src":"810:15:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":51686,"name":"uint80","nodeType":"ElementaryTypeName","src":"810:6:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"809:17:179"},"returnParameters":{"id":51699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51690,"mutability":"mutable","name":"roundId","nameLocation":"876:7:179","nodeType":"VariableDeclaration","scope":51721,"src":"869:14:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":51689,"name":"uint80","nodeType":"ElementaryTypeName","src":"869:6:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"},{"constant":false,"id":51692,"mutability":"mutable","name":"answer","nameLocation":"898:6:179","nodeType":"VariableDeclaration","scope":51721,"src":"891:13:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":51691,"name":"int256","nodeType":"ElementaryTypeName","src":"891:6:179","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":51694,"mutability":"mutable","name":"startedAt","nameLocation":"920:9:179","nodeType":"VariableDeclaration","scope":51721,"src":"912:17:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51693,"name":"uint256","nodeType":"ElementaryTypeName","src":"912:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":51696,"mutability":"mutable","name":"updatedAt","nameLocation":"945:9:179","nodeType":"VariableDeclaration","scope":51721,"src":"937:17:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51695,"name":"uint256","nodeType":"ElementaryTypeName","src":"937:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":51698,"mutability":"mutable","name":"answeredInRound","nameLocation":"969:15:179","nodeType":"VariableDeclaration","scope":51721,"src":"962:22:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":51697,"name":"uint80","nodeType":"ElementaryTypeName","src":"962:6:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"861:129:179"},"scope":51802,"src":"788:373:179","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":51754,"nodeType":"Block","src":"1358:172:179","statements":[{"condition":{"id":51734,"name":"stopped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51668,"src":"1368:7:179","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":51739,"nodeType":"IfStatement","src":"1364:59:179","trueBody":{"id":51738,"nodeType":"Block","src":"1377:46:179","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":51735,"name":"TestAggregator_Stopped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51670,"src":"1392:22:179","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":51736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1392:24:179","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51737,"nodeType":"RevertStatement","src":"1385:31:179"}]}},{"expression":{"components":[{"id":51740,"name":"_mockRoundId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51658,"src":"1436:12:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":51748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":51741,"name":"_mockAnswer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51661,"src":"1450:11:179","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":51746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":51744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1471:2:179","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":51745,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51649,"src":"1475:8:179","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1471:12:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":51743,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1464:6:179","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":51742,"name":"int256","nodeType":"ElementaryTypeName","src":"1464:6:179","typeDescriptions":{}}},"id":51747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1464:20:179","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1450:34:179","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"hexValue":"30","id":51749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1486:1:179","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":51750,"name":"_mockUpdateAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51663,"src":"1489:13:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":51751,"name":"_mockAnsweredInRound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51666,"src":"1504:20:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}}],"id":51752,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1435:90:179","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint80_$_t_int256_$_t_rational_0_by_1_$_t_uint256_$_t_uint80_$","typeString":"tuple(uint80,int256,int_const 0,uint256,uint80)"}},"functionReturnParameters":51733,"id":51753,"nodeType":"Return","src":"1428:97:179"}]},"functionSelector":"feaf968c","id":51755,"implemented":true,"kind":"function","modifiers":[],"name":"latestRoundData","nameLocation":"1174:15:179","nodeType":"FunctionDefinition","parameters":{"id":51722,"nodeType":"ParameterList","parameters":[],"src":"1189:2:179"},"returnParameters":{"id":51733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51724,"mutability":"mutable","name":"roundId","nameLocation":"1241:7:179","nodeType":"VariableDeclaration","scope":51755,"src":"1234:14:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":51723,"name":"uint80","nodeType":"ElementaryTypeName","src":"1234:6:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"},{"constant":false,"id":51726,"mutability":"mutable","name":"answer","nameLocation":"1263:6:179","nodeType":"VariableDeclaration","scope":51755,"src":"1256:13:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":51725,"name":"int256","nodeType":"ElementaryTypeName","src":"1256:6:179","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":51728,"mutability":"mutable","name":"startedAt","nameLocation":"1285:9:179","nodeType":"VariableDeclaration","scope":51755,"src":"1277:17:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51727,"name":"uint256","nodeType":"ElementaryTypeName","src":"1277:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":51730,"mutability":"mutable","name":"updatedAt","nameLocation":"1310:9:179","nodeType":"VariableDeclaration","scope":51755,"src":"1302:17:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51729,"name":"uint256","nodeType":"ElementaryTypeName","src":"1302:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":51732,"mutability":"mutable","name":"answeredInRound","nameLocation":"1334:15:179","nodeType":"VariableDeclaration","scope":51755,"src":"1327:22:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":51731,"name":"uint80","nodeType":"ElementaryTypeName","src":"1327:6:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"1226:129:179"},"scope":51802,"src":"1165:365:179","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":51764,"nodeType":"Block","src":"1585:32:179","statements":[{"expression":{"id":51762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51760,"name":"_mockAnswer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51661,"src":"1591:11:179","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":51761,"name":"_answer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51757,"src":"1605:7:179","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1591:21:179","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":51763,"nodeType":"ExpressionStatement","src":"1591:21:179"}]},"functionSelector":"575ac1e6","id":51765,"implemented":true,"kind":"function","modifiers":[],"name":"updateMockAnswer","nameLocation":"1543:16:179","nodeType":"FunctionDefinition","parameters":{"id":51758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51757,"mutability":"mutable","name":"_answer","nameLocation":"1567:7:179","nodeType":"VariableDeclaration","scope":51765,"src":"1560:14:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":51756,"name":"int256","nodeType":"ElementaryTypeName","src":"1560:6:179","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1559:16:179"},"returnParameters":{"id":51759,"nodeType":"ParameterList","parameters":[],"src":"1585:0:179"},"scope":51802,"src":"1534:83:179","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":51792,"nodeType":"Block","src":"1751:137:179","statements":[{"expression":{"id":51778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51776,"name":"_mockRoundId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51658,"src":"1757:12:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":51777,"name":"_roundId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51767,"src":"1772:8:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"src":"1757:23:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"id":51779,"nodeType":"ExpressionStatement","src":"1757:23:179"},{"expression":{"id":51782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51780,"name":"_mockAnswer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51661,"src":"1786:11:179","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":51781,"name":"_answer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51769,"src":"1800:7:179","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1786:21:179","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":51783,"nodeType":"ExpressionStatement","src":"1786:21:179"},{"expression":{"id":51786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51784,"name":"_mockUpdateAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51663,"src":"1813:13:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":51785,"name":"_updateAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51771,"src":"1829:9:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1813:25:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":51787,"nodeType":"ExpressionStatement","src":"1813:25:179"},{"expression":{"id":51790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51788,"name":"_mockAnsweredInRound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51666,"src":"1844:20:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":51789,"name":"_answeredInRound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51773,"src":"1867:16:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"src":"1844:39:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"id":51791,"nodeType":"ExpressionStatement","src":"1844:39:179"}]},"functionSelector":"64052980","id":51793,"implemented":true,"kind":"function","modifiers":[],"name":"updateMockData","nameLocation":"1630:14:179","nodeType":"FunctionDefinition","parameters":{"id":51774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51767,"mutability":"mutable","name":"_roundId","nameLocation":"1657:8:179","nodeType":"VariableDeclaration","scope":51793,"src":"1650:15:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":51766,"name":"uint80","nodeType":"ElementaryTypeName","src":"1650:6:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"},{"constant":false,"id":51769,"mutability":"mutable","name":"_answer","nameLocation":"1678:7:179","nodeType":"VariableDeclaration","scope":51793,"src":"1671:14:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":51768,"name":"int256","nodeType":"ElementaryTypeName","src":"1671:6:179","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":51771,"mutability":"mutable","name":"_updateAt","nameLocation":"1699:9:179","nodeType":"VariableDeclaration","scope":51793,"src":"1691:17:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51770,"name":"uint256","nodeType":"ElementaryTypeName","src":"1691:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":51773,"mutability":"mutable","name":"_answeredInRound","nameLocation":"1721:16:179","nodeType":"VariableDeclaration","scope":51793,"src":"1714:23:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":51772,"name":"uint80","nodeType":"ElementaryTypeName","src":"1714:6:179","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"1644:97:179"},"returnParameters":{"id":51775,"nodeType":"ParameterList","parameters":[],"src":"1751:0:179"},"scope":51802,"src":"1621:267:179","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":51800,"nodeType":"Block","src":"1917:25:179","statements":[{"expression":{"id":51798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51796,"name":"stopped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51668,"src":"1923:7:179","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":51797,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1933:4:179","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1923:14:179","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":51799,"nodeType":"ExpressionStatement","src":"1923:14:179"}]},"functionSelector":"07da68f5","id":51801,"implemented":true,"kind":"function","modifiers":[],"name":"stop","nameLocation":"1901:4:179","nodeType":"FunctionDefinition","parameters":{"id":51794,"nodeType":"ParameterList","parameters":[],"src":"1905:2:179"},"returnParameters":{"id":51795,"nodeType":"ParameterList","parameters":[],"src":"1917:0:179"},"scope":51802,"src":"1892:50:179","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":51803,"src":"117:1827:179","usedErrors":[51670]}],"src":"39:1906:179"},"id":179},"contracts/test/TestERC20.sol":{"ast":{"absolutePath":"contracts/test/TestERC20.sol","exportedSymbols":{"ERC20":[24039],"IBridgeToken":[25890],"IERC20":[10812],"IERC20Metadata":[10837],"TestERC20":[51935]},"id":51936,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":51804,"literals":["solidity","0.8",".17"],"nodeType":"PragmaDirective","src":"39:23:180"},{"absolutePath":"contracts/core/connext/helpers/OZERC20.sol","file":"../core/connext/helpers/OZERC20.sol","id":51806,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":51936,"sourceUnit":24040,"src":"64:58:180","symbolAliases":[{"foreign":{"id":51805,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24039,"src":"72:5:180","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","id":51809,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":51936,"sourceUnit":10838,"src":"123:105:180","symbolAliases":[{"foreign":{"id":51807,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10837,"src":"131:14:180","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":51808,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10812,"src":"147:6:180","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/core/connext/interfaces/IBridgeToken.sol","file":"../core/connext/interfaces/IBridgeToken.sol","id":51811,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":51936,"sourceUnit":25891,"src":"230:73:180","symbolAliases":[{"foreign":{"id":51810,"name":"IBridgeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25890,"src":"238:12:180","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":51813,"name":"ERC20","nameLocations":["483:5:180"],"nodeType":"IdentifierPath","referencedDeclaration":24039,"src":"483:5:180"},"id":51814,"nodeType":"InheritanceSpecifier","src":"483:5:180"},{"baseName":{"id":51815,"name":"IBridgeToken","nameLocations":["490:12:180"],"nodeType":"IdentifierPath","referencedDeclaration":25890,"src":"490:12:180"},"id":51816,"nodeType":"InheritanceSpecifier","src":"490:12:180"}],"canonicalName":"TestERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":51812,"nodeType":"StructuredDocumentation","src":"305:155:180","text":" @notice This token is ONLY useful for testing\n @dev Anybody can mint as many tokens as they like\n @dev Anybody can burn anyone else's tokens"},"fullyImplemented":true,"id":51935,"linearizedBaseContracts":[51935,25890,24039,10873,10837,10812],"name":"TestERC20","nameLocation":"470:9:180","nodeType":"ContractDefinition","nodes":[{"body":{"id":51835,"nodeType":"Block","src":"594:43:180","statements":[{"expression":{"arguments":[{"expression":{"id":51830,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"606:3:180","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":51831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"610:6:180","memberName":"sender","nodeType":"MemberAccess","src":"606:10:180","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"31303030303030","id":51832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"618:13:180","subdenomination":"ether","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000_by_1","typeString":"int_const 1000000000000000000000000"},"value":"1000000"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_1000000000000000000000000_by_1","typeString":"int_const 1000000000000000000000000"}],"id":51829,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23654,"src":"600:5:180","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":51833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"600:32:180","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51834,"nodeType":"ExpressionStatement","src":"600:32:180"}]},"id":51836,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"hexValue":"3138","id":51823,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"569:2:180","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},{"id":51824,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51818,"src":"573:5:180","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":51825,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51820,"src":"580:7:180","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"31","id":51826,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"589:3:180","typeDescriptions":{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""},"value":"1"}],"id":51827,"kind":"baseConstructorSpecifier","modifierName":{"id":51822,"name":"ERC20","nameLocations":["563:5:180"],"nodeType":"IdentifierPath","referencedDeclaration":24039,"src":"563:5:180"},"nodeType":"ModifierInvocation","src":"563:30:180"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":51821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51818,"mutability":"mutable","name":"_name","nameLocation":"533:5:180","nodeType":"VariableDeclaration","scope":51836,"src":"519:19:180","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":51817,"name":"string","nodeType":"ElementaryTypeName","src":"519:6:180","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":51820,"mutability":"mutable","name":"_symbol","nameLocation":"554:7:180","nodeType":"VariableDeclaration","scope":51836,"src":"540:21:180","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":51819,"name":"string","nodeType":"ElementaryTypeName","src":"540:6:180","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"518:44:180"},"returnParameters":{"id":51828,"nodeType":"ParameterList","parameters":[],"src":"594:0:180"},"scope":51935,"src":"507:130:180","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[25889],"body":{"id":51852,"nodeType":"Block","src":"784:175:180","statements":[{"expression":{"id":51846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51844,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23208,"src":"912:5:180","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":51845,"name":"_newName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51838,"src":"920:8:180","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},"src":"912:16:180","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":51847,"nodeType":"ExpressionStatement","src":"912:16:180"},{"expression":{"id":51850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":51848,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23210,"src":"934:7:180","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":51849,"name":"_newSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51840,"src":"944:10:180","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},"src":"934:20:180","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":51851,"nodeType":"ExpressionStatement","src":"934:20:180"}]},"functionSelector":"b7b090ee","id":51853,"implemented":true,"kind":"function","modifiers":[],"name":"setDetails","nameLocation":"701:10:180","nodeType":"FunctionDefinition","overrides":{"id":51842,"nodeType":"OverrideSpecifier","overrides":[],"src":"775:8:180"},"parameters":{"id":51841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51838,"mutability":"mutable","name":"_newName","nameLocation":"728:8:180","nodeType":"VariableDeclaration","scope":51853,"src":"712:24:180","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":51837,"name":"string","nodeType":"ElementaryTypeName","src":"712:6:180","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":51840,"mutability":"mutable","name":"_newSymbol","nameLocation":"754:10:180","nodeType":"VariableDeclaration","scope":51853,"src":"738:26:180","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":51839,"name":"string","nodeType":"ElementaryTypeName","src":"738:6:180","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"711:54:180"},"returnParameters":{"id":51843,"nodeType":"ParameterList","parameters":[],"src":"784:0:180"},"scope":51935,"src":"692:267:180","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[10769,23366],"body":{"id":51868,"nodeType":"Block","src":"1103:42:180","statements":[{"expression":{"arguments":[{"id":51865,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51855,"src":"1132:7:180","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":51863,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24039,"src":"1116:5:180","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20_$24039_$","typeString":"type(contract ERC20)"}},"id":51864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1122:9:180","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":23366,"src":"1116:15:180","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":51866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1116:24:180","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":51862,"id":51867,"nodeType":"Return","src":"1109:31:180"}]},"functionSelector":"70a08231","id":51869,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"1022:9:180","nodeType":"FunctionDefinition","overrides":{"id":51859,"nodeType":"OverrideSpecifier","overrides":[{"id":51857,"name":"ERC20","nameLocations":["1070:5:180"],"nodeType":"IdentifierPath","referencedDeclaration":24039,"src":"1070:5:180"},{"id":51858,"name":"IERC20","nameLocations":["1077:6:180"],"nodeType":"IdentifierPath","referencedDeclaration":10812,"src":"1077:6:180"}],"src":"1061:23:180"},"parameters":{"id":51856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51855,"mutability":"mutable","name":"account","nameLocation":"1040:7:180","nodeType":"VariableDeclaration","scope":51869,"src":"1032:15:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51854,"name":"address","nodeType":"ElementaryTypeName","src":"1032:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1031:17:180"},"returnParameters":{"id":51862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51861,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":51869,"src":"1094:7:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51860,"name":"uint256","nodeType":"ElementaryTypeName","src":"1094:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1093:9:180"},"scope":51935,"src":"1013:132:180","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[25882],"body":{"id":51881,"nodeType":"Block","src":"1205:33:180","statements":[{"expression":{"arguments":[{"id":51877,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51871,"src":"1217:7:180","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":51878,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51873,"src":"1226:6:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":51876,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23654,"src":"1211:5:180","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":51879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1211:22:180","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51880,"nodeType":"ExpressionStatement","src":"1211:22:180"}]},"functionSelector":"40c10f19","id":51882,"implemented":true,"kind":"function","modifiers":[],"name":"mint","nameLocation":"1158:4:180","nodeType":"FunctionDefinition","parameters":{"id":51874,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51871,"mutability":"mutable","name":"account","nameLocation":"1171:7:180","nodeType":"VariableDeclaration","scope":51882,"src":"1163:15:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51870,"name":"address","nodeType":"ElementaryTypeName","src":"1163:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":51873,"mutability":"mutable","name":"amount","nameLocation":"1188:6:180","nodeType":"VariableDeclaration","scope":51882,"src":"1180:14:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51872,"name":"uint256","nodeType":"ElementaryTypeName","src":"1180:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1162:33:180"},"returnParameters":{"id":51875,"nodeType":"ParameterList","parameters":[],"src":"1205:0:180"},"scope":51935,"src":"1149:89:180","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[25875],"body":{"id":51894,"nodeType":"Block","src":"1298:33:180","statements":[{"expression":{"arguments":[{"id":51890,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51884,"src":"1310:7:180","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":51891,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51886,"src":"1319:6:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":51889,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"1304:5:180","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":51892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1304:22:180","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":51893,"nodeType":"ExpressionStatement","src":"1304:22:180"}]},"functionSelector":"9dc29fac","id":51895,"implemented":true,"kind":"function","modifiers":[],"name":"burn","nameLocation":"1251:4:180","nodeType":"FunctionDefinition","parameters":{"id":51887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51884,"mutability":"mutable","name":"account","nameLocation":"1264:7:180","nodeType":"VariableDeclaration","scope":51895,"src":"1256:15:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":51883,"name":"address","nodeType":"ElementaryTypeName","src":"1256:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":51886,"mutability":"mutable","name":"amount","nameLocation":"1281:6:180","nodeType":"VariableDeclaration","scope":51895,"src":"1273:14:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":51885,"name":"uint256","nodeType":"ElementaryTypeName","src":"1273:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1255:33:180"},"returnParameters":{"id":51888,"nodeType":"ParameterList","parameters":[],"src":"1298:0:180"},"scope":51935,"src":"1242:89:180","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[10830,23332],"body":{"id":51907,"nodeType":"Block","src":"1421:32:180","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":51903,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24039,"src":"1434:5:180","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20_$24039_$","typeString":"type(contract ERC20)"}},"id":51904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1440:6:180","memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":23332,"src":"1434:12:180","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view returns (string memory)"}},"id":51905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1434:14:180","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":51902,"id":51906,"nodeType":"Return","src":"1427:21:180"}]},"functionSelector":"95d89b41","id":51908,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"1344:6:180","nodeType":"FunctionDefinition","overrides":{"id":51899,"nodeType":"OverrideSpecifier","overrides":[{"id":51897,"name":"ERC20","nameLocations":["1374:5:180"],"nodeType":"IdentifierPath","referencedDeclaration":24039,"src":"1374:5:180"},{"id":51898,"name":"IERC20Metadata","nameLocations":["1381:14:180"],"nodeType":"IdentifierPath","referencedDeclaration":10837,"src":"1381:14:180"}],"src":"1365:31:180"},"parameters":{"id":51896,"nodeType":"ParameterList","parameters":[],"src":"1350:2:180"},"returnParameters":{"id":51902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51901,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":51908,"src":"1406:13:180","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":51900,"name":"string","nodeType":"ElementaryTypeName","src":"1406:6:180","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1405:15:180"},"scope":51935,"src":"1335:118:180","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[10824,23322],"body":{"id":51920,"nodeType":"Block","src":"1541:30:180","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":51916,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24039,"src":"1554:5:180","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20_$24039_$","typeString":"type(contract ERC20)"}},"id":51917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1560:4:180","memberName":"name","nodeType":"MemberAccess","referencedDeclaration":23322,"src":"1554:10:180","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view returns (string memory)"}},"id":51918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1554:12:180","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":51915,"id":51919,"nodeType":"Return","src":"1547:19:180"}]},"functionSelector":"06fdde03","id":51921,"implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"1466:4:180","nodeType":"FunctionDefinition","overrides":{"id":51912,"nodeType":"OverrideSpecifier","overrides":[{"id":51910,"name":"ERC20","nameLocations":["1494:5:180"],"nodeType":"IdentifierPath","referencedDeclaration":24039,"src":"1494:5:180"},{"id":51911,"name":"IERC20Metadata","nameLocations":["1501:14:180"],"nodeType":"IdentifierPath","referencedDeclaration":10837,"src":"1501:14:180"}],"src":"1485:31:180"},"parameters":{"id":51909,"nodeType":"ParameterList","parameters":[],"src":"1470:2:180"},"returnParameters":{"id":51915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51914,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":51921,"src":"1526:13:180","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":51913,"name":"string","nodeType":"ElementaryTypeName","src":"1526:6:180","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1525:15:180"},"scope":51935,"src":"1457:114:180","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[10836,23342],"body":{"id":51933,"nodeType":"Block","src":"1655:34:180","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":51929,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24039,"src":"1668:5:180","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20_$24039_$","typeString":"type(contract ERC20)"}},"id":51930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1674:8:180","memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":23342,"src":"1668:14:180","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint8_$","typeString":"function () view returns (uint8)"}},"id":51931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1668:16:180","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":51928,"id":51932,"nodeType":"Return","src":"1661:23:180"}]},"functionSelector":"313ce567","id":51934,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"1584:8:180","nodeType":"FunctionDefinition","overrides":{"id":51925,"nodeType":"OverrideSpecifier","overrides":[{"id":51923,"name":"ERC20","nameLocations":["1616:5:180"],"nodeType":"IdentifierPath","referencedDeclaration":24039,"src":"1616:5:180"},{"id":51924,"name":"IERC20Metadata","nameLocations":["1623:14:180"],"nodeType":"IdentifierPath","referencedDeclaration":10837,"src":"1623:14:180"}],"src":"1607:31:180"},"parameters":{"id":51922,"nodeType":"ParameterList","parameters":[],"src":"1592:2:180"},"returnParameters":{"id":51928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":51927,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":51934,"src":"1648:5:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":51926,"name":"uint8","nodeType":"ElementaryTypeName","src":"1648:5:180","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1647:7:180"},"scope":51935,"src":"1575:114:180","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":51936,"src":"461:1230:180","usedErrors":[]}],"src":"39:1653:180"},"id":180}},"contracts":{"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol":{"GelatoRelayFeeCollector":{"abi":[],"devdoc":{"details":"Do not use with GelatoRelayContext - pick only one","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Do not use with GelatoRelayContext - pick only one\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol\":\"GelatoRelayFeeCollector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.1;\\n\\nimport {GelatoRelayBase} from \\\"./base/GelatoRelayBase.sol\\\";\\n\\nuint256 constant _FEE_COLLECTOR_START = 20;\\n\\n// WARNING: Do not use this free fn by itself, always inherit GelatoRelayFeeCollector\\n// solhint-disable-next-line func-visibility, private-vars-leading-underscore\\nfunction __getFeeCollector() pure returns (address feeCollector) {\\n    assembly {\\n        feeCollector := shr(\\n            96,\\n            calldataload(sub(calldatasize(), _FEE_COLLECTOR_START))\\n        )\\n    }\\n}\\n\\n/**\\n * @dev Context variant with only feeCollector appended to msg.data\\n * Expects calldata encoding:\\n *   abi.encodePacked(bytes data, address feeCollectorAddress)\\n * Therefore, we're expecting 20bytes to be appended to normal msgData\\n * 20bytes start offsets from calldatasize:\\n *    feeCollector: -20\\n */\\n/// @dev Do not use with GelatoRelayContext - pick only one\\nabstract contract GelatoRelayFeeCollector is GelatoRelayBase {\\n    function _getMsgData() internal view returns (bytes calldata) {\\n        return\\n            _isGelatoRelay(msg.sender)\\n                ? msg.data[:msg.data.length - _FEE_COLLECTOR_START]\\n                : msg.data;\\n    }\\n\\n    // Only use with GelatoRelayBase onlyGelatoRelay or `_isGelatoRelay` checks\\n    function _getFeeCollector() internal pure returns (address) {\\n        return __getFeeCollector();\\n    }\\n}\\n\",\"keccak256\":\"0x24d0c82254158c5d7cbb88bfafdab8197dbafc8be6e03d6dd13a3479bf7fc18d\",\"license\":\"MIT\"},\"@gelatonetwork/relay-context/contracts/base/GelatoRelayBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.1;\\n\\nimport {GELATO_RELAY} from \\\"../constants/GelatoRelay.sol\\\";\\n\\nabstract contract GelatoRelayBase {\\n    modifier onlyGelatoRelay() {\\n        require(_isGelatoRelay(msg.sender), \\\"onlyGelatoRelay\\\");\\n        _;\\n    }\\n\\n    function _isGelatoRelay(address _forwarder) internal pure returns (bool) {\\n        return _forwarder == GELATO_RELAY;\\n    }\\n}\\n\",\"keccak256\":\"0x8b8ca04a1b6dce1b14b0b5f59783defe5562f876f0d6127aefa3e251b7631ba1\",\"license\":\"MIT\"},\"@gelatonetwork/relay-context/contracts/constants/GelatoRelay.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.1;\\n\\naddress constant GELATO_RELAY = 0xaBcC9b596420A9E9172FD5938620E265a0f9Df92;\\naddress constant GELATO_RELAY_ERC2771 = 0xBf175FCC7086b4f9bd59d5EAE8eA67b8f940DE0d;\\n\",\"keccak256\":\"0xa3f9966896db1bfafbcb1b58d1d76b44d1cd1660986e675d57398d5a9a74d242\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@gelatonetwork/relay-context/contracts/base/GelatoRelayBase.sol":{"GelatoRelayBase":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@gelatonetwork/relay-context/contracts/base/GelatoRelayBase.sol\":\"GelatoRelayBase\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@gelatonetwork/relay-context/contracts/base/GelatoRelayBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.1;\\n\\nimport {GELATO_RELAY} from \\\"../constants/GelatoRelay.sol\\\";\\n\\nabstract contract GelatoRelayBase {\\n    modifier onlyGelatoRelay() {\\n        require(_isGelatoRelay(msg.sender), \\\"onlyGelatoRelay\\\");\\n        _;\\n    }\\n\\n    function _isGelatoRelay(address _forwarder) internal pure returns (bool) {\\n        return _forwarder == GELATO_RELAY;\\n    }\\n}\\n\",\"keccak256\":\"0x8b8ca04a1b6dce1b14b0b5f59783defe5562f876f0d6127aefa3e251b7631ba1\",\"license\":\"MIT\"},\"@gelatonetwork/relay-context/contracts/constants/GelatoRelay.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.1;\\n\\naddress constant GELATO_RELAY = 0xaBcC9b596420A9E9172FD5938620E265a0f9Df92;\\naddress constant GELATO_RELAY_ERC2771 = 0xBf175FCC7086b4f9bd59d5EAE8eA67b8f940DE0d;\\n\",\"keccak256\":\"0xa3f9966896db1bfafbcb1b58d1d76b44d1cd1660986e675d57398d5a9a74d242\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IAllowList.sol":{"IAllowList":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"NewOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldPendingOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newPendingOwner","type":"address"}],"name":"NewPendingOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":true,"internalType":"bytes4","name":"functionSig","type":"bytes4"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateCallPermission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"}],"name":"UpdatePublicAccess","type":"event"},{"inputs":[],"name":"acceptOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_caller","type":"address"},{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes4","name":"_functionSig","type":"bytes4"}],"name":"canCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_caller","type":"address"},{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes4","name":"_functionSig","type":"bytes4"}],"name":"hasSpecialAccessToCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"isAccessPublic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_callers","type":"address[]"},{"internalType":"address[]","name":"_targets","type":"address[]"},{"internalType":"bytes4[]","name":"_functionSigs","type":"bytes4[]"},{"internalType":"bool[]","name":"_enables","type":"bool[]"}],"name":"setBatchPermissionToCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_targets","type":"address[]"},{"internalType":"bool[]","name":"_enables","type":"bool[]"}],"name":"setBatchPublicAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPendingOwner","type":"address"}],"name":"setPendingOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_caller","type":"address"},{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes4","name":"_functionSig","type":"bytes4"},{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setPermissionToCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setPublicAccess","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"events":{"NewPendingOwner(address,address)":{"details":"Also emitted when the new owner is accepted and in this case, `newPendingOwner` would be zero address"}},"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"acceptOwner()":"ebbc4965","canCall(address,address,bytes4)":"b7009613","hasSpecialAccessToCall(address,address,bytes4)":"5965cf8c","isAccessPublic(address)":"df653c4c","owner()":"8da5cb5b","pendingOwner()":"e30c3978","setBatchPermissionToCall(address[],address[],bytes4[],bool[])":"507d1bed","setBatchPublicAccess(address[],bool[])":"4368d1d0","setPendingOwner(address)":"c42069ec","setPermissionToCall(address,address,bytes4,bool)":"73df5d8d","setPublicAccess(address,bool)":"8e54043c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"NewOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldPendingOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newPendingOwner\",\"type\":\"address\"}],\"name\":\"NewPendingOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"functionSig\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateCallPermission\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"newStatus\",\"type\":\"bool\"}],\"name\":\"UpdatePublicAccess\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"_functionSig\",\"type\":\"bytes4\"}],\"name\":\"canCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"_functionSig\",\"type\":\"bytes4\"}],\"name\":\"hasSpecialAccessToCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"}],\"name\":\"isAccessPublic\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_callers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_targets\",\"type\":\"address[]\"},{\"internalType\":\"bytes4[]\",\"name\":\"_functionSigs\",\"type\":\"bytes4[]\"},{\"internalType\":\"bool[]\",\"name\":\"_enables\",\"type\":\"bool[]\"}],\"name\":\"setBatchPermissionToCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_targets\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"_enables\",\"type\":\"bool[]\"}],\"name\":\"setBatchPublicAccess\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newPendingOwner\",\"type\":\"address\"}],\"name\":\"setPendingOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"_functionSig\",\"type\":\"bytes4\"},{\"internalType\":\"bool\",\"name\":\"_enable\",\"type\":\"bool\"}],\"name\":\"setPermissionToCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_enable\",\"type\":\"bool\"}],\"name\":\"setPublicAccess\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"NewPendingOwner(address,address)\":{\"details\":\"Also emitted when the new owner is accepted and in this case, `newPendingOwner` would be zero address\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"NewOwner(address)\":{\"notice\":\"Owner changed\"},\"NewPendingOwner(address,address)\":{\"notice\":\"pendingOwner is changed\"},\"UpdateCallPermission(address,address,bytes4,bool)\":{\"notice\":\"permission to call is changed\"},\"UpdatePublicAccess(address,bool)\":{\"notice\":\"public access is changed\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IAllowList.sol\":\"IAllowList\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IAllowList.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\ninterface IAllowList {\\n    /*//////////////////////////////////////////////////////////////\\n                            EVENTS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    /// @notice public access is changed\\n    event UpdatePublicAccess(address indexed target, bool newStatus);\\n\\n    /// @notice permission to call is changed\\n    event UpdateCallPermission(address indexed caller, address indexed target, bytes4 indexed functionSig, bool status);\\n\\n    /// @notice pendingOwner is changed\\n    /// @dev Also emitted when the new owner is accepted and in this case, `newPendingOwner` would be zero address\\n    event NewPendingOwner(address indexed oldPendingOwner, address indexed newPendingOwner);\\n\\n    /// @notice Owner changed\\n    event NewOwner(address indexed newOwner);\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            GETTERS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function pendingOwner() external view returns (address);\\n\\n    function owner() external view returns (address);\\n\\n    function isAccessPublic(address _target) external view returns (bool);\\n\\n    function hasSpecialAccessToCall(\\n        address _caller,\\n        address _target,\\n        bytes4 _functionSig\\n    ) external view returns (bool);\\n\\n    function canCall(\\n        address _caller,\\n        address _target,\\n        bytes4 _functionSig\\n    ) external view returns (bool);\\n\\n    /*//////////////////////////////////////////////////////////////\\n                           ALLOW LIST LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function setBatchPublicAccess(address[] calldata _targets, bool[] calldata _enables) external;\\n\\n    function setPublicAccess(address _target, bool _enable) external;\\n\\n    function setBatchPermissionToCall(\\n        address[] calldata _callers,\\n        address[] calldata _targets,\\n        bytes4[] calldata _functionSigs,\\n        bool[] calldata _enables\\n    ) external;\\n\\n    function setPermissionToCall(\\n        address _caller,\\n        address _target,\\n        bytes4 _functionSig,\\n        bool _enable\\n    ) external;\\n\\n    function setPendingOwner(address _newPendingOwner) external;\\n\\n    function acceptOwner() external;\\n}\\n\",\"keccak256\":\"0x648fee7e23d2ca13481efc07902a38b817be7606bf288902d72f81a2cabcf2f5\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"events":{"NewOwner(address)":{"notice":"Owner changed"},"NewPendingOwner(address,address)":{"notice":"pendingOwner is changed"},"UpdateCallPermission(address,address,bytes4,bool)":{"notice":"permission to call is changed"},"UpdatePublicAccess(address,bool)":{"notice":"public access is changed"}},"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Interface of the ERC20 standard as defined in the EIP.Unlike EIP-20 standard \"transfer\" and \"transferFrom\" functions do not return any value. This is made to be compatible with popular tokens that are implemented standard incorrectly.","events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"kind":"dev","methods":{"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."},"approve(address,uint256)":{"details":"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"decimals()":{"details":"Returns the decimals places of the token."},"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token."},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.Unlike EIP-20 standard \\\"transfer\\\" and \\\"transferFrom\\\" functions do not return any value. This is made to be compatible with popular tokens that are implemented standard incorrectly.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n * @dev Unlike EIP-20 standard \\\"transfer\\\" and \\\"transferFrom\\\" functions do not return any value.\\n * This is made to be compatible with popular tokens that are implemented standard incorrectly.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external;\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external;\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x5bfbd33ae826ac8185db71bb348c91010938dbb2dd0859ce908f4812ff39d2fe\",\"license\":\"UNLICENSED\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l1/contracts/common/libraries/UncheckedMath.sol":{"UncheckedMath":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206227d86dc6f5521091d4d851013331fb86686ad50ec37e12235aeb129528d23d64736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH3 0x27D86D 0xC6 CREATE2 MSTORE LT SWAP2 0xD4 0xD8 MLOAD ADD CALLER BALANCE 0xFB DUP7 PUSH9 0x6AD50EC37E12235AEB SLT SWAP6 0x28 0xD2 RETURNDATASIZE PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"72:327:5:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;72:327:5;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206227d86dc6f5521091d4d851013331fb86686ad50ec37e12235aeb129528d23d64736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH3 0x27D86D 0xC6 CREATE2 MSTORE LT SWAP2 0xD4 0xD8 MLOAD ADD CALLER BALANCE 0xFB DUP7 PUSH9 0x6AD50EC37E12235AEB SLT SWAP6 0x28 0xD2 RETURNDATASIZE PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"72:327:5:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"uncheckedAdd(uint256,uint256)":"infinite","uncheckedInc(uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l1/contracts/common/libraries/UncheckedMath.sol\":\"UncheckedMath\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l1/contracts/common/libraries/UncheckedMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nlibrary UncheckedMath {\\n    function uncheckedInc(uint256 _number) internal pure returns (uint256) {\\n        unchecked {\\n            return _number + 1;\\n        }\\n    }\\n\\n    function uncheckedAdd(uint256 _lhs, uint256 _rhs) internal pure returns (uint256) {\\n        unchecked {\\n            return _lhs + _rhs;\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7d0dff9b45338f35b32bc711192aec50973e13dc74b8e941d64586b510179c12\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l1/contracts/zksync/Plonk4VerifierWithAccessToDNext.sol":{"Plonk4VerifierWithAccessToDNext":{"abi":[{"inputs":[{"components":[{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"zero","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"alpha","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"gamma","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[9]","name":"alpha_values","type":"tuple[9]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"eta","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta_lookup","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"gamma_lookup","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta_plus_one","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta_gamma","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"v","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"u","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"z_minus_last_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"l_0_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"l_n_minus_one_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"t","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"tp","type":"tuple"}],"internalType":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState","name":"state","type":"tuple"}],"name":"compute_powers_of_alpha","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"domain_size","type":"uint256"},{"internalType":"uint256","name":"num_inputs","type":"uint256"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[2]","name":"gate_selectors_commitments","type":"tuple[2]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[7]","name":"gate_setup_commitments","type":"tuple[7]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[4]","name":"permutation_commitments","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"lookup_selector_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[4]","name":"lookup_tables_commitments","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"lookup_table_type_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[3]","name":"non_residues","type":"tuple[3]"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"internalType":"struct PairingsBn254.G2Point[2]","name":"g2_elements","type":"tuple[2]"}],"internalType":"struct VerificationKey","name":"vk","type":"tuple"},{"components":[{"internalType":"uint256[]","name":"input_values","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[4]","name":"state_polys_commitments","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"copy_permutation_grand_product_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[4]","name":"quotient_poly_parts_commitments","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[4]","name":"state_polys_openings_at_z","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[1]","name":"state_polys_openings_at_z_omega","type":"tuple[1]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[1]","name":"gate_selectors_openings_at_z","type":"tuple[1]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[3]","name":"copy_permutation_polys_openings_at_z","type":"tuple[3]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"copy_permutation_grand_product_opening_at_z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"quotient_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"linearization_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"lookup_s_poly_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"lookup_grand_product_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_s_poly_opening_at_z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_grand_product_opening_at_z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_t_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_t_poly_opening_at_z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_selector_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_table_type_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"opening_proof_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"opening_proof_at_z_omega","type":"tuple"}],"internalType":"struct Plonk4VerifierWithAccessToDNext.Proof","name":"proof","type":"tuple"},{"components":[{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"zero","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"alpha","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"gamma","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[9]","name":"alpha_values","type":"tuple[9]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"eta","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta_lookup","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"gamma_lookup","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta_plus_one","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta_gamma","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"v","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"u","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"z_minus_last_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"l_0_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"l_n_minus_one_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"t","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"tp","type":"tuple"}],"internalType":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState","name":"state","type":"tuple"}],"name":"prepare_queries","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[13]","name":"commitments_at_z","type":"tuple[13]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[13]","name":"values_at_z","type":"tuple[13]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[6]","name":"commitments_at_z_omega","type":"tuple[6]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[6]","name":"values_at_z_omega","type":"tuple[6]"}],"internalType":"struct Plonk4VerifierWithAccessToDNext.Queries","name":"queries","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"domain_size","type":"uint256"},{"internalType":"uint256","name":"num_inputs","type":"uint256"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[2]","name":"gate_selectors_commitments","type":"tuple[2]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[7]","name":"gate_setup_commitments","type":"tuple[7]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[4]","name":"permutation_commitments","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"lookup_selector_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[4]","name":"lookup_tables_commitments","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"lookup_table_type_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[3]","name":"non_residues","type":"tuple[3]"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"internalType":"struct PairingsBn254.G2Point[2]","name":"g2_elements","type":"tuple[2]"}],"internalType":"struct VerificationKey","name":"vk","type":"tuple"},{"components":[{"internalType":"uint256[]","name":"input_values","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[4]","name":"state_polys_commitments","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"copy_permutation_grand_product_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[4]","name":"quotient_poly_parts_commitments","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[4]","name":"state_polys_openings_at_z","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[1]","name":"state_polys_openings_at_z_omega","type":"tuple[1]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[1]","name":"gate_selectors_openings_at_z","type":"tuple[1]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[3]","name":"copy_permutation_polys_openings_at_z","type":"tuple[3]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"copy_permutation_grand_product_opening_at_z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"quotient_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"linearization_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"lookup_s_poly_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"lookup_grand_product_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_s_poly_opening_at_z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_grand_product_opening_at_z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_t_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_t_poly_opening_at_z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_selector_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_table_type_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"opening_proof_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"opening_proof_at_z_omega","type":"tuple"}],"internalType":"struct Plonk4VerifierWithAccessToDNext.Proof","name":"proof","type":"tuple"},{"components":[{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"zero","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"alpha","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"gamma","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[9]","name":"alpha_values","type":"tuple[9]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"eta","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta_lookup","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"gamma_lookup","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta_plus_one","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta_gamma","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"v","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"u","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"z_minus_last_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"l_0_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"l_n_minus_one_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"t","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"tp","type":"tuple"}],"internalType":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState","name":"state","type":"tuple"}],"name":"rescue_custom_gate_linearization_contribution","outputs":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"result","type":"tuple"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506114b5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806338fdad141461004657806397e2957d1461006f578063fec4e96e1461008f575b600080fd5b6100596100543660046111c0565b6100a4565b60405161006691906112ea565b60405180910390f35b61008261007d3660046111c0565b6101f9565b6040516100669190611363565b6100a261009d366004611404565b61055d565b005b604080518082019091526000808252602082015260408051602081019091526000815260408051602081019091526000815260808501516100fd9060005b60200201516040805160208101909152600081529051815290565b9150610109828061060b565b60808501516101219060015b60200201518390610625565b60808401516101399060015b6020020151839061060b565b6101438183610657565b60808501516101539060016100e2565b915061015f828061060b565b608085015161016f906002610115565b608084015161017f90600261012d565b6101898183610657565b60808501516101999060026100e2565b60808601519092506101ac90600061012d565b60808501516101bc906003610115565b60808401516101cc90600361012d565b6101d68183610657565b60608601516101ef90829060015b602002015190610671565b9695505050505050565b6102016107d2565b600260005b6004811015610284578460200151816004811061022557610225611428565b6020020151835183600d811061023d5761023d611428565b60200201526080850151816004811061025857610258611428565b6020020151836020015183600d811061027357610273611428565b602002015260019182019101610206565b50606085015151825182600d811061029e5761029e611428565b602002015260c084015160006020020151826020015182600d81106102c5576102c5611428565b602002015260010160005b6102dc6001600461143e565b811015610358578560a0015181600481106102f9576102f9611428565b6020020151835183600d811061031157610311611428565b602002015260e0850151816003811061032c5761032c611428565b6020020151836020015183600d811061034757610347611428565b6020020152600191820191016102d0565b50604084810151908301515260208401516103756001600461143e565b6004811061038557610385611428565b6020908102919091015160408401518201526101008501516060840180519190915260a0808701515191519092015260e086015151908401516000906103db906040805160208101909152600081529051815290565b905060015b600481101561042e57610403828960e0015183600481106101e4576101e4611428565b61024087018190526104169084906106b6565b60a086015161042690839061060b565b6001016103e0565b508351829084600d811061044457610444611428565b6020020181905250856101e00151846020015184600d811061046857610468611428565b602002015260c087015184516001949094019384600d811061048c5761048c611428565b6020020181905250856102200151846020015184600d81106104b0576104b0611428565b602002015261010087015184516001949094019384600d81106104d5576104d5611428565b6020020181905250856102400151846020015184600d81106104f9576104f9611428565b602002015250610160850151604084810180518201929092526101a0870151606080870180519093019190915261018088015183518201526101c0880151825190910152905160809081019290925261020090950151945101939093529392505050565b60208101515160000361056f57600080fd5b61057960016106c5565b608082018051919091526020808301805160408051808501825260008082529251815294518401949094529051835192830190935281529051815260025b60098110156106065760208301516105d090839061060b565b60408051602081019091526000815282518152836080015182600981106105f9576105f9611428565b60200201526001016105b7565b505050565b600080516020611460833981519152815183510990915250565b600080516020611460833981519152815161064e9060008051602061146083398151915261143e565b83510890915250565b600080516020611460833981519152815183510890915250565b60408051808201909152600080825260208201528251158015610698575082602001516001145b156106a557600060208401525b6106b0838383610700565b92915050565b6106c1828284610742565b5050565b60408051602081019091526000815260008051602061146083398151915282106106ee57600080fd5b50604080516020810190915290815290565b610708610811565b835181526020840151816001602002015282518160026020020152600060408360608460075afa90508061073b57600080fd5b5050505050565b815115801561075357506020820151155b1561076b578251815260209283015192019190915250565b825115801561077c57506020830151155b15610791578151815260209182015191015250565b61079961082f565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460065afa90508061073b57600080fd5b60405180608001604052806107e561084d565b81526020016107f2610887565b81526020016107ff6108bc565b815260200161080c6108e6565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806101a00160405280600d905b604080518082019091526000808252602082015281526020019060019003908161085d5790505090565b604051806101a00160405280600d905b6040805160208101909152600081528152602001906001900390816108975790505090565b604080516101008101909152600060c0820181815260e0830191909152815260056020820161085d565b6040805160e08101909152600060c082019081528152600560208201610897565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561093f5761093f610907565b60405290565b6040516102a081016001600160401b038111828210171561093f5761093f610907565b60405161026081016001600160401b038111828210171561093f5761093f610907565b60405161016081016001600160401b038111828210171561093f5761093f610907565b604051608081016001600160401b038111828210171561093f5761093f610907565b6000602082840312156109e257600080fd5b604051602081018181106001600160401b0382111715610a0457610a04610907565b6040529135825250919050565b600060408284031215610a2357600080fd5b610a2b61091d565b9050813581526020820135602082015292915050565b600082601f830112610a5257600080fd5b610a5a61091d565b806080840185811115610a6c57600080fd5b845b81811015610a9057610a808782610a11565b8452602090930192604001610a6e565b509095945050505050565b600082601f830112610aac57600080fd5b6040805160e081018181106001600160401b0382111715610acf57610acf610907565b8252806101c0850186811115610ae457600080fd5b855b81811015610b0757610af88882610a11565b83526020909201918401610ae6565b50919695505050505050565b600082601f830112610b2457600080fd5b610b2c6109ae565b80610100840185811115610b3f57600080fd5b845b81811015610a9057610b538782610a11565b8452602090930192604001610b41565b600082601f830112610b7457600080fd5b604051606081018181106001600160401b0382111715610b9657610b96610907565b604052806060840185811115610bab57600080fd5b845b81811015610bcd57610bbf87826109d0565b835260209283019201610bad565b509195945050505050565b600082601f830112610be957600080fd5b610bf161091d565b806040840185811115610c0357600080fd5b845b81811015610a90578035845260209384019301610c05565b600082601f830112610c2e57600080fd5b610c3661091d565b80610100840185811115610c4957600080fd5b845b81811015610a905760808188031215610c645760008081fd5b610c6c61091d565b610c768883610bd8565b8152610c858860408401610bd8565b6020828101919091529085529390930192608001610c4b565b600082601f830112610caf57600080fd5b813560206001600160401b0380831115610ccb57610ccb610907565b8260051b604051601f19603f83011681018181108482111715610cf057610cf0610907565b604052938452858101830193838101925087851115610d0e57600080fd5b83870191505b84821015610d2d57813583529183019190830190610d14565b979650505050505050565b600082601f830112610d4957600080fd5b610d516109ae565b806080840185811115610d6357600080fd5b845b81811015610a9057610d7787826109d0565b845260209384019301610d65565b600082601f830112610d9657600080fd5b60405160208082018281106001600160401b0382111715610db957610db9610907565b6040528184820186811115610dcd57600080fd5b855b81811015610dee57610de188826109d0565b8352918301918301610dcf565b50929695505050505050565b60006105a08284031215610e0d57600080fd5b610e15610945565b905081356001600160401b03811115610e2d57600080fd5b610e3984828501610c9e565b825250610e498360208401610b13565b6020820152610120610e5d84828501610a11565b6040830152610160610e7185828601610b13565b6060840152610260610e8586828701610d38565b6080850152610e98866102e08701610d85565b60a0850152610eab866103008701610d85565b60c0850152610ebe866103208701610b63565b60e0850152610ed18661038087016109d0565b610100850152610ee5866103a087016109d0565b83850152610ef7866103c087016109d0565b610140850152610f0b866103e08701610a11565b82850152610f1d866104208701610a11565b610180850152610f318661046087016109d0565b6101a0850152610f458661048087016109d0565b6101c0850152610f59866104a087016109d0565b6101e0850152610f6d866104c087016109d0565b610200850152610f81866104e087016109d0565b610220850152610f958661050087016109d0565b610240850152610fa9866105208701610a11565b81850152505050610fbe836105608401610a11565b61028082015292915050565b600082601f830112610fdb57600080fd5b6040516101208082018281106001600160401b0382111715610fff57610fff610907565b6040528301818582111561101257600080fd5b845b82811015610bcd5761102687826109d0565b825260209182019101611014565b6000610380828403121561104757600080fd5b61104f610968565b905061105b83836109d0565b815261106a83602084016109d0565b602082015261107c83604084016109d0565b604082015261108e83606084016109d0565b60608201526110a08360808401610fca565b60808201526101a06110b4848285016109d0565b60a08301526101c06110c8858286016109d0565b60c08401526101e06110dc868287016109d0565b60e08501526102006110f0878288016109d0565b610100860152610220611105888289016109d0565b61012087015261024061111a89828a016109d0565b61014088015261112e896102608a016109d0565b610160880152611142896102808a016109d0565b610180880152611156896102a08a016109d0565b86880152611168896102c08a016109d0565b8588015261117a896102e08a016109d0565b8488015261118c896103008a016109d0565b8388015261119e896103208a016109d0565b828801526111b0896103408a01610a11565b8188015250505050505092915050565b6000806000838503610a208112156111d757600080fd5b610680808212156111e757600080fd5b6111ef61098b565b9150853582526020860135602083015261120c87604088016109d0565b604083015261121e8760608801610a41565b60608301526112308760e08801610a9b565b6080830152611243876102a08801610b13565b60a0830152611256876103a08801610a11565b60c0830152611269876103e08801610b13565b60e083015261127c876104e08801610a11565b610100830152611290876105208801610b63565b6101208301526112a4876105808801610c1d565b6101408301529093508401356001600160401b038111156112c457600080fd5b6112d086828701610dfa565b9250506112e1856106a08601611034565b90509250925092565b8151815260208083015190820152604081016106b0565b8060005b60068110156113395761132384835180518252602090810151910152565b6040939093019260209190910190600101611305565b50505050565b8060005b600681101561133957815151845260209384019390910190600101611343565b81516107208201908260005b600d8110156113a35761138d82845180518252602090810151910152565b602092909201916040919091019060010161136f565b505050602080840151610340840160005b600d8110156113d257825151825291830191908301906001016113b4565b5050505060408301516113e96104e0840182611301565b5060608301516113fd61066084018261133f565b5092915050565b6000610380828403121561141757600080fd5b6114218383611034565b9392505050565b634e487b7160e01b600052603260045260246000fd5b818103818111156106b057634e487b7160e01b600052601160045260246000fdfe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a26469706673582212200222dfc35b6620f701e010209823da81eed2e5c79c782744b5520ed12d6da01c64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14B5 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x38FDAD14 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x97E2957D EQ PUSH2 0x6F JUMPI DUP1 PUSH4 0xFEC4E96E EQ PUSH2 0x8F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x54 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C0 JUMP JUMPDEST PUSH2 0xA4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x12EA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x82 PUSH2 0x7D CALLDATASIZE PUSH1 0x4 PUSH2 0x11C0 JUMP JUMPDEST PUSH2 0x1F9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x1363 JUMP JUMPDEST PUSH2 0xA2 PUSH2 0x9D CALLDATASIZE PUSH1 0x4 PUSH2 0x1404 JUMP JUMPDEST PUSH2 0x55D JUMP JUMPDEST STOP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0xFD SWAP1 PUSH1 0x0 JUMPDEST PUSH1 0x20 MUL ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP2 POP PUSH2 0x109 DUP3 DUP1 PUSH2 0x60B JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x121 SWAP1 PUSH1 0x1 JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 SWAP1 PUSH2 0x625 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x139 SWAP1 PUSH1 0x1 JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 SWAP1 PUSH2 0x60B JUMP JUMPDEST PUSH2 0x143 DUP2 DUP4 PUSH2 0x657 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x153 SWAP1 PUSH1 0x1 PUSH2 0xE2 JUMP JUMPDEST SWAP2 POP PUSH2 0x15F DUP3 DUP1 PUSH2 0x60B JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x16F SWAP1 PUSH1 0x2 PUSH2 0x115 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x17F SWAP1 PUSH1 0x2 PUSH2 0x12D JUMP JUMPDEST PUSH2 0x189 DUP2 DUP4 PUSH2 0x657 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x199 SWAP1 PUSH1 0x2 PUSH2 0xE2 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x1AC SWAP1 PUSH1 0x0 PUSH2 0x12D JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x1BC SWAP1 PUSH1 0x3 PUSH2 0x115 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x1CC SWAP1 PUSH1 0x3 PUSH2 0x12D JUMP JUMPDEST PUSH2 0x1D6 DUP2 DUP4 PUSH2 0x657 JUMP JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD PUSH2 0x1EF SWAP1 DUP3 SWAP1 PUSH1 0x1 JUMPDEST PUSH1 0x20 MUL ADD MLOAD SWAP1 PUSH2 0x671 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x201 PUSH2 0x7D2 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x284 JUMPI DUP5 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0x4 DUP2 LT PUSH2 0x225 JUMPI PUSH2 0x225 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 MLOAD DUP4 PUSH1 0xD DUP2 LT PUSH2 0x23D JUMPI PUSH2 0x23D PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x80 DUP6 ADD MLOAD DUP2 PUSH1 0x4 DUP2 LT PUSH2 0x258 JUMPI PUSH2 0x258 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0xD DUP2 LT PUSH2 0x273 JUMPI PUSH2 0x273 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x206 JUMP JUMPDEST POP PUSH1 0x60 DUP6 ADD MLOAD MLOAD DUP3 MLOAD DUP3 PUSH1 0xD DUP2 LT PUSH2 0x29E JUMPI PUSH2 0x29E PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x0 PUSH1 0x20 MUL ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0xD DUP2 LT PUSH2 0x2C5 JUMPI PUSH2 0x2C5 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 ADD PUSH1 0x0 JUMPDEST PUSH2 0x2DC PUSH1 0x1 PUSH1 0x4 PUSH2 0x143E JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x358 JUMPI DUP6 PUSH1 0xA0 ADD MLOAD DUP2 PUSH1 0x4 DUP2 LT PUSH2 0x2F9 JUMPI PUSH2 0x2F9 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 MLOAD DUP4 PUSH1 0xD DUP2 LT PUSH2 0x311 JUMPI PUSH2 0x311 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0xE0 DUP6 ADD MLOAD DUP2 PUSH1 0x3 DUP2 LT PUSH2 0x32C JUMPI PUSH2 0x32C PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0xD DUP2 LT PUSH2 0x347 JUMPI PUSH2 0x347 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2D0 JUMP JUMPDEST POP PUSH1 0x40 DUP5 DUP2 ADD MLOAD SWAP1 DUP4 ADD MLOAD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x375 PUSH1 0x1 PUSH1 0x4 PUSH2 0x143E JUMP JUMPDEST PUSH1 0x4 DUP2 LT PUSH2 0x385 JUMPI PUSH2 0x385 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD DUP3 ADD MSTORE PUSH2 0x100 DUP6 ADD MLOAD PUSH1 0x60 DUP5 ADD DUP1 MLOAD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP1 DUP8 ADD MLOAD MLOAD SWAP2 MLOAD SWAP1 SWAP3 ADD MSTORE PUSH1 0xE0 DUP7 ADD MLOAD MLOAD SWAP1 DUP5 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x3DB SWAP1 PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x42E JUMPI PUSH2 0x403 DUP3 DUP10 PUSH1 0xE0 ADD MLOAD DUP4 PUSH1 0x4 DUP2 LT PUSH2 0x1E4 JUMPI PUSH2 0x1E4 PUSH2 0x1428 JUMP JUMPDEST PUSH2 0x240 DUP8 ADD DUP2 SWAP1 MSTORE PUSH2 0x416 SWAP1 DUP5 SWAP1 PUSH2 0x6B6 JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MLOAD PUSH2 0x426 SWAP1 DUP4 SWAP1 PUSH2 0x60B JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x3E0 JUMP JUMPDEST POP DUP4 MLOAD DUP3 SWAP1 DUP5 PUSH1 0xD DUP2 LT PUSH2 0x444 JUMPI PUSH2 0x444 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD DUP2 SWAP1 MSTORE POP DUP6 PUSH2 0x1E0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0xD DUP2 LT PUSH2 0x468 JUMPI PUSH2 0x468 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0xC0 DUP8 ADD MLOAD DUP5 MLOAD PUSH1 0x1 SWAP5 SWAP1 SWAP5 ADD SWAP4 DUP5 PUSH1 0xD DUP2 LT PUSH2 0x48C JUMPI PUSH2 0x48C PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD DUP2 SWAP1 MSTORE POP DUP6 PUSH2 0x220 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0xD DUP2 LT PUSH2 0x4B0 JUMPI PUSH2 0x4B0 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH2 0x100 DUP8 ADD MLOAD DUP5 MLOAD PUSH1 0x1 SWAP5 SWAP1 SWAP5 ADD SWAP4 DUP5 PUSH1 0xD DUP2 LT PUSH2 0x4D5 JUMPI PUSH2 0x4D5 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD DUP2 SWAP1 MSTORE POP DUP6 PUSH2 0x240 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0xD DUP2 LT PUSH2 0x4F9 JUMPI PUSH2 0x4F9 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE POP PUSH2 0x160 DUP6 ADD MLOAD PUSH1 0x40 DUP5 DUP2 ADD DUP1 MLOAD DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x1A0 DUP8 ADD MLOAD PUSH1 0x60 DUP1 DUP8 ADD DUP1 MLOAD SWAP1 SWAP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 DUP9 ADD MLOAD DUP4 MLOAD DUP3 ADD MSTORE PUSH2 0x1C0 DUP9 ADD MLOAD DUP3 MLOAD SWAP1 SWAP2 ADD MSTORE SWAP1 MLOAD PUSH1 0x80 SWAP1 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x200 SWAP1 SWAP6 ADD MLOAD SWAP5 MLOAD ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD MLOAD PUSH1 0x0 SUB PUSH2 0x56F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x579 PUSH1 0x1 PUSH2 0x6C5 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP1 MLOAD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP1 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP6 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE SWAP3 MLOAD DUP2 MSTORE SWAP5 MLOAD DUP5 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP1 MLOAD DUP4 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP4 MSTORE DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE PUSH1 0x2 JUMPDEST PUSH1 0x9 DUP2 LT ISZERO PUSH2 0x606 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x5D0 SWAP1 DUP4 SWAP1 PUSH2 0x60B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP3 MLOAD DUP2 MSTORE DUP4 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x9 DUP2 LT PUSH2 0x5F9 JUMPI PUSH2 0x5F9 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 ADD PUSH2 0x5B7 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1460 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MLOAD DUP4 MLOAD MULMOD SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1460 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MLOAD PUSH2 0x64E SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1460 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH2 0x143E JUMP JUMPDEST DUP4 MLOAD ADDMOD SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1460 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MLOAD DUP4 MLOAD ADDMOD SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP3 MLOAD ISZERO DUP1 ISZERO PUSH2 0x698 JUMPI POP DUP3 PUSH1 0x20 ADD MLOAD PUSH1 0x1 EQ JUMPDEST ISZERO PUSH2 0x6A5 JUMPI PUSH1 0x0 PUSH1 0x20 DUP5 ADD MSTORE JUMPDEST PUSH2 0x6B0 DUP4 DUP4 DUP4 PUSH2 0x700 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x6C1 DUP3 DUP3 DUP5 PUSH2 0x742 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1460 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 LT PUSH2 0x6EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE SWAP1 DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x708 PUSH2 0x811 JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP5 ADD MLOAD DUP2 PUSH1 0x1 PUSH1 0x20 MUL ADD MSTORE DUP3 MLOAD DUP2 PUSH1 0x2 PUSH1 0x20 MUL ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP4 PUSH1 0x60 DUP5 PUSH1 0x7 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x73B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD ISZERO DUP1 ISZERO PUSH2 0x753 JUMPI POP PUSH1 0x20 DUP3 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x76B JUMPI DUP3 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST DUP3 MLOAD ISZERO DUP1 ISZERO PUSH2 0x77C JUMPI POP PUSH1 0x20 DUP4 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x791 JUMPI DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD MLOAD SWAP2 ADD MSTORE POP JUMP JUMPDEST PUSH2 0x799 PUSH2 0x82F JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP5 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x0 SWAP1 DUP4 PUSH1 0x80 DUP5 PUSH1 0x6 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x73B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x7E5 PUSH2 0x84D JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x7F2 PUSH2 0x887 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x7FF PUSH2 0x8BC JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x80C PUSH2 0x8E6 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x1A0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xD SWAP1 JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x85D JUMPI SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x1A0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xD SWAP1 JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x897 JUMPI SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH1 0xC0 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0xE0 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP3 ADD PUSH2 0x85D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH1 0xC0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP3 ADD PUSH2 0x897 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x93F JUMPI PUSH2 0x93F PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2A0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x93F JUMPI PUSH2 0x93F PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x260 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x93F JUMPI PUSH2 0x93F PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x160 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x93F JUMPI PUSH2 0x93F PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x93F JUMPI PUSH2 0x93F PUSH2 0x907 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0xA04 JUMPI PUSH2 0xA04 PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 CALLDATALOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA2B PUSH2 0x91D JUMP JUMPDEST SWAP1 POP DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA5A PUSH2 0x91D JUMP JUMPDEST DUP1 PUSH1 0x80 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0xA6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA90 JUMPI PUSH2 0xA80 DUP8 DUP3 PUSH2 0xA11 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x40 ADD PUSH2 0xA6E JUMP JUMPDEST POP SWAP1 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xAAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0xACF JUMPI PUSH2 0xACF PUSH2 0x907 JUMP JUMPDEST DUP3 MSTORE DUP1 PUSH2 0x1C0 DUP6 ADD DUP7 DUP2 GT ISZERO PUSH2 0xAE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB07 JUMPI PUSH2 0xAF8 DUP9 DUP3 PUSH2 0xA11 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 DUP5 ADD PUSH2 0xAE6 JUMP JUMPDEST POP SWAP2 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xB24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB2C PUSH2 0x9AE JUMP JUMPDEST DUP1 PUSH2 0x100 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0xB3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA90 JUMPI PUSH2 0xB53 DUP8 DUP3 PUSH2 0xA11 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x40 ADD PUSH2 0xB41 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xB74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0xB96 JUMPI PUSH2 0xB96 PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0xBAB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBCD JUMPI PUSH2 0xBBF DUP8 DUP3 PUSH2 0x9D0 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0xBAD JUMP JUMPDEST POP SWAP2 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xBE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBF1 PUSH2 0x91D JUMP JUMPDEST DUP1 PUSH1 0x40 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0xC03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA90 JUMPI DUP1 CALLDATALOAD DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0xC05 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xC2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC36 PUSH2 0x91D JUMP JUMPDEST DUP1 PUSH2 0x100 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0xC49 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA90 JUMPI PUSH1 0x80 DUP2 DUP9 SUB SLT ISZERO PUSH2 0xC64 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0xC6C PUSH2 0x91D JUMP JUMPDEST PUSH2 0xC76 DUP9 DUP4 PUSH2 0xBD8 JUMP JUMPDEST DUP2 MSTORE PUSH2 0xC85 DUP9 PUSH1 0x40 DUP5 ADD PUSH2 0xBD8 JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP6 MSTORE SWAP4 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x80 ADD PUSH2 0xC4B JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xCAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP4 GT ISZERO PUSH2 0xCCB JUMPI PUSH2 0xCCB PUSH2 0x907 JUMP JUMPDEST DUP3 PUSH1 0x5 SHL PUSH1 0x40 MLOAD PUSH1 0x1F NOT PUSH1 0x3F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT DUP5 DUP3 GT OR ISZERO PUSH2 0xCF0 JUMPI PUSH2 0xCF0 PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP4 DUP5 MSTORE DUP6 DUP2 ADD DUP4 ADD SWAP4 DUP4 DUP2 ADD SWAP3 POP DUP8 DUP6 GT ISZERO PUSH2 0xD0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP8 ADD SWAP2 POP JUMPDEST DUP5 DUP3 LT ISZERO PUSH2 0xD2D JUMPI DUP2 CALLDATALOAD DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH2 0xD14 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xD49 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD51 PUSH2 0x9AE JUMP JUMPDEST DUP1 PUSH1 0x80 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0xD63 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA90 JUMPI PUSH2 0xD77 DUP8 DUP3 PUSH2 0x9D0 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0xD65 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xD96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP3 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0xDB9 JUMPI PUSH2 0xDB9 PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MSTORE DUP2 DUP5 DUP3 ADD DUP7 DUP2 GT ISZERO PUSH2 0xDCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDEE JUMPI PUSH2 0xDE1 DUP9 DUP3 PUSH2 0x9D0 JUMP JUMPDEST DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0xDCF JUMP JUMPDEST POP SWAP3 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5A0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE15 PUSH2 0x945 JUMP JUMPDEST SWAP1 POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0xE2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE39 DUP5 DUP3 DUP6 ADD PUSH2 0xC9E JUMP JUMPDEST DUP3 MSTORE POP PUSH2 0xE49 DUP4 PUSH1 0x20 DUP5 ADD PUSH2 0xB13 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0xE5D DUP5 DUP3 DUP6 ADD PUSH2 0xA11 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x160 PUSH2 0xE71 DUP6 DUP3 DUP7 ADD PUSH2 0xB13 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x260 PUSH2 0xE85 DUP7 DUP3 DUP8 ADD PUSH2 0xD38 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0xE98 DUP7 PUSH2 0x2E0 DUP8 ADD PUSH2 0xD85 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0xEAB DUP7 PUSH2 0x300 DUP8 ADD PUSH2 0xD85 JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0xEBE DUP7 PUSH2 0x320 DUP8 ADD PUSH2 0xB63 JUMP JUMPDEST PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0xED1 DUP7 PUSH2 0x380 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0xEE5 DUP7 PUSH2 0x3A0 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST DUP4 DUP6 ADD MSTORE PUSH2 0xEF7 DUP7 PUSH2 0x3C0 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MSTORE PUSH2 0xF0B DUP7 PUSH2 0x3E0 DUP8 ADD PUSH2 0xA11 JUMP JUMPDEST DUP3 DUP6 ADD MSTORE PUSH2 0xF1D DUP7 PUSH2 0x420 DUP8 ADD PUSH2 0xA11 JUMP JUMPDEST PUSH2 0x180 DUP6 ADD MSTORE PUSH2 0xF31 DUP7 PUSH2 0x460 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x1A0 DUP6 ADD MSTORE PUSH2 0xF45 DUP7 PUSH2 0x480 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x1C0 DUP6 ADD MSTORE PUSH2 0xF59 DUP7 PUSH2 0x4A0 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x1E0 DUP6 ADD MSTORE PUSH2 0xF6D DUP7 PUSH2 0x4C0 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x200 DUP6 ADD MSTORE PUSH2 0xF81 DUP7 PUSH2 0x4E0 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x220 DUP6 ADD MSTORE PUSH2 0xF95 DUP7 PUSH2 0x500 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x240 DUP6 ADD MSTORE PUSH2 0xFA9 DUP7 PUSH2 0x520 DUP8 ADD PUSH2 0xA11 JUMP JUMPDEST DUP2 DUP6 ADD MSTORE POP POP POP PUSH2 0xFBE DUP4 PUSH2 0x560 DUP5 ADD PUSH2 0xA11 JUMP JUMPDEST PUSH2 0x280 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xFDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP1 DUP3 ADD DUP3 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0xFFF JUMPI PUSH2 0xFFF PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MSTORE DUP4 ADD DUP2 DUP6 DUP3 GT ISZERO PUSH2 0x1012 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xBCD JUMPI PUSH2 0x1026 DUP8 DUP3 PUSH2 0x9D0 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1014 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x380 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1047 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x104F PUSH2 0x968 JUMP JUMPDEST SWAP1 POP PUSH2 0x105B DUP4 DUP4 PUSH2 0x9D0 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x106A DUP4 PUSH1 0x20 DUP5 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x107C DUP4 PUSH1 0x40 DUP5 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x108E DUP4 PUSH1 0x60 DUP5 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x10A0 DUP4 PUSH1 0x80 DUP5 ADD PUSH2 0xFCA JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x10B4 DUP5 DUP3 DUP6 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x1C0 PUSH2 0x10C8 DUP6 DUP3 DUP7 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x1E0 PUSH2 0x10DC DUP7 DUP3 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x200 PUSH2 0x10F0 DUP8 DUP3 DUP9 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x220 PUSH2 0x1105 DUP9 DUP3 DUP10 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x120 DUP8 ADD MSTORE PUSH2 0x240 PUSH2 0x111A DUP10 DUP3 DUP11 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x140 DUP9 ADD MSTORE PUSH2 0x112E DUP10 PUSH2 0x260 DUP11 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x160 DUP9 ADD MSTORE PUSH2 0x1142 DUP10 PUSH2 0x280 DUP11 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x180 DUP9 ADD MSTORE PUSH2 0x1156 DUP10 PUSH2 0x2A0 DUP11 ADD PUSH2 0x9D0 JUMP JUMPDEST DUP7 DUP9 ADD MSTORE PUSH2 0x1168 DUP10 PUSH2 0x2C0 DUP11 ADD PUSH2 0x9D0 JUMP JUMPDEST DUP6 DUP9 ADD MSTORE PUSH2 0x117A DUP10 PUSH2 0x2E0 DUP11 ADD PUSH2 0x9D0 JUMP JUMPDEST DUP5 DUP9 ADD MSTORE PUSH2 0x118C DUP10 PUSH2 0x300 DUP11 ADD PUSH2 0x9D0 JUMP JUMPDEST DUP4 DUP9 ADD MSTORE PUSH2 0x119E DUP10 PUSH2 0x320 DUP11 ADD PUSH2 0x9D0 JUMP JUMPDEST DUP3 DUP9 ADD MSTORE PUSH2 0x11B0 DUP10 PUSH2 0x340 DUP11 ADD PUSH2 0xA11 JUMP JUMPDEST DUP2 DUP9 ADD MSTORE POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP6 SUB PUSH2 0xA20 DUP2 SLT ISZERO PUSH2 0x11D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x680 DUP1 DUP3 SLT ISZERO PUSH2 0x11E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11EF PUSH2 0x98B JUMP JUMPDEST SWAP2 POP DUP6 CALLDATALOAD DUP3 MSTORE PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x120C DUP8 PUSH1 0x40 DUP9 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x121E DUP8 PUSH1 0x60 DUP9 ADD PUSH2 0xA41 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x1230 DUP8 PUSH1 0xE0 DUP9 ADD PUSH2 0xA9B JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x1243 DUP8 PUSH2 0x2A0 DUP9 ADD PUSH2 0xB13 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x1256 DUP8 PUSH2 0x3A0 DUP9 ADD PUSH2 0xA11 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x1269 DUP8 PUSH2 0x3E0 DUP9 ADD PUSH2 0xB13 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x127C DUP8 PUSH2 0x4E0 DUP9 ADD PUSH2 0xA11 JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE PUSH2 0x1290 DUP8 PUSH2 0x520 DUP9 ADD PUSH2 0xB63 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE PUSH2 0x12A4 DUP8 PUSH2 0x580 DUP9 ADD PUSH2 0xC1D JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE SWAP1 SWAP4 POP DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x12C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12D0 DUP7 DUP3 DUP8 ADD PUSH2 0xDFA JUMP JUMPDEST SWAP3 POP POP PUSH2 0x12E1 DUP6 PUSH2 0x6A0 DUP7 ADD PUSH2 0x1034 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD PUSH2 0x6B0 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST PUSH1 0x6 DUP2 LT ISZERO PUSH2 0x1339 JUMPI PUSH2 0x1323 DUP5 DUP4 MLOAD DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x40 SWAP4 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x20 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1305 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST PUSH1 0x6 DUP2 LT ISZERO PUSH2 0x1339 JUMPI DUP2 MLOAD MLOAD DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1343 JUMP JUMPDEST DUP2 MLOAD PUSH2 0x720 DUP3 ADD SWAP1 DUP3 PUSH1 0x0 JUMPDEST PUSH1 0xD DUP2 LT ISZERO PUSH2 0x13A3 JUMPI PUSH2 0x138D DUP3 DUP5 MLOAD DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x20 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x136F JUMP JUMPDEST POP POP POP PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH2 0x340 DUP5 ADD PUSH1 0x0 JUMPDEST PUSH1 0xD DUP2 LT ISZERO PUSH2 0x13D2 JUMPI DUP3 MLOAD MLOAD DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x13B4 JUMP JUMPDEST POP POP POP POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x13E9 PUSH2 0x4E0 DUP5 ADD DUP3 PUSH2 0x1301 JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x13FD PUSH2 0x660 DUP5 ADD DUP3 PUSH2 0x133F JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x380 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1417 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1421 DUP4 DUP4 PUSH2 0x1034 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x6B0 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID ADDRESS PUSH5 0x4E72E131A0 0x29 0xB8 POP GASLIMIT 0xB6 DUP2 DUP2 PC 0x5D 0x28 CALLER 0xE8 BASEFEE PUSH26 0xB9709143E1F593F0000001A26469706673582212200222DFC35B PUSH7 0x20F701E0102098 0x23 0xDA DUP2 0xEE 0xD2 0xE5 0xC7 SWAP13 PUSH25 0x2744B5520ED12D6DA01C64736F6C6343000811003300000000 ","sourceMap":"817:29264:6:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@add_assign_6129":{"entryPoint":1623,"id":6129,"parameterSlots":2,"returnSlots":0},"@compute_powers_of_alpha_1226":{"entryPoint":1373,"id":1226,"parameterSlots":1,"returnSlots":0},"@copy_6066":{"entryPoint":null,"id":6066,"parameterSlots":1,"returnSlots":1},"@mul_assign_6175":{"entryPoint":1547,"id":6175,"parameterSlots":2,"returnSlots":0},"@new_fr_6049":{"entryPoint":1733,"id":6049,"parameterSlots":1,"returnSlots":1},"@point_add_assign_6470":{"entryPoint":1718,"id":6470,"parameterSlots":2,"returnSlots":0},"@point_add_into_dest_6579":{"entryPoint":1858,"id":6579,"parameterSlots":3,"returnSlots":0},"@point_mul_6747":{"entryPoint":1649,"id":6747,"parameterSlots":2,"returnSlots":1},"@point_mul_into_dest_6812":{"entryPoint":1792,"id":6812,"parameterSlots":3,"returnSlots":0},"@prepare_queries_3532":{"entryPoint":505,"id":3532,"parameterSlots":3,"returnSlots":1},"@rescue_custom_gate_linearization_contribution_2834":{"entryPoint":164,"id":2834,"parameterSlots":3,"returnSlots":1},"@sub_assign_6153":{"entryPoint":1573,"id":6153,"parameterSlots":2,"returnSlots":0},"@uncheckedInc_314":{"entryPoint":null,"id":314,"parameterSlots":1,"returnSlots":1},"abi_decode_array_struct_Fr":{"entryPoint":3384,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_struct_Fr_memory_ptr_memory_ptr":{"entryPoint":3461,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_struct_G1Point":{"entryPoint":2625,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_struct_G1Point_memory_ptr_memory_ptr":{"entryPoint":2835,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_struct_G2Point":{"entryPoint":3101,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256":{"entryPoint":3032,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn":{"entryPoint":3230,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_Fr":{"entryPoint":2512,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_G1Point":{"entryPoint":2577,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_PartialVerifierState":{"entryPoint":4148,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_Proof":{"entryPoint":3578,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_array_t_struct_Fr":{"entryPoint":2915,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_array_t_struct_Fr_memory_ptr_memory_ptr":{"entryPoint":4042,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_array_t_struct_G1Point":{"entryPoint":2715,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_PartialVerifierState_$544_memory_ptr":{"entryPoint":5124,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_VerificationKey_$387_memory_ptrt_struct$_Proof_$484_memory_ptrt_struct$_PartialVerifierState_$544_memory_ptr":{"entryPoint":4544,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_array_struct_Fr":{"entryPoint":4927,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_struct_G1Point":{"entryPoint":4865,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_struct_G1Point":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_struct$_G1Point_$6027_memory_ptr__to_t_struct$_G1Point_$6027_memory_ptr__fromStack_reversed":{"entryPoint":4842,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_Queries_$3165_memory_ptr__to_t_struct$_Queries_$3165_memory_ptr__fromStack_reversed":{"entryPoint":4963,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_2468":{"entryPoint":2333,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_2481":{"entryPoint":2373,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_2483":{"entryPoint":2408,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_2484":{"entryPoint":2443,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_5116":{"entryPoint":2478,"id":null,"parameterSlots":0,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":5182,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x12":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":5160,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":2311,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:17780:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:181"},"nodeType":"YulFunctionCall","src":"66:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:181"},"nodeType":"YulFunctionCall","src":"56:31:181"},"nodeType":"YulExpressionStatement","src":"56:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:181"},"nodeType":"YulFunctionCall","src":"96:15:181"},"nodeType":"YulExpressionStatement","src":"96:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:181"},"nodeType":"YulFunctionCall","src":"120:15:181"},"nodeType":"YulExpressionStatement","src":"120:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:181"},{"body":{"nodeType":"YulBlock","src":"192:211:181","statements":[{"nodeType":"YulAssignment","src":"202:21:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"218:4:181","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"212:5:181"},"nodeType":"YulFunctionCall","src":"212:11:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"202:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"232:35:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"254:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"262:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"250:3:181"},"nodeType":"YulFunctionCall","src":"250:17:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"236:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"342:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"344:16:181"},"nodeType":"YulFunctionCall","src":"344:18:181"},"nodeType":"YulExpressionStatement","src":"344:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"285:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"297:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"282:2:181"},"nodeType":"YulFunctionCall","src":"282:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"321:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"333:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"318:2:181"},"nodeType":"YulFunctionCall","src":"318:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"279:2:181"},"nodeType":"YulFunctionCall","src":"279:62:181"},"nodeType":"YulIf","src":"276:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"380:4:181","type":"","value":"0x40"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"386:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"373:6:181"},"nodeType":"YulFunctionCall","src":"373:24:181"},"nodeType":"YulExpressionStatement","src":"373:24:181"}]},"name":"allocate_memory_2468","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"181:6:181","type":""}],"src":"146:257:181"},{"body":{"nodeType":"YulBlock","src":"454:209:181","statements":[{"nodeType":"YulAssignment","src":"464:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"480:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"474:5:181"},"nodeType":"YulFunctionCall","src":"474:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"464:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"492:37:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"514:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"522:6:181","type":"","value":"0x02a0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"510:3:181"},"nodeType":"YulFunctionCall","src":"510:19:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"496:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"604:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"606:16:181"},"nodeType":"YulFunctionCall","src":"606:18:181"},"nodeType":"YulExpressionStatement","src":"606:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"547:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"559:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"544:2:181"},"nodeType":"YulFunctionCall","src":"544:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"583:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"595:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"580:2:181"},"nodeType":"YulFunctionCall","src":"580:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"541:2:181"},"nodeType":"YulFunctionCall","src":"541:62:181"},"nodeType":"YulIf","src":"538:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"642:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"646:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"635:6:181"},"nodeType":"YulFunctionCall","src":"635:22:181"},"nodeType":"YulExpressionStatement","src":"635:22:181"}]},"name":"allocate_memory_2481","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"443:6:181","type":""}],"src":"408:255:181"},{"body":{"nodeType":"YulBlock","src":"714:209:181","statements":[{"nodeType":"YulAssignment","src":"724:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"740:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"734:5:181"},"nodeType":"YulFunctionCall","src":"734:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"724:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"752:37:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"774:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"782:6:181","type":"","value":"0x0260"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"770:3:181"},"nodeType":"YulFunctionCall","src":"770:19:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"756:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"864:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"866:16:181"},"nodeType":"YulFunctionCall","src":"866:18:181"},"nodeType":"YulExpressionStatement","src":"866:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"807:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"819:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"804:2:181"},"nodeType":"YulFunctionCall","src":"804:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"843:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"855:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"840:2:181"},"nodeType":"YulFunctionCall","src":"840:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"801:2:181"},"nodeType":"YulFunctionCall","src":"801:62:181"},"nodeType":"YulIf","src":"798:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"902:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"906:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"895:6:181"},"nodeType":"YulFunctionCall","src":"895:22:181"},"nodeType":"YulExpressionStatement","src":"895:22:181"}]},"name":"allocate_memory_2483","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"703:6:181","type":""}],"src":"668:255:181"},{"body":{"nodeType":"YulBlock","src":"974:209:181","statements":[{"nodeType":"YulAssignment","src":"984:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1000:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"994:5:181"},"nodeType":"YulFunctionCall","src":"994:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"984:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1012:37:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1034:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1042:6:181","type":"","value":"0x0160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1030:3:181"},"nodeType":"YulFunctionCall","src":"1030:19:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1016:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1124:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1126:16:181"},"nodeType":"YulFunctionCall","src":"1126:18:181"},"nodeType":"YulExpressionStatement","src":"1126:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1067:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"1079:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1064:2:181"},"nodeType":"YulFunctionCall","src":"1064:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1103:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1115:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1100:2:181"},"nodeType":"YulFunctionCall","src":"1100:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1061:2:181"},"nodeType":"YulFunctionCall","src":"1061:62:181"},"nodeType":"YulIf","src":"1058:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1162:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1166:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1155:6:181"},"nodeType":"YulFunctionCall","src":"1155:22:181"},"nodeType":"YulExpressionStatement","src":"1155:22:181"}]},"name":"allocate_memory_2484","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"963:6:181","type":""}],"src":"928:255:181"},{"body":{"nodeType":"YulBlock","src":"1229:205:181","statements":[{"nodeType":"YulAssignment","src":"1239:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1255:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1249:5:181"},"nodeType":"YulFunctionCall","src":"1249:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1239:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1267:33:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1289:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1297:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1285:3:181"},"nodeType":"YulFunctionCall","src":"1285:15:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1271:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1375:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1377:16:181"},"nodeType":"YulFunctionCall","src":"1377:18:181"},"nodeType":"YulExpressionStatement","src":"1377:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1318:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"1330:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1315:2:181"},"nodeType":"YulFunctionCall","src":"1315:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1354:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1366:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1351:2:181"},"nodeType":"YulFunctionCall","src":"1351:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1312:2:181"},"nodeType":"YulFunctionCall","src":"1312:62:181"},"nodeType":"YulIf","src":"1309:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1413:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1417:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1406:6:181"},"nodeType":"YulFunctionCall","src":"1406:22:181"},"nodeType":"YulExpressionStatement","src":"1406:22:181"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1218:6:181","type":""}],"src":"1188:246:181"},{"body":{"nodeType":"YulBlock","src":"1485:206:181","statements":[{"nodeType":"YulAssignment","src":"1495:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1511:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1505:5:181"},"nodeType":"YulFunctionCall","src":"1505:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1495:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1523:34:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1545:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1553:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1541:3:181"},"nodeType":"YulFunctionCall","src":"1541:16:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1527:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1632:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1634:16:181"},"nodeType":"YulFunctionCall","src":"1634:18:181"},"nodeType":"YulExpressionStatement","src":"1634:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1575:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"1587:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1572:2:181"},"nodeType":"YulFunctionCall","src":"1572:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1611:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1623:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1608:2:181"},"nodeType":"YulFunctionCall","src":"1608:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1569:2:181"},"nodeType":"YulFunctionCall","src":"1569:62:181"},"nodeType":"YulIf","src":"1566:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1670:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1674:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1663:6:181"},"nodeType":"YulFunctionCall","src":"1663:22:181"},"nodeType":"YulExpressionStatement","src":"1663:22:181"}]},"name":"allocate_memory_5116","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1474:6:181","type":""}],"src":"1439:252:181"},{"body":{"nodeType":"YulBlock","src":"1755:342:181","statements":[{"body":{"nodeType":"YulBlock","src":"1799:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1808:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1811:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1801:6:181"},"nodeType":"YulFunctionCall","src":"1801:12:181"},"nodeType":"YulExpressionStatement","src":"1801:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"1776:3:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1781:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1772:3:181"},"nodeType":"YulFunctionCall","src":"1772:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"1793:4:181","type":"","value":"0x20"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1768:3:181"},"nodeType":"YulFunctionCall","src":"1768:30:181"},"nodeType":"YulIf","src":"1765:50:181"},{"nodeType":"YulVariableDeclaration","src":"1824:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1844:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1838:5:181"},"nodeType":"YulFunctionCall","src":"1838:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1828:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1856:35:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1878:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1886:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1874:3:181"},"nodeType":"YulFunctionCall","src":"1874:17:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1860:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1966:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1968:16:181"},"nodeType":"YulFunctionCall","src":"1968:18:181"},"nodeType":"YulExpressionStatement","src":"1968:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1909:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"1921:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1906:2:181"},"nodeType":"YulFunctionCall","src":"1906:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1945:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1957:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1942:2:181"},"nodeType":"YulFunctionCall","src":"1942:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1903:2:181"},"nodeType":"YulFunctionCall","src":"1903:62:181"},"nodeType":"YulIf","src":"1900:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2004:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2008:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1997:6:181"},"nodeType":"YulFunctionCall","src":"1997:22:181"},"nodeType":"YulExpressionStatement","src":"1997:22:181"},{"nodeType":"YulAssignment","src":"2028:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"2037:6:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2028:5:181"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2059:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2080:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2067:12:181"},"nodeType":"YulFunctionCall","src":"2067:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2052:6:181"},"nodeType":"YulFunctionCall","src":"2052:39:181"},"nodeType":"YulExpressionStatement","src":"2052:39:181"}]},"name":"abi_decode_struct_Fr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1726:9:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"1737:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1745:5:181","type":""}],"src":"1696:401:181"},{"body":{"nodeType":"YulBlock","src":"2166:218:181","statements":[{"body":{"nodeType":"YulBlock","src":"2210:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2219:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2222:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2212:6:181"},"nodeType":"YulFunctionCall","src":"2212:12:181"},"nodeType":"YulExpressionStatement","src":"2212:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"2187:3:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2192:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2183:3:181"},"nodeType":"YulFunctionCall","src":"2183:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"2204:4:181","type":"","value":"0x40"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2179:3:181"},"nodeType":"YulFunctionCall","src":"2179:30:181"},"nodeType":"YulIf","src":"2176:50:181"},{"nodeType":"YulAssignment","src":"2235:31:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_2468","nodeType":"YulIdentifier","src":"2244:20:181"},"nodeType":"YulFunctionCall","src":"2244:22:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2235:5:181"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2282:5:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2302:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2289:12:181"},"nodeType":"YulFunctionCall","src":"2289:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2275:6:181"},"nodeType":"YulFunctionCall","src":"2275:38:181"},"nodeType":"YulExpressionStatement","src":"2275:38:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2333:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"2340:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2329:3:181"},"nodeType":"YulFunctionCall","src":"2329:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2362:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2373:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2358:3:181"},"nodeType":"YulFunctionCall","src":"2358:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2345:12:181"},"nodeType":"YulFunctionCall","src":"2345:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2322:6:181"},"nodeType":"YulFunctionCall","src":"2322:56:181"},"nodeType":"YulExpressionStatement","src":"2322:56:181"}]},"name":"abi_decode_struct_G1Point","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2137:9:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"2148:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2156:5:181","type":""}],"src":"2102:282:181"},{"body":{"nodeType":"YulBlock","src":"2456:436:181","statements":[{"body":{"nodeType":"YulBlock","src":"2505:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2514:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2517:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2507:6:181"},"nodeType":"YulFunctionCall","src":"2507:12:181"},"nodeType":"YulExpressionStatement","src":"2507:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2484:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2492:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2480:3:181"},"nodeType":"YulFunctionCall","src":"2480:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"2499:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2476:3:181"},"nodeType":"YulFunctionCall","src":"2476:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2469:6:181"},"nodeType":"YulFunctionCall","src":"2469:35:181"},"nodeType":"YulIf","src":"2466:55:181"},{"nodeType":"YulVariableDeclaration","src":"2530:28:181","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"2541:15:181"},"nodeType":"YulFunctionCall","src":"2541:17:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"2534:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2567:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"2580:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"2571:5:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2592:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2610:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2618:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2606:3:181"},"nodeType":"YulFunctionCall","src":"2606:16:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"2596:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2650:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2659:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2662:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2652:6:181"},"nodeType":"YulFunctionCall","src":"2652:12:181"},"nodeType":"YulExpressionStatement","src":"2652:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"2637:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"2645:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2634:2:181"},"nodeType":"YulFunctionCall","src":"2634:15:181"},"nodeType":"YulIf","src":"2631:35:181"},{"nodeType":"YulVariableDeclaration","src":"2675:17:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"2686:6:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"2679:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2757:106:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2778:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2809:3:181"},{"name":"end","nodeType":"YulIdentifier","src":"2814:3:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"2783:25:181"},"nodeType":"YulFunctionCall","src":"2783:35:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2771:6:181"},"nodeType":"YulFunctionCall","src":"2771:48:181"},"nodeType":"YulExpressionStatement","src":"2771:48:181"},{"nodeType":"YulAssignment","src":"2832:21:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2843:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"2848:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2839:3:181"},"nodeType":"YulFunctionCall","src":"2839:14:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2832:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2712:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"2717:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2709:2:181"},"nodeType":"YulFunctionCall","src":"2709:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2725:23:181","statements":[{"nodeType":"YulAssignment","src":"2727:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2738:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"2743:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2734:3:181"},"nodeType":"YulFunctionCall","src":"2734:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"2727:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"2705:3:181","statements":[]},"src":"2701:162:181"},{"nodeType":"YulAssignment","src":"2872:14:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"2881:5:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"2872:5:181"}]}]},"name":"abi_decode_array_struct_G1Point","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2430:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"2438:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"2446:5:181","type":""}],"src":"2389:503:181"},{"body":{"nodeType":"YulBlock","src":"2968:625:181","statements":[{"body":{"nodeType":"YulBlock","src":"3017:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3026:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3029:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3019:6:181"},"nodeType":"YulFunctionCall","src":"3019:12:181"},"nodeType":"YulExpressionStatement","src":"3019:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2996:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3004:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2992:3:181"},"nodeType":"YulFunctionCall","src":"2992:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"3011:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2988:3:181"},"nodeType":"YulFunctionCall","src":"2988:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2981:6:181"},"nodeType":"YulFunctionCall","src":"2981:35:181"},"nodeType":"YulIf","src":"2978:55:181"},{"nodeType":"YulVariableDeclaration","src":"3042:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3052:2:181","type":"","value":"64"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3046:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3063:23:181","value":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3083:2:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3077:5:181"},"nodeType":"YulFunctionCall","src":"3077:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"3067:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3095:34:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3117:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3125:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3113:3:181"},"nodeType":"YulFunctionCall","src":"3113:16:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"3099:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3204:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"3206:16:181"},"nodeType":"YulFunctionCall","src":"3206:18:181"},"nodeType":"YulExpressionStatement","src":"3206:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3147:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"3159:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3144:2:181"},"nodeType":"YulFunctionCall","src":"3144:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3183:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"3195:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3180:2:181"},"nodeType":"YulFunctionCall","src":"3180:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"3141:2:181"},"nodeType":"YulFunctionCall","src":"3141:62:181"},"nodeType":"YulIf","src":"3138:88:181"},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3242:2:181"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3246:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3235:6:181"},"nodeType":"YulFunctionCall","src":"3235:22:181"},"nodeType":"YulExpressionStatement","src":"3235:22:181"},{"nodeType":"YulVariableDeclaration","src":"3266:17:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"3277:6:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"3270:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3292:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3310:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3318:3:181","type":"","value":"448"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3306:3:181"},"nodeType":"YulFunctionCall","src":"3306:16:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"3296:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3350:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3359:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3362:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3352:6:181"},"nodeType":"YulFunctionCall","src":"3352:12:181"},"nodeType":"YulExpressionStatement","src":"3352:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"3337:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"3345:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3334:2:181"},"nodeType":"YulFunctionCall","src":"3334:15:181"},"nodeType":"YulIf","src":"3331:35:181"},{"nodeType":"YulVariableDeclaration","src":"3375:17:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"3386:6:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"3379:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3457:106:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"3478:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3509:3:181"},{"name":"end","nodeType":"YulIdentifier","src":"3514:3:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"3483:25:181"},"nodeType":"YulFunctionCall","src":"3483:35:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3471:6:181"},"nodeType":"YulFunctionCall","src":"3471:48:181"},"nodeType":"YulExpressionStatement","src":"3471:48:181"},{"nodeType":"YulAssignment","src":"3532:21:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"3543:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"3548:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3539:3:181"},"nodeType":"YulFunctionCall","src":"3539:14:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"3532:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3412:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"3417:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3409:2:181"},"nodeType":"YulFunctionCall","src":"3409:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3425:23:181","statements":[{"nodeType":"YulAssignment","src":"3427:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3438:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3443:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3434:3:181"},"nodeType":"YulFunctionCall","src":"3434:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"3427:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"3405:3:181","statements":[]},"src":"3401:162:181"},{"nodeType":"YulAssignment","src":"3572:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"3581:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"3572:5:181"}]}]},"name":"abi_decode_t_array_t_struct_G1Point","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2942:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"2950:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"2958:5:181","type":""}],"src":"2897:696:181"},{"body":{"nodeType":"YulBlock","src":"3687:443:181","statements":[{"body":{"nodeType":"YulBlock","src":"3736:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3745:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3748:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3738:6:181"},"nodeType":"YulFunctionCall","src":"3738:12:181"},"nodeType":"YulExpressionStatement","src":"3738:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3715:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3723:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3711:3:181"},"nodeType":"YulFunctionCall","src":"3711:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"3730:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3707:3:181"},"nodeType":"YulFunctionCall","src":"3707:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3700:6:181"},"nodeType":"YulFunctionCall","src":"3700:35:181"},"nodeType":"YulIf","src":"3697:55:181"},{"nodeType":"YulVariableDeclaration","src":"3761:33:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_5116","nodeType":"YulIdentifier","src":"3772:20:181"},"nodeType":"YulFunctionCall","src":"3772:22:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"3765:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3803:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"3816:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"3807:5:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3828:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3846:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3854:3:181","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3842:3:181"},"nodeType":"YulFunctionCall","src":"3842:16:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"3832:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3886:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3895:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3898:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3888:6:181"},"nodeType":"YulFunctionCall","src":"3888:12:181"},"nodeType":"YulExpressionStatement","src":"3888:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"3873:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"3881:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3870:2:181"},"nodeType":"YulFunctionCall","src":"3870:15:181"},"nodeType":"YulIf","src":"3867:35:181"},{"nodeType":"YulVariableDeclaration","src":"3911:17:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"3922:6:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"3915:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3995:106:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4016:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4047:3:181"},{"name":"end","nodeType":"YulIdentifier","src":"4052:3:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"4021:25:181"},"nodeType":"YulFunctionCall","src":"4021:35:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4009:6:181"},"nodeType":"YulFunctionCall","src":"4009:48:181"},"nodeType":"YulExpressionStatement","src":"4009:48:181"},{"nodeType":"YulAssignment","src":"4070:21:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4081:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"4086:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4077:3:181"},"nodeType":"YulFunctionCall","src":"4077:14:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"4070:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3948:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"3953:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3945:2:181"},"nodeType":"YulFunctionCall","src":"3945:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3961:25:181","statements":[{"nodeType":"YulAssignment","src":"3963:21:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3974:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"3979:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3970:3:181"},"nodeType":"YulFunctionCall","src":"3970:14:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"3963:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"3941:3:181","statements":[]},"src":"3937:164:181"},{"nodeType":"YulAssignment","src":"4110:14:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"4119:5:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"4110:5:181"}]}]},"name":"abi_decode_array_struct_G1Point_memory_ptr_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3661:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"3669:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"3677:5:181","type":""}],"src":"3598:532:181"},{"body":{"nodeType":"YulBlock","src":"4201:599:181","statements":[{"body":{"nodeType":"YulBlock","src":"4250:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4259:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4262:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4252:6:181"},"nodeType":"YulFunctionCall","src":"4252:12:181"},"nodeType":"YulExpressionStatement","src":"4252:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4229:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4237:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4225:3:181"},"nodeType":"YulFunctionCall","src":"4225:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"4244:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4221:3:181"},"nodeType":"YulFunctionCall","src":"4221:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4214:6:181"},"nodeType":"YulFunctionCall","src":"4214:35:181"},"nodeType":"YulIf","src":"4211:55:181"},{"nodeType":"YulVariableDeclaration","src":"4275:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4295:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4289:5:181"},"nodeType":"YulFunctionCall","src":"4289:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"4279:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4307:33:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4329:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4337:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4325:3:181"},"nodeType":"YulFunctionCall","src":"4325:15:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"4311:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4415:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"4417:16:181"},"nodeType":"YulFunctionCall","src":"4417:18:181"},"nodeType":"YulExpressionStatement","src":"4417:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4358:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"4370:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4355:2:181"},"nodeType":"YulFunctionCall","src":"4355:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4394:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"4406:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4391:2:181"},"nodeType":"YulFunctionCall","src":"4391:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"4352:2:181"},"nodeType":"YulFunctionCall","src":"4352:62:181"},"nodeType":"YulIf","src":"4349:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4453:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4457:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4446:6:181"},"nodeType":"YulFunctionCall","src":"4446:22:181"},"nodeType":"YulExpressionStatement","src":"4446:22:181"},{"nodeType":"YulVariableDeclaration","src":"4477:17:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"4488:6:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"4481:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4503:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4521:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4529:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4517:3:181"},"nodeType":"YulFunctionCall","src":"4517:15:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"4507:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4560:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4569:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4572:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4562:6:181"},"nodeType":"YulFunctionCall","src":"4562:12:181"},"nodeType":"YulExpressionStatement","src":"4562:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"4547:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"4555:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4544:2:181"},"nodeType":"YulFunctionCall","src":"4544:15:181"},"nodeType":"YulIf","src":"4541:35:181"},{"nodeType":"YulVariableDeclaration","src":"4585:17:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"4596:6:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"4589:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4669:101:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4690:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4716:3:181"},{"name":"end","nodeType":"YulIdentifier","src":"4721:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"4695:20:181"},"nodeType":"YulFunctionCall","src":"4695:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4683:6:181"},"nodeType":"YulFunctionCall","src":"4683:43:181"},"nodeType":"YulExpressionStatement","src":"4683:43:181"},{"nodeType":"YulAssignment","src":"4739:21:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4750:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"4755:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4746:3:181"},"nodeType":"YulFunctionCall","src":"4746:14:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"4739:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4622:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"4627:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4619:2:181"},"nodeType":"YulFunctionCall","src":"4619:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4635:25:181","statements":[{"nodeType":"YulAssignment","src":"4637:21:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4648:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"4653:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4644:3:181"},"nodeType":"YulFunctionCall","src":"4644:14:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"4637:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"4615:3:181","statements":[]},"src":"4611:159:181"},{"nodeType":"YulAssignment","src":"4779:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"4788:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"4779:5:181"}]}]},"name":"abi_decode_t_array_t_struct_Fr","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"4175:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"4183:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"4191:5:181","type":""}],"src":"4135:665:181"},{"body":{"nodeType":"YulBlock","src":"4865:419:181","statements":[{"body":{"nodeType":"YulBlock","src":"4914:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4923:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4926:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4916:6:181"},"nodeType":"YulFunctionCall","src":"4916:12:181"},"nodeType":"YulExpressionStatement","src":"4916:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4893:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4901:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4889:3:181"},"nodeType":"YulFunctionCall","src":"4889:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"4908:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4885:3:181"},"nodeType":"YulFunctionCall","src":"4885:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4878:6:181"},"nodeType":"YulFunctionCall","src":"4878:35:181"},"nodeType":"YulIf","src":"4875:55:181"},{"nodeType":"YulVariableDeclaration","src":"4939:28:181","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"4950:15:181"},"nodeType":"YulFunctionCall","src":"4950:17:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"4943:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4976:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"4989:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"4980:5:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5001:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5019:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5027:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5015:3:181"},"nodeType":"YulFunctionCall","src":"5015:15:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"5005:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5058:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5067:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5070:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5060:6:181"},"nodeType":"YulFunctionCall","src":"5060:12:181"},"nodeType":"YulExpressionStatement","src":"5060:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"5045:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"5053:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5042:2:181"},"nodeType":"YulFunctionCall","src":"5042:15:181"},"nodeType":"YulIf","src":"5039:35:181"},{"nodeType":"YulVariableDeclaration","src":"5083:17:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"5094:6:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"5087:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5167:88:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5188:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5206:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5193:12:181"},"nodeType":"YulFunctionCall","src":"5193:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5181:6:181"},"nodeType":"YulFunctionCall","src":"5181:30:181"},"nodeType":"YulExpressionStatement","src":"5181:30:181"},{"nodeType":"YulAssignment","src":"5224:21:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5235:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"5240:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5231:3:181"},"nodeType":"YulFunctionCall","src":"5231:14:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"5224:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5120:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"5125:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5117:2:181"},"nodeType":"YulFunctionCall","src":"5117:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5133:25:181","statements":[{"nodeType":"YulAssignment","src":"5135:21:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5146:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"5151:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5142:3:181"},"nodeType":"YulFunctionCall","src":"5142:14:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"5135:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"5113:3:181","statements":[]},"src":"5109:146:181"},{"nodeType":"YulAssignment","src":"5264:14:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"5273:5:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"5264:5:181"}]}]},"name":"abi_decode_array_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"4839:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"4847:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"4855:5:181","type":""}],"src":"4805:479:181"},{"body":{"nodeType":"YulBlock","src":"5356:775:181","statements":[{"body":{"nodeType":"YulBlock","src":"5405:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5414:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5417:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5407:6:181"},"nodeType":"YulFunctionCall","src":"5407:12:181"},"nodeType":"YulExpressionStatement","src":"5407:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5384:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5392:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5380:3:181"},"nodeType":"YulFunctionCall","src":"5380:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"5399:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5376:3:181"},"nodeType":"YulFunctionCall","src":"5376:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5369:6:181"},"nodeType":"YulFunctionCall","src":"5369:35:181"},"nodeType":"YulIf","src":"5366:55:181"},{"nodeType":"YulVariableDeclaration","src":"5430:28:181","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"5441:15:181"},"nodeType":"YulFunctionCall","src":"5441:17:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"5434:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5467:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"5480:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"5471:5:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5492:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5510:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5518:3:181","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5506:3:181"},"nodeType":"YulFunctionCall","src":"5506:16:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"5496:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5550:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5559:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5562:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5552:6:181"},"nodeType":"YulFunctionCall","src":"5552:12:181"},"nodeType":"YulExpressionStatement","src":"5552:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"5537:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"5545:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5534:2:181"},"nodeType":"YulFunctionCall","src":"5534:15:181"},"nodeType":"YulIf","src":"5531:35:181"},{"nodeType":"YulVariableDeclaration","src":"5575:17:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"5586:6:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"5579:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5659:443:181","statements":[{"body":{"nodeType":"YulBlock","src":"5713:74:181","statements":[{"nodeType":"YulVariableDeclaration","src":"5731:11:181","value":{"kind":"number","nodeType":"YulLiteral","src":"5741:1:181","type":"","value":"0"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5735:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"5766:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5770:2:181"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5759:6:181"},"nodeType":"YulFunctionCall","src":"5759:14:181"},"nodeType":"YulExpressionStatement","src":"5759:14:181"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"5684:3:181"},{"name":"src","nodeType":"YulIdentifier","src":"5689:3:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5680:3:181"},"nodeType":"YulFunctionCall","src":"5680:13:181"},{"kind":"number","nodeType":"YulLiteral","src":"5695:4:181","type":"","value":"0x80"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5676:3:181"},"nodeType":"YulFunctionCall","src":"5676:24:181"},"nodeType":"YulIf","src":"5673:114:181"},{"nodeType":"YulVariableDeclaration","src":"5800:35:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_2468","nodeType":"YulIdentifier","src":"5813:20:181"},"nodeType":"YulFunctionCall","src":"5813:22:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5804:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5855:5:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5887:3:181"},{"name":"end","nodeType":"YulIdentifier","src":"5892:3:181"}],"functionName":{"name":"abi_decode_array_uint256","nodeType":"YulIdentifier","src":"5862:24:181"},"nodeType":"YulFunctionCall","src":"5862:34:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5848:6:181"},"nodeType":"YulFunctionCall","src":"5848:49:181"},"nodeType":"YulExpressionStatement","src":"5848:49:181"},{"nodeType":"YulVariableDeclaration","src":"5910:53:181","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5949:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"5954:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5945:3:181"},"nodeType":"YulFunctionCall","src":"5945:12:181"},{"name":"end","nodeType":"YulIdentifier","src":"5959:3:181"}],"functionName":{"name":"abi_decode_array_uint256","nodeType":"YulIdentifier","src":"5920:24:181"},"nodeType":"YulFunctionCall","src":"5920:43:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"5914:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5976:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"5986:4:181","type":"","value":"0x20"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"5980:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6014:5:181"},{"name":"_3","nodeType":"YulIdentifier","src":"6021:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6010:3:181"},"nodeType":"YulFunctionCall","src":"6010:14:181"},{"name":"_2","nodeType":"YulIdentifier","src":"6026:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6003:6:181"},"nodeType":"YulFunctionCall","src":"6003:26:181"},"nodeType":"YulExpressionStatement","src":"6003:26:181"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6049:3:181"},{"name":"value","nodeType":"YulIdentifier","src":"6054:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6042:6:181"},"nodeType":"YulFunctionCall","src":"6042:18:181"},"nodeType":"YulExpressionStatement","src":"6042:18:181"},{"nodeType":"YulAssignment","src":"6073:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6084:3:181"},{"name":"_3","nodeType":"YulIdentifier","src":"6089:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6080:3:181"},"nodeType":"YulFunctionCall","src":"6080:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"6073:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5612:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"5617:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5609:2:181"},"nodeType":"YulFunctionCall","src":"5609:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5625:25:181","statements":[{"nodeType":"YulAssignment","src":"5627:21:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5638:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"5643:4:181","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5634:3:181"},"nodeType":"YulFunctionCall","src":"5634:14:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"5627:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"5605:3:181","statements":[]},"src":"5601:501:181"},{"nodeType":"YulAssignment","src":"6111:14:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"6120:5:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"6111:5:181"}]}]},"name":"abi_decode_array_struct_G2Point","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"5330:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"5338:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"5346:5:181","type":""}],"src":"5289:842:181"},{"body":{"nodeType":"YulBlock","src":"6200:838:181","statements":[{"body":{"nodeType":"YulBlock","src":"6249:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6258:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6261:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6251:6:181"},"nodeType":"YulFunctionCall","src":"6251:12:181"},"nodeType":"YulExpressionStatement","src":"6251:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6228:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6236:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6224:3:181"},"nodeType":"YulFunctionCall","src":"6224:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"6243:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6220:3:181"},"nodeType":"YulFunctionCall","src":"6220:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6213:6:181"},"nodeType":"YulFunctionCall","src":"6213:35:181"},"nodeType":"YulIf","src":"6210:55:181"},{"nodeType":"YulVariableDeclaration","src":"6274:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6297:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6284:12:181"},"nodeType":"YulFunctionCall","src":"6284:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6278:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6313:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6323:4:181","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"6317:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6336:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6346:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"6340:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6387:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"6389:16:181"},"nodeType":"YulFunctionCall","src":"6389:18:181"},"nodeType":"YulExpressionStatement","src":"6389:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"6379:2:181"},{"name":"_3","nodeType":"YulIdentifier","src":"6383:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6376:2:181"},"nodeType":"YulFunctionCall","src":"6376:10:181"},"nodeType":"YulIf","src":"6373:36:181"},{"nodeType":"YulVariableDeclaration","src":"6418:20:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6432:1:181","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"6435:2:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6428:3:181"},"nodeType":"YulFunctionCall","src":"6428:10:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"6422:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6447:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6467:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6461:5:181"},"nodeType":"YulFunctionCall","src":"6461:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"6451:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6479:56:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6501:6:181"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"6517:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"6521:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6513:3:181"},"nodeType":"YulFunctionCall","src":"6513:11:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6530:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6526:3:181"},"nodeType":"YulFunctionCall","src":"6526:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6509:3:181"},"nodeType":"YulFunctionCall","src":"6509:25:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6497:3:181"},"nodeType":"YulFunctionCall","src":"6497:38:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"6483:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6594:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"6596:16:181"},"nodeType":"YulFunctionCall","src":"6596:18:181"},"nodeType":"YulExpressionStatement","src":"6596:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6553:10:181"},{"name":"_3","nodeType":"YulIdentifier","src":"6565:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6550:2:181"},"nodeType":"YulFunctionCall","src":"6550:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6573:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"6585:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6570:2:181"},"nodeType":"YulFunctionCall","src":"6570:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"6547:2:181"},"nodeType":"YulFunctionCall","src":"6547:46:181"},"nodeType":"YulIf","src":"6544:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6632:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6636:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6625:6:181"},"nodeType":"YulFunctionCall","src":"6625:22:181"},"nodeType":"YulExpressionStatement","src":"6625:22:181"},{"nodeType":"YulVariableDeclaration","src":"6656:17:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"6667:6:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"6660:3:181","type":""}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6689:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6697:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6682:6:181"},"nodeType":"YulFunctionCall","src":"6682:18:181"},"nodeType":"YulExpressionStatement","src":"6682:18:181"},{"nodeType":"YulAssignment","src":"6709:22:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6720:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"6728:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6716:3:181"},"nodeType":"YulFunctionCall","src":"6716:15:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"6709:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"6740:38:181","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6762:6:181"},{"name":"_4","nodeType":"YulIdentifier","src":"6770:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6758:3:181"},"nodeType":"YulFunctionCall","src":"6758:15:181"},{"name":"_2","nodeType":"YulIdentifier","src":"6775:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6754:3:181"},"nodeType":"YulFunctionCall","src":"6754:24:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"6744:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6806:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6815:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6818:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6808:6:181"},"nodeType":"YulFunctionCall","src":"6808:12:181"},"nodeType":"YulExpressionStatement","src":"6808:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"6793:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"6801:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6790:2:181"},"nodeType":"YulFunctionCall","src":"6790:15:181"},"nodeType":"YulIf","src":"6787:35:181"},{"nodeType":"YulVariableDeclaration","src":"6831:26:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6846:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"6854:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6842:3:181"},"nodeType":"YulFunctionCall","src":"6842:15:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"6835:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6922:86:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6943:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"6961:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6948:12:181"},"nodeType":"YulFunctionCall","src":"6948:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6936:6:181"},"nodeType":"YulFunctionCall","src":"6936:30:181"},"nodeType":"YulExpressionStatement","src":"6936:30:181"},{"nodeType":"YulAssignment","src":"6979:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6990:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"6995:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6986:3:181"},"nodeType":"YulFunctionCall","src":"6986:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"6979:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"6877:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"6882:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6874:2:181"},"nodeType":"YulFunctionCall","src":"6874:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6890:23:181","statements":[{"nodeType":"YulAssignment","src":"6892:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"6903:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"6908:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6899:3:181"},"nodeType":"YulFunctionCall","src":"6899:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"6892:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"6870:3:181","statements":[]},"src":"6866:142:181"},{"nodeType":"YulAssignment","src":"7017:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"7026:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"7017:5:181"}]}]},"name":"abi_decode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"6174:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"6182:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"6190:5:181","type":""}],"src":"6136:902:181"},{"body":{"nodeType":"YulBlock","src":"7105:438:181","statements":[{"body":{"nodeType":"YulBlock","src":"7154:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7163:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7166:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7156:6:181"},"nodeType":"YulFunctionCall","src":"7156:12:181"},"nodeType":"YulExpressionStatement","src":"7156:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7133:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"7141:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7129:3:181"},"nodeType":"YulFunctionCall","src":"7129:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"7148:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7125:3:181"},"nodeType":"YulFunctionCall","src":"7125:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7118:6:181"},"nodeType":"YulFunctionCall","src":"7118:35:181"},"nodeType":"YulIf","src":"7115:55:181"},{"nodeType":"YulVariableDeclaration","src":"7179:33:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_5116","nodeType":"YulIdentifier","src":"7190:20:181"},"nodeType":"YulFunctionCall","src":"7190:22:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"7183:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7221:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"7234:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"7225:5:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7246:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7264:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"7272:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7260:3:181"},"nodeType":"YulFunctionCall","src":"7260:16:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"7250:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7304:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7313:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7316:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7306:6:181"},"nodeType":"YulFunctionCall","src":"7306:12:181"},"nodeType":"YulExpressionStatement","src":"7306:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"7291:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"7299:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7288:2:181"},"nodeType":"YulFunctionCall","src":"7288:15:181"},"nodeType":"YulIf","src":"7285:35:181"},{"nodeType":"YulVariableDeclaration","src":"7329:17:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"7340:6:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"7333:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7413:101:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"7434:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"7460:3:181"},{"name":"end","nodeType":"YulIdentifier","src":"7465:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"7439:20:181"},"nodeType":"YulFunctionCall","src":"7439:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7427:6:181"},"nodeType":"YulFunctionCall","src":"7427:43:181"},"nodeType":"YulExpressionStatement","src":"7427:43:181"},{"nodeType":"YulAssignment","src":"7483:21:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"7494:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"7499:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7490:3:181"},"nodeType":"YulFunctionCall","src":"7490:14:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"7483:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"7366:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"7371:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7363:2:181"},"nodeType":"YulFunctionCall","src":"7363:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"7379:25:181","statements":[{"nodeType":"YulAssignment","src":"7381:21:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"7392:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"7397:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7388:3:181"},"nodeType":"YulFunctionCall","src":"7388:14:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"7381:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"7359:3:181","statements":[]},"src":"7355:159:181"},{"nodeType":"YulAssignment","src":"7523:14:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"7532:5:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"7523:5:181"}]}]},"name":"abi_decode_array_struct_Fr","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7079:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"7087:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"7095:5:181","type":""}],"src":"7043:500:181"},{"body":{"nodeType":"YulBlock","src":"7632:616:181","statements":[{"body":{"nodeType":"YulBlock","src":"7681:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7690:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7693:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7683:6:181"},"nodeType":"YulFunctionCall","src":"7683:12:181"},"nodeType":"YulExpressionStatement","src":"7683:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7660:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"7668:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7656:3:181"},"nodeType":"YulFunctionCall","src":"7656:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"7675:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7652:3:181"},"nodeType":"YulFunctionCall","src":"7652:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7645:6:181"},"nodeType":"YulFunctionCall","src":"7645:35:181"},"nodeType":"YulIf","src":"7642:55:181"},{"nodeType":"YulVariableDeclaration","src":"7706:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7726:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7720:5:181"},"nodeType":"YulFunctionCall","src":"7720:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"7710:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7738:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7748:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7742:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7759:33:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7781:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7789:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7777:3:181"},"nodeType":"YulFunctionCall","src":"7777:15:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"7763:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7867:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7869:16:181"},"nodeType":"YulFunctionCall","src":"7869:18:181"},"nodeType":"YulExpressionStatement","src":"7869:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7810:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"7822:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7807:2:181"},"nodeType":"YulFunctionCall","src":"7807:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7846:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"7858:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7843:2:181"},"nodeType":"YulFunctionCall","src":"7843:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7804:2:181"},"nodeType":"YulFunctionCall","src":"7804:62:181"},"nodeType":"YulIf","src":"7801:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7905:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7909:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7898:6:181"},"nodeType":"YulFunctionCall","src":"7898:22:181"},"nodeType":"YulExpressionStatement","src":"7898:22:181"},{"nodeType":"YulVariableDeclaration","src":"7929:17:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"7940:6:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"7933:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7955:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7973:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7981:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7969:3:181"},"nodeType":"YulFunctionCall","src":"7969:15:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"7959:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8012:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8021:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8024:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8014:6:181"},"nodeType":"YulFunctionCall","src":"8014:12:181"},"nodeType":"YulExpressionStatement","src":"8014:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"7999:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"8007:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7996:2:181"},"nodeType":"YulFunctionCall","src":"7996:15:181"},"nodeType":"YulIf","src":"7993:35:181"},{"nodeType":"YulVariableDeclaration","src":"8037:17:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"8048:6:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"8041:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8119:99:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"8140:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"8166:3:181"},{"name":"end","nodeType":"YulIdentifier","src":"8171:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"8145:20:181"},"nodeType":"YulFunctionCall","src":"8145:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8133:6:181"},"nodeType":"YulFunctionCall","src":"8133:43:181"},"nodeType":"YulExpressionStatement","src":"8133:43:181"},{"nodeType":"YulAssignment","src":"8189:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"8200:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8205:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8196:3:181"},"nodeType":"YulFunctionCall","src":"8196:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"8189:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"8074:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"8079:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8071:2:181"},"nodeType":"YulFunctionCall","src":"8071:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"8087:23:181","statements":[{"nodeType":"YulAssignment","src":"8089:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"8100:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8105:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8096:3:181"},"nodeType":"YulFunctionCall","src":"8096:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"8089:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"8067:3:181","statements":[]},"src":"8063:155:181"},{"nodeType":"YulAssignment","src":"8227:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"8236:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"8227:5:181"}]}]},"name":"abi_decode_array_struct_Fr_memory_ptr_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7606:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"7614:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"7622:5:181","type":""}],"src":"7548:700:181"},{"body":{"nodeType":"YulBlock","src":"8315:2160:181","statements":[{"body":{"nodeType":"YulBlock","src":"8361:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8370:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8373:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8363:6:181"},"nodeType":"YulFunctionCall","src":"8363:12:181"},"nodeType":"YulExpressionStatement","src":"8363:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"8336:3:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8341:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8332:3:181"},"nodeType":"YulFunctionCall","src":"8332:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"8353:6:181","type":"","value":"0x05a0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8328:3:181"},"nodeType":"YulFunctionCall","src":"8328:32:181"},"nodeType":"YulIf","src":"8325:52:181"},{"nodeType":"YulAssignment","src":"8386:31:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_2481","nodeType":"YulIdentifier","src":"8395:20:181"},"nodeType":"YulFunctionCall","src":"8395:22:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"8386:5:181"}]},{"nodeType":"YulVariableDeclaration","src":"8426:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8453:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8440:12:181"},"nodeType":"YulFunctionCall","src":"8440:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"8430:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8506:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8515:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8518:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8508:6:181"},"nodeType":"YulFunctionCall","src":"8508:12:181"},"nodeType":"YulExpressionStatement","src":"8508:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8478:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8486:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8475:2:181"},"nodeType":"YulFunctionCall","src":"8475:30:181"},"nodeType":"YulIf","src":"8472:50:181"},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8538:5:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8578:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"8589:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8574:3:181"},"nodeType":"YulFunctionCall","src":"8574:22:181"},{"name":"end","nodeType":"YulIdentifier","src":"8598:3:181"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nodeType":"YulIdentifier","src":"8545:28:181"},"nodeType":"YulFunctionCall","src":"8545:57:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8531:6:181"},"nodeType":"YulFunctionCall","src":"8531:72:181"},"nodeType":"YulExpressionStatement","src":"8531:72:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8623:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"8630:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8619:3:181"},"nodeType":"YulFunctionCall","src":"8619:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8693:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8704:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8689:3:181"},"nodeType":"YulFunctionCall","src":"8689:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"8709:3:181"}],"functionName":{"name":"abi_decode_array_struct_G1Point_memory_ptr_memory_ptr","nodeType":"YulIdentifier","src":"8635:53:181"},"nodeType":"YulFunctionCall","src":"8635:78:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8612:6:181"},"nodeType":"YulFunctionCall","src":"8612:102:181"},"nodeType":"YulExpressionStatement","src":"8612:102:181"},{"nodeType":"YulVariableDeclaration","src":"8723:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8733:3:181","type":"","value":"288"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8727:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8756:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"8763:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8752:3:181"},"nodeType":"YulFunctionCall","src":"8752:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8800:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8811:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8796:3:181"},"nodeType":"YulFunctionCall","src":"8796:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"8816:3:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"8770:25:181"},"nodeType":"YulFunctionCall","src":"8770:50:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8745:6:181"},"nodeType":"YulFunctionCall","src":"8745:76:181"},"nodeType":"YulExpressionStatement","src":"8745:76:181"},{"nodeType":"YulVariableDeclaration","src":"8830:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8840:3:181","type":"","value":"352"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"8834:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8863:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"8870:4:181","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8859:3:181"},"nodeType":"YulFunctionCall","src":"8859:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8935:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"8946:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8931:3:181"},"nodeType":"YulFunctionCall","src":"8931:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"8951:3:181"}],"functionName":{"name":"abi_decode_array_struct_G1Point_memory_ptr_memory_ptr","nodeType":"YulIdentifier","src":"8877:53:181"},"nodeType":"YulFunctionCall","src":"8877:78:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8852:6:181"},"nodeType":"YulFunctionCall","src":"8852:104:181"},"nodeType":"YulExpressionStatement","src":"8852:104:181"},{"nodeType":"YulVariableDeclaration","src":"8965:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8975:3:181","type":"","value":"608"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"8969:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8998:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9005:4:181","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8994:3:181"},"nodeType":"YulFunctionCall","src":"8994:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9043:9:181"},{"name":"_3","nodeType":"YulIdentifier","src":"9054:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9039:3:181"},"nodeType":"YulFunctionCall","src":"9039:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"9059:3:181"}],"functionName":{"name":"abi_decode_array_struct_Fr","nodeType":"YulIdentifier","src":"9012:26:181"},"nodeType":"YulFunctionCall","src":"9012:51:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8987:6:181"},"nodeType":"YulFunctionCall","src":"8987:77:181"},"nodeType":"YulExpressionStatement","src":"8987:77:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9084:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9091:4:181","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9080:3:181"},"nodeType":"YulFunctionCall","src":"9080:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9151:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9162:3:181","type":"","value":"736"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9147:3:181"},"nodeType":"YulFunctionCall","src":"9147:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"9168:3:181"}],"functionName":{"name":"abi_decode_array_struct_Fr_memory_ptr_memory_ptr","nodeType":"YulIdentifier","src":"9098:48:181"},"nodeType":"YulFunctionCall","src":"9098:74:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9073:6:181"},"nodeType":"YulFunctionCall","src":"9073:100:181"},"nodeType":"YulExpressionStatement","src":"9073:100:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9193:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9200:4:181","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9189:3:181"},"nodeType":"YulFunctionCall","src":"9189:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9260:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9271:3:181","type":"","value":"768"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9256:3:181"},"nodeType":"YulFunctionCall","src":"9256:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"9277:3:181"}],"functionName":{"name":"abi_decode_array_struct_Fr_memory_ptr_memory_ptr","nodeType":"YulIdentifier","src":"9207:48:181"},"nodeType":"YulFunctionCall","src":"9207:74:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9182:6:181"},"nodeType":"YulFunctionCall","src":"9182:100:181"},"nodeType":"YulExpressionStatement","src":"9182:100:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9302:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9309:4:181","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9298:3:181"},"nodeType":"YulFunctionCall","src":"9298:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9351:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9362:3:181","type":"","value":"800"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9347:3:181"},"nodeType":"YulFunctionCall","src":"9347:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"9368:3:181"}],"functionName":{"name":"abi_decode_t_array_t_struct_Fr","nodeType":"YulIdentifier","src":"9316:30:181"},"nodeType":"YulFunctionCall","src":"9316:56:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9291:6:181"},"nodeType":"YulFunctionCall","src":"9291:82:181"},"nodeType":"YulExpressionStatement","src":"9291:82:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9393:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9400:6:181","type":"","value":"0x0100"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9389:3:181"},"nodeType":"YulFunctionCall","src":"9389:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9434:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9445:3:181","type":"","value":"896"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9430:3:181"},"nodeType":"YulFunctionCall","src":"9430:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"9451:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"9409:20:181"},"nodeType":"YulFunctionCall","src":"9409:46:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9382:6:181"},"nodeType":"YulFunctionCall","src":"9382:74:181"},"nodeType":"YulExpressionStatement","src":"9382:74:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9476:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9483:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9472:3:181"},"nodeType":"YulFunctionCall","src":"9472:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9513:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9524:3:181","type":"","value":"928"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9509:3:181"},"nodeType":"YulFunctionCall","src":"9509:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"9530:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"9488:20:181"},"nodeType":"YulFunctionCall","src":"9488:46:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9465:6:181"},"nodeType":"YulFunctionCall","src":"9465:70:181"},"nodeType":"YulExpressionStatement","src":"9465:70:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9555:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9562:6:181","type":"","value":"0x0140"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9551:3:181"},"nodeType":"YulFunctionCall","src":"9551:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9596:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9607:3:181","type":"","value":"960"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9592:3:181"},"nodeType":"YulFunctionCall","src":"9592:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"9613:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"9571:20:181"},"nodeType":"YulFunctionCall","src":"9571:46:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9544:6:181"},"nodeType":"YulFunctionCall","src":"9544:74:181"},"nodeType":"YulExpressionStatement","src":"9544:74:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9638:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"9645:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9634:3:181"},"nodeType":"YulFunctionCall","src":"9634:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9680:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9691:3:181","type":"","value":"992"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9676:3:181"},"nodeType":"YulFunctionCall","src":"9676:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"9697:3:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"9650:25:181"},"nodeType":"YulFunctionCall","src":"9650:51:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9627:6:181"},"nodeType":"YulFunctionCall","src":"9627:75:181"},"nodeType":"YulExpressionStatement","src":"9627:75:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9722:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9729:6:181","type":"","value":"0x0180"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9718:3:181"},"nodeType":"YulFunctionCall","src":"9718:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9768:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9779:4:181","type":"","value":"1056"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9764:3:181"},"nodeType":"YulFunctionCall","src":"9764:20:181"},{"name":"end","nodeType":"YulIdentifier","src":"9786:3:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"9738:25:181"},"nodeType":"YulFunctionCall","src":"9738:52:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9711:6:181"},"nodeType":"YulFunctionCall","src":"9711:80:181"},"nodeType":"YulExpressionStatement","src":"9711:80:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9811:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9818:6:181","type":"","value":"0x01a0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9807:3:181"},"nodeType":"YulFunctionCall","src":"9807:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9852:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9863:4:181","type":"","value":"1120"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9848:3:181"},"nodeType":"YulFunctionCall","src":"9848:20:181"},{"name":"end","nodeType":"YulIdentifier","src":"9870:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"9827:20:181"},"nodeType":"YulFunctionCall","src":"9827:47:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9800:6:181"},"nodeType":"YulFunctionCall","src":"9800:75:181"},"nodeType":"YulExpressionStatement","src":"9800:75:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9895:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9902:6:181","type":"","value":"0x01c0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9891:3:181"},"nodeType":"YulFunctionCall","src":"9891:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9936:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9947:4:181","type":"","value":"1152"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9932:3:181"},"nodeType":"YulFunctionCall","src":"9932:20:181"},{"name":"end","nodeType":"YulIdentifier","src":"9954:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"9911:20:181"},"nodeType":"YulFunctionCall","src":"9911:47:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9884:6:181"},"nodeType":"YulFunctionCall","src":"9884:75:181"},"nodeType":"YulExpressionStatement","src":"9884:75:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9979:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9986:6:181","type":"","value":"0x01e0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9975:3:181"},"nodeType":"YulFunctionCall","src":"9975:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10020:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10031:4:181","type":"","value":"1184"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10016:3:181"},"nodeType":"YulFunctionCall","src":"10016:20:181"},{"name":"end","nodeType":"YulIdentifier","src":"10038:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"9995:20:181"},"nodeType":"YulFunctionCall","src":"9995:47:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9968:6:181"},"nodeType":"YulFunctionCall","src":"9968:75:181"},"nodeType":"YulExpressionStatement","src":"9968:75:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10063:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"10070:6:181","type":"","value":"0x0200"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10059:3:181"},"nodeType":"YulFunctionCall","src":"10059:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10104:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10115:4:181","type":"","value":"1216"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10100:3:181"},"nodeType":"YulFunctionCall","src":"10100:20:181"},{"name":"end","nodeType":"YulIdentifier","src":"10122:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"10079:20:181"},"nodeType":"YulFunctionCall","src":"10079:47:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10052:6:181"},"nodeType":"YulFunctionCall","src":"10052:75:181"},"nodeType":"YulExpressionStatement","src":"10052:75:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10147:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"10154:6:181","type":"","value":"0x0220"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10143:3:181"},"nodeType":"YulFunctionCall","src":"10143:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10188:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10199:4:181","type":"","value":"1248"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10184:3:181"},"nodeType":"YulFunctionCall","src":"10184:20:181"},{"name":"end","nodeType":"YulIdentifier","src":"10206:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"10163:20:181"},"nodeType":"YulFunctionCall","src":"10163:47:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10136:6:181"},"nodeType":"YulFunctionCall","src":"10136:75:181"},"nodeType":"YulExpressionStatement","src":"10136:75:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10231:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"10238:6:181","type":"","value":"0x0240"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10227:3:181"},"nodeType":"YulFunctionCall","src":"10227:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10272:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10283:4:181","type":"","value":"1280"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10268:3:181"},"nodeType":"YulFunctionCall","src":"10268:20:181"},{"name":"end","nodeType":"YulIdentifier","src":"10290:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"10247:20:181"},"nodeType":"YulFunctionCall","src":"10247:47:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10220:6:181"},"nodeType":"YulFunctionCall","src":"10220:75:181"},"nodeType":"YulExpressionStatement","src":"10220:75:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10315:5:181"},{"name":"_3","nodeType":"YulIdentifier","src":"10322:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10311:3:181"},"nodeType":"YulFunctionCall","src":"10311:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10357:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10368:4:181","type":"","value":"1312"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10353:3:181"},"nodeType":"YulFunctionCall","src":"10353:20:181"},{"name":"end","nodeType":"YulIdentifier","src":"10375:3:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"10327:25:181"},"nodeType":"YulFunctionCall","src":"10327:52:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10304:6:181"},"nodeType":"YulFunctionCall","src":"10304:76:181"},"nodeType":"YulExpressionStatement","src":"10304:76:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10400:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"10407:6:181","type":"","value":"0x0280"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10396:3:181"},"nodeType":"YulFunctionCall","src":"10396:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10446:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10457:4:181","type":"","value":"1376"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10442:3:181"},"nodeType":"YulFunctionCall","src":"10442:20:181"},{"name":"end","nodeType":"YulIdentifier","src":"10464:3:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"10416:25:181"},"nodeType":"YulFunctionCall","src":"10416:52:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10389:6:181"},"nodeType":"YulFunctionCall","src":"10389:80:181"},"nodeType":"YulExpressionStatement","src":"10389:80:181"}]},"name":"abi_decode_struct_Proof","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8286:9:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"8297:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"8305:5:181","type":""}],"src":"8253:2222:181"},{"body":{"nodeType":"YulBlock","src":"10568:621:181","statements":[{"body":{"nodeType":"YulBlock","src":"10617:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10626:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10629:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10619:6:181"},"nodeType":"YulFunctionCall","src":"10619:12:181"},"nodeType":"YulExpressionStatement","src":"10619:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"10596:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10604:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10592:3:181"},"nodeType":"YulFunctionCall","src":"10592:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"10611:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10588:3:181"},"nodeType":"YulFunctionCall","src":"10588:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10581:6:181"},"nodeType":"YulFunctionCall","src":"10581:35:181"},"nodeType":"YulIf","src":"10578:55:181"},{"nodeType":"YulVariableDeclaration","src":"10642:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10662:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10656:5:181"},"nodeType":"YulFunctionCall","src":"10656:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"10646:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10674:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10684:3:181","type":"","value":"288"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10678:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10696:33:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"10718:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10726:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10714:3:181"},"nodeType":"YulFunctionCall","src":"10714:15:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"10700:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10804:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"10806:16:181"},"nodeType":"YulFunctionCall","src":"10806:18:181"},"nodeType":"YulExpressionStatement","src":"10806:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"10747:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"10759:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10744:2:181"},"nodeType":"YulFunctionCall","src":"10744:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"10783:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"10795:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10780:2:181"},"nodeType":"YulFunctionCall","src":"10780:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"10741:2:181"},"nodeType":"YulFunctionCall","src":"10741:62:181"},"nodeType":"YulIf","src":"10738:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10842:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"10846:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10835:6:181"},"nodeType":"YulFunctionCall","src":"10835:22:181"},"nodeType":"YulExpressionStatement","src":"10835:22:181"},{"nodeType":"YulVariableDeclaration","src":"10866:17:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"10877:6:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"10870:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10892:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"10910:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10918:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10906:3:181"},"nodeType":"YulFunctionCall","src":"10906:15:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"10896:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10949:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10958:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10961:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10951:6:181"},"nodeType":"YulFunctionCall","src":"10951:12:181"},"nodeType":"YulExpressionStatement","src":"10951:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"10936:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"10944:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10933:2:181"},"nodeType":"YulFunctionCall","src":"10933:15:181"},"nodeType":"YulIf","src":"10930:35:181"},{"nodeType":"YulVariableDeclaration","src":"10974:17:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"10985:6:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"10978:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"11058:101:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"11079:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"11105:3:181"},{"name":"end","nodeType":"YulIdentifier","src":"11110:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"11084:20:181"},"nodeType":"YulFunctionCall","src":"11084:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11072:6:181"},"nodeType":"YulFunctionCall","src":"11072:43:181"},"nodeType":"YulExpressionStatement","src":"11072:43:181"},{"nodeType":"YulAssignment","src":"11128:21:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"11139:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"11144:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11135:3:181"},"nodeType":"YulFunctionCall","src":"11135:14:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"11128:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"11011:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"11016:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"11008:2:181"},"nodeType":"YulFunctionCall","src":"11008:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"11024:25:181","statements":[{"nodeType":"YulAssignment","src":"11026:21:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"11037:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"11042:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11033:3:181"},"nodeType":"YulFunctionCall","src":"11033:14:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"11026:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"11004:3:181","statements":[]},"src":"11000:159:181"},{"nodeType":"YulAssignment","src":"11168:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"11177:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"11168:5:181"}]}]},"name":"abi_decode_t_array_t_struct_Fr_memory_ptr_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"10542:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"10550:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"10558:5:181","type":""}],"src":"10480:709:181"},{"body":{"nodeType":"YulBlock","src":"11271:1780:181","statements":[{"body":{"nodeType":"YulBlock","src":"11317:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11326:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11329:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11319:6:181"},"nodeType":"YulFunctionCall","src":"11319:12:181"},"nodeType":"YulExpressionStatement","src":"11319:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"11292:3:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"11297:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11288:3:181"},"nodeType":"YulFunctionCall","src":"11288:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"11309:6:181","type":"","value":"0x0380"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11284:3:181"},"nodeType":"YulFunctionCall","src":"11284:32:181"},"nodeType":"YulIf","src":"11281:52:181"},{"nodeType":"YulAssignment","src":"11342:31:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_2483","nodeType":"YulIdentifier","src":"11351:20:181"},"nodeType":"YulFunctionCall","src":"11351:22:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"11342:5:181"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11389:5:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11417:9:181"},{"name":"end","nodeType":"YulIdentifier","src":"11428:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"11396:20:181"},"nodeType":"YulFunctionCall","src":"11396:36:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11382:6:181"},"nodeType":"YulFunctionCall","src":"11382:51:181"},"nodeType":"YulExpressionStatement","src":"11382:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11453:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11460:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11449:3:181"},"nodeType":"YulFunctionCall","src":"11449:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11490:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11501:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11486:3:181"},"nodeType":"YulFunctionCall","src":"11486:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"11506:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"11465:20:181"},"nodeType":"YulFunctionCall","src":"11465:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11442:6:181"},"nodeType":"YulFunctionCall","src":"11442:69:181"},"nodeType":"YulExpressionStatement","src":"11442:69:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11531:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11538:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11527:3:181"},"nodeType":"YulFunctionCall","src":"11527:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11568:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11579:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11564:3:181"},"nodeType":"YulFunctionCall","src":"11564:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"11584:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"11543:20:181"},"nodeType":"YulFunctionCall","src":"11543:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11520:6:181"},"nodeType":"YulFunctionCall","src":"11520:69:181"},"nodeType":"YulExpressionStatement","src":"11520:69:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11609:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11616:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11605:3:181"},"nodeType":"YulFunctionCall","src":"11605:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11646:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11657:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11642:3:181"},"nodeType":"YulFunctionCall","src":"11642:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"11662:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"11621:20:181"},"nodeType":"YulFunctionCall","src":"11621:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11598:6:181"},"nodeType":"YulFunctionCall","src":"11598:69:181"},"nodeType":"YulExpressionStatement","src":"11598:69:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11687:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11694:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11683:3:181"},"nodeType":"YulFunctionCall","src":"11683:15:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11757:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11768:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11753:3:181"},"nodeType":"YulFunctionCall","src":"11753:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"11774:3:181"}],"functionName":{"name":"abi_decode_t_array_t_struct_Fr_memory_ptr_memory_ptr","nodeType":"YulIdentifier","src":"11700:52:181"},"nodeType":"YulFunctionCall","src":"11700:78:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11676:6:181"},"nodeType":"YulFunctionCall","src":"11676:103:181"},"nodeType":"YulExpressionStatement","src":"11676:103:181"},{"nodeType":"YulVariableDeclaration","src":"11788:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"11798:3:181","type":"","value":"416"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11792:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11821:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11828:4:181","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11817:3:181"},"nodeType":"YulFunctionCall","src":"11817:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11860:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"11871:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11856:3:181"},"nodeType":"YulFunctionCall","src":"11856:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"11876:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"11835:20:181"},"nodeType":"YulFunctionCall","src":"11835:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11810:6:181"},"nodeType":"YulFunctionCall","src":"11810:71:181"},"nodeType":"YulExpressionStatement","src":"11810:71:181"},{"nodeType":"YulVariableDeclaration","src":"11890:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"11900:3:181","type":"","value":"448"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"11894:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11923:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11930:4:181","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11919:3:181"},"nodeType":"YulFunctionCall","src":"11919:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11962:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"11973:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11958:3:181"},"nodeType":"YulFunctionCall","src":"11958:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"11978:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"11937:20:181"},"nodeType":"YulFunctionCall","src":"11937:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11912:6:181"},"nodeType":"YulFunctionCall","src":"11912:71:181"},"nodeType":"YulExpressionStatement","src":"11912:71:181"},{"nodeType":"YulVariableDeclaration","src":"11992:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12002:3:181","type":"","value":"480"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"11996:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12025:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"12032:4:181","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12021:3:181"},"nodeType":"YulFunctionCall","src":"12021:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12064:9:181"},{"name":"_3","nodeType":"YulIdentifier","src":"12075:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12060:3:181"},"nodeType":"YulFunctionCall","src":"12060:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"12080:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"12039:20:181"},"nodeType":"YulFunctionCall","src":"12039:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12014:6:181"},"nodeType":"YulFunctionCall","src":"12014:71:181"},"nodeType":"YulExpressionStatement","src":"12014:71:181"},{"nodeType":"YulVariableDeclaration","src":"12094:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12104:3:181","type":"","value":"512"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"12098:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12127:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"12134:6:181","type":"","value":"0x0100"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12123:3:181"},"nodeType":"YulFunctionCall","src":"12123:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12168:9:181"},{"name":"_4","nodeType":"YulIdentifier","src":"12179:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12164:3:181"},"nodeType":"YulFunctionCall","src":"12164:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"12184:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"12143:20:181"},"nodeType":"YulFunctionCall","src":"12143:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12116:6:181"},"nodeType":"YulFunctionCall","src":"12116:73:181"},"nodeType":"YulExpressionStatement","src":"12116:73:181"},{"nodeType":"YulVariableDeclaration","src":"12198:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12208:3:181","type":"","value":"544"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"12202:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12231:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"12238:6:181","type":"","value":"0x0120"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12227:3:181"},"nodeType":"YulFunctionCall","src":"12227:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12272:9:181"},{"name":"_5","nodeType":"YulIdentifier","src":"12283:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12268:3:181"},"nodeType":"YulFunctionCall","src":"12268:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"12288:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"12247:20:181"},"nodeType":"YulFunctionCall","src":"12247:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12220:6:181"},"nodeType":"YulFunctionCall","src":"12220:73:181"},"nodeType":"YulExpressionStatement","src":"12220:73:181"},{"nodeType":"YulVariableDeclaration","src":"12302:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12312:3:181","type":"","value":"576"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"12306:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12335:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"12342:6:181","type":"","value":"0x0140"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12331:3:181"},"nodeType":"YulFunctionCall","src":"12331:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12376:9:181"},{"name":"_6","nodeType":"YulIdentifier","src":"12387:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12372:3:181"},"nodeType":"YulFunctionCall","src":"12372:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"12392:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"12351:20:181"},"nodeType":"YulFunctionCall","src":"12351:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12324:6:181"},"nodeType":"YulFunctionCall","src":"12324:73:181"},"nodeType":"YulExpressionStatement","src":"12324:73:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12417:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"12424:6:181","type":"","value":"0x0160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12413:3:181"},"nodeType":"YulFunctionCall","src":"12413:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12458:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12469:6:181","type":"","value":"0x0260"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12454:3:181"},"nodeType":"YulFunctionCall","src":"12454:22:181"},{"name":"end","nodeType":"YulIdentifier","src":"12478:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"12433:20:181"},"nodeType":"YulFunctionCall","src":"12433:49:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12406:6:181"},"nodeType":"YulFunctionCall","src":"12406:77:181"},"nodeType":"YulExpressionStatement","src":"12406:77:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12503:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"12510:6:181","type":"","value":"0x0180"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12499:3:181"},"nodeType":"YulFunctionCall","src":"12499:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12544:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12555:3:181","type":"","value":"640"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12540:3:181"},"nodeType":"YulFunctionCall","src":"12540:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"12561:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"12519:20:181"},"nodeType":"YulFunctionCall","src":"12519:46:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12492:6:181"},"nodeType":"YulFunctionCall","src":"12492:74:181"},"nodeType":"YulExpressionStatement","src":"12492:74:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12586:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12593:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12582:3:181"},"nodeType":"YulFunctionCall","src":"12582:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12623:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12634:3:181","type":"","value":"672"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12619:3:181"},"nodeType":"YulFunctionCall","src":"12619:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"12640:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"12598:20:181"},"nodeType":"YulFunctionCall","src":"12598:46:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12575:6:181"},"nodeType":"YulFunctionCall","src":"12575:70:181"},"nodeType":"YulExpressionStatement","src":"12575:70:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12665:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"12672:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12661:3:181"},"nodeType":"YulFunctionCall","src":"12661:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12702:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12713:3:181","type":"","value":"704"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12698:3:181"},"nodeType":"YulFunctionCall","src":"12698:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"12719:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"12677:20:181"},"nodeType":"YulFunctionCall","src":"12677:46:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12654:6:181"},"nodeType":"YulFunctionCall","src":"12654:70:181"},"nodeType":"YulExpressionStatement","src":"12654:70:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12744:5:181"},{"name":"_3","nodeType":"YulIdentifier","src":"12751:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12740:3:181"},"nodeType":"YulFunctionCall","src":"12740:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12781:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12792:3:181","type":"","value":"736"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12777:3:181"},"nodeType":"YulFunctionCall","src":"12777:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"12798:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"12756:20:181"},"nodeType":"YulFunctionCall","src":"12756:46:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12733:6:181"},"nodeType":"YulFunctionCall","src":"12733:70:181"},"nodeType":"YulExpressionStatement","src":"12733:70:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12823:5:181"},{"name":"_4","nodeType":"YulIdentifier","src":"12830:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12819:3:181"},"nodeType":"YulFunctionCall","src":"12819:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12860:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12871:3:181","type":"","value":"768"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12856:3:181"},"nodeType":"YulFunctionCall","src":"12856:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"12877:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"12835:20:181"},"nodeType":"YulFunctionCall","src":"12835:46:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12812:6:181"},"nodeType":"YulFunctionCall","src":"12812:70:181"},"nodeType":"YulExpressionStatement","src":"12812:70:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12902:5:181"},{"name":"_5","nodeType":"YulIdentifier","src":"12909:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12898:3:181"},"nodeType":"YulFunctionCall","src":"12898:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12939:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12950:3:181","type":"","value":"800"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12935:3:181"},"nodeType":"YulFunctionCall","src":"12935:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"12956:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"12914:20:181"},"nodeType":"YulFunctionCall","src":"12914:46:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12891:6:181"},"nodeType":"YulFunctionCall","src":"12891:70:181"},"nodeType":"YulExpressionStatement","src":"12891:70:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12981:5:181"},{"name":"_6","nodeType":"YulIdentifier","src":"12988:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12977:3:181"},"nodeType":"YulFunctionCall","src":"12977:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13023:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13034:3:181","type":"","value":"832"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13019:3:181"},"nodeType":"YulFunctionCall","src":"13019:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"13040:3:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"12993:25:181"},"nodeType":"YulFunctionCall","src":"12993:51:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12970:6:181"},"nodeType":"YulFunctionCall","src":"12970:75:181"},"nodeType":"YulExpressionStatement","src":"12970:75:181"}]},"name":"abi_decode_struct_PartialVerifierState","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11242:9:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"11253:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"11261:5:181","type":""}],"src":"11194:1857:181"},{"body":{"nodeType":"YulBlock","src":"13251:1503:181","statements":[{"nodeType":"YulVariableDeclaration","src":"13261:33:181","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13275:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"13284:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13271:3:181"},"nodeType":"YulFunctionCall","src":"13271:23:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13265:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"13320:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13329:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13332:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13322:6:181"},"nodeType":"YulFunctionCall","src":"13322:12:181"},"nodeType":"YulExpressionStatement","src":"13322:12:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"13310:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"13314:4:181","type":"","value":"2592"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13306:3:181"},"nodeType":"YulFunctionCall","src":"13306:13:181"},"nodeType":"YulIf","src":"13303:33:181"},{"nodeType":"YulVariableDeclaration","src":"13345:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13355:6:181","type":"","value":"0x0680"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"13349:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"13385:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13394:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13397:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13387:6:181"},"nodeType":"YulFunctionCall","src":"13387:12:181"},"nodeType":"YulExpressionStatement","src":"13387:12:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"13377:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"13381:2:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13373:3:181"},"nodeType":"YulFunctionCall","src":"13373:11:181"},"nodeType":"YulIf","src":"13370:31:181"},{"nodeType":"YulVariableDeclaration","src":"13410:35:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_2484","nodeType":"YulIdentifier","src":"13423:20:181"},"nodeType":"YulFunctionCall","src":"13423:22:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13414:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13461:5:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13481:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13468:12:181"},"nodeType":"YulFunctionCall","src":"13468:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13454:6:181"},"nodeType":"YulFunctionCall","src":"13454:38:181"},"nodeType":"YulExpressionStatement","src":"13454:38:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13512:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"13519:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13508:3:181"},"nodeType":"YulFunctionCall","src":"13508:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13541:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13552:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13537:3:181"},"nodeType":"YulFunctionCall","src":"13537:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13524:12:181"},"nodeType":"YulFunctionCall","src":"13524:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13501:6:181"},"nodeType":"YulFunctionCall","src":"13501:56:181"},"nodeType":"YulExpressionStatement","src":"13501:56:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13577:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"13584:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13573:3:181"},"nodeType":"YulFunctionCall","src":"13573:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13614:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13625:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13610:3:181"},"nodeType":"YulFunctionCall","src":"13610:18:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"13630:7:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"13589:20:181"},"nodeType":"YulFunctionCall","src":"13589:49:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13566:6:181"},"nodeType":"YulFunctionCall","src":"13566:73:181"},"nodeType":"YulExpressionStatement","src":"13566:73:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13659:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"13666:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13655:3:181"},"nodeType":"YulFunctionCall","src":"13655:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13707:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13718:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13703:3:181"},"nodeType":"YulFunctionCall","src":"13703:18:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"13723:7:181"}],"functionName":{"name":"abi_decode_array_struct_G1Point","nodeType":"YulIdentifier","src":"13671:31:181"},"nodeType":"YulFunctionCall","src":"13671:60:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13648:6:181"},"nodeType":"YulFunctionCall","src":"13648:84:181"},"nodeType":"YulExpressionStatement","src":"13648:84:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13752:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"13759:4:181","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13748:3:181"},"nodeType":"YulFunctionCall","src":"13748:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13806:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13817:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13802:3:181"},"nodeType":"YulFunctionCall","src":"13802:19:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"13823:7:181"}],"functionName":{"name":"abi_decode_t_array_t_struct_G1Point","nodeType":"YulIdentifier","src":"13766:35:181"},"nodeType":"YulFunctionCall","src":"13766:65:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13741:6:181"},"nodeType":"YulFunctionCall","src":"13741:91:181"},"nodeType":"YulExpressionStatement","src":"13741:91:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13852:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"13859:4:181","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13848:3:181"},"nodeType":"YulFunctionCall","src":"13848:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13924:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13935:3:181","type":"","value":"672"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13920:3:181"},"nodeType":"YulFunctionCall","src":"13920:19:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"13941:7:181"}],"functionName":{"name":"abi_decode_array_struct_G1Point_memory_ptr_memory_ptr","nodeType":"YulIdentifier","src":"13866:53:181"},"nodeType":"YulFunctionCall","src":"13866:83:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13841:6:181"},"nodeType":"YulFunctionCall","src":"13841:109:181"},"nodeType":"YulExpressionStatement","src":"13841:109:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13970:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"13977:4:181","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13966:3:181"},"nodeType":"YulFunctionCall","src":"13966:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14014:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14025:3:181","type":"","value":"928"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14010:3:181"},"nodeType":"YulFunctionCall","src":"14010:19:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"14031:7:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"13984:25:181"},"nodeType":"YulFunctionCall","src":"13984:55:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13959:6:181"},"nodeType":"YulFunctionCall","src":"13959:81:181"},"nodeType":"YulExpressionStatement","src":"13959:81:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14060:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"14067:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14056:3:181"},"nodeType":"YulFunctionCall","src":"14056:15:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14131:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14142:3:181","type":"","value":"992"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14127:3:181"},"nodeType":"YulFunctionCall","src":"14127:19:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"14148:7:181"}],"functionName":{"name":"abi_decode_array_struct_G1Point_memory_ptr_memory_ptr","nodeType":"YulIdentifier","src":"14073:53:181"},"nodeType":"YulFunctionCall","src":"14073:83:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14049:6:181"},"nodeType":"YulFunctionCall","src":"14049:108:181"},"nodeType":"YulExpressionStatement","src":"14049:108:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14177:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"14184:6:181","type":"","value":"0x0100"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14173:3:181"},"nodeType":"YulFunctionCall","src":"14173:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14223:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14234:4:181","type":"","value":"1248"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14219:3:181"},"nodeType":"YulFunctionCall","src":"14219:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"14241:7:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"14193:25:181"},"nodeType":"YulFunctionCall","src":"14193:56:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14166:6:181"},"nodeType":"YulFunctionCall","src":"14166:84:181"},"nodeType":"YulExpressionStatement","src":"14166:84:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14270:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"14277:6:181","type":"","value":"0x0120"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14266:3:181"},"nodeType":"YulFunctionCall","src":"14266:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14321:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14332:4:181","type":"","value":"1312"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14317:3:181"},"nodeType":"YulFunctionCall","src":"14317:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"14339:7:181"}],"functionName":{"name":"abi_decode_t_array_t_struct_Fr","nodeType":"YulIdentifier","src":"14286:30:181"},"nodeType":"YulFunctionCall","src":"14286:61:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14259:6:181"},"nodeType":"YulFunctionCall","src":"14259:89:181"},"nodeType":"YulExpressionStatement","src":"14259:89:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14368:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"14375:6:181","type":"","value":"0x0140"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14364:3:181"},"nodeType":"YulFunctionCall","src":"14364:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14420:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14431:4:181","type":"","value":"1408"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14416:3:181"},"nodeType":"YulFunctionCall","src":"14416:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"14438:7:181"}],"functionName":{"name":"abi_decode_array_struct_G2Point","nodeType":"YulIdentifier","src":"14384:31:181"},"nodeType":"YulFunctionCall","src":"14384:62:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14357:6:181"},"nodeType":"YulFunctionCall","src":"14357:90:181"},"nodeType":"YulExpressionStatement","src":"14357:90:181"},{"nodeType":"YulAssignment","src":"14456:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"14466:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14456:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"14480:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14511:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"14522:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14507:3:181"},"nodeType":"YulFunctionCall","src":"14507:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14494:12:181"},"nodeType":"YulFunctionCall","src":"14494:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"14484:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"14569:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14578:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14581:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14571:6:181"},"nodeType":"YulFunctionCall","src":"14571:12:181"},"nodeType":"YulExpressionStatement","src":"14571:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"14541:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"14549:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14538:2:181"},"nodeType":"YulFunctionCall","src":"14538:30:181"},"nodeType":"YulIf","src":"14535:50:181"},{"nodeType":"YulAssignment","src":"14594:66:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14632:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"14643:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14628:3:181"},"nodeType":"YulFunctionCall","src":"14628:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"14652:7:181"}],"functionName":{"name":"abi_decode_struct_Proof","nodeType":"YulIdentifier","src":"14604:23:181"},"nodeType":"YulFunctionCall","src":"14604:56:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"14594:6:181"}]},{"nodeType":"YulAssignment","src":"14669:79:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14722:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14733:4:181","type":"","value":"1696"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14718:3:181"},"nodeType":"YulFunctionCall","src":"14718:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"14740:7:181"}],"functionName":{"name":"abi_decode_struct_PartialVerifierState","nodeType":"YulIdentifier","src":"14679:38:181"},"nodeType":"YulFunctionCall","src":"14679:69:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"14669:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_VerificationKey_$387_memory_ptrt_struct$_Proof_$484_memory_ptrt_struct$_PartialVerifierState_$544_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13201:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13212:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13224:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13232:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13240:6:181","type":""}],"src":"13056:1698:181"},{"body":{"nodeType":"YulBlock","src":"14810:97:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14827:3:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14838:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14832:5:181"},"nodeType":"YulFunctionCall","src":"14832:12:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14820:6:181"},"nodeType":"YulFunctionCall","src":"14820:25:181"},"nodeType":"YulExpressionStatement","src":"14820:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14865:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"14870:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14861:3:181"},"nodeType":"YulFunctionCall","src":"14861:14:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14887:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"14894:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14883:3:181"},"nodeType":"YulFunctionCall","src":"14883:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14877:5:181"},"nodeType":"YulFunctionCall","src":"14877:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14854:6:181"},"nodeType":"YulFunctionCall","src":"14854:47:181"},"nodeType":"YulExpressionStatement","src":"14854:47:181"}]},"name":"abi_encode_struct_G1Point","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"14794:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"14801:3:181","type":""}],"src":"14759:148:181"},{"body":{"nodeType":"YulBlock","src":"15063:95:181","statements":[{"nodeType":"YulAssignment","src":"15073:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15085:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15096:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15081:3:181"},"nodeType":"YulFunctionCall","src":"15081:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15073:4:181"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15134:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"15142:9:181"}],"functionName":{"name":"abi_encode_struct_G1Point","nodeType":"YulIdentifier","src":"15108:25:181"},"nodeType":"YulFunctionCall","src":"15108:44:181"},"nodeType":"YulExpressionStatement","src":"15108:44:181"}]},"name":"abi_encode_tuple_t_struct$_G1Point_$6027_memory_ptr__to_t_struct$_G1Point_$6027_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15032:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15043:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15054:4:181","type":""}],"src":"14912:246:181"},{"body":{"nodeType":"YulBlock","src":"15220:272:181","statements":[{"nodeType":"YulAssignment","src":"15230:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"15237:3:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"15230:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"15249:19:181","value":{"name":"value","nodeType":"YulIdentifier","src":"15263:5:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"15253:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15277:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"15286:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"15281:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"15343:143:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"15389:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15383:5:181"},"nodeType":"YulFunctionCall","src":"15383:13:181"},{"name":"pos","nodeType":"YulIdentifier","src":"15398:3:181"}],"functionName":{"name":"abi_encode_struct_G1Point","nodeType":"YulIdentifier","src":"15357:25:181"},"nodeType":"YulFunctionCall","src":"15357:45:181"},"nodeType":"YulExpressionStatement","src":"15357:45:181"},{"nodeType":"YulAssignment","src":"15415:21:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"15426:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"15431:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15422:3:181"},"nodeType":"YulFunctionCall","src":"15422:14:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"15415:3:181"}]},{"nodeType":"YulAssignment","src":"15449:27:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"15463:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"15471:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15459:3:181"},"nodeType":"YulFunctionCall","src":"15459:17:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"15449:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"15307:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"15310:4:181","type":"","value":"0x06"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15304:2:181"},"nodeType":"YulFunctionCall","src":"15304:11:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"15316:18:181","statements":[{"nodeType":"YulAssignment","src":"15318:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"15327:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"15330:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15323:3:181"},"nodeType":"YulFunctionCall","src":"15323:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"15318:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"15300:3:181","statements":[]},"src":"15296:190:181"}]},"name":"abi_encode_array_struct_G1Point","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"15204:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"15211:3:181","type":""}],"src":"15163:329:181"},{"body":{"nodeType":"YulBlock","src":"15549:283:181","statements":[{"nodeType":"YulAssignment","src":"15559:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"15566:3:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"15559:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"15578:19:181","value":{"name":"value","nodeType":"YulIdentifier","src":"15592:5:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"15582:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15606:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"15615:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"15610:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"15672:154:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"15693:3:181"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"15710:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15704:5:181"},"nodeType":"YulFunctionCall","src":"15704:13:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15698:5:181"},"nodeType":"YulFunctionCall","src":"15698:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15686:6:181"},"nodeType":"YulFunctionCall","src":"15686:33:181"},"nodeType":"YulExpressionStatement","src":"15686:33:181"},{"nodeType":"YulVariableDeclaration","src":"15732:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"15742:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15736:2:181","type":""}]},{"nodeType":"YulAssignment","src":"15759:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"15770:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"15775:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15766:3:181"},"nodeType":"YulFunctionCall","src":"15766:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"15759:3:181"}]},{"nodeType":"YulAssignment","src":"15791:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"15805:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"15813:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15801:3:181"},"nodeType":"YulFunctionCall","src":"15801:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"15791:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"15636:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"15639:4:181","type":"","value":"0x06"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15633:2:181"},"nodeType":"YulFunctionCall","src":"15633:11:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"15645:18:181","statements":[{"nodeType":"YulAssignment","src":"15647:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"15656:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"15659:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15652:3:181"},"nodeType":"YulFunctionCall","src":"15652:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"15647:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"15629:3:181","statements":[]},"src":"15625:201:181"}]},"name":"abi_encode_array_struct_Fr","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"15533:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"15540:3:181","type":""}],"src":"15497:335:181"},{"body":{"nodeType":"YulBlock","src":"15988:1038:181","statements":[{"nodeType":"YulAssignment","src":"15998:28:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16010:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16021:4:181","type":"","value":"1824"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16006:3:181"},"nodeType":"YulFunctionCall","src":"16006:20:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15998:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"16035:23:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16051:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16045:5:181"},"nodeType":"YulFunctionCall","src":"16045:13:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"16039:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16067:20:181","value":{"name":"headStart","nodeType":"YulIdentifier","src":"16078:9:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"16071:3:181","type":""}]},{"nodeType":"YulAssignment","src":"16096:16:181","value":{"name":"headStart","nodeType":"YulIdentifier","src":"16103:9:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"16096:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"16121:16:181","value":{"name":"_1","nodeType":"YulIdentifier","src":"16135:2:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"16125:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16146:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"16155:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"16150:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"16212:143:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"16258:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16252:5:181"},"nodeType":"YulFunctionCall","src":"16252:13:181"},{"name":"pos","nodeType":"YulIdentifier","src":"16267:3:181"}],"functionName":{"name":"abi_encode_struct_G1Point","nodeType":"YulIdentifier","src":"16226:25:181"},"nodeType":"YulFunctionCall","src":"16226:45:181"},"nodeType":"YulExpressionStatement","src":"16226:45:181"},{"nodeType":"YulAssignment","src":"16284:21:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16295:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"16300:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16291:3:181"},"nodeType":"YulFunctionCall","src":"16291:14:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"16284:3:181"}]},{"nodeType":"YulAssignment","src":"16318:27:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"16332:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"16340:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16328:3:181"},"nodeType":"YulFunctionCall","src":"16328:17:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"16318:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"16176:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"16179:4:181","type":"","value":"0x0d"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16173:2:181"},"nodeType":"YulFunctionCall","src":"16173:11:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"16185:18:181","statements":[{"nodeType":"YulAssignment","src":"16187:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"16196:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"16199:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16192:3:181"},"nodeType":"YulFunctionCall","src":"16192:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"16187:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"16169:3:181","statements":[]},"src":"16165:190:181"},{"nodeType":"YulVariableDeclaration","src":"16364:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"16374:4:181","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"16368:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16387:42:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16417:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"16425:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16413:3:181"},"nodeType":"YulFunctionCall","src":"16413:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16407:5:181"},"nodeType":"YulFunctionCall","src":"16407:22:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"16391:12:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16438:35:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16455:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16466:6:181","type":"","value":"0x0340"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16451:3:181"},"nodeType":"YulFunctionCall","src":"16451:22:181"},"variables":[{"name":"pos_1","nodeType":"YulTypedName","src":"16442:5:181","type":""}]},{"nodeType":"YulAssignment","src":"16482:14:181","value":{"name":"pos_1","nodeType":"YulIdentifier","src":"16491:5:181"},"variableNames":[{"name":"pos_1","nodeType":"YulIdentifier","src":"16482:5:181"}]},{"nodeType":"YulVariableDeclaration","src":"16505:28:181","value":{"name":"memberValue0","nodeType":"YulIdentifier","src":"16521:12:181"},"variables":[{"name":"srcPtr_1","nodeType":"YulTypedName","src":"16509:8:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16542:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"16553:1:181","type":"","value":"0"},"variables":[{"name":"i_1","nodeType":"YulTypedName","src":"16546:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"16616:139:181","statements":[{"expression":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"16637:5:181"},{"arguments":[{"arguments":[{"name":"srcPtr_1","nodeType":"YulIdentifier","src":"16656:8:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16650:5:181"},"nodeType":"YulFunctionCall","src":"16650:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16644:5:181"},"nodeType":"YulFunctionCall","src":"16644:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16630:6:181"},"nodeType":"YulFunctionCall","src":"16630:37:181"},"nodeType":"YulExpressionStatement","src":"16630:37:181"},{"nodeType":"YulAssignment","src":"16680:23:181","value":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"16693:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"16700:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16689:3:181"},"nodeType":"YulFunctionCall","src":"16689:14:181"},"variableNames":[{"name":"pos_1","nodeType":"YulIdentifier","src":"16680:5:181"}]},{"nodeType":"YulAssignment","src":"16716:29:181","value":{"arguments":[{"name":"srcPtr_1","nodeType":"YulIdentifier","src":"16732:8:181"},{"name":"_2","nodeType":"YulIdentifier","src":"16742:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16728:3:181"},"nodeType":"YulFunctionCall","src":"16728:17:181"},"variableNames":[{"name":"srcPtr_1","nodeType":"YulIdentifier","src":"16716:8:181"}]}]},"condition":{"arguments":[{"name":"i_1","nodeType":"YulIdentifier","src":"16574:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"16579:4:181","type":"","value":"0x0d"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16571:2:181"},"nodeType":"YulFunctionCall","src":"16571:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"16585:22:181","statements":[{"nodeType":"YulAssignment","src":"16587:18:181","value":{"arguments":[{"name":"i_1","nodeType":"YulIdentifier","src":"16598:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"16603:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16594:3:181"},"nodeType":"YulFunctionCall","src":"16594:11:181"},"variableNames":[{"name":"i_1","nodeType":"YulIdentifier","src":"16587:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"16567:3:181","statements":[]},"src":"16563:192:181"},{"nodeType":"YulVariableDeclaration","src":"16764:46:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16796:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"16804:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16792:3:181"},"nodeType":"YulFunctionCall","src":"16792:17:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16786:5:181"},"nodeType":"YulFunctionCall","src":"16786:24:181"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"16768:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"16851:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16871:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16882:6:181","type":"","value":"0x04e0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16867:3:181"},"nodeType":"YulFunctionCall","src":"16867:22:181"}],"functionName":{"name":"abi_encode_array_struct_G1Point","nodeType":"YulIdentifier","src":"16819:31:181"},"nodeType":"YulFunctionCall","src":"16819:71:181"},"nodeType":"YulExpressionStatement","src":"16819:71:181"},{"nodeType":"YulVariableDeclaration","src":"16899:46:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16931:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"16939:4:181","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16927:3:181"},"nodeType":"YulFunctionCall","src":"16927:17:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16921:5:181"},"nodeType":"YulFunctionCall","src":"16921:24:181"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"16903:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"16981:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17001:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17012:6:181","type":"","value":"0x0660"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16997:3:181"},"nodeType":"YulFunctionCall","src":"16997:22:181"}],"functionName":{"name":"abi_encode_array_struct_Fr","nodeType":"YulIdentifier","src":"16954:26:181"},"nodeType":"YulFunctionCall","src":"16954:66:181"},"nodeType":"YulExpressionStatement","src":"16954:66:181"}]},"name":"abi_encode_tuple_t_struct$_Queries_$3165_memory_ptr__to_t_struct$_Queries_$3165_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15957:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15968:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15979:4:181","type":""}],"src":"15837:1189:181"},{"body":{"nodeType":"YulBlock","src":"17138:146:181","statements":[{"body":{"nodeType":"YulBlock","src":"17185:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17194:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17197:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17187:6:181"},"nodeType":"YulFunctionCall","src":"17187:12:181"},"nodeType":"YulExpressionStatement","src":"17187:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"17159:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"17168:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17155:3:181"},"nodeType":"YulFunctionCall","src":"17155:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"17180:3:181","type":"","value":"896"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"17151:3:181"},"nodeType":"YulFunctionCall","src":"17151:33:181"},"nodeType":"YulIf","src":"17148:53:181"},{"nodeType":"YulAssignment","src":"17210:68:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17259:9:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"17270:7:181"}],"functionName":{"name":"abi_decode_struct_PartialVerifierState","nodeType":"YulIdentifier","src":"17220:38:181"},"nodeType":"YulFunctionCall","src":"17220:58:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"17210:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_PartialVerifierState_$544_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17104:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"17115:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"17127:6:181","type":""}],"src":"17031:253:181"},{"body":{"nodeType":"YulBlock","src":"17321:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17338:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17345:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"17350:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"17341:3:181"},"nodeType":"YulFunctionCall","src":"17341:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17331:6:181"},"nodeType":"YulFunctionCall","src":"17331:31:181"},"nodeType":"YulExpressionStatement","src":"17331:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17378:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"17381:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17371:6:181"},"nodeType":"YulFunctionCall","src":"17371:15:181"},"nodeType":"YulExpressionStatement","src":"17371:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17402:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17405:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17395:6:181"},"nodeType":"YulFunctionCall","src":"17395:15:181"},"nodeType":"YulExpressionStatement","src":"17395:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"17289:127:181"},{"body":{"nodeType":"YulBlock","src":"17470:176:181","statements":[{"nodeType":"YulAssignment","src":"17480:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"17492:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"17495:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17488:3:181"},"nodeType":"YulFunctionCall","src":"17488:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"17480:4:181"}]},{"body":{"nodeType":"YulBlock","src":"17529:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17550:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17557:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"17562:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"17553:3:181"},"nodeType":"YulFunctionCall","src":"17553:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17543:6:181"},"nodeType":"YulFunctionCall","src":"17543:31:181"},"nodeType":"YulExpressionStatement","src":"17543:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17594:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"17597:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17587:6:181"},"nodeType":"YulFunctionCall","src":"17587:15:181"},"nodeType":"YulExpressionStatement","src":"17587:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17622:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17625:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17615:6:181"},"nodeType":"YulFunctionCall","src":"17615:15:181"},"nodeType":"YulExpressionStatement","src":"17615:15:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"17512:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"17518:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"17509:2:181"},"nodeType":"YulFunctionCall","src":"17509:11:181"},"nodeType":"YulIf","src":"17506:134:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"17452:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"17455:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"17461:4:181","type":""}],"src":"17421:225:181"},{"body":{"nodeType":"YulBlock","src":"17683:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17700:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17707:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"17712:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"17703:3:181"},"nodeType":"YulFunctionCall","src":"17703:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17693:6:181"},"nodeType":"YulFunctionCall","src":"17693:31:181"},"nodeType":"YulExpressionStatement","src":"17693:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17740:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"17743:4:181","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17733:6:181"},"nodeType":"YulFunctionCall","src":"17733:15:181"},"nodeType":"YulExpressionStatement","src":"17733:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17764:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17767:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17757:6:181"},"nodeType":"YulFunctionCall","src":"17757:15:181"},"nodeType":"YulExpressionStatement","src":"17757:15:181"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"17651:127:181"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_2468() -> memPtr\n    {\n        memPtr := mload(0x40)\n        let newFreePtr := add(memPtr, 0x40)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(0x40, newFreePtr)\n    }\n    function allocate_memory_2481() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x02a0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory_2483() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x0260)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory_2484() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x0160)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 64)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory_5116() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 128)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_struct_Fr(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x20) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x20)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, calldataload(headStart))\n    }\n    function abi_decode_struct_G1Point(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x40) { revert(0, 0) }\n        value := allocate_memory_2468()\n        mstore(value, calldataload(headStart))\n        mstore(add(value, 32), calldataload(add(headStart, 32)))\n    }\n    function abi_decode_array_struct_G1Point(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let dst := allocate_memory()\n        let dst_1 := dst\n        let srcEnd := add(offset, 128)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := offset\n        for { } lt(src, srcEnd) { src := add(src, 64) }\n        {\n            mstore(dst, abi_decode_struct_G1Point(src, end))\n            dst := add(dst, 0x20)\n        }\n        array := dst_1\n    }\n    function abi_decode_t_array_t_struct_G1Point(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := 64\n        let memPtr := mload(_1)\n        let newFreePtr := add(memPtr, 224)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(_1, newFreePtr)\n        let dst := memPtr\n        let srcEnd := add(offset, 448)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := offset\n        for { } lt(src, srcEnd) { src := add(src, _1) }\n        {\n            mstore(dst, abi_decode_struct_G1Point(src, end))\n            dst := add(dst, 0x20)\n        }\n        array := memPtr\n    }\n    function abi_decode_array_struct_G1Point_memory_ptr_memory_ptr(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let dst := allocate_memory_5116()\n        let dst_1 := dst\n        let srcEnd := add(offset, 256)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := offset\n        for { } lt(src, srcEnd) { src := add(src, 0x40) }\n        {\n            mstore(dst, abi_decode_struct_G1Point(src, end))\n            dst := add(dst, 0x20)\n        }\n        array := dst_1\n    }\n    function abi_decode_t_array_t_struct_Fr(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 96)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        let dst := memPtr\n        let srcEnd := add(offset, 96)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := offset\n        for { } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n            mstore(dst, abi_decode_struct_Fr(src, end))\n            dst := add(dst, 0x20)\n        }\n        array := memPtr\n    }\n    function abi_decode_array_uint256(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let dst := allocate_memory()\n        let dst_1 := dst\n        let srcEnd := add(offset, 64)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := offset\n        for { } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n            mstore(dst, calldataload(src))\n            dst := add(dst, 0x20)\n        }\n        array := dst_1\n    }\n    function abi_decode_array_struct_G2Point(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let dst := allocate_memory()\n        let dst_1 := dst\n        let srcEnd := add(offset, 256)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := offset\n        for { } lt(src, srcEnd) { src := add(src, 0x80) }\n        {\n            if slt(sub(end, src), 0x80)\n            {\n                let _1 := 0\n                revert(_1, _1)\n            }\n            let value := allocate_memory_2468()\n            mstore(value, abi_decode_array_uint256(src, end))\n            let _2 := abi_decode_array_uint256(add(src, 64), end)\n            let _3 := 0x20\n            mstore(add(value, _3), _2)\n            mstore(dst, value)\n            dst := add(dst, _3)\n        }\n        array := dst_1\n    }\n    function abi_decode_array_uint256_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        let _3 := 0xffffffffffffffff\n        if gt(_1, _3) { panic_error_0x41() }\n        let _4 := shl(5, _1)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(_4, 63), not(31)))\n        if or(gt(newFreePtr, _3), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        let dst := memPtr\n        mstore(memPtr, _1)\n        dst := add(memPtr, _2)\n        let srcEnd := add(add(offset, _4), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            mstore(dst, calldataload(src))\n            dst := add(dst, _2)\n        }\n        array := memPtr\n    }\n    function abi_decode_array_struct_Fr(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let dst := allocate_memory_5116()\n        let dst_1 := dst\n        let srcEnd := add(offset, 128)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := offset\n        for { } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n            mstore(dst, abi_decode_struct_Fr(src, end))\n            dst := add(dst, 0x20)\n        }\n        array := dst_1\n    }\n    function abi_decode_array_struct_Fr_memory_ptr_memory_ptr(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let memPtr := mload(64)\n        let _1 := 32\n        let newFreePtr := add(memPtr, _1)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        let dst := memPtr\n        let srcEnd := add(offset, _1)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := offset\n        for { } lt(src, srcEnd) { src := add(src, _1) }\n        {\n            mstore(dst, abi_decode_struct_Fr(src, end))\n            dst := add(dst, _1)\n        }\n        array := memPtr\n    }\n    function abi_decode_struct_Proof(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x05a0) { revert(0, 0) }\n        value := allocate_memory_2481()\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        mstore(value, abi_decode_array_uint256_dyn(add(headStart, offset), end))\n        mstore(add(value, 32), abi_decode_array_struct_G1Point_memory_ptr_memory_ptr(add(headStart, 32), end))\n        let _1 := 288\n        mstore(add(value, 0x40), abi_decode_struct_G1Point(add(headStart, _1), end))\n        let _2 := 352\n        mstore(add(value, 0x60), abi_decode_array_struct_G1Point_memory_ptr_memory_ptr(add(headStart, _2), end))\n        let _3 := 608\n        mstore(add(value, 0x80), abi_decode_array_struct_Fr(add(headStart, _3), end))\n        mstore(add(value, 0xa0), abi_decode_array_struct_Fr_memory_ptr_memory_ptr(add(headStart, 736), end))\n        mstore(add(value, 0xc0), abi_decode_array_struct_Fr_memory_ptr_memory_ptr(add(headStart, 768), end))\n        mstore(add(value, 0xe0), abi_decode_t_array_t_struct_Fr(add(headStart, 800), end))\n        mstore(add(value, 0x0100), abi_decode_struct_Fr(add(headStart, 896), end))\n        mstore(add(value, _1), abi_decode_struct_Fr(add(headStart, 928), end))\n        mstore(add(value, 0x0140), abi_decode_struct_Fr(add(headStart, 960), end))\n        mstore(add(value, _2), abi_decode_struct_G1Point(add(headStart, 992), end))\n        mstore(add(value, 0x0180), abi_decode_struct_G1Point(add(headStart, 1056), end))\n        mstore(add(value, 0x01a0), abi_decode_struct_Fr(add(headStart, 1120), end))\n        mstore(add(value, 0x01c0), abi_decode_struct_Fr(add(headStart, 1152), end))\n        mstore(add(value, 0x01e0), abi_decode_struct_Fr(add(headStart, 1184), end))\n        mstore(add(value, 0x0200), abi_decode_struct_Fr(add(headStart, 1216), end))\n        mstore(add(value, 0x0220), abi_decode_struct_Fr(add(headStart, 1248), end))\n        mstore(add(value, 0x0240), abi_decode_struct_Fr(add(headStart, 1280), end))\n        mstore(add(value, _3), abi_decode_struct_G1Point(add(headStart, 1312), end))\n        mstore(add(value, 0x0280), abi_decode_struct_G1Point(add(headStart, 1376), end))\n    }\n    function abi_decode_t_array_t_struct_Fr_memory_ptr_memory_ptr(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let memPtr := mload(64)\n        let _1 := 288\n        let newFreePtr := add(memPtr, _1)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        let dst := memPtr\n        let srcEnd := add(offset, _1)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := offset\n        for { } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n            mstore(dst, abi_decode_struct_Fr(src, end))\n            dst := add(dst, 0x20)\n        }\n        array := memPtr\n    }\n    function abi_decode_struct_PartialVerifierState(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x0380) { revert(0, 0) }\n        value := allocate_memory_2483()\n        mstore(value, abi_decode_struct_Fr(headStart, end))\n        mstore(add(value, 32), abi_decode_struct_Fr(add(headStart, 32), end))\n        mstore(add(value, 64), abi_decode_struct_Fr(add(headStart, 64), end))\n        mstore(add(value, 96), abi_decode_struct_Fr(add(headStart, 96), end))\n        mstore(add(value, 128), abi_decode_t_array_t_struct_Fr_memory_ptr_memory_ptr(add(headStart, 128), end))\n        let _1 := 416\n        mstore(add(value, 0xa0), abi_decode_struct_Fr(add(headStart, _1), end))\n        let _2 := 448\n        mstore(add(value, 0xc0), abi_decode_struct_Fr(add(headStart, _2), end))\n        let _3 := 480\n        mstore(add(value, 0xe0), abi_decode_struct_Fr(add(headStart, _3), end))\n        let _4 := 512\n        mstore(add(value, 0x0100), abi_decode_struct_Fr(add(headStart, _4), end))\n        let _5 := 544\n        mstore(add(value, 0x0120), abi_decode_struct_Fr(add(headStart, _5), end))\n        let _6 := 576\n        mstore(add(value, 0x0140), abi_decode_struct_Fr(add(headStart, _6), end))\n        mstore(add(value, 0x0160), abi_decode_struct_Fr(add(headStart, 0x0260), end))\n        mstore(add(value, 0x0180), abi_decode_struct_Fr(add(headStart, 640), end))\n        mstore(add(value, _1), abi_decode_struct_Fr(add(headStart, 672), end))\n        mstore(add(value, _2), abi_decode_struct_Fr(add(headStart, 704), end))\n        mstore(add(value, _3), abi_decode_struct_Fr(add(headStart, 736), end))\n        mstore(add(value, _4), abi_decode_struct_Fr(add(headStart, 768), end))\n        mstore(add(value, _5), abi_decode_struct_Fr(add(headStart, 800), end))\n        mstore(add(value, _6), abi_decode_struct_G1Point(add(headStart, 832), end))\n    }\n    function abi_decode_tuple_t_struct$_VerificationKey_$387_memory_ptrt_struct$_Proof_$484_memory_ptrt_struct$_PartialVerifierState_$544_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 2592) { revert(0, 0) }\n        let _2 := 0x0680\n        if slt(_1, _2) { revert(0, 0) }\n        let value := allocate_memory_2484()\n        mstore(value, calldataload(headStart))\n        mstore(add(value, 32), calldataload(add(headStart, 32)))\n        mstore(add(value, 64), abi_decode_struct_Fr(add(headStart, 64), dataEnd))\n        mstore(add(value, 96), abi_decode_array_struct_G1Point(add(headStart, 96), dataEnd))\n        mstore(add(value, 0x80), abi_decode_t_array_t_struct_G1Point(add(headStart, 224), dataEnd))\n        mstore(add(value, 0xa0), abi_decode_array_struct_G1Point_memory_ptr_memory_ptr(add(headStart, 672), dataEnd))\n        mstore(add(value, 0xc0), abi_decode_struct_G1Point(add(headStart, 928), dataEnd))\n        mstore(add(value, 224), abi_decode_array_struct_G1Point_memory_ptr_memory_ptr(add(headStart, 992), dataEnd))\n        mstore(add(value, 0x0100), abi_decode_struct_G1Point(add(headStart, 1248), dataEnd))\n        mstore(add(value, 0x0120), abi_decode_t_array_t_struct_Fr(add(headStart, 1312), dataEnd))\n        mstore(add(value, 0x0140), abi_decode_array_struct_G2Point(add(headStart, 1408), dataEnd))\n        value0 := value\n        let offset := calldataload(add(headStart, _2))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value1 := abi_decode_struct_Proof(add(headStart, offset), dataEnd)\n        value2 := abi_decode_struct_PartialVerifierState(add(headStart, 1696), dataEnd)\n    }\n    function abi_encode_struct_G1Point(value, pos)\n    {\n        mstore(pos, mload(value))\n        mstore(add(pos, 0x20), mload(add(value, 0x20)))\n    }\n    function abi_encode_tuple_t_struct$_G1Point_$6027_memory_ptr__to_t_struct$_G1Point_$6027_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        abi_encode_struct_G1Point(value0, headStart)\n    }\n    function abi_encode_array_struct_G1Point(value, pos)\n    {\n        pos := pos\n        let srcPtr := value\n        let i := 0\n        for { } lt(i, 0x06) { i := add(i, 1) }\n        {\n            abi_encode_struct_G1Point(mload(srcPtr), pos)\n            pos := add(pos, 0x40)\n            srcPtr := add(srcPtr, 0x20)\n        }\n    }\n    function abi_encode_array_struct_Fr(value, pos)\n    {\n        pos := pos\n        let srcPtr := value\n        let i := 0\n        for { } lt(i, 0x06) { i := add(i, 1) }\n        {\n            mstore(pos, mload(mload(srcPtr)))\n            let _1 := 0x20\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n    }\n    function abi_encode_tuple_t_struct$_Queries_$3165_memory_ptr__to_t_struct$_Queries_$3165_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 1824)\n        let _1 := mload(value0)\n        let pos := headStart\n        pos := headStart\n        let srcPtr := _1\n        let i := 0\n        for { } lt(i, 0x0d) { i := add(i, 1) }\n        {\n            abi_encode_struct_G1Point(mload(srcPtr), pos)\n            pos := add(pos, 0x40)\n            srcPtr := add(srcPtr, 0x20)\n        }\n        let _2 := 0x20\n        let memberValue0 := mload(add(value0, _2))\n        let pos_1 := add(headStart, 0x0340)\n        pos_1 := pos_1\n        let srcPtr_1 := memberValue0\n        let i_1 := 0\n        for { } lt(i_1, 0x0d) { i_1 := add(i_1, 1) }\n        {\n            mstore(pos_1, mload(mload(srcPtr_1)))\n            pos_1 := add(pos_1, _2)\n            srcPtr_1 := add(srcPtr_1, _2)\n        }\n        let memberValue0_1 := mload(add(value0, 0x40))\n        abi_encode_array_struct_G1Point(memberValue0_1, add(headStart, 0x04e0))\n        let memberValue0_2 := mload(add(value0, 0x60))\n        abi_encode_array_struct_Fr(memberValue0_2, add(headStart, 0x0660))\n    }\n    function abi_decode_tuple_t_struct$_PartialVerifierState_$544_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 896) { revert(0, 0) }\n        value0 := abi_decode_struct_PartialVerifierState(headStart, dataEnd)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100415760003560e01c806338fdad141461004657806397e2957d1461006f578063fec4e96e1461008f575b600080fd5b6100596100543660046111c0565b6100a4565b60405161006691906112ea565b60405180910390f35b61008261007d3660046111c0565b6101f9565b6040516100669190611363565b6100a261009d366004611404565b61055d565b005b604080518082019091526000808252602082015260408051602081019091526000815260408051602081019091526000815260808501516100fd9060005b60200201516040805160208101909152600081529051815290565b9150610109828061060b565b60808501516101219060015b60200201518390610625565b60808401516101399060015b6020020151839061060b565b6101438183610657565b60808501516101539060016100e2565b915061015f828061060b565b608085015161016f906002610115565b608084015161017f90600261012d565b6101898183610657565b60808501516101999060026100e2565b60808601519092506101ac90600061012d565b60808501516101bc906003610115565b60808401516101cc90600361012d565b6101d68183610657565b60608601516101ef90829060015b602002015190610671565b9695505050505050565b6102016107d2565b600260005b6004811015610284578460200151816004811061022557610225611428565b6020020151835183600d811061023d5761023d611428565b60200201526080850151816004811061025857610258611428565b6020020151836020015183600d811061027357610273611428565b602002015260019182019101610206565b50606085015151825182600d811061029e5761029e611428565b602002015260c084015160006020020151826020015182600d81106102c5576102c5611428565b602002015260010160005b6102dc6001600461143e565b811015610358578560a0015181600481106102f9576102f9611428565b6020020151835183600d811061031157610311611428565b602002015260e0850151816003811061032c5761032c611428565b6020020151836020015183600d811061034757610347611428565b6020020152600191820191016102d0565b50604084810151908301515260208401516103756001600461143e565b6004811061038557610385611428565b6020908102919091015160408401518201526101008501516060840180519190915260a0808701515191519092015260e086015151908401516000906103db906040805160208101909152600081529051815290565b905060015b600481101561042e57610403828960e0015183600481106101e4576101e4611428565b61024087018190526104169084906106b6565b60a086015161042690839061060b565b6001016103e0565b508351829084600d811061044457610444611428565b6020020181905250856101e00151846020015184600d811061046857610468611428565b602002015260c087015184516001949094019384600d811061048c5761048c611428565b6020020181905250856102200151846020015184600d81106104b0576104b0611428565b602002015261010087015184516001949094019384600d81106104d5576104d5611428565b6020020181905250856102400151846020015184600d81106104f9576104f9611428565b602002015250610160850151604084810180518201929092526101a0870151606080870180519093019190915261018088015183518201526101c0880151825190910152905160809081019290925261020090950151945101939093529392505050565b60208101515160000361056f57600080fd5b61057960016106c5565b608082018051919091526020808301805160408051808501825260008082529251815294518401949094529051835192830190935281529051815260025b60098110156106065760208301516105d090839061060b565b60408051602081019091526000815282518152836080015182600981106105f9576105f9611428565b60200201526001016105b7565b505050565b600080516020611460833981519152815183510990915250565b600080516020611460833981519152815161064e9060008051602061146083398151915261143e565b83510890915250565b600080516020611460833981519152815183510890915250565b60408051808201909152600080825260208201528251158015610698575082602001516001145b156106a557600060208401525b6106b0838383610700565b92915050565b6106c1828284610742565b5050565b60408051602081019091526000815260008051602061146083398151915282106106ee57600080fd5b50604080516020810190915290815290565b610708610811565b835181526020840151816001602002015282518160026020020152600060408360608460075afa90508061073b57600080fd5b5050505050565b815115801561075357506020820151155b1561076b578251815260209283015192019190915250565b825115801561077c57506020830151155b15610791578151815260209182015191015250565b61079961082f565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460065afa90508061073b57600080fd5b60405180608001604052806107e561084d565b81526020016107f2610887565b81526020016107ff6108bc565b815260200161080c6108e6565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806101a00160405280600d905b604080518082019091526000808252602082015281526020019060019003908161085d5790505090565b604051806101a00160405280600d905b6040805160208101909152600081528152602001906001900390816108975790505090565b604080516101008101909152600060c0820181815260e0830191909152815260056020820161085d565b6040805160e08101909152600060c082019081528152600560208201610897565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561093f5761093f610907565b60405290565b6040516102a081016001600160401b038111828210171561093f5761093f610907565b60405161026081016001600160401b038111828210171561093f5761093f610907565b60405161016081016001600160401b038111828210171561093f5761093f610907565b604051608081016001600160401b038111828210171561093f5761093f610907565b6000602082840312156109e257600080fd5b604051602081018181106001600160401b0382111715610a0457610a04610907565b6040529135825250919050565b600060408284031215610a2357600080fd5b610a2b61091d565b9050813581526020820135602082015292915050565b600082601f830112610a5257600080fd5b610a5a61091d565b806080840185811115610a6c57600080fd5b845b81811015610a9057610a808782610a11565b8452602090930192604001610a6e565b509095945050505050565b600082601f830112610aac57600080fd5b6040805160e081018181106001600160401b0382111715610acf57610acf610907565b8252806101c0850186811115610ae457600080fd5b855b81811015610b0757610af88882610a11565b83526020909201918401610ae6565b50919695505050505050565b600082601f830112610b2457600080fd5b610b2c6109ae565b80610100840185811115610b3f57600080fd5b845b81811015610a9057610b538782610a11565b8452602090930192604001610b41565b600082601f830112610b7457600080fd5b604051606081018181106001600160401b0382111715610b9657610b96610907565b604052806060840185811115610bab57600080fd5b845b81811015610bcd57610bbf87826109d0565b835260209283019201610bad565b509195945050505050565b600082601f830112610be957600080fd5b610bf161091d565b806040840185811115610c0357600080fd5b845b81811015610a90578035845260209384019301610c05565b600082601f830112610c2e57600080fd5b610c3661091d565b80610100840185811115610c4957600080fd5b845b81811015610a905760808188031215610c645760008081fd5b610c6c61091d565b610c768883610bd8565b8152610c858860408401610bd8565b6020828101919091529085529390930192608001610c4b565b600082601f830112610caf57600080fd5b813560206001600160401b0380831115610ccb57610ccb610907565b8260051b604051601f19603f83011681018181108482111715610cf057610cf0610907565b604052938452858101830193838101925087851115610d0e57600080fd5b83870191505b84821015610d2d57813583529183019190830190610d14565b979650505050505050565b600082601f830112610d4957600080fd5b610d516109ae565b806080840185811115610d6357600080fd5b845b81811015610a9057610d7787826109d0565b845260209384019301610d65565b600082601f830112610d9657600080fd5b60405160208082018281106001600160401b0382111715610db957610db9610907565b6040528184820186811115610dcd57600080fd5b855b81811015610dee57610de188826109d0565b8352918301918301610dcf565b50929695505050505050565b60006105a08284031215610e0d57600080fd5b610e15610945565b905081356001600160401b03811115610e2d57600080fd5b610e3984828501610c9e565b825250610e498360208401610b13565b6020820152610120610e5d84828501610a11565b6040830152610160610e7185828601610b13565b6060840152610260610e8586828701610d38565b6080850152610e98866102e08701610d85565b60a0850152610eab866103008701610d85565b60c0850152610ebe866103208701610b63565b60e0850152610ed18661038087016109d0565b610100850152610ee5866103a087016109d0565b83850152610ef7866103c087016109d0565b610140850152610f0b866103e08701610a11565b82850152610f1d866104208701610a11565b610180850152610f318661046087016109d0565b6101a0850152610f458661048087016109d0565b6101c0850152610f59866104a087016109d0565b6101e0850152610f6d866104c087016109d0565b610200850152610f81866104e087016109d0565b610220850152610f958661050087016109d0565b610240850152610fa9866105208701610a11565b81850152505050610fbe836105608401610a11565b61028082015292915050565b600082601f830112610fdb57600080fd5b6040516101208082018281106001600160401b0382111715610fff57610fff610907565b6040528301818582111561101257600080fd5b845b82811015610bcd5761102687826109d0565b825260209182019101611014565b6000610380828403121561104757600080fd5b61104f610968565b905061105b83836109d0565b815261106a83602084016109d0565b602082015261107c83604084016109d0565b604082015261108e83606084016109d0565b60608201526110a08360808401610fca565b60808201526101a06110b4848285016109d0565b60a08301526101c06110c8858286016109d0565b60c08401526101e06110dc868287016109d0565b60e08501526102006110f0878288016109d0565b610100860152610220611105888289016109d0565b61012087015261024061111a89828a016109d0565b61014088015261112e896102608a016109d0565b610160880152611142896102808a016109d0565b610180880152611156896102a08a016109d0565b86880152611168896102c08a016109d0565b8588015261117a896102e08a016109d0565b8488015261118c896103008a016109d0565b8388015261119e896103208a016109d0565b828801526111b0896103408a01610a11565b8188015250505050505092915050565b6000806000838503610a208112156111d757600080fd5b610680808212156111e757600080fd5b6111ef61098b565b9150853582526020860135602083015261120c87604088016109d0565b604083015261121e8760608801610a41565b60608301526112308760e08801610a9b565b6080830152611243876102a08801610b13565b60a0830152611256876103a08801610a11565b60c0830152611269876103e08801610b13565b60e083015261127c876104e08801610a11565b610100830152611290876105208801610b63565b6101208301526112a4876105808801610c1d565b6101408301529093508401356001600160401b038111156112c457600080fd5b6112d086828701610dfa565b9250506112e1856106a08601611034565b90509250925092565b8151815260208083015190820152604081016106b0565b8060005b60068110156113395761132384835180518252602090810151910152565b6040939093019260209190910190600101611305565b50505050565b8060005b600681101561133957815151845260209384019390910190600101611343565b81516107208201908260005b600d8110156113a35761138d82845180518252602090810151910152565b602092909201916040919091019060010161136f565b505050602080840151610340840160005b600d8110156113d257825151825291830191908301906001016113b4565b5050505060408301516113e96104e0840182611301565b5060608301516113fd61066084018261133f565b5092915050565b6000610380828403121561141757600080fd5b6114218383611034565b9392505050565b634e487b7160e01b600052603260045260246000fd5b818103818111156106b057634e487b7160e01b600052601160045260246000fdfe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a26469706673582212200222dfc35b6620f701e010209823da81eed2e5c79c782744b5520ed12d6da01c64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x38FDAD14 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x97E2957D EQ PUSH2 0x6F JUMPI DUP1 PUSH4 0xFEC4E96E EQ PUSH2 0x8F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x54 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C0 JUMP JUMPDEST PUSH2 0xA4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x12EA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x82 PUSH2 0x7D CALLDATASIZE PUSH1 0x4 PUSH2 0x11C0 JUMP JUMPDEST PUSH2 0x1F9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x1363 JUMP JUMPDEST PUSH2 0xA2 PUSH2 0x9D CALLDATASIZE PUSH1 0x4 PUSH2 0x1404 JUMP JUMPDEST PUSH2 0x55D JUMP JUMPDEST STOP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0xFD SWAP1 PUSH1 0x0 JUMPDEST PUSH1 0x20 MUL ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP2 POP PUSH2 0x109 DUP3 DUP1 PUSH2 0x60B JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x121 SWAP1 PUSH1 0x1 JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 SWAP1 PUSH2 0x625 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x139 SWAP1 PUSH1 0x1 JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 SWAP1 PUSH2 0x60B JUMP JUMPDEST PUSH2 0x143 DUP2 DUP4 PUSH2 0x657 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x153 SWAP1 PUSH1 0x1 PUSH2 0xE2 JUMP JUMPDEST SWAP2 POP PUSH2 0x15F DUP3 DUP1 PUSH2 0x60B JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x16F SWAP1 PUSH1 0x2 PUSH2 0x115 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x17F SWAP1 PUSH1 0x2 PUSH2 0x12D JUMP JUMPDEST PUSH2 0x189 DUP2 DUP4 PUSH2 0x657 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x199 SWAP1 PUSH1 0x2 PUSH2 0xE2 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x1AC SWAP1 PUSH1 0x0 PUSH2 0x12D JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x1BC SWAP1 PUSH1 0x3 PUSH2 0x115 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x1CC SWAP1 PUSH1 0x3 PUSH2 0x12D JUMP JUMPDEST PUSH2 0x1D6 DUP2 DUP4 PUSH2 0x657 JUMP JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD PUSH2 0x1EF SWAP1 DUP3 SWAP1 PUSH1 0x1 JUMPDEST PUSH1 0x20 MUL ADD MLOAD SWAP1 PUSH2 0x671 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x201 PUSH2 0x7D2 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x284 JUMPI DUP5 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0x4 DUP2 LT PUSH2 0x225 JUMPI PUSH2 0x225 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 MLOAD DUP4 PUSH1 0xD DUP2 LT PUSH2 0x23D JUMPI PUSH2 0x23D PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x80 DUP6 ADD MLOAD DUP2 PUSH1 0x4 DUP2 LT PUSH2 0x258 JUMPI PUSH2 0x258 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0xD DUP2 LT PUSH2 0x273 JUMPI PUSH2 0x273 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x206 JUMP JUMPDEST POP PUSH1 0x60 DUP6 ADD MLOAD MLOAD DUP3 MLOAD DUP3 PUSH1 0xD DUP2 LT PUSH2 0x29E JUMPI PUSH2 0x29E PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x0 PUSH1 0x20 MUL ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0xD DUP2 LT PUSH2 0x2C5 JUMPI PUSH2 0x2C5 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 ADD PUSH1 0x0 JUMPDEST PUSH2 0x2DC PUSH1 0x1 PUSH1 0x4 PUSH2 0x143E JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x358 JUMPI DUP6 PUSH1 0xA0 ADD MLOAD DUP2 PUSH1 0x4 DUP2 LT PUSH2 0x2F9 JUMPI PUSH2 0x2F9 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 MLOAD DUP4 PUSH1 0xD DUP2 LT PUSH2 0x311 JUMPI PUSH2 0x311 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0xE0 DUP6 ADD MLOAD DUP2 PUSH1 0x3 DUP2 LT PUSH2 0x32C JUMPI PUSH2 0x32C PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0xD DUP2 LT PUSH2 0x347 JUMPI PUSH2 0x347 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2D0 JUMP JUMPDEST POP PUSH1 0x40 DUP5 DUP2 ADD MLOAD SWAP1 DUP4 ADD MLOAD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x375 PUSH1 0x1 PUSH1 0x4 PUSH2 0x143E JUMP JUMPDEST PUSH1 0x4 DUP2 LT PUSH2 0x385 JUMPI PUSH2 0x385 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD DUP3 ADD MSTORE PUSH2 0x100 DUP6 ADD MLOAD PUSH1 0x60 DUP5 ADD DUP1 MLOAD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP1 DUP8 ADD MLOAD MLOAD SWAP2 MLOAD SWAP1 SWAP3 ADD MSTORE PUSH1 0xE0 DUP7 ADD MLOAD MLOAD SWAP1 DUP5 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x3DB SWAP1 PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x42E JUMPI PUSH2 0x403 DUP3 DUP10 PUSH1 0xE0 ADD MLOAD DUP4 PUSH1 0x4 DUP2 LT PUSH2 0x1E4 JUMPI PUSH2 0x1E4 PUSH2 0x1428 JUMP JUMPDEST PUSH2 0x240 DUP8 ADD DUP2 SWAP1 MSTORE PUSH2 0x416 SWAP1 DUP5 SWAP1 PUSH2 0x6B6 JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MLOAD PUSH2 0x426 SWAP1 DUP4 SWAP1 PUSH2 0x60B JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x3E0 JUMP JUMPDEST POP DUP4 MLOAD DUP3 SWAP1 DUP5 PUSH1 0xD DUP2 LT PUSH2 0x444 JUMPI PUSH2 0x444 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD DUP2 SWAP1 MSTORE POP DUP6 PUSH2 0x1E0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0xD DUP2 LT PUSH2 0x468 JUMPI PUSH2 0x468 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0xC0 DUP8 ADD MLOAD DUP5 MLOAD PUSH1 0x1 SWAP5 SWAP1 SWAP5 ADD SWAP4 DUP5 PUSH1 0xD DUP2 LT PUSH2 0x48C JUMPI PUSH2 0x48C PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD DUP2 SWAP1 MSTORE POP DUP6 PUSH2 0x220 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0xD DUP2 LT PUSH2 0x4B0 JUMPI PUSH2 0x4B0 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH2 0x100 DUP8 ADD MLOAD DUP5 MLOAD PUSH1 0x1 SWAP5 SWAP1 SWAP5 ADD SWAP4 DUP5 PUSH1 0xD DUP2 LT PUSH2 0x4D5 JUMPI PUSH2 0x4D5 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD DUP2 SWAP1 MSTORE POP DUP6 PUSH2 0x240 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0xD DUP2 LT PUSH2 0x4F9 JUMPI PUSH2 0x4F9 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE POP PUSH2 0x160 DUP6 ADD MLOAD PUSH1 0x40 DUP5 DUP2 ADD DUP1 MLOAD DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x1A0 DUP8 ADD MLOAD PUSH1 0x60 DUP1 DUP8 ADD DUP1 MLOAD SWAP1 SWAP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 DUP9 ADD MLOAD DUP4 MLOAD DUP3 ADD MSTORE PUSH2 0x1C0 DUP9 ADD MLOAD DUP3 MLOAD SWAP1 SWAP2 ADD MSTORE SWAP1 MLOAD PUSH1 0x80 SWAP1 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x200 SWAP1 SWAP6 ADD MLOAD SWAP5 MLOAD ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD MLOAD PUSH1 0x0 SUB PUSH2 0x56F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x579 PUSH1 0x1 PUSH2 0x6C5 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP1 MLOAD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP1 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP6 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE SWAP3 MLOAD DUP2 MSTORE SWAP5 MLOAD DUP5 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP1 MLOAD DUP4 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP4 MSTORE DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE PUSH1 0x2 JUMPDEST PUSH1 0x9 DUP2 LT ISZERO PUSH2 0x606 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x5D0 SWAP1 DUP4 SWAP1 PUSH2 0x60B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP3 MLOAD DUP2 MSTORE DUP4 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x9 DUP2 LT PUSH2 0x5F9 JUMPI PUSH2 0x5F9 PUSH2 0x1428 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 ADD PUSH2 0x5B7 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1460 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MLOAD DUP4 MLOAD MULMOD SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1460 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MLOAD PUSH2 0x64E SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1460 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH2 0x143E JUMP JUMPDEST DUP4 MLOAD ADDMOD SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1460 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MLOAD DUP4 MLOAD ADDMOD SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP3 MLOAD ISZERO DUP1 ISZERO PUSH2 0x698 JUMPI POP DUP3 PUSH1 0x20 ADD MLOAD PUSH1 0x1 EQ JUMPDEST ISZERO PUSH2 0x6A5 JUMPI PUSH1 0x0 PUSH1 0x20 DUP5 ADD MSTORE JUMPDEST PUSH2 0x6B0 DUP4 DUP4 DUP4 PUSH2 0x700 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x6C1 DUP3 DUP3 DUP5 PUSH2 0x742 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1460 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 LT PUSH2 0x6EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE SWAP1 DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x708 PUSH2 0x811 JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP5 ADD MLOAD DUP2 PUSH1 0x1 PUSH1 0x20 MUL ADD MSTORE DUP3 MLOAD DUP2 PUSH1 0x2 PUSH1 0x20 MUL ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP4 PUSH1 0x60 DUP5 PUSH1 0x7 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x73B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD ISZERO DUP1 ISZERO PUSH2 0x753 JUMPI POP PUSH1 0x20 DUP3 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x76B JUMPI DUP3 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST DUP3 MLOAD ISZERO DUP1 ISZERO PUSH2 0x77C JUMPI POP PUSH1 0x20 DUP4 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x791 JUMPI DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD MLOAD SWAP2 ADD MSTORE POP JUMP JUMPDEST PUSH2 0x799 PUSH2 0x82F JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x40 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP5 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x0 SWAP1 DUP4 PUSH1 0x80 DUP5 PUSH1 0x6 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x73B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x7E5 PUSH2 0x84D JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x7F2 PUSH2 0x887 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x7FF PUSH2 0x8BC JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x80C PUSH2 0x8E6 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x1A0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xD SWAP1 JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x85D JUMPI SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x1A0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xD SWAP1 JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x897 JUMPI SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH1 0xC0 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0xE0 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP3 ADD PUSH2 0x85D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH1 0xC0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP3 ADD PUSH2 0x897 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x93F JUMPI PUSH2 0x93F PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2A0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x93F JUMPI PUSH2 0x93F PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x260 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x93F JUMPI PUSH2 0x93F PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x160 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x93F JUMPI PUSH2 0x93F PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x93F JUMPI PUSH2 0x93F PUSH2 0x907 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0xA04 JUMPI PUSH2 0xA04 PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 CALLDATALOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA2B PUSH2 0x91D JUMP JUMPDEST SWAP1 POP DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA5A PUSH2 0x91D JUMP JUMPDEST DUP1 PUSH1 0x80 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0xA6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA90 JUMPI PUSH2 0xA80 DUP8 DUP3 PUSH2 0xA11 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x40 ADD PUSH2 0xA6E JUMP JUMPDEST POP SWAP1 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xAAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0xACF JUMPI PUSH2 0xACF PUSH2 0x907 JUMP JUMPDEST DUP3 MSTORE DUP1 PUSH2 0x1C0 DUP6 ADD DUP7 DUP2 GT ISZERO PUSH2 0xAE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB07 JUMPI PUSH2 0xAF8 DUP9 DUP3 PUSH2 0xA11 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 DUP5 ADD PUSH2 0xAE6 JUMP JUMPDEST POP SWAP2 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xB24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB2C PUSH2 0x9AE JUMP JUMPDEST DUP1 PUSH2 0x100 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0xB3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA90 JUMPI PUSH2 0xB53 DUP8 DUP3 PUSH2 0xA11 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x40 ADD PUSH2 0xB41 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xB74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0xB96 JUMPI PUSH2 0xB96 PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0xBAB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBCD JUMPI PUSH2 0xBBF DUP8 DUP3 PUSH2 0x9D0 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0xBAD JUMP JUMPDEST POP SWAP2 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xBE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBF1 PUSH2 0x91D JUMP JUMPDEST DUP1 PUSH1 0x40 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0xC03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA90 JUMPI DUP1 CALLDATALOAD DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0xC05 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xC2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC36 PUSH2 0x91D JUMP JUMPDEST DUP1 PUSH2 0x100 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0xC49 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA90 JUMPI PUSH1 0x80 DUP2 DUP9 SUB SLT ISZERO PUSH2 0xC64 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0xC6C PUSH2 0x91D JUMP JUMPDEST PUSH2 0xC76 DUP9 DUP4 PUSH2 0xBD8 JUMP JUMPDEST DUP2 MSTORE PUSH2 0xC85 DUP9 PUSH1 0x40 DUP5 ADD PUSH2 0xBD8 JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP6 MSTORE SWAP4 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x80 ADD PUSH2 0xC4B JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xCAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP4 GT ISZERO PUSH2 0xCCB JUMPI PUSH2 0xCCB PUSH2 0x907 JUMP JUMPDEST DUP3 PUSH1 0x5 SHL PUSH1 0x40 MLOAD PUSH1 0x1F NOT PUSH1 0x3F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT DUP5 DUP3 GT OR ISZERO PUSH2 0xCF0 JUMPI PUSH2 0xCF0 PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP4 DUP5 MSTORE DUP6 DUP2 ADD DUP4 ADD SWAP4 DUP4 DUP2 ADD SWAP3 POP DUP8 DUP6 GT ISZERO PUSH2 0xD0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP8 ADD SWAP2 POP JUMPDEST DUP5 DUP3 LT ISZERO PUSH2 0xD2D JUMPI DUP2 CALLDATALOAD DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH2 0xD14 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xD49 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD51 PUSH2 0x9AE JUMP JUMPDEST DUP1 PUSH1 0x80 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0xD63 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA90 JUMPI PUSH2 0xD77 DUP8 DUP3 PUSH2 0x9D0 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0xD65 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xD96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP3 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0xDB9 JUMPI PUSH2 0xDB9 PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MSTORE DUP2 DUP5 DUP3 ADD DUP7 DUP2 GT ISZERO PUSH2 0xDCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDEE JUMPI PUSH2 0xDE1 DUP9 DUP3 PUSH2 0x9D0 JUMP JUMPDEST DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0xDCF JUMP JUMPDEST POP SWAP3 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5A0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE15 PUSH2 0x945 JUMP JUMPDEST SWAP1 POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0xE2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE39 DUP5 DUP3 DUP6 ADD PUSH2 0xC9E JUMP JUMPDEST DUP3 MSTORE POP PUSH2 0xE49 DUP4 PUSH1 0x20 DUP5 ADD PUSH2 0xB13 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0xE5D DUP5 DUP3 DUP6 ADD PUSH2 0xA11 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x160 PUSH2 0xE71 DUP6 DUP3 DUP7 ADD PUSH2 0xB13 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x260 PUSH2 0xE85 DUP7 DUP3 DUP8 ADD PUSH2 0xD38 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0xE98 DUP7 PUSH2 0x2E0 DUP8 ADD PUSH2 0xD85 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0xEAB DUP7 PUSH2 0x300 DUP8 ADD PUSH2 0xD85 JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0xEBE DUP7 PUSH2 0x320 DUP8 ADD PUSH2 0xB63 JUMP JUMPDEST PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0xED1 DUP7 PUSH2 0x380 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0xEE5 DUP7 PUSH2 0x3A0 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST DUP4 DUP6 ADD MSTORE PUSH2 0xEF7 DUP7 PUSH2 0x3C0 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MSTORE PUSH2 0xF0B DUP7 PUSH2 0x3E0 DUP8 ADD PUSH2 0xA11 JUMP JUMPDEST DUP3 DUP6 ADD MSTORE PUSH2 0xF1D DUP7 PUSH2 0x420 DUP8 ADD PUSH2 0xA11 JUMP JUMPDEST PUSH2 0x180 DUP6 ADD MSTORE PUSH2 0xF31 DUP7 PUSH2 0x460 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x1A0 DUP6 ADD MSTORE PUSH2 0xF45 DUP7 PUSH2 0x480 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x1C0 DUP6 ADD MSTORE PUSH2 0xF59 DUP7 PUSH2 0x4A0 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x1E0 DUP6 ADD MSTORE PUSH2 0xF6D DUP7 PUSH2 0x4C0 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x200 DUP6 ADD MSTORE PUSH2 0xF81 DUP7 PUSH2 0x4E0 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x220 DUP6 ADD MSTORE PUSH2 0xF95 DUP7 PUSH2 0x500 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x240 DUP6 ADD MSTORE PUSH2 0xFA9 DUP7 PUSH2 0x520 DUP8 ADD PUSH2 0xA11 JUMP JUMPDEST DUP2 DUP6 ADD MSTORE POP POP POP PUSH2 0xFBE DUP4 PUSH2 0x560 DUP5 ADD PUSH2 0xA11 JUMP JUMPDEST PUSH2 0x280 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xFDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP1 DUP3 ADD DUP3 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0xFFF JUMPI PUSH2 0xFFF PUSH2 0x907 JUMP JUMPDEST PUSH1 0x40 MSTORE DUP4 ADD DUP2 DUP6 DUP3 GT ISZERO PUSH2 0x1012 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xBCD JUMPI PUSH2 0x1026 DUP8 DUP3 PUSH2 0x9D0 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1014 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x380 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1047 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x104F PUSH2 0x968 JUMP JUMPDEST SWAP1 POP PUSH2 0x105B DUP4 DUP4 PUSH2 0x9D0 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x106A DUP4 PUSH1 0x20 DUP5 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x107C DUP4 PUSH1 0x40 DUP5 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x108E DUP4 PUSH1 0x60 DUP5 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x10A0 DUP4 PUSH1 0x80 DUP5 ADD PUSH2 0xFCA JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x10B4 DUP5 DUP3 DUP6 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x1C0 PUSH2 0x10C8 DUP6 DUP3 DUP7 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x1E0 PUSH2 0x10DC DUP7 DUP3 DUP8 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x200 PUSH2 0x10F0 DUP8 DUP3 DUP9 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x220 PUSH2 0x1105 DUP9 DUP3 DUP10 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x120 DUP8 ADD MSTORE PUSH2 0x240 PUSH2 0x111A DUP10 DUP3 DUP11 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x140 DUP9 ADD MSTORE PUSH2 0x112E DUP10 PUSH2 0x260 DUP11 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x160 DUP9 ADD MSTORE PUSH2 0x1142 DUP10 PUSH2 0x280 DUP11 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH2 0x180 DUP9 ADD MSTORE PUSH2 0x1156 DUP10 PUSH2 0x2A0 DUP11 ADD PUSH2 0x9D0 JUMP JUMPDEST DUP7 DUP9 ADD MSTORE PUSH2 0x1168 DUP10 PUSH2 0x2C0 DUP11 ADD PUSH2 0x9D0 JUMP JUMPDEST DUP6 DUP9 ADD MSTORE PUSH2 0x117A DUP10 PUSH2 0x2E0 DUP11 ADD PUSH2 0x9D0 JUMP JUMPDEST DUP5 DUP9 ADD MSTORE PUSH2 0x118C DUP10 PUSH2 0x300 DUP11 ADD PUSH2 0x9D0 JUMP JUMPDEST DUP4 DUP9 ADD MSTORE PUSH2 0x119E DUP10 PUSH2 0x320 DUP11 ADD PUSH2 0x9D0 JUMP JUMPDEST DUP3 DUP9 ADD MSTORE PUSH2 0x11B0 DUP10 PUSH2 0x340 DUP11 ADD PUSH2 0xA11 JUMP JUMPDEST DUP2 DUP9 ADD MSTORE POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP6 SUB PUSH2 0xA20 DUP2 SLT ISZERO PUSH2 0x11D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x680 DUP1 DUP3 SLT ISZERO PUSH2 0x11E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11EF PUSH2 0x98B JUMP JUMPDEST SWAP2 POP DUP6 CALLDATALOAD DUP3 MSTORE PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x120C DUP8 PUSH1 0x40 DUP9 ADD PUSH2 0x9D0 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x121E DUP8 PUSH1 0x60 DUP9 ADD PUSH2 0xA41 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x1230 DUP8 PUSH1 0xE0 DUP9 ADD PUSH2 0xA9B JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x1243 DUP8 PUSH2 0x2A0 DUP9 ADD PUSH2 0xB13 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x1256 DUP8 PUSH2 0x3A0 DUP9 ADD PUSH2 0xA11 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x1269 DUP8 PUSH2 0x3E0 DUP9 ADD PUSH2 0xB13 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x127C DUP8 PUSH2 0x4E0 DUP9 ADD PUSH2 0xA11 JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE PUSH2 0x1290 DUP8 PUSH2 0x520 DUP9 ADD PUSH2 0xB63 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE PUSH2 0x12A4 DUP8 PUSH2 0x580 DUP9 ADD PUSH2 0xC1D JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE SWAP1 SWAP4 POP DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x12C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12D0 DUP7 DUP3 DUP8 ADD PUSH2 0xDFA JUMP JUMPDEST SWAP3 POP POP PUSH2 0x12E1 DUP6 PUSH2 0x6A0 DUP7 ADD PUSH2 0x1034 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD PUSH2 0x6B0 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST PUSH1 0x6 DUP2 LT ISZERO PUSH2 0x1339 JUMPI PUSH2 0x1323 DUP5 DUP4 MLOAD DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x40 SWAP4 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x20 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1305 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST PUSH1 0x6 DUP2 LT ISZERO PUSH2 0x1339 JUMPI DUP2 MLOAD MLOAD DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1343 JUMP JUMPDEST DUP2 MLOAD PUSH2 0x720 DUP3 ADD SWAP1 DUP3 PUSH1 0x0 JUMPDEST PUSH1 0xD DUP2 LT ISZERO PUSH2 0x13A3 JUMPI PUSH2 0x138D DUP3 DUP5 MLOAD DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x20 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x136F JUMP JUMPDEST POP POP POP PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH2 0x340 DUP5 ADD PUSH1 0x0 JUMPDEST PUSH1 0xD DUP2 LT ISZERO PUSH2 0x13D2 JUMPI DUP3 MLOAD MLOAD DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x13B4 JUMP JUMPDEST POP POP POP POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x13E9 PUSH2 0x4E0 DUP5 ADD DUP3 PUSH2 0x1301 JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x13FD PUSH2 0x660 DUP5 ADD DUP3 PUSH2 0x133F JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x380 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1417 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1421 DUP4 DUP4 PUSH2 0x1034 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x6B0 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID ADDRESS PUSH5 0x4E72E131A0 0x29 0xB8 POP GASLIMIT 0xB6 DUP2 DUP2 PC 0x5D 0x28 CALLER 0xE8 BASEFEE PUSH26 0xB9709143E1F593F0000001A26469706673582212200222DFC35B PUSH7 0x20F701E0102098 0x23 0xDA DUP2 0xEE 0xD2 0xE5 0xC7 SWAP13 PUSH25 0x2744B5520ED12D6DA01C64736F6C6343000811003300000000 ","sourceMap":"817:29264:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20787:1232;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24964:2920;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8119:507::-;;;;;;:::i;:::-;;:::i;:::-;;20787:1232;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21138:31:6;;;;:41;;21170:1;21138:34;;;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;:1;605:103;21138:41:6;21134:45;-1:-1:-1;21189:15:6;21134:45;;21189:12;:15::i;:::-;21227:31;;;;21214:48;;21259:1;21227:34;;;;;21214:1;;:12;:48::i;:::-;21322:18;;;;21309:35;;21341:1;21322:21;;;;;21309:1;;:12;:35::i;:::-;21354:33;:19;21385:1;21354:30;:33::i;:::-;21425:31;;;;:41;;21457:1;21425:34;;:41;21421:45;-1:-1:-1;21476:15:6;21421:45;;21476:12;:15::i;:::-;21514:31;;;;21501:48;;21546:1;21514:34;;21501:48;21572:18;;;;21559:39;;21591:5;21572:25;;21559:39;21608:33;:19;21639:1;21608:30;:33::i;:::-;21680:31;;;;:41;;21712:1;21680:34;;:41;21744:31;;;;21676:45;;-1:-1:-1;21731:48:6;;21776:1;21744:34;;21731:48;21802:31;;;;21789:48;;21834:1;21802:34;;21789:48;21860:18;;;;21847:39;;21879:5;21860:25;;21847:39;21896:33;:19;21927:1;21896:30;:33::i;:::-;21949:29;;;;:63;;21992:19;;21979:1;21949:32;;;;;;:42;:63::i;:::-;21940:72;20787:1232;-1:-1:-1;;;;;;20787:1232:6:o;24964:2920::-;25122:22;;:::i;:::-;25238:1;25224:11;25249:261;232:1;25269;:15;25249:261;;;25354:5;:29;;;25384:1;25354:32;;;;;;;:::i;:::-;;;;;25322:24;;25347:3;25322:29;;;;;;;:::i;:::-;;;;:64;25427:31;;;;25459:1;25427:34;;;;;;;:::i;:::-;;;;;25400:7;:19;;;25420:3;25400:24;;;;;;;:::i;:::-;;;;:61;222:1:5;212:11;;;;;25249:261:6;;;-1:-1:-1;25616:29:6;;;;:32;25584:24;;25609:3;25584:29;;;;;;;:::i;:::-;;;;:64;25685:34;;;;25720:1;25685:37;;;;25658:7;:19;;;25678:3;25658:24;;;;;;;:::i;:::-;;;;:64;222:1:5;212:11;25771:9:6;25766:273;25790:15;25804:1;232;25790:15;:::i;:::-;25786:1;:19;25766:273;;;25875:2;:26;;;25902:1;25875:29;;;;;;;:::i;:::-;;;;;25843:24;;25868:3;25843:29;;;;;;;:::i;:::-;;;;:61;25945:42;;;;25988:1;25945:45;;;;;;;:::i;:::-;;;;;25918:7;:19;;;25938:3;25918:24;;;;;;;:::i;:::-;;;;:72;222:1:5;212:11;;;;;25766:273:6;;;-1:-1:-1;26085:47:6;;;;;26049:30;;;;:83;:33;26178:29;;;26208:15;26222:1;232;26208:15;:::i;:::-;26178:46;;;;;;;:::i;:::-;;;;;;;;;;26142:30;;;;:33;;:82;26266:55;;;;26235:25;;;;;:86;;;;26362:37;;;;;:40;26331:25;;:28;;;:71;26480:28;;;;:31;26559:9;;;;26261:1;;26559:16;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;:1;605:103;26559:16:6;26521:54;-1:-1:-1;26602:1:6;26585:297;26609:35;26605:39;;26585:297;;;26693:54;26735:11;26693:2;:28;;;26722:1;26693:31;;;;;;;:::i;:54::-;26682:8;;;:65;;;26761:62;;:35;;:52;:62::i;:::-;26861:9;;;;26838:33;;:11;;:22;:33::i;:::-;222:1:5;212:11;26585:297:6;;;-1:-1:-1;26891:24:6;;26923:35;;26916:3;26891:29;;;;;;;:::i;:::-;;;;:67;;;;26995:5;:32;;;26968:7;:19;;;26988:3;26968:24;;;;;;;:::i;:::-;;;;:59;27103:29;;;;27071:24;;222:1:5;212:11;;;;;;27071:29:6;;;;;;;:::i;:::-;;;;:61;;;;27169:5;:39;;;27142:7;:19;;;27162:3;27142:24;;;;;;;:::i;:::-;;;;:66;27284:31;;;;27252:24;;222:1:5;212:11;;;;;;27252:29:6;;;;;;;:::i;:::-;;;;:63;;;;27352:5;:41;;;27325:7;:19;;;27345:3;27325:24;;;;;;;:::i;:::-;;;;:68;-1:-1:-1;27439:30:6;;;;27403;;;;;;:33;;:66;;;;27510:38;;;;27479:25;;;;;;:28;;;:69;;;;27594:37;;;;27558:30;;:33;;:73;27672:45;;;;27641:25;;:28;;;:76;27727:30;;:33;;;;:71;;;;27839:38;;;;;27808:25;;:28;:69;;;;27403:30;24964:2920;-1:-1:-1;;;24964:2920:6:o;8119:507::-;8217:11;;;;:17;;:22;8209:31;;;;;;8274:23;8295:1;8274:20;:23::i;:::-;8250:18;;;;;:47;;;;:21;8331:11;;;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;8307:18:6;;:21;;:42;;;;8399:11;;-1:-1:-1;;;;;;;;;;691:10:16;;681:20;;8444:1:6;8427:193;8451:25;8447:29;;8427:193;;;8539:11;;;;8514:37;;:13;;:24;:37::i;:::-;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;8565:5:6;:18;;;8584:1;8565:21;;;;;;;:::i;:::-;;;;:44;222:1:5;212:11;8427:193:6;;;;8199:427;8119:507;:::o;1259:135:16:-;-1:-1:-1;;;;;;;;;;;1368:11:16;;1356:10;;1349:38;1336:51;;;-1:-1:-1;1259:135:16:o;1110:143::-;-1:-1:-1;;;;;;;;;;;1227:11:16;;1219:19;;-1:-1:-1;;;;;;;;;;;1219:19:16;:::i;:::-;1207:10;;1200:46;1187:59;;;-1:-1:-1;1110:143:16:o;969:135::-;-1:-1:-1;;;;;;;;;;;1078:11:16;;1066:10;;1059:38;1046:51;;;-1:-1:-1;969:135:16:o;6146:407::-;-1:-1:-1;;;;;;;;;;;;;;;;;6437:3:16;;:8;:20;;;;;6449:1;:3;;;6456:1;6449:8;6437:20;6433:58;;;6479:1;6473:3;;;:7;6433:58;6500:28;6520:1;6523;6526;6500:19;:28::i;:::-;6146:407;;;;:::o;4187:126::-;4275:31;4295:2;4299;4303;4275:19;:31::i;:::-;4187:126;;:::o;469:130::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;549:2:16;:10;541:19;;;;;;-1:-1:-1;577:15:16;;;;;;;;;;;;;469:130::o;6681:387::-;6816:23;;:::i;:::-;6860:3;;6849:14;;:8;6884:3;;;6849:5;6879:1;6873:8;;;:14;6908:7;;6897:5;6903:1;6897:8;;;:18;6925:12;7021:4;7015;7009;7002:5;6999:1;6992:5;6981:45;6970:56;;7053:7;7045:16;;;;;;6806:262;;6681:387;;;:::o;4319:821::-;4465:4;;:9;:22;;;;-1:-1:-1;4478:4:16;;;;:9;4465:22;4461:673;;;4556:4;;4547:13;;4583:4;;;;;4574:6;;:13;;;;-1:-1:-1;4319:821:16:o;4461:673::-;4628:4;;:9;:22;;;;-1:-1:-1;4641:4:16;;;;:9;4628:22;4624:510;;;4734:4;;4725:13;;4761:4;;;;;4752:6;;:13;-1:-1:-1;4319:821:16:o;4624:510::-;4816:23;;:::i;:::-;4865:4;;4854:15;;:8;4894:4;;;;4883:8;;;:15;4923:4;;4912:8;;;;:15;;;;4952:4;;;;4941:8;;;:15;-1:-1:-1;;5069:4:16;5063;4854:15;5053:1;5046:5;5035:45;5024:56;;5115:7;5107:16;;;;;-1:-1:-1;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:127:181;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:257;218:4;212:11;;;250:17;;-1:-1:-1;;;;;282:34:181;;318:22;;;279:62;276:88;;;344:18;;:::i;:::-;380:4;373:24;146:257;:::o;408:255::-;480:2;474:9;522:6;510:19;;-1:-1:-1;;;;;544:34:181;;580:22;;;541:62;538:88;;;606:18;;:::i;668:255::-;740:2;734:9;782:6;770:19;;-1:-1:-1;;;;;804:34:181;;840:22;;;801:62;798:88;;;866:18;;:::i;928:255::-;1000:2;994:9;1042:6;1030:19;;-1:-1:-1;;;;;1064:34:181;;1100:22;;;1061:62;1058:88;;;1126:18;;:::i;1439:252::-;1511:2;1505:9;1553:3;1541:16;;-1:-1:-1;;;;;1572:34:181;;1608:22;;;1569:62;1566:88;;;1634:18;;:::i;1696:401::-;1745:5;1793:4;1781:9;1776:3;1772:19;1768:30;1765:50;;;1811:1;1808;1801:12;1765:50;1844:2;1838:9;1886:4;1878:6;1874:17;1957:6;1945:10;1942:22;-1:-1:-1;;;;;1909:10:181;1906:34;1903:62;1900:88;;;1968:18;;:::i;:::-;2004:2;1997:22;2067:23;;2052:39;;-1:-1:-1;2037:6:181;1696:401;-1:-1:-1;1696:401:181:o;2102:282::-;2156:5;2204:4;2192:9;2187:3;2183:19;2179:30;2176:50;;;2222:1;2219;2212:12;2176:50;2244:22;;:::i;:::-;2235:31;;2302:9;2289:23;2282:5;2275:38;2373:2;2362:9;2358:18;2345:32;2340:2;2333:5;2329:14;2322:56;2102:282;;;;:::o;2389:503::-;2446:5;2499:3;2492:4;2484:6;2480:17;2476:27;2466:55;;2517:1;2514;2507:12;2466:55;2541:17;;:::i;:::-;2580:3;2618;2610:6;2606:16;2645:3;2637:6;2634:15;2631:35;;;2662:1;2659;2652:12;2631:35;2686:6;2701:162;2717:6;2712:3;2709:15;2701:162;;;2783:35;2814:3;2809;2783:35;:::i;:::-;2771:48;;2848:4;2839:14;;;;2743:2;2734:12;2701:162;;;-1:-1:-1;2881:5:181;;2389:503;-1:-1:-1;;;;;2389:503:181:o;2897:696::-;2958:5;3011:3;3004:4;2996:6;2992:17;2988:27;2978:55;;3029:1;3026;3019:12;2978:55;3052:2;3083;3077:9;3125:3;3117:6;3113:16;3195:6;3183:10;3180:22;-1:-1:-1;;;;;3147:10:181;3144:34;3141:62;3138:88;;;3206:18;;:::i;:::-;3235:22;;3277:6;3318:3;3306:16;;3334:15;;;3331:35;;;3362:1;3359;3352:12;3331:35;3386:6;3401:162;3417:6;3412:3;3409:15;3401:162;;;3483:35;3514:3;3509;3483:35;:::i;:::-;3471:48;;3548:4;3539:14;;;;3434:12;;3401:162;;;-1:-1:-1;3581:6:181;;2897:696;-1:-1:-1;;;;;;2897:696:181:o;3598:532::-;3677:5;3730:3;3723:4;3715:6;3711:17;3707:27;3697:55;;3748:1;3745;3738:12;3697:55;3772:22;;:::i;:::-;3816:3;3854;3846:6;3842:16;3881:3;3873:6;3870:15;3867:35;;;3898:1;3895;3888:12;3867:35;3922:6;3937:164;3953:6;3948:3;3945:15;3937:164;;;4021:35;4052:3;4047;4021:35;:::i;:::-;4009:48;;4086:4;4077:14;;;;3979:4;3970:14;3937:164;;4135:665;4191:5;4244:3;4237:4;4229:6;4225:17;4221:27;4211:55;;4262:1;4259;4252:12;4211:55;4295:2;4289:9;4337:2;4329:6;4325:15;4406:6;4394:10;4391:22;-1:-1:-1;;;;;4358:10:181;4355:34;4352:62;4349:88;;;4417:18;;:::i;:::-;4453:2;4446:22;4488:6;4529:2;4517:15;;4544;;;4541:35;;;4572:1;4569;4562:12;4541:35;4596:6;4611:159;4627:6;4622:3;4619:15;4611:159;;;4695:30;4721:3;4716;4695:30;:::i;:::-;4683:43;;4755:4;4746:14;;;;4644;4611:159;;;-1:-1:-1;4788:6:181;;4135:665;-1:-1:-1;;;;;4135:665:181:o;4805:479::-;4855:5;4908:3;4901:4;4893:6;4889:17;4885:27;4875:55;;4926:1;4923;4916:12;4875:55;4950:17;;:::i;:::-;4989:3;5027:2;5019:6;5015:15;5053:3;5045:6;5042:15;5039:35;;;5070:1;5067;5060:12;5039:35;5094:6;5109:146;5125:6;5120:3;5117:15;5109:146;;;5193:17;;5181:30;;5240:4;5231:14;;;;5142;5109:146;;5289:842;5346:5;5399:3;5392:4;5384:6;5380:17;5376:27;5366:55;;5417:1;5414;5407:12;5366:55;5441:17;;:::i;:::-;5480:3;5518;5510:6;5506:16;5545:3;5537:6;5534:15;5531:35;;;5562:1;5559;5552:12;5531:35;5586:6;5601:501;5617:6;5612:3;5609:15;5601:501;;;5695:4;5689:3;5684;5680:13;5676:24;5673:114;;;5741:1;5770:2;5766;5759:14;5673:114;5813:22;;:::i;:::-;5862:34;5892:3;5887;5862:34;:::i;:::-;5855:5;5848:49;5920:43;5959:3;5954:2;5949:3;5945:12;5920:43;:::i;:::-;5986:4;6010:14;;;6003:26;;;;6042:18;;;6080:12;;;;;5643:4;5634:14;5601:501;;6136:902;6190:5;6243:3;6236:4;6228:6;6224:17;6220:27;6210:55;;6261:1;6258;6251:12;6210:55;6297:6;6284:20;6323:4;-1:-1:-1;;;;;6383:2:181;6379;6376:10;6373:36;;;6389:18;;:::i;:::-;6435:2;6432:1;6428:10;6467:2;6461:9;6530:2;6526:7;6521:2;6517;6513:11;6509:25;6501:6;6497:38;6585:6;6573:10;6570:22;6565:2;6553:10;6550:18;6547:46;6544:72;;;6596:18;;:::i;:::-;6632:2;6625:22;6682:18;;;6758:15;;;6754:24;;;6716:15;;;;-1:-1:-1;6790:15:181;;;6787:35;;;6818:1;6815;6808:12;6787:35;6854:2;6846:6;6842:15;6831:26;;6866:142;6882:6;6877:3;6874:15;6866:142;;;6948:17;;6936:30;;6986:12;;;;6899;;;;6866:142;;;7026:6;6136:902;-1:-1:-1;;;;;;;6136:902:181:o;7043:500::-;7095:5;7148:3;7141:4;7133:6;7129:17;7125:27;7115:55;;7166:1;7163;7156:12;7115:55;7190:22;;:::i;:::-;7234:3;7272;7264:6;7260:16;7299:3;7291:6;7288:15;7285:35;;;7316:1;7313;7306:12;7285:35;7340:6;7355:159;7371:6;7366:3;7363:15;7355:159;;;7439:30;7465:3;7460;7439:30;:::i;:::-;7427:43;;7499:4;7490:14;;;;7388;7355:159;;7548:700;7622:5;7675:3;7668:4;7660:6;7656:17;7652:27;7642:55;;7693:1;7690;7683:12;7642:55;7726:2;7720:9;7748:2;7789;7781:6;7777:15;7858:6;7846:10;7843:22;-1:-1:-1;;;;;7810:10:181;7807:34;7804:62;7801:88;;;7869:18;;:::i;:::-;7905:2;7898:22;7940:6;7969:15;;;7996;;;7993:35;;;8024:1;8021;8014:12;7993:35;8048:6;8063:155;8079:6;8074:3;8071:15;8063:155;;;8145:30;8171:3;8166;8145:30;:::i;:::-;8133:43;;8196:12;;;;8096;;8063:155;;;-1:-1:-1;8236:6:181;;7548:700;-1:-1:-1;;;;;;7548:700:181:o;8253:2222::-;8305:5;8353:6;8341:9;8336:3;8332:19;8328:32;8325:52;;;8373:1;8370;8363:12;8325:52;8395:22;;:::i;:::-;8386:31;;8453:9;8440:23;-1:-1:-1;;;;;8478:6:181;8475:30;8472:50;;;8518:1;8515;8508:12;8472:50;8545:57;8598:3;8589:6;8578:9;8574:22;8545:57;:::i;:::-;8538:5;8531:72;;8635:78;8709:3;8704:2;8693:9;8689:18;8635:78;:::i;:::-;8630:2;8623:5;8619:14;8612:102;8733:3;8770:50;8816:3;8811:2;8800:9;8796:18;8770:50;:::i;:::-;8763:4;8756:5;8752:16;8745:76;8840:3;8877:78;8951:3;8946:2;8935:9;8931:18;8877:78;:::i;:::-;8870:4;8863:5;8859:16;8852:104;8975:3;9012:51;9059:3;9054:2;9043:9;9039:18;9012:51;:::i;:::-;9005:4;8998:5;8994:16;8987:77;9098:74;9168:3;9162;9151:9;9147:19;9098:74;:::i;:::-;9091:4;9084:5;9080:16;9073:100;9207:74;9277:3;9271;9260:9;9256:19;9207:74;:::i;:::-;9200:4;9193:5;9189:16;9182:100;9316:56;9368:3;9362;9351:9;9347:19;9316:56;:::i;:::-;9309:4;9302:5;9298:16;9291:82;9409:46;9451:3;9445;9434:9;9430:19;9409:46;:::i;:::-;9400:6;9393:5;9389:18;9382:74;9488:46;9530:3;9524;9513:9;9509:19;9488:46;:::i;:::-;9483:2;9476:5;9472:14;9465:70;9571:46;9613:3;9607;9596:9;9592:19;9571:46;:::i;:::-;9562:6;9555:5;9551:18;9544:74;9650:51;9697:3;9691;9680:9;9676:19;9650:51;:::i;:::-;9645:2;9638:5;9634:14;9627:75;9738:52;9786:3;9779:4;9768:9;9764:20;9738:52;:::i;:::-;9729:6;9722:5;9718:18;9711:80;9827:47;9870:3;9863:4;9852:9;9848:20;9827:47;:::i;:::-;9818:6;9811:5;9807:18;9800:75;9911:47;9954:3;9947:4;9936:9;9932:20;9911:47;:::i;:::-;9902:6;9895:5;9891:18;9884:75;9995:47;10038:3;10031:4;10020:9;10016:20;9995:47;:::i;:::-;9986:6;9979:5;9975:18;9968:75;10079:47;10122:3;10115:4;10104:9;10100:20;10079:47;:::i;:::-;10070:6;10063:5;10059:18;10052:75;10163:47;10206:3;10199:4;10188:9;10184:20;10163:47;:::i;:::-;10154:6;10147:5;10143:18;10136:75;10247:47;10290:3;10283:4;10272:9;10268:20;10247:47;:::i;:::-;10238:6;10231:5;10227:18;10220:75;10327:52;10375:3;10368:4;10357:9;10353:20;10327:52;:::i;:::-;10322:2;10315:5;10311:14;10304:76;;;;10416:52;10464:3;10457:4;10446:9;10442:20;10416:52;:::i;:::-;10407:6;10400:5;10396:18;10389:80;8253:2222;;;;:::o;10480:709::-;10558:5;10611:3;10604:4;10596:6;10592:17;10588:27;10578:55;;10629:1;10626;10619:12;10578:55;10662:2;10656:9;10684:3;10726:2;10718:6;10714:15;10795:6;10783:10;10780:22;-1:-1:-1;;;;;10747:10:181;10744:34;10741:62;10738:88;;;10806:18;;:::i;:::-;10842:2;10835:22;10906:15;;10877:6;10933:15;;;10930:35;;;10961:1;10958;10951:12;10930:35;10985:6;11000:159;11016:6;11011:3;11008:15;11000:159;;;11084:30;11110:3;11105;11084:30;:::i;:::-;11072:43;;11144:4;11135:14;;;;11033;11000:159;;11194:1857;11261:5;11309:6;11297:9;11292:3;11288:19;11284:32;11281:52;;;11329:1;11326;11319:12;11281:52;11351:22;;:::i;:::-;11342:31;;11396:36;11428:3;11417:9;11396:36;:::i;:::-;11389:5;11382:51;11465:45;11506:3;11501:2;11490:9;11486:18;11465:45;:::i;:::-;11460:2;11453:5;11449:14;11442:69;11543:45;11584:3;11579:2;11568:9;11564:18;11543:45;:::i;:::-;11538:2;11531:5;11527:14;11520:69;11621:45;11662:3;11657:2;11646:9;11642:18;11621:45;:::i;:::-;11616:2;11609:5;11605:14;11598:69;11700:78;11774:3;11768;11757:9;11753:19;11700:78;:::i;:::-;11694:3;11687:5;11683:15;11676:103;11798:3;11835:45;11876:3;11871:2;11860:9;11856:18;11835:45;:::i;:::-;11828:4;11821:5;11817:16;11810:71;11900:3;11937:45;11978:3;11973:2;11962:9;11958:18;11937:45;:::i;:::-;11930:4;11923:5;11919:16;11912:71;12002:3;12039:45;12080:3;12075:2;12064:9;12060:18;12039:45;:::i;:::-;12032:4;12025:5;12021:16;12014:71;12104:3;12143:45;12184:3;12179:2;12168:9;12164:18;12143:45;:::i;:::-;12134:6;12127:5;12123:18;12116:73;12208:3;12247:45;12288:3;12283:2;12272:9;12268:18;12247:45;:::i;:::-;12238:6;12231:5;12227:18;12220:73;12312:3;12351:45;12392:3;12387:2;12376:9;12372:18;12351:45;:::i;:::-;12342:6;12335:5;12331:18;12324:73;12433:49;12478:3;12469:6;12458:9;12454:22;12433:49;:::i;:::-;12424:6;12417:5;12413:18;12406:77;12519:46;12561:3;12555;12544:9;12540:19;12519:46;:::i;:::-;12510:6;12503:5;12499:18;12492:74;12598:46;12640:3;12634;12623:9;12619:19;12598:46;:::i;:::-;12593:2;12586:5;12582:14;12575:70;12677:46;12719:3;12713;12702:9;12698:19;12677:46;:::i;:::-;12672:2;12665:5;12661:14;12654:70;12756:46;12798:3;12792;12781:9;12777:19;12756:46;:::i;:::-;12751:2;12744:5;12740:14;12733:70;12835:46;12877:3;12871;12860:9;12856:19;12835:46;:::i;:::-;12830:2;12823:5;12819:14;12812:70;12914:46;12956:3;12950;12939:9;12935:19;12914:46;:::i;:::-;12909:2;12902:5;12898:14;12891:70;12993:51;13040:3;13034;13023:9;13019:19;12993:51;:::i;:::-;12988:2;12981:5;12977:14;12970:75;;;;;;;11194:1857;;;;:::o;13056:1698::-;13224:6;13232;13240;13284:9;13275:7;13271:23;13314:4;13310:2;13306:13;13303:33;;;13332:1;13329;13322:12;13303:33;13355:6;13381:2;13377;13373:11;13370:31;;;13397:1;13394;13387:12;13370:31;13423:22;;:::i;:::-;13410:35;;13481:9;13468:23;13461:5;13454:38;13552:2;13541:9;13537:18;13524:32;13519:2;13512:5;13508:14;13501:56;13589:49;13630:7;13625:2;13614:9;13610:18;13589:49;:::i;:::-;13584:2;13577:5;13573:14;13566:73;13671:60;13723:7;13718:2;13707:9;13703:18;13671:60;:::i;:::-;13666:2;13659:5;13655:14;13648:84;13766:65;13823:7;13817:3;13806:9;13802:19;13766:65;:::i;:::-;13759:4;13752:5;13748:16;13741:91;13866:83;13941:7;13935:3;13924:9;13920:19;13866:83;:::i;:::-;13859:4;13852:5;13848:16;13841:109;13984:55;14031:7;14025:3;14014:9;14010:19;13984:55;:::i;:::-;13977:4;13970:5;13966:16;13959:81;14073:83;14148:7;14142:3;14131:9;14127:19;14073:83;:::i;:::-;14067:3;14060:5;14056:15;14049:108;14193:56;14241:7;14234:4;14223:9;14219:20;14193:56;:::i;:::-;14184:6;14177:5;14173:18;14166:84;14286:61;14339:7;14332:4;14321:9;14317:20;14286:61;:::i;:::-;14277:6;14270:5;14266:18;14259:89;14384:62;14438:7;14431:4;14420:9;14416:20;14384:62;:::i;:::-;14375:6;14364:18;;14357:90;14368:5;;-1:-1:-1;14507:18:181;;14494:32;-1:-1:-1;;;;;14538:30:181;;14535:50;;;14581:1;14578;14571:12;14535:50;14604:56;14652:7;14643:6;14632:9;14628:22;14604:56;:::i;:::-;14594:66;;;14679:69;14740:7;14733:4;14722:9;14718:20;14679:69;:::i;:::-;14669:79;;13056:1698;;;;;:::o;14912:246::-;14832:12;;14820:25;;14894:4;14883:16;;;14877:23;14861:14;;;14854:47;15096:2;15081:18;;15108:44;14759:148;15163:329;15263:5;15286:1;15296:190;15310:4;15307:1;15304:11;15296:190;;;15357:45;15398:3;15389:6;15383:13;14832:12;;14820:25;;14894:4;14883:16;;;14877:23;14861:14;;14854:47;14759:148;15357:45;15431:4;15422:14;;;;;15471:4;15459:17;;;;;15330:1;15323:9;15296:190;;;15300:3;;15163:329;;:::o;15497:335::-;15592:5;15615:1;15625:201;15639:4;15636:1;15633:11;15625:201;;;15704:13;;15698:20;15686:33;;15742:4;15766:12;;;;15801:15;;;;15659:1;15652:9;15625:201;;15837:1189;16045:13;;16021:4;16006:20;;;16010:9;15979:4;16165:190;16179:4;16176:1;16173:11;16165:190;;;16226:45;16267:3;16258:6;16252:13;14832:12;;14820:25;;14894:4;14883:16;;;14877:23;14861:14;;14854:47;14759:148;16226:45;16340:4;16328:17;;;;;16300:4;16291:14;;;;;16199:1;16192:9;16165:190;;;16169:3;;;16374:4;16425:2;16417:6;16413:15;16407:22;16466:6;16455:9;16451:22;16553:1;16563:192;16579:4;16574:3;16571:13;16563:192;;;16650:15;;16644:22;16630:37;;16728:17;;;;16689:14;;;;16603:1;16594:11;16563:192;;;16567:3;;;;16804:4;16796:6;16792:17;16786:24;16819:71;16882:6;16871:9;16867:22;16851:14;16819:71;:::i;:::-;;16939:4;16931:6;16927:17;16921:24;16954:66;17012:6;17001:9;16997:22;16981:14;16954:66;:::i;:::-;;15837:1189;;;;:::o;17031:253::-;17127:6;17180:3;17168:9;17159:7;17155:23;17151:33;17148:53;;;17197:1;17194;17187:12;17148:53;17220:58;17270:7;17259:9;17220:58;:::i;:::-;17210:68;17031:253;-1:-1:-1;;;17031:253:181:o;17289:127::-;17350:10;17345:3;17341:20;17338:1;17331:31;17381:4;17378:1;17371:15;17405:4;17402:1;17395:15;17421:225;17488:9;;;17509:11;;;17506:134;;;17562:10;17557:3;17553:20;17550:1;17543:31;17597:4;17594:1;17587:15;17625:4;17622:1;17615:15"},"gasEstimates":{"creation":{"codeDepositCost":"1060200","executionCost":"1100","totalCost":"1061300"},"external":{"compute_powers_of_alpha(((uint256),(uint256),(uint256),(uint256),(uint256)[9],(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256)))":"infinite","prepare_queries((uint256,uint256,(uint256),(uint256,uint256)[2],(uint256,uint256)[7],(uint256,uint256)[4],(uint256,uint256),(uint256,uint256)[4],(uint256,uint256),(uint256)[3],(uint256[2],uint256[2])[2]),(uint256[],(uint256,uint256)[4],(uint256,uint256),(uint256,uint256)[4],(uint256)[4],(uint256)[1],(uint256)[1],(uint256)[3],(uint256),(uint256),(uint256),(uint256,uint256),(uint256,uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256),(uint256,uint256)),((uint256),(uint256),(uint256),(uint256),(uint256)[9],(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256)))":"infinite","rescue_custom_gate_linearization_contribution((uint256,uint256,(uint256),(uint256,uint256)[2],(uint256,uint256)[7],(uint256,uint256)[4],(uint256,uint256),(uint256,uint256)[4],(uint256,uint256),(uint256)[3],(uint256[2],uint256[2])[2]),(uint256[],(uint256,uint256)[4],(uint256,uint256),(uint256,uint256)[4],(uint256)[4],(uint256)[1],(uint256)[1],(uint256)[3],(uint256),(uint256),(uint256),(uint256,uint256),(uint256,uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256),(uint256,uint256)),((uint256),(uint256),(uint256),(uint256),(uint256)[9],(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256)))":"infinite"},"internal":{"aggregated_linearization_commitment(struct VerificationKey memory,struct Plonk4VerifierWithAccessToDNext.Proof memory,struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory)":"infinite","evaluate_l0_at_point(uint256,struct PairingsBn254.Fr memory)":"infinite","evaluate_lagrange_poly_out_of_domain(uint256,uint256,struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory)":"infinite","evaluate_vanishing(uint256,struct PairingsBn254.Fr memory)":"infinite","final_pairing(struct PairingsBn254.G2Point memory[2] memory,struct Plonk4VerifierWithAccessToDNext.Proof memory,struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory,struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory)":"infinite","initialize_transcript(struct Plonk4VerifierWithAccessToDNext.Proof memory,struct VerificationKey memory)":"infinite","lookup_linearization_contribution(struct Plonk4VerifierWithAccessToDNext.Proof memory,struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory)":"infinite","lookup_quotient_contribution(struct VerificationKey memory,struct Plonk4VerifierWithAccessToDNext.Proof memory,struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory)":"infinite","verify(struct Plonk4VerifierWithAccessToDNext.Proof memory,struct VerificationKey memory)":"infinite","verify_quotient_evaluation(struct VerificationKey memory,struct Plonk4VerifierWithAccessToDNext.Proof memory,struct Plonk4VerifierWithAccessToDNext.PartialVerifierState memory)":"infinite"}},"methodIdentifiers":{"compute_powers_of_alpha(((uint256),(uint256),(uint256),(uint256),(uint256)[9],(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256)))":"fec4e96e","prepare_queries((uint256,uint256,(uint256),(uint256,uint256)[2],(uint256,uint256)[7],(uint256,uint256)[4],(uint256,uint256),(uint256,uint256)[4],(uint256,uint256),(uint256)[3],(uint256[2],uint256[2])[2]),(uint256[],(uint256,uint256)[4],(uint256,uint256),(uint256,uint256)[4],(uint256)[4],(uint256)[1],(uint256)[1],(uint256)[3],(uint256),(uint256),(uint256),(uint256,uint256),(uint256,uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256),(uint256,uint256)),((uint256),(uint256),(uint256),(uint256),(uint256)[9],(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256)))":"97e2957d","rescue_custom_gate_linearization_contribution((uint256,uint256,(uint256),(uint256,uint256)[2],(uint256,uint256)[7],(uint256,uint256)[4],(uint256,uint256),(uint256,uint256)[4],(uint256,uint256),(uint256)[3],(uint256[2],uint256[2])[2]),(uint256[],(uint256,uint256)[4],(uint256,uint256),(uint256,uint256)[4],(uint256)[4],(uint256)[1],(uint256)[1],(uint256)[3],(uint256),(uint256),(uint256),(uint256,uint256),(uint256,uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256),(uint256,uint256)),((uint256),(uint256),(uint256),(uint256),(uint256)[9],(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256)))":"38fdad14"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"zero\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"alpha\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"gamma\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[9]\",\"name\":\"alpha_values\",\"type\":\"tuple[9]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"eta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta_lookup\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"gamma_lookup\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta_plus_one\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta_gamma\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"v\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"u\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"z_minus_last_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"l_0_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"l_n_minus_one_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"t\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"tp\",\"type\":\"tuple\"}],\"internalType\":\"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState\",\"name\":\"state\",\"type\":\"tuple\"}],\"name\":\"compute_powers_of_alpha\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"domain_size\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"num_inputs\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[2]\",\"name\":\"gate_selectors_commitments\",\"type\":\"tuple[2]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[7]\",\"name\":\"gate_setup_commitments\",\"type\":\"tuple[7]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[4]\",\"name\":\"permutation_commitments\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"lookup_selector_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[4]\",\"name\":\"lookup_tables_commitments\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"lookup_table_type_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[3]\",\"name\":\"non_residues\",\"type\":\"tuple[3]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct PairingsBn254.G2Point[2]\",\"name\":\"g2_elements\",\"type\":\"tuple[2]\"}],\"internalType\":\"struct VerificationKey\",\"name\":\"vk\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"input_values\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[4]\",\"name\":\"state_polys_commitments\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"copy_permutation_grand_product_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[4]\",\"name\":\"quotient_poly_parts_commitments\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[4]\",\"name\":\"state_polys_openings_at_z\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[1]\",\"name\":\"state_polys_openings_at_z_omega\",\"type\":\"tuple[1]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[1]\",\"name\":\"gate_selectors_openings_at_z\",\"type\":\"tuple[1]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[3]\",\"name\":\"copy_permutation_polys_openings_at_z\",\"type\":\"tuple[3]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"copy_permutation_grand_product_opening_at_z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"quotient_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"linearization_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"lookup_s_poly_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"lookup_grand_product_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_s_poly_opening_at_z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_grand_product_opening_at_z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_t_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_t_poly_opening_at_z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_selector_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_table_type_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"opening_proof_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"opening_proof_at_z_omega\",\"type\":\"tuple\"}],\"internalType\":\"struct Plonk4VerifierWithAccessToDNext.Proof\",\"name\":\"proof\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"zero\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"alpha\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"gamma\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[9]\",\"name\":\"alpha_values\",\"type\":\"tuple[9]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"eta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta_lookup\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"gamma_lookup\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta_plus_one\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta_gamma\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"v\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"u\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"z_minus_last_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"l_0_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"l_n_minus_one_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"t\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"tp\",\"type\":\"tuple\"}],\"internalType\":\"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState\",\"name\":\"state\",\"type\":\"tuple\"}],\"name\":\"prepare_queries\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[13]\",\"name\":\"commitments_at_z\",\"type\":\"tuple[13]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[13]\",\"name\":\"values_at_z\",\"type\":\"tuple[13]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[6]\",\"name\":\"commitments_at_z_omega\",\"type\":\"tuple[6]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[6]\",\"name\":\"values_at_z_omega\",\"type\":\"tuple[6]\"}],\"internalType\":\"struct Plonk4VerifierWithAccessToDNext.Queries\",\"name\":\"queries\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"domain_size\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"num_inputs\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[2]\",\"name\":\"gate_selectors_commitments\",\"type\":\"tuple[2]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[7]\",\"name\":\"gate_setup_commitments\",\"type\":\"tuple[7]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[4]\",\"name\":\"permutation_commitments\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"lookup_selector_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[4]\",\"name\":\"lookup_tables_commitments\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"lookup_table_type_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[3]\",\"name\":\"non_residues\",\"type\":\"tuple[3]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct PairingsBn254.G2Point[2]\",\"name\":\"g2_elements\",\"type\":\"tuple[2]\"}],\"internalType\":\"struct VerificationKey\",\"name\":\"vk\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"input_values\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[4]\",\"name\":\"state_polys_commitments\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"copy_permutation_grand_product_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[4]\",\"name\":\"quotient_poly_parts_commitments\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[4]\",\"name\":\"state_polys_openings_at_z\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[1]\",\"name\":\"state_polys_openings_at_z_omega\",\"type\":\"tuple[1]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[1]\",\"name\":\"gate_selectors_openings_at_z\",\"type\":\"tuple[1]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[3]\",\"name\":\"copy_permutation_polys_openings_at_z\",\"type\":\"tuple[3]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"copy_permutation_grand_product_opening_at_z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"quotient_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"linearization_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"lookup_s_poly_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"lookup_grand_product_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_s_poly_opening_at_z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_grand_product_opening_at_z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_t_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_t_poly_opening_at_z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_selector_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_table_type_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"opening_proof_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"opening_proof_at_z_omega\",\"type\":\"tuple\"}],\"internalType\":\"struct Plonk4VerifierWithAccessToDNext.Proof\",\"name\":\"proof\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"zero\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"alpha\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"gamma\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[9]\",\"name\":\"alpha_values\",\"type\":\"tuple[9]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"eta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta_lookup\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"gamma_lookup\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta_plus_one\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta_gamma\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"v\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"u\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"z_minus_last_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"l_0_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"l_n_minus_one_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"t\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"tp\",\"type\":\"tuple\"}],\"internalType\":\"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState\",\"name\":\"state\",\"type\":\"tuple\"}],\"name\":\"rescue_custom_gate_linearization_contribution\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"result\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/Plonk4VerifierWithAccessToDNext.sol\":\"Plonk4VerifierWithAccessToDNext\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l1/contracts/common/libraries/UncheckedMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nlibrary UncheckedMath {\\n    function uncheckedInc(uint256 _number) internal pure returns (uint256) {\\n        unchecked {\\n            return _number + 1;\\n        }\\n    }\\n\\n    function uncheckedAdd(uint256 _lhs, uint256 _rhs) internal pure returns (uint256) {\\n        unchecked {\\n            return _lhs + _rhs;\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7d0dff9b45338f35b32bc711192aec50973e13dc74b8e941d64586b510179c12\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/Plonk4VerifierWithAccessToDNext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/PairingsBn254.sol\\\";\\nimport \\\"./libraries/TranscriptLib.sol\\\";\\nimport \\\"../common/libraries/UncheckedMath.sol\\\";\\n\\nuint256 constant STATE_WIDTH = 4;\\nuint256 constant NUM_G2_ELS = 2;\\n\\nstruct VerificationKey {\\n    uint256 domain_size;\\n    uint256 num_inputs;\\n    PairingsBn254.Fr omega;\\n    PairingsBn254.G1Point[2] gate_selectors_commitments;\\n    PairingsBn254.G1Point[7] gate_setup_commitments;\\n    PairingsBn254.G1Point[STATE_WIDTH] permutation_commitments;\\n    PairingsBn254.G1Point lookup_selector_commitment;\\n    PairingsBn254.G1Point[4] lookup_tables_commitments;\\n    PairingsBn254.G1Point lookup_table_type_commitment;\\n    PairingsBn254.Fr[STATE_WIDTH - 1] non_residues;\\n    PairingsBn254.G2Point[NUM_G2_ELS] g2_elements;\\n}\\n\\ncontract Plonk4VerifierWithAccessToDNext {\\n    using PairingsBn254 for PairingsBn254.G1Point;\\n    using PairingsBn254 for PairingsBn254.G2Point;\\n    using PairingsBn254 for PairingsBn254.Fr;\\n\\n    using TranscriptLib for TranscriptLib.Transcript;\\n\\n    using UncheckedMath for uint256;\\n\\n    struct Proof {\\n        uint256[] input_values;\\n        // commitments\\n        PairingsBn254.G1Point[STATE_WIDTH] state_polys_commitments;\\n        PairingsBn254.G1Point copy_permutation_grand_product_commitment;\\n        PairingsBn254.G1Point[STATE_WIDTH] quotient_poly_parts_commitments;\\n        // openings\\n        PairingsBn254.Fr[STATE_WIDTH] state_polys_openings_at_z;\\n        PairingsBn254.Fr[1] state_polys_openings_at_z_omega; // TODO: not use array while there is only D_next\\n        PairingsBn254.Fr[1] gate_selectors_openings_at_z;\\n        PairingsBn254.Fr[STATE_WIDTH - 1] copy_permutation_polys_openings_at_z;\\n        PairingsBn254.Fr copy_permutation_grand_product_opening_at_z_omega;\\n        PairingsBn254.Fr quotient_poly_opening_at_z;\\n        PairingsBn254.Fr linearization_poly_opening_at_z;\\n        // lookup commitments\\n        PairingsBn254.G1Point lookup_s_poly_commitment;\\n        PairingsBn254.G1Point lookup_grand_product_commitment;\\n        // lookup openings\\n        PairingsBn254.Fr lookup_s_poly_opening_at_z_omega;\\n        PairingsBn254.Fr lookup_grand_product_opening_at_z_omega;\\n        PairingsBn254.Fr lookup_t_poly_opening_at_z;\\n        PairingsBn254.Fr lookup_t_poly_opening_at_z_omega;\\n        PairingsBn254.Fr lookup_selector_poly_opening_at_z;\\n        PairingsBn254.Fr lookup_table_type_poly_opening_at_z;\\n        PairingsBn254.G1Point opening_proof_at_z;\\n        PairingsBn254.G1Point opening_proof_at_z_omega;\\n    }\\n\\n    struct PartialVerifierState {\\n        PairingsBn254.Fr zero;\\n        PairingsBn254.Fr alpha;\\n        PairingsBn254.Fr beta;\\n        PairingsBn254.Fr gamma;\\n        PairingsBn254.Fr[9] alpha_values;\\n        PairingsBn254.Fr eta;\\n        PairingsBn254.Fr beta_lookup;\\n        PairingsBn254.Fr gamma_lookup;\\n        PairingsBn254.Fr beta_plus_one;\\n        PairingsBn254.Fr beta_gamma;\\n        PairingsBn254.Fr v;\\n        PairingsBn254.Fr u;\\n        PairingsBn254.Fr z;\\n        PairingsBn254.Fr z_omega;\\n        PairingsBn254.Fr z_minus_last_omega;\\n        PairingsBn254.Fr l_0_at_z;\\n        PairingsBn254.Fr l_n_minus_one_at_z;\\n        PairingsBn254.Fr t;\\n        PairingsBn254.G1Point tp;\\n    }\\n\\n    function evaluate_l0_at_point(uint256 domain_size, PairingsBn254.Fr memory at)\\n        internal\\n        view\\n        returns (PairingsBn254.Fr memory num)\\n    {\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n\\n        PairingsBn254.Fr memory size_fe = PairingsBn254.new_fr(domain_size);\\n        PairingsBn254.Fr memory den = at.copy();\\n        den.sub_assign(one);\\n        den.mul_assign(size_fe);\\n\\n        den = den.inverse();\\n\\n        num = at.pow(domain_size);\\n        num.sub_assign(one);\\n        num.mul_assign(den);\\n    }\\n\\n    function evaluate_lagrange_poly_out_of_domain(\\n        uint256 poly_num,\\n        uint256 domain_size,\\n        PairingsBn254.Fr memory omega,\\n        PairingsBn254.Fr memory at\\n    ) internal view returns (PairingsBn254.Fr memory res) {\\n        // (omega^i / N) / (X - omega^i) * (X^N - 1)\\n        require(poly_num < domain_size);\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n        PairingsBn254.Fr memory omega_power = omega.pow(poly_num);\\n        res = at.pow(domain_size);\\n        res.sub_assign(one);\\n        require(res.value != 0); // Vanishing polynomial can not be zero at point `at`\\n        res.mul_assign(omega_power);\\n\\n        PairingsBn254.Fr memory den = PairingsBn254.copy(at);\\n        den.sub_assign(omega_power);\\n        den.mul_assign(PairingsBn254.new_fr(domain_size));\\n\\n        den = den.inverse();\\n\\n        res.mul_assign(den);\\n    }\\n\\n    function evaluate_vanishing(uint256 domain_size, PairingsBn254.Fr memory at)\\n        internal\\n        view\\n        returns (PairingsBn254.Fr memory res)\\n    {\\n        res = at.pow(domain_size);\\n        res.sub_assign(PairingsBn254.new_fr(1));\\n    }\\n\\n    function initialize_transcript(Proof memory proof, VerificationKey memory vk)\\n        internal\\n        pure\\n        returns (PartialVerifierState memory state)\\n    {\\n        TranscriptLib.Transcript memory transcript = TranscriptLib.new_transcript();\\n\\n        for (uint256 i = 0; i < vk.num_inputs; i = i.uncheckedInc()) {\\n            transcript.update_with_u256(proof.input_values[i]);\\n        }\\n\\n        for (uint256 i = 0; i < STATE_WIDTH; i = i.uncheckedInc()) {\\n            transcript.update_with_g1(proof.state_polys_commitments[i]);\\n        }\\n\\n        state.eta = transcript.get_challenge();\\n        transcript.update_with_g1(proof.lookup_s_poly_commitment);\\n\\n        state.beta = transcript.get_challenge();\\n        state.gamma = transcript.get_challenge();\\n\\n        transcript.update_with_g1(proof.copy_permutation_grand_product_commitment);\\n        state.beta_lookup = transcript.get_challenge();\\n        state.gamma_lookup = transcript.get_challenge();\\n        transcript.update_with_g1(proof.lookup_grand_product_commitment);\\n        state.alpha = transcript.get_challenge();\\n\\n        for (uint256 i = 0; i < proof.quotient_poly_parts_commitments.length; i = i.uncheckedInc()) {\\n            transcript.update_with_g1(proof.quotient_poly_parts_commitments[i]);\\n        }\\n        state.z = transcript.get_challenge();\\n\\n        transcript.update_with_fr(proof.quotient_poly_opening_at_z);\\n\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.state_polys_openings_at_z[i]);\\n        }\\n\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z_omega.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.state_polys_openings_at_z_omega[i]);\\n        }\\n        for (uint256 i = 0; i < proof.gate_selectors_openings_at_z.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.gate_selectors_openings_at_z[i]);\\n        }\\n        for (uint256 i = 0; i < proof.copy_permutation_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.copy_permutation_polys_openings_at_z[i]);\\n        }\\n\\n        state.z_omega = state.z.copy();\\n        state.z_omega.mul_assign(vk.omega);\\n\\n        transcript.update_with_fr(proof.copy_permutation_grand_product_opening_at_z_omega);\\n\\n        transcript.update_with_fr(proof.lookup_t_poly_opening_at_z);\\n        transcript.update_with_fr(proof.lookup_selector_poly_opening_at_z);\\n        transcript.update_with_fr(proof.lookup_table_type_poly_opening_at_z);\\n        transcript.update_with_fr(proof.lookup_s_poly_opening_at_z_omega);\\n        transcript.update_with_fr(proof.lookup_grand_product_opening_at_z_omega);\\n        transcript.update_with_fr(proof.lookup_t_poly_opening_at_z_omega);\\n        transcript.update_with_fr(proof.linearization_poly_opening_at_z);\\n\\n        state.v = transcript.get_challenge();\\n\\n        transcript.update_with_g1(proof.opening_proof_at_z);\\n        transcript.update_with_g1(proof.opening_proof_at_z_omega);\\n\\n        state.u = transcript.get_challenge();\\n    }\\n\\n    // compute some powers of challenge alpha([alpha^1, .. alpha^8])\\n    function compute_powers_of_alpha(PartialVerifierState memory state) public pure {\\n        require(state.alpha.value != 0);\\n        state.alpha_values[0] = PairingsBn254.new_fr(1);\\n        state.alpha_values[1] = state.alpha.copy();\\n        PairingsBn254.Fr memory current_alpha = state.alpha.copy();\\n        for (uint256 i = 2; i < state.alpha_values.length; i = i.uncheckedInc()) {\\n            current_alpha.mul_assign(state.alpha);\\n            state.alpha_values[i] = current_alpha.copy();\\n        }\\n    }\\n\\n    function verify(Proof memory proof, VerificationKey memory vk) internal view returns (bool) {\\n        // we initialize all challenges beforehand, we can draw each challenge in its own place\\n        PartialVerifierState memory state = initialize_transcript(proof, vk);\\n        if (verify_quotient_evaluation(vk, proof, state) == false) {\\n            return false;\\n        }\\n        require(proof.state_polys_openings_at_z_omega.length == 1); // TODO\\n\\n        PairingsBn254.G1Point memory quotient_result = proof.quotient_poly_parts_commitments[0].copy_g1();\\n        {\\n            // block scope\\n            PairingsBn254.Fr memory z_in_domain_size = state.z.pow(vk.domain_size);\\n            PairingsBn254.Fr memory current_z = z_in_domain_size.copy();\\n            PairingsBn254.G1Point memory tp;\\n            // start from i =1\\n            for (uint256 i = 1; i < proof.quotient_poly_parts_commitments.length; i = i.uncheckedInc()) {\\n                tp = proof.quotient_poly_parts_commitments[i].copy_g1();\\n                tp.point_mul_assign(current_z);\\n                quotient_result.point_add_assign(tp);\\n\\n                current_z.mul_assign(z_in_domain_size);\\n            }\\n        }\\n\\n        Queries memory queries = prepare_queries(vk, proof, state);\\n        queries.commitments_at_z[0] = quotient_result;\\n        queries.values_at_z[0] = proof.quotient_poly_opening_at_z;\\n        queries.commitments_at_z[1] = aggregated_linearization_commitment(vk, proof, state);\\n        queries.values_at_z[1] = proof.linearization_poly_opening_at_z;\\n\\n        require(queries.commitments_at_z.length == queries.values_at_z.length);\\n\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z = queries.commitments_at_z[0];\\n\\n        PairingsBn254.Fr memory aggregated_opening_at_z = queries.values_at_z[0];\\n        PairingsBn254.Fr memory aggregation_challenge = PairingsBn254.new_fr(1);\\n        PairingsBn254.G1Point memory scaled;\\n        for (uint256 i = 1; i < queries.commitments_at_z.length; i = i.uncheckedInc()) {\\n            aggregation_challenge.mul_assign(state.v);\\n            scaled = queries.commitments_at_z[i].point_mul(aggregation_challenge);\\n            aggregated_commitment_at_z.point_add_assign(scaled);\\n\\n            state.t = queries.values_at_z[i];\\n            state.t.mul_assign(aggregation_challenge);\\n            aggregated_opening_at_z.add_assign(state.t);\\n        }\\n\\n        aggregation_challenge.mul_assign(state.v);\\n\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z_omega = queries.commitments_at_z_omega[0].point_mul(\\n            aggregation_challenge\\n        );\\n        PairingsBn254.Fr memory aggregated_opening_at_z_omega = queries.values_at_z_omega[0];\\n        aggregated_opening_at_z_omega.mul_assign(aggregation_challenge);\\n        for (uint256 i = 1; i < queries.commitments_at_z_omega.length; i = i.uncheckedInc()) {\\n            aggregation_challenge.mul_assign(state.v);\\n\\n            scaled = queries.commitments_at_z_omega[i].point_mul(aggregation_challenge);\\n            aggregated_commitment_at_z_omega.point_add_assign(scaled);\\n\\n            state.t = queries.values_at_z_omega[i];\\n            state.t.mul_assign(aggregation_challenge);\\n            aggregated_opening_at_z_omega.add_assign(state.t);\\n        }\\n\\n        return\\n            final_pairing(\\n                vk.g2_elements,\\n                proof,\\n                state,\\n                aggregated_commitment_at_z,\\n                aggregated_commitment_at_z_omega,\\n                aggregated_opening_at_z,\\n                aggregated_opening_at_z_omega\\n            );\\n    }\\n\\n    function verify_quotient_evaluation(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) internal view returns (bool) {\\n        uint256[] memory lagrange_poly_numbers = new uint256[](vk.num_inputs);\\n        for (uint256 i = 0; i < lagrange_poly_numbers.length; i = i.uncheckedInc()) {\\n            lagrange_poly_numbers[i] = i;\\n        }\\n        // require(vk.num_inputs > 0); // TODO\\n\\n        PairingsBn254.Fr memory inputs_term = PairingsBn254.new_fr(0);\\n        for (uint256 i = 0; i < vk.num_inputs; i = i.uncheckedInc()) {\\n            // TODO we may use batched lagrange compputation\\n            state.t = evaluate_lagrange_poly_out_of_domain(i, vk.domain_size, vk.omega, state.z);\\n            state.t.mul_assign(PairingsBn254.new_fr(proof.input_values[i]));\\n            inputs_term.add_assign(state.t);\\n        }\\n        inputs_term.mul_assign(proof.gate_selectors_openings_at_z[0]);\\n        PairingsBn254.Fr memory result = proof.linearization_poly_opening_at_z.copy();\\n        result.add_assign(inputs_term);\\n\\n        // compute powers of alpha\\n        compute_powers_of_alpha(state);\\n        PairingsBn254.Fr memory factor = state.alpha_values[4].copy();\\n        factor.mul_assign(proof.copy_permutation_grand_product_opening_at_z_omega);\\n\\n        // - alpha_0 * (a + perm(z) * beta + gamma)*()*(d + gamma) * z(z*omega)\\n        require(proof.copy_permutation_polys_openings_at_z.length == STATE_WIDTH - 1);\\n        PairingsBn254.Fr memory t; // TMP;\\n        for (uint256 i = 0; i < proof.copy_permutation_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            t = proof.copy_permutation_polys_openings_at_z[i].copy();\\n            t.mul_assign(state.beta);\\n            t.add_assign(proof.state_polys_openings_at_z[i]);\\n            t.add_assign(state.gamma);\\n\\n            factor.mul_assign(t);\\n        }\\n\\n        t = proof.state_polys_openings_at_z[3].copy();\\n        t.add_assign(state.gamma);\\n        factor.mul_assign(t);\\n        result.sub_assign(factor);\\n\\n        // - L_0(z) * alpha_1\\n        PairingsBn254.Fr memory l_0_at_z = evaluate_l0_at_point(vk.domain_size, state.z);\\n        l_0_at_z.mul_assign(state.alpha_values[4 + 1]);\\n        result.sub_assign(l_0_at_z);\\n\\n        PairingsBn254.Fr memory lookup_quotient_contrib = lookup_quotient_contribution(vk, proof, state);\\n        result.add_assign(lookup_quotient_contrib);\\n\\n        PairingsBn254.Fr memory lhs = proof.quotient_poly_opening_at_z.copy();\\n        lhs.mul_assign(evaluate_vanishing(vk.domain_size, state.z));\\n        return lhs.value == result.value;\\n    }\\n\\n    function lookup_quotient_contribution(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) internal view returns (PairingsBn254.Fr memory result) {\\n        PairingsBn254.Fr memory t;\\n\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n        state.beta_plus_one = state.beta_lookup.copy();\\n        state.beta_plus_one.add_assign(one);\\n        state.beta_gamma = state.beta_plus_one.copy();\\n        state.beta_gamma.mul_assign(state.gamma_lookup);\\n\\n        // (s'*beta + gamma)*(zw')*alpha\\n        t = proof.lookup_s_poly_opening_at_z_omega.copy();\\n        t.mul_assign(state.beta_lookup);\\n        t.add_assign(state.beta_gamma);\\n        t.mul_assign(proof.lookup_grand_product_opening_at_z_omega);\\n        t.mul_assign(state.alpha_values[6]);\\n\\n        // (z - omega^{n-1}) for this part\\n        PairingsBn254.Fr memory last_omega = vk.omega.pow(vk.domain_size - 1);\\n        state.z_minus_last_omega = state.z.copy();\\n        state.z_minus_last_omega.sub_assign(last_omega);\\n        t.mul_assign(state.z_minus_last_omega);\\n        result.add_assign(t);\\n\\n        // - alpha_1 * L_{0}(z)\\n        state.l_0_at_z = evaluate_lagrange_poly_out_of_domain(0, vk.domain_size, vk.omega, state.z);\\n        t = state.l_0_at_z.copy();\\n        t.mul_assign(state.alpha_values[6 + 1]);\\n        result.sub_assign(t);\\n\\n        // - alpha_2 * beta_gamma_powered L_{n-1}(z)\\n        PairingsBn254.Fr memory beta_gamma_powered = state.beta_gamma.pow(vk.domain_size - 1);\\n        state.l_n_minus_one_at_z = evaluate_lagrange_poly_out_of_domain(\\n            vk.domain_size - 1,\\n            vk.domain_size,\\n            vk.omega,\\n            state.z\\n        );\\n        t = state.l_n_minus_one_at_z.copy();\\n        t.mul_assign(beta_gamma_powered);\\n        t.mul_assign(state.alpha_values[6 + 2]);\\n\\n        result.sub_assign(t);\\n    }\\n\\n    function aggregated_linearization_commitment(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) internal view returns (PairingsBn254.G1Point memory result) {\\n        // qMain*(Q_a * A + Q_b * B + Q_c * C + Q_d * D + Q_m * A*B + Q_const + Q_dNext * D_next)\\n        result = PairingsBn254.new_g1(0, 0);\\n        // Q_a * A\\n        PairingsBn254.G1Point memory scaled = vk.gate_setup_commitments[0].point_mul(\\n            proof.state_polys_openings_at_z[0]\\n        );\\n        result.point_add_assign(scaled);\\n        // Q_b * B\\n        scaled = vk.gate_setup_commitments[1].point_mul(proof.state_polys_openings_at_z[1]);\\n        result.point_add_assign(scaled);\\n        // Q_c * C\\n        scaled = vk.gate_setup_commitments[2].point_mul(proof.state_polys_openings_at_z[2]);\\n        result.point_add_assign(scaled);\\n        // Q_d * D\\n        scaled = vk.gate_setup_commitments[3].point_mul(proof.state_polys_openings_at_z[3]);\\n        result.point_add_assign(scaled);\\n        // Q_m* A*B or Q_ab*A*B\\n        PairingsBn254.Fr memory t = proof.state_polys_openings_at_z[0].copy();\\n        t.mul_assign(proof.state_polys_openings_at_z[1]);\\n        scaled = vk.gate_setup_commitments[4].point_mul(t);\\n        result.point_add_assign(scaled);\\n        // Q_const\\n        result.point_add_assign(vk.gate_setup_commitments[5]);\\n        // Q_dNext * D_next\\n        scaled = vk.gate_setup_commitments[6].point_mul(proof.state_polys_openings_at_z_omega[0]);\\n        result.point_add_assign(scaled);\\n        result.point_mul_assign(proof.gate_selectors_openings_at_z[0]);\\n\\n        PairingsBn254.G1Point\\n            memory rescue_custom_gate_linearization_contrib = rescue_custom_gate_linearization_contribution(\\n                vk,\\n                proof,\\n                state\\n            );\\n        result.point_add_assign(rescue_custom_gate_linearization_contrib);\\n        require(vk.non_residues.length == STATE_WIDTH - 1);\\n\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n        PairingsBn254.Fr memory factor = state.alpha_values[4].copy();\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z.length; ) {\\n            t = state.z.copy();\\n            if (i == 0) {\\n                t.mul_assign(one);\\n            } else {\\n                t.mul_assign(vk.non_residues[i - 1]); // TODO add one into non-residues during codegen?\\n            }\\n            t.mul_assign(state.beta);\\n            t.add_assign(state.gamma);\\n            t.add_assign(proof.state_polys_openings_at_z[i]);\\n\\n            factor.mul_assign(t);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n\\n        scaled = proof.copy_permutation_grand_product_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n\\n        // - (a(z) + beta*perm_a + gamma)*()*()*z(z*omega) * beta * perm_d(X)\\n        factor = state.alpha_values[4].copy();\\n        factor.mul_assign(state.beta);\\n        factor.mul_assign(proof.copy_permutation_grand_product_opening_at_z_omega);\\n        for (uint256 i = 0; i < STATE_WIDTH - 1; i = i.uncheckedInc()) {\\n            t = proof.copy_permutation_polys_openings_at_z[i].copy();\\n            t.mul_assign(state.beta);\\n            t.add_assign(state.gamma);\\n            t.add_assign(proof.state_polys_openings_at_z[i]);\\n\\n            factor.mul_assign(t);\\n        }\\n        scaled = vk.permutation_commitments[3].point_mul(factor);\\n        result.point_sub_assign(scaled);\\n\\n        // + L_0(z) * Z(x)\\n        // TODO\\n        state.l_0_at_z = evaluate_lagrange_poly_out_of_domain(0, vk.domain_size, vk.omega, state.z);\\n        require(state.l_0_at_z.value != 0);\\n        factor = state.l_0_at_z.copy();\\n        factor.mul_assign(state.alpha_values[4 + 1]);\\n        scaled = proof.copy_permutation_grand_product_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n\\n        PairingsBn254.G1Point memory lookup_linearization_contrib = lookup_linearization_contribution(proof, state);\\n        result.point_add_assign(lookup_linearization_contrib);\\n    }\\n\\n    function rescue_custom_gate_linearization_contribution(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) public view returns (PairingsBn254.G1Point memory result) {\\n        PairingsBn254.Fr memory t;\\n        PairingsBn254.Fr memory intermediate_result;\\n\\n        // a^2 - b = 0\\n        t = proof.state_polys_openings_at_z[0].copy();\\n        t.mul_assign(t);\\n        t.sub_assign(proof.state_polys_openings_at_z[1]);\\n        // t.mul_assign(challenge1);\\n        t.mul_assign(state.alpha_values[1]);\\n        intermediate_result.add_assign(t);\\n\\n        // b^2 - c = 0\\n        t = proof.state_polys_openings_at_z[1].copy();\\n        t.mul_assign(t);\\n        t.sub_assign(proof.state_polys_openings_at_z[2]);\\n        t.mul_assign(state.alpha_values[1 + 1]);\\n        intermediate_result.add_assign(t);\\n\\n        // c*a - d = 0;\\n        t = proof.state_polys_openings_at_z[2].copy();\\n        t.mul_assign(proof.state_polys_openings_at_z[0]);\\n        t.sub_assign(proof.state_polys_openings_at_z[3]);\\n        t.mul_assign(state.alpha_values[1 + 2]);\\n        intermediate_result.add_assign(t);\\n\\n        result = vk.gate_selectors_commitments[1].point_mul(intermediate_result);\\n    }\\n\\n    function lookup_linearization_contribution(Proof memory proof, PartialVerifierState memory state)\\n        internal\\n        view\\n        returns (PairingsBn254.G1Point memory result)\\n    {\\n        PairingsBn254.Fr memory zero = PairingsBn254.new_fr(0);\\n\\n        PairingsBn254.Fr memory t;\\n        PairingsBn254.Fr memory factor;\\n        // s(x) from the Z(x*omega)*(\\\\gamma*(1 + \\\\beta) + s(x) + \\\\beta * s(x*omega)))\\n        factor = proof.lookup_grand_product_opening_at_z_omega.copy();\\n        factor.mul_assign(state.alpha_values[6]);\\n        factor.mul_assign(state.z_minus_last_omega);\\n\\n        PairingsBn254.G1Point memory scaled = proof.lookup_s_poly_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n\\n        // Z(x) from - alpha_0 * Z(x) * (\\\\beta + 1) * (\\\\gamma + f(x)) * (\\\\gamma(1 + \\\\beta) + t(x) + \\\\beta * t(x*omega))\\n        // + alpha_1 * Z(x) * L_{0}(z) + alpha_2 * Z(x) * L_{n-1}(z)\\n\\n        // accumulate coefficient\\n        factor = proof.lookup_t_poly_opening_at_z_omega.copy();\\n        factor.mul_assign(state.beta_lookup);\\n        factor.add_assign(proof.lookup_t_poly_opening_at_z);\\n        factor.add_assign(state.beta_gamma);\\n\\n        // (\\\\gamma + f(x))\\n        PairingsBn254.Fr memory f_reconstructed;\\n        PairingsBn254.Fr memory current = PairingsBn254.new_fr(1);\\n        PairingsBn254.Fr memory tmp0;\\n        for (uint256 i = 0; i < STATE_WIDTH - 1; i = i.uncheckedInc()) {\\n            tmp0 = proof.state_polys_openings_at_z[i].copy();\\n            tmp0.mul_assign(current);\\n            f_reconstructed.add_assign(tmp0);\\n\\n            current.mul_assign(state.eta);\\n        }\\n\\n        // add type of table\\n        t = proof.lookup_table_type_poly_opening_at_z.copy();\\n        t.mul_assign(current);\\n        f_reconstructed.add_assign(t);\\n\\n        f_reconstructed.mul_assign(proof.lookup_selector_poly_opening_at_z);\\n        f_reconstructed.add_assign(state.gamma_lookup);\\n\\n        // end of (\\\\gamma + f(x)) part\\n        factor.mul_assign(f_reconstructed);\\n        factor.mul_assign(state.beta_plus_one);\\n        t = zero.copy();\\n        t.sub_assign(factor);\\n        factor = t;\\n        factor.mul_assign(state.alpha_values[6]);\\n\\n        // Multiply by (z - omega^{n-1})\\n        factor.mul_assign(state.z_minus_last_omega);\\n\\n        // L_{0}(z) in front of Z(x)\\n        t = state.l_0_at_z.copy();\\n        t.mul_assign(state.alpha_values[6 + 1]);\\n        factor.add_assign(t);\\n\\n        // L_{n-1}(z) in front of Z(x)\\n        t = state.l_n_minus_one_at_z.copy();\\n        t.mul_assign(state.alpha_values[6 + 2]);\\n        factor.add_assign(t);\\n\\n        scaled = proof.lookup_grand_product_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n    }\\n\\n    struct Queries {\\n        PairingsBn254.G1Point[13] commitments_at_z;\\n        PairingsBn254.Fr[13] values_at_z;\\n        PairingsBn254.G1Point[6] commitments_at_z_omega;\\n        PairingsBn254.Fr[6] values_at_z_omega;\\n    }\\n\\n    function prepare_queries(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) public view returns (Queries memory queries) {\\n        // we set first two items in calee side so start idx from 2\\n        uint256 idx = 2;\\n        for (uint256 i = 0; i < STATE_WIDTH; i = i.uncheckedInc()) {\\n            queries.commitments_at_z[idx] = proof.state_polys_commitments[i];\\n            queries.values_at_z[idx] = proof.state_polys_openings_at_z[i];\\n            idx = idx.uncheckedInc();\\n        }\\n        require(proof.gate_selectors_openings_at_z.length == 1);\\n        queries.commitments_at_z[idx] = vk.gate_selectors_commitments[0];\\n        queries.values_at_z[idx] = proof.gate_selectors_openings_at_z[0];\\n        idx = idx.uncheckedInc();\\n        for (uint256 i = 0; i < STATE_WIDTH - 1; i = i.uncheckedInc()) {\\n            queries.commitments_at_z[idx] = vk.permutation_commitments[i];\\n            queries.values_at_z[idx] = proof.copy_permutation_polys_openings_at_z[i];\\n            idx = idx.uncheckedInc();\\n        }\\n\\n        queries.commitments_at_z_omega[0] = proof.copy_permutation_grand_product_commitment;\\n        queries.commitments_at_z_omega[1] = proof.state_polys_commitments[STATE_WIDTH - 1];\\n\\n        queries.values_at_z_omega[0] = proof.copy_permutation_grand_product_opening_at_z_omega;\\n        queries.values_at_z_omega[1] = proof.state_polys_openings_at_z_omega[0];\\n\\n        PairingsBn254.G1Point memory lookup_t_poly_commitment_aggregated = vk.lookup_tables_commitments[0];\\n        PairingsBn254.Fr memory current_eta = state.eta.copy();\\n        for (uint256 i = 1; i < vk.lookup_tables_commitments.length; i = i.uncheckedInc()) {\\n            state.tp = vk.lookup_tables_commitments[i].point_mul(current_eta);\\n            lookup_t_poly_commitment_aggregated.point_add_assign(state.tp);\\n\\n            current_eta.mul_assign(state.eta);\\n        }\\n        queries.commitments_at_z[idx] = lookup_t_poly_commitment_aggregated;\\n        queries.values_at_z[idx] = proof.lookup_t_poly_opening_at_z;\\n        idx = idx.uncheckedInc();\\n        queries.commitments_at_z[idx] = vk.lookup_selector_commitment;\\n        queries.values_at_z[idx] = proof.lookup_selector_poly_opening_at_z;\\n        idx = idx.uncheckedInc();\\n        queries.commitments_at_z[idx] = vk.lookup_table_type_commitment;\\n        queries.values_at_z[idx] = proof.lookup_table_type_poly_opening_at_z;\\n        queries.commitments_at_z_omega[2] = proof.lookup_s_poly_commitment;\\n        queries.values_at_z_omega[2] = proof.lookup_s_poly_opening_at_z_omega;\\n        queries.commitments_at_z_omega[3] = proof.lookup_grand_product_commitment;\\n        queries.values_at_z_omega[3] = proof.lookup_grand_product_opening_at_z_omega;\\n        queries.commitments_at_z_omega[4] = lookup_t_poly_commitment_aggregated;\\n        queries.values_at_z_omega[4] = proof.lookup_t_poly_opening_at_z_omega;\\n    }\\n\\n    function final_pairing(\\n        // VerificationKey memory vk,\\n        PairingsBn254.G2Point[NUM_G2_ELS] memory g2_elements,\\n        Proof memory proof,\\n        PartialVerifierState memory state,\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z,\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z_omega,\\n        PairingsBn254.Fr memory aggregated_opening_at_z,\\n        PairingsBn254.Fr memory aggregated_opening_at_z_omega\\n    ) internal view returns (bool) {\\n        // q(x) = f(x) - f(z) / (x - z)\\n        // q(x) * (x-z)  = f(x) - f(z)\\n\\n        // f(x)\\n        PairingsBn254.G1Point memory pair_with_generator = aggregated_commitment_at_z.copy_g1();\\n        aggregated_commitment_at_z_omega.point_mul_assign(state.u);\\n        pair_with_generator.point_add_assign(aggregated_commitment_at_z_omega);\\n\\n        // - f(z)*g\\n        PairingsBn254.Fr memory aggregated_value = aggregated_opening_at_z_omega.copy();\\n        aggregated_value.mul_assign(state.u);\\n        aggregated_value.add_assign(aggregated_opening_at_z);\\n        PairingsBn254.G1Point memory tp = PairingsBn254.P1().point_mul(aggregated_value);\\n        pair_with_generator.point_sub_assign(tp);\\n\\n        // +z * q(x)\\n        tp = proof.opening_proof_at_z.point_mul(state.z);\\n        PairingsBn254.Fr memory t = state.z_omega.copy();\\n        t.mul_assign(state.u);\\n        PairingsBn254.G1Point memory t1 = proof.opening_proof_at_z_omega.point_mul(t);\\n        tp.point_add_assign(t1);\\n        pair_with_generator.point_add_assign(tp);\\n\\n        // rhs\\n        PairingsBn254.G1Point memory pair_with_x = proof.opening_proof_at_z_omega.point_mul(state.u);\\n        pair_with_x.point_add_assign(proof.opening_proof_at_z);\\n        pair_with_x.negate();\\n        // Pairing precompile expects points to be in a `i*x[1] + x[0]` form instead of `x[0] + i*x[1]`\\n        // so we handle it in code generation step\\n        PairingsBn254.G2Point memory first_g2 = g2_elements[0];\\n        PairingsBn254.G2Point memory second_g2 = g2_elements[1];\\n        PairingsBn254.G2Point memory gen2 = PairingsBn254.P2();\\n\\n        return PairingsBn254.pairingProd2(pair_with_generator, first_g2, pair_with_x, second_g2);\\n    }\\n}\\n\",\"keccak256\":\"0x3ef4937c0ab65a60baabb5b00ece282148267f94bc6c087254faf925c2bdc7d2\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PairingsBn254.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nlibrary PairingsBn254 {\\n    uint256 constant q_mod = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n    uint256 constant r_mod = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant bn254_b_coeff = 3;\\n\\n    struct G1Point {\\n        uint256 X;\\n        uint256 Y;\\n    }\\n\\n    struct Fr {\\n        uint256 value;\\n    }\\n\\n    function new_fr(uint256 fr) internal pure returns (Fr memory) {\\n        require(fr < r_mod);\\n        return Fr({value: fr});\\n    }\\n\\n    function copy(Fr memory self) internal pure returns (Fr memory n) {\\n        n.value = self.value;\\n    }\\n\\n    function assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = other.value;\\n    }\\n\\n    function inverse(Fr memory fr) internal view returns (Fr memory) {\\n        require(fr.value != 0);\\n        return pow(fr, r_mod - 2);\\n    }\\n\\n    function add_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = addmod(self.value, other.value, r_mod);\\n    }\\n\\n    function sub_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = addmod(self.value, r_mod - other.value, r_mod);\\n    }\\n\\n    function mul_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = mulmod(self.value, other.value, r_mod);\\n    }\\n\\n    function pow(Fr memory self, uint256 power) internal view returns (Fr memory) {\\n        uint256[6] memory input = [32, 32, 32, self.value, power, r_mod];\\n        uint256[1] memory result;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 0x05, input, 0xc0, result, 0x20)\\n        }\\n        require(success);\\n        return Fr({value: result[0]});\\n    }\\n\\n    // Encoding of field elements is: X[0] * z + X[1]\\n    struct G2Point {\\n        uint256[2] X;\\n        uint256[2] Y;\\n    }\\n\\n    function P1() internal pure returns (G1Point memory) {\\n        return G1Point(1, 2);\\n    }\\n\\n    function new_g1(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n        return G1Point(x, y);\\n    }\\n\\n    // function new_g1_checked(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n    function new_g1_checked(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n        if (x == 0 && y == 0) {\\n            // point of infinity is (0,0)\\n            return G1Point(x, y);\\n        }\\n\\n        // check encoding\\n        require(x < q_mod, \\\"x axis isn't valid\\\");\\n        require(y < q_mod, \\\"y axis isn't valid\\\");\\n        // check on curve\\n        uint256 lhs = mulmod(y, y, q_mod); // y^2\\n\\n        uint256 rhs = mulmod(x, x, q_mod); // x^2\\n        rhs = mulmod(rhs, x, q_mod); // x^3\\n        rhs = addmod(rhs, bn254_b_coeff, q_mod); // x^3 + b\\n        require(lhs == rhs, \\\"is not on curve\\\");\\n\\n        return G1Point(x, y);\\n    }\\n\\n    function new_g2(uint256[2] memory x, uint256[2] memory y) internal pure returns (G2Point memory) {\\n        return G2Point(x, y);\\n    }\\n\\n    function copy_g1(G1Point memory self) internal pure returns (G1Point memory result) {\\n        result.X = self.X;\\n        result.Y = self.Y;\\n    }\\n\\n    function P2() internal pure returns (G2Point memory) {\\n        // for some reason ethereum expects to have c1*v + c0 form\\n\\n        return\\n            G2Point(\\n                [\\n                    0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,\\n                    0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\\n                ],\\n                [\\n                    0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,\\n                    0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\\n                ]\\n            );\\n    }\\n\\n    function negate(G1Point memory self) internal pure {\\n        // The prime q in the base field F_q for G1\\n        if (self.Y == 0) {\\n            require(self.X == 0);\\n            return;\\n        }\\n\\n        self.Y = q_mod - self.Y;\\n    }\\n\\n    function point_add(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) {\\n        point_add_into_dest(p1, p2, r);\\n        return r;\\n    }\\n\\n    function point_add_assign(G1Point memory p1, G1Point memory p2) internal view {\\n        point_add_into_dest(p1, p2, p1);\\n    }\\n\\n    function point_add_into_dest(\\n        G1Point memory p1,\\n        G1Point memory p2,\\n        G1Point memory dest\\n    ) internal view {\\n        if (p2.X == 0 && p2.Y == 0) {\\n            // we add zero, nothing happens\\n            dest.X = p1.X;\\n            dest.Y = p1.Y;\\n            return;\\n        } else if (p1.X == 0 && p1.Y == 0) {\\n            // we add into zero, and we add non-zero point\\n            dest.X = p2.X;\\n            dest.Y = p2.Y;\\n            return;\\n        } else {\\n            uint256[4] memory input;\\n\\n            input[0] = p1.X;\\n            input[1] = p1.Y;\\n            input[2] = p2.X;\\n            input[3] = p2.Y;\\n\\n            bool success;\\n            assembly {\\n                success := staticcall(gas(), 6, input, 0x80, dest, 0x40)\\n            }\\n            require(success);\\n        }\\n    }\\n\\n    function point_sub_assign(G1Point memory p1, G1Point memory p2) internal view {\\n        point_sub_into_dest(p1, p2, p1);\\n    }\\n\\n    function point_sub_into_dest(\\n        G1Point memory p1,\\n        G1Point memory p2,\\n        G1Point memory dest\\n    ) internal view {\\n        if (p2.X == 0 && p2.Y == 0) {\\n            // we subtracted zero, nothing happens\\n            dest.X = p1.X;\\n            dest.Y = p1.Y;\\n            return;\\n        } else if (p1.X == 0 && p1.Y == 0) {\\n            // we subtract from zero, and we subtract non-zero point\\n            dest.X = p2.X;\\n            dest.Y = q_mod - p2.Y;\\n            return;\\n        } else {\\n            uint256[4] memory input;\\n\\n            input[0] = p1.X;\\n            input[1] = p1.Y;\\n            input[2] = p2.X;\\n            input[3] = q_mod - p2.Y;\\n\\n            bool success = false;\\n            assembly {\\n                success := staticcall(gas(), 6, input, 0x80, dest, 0x40)\\n            }\\n            require(success);\\n        }\\n    }\\n\\n    function point_mul(G1Point memory p, Fr memory s) internal view returns (G1Point memory r) {\\n        // https://eips.ethereum.org/EIPS/eip-197\\n        // Elliptic curve points are encoded as a Jacobian pair (X, Y) where the point at infinity is encoded as (0, 0)\\n        // TODO\\n        if (p.X == 0 && p.Y == 1) {\\n            p.Y = 0;\\n        }\\n        point_mul_into_dest(p, s, r);\\n        return r;\\n    }\\n\\n    function point_mul_assign(G1Point memory p, Fr memory s) internal view {\\n        point_mul_into_dest(p, s, p);\\n    }\\n\\n    function point_mul_into_dest(\\n        G1Point memory p,\\n        Fr memory s,\\n        G1Point memory dest\\n    ) internal view {\\n        uint256[3] memory input;\\n        input[0] = p.X;\\n        input[1] = p.Y;\\n        input[2] = s.value;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 7, input, 0x60, dest, 0x40)\\n        }\\n        require(success);\\n    }\\n\\n    function pairing(G1Point[] memory p1, G2Point[] memory p2) internal view returns (bool) {\\n        require(p1.length == p2.length);\\n        uint256 elements = p1.length;\\n        uint256 inputSize = elements * 6;\\n        uint256[] memory input = new uint256[](inputSize);\\n        for (uint256 i = 0; i < elements; ) {\\n            input[i * 6 + 0] = p1[i].X;\\n            input[i * 6 + 1] = p1[i].Y;\\n            input[i * 6 + 2] = p2[i].X[0];\\n            input[i * 6 + 3] = p2[i].X[1];\\n            input[i * 6 + 4] = p2[i].Y[0];\\n            input[i * 6 + 5] = p2[i].Y[1];\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n        uint256[1] memory out;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20)\\n        }\\n        require(success);\\n        return out[0] != 0;\\n    }\\n\\n    /// Convenience method for a pairing check for two pairs.\\n    function pairingProd2(\\n        G1Point memory a1,\\n        G2Point memory a2,\\n        G1Point memory b1,\\n        G2Point memory b2\\n    ) internal view returns (bool) {\\n        G1Point[] memory p1 = new G1Point[](2);\\n        G2Point[] memory p2 = new G2Point[](2);\\n        p1[0] = a1;\\n        p1[1] = b1;\\n        p2[0] = a2;\\n        p2[1] = b2;\\n        return pairing(p1, p2);\\n    }\\n}\\n\",\"keccak256\":\"0x0532cd43e648a5236d854c85b47d83e4d4faa86ccb87322de0dcc52f0956ee1d\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/TranscriptLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./PairingsBn254.sol\\\";\\n\\nlibrary TranscriptLib {\\n    // flip                    0xe000000000000000000000000000000000000000000000000000000000000000;\\n    uint256 constant FR_MASK = 0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n    uint32 constant DST_0 = 0;\\n    uint32 constant DST_1 = 1;\\n    uint32 constant DST_CHALLENGE = 2;\\n\\n    struct Transcript {\\n        bytes32 state_0;\\n        bytes32 state_1;\\n        uint32 challenge_counter;\\n    }\\n\\n    function new_transcript() internal pure returns (Transcript memory t) {\\n        t.state_0 = bytes32(0);\\n        t.state_1 = bytes32(0);\\n        t.challenge_counter = 0;\\n    }\\n\\n    function update_with_u256(Transcript memory self, uint256 value) internal pure {\\n        bytes32 old_state_0 = self.state_0;\\n        self.state_0 = keccak256(abi.encodePacked(DST_0, old_state_0, self.state_1, value));\\n        self.state_1 = keccak256(abi.encodePacked(DST_1, old_state_0, self.state_1, value));\\n    }\\n\\n    function update_with_fr(Transcript memory self, PairingsBn254.Fr memory value) internal pure {\\n        update_with_u256(self, value.value);\\n    }\\n\\n    function update_with_g1(Transcript memory self, PairingsBn254.G1Point memory p) internal pure {\\n        update_with_u256(self, p.X);\\n        update_with_u256(self, p.Y);\\n    }\\n\\n    function get_challenge(Transcript memory self) internal pure returns (PairingsBn254.Fr memory challenge) {\\n        bytes32 query = keccak256(abi.encodePacked(DST_CHALLENGE, self.state_0, self.state_1, self.challenge_counter));\\n        self.challenge_counter += 1;\\n        challenge = PairingsBn254.Fr({value: uint256(query) & FR_MASK});\\n    }\\n}\\n\",\"keccak256\":\"0x56cd646af0899ea51be78a046b647578bae59714f5f3e3c85010b278c96bfdcc\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l1/contracts/zksync/Verifier.sol":{"Verifier":{"abi":[{"inputs":[{"components":[{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"zero","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"alpha","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"gamma","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[9]","name":"alpha_values","type":"tuple[9]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"eta","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta_lookup","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"gamma_lookup","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta_plus_one","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta_gamma","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"v","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"u","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"z_minus_last_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"l_0_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"l_n_minus_one_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"t","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"tp","type":"tuple"}],"internalType":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState","name":"state","type":"tuple"}],"name":"compute_powers_of_alpha","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"domain_size","type":"uint256"},{"internalType":"uint256","name":"num_inputs","type":"uint256"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[2]","name":"gate_selectors_commitments","type":"tuple[2]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[7]","name":"gate_setup_commitments","type":"tuple[7]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[4]","name":"permutation_commitments","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"lookup_selector_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[4]","name":"lookup_tables_commitments","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"lookup_table_type_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[3]","name":"non_residues","type":"tuple[3]"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"internalType":"struct PairingsBn254.G2Point[2]","name":"g2_elements","type":"tuple[2]"}],"internalType":"struct VerificationKey","name":"vk","type":"tuple"},{"components":[{"internalType":"uint256[]","name":"input_values","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[4]","name":"state_polys_commitments","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"copy_permutation_grand_product_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[4]","name":"quotient_poly_parts_commitments","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[4]","name":"state_polys_openings_at_z","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[1]","name":"state_polys_openings_at_z_omega","type":"tuple[1]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[1]","name":"gate_selectors_openings_at_z","type":"tuple[1]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[3]","name":"copy_permutation_polys_openings_at_z","type":"tuple[3]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"copy_permutation_grand_product_opening_at_z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"quotient_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"linearization_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"lookup_s_poly_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"lookup_grand_product_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_s_poly_opening_at_z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_grand_product_opening_at_z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_t_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_t_poly_opening_at_z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_selector_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_table_type_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"opening_proof_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"opening_proof_at_z_omega","type":"tuple"}],"internalType":"struct Plonk4VerifierWithAccessToDNext.Proof","name":"proof","type":"tuple"},{"components":[{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"zero","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"alpha","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"gamma","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[9]","name":"alpha_values","type":"tuple[9]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"eta","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta_lookup","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"gamma_lookup","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta_plus_one","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta_gamma","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"v","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"u","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"z_minus_last_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"l_0_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"l_n_minus_one_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"t","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"tp","type":"tuple"}],"internalType":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState","name":"state","type":"tuple"}],"name":"prepare_queries","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[13]","name":"commitments_at_z","type":"tuple[13]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[13]","name":"values_at_z","type":"tuple[13]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[6]","name":"commitments_at_z_omega","type":"tuple[6]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[6]","name":"values_at_z_omega","type":"tuple[6]"}],"internalType":"struct Plonk4VerifierWithAccessToDNext.Queries","name":"queries","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"domain_size","type":"uint256"},{"internalType":"uint256","name":"num_inputs","type":"uint256"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[2]","name":"gate_selectors_commitments","type":"tuple[2]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[7]","name":"gate_setup_commitments","type":"tuple[7]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[4]","name":"permutation_commitments","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"lookup_selector_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[4]","name":"lookup_tables_commitments","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"lookup_table_type_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[3]","name":"non_residues","type":"tuple[3]"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"internalType":"struct PairingsBn254.G2Point[2]","name":"g2_elements","type":"tuple[2]"}],"internalType":"struct VerificationKey","name":"vk","type":"tuple"},{"components":[{"internalType":"uint256[]","name":"input_values","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[4]","name":"state_polys_commitments","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"copy_permutation_grand_product_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point[4]","name":"quotient_poly_parts_commitments","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[4]","name":"state_polys_openings_at_z","type":"tuple[4]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[1]","name":"state_polys_openings_at_z_omega","type":"tuple[1]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[1]","name":"gate_selectors_openings_at_z","type":"tuple[1]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[3]","name":"copy_permutation_polys_openings_at_z","type":"tuple[3]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"copy_permutation_grand_product_opening_at_z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"quotient_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"linearization_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"lookup_s_poly_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"lookup_grand_product_commitment","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_s_poly_opening_at_z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_grand_product_opening_at_z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_t_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_t_poly_opening_at_z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_selector_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"lookup_table_type_poly_opening_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"opening_proof_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"opening_proof_at_z_omega","type":"tuple"}],"internalType":"struct Plonk4VerifierWithAccessToDNext.Proof","name":"proof","type":"tuple"},{"components":[{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"zero","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"alpha","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"gamma","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr[9]","name":"alpha_values","type":"tuple[9]"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"eta","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta_lookup","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"gamma_lookup","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta_plus_one","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"beta_gamma","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"v","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"u","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"z_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"z_minus_last_omega","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"l_0_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"l_n_minus_one_at_z","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct PairingsBn254.Fr","name":"t","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"tp","type":"tuple"}],"internalType":"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState","name":"state","type":"tuple"}],"name":"rescue_custom_gate_linearization_contribution","outputs":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct PairingsBn254.G1Point","name":"result","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"public_inputs","type":"uint256[]"},{"internalType":"uint256[]","name":"serialized_proof","type":"uint256[]"}],"name":"verify_serialized_proof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506146bf806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063330deb9f1461005157806338fdad141461007957806397e2957d14610099578063fec4e96e146100b9575b600080fd5b61006461005f366004613a42565b6100ce565b60405190151581526020015b60405180910390f35b61008c61008736600461435b565b610111565b6040516100709190614485565b6100ac6100a736600461435b565b610266565b60405161007091906144fe565b6100cc6100c736600461459f565b6105ca565b005b6000806100d9610678565b602081015190915085146100ec57600080fd5b60006100fa87878787610e07565b90506101068183611252565b979650505050505050565b6040805180820190915260008082526020820152604080516020810190915260008152604080516020810190915260008152608085015161016a9060005b60200201516040805160208101909152600081529051815290565b91506101768280611537565b608085015161018e9060015b60200201518390611551565b60808401516101a69060015b60200201518390611537565b6101b08183611583565b60808501516101c090600161014f565b91506101cc8280611537565b60808501516101dc906002610182565b60808401516101ec90600261019a565b6101f68183611583565b608085015161020690600261014f565b608086015190925061021990600061019a565b6080850151610229906003610182565b608084015161023990600361019a565b6102438183611583565b606086015161025c90829060015b60200201519061159d565b9695505050505050565b61026e6132d4565b600260005b60048110156102f15784602001518160048110610292576102926145c3565b6020020151835183600d81106102aa576102aa6145c3565b6020020152608085015181600481106102c5576102c56145c3565b6020020151836020015183600d81106102e0576102e06145c3565b602002015260019182019101610273565b50606085015151825182600d811061030b5761030b6145c3565b602002015260c084015160006020020151826020015182600d8110610332576103326145c3565b602002015260010160005b610349600160046145ef565b8110156103c5578560a001518160048110610366576103666145c3565b6020020151835183600d811061037e5761037e6145c3565b602002015260e08501518160038110610399576103996145c3565b6020020151836020015183600d81106103b4576103b46145c3565b60200201526001918201910161033d565b50604084810151908301515260208401516103e2600160046145ef565b600481106103f2576103f26145c3565b6020908102919091015160408401518201526101008501516060840180519190915260a0808701515191519092015260e08601515190840151600090610448906040805160208101909152600081529051815290565b905060015b600481101561049b57610470828960e001518360048110610251576102516145c3565b61024087018190526104839084906115dc565b60a0860151610493908390611537565b60010161044d565b508351829084600d81106104b1576104b16145c3565b6020020181905250856101e00151846020015184600d81106104d5576104d56145c3565b602002015260c087015184516001949094019384600d81106104f9576104f96145c3565b6020020181905250856102200151846020015184600d811061051d5761051d6145c3565b602002015261010087015184516001949094019384600d8110610542576105426145c3565b6020020181905250856102400151846020015184600d8110610566576105666145c3565b602002015250610160850151604084810180518201929092526101a0870151606080870180519093019190915261018088015183518201526101c0880151825190910152905160809081019290925261020090950151945101939093529392505050565b6020810151516000036105dc57600080fd5b6105e660016115eb565b608082018051919091526020808301805160408051808501825260008082529251815294518401949094529051835192830190935281529051815260025b600981101561067357602083015161063d908390611537565b6040805160208101909152600081528251815283608001518260098110610666576106666145c3565b6020020152600101610624565b505050565b610680613313565b6001602082015261010081526106b57f1058a83d529be585820b96ff0a13f2dbd8675a9e5dd2336a6692cc1e5a526c816115eb565b60408201526107047f05f5cabc4eab14cfabee1334ef7f33a66259cc9fd07af862308d5c41765adb4b7f128a103fbe66c8ff697182c0963d963208b55a5a53ddeab9b4bc09dc2a68a9cc611626565b6080820151526107547f0d9980170c334c107e6ce4d66bbc4d23bbcdc97c020b1e1c3f6e04c6c663d2c27f0968205845091ceaf3f863b1613fbdf7ce9a87ccfd97f22011679e6350384419611626565b6080820151602001526107a77f0c84a19b149a1612cb042ad86382b9e94367c0add60d07e12399999e7db09efe7f1e02f70c44c9bfb7bf2164cee2ab4813bcb9be56eb432e2e9dfffffe196d846d611626565b6080820151604001526107fa7f1eb3599506a41a7d62e1f7438d6732fbb9d1eda7b9c7a0213eca63c9334ac5a97f23563d9f429908d8ea80bffa642840fb081936d45b388bafc504d9b1e5b1c410611626565b60808201516060015261080f60006001611626565b60808281015101526108617f063e8dac7ee3ee6a4569fd53b416fe17f8f10de8c435c336e5a1cf2e026432007f1d4c1781b78f926d55f89ef72abb96bee350ce60ddc684f5a02d87c5f4cdf943611626565b608082015160a0015261087660006001611626565b608082015160c001526108c97f0b487eb34c8480ea506f5c6c25857155d61d7f9824b60bc80e1a415a5bcf247f7f07ea0d0d0df9dbcc944e9341a5bb49ae796d9dc9d7ca1c032b53784715b946db611626565b6060820151526109197f0fa66faa0b9ea782eb400175ac9f0c05f0de64332eec54a87cd20db4540baec27f07dea33d314c690c4bd4b21deda1a44b9f8dd87e539024622768c2f8b8bdabe1611626565b60608201516020015261096c7f120482c52e31d2373f9b2dc80a47e68f035e278d220fa8a89d0c81f1333439537f02928a78ea2e1a943e9220b7e288fd48a561263f8e5f94518f21aaa43781ceac611626565b60a0820151526109bc7f1dfad2c4d60704bcf6af0abd9cce09151f063c4b52200c268e470c6a6c93cbca7f08b28dd6ca14d7c33e078fe0f332a9a4d95ac8df171355de9e69930aec02b5dc611626565b60a082015160200152610a0f7f0935a4fd6ab67925929661cf2d2e814f87f589ee6234cb9675ecc2d897f1b3387f1032ccc41c047413fce4a847ba7e51e4a2ea406d89a88d480c5f0efaf6c8c89a611626565b60a082015160400152610a627f0eafaea3af7d1fadb2138db1b991af5d2218f6892714fd019898c7e1a43ecfe87f28fb17eda285ed74cc9771d62fad22ab459bbb0a4968c489972aca8b7e618fcb611626565b60a082015160600152610ab57f155201a564e721b1f5c06315ad4e24eaad3cbdd6197b19cd903fe85613080f867f12fb201bc896572ac14357e2601f5118636f1eeb7b89c177ac940aac3b5253ec611626565b60c0820152610b047f1cb0e2ae4d52743898d94d7f1729bd0d3357ba035cdb6b3af7ebff9159f8f2977f15ee595227c9e0f7a487ddb8072d5ea3cfd058bc569211c3546bc0e80051553f611626565b60e082015152610b547f13e4ab94c03a5a29719930c1361d854e244cf918f1e29cb031303f4a13b719777f0f792ef4c6c8746c97be61ed9b20f31ba2dec3bd5c91a2d9a4a586f19af3a07c611626565b60e082015160200152610ba77f1c9e69bd2b04240ebe44fb23d67c596fce4a1336109fdce38c2f184a63cd8acc7f1cbd3e72bdbce827227e503690b10be9365ae760e9d2babde5ba81edf12f8206611626565b60e082015160400152610bfa7f2a0d46339fbf72104df6a241b53a957602b1a16f6e3b9f89bf3e4c4645df823c7f11a601d7b2eee4b7885f34c9873426ba1263f38eae2e0351d653b8b1ba9c67f6611626565b60e082015160600152610c4d7f1a70e43f18b18d686807c2b1c6471cd949dd251b48090bca443d86b97afae9517f0e6e23ad15a1bd851b228788ae4a03bf25bda39ede6d5a92d501a8402a0dfe43611626565b610100820152610c5d60056115eb565b61012082015152610c6e60076115eb565b61012082015160200152610c82600a6115eb565b61012082015160026020020181905250610d4460405180604001604052807f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81525060405180604001604052807f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa815250611651565b610140820151526040805180820182527f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c181527f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b060208281019190915282518084019093527f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe483527f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e5590830152610dfa91611651565b6101408201516020015290565b610e0f6133d5565b836001600160401b03811115610e2757610e27613aad565b604051908082528060200260200182016040528015610e50578160200160208202803683370190505b50815260005b84811015610ea057858582818110610e7057610e706145c3565b9050602002013582600001518281518110610e8d57610e8d6145c3565b6020908102919091010152600101610e56565b506000805b6004811015610f1a57610ef1858584818110610ec357610ec36145c3565b905060200201358686610ed68660010190565b818110610ee557610ee56145c3565b90506020020135611659565b83602001518260048110610f0757610f076145c3565b6020020152600282019150600101610ea5565b50610f43848483818110610f3057610f306145c3565b905060200201358585610ed68560010190565b6040830152600201610f60848483818110610f3057610f306145c3565b610160830152600201610f7e848483818110610f3057610f306145c3565b61018083015260020160005b6004811015610fd157610fa8858584818110610ec357610ec36145c3565b83606001518260048110610fbe57610fbe6145c3565b6020020152600282019150600101610f8a565b5060005b600481101561102657610fff858584818110610ff357610ff36145c3565b905060200201356115eb565b83608001518260048110611015576110156145c3565b602002015260019182019101610fd5565b5060005b600181101561106f57611048858584818110610ff357610ff36145c3565b8360a00151826001811061105e5761105e6145c3565b60200201526001918201910161102a565b5060005b60018110156110b857611091858584818110610ff357610ff36145c3565b8360c0015182600181106110a7576110a76145c3565b602002015260019182019101611073565b5060005b6003811015611101576110da858584818110610ff357610ff36145c3565b8360e0015182600381106110f0576110f06145c3565b6020020152600191820191016110bc565b50611117848483818110610ff357610ff36145c3565b610100830152600101611135848483818110610ff357610ff36145c3565b6101a0830152600101611153848483818110610ff357610ff36145c3565b6101c0830152600101611171848483818110610ff357610ff36145c3565b6101e083015260010161118f848483818110610ff357610ff36145c3565b6102008301526001016111ad848483818110610ff357610ff36145c3565b6102208301526001016111cb848483818110610ff357610ff36145c3565b6102408301526001016111e9848483818110610ff357610ff36145c3565b610120830152600101611207848483818110610ff357610ff36145c3565b610140830152600101611225848483818110610f3057610f306145c3565b610260830152600201611243848483818110610f3057610f306145c3565b61028083015250949350505050565b60008061125f84846117f1565b905061126c838583611b2a565b151560000361127f576000915050611531565b60608401516000906112b890825b6020020151604080518082019091526000808252602080830191825283518352929092015190915290565b84516101808401519192506000916112cf91611e23565b604080516020808201835260008083528451835283518085019094528084529083015291925060015b60048110156113425761131a8960600151826004811061128d5761128d6145c3565b91506113268284611ea2565b61133085836115dc565b61133a8385611537565b6001016112f8565b505050506000611353858785610266565b80518390526101208701516020820151529050611371858785611ead565b8151602090810191909152610140870151818301805190920152815151905151600061139d60016115eb565b90506113bc604051806040016040528060008152602001600081525090565b60015b600d811015611445576101408801516113d9908490611537565b6113f383876000015183600d8110610251576102516145c3565b91506113ff85836115dc565b856020015181600d8110611415576114156145c3565b6020020151610220890181905261142c9084611537565b61022088015161143d908590611583565b6001016113bf565b50610140870151611457908390611537565b6000611474838760400151600060068110610251576102516145c3565b6060870151519091506114878185611537565b60015b6006811015611510576101408a01516114a4908690611537565b6114be8589604001518360068110610251576102516145c3565b93506114ca83856115dc565b876060015181600681106114e0576114e06145c3565b60200201516102208b018190526114f79086611537565b6102208a0151611508908390611583565b60010161148a565b506115258b61014001518d8b89868a876122be565b99505050505050505050505b92915050565b60008051602061466a833981519152815183510990915250565b60008051602061466a833981519152815161157a9060008051602061466a8339815191526145ef565b83510890915250565b60008051602061466a833981519152815183510890915250565b604080518082019091526000808252602082015282511580156115c4575082602001516001145b156115d157600060208401525b611531838383612466565b6115e78282846124a8565b5050565b60408051602081019091526000815260008051602061466a833981519152821061161457600080fd5b50604080516020810190915290815290565b60408051808201909152600080825260208201525b5060408051808201909152918252602082015290565b61163b6135e3565b604080518082019091526000808252602082015282158015611679575081155b1561169a576040518060400160405280848152602001838152509050611531565b60008051602061464a83398151915283106116f15760405162461bcd60e51b81526020600482015260126024820152711e08185e1a5cc81a5cdb89dd081d985b1a5960721b60448201526064015b60405180910390fd5b60008051602061464a83398151915282106117435760405162461bcd60e51b81526020600482015260126024820152711e48185e1a5cc81a5cdb89dd081d985b1a5960721b60448201526064016116e8565b600060008051602061464a8339815191528384099050600060008051602061464a833981519152858609905060008051602061464a833981519152858209905060008051602061464a8339815191526003820890508082146117d95760405162461bcd60e51b815260206004820152600f60248201526e6973206e6f74206f6e20637572766560881b60448201526064016116e8565b50506040805180820190915292835250602082015290565b6117f9613603565b60408051606081018252600080825260208201819052918101829052905b836020015181101561185b576118538560000151828151811061183c5761183c6145c3565b60200260200101518361253890919063ffffffff16565b600101611817565b5060005b60048110156118955761188d85602001518260048110611881576118816145c3565b602002015183906125c6565b60010161185f565b5061189f816125e2565b60a08301526101608401516118b59082906125c6565b6118be816125e2565b60408301526118cc816125e2565b606083015260408401516118e19082906125c6565b6118ea816125e2565b60c08301526118f8816125e2565b60e083015261018084015161190e9082906125c6565b611917816125e2565b602083015260005b60048110156119495761194185606001518260048110611881576118816145c3565b60010161191f565b50611953816125e2565b61018083015261012084015161196a908290612688565b60005b60048110156119a35761199b8560800151826004811061198f5761198f6145c3565b60200201518390612688565b60010161196d565b5060005b60018110156119d1576119c98560a00151826001811061198f5761198f6145c3565b6001016119a7565b5060005b60018110156119ff576119f78560c00151826001811061198f5761198f6145c3565b6001016119d5565b5060005b6003811015611a2d57611a258560e00151826003811061198f5761198f6145c3565b600101611a03565b506101808201516040805160208101825260008152915182526101a08401829052840151611a5b9190611537565b610100840151611a6c908290612688565b6101e0840151611a7d908290612688565b610220840151611a8e908290612688565b610240840151611a9f908290612688565b6101a0840151611ab0908290612688565b6101c0840151611ac1908290612688565b610200840151611ad2908290612688565b610140840151611ae3908290612688565b611aec816125e2565b610140830152610260840151611b039082906125c6565b610280840151611b149082906125c6565b611b1d816125e2565b6101608301525092915050565b60008084602001516001600160401b03811115611b4957611b49613aad565b604051908082528060200260200182016040528015611b72578160200160208202803683370190505b50905060005b8151811015611ba75780828281518110611b9457611b946145c3565b6020908102919091010152600101611b78565b506000611bb460006115eb565b905060005b8660200151811015611c3257611bde8188600001518960400151886101800151612696565b61022086015285518051611c1991611c0d9184908110611c0057611c006145c3565b60200260200101516115eb565b61022087015190611537565b610220850151611c2a908390611583565b600101611bb9565b5060c0850151611c4b9060005b60200201518290611537565b61014085015160408051602081019091526000815290518152611c6e8183611583565b611c77856105ca565b6080850151600090611c8a90600461014f565b9050611ca48761010001518261153790919063ffffffff16565b611cb0600160046145ef565b600314611cbc57600080fd5b60408051602081019091526000815260005b6003811015611d5057611cf08960e00151826003811061014f5761014f6145c3565b9150611d0988604001518361153790919063ffffffff16565b611d2e89608001518260048110611d2257611d226145c3565b60200201518390611583565b6060880151611d3e908390611583565b611d488383611537565b600101611cce565b506080880151611d6190600361014f565b9050611d7a87606001518261158390919063ffffffff16565b611d848282611537565b611d8e8383611551565b6000611da38a60000151896101800151612744565b6080890151909150611db6906005611c3f565b611dc08482611551565b6000611dcd8b8b8b6127ca565b9050611dd98582611583565b6101208a0151604080516020810190915260008152905181528b516101808b0151611e0e91611e0791612a1a565b8290611537565b945194519094149a9950505050505050505050565b604080516020808201835260008252825160c08101845281815280820182905292830152835160608301526080820183905260008051602061466a83398151915260a083015290611e726137b7565b600060208260c08560055afa905080611e8a57600080fd5b50604080516020810190915290518152949350505050565b6115e7828284612466565b6040805180820190915260008082526020820152611ecc600080611626565b90506000611efb8460800151600060048110611eea57611eea6145c3565b602002015160808701516000610251565b9050611f0782826115dc565b6080840151611f23906001602002015160808701516001610251565b9050611f2f82826115dc565b6080840151611f4b906002602002015160808701516002610251565b9050611f5782826115dc565b6080840151611f73906003602002015160808701516003610251565b9050611f7f82826115dc565b6080840151600090611f91908261014f565b6080860151909150611fa4906001611c3f565b6080860151611fb69082906004610251565b9150611fc283836115dc565b608086015160a00151611fd69084906115dc565b60a0850151516080870151611fed91906006610251565b9150611ff983836115dc565b60c08501515161200a908490611ea2565b6000612017878787610111565b905061202384826115dc565b61202f600160046145ef565b60031461203b57600080fd5b600061204760016115eb565b90506000612065876080015160046009811061014f5761014f6145c3565b905060005b600481101561212d57610180880151604080516020810190915260008152905181529450806000036120a5576120a08584611537565b6120d6565b6101208a01516120d6906120ba6001846145ef565b600381106120ca576120ca6145c3565b60200201518690611537565b60408801516120e6908690611537565b60608801516120f6908690611583565b61211b8960800151826004811061210f5761210f6145c3565b60200201518690611583565b6121258286611537565b60010161206a565b50604088015161213d908261159d565b945061214986866115dc565b608087015161215990600461014f565b905061217287604001518261153790919063ffffffff16565b610100880151612183908290611537565b60005b612192600160046145ef565b811015612206576121b28960e00151826003811061014f5761014f6145c3565b94506121cb88604001518661153790919063ffffffff16565b60608801516121db908690611583565b6121f48960800151826004811061210f5761210f6145c3565b6121fe8286611537565b600101612186565b5060a08901516122199082906003610251565b94506122258686612a49565b61223f60008a600001518b604001518a6101800151612696565b6101e088018190525160000361225457600080fd5b506101e086015160408051602081019091526000815290518152608087015161227e906005611c3f565b604088015161228d908261159d565b945061229986866115dc565b60006122a58989612a54565b90506122b187826115dc565b5050505050509392505050565b604080518082019091526000808252602080830182815287518452908701519052906122f887610160015186611ea290919063ffffffff16565b61230281866115dc565b60408051602081019091526000815283518152610160880151612326908290611537565b6123308186611583565b600061236882612362604080518082018252600080825260209182015281518083019092526001825260029082015290565b9061159d565b90506123748382612a49565b6101808901516102608b01516123899161159d565b905060006123ac8a6101a001516040805160208101909152600081529051815290565b90506123c68a61016001518261153790919063ffffffff16565b6102808b01516000906123d9908361159d565b90506123e583826115dc565b6123ef85846115dc565b600061240e8c61016001518e610280015161159d90919063ffffffff16565b90506124288d6102600151826115dc90919063ffffffff16565b61243181612d22565b8d5160208f01516000612442612d62565b905061245089848685612e22565b9950505050505050505050979650505050505050565b61246e6137d5565b835181526020840151816001602002015282518160026020020152600060408360608460075afa9050806124a157600080fd5b5050505050565b81511580156124b957506020820151155b156124d1578251815260209283015192019190915250565b82511580156124e257506020830151155b156124f7578151815260209182015191015250565b6124ff6137f3565b8351815260208085015181830152835160408301528301518160035b6020020152600060408360808460065afa9050806124a157600080fd5b81516020808401516040516000928101929092526024820183905260448201526064810183905260840160408051808303601f1901815291815281516020928301208552848201519051600160e01b928101929092526024820183905260448201526064810183905260840160408051601f1981840301815291905280516020918201209301929092525050565b6125d4828260000151612538565b6115e7828260200151612538565b60408051602081019091526000815281516020808401516040808601519051600160e11b938101939093526024830193909352604482015260e09190911b6001600160e01b03191660648201526000906068016040516020818303038152906040528051906020012090506001836040018181516126609190614602565b63ffffffff1690525060408051602081019091526001600160fd1b0391909116815292915050565b6115e7828260000151612538565b6040805160208101909152600081528385106126b157600080fd5b60006126bd60016115eb565b905060006126cb8588611e23565b90506126d78487611e23565b92506126e38383611551565b82516000036126f157600080fd5b6126fb8382611537565b604080516020810190915260008152845181526127188183611551565b612724611e07886115eb565b61272d81612f22565b90506127398482611537565b505050949350505050565b604080516020810190915260008152600061275f60016115eb565b9050600061276c856115eb565b6040805160208101909152600081528551815290915061278c8184611551565b6127968183611537565b61279f81612f22565b90506127ab8587611e23565b93506127b78484611551565b6127c18482611537565b50505092915050565b60408051602081019091526000815260408051602081019091526000815260006127f460016115eb565b90506128148460c001516040805160208101909152600081529051815290565b61010085018190526128269082611583565b61010084015160408051602081019091526000815290518152610120850181905260e08501516128569190611537565b6101a08501516040805160208101909152600081529051815291506128888460c001518361153790919063ffffffff16565b610120840151612899908390611583565b6101c08501516128aa908390611537565b60808401516128ba90600661019a565b60006128db600188600001516128d091906145ef565b604089015190611e23565b90506128fc8561018001516040805160208101909152600081529051815290565b6101c0860181905261290e9082611551565b6101c085015161291f908490611537565b6129298484611583565b612943600088600001518960400151886101800151612696565b6101e0860181905260408051602081019091526000815290518152608086015160e00151909350612975908490611537565b61297f8484611551565b60006129a16001896000015161299591906145ef565b61012088015190611e23565b90506129c9600189600001516129b791906145ef565b895160408b01516101808a0151612696565b61020087018190526040805160208101909152600081529051815293506129f08482611537565b60808601516101000151612a05908590611537565b612a0f8585611551565b505050509392505050565b604080516020810190915260008152612a338284611e23565b9050611531612a4260016115eb565b8290611551565b6115e7828284612f61565b60408051808201909152600080825260208201526000612a7460006115eb565b9050612a8c6040518060200160405280600081525090565b60408051602080820183526000918290526101c08801518351918201909352908152905181526080850151612ac2906006611c3f565b6101c0850151612ad3908290611537565b610160860151600090612ae6908361159d565b9050612af285826115dc565b610200870151604080516020810190915260008152905181529150612b248660c001518361153790919063ffffffff16565b6101e0870151612b35908390611583565b610120860151612b46908390611583565b6040805160208101909152600081526000612b6160016115eb565b9050612b796040518060200160405280600081525090565b60005b612b88600160046145ef565b811015612bd657612ba88b60800151826004811061014f5761014f6145c3565b9150612bb48284611537565b612bbe8483611583565b60a08a0151612bce908490611537565b600101612b7c565b506102408a0151604080516020810190915260008152905181529550612bfc8683611537565b612c068387611583565b6102208a0151612c17908490611537565b60e0890151612c27908490611583565b612c318584611537565b610100890151612c42908690611537565b604080516020810190915260008152875181529550612c618686611551565b6080890151869550612c749060066120ca565b6101c0890151612c85908690611537565b6101e08901516040805160208101909152600081529051815260808a0151909650612cb99060075b60200201518790611537565b612cc38587611583565b6102008901516040805160208101909152600081529051815260808a0151909650612cef906008612cad565b612cf98587611583565b6101808a0151612d09908661159d565b9350612d1588856115dc565b5050505050505092915050565b8060200151600003612d3d57805115612d3a57600080fd5b50565b6020810151612d5a9060008051602061464a8339815191526145ef565b602090910152565b612d6a6135e3565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b82527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60208381019190915281019190915290565b60408051600280825260608201909252600091829190816020015b6040805180820190915260008082526020820152815260200190600190039081612e3d5750506040805160028082526060820190925291925060009190602082015b612e876135e3565b815260200190600190039081612e7f5790505090508682600081518110612eb057612eb06145c3565b60200260200101819052508482600181518110612ecf57612ecf6145c3565b60200260200101819052508581600081518110612eee57612eee6145c3565b60200260200101819052508381600181518110612f0d57612f0d6145c3565b6020026020010181905250610106828261300b565b6040805160208101909152600081528151600003612f3f57600080fd5b61153182612f5c600260008051602061466a8339815191526145ef565b611e23565b8151158015612f7257506020820151155b15612f8a578251815260209283015192019190915250565b8251158015612f9b57506020830151155b15612fcb57815181526020820151612fc19060008051602061464a8339815191526145ef565b6020909101525050565b612fd36137f3565b8351815260208085015181830152835160408301528301516130039060008051602061464a8339815191526145ef565b81600361251b565b6000815183511461301b57600080fd5b8251600061302a82600661461f565b90506000816001600160401b0381111561304657613046613aad565b60405190808252806020026020018201604052801561306f578160200160208202803683370190505b50905060005b838110156132a05786818151811061308f5761308f6145c3565b602002602001015160000151828260066130a9919061461f565b6130b4906000614636565b815181106130c4576130c46145c3565b6020026020010181815250508681815181106130e2576130e26145c3565b602002602001015160200151828260066130fc919061461f565b613107906001614636565b81518110613117576131176145c3565b602002602001018181525050858181518110613135576131356145c3565b602090810291909101015151518261314e83600661461f565b613159906002614636565b81518110613169576131696145c3565b602002602001018181525050858181518110613187576131876145c3565b602090810291909101810151510151826131a283600661461f565b6131ad906003614636565b815181106131bd576131bd6145c3565b6020026020010181815250508581815181106131db576131db6145c3565b6020026020010151602001516000600281106131f9576131f96145c3565b60200201518261320a83600661461f565b613215906004614636565b81518110613225576132256145c3565b602002602001018181525050858181518110613243576132436145c3565b602002602001015160200151600160028110613261576132616145c3565b60200201518261327283600661461f565b61327d906005614636565b8151811061328d5761328d6145c3565b6020908102919091010152600101613075565b506132a96137b7565b6000602082602086026020860160085afa9050806132c657600080fd5b505115159695505050505050565b60405180608001604052806132e7613811565b81526020016132f461384b565b8152602001613301613880565b815260200161330e6138aa565b905290565b60405180610160016040528060008152602001600081526020016133436040518060200160405280600081525090565b81526020016133506138cb565b815260200161335d6138f3565b815260200161336a61391e565b815260200161338c604051806040016040528060008152602001600081525090565b815260200161339961391e565b81526020016133bb604051806040016040528060008152602001600081525090565b81526020016133c8613947565b815260200161330e613968565b604051806102a00160405280606081526020016133f061391e565b8152602001613412604051806040016040528060008152602001600081525090565b815260200161341f61391e565b815260200161342c613995565b81526040805180820182526000602080830182815283528085019290925282518084018452918201908152815290820152606001613468613947565b81526020016134836040518060200160405280600081525090565b815260200161349e6040518060200160405280600081525090565b81526020016134b96040518060200160405280600081525090565b81526020016134db604051806040016040528060008152602001600081525090565b81526020016134fd604051806040016040528060008152602001600081525090565b81526020016135186040518060200160405280600081525090565b81526020016135336040518060200160405280600081525090565b815260200161354e6040518060200160405280600081525090565b81526020016135696040518060200160405280600081525090565b81526020016135846040518060200160405280600081525090565b815260200161359f6040518060200160405280600081525090565b81526020016135c1604051806040016040528060008152602001600081525090565b815260200161330e604051806040016040528060008152602001600081525090565b60405180604001604052806135f66139b6565b815260200161330e6139b6565b60408051610280810182526000610260820181815282528251602080820185528282528084019190915283518082018552828152838501528351908101909352825290606082019081526020016136586139d4565b81526020016136736040518060200160405280600081525090565b815260200161368e6040518060200160405280600081525090565b81526020016136a96040518060200160405280600081525090565b81526020016136c46040518060200160405280600081525090565b81526020016136df6040518060200160405280600081525090565b81526020016136fa6040518060200160405280600081525090565b81526020016137156040518060200160405280600081525090565b81526020016137306040518060200160405280600081525090565b815260200161374b6040518060200160405280600081525090565b81526020016137666040518060200160405280600081525090565b81526020016137816040518060200160405280600081525090565b815260200161379c6040518060200160405280600081525090565b81526020016135c16040518060200160405280600081525090565b60405180602001604052806001906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806101a00160405280600d905b60408051808201909152600080825260208201528152602001906001900390816138215790505090565b604051806101a00160405280600d905b60408051602081019091526000815281526020019060019003908161385b5790505090565b604080516101008101909152600060c0820181815260e08301919091528152600560208201613821565b6040805160e08101909152600060c08201908152815260056020820161385b565b6040805160808101825260009181018281526060820192909252908152600160208201613821565b604080516101208101909152600060e082018181526101008301919091528152600660208201613821565b6040805160c0810190915260006080820181815260a08301919091528152600360208201613821565b6040805160808101909152600060608201908152815260026020820161385b565b60405180604001604052806002905b61397f6135e3565b8152602001906001900390816139775790505090565b6040805160a08101909152600060808201908152815260036020820161385b565b60405180604001604052806002906020820280368337509192915050565b60408051610140810190915260006101208201908152815260086020820161385b565b60008083601f840112613a0957600080fd5b5081356001600160401b03811115613a2057600080fd5b6020830191508360208260051b8501011115613a3b57600080fd5b9250929050565b60008060008060408587031215613a5857600080fd5b84356001600160401b0380821115613a6f57600080fd5b613a7b888389016139f7565b90965094506020870135915080821115613a9457600080fd5b50613aa1878288016139f7565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613ae557613ae5613aad565b60405290565b6040516102a081016001600160401b0381118282101715613ae557613ae5613aad565b60405161026081016001600160401b0381118282101715613ae557613ae5613aad565b60405161016081016001600160401b0381118282101715613ae557613ae5613aad565b604051608081016001600160401b0381118282101715613ae557613ae5613aad565b600060208284031215613b8857600080fd5b604051602081018181106001600160401b0382111715613baa57613baa613aad565b6040529135825250919050565b600060408284031215613bc957600080fd5b613bd1613ac3565b9050813581526020820135602082015292915050565b600082601f830112613bf857600080fd5b613c00613ac3565b806080840185811115613c1257600080fd5b845b81811015613c3657613c268782613bb7565b8452602090930192604001613c14565b509095945050505050565b600082601f830112613c5257600080fd5b6040805160e081018181106001600160401b0382111715613c7557613c75613aad565b8252806101c0850186811115613c8a57600080fd5b855b81811015613cad57613c9e8882613bb7565b83526020909201918401613c8c565b50919695505050505050565b600082601f830112613cca57600080fd5b613cd2613b54565b80610100840185811115613ce557600080fd5b845b81811015613c3657613cf98782613bb7565b8452602090930192604001613ce7565b600082601f830112613d1a57600080fd5b604051606081018181106001600160401b0382111715613d3c57613d3c613aad565b604052806060840185811115613d5157600080fd5b845b81811015613d7357613d658782613b76565b835260209283019201613d53565b509195945050505050565b600082601f830112613d8f57600080fd5b613d97613ac3565b806040840185811115613da957600080fd5b845b81811015613c36578035845260209384019301613dab565b600082601f830112613dd457600080fd5b613ddc613ac3565b80610100840185811115613def57600080fd5b845b81811015613c365760808188031215613e0a5760008081fd5b613e12613ac3565b613e1c8883613d7e565b8152613e2b8860408401613d7e565b6020828101919091529085529390930192608001613df1565b600082601f830112613e5557600080fd5b813560206001600160401b0380831115613e7157613e71613aad565b8260051b604051601f19603f83011681018181108482111715613e9657613e96613aad565b604052938452858101830193838101925087851115613eb457600080fd5b83870191505b8482101561010657813583529183019190830190613eba565b600082601f830112613ee457600080fd5b613eec613b54565b806080840185811115613efe57600080fd5b845b81811015613c3657613f128782613b76565b845260209384019301613f00565b600082601f830112613f3157600080fd5b60405160208082018281106001600160401b0382111715613f5457613f54613aad565b6040528184820186811115613f6857600080fd5b855b81811015613f8957613f7c8882613b76565b8352918301918301613f6a565b50929695505050505050565b60006105a08284031215613fa857600080fd5b613fb0613aeb565b905081356001600160401b03811115613fc857600080fd5b613fd484828501613e44565b825250613fe48360208401613cb9565b6020820152610120613ff884828501613bb7565b604083015261016061400c85828601613cb9565b606084015261026061402086828701613ed3565b6080850152614033866102e08701613f20565b60a0850152614046866103008701613f20565b60c0850152614059866103208701613d09565b60e085015261406c866103808701613b76565b610100850152614080866103a08701613b76565b83850152614092866103c08701613b76565b6101408501526140a6866103e08701613bb7565b828501526140b8866104208701613bb7565b6101808501526140cc866104608701613b76565b6101a08501526140e0866104808701613b76565b6101c08501526140f4866104a08701613b76565b6101e0850152614108866104c08701613b76565b61020085015261411c866104e08701613b76565b610220850152614130866105008701613b76565b610240850152614144866105208701613bb7565b81850152505050614159836105608401613bb7565b61028082015292915050565b600082601f83011261417657600080fd5b6040516101208082018281106001600160401b038211171561419a5761419a613aad565b604052830181858211156141ad57600080fd5b845b82811015613d73576141c18782613b76565b8252602091820191016141af565b600061038082840312156141e257600080fd5b6141ea613b0e565b90506141f68383613b76565b81526142058360208401613b76565b60208201526142178360408401613b76565b60408201526142298360608401613b76565b606082015261423b8360808401614165565b60808201526101a061424f84828501613b76565b60a08301526101c061426385828601613b76565b60c08401526101e061427786828701613b76565b60e085015261020061428b87828801613b76565b6101008601526102206142a088828901613b76565b6101208701526102406142b589828a01613b76565b6101408801526142c9896102608a01613b76565b6101608801526142dd896102808a01613b76565b6101808801526142f1896102a08a01613b76565b86880152614303896102c08a01613b76565b85880152614315896102e08a01613b76565b84880152614327896103008a01613b76565b83880152614339896103208a01613b76565b8288015261434b896103408a01613bb7565b8188015250505050505092915050565b6000806000838503610a2081121561437257600080fd5b6106808082121561438257600080fd5b61438a613b31565b915085358252602086013560208301526143a78760408801613b76565b60408301526143b98760608801613be7565b60608301526143cb8760e08801613c41565b60808301526143de876102a08801613cb9565b60a08301526143f1876103a08801613bb7565b60c0830152614404876103e08801613cb9565b60e0830152614417876104e08801613bb7565b61010083015261442b876105208801613d09565b61012083015261443f876105808801613dc3565b6101408301529093508401356001600160401b0381111561445f57600080fd5b61446b86828701613f95565b92505061447c856106a086016141cf565b90509250925092565b815181526020808301519082015260408101611531565b8060005b60068110156144d4576144be84835180518252602090810151910152565b60409390930192602091909101906001016144a0565b50505050565b8060005b60068110156144d4578151518452602093840193909101906001016144de565b81516107208201908260005b600d81101561453e5761452882845180518252602090810151910152565b602092909201916040919091019060010161450a565b505050602080840151610340840160005b600d81101561456d578251518252918301919083019060010161454f565b5050505060408301516145846104e084018261449c565b5060608301516145986106608401826144da565b5092915050565b600061038082840312156145b257600080fd5b6145bc83836141cf565b9392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115611531576115316145d9565b63ffffffff818116838216019080821115614598576145986145d9565b8082028115828204841417611531576115316145d9565b80820180821115611531576115316145d956fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a2646970667358221220525eba758bf7c42a7d1cf6a05eb2cf3dd25b2caf7bb388aee220ed13d5aa7c8f64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x46BF DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x330DEB9F EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x38FDAD14 EQ PUSH2 0x79 JUMPI DUP1 PUSH4 0x97E2957D EQ PUSH2 0x99 JUMPI DUP1 PUSH4 0xFEC4E96E EQ PUSH2 0xB9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x3A42 JUMP JUMPDEST PUSH2 0xCE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x8C PUSH2 0x87 CALLDATASIZE PUSH1 0x4 PUSH2 0x435B JUMP JUMPDEST PUSH2 0x111 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x70 SWAP2 SWAP1 PUSH2 0x4485 JUMP JUMPDEST PUSH2 0xAC PUSH2 0xA7 CALLDATASIZE PUSH1 0x4 PUSH2 0x435B JUMP JUMPDEST PUSH2 0x266 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x70 SWAP2 SWAP1 PUSH2 0x44FE JUMP JUMPDEST PUSH2 0xCC PUSH2 0xC7 CALLDATASIZE PUSH1 0x4 PUSH2 0x459F JUMP JUMPDEST PUSH2 0x5CA JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xD9 PUSH2 0x678 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD SWAP1 SWAP2 POP DUP6 EQ PUSH2 0xEC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xFA DUP8 DUP8 DUP8 DUP8 PUSH2 0xE07 JUMP JUMPDEST SWAP1 POP PUSH2 0x106 DUP2 DUP4 PUSH2 0x1252 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x16A SWAP1 PUSH1 0x0 JUMPDEST PUSH1 0x20 MUL ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP2 POP PUSH2 0x176 DUP3 DUP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x18E SWAP1 PUSH1 0x1 JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 SWAP1 PUSH2 0x1551 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x1A6 SWAP1 PUSH1 0x1 JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x1B0 DUP2 DUP4 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x1C0 SWAP1 PUSH1 0x1 PUSH2 0x14F JUMP JUMPDEST SWAP2 POP PUSH2 0x1CC DUP3 DUP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x1DC SWAP1 PUSH1 0x2 PUSH2 0x182 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x1EC SWAP1 PUSH1 0x2 PUSH2 0x19A JUMP JUMPDEST PUSH2 0x1F6 DUP2 DUP4 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x206 SWAP1 PUSH1 0x2 PUSH2 0x14F JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x219 SWAP1 PUSH1 0x0 PUSH2 0x19A JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x229 SWAP1 PUSH1 0x3 PUSH2 0x182 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x239 SWAP1 PUSH1 0x3 PUSH2 0x19A JUMP JUMPDEST PUSH2 0x243 DUP2 DUP4 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD PUSH2 0x25C SWAP1 DUP3 SWAP1 PUSH1 0x1 JUMPDEST PUSH1 0x20 MUL ADD MLOAD SWAP1 PUSH2 0x159D JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x26E PUSH2 0x32D4 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x2F1 JUMPI DUP5 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0x4 DUP2 LT PUSH2 0x292 JUMPI PUSH2 0x292 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 MLOAD DUP4 PUSH1 0xD DUP2 LT PUSH2 0x2AA JUMPI PUSH2 0x2AA PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x80 DUP6 ADD MLOAD DUP2 PUSH1 0x4 DUP2 LT PUSH2 0x2C5 JUMPI PUSH2 0x2C5 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0xD DUP2 LT PUSH2 0x2E0 JUMPI PUSH2 0x2E0 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x273 JUMP JUMPDEST POP PUSH1 0x60 DUP6 ADD MLOAD MLOAD DUP3 MLOAD DUP3 PUSH1 0xD DUP2 LT PUSH2 0x30B JUMPI PUSH2 0x30B PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x0 PUSH1 0x20 MUL ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0xD DUP2 LT PUSH2 0x332 JUMPI PUSH2 0x332 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 ADD PUSH1 0x0 JUMPDEST PUSH2 0x349 PUSH1 0x1 PUSH1 0x4 PUSH2 0x45EF JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x3C5 JUMPI DUP6 PUSH1 0xA0 ADD MLOAD DUP2 PUSH1 0x4 DUP2 LT PUSH2 0x366 JUMPI PUSH2 0x366 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 MLOAD DUP4 PUSH1 0xD DUP2 LT PUSH2 0x37E JUMPI PUSH2 0x37E PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0xE0 DUP6 ADD MLOAD DUP2 PUSH1 0x3 DUP2 LT PUSH2 0x399 JUMPI PUSH2 0x399 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0xD DUP2 LT PUSH2 0x3B4 JUMPI PUSH2 0x3B4 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x33D JUMP JUMPDEST POP PUSH1 0x40 DUP5 DUP2 ADD MLOAD SWAP1 DUP4 ADD MLOAD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x3E2 PUSH1 0x1 PUSH1 0x4 PUSH2 0x45EF JUMP JUMPDEST PUSH1 0x4 DUP2 LT PUSH2 0x3F2 JUMPI PUSH2 0x3F2 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD DUP3 ADD MSTORE PUSH2 0x100 DUP6 ADD MLOAD PUSH1 0x60 DUP5 ADD DUP1 MLOAD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP1 DUP8 ADD MLOAD MLOAD SWAP2 MLOAD SWAP1 SWAP3 ADD MSTORE PUSH1 0xE0 DUP7 ADD MLOAD MLOAD SWAP1 DUP5 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x448 SWAP1 PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x49B JUMPI PUSH2 0x470 DUP3 DUP10 PUSH1 0xE0 ADD MLOAD DUP4 PUSH1 0x4 DUP2 LT PUSH2 0x251 JUMPI PUSH2 0x251 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x240 DUP8 ADD DUP2 SWAP1 MSTORE PUSH2 0x483 SWAP1 DUP5 SWAP1 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MLOAD PUSH2 0x493 SWAP1 DUP4 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x44D JUMP JUMPDEST POP DUP4 MLOAD DUP3 SWAP1 DUP5 PUSH1 0xD DUP2 LT PUSH2 0x4B1 JUMPI PUSH2 0x4B1 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD DUP2 SWAP1 MSTORE POP DUP6 PUSH2 0x1E0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0xD DUP2 LT PUSH2 0x4D5 JUMPI PUSH2 0x4D5 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0xC0 DUP8 ADD MLOAD DUP5 MLOAD PUSH1 0x1 SWAP5 SWAP1 SWAP5 ADD SWAP4 DUP5 PUSH1 0xD DUP2 LT PUSH2 0x4F9 JUMPI PUSH2 0x4F9 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD DUP2 SWAP1 MSTORE POP DUP6 PUSH2 0x220 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0xD DUP2 LT PUSH2 0x51D JUMPI PUSH2 0x51D PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH2 0x100 DUP8 ADD MLOAD DUP5 MLOAD PUSH1 0x1 SWAP5 SWAP1 SWAP5 ADD SWAP4 DUP5 PUSH1 0xD DUP2 LT PUSH2 0x542 JUMPI PUSH2 0x542 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD DUP2 SWAP1 MSTORE POP DUP6 PUSH2 0x240 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0xD DUP2 LT PUSH2 0x566 JUMPI PUSH2 0x566 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE POP PUSH2 0x160 DUP6 ADD MLOAD PUSH1 0x40 DUP5 DUP2 ADD DUP1 MLOAD DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x1A0 DUP8 ADD MLOAD PUSH1 0x60 DUP1 DUP8 ADD DUP1 MLOAD SWAP1 SWAP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 DUP9 ADD MLOAD DUP4 MLOAD DUP3 ADD MSTORE PUSH2 0x1C0 DUP9 ADD MLOAD DUP3 MLOAD SWAP1 SWAP2 ADD MSTORE SWAP1 MLOAD PUSH1 0x80 SWAP1 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x200 SWAP1 SWAP6 ADD MLOAD SWAP5 MLOAD ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD MLOAD PUSH1 0x0 SUB PUSH2 0x5DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5E6 PUSH1 0x1 PUSH2 0x15EB JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP1 MLOAD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP1 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP6 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE SWAP3 MLOAD DUP2 MSTORE SWAP5 MLOAD DUP5 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP1 MLOAD DUP4 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP4 MSTORE DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE PUSH1 0x2 JUMPDEST PUSH1 0x9 DUP2 LT ISZERO PUSH2 0x673 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x63D SWAP1 DUP4 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP3 MLOAD DUP2 MSTORE DUP4 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x9 DUP2 LT PUSH2 0x666 JUMPI PUSH2 0x666 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 ADD PUSH2 0x624 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x680 PUSH2 0x3313 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x100 DUP2 MSTORE PUSH2 0x6B5 PUSH32 0x1058A83D529BE585820B96FF0A13F2DBD8675A9E5DD2336A6692CC1E5A526C81 PUSH2 0x15EB JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x704 PUSH32 0x5F5CABC4EAB14CFABEE1334EF7F33A66259CC9FD07AF862308D5C41765ADB4B PUSH32 0x128A103FBE66C8FF697182C0963D963208B55A5A53DDEAB9B4BC09DC2A68A9CC PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MLOAD MSTORE PUSH2 0x754 PUSH32 0xD9980170C334C107E6CE4D66BBC4D23BBCDC97C020B1E1C3F6E04C6C663D2C2 PUSH32 0x968205845091CEAF3F863B1613FBDF7CE9A87CCFD97F22011679E6350384419 PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE PUSH2 0x7A7 PUSH32 0xC84A19B149A1612CB042AD86382B9E94367C0ADD60D07E12399999E7DB09EFE PUSH32 0x1E02F70C44C9BFB7BF2164CEE2AB4813BCB9BE56EB432E2E9DFFFFFE196D846D PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x40 ADD MSTORE PUSH2 0x7FA PUSH32 0x1EB3599506A41A7D62E1F7438D6732FBB9D1EDA7B9C7A0213ECA63C9334AC5A9 PUSH32 0x23563D9F429908D8EA80BFFA642840FB081936D45B388BAFC504D9B1E5B1C410 PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x60 ADD MSTORE PUSH2 0x80F PUSH1 0x0 PUSH1 0x1 PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x80 DUP3 DUP2 ADD MLOAD ADD MSTORE PUSH2 0x861 PUSH32 0x63E8DAC7EE3EE6A4569FD53B416FE17F8F10DE8C435C336E5A1CF2E02643200 PUSH32 0x1D4C1781B78F926D55F89EF72ABB96BEE350CE60DDC684F5A02D87C5F4CDF943 PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0xA0 ADD MSTORE PUSH2 0x876 PUSH1 0x0 PUSH1 0x1 PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0xC0 ADD MSTORE PUSH2 0x8C9 PUSH32 0xB487EB34C8480EA506F5C6C25857155D61D7F9824B60BC80E1A415A5BCF247F PUSH32 0x7EA0D0D0DF9DBCC944E9341A5BB49AE796D9DC9D7CA1C032B53784715B946DB PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MLOAD MSTORE PUSH2 0x919 PUSH32 0xFA66FAA0B9EA782EB400175AC9F0C05F0DE64332EEC54A87CD20DB4540BAEC2 PUSH32 0x7DEA33D314C690C4BD4B21DEDA1A44B9F8DD87E539024622768C2F8B8BDABE1 PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE PUSH2 0x96C PUSH32 0x120482C52E31D2373F9B2DC80A47E68F035E278D220FA8A89D0C81F133343953 PUSH32 0x2928A78EA2E1A943E9220B7E288FD48A561263F8E5F94518F21AAA43781CEAC PUSH2 0x1626 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MLOAD MSTORE PUSH2 0x9BC PUSH32 0x1DFAD2C4D60704BCF6AF0ABD9CCE09151F063C4B52200C268E470C6A6C93CBCA PUSH32 0x8B28DD6CA14D7C33E078FE0F332A9A4D95AC8DF171355DE9E69930AEC02B5DC PUSH2 0x1626 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE PUSH2 0xA0F PUSH32 0x935A4FD6AB67925929661CF2D2E814F87F589EE6234CB9675ECC2D897F1B338 PUSH32 0x1032CCC41C047413FCE4A847BA7E51E4A2EA406D89A88D480C5F0EFAF6C8C89A PUSH2 0x1626 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x40 ADD MSTORE PUSH2 0xA62 PUSH32 0xEAFAEA3AF7D1FADB2138DB1B991AF5D2218F6892714FD019898C7E1A43ECFE8 PUSH32 0x28FB17EDA285ED74CC9771D62FAD22AB459BBB0A4968C489972ACA8B7E618FCB PUSH2 0x1626 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x60 ADD MSTORE PUSH2 0xAB5 PUSH32 0x155201A564E721B1F5C06315AD4E24EAAD3CBDD6197B19CD903FE85613080F86 PUSH32 0x12FB201BC896572AC14357E2601F5118636F1EEB7B89C177AC940AAC3B5253EC PUSH2 0x1626 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0xB04 PUSH32 0x1CB0E2AE4D52743898D94D7F1729BD0D3357BA035CDB6B3AF7EBFF9159F8F297 PUSH32 0x15EE595227C9E0F7A487DDB8072D5EA3CFD058BC569211C3546BC0E80051553F PUSH2 0x1626 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MLOAD MSTORE PUSH2 0xB54 PUSH32 0x13E4AB94C03A5A29719930C1361D854E244CF918F1E29CB031303F4A13B71977 PUSH32 0xF792EF4C6C8746C97BE61ED9B20F31BA2DEC3BD5C91A2D9A4A586F19AF3A07C PUSH2 0x1626 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE PUSH2 0xBA7 PUSH32 0x1C9E69BD2B04240EBE44FB23D67C596FCE4A1336109FDCE38C2F184A63CD8ACC PUSH32 0x1CBD3E72BDBCE827227E503690B10BE9365AE760E9D2BABDE5BA81EDF12F8206 PUSH2 0x1626 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MLOAD PUSH1 0x40 ADD MSTORE PUSH2 0xBFA PUSH32 0x2A0D46339FBF72104DF6A241B53A957602B1A16F6E3B9F89BF3E4C4645DF823C PUSH32 0x11A601D7B2EEE4B7885F34C9873426BA1263F38EAE2E0351D653B8B1BA9C67F6 PUSH2 0x1626 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MLOAD PUSH1 0x60 ADD MSTORE PUSH2 0xC4D PUSH32 0x1A70E43F18B18D686807C2B1C6471CD949DD251B48090BCA443D86B97AFAE951 PUSH32 0xE6E23AD15A1BD851B228788AE4A03BF25BDA39EDE6D5A92D501A8402A0DFE43 PUSH2 0x1626 JUMP JUMPDEST PUSH2 0x100 DUP3 ADD MSTORE PUSH2 0xC5D PUSH1 0x5 PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD MSTORE PUSH2 0xC6E PUSH1 0x7 PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE PUSH2 0xC82 PUSH1 0xA PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD PUSH1 0x2 PUSH1 0x20 MUL ADD DUP2 SWAP1 MSTORE POP PUSH2 0xD44 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA DUP2 MSTORE POP PUSH2 0x1651 JUMP JUMPDEST PUSH2 0x140 DUP3 ADD MLOAD MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH32 0x260E01B251F6F1C7E7FF4E580791DEE8EA51D87A358E038B4EFE30FAC09383C1 DUP2 MSTORE PUSH32 0x118C4D5B837BCC2BC89B5B398B5974E9F5944073B32078B7E231FEC938883B0 PUSH1 0x20 DUP3 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH32 0x4FC6369F7110FE3D25156C1BB9A72859CF2A04641F99BA4EE413C80DA6A5FE4 DUP4 MSTORE PUSH32 0x22FEBDA3C0C0632A56475B4214E5615E11E6DD3F96E6CEA2854A87D4DACC5E55 SWAP1 DUP4 ADD MSTORE PUSH2 0xDFA SWAP2 PUSH2 0x1651 JUMP JUMPDEST PUSH2 0x140 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0xE0F PUSH2 0x33D5 JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0xE27 JUMPI PUSH2 0xE27 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE50 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP DUP2 MSTORE PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0xEA0 JUMPI DUP6 DUP6 DUP3 DUP2 DUP2 LT PUSH2 0xE70 JUMPI PUSH2 0xE70 PUSH2 0x45C3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP3 PUSH1 0x0 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xE8D JUMPI PUSH2 0xE8D PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0xE56 JUMP JUMPDEST POP PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0xF1A JUMPI PUSH2 0xEF1 DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0xEC3 JUMPI PUSH2 0xEC3 PUSH2 0x45C3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP7 DUP7 PUSH2 0xED6 DUP7 PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST DUP2 DUP2 LT PUSH2 0xEE5 JUMPI PUSH2 0xEE5 PUSH2 0x45C3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH2 0x1659 JUMP JUMPDEST DUP4 PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0xF07 JUMPI PUSH2 0xF07 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x2 DUP3 ADD SWAP2 POP PUSH1 0x1 ADD PUSH2 0xEA5 JUMP JUMPDEST POP PUSH2 0xF43 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xF30 JUMPI PUSH2 0xF30 PUSH2 0x45C3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP6 DUP6 PUSH2 0xED6 DUP6 PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x2 ADD PUSH2 0xF60 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xF30 JUMPI PUSH2 0xF30 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE PUSH1 0x2 ADD PUSH2 0xF7E DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xF30 JUMPI PUSH2 0xF30 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x2 ADD PUSH1 0x0 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0xFD1 JUMPI PUSH2 0xFA8 DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0xEC3 JUMPI PUSH2 0xEC3 PUSH2 0x45C3 JUMP JUMPDEST DUP4 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0xFBE JUMPI PUSH2 0xFBE PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x2 DUP3 ADD SWAP2 POP PUSH1 0x1 ADD PUSH2 0xF8A JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x1026 JUMPI PUSH2 0xFFF DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH2 0x15EB JUMP JUMPDEST DUP4 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0x1015 JUMPI PUSH2 0x1015 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xFD5 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x106F JUMPI PUSH2 0x1048 DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST DUP4 PUSH1 0xA0 ADD MLOAD DUP3 PUSH1 0x1 DUP2 LT PUSH2 0x105E JUMPI PUSH2 0x105E PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x102A JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x10B8 JUMPI PUSH2 0x1091 DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST DUP4 PUSH1 0xC0 ADD MLOAD DUP3 PUSH1 0x1 DUP2 LT PUSH2 0x10A7 JUMPI PUSH2 0x10A7 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1073 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH1 0x3 DUP2 LT ISZERO PUSH2 0x1101 JUMPI PUSH2 0x10DA DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST DUP4 PUSH1 0xE0 ADD MLOAD DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x10F0 JUMPI PUSH2 0x10F0 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x10BC JUMP JUMPDEST POP PUSH2 0x1117 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1135 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x1A0 DUP4 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1153 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x1C0 DUP4 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1171 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x1E0 DUP4 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x118F DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x200 DUP4 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x11AD DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x220 DUP4 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x11CB DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x11E9 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1207 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1225 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xF30 JUMPI PUSH2 0xF30 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x260 DUP4 ADD MSTORE PUSH1 0x2 ADD PUSH2 0x1243 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xF30 JUMPI PUSH2 0xF30 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x280 DUP4 ADD MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x125F DUP5 DUP5 PUSH2 0x17F1 JUMP JUMPDEST SWAP1 POP PUSH2 0x126C DUP4 DUP6 DUP4 PUSH2 0x1B2A JUMP JUMPDEST ISZERO ISZERO PUSH1 0x0 SUB PUSH2 0x127F JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x1531 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x12B8 SWAP1 DUP3 JUMPDEST PUSH1 0x20 MUL ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE DUP4 MLOAD DUP4 MSTORE SWAP3 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST DUP5 MLOAD PUSH2 0x180 DUP5 ADD MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH2 0x12CF SWAP2 PUSH2 0x1E23 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 DUP1 DUP4 MSTORE DUP5 MLOAD DUP4 MSTORE DUP4 MLOAD DUP1 DUP6 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE SWAP1 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x1 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x1342 JUMPI PUSH2 0x131A DUP10 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0x128D JUMPI PUSH2 0x128D PUSH2 0x45C3 JUMP JUMPDEST SWAP2 POP PUSH2 0x1326 DUP3 DUP5 PUSH2 0x1EA2 JUMP JUMPDEST PUSH2 0x1330 DUP6 DUP4 PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x133A DUP4 DUP6 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x12F8 JUMP JUMPDEST POP POP POP POP PUSH1 0x0 PUSH2 0x1353 DUP6 DUP8 DUP6 PUSH2 0x266 JUMP JUMPDEST DUP1 MLOAD DUP4 SWAP1 MSTORE PUSH2 0x120 DUP8 ADD MLOAD PUSH1 0x20 DUP3 ADD MLOAD MSTORE SWAP1 POP PUSH2 0x1371 DUP6 DUP8 DUP6 PUSH2 0x1EAD JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x140 DUP8 ADD MLOAD DUP2 DUP4 ADD DUP1 MLOAD SWAP1 SWAP3 ADD MSTORE DUP2 MLOAD MLOAD SWAP1 MLOAD MLOAD PUSH1 0x0 PUSH2 0x139D PUSH1 0x1 PUSH2 0x15EB JUMP JUMPDEST SWAP1 POP PUSH2 0x13BC PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xD DUP2 LT ISZERO PUSH2 0x1445 JUMPI PUSH2 0x140 DUP9 ADD MLOAD PUSH2 0x13D9 SWAP1 DUP5 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x13F3 DUP4 DUP8 PUSH1 0x0 ADD MLOAD DUP4 PUSH1 0xD DUP2 LT PUSH2 0x251 JUMPI PUSH2 0x251 PUSH2 0x45C3 JUMP JUMPDEST SWAP2 POP PUSH2 0x13FF DUP6 DUP4 PUSH2 0x15DC JUMP JUMPDEST DUP6 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xD DUP2 LT PUSH2 0x1415 JUMPI PUSH2 0x1415 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD PUSH2 0x220 DUP10 ADD DUP2 SWAP1 MSTORE PUSH2 0x142C SWAP1 DUP5 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x220 DUP9 ADD MLOAD PUSH2 0x143D SWAP1 DUP6 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x13BF JUMP JUMPDEST POP PUSH2 0x140 DUP8 ADD MLOAD PUSH2 0x1457 SWAP1 DUP4 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1474 DUP4 DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x0 PUSH1 0x6 DUP2 LT PUSH2 0x251 JUMPI PUSH2 0x251 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MLOAD MLOAD SWAP1 SWAP2 POP PUSH2 0x1487 DUP2 DUP6 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0x6 DUP2 LT ISZERO PUSH2 0x1510 JUMPI PUSH2 0x140 DUP11 ADD MLOAD PUSH2 0x14A4 SWAP1 DUP7 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x14BE DUP6 DUP10 PUSH1 0x40 ADD MLOAD DUP4 PUSH1 0x6 DUP2 LT PUSH2 0x251 JUMPI PUSH2 0x251 PUSH2 0x45C3 JUMP JUMPDEST SWAP4 POP PUSH2 0x14CA DUP4 DUP6 PUSH2 0x15DC JUMP JUMPDEST DUP8 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x6 DUP2 LT PUSH2 0x14E0 JUMPI PUSH2 0x14E0 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD PUSH2 0x220 DUP12 ADD DUP2 SWAP1 MSTORE PUSH2 0x14F7 SWAP1 DUP7 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x220 DUP11 ADD MLOAD PUSH2 0x1508 SWAP1 DUP4 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x148A JUMP JUMPDEST POP PUSH2 0x1525 DUP12 PUSH2 0x140 ADD MLOAD DUP14 DUP12 DUP10 DUP7 DUP11 DUP8 PUSH2 0x22BE JUMP JUMPDEST SWAP10 POP POP POP POP POP POP POP POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x466A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MLOAD DUP4 MLOAD MULMOD SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x466A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MLOAD PUSH2 0x157A SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x466A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH2 0x45EF JUMP JUMPDEST DUP4 MLOAD ADDMOD SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x466A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MLOAD DUP4 MLOAD ADDMOD SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP3 MLOAD ISZERO DUP1 ISZERO PUSH2 0x15C4 JUMPI POP DUP3 PUSH1 0x20 ADD MLOAD PUSH1 0x1 EQ JUMPDEST ISZERO PUSH2 0x15D1 JUMPI PUSH1 0x0 PUSH1 0x20 DUP5 ADD MSTORE JUMPDEST PUSH2 0x1531 DUP4 DUP4 DUP4 PUSH2 0x2466 JUMP JUMPDEST PUSH2 0x15E7 DUP3 DUP3 DUP5 PUSH2 0x24A8 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x466A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 LT PUSH2 0x1614 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE SWAP1 DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x163B PUSH2 0x35E3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP3 ISZERO DUP1 ISZERO PUSH2 0x1679 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x169A JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE POP SWAP1 POP PUSH2 0x1531 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x464A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP4 LT PUSH2 0x16F1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x1E08185E1A5CC81A5CDB89DD081D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x464A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 LT PUSH2 0x1743 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x1E48185E1A5CC81A5CDB89DD081D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x16E8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x464A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP4 DUP5 MULMOD SWAP1 POP PUSH1 0x0 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x464A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 DUP7 MULMOD SWAP1 POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x464A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 DUP3 MULMOD SWAP1 POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x464A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x3 DUP3 ADDMOD SWAP1 POP DUP1 DUP3 EQ PUSH2 0x17D9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x6973206E6F74206F6E206375727665 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x16E8 JUMP JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE SWAP3 DUP4 MSTORE POP PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x17F9 PUSH2 0x3603 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 JUMPDEST DUP4 PUSH1 0x20 ADD MLOAD DUP2 LT ISZERO PUSH2 0x185B JUMPI PUSH2 0x1853 DUP6 PUSH1 0x0 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x183C JUMPI PUSH2 0x183C PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x2538 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1817 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x1895 JUMPI PUSH2 0x188D DUP6 PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0x1881 JUMPI PUSH2 0x1881 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 SWAP1 PUSH2 0x25C6 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x185F JUMP JUMPDEST POP PUSH2 0x189F DUP2 PUSH2 0x25E2 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x160 DUP5 ADD MLOAD PUSH2 0x18B5 SWAP1 DUP3 SWAP1 PUSH2 0x25C6 JUMP JUMPDEST PUSH2 0x18BE DUP2 PUSH2 0x25E2 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x18CC DUP2 PUSH2 0x25E2 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x18E1 SWAP1 DUP3 SWAP1 PUSH2 0x25C6 JUMP JUMPDEST PUSH2 0x18EA DUP2 PUSH2 0x25E2 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x18F8 DUP2 PUSH2 0x25E2 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x180 DUP5 ADD MLOAD PUSH2 0x190E SWAP1 DUP3 SWAP1 PUSH2 0x25C6 JUMP JUMPDEST PUSH2 0x1917 DUP2 PUSH2 0x25E2 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x0 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x1949 JUMPI PUSH2 0x1941 DUP6 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0x1881 JUMPI PUSH2 0x1881 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x191F JUMP JUMPDEST POP PUSH2 0x1953 DUP2 PUSH2 0x25E2 JUMP JUMPDEST PUSH2 0x180 DUP4 ADD MSTORE PUSH2 0x120 DUP5 ADD MLOAD PUSH2 0x196A SWAP1 DUP3 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x19A3 JUMPI PUSH2 0x199B DUP6 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0x198F JUMPI PUSH2 0x198F PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x196D JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x19D1 JUMPI PUSH2 0x19C9 DUP6 PUSH1 0xA0 ADD MLOAD DUP3 PUSH1 0x1 DUP2 LT PUSH2 0x198F JUMPI PUSH2 0x198F PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x19A7 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x19FF JUMPI PUSH2 0x19F7 DUP6 PUSH1 0xC0 ADD MLOAD DUP3 PUSH1 0x1 DUP2 LT PUSH2 0x198F JUMPI PUSH2 0x198F PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x19D5 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH1 0x3 DUP2 LT ISZERO PUSH2 0x1A2D JUMPI PUSH2 0x1A25 DUP6 PUSH1 0xE0 ADD MLOAD DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x198F JUMPI PUSH2 0x198F PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1A03 JUMP JUMPDEST POP PUSH2 0x180 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP2 MLOAD DUP3 MSTORE PUSH2 0x1A0 DUP5 ADD DUP3 SWAP1 MSTORE DUP5 ADD MLOAD PUSH2 0x1A5B SWAP2 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x100 DUP5 ADD MLOAD PUSH2 0x1A6C SWAP1 DUP3 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH2 0x1E0 DUP5 ADD MLOAD PUSH2 0x1A7D SWAP1 DUP3 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH2 0x220 DUP5 ADD MLOAD PUSH2 0x1A8E SWAP1 DUP3 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x1A9F SWAP1 DUP3 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH2 0x1A0 DUP5 ADD MLOAD PUSH2 0x1AB0 SWAP1 DUP3 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH2 0x1C0 DUP5 ADD MLOAD PUSH2 0x1AC1 SWAP1 DUP3 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH2 0x200 DUP5 ADD MLOAD PUSH2 0x1AD2 SWAP1 DUP3 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x1AE3 SWAP1 DUP3 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH2 0x1AEC DUP2 PUSH2 0x25E2 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x260 DUP5 ADD MLOAD PUSH2 0x1B03 SWAP1 DUP3 SWAP1 PUSH2 0x25C6 JUMP JUMPDEST PUSH2 0x280 DUP5 ADD MLOAD PUSH2 0x1B14 SWAP1 DUP3 SWAP1 PUSH2 0x25C6 JUMP JUMPDEST PUSH2 0x1B1D DUP2 PUSH2 0x25E2 JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x1B49 JUMPI PUSH2 0x1B49 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1B72 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x1BA7 JUMPI DUP1 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1B94 JUMPI PUSH2 0x1B94 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1B78 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1BB4 PUSH1 0x0 PUSH2 0x15EB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP7 PUSH1 0x20 ADD MLOAD DUP2 LT ISZERO PUSH2 0x1C32 JUMPI PUSH2 0x1BDE DUP2 DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x40 ADD MLOAD DUP9 PUSH2 0x180 ADD MLOAD PUSH2 0x2696 JUMP JUMPDEST PUSH2 0x220 DUP7 ADD MSTORE DUP6 MLOAD DUP1 MLOAD PUSH2 0x1C19 SWAP2 PUSH2 0x1C0D SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x1C00 JUMPI PUSH2 0x1C00 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x220 DUP8 ADD MLOAD SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x220 DUP6 ADD MLOAD PUSH2 0x1C2A SWAP1 DUP4 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1BB9 JUMP JUMPDEST POP PUSH1 0xC0 DUP6 ADD MLOAD PUSH2 0x1C4B SWAP1 PUSH1 0x0 JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP3 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE PUSH2 0x1C6E DUP2 DUP4 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x1C77 DUP6 PUSH2 0x5CA JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x1C8A SWAP1 PUSH1 0x4 PUSH2 0x14F JUMP JUMPDEST SWAP1 POP PUSH2 0x1CA4 DUP8 PUSH2 0x100 ADD MLOAD DUP3 PUSH2 0x1537 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x1CB0 PUSH1 0x1 PUSH1 0x4 PUSH2 0x45EF JUMP JUMPDEST PUSH1 0x3 EQ PUSH2 0x1CBC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x0 JUMPDEST PUSH1 0x3 DUP2 LT ISZERO PUSH2 0x1D50 JUMPI PUSH2 0x1CF0 DUP10 PUSH1 0xE0 ADD MLOAD DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x14F JUMPI PUSH2 0x14F PUSH2 0x45C3 JUMP JUMPDEST SWAP2 POP PUSH2 0x1D09 DUP9 PUSH1 0x40 ADD MLOAD DUP4 PUSH2 0x1537 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x1D2E DUP10 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0x1D22 JUMPI PUSH2 0x1D22 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x1D3E SWAP1 DUP4 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x1D48 DUP4 DUP4 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1CCE JUMP JUMPDEST POP PUSH1 0x80 DUP9 ADD MLOAD PUSH2 0x1D61 SWAP1 PUSH1 0x3 PUSH2 0x14F JUMP JUMPDEST SWAP1 POP PUSH2 0x1D7A DUP8 PUSH1 0x60 ADD MLOAD DUP3 PUSH2 0x1583 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x1D84 DUP3 DUP3 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x1D8E DUP4 DUP4 PUSH2 0x1551 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DA3 DUP11 PUSH1 0x0 ADD MLOAD DUP10 PUSH2 0x180 ADD MLOAD PUSH2 0x2744 JUMP JUMPDEST PUSH1 0x80 DUP10 ADD MLOAD SWAP1 SWAP2 POP PUSH2 0x1DB6 SWAP1 PUSH1 0x5 PUSH2 0x1C3F JUMP JUMPDEST PUSH2 0x1DC0 DUP5 DUP3 PUSH2 0x1551 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DCD DUP12 DUP12 DUP12 PUSH2 0x27CA JUMP JUMPDEST SWAP1 POP PUSH2 0x1DD9 DUP6 DUP3 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x120 DUP11 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE DUP12 MLOAD PUSH2 0x180 DUP12 ADD MLOAD PUSH2 0x1E0E SWAP2 PUSH2 0x1E07 SWAP2 PUSH2 0x2A1A JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1537 JUMP JUMPDEST SWAP5 MLOAD SWAP5 MLOAD SWAP1 SWAP5 EQ SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 DUP3 MSTORE DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 DUP2 MSTORE DUP1 DUP3 ADD DUP3 SWAP1 MSTORE SWAP3 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x466A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0xA0 DUP4 ADD MSTORE SWAP1 PUSH2 0x1E72 PUSH2 0x37B7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 PUSH1 0xC0 DUP6 PUSH1 0x5 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x1E8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x15E7 DUP3 DUP3 DUP5 PUSH2 0x2466 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x1ECC PUSH1 0x0 DUP1 PUSH2 0x1626 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1EFB DUP5 PUSH1 0x80 ADD MLOAD PUSH1 0x0 PUSH1 0x4 DUP2 LT PUSH2 0x1EEA JUMPI PUSH2 0x1EEA PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0x0 PUSH2 0x251 JUMP JUMPDEST SWAP1 POP PUSH2 0x1F07 DUP3 DUP3 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x1F23 SWAP1 PUSH1 0x1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0x1 PUSH2 0x251 JUMP JUMPDEST SWAP1 POP PUSH2 0x1F2F DUP3 DUP3 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x1F4B SWAP1 PUSH1 0x2 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0x2 PUSH2 0x251 JUMP JUMPDEST SWAP1 POP PUSH2 0x1F57 DUP3 DUP3 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x1F73 SWAP1 PUSH1 0x3 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0x3 PUSH2 0x251 JUMP JUMPDEST SWAP1 POP PUSH2 0x1F7F DUP3 DUP3 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x1F91 SWAP1 DUP3 PUSH2 0x14F JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD SWAP1 SWAP2 POP PUSH2 0x1FA4 SWAP1 PUSH1 0x1 PUSH2 0x1C3F JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD PUSH2 0x1FB6 SWAP1 DUP3 SWAP1 PUSH1 0x4 PUSH2 0x251 JUMP JUMPDEST SWAP2 POP PUSH2 0x1FC2 DUP4 DUP4 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0xA0 ADD MLOAD PUSH2 0x1FD6 SWAP1 DUP5 SWAP1 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD MLOAD PUSH1 0x80 DUP8 ADD MLOAD PUSH2 0x1FED SWAP2 SWAP1 PUSH1 0x6 PUSH2 0x251 JUMP JUMPDEST SWAP2 POP PUSH2 0x1FF9 DUP4 DUP4 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MLOAD MLOAD PUSH2 0x200A SWAP1 DUP5 SWAP1 PUSH2 0x1EA2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2017 DUP8 DUP8 DUP8 PUSH2 0x111 JUMP JUMPDEST SWAP1 POP PUSH2 0x2023 DUP5 DUP3 PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x202F PUSH1 0x1 PUSH1 0x4 PUSH2 0x45EF JUMP JUMPDEST PUSH1 0x3 EQ PUSH2 0x203B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2047 PUSH1 0x1 PUSH2 0x15EB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2065 DUP8 PUSH1 0x80 ADD MLOAD PUSH1 0x4 PUSH1 0x9 DUP2 LT PUSH2 0x14F JUMPI PUSH2 0x14F PUSH2 0x45C3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x212D JUMPI PUSH2 0x180 DUP9 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP5 POP DUP1 PUSH1 0x0 SUB PUSH2 0x20A5 JUMPI PUSH2 0x20A0 DUP6 DUP5 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x20D6 JUMP JUMPDEST PUSH2 0x120 DUP11 ADD MLOAD PUSH2 0x20D6 SWAP1 PUSH2 0x20BA PUSH1 0x1 DUP5 PUSH2 0x45EF JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x20CA JUMPI PUSH2 0x20CA PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP7 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x40 DUP9 ADD MLOAD PUSH2 0x20E6 SWAP1 DUP7 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x20F6 SWAP1 DUP7 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x211B DUP10 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0x210F JUMPI PUSH2 0x210F PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP7 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x2125 DUP3 DUP7 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x206A JUMP JUMPDEST POP PUSH1 0x40 DUP9 ADD MLOAD PUSH2 0x213D SWAP1 DUP3 PUSH2 0x159D JUMP JUMPDEST SWAP5 POP PUSH2 0x2149 DUP7 DUP7 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x80 DUP8 ADD MLOAD PUSH2 0x2159 SWAP1 PUSH1 0x4 PUSH2 0x14F JUMP JUMPDEST SWAP1 POP PUSH2 0x2172 DUP8 PUSH1 0x40 ADD MLOAD DUP3 PUSH2 0x1537 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP9 ADD MLOAD PUSH2 0x2183 SWAP1 DUP3 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x2192 PUSH1 0x1 PUSH1 0x4 PUSH2 0x45EF JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x2206 JUMPI PUSH2 0x21B2 DUP10 PUSH1 0xE0 ADD MLOAD DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x14F JUMPI PUSH2 0x14F PUSH2 0x45C3 JUMP JUMPDEST SWAP5 POP PUSH2 0x21CB DUP9 PUSH1 0x40 ADD MLOAD DUP7 PUSH2 0x1537 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x21DB SWAP1 DUP7 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x21F4 DUP10 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0x210F JUMPI PUSH2 0x210F PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x21FE DUP3 DUP7 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x2186 JUMP JUMPDEST POP PUSH1 0xA0 DUP10 ADD MLOAD PUSH2 0x2219 SWAP1 DUP3 SWAP1 PUSH1 0x3 PUSH2 0x251 JUMP JUMPDEST SWAP5 POP PUSH2 0x2225 DUP7 DUP7 PUSH2 0x2A49 JUMP JUMPDEST PUSH2 0x223F PUSH1 0x0 DUP11 PUSH1 0x0 ADD MLOAD DUP12 PUSH1 0x40 ADD MLOAD DUP11 PUSH2 0x180 ADD MLOAD PUSH2 0x2696 JUMP JUMPDEST PUSH2 0x1E0 DUP9 ADD DUP2 SWAP1 MSTORE MLOAD PUSH1 0x0 SUB PUSH2 0x2254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E0 DUP7 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE PUSH1 0x80 DUP8 ADD MLOAD PUSH2 0x227E SWAP1 PUSH1 0x5 PUSH2 0x1C3F JUMP JUMPDEST PUSH1 0x40 DUP9 ADD MLOAD PUSH2 0x228D SWAP1 DUP3 PUSH2 0x159D JUMP JUMPDEST SWAP5 POP PUSH2 0x2299 DUP7 DUP7 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22A5 DUP10 DUP10 PUSH2 0x2A54 JUMP JUMPDEST SWAP1 POP PUSH2 0x22B1 DUP8 DUP3 PUSH2 0x15DC JUMP JUMPDEST POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP3 DUP2 MSTORE DUP8 MLOAD DUP5 MSTORE SWAP1 DUP8 ADD MLOAD SWAP1 MSTORE SWAP1 PUSH2 0x22F8 DUP8 PUSH2 0x160 ADD MLOAD DUP7 PUSH2 0x1EA2 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x2302 DUP2 DUP7 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP4 MLOAD DUP2 MSTORE PUSH2 0x160 DUP9 ADD MLOAD PUSH2 0x2326 SWAP1 DUP3 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x2330 DUP2 DUP7 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2368 DUP3 PUSH2 0x2362 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x159D JUMP JUMPDEST SWAP1 POP PUSH2 0x2374 DUP4 DUP3 PUSH2 0x2A49 JUMP JUMPDEST PUSH2 0x180 DUP10 ADD MLOAD PUSH2 0x260 DUP12 ADD MLOAD PUSH2 0x2389 SWAP2 PUSH2 0x159D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x23AC DUP11 PUSH2 0x1A0 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x23C6 DUP11 PUSH2 0x160 ADD MLOAD DUP3 PUSH2 0x1537 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x280 DUP12 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x23D9 SWAP1 DUP4 PUSH2 0x159D JUMP JUMPDEST SWAP1 POP PUSH2 0x23E5 DUP4 DUP3 PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x23EF DUP6 DUP5 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x240E DUP13 PUSH2 0x160 ADD MLOAD DUP15 PUSH2 0x280 ADD MLOAD PUSH2 0x159D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x2428 DUP14 PUSH2 0x260 ADD MLOAD DUP3 PUSH2 0x15DC SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x2431 DUP2 PUSH2 0x2D22 JUMP JUMPDEST DUP14 MLOAD PUSH1 0x20 DUP16 ADD MLOAD PUSH1 0x0 PUSH2 0x2442 PUSH2 0x2D62 JUMP JUMPDEST SWAP1 POP PUSH2 0x2450 DUP10 DUP5 DUP7 DUP6 PUSH2 0x2E22 JUMP JUMPDEST SWAP10 POP POP POP POP POP POP POP POP POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x246E PUSH2 0x37D5 JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP5 ADD MLOAD DUP2 PUSH1 0x1 PUSH1 0x20 MUL ADD MSTORE DUP3 MLOAD DUP2 PUSH1 0x2 PUSH1 0x20 MUL ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP4 PUSH1 0x60 DUP5 PUSH1 0x7 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x24A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD ISZERO DUP1 ISZERO PUSH2 0x24B9 JUMPI POP PUSH1 0x20 DUP3 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x24D1 JUMPI DUP3 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST DUP3 MLOAD ISZERO DUP1 ISZERO PUSH2 0x24E2 JUMPI POP PUSH1 0x20 DUP4 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x24F7 JUMPI DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD MLOAD SWAP2 ADD MSTORE POP JUMP JUMPDEST PUSH2 0x24FF PUSH2 0x37F3 JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x40 DUP4 ADD MSTORE DUP4 ADD MLOAD DUP2 PUSH1 0x3 JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP4 PUSH1 0x80 DUP5 PUSH1 0x6 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x24A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x84 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB PUSH1 0x1F NOT ADD DUP2 MSTORE SWAP2 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 DUP6 MSTORE DUP5 DUP3 ADD MLOAD SWAP1 MLOAD PUSH1 0x1 PUSH1 0xE0 SHL SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x84 ADD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 SWAP4 ADD SWAP3 SWAP1 SWAP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x25D4 DUP3 DUP3 PUSH1 0x0 ADD MLOAD PUSH2 0x2538 JUMP JUMPDEST PUSH2 0x15E7 DUP3 DUP3 PUSH1 0x20 ADD MLOAD PUSH2 0x2538 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x40 DUP1 DUP7 ADD MLOAD SWAP1 MLOAD PUSH1 0x1 PUSH1 0xE1 SHL SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x24 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0xE0 SWAP2 SWAP1 SWAP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x68 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x1 DUP4 PUSH1 0x40 ADD DUP2 DUP2 MLOAD PUSH2 0x2660 SWAP2 SWAP1 PUSH2 0x4602 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND SWAP1 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xFD SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x15E7 DUP3 DUP3 PUSH1 0x0 ADD MLOAD PUSH2 0x2538 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP4 DUP6 LT PUSH2 0x26B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x26BD PUSH1 0x1 PUSH2 0x15EB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x26CB DUP6 DUP9 PUSH2 0x1E23 JUMP JUMPDEST SWAP1 POP PUSH2 0x26D7 DUP5 DUP8 PUSH2 0x1E23 JUMP JUMPDEST SWAP3 POP PUSH2 0x26E3 DUP4 DUP4 PUSH2 0x1551 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x26F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26FB DUP4 DUP3 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP5 MLOAD DUP2 MSTORE PUSH2 0x2718 DUP2 DUP4 PUSH2 0x1551 JUMP JUMPDEST PUSH2 0x2724 PUSH2 0x1E07 DUP9 PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x272D DUP2 PUSH2 0x2F22 JUMP JUMPDEST SWAP1 POP PUSH2 0x2739 DUP5 DUP3 PUSH2 0x1537 JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x0 PUSH2 0x275F PUSH1 0x1 PUSH2 0x15EB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x276C DUP6 PUSH2 0x15EB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP6 MLOAD DUP2 MSTORE SWAP1 SWAP2 POP PUSH2 0x278C DUP2 DUP5 PUSH2 0x1551 JUMP JUMPDEST PUSH2 0x2796 DUP2 DUP4 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x279F DUP2 PUSH2 0x2F22 JUMP JUMPDEST SWAP1 POP PUSH2 0x27AB DUP6 DUP8 PUSH2 0x1E23 JUMP JUMPDEST SWAP4 POP PUSH2 0x27B7 DUP5 DUP5 PUSH2 0x1551 JUMP JUMPDEST PUSH2 0x27C1 DUP5 DUP3 PUSH2 0x1537 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x0 PUSH2 0x27F4 PUSH1 0x1 PUSH2 0x15EB JUMP JUMPDEST SWAP1 POP PUSH2 0x2814 DUP5 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x100 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x2826 SWAP1 DUP3 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x100 DUP5 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE PUSH2 0x120 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP6 ADD MLOAD PUSH2 0x2856 SWAP2 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x1A0 DUP6 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP2 POP PUSH2 0x2888 DUP5 PUSH1 0xC0 ADD MLOAD DUP4 PUSH2 0x1537 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x120 DUP5 ADD MLOAD PUSH2 0x2899 SWAP1 DUP4 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x1C0 DUP6 ADD MLOAD PUSH2 0x28AA SWAP1 DUP4 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x28BA SWAP1 PUSH1 0x6 PUSH2 0x19A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x28DB PUSH1 0x1 DUP9 PUSH1 0x0 ADD MLOAD PUSH2 0x28D0 SWAP2 SWAP1 PUSH2 0x45EF JUMP JUMPDEST PUSH1 0x40 DUP10 ADD MLOAD SWAP1 PUSH2 0x1E23 JUMP JUMPDEST SWAP1 POP PUSH2 0x28FC DUP6 PUSH2 0x180 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x1C0 DUP7 ADD DUP2 SWAP1 MSTORE PUSH2 0x290E SWAP1 DUP3 PUSH2 0x1551 JUMP JUMPDEST PUSH2 0x1C0 DUP6 ADD MLOAD PUSH2 0x291F SWAP1 DUP5 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x2929 DUP5 DUP5 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x2943 PUSH1 0x0 DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x40 ADD MLOAD DUP9 PUSH2 0x180 ADD MLOAD PUSH2 0x2696 JUMP JUMPDEST PUSH2 0x1E0 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0xE0 ADD MLOAD SWAP1 SWAP4 POP PUSH2 0x2975 SWAP1 DUP5 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x297F DUP5 DUP5 PUSH2 0x1551 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x29A1 PUSH1 0x1 DUP10 PUSH1 0x0 ADD MLOAD PUSH2 0x2995 SWAP2 SWAP1 PUSH2 0x45EF JUMP JUMPDEST PUSH2 0x120 DUP9 ADD MLOAD SWAP1 PUSH2 0x1E23 JUMP JUMPDEST SWAP1 POP PUSH2 0x29C9 PUSH1 0x1 DUP10 PUSH1 0x0 ADD MLOAD PUSH2 0x29B7 SWAP2 SWAP1 PUSH2 0x45EF JUMP JUMPDEST DUP10 MLOAD PUSH1 0x40 DUP12 ADD MLOAD PUSH2 0x180 DUP11 ADD MLOAD PUSH2 0x2696 JUMP JUMPDEST PUSH2 0x200 DUP8 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP4 POP PUSH2 0x29F0 DUP5 DUP3 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD PUSH2 0x100 ADD MLOAD PUSH2 0x2A05 SWAP1 DUP6 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x2A0F DUP6 DUP6 PUSH2 0x1551 JUMP JUMPDEST POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH2 0x2A33 DUP3 DUP5 PUSH2 0x1E23 JUMP JUMPDEST SWAP1 POP PUSH2 0x1531 PUSH2 0x2A42 PUSH1 0x1 PUSH2 0x15EB JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1551 JUMP JUMPDEST PUSH2 0x15E7 DUP3 DUP3 DUP5 PUSH2 0x2F61 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2A74 PUSH1 0x0 PUSH2 0x15EB JUMP JUMPDEST SWAP1 POP PUSH2 0x2A8C PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP9 ADD MLOAD DUP4 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP4 MSTORE SWAP1 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x2AC2 SWAP1 PUSH1 0x6 PUSH2 0x1C3F JUMP JUMPDEST PUSH2 0x1C0 DUP6 ADD MLOAD PUSH2 0x2AD3 SWAP1 DUP3 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x160 DUP7 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x2AE6 SWAP1 DUP4 PUSH2 0x159D JUMP JUMPDEST SWAP1 POP PUSH2 0x2AF2 DUP6 DUP3 PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x200 DUP8 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP2 POP PUSH2 0x2B24 DUP7 PUSH1 0xC0 ADD MLOAD DUP4 PUSH2 0x1537 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x1E0 DUP8 ADD MLOAD PUSH2 0x2B35 SWAP1 DUP4 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x120 DUP7 ADD MLOAD PUSH2 0x2B46 SWAP1 DUP4 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2B61 PUSH1 0x1 PUSH2 0x15EB JUMP JUMPDEST SWAP1 POP PUSH2 0x2B79 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x2B88 PUSH1 0x1 PUSH1 0x4 PUSH2 0x45EF JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x2BD6 JUMPI PUSH2 0x2BA8 DUP12 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0x14F JUMPI PUSH2 0x14F PUSH2 0x45C3 JUMP JUMPDEST SWAP2 POP PUSH2 0x2BB4 DUP3 DUP5 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x2BBE DUP5 DUP4 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0xA0 DUP11 ADD MLOAD PUSH2 0x2BCE SWAP1 DUP5 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x2B7C JUMP JUMPDEST POP PUSH2 0x240 DUP11 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP6 POP PUSH2 0x2BFC DUP7 DUP4 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x2C06 DUP4 DUP8 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x220 DUP11 ADD MLOAD PUSH2 0x2C17 SWAP1 DUP5 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0xE0 DUP10 ADD MLOAD PUSH2 0x2C27 SWAP1 DUP5 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x2C31 DUP6 DUP5 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x100 DUP10 ADD MLOAD PUSH2 0x2C42 SWAP1 DUP7 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP8 MLOAD DUP2 MSTORE SWAP6 POP PUSH2 0x2C61 DUP7 DUP7 PUSH2 0x1551 JUMP JUMPDEST PUSH1 0x80 DUP10 ADD MLOAD DUP7 SWAP6 POP PUSH2 0x2C74 SWAP1 PUSH1 0x6 PUSH2 0x20CA JUMP JUMPDEST PUSH2 0x1C0 DUP10 ADD MLOAD PUSH2 0x2C85 SWAP1 DUP7 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x1E0 DUP10 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE PUSH1 0x80 DUP11 ADD MLOAD SWAP1 SWAP7 POP PUSH2 0x2CB9 SWAP1 PUSH1 0x7 JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP8 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x2CC3 DUP6 DUP8 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x200 DUP10 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE PUSH1 0x80 DUP11 ADD MLOAD SWAP1 SWAP7 POP PUSH2 0x2CEF SWAP1 PUSH1 0x8 PUSH2 0x2CAD JUMP JUMPDEST PUSH2 0x2CF9 DUP6 DUP8 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x180 DUP11 ADD MLOAD PUSH2 0x2D09 SWAP1 DUP7 PUSH2 0x159D JUMP JUMPDEST SWAP4 POP PUSH2 0x2D15 DUP9 DUP6 PUSH2 0x15DC JUMP JUMPDEST POP POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 PUSH1 0x20 ADD MLOAD PUSH1 0x0 SUB PUSH2 0x2D3D JUMPI DUP1 MLOAD ISZERO PUSH2 0x2D3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x2D5A SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x464A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH2 0x45EF JUMP JUMPDEST PUSH1 0x20 SWAP1 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x2D6A PUSH2 0x35E3 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH32 0x198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2 DUP2 DUP4 ADD SWAP1 DUP2 MSTORE PUSH32 0x1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED PUSH1 0x60 DUP4 ADD MSTORE DUP2 MSTORE DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH32 0x90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B DUP3 MSTORE PUSH32 0x12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA PUSH1 0x20 DUP4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 SWAP1 DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x2E3D JUMPI POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD JUMPDEST PUSH2 0x2E87 PUSH2 0x35E3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x2E7F JUMPI SWAP1 POP POP SWAP1 POP DUP7 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2EB0 JUMPI PUSH2 0x2EB0 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP DUP5 DUP3 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2ECF JUMPI PUSH2 0x2ECF PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP DUP6 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2EEE JUMPI PUSH2 0x2EEE PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP DUP4 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2F0D JUMPI PUSH2 0x2F0D PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP PUSH2 0x106 DUP3 DUP3 PUSH2 0x300B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP2 MLOAD PUSH1 0x0 SUB PUSH2 0x2F3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1531 DUP3 PUSH2 0x2F5C PUSH1 0x2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x466A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH2 0x45EF JUMP JUMPDEST PUSH2 0x1E23 JUMP JUMPDEST DUP2 MLOAD ISZERO DUP1 ISZERO PUSH2 0x2F72 JUMPI POP PUSH1 0x20 DUP3 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x2F8A JUMPI DUP3 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST DUP3 MLOAD ISZERO DUP1 ISZERO PUSH2 0x2F9B JUMPI POP PUSH1 0x20 DUP4 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x2FCB JUMPI DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x2FC1 SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x464A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH2 0x45EF JUMP JUMPDEST PUSH1 0x20 SWAP1 SWAP2 ADD MSTORE POP POP JUMP JUMPDEST PUSH2 0x2FD3 PUSH2 0x37F3 JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x40 DUP4 ADD MSTORE DUP4 ADD MLOAD PUSH2 0x3003 SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x464A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH2 0x45EF JUMP JUMPDEST DUP2 PUSH1 0x3 PUSH2 0x251B JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP4 MLOAD EQ PUSH2 0x301B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x0 PUSH2 0x302A DUP3 PUSH1 0x6 PUSH2 0x461F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3046 JUMPI PUSH2 0x3046 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x306F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x32A0 JUMPI DUP7 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x308F JUMPI PUSH2 0x308F PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP3 DUP3 PUSH1 0x6 PUSH2 0x30A9 SWAP2 SWAP1 PUSH2 0x461F JUMP JUMPDEST PUSH2 0x30B4 SWAP1 PUSH1 0x0 PUSH2 0x4636 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x30C4 JUMPI PUSH2 0x30C4 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP7 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x30E2 JUMPI PUSH2 0x30E2 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD DUP3 DUP3 PUSH1 0x6 PUSH2 0x30FC SWAP2 SWAP1 PUSH2 0x461F JUMP JUMPDEST PUSH2 0x3107 SWAP1 PUSH1 0x1 PUSH2 0x4636 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3117 JUMPI PUSH2 0x3117 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3135 JUMPI PUSH2 0x3135 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD MLOAD MLOAD DUP3 PUSH2 0x314E DUP4 PUSH1 0x6 PUSH2 0x461F JUMP JUMPDEST PUSH2 0x3159 SWAP1 PUSH1 0x2 PUSH2 0x4636 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3169 JUMPI PUSH2 0x3169 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3187 JUMPI PUSH2 0x3187 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD MLOAD ADD MLOAD DUP3 PUSH2 0x31A2 DUP4 PUSH1 0x6 PUSH2 0x461F JUMP JUMPDEST PUSH2 0x31AD SWAP1 PUSH1 0x3 PUSH2 0x4636 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x31BD JUMPI PUSH2 0x31BD PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x31DB JUMPI PUSH2 0x31DB PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x31F9 JUMPI PUSH2 0x31F9 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP3 PUSH2 0x320A DUP4 PUSH1 0x6 PUSH2 0x461F JUMP JUMPDEST PUSH2 0x3215 SWAP1 PUSH1 0x4 PUSH2 0x4636 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3225 JUMPI PUSH2 0x3225 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3243 JUMPI PUSH2 0x3243 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x3261 JUMPI PUSH2 0x3261 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP3 PUSH2 0x3272 DUP4 PUSH1 0x6 PUSH2 0x461F JUMP JUMPDEST PUSH2 0x327D SWAP1 PUSH1 0x5 PUSH2 0x4636 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x328D JUMPI PUSH2 0x328D PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3075 JUMP JUMPDEST POP PUSH2 0x32A9 PUSH2 0x37B7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 PUSH1 0x20 DUP7 MUL PUSH1 0x20 DUP7 ADD PUSH1 0x8 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x32C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x32E7 PUSH2 0x3811 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x32F4 PUSH2 0x384B JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3301 PUSH2 0x3880 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x330E PUSH2 0x38AA JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x160 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3343 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3350 PUSH2 0x38CB JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x335D PUSH2 0x38F3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x336A PUSH2 0x391E JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x338C PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3399 PUSH2 0x391E JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x33BB PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x33C8 PUSH2 0x3947 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x330E PUSH2 0x3968 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x2A0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x33F0 PUSH2 0x391E JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3412 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x341F PUSH2 0x391E JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x342C PUSH2 0x3995 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP3 DUP2 MSTORE DUP4 MSTORE DUP1 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP3 MLOAD DUP1 DUP5 ADD DUP5 MSTORE SWAP2 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x3468 PUSH2 0x3947 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3483 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x349E PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34B9 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34DB PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34FD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3518 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3533 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x354E PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3569 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3584 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x359F PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x35C1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x330E PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x35F6 PUSH2 0x39B6 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x330E PUSH2 0x39B6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x280 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x260 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE DUP3 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP6 MSTORE DUP3 DUP3 MSTORE DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP3 ADD DUP6 MSTORE DUP3 DUP2 MSTORE DUP4 DUP6 ADD MSTORE DUP4 MLOAD SWAP1 DUP2 ADD SWAP1 SWAP4 MSTORE DUP3 MSTORE SWAP1 PUSH1 0x60 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3658 PUSH2 0x39D4 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3673 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x368E PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x36A9 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x36C4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x36DF PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x36FA PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3715 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3730 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x374B PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3766 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3781 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x379C PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x35C1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x1A0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xD SWAP1 JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x3821 JUMPI SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x1A0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xD SWAP1 JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x385B JUMPI SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH1 0xC0 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0xE0 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP3 ADD PUSH2 0x3821 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH1 0xC0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP3 ADD PUSH2 0x385B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH1 0x0 SWAP2 DUP2 ADD DUP3 DUP2 MSTORE PUSH1 0x60 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP3 ADD PUSH2 0x3821 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH1 0xE0 DUP3 ADD DUP2 DUP2 MSTORE PUSH2 0x100 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 DUP3 ADD PUSH2 0x3821 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH1 0x80 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0xA0 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 DUP3 ADD PUSH2 0x3821 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP3 ADD PUSH2 0x385B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 JUMPDEST PUSH2 0x397F PUSH2 0x35E3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x3977 JUMPI SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 DUP3 ADD PUSH2 0x385B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x140 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 DUP3 ADD PUSH2 0x385B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3A09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3A20 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x3A3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3A58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x3A6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3A7B DUP9 DUP4 DUP10 ADD PUSH2 0x39F7 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x3A94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3AA1 DUP8 DUP3 DUP9 ADD PUSH2 0x39F7 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3AE5 JUMPI PUSH2 0x3AE5 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2A0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3AE5 JUMPI PUSH2 0x3AE5 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x260 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3AE5 JUMPI PUSH2 0x3AE5 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x160 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3AE5 JUMPI PUSH2 0x3AE5 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3AE5 JUMPI PUSH2 0x3AE5 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3B88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x3BAA JUMPI PUSH2 0x3BAA PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 CALLDATALOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3BD1 PUSH2 0x3AC3 JUMP JUMPDEST SWAP1 POP DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3BF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3C00 PUSH2 0x3AC3 JUMP JUMPDEST DUP1 PUSH1 0x80 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3C12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3C36 JUMPI PUSH2 0x3C26 DUP8 DUP3 PUSH2 0x3BB7 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x40 ADD PUSH2 0x3C14 JUMP JUMPDEST POP SWAP1 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3C52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x3C75 JUMPI PUSH2 0x3C75 PUSH2 0x3AAD JUMP JUMPDEST DUP3 MSTORE DUP1 PUSH2 0x1C0 DUP6 ADD DUP7 DUP2 GT ISZERO PUSH2 0x3C8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3CAD JUMPI PUSH2 0x3C9E DUP9 DUP3 PUSH2 0x3BB7 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 DUP5 ADD PUSH2 0x3C8C JUMP JUMPDEST POP SWAP2 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3CCA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3CD2 PUSH2 0x3B54 JUMP JUMPDEST DUP1 PUSH2 0x100 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3CE5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3C36 JUMPI PUSH2 0x3CF9 DUP8 DUP3 PUSH2 0x3BB7 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x40 ADD PUSH2 0x3CE7 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3D1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x3D3C JUMPI PUSH2 0x3D3C PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3D51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3D73 JUMPI PUSH2 0x3D65 DUP8 DUP3 PUSH2 0x3B76 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x3D53 JUMP JUMPDEST POP SWAP2 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3D8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3D97 PUSH2 0x3AC3 JUMP JUMPDEST DUP1 PUSH1 0x40 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3DA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3C36 JUMPI DUP1 CALLDATALOAD DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x3DAB JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3DD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3DDC PUSH2 0x3AC3 JUMP JUMPDEST DUP1 PUSH2 0x100 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3DEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3C36 JUMPI PUSH1 0x80 DUP2 DUP9 SUB SLT ISZERO PUSH2 0x3E0A JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0x3E12 PUSH2 0x3AC3 JUMP JUMPDEST PUSH2 0x3E1C DUP9 DUP4 PUSH2 0x3D7E JUMP JUMPDEST DUP2 MSTORE PUSH2 0x3E2B DUP9 PUSH1 0x40 DUP5 ADD PUSH2 0x3D7E JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP6 MSTORE SWAP4 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x80 ADD PUSH2 0x3DF1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3E55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP4 GT ISZERO PUSH2 0x3E71 JUMPI PUSH2 0x3E71 PUSH2 0x3AAD JUMP JUMPDEST DUP3 PUSH1 0x5 SHL PUSH1 0x40 MLOAD PUSH1 0x1F NOT PUSH1 0x3F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT DUP5 DUP3 GT OR ISZERO PUSH2 0x3E96 JUMPI PUSH2 0x3E96 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP4 DUP5 MSTORE DUP6 DUP2 ADD DUP4 ADD SWAP4 DUP4 DUP2 ADD SWAP3 POP DUP8 DUP6 GT ISZERO PUSH2 0x3EB4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP8 ADD SWAP2 POP JUMPDEST DUP5 DUP3 LT ISZERO PUSH2 0x106 JUMPI DUP2 CALLDATALOAD DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH2 0x3EBA JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3EE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3EEC PUSH2 0x3B54 JUMP JUMPDEST DUP1 PUSH1 0x80 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3EFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3C36 JUMPI PUSH2 0x3F12 DUP8 DUP3 PUSH2 0x3B76 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x3F00 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3F31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP3 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x3F54 JUMPI PUSH2 0x3F54 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MSTORE DUP2 DUP5 DUP3 ADD DUP7 DUP2 GT ISZERO PUSH2 0x3F68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F89 JUMPI PUSH2 0x3F7C DUP9 DUP3 PUSH2 0x3B76 JUMP JUMPDEST DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x3F6A JUMP JUMPDEST POP SWAP3 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5A0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3FA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3FB0 PUSH2 0x3AEB JUMP JUMPDEST SWAP1 POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3FC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3FD4 DUP5 DUP3 DUP6 ADD PUSH2 0x3E44 JUMP JUMPDEST DUP3 MSTORE POP PUSH2 0x3FE4 DUP4 PUSH1 0x20 DUP5 ADD PUSH2 0x3CB9 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x3FF8 DUP5 DUP3 DUP6 ADD PUSH2 0x3BB7 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x160 PUSH2 0x400C DUP6 DUP3 DUP7 ADD PUSH2 0x3CB9 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x260 PUSH2 0x4020 DUP7 DUP3 DUP8 ADD PUSH2 0x3ED3 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x4033 DUP7 PUSH2 0x2E0 DUP8 ADD PUSH2 0x3F20 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x4046 DUP7 PUSH2 0x300 DUP8 ADD PUSH2 0x3F20 JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x4059 DUP7 PUSH2 0x320 DUP8 ADD PUSH2 0x3D09 JUMP JUMPDEST PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x406C DUP7 PUSH2 0x380 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x4080 DUP7 PUSH2 0x3A0 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST DUP4 DUP6 ADD MSTORE PUSH2 0x4092 DUP7 PUSH2 0x3C0 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MSTORE PUSH2 0x40A6 DUP7 PUSH2 0x3E0 DUP8 ADD PUSH2 0x3BB7 JUMP JUMPDEST DUP3 DUP6 ADD MSTORE PUSH2 0x40B8 DUP7 PUSH2 0x420 DUP8 ADD PUSH2 0x3BB7 JUMP JUMPDEST PUSH2 0x180 DUP6 ADD MSTORE PUSH2 0x40CC DUP7 PUSH2 0x460 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x1A0 DUP6 ADD MSTORE PUSH2 0x40E0 DUP7 PUSH2 0x480 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x1C0 DUP6 ADD MSTORE PUSH2 0x40F4 DUP7 PUSH2 0x4A0 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x1E0 DUP6 ADD MSTORE PUSH2 0x4108 DUP7 PUSH2 0x4C0 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x200 DUP6 ADD MSTORE PUSH2 0x411C DUP7 PUSH2 0x4E0 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x220 DUP6 ADD MSTORE PUSH2 0x4130 DUP7 PUSH2 0x500 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x240 DUP6 ADD MSTORE PUSH2 0x4144 DUP7 PUSH2 0x520 DUP8 ADD PUSH2 0x3BB7 JUMP JUMPDEST DUP2 DUP6 ADD MSTORE POP POP POP PUSH2 0x4159 DUP4 PUSH2 0x560 DUP5 ADD PUSH2 0x3BB7 JUMP JUMPDEST PUSH2 0x280 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4176 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP1 DUP3 ADD DUP3 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x419A JUMPI PUSH2 0x419A PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MSTORE DUP4 ADD DUP2 DUP6 DUP3 GT ISZERO PUSH2 0x41AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3D73 JUMPI PUSH2 0x41C1 DUP8 DUP3 PUSH2 0x3B76 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x41AF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x380 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x41E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x41EA PUSH2 0x3B0E JUMP JUMPDEST SWAP1 POP PUSH2 0x41F6 DUP4 DUP4 PUSH2 0x3B76 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x4205 DUP4 PUSH1 0x20 DUP5 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x4217 DUP4 PUSH1 0x40 DUP5 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x4229 DUP4 PUSH1 0x60 DUP5 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x423B DUP4 PUSH1 0x80 DUP5 ADD PUSH2 0x4165 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x424F DUP5 DUP3 DUP6 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x1C0 PUSH2 0x4263 DUP6 DUP3 DUP7 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x1E0 PUSH2 0x4277 DUP7 DUP3 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x200 PUSH2 0x428B DUP8 DUP3 DUP9 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x220 PUSH2 0x42A0 DUP9 DUP3 DUP10 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x120 DUP8 ADD MSTORE PUSH2 0x240 PUSH2 0x42B5 DUP10 DUP3 DUP11 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x140 DUP9 ADD MSTORE PUSH2 0x42C9 DUP10 PUSH2 0x260 DUP11 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x160 DUP9 ADD MSTORE PUSH2 0x42DD DUP10 PUSH2 0x280 DUP11 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x180 DUP9 ADD MSTORE PUSH2 0x42F1 DUP10 PUSH2 0x2A0 DUP11 ADD PUSH2 0x3B76 JUMP JUMPDEST DUP7 DUP9 ADD MSTORE PUSH2 0x4303 DUP10 PUSH2 0x2C0 DUP11 ADD PUSH2 0x3B76 JUMP JUMPDEST DUP6 DUP9 ADD MSTORE PUSH2 0x4315 DUP10 PUSH2 0x2E0 DUP11 ADD PUSH2 0x3B76 JUMP JUMPDEST DUP5 DUP9 ADD MSTORE PUSH2 0x4327 DUP10 PUSH2 0x300 DUP11 ADD PUSH2 0x3B76 JUMP JUMPDEST DUP4 DUP9 ADD MSTORE PUSH2 0x4339 DUP10 PUSH2 0x320 DUP11 ADD PUSH2 0x3B76 JUMP JUMPDEST DUP3 DUP9 ADD MSTORE PUSH2 0x434B DUP10 PUSH2 0x340 DUP11 ADD PUSH2 0x3BB7 JUMP JUMPDEST DUP2 DUP9 ADD MSTORE POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP6 SUB PUSH2 0xA20 DUP2 SLT ISZERO PUSH2 0x4372 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x680 DUP1 DUP3 SLT ISZERO PUSH2 0x4382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x438A PUSH2 0x3B31 JUMP JUMPDEST SWAP2 POP DUP6 CALLDATALOAD DUP3 MSTORE PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x43A7 DUP8 PUSH1 0x40 DUP9 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x43B9 DUP8 PUSH1 0x60 DUP9 ADD PUSH2 0x3BE7 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x43CB DUP8 PUSH1 0xE0 DUP9 ADD PUSH2 0x3C41 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x43DE DUP8 PUSH2 0x2A0 DUP9 ADD PUSH2 0x3CB9 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x43F1 DUP8 PUSH2 0x3A0 DUP9 ADD PUSH2 0x3BB7 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x4404 DUP8 PUSH2 0x3E0 DUP9 ADD PUSH2 0x3CB9 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x4417 DUP8 PUSH2 0x4E0 DUP9 ADD PUSH2 0x3BB7 JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE PUSH2 0x442B DUP8 PUSH2 0x520 DUP9 ADD PUSH2 0x3D09 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE PUSH2 0x443F DUP8 PUSH2 0x580 DUP9 ADD PUSH2 0x3DC3 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE SWAP1 SWAP4 POP DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x445F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x446B DUP7 DUP3 DUP8 ADD PUSH2 0x3F95 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x447C DUP6 PUSH2 0x6A0 DUP7 ADD PUSH2 0x41CF JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD PUSH2 0x1531 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST PUSH1 0x6 DUP2 LT ISZERO PUSH2 0x44D4 JUMPI PUSH2 0x44BE DUP5 DUP4 MLOAD DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x40 SWAP4 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x20 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x44A0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST PUSH1 0x6 DUP2 LT ISZERO PUSH2 0x44D4 JUMPI DUP2 MLOAD MLOAD DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x44DE JUMP JUMPDEST DUP2 MLOAD PUSH2 0x720 DUP3 ADD SWAP1 DUP3 PUSH1 0x0 JUMPDEST PUSH1 0xD DUP2 LT ISZERO PUSH2 0x453E JUMPI PUSH2 0x4528 DUP3 DUP5 MLOAD DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x20 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x450A JUMP JUMPDEST POP POP POP PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH2 0x340 DUP5 ADD PUSH1 0x0 JUMPDEST PUSH1 0xD DUP2 LT ISZERO PUSH2 0x456D JUMPI DUP3 MLOAD MLOAD DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x454F JUMP JUMPDEST POP POP POP POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x4584 PUSH2 0x4E0 DUP5 ADD DUP3 PUSH2 0x449C JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x4598 PUSH2 0x660 DUP5 ADD DUP3 PUSH2 0x44DA JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x380 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x45B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x45BC DUP4 DUP4 PUSH2 0x41CF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x1531 JUMPI PUSH2 0x1531 PUSH2 0x45D9 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x4598 JUMPI PUSH2 0x4598 PUSH2 0x45D9 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x1531 JUMPI PUSH2 0x1531 PUSH2 0x45D9 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x1531 JUMPI PUSH2 0x1531 PUSH2 0x45D9 JUMP INVALID ADDRESS PUSH5 0x4E72E131A0 0x29 0xB8 POP GASLIMIT 0xB6 DUP2 DUP2 PC 0x5D SWAP8 DUP2 PUSH11 0x916871CA8D3C208C16D87C REVERT SELFBALANCE ADDRESS PUSH5 0x4E72E131A0 0x29 0xB8 POP GASLIMIT 0xB6 DUP2 DUP2 PC 0x5D 0x28 CALLER 0xE8 BASEFEE PUSH26 0xB9709143E1F593F0000001A2646970667358221220525EBA758B 0xF7 0xC4 0x2A PUSH30 0x1CF6A05EB2CF3DD25B2CAF7BB388AEE220ED13D5AA7C8F64736F6C634300 ADDMOD GT STOP CALLER ","sourceMap":"169:10734:8:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@P1_6244":{"entryPoint":null,"id":6244,"parameterSlots":0,"returnSlots":1},"@P2_6403":{"entryPoint":11618,"id":6403,"parameterSlots":0,"returnSlots":1},"@add_assign_6129":{"entryPoint":5507,"id":6129,"parameterSlots":2,"returnSlots":0},"@aggregated_linearization_commitment_2672":{"entryPoint":7853,"id":2672,"parameterSlots":3,"returnSlots":1},"@compute_powers_of_alpha_1226":{"entryPoint":1482,"id":1226,"parameterSlots":1,"returnSlots":0},"@copy_6066":{"entryPoint":null,"id":6066,"parameterSlots":1,"returnSlots":1},"@copy_g1_6387":{"entryPoint":null,"id":6387,"parameterSlots":1,"returnSlots":1},"@deserialize_proof_4709":{"entryPoint":3591,"id":4709,"parameterSlots":4,"returnSlots":1},"@evaluate_l0_at_point_622":{"entryPoint":10052,"id":622,"parameterSlots":2,"returnSlots":1},"@evaluate_lagrange_poly_out_of_domain_728":{"entryPoint":9878,"id":728,"parameterSlots":4,"returnSlots":1},"@evaluate_vanishing_756":{"entryPoint":10778,"id":756,"parameterSlots":2,"returnSlots":1},"@final_pairing_3731":{"entryPoint":8894,"id":3731,"parameterSlots":7,"returnSlots":1},"@get_challenge_7415":{"entryPoint":9698,"id":7415,"parameterSlots":1,"returnSlots":1},"@get_verification_key_4169":{"entryPoint":1656,"id":4169,"parameterSlots":0,"returnSlots":1},"@initialize_transcript_1145":{"entryPoint":6129,"id":1145,"parameterSlots":2,"returnSlots":1},"@inverse_6107":{"entryPoint":12066,"id":6107,"parameterSlots":1,"returnSlots":1},"@lookup_linearization_contribution_3144":{"entryPoint":10836,"id":3144,"parameterSlots":2,"returnSlots":1},"@lookup_quotient_contribution_2194":{"entryPoint":10186,"id":2194,"parameterSlots":3,"returnSlots":1},"@mul_assign_6175":{"entryPoint":5431,"id":6175,"parameterSlots":2,"returnSlots":0},"@negate_6433":{"entryPoint":11554,"id":6433,"parameterSlots":1,"returnSlots":0},"@new_fr_6049":{"entryPoint":5611,"id":6049,"parameterSlots":1,"returnSlots":1},"@new_g1_6260":{"entryPoint":5670,"id":6260,"parameterSlots":2,"returnSlots":1},"@new_g1_checked_6343":{"entryPoint":5721,"id":6343,"parameterSlots":2,"returnSlots":1},"@new_g2_6363":{"entryPoint":5713,"id":6363,"parameterSlots":2,"returnSlots":1},"@new_transcript_7290":{"entryPoint":null,"id":7290,"parameterSlots":0,"returnSlots":1},"@pairingProd2_7048":{"entryPoint":11810,"id":7048,"parameterSlots":4,"returnSlots":1},"@pairing_6976":{"entryPoint":12299,"id":6976,"parameterSlots":2,"returnSlots":1},"@point_add_assign_6470":{"entryPoint":5596,"id":6470,"parameterSlots":2,"returnSlots":0},"@point_add_into_dest_6579":{"entryPoint":9384,"id":6579,"parameterSlots":3,"returnSlots":0},"@point_mul_6747":{"entryPoint":5533,"id":6747,"parameterSlots":2,"returnSlots":1},"@point_mul_assign_6763":{"entryPoint":7842,"id":6763,"parameterSlots":2,"returnSlots":0},"@point_mul_into_dest_6812":{"entryPoint":9318,"id":6812,"parameterSlots":3,"returnSlots":0},"@point_sub_assign_6595":{"entryPoint":10825,"id":6595,"parameterSlots":2,"returnSlots":0},"@point_sub_into_dest_6709":{"entryPoint":12129,"id":6709,"parameterSlots":3,"returnSlots":0},"@pow_6223":{"entryPoint":7715,"id":6223,"parameterSlots":2,"returnSlots":1},"@prepare_queries_3532":{"entryPoint":614,"id":3532,"parameterSlots":3,"returnSlots":1},"@rescue_custom_gate_linearization_contribution_2834":{"entryPoint":273,"id":2834,"parameterSlots":3,"returnSlots":1},"@sub_assign_6153":{"entryPoint":5457,"id":6153,"parameterSlots":2,"returnSlots":0},"@uncheckedAdd_329":{"entryPoint":null,"id":329,"parameterSlots":2,"returnSlots":1},"@uncheckedInc_314":{"entryPoint":null,"id":314,"parameterSlots":1,"returnSlots":1},"@update_with_fr_7350":{"entryPoint":9864,"id":7350,"parameterSlots":2,"returnSlots":0},"@update_with_g1_7372":{"entryPoint":9670,"id":7372,"parameterSlots":2,"returnSlots":0},"@update_with_u256_7334":{"entryPoint":9528,"id":7334,"parameterSlots":2,"returnSlots":0},"@verify_1617":{"entryPoint":4690,"id":1617,"parameterSlots":2,"returnSlots":1},"@verify_quotient_evaluation_1947":{"entryPoint":6954,"id":1947,"parameterSlots":3,"returnSlots":1},"@verify_serialized_proof_4748":{"entryPoint":206,"id":4748,"parameterSlots":4,"returnSlots":1},"abi_decode_array_struct_Fr":{"entryPoint":16083,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_struct_Fr_memory_ptr_memory_ptr":{"entryPoint":16160,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_struct_G1Point":{"entryPoint":15335,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_struct_G1Point_memory_ptr_memory_ptr":{"entryPoint":15545,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_struct_G2Point":{"entryPoint":15811,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256":{"entryPoint":15742,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn":{"entryPoint":15940,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_calldata":{"entryPoint":14839,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_struct_Fr":{"entryPoint":15222,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_G1Point":{"entryPoint":15287,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_PartialVerifierState":{"entryPoint":16847,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_Proof":{"entryPoint":16277,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_array_t_struct_Fr":{"entryPoint":15625,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_array_t_struct_Fr_memory_ptr_memory_ptr":{"entryPoint":16741,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_t_array_t_struct_G1Point":{"entryPoint":15425,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr":{"entryPoint":14914,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_struct$_PartialVerifierState_$544_memory_ptr":{"entryPoint":17823,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_VerificationKey_$387_memory_ptrt_struct$_Proof_$484_memory_ptrt_struct$_PartialVerifierState_$544_memory_ptr":{"entryPoint":17243,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_array_struct_Fr":{"entryPoint":17626,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_struct_G1Point":{"entryPoint":17564,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_struct_G1Point":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_packed_t_uint32_t_bytes32_t_bytes32_t_uint256__to_t_uint32_t_bytes32_t_bytes32_t_uint256__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_packed_t_uint32_t_bytes32_t_bytes32_t_uint32__to_t_uint32_t_bytes32_t_bytes32_t_uint32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1dfeff2f48d64e5889cd05b12cf0c6149fe8cd6987dc2feb21068eaa37a150e2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ca1c4b36b64c26a780df6e129923f75fb0ec272344eb802bca8a701f0737ca5f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fda56ab6f1add86dceb1c827168bec3bc5af2fbf929350597858dbb7150756b6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_G1Point_$6027_memory_ptr__to_t_struct$_G1Point_$6027_memory_ptr__fromStack_reversed":{"entryPoint":17541,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_Queries_$3165_memory_ptr__to_t_struct$_Queries_$3165_memory_ptr__fromStack_reversed":{"entryPoint":17662,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":15188,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_2863":{"entryPoint":15043,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_2876":{"entryPoint":15083,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_2878":{"entryPoint":15118,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_2879":{"entryPoint":15153,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_5696":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":17974,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint32":{"entryPoint":17922,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":17951,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":17903,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":17881,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":17859,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":15021,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:21551:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"98:283:181","statements":[{"body":{"nodeType":"YulBlock","src":"147:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"156:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"149:6:181"},"nodeType":"YulFunctionCall","src":"149:12:181"},"nodeType":"YulExpressionStatement","src":"149:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"126:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"134:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"122:3:181"},"nodeType":"YulFunctionCall","src":"122:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"141:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"118:3:181"},"nodeType":"YulFunctionCall","src":"118:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"111:6:181"},"nodeType":"YulFunctionCall","src":"111:35:181"},"nodeType":"YulIf","src":"108:55:181"},{"nodeType":"YulAssignment","src":"172:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"195:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"182:12:181"},"nodeType":"YulFunctionCall","src":"182:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"172:6:181"}]},{"body":{"nodeType":"YulBlock","src":"245:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"254:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"257:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"247:6:181"},"nodeType":"YulFunctionCall","src":"247:12:181"},"nodeType":"YulExpressionStatement","src":"247:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"217:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"225:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"214:2:181"},"nodeType":"YulFunctionCall","src":"214:30:181"},"nodeType":"YulIf","src":"211:50:181"},{"nodeType":"YulAssignment","src":"270:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"286:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"294:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"282:3:181"},"nodeType":"YulFunctionCall","src":"282:17:181"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"270:8:181"}]},{"body":{"nodeType":"YulBlock","src":"359:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"368:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"371:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"361:6:181"},"nodeType":"YulFunctionCall","src":"361:12:181"},"nodeType":"YulExpressionStatement","src":"361:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"322:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"334:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"337:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"330:3:181"},"nodeType":"YulFunctionCall","src":"330:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"318:3:181"},"nodeType":"YulFunctionCall","src":"318:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"347:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"314:3:181"},"nodeType":"YulFunctionCall","src":"314:38:181"},{"name":"end","nodeType":"YulIdentifier","src":"354:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"311:2:181"},"nodeType":"YulFunctionCall","src":"311:47:181"},"nodeType":"YulIf","src":"308:67:181"}]},"name":"abi_decode_array_uint256_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"61:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"69:3:181","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"77:8:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"87:6:181","type":""}],"src":"14:367:181"},{"body":{"nodeType":"YulBlock","src":"543:616:181","statements":[{"body":{"nodeType":"YulBlock","src":"589:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"598:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"601:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"591:6:181"},"nodeType":"YulFunctionCall","src":"591:12:181"},"nodeType":"YulExpressionStatement","src":"591:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"564:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"573:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"560:3:181"},"nodeType":"YulFunctionCall","src":"560:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"585:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"556:3:181"},"nodeType":"YulFunctionCall","src":"556:32:181"},"nodeType":"YulIf","src":"553:52:181"},{"nodeType":"YulVariableDeclaration","src":"614:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"641:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"628:12:181"},"nodeType":"YulFunctionCall","src":"628:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"618:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"660:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"670:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"664:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"715:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"724:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"727:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"717:6:181"},"nodeType":"YulFunctionCall","src":"717:12:181"},"nodeType":"YulExpressionStatement","src":"717:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"703:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"711:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"700:2:181"},"nodeType":"YulFunctionCall","src":"700:14:181"},"nodeType":"YulIf","src":"697:34:181"},{"nodeType":"YulVariableDeclaration","src":"740:96:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"808:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"819:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"804:3:181"},"nodeType":"YulFunctionCall","src":"804:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"828:7:181"}],"functionName":{"name":"abi_decode_array_uint256_dyn_calldata","nodeType":"YulIdentifier","src":"766:37:181"},"nodeType":"YulFunctionCall","src":"766:70:181"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"744:8:181","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"754:8:181","type":""}]},{"nodeType":"YulAssignment","src":"845:18:181","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"855:8:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"845:6:181"}]},{"nodeType":"YulAssignment","src":"872:18:181","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"882:8:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"872:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"899:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"932:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"943:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"928:3:181"},"nodeType":"YulFunctionCall","src":"928:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"915:12:181"},"nodeType":"YulFunctionCall","src":"915:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"903:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"976:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"985:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"988:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"978:6:181"},"nodeType":"YulFunctionCall","src":"978:12:181"},"nodeType":"YulExpressionStatement","src":"978:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"962:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"972:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"959:2:181"},"nodeType":"YulFunctionCall","src":"959:16:181"},"nodeType":"YulIf","src":"956:36:181"},{"nodeType":"YulVariableDeclaration","src":"1001:98:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1069:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"1080:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1065:3:181"},"nodeType":"YulFunctionCall","src":"1065:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1091:7:181"}],"functionName":{"name":"abi_decode_array_uint256_dyn_calldata","nodeType":"YulIdentifier","src":"1027:37:181"},"nodeType":"YulFunctionCall","src":"1027:72:181"},"variables":[{"name":"value2_1","nodeType":"YulTypedName","src":"1005:8:181","type":""},{"name":"value3_1","nodeType":"YulTypedName","src":"1015:8:181","type":""}]},{"nodeType":"YulAssignment","src":"1108:18:181","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"1118:8:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1108:6:181"}]},{"nodeType":"YulAssignment","src":"1135:18:181","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"1145:8:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1135:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"485:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"496:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"508:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"516:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"524:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"532:6:181","type":""}],"src":"386:773:181"},{"body":{"nodeType":"YulBlock","src":"1259:92:181","statements":[{"nodeType":"YulAssignment","src":"1269:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1281:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1292:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1277:3:181"},"nodeType":"YulFunctionCall","src":"1277:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1269:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1311:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1336:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1329:6:181"},"nodeType":"YulFunctionCall","src":"1329:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1322:6:181"},"nodeType":"YulFunctionCall","src":"1322:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1304:6:181"},"nodeType":"YulFunctionCall","src":"1304:41:181"},"nodeType":"YulExpressionStatement","src":"1304:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1228:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1239:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1250:4:181","type":""}],"src":"1164:187:181"},{"body":{"nodeType":"YulBlock","src":"1388:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1405:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1412:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1417:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1408:3:181"},"nodeType":"YulFunctionCall","src":"1408:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1398:6:181"},"nodeType":"YulFunctionCall","src":"1398:31:181"},"nodeType":"YulExpressionStatement","src":"1398:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1445:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1448:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1438:6:181"},"nodeType":"YulFunctionCall","src":"1438:15:181"},"nodeType":"YulExpressionStatement","src":"1438:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1469:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1472:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1462:6:181"},"nodeType":"YulFunctionCall","src":"1462:15:181"},"nodeType":"YulExpressionStatement","src":"1462:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1356:127:181"},{"body":{"nodeType":"YulBlock","src":"1534:211:181","statements":[{"nodeType":"YulAssignment","src":"1544:21:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1560:4:181","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1554:5:181"},"nodeType":"YulFunctionCall","src":"1554:11:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1544:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1574:35:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1596:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1604:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1592:3:181"},"nodeType":"YulFunctionCall","src":"1592:17:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1578:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1684:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1686:16:181"},"nodeType":"YulFunctionCall","src":"1686:18:181"},"nodeType":"YulExpressionStatement","src":"1686:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1627:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"1639:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1624:2:181"},"nodeType":"YulFunctionCall","src":"1624:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1663:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1675:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1660:2:181"},"nodeType":"YulFunctionCall","src":"1660:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1621:2:181"},"nodeType":"YulFunctionCall","src":"1621:62:181"},"nodeType":"YulIf","src":"1618:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1722:4:181","type":"","value":"0x40"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1728:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1715:6:181"},"nodeType":"YulFunctionCall","src":"1715:24:181"},"nodeType":"YulExpressionStatement","src":"1715:24:181"}]},"name":"allocate_memory_2863","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1523:6:181","type":""}],"src":"1488:257:181"},{"body":{"nodeType":"YulBlock","src":"1796:209:181","statements":[{"nodeType":"YulAssignment","src":"1806:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1822:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1816:5:181"},"nodeType":"YulFunctionCall","src":"1816:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1806:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1834:37:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1856:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1864:6:181","type":"","value":"0x02a0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1852:3:181"},"nodeType":"YulFunctionCall","src":"1852:19:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1838:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1946:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1948:16:181"},"nodeType":"YulFunctionCall","src":"1948:18:181"},"nodeType":"YulExpressionStatement","src":"1948:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1889:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"1901:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1886:2:181"},"nodeType":"YulFunctionCall","src":"1886:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1925:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1937:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1922:2:181"},"nodeType":"YulFunctionCall","src":"1922:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1883:2:181"},"nodeType":"YulFunctionCall","src":"1883:62:181"},"nodeType":"YulIf","src":"1880:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1984:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1988:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1977:6:181"},"nodeType":"YulFunctionCall","src":"1977:22:181"},"nodeType":"YulExpressionStatement","src":"1977:22:181"}]},"name":"allocate_memory_2876","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1785:6:181","type":""}],"src":"1750:255:181"},{"body":{"nodeType":"YulBlock","src":"2056:209:181","statements":[{"nodeType":"YulAssignment","src":"2066:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2082:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2076:5:181"},"nodeType":"YulFunctionCall","src":"2076:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2066:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2094:37:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2116:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2124:6:181","type":"","value":"0x0260"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2112:3:181"},"nodeType":"YulFunctionCall","src":"2112:19:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2098:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2206:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2208:16:181"},"nodeType":"YulFunctionCall","src":"2208:18:181"},"nodeType":"YulExpressionStatement","src":"2208:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2149:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"2161:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2146:2:181"},"nodeType":"YulFunctionCall","src":"2146:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2185:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2197:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2182:2:181"},"nodeType":"YulFunctionCall","src":"2182:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2143:2:181"},"nodeType":"YulFunctionCall","src":"2143:62:181"},"nodeType":"YulIf","src":"2140:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2244:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2248:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2237:6:181"},"nodeType":"YulFunctionCall","src":"2237:22:181"},"nodeType":"YulExpressionStatement","src":"2237:22:181"}]},"name":"allocate_memory_2878","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2045:6:181","type":""}],"src":"2010:255:181"},{"body":{"nodeType":"YulBlock","src":"2316:209:181","statements":[{"nodeType":"YulAssignment","src":"2326:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2342:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2336:5:181"},"nodeType":"YulFunctionCall","src":"2336:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2326:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2354:37:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2376:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2384:6:181","type":"","value":"0x0160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2372:3:181"},"nodeType":"YulFunctionCall","src":"2372:19:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2358:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2466:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2468:16:181"},"nodeType":"YulFunctionCall","src":"2468:18:181"},"nodeType":"YulExpressionStatement","src":"2468:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2409:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"2421:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2406:2:181"},"nodeType":"YulFunctionCall","src":"2406:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2445:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2457:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2442:2:181"},"nodeType":"YulFunctionCall","src":"2442:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2403:2:181"},"nodeType":"YulFunctionCall","src":"2403:62:181"},"nodeType":"YulIf","src":"2400:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2504:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2508:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2497:6:181"},"nodeType":"YulFunctionCall","src":"2497:22:181"},"nodeType":"YulExpressionStatement","src":"2497:22:181"}]},"name":"allocate_memory_2879","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2305:6:181","type":""}],"src":"2270:255:181"},{"body":{"nodeType":"YulBlock","src":"2576:205:181","statements":[{"nodeType":"YulAssignment","src":"2586:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2602:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2596:5:181"},"nodeType":"YulFunctionCall","src":"2596:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2586:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2614:33:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2636:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2644:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2632:3:181"},"nodeType":"YulFunctionCall","src":"2632:15:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2618:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2722:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2724:16:181"},"nodeType":"YulFunctionCall","src":"2724:18:181"},"nodeType":"YulExpressionStatement","src":"2724:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2665:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"2677:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2662:2:181"},"nodeType":"YulFunctionCall","src":"2662:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2701:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2713:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2698:2:181"},"nodeType":"YulFunctionCall","src":"2698:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2659:2:181"},"nodeType":"YulFunctionCall","src":"2659:62:181"},"nodeType":"YulIf","src":"2656:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2760:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2764:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2753:6:181"},"nodeType":"YulFunctionCall","src":"2753:22:181"},"nodeType":"YulExpressionStatement","src":"2753:22:181"}]},"name":"allocate_memory_5696","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2565:6:181","type":""}],"src":"2530:251:181"},{"body":{"nodeType":"YulBlock","src":"2827:206:181","statements":[{"nodeType":"YulAssignment","src":"2837:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2853:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2847:5:181"},"nodeType":"YulFunctionCall","src":"2847:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2837:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2865:34:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2887:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2895:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2883:3:181"},"nodeType":"YulFunctionCall","src":"2883:16:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2869:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2974:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2976:16:181"},"nodeType":"YulFunctionCall","src":"2976:18:181"},"nodeType":"YulExpressionStatement","src":"2976:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2917:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"2929:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2914:2:181"},"nodeType":"YulFunctionCall","src":"2914:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2953:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2965:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2950:2:181"},"nodeType":"YulFunctionCall","src":"2950:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2911:2:181"},"nodeType":"YulFunctionCall","src":"2911:62:181"},"nodeType":"YulIf","src":"2908:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3012:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3016:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3005:6:181"},"nodeType":"YulFunctionCall","src":"3005:22:181"},"nodeType":"YulExpressionStatement","src":"3005:22:181"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2816:6:181","type":""}],"src":"2786:247:181"},{"body":{"nodeType":"YulBlock","src":"3097:342:181","statements":[{"body":{"nodeType":"YulBlock","src":"3141:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3150:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3153:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3143:6:181"},"nodeType":"YulFunctionCall","src":"3143:12:181"},"nodeType":"YulExpressionStatement","src":"3143:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"3118:3:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3123:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3114:3:181"},"nodeType":"YulFunctionCall","src":"3114:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"3135:4:181","type":"","value":"0x20"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3110:3:181"},"nodeType":"YulFunctionCall","src":"3110:30:181"},"nodeType":"YulIf","src":"3107:50:181"},{"nodeType":"YulVariableDeclaration","src":"3166:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3186:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3180:5:181"},"nodeType":"YulFunctionCall","src":"3180:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"3170:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3198:35:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3220:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3228:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3216:3:181"},"nodeType":"YulFunctionCall","src":"3216:17:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"3202:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3308:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"3310:16:181"},"nodeType":"YulFunctionCall","src":"3310:18:181"},"nodeType":"YulExpressionStatement","src":"3310:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3251:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"3263:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3248:2:181"},"nodeType":"YulFunctionCall","src":"3248:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3287:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"3299:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3284:2:181"},"nodeType":"YulFunctionCall","src":"3284:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"3245:2:181"},"nodeType":"YulFunctionCall","src":"3245:62:181"},"nodeType":"YulIf","src":"3242:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3346:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3350:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3339:6:181"},"nodeType":"YulFunctionCall","src":"3339:22:181"},"nodeType":"YulExpressionStatement","src":"3339:22:181"},{"nodeType":"YulAssignment","src":"3370:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"3379:6:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3370:5:181"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3401:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3422:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3409:12:181"},"nodeType":"YulFunctionCall","src":"3409:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3394:6:181"},"nodeType":"YulFunctionCall","src":"3394:39:181"},"nodeType":"YulExpressionStatement","src":"3394:39:181"}]},"name":"abi_decode_struct_Fr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3068:9:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"3079:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3087:5:181","type":""}],"src":"3038:401:181"},{"body":{"nodeType":"YulBlock","src":"3508:218:181","statements":[{"body":{"nodeType":"YulBlock","src":"3552:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3561:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3564:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3554:6:181"},"nodeType":"YulFunctionCall","src":"3554:12:181"},"nodeType":"YulExpressionStatement","src":"3554:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"3529:3:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3534:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3525:3:181"},"nodeType":"YulFunctionCall","src":"3525:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"3546:4:181","type":"","value":"0x40"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3521:3:181"},"nodeType":"YulFunctionCall","src":"3521:30:181"},"nodeType":"YulIf","src":"3518:50:181"},{"nodeType":"YulAssignment","src":"3577:31:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_2863","nodeType":"YulIdentifier","src":"3586:20:181"},"nodeType":"YulFunctionCall","src":"3586:22:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3577:5:181"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3624:5:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3644:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3631:12:181"},"nodeType":"YulFunctionCall","src":"3631:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3617:6:181"},"nodeType":"YulFunctionCall","src":"3617:38:181"},"nodeType":"YulExpressionStatement","src":"3617:38:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3675:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"3682:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3671:3:181"},"nodeType":"YulFunctionCall","src":"3671:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3704:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3715:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3700:3:181"},"nodeType":"YulFunctionCall","src":"3700:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3687:12:181"},"nodeType":"YulFunctionCall","src":"3687:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3664:6:181"},"nodeType":"YulFunctionCall","src":"3664:56:181"},"nodeType":"YulExpressionStatement","src":"3664:56:181"}]},"name":"abi_decode_struct_G1Point","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3479:9:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"3490:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3498:5:181","type":""}],"src":"3444:282:181"},{"body":{"nodeType":"YulBlock","src":"3798:441:181","statements":[{"body":{"nodeType":"YulBlock","src":"3847:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3856:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3859:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3849:6:181"},"nodeType":"YulFunctionCall","src":"3849:12:181"},"nodeType":"YulExpressionStatement","src":"3849:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3826:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3834:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3822:3:181"},"nodeType":"YulFunctionCall","src":"3822:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"3841:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3818:3:181"},"nodeType":"YulFunctionCall","src":"3818:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3811:6:181"},"nodeType":"YulFunctionCall","src":"3811:35:181"},"nodeType":"YulIf","src":"3808:55:181"},{"nodeType":"YulVariableDeclaration","src":"3872:33:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_5696","nodeType":"YulIdentifier","src":"3883:20:181"},"nodeType":"YulFunctionCall","src":"3883:22:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"3876:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3914:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"3927:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"3918:5:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3939:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3957:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3965:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3953:3:181"},"nodeType":"YulFunctionCall","src":"3953:16:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"3943:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3997:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4006:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4009:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3999:6:181"},"nodeType":"YulFunctionCall","src":"3999:12:181"},"nodeType":"YulExpressionStatement","src":"3999:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"3984:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"3992:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3981:2:181"},"nodeType":"YulFunctionCall","src":"3981:15:181"},"nodeType":"YulIf","src":"3978:35:181"},{"nodeType":"YulVariableDeclaration","src":"4022:17:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"4033:6:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"4026:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4104:106:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4125:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4156:3:181"},{"name":"end","nodeType":"YulIdentifier","src":"4161:3:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"4130:25:181"},"nodeType":"YulFunctionCall","src":"4130:35:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4118:6:181"},"nodeType":"YulFunctionCall","src":"4118:48:181"},"nodeType":"YulExpressionStatement","src":"4118:48:181"},{"nodeType":"YulAssignment","src":"4179:21:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4190:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"4195:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4186:3:181"},"nodeType":"YulFunctionCall","src":"4186:14:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"4179:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4059:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"4064:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4056:2:181"},"nodeType":"YulFunctionCall","src":"4056:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4072:23:181","statements":[{"nodeType":"YulAssignment","src":"4074:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4085:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"4090:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4081:3:181"},"nodeType":"YulFunctionCall","src":"4081:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"4074:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"4052:3:181","statements":[]},"src":"4048:162:181"},{"nodeType":"YulAssignment","src":"4219:14:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"4228:5:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"4219:5:181"}]}]},"name":"abi_decode_array_struct_G1Point","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3772:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"3780:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"3788:5:181","type":""}],"src":"3731:508:181"},{"body":{"nodeType":"YulBlock","src":"4315:625:181","statements":[{"body":{"nodeType":"YulBlock","src":"4364:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4373:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4376:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4366:6:181"},"nodeType":"YulFunctionCall","src":"4366:12:181"},"nodeType":"YulExpressionStatement","src":"4366:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4343:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4351:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4339:3:181"},"nodeType":"YulFunctionCall","src":"4339:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"4358:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4335:3:181"},"nodeType":"YulFunctionCall","src":"4335:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4328:6:181"},"nodeType":"YulFunctionCall","src":"4328:35:181"},"nodeType":"YulIf","src":"4325:55:181"},{"nodeType":"YulVariableDeclaration","src":"4389:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4399:2:181","type":"","value":"64"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4393:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4410:23:181","value":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"4430:2:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4424:5:181"},"nodeType":"YulFunctionCall","src":"4424:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"4414:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4442:34:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4464:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4472:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4460:3:181"},"nodeType":"YulFunctionCall","src":"4460:16:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"4446:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4551:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"4553:16:181"},"nodeType":"YulFunctionCall","src":"4553:18:181"},"nodeType":"YulExpressionStatement","src":"4553:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4494:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"4506:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4491:2:181"},"nodeType":"YulFunctionCall","src":"4491:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4530:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"4542:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4527:2:181"},"nodeType":"YulFunctionCall","src":"4527:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"4488:2:181"},"nodeType":"YulFunctionCall","src":"4488:62:181"},"nodeType":"YulIf","src":"4485:88:181"},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"4589:2:181"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4593:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4582:6:181"},"nodeType":"YulFunctionCall","src":"4582:22:181"},"nodeType":"YulExpressionStatement","src":"4582:22:181"},{"nodeType":"YulVariableDeclaration","src":"4613:17:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"4624:6:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"4617:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4639:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4657:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4665:3:181","type":"","value":"448"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4653:3:181"},"nodeType":"YulFunctionCall","src":"4653:16:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"4643:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4697:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4706:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4709:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4699:6:181"},"nodeType":"YulFunctionCall","src":"4699:12:181"},"nodeType":"YulExpressionStatement","src":"4699:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"4684:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"4692:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4681:2:181"},"nodeType":"YulFunctionCall","src":"4681:15:181"},"nodeType":"YulIf","src":"4678:35:181"},{"nodeType":"YulVariableDeclaration","src":"4722:17:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"4733:6:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"4726:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4804:106:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4825:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4856:3:181"},{"name":"end","nodeType":"YulIdentifier","src":"4861:3:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"4830:25:181"},"nodeType":"YulFunctionCall","src":"4830:35:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4818:6:181"},"nodeType":"YulFunctionCall","src":"4818:48:181"},"nodeType":"YulExpressionStatement","src":"4818:48:181"},{"nodeType":"YulAssignment","src":"4879:21:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4890:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"4895:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4886:3:181"},"nodeType":"YulFunctionCall","src":"4886:14:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"4879:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4759:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"4764:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4756:2:181"},"nodeType":"YulFunctionCall","src":"4756:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4772:23:181","statements":[{"nodeType":"YulAssignment","src":"4774:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4785:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4790:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4781:3:181"},"nodeType":"YulFunctionCall","src":"4781:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"4774:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"4752:3:181","statements":[]},"src":"4748:162:181"},{"nodeType":"YulAssignment","src":"4919:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"4928:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"4919:5:181"}]}]},"name":"abi_decode_t_array_t_struct_G1Point","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"4289:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"4297:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"4305:5:181","type":""}],"src":"4244:696:181"},{"body":{"nodeType":"YulBlock","src":"5034:438:181","statements":[{"body":{"nodeType":"YulBlock","src":"5083:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5092:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5095:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5085:6:181"},"nodeType":"YulFunctionCall","src":"5085:12:181"},"nodeType":"YulExpressionStatement","src":"5085:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5062:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5070:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5058:3:181"},"nodeType":"YulFunctionCall","src":"5058:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"5077:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5054:3:181"},"nodeType":"YulFunctionCall","src":"5054:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5047:6:181"},"nodeType":"YulFunctionCall","src":"5047:35:181"},"nodeType":"YulIf","src":"5044:55:181"},{"nodeType":"YulVariableDeclaration","src":"5108:28:181","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"5119:15:181"},"nodeType":"YulFunctionCall","src":"5119:17:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"5112:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5145:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"5158:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"5149:5:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5170:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5188:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5196:3:181","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5184:3:181"},"nodeType":"YulFunctionCall","src":"5184:16:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"5174:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5228:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5237:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5240:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5230:6:181"},"nodeType":"YulFunctionCall","src":"5230:12:181"},"nodeType":"YulExpressionStatement","src":"5230:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"5215:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"5223:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5212:2:181"},"nodeType":"YulFunctionCall","src":"5212:15:181"},"nodeType":"YulIf","src":"5209:35:181"},{"nodeType":"YulVariableDeclaration","src":"5253:17:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"5264:6:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"5257:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5337:106:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5358:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5389:3:181"},{"name":"end","nodeType":"YulIdentifier","src":"5394:3:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"5363:25:181"},"nodeType":"YulFunctionCall","src":"5363:35:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5351:6:181"},"nodeType":"YulFunctionCall","src":"5351:48:181"},"nodeType":"YulExpressionStatement","src":"5351:48:181"},{"nodeType":"YulAssignment","src":"5412:21:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5423:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"5428:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5419:3:181"},"nodeType":"YulFunctionCall","src":"5419:14:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"5412:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5290:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"5295:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5287:2:181"},"nodeType":"YulFunctionCall","src":"5287:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5303:25:181","statements":[{"nodeType":"YulAssignment","src":"5305:21:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5316:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"5321:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5312:3:181"},"nodeType":"YulFunctionCall","src":"5312:14:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"5305:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"5283:3:181","statements":[]},"src":"5279:164:181"},{"nodeType":"YulAssignment","src":"5452:14:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"5461:5:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"5452:5:181"}]}]},"name":"abi_decode_array_struct_G1Point_memory_ptr_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"5008:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"5016:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"5024:5:181","type":""}],"src":"4945:527:181"},{"body":{"nodeType":"YulBlock","src":"5543:599:181","statements":[{"body":{"nodeType":"YulBlock","src":"5592:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5601:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5604:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5594:6:181"},"nodeType":"YulFunctionCall","src":"5594:12:181"},"nodeType":"YulExpressionStatement","src":"5594:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5571:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5579:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5567:3:181"},"nodeType":"YulFunctionCall","src":"5567:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"5586:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5563:3:181"},"nodeType":"YulFunctionCall","src":"5563:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5556:6:181"},"nodeType":"YulFunctionCall","src":"5556:35:181"},"nodeType":"YulIf","src":"5553:55:181"},{"nodeType":"YulVariableDeclaration","src":"5617:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5637:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5631:5:181"},"nodeType":"YulFunctionCall","src":"5631:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"5621:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5649:33:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"5671:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5679:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5667:3:181"},"nodeType":"YulFunctionCall","src":"5667:15:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"5653:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5757:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"5759:16:181"},"nodeType":"YulFunctionCall","src":"5759:18:181"},"nodeType":"YulExpressionStatement","src":"5759:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"5700:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"5712:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5697:2:181"},"nodeType":"YulFunctionCall","src":"5697:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"5736:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"5748:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5733:2:181"},"nodeType":"YulFunctionCall","src":"5733:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"5694:2:181"},"nodeType":"YulFunctionCall","src":"5694:62:181"},"nodeType":"YulIf","src":"5691:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5795:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"5799:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5788:6:181"},"nodeType":"YulFunctionCall","src":"5788:22:181"},"nodeType":"YulExpressionStatement","src":"5788:22:181"},{"nodeType":"YulVariableDeclaration","src":"5819:17:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"5830:6:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"5823:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5845:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5863:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5871:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5859:3:181"},"nodeType":"YulFunctionCall","src":"5859:15:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"5849:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5902:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5911:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5914:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5904:6:181"},"nodeType":"YulFunctionCall","src":"5904:12:181"},"nodeType":"YulExpressionStatement","src":"5904:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"5889:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"5897:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5886:2:181"},"nodeType":"YulFunctionCall","src":"5886:15:181"},"nodeType":"YulIf","src":"5883:35:181"},{"nodeType":"YulVariableDeclaration","src":"5927:17:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"5938:6:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"5931:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6011:101:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6032:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"6058:3:181"},{"name":"end","nodeType":"YulIdentifier","src":"6063:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"6037:20:181"},"nodeType":"YulFunctionCall","src":"6037:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6025:6:181"},"nodeType":"YulFunctionCall","src":"6025:43:181"},"nodeType":"YulExpressionStatement","src":"6025:43:181"},{"nodeType":"YulAssignment","src":"6081:21:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6092:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"6097:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6088:3:181"},"nodeType":"YulFunctionCall","src":"6088:14:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"6081:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5964:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"5969:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5961:2:181"},"nodeType":"YulFunctionCall","src":"5961:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5977:25:181","statements":[{"nodeType":"YulAssignment","src":"5979:21:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5990:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"5995:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5986:3:181"},"nodeType":"YulFunctionCall","src":"5986:14:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"5979:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"5957:3:181","statements":[]},"src":"5953:159:181"},{"nodeType":"YulAssignment","src":"6121:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"6130:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"6121:5:181"}]}]},"name":"abi_decode_t_array_t_struct_Fr","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"5517:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"5525:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"5533:5:181","type":""}],"src":"5477:665:181"},{"body":{"nodeType":"YulBlock","src":"6207:424:181","statements":[{"body":{"nodeType":"YulBlock","src":"6256:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6265:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6268:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6258:6:181"},"nodeType":"YulFunctionCall","src":"6258:12:181"},"nodeType":"YulExpressionStatement","src":"6258:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6235:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6243:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6231:3:181"},"nodeType":"YulFunctionCall","src":"6231:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"6250:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6227:3:181"},"nodeType":"YulFunctionCall","src":"6227:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6220:6:181"},"nodeType":"YulFunctionCall","src":"6220:35:181"},"nodeType":"YulIf","src":"6217:55:181"},{"nodeType":"YulVariableDeclaration","src":"6281:33:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_5696","nodeType":"YulIdentifier","src":"6292:20:181"},"nodeType":"YulFunctionCall","src":"6292:22:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"6285:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6323:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"6336:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"6327:5:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6348:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6366:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6374:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6362:3:181"},"nodeType":"YulFunctionCall","src":"6362:15:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"6352:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6405:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6414:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6417:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6407:6:181"},"nodeType":"YulFunctionCall","src":"6407:12:181"},"nodeType":"YulExpressionStatement","src":"6407:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"6392:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"6400:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6389:2:181"},"nodeType":"YulFunctionCall","src":"6389:15:181"},"nodeType":"YulIf","src":"6386:35:181"},{"nodeType":"YulVariableDeclaration","src":"6430:17:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"6441:6:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"6434:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6514:88:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6535:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"6553:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6540:12:181"},"nodeType":"YulFunctionCall","src":"6540:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6528:6:181"},"nodeType":"YulFunctionCall","src":"6528:30:181"},"nodeType":"YulExpressionStatement","src":"6528:30:181"},{"nodeType":"YulAssignment","src":"6571:21:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6582:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"6587:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6578:3:181"},"nodeType":"YulFunctionCall","src":"6578:14:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"6571:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"6467:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"6472:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6464:2:181"},"nodeType":"YulFunctionCall","src":"6464:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6480:25:181","statements":[{"nodeType":"YulAssignment","src":"6482:21:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"6493:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"6498:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6489:3:181"},"nodeType":"YulFunctionCall","src":"6489:14:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"6482:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"6460:3:181","statements":[]},"src":"6456:146:181"},{"nodeType":"YulAssignment","src":"6611:14:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"6620:5:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"6611:5:181"}]}]},"name":"abi_decode_array_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"6181:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"6189:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"6197:5:181","type":""}],"src":"6147:484:181"},{"body":{"nodeType":"YulBlock","src":"6703:780:181","statements":[{"body":{"nodeType":"YulBlock","src":"6752:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6761:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6764:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6754:6:181"},"nodeType":"YulFunctionCall","src":"6754:12:181"},"nodeType":"YulExpressionStatement","src":"6754:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6731:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6739:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6727:3:181"},"nodeType":"YulFunctionCall","src":"6727:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"6746:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6723:3:181"},"nodeType":"YulFunctionCall","src":"6723:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6716:6:181"},"nodeType":"YulFunctionCall","src":"6716:35:181"},"nodeType":"YulIf","src":"6713:55:181"},{"nodeType":"YulVariableDeclaration","src":"6777:33:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_5696","nodeType":"YulIdentifier","src":"6788:20:181"},"nodeType":"YulFunctionCall","src":"6788:22:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"6781:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6819:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"6832:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"6823:5:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6844:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6862:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6870:3:181","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6858:3:181"},"nodeType":"YulFunctionCall","src":"6858:16:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"6848:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6902:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6911:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6914:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6904:6:181"},"nodeType":"YulFunctionCall","src":"6904:12:181"},"nodeType":"YulExpressionStatement","src":"6904:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"6889:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"6897:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6886:2:181"},"nodeType":"YulFunctionCall","src":"6886:15:181"},"nodeType":"YulIf","src":"6883:35:181"},{"nodeType":"YulVariableDeclaration","src":"6927:17:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"6938:6:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"6931:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7011:443:181","statements":[{"body":{"nodeType":"YulBlock","src":"7065:74:181","statements":[{"nodeType":"YulVariableDeclaration","src":"7083:11:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7093:1:181","type":"","value":"0"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7087:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"7118:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7122:2:181"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7111:6:181"},"nodeType":"YulFunctionCall","src":"7111:14:181"},"nodeType":"YulExpressionStatement","src":"7111:14:181"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"7036:3:181"},{"name":"src","nodeType":"YulIdentifier","src":"7041:3:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7032:3:181"},"nodeType":"YulFunctionCall","src":"7032:13:181"},{"kind":"number","nodeType":"YulLiteral","src":"7047:4:181","type":"","value":"0x80"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7028:3:181"},"nodeType":"YulFunctionCall","src":"7028:24:181"},"nodeType":"YulIf","src":"7025:114:181"},{"nodeType":"YulVariableDeclaration","src":"7152:35:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_2863","nodeType":"YulIdentifier","src":"7165:20:181"},"nodeType":"YulFunctionCall","src":"7165:22:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7156:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7207:5:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"7239:3:181"},{"name":"end","nodeType":"YulIdentifier","src":"7244:3:181"}],"functionName":{"name":"abi_decode_array_uint256","nodeType":"YulIdentifier","src":"7214:24:181"},"nodeType":"YulFunctionCall","src":"7214:34:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7200:6:181"},"nodeType":"YulFunctionCall","src":"7200:49:181"},"nodeType":"YulExpressionStatement","src":"7200:49:181"},{"nodeType":"YulVariableDeclaration","src":"7262:53:181","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"7301:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"7306:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7297:3:181"},"nodeType":"YulFunctionCall","src":"7297:12:181"},{"name":"end","nodeType":"YulIdentifier","src":"7311:3:181"}],"functionName":{"name":"abi_decode_array_uint256","nodeType":"YulIdentifier","src":"7272:24:181"},"nodeType":"YulFunctionCall","src":"7272:43:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"7266:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7328:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7338:4:181","type":"","value":"0x20"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"7332:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7366:5:181"},{"name":"_3","nodeType":"YulIdentifier","src":"7373:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7362:3:181"},"nodeType":"YulFunctionCall","src":"7362:14:181"},{"name":"_2","nodeType":"YulIdentifier","src":"7378:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7355:6:181"},"nodeType":"YulFunctionCall","src":"7355:26:181"},"nodeType":"YulExpressionStatement","src":"7355:26:181"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"7401:3:181"},{"name":"value","nodeType":"YulIdentifier","src":"7406:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7394:6:181"},"nodeType":"YulFunctionCall","src":"7394:18:181"},"nodeType":"YulExpressionStatement","src":"7394:18:181"},{"nodeType":"YulAssignment","src":"7425:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"7436:3:181"},{"name":"_3","nodeType":"YulIdentifier","src":"7441:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7432:3:181"},"nodeType":"YulFunctionCall","src":"7432:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"7425:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"6964:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"6969:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6961:2:181"},"nodeType":"YulFunctionCall","src":"6961:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6977:25:181","statements":[{"nodeType":"YulAssignment","src":"6979:21:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"6990:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"6995:4:181","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6986:3:181"},"nodeType":"YulFunctionCall","src":"6986:14:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"6979:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"6957:3:181","statements":[]},"src":"6953:501:181"},{"nodeType":"YulAssignment","src":"7463:14:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"7472:5:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"7463:5:181"}]}]},"name":"abi_decode_array_struct_G2Point","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"6677:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"6685:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"6693:5:181","type":""}],"src":"6636:847:181"},{"body":{"nodeType":"YulBlock","src":"7552:838:181","statements":[{"body":{"nodeType":"YulBlock","src":"7601:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7610:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7613:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7603:6:181"},"nodeType":"YulFunctionCall","src":"7603:12:181"},"nodeType":"YulExpressionStatement","src":"7603:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7580:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"7588:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7576:3:181"},"nodeType":"YulFunctionCall","src":"7576:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"7595:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7572:3:181"},"nodeType":"YulFunctionCall","src":"7572:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7565:6:181"},"nodeType":"YulFunctionCall","src":"7565:35:181"},"nodeType":"YulIf","src":"7562:55:181"},{"nodeType":"YulVariableDeclaration","src":"7626:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7649:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7636:12:181"},"nodeType":"YulFunctionCall","src":"7636:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7630:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7665:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7675:4:181","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"7669:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7688:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7698:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"7692:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7739:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7741:16:181"},"nodeType":"YulFunctionCall","src":"7741:18:181"},"nodeType":"YulExpressionStatement","src":"7741:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"7731:2:181"},{"name":"_3","nodeType":"YulIdentifier","src":"7735:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7728:2:181"},"nodeType":"YulFunctionCall","src":"7728:10:181"},"nodeType":"YulIf","src":"7725:36:181"},{"nodeType":"YulVariableDeclaration","src":"7770:20:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7784:1:181","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"7787:2:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7780:3:181"},"nodeType":"YulFunctionCall","src":"7780:10:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"7774:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7799:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7819:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7813:5:181"},"nodeType":"YulFunctionCall","src":"7813:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"7803:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7831:56:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7853:6:181"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"7869:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"7873:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7865:3:181"},"nodeType":"YulFunctionCall","src":"7865:11:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7882:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7878:3:181"},"nodeType":"YulFunctionCall","src":"7878:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7861:3:181"},"nodeType":"YulFunctionCall","src":"7861:25:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7849:3:181"},"nodeType":"YulFunctionCall","src":"7849:38:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"7835:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7946:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7948:16:181"},"nodeType":"YulFunctionCall","src":"7948:18:181"},"nodeType":"YulExpressionStatement","src":"7948:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7905:10:181"},{"name":"_3","nodeType":"YulIdentifier","src":"7917:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7902:2:181"},"nodeType":"YulFunctionCall","src":"7902:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7925:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"7937:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7922:2:181"},"nodeType":"YulFunctionCall","src":"7922:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7899:2:181"},"nodeType":"YulFunctionCall","src":"7899:46:181"},"nodeType":"YulIf","src":"7896:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7984:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7988:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7977:6:181"},"nodeType":"YulFunctionCall","src":"7977:22:181"},"nodeType":"YulExpressionStatement","src":"7977:22:181"},{"nodeType":"YulVariableDeclaration","src":"8008:17:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"8019:6:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"8012:3:181","type":""}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"8041:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8049:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8034:6:181"},"nodeType":"YulFunctionCall","src":"8034:18:181"},"nodeType":"YulExpressionStatement","src":"8034:18:181"},{"nodeType":"YulAssignment","src":"8061:22:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"8072:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"8080:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8068:3:181"},"nodeType":"YulFunctionCall","src":"8068:15:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"8061:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"8092:38:181","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8114:6:181"},{"name":"_4","nodeType":"YulIdentifier","src":"8122:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8110:3:181"},"nodeType":"YulFunctionCall","src":"8110:15:181"},{"name":"_2","nodeType":"YulIdentifier","src":"8127:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8106:3:181"},"nodeType":"YulFunctionCall","src":"8106:24:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"8096:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8158:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8167:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8170:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8160:6:181"},"nodeType":"YulFunctionCall","src":"8160:12:181"},"nodeType":"YulExpressionStatement","src":"8160:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"8145:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"8153:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8142:2:181"},"nodeType":"YulFunctionCall","src":"8142:15:181"},"nodeType":"YulIf","src":"8139:35:181"},{"nodeType":"YulVariableDeclaration","src":"8183:26:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8198:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"8206:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8194:3:181"},"nodeType":"YulFunctionCall","src":"8194:15:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"8187:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8274:86:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"8295:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"8313:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8300:12:181"},"nodeType":"YulFunctionCall","src":"8300:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8288:6:181"},"nodeType":"YulFunctionCall","src":"8288:30:181"},"nodeType":"YulExpressionStatement","src":"8288:30:181"},{"nodeType":"YulAssignment","src":"8331:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"8342:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"8347:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8338:3:181"},"nodeType":"YulFunctionCall","src":"8338:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"8331:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"8229:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"8234:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8226:2:181"},"nodeType":"YulFunctionCall","src":"8226:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"8242:23:181","statements":[{"nodeType":"YulAssignment","src":"8244:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"8255:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"8260:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8251:3:181"},"nodeType":"YulFunctionCall","src":"8251:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"8244:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"8222:3:181","statements":[]},"src":"8218:142:181"},{"nodeType":"YulAssignment","src":"8369:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"8378:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"8369:5:181"}]}]},"name":"abi_decode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7526:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"7534:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"7542:5:181","type":""}],"src":"7488:902:181"},{"body":{"nodeType":"YulBlock","src":"8457:433:181","statements":[{"body":{"nodeType":"YulBlock","src":"8506:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8515:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8518:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8508:6:181"},"nodeType":"YulFunctionCall","src":"8508:12:181"},"nodeType":"YulExpressionStatement","src":"8508:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8485:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8493:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8481:3:181"},"nodeType":"YulFunctionCall","src":"8481:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"8500:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8477:3:181"},"nodeType":"YulFunctionCall","src":"8477:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8470:6:181"},"nodeType":"YulFunctionCall","src":"8470:35:181"},"nodeType":"YulIf","src":"8467:55:181"},{"nodeType":"YulVariableDeclaration","src":"8531:28:181","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"8542:15:181"},"nodeType":"YulFunctionCall","src":"8542:17:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"8535:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8568:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"8581:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"8572:5:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8593:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8611:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8619:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8607:3:181"},"nodeType":"YulFunctionCall","src":"8607:16:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"8597:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8651:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8660:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8663:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8653:6:181"},"nodeType":"YulFunctionCall","src":"8653:12:181"},"nodeType":"YulExpressionStatement","src":"8653:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"8638:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"8646:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8635:2:181"},"nodeType":"YulFunctionCall","src":"8635:15:181"},"nodeType":"YulIf","src":"8632:35:181"},{"nodeType":"YulVariableDeclaration","src":"8676:17:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"8687:6:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"8680:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8760:101:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"8781:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"8807:3:181"},{"name":"end","nodeType":"YulIdentifier","src":"8812:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"8786:20:181"},"nodeType":"YulFunctionCall","src":"8786:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8774:6:181"},"nodeType":"YulFunctionCall","src":"8774:43:181"},"nodeType":"YulExpressionStatement","src":"8774:43:181"},{"nodeType":"YulAssignment","src":"8830:21:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"8841:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"8846:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8837:3:181"},"nodeType":"YulFunctionCall","src":"8837:14:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"8830:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"8713:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"8718:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8710:2:181"},"nodeType":"YulFunctionCall","src":"8710:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"8726:25:181","statements":[{"nodeType":"YulAssignment","src":"8728:21:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"8739:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"8744:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8735:3:181"},"nodeType":"YulFunctionCall","src":"8735:14:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"8728:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"8706:3:181","statements":[]},"src":"8702:159:181"},{"nodeType":"YulAssignment","src":"8870:14:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"8879:5:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"8870:5:181"}]}]},"name":"abi_decode_array_struct_Fr","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"8431:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"8439:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"8447:5:181","type":""}],"src":"8395:495:181"},{"body":{"nodeType":"YulBlock","src":"8979:616:181","statements":[{"body":{"nodeType":"YulBlock","src":"9028:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9037:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9040:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9030:6:181"},"nodeType":"YulFunctionCall","src":"9030:12:181"},"nodeType":"YulExpressionStatement","src":"9030:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9007:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"9015:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9003:3:181"},"nodeType":"YulFunctionCall","src":"9003:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"9022:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8999:3:181"},"nodeType":"YulFunctionCall","src":"8999:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8992:6:181"},"nodeType":"YulFunctionCall","src":"8992:35:181"},"nodeType":"YulIf","src":"8989:55:181"},{"nodeType":"YulVariableDeclaration","src":"9053:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9073:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9067:5:181"},"nodeType":"YulFunctionCall","src":"9067:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"9057:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9085:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"9095:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9089:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9106:33:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"9128:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9136:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9124:3:181"},"nodeType":"YulFunctionCall","src":"9124:15:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"9110:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9214:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"9216:16:181"},"nodeType":"YulFunctionCall","src":"9216:18:181"},"nodeType":"YulExpressionStatement","src":"9216:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"9157:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"9169:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9154:2:181"},"nodeType":"YulFunctionCall","src":"9154:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"9193:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"9205:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9190:2:181"},"nodeType":"YulFunctionCall","src":"9190:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"9151:2:181"},"nodeType":"YulFunctionCall","src":"9151:62:181"},"nodeType":"YulIf","src":"9148:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9252:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"9256:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9245:6:181"},"nodeType":"YulFunctionCall","src":"9245:22:181"},"nodeType":"YulExpressionStatement","src":"9245:22:181"},{"nodeType":"YulVariableDeclaration","src":"9276:17:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"9287:6:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"9280:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9302:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9320:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9328:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9316:3:181"},"nodeType":"YulFunctionCall","src":"9316:15:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"9306:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9359:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9368:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9371:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9361:6:181"},"nodeType":"YulFunctionCall","src":"9361:12:181"},"nodeType":"YulExpressionStatement","src":"9361:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"9346:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"9354:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9343:2:181"},"nodeType":"YulFunctionCall","src":"9343:15:181"},"nodeType":"YulIf","src":"9340:35:181"},{"nodeType":"YulVariableDeclaration","src":"9384:17:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"9395:6:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"9388:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9466:99:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"9487:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"9513:3:181"},{"name":"end","nodeType":"YulIdentifier","src":"9518:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"9492:20:181"},"nodeType":"YulFunctionCall","src":"9492:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9480:6:181"},"nodeType":"YulFunctionCall","src":"9480:43:181"},"nodeType":"YulExpressionStatement","src":"9480:43:181"},{"nodeType":"YulAssignment","src":"9536:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"9547:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9552:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9543:3:181"},"nodeType":"YulFunctionCall","src":"9543:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"9536:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"9421:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"9426:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9418:2:181"},"nodeType":"YulFunctionCall","src":"9418:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"9434:23:181","statements":[{"nodeType":"YulAssignment","src":"9436:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"9447:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9452:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9443:3:181"},"nodeType":"YulFunctionCall","src":"9443:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"9436:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"9414:3:181","statements":[]},"src":"9410:155:181"},{"nodeType":"YulAssignment","src":"9574:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"9583:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"9574:5:181"}]}]},"name":"abi_decode_array_struct_Fr_memory_ptr_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"8953:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"8961:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"8969:5:181","type":""}],"src":"8895:700:181"},{"body":{"nodeType":"YulBlock","src":"9662:2160:181","statements":[{"body":{"nodeType":"YulBlock","src":"9708:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9717:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9720:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9710:6:181"},"nodeType":"YulFunctionCall","src":"9710:12:181"},"nodeType":"YulExpressionStatement","src":"9710:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"9683:3:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"9688:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9679:3:181"},"nodeType":"YulFunctionCall","src":"9679:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"9700:6:181","type":"","value":"0x05a0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9675:3:181"},"nodeType":"YulFunctionCall","src":"9675:32:181"},"nodeType":"YulIf","src":"9672:52:181"},{"nodeType":"YulAssignment","src":"9733:31:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_2876","nodeType":"YulIdentifier","src":"9742:20:181"},"nodeType":"YulFunctionCall","src":"9742:22:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"9733:5:181"}]},{"nodeType":"YulVariableDeclaration","src":"9773:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9800:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9787:12:181"},"nodeType":"YulFunctionCall","src":"9787:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"9777:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9853:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9862:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9865:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9855:6:181"},"nodeType":"YulFunctionCall","src":"9855:12:181"},"nodeType":"YulExpressionStatement","src":"9855:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9825:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"9833:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9822:2:181"},"nodeType":"YulFunctionCall","src":"9822:30:181"},"nodeType":"YulIf","src":"9819:50:181"},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9885:5:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9925:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"9936:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9921:3:181"},"nodeType":"YulFunctionCall","src":"9921:22:181"},{"name":"end","nodeType":"YulIdentifier","src":"9945:3:181"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nodeType":"YulIdentifier","src":"9892:28:181"},"nodeType":"YulFunctionCall","src":"9892:57:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9878:6:181"},"nodeType":"YulFunctionCall","src":"9878:72:181"},"nodeType":"YulExpressionStatement","src":"9878:72:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9970:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9977:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9966:3:181"},"nodeType":"YulFunctionCall","src":"9966:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10040:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10051:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10036:3:181"},"nodeType":"YulFunctionCall","src":"10036:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"10056:3:181"}],"functionName":{"name":"abi_decode_array_struct_G1Point_memory_ptr_memory_ptr","nodeType":"YulIdentifier","src":"9982:53:181"},"nodeType":"YulFunctionCall","src":"9982:78:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9959:6:181"},"nodeType":"YulFunctionCall","src":"9959:102:181"},"nodeType":"YulExpressionStatement","src":"9959:102:181"},{"nodeType":"YulVariableDeclaration","src":"10070:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10080:3:181","type":"","value":"288"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10074:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10103:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"10110:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10099:3:181"},"nodeType":"YulFunctionCall","src":"10099:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10147:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10158:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10143:3:181"},"nodeType":"YulFunctionCall","src":"10143:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"10163:3:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"10117:25:181"},"nodeType":"YulFunctionCall","src":"10117:50:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10092:6:181"},"nodeType":"YulFunctionCall","src":"10092:76:181"},"nodeType":"YulExpressionStatement","src":"10092:76:181"},{"nodeType":"YulVariableDeclaration","src":"10177:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10187:3:181","type":"","value":"352"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"10181:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10210:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"10217:4:181","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10206:3:181"},"nodeType":"YulFunctionCall","src":"10206:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10282:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"10293:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10278:3:181"},"nodeType":"YulFunctionCall","src":"10278:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"10298:3:181"}],"functionName":{"name":"abi_decode_array_struct_G1Point_memory_ptr_memory_ptr","nodeType":"YulIdentifier","src":"10224:53:181"},"nodeType":"YulFunctionCall","src":"10224:78:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10199:6:181"},"nodeType":"YulFunctionCall","src":"10199:104:181"},"nodeType":"YulExpressionStatement","src":"10199:104:181"},{"nodeType":"YulVariableDeclaration","src":"10312:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10322:3:181","type":"","value":"608"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"10316:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10345:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"10352:4:181","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10341:3:181"},"nodeType":"YulFunctionCall","src":"10341:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10390:9:181"},{"name":"_3","nodeType":"YulIdentifier","src":"10401:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10386:3:181"},"nodeType":"YulFunctionCall","src":"10386:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"10406:3:181"}],"functionName":{"name":"abi_decode_array_struct_Fr","nodeType":"YulIdentifier","src":"10359:26:181"},"nodeType":"YulFunctionCall","src":"10359:51:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10334:6:181"},"nodeType":"YulFunctionCall","src":"10334:77:181"},"nodeType":"YulExpressionStatement","src":"10334:77:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10431:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"10438:4:181","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10427:3:181"},"nodeType":"YulFunctionCall","src":"10427:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10498:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10509:3:181","type":"","value":"736"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10494:3:181"},"nodeType":"YulFunctionCall","src":"10494:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"10515:3:181"}],"functionName":{"name":"abi_decode_array_struct_Fr_memory_ptr_memory_ptr","nodeType":"YulIdentifier","src":"10445:48:181"},"nodeType":"YulFunctionCall","src":"10445:74:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10420:6:181"},"nodeType":"YulFunctionCall","src":"10420:100:181"},"nodeType":"YulExpressionStatement","src":"10420:100:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10540:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"10547:4:181","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10536:3:181"},"nodeType":"YulFunctionCall","src":"10536:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10607:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10618:3:181","type":"","value":"768"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10603:3:181"},"nodeType":"YulFunctionCall","src":"10603:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"10624:3:181"}],"functionName":{"name":"abi_decode_array_struct_Fr_memory_ptr_memory_ptr","nodeType":"YulIdentifier","src":"10554:48:181"},"nodeType":"YulFunctionCall","src":"10554:74:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10529:6:181"},"nodeType":"YulFunctionCall","src":"10529:100:181"},"nodeType":"YulExpressionStatement","src":"10529:100:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10649:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"10656:4:181","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10645:3:181"},"nodeType":"YulFunctionCall","src":"10645:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10698:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10709:3:181","type":"","value":"800"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10694:3:181"},"nodeType":"YulFunctionCall","src":"10694:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"10715:3:181"}],"functionName":{"name":"abi_decode_t_array_t_struct_Fr","nodeType":"YulIdentifier","src":"10663:30:181"},"nodeType":"YulFunctionCall","src":"10663:56:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10638:6:181"},"nodeType":"YulFunctionCall","src":"10638:82:181"},"nodeType":"YulExpressionStatement","src":"10638:82:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10740:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"10747:6:181","type":"","value":"0x0100"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10736:3:181"},"nodeType":"YulFunctionCall","src":"10736:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10781:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10792:3:181","type":"","value":"896"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10777:3:181"},"nodeType":"YulFunctionCall","src":"10777:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"10798:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"10756:20:181"},"nodeType":"YulFunctionCall","src":"10756:46:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10729:6:181"},"nodeType":"YulFunctionCall","src":"10729:74:181"},"nodeType":"YulExpressionStatement","src":"10729:74:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10823:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10830:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10819:3:181"},"nodeType":"YulFunctionCall","src":"10819:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10860:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10871:3:181","type":"","value":"928"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10856:3:181"},"nodeType":"YulFunctionCall","src":"10856:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"10877:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"10835:20:181"},"nodeType":"YulFunctionCall","src":"10835:46:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10812:6:181"},"nodeType":"YulFunctionCall","src":"10812:70:181"},"nodeType":"YulExpressionStatement","src":"10812:70:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10902:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"10909:6:181","type":"","value":"0x0140"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10898:3:181"},"nodeType":"YulFunctionCall","src":"10898:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10943:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10954:3:181","type":"","value":"960"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10939:3:181"},"nodeType":"YulFunctionCall","src":"10939:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"10960:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"10918:20:181"},"nodeType":"YulFunctionCall","src":"10918:46:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10891:6:181"},"nodeType":"YulFunctionCall","src":"10891:74:181"},"nodeType":"YulExpressionStatement","src":"10891:74:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10985:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"10992:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10981:3:181"},"nodeType":"YulFunctionCall","src":"10981:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11027:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11038:3:181","type":"","value":"992"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11023:3:181"},"nodeType":"YulFunctionCall","src":"11023:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"11044:3:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"10997:25:181"},"nodeType":"YulFunctionCall","src":"10997:51:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10974:6:181"},"nodeType":"YulFunctionCall","src":"10974:75:181"},"nodeType":"YulExpressionStatement","src":"10974:75:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11069:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11076:6:181","type":"","value":"0x0180"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11065:3:181"},"nodeType":"YulFunctionCall","src":"11065:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11115:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11126:4:181","type":"","value":"1056"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11111:3:181"},"nodeType":"YulFunctionCall","src":"11111:20:181"},{"name":"end","nodeType":"YulIdentifier","src":"11133:3:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"11085:25:181"},"nodeType":"YulFunctionCall","src":"11085:52:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11058:6:181"},"nodeType":"YulFunctionCall","src":"11058:80:181"},"nodeType":"YulExpressionStatement","src":"11058:80:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11158:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11165:6:181","type":"","value":"0x01a0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11154:3:181"},"nodeType":"YulFunctionCall","src":"11154:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11199:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11210:4:181","type":"","value":"1120"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11195:3:181"},"nodeType":"YulFunctionCall","src":"11195:20:181"},{"name":"end","nodeType":"YulIdentifier","src":"11217:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"11174:20:181"},"nodeType":"YulFunctionCall","src":"11174:47:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11147:6:181"},"nodeType":"YulFunctionCall","src":"11147:75:181"},"nodeType":"YulExpressionStatement","src":"11147:75:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11242:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11249:6:181","type":"","value":"0x01c0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11238:3:181"},"nodeType":"YulFunctionCall","src":"11238:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11283:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11294:4:181","type":"","value":"1152"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11279:3:181"},"nodeType":"YulFunctionCall","src":"11279:20:181"},{"name":"end","nodeType":"YulIdentifier","src":"11301:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"11258:20:181"},"nodeType":"YulFunctionCall","src":"11258:47:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11231:6:181"},"nodeType":"YulFunctionCall","src":"11231:75:181"},"nodeType":"YulExpressionStatement","src":"11231:75:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11326:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11333:6:181","type":"","value":"0x01e0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11322:3:181"},"nodeType":"YulFunctionCall","src":"11322:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11367:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11378:4:181","type":"","value":"1184"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11363:3:181"},"nodeType":"YulFunctionCall","src":"11363:20:181"},{"name":"end","nodeType":"YulIdentifier","src":"11385:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"11342:20:181"},"nodeType":"YulFunctionCall","src":"11342:47:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11315:6:181"},"nodeType":"YulFunctionCall","src":"11315:75:181"},"nodeType":"YulExpressionStatement","src":"11315:75:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11410:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11417:6:181","type":"","value":"0x0200"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11406:3:181"},"nodeType":"YulFunctionCall","src":"11406:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11451:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11462:4:181","type":"","value":"1216"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11447:3:181"},"nodeType":"YulFunctionCall","src":"11447:20:181"},{"name":"end","nodeType":"YulIdentifier","src":"11469:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"11426:20:181"},"nodeType":"YulFunctionCall","src":"11426:47:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11399:6:181"},"nodeType":"YulFunctionCall","src":"11399:75:181"},"nodeType":"YulExpressionStatement","src":"11399:75:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11494:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11501:6:181","type":"","value":"0x0220"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11490:3:181"},"nodeType":"YulFunctionCall","src":"11490:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11535:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11546:4:181","type":"","value":"1248"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11531:3:181"},"nodeType":"YulFunctionCall","src":"11531:20:181"},{"name":"end","nodeType":"YulIdentifier","src":"11553:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"11510:20:181"},"nodeType":"YulFunctionCall","src":"11510:47:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11483:6:181"},"nodeType":"YulFunctionCall","src":"11483:75:181"},"nodeType":"YulExpressionStatement","src":"11483:75:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11578:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11585:6:181","type":"","value":"0x0240"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11574:3:181"},"nodeType":"YulFunctionCall","src":"11574:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11619:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11630:4:181","type":"","value":"1280"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11615:3:181"},"nodeType":"YulFunctionCall","src":"11615:20:181"},{"name":"end","nodeType":"YulIdentifier","src":"11637:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"11594:20:181"},"nodeType":"YulFunctionCall","src":"11594:47:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11567:6:181"},"nodeType":"YulFunctionCall","src":"11567:75:181"},"nodeType":"YulExpressionStatement","src":"11567:75:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11662:5:181"},{"name":"_3","nodeType":"YulIdentifier","src":"11669:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11658:3:181"},"nodeType":"YulFunctionCall","src":"11658:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11704:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11715:4:181","type":"","value":"1312"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11700:3:181"},"nodeType":"YulFunctionCall","src":"11700:20:181"},{"name":"end","nodeType":"YulIdentifier","src":"11722:3:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"11674:25:181"},"nodeType":"YulFunctionCall","src":"11674:52:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11651:6:181"},"nodeType":"YulFunctionCall","src":"11651:76:181"},"nodeType":"YulExpressionStatement","src":"11651:76:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11747:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11754:6:181","type":"","value":"0x0280"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11743:3:181"},"nodeType":"YulFunctionCall","src":"11743:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11793:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11804:4:181","type":"","value":"1376"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11789:3:181"},"nodeType":"YulFunctionCall","src":"11789:20:181"},{"name":"end","nodeType":"YulIdentifier","src":"11811:3:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"11763:25:181"},"nodeType":"YulFunctionCall","src":"11763:52:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11736:6:181"},"nodeType":"YulFunctionCall","src":"11736:80:181"},"nodeType":"YulExpressionStatement","src":"11736:80:181"}]},"name":"abi_decode_struct_Proof","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9633:9:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"9644:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"9652:5:181","type":""}],"src":"9600:2222:181"},{"body":{"nodeType":"YulBlock","src":"11915:621:181","statements":[{"body":{"nodeType":"YulBlock","src":"11964:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11973:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11976:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11966:6:181"},"nodeType":"YulFunctionCall","src":"11966:12:181"},"nodeType":"YulExpressionStatement","src":"11966:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"11943:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11951:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11939:3:181"},"nodeType":"YulFunctionCall","src":"11939:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"11958:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11935:3:181"},"nodeType":"YulFunctionCall","src":"11935:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11928:6:181"},"nodeType":"YulFunctionCall","src":"11928:35:181"},"nodeType":"YulIf","src":"11925:55:181"},{"nodeType":"YulVariableDeclaration","src":"11989:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12009:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12003:5:181"},"nodeType":"YulFunctionCall","src":"12003:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"11993:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12021:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12031:3:181","type":"","value":"288"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12025:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12043:33:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"12065:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12073:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12061:3:181"},"nodeType":"YulFunctionCall","src":"12061:15:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"12047:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"12151:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"12153:16:181"},"nodeType":"YulFunctionCall","src":"12153:18:181"},"nodeType":"YulExpressionStatement","src":"12153:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"12094:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"12106:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12091:2:181"},"nodeType":"YulFunctionCall","src":"12091:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"12130:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"12142:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12127:2:181"},"nodeType":"YulFunctionCall","src":"12127:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"12088:2:181"},"nodeType":"YulFunctionCall","src":"12088:62:181"},"nodeType":"YulIf","src":"12085:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12189:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"12193:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12182:6:181"},"nodeType":"YulFunctionCall","src":"12182:22:181"},"nodeType":"YulExpressionStatement","src":"12182:22:181"},{"nodeType":"YulVariableDeclaration","src":"12213:17:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"12224:6:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"12217:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12239:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"12257:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12265:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12253:3:181"},"nodeType":"YulFunctionCall","src":"12253:15:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"12243:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"12296:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12305:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12308:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12298:6:181"},"nodeType":"YulFunctionCall","src":"12298:12:181"},"nodeType":"YulExpressionStatement","src":"12298:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"12283:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"12291:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12280:2:181"},"nodeType":"YulFunctionCall","src":"12280:15:181"},"nodeType":"YulIf","src":"12277:35:181"},{"nodeType":"YulVariableDeclaration","src":"12321:17:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"12332:6:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"12325:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"12405:101:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"12426:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"12452:3:181"},{"name":"end","nodeType":"YulIdentifier","src":"12457:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"12431:20:181"},"nodeType":"YulFunctionCall","src":"12431:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12419:6:181"},"nodeType":"YulFunctionCall","src":"12419:43:181"},"nodeType":"YulExpressionStatement","src":"12419:43:181"},{"nodeType":"YulAssignment","src":"12475:21:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"12486:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"12491:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12482:3:181"},"nodeType":"YulFunctionCall","src":"12482:14:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"12475:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"12358:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"12363:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12355:2:181"},"nodeType":"YulFunctionCall","src":"12355:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"12371:25:181","statements":[{"nodeType":"YulAssignment","src":"12373:21:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"12384:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"12389:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12380:3:181"},"nodeType":"YulFunctionCall","src":"12380:14:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"12373:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"12351:3:181","statements":[]},"src":"12347:159:181"},{"nodeType":"YulAssignment","src":"12515:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"12524:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"12515:5:181"}]}]},"name":"abi_decode_t_array_t_struct_Fr_memory_ptr_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"11889:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"11897:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"11905:5:181","type":""}],"src":"11827:709:181"},{"body":{"nodeType":"YulBlock","src":"12618:1780:181","statements":[{"body":{"nodeType":"YulBlock","src":"12664:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12673:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12676:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12666:6:181"},"nodeType":"YulFunctionCall","src":"12666:12:181"},"nodeType":"YulExpressionStatement","src":"12666:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"12639:3:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"12644:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12635:3:181"},"nodeType":"YulFunctionCall","src":"12635:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"12656:6:181","type":"","value":"0x0380"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12631:3:181"},"nodeType":"YulFunctionCall","src":"12631:32:181"},"nodeType":"YulIf","src":"12628:52:181"},{"nodeType":"YulAssignment","src":"12689:31:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_2878","nodeType":"YulIdentifier","src":"12698:20:181"},"nodeType":"YulFunctionCall","src":"12698:22:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"12689:5:181"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12736:5:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12764:9:181"},{"name":"end","nodeType":"YulIdentifier","src":"12775:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"12743:20:181"},"nodeType":"YulFunctionCall","src":"12743:36:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12729:6:181"},"nodeType":"YulFunctionCall","src":"12729:51:181"},"nodeType":"YulExpressionStatement","src":"12729:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12800:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"12807:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12796:3:181"},"nodeType":"YulFunctionCall","src":"12796:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12837:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12848:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12833:3:181"},"nodeType":"YulFunctionCall","src":"12833:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"12853:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"12812:20:181"},"nodeType":"YulFunctionCall","src":"12812:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12789:6:181"},"nodeType":"YulFunctionCall","src":"12789:69:181"},"nodeType":"YulExpressionStatement","src":"12789:69:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12878:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"12885:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12874:3:181"},"nodeType":"YulFunctionCall","src":"12874:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12915:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12926:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12911:3:181"},"nodeType":"YulFunctionCall","src":"12911:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"12931:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"12890:20:181"},"nodeType":"YulFunctionCall","src":"12890:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12867:6:181"},"nodeType":"YulFunctionCall","src":"12867:69:181"},"nodeType":"YulExpressionStatement","src":"12867:69:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12956:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"12963:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12952:3:181"},"nodeType":"YulFunctionCall","src":"12952:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12993:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13004:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12989:3:181"},"nodeType":"YulFunctionCall","src":"12989:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"13009:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"12968:20:181"},"nodeType":"YulFunctionCall","src":"12968:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12945:6:181"},"nodeType":"YulFunctionCall","src":"12945:69:181"},"nodeType":"YulExpressionStatement","src":"12945:69:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13034:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"13041:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13030:3:181"},"nodeType":"YulFunctionCall","src":"13030:15:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13104:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13115:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13100:3:181"},"nodeType":"YulFunctionCall","src":"13100:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"13121:3:181"}],"functionName":{"name":"abi_decode_t_array_t_struct_Fr_memory_ptr_memory_ptr","nodeType":"YulIdentifier","src":"13047:52:181"},"nodeType":"YulFunctionCall","src":"13047:78:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13023:6:181"},"nodeType":"YulFunctionCall","src":"13023:103:181"},"nodeType":"YulExpressionStatement","src":"13023:103:181"},{"nodeType":"YulVariableDeclaration","src":"13135:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13145:3:181","type":"","value":"416"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13139:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13168:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"13175:4:181","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13164:3:181"},"nodeType":"YulFunctionCall","src":"13164:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13207:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13218:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13203:3:181"},"nodeType":"YulFunctionCall","src":"13203:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"13223:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"13182:20:181"},"nodeType":"YulFunctionCall","src":"13182:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13157:6:181"},"nodeType":"YulFunctionCall","src":"13157:71:181"},"nodeType":"YulExpressionStatement","src":"13157:71:181"},{"nodeType":"YulVariableDeclaration","src":"13237:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13247:3:181","type":"","value":"448"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"13241:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13270:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"13277:4:181","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13266:3:181"},"nodeType":"YulFunctionCall","src":"13266:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13309:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"13320:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13305:3:181"},"nodeType":"YulFunctionCall","src":"13305:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"13325:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"13284:20:181"},"nodeType":"YulFunctionCall","src":"13284:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13259:6:181"},"nodeType":"YulFunctionCall","src":"13259:71:181"},"nodeType":"YulExpressionStatement","src":"13259:71:181"},{"nodeType":"YulVariableDeclaration","src":"13339:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13349:3:181","type":"","value":"480"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"13343:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13372:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"13379:4:181","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13368:3:181"},"nodeType":"YulFunctionCall","src":"13368:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13411:9:181"},{"name":"_3","nodeType":"YulIdentifier","src":"13422:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13407:3:181"},"nodeType":"YulFunctionCall","src":"13407:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"13427:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"13386:20:181"},"nodeType":"YulFunctionCall","src":"13386:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13361:6:181"},"nodeType":"YulFunctionCall","src":"13361:71:181"},"nodeType":"YulExpressionStatement","src":"13361:71:181"},{"nodeType":"YulVariableDeclaration","src":"13441:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13451:3:181","type":"","value":"512"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"13445:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13474:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"13481:6:181","type":"","value":"0x0100"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13470:3:181"},"nodeType":"YulFunctionCall","src":"13470:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13515:9:181"},{"name":"_4","nodeType":"YulIdentifier","src":"13526:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13511:3:181"},"nodeType":"YulFunctionCall","src":"13511:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"13531:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"13490:20:181"},"nodeType":"YulFunctionCall","src":"13490:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13463:6:181"},"nodeType":"YulFunctionCall","src":"13463:73:181"},"nodeType":"YulExpressionStatement","src":"13463:73:181"},{"nodeType":"YulVariableDeclaration","src":"13545:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13555:3:181","type":"","value":"544"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"13549:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13578:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"13585:6:181","type":"","value":"0x0120"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13574:3:181"},"nodeType":"YulFunctionCall","src":"13574:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13619:9:181"},{"name":"_5","nodeType":"YulIdentifier","src":"13630:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13615:3:181"},"nodeType":"YulFunctionCall","src":"13615:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"13635:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"13594:20:181"},"nodeType":"YulFunctionCall","src":"13594:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13567:6:181"},"nodeType":"YulFunctionCall","src":"13567:73:181"},"nodeType":"YulExpressionStatement","src":"13567:73:181"},{"nodeType":"YulVariableDeclaration","src":"13649:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13659:3:181","type":"","value":"576"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"13653:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13682:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"13689:6:181","type":"","value":"0x0140"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13678:3:181"},"nodeType":"YulFunctionCall","src":"13678:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13723:9:181"},{"name":"_6","nodeType":"YulIdentifier","src":"13734:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13719:3:181"},"nodeType":"YulFunctionCall","src":"13719:18:181"},{"name":"end","nodeType":"YulIdentifier","src":"13739:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"13698:20:181"},"nodeType":"YulFunctionCall","src":"13698:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13671:6:181"},"nodeType":"YulFunctionCall","src":"13671:73:181"},"nodeType":"YulExpressionStatement","src":"13671:73:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13764:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"13771:6:181","type":"","value":"0x0160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13760:3:181"},"nodeType":"YulFunctionCall","src":"13760:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13805:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13816:6:181","type":"","value":"0x0260"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13801:3:181"},"nodeType":"YulFunctionCall","src":"13801:22:181"},{"name":"end","nodeType":"YulIdentifier","src":"13825:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"13780:20:181"},"nodeType":"YulFunctionCall","src":"13780:49:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13753:6:181"},"nodeType":"YulFunctionCall","src":"13753:77:181"},"nodeType":"YulExpressionStatement","src":"13753:77:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13850:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"13857:6:181","type":"","value":"0x0180"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13846:3:181"},"nodeType":"YulFunctionCall","src":"13846:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13891:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13902:3:181","type":"","value":"640"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13887:3:181"},"nodeType":"YulFunctionCall","src":"13887:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"13908:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"13866:20:181"},"nodeType":"YulFunctionCall","src":"13866:46:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13839:6:181"},"nodeType":"YulFunctionCall","src":"13839:74:181"},"nodeType":"YulExpressionStatement","src":"13839:74:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13933:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13940:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13929:3:181"},"nodeType":"YulFunctionCall","src":"13929:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13970:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13981:3:181","type":"","value":"672"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13966:3:181"},"nodeType":"YulFunctionCall","src":"13966:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"13987:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"13945:20:181"},"nodeType":"YulFunctionCall","src":"13945:46:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13922:6:181"},"nodeType":"YulFunctionCall","src":"13922:70:181"},"nodeType":"YulExpressionStatement","src":"13922:70:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14012:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"14019:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14008:3:181"},"nodeType":"YulFunctionCall","src":"14008:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14049:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14060:3:181","type":"","value":"704"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14045:3:181"},"nodeType":"YulFunctionCall","src":"14045:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"14066:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"14024:20:181"},"nodeType":"YulFunctionCall","src":"14024:46:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14001:6:181"},"nodeType":"YulFunctionCall","src":"14001:70:181"},"nodeType":"YulExpressionStatement","src":"14001:70:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14091:5:181"},{"name":"_3","nodeType":"YulIdentifier","src":"14098:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14087:3:181"},"nodeType":"YulFunctionCall","src":"14087:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14128:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14139:3:181","type":"","value":"736"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14124:3:181"},"nodeType":"YulFunctionCall","src":"14124:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"14145:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"14103:20:181"},"nodeType":"YulFunctionCall","src":"14103:46:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14080:6:181"},"nodeType":"YulFunctionCall","src":"14080:70:181"},"nodeType":"YulExpressionStatement","src":"14080:70:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14170:5:181"},{"name":"_4","nodeType":"YulIdentifier","src":"14177:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14166:3:181"},"nodeType":"YulFunctionCall","src":"14166:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14207:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14218:3:181","type":"","value":"768"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14203:3:181"},"nodeType":"YulFunctionCall","src":"14203:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"14224:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"14182:20:181"},"nodeType":"YulFunctionCall","src":"14182:46:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14159:6:181"},"nodeType":"YulFunctionCall","src":"14159:70:181"},"nodeType":"YulExpressionStatement","src":"14159:70:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14249:5:181"},{"name":"_5","nodeType":"YulIdentifier","src":"14256:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14245:3:181"},"nodeType":"YulFunctionCall","src":"14245:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14286:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14297:3:181","type":"","value":"800"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14282:3:181"},"nodeType":"YulFunctionCall","src":"14282:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"14303:3:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"14261:20:181"},"nodeType":"YulFunctionCall","src":"14261:46:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14238:6:181"},"nodeType":"YulFunctionCall","src":"14238:70:181"},"nodeType":"YulExpressionStatement","src":"14238:70:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14328:5:181"},{"name":"_6","nodeType":"YulIdentifier","src":"14335:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14324:3:181"},"nodeType":"YulFunctionCall","src":"14324:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14370:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14381:3:181","type":"","value":"832"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14366:3:181"},"nodeType":"YulFunctionCall","src":"14366:19:181"},{"name":"end","nodeType":"YulIdentifier","src":"14387:3:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"14340:25:181"},"nodeType":"YulFunctionCall","src":"14340:51:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14317:6:181"},"nodeType":"YulFunctionCall","src":"14317:75:181"},"nodeType":"YulExpressionStatement","src":"14317:75:181"}]},"name":"abi_decode_struct_PartialVerifierState","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12589:9:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"12600:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"12608:5:181","type":""}],"src":"12541:1857:181"},{"body":{"nodeType":"YulBlock","src":"14598:1503:181","statements":[{"nodeType":"YulVariableDeclaration","src":"14608:33:181","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14622:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"14631:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14618:3:181"},"nodeType":"YulFunctionCall","src":"14618:23:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14612:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"14667:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14676:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14679:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14669:6:181"},"nodeType":"YulFunctionCall","src":"14669:12:181"},"nodeType":"YulExpressionStatement","src":"14669:12:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"14657:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"14661:4:181","type":"","value":"2592"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14653:3:181"},"nodeType":"YulFunctionCall","src":"14653:13:181"},"nodeType":"YulIf","src":"14650:33:181"},{"nodeType":"YulVariableDeclaration","src":"14692:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14702:6:181","type":"","value":"0x0680"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"14696:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"14732:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14741:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14744:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14734:6:181"},"nodeType":"YulFunctionCall","src":"14734:12:181"},"nodeType":"YulExpressionStatement","src":"14734:12:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"14724:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"14728:2:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14720:3:181"},"nodeType":"YulFunctionCall","src":"14720:11:181"},"nodeType":"YulIf","src":"14717:31:181"},{"nodeType":"YulVariableDeclaration","src":"14757:35:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_2879","nodeType":"YulIdentifier","src":"14770:20:181"},"nodeType":"YulFunctionCall","src":"14770:22:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14761:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14808:5:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14828:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14815:12:181"},"nodeType":"YulFunctionCall","src":"14815:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14801:6:181"},"nodeType":"YulFunctionCall","src":"14801:38:181"},"nodeType":"YulExpressionStatement","src":"14801:38:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14859:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"14866:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14855:3:181"},"nodeType":"YulFunctionCall","src":"14855:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14888:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14899:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14884:3:181"},"nodeType":"YulFunctionCall","src":"14884:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14871:12:181"},"nodeType":"YulFunctionCall","src":"14871:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14848:6:181"},"nodeType":"YulFunctionCall","src":"14848:56:181"},"nodeType":"YulExpressionStatement","src":"14848:56:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14924:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"14931:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14920:3:181"},"nodeType":"YulFunctionCall","src":"14920:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14961:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14972:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14957:3:181"},"nodeType":"YulFunctionCall","src":"14957:18:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"14977:7:181"}],"functionName":{"name":"abi_decode_struct_Fr","nodeType":"YulIdentifier","src":"14936:20:181"},"nodeType":"YulFunctionCall","src":"14936:49:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14913:6:181"},"nodeType":"YulFunctionCall","src":"14913:73:181"},"nodeType":"YulExpressionStatement","src":"14913:73:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15006:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"15013:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15002:3:181"},"nodeType":"YulFunctionCall","src":"15002:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15054:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15065:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15050:3:181"},"nodeType":"YulFunctionCall","src":"15050:18:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15070:7:181"}],"functionName":{"name":"abi_decode_array_struct_G1Point","nodeType":"YulIdentifier","src":"15018:31:181"},"nodeType":"YulFunctionCall","src":"15018:60:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14995:6:181"},"nodeType":"YulFunctionCall","src":"14995:84:181"},"nodeType":"YulExpressionStatement","src":"14995:84:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15099:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"15106:4:181","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15095:3:181"},"nodeType":"YulFunctionCall","src":"15095:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15153:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15164:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15149:3:181"},"nodeType":"YulFunctionCall","src":"15149:19:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15170:7:181"}],"functionName":{"name":"abi_decode_t_array_t_struct_G1Point","nodeType":"YulIdentifier","src":"15113:35:181"},"nodeType":"YulFunctionCall","src":"15113:65:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15088:6:181"},"nodeType":"YulFunctionCall","src":"15088:91:181"},"nodeType":"YulExpressionStatement","src":"15088:91:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15199:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"15206:4:181","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15195:3:181"},"nodeType":"YulFunctionCall","src":"15195:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15271:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15282:3:181","type":"","value":"672"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15267:3:181"},"nodeType":"YulFunctionCall","src":"15267:19:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15288:7:181"}],"functionName":{"name":"abi_decode_array_struct_G1Point_memory_ptr_memory_ptr","nodeType":"YulIdentifier","src":"15213:53:181"},"nodeType":"YulFunctionCall","src":"15213:83:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15188:6:181"},"nodeType":"YulFunctionCall","src":"15188:109:181"},"nodeType":"YulExpressionStatement","src":"15188:109:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15317:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"15324:4:181","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15313:3:181"},"nodeType":"YulFunctionCall","src":"15313:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15361:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15372:3:181","type":"","value":"928"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15357:3:181"},"nodeType":"YulFunctionCall","src":"15357:19:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15378:7:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"15331:25:181"},"nodeType":"YulFunctionCall","src":"15331:55:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15306:6:181"},"nodeType":"YulFunctionCall","src":"15306:81:181"},"nodeType":"YulExpressionStatement","src":"15306:81:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15407:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"15414:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15403:3:181"},"nodeType":"YulFunctionCall","src":"15403:15:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15478:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15489:3:181","type":"","value":"992"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15474:3:181"},"nodeType":"YulFunctionCall","src":"15474:19:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15495:7:181"}],"functionName":{"name":"abi_decode_array_struct_G1Point_memory_ptr_memory_ptr","nodeType":"YulIdentifier","src":"15420:53:181"},"nodeType":"YulFunctionCall","src":"15420:83:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15396:6:181"},"nodeType":"YulFunctionCall","src":"15396:108:181"},"nodeType":"YulExpressionStatement","src":"15396:108:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15524:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"15531:6:181","type":"","value":"0x0100"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15520:3:181"},"nodeType":"YulFunctionCall","src":"15520:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15570:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15581:4:181","type":"","value":"1248"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15566:3:181"},"nodeType":"YulFunctionCall","src":"15566:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15588:7:181"}],"functionName":{"name":"abi_decode_struct_G1Point","nodeType":"YulIdentifier","src":"15540:25:181"},"nodeType":"YulFunctionCall","src":"15540:56:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15513:6:181"},"nodeType":"YulFunctionCall","src":"15513:84:181"},"nodeType":"YulExpressionStatement","src":"15513:84:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15617:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"15624:6:181","type":"","value":"0x0120"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15613:3:181"},"nodeType":"YulFunctionCall","src":"15613:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15668:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15679:4:181","type":"","value":"1312"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15664:3:181"},"nodeType":"YulFunctionCall","src":"15664:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15686:7:181"}],"functionName":{"name":"abi_decode_t_array_t_struct_Fr","nodeType":"YulIdentifier","src":"15633:30:181"},"nodeType":"YulFunctionCall","src":"15633:61:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15606:6:181"},"nodeType":"YulFunctionCall","src":"15606:89:181"},"nodeType":"YulExpressionStatement","src":"15606:89:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15715:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"15722:6:181","type":"","value":"0x0140"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15711:3:181"},"nodeType":"YulFunctionCall","src":"15711:18:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15767:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15778:4:181","type":"","value":"1408"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15763:3:181"},"nodeType":"YulFunctionCall","src":"15763:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15785:7:181"}],"functionName":{"name":"abi_decode_array_struct_G2Point","nodeType":"YulIdentifier","src":"15731:31:181"},"nodeType":"YulFunctionCall","src":"15731:62:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15704:6:181"},"nodeType":"YulFunctionCall","src":"15704:90:181"},"nodeType":"YulExpressionStatement","src":"15704:90:181"},{"nodeType":"YulAssignment","src":"15803:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"15813:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"15803:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"15827:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15858:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"15869:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15854:3:181"},"nodeType":"YulFunctionCall","src":"15854:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15841:12:181"},"nodeType":"YulFunctionCall","src":"15841:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"15831:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"15916:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15925:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15928:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15918:6:181"},"nodeType":"YulFunctionCall","src":"15918:12:181"},"nodeType":"YulExpressionStatement","src":"15918:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"15888:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"15896:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15885:2:181"},"nodeType":"YulFunctionCall","src":"15885:30:181"},"nodeType":"YulIf","src":"15882:50:181"},{"nodeType":"YulAssignment","src":"15941:66:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15979:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"15990:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15975:3:181"},"nodeType":"YulFunctionCall","src":"15975:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15999:7:181"}],"functionName":{"name":"abi_decode_struct_Proof","nodeType":"YulIdentifier","src":"15951:23:181"},"nodeType":"YulFunctionCall","src":"15951:56:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"15941:6:181"}]},{"nodeType":"YulAssignment","src":"16016:79:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16069:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16080:4:181","type":"","value":"1696"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16065:3:181"},"nodeType":"YulFunctionCall","src":"16065:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"16087:7:181"}],"functionName":{"name":"abi_decode_struct_PartialVerifierState","nodeType":"YulIdentifier","src":"16026:38:181"},"nodeType":"YulFunctionCall","src":"16026:69:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"16016:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_VerificationKey_$387_memory_ptrt_struct$_Proof_$484_memory_ptrt_struct$_PartialVerifierState_$544_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14548:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14559:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14571:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14579:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14587:6:181","type":""}],"src":"14403:1698:181"},{"body":{"nodeType":"YulBlock","src":"16157:97:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16174:3:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16185:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16179:5:181"},"nodeType":"YulFunctionCall","src":"16179:12:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16167:6:181"},"nodeType":"YulFunctionCall","src":"16167:25:181"},"nodeType":"YulExpressionStatement","src":"16167:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16212:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"16217:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16208:3:181"},"nodeType":"YulFunctionCall","src":"16208:14:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16234:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"16241:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16230:3:181"},"nodeType":"YulFunctionCall","src":"16230:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16224:5:181"},"nodeType":"YulFunctionCall","src":"16224:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16201:6:181"},"nodeType":"YulFunctionCall","src":"16201:47:181"},"nodeType":"YulExpressionStatement","src":"16201:47:181"}]},"name":"abi_encode_struct_G1Point","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"16141:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"16148:3:181","type":""}],"src":"16106:148:181"},{"body":{"nodeType":"YulBlock","src":"16410:95:181","statements":[{"nodeType":"YulAssignment","src":"16420:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16432:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16443:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16428:3:181"},"nodeType":"YulFunctionCall","src":"16428:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16420:4:181"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16481:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"16489:9:181"}],"functionName":{"name":"abi_encode_struct_G1Point","nodeType":"YulIdentifier","src":"16455:25:181"},"nodeType":"YulFunctionCall","src":"16455:44:181"},"nodeType":"YulExpressionStatement","src":"16455:44:181"}]},"name":"abi_encode_tuple_t_struct$_G1Point_$6027_memory_ptr__to_t_struct$_G1Point_$6027_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16379:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16390:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16401:4:181","type":""}],"src":"16259:246:181"},{"body":{"nodeType":"YulBlock","src":"16567:272:181","statements":[{"nodeType":"YulAssignment","src":"16577:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"16584:3:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"16577:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"16596:19:181","value":{"name":"value","nodeType":"YulIdentifier","src":"16610:5:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"16600:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16624:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"16633:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"16628:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"16690:143:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"16736:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16730:5:181"},"nodeType":"YulFunctionCall","src":"16730:13:181"},{"name":"pos","nodeType":"YulIdentifier","src":"16745:3:181"}],"functionName":{"name":"abi_encode_struct_G1Point","nodeType":"YulIdentifier","src":"16704:25:181"},"nodeType":"YulFunctionCall","src":"16704:45:181"},"nodeType":"YulExpressionStatement","src":"16704:45:181"},{"nodeType":"YulAssignment","src":"16762:21:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16773:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"16778:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16769:3:181"},"nodeType":"YulFunctionCall","src":"16769:14:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"16762:3:181"}]},{"nodeType":"YulAssignment","src":"16796:27:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"16810:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"16818:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16806:3:181"},"nodeType":"YulFunctionCall","src":"16806:17:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"16796:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"16654:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"16657:4:181","type":"","value":"0x06"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16651:2:181"},"nodeType":"YulFunctionCall","src":"16651:11:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"16663:18:181","statements":[{"nodeType":"YulAssignment","src":"16665:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"16674:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"16677:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16670:3:181"},"nodeType":"YulFunctionCall","src":"16670:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"16665:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"16647:3:181","statements":[]},"src":"16643:190:181"}]},"name":"abi_encode_array_struct_G1Point","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"16551:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"16558:3:181","type":""}],"src":"16510:329:181"},{"body":{"nodeType":"YulBlock","src":"16896:283:181","statements":[{"nodeType":"YulAssignment","src":"16906:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"16913:3:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"16906:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"16925:19:181","value":{"name":"value","nodeType":"YulIdentifier","src":"16939:5:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"16929:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16953:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"16962:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"16957:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"17019:154:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17040:3:181"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"17057:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17051:5:181"},"nodeType":"YulFunctionCall","src":"17051:13:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17045:5:181"},"nodeType":"YulFunctionCall","src":"17045:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17033:6:181"},"nodeType":"YulFunctionCall","src":"17033:33:181"},"nodeType":"YulExpressionStatement","src":"17033:33:181"},{"nodeType":"YulVariableDeclaration","src":"17079:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"17089:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"17083:2:181","type":""}]},{"nodeType":"YulAssignment","src":"17106:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17117:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"17122:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17113:3:181"},"nodeType":"YulFunctionCall","src":"17113:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"17106:3:181"}]},{"nodeType":"YulAssignment","src":"17138:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"17152:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"17160:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17148:3:181"},"nodeType":"YulFunctionCall","src":"17148:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"17138:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"16983:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"16986:4:181","type":"","value":"0x06"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16980:2:181"},"nodeType":"YulFunctionCall","src":"16980:11:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"16992:18:181","statements":[{"nodeType":"YulAssignment","src":"16994:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17003:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"17006:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16999:3:181"},"nodeType":"YulFunctionCall","src":"16999:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"16994:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"16976:3:181","statements":[]},"src":"16972:201:181"}]},"name":"abi_encode_array_struct_Fr","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"16880:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"16887:3:181","type":""}],"src":"16844:335:181"},{"body":{"nodeType":"YulBlock","src":"17335:1038:181","statements":[{"nodeType":"YulAssignment","src":"17345:28:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17357:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17368:4:181","type":"","value":"1824"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17353:3:181"},"nodeType":"YulFunctionCall","src":"17353:20:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17345:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"17382:23:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17398:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17392:5:181"},"nodeType":"YulFunctionCall","src":"17392:13:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"17386:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"17414:20:181","value":{"name":"headStart","nodeType":"YulIdentifier","src":"17425:9:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"17418:3:181","type":""}]},{"nodeType":"YulAssignment","src":"17443:16:181","value":{"name":"headStart","nodeType":"YulIdentifier","src":"17450:9:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"17443:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"17468:16:181","value":{"name":"_1","nodeType":"YulIdentifier","src":"17482:2:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"17472:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"17493:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"17502:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"17497:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"17559:143:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"17605:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17599:5:181"},"nodeType":"YulFunctionCall","src":"17599:13:181"},{"name":"pos","nodeType":"YulIdentifier","src":"17614:3:181"}],"functionName":{"name":"abi_encode_struct_G1Point","nodeType":"YulIdentifier","src":"17573:25:181"},"nodeType":"YulFunctionCall","src":"17573:45:181"},"nodeType":"YulExpressionStatement","src":"17573:45:181"},{"nodeType":"YulAssignment","src":"17631:21:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17642:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"17647:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17638:3:181"},"nodeType":"YulFunctionCall","src":"17638:14:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"17631:3:181"}]},{"nodeType":"YulAssignment","src":"17665:27:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"17679:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"17687:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17675:3:181"},"nodeType":"YulFunctionCall","src":"17675:17:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"17665:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17523:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"17526:4:181","type":"","value":"0x0d"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17520:2:181"},"nodeType":"YulFunctionCall","src":"17520:11:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"17532:18:181","statements":[{"nodeType":"YulAssignment","src":"17534:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17543:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"17546:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17539:3:181"},"nodeType":"YulFunctionCall","src":"17539:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"17534:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"17516:3:181","statements":[]},"src":"17512:190:181"},{"nodeType":"YulVariableDeclaration","src":"17711:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"17721:4:181","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"17715:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"17734:42:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17764:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"17772:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17760:3:181"},"nodeType":"YulFunctionCall","src":"17760:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17754:5:181"},"nodeType":"YulFunctionCall","src":"17754:22:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"17738:12:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"17785:35:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17802:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17813:6:181","type":"","value":"0x0340"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17798:3:181"},"nodeType":"YulFunctionCall","src":"17798:22:181"},"variables":[{"name":"pos_1","nodeType":"YulTypedName","src":"17789:5:181","type":""}]},{"nodeType":"YulAssignment","src":"17829:14:181","value":{"name":"pos_1","nodeType":"YulIdentifier","src":"17838:5:181"},"variableNames":[{"name":"pos_1","nodeType":"YulIdentifier","src":"17829:5:181"}]},{"nodeType":"YulVariableDeclaration","src":"17852:28:181","value":{"name":"memberValue0","nodeType":"YulIdentifier","src":"17868:12:181"},"variables":[{"name":"srcPtr_1","nodeType":"YulTypedName","src":"17856:8:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"17889:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"17900:1:181","type":"","value":"0"},"variables":[{"name":"i_1","nodeType":"YulTypedName","src":"17893:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"17963:139:181","statements":[{"expression":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"17984:5:181"},{"arguments":[{"arguments":[{"name":"srcPtr_1","nodeType":"YulIdentifier","src":"18003:8:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17997:5:181"},"nodeType":"YulFunctionCall","src":"17997:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17991:5:181"},"nodeType":"YulFunctionCall","src":"17991:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17977:6:181"},"nodeType":"YulFunctionCall","src":"17977:37:181"},"nodeType":"YulExpressionStatement","src":"17977:37:181"},{"nodeType":"YulAssignment","src":"18027:23:181","value":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"18040:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"18047:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18036:3:181"},"nodeType":"YulFunctionCall","src":"18036:14:181"},"variableNames":[{"name":"pos_1","nodeType":"YulIdentifier","src":"18027:5:181"}]},{"nodeType":"YulAssignment","src":"18063:29:181","value":{"arguments":[{"name":"srcPtr_1","nodeType":"YulIdentifier","src":"18079:8:181"},{"name":"_2","nodeType":"YulIdentifier","src":"18089:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18075:3:181"},"nodeType":"YulFunctionCall","src":"18075:17:181"},"variableNames":[{"name":"srcPtr_1","nodeType":"YulIdentifier","src":"18063:8:181"}]}]},"condition":{"arguments":[{"name":"i_1","nodeType":"YulIdentifier","src":"17921:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"17926:4:181","type":"","value":"0x0d"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17918:2:181"},"nodeType":"YulFunctionCall","src":"17918:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"17932:22:181","statements":[{"nodeType":"YulAssignment","src":"17934:18:181","value":{"arguments":[{"name":"i_1","nodeType":"YulIdentifier","src":"17945:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"17950:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17941:3:181"},"nodeType":"YulFunctionCall","src":"17941:11:181"},"variableNames":[{"name":"i_1","nodeType":"YulIdentifier","src":"17934:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"17914:3:181","statements":[]},"src":"17910:192:181"},{"nodeType":"YulVariableDeclaration","src":"18111:46:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18143:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"18151:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18139:3:181"},"nodeType":"YulFunctionCall","src":"18139:17:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18133:5:181"},"nodeType":"YulFunctionCall","src":"18133:24:181"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"18115:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"18198:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18218:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18229:6:181","type":"","value":"0x04e0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18214:3:181"},"nodeType":"YulFunctionCall","src":"18214:22:181"}],"functionName":{"name":"abi_encode_array_struct_G1Point","nodeType":"YulIdentifier","src":"18166:31:181"},"nodeType":"YulFunctionCall","src":"18166:71:181"},"nodeType":"YulExpressionStatement","src":"18166:71:181"},{"nodeType":"YulVariableDeclaration","src":"18246:46:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18278:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"18286:4:181","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18274:3:181"},"nodeType":"YulFunctionCall","src":"18274:17:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18268:5:181"},"nodeType":"YulFunctionCall","src":"18268:24:181"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"18250:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"18328:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18348:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18359:6:181","type":"","value":"0x0660"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18344:3:181"},"nodeType":"YulFunctionCall","src":"18344:22:181"}],"functionName":{"name":"abi_encode_array_struct_Fr","nodeType":"YulIdentifier","src":"18301:26:181"},"nodeType":"YulFunctionCall","src":"18301:66:181"},"nodeType":"YulExpressionStatement","src":"18301:66:181"}]},"name":"abi_encode_tuple_t_struct$_Queries_$3165_memory_ptr__to_t_struct$_Queries_$3165_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17304:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17315:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17326:4:181","type":""}],"src":"17184:1189:181"},{"body":{"nodeType":"YulBlock","src":"18485:146:181","statements":[{"body":{"nodeType":"YulBlock","src":"18532:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18541:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18544:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"18534:6:181"},"nodeType":"YulFunctionCall","src":"18534:12:181"},"nodeType":"YulExpressionStatement","src":"18534:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"18506:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"18515:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"18502:3:181"},"nodeType":"YulFunctionCall","src":"18502:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"18527:3:181","type":"","value":"896"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"18498:3:181"},"nodeType":"YulFunctionCall","src":"18498:33:181"},"nodeType":"YulIf","src":"18495:53:181"},{"nodeType":"YulAssignment","src":"18557:68:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18606:9:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"18617:7:181"}],"functionName":{"name":"abi_decode_struct_PartialVerifierState","nodeType":"YulIdentifier","src":"18567:38:181"},"nodeType":"YulFunctionCall","src":"18567:58:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"18557:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_PartialVerifierState_$544_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18451:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"18462:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"18474:6:181","type":""}],"src":"18378:253:181"},{"body":{"nodeType":"YulBlock","src":"18668:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18685:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18692:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"18697:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"18688:3:181"},"nodeType":"YulFunctionCall","src":"18688:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18678:6:181"},"nodeType":"YulFunctionCall","src":"18678:31:181"},"nodeType":"YulExpressionStatement","src":"18678:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18725:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"18728:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18718:6:181"},"nodeType":"YulFunctionCall","src":"18718:15:181"},"nodeType":"YulExpressionStatement","src":"18718:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18749:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18752:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"18742:6:181"},"nodeType":"YulFunctionCall","src":"18742:15:181"},"nodeType":"YulExpressionStatement","src":"18742:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"18636:127:181"},{"body":{"nodeType":"YulBlock","src":"18800:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18817:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18824:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"18829:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"18820:3:181"},"nodeType":"YulFunctionCall","src":"18820:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18810:6:181"},"nodeType":"YulFunctionCall","src":"18810:31:181"},"nodeType":"YulExpressionStatement","src":"18810:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18857:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"18860:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18850:6:181"},"nodeType":"YulFunctionCall","src":"18850:15:181"},"nodeType":"YulExpressionStatement","src":"18850:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18881:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18884:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"18874:6:181"},"nodeType":"YulFunctionCall","src":"18874:15:181"},"nodeType":"YulExpressionStatement","src":"18874:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"18768:127:181"},{"body":{"nodeType":"YulBlock","src":"18949:79:181","statements":[{"nodeType":"YulAssignment","src":"18959:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"18971:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"18974:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"18967:3:181"},"nodeType":"YulFunctionCall","src":"18967:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"18959:4:181"}]},{"body":{"nodeType":"YulBlock","src":"19000:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"19002:16:181"},"nodeType":"YulFunctionCall","src":"19002:18:181"},"nodeType":"YulExpressionStatement","src":"19002:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"18991:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"18997:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"18988:2:181"},"nodeType":"YulFunctionCall","src":"18988:11:181"},"nodeType":"YulIf","src":"18985:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"18931:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"18934:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"18940:4:181","type":""}],"src":"18900:128:181"},{"body":{"nodeType":"YulBlock","src":"19065:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19082:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19089:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"19094:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"19085:3:181"},"nodeType":"YulFunctionCall","src":"19085:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19075:6:181"},"nodeType":"YulFunctionCall","src":"19075:31:181"},"nodeType":"YulExpressionStatement","src":"19075:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19122:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"19125:4:181","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19115:6:181"},"nodeType":"YulFunctionCall","src":"19115:15:181"},"nodeType":"YulExpressionStatement","src":"19115:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19146:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19149:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19139:6:181"},"nodeType":"YulFunctionCall","src":"19139:15:181"},"nodeType":"YulExpressionStatement","src":"19139:15:181"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"19033:127:181"},{"body":{"nodeType":"YulBlock","src":"19339:168:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19356:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19367:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19349:6:181"},"nodeType":"YulFunctionCall","src":"19349:21:181"},"nodeType":"YulExpressionStatement","src":"19349:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19390:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19401:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19386:3:181"},"nodeType":"YulFunctionCall","src":"19386:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19406:2:181","type":"","value":"18"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19379:6:181"},"nodeType":"YulFunctionCall","src":"19379:30:181"},"nodeType":"YulExpressionStatement","src":"19379:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19429:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19440:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19425:3:181"},"nodeType":"YulFunctionCall","src":"19425:18:181"},{"hexValue":"7820617869732069736e27742076616c6964","kind":"string","nodeType":"YulLiteral","src":"19445:20:181","type":"","value":"x axis isn't valid"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19418:6:181"},"nodeType":"YulFunctionCall","src":"19418:48:181"},"nodeType":"YulExpressionStatement","src":"19418:48:181"},{"nodeType":"YulAssignment","src":"19475:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19487:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19498:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19483:3:181"},"nodeType":"YulFunctionCall","src":"19483:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19475:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1dfeff2f48d64e5889cd05b12cf0c6149fe8cd6987dc2feb21068eaa37a150e2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19316:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19330:4:181","type":""}],"src":"19165:342:181"},{"body":{"nodeType":"YulBlock","src":"19686:168:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19703:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19714:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19696:6:181"},"nodeType":"YulFunctionCall","src":"19696:21:181"},"nodeType":"YulExpressionStatement","src":"19696:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19737:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19748:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19733:3:181"},"nodeType":"YulFunctionCall","src":"19733:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19753:2:181","type":"","value":"18"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19726:6:181"},"nodeType":"YulFunctionCall","src":"19726:30:181"},"nodeType":"YulExpressionStatement","src":"19726:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19776:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19787:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19772:3:181"},"nodeType":"YulFunctionCall","src":"19772:18:181"},{"hexValue":"7920617869732069736e27742076616c6964","kind":"string","nodeType":"YulLiteral","src":"19792:20:181","type":"","value":"y axis isn't valid"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19765:6:181"},"nodeType":"YulFunctionCall","src":"19765:48:181"},"nodeType":"YulExpressionStatement","src":"19765:48:181"},{"nodeType":"YulAssignment","src":"19822:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19834:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19845:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19830:3:181"},"nodeType":"YulFunctionCall","src":"19830:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19822:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ca1c4b36b64c26a780df6e129923f75fb0ec272344eb802bca8a701f0737ca5f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19663:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19677:4:181","type":""}],"src":"19512:342:181"},{"body":{"nodeType":"YulBlock","src":"20033:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20050:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20061:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20043:6:181"},"nodeType":"YulFunctionCall","src":"20043:21:181"},"nodeType":"YulExpressionStatement","src":"20043:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20084:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20095:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20080:3:181"},"nodeType":"YulFunctionCall","src":"20080:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20100:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20073:6:181"},"nodeType":"YulFunctionCall","src":"20073:30:181"},"nodeType":"YulExpressionStatement","src":"20073:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20123:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20134:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20119:3:181"},"nodeType":"YulFunctionCall","src":"20119:18:181"},{"hexValue":"6973206e6f74206f6e206375727665","kind":"string","nodeType":"YulLiteral","src":"20139:17:181","type":"","value":"is not on curve"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20112:6:181"},"nodeType":"YulFunctionCall","src":"20112:45:181"},"nodeType":"YulExpressionStatement","src":"20112:45:181"},{"nodeType":"YulAssignment","src":"20166:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20178:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20189:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20174:3:181"},"nodeType":"YulFunctionCall","src":"20174:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20166:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_fda56ab6f1add86dceb1c827168bec3bc5af2fbf929350597858dbb7150756b6__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20010:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20024:4:181","type":""}],"src":"19859:339:181"},{"body":{"nodeType":"YulBlock","src":"20404:211:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"20421:3:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20434:3:181","type":"","value":"224"},{"name":"value0","nodeType":"YulIdentifier","src":"20439:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"20430:3:181"},"nodeType":"YulFunctionCall","src":"20430:16:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20452:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"20457:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"20448:3:181"},"nodeType":"YulFunctionCall","src":"20448:20:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20426:3:181"},"nodeType":"YulFunctionCall","src":"20426:43:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20414:6:181"},"nodeType":"YulFunctionCall","src":"20414:56:181"},"nodeType":"YulExpressionStatement","src":"20414:56:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"20490:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"20495:1:181","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20486:3:181"},"nodeType":"YulFunctionCall","src":"20486:11:181"},{"name":"value1","nodeType":"YulIdentifier","src":"20499:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20479:6:181"},"nodeType":"YulFunctionCall","src":"20479:27:181"},"nodeType":"YulExpressionStatement","src":"20479:27:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"20526:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"20531:2:181","type":"","value":"36"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20522:3:181"},"nodeType":"YulFunctionCall","src":"20522:12:181"},{"name":"value2","nodeType":"YulIdentifier","src":"20536:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20515:6:181"},"nodeType":"YulFunctionCall","src":"20515:28:181"},"nodeType":"YulExpressionStatement","src":"20515:28:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"20563:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"20568:2:181","type":"","value":"68"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20559:3:181"},"nodeType":"YulFunctionCall","src":"20559:12:181"},{"name":"value3","nodeType":"YulIdentifier","src":"20573:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20552:6:181"},"nodeType":"YulFunctionCall","src":"20552:28:181"},"nodeType":"YulExpressionStatement","src":"20552:28:181"},{"nodeType":"YulAssignment","src":"20589:20:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"20600:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"20605:3:181","type":"","value":"100"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20596:3:181"},"nodeType":"YulFunctionCall","src":"20596:13:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"20589:3:181"}]}]},"name":"abi_encode_tuple_packed_t_uint32_t_bytes32_t_bytes32_t_uint256__to_t_uint32_t_bytes32_t_bytes32_t_uint256__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"20356:3:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"20361:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"20369:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"20377:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"20385:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"20396:3:181","type":""}],"src":"20203:412:181"},{"body":{"nodeType":"YulBlock","src":"20819:250:181","statements":[{"nodeType":"YulVariableDeclaration","src":"20829:30:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20843:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"20848:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"20839:3:181"},"nodeType":"YulFunctionCall","src":"20839:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"20833:2:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"20875:3:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20888:3:181","type":"","value":"224"},{"name":"value0","nodeType":"YulIdentifier","src":"20893:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"20884:3:181"},"nodeType":"YulFunctionCall","src":"20884:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"20902:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20880:3:181"},"nodeType":"YulFunctionCall","src":"20880:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20868:6:181"},"nodeType":"YulFunctionCall","src":"20868:38:181"},"nodeType":"YulExpressionStatement","src":"20868:38:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"20926:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"20931:1:181","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20922:3:181"},"nodeType":"YulFunctionCall","src":"20922:11:181"},{"name":"value1","nodeType":"YulIdentifier","src":"20935:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20915:6:181"},"nodeType":"YulFunctionCall","src":"20915:27:181"},"nodeType":"YulExpressionStatement","src":"20915:27:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"20962:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"20967:2:181","type":"","value":"36"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20958:3:181"},"nodeType":"YulFunctionCall","src":"20958:12:181"},{"name":"value2","nodeType":"YulIdentifier","src":"20972:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20951:6:181"},"nodeType":"YulFunctionCall","src":"20951:28:181"},"nodeType":"YulExpressionStatement","src":"20951:28:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"20999:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21004:2:181","type":"","value":"68"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20995:3:181"},"nodeType":"YulFunctionCall","src":"20995:12:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21017:3:181","type":"","value":"224"},{"name":"value3","nodeType":"YulIdentifier","src":"21022:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21013:3:181"},"nodeType":"YulFunctionCall","src":"21013:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21031:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21009:3:181"},"nodeType":"YulFunctionCall","src":"21009:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20988:6:181"},"nodeType":"YulFunctionCall","src":"20988:47:181"},"nodeType":"YulExpressionStatement","src":"20988:47:181"},{"nodeType":"YulAssignment","src":"21044:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21055:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21060:2:181","type":"","value":"72"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21051:3:181"},"nodeType":"YulFunctionCall","src":"21051:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"21044:3:181"}]}]},"name":"abi_encode_tuple_packed_t_uint32_t_bytes32_t_bytes32_t_uint32__to_t_uint32_t_bytes32_t_bytes32_t_uint32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"20771:3:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"20776:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"20784:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"20792:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"20800:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"20811:3:181","type":""}],"src":"20620:449:181"},{"body":{"nodeType":"YulBlock","src":"21121:125:181","statements":[{"nodeType":"YulVariableDeclaration","src":"21131:20:181","value":{"kind":"number","nodeType":"YulLiteral","src":"21141:10:181","type":"","value":"0xffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"21135:2:181","type":""}]},{"nodeType":"YulAssignment","src":"21160:34:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"21175:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21178:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21171:3:181"},"nodeType":"YulFunctionCall","src":"21171:10:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"21187:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21190:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21183:3:181"},"nodeType":"YulFunctionCall","src":"21183:10:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21167:3:181"},"nodeType":"YulFunctionCall","src":"21167:27:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"21160:3:181"}]},{"body":{"nodeType":"YulBlock","src":"21218:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"21220:16:181"},"nodeType":"YulFunctionCall","src":"21220:18:181"},"nodeType":"YulExpressionStatement","src":"21220:18:181"}]},"condition":{"arguments":[{"name":"sum","nodeType":"YulIdentifier","src":"21209:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21214:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21206:2:181"},"nodeType":"YulFunctionCall","src":"21206:11:181"},"nodeType":"YulIf","src":"21203:37:181"}]},"name":"checked_add_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"21104:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"21107:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"21113:3:181","type":""}],"src":"21074:172:181"},{"body":{"nodeType":"YulBlock","src":"21303:116:181","statements":[{"nodeType":"YulAssignment","src":"21313:20:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"21328:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"21331:1:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"21324:3:181"},"nodeType":"YulFunctionCall","src":"21324:9:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"21313:7:181"}]},{"body":{"nodeType":"YulBlock","src":"21391:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"21393:16:181"},"nodeType":"YulFunctionCall","src":"21393:18:181"},"nodeType":"YulExpressionStatement","src":"21393:18:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"21362:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"21355:6:181"},"nodeType":"YulFunctionCall","src":"21355:9:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"21369:1:181"},{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"21376:7:181"},{"name":"x","nodeType":"YulIdentifier","src":"21385:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"21372:3:181"},"nodeType":"YulFunctionCall","src":"21372:15:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"21366:2:181"},"nodeType":"YulFunctionCall","src":"21366:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"21352:2:181"},"nodeType":"YulFunctionCall","src":"21352:37:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"21345:6:181"},"nodeType":"YulFunctionCall","src":"21345:45:181"},"nodeType":"YulIf","src":"21342:71:181"}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"21282:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"21285:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"21291:7:181","type":""}],"src":"21251:168:181"},{"body":{"nodeType":"YulBlock","src":"21472:77:181","statements":[{"nodeType":"YulAssignment","src":"21482:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"21493:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"21496:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21489:3:181"},"nodeType":"YulFunctionCall","src":"21489:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"21482:3:181"}]},{"body":{"nodeType":"YulBlock","src":"21521:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"21523:16:181"},"nodeType":"YulFunctionCall","src":"21523:18:181"},"nodeType":"YulExpressionStatement","src":"21523:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"21513:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"21516:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21510:2:181"},"nodeType":"YulFunctionCall","src":"21510:10:181"},"nodeType":"YulIf","src":"21507:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"21455:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"21458:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"21464:3:181","type":""}],"src":"21424:125:181"}]},"contents":"{\n    { }\n    function abi_decode_array_uint256_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_uint256_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_uint256_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_2863() -> memPtr\n    {\n        memPtr := mload(0x40)\n        let newFreePtr := add(memPtr, 0x40)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(0x40, newFreePtr)\n    }\n    function allocate_memory_2876() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x02a0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory_2878() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x0260)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory_2879() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x0160)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory_5696() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 64)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 128)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_struct_Fr(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x20) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x20)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, calldataload(headStart))\n    }\n    function abi_decode_struct_G1Point(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x40) { revert(0, 0) }\n        value := allocate_memory_2863()\n        mstore(value, calldataload(headStart))\n        mstore(add(value, 32), calldataload(add(headStart, 32)))\n    }\n    function abi_decode_array_struct_G1Point(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let dst := allocate_memory_5696()\n        let dst_1 := dst\n        let srcEnd := add(offset, 128)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := offset\n        for { } lt(src, srcEnd) { src := add(src, 64) }\n        {\n            mstore(dst, abi_decode_struct_G1Point(src, end))\n            dst := add(dst, 0x20)\n        }\n        array := dst_1\n    }\n    function abi_decode_t_array_t_struct_G1Point(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := 64\n        let memPtr := mload(_1)\n        let newFreePtr := add(memPtr, 224)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(_1, newFreePtr)\n        let dst := memPtr\n        let srcEnd := add(offset, 448)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := offset\n        for { } lt(src, srcEnd) { src := add(src, _1) }\n        {\n            mstore(dst, abi_decode_struct_G1Point(src, end))\n            dst := add(dst, 0x20)\n        }\n        array := memPtr\n    }\n    function abi_decode_array_struct_G1Point_memory_ptr_memory_ptr(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let dst := allocate_memory()\n        let dst_1 := dst\n        let srcEnd := add(offset, 256)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := offset\n        for { } lt(src, srcEnd) { src := add(src, 0x40) }\n        {\n            mstore(dst, abi_decode_struct_G1Point(src, end))\n            dst := add(dst, 0x20)\n        }\n        array := dst_1\n    }\n    function abi_decode_t_array_t_struct_Fr(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 96)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        let dst := memPtr\n        let srcEnd := add(offset, 96)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := offset\n        for { } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n            mstore(dst, abi_decode_struct_Fr(src, end))\n            dst := add(dst, 0x20)\n        }\n        array := memPtr\n    }\n    function abi_decode_array_uint256(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let dst := allocate_memory_5696()\n        let dst_1 := dst\n        let srcEnd := add(offset, 64)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := offset\n        for { } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n            mstore(dst, calldataload(src))\n            dst := add(dst, 0x20)\n        }\n        array := dst_1\n    }\n    function abi_decode_array_struct_G2Point(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let dst := allocate_memory_5696()\n        let dst_1 := dst\n        let srcEnd := add(offset, 256)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := offset\n        for { } lt(src, srcEnd) { src := add(src, 0x80) }\n        {\n            if slt(sub(end, src), 0x80)\n            {\n                let _1 := 0\n                revert(_1, _1)\n            }\n            let value := allocate_memory_2863()\n            mstore(value, abi_decode_array_uint256(src, end))\n            let _2 := abi_decode_array_uint256(add(src, 64), end)\n            let _3 := 0x20\n            mstore(add(value, _3), _2)\n            mstore(dst, value)\n            dst := add(dst, _3)\n        }\n        array := dst_1\n    }\n    function abi_decode_array_uint256_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        let _3 := 0xffffffffffffffff\n        if gt(_1, _3) { panic_error_0x41() }\n        let _4 := shl(5, _1)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(_4, 63), not(31)))\n        if or(gt(newFreePtr, _3), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        let dst := memPtr\n        mstore(memPtr, _1)\n        dst := add(memPtr, _2)\n        let srcEnd := add(add(offset, _4), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            mstore(dst, calldataload(src))\n            dst := add(dst, _2)\n        }\n        array := memPtr\n    }\n    function abi_decode_array_struct_Fr(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let dst := allocate_memory()\n        let dst_1 := dst\n        let srcEnd := add(offset, 128)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := offset\n        for { } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n            mstore(dst, abi_decode_struct_Fr(src, end))\n            dst := add(dst, 0x20)\n        }\n        array := dst_1\n    }\n    function abi_decode_array_struct_Fr_memory_ptr_memory_ptr(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let memPtr := mload(64)\n        let _1 := 32\n        let newFreePtr := add(memPtr, _1)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        let dst := memPtr\n        let srcEnd := add(offset, _1)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := offset\n        for { } lt(src, srcEnd) { src := add(src, _1) }\n        {\n            mstore(dst, abi_decode_struct_Fr(src, end))\n            dst := add(dst, _1)\n        }\n        array := memPtr\n    }\n    function abi_decode_struct_Proof(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x05a0) { revert(0, 0) }\n        value := allocate_memory_2876()\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        mstore(value, abi_decode_array_uint256_dyn(add(headStart, offset), end))\n        mstore(add(value, 32), abi_decode_array_struct_G1Point_memory_ptr_memory_ptr(add(headStart, 32), end))\n        let _1 := 288\n        mstore(add(value, 0x40), abi_decode_struct_G1Point(add(headStart, _1), end))\n        let _2 := 352\n        mstore(add(value, 0x60), abi_decode_array_struct_G1Point_memory_ptr_memory_ptr(add(headStart, _2), end))\n        let _3 := 608\n        mstore(add(value, 0x80), abi_decode_array_struct_Fr(add(headStart, _3), end))\n        mstore(add(value, 0xa0), abi_decode_array_struct_Fr_memory_ptr_memory_ptr(add(headStart, 736), end))\n        mstore(add(value, 0xc0), abi_decode_array_struct_Fr_memory_ptr_memory_ptr(add(headStart, 768), end))\n        mstore(add(value, 0xe0), abi_decode_t_array_t_struct_Fr(add(headStart, 800), end))\n        mstore(add(value, 0x0100), abi_decode_struct_Fr(add(headStart, 896), end))\n        mstore(add(value, _1), abi_decode_struct_Fr(add(headStart, 928), end))\n        mstore(add(value, 0x0140), abi_decode_struct_Fr(add(headStart, 960), end))\n        mstore(add(value, _2), abi_decode_struct_G1Point(add(headStart, 992), end))\n        mstore(add(value, 0x0180), abi_decode_struct_G1Point(add(headStart, 1056), end))\n        mstore(add(value, 0x01a0), abi_decode_struct_Fr(add(headStart, 1120), end))\n        mstore(add(value, 0x01c0), abi_decode_struct_Fr(add(headStart, 1152), end))\n        mstore(add(value, 0x01e0), abi_decode_struct_Fr(add(headStart, 1184), end))\n        mstore(add(value, 0x0200), abi_decode_struct_Fr(add(headStart, 1216), end))\n        mstore(add(value, 0x0220), abi_decode_struct_Fr(add(headStart, 1248), end))\n        mstore(add(value, 0x0240), abi_decode_struct_Fr(add(headStart, 1280), end))\n        mstore(add(value, _3), abi_decode_struct_G1Point(add(headStart, 1312), end))\n        mstore(add(value, 0x0280), abi_decode_struct_G1Point(add(headStart, 1376), end))\n    }\n    function abi_decode_t_array_t_struct_Fr_memory_ptr_memory_ptr(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let memPtr := mload(64)\n        let _1 := 288\n        let newFreePtr := add(memPtr, _1)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        let dst := memPtr\n        let srcEnd := add(offset, _1)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := offset\n        for { } lt(src, srcEnd) { src := add(src, 0x20) }\n        {\n            mstore(dst, abi_decode_struct_Fr(src, end))\n            dst := add(dst, 0x20)\n        }\n        array := memPtr\n    }\n    function abi_decode_struct_PartialVerifierState(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x0380) { revert(0, 0) }\n        value := allocate_memory_2878()\n        mstore(value, abi_decode_struct_Fr(headStart, end))\n        mstore(add(value, 32), abi_decode_struct_Fr(add(headStart, 32), end))\n        mstore(add(value, 64), abi_decode_struct_Fr(add(headStart, 64), end))\n        mstore(add(value, 96), abi_decode_struct_Fr(add(headStart, 96), end))\n        mstore(add(value, 128), abi_decode_t_array_t_struct_Fr_memory_ptr_memory_ptr(add(headStart, 128), end))\n        let _1 := 416\n        mstore(add(value, 0xa0), abi_decode_struct_Fr(add(headStart, _1), end))\n        let _2 := 448\n        mstore(add(value, 0xc0), abi_decode_struct_Fr(add(headStart, _2), end))\n        let _3 := 480\n        mstore(add(value, 0xe0), abi_decode_struct_Fr(add(headStart, _3), end))\n        let _4 := 512\n        mstore(add(value, 0x0100), abi_decode_struct_Fr(add(headStart, _4), end))\n        let _5 := 544\n        mstore(add(value, 0x0120), abi_decode_struct_Fr(add(headStart, _5), end))\n        let _6 := 576\n        mstore(add(value, 0x0140), abi_decode_struct_Fr(add(headStart, _6), end))\n        mstore(add(value, 0x0160), abi_decode_struct_Fr(add(headStart, 0x0260), end))\n        mstore(add(value, 0x0180), abi_decode_struct_Fr(add(headStart, 640), end))\n        mstore(add(value, _1), abi_decode_struct_Fr(add(headStart, 672), end))\n        mstore(add(value, _2), abi_decode_struct_Fr(add(headStart, 704), end))\n        mstore(add(value, _3), abi_decode_struct_Fr(add(headStart, 736), end))\n        mstore(add(value, _4), abi_decode_struct_Fr(add(headStart, 768), end))\n        mstore(add(value, _5), abi_decode_struct_Fr(add(headStart, 800), end))\n        mstore(add(value, _6), abi_decode_struct_G1Point(add(headStart, 832), end))\n    }\n    function abi_decode_tuple_t_struct$_VerificationKey_$387_memory_ptrt_struct$_Proof_$484_memory_ptrt_struct$_PartialVerifierState_$544_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 2592) { revert(0, 0) }\n        let _2 := 0x0680\n        if slt(_1, _2) { revert(0, 0) }\n        let value := allocate_memory_2879()\n        mstore(value, calldataload(headStart))\n        mstore(add(value, 32), calldataload(add(headStart, 32)))\n        mstore(add(value, 64), abi_decode_struct_Fr(add(headStart, 64), dataEnd))\n        mstore(add(value, 96), abi_decode_array_struct_G1Point(add(headStart, 96), dataEnd))\n        mstore(add(value, 0x80), abi_decode_t_array_t_struct_G1Point(add(headStart, 224), dataEnd))\n        mstore(add(value, 0xa0), abi_decode_array_struct_G1Point_memory_ptr_memory_ptr(add(headStart, 672), dataEnd))\n        mstore(add(value, 0xc0), abi_decode_struct_G1Point(add(headStart, 928), dataEnd))\n        mstore(add(value, 224), abi_decode_array_struct_G1Point_memory_ptr_memory_ptr(add(headStart, 992), dataEnd))\n        mstore(add(value, 0x0100), abi_decode_struct_G1Point(add(headStart, 1248), dataEnd))\n        mstore(add(value, 0x0120), abi_decode_t_array_t_struct_Fr(add(headStart, 1312), dataEnd))\n        mstore(add(value, 0x0140), abi_decode_array_struct_G2Point(add(headStart, 1408), dataEnd))\n        value0 := value\n        let offset := calldataload(add(headStart, _2))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value1 := abi_decode_struct_Proof(add(headStart, offset), dataEnd)\n        value2 := abi_decode_struct_PartialVerifierState(add(headStart, 1696), dataEnd)\n    }\n    function abi_encode_struct_G1Point(value, pos)\n    {\n        mstore(pos, mload(value))\n        mstore(add(pos, 0x20), mload(add(value, 0x20)))\n    }\n    function abi_encode_tuple_t_struct$_G1Point_$6027_memory_ptr__to_t_struct$_G1Point_$6027_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        abi_encode_struct_G1Point(value0, headStart)\n    }\n    function abi_encode_array_struct_G1Point(value, pos)\n    {\n        pos := pos\n        let srcPtr := value\n        let i := 0\n        for { } lt(i, 0x06) { i := add(i, 1) }\n        {\n            abi_encode_struct_G1Point(mload(srcPtr), pos)\n            pos := add(pos, 0x40)\n            srcPtr := add(srcPtr, 0x20)\n        }\n    }\n    function abi_encode_array_struct_Fr(value, pos)\n    {\n        pos := pos\n        let srcPtr := value\n        let i := 0\n        for { } lt(i, 0x06) { i := add(i, 1) }\n        {\n            mstore(pos, mload(mload(srcPtr)))\n            let _1 := 0x20\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n    }\n    function abi_encode_tuple_t_struct$_Queries_$3165_memory_ptr__to_t_struct$_Queries_$3165_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 1824)\n        let _1 := mload(value0)\n        let pos := headStart\n        pos := headStart\n        let srcPtr := _1\n        let i := 0\n        for { } lt(i, 0x0d) { i := add(i, 1) }\n        {\n            abi_encode_struct_G1Point(mload(srcPtr), pos)\n            pos := add(pos, 0x40)\n            srcPtr := add(srcPtr, 0x20)\n        }\n        let _2 := 0x20\n        let memberValue0 := mload(add(value0, _2))\n        let pos_1 := add(headStart, 0x0340)\n        pos_1 := pos_1\n        let srcPtr_1 := memberValue0\n        let i_1 := 0\n        for { } lt(i_1, 0x0d) { i_1 := add(i_1, 1) }\n        {\n            mstore(pos_1, mload(mload(srcPtr_1)))\n            pos_1 := add(pos_1, _2)\n            srcPtr_1 := add(srcPtr_1, _2)\n        }\n        let memberValue0_1 := mload(add(value0, 0x40))\n        abi_encode_array_struct_G1Point(memberValue0_1, add(headStart, 0x04e0))\n        let memberValue0_2 := mload(add(value0, 0x60))\n        abi_encode_array_struct_Fr(memberValue0_2, add(headStart, 0x0660))\n    }\n    function abi_decode_tuple_t_struct$_PartialVerifierState_$544_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 896) { revert(0, 0) }\n        value0 := abi_decode_struct_PartialVerifierState(headStart, dataEnd)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_1dfeff2f48d64e5889cd05b12cf0c6149fe8cd6987dc2feb21068eaa37a150e2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"x axis isn't valid\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_ca1c4b36b64c26a780df6e129923f75fb0ec272344eb802bca8a701f0737ca5f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"y axis isn't valid\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_fda56ab6f1add86dceb1c827168bec3bc5af2fbf929350597858dbb7150756b6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"is not on curve\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_uint32_t_bytes32_t_bytes32_t_uint256__to_t_uint32_t_bytes32_t_bytes32_t_uint256__nonPadded_inplace_fromStack_reversed(pos, value3, value2, value1, value0) -> end\n    {\n        mstore(pos, and(shl(224, value0), shl(224, 0xffffffff)))\n        mstore(add(pos, 4), value1)\n        mstore(add(pos, 36), value2)\n        mstore(add(pos, 68), value3)\n        end := add(pos, 100)\n    }\n    function abi_encode_tuple_packed_t_uint32_t_bytes32_t_bytes32_t_uint32__to_t_uint32_t_bytes32_t_bytes32_t_uint32__nonPadded_inplace_fromStack_reversed(pos, value3, value2, value1, value0) -> end\n    {\n        let _1 := shl(224, 0xffffffff)\n        mstore(pos, and(shl(224, value0), _1))\n        mstore(add(pos, 4), value1)\n        mstore(add(pos, 36), value2)\n        mstore(add(pos, 68), and(shl(224, value3), _1))\n        end := add(pos, 72)\n    }\n    function checked_add_t_uint32(x, y) -> sum\n    {\n        let _1 := 0xffffffff\n        sum := add(and(x, _1), and(y, _1))\n        if gt(sum, _1) { panic_error_0x11() }\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        product := mul(x, y)\n        if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061004c5760003560e01c8063330deb9f1461005157806338fdad141461007957806397e2957d14610099578063fec4e96e146100b9575b600080fd5b61006461005f366004613a42565b6100ce565b60405190151581526020015b60405180910390f35b61008c61008736600461435b565b610111565b6040516100709190614485565b6100ac6100a736600461435b565b610266565b60405161007091906144fe565b6100cc6100c736600461459f565b6105ca565b005b6000806100d9610678565b602081015190915085146100ec57600080fd5b60006100fa87878787610e07565b90506101068183611252565b979650505050505050565b6040805180820190915260008082526020820152604080516020810190915260008152604080516020810190915260008152608085015161016a9060005b60200201516040805160208101909152600081529051815290565b91506101768280611537565b608085015161018e9060015b60200201518390611551565b60808401516101a69060015b60200201518390611537565b6101b08183611583565b60808501516101c090600161014f565b91506101cc8280611537565b60808501516101dc906002610182565b60808401516101ec90600261019a565b6101f68183611583565b608085015161020690600261014f565b608086015190925061021990600061019a565b6080850151610229906003610182565b608084015161023990600361019a565b6102438183611583565b606086015161025c90829060015b60200201519061159d565b9695505050505050565b61026e6132d4565b600260005b60048110156102f15784602001518160048110610292576102926145c3565b6020020151835183600d81106102aa576102aa6145c3565b6020020152608085015181600481106102c5576102c56145c3565b6020020151836020015183600d81106102e0576102e06145c3565b602002015260019182019101610273565b50606085015151825182600d811061030b5761030b6145c3565b602002015260c084015160006020020151826020015182600d8110610332576103326145c3565b602002015260010160005b610349600160046145ef565b8110156103c5578560a001518160048110610366576103666145c3565b6020020151835183600d811061037e5761037e6145c3565b602002015260e08501518160038110610399576103996145c3565b6020020151836020015183600d81106103b4576103b46145c3565b60200201526001918201910161033d565b50604084810151908301515260208401516103e2600160046145ef565b600481106103f2576103f26145c3565b6020908102919091015160408401518201526101008501516060840180519190915260a0808701515191519092015260e08601515190840151600090610448906040805160208101909152600081529051815290565b905060015b600481101561049b57610470828960e001518360048110610251576102516145c3565b61024087018190526104839084906115dc565b60a0860151610493908390611537565b60010161044d565b508351829084600d81106104b1576104b16145c3565b6020020181905250856101e00151846020015184600d81106104d5576104d56145c3565b602002015260c087015184516001949094019384600d81106104f9576104f96145c3565b6020020181905250856102200151846020015184600d811061051d5761051d6145c3565b602002015261010087015184516001949094019384600d8110610542576105426145c3565b6020020181905250856102400151846020015184600d8110610566576105666145c3565b602002015250610160850151604084810180518201929092526101a0870151606080870180519093019190915261018088015183518201526101c0880151825190910152905160809081019290925261020090950151945101939093529392505050565b6020810151516000036105dc57600080fd5b6105e660016115eb565b608082018051919091526020808301805160408051808501825260008082529251815294518401949094529051835192830190935281529051815260025b600981101561067357602083015161063d908390611537565b6040805160208101909152600081528251815283608001518260098110610666576106666145c3565b6020020152600101610624565b505050565b610680613313565b6001602082015261010081526106b57f1058a83d529be585820b96ff0a13f2dbd8675a9e5dd2336a6692cc1e5a526c816115eb565b60408201526107047f05f5cabc4eab14cfabee1334ef7f33a66259cc9fd07af862308d5c41765adb4b7f128a103fbe66c8ff697182c0963d963208b55a5a53ddeab9b4bc09dc2a68a9cc611626565b6080820151526107547f0d9980170c334c107e6ce4d66bbc4d23bbcdc97c020b1e1c3f6e04c6c663d2c27f0968205845091ceaf3f863b1613fbdf7ce9a87ccfd97f22011679e6350384419611626565b6080820151602001526107a77f0c84a19b149a1612cb042ad86382b9e94367c0add60d07e12399999e7db09efe7f1e02f70c44c9bfb7bf2164cee2ab4813bcb9be56eb432e2e9dfffffe196d846d611626565b6080820151604001526107fa7f1eb3599506a41a7d62e1f7438d6732fbb9d1eda7b9c7a0213eca63c9334ac5a97f23563d9f429908d8ea80bffa642840fb081936d45b388bafc504d9b1e5b1c410611626565b60808201516060015261080f60006001611626565b60808281015101526108617f063e8dac7ee3ee6a4569fd53b416fe17f8f10de8c435c336e5a1cf2e026432007f1d4c1781b78f926d55f89ef72abb96bee350ce60ddc684f5a02d87c5f4cdf943611626565b608082015160a0015261087660006001611626565b608082015160c001526108c97f0b487eb34c8480ea506f5c6c25857155d61d7f9824b60bc80e1a415a5bcf247f7f07ea0d0d0df9dbcc944e9341a5bb49ae796d9dc9d7ca1c032b53784715b946db611626565b6060820151526109197f0fa66faa0b9ea782eb400175ac9f0c05f0de64332eec54a87cd20db4540baec27f07dea33d314c690c4bd4b21deda1a44b9f8dd87e539024622768c2f8b8bdabe1611626565b60608201516020015261096c7f120482c52e31d2373f9b2dc80a47e68f035e278d220fa8a89d0c81f1333439537f02928a78ea2e1a943e9220b7e288fd48a561263f8e5f94518f21aaa43781ceac611626565b60a0820151526109bc7f1dfad2c4d60704bcf6af0abd9cce09151f063c4b52200c268e470c6a6c93cbca7f08b28dd6ca14d7c33e078fe0f332a9a4d95ac8df171355de9e69930aec02b5dc611626565b60a082015160200152610a0f7f0935a4fd6ab67925929661cf2d2e814f87f589ee6234cb9675ecc2d897f1b3387f1032ccc41c047413fce4a847ba7e51e4a2ea406d89a88d480c5f0efaf6c8c89a611626565b60a082015160400152610a627f0eafaea3af7d1fadb2138db1b991af5d2218f6892714fd019898c7e1a43ecfe87f28fb17eda285ed74cc9771d62fad22ab459bbb0a4968c489972aca8b7e618fcb611626565b60a082015160600152610ab57f155201a564e721b1f5c06315ad4e24eaad3cbdd6197b19cd903fe85613080f867f12fb201bc896572ac14357e2601f5118636f1eeb7b89c177ac940aac3b5253ec611626565b60c0820152610b047f1cb0e2ae4d52743898d94d7f1729bd0d3357ba035cdb6b3af7ebff9159f8f2977f15ee595227c9e0f7a487ddb8072d5ea3cfd058bc569211c3546bc0e80051553f611626565b60e082015152610b547f13e4ab94c03a5a29719930c1361d854e244cf918f1e29cb031303f4a13b719777f0f792ef4c6c8746c97be61ed9b20f31ba2dec3bd5c91a2d9a4a586f19af3a07c611626565b60e082015160200152610ba77f1c9e69bd2b04240ebe44fb23d67c596fce4a1336109fdce38c2f184a63cd8acc7f1cbd3e72bdbce827227e503690b10be9365ae760e9d2babde5ba81edf12f8206611626565b60e082015160400152610bfa7f2a0d46339fbf72104df6a241b53a957602b1a16f6e3b9f89bf3e4c4645df823c7f11a601d7b2eee4b7885f34c9873426ba1263f38eae2e0351d653b8b1ba9c67f6611626565b60e082015160600152610c4d7f1a70e43f18b18d686807c2b1c6471cd949dd251b48090bca443d86b97afae9517f0e6e23ad15a1bd851b228788ae4a03bf25bda39ede6d5a92d501a8402a0dfe43611626565b610100820152610c5d60056115eb565b61012082015152610c6e60076115eb565b61012082015160200152610c82600a6115eb565b61012082015160026020020181905250610d4460405180604001604052807f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81525060405180604001604052807f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa815250611651565b610140820151526040805180820182527f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c181527f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b060208281019190915282518084019093527f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe483527f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e5590830152610dfa91611651565b6101408201516020015290565b610e0f6133d5565b836001600160401b03811115610e2757610e27613aad565b604051908082528060200260200182016040528015610e50578160200160208202803683370190505b50815260005b84811015610ea057858582818110610e7057610e706145c3565b9050602002013582600001518281518110610e8d57610e8d6145c3565b6020908102919091010152600101610e56565b506000805b6004811015610f1a57610ef1858584818110610ec357610ec36145c3565b905060200201358686610ed68660010190565b818110610ee557610ee56145c3565b90506020020135611659565b83602001518260048110610f0757610f076145c3565b6020020152600282019150600101610ea5565b50610f43848483818110610f3057610f306145c3565b905060200201358585610ed68560010190565b6040830152600201610f60848483818110610f3057610f306145c3565b610160830152600201610f7e848483818110610f3057610f306145c3565b61018083015260020160005b6004811015610fd157610fa8858584818110610ec357610ec36145c3565b83606001518260048110610fbe57610fbe6145c3565b6020020152600282019150600101610f8a565b5060005b600481101561102657610fff858584818110610ff357610ff36145c3565b905060200201356115eb565b83608001518260048110611015576110156145c3565b602002015260019182019101610fd5565b5060005b600181101561106f57611048858584818110610ff357610ff36145c3565b8360a00151826001811061105e5761105e6145c3565b60200201526001918201910161102a565b5060005b60018110156110b857611091858584818110610ff357610ff36145c3565b8360c0015182600181106110a7576110a76145c3565b602002015260019182019101611073565b5060005b6003811015611101576110da858584818110610ff357610ff36145c3565b8360e0015182600381106110f0576110f06145c3565b6020020152600191820191016110bc565b50611117848483818110610ff357610ff36145c3565b610100830152600101611135848483818110610ff357610ff36145c3565b6101a0830152600101611153848483818110610ff357610ff36145c3565b6101c0830152600101611171848483818110610ff357610ff36145c3565b6101e083015260010161118f848483818110610ff357610ff36145c3565b6102008301526001016111ad848483818110610ff357610ff36145c3565b6102208301526001016111cb848483818110610ff357610ff36145c3565b6102408301526001016111e9848483818110610ff357610ff36145c3565b610120830152600101611207848483818110610ff357610ff36145c3565b610140830152600101611225848483818110610f3057610f306145c3565b610260830152600201611243848483818110610f3057610f306145c3565b61028083015250949350505050565b60008061125f84846117f1565b905061126c838583611b2a565b151560000361127f576000915050611531565b60608401516000906112b890825b6020020151604080518082019091526000808252602080830191825283518352929092015190915290565b84516101808401519192506000916112cf91611e23565b604080516020808201835260008083528451835283518085019094528084529083015291925060015b60048110156113425761131a8960600151826004811061128d5761128d6145c3565b91506113268284611ea2565b61133085836115dc565b61133a8385611537565b6001016112f8565b505050506000611353858785610266565b80518390526101208701516020820151529050611371858785611ead565b8151602090810191909152610140870151818301805190920152815151905151600061139d60016115eb565b90506113bc604051806040016040528060008152602001600081525090565b60015b600d811015611445576101408801516113d9908490611537565b6113f383876000015183600d8110610251576102516145c3565b91506113ff85836115dc565b856020015181600d8110611415576114156145c3565b6020020151610220890181905261142c9084611537565b61022088015161143d908590611583565b6001016113bf565b50610140870151611457908390611537565b6000611474838760400151600060068110610251576102516145c3565b6060870151519091506114878185611537565b60015b6006811015611510576101408a01516114a4908690611537565b6114be8589604001518360068110610251576102516145c3565b93506114ca83856115dc565b876060015181600681106114e0576114e06145c3565b60200201516102208b018190526114f79086611537565b6102208a0151611508908390611583565b60010161148a565b506115258b61014001518d8b89868a876122be565b99505050505050505050505b92915050565b60008051602061466a833981519152815183510990915250565b60008051602061466a833981519152815161157a9060008051602061466a8339815191526145ef565b83510890915250565b60008051602061466a833981519152815183510890915250565b604080518082019091526000808252602082015282511580156115c4575082602001516001145b156115d157600060208401525b611531838383612466565b6115e78282846124a8565b5050565b60408051602081019091526000815260008051602061466a833981519152821061161457600080fd5b50604080516020810190915290815290565b60408051808201909152600080825260208201525b5060408051808201909152918252602082015290565b61163b6135e3565b604080518082019091526000808252602082015282158015611679575081155b1561169a576040518060400160405280848152602001838152509050611531565b60008051602061464a83398151915283106116f15760405162461bcd60e51b81526020600482015260126024820152711e08185e1a5cc81a5cdb89dd081d985b1a5960721b60448201526064015b60405180910390fd5b60008051602061464a83398151915282106117435760405162461bcd60e51b81526020600482015260126024820152711e48185e1a5cc81a5cdb89dd081d985b1a5960721b60448201526064016116e8565b600060008051602061464a8339815191528384099050600060008051602061464a833981519152858609905060008051602061464a833981519152858209905060008051602061464a8339815191526003820890508082146117d95760405162461bcd60e51b815260206004820152600f60248201526e6973206e6f74206f6e20637572766560881b60448201526064016116e8565b50506040805180820190915292835250602082015290565b6117f9613603565b60408051606081018252600080825260208201819052918101829052905b836020015181101561185b576118538560000151828151811061183c5761183c6145c3565b60200260200101518361253890919063ffffffff16565b600101611817565b5060005b60048110156118955761188d85602001518260048110611881576118816145c3565b602002015183906125c6565b60010161185f565b5061189f816125e2565b60a08301526101608401516118b59082906125c6565b6118be816125e2565b60408301526118cc816125e2565b606083015260408401516118e19082906125c6565b6118ea816125e2565b60c08301526118f8816125e2565b60e083015261018084015161190e9082906125c6565b611917816125e2565b602083015260005b60048110156119495761194185606001518260048110611881576118816145c3565b60010161191f565b50611953816125e2565b61018083015261012084015161196a908290612688565b60005b60048110156119a35761199b8560800151826004811061198f5761198f6145c3565b60200201518390612688565b60010161196d565b5060005b60018110156119d1576119c98560a00151826001811061198f5761198f6145c3565b6001016119a7565b5060005b60018110156119ff576119f78560c00151826001811061198f5761198f6145c3565b6001016119d5565b5060005b6003811015611a2d57611a258560e00151826003811061198f5761198f6145c3565b600101611a03565b506101808201516040805160208101825260008152915182526101a08401829052840151611a5b9190611537565b610100840151611a6c908290612688565b6101e0840151611a7d908290612688565b610220840151611a8e908290612688565b610240840151611a9f908290612688565b6101a0840151611ab0908290612688565b6101c0840151611ac1908290612688565b610200840151611ad2908290612688565b610140840151611ae3908290612688565b611aec816125e2565b610140830152610260840151611b039082906125c6565b610280840151611b149082906125c6565b611b1d816125e2565b6101608301525092915050565b60008084602001516001600160401b03811115611b4957611b49613aad565b604051908082528060200260200182016040528015611b72578160200160208202803683370190505b50905060005b8151811015611ba75780828281518110611b9457611b946145c3565b6020908102919091010152600101611b78565b506000611bb460006115eb565b905060005b8660200151811015611c3257611bde8188600001518960400151886101800151612696565b61022086015285518051611c1991611c0d9184908110611c0057611c006145c3565b60200260200101516115eb565b61022087015190611537565b610220850151611c2a908390611583565b600101611bb9565b5060c0850151611c4b9060005b60200201518290611537565b61014085015160408051602081019091526000815290518152611c6e8183611583565b611c77856105ca565b6080850151600090611c8a90600461014f565b9050611ca48761010001518261153790919063ffffffff16565b611cb0600160046145ef565b600314611cbc57600080fd5b60408051602081019091526000815260005b6003811015611d5057611cf08960e00151826003811061014f5761014f6145c3565b9150611d0988604001518361153790919063ffffffff16565b611d2e89608001518260048110611d2257611d226145c3565b60200201518390611583565b6060880151611d3e908390611583565b611d488383611537565b600101611cce565b506080880151611d6190600361014f565b9050611d7a87606001518261158390919063ffffffff16565b611d848282611537565b611d8e8383611551565b6000611da38a60000151896101800151612744565b6080890151909150611db6906005611c3f565b611dc08482611551565b6000611dcd8b8b8b6127ca565b9050611dd98582611583565b6101208a0151604080516020810190915260008152905181528b516101808b0151611e0e91611e0791612a1a565b8290611537565b945194519094149a9950505050505050505050565b604080516020808201835260008252825160c08101845281815280820182905292830152835160608301526080820183905260008051602061466a83398151915260a083015290611e726137b7565b600060208260c08560055afa905080611e8a57600080fd5b50604080516020810190915290518152949350505050565b6115e7828284612466565b6040805180820190915260008082526020820152611ecc600080611626565b90506000611efb8460800151600060048110611eea57611eea6145c3565b602002015160808701516000610251565b9050611f0782826115dc565b6080840151611f23906001602002015160808701516001610251565b9050611f2f82826115dc565b6080840151611f4b906002602002015160808701516002610251565b9050611f5782826115dc565b6080840151611f73906003602002015160808701516003610251565b9050611f7f82826115dc565b6080840151600090611f91908261014f565b6080860151909150611fa4906001611c3f565b6080860151611fb69082906004610251565b9150611fc283836115dc565b608086015160a00151611fd69084906115dc565b60a0850151516080870151611fed91906006610251565b9150611ff983836115dc565b60c08501515161200a908490611ea2565b6000612017878787610111565b905061202384826115dc565b61202f600160046145ef565b60031461203b57600080fd5b600061204760016115eb565b90506000612065876080015160046009811061014f5761014f6145c3565b905060005b600481101561212d57610180880151604080516020810190915260008152905181529450806000036120a5576120a08584611537565b6120d6565b6101208a01516120d6906120ba6001846145ef565b600381106120ca576120ca6145c3565b60200201518690611537565b60408801516120e6908690611537565b60608801516120f6908690611583565b61211b8960800151826004811061210f5761210f6145c3565b60200201518690611583565b6121258286611537565b60010161206a565b50604088015161213d908261159d565b945061214986866115dc565b608087015161215990600461014f565b905061217287604001518261153790919063ffffffff16565b610100880151612183908290611537565b60005b612192600160046145ef565b811015612206576121b28960e00151826003811061014f5761014f6145c3565b94506121cb88604001518661153790919063ffffffff16565b60608801516121db908690611583565b6121f48960800151826004811061210f5761210f6145c3565b6121fe8286611537565b600101612186565b5060a08901516122199082906003610251565b94506122258686612a49565b61223f60008a600001518b604001518a6101800151612696565b6101e088018190525160000361225457600080fd5b506101e086015160408051602081019091526000815290518152608087015161227e906005611c3f565b604088015161228d908261159d565b945061229986866115dc565b60006122a58989612a54565b90506122b187826115dc565b5050505050509392505050565b604080518082019091526000808252602080830182815287518452908701519052906122f887610160015186611ea290919063ffffffff16565b61230281866115dc565b60408051602081019091526000815283518152610160880151612326908290611537565b6123308186611583565b600061236882612362604080518082018252600080825260209182015281518083019092526001825260029082015290565b9061159d565b90506123748382612a49565b6101808901516102608b01516123899161159d565b905060006123ac8a6101a001516040805160208101909152600081529051815290565b90506123c68a61016001518261153790919063ffffffff16565b6102808b01516000906123d9908361159d565b90506123e583826115dc565b6123ef85846115dc565b600061240e8c61016001518e610280015161159d90919063ffffffff16565b90506124288d6102600151826115dc90919063ffffffff16565b61243181612d22565b8d5160208f01516000612442612d62565b905061245089848685612e22565b9950505050505050505050979650505050505050565b61246e6137d5565b835181526020840151816001602002015282518160026020020152600060408360608460075afa9050806124a157600080fd5b5050505050565b81511580156124b957506020820151155b156124d1578251815260209283015192019190915250565b82511580156124e257506020830151155b156124f7578151815260209182015191015250565b6124ff6137f3565b8351815260208085015181830152835160408301528301518160035b6020020152600060408360808460065afa9050806124a157600080fd5b81516020808401516040516000928101929092526024820183905260448201526064810183905260840160408051808303601f1901815291815281516020928301208552848201519051600160e01b928101929092526024820183905260448201526064810183905260840160408051601f1981840301815291905280516020918201209301929092525050565b6125d4828260000151612538565b6115e7828260200151612538565b60408051602081019091526000815281516020808401516040808601519051600160e11b938101939093526024830193909352604482015260e09190911b6001600160e01b03191660648201526000906068016040516020818303038152906040528051906020012090506001836040018181516126609190614602565b63ffffffff1690525060408051602081019091526001600160fd1b0391909116815292915050565b6115e7828260000151612538565b6040805160208101909152600081528385106126b157600080fd5b60006126bd60016115eb565b905060006126cb8588611e23565b90506126d78487611e23565b92506126e38383611551565b82516000036126f157600080fd5b6126fb8382611537565b604080516020810190915260008152845181526127188183611551565b612724611e07886115eb565b61272d81612f22565b90506127398482611537565b505050949350505050565b604080516020810190915260008152600061275f60016115eb565b9050600061276c856115eb565b6040805160208101909152600081528551815290915061278c8184611551565b6127968183611537565b61279f81612f22565b90506127ab8587611e23565b93506127b78484611551565b6127c18482611537565b50505092915050565b60408051602081019091526000815260408051602081019091526000815260006127f460016115eb565b90506128148460c001516040805160208101909152600081529051815290565b61010085018190526128269082611583565b61010084015160408051602081019091526000815290518152610120850181905260e08501516128569190611537565b6101a08501516040805160208101909152600081529051815291506128888460c001518361153790919063ffffffff16565b610120840151612899908390611583565b6101c08501516128aa908390611537565b60808401516128ba90600661019a565b60006128db600188600001516128d091906145ef565b604089015190611e23565b90506128fc8561018001516040805160208101909152600081529051815290565b6101c0860181905261290e9082611551565b6101c085015161291f908490611537565b6129298484611583565b612943600088600001518960400151886101800151612696565b6101e0860181905260408051602081019091526000815290518152608086015160e00151909350612975908490611537565b61297f8484611551565b60006129a16001896000015161299591906145ef565b61012088015190611e23565b90506129c9600189600001516129b791906145ef565b895160408b01516101808a0151612696565b61020087018190526040805160208101909152600081529051815293506129f08482611537565b60808601516101000151612a05908590611537565b612a0f8585611551565b505050509392505050565b604080516020810190915260008152612a338284611e23565b9050611531612a4260016115eb565b8290611551565b6115e7828284612f61565b60408051808201909152600080825260208201526000612a7460006115eb565b9050612a8c6040518060200160405280600081525090565b60408051602080820183526000918290526101c08801518351918201909352908152905181526080850151612ac2906006611c3f565b6101c0850151612ad3908290611537565b610160860151600090612ae6908361159d565b9050612af285826115dc565b610200870151604080516020810190915260008152905181529150612b248660c001518361153790919063ffffffff16565b6101e0870151612b35908390611583565b610120860151612b46908390611583565b6040805160208101909152600081526000612b6160016115eb565b9050612b796040518060200160405280600081525090565b60005b612b88600160046145ef565b811015612bd657612ba88b60800151826004811061014f5761014f6145c3565b9150612bb48284611537565b612bbe8483611583565b60a08a0151612bce908490611537565b600101612b7c565b506102408a0151604080516020810190915260008152905181529550612bfc8683611537565b612c068387611583565b6102208a0151612c17908490611537565b60e0890151612c27908490611583565b612c318584611537565b610100890151612c42908690611537565b604080516020810190915260008152875181529550612c618686611551565b6080890151869550612c749060066120ca565b6101c0890151612c85908690611537565b6101e08901516040805160208101909152600081529051815260808a0151909650612cb99060075b60200201518790611537565b612cc38587611583565b6102008901516040805160208101909152600081529051815260808a0151909650612cef906008612cad565b612cf98587611583565b6101808a0151612d09908661159d565b9350612d1588856115dc565b5050505050505092915050565b8060200151600003612d3d57805115612d3a57600080fd5b50565b6020810151612d5a9060008051602061464a8339815191526145ef565b602090910152565b612d6a6135e3565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b82527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60208381019190915281019190915290565b60408051600280825260608201909252600091829190816020015b6040805180820190915260008082526020820152815260200190600190039081612e3d5750506040805160028082526060820190925291925060009190602082015b612e876135e3565b815260200190600190039081612e7f5790505090508682600081518110612eb057612eb06145c3565b60200260200101819052508482600181518110612ecf57612ecf6145c3565b60200260200101819052508581600081518110612eee57612eee6145c3565b60200260200101819052508381600181518110612f0d57612f0d6145c3565b6020026020010181905250610106828261300b565b6040805160208101909152600081528151600003612f3f57600080fd5b61153182612f5c600260008051602061466a8339815191526145ef565b611e23565b8151158015612f7257506020820151155b15612f8a578251815260209283015192019190915250565b8251158015612f9b57506020830151155b15612fcb57815181526020820151612fc19060008051602061464a8339815191526145ef565b6020909101525050565b612fd36137f3565b8351815260208085015181830152835160408301528301516130039060008051602061464a8339815191526145ef565b81600361251b565b6000815183511461301b57600080fd5b8251600061302a82600661461f565b90506000816001600160401b0381111561304657613046613aad565b60405190808252806020026020018201604052801561306f578160200160208202803683370190505b50905060005b838110156132a05786818151811061308f5761308f6145c3565b602002602001015160000151828260066130a9919061461f565b6130b4906000614636565b815181106130c4576130c46145c3565b6020026020010181815250508681815181106130e2576130e26145c3565b602002602001015160200151828260066130fc919061461f565b613107906001614636565b81518110613117576131176145c3565b602002602001018181525050858181518110613135576131356145c3565b602090810291909101015151518261314e83600661461f565b613159906002614636565b81518110613169576131696145c3565b602002602001018181525050858181518110613187576131876145c3565b602090810291909101810151510151826131a283600661461f565b6131ad906003614636565b815181106131bd576131bd6145c3565b6020026020010181815250508581815181106131db576131db6145c3565b6020026020010151602001516000600281106131f9576131f96145c3565b60200201518261320a83600661461f565b613215906004614636565b81518110613225576132256145c3565b602002602001018181525050858181518110613243576132436145c3565b602002602001015160200151600160028110613261576132616145c3565b60200201518261327283600661461f565b61327d906005614636565b8151811061328d5761328d6145c3565b6020908102919091010152600101613075565b506132a96137b7565b6000602082602086026020860160085afa9050806132c657600080fd5b505115159695505050505050565b60405180608001604052806132e7613811565b81526020016132f461384b565b8152602001613301613880565b815260200161330e6138aa565b905290565b60405180610160016040528060008152602001600081526020016133436040518060200160405280600081525090565b81526020016133506138cb565b815260200161335d6138f3565b815260200161336a61391e565b815260200161338c604051806040016040528060008152602001600081525090565b815260200161339961391e565b81526020016133bb604051806040016040528060008152602001600081525090565b81526020016133c8613947565b815260200161330e613968565b604051806102a00160405280606081526020016133f061391e565b8152602001613412604051806040016040528060008152602001600081525090565b815260200161341f61391e565b815260200161342c613995565b81526040805180820182526000602080830182815283528085019290925282518084018452918201908152815290820152606001613468613947565b81526020016134836040518060200160405280600081525090565b815260200161349e6040518060200160405280600081525090565b81526020016134b96040518060200160405280600081525090565b81526020016134db604051806040016040528060008152602001600081525090565b81526020016134fd604051806040016040528060008152602001600081525090565b81526020016135186040518060200160405280600081525090565b81526020016135336040518060200160405280600081525090565b815260200161354e6040518060200160405280600081525090565b81526020016135696040518060200160405280600081525090565b81526020016135846040518060200160405280600081525090565b815260200161359f6040518060200160405280600081525090565b81526020016135c1604051806040016040528060008152602001600081525090565b815260200161330e604051806040016040528060008152602001600081525090565b60405180604001604052806135f66139b6565b815260200161330e6139b6565b60408051610280810182526000610260820181815282528251602080820185528282528084019190915283518082018552828152838501528351908101909352825290606082019081526020016136586139d4565b81526020016136736040518060200160405280600081525090565b815260200161368e6040518060200160405280600081525090565b81526020016136a96040518060200160405280600081525090565b81526020016136c46040518060200160405280600081525090565b81526020016136df6040518060200160405280600081525090565b81526020016136fa6040518060200160405280600081525090565b81526020016137156040518060200160405280600081525090565b81526020016137306040518060200160405280600081525090565b815260200161374b6040518060200160405280600081525090565b81526020016137666040518060200160405280600081525090565b81526020016137816040518060200160405280600081525090565b815260200161379c6040518060200160405280600081525090565b81526020016135c16040518060200160405280600081525090565b60405180602001604052806001906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806101a00160405280600d905b60408051808201909152600080825260208201528152602001906001900390816138215790505090565b604051806101a00160405280600d905b60408051602081019091526000815281526020019060019003908161385b5790505090565b604080516101008101909152600060c0820181815260e08301919091528152600560208201613821565b6040805160e08101909152600060c08201908152815260056020820161385b565b6040805160808101825260009181018281526060820192909252908152600160208201613821565b604080516101208101909152600060e082018181526101008301919091528152600660208201613821565b6040805160c0810190915260006080820181815260a08301919091528152600360208201613821565b6040805160808101909152600060608201908152815260026020820161385b565b60405180604001604052806002905b61397f6135e3565b8152602001906001900390816139775790505090565b6040805160a08101909152600060808201908152815260036020820161385b565b60405180604001604052806002906020820280368337509192915050565b60408051610140810190915260006101208201908152815260086020820161385b565b60008083601f840112613a0957600080fd5b5081356001600160401b03811115613a2057600080fd5b6020830191508360208260051b8501011115613a3b57600080fd5b9250929050565b60008060008060408587031215613a5857600080fd5b84356001600160401b0380821115613a6f57600080fd5b613a7b888389016139f7565b90965094506020870135915080821115613a9457600080fd5b50613aa1878288016139f7565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613ae557613ae5613aad565b60405290565b6040516102a081016001600160401b0381118282101715613ae557613ae5613aad565b60405161026081016001600160401b0381118282101715613ae557613ae5613aad565b60405161016081016001600160401b0381118282101715613ae557613ae5613aad565b604051608081016001600160401b0381118282101715613ae557613ae5613aad565b600060208284031215613b8857600080fd5b604051602081018181106001600160401b0382111715613baa57613baa613aad565b6040529135825250919050565b600060408284031215613bc957600080fd5b613bd1613ac3565b9050813581526020820135602082015292915050565b600082601f830112613bf857600080fd5b613c00613ac3565b806080840185811115613c1257600080fd5b845b81811015613c3657613c268782613bb7565b8452602090930192604001613c14565b509095945050505050565b600082601f830112613c5257600080fd5b6040805160e081018181106001600160401b0382111715613c7557613c75613aad565b8252806101c0850186811115613c8a57600080fd5b855b81811015613cad57613c9e8882613bb7565b83526020909201918401613c8c565b50919695505050505050565b600082601f830112613cca57600080fd5b613cd2613b54565b80610100840185811115613ce557600080fd5b845b81811015613c3657613cf98782613bb7565b8452602090930192604001613ce7565b600082601f830112613d1a57600080fd5b604051606081018181106001600160401b0382111715613d3c57613d3c613aad565b604052806060840185811115613d5157600080fd5b845b81811015613d7357613d658782613b76565b835260209283019201613d53565b509195945050505050565b600082601f830112613d8f57600080fd5b613d97613ac3565b806040840185811115613da957600080fd5b845b81811015613c36578035845260209384019301613dab565b600082601f830112613dd457600080fd5b613ddc613ac3565b80610100840185811115613def57600080fd5b845b81811015613c365760808188031215613e0a5760008081fd5b613e12613ac3565b613e1c8883613d7e565b8152613e2b8860408401613d7e565b6020828101919091529085529390930192608001613df1565b600082601f830112613e5557600080fd5b813560206001600160401b0380831115613e7157613e71613aad565b8260051b604051601f19603f83011681018181108482111715613e9657613e96613aad565b604052938452858101830193838101925087851115613eb457600080fd5b83870191505b8482101561010657813583529183019190830190613eba565b600082601f830112613ee457600080fd5b613eec613b54565b806080840185811115613efe57600080fd5b845b81811015613c3657613f128782613b76565b845260209384019301613f00565b600082601f830112613f3157600080fd5b60405160208082018281106001600160401b0382111715613f5457613f54613aad565b6040528184820186811115613f6857600080fd5b855b81811015613f8957613f7c8882613b76565b8352918301918301613f6a565b50929695505050505050565b60006105a08284031215613fa857600080fd5b613fb0613aeb565b905081356001600160401b03811115613fc857600080fd5b613fd484828501613e44565b825250613fe48360208401613cb9565b6020820152610120613ff884828501613bb7565b604083015261016061400c85828601613cb9565b606084015261026061402086828701613ed3565b6080850152614033866102e08701613f20565b60a0850152614046866103008701613f20565b60c0850152614059866103208701613d09565b60e085015261406c866103808701613b76565b610100850152614080866103a08701613b76565b83850152614092866103c08701613b76565b6101408501526140a6866103e08701613bb7565b828501526140b8866104208701613bb7565b6101808501526140cc866104608701613b76565b6101a08501526140e0866104808701613b76565b6101c08501526140f4866104a08701613b76565b6101e0850152614108866104c08701613b76565b61020085015261411c866104e08701613b76565b610220850152614130866105008701613b76565b610240850152614144866105208701613bb7565b81850152505050614159836105608401613bb7565b61028082015292915050565b600082601f83011261417657600080fd5b6040516101208082018281106001600160401b038211171561419a5761419a613aad565b604052830181858211156141ad57600080fd5b845b82811015613d73576141c18782613b76565b8252602091820191016141af565b600061038082840312156141e257600080fd5b6141ea613b0e565b90506141f68383613b76565b81526142058360208401613b76565b60208201526142178360408401613b76565b60408201526142298360608401613b76565b606082015261423b8360808401614165565b60808201526101a061424f84828501613b76565b60a08301526101c061426385828601613b76565b60c08401526101e061427786828701613b76565b60e085015261020061428b87828801613b76565b6101008601526102206142a088828901613b76565b6101208701526102406142b589828a01613b76565b6101408801526142c9896102608a01613b76565b6101608801526142dd896102808a01613b76565b6101808801526142f1896102a08a01613b76565b86880152614303896102c08a01613b76565b85880152614315896102e08a01613b76565b84880152614327896103008a01613b76565b83880152614339896103208a01613b76565b8288015261434b896103408a01613bb7565b8188015250505050505092915050565b6000806000838503610a2081121561437257600080fd5b6106808082121561438257600080fd5b61438a613b31565b915085358252602086013560208301526143a78760408801613b76565b60408301526143b98760608801613be7565b60608301526143cb8760e08801613c41565b60808301526143de876102a08801613cb9565b60a08301526143f1876103a08801613bb7565b60c0830152614404876103e08801613cb9565b60e0830152614417876104e08801613bb7565b61010083015261442b876105208801613d09565b61012083015261443f876105808801613dc3565b6101408301529093508401356001600160401b0381111561445f57600080fd5b61446b86828701613f95565b92505061447c856106a086016141cf565b90509250925092565b815181526020808301519082015260408101611531565b8060005b60068110156144d4576144be84835180518252602090810151910152565b60409390930192602091909101906001016144a0565b50505050565b8060005b60068110156144d4578151518452602093840193909101906001016144de565b81516107208201908260005b600d81101561453e5761452882845180518252602090810151910152565b602092909201916040919091019060010161450a565b505050602080840151610340840160005b600d81101561456d578251518252918301919083019060010161454f565b5050505060408301516145846104e084018261449c565b5060608301516145986106608401826144da565b5092915050565b600061038082840312156145b257600080fd5b6145bc83836141cf565b9392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115611531576115316145d9565b63ffffffff818116838216019080821115614598576145986145d9565b8082028115828204841417611531576115316145d9565b80820180821115611531576115316145d956fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a2646970667358221220525eba758bf7c42a7d1cf6a05eb2cf3dd25b2caf7bb388aee220ed13d5aa7c8f64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x330DEB9F EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x38FDAD14 EQ PUSH2 0x79 JUMPI DUP1 PUSH4 0x97E2957D EQ PUSH2 0x99 JUMPI DUP1 PUSH4 0xFEC4E96E EQ PUSH2 0xB9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x3A42 JUMP JUMPDEST PUSH2 0xCE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x8C PUSH2 0x87 CALLDATASIZE PUSH1 0x4 PUSH2 0x435B JUMP JUMPDEST PUSH2 0x111 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x70 SWAP2 SWAP1 PUSH2 0x4485 JUMP JUMPDEST PUSH2 0xAC PUSH2 0xA7 CALLDATASIZE PUSH1 0x4 PUSH2 0x435B JUMP JUMPDEST PUSH2 0x266 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x70 SWAP2 SWAP1 PUSH2 0x44FE JUMP JUMPDEST PUSH2 0xCC PUSH2 0xC7 CALLDATASIZE PUSH1 0x4 PUSH2 0x459F JUMP JUMPDEST PUSH2 0x5CA JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xD9 PUSH2 0x678 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD SWAP1 SWAP2 POP DUP6 EQ PUSH2 0xEC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xFA DUP8 DUP8 DUP8 DUP8 PUSH2 0xE07 JUMP JUMPDEST SWAP1 POP PUSH2 0x106 DUP2 DUP4 PUSH2 0x1252 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x16A SWAP1 PUSH1 0x0 JUMPDEST PUSH1 0x20 MUL ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP2 POP PUSH2 0x176 DUP3 DUP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x18E SWAP1 PUSH1 0x1 JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 SWAP1 PUSH2 0x1551 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x1A6 SWAP1 PUSH1 0x1 JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x1B0 DUP2 DUP4 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x1C0 SWAP1 PUSH1 0x1 PUSH2 0x14F JUMP JUMPDEST SWAP2 POP PUSH2 0x1CC DUP3 DUP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x1DC SWAP1 PUSH1 0x2 PUSH2 0x182 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x1EC SWAP1 PUSH1 0x2 PUSH2 0x19A JUMP JUMPDEST PUSH2 0x1F6 DUP2 DUP4 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x206 SWAP1 PUSH1 0x2 PUSH2 0x14F JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x219 SWAP1 PUSH1 0x0 PUSH2 0x19A JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x229 SWAP1 PUSH1 0x3 PUSH2 0x182 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x239 SWAP1 PUSH1 0x3 PUSH2 0x19A JUMP JUMPDEST PUSH2 0x243 DUP2 DUP4 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD PUSH2 0x25C SWAP1 DUP3 SWAP1 PUSH1 0x1 JUMPDEST PUSH1 0x20 MUL ADD MLOAD SWAP1 PUSH2 0x159D JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x26E PUSH2 0x32D4 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x2F1 JUMPI DUP5 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0x4 DUP2 LT PUSH2 0x292 JUMPI PUSH2 0x292 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 MLOAD DUP4 PUSH1 0xD DUP2 LT PUSH2 0x2AA JUMPI PUSH2 0x2AA PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x80 DUP6 ADD MLOAD DUP2 PUSH1 0x4 DUP2 LT PUSH2 0x2C5 JUMPI PUSH2 0x2C5 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0xD DUP2 LT PUSH2 0x2E0 JUMPI PUSH2 0x2E0 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x273 JUMP JUMPDEST POP PUSH1 0x60 DUP6 ADD MLOAD MLOAD DUP3 MLOAD DUP3 PUSH1 0xD DUP2 LT PUSH2 0x30B JUMPI PUSH2 0x30B PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH1 0x0 PUSH1 0x20 MUL ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0xD DUP2 LT PUSH2 0x332 JUMPI PUSH2 0x332 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 ADD PUSH1 0x0 JUMPDEST PUSH2 0x349 PUSH1 0x1 PUSH1 0x4 PUSH2 0x45EF JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x3C5 JUMPI DUP6 PUSH1 0xA0 ADD MLOAD DUP2 PUSH1 0x4 DUP2 LT PUSH2 0x366 JUMPI PUSH2 0x366 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 MLOAD DUP4 PUSH1 0xD DUP2 LT PUSH2 0x37E JUMPI PUSH2 0x37E PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0xE0 DUP6 ADD MLOAD DUP2 PUSH1 0x3 DUP2 LT PUSH2 0x399 JUMPI PUSH2 0x399 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0xD DUP2 LT PUSH2 0x3B4 JUMPI PUSH2 0x3B4 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x33D JUMP JUMPDEST POP PUSH1 0x40 DUP5 DUP2 ADD MLOAD SWAP1 DUP4 ADD MLOAD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x3E2 PUSH1 0x1 PUSH1 0x4 PUSH2 0x45EF JUMP JUMPDEST PUSH1 0x4 DUP2 LT PUSH2 0x3F2 JUMPI PUSH2 0x3F2 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD DUP3 ADD MSTORE PUSH2 0x100 DUP6 ADD MLOAD PUSH1 0x60 DUP5 ADD DUP1 MLOAD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP1 DUP8 ADD MLOAD MLOAD SWAP2 MLOAD SWAP1 SWAP3 ADD MSTORE PUSH1 0xE0 DUP7 ADD MLOAD MLOAD SWAP1 DUP5 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x448 SWAP1 PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x49B JUMPI PUSH2 0x470 DUP3 DUP10 PUSH1 0xE0 ADD MLOAD DUP4 PUSH1 0x4 DUP2 LT PUSH2 0x251 JUMPI PUSH2 0x251 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x240 DUP8 ADD DUP2 SWAP1 MSTORE PUSH2 0x483 SWAP1 DUP5 SWAP1 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MLOAD PUSH2 0x493 SWAP1 DUP4 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x44D JUMP JUMPDEST POP DUP4 MLOAD DUP3 SWAP1 DUP5 PUSH1 0xD DUP2 LT PUSH2 0x4B1 JUMPI PUSH2 0x4B1 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD DUP2 SWAP1 MSTORE POP DUP6 PUSH2 0x1E0 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0xD DUP2 LT PUSH2 0x4D5 JUMPI PUSH2 0x4D5 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0xC0 DUP8 ADD MLOAD DUP5 MLOAD PUSH1 0x1 SWAP5 SWAP1 SWAP5 ADD SWAP4 DUP5 PUSH1 0xD DUP2 LT PUSH2 0x4F9 JUMPI PUSH2 0x4F9 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD DUP2 SWAP1 MSTORE POP DUP6 PUSH2 0x220 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0xD DUP2 LT PUSH2 0x51D JUMPI PUSH2 0x51D PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH2 0x100 DUP8 ADD MLOAD DUP5 MLOAD PUSH1 0x1 SWAP5 SWAP1 SWAP5 ADD SWAP4 DUP5 PUSH1 0xD DUP2 LT PUSH2 0x542 JUMPI PUSH2 0x542 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD DUP2 SWAP1 MSTORE POP DUP6 PUSH2 0x240 ADD MLOAD DUP5 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0xD DUP2 LT PUSH2 0x566 JUMPI PUSH2 0x566 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE POP PUSH2 0x160 DUP6 ADD MLOAD PUSH1 0x40 DUP5 DUP2 ADD DUP1 MLOAD DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x1A0 DUP8 ADD MLOAD PUSH1 0x60 DUP1 DUP8 ADD DUP1 MLOAD SWAP1 SWAP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 DUP9 ADD MLOAD DUP4 MLOAD DUP3 ADD MSTORE PUSH2 0x1C0 DUP9 ADD MLOAD DUP3 MLOAD SWAP1 SWAP2 ADD MSTORE SWAP1 MLOAD PUSH1 0x80 SWAP1 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x200 SWAP1 SWAP6 ADD MLOAD SWAP5 MLOAD ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD MLOAD PUSH1 0x0 SUB PUSH2 0x5DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5E6 PUSH1 0x1 PUSH2 0x15EB JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP1 MLOAD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP1 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP6 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE SWAP3 MLOAD DUP2 MSTORE SWAP5 MLOAD DUP5 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP1 MLOAD DUP4 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP4 MSTORE DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE PUSH1 0x2 JUMPDEST PUSH1 0x9 DUP2 LT ISZERO PUSH2 0x673 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x63D SWAP1 DUP4 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP3 MLOAD DUP2 MSTORE DUP4 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x9 DUP2 LT PUSH2 0x666 JUMPI PUSH2 0x666 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 ADD PUSH2 0x624 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x680 PUSH2 0x3313 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x100 DUP2 MSTORE PUSH2 0x6B5 PUSH32 0x1058A83D529BE585820B96FF0A13F2DBD8675A9E5DD2336A6692CC1E5A526C81 PUSH2 0x15EB JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x704 PUSH32 0x5F5CABC4EAB14CFABEE1334EF7F33A66259CC9FD07AF862308D5C41765ADB4B PUSH32 0x128A103FBE66C8FF697182C0963D963208B55A5A53DDEAB9B4BC09DC2A68A9CC PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MLOAD MSTORE PUSH2 0x754 PUSH32 0xD9980170C334C107E6CE4D66BBC4D23BBCDC97C020B1E1C3F6E04C6C663D2C2 PUSH32 0x968205845091CEAF3F863B1613FBDF7CE9A87CCFD97F22011679E6350384419 PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE PUSH2 0x7A7 PUSH32 0xC84A19B149A1612CB042AD86382B9E94367C0ADD60D07E12399999E7DB09EFE PUSH32 0x1E02F70C44C9BFB7BF2164CEE2AB4813BCB9BE56EB432E2E9DFFFFFE196D846D PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x40 ADD MSTORE PUSH2 0x7FA PUSH32 0x1EB3599506A41A7D62E1F7438D6732FBB9D1EDA7B9C7A0213ECA63C9334AC5A9 PUSH32 0x23563D9F429908D8EA80BFFA642840FB081936D45B388BAFC504D9B1E5B1C410 PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x60 ADD MSTORE PUSH2 0x80F PUSH1 0x0 PUSH1 0x1 PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x80 DUP3 DUP2 ADD MLOAD ADD MSTORE PUSH2 0x861 PUSH32 0x63E8DAC7EE3EE6A4569FD53B416FE17F8F10DE8C435C336E5A1CF2E02643200 PUSH32 0x1D4C1781B78F926D55F89EF72ABB96BEE350CE60DDC684F5A02D87C5F4CDF943 PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0xA0 ADD MSTORE PUSH2 0x876 PUSH1 0x0 PUSH1 0x1 PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0xC0 ADD MSTORE PUSH2 0x8C9 PUSH32 0xB487EB34C8480EA506F5C6C25857155D61D7F9824B60BC80E1A415A5BCF247F PUSH32 0x7EA0D0D0DF9DBCC944E9341A5BB49AE796D9DC9D7CA1C032B53784715B946DB PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MLOAD MSTORE PUSH2 0x919 PUSH32 0xFA66FAA0B9EA782EB400175AC9F0C05F0DE64332EEC54A87CD20DB4540BAEC2 PUSH32 0x7DEA33D314C690C4BD4B21DEDA1A44B9F8DD87E539024622768C2F8B8BDABE1 PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE PUSH2 0x96C PUSH32 0x120482C52E31D2373F9B2DC80A47E68F035E278D220FA8A89D0C81F133343953 PUSH32 0x2928A78EA2E1A943E9220B7E288FD48A561263F8E5F94518F21AAA43781CEAC PUSH2 0x1626 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MLOAD MSTORE PUSH2 0x9BC PUSH32 0x1DFAD2C4D60704BCF6AF0ABD9CCE09151F063C4B52200C268E470C6A6C93CBCA PUSH32 0x8B28DD6CA14D7C33E078FE0F332A9A4D95AC8DF171355DE9E69930AEC02B5DC PUSH2 0x1626 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE PUSH2 0xA0F PUSH32 0x935A4FD6AB67925929661CF2D2E814F87F589EE6234CB9675ECC2D897F1B338 PUSH32 0x1032CCC41C047413FCE4A847BA7E51E4A2EA406D89A88D480C5F0EFAF6C8C89A PUSH2 0x1626 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x40 ADD MSTORE PUSH2 0xA62 PUSH32 0xEAFAEA3AF7D1FADB2138DB1B991AF5D2218F6892714FD019898C7E1A43ECFE8 PUSH32 0x28FB17EDA285ED74CC9771D62FAD22AB459BBB0A4968C489972ACA8B7E618FCB PUSH2 0x1626 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x60 ADD MSTORE PUSH2 0xAB5 PUSH32 0x155201A564E721B1F5C06315AD4E24EAAD3CBDD6197B19CD903FE85613080F86 PUSH32 0x12FB201BC896572AC14357E2601F5118636F1EEB7B89C177AC940AAC3B5253EC PUSH2 0x1626 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0xB04 PUSH32 0x1CB0E2AE4D52743898D94D7F1729BD0D3357BA035CDB6B3AF7EBFF9159F8F297 PUSH32 0x15EE595227C9E0F7A487DDB8072D5EA3CFD058BC569211C3546BC0E80051553F PUSH2 0x1626 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MLOAD MSTORE PUSH2 0xB54 PUSH32 0x13E4AB94C03A5A29719930C1361D854E244CF918F1E29CB031303F4A13B71977 PUSH32 0xF792EF4C6C8746C97BE61ED9B20F31BA2DEC3BD5C91A2D9A4A586F19AF3A07C PUSH2 0x1626 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE PUSH2 0xBA7 PUSH32 0x1C9E69BD2B04240EBE44FB23D67C596FCE4A1336109FDCE38C2F184A63CD8ACC PUSH32 0x1CBD3E72BDBCE827227E503690B10BE9365AE760E9D2BABDE5BA81EDF12F8206 PUSH2 0x1626 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MLOAD PUSH1 0x40 ADD MSTORE PUSH2 0xBFA PUSH32 0x2A0D46339FBF72104DF6A241B53A957602B1A16F6E3B9F89BF3E4C4645DF823C PUSH32 0x11A601D7B2EEE4B7885F34C9873426BA1263F38EAE2E0351D653B8B1BA9C67F6 PUSH2 0x1626 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MLOAD PUSH1 0x60 ADD MSTORE PUSH2 0xC4D PUSH32 0x1A70E43F18B18D686807C2B1C6471CD949DD251B48090BCA443D86B97AFAE951 PUSH32 0xE6E23AD15A1BD851B228788AE4A03BF25BDA39EDE6D5A92D501A8402A0DFE43 PUSH2 0x1626 JUMP JUMPDEST PUSH2 0x100 DUP3 ADD MSTORE PUSH2 0xC5D PUSH1 0x5 PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD MSTORE PUSH2 0xC6E PUSH1 0x7 PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE PUSH2 0xC82 PUSH1 0xA PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD PUSH1 0x2 PUSH1 0x20 MUL ADD DUP2 SWAP1 MSTORE POP PUSH2 0xD44 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA DUP2 MSTORE POP PUSH2 0x1651 JUMP JUMPDEST PUSH2 0x140 DUP3 ADD MLOAD MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH32 0x260E01B251F6F1C7E7FF4E580791DEE8EA51D87A358E038B4EFE30FAC09383C1 DUP2 MSTORE PUSH32 0x118C4D5B837BCC2BC89B5B398B5974E9F5944073B32078B7E231FEC938883B0 PUSH1 0x20 DUP3 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH32 0x4FC6369F7110FE3D25156C1BB9A72859CF2A04641F99BA4EE413C80DA6A5FE4 DUP4 MSTORE PUSH32 0x22FEBDA3C0C0632A56475B4214E5615E11E6DD3F96E6CEA2854A87D4DACC5E55 SWAP1 DUP4 ADD MSTORE PUSH2 0xDFA SWAP2 PUSH2 0x1651 JUMP JUMPDEST PUSH2 0x140 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0xE0F PUSH2 0x33D5 JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0xE27 JUMPI PUSH2 0xE27 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE50 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP DUP2 MSTORE PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0xEA0 JUMPI DUP6 DUP6 DUP3 DUP2 DUP2 LT PUSH2 0xE70 JUMPI PUSH2 0xE70 PUSH2 0x45C3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP3 PUSH1 0x0 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xE8D JUMPI PUSH2 0xE8D PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0xE56 JUMP JUMPDEST POP PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0xF1A JUMPI PUSH2 0xEF1 DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0xEC3 JUMPI PUSH2 0xEC3 PUSH2 0x45C3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP7 DUP7 PUSH2 0xED6 DUP7 PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST DUP2 DUP2 LT PUSH2 0xEE5 JUMPI PUSH2 0xEE5 PUSH2 0x45C3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH2 0x1659 JUMP JUMPDEST DUP4 PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0xF07 JUMPI PUSH2 0xF07 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x2 DUP3 ADD SWAP2 POP PUSH1 0x1 ADD PUSH2 0xEA5 JUMP JUMPDEST POP PUSH2 0xF43 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xF30 JUMPI PUSH2 0xF30 PUSH2 0x45C3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP6 DUP6 PUSH2 0xED6 DUP6 PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x2 ADD PUSH2 0xF60 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xF30 JUMPI PUSH2 0xF30 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE PUSH1 0x2 ADD PUSH2 0xF7E DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xF30 JUMPI PUSH2 0xF30 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x2 ADD PUSH1 0x0 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0xFD1 JUMPI PUSH2 0xFA8 DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0xEC3 JUMPI PUSH2 0xEC3 PUSH2 0x45C3 JUMP JUMPDEST DUP4 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0xFBE JUMPI PUSH2 0xFBE PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x2 DUP3 ADD SWAP2 POP PUSH1 0x1 ADD PUSH2 0xF8A JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x1026 JUMPI PUSH2 0xFFF DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH2 0x15EB JUMP JUMPDEST DUP4 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0x1015 JUMPI PUSH2 0x1015 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xFD5 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x106F JUMPI PUSH2 0x1048 DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST DUP4 PUSH1 0xA0 ADD MLOAD DUP3 PUSH1 0x1 DUP2 LT PUSH2 0x105E JUMPI PUSH2 0x105E PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x102A JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x10B8 JUMPI PUSH2 0x1091 DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST DUP4 PUSH1 0xC0 ADD MLOAD DUP3 PUSH1 0x1 DUP2 LT PUSH2 0x10A7 JUMPI PUSH2 0x10A7 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1073 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH1 0x3 DUP2 LT ISZERO PUSH2 0x1101 JUMPI PUSH2 0x10DA DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST DUP4 PUSH1 0xE0 ADD MLOAD DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x10F0 JUMPI PUSH2 0x10F0 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x10BC JUMP JUMPDEST POP PUSH2 0x1117 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1135 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x1A0 DUP4 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1153 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x1C0 DUP4 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1171 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x1E0 DUP4 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x118F DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x200 DUP4 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x11AD DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x220 DUP4 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x11CB DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x11E9 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1207 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xFF3 JUMPI PUSH2 0xFF3 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1225 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xF30 JUMPI PUSH2 0xF30 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x260 DUP4 ADD MSTORE PUSH1 0x2 ADD PUSH2 0x1243 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xF30 JUMPI PUSH2 0xF30 PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x280 DUP4 ADD MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x125F DUP5 DUP5 PUSH2 0x17F1 JUMP JUMPDEST SWAP1 POP PUSH2 0x126C DUP4 DUP6 DUP4 PUSH2 0x1B2A JUMP JUMPDEST ISZERO ISZERO PUSH1 0x0 SUB PUSH2 0x127F JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x1531 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x12B8 SWAP1 DUP3 JUMPDEST PUSH1 0x20 MUL ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE DUP4 MLOAD DUP4 MSTORE SWAP3 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST DUP5 MLOAD PUSH2 0x180 DUP5 ADD MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH2 0x12CF SWAP2 PUSH2 0x1E23 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 DUP1 DUP4 MSTORE DUP5 MLOAD DUP4 MSTORE DUP4 MLOAD DUP1 DUP6 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE SWAP1 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x1 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x1342 JUMPI PUSH2 0x131A DUP10 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0x128D JUMPI PUSH2 0x128D PUSH2 0x45C3 JUMP JUMPDEST SWAP2 POP PUSH2 0x1326 DUP3 DUP5 PUSH2 0x1EA2 JUMP JUMPDEST PUSH2 0x1330 DUP6 DUP4 PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x133A DUP4 DUP6 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x12F8 JUMP JUMPDEST POP POP POP POP PUSH1 0x0 PUSH2 0x1353 DUP6 DUP8 DUP6 PUSH2 0x266 JUMP JUMPDEST DUP1 MLOAD DUP4 SWAP1 MSTORE PUSH2 0x120 DUP8 ADD MLOAD PUSH1 0x20 DUP3 ADD MLOAD MSTORE SWAP1 POP PUSH2 0x1371 DUP6 DUP8 DUP6 PUSH2 0x1EAD JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x140 DUP8 ADD MLOAD DUP2 DUP4 ADD DUP1 MLOAD SWAP1 SWAP3 ADD MSTORE DUP2 MLOAD MLOAD SWAP1 MLOAD MLOAD PUSH1 0x0 PUSH2 0x139D PUSH1 0x1 PUSH2 0x15EB JUMP JUMPDEST SWAP1 POP PUSH2 0x13BC PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xD DUP2 LT ISZERO PUSH2 0x1445 JUMPI PUSH2 0x140 DUP9 ADD MLOAD PUSH2 0x13D9 SWAP1 DUP5 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x13F3 DUP4 DUP8 PUSH1 0x0 ADD MLOAD DUP4 PUSH1 0xD DUP2 LT PUSH2 0x251 JUMPI PUSH2 0x251 PUSH2 0x45C3 JUMP JUMPDEST SWAP2 POP PUSH2 0x13FF DUP6 DUP4 PUSH2 0x15DC JUMP JUMPDEST DUP6 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xD DUP2 LT PUSH2 0x1415 JUMPI PUSH2 0x1415 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD PUSH2 0x220 DUP10 ADD DUP2 SWAP1 MSTORE PUSH2 0x142C SWAP1 DUP5 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x220 DUP9 ADD MLOAD PUSH2 0x143D SWAP1 DUP6 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x13BF JUMP JUMPDEST POP PUSH2 0x140 DUP8 ADD MLOAD PUSH2 0x1457 SWAP1 DUP4 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1474 DUP4 DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x0 PUSH1 0x6 DUP2 LT PUSH2 0x251 JUMPI PUSH2 0x251 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MLOAD MLOAD SWAP1 SWAP2 POP PUSH2 0x1487 DUP2 DUP6 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0x6 DUP2 LT ISZERO PUSH2 0x1510 JUMPI PUSH2 0x140 DUP11 ADD MLOAD PUSH2 0x14A4 SWAP1 DUP7 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x14BE DUP6 DUP10 PUSH1 0x40 ADD MLOAD DUP4 PUSH1 0x6 DUP2 LT PUSH2 0x251 JUMPI PUSH2 0x251 PUSH2 0x45C3 JUMP JUMPDEST SWAP4 POP PUSH2 0x14CA DUP4 DUP6 PUSH2 0x15DC JUMP JUMPDEST DUP8 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x6 DUP2 LT PUSH2 0x14E0 JUMPI PUSH2 0x14E0 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD PUSH2 0x220 DUP12 ADD DUP2 SWAP1 MSTORE PUSH2 0x14F7 SWAP1 DUP7 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x220 DUP11 ADD MLOAD PUSH2 0x1508 SWAP1 DUP4 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x148A JUMP JUMPDEST POP PUSH2 0x1525 DUP12 PUSH2 0x140 ADD MLOAD DUP14 DUP12 DUP10 DUP7 DUP11 DUP8 PUSH2 0x22BE JUMP JUMPDEST SWAP10 POP POP POP POP POP POP POP POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x466A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MLOAD DUP4 MLOAD MULMOD SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x466A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MLOAD PUSH2 0x157A SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x466A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH2 0x45EF JUMP JUMPDEST DUP4 MLOAD ADDMOD SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x466A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MLOAD DUP4 MLOAD ADDMOD SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP3 MLOAD ISZERO DUP1 ISZERO PUSH2 0x15C4 JUMPI POP DUP3 PUSH1 0x20 ADD MLOAD PUSH1 0x1 EQ JUMPDEST ISZERO PUSH2 0x15D1 JUMPI PUSH1 0x0 PUSH1 0x20 DUP5 ADD MSTORE JUMPDEST PUSH2 0x1531 DUP4 DUP4 DUP4 PUSH2 0x2466 JUMP JUMPDEST PUSH2 0x15E7 DUP3 DUP3 DUP5 PUSH2 0x24A8 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x466A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 LT PUSH2 0x1614 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE SWAP1 DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x163B PUSH2 0x35E3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP3 ISZERO DUP1 ISZERO PUSH2 0x1679 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x169A JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE POP SWAP1 POP PUSH2 0x1531 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x464A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP4 LT PUSH2 0x16F1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x1E08185E1A5CC81A5CDB89DD081D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x464A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 LT PUSH2 0x1743 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x1E48185E1A5CC81A5CDB89DD081D985B1A59 PUSH1 0x72 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x16E8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x464A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP4 DUP5 MULMOD SWAP1 POP PUSH1 0x0 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x464A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 DUP7 MULMOD SWAP1 POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x464A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP6 DUP3 MULMOD SWAP1 POP PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x464A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x3 DUP3 ADDMOD SWAP1 POP DUP1 DUP3 EQ PUSH2 0x17D9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x6973206E6F74206F6E206375727665 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x16E8 JUMP JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE SWAP3 DUP4 MSTORE POP PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x17F9 PUSH2 0x3603 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 JUMPDEST DUP4 PUSH1 0x20 ADD MLOAD DUP2 LT ISZERO PUSH2 0x185B JUMPI PUSH2 0x1853 DUP6 PUSH1 0x0 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x183C JUMPI PUSH2 0x183C PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x2538 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1817 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x1895 JUMPI PUSH2 0x188D DUP6 PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0x1881 JUMPI PUSH2 0x1881 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 SWAP1 PUSH2 0x25C6 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x185F JUMP JUMPDEST POP PUSH2 0x189F DUP2 PUSH2 0x25E2 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x160 DUP5 ADD MLOAD PUSH2 0x18B5 SWAP1 DUP3 SWAP1 PUSH2 0x25C6 JUMP JUMPDEST PUSH2 0x18BE DUP2 PUSH2 0x25E2 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x18CC DUP2 PUSH2 0x25E2 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x18E1 SWAP1 DUP3 SWAP1 PUSH2 0x25C6 JUMP JUMPDEST PUSH2 0x18EA DUP2 PUSH2 0x25E2 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x18F8 DUP2 PUSH2 0x25E2 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x180 DUP5 ADD MLOAD PUSH2 0x190E SWAP1 DUP3 SWAP1 PUSH2 0x25C6 JUMP JUMPDEST PUSH2 0x1917 DUP2 PUSH2 0x25E2 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x0 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x1949 JUMPI PUSH2 0x1941 DUP6 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0x1881 JUMPI PUSH2 0x1881 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x191F JUMP JUMPDEST POP PUSH2 0x1953 DUP2 PUSH2 0x25E2 JUMP JUMPDEST PUSH2 0x180 DUP4 ADD MSTORE PUSH2 0x120 DUP5 ADD MLOAD PUSH2 0x196A SWAP1 DUP3 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x19A3 JUMPI PUSH2 0x199B DUP6 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0x198F JUMPI PUSH2 0x198F PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x196D JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x19D1 JUMPI PUSH2 0x19C9 DUP6 PUSH1 0xA0 ADD MLOAD DUP3 PUSH1 0x1 DUP2 LT PUSH2 0x198F JUMPI PUSH2 0x198F PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x19A7 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH1 0x1 DUP2 LT ISZERO PUSH2 0x19FF JUMPI PUSH2 0x19F7 DUP6 PUSH1 0xC0 ADD MLOAD DUP3 PUSH1 0x1 DUP2 LT PUSH2 0x198F JUMPI PUSH2 0x198F PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x19D5 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST PUSH1 0x3 DUP2 LT ISZERO PUSH2 0x1A2D JUMPI PUSH2 0x1A25 DUP6 PUSH1 0xE0 ADD MLOAD DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x198F JUMPI PUSH2 0x198F PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1A03 JUMP JUMPDEST POP PUSH2 0x180 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP2 MLOAD DUP3 MSTORE PUSH2 0x1A0 DUP5 ADD DUP3 SWAP1 MSTORE DUP5 ADD MLOAD PUSH2 0x1A5B SWAP2 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x100 DUP5 ADD MLOAD PUSH2 0x1A6C SWAP1 DUP3 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH2 0x1E0 DUP5 ADD MLOAD PUSH2 0x1A7D SWAP1 DUP3 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH2 0x220 DUP5 ADD MLOAD PUSH2 0x1A8E SWAP1 DUP3 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x1A9F SWAP1 DUP3 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH2 0x1A0 DUP5 ADD MLOAD PUSH2 0x1AB0 SWAP1 DUP3 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH2 0x1C0 DUP5 ADD MLOAD PUSH2 0x1AC1 SWAP1 DUP3 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH2 0x200 DUP5 ADD MLOAD PUSH2 0x1AD2 SWAP1 DUP3 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x1AE3 SWAP1 DUP3 SWAP1 PUSH2 0x2688 JUMP JUMPDEST PUSH2 0x1AEC DUP2 PUSH2 0x25E2 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x260 DUP5 ADD MLOAD PUSH2 0x1B03 SWAP1 DUP3 SWAP1 PUSH2 0x25C6 JUMP JUMPDEST PUSH2 0x280 DUP5 ADD MLOAD PUSH2 0x1B14 SWAP1 DUP3 SWAP1 PUSH2 0x25C6 JUMP JUMPDEST PUSH2 0x1B1D DUP2 PUSH2 0x25E2 JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x1B49 JUMPI PUSH2 0x1B49 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1B72 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x1BA7 JUMPI DUP1 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1B94 JUMPI PUSH2 0x1B94 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1B78 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1BB4 PUSH1 0x0 PUSH2 0x15EB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP7 PUSH1 0x20 ADD MLOAD DUP2 LT ISZERO PUSH2 0x1C32 JUMPI PUSH2 0x1BDE DUP2 DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x40 ADD MLOAD DUP9 PUSH2 0x180 ADD MLOAD PUSH2 0x2696 JUMP JUMPDEST PUSH2 0x220 DUP7 ADD MSTORE DUP6 MLOAD DUP1 MLOAD PUSH2 0x1C19 SWAP2 PUSH2 0x1C0D SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x1C00 JUMPI PUSH2 0x1C00 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x220 DUP8 ADD MLOAD SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x220 DUP6 ADD MLOAD PUSH2 0x1C2A SWAP1 DUP4 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1BB9 JUMP JUMPDEST POP PUSH1 0xC0 DUP6 ADD MLOAD PUSH2 0x1C4B SWAP1 PUSH1 0x0 JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP3 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE PUSH2 0x1C6E DUP2 DUP4 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x1C77 DUP6 PUSH2 0x5CA JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x1C8A SWAP1 PUSH1 0x4 PUSH2 0x14F JUMP JUMPDEST SWAP1 POP PUSH2 0x1CA4 DUP8 PUSH2 0x100 ADD MLOAD DUP3 PUSH2 0x1537 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x1CB0 PUSH1 0x1 PUSH1 0x4 PUSH2 0x45EF JUMP JUMPDEST PUSH1 0x3 EQ PUSH2 0x1CBC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x0 JUMPDEST PUSH1 0x3 DUP2 LT ISZERO PUSH2 0x1D50 JUMPI PUSH2 0x1CF0 DUP10 PUSH1 0xE0 ADD MLOAD DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x14F JUMPI PUSH2 0x14F PUSH2 0x45C3 JUMP JUMPDEST SWAP2 POP PUSH2 0x1D09 DUP9 PUSH1 0x40 ADD MLOAD DUP4 PUSH2 0x1537 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x1D2E DUP10 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0x1D22 JUMPI PUSH2 0x1D22 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP4 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x1D3E SWAP1 DUP4 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x1D48 DUP4 DUP4 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1CCE JUMP JUMPDEST POP PUSH1 0x80 DUP9 ADD MLOAD PUSH2 0x1D61 SWAP1 PUSH1 0x3 PUSH2 0x14F JUMP JUMPDEST SWAP1 POP PUSH2 0x1D7A DUP8 PUSH1 0x60 ADD MLOAD DUP3 PUSH2 0x1583 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x1D84 DUP3 DUP3 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x1D8E DUP4 DUP4 PUSH2 0x1551 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DA3 DUP11 PUSH1 0x0 ADD MLOAD DUP10 PUSH2 0x180 ADD MLOAD PUSH2 0x2744 JUMP JUMPDEST PUSH1 0x80 DUP10 ADD MLOAD SWAP1 SWAP2 POP PUSH2 0x1DB6 SWAP1 PUSH1 0x5 PUSH2 0x1C3F JUMP JUMPDEST PUSH2 0x1DC0 DUP5 DUP3 PUSH2 0x1551 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DCD DUP12 DUP12 DUP12 PUSH2 0x27CA JUMP JUMPDEST SWAP1 POP PUSH2 0x1DD9 DUP6 DUP3 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x120 DUP11 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE DUP12 MLOAD PUSH2 0x180 DUP12 ADD MLOAD PUSH2 0x1E0E SWAP2 PUSH2 0x1E07 SWAP2 PUSH2 0x2A1A JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1537 JUMP JUMPDEST SWAP5 MLOAD SWAP5 MLOAD SWAP1 SWAP5 EQ SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 DUP3 MSTORE DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 DUP2 MSTORE DUP1 DUP3 ADD DUP3 SWAP1 MSTORE SWAP3 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x466A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0xA0 DUP4 ADD MSTORE SWAP1 PUSH2 0x1E72 PUSH2 0x37B7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 PUSH1 0xC0 DUP6 PUSH1 0x5 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x1E8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x15E7 DUP3 DUP3 DUP5 PUSH2 0x2466 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x1ECC PUSH1 0x0 DUP1 PUSH2 0x1626 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1EFB DUP5 PUSH1 0x80 ADD MLOAD PUSH1 0x0 PUSH1 0x4 DUP2 LT PUSH2 0x1EEA JUMPI PUSH2 0x1EEA PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0x0 PUSH2 0x251 JUMP JUMPDEST SWAP1 POP PUSH2 0x1F07 DUP3 DUP3 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x1F23 SWAP1 PUSH1 0x1 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0x1 PUSH2 0x251 JUMP JUMPDEST SWAP1 POP PUSH2 0x1F2F DUP3 DUP3 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x1F4B SWAP1 PUSH1 0x2 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0x2 PUSH2 0x251 JUMP JUMPDEST SWAP1 POP PUSH2 0x1F57 DUP3 DUP3 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x1F73 SWAP1 PUSH1 0x3 PUSH1 0x20 MUL ADD MLOAD PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0x3 PUSH2 0x251 JUMP JUMPDEST SWAP1 POP PUSH2 0x1F7F DUP3 DUP3 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x1F91 SWAP1 DUP3 PUSH2 0x14F JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD SWAP1 SWAP2 POP PUSH2 0x1FA4 SWAP1 PUSH1 0x1 PUSH2 0x1C3F JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD PUSH2 0x1FB6 SWAP1 DUP3 SWAP1 PUSH1 0x4 PUSH2 0x251 JUMP JUMPDEST SWAP2 POP PUSH2 0x1FC2 DUP4 DUP4 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0xA0 ADD MLOAD PUSH2 0x1FD6 SWAP1 DUP5 SWAP1 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD MLOAD PUSH1 0x80 DUP8 ADD MLOAD PUSH2 0x1FED SWAP2 SWAP1 PUSH1 0x6 PUSH2 0x251 JUMP JUMPDEST SWAP2 POP PUSH2 0x1FF9 DUP4 DUP4 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MLOAD MLOAD PUSH2 0x200A SWAP1 DUP5 SWAP1 PUSH2 0x1EA2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2017 DUP8 DUP8 DUP8 PUSH2 0x111 JUMP JUMPDEST SWAP1 POP PUSH2 0x2023 DUP5 DUP3 PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x202F PUSH1 0x1 PUSH1 0x4 PUSH2 0x45EF JUMP JUMPDEST PUSH1 0x3 EQ PUSH2 0x203B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2047 PUSH1 0x1 PUSH2 0x15EB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2065 DUP8 PUSH1 0x80 ADD MLOAD PUSH1 0x4 PUSH1 0x9 DUP2 LT PUSH2 0x14F JUMPI PUSH2 0x14F PUSH2 0x45C3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x212D JUMPI PUSH2 0x180 DUP9 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP5 POP DUP1 PUSH1 0x0 SUB PUSH2 0x20A5 JUMPI PUSH2 0x20A0 DUP6 DUP5 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x20D6 JUMP JUMPDEST PUSH2 0x120 DUP11 ADD MLOAD PUSH2 0x20D6 SWAP1 PUSH2 0x20BA PUSH1 0x1 DUP5 PUSH2 0x45EF JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x20CA JUMPI PUSH2 0x20CA PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP7 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x40 DUP9 ADD MLOAD PUSH2 0x20E6 SWAP1 DUP7 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x20F6 SWAP1 DUP7 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x211B DUP10 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0x210F JUMPI PUSH2 0x210F PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP7 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x2125 DUP3 DUP7 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x206A JUMP JUMPDEST POP PUSH1 0x40 DUP9 ADD MLOAD PUSH2 0x213D SWAP1 DUP3 PUSH2 0x159D JUMP JUMPDEST SWAP5 POP PUSH2 0x2149 DUP7 DUP7 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x80 DUP8 ADD MLOAD PUSH2 0x2159 SWAP1 PUSH1 0x4 PUSH2 0x14F JUMP JUMPDEST SWAP1 POP PUSH2 0x2172 DUP8 PUSH1 0x40 ADD MLOAD DUP3 PUSH2 0x1537 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP9 ADD MLOAD PUSH2 0x2183 SWAP1 DUP3 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x2192 PUSH1 0x1 PUSH1 0x4 PUSH2 0x45EF JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x2206 JUMPI PUSH2 0x21B2 DUP10 PUSH1 0xE0 ADD MLOAD DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x14F JUMPI PUSH2 0x14F PUSH2 0x45C3 JUMP JUMPDEST SWAP5 POP PUSH2 0x21CB DUP9 PUSH1 0x40 ADD MLOAD DUP7 PUSH2 0x1537 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x21DB SWAP1 DUP7 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x21F4 DUP10 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0x210F JUMPI PUSH2 0x210F PUSH2 0x45C3 JUMP JUMPDEST PUSH2 0x21FE DUP3 DUP7 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x2186 JUMP JUMPDEST POP PUSH1 0xA0 DUP10 ADD MLOAD PUSH2 0x2219 SWAP1 DUP3 SWAP1 PUSH1 0x3 PUSH2 0x251 JUMP JUMPDEST SWAP5 POP PUSH2 0x2225 DUP7 DUP7 PUSH2 0x2A49 JUMP JUMPDEST PUSH2 0x223F PUSH1 0x0 DUP11 PUSH1 0x0 ADD MLOAD DUP12 PUSH1 0x40 ADD MLOAD DUP11 PUSH2 0x180 ADD MLOAD PUSH2 0x2696 JUMP JUMPDEST PUSH2 0x1E0 DUP9 ADD DUP2 SWAP1 MSTORE MLOAD PUSH1 0x0 SUB PUSH2 0x2254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E0 DUP7 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE PUSH1 0x80 DUP8 ADD MLOAD PUSH2 0x227E SWAP1 PUSH1 0x5 PUSH2 0x1C3F JUMP JUMPDEST PUSH1 0x40 DUP9 ADD MLOAD PUSH2 0x228D SWAP1 DUP3 PUSH2 0x159D JUMP JUMPDEST SWAP5 POP PUSH2 0x2299 DUP7 DUP7 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22A5 DUP10 DUP10 PUSH2 0x2A54 JUMP JUMPDEST SWAP1 POP PUSH2 0x22B1 DUP8 DUP3 PUSH2 0x15DC JUMP JUMPDEST POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP3 DUP2 MSTORE DUP8 MLOAD DUP5 MSTORE SWAP1 DUP8 ADD MLOAD SWAP1 MSTORE SWAP1 PUSH2 0x22F8 DUP8 PUSH2 0x160 ADD MLOAD DUP7 PUSH2 0x1EA2 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x2302 DUP2 DUP7 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP4 MLOAD DUP2 MSTORE PUSH2 0x160 DUP9 ADD MLOAD PUSH2 0x2326 SWAP1 DUP3 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x2330 DUP2 DUP7 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2368 DUP3 PUSH2 0x2362 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x1 DUP3 MSTORE PUSH1 0x2 SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x159D JUMP JUMPDEST SWAP1 POP PUSH2 0x2374 DUP4 DUP3 PUSH2 0x2A49 JUMP JUMPDEST PUSH2 0x180 DUP10 ADD MLOAD PUSH2 0x260 DUP12 ADD MLOAD PUSH2 0x2389 SWAP2 PUSH2 0x159D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x23AC DUP11 PUSH2 0x1A0 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x23C6 DUP11 PUSH2 0x160 ADD MLOAD DUP3 PUSH2 0x1537 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x280 DUP12 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x23D9 SWAP1 DUP4 PUSH2 0x159D JUMP JUMPDEST SWAP1 POP PUSH2 0x23E5 DUP4 DUP3 PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x23EF DUP6 DUP5 PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x240E DUP13 PUSH2 0x160 ADD MLOAD DUP15 PUSH2 0x280 ADD MLOAD PUSH2 0x159D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x2428 DUP14 PUSH2 0x260 ADD MLOAD DUP3 PUSH2 0x15DC SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x2431 DUP2 PUSH2 0x2D22 JUMP JUMPDEST DUP14 MLOAD PUSH1 0x20 DUP16 ADD MLOAD PUSH1 0x0 PUSH2 0x2442 PUSH2 0x2D62 JUMP JUMPDEST SWAP1 POP PUSH2 0x2450 DUP10 DUP5 DUP7 DUP6 PUSH2 0x2E22 JUMP JUMPDEST SWAP10 POP POP POP POP POP POP POP POP POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x246E PUSH2 0x37D5 JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP5 ADD MLOAD DUP2 PUSH1 0x1 PUSH1 0x20 MUL ADD MSTORE DUP3 MLOAD DUP2 PUSH1 0x2 PUSH1 0x20 MUL ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP4 PUSH1 0x60 DUP5 PUSH1 0x7 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x24A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD ISZERO DUP1 ISZERO PUSH2 0x24B9 JUMPI POP PUSH1 0x20 DUP3 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x24D1 JUMPI DUP3 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST DUP3 MLOAD ISZERO DUP1 ISZERO PUSH2 0x24E2 JUMPI POP PUSH1 0x20 DUP4 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x24F7 JUMPI DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD MLOAD SWAP2 ADD MSTORE POP JUMP JUMPDEST PUSH2 0x24FF PUSH2 0x37F3 JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x40 DUP4 ADD MSTORE DUP4 ADD MLOAD DUP2 PUSH1 0x3 JUMPDEST PUSH1 0x20 MUL ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP4 PUSH1 0x80 DUP5 PUSH1 0x6 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x24A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x84 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB PUSH1 0x1F NOT ADD DUP2 MSTORE SWAP2 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 DUP6 MSTORE DUP5 DUP3 ADD MLOAD SWAP1 MLOAD PUSH1 0x1 PUSH1 0xE0 SHL SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x84 ADD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 SWAP4 ADD SWAP3 SWAP1 SWAP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x25D4 DUP3 DUP3 PUSH1 0x0 ADD MLOAD PUSH2 0x2538 JUMP JUMPDEST PUSH2 0x15E7 DUP3 DUP3 PUSH1 0x20 ADD MLOAD PUSH2 0x2538 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x40 DUP1 DUP7 ADD MLOAD SWAP1 MLOAD PUSH1 0x1 PUSH1 0xE1 SHL SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x24 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0xE0 SWAP2 SWAP1 SWAP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x68 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x1 DUP4 PUSH1 0x40 ADD DUP2 DUP2 MLOAD PUSH2 0x2660 SWAP2 SWAP1 PUSH2 0x4602 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND SWAP1 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xFD SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x15E7 DUP3 DUP3 PUSH1 0x0 ADD MLOAD PUSH2 0x2538 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP4 DUP6 LT PUSH2 0x26B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x26BD PUSH1 0x1 PUSH2 0x15EB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x26CB DUP6 DUP9 PUSH2 0x1E23 JUMP JUMPDEST SWAP1 POP PUSH2 0x26D7 DUP5 DUP8 PUSH2 0x1E23 JUMP JUMPDEST SWAP3 POP PUSH2 0x26E3 DUP4 DUP4 PUSH2 0x1551 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x26F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26FB DUP4 DUP3 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP5 MLOAD DUP2 MSTORE PUSH2 0x2718 DUP2 DUP4 PUSH2 0x1551 JUMP JUMPDEST PUSH2 0x2724 PUSH2 0x1E07 DUP9 PUSH2 0x15EB JUMP JUMPDEST PUSH2 0x272D DUP2 PUSH2 0x2F22 JUMP JUMPDEST SWAP1 POP PUSH2 0x2739 DUP5 DUP3 PUSH2 0x1537 JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x0 PUSH2 0x275F PUSH1 0x1 PUSH2 0x15EB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x276C DUP6 PUSH2 0x15EB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP6 MLOAD DUP2 MSTORE SWAP1 SWAP2 POP PUSH2 0x278C DUP2 DUP5 PUSH2 0x1551 JUMP JUMPDEST PUSH2 0x2796 DUP2 DUP4 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x279F DUP2 PUSH2 0x2F22 JUMP JUMPDEST SWAP1 POP PUSH2 0x27AB DUP6 DUP8 PUSH2 0x1E23 JUMP JUMPDEST SWAP4 POP PUSH2 0x27B7 DUP5 DUP5 PUSH2 0x1551 JUMP JUMPDEST PUSH2 0x27C1 DUP5 DUP3 PUSH2 0x1537 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x0 PUSH2 0x27F4 PUSH1 0x1 PUSH2 0x15EB JUMP JUMPDEST SWAP1 POP PUSH2 0x2814 DUP5 PUSH1 0xC0 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x100 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x2826 SWAP1 DUP3 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x100 DUP5 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE PUSH2 0x120 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP6 ADD MLOAD PUSH2 0x2856 SWAP2 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x1A0 DUP6 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP2 POP PUSH2 0x2888 DUP5 PUSH1 0xC0 ADD MLOAD DUP4 PUSH2 0x1537 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x120 DUP5 ADD MLOAD PUSH2 0x2899 SWAP1 DUP4 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x1C0 DUP6 ADD MLOAD PUSH2 0x28AA SWAP1 DUP4 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x28BA SWAP1 PUSH1 0x6 PUSH2 0x19A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x28DB PUSH1 0x1 DUP9 PUSH1 0x0 ADD MLOAD PUSH2 0x28D0 SWAP2 SWAP1 PUSH2 0x45EF JUMP JUMPDEST PUSH1 0x40 DUP10 ADD MLOAD SWAP1 PUSH2 0x1E23 JUMP JUMPDEST SWAP1 POP PUSH2 0x28FC DUP6 PUSH2 0x180 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x1C0 DUP7 ADD DUP2 SWAP1 MSTORE PUSH2 0x290E SWAP1 DUP3 PUSH2 0x1551 JUMP JUMPDEST PUSH2 0x1C0 DUP6 ADD MLOAD PUSH2 0x291F SWAP1 DUP5 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x2929 DUP5 DUP5 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x2943 PUSH1 0x0 DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x40 ADD MLOAD DUP9 PUSH2 0x180 ADD MLOAD PUSH2 0x2696 JUMP JUMPDEST PUSH2 0x1E0 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0xE0 ADD MLOAD SWAP1 SWAP4 POP PUSH2 0x2975 SWAP1 DUP5 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x297F DUP5 DUP5 PUSH2 0x1551 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x29A1 PUSH1 0x1 DUP10 PUSH1 0x0 ADD MLOAD PUSH2 0x2995 SWAP2 SWAP1 PUSH2 0x45EF JUMP JUMPDEST PUSH2 0x120 DUP9 ADD MLOAD SWAP1 PUSH2 0x1E23 JUMP JUMPDEST SWAP1 POP PUSH2 0x29C9 PUSH1 0x1 DUP10 PUSH1 0x0 ADD MLOAD PUSH2 0x29B7 SWAP2 SWAP1 PUSH2 0x45EF JUMP JUMPDEST DUP10 MLOAD PUSH1 0x40 DUP12 ADD MLOAD PUSH2 0x180 DUP11 ADD MLOAD PUSH2 0x2696 JUMP JUMPDEST PUSH2 0x200 DUP8 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP4 POP PUSH2 0x29F0 DUP5 DUP3 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD PUSH2 0x100 ADD MLOAD PUSH2 0x2A05 SWAP1 DUP6 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x2A0F DUP6 DUP6 PUSH2 0x1551 JUMP JUMPDEST POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH2 0x2A33 DUP3 DUP5 PUSH2 0x1E23 JUMP JUMPDEST SWAP1 POP PUSH2 0x1531 PUSH2 0x2A42 PUSH1 0x1 PUSH2 0x15EB JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1551 JUMP JUMPDEST PUSH2 0x15E7 DUP3 DUP3 DUP5 PUSH2 0x2F61 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2A74 PUSH1 0x0 PUSH2 0x15EB JUMP JUMPDEST SWAP1 POP PUSH2 0x2A8C PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP9 ADD MLOAD DUP4 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP4 MSTORE SWAP1 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x2AC2 SWAP1 PUSH1 0x6 PUSH2 0x1C3F JUMP JUMPDEST PUSH2 0x1C0 DUP6 ADD MLOAD PUSH2 0x2AD3 SWAP1 DUP3 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x160 DUP7 ADD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x2AE6 SWAP1 DUP4 PUSH2 0x159D JUMP JUMPDEST SWAP1 POP PUSH2 0x2AF2 DUP6 DUP3 PUSH2 0x15DC JUMP JUMPDEST PUSH2 0x200 DUP8 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP2 POP PUSH2 0x2B24 DUP7 PUSH1 0xC0 ADD MLOAD DUP4 PUSH2 0x1537 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x1E0 DUP8 ADD MLOAD PUSH2 0x2B35 SWAP1 DUP4 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x120 DUP7 ADD MLOAD PUSH2 0x2B46 SWAP1 DUP4 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2B61 PUSH1 0x1 PUSH2 0x15EB JUMP JUMPDEST SWAP1 POP PUSH2 0x2B79 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x2B88 PUSH1 0x1 PUSH1 0x4 PUSH2 0x45EF JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x2BD6 JUMPI PUSH2 0x2BA8 DUP12 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x4 DUP2 LT PUSH2 0x14F JUMPI PUSH2 0x14F PUSH2 0x45C3 JUMP JUMPDEST SWAP2 POP PUSH2 0x2BB4 DUP3 DUP5 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x2BBE DUP5 DUP4 PUSH2 0x1583 JUMP JUMPDEST PUSH1 0xA0 DUP11 ADD MLOAD PUSH2 0x2BCE SWAP1 DUP5 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x2B7C JUMP JUMPDEST POP PUSH2 0x240 DUP11 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE SWAP6 POP PUSH2 0x2BFC DUP7 DUP4 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x2C06 DUP4 DUP8 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x220 DUP11 ADD MLOAD PUSH2 0x2C17 SWAP1 DUP5 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0xE0 DUP10 ADD MLOAD PUSH2 0x2C27 SWAP1 DUP5 SWAP1 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x2C31 DUP6 DUP5 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x100 DUP10 ADD MLOAD PUSH2 0x2C42 SWAP1 DUP7 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP8 MLOAD DUP2 MSTORE SWAP6 POP PUSH2 0x2C61 DUP7 DUP7 PUSH2 0x1551 JUMP JUMPDEST PUSH1 0x80 DUP10 ADD MLOAD DUP7 SWAP6 POP PUSH2 0x2C74 SWAP1 PUSH1 0x6 PUSH2 0x20CA JUMP JUMPDEST PUSH2 0x1C0 DUP10 ADD MLOAD PUSH2 0x2C85 SWAP1 DUP7 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x1E0 DUP10 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE PUSH1 0x80 DUP11 ADD MLOAD SWAP1 SWAP7 POP PUSH2 0x2CB9 SWAP1 PUSH1 0x7 JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP8 SWAP1 PUSH2 0x1537 JUMP JUMPDEST PUSH2 0x2CC3 DUP6 DUP8 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x200 DUP10 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD DUP2 MSTORE PUSH1 0x80 DUP11 ADD MLOAD SWAP1 SWAP7 POP PUSH2 0x2CEF SWAP1 PUSH1 0x8 PUSH2 0x2CAD JUMP JUMPDEST PUSH2 0x2CF9 DUP6 DUP8 PUSH2 0x1583 JUMP JUMPDEST PUSH2 0x180 DUP11 ADD MLOAD PUSH2 0x2D09 SWAP1 DUP7 PUSH2 0x159D JUMP JUMPDEST SWAP4 POP PUSH2 0x2D15 DUP9 DUP6 PUSH2 0x15DC JUMP JUMPDEST POP POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 PUSH1 0x20 ADD MLOAD PUSH1 0x0 SUB PUSH2 0x2D3D JUMPI DUP1 MLOAD ISZERO PUSH2 0x2D3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x2D5A SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x464A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH2 0x45EF JUMP JUMPDEST PUSH1 0x20 SWAP1 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x2D6A PUSH2 0x35E3 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH32 0x198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2 DUP2 DUP4 ADD SWAP1 DUP2 MSTORE PUSH32 0x1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED PUSH1 0x60 DUP4 ADD MSTORE DUP2 MSTORE DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH32 0x90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B DUP3 MSTORE PUSH32 0x12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA PUSH1 0x20 DUP4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 SWAP1 DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x2E3D JUMPI POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x2 DUP1 DUP3 MSTORE PUSH1 0x60 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD JUMPDEST PUSH2 0x2E87 PUSH2 0x35E3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x2E7F JUMPI SWAP1 POP POP SWAP1 POP DUP7 DUP3 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2EB0 JUMPI PUSH2 0x2EB0 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP DUP5 DUP3 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2ECF JUMPI PUSH2 0x2ECF PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP DUP6 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2EEE JUMPI PUSH2 0x2EEE PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP DUP4 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x2F0D JUMPI PUSH2 0x2F0D PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP PUSH2 0x106 DUP3 DUP3 PUSH2 0x300B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP2 MLOAD PUSH1 0x0 SUB PUSH2 0x2F3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1531 DUP3 PUSH2 0x2F5C PUSH1 0x2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x466A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH2 0x45EF JUMP JUMPDEST PUSH2 0x1E23 JUMP JUMPDEST DUP2 MLOAD ISZERO DUP1 ISZERO PUSH2 0x2F72 JUMPI POP PUSH1 0x20 DUP3 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x2F8A JUMPI DUP3 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST DUP3 MLOAD ISZERO DUP1 ISZERO PUSH2 0x2F9B JUMPI POP PUSH1 0x20 DUP4 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x2FCB JUMPI DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x2FC1 SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x464A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH2 0x45EF JUMP JUMPDEST PUSH1 0x20 SWAP1 SWAP2 ADD MSTORE POP POP JUMP JUMPDEST PUSH2 0x2FD3 PUSH2 0x37F3 JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x40 DUP4 ADD MSTORE DUP4 ADD MLOAD PUSH2 0x3003 SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x464A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH2 0x45EF JUMP JUMPDEST DUP2 PUSH1 0x3 PUSH2 0x251B JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP4 MLOAD EQ PUSH2 0x301B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x0 PUSH2 0x302A DUP3 PUSH1 0x6 PUSH2 0x461F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3046 JUMPI PUSH2 0x3046 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x306F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x32A0 JUMPI DUP7 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x308F JUMPI PUSH2 0x308F PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP3 DUP3 PUSH1 0x6 PUSH2 0x30A9 SWAP2 SWAP1 PUSH2 0x461F JUMP JUMPDEST PUSH2 0x30B4 SWAP1 PUSH1 0x0 PUSH2 0x4636 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x30C4 JUMPI PUSH2 0x30C4 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP7 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x30E2 JUMPI PUSH2 0x30E2 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD DUP3 DUP3 PUSH1 0x6 PUSH2 0x30FC SWAP2 SWAP1 PUSH2 0x461F JUMP JUMPDEST PUSH2 0x3107 SWAP1 PUSH1 0x1 PUSH2 0x4636 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3117 JUMPI PUSH2 0x3117 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3135 JUMPI PUSH2 0x3135 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD MLOAD MLOAD DUP3 PUSH2 0x314E DUP4 PUSH1 0x6 PUSH2 0x461F JUMP JUMPDEST PUSH2 0x3159 SWAP1 PUSH1 0x2 PUSH2 0x4636 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3169 JUMPI PUSH2 0x3169 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3187 JUMPI PUSH2 0x3187 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD MLOAD ADD MLOAD DUP3 PUSH2 0x31A2 DUP4 PUSH1 0x6 PUSH2 0x461F JUMP JUMPDEST PUSH2 0x31AD SWAP1 PUSH1 0x3 PUSH2 0x4636 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x31BD JUMPI PUSH2 0x31BD PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x31DB JUMPI PUSH2 0x31DB PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x31F9 JUMPI PUSH2 0x31F9 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP3 PUSH2 0x320A DUP4 PUSH1 0x6 PUSH2 0x461F JUMP JUMPDEST PUSH2 0x3215 SWAP1 PUSH1 0x4 PUSH2 0x4636 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3225 JUMPI PUSH2 0x3225 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3243 JUMPI PUSH2 0x3243 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x3261 JUMPI PUSH2 0x3261 PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP3 PUSH2 0x3272 DUP4 PUSH1 0x6 PUSH2 0x461F JUMP JUMPDEST PUSH2 0x327D SWAP1 PUSH1 0x5 PUSH2 0x4636 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x328D JUMPI PUSH2 0x328D PUSH2 0x45C3 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3075 JUMP JUMPDEST POP PUSH2 0x32A9 PUSH2 0x37B7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 PUSH1 0x20 DUP7 MUL PUSH1 0x20 DUP7 ADD PUSH1 0x8 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x32C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x32E7 PUSH2 0x3811 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x32F4 PUSH2 0x384B JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3301 PUSH2 0x3880 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x330E PUSH2 0x38AA JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x160 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3343 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3350 PUSH2 0x38CB JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x335D PUSH2 0x38F3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x336A PUSH2 0x391E JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x338C PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3399 PUSH2 0x391E JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x33BB PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x33C8 PUSH2 0x3947 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x330E PUSH2 0x3968 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x2A0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x33F0 PUSH2 0x391E JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3412 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x341F PUSH2 0x391E JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x342C PUSH2 0x3995 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP3 DUP2 MSTORE DUP4 MSTORE DUP1 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP3 MLOAD DUP1 DUP5 ADD DUP5 MSTORE SWAP2 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x3468 PUSH2 0x3947 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3483 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x349E PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34B9 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34DB PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x34FD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3518 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3533 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x354E PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3569 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3584 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x359F PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x35C1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x330E PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x35F6 PUSH2 0x39B6 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x330E PUSH2 0x39B6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x280 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x260 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE DUP3 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP6 MSTORE DUP3 DUP3 MSTORE DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP3 ADD DUP6 MSTORE DUP3 DUP2 MSTORE DUP4 DUP6 ADD MSTORE DUP4 MLOAD SWAP1 DUP2 ADD SWAP1 SWAP4 MSTORE DUP3 MSTORE SWAP1 PUSH1 0x60 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3658 PUSH2 0x39D4 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3673 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x368E PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x36A9 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x36C4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x36DF PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x36FA PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3715 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3730 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x374B PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3766 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3781 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x379C PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x35C1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x1A0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xD SWAP1 JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x3821 JUMPI SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x1A0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xD SWAP1 JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x385B JUMPI SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH1 0xC0 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0xE0 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP3 ADD PUSH2 0x3821 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH1 0xC0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP3 ADD PUSH2 0x385B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH1 0x0 SWAP2 DUP2 ADD DUP3 DUP2 MSTORE PUSH1 0x60 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP3 ADD PUSH2 0x3821 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH1 0xE0 DUP3 ADD DUP2 DUP2 MSTORE PUSH2 0x100 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 DUP3 ADD PUSH2 0x3821 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH1 0x80 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0xA0 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 DUP3 ADD PUSH2 0x3821 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP3 ADD PUSH2 0x385B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 JUMPDEST PUSH2 0x397F PUSH2 0x35E3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x3977 JUMPI SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 DUP3 ADD PUSH2 0x385B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x140 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 DUP3 ADD PUSH2 0x385B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3A09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3A20 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x3A3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3A58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x3A6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3A7B DUP9 DUP4 DUP10 ADD PUSH2 0x39F7 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x3A94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3AA1 DUP8 DUP3 DUP9 ADD PUSH2 0x39F7 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3AE5 JUMPI PUSH2 0x3AE5 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2A0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3AE5 JUMPI PUSH2 0x3AE5 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x260 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3AE5 JUMPI PUSH2 0x3AE5 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x160 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3AE5 JUMPI PUSH2 0x3AE5 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3AE5 JUMPI PUSH2 0x3AE5 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3B88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x3BAA JUMPI PUSH2 0x3BAA PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 CALLDATALOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3BD1 PUSH2 0x3AC3 JUMP JUMPDEST SWAP1 POP DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3BF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3C00 PUSH2 0x3AC3 JUMP JUMPDEST DUP1 PUSH1 0x80 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3C12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3C36 JUMPI PUSH2 0x3C26 DUP8 DUP3 PUSH2 0x3BB7 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x40 ADD PUSH2 0x3C14 JUMP JUMPDEST POP SWAP1 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3C52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x3C75 JUMPI PUSH2 0x3C75 PUSH2 0x3AAD JUMP JUMPDEST DUP3 MSTORE DUP1 PUSH2 0x1C0 DUP6 ADD DUP7 DUP2 GT ISZERO PUSH2 0x3C8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3CAD JUMPI PUSH2 0x3C9E DUP9 DUP3 PUSH2 0x3BB7 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 DUP5 ADD PUSH2 0x3C8C JUMP JUMPDEST POP SWAP2 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3CCA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3CD2 PUSH2 0x3B54 JUMP JUMPDEST DUP1 PUSH2 0x100 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3CE5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3C36 JUMPI PUSH2 0x3CF9 DUP8 DUP3 PUSH2 0x3BB7 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x40 ADD PUSH2 0x3CE7 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3D1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x3D3C JUMPI PUSH2 0x3D3C PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3D51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3D73 JUMPI PUSH2 0x3D65 DUP8 DUP3 PUSH2 0x3B76 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x3D53 JUMP JUMPDEST POP SWAP2 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3D8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3D97 PUSH2 0x3AC3 JUMP JUMPDEST DUP1 PUSH1 0x40 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3DA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3C36 JUMPI DUP1 CALLDATALOAD DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x3DAB JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3DD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3DDC PUSH2 0x3AC3 JUMP JUMPDEST DUP1 PUSH2 0x100 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3DEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3C36 JUMPI PUSH1 0x80 DUP2 DUP9 SUB SLT ISZERO PUSH2 0x3E0A JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0x3E12 PUSH2 0x3AC3 JUMP JUMPDEST PUSH2 0x3E1C DUP9 DUP4 PUSH2 0x3D7E JUMP JUMPDEST DUP2 MSTORE PUSH2 0x3E2B DUP9 PUSH1 0x40 DUP5 ADD PUSH2 0x3D7E JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP6 MSTORE SWAP4 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x80 ADD PUSH2 0x3DF1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3E55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP4 GT ISZERO PUSH2 0x3E71 JUMPI PUSH2 0x3E71 PUSH2 0x3AAD JUMP JUMPDEST DUP3 PUSH1 0x5 SHL PUSH1 0x40 MLOAD PUSH1 0x1F NOT PUSH1 0x3F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT DUP5 DUP3 GT OR ISZERO PUSH2 0x3E96 JUMPI PUSH2 0x3E96 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP4 DUP5 MSTORE DUP6 DUP2 ADD DUP4 ADD SWAP4 DUP4 DUP2 ADD SWAP3 POP DUP8 DUP6 GT ISZERO PUSH2 0x3EB4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP8 ADD SWAP2 POP JUMPDEST DUP5 DUP3 LT ISZERO PUSH2 0x106 JUMPI DUP2 CALLDATALOAD DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH2 0x3EBA JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3EE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3EEC PUSH2 0x3B54 JUMP JUMPDEST DUP1 PUSH1 0x80 DUP5 ADD DUP6 DUP2 GT ISZERO PUSH2 0x3EFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3C36 JUMPI PUSH2 0x3F12 DUP8 DUP3 PUSH2 0x3B76 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x3F00 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3F31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP3 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x3F54 JUMPI PUSH2 0x3F54 PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MSTORE DUP2 DUP5 DUP3 ADD DUP7 DUP2 GT ISZERO PUSH2 0x3F68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F89 JUMPI PUSH2 0x3F7C DUP9 DUP3 PUSH2 0x3B76 JUMP JUMPDEST DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x3F6A JUMP JUMPDEST POP SWAP3 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5A0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3FA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3FB0 PUSH2 0x3AEB JUMP JUMPDEST SWAP1 POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3FC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3FD4 DUP5 DUP3 DUP6 ADD PUSH2 0x3E44 JUMP JUMPDEST DUP3 MSTORE POP PUSH2 0x3FE4 DUP4 PUSH1 0x20 DUP5 ADD PUSH2 0x3CB9 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x3FF8 DUP5 DUP3 DUP6 ADD PUSH2 0x3BB7 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x160 PUSH2 0x400C DUP6 DUP3 DUP7 ADD PUSH2 0x3CB9 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x260 PUSH2 0x4020 DUP7 DUP3 DUP8 ADD PUSH2 0x3ED3 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x4033 DUP7 PUSH2 0x2E0 DUP8 ADD PUSH2 0x3F20 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x4046 DUP7 PUSH2 0x300 DUP8 ADD PUSH2 0x3F20 JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x4059 DUP7 PUSH2 0x320 DUP8 ADD PUSH2 0x3D09 JUMP JUMPDEST PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x406C DUP7 PUSH2 0x380 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x4080 DUP7 PUSH2 0x3A0 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST DUP4 DUP6 ADD MSTORE PUSH2 0x4092 DUP7 PUSH2 0x3C0 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MSTORE PUSH2 0x40A6 DUP7 PUSH2 0x3E0 DUP8 ADD PUSH2 0x3BB7 JUMP JUMPDEST DUP3 DUP6 ADD MSTORE PUSH2 0x40B8 DUP7 PUSH2 0x420 DUP8 ADD PUSH2 0x3BB7 JUMP JUMPDEST PUSH2 0x180 DUP6 ADD MSTORE PUSH2 0x40CC DUP7 PUSH2 0x460 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x1A0 DUP6 ADD MSTORE PUSH2 0x40E0 DUP7 PUSH2 0x480 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x1C0 DUP6 ADD MSTORE PUSH2 0x40F4 DUP7 PUSH2 0x4A0 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x1E0 DUP6 ADD MSTORE PUSH2 0x4108 DUP7 PUSH2 0x4C0 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x200 DUP6 ADD MSTORE PUSH2 0x411C DUP7 PUSH2 0x4E0 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x220 DUP6 ADD MSTORE PUSH2 0x4130 DUP7 PUSH2 0x500 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x240 DUP6 ADD MSTORE PUSH2 0x4144 DUP7 PUSH2 0x520 DUP8 ADD PUSH2 0x3BB7 JUMP JUMPDEST DUP2 DUP6 ADD MSTORE POP POP POP PUSH2 0x4159 DUP4 PUSH2 0x560 DUP5 ADD PUSH2 0x3BB7 JUMP JUMPDEST PUSH2 0x280 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4176 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP1 DUP3 ADD DUP3 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR ISZERO PUSH2 0x419A JUMPI PUSH2 0x419A PUSH2 0x3AAD JUMP JUMPDEST PUSH1 0x40 MSTORE DUP4 ADD DUP2 DUP6 DUP3 GT ISZERO PUSH2 0x41AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3D73 JUMPI PUSH2 0x41C1 DUP8 DUP3 PUSH2 0x3B76 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x41AF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x380 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x41E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x41EA PUSH2 0x3B0E JUMP JUMPDEST SWAP1 POP PUSH2 0x41F6 DUP4 DUP4 PUSH2 0x3B76 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x4205 DUP4 PUSH1 0x20 DUP5 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x4217 DUP4 PUSH1 0x40 DUP5 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x4229 DUP4 PUSH1 0x60 DUP5 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x423B DUP4 PUSH1 0x80 DUP5 ADD PUSH2 0x4165 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x424F DUP5 DUP3 DUP6 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x1C0 PUSH2 0x4263 DUP6 DUP3 DUP7 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x1E0 PUSH2 0x4277 DUP7 DUP3 DUP8 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x200 PUSH2 0x428B DUP8 DUP3 DUP9 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x100 DUP7 ADD MSTORE PUSH2 0x220 PUSH2 0x42A0 DUP9 DUP3 DUP10 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x120 DUP8 ADD MSTORE PUSH2 0x240 PUSH2 0x42B5 DUP10 DUP3 DUP11 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x140 DUP9 ADD MSTORE PUSH2 0x42C9 DUP10 PUSH2 0x260 DUP11 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x160 DUP9 ADD MSTORE PUSH2 0x42DD DUP10 PUSH2 0x280 DUP11 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH2 0x180 DUP9 ADD MSTORE PUSH2 0x42F1 DUP10 PUSH2 0x2A0 DUP11 ADD PUSH2 0x3B76 JUMP JUMPDEST DUP7 DUP9 ADD MSTORE PUSH2 0x4303 DUP10 PUSH2 0x2C0 DUP11 ADD PUSH2 0x3B76 JUMP JUMPDEST DUP6 DUP9 ADD MSTORE PUSH2 0x4315 DUP10 PUSH2 0x2E0 DUP11 ADD PUSH2 0x3B76 JUMP JUMPDEST DUP5 DUP9 ADD MSTORE PUSH2 0x4327 DUP10 PUSH2 0x300 DUP11 ADD PUSH2 0x3B76 JUMP JUMPDEST DUP4 DUP9 ADD MSTORE PUSH2 0x4339 DUP10 PUSH2 0x320 DUP11 ADD PUSH2 0x3B76 JUMP JUMPDEST DUP3 DUP9 ADD MSTORE PUSH2 0x434B DUP10 PUSH2 0x340 DUP11 ADD PUSH2 0x3BB7 JUMP JUMPDEST DUP2 DUP9 ADD MSTORE POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP6 SUB PUSH2 0xA20 DUP2 SLT ISZERO PUSH2 0x4372 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x680 DUP1 DUP3 SLT ISZERO PUSH2 0x4382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x438A PUSH2 0x3B31 JUMP JUMPDEST SWAP2 POP DUP6 CALLDATALOAD DUP3 MSTORE PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x43A7 DUP8 PUSH1 0x40 DUP9 ADD PUSH2 0x3B76 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x43B9 DUP8 PUSH1 0x60 DUP9 ADD PUSH2 0x3BE7 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x43CB DUP8 PUSH1 0xE0 DUP9 ADD PUSH2 0x3C41 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x43DE DUP8 PUSH2 0x2A0 DUP9 ADD PUSH2 0x3CB9 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x43F1 DUP8 PUSH2 0x3A0 DUP9 ADD PUSH2 0x3BB7 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x4404 DUP8 PUSH2 0x3E0 DUP9 ADD PUSH2 0x3CB9 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x4417 DUP8 PUSH2 0x4E0 DUP9 ADD PUSH2 0x3BB7 JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE PUSH2 0x442B DUP8 PUSH2 0x520 DUP9 ADD PUSH2 0x3D09 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE PUSH2 0x443F DUP8 PUSH2 0x580 DUP9 ADD PUSH2 0x3DC3 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE SWAP1 SWAP4 POP DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x445F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x446B DUP7 DUP3 DUP8 ADD PUSH2 0x3F95 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x447C DUP6 PUSH2 0x6A0 DUP7 ADD PUSH2 0x41CF JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD PUSH2 0x1531 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST PUSH1 0x6 DUP2 LT ISZERO PUSH2 0x44D4 JUMPI PUSH2 0x44BE DUP5 DUP4 MLOAD DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x40 SWAP4 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x20 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x44A0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST PUSH1 0x6 DUP2 LT ISZERO PUSH2 0x44D4 JUMPI DUP2 MLOAD MLOAD DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x44DE JUMP JUMPDEST DUP2 MLOAD PUSH2 0x720 DUP3 ADD SWAP1 DUP3 PUSH1 0x0 JUMPDEST PUSH1 0xD DUP2 LT ISZERO PUSH2 0x453E JUMPI PUSH2 0x4528 DUP3 DUP5 MLOAD DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x20 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x450A JUMP JUMPDEST POP POP POP PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH2 0x340 DUP5 ADD PUSH1 0x0 JUMPDEST PUSH1 0xD DUP2 LT ISZERO PUSH2 0x456D JUMPI DUP3 MLOAD MLOAD DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x454F JUMP JUMPDEST POP POP POP POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x4584 PUSH2 0x4E0 DUP5 ADD DUP3 PUSH2 0x449C JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x4598 PUSH2 0x660 DUP5 ADD DUP3 PUSH2 0x44DA JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x380 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x45B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x45BC DUP4 DUP4 PUSH2 0x41CF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x1531 JUMPI PUSH2 0x1531 PUSH2 0x45D9 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x4598 JUMPI PUSH2 0x4598 PUSH2 0x45D9 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x1531 JUMPI PUSH2 0x1531 PUSH2 0x45D9 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x1531 JUMPI PUSH2 0x1531 PUSH2 0x45D9 JUMP INVALID ADDRESS PUSH5 0x4E72E131A0 0x29 0xB8 POP GASLIMIT 0xB6 DUP2 DUP2 PC 0x5D SWAP8 DUP2 PUSH11 0x916871CA8D3C208C16D87C REVERT SELFBALANCE ADDRESS PUSH5 0x4E72E131A0 0x29 0xB8 POP GASLIMIT 0xB6 DUP2 DUP2 PC 0x5D 0x28 CALLER 0xE8 BASEFEE PUSH26 0xB9709143E1F593F0000001A2646970667358221220525EBA758B 0xF7 0xC4 0x2A PUSH30 0x1CF6A05EB2CF3DD25B2CAF7BB388AEE220ED13D5AA7C8F64736F6C634300 ADDMOD GT STOP CALLER ","sourceMap":"169:10734:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10502:399;;;;;;:::i;:::-;;:::i;:::-;;;1329:14:181;;1322:22;1304:41;;1292:2;1277:18;10502:399:8;;;;;;;;20787:1232:6;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24964:2920::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8119:507::-;;;;;;:::i;:::-;;:::i;:::-;;10502:399:8;10651:4;10671:25;10699:22;:20;:22::i;:::-;10739:13;;;;10671:50;;-1:-1:-1;10739:37:8;;10731:46;;;;;;10788:18;10809:50;10827:13;;10842:16;;10809:17;:50::i;:::-;10788:71;;10877:17;10884:5;10891:2;10877:6;:17::i;:::-;10870:24;10502:399;-1:-1:-1;;;;;;;10502:399:8:o;20787:1232:6:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21138:31:6;;;;:41;;21170:1;21138:34;;;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;:1;605:103;21138:41:6;21134:45;-1:-1:-1;21189:15:6;21134:45;;21189:12;:15::i;:::-;21227:31;;;;21214:48;;21259:1;21227:34;;;;;21214:1;;:12;:48::i;:::-;21322:18;;;;21309:35;;21341:1;21322:21;;;;;21309:1;;:12;:35::i;:::-;21354:33;:19;21385:1;21354:30;:33::i;:::-;21425:31;;;;:41;;21457:1;21425:34;;:41;21421:45;-1:-1:-1;21476:15:6;21421:45;;21476:12;:15::i;:::-;21514:31;;;;21501:48;;21546:1;21514:34;;21501:48;21572:18;;;;21559:39;;21591:5;21572:25;;21559:39;21608:33;:19;21639:1;21608:30;:33::i;:::-;21680:31;;;;:41;;21712:1;21680:34;;:41;21744:31;;;;21676:45;;-1:-1:-1;21731:48:6;;21776:1;21744:34;;21731:48;21802:31;;;;21789:48;;21834:1;21802:34;;21789:48;21860:18;;;;21847:39;;21879:5;21860:25;;21847:39;21896:33;:19;21927:1;21896:30;:33::i;:::-;21949:29;;;;:63;;21992:19;;21979:1;21949:32;;;;;;:42;:63::i;:::-;21940:72;20787:1232;-1:-1:-1;;;;;;20787:1232:6:o;24964:2920::-;25122:22;;:::i;:::-;25238:1;25224:11;25249:261;232:1;25269;:15;25249:261;;;25354:5;:29;;;25384:1;25354:32;;;;;;;:::i;:::-;;;;;25322:24;;25347:3;25322:29;;;;;;;:::i;:::-;;;;:64;25427:31;;;;25459:1;25427:34;;;;;;;:::i;:::-;;;;;25400:7;:19;;;25420:3;25400:24;;;;;;;:::i;:::-;;;;:61;222:1:5;212:11;;;;;25249:261:6;;;-1:-1:-1;25616:29:6;;;;:32;25584:24;;25609:3;25584:29;;;;;;;:::i;:::-;;;;:64;25685:34;;;;25720:1;25685:37;;;;25658:7;:19;;;25678:3;25658:24;;;;;;;:::i;:::-;;;;:64;222:1:5;212:11;25771:9:6;25766:273;25790:15;25804:1;232;25790:15;:::i;:::-;25786:1;:19;25766:273;;;25875:2;:26;;;25902:1;25875:29;;;;;;;:::i;:::-;;;;;25843:24;;25868:3;25843:29;;;;;;;:::i;:::-;;;;:61;25945:42;;;;25988:1;25945:45;;;;;;;:::i;:::-;;;;;25918:7;:19;;;25938:3;25918:24;;;;;;;:::i;:::-;;;;:72;222:1:5;212:11;;;;;25766:273:6;;;-1:-1:-1;26085:47:6;;;;;26049:30;;;;:83;:33;26178:29;;;26208:15;26222:1;232;26208:15;:::i;:::-;26178:46;;;;;;;:::i;:::-;;;;;;;;;;26142:30;;;;:33;;:82;26266:55;;;;26235:25;;;;;:86;;;;26362:37;;;;;:40;26331:25;;:28;;;:71;26480:28;;;;:31;26559:9;;;;26261:1;;26559:16;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;:1;605:103;26559:16:6;26521:54;-1:-1:-1;26602:1:6;26585:297;26609:35;26605:39;;26585:297;;;26693:54;26735:11;26693:2;:28;;;26722:1;26693:31;;;;;;;:::i;:54::-;26682:8;;;:65;;;26761:62;;:35;;:52;:62::i;:::-;26861:9;;;;26838:33;;:11;;:22;:33::i;:::-;222:1:5;212:11;26585:297:6;;;-1:-1:-1;26891:24:6;;26923:35;;26916:3;26891:29;;;;;;;:::i;:::-;;;;:67;;;;26995:5;:32;;;26968:7;:19;;;26988:3;26968:24;;;;;;;:::i;:::-;;;;:59;27103:29;;;;27071:24;;222:1:5;212:11;;;;;;27071:29:6;;;;;;;:::i;:::-;;;;:61;;;;27169:5;:39;;;27142:7;:19;;;27162:3;27142:24;;;;;;;:::i;:::-;;;;:66;27284:31;;;;27252:24;;222:1:5;212:11;;;;;;27252:29:6;;;;;;;:::i;:::-;;;;:63;;;;27352:5;:41;;;27325:7;:19;;;27345:3;27325:24;;;;;;;:::i;:::-;;;;:68;-1:-1:-1;27439:30:6;;;;27403;;;;;;:33;;:66;;;;27510:38;;;;27479:25;;;;;;:28;;;:69;;;;27594:37;;;;27558:30;;:33;;:73;27672:45;;;;27641:25;;:28;;;:76;27727:30;;:33;;;;:71;;;;27839:38;;;;;27808:25;;:28;:69;;;;27403:30;24964:2920;-1:-1:-1;;;24964:2920:6:o;8119:507::-;8217:11;;;;:17;;:22;8209:31;;;;;;8274:23;8295:1;8274:20;:23::i;:::-;8250:18;;;;;:47;;;;:21;8331:11;;;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;8307:18:6;;:21;;:42;;;;8399:11;;-1:-1:-1;;;;;;;;;;691:10:16;;681:20;;8444:1:6;8427:193;8451:25;8447:29;;8427:193;;;8539:11;;;;8514:37;;:13;;:24;:37::i;:::-;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;8565:5:6;:18;;;8584:1;8565:21;;;;;;;:::i;:::-;;;;:44;222:1:5;212:11;8427:193:6;;;;8199:427;8119:507;:::o;266:6090:8:-;321:25;;:::i;:::-;374:1;358:13;;;:17;402:3;385:20;;426:88;447:66;426:20;:88::i;:::-;415:8;;;:99;579:190;613:66;693;579:20;:190::i;:::-;548:25;;;;:221;810:190;844:66;924;810:20;:190::i;:::-;779:25;;;;:28;;:221;1041:190;1075:66;1155;1041:20;:190::i;:::-;1010:25;;;;:28;;:221;1272:190;1306:66;1386;1272:20;:190::i;:::-;1241:25;;;;:28;;:221;1503:190;1537:66;1617;1503:20;:190::i;:::-;1472:25;;;;;:28;:221;1734:190;1768:66;1848;1734:20;:190::i;:::-;1703:25;;;;:28;;:221;1965:190;1999:66;2079;1965:20;:190::i;:::-;1934:25;;;;:28;;:221;2226:190;2260:66;2340;2226:20;:190::i;:::-;2191:29;;;;:225;2461:190;2495:66;2575;2461:20;:190::i;:::-;2426:29;;;;:32;;:225;2716:190;2750:66;2830;2716:20;:190::i;:::-;2684:26;;;;:222;2948:190;2982:66;3062;2948:20;:190::i;:::-;2916:26;;;;:29;;:222;3180:190;3214:66;3294;3180:20;:190::i;:::-;3148:26;;;;:29;;:222;3412:190;3446:66;3526;3412:20;:190::i;:::-;3380:26;;;;:29;;:222;3680:190;3714:66;3794;3680:20;:190::i;:::-;3648:29;;;:222;3914:190;3948:66;4028;3914:20;:190::i;:::-;3880:28;;;;:224;4148:190;4182:66;4262;4148:20;:190::i;:::-;4114:28;;;;:31;;:224;4382:190;4416:66;4496;4382:20;:190::i;:::-;4348:28;;;;:31;;:224;4616:190;4650:66;4730;4616:20;:190::i;:::-;4582:28;;;;:31;;:224;4850:190;4884:66;4964;4850:20;:190::i;:::-;4816:31;;;:224;5095:88;5116:66;5095:20;:88::i;:::-;5074:15;;;;:109;5214:88;5235:66;5214:20;:88::i;:::-;5193:15;;;;:18;;:109;5333:88;5354:66;5333:20;:88::i;:::-;5312:15;;;;5328:1;5312:18;;;:109;;;;5475:422;;;;;;;;;5527:66;5475:422;;;;5611:66;5475:422;;;;;;;;;;;5723:66;5475:422;;;;5807:66;5475:422;;;:20;:422::i;:::-;5455:14;;;;:442;5927:422;;;;;;;;5979:66;5927:422;;6063:66;5455:17;5927:422;;;;;;;;;;;;;;;6175:66;5927:422;;6259:66;5927:422;;;;;;:20;:422::i;:::-;5907:14;;;;:17;;:442;:14;266:6090::o;6362:4134::-;6507:18;;:::i;:::-;6632:13;-1:-1:-1;;;;;6618:35:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6618:35:8;-1:-1:-1;6597:56:8;;:18;6663:133;6683:24;;;6663:133;;;6769:13;;6783:1;6769:16;;;;;;;:::i;:::-;;;;;;;6745:5;:18;;;6764:1;6745:21;;;;;;;;:::i;:::-;;;;;;;;;;:40;222:1:5;212:11;6663:133:8;;;-1:-1:-1;6806:9:8;;6825:286;232:1:6;6845::8;:15;6825:286;;;6933:131;6979:16;;6996:1;6979:19;;;;;;;:::i;:::-;;;;;;;7016:16;;7033;:1;222::5;212:11;;100:140;7033:16:8;7016:34;;;;;;;:::i;:::-;;;;;;;6933:28;:131::i;:::-;6898:5;:29;;;6928:1;6898:32;;;;;;;:::i;:::-;;;;:166;7098:1;369:11:5;;7079:21:8;-1:-1:-1;222:1:5;212:11;6825:286:8;;;;7170:119;7212:16;;7229:1;7212:19;;;;;;;:::i;:::-;;;;;;;7245:16;;7262;:1;222::5;212:11;;100:140;7170:119:8;7120:47;;;:169;7318:1;369:11:5;7364:119:8;7406:16;;369:11:5;7406:19:8;;;;;;;:::i;7364:119::-;7331:30;;;:152;7512:1;369:11:5;7565:119:8;7607:16;;369:11:5;7607:19:8;;;;;;;:::i;7565:119::-;7525:37;;;:159;7713:1;369:11:5;7730:9:8;7725:326;7749:44;7745:48;;7725:326;;;7874:131;7920:16;;7937:1;7920:19;;;;;;;:::i;7874:131::-;7831:5;:37;;;7869:1;7831:40;;;;;;;:::i;:::-;;;;:174;8038:1;369:11:5;;8019:21:8;-1:-1:-1;222:1:5;212:11;7725:326:8;;;;8066:9;8061:224;8085:38;8081:42;;8061:224;;;8198:41;8219:16;;8236:1;8219:19;;;;;;;:::i;:::-;;;;;;;8198:20;:41::i;:::-;8161:5;:31;;;8193:1;8161:34;;;;;;;:::i;:::-;;;;:78;222:1:5;212:11;;;;;8061:224:8;;;;8300:9;8295:236;8319:44;8315:48;;8295:236;;;8444:41;8465:16;;8482:1;8465:19;;;;;;;:::i;8444:41::-;8401:5;:37;;;8439:1;8401:40;;;;;;;:::i;:::-;;;;:84;222:1:5;212:11;;;;;8295:236:8;;;;8545:9;8540:230;8564:41;8560:45;;8540:230;;;8683:41;8704:16;;8721:1;8704:19;;;;;;;:::i;8683:41::-;8643:5;:34;;;8678:1;8643:37;;;;;;;:::i;:::-;;;;:81;222:1:5;212:11;;;;;8540:230:8;;;;8784:9;8779:246;8803:49;8799:53;;8779:246;;;8938:41;8959:16;;8976:1;8959:19;;;;;;;:::i;8938:41::-;8890:5;:42;;;8933:1;8890:45;;;;;;;:::i;:::-;;;;:89;222:1:5;212:11;;;;;8779:246:8;;;;9092:41;9113:16;;9130:1;9113:19;;;;;;;:::i;9092:41::-;9034:55;;;:99;222:1:5;212:11;9215:41:8;9236:16;;212:11:5;9236:19:8;;;;;;;:::i;9215:41::-;9174:38;;;:82;222:1:5;212:11;9344:41:8;9365:16;;212:11:5;9365:19:8;;;;;;;:::i;9344:41::-;9296:45;;;:89;222:1:5;212:11;9461:41:8;9482:16;;212:11:5;9482:19:8;;;;;;;:::i;9461:41::-;9426:32;;;:76;222:1:5;212:11;9584:41:8;9605:16;;212:11:5;9605:19:8;;;;;;;:::i;9584:41::-;9543:38;;;:82;222:1:5;212:11;9707:41:8;9728:16;;212:11:5;9728:19:8;;;;;;;:::i;9707:41::-;9665:39;;;:83;222:1:5;212:11;9832:41:8;9853:16;;212:11:5;9853:19:8;;;;;;;:::i;9832:41::-;9788;;;:85;222:1:5;212:11;9948:41:8;9969:16;;212:11:5;9969:19:8;;;;;;;:::i;9948:41::-;9913:32;;;:76;222:1:5;212:11;10069:41:8;10090:16;;212:11:5;10090:19:8;;;;;;;:::i;10069:41::-;10029:37;;;:81;222:1:5;212:11;10177:119:8;10219:16;;212:11:5;10219:19:8;;;;;;;:::i;10177:119::-;10150:24;;;:146;10325:1;369:11:5;10370:119:8;10412:16;;369:11:5;10412:19:8;;;;;;;:::i;10370:119::-;10337:30;;;:152;-1:-1:-1;10337:5:8;6362:4134;-1:-1:-1;;;;6362:4134:8:o;8632:3588:6:-;8718:4;8830:33;8866:32;8888:5;8895:2;8866:21;:32::i;:::-;8830:68;;8912:44;8939:2;8943:5;8950;8912:26;:44::i;:::-;:53;;8960:5;8912:53;8908:96;;8988:5;8981:12;;;;;8908:96;9137:37;;;;9090:44;;9137:50;;9090:44;9137:40;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;3123:6:16;;3112:17;;3150:6;;;;;3139:17;;;-1:-1:-1;3018:145:16;9137:50:6;9293:14;;9281:7;;;;9090:97;;-1:-1:-1;9238:40:6;;9281:27;;:11;:27::i;:::-;-1:-1:-1;;;;;;;;;;;;;691:10:16;;681:20;;-1:-1:-1;;;;;;;;;;;;;;;691:10:16;;-1:-1:-1;9488:1:6;9471:339;9495:44;9491:48;;9471:339;;;9586:50;:5;:37;;;9624:1;9586:40;;;;;;;:::i;:50::-;9581:55;-1:-1:-1;9654:30:6;9581:55;9674:9;9654:19;:30::i;:::-;9702:36;:15;9735:2;9702:32;:36::i;:::-;9757:38;:9;9778:16;9757:20;:38::i;:::-;222:1:5;212:11;9471:339:6;;;;9197:623;;;9830:22;9855:33;9871:2;9875:5;9882;9855:15;:33::i;:::-;9898:24;;:45;;;9978:32;;;;9898:27;9953:19;;;:57;9898:24;-1:-1:-1;10050:53:6;10086:2;9978:32;10097:5;10050:35;:53::i;:::-;10020:24;;:27;;;;:83;;;;10138:37;;;;10113:19;;;;;:22;;;:62;10325:24;;:27;10413:19;;:22;-1:-1:-1;10493:23:6;10045:1;10493:20;:23::i;:::-;10445:71;;10526:35;-1:-1:-1;;;;;;;;;;;;;;;;;;;10526:35:6;10588:1;10571:452;10595:31;10591:35;;10571:452;;;10697:7;;;;10664:41;;:21;;:32;:41::i;:::-;10728:60;10766:21;10728:7;:24;;;10753:1;10728:27;;;;;;;:::i;:60::-;10719:69;-1:-1:-1;10802:51:6;:26;10719:69;10802:43;:51::i;:::-;10878:7;:19;;;10898:1;10878:22;;;;;;;:::i;:::-;;;;;10868:7;;;:32;;;10914:41;;10933:21;10914:18;:41::i;:::-;11004:7;;;;10969:43;;:23;;:34;:43::i;:::-;222:1:5;212:11;10571:452:6;;;-1:-1:-1;11066:7:6;;;;11033:41;;:21;;:32;:41::i;:::-;11085:61;11149:88;11206:21;11149:7;:30;;;11180:1;11149:33;;;;;;;:::i;:88::-;11303:25;;;;:28;11085:152;;-1:-1:-1;11341:63:6;11303:28;11382:21;11341:40;:63::i;:::-;11431:1;11414:483;11438:37;11434:41;;11414:483;;;11546:7;;;;11513:41;;:21;;:32;:41::i;:::-;11578:66;11622:21;11578:7;:30;;;11609:1;11578:33;;;;;;;:::i;:66::-;11569:75;-1:-1:-1;11658:57:6;:32;11569:75;11658:49;:57::i;:::-;11740:7;:25;;;11766:1;11740:28;;;;;;;:::i;:::-;;;;;11730:7;;;:38;;;11782:41;;11801:21;11782:18;:41::i;:::-;11878:7;;;;11837:49;;:29;;:40;:49::i;:::-;222:1:5;212:11;11414:483:6;;;;11926:287;11957:2;:14;;;11989:5;12012;12035:26;12079:32;12129:23;12170:29;11926:13;:287::i;:::-;11907:306;;;;;;;;;;;8632:3588;;;;;:::o;1259:135:16:-;-1:-1:-1;;;;;;;;;;;1368:11:16;;1356:10;;1349:38;1336:51;;;-1:-1:-1;1259:135:16:o;1110:143::-;-1:-1:-1;;;;;;;;;;;1227:11:16;;1219:19;;-1:-1:-1;;;;;;;;;;;1219:19:16;:::i;:::-;1207:10;;1200:46;1187:59;;;-1:-1:-1;1110:143:16:o;969:135::-;-1:-1:-1;;;;;;;;;;;1078:11:16;;1066:10;;1059:38;1046:51;;;-1:-1:-1;969:135:16:o;6146:407::-;-1:-1:-1;;;;;;;;;;;;;;;;;6437:3:16;;:8;:20;;;;;6449:1;:3;;;6456:1;6449:8;6437:20;6433:58;;;6479:1;6473:3;;;:7;6433:58;6500:28;6520:1;6523;6526;6500:19;:28::i;4187:126::-;4275:31;4295:2;4299;4303;4275:19;:31::i;:::-;4187:126;;:::o;469:130::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;549:2:16;:10;541:19;;;;;;-1:-1:-1;577:15:16;;;;;;;;;;;;;469:130::o;2011:114::-;-1:-1:-1;;;;;;;;;;;;;;;;;2072:14:16;-1:-1:-1;2105:13:16;;;;;;;;;;;;;;;;;2011:114::o;2878:134::-;2959:14;;:::i;2225:647::-;-1:-1:-1;;;;;;;;;;;;;;;;;2324:6:16;;:16;;;;-1:-1:-1;2334:6:16;;2324:16;2320:109;;;2405:13;;;;;;;;2413:1;2405:13;;;;2416:1;2405:13;;;2398:20;;;;2320:109;-1:-1:-1;;;;;;;;;;;2473:1:16;:9;2465:40;;;;-1:-1:-1;;;2465:40:16;;19367:2:181;2465:40:16;;;19349:21:181;19406:2;19386:18;;;19379:30;-1:-1:-1;;;19425:18:181;;;19418:48;19483:18;;2465:40:16;;;;;;;;;-1:-1:-1;;;;;;;;;;;2523:1:16;:9;2515:40;;;;-1:-1:-1;;;2515:40:16;;19714:2:181;2515:40:16;;;19696:21:181;19753:2;19733:18;;;19726:30;-1:-1:-1;;;19772:18:181;;;19765:48;19830:18;;2515:40:16;19512:342:181;2515:40:16;2591:11;-1:-1:-1;;;;;;;;;;;2615:1:16;2612;2605:19;2591:33;-1:-1:-1;2642:11:16;-1:-1:-1;;;;;;;;;;;2666:1:16;2663;2656:19;2642:33;-1:-1:-1;;;;;;;;;;;;2710:1:16;2705:3;2698:21;2692:27;-1:-1:-1;;;;;;;;;;;;349:1:16;2749:3;2742:33;2736:39;;2811:3;2804;:10;2796:38;;;;-1:-1:-1;;;2796:38:16;;20061:2:181;2796:38:16;;;20043:21:181;20100:2;20080:18;;;20073:30;-1:-1:-1;;;20119:18:181;;;20112:45;20174:18;;2796:38:16;19859:339:181;2796:38:16;-1:-1:-1;;2852:13:16;;;;;;;;;;;;-1:-1:-1;2852:13:16;;;;;2225:647::o;4944:3100:6:-;5069:33;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;5204:136:6;5228:2;:13;;;5224:1;:17;5204:136;;;5279:50;5307:5;:18;;;5326:1;5307:21;;;;;;;;:::i;:::-;;;;;;;5279:10;:27;;:50;;;;:::i;:::-;222:1:5;212:11;5204:136:6;;;;5355:9;5350:143;232:1;5370;:15;5350:143;;;5423:59;5449:5;:29;;;5479:1;5449:32;;;;;;;:::i;:::-;;;;;5423:10;;:25;:59::i;:::-;222:1:5;212:11;5350:143:6;;;;5515:26;:10;:24;:26::i;:::-;5503:9;;;:38;5577:30;;;;5551:57;;:10;;:25;:57::i;:::-;5632:26;:10;:24;:26::i;:::-;5619:10;;;:39;5682:26;:10;:24;:26::i;:::-;5668:11;;;:40;5745:47;;;;5719:74;;:10;;:25;:74::i;:::-;5823:26;:10;:24;:26::i;:::-;5803:17;;;:46;5880:26;:10;:24;:26::i;:::-;5859:18;;;:47;5942:37;;;;5916:64;;:10;;:25;:64::i;:::-;6004:26;:10;:24;:26::i;:::-;5990:11;;;:40;6046:9;6041:184;6065:44;6061:48;;6041:184;;;6147:67;6173:5;:37;;;6211:1;6173:40;;;;;;;:::i;6147:67::-;222:1:5;212:11;6041:184:6;;;;6244:26;:10;:24;:26::i;:::-;6234:7;;;:36;6307:32;;;;6281:59;;:10;;:25;:59::i;:::-;6356:9;6351:172;6375:38;6371:42;;6351:172;;;6451:61;6477:5;:31;;;6509:1;6477:34;;;;;;;:::i;:::-;;;;;6451:10;;:25;:61::i;:::-;222:1:5;212:11;6351:172:6;;;;6538:9;6533:184;6557:44;6553:48;;6533:184;;;6639:67;6665:5;:37;;;6703:1;6665:40;;;;;;;:::i;6639:67::-;222:1:5;212:11;6533:184:6;;;;6731:9;6726:178;6750:41;6746:45;;6726:178;;;6829:64;6855:5;:34;;;6890:1;6855:37;;;;;;;:::i;6829:64::-;222:1:5;212:11;6726:178:6;;;;6918:9;6913:194;6937:49;6933:53;;6913:194;;;7024:72;7050:5;:42;;;7093:1;7050:45;;;;;;;:::i;7024:72::-;222:1:5;212:11;6913:194:6;;;-1:-1:-1;7133:7:6;;;;-1:-1:-1;;;;;;;;;;;691:10:16;;681:20;;7117:13:6;;;:30;;;7182:8;;;7157:34;;-1:-1:-1;7157:24:6;:34::i;:::-;7228:55;;;;7202:82;;:10;;:25;:82::i;:::-;7321:32;;;;7295:59;;:10;;:25;:59::i;:::-;7390:39;;;;7364:66;;:10;;:25;:66::i;:::-;7466:41;;;;7440:68;;:10;;:25;:68::i;:::-;7544:38;;;;7518:65;;:10;;:25;:65::i;:::-;7619:45;;;;7593:72;;:10;;:25;:72::i;:::-;7701:38;;;;7675:65;;:10;;:25;:65::i;:::-;7776:37;;;;7750:64;;:10;;:25;:64::i;:::-;7835:26;:10;:24;:26::i;:::-;7825:7;;;:36;7898:24;;;;7872:51;;:10;;:25;:51::i;:::-;7959:30;;;;7933:57;;:10;;:25;:57::i;:::-;8011:26;:10;:24;:26::i;:::-;8001:7;;;:36;-1:-1:-1;8001:5:6;4944:3100;-1:-1:-1;;4944:3100:6:o;12226:2603::-;12397:4;12413:38;12468:2;:13;;;-1:-1:-1;;;;;12454:28:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12454:28:6;;12413:69;;12497:9;12492:129;12516:21;:28;12512:1;:32;12492:129;;;12609:1;12582:21;12604:1;12582:24;;;;;;;;:::i;:::-;;;;;;;;;;:28;222:1:5;212:11;12492:129:6;;;;12678:35;12716:23;12737:1;12716:20;:23::i;:::-;12678:61;;12754:9;12749:353;12773:2;:13;;;12769:1;:17;12749:353;;;12895:74;12932:1;12935:2;:14;;;12951:2;:8;;;12961:5;:7;;;12895:36;:74::i;:::-;12885:7;;;:84;13023:18;;:21;;12983:63;;13002:43;;13042:1;;13023:21;;;;;;:::i;:::-;;;;;;;13002:20;:43::i;:::-;12983:7;;;;;:18;:63::i;:::-;13083:7;;;;13060:31;;:11;;:22;:31::i;:::-;222:1:5;212:11;12749:353:6;;;-1:-1:-1;13134:34:6;;;;13111:61;;13169:1;13134:37;;;;;13111:11;;:22;:61::i;:::-;13215:37;;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;13269:30:6;-1:-1:-1;13287:11:6;13269:17;:30::i;:::-;13345;13369:5;13345:23;:30::i;:::-;13418:18;;;;13385:30;;13418:28;;13437:1;13418:21;;:28;13385:61;;13456:74;13474:5;:55;;;13456:6;:17;;:74;;;;:::i;:::-;13682:15;13696:1;232;13682:15;:::i;:::-;13629:49;:68;13621:77;;;;;;-1:-1:-1;;;;;;;;;;;;13756:9:6;13751:352;13775:49;13771:53;;13751:352;;;13866:52;:5;:42;;;13909:1;13866:45;;;;;;;:::i;:52::-;13862:56;;13932:24;13945:5;:10;;;13932:1;:12;;:24;;;;:::i;:::-;13970:48;13983:5;:31;;;14015:1;13983:34;;;;;;;:::i;:::-;;;;;13970:1;;:12;:48::i;:::-;14045:11;;;;14032:25;;:1;;:12;:25::i;:::-;14072:20;:6;14090:1;14072:17;:20::i;:::-;222:1:5;212:11;13751:352:6;;;-1:-1:-1;14117:31:6;;;;:41;;14149:1;14117:34;;:41;14113:45;;14168:25;14181:5;:11;;;14168:1;:12;;:25;;;;:::i;:::-;14203:20;:6;14221:1;14203:17;:20::i;:::-;14233:25;:6;14251;14233:17;:25::i;:::-;14299:32;14334:45;14355:2;:14;;;14371:5;:7;;;14334:20;:45::i;:::-;14409:18;;;;14299:80;;-1:-1:-1;14389:46:6;;14428:5;14409:25;;14389:46;14445:27;:6;14463:8;14445:17;:27::i;:::-;14483:47;14533:46;14562:2;14566:5;14573;14533:28;:46::i;:::-;14483:96;-1:-1:-1;14589:42:6;:6;14483:96;14589:17;:42::i;:::-;14672:32;;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;14755:14:6;;14771:7;;;;14721:59;;14736:43;;:18;:43::i;:::-;14721:3;;:14;:59::i;:::-;14810:12;;14797:9;;:25;;;;12226:2603;-1:-1:-1;;;;;;;;;;12226:2603:6:o;1400:383:16:-;-1:-1:-1;;;;;;;;;;;;1488:64:16;;;;;;;;;;;;;;;;;;;;1527:10;;1488:64;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1488:64:16;;;;-1:-1:-1;1562:24:16;;:::i;:::-;1596:12;1697:4;1689:6;1683:4;1676:5;1670:4;1663:5;1652:50;1641:61;;1729:7;1721:16;;;;;;-1:-1:-1;1754:22:16;;;;;;;;;1765:9;;1754:22;;;1747:29;-1:-1:-1;;;;1400:383:16:o;6559:116::-;6640:28;6660:1;6663;6666;6640:19;:28::i;16720:4061:6:-;-1:-1:-1;;;;;;;;;;;;;;;;;17054:26:6;17075:1;17078;17054:20;:26::i;:::-;17045:35;;17109;17147:96;17199:5;:31;;;17231:1;17199:34;;;;;;;:::i;:::-;;;;;17147:25;;;;17173:1;17147:28;;:96;17109:134;-1:-1:-1;17253:31:6;:6;17109:134;17253:23;:31::i;:::-;17361;;;;17322:74;;17393:1;17361:34;;;;17322:25;;;;17348:1;17322:28;;:74;17313:83;-1:-1:-1;17406:31:6;:6;17313:83;17406:23;:31::i;:::-;17514;;;;17475:74;;17546:1;17514:34;;;;17475:25;;;;17501:1;17475:28;;:74;17466:83;-1:-1:-1;17559:31:6;:6;17466:83;17559:23;:31::i;:::-;17667;;;;17628:74;;17699:1;17667:34;;;;17628:25;;;;17654:1;17628:28;;:74;17619:83;-1:-1:-1;17712:31:6;:6;17619:83;17712:23;:31::i;:::-;17813;;;;17785:25;;17813:41;;17785:25;17813:34;;:41;17877:31;;;;17785:69;;-1:-1:-1;17864:48:6;;17909:1;17877:34;;17864:48;17931:25;;;;:41;;17970:1;;17957;17931:28;;:41;17922:50;-1:-1:-1;17982:31:6;:6;17922:50;17982:23;:31::i;:::-;18066:25;;;;:28;;;18042:53;;:6;;:23;:53::i;:::-;18181:37;;;;:40;18142:25;;;;:80;;18181:40;18168:1;18142:28;;:80;18133:89;-1:-1:-1;18232:31:6;:6;18133:89;18232:23;:31::i;:::-;18297:34;;;;:37;18273:62;;:6;;:23;:62::i;:::-;18346:81;18430:125;18493:2;18513:5;18536;18430:45;:125::i;:::-;18346:209;-1:-1:-1;18565:65:6;:6;18346:209;18565:23;:65::i;:::-;18674:15;18688:1;232;18674:15;:::i;:::-;18648:22;:41;18640:50;;;;;;18701:27;18731:23;18752:1;18731:20;:23::i;:::-;18701:53;;18764:30;18797:28;:5;:18;;;18816:1;18797:21;;;;;;;:::i;:28::-;18764:61;;18840:9;18835:542;18859:38;18855:42;;18835:542;;;18919:7;;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;18915:18:6;;18951:1;18956;18951:6;18947:187;;18977:17;:1;18990:3;18977:12;:17::i;:::-;18947:187;;;19046:15;;;;19033:36;;19062:5;19066:1;19062;:5;:::i;:::-;19046:22;;;;;;;:::i;:::-;;;;;19033:1;;:12;:36::i;:::-;19160:10;;;;19147:24;;:1;;:12;:24::i;:::-;19198:11;;;;19185:25;;:1;;:12;:25::i;:::-;19224:48;19237:5;:31;;;19269:1;19237:34;;;;;;;:::i;:::-;;;;;19224:1;;:12;:48::i;:::-;19287:20;:6;19305:1;19287:17;:20::i;:::-;19349:3;;18835:542;;;-1:-1:-1;19396:47:6;;;;:65;;19454:6;19396:57;:65::i;:::-;19387:74;-1:-1:-1;19471:31:6;:6;19387:74;19471:23;:31::i;:::-;19600:18;;;;:28;;19619:1;19600:21;;:28;19591:37;;19638:29;19656:5;:10;;;19638:6;:17;;:29;;;;:::i;:::-;19695:55;;;;19677:74;;:6;;:17;:74::i;:::-;19766:9;19761:318;19785:15;19799:1;232;19785:15;:::i;:::-;19781:1;:19;19761:318;;;19842:52;:5;:42;;;19885:1;19842:45;;;;;;;:::i;:52::-;19838:56;;19908:24;19921:5;:10;;;19908:1;:12;;:24;;;;:::i;:::-;19959:11;;;;19946:25;;:1;;:12;:25::i;:::-;19985:48;19998:5;:31;;;20030:1;19998:34;;;;;;;:::i;19985:48::-;20048:20;:6;20066:1;20048:17;:20::i;:::-;222:1:5;212:11;19761:318:6;;;-1:-1:-1;20097:26:6;;;;:47;;20137:6;;20124:1;20097:29;;:47;20088:56;-1:-1:-1;20154:31:6;:6;20088:56;20154:23;:31::i;:::-;20256:74;20293:1;20296:2;:14;;;20312:2;:8;;;20322:5;:7;;;20256:36;:74::i;:::-;20239:14;;;:91;;;20348:20;;:25;20340:34;;;;;;-1:-1:-1;20393:14:6;;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;20442:18:6;;;;20424:44;;20461:5;20442:25;;20424:44;20487:47;;;;:65;;20545:6;20487:57;:65::i;:::-;20478:74;-1:-1:-1;20562:31:6;:6;20478:74;20562:23;:31::i;:::-;20604:57;20664:47;20698:5;20705;20664:33;:47::i;:::-;20604:107;-1:-1:-1;20721:53:6;:6;20604:107;20721:23;:53::i;:::-;16937:3844;;;;;;16720:4061;;;;;:::o;27890:2189::-;-1:-1:-1;;;;;;;;;28369:4:6;-1:-1:-1;;;;;;;;;;3123:6:16;;3112:17;;3150:6;;;;3139:17;;28369:4:6;28578:58;28628:5;:7;;;28578:32;:49;;:58;;;;:::i;:::-;28646:70;:19;28683:32;28646:36;:70::i;:::-;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;28864:7:6;;;;28836:36;;-1:-1:-1;;28836:27:6;:36::i;:::-;28882:52;:16;28910:23;28882:27;:52::i;:::-;28944:31;28978:46;29007:16;28978:18;-1:-1:-1;;;;;;;;;;;;;;;;;1985:13:16;;;;;;;;1993:1;1985:13;;1996:1;1985:13;;;;;1915:90;28978:18:6;:28;;:46::i;:::-;28944:80;-1:-1:-1;29034:40:6;:19;28944:80;29034:36;:40::i;:::-;29146:7;;;;29111:24;;;;:43;;:34;:43::i;:::-;29106:48;;29164:25;29192:20;:5;:13;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;:1;605:103;29192:20:6;29164:48;;29222:21;29235:5;:7;;;29222:1;:12;;:21;;;;:::i;:::-;29287:30;;;;29253:31;;29287:43;;29328:1;29287:40;:43::i;:::-;29253:77;-1:-1:-1;29340:23:6;:2;29253:77;29340:19;:23::i;:::-;29373:40;:19;29410:2;29373:36;:40::i;:::-;29439;29482:49;29523:5;:7;;;29482:5;:30;;;:40;;:49;;;;:::i;:::-;29439:92;;29541:54;29570:5;:24;;;29541:11;:28;;:54;;;;:::i;:::-;29605:20;:11;:18;:20::i;:::-;29830:14;;;29895;;;29790:37;29955:18;:16;:18::i;:::-;29919:54;;29991:81;30018:19;30039:8;30049:11;30062:9;29991:26;:81::i;:::-;29984:88;;;;;;;;;;;27890:2189;;;;;;;;;:::o;6681:387:16:-;6816:23;;:::i;:::-;6860:3;;6849:14;;:8;6884:3;;;6849:5;6879:1;6873:8;;;:14;6908:7;;6897:5;6903:1;6897:8;;;:18;6925:12;7021:4;7015;7009;7002:5;6999:1;6992:5;6981:45;6970:56;;7053:7;7045:16;;;;;;6806:262;;6681:387;;;:::o;4319:821::-;4465:4;;:9;:22;;;;-1:-1:-1;4478:4:16;;;;:9;4465:22;4461:673;;;4556:4;;4547:13;;4583:4;;;;;4574:6;;:13;;;;-1:-1:-1;4319:821:16:o;4461:673::-;4628:4;;:9;:22;;;;-1:-1:-1;4641:4:16;;;;:9;4628:22;4624:510;;;4734:4;;4725:13;;4761:4;;;;;4752:6;;:13;-1:-1:-1;4319:821:16:o;4624:510::-;4816:23;;:::i;:::-;4865:4;;4854:15;;:8;4894:4;;;;4883:8;;;:15;4923:4;;4912:8;;;:15;4952:4;;;4854:15;4947:1;4941:8;;;;:15;4971:12;5075:4;5069;5063;5056:5;5053:1;5046:5;5035:45;5024:56;;5115:7;5107:16;;;;;727:316:18;838:12;;922;;;;;885:57;;816:19;885:57;;;20414:56:181;;;;20486:11;;;20479:27;;;20522:12;;;20515:28;20559:12;;;20552:28;;;20596:13;;885:57:18;;;;;;-1:-1:-1;;885:57:18;;;;;;875:68;;885:57;875:68;;;;860:83;;1015:12;;;;978:57;;-1:-1:-1;;;978:57:18;;;20414:56:181;;;;20486:11;;;20479:27;;;20522:12;;;20515:28;20559:12;;;20552:28;;;20596:13;;978:57:18;;;-1:-1:-1;;978:57:18;;;;;;;;;968:68;;978:57;968:68;;;;953:12;;:83;;;;-1:-1:-1;;727:316:18:o;1200:175::-;1304:27;1321:4;1327:1;:3;;;1304:16;:27::i;:::-;1341;1358:4;1364:1;:3;;;1341:16;:27::i;1381:342::-;-1:-1:-1;;;;;;;;;;;;1554:12:18;;1568;;;;;1582:22;;;;;1522:83;;-1:-1:-1;;;1522:83:18;;;20868:38:181;;;;20922:11;;;20915:27;;;;20958:12;;;20951:28;20843:3;21013:16;;;;-1:-1:-1;;;;;;21009:25:181;20995:12;;;20988:47;1496:13:18;;21051:12:181;;1522:83:18;;;;;;;;;;;;1512:94;;;;;;1496:110;;1642:1;1616:4;:22;;:27;;;;;;;:::i;:::-;;;;;-1:-1:-1;1665:51:18;;;;;;;;;-1:-1:-1;;;;;1690:24:18;;;;1665:51;;;1381:342;-1:-1:-1;;1381:342:18:o;1049:145::-;1152:35;1169:4;1175:5;:11;;;1152:16;:35::i;3812:872:6:-;-1:-1:-1;;;;;;;;;;;;4128:11:6;4117:8;:22;4109:31;;;;;;4150:27;4180:23;4201:1;4180:20;:23::i;:::-;4150:53;-1:-1:-1;4213:35:6;4251:19;:5;4261:8;4251:9;:19::i;:::-;4213:57;-1:-1:-1;4286:19:6;:2;4293:11;4286:6;:19::i;:::-;4280:25;-1:-1:-1;4315:19:6;4280:25;4330:3;4315:14;:19::i;:::-;4352:9;;;:14;4344:23;;;;;;4431:27;:3;4446:11;4431:14;:27::i;:::-;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;4531:27:6;-1:-1:-1;4546:11:6;4531:14;:27::i;:::-;4568:49;4583:33;4604:11;4583:20;:33::i;4568:49::-;4634:13;:3;:11;:13::i;:::-;4628:19;-1:-1:-1;4658:19:6;:3;4628:19;4658:14;:19::i;:::-;4046:638;;;3812:872;;;;;;:::o;3264:542::-;-1:-1:-1;;;;;;;;;;;;3433:27:6;3463:23;3484:1;3463:20;:23::i;:::-;3433:53;;3497:31;3531:33;3552:11;3531:20;:33::i;:::-;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;3497:67:6;;-1:-1:-1;3623:19:6;-1:-1:-1;3638:3:6;3623:14;:19::i;:::-;3652:23;:3;3667:7;3652:14;:23::i;:::-;3692:13;:3;:11;:13::i;:::-;3686:19;-1:-1:-1;3722:19:6;:2;3729:11;3722:6;:19::i;:::-;3716:25;-1:-1:-1;3751:19:6;3716:25;3766:3;3751:14;:19::i;:::-;3780;:3;3795;3780:14;:19::i;:::-;3423:383;;;3264:542;;;;:::o;14835:1879::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;15086:27:6;15116:23;15137:1;15116:20;:23::i;:::-;15086:53;;15171:24;:5;:17;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;:1;605:103;15171:24:6;15149:19;;;:46;;;15205:35;;15236:3;15205:30;:35::i;:::-;15269:19;;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;15250:16:6;;;:45;;;15333:18;;;;15305:47;;15250:45;15305:27;:47::i;:::-;15408:38;;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;15404:49:6;;15463:31;15476:5;:17;;;15463:1;:12;;:31;;;;:::i;:::-;15517:16;;;;15504:30;;:1;;:12;:30::i;:::-;15557:45;;;;15544:59;;:1;;:12;:59::i;:::-;15626:18;;;;15613:35;;15645:1;15626:21;;15613:35;15702:34;15739:32;15769:1;15752:2;:14;;;:18;;;;:::i;:::-;15739:8;;;;;:12;:32::i;:::-;15702:69;;15808:14;:5;:7;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;:1;605:103;15808:14:6;15781:24;;;:41;;;15832:47;;15868:10;15832:35;:47::i;:::-;15902:24;;;;15889:38;;:1;;:12;:38::i;:::-;15937:20;:6;15955:1;15937:17;:20::i;:::-;16017:74;16054:1;16057:2;:14;;;16073:2;:8;;;16083:5;:7;;;16017:36;:74::i;:::-;16000:14;;;:91;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;16149:18:6;;;;:25;;;16101;;-1:-1:-1;16136:39:6;;16101:25;;16136:12;:39::i;:::-;16185:20;:6;16203:1;16185:17;:20::i;:::-;16269:42;16314:40;16352:1;16335:2;:14;;;:18;;;;:::i;:::-;16314:16;;;;;:20;:40::i;:::-;16269:85;;16391:149;16458:1;16441:2;:14;;;:18;;;;:::i;:::-;16473:14;;16501:8;;;;16523:7;;;;16391:36;:149::i;:::-;16364:24;;;:176;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;16550:35:6;-1:-1:-1;16595:32:6;16550:35;16608:18;16595:12;:32::i;:::-;16650:18;;;;:25;;;16637:39;;:1;;:12;:39::i;:::-;16687:20;:6;16705:1;16687:17;:20::i;:::-;15040:1674;;;;14835:1879;;;;;:::o;4690:248::-;-1:-1:-1;;;;;;;;;;;;4863:19:6;:2;4870:11;4863:6;:19::i;:::-;4857:25;;4892:39;4907:23;4928:1;4907:20;:23::i;:::-;4892:3;;:14;:39::i;5146:126:16:-;5234:31;5254:2;5258;5262;5234:19;:31::i;22025:2707:6:-;-1:-1:-1;;;;;;;;;;;;;;;;;22221:28:6;22252:23;22273:1;22252:20;:23::i;:::-;22221:54;;22286:25;-1:-1:-1;;;;;;;;;;;;;;22286:25:6;-1:-1:-1;;;;;;;;;;;;;;22456:45:6;;;;-1:-1:-1;;;;;;;;;;;691:10:16;;681:20;;22536:18:6;;;;22518:40;;22555:1;22536:21;;22518:40;22586:24;;;;22568:43;;:6;;:17;:43::i;:::-;22660:30;;;;22622:35;;22660:48;;22701:6;22660:40;:48::i;:::-;22622:86;-1:-1:-1;22718:31:6;:6;22622:86;22718:23;:31::i;:::-;22993:38;;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;22984:54:6;;23048:36;23066:5;:17;;;23048:6;:17;;:36;;;;:::i;:::-;23112:32;;;;23094:51;;:6;;:17;:51::i;:::-;23173:16;;;;23155:35;;:6;;:17;:35::i;:::-;-1:-1:-1;;;;;;;;;;;;23277:31:6;23311:23;23332:1;23311:20;:23::i;:::-;23277:57;;23344:28;-1:-1:-1;;;;;;;;;;;;;;23344:28:6;23387:9;23382:264;23406:15;23420:1;232;23406:15;:::i;:::-;23402:1;:19;23382:264;;;23466:41;:5;:31;;;23498:1;23466:34;;;;;;;:::i;:41::-;23459:48;-1:-1:-1;23521:24:6;23459:48;23537:7;23521:15;:24::i;:::-;23559:32;:15;23586:4;23559:26;:32::i;:::-;23625:9;;;;23606:29;;:7;;:18;:29::i;:::-;222:1:5;212:11;23382:264:6;;;-1:-1:-1;23689:41:6;;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;23685:52:6;-1:-1:-1;23747:21:6;23685:52;23760:7;23747:12;:21::i;:::-;23778:29;:15;23805:1;23778:26;:29::i;:::-;23845:39;;;;23818:67;;:15;;:26;:67::i;:::-;23922:18;;;;23895:46;;:15;;:26;:46::i;:::-;23991:34;:6;24009:15;23991:17;:34::i;:::-;24053:19;;;;24035:38;;:6;;:17;:38::i;:::-;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;24083:15:6;-1:-1:-1;24108:20:6;24083:15;24121:6;24108:12;:20::i;:::-;24176:18;;;;24147:1;;-1:-1:-1;24158:40:6;;24195:1;24176:21;;24158:40;24268:24;;;;24250:43;;:6;;:17;:43::i;:::-;24345:14;;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;24389:18:6;;;;24341:25;;-1:-1:-1;24376:39:6;;24408:5;24389:25;;;;;24376:1;;:12;:39::i;:::-;24425:20;:6;24443:1;24425:17;:20::i;:::-;24499:24;;;;-1:-1:-1;;;;;;;;;;;;691:10:16;;681:20;;24553:18:6;;;;24495:35;;-1:-1:-1;24540:39:6;;24572:5;24553:25;;24540:39;24589:20;:6;24607:1;24589:17;:20::i;:::-;24629:37;;;;:55;;24677:6;24629:47;:55::i;:::-;24620:64;-1:-1:-1;24694:31:6;:6;24620:64;24694:23;:31::i;:::-;22211:2521;;;;;;;22025:2707;;;;:::o;3777:235:16:-;3894:4;:6;;;3904:1;3894:11;3890:82;;3929:6;;:11;3921:20;;;;;;3777:235;:::o;3890:82::-;3999:6;;;;3991:14;;-1:-1:-1;;;;;;;;;;;3991:14:16;:::i;:::-;3982:6;;;;:23;3777:235::o;3169:602::-;3206:14;;:::i;:::-;-1:-1:-1;3319:445:16;;;;;;;;3366:66;3319:445;;;;;;3454:66;3319:445;;;;;;;;;;;;;;3578:66;3319:445;;3666:66;3319:445;;;;;;;;;;;;;;;3169:602::o;8015:380::-;8212:16;;;8226:1;8212:16;;;;;;;;;8174:4;;;;8212:16;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;8212:16:16;;;;;;;;;;;;-1:-1:-1;;8260:16:16;;;8274:1;8260:16;;;;;;;;;8190:38;;-1:-1:-1;8238:19:16;;8260:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8238:38;;8294:2;8286;8289:1;8286:5;;;;;;;;:::i;:::-;;;;;;:10;;;;8314:2;8306;8309:1;8306:5;;;;;;;;:::i;:::-;;;;;;:10;;;;8334:2;8326;8329:1;8326:5;;;;;;;;:::i;:::-;;;;;;:10;;;;8354:2;8346;8349:1;8346:5;;;;;;;;:::i;:::-;;;;;;:10;;;;8373:15;8381:2;8385;8373:7;:15::i;824:139::-;-1:-1:-1;;;;;;;;;;;;907:8:16;;;:13;899:22;;;;;;938:18;942:2;946:9;954:1;-1:-1:-1;;;;;;;;;;;946:9:16;:::i;:::-;938:3;:18::i;5278:862::-;5424:4;;:9;:22;;;;-1:-1:-1;5437:4:16;;;;:9;5424:22;5420:714;;;5522:4;;5513:13;;5549:4;;;;;5540:6;;:13;;;;-1:-1:-1;5278:862:16:o;5420:714::-;5594:4;;:9;:22;;;;-1:-1:-1;5607:4:16;;;;:9;5594:22;5590:544;;;5710:4;;5701:13;;5745:4;;;;5737:12;;-1:-1:-1;;;;;;;;;;;5737:12:16;:::i;:::-;5728:6;;;;:21;-1:-1:-1;;5278:862:16:o;5590:544::-;5800:23;;:::i;:::-;5849:4;;5838:15;;:8;5878:4;;;;5867:8;;;:15;5907:4;;5896:8;;;:15;5944:4;;;5936:12;;-1:-1:-1;;;;;;;;;;;5936:12:16;:::i;:::-;5925:5;5931:1;5925:8;;7074:873;7156:4;7193:2;:9;7180:2;:9;:22;7172:31;;;;;;7232:9;;7213:16;7271:12;7232:9;7282:1;7271:12;:::i;:::-;7251:32;;7293:22;7332:9;-1:-1:-1;;;;;7318:24:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7318:24:16;;7293:49;;7357:9;7352:358;7376:8;7372:1;:12;7352:358;;;7421:2;7424:1;7421:5;;;;;;;;:::i;:::-;;;;;;;:7;;;7402:5;7408:1;7412;7408:5;;;;:::i;:::-;:9;;7416:1;7408:9;:::i;:::-;7402:16;;;;;;;;:::i;:::-;;;;;;:26;;;;;7461:2;7464:1;7461:5;;;;;;;;:::i;:::-;;;;;;;:7;;;7442:5;7448:1;7452;7448:5;;;;:::i;:::-;:9;;7456:1;7448:9;:::i;:::-;7442:16;;;;;;;;:::i;:::-;;;;;;:26;;;;;7501:2;7504:1;7501:5;;;;;;;;:::i;:::-;;;;;;;;;;;:7;:10;7482:5;7488;:1;7492;7488:5;:::i;:::-;:9;;7496:1;7488:9;:::i;:::-;7482:16;;;;;;;;:::i;:::-;;;;;;:29;;;;;7544:2;7547:1;7544:5;;;;;;;;:::i;:::-;;;;;;;;;;;;:7;:10;;7525:5;7531;:1;7535;7531:5;:::i;:::-;:9;;7539:1;7531:9;:::i;:::-;7525:16;;;;;;;;:::i;:::-;;;;;;:29;;;;;7587:2;7590:1;7587:5;;;;;;;;:::i;:::-;;;;;;;:7;;;7595:1;7587:10;;;;;;;:::i;:::-;;;;;7568:5;7574;:1;7578;7574:5;:::i;:::-;:9;;7582:1;7574:9;:::i;:::-;7568:16;;;;;;;;:::i;:::-;;;;;;:29;;;;;7630:2;7633:1;7630:5;;;;;;;;:::i;:::-;;;;;;;:7;;;7638:1;7630:10;;;;;;;:::i;:::-;;;;;7611:5;7617;:1;7621;7617:5;:::i;:::-;:9;;7625:1;7617:9;:::i;:::-;7611:16;;;;;;;;:::i;:::-;;;;;;;;;;:29;7682:3;;7352:358;;;;7719:21;;:::i;:::-;7750:12;7872:4;7867:3;7860:4;7849:9;7845:20;7838:4;7831:5;7827:16;7824:1;7817:5;7806:71;7795:82;;7904:7;7896:16;;;;;;-1:-1:-1;7929:6:16;:11;;;;-1:-1:-1;;;;;;7074:873:16:o;-1:-1:-1:-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;14:367:181;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:181;;-1:-1:-1;;;;;214:30:181;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:773::-;508:6;516;524;532;585:2;573:9;564:7;560:23;556:32;553:52;;;601:1;598;591:12;553:52;641:9;628:23;-1:-1:-1;;;;;711:2:181;703:6;700:14;697:34;;;727:1;724;717:12;697:34;766:70;828:7;819:6;808:9;804:22;766:70;:::i;:::-;855:8;;-1:-1:-1;740:96:181;-1:-1:-1;943:2:181;928:18;;915:32;;-1:-1:-1;959:16:181;;;956:36;;;988:1;985;978:12;956:36;;1027:72;1091:7;1080:8;1069:9;1065:24;1027:72;:::i;:::-;386:773;;;;-1:-1:-1;1118:8:181;-1:-1:-1;;;;386:773:181:o;1356:127::-;1417:10;1412:3;1408:20;1405:1;1398:31;1448:4;1445:1;1438:15;1472:4;1469:1;1462:15;1488:257;1560:4;1554:11;;;1592:17;;-1:-1:-1;;;;;1624:34:181;;1660:22;;;1621:62;1618:88;;;1686:18;;:::i;:::-;1722:4;1715:24;1488:257;:::o;1750:255::-;1822:2;1816:9;1864:6;1852:19;;-1:-1:-1;;;;;1886:34:181;;1922:22;;;1883:62;1880:88;;;1948:18;;:::i;2010:255::-;2082:2;2076:9;2124:6;2112:19;;-1:-1:-1;;;;;2146:34:181;;2182:22;;;2143:62;2140:88;;;2208:18;;:::i;2270:255::-;2342:2;2336:9;2384:6;2372:19;;-1:-1:-1;;;;;2406:34:181;;2442:22;;;2403:62;2400:88;;;2468:18;;:::i;2786:247::-;2853:2;2847:9;2895:3;2883:16;;-1:-1:-1;;;;;2914:34:181;;2950:22;;;2911:62;2908:88;;;2976:18;;:::i;3038:401::-;3087:5;3135:4;3123:9;3118:3;3114:19;3110:30;3107:50;;;3153:1;3150;3143:12;3107:50;3186:2;3180:9;3228:4;3220:6;3216:17;3299:6;3287:10;3284:22;-1:-1:-1;;;;;3251:10:181;3248:34;3245:62;3242:88;;;3310:18;;:::i;:::-;3346:2;3339:22;3409:23;;3394:39;;-1:-1:-1;3379:6:181;3038:401;-1:-1:-1;3038:401:181:o;3444:282::-;3498:5;3546:4;3534:9;3529:3;3525:19;3521:30;3518:50;;;3564:1;3561;3554:12;3518:50;3586:22;;:::i;:::-;3577:31;;3644:9;3631:23;3624:5;3617:38;3715:2;3704:9;3700:18;3687:32;3682:2;3675:5;3671:14;3664:56;3444:282;;;;:::o;3731:508::-;3788:5;3841:3;3834:4;3826:6;3822:17;3818:27;3808:55;;3859:1;3856;3849:12;3808:55;3883:22;;:::i;:::-;3927:3;3965;3957:6;3953:16;3992:3;3984:6;3981:15;3978:35;;;4009:1;4006;3999:12;3978:35;4033:6;4048:162;4064:6;4059:3;4056:15;4048:162;;;4130:35;4161:3;4156;4130:35;:::i;:::-;4118:48;;4195:4;4186:14;;;;4090:2;4081:12;4048:162;;;-1:-1:-1;4228:5:181;;3731:508;-1:-1:-1;;;;;3731:508:181:o;4244:696::-;4305:5;4358:3;4351:4;4343:6;4339:17;4335:27;4325:55;;4376:1;4373;4366:12;4325:55;4399:2;4430;4424:9;4472:3;4464:6;4460:16;4542:6;4530:10;4527:22;-1:-1:-1;;;;;4494:10:181;4491:34;4488:62;4485:88;;;4553:18;;:::i;:::-;4582:22;;4624:6;4665:3;4653:16;;4681:15;;;4678:35;;;4709:1;4706;4699:12;4678:35;4733:6;4748:162;4764:6;4759:3;4756:15;4748:162;;;4830:35;4861:3;4856;4830:35;:::i;:::-;4818:48;;4895:4;4886:14;;;;4781:12;;4748:162;;;-1:-1:-1;4928:6:181;;4244:696;-1:-1:-1;;;;;;4244:696:181:o;4945:527::-;5024:5;5077:3;5070:4;5062:6;5058:17;5054:27;5044:55;;5095:1;5092;5085:12;5044:55;5119:17;;:::i;:::-;5158:3;5196;5188:6;5184:16;5223:3;5215:6;5212:15;5209:35;;;5240:1;5237;5230:12;5209:35;5264:6;5279:164;5295:6;5290:3;5287:15;5279:164;;;5363:35;5394:3;5389;5363:35;:::i;:::-;5351:48;;5428:4;5419:14;;;;5321:4;5312:14;5279:164;;5477:665;5533:5;5586:3;5579:4;5571:6;5567:17;5563:27;5553:55;;5604:1;5601;5594:12;5553:55;5637:2;5631:9;5679:2;5671:6;5667:15;5748:6;5736:10;5733:22;-1:-1:-1;;;;;5700:10:181;5697:34;5694:62;5691:88;;;5759:18;;:::i;:::-;5795:2;5788:22;5830:6;5871:2;5859:15;;5886;;;5883:35;;;5914:1;5911;5904:12;5883:35;5938:6;5953:159;5969:6;5964:3;5961:15;5953:159;;;6037:30;6063:3;6058;6037:30;:::i;:::-;6025:43;;6097:4;6088:14;;;;5986;5953:159;;;-1:-1:-1;6130:6:181;;5477:665;-1:-1:-1;;;;;5477:665:181:o;6147:484::-;6197:5;6250:3;6243:4;6235:6;6231:17;6227:27;6217:55;;6268:1;6265;6258:12;6217:55;6292:22;;:::i;:::-;6336:3;6374:2;6366:6;6362:15;6400:3;6392:6;6389:15;6386:35;;;6417:1;6414;6407:12;6386:35;6441:6;6456:146;6472:6;6467:3;6464:15;6456:146;;;6540:17;;6528:30;;6587:4;6578:14;;;;6489;6456:146;;6636:847;6693:5;6746:3;6739:4;6731:6;6727:17;6723:27;6713:55;;6764:1;6761;6754:12;6713:55;6788:22;;:::i;:::-;6832:3;6870;6862:6;6858:16;6897:3;6889:6;6886:15;6883:35;;;6914:1;6911;6904:12;6883:35;6938:6;6953:501;6969:6;6964:3;6961:15;6953:501;;;7047:4;7041:3;7036;7032:13;7028:24;7025:114;;;7093:1;7122:2;7118;7111:14;7025:114;7165:22;;:::i;:::-;7214:34;7244:3;7239;7214:34;:::i;:::-;7207:5;7200:49;7272:43;7311:3;7306:2;7301:3;7297:12;7272:43;:::i;:::-;7338:4;7362:14;;;7355:26;;;;7394:18;;;7432:12;;;;;6995:4;6986:14;6953:501;;7488:902;7542:5;7595:3;7588:4;7580:6;7576:17;7572:27;7562:55;;7613:1;7610;7603:12;7562:55;7649:6;7636:20;7675:4;-1:-1:-1;;;;;7735:2:181;7731;7728:10;7725:36;;;7741:18;;:::i;:::-;7787:2;7784:1;7780:10;7819:2;7813:9;7882:2;7878:7;7873:2;7869;7865:11;7861:25;7853:6;7849:38;7937:6;7925:10;7922:22;7917:2;7905:10;7902:18;7899:46;7896:72;;;7948:18;;:::i;:::-;7984:2;7977:22;8034:18;;;8110:15;;;8106:24;;;8068:15;;;;-1:-1:-1;8142:15:181;;;8139:35;;;8170:1;8167;8160:12;8139:35;8206:2;8198:6;8194:15;8183:26;;8218:142;8234:6;8229:3;8226:15;8218:142;;;8300:17;;8288:30;;8338:12;;;;8251;;;;8218:142;;8395:495;8447:5;8500:3;8493:4;8485:6;8481:17;8477:27;8467:55;;8518:1;8515;8508:12;8467:55;8542:17;;:::i;:::-;8581:3;8619;8611:6;8607:16;8646:3;8638:6;8635:15;8632:35;;;8663:1;8660;8653:12;8632:35;8687:6;8702:159;8718:6;8713:3;8710:15;8702:159;;;8786:30;8812:3;8807;8786:30;:::i;:::-;8774:43;;8846:4;8837:14;;;;8735;8702:159;;8895:700;8969:5;9022:3;9015:4;9007:6;9003:17;8999:27;8989:55;;9040:1;9037;9030:12;8989:55;9073:2;9067:9;9095:2;9136;9128:6;9124:15;9205:6;9193:10;9190:22;-1:-1:-1;;;;;9157:10:181;9154:34;9151:62;9148:88;;;9216:18;;:::i;:::-;9252:2;9245:22;9287:6;9316:15;;;9343;;;9340:35;;;9371:1;9368;9361:12;9340:35;9395:6;9410:155;9426:6;9421:3;9418:15;9410:155;;;9492:30;9518:3;9513;9492:30;:::i;:::-;9480:43;;9543:12;;;;9443;;9410:155;;;-1:-1:-1;9583:6:181;;8895:700;-1:-1:-1;;;;;;8895:700:181:o;9600:2222::-;9652:5;9700:6;9688:9;9683:3;9679:19;9675:32;9672:52;;;9720:1;9717;9710:12;9672:52;9742:22;;:::i;:::-;9733:31;;9800:9;9787:23;-1:-1:-1;;;;;9825:6:181;9822:30;9819:50;;;9865:1;9862;9855:12;9819:50;9892:57;9945:3;9936:6;9925:9;9921:22;9892:57;:::i;:::-;9885:5;9878:72;;9982:78;10056:3;10051:2;10040:9;10036:18;9982:78;:::i;:::-;9977:2;9970:5;9966:14;9959:102;10080:3;10117:50;10163:3;10158:2;10147:9;10143:18;10117:50;:::i;:::-;10110:4;10103:5;10099:16;10092:76;10187:3;10224:78;10298:3;10293:2;10282:9;10278:18;10224:78;:::i;:::-;10217:4;10210:5;10206:16;10199:104;10322:3;10359:51;10406:3;10401:2;10390:9;10386:18;10359:51;:::i;:::-;10352:4;10345:5;10341:16;10334:77;10445:74;10515:3;10509;10498:9;10494:19;10445:74;:::i;:::-;10438:4;10431:5;10427:16;10420:100;10554:74;10624:3;10618;10607:9;10603:19;10554:74;:::i;:::-;10547:4;10540:5;10536:16;10529:100;10663:56;10715:3;10709;10698:9;10694:19;10663:56;:::i;:::-;10656:4;10649:5;10645:16;10638:82;10756:46;10798:3;10792;10781:9;10777:19;10756:46;:::i;:::-;10747:6;10740:5;10736:18;10729:74;10835:46;10877:3;10871;10860:9;10856:19;10835:46;:::i;:::-;10830:2;10823:5;10819:14;10812:70;10918:46;10960:3;10954;10943:9;10939:19;10918:46;:::i;:::-;10909:6;10902:5;10898:18;10891:74;10997:51;11044:3;11038;11027:9;11023:19;10997:51;:::i;:::-;10992:2;10985:5;10981:14;10974:75;11085:52;11133:3;11126:4;11115:9;11111:20;11085:52;:::i;:::-;11076:6;11069:5;11065:18;11058:80;11174:47;11217:3;11210:4;11199:9;11195:20;11174:47;:::i;:::-;11165:6;11158:5;11154:18;11147:75;11258:47;11301:3;11294:4;11283:9;11279:20;11258:47;:::i;:::-;11249:6;11242:5;11238:18;11231:75;11342:47;11385:3;11378:4;11367:9;11363:20;11342:47;:::i;:::-;11333:6;11326:5;11322:18;11315:75;11426:47;11469:3;11462:4;11451:9;11447:20;11426:47;:::i;:::-;11417:6;11410:5;11406:18;11399:75;11510:47;11553:3;11546:4;11535:9;11531:20;11510:47;:::i;:::-;11501:6;11494:5;11490:18;11483:75;11594:47;11637:3;11630:4;11619:9;11615:20;11594:47;:::i;:::-;11585:6;11578:5;11574:18;11567:75;11674:52;11722:3;11715:4;11704:9;11700:20;11674:52;:::i;:::-;11669:2;11662:5;11658:14;11651:76;;;;11763:52;11811:3;11804:4;11793:9;11789:20;11763:52;:::i;:::-;11754:6;11747:5;11743:18;11736:80;9600:2222;;;;:::o;11827:709::-;11905:5;11958:3;11951:4;11943:6;11939:17;11935:27;11925:55;;11976:1;11973;11966:12;11925:55;12009:2;12003:9;12031:3;12073:2;12065:6;12061:15;12142:6;12130:10;12127:22;-1:-1:-1;;;;;12094:10:181;12091:34;12088:62;12085:88;;;12153:18;;:::i;:::-;12189:2;12182:22;12253:15;;12224:6;12280:15;;;12277:35;;;12308:1;12305;12298:12;12277:35;12332:6;12347:159;12363:6;12358:3;12355:15;12347:159;;;12431:30;12457:3;12452;12431:30;:::i;:::-;12419:43;;12491:4;12482:14;;;;12380;12347:159;;12541:1857;12608:5;12656:6;12644:9;12639:3;12635:19;12631:32;12628:52;;;12676:1;12673;12666:12;12628:52;12698:22;;:::i;:::-;12689:31;;12743:36;12775:3;12764:9;12743:36;:::i;:::-;12736:5;12729:51;12812:45;12853:3;12848:2;12837:9;12833:18;12812:45;:::i;:::-;12807:2;12800:5;12796:14;12789:69;12890:45;12931:3;12926:2;12915:9;12911:18;12890:45;:::i;:::-;12885:2;12878:5;12874:14;12867:69;12968:45;13009:3;13004:2;12993:9;12989:18;12968:45;:::i;:::-;12963:2;12956:5;12952:14;12945:69;13047:78;13121:3;13115;13104:9;13100:19;13047:78;:::i;:::-;13041:3;13034:5;13030:15;13023:103;13145:3;13182:45;13223:3;13218:2;13207:9;13203:18;13182:45;:::i;:::-;13175:4;13168:5;13164:16;13157:71;13247:3;13284:45;13325:3;13320:2;13309:9;13305:18;13284:45;:::i;:::-;13277:4;13270:5;13266:16;13259:71;13349:3;13386:45;13427:3;13422:2;13411:9;13407:18;13386:45;:::i;:::-;13379:4;13372:5;13368:16;13361:71;13451:3;13490:45;13531:3;13526:2;13515:9;13511:18;13490:45;:::i;:::-;13481:6;13474:5;13470:18;13463:73;13555:3;13594:45;13635:3;13630:2;13619:9;13615:18;13594:45;:::i;:::-;13585:6;13578:5;13574:18;13567:73;13659:3;13698:45;13739:3;13734:2;13723:9;13719:18;13698:45;:::i;:::-;13689:6;13682:5;13678:18;13671:73;13780:49;13825:3;13816:6;13805:9;13801:22;13780:49;:::i;:::-;13771:6;13764:5;13760:18;13753:77;13866:46;13908:3;13902;13891:9;13887:19;13866:46;:::i;:::-;13857:6;13850:5;13846:18;13839:74;13945:46;13987:3;13981;13970:9;13966:19;13945:46;:::i;:::-;13940:2;13933:5;13929:14;13922:70;14024:46;14066:3;14060;14049:9;14045:19;14024:46;:::i;:::-;14019:2;14012:5;14008:14;14001:70;14103:46;14145:3;14139;14128:9;14124:19;14103:46;:::i;:::-;14098:2;14091:5;14087:14;14080:70;14182:46;14224:3;14218;14207:9;14203:19;14182:46;:::i;:::-;14177:2;14170:5;14166:14;14159:70;14261:46;14303:3;14297;14286:9;14282:19;14261:46;:::i;:::-;14256:2;14249:5;14245:14;14238:70;14340:51;14387:3;14381;14370:9;14366:19;14340:51;:::i;:::-;14335:2;14328:5;14324:14;14317:75;;;;;;;12541:1857;;;;:::o;14403:1698::-;14571:6;14579;14587;14631:9;14622:7;14618:23;14661:4;14657:2;14653:13;14650:33;;;14679:1;14676;14669:12;14650:33;14702:6;14728:2;14724;14720:11;14717:31;;;14744:1;14741;14734:12;14717:31;14770:22;;:::i;:::-;14757:35;;14828:9;14815:23;14808:5;14801:38;14899:2;14888:9;14884:18;14871:32;14866:2;14859:5;14855:14;14848:56;14936:49;14977:7;14972:2;14961:9;14957:18;14936:49;:::i;:::-;14931:2;14924:5;14920:14;14913:73;15018:60;15070:7;15065:2;15054:9;15050:18;15018:60;:::i;:::-;15013:2;15006:5;15002:14;14995:84;15113:65;15170:7;15164:3;15153:9;15149:19;15113:65;:::i;:::-;15106:4;15099:5;15095:16;15088:91;15213:83;15288:7;15282:3;15271:9;15267:19;15213:83;:::i;:::-;15206:4;15199:5;15195:16;15188:109;15331:55;15378:7;15372:3;15361:9;15357:19;15331:55;:::i;:::-;15324:4;15317:5;15313:16;15306:81;15420:83;15495:7;15489:3;15478:9;15474:19;15420:83;:::i;:::-;15414:3;15407:5;15403:15;15396:108;15540:56;15588:7;15581:4;15570:9;15566:20;15540:56;:::i;:::-;15531:6;15524:5;15520:18;15513:84;15633:61;15686:7;15679:4;15668:9;15664:20;15633:61;:::i;:::-;15624:6;15617:5;15613:18;15606:89;15731:62;15785:7;15778:4;15767:9;15763:20;15731:62;:::i;:::-;15722:6;15711:18;;15704:90;15715:5;;-1:-1:-1;15854:18:181;;15841:32;-1:-1:-1;;;;;15885:30:181;;15882:50;;;15928:1;15925;15918:12;15882:50;15951:56;15999:7;15990:6;15979:9;15975:22;15951:56;:::i;:::-;15941:66;;;16026:69;16087:7;16080:4;16069:9;16065:20;16026:69;:::i;:::-;16016:79;;14403:1698;;;;;:::o;16259:246::-;16179:12;;16167:25;;16241:4;16230:16;;;16224:23;16208:14;;;16201:47;16443:2;16428:18;;16455:44;16106:148;16510:329;16610:5;16633:1;16643:190;16657:4;16654:1;16651:11;16643:190;;;16704:45;16745:3;16736:6;16730:13;16179:12;;16167:25;;16241:4;16230:16;;;16224:23;16208:14;;16201:47;16106:148;16704:45;16778:4;16769:14;;;;;16818:4;16806:17;;;;;16677:1;16670:9;16643:190;;;16647:3;;16510:329;;:::o;16844:335::-;16939:5;16962:1;16972:201;16986:4;16983:1;16980:11;16972:201;;;17051:13;;17045:20;17033:33;;17089:4;17113:12;;;;17148:15;;;;17006:1;16999:9;16972:201;;17184:1189;17392:13;;17368:4;17353:20;;;17357:9;17326:4;17512:190;17526:4;17523:1;17520:11;17512:190;;;17573:45;17614:3;17605:6;17599:13;16179:12;;16167:25;;16241:4;16230:16;;;16224:23;16208:14;;16201:47;16106:148;17573:45;17687:4;17675:17;;;;;17647:4;17638:14;;;;;17546:1;17539:9;17512:190;;;17516:3;;;17721:4;17772:2;17764:6;17760:15;17754:22;17813:6;17802:9;17798:22;17900:1;17910:192;17926:4;17921:3;17918:13;17910:192;;;17997:15;;17991:22;17977:37;;18075:17;;;;18036:14;;;;17950:1;17941:11;17910:192;;;17914:3;;;;18151:4;18143:6;18139:17;18133:24;18166:71;18229:6;18218:9;18214:22;18198:14;18166:71;:::i;:::-;;18286:4;18278:6;18274:17;18268:24;18301:66;18359:6;18348:9;18344:22;18328:14;18301:66;:::i;:::-;;17184:1189;;;;:::o;18378:253::-;18474:6;18527:3;18515:9;18506:7;18502:23;18498:33;18495:53;;;18544:1;18541;18534:12;18495:53;18567:58;18617:7;18606:9;18567:58;:::i;:::-;18557:68;18378:253;-1:-1:-1;;;18378:253:181:o;18636:127::-;18697:10;18692:3;18688:20;18685:1;18678:31;18728:4;18725:1;18718:15;18752:4;18749:1;18742:15;18768:127;18829:10;18824:3;18820:20;18817:1;18810:31;18860:4;18857:1;18850:15;18884:4;18881:1;18874:15;18900:128;18967:9;;;18988:11;;;18985:37;;;19002:18;;:::i;21074:172::-;21141:10;21171;;;21183;;;21167:27;;21206:11;;;21203:37;;;21220:18;;:::i;21251:168::-;21324:9;;;21355;;21372:15;;;21366:22;;21352:37;21342:71;;21393:18;;:::i;21424:125::-;21489:9;;;21510:10;;;21507:36;;;21523:18;;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"3622200","executionCost":"4072","totalCost":"3626272"},"external":{"compute_powers_of_alpha(((uint256),(uint256),(uint256),(uint256),(uint256)[9],(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256)))":"infinite","prepare_queries((uint256,uint256,(uint256),(uint256,uint256)[2],(uint256,uint256)[7],(uint256,uint256)[4],(uint256,uint256),(uint256,uint256)[4],(uint256,uint256),(uint256)[3],(uint256[2],uint256[2])[2]),(uint256[],(uint256,uint256)[4],(uint256,uint256),(uint256,uint256)[4],(uint256)[4],(uint256)[1],(uint256)[1],(uint256)[3],(uint256),(uint256),(uint256),(uint256,uint256),(uint256,uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256),(uint256,uint256)),((uint256),(uint256),(uint256),(uint256),(uint256)[9],(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256)))":"infinite","rescue_custom_gate_linearization_contribution((uint256,uint256,(uint256),(uint256,uint256)[2],(uint256,uint256)[7],(uint256,uint256)[4],(uint256,uint256),(uint256,uint256)[4],(uint256,uint256),(uint256)[3],(uint256[2],uint256[2])[2]),(uint256[],(uint256,uint256)[4],(uint256,uint256),(uint256,uint256)[4],(uint256)[4],(uint256)[1],(uint256)[1],(uint256)[3],(uint256),(uint256),(uint256),(uint256,uint256),(uint256,uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256),(uint256,uint256)),((uint256),(uint256),(uint256),(uint256),(uint256)[9],(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256)))":"infinite","verify_serialized_proof(uint256[],uint256[])":"infinite"},"internal":{"deserialize_proof(uint256[] calldata,uint256[] calldata)":"infinite","get_verification_key()":"infinite"}},"methodIdentifiers":{"compute_powers_of_alpha(((uint256),(uint256),(uint256),(uint256),(uint256)[9],(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256)))":"fec4e96e","prepare_queries((uint256,uint256,(uint256),(uint256,uint256)[2],(uint256,uint256)[7],(uint256,uint256)[4],(uint256,uint256),(uint256,uint256)[4],(uint256,uint256),(uint256)[3],(uint256[2],uint256[2])[2]),(uint256[],(uint256,uint256)[4],(uint256,uint256),(uint256,uint256)[4],(uint256)[4],(uint256)[1],(uint256)[1],(uint256)[3],(uint256),(uint256),(uint256),(uint256,uint256),(uint256,uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256),(uint256,uint256)),((uint256),(uint256),(uint256),(uint256),(uint256)[9],(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256)))":"97e2957d","rescue_custom_gate_linearization_contribution((uint256,uint256,(uint256),(uint256,uint256)[2],(uint256,uint256)[7],(uint256,uint256)[4],(uint256,uint256),(uint256,uint256)[4],(uint256,uint256),(uint256)[3],(uint256[2],uint256[2])[2]),(uint256[],(uint256,uint256)[4],(uint256,uint256),(uint256,uint256)[4],(uint256)[4],(uint256)[1],(uint256)[1],(uint256)[3],(uint256),(uint256),(uint256),(uint256,uint256),(uint256,uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256),(uint256,uint256)),((uint256),(uint256),(uint256),(uint256),(uint256)[9],(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256),(uint256,uint256)))":"38fdad14","verify_serialized_proof(uint256[],uint256[])":"330deb9f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"zero\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"alpha\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"gamma\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[9]\",\"name\":\"alpha_values\",\"type\":\"tuple[9]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"eta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta_lookup\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"gamma_lookup\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta_plus_one\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta_gamma\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"v\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"u\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"z_minus_last_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"l_0_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"l_n_minus_one_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"t\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"tp\",\"type\":\"tuple\"}],\"internalType\":\"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState\",\"name\":\"state\",\"type\":\"tuple\"}],\"name\":\"compute_powers_of_alpha\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"domain_size\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"num_inputs\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[2]\",\"name\":\"gate_selectors_commitments\",\"type\":\"tuple[2]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[7]\",\"name\":\"gate_setup_commitments\",\"type\":\"tuple[7]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[4]\",\"name\":\"permutation_commitments\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"lookup_selector_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[4]\",\"name\":\"lookup_tables_commitments\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"lookup_table_type_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[3]\",\"name\":\"non_residues\",\"type\":\"tuple[3]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct PairingsBn254.G2Point[2]\",\"name\":\"g2_elements\",\"type\":\"tuple[2]\"}],\"internalType\":\"struct VerificationKey\",\"name\":\"vk\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"input_values\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[4]\",\"name\":\"state_polys_commitments\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"copy_permutation_grand_product_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[4]\",\"name\":\"quotient_poly_parts_commitments\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[4]\",\"name\":\"state_polys_openings_at_z\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[1]\",\"name\":\"state_polys_openings_at_z_omega\",\"type\":\"tuple[1]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[1]\",\"name\":\"gate_selectors_openings_at_z\",\"type\":\"tuple[1]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[3]\",\"name\":\"copy_permutation_polys_openings_at_z\",\"type\":\"tuple[3]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"copy_permutation_grand_product_opening_at_z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"quotient_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"linearization_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"lookup_s_poly_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"lookup_grand_product_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_s_poly_opening_at_z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_grand_product_opening_at_z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_t_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_t_poly_opening_at_z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_selector_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_table_type_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"opening_proof_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"opening_proof_at_z_omega\",\"type\":\"tuple\"}],\"internalType\":\"struct Plonk4VerifierWithAccessToDNext.Proof\",\"name\":\"proof\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"zero\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"alpha\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"gamma\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[9]\",\"name\":\"alpha_values\",\"type\":\"tuple[9]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"eta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta_lookup\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"gamma_lookup\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta_plus_one\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta_gamma\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"v\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"u\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"z_minus_last_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"l_0_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"l_n_minus_one_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"t\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"tp\",\"type\":\"tuple\"}],\"internalType\":\"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState\",\"name\":\"state\",\"type\":\"tuple\"}],\"name\":\"prepare_queries\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[13]\",\"name\":\"commitments_at_z\",\"type\":\"tuple[13]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[13]\",\"name\":\"values_at_z\",\"type\":\"tuple[13]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[6]\",\"name\":\"commitments_at_z_omega\",\"type\":\"tuple[6]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[6]\",\"name\":\"values_at_z_omega\",\"type\":\"tuple[6]\"}],\"internalType\":\"struct Plonk4VerifierWithAccessToDNext.Queries\",\"name\":\"queries\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"domain_size\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"num_inputs\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[2]\",\"name\":\"gate_selectors_commitments\",\"type\":\"tuple[2]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[7]\",\"name\":\"gate_setup_commitments\",\"type\":\"tuple[7]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[4]\",\"name\":\"permutation_commitments\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"lookup_selector_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[4]\",\"name\":\"lookup_tables_commitments\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"lookup_table_type_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[3]\",\"name\":\"non_residues\",\"type\":\"tuple[3]\"},{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"X\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"Y\",\"type\":\"uint256[2]\"}],\"internalType\":\"struct PairingsBn254.G2Point[2]\",\"name\":\"g2_elements\",\"type\":\"tuple[2]\"}],\"internalType\":\"struct VerificationKey\",\"name\":\"vk\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"input_values\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[4]\",\"name\":\"state_polys_commitments\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"copy_permutation_grand_product_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point[4]\",\"name\":\"quotient_poly_parts_commitments\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[4]\",\"name\":\"state_polys_openings_at_z\",\"type\":\"tuple[4]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[1]\",\"name\":\"state_polys_openings_at_z_omega\",\"type\":\"tuple[1]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[1]\",\"name\":\"gate_selectors_openings_at_z\",\"type\":\"tuple[1]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[3]\",\"name\":\"copy_permutation_polys_openings_at_z\",\"type\":\"tuple[3]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"copy_permutation_grand_product_opening_at_z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"quotient_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"linearization_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"lookup_s_poly_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"lookup_grand_product_commitment\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_s_poly_opening_at_z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_grand_product_opening_at_z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_t_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_t_poly_opening_at_z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_selector_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"lookup_table_type_poly_opening_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"opening_proof_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"opening_proof_at_z_omega\",\"type\":\"tuple\"}],\"internalType\":\"struct Plonk4VerifierWithAccessToDNext.Proof\",\"name\":\"proof\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"zero\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"alpha\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"gamma\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr[9]\",\"name\":\"alpha_values\",\"type\":\"tuple[9]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"eta\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta_lookup\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"gamma_lookup\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta_plus_one\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"beta_gamma\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"v\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"u\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"z_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"z_minus_last_omega\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"l_0_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"l_n_minus_one_at_z\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.Fr\",\"name\":\"t\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"tp\",\"type\":\"tuple\"}],\"internalType\":\"struct Plonk4VerifierWithAccessToDNext.PartialVerifierState\",\"name\":\"state\",\"type\":\"tuple\"}],\"name\":\"rescue_custom_gate_linearization_contribution\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"X\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"Y\",\"type\":\"uint256\"}],\"internalType\":\"struct PairingsBn254.G1Point\",\"name\":\"result\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"public_inputs\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"serialized_proof\",\"type\":\"uint256[]\"}],\"name\":\"verify_serialized_proof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/Verifier.sol\":\"Verifier\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l1/contracts/common/libraries/UncheckedMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nlibrary UncheckedMath {\\n    function uncheckedInc(uint256 _number) internal pure returns (uint256) {\\n        unchecked {\\n            return _number + 1;\\n        }\\n    }\\n\\n    function uncheckedAdd(uint256 _lhs, uint256 _rhs) internal pure returns (uint256) {\\n        unchecked {\\n            return _lhs + _rhs;\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7d0dff9b45338f35b32bc711192aec50973e13dc74b8e941d64586b510179c12\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/Plonk4VerifierWithAccessToDNext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/PairingsBn254.sol\\\";\\nimport \\\"./libraries/TranscriptLib.sol\\\";\\nimport \\\"../common/libraries/UncheckedMath.sol\\\";\\n\\nuint256 constant STATE_WIDTH = 4;\\nuint256 constant NUM_G2_ELS = 2;\\n\\nstruct VerificationKey {\\n    uint256 domain_size;\\n    uint256 num_inputs;\\n    PairingsBn254.Fr omega;\\n    PairingsBn254.G1Point[2] gate_selectors_commitments;\\n    PairingsBn254.G1Point[7] gate_setup_commitments;\\n    PairingsBn254.G1Point[STATE_WIDTH] permutation_commitments;\\n    PairingsBn254.G1Point lookup_selector_commitment;\\n    PairingsBn254.G1Point[4] lookup_tables_commitments;\\n    PairingsBn254.G1Point lookup_table_type_commitment;\\n    PairingsBn254.Fr[STATE_WIDTH - 1] non_residues;\\n    PairingsBn254.G2Point[NUM_G2_ELS] g2_elements;\\n}\\n\\ncontract Plonk4VerifierWithAccessToDNext {\\n    using PairingsBn254 for PairingsBn254.G1Point;\\n    using PairingsBn254 for PairingsBn254.G2Point;\\n    using PairingsBn254 for PairingsBn254.Fr;\\n\\n    using TranscriptLib for TranscriptLib.Transcript;\\n\\n    using UncheckedMath for uint256;\\n\\n    struct Proof {\\n        uint256[] input_values;\\n        // commitments\\n        PairingsBn254.G1Point[STATE_WIDTH] state_polys_commitments;\\n        PairingsBn254.G1Point copy_permutation_grand_product_commitment;\\n        PairingsBn254.G1Point[STATE_WIDTH] quotient_poly_parts_commitments;\\n        // openings\\n        PairingsBn254.Fr[STATE_WIDTH] state_polys_openings_at_z;\\n        PairingsBn254.Fr[1] state_polys_openings_at_z_omega; // TODO: not use array while there is only D_next\\n        PairingsBn254.Fr[1] gate_selectors_openings_at_z;\\n        PairingsBn254.Fr[STATE_WIDTH - 1] copy_permutation_polys_openings_at_z;\\n        PairingsBn254.Fr copy_permutation_grand_product_opening_at_z_omega;\\n        PairingsBn254.Fr quotient_poly_opening_at_z;\\n        PairingsBn254.Fr linearization_poly_opening_at_z;\\n        // lookup commitments\\n        PairingsBn254.G1Point lookup_s_poly_commitment;\\n        PairingsBn254.G1Point lookup_grand_product_commitment;\\n        // lookup openings\\n        PairingsBn254.Fr lookup_s_poly_opening_at_z_omega;\\n        PairingsBn254.Fr lookup_grand_product_opening_at_z_omega;\\n        PairingsBn254.Fr lookup_t_poly_opening_at_z;\\n        PairingsBn254.Fr lookup_t_poly_opening_at_z_omega;\\n        PairingsBn254.Fr lookup_selector_poly_opening_at_z;\\n        PairingsBn254.Fr lookup_table_type_poly_opening_at_z;\\n        PairingsBn254.G1Point opening_proof_at_z;\\n        PairingsBn254.G1Point opening_proof_at_z_omega;\\n    }\\n\\n    struct PartialVerifierState {\\n        PairingsBn254.Fr zero;\\n        PairingsBn254.Fr alpha;\\n        PairingsBn254.Fr beta;\\n        PairingsBn254.Fr gamma;\\n        PairingsBn254.Fr[9] alpha_values;\\n        PairingsBn254.Fr eta;\\n        PairingsBn254.Fr beta_lookup;\\n        PairingsBn254.Fr gamma_lookup;\\n        PairingsBn254.Fr beta_plus_one;\\n        PairingsBn254.Fr beta_gamma;\\n        PairingsBn254.Fr v;\\n        PairingsBn254.Fr u;\\n        PairingsBn254.Fr z;\\n        PairingsBn254.Fr z_omega;\\n        PairingsBn254.Fr z_minus_last_omega;\\n        PairingsBn254.Fr l_0_at_z;\\n        PairingsBn254.Fr l_n_minus_one_at_z;\\n        PairingsBn254.Fr t;\\n        PairingsBn254.G1Point tp;\\n    }\\n\\n    function evaluate_l0_at_point(uint256 domain_size, PairingsBn254.Fr memory at)\\n        internal\\n        view\\n        returns (PairingsBn254.Fr memory num)\\n    {\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n\\n        PairingsBn254.Fr memory size_fe = PairingsBn254.new_fr(domain_size);\\n        PairingsBn254.Fr memory den = at.copy();\\n        den.sub_assign(one);\\n        den.mul_assign(size_fe);\\n\\n        den = den.inverse();\\n\\n        num = at.pow(domain_size);\\n        num.sub_assign(one);\\n        num.mul_assign(den);\\n    }\\n\\n    function evaluate_lagrange_poly_out_of_domain(\\n        uint256 poly_num,\\n        uint256 domain_size,\\n        PairingsBn254.Fr memory omega,\\n        PairingsBn254.Fr memory at\\n    ) internal view returns (PairingsBn254.Fr memory res) {\\n        // (omega^i / N) / (X - omega^i) * (X^N - 1)\\n        require(poly_num < domain_size);\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n        PairingsBn254.Fr memory omega_power = omega.pow(poly_num);\\n        res = at.pow(domain_size);\\n        res.sub_assign(one);\\n        require(res.value != 0); // Vanishing polynomial can not be zero at point `at`\\n        res.mul_assign(omega_power);\\n\\n        PairingsBn254.Fr memory den = PairingsBn254.copy(at);\\n        den.sub_assign(omega_power);\\n        den.mul_assign(PairingsBn254.new_fr(domain_size));\\n\\n        den = den.inverse();\\n\\n        res.mul_assign(den);\\n    }\\n\\n    function evaluate_vanishing(uint256 domain_size, PairingsBn254.Fr memory at)\\n        internal\\n        view\\n        returns (PairingsBn254.Fr memory res)\\n    {\\n        res = at.pow(domain_size);\\n        res.sub_assign(PairingsBn254.new_fr(1));\\n    }\\n\\n    function initialize_transcript(Proof memory proof, VerificationKey memory vk)\\n        internal\\n        pure\\n        returns (PartialVerifierState memory state)\\n    {\\n        TranscriptLib.Transcript memory transcript = TranscriptLib.new_transcript();\\n\\n        for (uint256 i = 0; i < vk.num_inputs; i = i.uncheckedInc()) {\\n            transcript.update_with_u256(proof.input_values[i]);\\n        }\\n\\n        for (uint256 i = 0; i < STATE_WIDTH; i = i.uncheckedInc()) {\\n            transcript.update_with_g1(proof.state_polys_commitments[i]);\\n        }\\n\\n        state.eta = transcript.get_challenge();\\n        transcript.update_with_g1(proof.lookup_s_poly_commitment);\\n\\n        state.beta = transcript.get_challenge();\\n        state.gamma = transcript.get_challenge();\\n\\n        transcript.update_with_g1(proof.copy_permutation_grand_product_commitment);\\n        state.beta_lookup = transcript.get_challenge();\\n        state.gamma_lookup = transcript.get_challenge();\\n        transcript.update_with_g1(proof.lookup_grand_product_commitment);\\n        state.alpha = transcript.get_challenge();\\n\\n        for (uint256 i = 0; i < proof.quotient_poly_parts_commitments.length; i = i.uncheckedInc()) {\\n            transcript.update_with_g1(proof.quotient_poly_parts_commitments[i]);\\n        }\\n        state.z = transcript.get_challenge();\\n\\n        transcript.update_with_fr(proof.quotient_poly_opening_at_z);\\n\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.state_polys_openings_at_z[i]);\\n        }\\n\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z_omega.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.state_polys_openings_at_z_omega[i]);\\n        }\\n        for (uint256 i = 0; i < proof.gate_selectors_openings_at_z.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.gate_selectors_openings_at_z[i]);\\n        }\\n        for (uint256 i = 0; i < proof.copy_permutation_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.copy_permutation_polys_openings_at_z[i]);\\n        }\\n\\n        state.z_omega = state.z.copy();\\n        state.z_omega.mul_assign(vk.omega);\\n\\n        transcript.update_with_fr(proof.copy_permutation_grand_product_opening_at_z_omega);\\n\\n        transcript.update_with_fr(proof.lookup_t_poly_opening_at_z);\\n        transcript.update_with_fr(proof.lookup_selector_poly_opening_at_z);\\n        transcript.update_with_fr(proof.lookup_table_type_poly_opening_at_z);\\n        transcript.update_with_fr(proof.lookup_s_poly_opening_at_z_omega);\\n        transcript.update_with_fr(proof.lookup_grand_product_opening_at_z_omega);\\n        transcript.update_with_fr(proof.lookup_t_poly_opening_at_z_omega);\\n        transcript.update_with_fr(proof.linearization_poly_opening_at_z);\\n\\n        state.v = transcript.get_challenge();\\n\\n        transcript.update_with_g1(proof.opening_proof_at_z);\\n        transcript.update_with_g1(proof.opening_proof_at_z_omega);\\n\\n        state.u = transcript.get_challenge();\\n    }\\n\\n    // compute some powers of challenge alpha([alpha^1, .. alpha^8])\\n    function compute_powers_of_alpha(PartialVerifierState memory state) public pure {\\n        require(state.alpha.value != 0);\\n        state.alpha_values[0] = PairingsBn254.new_fr(1);\\n        state.alpha_values[1] = state.alpha.copy();\\n        PairingsBn254.Fr memory current_alpha = state.alpha.copy();\\n        for (uint256 i = 2; i < state.alpha_values.length; i = i.uncheckedInc()) {\\n            current_alpha.mul_assign(state.alpha);\\n            state.alpha_values[i] = current_alpha.copy();\\n        }\\n    }\\n\\n    function verify(Proof memory proof, VerificationKey memory vk) internal view returns (bool) {\\n        // we initialize all challenges beforehand, we can draw each challenge in its own place\\n        PartialVerifierState memory state = initialize_transcript(proof, vk);\\n        if (verify_quotient_evaluation(vk, proof, state) == false) {\\n            return false;\\n        }\\n        require(proof.state_polys_openings_at_z_omega.length == 1); // TODO\\n\\n        PairingsBn254.G1Point memory quotient_result = proof.quotient_poly_parts_commitments[0].copy_g1();\\n        {\\n            // block scope\\n            PairingsBn254.Fr memory z_in_domain_size = state.z.pow(vk.domain_size);\\n            PairingsBn254.Fr memory current_z = z_in_domain_size.copy();\\n            PairingsBn254.G1Point memory tp;\\n            // start from i =1\\n            for (uint256 i = 1; i < proof.quotient_poly_parts_commitments.length; i = i.uncheckedInc()) {\\n                tp = proof.quotient_poly_parts_commitments[i].copy_g1();\\n                tp.point_mul_assign(current_z);\\n                quotient_result.point_add_assign(tp);\\n\\n                current_z.mul_assign(z_in_domain_size);\\n            }\\n        }\\n\\n        Queries memory queries = prepare_queries(vk, proof, state);\\n        queries.commitments_at_z[0] = quotient_result;\\n        queries.values_at_z[0] = proof.quotient_poly_opening_at_z;\\n        queries.commitments_at_z[1] = aggregated_linearization_commitment(vk, proof, state);\\n        queries.values_at_z[1] = proof.linearization_poly_opening_at_z;\\n\\n        require(queries.commitments_at_z.length == queries.values_at_z.length);\\n\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z = queries.commitments_at_z[0];\\n\\n        PairingsBn254.Fr memory aggregated_opening_at_z = queries.values_at_z[0];\\n        PairingsBn254.Fr memory aggregation_challenge = PairingsBn254.new_fr(1);\\n        PairingsBn254.G1Point memory scaled;\\n        for (uint256 i = 1; i < queries.commitments_at_z.length; i = i.uncheckedInc()) {\\n            aggregation_challenge.mul_assign(state.v);\\n            scaled = queries.commitments_at_z[i].point_mul(aggregation_challenge);\\n            aggregated_commitment_at_z.point_add_assign(scaled);\\n\\n            state.t = queries.values_at_z[i];\\n            state.t.mul_assign(aggregation_challenge);\\n            aggregated_opening_at_z.add_assign(state.t);\\n        }\\n\\n        aggregation_challenge.mul_assign(state.v);\\n\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z_omega = queries.commitments_at_z_omega[0].point_mul(\\n            aggregation_challenge\\n        );\\n        PairingsBn254.Fr memory aggregated_opening_at_z_omega = queries.values_at_z_omega[0];\\n        aggregated_opening_at_z_omega.mul_assign(aggregation_challenge);\\n        for (uint256 i = 1; i < queries.commitments_at_z_omega.length; i = i.uncheckedInc()) {\\n            aggregation_challenge.mul_assign(state.v);\\n\\n            scaled = queries.commitments_at_z_omega[i].point_mul(aggregation_challenge);\\n            aggregated_commitment_at_z_omega.point_add_assign(scaled);\\n\\n            state.t = queries.values_at_z_omega[i];\\n            state.t.mul_assign(aggregation_challenge);\\n            aggregated_opening_at_z_omega.add_assign(state.t);\\n        }\\n\\n        return\\n            final_pairing(\\n                vk.g2_elements,\\n                proof,\\n                state,\\n                aggregated_commitment_at_z,\\n                aggregated_commitment_at_z_omega,\\n                aggregated_opening_at_z,\\n                aggregated_opening_at_z_omega\\n            );\\n    }\\n\\n    function verify_quotient_evaluation(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) internal view returns (bool) {\\n        uint256[] memory lagrange_poly_numbers = new uint256[](vk.num_inputs);\\n        for (uint256 i = 0; i < lagrange_poly_numbers.length; i = i.uncheckedInc()) {\\n            lagrange_poly_numbers[i] = i;\\n        }\\n        // require(vk.num_inputs > 0); // TODO\\n\\n        PairingsBn254.Fr memory inputs_term = PairingsBn254.new_fr(0);\\n        for (uint256 i = 0; i < vk.num_inputs; i = i.uncheckedInc()) {\\n            // TODO we may use batched lagrange compputation\\n            state.t = evaluate_lagrange_poly_out_of_domain(i, vk.domain_size, vk.omega, state.z);\\n            state.t.mul_assign(PairingsBn254.new_fr(proof.input_values[i]));\\n            inputs_term.add_assign(state.t);\\n        }\\n        inputs_term.mul_assign(proof.gate_selectors_openings_at_z[0]);\\n        PairingsBn254.Fr memory result = proof.linearization_poly_opening_at_z.copy();\\n        result.add_assign(inputs_term);\\n\\n        // compute powers of alpha\\n        compute_powers_of_alpha(state);\\n        PairingsBn254.Fr memory factor = state.alpha_values[4].copy();\\n        factor.mul_assign(proof.copy_permutation_grand_product_opening_at_z_omega);\\n\\n        // - alpha_0 * (a + perm(z) * beta + gamma)*()*(d + gamma) * z(z*omega)\\n        require(proof.copy_permutation_polys_openings_at_z.length == STATE_WIDTH - 1);\\n        PairingsBn254.Fr memory t; // TMP;\\n        for (uint256 i = 0; i < proof.copy_permutation_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            t = proof.copy_permutation_polys_openings_at_z[i].copy();\\n            t.mul_assign(state.beta);\\n            t.add_assign(proof.state_polys_openings_at_z[i]);\\n            t.add_assign(state.gamma);\\n\\n            factor.mul_assign(t);\\n        }\\n\\n        t = proof.state_polys_openings_at_z[3].copy();\\n        t.add_assign(state.gamma);\\n        factor.mul_assign(t);\\n        result.sub_assign(factor);\\n\\n        // - L_0(z) * alpha_1\\n        PairingsBn254.Fr memory l_0_at_z = evaluate_l0_at_point(vk.domain_size, state.z);\\n        l_0_at_z.mul_assign(state.alpha_values[4 + 1]);\\n        result.sub_assign(l_0_at_z);\\n\\n        PairingsBn254.Fr memory lookup_quotient_contrib = lookup_quotient_contribution(vk, proof, state);\\n        result.add_assign(lookup_quotient_contrib);\\n\\n        PairingsBn254.Fr memory lhs = proof.quotient_poly_opening_at_z.copy();\\n        lhs.mul_assign(evaluate_vanishing(vk.domain_size, state.z));\\n        return lhs.value == result.value;\\n    }\\n\\n    function lookup_quotient_contribution(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) internal view returns (PairingsBn254.Fr memory result) {\\n        PairingsBn254.Fr memory t;\\n\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n        state.beta_plus_one = state.beta_lookup.copy();\\n        state.beta_plus_one.add_assign(one);\\n        state.beta_gamma = state.beta_plus_one.copy();\\n        state.beta_gamma.mul_assign(state.gamma_lookup);\\n\\n        // (s'*beta + gamma)*(zw')*alpha\\n        t = proof.lookup_s_poly_opening_at_z_omega.copy();\\n        t.mul_assign(state.beta_lookup);\\n        t.add_assign(state.beta_gamma);\\n        t.mul_assign(proof.lookup_grand_product_opening_at_z_omega);\\n        t.mul_assign(state.alpha_values[6]);\\n\\n        // (z - omega^{n-1}) for this part\\n        PairingsBn254.Fr memory last_omega = vk.omega.pow(vk.domain_size - 1);\\n        state.z_minus_last_omega = state.z.copy();\\n        state.z_minus_last_omega.sub_assign(last_omega);\\n        t.mul_assign(state.z_minus_last_omega);\\n        result.add_assign(t);\\n\\n        // - alpha_1 * L_{0}(z)\\n        state.l_0_at_z = evaluate_lagrange_poly_out_of_domain(0, vk.domain_size, vk.omega, state.z);\\n        t = state.l_0_at_z.copy();\\n        t.mul_assign(state.alpha_values[6 + 1]);\\n        result.sub_assign(t);\\n\\n        // - alpha_2 * beta_gamma_powered L_{n-1}(z)\\n        PairingsBn254.Fr memory beta_gamma_powered = state.beta_gamma.pow(vk.domain_size - 1);\\n        state.l_n_minus_one_at_z = evaluate_lagrange_poly_out_of_domain(\\n            vk.domain_size - 1,\\n            vk.domain_size,\\n            vk.omega,\\n            state.z\\n        );\\n        t = state.l_n_minus_one_at_z.copy();\\n        t.mul_assign(beta_gamma_powered);\\n        t.mul_assign(state.alpha_values[6 + 2]);\\n\\n        result.sub_assign(t);\\n    }\\n\\n    function aggregated_linearization_commitment(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) internal view returns (PairingsBn254.G1Point memory result) {\\n        // qMain*(Q_a * A + Q_b * B + Q_c * C + Q_d * D + Q_m * A*B + Q_const + Q_dNext * D_next)\\n        result = PairingsBn254.new_g1(0, 0);\\n        // Q_a * A\\n        PairingsBn254.G1Point memory scaled = vk.gate_setup_commitments[0].point_mul(\\n            proof.state_polys_openings_at_z[0]\\n        );\\n        result.point_add_assign(scaled);\\n        // Q_b * B\\n        scaled = vk.gate_setup_commitments[1].point_mul(proof.state_polys_openings_at_z[1]);\\n        result.point_add_assign(scaled);\\n        // Q_c * C\\n        scaled = vk.gate_setup_commitments[2].point_mul(proof.state_polys_openings_at_z[2]);\\n        result.point_add_assign(scaled);\\n        // Q_d * D\\n        scaled = vk.gate_setup_commitments[3].point_mul(proof.state_polys_openings_at_z[3]);\\n        result.point_add_assign(scaled);\\n        // Q_m* A*B or Q_ab*A*B\\n        PairingsBn254.Fr memory t = proof.state_polys_openings_at_z[0].copy();\\n        t.mul_assign(proof.state_polys_openings_at_z[1]);\\n        scaled = vk.gate_setup_commitments[4].point_mul(t);\\n        result.point_add_assign(scaled);\\n        // Q_const\\n        result.point_add_assign(vk.gate_setup_commitments[5]);\\n        // Q_dNext * D_next\\n        scaled = vk.gate_setup_commitments[6].point_mul(proof.state_polys_openings_at_z_omega[0]);\\n        result.point_add_assign(scaled);\\n        result.point_mul_assign(proof.gate_selectors_openings_at_z[0]);\\n\\n        PairingsBn254.G1Point\\n            memory rescue_custom_gate_linearization_contrib = rescue_custom_gate_linearization_contribution(\\n                vk,\\n                proof,\\n                state\\n            );\\n        result.point_add_assign(rescue_custom_gate_linearization_contrib);\\n        require(vk.non_residues.length == STATE_WIDTH - 1);\\n\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n        PairingsBn254.Fr memory factor = state.alpha_values[4].copy();\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z.length; ) {\\n            t = state.z.copy();\\n            if (i == 0) {\\n                t.mul_assign(one);\\n            } else {\\n                t.mul_assign(vk.non_residues[i - 1]); // TODO add one into non-residues during codegen?\\n            }\\n            t.mul_assign(state.beta);\\n            t.add_assign(state.gamma);\\n            t.add_assign(proof.state_polys_openings_at_z[i]);\\n\\n            factor.mul_assign(t);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n\\n        scaled = proof.copy_permutation_grand_product_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n\\n        // - (a(z) + beta*perm_a + gamma)*()*()*z(z*omega) * beta * perm_d(X)\\n        factor = state.alpha_values[4].copy();\\n        factor.mul_assign(state.beta);\\n        factor.mul_assign(proof.copy_permutation_grand_product_opening_at_z_omega);\\n        for (uint256 i = 0; i < STATE_WIDTH - 1; i = i.uncheckedInc()) {\\n            t = proof.copy_permutation_polys_openings_at_z[i].copy();\\n            t.mul_assign(state.beta);\\n            t.add_assign(state.gamma);\\n            t.add_assign(proof.state_polys_openings_at_z[i]);\\n\\n            factor.mul_assign(t);\\n        }\\n        scaled = vk.permutation_commitments[3].point_mul(factor);\\n        result.point_sub_assign(scaled);\\n\\n        // + L_0(z) * Z(x)\\n        // TODO\\n        state.l_0_at_z = evaluate_lagrange_poly_out_of_domain(0, vk.domain_size, vk.omega, state.z);\\n        require(state.l_0_at_z.value != 0);\\n        factor = state.l_0_at_z.copy();\\n        factor.mul_assign(state.alpha_values[4 + 1]);\\n        scaled = proof.copy_permutation_grand_product_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n\\n        PairingsBn254.G1Point memory lookup_linearization_contrib = lookup_linearization_contribution(proof, state);\\n        result.point_add_assign(lookup_linearization_contrib);\\n    }\\n\\n    function rescue_custom_gate_linearization_contribution(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) public view returns (PairingsBn254.G1Point memory result) {\\n        PairingsBn254.Fr memory t;\\n        PairingsBn254.Fr memory intermediate_result;\\n\\n        // a^2 - b = 0\\n        t = proof.state_polys_openings_at_z[0].copy();\\n        t.mul_assign(t);\\n        t.sub_assign(proof.state_polys_openings_at_z[1]);\\n        // t.mul_assign(challenge1);\\n        t.mul_assign(state.alpha_values[1]);\\n        intermediate_result.add_assign(t);\\n\\n        // b^2 - c = 0\\n        t = proof.state_polys_openings_at_z[1].copy();\\n        t.mul_assign(t);\\n        t.sub_assign(proof.state_polys_openings_at_z[2]);\\n        t.mul_assign(state.alpha_values[1 + 1]);\\n        intermediate_result.add_assign(t);\\n\\n        // c*a - d = 0;\\n        t = proof.state_polys_openings_at_z[2].copy();\\n        t.mul_assign(proof.state_polys_openings_at_z[0]);\\n        t.sub_assign(proof.state_polys_openings_at_z[3]);\\n        t.mul_assign(state.alpha_values[1 + 2]);\\n        intermediate_result.add_assign(t);\\n\\n        result = vk.gate_selectors_commitments[1].point_mul(intermediate_result);\\n    }\\n\\n    function lookup_linearization_contribution(Proof memory proof, PartialVerifierState memory state)\\n        internal\\n        view\\n        returns (PairingsBn254.G1Point memory result)\\n    {\\n        PairingsBn254.Fr memory zero = PairingsBn254.new_fr(0);\\n\\n        PairingsBn254.Fr memory t;\\n        PairingsBn254.Fr memory factor;\\n        // s(x) from the Z(x*omega)*(\\\\gamma*(1 + \\\\beta) + s(x) + \\\\beta * s(x*omega)))\\n        factor = proof.lookup_grand_product_opening_at_z_omega.copy();\\n        factor.mul_assign(state.alpha_values[6]);\\n        factor.mul_assign(state.z_minus_last_omega);\\n\\n        PairingsBn254.G1Point memory scaled = proof.lookup_s_poly_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n\\n        // Z(x) from - alpha_0 * Z(x) * (\\\\beta + 1) * (\\\\gamma + f(x)) * (\\\\gamma(1 + \\\\beta) + t(x) + \\\\beta * t(x*omega))\\n        // + alpha_1 * Z(x) * L_{0}(z) + alpha_2 * Z(x) * L_{n-1}(z)\\n\\n        // accumulate coefficient\\n        factor = proof.lookup_t_poly_opening_at_z_omega.copy();\\n        factor.mul_assign(state.beta_lookup);\\n        factor.add_assign(proof.lookup_t_poly_opening_at_z);\\n        factor.add_assign(state.beta_gamma);\\n\\n        // (\\\\gamma + f(x))\\n        PairingsBn254.Fr memory f_reconstructed;\\n        PairingsBn254.Fr memory current = PairingsBn254.new_fr(1);\\n        PairingsBn254.Fr memory tmp0;\\n        for (uint256 i = 0; i < STATE_WIDTH - 1; i = i.uncheckedInc()) {\\n            tmp0 = proof.state_polys_openings_at_z[i].copy();\\n            tmp0.mul_assign(current);\\n            f_reconstructed.add_assign(tmp0);\\n\\n            current.mul_assign(state.eta);\\n        }\\n\\n        // add type of table\\n        t = proof.lookup_table_type_poly_opening_at_z.copy();\\n        t.mul_assign(current);\\n        f_reconstructed.add_assign(t);\\n\\n        f_reconstructed.mul_assign(proof.lookup_selector_poly_opening_at_z);\\n        f_reconstructed.add_assign(state.gamma_lookup);\\n\\n        // end of (\\\\gamma + f(x)) part\\n        factor.mul_assign(f_reconstructed);\\n        factor.mul_assign(state.beta_plus_one);\\n        t = zero.copy();\\n        t.sub_assign(factor);\\n        factor = t;\\n        factor.mul_assign(state.alpha_values[6]);\\n\\n        // Multiply by (z - omega^{n-1})\\n        factor.mul_assign(state.z_minus_last_omega);\\n\\n        // L_{0}(z) in front of Z(x)\\n        t = state.l_0_at_z.copy();\\n        t.mul_assign(state.alpha_values[6 + 1]);\\n        factor.add_assign(t);\\n\\n        // L_{n-1}(z) in front of Z(x)\\n        t = state.l_n_minus_one_at_z.copy();\\n        t.mul_assign(state.alpha_values[6 + 2]);\\n        factor.add_assign(t);\\n\\n        scaled = proof.lookup_grand_product_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n    }\\n\\n    struct Queries {\\n        PairingsBn254.G1Point[13] commitments_at_z;\\n        PairingsBn254.Fr[13] values_at_z;\\n        PairingsBn254.G1Point[6] commitments_at_z_omega;\\n        PairingsBn254.Fr[6] values_at_z_omega;\\n    }\\n\\n    function prepare_queries(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) public view returns (Queries memory queries) {\\n        // we set first two items in calee side so start idx from 2\\n        uint256 idx = 2;\\n        for (uint256 i = 0; i < STATE_WIDTH; i = i.uncheckedInc()) {\\n            queries.commitments_at_z[idx] = proof.state_polys_commitments[i];\\n            queries.values_at_z[idx] = proof.state_polys_openings_at_z[i];\\n            idx = idx.uncheckedInc();\\n        }\\n        require(proof.gate_selectors_openings_at_z.length == 1);\\n        queries.commitments_at_z[idx] = vk.gate_selectors_commitments[0];\\n        queries.values_at_z[idx] = proof.gate_selectors_openings_at_z[0];\\n        idx = idx.uncheckedInc();\\n        for (uint256 i = 0; i < STATE_WIDTH - 1; i = i.uncheckedInc()) {\\n            queries.commitments_at_z[idx] = vk.permutation_commitments[i];\\n            queries.values_at_z[idx] = proof.copy_permutation_polys_openings_at_z[i];\\n            idx = idx.uncheckedInc();\\n        }\\n\\n        queries.commitments_at_z_omega[0] = proof.copy_permutation_grand_product_commitment;\\n        queries.commitments_at_z_omega[1] = proof.state_polys_commitments[STATE_WIDTH - 1];\\n\\n        queries.values_at_z_omega[0] = proof.copy_permutation_grand_product_opening_at_z_omega;\\n        queries.values_at_z_omega[1] = proof.state_polys_openings_at_z_omega[0];\\n\\n        PairingsBn254.G1Point memory lookup_t_poly_commitment_aggregated = vk.lookup_tables_commitments[0];\\n        PairingsBn254.Fr memory current_eta = state.eta.copy();\\n        for (uint256 i = 1; i < vk.lookup_tables_commitments.length; i = i.uncheckedInc()) {\\n            state.tp = vk.lookup_tables_commitments[i].point_mul(current_eta);\\n            lookup_t_poly_commitment_aggregated.point_add_assign(state.tp);\\n\\n            current_eta.mul_assign(state.eta);\\n        }\\n        queries.commitments_at_z[idx] = lookup_t_poly_commitment_aggregated;\\n        queries.values_at_z[idx] = proof.lookup_t_poly_opening_at_z;\\n        idx = idx.uncheckedInc();\\n        queries.commitments_at_z[idx] = vk.lookup_selector_commitment;\\n        queries.values_at_z[idx] = proof.lookup_selector_poly_opening_at_z;\\n        idx = idx.uncheckedInc();\\n        queries.commitments_at_z[idx] = vk.lookup_table_type_commitment;\\n        queries.values_at_z[idx] = proof.lookup_table_type_poly_opening_at_z;\\n        queries.commitments_at_z_omega[2] = proof.lookup_s_poly_commitment;\\n        queries.values_at_z_omega[2] = proof.lookup_s_poly_opening_at_z_omega;\\n        queries.commitments_at_z_omega[3] = proof.lookup_grand_product_commitment;\\n        queries.values_at_z_omega[3] = proof.lookup_grand_product_opening_at_z_omega;\\n        queries.commitments_at_z_omega[4] = lookup_t_poly_commitment_aggregated;\\n        queries.values_at_z_omega[4] = proof.lookup_t_poly_opening_at_z_omega;\\n    }\\n\\n    function final_pairing(\\n        // VerificationKey memory vk,\\n        PairingsBn254.G2Point[NUM_G2_ELS] memory g2_elements,\\n        Proof memory proof,\\n        PartialVerifierState memory state,\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z,\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z_omega,\\n        PairingsBn254.Fr memory aggregated_opening_at_z,\\n        PairingsBn254.Fr memory aggregated_opening_at_z_omega\\n    ) internal view returns (bool) {\\n        // q(x) = f(x) - f(z) / (x - z)\\n        // q(x) * (x-z)  = f(x) - f(z)\\n\\n        // f(x)\\n        PairingsBn254.G1Point memory pair_with_generator = aggregated_commitment_at_z.copy_g1();\\n        aggregated_commitment_at_z_omega.point_mul_assign(state.u);\\n        pair_with_generator.point_add_assign(aggregated_commitment_at_z_omega);\\n\\n        // - f(z)*g\\n        PairingsBn254.Fr memory aggregated_value = aggregated_opening_at_z_omega.copy();\\n        aggregated_value.mul_assign(state.u);\\n        aggregated_value.add_assign(aggregated_opening_at_z);\\n        PairingsBn254.G1Point memory tp = PairingsBn254.P1().point_mul(aggregated_value);\\n        pair_with_generator.point_sub_assign(tp);\\n\\n        // +z * q(x)\\n        tp = proof.opening_proof_at_z.point_mul(state.z);\\n        PairingsBn254.Fr memory t = state.z_omega.copy();\\n        t.mul_assign(state.u);\\n        PairingsBn254.G1Point memory t1 = proof.opening_proof_at_z_omega.point_mul(t);\\n        tp.point_add_assign(t1);\\n        pair_with_generator.point_add_assign(tp);\\n\\n        // rhs\\n        PairingsBn254.G1Point memory pair_with_x = proof.opening_proof_at_z_omega.point_mul(state.u);\\n        pair_with_x.point_add_assign(proof.opening_proof_at_z);\\n        pair_with_x.negate();\\n        // Pairing precompile expects points to be in a `i*x[1] + x[0]` form instead of `x[0] + i*x[1]`\\n        // so we handle it in code generation step\\n        PairingsBn254.G2Point memory first_g2 = g2_elements[0];\\n        PairingsBn254.G2Point memory second_g2 = g2_elements[1];\\n        PairingsBn254.G2Point memory gen2 = PairingsBn254.P2();\\n\\n        return PairingsBn254.pairingProd2(pair_with_generator, first_g2, pair_with_x, second_g2);\\n    }\\n}\\n\",\"keccak256\":\"0x3ef4937c0ab65a60baabb5b00ece282148267f94bc6c087254faf925c2bdc7d2\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/Verifier.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../common/libraries/UncheckedMath.sol\\\";\\nimport \\\"./Plonk4VerifierWithAccessToDNext.sol\\\";\\n\\ncontract Verifier is Plonk4VerifierWithAccessToDNext {\\n    using UncheckedMath for uint256;\\n\\n    function get_verification_key() internal pure returns (VerificationKey memory vk) {\\n        vk.num_inputs = 1;\\n        vk.domain_size = 256;\\n        vk.omega = PairingsBn254.new_fr(0x1058a83d529be585820b96ff0a13f2dbd8675a9e5dd2336a6692cc1e5a526c81);\\n        // coefficients\\n        vk.gate_setup_commitments[0] = PairingsBn254.new_g1(\\n            0x05f5cabc4eab14cfabee1334ef7f33a66259cc9fd07af862308d5c41765adb4b,\\n            0x128a103fbe66c8ff697182c0963d963208b55a5a53ddeab9b4bc09dc2a68a9cc\\n        );\\n        vk.gate_setup_commitments[1] = PairingsBn254.new_g1(\\n            0x0d9980170c334c107e6ce4d66bbc4d23bbcdc97c020b1e1c3f6e04c6c663d2c2,\\n            0x0968205845091ceaf3f863b1613fbdf7ce9a87ccfd97f22011679e6350384419\\n        );\\n        vk.gate_setup_commitments[2] = PairingsBn254.new_g1(\\n            0x0c84a19b149a1612cb042ad86382b9e94367c0add60d07e12399999e7db09efe,\\n            0x1e02f70c44c9bfb7bf2164cee2ab4813bcb9be56eb432e2e9dfffffe196d846d\\n        );\\n        vk.gate_setup_commitments[3] = PairingsBn254.new_g1(\\n            0x1eb3599506a41a7d62e1f7438d6732fbb9d1eda7b9c7a0213eca63c9334ac5a9,\\n            0x23563d9f429908d8ea80bffa642840fb081936d45b388bafc504d9b1e5b1c410\\n        );\\n        vk.gate_setup_commitments[4] = PairingsBn254.new_g1(\\n            0x0000000000000000000000000000000000000000000000000000000000000000,\\n            0x0000000000000000000000000000000000000000000000000000000000000001\\n        );\\n        vk.gate_setup_commitments[5] = PairingsBn254.new_g1(\\n            0x063e8dac7ee3ee6a4569fd53b416fe17f8f10de8c435c336e5a1cf2e02643200,\\n            0x1d4c1781b78f926d55f89ef72abb96bee350ce60ddc684f5a02d87c5f4cdf943\\n        );\\n        vk.gate_setup_commitments[6] = PairingsBn254.new_g1(\\n            0x0000000000000000000000000000000000000000000000000000000000000000,\\n            0x0000000000000000000000000000000000000000000000000000000000000001\\n        );\\n        // gate selectors\\n        vk.gate_selectors_commitments[0] = PairingsBn254.new_g1(\\n            0x0b487eb34c8480ea506f5c6c25857155d61d7f9824b60bc80e1a415a5bcf247f,\\n            0x07ea0d0d0df9dbcc944e9341a5bb49ae796d9dc9d7ca1c032b53784715b946db\\n        );\\n        vk.gate_selectors_commitments[1] = PairingsBn254.new_g1(\\n            0x0fa66faa0b9ea782eb400175ac9f0c05f0de64332eec54a87cd20db4540baec2,\\n            0x07dea33d314c690c4bd4b21deda1a44b9f8dd87e539024622768c2f8b8bdabe1\\n        );\\n        // permutation\\n        vk.permutation_commitments[0] = PairingsBn254.new_g1(\\n            0x120482c52e31d2373f9b2dc80a47e68f035e278d220fa8a89d0c81f133343953,\\n            0x02928a78ea2e1a943e9220b7e288fd48a561263f8e5f94518f21aaa43781ceac\\n        );\\n        vk.permutation_commitments[1] = PairingsBn254.new_g1(\\n            0x1dfad2c4d60704bcf6af0abd9cce09151f063c4b52200c268e470c6a6c93cbca,\\n            0x08b28dd6ca14d7c33e078fe0f332a9a4d95ac8df171355de9e69930aec02b5dc\\n        );\\n        vk.permutation_commitments[2] = PairingsBn254.new_g1(\\n            0x0935a4fd6ab67925929661cf2d2e814f87f589ee6234cb9675ecc2d897f1b338,\\n            0x1032ccc41c047413fce4a847ba7e51e4a2ea406d89a88d480c5f0efaf6c8c89a\\n        );\\n        vk.permutation_commitments[3] = PairingsBn254.new_g1(\\n            0x0eafaea3af7d1fadb2138db1b991af5d2218f6892714fd019898c7e1a43ecfe8,\\n            0x28fb17eda285ed74cc9771d62fad22ab459bbb0a4968c489972aca8b7e618fcb\\n        );\\n        // lookup table commitments\\n        vk.lookup_selector_commitment = PairingsBn254.new_g1(\\n            0x155201a564e721b1f5c06315ad4e24eaad3cbdd6197b19cd903fe85613080f86,\\n            0x12fb201bc896572ac14357e2601f5118636f1eeb7b89c177ac940aac3b5253ec\\n        );\\n        vk.lookup_tables_commitments[0] = PairingsBn254.new_g1(\\n            0x1cb0e2ae4d52743898d94d7f1729bd0d3357ba035cdb6b3af7ebff9159f8f297,\\n            0x15ee595227c9e0f7a487ddb8072d5ea3cfd058bc569211c3546bc0e80051553f\\n        );\\n        vk.lookup_tables_commitments[1] = PairingsBn254.new_g1(\\n            0x13e4ab94c03a5a29719930c1361d854e244cf918f1e29cb031303f4a13b71977,\\n            0x0f792ef4c6c8746c97be61ed9b20f31ba2dec3bd5c91a2d9a4a586f19af3a07c\\n        );\\n        vk.lookup_tables_commitments[2] = PairingsBn254.new_g1(\\n            0x1c9e69bd2b04240ebe44fb23d67c596fce4a1336109fdce38c2f184a63cd8acc,\\n            0x1cbd3e72bdbce827227e503690b10be9365ae760e9d2babde5ba81edf12f8206\\n        );\\n        vk.lookup_tables_commitments[3] = PairingsBn254.new_g1(\\n            0x2a0d46339fbf72104df6a241b53a957602b1a16f6e3b9f89bf3e4c4645df823c,\\n            0x11a601d7b2eee4b7885f34c9873426ba1263f38eae2e0351d653b8b1ba9c67f6\\n        );\\n        vk.lookup_table_type_commitment = PairingsBn254.new_g1(\\n            0x1a70e43f18b18d686807c2b1c6471cd949dd251b48090bca443d86b97afae951,\\n            0x0e6e23ad15a1bd851b228788ae4a03bf25bda39ede6d5a92d501a8402a0dfe43\\n        );\\n        // non residues\\n        vk.non_residues[0] = PairingsBn254.new_fr(0x0000000000000000000000000000000000000000000000000000000000000005);\\n        vk.non_residues[1] = PairingsBn254.new_fr(0x0000000000000000000000000000000000000000000000000000000000000007);\\n        vk.non_residues[2] = PairingsBn254.new_fr(0x000000000000000000000000000000000000000000000000000000000000000a);\\n\\n        // g2 elements\\n        vk.g2_elements[0] = PairingsBn254.new_g2(\\n            [\\n                0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,\\n                0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\\n            ],\\n            [\\n                0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,\\n                0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\\n            ]\\n        );\\n        vk.g2_elements[1] = PairingsBn254.new_g2(\\n            [\\n                0x260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c1,\\n                0x0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b0\\n            ],\\n            [\\n                0x04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4,\\n                0x22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55\\n            ]\\n        );\\n    }\\n\\n    function deserialize_proof(uint256[] calldata public_inputs, uint256[] calldata serialized_proof)\\n        internal\\n        pure\\n        returns (Proof memory proof)\\n    {\\n        // require(serialized_proof.length == 44); TODO\\n        proof.input_values = new uint256[](public_inputs.length);\\n        for (uint256 i = 0; i < public_inputs.length; i = i.uncheckedInc()) {\\n            proof.input_values[i] = public_inputs[i];\\n        }\\n\\n        uint256 j;\\n        for (uint256 i = 0; i < STATE_WIDTH; i = i.uncheckedInc()) {\\n            proof.state_polys_commitments[i] = PairingsBn254.new_g1_checked(\\n                serialized_proof[j],\\n                serialized_proof[j.uncheckedInc()]\\n            );\\n\\n            j = j.uncheckedAdd(2);\\n        }\\n        proof.copy_permutation_grand_product_commitment = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n        j = j.uncheckedAdd(2);\\n\\n        proof.lookup_s_poly_commitment = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n        j = j.uncheckedAdd(2);\\n\\n        proof.lookup_grand_product_commitment = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n        j = j.uncheckedAdd(2);\\n        for (uint256 i = 0; i < proof.quotient_poly_parts_commitments.length; i = i.uncheckedInc()) {\\n            proof.quotient_poly_parts_commitments[i] = PairingsBn254.new_g1_checked(\\n                serialized_proof[j],\\n                serialized_proof[j.uncheckedInc()]\\n            );\\n            j = j.uncheckedAdd(2);\\n        }\\n\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            proof.state_polys_openings_at_z[i] = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n            j = j.uncheckedInc();\\n        }\\n\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z_omega.length; i = i.uncheckedInc()) {\\n            proof.state_polys_openings_at_z_omega[i] = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n            j = j.uncheckedInc();\\n        }\\n        for (uint256 i = 0; i < proof.gate_selectors_openings_at_z.length; i = i.uncheckedInc()) {\\n            proof.gate_selectors_openings_at_z[i] = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n            j = j.uncheckedInc();\\n        }\\n        for (uint256 i = 0; i < proof.copy_permutation_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            proof.copy_permutation_polys_openings_at_z[i] = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n            j = j.uncheckedInc();\\n        }\\n        proof.copy_permutation_grand_product_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n        j = j.uncheckedInc();\\n        proof.lookup_s_poly_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.lookup_grand_product_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n        j = j.uncheckedInc();\\n        proof.lookup_t_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n        j = j.uncheckedInc();\\n        proof.lookup_t_poly_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.lookup_selector_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.lookup_table_type_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.quotient_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.linearization_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.opening_proof_at_z = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n        j = j.uncheckedAdd(2);\\n        proof.opening_proof_at_z_omega = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n    }\\n\\n    function verify_serialized_proof(uint256[] calldata public_inputs, uint256[] calldata serialized_proof)\\n        public\\n        view\\n        returns (bool)\\n    {\\n        VerificationKey memory vk = get_verification_key();\\n        require(vk.num_inputs == public_inputs.length);\\n\\n        Proof memory proof = deserialize_proof(public_inputs, serialized_proof);\\n\\n        return verify(proof, vk);\\n    }\\n}\\n\",\"keccak256\":\"0x5d093f2c0d383f12fb6b8c2b2bc32c8ea07f579c2daee7d68aed8cf8041715a0\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PairingsBn254.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nlibrary PairingsBn254 {\\n    uint256 constant q_mod = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n    uint256 constant r_mod = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant bn254_b_coeff = 3;\\n\\n    struct G1Point {\\n        uint256 X;\\n        uint256 Y;\\n    }\\n\\n    struct Fr {\\n        uint256 value;\\n    }\\n\\n    function new_fr(uint256 fr) internal pure returns (Fr memory) {\\n        require(fr < r_mod);\\n        return Fr({value: fr});\\n    }\\n\\n    function copy(Fr memory self) internal pure returns (Fr memory n) {\\n        n.value = self.value;\\n    }\\n\\n    function assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = other.value;\\n    }\\n\\n    function inverse(Fr memory fr) internal view returns (Fr memory) {\\n        require(fr.value != 0);\\n        return pow(fr, r_mod - 2);\\n    }\\n\\n    function add_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = addmod(self.value, other.value, r_mod);\\n    }\\n\\n    function sub_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = addmod(self.value, r_mod - other.value, r_mod);\\n    }\\n\\n    function mul_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = mulmod(self.value, other.value, r_mod);\\n    }\\n\\n    function pow(Fr memory self, uint256 power) internal view returns (Fr memory) {\\n        uint256[6] memory input = [32, 32, 32, self.value, power, r_mod];\\n        uint256[1] memory result;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 0x05, input, 0xc0, result, 0x20)\\n        }\\n        require(success);\\n        return Fr({value: result[0]});\\n    }\\n\\n    // Encoding of field elements is: X[0] * z + X[1]\\n    struct G2Point {\\n        uint256[2] X;\\n        uint256[2] Y;\\n    }\\n\\n    function P1() internal pure returns (G1Point memory) {\\n        return G1Point(1, 2);\\n    }\\n\\n    function new_g1(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n        return G1Point(x, y);\\n    }\\n\\n    // function new_g1_checked(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n    function new_g1_checked(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n        if (x == 0 && y == 0) {\\n            // point of infinity is (0,0)\\n            return G1Point(x, y);\\n        }\\n\\n        // check encoding\\n        require(x < q_mod, \\\"x axis isn't valid\\\");\\n        require(y < q_mod, \\\"y axis isn't valid\\\");\\n        // check on curve\\n        uint256 lhs = mulmod(y, y, q_mod); // y^2\\n\\n        uint256 rhs = mulmod(x, x, q_mod); // x^2\\n        rhs = mulmod(rhs, x, q_mod); // x^3\\n        rhs = addmod(rhs, bn254_b_coeff, q_mod); // x^3 + b\\n        require(lhs == rhs, \\\"is not on curve\\\");\\n\\n        return G1Point(x, y);\\n    }\\n\\n    function new_g2(uint256[2] memory x, uint256[2] memory y) internal pure returns (G2Point memory) {\\n        return G2Point(x, y);\\n    }\\n\\n    function copy_g1(G1Point memory self) internal pure returns (G1Point memory result) {\\n        result.X = self.X;\\n        result.Y = self.Y;\\n    }\\n\\n    function P2() internal pure returns (G2Point memory) {\\n        // for some reason ethereum expects to have c1*v + c0 form\\n\\n        return\\n            G2Point(\\n                [\\n                    0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,\\n                    0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\\n                ],\\n                [\\n                    0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,\\n                    0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\\n                ]\\n            );\\n    }\\n\\n    function negate(G1Point memory self) internal pure {\\n        // The prime q in the base field F_q for G1\\n        if (self.Y == 0) {\\n            require(self.X == 0);\\n            return;\\n        }\\n\\n        self.Y = q_mod - self.Y;\\n    }\\n\\n    function point_add(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) {\\n        point_add_into_dest(p1, p2, r);\\n        return r;\\n    }\\n\\n    function point_add_assign(G1Point memory p1, G1Point memory p2) internal view {\\n        point_add_into_dest(p1, p2, p1);\\n    }\\n\\n    function point_add_into_dest(\\n        G1Point memory p1,\\n        G1Point memory p2,\\n        G1Point memory dest\\n    ) internal view {\\n        if (p2.X == 0 && p2.Y == 0) {\\n            // we add zero, nothing happens\\n            dest.X = p1.X;\\n            dest.Y = p1.Y;\\n            return;\\n        } else if (p1.X == 0 && p1.Y == 0) {\\n            // we add into zero, and we add non-zero point\\n            dest.X = p2.X;\\n            dest.Y = p2.Y;\\n            return;\\n        } else {\\n            uint256[4] memory input;\\n\\n            input[0] = p1.X;\\n            input[1] = p1.Y;\\n            input[2] = p2.X;\\n            input[3] = p2.Y;\\n\\n            bool success;\\n            assembly {\\n                success := staticcall(gas(), 6, input, 0x80, dest, 0x40)\\n            }\\n            require(success);\\n        }\\n    }\\n\\n    function point_sub_assign(G1Point memory p1, G1Point memory p2) internal view {\\n        point_sub_into_dest(p1, p2, p1);\\n    }\\n\\n    function point_sub_into_dest(\\n        G1Point memory p1,\\n        G1Point memory p2,\\n        G1Point memory dest\\n    ) internal view {\\n        if (p2.X == 0 && p2.Y == 0) {\\n            // we subtracted zero, nothing happens\\n            dest.X = p1.X;\\n            dest.Y = p1.Y;\\n            return;\\n        } else if (p1.X == 0 && p1.Y == 0) {\\n            // we subtract from zero, and we subtract non-zero point\\n            dest.X = p2.X;\\n            dest.Y = q_mod - p2.Y;\\n            return;\\n        } else {\\n            uint256[4] memory input;\\n\\n            input[0] = p1.X;\\n            input[1] = p1.Y;\\n            input[2] = p2.X;\\n            input[3] = q_mod - p2.Y;\\n\\n            bool success = false;\\n            assembly {\\n                success := staticcall(gas(), 6, input, 0x80, dest, 0x40)\\n            }\\n            require(success);\\n        }\\n    }\\n\\n    function point_mul(G1Point memory p, Fr memory s) internal view returns (G1Point memory r) {\\n        // https://eips.ethereum.org/EIPS/eip-197\\n        // Elliptic curve points are encoded as a Jacobian pair (X, Y) where the point at infinity is encoded as (0, 0)\\n        // TODO\\n        if (p.X == 0 && p.Y == 1) {\\n            p.Y = 0;\\n        }\\n        point_mul_into_dest(p, s, r);\\n        return r;\\n    }\\n\\n    function point_mul_assign(G1Point memory p, Fr memory s) internal view {\\n        point_mul_into_dest(p, s, p);\\n    }\\n\\n    function point_mul_into_dest(\\n        G1Point memory p,\\n        Fr memory s,\\n        G1Point memory dest\\n    ) internal view {\\n        uint256[3] memory input;\\n        input[0] = p.X;\\n        input[1] = p.Y;\\n        input[2] = s.value;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 7, input, 0x60, dest, 0x40)\\n        }\\n        require(success);\\n    }\\n\\n    function pairing(G1Point[] memory p1, G2Point[] memory p2) internal view returns (bool) {\\n        require(p1.length == p2.length);\\n        uint256 elements = p1.length;\\n        uint256 inputSize = elements * 6;\\n        uint256[] memory input = new uint256[](inputSize);\\n        for (uint256 i = 0; i < elements; ) {\\n            input[i * 6 + 0] = p1[i].X;\\n            input[i * 6 + 1] = p1[i].Y;\\n            input[i * 6 + 2] = p2[i].X[0];\\n            input[i * 6 + 3] = p2[i].X[1];\\n            input[i * 6 + 4] = p2[i].Y[0];\\n            input[i * 6 + 5] = p2[i].Y[1];\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n        uint256[1] memory out;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20)\\n        }\\n        require(success);\\n        return out[0] != 0;\\n    }\\n\\n    /// Convenience method for a pairing check for two pairs.\\n    function pairingProd2(\\n        G1Point memory a1,\\n        G2Point memory a2,\\n        G1Point memory b1,\\n        G2Point memory b2\\n    ) internal view returns (bool) {\\n        G1Point[] memory p1 = new G1Point[](2);\\n        G2Point[] memory p2 = new G2Point[](2);\\n        p1[0] = a1;\\n        p1[1] = b1;\\n        p2[0] = a2;\\n        p2[1] = b2;\\n        return pairing(p1, p2);\\n    }\\n}\\n\",\"keccak256\":\"0x0532cd43e648a5236d854c85b47d83e4d4faa86ccb87322de0dcc52f0956ee1d\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/TranscriptLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./PairingsBn254.sol\\\";\\n\\nlibrary TranscriptLib {\\n    // flip                    0xe000000000000000000000000000000000000000000000000000000000000000;\\n    uint256 constant FR_MASK = 0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n    uint32 constant DST_0 = 0;\\n    uint32 constant DST_1 = 1;\\n    uint32 constant DST_CHALLENGE = 2;\\n\\n    struct Transcript {\\n        bytes32 state_0;\\n        bytes32 state_1;\\n        uint32 challenge_counter;\\n    }\\n\\n    function new_transcript() internal pure returns (Transcript memory t) {\\n        t.state_0 = bytes32(0);\\n        t.state_1 = bytes32(0);\\n        t.challenge_counter = 0;\\n    }\\n\\n    function update_with_u256(Transcript memory self, uint256 value) internal pure {\\n        bytes32 old_state_0 = self.state_0;\\n        self.state_0 = keccak256(abi.encodePacked(DST_0, old_state_0, self.state_1, value));\\n        self.state_1 = keccak256(abi.encodePacked(DST_1, old_state_0, self.state_1, value));\\n    }\\n\\n    function update_with_fr(Transcript memory self, PairingsBn254.Fr memory value) internal pure {\\n        update_with_u256(self, value.value);\\n    }\\n\\n    function update_with_g1(Transcript memory self, PairingsBn254.G1Point memory p) internal pure {\\n        update_with_u256(self, p.X);\\n        update_with_u256(self, p.Y);\\n    }\\n\\n    function get_challenge(Transcript memory self) internal pure returns (PairingsBn254.Fr memory challenge) {\\n        bytes32 query = keccak256(abi.encodePacked(DST_CHALLENGE, self.state_0, self.state_1, self.challenge_counter));\\n        self.challenge_counter += 1;\\n        challenge = PairingsBn254.Fr({value: uint256(query) & FR_MASK});\\n    }\\n}\\n\",\"keccak256\":\"0x56cd646af0899ea51be78a046b647578bae59714f5f3e3c85010b278c96bfdcc\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IDiamondCut.sol":{"IDiamondCut":{"abi":[{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facet","type":"address"},{"internalType":"enum Diamond.Action","name":"action","type":"uint8"},{"internalType":"bool","name":"isFreezable","type":"bool"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct Diamond.FacetCut[]","name":"_facetCuts","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_initAddress","type":"address"}],"name":"DiamondCutProposal","type":"event"},{"anonymous":false,"inputs":[],"name":"DiamondCutProposalCancelation","type":"event"},{"anonymous":false,"inputs":[{"components":[{"components":[{"internalType":"address","name":"facet","type":"address"},{"internalType":"enum Diamond.Action","name":"action","type":"uint8"},{"internalType":"bool","name":"isFreezable","type":"bool"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"internalType":"struct Diamond.FacetCut[]","name":"facetCuts","type":"tuple[]"},{"internalType":"address","name":"initAddress","type":"address"},{"internalType":"bytes","name":"initCalldata","type":"bytes"}],"indexed":false,"internalType":"struct Diamond.DiamondCutData","name":"_diamondCut","type":"tuple"}],"name":"DiamondCutProposalExecution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"EmergencyDiamondCutApproved","type":"event"},{"anonymous":false,"inputs":[],"name":"EmergencyFreeze","type":"event"},{"anonymous":false,"inputs":[],"name":"Unfreeze","type":"event"},{"inputs":[{"internalType":"bytes32","name":"_diamondCutHash","type":"bytes32"}],"name":"approveEmergencyDiamondCutAsSecurityCouncilMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelDiamondCutProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyFreezeDiamond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"facet","type":"address"},{"internalType":"enum Diamond.Action","name":"action","type":"uint8"},{"internalType":"bool","name":"isFreezable","type":"bool"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"internalType":"struct Diamond.FacetCut[]","name":"facetCuts","type":"tuple[]"},{"internalType":"address","name":"initAddress","type":"address"},{"internalType":"bytes","name":"initCalldata","type":"bytes"}],"internalType":"struct Diamond.DiamondCutData","name":"_diamondCut","type":"tuple"}],"name":"executeDiamondCutProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"facet","type":"address"},{"internalType":"enum Diamond.Action","name":"action","type":"uint8"},{"internalType":"bool","name":"isFreezable","type":"bool"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"internalType":"struct Diamond.FacetCut[]","name":"_facetCuts","type":"tuple[]"},{"internalType":"address","name":"_initAddress","type":"address"}],"name":"proposeDiamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unfreezeDiamond","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"approveEmergencyDiamondCutAsSecurityCouncilMember(bytes32)":"635abadb","cancelDiamondCutProposal()":"62c727ab","emergencyFreezeDiamond()":"b2f44526","executeDiamondCutProposal(((address,uint8,bool,bytes4[])[],address,bytes))":"0b66fc12","proposeDiamondCut((address,uint8,bool,bytes4[])[],address)":"1a97bca1","unfreezeDiamond()":"17338945"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facet\",\"type\":\"address\"},{\"internalType\":\"enum Diamond.Action\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isFreezable\",\"type\":\"bool\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct Diamond.FacetCut[]\",\"name\":\"_facetCuts\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_initAddress\",\"type\":\"address\"}],\"name\":\"DiamondCutProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"DiamondCutProposalCancelation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facet\",\"type\":\"address\"},{\"internalType\":\"enum Diamond.Action\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isFreezable\",\"type\":\"bool\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct Diamond.FacetCut[]\",\"name\":\"facetCuts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"initAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initCalldata\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct Diamond.DiamondCutData\",\"name\":\"_diamondCut\",\"type\":\"tuple\"}],\"name\":\"DiamondCutProposalExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"EmergencyDiamondCutApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EmergencyFreeze\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Unfreeze\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_diamondCutHash\",\"type\":\"bytes32\"}],\"name\":\"approveEmergencyDiamondCutAsSecurityCouncilMember\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelDiamondCutProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emergencyFreezeDiamond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facet\",\"type\":\"address\"},{\"internalType\":\"enum Diamond.Action\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isFreezable\",\"type\":\"bool\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct Diamond.FacetCut[]\",\"name\":\"facetCuts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"initAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initCalldata\",\"type\":\"bytes\"}],\"internalType\":\"struct Diamond.DiamondCutData\",\"name\":\"_diamondCut\",\"type\":\"tuple\"}],\"name\":\"executeDiamondCutProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facet\",\"type\":\"address\"},{\"internalType\":\"enum Diamond.Action\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isFreezable\",\"type\":\"bool\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct Diamond.FacetCut[]\",\"name\":\"_facetCuts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_initAddress\",\"type\":\"address\"}],\"name\":\"proposeDiamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unfreezeDiamond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IDiamondCut.sol\":\"IDiamondCut\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8;\\n\\nimport \\\"../libraries/Diamond.sol\\\";\\n\\ninterface IDiamondCut {\\n    function proposeDiamondCut(Diamond.FacetCut[] calldata _facetCuts, address _initAddress) external;\\n\\n    function cancelDiamondCutProposal() external;\\n\\n    function executeDiamondCutProposal(Diamond.DiamondCutData calldata _diamondCut) external;\\n\\n    function emergencyFreezeDiamond() external;\\n\\n    function unfreezeDiamond() external;\\n\\n    function approveEmergencyDiamondCutAsSecurityCouncilMember(bytes32 _diamondCutHash) external;\\n\\n    // FIXME: token holders should have the ability to cancel the upgrade\\n\\n    event DiamondCutProposal(Diamond.FacetCut[] _facetCuts, address _initAddress);\\n\\n    event DiamondCutProposalCancelation();\\n\\n    event DiamondCutProposalExecution(Diamond.DiamondCutData _diamondCut);\\n\\n    event EmergencyFreeze();\\n\\n    event Unfreeze();\\n\\n    event EmergencyDiamondCutApproved(address _address);\\n}\\n\",\"keccak256\":\"0x75be50498de7a7d1a95493aa066e45ed57f8f10f5176be3744ee03e7d5cc1141\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/Diamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/// @author Matter Labs\\n/// @notice The helper library for managing the EIP-2535 diamond proxy.\\nlibrary Diamond {\\n    /// @dev Magic value that should be returned by diamond cut initialize contracts.\\n    /// @dev Used to distinguish calls to contracts that were supposed to be used as diamond initializer from other contracts.\\n    bytes32 constant DIAMOND_INIT_SUCCESS_RETURN_VALUE = keccak256(\\\"diamond.zksync.init\\\");\\n\\n    /// @dev Storage position of `DiamondStorage` structure.\\n    bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n    /// @dev Utility struct that contains associated facet & meta information of selector\\n    /// @param facetAddress address of the facet which is connected with selector\\n    /// @param selectorPosition index in `FacetToSelectors.selectors` array, where is selector stored\\n    /// @param isFreezable denotes whether the selector can be frozen.\\n    struct SelectorToFacet {\\n        address facetAddress;\\n        uint16 selectorPosition;\\n        bool isFreezable;\\n    }\\n\\n    /// @dev Utility struct that contains associated selectors & meta information of facet\\n    /// @param selectors list of all selectors that belong to the facet\\n    /// @param facetPosition index in `DiamondStorage.facets` array, where is facet stored\\n    struct FacetToSelectors {\\n        bytes4[] selectors;\\n        uint16 facetPosition;\\n    }\\n\\n    /// @notice The structure that holds all diamond proxy associated parameters\\n    /// @dev According to the EIP-2535 should be stored on a special storage key - `DIAMOND_STORAGE_POSITION`\\n    /// @param selectorToFacet An mapping from selector to the facet address and its' meta information\\n    /// @param facetToSelectors An mapping from facet address to its' selector with meta information\\n    /// @param facets The array of all unique facet addresses that belong to the diamond proxy\\n    /// @param isFrozen Denotes whether the diamond proxy is frozen and all freezable facets are not accessible\\n    struct DiamondStorage {\\n        mapping(bytes4 => SelectorToFacet) selectorToFacet;\\n        mapping(address => FacetToSelectors) facetToSelectors;\\n        address[] facets;\\n        bool isFrozen;\\n    }\\n\\n    /// @return diamondStorage The pointer to the storage where all specific diamond proxy parameters stored\\n    function getDiamondStorage() internal pure returns (DiamondStorage storage diamondStorage) {\\n        bytes32 position = DIAMOND_STORAGE_POSITION;\\n        assembly {\\n            diamondStorage.slot := position\\n        }\\n    }\\n\\n    /// @notice Action on selectors for one facet on a Diamond Cut\\n    enum Action {\\n        Add,\\n        Replace,\\n        Remove\\n    }\\n\\n    /// @dev Parameters for diamond changes that touch one of the facets\\n    /// @param facet The address of facet that's affected by the cut\\n    /// @param action The action that is made on the facet\\n    /// @param isFreezable Denotes whether the facet & all their selectors can be frozen\\n    /// @param selectors An array of unique selectors that belongs to the facet address\\n    struct FacetCut {\\n        address facet;\\n        Action action;\\n        bool isFreezable;\\n        bytes4[] selectors;\\n    }\\n\\n    /// @dev Structure of the diamond proxy changes\\n    /// @param facetCuts The set of changes (adding/removing/replacement) of implementation contracts\\n    /// @param initAddress The address that's dellegate called after setting up new facet changes\\n    /// @param initCalldata Calldata for the delegete call to `initAddress`\\n    struct DiamondCutData {\\n        FacetCut[] facetCuts;\\n        address initAddress;\\n        bytes initCalldata;\\n    }\\n\\n    /// @dev Add/replace/remove any number of selectors and optionally execute a function with delegatecall\\n    /// @param _diamondCut Diamond's facet changes and the parameters to optional initialization delegatecall\\n    function diamondCut(DiamondCutData memory _diamondCut) internal {\\n        FacetCut[] memory facetCuts = _diamondCut.facetCuts;\\n        address initAddress = _diamondCut.initAddress;\\n        bytes memory initCalldata = _diamondCut.initCalldata;\\n        for (uint256 i = 0; i < facetCuts.length; ++i) {\\n            Action action = facetCuts[i].action;\\n            address facet = facetCuts[i].facet;\\n            bool isFacetFreezable = facetCuts[i].isFreezable;\\n            bytes4[] memory selectors = facetCuts[i].selectors;\\n\\n            require(selectors.length > 0, \\\"B\\\"); // no functions for diamond cut\\n\\n            if (action == Action.Add) {\\n                _addFunctions(facet, selectors, isFacetFreezable);\\n            } else if (action == Action.Replace) {\\n                _replaceFunctions(facet, selectors, isFacetFreezable);\\n            } else if (action == Action.Remove) {\\n                _removeFunctions(facet, selectors);\\n            } else {\\n                revert(\\\"C\\\"); // undefined diamond cut action\\n            }\\n        }\\n\\n        _initializeDiamondCut(initAddress, initCalldata);\\n        emit DiamondCut(facetCuts, initAddress, initCalldata);\\n    }\\n\\n    event DiamondCut(FacetCut[] facetCuts, address initAddress, bytes initCalldata);\\n\\n    /// @dev Add new functions to the diamond proxy\\n    /// NOTE: expect but NOT enforce that `_selectors` is NON-EMPTY array\\n    function _addFunctions(\\n        address _facet,\\n        bytes4[] memory _selectors,\\n        bool _isFacetFreezable\\n    ) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        require(_facet != address(0), \\\"G\\\"); // facet with zero address cannot be added\\n\\n        // Add facet to the list of facets if the facet address is new one\\n        _saveFacetIfNew(_facet);\\n\\n        for (uint256 i = 0; i < _selectors.length; ++i) {\\n            bytes4 selector = _selectors[i];\\n            SelectorToFacet memory oldFacet = ds.selectorToFacet[selector];\\n            require(oldFacet.facetAddress == address(0), \\\"J\\\"); // facet for this selector already exists\\n\\n            _addOneFunction(_facet, selector, _isFacetFreezable);\\n        }\\n    }\\n\\n    /// @dev Change associated facets to already known function selectors\\n    /// NOTE: expect but NOT enforce that `_selectors` is NON-EMPTY array\\n    function _replaceFunctions(\\n        address _facet,\\n        bytes4[] memory _selectors,\\n        bool _isFacetFreezable\\n    ) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        require(_facet != address(0), \\\"K\\\"); // cannot replace facet with zero address\\n\\n        // Add facet to the list of facets if the facet address is a new one\\n        _saveFacetIfNew(_facet);\\n\\n        for (uint256 i = 0; i < _selectors.length; ++i) {\\n            bytes4 selector = _selectors[i];\\n            SelectorToFacet memory oldFacet = ds.selectorToFacet[selector];\\n            require(oldFacet.facetAddress != address(0), \\\"L\\\"); // it is impossible to replace the facet with zero address\\n\\n            _removeOneFunction(oldFacet.facetAddress, selector);\\n            _addOneFunction(_facet, selector, _isFacetFreezable);\\n        }\\n    }\\n\\n    /// @dev Remove association with function and facet\\n    /// NOTE: expect but NOT enforce that `_selectors` is NON-EMPTY array\\n    function _removeFunctions(address _facet, bytes4[] memory _selectors) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        require(_facet == address(0), \\\"a1\\\"); // facet address must be zero\\n\\n        for (uint256 i = 0; i < _selectors.length; ++i) {\\n            bytes4 selector = _selectors[i];\\n            SelectorToFacet memory oldFacet = ds.selectorToFacet[selector];\\n            require(oldFacet.facetAddress != address(0), \\\"a2\\\"); // Can't delete a non-existent facet\\n\\n            _removeOneFunction(oldFacet.facetAddress, selector);\\n        }\\n    }\\n\\n    /// @dev Add address to the list of known facets if it is not on the list yet\\n    /// NOTE: should be called ONLY before adding a new selector associated with the address\\n    function _saveFacetIfNew(address _facet) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        uint16 selectorsLength = uint16(ds.facetToSelectors[_facet].selectors.length);\\n        // If there are no selectors associated with facet then save facet as new one\\n        if (selectorsLength == 0) {\\n            ds.facetToSelectors[_facet].facetPosition = uint16(ds.facets.length);\\n            ds.facets.push(_facet);\\n        }\\n    }\\n\\n    /// @dev Add one function to the already known facet\\n    /// NOTE: It is expected but NOT enforced that:\\n    /// - `_facet` is NON-ZERO address\\n    /// - `_facet` is already stored address in `DiamondStorage.facets`\\n    /// - `_selector` is NOT associated by another facet\\n    function _addOneFunction(\\n        address _facet,\\n        bytes4 _selector,\\n        bool _isSelectorFreezable\\n    ) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        uint16 selectorPosition = uint16(ds.facetToSelectors[_facet].selectors.length);\\n        ds.selectorToFacet[_selector] = SelectorToFacet({\\n            facetAddress: _facet,\\n            selectorPosition: selectorPosition,\\n            isFreezable: _isSelectorFreezable\\n        });\\n        ds.facetToSelectors[_facet].selectors.push(_selector);\\n    }\\n\\n    /// @dev Remove one associated function with facet\\n    /// NOTE: It is expected but NOT enforced that `_facet` is NON-ZERO address\\n    function _removeOneFunction(address _facet, bytes4 _selector) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        // Get index of `FacetToSelectors.selectors` of the selector and last element of array\\n        uint256 selectorPosition = ds.selectorToFacet[_selector].selectorPosition;\\n        uint256 lastSelectorPosition = ds.facetToSelectors[_facet].selectors.length - 1;\\n\\n        // If the selector is not at the end of the array then move the last element to the selector position\\n        if (selectorPosition != lastSelectorPosition) {\\n            bytes4 lastSelector = ds.facetToSelectors[_facet].selectors[lastSelectorPosition];\\n\\n            ds.facetToSelectors[_facet].selectors[selectorPosition] = lastSelector;\\n            ds.selectorToFacet[lastSelector].selectorPosition = uint16(selectorPosition);\\n        }\\n\\n        // Remove last element from the selectors array\\n        ds.facetToSelectors[_facet].selectors.pop();\\n\\n        // Finally, clean up the association with facet\\n        delete ds.selectorToFacet[_selector];\\n\\n        // If there are no selectors for facet then remove the facet from the list of known facets\\n        if (lastSelectorPosition == 0) {\\n            _removeFacet(_facet);\\n        }\\n    }\\n\\n    /// @dev remove facet from the list of known facets\\n    /// NOTE: It is expected but NOT enforced that there are no selectors associated wih `_facet`\\n    function _removeFacet(address _facet) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        // Get index of `DiamondStorage.facets` of the facet and last element of array\\n        uint256 facetPosition = ds.facetToSelectors[_facet].facetPosition;\\n        uint256 lastFacetPosition = ds.facets.length - 1;\\n\\n        // If the facet is not at the end of the array then move the last element to the facet position\\n        if (facetPosition != lastFacetPosition) {\\n            address lastFacet = ds.facets[lastFacetPosition];\\n\\n            ds.facets[facetPosition] = lastFacet;\\n            ds.facetToSelectors[lastFacet].facetPosition = uint16(facetPosition);\\n        }\\n\\n        // Remove last element from the facets array\\n        ds.facets.pop();\\n    }\\n\\n    /// @dev Delegates call to the initialization address with provided calldata\\n    /// @dev Used as a final step of diamond cut to execute the logic of the initialization for changed facets\\n    function _initializeDiamondCut(address _init, bytes memory _calldata) private {\\n        if (_init == address(0)) {\\n            require(_calldata.length == 0, \\\"H\\\"); // Non-empty calldata for zero address\\n        } else {\\n            // Do not check whether `_init` is a contract since later we check that it returns data.\\n            (bool success, bytes memory data) = _init.delegatecall(_calldata);\\n            require(success, \\\"I\\\"); // delegatecall failed\\n\\n            // Check that called contract returns magic value to make sure that contract logic\\n            // supposed to be used as diamond cut initializer.\\n            require(data.length == 32 && abi.decode(data, (bytes32)) == DIAMOND_INIT_SUCCESS_RETURN_VALUE, \\\"lp\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfedbcad9963963e9570a972b269e7241b902f029d488b52fbd4e9a2d67bf8e3d\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IExecutor.sol":{"IExecutor":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"BlockCommit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"BlockExecution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalBlocksCommitted","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBlocksVerified","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBlocksExecuted","type":"uint256"}],"name":"BlocksRevert","type":"event"},{"inputs":[{"components":[{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"internalType":"struct IExecutor.StoredBlockInfo","name":"_lastCommittedBlockData","type":"tuple"},{"components":[{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"bytes32","name":"newStateRoot","type":"bytes32"},{"internalType":"uint16","name":"ergsPerCodeDecommittmentWord","type":"uint16"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes","name":"initialStorageChanges","type":"bytes"},{"internalType":"bytes","name":"repeatedStorageChanges","type":"bytes"},{"internalType":"bytes","name":"l2Logs","type":"bytes"},{"internalType":"bytes[]","name":"l2ArbitraryLengthMessages","type":"bytes[]"},{"internalType":"bytes[]","name":"factoryDeps","type":"bytes[]"}],"internalType":"struct IExecutor.CommitBlockInfo[]","name":"_newBlocksData","type":"tuple[]"}],"name":"commitBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"internalType":"struct IExecutor.StoredBlockInfo[]","name":"_blocksData","type":"tuple[]"}],"name":"executeBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"internalType":"struct IExecutor.StoredBlockInfo","name":"_prevBlock","type":"tuple"},{"components":[{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"internalType":"struct IExecutor.StoredBlockInfo[]","name":"_committedBlocks","type":"tuple[]"},{"components":[{"internalType":"uint256[]","name":"recurisiveAggregationInput","type":"uint256[]"},{"internalType":"uint256[]","name":"serializedProof","type":"uint256[]"}],"internalType":"struct IExecutor.ProofInput","name":"_proof","type":"tuple"}],"name":"proveBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blocksToRevert","type":"uint256"}],"name":"revertBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"commitBlocks((uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,uint64,uint64,bytes32,uint16,uint256,bytes32,bytes32,bytes,bytes,bytes,bytes[],bytes[])[])":"fa4f3688","executeBlocks((uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[])":"ce9dcf16","proveBlocks((uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[],(uint256[],uint256[]))":"7739cbe7","revertBlocks(uint256)":"a9a2d18a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"BlockCommit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"BlockExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBlocksCommitted\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBlocksVerified\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBlocksExecuted\",\"type\":\"uint256\"}],\"name\":\"BlocksRevert\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"indexRepeatedStorageChanges\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"numberOfLayer1Txs\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"priorityOperationsHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l2LogsTreeRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"internalType\":\"struct IExecutor.StoredBlockInfo\",\"name\":\"_lastCommittedBlockData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"indexRepeatedStorageChanges\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"newStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"ergsPerCodeDecommittmentWord\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"numberOfLayer1Txs\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"l2LogsTreeRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"priorityOperationsHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"initialStorageChanges\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"repeatedStorageChanges\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"l2Logs\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"l2ArbitraryLengthMessages\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"factoryDeps\",\"type\":\"bytes[]\"}],\"internalType\":\"struct IExecutor.CommitBlockInfo[]\",\"name\":\"_newBlocksData\",\"type\":\"tuple[]\"}],\"name\":\"commitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"indexRepeatedStorageChanges\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"numberOfLayer1Txs\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"priorityOperationsHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l2LogsTreeRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"internalType\":\"struct IExecutor.StoredBlockInfo[]\",\"name\":\"_blocksData\",\"type\":\"tuple[]\"}],\"name\":\"executeBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"indexRepeatedStorageChanges\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"numberOfLayer1Txs\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"priorityOperationsHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l2LogsTreeRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"internalType\":\"struct IExecutor.StoredBlockInfo\",\"name\":\"_prevBlock\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"indexRepeatedStorageChanges\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"numberOfLayer1Txs\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"priorityOperationsHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l2LogsTreeRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"internalType\":\"struct IExecutor.StoredBlockInfo[]\",\"name\":\"_committedBlocks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"recurisiveAggregationInput\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"serializedProof\",\"type\":\"uint256[]\"}],\"internalType\":\"struct IExecutor.ProofInput\",\"name\":\"_proof\",\"type\":\"tuple\"}],\"name\":\"proveBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blocksToRevert\",\"type\":\"uint256\"}],\"name\":\"revertBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"BlockCommit(uint256)\":{\"notice\":\"Event emitted when a block is committed\"},\"BlockExecution(uint256)\":{\"notice\":\"Event emitted when a block is executed\"},\"BlocksRevert(uint256,uint256,uint256)\":{\"notice\":\"Event emitted when blocks are reverted\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IExecutor.sol\":\"IExecutor\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8;\\n\\ninterface IExecutor {\\n    /// @notice Rollup block stored data\\n    /// @param blockNumber Rollup block number\\n    /// @param blockHash Hash of L2 block\\n    /// @param indexRepeatedStorageChanges The serial number of the shortcut index that's used as a unique identifier for storage keys that were used twice or more\\n    /// @param numberOfLayer1Txs Number of priority operations to be processed\\n    /// @param priorityOperationsHash Hash of all priority operations from this block\\n    /// @param l2LogsTreeRoot Root hash of tree that contains L2 -> L1 messages from this block\\n    /// @param timestamp Rollup block timestamp, have the same format as Ethereum block constant\\n    /// @param stateRoot Merkle root of the rollup state tree\\n    /// @param commitment Verified input for the zkSync circuit\\n    struct StoredBlockInfo {\\n        uint64 blockNumber;\\n        bytes32 blockHash;\\n        uint64 indexRepeatedStorageChanges;\\n        uint256 numberOfLayer1Txs;\\n        bytes32 priorityOperationsHash;\\n        bytes32 l2LogsTreeRoot;\\n        uint256 timestamp;\\n        bytes32 commitment;\\n    }\\n\\n    /// @notice Data needed to commit new block\\n    /// @param blockNumber Number of the committed block\\n    /// @param timestamp Unix timestamp denoting the start of the block execution\\n    /// @param indexRepeatedStorageChanges The serial number of the shortcut index that's used as a unique identifier for storage keys that were used twice or more\\n    /// @param newStateRoot The state root of the full state tree\\n    /// @param ergsPerPubdataByteInBlock Price in ergs per one byte of published pubdata in block\\n    /// @param ergsPerCodeDecommittmentWord Price in ergs per decommittment of one machine word from l2 bytecode\\n    /// @param numberOfLayer1Txs Number of priority operations to be processed\\n    /// @param l2LogsTreeRoot The root hash of the tree that contains all L2 -> L1 logs in the block\\n    /// @param priorityOperationsHash Hash of all priority operations from this block\\n    /// @param initialStorageChanges Storage write access as a concatenation key-value\\n    /// @param repeatedStorageChanges Storage write access as a concatenation index-value\\n    /// @param l2Logs concatenation of all L2 -> L1 logs in the block\\n    /// @param l2ArbitraryLengthMessages array of hash preimages that were sent as value of L2 logs by special system L2 contract\\n    /// @param factoryDeps array of l2 bytecodes that were marked as known on L2\\n    struct CommitBlockInfo {\\n        uint64 blockNumber;\\n        uint64 timestamp;\\n        uint64 indexRepeatedStorageChanges;\\n        bytes32 newStateRoot;\\n        uint16 ergsPerCodeDecommittmentWord;\\n        uint256 numberOfLayer1Txs;\\n        bytes32 l2LogsTreeRoot;\\n        bytes32 priorityOperationsHash;\\n        bytes initialStorageChanges;\\n        bytes repeatedStorageChanges;\\n        bytes l2Logs;\\n        bytes[] l2ArbitraryLengthMessages;\\n        bytes[] factoryDeps;\\n    }\\n\\n    /// @notice Recursive proof input data (individual commitments are constructed onchain)\\n    /// TODO: The verifier integration is not finished yet, change the structure for compatibility later\\n    struct ProofInput {\\n        uint256[] recurisiveAggregationInput;\\n        uint256[] serializedProof;\\n    }\\n\\n    function commitBlocks(StoredBlockInfo calldata _lastCommittedBlockData, CommitBlockInfo[] calldata _newBlocksData)\\n        external;\\n\\n    function proveBlocks(\\n        StoredBlockInfo calldata _prevBlock,\\n        StoredBlockInfo[] calldata _committedBlocks,\\n        ProofInput calldata _proof\\n    ) external;\\n\\n    function executeBlocks(StoredBlockInfo[] calldata _blocksData) external;\\n\\n    function revertBlocks(uint256 _blocksToRevert) external;\\n\\n    /// @notice Event emitted when a block is committed\\n    event BlockCommit(uint256 indexed blockNumber);\\n\\n    /// @notice Event emitted when a block is executed\\n    event BlockExecution(uint256 indexed blockNumber);\\n\\n    /// @notice Event emitted when blocks are reverted\\n    event BlocksRevert(uint256 totalBlocksCommitted, uint256 totalBlocksVerified, uint256 totalBlocksExecuted);\\n}\\n\",\"keccak256\":\"0xc8a0de30a54c7abc686b4d5f0bf9eaf4733c6ddd5a79880e85be77258ce03a48\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"events":{"BlockCommit(uint256)":{"notice":"Event emitted when a block is committed"},"BlockExecution(uint256)":{"notice":"Event emitted when a block is executed"},"BlocksRevert(uint256,uint256,uint256)":{"notice":"Event emitted when blocks are reverted"}},"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IGetters.sol":{"IGetters":{"abi":[{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"facetAddress","outputs":[{"internalType":"address","name":"facet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facetAddresses","outputs":[{"internalType":"address[]","name":"facets","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_facet","type":"address"}],"name":"facetFunctionSelectors","outputs":[{"internalType":"bytes4[]","name":"","type":"bytes4[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facets","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"internalType":"struct IGetters.Facet[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFirstUnprocessedPriorityTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGovernor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalBlocksCommitted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalBlocksExecuted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalBlocksVerified","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalPriorityTxs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVerifier","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_facet","type":"address"}],"name":"isFacetFreezable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"isFunctionFreezable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isValidator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"blockNumber","type":"uint32"}],"name":"l2LogsRootHash","outputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"facetAddress(bytes4)":"cdffacc6","facetAddresses()":"52ef6b2c","facetFunctionSelectors(address)":"adfca15e","facets()":"7a0ed627","getFirstUnprocessedPriorityTx()":"79823c9a","getGovernor()":"4fc07d75","getTotalBlocksCommitted()":"fe26699e","getTotalBlocksExecuted()":"39607382","getTotalBlocksVerified()":"af6a2dcd","getTotalPriorityTxs()":"a1954fc5","getVerifier()":"46657fe9","isFacetFreezable(address)":"c3bbd2d7","isFunctionFreezable(bytes4)":"e81e0ba1","isValidator(address)":"facd743b","l2LogsRootHash(uint32)":"54225f93"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"facetAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"facet\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facetAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"facets\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_facet\",\"type\":\"address\"}],\"name\":\"facetFunctionSelectors\",\"outputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"\",\"type\":\"bytes4[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facets\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IGetters.Facet[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFirstUnprocessedPriorityTx\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGovernor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalBlocksCommitted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalBlocksExecuted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalBlocksVerified\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalPriorityTxs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_facet\",\"type\":\"address\"}],\"name\":\"isFacetFreezable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"isFunctionFreezable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"}],\"name\":\"l2LogsRootHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IGetters.sol\":\"IGetters\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IGetters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8;\\n\\ninterface IGetters {\\n    /*//////////////////////////////////////////////////////////////\\n                            CUSTOM GETTERS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function getVerifier() external view returns (address);\\n\\n    function getGovernor() external view returns (address);\\n\\n    function getTotalBlocksCommitted() external view returns (uint256);\\n\\n    function getTotalBlocksVerified() external view returns (uint256);\\n\\n    function getTotalBlocksExecuted() external view returns (uint256);\\n\\n    function getTotalPriorityTxs() external view returns (uint256);\\n\\n    function getFirstUnprocessedPriorityTx() external view returns (uint256);\\n\\n    function isValidator(address _address) external view returns (bool);\\n\\n    function l2LogsRootHash(uint32 blockNumber) external view returns (bytes32 hash);\\n\\n    function isFunctionFreezable(bytes4 _selector) external view returns (bool);\\n\\n    function isFacetFreezable(address _facet) external view returns (bool);\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            DIAMOND LOUPE\\n    //////////////////////////////////////////////////////////////*/\\n\\n    /// @notice Fa\\u0441et structure compatible with the EIP-2535 diamond loupe\\n    /// @param addr The address of the facet contract\\n    /// @param selectors The NON-sorted array with selectors associated with facet\\n    struct Facet {\\n        address addr;\\n        bytes4[] selectors;\\n    }\\n\\n    function facets() external view returns (Facet[] memory);\\n\\n    function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory);\\n\\n    function facetAddresses() external view returns (address[] memory facets);\\n\\n    function facetAddress(bytes4 _selector) external view returns (address facet);\\n}\\n\",\"keccak256\":\"0x666d1cafd424c9174d55c6e97a529ae73eecba2c7c4b3387bf260bd0aa53b3bb\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IGovernance.sol":{"IGovernance":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isPorterAvailable","type":"bool"}],"name":"IsPorterAvailableStatusUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"NewGovernor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"previousBytecodeHash","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newBytecodeHash","type":"bytes32"}],"name":"NewL2BootloaderBytecodeHash","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"previousBytecodeHash","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newBytecodeHash","type":"bytes32"}],"name":"NewL2DefaultAccountBytecodeHash","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldPendingGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newPendingGovernor","type":"address"}],"name":"NewPendingGovernor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"validatorAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"isActive","type":"bool"}],"name":"ValidatorStatusUpdate","type":"event"},{"inputs":[],"name":"acceptGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_l2BootloaderBytecodeHash","type":"bytes32"}],"name":"setL2BootloaderBytecodeHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_l2DefaultAccountBytecodeHash","type":"bytes32"}],"name":"setL2DefaultAccountBytecodeHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPendingGovernor","type":"address"}],"name":"setPendingGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isPorterAvailable","type":"bool"}],"name":"setPorterAvailability","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_validator","type":"address"},{"internalType":"bool","name":"_active","type":"bool"}],"name":"setValidator","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"events":{"NewPendingGovernor(address,address)":{"details":"Also emitted when new governor is accepted and in this case, `newPendingGovernor` would be zero address"}},"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"acceptGovernor()":"e58bb639","setL2BootloaderBytecodeHash(bytes32)":"86cb9909","setL2DefaultAccountBytecodeHash(bytes32)":"0707ac09","setPendingGovernor(address)":"f235757f","setPorterAvailability(bool)":"1cc5d103","setValidator(address,bool)":"4623c91d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isPorterAvailable\",\"type\":\"bool\"}],\"name\":\"IsPorterAvailableStatusUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"NewGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousBytecodeHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newBytecodeHash\",\"type\":\"bytes32\"}],\"name\":\"NewL2BootloaderBytecodeHash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousBytecodeHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newBytecodeHash\",\"type\":\"bytes32\"}],\"name\":\"NewL2DefaultAccountBytecodeHash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldPendingGovernor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newPendingGovernor\",\"type\":\"address\"}],\"name\":\"NewPendingGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"name\":\"ValidatorStatusUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_l2BootloaderBytecodeHash\",\"type\":\"bytes32\"}],\"name\":\"setL2BootloaderBytecodeHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_l2DefaultAccountBytecodeHash\",\"type\":\"bytes32\"}],\"name\":\"setL2DefaultAccountBytecodeHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newPendingGovernor\",\"type\":\"address\"}],\"name\":\"setPendingGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_isPorterAvailable\",\"type\":\"bool\"}],\"name\":\"setPorterAvailability\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_active\",\"type\":\"bool\"}],\"name\":\"setValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"NewPendingGovernor(address,address)\":{\"details\":\"Also emitted when new governor is accepted and in this case, `newPendingGovernor` would be zero address\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"IsPorterAvailableStatusUpdate(bool)\":{\"notice\":\"Porter availability status changes\"},\"NewGovernor(address)\":{\"notice\":\"Governor changed\"},\"NewL2BootloaderBytecodeHash(bytes32,bytes32)\":{\"notice\":\"\\u0421hanges to the bytecode that is used in L2 as a bootloader (start program)\"},\"NewL2DefaultAccountBytecodeHash(bytes32,bytes32)\":{\"notice\":\"\\u0421hanges to the bytecode that is used in L2 as a default account\"},\"NewPendingGovernor(address,address)\":{\"notice\":\"pendingGovernor is changed\"},\"ValidatorStatusUpdate(address,bool)\":{\"notice\":\"Validator's status changed\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IGovernance.sol\":\"IGovernance\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IGovernance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8;\\n\\ninterface IGovernance {\\n    function setPendingGovernor(address _newPendingGovernor) external;\\n\\n    function acceptGovernor() external;\\n\\n    function setValidator(address _validator, bool _active) external;\\n\\n    function setL2BootloaderBytecodeHash(bytes32 _l2BootloaderBytecodeHash) external;\\n\\n    function setL2DefaultAccountBytecodeHash(bytes32 _l2DefaultAccountBytecodeHash) external;\\n\\n    function setPorterAvailability(bool _isPorterAvailable) external;\\n\\n    /// @notice \\u0421hanges to the bytecode that is used in L2 as a bootloader (start program)\\n    event NewL2BootloaderBytecodeHash(bytes32 indexed previousBytecodeHash, bytes32 indexed newBytecodeHash);\\n\\n    /// @notice \\u0421hanges to the bytecode that is used in L2 as a default account\\n    event NewL2DefaultAccountBytecodeHash(bytes32 indexed previousBytecodeHash, bytes32 indexed newBytecodeHash);\\n\\n    /// @notice Porter availability status changes\\n    event IsPorterAvailableStatusUpdate(bool isPorterAvailable);\\n\\n    /// @notice Validator's status changed\\n    event ValidatorStatusUpdate(address indexed validatorAddress, bool isActive);\\n\\n    /// @notice pendingGovernor is changed\\n    /// @dev Also emitted when new governor is accepted and in this case, `newPendingGovernor` would be zero address\\n    event NewPendingGovernor(address indexed oldPendingGovernor, address indexed newPendingGovernor);\\n\\n    /// @notice Governor changed\\n    event NewGovernor(address indexed newGovernor);\\n}\\n\",\"keccak256\":\"0xf198e4b73230e5768c32fa3355af1d376c7bfd9ee1b6ab1b3485efbed0eb1d50\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"events":{"IsPorterAvailableStatusUpdate(bool)":{"notice":"Porter availability status changes"},"NewGovernor(address)":{"notice":"Governor changed"},"NewL2BootloaderBytecodeHash(bytes32,bytes32)":{"notice":"Сhanges to the bytecode that is used in L2 as a bootloader (start program)"},"NewL2DefaultAccountBytecodeHash(bytes32,bytes32)":{"notice":"Сhanges to the bytecode that is used in L2 as a default account"},"NewPendingGovernor(address,address)":{"notice":"pendingGovernor is changed"},"ValidatorStatusUpdate(address,bool)":{"notice":"Validator's status changed"}},"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IMailbox.sol":{"IMailbox":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"txId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":false,"internalType":"uint64","name":"expirationBlock","type":"uint64"},{"components":[{"internalType":"uint256","name":"txType","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"},{"internalType":"uint256","name":"ergsLimit","type":"uint256"},{"internalType":"uint256","name":"ergsPerPubdataByteLimit","type":"uint256"},{"internalType":"uint256","name":"maxFeePerErg","type":"uint256"},{"internalType":"uint256","name":"maxPriorityFeePerErg","type":"uint256"},{"internalType":"uint256","name":"paymaster","type":"uint256"},{"internalType":"uint256[6]","name":"reserved","type":"uint256[6]"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256[]","name":"factoryDeps","type":"uint256[]"},{"internalType":"bytes","name":"paymasterInput","type":"bytes"},{"internalType":"bytes","name":"reservedDynamic","type":"bytes"}],"indexed":false,"internalType":"struct IMailbox.L2CanonicalTransaction","name":"transaction","type":"tuple"},{"indexed":false,"internalType":"bytes[]","name":"factoryDeps","type":"bytes[]"}],"name":"NewPriorityRequest","type":"event"},{"inputs":[{"internalType":"uint256","name":"_gasPrice","type":"uint256"},{"internalType":"uint256","name":"_ergsLimit","type":"uint256"},{"internalType":"uint32","name":"_calldataLength","type":"uint32"}],"name":"l2TransactionBaseCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"components":[{"internalType":"uint8","name":"l2ShardId","type":"uint8"},{"internalType":"bool","name":"isService","type":"bool"},{"internalType":"uint16","name":"txNumberInBlock","type":"uint16"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"bytes32","name":"value","type":"bytes32"}],"internalType":"struct L2Log","name":"_log","type":"tuple"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"proveL2LogInclusion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"components":[{"internalType":"uint16","name":"txNumberInBlock","type":"uint16"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct L2Message","name":"_message","type":"tuple"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"proveL2MessageInclusion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddressL2","type":"address"},{"internalType":"uint256","name":"_l2Value","type":"uint256"},{"internalType":"bytes","name":"_calldata","type":"bytes"},{"internalType":"uint256","name":"_ergsLimit","type":"uint256"},{"internalType":"bytes[]","name":"_factoryDeps","type":"bytes[]"}],"name":"requestL2Transaction","outputs":[{"internalType":"bytes32","name":"txHash","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txId","type":"uint256"},{"internalType":"uint256","name":"_l2Value","type":"uint256"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_contractAddressL2","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"},{"internalType":"uint256","name":"_ergsLimit","type":"uint256"},{"internalType":"bytes[]","name":"_factoryDeps","type":"bytes[]"}],"name":"serializeL2Transaction","outputs":[{"components":[{"internalType":"uint256","name":"txType","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"},{"internalType":"uint256","name":"ergsLimit","type":"uint256"},{"internalType":"uint256","name":"ergsPerPubdataByteLimit","type":"uint256"},{"internalType":"uint256","name":"maxFeePerErg","type":"uint256"},{"internalType":"uint256","name":"maxPriorityFeePerErg","type":"uint256"},{"internalType":"uint256","name":"paymaster","type":"uint256"},{"internalType":"uint256[6]","name":"reserved","type":"uint256[6]"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256[]","name":"factoryDeps","type":"uint256[]"},{"internalType":"bytes","name":"paymasterInput","type":"bytes"},{"internalType":"bytes","name":"reservedDynamic","type":"bytes"}],"internalType":"struct IMailbox.L2CanonicalTransaction","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"}],"devdoc":{"events":{"NewPriorityRequest(uint256,bytes32,uint64,(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[6],bytes,bytes,uint256[],bytes,bytes),bytes[])":{"params":{"expirationBlock":"Ethereum block number up to which priority request should be processed","factoryDeps":"An array of bytecodes that were shown in the L1 public data. Will be marked as known bytecodes in L2","transaction":"The whole transaction structure that is requested to be executed on L2","txHash":"keccak256 hash of encoded transaction representation","txId":"Serial number of the priority operation"}}},"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"l2TransactionBaseCost(uint256,uint256,uint32)":"5cd6771e","proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])":"263b7f8e","proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])":"e4948f43","requestL2Transaction(address,uint256,bytes,uint256,bytes[])":"725ad850","serializeL2Transaction(uint256,uint256,address,address,bytes,uint256,bytes[])":"ed9937f5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"txId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"expirationBlock\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"txType\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ergsLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ergsPerPubdataByteLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerErg\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerErg\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymaster\",\"type\":\"uint256\"},{\"internalType\":\"uint256[6]\",\"name\":\"reserved\",\"type\":\"uint256[6]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256[]\",\"name\":\"factoryDeps\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"paymasterInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"reservedDynamic\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct IMailbox.L2CanonicalTransaction\",\"name\":\"transaction\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes[]\",\"name\":\"factoryDeps\",\"type\":\"bytes[]\"}],\"name\":\"NewPriorityRequest\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ergsLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_calldataLength\",\"type\":\"uint32\"}],\"name\":\"l2TransactionBaseCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"l2ShardId\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isService\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"txNumberInBlock\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"internalType\":\"struct L2Log\",\"name\":\"_log\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"_proof\",\"type\":\"bytes32[]\"}],\"name\":\"proveL2LogInclusion\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"txNumberInBlock\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct L2Message\",\"name\":\"_message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"_proof\",\"type\":\"bytes32[]\"}],\"name\":\"proveL2MessageInclusion\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contractAddressL2\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_l2Value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_ergsLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"_factoryDeps\",\"type\":\"bytes[]\"}],\"name\":\"requestL2Transaction\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_txId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2Value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_contractAddressL2\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_ergsLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"_factoryDeps\",\"type\":\"bytes[]\"}],\"name\":\"serializeL2Transaction\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"txType\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ergsLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ergsPerPubdataByteLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerErg\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerErg\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymaster\",\"type\":\"uint256\"},{\"internalType\":\"uint256[6]\",\"name\":\"reserved\",\"type\":\"uint256[6]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256[]\",\"name\":\"factoryDeps\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"paymasterInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"reservedDynamic\",\"type\":\"bytes\"}],\"internalType\":\"struct IMailbox.L2CanonicalTransaction\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"NewPriorityRequest(uint256,bytes32,uint64,(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[6],bytes,bytes,uint256[],bytes,bytes),bytes[])\":{\"params\":{\"expirationBlock\":\"Ethereum block number up to which priority request should be processed\",\"factoryDeps\":\"An array of bytecodes that were shown in the L1 public data. Will be marked as known bytecodes in L2\",\"transaction\":\"The whole transaction structure that is requested to be executed on L2\",\"txHash\":\"keccak256 hash of encoded transaction representation\",\"txId\":\"Serial number of the priority operation\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"NewPriorityRequest(uint256,bytes32,uint64,(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[6],bytes,bytes,uint256[],bytes,bytes),bytes[])\":{\"notice\":\"New priority request event. Emitted when a request is placed into the priority queue\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IMailbox.sol\":\"IMailbox\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IAllowList.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\ninterface IAllowList {\\n    /*//////////////////////////////////////////////////////////////\\n                            EVENTS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    /// @notice public access is changed\\n    event UpdatePublicAccess(address indexed target, bool newStatus);\\n\\n    /// @notice permission to call is changed\\n    event UpdateCallPermission(address indexed caller, address indexed target, bytes4 indexed functionSig, bool status);\\n\\n    /// @notice pendingOwner is changed\\n    /// @dev Also emitted when the new owner is accepted and in this case, `newPendingOwner` would be zero address\\n    event NewPendingOwner(address indexed oldPendingOwner, address indexed newPendingOwner);\\n\\n    /// @notice Owner changed\\n    event NewOwner(address indexed newOwner);\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            GETTERS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function pendingOwner() external view returns (address);\\n\\n    function owner() external view returns (address);\\n\\n    function isAccessPublic(address _target) external view returns (bool);\\n\\n    function hasSpecialAccessToCall(\\n        address _caller,\\n        address _target,\\n        bytes4 _functionSig\\n    ) external view returns (bool);\\n\\n    function canCall(\\n        address _caller,\\n        address _target,\\n        bytes4 _functionSig\\n    ) external view returns (bool);\\n\\n    /*//////////////////////////////////////////////////////////////\\n                           ALLOW LIST LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function setBatchPublicAccess(address[] calldata _targets, bool[] calldata _enables) external;\\n\\n    function setPublicAccess(address _target, bool _enable) external;\\n\\n    function setBatchPermissionToCall(\\n        address[] calldata _callers,\\n        address[] calldata _targets,\\n        bytes4[] calldata _functionSigs,\\n        bool[] calldata _enables\\n    ) external;\\n\\n    function setPermissionToCall(\\n        address _caller,\\n        address _target,\\n        bytes4 _functionSig,\\n        bool _enable\\n    ) external;\\n\\n    function setPendingOwner(address _newPendingOwner) external;\\n\\n    function acceptOwner() external;\\n}\\n\",\"keccak256\":\"0x648fee7e23d2ca13481efc07902a38b817be7606bf288902d72f81a2cabcf2f5\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n * @dev Unlike EIP-20 standard \\\"transfer\\\" and \\\"transferFrom\\\" functions do not return any value.\\n * This is made to be compatible with popular tokens that are implemented standard incorrectly.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external;\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external;\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x5bfbd33ae826ac8185db71bb348c91010938dbb2dd0859ce908f4812ff39d2fe\",\"license\":\"UNLICENSED\"},\"@matterlabs/zksync-contracts/l1/contracts/common/libraries/UncheckedMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nlibrary UncheckedMath {\\n    function uncheckedInc(uint256 _number) internal pure returns (uint256) {\\n        unchecked {\\n            return _number + 1;\\n        }\\n    }\\n\\n    function uncheckedAdd(uint256 _lhs, uint256 _rhs) internal pure returns (uint256) {\\n        unchecked {\\n            return _lhs + _rhs;\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7d0dff9b45338f35b32bc711192aec50973e13dc74b8e941d64586b510179c12\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/Plonk4VerifierWithAccessToDNext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/PairingsBn254.sol\\\";\\nimport \\\"./libraries/TranscriptLib.sol\\\";\\nimport \\\"../common/libraries/UncheckedMath.sol\\\";\\n\\nuint256 constant STATE_WIDTH = 4;\\nuint256 constant NUM_G2_ELS = 2;\\n\\nstruct VerificationKey {\\n    uint256 domain_size;\\n    uint256 num_inputs;\\n    PairingsBn254.Fr omega;\\n    PairingsBn254.G1Point[2] gate_selectors_commitments;\\n    PairingsBn254.G1Point[7] gate_setup_commitments;\\n    PairingsBn254.G1Point[STATE_WIDTH] permutation_commitments;\\n    PairingsBn254.G1Point lookup_selector_commitment;\\n    PairingsBn254.G1Point[4] lookup_tables_commitments;\\n    PairingsBn254.G1Point lookup_table_type_commitment;\\n    PairingsBn254.Fr[STATE_WIDTH - 1] non_residues;\\n    PairingsBn254.G2Point[NUM_G2_ELS] g2_elements;\\n}\\n\\ncontract Plonk4VerifierWithAccessToDNext {\\n    using PairingsBn254 for PairingsBn254.G1Point;\\n    using PairingsBn254 for PairingsBn254.G2Point;\\n    using PairingsBn254 for PairingsBn254.Fr;\\n\\n    using TranscriptLib for TranscriptLib.Transcript;\\n\\n    using UncheckedMath for uint256;\\n\\n    struct Proof {\\n        uint256[] input_values;\\n        // commitments\\n        PairingsBn254.G1Point[STATE_WIDTH] state_polys_commitments;\\n        PairingsBn254.G1Point copy_permutation_grand_product_commitment;\\n        PairingsBn254.G1Point[STATE_WIDTH] quotient_poly_parts_commitments;\\n        // openings\\n        PairingsBn254.Fr[STATE_WIDTH] state_polys_openings_at_z;\\n        PairingsBn254.Fr[1] state_polys_openings_at_z_omega; // TODO: not use array while there is only D_next\\n        PairingsBn254.Fr[1] gate_selectors_openings_at_z;\\n        PairingsBn254.Fr[STATE_WIDTH - 1] copy_permutation_polys_openings_at_z;\\n        PairingsBn254.Fr copy_permutation_grand_product_opening_at_z_omega;\\n        PairingsBn254.Fr quotient_poly_opening_at_z;\\n        PairingsBn254.Fr linearization_poly_opening_at_z;\\n        // lookup commitments\\n        PairingsBn254.G1Point lookup_s_poly_commitment;\\n        PairingsBn254.G1Point lookup_grand_product_commitment;\\n        // lookup openings\\n        PairingsBn254.Fr lookup_s_poly_opening_at_z_omega;\\n        PairingsBn254.Fr lookup_grand_product_opening_at_z_omega;\\n        PairingsBn254.Fr lookup_t_poly_opening_at_z;\\n        PairingsBn254.Fr lookup_t_poly_opening_at_z_omega;\\n        PairingsBn254.Fr lookup_selector_poly_opening_at_z;\\n        PairingsBn254.Fr lookup_table_type_poly_opening_at_z;\\n        PairingsBn254.G1Point opening_proof_at_z;\\n        PairingsBn254.G1Point opening_proof_at_z_omega;\\n    }\\n\\n    struct PartialVerifierState {\\n        PairingsBn254.Fr zero;\\n        PairingsBn254.Fr alpha;\\n        PairingsBn254.Fr beta;\\n        PairingsBn254.Fr gamma;\\n        PairingsBn254.Fr[9] alpha_values;\\n        PairingsBn254.Fr eta;\\n        PairingsBn254.Fr beta_lookup;\\n        PairingsBn254.Fr gamma_lookup;\\n        PairingsBn254.Fr beta_plus_one;\\n        PairingsBn254.Fr beta_gamma;\\n        PairingsBn254.Fr v;\\n        PairingsBn254.Fr u;\\n        PairingsBn254.Fr z;\\n        PairingsBn254.Fr z_omega;\\n        PairingsBn254.Fr z_minus_last_omega;\\n        PairingsBn254.Fr l_0_at_z;\\n        PairingsBn254.Fr l_n_minus_one_at_z;\\n        PairingsBn254.Fr t;\\n        PairingsBn254.G1Point tp;\\n    }\\n\\n    function evaluate_l0_at_point(uint256 domain_size, PairingsBn254.Fr memory at)\\n        internal\\n        view\\n        returns (PairingsBn254.Fr memory num)\\n    {\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n\\n        PairingsBn254.Fr memory size_fe = PairingsBn254.new_fr(domain_size);\\n        PairingsBn254.Fr memory den = at.copy();\\n        den.sub_assign(one);\\n        den.mul_assign(size_fe);\\n\\n        den = den.inverse();\\n\\n        num = at.pow(domain_size);\\n        num.sub_assign(one);\\n        num.mul_assign(den);\\n    }\\n\\n    function evaluate_lagrange_poly_out_of_domain(\\n        uint256 poly_num,\\n        uint256 domain_size,\\n        PairingsBn254.Fr memory omega,\\n        PairingsBn254.Fr memory at\\n    ) internal view returns (PairingsBn254.Fr memory res) {\\n        // (omega^i / N) / (X - omega^i) * (X^N - 1)\\n        require(poly_num < domain_size);\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n        PairingsBn254.Fr memory omega_power = omega.pow(poly_num);\\n        res = at.pow(domain_size);\\n        res.sub_assign(one);\\n        require(res.value != 0); // Vanishing polynomial can not be zero at point `at`\\n        res.mul_assign(omega_power);\\n\\n        PairingsBn254.Fr memory den = PairingsBn254.copy(at);\\n        den.sub_assign(omega_power);\\n        den.mul_assign(PairingsBn254.new_fr(domain_size));\\n\\n        den = den.inverse();\\n\\n        res.mul_assign(den);\\n    }\\n\\n    function evaluate_vanishing(uint256 domain_size, PairingsBn254.Fr memory at)\\n        internal\\n        view\\n        returns (PairingsBn254.Fr memory res)\\n    {\\n        res = at.pow(domain_size);\\n        res.sub_assign(PairingsBn254.new_fr(1));\\n    }\\n\\n    function initialize_transcript(Proof memory proof, VerificationKey memory vk)\\n        internal\\n        pure\\n        returns (PartialVerifierState memory state)\\n    {\\n        TranscriptLib.Transcript memory transcript = TranscriptLib.new_transcript();\\n\\n        for (uint256 i = 0; i < vk.num_inputs; i = i.uncheckedInc()) {\\n            transcript.update_with_u256(proof.input_values[i]);\\n        }\\n\\n        for (uint256 i = 0; i < STATE_WIDTH; i = i.uncheckedInc()) {\\n            transcript.update_with_g1(proof.state_polys_commitments[i]);\\n        }\\n\\n        state.eta = transcript.get_challenge();\\n        transcript.update_with_g1(proof.lookup_s_poly_commitment);\\n\\n        state.beta = transcript.get_challenge();\\n        state.gamma = transcript.get_challenge();\\n\\n        transcript.update_with_g1(proof.copy_permutation_grand_product_commitment);\\n        state.beta_lookup = transcript.get_challenge();\\n        state.gamma_lookup = transcript.get_challenge();\\n        transcript.update_with_g1(proof.lookup_grand_product_commitment);\\n        state.alpha = transcript.get_challenge();\\n\\n        for (uint256 i = 0; i < proof.quotient_poly_parts_commitments.length; i = i.uncheckedInc()) {\\n            transcript.update_with_g1(proof.quotient_poly_parts_commitments[i]);\\n        }\\n        state.z = transcript.get_challenge();\\n\\n        transcript.update_with_fr(proof.quotient_poly_opening_at_z);\\n\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.state_polys_openings_at_z[i]);\\n        }\\n\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z_omega.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.state_polys_openings_at_z_omega[i]);\\n        }\\n        for (uint256 i = 0; i < proof.gate_selectors_openings_at_z.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.gate_selectors_openings_at_z[i]);\\n        }\\n        for (uint256 i = 0; i < proof.copy_permutation_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.copy_permutation_polys_openings_at_z[i]);\\n        }\\n\\n        state.z_omega = state.z.copy();\\n        state.z_omega.mul_assign(vk.omega);\\n\\n        transcript.update_with_fr(proof.copy_permutation_grand_product_opening_at_z_omega);\\n\\n        transcript.update_with_fr(proof.lookup_t_poly_opening_at_z);\\n        transcript.update_with_fr(proof.lookup_selector_poly_opening_at_z);\\n        transcript.update_with_fr(proof.lookup_table_type_poly_opening_at_z);\\n        transcript.update_with_fr(proof.lookup_s_poly_opening_at_z_omega);\\n        transcript.update_with_fr(proof.lookup_grand_product_opening_at_z_omega);\\n        transcript.update_with_fr(proof.lookup_t_poly_opening_at_z_omega);\\n        transcript.update_with_fr(proof.linearization_poly_opening_at_z);\\n\\n        state.v = transcript.get_challenge();\\n\\n        transcript.update_with_g1(proof.opening_proof_at_z);\\n        transcript.update_with_g1(proof.opening_proof_at_z_omega);\\n\\n        state.u = transcript.get_challenge();\\n    }\\n\\n    // compute some powers of challenge alpha([alpha^1, .. alpha^8])\\n    function compute_powers_of_alpha(PartialVerifierState memory state) public pure {\\n        require(state.alpha.value != 0);\\n        state.alpha_values[0] = PairingsBn254.new_fr(1);\\n        state.alpha_values[1] = state.alpha.copy();\\n        PairingsBn254.Fr memory current_alpha = state.alpha.copy();\\n        for (uint256 i = 2; i < state.alpha_values.length; i = i.uncheckedInc()) {\\n            current_alpha.mul_assign(state.alpha);\\n            state.alpha_values[i] = current_alpha.copy();\\n        }\\n    }\\n\\n    function verify(Proof memory proof, VerificationKey memory vk) internal view returns (bool) {\\n        // we initialize all challenges beforehand, we can draw each challenge in its own place\\n        PartialVerifierState memory state = initialize_transcript(proof, vk);\\n        if (verify_quotient_evaluation(vk, proof, state) == false) {\\n            return false;\\n        }\\n        require(proof.state_polys_openings_at_z_omega.length == 1); // TODO\\n\\n        PairingsBn254.G1Point memory quotient_result = proof.quotient_poly_parts_commitments[0].copy_g1();\\n        {\\n            // block scope\\n            PairingsBn254.Fr memory z_in_domain_size = state.z.pow(vk.domain_size);\\n            PairingsBn254.Fr memory current_z = z_in_domain_size.copy();\\n            PairingsBn254.G1Point memory tp;\\n            // start from i =1\\n            for (uint256 i = 1; i < proof.quotient_poly_parts_commitments.length; i = i.uncheckedInc()) {\\n                tp = proof.quotient_poly_parts_commitments[i].copy_g1();\\n                tp.point_mul_assign(current_z);\\n                quotient_result.point_add_assign(tp);\\n\\n                current_z.mul_assign(z_in_domain_size);\\n            }\\n        }\\n\\n        Queries memory queries = prepare_queries(vk, proof, state);\\n        queries.commitments_at_z[0] = quotient_result;\\n        queries.values_at_z[0] = proof.quotient_poly_opening_at_z;\\n        queries.commitments_at_z[1] = aggregated_linearization_commitment(vk, proof, state);\\n        queries.values_at_z[1] = proof.linearization_poly_opening_at_z;\\n\\n        require(queries.commitments_at_z.length == queries.values_at_z.length);\\n\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z = queries.commitments_at_z[0];\\n\\n        PairingsBn254.Fr memory aggregated_opening_at_z = queries.values_at_z[0];\\n        PairingsBn254.Fr memory aggregation_challenge = PairingsBn254.new_fr(1);\\n        PairingsBn254.G1Point memory scaled;\\n        for (uint256 i = 1; i < queries.commitments_at_z.length; i = i.uncheckedInc()) {\\n            aggregation_challenge.mul_assign(state.v);\\n            scaled = queries.commitments_at_z[i].point_mul(aggregation_challenge);\\n            aggregated_commitment_at_z.point_add_assign(scaled);\\n\\n            state.t = queries.values_at_z[i];\\n            state.t.mul_assign(aggregation_challenge);\\n            aggregated_opening_at_z.add_assign(state.t);\\n        }\\n\\n        aggregation_challenge.mul_assign(state.v);\\n\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z_omega = queries.commitments_at_z_omega[0].point_mul(\\n            aggregation_challenge\\n        );\\n        PairingsBn254.Fr memory aggregated_opening_at_z_omega = queries.values_at_z_omega[0];\\n        aggregated_opening_at_z_omega.mul_assign(aggregation_challenge);\\n        for (uint256 i = 1; i < queries.commitments_at_z_omega.length; i = i.uncheckedInc()) {\\n            aggregation_challenge.mul_assign(state.v);\\n\\n            scaled = queries.commitments_at_z_omega[i].point_mul(aggregation_challenge);\\n            aggregated_commitment_at_z_omega.point_add_assign(scaled);\\n\\n            state.t = queries.values_at_z_omega[i];\\n            state.t.mul_assign(aggregation_challenge);\\n            aggregated_opening_at_z_omega.add_assign(state.t);\\n        }\\n\\n        return\\n            final_pairing(\\n                vk.g2_elements,\\n                proof,\\n                state,\\n                aggregated_commitment_at_z,\\n                aggregated_commitment_at_z_omega,\\n                aggregated_opening_at_z,\\n                aggregated_opening_at_z_omega\\n            );\\n    }\\n\\n    function verify_quotient_evaluation(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) internal view returns (bool) {\\n        uint256[] memory lagrange_poly_numbers = new uint256[](vk.num_inputs);\\n        for (uint256 i = 0; i < lagrange_poly_numbers.length; i = i.uncheckedInc()) {\\n            lagrange_poly_numbers[i] = i;\\n        }\\n        // require(vk.num_inputs > 0); // TODO\\n\\n        PairingsBn254.Fr memory inputs_term = PairingsBn254.new_fr(0);\\n        for (uint256 i = 0; i < vk.num_inputs; i = i.uncheckedInc()) {\\n            // TODO we may use batched lagrange compputation\\n            state.t = evaluate_lagrange_poly_out_of_domain(i, vk.domain_size, vk.omega, state.z);\\n            state.t.mul_assign(PairingsBn254.new_fr(proof.input_values[i]));\\n            inputs_term.add_assign(state.t);\\n        }\\n        inputs_term.mul_assign(proof.gate_selectors_openings_at_z[0]);\\n        PairingsBn254.Fr memory result = proof.linearization_poly_opening_at_z.copy();\\n        result.add_assign(inputs_term);\\n\\n        // compute powers of alpha\\n        compute_powers_of_alpha(state);\\n        PairingsBn254.Fr memory factor = state.alpha_values[4].copy();\\n        factor.mul_assign(proof.copy_permutation_grand_product_opening_at_z_omega);\\n\\n        // - alpha_0 * (a + perm(z) * beta + gamma)*()*(d + gamma) * z(z*omega)\\n        require(proof.copy_permutation_polys_openings_at_z.length == STATE_WIDTH - 1);\\n        PairingsBn254.Fr memory t; // TMP;\\n        for (uint256 i = 0; i < proof.copy_permutation_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            t = proof.copy_permutation_polys_openings_at_z[i].copy();\\n            t.mul_assign(state.beta);\\n            t.add_assign(proof.state_polys_openings_at_z[i]);\\n            t.add_assign(state.gamma);\\n\\n            factor.mul_assign(t);\\n        }\\n\\n        t = proof.state_polys_openings_at_z[3].copy();\\n        t.add_assign(state.gamma);\\n        factor.mul_assign(t);\\n        result.sub_assign(factor);\\n\\n        // - L_0(z) * alpha_1\\n        PairingsBn254.Fr memory l_0_at_z = evaluate_l0_at_point(vk.domain_size, state.z);\\n        l_0_at_z.mul_assign(state.alpha_values[4 + 1]);\\n        result.sub_assign(l_0_at_z);\\n\\n        PairingsBn254.Fr memory lookup_quotient_contrib = lookup_quotient_contribution(vk, proof, state);\\n        result.add_assign(lookup_quotient_contrib);\\n\\n        PairingsBn254.Fr memory lhs = proof.quotient_poly_opening_at_z.copy();\\n        lhs.mul_assign(evaluate_vanishing(vk.domain_size, state.z));\\n        return lhs.value == result.value;\\n    }\\n\\n    function lookup_quotient_contribution(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) internal view returns (PairingsBn254.Fr memory result) {\\n        PairingsBn254.Fr memory t;\\n\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n        state.beta_plus_one = state.beta_lookup.copy();\\n        state.beta_plus_one.add_assign(one);\\n        state.beta_gamma = state.beta_plus_one.copy();\\n        state.beta_gamma.mul_assign(state.gamma_lookup);\\n\\n        // (s'*beta + gamma)*(zw')*alpha\\n        t = proof.lookup_s_poly_opening_at_z_omega.copy();\\n        t.mul_assign(state.beta_lookup);\\n        t.add_assign(state.beta_gamma);\\n        t.mul_assign(proof.lookup_grand_product_opening_at_z_omega);\\n        t.mul_assign(state.alpha_values[6]);\\n\\n        // (z - omega^{n-1}) for this part\\n        PairingsBn254.Fr memory last_omega = vk.omega.pow(vk.domain_size - 1);\\n        state.z_minus_last_omega = state.z.copy();\\n        state.z_minus_last_omega.sub_assign(last_omega);\\n        t.mul_assign(state.z_minus_last_omega);\\n        result.add_assign(t);\\n\\n        // - alpha_1 * L_{0}(z)\\n        state.l_0_at_z = evaluate_lagrange_poly_out_of_domain(0, vk.domain_size, vk.omega, state.z);\\n        t = state.l_0_at_z.copy();\\n        t.mul_assign(state.alpha_values[6 + 1]);\\n        result.sub_assign(t);\\n\\n        // - alpha_2 * beta_gamma_powered L_{n-1}(z)\\n        PairingsBn254.Fr memory beta_gamma_powered = state.beta_gamma.pow(vk.domain_size - 1);\\n        state.l_n_minus_one_at_z = evaluate_lagrange_poly_out_of_domain(\\n            vk.domain_size - 1,\\n            vk.domain_size,\\n            vk.omega,\\n            state.z\\n        );\\n        t = state.l_n_minus_one_at_z.copy();\\n        t.mul_assign(beta_gamma_powered);\\n        t.mul_assign(state.alpha_values[6 + 2]);\\n\\n        result.sub_assign(t);\\n    }\\n\\n    function aggregated_linearization_commitment(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) internal view returns (PairingsBn254.G1Point memory result) {\\n        // qMain*(Q_a * A + Q_b * B + Q_c * C + Q_d * D + Q_m * A*B + Q_const + Q_dNext * D_next)\\n        result = PairingsBn254.new_g1(0, 0);\\n        // Q_a * A\\n        PairingsBn254.G1Point memory scaled = vk.gate_setup_commitments[0].point_mul(\\n            proof.state_polys_openings_at_z[0]\\n        );\\n        result.point_add_assign(scaled);\\n        // Q_b * B\\n        scaled = vk.gate_setup_commitments[1].point_mul(proof.state_polys_openings_at_z[1]);\\n        result.point_add_assign(scaled);\\n        // Q_c * C\\n        scaled = vk.gate_setup_commitments[2].point_mul(proof.state_polys_openings_at_z[2]);\\n        result.point_add_assign(scaled);\\n        // Q_d * D\\n        scaled = vk.gate_setup_commitments[3].point_mul(proof.state_polys_openings_at_z[3]);\\n        result.point_add_assign(scaled);\\n        // Q_m* A*B or Q_ab*A*B\\n        PairingsBn254.Fr memory t = proof.state_polys_openings_at_z[0].copy();\\n        t.mul_assign(proof.state_polys_openings_at_z[1]);\\n        scaled = vk.gate_setup_commitments[4].point_mul(t);\\n        result.point_add_assign(scaled);\\n        // Q_const\\n        result.point_add_assign(vk.gate_setup_commitments[5]);\\n        // Q_dNext * D_next\\n        scaled = vk.gate_setup_commitments[6].point_mul(proof.state_polys_openings_at_z_omega[0]);\\n        result.point_add_assign(scaled);\\n        result.point_mul_assign(proof.gate_selectors_openings_at_z[0]);\\n\\n        PairingsBn254.G1Point\\n            memory rescue_custom_gate_linearization_contrib = rescue_custom_gate_linearization_contribution(\\n                vk,\\n                proof,\\n                state\\n            );\\n        result.point_add_assign(rescue_custom_gate_linearization_contrib);\\n        require(vk.non_residues.length == STATE_WIDTH - 1);\\n\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n        PairingsBn254.Fr memory factor = state.alpha_values[4].copy();\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z.length; ) {\\n            t = state.z.copy();\\n            if (i == 0) {\\n                t.mul_assign(one);\\n            } else {\\n                t.mul_assign(vk.non_residues[i - 1]); // TODO add one into non-residues during codegen?\\n            }\\n            t.mul_assign(state.beta);\\n            t.add_assign(state.gamma);\\n            t.add_assign(proof.state_polys_openings_at_z[i]);\\n\\n            factor.mul_assign(t);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n\\n        scaled = proof.copy_permutation_grand_product_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n\\n        // - (a(z) + beta*perm_a + gamma)*()*()*z(z*omega) * beta * perm_d(X)\\n        factor = state.alpha_values[4].copy();\\n        factor.mul_assign(state.beta);\\n        factor.mul_assign(proof.copy_permutation_grand_product_opening_at_z_omega);\\n        for (uint256 i = 0; i < STATE_WIDTH - 1; i = i.uncheckedInc()) {\\n            t = proof.copy_permutation_polys_openings_at_z[i].copy();\\n            t.mul_assign(state.beta);\\n            t.add_assign(state.gamma);\\n            t.add_assign(proof.state_polys_openings_at_z[i]);\\n\\n            factor.mul_assign(t);\\n        }\\n        scaled = vk.permutation_commitments[3].point_mul(factor);\\n        result.point_sub_assign(scaled);\\n\\n        // + L_0(z) * Z(x)\\n        // TODO\\n        state.l_0_at_z = evaluate_lagrange_poly_out_of_domain(0, vk.domain_size, vk.omega, state.z);\\n        require(state.l_0_at_z.value != 0);\\n        factor = state.l_0_at_z.copy();\\n        factor.mul_assign(state.alpha_values[4 + 1]);\\n        scaled = proof.copy_permutation_grand_product_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n\\n        PairingsBn254.G1Point memory lookup_linearization_contrib = lookup_linearization_contribution(proof, state);\\n        result.point_add_assign(lookup_linearization_contrib);\\n    }\\n\\n    function rescue_custom_gate_linearization_contribution(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) public view returns (PairingsBn254.G1Point memory result) {\\n        PairingsBn254.Fr memory t;\\n        PairingsBn254.Fr memory intermediate_result;\\n\\n        // a^2 - b = 0\\n        t = proof.state_polys_openings_at_z[0].copy();\\n        t.mul_assign(t);\\n        t.sub_assign(proof.state_polys_openings_at_z[1]);\\n        // t.mul_assign(challenge1);\\n        t.mul_assign(state.alpha_values[1]);\\n        intermediate_result.add_assign(t);\\n\\n        // b^2 - c = 0\\n        t = proof.state_polys_openings_at_z[1].copy();\\n        t.mul_assign(t);\\n        t.sub_assign(proof.state_polys_openings_at_z[2]);\\n        t.mul_assign(state.alpha_values[1 + 1]);\\n        intermediate_result.add_assign(t);\\n\\n        // c*a - d = 0;\\n        t = proof.state_polys_openings_at_z[2].copy();\\n        t.mul_assign(proof.state_polys_openings_at_z[0]);\\n        t.sub_assign(proof.state_polys_openings_at_z[3]);\\n        t.mul_assign(state.alpha_values[1 + 2]);\\n        intermediate_result.add_assign(t);\\n\\n        result = vk.gate_selectors_commitments[1].point_mul(intermediate_result);\\n    }\\n\\n    function lookup_linearization_contribution(Proof memory proof, PartialVerifierState memory state)\\n        internal\\n        view\\n        returns (PairingsBn254.G1Point memory result)\\n    {\\n        PairingsBn254.Fr memory zero = PairingsBn254.new_fr(0);\\n\\n        PairingsBn254.Fr memory t;\\n        PairingsBn254.Fr memory factor;\\n        // s(x) from the Z(x*omega)*(\\\\gamma*(1 + \\\\beta) + s(x) + \\\\beta * s(x*omega)))\\n        factor = proof.lookup_grand_product_opening_at_z_omega.copy();\\n        factor.mul_assign(state.alpha_values[6]);\\n        factor.mul_assign(state.z_minus_last_omega);\\n\\n        PairingsBn254.G1Point memory scaled = proof.lookup_s_poly_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n\\n        // Z(x) from - alpha_0 * Z(x) * (\\\\beta + 1) * (\\\\gamma + f(x)) * (\\\\gamma(1 + \\\\beta) + t(x) + \\\\beta * t(x*omega))\\n        // + alpha_1 * Z(x) * L_{0}(z) + alpha_2 * Z(x) * L_{n-1}(z)\\n\\n        // accumulate coefficient\\n        factor = proof.lookup_t_poly_opening_at_z_omega.copy();\\n        factor.mul_assign(state.beta_lookup);\\n        factor.add_assign(proof.lookup_t_poly_opening_at_z);\\n        factor.add_assign(state.beta_gamma);\\n\\n        // (\\\\gamma + f(x))\\n        PairingsBn254.Fr memory f_reconstructed;\\n        PairingsBn254.Fr memory current = PairingsBn254.new_fr(1);\\n        PairingsBn254.Fr memory tmp0;\\n        for (uint256 i = 0; i < STATE_WIDTH - 1; i = i.uncheckedInc()) {\\n            tmp0 = proof.state_polys_openings_at_z[i].copy();\\n            tmp0.mul_assign(current);\\n            f_reconstructed.add_assign(tmp0);\\n\\n            current.mul_assign(state.eta);\\n        }\\n\\n        // add type of table\\n        t = proof.lookup_table_type_poly_opening_at_z.copy();\\n        t.mul_assign(current);\\n        f_reconstructed.add_assign(t);\\n\\n        f_reconstructed.mul_assign(proof.lookup_selector_poly_opening_at_z);\\n        f_reconstructed.add_assign(state.gamma_lookup);\\n\\n        // end of (\\\\gamma + f(x)) part\\n        factor.mul_assign(f_reconstructed);\\n        factor.mul_assign(state.beta_plus_one);\\n        t = zero.copy();\\n        t.sub_assign(factor);\\n        factor = t;\\n        factor.mul_assign(state.alpha_values[6]);\\n\\n        // Multiply by (z - omega^{n-1})\\n        factor.mul_assign(state.z_minus_last_omega);\\n\\n        // L_{0}(z) in front of Z(x)\\n        t = state.l_0_at_z.copy();\\n        t.mul_assign(state.alpha_values[6 + 1]);\\n        factor.add_assign(t);\\n\\n        // L_{n-1}(z) in front of Z(x)\\n        t = state.l_n_minus_one_at_z.copy();\\n        t.mul_assign(state.alpha_values[6 + 2]);\\n        factor.add_assign(t);\\n\\n        scaled = proof.lookup_grand_product_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n    }\\n\\n    struct Queries {\\n        PairingsBn254.G1Point[13] commitments_at_z;\\n        PairingsBn254.Fr[13] values_at_z;\\n        PairingsBn254.G1Point[6] commitments_at_z_omega;\\n        PairingsBn254.Fr[6] values_at_z_omega;\\n    }\\n\\n    function prepare_queries(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) public view returns (Queries memory queries) {\\n        // we set first two items in calee side so start idx from 2\\n        uint256 idx = 2;\\n        for (uint256 i = 0; i < STATE_WIDTH; i = i.uncheckedInc()) {\\n            queries.commitments_at_z[idx] = proof.state_polys_commitments[i];\\n            queries.values_at_z[idx] = proof.state_polys_openings_at_z[i];\\n            idx = idx.uncheckedInc();\\n        }\\n        require(proof.gate_selectors_openings_at_z.length == 1);\\n        queries.commitments_at_z[idx] = vk.gate_selectors_commitments[0];\\n        queries.values_at_z[idx] = proof.gate_selectors_openings_at_z[0];\\n        idx = idx.uncheckedInc();\\n        for (uint256 i = 0; i < STATE_WIDTH - 1; i = i.uncheckedInc()) {\\n            queries.commitments_at_z[idx] = vk.permutation_commitments[i];\\n            queries.values_at_z[idx] = proof.copy_permutation_polys_openings_at_z[i];\\n            idx = idx.uncheckedInc();\\n        }\\n\\n        queries.commitments_at_z_omega[0] = proof.copy_permutation_grand_product_commitment;\\n        queries.commitments_at_z_omega[1] = proof.state_polys_commitments[STATE_WIDTH - 1];\\n\\n        queries.values_at_z_omega[0] = proof.copy_permutation_grand_product_opening_at_z_omega;\\n        queries.values_at_z_omega[1] = proof.state_polys_openings_at_z_omega[0];\\n\\n        PairingsBn254.G1Point memory lookup_t_poly_commitment_aggregated = vk.lookup_tables_commitments[0];\\n        PairingsBn254.Fr memory current_eta = state.eta.copy();\\n        for (uint256 i = 1; i < vk.lookup_tables_commitments.length; i = i.uncheckedInc()) {\\n            state.tp = vk.lookup_tables_commitments[i].point_mul(current_eta);\\n            lookup_t_poly_commitment_aggregated.point_add_assign(state.tp);\\n\\n            current_eta.mul_assign(state.eta);\\n        }\\n        queries.commitments_at_z[idx] = lookup_t_poly_commitment_aggregated;\\n        queries.values_at_z[idx] = proof.lookup_t_poly_opening_at_z;\\n        idx = idx.uncheckedInc();\\n        queries.commitments_at_z[idx] = vk.lookup_selector_commitment;\\n        queries.values_at_z[idx] = proof.lookup_selector_poly_opening_at_z;\\n        idx = idx.uncheckedInc();\\n        queries.commitments_at_z[idx] = vk.lookup_table_type_commitment;\\n        queries.values_at_z[idx] = proof.lookup_table_type_poly_opening_at_z;\\n        queries.commitments_at_z_omega[2] = proof.lookup_s_poly_commitment;\\n        queries.values_at_z_omega[2] = proof.lookup_s_poly_opening_at_z_omega;\\n        queries.commitments_at_z_omega[3] = proof.lookup_grand_product_commitment;\\n        queries.values_at_z_omega[3] = proof.lookup_grand_product_opening_at_z_omega;\\n        queries.commitments_at_z_omega[4] = lookup_t_poly_commitment_aggregated;\\n        queries.values_at_z_omega[4] = proof.lookup_t_poly_opening_at_z_omega;\\n    }\\n\\n    function final_pairing(\\n        // VerificationKey memory vk,\\n        PairingsBn254.G2Point[NUM_G2_ELS] memory g2_elements,\\n        Proof memory proof,\\n        PartialVerifierState memory state,\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z,\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z_omega,\\n        PairingsBn254.Fr memory aggregated_opening_at_z,\\n        PairingsBn254.Fr memory aggregated_opening_at_z_omega\\n    ) internal view returns (bool) {\\n        // q(x) = f(x) - f(z) / (x - z)\\n        // q(x) * (x-z)  = f(x) - f(z)\\n\\n        // f(x)\\n        PairingsBn254.G1Point memory pair_with_generator = aggregated_commitment_at_z.copy_g1();\\n        aggregated_commitment_at_z_omega.point_mul_assign(state.u);\\n        pair_with_generator.point_add_assign(aggregated_commitment_at_z_omega);\\n\\n        // - f(z)*g\\n        PairingsBn254.Fr memory aggregated_value = aggregated_opening_at_z_omega.copy();\\n        aggregated_value.mul_assign(state.u);\\n        aggregated_value.add_assign(aggregated_opening_at_z);\\n        PairingsBn254.G1Point memory tp = PairingsBn254.P1().point_mul(aggregated_value);\\n        pair_with_generator.point_sub_assign(tp);\\n\\n        // +z * q(x)\\n        tp = proof.opening_proof_at_z.point_mul(state.z);\\n        PairingsBn254.Fr memory t = state.z_omega.copy();\\n        t.mul_assign(state.u);\\n        PairingsBn254.G1Point memory t1 = proof.opening_proof_at_z_omega.point_mul(t);\\n        tp.point_add_assign(t1);\\n        pair_with_generator.point_add_assign(tp);\\n\\n        // rhs\\n        PairingsBn254.G1Point memory pair_with_x = proof.opening_proof_at_z_omega.point_mul(state.u);\\n        pair_with_x.point_add_assign(proof.opening_proof_at_z);\\n        pair_with_x.negate();\\n        // Pairing precompile expects points to be in a `i*x[1] + x[0]` form instead of `x[0] + i*x[1]`\\n        // so we handle it in code generation step\\n        PairingsBn254.G2Point memory first_g2 = g2_elements[0];\\n        PairingsBn254.G2Point memory second_g2 = g2_elements[1];\\n        PairingsBn254.G2Point memory gen2 = PairingsBn254.P2();\\n\\n        return PairingsBn254.pairingProd2(pair_with_generator, first_g2, pair_with_x, second_g2);\\n    }\\n}\\n\",\"keccak256\":\"0x3ef4937c0ab65a60baabb5b00ece282148267f94bc6c087254faf925c2bdc7d2\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/Storage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Verifier.sol\\\";\\nimport \\\"../common/interfaces/IAllowList.sol\\\";\\nimport \\\"./libraries/PriorityQueue.sol\\\";\\n\\n/// @dev Logically separated part of the storage structure, which is responsible for everything related to proxy upgrades and diamond cuts\\n/// @param proposedDiamondCutHash The hash of diamond cut that was proposed in the current upgrade\\n/// @param proposedDiamondCutTimestamp The timestamp when the diamond cut was proposed, zero if there are no active proposals\\n/// @param lastDiamondFreezeTimestamp The timestamp when the diamond was frozen last time, zero if the diamond was never frozen\\n/// @param currentProposalId The serial number of proposed diamond cuts, increments when proposing a new diamond cut\\n/// @param securityCouncilMembers The set of the trusted\\u00a0addresses that can instantly finish upgrade (diamond cut)\\n/// @param securityCouncilMemberLastApprovedProposalId The mapping of the security council addresses and the last diamond cut that they approved\\n/// @param securityCouncilEmergencyApprovals The number of received upgrade approvals from the security council\\nstruct DiamondCutStorage {\\n    bytes32 proposedDiamondCutHash;\\n    uint256 proposedDiamondCutTimestamp;\\n    uint256 lastDiamondFreezeTimestamp;\\n    uint256 currentProposalId;\\n    mapping(address => bool) securityCouncilMembers;\\n    mapping(address => uint256) securityCouncilMemberLastApprovedProposalId;\\n    uint256 securityCouncilEmergencyApprovals;\\n}\\n\\n/// @dev The log passed from L2\\n/// @param l2ShardId The shard identifier, 0 - rollup, 1 - porter. All other values are not used but are reserved for the future\\n/// @param isService A boolean flag that is part of the log along with `key`, `value`, and `sender` address.\\n/// This field is required formally but does not have any special meaning.\\n/// @param txNumberInBlock The L2 transaction number in a block, in which the log was sent\\n/// @param sender The L2 address which sent the log\\n/// @param key The 32 bytes of information that was sent in the log\\n/// @param value The 32 bytes of information that was sent in the log\\n// Both `key` and `value` are arbitrary 32-bytes selected by the log sender\\nstruct L2Log {\\n    uint8 l2ShardId;\\n    bool isService;\\n    uint16 txNumberInBlock;\\n    address sender;\\n    bytes32 key;\\n    bytes32 value;\\n}\\n\\n/// @dev An arbitrary length message passed from L2\\n/// @notice Under the hood it is `L2Log` sent from the special system L2 contract\\n/// @param txNumberInBlock The L2 transaction number in a block, in which the message was sent\\n/// @param sender The address of the L2 account from which the message was passed\\n/// @param data An arbitrary length message\\nstruct L2Message {\\n    uint16 txNumberInBlock;\\n    address sender;\\n    bytes data;\\n}\\n\\n/// @notice Part of the configuration parameters of ZKP circuits\\nstruct VerifierParams {\\n    bytes32 recursionNodeLevelVkHash;\\n    bytes32 recursionLeafLevelVkHash;\\n    bytes32 recursionCircuitsSetVksHash;\\n}\\n\\n/// @dev storing all storage variables for zkSync facets\\n/// NOTE: It is used in a proxy, so it is possible to add new variables to the end\\n/// NOTE: but NOT to modify already existing variables or change their order\\nstruct AppStorage {\\n    /// @dev Storage of variables needed for diamond cut facet\\n    DiamondCutStorage diamondCutStorage;\\n    /// @notice Address which will exercise governance over the network i.e. change validator set, conduct upgrades\\n    address governor;\\n    /// @notice Address that governor proposed as one that will replace it\\n    address pendingGovernor;\\n    /// @notice List of permitted validators\\n    mapping(address => bool) validators;\\n    // TODO: should be used an external library approach\\n    /// @dev Verifier contract. Used to verify aggregated proof for blocks\\n    Verifier verifier;\\n    /// @notice Total number of executed blocks i.e. blocks[totalBlocksExecuted] points at the latest executed block (block 0 is genesis)\\n    uint256 totalBlocksExecuted;\\n    /// @notice Total number of proved blocks i.e. blocks[totalBlocksProved] points at the latest proved block\\n    uint256 totalBlocksVerified;\\n    /// @notice Total number of committed blocks i.e. blocks[totalBlocksCommitted] points at the latest committed block\\n    uint256 totalBlocksCommitted;\\n    /// @dev Stored hashed StoredBlock for block number\\n    mapping(uint256 => bytes32) storedBlockHashes;\\n    /// @dev Stored root hashes of L2 -> L1 logs\\n    mapping(uint256 => bytes32) l2LogsRootHashes;\\n    /// @dev Container that stores transactions requested from L1\\n    PriorityQueue.Queue priorityQueue;\\n    /// @dev The smart contract that manages the list with permission to call contract functions\\n    IAllowList allowList;\\n    /// @notice Part of the configuration parameters of ZKP circuits. Used as an input for the verifier smart contract\\n    VerifierParams verifierParams;\\n    /// @notice Bytecode hash of bootloader program.\\n    /// @dev Used as an input to zkp-circuit.\\n    bytes32 l2BootloaderBytecodeHash;\\n    /// @notice Bytecode hash of default account (bytecode for EOA).\\n    /// @dev Used as an input to zkp-circuit.\\n    bytes32 l2DefaultAccountBytecodeHash;\\n    /// @dev Indicates that the porter may be touched on L2 transactions.\\n    /// @dev Used as an input to zkp-circuit.\\n    bool zkPorterIsAvailable;\\n}\\n\",\"keccak256\":\"0x1f516b4ec879df93a4044881f1eb938e3ae250641e83f4f40a06463b0496c09e\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/Verifier.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../common/libraries/UncheckedMath.sol\\\";\\nimport \\\"./Plonk4VerifierWithAccessToDNext.sol\\\";\\n\\ncontract Verifier is Plonk4VerifierWithAccessToDNext {\\n    using UncheckedMath for uint256;\\n\\n    function get_verification_key() internal pure returns (VerificationKey memory vk) {\\n        vk.num_inputs = 1;\\n        vk.domain_size = 256;\\n        vk.omega = PairingsBn254.new_fr(0x1058a83d529be585820b96ff0a13f2dbd8675a9e5dd2336a6692cc1e5a526c81);\\n        // coefficients\\n        vk.gate_setup_commitments[0] = PairingsBn254.new_g1(\\n            0x05f5cabc4eab14cfabee1334ef7f33a66259cc9fd07af862308d5c41765adb4b,\\n            0x128a103fbe66c8ff697182c0963d963208b55a5a53ddeab9b4bc09dc2a68a9cc\\n        );\\n        vk.gate_setup_commitments[1] = PairingsBn254.new_g1(\\n            0x0d9980170c334c107e6ce4d66bbc4d23bbcdc97c020b1e1c3f6e04c6c663d2c2,\\n            0x0968205845091ceaf3f863b1613fbdf7ce9a87ccfd97f22011679e6350384419\\n        );\\n        vk.gate_setup_commitments[2] = PairingsBn254.new_g1(\\n            0x0c84a19b149a1612cb042ad86382b9e94367c0add60d07e12399999e7db09efe,\\n            0x1e02f70c44c9bfb7bf2164cee2ab4813bcb9be56eb432e2e9dfffffe196d846d\\n        );\\n        vk.gate_setup_commitments[3] = PairingsBn254.new_g1(\\n            0x1eb3599506a41a7d62e1f7438d6732fbb9d1eda7b9c7a0213eca63c9334ac5a9,\\n            0x23563d9f429908d8ea80bffa642840fb081936d45b388bafc504d9b1e5b1c410\\n        );\\n        vk.gate_setup_commitments[4] = PairingsBn254.new_g1(\\n            0x0000000000000000000000000000000000000000000000000000000000000000,\\n            0x0000000000000000000000000000000000000000000000000000000000000001\\n        );\\n        vk.gate_setup_commitments[5] = PairingsBn254.new_g1(\\n            0x063e8dac7ee3ee6a4569fd53b416fe17f8f10de8c435c336e5a1cf2e02643200,\\n            0x1d4c1781b78f926d55f89ef72abb96bee350ce60ddc684f5a02d87c5f4cdf943\\n        );\\n        vk.gate_setup_commitments[6] = PairingsBn254.new_g1(\\n            0x0000000000000000000000000000000000000000000000000000000000000000,\\n            0x0000000000000000000000000000000000000000000000000000000000000001\\n        );\\n        // gate selectors\\n        vk.gate_selectors_commitments[0] = PairingsBn254.new_g1(\\n            0x0b487eb34c8480ea506f5c6c25857155d61d7f9824b60bc80e1a415a5bcf247f,\\n            0x07ea0d0d0df9dbcc944e9341a5bb49ae796d9dc9d7ca1c032b53784715b946db\\n        );\\n        vk.gate_selectors_commitments[1] = PairingsBn254.new_g1(\\n            0x0fa66faa0b9ea782eb400175ac9f0c05f0de64332eec54a87cd20db4540baec2,\\n            0x07dea33d314c690c4bd4b21deda1a44b9f8dd87e539024622768c2f8b8bdabe1\\n        );\\n        // permutation\\n        vk.permutation_commitments[0] = PairingsBn254.new_g1(\\n            0x120482c52e31d2373f9b2dc80a47e68f035e278d220fa8a89d0c81f133343953,\\n            0x02928a78ea2e1a943e9220b7e288fd48a561263f8e5f94518f21aaa43781ceac\\n        );\\n        vk.permutation_commitments[1] = PairingsBn254.new_g1(\\n            0x1dfad2c4d60704bcf6af0abd9cce09151f063c4b52200c268e470c6a6c93cbca,\\n            0x08b28dd6ca14d7c33e078fe0f332a9a4d95ac8df171355de9e69930aec02b5dc\\n        );\\n        vk.permutation_commitments[2] = PairingsBn254.new_g1(\\n            0x0935a4fd6ab67925929661cf2d2e814f87f589ee6234cb9675ecc2d897f1b338,\\n            0x1032ccc41c047413fce4a847ba7e51e4a2ea406d89a88d480c5f0efaf6c8c89a\\n        );\\n        vk.permutation_commitments[3] = PairingsBn254.new_g1(\\n            0x0eafaea3af7d1fadb2138db1b991af5d2218f6892714fd019898c7e1a43ecfe8,\\n            0x28fb17eda285ed74cc9771d62fad22ab459bbb0a4968c489972aca8b7e618fcb\\n        );\\n        // lookup table commitments\\n        vk.lookup_selector_commitment = PairingsBn254.new_g1(\\n            0x155201a564e721b1f5c06315ad4e24eaad3cbdd6197b19cd903fe85613080f86,\\n            0x12fb201bc896572ac14357e2601f5118636f1eeb7b89c177ac940aac3b5253ec\\n        );\\n        vk.lookup_tables_commitments[0] = PairingsBn254.new_g1(\\n            0x1cb0e2ae4d52743898d94d7f1729bd0d3357ba035cdb6b3af7ebff9159f8f297,\\n            0x15ee595227c9e0f7a487ddb8072d5ea3cfd058bc569211c3546bc0e80051553f\\n        );\\n        vk.lookup_tables_commitments[1] = PairingsBn254.new_g1(\\n            0x13e4ab94c03a5a29719930c1361d854e244cf918f1e29cb031303f4a13b71977,\\n            0x0f792ef4c6c8746c97be61ed9b20f31ba2dec3bd5c91a2d9a4a586f19af3a07c\\n        );\\n        vk.lookup_tables_commitments[2] = PairingsBn254.new_g1(\\n            0x1c9e69bd2b04240ebe44fb23d67c596fce4a1336109fdce38c2f184a63cd8acc,\\n            0x1cbd3e72bdbce827227e503690b10be9365ae760e9d2babde5ba81edf12f8206\\n        );\\n        vk.lookup_tables_commitments[3] = PairingsBn254.new_g1(\\n            0x2a0d46339fbf72104df6a241b53a957602b1a16f6e3b9f89bf3e4c4645df823c,\\n            0x11a601d7b2eee4b7885f34c9873426ba1263f38eae2e0351d653b8b1ba9c67f6\\n        );\\n        vk.lookup_table_type_commitment = PairingsBn254.new_g1(\\n            0x1a70e43f18b18d686807c2b1c6471cd949dd251b48090bca443d86b97afae951,\\n            0x0e6e23ad15a1bd851b228788ae4a03bf25bda39ede6d5a92d501a8402a0dfe43\\n        );\\n        // non residues\\n        vk.non_residues[0] = PairingsBn254.new_fr(0x0000000000000000000000000000000000000000000000000000000000000005);\\n        vk.non_residues[1] = PairingsBn254.new_fr(0x0000000000000000000000000000000000000000000000000000000000000007);\\n        vk.non_residues[2] = PairingsBn254.new_fr(0x000000000000000000000000000000000000000000000000000000000000000a);\\n\\n        // g2 elements\\n        vk.g2_elements[0] = PairingsBn254.new_g2(\\n            [\\n                0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,\\n                0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\\n            ],\\n            [\\n                0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,\\n                0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\\n            ]\\n        );\\n        vk.g2_elements[1] = PairingsBn254.new_g2(\\n            [\\n                0x260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c1,\\n                0x0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b0\\n            ],\\n            [\\n                0x04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4,\\n                0x22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55\\n            ]\\n        );\\n    }\\n\\n    function deserialize_proof(uint256[] calldata public_inputs, uint256[] calldata serialized_proof)\\n        internal\\n        pure\\n        returns (Proof memory proof)\\n    {\\n        // require(serialized_proof.length == 44); TODO\\n        proof.input_values = new uint256[](public_inputs.length);\\n        for (uint256 i = 0; i < public_inputs.length; i = i.uncheckedInc()) {\\n            proof.input_values[i] = public_inputs[i];\\n        }\\n\\n        uint256 j;\\n        for (uint256 i = 0; i < STATE_WIDTH; i = i.uncheckedInc()) {\\n            proof.state_polys_commitments[i] = PairingsBn254.new_g1_checked(\\n                serialized_proof[j],\\n                serialized_proof[j.uncheckedInc()]\\n            );\\n\\n            j = j.uncheckedAdd(2);\\n        }\\n        proof.copy_permutation_grand_product_commitment = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n        j = j.uncheckedAdd(2);\\n\\n        proof.lookup_s_poly_commitment = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n        j = j.uncheckedAdd(2);\\n\\n        proof.lookup_grand_product_commitment = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n        j = j.uncheckedAdd(2);\\n        for (uint256 i = 0; i < proof.quotient_poly_parts_commitments.length; i = i.uncheckedInc()) {\\n            proof.quotient_poly_parts_commitments[i] = PairingsBn254.new_g1_checked(\\n                serialized_proof[j],\\n                serialized_proof[j.uncheckedInc()]\\n            );\\n            j = j.uncheckedAdd(2);\\n        }\\n\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            proof.state_polys_openings_at_z[i] = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n            j = j.uncheckedInc();\\n        }\\n\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z_omega.length; i = i.uncheckedInc()) {\\n            proof.state_polys_openings_at_z_omega[i] = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n            j = j.uncheckedInc();\\n        }\\n        for (uint256 i = 0; i < proof.gate_selectors_openings_at_z.length; i = i.uncheckedInc()) {\\n            proof.gate_selectors_openings_at_z[i] = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n            j = j.uncheckedInc();\\n        }\\n        for (uint256 i = 0; i < proof.copy_permutation_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            proof.copy_permutation_polys_openings_at_z[i] = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n            j = j.uncheckedInc();\\n        }\\n        proof.copy_permutation_grand_product_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n        j = j.uncheckedInc();\\n        proof.lookup_s_poly_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.lookup_grand_product_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n        j = j.uncheckedInc();\\n        proof.lookup_t_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n        j = j.uncheckedInc();\\n        proof.lookup_t_poly_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.lookup_selector_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.lookup_table_type_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.quotient_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.linearization_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.opening_proof_at_z = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n        j = j.uncheckedAdd(2);\\n        proof.opening_proof_at_z_omega = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n    }\\n\\n    function verify_serialized_proof(uint256[] calldata public_inputs, uint256[] calldata serialized_proof)\\n        public\\n        view\\n        returns (bool)\\n    {\\n        VerificationKey memory vk = get_verification_key();\\n        require(vk.num_inputs == public_inputs.length);\\n\\n        Proof memory proof = deserialize_proof(public_inputs, serialized_proof);\\n\\n        return verify(proof, vk);\\n    }\\n}\\n\",\"keccak256\":\"0x5d093f2c0d383f12fb6b8c2b2bc32c8ea07f579c2daee7d68aed8cf8041715a0\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IMailbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8;\\n\\nimport {L2Log, L2Message} from \\\"../Storage.sol\\\";\\nimport \\\"../../common/interfaces/IERC20.sol\\\";\\n\\ninterface IMailbox {\\n    /// @dev Structure that includes all fields of the L2 transaction\\n    /// @dev The hash of this structure is the \\\"canonical L2 transaction hash\\\" and can be used as a unique identifier of a tx\\n    /// @param txType The tx type number, depending on which the L2 transaction can be interpreted differently\\n    /// @param from The sender's address. `uint256` type for possible address format changes and maintaining backward compatibility\\n    /// @param to The recipient's address. `uint256` type for possible address format changes and maintaining backward compatibility\\n    /// @param ergsLimit Ergs limit on L2 transaction. Analog to the `gasLimit` on an L1 transactions\\n    /// @param ergsPerPubdataByteLimit Maximum number of ergs that will cost one byte of pubdata (every piece of data that will be stored on L1 as calldata)\\n    /// @param maxFeePerErg The absolute maximum sender willing to pay per unit of ergs to get the transaction included in a block. Analog to the EIP-1559 `maxFeePerGas` on an L1 transactions\\n    /// @param maxPriorityFeePerErg The additional fee that is paid directly to the validator to incentivize them to include the transaction in a block. Analog to the EIP-1559 `maxPriorityFeePerGas` on an L1 transactions\\n    /// @param paymaster The address of the EIP-4337 paymaster, that will pay fees for the transaction. `uint256` type for possible address format changes and maintaining backward compatibility\\n    /// @param reserved The fixed-length fields for usage in a future extension of transaction formats\\n    /// @param data The calldata that is transmitted for the transaction call\\n    /// @param signature An abstract set of bytes that are used for transaction authorization\\n    /// @param factoryDeps The set of L2 bytecode hashes whose preimages were shown on L1\\n    /// @param paymasterInput The arbitrary-length data that is used as a calldata to the paymaster pre-call\\n    /// @param reservedDynamic The arbitrary-length field for usage in a future extension of transaction formats\\n    struct L2CanonicalTransaction {\\n        uint256 txType;\\n        uint256 from;\\n        uint256 to;\\n        uint256 ergsLimit;\\n        uint256 ergsPerPubdataByteLimit;\\n        uint256 maxFeePerErg;\\n        uint256 maxPriorityFeePerErg;\\n        uint256 paymaster;\\n        // In the future, we might want to add some\\n        // new fields to the struct. The `txData` struct\\n        // is to be passed to account and any changes to its structure\\n        // would mean a breaking change to these accounts. To prevent this,\\n        // we should keep some fields as \\\"reserved\\\".\\n        // It is also recommended that their length is fixed, since\\n        // it would allow easier proof integration (in case we will need\\n        // some special circuit for preprocessing transactions).\\n        uint256[6] reserved;\\n        bytes data;\\n        bytes signature;\\n        uint256[] factoryDeps;\\n        bytes paymasterInput;\\n        // Reserved dynamic type for the future use-case. Using it should be avoided,\\n        // But it is still here, just in case we want to enable some additional functionality.\\n        bytes reservedDynamic;\\n    }\\n\\n    function proveL2MessageInclusion(\\n        uint256 _blockNumber,\\n        uint256 _index,\\n        L2Message calldata _message,\\n        bytes32[] calldata _proof\\n    ) external view returns (bool);\\n\\n    function proveL2LogInclusion(\\n        uint256 _blockNumber,\\n        uint256 _index,\\n        L2Log memory _log,\\n        bytes32[] calldata _proof\\n    ) external view returns (bool);\\n\\n    function serializeL2Transaction(\\n        uint256 _txId,\\n        uint256 _l2Value,\\n        address _sender,\\n        address _contractAddressL2,\\n        bytes calldata _calldata,\\n        uint256 _ergsLimit,\\n        bytes[] calldata _factoryDeps\\n    ) external pure returns (L2CanonicalTransaction memory);\\n\\n    function requestL2Transaction(\\n        address _contractAddressL2,\\n        uint256 _l2Value,\\n        bytes calldata _calldata,\\n        uint256 _ergsLimit,\\n        bytes[] calldata _factoryDeps\\n    ) external payable returns (bytes32 txHash);\\n\\n    function l2TransactionBaseCost(\\n        uint256 _gasPrice,\\n        uint256 _ergsLimit,\\n        uint32 _calldataLength\\n    ) external view returns (uint256);\\n\\n    /// @notice New priority request event. Emitted when a request is placed into the priority queue\\n    /// @param txId Serial number of the priority operation\\n    /// @param txHash keccak256 hash of encoded transaction representation\\n    /// @param expirationBlock Ethereum block number up to which priority request should be processed\\n    /// @param transaction The whole transaction structure that is requested to be executed on L2\\n    /// @param factoryDeps An array of bytecodes that were shown in the L1 public data. Will be marked as known bytecodes in L2\\n    event NewPriorityRequest(\\n        uint256 txId,\\n        bytes32 txHash,\\n        uint64 expirationBlock,\\n        L2CanonicalTransaction transaction,\\n        bytes[] factoryDeps\\n    );\\n}\\n\",\"keccak256\":\"0xc4ea8c255c5759ea84322b5d43f0a84e9347e287cdd469803f72d534dd5aad0a\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PairingsBn254.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nlibrary PairingsBn254 {\\n    uint256 constant q_mod = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n    uint256 constant r_mod = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant bn254_b_coeff = 3;\\n\\n    struct G1Point {\\n        uint256 X;\\n        uint256 Y;\\n    }\\n\\n    struct Fr {\\n        uint256 value;\\n    }\\n\\n    function new_fr(uint256 fr) internal pure returns (Fr memory) {\\n        require(fr < r_mod);\\n        return Fr({value: fr});\\n    }\\n\\n    function copy(Fr memory self) internal pure returns (Fr memory n) {\\n        n.value = self.value;\\n    }\\n\\n    function assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = other.value;\\n    }\\n\\n    function inverse(Fr memory fr) internal view returns (Fr memory) {\\n        require(fr.value != 0);\\n        return pow(fr, r_mod - 2);\\n    }\\n\\n    function add_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = addmod(self.value, other.value, r_mod);\\n    }\\n\\n    function sub_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = addmod(self.value, r_mod - other.value, r_mod);\\n    }\\n\\n    function mul_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = mulmod(self.value, other.value, r_mod);\\n    }\\n\\n    function pow(Fr memory self, uint256 power) internal view returns (Fr memory) {\\n        uint256[6] memory input = [32, 32, 32, self.value, power, r_mod];\\n        uint256[1] memory result;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 0x05, input, 0xc0, result, 0x20)\\n        }\\n        require(success);\\n        return Fr({value: result[0]});\\n    }\\n\\n    // Encoding of field elements is: X[0] * z + X[1]\\n    struct G2Point {\\n        uint256[2] X;\\n        uint256[2] Y;\\n    }\\n\\n    function P1() internal pure returns (G1Point memory) {\\n        return G1Point(1, 2);\\n    }\\n\\n    function new_g1(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n        return G1Point(x, y);\\n    }\\n\\n    // function new_g1_checked(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n    function new_g1_checked(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n        if (x == 0 && y == 0) {\\n            // point of infinity is (0,0)\\n            return G1Point(x, y);\\n        }\\n\\n        // check encoding\\n        require(x < q_mod, \\\"x axis isn't valid\\\");\\n        require(y < q_mod, \\\"y axis isn't valid\\\");\\n        // check on curve\\n        uint256 lhs = mulmod(y, y, q_mod); // y^2\\n\\n        uint256 rhs = mulmod(x, x, q_mod); // x^2\\n        rhs = mulmod(rhs, x, q_mod); // x^3\\n        rhs = addmod(rhs, bn254_b_coeff, q_mod); // x^3 + b\\n        require(lhs == rhs, \\\"is not on curve\\\");\\n\\n        return G1Point(x, y);\\n    }\\n\\n    function new_g2(uint256[2] memory x, uint256[2] memory y) internal pure returns (G2Point memory) {\\n        return G2Point(x, y);\\n    }\\n\\n    function copy_g1(G1Point memory self) internal pure returns (G1Point memory result) {\\n        result.X = self.X;\\n        result.Y = self.Y;\\n    }\\n\\n    function P2() internal pure returns (G2Point memory) {\\n        // for some reason ethereum expects to have c1*v + c0 form\\n\\n        return\\n            G2Point(\\n                [\\n                    0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,\\n                    0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\\n                ],\\n                [\\n                    0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,\\n                    0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\\n                ]\\n            );\\n    }\\n\\n    function negate(G1Point memory self) internal pure {\\n        // The prime q in the base field F_q for G1\\n        if (self.Y == 0) {\\n            require(self.X == 0);\\n            return;\\n        }\\n\\n        self.Y = q_mod - self.Y;\\n    }\\n\\n    function point_add(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) {\\n        point_add_into_dest(p1, p2, r);\\n        return r;\\n    }\\n\\n    function point_add_assign(G1Point memory p1, G1Point memory p2) internal view {\\n        point_add_into_dest(p1, p2, p1);\\n    }\\n\\n    function point_add_into_dest(\\n        G1Point memory p1,\\n        G1Point memory p2,\\n        G1Point memory dest\\n    ) internal view {\\n        if (p2.X == 0 && p2.Y == 0) {\\n            // we add zero, nothing happens\\n            dest.X = p1.X;\\n            dest.Y = p1.Y;\\n            return;\\n        } else if (p1.X == 0 && p1.Y == 0) {\\n            // we add into zero, and we add non-zero point\\n            dest.X = p2.X;\\n            dest.Y = p2.Y;\\n            return;\\n        } else {\\n            uint256[4] memory input;\\n\\n            input[0] = p1.X;\\n            input[1] = p1.Y;\\n            input[2] = p2.X;\\n            input[3] = p2.Y;\\n\\n            bool success;\\n            assembly {\\n                success := staticcall(gas(), 6, input, 0x80, dest, 0x40)\\n            }\\n            require(success);\\n        }\\n    }\\n\\n    function point_sub_assign(G1Point memory p1, G1Point memory p2) internal view {\\n        point_sub_into_dest(p1, p2, p1);\\n    }\\n\\n    function point_sub_into_dest(\\n        G1Point memory p1,\\n        G1Point memory p2,\\n        G1Point memory dest\\n    ) internal view {\\n        if (p2.X == 0 && p2.Y == 0) {\\n            // we subtracted zero, nothing happens\\n            dest.X = p1.X;\\n            dest.Y = p1.Y;\\n            return;\\n        } else if (p1.X == 0 && p1.Y == 0) {\\n            // we subtract from zero, and we subtract non-zero point\\n            dest.X = p2.X;\\n            dest.Y = q_mod - p2.Y;\\n            return;\\n        } else {\\n            uint256[4] memory input;\\n\\n            input[0] = p1.X;\\n            input[1] = p1.Y;\\n            input[2] = p2.X;\\n            input[3] = q_mod - p2.Y;\\n\\n            bool success = false;\\n            assembly {\\n                success := staticcall(gas(), 6, input, 0x80, dest, 0x40)\\n            }\\n            require(success);\\n        }\\n    }\\n\\n    function point_mul(G1Point memory p, Fr memory s) internal view returns (G1Point memory r) {\\n        // https://eips.ethereum.org/EIPS/eip-197\\n        // Elliptic curve points are encoded as a Jacobian pair (X, Y) where the point at infinity is encoded as (0, 0)\\n        // TODO\\n        if (p.X == 0 && p.Y == 1) {\\n            p.Y = 0;\\n        }\\n        point_mul_into_dest(p, s, r);\\n        return r;\\n    }\\n\\n    function point_mul_assign(G1Point memory p, Fr memory s) internal view {\\n        point_mul_into_dest(p, s, p);\\n    }\\n\\n    function point_mul_into_dest(\\n        G1Point memory p,\\n        Fr memory s,\\n        G1Point memory dest\\n    ) internal view {\\n        uint256[3] memory input;\\n        input[0] = p.X;\\n        input[1] = p.Y;\\n        input[2] = s.value;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 7, input, 0x60, dest, 0x40)\\n        }\\n        require(success);\\n    }\\n\\n    function pairing(G1Point[] memory p1, G2Point[] memory p2) internal view returns (bool) {\\n        require(p1.length == p2.length);\\n        uint256 elements = p1.length;\\n        uint256 inputSize = elements * 6;\\n        uint256[] memory input = new uint256[](inputSize);\\n        for (uint256 i = 0; i < elements; ) {\\n            input[i * 6 + 0] = p1[i].X;\\n            input[i * 6 + 1] = p1[i].Y;\\n            input[i * 6 + 2] = p2[i].X[0];\\n            input[i * 6 + 3] = p2[i].X[1];\\n            input[i * 6 + 4] = p2[i].Y[0];\\n            input[i * 6 + 5] = p2[i].Y[1];\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n        uint256[1] memory out;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20)\\n        }\\n        require(success);\\n        return out[0] != 0;\\n    }\\n\\n    /// Convenience method for a pairing check for two pairs.\\n    function pairingProd2(\\n        G1Point memory a1,\\n        G2Point memory a2,\\n        G1Point memory b1,\\n        G2Point memory b2\\n    ) internal view returns (bool) {\\n        G1Point[] memory p1 = new G1Point[](2);\\n        G2Point[] memory p2 = new G2Point[](2);\\n        p1[0] = a1;\\n        p1[1] = b1;\\n        p2[0] = a2;\\n        p2[1] = b2;\\n        return pairing(p1, p2);\\n    }\\n}\\n\",\"keccak256\":\"0x0532cd43e648a5236d854c85b47d83e4d4faa86ccb87322de0dcc52f0956ee1d\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PriorityQueue.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\n/// @notice The structure that contains meta information of the L2 transaction that was requested from L1\\n/// @dev The weird size of fields was selected specifically to minimize the structure storage size\\n/// @param canonicalTxHash Hashed L2 transaction data that is needed to process it\\n/// @param expirationBlock Expiration block number (ETH block) for this request (must be satisfied before)\\n/// @param layer2Tip Additional payment to the validator as an incentive to perform the operation\\nstruct PriorityOperation {\\n    bytes32 canonicalTxHash;\\n    uint64 expirationBlock;\\n    uint192 layer2Tip;\\n}\\n\\n/// @author Matter Labs\\n/// @dev The library provides the API to interact with the priority queue container\\n/// @dev Order of processing operations from queue - FIFO (Fist in - first out)\\nlibrary PriorityQueue {\\n    using PriorityQueue for Queue;\\n\\n    /// @notice Container that stores priority operations\\n    /// @param data The inner mapping that saves priority operation by its index\\n    /// @param head The pointer to the last added priority operation\\n    /// @param tail The pointer to the first unprocessed priority operation\\n    struct Queue {\\n        mapping(uint256 => PriorityOperation) data;\\n        uint256 head;\\n        uint256 tail;\\n    }\\n\\n    /// @return Index of the oldest priority operation that wasn't processed yet\\n    /// @notice Returns zero if and only if no operations were processed from the queue\\n    function getFirstUnprocessedPriorityTx(Queue storage _queue) internal view returns (uint256) {\\n        return _queue.tail;\\n    }\\n\\n    /// @return The total number of priority operations that were added to the priority queue, including all processed ones\\n    function getTotalPriorityTxs(Queue storage _queue) internal view returns (uint256) {\\n        return _queue.head;\\n    }\\n\\n    /// @return The total number of unprocessed priority operations in a priority queue\\n    function getSize(Queue storage _queue) internal view returns (uint256) {\\n        return uint256(_queue.head - _queue.tail);\\n    }\\n\\n    /// @return Whether the priority queue contains no operations\\n    function isEmpty(Queue storage _queue) internal view returns (bool) {\\n        return _queue.head == _queue.tail;\\n    }\\n\\n    /// @notice Add the priority operation to the end of the priority queue\\n    function pushBack(Queue storage _queue, PriorityOperation memory _operation) internal {\\n        // Save value into the stack to avoid double reading from the storage\\n        uint256 head = _queue.head;\\n\\n        _queue.data[head] = _operation;\\n        _queue.head = head + 1;\\n    }\\n\\n    /// @return The first unprocessed priority operation from the queue\\n    function front(Queue storage _queue) internal view returns (PriorityOperation memory) {\\n        require(!_queue.isEmpty(), \\\"D\\\"); // priority queue is empty\\n\\n        return _queue.data[_queue.tail];\\n    }\\n\\n    /// @notice Remove the first unprocessed priority operation from the queue\\n    /// @return priorityOperation that was popped from the priority queue\\n    function popFront(Queue storage _queue) internal returns (PriorityOperation memory priorityOperation) {\\n        require(!_queue.isEmpty(), \\\"s\\\"); // priority queue is empty\\n\\n        // Save value into the stack to avoid double reading from the storage\\n        uint256 tail = _queue.tail;\\n\\n        priorityOperation = _queue.data[tail];\\n        delete _queue.data[tail];\\n        _queue.tail = tail + 1;\\n    }\\n}\\n\",\"keccak256\":\"0x83a6511847a78dee8814414191c013cb67fb863e038bc42e21bbbd2641e9e184\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/TranscriptLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./PairingsBn254.sol\\\";\\n\\nlibrary TranscriptLib {\\n    // flip                    0xe000000000000000000000000000000000000000000000000000000000000000;\\n    uint256 constant FR_MASK = 0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n    uint32 constant DST_0 = 0;\\n    uint32 constant DST_1 = 1;\\n    uint32 constant DST_CHALLENGE = 2;\\n\\n    struct Transcript {\\n        bytes32 state_0;\\n        bytes32 state_1;\\n        uint32 challenge_counter;\\n    }\\n\\n    function new_transcript() internal pure returns (Transcript memory t) {\\n        t.state_0 = bytes32(0);\\n        t.state_1 = bytes32(0);\\n        t.challenge_counter = 0;\\n    }\\n\\n    function update_with_u256(Transcript memory self, uint256 value) internal pure {\\n        bytes32 old_state_0 = self.state_0;\\n        self.state_0 = keccak256(abi.encodePacked(DST_0, old_state_0, self.state_1, value));\\n        self.state_1 = keccak256(abi.encodePacked(DST_1, old_state_0, self.state_1, value));\\n    }\\n\\n    function update_with_fr(Transcript memory self, PairingsBn254.Fr memory value) internal pure {\\n        update_with_u256(self, value.value);\\n    }\\n\\n    function update_with_g1(Transcript memory self, PairingsBn254.G1Point memory p) internal pure {\\n        update_with_u256(self, p.X);\\n        update_with_u256(self, p.Y);\\n    }\\n\\n    function get_challenge(Transcript memory self) internal pure returns (PairingsBn254.Fr memory challenge) {\\n        bytes32 query = keccak256(abi.encodePacked(DST_CHALLENGE, self.state_0, self.state_1, self.challenge_counter));\\n        self.challenge_counter += 1;\\n        challenge = PairingsBn254.Fr({value: uint256(query) & FR_MASK});\\n    }\\n}\\n\",\"keccak256\":\"0x56cd646af0899ea51be78a046b647578bae59714f5f3e3c85010b278c96bfdcc\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"events":{"NewPriorityRequest(uint256,bytes32,uint64,(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[6],bytes,bytes,uint256[],bytes,bytes),bytes[])":{"notice":"New priority request event. Emitted when a request is placed into the priority queue"}},"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IZkSync.sol":{"IZkSync":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"BlockCommit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"BlockExecution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalBlocksCommitted","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBlocksVerified","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBlocksExecuted","type":"uint256"}],"name":"BlocksRevert","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facet","type":"address"},{"internalType":"enum Diamond.Action","name":"action","type":"uint8"},{"internalType":"bool","name":"isFreezable","type":"bool"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct Diamond.FacetCut[]","name":"_facetCuts","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_initAddress","type":"address"}],"name":"DiamondCutProposal","type":"event"},{"anonymous":false,"inputs":[],"name":"DiamondCutProposalCancelation","type":"event"},{"anonymous":false,"inputs":[{"components":[{"components":[{"internalType":"address","name":"facet","type":"address"},{"internalType":"enum Diamond.Action","name":"action","type":"uint8"},{"internalType":"bool","name":"isFreezable","type":"bool"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"internalType":"struct Diamond.FacetCut[]","name":"facetCuts","type":"tuple[]"},{"internalType":"address","name":"initAddress","type":"address"},{"internalType":"bytes","name":"initCalldata","type":"bytes"}],"indexed":false,"internalType":"struct Diamond.DiamondCutData","name":"_diamondCut","type":"tuple"}],"name":"DiamondCutProposalExecution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"EmergencyDiamondCutApproved","type":"event"},{"anonymous":false,"inputs":[],"name":"EmergencyFreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isPorterAvailable","type":"bool"}],"name":"IsPorterAvailableStatusUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"NewGovernor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"previousBytecodeHash","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newBytecodeHash","type":"bytes32"}],"name":"NewL2BootloaderBytecodeHash","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"previousBytecodeHash","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newBytecodeHash","type":"bytes32"}],"name":"NewL2DefaultAccountBytecodeHash","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldPendingGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newPendingGovernor","type":"address"}],"name":"NewPendingGovernor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"txId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":false,"internalType":"uint64","name":"expirationBlock","type":"uint64"},{"components":[{"internalType":"uint256","name":"txType","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"},{"internalType":"uint256","name":"ergsLimit","type":"uint256"},{"internalType":"uint256","name":"ergsPerPubdataByteLimit","type":"uint256"},{"internalType":"uint256","name":"maxFeePerErg","type":"uint256"},{"internalType":"uint256","name":"maxPriorityFeePerErg","type":"uint256"},{"internalType":"uint256","name":"paymaster","type":"uint256"},{"internalType":"uint256[6]","name":"reserved","type":"uint256[6]"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256[]","name":"factoryDeps","type":"uint256[]"},{"internalType":"bytes","name":"paymasterInput","type":"bytes"},{"internalType":"bytes","name":"reservedDynamic","type":"bytes"}],"indexed":false,"internalType":"struct IMailbox.L2CanonicalTransaction","name":"transaction","type":"tuple"},{"indexed":false,"internalType":"bytes[]","name":"factoryDeps","type":"bytes[]"}],"name":"NewPriorityRequest","type":"event"},{"anonymous":false,"inputs":[],"name":"Unfreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"validatorAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"isActive","type":"bool"}],"name":"ValidatorStatusUpdate","type":"event"},{"inputs":[],"name":"acceptGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_diamondCutHash","type":"bytes32"}],"name":"approveEmergencyDiamondCutAsSecurityCouncilMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelDiamondCutProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"internalType":"struct IExecutor.StoredBlockInfo","name":"_lastCommittedBlockData","type":"tuple"},{"components":[{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"bytes32","name":"newStateRoot","type":"bytes32"},{"internalType":"uint16","name":"ergsPerCodeDecommittmentWord","type":"uint16"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes","name":"initialStorageChanges","type":"bytes"},{"internalType":"bytes","name":"repeatedStorageChanges","type":"bytes"},{"internalType":"bytes","name":"l2Logs","type":"bytes"},{"internalType":"bytes[]","name":"l2ArbitraryLengthMessages","type":"bytes[]"},{"internalType":"bytes[]","name":"factoryDeps","type":"bytes[]"}],"internalType":"struct IExecutor.CommitBlockInfo[]","name":"_newBlocksData","type":"tuple[]"}],"name":"commitBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyFreezeDiamond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"internalType":"struct IExecutor.StoredBlockInfo[]","name":"_blocksData","type":"tuple[]"}],"name":"executeBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"facet","type":"address"},{"internalType":"enum Diamond.Action","name":"action","type":"uint8"},{"internalType":"bool","name":"isFreezable","type":"bool"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"internalType":"struct Diamond.FacetCut[]","name":"facetCuts","type":"tuple[]"},{"internalType":"address","name":"initAddress","type":"address"},{"internalType":"bytes","name":"initCalldata","type":"bytes"}],"internalType":"struct Diamond.DiamondCutData","name":"_diamondCut","type":"tuple"}],"name":"executeDiamondCutProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"facetAddress","outputs":[{"internalType":"address","name":"facet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facetAddresses","outputs":[{"internalType":"address[]","name":"facets","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_facet","type":"address"}],"name":"facetFunctionSelectors","outputs":[{"internalType":"bytes4[]","name":"","type":"bytes4[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facets","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"internalType":"struct IGetters.Facet[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFirstUnprocessedPriorityTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGovernor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalBlocksCommitted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalBlocksExecuted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalBlocksVerified","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalPriorityTxs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVerifier","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_facet","type":"address"}],"name":"isFacetFreezable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"isFunctionFreezable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isValidator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"blockNumber","type":"uint32"}],"name":"l2LogsRootHash","outputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gasPrice","type":"uint256"},{"internalType":"uint256","name":"_ergsLimit","type":"uint256"},{"internalType":"uint32","name":"_calldataLength","type":"uint32"}],"name":"l2TransactionBaseCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"facet","type":"address"},{"internalType":"enum Diamond.Action","name":"action","type":"uint8"},{"internalType":"bool","name":"isFreezable","type":"bool"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"internalType":"struct Diamond.FacetCut[]","name":"_facetCuts","type":"tuple[]"},{"internalType":"address","name":"_initAddress","type":"address"}],"name":"proposeDiamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"internalType":"struct IExecutor.StoredBlockInfo","name":"_prevBlock","type":"tuple"},{"components":[{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"internalType":"struct IExecutor.StoredBlockInfo[]","name":"_committedBlocks","type":"tuple[]"},{"components":[{"internalType":"uint256[]","name":"recurisiveAggregationInput","type":"uint256[]"},{"internalType":"uint256[]","name":"serializedProof","type":"uint256[]"}],"internalType":"struct IExecutor.ProofInput","name":"_proof","type":"tuple"}],"name":"proveBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"components":[{"internalType":"uint8","name":"l2ShardId","type":"uint8"},{"internalType":"bool","name":"isService","type":"bool"},{"internalType":"uint16","name":"txNumberInBlock","type":"uint16"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"bytes32","name":"value","type":"bytes32"}],"internalType":"struct L2Log","name":"_log","type":"tuple"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"proveL2LogInclusion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"components":[{"internalType":"uint16","name":"txNumberInBlock","type":"uint16"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct L2Message","name":"_message","type":"tuple"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"proveL2MessageInclusion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddressL2","type":"address"},{"internalType":"uint256","name":"_l2Value","type":"uint256"},{"internalType":"bytes","name":"_calldata","type":"bytes"},{"internalType":"uint256","name":"_ergsLimit","type":"uint256"},{"internalType":"bytes[]","name":"_factoryDeps","type":"bytes[]"}],"name":"requestL2Transaction","outputs":[{"internalType":"bytes32","name":"txHash","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blocksToRevert","type":"uint256"}],"name":"revertBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txId","type":"uint256"},{"internalType":"uint256","name":"_l2Value","type":"uint256"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_contractAddressL2","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"},{"internalType":"uint256","name":"_ergsLimit","type":"uint256"},{"internalType":"bytes[]","name":"_factoryDeps","type":"bytes[]"}],"name":"serializeL2Transaction","outputs":[{"components":[{"internalType":"uint256","name":"txType","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"},{"internalType":"uint256","name":"ergsLimit","type":"uint256"},{"internalType":"uint256","name":"ergsPerPubdataByteLimit","type":"uint256"},{"internalType":"uint256","name":"maxFeePerErg","type":"uint256"},{"internalType":"uint256","name":"maxPriorityFeePerErg","type":"uint256"},{"internalType":"uint256","name":"paymaster","type":"uint256"},{"internalType":"uint256[6]","name":"reserved","type":"uint256[6]"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256[]","name":"factoryDeps","type":"uint256[]"},{"internalType":"bytes","name":"paymasterInput","type":"bytes"},{"internalType":"bytes","name":"reservedDynamic","type":"bytes"}],"internalType":"struct IMailbox.L2CanonicalTransaction","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_l2BootloaderBytecodeHash","type":"bytes32"}],"name":"setL2BootloaderBytecodeHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_l2DefaultAccountBytecodeHash","type":"bytes32"}],"name":"setL2DefaultAccountBytecodeHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPendingGovernor","type":"address"}],"name":"setPendingGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isPorterAvailable","type":"bool"}],"name":"setPorterAvailability","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_validator","type":"address"},{"internalType":"bool","name":"_active","type":"bool"}],"name":"setValidator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unfreezeDiamond","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"acceptGovernor()":"e58bb639","approveEmergencyDiamondCutAsSecurityCouncilMember(bytes32)":"635abadb","cancelDiamondCutProposal()":"62c727ab","commitBlocks((uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,uint64,uint64,bytes32,uint16,uint256,bytes32,bytes32,bytes,bytes,bytes,bytes[],bytes[])[])":"fa4f3688","emergencyFreezeDiamond()":"b2f44526","executeBlocks((uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[])":"ce9dcf16","executeDiamondCutProposal(((address,uint8,bool,bytes4[])[],address,bytes))":"0b66fc12","facetAddress(bytes4)":"cdffacc6","facetAddresses()":"52ef6b2c","facetFunctionSelectors(address)":"adfca15e","facets()":"7a0ed627","getFirstUnprocessedPriorityTx()":"79823c9a","getGovernor()":"4fc07d75","getTotalBlocksCommitted()":"fe26699e","getTotalBlocksExecuted()":"39607382","getTotalBlocksVerified()":"af6a2dcd","getTotalPriorityTxs()":"a1954fc5","getVerifier()":"46657fe9","isFacetFreezable(address)":"c3bbd2d7","isFunctionFreezable(bytes4)":"e81e0ba1","isValidator(address)":"facd743b","l2LogsRootHash(uint32)":"54225f93","l2TransactionBaseCost(uint256,uint256,uint32)":"5cd6771e","proposeDiamondCut((address,uint8,bool,bytes4[])[],address)":"1a97bca1","proveBlocks((uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32),(uint64,bytes32,uint64,uint256,bytes32,bytes32,uint256,bytes32)[],(uint256[],uint256[]))":"7739cbe7","proveL2LogInclusion(uint256,uint256,(uint8,bool,uint16,address,bytes32,bytes32),bytes32[])":"263b7f8e","proveL2MessageInclusion(uint256,uint256,(uint16,address,bytes),bytes32[])":"e4948f43","requestL2Transaction(address,uint256,bytes,uint256,bytes[])":"725ad850","revertBlocks(uint256)":"a9a2d18a","serializeL2Transaction(uint256,uint256,address,address,bytes,uint256,bytes[])":"ed9937f5","setL2BootloaderBytecodeHash(bytes32)":"86cb9909","setL2DefaultAccountBytecodeHash(bytes32)":"0707ac09","setPendingGovernor(address)":"f235757f","setPorterAvailability(bool)":"1cc5d103","setValidator(address,bool)":"4623c91d","unfreezeDiamond()":"17338945"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"BlockCommit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"BlockExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBlocksCommitted\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBlocksVerified\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBlocksExecuted\",\"type\":\"uint256\"}],\"name\":\"BlocksRevert\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facet\",\"type\":\"address\"},{\"internalType\":\"enum Diamond.Action\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isFreezable\",\"type\":\"bool\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct Diamond.FacetCut[]\",\"name\":\"_facetCuts\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_initAddress\",\"type\":\"address\"}],\"name\":\"DiamondCutProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"DiamondCutProposalCancelation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facet\",\"type\":\"address\"},{\"internalType\":\"enum Diamond.Action\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isFreezable\",\"type\":\"bool\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct Diamond.FacetCut[]\",\"name\":\"facetCuts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"initAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initCalldata\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct Diamond.DiamondCutData\",\"name\":\"_diamondCut\",\"type\":\"tuple\"}],\"name\":\"DiamondCutProposalExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"EmergencyDiamondCutApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EmergencyFreeze\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isPorterAvailable\",\"type\":\"bool\"}],\"name\":\"IsPorterAvailableStatusUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"NewGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousBytecodeHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newBytecodeHash\",\"type\":\"bytes32\"}],\"name\":\"NewL2BootloaderBytecodeHash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousBytecodeHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newBytecodeHash\",\"type\":\"bytes32\"}],\"name\":\"NewL2DefaultAccountBytecodeHash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldPendingGovernor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newPendingGovernor\",\"type\":\"address\"}],\"name\":\"NewPendingGovernor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"txId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"expirationBlock\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"txType\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ergsLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ergsPerPubdataByteLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerErg\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerErg\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymaster\",\"type\":\"uint256\"},{\"internalType\":\"uint256[6]\",\"name\":\"reserved\",\"type\":\"uint256[6]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256[]\",\"name\":\"factoryDeps\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"paymasterInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"reservedDynamic\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct IMailbox.L2CanonicalTransaction\",\"name\":\"transaction\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes[]\",\"name\":\"factoryDeps\",\"type\":\"bytes[]\"}],\"name\":\"NewPriorityRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Unfreeze\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"name\":\"ValidatorStatusUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_diamondCutHash\",\"type\":\"bytes32\"}],\"name\":\"approveEmergencyDiamondCutAsSecurityCouncilMember\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelDiamondCutProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"indexRepeatedStorageChanges\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"numberOfLayer1Txs\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"priorityOperationsHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l2LogsTreeRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"internalType\":\"struct IExecutor.StoredBlockInfo\",\"name\":\"_lastCommittedBlockData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"indexRepeatedStorageChanges\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"newStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"ergsPerCodeDecommittmentWord\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"numberOfLayer1Txs\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"l2LogsTreeRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"priorityOperationsHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"initialStorageChanges\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"repeatedStorageChanges\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"l2Logs\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"l2ArbitraryLengthMessages\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"factoryDeps\",\"type\":\"bytes[]\"}],\"internalType\":\"struct IExecutor.CommitBlockInfo[]\",\"name\":\"_newBlocksData\",\"type\":\"tuple[]\"}],\"name\":\"commitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emergencyFreezeDiamond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"indexRepeatedStorageChanges\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"numberOfLayer1Txs\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"priorityOperationsHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l2LogsTreeRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"internalType\":\"struct IExecutor.StoredBlockInfo[]\",\"name\":\"_blocksData\",\"type\":\"tuple[]\"}],\"name\":\"executeBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facet\",\"type\":\"address\"},{\"internalType\":\"enum Diamond.Action\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isFreezable\",\"type\":\"bool\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct Diamond.FacetCut[]\",\"name\":\"facetCuts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"initAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initCalldata\",\"type\":\"bytes\"}],\"internalType\":\"struct Diamond.DiamondCutData\",\"name\":\"_diamondCut\",\"type\":\"tuple\"}],\"name\":\"executeDiamondCutProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"facetAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"facet\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facetAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"facets\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_facet\",\"type\":\"address\"}],\"name\":\"facetFunctionSelectors\",\"outputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"\",\"type\":\"bytes4[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facets\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IGetters.Facet[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFirstUnprocessedPriorityTx\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGovernor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalBlocksCommitted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalBlocksExecuted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalBlocksVerified\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalPriorityTxs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVerifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_facet\",\"type\":\"address\"}],\"name\":\"isFacetFreezable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_selector\",\"type\":\"bytes4\"}],\"name\":\"isFunctionFreezable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"isValidator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"}],\"name\":\"l2LogsRootHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ergsLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_calldataLength\",\"type\":\"uint32\"}],\"name\":\"l2TransactionBaseCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facet\",\"type\":\"address\"},{\"internalType\":\"enum Diamond.Action\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isFreezable\",\"type\":\"bool\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct Diamond.FacetCut[]\",\"name\":\"_facetCuts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_initAddress\",\"type\":\"address\"}],\"name\":\"proposeDiamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"indexRepeatedStorageChanges\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"numberOfLayer1Txs\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"priorityOperationsHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l2LogsTreeRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"internalType\":\"struct IExecutor.StoredBlockInfo\",\"name\":\"_prevBlock\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"indexRepeatedStorageChanges\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"numberOfLayer1Txs\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"priorityOperationsHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l2LogsTreeRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"internalType\":\"struct IExecutor.StoredBlockInfo[]\",\"name\":\"_committedBlocks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"recurisiveAggregationInput\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"serializedProof\",\"type\":\"uint256[]\"}],\"internalType\":\"struct IExecutor.ProofInput\",\"name\":\"_proof\",\"type\":\"tuple\"}],\"name\":\"proveBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"l2ShardId\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isService\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"txNumberInBlock\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"internalType\":\"struct L2Log\",\"name\":\"_log\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"_proof\",\"type\":\"bytes32[]\"}],\"name\":\"proveL2LogInclusion\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"txNumberInBlock\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct L2Message\",\"name\":\"_message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"_proof\",\"type\":\"bytes32[]\"}],\"name\":\"proveL2MessageInclusion\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contractAddressL2\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_l2Value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_ergsLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"_factoryDeps\",\"type\":\"bytes[]\"}],\"name\":\"requestL2Transaction\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blocksToRevert\",\"type\":\"uint256\"}],\"name\":\"revertBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_txId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2Value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_contractAddressL2\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_ergsLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"_factoryDeps\",\"type\":\"bytes[]\"}],\"name\":\"serializeL2Transaction\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"txType\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ergsLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ergsPerPubdataByteLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerErg\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerErg\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymaster\",\"type\":\"uint256\"},{\"internalType\":\"uint256[6]\",\"name\":\"reserved\",\"type\":\"uint256[6]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256[]\",\"name\":\"factoryDeps\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"paymasterInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"reservedDynamic\",\"type\":\"bytes\"}],\"internalType\":\"struct IMailbox.L2CanonicalTransaction\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_l2BootloaderBytecodeHash\",\"type\":\"bytes32\"}],\"name\":\"setL2BootloaderBytecodeHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_l2DefaultAccountBytecodeHash\",\"type\":\"bytes32\"}],\"name\":\"setL2DefaultAccountBytecodeHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newPendingGovernor\",\"type\":\"address\"}],\"name\":\"setPendingGovernor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_isPorterAvailable\",\"type\":\"bool\"}],\"name\":\"setPorterAvailability\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_active\",\"type\":\"bool\"}],\"name\":\"setValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unfreezeDiamond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"BlockCommit(uint256)\":{\"notice\":\"Event emitted when a block is committed\"},\"BlockExecution(uint256)\":{\"notice\":\"Event emitted when a block is executed\"},\"BlocksRevert(uint256,uint256,uint256)\":{\"notice\":\"Event emitted when blocks are reverted\"},\"IsPorterAvailableStatusUpdate(bool)\":{\"notice\":\"Porter availability status changes\"},\"NewGovernor(address)\":{\"notice\":\"Governor changed\"},\"NewL2BootloaderBytecodeHash(bytes32,bytes32)\":{\"notice\":\"\\u0421hanges to the bytecode that is used in L2 as a bootloader (start program)\"},\"NewL2DefaultAccountBytecodeHash(bytes32,bytes32)\":{\"notice\":\"\\u0421hanges to the bytecode that is used in L2 as a default account\"},\"NewPendingGovernor(address,address)\":{\"notice\":\"pendingGovernor is changed\"},\"NewPriorityRequest(uint256,bytes32,uint64,(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[6],bytes,bytes,uint256[],bytes,bytes),bytes[])\":{\"notice\":\"New priority request event. Emitted when a request is placed into the priority queue\"},\"ValidatorStatusUpdate(address,bool)\":{\"notice\":\"Validator's status changed\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IZkSync.sol\":\"IZkSync\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IAllowList.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\ninterface IAllowList {\\n    /*//////////////////////////////////////////////////////////////\\n                            EVENTS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    /// @notice public access is changed\\n    event UpdatePublicAccess(address indexed target, bool newStatus);\\n\\n    /// @notice permission to call is changed\\n    event UpdateCallPermission(address indexed caller, address indexed target, bytes4 indexed functionSig, bool status);\\n\\n    /// @notice pendingOwner is changed\\n    /// @dev Also emitted when the new owner is accepted and in this case, `newPendingOwner` would be zero address\\n    event NewPendingOwner(address indexed oldPendingOwner, address indexed newPendingOwner);\\n\\n    /// @notice Owner changed\\n    event NewOwner(address indexed newOwner);\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            GETTERS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function pendingOwner() external view returns (address);\\n\\n    function owner() external view returns (address);\\n\\n    function isAccessPublic(address _target) external view returns (bool);\\n\\n    function hasSpecialAccessToCall(\\n        address _caller,\\n        address _target,\\n        bytes4 _functionSig\\n    ) external view returns (bool);\\n\\n    function canCall(\\n        address _caller,\\n        address _target,\\n        bytes4 _functionSig\\n    ) external view returns (bool);\\n\\n    /*//////////////////////////////////////////////////////////////\\n                           ALLOW LIST LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function setBatchPublicAccess(address[] calldata _targets, bool[] calldata _enables) external;\\n\\n    function setPublicAccess(address _target, bool _enable) external;\\n\\n    function setBatchPermissionToCall(\\n        address[] calldata _callers,\\n        address[] calldata _targets,\\n        bytes4[] calldata _functionSigs,\\n        bool[] calldata _enables\\n    ) external;\\n\\n    function setPermissionToCall(\\n        address _caller,\\n        address _target,\\n        bytes4 _functionSig,\\n        bool _enable\\n    ) external;\\n\\n    function setPendingOwner(address _newPendingOwner) external;\\n\\n    function acceptOwner() external;\\n}\\n\",\"keccak256\":\"0x648fee7e23d2ca13481efc07902a38b817be7606bf288902d72f81a2cabcf2f5\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n * @dev Unlike EIP-20 standard \\\"transfer\\\" and \\\"transferFrom\\\" functions do not return any value.\\n * This is made to be compatible with popular tokens that are implemented standard incorrectly.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external;\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external;\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x5bfbd33ae826ac8185db71bb348c91010938dbb2dd0859ce908f4812ff39d2fe\",\"license\":\"UNLICENSED\"},\"@matterlabs/zksync-contracts/l1/contracts/common/libraries/UncheckedMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nlibrary UncheckedMath {\\n    function uncheckedInc(uint256 _number) internal pure returns (uint256) {\\n        unchecked {\\n            return _number + 1;\\n        }\\n    }\\n\\n    function uncheckedAdd(uint256 _lhs, uint256 _rhs) internal pure returns (uint256) {\\n        unchecked {\\n            return _lhs + _rhs;\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7d0dff9b45338f35b32bc711192aec50973e13dc74b8e941d64586b510179c12\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/Plonk4VerifierWithAccessToDNext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/PairingsBn254.sol\\\";\\nimport \\\"./libraries/TranscriptLib.sol\\\";\\nimport \\\"../common/libraries/UncheckedMath.sol\\\";\\n\\nuint256 constant STATE_WIDTH = 4;\\nuint256 constant NUM_G2_ELS = 2;\\n\\nstruct VerificationKey {\\n    uint256 domain_size;\\n    uint256 num_inputs;\\n    PairingsBn254.Fr omega;\\n    PairingsBn254.G1Point[2] gate_selectors_commitments;\\n    PairingsBn254.G1Point[7] gate_setup_commitments;\\n    PairingsBn254.G1Point[STATE_WIDTH] permutation_commitments;\\n    PairingsBn254.G1Point lookup_selector_commitment;\\n    PairingsBn254.G1Point[4] lookup_tables_commitments;\\n    PairingsBn254.G1Point lookup_table_type_commitment;\\n    PairingsBn254.Fr[STATE_WIDTH - 1] non_residues;\\n    PairingsBn254.G2Point[NUM_G2_ELS] g2_elements;\\n}\\n\\ncontract Plonk4VerifierWithAccessToDNext {\\n    using PairingsBn254 for PairingsBn254.G1Point;\\n    using PairingsBn254 for PairingsBn254.G2Point;\\n    using PairingsBn254 for PairingsBn254.Fr;\\n\\n    using TranscriptLib for TranscriptLib.Transcript;\\n\\n    using UncheckedMath for uint256;\\n\\n    struct Proof {\\n        uint256[] input_values;\\n        // commitments\\n        PairingsBn254.G1Point[STATE_WIDTH] state_polys_commitments;\\n        PairingsBn254.G1Point copy_permutation_grand_product_commitment;\\n        PairingsBn254.G1Point[STATE_WIDTH] quotient_poly_parts_commitments;\\n        // openings\\n        PairingsBn254.Fr[STATE_WIDTH] state_polys_openings_at_z;\\n        PairingsBn254.Fr[1] state_polys_openings_at_z_omega; // TODO: not use array while there is only D_next\\n        PairingsBn254.Fr[1] gate_selectors_openings_at_z;\\n        PairingsBn254.Fr[STATE_WIDTH - 1] copy_permutation_polys_openings_at_z;\\n        PairingsBn254.Fr copy_permutation_grand_product_opening_at_z_omega;\\n        PairingsBn254.Fr quotient_poly_opening_at_z;\\n        PairingsBn254.Fr linearization_poly_opening_at_z;\\n        // lookup commitments\\n        PairingsBn254.G1Point lookup_s_poly_commitment;\\n        PairingsBn254.G1Point lookup_grand_product_commitment;\\n        // lookup openings\\n        PairingsBn254.Fr lookup_s_poly_opening_at_z_omega;\\n        PairingsBn254.Fr lookup_grand_product_opening_at_z_omega;\\n        PairingsBn254.Fr lookup_t_poly_opening_at_z;\\n        PairingsBn254.Fr lookup_t_poly_opening_at_z_omega;\\n        PairingsBn254.Fr lookup_selector_poly_opening_at_z;\\n        PairingsBn254.Fr lookup_table_type_poly_opening_at_z;\\n        PairingsBn254.G1Point opening_proof_at_z;\\n        PairingsBn254.G1Point opening_proof_at_z_omega;\\n    }\\n\\n    struct PartialVerifierState {\\n        PairingsBn254.Fr zero;\\n        PairingsBn254.Fr alpha;\\n        PairingsBn254.Fr beta;\\n        PairingsBn254.Fr gamma;\\n        PairingsBn254.Fr[9] alpha_values;\\n        PairingsBn254.Fr eta;\\n        PairingsBn254.Fr beta_lookup;\\n        PairingsBn254.Fr gamma_lookup;\\n        PairingsBn254.Fr beta_plus_one;\\n        PairingsBn254.Fr beta_gamma;\\n        PairingsBn254.Fr v;\\n        PairingsBn254.Fr u;\\n        PairingsBn254.Fr z;\\n        PairingsBn254.Fr z_omega;\\n        PairingsBn254.Fr z_minus_last_omega;\\n        PairingsBn254.Fr l_0_at_z;\\n        PairingsBn254.Fr l_n_minus_one_at_z;\\n        PairingsBn254.Fr t;\\n        PairingsBn254.G1Point tp;\\n    }\\n\\n    function evaluate_l0_at_point(uint256 domain_size, PairingsBn254.Fr memory at)\\n        internal\\n        view\\n        returns (PairingsBn254.Fr memory num)\\n    {\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n\\n        PairingsBn254.Fr memory size_fe = PairingsBn254.new_fr(domain_size);\\n        PairingsBn254.Fr memory den = at.copy();\\n        den.sub_assign(one);\\n        den.mul_assign(size_fe);\\n\\n        den = den.inverse();\\n\\n        num = at.pow(domain_size);\\n        num.sub_assign(one);\\n        num.mul_assign(den);\\n    }\\n\\n    function evaluate_lagrange_poly_out_of_domain(\\n        uint256 poly_num,\\n        uint256 domain_size,\\n        PairingsBn254.Fr memory omega,\\n        PairingsBn254.Fr memory at\\n    ) internal view returns (PairingsBn254.Fr memory res) {\\n        // (omega^i / N) / (X - omega^i) * (X^N - 1)\\n        require(poly_num < domain_size);\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n        PairingsBn254.Fr memory omega_power = omega.pow(poly_num);\\n        res = at.pow(domain_size);\\n        res.sub_assign(one);\\n        require(res.value != 0); // Vanishing polynomial can not be zero at point `at`\\n        res.mul_assign(omega_power);\\n\\n        PairingsBn254.Fr memory den = PairingsBn254.copy(at);\\n        den.sub_assign(omega_power);\\n        den.mul_assign(PairingsBn254.new_fr(domain_size));\\n\\n        den = den.inverse();\\n\\n        res.mul_assign(den);\\n    }\\n\\n    function evaluate_vanishing(uint256 domain_size, PairingsBn254.Fr memory at)\\n        internal\\n        view\\n        returns (PairingsBn254.Fr memory res)\\n    {\\n        res = at.pow(domain_size);\\n        res.sub_assign(PairingsBn254.new_fr(1));\\n    }\\n\\n    function initialize_transcript(Proof memory proof, VerificationKey memory vk)\\n        internal\\n        pure\\n        returns (PartialVerifierState memory state)\\n    {\\n        TranscriptLib.Transcript memory transcript = TranscriptLib.new_transcript();\\n\\n        for (uint256 i = 0; i < vk.num_inputs; i = i.uncheckedInc()) {\\n            transcript.update_with_u256(proof.input_values[i]);\\n        }\\n\\n        for (uint256 i = 0; i < STATE_WIDTH; i = i.uncheckedInc()) {\\n            transcript.update_with_g1(proof.state_polys_commitments[i]);\\n        }\\n\\n        state.eta = transcript.get_challenge();\\n        transcript.update_with_g1(proof.lookup_s_poly_commitment);\\n\\n        state.beta = transcript.get_challenge();\\n        state.gamma = transcript.get_challenge();\\n\\n        transcript.update_with_g1(proof.copy_permutation_grand_product_commitment);\\n        state.beta_lookup = transcript.get_challenge();\\n        state.gamma_lookup = transcript.get_challenge();\\n        transcript.update_with_g1(proof.lookup_grand_product_commitment);\\n        state.alpha = transcript.get_challenge();\\n\\n        for (uint256 i = 0; i < proof.quotient_poly_parts_commitments.length; i = i.uncheckedInc()) {\\n            transcript.update_with_g1(proof.quotient_poly_parts_commitments[i]);\\n        }\\n        state.z = transcript.get_challenge();\\n\\n        transcript.update_with_fr(proof.quotient_poly_opening_at_z);\\n\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.state_polys_openings_at_z[i]);\\n        }\\n\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z_omega.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.state_polys_openings_at_z_omega[i]);\\n        }\\n        for (uint256 i = 0; i < proof.gate_selectors_openings_at_z.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.gate_selectors_openings_at_z[i]);\\n        }\\n        for (uint256 i = 0; i < proof.copy_permutation_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.copy_permutation_polys_openings_at_z[i]);\\n        }\\n\\n        state.z_omega = state.z.copy();\\n        state.z_omega.mul_assign(vk.omega);\\n\\n        transcript.update_with_fr(proof.copy_permutation_grand_product_opening_at_z_omega);\\n\\n        transcript.update_with_fr(proof.lookup_t_poly_opening_at_z);\\n        transcript.update_with_fr(proof.lookup_selector_poly_opening_at_z);\\n        transcript.update_with_fr(proof.lookup_table_type_poly_opening_at_z);\\n        transcript.update_with_fr(proof.lookup_s_poly_opening_at_z_omega);\\n        transcript.update_with_fr(proof.lookup_grand_product_opening_at_z_omega);\\n        transcript.update_with_fr(proof.lookup_t_poly_opening_at_z_omega);\\n        transcript.update_with_fr(proof.linearization_poly_opening_at_z);\\n\\n        state.v = transcript.get_challenge();\\n\\n        transcript.update_with_g1(proof.opening_proof_at_z);\\n        transcript.update_with_g1(proof.opening_proof_at_z_omega);\\n\\n        state.u = transcript.get_challenge();\\n    }\\n\\n    // compute some powers of challenge alpha([alpha^1, .. alpha^8])\\n    function compute_powers_of_alpha(PartialVerifierState memory state) public pure {\\n        require(state.alpha.value != 0);\\n        state.alpha_values[0] = PairingsBn254.new_fr(1);\\n        state.alpha_values[1] = state.alpha.copy();\\n        PairingsBn254.Fr memory current_alpha = state.alpha.copy();\\n        for (uint256 i = 2; i < state.alpha_values.length; i = i.uncheckedInc()) {\\n            current_alpha.mul_assign(state.alpha);\\n            state.alpha_values[i] = current_alpha.copy();\\n        }\\n    }\\n\\n    function verify(Proof memory proof, VerificationKey memory vk) internal view returns (bool) {\\n        // we initialize all challenges beforehand, we can draw each challenge in its own place\\n        PartialVerifierState memory state = initialize_transcript(proof, vk);\\n        if (verify_quotient_evaluation(vk, proof, state) == false) {\\n            return false;\\n        }\\n        require(proof.state_polys_openings_at_z_omega.length == 1); // TODO\\n\\n        PairingsBn254.G1Point memory quotient_result = proof.quotient_poly_parts_commitments[0].copy_g1();\\n        {\\n            // block scope\\n            PairingsBn254.Fr memory z_in_domain_size = state.z.pow(vk.domain_size);\\n            PairingsBn254.Fr memory current_z = z_in_domain_size.copy();\\n            PairingsBn254.G1Point memory tp;\\n            // start from i =1\\n            for (uint256 i = 1; i < proof.quotient_poly_parts_commitments.length; i = i.uncheckedInc()) {\\n                tp = proof.quotient_poly_parts_commitments[i].copy_g1();\\n                tp.point_mul_assign(current_z);\\n                quotient_result.point_add_assign(tp);\\n\\n                current_z.mul_assign(z_in_domain_size);\\n            }\\n        }\\n\\n        Queries memory queries = prepare_queries(vk, proof, state);\\n        queries.commitments_at_z[0] = quotient_result;\\n        queries.values_at_z[0] = proof.quotient_poly_opening_at_z;\\n        queries.commitments_at_z[1] = aggregated_linearization_commitment(vk, proof, state);\\n        queries.values_at_z[1] = proof.linearization_poly_opening_at_z;\\n\\n        require(queries.commitments_at_z.length == queries.values_at_z.length);\\n\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z = queries.commitments_at_z[0];\\n\\n        PairingsBn254.Fr memory aggregated_opening_at_z = queries.values_at_z[0];\\n        PairingsBn254.Fr memory aggregation_challenge = PairingsBn254.new_fr(1);\\n        PairingsBn254.G1Point memory scaled;\\n        for (uint256 i = 1; i < queries.commitments_at_z.length; i = i.uncheckedInc()) {\\n            aggregation_challenge.mul_assign(state.v);\\n            scaled = queries.commitments_at_z[i].point_mul(aggregation_challenge);\\n            aggregated_commitment_at_z.point_add_assign(scaled);\\n\\n            state.t = queries.values_at_z[i];\\n            state.t.mul_assign(aggregation_challenge);\\n            aggregated_opening_at_z.add_assign(state.t);\\n        }\\n\\n        aggregation_challenge.mul_assign(state.v);\\n\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z_omega = queries.commitments_at_z_omega[0].point_mul(\\n            aggregation_challenge\\n        );\\n        PairingsBn254.Fr memory aggregated_opening_at_z_omega = queries.values_at_z_omega[0];\\n        aggregated_opening_at_z_omega.mul_assign(aggregation_challenge);\\n        for (uint256 i = 1; i < queries.commitments_at_z_omega.length; i = i.uncheckedInc()) {\\n            aggregation_challenge.mul_assign(state.v);\\n\\n            scaled = queries.commitments_at_z_omega[i].point_mul(aggregation_challenge);\\n            aggregated_commitment_at_z_omega.point_add_assign(scaled);\\n\\n            state.t = queries.values_at_z_omega[i];\\n            state.t.mul_assign(aggregation_challenge);\\n            aggregated_opening_at_z_omega.add_assign(state.t);\\n        }\\n\\n        return\\n            final_pairing(\\n                vk.g2_elements,\\n                proof,\\n                state,\\n                aggregated_commitment_at_z,\\n                aggregated_commitment_at_z_omega,\\n                aggregated_opening_at_z,\\n                aggregated_opening_at_z_omega\\n            );\\n    }\\n\\n    function verify_quotient_evaluation(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) internal view returns (bool) {\\n        uint256[] memory lagrange_poly_numbers = new uint256[](vk.num_inputs);\\n        for (uint256 i = 0; i < lagrange_poly_numbers.length; i = i.uncheckedInc()) {\\n            lagrange_poly_numbers[i] = i;\\n        }\\n        // require(vk.num_inputs > 0); // TODO\\n\\n        PairingsBn254.Fr memory inputs_term = PairingsBn254.new_fr(0);\\n        for (uint256 i = 0; i < vk.num_inputs; i = i.uncheckedInc()) {\\n            // TODO we may use batched lagrange compputation\\n            state.t = evaluate_lagrange_poly_out_of_domain(i, vk.domain_size, vk.omega, state.z);\\n            state.t.mul_assign(PairingsBn254.new_fr(proof.input_values[i]));\\n            inputs_term.add_assign(state.t);\\n        }\\n        inputs_term.mul_assign(proof.gate_selectors_openings_at_z[0]);\\n        PairingsBn254.Fr memory result = proof.linearization_poly_opening_at_z.copy();\\n        result.add_assign(inputs_term);\\n\\n        // compute powers of alpha\\n        compute_powers_of_alpha(state);\\n        PairingsBn254.Fr memory factor = state.alpha_values[4].copy();\\n        factor.mul_assign(proof.copy_permutation_grand_product_opening_at_z_omega);\\n\\n        // - alpha_0 * (a + perm(z) * beta + gamma)*()*(d + gamma) * z(z*omega)\\n        require(proof.copy_permutation_polys_openings_at_z.length == STATE_WIDTH - 1);\\n        PairingsBn254.Fr memory t; // TMP;\\n        for (uint256 i = 0; i < proof.copy_permutation_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            t = proof.copy_permutation_polys_openings_at_z[i].copy();\\n            t.mul_assign(state.beta);\\n            t.add_assign(proof.state_polys_openings_at_z[i]);\\n            t.add_assign(state.gamma);\\n\\n            factor.mul_assign(t);\\n        }\\n\\n        t = proof.state_polys_openings_at_z[3].copy();\\n        t.add_assign(state.gamma);\\n        factor.mul_assign(t);\\n        result.sub_assign(factor);\\n\\n        // - L_0(z) * alpha_1\\n        PairingsBn254.Fr memory l_0_at_z = evaluate_l0_at_point(vk.domain_size, state.z);\\n        l_0_at_z.mul_assign(state.alpha_values[4 + 1]);\\n        result.sub_assign(l_0_at_z);\\n\\n        PairingsBn254.Fr memory lookup_quotient_contrib = lookup_quotient_contribution(vk, proof, state);\\n        result.add_assign(lookup_quotient_contrib);\\n\\n        PairingsBn254.Fr memory lhs = proof.quotient_poly_opening_at_z.copy();\\n        lhs.mul_assign(evaluate_vanishing(vk.domain_size, state.z));\\n        return lhs.value == result.value;\\n    }\\n\\n    function lookup_quotient_contribution(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) internal view returns (PairingsBn254.Fr memory result) {\\n        PairingsBn254.Fr memory t;\\n\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n        state.beta_plus_one = state.beta_lookup.copy();\\n        state.beta_plus_one.add_assign(one);\\n        state.beta_gamma = state.beta_plus_one.copy();\\n        state.beta_gamma.mul_assign(state.gamma_lookup);\\n\\n        // (s'*beta + gamma)*(zw')*alpha\\n        t = proof.lookup_s_poly_opening_at_z_omega.copy();\\n        t.mul_assign(state.beta_lookup);\\n        t.add_assign(state.beta_gamma);\\n        t.mul_assign(proof.lookup_grand_product_opening_at_z_omega);\\n        t.mul_assign(state.alpha_values[6]);\\n\\n        // (z - omega^{n-1}) for this part\\n        PairingsBn254.Fr memory last_omega = vk.omega.pow(vk.domain_size - 1);\\n        state.z_minus_last_omega = state.z.copy();\\n        state.z_minus_last_omega.sub_assign(last_omega);\\n        t.mul_assign(state.z_minus_last_omega);\\n        result.add_assign(t);\\n\\n        // - alpha_1 * L_{0}(z)\\n        state.l_0_at_z = evaluate_lagrange_poly_out_of_domain(0, vk.domain_size, vk.omega, state.z);\\n        t = state.l_0_at_z.copy();\\n        t.mul_assign(state.alpha_values[6 + 1]);\\n        result.sub_assign(t);\\n\\n        // - alpha_2 * beta_gamma_powered L_{n-1}(z)\\n        PairingsBn254.Fr memory beta_gamma_powered = state.beta_gamma.pow(vk.domain_size - 1);\\n        state.l_n_minus_one_at_z = evaluate_lagrange_poly_out_of_domain(\\n            vk.domain_size - 1,\\n            vk.domain_size,\\n            vk.omega,\\n            state.z\\n        );\\n        t = state.l_n_minus_one_at_z.copy();\\n        t.mul_assign(beta_gamma_powered);\\n        t.mul_assign(state.alpha_values[6 + 2]);\\n\\n        result.sub_assign(t);\\n    }\\n\\n    function aggregated_linearization_commitment(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) internal view returns (PairingsBn254.G1Point memory result) {\\n        // qMain*(Q_a * A + Q_b * B + Q_c * C + Q_d * D + Q_m * A*B + Q_const + Q_dNext * D_next)\\n        result = PairingsBn254.new_g1(0, 0);\\n        // Q_a * A\\n        PairingsBn254.G1Point memory scaled = vk.gate_setup_commitments[0].point_mul(\\n            proof.state_polys_openings_at_z[0]\\n        );\\n        result.point_add_assign(scaled);\\n        // Q_b * B\\n        scaled = vk.gate_setup_commitments[1].point_mul(proof.state_polys_openings_at_z[1]);\\n        result.point_add_assign(scaled);\\n        // Q_c * C\\n        scaled = vk.gate_setup_commitments[2].point_mul(proof.state_polys_openings_at_z[2]);\\n        result.point_add_assign(scaled);\\n        // Q_d * D\\n        scaled = vk.gate_setup_commitments[3].point_mul(proof.state_polys_openings_at_z[3]);\\n        result.point_add_assign(scaled);\\n        // Q_m* A*B or Q_ab*A*B\\n        PairingsBn254.Fr memory t = proof.state_polys_openings_at_z[0].copy();\\n        t.mul_assign(proof.state_polys_openings_at_z[1]);\\n        scaled = vk.gate_setup_commitments[4].point_mul(t);\\n        result.point_add_assign(scaled);\\n        // Q_const\\n        result.point_add_assign(vk.gate_setup_commitments[5]);\\n        // Q_dNext * D_next\\n        scaled = vk.gate_setup_commitments[6].point_mul(proof.state_polys_openings_at_z_omega[0]);\\n        result.point_add_assign(scaled);\\n        result.point_mul_assign(proof.gate_selectors_openings_at_z[0]);\\n\\n        PairingsBn254.G1Point\\n            memory rescue_custom_gate_linearization_contrib = rescue_custom_gate_linearization_contribution(\\n                vk,\\n                proof,\\n                state\\n            );\\n        result.point_add_assign(rescue_custom_gate_linearization_contrib);\\n        require(vk.non_residues.length == STATE_WIDTH - 1);\\n\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n        PairingsBn254.Fr memory factor = state.alpha_values[4].copy();\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z.length; ) {\\n            t = state.z.copy();\\n            if (i == 0) {\\n                t.mul_assign(one);\\n            } else {\\n                t.mul_assign(vk.non_residues[i - 1]); // TODO add one into non-residues during codegen?\\n            }\\n            t.mul_assign(state.beta);\\n            t.add_assign(state.gamma);\\n            t.add_assign(proof.state_polys_openings_at_z[i]);\\n\\n            factor.mul_assign(t);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n\\n        scaled = proof.copy_permutation_grand_product_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n\\n        // - (a(z) + beta*perm_a + gamma)*()*()*z(z*omega) * beta * perm_d(X)\\n        factor = state.alpha_values[4].copy();\\n        factor.mul_assign(state.beta);\\n        factor.mul_assign(proof.copy_permutation_grand_product_opening_at_z_omega);\\n        for (uint256 i = 0; i < STATE_WIDTH - 1; i = i.uncheckedInc()) {\\n            t = proof.copy_permutation_polys_openings_at_z[i].copy();\\n            t.mul_assign(state.beta);\\n            t.add_assign(state.gamma);\\n            t.add_assign(proof.state_polys_openings_at_z[i]);\\n\\n            factor.mul_assign(t);\\n        }\\n        scaled = vk.permutation_commitments[3].point_mul(factor);\\n        result.point_sub_assign(scaled);\\n\\n        // + L_0(z) * Z(x)\\n        // TODO\\n        state.l_0_at_z = evaluate_lagrange_poly_out_of_domain(0, vk.domain_size, vk.omega, state.z);\\n        require(state.l_0_at_z.value != 0);\\n        factor = state.l_0_at_z.copy();\\n        factor.mul_assign(state.alpha_values[4 + 1]);\\n        scaled = proof.copy_permutation_grand_product_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n\\n        PairingsBn254.G1Point memory lookup_linearization_contrib = lookup_linearization_contribution(proof, state);\\n        result.point_add_assign(lookup_linearization_contrib);\\n    }\\n\\n    function rescue_custom_gate_linearization_contribution(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) public view returns (PairingsBn254.G1Point memory result) {\\n        PairingsBn254.Fr memory t;\\n        PairingsBn254.Fr memory intermediate_result;\\n\\n        // a^2 - b = 0\\n        t = proof.state_polys_openings_at_z[0].copy();\\n        t.mul_assign(t);\\n        t.sub_assign(proof.state_polys_openings_at_z[1]);\\n        // t.mul_assign(challenge1);\\n        t.mul_assign(state.alpha_values[1]);\\n        intermediate_result.add_assign(t);\\n\\n        // b^2 - c = 0\\n        t = proof.state_polys_openings_at_z[1].copy();\\n        t.mul_assign(t);\\n        t.sub_assign(proof.state_polys_openings_at_z[2]);\\n        t.mul_assign(state.alpha_values[1 + 1]);\\n        intermediate_result.add_assign(t);\\n\\n        // c*a - d = 0;\\n        t = proof.state_polys_openings_at_z[2].copy();\\n        t.mul_assign(proof.state_polys_openings_at_z[0]);\\n        t.sub_assign(proof.state_polys_openings_at_z[3]);\\n        t.mul_assign(state.alpha_values[1 + 2]);\\n        intermediate_result.add_assign(t);\\n\\n        result = vk.gate_selectors_commitments[1].point_mul(intermediate_result);\\n    }\\n\\n    function lookup_linearization_contribution(Proof memory proof, PartialVerifierState memory state)\\n        internal\\n        view\\n        returns (PairingsBn254.G1Point memory result)\\n    {\\n        PairingsBn254.Fr memory zero = PairingsBn254.new_fr(0);\\n\\n        PairingsBn254.Fr memory t;\\n        PairingsBn254.Fr memory factor;\\n        // s(x) from the Z(x*omega)*(\\\\gamma*(1 + \\\\beta) + s(x) + \\\\beta * s(x*omega)))\\n        factor = proof.lookup_grand_product_opening_at_z_omega.copy();\\n        factor.mul_assign(state.alpha_values[6]);\\n        factor.mul_assign(state.z_minus_last_omega);\\n\\n        PairingsBn254.G1Point memory scaled = proof.lookup_s_poly_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n\\n        // Z(x) from - alpha_0 * Z(x) * (\\\\beta + 1) * (\\\\gamma + f(x)) * (\\\\gamma(1 + \\\\beta) + t(x) + \\\\beta * t(x*omega))\\n        // + alpha_1 * Z(x) * L_{0}(z) + alpha_2 * Z(x) * L_{n-1}(z)\\n\\n        // accumulate coefficient\\n        factor = proof.lookup_t_poly_opening_at_z_omega.copy();\\n        factor.mul_assign(state.beta_lookup);\\n        factor.add_assign(proof.lookup_t_poly_opening_at_z);\\n        factor.add_assign(state.beta_gamma);\\n\\n        // (\\\\gamma + f(x))\\n        PairingsBn254.Fr memory f_reconstructed;\\n        PairingsBn254.Fr memory current = PairingsBn254.new_fr(1);\\n        PairingsBn254.Fr memory tmp0;\\n        for (uint256 i = 0; i < STATE_WIDTH - 1; i = i.uncheckedInc()) {\\n            tmp0 = proof.state_polys_openings_at_z[i].copy();\\n            tmp0.mul_assign(current);\\n            f_reconstructed.add_assign(tmp0);\\n\\n            current.mul_assign(state.eta);\\n        }\\n\\n        // add type of table\\n        t = proof.lookup_table_type_poly_opening_at_z.copy();\\n        t.mul_assign(current);\\n        f_reconstructed.add_assign(t);\\n\\n        f_reconstructed.mul_assign(proof.lookup_selector_poly_opening_at_z);\\n        f_reconstructed.add_assign(state.gamma_lookup);\\n\\n        // end of (\\\\gamma + f(x)) part\\n        factor.mul_assign(f_reconstructed);\\n        factor.mul_assign(state.beta_plus_one);\\n        t = zero.copy();\\n        t.sub_assign(factor);\\n        factor = t;\\n        factor.mul_assign(state.alpha_values[6]);\\n\\n        // Multiply by (z - omega^{n-1})\\n        factor.mul_assign(state.z_minus_last_omega);\\n\\n        // L_{0}(z) in front of Z(x)\\n        t = state.l_0_at_z.copy();\\n        t.mul_assign(state.alpha_values[6 + 1]);\\n        factor.add_assign(t);\\n\\n        // L_{n-1}(z) in front of Z(x)\\n        t = state.l_n_minus_one_at_z.copy();\\n        t.mul_assign(state.alpha_values[6 + 2]);\\n        factor.add_assign(t);\\n\\n        scaled = proof.lookup_grand_product_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n    }\\n\\n    struct Queries {\\n        PairingsBn254.G1Point[13] commitments_at_z;\\n        PairingsBn254.Fr[13] values_at_z;\\n        PairingsBn254.G1Point[6] commitments_at_z_omega;\\n        PairingsBn254.Fr[6] values_at_z_omega;\\n    }\\n\\n    function prepare_queries(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) public view returns (Queries memory queries) {\\n        // we set first two items in calee side so start idx from 2\\n        uint256 idx = 2;\\n        for (uint256 i = 0; i < STATE_WIDTH; i = i.uncheckedInc()) {\\n            queries.commitments_at_z[idx] = proof.state_polys_commitments[i];\\n            queries.values_at_z[idx] = proof.state_polys_openings_at_z[i];\\n            idx = idx.uncheckedInc();\\n        }\\n        require(proof.gate_selectors_openings_at_z.length == 1);\\n        queries.commitments_at_z[idx] = vk.gate_selectors_commitments[0];\\n        queries.values_at_z[idx] = proof.gate_selectors_openings_at_z[0];\\n        idx = idx.uncheckedInc();\\n        for (uint256 i = 0; i < STATE_WIDTH - 1; i = i.uncheckedInc()) {\\n            queries.commitments_at_z[idx] = vk.permutation_commitments[i];\\n            queries.values_at_z[idx] = proof.copy_permutation_polys_openings_at_z[i];\\n            idx = idx.uncheckedInc();\\n        }\\n\\n        queries.commitments_at_z_omega[0] = proof.copy_permutation_grand_product_commitment;\\n        queries.commitments_at_z_omega[1] = proof.state_polys_commitments[STATE_WIDTH - 1];\\n\\n        queries.values_at_z_omega[0] = proof.copy_permutation_grand_product_opening_at_z_omega;\\n        queries.values_at_z_omega[1] = proof.state_polys_openings_at_z_omega[0];\\n\\n        PairingsBn254.G1Point memory lookup_t_poly_commitment_aggregated = vk.lookup_tables_commitments[0];\\n        PairingsBn254.Fr memory current_eta = state.eta.copy();\\n        for (uint256 i = 1; i < vk.lookup_tables_commitments.length; i = i.uncheckedInc()) {\\n            state.tp = vk.lookup_tables_commitments[i].point_mul(current_eta);\\n            lookup_t_poly_commitment_aggregated.point_add_assign(state.tp);\\n\\n            current_eta.mul_assign(state.eta);\\n        }\\n        queries.commitments_at_z[idx] = lookup_t_poly_commitment_aggregated;\\n        queries.values_at_z[idx] = proof.lookup_t_poly_opening_at_z;\\n        idx = idx.uncheckedInc();\\n        queries.commitments_at_z[idx] = vk.lookup_selector_commitment;\\n        queries.values_at_z[idx] = proof.lookup_selector_poly_opening_at_z;\\n        idx = idx.uncheckedInc();\\n        queries.commitments_at_z[idx] = vk.lookup_table_type_commitment;\\n        queries.values_at_z[idx] = proof.lookup_table_type_poly_opening_at_z;\\n        queries.commitments_at_z_omega[2] = proof.lookup_s_poly_commitment;\\n        queries.values_at_z_omega[2] = proof.lookup_s_poly_opening_at_z_omega;\\n        queries.commitments_at_z_omega[3] = proof.lookup_grand_product_commitment;\\n        queries.values_at_z_omega[3] = proof.lookup_grand_product_opening_at_z_omega;\\n        queries.commitments_at_z_omega[4] = lookup_t_poly_commitment_aggregated;\\n        queries.values_at_z_omega[4] = proof.lookup_t_poly_opening_at_z_omega;\\n    }\\n\\n    function final_pairing(\\n        // VerificationKey memory vk,\\n        PairingsBn254.G2Point[NUM_G2_ELS] memory g2_elements,\\n        Proof memory proof,\\n        PartialVerifierState memory state,\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z,\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z_omega,\\n        PairingsBn254.Fr memory aggregated_opening_at_z,\\n        PairingsBn254.Fr memory aggregated_opening_at_z_omega\\n    ) internal view returns (bool) {\\n        // q(x) = f(x) - f(z) / (x - z)\\n        // q(x) * (x-z)  = f(x) - f(z)\\n\\n        // f(x)\\n        PairingsBn254.G1Point memory pair_with_generator = aggregated_commitment_at_z.copy_g1();\\n        aggregated_commitment_at_z_omega.point_mul_assign(state.u);\\n        pair_with_generator.point_add_assign(aggregated_commitment_at_z_omega);\\n\\n        // - f(z)*g\\n        PairingsBn254.Fr memory aggregated_value = aggregated_opening_at_z_omega.copy();\\n        aggregated_value.mul_assign(state.u);\\n        aggregated_value.add_assign(aggregated_opening_at_z);\\n        PairingsBn254.G1Point memory tp = PairingsBn254.P1().point_mul(aggregated_value);\\n        pair_with_generator.point_sub_assign(tp);\\n\\n        // +z * q(x)\\n        tp = proof.opening_proof_at_z.point_mul(state.z);\\n        PairingsBn254.Fr memory t = state.z_omega.copy();\\n        t.mul_assign(state.u);\\n        PairingsBn254.G1Point memory t1 = proof.opening_proof_at_z_omega.point_mul(t);\\n        tp.point_add_assign(t1);\\n        pair_with_generator.point_add_assign(tp);\\n\\n        // rhs\\n        PairingsBn254.G1Point memory pair_with_x = proof.opening_proof_at_z_omega.point_mul(state.u);\\n        pair_with_x.point_add_assign(proof.opening_proof_at_z);\\n        pair_with_x.negate();\\n        // Pairing precompile expects points to be in a `i*x[1] + x[0]` form instead of `x[0] + i*x[1]`\\n        // so we handle it in code generation step\\n        PairingsBn254.G2Point memory first_g2 = g2_elements[0];\\n        PairingsBn254.G2Point memory second_g2 = g2_elements[1];\\n        PairingsBn254.G2Point memory gen2 = PairingsBn254.P2();\\n\\n        return PairingsBn254.pairingProd2(pair_with_generator, first_g2, pair_with_x, second_g2);\\n    }\\n}\\n\",\"keccak256\":\"0x3ef4937c0ab65a60baabb5b00ece282148267f94bc6c087254faf925c2bdc7d2\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/Storage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Verifier.sol\\\";\\nimport \\\"../common/interfaces/IAllowList.sol\\\";\\nimport \\\"./libraries/PriorityQueue.sol\\\";\\n\\n/// @dev Logically separated part of the storage structure, which is responsible for everything related to proxy upgrades and diamond cuts\\n/// @param proposedDiamondCutHash The hash of diamond cut that was proposed in the current upgrade\\n/// @param proposedDiamondCutTimestamp The timestamp when the diamond cut was proposed, zero if there are no active proposals\\n/// @param lastDiamondFreezeTimestamp The timestamp when the diamond was frozen last time, zero if the diamond was never frozen\\n/// @param currentProposalId The serial number of proposed diamond cuts, increments when proposing a new diamond cut\\n/// @param securityCouncilMembers The set of the trusted\\u00a0addresses that can instantly finish upgrade (diamond cut)\\n/// @param securityCouncilMemberLastApprovedProposalId The mapping of the security council addresses and the last diamond cut that they approved\\n/// @param securityCouncilEmergencyApprovals The number of received upgrade approvals from the security council\\nstruct DiamondCutStorage {\\n    bytes32 proposedDiamondCutHash;\\n    uint256 proposedDiamondCutTimestamp;\\n    uint256 lastDiamondFreezeTimestamp;\\n    uint256 currentProposalId;\\n    mapping(address => bool) securityCouncilMembers;\\n    mapping(address => uint256) securityCouncilMemberLastApprovedProposalId;\\n    uint256 securityCouncilEmergencyApprovals;\\n}\\n\\n/// @dev The log passed from L2\\n/// @param l2ShardId The shard identifier, 0 - rollup, 1 - porter. All other values are not used but are reserved for the future\\n/// @param isService A boolean flag that is part of the log along with `key`, `value`, and `sender` address.\\n/// This field is required formally but does not have any special meaning.\\n/// @param txNumberInBlock The L2 transaction number in a block, in which the log was sent\\n/// @param sender The L2 address which sent the log\\n/// @param key The 32 bytes of information that was sent in the log\\n/// @param value The 32 bytes of information that was sent in the log\\n// Both `key` and `value` are arbitrary 32-bytes selected by the log sender\\nstruct L2Log {\\n    uint8 l2ShardId;\\n    bool isService;\\n    uint16 txNumberInBlock;\\n    address sender;\\n    bytes32 key;\\n    bytes32 value;\\n}\\n\\n/// @dev An arbitrary length message passed from L2\\n/// @notice Under the hood it is `L2Log` sent from the special system L2 contract\\n/// @param txNumberInBlock The L2 transaction number in a block, in which the message was sent\\n/// @param sender The address of the L2 account from which the message was passed\\n/// @param data An arbitrary length message\\nstruct L2Message {\\n    uint16 txNumberInBlock;\\n    address sender;\\n    bytes data;\\n}\\n\\n/// @notice Part of the configuration parameters of ZKP circuits\\nstruct VerifierParams {\\n    bytes32 recursionNodeLevelVkHash;\\n    bytes32 recursionLeafLevelVkHash;\\n    bytes32 recursionCircuitsSetVksHash;\\n}\\n\\n/// @dev storing all storage variables for zkSync facets\\n/// NOTE: It is used in a proxy, so it is possible to add new variables to the end\\n/// NOTE: but NOT to modify already existing variables or change their order\\nstruct AppStorage {\\n    /// @dev Storage of variables needed for diamond cut facet\\n    DiamondCutStorage diamondCutStorage;\\n    /// @notice Address which will exercise governance over the network i.e. change validator set, conduct upgrades\\n    address governor;\\n    /// @notice Address that governor proposed as one that will replace it\\n    address pendingGovernor;\\n    /// @notice List of permitted validators\\n    mapping(address => bool) validators;\\n    // TODO: should be used an external library approach\\n    /// @dev Verifier contract. Used to verify aggregated proof for blocks\\n    Verifier verifier;\\n    /// @notice Total number of executed blocks i.e. blocks[totalBlocksExecuted] points at the latest executed block (block 0 is genesis)\\n    uint256 totalBlocksExecuted;\\n    /// @notice Total number of proved blocks i.e. blocks[totalBlocksProved] points at the latest proved block\\n    uint256 totalBlocksVerified;\\n    /// @notice Total number of committed blocks i.e. blocks[totalBlocksCommitted] points at the latest committed block\\n    uint256 totalBlocksCommitted;\\n    /// @dev Stored hashed StoredBlock for block number\\n    mapping(uint256 => bytes32) storedBlockHashes;\\n    /// @dev Stored root hashes of L2 -> L1 logs\\n    mapping(uint256 => bytes32) l2LogsRootHashes;\\n    /// @dev Container that stores transactions requested from L1\\n    PriorityQueue.Queue priorityQueue;\\n    /// @dev The smart contract that manages the list with permission to call contract functions\\n    IAllowList allowList;\\n    /// @notice Part of the configuration parameters of ZKP circuits. Used as an input for the verifier smart contract\\n    VerifierParams verifierParams;\\n    /// @notice Bytecode hash of bootloader program.\\n    /// @dev Used as an input to zkp-circuit.\\n    bytes32 l2BootloaderBytecodeHash;\\n    /// @notice Bytecode hash of default account (bytecode for EOA).\\n    /// @dev Used as an input to zkp-circuit.\\n    bytes32 l2DefaultAccountBytecodeHash;\\n    /// @dev Indicates that the porter may be touched on L2 transactions.\\n    /// @dev Used as an input to zkp-circuit.\\n    bool zkPorterIsAvailable;\\n}\\n\",\"keccak256\":\"0x1f516b4ec879df93a4044881f1eb938e3ae250641e83f4f40a06463b0496c09e\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/Verifier.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../common/libraries/UncheckedMath.sol\\\";\\nimport \\\"./Plonk4VerifierWithAccessToDNext.sol\\\";\\n\\ncontract Verifier is Plonk4VerifierWithAccessToDNext {\\n    using UncheckedMath for uint256;\\n\\n    function get_verification_key() internal pure returns (VerificationKey memory vk) {\\n        vk.num_inputs = 1;\\n        vk.domain_size = 256;\\n        vk.omega = PairingsBn254.new_fr(0x1058a83d529be585820b96ff0a13f2dbd8675a9e5dd2336a6692cc1e5a526c81);\\n        // coefficients\\n        vk.gate_setup_commitments[0] = PairingsBn254.new_g1(\\n            0x05f5cabc4eab14cfabee1334ef7f33a66259cc9fd07af862308d5c41765adb4b,\\n            0x128a103fbe66c8ff697182c0963d963208b55a5a53ddeab9b4bc09dc2a68a9cc\\n        );\\n        vk.gate_setup_commitments[1] = PairingsBn254.new_g1(\\n            0x0d9980170c334c107e6ce4d66bbc4d23bbcdc97c020b1e1c3f6e04c6c663d2c2,\\n            0x0968205845091ceaf3f863b1613fbdf7ce9a87ccfd97f22011679e6350384419\\n        );\\n        vk.gate_setup_commitments[2] = PairingsBn254.new_g1(\\n            0x0c84a19b149a1612cb042ad86382b9e94367c0add60d07e12399999e7db09efe,\\n            0x1e02f70c44c9bfb7bf2164cee2ab4813bcb9be56eb432e2e9dfffffe196d846d\\n        );\\n        vk.gate_setup_commitments[3] = PairingsBn254.new_g1(\\n            0x1eb3599506a41a7d62e1f7438d6732fbb9d1eda7b9c7a0213eca63c9334ac5a9,\\n            0x23563d9f429908d8ea80bffa642840fb081936d45b388bafc504d9b1e5b1c410\\n        );\\n        vk.gate_setup_commitments[4] = PairingsBn254.new_g1(\\n            0x0000000000000000000000000000000000000000000000000000000000000000,\\n            0x0000000000000000000000000000000000000000000000000000000000000001\\n        );\\n        vk.gate_setup_commitments[5] = PairingsBn254.new_g1(\\n            0x063e8dac7ee3ee6a4569fd53b416fe17f8f10de8c435c336e5a1cf2e02643200,\\n            0x1d4c1781b78f926d55f89ef72abb96bee350ce60ddc684f5a02d87c5f4cdf943\\n        );\\n        vk.gate_setup_commitments[6] = PairingsBn254.new_g1(\\n            0x0000000000000000000000000000000000000000000000000000000000000000,\\n            0x0000000000000000000000000000000000000000000000000000000000000001\\n        );\\n        // gate selectors\\n        vk.gate_selectors_commitments[0] = PairingsBn254.new_g1(\\n            0x0b487eb34c8480ea506f5c6c25857155d61d7f9824b60bc80e1a415a5bcf247f,\\n            0x07ea0d0d0df9dbcc944e9341a5bb49ae796d9dc9d7ca1c032b53784715b946db\\n        );\\n        vk.gate_selectors_commitments[1] = PairingsBn254.new_g1(\\n            0x0fa66faa0b9ea782eb400175ac9f0c05f0de64332eec54a87cd20db4540baec2,\\n            0x07dea33d314c690c4bd4b21deda1a44b9f8dd87e539024622768c2f8b8bdabe1\\n        );\\n        // permutation\\n        vk.permutation_commitments[0] = PairingsBn254.new_g1(\\n            0x120482c52e31d2373f9b2dc80a47e68f035e278d220fa8a89d0c81f133343953,\\n            0x02928a78ea2e1a943e9220b7e288fd48a561263f8e5f94518f21aaa43781ceac\\n        );\\n        vk.permutation_commitments[1] = PairingsBn254.new_g1(\\n            0x1dfad2c4d60704bcf6af0abd9cce09151f063c4b52200c268e470c6a6c93cbca,\\n            0x08b28dd6ca14d7c33e078fe0f332a9a4d95ac8df171355de9e69930aec02b5dc\\n        );\\n        vk.permutation_commitments[2] = PairingsBn254.new_g1(\\n            0x0935a4fd6ab67925929661cf2d2e814f87f589ee6234cb9675ecc2d897f1b338,\\n            0x1032ccc41c047413fce4a847ba7e51e4a2ea406d89a88d480c5f0efaf6c8c89a\\n        );\\n        vk.permutation_commitments[3] = PairingsBn254.new_g1(\\n            0x0eafaea3af7d1fadb2138db1b991af5d2218f6892714fd019898c7e1a43ecfe8,\\n            0x28fb17eda285ed74cc9771d62fad22ab459bbb0a4968c489972aca8b7e618fcb\\n        );\\n        // lookup table commitments\\n        vk.lookup_selector_commitment = PairingsBn254.new_g1(\\n            0x155201a564e721b1f5c06315ad4e24eaad3cbdd6197b19cd903fe85613080f86,\\n            0x12fb201bc896572ac14357e2601f5118636f1eeb7b89c177ac940aac3b5253ec\\n        );\\n        vk.lookup_tables_commitments[0] = PairingsBn254.new_g1(\\n            0x1cb0e2ae4d52743898d94d7f1729bd0d3357ba035cdb6b3af7ebff9159f8f297,\\n            0x15ee595227c9e0f7a487ddb8072d5ea3cfd058bc569211c3546bc0e80051553f\\n        );\\n        vk.lookup_tables_commitments[1] = PairingsBn254.new_g1(\\n            0x13e4ab94c03a5a29719930c1361d854e244cf918f1e29cb031303f4a13b71977,\\n            0x0f792ef4c6c8746c97be61ed9b20f31ba2dec3bd5c91a2d9a4a586f19af3a07c\\n        );\\n        vk.lookup_tables_commitments[2] = PairingsBn254.new_g1(\\n            0x1c9e69bd2b04240ebe44fb23d67c596fce4a1336109fdce38c2f184a63cd8acc,\\n            0x1cbd3e72bdbce827227e503690b10be9365ae760e9d2babde5ba81edf12f8206\\n        );\\n        vk.lookup_tables_commitments[3] = PairingsBn254.new_g1(\\n            0x2a0d46339fbf72104df6a241b53a957602b1a16f6e3b9f89bf3e4c4645df823c,\\n            0x11a601d7b2eee4b7885f34c9873426ba1263f38eae2e0351d653b8b1ba9c67f6\\n        );\\n        vk.lookup_table_type_commitment = PairingsBn254.new_g1(\\n            0x1a70e43f18b18d686807c2b1c6471cd949dd251b48090bca443d86b97afae951,\\n            0x0e6e23ad15a1bd851b228788ae4a03bf25bda39ede6d5a92d501a8402a0dfe43\\n        );\\n        // non residues\\n        vk.non_residues[0] = PairingsBn254.new_fr(0x0000000000000000000000000000000000000000000000000000000000000005);\\n        vk.non_residues[1] = PairingsBn254.new_fr(0x0000000000000000000000000000000000000000000000000000000000000007);\\n        vk.non_residues[2] = PairingsBn254.new_fr(0x000000000000000000000000000000000000000000000000000000000000000a);\\n\\n        // g2 elements\\n        vk.g2_elements[0] = PairingsBn254.new_g2(\\n            [\\n                0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,\\n                0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\\n            ],\\n            [\\n                0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,\\n                0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\\n            ]\\n        );\\n        vk.g2_elements[1] = PairingsBn254.new_g2(\\n            [\\n                0x260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c1,\\n                0x0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b0\\n            ],\\n            [\\n                0x04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4,\\n                0x22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55\\n            ]\\n        );\\n    }\\n\\n    function deserialize_proof(uint256[] calldata public_inputs, uint256[] calldata serialized_proof)\\n        internal\\n        pure\\n        returns (Proof memory proof)\\n    {\\n        // require(serialized_proof.length == 44); TODO\\n        proof.input_values = new uint256[](public_inputs.length);\\n        for (uint256 i = 0; i < public_inputs.length; i = i.uncheckedInc()) {\\n            proof.input_values[i] = public_inputs[i];\\n        }\\n\\n        uint256 j;\\n        for (uint256 i = 0; i < STATE_WIDTH; i = i.uncheckedInc()) {\\n            proof.state_polys_commitments[i] = PairingsBn254.new_g1_checked(\\n                serialized_proof[j],\\n                serialized_proof[j.uncheckedInc()]\\n            );\\n\\n            j = j.uncheckedAdd(2);\\n        }\\n        proof.copy_permutation_grand_product_commitment = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n        j = j.uncheckedAdd(2);\\n\\n        proof.lookup_s_poly_commitment = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n        j = j.uncheckedAdd(2);\\n\\n        proof.lookup_grand_product_commitment = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n        j = j.uncheckedAdd(2);\\n        for (uint256 i = 0; i < proof.quotient_poly_parts_commitments.length; i = i.uncheckedInc()) {\\n            proof.quotient_poly_parts_commitments[i] = PairingsBn254.new_g1_checked(\\n                serialized_proof[j],\\n                serialized_proof[j.uncheckedInc()]\\n            );\\n            j = j.uncheckedAdd(2);\\n        }\\n\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            proof.state_polys_openings_at_z[i] = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n            j = j.uncheckedInc();\\n        }\\n\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z_omega.length; i = i.uncheckedInc()) {\\n            proof.state_polys_openings_at_z_omega[i] = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n            j = j.uncheckedInc();\\n        }\\n        for (uint256 i = 0; i < proof.gate_selectors_openings_at_z.length; i = i.uncheckedInc()) {\\n            proof.gate_selectors_openings_at_z[i] = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n            j = j.uncheckedInc();\\n        }\\n        for (uint256 i = 0; i < proof.copy_permutation_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            proof.copy_permutation_polys_openings_at_z[i] = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n            j = j.uncheckedInc();\\n        }\\n        proof.copy_permutation_grand_product_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n        j = j.uncheckedInc();\\n        proof.lookup_s_poly_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.lookup_grand_product_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n        j = j.uncheckedInc();\\n        proof.lookup_t_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n        j = j.uncheckedInc();\\n        proof.lookup_t_poly_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.lookup_selector_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.lookup_table_type_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.quotient_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.linearization_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.opening_proof_at_z = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n        j = j.uncheckedAdd(2);\\n        proof.opening_proof_at_z_omega = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n    }\\n\\n    function verify_serialized_proof(uint256[] calldata public_inputs, uint256[] calldata serialized_proof)\\n        public\\n        view\\n        returns (bool)\\n    {\\n        VerificationKey memory vk = get_verification_key();\\n        require(vk.num_inputs == public_inputs.length);\\n\\n        Proof memory proof = deserialize_proof(public_inputs, serialized_proof);\\n\\n        return verify(proof, vk);\\n    }\\n}\\n\",\"keccak256\":\"0x5d093f2c0d383f12fb6b8c2b2bc32c8ea07f579c2daee7d68aed8cf8041715a0\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8;\\n\\nimport \\\"../libraries/Diamond.sol\\\";\\n\\ninterface IDiamondCut {\\n    function proposeDiamondCut(Diamond.FacetCut[] calldata _facetCuts, address _initAddress) external;\\n\\n    function cancelDiamondCutProposal() external;\\n\\n    function executeDiamondCutProposal(Diamond.DiamondCutData calldata _diamondCut) external;\\n\\n    function emergencyFreezeDiamond() external;\\n\\n    function unfreezeDiamond() external;\\n\\n    function approveEmergencyDiamondCutAsSecurityCouncilMember(bytes32 _diamondCutHash) external;\\n\\n    // FIXME: token holders should have the ability to cancel the upgrade\\n\\n    event DiamondCutProposal(Diamond.FacetCut[] _facetCuts, address _initAddress);\\n\\n    event DiamondCutProposalCancelation();\\n\\n    event DiamondCutProposalExecution(Diamond.DiamondCutData _diamondCut);\\n\\n    event EmergencyFreeze();\\n\\n    event Unfreeze();\\n\\n    event EmergencyDiamondCutApproved(address _address);\\n}\\n\",\"keccak256\":\"0x75be50498de7a7d1a95493aa066e45ed57f8f10f5176be3744ee03e7d5cc1141\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8;\\n\\ninterface IExecutor {\\n    /// @notice Rollup block stored data\\n    /// @param blockNumber Rollup block number\\n    /// @param blockHash Hash of L2 block\\n    /// @param indexRepeatedStorageChanges The serial number of the shortcut index that's used as a unique identifier for storage keys that were used twice or more\\n    /// @param numberOfLayer1Txs Number of priority operations to be processed\\n    /// @param priorityOperationsHash Hash of all priority operations from this block\\n    /// @param l2LogsTreeRoot Root hash of tree that contains L2 -> L1 messages from this block\\n    /// @param timestamp Rollup block timestamp, have the same format as Ethereum block constant\\n    /// @param stateRoot Merkle root of the rollup state tree\\n    /// @param commitment Verified input for the zkSync circuit\\n    struct StoredBlockInfo {\\n        uint64 blockNumber;\\n        bytes32 blockHash;\\n        uint64 indexRepeatedStorageChanges;\\n        uint256 numberOfLayer1Txs;\\n        bytes32 priorityOperationsHash;\\n        bytes32 l2LogsTreeRoot;\\n        uint256 timestamp;\\n        bytes32 commitment;\\n    }\\n\\n    /// @notice Data needed to commit new block\\n    /// @param blockNumber Number of the committed block\\n    /// @param timestamp Unix timestamp denoting the start of the block execution\\n    /// @param indexRepeatedStorageChanges The serial number of the shortcut index that's used as a unique identifier for storage keys that were used twice or more\\n    /// @param newStateRoot The state root of the full state tree\\n    /// @param ergsPerPubdataByteInBlock Price in ergs per one byte of published pubdata in block\\n    /// @param ergsPerCodeDecommittmentWord Price in ergs per decommittment of one machine word from l2 bytecode\\n    /// @param numberOfLayer1Txs Number of priority operations to be processed\\n    /// @param l2LogsTreeRoot The root hash of the tree that contains all L2 -> L1 logs in the block\\n    /// @param priorityOperationsHash Hash of all priority operations from this block\\n    /// @param initialStorageChanges Storage write access as a concatenation key-value\\n    /// @param repeatedStorageChanges Storage write access as a concatenation index-value\\n    /// @param l2Logs concatenation of all L2 -> L1 logs in the block\\n    /// @param l2ArbitraryLengthMessages array of hash preimages that were sent as value of L2 logs by special system L2 contract\\n    /// @param factoryDeps array of l2 bytecodes that were marked as known on L2\\n    struct CommitBlockInfo {\\n        uint64 blockNumber;\\n        uint64 timestamp;\\n        uint64 indexRepeatedStorageChanges;\\n        bytes32 newStateRoot;\\n        uint16 ergsPerCodeDecommittmentWord;\\n        uint256 numberOfLayer1Txs;\\n        bytes32 l2LogsTreeRoot;\\n        bytes32 priorityOperationsHash;\\n        bytes initialStorageChanges;\\n        bytes repeatedStorageChanges;\\n        bytes l2Logs;\\n        bytes[] l2ArbitraryLengthMessages;\\n        bytes[] factoryDeps;\\n    }\\n\\n    /// @notice Recursive proof input data (individual commitments are constructed onchain)\\n    /// TODO: The verifier integration is not finished yet, change the structure for compatibility later\\n    struct ProofInput {\\n        uint256[] recurisiveAggregationInput;\\n        uint256[] serializedProof;\\n    }\\n\\n    function commitBlocks(StoredBlockInfo calldata _lastCommittedBlockData, CommitBlockInfo[] calldata _newBlocksData)\\n        external;\\n\\n    function proveBlocks(\\n        StoredBlockInfo calldata _prevBlock,\\n        StoredBlockInfo[] calldata _committedBlocks,\\n        ProofInput calldata _proof\\n    ) external;\\n\\n    function executeBlocks(StoredBlockInfo[] calldata _blocksData) external;\\n\\n    function revertBlocks(uint256 _blocksToRevert) external;\\n\\n    /// @notice Event emitted when a block is committed\\n    event BlockCommit(uint256 indexed blockNumber);\\n\\n    /// @notice Event emitted when a block is executed\\n    event BlockExecution(uint256 indexed blockNumber);\\n\\n    /// @notice Event emitted when blocks are reverted\\n    event BlocksRevert(uint256 totalBlocksCommitted, uint256 totalBlocksVerified, uint256 totalBlocksExecuted);\\n}\\n\",\"keccak256\":\"0xc8a0de30a54c7abc686b4d5f0bf9eaf4733c6ddd5a79880e85be77258ce03a48\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IGetters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8;\\n\\ninterface IGetters {\\n    /*//////////////////////////////////////////////////////////////\\n                            CUSTOM GETTERS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function getVerifier() external view returns (address);\\n\\n    function getGovernor() external view returns (address);\\n\\n    function getTotalBlocksCommitted() external view returns (uint256);\\n\\n    function getTotalBlocksVerified() external view returns (uint256);\\n\\n    function getTotalBlocksExecuted() external view returns (uint256);\\n\\n    function getTotalPriorityTxs() external view returns (uint256);\\n\\n    function getFirstUnprocessedPriorityTx() external view returns (uint256);\\n\\n    function isValidator(address _address) external view returns (bool);\\n\\n    function l2LogsRootHash(uint32 blockNumber) external view returns (bytes32 hash);\\n\\n    function isFunctionFreezable(bytes4 _selector) external view returns (bool);\\n\\n    function isFacetFreezable(address _facet) external view returns (bool);\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            DIAMOND LOUPE\\n    //////////////////////////////////////////////////////////////*/\\n\\n    /// @notice Fa\\u0441et structure compatible with the EIP-2535 diamond loupe\\n    /// @param addr The address of the facet contract\\n    /// @param selectors The NON-sorted array with selectors associated with facet\\n    struct Facet {\\n        address addr;\\n        bytes4[] selectors;\\n    }\\n\\n    function facets() external view returns (Facet[] memory);\\n\\n    function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory);\\n\\n    function facetAddresses() external view returns (address[] memory facets);\\n\\n    function facetAddress(bytes4 _selector) external view returns (address facet);\\n}\\n\",\"keccak256\":\"0x666d1cafd424c9174d55c6e97a529ae73eecba2c7c4b3387bf260bd0aa53b3bb\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IGovernance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8;\\n\\ninterface IGovernance {\\n    function setPendingGovernor(address _newPendingGovernor) external;\\n\\n    function acceptGovernor() external;\\n\\n    function setValidator(address _validator, bool _active) external;\\n\\n    function setL2BootloaderBytecodeHash(bytes32 _l2BootloaderBytecodeHash) external;\\n\\n    function setL2DefaultAccountBytecodeHash(bytes32 _l2DefaultAccountBytecodeHash) external;\\n\\n    function setPorterAvailability(bool _isPorterAvailable) external;\\n\\n    /// @notice \\u0421hanges to the bytecode that is used in L2 as a bootloader (start program)\\n    event NewL2BootloaderBytecodeHash(bytes32 indexed previousBytecodeHash, bytes32 indexed newBytecodeHash);\\n\\n    /// @notice \\u0421hanges to the bytecode that is used in L2 as a default account\\n    event NewL2DefaultAccountBytecodeHash(bytes32 indexed previousBytecodeHash, bytes32 indexed newBytecodeHash);\\n\\n    /// @notice Porter availability status changes\\n    event IsPorterAvailableStatusUpdate(bool isPorterAvailable);\\n\\n    /// @notice Validator's status changed\\n    event ValidatorStatusUpdate(address indexed validatorAddress, bool isActive);\\n\\n    /// @notice pendingGovernor is changed\\n    /// @dev Also emitted when new governor is accepted and in this case, `newPendingGovernor` would be zero address\\n    event NewPendingGovernor(address indexed oldPendingGovernor, address indexed newPendingGovernor);\\n\\n    /// @notice Governor changed\\n    event NewGovernor(address indexed newGovernor);\\n}\\n\",\"keccak256\":\"0xf198e4b73230e5768c32fa3355af1d376c7bfd9ee1b6ab1b3485efbed0eb1d50\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IMailbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8;\\n\\nimport {L2Log, L2Message} from \\\"../Storage.sol\\\";\\nimport \\\"../../common/interfaces/IERC20.sol\\\";\\n\\ninterface IMailbox {\\n    /// @dev Structure that includes all fields of the L2 transaction\\n    /// @dev The hash of this structure is the \\\"canonical L2 transaction hash\\\" and can be used as a unique identifier of a tx\\n    /// @param txType The tx type number, depending on which the L2 transaction can be interpreted differently\\n    /// @param from The sender's address. `uint256` type for possible address format changes and maintaining backward compatibility\\n    /// @param to The recipient's address. `uint256` type for possible address format changes and maintaining backward compatibility\\n    /// @param ergsLimit Ergs limit on L2 transaction. Analog to the `gasLimit` on an L1 transactions\\n    /// @param ergsPerPubdataByteLimit Maximum number of ergs that will cost one byte of pubdata (every piece of data that will be stored on L1 as calldata)\\n    /// @param maxFeePerErg The absolute maximum sender willing to pay per unit of ergs to get the transaction included in a block. Analog to the EIP-1559 `maxFeePerGas` on an L1 transactions\\n    /// @param maxPriorityFeePerErg The additional fee that is paid directly to the validator to incentivize them to include the transaction in a block. Analog to the EIP-1559 `maxPriorityFeePerGas` on an L1 transactions\\n    /// @param paymaster The address of the EIP-4337 paymaster, that will pay fees for the transaction. `uint256` type for possible address format changes and maintaining backward compatibility\\n    /// @param reserved The fixed-length fields for usage in a future extension of transaction formats\\n    /// @param data The calldata that is transmitted for the transaction call\\n    /// @param signature An abstract set of bytes that are used for transaction authorization\\n    /// @param factoryDeps The set of L2 bytecode hashes whose preimages were shown on L1\\n    /// @param paymasterInput The arbitrary-length data that is used as a calldata to the paymaster pre-call\\n    /// @param reservedDynamic The arbitrary-length field for usage in a future extension of transaction formats\\n    struct L2CanonicalTransaction {\\n        uint256 txType;\\n        uint256 from;\\n        uint256 to;\\n        uint256 ergsLimit;\\n        uint256 ergsPerPubdataByteLimit;\\n        uint256 maxFeePerErg;\\n        uint256 maxPriorityFeePerErg;\\n        uint256 paymaster;\\n        // In the future, we might want to add some\\n        // new fields to the struct. The `txData` struct\\n        // is to be passed to account and any changes to its structure\\n        // would mean a breaking change to these accounts. To prevent this,\\n        // we should keep some fields as \\\"reserved\\\".\\n        // It is also recommended that their length is fixed, since\\n        // it would allow easier proof integration (in case we will need\\n        // some special circuit for preprocessing transactions).\\n        uint256[6] reserved;\\n        bytes data;\\n        bytes signature;\\n        uint256[] factoryDeps;\\n        bytes paymasterInput;\\n        // Reserved dynamic type for the future use-case. Using it should be avoided,\\n        // But it is still here, just in case we want to enable some additional functionality.\\n        bytes reservedDynamic;\\n    }\\n\\n    function proveL2MessageInclusion(\\n        uint256 _blockNumber,\\n        uint256 _index,\\n        L2Message calldata _message,\\n        bytes32[] calldata _proof\\n    ) external view returns (bool);\\n\\n    function proveL2LogInclusion(\\n        uint256 _blockNumber,\\n        uint256 _index,\\n        L2Log memory _log,\\n        bytes32[] calldata _proof\\n    ) external view returns (bool);\\n\\n    function serializeL2Transaction(\\n        uint256 _txId,\\n        uint256 _l2Value,\\n        address _sender,\\n        address _contractAddressL2,\\n        bytes calldata _calldata,\\n        uint256 _ergsLimit,\\n        bytes[] calldata _factoryDeps\\n    ) external pure returns (L2CanonicalTransaction memory);\\n\\n    function requestL2Transaction(\\n        address _contractAddressL2,\\n        uint256 _l2Value,\\n        bytes calldata _calldata,\\n        uint256 _ergsLimit,\\n        bytes[] calldata _factoryDeps\\n    ) external payable returns (bytes32 txHash);\\n\\n    function l2TransactionBaseCost(\\n        uint256 _gasPrice,\\n        uint256 _ergsLimit,\\n        uint32 _calldataLength\\n    ) external view returns (uint256);\\n\\n    /// @notice New priority request event. Emitted when a request is placed into the priority queue\\n    /// @param txId Serial number of the priority operation\\n    /// @param txHash keccak256 hash of encoded transaction representation\\n    /// @param expirationBlock Ethereum block number up to which priority request should be processed\\n    /// @param transaction The whole transaction structure that is requested to be executed on L2\\n    /// @param factoryDeps An array of bytecodes that were shown in the L1 public data. Will be marked as known bytecodes in L2\\n    event NewPriorityRequest(\\n        uint256 txId,\\n        bytes32 txHash,\\n        uint64 expirationBlock,\\n        L2CanonicalTransaction transaction,\\n        bytes[] factoryDeps\\n    );\\n}\\n\",\"keccak256\":\"0xc4ea8c255c5759ea84322b5d43f0a84e9347e287cdd469803f72d534dd5aad0a\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IZkSync.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8;\\n\\nimport \\\"./IMailbox.sol\\\";\\nimport \\\"./IGovernance.sol\\\";\\nimport \\\"./IExecutor.sol\\\";\\nimport \\\"./IDiamondCut.sol\\\";\\nimport \\\"./IGetters.sol\\\";\\n\\ninterface IZkSync is IMailbox, IGovernance, IExecutor, IDiamondCut, IGetters {}\\n\",\"keccak256\":\"0x4a988a586ac54ce45cf065bbe1ed8d19b2b4b75ffae0ff9c9276d8a2a3d16c7d\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/Diamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/// @author Matter Labs\\n/// @notice The helper library for managing the EIP-2535 diamond proxy.\\nlibrary Diamond {\\n    /// @dev Magic value that should be returned by diamond cut initialize contracts.\\n    /// @dev Used to distinguish calls to contracts that were supposed to be used as diamond initializer from other contracts.\\n    bytes32 constant DIAMOND_INIT_SUCCESS_RETURN_VALUE = keccak256(\\\"diamond.zksync.init\\\");\\n\\n    /// @dev Storage position of `DiamondStorage` structure.\\n    bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n    /// @dev Utility struct that contains associated facet & meta information of selector\\n    /// @param facetAddress address of the facet which is connected with selector\\n    /// @param selectorPosition index in `FacetToSelectors.selectors` array, where is selector stored\\n    /// @param isFreezable denotes whether the selector can be frozen.\\n    struct SelectorToFacet {\\n        address facetAddress;\\n        uint16 selectorPosition;\\n        bool isFreezable;\\n    }\\n\\n    /// @dev Utility struct that contains associated selectors & meta information of facet\\n    /// @param selectors list of all selectors that belong to the facet\\n    /// @param facetPosition index in `DiamondStorage.facets` array, where is facet stored\\n    struct FacetToSelectors {\\n        bytes4[] selectors;\\n        uint16 facetPosition;\\n    }\\n\\n    /// @notice The structure that holds all diamond proxy associated parameters\\n    /// @dev According to the EIP-2535 should be stored on a special storage key - `DIAMOND_STORAGE_POSITION`\\n    /// @param selectorToFacet An mapping from selector to the facet address and its' meta information\\n    /// @param facetToSelectors An mapping from facet address to its' selector with meta information\\n    /// @param facets The array of all unique facet addresses that belong to the diamond proxy\\n    /// @param isFrozen Denotes whether the diamond proxy is frozen and all freezable facets are not accessible\\n    struct DiamondStorage {\\n        mapping(bytes4 => SelectorToFacet) selectorToFacet;\\n        mapping(address => FacetToSelectors) facetToSelectors;\\n        address[] facets;\\n        bool isFrozen;\\n    }\\n\\n    /// @return diamondStorage The pointer to the storage where all specific diamond proxy parameters stored\\n    function getDiamondStorage() internal pure returns (DiamondStorage storage diamondStorage) {\\n        bytes32 position = DIAMOND_STORAGE_POSITION;\\n        assembly {\\n            diamondStorage.slot := position\\n        }\\n    }\\n\\n    /// @notice Action on selectors for one facet on a Diamond Cut\\n    enum Action {\\n        Add,\\n        Replace,\\n        Remove\\n    }\\n\\n    /// @dev Parameters for diamond changes that touch one of the facets\\n    /// @param facet The address of facet that's affected by the cut\\n    /// @param action The action that is made on the facet\\n    /// @param isFreezable Denotes whether the facet & all their selectors can be frozen\\n    /// @param selectors An array of unique selectors that belongs to the facet address\\n    struct FacetCut {\\n        address facet;\\n        Action action;\\n        bool isFreezable;\\n        bytes4[] selectors;\\n    }\\n\\n    /// @dev Structure of the diamond proxy changes\\n    /// @param facetCuts The set of changes (adding/removing/replacement) of implementation contracts\\n    /// @param initAddress The address that's dellegate called after setting up new facet changes\\n    /// @param initCalldata Calldata for the delegete call to `initAddress`\\n    struct DiamondCutData {\\n        FacetCut[] facetCuts;\\n        address initAddress;\\n        bytes initCalldata;\\n    }\\n\\n    /// @dev Add/replace/remove any number of selectors and optionally execute a function with delegatecall\\n    /// @param _diamondCut Diamond's facet changes and the parameters to optional initialization delegatecall\\n    function diamondCut(DiamondCutData memory _diamondCut) internal {\\n        FacetCut[] memory facetCuts = _diamondCut.facetCuts;\\n        address initAddress = _diamondCut.initAddress;\\n        bytes memory initCalldata = _diamondCut.initCalldata;\\n        for (uint256 i = 0; i < facetCuts.length; ++i) {\\n            Action action = facetCuts[i].action;\\n            address facet = facetCuts[i].facet;\\n            bool isFacetFreezable = facetCuts[i].isFreezable;\\n            bytes4[] memory selectors = facetCuts[i].selectors;\\n\\n            require(selectors.length > 0, \\\"B\\\"); // no functions for diamond cut\\n\\n            if (action == Action.Add) {\\n                _addFunctions(facet, selectors, isFacetFreezable);\\n            } else if (action == Action.Replace) {\\n                _replaceFunctions(facet, selectors, isFacetFreezable);\\n            } else if (action == Action.Remove) {\\n                _removeFunctions(facet, selectors);\\n            } else {\\n                revert(\\\"C\\\"); // undefined diamond cut action\\n            }\\n        }\\n\\n        _initializeDiamondCut(initAddress, initCalldata);\\n        emit DiamondCut(facetCuts, initAddress, initCalldata);\\n    }\\n\\n    event DiamondCut(FacetCut[] facetCuts, address initAddress, bytes initCalldata);\\n\\n    /// @dev Add new functions to the diamond proxy\\n    /// NOTE: expect but NOT enforce that `_selectors` is NON-EMPTY array\\n    function _addFunctions(\\n        address _facet,\\n        bytes4[] memory _selectors,\\n        bool _isFacetFreezable\\n    ) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        require(_facet != address(0), \\\"G\\\"); // facet with zero address cannot be added\\n\\n        // Add facet to the list of facets if the facet address is new one\\n        _saveFacetIfNew(_facet);\\n\\n        for (uint256 i = 0; i < _selectors.length; ++i) {\\n            bytes4 selector = _selectors[i];\\n            SelectorToFacet memory oldFacet = ds.selectorToFacet[selector];\\n            require(oldFacet.facetAddress == address(0), \\\"J\\\"); // facet for this selector already exists\\n\\n            _addOneFunction(_facet, selector, _isFacetFreezable);\\n        }\\n    }\\n\\n    /// @dev Change associated facets to already known function selectors\\n    /// NOTE: expect but NOT enforce that `_selectors` is NON-EMPTY array\\n    function _replaceFunctions(\\n        address _facet,\\n        bytes4[] memory _selectors,\\n        bool _isFacetFreezable\\n    ) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        require(_facet != address(0), \\\"K\\\"); // cannot replace facet with zero address\\n\\n        // Add facet to the list of facets if the facet address is a new one\\n        _saveFacetIfNew(_facet);\\n\\n        for (uint256 i = 0; i < _selectors.length; ++i) {\\n            bytes4 selector = _selectors[i];\\n            SelectorToFacet memory oldFacet = ds.selectorToFacet[selector];\\n            require(oldFacet.facetAddress != address(0), \\\"L\\\"); // it is impossible to replace the facet with zero address\\n\\n            _removeOneFunction(oldFacet.facetAddress, selector);\\n            _addOneFunction(_facet, selector, _isFacetFreezable);\\n        }\\n    }\\n\\n    /// @dev Remove association with function and facet\\n    /// NOTE: expect but NOT enforce that `_selectors` is NON-EMPTY array\\n    function _removeFunctions(address _facet, bytes4[] memory _selectors) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        require(_facet == address(0), \\\"a1\\\"); // facet address must be zero\\n\\n        for (uint256 i = 0; i < _selectors.length; ++i) {\\n            bytes4 selector = _selectors[i];\\n            SelectorToFacet memory oldFacet = ds.selectorToFacet[selector];\\n            require(oldFacet.facetAddress != address(0), \\\"a2\\\"); // Can't delete a non-existent facet\\n\\n            _removeOneFunction(oldFacet.facetAddress, selector);\\n        }\\n    }\\n\\n    /// @dev Add address to the list of known facets if it is not on the list yet\\n    /// NOTE: should be called ONLY before adding a new selector associated with the address\\n    function _saveFacetIfNew(address _facet) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        uint16 selectorsLength = uint16(ds.facetToSelectors[_facet].selectors.length);\\n        // If there are no selectors associated with facet then save facet as new one\\n        if (selectorsLength == 0) {\\n            ds.facetToSelectors[_facet].facetPosition = uint16(ds.facets.length);\\n            ds.facets.push(_facet);\\n        }\\n    }\\n\\n    /// @dev Add one function to the already known facet\\n    /// NOTE: It is expected but NOT enforced that:\\n    /// - `_facet` is NON-ZERO address\\n    /// - `_facet` is already stored address in `DiamondStorage.facets`\\n    /// - `_selector` is NOT associated by another facet\\n    function _addOneFunction(\\n        address _facet,\\n        bytes4 _selector,\\n        bool _isSelectorFreezable\\n    ) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        uint16 selectorPosition = uint16(ds.facetToSelectors[_facet].selectors.length);\\n        ds.selectorToFacet[_selector] = SelectorToFacet({\\n            facetAddress: _facet,\\n            selectorPosition: selectorPosition,\\n            isFreezable: _isSelectorFreezable\\n        });\\n        ds.facetToSelectors[_facet].selectors.push(_selector);\\n    }\\n\\n    /// @dev Remove one associated function with facet\\n    /// NOTE: It is expected but NOT enforced that `_facet` is NON-ZERO address\\n    function _removeOneFunction(address _facet, bytes4 _selector) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        // Get index of `FacetToSelectors.selectors` of the selector and last element of array\\n        uint256 selectorPosition = ds.selectorToFacet[_selector].selectorPosition;\\n        uint256 lastSelectorPosition = ds.facetToSelectors[_facet].selectors.length - 1;\\n\\n        // If the selector is not at the end of the array then move the last element to the selector position\\n        if (selectorPosition != lastSelectorPosition) {\\n            bytes4 lastSelector = ds.facetToSelectors[_facet].selectors[lastSelectorPosition];\\n\\n            ds.facetToSelectors[_facet].selectors[selectorPosition] = lastSelector;\\n            ds.selectorToFacet[lastSelector].selectorPosition = uint16(selectorPosition);\\n        }\\n\\n        // Remove last element from the selectors array\\n        ds.facetToSelectors[_facet].selectors.pop();\\n\\n        // Finally, clean up the association with facet\\n        delete ds.selectorToFacet[_selector];\\n\\n        // If there are no selectors for facet then remove the facet from the list of known facets\\n        if (lastSelectorPosition == 0) {\\n            _removeFacet(_facet);\\n        }\\n    }\\n\\n    /// @dev remove facet from the list of known facets\\n    /// NOTE: It is expected but NOT enforced that there are no selectors associated wih `_facet`\\n    function _removeFacet(address _facet) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        // Get index of `DiamondStorage.facets` of the facet and last element of array\\n        uint256 facetPosition = ds.facetToSelectors[_facet].facetPosition;\\n        uint256 lastFacetPosition = ds.facets.length - 1;\\n\\n        // If the facet is not at the end of the array then move the last element to the facet position\\n        if (facetPosition != lastFacetPosition) {\\n            address lastFacet = ds.facets[lastFacetPosition];\\n\\n            ds.facets[facetPosition] = lastFacet;\\n            ds.facetToSelectors[lastFacet].facetPosition = uint16(facetPosition);\\n        }\\n\\n        // Remove last element from the facets array\\n        ds.facets.pop();\\n    }\\n\\n    /// @dev Delegates call to the initialization address with provided calldata\\n    /// @dev Used as a final step of diamond cut to execute the logic of the initialization for changed facets\\n    function _initializeDiamondCut(address _init, bytes memory _calldata) private {\\n        if (_init == address(0)) {\\n            require(_calldata.length == 0, \\\"H\\\"); // Non-empty calldata for zero address\\n        } else {\\n            // Do not check whether `_init` is a contract since later we check that it returns data.\\n            (bool success, bytes memory data) = _init.delegatecall(_calldata);\\n            require(success, \\\"I\\\"); // delegatecall failed\\n\\n            // Check that called contract returns magic value to make sure that contract logic\\n            // supposed to be used as diamond cut initializer.\\n            require(data.length == 32 && abi.decode(data, (bytes32)) == DIAMOND_INIT_SUCCESS_RETURN_VALUE, \\\"lp\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfedbcad9963963e9570a972b269e7241b902f029d488b52fbd4e9a2d67bf8e3d\",\"license\":\"MIT\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PairingsBn254.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nlibrary PairingsBn254 {\\n    uint256 constant q_mod = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n    uint256 constant r_mod = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant bn254_b_coeff = 3;\\n\\n    struct G1Point {\\n        uint256 X;\\n        uint256 Y;\\n    }\\n\\n    struct Fr {\\n        uint256 value;\\n    }\\n\\n    function new_fr(uint256 fr) internal pure returns (Fr memory) {\\n        require(fr < r_mod);\\n        return Fr({value: fr});\\n    }\\n\\n    function copy(Fr memory self) internal pure returns (Fr memory n) {\\n        n.value = self.value;\\n    }\\n\\n    function assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = other.value;\\n    }\\n\\n    function inverse(Fr memory fr) internal view returns (Fr memory) {\\n        require(fr.value != 0);\\n        return pow(fr, r_mod - 2);\\n    }\\n\\n    function add_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = addmod(self.value, other.value, r_mod);\\n    }\\n\\n    function sub_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = addmod(self.value, r_mod - other.value, r_mod);\\n    }\\n\\n    function mul_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = mulmod(self.value, other.value, r_mod);\\n    }\\n\\n    function pow(Fr memory self, uint256 power) internal view returns (Fr memory) {\\n        uint256[6] memory input = [32, 32, 32, self.value, power, r_mod];\\n        uint256[1] memory result;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 0x05, input, 0xc0, result, 0x20)\\n        }\\n        require(success);\\n        return Fr({value: result[0]});\\n    }\\n\\n    // Encoding of field elements is: X[0] * z + X[1]\\n    struct G2Point {\\n        uint256[2] X;\\n        uint256[2] Y;\\n    }\\n\\n    function P1() internal pure returns (G1Point memory) {\\n        return G1Point(1, 2);\\n    }\\n\\n    function new_g1(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n        return G1Point(x, y);\\n    }\\n\\n    // function new_g1_checked(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n    function new_g1_checked(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n        if (x == 0 && y == 0) {\\n            // point of infinity is (0,0)\\n            return G1Point(x, y);\\n        }\\n\\n        // check encoding\\n        require(x < q_mod, \\\"x axis isn't valid\\\");\\n        require(y < q_mod, \\\"y axis isn't valid\\\");\\n        // check on curve\\n        uint256 lhs = mulmod(y, y, q_mod); // y^2\\n\\n        uint256 rhs = mulmod(x, x, q_mod); // x^2\\n        rhs = mulmod(rhs, x, q_mod); // x^3\\n        rhs = addmod(rhs, bn254_b_coeff, q_mod); // x^3 + b\\n        require(lhs == rhs, \\\"is not on curve\\\");\\n\\n        return G1Point(x, y);\\n    }\\n\\n    function new_g2(uint256[2] memory x, uint256[2] memory y) internal pure returns (G2Point memory) {\\n        return G2Point(x, y);\\n    }\\n\\n    function copy_g1(G1Point memory self) internal pure returns (G1Point memory result) {\\n        result.X = self.X;\\n        result.Y = self.Y;\\n    }\\n\\n    function P2() internal pure returns (G2Point memory) {\\n        // for some reason ethereum expects to have c1*v + c0 form\\n\\n        return\\n            G2Point(\\n                [\\n                    0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,\\n                    0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\\n                ],\\n                [\\n                    0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,\\n                    0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\\n                ]\\n            );\\n    }\\n\\n    function negate(G1Point memory self) internal pure {\\n        // The prime q in the base field F_q for G1\\n        if (self.Y == 0) {\\n            require(self.X == 0);\\n            return;\\n        }\\n\\n        self.Y = q_mod - self.Y;\\n    }\\n\\n    function point_add(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) {\\n        point_add_into_dest(p1, p2, r);\\n        return r;\\n    }\\n\\n    function point_add_assign(G1Point memory p1, G1Point memory p2) internal view {\\n        point_add_into_dest(p1, p2, p1);\\n    }\\n\\n    function point_add_into_dest(\\n        G1Point memory p1,\\n        G1Point memory p2,\\n        G1Point memory dest\\n    ) internal view {\\n        if (p2.X == 0 && p2.Y == 0) {\\n            // we add zero, nothing happens\\n            dest.X = p1.X;\\n            dest.Y = p1.Y;\\n            return;\\n        } else if (p1.X == 0 && p1.Y == 0) {\\n            // we add into zero, and we add non-zero point\\n            dest.X = p2.X;\\n            dest.Y = p2.Y;\\n            return;\\n        } else {\\n            uint256[4] memory input;\\n\\n            input[0] = p1.X;\\n            input[1] = p1.Y;\\n            input[2] = p2.X;\\n            input[3] = p2.Y;\\n\\n            bool success;\\n            assembly {\\n                success := staticcall(gas(), 6, input, 0x80, dest, 0x40)\\n            }\\n            require(success);\\n        }\\n    }\\n\\n    function point_sub_assign(G1Point memory p1, G1Point memory p2) internal view {\\n        point_sub_into_dest(p1, p2, p1);\\n    }\\n\\n    function point_sub_into_dest(\\n        G1Point memory p1,\\n        G1Point memory p2,\\n        G1Point memory dest\\n    ) internal view {\\n        if (p2.X == 0 && p2.Y == 0) {\\n            // we subtracted zero, nothing happens\\n            dest.X = p1.X;\\n            dest.Y = p1.Y;\\n            return;\\n        } else if (p1.X == 0 && p1.Y == 0) {\\n            // we subtract from zero, and we subtract non-zero point\\n            dest.X = p2.X;\\n            dest.Y = q_mod - p2.Y;\\n            return;\\n        } else {\\n            uint256[4] memory input;\\n\\n            input[0] = p1.X;\\n            input[1] = p1.Y;\\n            input[2] = p2.X;\\n            input[3] = q_mod - p2.Y;\\n\\n            bool success = false;\\n            assembly {\\n                success := staticcall(gas(), 6, input, 0x80, dest, 0x40)\\n            }\\n            require(success);\\n        }\\n    }\\n\\n    function point_mul(G1Point memory p, Fr memory s) internal view returns (G1Point memory r) {\\n        // https://eips.ethereum.org/EIPS/eip-197\\n        // Elliptic curve points are encoded as a Jacobian pair (X, Y) where the point at infinity is encoded as (0, 0)\\n        // TODO\\n        if (p.X == 0 && p.Y == 1) {\\n            p.Y = 0;\\n        }\\n        point_mul_into_dest(p, s, r);\\n        return r;\\n    }\\n\\n    function point_mul_assign(G1Point memory p, Fr memory s) internal view {\\n        point_mul_into_dest(p, s, p);\\n    }\\n\\n    function point_mul_into_dest(\\n        G1Point memory p,\\n        Fr memory s,\\n        G1Point memory dest\\n    ) internal view {\\n        uint256[3] memory input;\\n        input[0] = p.X;\\n        input[1] = p.Y;\\n        input[2] = s.value;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 7, input, 0x60, dest, 0x40)\\n        }\\n        require(success);\\n    }\\n\\n    function pairing(G1Point[] memory p1, G2Point[] memory p2) internal view returns (bool) {\\n        require(p1.length == p2.length);\\n        uint256 elements = p1.length;\\n        uint256 inputSize = elements * 6;\\n        uint256[] memory input = new uint256[](inputSize);\\n        for (uint256 i = 0; i < elements; ) {\\n            input[i * 6 + 0] = p1[i].X;\\n            input[i * 6 + 1] = p1[i].Y;\\n            input[i * 6 + 2] = p2[i].X[0];\\n            input[i * 6 + 3] = p2[i].X[1];\\n            input[i * 6 + 4] = p2[i].Y[0];\\n            input[i * 6 + 5] = p2[i].Y[1];\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n        uint256[1] memory out;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20)\\n        }\\n        require(success);\\n        return out[0] != 0;\\n    }\\n\\n    /// Convenience method for a pairing check for two pairs.\\n    function pairingProd2(\\n        G1Point memory a1,\\n        G2Point memory a2,\\n        G1Point memory b1,\\n        G2Point memory b2\\n    ) internal view returns (bool) {\\n        G1Point[] memory p1 = new G1Point[](2);\\n        G2Point[] memory p2 = new G2Point[](2);\\n        p1[0] = a1;\\n        p1[1] = b1;\\n        p2[0] = a2;\\n        p2[1] = b2;\\n        return pairing(p1, p2);\\n    }\\n}\\n\",\"keccak256\":\"0x0532cd43e648a5236d854c85b47d83e4d4faa86ccb87322de0dcc52f0956ee1d\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PriorityQueue.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\n/// @notice The structure that contains meta information of the L2 transaction that was requested from L1\\n/// @dev The weird size of fields was selected specifically to minimize the structure storage size\\n/// @param canonicalTxHash Hashed L2 transaction data that is needed to process it\\n/// @param expirationBlock Expiration block number (ETH block) for this request (must be satisfied before)\\n/// @param layer2Tip Additional payment to the validator as an incentive to perform the operation\\nstruct PriorityOperation {\\n    bytes32 canonicalTxHash;\\n    uint64 expirationBlock;\\n    uint192 layer2Tip;\\n}\\n\\n/// @author Matter Labs\\n/// @dev The library provides the API to interact with the priority queue container\\n/// @dev Order of processing operations from queue - FIFO (Fist in - first out)\\nlibrary PriorityQueue {\\n    using PriorityQueue for Queue;\\n\\n    /// @notice Container that stores priority operations\\n    /// @param data The inner mapping that saves priority operation by its index\\n    /// @param head The pointer to the last added priority operation\\n    /// @param tail The pointer to the first unprocessed priority operation\\n    struct Queue {\\n        mapping(uint256 => PriorityOperation) data;\\n        uint256 head;\\n        uint256 tail;\\n    }\\n\\n    /// @return Index of the oldest priority operation that wasn't processed yet\\n    /// @notice Returns zero if and only if no operations were processed from the queue\\n    function getFirstUnprocessedPriorityTx(Queue storage _queue) internal view returns (uint256) {\\n        return _queue.tail;\\n    }\\n\\n    /// @return The total number of priority operations that were added to the priority queue, including all processed ones\\n    function getTotalPriorityTxs(Queue storage _queue) internal view returns (uint256) {\\n        return _queue.head;\\n    }\\n\\n    /// @return The total number of unprocessed priority operations in a priority queue\\n    function getSize(Queue storage _queue) internal view returns (uint256) {\\n        return uint256(_queue.head - _queue.tail);\\n    }\\n\\n    /// @return Whether the priority queue contains no operations\\n    function isEmpty(Queue storage _queue) internal view returns (bool) {\\n        return _queue.head == _queue.tail;\\n    }\\n\\n    /// @notice Add the priority operation to the end of the priority queue\\n    function pushBack(Queue storage _queue, PriorityOperation memory _operation) internal {\\n        // Save value into the stack to avoid double reading from the storage\\n        uint256 head = _queue.head;\\n\\n        _queue.data[head] = _operation;\\n        _queue.head = head + 1;\\n    }\\n\\n    /// @return The first unprocessed priority operation from the queue\\n    function front(Queue storage _queue) internal view returns (PriorityOperation memory) {\\n        require(!_queue.isEmpty(), \\\"D\\\"); // priority queue is empty\\n\\n        return _queue.data[_queue.tail];\\n    }\\n\\n    /// @notice Remove the first unprocessed priority operation from the queue\\n    /// @return priorityOperation that was popped from the priority queue\\n    function popFront(Queue storage _queue) internal returns (PriorityOperation memory priorityOperation) {\\n        require(!_queue.isEmpty(), \\\"s\\\"); // priority queue is empty\\n\\n        // Save value into the stack to avoid double reading from the storage\\n        uint256 tail = _queue.tail;\\n\\n        priorityOperation = _queue.data[tail];\\n        delete _queue.data[tail];\\n        _queue.tail = tail + 1;\\n    }\\n}\\n\",\"keccak256\":\"0x83a6511847a78dee8814414191c013cb67fb863e038bc42e21bbbd2641e9e184\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/TranscriptLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./PairingsBn254.sol\\\";\\n\\nlibrary TranscriptLib {\\n    // flip                    0xe000000000000000000000000000000000000000000000000000000000000000;\\n    uint256 constant FR_MASK = 0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n    uint32 constant DST_0 = 0;\\n    uint32 constant DST_1 = 1;\\n    uint32 constant DST_CHALLENGE = 2;\\n\\n    struct Transcript {\\n        bytes32 state_0;\\n        bytes32 state_1;\\n        uint32 challenge_counter;\\n    }\\n\\n    function new_transcript() internal pure returns (Transcript memory t) {\\n        t.state_0 = bytes32(0);\\n        t.state_1 = bytes32(0);\\n        t.challenge_counter = 0;\\n    }\\n\\n    function update_with_u256(Transcript memory self, uint256 value) internal pure {\\n        bytes32 old_state_0 = self.state_0;\\n        self.state_0 = keccak256(abi.encodePacked(DST_0, old_state_0, self.state_1, value));\\n        self.state_1 = keccak256(abi.encodePacked(DST_1, old_state_0, self.state_1, value));\\n    }\\n\\n    function update_with_fr(Transcript memory self, PairingsBn254.Fr memory value) internal pure {\\n        update_with_u256(self, value.value);\\n    }\\n\\n    function update_with_g1(Transcript memory self, PairingsBn254.G1Point memory p) internal pure {\\n        update_with_u256(self, p.X);\\n        update_with_u256(self, p.Y);\\n    }\\n\\n    function get_challenge(Transcript memory self) internal pure returns (PairingsBn254.Fr memory challenge) {\\n        bytes32 query = keccak256(abi.encodePacked(DST_CHALLENGE, self.state_0, self.state_1, self.challenge_counter));\\n        self.challenge_counter += 1;\\n        challenge = PairingsBn254.Fr({value: uint256(query) & FR_MASK});\\n    }\\n}\\n\",\"keccak256\":\"0x56cd646af0899ea51be78a046b647578bae59714f5f3e3c85010b278c96bfdcc\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"events":{"BlockCommit(uint256)":{"notice":"Event emitted when a block is committed"},"BlockExecution(uint256)":{"notice":"Event emitted when a block is executed"},"BlocksRevert(uint256,uint256,uint256)":{"notice":"Event emitted when blocks are reverted"},"IsPorterAvailableStatusUpdate(bool)":{"notice":"Porter availability status changes"},"NewGovernor(address)":{"notice":"Governor changed"},"NewL2BootloaderBytecodeHash(bytes32,bytes32)":{"notice":"Сhanges to the bytecode that is used in L2 as a bootloader (start program)"},"NewL2DefaultAccountBytecodeHash(bytes32,bytes32)":{"notice":"Сhanges to the bytecode that is used in L2 as a default account"},"NewPendingGovernor(address,address)":{"notice":"pendingGovernor is changed"},"NewPriorityRequest(uint256,bytes32,uint64,(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[6],bytes,bytes,uint256[],bytes,bytes),bytes[])":{"notice":"New priority request event. Emitted when a request is placed into the priority queue"},"ValidatorStatusUpdate(address,bool)":{"notice":"Validator's status changed"}},"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/Diamond.sol":{"Diamond":{"abi":[{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facet","type":"address"},{"internalType":"enum Diamond.Action","name":"action","type":"uint8"},{"internalType":"bool","name":"isFreezable","type":"bool"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct Diamond.FacetCut[]","name":"facetCuts","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"initAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"initCalldata","type":"bytes"}],"name":"DiamondCut","type":"event"}],"devdoc":{"author":"Matter Labs","kind":"dev","methods":{},"stateVariables":{"DIAMOND_INIT_SUCCESS_RETURN_VALUE":{"details":"Magic value that should be returned by diamond cut initialize contracts.Used to distinguish calls to contracts that were supposed to be used as diamond initializer from other contracts."},"DIAMOND_STORAGE_POSITION":{"details":"Storage position of `DiamondStorage` structure."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fe62b76397b91d8a8051e4652d559ff6e10ab834c7cbda53fcebaeea60c7e32064736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID PUSH3 0xB76397 0xB9 SAR DUP11 DUP1 MLOAD 0xE4 PUSH6 0x2D559FF6E10A 0xB8 CALLVALUE 0xC7 0xCB 0xDA MSTORE8 0xFC 0xEB 0xAE 0xEA PUSH1 0xC7 0xE3 KECCAK256 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"154:12324:15:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;154:12324:15;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fe62b76397b91d8a8051e4652d559ff6e10ab834c7cbda53fcebaeea60c7e32064736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID PUSH3 0xB76397 0xB9 SAR DUP11 DUP1 MLOAD 0xE4 PUSH6 0x2D559FF6E10A 0xB8 CALLVALUE 0xC7 0xCB 0xDA MSTORE8 0xFC 0xEB 0xAE 0xEA PUSH1 0xC7 0xE3 KECCAK256 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"154:12324:15:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_addFunctions(address,bytes4[] memory,bool)":"infinite","_addOneFunction(address,bytes4,bool)":"infinite","_initializeDiamondCut(address,bytes memory)":"infinite","_removeFacet(address)":"infinite","_removeFunctions(address,bytes4[] memory)":"infinite","_removeOneFunction(address,bytes4)":"infinite","_replaceFunctions(address,bytes4[] memory,bool)":"infinite","_saveFacetIfNew(address)":"infinite","diamondCut(struct Diamond.DiamondCutData memory)":"infinite","getDiamondStorage()":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facet\",\"type\":\"address\"},{\"internalType\":\"enum Diamond.Action\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isFreezable\",\"type\":\"bool\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct Diamond.FacetCut[]\",\"name\":\"facetCuts\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"initCalldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCut\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Matter Labs\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"DIAMOND_INIT_SUCCESS_RETURN_VALUE\":{\"details\":\"Magic value that should be returned by diamond cut initialize contracts.Used to distinguish calls to contracts that were supposed to be used as diamond initializer from other contracts.\"},\"DIAMOND_STORAGE_POSITION\":{\"details\":\"Storage position of `DiamondStorage` structure.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"The helper library for managing the EIP-2535 diamond proxy.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/Diamond.sol\":\"Diamond\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/Diamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/// @author Matter Labs\\n/// @notice The helper library for managing the EIP-2535 diamond proxy.\\nlibrary Diamond {\\n    /// @dev Magic value that should be returned by diamond cut initialize contracts.\\n    /// @dev Used to distinguish calls to contracts that were supposed to be used as diamond initializer from other contracts.\\n    bytes32 constant DIAMOND_INIT_SUCCESS_RETURN_VALUE = keccak256(\\\"diamond.zksync.init\\\");\\n\\n    /// @dev Storage position of `DiamondStorage` structure.\\n    bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n    /// @dev Utility struct that contains associated facet & meta information of selector\\n    /// @param facetAddress address of the facet which is connected with selector\\n    /// @param selectorPosition index in `FacetToSelectors.selectors` array, where is selector stored\\n    /// @param isFreezable denotes whether the selector can be frozen.\\n    struct SelectorToFacet {\\n        address facetAddress;\\n        uint16 selectorPosition;\\n        bool isFreezable;\\n    }\\n\\n    /// @dev Utility struct that contains associated selectors & meta information of facet\\n    /// @param selectors list of all selectors that belong to the facet\\n    /// @param facetPosition index in `DiamondStorage.facets` array, where is facet stored\\n    struct FacetToSelectors {\\n        bytes4[] selectors;\\n        uint16 facetPosition;\\n    }\\n\\n    /// @notice The structure that holds all diamond proxy associated parameters\\n    /// @dev According to the EIP-2535 should be stored on a special storage key - `DIAMOND_STORAGE_POSITION`\\n    /// @param selectorToFacet An mapping from selector to the facet address and its' meta information\\n    /// @param facetToSelectors An mapping from facet address to its' selector with meta information\\n    /// @param facets The array of all unique facet addresses that belong to the diamond proxy\\n    /// @param isFrozen Denotes whether the diamond proxy is frozen and all freezable facets are not accessible\\n    struct DiamondStorage {\\n        mapping(bytes4 => SelectorToFacet) selectorToFacet;\\n        mapping(address => FacetToSelectors) facetToSelectors;\\n        address[] facets;\\n        bool isFrozen;\\n    }\\n\\n    /// @return diamondStorage The pointer to the storage where all specific diamond proxy parameters stored\\n    function getDiamondStorage() internal pure returns (DiamondStorage storage diamondStorage) {\\n        bytes32 position = DIAMOND_STORAGE_POSITION;\\n        assembly {\\n            diamondStorage.slot := position\\n        }\\n    }\\n\\n    /// @notice Action on selectors for one facet on a Diamond Cut\\n    enum Action {\\n        Add,\\n        Replace,\\n        Remove\\n    }\\n\\n    /// @dev Parameters for diamond changes that touch one of the facets\\n    /// @param facet The address of facet that's affected by the cut\\n    /// @param action The action that is made on the facet\\n    /// @param isFreezable Denotes whether the facet & all their selectors can be frozen\\n    /// @param selectors An array of unique selectors that belongs to the facet address\\n    struct FacetCut {\\n        address facet;\\n        Action action;\\n        bool isFreezable;\\n        bytes4[] selectors;\\n    }\\n\\n    /// @dev Structure of the diamond proxy changes\\n    /// @param facetCuts The set of changes (adding/removing/replacement) of implementation contracts\\n    /// @param initAddress The address that's dellegate called after setting up new facet changes\\n    /// @param initCalldata Calldata for the delegete call to `initAddress`\\n    struct DiamondCutData {\\n        FacetCut[] facetCuts;\\n        address initAddress;\\n        bytes initCalldata;\\n    }\\n\\n    /// @dev Add/replace/remove any number of selectors and optionally execute a function with delegatecall\\n    /// @param _diamondCut Diamond's facet changes and the parameters to optional initialization delegatecall\\n    function diamondCut(DiamondCutData memory _diamondCut) internal {\\n        FacetCut[] memory facetCuts = _diamondCut.facetCuts;\\n        address initAddress = _diamondCut.initAddress;\\n        bytes memory initCalldata = _diamondCut.initCalldata;\\n        for (uint256 i = 0; i < facetCuts.length; ++i) {\\n            Action action = facetCuts[i].action;\\n            address facet = facetCuts[i].facet;\\n            bool isFacetFreezable = facetCuts[i].isFreezable;\\n            bytes4[] memory selectors = facetCuts[i].selectors;\\n\\n            require(selectors.length > 0, \\\"B\\\"); // no functions for diamond cut\\n\\n            if (action == Action.Add) {\\n                _addFunctions(facet, selectors, isFacetFreezable);\\n            } else if (action == Action.Replace) {\\n                _replaceFunctions(facet, selectors, isFacetFreezable);\\n            } else if (action == Action.Remove) {\\n                _removeFunctions(facet, selectors);\\n            } else {\\n                revert(\\\"C\\\"); // undefined diamond cut action\\n            }\\n        }\\n\\n        _initializeDiamondCut(initAddress, initCalldata);\\n        emit DiamondCut(facetCuts, initAddress, initCalldata);\\n    }\\n\\n    event DiamondCut(FacetCut[] facetCuts, address initAddress, bytes initCalldata);\\n\\n    /// @dev Add new functions to the diamond proxy\\n    /// NOTE: expect but NOT enforce that `_selectors` is NON-EMPTY array\\n    function _addFunctions(\\n        address _facet,\\n        bytes4[] memory _selectors,\\n        bool _isFacetFreezable\\n    ) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        require(_facet != address(0), \\\"G\\\"); // facet with zero address cannot be added\\n\\n        // Add facet to the list of facets if the facet address is new one\\n        _saveFacetIfNew(_facet);\\n\\n        for (uint256 i = 0; i < _selectors.length; ++i) {\\n            bytes4 selector = _selectors[i];\\n            SelectorToFacet memory oldFacet = ds.selectorToFacet[selector];\\n            require(oldFacet.facetAddress == address(0), \\\"J\\\"); // facet for this selector already exists\\n\\n            _addOneFunction(_facet, selector, _isFacetFreezable);\\n        }\\n    }\\n\\n    /// @dev Change associated facets to already known function selectors\\n    /// NOTE: expect but NOT enforce that `_selectors` is NON-EMPTY array\\n    function _replaceFunctions(\\n        address _facet,\\n        bytes4[] memory _selectors,\\n        bool _isFacetFreezable\\n    ) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        require(_facet != address(0), \\\"K\\\"); // cannot replace facet with zero address\\n\\n        // Add facet to the list of facets if the facet address is a new one\\n        _saveFacetIfNew(_facet);\\n\\n        for (uint256 i = 0; i < _selectors.length; ++i) {\\n            bytes4 selector = _selectors[i];\\n            SelectorToFacet memory oldFacet = ds.selectorToFacet[selector];\\n            require(oldFacet.facetAddress != address(0), \\\"L\\\"); // it is impossible to replace the facet with zero address\\n\\n            _removeOneFunction(oldFacet.facetAddress, selector);\\n            _addOneFunction(_facet, selector, _isFacetFreezable);\\n        }\\n    }\\n\\n    /// @dev Remove association with function and facet\\n    /// NOTE: expect but NOT enforce that `_selectors` is NON-EMPTY array\\n    function _removeFunctions(address _facet, bytes4[] memory _selectors) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        require(_facet == address(0), \\\"a1\\\"); // facet address must be zero\\n\\n        for (uint256 i = 0; i < _selectors.length; ++i) {\\n            bytes4 selector = _selectors[i];\\n            SelectorToFacet memory oldFacet = ds.selectorToFacet[selector];\\n            require(oldFacet.facetAddress != address(0), \\\"a2\\\"); // Can't delete a non-existent facet\\n\\n            _removeOneFunction(oldFacet.facetAddress, selector);\\n        }\\n    }\\n\\n    /// @dev Add address to the list of known facets if it is not on the list yet\\n    /// NOTE: should be called ONLY before adding a new selector associated with the address\\n    function _saveFacetIfNew(address _facet) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        uint16 selectorsLength = uint16(ds.facetToSelectors[_facet].selectors.length);\\n        // If there are no selectors associated with facet then save facet as new one\\n        if (selectorsLength == 0) {\\n            ds.facetToSelectors[_facet].facetPosition = uint16(ds.facets.length);\\n            ds.facets.push(_facet);\\n        }\\n    }\\n\\n    /// @dev Add one function to the already known facet\\n    /// NOTE: It is expected but NOT enforced that:\\n    /// - `_facet` is NON-ZERO address\\n    /// - `_facet` is already stored address in `DiamondStorage.facets`\\n    /// - `_selector` is NOT associated by another facet\\n    function _addOneFunction(\\n        address _facet,\\n        bytes4 _selector,\\n        bool _isSelectorFreezable\\n    ) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        uint16 selectorPosition = uint16(ds.facetToSelectors[_facet].selectors.length);\\n        ds.selectorToFacet[_selector] = SelectorToFacet({\\n            facetAddress: _facet,\\n            selectorPosition: selectorPosition,\\n            isFreezable: _isSelectorFreezable\\n        });\\n        ds.facetToSelectors[_facet].selectors.push(_selector);\\n    }\\n\\n    /// @dev Remove one associated function with facet\\n    /// NOTE: It is expected but NOT enforced that `_facet` is NON-ZERO address\\n    function _removeOneFunction(address _facet, bytes4 _selector) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        // Get index of `FacetToSelectors.selectors` of the selector and last element of array\\n        uint256 selectorPosition = ds.selectorToFacet[_selector].selectorPosition;\\n        uint256 lastSelectorPosition = ds.facetToSelectors[_facet].selectors.length - 1;\\n\\n        // If the selector is not at the end of the array then move the last element to the selector position\\n        if (selectorPosition != lastSelectorPosition) {\\n            bytes4 lastSelector = ds.facetToSelectors[_facet].selectors[lastSelectorPosition];\\n\\n            ds.facetToSelectors[_facet].selectors[selectorPosition] = lastSelector;\\n            ds.selectorToFacet[lastSelector].selectorPosition = uint16(selectorPosition);\\n        }\\n\\n        // Remove last element from the selectors array\\n        ds.facetToSelectors[_facet].selectors.pop();\\n\\n        // Finally, clean up the association with facet\\n        delete ds.selectorToFacet[_selector];\\n\\n        // If there are no selectors for facet then remove the facet from the list of known facets\\n        if (lastSelectorPosition == 0) {\\n            _removeFacet(_facet);\\n        }\\n    }\\n\\n    /// @dev remove facet from the list of known facets\\n    /// NOTE: It is expected but NOT enforced that there are no selectors associated wih `_facet`\\n    function _removeFacet(address _facet) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        // Get index of `DiamondStorage.facets` of the facet and last element of array\\n        uint256 facetPosition = ds.facetToSelectors[_facet].facetPosition;\\n        uint256 lastFacetPosition = ds.facets.length - 1;\\n\\n        // If the facet is not at the end of the array then move the last element to the facet position\\n        if (facetPosition != lastFacetPosition) {\\n            address lastFacet = ds.facets[lastFacetPosition];\\n\\n            ds.facets[facetPosition] = lastFacet;\\n            ds.facetToSelectors[lastFacet].facetPosition = uint16(facetPosition);\\n        }\\n\\n        // Remove last element from the facets array\\n        ds.facets.pop();\\n    }\\n\\n    /// @dev Delegates call to the initialization address with provided calldata\\n    /// @dev Used as a final step of diamond cut to execute the logic of the initialization for changed facets\\n    function _initializeDiamondCut(address _init, bytes memory _calldata) private {\\n        if (_init == address(0)) {\\n            require(_calldata.length == 0, \\\"H\\\"); // Non-empty calldata for zero address\\n        } else {\\n            // Do not check whether `_init` is a contract since later we check that it returns data.\\n            (bool success, bytes memory data) = _init.delegatecall(_calldata);\\n            require(success, \\\"I\\\"); // delegatecall failed\\n\\n            // Check that called contract returns magic value to make sure that contract logic\\n            // supposed to be used as diamond cut initializer.\\n            require(data.length == 32 && abi.decode(data, (bytes32)) == DIAMOND_INIT_SUCCESS_RETURN_VALUE, \\\"lp\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfedbcad9963963e9570a972b269e7241b902f029d488b52fbd4e9a2d67bf8e3d\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"The helper library for managing the EIP-2535 diamond proxy.","version":1}}},"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PairingsBn254.sol":{"PairingsBn254":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cfb790ff06408ae87a058effbbf7bc6286079c8eb4898c3f1acccbc532a1131464736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCF 0xB7 SWAP1 SELFDESTRUCT MOD BLOCKHASH DUP11 0xE8 PUSH27 0x58EFFBBF7BC6286079C8EB4898C3F1ACCCBC532A1131464736F6C PUSH4 0x43000811 STOP CALLER ","sourceMap":"72:8325:16:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;72:8325:16;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cfb790ff06408ae87a058effbbf7bc6286079c8eb4898c3f1acccbc532a1131464736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCF 0xB7 SWAP1 SELFDESTRUCT MOD BLOCKHASH DUP11 0xE8 PUSH27 0x58EFFBBF7BC6286079C8EB4898C3F1ACCCBC532A1131464736F6C PUSH4 0x43000811 STOP CALLER ","sourceMap":"72:8325:16:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"P1()":"infinite","P2()":"infinite","add_assign(struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory)":"infinite","assign(struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory)":"infinite","copy(struct PairingsBn254.Fr memory)":"infinite","copy_g1(struct PairingsBn254.G1Point memory)":"infinite","inverse(struct PairingsBn254.Fr memory)":"infinite","mul_assign(struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory)":"infinite","negate(struct PairingsBn254.G1Point memory)":"infinite","new_fr(uint256)":"infinite","new_g1(uint256,uint256)":"infinite","new_g1_checked(uint256,uint256)":"infinite","new_g2(uint256[2] memory,uint256[2] memory)":"infinite","pairing(struct PairingsBn254.G1Point memory[] memory,struct PairingsBn254.G2Point memory[] memory)":"infinite","pairingProd2(struct PairingsBn254.G1Point memory,struct PairingsBn254.G2Point memory,struct PairingsBn254.G1Point memory,struct PairingsBn254.G2Point memory)":"infinite","point_add(struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory)":"infinite","point_add_assign(struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory)":"infinite","point_add_into_dest(struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory)":"infinite","point_mul(struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory)":"infinite","point_mul_assign(struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory)":"infinite","point_mul_into_dest(struct PairingsBn254.G1Point memory,struct PairingsBn254.Fr memory,struct PairingsBn254.G1Point memory)":"infinite","point_sub_assign(struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory)":"infinite","point_sub_into_dest(struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory,struct PairingsBn254.G1Point memory)":"infinite","pow(struct PairingsBn254.Fr memory,uint256)":"infinite","sub_assign(struct PairingsBn254.Fr memory,struct PairingsBn254.Fr memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PairingsBn254.sol\":\"PairingsBn254\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PairingsBn254.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nlibrary PairingsBn254 {\\n    uint256 constant q_mod = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n    uint256 constant r_mod = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant bn254_b_coeff = 3;\\n\\n    struct G1Point {\\n        uint256 X;\\n        uint256 Y;\\n    }\\n\\n    struct Fr {\\n        uint256 value;\\n    }\\n\\n    function new_fr(uint256 fr) internal pure returns (Fr memory) {\\n        require(fr < r_mod);\\n        return Fr({value: fr});\\n    }\\n\\n    function copy(Fr memory self) internal pure returns (Fr memory n) {\\n        n.value = self.value;\\n    }\\n\\n    function assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = other.value;\\n    }\\n\\n    function inverse(Fr memory fr) internal view returns (Fr memory) {\\n        require(fr.value != 0);\\n        return pow(fr, r_mod - 2);\\n    }\\n\\n    function add_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = addmod(self.value, other.value, r_mod);\\n    }\\n\\n    function sub_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = addmod(self.value, r_mod - other.value, r_mod);\\n    }\\n\\n    function mul_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = mulmod(self.value, other.value, r_mod);\\n    }\\n\\n    function pow(Fr memory self, uint256 power) internal view returns (Fr memory) {\\n        uint256[6] memory input = [32, 32, 32, self.value, power, r_mod];\\n        uint256[1] memory result;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 0x05, input, 0xc0, result, 0x20)\\n        }\\n        require(success);\\n        return Fr({value: result[0]});\\n    }\\n\\n    // Encoding of field elements is: X[0] * z + X[1]\\n    struct G2Point {\\n        uint256[2] X;\\n        uint256[2] Y;\\n    }\\n\\n    function P1() internal pure returns (G1Point memory) {\\n        return G1Point(1, 2);\\n    }\\n\\n    function new_g1(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n        return G1Point(x, y);\\n    }\\n\\n    // function new_g1_checked(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n    function new_g1_checked(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n        if (x == 0 && y == 0) {\\n            // point of infinity is (0,0)\\n            return G1Point(x, y);\\n        }\\n\\n        // check encoding\\n        require(x < q_mod, \\\"x axis isn't valid\\\");\\n        require(y < q_mod, \\\"y axis isn't valid\\\");\\n        // check on curve\\n        uint256 lhs = mulmod(y, y, q_mod); // y^2\\n\\n        uint256 rhs = mulmod(x, x, q_mod); // x^2\\n        rhs = mulmod(rhs, x, q_mod); // x^3\\n        rhs = addmod(rhs, bn254_b_coeff, q_mod); // x^3 + b\\n        require(lhs == rhs, \\\"is not on curve\\\");\\n\\n        return G1Point(x, y);\\n    }\\n\\n    function new_g2(uint256[2] memory x, uint256[2] memory y) internal pure returns (G2Point memory) {\\n        return G2Point(x, y);\\n    }\\n\\n    function copy_g1(G1Point memory self) internal pure returns (G1Point memory result) {\\n        result.X = self.X;\\n        result.Y = self.Y;\\n    }\\n\\n    function P2() internal pure returns (G2Point memory) {\\n        // for some reason ethereum expects to have c1*v + c0 form\\n\\n        return\\n            G2Point(\\n                [\\n                    0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,\\n                    0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\\n                ],\\n                [\\n                    0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,\\n                    0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\\n                ]\\n            );\\n    }\\n\\n    function negate(G1Point memory self) internal pure {\\n        // The prime q in the base field F_q for G1\\n        if (self.Y == 0) {\\n            require(self.X == 0);\\n            return;\\n        }\\n\\n        self.Y = q_mod - self.Y;\\n    }\\n\\n    function point_add(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) {\\n        point_add_into_dest(p1, p2, r);\\n        return r;\\n    }\\n\\n    function point_add_assign(G1Point memory p1, G1Point memory p2) internal view {\\n        point_add_into_dest(p1, p2, p1);\\n    }\\n\\n    function point_add_into_dest(\\n        G1Point memory p1,\\n        G1Point memory p2,\\n        G1Point memory dest\\n    ) internal view {\\n        if (p2.X == 0 && p2.Y == 0) {\\n            // we add zero, nothing happens\\n            dest.X = p1.X;\\n            dest.Y = p1.Y;\\n            return;\\n        } else if (p1.X == 0 && p1.Y == 0) {\\n            // we add into zero, and we add non-zero point\\n            dest.X = p2.X;\\n            dest.Y = p2.Y;\\n            return;\\n        } else {\\n            uint256[4] memory input;\\n\\n            input[0] = p1.X;\\n            input[1] = p1.Y;\\n            input[2] = p2.X;\\n            input[3] = p2.Y;\\n\\n            bool success;\\n            assembly {\\n                success := staticcall(gas(), 6, input, 0x80, dest, 0x40)\\n            }\\n            require(success);\\n        }\\n    }\\n\\n    function point_sub_assign(G1Point memory p1, G1Point memory p2) internal view {\\n        point_sub_into_dest(p1, p2, p1);\\n    }\\n\\n    function point_sub_into_dest(\\n        G1Point memory p1,\\n        G1Point memory p2,\\n        G1Point memory dest\\n    ) internal view {\\n        if (p2.X == 0 && p2.Y == 0) {\\n            // we subtracted zero, nothing happens\\n            dest.X = p1.X;\\n            dest.Y = p1.Y;\\n            return;\\n        } else if (p1.X == 0 && p1.Y == 0) {\\n            // we subtract from zero, and we subtract non-zero point\\n            dest.X = p2.X;\\n            dest.Y = q_mod - p2.Y;\\n            return;\\n        } else {\\n            uint256[4] memory input;\\n\\n            input[0] = p1.X;\\n            input[1] = p1.Y;\\n            input[2] = p2.X;\\n            input[3] = q_mod - p2.Y;\\n\\n            bool success = false;\\n            assembly {\\n                success := staticcall(gas(), 6, input, 0x80, dest, 0x40)\\n            }\\n            require(success);\\n        }\\n    }\\n\\n    function point_mul(G1Point memory p, Fr memory s) internal view returns (G1Point memory r) {\\n        // https://eips.ethereum.org/EIPS/eip-197\\n        // Elliptic curve points are encoded as a Jacobian pair (X, Y) where the point at infinity is encoded as (0, 0)\\n        // TODO\\n        if (p.X == 0 && p.Y == 1) {\\n            p.Y = 0;\\n        }\\n        point_mul_into_dest(p, s, r);\\n        return r;\\n    }\\n\\n    function point_mul_assign(G1Point memory p, Fr memory s) internal view {\\n        point_mul_into_dest(p, s, p);\\n    }\\n\\n    function point_mul_into_dest(\\n        G1Point memory p,\\n        Fr memory s,\\n        G1Point memory dest\\n    ) internal view {\\n        uint256[3] memory input;\\n        input[0] = p.X;\\n        input[1] = p.Y;\\n        input[2] = s.value;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 7, input, 0x60, dest, 0x40)\\n        }\\n        require(success);\\n    }\\n\\n    function pairing(G1Point[] memory p1, G2Point[] memory p2) internal view returns (bool) {\\n        require(p1.length == p2.length);\\n        uint256 elements = p1.length;\\n        uint256 inputSize = elements * 6;\\n        uint256[] memory input = new uint256[](inputSize);\\n        for (uint256 i = 0; i < elements; ) {\\n            input[i * 6 + 0] = p1[i].X;\\n            input[i * 6 + 1] = p1[i].Y;\\n            input[i * 6 + 2] = p2[i].X[0];\\n            input[i * 6 + 3] = p2[i].X[1];\\n            input[i * 6 + 4] = p2[i].Y[0];\\n            input[i * 6 + 5] = p2[i].Y[1];\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n        uint256[1] memory out;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20)\\n        }\\n        require(success);\\n        return out[0] != 0;\\n    }\\n\\n    /// Convenience method for a pairing check for two pairs.\\n    function pairingProd2(\\n        G1Point memory a1,\\n        G2Point memory a2,\\n        G1Point memory b1,\\n        G2Point memory b2\\n    ) internal view returns (bool) {\\n        G1Point[] memory p1 = new G1Point[](2);\\n        G2Point[] memory p2 = new G2Point[](2);\\n        p1[0] = a1;\\n        p1[1] = b1;\\n        p2[0] = a2;\\n        p2[1] = b2;\\n        return pairing(p1, p2);\\n    }\\n}\\n\",\"keccak256\":\"0x0532cd43e648a5236d854c85b47d83e4d4faa86ccb87322de0dcc52f0956ee1d\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PriorityQueue.sol":{"PriorityQueue":{"abi":[],"devdoc":{"author":"Matter Labs","details":"The library provides the API to interact with the priority queue containerOrder of processing operations from queue - FIFO (Fist in - first out)","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a6361f745d4798edfb4268a5d88091786e1a21348709d560f51d4cba46fd6c7c64736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA6 CALLDATASIZE 0x1F PUSH21 0x5D4798EDFB4268A5D88091786E1A21348709D560F5 SAR 0x4C 0xBA CHAINID REVERT PUSH13 0x7C64736F6C6343000811003300 ","sourceMap":"863:2638:17:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;863:2638:17;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a6361f745d4798edfb4268a5d88091786e1a21348709d560f51d4cba46fd6c7c64736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA6 CALLDATASIZE 0x1F PUSH21 0x5D4798EDFB4268A5D88091786E1A21348709D560F5 SAR 0x4C 0xBA CHAINID REVERT PUSH13 0x7C64736F6C6343000811003300 ","sourceMap":"863:2638:17:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"front(struct PriorityQueue.Queue storage pointer)":"infinite","getFirstUnprocessedPriorityTx(struct PriorityQueue.Queue storage pointer)":"infinite","getSize(struct PriorityQueue.Queue storage pointer)":"infinite","getTotalPriorityTxs(struct PriorityQueue.Queue storage pointer)":"infinite","isEmpty(struct PriorityQueue.Queue storage pointer)":"infinite","popFront(struct PriorityQueue.Queue storage pointer)":"infinite","pushBack(struct PriorityQueue.Queue storage pointer,struct PriorityOperation memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Matter Labs\",\"details\":\"The library provides the API to interact with the priority queue containerOrder of processing operations from queue - FIFO (Fist in - first out)\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PriorityQueue.sol\":\"PriorityQueue\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PriorityQueue.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\n/// @notice The structure that contains meta information of the L2 transaction that was requested from L1\\n/// @dev The weird size of fields was selected specifically to minimize the structure storage size\\n/// @param canonicalTxHash Hashed L2 transaction data that is needed to process it\\n/// @param expirationBlock Expiration block number (ETH block) for this request (must be satisfied before)\\n/// @param layer2Tip Additional payment to the validator as an incentive to perform the operation\\nstruct PriorityOperation {\\n    bytes32 canonicalTxHash;\\n    uint64 expirationBlock;\\n    uint192 layer2Tip;\\n}\\n\\n/// @author Matter Labs\\n/// @dev The library provides the API to interact with the priority queue container\\n/// @dev Order of processing operations from queue - FIFO (Fist in - first out)\\nlibrary PriorityQueue {\\n    using PriorityQueue for Queue;\\n\\n    /// @notice Container that stores priority operations\\n    /// @param data The inner mapping that saves priority operation by its index\\n    /// @param head The pointer to the last added priority operation\\n    /// @param tail The pointer to the first unprocessed priority operation\\n    struct Queue {\\n        mapping(uint256 => PriorityOperation) data;\\n        uint256 head;\\n        uint256 tail;\\n    }\\n\\n    /// @return Index of the oldest priority operation that wasn't processed yet\\n    /// @notice Returns zero if and only if no operations were processed from the queue\\n    function getFirstUnprocessedPriorityTx(Queue storage _queue) internal view returns (uint256) {\\n        return _queue.tail;\\n    }\\n\\n    /// @return The total number of priority operations that were added to the priority queue, including all processed ones\\n    function getTotalPriorityTxs(Queue storage _queue) internal view returns (uint256) {\\n        return _queue.head;\\n    }\\n\\n    /// @return The total number of unprocessed priority operations in a priority queue\\n    function getSize(Queue storage _queue) internal view returns (uint256) {\\n        return uint256(_queue.head - _queue.tail);\\n    }\\n\\n    /// @return Whether the priority queue contains no operations\\n    function isEmpty(Queue storage _queue) internal view returns (bool) {\\n        return _queue.head == _queue.tail;\\n    }\\n\\n    /// @notice Add the priority operation to the end of the priority queue\\n    function pushBack(Queue storage _queue, PriorityOperation memory _operation) internal {\\n        // Save value into the stack to avoid double reading from the storage\\n        uint256 head = _queue.head;\\n\\n        _queue.data[head] = _operation;\\n        _queue.head = head + 1;\\n    }\\n\\n    /// @return The first unprocessed priority operation from the queue\\n    function front(Queue storage _queue) internal view returns (PriorityOperation memory) {\\n        require(!_queue.isEmpty(), \\\"D\\\"); // priority queue is empty\\n\\n        return _queue.data[_queue.tail];\\n    }\\n\\n    /// @notice Remove the first unprocessed priority operation from the queue\\n    /// @return priorityOperation that was popped from the priority queue\\n    function popFront(Queue storage _queue) internal returns (PriorityOperation memory priorityOperation) {\\n        require(!_queue.isEmpty(), \\\"s\\\"); // priority queue is empty\\n\\n        // Save value into the stack to avoid double reading from the storage\\n        uint256 tail = _queue.tail;\\n\\n        priorityOperation = _queue.data[tail];\\n        delete _queue.data[tail];\\n        _queue.tail = tail + 1;\\n    }\\n}\\n\",\"keccak256\":\"0x83a6511847a78dee8814414191c013cb67fb863e038bc42e21bbbd2641e9e184\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/TranscriptLib.sol":{"TranscriptLib":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220daee9ad2d79f18d8d2f66434ea886726d04e407c53c1ca4e2e9d49c3e15bce0d64736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDA 0xEE SWAP11 0xD2 0xD7 SWAP16 XOR 0xD8 0xD2 0xF6 PUSH5 0x34EA886726 0xD0 0x4E BLOCKHASH PUSH29 0x53C1CA4E2E9D49C3E15BCE0D64736F6C63430008110033000000000000 ","sourceMap":"103:1622:18:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;103:1622:18;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220daee9ad2d79f18d8d2f66434ea886726d04e407c53c1ca4e2e9d49c3e15bce0d64736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDA 0xEE SWAP11 0xD2 0xD7 SWAP16 XOR 0xD8 0xD2 0xF6 PUSH5 0x34EA886726 0xD0 0x4E BLOCKHASH PUSH29 0x53C1CA4E2E9D49C3E15BCE0D64736F6C63430008110033000000000000 ","sourceMap":"103:1622:18:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"get_challenge(struct TranscriptLib.Transcript memory)":"infinite","new_transcript()":"infinite","update_with_fr(struct TranscriptLib.Transcript memory,struct PairingsBn254.Fr memory)":"infinite","update_with_g1(struct TranscriptLib.Transcript memory,struct PairingsBn254.G1Point memory)":"infinite","update_with_u256(struct TranscriptLib.Transcript memory,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/TranscriptLib.sol\":\"TranscriptLib\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PairingsBn254.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nlibrary PairingsBn254 {\\n    uint256 constant q_mod = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n    uint256 constant r_mod = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant bn254_b_coeff = 3;\\n\\n    struct G1Point {\\n        uint256 X;\\n        uint256 Y;\\n    }\\n\\n    struct Fr {\\n        uint256 value;\\n    }\\n\\n    function new_fr(uint256 fr) internal pure returns (Fr memory) {\\n        require(fr < r_mod);\\n        return Fr({value: fr});\\n    }\\n\\n    function copy(Fr memory self) internal pure returns (Fr memory n) {\\n        n.value = self.value;\\n    }\\n\\n    function assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = other.value;\\n    }\\n\\n    function inverse(Fr memory fr) internal view returns (Fr memory) {\\n        require(fr.value != 0);\\n        return pow(fr, r_mod - 2);\\n    }\\n\\n    function add_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = addmod(self.value, other.value, r_mod);\\n    }\\n\\n    function sub_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = addmod(self.value, r_mod - other.value, r_mod);\\n    }\\n\\n    function mul_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = mulmod(self.value, other.value, r_mod);\\n    }\\n\\n    function pow(Fr memory self, uint256 power) internal view returns (Fr memory) {\\n        uint256[6] memory input = [32, 32, 32, self.value, power, r_mod];\\n        uint256[1] memory result;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 0x05, input, 0xc0, result, 0x20)\\n        }\\n        require(success);\\n        return Fr({value: result[0]});\\n    }\\n\\n    // Encoding of field elements is: X[0] * z + X[1]\\n    struct G2Point {\\n        uint256[2] X;\\n        uint256[2] Y;\\n    }\\n\\n    function P1() internal pure returns (G1Point memory) {\\n        return G1Point(1, 2);\\n    }\\n\\n    function new_g1(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n        return G1Point(x, y);\\n    }\\n\\n    // function new_g1_checked(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n    function new_g1_checked(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n        if (x == 0 && y == 0) {\\n            // point of infinity is (0,0)\\n            return G1Point(x, y);\\n        }\\n\\n        // check encoding\\n        require(x < q_mod, \\\"x axis isn't valid\\\");\\n        require(y < q_mod, \\\"y axis isn't valid\\\");\\n        // check on curve\\n        uint256 lhs = mulmod(y, y, q_mod); // y^2\\n\\n        uint256 rhs = mulmod(x, x, q_mod); // x^2\\n        rhs = mulmod(rhs, x, q_mod); // x^3\\n        rhs = addmod(rhs, bn254_b_coeff, q_mod); // x^3 + b\\n        require(lhs == rhs, \\\"is not on curve\\\");\\n\\n        return G1Point(x, y);\\n    }\\n\\n    function new_g2(uint256[2] memory x, uint256[2] memory y) internal pure returns (G2Point memory) {\\n        return G2Point(x, y);\\n    }\\n\\n    function copy_g1(G1Point memory self) internal pure returns (G1Point memory result) {\\n        result.X = self.X;\\n        result.Y = self.Y;\\n    }\\n\\n    function P2() internal pure returns (G2Point memory) {\\n        // for some reason ethereum expects to have c1*v + c0 form\\n\\n        return\\n            G2Point(\\n                [\\n                    0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,\\n                    0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\\n                ],\\n                [\\n                    0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,\\n                    0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\\n                ]\\n            );\\n    }\\n\\n    function negate(G1Point memory self) internal pure {\\n        // The prime q in the base field F_q for G1\\n        if (self.Y == 0) {\\n            require(self.X == 0);\\n            return;\\n        }\\n\\n        self.Y = q_mod - self.Y;\\n    }\\n\\n    function point_add(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) {\\n        point_add_into_dest(p1, p2, r);\\n        return r;\\n    }\\n\\n    function point_add_assign(G1Point memory p1, G1Point memory p2) internal view {\\n        point_add_into_dest(p1, p2, p1);\\n    }\\n\\n    function point_add_into_dest(\\n        G1Point memory p1,\\n        G1Point memory p2,\\n        G1Point memory dest\\n    ) internal view {\\n        if (p2.X == 0 && p2.Y == 0) {\\n            // we add zero, nothing happens\\n            dest.X = p1.X;\\n            dest.Y = p1.Y;\\n            return;\\n        } else if (p1.X == 0 && p1.Y == 0) {\\n            // we add into zero, and we add non-zero point\\n            dest.X = p2.X;\\n            dest.Y = p2.Y;\\n            return;\\n        } else {\\n            uint256[4] memory input;\\n\\n            input[0] = p1.X;\\n            input[1] = p1.Y;\\n            input[2] = p2.X;\\n            input[3] = p2.Y;\\n\\n            bool success;\\n            assembly {\\n                success := staticcall(gas(), 6, input, 0x80, dest, 0x40)\\n            }\\n            require(success);\\n        }\\n    }\\n\\n    function point_sub_assign(G1Point memory p1, G1Point memory p2) internal view {\\n        point_sub_into_dest(p1, p2, p1);\\n    }\\n\\n    function point_sub_into_dest(\\n        G1Point memory p1,\\n        G1Point memory p2,\\n        G1Point memory dest\\n    ) internal view {\\n        if (p2.X == 0 && p2.Y == 0) {\\n            // we subtracted zero, nothing happens\\n            dest.X = p1.X;\\n            dest.Y = p1.Y;\\n            return;\\n        } else if (p1.X == 0 && p1.Y == 0) {\\n            // we subtract from zero, and we subtract non-zero point\\n            dest.X = p2.X;\\n            dest.Y = q_mod - p2.Y;\\n            return;\\n        } else {\\n            uint256[4] memory input;\\n\\n            input[0] = p1.X;\\n            input[1] = p1.Y;\\n            input[2] = p2.X;\\n            input[3] = q_mod - p2.Y;\\n\\n            bool success = false;\\n            assembly {\\n                success := staticcall(gas(), 6, input, 0x80, dest, 0x40)\\n            }\\n            require(success);\\n        }\\n    }\\n\\n    function point_mul(G1Point memory p, Fr memory s) internal view returns (G1Point memory r) {\\n        // https://eips.ethereum.org/EIPS/eip-197\\n        // Elliptic curve points are encoded as a Jacobian pair (X, Y) where the point at infinity is encoded as (0, 0)\\n        // TODO\\n        if (p.X == 0 && p.Y == 1) {\\n            p.Y = 0;\\n        }\\n        point_mul_into_dest(p, s, r);\\n        return r;\\n    }\\n\\n    function point_mul_assign(G1Point memory p, Fr memory s) internal view {\\n        point_mul_into_dest(p, s, p);\\n    }\\n\\n    function point_mul_into_dest(\\n        G1Point memory p,\\n        Fr memory s,\\n        G1Point memory dest\\n    ) internal view {\\n        uint256[3] memory input;\\n        input[0] = p.X;\\n        input[1] = p.Y;\\n        input[2] = s.value;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 7, input, 0x60, dest, 0x40)\\n        }\\n        require(success);\\n    }\\n\\n    function pairing(G1Point[] memory p1, G2Point[] memory p2) internal view returns (bool) {\\n        require(p1.length == p2.length);\\n        uint256 elements = p1.length;\\n        uint256 inputSize = elements * 6;\\n        uint256[] memory input = new uint256[](inputSize);\\n        for (uint256 i = 0; i < elements; ) {\\n            input[i * 6 + 0] = p1[i].X;\\n            input[i * 6 + 1] = p1[i].Y;\\n            input[i * 6 + 2] = p2[i].X[0];\\n            input[i * 6 + 3] = p2[i].X[1];\\n            input[i * 6 + 4] = p2[i].Y[0];\\n            input[i * 6 + 5] = p2[i].Y[1];\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n        uint256[1] memory out;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20)\\n        }\\n        require(success);\\n        return out[0] != 0;\\n    }\\n\\n    /// Convenience method for a pairing check for two pairs.\\n    function pairingProd2(\\n        G1Point memory a1,\\n        G2Point memory a2,\\n        G1Point memory b1,\\n        G2Point memory b2\\n    ) internal view returns (bool) {\\n        G1Point[] memory p1 = new G1Point[](2);\\n        G2Point[] memory p2 = new G2Point[](2);\\n        p1[0] = a1;\\n        p1[1] = b1;\\n        p2[0] = a2;\\n        p2[1] = b2;\\n        return pairing(p1, p2);\\n    }\\n}\\n\",\"keccak256\":\"0x0532cd43e648a5236d854c85b47d83e4d4faa86ccb87322de0dcc52f0956ee1d\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/TranscriptLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./PairingsBn254.sol\\\";\\n\\nlibrary TranscriptLib {\\n    // flip                    0xe000000000000000000000000000000000000000000000000000000000000000;\\n    uint256 constant FR_MASK = 0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n    uint32 constant DST_0 = 0;\\n    uint32 constant DST_1 = 1;\\n    uint32 constant DST_CHALLENGE = 2;\\n\\n    struct Transcript {\\n        bytes32 state_0;\\n        bytes32 state_1;\\n        uint32 challenge_counter;\\n    }\\n\\n    function new_transcript() internal pure returns (Transcript memory t) {\\n        t.state_0 = bytes32(0);\\n        t.state_1 = bytes32(0);\\n        t.challenge_counter = 0;\\n    }\\n\\n    function update_with_u256(Transcript memory self, uint256 value) internal pure {\\n        bytes32 old_state_0 = self.state_0;\\n        self.state_0 = keccak256(abi.encodePacked(DST_0, old_state_0, self.state_1, value));\\n        self.state_1 = keccak256(abi.encodePacked(DST_1, old_state_0, self.state_1, value));\\n    }\\n\\n    function update_with_fr(Transcript memory self, PairingsBn254.Fr memory value) internal pure {\\n        update_with_u256(self, value.value);\\n    }\\n\\n    function update_with_g1(Transcript memory self, PairingsBn254.G1Point memory p) internal pure {\\n        update_with_u256(self, p.X);\\n        update_with_u256(self, p.Y);\\n    }\\n\\n    function get_challenge(Transcript memory self) internal pure returns (PairingsBn254.Fr memory challenge) {\\n        bytes32 query = keccak256(abi.encodePacked(DST_CHALLENGE, self.state_0, self.state_1, self.challenge_counter));\\n        self.challenge_counter += 1;\\n        challenge = PairingsBn254.Fr({value: uint256(query) & FR_MASK});\\n    }\\n}\\n\",\"keccak256\":\"0x56cd646af0899ea51be78a046b647578bae59714f5f3e3c85010b278c96bfdcc\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IAccountCodeStorage.sol":{"IAccountCodeStorage":{"abi":[{"inputs":[{"internalType":"uint256","name":"_input","type":"uint256"}],"name":"getCodeHash","outputs":[{"internalType":"bytes32","name":"codeHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_input","type":"uint256"}],"name":"getCodeSize","outputs":[{"internalType":"uint256","name":"codeSize","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getRawCodeHash","outputs":[{"internalType":"bytes32","name":"codeHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"name":"storeCodeHash","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getCodeHash(uint256)":"e03fe177","getCodeSize(uint256)":"1806aa18","getRawCodeHash(address)":"4de2e468","storeCodeHash(address,bytes32)":"9091088b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_input\",\"type\":\"uint256\"}],\"name\":\"getCodeHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"codeHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_input\",\"type\":\"uint256\"}],\"name\":\"getCodeSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"codeSize\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"getRawCodeHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"codeHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"storeCodeHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IAccountCodeStorage.sol\":\"IAccountCodeStorage\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IAccountCodeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\ninterface IAccountCodeStorage {\\n    function storeCodeHash(address _address, bytes32 _hash) external;\\n\\n    function getRawCodeHash(address _address) external view returns (bytes32 codeHash);\\n\\n    function getCodeHash(uint256 _input) external returns (bytes32 codeHash);\\n    \\n    function getCodeSize(uint256 _input) external returns (uint256 codeSize);\\n}\\n\",\"keccak256\":\"0x572ca2f8ca5fab4e919a7e21a4df017a1aa07ef5aa501b76093704ca07a483b8\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IContractDeployer.sol":{"IContractDeployer":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"deployerAddress","type":"address"},{"indexed":true,"internalType":"bytes32","name":"bytecodeHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractDeployed","type":"event"},{"inputs":[{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"bytes32","name":"_bytecodeHash","type":"bytes32"},{"internalType":"bytes","name":"_input","type":"bytes"}],"name":"create","outputs":[{"internalType":"address","name":"newAddress","type":"address"},{"internalType":"bytes","name":"constructorRevertData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"bytes32","name":"_bytecodeHash","type":"bytes32"},{"internalType":"bytes","name":"_input","type":"bytes"}],"name":"create2","outputs":[{"internalType":"address","name":"newAddress","type":"address"},{"internalType":"bytes","name":"constructorRevertData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"bytes32","name":"_bytecodeHash","type":"bytes32"},{"internalType":"bytes","name":"_input","type":"bytes"}],"name":"create2Account","outputs":[{"internalType":"address","name":"newAddress","type":"address"},{"internalType":"bytes","name":"constructorRevertData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"bytes32","name":"_bytecodeHash","type":"bytes32"},{"internalType":"bytes","name":"_input","type":"bytes"}],"name":"createAccount","outputs":[{"internalType":"address","name":"newAddress","type":"address"},{"internalType":"bytes","name":"constructorRevertData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"_senderNonce","type":"uint256"}],"name":"getNewAddressCreate","outputs":[{"internalType":"address","name":"newAddress","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"bytes32","name":"_bytecodeHash","type":"bytes32"},{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"bytes","name":"_input","type":"bytes"}],"name":"getNewAddressCreate2","outputs":[{"internalType":"address","name":"newAddress","type":"address"}],"stateMutability":"pure","type":"function"}],"devdoc":{"kind":"dev","methods":{"create(bytes32,bytes32,bytes)":{"details":"While the `_salt` parameter is not used anywhere here,  it is still needed for consistency between `create` and `create2` functions (required by the compiler)."},"createAccount(bytes32,bytes32,bytes)":{"details":"While `_salt` is never used here, we leave it here as a parameter for the consistency with the `create` function."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"create(bytes32,bytes32,bytes)":"9c4d535b","create2(bytes32,bytes32,bytes)":"3cda3351","create2Account(bytes32,bytes32,bytes)":"2ff7479a","createAccount(bytes32,bytes32,bytes)":"81d0dff1","getNewAddressCreate(address,uint256)":"187598a5","getNewAddressCreate2(address,bytes32,bytes32,bytes)":"84da1fb4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"deployerAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"bytecodeHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractDeployed\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_bytecodeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_input\",\"type\":\"bytes\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"constructorRevertData\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_bytecodeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_input\",\"type\":\"bytes\"}],\"name\":\"create2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"constructorRevertData\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_bytecodeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_input\",\"type\":\"bytes\"}],\"name\":\"create2Account\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"constructorRevertData\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_bytecodeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_input\",\"type\":\"bytes\"}],\"name\":\"createAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"constructorRevertData\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_senderNonce\",\"type\":\"uint256\"}],\"name\":\"getNewAddressCreate\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_bytecodeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_input\",\"type\":\"bytes\"}],\"name\":\"getNewAddressCreate2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"create(bytes32,bytes32,bytes)\":{\"details\":\"While the `_salt` parameter is not used anywhere here,  it is still needed for consistency between `create` and `create2` functions (required by the compiler).\"},\"createAccount(bytes32,bytes32,bytes)\":{\"details\":\"While `_salt` is never used here, we leave it here as a parameter for the consistency with the `create` function.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IContractDeployer.sol\":\"IContractDeployer\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IContractDeployer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\ninterface IContractDeployer {\\n    event ContractDeployed(address indexed deployerAddress, bytes32 indexed bytecodeHash, address indexed contractAddress);\\n\\n    function getNewAddressCreate2(\\n        address _sender,\\n        bytes32 _bytecodeHash,\\n        bytes32 _salt,\\n        bytes calldata _input\\n    ) external pure returns (address newAddress);\\n \\n    function getNewAddressCreate(\\n        address _sender,\\n        uint256 _senderNonce\\n    ) external pure returns (address newAddress);\\n\\n    function create2 (\\n        bytes32 _salt,\\n        bytes32 _bytecodeHash,\\n        bytes calldata _input\\n    ) external payable returns (address newAddress, bytes memory constructorRevertData);\\n\\n    function create2Account (\\n        bytes32 _salt,\\n        bytes32 _bytecodeHash,\\n        bytes calldata _input\\n    ) external payable returns (address newAddress, bytes memory constructorRevertData);\\n\\n    /// @dev While the `_salt` parameter is not used anywhere here, \\n    /// it is still needed for consistency between `create` and\\n    /// `create2` functions (required by the compiler).\\n    function create (\\n        bytes32 _salt,\\n        bytes32 _bytecodeHash,\\n        bytes calldata _input\\n    ) external payable returns (address newAddress, bytes memory constructorRevertData);\\n\\n    /// @dev While `_salt` is never used here, we leave it here as a parameter\\n    /// for the consistency with the `create` function.\\n    function createAccount (\\n        bytes32 _salt,\\n        bytes32 _bytecodeHash,\\n        bytes calldata _input\\n    ) external payable returns (address newAddress, bytes memory constructorRevertData);\\n}\\n\",\"keccak256\":\"0x893ece6f1e596b211d49bf165c025e30f911bc488ed17f3aa47942e68623589a\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IEthToken.sol":{"IEthToken":{"abi":[{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFromTo","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"balanceOf(address)":"70a08231","transferFromTo(address,address,uint256)":"579952fc"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFromTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IEthToken.sol\":\"IEthToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IEthToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\ninterface IEthToken {\\n    function balanceOf(address) external returns (uint256);\\n    \\n    function transferFromTo(address _from, address _to, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xcc052bbb3f9d099a10d2d21c6c698281dfee1b0456422a23c803b6cc30199aea\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IImmutableSimulator.sol":{"IImmutableSimulator":{"abi":[{"inputs":[{"internalType":"address","name":"_dest","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getImmutable","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_dest","type":"address"},{"components":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bytes32","name":"value","type":"bytes32"}],"internalType":"struct ImmutableData[]","name":"immutables","type":"tuple[]"}],"name":"setImmutables","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getImmutable(address,uint256)":"310ab089","setImmutables(address,(uint256,bytes32)[])":"ad7e232e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dest\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getImmutable\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dest\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"internalType\":\"struct ImmutableData[]\",\"name\":\"immutables\",\"type\":\"tuple[]\"}],\"name\":\"setImmutables\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IImmutableSimulator.sol\":\"IImmutableSimulator\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IImmutableSimulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nstruct ImmutableData {\\n    uint256 index;\\n    bytes32 value;\\n}\\n\\ninterface IImmutableSimulator {\\n    function getImmutable(address _dest, uint256 _index) external view returns (bytes32);\\n\\n    function setImmutables(address _dest, ImmutableData[] calldata immutables) external;\\n}\\n\",\"keccak256\":\"0x8352bccfc38618f0b17fe94768ba24cd358ca8dc85b8bbb31d22de7289099fd3\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IKnownCodesStorage.sol":{"IKnownCodesStorage":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"bytecodeHash","type":"bytes32"},{"indexed":true,"internalType":"bool","name":"sendBytecodeToL1","type":"bool"}],"name":"MarkedAsKnown","type":"event"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"name":"getMarker","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_shouldSendToL1","type":"bool"},{"internalType":"bytes32[]","name":"_hashes","type":"bytes32[]"}],"name":"markFactoryDeps","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getMarker(bytes32)":"4c6314f0","markFactoryDeps(bool,bytes32[])":"e516761e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"bytecodeHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"sendBytecodeToL1\",\"type\":\"bool\"}],\"name\":\"MarkedAsKnown\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"getMarker\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_shouldSendToL1\",\"type\":\"bool\"},{\"internalType\":\"bytes32[]\",\"name\":\"_hashes\",\"type\":\"bytes32[]\"}],\"name\":\"markFactoryDeps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IKnownCodesStorage.sol\":\"IKnownCodesStorage\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IKnownCodesStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\ninterface IKnownCodesStorage {\\n    event MarkedAsKnown(bytes32 indexed bytecodeHash, bool indexed sendBytecodeToL1);\\n\\n    function markFactoryDeps(bool _shouldSendToL1, bytes32[] calldata _hashes) external;\\n\\n    function getMarker(bytes32 _hash) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x998a94e76cda5ff9c00a90f5fc352407d575325651754f4586d174a155f5d8cd\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IL1Messenger.sol":{"IL1Messenger":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_sender","type":"address"},{"indexed":true,"internalType":"bytes32","name":"_hash","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"_message","type":"bytes"}],"name":"L1MessageSent","type":"event"},{"inputs":[{"internalType":"bytes","name":"_message","type":"bytes"}],"name":"sendToL1","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"sendToL1(bytes)":"62f84b24"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"L1MessageSent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"sendToL1\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IL1Messenger.sol\":\"IL1Messenger\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IL1Messenger.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\ninterface IL1Messenger {\\n    // Possibly in the future we will be able to track the messages sent to L1 with \\n    // some hooks in the VM. For now, it is much easier to track them with L2 events.\\n    event L1MessageSent(address indexed _sender, bytes32 indexed _hash, bytes _message);\\n\\n    function sendToL1(bytes memory _message) external returns (bytes32);\\n}\\n\",\"keccak256\":\"0xb7559e0eba5f9e554b2a191975095d8a7cef01da638543c9b49c17e0aefe6950\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/INonceHolder.sol":{"INonceHolder":{"abi":[{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getDeploymentNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getMinNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getRawNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_key","type":"uint256"}],"name":"getValueUnderNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseMinNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"incrementDeploymentNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expectedNonce","type":"uint256"}],"name":"incrementMinNonceIfEquals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_key","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setValueUnderNonce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_key","type":"uint256"},{"internalType":"bool","name":"_shouldBeUsed","type":"bool"}],"name":"validateNonceUsage","outputs":[],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Matter Labs","details":"Interface of the nonce holder contract -- a contract used by the system to ensure that there is always a unique identifier for a transaction with a particular account (we call it nonce). In other words, the pair of (address, nonce) should always be unique.Custom accounts should use methods of this contract to store nonces or other possible unique identifiers  for the transaction.","kind":"dev","methods":{"getDeploymentNonce(address)":{"details":"Returns the deployment nonce for the accounts used for CREATE opcode."},"getMinNonce(address)":{"details":"Returns the current minimal nonce for account."},"getRawNonce(address)":{"details":"Returns the raw version of the current minimal nonce  (equal to minNonce + 2^128 * deployment nonce)."},"getValueUnderNonce(uint256)":{"details":"Gets the value stored inside a custom nonce."},"increaseMinNonce(uint256)":{"details":"Increases the minimal nonce for the msg.sender."},"incrementDeploymentNonce(address)":{"details":"Increments the deployment nonce for the account and returns the previous one."},"incrementMinNonceIfEquals(uint256)":{"details":"A convenience method to increment the minimal nonce if it is equal to the `_expectedNonce`."},"setValueUnderNonce(uint256,uint256)":{"details":"Sets the nonce value `key` as used."},"validateNonceUsage(address,uint256,bool)":{"details":"Determines whether a certain nonce has been already used for an account."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getDeploymentNonce(address)":"fb1a9a57","getMinNonce(address)":"896909dc","getRawNonce(address)":"5aa9b6b5","getValueUnderNonce(uint256)":"55d35d18","increaseMinNonce(uint256)":"38a78092","incrementDeploymentNonce(address)":"306395c6","incrementMinNonceIfEquals(uint256)":"e1239cd8","setValueUnderNonce(uint256,uint256)":"155fd27a","validateNonceUsage(address,uint256,bool)":"6ee1dc20"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"getDeploymentNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"getMinNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"getRawNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_key\",\"type\":\"uint256\"}],\"name\":\"getValueUnderNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"increaseMinNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"incrementDeploymentNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_expectedNonce\",\"type\":\"uint256\"}],\"name\":\"incrementMinNonceIfEquals\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_key\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"setValueUnderNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_key\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_shouldBeUsed\",\"type\":\"bool\"}],\"name\":\"validateNonceUsage\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Matter Labs\",\"details\":\"Interface of the nonce holder contract -- a contract used by the system to ensure that there is always a unique identifier for a transaction with a particular account (we call it nonce). In other words, the pair of (address, nonce) should always be unique.Custom accounts should use methods of this contract to store nonces or other possible unique identifiers  for the transaction.\",\"kind\":\"dev\",\"methods\":{\"getDeploymentNonce(address)\":{\"details\":\"Returns the deployment nonce for the accounts used for CREATE opcode.\"},\"getMinNonce(address)\":{\"details\":\"Returns the current minimal nonce for account.\"},\"getRawNonce(address)\":{\"details\":\"Returns the raw version of the current minimal nonce  (equal to minNonce + 2^128 * deployment nonce).\"},\"getValueUnderNonce(uint256)\":{\"details\":\"Gets the value stored inside a custom nonce.\"},\"increaseMinNonce(uint256)\":{\"details\":\"Increases the minimal nonce for the msg.sender.\"},\"incrementDeploymentNonce(address)\":{\"details\":\"Increments the deployment nonce for the account and returns the previous one.\"},\"incrementMinNonceIfEquals(uint256)\":{\"details\":\"A convenience method to increment the minimal nonce if it is equal to the `_expectedNonce`.\"},\"setValueUnderNonce(uint256,uint256)\":{\"details\":\"Sets the nonce value `key` as used.\"},\"validateNonceUsage(address,uint256,bool)\":{\"details\":\"Determines whether a certain nonce has been already used for an account.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/INonceHolder.sol\":\"INonceHolder\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/INonceHolder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @author Matter Labs\\n * @dev Interface of the nonce holder contract -- a contract used by the system to ensure\\n * that there is always a unique identifier for a transaction with a particular account (we call it nonce).\\n * In other words, the pair of (address, nonce) should always be unique.\\n * @dev Custom accounts should use methods of this contract to store nonces or other possible unique identifiers \\n * for the transaction.\\n */\\ninterface INonceHolder {\\n    /// @dev Returns the current minimal nonce for account.\\n    function getMinNonce(address _address) external view returns(uint256);\\n\\n    /// @dev Returns the raw version of the current minimal nonce \\n    /// (equal to minNonce + 2^128 * deployment nonce).\\n    function getRawNonce(address _address) external view returns (uint256);\\n\\n    /// @dev Increases the minimal nonce for the msg.sender.\\n    function increaseMinNonce(uint256 _value) external returns (uint256);\\n\\n    /// @dev Sets the nonce value `key` as used.\\n    function setValueUnderNonce(uint256 _key, uint256 _value) external;\\n\\n    /// @dev Gets the value stored inside a custom nonce.\\n    function getValueUnderNonce(uint256 _key) external view returns (uint256);\\n\\n    /// @dev A convenience method to increment the minimal nonce if it is equal\\n    /// to the `_expectedNonce`.\\n    function incrementMinNonceIfEquals(uint256 _expectedNonce) external;\\n\\n    /// @dev Returns the deployment nonce for the accounts used for CREATE opcode.\\n    function getDeploymentNonce(address _address) external view returns (uint256);\\n\\n    /// @dev Increments the deployment nonce for the account and returns the previous one.\\n    function incrementDeploymentNonce(address _address) external returns (uint256);\\n\\n    /// @dev Determines whether a certain nonce has been already used for an account.\\n    function validateNonceUsage(address _address, uint256 _key, bool _shouldBeUsed) external view;\\n}\\n\",\"keccak256\":\"0xaff18a90586919bde65f8191a196ff18f71375a5008dffee9ea2ecbfa1b1d592\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/ISystemContext.sol":{"ISystemContext":{"abi":[{"inputs":[],"name":"baseFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockErgsLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_block","type":"uint256"}],"name":"blockHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coinbase","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"difficulty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ergsPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_block","type":"uint256"}],"name":"getBlockHashEVM","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockNumberAndTimestamp","outputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"uint256","name":"blockTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"msize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"origin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Matter Labs","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"baseFee()":"6ef25c3a","blockErgsLimit()":"590cfb27","blockHash(uint256)":"85df51fd","chainId()":"9a8a0592","coinbase()":"a6ae0aac","difficulty()":"19cae462","ergsPrice()":"7516bc2b","getBlockHashEVM(uint256)":"80b41246","getBlockNumber()":"42cbb15c","getBlockNumberAndTimestamp()":"d4a4ca0d","getBlockTimestamp()":"796b89b9","msize()":"0e153d77","origin()":"938b5f32"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"baseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockErgsLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"blockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"coinbase\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"difficulty\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ergsPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"getBlockHashEVM\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockNumberAndTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockTimestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"origin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Matter Labs\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contract that stores some of the context variables, that may be either  block-scoped, tx-scoped or system-wide.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/ISystemContext.sol\":\"ISystemContext\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/ISystemContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @author Matter Labs\\n * @notice Contract that stores some of the context variables, that may be either \\n * block-scoped, tx-scoped or system-wide.\\n */\\ninterface ISystemContext {\\n    function chainId() external view returns (uint256);\\n\\n    function origin() external view returns (address);\\n\\n    function ergsPrice() external view returns (uint256);\\n\\n    function blockErgsLimit() external view returns (uint256);\\n\\n    function coinbase() external view returns (address);\\n\\n    function difficulty() external view returns (uint256);\\n\\n    function msize() external view returns (uint256);\\n\\n    function baseFee() external view returns (uint256);\\n\\n    function blockHash(uint256 _block) external view returns (bytes32);\\n\\n    function getBlockHashEVM(uint256 _block) external view returns (bytes32);\\n\\n    function getBlockNumberAndTimestamp() external view returns (uint256 blockNumber, uint256 blockTimestamp);\\n\\n    // Note, that for now, the implementation of the bootloader allows this variables to \\n    // be incremented multiple times inside a block, so it should not relied upon right now.\\n    function getBlockNumber() external view returns (uint256);\\n\\n    function getBlockTimestamp() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x8e525d99dc4104224f01dfa677b7c0f2bd0d3829b530de346c0b26e008f916b6\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Contract that stores some of the context variables, that may be either  block-scoped, tx-scoped or system-wide.","version":1}}},"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol":{"OwnableUpgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.","kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":\"OwnableUpgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8076,"contract":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":8079,"contract":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":9542,"contract":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":7948,"contract":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":8068,"contract":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable","label":"__gap","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol":{"Initializable":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"}],"devdoc":{"custom:oz-upgrades-unsafe-allow":"constructor constructor() {     _disableInitializers(); } ``` ====","details":"This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. The initialization functions use a version number. Once a version number is used, it is consumed and cannot be reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in case an upgrade adds a module that needs to be initialized. For example: [.hljs-theme-light.nopadding] ``` contract MyToken is ERC20Upgradeable {     function initialize() initializer public {         __ERC20_init(\"MyToken\", \"MTK\");     } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {     function initializeV2() reinitializer(2) public {         __ERC20Permit_init(\"MyToken\");     } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: [.hljs-theme-light.nopadding] ```","events":{"Initialized(uint8)":{"details":"Triggered when the contract has been initialized or reinitialized."}},"kind":"dev","methods":{},"stateVariables":{"_initialized":{"custom:oz-retyped-from":"bool","details":"Indicates that the contract has been initialized."},"_initializing":{"details":"Indicates that the contract is in the process of being initialized."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor constructor() {     _disableInitializers(); } ``` ====\",\"details\":\"This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. The initialization functions use a version number. Once a version number is used, it is consumed and cannot be reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in case an upgrade adds a module that needs to be initialized. For example: [.hljs-theme-light.nopadding] ``` contract MyToken is ERC20Upgradeable {     function initialize() initializer public {         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");     } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {     function initializeV2() reinitializer(2) public {         __ERC20Permit_init(\\\"MyToken\\\");     } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: [.hljs-theme-light.nopadding] ```\",\"events\":{\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"_initialized\":{\"custom:oz-retyped-from\":\"bool\",\"details\":\"Indicates that the contract has been initialized.\"},\"_initializing\":{\"details\":\"Indicates that the contract is in the process of being initialized.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":\"Initializable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8076,"contract":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:Initializable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":8079,"contract":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:Initializable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol":{"PausableUpgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Contract module which allows children to implement an emergency stop mechanism that can be triggered by an authorized account. This module is used through inheritance. It will make available the modifiers `whenNotPaused` and `whenPaused`, which can be applied to the functions of your contract. Note that they will not be pausable by simply including this module, only once the modifiers are put in place.","events":{"Paused(address)":{"details":"Emitted when the pause is triggered by `account`."},"Unpaused(address)":{"details":"Emitted when the pause is lifted by `account`."}},"kind":"dev","methods":{"paused()":{"details":"Returns true if the contract is paused, and false otherwise."}},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"paused()":"5c975abb"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which allows children to implement an emergency stop mechanism that can be triggered by an authorized account. This module is used through inheritance. It will make available the modifiers `whenNotPaused` and `whenPaused`, which can be applied to the functions of your contract. Note that they will not be pausable by simply including this module, only once the modifiers are put in place.\",\"events\":{\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"}},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol\":\"PausableUpgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract PausableUpgradeable is Initializable, ContextUpgradeable {\\n    /**\\n     * @dev Emitted when the pause is triggered by `account`.\\n     */\\n    event Paused(address account);\\n\\n    /**\\n     * @dev Emitted when the pause is lifted by `account`.\\n     */\\n    event Unpaused(address account);\\n\\n    bool private _paused;\\n\\n    /**\\n     * @dev Initializes the contract in unpaused state.\\n     */\\n    function __Pausable_init() internal onlyInitializing {\\n        __Pausable_init_unchained();\\n    }\\n\\n    function __Pausable_init_unchained() internal onlyInitializing {\\n        _paused = false;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    modifier whenNotPaused() {\\n        _requireNotPaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    modifier whenPaused() {\\n        _requirePaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the contract is paused, and false otherwise.\\n     */\\n    function paused() public view virtual returns (bool) {\\n        return _paused;\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is paused.\\n     */\\n    function _requireNotPaused() internal view virtual {\\n        require(!paused(), \\\"Pausable: paused\\\");\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is not paused.\\n     */\\n    function _requirePaused() internal view virtual {\\n        require(paused(), \\\"Pausable: not paused\\\");\\n    }\\n\\n    /**\\n     * @dev Triggers stopped state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    function _pause() internal virtual whenNotPaused {\\n        _paused = true;\\n        emit Paused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Returns to normal state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    function _unpause() internal virtual whenPaused {\\n        _paused = false;\\n        emit Unpaused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x40c636b4572ff5f1dc50cf22097e93c0723ee14eff87e99ac2b02636eeca1250\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8076,"contract":"@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:PausableUpgradeable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":8079,"contract":"@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:PausableUpgradeable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":9542,"contract":"@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:PausableUpgradeable","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":8259,"contract":"@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:PausableUpgradeable","label":"_paused","offset":0,"slot":"51","type":"t_bool"},{"astId":8364,"contract":"@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:PausableUpgradeable","label":"__gap","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"}],"types":{"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol":{"ReentrancyGuardUpgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"}],"devdoc":{"details":"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].","kind":"dev","methods":{},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol\":\"ReentrancyGuardUpgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuardUpgradeable is Initializable {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    function __ReentrancyGuard_init() internal onlyInitializing {\\n        __ReentrancyGuard_init_unchained();\\n    }\\n\\n    function __ReentrancyGuard_init_unchained() internal onlyInitializing {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2b3005a0064cfc558bdf64b2bae94b565f4574a536aadd61c13838d4f2157790\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8076,"contract":"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:ReentrancyGuardUpgradeable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":8079,"contract":"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:ReentrancyGuardUpgradeable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":8379,"contract":"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:ReentrancyGuardUpgradeable","label":"_status","offset":0,"slot":"1","type":"t_uint256"},{"astId":8437,"contract":"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:ReentrancyGuardUpgradeable","label":"__gap","offset":0,"slot":"2","type":"t_array(t_uint256)49_storage"}],"types":{"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol":{"ERC20Upgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.","kind":"dev","methods":{"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"decreaseAllowance(address,uint256)":{"details":"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."},"increaseAllowance(address,uint256)":{"details":"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."},"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."}},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50610859806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c391906106a3565b60405180910390f35b6100df6100da36600461070d565b610232565b60405190151581526020016100c3565b6035545b6040519081526020016100c3565b6100df61010f366004610737565b61024c565b604051601281526020016100c3565b6100df61013136600461070d565b610270565b6100f3610144366004610773565b6001600160a01b031660009081526033602052604090205490565b6100b6610292565b6100df61017536600461070d565b6102a1565b6100df61018836600461070d565b610321565b6100f361019b366004610795565b61032f565b6060603680546101af906107c8565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c8565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d9190610802565b61035a565b6060603780546101af906107c8565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260336020526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906106969086815260200190565b60405180910390a36104f2565b600060208083528351808285015260005b818110156106d0578581018301518582016040015282016106b4565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070857600080fd5b919050565b6000806040838503121561072057600080fd5b610729836106f1565b946020939093013593505050565b60008060006060848603121561074c57600080fd5b610755846106f1565b9250610763602085016106f1565b9150604084013590509250925092565b60006020828403121561078557600080fd5b61078e826106f1565b9392505050565b600080604083850312156107a857600080fd5b6107b1836106f1565b91506107bf602084016106f1565b90509250929050565b600181811c908216806107dc57607f821691505b6020821081036107fc57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea26469706673582212205f9c0b53a1fa9653d0d545f776c39decc2cf19691db2484bb79310a48fac270964736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x859 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x15F JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x17A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x114 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x1A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x6A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xDF PUSH2 0xDA CALLDATASIZE PUSH1 0x4 PUSH2 0x70D JUMP JUMPDEST PUSH2 0x232 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x35 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x10F CALLDATASIZE PUSH1 0x4 PUSH2 0x737 JUMP JUMPDEST PUSH2 0x24C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x131 CALLDATASIZE PUSH1 0x4 PUSH2 0x70D JUMP JUMPDEST PUSH2 0x270 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x144 CALLDATASIZE PUSH1 0x4 PUSH2 0x773 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xB6 PUSH2 0x292 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x175 CALLDATASIZE PUSH1 0x4 PUSH2 0x70D JUMP JUMPDEST PUSH2 0x2A1 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x188 CALLDATASIZE PUSH1 0x4 PUSH2 0x70D JUMP JUMPDEST PUSH2 0x321 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x19B CALLDATASIZE PUSH1 0x4 PUSH2 0x795 JUMP JUMPDEST PUSH2 0x32F JUMP JUMPDEST PUSH1 0x60 PUSH1 0x36 DUP1 SLOAD PUSH2 0x1AF SWAP1 PUSH2 0x7C8 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1DB SWAP1 PUSH2 0x7C8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x228 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1FD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x228 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x20B JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x240 DUP2 DUP6 DUP6 PUSH2 0x35A JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x25A DUP6 DUP3 DUP6 PUSH2 0x47E JUMP JUMPDEST PUSH2 0x265 DUP6 DUP6 DUP6 PUSH2 0x4F8 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x240 DUP2 DUP6 DUP6 PUSH2 0x283 DUP4 DUP4 PUSH2 0x32F JUMP JUMPDEST PUSH2 0x28D SWAP2 SWAP1 PUSH2 0x802 JUMP JUMPDEST PUSH2 0x35A JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x1AF SWAP1 PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x0 CALLER DUP2 PUSH2 0x2AF DUP3 DUP7 PUSH2 0x32F JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x314 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x265 DUP3 DUP7 DUP7 DUP5 SUB PUSH2 0x35A JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x240 DUP2 DUP6 DUP6 PUSH2 0x4F8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x3BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x41D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48A DUP5 DUP5 PUSH2 0x32F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x4F2 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x30B JUMP JUMPDEST PUSH2 0x4F2 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x35A JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x55C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x5BE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x636 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE SWAP3 DUP7 AND DUP1 DUP3 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE SWAP2 MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x696 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x4F2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x6D0 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x6B4 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x708 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x720 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x729 DUP4 PUSH2 0x6F1 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x74C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x755 DUP5 PUSH2 0x6F1 JUMP JUMPDEST SWAP3 POP PUSH2 0x763 PUSH1 0x20 DUP6 ADD PUSH2 0x6F1 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x785 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x78E DUP3 PUSH2 0x6F1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7B1 DUP4 PUSH2 0x6F1 JUMP JUMPDEST SWAP2 POP PUSH2 0x7BF PUSH1 0x20 DUP5 ADD PUSH2 0x6F1 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x7DC JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x7FC JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x246 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5F SWAP13 SIGNEXTEND MSTORE8 LOG1 STATICCALL SWAP7 MSTORE8 0xD0 0xD5 GASLIMIT 0xF7 PUSH23 0xC39DECC2CF19691DB2484BB79310A48FAC270964736F6C PUSH4 0x43000811 STOP CALLER ","sourceMap":"1480:12159:32:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_afterTokenTransfer_9044":{"entryPoint":null,"id":9044,"parameterSlots":3,"returnSlots":0},"@_approve_8979":{"entryPoint":858,"id":8979,"parameterSlots":3,"returnSlots":0},"@_beforeTokenTransfer_9033":{"entryPoint":null,"id":9033,"parameterSlots":3,"returnSlots":0},"@_msgSender_9528":{"entryPoint":null,"id":9528,"parameterSlots":0,"returnSlots":1},"@_spendAllowance_9022":{"entryPoint":1150,"id":9022,"parameterSlots":3,"returnSlots":0},"@_transfer_8805":{"entryPoint":1272,"id":8805,"parameterSlots":3,"returnSlots":0},"@allowance_8600":{"entryPoint":815,"id":8600,"parameterSlots":2,"returnSlots":1},"@approve_8625":{"entryPoint":562,"id":8625,"parameterSlots":2,"returnSlots":1},"@balanceOf_8557":{"entryPoint":null,"id":8557,"parameterSlots":1,"returnSlots":1},"@decimals_8533":{"entryPoint":null,"id":8533,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_8728":{"entryPoint":673,"id":8728,"parameterSlots":2,"returnSlots":1},"@increaseAllowance_8687":{"entryPoint":624,"id":8687,"parameterSlots":2,"returnSlots":1},"@name_8513":{"entryPoint":416,"id":8513,"parameterSlots":0,"returnSlots":1},"@symbol_8523":{"entryPoint":658,"id":8523,"parameterSlots":0,"returnSlots":1},"@totalSupply_8543":{"entryPoint":null,"id":8543,"parameterSlots":0,"returnSlots":1},"@transferFrom_8658":{"entryPoint":588,"id":8658,"parameterSlots":3,"returnSlots":1},"@transfer_8582":{"entryPoint":801,"id":8582,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":1777,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":1907,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":1941,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":1847,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":1805,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1699,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":2050,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":1992,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:5754:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:427:181","statements":[{"nodeType":"YulVariableDeclaration","src":"145:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"155:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"149:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"173:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"184:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"166:6:181"},"nodeType":"YulFunctionCall","src":"166:21:181"},"nodeType":"YulExpressionStatement","src":"166:21:181"},{"nodeType":"YulVariableDeclaration","src":"196:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"216:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:181"},"nodeType":"YulFunctionCall","src":"210:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"200:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"243:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"254:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"239:3:181"},"nodeType":"YulFunctionCall","src":"239:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"259:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:181"},"nodeType":"YulFunctionCall","src":"232:34:181"},"nodeType":"YulExpressionStatement","src":"232:34:181"},{"nodeType":"YulVariableDeclaration","src":"275:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"284:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"279:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"344:90:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"373:9:181"},{"name":"i","nodeType":"YulIdentifier","src":"384:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"369:3:181"},"nodeType":"YulFunctionCall","src":"369:17:181"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:181"},"nodeType":"YulFunctionCall","src":"365:26:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"407:6:181"},{"name":"i","nodeType":"YulIdentifier","src":"415:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"403:3:181"},"nodeType":"YulFunctionCall","src":"403:14:181"},{"name":"_1","nodeType":"YulIdentifier","src":"419:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:181"},"nodeType":"YulFunctionCall","src":"399:23:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"393:5:181"},"nodeType":"YulFunctionCall","src":"393:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:181"},"nodeType":"YulFunctionCall","src":"358:66:181"},"nodeType":"YulExpressionStatement","src":"358:66:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"305:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"308:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"302:2:181"},"nodeType":"YulFunctionCall","src":"302:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"316:19:181","statements":[{"nodeType":"YulAssignment","src":"318:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"327:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"330:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:181"},"nodeType":"YulFunctionCall","src":"323:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"318:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"298:3:181","statements":[]},"src":"294:140:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"458:9:181"},{"name":"length","nodeType":"YulIdentifier","src":"469:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"454:3:181"},"nodeType":"YulFunctionCall","src":"454:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"478:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"450:3:181"},"nodeType":"YulFunctionCall","src":"450:31:181"},{"kind":"number","nodeType":"YulLiteral","src":"483:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"443:6:181"},"nodeType":"YulFunctionCall","src":"443:42:181"},"nodeType":"YulExpressionStatement","src":"443:42:181"},{"nodeType":"YulAssignment","src":"494:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"510:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"529:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"537:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"525:3:181"},"nodeType":"YulFunctionCall","src":"525:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"546:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"542:3:181"},"nodeType":"YulFunctionCall","src":"542:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"521:3:181"},"nodeType":"YulFunctionCall","src":"521:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"506:3:181"},"nodeType":"YulFunctionCall","src":"506:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"553:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"502:3:181"},"nodeType":"YulFunctionCall","src":"502:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"494:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"115:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"126:4:181","type":""}],"src":"14:548:181"},{"body":{"nodeType":"YulBlock","src":"616:124:181","statements":[{"nodeType":"YulAssignment","src":"626:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"648:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"635:12:181"},"nodeType":"YulFunctionCall","src":"635:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"626:5:181"}]},{"body":{"nodeType":"YulBlock","src":"718:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"727:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"730:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"720:6:181"},"nodeType":"YulFunctionCall","src":"720:12:181"},"nodeType":"YulExpressionStatement","src":"720:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"677:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"688:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"703:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"708:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"699:3:181"},"nodeType":"YulFunctionCall","src":"699:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"712:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"695:3:181"},"nodeType":"YulFunctionCall","src":"695:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"684:3:181"},"nodeType":"YulFunctionCall","src":"684:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"674:2:181"},"nodeType":"YulFunctionCall","src":"674:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"667:6:181"},"nodeType":"YulFunctionCall","src":"667:50:181"},"nodeType":"YulIf","src":"664:70:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"595:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"606:5:181","type":""}],"src":"567:173:181"},{"body":{"nodeType":"YulBlock","src":"832:167:181","statements":[{"body":{"nodeType":"YulBlock","src":"878:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"887:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"890:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"880:6:181"},"nodeType":"YulFunctionCall","src":"880:12:181"},"nodeType":"YulExpressionStatement","src":"880:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"853:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"862:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"849:3:181"},"nodeType":"YulFunctionCall","src":"849:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"874:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"845:3:181"},"nodeType":"YulFunctionCall","src":"845:32:181"},"nodeType":"YulIf","src":"842:52:181"},{"nodeType":"YulAssignment","src":"903:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"932:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"913:18:181"},"nodeType":"YulFunctionCall","src":"913:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"903:6:181"}]},{"nodeType":"YulAssignment","src":"951:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"978:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"989:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"974:3:181"},"nodeType":"YulFunctionCall","src":"974:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"961:12:181"},"nodeType":"YulFunctionCall","src":"961:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"951:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"790:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"801:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"813:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"821:6:181","type":""}],"src":"745:254:181"},{"body":{"nodeType":"YulBlock","src":"1099:92:181","statements":[{"nodeType":"YulAssignment","src":"1109:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1121:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1132:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1117:3:181"},"nodeType":"YulFunctionCall","src":"1117:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1109:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1151:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1176:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1169:6:181"},"nodeType":"YulFunctionCall","src":"1169:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1162:6:181"},"nodeType":"YulFunctionCall","src":"1162:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1144:6:181"},"nodeType":"YulFunctionCall","src":"1144:41:181"},"nodeType":"YulExpressionStatement","src":"1144:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1068:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1079:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1090:4:181","type":""}],"src":"1004:187:181"},{"body":{"nodeType":"YulBlock","src":"1297:76:181","statements":[{"nodeType":"YulAssignment","src":"1307:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1319:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1330:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1315:3:181"},"nodeType":"YulFunctionCall","src":"1315:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1307:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1349:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"1360:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1342:6:181"},"nodeType":"YulFunctionCall","src":"1342:25:181"},"nodeType":"YulExpressionStatement","src":"1342:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1266:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1277:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1288:4:181","type":""}],"src":"1196:177:181"},{"body":{"nodeType":"YulBlock","src":"1482:224:181","statements":[{"body":{"nodeType":"YulBlock","src":"1528:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1537:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1540:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1530:6:181"},"nodeType":"YulFunctionCall","src":"1530:12:181"},"nodeType":"YulExpressionStatement","src":"1530:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1503:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1512:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1499:3:181"},"nodeType":"YulFunctionCall","src":"1499:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1524:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1495:3:181"},"nodeType":"YulFunctionCall","src":"1495:32:181"},"nodeType":"YulIf","src":"1492:52:181"},{"nodeType":"YulAssignment","src":"1553:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1582:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1563:18:181"},"nodeType":"YulFunctionCall","src":"1563:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1553:6:181"}]},{"nodeType":"YulAssignment","src":"1601:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1634:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1645:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1630:3:181"},"nodeType":"YulFunctionCall","src":"1630:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1611:18:181"},"nodeType":"YulFunctionCall","src":"1611:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1601:6:181"}]},{"nodeType":"YulAssignment","src":"1658:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1685:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1696:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1681:3:181"},"nodeType":"YulFunctionCall","src":"1681:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1668:12:181"},"nodeType":"YulFunctionCall","src":"1668:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1658:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1432:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1443:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1455:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1463:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1471:6:181","type":""}],"src":"1378:328:181"},{"body":{"nodeType":"YulBlock","src":"1808:87:181","statements":[{"nodeType":"YulAssignment","src":"1818:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1830:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1841:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1826:3:181"},"nodeType":"YulFunctionCall","src":"1826:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1818:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1860:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1875:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1883:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1871:3:181"},"nodeType":"YulFunctionCall","src":"1871:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1853:6:181"},"nodeType":"YulFunctionCall","src":"1853:36:181"},"nodeType":"YulExpressionStatement","src":"1853:36:181"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1777:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1788:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1799:4:181","type":""}],"src":"1711:184:181"},{"body":{"nodeType":"YulBlock","src":"1970:116:181","statements":[{"body":{"nodeType":"YulBlock","src":"2016:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2025:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2028:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2018:6:181"},"nodeType":"YulFunctionCall","src":"2018:12:181"},"nodeType":"YulExpressionStatement","src":"2018:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1991:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2000:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1987:3:181"},"nodeType":"YulFunctionCall","src":"1987:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2012:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1983:3:181"},"nodeType":"YulFunctionCall","src":"1983:32:181"},"nodeType":"YulIf","src":"1980:52:181"},{"nodeType":"YulAssignment","src":"2041:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2070:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2051:18:181"},"nodeType":"YulFunctionCall","src":"2051:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2041:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1936:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1947:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1959:6:181","type":""}],"src":"1900:186:181"},{"body":{"nodeType":"YulBlock","src":"2178:173:181","statements":[{"body":{"nodeType":"YulBlock","src":"2224:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2233:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2236:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2226:6:181"},"nodeType":"YulFunctionCall","src":"2226:12:181"},"nodeType":"YulExpressionStatement","src":"2226:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2199:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2208:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2195:3:181"},"nodeType":"YulFunctionCall","src":"2195:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2220:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2191:3:181"},"nodeType":"YulFunctionCall","src":"2191:32:181"},"nodeType":"YulIf","src":"2188:52:181"},{"nodeType":"YulAssignment","src":"2249:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2278:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2259:18:181"},"nodeType":"YulFunctionCall","src":"2259:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2249:6:181"}]},{"nodeType":"YulAssignment","src":"2297:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2330:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2341:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2326:3:181"},"nodeType":"YulFunctionCall","src":"2326:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2307:18:181"},"nodeType":"YulFunctionCall","src":"2307:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2297:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2136:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2147:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2159:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2167:6:181","type":""}],"src":"2091:260:181"},{"body":{"nodeType":"YulBlock","src":"2411:325:181","statements":[{"nodeType":"YulAssignment","src":"2421:22:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2435:1:181","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"2438:4:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2431:3:181"},"nodeType":"YulFunctionCall","src":"2431:12:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2421:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2452:38:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"2482:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"2488:1:181","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2478:3:181"},"nodeType":"YulFunctionCall","src":"2478:12:181"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"2456:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2529:31:181","statements":[{"nodeType":"YulAssignment","src":"2531:27:181","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2545:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2553:4:181","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2541:3:181"},"nodeType":"YulFunctionCall","src":"2541:17:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2531:6:181"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"2509:18:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2502:6:181"},"nodeType":"YulFunctionCall","src":"2502:26:181"},"nodeType":"YulIf","src":"2499:61:181"},{"body":{"nodeType":"YulBlock","src":"2619:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2640:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2647:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2652:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2643:3:181"},"nodeType":"YulFunctionCall","src":"2643:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2633:6:181"},"nodeType":"YulFunctionCall","src":"2633:31:181"},"nodeType":"YulExpressionStatement","src":"2633:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2684:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2687:4:181","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2677:6:181"},"nodeType":"YulFunctionCall","src":"2677:15:181"},"nodeType":"YulExpressionStatement","src":"2677:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2712:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2715:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2705:6:181"},"nodeType":"YulFunctionCall","src":"2705:15:181"},"nodeType":"YulExpressionStatement","src":"2705:15:181"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"2575:18:181"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2598:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2606:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2595:2:181"},"nodeType":"YulFunctionCall","src":"2595:14:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2572:2:181"},"nodeType":"YulFunctionCall","src":"2572:38:181"},"nodeType":"YulIf","src":"2569:161:181"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"2391:4:181","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"2400:6:181","type":""}],"src":"2356:380:181"},{"body":{"nodeType":"YulBlock","src":"2789:174:181","statements":[{"nodeType":"YulAssignment","src":"2799:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2810:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"2813:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2806:3:181"},"nodeType":"YulFunctionCall","src":"2806:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"2799:3:181"}]},{"body":{"nodeType":"YulBlock","src":"2846:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2867:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2874:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2879:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2870:3:181"},"nodeType":"YulFunctionCall","src":"2870:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2860:6:181"},"nodeType":"YulFunctionCall","src":"2860:31:181"},"nodeType":"YulExpressionStatement","src":"2860:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2911:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2914:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2904:6:181"},"nodeType":"YulFunctionCall","src":"2904:15:181"},"nodeType":"YulExpressionStatement","src":"2904:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2939:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2942:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2932:6:181"},"nodeType":"YulFunctionCall","src":"2932:15:181"},"nodeType":"YulExpressionStatement","src":"2932:15:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2830:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"2833:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2827:2:181"},"nodeType":"YulFunctionCall","src":"2827:10:181"},"nodeType":"YulIf","src":"2824:133:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"2772:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"2775:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"2781:3:181","type":""}],"src":"2741:222:181"},{"body":{"nodeType":"YulBlock","src":"3142:227:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3159:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3170:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3152:6:181"},"nodeType":"YulFunctionCall","src":"3152:21:181"},"nodeType":"YulExpressionStatement","src":"3152:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3193:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3204:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3189:3:181"},"nodeType":"YulFunctionCall","src":"3189:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3209:2:181","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3182:6:181"},"nodeType":"YulFunctionCall","src":"3182:30:181"},"nodeType":"YulExpressionStatement","src":"3182:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3232:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3243:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3228:3:181"},"nodeType":"YulFunctionCall","src":"3228:18:181"},{"hexValue":"45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77","kind":"string","nodeType":"YulLiteral","src":"3248:34:181","type":"","value":"ERC20: decreased allowance below"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3221:6:181"},"nodeType":"YulFunctionCall","src":"3221:62:181"},"nodeType":"YulExpressionStatement","src":"3221:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3303:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3314:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3299:3:181"},"nodeType":"YulFunctionCall","src":"3299:18:181"},{"hexValue":"207a65726f","kind":"string","nodeType":"YulLiteral","src":"3319:7:181","type":"","value":" zero"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3292:6:181"},"nodeType":"YulFunctionCall","src":"3292:35:181"},"nodeType":"YulExpressionStatement","src":"3292:35:181"},{"nodeType":"YulAssignment","src":"3336:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3348:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3359:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3344:3:181"},"nodeType":"YulFunctionCall","src":"3344:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3336:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3119:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3133:4:181","type":""}],"src":"2968:401:181"},{"body":{"nodeType":"YulBlock","src":"3548:226:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3565:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3576:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3558:6:181"},"nodeType":"YulFunctionCall","src":"3558:21:181"},"nodeType":"YulExpressionStatement","src":"3558:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3599:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3610:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3595:3:181"},"nodeType":"YulFunctionCall","src":"3595:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3615:2:181","type":"","value":"36"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3588:6:181"},"nodeType":"YulFunctionCall","src":"3588:30:181"},"nodeType":"YulExpressionStatement","src":"3588:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3638:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3649:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3634:3:181"},"nodeType":"YulFunctionCall","src":"3634:18:181"},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f20616464","kind":"string","nodeType":"YulLiteral","src":"3654:34:181","type":"","value":"ERC20: approve from the zero add"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3627:6:181"},"nodeType":"YulFunctionCall","src":"3627:62:181"},"nodeType":"YulExpressionStatement","src":"3627:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3709:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3720:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3705:3:181"},"nodeType":"YulFunctionCall","src":"3705:18:181"},{"hexValue":"72657373","kind":"string","nodeType":"YulLiteral","src":"3725:6:181","type":"","value":"ress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3698:6:181"},"nodeType":"YulFunctionCall","src":"3698:34:181"},"nodeType":"YulExpressionStatement","src":"3698:34:181"},{"nodeType":"YulAssignment","src":"3741:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3753:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3764:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3749:3:181"},"nodeType":"YulFunctionCall","src":"3749:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3741:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3525:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3539:4:181","type":""}],"src":"3374:400:181"},{"body":{"nodeType":"YulBlock","src":"3953:224:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3970:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3981:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3963:6:181"},"nodeType":"YulFunctionCall","src":"3963:21:181"},"nodeType":"YulExpressionStatement","src":"3963:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4004:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4015:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4000:3:181"},"nodeType":"YulFunctionCall","src":"4000:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4020:2:181","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3993:6:181"},"nodeType":"YulFunctionCall","src":"3993:30:181"},"nodeType":"YulExpressionStatement","src":"3993:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4043:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4054:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4039:3:181"},"nodeType":"YulFunctionCall","src":"4039:18:181"},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f206164647265","kind":"string","nodeType":"YulLiteral","src":"4059:34:181","type":"","value":"ERC20: approve to the zero addre"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4032:6:181"},"nodeType":"YulFunctionCall","src":"4032:62:181"},"nodeType":"YulExpressionStatement","src":"4032:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4114:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4125:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4110:3:181"},"nodeType":"YulFunctionCall","src":"4110:18:181"},{"hexValue":"7373","kind":"string","nodeType":"YulLiteral","src":"4130:4:181","type":"","value":"ss"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4103:6:181"},"nodeType":"YulFunctionCall","src":"4103:32:181"},"nodeType":"YulExpressionStatement","src":"4103:32:181"},{"nodeType":"YulAssignment","src":"4144:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4156:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4167:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4152:3:181"},"nodeType":"YulFunctionCall","src":"4152:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4144:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3930:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3944:4:181","type":""}],"src":"3779:398:181"},{"body":{"nodeType":"YulBlock","src":"4356:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4373:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4384:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4366:6:181"},"nodeType":"YulFunctionCall","src":"4366:21:181"},"nodeType":"YulExpressionStatement","src":"4366:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4407:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4418:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4403:3:181"},"nodeType":"YulFunctionCall","src":"4403:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4423:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4396:6:181"},"nodeType":"YulFunctionCall","src":"4396:30:181"},"nodeType":"YulExpressionStatement","src":"4396:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4446:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4457:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4442:3:181"},"nodeType":"YulFunctionCall","src":"4442:18:181"},{"hexValue":"45524332303a20696e73756666696369656e7420616c6c6f77616e6365","kind":"string","nodeType":"YulLiteral","src":"4462:31:181","type":"","value":"ERC20: insufficient allowance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4435:6:181"},"nodeType":"YulFunctionCall","src":"4435:59:181"},"nodeType":"YulExpressionStatement","src":"4435:59:181"},{"nodeType":"YulAssignment","src":"4503:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4515:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4526:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4511:3:181"},"nodeType":"YulFunctionCall","src":"4511:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4503:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4333:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4347:4:181","type":""}],"src":"4182:353:181"},{"body":{"nodeType":"YulBlock","src":"4714:227:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4731:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4742:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4724:6:181"},"nodeType":"YulFunctionCall","src":"4724:21:181"},"nodeType":"YulExpressionStatement","src":"4724:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4765:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4776:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4761:3:181"},"nodeType":"YulFunctionCall","src":"4761:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4781:2:181","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4754:6:181"},"nodeType":"YulFunctionCall","src":"4754:30:181"},"nodeType":"YulExpressionStatement","src":"4754:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4804:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4815:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4800:3:181"},"nodeType":"YulFunctionCall","src":"4800:18:181"},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f206164","kind":"string","nodeType":"YulLiteral","src":"4820:34:181","type":"","value":"ERC20: transfer from the zero ad"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4793:6:181"},"nodeType":"YulFunctionCall","src":"4793:62:181"},"nodeType":"YulExpressionStatement","src":"4793:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4875:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4886:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4871:3:181"},"nodeType":"YulFunctionCall","src":"4871:18:181"},{"hexValue":"6472657373","kind":"string","nodeType":"YulLiteral","src":"4891:7:181","type":"","value":"dress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4864:6:181"},"nodeType":"YulFunctionCall","src":"4864:35:181"},"nodeType":"YulExpressionStatement","src":"4864:35:181"},{"nodeType":"YulAssignment","src":"4908:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4920:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4931:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4916:3:181"},"nodeType":"YulFunctionCall","src":"4916:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4908:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4691:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4705:4:181","type":""}],"src":"4540:401:181"},{"body":{"nodeType":"YulBlock","src":"5120:225:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5137:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5148:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5130:6:181"},"nodeType":"YulFunctionCall","src":"5130:21:181"},"nodeType":"YulExpressionStatement","src":"5130:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5171:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5182:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5167:3:181"},"nodeType":"YulFunctionCall","src":"5167:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5187:2:181","type":"","value":"35"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5160:6:181"},"nodeType":"YulFunctionCall","src":"5160:30:181"},"nodeType":"YulExpressionStatement","src":"5160:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5210:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5221:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5206:3:181"},"nodeType":"YulFunctionCall","src":"5206:18:181"},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472","kind":"string","nodeType":"YulLiteral","src":"5226:34:181","type":"","value":"ERC20: transfer to the zero addr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5199:6:181"},"nodeType":"YulFunctionCall","src":"5199:62:181"},"nodeType":"YulExpressionStatement","src":"5199:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5281:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5292:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5277:3:181"},"nodeType":"YulFunctionCall","src":"5277:18:181"},{"hexValue":"657373","kind":"string","nodeType":"YulLiteral","src":"5297:5:181","type":"","value":"ess"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5270:6:181"},"nodeType":"YulFunctionCall","src":"5270:33:181"},"nodeType":"YulExpressionStatement","src":"5270:33:181"},{"nodeType":"YulAssignment","src":"5312:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5324:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5335:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5320:3:181"},"nodeType":"YulFunctionCall","src":"5320:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5312:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5097:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5111:4:181","type":""}],"src":"4946:399:181"},{"body":{"nodeType":"YulBlock","src":"5524:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5541:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5552:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5534:6:181"},"nodeType":"YulFunctionCall","src":"5534:21:181"},"nodeType":"YulExpressionStatement","src":"5534:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5575:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5586:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5571:3:181"},"nodeType":"YulFunctionCall","src":"5571:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5591:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5564:6:181"},"nodeType":"YulFunctionCall","src":"5564:30:181"},"nodeType":"YulExpressionStatement","src":"5564:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5614:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5625:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5610:3:181"},"nodeType":"YulFunctionCall","src":"5610:18:181"},{"hexValue":"45524332303a207472616e7366657220616d6f756e7420657863656564732062","kind":"string","nodeType":"YulLiteral","src":"5630:34:181","type":"","value":"ERC20: transfer amount exceeds b"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5603:6:181"},"nodeType":"YulFunctionCall","src":"5603:62:181"},"nodeType":"YulExpressionStatement","src":"5603:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5685:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5696:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5681:3:181"},"nodeType":"YulFunctionCall","src":"5681:18:181"},{"hexValue":"616c616e6365","kind":"string","nodeType":"YulLiteral","src":"5701:8:181","type":"","value":"alance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5674:6:181"},"nodeType":"YulFunctionCall","src":"5674:36:181"},"nodeType":"YulExpressionStatement","src":"5674:36:181"},{"nodeType":"YulAssignment","src":"5719:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5731:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5742:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5727:3:181"},"nodeType":"YulFunctionCall","src":"5727:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5719:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5501:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5515:4:181","type":""}],"src":"5350:402:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        mstore(add(add(headStart, length), 64), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: decreased allowance below\")\n        mstore(add(headStart, 96), \" zero\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"ERC20: approve from the zero add\")\n        mstore(add(headStart, 96), \"ress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: approve to the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"ERC20: insufficient allowance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: transfer from the zero ad\")\n        mstore(add(headStart, 96), \"dress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"ERC20: transfer to the zero addr\")\n        mstore(add(headStart, 96), \"ess\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"ERC20: transfer amount exceeds b\")\n        mstore(add(headStart, 96), \"alance\")\n        tail := add(headStart, 128)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c391906106a3565b60405180910390f35b6100df6100da36600461070d565b610232565b60405190151581526020016100c3565b6035545b6040519081526020016100c3565b6100df61010f366004610737565b61024c565b604051601281526020016100c3565b6100df61013136600461070d565b610270565b6100f3610144366004610773565b6001600160a01b031660009081526033602052604090205490565b6100b6610292565b6100df61017536600461070d565b6102a1565b6100df61018836600461070d565b610321565b6100f361019b366004610795565b61032f565b6060603680546101af906107c8565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c8565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d9190610802565b61035a565b6060603780546101af906107c8565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260336020526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906106969086815260200190565b60405180910390a36104f2565b600060208083528351808285015260005b818110156106d0578581018301518582016040015282016106b4565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070857600080fd5b919050565b6000806040838503121561072057600080fd5b610729836106f1565b946020939093013593505050565b60008060006060848603121561074c57600080fd5b610755846106f1565b9250610763602085016106f1565b9150604084013590509250925092565b60006020828403121561078557600080fd5b61078e826106f1565b9392505050565b600080604083850312156107a857600080fd5b6107b1836106f1565b91506107bf602084016106f1565b90509250929050565b600181811c908216806107dc57607f821691505b6020821081036107fc57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea26469706673582212205f9c0b53a1fa9653d0d545f776c39decc2cf19691db2484bb79310a48fac270964736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x15F JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x17A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x114 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x1A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x6A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xDF PUSH2 0xDA CALLDATASIZE PUSH1 0x4 PUSH2 0x70D JUMP JUMPDEST PUSH2 0x232 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x35 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x10F CALLDATASIZE PUSH1 0x4 PUSH2 0x737 JUMP JUMPDEST PUSH2 0x24C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x131 CALLDATASIZE PUSH1 0x4 PUSH2 0x70D JUMP JUMPDEST PUSH2 0x270 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x144 CALLDATASIZE PUSH1 0x4 PUSH2 0x773 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xB6 PUSH2 0x292 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x175 CALLDATASIZE PUSH1 0x4 PUSH2 0x70D JUMP JUMPDEST PUSH2 0x2A1 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x188 CALLDATASIZE PUSH1 0x4 PUSH2 0x70D JUMP JUMPDEST PUSH2 0x321 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x19B CALLDATASIZE PUSH1 0x4 PUSH2 0x795 JUMP JUMPDEST PUSH2 0x32F JUMP JUMPDEST PUSH1 0x60 PUSH1 0x36 DUP1 SLOAD PUSH2 0x1AF SWAP1 PUSH2 0x7C8 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1DB SWAP1 PUSH2 0x7C8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x228 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1FD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x228 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x20B JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x240 DUP2 DUP6 DUP6 PUSH2 0x35A JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x25A DUP6 DUP3 DUP6 PUSH2 0x47E JUMP JUMPDEST PUSH2 0x265 DUP6 DUP6 DUP6 PUSH2 0x4F8 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x240 DUP2 DUP6 DUP6 PUSH2 0x283 DUP4 DUP4 PUSH2 0x32F JUMP JUMPDEST PUSH2 0x28D SWAP2 SWAP1 PUSH2 0x802 JUMP JUMPDEST PUSH2 0x35A JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x1AF SWAP1 PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x0 CALLER DUP2 PUSH2 0x2AF DUP3 DUP7 PUSH2 0x32F JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x314 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x265 DUP3 DUP7 DUP7 DUP5 SUB PUSH2 0x35A JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x240 DUP2 DUP6 DUP6 PUSH2 0x4F8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x3BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x41D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48A DUP5 DUP5 PUSH2 0x32F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x4F2 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x30B JUMP JUMPDEST PUSH2 0x4F2 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x35A JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x55C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x5BE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x636 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE SWAP3 DUP7 AND DUP1 DUP3 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE SWAP2 MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x696 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x4F2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x6D0 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x6B4 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x708 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x720 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x729 DUP4 PUSH2 0x6F1 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x74C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x755 DUP5 PUSH2 0x6F1 JUMP JUMPDEST SWAP3 POP PUSH2 0x763 PUSH1 0x20 DUP6 ADD PUSH2 0x6F1 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x785 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x78E DUP3 PUSH2 0x6F1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7B1 DUP4 PUSH2 0x6F1 JUMP JUMPDEST SWAP2 POP PUSH2 0x7BF PUSH1 0x20 DUP5 ADD PUSH2 0x6F1 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x7DC JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x7FC JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x246 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5F SWAP13 SIGNEXTEND MSTORE8 LOG1 STATICCALL SWAP7 MSTORE8 0xD0 0xD5 GASLIMIT 0xF7 PUSH23 0xC39DECC2CF19691DB2484BB79310A48FAC270964736F6C PUSH4 0x43000811 STOP CALLER ","sourceMap":"1480:12159:32:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2491:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4768:197;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:181;;1162:22;1144:41;;1132:2;1117:18;4768:197:32;1004:187:181;3579:106:32;3666:12;;3579:106;;;1342:25:181;;;1330:2;1315:18;3579:106:32;1196:177:181;5527:286:32;;;;;;:::i;:::-;;:::i;3428:91::-;;;3510:2;1853:36:181;;1841:2;1826:18;3428:91:32;1711:184:181;6208:234:32;;;;;;:::i;:::-;;:::i;3743:125::-;;;;;;:::i;:::-;-1:-1:-1;;;;;3843:18:32;3817:7;3843:18;;;:9;:18;;;;;;;3743:125;2702:102;;;:::i;6929:427::-;;;;;;:::i;:::-;;:::i;4064:189::-;;;;;;:::i;:::-;;:::i;4311:149::-;;;;;;:::i;:::-;;:::i;2491:98::-;2545:13;2577:5;2570:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2491:98;:::o;4768:197::-;4851:4;929:10:37;4905:32:32;929:10:37;4921:7:32;4930:6;4905:8;:32::i;:::-;4954:4;4947:11;;;4768:197;;;;;:::o;5527:286::-;5654:4;929:10:37;5710:38:32;5726:4;929:10:37;5741:6:32;5710:15;:38::i;:::-;5758:27;5768:4;5774:2;5778:6;5758:9;:27::i;:::-;-1:-1:-1;5802:4:32;;5527:286;-1:-1:-1;;;;5527:286:32:o;6208:234::-;6296:4;929:10:37;6350:64:32;929:10:37;6366:7:32;6403:10;6375:25;929:10:37;6366:7:32;6375:9;:25::i;:::-;:38;;;;:::i;:::-;6350:8;:64::i;2702:102::-;2758:13;2790:7;2783:14;;;;;:::i;6929:427::-;7022:4;929:10:37;7022:4:32;7103:25;929:10:37;7120:7:32;7103:9;:25::i;:::-;7076:52;;7166:15;7146:16;:35;;7138:85;;;;-1:-1:-1;;;7138:85:32;;3170:2:181;7138:85:32;;;3152:21:181;3209:2;3189:18;;;3182:30;3248:34;3228:18;;;3221:62;-1:-1:-1;;;3299:18:181;;;3292:35;3344:19;;7138:85:32;;;;;;;;;7257:60;7266:5;7273:7;7301:15;7282:16;:34;7257:8;:60::i;4064:189::-;4143:4;929:10:37;4197:28:32;929:10:37;4214:2:32;4218:6;4197:9;:28::i;4311:149::-;-1:-1:-1;;;;;4426:18:32;;;4400:7;4426:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4311:149::o;10841:370::-;-1:-1:-1;;;;;10972:19:32;;10964:68;;;;-1:-1:-1;;;10964:68:32;;3576:2:181;10964:68:32;;;3558:21:181;3615:2;3595:18;;;3588:30;3654:34;3634:18;;;3627:62;-1:-1:-1;;;3705:18:181;;;3698:34;3749:19;;10964:68:32;3374:400:181;10964:68:32;-1:-1:-1;;;;;11050:21:32;;11042:68;;;;-1:-1:-1;;;11042:68:32;;3981:2:181;11042:68:32;;;3963:21:181;4020:2;4000:18;;;3993:30;4059:34;4039:18;;;4032:62;-1:-1:-1;;;4110:18:181;;;4103:32;4152:19;;11042:68:32;3779:398:181;11042:68:32;-1:-1:-1;;;;;11121:18:32;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11172:32;;1342:25:181;;;11172:32:32;;1315:18:181;11172:32:32;;;;;;;10841:370;;;:::o;11492:441::-;11622:24;11649:25;11659:5;11666:7;11649:9;:25::i;:::-;11622:52;;-1:-1:-1;;11688:16:32;:37;11684:243;;11769:6;11749:16;:26;;11741:68;;;;-1:-1:-1;;;11741:68:32;;4384:2:181;11741:68:32;;;4366:21:181;4423:2;4403:18;;;4396:30;4462:31;4442:18;;;4435:59;4511:18;;11741:68:32;4182:353:181;11741:68:32;11851:51;11860:5;11867:7;11895:6;11876:16;:25;11851:8;:51::i;:::-;11612:321;11492:441;;;:::o;7810:818::-;-1:-1:-1;;;;;7936:18:32;;7928:68;;;;-1:-1:-1;;;7928:68:32;;4742:2:181;7928:68:32;;;4724:21:181;4781:2;4761:18;;;4754:30;4820:34;4800:18;;;4793:62;-1:-1:-1;;;4871:18:181;;;4864:35;4916:19;;7928:68:32;4540:401:181;7928:68:32;-1:-1:-1;;;;;8014:16:32;;8006:64;;;;-1:-1:-1;;;8006:64:32;;5148:2:181;8006:64:32;;;5130:21:181;5187:2;5167:18;;;5160:30;5226:34;5206:18;;;5199:62;-1:-1:-1;;;5277:18:181;;;5270:33;5320:19;;8006:64:32;4946:399:181;8006:64:32;-1:-1:-1;;;;;8152:15:32;;8130:19;8152:15;;;:9;:15;;;;;;8185:21;;;;8177:72;;;;-1:-1:-1;;;8177:72:32;;5552:2:181;8177:72:32;;;5534:21:181;5591:2;5571:18;;;5564:30;5630:34;5610:18;;;5603:62;-1:-1:-1;;;5681:18:181;;;5674:36;5727:19;;8177:72:32;5350:402:181;8177:72:32;-1:-1:-1;;;;;8283:15:32;;;;;;;:9;:15;;;;;;8301:20;;;8283:38;;8498:13;;;;;;;;;;:23;;;;;;8547:26;;;;;;8315:6;1342:25:181;;1330:2;1315:18;;1196:177;8547:26:32;;;;;;;;8584:37;12517:121;14:548:181;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:181;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:181:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;1900:186::-;1959:6;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;2051:29;2070:9;2051:29;:::i;:::-;2041:39;1900:186;-1:-1:-1;;;1900:186:181:o;2091:260::-;2159:6;2167;2220:2;2208:9;2199:7;2195:23;2191:32;2188:52;;;2236:1;2233;2226:12;2188:52;2259:29;2278:9;2259:29;:::i;:::-;2249:39;;2307:38;2341:2;2330:9;2326:18;2307:38;:::i;:::-;2297:48;;2091:260;;;;;:::o;2356:380::-;2435:1;2431:12;;;;2478;;;2499:61;;2553:4;2545:6;2541:17;2531:27;;2499:61;2606:2;2598:6;2595:14;2575:18;2572:38;2569:161;;2652:10;2647:3;2643:20;2640:1;2633:31;2687:4;2684:1;2677:15;2715:4;2712:1;2705:15;2569:161;;2356:380;;;:::o;2741:222::-;2806:9;;;2827:10;;;2824:133;;;2879:10;2874:3;2870:20;2867:1;2860:31;2914:4;2911:1;2904:15;2942:4;2939:1;2932:15"},"gasEstimates":{"creation":{"codeDepositCost":"427400","executionCost":"461","totalCost":"427861"},"external":{"allowance(address,address)":"infinite","approve(address,uint256)":"24628","balanceOf(address)":"2559","decimals()":"266","decreaseAllowance(address,uint256)":"27016","increaseAllowance(address,uint256)":"infinite","name()":"infinite","symbol()":"infinite","totalSupply()":"2326","transfer(address,uint256)":"51147","transferFrom(address,address,uint256)":"infinite"},"internal":{"__ERC20_init(string memory,string memory)":"infinite","__ERC20_init_unchained(string memory,string memory)":"infinite","_afterTokenTransfer(address,address,uint256)":"infinite","_approve(address,address,uint256)":"infinite","_beforeTokenTransfer(address,address,uint256)":"infinite","_burn(address,uint256)":"infinite","_mint(address,uint256)":"infinite","_spendAllowance(address,address,uint256)":"infinite","_transfer(address,address,uint256)":"infinite"}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","increaseAllowance(address,uint256)":"39509351","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"}},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":\"ERC20Upgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8076,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":8079,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":9542,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":8457,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable","label":"_balances","offset":0,"slot":"51","type":"t_mapping(t_address,t_uint256)"},{"astId":8463,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable","label":"_allowances","offset":0,"slot":"52","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":8465,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable","label":"_totalSupply","offset":0,"slot":"53","type":"t_uint256"},{"astId":8467,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable","label":"_name","offset":0,"slot":"54","type":"t_string_storage"},{"astId":8469,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable","label":"_symbol","offset":0,"slot":"55","type":"t_string_storage"},{"astId":9049,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:ERC20Upgradeable","label":"__gap","offset":0,"slot":"56","type":"t_array(t_uint256)45_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)45_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[45]","numberOfBytes":"1440"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol":{"IERC20Upgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Interface of the ERC20 standard as defined in the EIP.","events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"kind":"dev","methods":{"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."},"approve(address,uint256)":{"details":"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":\"IERC20Upgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol":{"ERC20BurnableUpgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Extension of {ERC20} that allows token holders to destroy both their own tokens and those that they have an allowance for, in a way that can be recognized off-chain (via event analysis).","kind":"dev","methods":{"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"burn(uint256)":{"details":"Destroys `amount` tokens from the caller. See {ERC20-_burn}."},"burnFrom(address,uint256)":{"details":"Destroys `amount` tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `amount`."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"decreaseAllowance(address,uint256)":{"details":"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."},"increaseAllowance(address,uint256)":{"details":"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."},"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."}},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(uint256)":"42966c68","burnFrom(address,uint256)":"79cc6790","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","increaseAllowance(address,uint256)":"39509351","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Extension of {ERC20} that allows token holders to destroy both their own tokens and those that they have an allowance for, in a way that can be recognized off-chain (via event analysis).\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burn(uint256)\":{\"details\":\"Destroys `amount` tokens from the caller. See {ERC20-_burn}.\"},\"burnFrom(address,uint256)\":{\"details\":\"Destroys `amount` tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `amount`.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"}},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":\"ERC20BurnableUpgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8076,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol:ERC20BurnableUpgradeable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":8079,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol:ERC20BurnableUpgradeable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":9542,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol:ERC20BurnableUpgradeable","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":8457,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol:ERC20BurnableUpgradeable","label":"_balances","offset":0,"slot":"51","type":"t_mapping(t_address,t_uint256)"},{"astId":8463,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol:ERC20BurnableUpgradeable","label":"_allowances","offset":0,"slot":"52","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":8465,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol:ERC20BurnableUpgradeable","label":"_totalSupply","offset":0,"slot":"53","type":"t_uint256"},{"astId":8467,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol:ERC20BurnableUpgradeable","label":"_name","offset":0,"slot":"54","type":"t_string_storage"},{"astId":8469,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol:ERC20BurnableUpgradeable","label":"_symbol","offset":0,"slot":"55","type":"t_string_storage"},{"astId":9049,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol:ERC20BurnableUpgradeable","label":"__gap","offset":0,"slot":"56","type":"t_array(t_uint256)45_storage"},{"astId":9191,"contract":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol:ERC20BurnableUpgradeable","label":"__gap","offset":0,"slot":"101","type":"t_array(t_uint256)50_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)45_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[45]","numberOfBytes":"1440"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol":{"IERC20MetadataUpgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Interface for the optional metadata functions from the ERC20 standard. _Available since v4.1._","kind":"dev","methods":{"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."},"approve(address,uint256)":{"details":"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"decimals()":{"details":"Returns the decimals places of the token."},"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token."},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC20 standard. _Available since v4.1._\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":\"IERC20MetadataUpgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol":{"AddressUpgradeable":{"abi":[],"devdoc":{"details":"Collection of functions related to the address type","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220eae6293f20f60487b38e04fe85a3ddce718a1e806544baafb89b2fc191a6381164736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEA 0xE6 0x29 EXTCODEHASH KECCAK256 0xF6 DIV DUP8 0xB3 DUP15 DIV INVALID DUP6 LOG3 0xDD 0xCE PUSH18 0x8A1E806544BAAFB89B2FC191A6381164736F PUSH13 0x63430008110033000000000000 ","sourceMap":"194:8087:36:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;194:8087:36;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220eae6293f20f60487b38e04fe85a3ddce718a1e806544baafb89b2fc191a6381164736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEA 0xE6 0x29 EXTCODEHASH KECCAK256 0xF6 DIV DUP8 0xB3 DUP15 DIV INVALID DUP6 LOG3 0xDD 0xCE PUSH18 0x8A1E806544BAAFB89B2FC191A6381164736F PUSH13 0x63430008110033000000000000 ","sourceMap":"194:8087:36:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_revert(bytes memory,string memory)":"infinite","functionCall(address,bytes memory)":"infinite","functionCall(address,bytes memory,string memory)":"infinite","functionCallWithValue(address,bytes memory,uint256)":"infinite","functionCallWithValue(address,bytes memory,uint256,string memory)":"infinite","functionStaticCall(address,bytes memory)":"infinite","functionStaticCall(address,bytes memory,string memory)":"infinite","isContract(address)":"infinite","sendValue(address payable,uint256)":"infinite","verifyCallResult(bool,bytes memory,string memory)":"infinite","verifyCallResultFromTarget(address,bool,bytes memory,string memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":\"AddressUpgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol":{"ContextUpgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"}],"devdoc":{"details":"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.","kind":"dev","methods":{},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":\"ContextUpgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8076,"contract":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":8079,"contract":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":9542,"contract":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/access/Ownable.sol":{"Ownable":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.","kind":"dev","methods":{"constructor":{"details":"Initializes the contract setting the deployer as the initial owner."},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\",\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":9551,"contract":"@openzeppelin/contracts/access/Ownable.sol:Ownable","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL1.sol":{"LibArbitrumL1":{"abi":[],"devdoc":{"details":"Primitives for cross-chain aware contracts for https://arbitrum.io/[Arbitrum]. This version should only be used on L1 to process cross-chain messages originating from L2. For the other side, use {LibArbitrumL2}.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201b8c9f23ea30459c93ae8af4e9be0719a184e0cb9a6359549241c08a9bbf06c464736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHL DUP13 SWAP16 0x23 0xEA ADDRESS GASLIMIT SWAP13 SWAP4 0xAE DUP11 DELEGATECALL 0xE9 0xBE SMOD NOT LOG1 DUP5 0xE0 0xCB SWAP11 PUSH4 0x59549241 0xC0 DUP11 SWAP12 0xBF MOD 0xC4 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"571:1004:39:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;571:1004:39;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201b8c9f23ea30459c93ae8af4e9be0719a184e0cb9a6359549241c08a9bbf06c464736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHL DUP13 SWAP16 0x23 0xEA ADDRESS GASLIMIT SWAP13 SWAP4 0xAE DUP11 DELEGATECALL 0xE9 0xBE SMOD NOT LOG1 DUP5 0xE0 0xCB SWAP11 PUSH4 0x59549241 0xC0 DUP11 SWAP12 0xBF MOD 0xC4 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"571:1004:39:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"crossChainSender(address)":"infinite","isCrossChain(address)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Primitives for cross-chain aware contracts for https://arbitrum.io/[Arbitrum]. This version should only be used on L1 to process cross-chain messages originating from L2. For the other side, use {LibArbitrumL2}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL1.sol\":\"LibArbitrumL1\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (crosschain/arbitrum/LibArbitrumL1.sol)\\n\\npragma solidity ^0.8.4;\\n\\nimport {IBridge as ArbitrumL1_Bridge} from \\\"../../vendor/arbitrum/IBridge.sol\\\";\\nimport {IOutbox as ArbitrumL1_Outbox} from \\\"../../vendor/arbitrum/IOutbox.sol\\\";\\nimport \\\"../errors.sol\\\";\\n\\n/**\\n * @dev Primitives for cross-chain aware contracts for\\n * https://arbitrum.io/[Arbitrum].\\n *\\n * This version should only be used on L1 to process cross-chain messages\\n * originating from L2. For the other side, use {LibArbitrumL2}.\\n */\\nlibrary LibArbitrumL1 {\\n    /**\\n     * @dev Returns whether the current function call is the result of a\\n     * cross-chain message relayed by the `bridge`.\\n     */\\n    function isCrossChain(address bridge) internal view returns (bool) {\\n        return msg.sender == bridge;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the sender that triggered the current\\n     * cross-chain message through the `bridge`.\\n     *\\n     * NOTE: {isCrossChain} should be checked before trying to recover the\\n     * sender, as it will revert with `NotCrossChainCall` if the current\\n     * function call is not the result of a cross-chain message.\\n     */\\n    function crossChainSender(address bridge) internal view returns (address) {\\n        if (!isCrossChain(bridge)) revert NotCrossChainCall();\\n\\n        address sender = ArbitrumL1_Outbox(ArbitrumL1_Bridge(bridge).activeOutbox()).l2ToL1Sender();\\n        require(sender != address(0), \\\"LibArbitrumL1: system messages without sender\\\");\\n\\n        return sender;\\n    }\\n}\\n\",\"keccak256\":\"0x364ef776375bac74a5f4f2fd1dc1d4a089915ea0fe720249bb71431e7b2f787f\",\"license\":\"MIT\"},\"@openzeppelin/contracts/crosschain/errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (crosschain/errors.sol)\\n\\npragma solidity ^0.8.4;\\n\\nerror NotCrossChainCall();\\nerror InvalidCrossChainSender(address actual, address expected);\\n\",\"keccak256\":\"0xa1e9b651a2427925598b49ef35da5930abc07859cfac5b9dfb1912f063a024b3\",\"license\":\"MIT\"},\"@openzeppelin/contracts/vendor/arbitrum/IBridge.sol\":{\"content\":\"// Copyright 2021-2022, Offchain Labs, Inc.\\n// For license information, see https://github.com/nitro/blob/master/LICENSE\\n// SPDX-License-Identifier: BUSL-1.1\\n// OpenZeppelin Contracts (last updated v4.8.0) (vendor/arbitrum/IBridge.sol)\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.6.9 <0.9.0;\\n\\ninterface IBridge {\\n    event MessageDelivered(\\n        uint256 indexed messageIndex,\\n        bytes32 indexed beforeInboxAcc,\\n        address inbox,\\n        uint8 kind,\\n        address sender,\\n        bytes32 messageDataHash,\\n        uint256 baseFeeL1,\\n        uint64 timestamp\\n    );\\n\\n    event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data);\\n\\n    event InboxToggle(address indexed inbox, bool enabled);\\n\\n    event OutboxToggle(address indexed outbox, bool enabled);\\n\\n    event SequencerInboxUpdated(address newSequencerInbox);\\n\\n    function allowedDelayedInboxList(uint256) external returns (address);\\n\\n    function allowedOutboxList(uint256) external returns (address);\\n\\n    /// @dev Accumulator for delayed inbox messages; tail represents hash of the current state; each element represents the inclusion of a new message.\\n    function delayedInboxAccs(uint256) external view returns (bytes32);\\n\\n    /// @dev Accumulator for sequencer inbox messages; tail represents hash of the current state; each element represents the inclusion of a new message.\\n    function sequencerInboxAccs(uint256) external view returns (bytes32);\\n\\n    // OpenZeppelin: changed return type from IOwnable\\n    function rollup() external view returns (address);\\n\\n    function sequencerInbox() external view returns (address);\\n\\n    function activeOutbox() external view returns (address);\\n\\n    function allowedDelayedInboxes(address inbox) external view returns (bool);\\n\\n    function allowedOutboxes(address outbox) external view returns (bool);\\n\\n    function sequencerReportedSubMessageCount() external view returns (uint256);\\n\\n    /**\\n     * @dev Enqueue a message in the delayed inbox accumulator.\\n     *      These messages are later sequenced in the SequencerInbox, either\\n     *      by the sequencer as part of a normal batch, or by force inclusion.\\n     */\\n    function enqueueDelayedMessage(\\n        uint8 kind,\\n        address sender,\\n        bytes32 messageDataHash\\n    ) external payable returns (uint256);\\n\\n    function executeCall(\\n        address to,\\n        uint256 value,\\n        bytes calldata data\\n    ) external returns (bool success, bytes memory returnData);\\n\\n    function delayedMessageCount() external view returns (uint256);\\n\\n    function sequencerMessageCount() external view returns (uint256);\\n\\n    // ---------- onlySequencerInbox functions ----------\\n\\n    function enqueueSequencerMessage(\\n        bytes32 dataHash,\\n        uint256 afterDelayedMessagesRead,\\n        uint256 prevMessageCount,\\n        uint256 newMessageCount\\n    )\\n        external\\n        returns (\\n            uint256 seqMessageIndex,\\n            bytes32 beforeAcc,\\n            bytes32 delayedAcc,\\n            bytes32 acc\\n        );\\n\\n    /**\\n     * @dev Allows the sequencer inbox to submit a delayed message of the batchPostingReport type\\n     *      This is done through a separate function entrypoint instead of allowing the sequencer inbox\\n     *      to call `enqueueDelayedMessage` to avoid the gas overhead of an extra SLOAD in either\\n     *      every delayed inbox or every sequencer inbox call.\\n     */\\n    function submitBatchSpendingReport(address batchPoster, bytes32 dataHash) external returns (uint256 msgNum);\\n\\n    // ---------- onlyRollupOrOwner functions ----------\\n\\n    function setSequencerInbox(address _sequencerInbox) external;\\n\\n    function setDelayedInbox(address inbox, bool enabled) external;\\n\\n    function setOutbox(address inbox, bool enabled) external;\\n\\n    // ---------- initializer ----------\\n\\n    // OpenZeppelin: changed rollup_ type from IOwnable\\n    function initialize(address rollup_) external;\\n}\\n\",\"keccak256\":\"0xdc8847efc0ca74c9f708d9bbd26592b4d21ccbcece6c1ce547d411891cdfe62d\",\"license\":\"BUSL-1.1\"},\"@openzeppelin/contracts/vendor/arbitrum/IOutbox.sol\":{\"content\":\"// Copyright 2021-2022, Offchain Labs, Inc.\\n// For license information, see https://github.com/nitro/blob/master/LICENSE\\n// SPDX-License-Identifier: BUSL-1.1\\n// OpenZeppelin Contracts (last updated v4.8.0) (vendor/arbitrum/IOutbox.sol)\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.6.9 <0.9.0;\\n\\nimport \\\"./IBridge.sol\\\";\\n\\ninterface IOutbox {\\n    event SendRootUpdated(bytes32 indexed blockHash, bytes32 indexed outputRoot);\\n    event OutBoxTransactionExecuted(\\n        address indexed to,\\n        address indexed l2Sender,\\n        uint256 indexed zero,\\n        uint256 transactionIndex\\n    );\\n\\n    function rollup() external view returns (address); // the rollup contract\\n\\n    function bridge() external view returns (IBridge); // the bridge contract\\n\\n    function spent(uint256) external view returns (bytes32); // packed spent bitmap\\n\\n    function roots(bytes32) external view returns (bytes32); // maps root hashes => L2 block hash\\n\\n    // solhint-disable-next-line func-name-mixedcase\\n    function OUTBOX_VERSION() external view returns (uint128); // the outbox version\\n\\n    function updateSendRoot(bytes32 sendRoot, bytes32 l2BlockHash) external;\\n\\n    /// @notice When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account\\n    ///         When the return value is zero, that means this is a system message\\n    /// @dev the l2ToL1Sender behaves as the tx.origin, the msg.sender should be validated to protect against reentrancies\\n    function l2ToL1Sender() external view returns (address);\\n\\n    /// @return l2Block return L2 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\\n    function l2ToL1Block() external view returns (uint256);\\n\\n    /// @return l1Block return L1 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\\n    function l2ToL1EthBlock() external view returns (uint256);\\n\\n    /// @return timestamp return L2 timestamp when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\\n    function l2ToL1Timestamp() external view returns (uint256);\\n\\n    /// @return outputId returns the unique output identifier of the L2 to L1 tx or 0 if no L2 to L1 transaction is active\\n    function l2ToL1OutputId() external view returns (bytes32);\\n\\n    /**\\n     * @notice Executes a messages in an Outbox entry.\\n     * @dev Reverts if dispute period hasn't expired, since the outbox entry\\n     *      is only created once the rollup confirms the respective assertion.\\n     * @dev it is not possible to execute any L2-to-L1 transaction which contains data\\n     *      to a contract address without any code (as enforced by the Bridge contract).\\n     * @param proof Merkle proof of message inclusion in send root\\n     * @param index Merkle path to message\\n     * @param l2Sender sender if original message (i.e., caller of ArbSys.sendTxToL1)\\n     * @param to destination address for L1 contract call\\n     * @param l2Block l2 block number at which sendTxToL1 call was made\\n     * @param l1Block l1 block number at which sendTxToL1 call was made\\n     * @param l2Timestamp l2 Timestamp at which sendTxToL1 call was made\\n     * @param value wei in L1 message\\n     * @param data abi-encoded L1 message data\\n     */\\n    function executeTransaction(\\n        bytes32[] calldata proof,\\n        uint256 index,\\n        address l2Sender,\\n        address to,\\n        uint256 l2Block,\\n        uint256 l1Block,\\n        uint256 l2Timestamp,\\n        uint256 value,\\n        bytes calldata data\\n    ) external;\\n\\n    /**\\n     *  @dev function used to simulate the result of a particular function call from the outbox\\n     *       it is useful for things such as gas estimates. This function includes all costs except for\\n     *       proof validation (which can be considered offchain as a somewhat of a fixed cost - it's\\n     *       not really a fixed cost, but can be treated as so with a fixed overhead for gas estimation).\\n     *       We can't include the cost of proof validation since this is intended to be used to simulate txs\\n     *       that are included in yet-to-be confirmed merkle roots. The simulation entrypoint could instead pretend\\n     *       to confirm a pending merkle root, but that would be less practical for integrating with tooling.\\n     *       It is only possible to trigger it when the msg sender is address zero, which should be impossible\\n     *       unless under simulation in an eth_call or eth_estimateGas\\n     */\\n    function executeTransactionSimulation(\\n        uint256 index,\\n        address l2Sender,\\n        address to,\\n        uint256 l2Block,\\n        uint256 l1Block,\\n        uint256 l2Timestamp,\\n        uint256 value,\\n        bytes calldata data\\n    ) external;\\n\\n    /**\\n     * @param index Merkle path to message\\n     * @return true if the message has been spent\\n     */\\n    function isSpent(uint256 index) external view returns (bool);\\n\\n    function calculateItemHash(\\n        address l2Sender,\\n        address to,\\n        uint256 l2Block,\\n        uint256 l1Block,\\n        uint256 l2Timestamp,\\n        uint256 value,\\n        bytes calldata data\\n    ) external pure returns (bytes32);\\n\\n    function calculateMerkleRoot(\\n        bytes32[] memory proof,\\n        uint256 path,\\n        bytes32 item\\n    ) external pure returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf11685613c2ca2e87e9ad7e93bff2bd966aa16f11599371878dff047be17d945\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL2.sol":{"LibArbitrumL2":{"abi":[{"inputs":[],"name":"ARBSYS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Primitives for cross-chain aware contracts for https://arbitrum.io/[Arbitrum]. This version should only be used on L2 to process cross-chain messages originating from L1. For the other side, use {LibArbitrumL1}. WARNING: There is currently a bug in Arbitrum that causes this contract to fail to detect cross-chain calls when deployed behind a proxy. This will be fixed when the network is upgraded to Arbitrum Nitro, currently scheduled for August 31st 2022.","kind":"dev","methods":{},"stateVariables":{"ARBSYS":{"details":"Returns whether the current function call is the result of a cross-chain message relayed by `arbsys`."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6091610038600b82828239805160001a607314602b57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063bf0a12cf146038575b600080fd5b603f606481565b6040516001600160a01b03909116815260200160405180910390f3fea2646970667358221220d2e272bf1f5aea9a9abf5612af6371a211938b34b1ca41232fa259eb72506a4564736f6c63430008110033","opcodes":"PUSH1 0x91 PUSH2 0x38 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x33 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xBF0A12CF EQ PUSH1 0x38 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3F PUSH1 0x64 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD2 0xE2 PUSH19 0xBF1F5AEA9A9ABF5612AF6371A211938B34B1CA COINBASE 0x23 0x2F LOG2 MSIZE 0xEB PUSH19 0x506A4564736F6C634300081100330000000000 ","sourceMap":"753:975:40:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;753:975:40;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ARBSYS_9730":{"entryPoint":null,"id":9730,"parameterSlots":0,"returnSlots":0},"abi_encode_tuple_t_address__to_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:227:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"123:102:181","statements":[{"nodeType":"YulAssignment","src":"133:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"145:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"156:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"141:3:181"},"nodeType":"YulFunctionCall","src":"141:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"133:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"175:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"190:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"206:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"211:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"202:3:181"},"nodeType":"YulFunctionCall","src":"202:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"215:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"198:3:181"},"nodeType":"YulFunctionCall","src":"198:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"186:3:181"},"nodeType":"YulFunctionCall","src":"186:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"168:6:181"},"nodeType":"YulFunctionCall","src":"168:51:181"},"nodeType":"YulExpressionStatement","src":"168:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"92:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"103:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"114:4:181","type":""}],"src":"14:211:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063bf0a12cf146038575b600080fd5b603f606481565b6040516001600160a01b03909116815260200160405180910390f3fea2646970667358221220d2e272bf1f5aea9a9abf5612af6371a211938b34b1ca41232fa259eb72506a4564736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x33 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xBF0A12CF EQ PUSH1 0x38 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3F PUSH1 0x64 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD2 0xE2 PUSH19 0xBF1F5AEA9A9ABF5612AF6371A211938B34B1CA COINBASE 0x23 0x2F LOG2 MSIZE 0xEB PUSH19 0x506A4564736F6C634300081100330000000000 ","sourceMap":"753:975:40:-:0;;;;;;;;;;;;;;;;;;;;;;;;918:75;;951:42;918:75;;;;;-1:-1:-1;;;;;186:32:181;;;168:51;;156:2;141:18;918:75:40;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"29000","executionCost":"112","totalCost":"29112"},"external":{"ARBSYS()":"166"},"internal":{"crossChainSender(address)":"infinite","isCrossChain(address)":"infinite"}},"methodIdentifiers":{"ARBSYS()":"bf0a12cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ARBSYS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Primitives for cross-chain aware contracts for https://arbitrum.io/[Arbitrum]. This version should only be used on L2 to process cross-chain messages originating from L1. For the other side, use {LibArbitrumL1}. WARNING: There is currently a bug in Arbitrum that causes this contract to fail to detect cross-chain calls when deployed behind a proxy. This will be fixed when the network is upgraded to Arbitrum Nitro, currently scheduled for August 31st 2022.\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"ARBSYS\":{\"details\":\"Returns whether the current function call is the result of a cross-chain message relayed by `arbsys`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL2.sol\":\"LibArbitrumL2\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (crosschain/arbitrum/LibArbitrumL2.sol)\\n\\npragma solidity ^0.8.4;\\n\\nimport {IArbSys as ArbitrumL2_Bridge} from \\\"../../vendor/arbitrum/IArbSys.sol\\\";\\nimport \\\"../errors.sol\\\";\\n\\n/**\\n * @dev Primitives for cross-chain aware contracts for\\n * https://arbitrum.io/[Arbitrum].\\n *\\n * This version should only be used on L2 to process cross-chain messages\\n * originating from L1. For the other side, use {LibArbitrumL1}.\\n *\\n * WARNING: There is currently a bug in Arbitrum that causes this contract to\\n * fail to detect cross-chain calls when deployed behind a proxy. This will be\\n * fixed when the network is upgraded to Arbitrum Nitro, currently scheduled for\\n * August 31st 2022.\\n */\\nlibrary LibArbitrumL2 {\\n    /**\\n     * @dev Returns whether the current function call is the result of a\\n     * cross-chain message relayed by `arbsys`.\\n     */\\n    address public constant ARBSYS = 0x0000000000000000000000000000000000000064;\\n\\n    function isCrossChain(address arbsys) internal view returns (bool) {\\n        return ArbitrumL2_Bridge(arbsys).wasMyCallersAddressAliased();\\n    }\\n\\n    /**\\n     * @dev Returns the address of the sender that triggered the current\\n     * cross-chain message through `arbsys`.\\n     *\\n     * NOTE: {isCrossChain} should be checked before trying to recover the\\n     * sender, as it will revert with `NotCrossChainCall` if the current\\n     * function call is not the result of a cross-chain message.\\n     */\\n    function crossChainSender(address arbsys) internal view returns (address) {\\n        if (!isCrossChain(arbsys)) revert NotCrossChainCall();\\n\\n        return ArbitrumL2_Bridge(arbsys).myCallersAddressWithoutAliasing();\\n    }\\n}\\n\",\"keccak256\":\"0xab1259cd9cdb3fccfb8bfae3240954541c3abddcf0f9444b5ebb3393300bb78e\",\"license\":\"MIT\"},\"@openzeppelin/contracts/crosschain/errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (crosschain/errors.sol)\\n\\npragma solidity ^0.8.4;\\n\\nerror NotCrossChainCall();\\nerror InvalidCrossChainSender(address actual, address expected);\\n\",\"keccak256\":\"0xa1e9b651a2427925598b49ef35da5930abc07859cfac5b9dfb1912f063a024b3\",\"license\":\"MIT\"},\"@openzeppelin/contracts/vendor/arbitrum/IArbSys.sol\":{\"content\":\"// Copyright 2021-2022, Offchain Labs, Inc.\\n// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE\\n// SPDX-License-Identifier: BUSL-1.1\\n// OpenZeppelin Contracts (last updated v4.8.0) (vendor/arbitrum/IArbSys.sol)\\n\\npragma solidity >=0.4.21 <0.9.0;\\n\\n/**\\n * @title System level functionality\\n * @notice For use by contracts to interact with core L2-specific functionality.\\n * Precompiled contract that exists in every Arbitrum chain at address(100), 0x0000000000000000000000000000000000000064.\\n */\\ninterface IArbSys {\\n    /**\\n     * @notice Get Arbitrum block number (distinct from L1 block number; Arbitrum genesis block has block number 0)\\n     * @return block number as int\\n     */\\n    function arbBlockNumber() external view returns (uint256);\\n\\n    /**\\n     * @notice Get Arbitrum block hash (reverts unless currentBlockNum-256 <= arbBlockNum < currentBlockNum)\\n     * @return block hash\\n     */\\n    function arbBlockHash(uint256 arbBlockNum) external view returns (bytes32);\\n\\n    /**\\n     * @notice Gets the rollup's unique chain identifier\\n     * @return Chain identifier as int\\n     */\\n    function arbChainID() external view returns (uint256);\\n\\n    /**\\n     * @notice Get internal version number identifying an ArbOS build\\n     * @return version number as int\\n     */\\n    function arbOSVersion() external view returns (uint256);\\n\\n    /**\\n     * @notice Returns 0 since Nitro has no concept of storage gas\\n     * @return uint 0\\n     */\\n    function getStorageGasAvailable() external view returns (uint256);\\n\\n    /**\\n     * @notice (deprecated) check if current call is top level (meaning it was triggered by an EoA or a L1 contract)\\n     * @dev this call has been deprecated and may be removed in a future release\\n     * @return true if current execution frame is not a call by another L2 contract\\n     */\\n    function isTopLevelCall() external view returns (bool);\\n\\n    /**\\n     * @notice map L1 sender contract address to its L2 alias\\n     * @param sender sender address\\n     * @param unused argument no longer used\\n     * @return aliased sender address\\n     */\\n    function mapL1SenderContractAddressToL2Alias(address sender, address unused) external pure returns (address);\\n\\n    /**\\n     * @notice check if the caller (of this caller of this) is an aliased L1 contract address\\n     * @return true iff the caller's address is an alias for an L1 contract address\\n     */\\n    function wasMyCallersAddressAliased() external view returns (bool);\\n\\n    /**\\n     * @notice return the address of the caller (of this caller of this), without applying L1 contract address aliasing\\n     * @return address of the caller's caller, without applying L1 contract address aliasing\\n     */\\n    function myCallersAddressWithoutAliasing() external view returns (address);\\n\\n    /**\\n     * @notice Send given amount of Eth to dest from sender.\\n     * This is a convenience function, which is equivalent to calling sendTxToL1 with empty data.\\n     * @param destination recipient address on L1\\n     * @return unique identifier for this L2-to-L1 transaction.\\n     */\\n    function withdrawEth(address destination) external payable returns (uint256);\\n\\n    /**\\n     * @notice Send a transaction to L1\\n     * @dev it is not possible to execute on the L1 any L2-to-L1 transaction which contains data\\n     * to a contract address without any code (as enforced by the Bridge contract).\\n     * @param destination recipient address on L1\\n     * @param data (optional) calldata for L1 contract call\\n     * @return a unique identifier for this L2-to-L1 transaction.\\n     */\\n    function sendTxToL1(address destination, bytes calldata data) external payable returns (uint256);\\n\\n    /**\\n     * @notice Get send Merkle tree state\\n     * @return size number of sends in the history\\n     * @return root root hash of the send history\\n     * @return partials hashes of partial subtrees in the send history tree\\n     */\\n    function sendMerkleTreeState()\\n        external\\n        view\\n        returns (\\n            uint256 size,\\n            bytes32 root,\\n            bytes32[] memory partials\\n        );\\n\\n    /**\\n     * @notice creates a send txn from L2 to L1\\n     * @param position = (level << 192) + leaf = (0 << 192) + leaf = leaf\\n     */\\n    event L2ToL1Tx(\\n        address caller,\\n        address indexed destination,\\n        uint256 indexed hash,\\n        uint256 indexed position,\\n        uint256 arbBlockNum,\\n        uint256 ethBlockNum,\\n        uint256 timestamp,\\n        uint256 callvalue,\\n        bytes data\\n    );\\n\\n    /// @dev DEPRECATED in favour of the new L2ToL1Tx event above after the nitro upgrade\\n    event L2ToL1Transaction(\\n        address caller,\\n        address indexed destination,\\n        uint256 indexed uniqueId,\\n        uint256 indexed batchNumber,\\n        uint256 indexInBatch,\\n        uint256 arbBlockNum,\\n        uint256 ethBlockNum,\\n        uint256 timestamp,\\n        uint256 callvalue,\\n        bytes data\\n    );\\n\\n    /**\\n     * @notice logs a merkle branch for proof synthesis\\n     * @param reserved an index meant only to align the 4th index with L2ToL1Transaction's 4th event\\n     * @param hash the merkle hash\\n     * @param position = (level << 192) + leaf\\n     */\\n    event SendMerkleUpdate(uint256 indexed reserved, bytes32 indexed hash, uint256 indexed position);\\n}\\n\",\"keccak256\":\"0xed30463b2696afccf589a002901b4b6556b807fe9f8de8bd6f6b665b3634f933\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/interfaces/draft-IERC1822.sol":{"IERC1822Proxiable":{"abi":[{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified proxy whose upgrades are fully controlled by the current implementation.","kind":"dev","methods":{"proxiableUUID()":{"details":"Returns the storage slot that the proxiable contract assumes is being used to store the implementation address. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"proxiableUUID()":"52d1902d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified proxy whose upgrades are fully controlled by the current implementation.\",\"kind\":\"dev\",\"methods\":{\"proxiableUUID()\":{\"details\":\"Returns the storage slot that the proxiable contract assumes is being used to store the implementation address. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":\"IERC1822Proxiable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/proxy/Clones.sol":{"Clones":{"abi":[],"devdoc":{"details":"https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for deploying minimal proxy contracts, also known as \"clones\". > To simply and cheaply clone contract functionality in an immutable way, this standard specifies > a minimal bytecode implementation that delegates all calls to a known, fixed address. The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the deterministic method. _Available since v3.4._","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200fb1f69544ec0864e97d3b11a5e6a3ee6abb904437cded534c1d2218a8a0369e64736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF 0xB1 0xF6 SWAP6 DIFFICULTY 0xEC ADDMOD PUSH5 0xE97D3B11A5 0xE6 LOG3 0xEE PUSH11 0xBB904437CDED534C1D2218 0xA8 LOG0 CALLDATASIZE SWAP15 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"755:3281:44:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;755:3281:44;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200fb1f69544ec0864e97d3b11a5e6a3ee6abb904437cded534c1d2218a8a0369e64736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF 0xB1 0xF6 SWAP6 DIFFICULTY 0xEC ADDMOD PUSH5 0xE97D3B11A5 0xE6 LOG3 0xEE PUSH11 0xBB904437CDED534C1D2218 0xA8 LOG0 CALLDATASIZE SWAP15 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"755:3281:44:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"clone(address)":"infinite","cloneDeterministic(address,bytes32)":"infinite","predictDeterministicAddress(address,bytes32)":"infinite","predictDeterministicAddress(address,bytes32,address)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for deploying minimal proxy contracts, also known as \\\"clones\\\". > To simply and cheaply clone contract functionality in an immutable way, this standard specifies > a minimal bytecode implementation that delegates all calls to a known, fixed address. The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the deterministic method. _Available since v3.4._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/Clones.sol\":\"Clones\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/Clones.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n    /**\\n     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n     *\\n     * This function uses the create opcode, which should never revert.\\n     */\\n    function clone(address implementation) internal returns (address instance) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes\\n            // of the `implementation` address with the bytecode before the address.\\n            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))\\n            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.\\n            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))\\n            instance := create(0, 0x09, 0x37)\\n        }\\n        require(instance != address(0), \\\"ERC1167: create failed\\\");\\n    }\\n\\n    /**\\n     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n     *\\n     * This function uses the create2 opcode and a `salt` to deterministically deploy\\n     * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n     * the clones cannot be deployed twice at the same address.\\n     */\\n    function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes\\n            // of the `implementation` address with the bytecode before the address.\\n            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))\\n            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.\\n            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))\\n            instance := create2(0, 0x09, 0x37, salt)\\n        }\\n        require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n    }\\n\\n    /**\\n     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n     */\\n    function predictDeterministicAddress(\\n        address implementation,\\n        bytes32 salt,\\n        address deployer\\n    ) internal pure returns (address predicted) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(add(ptr, 0x38), deployer)\\n            mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff)\\n            mstore(add(ptr, 0x14), implementation)\\n            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73)\\n            mstore(add(ptr, 0x58), salt)\\n            mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37))\\n            predicted := keccak256(add(ptr, 0x43), 0x55)\\n        }\\n    }\\n\\n    /**\\n     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n     */\\n    function predictDeterministicAddress(address implementation, bytes32 salt)\\n        internal\\n        view\\n        returns (address predicted)\\n    {\\n        return predictDeterministicAddress(implementation, salt, address(this));\\n    }\\n}\\n\",\"keccak256\":\"0x888d64d221d52c31d015b76e50ca1af5ef8ff076550810b49cea6b01d8267a10\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol":{"ERC1967Proxy":{"abi":[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"details":"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.","kind":"dev","methods":{"constructor":{"details":"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_9895":{"entryPoint":null,"id":9895,"parameterSlots":2,"returnSlots":0},"@_revert_11483":{"entryPoint":693,"id":11483,"parameterSlots":2,"returnSlots":0},"@_setImplementation_9964":{"entryPoint":215,"id":9964,"parameterSlots":1,"returnSlots":0},"@_upgradeToAndCall_10009":{"entryPoint":53,"id":10009,"parameterSlots":3,"returnSlots":0},"@_upgradeTo_9979":{"entryPoint":107,"id":9979,"parameterSlots":1,"returnSlots":0},"@functionDelegateCall_11371":{"entryPoint":171,"id":11371,"parameterSlots":2,"returnSlots":1},"@functionDelegateCall_11400":{"entryPoint":425,"id":11400,"parameterSlots":3,"returnSlots":1},"@getAddressSlot_11606":{"entryPoint":561,"id":11606,"parameterSlots":1,"returnSlots":1},"@isContract_11172":{"entryPoint":546,"id":11172,"parameterSlots":1,"returnSlots":1},"@verifyCallResultFromTarget_11439":{"entryPoint":564,"id":11439,"parameterSlots":4,"returnSlots":1},"abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory":{"entryPoint":793,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":999,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1027,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":757,"id":null,"parameterSlots":3,"returnSlots":0},"panic_error_0x41":{"entryPoint":735,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2931:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:181"},"nodeType":"YulFunctionCall","src":"66:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:181"},"nodeType":"YulFunctionCall","src":"56:31:181"},"nodeType":"YulExpressionStatement","src":"56:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:181"},"nodeType":"YulFunctionCall","src":"96:15:181"},"nodeType":"YulExpressionStatement","src":"96:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:181"},"nodeType":"YulFunctionCall","src":"120:15:181"},"nodeType":"YulExpressionStatement","src":"120:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:181"},{"body":{"nodeType":"YulBlock","src":"212:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"222:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"231:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"226:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"291:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"316:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"321:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"312:3:181"},"nodeType":"YulFunctionCall","src":"312:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"335:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"340:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"331:3:181"},"nodeType":"YulFunctionCall","src":"331:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"325:5:181"},"nodeType":"YulFunctionCall","src":"325:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"305:6:181"},"nodeType":"YulFunctionCall","src":"305:39:181"},"nodeType":"YulExpressionStatement","src":"305:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"252:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"255:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"249:2:181"},"nodeType":"YulFunctionCall","src":"249:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"263:19:181","statements":[{"nodeType":"YulAssignment","src":"265:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"274:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"277:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"270:3:181"},"nodeType":"YulFunctionCall","src":"270:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"265:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"245:3:181","statements":[]},"src":"241:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"374:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"379:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"370:3:181"},"nodeType":"YulFunctionCall","src":"370:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"388:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"363:6:181"},"nodeType":"YulFunctionCall","src":"363:27:181"},"nodeType":"YulExpressionStatement","src":"363:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"190:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"195:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"200:6:181","type":""}],"src":"146:250:181"},{"body":{"nodeType":"YulBlock","src":"508:956:181","statements":[{"body":{"nodeType":"YulBlock","src":"554:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"563:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"566:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"556:6:181"},"nodeType":"YulFunctionCall","src":"556:12:181"},"nodeType":"YulExpressionStatement","src":"556:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"529:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"538:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"525:3:181"},"nodeType":"YulFunctionCall","src":"525:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"550:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"521:3:181"},"nodeType":"YulFunctionCall","src":"521:32:181"},"nodeType":"YulIf","src":"518:52:181"},{"nodeType":"YulVariableDeclaration","src":"579:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"598:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"592:5:181"},"nodeType":"YulFunctionCall","src":"592:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"583:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"671:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"680:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"683:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"673:6:181"},"nodeType":"YulFunctionCall","src":"673:12:181"},"nodeType":"YulExpressionStatement","src":"673:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"630:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"641:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"656:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"661:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"652:3:181"},"nodeType":"YulFunctionCall","src":"652:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"665:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"648:3:181"},"nodeType":"YulFunctionCall","src":"648:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"637:3:181"},"nodeType":"YulFunctionCall","src":"637:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"627:2:181"},"nodeType":"YulFunctionCall","src":"627:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"620:6:181"},"nodeType":"YulFunctionCall","src":"620:50:181"},"nodeType":"YulIf","src":"617:70:181"},{"nodeType":"YulAssignment","src":"696:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"706:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"696:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"720:39:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"744:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"755:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"740:3:181"},"nodeType":"YulFunctionCall","src":"740:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"734:5:181"},"nodeType":"YulFunctionCall","src":"734:25:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"724:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"768:28:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"786:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"790:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"782:3:181"},"nodeType":"YulFunctionCall","src":"782:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"794:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"778:3:181"},"nodeType":"YulFunctionCall","src":"778:18:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"772:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"823:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"832:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"835:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"825:6:181"},"nodeType":"YulFunctionCall","src":"825:12:181"},"nodeType":"YulExpressionStatement","src":"825:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"811:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"819:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"808:2:181"},"nodeType":"YulFunctionCall","src":"808:14:181"},"nodeType":"YulIf","src":"805:34:181"},{"nodeType":"YulVariableDeclaration","src":"848:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"862:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"873:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"858:3:181"},"nodeType":"YulFunctionCall","src":"858:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"852:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"928:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"937:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"940:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"930:6:181"},"nodeType":"YulFunctionCall","src":"930:12:181"},"nodeType":"YulExpressionStatement","src":"930:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"907:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"911:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"903:3:181"},"nodeType":"YulFunctionCall","src":"903:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"918:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"899:3:181"},"nodeType":"YulFunctionCall","src":"899:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"892:6:181"},"nodeType":"YulFunctionCall","src":"892:35:181"},"nodeType":"YulIf","src":"889:55:181"},{"nodeType":"YulVariableDeclaration","src":"953:19:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"969:2:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"963:5:181"},"nodeType":"YulFunctionCall","src":"963:9:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"957:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"995:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"997:16:181"},"nodeType":"YulFunctionCall","src":"997:18:181"},"nodeType":"YulExpressionStatement","src":"997:18:181"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"987:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"991:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"984:2:181"},"nodeType":"YulFunctionCall","src":"984:10:181"},"nodeType":"YulIf","src":"981:36:181"},{"nodeType":"YulVariableDeclaration","src":"1026:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1040:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1036:3:181"},"nodeType":"YulFunctionCall","src":"1036:7:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"1030:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1052:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1072:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1066:5:181"},"nodeType":"YulFunctionCall","src":"1066:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1056:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1084:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1106:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1130:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1134:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1126:3:181"},"nodeType":"YulFunctionCall","src":"1126:13:181"},{"name":"_4","nodeType":"YulIdentifier","src":"1141:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1122:3:181"},"nodeType":"YulFunctionCall","src":"1122:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"1146:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1118:3:181"},"nodeType":"YulFunctionCall","src":"1118:31:181"},{"name":"_4","nodeType":"YulIdentifier","src":"1151:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1114:3:181"},"nodeType":"YulFunctionCall","src":"1114:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1102:3:181"},"nodeType":"YulFunctionCall","src":"1102:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1088:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1214:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1216:16:181"},"nodeType":"YulFunctionCall","src":"1216:18:181"},"nodeType":"YulExpressionStatement","src":"1216:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1173:10:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1185:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1170:2:181"},"nodeType":"YulFunctionCall","src":"1170:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1193:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1205:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1190:2:181"},"nodeType":"YulFunctionCall","src":"1190:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1167:2:181"},"nodeType":"YulFunctionCall","src":"1167:46:181"},"nodeType":"YulIf","src":"1164:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1252:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1256:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1245:6:181"},"nodeType":"YulFunctionCall","src":"1245:22:181"},"nodeType":"YulExpressionStatement","src":"1245:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1283:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1291:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1276:6:181"},"nodeType":"YulFunctionCall","src":"1276:18:181"},"nodeType":"YulExpressionStatement","src":"1276:18:181"},{"body":{"nodeType":"YulBlock","src":"1340:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1349:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1352:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1342:6:181"},"nodeType":"YulFunctionCall","src":"1342:12:181"},"nodeType":"YulExpressionStatement","src":"1342:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1317:2:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1321:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1313:3:181"},"nodeType":"YulFunctionCall","src":"1313:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1326:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1309:3:181"},"nodeType":"YulFunctionCall","src":"1309:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1331:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1306:2:181"},"nodeType":"YulFunctionCall","src":"1306:33:181"},"nodeType":"YulIf","src":"1303:53:181"},{"expression":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1404:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1408:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1400:3:181"},"nodeType":"YulFunctionCall","src":"1400:11:181"},{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1417:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1425:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1413:3:181"},"nodeType":"YulFunctionCall","src":"1413:15:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1430:2:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"1365:34:181"},"nodeType":"YulFunctionCall","src":"1365:68:181"},"nodeType":"YulExpressionStatement","src":"1365:68:181"},{"nodeType":"YulAssignment","src":"1442:16:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1452:6:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1442:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"466:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"477:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"489:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"497:6:181","type":""}],"src":"401:1063:181"},{"body":{"nodeType":"YulBlock","src":"1643:235:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1660:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1671:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1653:6:181"},"nodeType":"YulFunctionCall","src":"1653:21:181"},"nodeType":"YulExpressionStatement","src":"1653:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1694:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1705:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1690:3:181"},"nodeType":"YulFunctionCall","src":"1690:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1710:2:181","type":"","value":"45"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1683:6:181"},"nodeType":"YulFunctionCall","src":"1683:30:181"},"nodeType":"YulExpressionStatement","src":"1683:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1733:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1744:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1729:3:181"},"nodeType":"YulFunctionCall","src":"1729:18:181"},{"hexValue":"455243313936373a206e657720696d706c656d656e746174696f6e206973206e","kind":"string","nodeType":"YulLiteral","src":"1749:34:181","type":"","value":"ERC1967: new implementation is n"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1722:6:181"},"nodeType":"YulFunctionCall","src":"1722:62:181"},"nodeType":"YulExpressionStatement","src":"1722:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1804:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1815:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1800:3:181"},"nodeType":"YulFunctionCall","src":"1800:18:181"},{"hexValue":"6f74206120636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"1820:15:181","type":"","value":"ot a contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1793:6:181"},"nodeType":"YulFunctionCall","src":"1793:43:181"},"nodeType":"YulExpressionStatement","src":"1793:43:181"},{"nodeType":"YulAssignment","src":"1845:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1857:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1868:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1853:3:181"},"nodeType":"YulFunctionCall","src":"1853:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1845:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1620:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1634:4:181","type":""}],"src":"1469:409:181"},{"body":{"nodeType":"YulBlock","src":"2020:150:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2030:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2050:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2044:5:181"},"nodeType":"YulFunctionCall","src":"2044:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2034:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2105:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2113:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2101:3:181"},"nodeType":"YulFunctionCall","src":"2101:17:181"},{"name":"pos","nodeType":"YulIdentifier","src":"2120:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"2125:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"2066:34:181"},"nodeType":"YulFunctionCall","src":"2066:66:181"},"nodeType":"YulExpressionStatement","src":"2066:66:181"},{"nodeType":"YulAssignment","src":"2141:23:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2152:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"2157:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2148:3:181"},"nodeType":"YulFunctionCall","src":"2148:16:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"2141:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"1996:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2001:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"2012:3:181","type":""}],"src":"1883:287:181"},{"body":{"nodeType":"YulBlock","src":"2349:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2366:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2377:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2359:6:181"},"nodeType":"YulFunctionCall","src":"2359:21:181"},"nodeType":"YulExpressionStatement","src":"2359:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2400:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2411:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2396:3:181"},"nodeType":"YulFunctionCall","src":"2396:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2416:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2389:6:181"},"nodeType":"YulFunctionCall","src":"2389:30:181"},"nodeType":"YulExpressionStatement","src":"2389:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2439:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2450:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2435:3:181"},"nodeType":"YulFunctionCall","src":"2435:18:181"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"2455:31:181","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2428:6:181"},"nodeType":"YulFunctionCall","src":"2428:59:181"},"nodeType":"YulExpressionStatement","src":"2428:59:181"},{"nodeType":"YulAssignment","src":"2496:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2508:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2519:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2504:3:181"},"nodeType":"YulFunctionCall","src":"2504:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2496:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2326:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2340:4:181","type":""}],"src":"2175:353:181"},{"body":{"nodeType":"YulBlock","src":"2654:275:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2671:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2682:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2664:6:181"},"nodeType":"YulFunctionCall","src":"2664:21:181"},"nodeType":"YulExpressionStatement","src":"2664:21:181"},{"nodeType":"YulVariableDeclaration","src":"2694:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2714:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2708:5:181"},"nodeType":"YulFunctionCall","src":"2708:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2698:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2741:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2752:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2737:3:181"},"nodeType":"YulFunctionCall","src":"2737:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"2757:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2730:6:181"},"nodeType":"YulFunctionCall","src":"2730:34:181"},"nodeType":"YulExpressionStatement","src":"2730:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2812:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2820:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2808:3:181"},"nodeType":"YulFunctionCall","src":"2808:15:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2829:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2840:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2825:3:181"},"nodeType":"YulFunctionCall","src":"2825:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"2845:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"2773:34:181"},"nodeType":"YulFunctionCall","src":"2773:79:181"},"nodeType":"YulExpressionStatement","src":"2773:79:181"},{"nodeType":"YulAssignment","src":"2861:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2877:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2896:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2904:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2892:3:181"},"nodeType":"YulFunctionCall","src":"2892:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2913:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2909:3:181"},"nodeType":"YulFunctionCall","src":"2909:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2888:3:181"},"nodeType":"YulFunctionCall","src":"2888:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2873:3:181"},"nodeType":"YulFunctionCall","src":"2873:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"2920:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2869:3:181"},"nodeType":"YulFunctionCall","src":"2869:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2861:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2623:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2634:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2645:4:181","type":""}],"src":"2533:396:181"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n        let offset := mload(add(headStart, 32))\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory_with_cleanup(add(_2, 32), add(memPtr, 32), _3)\n        value1 := memPtr\n    }\n    function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 45)\n        mstore(add(headStart, 64), \"ERC1967: new implementation is n\")\n        mstore(add(headStart, 96), \"ot a contract\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory_with_cleanup(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405260405161072738038061072783398101604081905261002291610319565b61002e82826000610035565b5050610436565b61003e8361006b565b60008251118061004b5750805b156100665761006483836100ab60201b6100291760201c565b505b505050565b610074816100d7565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100d08383604051806060016040528060278152602001610700602791396101a9565b9392505050565b6100ea8161022260201b6100551760201c565b6101515760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61023160201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080856001600160a01b0316856040516101c691906103e7565b600060405180830381855af49150503d8060008114610201576040519150601f19603f3d011682016040523d82523d6000602084013e610206565b606091505b50909250905061021886838387610234565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102a357825160000361029c576001600160a01b0385163b61029c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610148565b50816102ad565b6102ad83836102b5565b949350505050565b8151156102c55781518083602001fd5b8060405162461bcd60e51b81526004016101489190610403565b634e487b7160e01b600052604160045260246000fd5b60005b838110156103105781810151838201526020016102f8565b50506000910152565b6000806040838503121561032c57600080fd5b82516001600160a01b038116811461034357600080fd5b60208401519092506001600160401b038082111561036057600080fd5b818501915085601f83011261037457600080fd5b815181811115610386576103866102df565b604051601f8201601f19908116603f011681019083821181831017156103ae576103ae6102df565b816040528281528860208487010111156103c757600080fd5b6103d88360208301602088016102f5565b80955050505050509250929050565b600082516103f98184602087016102f5565b9190910192915050565b60208152600082518060208401526104228160408501602087016102f5565b601f01601f19169190910160400192915050565b6102bb806104456000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b61009f565b565b606061004e838360405180606001604052806027815260200161025f602791396100c3565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100be573d6000f35b3d6000fd5b6060600080856001600160a01b0316856040516100e0919061020f565b600060405180830381855af49150503d806000811461011b576040519150601f19603f3d011682016040523d82523d6000602084013e610120565b606091505b50915091506101318683838761013b565b9695505050505050565b606083156101af5782516000036101a8576001600160a01b0385163b6101a85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b50816101b9565b6101b983836101c1565b949350505050565b8151156101d15781518083602001fd5b8060405162461bcd60e51b815260040161019f919061022b565b60005b838110156102065781810151838201526020016101ee565b50506000910152565b600082516102218184602087016101eb565b9190910192915050565b602081526000825180602084015261024a8160408501602087016101eb565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220687bc65f742577afa32edc32468487a306093fad2f395880fa5ffa4efc5fdd6064736f6c63430008110033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x727 CODESIZE SUB DUP1 PUSH2 0x727 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x22 SWAP2 PUSH2 0x319 JUMP JUMPDEST PUSH2 0x2E DUP3 DUP3 PUSH1 0x0 PUSH2 0x35 JUMP JUMPDEST POP POP PUSH2 0x436 JUMP JUMPDEST PUSH2 0x3E DUP4 PUSH2 0x6B JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x4B JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x66 JUMPI PUSH2 0x64 DUP4 DUP4 PUSH2 0xAB PUSH1 0x20 SHL PUSH2 0x29 OR PUSH1 0x20 SHR JUMP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x74 DUP2 PUSH2 0xD7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xD0 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x700 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x1A9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xEA DUP2 PUSH2 0x222 PUSH1 0x20 SHL PUSH2 0x55 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x151 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH13 0x1BDD08184818DBDB9D1C9858DD PUSH1 0x9A SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x188 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH1 0x0 SHL PUSH2 0x231 PUSH1 0x20 SHL PUSH2 0x64 OR PUSH1 0x20 SHR JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x1C6 SWAP2 SWAP1 PUSH2 0x3E7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x201 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x206 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x218 DUP7 DUP4 DUP4 DUP8 PUSH2 0x234 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x2A3 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x29C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x29C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x148 JUMP JUMPDEST POP DUP2 PUSH2 0x2AD JUMP JUMPDEST PUSH2 0x2AD DUP4 DUP4 PUSH2 0x2B5 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x2C5 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x148 SWAP2 SWAP1 PUSH2 0x403 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x310 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2F8 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x32C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x343 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x386 JUMPI PUSH2 0x386 PUSH2 0x2DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x3AE JUMPI PUSH2 0x3AE PUSH2 0x2DF JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x3C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3D8 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x2F5 JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x3F9 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x2F5 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x422 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x2F5 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2BB DUP1 PUSH2 0x445 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x17 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11 JUMPDEST PUSH2 0x27 PUSH2 0x22 PUSH2 0x67 JUMP JUMPDEST PUSH2 0x9F JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH2 0x4E DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25F PUSH1 0x27 SWAP2 CODECOPY PUSH2 0xC3 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9A PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0xBE JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH2 0xE0 SWAP2 SWAP1 PUSH2 0x20F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x11B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x120 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x131 DUP7 DUP4 DUP4 DUP8 PUSH2 0x13B JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1AF JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x1A8 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x1A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP2 PUSH2 0x1B9 JUMP JUMPDEST PUSH2 0x1B9 DUP4 DUP4 PUSH2 0x1C1 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x1D1 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP2 SWAP1 PUSH2 0x22B JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x206 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1EE JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x221 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1EB JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x24A DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x1EB JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x70667358221220687BC6 0x5F PUSH21 0x2577AFA32EDC32468487A306093FAD2F395880FA5F STATICCALL 0x4E 0xFC 0x5F 0xDD PUSH1 0x64 PUSH20 0x6F6C63430008110033416464726573733A206C6F PUSH24 0x2D6C6576656C2064656C65676174652063616C6C20666169 PUSH13 0x65640000000000000000000000 ","sourceMap":"567:723:45:-:0;;;958:112;;;;;;;;;;;;;;;;;;:::i;:::-;1024:39;1042:6;1050:5;1057;1024:17;:39::i;:::-;958:112;;567:723;;2183:295:46;2321:29;2332:17;2321:10;:29::i;:::-;2378:1;2364:4;:11;:15;:28;;;;2383:9;2364:28;2360:112;;;2408:53;2437:17;2456:4;2408:28;;;;;:53;;:::i;:::-;;2360:112;2183:295;;;:::o;1897:152::-;1963:37;1982:17;1963:18;:37::i;:::-;2015:27;;-1:-1:-1;;;;;2015:27:46;;;;;;;;1897:152;:::o;6469:198:57:-;6552:12;6583:77;6604:6;6612:4;6583:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6576:84;6469:198;-1:-1:-1;;;6469:198:57:o;1532:259:46:-;1613:37;1632:17;1613:18;;;;;:37;;:::i;:::-;1605:95;;;;-1:-1:-1;;;1605:95:46;;1671:2:181;1605:95:46;;;1653:21:181;1710:2;1690:18;;;1683:30;1749:34;1729:18;;;1722:62;-1:-1:-1;;;1800:18:181;;;1793:43;1853:19;;1605:95:46;;;;;;;;;1767:17;1710:48;1030:66;1737:20;;1710:26;;;;;:48;;:::i;:::-;:74;;-1:-1:-1;;;;;;1710:74:46;-1:-1:-1;;;;;1710:74:46;;;;;;;;;;-1:-1:-1;1532:259:46:o;6853:325:57:-;6994:12;7019;7033:23;7060:6;-1:-1:-1;;;;;7060:19:57;7080:4;7060:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7018:67:57;;-1:-1:-1;7018:67:57;-1:-1:-1;7102:69:57;7129:6;7018:67;;7158:12;7102:26;:69::i;:::-;7095:76;6853:325;-1:-1:-1;;;;;;6853:325:57:o;1175:320::-;-1:-1:-1;;;;;1465:19:57;;:23;;;1175:320::o;1614:190:60:-;1784:4;1614:190::o;7466:628:57:-;7646:12;7674:7;7670:418;;;7701:10;:17;7722:1;7701:22;7697:286;;-1:-1:-1;;;;;1465:19:57;;;7908:60;;;;-1:-1:-1;;;7908:60:57;;2377:2:181;7908:60:57;;;2359:21:181;2416:2;2396:18;;;2389:30;2455:31;2435:18;;;2428:59;2504:18;;7908:60:57;2175:353:181;7908:60:57;-1:-1:-1;8003:10:57;7996:17;;7670:418;8044:33;8052:10;8064:12;8044:7;:33::i;:::-;7466:628;;;;;;:::o;8616:540::-;8775:17;;:21;8771:379;;9003:10;8997:17;9059:15;9046:10;9042:2;9038:19;9031:44;8771:379;9126:12;9119:20;;-1:-1:-1;;;9119:20:57;;;;;;;;:::i;14:127:181:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:250;231:1;241:113;255:6;252:1;249:13;241:113;;;331:11;;;325:18;312:11;;;305:39;277:2;270:10;241:113;;;-1:-1:-1;;388:1:181;370:16;;363:27;146:250::o;401:1063::-;489:6;497;550:2;538:9;529:7;525:23;521:32;518:52;;;566:1;563;556:12;518:52;592:16;;-1:-1:-1;;;;;637:31:181;;627:42;;617:70;;683:1;680;673:12;617:70;755:2;740:18;;734:25;706:5;;-1:-1:-1;;;;;;808:14:181;;;805:34;;;835:1;832;825:12;805:34;873:6;862:9;858:22;848:32;;918:7;911:4;907:2;903:13;899:27;889:55;;940:1;937;930:12;889:55;969:2;963:9;991:2;987;984:10;981:36;;;997:18;;:::i;:::-;1072:2;1066:9;1040:2;1126:13;;-1:-1:-1;;1122:22:181;;;1146:2;1118:31;1114:40;1102:53;;;1170:18;;;1190:22;;;1167:46;1164:72;;;1216:18;;:::i;:::-;1256:10;1252:2;1245:22;1291:2;1283:6;1276:18;1331:7;1326:2;1321;1317;1313:11;1309:20;1306:33;1303:53;;;1352:1;1349;1342:12;1303:53;1365:68;1430:2;1425;1417:6;1413:15;1408:2;1404;1400:11;1365:68;:::i;:::-;1452:6;1442:16;;;;;;;401:1063;;;;;:::o;1883:287::-;2012:3;2050:6;2044:13;2066:66;2125:6;2120:3;2113:4;2105:6;2101:17;2066:66;:::i;:::-;2148:16;;;;;1883:287;-1:-1:-1;;1883:287:181:o;2533:396::-;2682:2;2671:9;2664:21;2645:4;2714:6;2708:13;2757:6;2752:2;2741:9;2737:18;2730:34;2773:79;2845:6;2840:2;2829:9;2825:18;2820:2;2812:6;2808:15;2773:79;:::i;:::-;2913:2;2892:15;-1:-1:-1;;2888:29:181;2873:45;;;;2920:2;2869:54;;2533:396;-1:-1:-1;;2533:396:181:o;:::-;567:723:45;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_10264":{"entryPoint":null,"id":10264,"parameterSlots":0,"returnSlots":0},"@_10272":{"entryPoint":null,"id":10272,"parameterSlots":0,"returnSlots":0},"@_beforeFallback_10277":{"entryPoint":null,"id":10277,"parameterSlots":0,"returnSlots":0},"@_delegate_10237":{"entryPoint":159,"id":10237,"parameterSlots":1,"returnSlots":0},"@_fallback_10256":{"entryPoint":23,"id":10256,"parameterSlots":0,"returnSlots":0},"@_getImplementation_9940":{"entryPoint":null,"id":9940,"parameterSlots":0,"returnSlots":1},"@_implementation_9907":{"entryPoint":103,"id":9907,"parameterSlots":0,"returnSlots":1},"@_revert_11483":{"entryPoint":449,"id":11483,"parameterSlots":2,"returnSlots":0},"@functionDelegateCall_11371":{"entryPoint":41,"id":11371,"parameterSlots":2,"returnSlots":1},"@functionDelegateCall_11400":{"entryPoint":195,"id":11400,"parameterSlots":3,"returnSlots":1},"@getAddressSlot_11606":{"entryPoint":100,"id":11606,"parameterSlots":1,"returnSlots":1},"@isContract_11172":{"entryPoint":85,"id":11172,"parameterSlots":1,"returnSlots":1},"@verifyCallResultFromTarget_11439":{"entryPoint":315,"id":11439,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":527,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":555,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":491,"id":null,"parameterSlots":3,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1317:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"80:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"90:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"99:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"94:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"159:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"184:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"189:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"180:3:181"},"nodeType":"YulFunctionCall","src":"180:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"203:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"208:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"199:3:181"},"nodeType":"YulFunctionCall","src":"199:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"193:5:181"},"nodeType":"YulFunctionCall","src":"193:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"173:6:181"},"nodeType":"YulFunctionCall","src":"173:39:181"},"nodeType":"YulExpressionStatement","src":"173:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"120:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"123:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"117:2:181"},"nodeType":"YulFunctionCall","src":"117:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"131:19:181","statements":[{"nodeType":"YulAssignment","src":"133:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"142:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"145:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"138:3:181"},"nodeType":"YulFunctionCall","src":"138:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"133:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"113:3:181","statements":[]},"src":"109:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"242:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"247:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"238:3:181"},"nodeType":"YulFunctionCall","src":"238:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"256:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"231:6:181"},"nodeType":"YulFunctionCall","src":"231:27:181"},"nodeType":"YulExpressionStatement","src":"231:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"58:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"63:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"68:6:181","type":""}],"src":"14:250:181"},{"body":{"nodeType":"YulBlock","src":"406:150:181","statements":[{"nodeType":"YulVariableDeclaration","src":"416:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"436:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"430:5:181"},"nodeType":"YulFunctionCall","src":"430:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"420:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"491:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"499:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"487:3:181"},"nodeType":"YulFunctionCall","src":"487:17:181"},{"name":"pos","nodeType":"YulIdentifier","src":"506:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"511:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"452:34:181"},"nodeType":"YulFunctionCall","src":"452:66:181"},"nodeType":"YulExpressionStatement","src":"452:66:181"},{"nodeType":"YulAssignment","src":"527:23:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"538:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"543:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"534:3:181"},"nodeType":"YulFunctionCall","src":"534:16:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"527:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"382:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"387:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"398:3:181","type":""}],"src":"269:287:181"},{"body":{"nodeType":"YulBlock","src":"735:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"752:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"763:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"745:6:181"},"nodeType":"YulFunctionCall","src":"745:21:181"},"nodeType":"YulExpressionStatement","src":"745:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"786:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"797:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"782:3:181"},"nodeType":"YulFunctionCall","src":"782:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"802:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"775:6:181"},"nodeType":"YulFunctionCall","src":"775:30:181"},"nodeType":"YulExpressionStatement","src":"775:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"825:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"836:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"821:3:181"},"nodeType":"YulFunctionCall","src":"821:18:181"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"841:31:181","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"814:6:181"},"nodeType":"YulFunctionCall","src":"814:59:181"},"nodeType":"YulExpressionStatement","src":"814:59:181"},{"nodeType":"YulAssignment","src":"882:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"894:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"905:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"890:3:181"},"nodeType":"YulFunctionCall","src":"890:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"882:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"712:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"726:4:181","type":""}],"src":"561:353:181"},{"body":{"nodeType":"YulBlock","src":"1040:275:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1057:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1068:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1050:6:181"},"nodeType":"YulFunctionCall","src":"1050:21:181"},"nodeType":"YulExpressionStatement","src":"1050:21:181"},{"nodeType":"YulVariableDeclaration","src":"1080:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1100:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1094:5:181"},"nodeType":"YulFunctionCall","src":"1094:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1084:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1127:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1138:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1123:3:181"},"nodeType":"YulFunctionCall","src":"1123:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"1143:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1116:6:181"},"nodeType":"YulFunctionCall","src":"1116:34:181"},"nodeType":"YulExpressionStatement","src":"1116:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1198:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1206:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1194:3:181"},"nodeType":"YulFunctionCall","src":"1194:15:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1215:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1226:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1211:3:181"},"nodeType":"YulFunctionCall","src":"1211:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"1231:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"1159:34:181"},"nodeType":"YulFunctionCall","src":"1159:79:181"},"nodeType":"YulExpressionStatement","src":"1159:79:181"},{"nodeType":"YulAssignment","src":"1247:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1263:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1282:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1290:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1278:3:181"},"nodeType":"YulFunctionCall","src":"1278:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1299:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1295:3:181"},"nodeType":"YulFunctionCall","src":"1295:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1274:3:181"},"nodeType":"YulFunctionCall","src":"1274:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1259:3:181"},"nodeType":"YulFunctionCall","src":"1259:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"1306:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1255:3:181"},"nodeType":"YulFunctionCall","src":"1255:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1247:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1009:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1020:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1031:4:181","type":""}],"src":"919:396:181"}]},"contents":"{\n    { }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory_with_cleanup(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"60806040523661001357610011610017565b005b6100115b610027610022610067565b61009f565b565b606061004e838360405180606001604052806027815260200161025f602791396100c3565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100be573d6000f35b3d6000fd5b6060600080856001600160a01b0316856040516100e0919061020f565b600060405180830381855af49150503d806000811461011b576040519150601f19603f3d011682016040523d82523d6000602084013e610120565b606091505b50915091506101318683838761013b565b9695505050505050565b606083156101af5782516000036101a8576001600160a01b0385163b6101a85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b50816101b9565b6101b983836101c1565b949350505050565b8151156101d15781518083602001fd5b8060405162461bcd60e51b815260040161019f919061022b565b60005b838110156102065781810151838201526020016101ee565b50506000910152565b600082516102218184602087016101eb565b9190910192915050565b602081526000825180602084015261024a8160408501602087016101eb565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220687bc65f742577afa32edc32468487a306093fad2f395880fa5ffa4efc5fdd6064736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x17 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11 JUMPDEST PUSH2 0x27 PUSH2 0x22 PUSH2 0x67 JUMP JUMPDEST PUSH2 0x9F JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH2 0x4E DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25F PUSH1 0x27 SWAP2 CODECOPY PUSH2 0xC3 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9A PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0xBE JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH2 0xE0 SWAP2 SWAP1 PUSH2 0x20F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x11B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x120 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x131 DUP7 DUP4 DUP4 DUP8 PUSH2 0x13B JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1AF JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x1A8 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x1A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP2 PUSH2 0x1B9 JUMP JUMPDEST PUSH2 0x1B9 DUP4 DUP4 PUSH2 0x1C1 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x1D1 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x19F SWAP2 SWAP1 PUSH2 0x22B JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x206 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1EE JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x221 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1EB JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x24A DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x1EB JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x70667358221220687BC6 0x5F PUSH21 0x2577AFA32EDC32468487A306093FAD2F395880FA5F STATICCALL 0x4E 0xFC 0x5F 0xDD PUSH1 0x64 PUSH20 0x6F6C634300081100330000000000000000000000 ","sourceMap":"567:723:45:-:0;;;;;;2898:11:47;:9;:11::i;:::-;567:723:45;;2675:11:47;2322:110;2397:28;2407:17;:15;:17::i;:::-;2397:9;:28::i;:::-;2322:110::o;6469:198:57:-;6552:12;6583:77;6604:6;6612:4;6583:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6576:84;6469:198;-1:-1:-1;;;6469:198:57:o;1175:320::-;-1:-1:-1;;;;;1465:19:57;;:23;;;1175:320::o;1614:190:60:-;1784:4;1614:190::o;1148:140:45:-;1215:12;1246:35;1030:66:46;1380:54;-1:-1:-1;;;;;1380:54:46;;1301:140;1246:35:45;1239:42;;1148:140;:::o;948:895:47:-;1286:14;1283:1;1280;1267:34;1500:1;1497;1481:14;1478:1;1462:14;1455:5;1442:60;1576:16;1573:1;1570;1555:38;1614:6;1681:66;;;;1796:16;1793:1;1786:27;1681:66;1716:16;1713:1;1706:27;6853:325:57;6994:12;7019;7033:23;7060:6;-1:-1:-1;;;;;7060:19:57;7080:4;7060:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7018:67;;;;7102:69;7129:6;7137:7;7146:10;7158:12;7102:26;:69::i;:::-;7095:76;6853:325;-1:-1:-1;;;;;;6853:325:57:o;7466:628::-;7646:12;7674:7;7670:418;;;7701:10;:17;7722:1;7701:22;7697:286;;-1:-1:-1;;;;;1465:19:57;;;7908:60;;;;-1:-1:-1;;;7908:60:57;;763:2:181;7908:60:57;;;745:21:181;802:2;782:18;;;775:30;841:31;821:18;;;814:59;890:18;;7908:60:57;;;;;;;;;-1:-1:-1;8003:10:57;7996:17;;7670:418;8044:33;8052:10;8064:12;8044:7;:33::i;:::-;7466:628;;;;;;:::o;8616:540::-;8775:17;;:21;8771:379;;9003:10;8997:17;9059:15;9046:10;9042:2;9038:19;9031:44;8771:379;9126:12;9119:20;;-1:-1:-1;;;9119:20:57;;;;;;;;:::i;14:250:181:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:181;238:16;;231:27;14:250::o;269:287::-;398:3;436:6;430:13;452:66;511:6;506:3;499:4;491:6;487:17;452:66;:::i;:::-;534:16;;;;;269:287;-1:-1:-1;;269:287:181:o;919:396::-;1068:2;1057:9;1050:21;1031:4;1100:6;1094:13;1143:6;1138:2;1127:9;1123:18;1116:34;1159:79;1231:6;1226:2;1215:9;1211:18;1206:2;1198:6;1194:15;1159:79;:::i;:::-;1299:2;1278:15;-1:-1:-1;;1274:29:181;1259:45;;;;1306:2;1255:54;;919:396;-1:-1:-1;;919:396:181:o"},"gasEstimates":{"creation":{"codeDepositCost":"139800","executionCost":"infinite","totalCost":"infinite"},"external":{"":"infinite"},"internal":{"_implementation()":"2156"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n    /**\\n     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n     *\\n     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n     * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n     */\\n    constructor(address _logic, bytes memory _data) payable {\\n        _upgradeToAndCall(_logic, _data, false);\\n    }\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _implementation() internal view virtual override returns (address impl) {\\n        return ERC1967Upgrade._getImplementation();\\n    }\\n}\\n\",\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n    // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n    /**\\n     * @dev Storage slot with the address of the current implementation.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _getImplementation() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeTo(address newImplementation) internal {\\n        _setImplementation(newImplementation);\\n        emit Upgraded(newImplementation);\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCall(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _upgradeTo(newImplementation);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(newImplementation, data);\\n        }\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCallUUPS(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\\n        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n            _setImplementation(newImplementation);\\n        } else {\\n            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n                require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n            } catch {\\n                revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n            }\\n            _upgradeToAndCall(newImplementation, data, forceCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Storage slot with the admin of the contract.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _getAdmin() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 admin slot.\\n     */\\n    function _setAdmin(address newAdmin) private {\\n        require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     */\\n    function _changeAdmin(address newAdmin) internal {\\n        emit AdminChanged(_getAdmin(), newAdmin);\\n        _setAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n     */\\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n    /**\\n     * @dev Emitted when the beacon is upgraded.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n\\n    /**\\n     * @dev Returns the current beacon.\\n     */\\n    function _getBeacon() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\\n     */\\n    function _setBeacon(address newBeacon) private {\\n        require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n        require(\\n            Address.isContract(IBeacon(newBeacon).implementation()),\\n            \\\"ERC1967: beacon implementation is not a contract\\\"\\n        );\\n        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n    }\\n\\n    /**\\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n     *\\n     * Emits a {BeaconUpgraded} event.\\n     */\\n    function _upgradeBeaconToAndCall(\\n        address newBeacon,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _setBeacon(newBeacon);\\n        emit BeaconUpgraded(newBeacon);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n    /**\\n     * @dev Delegates the current call to `implementation`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _delegate(address implementation) internal virtual {\\n        assembly {\\n            // Copy msg.data. We take full control of memory in this inline assembly\\n            // block because it will not return to Solidity code. We overwrite the\\n            // Solidity scratch pad at memory position 0.\\n            calldatacopy(0, 0, calldatasize())\\n\\n            // Call the implementation.\\n            // out and outsize are 0 because we don't know the size yet.\\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n            // Copy the returned data.\\n            returndatacopy(0, 0, returndatasize())\\n\\n            switch result\\n            // delegatecall returns 0 on error.\\n            case 0 {\\n                revert(0, returndatasize())\\n            }\\n            default {\\n                return(0, returndatasize())\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n     * and {_fallback} should delegate.\\n     */\\n    function _implementation() internal view virtual returns (address);\\n\\n    /**\\n     * @dev Delegates the current call to the address returned by `_implementation()`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _fallback() internal virtual {\\n        _beforeFallback();\\n        _delegate(_implementation());\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n     * function in the contract matches the call data.\\n     */\\n    fallback() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n     * is empty.\\n     */\\n    receive() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n     * call, or as part of the Solidity `fallback` or `receive` functions.\\n     *\\n     * If overridden should call `super._beforeFallback()`.\\n     */\\n    function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol":{"ERC1967Upgrade":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"}],"devdoc":{"custom:oz-upgrades-unsafe-allow":"delegatecall","details":"This abstract contract provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. _Available since v4.1._","events":{"AdminChanged(address,address)":{"details":"Emitted when the admin account has changed."},"BeaconUpgraded(address)":{"details":"Emitted when the beacon is upgraded."},"Upgraded(address)":{"details":"Emitted when the implementation is upgraded."}},"kind":"dev","methods":{},"stateVariables":{"_ADMIN_SLOT":{"details":"Storage slot with the admin of the contract. This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is validated in the constructor."},"_BEACON_SLOT":{"details":"The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor."},"_IMPLEMENTATION_SLOT":{"details":"Storage slot with the address of the current implementation. This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is validated in the constructor."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"delegatecall\",\"details\":\"This abstract contract provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. _Available since v4.1._\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"_ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is validated in the constructor.\"},\"_BEACON_SLOT\":{\"details\":\"The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\"},\"_IMPLEMENTATION_SLOT\":{\"details\":\"Storage slot with the address of the current implementation. This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is validated in the constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":\"ERC1967Upgrade\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n    // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n    /**\\n     * @dev Storage slot with the address of the current implementation.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _getImplementation() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeTo(address newImplementation) internal {\\n        _setImplementation(newImplementation);\\n        emit Upgraded(newImplementation);\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCall(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _upgradeTo(newImplementation);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(newImplementation, data);\\n        }\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCallUUPS(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\\n        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n            _setImplementation(newImplementation);\\n        } else {\\n            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n                require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n            } catch {\\n                revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n            }\\n            _upgradeToAndCall(newImplementation, data, forceCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Storage slot with the admin of the contract.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _getAdmin() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 admin slot.\\n     */\\n    function _setAdmin(address newAdmin) private {\\n        require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     */\\n    function _changeAdmin(address newAdmin) internal {\\n        emit AdminChanged(_getAdmin(), newAdmin);\\n        _setAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n     */\\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n    /**\\n     * @dev Emitted when the beacon is upgraded.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n\\n    /**\\n     * @dev Returns the current beacon.\\n     */\\n    function _getBeacon() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\\n     */\\n    function _setBeacon(address newBeacon) private {\\n        require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n        require(\\n            Address.isContract(IBeacon(newBeacon).implementation()),\\n            \\\"ERC1967: beacon implementation is not a contract\\\"\\n        );\\n        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n    }\\n\\n    /**\\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n     *\\n     * Emits a {BeaconUpgraded} event.\\n     */\\n    function _upgradeBeaconToAndCall(\\n        address newBeacon,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _setBeacon(newBeacon);\\n        emit BeaconUpgraded(newBeacon);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/proxy/Proxy.sol":{"Proxy":{"abi":[{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"details":"This abstract contract provides a fallback function that delegates all calls to another contract using the EVM instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to be specified by overriding the virtual {_implementation} function. Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a different contract through the {_delegate} function. The success and return data of the delegated call will be returned back to the caller of the proxy.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This abstract contract provides a fallback function that delegates all calls to another contract using the EVM instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to be specified by overriding the virtual {_implementation} function. Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a different contract through the {_delegate} function. The success and return data of the delegated call will be returned back to the caller of the proxy.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":\"Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n    /**\\n     * @dev Delegates the current call to `implementation`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _delegate(address implementation) internal virtual {\\n        assembly {\\n            // Copy msg.data. We take full control of memory in this inline assembly\\n            // block because it will not return to Solidity code. We overwrite the\\n            // Solidity scratch pad at memory position 0.\\n            calldatacopy(0, 0, calldatasize())\\n\\n            // Call the implementation.\\n            // out and outsize are 0 because we don't know the size yet.\\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n            // Copy the returned data.\\n            returndatacopy(0, 0, returndatasize())\\n\\n            switch result\\n            // delegatecall returns 0 on error.\\n            case 0 {\\n                revert(0, returndatasize())\\n            }\\n            default {\\n                return(0, returndatasize())\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n     * and {_fallback} should delegate.\\n     */\\n    function _implementation() internal view virtual returns (address);\\n\\n    /**\\n     * @dev Delegates the current call to the address returned by `_implementation()`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _fallback() internal virtual {\\n        _beforeFallback();\\n        _delegate(_implementation());\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n     * function in the contract matches the call data.\\n     */\\n    fallback() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n     * is empty.\\n     */\\n    receive() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n     * call, or as part of the Solidity `fallback` or `receive` functions.\\n     *\\n     * If overridden should call `super._beforeFallback()`.\\n     */\\n    function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/proxy/beacon/IBeacon.sol":{"IBeacon":{"abi":[{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"This is the interface that {BeaconProxy} expects of its beacon.","kind":"dev","methods":{"implementation()":{"details":"Must return an address that can be used as a delegate call target. {BeaconProxy} will check that this address is a contract."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"implementation()":"5c60da1b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is the interface that {BeaconProxy} expects of its beacon.\",\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Must return an address that can be used as a delegate call target. {BeaconProxy} will check that this address is a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":\"IBeacon\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol":{"ProxyAdmin":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeProxyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"}],"name":"getProxyAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"}],"name":"getProxyImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"implementation","type":"address"}],"name":"upgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeAndCall","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"details":"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.","kind":"dev","methods":{"changeProxyAdmin(address,address)":{"details":"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`."},"getProxyAdmin(address)":{"details":"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`."},"getProxyImplementation(address)":{"details":"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`."},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"upgrade(address,address)":{"details":"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`."},"upgradeAndCall(address,address,bytes)":{"details":"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_9567":{"entryPoint":null,"id":9567,"parameterSlots":0,"returnSlots":0},"@_msgSender_11496":{"entryPoint":null,"id":11496,"parameterSlots":0,"returnSlots":1},"@_transferOwnership_9655":{"entryPoint":31,"id":9655,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6106938061007e6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b506000606082860101526060601f19601f83011685010192505050939250505056fea2646970667358221220aef825e555a87c9f4815f2c68811e13e2e53301f2a9012551fc476182d4c115b64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A CALLER PUSH2 0x1F JUMP JUMPDEST PUSH2 0x6F JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x693 DUP1 PUSH2 0x7E PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9623609D GT PUSH2 0x4E JUMPI DUP1 PUSH4 0x9623609D EQ PUSH2 0x111 JUMPI DUP1 PUSH4 0x99A88EC4 EQ PUSH2 0x124 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0xF3B7DEAD EQ PUSH2 0x164 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x204E1C7A EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xBC JUMPI DUP1 PUSH4 0x7EFF275E EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xF3 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0x499 JUMP JUMPDEST PUSH2 0x184 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1 PUSH2 0x215 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1 PUSH2 0xEE CALLDATASIZE PUSH1 0x4 PUSH2 0x4BD JUMP JUMPDEST PUSH2 0x229 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA0 JUMP JUMPDEST PUSH2 0xD1 PUSH2 0x11F CALLDATASIZE PUSH1 0x4 PUSH2 0x50C JUMP JUMPDEST PUSH2 0x291 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x130 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1 PUSH2 0x13F CALLDATASIZE PUSH1 0x4 PUSH2 0x4BD JUMP JUMPDEST PUSH2 0x300 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x150 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1 PUSH2 0x15F CALLDATASIZE PUSH1 0x4 PUSH2 0x499 JUMP JUMPDEST PUSH2 0x336 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA0 PUSH2 0x17F CALLDATASIZE PUSH1 0x4 PUSH2 0x499 JUMP JUMPDEST PUSH2 0x3B4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 MLOAD PUSH2 0x1AA SWAP1 PUSH4 0x5C60DA1B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1E5 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1EA JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x20D SWAP2 SWAP1 PUSH2 0x5E2 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x21D PUSH2 0x3DA JUMP JUMPDEST PUSH2 0x227 PUSH1 0x0 PUSH2 0x434 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x231 PUSH2 0x3DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8F28397 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x8F283970 SWAP1 PUSH1 0x24 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x289 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x299 PUSH2 0x3DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x278F7943 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 CALLVALUE SWAP1 PUSH2 0x2C9 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5FF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x308 PUSH2 0x3DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1B2CE7F3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x3659CFE6 SWAP1 PUSH1 0x24 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x33E PUSH2 0x3DA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x3A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3B1 DUP2 PUSH2 0x434 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 MLOAD PUSH2 0x1AA SWAP1 PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x227 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x39F JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4B6 DUP2 PUSH2 0x484 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4DB DUP2 PUSH2 0x484 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4EB DUP2 PUSH2 0x484 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x521 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x52C DUP2 PUSH2 0x484 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x53C DUP2 PUSH2 0x484 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x559 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x56D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x57F JUMPI PUSH2 0x57F PUSH2 0x4F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x5A7 JUMPI PUSH2 0x5A7 PUSH2 0x4F6 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x5C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x4B6 DUP2 PUSH2 0x484 JUMP JUMPDEST PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 PUSH1 0x40 DUP2 DUP5 ADD MSTORE DUP4 MLOAD DUP1 PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x63B JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x60 ADD MSTORE DUP3 ADD PUSH2 0x61F JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x60 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x60 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE 0xF8 0x25 0xE5 SSTORE 0xA8 PUSH29 0x9F4815F2C68811E13E2E53301F2A9012551FC476182D4C115B64736F6C PUSH4 0x43000811 STOP CALLER ","sourceMap":"435:2404:49:-:0;;;;;;;;;;;;-1:-1:-1;936:32:38;719:10:58;936:18:38;:32::i;:::-;435:2404:49;;2433:187:38;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:38;;;-1:-1:-1;;;;;;2541:17:38;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;435:2404:49:-;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_checkOwner_9598":{"entryPoint":986,"id":9598,"parameterSlots":0,"returnSlots":0},"@_msgSender_11496":{"entryPoint":null,"id":11496,"parameterSlots":0,"returnSlots":1},"@_transferOwnership_9655":{"entryPoint":1076,"id":9655,"parameterSlots":1,"returnSlots":0},"@changeProxyAdmin_10381":{"entryPoint":553,"id":10381,"parameterSlots":2,"returnSlots":0},"@getProxyAdmin_10363":{"entryPoint":948,"id":10363,"parameterSlots":1,"returnSlots":1},"@getProxyImplementation_10329":{"entryPoint":388,"id":10329,"parameterSlots":1,"returnSlots":1},"@owner_9584":{"entryPoint":null,"id":9584,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_9612":{"entryPoint":533,"id":9612,"parameterSlots":0,"returnSlots":0},"@transferOwnership_9635":{"entryPoint":822,"id":9635,"parameterSlots":1,"returnSlots":0},"@upgradeAndCall_10423":{"entryPoint":657,"id":10423,"parameterSlots":3,"returnSlots":0},"@upgrade_10399":{"entryPoint":768,"id":10399,"parameterSlots":2,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_payable_fromMemory":{"entryPoint":1506,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$10572":{"entryPoint":1177,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$10572t_address":{"entryPoint":1213,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$10572t_addresst_bytes_memory_ptr":{"entryPoint":1292,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_packed_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":1535,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":1270,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_contract_TransparentUpgradeableProxy":{"entryPoint":1156,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:5153:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"88:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"152:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"161:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"164:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"154:6:181"},"nodeType":"YulFunctionCall","src":"154:12:181"},"nodeType":"YulExpressionStatement","src":"154:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"111:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"122:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"137:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"133:3:181"},"nodeType":"YulFunctionCall","src":"133:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"146:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"129:3:181"},"nodeType":"YulFunctionCall","src":"129:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"118:3:181"},"nodeType":"YulFunctionCall","src":"118:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"108:2:181"},"nodeType":"YulFunctionCall","src":"108:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"101:6:181"},"nodeType":"YulFunctionCall","src":"101:50:181"},"nodeType":"YulIf","src":"98:70:181"}]},"name":"validator_revert_contract_TransparentUpgradeableProxy","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"77:5:181","type":""}],"src":"14:160:181"},{"body":{"nodeType":"YulBlock","src":"286:206:181","statements":[{"body":{"nodeType":"YulBlock","src":"332:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"341:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"344:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"334:6:181"},"nodeType":"YulFunctionCall","src":"334:12:181"},"nodeType":"YulExpressionStatement","src":"334:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"307:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"316:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"303:3:181"},"nodeType":"YulFunctionCall","src":"303:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"328:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"299:3:181"},"nodeType":"YulFunctionCall","src":"299:32:181"},"nodeType":"YulIf","src":"296:52:181"},{"nodeType":"YulVariableDeclaration","src":"357:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"383:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"370:12:181"},"nodeType":"YulFunctionCall","src":"370:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"361:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"456:5:181"}],"functionName":{"name":"validator_revert_contract_TransparentUpgradeableProxy","nodeType":"YulIdentifier","src":"402:53:181"},"nodeType":"YulFunctionCall","src":"402:60:181"},"nodeType":"YulExpressionStatement","src":"402:60:181"},{"nodeType":"YulAssignment","src":"471:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"481:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"471:6:181"}]}]},"name":"abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$10572","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"252:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"263:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"275:6:181","type":""}],"src":"179:313:181"},{"body":{"nodeType":"YulBlock","src":"598:102:181","statements":[{"nodeType":"YulAssignment","src":"608:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"620:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"631:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"616:3:181"},"nodeType":"YulFunctionCall","src":"616:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"608:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"650:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"665:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"681:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"686:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"677:3:181"},"nodeType":"YulFunctionCall","src":"677:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"690:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"673:3:181"},"nodeType":"YulFunctionCall","src":"673:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"661:3:181"},"nodeType":"YulFunctionCall","src":"661:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"643:6:181"},"nodeType":"YulFunctionCall","src":"643:51:181"},"nodeType":"YulExpressionStatement","src":"643:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"567:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"578:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"589:4:181","type":""}],"src":"497:203:181"},{"body":{"nodeType":"YulBlock","src":"829:359:181","statements":[{"body":{"nodeType":"YulBlock","src":"875:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"884:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"887:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"877:6:181"},"nodeType":"YulFunctionCall","src":"877:12:181"},"nodeType":"YulExpressionStatement","src":"877:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"850:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"859:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"846:3:181"},"nodeType":"YulFunctionCall","src":"846:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"871:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"842:3:181"},"nodeType":"YulFunctionCall","src":"842:32:181"},"nodeType":"YulIf","src":"839:52:181"},{"nodeType":"YulVariableDeclaration","src":"900:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"926:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"913:12:181"},"nodeType":"YulFunctionCall","src":"913:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"904:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"999:5:181"}],"functionName":{"name":"validator_revert_contract_TransparentUpgradeableProxy","nodeType":"YulIdentifier","src":"945:53:181"},"nodeType":"YulFunctionCall","src":"945:60:181"},"nodeType":"YulExpressionStatement","src":"945:60:181"},{"nodeType":"YulAssignment","src":"1014:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1024:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1014:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1038:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1070:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1081:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1066:3:181"},"nodeType":"YulFunctionCall","src":"1066:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1053:12:181"},"nodeType":"YulFunctionCall","src":"1053:32:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1042:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1148:7:181"}],"functionName":{"name":"validator_revert_contract_TransparentUpgradeableProxy","nodeType":"YulIdentifier","src":"1094:53:181"},"nodeType":"YulFunctionCall","src":"1094:62:181"},"nodeType":"YulExpressionStatement","src":"1094:62:181"},{"nodeType":"YulAssignment","src":"1165:17:181","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1175:7:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1165:6:181"}]}]},"name":"abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$10572t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"787:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"798:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"810:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"818:6:181","type":""}],"src":"705:483:181"},{"body":{"nodeType":"YulBlock","src":"1225:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1242:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1249:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1254:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1245:3:181"},"nodeType":"YulFunctionCall","src":"1245:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1235:6:181"},"nodeType":"YulFunctionCall","src":"1235:31:181"},"nodeType":"YulExpressionStatement","src":"1235:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1282:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1285:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1275:6:181"},"nodeType":"YulFunctionCall","src":"1275:15:181"},"nodeType":"YulExpressionStatement","src":"1275:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1306:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1309:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1299:6:181"},"nodeType":"YulFunctionCall","src":"1299:15:181"},"nodeType":"YulExpressionStatement","src":"1299:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1193:127:181"},{"body":{"nodeType":"YulBlock","src":"1475:1142:181","statements":[{"body":{"nodeType":"YulBlock","src":"1521:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1530:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1533:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1523:6:181"},"nodeType":"YulFunctionCall","src":"1523:12:181"},"nodeType":"YulExpressionStatement","src":"1523:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1496:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1505:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1492:3:181"},"nodeType":"YulFunctionCall","src":"1492:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1517:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1488:3:181"},"nodeType":"YulFunctionCall","src":"1488:32:181"},"nodeType":"YulIf","src":"1485:52:181"},{"nodeType":"YulVariableDeclaration","src":"1546:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1572:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1559:12:181"},"nodeType":"YulFunctionCall","src":"1559:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1550:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1645:5:181"}],"functionName":{"name":"validator_revert_contract_TransparentUpgradeableProxy","nodeType":"YulIdentifier","src":"1591:53:181"},"nodeType":"YulFunctionCall","src":"1591:60:181"},"nodeType":"YulExpressionStatement","src":"1591:60:181"},{"nodeType":"YulAssignment","src":"1660:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1670:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1660:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1684:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1716:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1727:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1712:3:181"},"nodeType":"YulFunctionCall","src":"1712:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1699:12:181"},"nodeType":"YulFunctionCall","src":"1699:32:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1688:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1794:7:181"}],"functionName":{"name":"validator_revert_contract_TransparentUpgradeableProxy","nodeType":"YulIdentifier","src":"1740:53:181"},"nodeType":"YulFunctionCall","src":"1740:62:181"},"nodeType":"YulExpressionStatement","src":"1740:62:181"},{"nodeType":"YulAssignment","src":"1811:17:181","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1821:7:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1811:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1837:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1868:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1879:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1864:3:181"},"nodeType":"YulFunctionCall","src":"1864:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1851:12:181"},"nodeType":"YulFunctionCall","src":"1851:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1841:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1892:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1902:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1896:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1947:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1956:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1959:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1949:6:181"},"nodeType":"YulFunctionCall","src":"1949:12:181"},"nodeType":"YulExpressionStatement","src":"1949:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1935:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1943:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1932:2:181"},"nodeType":"YulFunctionCall","src":"1932:14:181"},"nodeType":"YulIf","src":"1929:34:181"},{"nodeType":"YulVariableDeclaration","src":"1972:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1986:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1997:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1982:3:181"},"nodeType":"YulFunctionCall","src":"1982:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1976:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2052:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2061:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2064:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2054:6:181"},"nodeType":"YulFunctionCall","src":"2054:12:181"},"nodeType":"YulExpressionStatement","src":"2054:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2031:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"2035:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2027:3:181"},"nodeType":"YulFunctionCall","src":"2027:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2042:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2023:3:181"},"nodeType":"YulFunctionCall","src":"2023:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2016:6:181"},"nodeType":"YulFunctionCall","src":"2016:35:181"},"nodeType":"YulIf","src":"2013:55:181"},{"nodeType":"YulVariableDeclaration","src":"2077:26:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2100:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2087:12:181"},"nodeType":"YulFunctionCall","src":"2087:16:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"2081:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2126:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2128:16:181"},"nodeType":"YulFunctionCall","src":"2128:18:181"},"nodeType":"YulExpressionStatement","src":"2128:18:181"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2118:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2122:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2115:2:181"},"nodeType":"YulFunctionCall","src":"2115:10:181"},"nodeType":"YulIf","src":"2112:36:181"},{"nodeType":"YulVariableDeclaration","src":"2157:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2171:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2167:3:181"},"nodeType":"YulFunctionCall","src":"2167:7:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"2161:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2183:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2203:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2197:5:181"},"nodeType":"YulFunctionCall","src":"2197:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2187:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2215:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2237:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2261:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"2265:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2257:3:181"},"nodeType":"YulFunctionCall","src":"2257:13:181"},{"name":"_4","nodeType":"YulIdentifier","src":"2272:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2253:3:181"},"nodeType":"YulFunctionCall","src":"2253:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"2277:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2249:3:181"},"nodeType":"YulFunctionCall","src":"2249:31:181"},{"name":"_4","nodeType":"YulIdentifier","src":"2282:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2245:3:181"},"nodeType":"YulFunctionCall","src":"2245:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2233:3:181"},"nodeType":"YulFunctionCall","src":"2233:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2219:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2345:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2347:16:181"},"nodeType":"YulFunctionCall","src":"2347:18:181"},"nodeType":"YulExpressionStatement","src":"2347:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2304:10:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2316:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2301:2:181"},"nodeType":"YulFunctionCall","src":"2301:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2324:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2336:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2321:2:181"},"nodeType":"YulFunctionCall","src":"2321:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2298:2:181"},"nodeType":"YulFunctionCall","src":"2298:46:181"},"nodeType":"YulIf","src":"2295:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2383:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2387:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2376:6:181"},"nodeType":"YulFunctionCall","src":"2376:22:181"},"nodeType":"YulExpressionStatement","src":"2376:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2414:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2422:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2407:6:181"},"nodeType":"YulFunctionCall","src":"2407:18:181"},"nodeType":"YulExpressionStatement","src":"2407:18:181"},{"body":{"nodeType":"YulBlock","src":"2471:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2480:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2483:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2473:6:181"},"nodeType":"YulFunctionCall","src":"2473:12:181"},"nodeType":"YulExpressionStatement","src":"2473:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2448:2:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2452:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2444:3:181"},"nodeType":"YulFunctionCall","src":"2444:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2457:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2440:3:181"},"nodeType":"YulFunctionCall","src":"2440:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2462:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2437:2:181"},"nodeType":"YulFunctionCall","src":"2437:33:181"},"nodeType":"YulIf","src":"2434:53:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2513:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2521:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2509:3:181"},"nodeType":"YulFunctionCall","src":"2509:15:181"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2530:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"2534:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2526:3:181"},"nodeType":"YulFunctionCall","src":"2526:11:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2539:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"2496:12:181"},"nodeType":"YulFunctionCall","src":"2496:46:181"},"nodeType":"YulExpressionStatement","src":"2496:46:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2566:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2574:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2562:3:181"},"nodeType":"YulFunctionCall","src":"2562:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"2579:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2558:3:181"},"nodeType":"YulFunctionCall","src":"2558:24:181"},{"kind":"number","nodeType":"YulLiteral","src":"2584:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2551:6:181"},"nodeType":"YulFunctionCall","src":"2551:35:181"},"nodeType":"YulExpressionStatement","src":"2551:35:181"},{"nodeType":"YulAssignment","src":"2595:16:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"2605:6:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2595:6:181"}]}]},"name":"abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$10572t_addresst_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1425:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1436:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1448:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1456:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1464:6:181","type":""}],"src":"1325:1292:181"},{"body":{"nodeType":"YulBlock","src":"2692:206:181","statements":[{"body":{"nodeType":"YulBlock","src":"2738:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2747:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2750:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2740:6:181"},"nodeType":"YulFunctionCall","src":"2740:12:181"},"nodeType":"YulExpressionStatement","src":"2740:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2713:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2722:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2709:3:181"},"nodeType":"YulFunctionCall","src":"2709:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2734:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2705:3:181"},"nodeType":"YulFunctionCall","src":"2705:32:181"},"nodeType":"YulIf","src":"2702:52:181"},{"nodeType":"YulVariableDeclaration","src":"2763:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2789:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2776:12:181"},"nodeType":"YulFunctionCall","src":"2776:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2767:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2862:5:181"}],"functionName":{"name":"validator_revert_contract_TransparentUpgradeableProxy","nodeType":"YulIdentifier","src":"2808:53:181"},"nodeType":"YulFunctionCall","src":"2808:60:181"},"nodeType":"YulExpressionStatement","src":"2808:60:181"},{"nodeType":"YulAssignment","src":"2877:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"2887:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2877:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2658:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2669:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2681:6:181","type":""}],"src":"2622:276:181"},{"body":{"nodeType":"YulBlock","src":"3094:76:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3111:3:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3120:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"3125:10:181","type":"","value":"0x5c60da1b"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3116:3:181"},"nodeType":"YulFunctionCall","src":"3116:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3104:6:181"},"nodeType":"YulFunctionCall","src":"3104:33:181"},"nodeType":"YulExpressionStatement","src":"3104:33:181"},{"nodeType":"YulAssignment","src":"3146:18:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3157:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"3162:1:181","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3153:3:181"},"nodeType":"YulFunctionCall","src":"3153:11:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"3146:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"3078:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"3086:3:181","type":""}],"src":"2903:267:181"},{"body":{"nodeType":"YulBlock","src":"3264:199:181","statements":[{"body":{"nodeType":"YulBlock","src":"3310:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3319:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3322:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3312:6:181"},"nodeType":"YulFunctionCall","src":"3312:12:181"},"nodeType":"YulExpressionStatement","src":"3312:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3285:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3294:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3281:3:181"},"nodeType":"YulFunctionCall","src":"3281:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3306:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3277:3:181"},"nodeType":"YulFunctionCall","src":"3277:32:181"},"nodeType":"YulIf","src":"3274:52:181"},{"nodeType":"YulVariableDeclaration","src":"3335:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3354:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3348:5:181"},"nodeType":"YulFunctionCall","src":"3348:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3339:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3427:5:181"}],"functionName":{"name":"validator_revert_contract_TransparentUpgradeableProxy","nodeType":"YulIdentifier","src":"3373:53:181"},"nodeType":"YulFunctionCall","src":"3373:60:181"},"nodeType":"YulExpressionStatement","src":"3373:60:181"},{"nodeType":"YulAssignment","src":"3442:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"3452:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3442:6:181"}]}]},"name":"abi_decode_tuple_t_address_payable_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3230:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3241:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3253:6:181","type":""}],"src":"3175:288:181"},{"body":{"nodeType":"YulBlock","src":"3615:496:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3632:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3647:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3663:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3668:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3659:3:181"},"nodeType":"YulFunctionCall","src":"3659:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3672:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3655:3:181"},"nodeType":"YulFunctionCall","src":"3655:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3643:3:181"},"nodeType":"YulFunctionCall","src":"3643:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3625:6:181"},"nodeType":"YulFunctionCall","src":"3625:51:181"},"nodeType":"YulExpressionStatement","src":"3625:51:181"},{"nodeType":"YulVariableDeclaration","src":"3685:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3695:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3689:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3717:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3728:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3713:3:181"},"nodeType":"YulFunctionCall","src":"3713:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3733:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3706:6:181"},"nodeType":"YulFunctionCall","src":"3706:30:181"},"nodeType":"YulExpressionStatement","src":"3706:30:181"},{"nodeType":"YulVariableDeclaration","src":"3745:27:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3765:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3759:5:181"},"nodeType":"YulFunctionCall","src":"3759:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3749:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3792:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3803:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3788:3:181"},"nodeType":"YulFunctionCall","src":"3788:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"3808:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3781:6:181"},"nodeType":"YulFunctionCall","src":"3781:34:181"},"nodeType":"YulExpressionStatement","src":"3781:34:181"},{"nodeType":"YulVariableDeclaration","src":"3824:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3833:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"3828:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3893:90:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3922:9:181"},{"name":"i","nodeType":"YulIdentifier","src":"3933:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3918:3:181"},"nodeType":"YulFunctionCall","src":"3918:17:181"},{"kind":"number","nodeType":"YulLiteral","src":"3937:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3914:3:181"},"nodeType":"YulFunctionCall","src":"3914:26:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3956:6:181"},{"name":"i","nodeType":"YulIdentifier","src":"3964:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3952:3:181"},"nodeType":"YulFunctionCall","src":"3952:14:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3968:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3948:3:181"},"nodeType":"YulFunctionCall","src":"3948:23:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3942:5:181"},"nodeType":"YulFunctionCall","src":"3942:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3907:6:181"},"nodeType":"YulFunctionCall","src":"3907:66:181"},"nodeType":"YulExpressionStatement","src":"3907:66:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3854:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"3857:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3851:2:181"},"nodeType":"YulFunctionCall","src":"3851:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3865:19:181","statements":[{"nodeType":"YulAssignment","src":"3867:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3876:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3879:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3872:3:181"},"nodeType":"YulFunctionCall","src":"3872:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"3867:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"3847:3:181","statements":[]},"src":"3843:140:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4007:9:181"},{"name":"length","nodeType":"YulIdentifier","src":"4018:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4003:3:181"},"nodeType":"YulFunctionCall","src":"4003:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"4027:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3999:3:181"},"nodeType":"YulFunctionCall","src":"3999:31:181"},{"kind":"number","nodeType":"YulLiteral","src":"4032:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3992:6:181"},"nodeType":"YulFunctionCall","src":"3992:42:181"},"nodeType":"YulExpressionStatement","src":"3992:42:181"},{"nodeType":"YulAssignment","src":"4043:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4059:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4078:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4086:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4074:3:181"},"nodeType":"YulFunctionCall","src":"4074:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4095:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4091:3:181"},"nodeType":"YulFunctionCall","src":"4091:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4070:3:181"},"nodeType":"YulFunctionCall","src":"4070:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4055:3:181"},"nodeType":"YulFunctionCall","src":"4055:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"4102:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4051:3:181"},"nodeType":"YulFunctionCall","src":"4051:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4043:4:181"}]}]},"name":"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3576:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3587:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3595:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3606:4:181","type":""}],"src":"3468:643:181"},{"body":{"nodeType":"YulBlock","src":"4290:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4307:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4318:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4300:6:181"},"nodeType":"YulFunctionCall","src":"4300:21:181"},"nodeType":"YulExpressionStatement","src":"4300:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4341:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4352:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4337:3:181"},"nodeType":"YulFunctionCall","src":"4337:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4357:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4330:6:181"},"nodeType":"YulFunctionCall","src":"4330:30:181"},"nodeType":"YulExpressionStatement","src":"4330:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4380:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4391:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4376:3:181"},"nodeType":"YulFunctionCall","src":"4376:18:181"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"4396:34:181","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4369:6:181"},"nodeType":"YulFunctionCall","src":"4369:62:181"},"nodeType":"YulExpressionStatement","src":"4369:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4451:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4462:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4447:3:181"},"nodeType":"YulFunctionCall","src":"4447:18:181"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"4467:8:181","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4440:6:181"},"nodeType":"YulFunctionCall","src":"4440:36:181"},"nodeType":"YulExpressionStatement","src":"4440:36:181"},{"nodeType":"YulAssignment","src":"4485:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4497:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4508:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4493:3:181"},"nodeType":"YulFunctionCall","src":"4493:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4485:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4267:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4281:4:181","type":""}],"src":"4116:402:181"},{"body":{"nodeType":"YulBlock","src":"4714:76:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4731:3:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4740:3:181","type":"","value":"230"},{"kind":"number","nodeType":"YulLiteral","src":"4745:10:181","type":"","value":"0x03e14691"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4736:3:181"},"nodeType":"YulFunctionCall","src":"4736:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4724:6:181"},"nodeType":"YulFunctionCall","src":"4724:33:181"},"nodeType":"YulExpressionStatement","src":"4724:33:181"},{"nodeType":"YulAssignment","src":"4766:18:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4777:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"4782:1:181","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4773:3:181"},"nodeType":"YulFunctionCall","src":"4773:11:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"4766:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"4698:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"4706:3:181","type":""}],"src":"4523:267:181"},{"body":{"nodeType":"YulBlock","src":"4969:182:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4986:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4997:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4979:6:181"},"nodeType":"YulFunctionCall","src":"4979:21:181"},"nodeType":"YulExpressionStatement","src":"4979:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5020:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5031:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5016:3:181"},"nodeType":"YulFunctionCall","src":"5016:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5036:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5009:6:181"},"nodeType":"YulFunctionCall","src":"5009:30:181"},"nodeType":"YulExpressionStatement","src":"5009:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5059:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5070:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5055:3:181"},"nodeType":"YulFunctionCall","src":"5055:18:181"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"5075:34:181","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5048:6:181"},"nodeType":"YulFunctionCall","src":"5048:62:181"},"nodeType":"YulExpressionStatement","src":"5048:62:181"},{"nodeType":"YulAssignment","src":"5119:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5131:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5142:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5127:3:181"},"nodeType":"YulFunctionCall","src":"5127:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5119:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4946:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4960:4:181","type":""}],"src":"4795:356:181"}]},"contents":"{\n    { }\n    function validator_revert_contract_TransparentUpgradeableProxy(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$10572(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_TransparentUpgradeableProxy(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$10572t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_TransparentUpgradeableProxy(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_contract_TransparentUpgradeableProxy(value_1)\n        value1 := value_1\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$10572t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_TransparentUpgradeableProxy(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_contract_TransparentUpgradeableProxy(value_1)\n        value1 := value_1\n        let offset := calldataload(add(headStart, 64))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), 0)\n        value2 := memPtr\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_TransparentUpgradeableProxy(value)\n        value0 := value\n    }\n    function abi_encode_tuple_packed_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    {\n        mstore(pos, shl(224, 0x5c60da1b))\n        end := add(pos, 4)\n    }\n    function abi_decode_tuple_t_address_payable_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_TransparentUpgradeableProxy(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        let _1 := 32\n        mstore(add(headStart, _1), 64)\n        let length := mload(value1)\n        mstore(add(headStart, 64), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 96), mload(add(add(value1, i), _1)))\n        }\n        mstore(add(add(headStart, length), 96), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    {\n        mstore(pos, shl(230, 0x03e14691))\n        end := add(pos, 4)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b506000606082860101526060601f19601f83011685010192505050939250505056fea2646970667358221220aef825e555a87c9f4815f2c68811e13e2e53301f2a9012551fc476182d4c115b64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9623609D GT PUSH2 0x4E JUMPI DUP1 PUSH4 0x9623609D EQ PUSH2 0x111 JUMPI DUP1 PUSH4 0x99A88EC4 EQ PUSH2 0x124 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0xF3B7DEAD EQ PUSH2 0x164 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x204E1C7A EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xBC JUMPI DUP1 PUSH4 0x7EFF275E EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xF3 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0x499 JUMP JUMPDEST PUSH2 0x184 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1 PUSH2 0x215 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1 PUSH2 0xEE CALLDATASIZE PUSH1 0x4 PUSH2 0x4BD JUMP JUMPDEST PUSH2 0x229 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA0 JUMP JUMPDEST PUSH2 0xD1 PUSH2 0x11F CALLDATASIZE PUSH1 0x4 PUSH2 0x50C JUMP JUMPDEST PUSH2 0x291 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x130 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1 PUSH2 0x13F CALLDATASIZE PUSH1 0x4 PUSH2 0x4BD JUMP JUMPDEST PUSH2 0x300 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x150 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1 PUSH2 0x15F CALLDATASIZE PUSH1 0x4 PUSH2 0x499 JUMP JUMPDEST PUSH2 0x336 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA0 PUSH2 0x17F CALLDATASIZE PUSH1 0x4 PUSH2 0x499 JUMP JUMPDEST PUSH2 0x3B4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 MLOAD PUSH2 0x1AA SWAP1 PUSH4 0x5C60DA1B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1E5 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1EA JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x20D SWAP2 SWAP1 PUSH2 0x5E2 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x21D PUSH2 0x3DA JUMP JUMPDEST PUSH2 0x227 PUSH1 0x0 PUSH2 0x434 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x231 PUSH2 0x3DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8F28397 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x8F283970 SWAP1 PUSH1 0x24 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x289 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x299 PUSH2 0x3DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x278F7943 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 CALLVALUE SWAP1 PUSH2 0x2C9 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5FF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x308 PUSH2 0x3DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1B2CE7F3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x3659CFE6 SWAP1 PUSH1 0x24 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x33E PUSH2 0x3DA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x3A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3B1 DUP2 PUSH2 0x434 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 MLOAD PUSH2 0x1AA SWAP1 PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x227 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x39F JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4B6 DUP2 PUSH2 0x484 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4DB DUP2 PUSH2 0x484 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4EB DUP2 PUSH2 0x484 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x521 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x52C DUP2 PUSH2 0x484 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x53C DUP2 PUSH2 0x484 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x559 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x56D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x57F JUMPI PUSH2 0x57F PUSH2 0x4F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x5A7 JUMPI PUSH2 0x5A7 PUSH2 0x4F6 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x5C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x4B6 DUP2 PUSH2 0x484 JUMP JUMPDEST PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 PUSH1 0x40 DUP2 DUP5 ADD MSTORE DUP4 MLOAD DUP1 PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x63B JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x60 ADD MSTORE DUP3 ADD PUSH2 0x61F JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x60 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x60 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE 0xF8 0x25 0xE5 SSTORE 0xA8 PUSH29 0x9F4815F2C68811E13E2E53301F2A9012551FC476182D4C115B64736F6C PUSH4 0x43000811 STOP CALLER ","sourceMap":"435:2404:49:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;635:437;;;;;;;;;;-1:-1:-1;635:437:49;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;661:32:181;;;643:51;;631:2;616:18;635:437:49;;;;;;;1831:101:38;;;;;;;;;;;;;:::i;:::-;;1825:148:49;;;;;;;;;;-1:-1:-1;1825:148:49;;;;;:::i;:::-;;:::i;1201:85:38:-;;;;;;;;;;-1:-1:-1;1247:7:38;1273:6;-1:-1:-1;;;;;1273:6:38;1201:85;;2593:244:49;;;;;;:::i;:::-;;:::i;2178:149::-;;;;;;;;;;-1:-1:-1;2178:149:49;;;;;:::i;:::-;;:::i;2081:198:38:-;;;;;;;;;;-1:-1:-1;2081:198:38;;;;;:::i;:::-;;:::i;1232:419:49:-;;;;;;;;;;-1:-1:-1;1232:419:49;;;;;:::i;:::-;;:::i;635:437::-;731:7;908:12;922:23;957:5;-1:-1:-1;;;;;949:25:49;:40;;;;-1:-1:-1;;;3104:33:181;;3162:1;3153:11;;2903:267;949:40:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;907:82;;;;1007:7;999:16;;;;;;1043:10;1032:33;;;;;;;;;;;;:::i;:::-;1025:40;635:437;-1:-1:-1;;;;635:437:49:o;1831:101:38:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;1825:148:49:-;1094:13:38;:11;:13::i;:::-;1939:27:49::1;::::0;-1:-1:-1;;;1939:27:49;;-1:-1:-1;;;;;661:32:181;;;1939:27:49::1;::::0;::::1;643:51:181::0;1939:17:49;::::1;::::0;::::1;::::0;616:18:181;;1939:27:49::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1825:148:::0;;:::o;2593:244::-;1094:13:38;:11;:13::i;:::-;2768:62:49::1;::::0;-1:-1:-1;;;2768:62:49;;-1:-1:-1;;;;;2768:22:49;::::1;::::0;::::1;::::0;2798:9:::1;::::0;2768:62:::1;::::0;2809:14;;2825:4;;2768:62:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;2593:244:::0;;;:::o;2178:149::-;1094:13:38;:11;:13::i;:::-;2289:31:49::1;::::0;-1:-1:-1;;;2289:31:49;;-1:-1:-1;;;;;661:32:181;;;2289:31:49::1;::::0;::::1;643:51:181::0;2289:15:49;::::1;::::0;::::1;::::0;616:18:181;;2289:31:49::1;497:203:181::0;2081:198:38;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:38;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:38;;4318:2:181;2161:73:38::1;::::0;::::1;4300:21:181::0;4357:2;4337:18;;;4330:30;4396:34;4376:18;;;4369:62;-1:-1:-1;;;4447:18:181;;;4440:36;4493:19;;2161:73:38::1;;;;;;;;;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;1232:419:49:-;1319:7;1487:12;1501:23;1536:5;-1:-1:-1;;;;;1528:25:49;:40;;;;-1:-1:-1;;;4724:33:181;;4782:1;4773:11;;4523:267;1359:130:38;1247:7;1273:6;-1:-1:-1;;;;;1273:6:38;719:10:58;1422:23:38;1414:68;;;;-1:-1:-1;;;1414:68:38;;4997:2:181;1414:68:38;;;4979:21:181;;;5016:18;;;5009:30;5075:34;5055:18;;;5048:62;5127:18;;1414:68:38;4795:356:181;2433:187:38;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:38;;;-1:-1:-1;;;;;;2541:17:38;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;14:160:181:-;-1:-1:-1;;;;;118:31:181;;108:42;;98:70;;164:1;161;154:12;179:313;275:6;328:2;316:9;307:7;303:23;299:32;296:52;;;344:1;341;334:12;296:52;383:9;370:23;402:60;456:5;402:60;:::i;:::-;481:5;179:313;-1:-1:-1;;;179:313:181:o;705:483::-;810:6;818;871:2;859:9;850:7;846:23;842:32;839:52;;;887:1;884;877:12;839:52;926:9;913:23;945:60;999:5;945:60;:::i;:::-;1024:5;-1:-1:-1;1081:2:181;1066:18;;1053:32;1094:62;1053:32;1094:62;:::i;:::-;1175:7;1165:17;;;705:483;;;;;:::o;1193:127::-;1254:10;1249:3;1245:20;1242:1;1235:31;1285:4;1282:1;1275:15;1309:4;1306:1;1299:15;1325:1292;1448:6;1456;1464;1517:2;1505:9;1496:7;1492:23;1488:32;1485:52;;;1533:1;1530;1523:12;1485:52;1572:9;1559:23;1591:60;1645:5;1591:60;:::i;:::-;1670:5;-1:-1:-1;1727:2:181;1712:18;;1699:32;1740:62;1699:32;1740:62;:::i;:::-;1821:7;-1:-1:-1;1879:2:181;1864:18;;1851:32;1902:18;1932:14;;;1929:34;;;1959:1;1956;1949:12;1929:34;1997:6;1986:9;1982:22;1972:32;;2042:7;2035:4;2031:2;2027:13;2023:27;2013:55;;2064:1;2061;2054:12;2013:55;2100:2;2087:16;2122:2;2118;2115:10;2112:36;;;2128:18;;:::i;:::-;2203:2;2197:9;2171:2;2257:13;;-1:-1:-1;;2253:22:181;;;2277:2;2249:31;2245:40;2233:53;;;2301:18;;;2321:22;;;2298:46;2295:72;;;2347:18;;:::i;:::-;2387:10;2383:2;2376:22;2422:2;2414:6;2407:18;2462:7;2457:2;2452;2448;2444:11;2440:20;2437:33;2434:53;;;2483:1;2480;2473:12;2434:53;2539:2;2534;2530;2526:11;2521:2;2513:6;2509:15;2496:46;2584:1;2579:2;2574;2566:6;2562:15;2558:24;2551:35;2605:6;2595:16;;;;;;;1325:1292;;;;;:::o;3175:288::-;3253:6;3306:2;3294:9;3285:7;3281:23;3277:32;3274:52;;;3322:1;3319;3312:12;3274:52;3354:9;3348:16;3373:60;3427:5;3373:60;:::i;3468:643::-;3672:1;3668;3663:3;3659:11;3655:19;3647:6;3643:32;3632:9;3625:51;3606:4;3695:2;3733;3728;3717:9;3713:18;3706:30;3765:6;3759:13;3808:6;3803:2;3792:9;3788:18;3781:34;3833:1;3843:140;3857:6;3854:1;3851:13;3843:140;;;3952:14;;;3948:23;;3942:30;3918:17;;;3937:2;3914:26;3907:66;3872:10;;3843:140;;;3847:3;4032:1;4027:2;4018:6;4007:9;4003:22;3999:31;3992:42;4102:2;4095;4091:7;4086:2;4078:6;4074:15;4070:29;4059:9;4055:45;4051:54;4043:62;;;;3468:643;;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"336600","executionCost":"26215","totalCost":"362815"},"external":{"changeProxyAdmin(address,address)":"infinite","getProxyAdmin(address)":"infinite","getProxyImplementation(address)":"infinite","owner()":"2386","renounceOwnership()":"infinite","transferOwnership(address)":"infinite","upgrade(address,address)":"infinite","upgradeAndCall(address,address,bytes)":"infinite"}},"methodIdentifiers":{"changeProxyAdmin(address,address)":"7eff275e","getProxyAdmin(address)":"f3b7dead","getProxyImplementation(address)":"204e1c7a","owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","upgrade(address,address)":"99a88ec4","upgradeAndCall(address,address,bytes)":"9623609d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\",\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n    /**\\n     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n     *\\n     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n     * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n     */\\n    constructor(address _logic, bytes memory _data) payable {\\n        _upgradeToAndCall(_logic, _data, false);\\n    }\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _implementation() internal view virtual override returns (address impl) {\\n        return ERC1967Upgrade._getImplementation();\\n    }\\n}\\n\",\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n    // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n    /**\\n     * @dev Storage slot with the address of the current implementation.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _getImplementation() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeTo(address newImplementation) internal {\\n        _setImplementation(newImplementation);\\n        emit Upgraded(newImplementation);\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCall(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _upgradeTo(newImplementation);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(newImplementation, data);\\n        }\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCallUUPS(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\\n        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n            _setImplementation(newImplementation);\\n        } else {\\n            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n                require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n            } catch {\\n                revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n            }\\n            _upgradeToAndCall(newImplementation, data, forceCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Storage slot with the admin of the contract.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _getAdmin() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 admin slot.\\n     */\\n    function _setAdmin(address newAdmin) private {\\n        require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     */\\n    function _changeAdmin(address newAdmin) internal {\\n        emit AdminChanged(_getAdmin(), newAdmin);\\n        _setAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n     */\\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n    /**\\n     * @dev Emitted when the beacon is upgraded.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n\\n    /**\\n     * @dev Returns the current beacon.\\n     */\\n    function _getBeacon() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\\n     */\\n    function _setBeacon(address newBeacon) private {\\n        require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n        require(\\n            Address.isContract(IBeacon(newBeacon).implementation()),\\n            \\\"ERC1967: beacon implementation is not a contract\\\"\\n        );\\n        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n    }\\n\\n    /**\\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n     *\\n     * Emits a {BeaconUpgraded} event.\\n     */\\n    function _upgradeBeaconToAndCall(\\n        address newBeacon,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _setBeacon(newBeacon);\\n        emit BeaconUpgraded(newBeacon);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n    /**\\n     * @dev Delegates the current call to `implementation`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _delegate(address implementation) internal virtual {\\n        assembly {\\n            // Copy msg.data. We take full control of memory in this inline assembly\\n            // block because it will not return to Solidity code. We overwrite the\\n            // Solidity scratch pad at memory position 0.\\n            calldatacopy(0, 0, calldatasize())\\n\\n            // Call the implementation.\\n            // out and outsize are 0 because we don't know the size yet.\\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n            // Copy the returned data.\\n            returndatacopy(0, 0, returndatasize())\\n\\n            switch result\\n            // delegatecall returns 0 on error.\\n            case 0 {\\n                revert(0, returndatasize())\\n            }\\n            default {\\n                return(0, returndatasize())\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n     * and {_fallback} should delegate.\\n     */\\n    function _implementation() internal view virtual returns (address);\\n\\n    /**\\n     * @dev Delegates the current call to the address returned by `_implementation()`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _fallback() internal virtual {\\n        _beforeFallback();\\n        _delegate(_implementation());\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n     * function in the contract matches the call data.\\n     */\\n    fallback() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n     * is empty.\\n     */\\n    receive() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n     * call, or as part of the Solidity `fallback` or `receive` functions.\\n     *\\n     * If overridden should call `super._beforeFallback()`.\\n     */\\n    function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n    /**\\n     * @dev Returns the current implementation of `proxy`.\\n     *\\n     * Requirements:\\n     *\\n     * - This contract must be the admin of `proxy`.\\n     */\\n    function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n        // We need to manually run the static call since the getter cannot be flagged as view\\n        // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n        (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n        require(success);\\n        return abi.decode(returndata, (address));\\n    }\\n\\n    /**\\n     * @dev Returns the current admin of `proxy`.\\n     *\\n     * Requirements:\\n     *\\n     * - This contract must be the admin of `proxy`.\\n     */\\n    function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n        // We need to manually run the static call since the getter cannot be flagged as view\\n        // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n        (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n        require(success);\\n        return abi.decode(returndata, (address));\\n    }\\n\\n    /**\\n     * @dev Changes the admin of `proxy` to `newAdmin`.\\n     *\\n     * Requirements:\\n     *\\n     * - This contract must be the current admin of `proxy`.\\n     */\\n    function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n        proxy.changeAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n     *\\n     * Requirements:\\n     *\\n     * - This contract must be the admin of `proxy`.\\n     */\\n    function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n        proxy.upgradeTo(implementation);\\n    }\\n\\n    /**\\n     * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n     * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n     *\\n     * Requirements:\\n     *\\n     * - This contract must be the admin of `proxy`.\\n     */\\n    function upgradeAndCall(\\n        TransparentUpgradeableProxy proxy,\\n        address implementation,\\n        bytes memory data\\n    ) public payable virtual onlyOwner {\\n        proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n    }\\n}\\n\",\"keccak256\":\"0x33b8603bfbef7f33d9308b79c79aa3db7eb19525fd1addd764285e834ca275d7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n    /**\\n     * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n     * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n     */\\n    constructor(\\n        address _logic,\\n        address admin_,\\n        bytes memory _data\\n    ) payable ERC1967Proxy(_logic, _data) {\\n        _changeAdmin(admin_);\\n    }\\n\\n    /**\\n     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n     */\\n    modifier ifAdmin() {\\n        if (msg.sender == _getAdmin()) {\\n            _;\\n        } else {\\n            _fallback();\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the current admin.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n     *\\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n     */\\n    function admin() external ifAdmin returns (address admin_) {\\n        admin_ = _getAdmin();\\n    }\\n\\n    /**\\n     * @dev Returns the current implementation.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n     *\\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n     */\\n    function implementation() external ifAdmin returns (address implementation_) {\\n        implementation_ = _implementation();\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n     */\\n    function changeAdmin(address newAdmin) external virtual ifAdmin {\\n        _changeAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev Upgrade the implementation of the proxy.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n     */\\n    function upgradeTo(address newImplementation) external ifAdmin {\\n        _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n    }\\n\\n    /**\\n     * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n     * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n     * proxied contract.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n     */\\n    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n        _upgradeToAndCall(newImplementation, data, true);\\n    }\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _admin() internal view virtual returns (address) {\\n        return _getAdmin();\\n    }\\n\\n    /**\\n     * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n     */\\n    function _beforeFallback() internal virtual override {\\n        require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n        super._beforeFallback();\\n    }\\n}\\n\",\"keccak256\":\"0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":9551,"contract":"@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol:ProxyAdmin","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol":{"TransparentUpgradeableProxy":{"abi":[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"admin_","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"admin_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"implementation_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"details":"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.","kind":"dev","methods":{"admin()":{"details":"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`"},"changeAdmin(address)":{"details":"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}."},"constructor":{"details":"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}."},"implementation()":{"details":"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`"},"upgradeTo(address)":{"details":"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}."},"upgradeToAndCall(address,bytes)":{"details":"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_10449":{"entryPoint":null,"id":10449,"parameterSlots":3,"returnSlots":0},"@_9895":{"entryPoint":null,"id":9895,"parameterSlots":2,"returnSlots":0},"@_changeAdmin_10129":{"entryPoint":138,"id":10129,"parameterSlots":1,"returnSlots":0},"@_getAdmin_10086":{"entryPoint":342,"id":10086,"parameterSlots":0,"returnSlots":1},"@_revert_11483":{"entryPoint":1041,"id":11483,"parameterSlots":2,"returnSlots":0},"@_setAdmin_10112":{"entryPoint":399,"id":10112,"parameterSlots":1,"returnSlots":0},"@_setImplementation_9964":{"entryPoint":580,"id":9964,"parameterSlots":1,"returnSlots":0},"@_upgradeToAndCall_10009":{"entryPoint":77,"id":10009,"parameterSlots":3,"returnSlots":0},"@_upgradeTo_9979":{"entryPoint":229,"id":9979,"parameterSlots":1,"returnSlots":0},"@functionDelegateCall_11371":{"entryPoint":295,"id":11371,"parameterSlots":2,"returnSlots":1},"@functionDelegateCall_11400":{"entryPoint":760,"id":11400,"parameterSlots":3,"returnSlots":1},"@getAddressSlot_11606":{"entryPoint":887,"id":11606,"parameterSlots":1,"returnSlots":1},"@isContract_11172":{"entryPoint":890,"id":11172,"parameterSlots":1,"returnSlots":1},"@verifyCallResultFromTarget_11439":{"entryPoint":905,"id":11439,"parameterSlots":4,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":1086,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory":{"entryPoint":1175,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":1399,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1429,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":1137,"id":null,"parameterSlots":3,"returnSlots":0},"panic_error_0x41":{"entryPoint":1115,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3832:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"74:117:181","statements":[{"nodeType":"YulAssignment","src":"84:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"99:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"93:5:181"},"nodeType":"YulFunctionCall","src":"93:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"84:5:181"}]},{"body":{"nodeType":"YulBlock","src":"169:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"178:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"181:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"171:6:181"},"nodeType":"YulFunctionCall","src":"171:12:181"},"nodeType":"YulExpressionStatement","src":"171:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"128:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"139:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"154:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"150:3:181"},"nodeType":"YulFunctionCall","src":"150:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"163:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"146:3:181"},"nodeType":"YulFunctionCall","src":"146:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"135:3:181"},"nodeType":"YulFunctionCall","src":"135:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"125:2:181"},"nodeType":"YulFunctionCall","src":"125:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"118:6:181"},"nodeType":"YulFunctionCall","src":"118:50:181"},"nodeType":"YulIf","src":"115:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"53:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"64:5:181","type":""}],"src":"14:177:181"},{"body":{"nodeType":"YulBlock","src":"228:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"245:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"252:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"257:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"248:3:181"},"nodeType":"YulFunctionCall","src":"248:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"238:6:181"},"nodeType":"YulFunctionCall","src":"238:31:181"},"nodeType":"YulExpressionStatement","src":"238:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"285:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"288:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"278:6:181"},"nodeType":"YulFunctionCall","src":"278:15:181"},"nodeType":"YulExpressionStatement","src":"278:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"309:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"312:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"302:6:181"},"nodeType":"YulFunctionCall","src":"302:15:181"},"nodeType":"YulExpressionStatement","src":"302:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"196:127:181"},{"body":{"nodeType":"YulBlock","src":"394:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"404:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"413:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"408:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"473:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"498:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"503:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"494:3:181"},"nodeType":"YulFunctionCall","src":"494:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"517:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"522:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"513:3:181"},"nodeType":"YulFunctionCall","src":"513:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"507:5:181"},"nodeType":"YulFunctionCall","src":"507:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"487:6:181"},"nodeType":"YulFunctionCall","src":"487:39:181"},"nodeType":"YulExpressionStatement","src":"487:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"434:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"437:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"431:2:181"},"nodeType":"YulFunctionCall","src":"431:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"445:19:181","statements":[{"nodeType":"YulAssignment","src":"447:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"456:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"452:3:181"},"nodeType":"YulFunctionCall","src":"452:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"447:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"427:3:181","statements":[]},"src":"423:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"556:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"561:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"552:3:181"},"nodeType":"YulFunctionCall","src":"552:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"570:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"545:6:181"},"nodeType":"YulFunctionCall","src":"545:27:181"},"nodeType":"YulExpressionStatement","src":"545:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"372:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"377:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"382:6:181","type":""}],"src":"328:250:181"},{"body":{"nodeType":"YulBlock","src":"707:942:181","statements":[{"body":{"nodeType":"YulBlock","src":"753:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"762:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"765:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"755:6:181"},"nodeType":"YulFunctionCall","src":"755:12:181"},"nodeType":"YulExpressionStatement","src":"755:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"728:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"737:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"724:3:181"},"nodeType":"YulFunctionCall","src":"724:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"749:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"720:3:181"},"nodeType":"YulFunctionCall","src":"720:32:181"},"nodeType":"YulIf","src":"717:52:181"},{"nodeType":"YulAssignment","src":"778:50:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"818:9:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"788:29:181"},"nodeType":"YulFunctionCall","src":"788:40:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"778:6:181"}]},{"nodeType":"YulAssignment","src":"837:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"881:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"892:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"877:3:181"},"nodeType":"YulFunctionCall","src":"877:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"847:29:181"},"nodeType":"YulFunctionCall","src":"847:49:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"837:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"905:39:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"929:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"940:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"925:3:181"},"nodeType":"YulFunctionCall","src":"925:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"919:5:181"},"nodeType":"YulFunctionCall","src":"919:25:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"909:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"953:28:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"971:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"975:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"967:3:181"},"nodeType":"YulFunctionCall","src":"967:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"979:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"963:3:181"},"nodeType":"YulFunctionCall","src":"963:18:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"957:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1008:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1017:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1020:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1010:6:181"},"nodeType":"YulFunctionCall","src":"1010:12:181"},"nodeType":"YulExpressionStatement","src":"1010:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"996:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1004:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"993:2:181"},"nodeType":"YulFunctionCall","src":"993:14:181"},"nodeType":"YulIf","src":"990:34:181"},{"nodeType":"YulVariableDeclaration","src":"1033:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1047:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1058:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1043:3:181"},"nodeType":"YulFunctionCall","src":"1043:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1037:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1113:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1122:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1125:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1115:6:181"},"nodeType":"YulFunctionCall","src":"1115:12:181"},"nodeType":"YulExpressionStatement","src":"1115:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1092:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1096:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1088:3:181"},"nodeType":"YulFunctionCall","src":"1088:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1103:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1084:3:181"},"nodeType":"YulFunctionCall","src":"1084:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1077:6:181"},"nodeType":"YulFunctionCall","src":"1077:35:181"},"nodeType":"YulIf","src":"1074:55:181"},{"nodeType":"YulVariableDeclaration","src":"1138:19:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1154:2:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1148:5:181"},"nodeType":"YulFunctionCall","src":"1148:9:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"1142:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1180:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1182:16:181"},"nodeType":"YulFunctionCall","src":"1182:18:181"},"nodeType":"YulExpressionStatement","src":"1182:18:181"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1172:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1176:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1169:2:181"},"nodeType":"YulFunctionCall","src":"1169:10:181"},"nodeType":"YulIf","src":"1166:36:181"},{"nodeType":"YulVariableDeclaration","src":"1211:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1225:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1221:3:181"},"nodeType":"YulFunctionCall","src":"1221:7:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"1215:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1237:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1257:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1251:5:181"},"nodeType":"YulFunctionCall","src":"1251:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1241:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1269:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1291:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1315:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1319:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1311:3:181"},"nodeType":"YulFunctionCall","src":"1311:13:181"},{"name":"_4","nodeType":"YulIdentifier","src":"1326:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1307:3:181"},"nodeType":"YulFunctionCall","src":"1307:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"1331:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1303:3:181"},"nodeType":"YulFunctionCall","src":"1303:31:181"},{"name":"_4","nodeType":"YulIdentifier","src":"1336:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1299:3:181"},"nodeType":"YulFunctionCall","src":"1299:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1287:3:181"},"nodeType":"YulFunctionCall","src":"1287:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1273:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1399:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1401:16:181"},"nodeType":"YulFunctionCall","src":"1401:18:181"},"nodeType":"YulExpressionStatement","src":"1401:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1358:10:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1370:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1355:2:181"},"nodeType":"YulFunctionCall","src":"1355:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1378:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1390:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1375:2:181"},"nodeType":"YulFunctionCall","src":"1375:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1352:2:181"},"nodeType":"YulFunctionCall","src":"1352:46:181"},"nodeType":"YulIf","src":"1349:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1437:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1441:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1430:6:181"},"nodeType":"YulFunctionCall","src":"1430:22:181"},"nodeType":"YulExpressionStatement","src":"1430:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1468:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1476:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1461:6:181"},"nodeType":"YulFunctionCall","src":"1461:18:181"},"nodeType":"YulExpressionStatement","src":"1461:18:181"},{"body":{"nodeType":"YulBlock","src":"1525:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1534:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1537:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1527:6:181"},"nodeType":"YulFunctionCall","src":"1527:12:181"},"nodeType":"YulExpressionStatement","src":"1527:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1502:2:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1506:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1498:3:181"},"nodeType":"YulFunctionCall","src":"1498:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1511:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1494:3:181"},"nodeType":"YulFunctionCall","src":"1494:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1516:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1491:2:181"},"nodeType":"YulFunctionCall","src":"1491:33:181"},"nodeType":"YulIf","src":"1488:53:181"},{"expression":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1589:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1593:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1585:3:181"},"nodeType":"YulFunctionCall","src":"1585:11:181"},{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1602:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1610:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1598:3:181"},"nodeType":"YulFunctionCall","src":"1598:15:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1615:2:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"1550:34:181"},"nodeType":"YulFunctionCall","src":"1550:68:181"},"nodeType":"YulExpressionStatement","src":"1550:68:181"},{"nodeType":"YulAssignment","src":"1627:16:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1637:6:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1627:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"657:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"668:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"680:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"688:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"696:6:181","type":""}],"src":"583:1066:181"},{"body":{"nodeType":"YulBlock","src":"1783:175:181","statements":[{"nodeType":"YulAssignment","src":"1793:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1805:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1816:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1801:3:181"},"nodeType":"YulFunctionCall","src":"1801:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1793:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"1828:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1846:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1851:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1842:3:181"},"nodeType":"YulFunctionCall","src":"1842:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1855:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1838:3:181"},"nodeType":"YulFunctionCall","src":"1838:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1832:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1873:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1888:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1896:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1884:3:181"},"nodeType":"YulFunctionCall","src":"1884:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1866:6:181"},"nodeType":"YulFunctionCall","src":"1866:34:181"},"nodeType":"YulExpressionStatement","src":"1866:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1920:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1931:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1916:3:181"},"nodeType":"YulFunctionCall","src":"1916:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"1940:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1948:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1936:3:181"},"nodeType":"YulFunctionCall","src":"1936:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1909:6:181"},"nodeType":"YulFunctionCall","src":"1909:43:181"},"nodeType":"YulExpressionStatement","src":"1909:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1744:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1755:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1763:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1774:4:181","type":""}],"src":"1654:304:181"},{"body":{"nodeType":"YulBlock","src":"2137:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2154:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2165:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2147:6:181"},"nodeType":"YulFunctionCall","src":"2147:21:181"},"nodeType":"YulExpressionStatement","src":"2147:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2188:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2199:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2184:3:181"},"nodeType":"YulFunctionCall","src":"2184:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2204:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2177:6:181"},"nodeType":"YulFunctionCall","src":"2177:30:181"},"nodeType":"YulExpressionStatement","src":"2177:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2227:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2238:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2223:3:181"},"nodeType":"YulFunctionCall","src":"2223:18:181"},{"hexValue":"455243313936373a206e65772061646d696e20697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"2243:34:181","type":"","value":"ERC1967: new admin is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2216:6:181"},"nodeType":"YulFunctionCall","src":"2216:62:181"},"nodeType":"YulExpressionStatement","src":"2216:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2298:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2309:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2294:3:181"},"nodeType":"YulFunctionCall","src":"2294:18:181"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"2314:8:181","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2287:6:181"},"nodeType":"YulFunctionCall","src":"2287:36:181"},"nodeType":"YulExpressionStatement","src":"2287:36:181"},{"nodeType":"YulAssignment","src":"2332:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2344:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2355:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2340:3:181"},"nodeType":"YulFunctionCall","src":"2340:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2332:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2114:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2128:4:181","type":""}],"src":"1963:402:181"},{"body":{"nodeType":"YulBlock","src":"2544:235:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2561:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2572:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2554:6:181"},"nodeType":"YulFunctionCall","src":"2554:21:181"},"nodeType":"YulExpressionStatement","src":"2554:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2595:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2606:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2591:3:181"},"nodeType":"YulFunctionCall","src":"2591:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2611:2:181","type":"","value":"45"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2584:6:181"},"nodeType":"YulFunctionCall","src":"2584:30:181"},"nodeType":"YulExpressionStatement","src":"2584:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2634:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2645:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2630:3:181"},"nodeType":"YulFunctionCall","src":"2630:18:181"},{"hexValue":"455243313936373a206e657720696d706c656d656e746174696f6e206973206e","kind":"string","nodeType":"YulLiteral","src":"2650:34:181","type":"","value":"ERC1967: new implementation is n"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2623:6:181"},"nodeType":"YulFunctionCall","src":"2623:62:181"},"nodeType":"YulExpressionStatement","src":"2623:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2705:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2716:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2701:3:181"},"nodeType":"YulFunctionCall","src":"2701:18:181"},{"hexValue":"6f74206120636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"2721:15:181","type":"","value":"ot a contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2694:6:181"},"nodeType":"YulFunctionCall","src":"2694:43:181"},"nodeType":"YulExpressionStatement","src":"2694:43:181"},{"nodeType":"YulAssignment","src":"2746:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2758:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2769:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2754:3:181"},"nodeType":"YulFunctionCall","src":"2754:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2746:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2521:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2535:4:181","type":""}],"src":"2370:409:181"},{"body":{"nodeType":"YulBlock","src":"2921:150:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2931:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2951:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2945:5:181"},"nodeType":"YulFunctionCall","src":"2945:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2935:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3006:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3014:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3002:3:181"},"nodeType":"YulFunctionCall","src":"3002:17:181"},{"name":"pos","nodeType":"YulIdentifier","src":"3021:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"3026:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"2967:34:181"},"nodeType":"YulFunctionCall","src":"2967:66:181"},"nodeType":"YulExpressionStatement","src":"2967:66:181"},{"nodeType":"YulAssignment","src":"3042:23:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3053:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"3058:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3049:3:181"},"nodeType":"YulFunctionCall","src":"3049:16:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"3042:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"2897:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2902:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"2913:3:181","type":""}],"src":"2784:287:181"},{"body":{"nodeType":"YulBlock","src":"3250:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3267:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3278:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3260:6:181"},"nodeType":"YulFunctionCall","src":"3260:21:181"},"nodeType":"YulExpressionStatement","src":"3260:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3301:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3312:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3297:3:181"},"nodeType":"YulFunctionCall","src":"3297:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3317:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3290:6:181"},"nodeType":"YulFunctionCall","src":"3290:30:181"},"nodeType":"YulExpressionStatement","src":"3290:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3340:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3351:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3336:3:181"},"nodeType":"YulFunctionCall","src":"3336:18:181"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"3356:31:181","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3329:6:181"},"nodeType":"YulFunctionCall","src":"3329:59:181"},"nodeType":"YulExpressionStatement","src":"3329:59:181"},{"nodeType":"YulAssignment","src":"3397:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3409:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3420:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3405:3:181"},"nodeType":"YulFunctionCall","src":"3405:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3397:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3227:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3241:4:181","type":""}],"src":"3076:353:181"},{"body":{"nodeType":"YulBlock","src":"3555:275:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3572:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3583:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3565:6:181"},"nodeType":"YulFunctionCall","src":"3565:21:181"},"nodeType":"YulExpressionStatement","src":"3565:21:181"},{"nodeType":"YulVariableDeclaration","src":"3595:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3615:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3609:5:181"},"nodeType":"YulFunctionCall","src":"3609:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3599:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3642:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3653:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3638:3:181"},"nodeType":"YulFunctionCall","src":"3638:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"3658:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3631:6:181"},"nodeType":"YulFunctionCall","src":"3631:34:181"},"nodeType":"YulExpressionStatement","src":"3631:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3713:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3721:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3709:3:181"},"nodeType":"YulFunctionCall","src":"3709:15:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3730:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3741:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3726:3:181"},"nodeType":"YulFunctionCall","src":"3726:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"3746:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"3674:34:181"},"nodeType":"YulFunctionCall","src":"3674:79:181"},"nodeType":"YulExpressionStatement","src":"3674:79:181"},{"nodeType":"YulAssignment","src":"3762:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3778:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3797:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3805:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3793:3:181"},"nodeType":"YulFunctionCall","src":"3793:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3814:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3810:3:181"},"nodeType":"YulFunctionCall","src":"3810:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3789:3:181"},"nodeType":"YulFunctionCall","src":"3789:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3774:3:181"},"nodeType":"YulFunctionCall","src":"3774:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"3821:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3770:3:181"},"nodeType":"YulFunctionCall","src":"3770:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3762:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3524:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3535:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3546:4:181","type":""}],"src":"3434:396:181"}]},"contents":"{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        let offset := mload(add(headStart, 64))\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory_with_cleanup(add(_2, 32), add(memPtr, 32), _3)\n        value2 := memPtr\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"ERC1967: new admin is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 45)\n        mstore(add(headStart, 64), \"ERC1967: new implementation is n\")\n        mstore(add(headStart, 96), \"ot a contract\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory_with_cleanup(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405260405162000e5138038062000e51833981016040819052620000269162000497565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ca565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b6200022e1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000e2a60279139620002f8565b9392505050565b60006200018060008051602062000e0a83398151915260001b6200037760201b620001ea1760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e0a83398151915260001b6200037760201b620001ea1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b6200025a1760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620001ea1760201c565b6060600080856001600160a01b03168560405162000317919062000577565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fd578251600003620003f5576001600160a01b0385163b620003f55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000409565b62000409838362000411565b949350505050565b815115620004225781518083602001fd5b8060405162461bcd60e51b8152600401620001f1919062000595565b80516001600160a01b03811681146200045657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200048e57818101518382015260200162000474565b50506000910152565b600080600060608486031215620004ad57600080fd5b620004b8846200043e565b9250620004c8602085016200043e565b60408501519092506001600160401b0380821115620004e657600080fd5b818601915086601f830112620004fb57600080fd5b8151818111156200051057620005106200045b565b604051601f8201601f19908116603f011681019083821181831017156200053b576200053b6200045b565b816040528281528960208487010111156200055557600080fd5b6200056883602083016020880162000471565b80955050505050509250925092565b600082516200058b81846020870162000471565b9190910192915050565b6020815260008251806020840152620005b681604085016020870162000471565b601f01601f19169190910160400192915050565b61083080620005da6000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106c2565b610118565b61005b6100933660046106dd565b610155565b3480156100a457600080fd5b506100ad6101bc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106c2565b6101ed565b3480156100f557600080fd5b506100ad61020d565b610106610269565b6101166101116102fe565b610308565b565b61012061032c565b6001600160a01b0316330361014d5761014a8160405180602001604052806000815250600061035f565b50565b61014a6100fe565b61015d61032c565b6001600160a01b031633036101b4576101af8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061035f915050565b505050565b6101af6100fe565b60006101c661032c565b6001600160a01b031633036101e2576101dd6102fe565b905090565b6101ea6100fe565b90565b6101f561032c565b6001600160a01b0316330361014d5761014a8161038a565b600061021761032c565b6001600160a01b031633036101e2576101dd61032c565b606061025383836040518060600160405280602781526020016107d4602791396103de565b9392505050565b6001600160a01b03163b151590565b61027161032c565b6001600160a01b031633036101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101dd610456565b3660008037600080366000845af43d6000803e808015610327573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103688361047e565b6000825111806103755750805b156101af57610384838361022e565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103b361032c565b604080516001600160a01b03928316815291841660208301520160405180910390a161014a816104be565b6060600080856001600160a01b0316856040516103fb9190610784565b600060405180830381855af49150503d8060008114610436576040519150601f19603f3d011682016040523d82523d6000602084013e61043b565b606091505b509150915061044c86838387610567565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610350565b610487816105e8565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105235760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016102f5565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b606083156105d65782516000036105cf576001600160a01b0385163b6105cf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102f5565b50816105e0565b6105e0838361067c565b949350505050565b6001600160a01b0381163b6106555760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016102f5565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610546565b81511561068c5781518083602001fd5b8060405162461bcd60e51b81526004016102f591906107a0565b80356001600160a01b03811681146106bd57600080fd5b919050565b6000602082840312156106d457600080fd5b610253826106a6565b6000806000604084860312156106f257600080fd5b6106fb846106a6565b9250602084013567ffffffffffffffff8082111561071857600080fd5b818601915086601f83011261072c57600080fd5b81358181111561073b57600080fd5b87602082850101111561074d57600080fd5b6020830194508093505050509250925092565b60005b8381101561077b578181015183820152602001610763565b50506000910152565b60008251610796818460208701610760565b9190910192915050565b60208152600082518060208401526107bf816040850160208701610760565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209951efe3c108b5805d1af7e386e89212c10524f495a13b361cdaba20d3b2bfad64736f6c63430008110033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH3 0xE51 CODESIZE SUB DUP1 PUSH3 0xE51 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x26 SWAP2 PUSH3 0x497 JUMP JUMPDEST DUP3 DUP2 PUSH3 0x36 DUP3 DUP3 PUSH1 0x0 PUSH3 0x4D JUMP JUMPDEST POP PUSH3 0x44 SWAP1 POP DUP3 PUSH3 0x8A JUMP JUMPDEST POP POP POP PUSH3 0x5CA JUMP JUMPDEST PUSH3 0x58 DUP4 PUSH3 0xE5 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH3 0x66 JUMPI POP DUP1 JUMPDEST ISZERO PUSH3 0x85 JUMPI PUSH3 0x83 DUP4 DUP4 PUSH3 0x127 PUSH1 0x20 SHL PUSH3 0x22E OR PUSH1 0x20 SHR JUMP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH3 0xB5 PUSH3 0x156 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH3 0xE2 DUP2 PUSH3 0x18F JUMP JUMPDEST POP JUMP JUMPDEST PUSH3 0xF0 DUP2 PUSH3 0x244 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH3 0x14F DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0xE2A PUSH1 0x27 SWAP2 CODECOPY PUSH3 0x2F8 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x180 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xE0A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x0 SHL PUSH3 0x377 PUSH1 0x20 SHL PUSH3 0x1EA OR PUSH1 0x20 SHR JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x1FA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E65772061646D696E20697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH3 0x223 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xE0A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x0 SHL PUSH3 0x377 PUSH1 0x20 SHL PUSH3 0x1EA OR PUSH1 0x20 SHR JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH3 0x25A DUP2 PUSH3 0x37A PUSH1 0x20 SHL PUSH3 0x25A OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x2BE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH13 0x1BDD08184818DBDB9D1C9858DD PUSH1 0x9A SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x1F1 JUMP JUMPDEST DUP1 PUSH3 0x223 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH1 0x0 SHL PUSH3 0x377 PUSH1 0x20 SHL PUSH3 0x1EA OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH3 0x317 SWAP2 SWAP1 PUSH3 0x577 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH3 0x354 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH3 0x359 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH3 0x36D DUP7 DUP4 DUP4 DUP8 PUSH3 0x389 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH3 0x3FD JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH3 0x3F5 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH3 0x3F5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x1F1 JUMP JUMPDEST POP DUP2 PUSH3 0x409 JUMP JUMPDEST PUSH3 0x409 DUP4 DUP4 PUSH3 0x411 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH3 0x422 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x1F1 SWAP2 SWAP1 PUSH3 0x595 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x456 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x48E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x474 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x4AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x4B8 DUP5 PUSH3 0x43E JUMP JUMPDEST SWAP3 POP PUSH3 0x4C8 PUSH1 0x20 DUP6 ADD PUSH3 0x43E JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x4E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x4FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0x510 JUMPI PUSH3 0x510 PUSH3 0x45B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x53B JUMPI PUSH3 0x53B PUSH3 0x45B JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0x555 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x568 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0x471 JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x58B DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x471 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH3 0x5B6 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH3 0x471 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x830 DUP1 PUSH3 0x5DA PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x65 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x85 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x8F283970 EQ PUSH2 0xC9 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xE9 JUMPI PUSH2 0x5D JUMP JUMPDEST CALLDATASIZE PUSH2 0x5D JUMPI PUSH2 0x5B PUSH2 0xFE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x5B PUSH2 0xFE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B PUSH2 0x80 CALLDATASIZE PUSH1 0x4 PUSH2 0x6C2 JUMP JUMPDEST PUSH2 0x118 JUMP JUMPDEST PUSH2 0x5B PUSH2 0x93 CALLDATASIZE PUSH1 0x4 PUSH2 0x6DD JUMP JUMPDEST PUSH2 0x155 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0x1BC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B PUSH2 0xE4 CALLDATASIZE PUSH1 0x4 PUSH2 0x6C2 JUMP JUMPDEST PUSH2 0x1ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0x20D JUMP JUMPDEST PUSH2 0x106 PUSH2 0x269 JUMP JUMPDEST PUSH2 0x116 PUSH2 0x111 PUSH2 0x2FE JUMP JUMPDEST PUSH2 0x308 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x120 PUSH2 0x32C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x14D JUMPI PUSH2 0x14A DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH1 0x0 PUSH2 0x35F JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x14A PUSH2 0xFE JUMP JUMPDEST PUSH2 0x15D PUSH2 0x32C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x1B4 JUMPI PUSH2 0x1AF DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH1 0x1 SWAP3 POP PUSH2 0x35F SWAP2 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1AF PUSH2 0xFE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C6 PUSH2 0x32C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x1E2 JUMPI PUSH2 0x1DD PUSH2 0x2FE JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1EA PUSH2 0xFE JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1F5 PUSH2 0x32C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x14D JUMPI PUSH2 0x14A DUP2 PUSH2 0x38A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x217 PUSH2 0x32C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x1E2 JUMPI PUSH2 0x1DD PUSH2 0x32C JUMP JUMPDEST PUSH1 0x60 PUSH2 0x253 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x7D4 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x3DE JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x271 PUSH2 0x32C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x116 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x42 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E73706172656E745570677261646561626C6550726F78793A2061646D PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x696E2063616E6E6F742066616C6C6261636B20746F2070726F78792074617267 PUSH1 0x64 DUP3 ADD MSTORE PUSH2 0x195D PUSH1 0xF2 SHL PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1DD PUSH2 0x456 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x327 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x368 DUP4 PUSH2 0x47E JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x375 JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x1AF JUMPI PUSH2 0x384 DUP4 DUP4 PUSH2 0x22E JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x3B3 PUSH2 0x32C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x14A DUP2 PUSH2 0x4BE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x3FB SWAP2 SWAP1 PUSH2 0x784 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x436 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x43B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x44C DUP7 DUP4 DUP4 DUP8 PUSH2 0x567 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH2 0x350 JUMP JUMPDEST PUSH2 0x487 DUP2 PUSH2 0x5E8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x523 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E65772061646D696E20697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2F5 JUMP JUMPDEST DUP1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x5D6 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x5CF JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x5CF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2F5 JUMP JUMPDEST POP DUP2 PUSH2 0x5E0 JUMP JUMPDEST PUSH2 0x5E0 DUP4 DUP4 PUSH2 0x67C JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x655 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH13 0x1BDD08184818DBDB9D1C9858DD PUSH1 0x9A SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2F5 JUMP JUMPDEST DUP1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH2 0x546 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x68C JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2F5 SWAP2 SWAP1 PUSH2 0x7A0 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x6BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x253 DUP3 PUSH2 0x6A6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x6F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6FB DUP5 PUSH2 0x6A6 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x718 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x72C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x73B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x74D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x77B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x763 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x796 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x760 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x7BF DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x760 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x706673582212209951EF 0xE3 0xC1 ADDMOD 0xB5 DUP1 0x5D BYTE 0xF7 0xE3 DUP7 0xE8 SWAP3 SLT 0xC1 SDIV 0x24 DELEGATECALL SWAP6 LOG1 EXTCODESIZE CALLDATASIZE SHR 0xDA 0xBA KECCAK256 0xD3 0xB2 0xBF 0xAD PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER 0xB5 BALANCE 0x27 PUSH9 0x4A568B3173AE13B9F8 0xA6 ADD PUSH15 0x243E63B6E8EE1178D6A717850B5D61 SUB COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C65640000 ","sourceMap":"1649:3469:50:-:0;;;1923:167;;;;;;;;;;;;;;;;;;:::i;:::-;2038:6;2046:5;1024:39:45;2038:6:50;2046:5;1057::45;1024:17;:39::i;:::-;-1:-1:-1;2063:20:50::1;::::0;-1:-1:-1;2076:6:50;2063:12:::1;:20::i;:::-;1923:167:::0;;;1649:3469;;2183:295:46;2321:29;2332:17;2321:10;:29::i;:::-;2378:1;2364:4;:11;:15;:28;;;;2383:9;2364:28;2360:112;;;2408:53;2437:17;2456:4;2408:28;;;;;:53;;:::i;:::-;;2360:112;2183:295;;;:::o;4624:135::-;4688:35;4701:11;:9;:11::i;:::-;4688:35;;;-1:-1:-1;;;;;1884:15:181;;;1866:34;;1936:15;;;1931:2;1916:18;;1909:43;1801:18;4688:35:46;;;;;;;4733:19;4743:8;4733:9;:19::i;:::-;4624:135;:::o;1897:152::-;1963:37;1982:17;1963:18;:37::i;:::-;2015:27;;-1:-1:-1;;;;;2015:27:46;;;;;;;;1897:152;:::o;6469:198:57:-;6552:12;6583:77;6604:6;6612:4;6583:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6576:84;6469:198;-1:-1:-1;;;6469:198:57:o;4108:122:46:-;4152:7;4178:39;-1:-1:-1;;;;;;;;;;;4205:11:46;;4178:26;;;;;:39;;:::i;:::-;:45;-1:-1:-1;;;;;4178:45:46;;4108:122;-1:-1:-1;4108:122:46:o;4312:201::-;-1:-1:-1;;;;;4375:22:46;;4367:73;;;;-1:-1:-1;;;4367:73:46;;2165:2:181;4367:73:46;;;2147:21:181;2204:2;2184:18;;;2177:30;2243:34;2223:18;;;2216:62;-1:-1:-1;;;2294:18:181;;;2287:36;2340:19;;4367:73:46;;;;;;;;;4498:8;4450:39;-1:-1:-1;;;;;;;;;;;4477:11:46;;4450:26;;;;;:39;;:::i;:::-;:56;;-1:-1:-1;;;;;;4450:56:46;-1:-1:-1;;;;;4450:56:46;;;;;;;;;;-1:-1:-1;4312:201:46:o;1532:259::-;1613:37;1632:17;1613:18;;;;;:37;;:::i;:::-;1605:95;;;;-1:-1:-1;;;1605:95:46;;2572:2:181;1605:95:46;;;2554:21:181;2611:2;2591:18;;;2584:30;2650:34;2630:18;;;2623:62;-1:-1:-1;;;2701:18:181;;;2694:43;2754:19;;1605:95:46;2370:409:181;1605:95:46;1767:17;1710:48;1030:66;1737:20;;1710:26;;;;;:48;;:::i;6853:325:57:-;6994:12;7019;7033:23;7060:6;-1:-1:-1;;;;;7060:19:57;7080:4;7060:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7018:67:57;;-1:-1:-1;7018:67:57;-1:-1:-1;7102:69:57;7129:6;7018:67;;7158:12;7102:26;:69::i;:::-;7095:76;6853:325;-1:-1:-1;;;;;;6853:325:57:o;1614:190:60:-;1784:4;1614:190::o;1175:320:57:-;-1:-1:-1;;;;;1465:19:57;;:23;;;1175:320::o;7466:628::-;7646:12;7674:7;7670:418;;;7701:10;:17;7722:1;7701:22;7697:286;;-1:-1:-1;;;;;1465:19:57;;;7908:60;;;;-1:-1:-1;;;7908:60:57;;3278:2:181;7908:60:57;;;3260:21:181;3317:2;3297:18;;;3290:30;3356:31;3336:18;;;3329:59;3405:18;;7908:60:57;3076:353:181;7908:60:57;-1:-1:-1;8003:10:57;7996:17;;7670:418;8044:33;8052:10;8064:12;8044:7;:33::i;:::-;7466:628;;;;;;:::o;8616:540::-;8775:17;;:21;8771:379;;9003:10;8997:17;9059:15;9046:10;9042:2;9038:19;9031:44;8771:379;9126:12;9119:20;;-1:-1:-1;;;9119:20:57;;;;;;;;:::i;14:177:181:-;93:13;;-1:-1:-1;;;;;135:31:181;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:127::-;257:10;252:3;248:20;245:1;238:31;288:4;285:1;278:15;312:4;309:1;302:15;328:250;413:1;423:113;437:6;434:1;431:13;423:113;;;513:11;;;507:18;494:11;;;487:39;459:2;452:10;423:113;;;-1:-1:-1;;570:1:181;552:16;;545:27;328:250::o;583:1066::-;680:6;688;696;749:2;737:9;728:7;724:23;720:32;717:52;;;765:1;762;755:12;717:52;788:40;818:9;788:40;:::i;:::-;778:50;;847:49;892:2;881:9;877:18;847:49;:::i;:::-;940:2;925:18;;919:25;837:59;;-1:-1:-1;;;;;;993:14:181;;;990:34;;;1020:1;1017;1010:12;990:34;1058:6;1047:9;1043:22;1033:32;;1103:7;1096:4;1092:2;1088:13;1084:27;1074:55;;1125:1;1122;1115:12;1074:55;1154:2;1148:9;1176:2;1172;1169:10;1166:36;;;1182:18;;:::i;:::-;1257:2;1251:9;1225:2;1311:13;;-1:-1:-1;;1307:22:181;;;1331:2;1303:31;1299:40;1287:53;;;1355:18;;;1375:22;;;1352:46;1349:72;;;1401:18;;:::i;:::-;1441:10;1437:2;1430:22;1476:2;1468:6;1461:18;1516:7;1511:2;1506;1502;1498:11;1494:20;1491:33;1488:53;;;1537:1;1534;1527:12;1488:53;1550:68;1615:2;1610;1602:6;1598:15;1593:2;1589;1585:11;1550:68;:::i;:::-;1637:6;1627:16;;;;;;;583:1066;;;;;:::o;2784:287::-;2913:3;2951:6;2945:13;2967:66;3026:6;3021:3;3014:4;3006:6;3002:17;2967:66;:::i;:::-;3049:16;;;;;2784:287;-1:-1:-1;;2784:287:181:o;3434:396::-;3583:2;3572:9;3565:21;3546:4;3615:6;3609:13;3658:6;3653:2;3642:9;3638:18;3631:34;3674:79;3746:6;3741:2;3730:9;3726:18;3721:2;3713:6;3709:15;3674:79;:::i;:::-;3814:2;3793:15;-1:-1:-1;;3789:29:181;3774:45;;;;3821:2;3770:54;;3434:396;-1:-1:-1;;3434:396:181:o;:::-;1649:3469:50;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_10264":{"entryPoint":null,"id":10264,"parameterSlots":0,"returnSlots":0},"@_10272":{"entryPoint":null,"id":10272,"parameterSlots":0,"returnSlots":0},"@_beforeFallback_10277":{"entryPoint":null,"id":10277,"parameterSlots":0,"returnSlots":0},"@_beforeFallback_10571":{"entryPoint":617,"id":10571,"parameterSlots":0,"returnSlots":0},"@_changeAdmin_10129":{"entryPoint":906,"id":10129,"parameterSlots":1,"returnSlots":0},"@_delegate_10237":{"entryPoint":776,"id":10237,"parameterSlots":1,"returnSlots":0},"@_fallback_10256":{"entryPoint":254,"id":10256,"parameterSlots":0,"returnSlots":0},"@_getAdmin_10086":{"entryPoint":812,"id":10086,"parameterSlots":0,"returnSlots":1},"@_getImplementation_9940":{"entryPoint":1110,"id":9940,"parameterSlots":0,"returnSlots":1},"@_implementation_9907":{"entryPoint":766,"id":9907,"parameterSlots":0,"returnSlots":1},"@_revert_11483":{"entryPoint":1660,"id":11483,"parameterSlots":2,"returnSlots":0},"@_setAdmin_10112":{"entryPoint":1214,"id":10112,"parameterSlots":1,"returnSlots":0},"@_setImplementation_9964":{"entryPoint":1512,"id":9964,"parameterSlots":1,"returnSlots":0},"@_upgradeToAndCall_10009":{"entryPoint":863,"id":10009,"parameterSlots":3,"returnSlots":0},"@_upgradeTo_9979":{"entryPoint":1150,"id":9979,"parameterSlots":1,"returnSlots":0},"@admin_10479":{"entryPoint":525,"id":10479,"parameterSlots":0,"returnSlots":1},"@changeAdmin_10506":{"entryPoint":493,"id":10506,"parameterSlots":1,"returnSlots":0},"@functionDelegateCall_11371":{"entryPoint":558,"id":11371,"parameterSlots":2,"returnSlots":1},"@functionDelegateCall_11400":{"entryPoint":990,"id":11400,"parameterSlots":3,"returnSlots":1},"@getAddressSlot_11606":{"entryPoint":null,"id":11606,"parameterSlots":1,"returnSlots":1},"@implementation_10493":{"entryPoint":444,"id":10493,"parameterSlots":0,"returnSlots":1},"@isContract_11172":{"entryPoint":602,"id":11172,"parameterSlots":1,"returnSlots":1},"@upgradeToAndCall_10541":{"entryPoint":341,"id":10541,"parameterSlots":3,"returnSlots":0},"@upgradeTo_10524":{"entryPoint":280,"id":10524,"parameterSlots":1,"returnSlots":0},"@verifyCallResultFromTarget_11439":{"entryPoint":1383,"id":11439,"parameterSlots":4,"returnSlots":1},"abi_decode_address":{"entryPoint":1702,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":1730,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_bytes_calldata_ptr":{"entryPoint":1757,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":1924,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1952,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":1888,"id":null,"parameterSlots":3,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4169:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:124:181","statements":[{"nodeType":"YulAssignment","src":"73:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:181"},"nodeType":"YulFunctionCall","src":"82:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:181"}]},{"body":{"nodeType":"YulBlock","src":"165:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"174:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"177:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"167:6:181"},"nodeType":"YulFunctionCall","src":"167:12:181"},"nodeType":"YulExpressionStatement","src":"167:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"155:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"146:3:181"},"nodeType":"YulFunctionCall","src":"146:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"142:3:181"},"nodeType":"YulFunctionCall","src":"142:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:181"},"nodeType":"YulFunctionCall","src":"131:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:181"},"nodeType":"YulFunctionCall","src":"121:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:181"},"nodeType":"YulFunctionCall","src":"114:50:181"},"nodeType":"YulIf","src":"111:70:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:181","type":""}],"src":"14:173:181"},{"body":{"nodeType":"YulBlock","src":"262:116:181","statements":[{"body":{"nodeType":"YulBlock","src":"308:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"317:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"320:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"310:6:181"},"nodeType":"YulFunctionCall","src":"310:12:181"},"nodeType":"YulExpressionStatement","src":"310:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"283:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"292:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"279:3:181"},"nodeType":"YulFunctionCall","src":"279:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"304:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"275:3:181"},"nodeType":"YulFunctionCall","src":"275:32:181"},"nodeType":"YulIf","src":"272:52:181"},{"nodeType":"YulAssignment","src":"333:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"362:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"343:18:181"},"nodeType":"YulFunctionCall","src":"343:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"333:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"228:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"239:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"251:6:181","type":""}],"src":"192:186:181"},{"body":{"nodeType":"YulBlock","src":"489:559:181","statements":[{"body":{"nodeType":"YulBlock","src":"535:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"544:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"547:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"537:6:181"},"nodeType":"YulFunctionCall","src":"537:12:181"},"nodeType":"YulExpressionStatement","src":"537:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"510:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"519:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"506:3:181"},"nodeType":"YulFunctionCall","src":"506:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"531:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"502:3:181"},"nodeType":"YulFunctionCall","src":"502:32:181"},"nodeType":"YulIf","src":"499:52:181"},{"nodeType":"YulAssignment","src":"560:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"589:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"570:18:181"},"nodeType":"YulFunctionCall","src":"570:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"560:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"608:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"639:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"650:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"635:3:181"},"nodeType":"YulFunctionCall","src":"635:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"622:12:181"},"nodeType":"YulFunctionCall","src":"622:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"612:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"663:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"673:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"667:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"718:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"727:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"730:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"720:6:181"},"nodeType":"YulFunctionCall","src":"720:12:181"},"nodeType":"YulExpressionStatement","src":"720:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"706:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"714:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"703:2:181"},"nodeType":"YulFunctionCall","src":"703:14:181"},"nodeType":"YulIf","src":"700:34:181"},{"nodeType":"YulVariableDeclaration","src":"743:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"757:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"768:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"753:3:181"},"nodeType":"YulFunctionCall","src":"753:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"747:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"823:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"832:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"835:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"825:6:181"},"nodeType":"YulFunctionCall","src":"825:12:181"},"nodeType":"YulExpressionStatement","src":"825:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"802:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"806:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"798:3:181"},"nodeType":"YulFunctionCall","src":"798:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"813:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"794:3:181"},"nodeType":"YulFunctionCall","src":"794:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"787:6:181"},"nodeType":"YulFunctionCall","src":"787:35:181"},"nodeType":"YulIf","src":"784:55:181"},{"nodeType":"YulVariableDeclaration","src":"848:30:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"875:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"862:12:181"},"nodeType":"YulFunctionCall","src":"862:16:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"852:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"905:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"914:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"917:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"907:6:181"},"nodeType":"YulFunctionCall","src":"907:12:181"},"nodeType":"YulExpressionStatement","src":"907:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"893:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"901:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"890:2:181"},"nodeType":"YulFunctionCall","src":"890:14:181"},"nodeType":"YulIf","src":"887:34:181"},{"body":{"nodeType":"YulBlock","src":"971:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"980:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"983:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"973:6:181"},"nodeType":"YulFunctionCall","src":"973:12:181"},"nodeType":"YulExpressionStatement","src":"973:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"944:2:181"},{"name":"length","nodeType":"YulIdentifier","src":"948:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"940:3:181"},"nodeType":"YulFunctionCall","src":"940:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"957:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"936:3:181"},"nodeType":"YulFunctionCall","src":"936:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"962:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"933:2:181"},"nodeType":"YulFunctionCall","src":"933:37:181"},"nodeType":"YulIf","src":"930:57:181"},{"nodeType":"YulAssignment","src":"996:21:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1010:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1014:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1006:3:181"},"nodeType":"YulFunctionCall","src":"1006:11:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"996:6:181"}]},{"nodeType":"YulAssignment","src":"1026:16:181","value":{"name":"length","nodeType":"YulIdentifier","src":"1036:6:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1026:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"439:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"450:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"462:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"470:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"478:6:181","type":""}],"src":"383:665:181"},{"body":{"nodeType":"YulBlock","src":"1154:102:181","statements":[{"nodeType":"YulAssignment","src":"1164:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1176:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1187:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1172:3:181"},"nodeType":"YulFunctionCall","src":"1172:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1164:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1206:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1221:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1237:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1242:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1233:3:181"},"nodeType":"YulFunctionCall","src":"1233:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1246:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1229:3:181"},"nodeType":"YulFunctionCall","src":"1229:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1217:3:181"},"nodeType":"YulFunctionCall","src":"1217:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1199:6:181"},"nodeType":"YulFunctionCall","src":"1199:51:181"},"nodeType":"YulExpressionStatement","src":"1199:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1123:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1134:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1145:4:181","type":""}],"src":"1053:203:181"},{"body":{"nodeType":"YulBlock","src":"1435:296:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1452:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1463:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1445:6:181"},"nodeType":"YulFunctionCall","src":"1445:21:181"},"nodeType":"YulExpressionStatement","src":"1445:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1486:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1497:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1482:3:181"},"nodeType":"YulFunctionCall","src":"1482:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1502:2:181","type":"","value":"66"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1475:6:181"},"nodeType":"YulFunctionCall","src":"1475:30:181"},"nodeType":"YulExpressionStatement","src":"1475:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1525:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1536:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1521:3:181"},"nodeType":"YulFunctionCall","src":"1521:18:181"},{"hexValue":"5472616e73706172656e745570677261646561626c6550726f78793a2061646d","kind":"string","nodeType":"YulLiteral","src":"1541:34:181","type":"","value":"TransparentUpgradeableProxy: adm"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1514:6:181"},"nodeType":"YulFunctionCall","src":"1514:62:181"},"nodeType":"YulExpressionStatement","src":"1514:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1596:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1607:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1592:3:181"},"nodeType":"YulFunctionCall","src":"1592:18:181"},{"hexValue":"696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267","kind":"string","nodeType":"YulLiteral","src":"1612:34:181","type":"","value":"in cannot fallback to proxy targ"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1585:6:181"},"nodeType":"YulFunctionCall","src":"1585:62:181"},"nodeType":"YulExpressionStatement","src":"1585:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1667:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1678:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1663:3:181"},"nodeType":"YulFunctionCall","src":"1663:19:181"},{"hexValue":"6574","kind":"string","nodeType":"YulLiteral","src":"1684:4:181","type":"","value":"et"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1656:6:181"},"nodeType":"YulFunctionCall","src":"1656:33:181"},"nodeType":"YulExpressionStatement","src":"1656:33:181"},{"nodeType":"YulAssignment","src":"1698:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1710:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1721:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1706:3:181"},"nodeType":"YulFunctionCall","src":"1706:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1698:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1412:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1426:4:181","type":""}],"src":"1261:470:181"},{"body":{"nodeType":"YulBlock","src":"1865:175:181","statements":[{"nodeType":"YulAssignment","src":"1875:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1887:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1898:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1883:3:181"},"nodeType":"YulFunctionCall","src":"1883:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1875:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"1910:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1928:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1933:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1924:3:181"},"nodeType":"YulFunctionCall","src":"1924:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1937:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1920:3:181"},"nodeType":"YulFunctionCall","src":"1920:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1914:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1955:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1970:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1978:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1966:3:181"},"nodeType":"YulFunctionCall","src":"1966:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1948:6:181"},"nodeType":"YulFunctionCall","src":"1948:34:181"},"nodeType":"YulExpressionStatement","src":"1948:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2002:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2013:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1998:3:181"},"nodeType":"YulFunctionCall","src":"1998:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2022:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2030:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2018:3:181"},"nodeType":"YulFunctionCall","src":"2018:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1991:6:181"},"nodeType":"YulFunctionCall","src":"1991:43:181"},"nodeType":"YulExpressionStatement","src":"1991:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1826:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1837:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1845:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1856:4:181","type":""}],"src":"1736:304:181"},{"body":{"nodeType":"YulBlock","src":"2111:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2121:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2130:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2125:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2190:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2215:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"2220:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2211:3:181"},"nodeType":"YulFunctionCall","src":"2211:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2234:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"2239:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2230:3:181"},"nodeType":"YulFunctionCall","src":"2230:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2224:5:181"},"nodeType":"YulFunctionCall","src":"2224:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2204:6:181"},"nodeType":"YulFunctionCall","src":"2204:39:181"},"nodeType":"YulExpressionStatement","src":"2204:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2151:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"2154:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2148:2:181"},"nodeType":"YulFunctionCall","src":"2148:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2162:19:181","statements":[{"nodeType":"YulAssignment","src":"2164:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2173:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"2176:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2169:3:181"},"nodeType":"YulFunctionCall","src":"2169:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2164:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"2144:3:181","statements":[]},"src":"2140:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2273:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"2278:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2269:3:181"},"nodeType":"YulFunctionCall","src":"2269:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"2287:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2262:6:181"},"nodeType":"YulFunctionCall","src":"2262:27:181"},"nodeType":"YulExpressionStatement","src":"2262:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"2089:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"2094:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"2099:6:181","type":""}],"src":"2045:250:181"},{"body":{"nodeType":"YulBlock","src":"2437:150:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2447:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2467:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2461:5:181"},"nodeType":"YulFunctionCall","src":"2461:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2451:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2522:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2530:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2518:3:181"},"nodeType":"YulFunctionCall","src":"2518:17:181"},{"name":"pos","nodeType":"YulIdentifier","src":"2537:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"2542:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"2483:34:181"},"nodeType":"YulFunctionCall","src":"2483:66:181"},"nodeType":"YulExpressionStatement","src":"2483:66:181"},{"nodeType":"YulAssignment","src":"2558:23:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2569:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"2574:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2565:3:181"},"nodeType":"YulFunctionCall","src":"2565:16:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"2558:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"2413:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2418:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"2429:3:181","type":""}],"src":"2300:287:181"},{"body":{"nodeType":"YulBlock","src":"2766:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2783:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2794:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2776:6:181"},"nodeType":"YulFunctionCall","src":"2776:21:181"},"nodeType":"YulExpressionStatement","src":"2776:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2817:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2828:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2813:3:181"},"nodeType":"YulFunctionCall","src":"2813:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2833:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2806:6:181"},"nodeType":"YulFunctionCall","src":"2806:30:181"},"nodeType":"YulExpressionStatement","src":"2806:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2856:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2867:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2852:3:181"},"nodeType":"YulFunctionCall","src":"2852:18:181"},{"hexValue":"455243313936373a206e65772061646d696e20697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"2872:34:181","type":"","value":"ERC1967: new admin is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2845:6:181"},"nodeType":"YulFunctionCall","src":"2845:62:181"},"nodeType":"YulExpressionStatement","src":"2845:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2927:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2938:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2923:3:181"},"nodeType":"YulFunctionCall","src":"2923:18:181"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"2943:8:181","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2916:6:181"},"nodeType":"YulFunctionCall","src":"2916:36:181"},"nodeType":"YulExpressionStatement","src":"2916:36:181"},{"nodeType":"YulAssignment","src":"2961:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2973:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2984:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2969:3:181"},"nodeType":"YulFunctionCall","src":"2969:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2961:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2743:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2757:4:181","type":""}],"src":"2592:402:181"},{"body":{"nodeType":"YulBlock","src":"3173:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3190:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3201:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3183:6:181"},"nodeType":"YulFunctionCall","src":"3183:21:181"},"nodeType":"YulExpressionStatement","src":"3183:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3224:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3235:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3220:3:181"},"nodeType":"YulFunctionCall","src":"3220:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3240:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3213:6:181"},"nodeType":"YulFunctionCall","src":"3213:30:181"},"nodeType":"YulExpressionStatement","src":"3213:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3263:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3274:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3259:3:181"},"nodeType":"YulFunctionCall","src":"3259:18:181"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"3279:31:181","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3252:6:181"},"nodeType":"YulFunctionCall","src":"3252:59:181"},"nodeType":"YulExpressionStatement","src":"3252:59:181"},{"nodeType":"YulAssignment","src":"3320:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3332:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3343:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3328:3:181"},"nodeType":"YulFunctionCall","src":"3328:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3320:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3150:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3164:4:181","type":""}],"src":"2999:353:181"},{"body":{"nodeType":"YulBlock","src":"3531:235:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3548:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3559:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3541:6:181"},"nodeType":"YulFunctionCall","src":"3541:21:181"},"nodeType":"YulExpressionStatement","src":"3541:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3582:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3593:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3578:3:181"},"nodeType":"YulFunctionCall","src":"3578:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3598:2:181","type":"","value":"45"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3571:6:181"},"nodeType":"YulFunctionCall","src":"3571:30:181"},"nodeType":"YulExpressionStatement","src":"3571:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3621:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3632:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3617:3:181"},"nodeType":"YulFunctionCall","src":"3617:18:181"},{"hexValue":"455243313936373a206e657720696d706c656d656e746174696f6e206973206e","kind":"string","nodeType":"YulLiteral","src":"3637:34:181","type":"","value":"ERC1967: new implementation is n"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3610:6:181"},"nodeType":"YulFunctionCall","src":"3610:62:181"},"nodeType":"YulExpressionStatement","src":"3610:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3692:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3703:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3688:3:181"},"nodeType":"YulFunctionCall","src":"3688:18:181"},{"hexValue":"6f74206120636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"3708:15:181","type":"","value":"ot a contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3681:6:181"},"nodeType":"YulFunctionCall","src":"3681:43:181"},"nodeType":"YulExpressionStatement","src":"3681:43:181"},{"nodeType":"YulAssignment","src":"3733:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3745:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3756:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3741:3:181"},"nodeType":"YulFunctionCall","src":"3741:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3733:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3508:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3522:4:181","type":""}],"src":"3357:409:181"},{"body":{"nodeType":"YulBlock","src":"3892:275:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3909:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3920:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3902:6:181"},"nodeType":"YulFunctionCall","src":"3902:21:181"},"nodeType":"YulExpressionStatement","src":"3902:21:181"},{"nodeType":"YulVariableDeclaration","src":"3932:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3952:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3946:5:181"},"nodeType":"YulFunctionCall","src":"3946:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3936:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3979:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3990:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3975:3:181"},"nodeType":"YulFunctionCall","src":"3975:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"3995:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3968:6:181"},"nodeType":"YulFunctionCall","src":"3968:34:181"},"nodeType":"YulExpressionStatement","src":"3968:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4050:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4058:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4046:3:181"},"nodeType":"YulFunctionCall","src":"4046:15:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4067:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4078:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4063:3:181"},"nodeType":"YulFunctionCall","src":"4063:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"4083:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"4011:34:181"},"nodeType":"YulFunctionCall","src":"4011:79:181"},"nodeType":"YulExpressionStatement","src":"4011:79:181"},{"nodeType":"YulAssignment","src":"4099:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4115:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4134:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4142:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4130:3:181"},"nodeType":"YulFunctionCall","src":"4130:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4151:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4147:3:181"},"nodeType":"YulFunctionCall","src":"4147:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4126:3:181"},"nodeType":"YulFunctionCall","src":"4126:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4111:3:181"},"nodeType":"YulFunctionCall","src":"4111:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"4158:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4107:3:181"},"nodeType":"YulFunctionCall","src":"4107:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4099:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3861:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3872:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3883:4:181","type":""}],"src":"3771:396:181"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n        value1 := add(_2, 32)\n        value2 := length\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 66)\n        mstore(add(headStart, 64), \"TransparentUpgradeableProxy: adm\")\n        mstore(add(headStart, 96), \"in cannot fallback to proxy targ\")\n        mstore(add(headStart, 128), \"et\")\n        tail := add(headStart, 160)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"ERC1967: new admin is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 45)\n        mstore(add(headStart, 64), \"ERC1967: new implementation is n\")\n        mstore(add(headStart, 96), \"ot a contract\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory_with_cleanup(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106c2565b610118565b61005b6100933660046106dd565b610155565b3480156100a457600080fd5b506100ad6101bc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106c2565b6101ed565b3480156100f557600080fd5b506100ad61020d565b610106610269565b6101166101116102fe565b610308565b565b61012061032c565b6001600160a01b0316330361014d5761014a8160405180602001604052806000815250600061035f565b50565b61014a6100fe565b61015d61032c565b6001600160a01b031633036101b4576101af8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061035f915050565b505050565b6101af6100fe565b60006101c661032c565b6001600160a01b031633036101e2576101dd6102fe565b905090565b6101ea6100fe565b90565b6101f561032c565b6001600160a01b0316330361014d5761014a8161038a565b600061021761032c565b6001600160a01b031633036101e2576101dd61032c565b606061025383836040518060600160405280602781526020016107d4602791396103de565b9392505050565b6001600160a01b03163b151590565b61027161032c565b6001600160a01b031633036101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101dd610456565b3660008037600080366000845af43d6000803e808015610327573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103688361047e565b6000825111806103755750805b156101af57610384838361022e565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103b361032c565b604080516001600160a01b03928316815291841660208301520160405180910390a161014a816104be565b6060600080856001600160a01b0316856040516103fb9190610784565b600060405180830381855af49150503d8060008114610436576040519150601f19603f3d011682016040523d82523d6000602084013e61043b565b606091505b509150915061044c86838387610567565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610350565b610487816105e8565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105235760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084016102f5565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b606083156105d65782516000036105cf576001600160a01b0385163b6105cf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102f5565b50816105e0565b6105e0838361067c565b949350505050565b6001600160a01b0381163b6106555760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016102f5565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610546565b81511561068c5781518083602001fd5b8060405162461bcd60e51b81526004016102f591906107a0565b80356001600160a01b03811681146106bd57600080fd5b919050565b6000602082840312156106d457600080fd5b610253826106a6565b6000806000604084860312156106f257600080fd5b6106fb846106a6565b9250602084013567ffffffffffffffff8082111561071857600080fd5b818601915086601f83011261072c57600080fd5b81358181111561073b57600080fd5b87602082850101111561074d57600080fd5b6020830194508093505050509250925092565b60005b8381101561077b578181015183820152602001610763565b50506000910152565b60008251610796818460208701610760565b9190910192915050565b60208152600082518060208401526107bf816040850160208701610760565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209951efe3c108b5805d1af7e386e89212c10524f495a13b361cdaba20d3b2bfad64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x65 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x85 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x8F283970 EQ PUSH2 0xC9 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xE9 JUMPI PUSH2 0x5D JUMP JUMPDEST CALLDATASIZE PUSH2 0x5D JUMPI PUSH2 0x5B PUSH2 0xFE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x5B PUSH2 0xFE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B PUSH2 0x80 CALLDATASIZE PUSH1 0x4 PUSH2 0x6C2 JUMP JUMPDEST PUSH2 0x118 JUMP JUMPDEST PUSH2 0x5B PUSH2 0x93 CALLDATASIZE PUSH1 0x4 PUSH2 0x6DD JUMP JUMPDEST PUSH2 0x155 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0x1BC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B PUSH2 0xE4 CALLDATASIZE PUSH1 0x4 PUSH2 0x6C2 JUMP JUMPDEST PUSH2 0x1ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0x20D JUMP JUMPDEST PUSH2 0x106 PUSH2 0x269 JUMP JUMPDEST PUSH2 0x116 PUSH2 0x111 PUSH2 0x2FE JUMP JUMPDEST PUSH2 0x308 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x120 PUSH2 0x32C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x14D JUMPI PUSH2 0x14A DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH1 0x0 PUSH2 0x35F JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x14A PUSH2 0xFE JUMP JUMPDEST PUSH2 0x15D PUSH2 0x32C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x1B4 JUMPI PUSH2 0x1AF DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH1 0x1 SWAP3 POP PUSH2 0x35F SWAP2 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1AF PUSH2 0xFE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C6 PUSH2 0x32C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x1E2 JUMPI PUSH2 0x1DD PUSH2 0x2FE JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1EA PUSH2 0xFE JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1F5 PUSH2 0x32C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x14D JUMPI PUSH2 0x14A DUP2 PUSH2 0x38A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x217 PUSH2 0x32C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x1E2 JUMPI PUSH2 0x1DD PUSH2 0x32C JUMP JUMPDEST PUSH1 0x60 PUSH2 0x253 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x7D4 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x3DE JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x271 PUSH2 0x32C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x116 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x42 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E73706172656E745570677261646561626C6550726F78793A2061646D PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x696E2063616E6E6F742066616C6C6261636B20746F2070726F78792074617267 PUSH1 0x64 DUP3 ADD MSTORE PUSH2 0x195D PUSH1 0xF2 SHL PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1DD PUSH2 0x456 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x327 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x368 DUP4 PUSH2 0x47E JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x375 JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x1AF JUMPI PUSH2 0x384 DUP4 DUP4 PUSH2 0x22E JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x3B3 PUSH2 0x32C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x14A DUP2 PUSH2 0x4BE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x3FB SWAP2 SWAP1 PUSH2 0x784 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x436 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x43B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x44C DUP7 DUP4 DUP4 DUP8 PUSH2 0x567 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH2 0x350 JUMP JUMPDEST PUSH2 0x487 DUP2 PUSH2 0x5E8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x523 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E65772061646D696E20697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2F5 JUMP JUMPDEST DUP1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x5D6 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x5CF JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x5CF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2F5 JUMP JUMPDEST POP DUP2 PUSH2 0x5E0 JUMP JUMPDEST PUSH2 0x5E0 DUP4 DUP4 PUSH2 0x67C JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x655 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH13 0x1BDD08184818DBDB9D1C9858DD PUSH1 0x9A SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2F5 JUMP JUMPDEST DUP1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH2 0x546 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x68C JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2F5 SWAP2 SWAP1 PUSH2 0x7A0 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x6BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x253 DUP3 PUSH2 0x6A6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x6F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6FB DUP5 PUSH2 0x6A6 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x718 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x72C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x73B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x74D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x77B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x763 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x796 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x760 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x7BF DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x760 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x706673582212209951EF 0xE3 0xC1 ADDMOD 0xB5 DUP1 0x5D BYTE 0xF7 0xE3 DUP7 0xE8 SWAP3 SLT 0xC1 SDIV 0x24 DELEGATECALL SWAP6 LOG1 EXTCODESIZE CALLDATASIZE SHR 0xDA 0xBA KECCAK256 0xD3 0xB2 0xBF 0xAD PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"1649:3469:50:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2898:11:47;:9;:11::i;:::-;1649:3469:50;;2675:11:47;:9;:11::i;3960:134:50:-;;;;;;;;;;-1:-1:-1;3960:134:50;;;;;:::i;:::-;;:::i;4470:164::-;;;;;;:::i;:::-;;:::i;3363:129::-;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;1217:32:181;;;1199:51;;1187:2;1172:18;3363:129:50;;;;;;;3697:103;;;;;;;;;;-1:-1:-1;3697:103:50;;;;;:::i;:::-;;:::i;2807:96::-;;;;;;;;;;;;;:::i;2322:110:47:-;2370:17;:15;:17::i;:::-;2397:28;2407:17;:15;:17::i;:::-;2397:9;:28::i;:::-;2322:110::o;3960:134:50:-;2278:11;:9;:11::i;:::-;-1:-1:-1;;;;;2264:25:50;:10;:25;2260:99;;4033:54:::1;4051:17;4070:9;;;;;;;;;;;::::0;4081:5:::1;4033:17;:54::i;:::-;3960:134:::0;:::o;2260:99::-;2337:11;:9;:11::i;4470:164::-;2278:11;:9;:11::i;:::-;-1:-1:-1;;;;;2264:25:50;:10;:25;2260:99;;4579:48:::1;4597:17;4616:4;;4579:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;4622:4:50::1;::::0;-1:-1:-1;4579:17:50::1;::::0;-1:-1:-1;;4579:48:50:i:1;:::-;4470:164:::0;;;:::o;2260:99::-;2337:11;:9;:11::i;3363:129::-;3415:23;2278:11;:9;:11::i;:::-;-1:-1:-1;;;;;2264:25:50;:10;:25;2260:99;;3468:17:::1;:15;:17::i;:::-;3450:35;;3363:129:::0;:::o;2260:99::-;2337:11;:9;:11::i;:::-;3363:129;:::o;3697:103::-;2278:11;:9;:11::i;:::-;-1:-1:-1;;;;;2264:25:50;:10;:25;2260:99;;3771:22:::1;3784:8;3771:12;:22::i;2807:96::-:0;2850:14;2278:11;:9;:11::i;:::-;-1:-1:-1;;;;;2264:25:50;:10;:25;2260:99;;2885:11:::1;:9;:11::i;6469:198:57:-:0;6552:12;6583:77;6604:6;6612:4;6583:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6576:84;6469:198;-1:-1:-1;;;6469:198:57:o;1175:320::-;-1:-1:-1;;;;;1465:19:57;;:23;;;1175:320::o;4909:207:50:-;4994:11;:9;:11::i;:::-;-1:-1:-1;;;;;4980:25:50;:10;:25;4972:104;;;;-1:-1:-1;;;4972:104:50;;1463:2:181;4972:104:50;;;1445:21:181;1502:2;1482:18;;;1475:30;1541:34;1521:18;;;1514:62;1612:34;1592:18;;;1585:62;-1:-1:-1;;;1663:19:181;;;1656:33;1706:19;;4972:104:50;;;;;;;;1148:140:45;1215:12;1246:35;:33;:35::i;948:895:47:-;1286:14;1283:1;1280;1267:34;1500:1;1497;1481:14;1478:1;1462:14;1455:5;1442:60;1576:16;1573:1;1570;1555:38;1614:6;1681:66;;;;1796:16;1793:1;1786:27;1681:66;1716:16;1713:1;1706:27;4108:122:46;4152:7;3842:66;4178:39;:45;-1:-1:-1;;;;;4178:45:46;;4108:122;-1:-1:-1;4108:122:46:o;2183:295::-;2321:29;2332:17;2321:10;:29::i;:::-;2378:1;2364:4;:11;:15;:28;;;;2383:9;2364:28;2360:112;;;2408:53;2437:17;2456:4;2408:28;:53::i;:::-;;2183:295;;;:::o;4624:135::-;4688:35;4701:11;:9;:11::i;:::-;4688:35;;;-1:-1:-1;;;;;1966:15:181;;;1948:34;;2018:15;;;2013:2;1998:18;;1991:43;1883:18;4688:35:46;;;;;;;4733:19;4743:8;4733:9;:19::i;6853:325:57:-;6994:12;7019;7033:23;7060:6;-1:-1:-1;;;;;7060:19:57;7080:4;7060:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7018:67;;;;7102:69;7129:6;7137:7;7146:10;7158:12;7102:26;:69::i;:::-;7095:76;6853:325;-1:-1:-1;;;;;;6853:325:57:o;1301:140:46:-;1354:7;1030:66;1380:48;1614:190:60;1897:152:46;1963:37;1982:17;1963:18;:37::i;:::-;2015:27;;-1:-1:-1;;;;;2015:27:46;;;;;;;;1897:152;:::o;4312:201::-;-1:-1:-1;;;;;4375:22:46;;4367:73;;;;-1:-1:-1;;;4367:73:46;;2794:2:181;4367:73:46;;;2776:21:181;2833:2;2813:18;;;2806:30;2872:34;2852:18;;;2845:62;-1:-1:-1;;;2923:18:181;;;2916:36;2969:19;;4367:73:46;2592:402:181;4367:73:46;4498:8;3842:66;4450:39;:56;;-1:-1:-1;;;;;;4450:56:46;-1:-1:-1;;;;;4450:56:46;;;;;;;;;;-1:-1:-1;4312:201:46:o;7466:628:57:-;7646:12;7674:7;7670:418;;;7701:10;:17;7722:1;7701:22;7697:286;;-1:-1:-1;;;;;1465:19:57;;;7908:60;;;;-1:-1:-1;;;7908:60:57;;3201:2:181;7908:60:57;;;3183:21:181;3240:2;3220:18;;;3213:30;3279:31;3259:18;;;3252:59;3328:18;;7908:60:57;2999:353:181;7908:60:57;-1:-1:-1;8003:10:57;7996:17;;7670:418;8044:33;8052:10;8064:12;8044:7;:33::i;:::-;7466:628;;;;;;:::o;1532:259:46:-;-1:-1:-1;;;;;1465:19:57;;;1605:95:46;;;;-1:-1:-1;;;1605:95:46;;3559:2:181;1605:95:46;;;3541:21:181;3598:2;3578:18;;;3571:30;3637:34;3617:18;;;3610:62;-1:-1:-1;;;3688:18:181;;;3681:43;3741:19;;1605:95:46;3357:409:181;1605:95:46;1767:17;1030:66;1710:48;1614:190:60;8616:540:57;8775:17;;:21;8771:379;;9003:10;8997:17;9059:15;9046:10;9042:2;9038:19;9031:44;8771:379;9126:12;9119:20;;-1:-1:-1;;;9119:20:57;;;;;;;;:::i;14:173:181:-;82:20;;-1:-1:-1;;;;;131:31:181;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:665::-;462:6;470;478;531:2;519:9;510:7;506:23;502:32;499:52;;;547:1;544;537:12;499:52;570:29;589:9;570:29;:::i;:::-;560:39;;650:2;639:9;635:18;622:32;673:18;714:2;706:6;703:14;700:34;;;730:1;727;720:12;700:34;768:6;757:9;753:22;743:32;;813:7;806:4;802:2;798:13;794:27;784:55;;835:1;832;825:12;784:55;875:2;862:16;901:2;893:6;890:14;887:34;;;917:1;914;907:12;887:34;962:7;957:2;948:6;944:2;940:15;936:24;933:37;930:57;;;983:1;980;973:12;930:57;1014:2;1010;1006:11;996:21;;1036:6;1026:16;;;;;383:665;;;;;:::o;2045:250::-;2130:1;2140:113;2154:6;2151:1;2148:13;2140:113;;;2230:11;;;2224:18;2211:11;;;2204:39;2176:2;2169:10;2140:113;;;-1:-1:-1;;2287:1:181;2269:16;;2262:27;2045:250::o;2300:287::-;2429:3;2467:6;2461:13;2483:66;2542:6;2537:3;2530:4;2522:6;2518:17;2483:66;:::i;:::-;2565:16;;;;;2300:287;-1:-1:-1;;2300:287:181:o;3771:396::-;3920:2;3909:9;3902:21;3883:4;3952:6;3946:13;3995:6;3990:2;3979:9;3975:18;3968:34;4011:79;4083:6;4078:2;4067:9;4063:18;4058:2;4050:6;4046:15;4011:79;:::i;:::-;4151:2;4130:15;-1:-1:-1;;4126:29:181;4111:45;;;;4158:2;4107:54;;3771:396;-1:-1:-1;;3771:396:181:o"},"gasEstimates":{"creation":{"codeDepositCost":"419200","executionCost":"infinite","totalCost":"infinite"},"external":{"":"infinite","admin()":"infinite","changeAdmin(address)":"infinite","implementation()":"infinite","upgradeTo(address)":"infinite","upgradeToAndCall(address,bytes)":"infinite"},"internal":{"_admin()":"infinite","_beforeFallback()":"infinite"}},"methodIdentifiers":{"admin()":"f851a440","changeAdmin(address)":"8f283970","implementation()":"5c60da1b","upgradeTo(address)":"3659cfe6","upgradeToAndCall(address,bytes)":"4f1ef286"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n    /**\\n     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n     *\\n     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n     * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n     */\\n    constructor(address _logic, bytes memory _data) payable {\\n        _upgradeToAndCall(_logic, _data, false);\\n    }\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _implementation() internal view virtual override returns (address impl) {\\n        return ERC1967Upgrade._getImplementation();\\n    }\\n}\\n\",\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n    // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n    /**\\n     * @dev Storage slot with the address of the current implementation.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _getImplementation() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeTo(address newImplementation) internal {\\n        _setImplementation(newImplementation);\\n        emit Upgraded(newImplementation);\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCall(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _upgradeTo(newImplementation);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(newImplementation, data);\\n        }\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCallUUPS(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\\n        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n            _setImplementation(newImplementation);\\n        } else {\\n            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n                require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n            } catch {\\n                revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n            }\\n            _upgradeToAndCall(newImplementation, data, forceCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Storage slot with the admin of the contract.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _getAdmin() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 admin slot.\\n     */\\n    function _setAdmin(address newAdmin) private {\\n        require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     */\\n    function _changeAdmin(address newAdmin) internal {\\n        emit AdminChanged(_getAdmin(), newAdmin);\\n        _setAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n     */\\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n    /**\\n     * @dev Emitted when the beacon is upgraded.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n\\n    /**\\n     * @dev Returns the current beacon.\\n     */\\n    function _getBeacon() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\\n     */\\n    function _setBeacon(address newBeacon) private {\\n        require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n        require(\\n            Address.isContract(IBeacon(newBeacon).implementation()),\\n            \\\"ERC1967: beacon implementation is not a contract\\\"\\n        );\\n        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n    }\\n\\n    /**\\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n     *\\n     * Emits a {BeaconUpgraded} event.\\n     */\\n    function _upgradeBeaconToAndCall(\\n        address newBeacon,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _setBeacon(newBeacon);\\n        emit BeaconUpgraded(newBeacon);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n    /**\\n     * @dev Delegates the current call to `implementation`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _delegate(address implementation) internal virtual {\\n        assembly {\\n            // Copy msg.data. We take full control of memory in this inline assembly\\n            // block because it will not return to Solidity code. We overwrite the\\n            // Solidity scratch pad at memory position 0.\\n            calldatacopy(0, 0, calldatasize())\\n\\n            // Call the implementation.\\n            // out and outsize are 0 because we don't know the size yet.\\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n            // Copy the returned data.\\n            returndatacopy(0, 0, returndatasize())\\n\\n            switch result\\n            // delegatecall returns 0 on error.\\n            case 0 {\\n                revert(0, returndatasize())\\n            }\\n            default {\\n                return(0, returndatasize())\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n     * and {_fallback} should delegate.\\n     */\\n    function _implementation() internal view virtual returns (address);\\n\\n    /**\\n     * @dev Delegates the current call to the address returned by `_implementation()`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _fallback() internal virtual {\\n        _beforeFallback();\\n        _delegate(_implementation());\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n     * function in the contract matches the call data.\\n     */\\n    fallback() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n     * is empty.\\n     */\\n    receive() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n     * call, or as part of the Solidity `fallback` or `receive` functions.\\n     *\\n     * If overridden should call `super._beforeFallback()`.\\n     */\\n    function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n    /**\\n     * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n     * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n     */\\n    constructor(\\n        address _logic,\\n        address admin_,\\n        bytes memory _data\\n    ) payable ERC1967Proxy(_logic, _data) {\\n        _changeAdmin(admin_);\\n    }\\n\\n    /**\\n     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n     */\\n    modifier ifAdmin() {\\n        if (msg.sender == _getAdmin()) {\\n            _;\\n        } else {\\n            _fallback();\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the current admin.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n     *\\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n     */\\n    function admin() external ifAdmin returns (address admin_) {\\n        admin_ = _getAdmin();\\n    }\\n\\n    /**\\n     * @dev Returns the current implementation.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n     *\\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n     */\\n    function implementation() external ifAdmin returns (address implementation_) {\\n        implementation_ = _implementation();\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n     */\\n    function changeAdmin(address newAdmin) external virtual ifAdmin {\\n        _changeAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev Upgrade the implementation of the proxy.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n     */\\n    function upgradeTo(address newImplementation) external ifAdmin {\\n        _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n    }\\n\\n    /**\\n     * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n     * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n     * proxied contract.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n     */\\n    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n        _upgradeToAndCall(newImplementation, data, true);\\n    }\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _admin() internal view virtual returns (address) {\\n        return _getAdmin();\\n    }\\n\\n    /**\\n     * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n     */\\n    function _beforeFallback() internal virtual override {\\n        require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n        super._beforeFallback();\\n    }\\n}\\n\",\"keccak256\":\"0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/security/Pausable.sol":{"Pausable":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Contract module which allows children to implement an emergency stop mechanism that can be triggered by an authorized account. This module is used through inheritance. It will make available the modifiers `whenNotPaused` and `whenPaused`, which can be applied to the functions of your contract. Note that they will not be pausable by simply including this module, only once the modifiers are put in place.","events":{"Paused(address)":{"details":"Emitted when the pause is triggered by `account`."},"Unpaused(address)":{"details":"Emitted when the pause is lifted by `account`."}},"kind":"dev","methods":{"constructor":{"details":"Initializes the contract in unpaused state."},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"paused()":"5c975abb"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which allows children to implement an emergency stop mechanism that can be triggered by an authorized account. This module is used through inheritance. It will make available the modifiers `whenNotPaused` and `whenPaused`, which can be applied to the functions of your contract. Note that they will not be pausable by simply including this module, only once the modifiers are put in place.\",\"events\":{\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract in unpaused state.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/security/Pausable.sol\":\"Pausable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n    /**\\n     * @dev Emitted when the pause is triggered by `account`.\\n     */\\n    event Paused(address account);\\n\\n    /**\\n     * @dev Emitted when the pause is lifted by `account`.\\n     */\\n    event Unpaused(address account);\\n\\n    bool private _paused;\\n\\n    /**\\n     * @dev Initializes the contract in unpaused state.\\n     */\\n    constructor() {\\n        _paused = false;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    modifier whenNotPaused() {\\n        _requireNotPaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    modifier whenPaused() {\\n        _requirePaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the contract is paused, and false otherwise.\\n     */\\n    function paused() public view virtual returns (bool) {\\n        return _paused;\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is paused.\\n     */\\n    function _requireNotPaused() internal view virtual {\\n        require(!paused(), \\\"Pausable: paused\\\");\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is not paused.\\n     */\\n    function _requirePaused() internal view virtual {\\n        require(paused(), \\\"Pausable: not paused\\\");\\n    }\\n\\n    /**\\n     * @dev Triggers stopped state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    function _pause() internal virtual whenNotPaused {\\n        _paused = true;\\n        emit Paused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Returns to normal state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    function _unpause() internal virtual whenPaused {\\n        _paused = false;\\n        emit Unpaused(_msgSender());\\n    }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10590,"contract":"@openzeppelin/contracts/security/Pausable.sol:Pausable","label":"_paused","offset":0,"slot":"0","type":"t_bool"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/security/ReentrancyGuard.sol":{"ReentrancyGuard":{"abi":[],"devdoc":{"details":"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":\"ReentrancyGuard\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10691,"contract":"@openzeppelin/contracts/security/ReentrancyGuard.sol:ReentrancyGuard","label":"_status","offset":0,"slot":"0","type":"t_uint256"}],"types":{"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Interface of the ERC20 standard as defined in the EIP.","events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"kind":"dev","methods":{"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."},"approve(address,uint256)":{"details":"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"IERC20Metadata":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Interface for the optional metadata functions from the ERC20 standard. _Available since v4.1._","kind":"dev","methods":{"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."},"approve(address,uint256)":{"details":"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"decimals()":{"details":"Returns the decimals places of the token."},"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token."},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC20 standard. _Available since v4.1._\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol":{"IERC20Permit":{"abi":[{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all.","kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"nonces(address)":{"details":"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all.\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section].\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":\"IERC20Permit\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"SafeERC20":{"abi":[],"devdoc":{"details":"Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.","kind":"dev","methods":{},"title":"SafeERC20","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208173e88a41ec5a694bb255df33db144192a04b7f3001c9dee0cb4a22619b039c64736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 PUSH20 0xE88A41EC5A694BB255DF33DB144192A04B7F3001 0xC9 0xDE 0xE0 0xCB 0x4A 0x22 PUSH2 0x9B03 SWAP13 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"707:3748:56:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;707:3748:56;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208173e88a41ec5a694bb255df33db144192a04b7f3001c9dee0cb4a22619b039c64736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 PUSH20 0xE88A41EC5A694BB255DF33DB144192A04B7F3001 0xC9 0xDE 0xE0 0xCB 0x4A 0x22 PUSH2 0x9B03 SWAP13 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"707:3748:56:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_callOptionalReturn(contract IERC20,bytes memory)":"infinite","safeApprove(contract IERC20,address,uint256)":"infinite","safeDecreaseAllowance(contract IERC20,address,uint256)":"infinite","safeIncreaseAllowance(contract IERC20,address,uint256)":"infinite","safePermit(contract IERC20Permit,address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","safeTransfer(contract IERC20,address,uint256)":"infinite","safeTransferFrom(contract IERC20,address,address,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/Address.sol":{"Address":{"abi":[],"devdoc":{"details":"Collection of functions related to the address type","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200adb4f3f7178b8e511d8b1d15f94e47a2d1598d2d1f9b4ba38d5ef126a52024e64736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXP 0xDB 0x4F EXTCODEHASH PUSH18 0x78B8E511D8B1D15F94E47A2D1598D2D1F9B4 0xBA CODESIZE 0xD5 0xEF SLT PUSH11 0x52024E64736F6C63430008 GT STOP CALLER ","sourceMap":"194:8964:57:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;194:8964:57;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200adb4f3f7178b8e511d8b1d15f94e47a2d1598d2d1f9b4ba38d5ef126a52024e64736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXP 0xDB 0x4F EXTCODEHASH PUSH18 0x78B8E511D8B1D15F94E47A2D1598D2D1F9B4 0xBA CODESIZE 0xD5 0xEF SLT PUSH11 0x52024E64736F6C63430008 GT STOP CALLER ","sourceMap":"194:8964:57:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_revert(bytes memory,string memory)":"infinite","functionCall(address,bytes memory)":"infinite","functionCall(address,bytes memory,string memory)":"infinite","functionCallWithValue(address,bytes memory,uint256)":"infinite","functionCallWithValue(address,bytes memory,uint256,string memory)":"infinite","functionDelegateCall(address,bytes memory)":"infinite","functionDelegateCall(address,bytes memory,string memory)":"infinite","functionStaticCall(address,bytes memory)":"infinite","functionStaticCall(address,bytes memory,string memory)":"infinite","isContract(address)":"infinite","sendValue(address payable,uint256)":"infinite","verifyCallResult(bool,bytes memory,string memory)":"infinite","verifyCallResultFromTarget(address,bool,bytes memory,string memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/Context.sol":{"Context":{"abi":[],"devdoc":{"details":"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/Counters.sol":{"Counters":{"abi":[],"devdoc":{"author":"Matt Condon (@shrugs)","details":"Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number of elements in a mapping, issuing ERC721 ids, or counting request ids. Include with `using Counters for Counters.Counter;`","kind":"dev","methods":{},"title":"Counters","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122072b280ec842f2cf78d5684a7b92aede3f94683182a2c71623140eb67b80bc12464736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH19 0xB280EC842F2CF78D5684A7B92AEDE3F9468318 0x2A 0x2C PUSH18 0x623140EB67B80BC12464736F6C6343000811 STOP CALLER ","sourceMap":"424:971:59:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;424:971:59;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122072b280ec842f2cf78d5684a7b92aede3f94683182a2c71623140eb67b80bc12464736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH19 0xB280EC842F2CF78D5684A7B92AEDE3F9468318 0x2A 0x2C PUSH18 0x623140EB67B80BC12464736F6C6343000811 STOP CALLER ","sourceMap":"424:971:59:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"current(struct Counters.Counter storage pointer)":"infinite","decrement(struct Counters.Counter storage pointer)":"infinite","increment(struct Counters.Counter storage pointer)":"infinite","reset(struct Counters.Counter storage pointer)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Matt Condon (@shrugs)\",\"details\":\"Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number of elements in a mapping, issuing ERC721 ids, or counting request ids. Include with `using Counters for Counters.Counter;`\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Counters\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Counters.sol\":\"Counters\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Counters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Counters\\n * @author Matt Condon (@shrugs)\\n * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\\n * of elements in a mapping, issuing ERC721 ids, or counting request ids.\\n *\\n * Include with `using Counters for Counters.Counter;`\\n */\\nlibrary Counters {\\n    struct Counter {\\n        // This variable should never be directly accessed by users of the library: interactions must be restricted to\\n        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add\\n        // this feature: see https://github.com/ethereum/solidity/issues/4637\\n        uint256 _value; // default: 0\\n    }\\n\\n    function current(Counter storage counter) internal view returns (uint256) {\\n        return counter._value;\\n    }\\n\\n    function increment(Counter storage counter) internal {\\n        unchecked {\\n            counter._value += 1;\\n        }\\n    }\\n\\n    function decrement(Counter storage counter) internal {\\n        uint256 value = counter._value;\\n        require(value > 0, \\\"Counter: decrement overflow\\\");\\n        unchecked {\\n            counter._value = value - 1;\\n        }\\n    }\\n\\n    function reset(Counter storage counter) internal {\\n        counter._value = 0;\\n    }\\n}\\n\",\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/StorageSlot.sol":{"StorageSlot":{"abi":[],"devdoc":{"details":"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC1967 implementation slot: ``` contract ERC1967 {     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;     function _getImplementation() internal view returns (address) {         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;     }     function _setImplementation(address newImplementation) internal {         require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;     } } ``` _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f618ea557bbad0d732dffa9da51b47ba342924a845dc501f9c0653fcb63e391a64736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF6 XOR 0xEA SSTORE PUSH28 0xBAD0D732DFFA9DA51B47BA342924A845DC501F9C0653FCB63E391A64 PUSH20 0x6F6C634300081100330000000000000000000000 ","sourceMap":"1279:1391:60:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1279:1391:60;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f618ea557bbad0d732dffa9da51b47ba342924a845dc501f9c0653fcb63e391a64736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF6 XOR 0xEA SSTORE PUSH28 0xBAD0D732DFFA9DA51B47BA342924A845DC501F9C0653FCB63E391A64 PUSH20 0x6F6C634300081100330000000000000000000000 ","sourceMap":"1279:1391:60:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"getAddressSlot(bytes32)":"infinite","getBooleanSlot(bytes32)":"infinite","getBytes32Slot(bytes32)":"infinite","getUint256Slot(bytes32)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC1967 implementation slot: ``` contract ERC1967 {     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;     function _getImplementation() internal view returns (address) {         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;     }     function _setImplementation(address newImplementation) internal {         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;     } } ``` _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":\"StorageSlot\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/Strings.sol":{"Strings":{"abi":[],"devdoc":{"details":"String operations.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202480e6c580649581670d8f3ab7e1a31eac5b397935413b6cfa52683b904c60b664736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 DUP1 0xE6 0xC5 DUP1 PUSH5 0x9581670D8F GASPRICE 0xB7 0xE1 LOG3 0x1E 0xAC JUMPDEST CODECOPY PUSH26 0x35413B6CFA52683B904C60B664736F6C63430008110033000000 ","sourceMap":"188:2065:61:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;188:2065:61;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202480e6c580649581670d8f3ab7e1a31eac5b397935413b6cfa52683b904c60b664736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 DUP1 0xE6 0xC5 DUP1 PUSH5 0x9581670D8F GASPRICE 0xB7 0xE1 LOG3 0x1E 0xAC JUMPDEST CODECOPY PUSH26 0x35413B6CFA52683B904C60B664736F6C63430008110033000000 ","sourceMap":"188:2065:61:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"toHexString(address)":"infinite","toHexString(uint256)":"infinite","toHexString(uint256,uint256)":"infinite","toString(uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"String operations.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Strings.sol\":\"Strings\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator\\n    ) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1);\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator,\\n        Rounding rounding\\n    ) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10**64) {\\n                value /= 10**64;\\n                result += 64;\\n            }\\n            if (value >= 10**32) {\\n                value /= 10**32;\\n                result += 32;\\n            }\\n            if (value >= 10**16) {\\n                value /= 10**16;\\n                result += 16;\\n            }\\n            if (value >= 10**8) {\\n                value /= 10**8;\\n                result += 8;\\n            }\\n            if (value >= 10**4) {\\n                value /= 10**4;\\n                result += 4;\\n            }\\n            if (value >= 10**2) {\\n                value /= 10**2;\\n                result += 2;\\n            }\\n            if (value >= 10**1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/cryptography/ECDSA.sol":{"ECDSA":{"abi":[],"devdoc":{"details":"Elliptic Curve Digital Signature Algorithm (ECDSA) operations. These functions can be used to verify that a message was signed by the holder of the private keys of a given address.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200b16a3855b453109665a0bb4272a943f749189bdbdb85cce78117e1341058b0164736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SIGNEXTEND AND LOG3 DUP6 JUMPDEST GASLIMIT BALANCE MULMOD PUSH7 0x5A0BB4272A943F PUSH21 0x9189BDBDB85CCE78117E1341058B0164736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"369:8168:62:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;369:8168:62;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200b16a3855b453109665a0bb4272a943f749189bdbdb85cce78117e1341058b0164736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SIGNEXTEND AND LOG3 DUP6 JUMPDEST GASLIMIT BALANCE MULMOD PUSH7 0x5A0BB4272A943F PUSH21 0x9189BDBDB85CCE78117E1341058B0164736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"369:8168:62:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_throwError(enum ECDSA.RecoverError)":"infinite","recover(bytes32,bytes memory)":"infinite","recover(bytes32,bytes32,bytes32)":"infinite","recover(bytes32,uint8,bytes32,bytes32)":"infinite","toEthSignedMessageHash(bytes memory)":"infinite","toEthSignedMessageHash(bytes32)":"infinite","toTypedDataHash(bytes32,bytes32)":"infinite","tryRecover(bytes32,bytes memory)":"infinite","tryRecover(bytes32,bytes32,bytes32)":"infinite","tryRecover(bytes32,uint8,bytes32,bytes32)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Elliptic Curve Digital Signature Algorithm (ECDSA) operations. These functions can be used to verify that a message was signed by the holder of the private keys of a given address.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":\"ECDSA\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        bytes32 r,\\n        bytes32 vs\\n    ) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(\\n        bytes32 hash,\\n        bytes32 r,\\n        bytes32 vs\\n    ) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n    }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator\\n    ) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1);\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator,\\n        Rounding rounding\\n    ) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10**64) {\\n                value /= 10**64;\\n                result += 64;\\n            }\\n            if (value >= 10**32) {\\n                value /= 10**32;\\n                result += 32;\\n            }\\n            if (value >= 10**16) {\\n                value /= 10**16;\\n                result += 16;\\n            }\\n            if (value >= 10**8) {\\n                value /= 10**8;\\n                result += 8;\\n            }\\n            if (value >= 10**4) {\\n                value /= 10**4;\\n                result += 4;\\n            }\\n            if (value >= 10**2) {\\n                value /= 10**2;\\n                result += 2;\\n            }\\n            if (value >= 10**1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/cryptography/EIP712.sol":{"EIP712":{"abi":[],"devdoc":{"details":"https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data. The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible, thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in their contracts using a combination of `abi.encode` and `keccak256`. This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA ({_hashTypedDataV4}). The implementation of the domain separator was designed to be as efficient as possible while still properly updating the chain id to protect against replay attacks on an eventual fork of the chain. NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask]. _Available since v3.4._","kind":"dev","methods":{"constructor":{"details":"Initializes the domain separator and parameter caches. The meaning of `name` and `version` is specified in https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]: - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol. - `version`: the current major version of the signing domain. NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart contract upgrade]."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data. The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible, thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in their contracts using a combination of `abi.encode` and `keccak256`. This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA ({_hashTypedDataV4}). The implementation of the domain separator was designed to be as efficient as possible while still properly updating the chain id to protect against replay attacks on an eventual fork of the chain. NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask]. _Available since v3.4._\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the domain separator and parameter caches. The meaning of `name` and `version` is specified in https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]: - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol. - `version`: the current major version of the signing domain. NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart contract upgrade].\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":\"EIP712\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        bytes32 r,\\n        bytes32 vs\\n    ) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(\\n        bytes32 hash,\\n        bytes32 r,\\n        bytes32 vs\\n    ) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n    }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n    /* solhint-disable var-name-mixedcase */\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n    // invalidate the cached domain separator if the chain id changes.\\n    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n    uint256 private immutable _CACHED_CHAIN_ID;\\n    address private immutable _CACHED_THIS;\\n\\n    bytes32 private immutable _HASHED_NAME;\\n    bytes32 private immutable _HASHED_VERSION;\\n    bytes32 private immutable _TYPE_HASH;\\n\\n    /* solhint-enable var-name-mixedcase */\\n\\n    /**\\n     * @dev Initializes the domain separator and parameter caches.\\n     *\\n     * The meaning of `name` and `version` is specified in\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n     *\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n     * - `version`: the current major version of the signing domain.\\n     *\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n     * contract upgrade].\\n     */\\n    constructor(string memory name, string memory version) {\\n        bytes32 hashedName = keccak256(bytes(name));\\n        bytes32 hashedVersion = keccak256(bytes(version));\\n        bytes32 typeHash = keccak256(\\n            \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n        );\\n        _HASHED_NAME = hashedName;\\n        _HASHED_VERSION = hashedVersion;\\n        _CACHED_CHAIN_ID = block.chainid;\\n        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n        _CACHED_THIS = address(this);\\n        _TYPE_HASH = typeHash;\\n    }\\n\\n    /**\\n     * @dev Returns the domain separator for the current chain.\\n     */\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\n        if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n            return _CACHED_DOMAIN_SEPARATOR;\\n        } else {\\n            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n        }\\n    }\\n\\n    function _buildDomainSeparator(\\n        bytes32 typeHash,\\n        bytes32 nameHash,\\n        bytes32 versionHash\\n    ) private view returns (bytes32) {\\n        return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n    }\\n\\n    /**\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\n     *\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n     *\\n     * ```solidity\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n     *     keccak256(\\\"Mail(address to,string contents)\\\"),\\n     *     mailTo,\\n     *     keccak256(bytes(mailContents))\\n     * )));\\n     * address signer = ECDSA.recover(digest, signature);\\n     * ```\\n     */\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n    }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator\\n    ) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1);\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator,\\n        Rounding rounding\\n    ) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10**64) {\\n                value /= 10**64;\\n                result += 64;\\n            }\\n            if (value >= 10**32) {\\n                value /= 10**32;\\n                result += 32;\\n            }\\n            if (value >= 10**16) {\\n                value /= 10**16;\\n                result += 16;\\n            }\\n            if (value >= 10**8) {\\n                value /= 10**8;\\n                result += 8;\\n            }\\n            if (value >= 10**4) {\\n                value /= 10**4;\\n                result += 4;\\n            }\\n            if (value >= 10**2) {\\n                value /= 10**2;\\n                result += 2;\\n            }\\n            if (value >= 10**1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/math/Math.sol":{"Math":{"abi":[],"devdoc":{"details":"Standard math utilities missing in the Solidity language.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220535276f603c63551ea15da16fbe8483a3d8a0a26bb6b21d2e7c005f08420f23664736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE8 MSTORE PUSH23 0xF603C63551EA15DA16FBE8483A3D8A0A26BB6B21D2E7C0 SDIV CREATE DUP5 KECCAK256 CALLCODE CALLDATASIZE PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"202:12302:64:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;202:12302:64;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220535276f603c63551ea15da16fbe8483a3d8a0a26bb6b21d2e7c005f08420f23664736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE8 MSTORE PUSH23 0xF603C63551EA15DA16FBE8483A3D8A0A26BB6B21D2E7C0 SDIV CREATE DUP5 KECCAK256 CALLCODE CALLDATASIZE PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"202:12302:64:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"average(uint256,uint256)":"infinite","ceilDiv(uint256,uint256)":"infinite","log10(uint256)":"infinite","log10(uint256,enum Math.Rounding)":"infinite","log2(uint256)":"infinite","log2(uint256,enum Math.Rounding)":"infinite","log256(uint256)":"infinite","log256(uint256,enum Math.Rounding)":"infinite","max(uint256,uint256)":"infinite","min(uint256,uint256)":"infinite","mulDiv(uint256,uint256,uint256)":"infinite","mulDiv(uint256,uint256,uint256,enum Math.Rounding)":"infinite","sqrt(uint256)":"infinite","sqrt(uint256,enum Math.Rounding)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/Math.sol\":\"Math\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator\\n    ) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1);\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator,\\n        Rounding rounding\\n    ) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10**64) {\\n                value /= 10**64;\\n                result += 64;\\n            }\\n            if (value >= 10**32) {\\n                value /= 10**32;\\n                result += 32;\\n            }\\n            if (value >= 10**16) {\\n                value /= 10**16;\\n                result += 16;\\n            }\\n            if (value >= 10**8) {\\n                value /= 10**8;\\n                result += 8;\\n            }\\n            if (value >= 10**4) {\\n                value /= 10**4;\\n                result += 4;\\n            }\\n            if (value >= 10**2) {\\n                value /= 10**2;\\n                result += 2;\\n            }\\n            if (value >= 10**1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/vendor/arbitrum/IArbSys.sol":{"IArbSys":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"destination","type":"address"},{"indexed":true,"internalType":"uint256","name":"uniqueId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"batchNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"indexInBatch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"arbBlockNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethBlockNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"callvalue","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"L2ToL1Transaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"destination","type":"address"},{"indexed":true,"internalType":"uint256","name":"hash","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"position","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"arbBlockNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethBlockNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"callvalue","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"L2ToL1Tx","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"reserved","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"hash","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"position","type":"uint256"}],"name":"SendMerkleUpdate","type":"event"},{"inputs":[{"internalType":"uint256","name":"arbBlockNum","type":"uint256"}],"name":"arbBlockHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"arbBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"arbChainID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"arbOSVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStorageGasAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTopLevelCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"unused","type":"address"}],"name":"mapL1SenderContractAddressToL2Alias","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"myCallersAddressWithoutAliasing","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendMerkleTreeState","outputs":[{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"bytes32[]","name":"partials","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"sendTxToL1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"wasMyCallersAddressAliased","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"}],"name":"withdrawEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"}],"devdoc":{"events":{"L2ToL1Transaction(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bytes)":{"details":"DEPRECATED in favour of the new L2ToL1Tx event above after the nitro upgrade"},"L2ToL1Tx(address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes)":{"params":{"position":"= (level << 192) + leaf = (0 << 192) + leaf = leaf"}},"SendMerkleUpdate(uint256,bytes32,uint256)":{"params":{"hash":"the merkle hash","position":"= (level << 192) + leaf","reserved":"an index meant only to align the 4th index with L2ToL1Transaction's 4th event"}}},"kind":"dev","methods":{"arbBlockHash(uint256)":{"returns":{"_0":"block hash"}},"arbBlockNumber()":{"returns":{"_0":"block number as int"}},"arbChainID()":{"returns":{"_0":"Chain identifier as int"}},"arbOSVersion()":{"returns":{"_0":"version number as int"}},"getStorageGasAvailable()":{"returns":{"_0":"uint 0"}},"isTopLevelCall()":{"details":"this call has been deprecated and may be removed in a future release","returns":{"_0":"true if current execution frame is not a call by another L2 contract"}},"mapL1SenderContractAddressToL2Alias(address,address)":{"params":{"sender":"sender address","unused":"argument no longer used"},"returns":{"_0":"aliased sender address"}},"myCallersAddressWithoutAliasing()":{"returns":{"_0":"address of the caller's caller, without applying L1 contract address aliasing"}},"sendMerkleTreeState()":{"returns":{"partials":"hashes of partial subtrees in the send history tree","root":"root hash of the send history","size":"number of sends in the history"}},"sendTxToL1(address,bytes)":{"details":"it is not possible to execute on the L1 any L2-to-L1 transaction which contains data to a contract address without any code (as enforced by the Bridge contract).","params":{"data":"(optional) calldata for L1 contract call","destination":"recipient address on L1"},"returns":{"_0":"a unique identifier for this L2-to-L1 transaction."}},"wasMyCallersAddressAliased()":{"returns":{"_0":"true iff the caller's address is an alias for an L1 contract address"}},"withdrawEth(address)":{"params":{"destination":"recipient address on L1"},"returns":{"_0":"unique identifier for this L2-to-L1 transaction."}}},"title":"System level functionality","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"arbBlockHash(uint256)":"2b407a82","arbBlockNumber()":"a3b1b31d","arbChainID()":"d127f54a","arbOSVersion()":"051038f2","getStorageGasAvailable()":"a94597ff","isTopLevelCall()":"08bd624c","mapL1SenderContractAddressToL2Alias(address,address)":"4dbbd506","myCallersAddressWithoutAliasing()":"d74523b3","sendMerkleTreeState()":"7aeecd2a","sendTxToL1(address,bytes)":"928c169a","wasMyCallersAddressAliased()":"175a260b","withdrawEth(address)":"25e16063"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"uniqueId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"indexInBatch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"arbBlockNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethBlockNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"callvalue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"L2ToL1Transaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"hash\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"position\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"arbBlockNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethBlockNum\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"callvalue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"L2ToL1Tx\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserved\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"position\",\"type\":\"uint256\"}],\"name\":\"SendMerkleUpdate\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"arbBlockNum\",\"type\":\"uint256\"}],\"name\":\"arbBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbChainID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbOSVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStorageGasAvailable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isTopLevelCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"unused\",\"type\":\"address\"}],\"name\":\"mapL1SenderContractAddressToL2Alias\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"myCallersAddressWithoutAliasing\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sendMerkleTreeState\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"partials\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendTxToL1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wasMyCallersAddressAliased\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"withdrawEth\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"L2ToL1Transaction(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bytes)\":{\"details\":\"DEPRECATED in favour of the new L2ToL1Tx event above after the nitro upgrade\"},\"L2ToL1Tx(address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes)\":{\"params\":{\"position\":\"= (level << 192) + leaf = (0 << 192) + leaf = leaf\"}},\"SendMerkleUpdate(uint256,bytes32,uint256)\":{\"params\":{\"hash\":\"the merkle hash\",\"position\":\"= (level << 192) + leaf\",\"reserved\":\"an index meant only to align the 4th index with L2ToL1Transaction's 4th event\"}}},\"kind\":\"dev\",\"methods\":{\"arbBlockHash(uint256)\":{\"returns\":{\"_0\":\"block hash\"}},\"arbBlockNumber()\":{\"returns\":{\"_0\":\"block number as int\"}},\"arbChainID()\":{\"returns\":{\"_0\":\"Chain identifier as int\"}},\"arbOSVersion()\":{\"returns\":{\"_0\":\"version number as int\"}},\"getStorageGasAvailable()\":{\"returns\":{\"_0\":\"uint 0\"}},\"isTopLevelCall()\":{\"details\":\"this call has been deprecated and may be removed in a future release\",\"returns\":{\"_0\":\"true if current execution frame is not a call by another L2 contract\"}},\"mapL1SenderContractAddressToL2Alias(address,address)\":{\"params\":{\"sender\":\"sender address\",\"unused\":\"argument no longer used\"},\"returns\":{\"_0\":\"aliased sender address\"}},\"myCallersAddressWithoutAliasing()\":{\"returns\":{\"_0\":\"address of the caller's caller, without applying L1 contract address aliasing\"}},\"sendMerkleTreeState()\":{\"returns\":{\"partials\":\"hashes of partial subtrees in the send history tree\",\"root\":\"root hash of the send history\",\"size\":\"number of sends in the history\"}},\"sendTxToL1(address,bytes)\":{\"details\":\"it is not possible to execute on the L1 any L2-to-L1 transaction which contains data to a contract address without any code (as enforced by the Bridge contract).\",\"params\":{\"data\":\"(optional) calldata for L1 contract call\",\"destination\":\"recipient address on L1\"},\"returns\":{\"_0\":\"a unique identifier for this L2-to-L1 transaction.\"}},\"wasMyCallersAddressAliased()\":{\"returns\":{\"_0\":\"true iff the caller's address is an alias for an L1 contract address\"}},\"withdrawEth(address)\":{\"params\":{\"destination\":\"recipient address on L1\"},\"returns\":{\"_0\":\"unique identifier for this L2-to-L1 transaction.\"}}},\"title\":\"System level functionality\",\"version\":1},\"userdoc\":{\"events\":{\"L2ToL1Tx(address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes)\":{\"notice\":\"creates a send txn from L2 to L1\"},\"SendMerkleUpdate(uint256,bytes32,uint256)\":{\"notice\":\"logs a merkle branch for proof synthesis\"}},\"kind\":\"user\",\"methods\":{\"arbBlockHash(uint256)\":{\"notice\":\"Get Arbitrum block hash (reverts unless currentBlockNum-256 <= arbBlockNum < currentBlockNum)\"},\"arbBlockNumber()\":{\"notice\":\"Get Arbitrum block number (distinct from L1 block number; Arbitrum genesis block has block number 0)\"},\"arbChainID()\":{\"notice\":\"Gets the rollup's unique chain identifier\"},\"arbOSVersion()\":{\"notice\":\"Get internal version number identifying an ArbOS build\"},\"getStorageGasAvailable()\":{\"notice\":\"Returns 0 since Nitro has no concept of storage gas\"},\"isTopLevelCall()\":{\"notice\":\"(deprecated) check if current call is top level (meaning it was triggered by an EoA or a L1 contract)\"},\"mapL1SenderContractAddressToL2Alias(address,address)\":{\"notice\":\"map L1 sender contract address to its L2 alias\"},\"myCallersAddressWithoutAliasing()\":{\"notice\":\"return the address of the caller (of this caller of this), without applying L1 contract address aliasing\"},\"sendMerkleTreeState()\":{\"notice\":\"Get send Merkle tree state\"},\"sendTxToL1(address,bytes)\":{\"notice\":\"Send a transaction to L1\"},\"wasMyCallersAddressAliased()\":{\"notice\":\"check if the caller (of this caller of this) is an aliased L1 contract address\"},\"withdrawEth(address)\":{\"notice\":\"Send given amount of Eth to dest from sender. This is a convenience function, which is equivalent to calling sendTxToL1 with empty data.\"}},\"notice\":\"For use by contracts to interact with core L2-specific functionality. Precompiled contract that exists in every Arbitrum chain at address(100), 0x0000000000000000000000000000000000000064.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/vendor/arbitrum/IArbSys.sol\":\"IArbSys\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/vendor/arbitrum/IArbSys.sol\":{\"content\":\"// Copyright 2021-2022, Offchain Labs, Inc.\\n// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE\\n// SPDX-License-Identifier: BUSL-1.1\\n// OpenZeppelin Contracts (last updated v4.8.0) (vendor/arbitrum/IArbSys.sol)\\n\\npragma solidity >=0.4.21 <0.9.0;\\n\\n/**\\n * @title System level functionality\\n * @notice For use by contracts to interact with core L2-specific functionality.\\n * Precompiled contract that exists in every Arbitrum chain at address(100), 0x0000000000000000000000000000000000000064.\\n */\\ninterface IArbSys {\\n    /**\\n     * @notice Get Arbitrum block number (distinct from L1 block number; Arbitrum genesis block has block number 0)\\n     * @return block number as int\\n     */\\n    function arbBlockNumber() external view returns (uint256);\\n\\n    /**\\n     * @notice Get Arbitrum block hash (reverts unless currentBlockNum-256 <= arbBlockNum < currentBlockNum)\\n     * @return block hash\\n     */\\n    function arbBlockHash(uint256 arbBlockNum) external view returns (bytes32);\\n\\n    /**\\n     * @notice Gets the rollup's unique chain identifier\\n     * @return Chain identifier as int\\n     */\\n    function arbChainID() external view returns (uint256);\\n\\n    /**\\n     * @notice Get internal version number identifying an ArbOS build\\n     * @return version number as int\\n     */\\n    function arbOSVersion() external view returns (uint256);\\n\\n    /**\\n     * @notice Returns 0 since Nitro has no concept of storage gas\\n     * @return uint 0\\n     */\\n    function getStorageGasAvailable() external view returns (uint256);\\n\\n    /**\\n     * @notice (deprecated) check if current call is top level (meaning it was triggered by an EoA or a L1 contract)\\n     * @dev this call has been deprecated and may be removed in a future release\\n     * @return true if current execution frame is not a call by another L2 contract\\n     */\\n    function isTopLevelCall() external view returns (bool);\\n\\n    /**\\n     * @notice map L1 sender contract address to its L2 alias\\n     * @param sender sender address\\n     * @param unused argument no longer used\\n     * @return aliased sender address\\n     */\\n    function mapL1SenderContractAddressToL2Alias(address sender, address unused) external pure returns (address);\\n\\n    /**\\n     * @notice check if the caller (of this caller of this) is an aliased L1 contract address\\n     * @return true iff the caller's address is an alias for an L1 contract address\\n     */\\n    function wasMyCallersAddressAliased() external view returns (bool);\\n\\n    /**\\n     * @notice return the address of the caller (of this caller of this), without applying L1 contract address aliasing\\n     * @return address of the caller's caller, without applying L1 contract address aliasing\\n     */\\n    function myCallersAddressWithoutAliasing() external view returns (address);\\n\\n    /**\\n     * @notice Send given amount of Eth to dest from sender.\\n     * This is a convenience function, which is equivalent to calling sendTxToL1 with empty data.\\n     * @param destination recipient address on L1\\n     * @return unique identifier for this L2-to-L1 transaction.\\n     */\\n    function withdrawEth(address destination) external payable returns (uint256);\\n\\n    /**\\n     * @notice Send a transaction to L1\\n     * @dev it is not possible to execute on the L1 any L2-to-L1 transaction which contains data\\n     * to a contract address without any code (as enforced by the Bridge contract).\\n     * @param destination recipient address on L1\\n     * @param data (optional) calldata for L1 contract call\\n     * @return a unique identifier for this L2-to-L1 transaction.\\n     */\\n    function sendTxToL1(address destination, bytes calldata data) external payable returns (uint256);\\n\\n    /**\\n     * @notice Get send Merkle tree state\\n     * @return size number of sends in the history\\n     * @return root root hash of the send history\\n     * @return partials hashes of partial subtrees in the send history tree\\n     */\\n    function sendMerkleTreeState()\\n        external\\n        view\\n        returns (\\n            uint256 size,\\n            bytes32 root,\\n            bytes32[] memory partials\\n        );\\n\\n    /**\\n     * @notice creates a send txn from L2 to L1\\n     * @param position = (level << 192) + leaf = (0 << 192) + leaf = leaf\\n     */\\n    event L2ToL1Tx(\\n        address caller,\\n        address indexed destination,\\n        uint256 indexed hash,\\n        uint256 indexed position,\\n        uint256 arbBlockNum,\\n        uint256 ethBlockNum,\\n        uint256 timestamp,\\n        uint256 callvalue,\\n        bytes data\\n    );\\n\\n    /// @dev DEPRECATED in favour of the new L2ToL1Tx event above after the nitro upgrade\\n    event L2ToL1Transaction(\\n        address caller,\\n        address indexed destination,\\n        uint256 indexed uniqueId,\\n        uint256 indexed batchNumber,\\n        uint256 indexInBatch,\\n        uint256 arbBlockNum,\\n        uint256 ethBlockNum,\\n        uint256 timestamp,\\n        uint256 callvalue,\\n        bytes data\\n    );\\n\\n    /**\\n     * @notice logs a merkle branch for proof synthesis\\n     * @param reserved an index meant only to align the 4th index with L2ToL1Transaction's 4th event\\n     * @param hash the merkle hash\\n     * @param position = (level << 192) + leaf\\n     */\\n    event SendMerkleUpdate(uint256 indexed reserved, bytes32 indexed hash, uint256 indexed position);\\n}\\n\",\"keccak256\":\"0xed30463b2696afccf589a002901b4b6556b807fe9f8de8bd6f6b665b3634f933\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"events":{"L2ToL1Tx(address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes)":{"notice":"creates a send txn from L2 to L1"},"SendMerkleUpdate(uint256,bytes32,uint256)":{"notice":"logs a merkle branch for proof synthesis"}},"kind":"user","methods":{"arbBlockHash(uint256)":{"notice":"Get Arbitrum block hash (reverts unless currentBlockNum-256 <= arbBlockNum < currentBlockNum)"},"arbBlockNumber()":{"notice":"Get Arbitrum block number (distinct from L1 block number; Arbitrum genesis block has block number 0)"},"arbChainID()":{"notice":"Gets the rollup's unique chain identifier"},"arbOSVersion()":{"notice":"Get internal version number identifying an ArbOS build"},"getStorageGasAvailable()":{"notice":"Returns 0 since Nitro has no concept of storage gas"},"isTopLevelCall()":{"notice":"(deprecated) check if current call is top level (meaning it was triggered by an EoA or a L1 contract)"},"mapL1SenderContractAddressToL2Alias(address,address)":{"notice":"map L1 sender contract address to its L2 alias"},"myCallersAddressWithoutAliasing()":{"notice":"return the address of the caller (of this caller of this), without applying L1 contract address aliasing"},"sendMerkleTreeState()":{"notice":"Get send Merkle tree state"},"sendTxToL1(address,bytes)":{"notice":"Send a transaction to L1"},"wasMyCallersAddressAliased()":{"notice":"check if the caller (of this caller of this) is an aliased L1 contract address"},"withdrawEth(address)":{"notice":"Send given amount of Eth to dest from sender. This is a convenience function, which is equivalent to calling sendTxToL1 with empty data."}},"notice":"For use by contracts to interact with core L2-specific functionality. Precompiled contract that exists in every Arbitrum chain at address(100), 0x0000000000000000000000000000000000000064.","version":1}}},"@openzeppelin/contracts/vendor/arbitrum/IBridge.sol":{"IBridge":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"outbox","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"BridgeCallTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"inbox","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"InboxToggle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"messageIndex","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"beforeInboxAcc","type":"bytes32"},{"indexed":false,"internalType":"address","name":"inbox","type":"address"},{"indexed":false,"internalType":"uint8","name":"kind","type":"uint8"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"bytes32","name":"messageDataHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"baseFeeL1","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"timestamp","type":"uint64"}],"name":"MessageDelivered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"outbox","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"OutboxToggle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newSequencerInbox","type":"address"}],"name":"SequencerInboxUpdated","type":"event"},{"inputs":[],"name":"activeOutbox","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allowedDelayedInboxList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"inbox","type":"address"}],"name":"allowedDelayedInboxes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allowedOutboxList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"outbox","type":"address"}],"name":"allowedOutboxes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"delayedInboxAccs","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayedMessageCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"messageDataHash","type":"bytes32"}],"name":"enqueueDelayedMessage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"dataHash","type":"bytes32"},{"internalType":"uint256","name":"afterDelayedMessagesRead","type":"uint256"},{"internalType":"uint256","name":"prevMessageCount","type":"uint256"},{"internalType":"uint256","name":"newMessageCount","type":"uint256"}],"name":"enqueueSequencerMessage","outputs":[{"internalType":"uint256","name":"seqMessageIndex","type":"uint256"},{"internalType":"bytes32","name":"beforeAcc","type":"bytes32"},{"internalType":"bytes32","name":"delayedAcc","type":"bytes32"},{"internalType":"bytes32","name":"acc","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"executeCall","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rollup_","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rollup","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sequencerInbox","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sequencerInboxAccs","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sequencerMessageCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sequencerReportedSubMessageCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"inbox","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setDelayedInbox","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"inbox","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setOutbox","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sequencerInbox","type":"address"}],"name":"setSequencerInbox","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"batchPoster","type":"address"},{"internalType":"bytes32","name":"dataHash","type":"bytes32"}],"name":"submitBatchSpendingReport","outputs":[{"internalType":"uint256","name":"msgNum","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"delayedInboxAccs(uint256)":{"details":"Accumulator for delayed inbox messages; tail represents hash of the current state; each element represents the inclusion of a new message."},"enqueueDelayedMessage(uint8,address,bytes32)":{"details":"Enqueue a message in the delayed inbox accumulator.      These messages are later sequenced in the SequencerInbox, either      by the sequencer as part of a normal batch, or by force inclusion."},"sequencerInboxAccs(uint256)":{"details":"Accumulator for sequencer inbox messages; tail represents hash of the current state; each element represents the inclusion of a new message."},"submitBatchSpendingReport(address,bytes32)":{"details":"Allows the sequencer inbox to submit a delayed message of the batchPostingReport type      This is done through a separate function entrypoint instead of allowing the sequencer inbox      to call `enqueueDelayedMessage` to avoid the gas overhead of an extra SLOAD in either      every delayed inbox or every sequencer inbox call."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"activeOutbox()":"ab5d8943","allowedDelayedInboxList(uint256)":"e76f5c8d","allowedDelayedInboxes(address)":"ae60bd13","allowedOutboxList(uint256)":"945e1147","allowedOutboxes(address)":"413b35bd","delayedInboxAccs(uint256)":"d5719dc2","delayedMessageCount()":"eca067ad","enqueueDelayedMessage(uint8,address,bytes32)":"8db5993b","enqueueSequencerMessage(bytes32,uint256,uint256,uint256)":"86598a56","executeCall(address,uint256,bytes)":"9e5d4c49","initialize(address)":"c4d66de8","rollup()":"cb23bcb5","sequencerInbox()":"ee35f327","sequencerInboxAccs(uint256)":"16bf5579","sequencerMessageCount()":"0084120c","sequencerReportedSubMessageCount()":"5fca4a16","setDelayedInbox(address,bool)":"47fb24c5","setOutbox(address,bool)":"cee3d728","setSequencerInbox(address)":"4f61f850","submitBatchSpendingReport(address,bytes32)":"7a88b107"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"BridgeCallTriggered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"InboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"messageIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"beforeInboxAcc\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseFeeL1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"MessageDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"OutboxToggle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerInbox\",\"type\":\"address\"}],\"name\":\"SequencerInboxUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"activeOutbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedDelayedInboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"}],\"name\":\"allowedDelayedInboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowedOutboxList\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"outbox\",\"type\":\"address\"}],\"name\":\"allowedOutboxes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"delayedInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayedMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"messageDataHash\",\"type\":\"bytes32\"}],\"name\":\"enqueueDelayedMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"afterDelayedMessagesRead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevMessageCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMessageCount\",\"type\":\"uint256\"}],\"name\":\"enqueueSequencerMessage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"seqMessageIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"beforeAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"delayedAcc\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"acc\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rollup_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sequencerInboxAccs\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerReportedSubMessageCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setDelayedInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"inbox\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOutbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencerInbox\",\"type\":\"address\"}],\"name\":\"setSequencerInbox\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"batchPoster\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"}],\"name\":\"submitBatchSpendingReport\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"msgNum\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"delayedInboxAccs(uint256)\":{\"details\":\"Accumulator for delayed inbox messages; tail represents hash of the current state; each element represents the inclusion of a new message.\"},\"enqueueDelayedMessage(uint8,address,bytes32)\":{\"details\":\"Enqueue a message in the delayed inbox accumulator.      These messages are later sequenced in the SequencerInbox, either      by the sequencer as part of a normal batch, or by force inclusion.\"},\"sequencerInboxAccs(uint256)\":{\"details\":\"Accumulator for sequencer inbox messages; tail represents hash of the current state; each element represents the inclusion of a new message.\"},\"submitBatchSpendingReport(address,bytes32)\":{\"details\":\"Allows the sequencer inbox to submit a delayed message of the batchPostingReport type      This is done through a separate function entrypoint instead of allowing the sequencer inbox      to call `enqueueDelayedMessage` to avoid the gas overhead of an extra SLOAD in either      every delayed inbox or every sequencer inbox call.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/vendor/arbitrum/IBridge.sol\":\"IBridge\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/vendor/arbitrum/IBridge.sol\":{\"content\":\"// Copyright 2021-2022, Offchain Labs, Inc.\\n// For license information, see https://github.com/nitro/blob/master/LICENSE\\n// SPDX-License-Identifier: BUSL-1.1\\n// OpenZeppelin Contracts (last updated v4.8.0) (vendor/arbitrum/IBridge.sol)\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.6.9 <0.9.0;\\n\\ninterface IBridge {\\n    event MessageDelivered(\\n        uint256 indexed messageIndex,\\n        bytes32 indexed beforeInboxAcc,\\n        address inbox,\\n        uint8 kind,\\n        address sender,\\n        bytes32 messageDataHash,\\n        uint256 baseFeeL1,\\n        uint64 timestamp\\n    );\\n\\n    event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data);\\n\\n    event InboxToggle(address indexed inbox, bool enabled);\\n\\n    event OutboxToggle(address indexed outbox, bool enabled);\\n\\n    event SequencerInboxUpdated(address newSequencerInbox);\\n\\n    function allowedDelayedInboxList(uint256) external returns (address);\\n\\n    function allowedOutboxList(uint256) external returns (address);\\n\\n    /// @dev Accumulator for delayed inbox messages; tail represents hash of the current state; each element represents the inclusion of a new message.\\n    function delayedInboxAccs(uint256) external view returns (bytes32);\\n\\n    /// @dev Accumulator for sequencer inbox messages; tail represents hash of the current state; each element represents the inclusion of a new message.\\n    function sequencerInboxAccs(uint256) external view returns (bytes32);\\n\\n    // OpenZeppelin: changed return type from IOwnable\\n    function rollup() external view returns (address);\\n\\n    function sequencerInbox() external view returns (address);\\n\\n    function activeOutbox() external view returns (address);\\n\\n    function allowedDelayedInboxes(address inbox) external view returns (bool);\\n\\n    function allowedOutboxes(address outbox) external view returns (bool);\\n\\n    function sequencerReportedSubMessageCount() external view returns (uint256);\\n\\n    /**\\n     * @dev Enqueue a message in the delayed inbox accumulator.\\n     *      These messages are later sequenced in the SequencerInbox, either\\n     *      by the sequencer as part of a normal batch, or by force inclusion.\\n     */\\n    function enqueueDelayedMessage(\\n        uint8 kind,\\n        address sender,\\n        bytes32 messageDataHash\\n    ) external payable returns (uint256);\\n\\n    function executeCall(\\n        address to,\\n        uint256 value,\\n        bytes calldata data\\n    ) external returns (bool success, bytes memory returnData);\\n\\n    function delayedMessageCount() external view returns (uint256);\\n\\n    function sequencerMessageCount() external view returns (uint256);\\n\\n    // ---------- onlySequencerInbox functions ----------\\n\\n    function enqueueSequencerMessage(\\n        bytes32 dataHash,\\n        uint256 afterDelayedMessagesRead,\\n        uint256 prevMessageCount,\\n        uint256 newMessageCount\\n    )\\n        external\\n        returns (\\n            uint256 seqMessageIndex,\\n            bytes32 beforeAcc,\\n            bytes32 delayedAcc,\\n            bytes32 acc\\n        );\\n\\n    /**\\n     * @dev Allows the sequencer inbox to submit a delayed message of the batchPostingReport type\\n     *      This is done through a separate function entrypoint instead of allowing the sequencer inbox\\n     *      to call `enqueueDelayedMessage` to avoid the gas overhead of an extra SLOAD in either\\n     *      every delayed inbox or every sequencer inbox call.\\n     */\\n    function submitBatchSpendingReport(address batchPoster, bytes32 dataHash) external returns (uint256 msgNum);\\n\\n    // ---------- onlyRollupOrOwner functions ----------\\n\\n    function setSequencerInbox(address _sequencerInbox) external;\\n\\n    function setDelayedInbox(address inbox, bool enabled) external;\\n\\n    function setOutbox(address inbox, bool enabled) external;\\n\\n    // ---------- initializer ----------\\n\\n    // OpenZeppelin: changed rollup_ type from IOwnable\\n    function initialize(address rollup_) external;\\n}\\n\",\"keccak256\":\"0xdc8847efc0ca74c9f708d9bbd26592b4d21ccbcece6c1ce547d411891cdfe62d\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/vendor/arbitrum/IOutbox.sol":{"IOutbox":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"l2Sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"zero","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transactionIndex","type":"uint256"}],"name":"OutBoxTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"outputRoot","type":"bytes32"}],"name":"SendRootUpdated","type":"event"},{"inputs":[],"name":"OUTBOX_VERSION","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bridge","outputs":[{"internalType":"contract IBridge","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"l2Sender","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"l2Block","type":"uint256"},{"internalType":"uint256","name":"l1Block","type":"uint256"},{"internalType":"uint256","name":"l2Timestamp","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"calculateItemHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"path","type":"uint256"},{"internalType":"bytes32","name":"item","type":"bytes32"}],"name":"calculateMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"l2Sender","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"l2Block","type":"uint256"},{"internalType":"uint256","name":"l1Block","type":"uint256"},{"internalType":"uint256","name":"l2Timestamp","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"executeTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"l2Sender","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"l2Block","type":"uint256"},{"internalType":"uint256","name":"l1Block","type":"uint256"},{"internalType":"uint256","name":"l2Timestamp","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"executeTransactionSimulation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"isSpent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2ToL1Block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2ToL1EthBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2ToL1OutputId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2ToL1Sender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2ToL1Timestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rollup","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"roots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"spent","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sendRoot","type":"bytes32"},{"internalType":"bytes32","name":"l2BlockHash","type":"bytes32"}],"name":"updateSendRoot","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"executeTransaction(bytes32[],uint256,address,address,uint256,uint256,uint256,uint256,bytes)":{"details":"Reverts if dispute period hasn't expired, since the outbox entry      is only created once the rollup confirms the respective assertion.it is not possible to execute any L2-to-L1 transaction which contains data      to a contract address without any code (as enforced by the Bridge contract).","params":{"data":"abi-encoded L1 message data","index":"Merkle path to message","l1Block":"l1 block number at which sendTxToL1 call was made","l2Block":"l2 block number at which sendTxToL1 call was made","l2Sender":"sender if original message (i.e., caller of ArbSys.sendTxToL1)","l2Timestamp":"l2 Timestamp at which sendTxToL1 call was made","proof":"Merkle proof of message inclusion in send root","to":"destination address for L1 contract call","value":"wei in L1 message"}},"executeTransactionSimulation(uint256,address,address,uint256,uint256,uint256,uint256,bytes)":{"details":"function used to simulate the result of a particular function call from the outbox       it is useful for things such as gas estimates. This function includes all costs except for       proof validation (which can be considered offchain as a somewhat of a fixed cost - it's       not really a fixed cost, but can be treated as so with a fixed overhead for gas estimation).       We can't include the cost of proof validation since this is intended to be used to simulate txs       that are included in yet-to-be confirmed merkle roots. The simulation entrypoint could instead pretend       to confirm a pending merkle root, but that would be less practical for integrating with tooling.       It is only possible to trigger it when the msg sender is address zero, which should be impossible       unless under simulation in an eth_call or eth_estimateGas"},"isSpent(uint256)":{"params":{"index":"Merkle path to message"},"returns":{"_0":"true if the message has been spent"}},"l2ToL1Block()":{"returns":{"_0":"l2Block return L2 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active"}},"l2ToL1EthBlock()":{"returns":{"_0":"l1Block return L1 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active"}},"l2ToL1OutputId()":{"returns":{"_0":"outputId returns the unique output identifier of the L2 to L1 tx or 0 if no L2 to L1 transaction is active"}},"l2ToL1Sender()":{"details":"the l2ToL1Sender behaves as the tx.origin, the msg.sender should be validated to protect against reentrancies"},"l2ToL1Timestamp()":{"returns":{"_0":"timestamp return L2 timestamp when the L2 tx was initiated or 0 if no L2 to L1 transaction is active"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"OUTBOX_VERSION()":"c75184df","bridge()":"e78cea92","calculateItemHash(address,address,uint256,uint256,uint256,uint256,bytes)":"9f0c04bf","calculateMerkleRoot(bytes32[],uint256,bytes32)":"007436d3","executeTransaction(bytes32[],uint256,address,address,uint256,uint256,uint256,uint256,bytes)":"08635a95","executeTransactionSimulation(uint256,address,address,uint256,uint256,uint256,uint256,bytes)":"288e5b10","isSpent(uint256)":"5a129efe","l2ToL1Block()":"46547790","l2ToL1EthBlock()":"8515bc6a","l2ToL1OutputId()":"72f2a8c7","l2ToL1Sender()":"80648b02","l2ToL1Timestamp()":"b0f30537","rollup()":"cb23bcb5","roots(bytes32)":"ae6dead7","spent(uint256)":"d5b5cc23","updateSendRoot(bytes32,bytes32)":"a04cee60"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"zero\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionIndex\",\"type\":\"uint256\"}],\"name\":\"OutBoxTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"name\":\"SendRootUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"OUTBOX_VERSION\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contract IBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"calculateItemHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"path\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"item\",\"type\":\"bytes32\"}],\"name\":\"calculateMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeTransactionSimulation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"isSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Block\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1EthBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1OutputId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"roots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"spent\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sendRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l2BlockHash\",\"type\":\"bytes32\"}],\"name\":\"updateSendRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"executeTransaction(bytes32[],uint256,address,address,uint256,uint256,uint256,uint256,bytes)\":{\"details\":\"Reverts if dispute period hasn't expired, since the outbox entry      is only created once the rollup confirms the respective assertion.it is not possible to execute any L2-to-L1 transaction which contains data      to a contract address without any code (as enforced by the Bridge contract).\",\"params\":{\"data\":\"abi-encoded L1 message data\",\"index\":\"Merkle path to message\",\"l1Block\":\"l1 block number at which sendTxToL1 call was made\",\"l2Block\":\"l2 block number at which sendTxToL1 call was made\",\"l2Sender\":\"sender if original message (i.e., caller of ArbSys.sendTxToL1)\",\"l2Timestamp\":\"l2 Timestamp at which sendTxToL1 call was made\",\"proof\":\"Merkle proof of message inclusion in send root\",\"to\":\"destination address for L1 contract call\",\"value\":\"wei in L1 message\"}},\"executeTransactionSimulation(uint256,address,address,uint256,uint256,uint256,uint256,bytes)\":{\"details\":\"function used to simulate the result of a particular function call from the outbox       it is useful for things such as gas estimates. This function includes all costs except for       proof validation (which can be considered offchain as a somewhat of a fixed cost - it's       not really a fixed cost, but can be treated as so with a fixed overhead for gas estimation).       We can't include the cost of proof validation since this is intended to be used to simulate txs       that are included in yet-to-be confirmed merkle roots. The simulation entrypoint could instead pretend       to confirm a pending merkle root, but that would be less practical for integrating with tooling.       It is only possible to trigger it when the msg sender is address zero, which should be impossible       unless under simulation in an eth_call or eth_estimateGas\"},\"isSpent(uint256)\":{\"params\":{\"index\":\"Merkle path to message\"},\"returns\":{\"_0\":\"true if the message has been spent\"}},\"l2ToL1Block()\":{\"returns\":{\"_0\":\"l2Block return L2 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\"}},\"l2ToL1EthBlock()\":{\"returns\":{\"_0\":\"l1Block return L1 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\"}},\"l2ToL1OutputId()\":{\"returns\":{\"_0\":\"outputId returns the unique output identifier of the L2 to L1 tx or 0 if no L2 to L1 transaction is active\"}},\"l2ToL1Sender()\":{\"details\":\"the l2ToL1Sender behaves as the tx.origin, the msg.sender should be validated to protect against reentrancies\"},\"l2ToL1Timestamp()\":{\"returns\":{\"_0\":\"timestamp return L2 timestamp when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeTransaction(bytes32[],uint256,address,address,uint256,uint256,uint256,uint256,bytes)\":{\"notice\":\"Executes a messages in an Outbox entry.\"},\"l2ToL1Sender()\":{\"notice\":\"When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account         When the return value is zero, that means this is a system message\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/vendor/arbitrum/IOutbox.sol\":\"IOutbox\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/vendor/arbitrum/IBridge.sol\":{\"content\":\"// Copyright 2021-2022, Offchain Labs, Inc.\\n// For license information, see https://github.com/nitro/blob/master/LICENSE\\n// SPDX-License-Identifier: BUSL-1.1\\n// OpenZeppelin Contracts (last updated v4.8.0) (vendor/arbitrum/IBridge.sol)\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.6.9 <0.9.0;\\n\\ninterface IBridge {\\n    event MessageDelivered(\\n        uint256 indexed messageIndex,\\n        bytes32 indexed beforeInboxAcc,\\n        address inbox,\\n        uint8 kind,\\n        address sender,\\n        bytes32 messageDataHash,\\n        uint256 baseFeeL1,\\n        uint64 timestamp\\n    );\\n\\n    event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data);\\n\\n    event InboxToggle(address indexed inbox, bool enabled);\\n\\n    event OutboxToggle(address indexed outbox, bool enabled);\\n\\n    event SequencerInboxUpdated(address newSequencerInbox);\\n\\n    function allowedDelayedInboxList(uint256) external returns (address);\\n\\n    function allowedOutboxList(uint256) external returns (address);\\n\\n    /// @dev Accumulator for delayed inbox messages; tail represents hash of the current state; each element represents the inclusion of a new message.\\n    function delayedInboxAccs(uint256) external view returns (bytes32);\\n\\n    /// @dev Accumulator for sequencer inbox messages; tail represents hash of the current state; each element represents the inclusion of a new message.\\n    function sequencerInboxAccs(uint256) external view returns (bytes32);\\n\\n    // OpenZeppelin: changed return type from IOwnable\\n    function rollup() external view returns (address);\\n\\n    function sequencerInbox() external view returns (address);\\n\\n    function activeOutbox() external view returns (address);\\n\\n    function allowedDelayedInboxes(address inbox) external view returns (bool);\\n\\n    function allowedOutboxes(address outbox) external view returns (bool);\\n\\n    function sequencerReportedSubMessageCount() external view returns (uint256);\\n\\n    /**\\n     * @dev Enqueue a message in the delayed inbox accumulator.\\n     *      These messages are later sequenced in the SequencerInbox, either\\n     *      by the sequencer as part of a normal batch, or by force inclusion.\\n     */\\n    function enqueueDelayedMessage(\\n        uint8 kind,\\n        address sender,\\n        bytes32 messageDataHash\\n    ) external payable returns (uint256);\\n\\n    function executeCall(\\n        address to,\\n        uint256 value,\\n        bytes calldata data\\n    ) external returns (bool success, bytes memory returnData);\\n\\n    function delayedMessageCount() external view returns (uint256);\\n\\n    function sequencerMessageCount() external view returns (uint256);\\n\\n    // ---------- onlySequencerInbox functions ----------\\n\\n    function enqueueSequencerMessage(\\n        bytes32 dataHash,\\n        uint256 afterDelayedMessagesRead,\\n        uint256 prevMessageCount,\\n        uint256 newMessageCount\\n    )\\n        external\\n        returns (\\n            uint256 seqMessageIndex,\\n            bytes32 beforeAcc,\\n            bytes32 delayedAcc,\\n            bytes32 acc\\n        );\\n\\n    /**\\n     * @dev Allows the sequencer inbox to submit a delayed message of the batchPostingReport type\\n     *      This is done through a separate function entrypoint instead of allowing the sequencer inbox\\n     *      to call `enqueueDelayedMessage` to avoid the gas overhead of an extra SLOAD in either\\n     *      every delayed inbox or every sequencer inbox call.\\n     */\\n    function submitBatchSpendingReport(address batchPoster, bytes32 dataHash) external returns (uint256 msgNum);\\n\\n    // ---------- onlyRollupOrOwner functions ----------\\n\\n    function setSequencerInbox(address _sequencerInbox) external;\\n\\n    function setDelayedInbox(address inbox, bool enabled) external;\\n\\n    function setOutbox(address inbox, bool enabled) external;\\n\\n    // ---------- initializer ----------\\n\\n    // OpenZeppelin: changed rollup_ type from IOwnable\\n    function initialize(address rollup_) external;\\n}\\n\",\"keccak256\":\"0xdc8847efc0ca74c9f708d9bbd26592b4d21ccbcece6c1ce547d411891cdfe62d\",\"license\":\"BUSL-1.1\"},\"@openzeppelin/contracts/vendor/arbitrum/IOutbox.sol\":{\"content\":\"// Copyright 2021-2022, Offchain Labs, Inc.\\n// For license information, see https://github.com/nitro/blob/master/LICENSE\\n// SPDX-License-Identifier: BUSL-1.1\\n// OpenZeppelin Contracts (last updated v4.8.0) (vendor/arbitrum/IOutbox.sol)\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.6.9 <0.9.0;\\n\\nimport \\\"./IBridge.sol\\\";\\n\\ninterface IOutbox {\\n    event SendRootUpdated(bytes32 indexed blockHash, bytes32 indexed outputRoot);\\n    event OutBoxTransactionExecuted(\\n        address indexed to,\\n        address indexed l2Sender,\\n        uint256 indexed zero,\\n        uint256 transactionIndex\\n    );\\n\\n    function rollup() external view returns (address); // the rollup contract\\n\\n    function bridge() external view returns (IBridge); // the bridge contract\\n\\n    function spent(uint256) external view returns (bytes32); // packed spent bitmap\\n\\n    function roots(bytes32) external view returns (bytes32); // maps root hashes => L2 block hash\\n\\n    // solhint-disable-next-line func-name-mixedcase\\n    function OUTBOX_VERSION() external view returns (uint128); // the outbox version\\n\\n    function updateSendRoot(bytes32 sendRoot, bytes32 l2BlockHash) external;\\n\\n    /// @notice When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account\\n    ///         When the return value is zero, that means this is a system message\\n    /// @dev the l2ToL1Sender behaves as the tx.origin, the msg.sender should be validated to protect against reentrancies\\n    function l2ToL1Sender() external view returns (address);\\n\\n    /// @return l2Block return L2 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\\n    function l2ToL1Block() external view returns (uint256);\\n\\n    /// @return l1Block return L1 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\\n    function l2ToL1EthBlock() external view returns (uint256);\\n\\n    /// @return timestamp return L2 timestamp when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\\n    function l2ToL1Timestamp() external view returns (uint256);\\n\\n    /// @return outputId returns the unique output identifier of the L2 to L1 tx or 0 if no L2 to L1 transaction is active\\n    function l2ToL1OutputId() external view returns (bytes32);\\n\\n    /**\\n     * @notice Executes a messages in an Outbox entry.\\n     * @dev Reverts if dispute period hasn't expired, since the outbox entry\\n     *      is only created once the rollup confirms the respective assertion.\\n     * @dev it is not possible to execute any L2-to-L1 transaction which contains data\\n     *      to a contract address without any code (as enforced by the Bridge contract).\\n     * @param proof Merkle proof of message inclusion in send root\\n     * @param index Merkle path to message\\n     * @param l2Sender sender if original message (i.e., caller of ArbSys.sendTxToL1)\\n     * @param to destination address for L1 contract call\\n     * @param l2Block l2 block number at which sendTxToL1 call was made\\n     * @param l1Block l1 block number at which sendTxToL1 call was made\\n     * @param l2Timestamp l2 Timestamp at which sendTxToL1 call was made\\n     * @param value wei in L1 message\\n     * @param data abi-encoded L1 message data\\n     */\\n    function executeTransaction(\\n        bytes32[] calldata proof,\\n        uint256 index,\\n        address l2Sender,\\n        address to,\\n        uint256 l2Block,\\n        uint256 l1Block,\\n        uint256 l2Timestamp,\\n        uint256 value,\\n        bytes calldata data\\n    ) external;\\n\\n    /**\\n     *  @dev function used to simulate the result of a particular function call from the outbox\\n     *       it is useful for things such as gas estimates. This function includes all costs except for\\n     *       proof validation (which can be considered offchain as a somewhat of a fixed cost - it's\\n     *       not really a fixed cost, but can be treated as so with a fixed overhead for gas estimation).\\n     *       We can't include the cost of proof validation since this is intended to be used to simulate txs\\n     *       that are included in yet-to-be confirmed merkle roots. The simulation entrypoint could instead pretend\\n     *       to confirm a pending merkle root, but that would be less practical for integrating with tooling.\\n     *       It is only possible to trigger it when the msg sender is address zero, which should be impossible\\n     *       unless under simulation in an eth_call or eth_estimateGas\\n     */\\n    function executeTransactionSimulation(\\n        uint256 index,\\n        address l2Sender,\\n        address to,\\n        uint256 l2Block,\\n        uint256 l1Block,\\n        uint256 l2Timestamp,\\n        uint256 value,\\n        bytes calldata data\\n    ) external;\\n\\n    /**\\n     * @param index Merkle path to message\\n     * @return true if the message has been spent\\n     */\\n    function isSpent(uint256 index) external view returns (bool);\\n\\n    function calculateItemHash(\\n        address l2Sender,\\n        address to,\\n        uint256 l2Block,\\n        uint256 l1Block,\\n        uint256 l2Timestamp,\\n        uint256 value,\\n        bytes calldata data\\n    ) external pure returns (bytes32);\\n\\n    function calculateMerkleRoot(\\n        bytes32[] memory proof,\\n        uint256 path,\\n        bytes32 item\\n    ) external pure returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf11685613c2ca2e87e9ad7e93bff2bd966aa16f11599371878dff047be17d945\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeTransaction(bytes32[],uint256,address,address,uint256,uint256,uint256,uint256,bytes)":{"notice":"Executes a messages in an Outbox entry."},"l2ToL1Sender()":{"notice":"When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account         When the return value is zero, that means this is a system message"}},"version":1}}},"contracts/core/connext/facets/BaseConnextFacet.sol":{"BaseConnextFacet":{"abi":[{"inputs":[],"name":"BaseConnextFacet__getAdoptedAsset_assetNotFound","type":"error"},{"inputs":[],"name":"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonXCallReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__whenNotPaused_paused","type":"error"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea26469706673582212201da1fe15af0381d36cd01d134849cdb8f45afff432402c6a94d1e49b44cab33c64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3F DUP1 PUSH1 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SAR LOG1 INVALID ISZERO 0xAF SUB DUP2 0xD3 PUSH13 0xD01D134849CDB8F45AFFF43240 0x2C PUSH11 0x94D1E49B44CAB33C64736F PUSH13 0x63430008110033000000000000 ","sourceMap":"364:6415:68:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea26469706673582212201da1fe15af0381d36cd01d134849cdb8f45afff432402c6a94d1e49b44cab33c64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SAR LOG1 INVALID ISZERO 0xAF SUB DUP2 0xD3 PUSH13 0xD01D134849CDB8F45AFFF43240 0x2C PUSH11 0x94D1E49B44CAB33C64736F PUSH13 0x63430008110033000000000000 ","sourceMap":"364:6415:68:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"66","totalCost":"12666"},"internal":{"_calculateTransferId(struct TransferInfo memory)":"infinite","_getAdoptedAsset(bytes32)":"infinite","_getApprovedCanonicalId(address)":"infinite","_getCanonicalTokenId(address)":"infinite","_getLocalAndAdoptedToken(bytes32,bytes32,uint32)":"infinite","_getLocalAsset(bytes32,bytes32,uint32)":"infinite","_getRepresentationAsset(bytes32)":"infinite","_isLocalOrigin(address)":"infinite","_isRouterAllowlistRemoved()":"infinite","_originAndNonce(uint32,uint32)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/BaseConnextFacet.sol\":\"BaseConnextFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n  AppStorage internal s;\\n\\n  // ========== Custom Errors ===========\\n\\n  error BaseConnextFacet__onlyOwner_notOwner();\\n  error BaseConnextFacet__onlyProposed_notProposedOwner();\\n  error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n  error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n  error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n  error BaseConnextFacet__whenNotPaused_paused();\\n  error BaseConnextFacet__nonReentrant_reentrantCall();\\n  error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n  error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n  error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @dev Prevents a contract from calling itself, directly or indirectly.\\n   * Calling a `nonReentrant` function from another `nonReentrant`\\n   * function is not supported. It is possible to prevent this from happening\\n   * by making the `nonReentrant` function external, and making it call a\\n   * `private` function that does the actual work.\\n   */\\n  modifier nonReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._status = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._status = Constants.NOT_ENTERED;\\n  }\\n\\n  modifier nonXCallReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._xcallStatus = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._xcallStatus = Constants.NOT_ENTERED;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and router role.\\n   */\\n  modifier onlyOwnerOrRouter() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n      revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and watcher role.\\n   */\\n  modifier onlyOwnerOrWatcher() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n      revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and admin role.\\n   */\\n  modifier onlyOwnerOrAdmin() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n      revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if all functionality is paused\\n   */\\n  modifier whenNotPaused() {\\n    if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n    _;\\n  }\\n\\n  // ============ Internal functions ============\\n  /**\\n   * @notice Indicates if the router allowlist has been removed\\n   */\\n  function _isRouterAllowlistRemoved() internal view returns (bool) {\\n    return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n    address adopted = AssetLogic.getConfig(_key).adopted;\\n    if (adopted == address(0)) {\\n      revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n    }\\n    return adopted;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n    address representation = AssetLogic.getConfig(_key).representation;\\n    // If this is address(0), then there is no mintable token for this asset on this\\n    // domain\\n    return representation;\\n  }\\n\\n  /**\\n   * @notice Calculates a transferId\\n   */\\n  function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_params));\\n  }\\n\\n  /**\\n   * @notice Internal utility function that combines\\n   *         `_origin` and `_nonce`.\\n   * @dev Both origin and nonce should be less than 2^32 - 1\\n   * @param _origin Domain of chain where the transfer originated\\n   * @param _nonce The unique identifier for the message from origin to destination\\n   * @return Returns (`_origin` << 32) & `_nonce`\\n   */\\n  function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n    return (uint64(_origin) << 32) | _nonce;\\n  }\\n\\n  function _getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address) {\\n    return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n  }\\n\\n  function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n    return AssetLogic.getCanonicalTokenId(_candidate, s);\\n  }\\n\\n  function _getLocalAndAdoptedToken(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address, address) {\\n    address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n    address _adopted = _getAdoptedAsset(_key);\\n    return (_local, _adopted);\\n  }\\n\\n  function _isLocalOrigin(address _token) internal view returns (bool) {\\n    return AssetLogic.isLocalOrigin(_token, s);\\n  }\\n\\n  function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n    TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n    bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n    if (!AssetLogic.getConfig(_key).approval) {\\n      revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n    }\\n    return (_canonical, _key);\\n  }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":13726,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"s","offset":0,"slot":"0","type":"t_struct(AppStorage)29536_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_contract(IERC20)10812)dyn_storage":{"base":"t_contract(IERC20)10812","encoding":"dynamic_array","label":"contract IERC20[]","numberOfBytes":"32"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IConnectorManager)47805":{"encoding":"inplace","label":"contract IConnectorManager","numberOfBytes":"20"},"t_contract(IERC20)10812":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_contract(LPToken)23179":{"encoding":"inplace","label":"contract LPToken","numberOfBytes":"20"},"t_enum(DestinationTransferStatus)29324":{"encoding":"inplace","label":"enum DestinationTransferStatus","numberOfBytes":"1"},"t_enum(Role)29319":{"encoding":"inplace","label":"enum Role","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_enum(Role)29319)":{"encoding":"mapping","key":"t_address","label":"mapping(address => enum Role)","numberOfBytes":"32","value":"t_enum(Role)29319"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(RouterConfig)29378_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RouterConfig)","numberOfBytes":"32","value":"t_struct(RouterConfig)29378_storage"},"t_mapping(t_address,t_struct(TokenId)37728_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct TokenId)","numberOfBytes":"32","value":"t_struct(TokenId)37728_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_bytes32,t_array(t_address)dyn_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => address[])","numberOfBytes":"32","value":"t_array(t_address)dyn_storage"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum DestinationTransferStatus)","numberOfBytes":"32","value":"t_enum(DestinationTransferStatus)29324"},"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => mapping(address => uint8))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint8)"},"t_mapping(t_bytes32,t_struct(Swap)30786_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct SwapUtils.Swap)","numberOfBytes":"32","value":"t_struct(Swap)30786_storage"},"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct TokenConfig)","numberOfBytes":"32","value":"t_struct(TokenConfig)29395_storage"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_bytes32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => bytes32)","numberOfBytes":"32","value":"t_bytes32"},"t_struct(AppStorage)29536_storage":{"encoding":"inplace","label":"struct AppStorage","members":[{"astId":29397,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":29399,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"LIQUIDITY_FEE_NUMERATOR","offset":0,"slot":"1","type":"t_uint256"},{"astId":29402,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"relayerFeeVault","offset":0,"slot":"2","type":"t_address"},{"astId":29405,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"nonce","offset":0,"slot":"3","type":"t_uint256"},{"astId":29408,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"domain","offset":0,"slot":"4","type":"t_uint32"},{"astId":29414,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"adoptedToCanonical","offset":0,"slot":"5","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29420,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"representationToCanonical","offset":0,"slot":"6","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29426,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"tokenConfigs","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)"},{"astId":29432,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"transferStatus","offset":0,"slot":"8","type":"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)"},{"astId":29438,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"routedTransfers","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_array(t_address)dyn_storage)"},{"astId":29445,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"routerBalances","offset":0,"slot":"10","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":29450,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"approvedRelayers","offset":0,"slot":"11","type":"t_mapping(t_address,t_bool)"},{"astId":29453,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"maxRoutersPerTransfer","offset":0,"slot":"12","type":"t_uint256"},{"astId":29458,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"slippage","offset":0,"slot":"13","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29463,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"receiveLocalOverride","offset":0,"slot":"14","type":"t_mapping(t_bytes32,t_bool)"},{"astId":29468,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"remotes","offset":0,"slot":"15","type":"t_mapping(t_uint32,t_bytes32)"},{"astId":29470,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"_proposed","offset":0,"slot":"16","type":"t_address"},{"astId":29472,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"_proposedOwnershipTimestamp","offset":0,"slot":"17","type":"t_uint256"},{"astId":29474,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"_routerAllowlistRemoved","offset":0,"slot":"18","type":"t_bool"},{"astId":29476,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"_routerAllowlistTimestamp","offset":0,"slot":"19","type":"t_uint256"},{"astId":29482,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"roles","offset":0,"slot":"20","type":"t_mapping(t_address,t_enum(Role)29319)"},{"astId":29487,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"routerConfigs","offset":0,"slot":"21","type":"t_mapping(t_address,t_struct(RouterConfig)29378_storage)"},{"astId":29489,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"_status","offset":0,"slot":"22","type":"t_uint256"},{"astId":29491,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"_xcallStatus","offset":0,"slot":"23","type":"t_uint256"},{"astId":29497,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"swapStorages","offset":0,"slot":"24","type":"t_mapping(t_bytes32,t_struct(Swap)30786_storage)"},{"astId":29504,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"tokenIndexes","offset":0,"slot":"25","type":"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))"},{"astId":29507,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"lpTokenTargetAddress","offset":0,"slot":"26","type":"t_address"},{"astId":29510,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"_paused","offset":20,"slot":"26","type":"t_bool"},{"astId":29513,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"aavePool","offset":0,"slot":"27","type":"t_address"},{"astId":29516,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"aavePortalFeeNumerator","offset":0,"slot":"28","type":"t_uint256"},{"astId":29521,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"portalDebt","offset":0,"slot":"29","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29526,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"portalFeeDebt","offset":0,"slot":"30","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29531,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"approvedSequencers","offset":0,"slot":"31","type":"t_mapping(t_address,t_bool)"},{"astId":29535,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"xAppConnectionManager","offset":0,"slot":"32","type":"t_contract(IConnectorManager)47805"}],"numberOfBytes":"1056"},"t_struct(RouterConfig)29378_storage":{"encoding":"inplace","label":"struct RouterConfig","members":[{"astId":29367,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"approved","offset":0,"slot":"0","type":"t_bool"},{"astId":29369,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"portalApproved","offset":1,"slot":"0","type":"t_bool"},{"astId":29371,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"owner","offset":2,"slot":"0","type":"t_address"},{"astId":29373,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"recipient","offset":0,"slot":"1","type":"t_address"},{"astId":29375,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"proposed","offset":0,"slot":"2","type":"t_address"},{"astId":29377,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"proposedTimestamp","offset":0,"slot":"3","type":"t_uint256"}],"numberOfBytes":"128"},"t_struct(Swap)30786_storage":{"encoding":"inplace","label":"struct SwapUtils.Swap","members":[{"astId":30753,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"key","offset":0,"slot":"0","type":"t_bytes32"},{"astId":30755,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"initialA","offset":0,"slot":"1","type":"t_uint256"},{"astId":30757,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"futureA","offset":0,"slot":"2","type":"t_uint256"},{"astId":30759,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"initialATime","offset":0,"slot":"3","type":"t_uint256"},{"astId":30761,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"futureATime","offset":0,"slot":"4","type":"t_uint256"},{"astId":30763,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"swapFee","offset":0,"slot":"5","type":"t_uint256"},{"astId":30765,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"adminFee","offset":0,"slot":"6","type":"t_uint256"},{"astId":30768,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"lpToken","offset":0,"slot":"7","type":"t_contract(LPToken)23179"},{"astId":30772,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"pooledTokens","offset":0,"slot":"8","type":"t_array(t_contract(IERC20)10812)dyn_storage"},{"astId":30775,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"tokenPrecisionMultipliers","offset":0,"slot":"9","type":"t_array(t_uint256)dyn_storage"},{"astId":30778,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"balances","offset":0,"slot":"10","type":"t_array(t_uint256)dyn_storage"},{"astId":30781,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"adminFees","offset":0,"slot":"11","type":"t_array(t_uint256)dyn_storage"},{"astId":30783,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"disabled","offset":0,"slot":"12","type":"t_bool"},{"astId":30785,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"removeTime","offset":0,"slot":"13","type":"t_uint256"}],"numberOfBytes":"448"},"t_struct(TokenConfig)29395_storage":{"encoding":"inplace","label":"struct TokenConfig","members":[{"astId":29380,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"representation","offset":0,"slot":"0","type":"t_address"},{"astId":29382,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"representationDecimals","offset":20,"slot":"0","type":"t_uint8"},{"astId":29384,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"adopted","offset":0,"slot":"1","type":"t_address"},{"astId":29386,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"adoptedDecimals","offset":20,"slot":"1","type":"t_uint8"},{"astId":29388,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"adoptedToLocalExternalPools","offset":0,"slot":"2","type":"t_address"},{"astId":29390,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"approval","offset":20,"slot":"2","type":"t_bool"},{"astId":29392,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"cap","offset":0,"slot":"3","type":"t_uint256"},{"astId":29394,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"custodied","offset":0,"slot":"4","type":"t_uint256"}],"numberOfBytes":"160"},"t_struct(TokenId)37728_storage":{"encoding":"inplace","label":"struct TokenId","members":[{"astId":37725,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"domain","offset":0,"slot":"0","type":"t_uint32"},{"astId":37727,"contract":"contracts/core/connext/facets/BaseConnextFacet.sol:BaseConnextFacet","label":"id","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/core/connext/facets/BridgeFacet.sol":{"BridgeFacet":{"abi":[{"inputs":[],"name":"AssetLogic__getConfig_notRegistered","type":"error"},{"inputs":[],"name":"AssetLogic__getTokenIndexFromStableSwapPool_notExist","type":"error"},{"inputs":[],"name":"AssetLogic__handleIncomingAsset_feeOnTransferNotSupported","type":"error"},{"inputs":[],"name":"AssetLogic__handleIncomingAsset_nativeAssetNotSupported","type":"error"},{"inputs":[],"name":"AssetLogic__handleOutgoingAsset_notNative","type":"error"},{"inputs":[],"name":"BaseConnextFacet__getAdoptedAsset_assetNotFound","type":"error"},{"inputs":[],"name":"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonXCallReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__whenNotPaused_paused","type":"error"},{"inputs":[],"name":"BridgeFacet__addRemote_invalidDomain","type":"error"},{"inputs":[],"name":"BridgeFacet__addRemote_invalidRouter","type":"error"},{"inputs":[],"name":"BridgeFacet__addSequencer_alreadyApproved","type":"error"},{"inputs":[],"name":"BridgeFacet__addSequencer_invalidSequencer","type":"error"},{"inputs":[],"name":"BridgeFacet__bumpTransfer_noRelayerVault","type":"error"},{"inputs":[],"name":"BridgeFacet__bumpTransfer_valueIsZero","type":"error"},{"inputs":[],"name":"BridgeFacet__excecute_insufficientGas","type":"error"},{"inputs":[],"name":"BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn","type":"error"},{"inputs":[],"name":"BridgeFacet__execute_badFastLiquidityStatus","type":"error"},{"inputs":[],"name":"BridgeFacet__execute_externalCallFailed","type":"error"},{"inputs":[],"name":"BridgeFacet__execute_invalidRouterSignature","type":"error"},{"inputs":[],"name":"BridgeFacet__execute_invalidSequencerSignature","type":"error"},{"inputs":[],"name":"BridgeFacet__execute_maxRoutersExceeded","type":"error"},{"inputs":[],"name":"BridgeFacet__execute_notApprovedForPortals","type":"error"},{"inputs":[],"name":"BridgeFacet__execute_notReconciled","type":"error"},{"inputs":[],"name":"BridgeFacet__execute_notSupportedRouter","type":"error"},{"inputs":[],"name":"BridgeFacet__execute_notSupportedSequencer","type":"error"},{"inputs":[],"name":"BridgeFacet__execute_unapprovedSender","type":"error"},{"inputs":[],"name":"BridgeFacet__execute_wrongDomain","type":"error"},{"inputs":[],"name":"BridgeFacet__forceReceiveLocal_notDestination","type":"error"},{"inputs":[],"name":"BridgeFacet__forceUpdateSlippage_invalidSlippage","type":"error"},{"inputs":[],"name":"BridgeFacet__forceUpdateSlippage_notDestination","type":"error"},{"inputs":[],"name":"BridgeFacet__mustHaveRemote_destinationNotSupported","type":"error"},{"inputs":[],"name":"BridgeFacet__onlyDelegate_notDelegate","type":"error"},{"inputs":[],"name":"BridgeFacet__removeSequencer_notApproved","type":"error"},{"inputs":[],"name":"BridgeFacet__setXAppConnectionManager_domainsDontMatch","type":"error"},{"inputs":[],"name":"BridgeFacet__xcall_capReached","type":"error"},{"inputs":[],"name":"BridgeFacet__xcall_emptyTo","type":"error"},{"inputs":[],"name":"BridgeFacet__xcall_invalidSlippage","type":"error"},{"inputs":[],"name":"BridgeFacet__xcall_nativeAssetNotSupported","type":"error"},{"inputs":[],"name":"BridgeFacet_xcall__emptyLocalAsset","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"transferId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"router","type":"address"},{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AavePortalMintUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"transferId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"components":[{"components":[{"internalType":"uint32","name":"originDomain","type":"uint32"},{"internalType":"uint32","name":"destinationDomain","type":"uint32"},{"internalType":"uint32","name":"canonicalDomain","type":"uint32"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"delegate","type":"address"},{"internalType":"bool","name":"receiveLocal","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"slippage","type":"uint256"},{"internalType":"address","name":"originSender","type":"address"},{"internalType":"uint256","name":"bridgedAmt","type":"uint256"},{"internalType":"uint256","name":"normalizedIn","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"internalType":"struct TransferInfo","name":"params","type":"tuple"},{"internalType":"address[]","name":"routers","type":"address[]"},{"internalType":"bytes[]","name":"routerSignatures","type":"bytes[]"},{"internalType":"address","name":"sequencer","type":"address"},{"internalType":"bytes","name":"sequencerSignature","type":"bytes"}],"indexed":false,"internalType":"struct ExecuteArgs","name":"args","type":"tuple"},{"indexed":false,"internalType":"address","name":"local","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"Executed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"transferId","type":"bytes32"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"returnData","type":"bytes"}],"name":"ExternalCalldataExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"transferId","type":"bytes32"}],"name":"ForceReceiveLocal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":false,"internalType":"address","name":"remote","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"RemoteAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sequencer","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"SequencerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sequencer","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"SequencerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"transferId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"slippage","type":"uint256"}],"name":"SlippageUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"transferId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"increase","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"TransferRelayerFeesIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updated","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"XAppConnectionManagerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"transferId","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"messageHash","type":"bytes32"},{"components":[{"internalType":"uint32","name":"originDomain","type":"uint32"},{"internalType":"uint32","name":"destinationDomain","type":"uint32"},{"internalType":"uint32","name":"canonicalDomain","type":"uint32"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"delegate","type":"address"},{"internalType":"bool","name":"receiveLocal","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"slippage","type":"uint256"},{"internalType":"address","name":"originSender","type":"address"},{"internalType":"uint256","name":"bridgedAmt","type":"uint256"},{"internalType":"uint256","name":"normalizedIn","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"indexed":false,"internalType":"struct TransferInfo","name":"params","type":"tuple"},{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"local","type":"address"},{"indexed":false,"internalType":"bytes","name":"messageBody","type":"bytes"}],"name":"XCalled","type":"event"},{"inputs":[{"internalType":"address","name":"_sequencer","type":"address"}],"name":"addSequencer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sequencer","type":"address"}],"name":"approvedSequencers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transferId","type":"bytes32"}],"name":"bumpTransfer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"domain","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"bytes32","name":"_router","type":"bytes32"}],"name":"enrollRemoteRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"uint32","name":"originDomain","type":"uint32"},{"internalType":"uint32","name":"destinationDomain","type":"uint32"},{"internalType":"uint32","name":"canonicalDomain","type":"uint32"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"delegate","type":"address"},{"internalType":"bool","name":"receiveLocal","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"slippage","type":"uint256"},{"internalType":"address","name":"originSender","type":"address"},{"internalType":"uint256","name":"bridgedAmt","type":"uint256"},{"internalType":"uint256","name":"normalizedIn","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"internalType":"struct TransferInfo","name":"params","type":"tuple"},{"internalType":"address[]","name":"routers","type":"address[]"},{"internalType":"bytes[]","name":"routerSignatures","type":"bytes[]"},{"internalType":"address","name":"sequencer","type":"address"},{"internalType":"bytes","name":"sequencerSignature","type":"bytes"}],"internalType":"struct ExecuteArgs","name":"_args","type":"tuple"}],"name":"execute","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"originDomain","type":"uint32"},{"internalType":"uint32","name":"destinationDomain","type":"uint32"},{"internalType":"uint32","name":"canonicalDomain","type":"uint32"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"delegate","type":"address"},{"internalType":"bool","name":"receiveLocal","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"slippage","type":"uint256"},{"internalType":"address","name":"originSender","type":"address"},{"internalType":"uint256","name":"bridgedAmt","type":"uint256"},{"internalType":"uint256","name":"normalizedIn","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"internalType":"struct TransferInfo","name":"_params","type":"tuple"}],"name":"forceReceiveLocal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"originDomain","type":"uint32"},{"internalType":"uint32","name":"destinationDomain","type":"uint32"},{"internalType":"uint32","name":"canonicalDomain","type":"uint32"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"delegate","type":"address"},{"internalType":"bool","name":"receiveLocal","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"slippage","type":"uint256"},{"internalType":"address","name":"originSender","type":"address"},{"internalType":"uint256","name":"bridgedAmt","type":"uint256"},{"internalType":"uint256","name":"normalizedIn","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"internalType":"struct TransferInfo","name":"_params","type":"tuple"},{"internalType":"uint256","name":"_slippage","type":"uint256"}],"name":"forceUpdateSlippage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"}],"name":"remote","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sequencer","type":"address"}],"name":"removeSequencer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transferId","type":"bytes32"}],"name":"routedTransfers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_xAppConnectionManager","type":"address"}],"name":"setXAppConnectionManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transferId","type":"bytes32"}],"name":"transferStatus","outputs":[{"internalType":"enum DestinationTransferStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xAppConnectionManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_destination","type":"uint32"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_asset","type":"address"},{"internalType":"address","name":"_delegate","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_slippage","type":"uint256"},{"internalType":"bytes","name":"_callData","type":"bytes"}],"name":"xcall","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_destination","type":"uint32"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_asset","type":"address"},{"internalType":"address","name":"_delegate","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_slippage","type":"uint256"},{"internalType":"bytes","name":"_callData","type":"bytes"}],"name":"xcallIntoLocal","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"payable","type":"function"}],"devdoc":{"events":{"AavePortalMintUnbacked(bytes32,address,address,uint256)":{"params":{"amount":"- The amount of asset that was provided by Aave Portal","asset":"- The asset that was provided by Aave Portal","router":"- The authorized router that used Aave Portal liquidity","transferId":"- The unique identifier of the crosschain transaction"}},"Executed(bytes32,address,address,((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),address,uint256,address)":{"details":"`execute` may be called when providing fast liquidity or when processing a reconciled (slow) transfer.","params":{"amount":"- The amount of transferring asset the recipient address receives or the external call is executed with.","args":"- The `ExecuteArgs` provided to the function.","asset":"- The asset the recipient is given or the external call is executed with. Should be the adopted asset on that chain.","caller":"- The account that called the function.","local":"- The local asset that was either supplied by the router for a fast-liquidity transfer or minted by the bridge in a reconciled (slow) transfer. Could be the same as the adopted `asset` param.","to":"- The recipient `TransferInfo.to` provided, created as indexed parameter.","transferId":"- The unique identifier of the crosschain transfer."}},"ExternalCalldataExecuted(bytes32,bool,bytes)":{"params":{"returnData":"- Return bytes from the IXReceiver","success":"- Whether calldata succeeded","transferId":"- The unique identifier of the crosschain transfer."}},"ForceReceiveLocal(bytes32)":{"params":{"transferId":"- The unique identifier of the crosschain transaction"}},"RemoteAdded(uint32,address,address)":{"params":{"caller":"- The account that called the function","domain":"- The domain the remote instance is on","remote":"- The address of the remote instance"}},"SequencerAdded(address,address)":{"params":{"caller":"- The account that called the function","sequencer":"- The sequencer address to be added or removed"}},"SequencerRemoved(address,address)":{"params":{"caller":"- The account that called the function","sequencer":"- The sequencer address to be added or removed"}},"SlippageUpdated(bytes32,uint256)":{"params":{"slippage":"- The updated slippage boundary","transferId":"- The unique identifier of the crosschain transaction"}},"TransferRelayerFeesIncreased(bytes32,uint256,address)":{"params":{"caller":"- The account that called the function","increase":"- The additional amount fees increased by","transferId":"- The unique identifier of the crosschain transaction"}},"XAppConnectionManagerSet(address,address)":{"params":{"caller":"- The account that called the function","updated":"- The updated address"}},"XCalled(bytes32,uint256,bytes32,(uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address,uint256,address,bytes)":{"params":{"amount":"- The amount sent in with xcall","asset":"- The asset sent in with xcall","local":"- The local asset that is controlled by the bridge and can be burned/minted","messageHash":"- The hash of the message bytes (containing all transfer info) that were bridged.","nonce":"- The bridge nonce of the transfer on the origin domain.","params":"- The `TransferInfo` provided to the function.","transferId":"- The unique identifier of the crosschain transfer."}}},"kind":"dev","methods":{"addSequencer(address)":{"params":{"_sequencer":"- The sequencer address to add."}},"bumpTransfer(bytes32)":{"params":{"_transferId":"- The unique identifier of the crosschain transaction"}},"enrollRemoteRouter(uint32,bytes32)":{"params":{"_domain":"The domain of the remote xApp Router","_router":"The address of the remote xApp Router"}},"execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes))":{"details":"Can be called before or after `handle` [reconcile] is called (regarding the same transfer), depending on whether the fast liquidity route (i.e. funds provided by routers) is being used for this transfer. As a result, executed calldata (including properties like `originSender`) may or may not be verified depending on whether the reconcile has been completed (i.e. the optimistic confirmation period has elapsed).","params":{"_args":"- ExecuteArgs arguments."},"returns":{"_0":"bytes32 - The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for reconciliation to occur."}},"forceReceiveLocal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32))":{"details":"Calldata will still be executed with the local asset. `IXReceiver` contracts should be able to handle local assets in event of failures.","params":{"_params":"TransferInfo associated with the transfer"}},"forceUpdateSlippage((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256)":{"params":{"_params":"TransferInfo associated with the transfer","_slippage":"The updated slippage"}},"removeSequencer(address)":{"params":{"_sequencer":"- The sequencer address to remove."}},"setXAppConnectionManager(address)":{"params":{"_xAppConnectionManager":"The address of the xAppConnectionManager contract"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50614c6a806100206000396000f3fe6080604052600436106100fe5760003560e01c80636989ca7c11610095578063affed0e011610064578063affed0e0146102bd578063b49c53a7146102d2578063bfd79030146102f2578063c2fb26a61461032f578063cb8058ba1461035457600080fd5b80636989ca7c146102575780638a336231146102775780638aac16ba1461029757806391f5de79146102aa57600080fd5b80633339df96116100d15780633339df96146101cb57806341bdc8b5146101e9578063541267111461020957806363e3e7d21461022957600080fd5b8063121cca3114610103578063159e041f146101405780631a8bc0e1146101895780632424401f146101b6575b600080fd5b34801561010f57600080fd5b5061012361011e366004613d89565b610374565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014c57600080fd5b5061017961015b366004613dc6565b6001600160a01b03166000908152601f602052604090205460ff1690565b6040519015158152602001610137565b34801561019557600080fd5b506101a96101a4366004613de3565b610391565b6040516101379190613dfc565b6101c96101c4366004613de3565b6103fd565b005b3480156101d757600080fd5b506020546001600160a01b0316610123565b3480156101f557600080fd5b506101c9610204366004613dc6565b610483565b34801561021557600080fd5b506101c9610224366004613e62565b6105e0565b34801561023557600080fd5b50610249610244366004613ea6565b6106e2565b604051908152602001610137565b34801561026357600080fd5b506101c9610272366004613dc6565b6108a1565b34801561028357600080fd5b506101c9610292366004613dc6565b610999565b6102496102a5366004613ee0565b610ab5565b6102496102b8366004613ee0565b610ba9565b3480156102c957600080fd5b50600354610249565b3480156102de57600080fd5b506101c96102ed366004613faf565b610c8a565b3480156102fe57600080fd5b5061032261030d366004613de3565b60009081526008602052604090205460ff1690565b604051610137919061400f565b34801561033b57600080fd5b5060045460405163ffffffff9091168152602001610137565b34801561036057600080fd5b506101c961036f366004614022565b610da8565b63ffffffff81166000908152600f60205260408120545b92915050565b6000818152600960209081526040918290208054835181840281018401909452808452606093928301828280156103f157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116103d3575b50505050509050919050565b6016546001190161042157604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561045157604051633ee5b89360e01b815260040160405180910390fd5b34600003610472576040516348e7dc3f60e01b815260040160405180910390fd5b61047b81610e75565b506001601655565b3361048c610ee7565b6001600160a01b0316141580156104c7575060033360009081526014602052604090205460ff1660038111156104c4576104c4613fdb565b14155b156104e557604051637b32c26b60e01b815260040160405180910390fd5b600480546040805163234d8e3d60e21b81529051849363ffffffff909316926001600160a01b03851692638d3638f492818301926020928290030181865afa158015610535573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105599190614056565b63ffffffff161461057c57604051621ff66160e61b815260040160405180910390fd5b604080516001600160a01b03841681523360208201527fd6e53d12bb441b2201be4949c7f431b383623888df2abfeef43aaaf272802d50910160405180910390a1602080546001600160a01b0319166001600160a01b039290921691909117905550565b81336105f260a0830160808401613dc6565b6001600160a01b0316146106195760405163e3613aff60e01b815260040160405180910390fd5b61271082111561063c57604051633345cd4360e11b815260040160405180910390fd5b60045463ffffffff166106556040850160208601613d89565b63ffffffff161461067957604051632a8e462760e01b815260040160405180910390fd5b600061068c61068785614178565b610f15565b6000818152600d6020526040908190208590555190915081907fb243c3cea6cd1bbfd64d5d0765f13734ca7b87fdf14e017391fe12a8891434ca906106d49086815260200190565b60405180910390a250505050565b6016546000906001190161070957604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561073957604051633ee5b89360e01b815260040160405180910390fd5b60008061074584610f45565b90925090506000600182600381111561076057610760613fdb565b1461076c57600261076f565b60035b60008481526008602052604090208054919250829160ff1916600183600381111561079c5761079c613fdb565b0217905550600080806107f7866107db6107b68b8061426d565b61018001356107c58c8061426d565b6107d6906060810190604001613d89565b611306565b60038760038111156107ef576107ef613fdb565b14158b611348565b9194509250905060006108218985858a60038a600381111561081b5761081b613fdb565b146118d5565b90506001600160a01b0383166108378a8061426d565b610848906080810190606001613dc6565b6001600160a01b0316887f0b07a8b0b083f8976b3c832b720632f49cb8ba1e7a99e1b145f51a47d3391cb78c86863360405161088794939291906143ea565b60405180910390a450506001601655509295945050505050565b336108aa610ee7565b6001600160a01b0316141580156108e5575060033360009081526014602052604090205460ff1660038111156108e2576108e2613fdb565b14155b1561090357604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0381166000908152601f602052604090205460ff1661093c57604051637840a40d60e01b815260040160405180910390fd5b6001600160a01b0381166000818152601f6020908152604091829020805460ff19169055815192835233908301527f4860b0a180d4b5969c2757493a999f05d0b22318320f154a02170aa239e24b1391015b60405180910390a150565b336109a2610ee7565b6001600160a01b0316141580156109dd575060033360009081526014602052604090205460ff1660038111156109da576109da613fdb565b14155b156109fb57604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b038116610a22576040516332f9c08d60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601f602052604090205460ff1615610a5c5760405163e2a4506360e01b815260040160405180910390fd5b6001600160a01b0381166000818152601f6020908152604091829020805460ff19166001179055815192835233908301527f3860a100215fe93b6b95ed1ae0870e538f85a73b30d073f63fefc60e08b0c124910161098e565b60175460009060011901610adc576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528b1660208083019190915260008284018190526001600160a01b03808d1660608501528a16608084015260a083018190528351601f87018390048302810183019094528584529260c08301918790879081908401838280828437600092018290525093855250505060208201889052336040830152606082018190526080820181905260a0820181905260c0909101529050610b9681898861191e565b60016017559a9950505050505050505050565b60175460009060011901610bd0576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528b1660208083019190915260008284018190526001600160a01b03808d1660608501528a166080840152600160a08401528351601f87018390048302810183019094528584529260c08301918790879081908401838280828437600092018290525093855250505060208201889052336040830152606082018190526080820181905260a0820181905260c0909101529050610b9681898861191e565b33610c93610ee7565b6001600160a01b031614158015610cce575060033360009081526014602052604090205460ff166003811115610ccb57610ccb613fdb565b14155b15610cec57604051637b32c26b60e01b815260040160405180910390fd5b80610d0a57604051633bca644d60e11b815260040160405180910390fd5b63ffffffff82161580610d27575060045463ffffffff8381169116145b15610d4557604051632892757b60e21b815260040160405180910390fd5b63ffffffff82166000818152600f602090815260409182902084905581519283526001600160a01b038416908301523382820152517fb07f562723347d6ea7f9f37b3b31f96b65104c3339d1c89e1b6fa88e2410b85c9181900360600190a15050565b8033610dba60a0830160808401613dc6565b6001600160a01b031614610de15760405163e3613aff60e01b815260040160405180910390fd5b60045463ffffffff16610dfa6040840160208501613d89565b63ffffffff1614610e1e57604051630ada556f60e31b815260040160405180910390fd5b6000610e2c61068784614178565b6000818152600e6020526040808220805460ff191660011790555191925082917f2510041334ede909998b9aefcca4300fc36c670dd00e1f7f0afffaca56adcb399190a2505050565b6002546001600160a01b031680610e9f57604051630bd7619560e41b815260040160405180910390fd5b610ea98134611bba565b6040805134815233602082015283917ffd832caf789e0dadd0e7ed643b3ea6051fa26c48516e242ca4cb3db9eda6c8ec910160405180910390a25050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b600081604051602001610f289190614764565b604051602081830303815290604052805190602001209050919050565b336000908152600b6020526040812054819060ff16158015610f935750610f6c838061426d565b610f7d9060a0810190608001613dc6565b6001600160a01b0316336001600160a01b031614155b15610fb157604051637c32a2b360e01b815260040160405180910390fd5b60045463ffffffff16610fc4848061426d565b610fd5906040810190602001613d89565b63ffffffff1614610ff95760405163b6bb322560e01b815260040160405180910390fd5b60006110086020850185614777565b91506000905061102461101b868061426d565b61068790614178565b60008181526008602052604090205490915060ff1682156112c957600c54831115611062576040516313c06ef360e01b815260040160405180910390fd5b600081600381111561107657611076613fdb565b1461109457604051630caaeb0b60e11b815260040160405180910390fd5b601f60006110a86080890160608a01613dc6565b6001600160a01b0316815260208101919091526040016000205460ff166110e257604051631fa09b5360e31b815260040160405180910390fd5b61112f826110f36020890189614777565b604051602001611105939291906147c0565b60408051601f19818403018152919052805160209091012061112a60808901896147da565b611cdd565b6001600160a01b03166111486080880160608901613dc6565b6001600160a01b03161461116f57604051638579eca560e01b815260040160405180910390fd5b6040805160208082018590528183018690528251808303840181526060909201909252805191012060005b848110156112c2576111aa611d2f565b1580156112075750601560006111c360208b018b614777565b848181106111d3576111d3614820565b90506020020160208101906111e89190613dc6565b6001600160a01b0316815260208101919091526040016000205460ff16155b1561122557604051630e1eb7f760e31b815260040160405180910390fd5b6112588261123660408b018b614777565b8481811061124657611246614820565b905060200281019061112a91906147da565b6001600160a01b031661126e60208a018a614777565b8381811061127e5761127e614820565b90506020020160208101906112939190613dc6565b6001600160a01b0316146112ba57604051633a1dd23360e21b815260040160405180910390fd5b60010161119a565b50506112fb565b60018160038111156112dd576112dd613fdb565b146112fb57604051636320d2cf60e11b815260040160405180910390fd5b909590945092505050565b6000828260405160200161132a92919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b600080806113596020850185614777565b6000898152600960205260409020611372929091613cf4565b50600061137f858061426d565b611390906060810190604001613d89565b63ffffffff16156113d1576113ce876113a9878061426d565b61018001356113b8888061426d565b6113c9906060810190604001613d89565b611d56565b90505b6113db858061426d565b61012001356000036113f5576000935091508190506118cb565b6000611401868061426d565b6114129060c081019060a001614836565b8061142b57506000898152600e602052604090205460ff165b90506000611439878061426d565b6101200135905087156117d95760006114556020890189614777565b91506114799050611466898061426d565b6101200135600060010154612710611d65565b91508060010361166a57821580156114f0575081600a600061149e60208c018c614777565b60008181106114af576114af614820565b90506020020160208101906114c49190613dc6565b6001600160a01b0390811682526020808301939093526040918201600090812091891681529252902054105b80156115065750601b546001600160a01b031615155b156115d5576015600061151c60208b018b614777565b600081811061152d5761152d614820565b90506020020160208101906115429190613dc6565b6001600160a01b03168152602081019190915260400160002054610100900460ff16611581576040516310c4e50960e01b815260040160405180910390fd5b6000806115c28d8d8661159760208f018f614777565b60008181106115a8576115a8614820565b90506020020160208101906115bd9190613dc6565b611d7c565b90995097509495506118cb945050505050565b81600a60006115e760208c018c614777565b60008181106115f8576115f8614820565b905060200201602081019061160d9190613dc6565b6001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b03168152602001908152602001600020600082825461165f9190614869565b909155506117d79050565b60006116768284614892565b905060005b611686600184614869565b8110156117235781600a600061169f60208e018e614777565b858181106116af576116af614820565b90506020020160208101906116c49190613dc6565b6001600160a01b03166001600160a01b031681526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546117169190614869565b909155505060010161167b565b50600061173083856148a6565b61173a90836148ba565b905080600a600061174e60208e018e614777565b611759600189614869565b81811061176857611768614820565b905060200201602081019061177d9190613dc6565b6001600160a01b03166001600160a01b031681526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546117cf9190614869565b909155505050505b505b6117e3878061426d565b6117f4906060810190604001613d89565b60045463ffffffff908116911614801561181a575060006118148a611f3b565b60030154115b156118465760008981526007602052604081206004018054839290611840908490614869565b90915550505b81156118715760008a8152600e60205260409020805460ff1916905594509092508291506118cb9050565b60008a8152600d6020526040812080549082905590806118bd8c87868685036118a75761189e8e8061426d565b60e001356118a9565b865b6118b38f8061426d565b6101400135611f7c565b909950975094955050505050505b9450945094915050565b60006118fc846118e5888061426d565b6118f6906080810190606001613dc6565b87612001565b6119128386868561190d8b8061426d565b612040565b50835b95945050505050565b601a54600090600160a01b900460ff161561194c57604051633ee5b89360e01b815260040160405180910390fd5b60006001600160a01b03841615801561196457508215155b156119825760405163ae715ad360e01b815260040160405180910390fd5b61198f85602001516121b4565b60608601519091506001600160a01b03166119bc5760405162845fdd60e41b815260040160405180910390fd5b6127108560e0015111156119e35760405163388d723160e11b815260040160405180910390fd5b6040805180820190915260008082526020820181905290819060006001600160a01b03881615611b67576000611a18896121ed565b90935090506000611a2882611f3b565b84518c5163ffffffff9081169116149350905082611a505780546001600160a01b0316611a56565b60208401515b95506001600160a01b038616611a7f5760405163965a46c160e01b815260040160405180910390fd5b6003810154838015611a915750600081115b15611ade5760008a8360040154611aa891906148ba565b905081811115611acb576040516348ba8bf160e01b815260040160405180910390fd5b6000848152600760205260409020600401555b50835163ffffffff1660408c015260208401516101808c01528815611b6457611b078a8a612263565b611b18828b888c8f60e001516123b4565b6101208c0152611b5d6001600160a01b038b811690881614611b48576001820154600160a01b900460ff16611b55565b8154600160a01b900460ff165b60128b612437565b6101408c01525b50505b60038054906000611b77836148cd565b909155506101608a0152611b8a89610f15565b92503415611b9b57611b9b83610e75565b611bab838a8a8a89878a886124a2565b509093505050505b9392505050565b80471015611c0f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611c5c576040519150601f19603f3d011682016040523d82523d6000602084013e611c61565b606091505b5050905080611cd85760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611c06565b505050565b6000611d27611ceb85612689565b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506126c492505050565b949350505050565b600080611d3a610ee7565b6001600160a01b03161480611d51575060125460ff165b905090565b6000611d2784848460006126e8565b600081611d7284866148e6565b611d279190614892565b6000806000611d8a86612723565b601b546040516369a933a560e01b81526001600160a01b03808416600483015260248201899052306044830152600060648301529293509116906369a933a590608401600060405180830381600087803b158015611de757600080fd5b505af1158015611dfb573d6000803e3d6000fd5b5050601b54604051631a4ca37b60e21b81526001600160a01b038581166004830152602482018a90523060448301526000945090911691506369328dec906064016020604051808303816000875af1158015611e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7f91906148fd565b905085811015611ea25760405163407559a360e11b815260040160405180910390fd5b6000888152601d60205260409020869055601c5461271090611ec59088906148e6565b611ecf9190614892565b6000898152601e60209081526040918290209290925580516001600160a01b038581168252928101899052918716918a917f2d3ba0fa5be2ef8cb1ec8920a07a6cbccc2397b18ca3e70f48ea695500b8f218910160405180910390a35084925090505b94509492505050565b6000818152600760205260408120600180820154839291600160a01b90910460ff161015611bb35760405163618cca3f60e11b815260040160405180910390fd5b6000806000611f8a88611f3b565b60018101549091506001600160a01b039081169088168103611fb2578693509150611ff79050565b86600003611fc6578693509150611ff79050565b611ff08989838a611feb60128860010160149054906101000a900460ff168c8e61275c565b6127a8565b9350935050505b9550959350505050565b8060000361200e57505050565b6001600160a01b03831661203557604051633a48ca7b60e11b815260040160405180910390fd5b611cd88383836128e7565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47061206e60c08301836147da565b60405161207c929190614916565b604051809103902003156121ad576000806121436120a06080850160608601613dc6565b6127105a6120ae9190614869565b600061010063fd614f4160e01b8c8c8c8c6120ca5760006120dc565b6120dc6101208d016101008e01613dc6565b6120e960208e018e613d89565b6120f660c08f018f6147da565b60405160240161210c9796959493929190614926565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261294a565b9150915083158015612153575081155b15612170576040516264cdd360e41b815260040160405180910390fd5b867fb1a4ab59facaedd6d3a71da3902e0a1fa5b99750c0e20cd878334378a41cb33583836040516121a2929190614979565b60405180910390a250505b5050505050565b63ffffffff81166000908152600f6020526040902054806121e857604051630c3bcd4960e41b815260040160405180910390fd5b919050565b604080518082019091526000808252602082015260008061220d846129d4565b9050600061222382602001518360000151611306565b905061222e81611f3b565b60020154600160a01b900460ff166122595760405163a13f958f60e01b815260040160405180910390fd5b9094909350915050565b8060000361226f575050565b6001600160a01b03821661229657604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156122df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230391906148fd565b905061231a6001600160a01b0383163330866129f3565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa158015612362573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238691906148fd565b6123909190614869565b146123ae57604051630e40773560e21b815260040160405180910390fd5b50505050565b6000826000036123c657506000611915565b846001600160a01b0316846001600160a01b0316036123e6575081611915565b60006123f187611f3b565b9050600061242a88888888611feb8760010160149054906101000a900460ff168860000160149054906101000a900460ff168c8c61275c565b5098975050505050505050565b60008260ff168460ff160361244d575080611bb3565b60008360ff168560ff161015612483576124678585614994565b61247290600a614a91565b61247c90846148e6565b9050611d27565b61248d8486614994565b61249890600a614a91565b6119159084614892565b6101208701518015612514578161251457604051632770a7eb60e21b8152306004820152602481018290526001600160a01b03841690639dc29fac90604401600060405180830381600087803b1580156124fb57600080fd5b505af115801561250f573d6000803e3d6000fd5b505050505b6000846000015185602001516003848d604051602001612538959493929190614aa0565b60408051601f1981840301815282825260208054639fa92f9d60e01b8552925191945060009384936001600160a01b031692639fa92f9d926004808401939192918290030181865afa158015612592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b69190614adf565b6001600160a01b031663fa31de018c602001518a866040518463ffffffff1660e01b81526004016125e993929190614afc565b6000604051808303816000875af1158015612608573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126309190810190614b21565b91509150818b61016001518d7fed8e6ba697dd65259e5ce532ac08ff06d1a3607bcec58f8f0937fe36a5666c548e8e8e8c88604051612673959493929190614ba3565b60405180910390a4505050505050505050505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01610f28565b60008060006126d38585612a2b565b915091506126e081612a70565b509392505050565b600481015460009063ffffffff90811690841603612707575082611d27565b61271085611f3b565b546001600160a01b031695945050505050565b60008061272f83611f3b565b600101546001600160a01b031690508061038b57604051630558a50760e31b815260040160405180910390fd5b60008260000361276e57506000611d27565b600061271061277d8482614869565b61278790866148e6565b6127919190614892565b905061279e868683612437565b9695505050505050565b6000858152601860205260408120819081906127c381612bbd565b156127f5576127e96127d58a8a612bda565b6127df8b8a612bda565b8391908989612c5a565b87935093505050611ff7565b60006128008a611f3b565b600201546001600160a01b0390811691508990612821908216836000612f63565b6128356001600160a01b038216838a613078565b6001600160a01b03821663d460f0a2898c8c8b612854610e10426148ba565b6040516001600160e01b031960e088901b16815260048101959095526001600160a01b0393841660248601529290911660448401526064830152608482015260a4016020604051808303816000875af11580156128b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d991906148fd565b899550955050505050611ff7565b6040516001600160a01b038316602482015260448101829052611cd890849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261312a565b6000606060008060008661ffff166001600160401b0381111561296f5761296f614073565b6040519080825280601f01601f191660200182016040528015612999576020820181803683370190505b5090506000808751602089018b8e8ef191503d9250868311156129ba578692505b828152826000602083013e90999098509650505050505050565b604080518082019091526000808252602082015261038b8260006131fc565b6040516001600160a01b03808516602483015283166044820152606481018290526123ae9085906323b872dd60e01b90608401612913565b6000808251604103612a615760208301516040840151606085015160001a612a55878285856132f4565b94509450505050612a69565b506000905060025b9250929050565b6000816004811115612a8457612a84613fdb565b03612a8c5750565b6001816004811115612aa057612aa0613fdb565b03612aed5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611c06565b6002816004811115612b0157612b01613fdb565b03612b4e5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611c06565b6003816004811115612b6257612b62613fdb565b03612bba5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611c06565b50565b600c81015460009060ff1615801561038b57505060080154151590565b60008281526019602090815260408083206001600160a01b0385168085529083528184205486855260189093529083206008018054849360ff1692919083908110612c2757612c27614820565b6000918252602090912001546001600160a01b031614611d275760405163054e442960e41b815260040160405180910390fd5b600c85015460009060ff1615612ca25760405162461bcd60e51b815260206004820152600d60248201526c191a5cd8589b1959081c1bdbdb609a1b6044820152606401611c06565b85600a018560ff1681548110612cba57612cba614820565b9060005260206000200154831115612d0d5760405162461bcd60e51b81526020600482015260166024820152756d6f7265207468616e20706f6f6c2062616c616e636560501b6044820152606401611c06565b600080600088600a01805480602002602001604051908101604052809291908181526020018280548015612d6057602002820191906000526020600020905b815481526020019060010190808311612d4c575b50505050509050612d7489898989856133b5565b909350915084831015612db65760405162461bcd60e51b815260206004820152600a6024820152696479203c206d696e447960b01b6044820152606401611c06565b6000896009018860ff1681548110612dd057612dd0614820565b90600052602060002001546402540be4008b6006015485612df191906148e6565b612dfb9190614892565b612e059190614892565b905086828a60ff1681518110612e1d57612e1d614820565b6020026020010151612e2f91906148ba565b8a600a018a60ff1681548110612e4757612e47614820565b90600052602060002001819055508084838a60ff1681518110612e6c57612e6c614820565b6020026020010151612e7e9190614869565b612e889190614869565b8a600a018960ff1681548110612ea057612ea0614820565b6000918252602090912001558015612f0557808a600b018960ff1681548110612ecb57612ecb614820565b9060005260206000200154612ee091906148ba565b8a600b018960ff1681548110612ef857612ef8614820565b6000918252602090912001555b8954604080518981526020810187905260ff8c8116828401528b16606082015290513392917f28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df320919081900360800190a3509198975050505050505050565b801580612fdd5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fdb91906148fd565b155b6130485760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401611c06565b6040516001600160a01b038316602482015260448101829052611cd890849063095ea7b360e01b90606401612913565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156130c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ed91906148fd565b6130f791906148ba565b6040516001600160a01b0385166024820152604481018290529091506123ae90859063095ea7b360e01b90606401612913565b600061317f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661357b9092919063ffffffff16565b805190915015611cd8578080602001905181019061319d9190614bf2565b611cd85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611c06565b604080518082019091526000808252602082015260408051808201909152600080825260208201526001600160a01b03841661323957905061038b565b506001600160a01b03831660009081526005830160209081526040918290208251808401909352805463ffffffff16808452600190910154918301919091521561328457905061038b565b61328e848461358a565b156132b457600483015463ffffffff1681526001600160a01b0384166020820152611bb3565b506001600160a01b03831660009081526006830160209081526040918290208251808401909352805463ffffffff16835260010154908201529392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561332b5750600090506003611f32565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561337f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166133a857600060019250925050611f32565b9660009650945050505050565b60008060008760090180548060200260200160405190810160405280929190818152602001828054801561340857602002820191906000526020600020905b8154815260200190600101908083116133f4575b50505050509050600061341b85836135c9565b905080518860ff16108015613433575080518760ff16105b6134745760405162461bcd60e51b8152602060048201526012602482015271696e646578206f7574206f662072616e676560701b6044820152606401611c06565b6000818960ff168151811061348b5761348b614820565b6020026020010151838a60ff16815181106134a8576134a8614820565b6020026020010151886134bb91906148e6565b6134c591906148ba565b905060006134de6134d58c6136d3565b8b8b85876136de565b9050600181848b60ff16815181106134f8576134f8614820565b602002602001015161350a9190614869565b6135149190614869565b95506402540be4008b600501548761352c91906148e6565b6135369190614892565b9450838960ff168151811061354d5761354d614820565b602002602001015185876135619190614869565b61356b9190614892565b9550505050509550959350505050565b6060611d278484600085613945565b6001600160a01b038216600090815260068201602052604081205463ffffffff16156135b85750600061038b565b50506001600160a01b03163b151590565b815181516060919081146136165760405162461bcd60e51b81526020600482015260146024820152736d69736d61746368206d756c7469706c6965727360601b6044820152606401611c06565b6000816001600160401b0381111561363057613630614073565b604051908082528060200260200182016040528015613659578160200160208202803683370190505b50905060005b828110156136ca5784818151811061367957613679614820565b602002602001015186828151811061369357613693614820565b60200260200101516136a591906148e6565b8282815181106136b7576136b7614820565b602090810291909101015260010161365f565b50949350505050565b600061038b82613a20565b805160009060ff808616908716036137385760405162461bcd60e51b815260206004820152601760248201527f636f6d7061726520746f6b656e20746f20697473656c660000000000000000006044820152606401611c06565b808660ff1610801561374c5750808560ff16105b61378a5760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881b9bdd08199bdd5b99608a1b6044820152606401611c06565b60006137968489613a69565b9050806000806137a68b866148e6565b90506000805b8681101561382d578b60ff1681036137c6578991506137f9565b8a60ff1681146137f1578881815181106137e2576137e2614820565b602002602001015191506137f9565b6001016137ac565b61380382856148ba565b935061380f87836148e6565b61381987876148e6565b6138239190614892565b94506001016137ac565b5061383886836148e6565b606461384487876148e6565b61384e91906148e6565b6138589190614892565b93506000826138686064886148e6565b6138729190614892565b61387c90856148ba565b9050600086815b6101008110156138fc57819250888483600261389f91906148e6565b6138a991906148ba565b6138b39190614869565b886138be84806148e6565b6138c891906148ba565b6138d29190614892565b91506138de8284613c16565b156138f457509850611915975050505050505050565b600101613883565b5060405162461bcd60e51b815260206004820152601e60248201527f417070726f78696d6174696f6e20646964206e6f7420636f6e766572676500006044820152606401611c06565b6060824710156139a65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611c06565b600080866001600160a01b031685876040516139c29190614c0f565b60006040518083038185875af1925050503d80600081146139ff576040519150601f19603f3d011682016040523d82523d6000602084013e613a04565b606091505b5091509150613a1587838387613c2c565b979650505050505050565b600481015460028201546001830154909190808314801590613a4157508142105b15613a62576000846003015490508083038142038502428503840201049350505b5050919050565b815160009081805b82811015613aa857858181518110613a8b57613a8b614820565b602002602001015182613a9e91906148ba565b9150600101613a71565b5080600003613abc5760009250505061038b565b60008181613aca85886148e6565b905060005b610100811015613bd7578260005b87811015613b2857878b8281518110613af857613af8614820565b6020026020010151613b0a91906148e6565b613b1486846148e6565b613b1e9190614892565b9150600101613add565b5083945080876001613b3a91906148ba565b613b4491906148e6565b606485613b518287614869565b613b5b91906148e6565b613b659190614892565b613b6f91906148ba565b84613b7a89846148e6565b6064613b868a886148e6565b613b909190614892565b613b9a91906148ba565b613ba491906148e6565b613bae9190614892565b9350613bba8486613c16565b15613bce578397505050505050505061038b565b50600101613acf565b5060405162461bcd60e51b81526020600482015260136024820152724420646f6573206e6f7420636f6e766572676560681b6044820152606401611c06565b60006002613c248484613ca5565b109392505050565b60608315613c9b578251600003613c94576001600160a01b0385163b613c945760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611c06565b5081611d27565b611d278383613cca565b600081831115613cc057613cb98284614869565b905061038b565b611bb38383614869565b815115613cda5781518083602001fd5b8060405162461bcd60e51b8152600401611c069190614c21565b828054828255906000526020600020908101928215613d47579160200282015b82811115613d475781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190613d14565b50613d53929150613d57565b5090565b5b80821115613d535760008155600101613d58565b63ffffffff81168114612bba57600080fd5b80356121e881613d6c565b600060208284031215613d9b57600080fd5b8135611bb381613d6c565b6001600160a01b0381168114612bba57600080fd5b80356121e881613da6565b600060208284031215613dd857600080fd5b8135611bb381613da6565b600060208284031215613df557600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b81811015613e3d5783516001600160a01b031683529284019291840191600101613e18565b50909695505050505050565b60006101a08284031215613e5c57600080fd5b50919050565b60008060408385031215613e7557600080fd5b82356001600160401b03811115613e8b57600080fd5b613e9785828601613e49565b95602094909401359450505050565b600060208284031215613eb857600080fd5b81356001600160401b03811115613ece57600080fd5b820160a08185031215611bb357600080fd5b60008060008060008060008060e0898b031215613efc57600080fd5b8835613f0781613d6c565b97506020890135613f1781613da6565b96506040890135613f2781613da6565b95506060890135613f3781613da6565b94506080890135935060a0890135925060c08901356001600160401b0380821115613f6157600080fd5b818b0191508b601f830112613f7557600080fd5b813581811115613f8457600080fd5b8c6020828501011115613f9657600080fd5b6020830194508093505050509295985092959890939650565b60008060408385031215613fc257600080fd5b8235613fcd81613d6c565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b60048110612bba57634e487b7160e01b600052602160045260246000fd5b6020810161401c83613ff1565b91905290565b60006020828403121561403457600080fd5b81356001600160401b0381111561404a57600080fd5b611d2784828501613e49565b60006020828403121561406857600080fd5b8151611bb381613d6c565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b03811182821017156140ac576140ac614073565b60405290565b604051601f8201601f191681016001600160401b03811182821017156140da576140da614073565b604052919050565b8015158114612bba57600080fd5b80356121e8816140e2565b60006001600160401b0382111561411457614114614073565b50601f01601f191660200190565b600082601f83011261413357600080fd5b8135614146614141826140fb565b6140b2565b81815284602083860101111561415b57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a0823603121561418b57600080fd5b614193614089565b61419c83613d7e565b81526141aa60208401613d7e565b60208201526141bb60408401613d7e565b60408201526141cc60608401613dbb565b60608201526141dd60808401613dbb565b60808201526141ee60a084016140f0565b60a082015260c08301356001600160401b0381111561420c57600080fd5b61421836828601614122565b60c08301525060e083013560e0820152610100614236818501613dbb565b9082015261012083810135908201526101408084013590820152610160808401359082015261018092830135928101929092525090565b6000823561019e1983360301811261428457600080fd5b9190910192915050565b6000808335601e198436030181126142a557600080fd5b83016020810192503590506001600160401b038111156142c457600080fd5b803603821315612a6957600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e1984360301811261431357600080fd5b83016020810192503590506001600160401b0381111561433257600080fd5b8060051b3603821315612a6957600080fd5b8183526000602080850194508260005b8581101561438257813561436781613da6565b6001600160a01b031687529582019590820190600101614354565b509495945050505050565b81835260006020808501808196508560051b810191508460005b878110156143dd5782840389526143be828861428e565b6143c98682846142d3565b9a87019a95505050908401906001016143a7565b5091979650505050505050565b608081526000610120863561019e1988360301811261440857600080fd5b60a06080850152870161442a82850161442083613d7e565b63ffffffff169052565b61443660208201613d7e565b61014061444a8187018363ffffffff169052565b61445660408401613d7e565b915061016061446c8188018463ffffffff169052565b61447860608501613dbb565b9250610180614491818901856001600160a01b03169052565b61449d60808601613dbb565b93506101a06144b6818a01866001600160a01b03169052565b6144c260a087016140f0565b8015156101c08b015294506144da60c087018761428e565b9550816101e08b01526144f26102c08b0187836142d3565b9550505060e085013561020089015261010061450f818701613dbb565b6001600160a01b03166102208a0152858701356102408a0152838601356102608a0152828601356102808a0152818601356102a08a015261455360208e018e6142fc565b97509550607f199350838986030160a08a0152614571858888614344565b965061458060408e018e6142fc565b96509450838988030160c08a015261459987878761438d565b96506145a760608e01613dbb565b6001600160a01b03811660e08b015295506145c560808e018e61428e565b965094508389880301818a0152505050506145e18383836142d3565b93505050506145fb60208301866001600160a01b03169052565b83604083015261191560608301846001600160a01b03169052565b60005b83811015614631578181015183820152602001614619565b50506000910152565b60008151808452614652816020860160208601614616565b601f01601f19169290920160200192915050565b805163ffffffff16825260006101a0602083015161468c602086018263ffffffff169052565b5060408301516146a4604086018263ffffffff169052565b5060608301516146bf60608601826001600160a01b03169052565b5060808301516146da60808601826001600160a01b03169052565b5060a08301516146ee60a086018215159052565b5060c08301518160c08601526147068286018261463a565b91505060e083015160e08501526101008084015161472e828701826001600160a01b03169052565b50506101208381015190850152610140808401519085015261016080840151908501526101809283015192909301919091525090565b602081526000611bb36020830184614666565b6000808335601e1984360301811261478e57600080fd5b8301803591506001600160401b038211156147a857600080fd5b6020019150600581901b3603821315612a6957600080fd5b838152604060208201526000611915604083018486614344565b6000808335601e198436030181126147f157600080fd5b8301803591506001600160401b0382111561480b57600080fd5b602001915036819003821315612a6957600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561484857600080fd5b8135611bb3816140e2565b634e487b7160e01b600052601160045260246000fd5b8181038181111561038b5761038b614853565b634e487b7160e01b600052601260045260246000fd5b6000826148a1576148a161487c565b500490565b6000826148b5576148b561487c565b500690565b8082018082111561038b5761038b614853565b6000600182016148df576148df614853565b5060010190565b808202811582820484141761038b5761038b614853565b60006020828403121561490f57600080fd5b5051919050565b8183823760009101908152919050565b878152602081018790526001600160a01b0386811660408301528516606082015263ffffffff8416608082015260c060a0820181905260009061496c90830184866142d3565b9998505050505050505050565b8215158152604060208201526000611d27604083018461463a565b60ff828116828216039081111561038b5761038b614853565b600181815b808511156149e85781600019048211156149ce576149ce614853565b808516156149db57918102915b93841c93908002906149b2565b509250929050565b6000826149ff5750600161038b565b81614a0c5750600061038b565b8160018114614a225760028114614a2c57614a48565b600191505061038b565b60ff841115614a3d57614a3d614853565b50506001821b61038b565b5060208310610133831016604e8410600b8410161715614a6b575081810a61038b565b614a7583836149ad565b8060001904821115614a8957614a89614853565b029392505050565b6000611bb360ff8416836149f0565b63ffffffff60e01b8660e01b168152846004820152614abe84613ff1565b60f89390931b60248401526025830191909152604582015260650192915050565b600060208284031215614af157600080fd5b8151611bb381613da6565b63ffffffff84168152826020820152606060408201526000611915606083018461463a565b60008060408385031215614b3457600080fd5b8251915060208301516001600160401b03811115614b5157600080fd5b8301601f81018513614b6257600080fd5b8051614b70614141826140fb565b818152866020838501011115614b8557600080fd5b614b96826020830160208601614616565b8093505050509250929050565b60a081526000614bb660a0830188614666565b6001600160a01b03878116602085015260408401879052851660608401528281036080840152614be6818561463a565b98975050505050505050565b600060208284031215614c0457600080fd5b8151611bb3816140e2565b60008251614284818460208701614616565b602081526000611bb3602083018461463a56fea2646970667358221220e42637b26ba9d67de61a02bdc6d0e8d841fcb6a6c6929ba1c112d28f05bae8fd64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4C6A DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xFE JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6989CA7C GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xAFFED0E0 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xAFFED0E0 EQ PUSH2 0x2BD JUMPI DUP1 PUSH4 0xB49C53A7 EQ PUSH2 0x2D2 JUMPI DUP1 PUSH4 0xBFD79030 EQ PUSH2 0x2F2 JUMPI DUP1 PUSH4 0xC2FB26A6 EQ PUSH2 0x32F JUMPI DUP1 PUSH4 0xCB8058BA EQ PUSH2 0x354 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6989CA7C EQ PUSH2 0x257 JUMPI DUP1 PUSH4 0x8A336231 EQ PUSH2 0x277 JUMPI DUP1 PUSH4 0x8AAC16BA EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0x91F5DE79 EQ PUSH2 0x2AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3339DF96 GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0x3339DF96 EQ PUSH2 0x1CB JUMPI DUP1 PUSH4 0x41BDC8B5 EQ PUSH2 0x1E9 JUMPI DUP1 PUSH4 0x54126711 EQ PUSH2 0x209 JUMPI DUP1 PUSH4 0x63E3E7D2 EQ PUSH2 0x229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x121CCA31 EQ PUSH2 0x103 JUMPI DUP1 PUSH4 0x159E041F EQ PUSH2 0x140 JUMPI DUP1 PUSH4 0x1A8BC0E1 EQ PUSH2 0x189 JUMPI DUP1 PUSH4 0x2424401F EQ PUSH2 0x1B6 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x123 PUSH2 0x11E CALLDATASIZE PUSH1 0x4 PUSH2 0x3D89 JUMP JUMPDEST PUSH2 0x374 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x179 PUSH2 0x15B CALLDATASIZE PUSH1 0x4 PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1F PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x137 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A9 PUSH2 0x1A4 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DE3 JUMP JUMPDEST PUSH2 0x391 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x137 SWAP2 SWAP1 PUSH2 0x3DFC JUMP JUMPDEST PUSH2 0x1C9 PUSH2 0x1C4 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DE3 JUMP JUMPDEST PUSH2 0x3FD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x123 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C9 PUSH2 0x204 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DC6 JUMP JUMPDEST PUSH2 0x483 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C9 PUSH2 0x224 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E62 JUMP JUMPDEST PUSH2 0x5E0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x235 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH2 0x244 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EA6 JUMP JUMPDEST PUSH2 0x6E2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x137 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x263 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C9 PUSH2 0x272 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DC6 JUMP JUMPDEST PUSH2 0x8A1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x283 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C9 PUSH2 0x292 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DC6 JUMP JUMPDEST PUSH2 0x999 JUMP JUMPDEST PUSH2 0x249 PUSH2 0x2A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EE0 JUMP JUMPDEST PUSH2 0xAB5 JUMP JUMPDEST PUSH2 0x249 PUSH2 0x2B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EE0 JUMP JUMPDEST PUSH2 0xBA9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x249 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C9 PUSH2 0x2ED CALLDATASIZE PUSH1 0x4 PUSH2 0x3FAF JUMP JUMPDEST PUSH2 0xC8A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x322 PUSH2 0x30D CALLDATASIZE PUSH1 0x4 PUSH2 0x3DE3 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x137 SWAP2 SWAP1 PUSH2 0x400F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x137 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C9 PUSH2 0x36F CALLDATASIZE PUSH1 0x4 PUSH2 0x4022 JUMP JUMPDEST PUSH2 0xDA8 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3F1 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3D3 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 NOT ADD PUSH2 0x421 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x451 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLVALUE PUSH1 0x0 SUB PUSH2 0x472 JUMPI PUSH1 0x40 MLOAD PUSH4 0x48E7DC3F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x47B DUP2 PUSH2 0xE75 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x16 SSTORE JUMP JUMPDEST CALLER PUSH2 0x48C PUSH2 0xEE7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x4C7 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4C4 JUMPI PUSH2 0x4C4 PUSH2 0x3FDB JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x234D8E3D PUSH1 0xE2 SHL DUP2 MSTORE SWAP1 MLOAD DUP5 SWAP4 PUSH4 0xFFFFFFFF SWAP1 SWAP4 AND SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP3 PUSH4 0x8D3638F4 SWAP3 DUP2 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x535 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x559 SWAP2 SWAP1 PUSH2 0x4056 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x57C JUMPI PUSH1 0x40 MLOAD PUSH3 0x1FF661 PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xD6E53D12BB441B2201BE4949C7F431B383623888DF2ABFEEF43AAAF272802D50 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x20 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST DUP2 CALLER PUSH2 0x5F2 PUSH1 0xA0 DUP4 ADD PUSH1 0x80 DUP5 ADD PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x619 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE3613AFF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2710 DUP3 GT ISZERO PUSH2 0x63C JUMPI PUSH1 0x40 MLOAD PUSH4 0x3345CD43 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF AND PUSH2 0x655 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3D89 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x679 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2A8E4627 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x68C PUSH2 0x687 DUP6 PUSH2 0x4178 JUMP JUMPDEST PUSH2 0xF15 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP1 SWAP2 POP DUP2 SWAP1 PUSH32 0xB243C3CEA6CD1BBFD64D5D0765F13734CA7B87FDF14E017391FE12A8891434CA SWAP1 PUSH2 0x6D4 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0x709 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x739 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x745 DUP5 PUSH2 0xF45 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x760 JUMPI PUSH2 0x760 PUSH2 0x3FDB JUMP JUMPDEST EQ PUSH2 0x76C JUMPI PUSH1 0x2 PUSH2 0x76F JUMP JUMPDEST PUSH1 0x3 JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 POP DUP3 SWAP2 PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x79C JUMPI PUSH2 0x79C PUSH2 0x3FDB JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP1 DUP1 PUSH2 0x7F7 DUP7 PUSH2 0x7DB PUSH2 0x7B6 DUP12 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x180 ADD CALLDATALOAD PUSH2 0x7C5 DUP13 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x7D6 SWAP1 PUSH1 0x60 DUP2 ADD SWAP1 PUSH1 0x40 ADD PUSH2 0x3D89 JUMP JUMPDEST PUSH2 0x1306 JUMP JUMPDEST PUSH1 0x3 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x7EF JUMPI PUSH2 0x7EF PUSH2 0x3FDB JUMP JUMPDEST EQ ISZERO DUP12 PUSH2 0x1348 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH1 0x0 PUSH2 0x821 DUP10 DUP6 DUP6 DUP11 PUSH1 0x3 DUP11 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x81B JUMPI PUSH2 0x81B PUSH2 0x3FDB JUMP JUMPDEST EQ PUSH2 0x18D5 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x837 DUP11 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x848 SWAP1 PUSH1 0x80 DUP2 ADD SWAP1 PUSH1 0x60 ADD PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 PUSH32 0xB07A8B0B083F8976B3C832B720632F49CB8BA1E7A99E1B145F51A47D3391CB7 DUP13 DUP7 DUP7 CALLER PUSH1 0x40 MLOAD PUSH2 0x887 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x43EA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x16 SSTORE POP SWAP3 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLER PUSH2 0x8AA PUSH2 0xEE7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x8E5 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x8E2 JUMPI PUSH2 0x8E2 PUSH2 0x3FDB JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x903 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1F PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x93C JUMPI PUSH1 0x40 MLOAD PUSH4 0x7840A40D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1F PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE CALLER SWAP1 DUP4 ADD MSTORE PUSH32 0x4860B0A180D4B5969C2757493A999F05D0B22318320F154A02170AA239E24B13 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST CALLER PUSH2 0x9A2 PUSH2 0xEE7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x9DD JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x9DA JUMPI PUSH2 0x9DA PUSH2 0x3FDB JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x9FB JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xA22 JUMPI PUSH1 0x40 MLOAD PUSH4 0x32F9C08D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1F PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xA5C JUMPI PUSH1 0x40 MLOAD PUSH4 0xE2A45063 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1F PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE CALLER SWAP1 DUP4 ADD MSTORE PUSH32 0x3860A100215FE93B6B95ED1AE0870E538F85A73B30D073F63FEFC60E08B0C124 SWAP2 ADD PUSH2 0x98E JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0xADC JUMPI PUSH1 0x40 MLOAD PUSH4 0x63B468CB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x17 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH2 0x1A0 DUP2 ADD DUP3 MSTORE PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP12 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP3 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP14 AND PUSH1 0x60 DUP6 ADD MSTORE DUP11 AND PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD DUP2 SWAP1 MSTORE DUP4 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP6 DUP5 MSTORE SWAP3 PUSH1 0xC0 DUP4 ADD SWAP2 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH1 0x20 DUP3 ADD DUP9 SWAP1 MSTORE CALLER PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 SWAP1 SWAP2 ADD MSTORE SWAP1 POP PUSH2 0xB96 DUP2 DUP10 DUP9 PUSH2 0x191E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x17 SSTORE SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0xBD0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x63B468CB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x17 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH2 0x1A0 DUP2 ADD DUP3 MSTORE PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP12 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP3 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP14 AND PUSH1 0x60 DUP6 ADD MSTORE DUP11 AND PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0xA0 DUP5 ADD MSTORE DUP4 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP6 DUP5 MSTORE SWAP3 PUSH1 0xC0 DUP4 ADD SWAP2 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH1 0x20 DUP3 ADD DUP9 SWAP1 MSTORE CALLER PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 SWAP1 SWAP2 ADD MSTORE SWAP1 POP PUSH2 0xB96 DUP2 DUP10 DUP9 PUSH2 0x191E JUMP JUMPDEST CALLER PUSH2 0xC93 PUSH2 0xEE7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0xCCE JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xCCB JUMPI PUSH2 0xCCB PUSH2 0x3FDB JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0xCEC JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0xD0A JUMPI PUSH1 0x40 MLOAD PUSH4 0x3BCA644D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP3 AND ISZERO DUP1 PUSH2 0xD27 JUMPI POP PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST ISZERO PUSH2 0xD45 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2892757B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 ADD MSTORE CALLER DUP3 DUP3 ADD MSTORE MLOAD PUSH32 0xB07F562723347D6EA7F9F37B3B31F96B65104C3339D1C89E1B6FA88E2410B85C SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST DUP1 CALLER PUSH2 0xDBA PUSH1 0xA0 DUP4 ADD PUSH1 0x80 DUP5 ADD PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xDE1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE3613AFF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF AND PUSH2 0xDFA PUSH1 0x40 DUP5 ADD PUSH1 0x20 DUP6 ADD PUSH2 0x3D89 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0xE1E JUMPI PUSH1 0x40 MLOAD PUSH4 0xADA556F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE2C PUSH2 0x687 DUP5 PUSH2 0x4178 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD SWAP2 SWAP3 POP DUP3 SWAP2 PUSH32 0x2510041334EDE909998B9AEFCCA4300FC36C670DD00E1F7F0AFFFACA56ADCB39 SWAP2 SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0xE9F JUMPI PUSH1 0x40 MLOAD PUSH4 0xBD76195 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xEA9 DUP2 CALLVALUE PUSH2 0x1BBA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE DUP4 SWAP2 PUSH32 0xFD832CAF789E0DADD0E7ED643B3EA6051FA26C48516E242CA4CB3DB9EDA6C8EC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xF28 SWAP2 SWAP1 PUSH2 0x4764 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xF93 JUMPI POP PUSH2 0xF6C DUP4 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0xF7D SWAP1 PUSH1 0xA0 DUP2 ADD SWAP1 PUSH1 0x80 ADD PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST ISZERO PUSH2 0xFB1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7C32A2B3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF AND PUSH2 0xFC4 DUP5 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0xFD5 SWAP1 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD PUSH2 0x3D89 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0xFF9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB6BB3225 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1008 PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x4777 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 SWAP1 POP PUSH2 0x1024 PUSH2 0x101B DUP7 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x687 SWAP1 PUSH2 0x4178 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND DUP3 ISZERO PUSH2 0x12C9 JUMPI PUSH1 0xC SLOAD DUP4 GT ISZERO PUSH2 0x1062 JUMPI PUSH1 0x40 MLOAD PUSH4 0x13C06EF3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1076 JUMPI PUSH2 0x1076 PUSH2 0x3FDB JUMP JUMPDEST EQ PUSH2 0x1094 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCAAEB0B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F PUSH1 0x0 PUSH2 0x10A8 PUSH1 0x80 DUP10 ADD PUSH1 0x60 DUP11 ADD PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x10E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1FA09B53 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x112F DUP3 PUSH2 0x10F3 PUSH1 0x20 DUP10 ADD DUP10 PUSH2 0x4777 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1105 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x47C0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 PUSH2 0x112A PUSH1 0x80 DUP10 ADD DUP10 PUSH2 0x47DA JUMP JUMPDEST PUSH2 0x1CDD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1148 PUSH1 0x80 DUP9 ADD PUSH1 0x60 DUP10 ADD PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x116F JUMPI PUSH1 0x40 MLOAD PUSH4 0x8579ECA5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP6 SWAP1 MSTORE DUP2 DUP4 ADD DUP7 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB DUP5 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x12C2 JUMPI PUSH2 0x11AA PUSH2 0x1D2F JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x1207 JUMPI POP PUSH1 0x15 PUSH1 0x0 PUSH2 0x11C3 PUSH1 0x20 DUP12 ADD DUP12 PUSH2 0x4777 JUMP JUMPDEST DUP5 DUP2 DUP2 LT PUSH2 0x11D3 JUMPI PUSH2 0x11D3 PUSH2 0x4820 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x11E8 SWAP2 SWAP1 PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x1225 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE1EB7F7 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1258 DUP3 PUSH2 0x1236 PUSH1 0x40 DUP12 ADD DUP12 PUSH2 0x4777 JUMP JUMPDEST DUP5 DUP2 DUP2 LT PUSH2 0x1246 JUMPI PUSH2 0x1246 PUSH2 0x4820 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x112A SWAP2 SWAP1 PUSH2 0x47DA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x126E PUSH1 0x20 DUP11 ADD DUP11 PUSH2 0x4777 JUMP JUMPDEST DUP4 DUP2 DUP2 LT PUSH2 0x127E JUMPI PUSH2 0x127E PUSH2 0x4820 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1293 SWAP2 SWAP1 PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x12BA JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A1DD233 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 ADD PUSH2 0x119A JUMP JUMPDEST POP POP PUSH2 0x12FB JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x12DD JUMPI PUSH2 0x12DD PUSH2 0x3FDB JUMP JUMPDEST EQ PUSH2 0x12FB JUMPI PUSH1 0x40 MLOAD PUSH4 0x6320D2CF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x132A SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH4 0xFFFFFFFF AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x1359 PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x4777 JUMP JUMPDEST PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1372 SWAP3 SWAP1 SWAP2 PUSH2 0x3CF4 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x137F DUP6 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x1390 SWAP1 PUSH1 0x60 DUP2 ADD SWAP1 PUSH1 0x40 ADD PUSH2 0x3D89 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND ISZERO PUSH2 0x13D1 JUMPI PUSH2 0x13CE DUP8 PUSH2 0x13A9 DUP8 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x180 ADD CALLDATALOAD PUSH2 0x13B8 DUP9 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x13C9 SWAP1 PUSH1 0x60 DUP2 ADD SWAP1 PUSH1 0x40 ADD PUSH2 0x3D89 JUMP JUMPDEST PUSH2 0x1D56 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x13DB DUP6 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x120 ADD CALLDATALOAD PUSH1 0x0 SUB PUSH2 0x13F5 JUMPI PUSH1 0x0 SWAP4 POP SWAP2 POP DUP2 SWAP1 POP PUSH2 0x18CB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1401 DUP7 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x1412 SWAP1 PUSH1 0xC0 DUP2 ADD SWAP1 PUSH1 0xA0 ADD PUSH2 0x4836 JUMP JUMPDEST DUP1 PUSH2 0x142B JUMPI POP PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1439 DUP8 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x120 ADD CALLDATALOAD SWAP1 POP DUP8 ISZERO PUSH2 0x17D9 JUMPI PUSH1 0x0 PUSH2 0x1455 PUSH1 0x20 DUP10 ADD DUP10 PUSH2 0x4777 JUMP JUMPDEST SWAP2 POP PUSH2 0x1479 SWAP1 POP PUSH2 0x1466 DUP10 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x120 ADD CALLDATALOAD PUSH1 0x0 PUSH1 0x1 ADD SLOAD PUSH2 0x2710 PUSH2 0x1D65 JUMP JUMPDEST SWAP2 POP DUP1 PUSH1 0x1 SUB PUSH2 0x166A JUMPI DUP3 ISZERO DUP1 ISZERO PUSH2 0x14F0 JUMPI POP DUP2 PUSH1 0xA PUSH1 0x0 PUSH2 0x149E PUSH1 0x20 DUP13 ADD DUP13 PUSH2 0x4777 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x14AF JUMPI PUSH2 0x14AF PUSH2 0x4820 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x14C4 SWAP2 SWAP1 PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP10 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD LT JUMPDEST DUP1 ISZERO PUSH2 0x1506 JUMPI POP PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x15D5 JUMPI PUSH1 0x15 PUSH1 0x0 PUSH2 0x151C PUSH1 0x20 DUP12 ADD DUP12 PUSH2 0x4777 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x152D JUMPI PUSH2 0x152D PUSH2 0x4820 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1542 SWAP2 SWAP1 PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1581 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10C4E509 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x15C2 DUP14 DUP14 DUP7 PUSH2 0x1597 PUSH1 0x20 DUP16 ADD DUP16 PUSH2 0x4777 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x15A8 JUMPI PUSH2 0x15A8 PUSH2 0x4820 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x15BD SWAP2 SWAP1 PUSH2 0x3DC6 JUMP JUMPDEST PUSH2 0x1D7C JUMP JUMPDEST SWAP1 SWAP10 POP SWAP8 POP SWAP5 SWAP6 POP PUSH2 0x18CB SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP2 PUSH1 0xA PUSH1 0x0 PUSH2 0x15E7 PUSH1 0x20 DUP13 ADD DUP13 PUSH2 0x4777 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x15F8 JUMPI PUSH2 0x15F8 PUSH2 0x4820 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x160D SWAP2 SWAP1 PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x165F SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x17D7 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1676 DUP3 DUP5 PUSH2 0x4892 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH2 0x1686 PUSH1 0x1 DUP5 PUSH2 0x4869 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1723 JUMPI DUP2 PUSH1 0xA PUSH1 0x0 PUSH2 0x169F PUSH1 0x20 DUP15 ADD DUP15 PUSH2 0x4777 JUMP JUMPDEST DUP6 DUP2 DUP2 LT PUSH2 0x16AF JUMPI PUSH2 0x16AF PUSH2 0x4820 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x16C4 SWAP2 SWAP1 PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x1716 SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 ADD PUSH2 0x167B JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1730 DUP4 DUP6 PUSH2 0x48A6 JUMP JUMPDEST PUSH2 0x173A SWAP1 DUP4 PUSH2 0x48BA JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0xA PUSH1 0x0 PUSH2 0x174E PUSH1 0x20 DUP15 ADD DUP15 PUSH2 0x4777 JUMP JUMPDEST PUSH2 0x1759 PUSH1 0x1 DUP10 PUSH2 0x4869 JUMP JUMPDEST DUP2 DUP2 LT PUSH2 0x1768 JUMPI PUSH2 0x1768 PUSH2 0x4820 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x177D SWAP2 SWAP1 PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x17CF SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP JUMPDEST POP JUMPDEST PUSH2 0x17E3 DUP8 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x17F4 SWAP1 PUSH1 0x60 DUP2 ADD SWAP1 PUSH1 0x40 ADD PUSH2 0x3D89 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x181A JUMPI POP PUSH1 0x0 PUSH2 0x1814 DUP11 PUSH2 0x1F3B JUMP JUMPDEST PUSH1 0x3 ADD SLOAD GT JUMPDEST ISZERO PUSH2 0x1846 JUMPI PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x4 ADD DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x1840 SWAP1 DUP5 SWAP1 PUSH2 0x4869 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST DUP2 ISZERO PUSH2 0x1871 JUMPI PUSH1 0x0 DUP11 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP5 POP SWAP1 SWAP3 POP DUP3 SWAP2 POP PUSH2 0x18CB SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP11 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE SWAP1 DUP1 PUSH2 0x18BD DUP13 DUP8 DUP7 DUP7 DUP6 SUB PUSH2 0x18A7 JUMPI PUSH2 0x189E DUP15 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH1 0xE0 ADD CALLDATALOAD PUSH2 0x18A9 JUMP JUMPDEST DUP7 JUMPDEST PUSH2 0x18B3 DUP16 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x140 ADD CALLDATALOAD PUSH2 0x1F7C JUMP JUMPDEST SWAP1 SWAP10 POP SWAP8 POP SWAP5 SWAP6 POP POP POP POP POP POP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18FC DUP5 PUSH2 0x18E5 DUP9 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x18F6 SWAP1 PUSH1 0x80 DUP2 ADD SWAP1 PUSH1 0x60 ADD PUSH2 0x3DC6 JUMP JUMPDEST DUP8 PUSH2 0x2001 JUMP JUMPDEST PUSH2 0x1912 DUP4 DUP7 DUP7 DUP6 PUSH2 0x190D DUP12 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x2040 JUMP JUMPDEST POP DUP4 JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x194C JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO DUP1 ISZERO PUSH2 0x1964 JUMPI POP DUP3 ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1982 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAE715AD3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x198F DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x21B4 JUMP JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x19BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x845FDD PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2710 DUP6 PUSH1 0xE0 ADD MLOAD GT ISZERO PUSH2 0x19E3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x388D7231 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND ISZERO PUSH2 0x1B67 JUMPI PUSH1 0x0 PUSH2 0x1A18 DUP10 PUSH2 0x21ED JUMP JUMPDEST SWAP1 SWAP4 POP SWAP1 POP PUSH1 0x0 PUSH2 0x1A28 DUP3 PUSH2 0x1F3B JUMP JUMPDEST DUP5 MLOAD DUP13 MLOAD PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP2 AND EQ SWAP4 POP SWAP1 POP DUP3 PUSH2 0x1A50 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1A56 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD JUMPDEST SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x1A7F JUMPI PUSH1 0x40 MLOAD PUSH4 0x965A46C1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD DUP4 DUP1 ISZERO PUSH2 0x1A91 JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST ISZERO PUSH2 0x1ADE JUMPI PUSH1 0x0 DUP11 DUP4 PUSH1 0x4 ADD SLOAD PUSH2 0x1AA8 SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST SWAP1 POP DUP2 DUP2 GT ISZERO PUSH2 0x1ACB JUMPI PUSH1 0x40 MLOAD PUSH4 0x48BA8BF1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SSTORE JUMPDEST POP DUP4 MLOAD PUSH4 0xFFFFFFFF AND PUSH1 0x40 DUP13 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x180 DUP13 ADD MSTORE DUP9 ISZERO PUSH2 0x1B64 JUMPI PUSH2 0x1B07 DUP11 DUP11 PUSH2 0x2263 JUMP JUMPDEST PUSH2 0x1B18 DUP3 DUP12 DUP9 DUP13 DUP16 PUSH1 0xE0 ADD MLOAD PUSH2 0x23B4 JUMP JUMPDEST PUSH2 0x120 DUP13 ADD MSTORE PUSH2 0x1B5D PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND SWAP1 DUP9 AND EQ PUSH2 0x1B48 JUMPI PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1B55 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND JUMPDEST PUSH1 0x12 DUP12 PUSH2 0x2437 JUMP JUMPDEST PUSH2 0x140 DUP13 ADD MSTORE JUMPDEST POP POP JUMPDEST PUSH1 0x3 DUP1 SLOAD SWAP1 PUSH1 0x0 PUSH2 0x1B77 DUP4 PUSH2 0x48CD JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x160 DUP11 ADD MSTORE PUSH2 0x1B8A DUP10 PUSH2 0xF15 JUMP JUMPDEST SWAP3 POP CALLVALUE ISZERO PUSH2 0x1B9B JUMPI PUSH2 0x1B9B DUP4 PUSH2 0xE75 JUMP JUMPDEST PUSH2 0x1BAB DUP4 DUP11 DUP11 DUP11 DUP10 DUP8 DUP11 DUP9 PUSH2 0x24A2 JUMP JUMPDEST POP SWAP1 SWAP4 POP POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x1C0F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1C5C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1C61 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x1CD8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1C06 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D27 PUSH2 0x1CEB DUP6 PUSH2 0x2689 JUMP JUMPDEST DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x26C4 SWAP3 POP POP POP JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1D3A PUSH2 0xEE7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x1D51 JUMPI POP PUSH1 0x12 SLOAD PUSH1 0xFF AND JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D27 DUP5 DUP5 DUP5 PUSH1 0x0 PUSH2 0x26E8 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1D72 DUP5 DUP7 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x1D27 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1D8A DUP7 PUSH2 0x2723 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x40 MLOAD PUSH4 0x69A933A5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP10 SWAP1 MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP4 ADD MSTORE SWAP3 SWAP4 POP SWAP2 AND SWAP1 PUSH4 0x69A933A5 SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1DFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1B SLOAD PUSH1 0x40 MLOAD PUSH4 0x1A4CA37B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP11 SWAP1 MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x0 SWAP5 POP SWAP1 SWAP2 AND SWAP2 POP PUSH4 0x69328DEC SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E5B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E7F SWAP2 SWAP1 PUSH2 0x48FD JUMP JUMPDEST SWAP1 POP DUP6 DUP2 LT ISZERO PUSH2 0x1EA2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x407559A3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x1D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE PUSH1 0x1C SLOAD PUSH2 0x2710 SWAP1 PUSH2 0x1EC5 SWAP1 DUP9 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x1ECF SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x1E PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE SWAP3 DUP2 ADD DUP10 SWAP1 MSTORE SWAP2 DUP8 AND SWAP2 DUP11 SWAP2 PUSH32 0x2D3BA0FA5BE2EF8CB1EC8920A07A6CBCCC2397B18CA3E70F48EA695500B8F218 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP DUP5 SWAP3 POP SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 DUP1 DUP3 ADD SLOAD DUP4 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0xFF AND LT ISZERO PUSH2 0x1BB3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x618CCA3F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1F8A DUP9 PUSH2 0x1F3B JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP9 AND DUP2 SUB PUSH2 0x1FB2 JUMPI DUP7 SWAP4 POP SWAP2 POP PUSH2 0x1FF7 SWAP1 POP JUMP JUMPDEST DUP7 PUSH1 0x0 SUB PUSH2 0x1FC6 JUMPI DUP7 SWAP4 POP SWAP2 POP PUSH2 0x1FF7 SWAP1 POP JUMP JUMPDEST PUSH2 0x1FF0 DUP10 DUP10 DUP4 DUP11 PUSH2 0x1FEB PUSH1 0x12 DUP9 PUSH1 0x1 ADD PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP13 DUP15 PUSH2 0x275C JUMP JUMPDEST PUSH2 0x27A8 JUMP JUMPDEST SWAP4 POP SWAP4 POP POP POP JUMPDEST SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x200E JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x2035 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A48CA7B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1CD8 DUP4 DUP4 DUP4 PUSH2 0x28E7 JUMP JUMPDEST PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 PUSH2 0x206E PUSH1 0xC0 DUP4 ADD DUP4 PUSH2 0x47DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x207C SWAP3 SWAP2 SWAP1 PUSH2 0x4916 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SUB ISZERO PUSH2 0x21AD JUMPI PUSH1 0x0 DUP1 PUSH2 0x2143 PUSH2 0x20A0 PUSH1 0x80 DUP6 ADD PUSH1 0x60 DUP7 ADD PUSH2 0x3DC6 JUMP JUMPDEST PUSH2 0x2710 GAS PUSH2 0x20AE SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 PUSH4 0xFD614F41 PUSH1 0xE0 SHL DUP13 DUP13 DUP13 DUP13 PUSH2 0x20CA JUMPI PUSH1 0x0 PUSH2 0x20DC JUMP JUMPDEST PUSH2 0x20DC PUSH2 0x120 DUP14 ADD PUSH2 0x100 DUP15 ADD PUSH2 0x3DC6 JUMP JUMPDEST PUSH2 0x20E9 PUSH1 0x20 DUP15 ADD DUP15 PUSH2 0x3D89 JUMP JUMPDEST PUSH2 0x20F6 PUSH1 0xC0 DUP16 ADD DUP16 PUSH2 0x47DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x210C SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4926 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x294A JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP4 ISZERO DUP1 ISZERO PUSH2 0x2153 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x2170 JUMPI PUSH1 0x40 MLOAD PUSH3 0x64CDD3 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP7 PUSH32 0xB1A4AB59FACAEDD6D3A71DA3902E0A1FA5B99750C0E20CD878334378A41CB335 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x21A2 SWAP3 SWAP2 SWAP1 PUSH2 0x4979 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 PUSH2 0x21E8 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC3BCD49 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 DUP1 PUSH2 0x220D DUP5 PUSH2 0x29D4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2223 DUP3 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0x0 ADD MLOAD PUSH2 0x1306 JUMP JUMPDEST SWAP1 POP PUSH2 0x222E DUP2 PUSH2 0x1F3B JUMP JUMPDEST PUSH1 0x2 ADD SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2259 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA13F958F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP1 SWAP5 SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x226F JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2296 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2A38B133 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP3 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2303 SWAP2 SWAP1 PUSH2 0x48FD JUMP JUMPDEST SWAP1 POP PUSH2 0x231A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP7 PUSH2 0x29F3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP4 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2362 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2386 SWAP2 SWAP1 PUSH2 0x48FD JUMP JUMPDEST PUSH2 0x2390 SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST EQ PUSH2 0x23AE JUMPI PUSH1 0x40 MLOAD PUSH4 0xE407735 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 SUB PUSH2 0x23C6 JUMPI POP PUSH1 0x0 PUSH2 0x1915 JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x23E6 JUMPI POP DUP2 PUSH2 0x1915 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x23F1 DUP8 PUSH2 0x1F3B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x242A DUP9 DUP9 DUP9 DUP9 PUSH2 0x1FEB DUP8 PUSH1 0x1 ADD PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP9 PUSH1 0x0 ADD PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP13 DUP13 PUSH2 0x275C JUMP JUMPDEST POP SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0xFF AND DUP5 PUSH1 0xFF AND SUB PUSH2 0x244D JUMPI POP DUP1 PUSH2 0x1BB3 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0xFF AND DUP6 PUSH1 0xFF AND LT ISZERO PUSH2 0x2483 JUMPI PUSH2 0x2467 DUP6 DUP6 PUSH2 0x4994 JUMP JUMPDEST PUSH2 0x2472 SWAP1 PUSH1 0xA PUSH2 0x4A91 JUMP JUMPDEST PUSH2 0x247C SWAP1 DUP5 PUSH2 0x48E6 JUMP JUMPDEST SWAP1 POP PUSH2 0x1D27 JUMP JUMPDEST PUSH2 0x248D DUP5 DUP7 PUSH2 0x4994 JUMP JUMPDEST PUSH2 0x2498 SWAP1 PUSH1 0xA PUSH2 0x4A91 JUMP JUMPDEST PUSH2 0x1915 SWAP1 DUP5 PUSH2 0x4892 JUMP JUMPDEST PUSH2 0x120 DUP8 ADD MLOAD DUP1 ISZERO PUSH2 0x2514 JUMPI DUP2 PUSH2 0x2514 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2770A7EB PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x9DC29FAC SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x250F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x3 DUP5 DUP14 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2538 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4AA0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE PUSH1 0x20 DUP1 SLOAD PUSH4 0x9FA92F9D PUSH1 0xE0 SHL DUP6 MSTORE SWAP3 MLOAD SWAP2 SWAP5 POP PUSH1 0x0 SWAP4 DUP5 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 PUSH4 0x9FA92F9D SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2592 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x25B6 SWAP2 SWAP1 PUSH2 0x4ADF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFA31DE01 DUP13 PUSH1 0x20 ADD MLOAD DUP11 DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x25E9 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4AFC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2608 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2630 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x4B21 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 DUP12 PUSH2 0x160 ADD MLOAD DUP14 PUSH32 0xED8E6BA697DD65259E5CE532AC08FF06D1A3607BCEC58F8F0937FE36A5666C54 DUP15 DUP15 DUP15 DUP13 DUP9 PUSH1 0x40 MLOAD PUSH2 0x2673 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4BA3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x3C DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x5C ADD PUSH2 0xF28 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x26D3 DUP6 DUP6 PUSH2 0x2A2B JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x26E0 DUP2 PUSH2 0x2A70 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP5 AND SUB PUSH2 0x2707 JUMPI POP DUP3 PUSH2 0x1D27 JUMP JUMPDEST PUSH2 0x2710 DUP6 PUSH2 0x1F3B JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x272F DUP4 PUSH2 0x1F3B JUMP JUMPDEST PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 PUSH2 0x38B JUMPI PUSH1 0x40 MLOAD PUSH4 0x558A507 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 SUB PUSH2 0x276E JUMPI POP PUSH1 0x0 PUSH2 0x1D27 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2710 PUSH2 0x277D DUP5 DUP3 PUSH2 0x4869 JUMP JUMPDEST PUSH2 0x2787 SWAP1 DUP7 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x2791 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST SWAP1 POP PUSH2 0x279E DUP7 DUP7 DUP4 PUSH2 0x2437 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 PUSH2 0x27C3 DUP2 PUSH2 0x2BBD JUMP JUMPDEST ISZERO PUSH2 0x27F5 JUMPI PUSH2 0x27E9 PUSH2 0x27D5 DUP11 DUP11 PUSH2 0x2BDA JUMP JUMPDEST PUSH2 0x27DF DUP12 DUP11 PUSH2 0x2BDA JUMP JUMPDEST DUP4 SWAP2 SWAP1 DUP10 DUP10 PUSH2 0x2C5A JUMP JUMPDEST DUP8 SWAP4 POP SWAP4 POP POP POP PUSH2 0x1FF7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2800 DUP11 PUSH2 0x1F3B JUMP JUMPDEST PUSH1 0x2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 POP DUP10 SWAP1 PUSH2 0x2821 SWAP1 DUP3 AND DUP4 PUSH1 0x0 PUSH2 0x2F63 JUMP JUMPDEST PUSH2 0x2835 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP4 DUP11 PUSH2 0x3078 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH4 0xD460F0A2 DUP10 DUP13 DUP13 DUP12 PUSH2 0x2854 PUSH2 0xE10 TIMESTAMP PUSH2 0x48BA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x28B5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x28D9 SWAP2 SWAP1 PUSH2 0x48FD JUMP JUMPDEST DUP10 SWAP6 POP SWAP6 POP POP POP POP POP PUSH2 0x1FF7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1CD8 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x312A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH2 0xFFFF AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x296F JUMPI PUSH2 0x296F PUSH2 0x4073 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2999 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP8 MLOAD PUSH1 0x20 DUP10 ADD DUP12 DUP15 DUP15 CALL SWAP2 POP RETURNDATASIZE SWAP3 POP DUP7 DUP4 GT ISZERO PUSH2 0x29BA JUMPI DUP7 SWAP3 POP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x38B DUP3 PUSH1 0x0 PUSH2 0x31FC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x23AE SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD PUSH2 0x2913 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD PUSH1 0x41 SUB PUSH2 0x2A61 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x0 BYTE PUSH2 0x2A55 DUP8 DUP3 DUP6 DUP6 PUSH2 0x32F4 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP POP POP PUSH2 0x2A69 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 POP PUSH1 0x2 JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x2A84 JUMPI PUSH2 0x2A84 PUSH2 0x3FDB JUMP JUMPDEST SUB PUSH2 0x2A8C JUMPI POP JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x2AA0 JUMPI PUSH2 0x2AA0 PUSH2 0x3FDB JUMP JUMPDEST SUB PUSH2 0x2AED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x2B01 JUMPI PUSH2 0x2B01 PUSH2 0x3FDB JUMP JUMPDEST SUB PUSH2 0x2B4E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x2B62 JUMPI PUSH2 0x2B62 PUSH2 0x3FDB JUMP JUMPDEST SUB PUSH2 0x2BBA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1C06 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0xC DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x38B JUMPI POP POP PUSH1 0x8 ADD SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD DUP7 DUP6 MSTORE PUSH1 0x18 SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 PUSH1 0x8 ADD DUP1 SLOAD DUP5 SWAP4 PUSH1 0xFF AND SWAP3 SWAP2 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x2C27 JUMPI PUSH2 0x2C27 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1D27 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54E4429 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x2CA2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x191A5CD8589B1959081C1BDBDB PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST DUP6 PUSH1 0xA ADD DUP6 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2CBA JUMPI PUSH2 0x2CBA PUSH2 0x4820 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP4 GT ISZERO PUSH2 0x2D0D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x6D6F7265207468616E20706F6F6C2062616C616E6365 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP9 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2D60 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x2D4C JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x2D74 DUP10 DUP10 DUP10 DUP10 DUP6 PUSH2 0x33B5 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP DUP5 DUP4 LT ISZERO PUSH2 0x2DB6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x6479203C206D696E4479 PUSH1 0xB0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x0 DUP10 PUSH1 0x9 ADD DUP9 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2DD0 JUMPI PUSH2 0x2DD0 PUSH2 0x4820 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH5 0x2540BE400 DUP12 PUSH1 0x6 ADD SLOAD DUP6 PUSH2 0x2DF1 SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x2DFB SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST PUSH2 0x2E05 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST SWAP1 POP DUP7 DUP3 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x2E1D JUMPI PUSH2 0x2E1D PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2E2F SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2E47 JUMPI PUSH2 0x2E47 PUSH2 0x4820 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP1 DUP5 DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x2E6C JUMPI PUSH2 0x2E6C PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2E7E SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST PUSH2 0x2E88 SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2EA0 JUMPI PUSH2 0x2EA0 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE DUP1 ISZERO PUSH2 0x2F05 JUMPI DUP1 DUP11 PUSH1 0xB ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2ECB JUMPI PUSH2 0x2ECB PUSH2 0x4820 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x2EE0 SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST DUP11 PUSH1 0xB ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2EF8 JUMPI PUSH2 0x2EF8 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE JUMPDEST DUP10 SLOAD PUSH1 0x40 DUP1 MLOAD DUP10 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0xFF DUP13 DUP2 AND DUP3 DUP5 ADD MSTORE DUP12 AND PUSH1 0x60 DUP3 ADD MSTORE SWAP1 MLOAD CALLER SWAP3 SWAP2 PUSH32 0x28D4CF2D5709DA3B474B5F05CFD7083FAFFD601F9500D1F8439B8A13EC7DF320 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP SWAP2 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x2FDD JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2FB7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FDB SWAP2 SWAP1 PUSH2 0x48FD JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x3048 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH22 0x20746F206E6F6E2D7A65726F20616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1CD8 SWAP1 DUP5 SWAP1 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x2913 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP4 SWAP2 DUP7 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x30C9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x30ED SWAP2 SWAP1 PUSH2 0x48FD JUMP JUMPDEST PUSH2 0x30F7 SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH2 0x23AE SWAP1 DUP6 SWAP1 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x2913 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x317F DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x357B SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1CD8 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x319D SWAP2 SWAP1 PUSH2 0x4BF2 JUMP JUMPDEST PUSH2 0x1CD8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x3239 JUMPI SWAP1 POP PUSH2 0x38B JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 DUP4 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD PUSH4 0xFFFFFFFF AND DUP1 DUP5 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ISZERO PUSH2 0x3284 JUMPI SWAP1 POP PUSH2 0x38B JUMP JUMPDEST PUSH2 0x328E DUP5 DUP5 PUSH2 0x358A JUMP JUMPDEST ISZERO PUSH2 0x32B4 JUMPI PUSH1 0x4 DUP4 ADD SLOAD PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x1BB3 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 DUP4 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE PUSH1 0x1 ADD SLOAD SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP4 GT ISZERO PUSH2 0x332B JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x3 PUSH2 0x1F32 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x337F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x33A8 JUMPI PUSH1 0x0 PUSH1 0x1 SWAP3 POP SWAP3 POP POP PUSH2 0x1F32 JUMP JUMPDEST SWAP7 PUSH1 0x0 SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP8 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3408 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x33F4 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x341B DUP6 DUP4 PUSH2 0x35C9 JUMP JUMPDEST SWAP1 POP DUP1 MLOAD DUP9 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x3433 JUMPI POP DUP1 MLOAD DUP8 PUSH1 0xFF AND LT JUMPDEST PUSH2 0x3474 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x696E646578206F7574206F662072616E6765 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x348B JUMPI PUSH2 0x348B PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x34A8 JUMPI PUSH2 0x34A8 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH2 0x34BB SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x34C5 SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x34DE PUSH2 0x34D5 DUP13 PUSH2 0x36D3 JUMP JUMPDEST DUP12 DUP12 DUP6 DUP8 PUSH2 0x36DE JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 DUP5 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x34F8 JUMPI PUSH2 0x34F8 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x350A SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST PUSH2 0x3514 SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST SWAP6 POP PUSH5 0x2540BE400 DUP12 PUSH1 0x5 ADD SLOAD DUP8 PUSH2 0x352C SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3536 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST SWAP5 POP DUP4 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x354D JUMPI PUSH2 0x354D PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP8 PUSH2 0x3561 SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST PUSH2 0x356B SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST SWAP6 POP POP POP POP POP SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1D27 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x3945 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND ISZERO PUSH2 0x35B8 JUMPI POP PUSH1 0x0 PUSH2 0x38B JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH1 0x60 SWAP2 SWAP1 DUP2 EQ PUSH2 0x3616 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x6D69736D61746368206D756C7469706C69657273 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3630 JUMPI PUSH2 0x3630 PUSH2 0x4073 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3659 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x36CA JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3679 JUMPI PUSH2 0x3679 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3693 JUMPI PUSH2 0x3693 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x36A5 SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x36B7 JUMPI PUSH2 0x36B7 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x365F JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x38B DUP3 PUSH2 0x3A20 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF DUP1 DUP7 AND SWAP1 DUP8 AND SUB PUSH2 0x3738 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x636F6D7061726520746F6B656E20746F20697473656C66000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST DUP1 DUP7 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x374C JUMPI POP DUP1 DUP6 PUSH1 0xFF AND LT JUMPDEST PUSH2 0x378A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1D1BDAD95B881B9BDD08199BDD5B99 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3796 DUP5 DUP10 PUSH2 0x3A69 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 DUP1 PUSH2 0x37A6 DUP12 DUP7 PUSH2 0x48E6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x382D JUMPI DUP12 PUSH1 0xFF AND DUP2 SUB PUSH2 0x37C6 JUMPI DUP10 SWAP2 POP PUSH2 0x37F9 JUMP JUMPDEST DUP11 PUSH1 0xFF AND DUP2 EQ PUSH2 0x37F1 JUMPI DUP9 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x37E2 JUMPI PUSH2 0x37E2 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP2 POP PUSH2 0x37F9 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x37AC JUMP JUMPDEST PUSH2 0x3803 DUP3 DUP6 PUSH2 0x48BA JUMP JUMPDEST SWAP4 POP PUSH2 0x380F DUP8 DUP4 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3819 DUP8 DUP8 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3823 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST SWAP5 POP PUSH1 0x1 ADD PUSH2 0x37AC JUMP JUMPDEST POP PUSH2 0x3838 DUP7 DUP4 PUSH2 0x48E6 JUMP JUMPDEST PUSH1 0x64 PUSH2 0x3844 DUP8 DUP8 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x384E SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3858 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST SWAP4 POP PUSH1 0x0 DUP3 PUSH2 0x3868 PUSH1 0x64 DUP9 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3872 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST PUSH2 0x387C SWAP1 DUP6 PUSH2 0x48BA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP7 DUP2 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x38FC JUMPI DUP2 SWAP3 POP DUP9 DUP5 DUP4 PUSH1 0x2 PUSH2 0x389F SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x38A9 SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST PUSH2 0x38B3 SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST DUP9 PUSH2 0x38BE DUP5 DUP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x38C8 SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST PUSH2 0x38D2 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST SWAP2 POP PUSH2 0x38DE DUP3 DUP5 PUSH2 0x3C16 JUMP JUMPDEST ISZERO PUSH2 0x38F4 JUMPI POP SWAP9 POP PUSH2 0x1915 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x3883 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x417070726F78696D6174696F6E20646964206E6F7420636F6E76657267650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x39A6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x39C2 SWAP2 SWAP1 PUSH2 0x4C0F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x39FF JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3A04 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x3A15 DUP8 DUP4 DUP4 DUP8 PUSH2 0x3C2C JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x2 DUP3 ADD SLOAD PUSH1 0x1 DUP4 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP1 DUP4 EQ DUP1 ISZERO SWAP1 PUSH2 0x3A41 JUMPI POP DUP2 TIMESTAMP LT JUMPDEST ISZERO PUSH2 0x3A62 JUMPI PUSH1 0x0 DUP5 PUSH1 0x3 ADD SLOAD SWAP1 POP DUP1 DUP4 SUB DUP2 TIMESTAMP SUB DUP6 MUL TIMESTAMP DUP6 SUB DUP5 MUL ADD DIV SWAP4 POP POP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP2 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3AA8 JUMPI DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3A8B JUMPI PUSH2 0x3A8B PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH2 0x3A9E SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x3A71 JUMP JUMPDEST POP DUP1 PUSH1 0x0 SUB PUSH2 0x3ABC JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x38B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 PUSH2 0x3ACA DUP6 DUP9 PUSH2 0x48E6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x3BD7 JUMPI DUP3 PUSH1 0x0 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0x3B28 JUMPI DUP8 DUP12 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3AF8 JUMPI PUSH2 0x3AF8 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3B0A SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3B14 DUP7 DUP5 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3B1E SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x3ADD JUMP JUMPDEST POP DUP4 SWAP5 POP DUP1 DUP8 PUSH1 0x1 PUSH2 0x3B3A SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST PUSH2 0x3B44 SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH1 0x64 DUP6 PUSH2 0x3B51 DUP3 DUP8 PUSH2 0x4869 JUMP JUMPDEST PUSH2 0x3B5B SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3B65 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST PUSH2 0x3B6F SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST DUP5 PUSH2 0x3B7A DUP10 DUP5 PUSH2 0x48E6 JUMP JUMPDEST PUSH1 0x64 PUSH2 0x3B86 DUP11 DUP9 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3B90 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST PUSH2 0x3B9A SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST PUSH2 0x3BA4 SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3BAE SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST SWAP4 POP PUSH2 0x3BBA DUP5 DUP7 PUSH2 0x3C16 JUMP JUMPDEST ISZERO PUSH2 0x3BCE JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x38B JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x3ACF JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x4420646F6573206E6F7420636F6E7665726765 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH2 0x3C24 DUP5 DUP5 PUSH2 0x3CA5 JUMP JUMPDEST LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x3C9B JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x3C94 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x3C94 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST POP DUP2 PUSH2 0x1D27 JUMP JUMPDEST PUSH2 0x1D27 DUP4 DUP4 PUSH2 0x3CCA JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 GT ISZERO PUSH2 0x3CC0 JUMPI PUSH2 0x3CB9 DUP3 DUP5 PUSH2 0x4869 JUMP JUMPDEST SWAP1 POP PUSH2 0x38B JUMP JUMPDEST PUSH2 0x1BB3 DUP4 DUP4 PUSH2 0x4869 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x3CDA JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1C06 SWAP2 SWAP1 PUSH2 0x4C21 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x3D47 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x3D47 JUMPI DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 CALLDATALOAD AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x3D14 JUMP JUMPDEST POP PUSH2 0x3D53 SWAP3 SWAP2 POP PUSH2 0x3D57 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x3D53 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3D58 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2BBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x21E8 DUP2 PUSH2 0x3D6C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3D9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1BB3 DUP2 PUSH2 0x3D6C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2BBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x21E8 DUP2 PUSH2 0x3DA6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3DD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1BB3 DUP2 PUSH2 0x3DA6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3DF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3E3D JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x3E18 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3E5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3E75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3E8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3E97 DUP6 DUP3 DUP7 ADD PUSH2 0x3E49 JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3EB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3ECE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0xA0 DUP2 DUP6 SUB SLT ISZERO PUSH2 0x1BB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xE0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x3EFC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x3F07 DUP2 PUSH2 0x3D6C JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x3F17 DUP2 PUSH2 0x3DA6 JUMP JUMPDEST SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x3F27 DUP2 PUSH2 0x3DA6 JUMP JUMPDEST SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0x3F37 DUP2 PUSH2 0x3DA6 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD SWAP4 POP PUSH1 0xA0 DUP10 ADD CALLDATALOAD SWAP3 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x3F61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP12 ADD SWAP2 POP DUP12 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3F75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x3F84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP13 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3F96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3FC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3FCD DUP2 PUSH2 0x3D6C JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x4 DUP2 LT PUSH2 0x2BBA JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x401C DUP4 PUSH2 0x3FF1 JUMP JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4034 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x404A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D27 DUP5 DUP3 DUP6 ADD PUSH2 0x3E49 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4068 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1BB3 DUP2 PUSH2 0x3D6C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1A0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x40AC JUMPI PUSH2 0x40AC PUSH2 0x4073 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x40DA JUMPI PUSH2 0x40DA PUSH2 0x4073 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2BBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x21E8 DUP2 PUSH2 0x40E2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x4114 JUMPI PUSH2 0x4114 PUSH2 0x4073 JUMP JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4133 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4146 PUSH2 0x4141 DUP3 PUSH2 0x40FB JUMP JUMPDEST PUSH2 0x40B2 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x415B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 CALLDATASIZE SUB SLT ISZERO PUSH2 0x418B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4193 PUSH2 0x4089 JUMP JUMPDEST PUSH2 0x419C DUP4 PUSH2 0x3D7E JUMP JUMPDEST DUP2 MSTORE PUSH2 0x41AA PUSH1 0x20 DUP5 ADD PUSH2 0x3D7E JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x41BB PUSH1 0x40 DUP5 ADD PUSH2 0x3D7E JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x41CC PUSH1 0x60 DUP5 ADD PUSH2 0x3DBB JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x41DD PUSH1 0x80 DUP5 ADD PUSH2 0x3DBB JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x41EE PUSH1 0xA0 DUP5 ADD PUSH2 0x40F0 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x420C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4218 CALLDATASIZE DUP3 DUP7 ADD PUSH2 0x4122 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 DUP4 ADD CALLDATALOAD PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x4236 DUP2 DUP6 ADD PUSH2 0x3DBB JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 DUP4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x140 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x160 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x180 SWAP3 DUP4 ADD CALLDATALOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x19E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x4284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x42A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x42C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x2A69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 DUP3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x4313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4332 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x5 SHL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x2A69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x4382 JUMPI DUP2 CALLDATALOAD PUSH2 0x4367 DUP2 PUSH2 0x3DA6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4354 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP6 ADD DUP1 DUP2 SWAP7 POP DUP6 PUSH1 0x5 SHL DUP2 ADD SWAP2 POP DUP5 PUSH1 0x0 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0x43DD JUMPI DUP3 DUP5 SUB DUP10 MSTORE PUSH2 0x43BE DUP3 DUP9 PUSH2 0x428E JUMP JUMPDEST PUSH2 0x43C9 DUP7 DUP3 DUP5 PUSH2 0x42D3 JUMP JUMPDEST SWAP11 DUP8 ADD SWAP11 SWAP6 POP POP POP SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x43A7 JUMP JUMPDEST POP SWAP2 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 MSTORE PUSH1 0x0 PUSH2 0x120 DUP7 CALLDATALOAD PUSH2 0x19E NOT DUP9 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x4408 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xA0 PUSH1 0x80 DUP6 ADD MSTORE DUP8 ADD PUSH2 0x442A DUP3 DUP6 ADD PUSH2 0x4420 DUP4 PUSH2 0x3D7E JUMP JUMPDEST PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x4436 PUSH1 0x20 DUP3 ADD PUSH2 0x3D7E JUMP JUMPDEST PUSH2 0x140 PUSH2 0x444A DUP2 DUP8 ADD DUP4 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x4456 PUSH1 0x40 DUP5 ADD PUSH2 0x3D7E JUMP JUMPDEST SWAP2 POP PUSH2 0x160 PUSH2 0x446C DUP2 DUP9 ADD DUP5 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x4478 PUSH1 0x60 DUP6 ADD PUSH2 0x3DBB JUMP JUMPDEST SWAP3 POP PUSH2 0x180 PUSH2 0x4491 DUP2 DUP10 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x449D PUSH1 0x80 DUP7 ADD PUSH2 0x3DBB JUMP JUMPDEST SWAP4 POP PUSH2 0x1A0 PUSH2 0x44B6 DUP2 DUP11 ADD DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x44C2 PUSH1 0xA0 DUP8 ADD PUSH2 0x40F0 JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x1C0 DUP12 ADD MSTORE SWAP5 POP PUSH2 0x44DA PUSH1 0xC0 DUP8 ADD DUP8 PUSH2 0x428E JUMP JUMPDEST SWAP6 POP DUP2 PUSH2 0x1E0 DUP12 ADD MSTORE PUSH2 0x44F2 PUSH2 0x2C0 DUP12 ADD DUP8 DUP4 PUSH2 0x42D3 JUMP JUMPDEST SWAP6 POP POP POP PUSH1 0xE0 DUP6 ADD CALLDATALOAD PUSH2 0x200 DUP10 ADD MSTORE PUSH2 0x100 PUSH2 0x450F DUP2 DUP8 ADD PUSH2 0x3DBB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x220 DUP11 ADD MSTORE DUP6 DUP8 ADD CALLDATALOAD PUSH2 0x240 DUP11 ADD MSTORE DUP4 DUP7 ADD CALLDATALOAD PUSH2 0x260 DUP11 ADD MSTORE DUP3 DUP7 ADD CALLDATALOAD PUSH2 0x280 DUP11 ADD MSTORE DUP2 DUP7 ADD CALLDATALOAD PUSH2 0x2A0 DUP11 ADD MSTORE PUSH2 0x4553 PUSH1 0x20 DUP15 ADD DUP15 PUSH2 0x42FC JUMP JUMPDEST SWAP8 POP SWAP6 POP PUSH1 0x7F NOT SWAP4 POP DUP4 DUP10 DUP7 SUB ADD PUSH1 0xA0 DUP11 ADD MSTORE PUSH2 0x4571 DUP6 DUP9 DUP9 PUSH2 0x4344 JUMP JUMPDEST SWAP7 POP PUSH2 0x4580 PUSH1 0x40 DUP15 ADD DUP15 PUSH2 0x42FC JUMP JUMPDEST SWAP7 POP SWAP5 POP DUP4 DUP10 DUP9 SUB ADD PUSH1 0xC0 DUP11 ADD MSTORE PUSH2 0x4599 DUP8 DUP8 DUP8 PUSH2 0x438D JUMP JUMPDEST SWAP7 POP PUSH2 0x45A7 PUSH1 0x60 DUP15 ADD PUSH2 0x3DBB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0xE0 DUP12 ADD MSTORE SWAP6 POP PUSH2 0x45C5 PUSH1 0x80 DUP15 ADD DUP15 PUSH2 0x428E JUMP JUMPDEST SWAP7 POP SWAP5 POP DUP4 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE POP POP POP POP PUSH2 0x45E1 DUP4 DUP4 DUP4 PUSH2 0x42D3 JUMP JUMPDEST SWAP4 POP POP POP POP PUSH2 0x45FB PUSH1 0x20 DUP4 ADD DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1915 PUSH1 0x60 DUP4 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4631 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4619 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x4652 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x4616 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH4 0xFFFFFFFF AND DUP3 MSTORE PUSH1 0x0 PUSH2 0x1A0 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x468C PUSH1 0x20 DUP7 ADD DUP3 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x46A4 PUSH1 0x40 DUP7 ADD DUP3 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x46BF PUSH1 0x60 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x46DA PUSH1 0x80 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x46EE PUSH1 0xA0 DUP7 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD DUP2 PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x4706 DUP3 DUP7 ADD DUP3 PUSH2 0x463A JUMP JUMPDEST SWAP2 POP POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD MLOAD PUSH2 0x472E DUP3 DUP8 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP POP PUSH2 0x120 DUP4 DUP2 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x140 DUP1 DUP5 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x160 DUP1 DUP5 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x180 SWAP3 DUP4 ADD MLOAD SWAP3 SWAP1 SWAP4 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1BB3 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4666 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x478E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x47A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP PUSH1 0x5 DUP2 SWAP1 SHL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x2A69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1915 PUSH1 0x40 DUP4 ADD DUP5 DUP7 PUSH2 0x4344 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x47F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x480B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x2A69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4848 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1BB3 DUP2 PUSH2 0x40E2 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x38B JUMPI PUSH2 0x38B PUSH2 0x4853 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x48A1 JUMPI PUSH2 0x48A1 PUSH2 0x487C JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x48B5 JUMPI PUSH2 0x48B5 PUSH2 0x487C JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x38B JUMPI PUSH2 0x38B PUSH2 0x4853 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x48DF JUMPI PUSH2 0x48DF PUSH2 0x4853 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x38B JUMPI PUSH2 0x38B PUSH2 0x4853 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x490F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST DUP8 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x40 DUP4 ADD MSTORE DUP6 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH4 0xFFFFFFFF DUP5 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x496C SWAP1 DUP4 ADD DUP5 DUP7 PUSH2 0x42D3 JUMP JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1D27 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x463A JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x38B JUMPI PUSH2 0x38B PUSH2 0x4853 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x49E8 JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x49CE JUMPI PUSH2 0x49CE PUSH2 0x4853 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x49DB JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x49B2 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x49FF JUMPI POP PUSH1 0x1 PUSH2 0x38B JUMP JUMPDEST DUP2 PUSH2 0x4A0C JUMPI POP PUSH1 0x0 PUSH2 0x38B JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x4A22 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x4A2C JUMPI PUSH2 0x4A48 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x38B JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x4A3D JUMPI PUSH2 0x4A3D PUSH2 0x4853 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x38B JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x4A6B JUMPI POP DUP2 DUP2 EXP PUSH2 0x38B JUMP JUMPDEST PUSH2 0x4A75 DUP4 DUP4 PUSH2 0x49AD JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x4A89 JUMPI PUSH2 0x4A89 PUSH2 0x4853 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1BB3 PUSH1 0xFF DUP5 AND DUP4 PUSH2 0x49F0 JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP7 PUSH1 0xE0 SHL AND DUP2 MSTORE DUP5 PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x4ABE DUP5 PUSH2 0x3FF1 JUMP JUMPDEST PUSH1 0xF8 SWAP4 SWAP1 SWAP4 SHL PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x25 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x45 DUP3 ADD MSTORE PUSH1 0x65 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4AF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1BB3 DUP2 PUSH2 0x3DA6 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP5 AND DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1915 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x463A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4B34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD SWAP2 POP PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4B51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x1F DUP2 ADD DUP6 SGT PUSH2 0x4B62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x4B70 PUSH2 0x4141 DUP3 PUSH2 0x40FB JUMP JUMPDEST DUP2 DUP2 MSTORE DUP7 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x4B85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4B96 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x4616 JUMP JUMPDEST DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0xA0 DUP2 MSTORE PUSH1 0x0 PUSH2 0x4BB6 PUSH1 0xA0 DUP4 ADD DUP9 PUSH2 0x4666 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD DUP8 SWAP1 MSTORE DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x4BE6 DUP2 DUP6 PUSH2 0x463A JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4C04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1BB3 DUP2 PUSH2 0x40E2 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x4284 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x4616 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1BB3 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x463A JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE4 0x26 CALLDATACOPY 0xB2 PUSH12 0xA9D67DE61A02BDC6D0E8D841 0xFC 0xB6 0xA6 0xC6 SWAP3 SWAP12 LOG1 0xC1 SLT 0xD2 DUP16 SDIV 0xBA 0xE8 REVERT PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"1262:38611:69:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_bumpTransfer_14896":{"entryPoint":3701,"id":14896,"parameterSlots":1,"returnSlots":0},"@_calculateSwap_31965":{"entryPoint":13237,"id":31965,"parameterSlots":5,"returnSlots":2},"@_calculateTransferId_13998":{"entryPoint":3861,"id":13998,"parameterSlots":1,"returnSlots":1},"@_callOptionalReturn_11153":{"entryPoint":12586,"id":11153,"parameterSlots":2,"returnSlots":0},"@_executeCalldata_15913":{"entryPoint":8256,"id":15913,"parameterSlots":5,"returnSlots":0},"@_executePortalTransfer_16007":{"entryPoint":7548,"id":16007,"parameterSlots":4,"returnSlots":2},"@_executeSanityChecks_15460":{"entryPoint":3909,"id":15460,"parameterSlots":1,"returnSlots":2},"@_getAPrecise_27444":{"entryPoint":14880,"id":27444,"parameterSlots":1,"returnSlots":1},"@_getAPrecise_30831":{"entryPoint":14035,"id":30831,"parameterSlots":1,"returnSlots":1},"@_getAdoptedAsset_13962":{"entryPoint":10019,"id":13962,"parameterSlots":1,"returnSlots":1},"@_getApprovedCanonicalId_14145":{"entryPoint":8685,"id":14145,"parameterSlots":1,"returnSlots":2},"@_getCanonicalTokenId_14054":{"entryPoint":10708,"id":14054,"parameterSlots":1,"returnSlots":1},"@_getLocalAsset_14039":{"entryPoint":7510,"id":14039,"parameterSlots":3,"returnSlots":1},"@_handleExecuteLiquidity_15793":{"entryPoint":4936,"id":15793,"parameterSlots":4,"returnSlots":3},"@_handleExecuteTransaction_15832":{"entryPoint":6357,"id":15832,"parameterSlots":5,"returnSlots":1},"@_isRouterAllowlistRemoved_13932":{"entryPoint":7471,"id":13932,"parameterSlots":0,"returnSlots":1},"@_muldiv_15480":{"entryPoint":7525,"id":15480,"parameterSlots":3,"returnSlots":1},"@_mustHaveRemote_16126":{"entryPoint":8628,"id":16126,"parameterSlots":1,"returnSlots":1},"@_recoverSignature_15275":{"entryPoint":7389,"id":15275,"parameterSlots":3,"returnSlots":1},"@_revert_11483":{"entryPoint":15562,"id":11483,"parameterSlots":2,"returnSlots":0},"@_sendMessageAndEmit_16099":{"entryPoint":9378,"id":16099,"parameterSlots":8,"returnSlots":0},"@_swapAsset_28131":{"entryPoint":10152,"id":28131,"parameterSlots":5,"returnSlots":2},"@_throwError_11869":{"entryPoint":10864,"id":11869,"parameterSlots":1,"returnSlots":0},"@_xcall_15255":{"entryPoint":6430,"id":15255,"parameterSlots":3,"returnSlots":1},"@_xp_31527":{"entryPoint":13769,"id":31527,"parameterSlots":2,"returnSlots":1},"@addSequencer_14512":{"entryPoint":2457,"id":14512,"parameterSlots":1,"returnSlots":0},"@addressToBytes32_50168":{"entryPoint":null,"id":50168,"parameterSlots":1,"returnSlots":1},"@approvedSequencers_14459":{"entryPoint":null,"id":14459,"parameterSlots":1,"returnSlots":1},"@bumpTransfer_14856":{"entryPoint":1021,"id":14856,"parameterSlots":1,"returnSlots":0},"@bytes32ToAddress_50187":{"entryPoint":null,"id":50187,"parameterSlots":1,"returnSlots":1},"@calculateCanonicalHash_28598":{"entryPoint":4870,"id":28598,"parameterSlots":2,"returnSlots":1},"@calculateSlippageBoundary_28640":{"entryPoint":10076,"id":28640,"parameterSlots":4,"returnSlots":1},"@connextStorage_29544":{"entryPoint":null,"id":29544,"parameterSlots":0,"returnSlots":1},"@contractOwner_29645":{"entryPoint":3815,"id":29645,"parameterSlots":0,"returnSlots":1},"@diamondStorage_29603":{"entryPoint":null,"id":29603,"parameterSlots":0,"returnSlots":1},"@difference_30644":{"entryPoint":15525,"id":30644,"parameterSlots":2,"returnSlots":1},"@domain_14437":{"entryPoint":null,"id":14437,"parameterSlots":0,"returnSlots":1},"@enrollRemoteRouter_14633":{"entryPoint":3210,"id":14633,"parameterSlots":2,"returnSlots":0},"@excessivelySafeCall_50045":{"entryPoint":10570,"id":50045,"parameterSlots":5,"returnSlots":2},"@execute_14833":{"entryPoint":1762,"id":14833,"parameterSlots":1,"returnSlots":1},"@exists_34243":{"entryPoint":11197,"id":34243,"parameterSlots":1,"returnSlots":1},"@forceReceiveLocal_14986":{"entryPoint":3496,"id":14986,"parameterSlots":1,"returnSlots":0},"@forceUpdateSlippage_14947":{"entryPoint":1504,"id":14947,"parameterSlots":2,"returnSlots":0},"@functionCallWithValue_11308":{"entryPoint":14661,"id":11308,"parameterSlots":4,"returnSlots":1},"@functionCall_11244":{"entryPoint":13691,"id":11244,"parameterSlots":3,"returnSlots":1},"@getCanonicalTokenId_28517":{"entryPoint":12796,"id":28517,"parameterSlots":2,"returnSlots":1},"@getConfig_27701":{"entryPoint":7995,"id":27701,"parameterSlots":1,"returnSlots":1},"@getD_31463":{"entryPoint":14953,"id":31463,"parameterSlots":2,"returnSlots":1},"@getLocalAsset_28579":{"entryPoint":9960,"id":28579,"parameterSlots":4,"returnSlots":1},"@getTokenIndexFromStableSwapPool_27854":{"entryPoint":11226,"id":27854,"parameterSlots":2,"returnSlots":1},"@getY_31801":{"entryPoint":14046,"id":31801,"parameterSlots":5,"returnSlots":1},"@handleIncomingAsset_27772":{"entryPoint":8803,"id":27772,"parameterSlots":2,"returnSlots":0},"@handleOutgoingAsset_27809":{"entryPoint":8193,"id":27809,"parameterSlots":3,"returnSlots":0},"@isContract_11172":{"entryPoint":null,"id":11172,"parameterSlots":1,"returnSlots":1},"@isLocalOrigin_28546":{"entryPoint":13706,"id":28546,"parameterSlots":2,"returnSlots":1},"@nonce_14446":{"entryPoint":null,"id":14446,"parameterSlots":0,"returnSlots":1},"@normalizeDecimals_28695":{"entryPoint":9271,"id":28695,"parameterSlots":3,"returnSlots":1},"@recover_11942":{"entryPoint":9924,"id":11942,"parameterSlots":2,"returnSlots":1},"@remote_14428":{"entryPoint":884,"id":14428,"parameterSlots":1,"returnSlots":1},"@removeSequencer_14542":{"entryPoint":2209,"id":14542,"parameterSlots":1,"returnSlots":0},"@routedTransfers_14398":{"entryPoint":913,"id":14398,"parameterSlots":1,"returnSlots":1},"@safeApprove_10975":{"entryPoint":12131,"id":10975,"parameterSlots":3,"returnSlots":0},"@safeIncreaseAllowance_11011":{"entryPoint":12408,"id":11011,"parameterSlots":3,"returnSlots":0},"@safeTransferFrom_10931":{"entryPoint":10739,"id":10931,"parameterSlots":4,"returnSlots":0},"@safeTransfer_10905":{"entryPoint":10471,"id":10905,"parameterSlots":3,"returnSlots":0},"@sendValue_11206":{"entryPoint":7098,"id":11206,"parameterSlots":2,"returnSlots":0},"@setXAppConnectionManager_14581":{"entryPoint":1155,"id":14581,"parameterSlots":1,"returnSlots":0},"@swapFromLocalAssetIfNeeded_27975":{"entryPoint":8060,"id":27975,"parameterSlots":5,"returnSlots":2},"@swapInternal_32875":{"entryPoint":11354,"id":32875,"parameterSlots":5,"returnSlots":1},"@swapToLocalAssetIfNeeded_27911":{"entryPoint":9140,"id":27911,"parameterSlots":5,"returnSlots":1},"@toEthSignedMessageHash_12133":{"entryPoint":9865,"id":12133,"parameterSlots":1,"returnSlots":1},"@transferStatus_14412":{"entryPoint":null,"id":14412,"parameterSlots":1,"returnSlots":1},"@tryRecover_11915":{"entryPoint":10795,"id":11915,"parameterSlots":2,"returnSlots":2},"@tryRecover_12083":{"entryPoint":13044,"id":12083,"parameterSlots":4,"returnSlots":2},"@verifyCallResultFromTarget_11439":{"entryPoint":15404,"id":11439,"parameterSlots":4,"returnSlots":1},"@within1_30620":{"entryPoint":15382,"id":30620,"parameterSlots":2,"returnSlots":1},"@xAppConnectionManager_14471":{"entryPoint":null,"id":14471,"parameterSlots":0,"returnSlots":1},"@xcallIntoLocal_14737":{"entryPoint":2985,"id":14737,"parameterSlots":8,"returnSlots":1},"@xcall_14685":{"entryPoint":2741,"id":14685,"parameterSlots":8,"returnSlots":1},"abi_decode_address":{"entryPoint":15803,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bool":{"entryPoint":16624,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes":{"entryPoint":16674,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_TransferInfo_calldata":{"entryPoint":15945,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":15814,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool":{"entryPoint":18486,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":19442,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":15843,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_bytes_memory_ptr_fromMemory":{"entryPoint":19233,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_contract$_IOutbox_$47864_fromMemory":{"entryPoint":19167,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ExecuteArgs_$29365_calldata_ptr":{"entryPoint":16038,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_TransferInfo_$29351_calldata_ptr":{"entryPoint":16418,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_TransferInfo_$29351_calldata_ptrt_uint256":{"entryPoint":15970,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":18685,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32":{"entryPoint":15753,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32_fromMemory":{"entryPoint":16470,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32t_addresst_addresst_addresst_uint256t_uint256t_bytes_calldata_ptr":{"entryPoint":16096,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_uint32t_bytes32":{"entryPoint":16303,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint32":{"entryPoint":15742,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_address_dyn_calldata":{"entryPoint":17220,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_bytes_calldata_dyn_calldata":{"entryPoint":17293,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_bytes":{"entryPoint":17978,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes_calldata":{"entryPoint":17107,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_struct_TransferInfo":{"entryPoint":18022,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":18710,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":19471,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73_t_bytes32__to_t_string_memory_ptr_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_uint32_t_bytes32_t_enum$_Types_$28713_t_uint256_t_bytes32__to_t_uint32_t_bytes32_t_uint8_t_uint256_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":19104,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_address_t_uint16__to_t_address_t_uint256_t_address_t_uint16__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":15868,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool_t_bytes_memory_ptr__to_t_bool_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":18809,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_array$_t_address_$dyn_calldata_ptr__to_t_bytes32_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":18368,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint256__to_t_bytes32_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint256_t_address_t_address_t_uint32_t_bytes_calldata_ptr__to_t_bytes32_t_uint256_t_address_t_address_t_uint32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":18726,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint32__to_t_bytes32_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_enum$_DestinationTransferStatus_$29324__to_t_uint8__fromStack_reversed":{"entryPoint":16399,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":19489,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_6e40b987a1bdbab1b9eb0952052a8ed8be99e503ecda84e0b9bc15992dc05932__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9696d201946a7b6efbea55f1e57c9bbecf77447f35c86ca3cfdc292daa9e8b3d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d9b2e328f4209b3735eca19488e3afd57ba32c456d5e1a010a233e595f7b0b47__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e8a8072019b830892cd4deb2ef47d584565d80622116f9044abf32bb22a18a4f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_eb80683d13e69e40aa7f57ce3558136d2c8c4c88f682021213f7030fc3d23afd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_ExecuteArgs_$29365_calldata_ptr_t_address_t_uint256_t_address__to_t_struct$_ExecuteArgs_$29365_memory_ptr_t_address_t_uint256_t_address__fromStack_reversed":{"entryPoint":17386,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_struct$_TransferInfo_$29351_memory_ptr__to_t_struct$_TransferInfo_$29351_memory_ptr__fromStack_reversed":{"entryPoint":18276,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_TransferInfo_$29351_memory_ptr_t_address_t_uint256_t_address_t_bytes_memory_ptr__to_t_struct$_TransferInfo_$29351_memory_ptr_t_address_t_uint256_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":19363,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_address_t_address_t_uint256_t_uint256__to_t_uint256_t_address_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint8_t_uint8__to_t_uint256_t_uint256_t_uint128_t_uint128__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32_t_address_t_address__to_t_uint32_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":19196,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_uint32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"access_calldata_tail_t_array$_t_address_$dyn_calldata_ptr":{"entryPoint":18295,"id":null,"parameterSlots":2,"returnSlots":2},"access_calldata_tail_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":2},"access_calldata_tail_t_bytes_calldata_ptr":{"entryPoint":18394,"id":null,"parameterSlots":2,"returnSlots":2},"access_calldata_tail_t_struct$_TransferInfo_$29351_calldata_ptr":{"entryPoint":17005,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":16562,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_4834":{"entryPoint":16521,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":16635,"id":null,"parameterSlots":1,"returnSlots":1},"calldata_access_array_address_dyn_calldata":{"entryPoint":17148,"id":null,"parameterSlots":2,"returnSlots":2},"calldata_access_bytes_calldata":{"entryPoint":17038,"id":null,"parameterSlots":2,"returnSlots":2},"checked_add_t_uint256":{"entryPoint":18618,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":18578,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":18861,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint8":{"entryPoint":19089,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":18928,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":18662,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":18537,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint8":{"entryPoint":18836,"id":null,"parameterSlots":2,"returnSlots":1},"convert_t_struct$_TransferInfo_$29351_calldata_ptr_to_t_struct$_TransferInfo_$29351_memory_ptr":{"entryPoint":16760,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":17942,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint256":{"entryPoint":18637,"id":null,"parameterSlots":1,"returnSlots":1},"mod_t_uint256":{"entryPoint":18598,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":18515,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":18556,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":16347,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":18464,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":16499,"id":null,"parameterSlots":0,"returnSlots":0},"validator_assert_enum_DestinationTransferStatus":{"entryPoint":16369,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_address":{"entryPoint":15782,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":16610,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_uint32":{"entryPoint":15724,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:39739:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"58:77:181","statements":[{"body":{"nodeType":"YulBlock","src":"113:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"122:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"125:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"115:6:181"},"nodeType":"YulFunctionCall","src":"115:12:181"},"nodeType":"YulExpressionStatement","src":"115:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"81:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"92:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"99:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"88:3:181"},"nodeType":"YulFunctionCall","src":"88:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"78:2:181"},"nodeType":"YulFunctionCall","src":"78:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"71:6:181"},"nodeType":"YulFunctionCall","src":"71:41:181"},"nodeType":"YulIf","src":"68:61:181"}]},"name":"validator_revert_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"47:5:181","type":""}],"src":"14:121:181"},{"body":{"nodeType":"YulBlock","src":"188:84:181","statements":[{"nodeType":"YulAssignment","src":"198:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"220:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"207:12:181"},"nodeType":"YulFunctionCall","src":"207:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"198:5:181"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"260:5:181"}],"functionName":{"name":"validator_revert_uint32","nodeType":"YulIdentifier","src":"236:23:181"},"nodeType":"YulFunctionCall","src":"236:30:181"},"nodeType":"YulExpressionStatement","src":"236:30:181"}]},"name":"abi_decode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"167:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"178:5:181","type":""}],"src":"140:132:181"},{"body":{"nodeType":"YulBlock","src":"346:176:181","statements":[{"body":{"nodeType":"YulBlock","src":"392:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"401:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"404:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"394:6:181"},"nodeType":"YulFunctionCall","src":"394:12:181"},"nodeType":"YulExpressionStatement","src":"394:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"367:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"376:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"363:3:181"},"nodeType":"YulFunctionCall","src":"363:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"359:3:181"},"nodeType":"YulFunctionCall","src":"359:32:181"},"nodeType":"YulIf","src":"356:52:181"},{"nodeType":"YulVariableDeclaration","src":"417:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"443:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"430:12:181"},"nodeType":"YulFunctionCall","src":"430:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"421:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"486:5:181"}],"functionName":{"name":"validator_revert_uint32","nodeType":"YulIdentifier","src":"462:23:181"},"nodeType":"YulFunctionCall","src":"462:30:181"},"nodeType":"YulExpressionStatement","src":"462:30:181"},{"nodeType":"YulAssignment","src":"501:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"511:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"501:6:181"}]}]},"name":"abi_decode_tuple_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"312:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"323:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"335:6:181","type":""}],"src":"277:245:181"},{"body":{"nodeType":"YulBlock","src":"571:60:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"588:3:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"597:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"612:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"617:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"608:3:181"},"nodeType":"YulFunctionCall","src":"608:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"621:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"604:3:181"},"nodeType":"YulFunctionCall","src":"604:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"593:3:181"},"nodeType":"YulFunctionCall","src":"593:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"581:6:181"},"nodeType":"YulFunctionCall","src":"581:44:181"},"nodeType":"YulExpressionStatement","src":"581:44:181"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"555:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"562:3:181","type":""}],"src":"527:104:181"},{"body":{"nodeType":"YulBlock","src":"737:102:181","statements":[{"nodeType":"YulAssignment","src":"747:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"759:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"770:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"755:3:181"},"nodeType":"YulFunctionCall","src":"755:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"747:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"789:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"804:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"820:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"825:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"816:3:181"},"nodeType":"YulFunctionCall","src":"816:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"829:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"812:3:181"},"nodeType":"YulFunctionCall","src":"812:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"800:3:181"},"nodeType":"YulFunctionCall","src":"800:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"782:6:181"},"nodeType":"YulFunctionCall","src":"782:51:181"},"nodeType":"YulExpressionStatement","src":"782:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"706:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"717:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"728:4:181","type":""}],"src":"636:203:181"},{"body":{"nodeType":"YulBlock","src":"889:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"953:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"962:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"965:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"955:6:181"},"nodeType":"YulFunctionCall","src":"955:12:181"},"nodeType":"YulExpressionStatement","src":"955:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"912:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"923:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"938:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"943:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"934:3:181"},"nodeType":"YulFunctionCall","src":"934:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"947:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"930:3:181"},"nodeType":"YulFunctionCall","src":"930:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"919:3:181"},"nodeType":"YulFunctionCall","src":"919:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"909:2:181"},"nodeType":"YulFunctionCall","src":"909:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"902:6:181"},"nodeType":"YulFunctionCall","src":"902:50:181"},"nodeType":"YulIf","src":"899:70:181"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"878:5:181","type":""}],"src":"844:131:181"},{"body":{"nodeType":"YulBlock","src":"1029:85:181","statements":[{"nodeType":"YulAssignment","src":"1039:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1061:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1048:12:181"},"nodeType":"YulFunctionCall","src":"1048:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1039:5:181"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1102:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1077:24:181"},"nodeType":"YulFunctionCall","src":"1077:31:181"},"nodeType":"YulExpressionStatement","src":"1077:31:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1008:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1019:5:181","type":""}],"src":"980:134:181"},{"body":{"nodeType":"YulBlock","src":"1189:177:181","statements":[{"body":{"nodeType":"YulBlock","src":"1235:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1244:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1247:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1237:6:181"},"nodeType":"YulFunctionCall","src":"1237:12:181"},"nodeType":"YulExpressionStatement","src":"1237:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1210:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1219:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1206:3:181"},"nodeType":"YulFunctionCall","src":"1206:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1231:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1202:3:181"},"nodeType":"YulFunctionCall","src":"1202:32:181"},"nodeType":"YulIf","src":"1199:52:181"},{"nodeType":"YulVariableDeclaration","src":"1260:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1286:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1273:12:181"},"nodeType":"YulFunctionCall","src":"1273:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1264:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1330:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1305:24:181"},"nodeType":"YulFunctionCall","src":"1305:31:181"},"nodeType":"YulExpressionStatement","src":"1305:31:181"},{"nodeType":"YulAssignment","src":"1345:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1355:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1345:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1155:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1166:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1178:6:181","type":""}],"src":"1119:247:181"},{"body":{"nodeType":"YulBlock","src":"1412:50:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1429:3:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1448:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1441:6:181"},"nodeType":"YulFunctionCall","src":"1441:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1434:6:181"},"nodeType":"YulFunctionCall","src":"1434:21:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1422:6:181"},"nodeType":"YulFunctionCall","src":"1422:34:181"},"nodeType":"YulExpressionStatement","src":"1422:34:181"}]},"name":"abi_encode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1396:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"1403:3:181","type":""}],"src":"1371:91:181"},{"body":{"nodeType":"YulBlock","src":"1562:92:181","statements":[{"nodeType":"YulAssignment","src":"1572:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1584:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1595:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1580:3:181"},"nodeType":"YulFunctionCall","src":"1580:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1572:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1614:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1639:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1632:6:181"},"nodeType":"YulFunctionCall","src":"1632:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1625:6:181"},"nodeType":"YulFunctionCall","src":"1625:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1607:6:181"},"nodeType":"YulFunctionCall","src":"1607:41:181"},"nodeType":"YulExpressionStatement","src":"1607:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1531:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1542:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1553:4:181","type":""}],"src":"1467:187:181"},{"body":{"nodeType":"YulBlock","src":"1729:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"1775:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1784:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1787:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1777:6:181"},"nodeType":"YulFunctionCall","src":"1777:12:181"},"nodeType":"YulExpressionStatement","src":"1777:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1750:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1759:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1746:3:181"},"nodeType":"YulFunctionCall","src":"1746:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1771:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1742:3:181"},"nodeType":"YulFunctionCall","src":"1742:32:181"},"nodeType":"YulIf","src":"1739:52:181"},{"nodeType":"YulAssignment","src":"1800:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1823:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1810:12:181"},"nodeType":"YulFunctionCall","src":"1810:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1800:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1695:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1706:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1718:6:181","type":""}],"src":"1659:180:181"},{"body":{"nodeType":"YulBlock","src":"1995:507:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2005:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2015:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2009:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2026:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2044:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2055:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2040:3:181"},"nodeType":"YulFunctionCall","src":"2040:18:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"2030:6:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2074:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2085:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2067:6:181"},"nodeType":"YulFunctionCall","src":"2067:21:181"},"nodeType":"YulExpressionStatement","src":"2067:21:181"},{"nodeType":"YulVariableDeclaration","src":"2097:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"2108:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"2101:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2123:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2143:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2137:5:181"},"nodeType":"YulFunctionCall","src":"2137:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2127:6:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"2166:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"2174:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2159:6:181"},"nodeType":"YulFunctionCall","src":"2159:22:181"},"nodeType":"YulExpressionStatement","src":"2159:22:181"},{"nodeType":"YulAssignment","src":"2190:25:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2201:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2212:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2197:3:181"},"nodeType":"YulFunctionCall","src":"2197:18:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"2190:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"2224:29:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2242:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2250:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2238:3:181"},"nodeType":"YulFunctionCall","src":"2238:15:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"2228:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2262:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2271:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2266:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2330:146:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2351:3:181"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2366:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2360:5:181"},"nodeType":"YulFunctionCall","src":"2360:13:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2383:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2388:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2379:3:181"},"nodeType":"YulFunctionCall","src":"2379:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2392:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2375:3:181"},"nodeType":"YulFunctionCall","src":"2375:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2356:3:181"},"nodeType":"YulFunctionCall","src":"2356:39:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2344:6:181"},"nodeType":"YulFunctionCall","src":"2344:52:181"},"nodeType":"YulExpressionStatement","src":"2344:52:181"},{"nodeType":"YulAssignment","src":"2409:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2420:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2425:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2416:3:181"},"nodeType":"YulFunctionCall","src":"2416:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"2409:3:181"}]},{"nodeType":"YulAssignment","src":"2441:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2455:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2463:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2451:3:181"},"nodeType":"YulFunctionCall","src":"2451:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2441:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2292:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"2295:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2289:2:181"},"nodeType":"YulFunctionCall","src":"2289:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2303:18:181","statements":[{"nodeType":"YulAssignment","src":"2305:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2314:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"2317:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2310:3:181"},"nodeType":"YulFunctionCall","src":"2310:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2305:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"2285:3:181","statements":[]},"src":"2281:195:181"},{"nodeType":"YulAssignment","src":"2485:11:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"2493:3:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2485:4:181"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1964:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1975:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1986:4:181","type":""}],"src":"1844:658:181"},{"body":{"nodeType":"YulBlock","src":"2582:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"2622:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2631:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2634:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2624:6:181"},"nodeType":"YulFunctionCall","src":"2624:12:181"},"nodeType":"YulExpressionStatement","src":"2624:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"2603:3:181"},{"name":"offset","nodeType":"YulIdentifier","src":"2608:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2599:3:181"},"nodeType":"YulFunctionCall","src":"2599:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"2617:3:181","type":"","value":"416"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2595:3:181"},"nodeType":"YulFunctionCall","src":"2595:26:181"},"nodeType":"YulIf","src":"2592:46:181"},{"nodeType":"YulAssignment","src":"2647:15:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"2656:6:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2647:5:181"}]}]},"name":"abi_decode_struct_TransferInfo_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2556:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"2564:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2572:5:181","type":""}],"src":"2507:161:181"},{"body":{"nodeType":"YulBlock","src":"2793:315:181","statements":[{"body":{"nodeType":"YulBlock","src":"2839:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2848:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2851:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2841:6:181"},"nodeType":"YulFunctionCall","src":"2841:12:181"},"nodeType":"YulExpressionStatement","src":"2841:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2814:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2823:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2810:3:181"},"nodeType":"YulFunctionCall","src":"2810:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2835:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2806:3:181"},"nodeType":"YulFunctionCall","src":"2806:32:181"},"nodeType":"YulIf","src":"2803:52:181"},{"nodeType":"YulVariableDeclaration","src":"2864:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2891:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2878:12:181"},"nodeType":"YulFunctionCall","src":"2878:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2868:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2944:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2953:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2956:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2946:6:181"},"nodeType":"YulFunctionCall","src":"2946:12:181"},"nodeType":"YulExpressionStatement","src":"2946:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2916:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2924:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2913:2:181"},"nodeType":"YulFunctionCall","src":"2913:30:181"},"nodeType":"YulIf","src":"2910:50:181"},{"nodeType":"YulAssignment","src":"2969:82:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3023:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"3034:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3019:3:181"},"nodeType":"YulFunctionCall","src":"3019:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3043:7:181"}],"functionName":{"name":"abi_decode_struct_TransferInfo_calldata","nodeType":"YulIdentifier","src":"2979:39:181"},"nodeType":"YulFunctionCall","src":"2979:72:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2969:6:181"}]},{"nodeType":"YulAssignment","src":"3060:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3087:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3098:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3083:3:181"},"nodeType":"YulFunctionCall","src":"3083:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3070:12:181"},"nodeType":"YulFunctionCall","src":"3070:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3060:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_TransferInfo_$29351_calldata_ptrt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2751:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2762:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2774:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2782:6:181","type":""}],"src":"2673:435:181"},{"body":{"nodeType":"YulBlock","src":"3215:290:181","statements":[{"body":{"nodeType":"YulBlock","src":"3261:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3270:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3273:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3263:6:181"},"nodeType":"YulFunctionCall","src":"3263:12:181"},"nodeType":"YulExpressionStatement","src":"3263:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3236:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3245:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3232:3:181"},"nodeType":"YulFunctionCall","src":"3232:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3257:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3228:3:181"},"nodeType":"YulFunctionCall","src":"3228:32:181"},"nodeType":"YulIf","src":"3225:52:181"},{"nodeType":"YulVariableDeclaration","src":"3286:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3313:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3300:12:181"},"nodeType":"YulFunctionCall","src":"3300:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3290:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3366:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3375:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3378:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3368:6:181"},"nodeType":"YulFunctionCall","src":"3368:12:181"},"nodeType":"YulExpressionStatement","src":"3368:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3338:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3346:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3335:2:181"},"nodeType":"YulFunctionCall","src":"3335:30:181"},"nodeType":"YulIf","src":"3332:50:181"},{"nodeType":"YulVariableDeclaration","src":"3391:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3405:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"3416:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3401:3:181"},"nodeType":"YulFunctionCall","src":"3401:22:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3395:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3462:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3471:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3474:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3464:6:181"},"nodeType":"YulFunctionCall","src":"3464:12:181"},"nodeType":"YulExpressionStatement","src":"3464:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3443:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3452:2:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3439:3:181"},"nodeType":"YulFunctionCall","src":"3439:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"3457:3:181","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3435:3:181"},"nodeType":"YulFunctionCall","src":"3435:26:181"},"nodeType":"YulIf","src":"3432:46:181"},{"nodeType":"YulAssignment","src":"3487:12:181","value":{"name":"_1","nodeType":"YulIdentifier","src":"3497:2:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3487:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_ExecuteArgs_$29365_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3181:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3192:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3204:6:181","type":""}],"src":"3113:392:181"},{"body":{"nodeType":"YulBlock","src":"3611:76:181","statements":[{"nodeType":"YulAssignment","src":"3621:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3633:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3644:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3629:3:181"},"nodeType":"YulFunctionCall","src":"3629:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3621:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3663:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"3674:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3656:6:181"},"nodeType":"YulFunctionCall","src":"3656:25:181"},"nodeType":"YulExpressionStatement","src":"3656:25:181"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3580:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3591:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3602:4:181","type":""}],"src":"3510:177:181"},{"body":{"nodeType":"YulBlock","src":"3882:1097:181","statements":[{"body":{"nodeType":"YulBlock","src":"3929:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3938:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3941:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3931:6:181"},"nodeType":"YulFunctionCall","src":"3931:12:181"},"nodeType":"YulExpressionStatement","src":"3931:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3903:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3912:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3899:3:181"},"nodeType":"YulFunctionCall","src":"3899:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3924:3:181","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3895:3:181"},"nodeType":"YulFunctionCall","src":"3895:33:181"},"nodeType":"YulIf","src":"3892:53:181"},{"nodeType":"YulVariableDeclaration","src":"3954:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3980:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3967:12:181"},"nodeType":"YulFunctionCall","src":"3967:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3958:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4023:5:181"}],"functionName":{"name":"validator_revert_uint32","nodeType":"YulIdentifier","src":"3999:23:181"},"nodeType":"YulFunctionCall","src":"3999:30:181"},"nodeType":"YulExpressionStatement","src":"3999:30:181"},{"nodeType":"YulAssignment","src":"4038:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"4048:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4038:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"4062:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4094:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4105:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4090:3:181"},"nodeType":"YulFunctionCall","src":"4090:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4077:12:181"},"nodeType":"YulFunctionCall","src":"4077:32:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4066:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4143:7:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4118:24:181"},"nodeType":"YulFunctionCall","src":"4118:33:181"},"nodeType":"YulExpressionStatement","src":"4118:33:181"},{"nodeType":"YulAssignment","src":"4160:17:181","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4170:7:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4160:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"4186:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4218:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4229:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4214:3:181"},"nodeType":"YulFunctionCall","src":"4214:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4201:12:181"},"nodeType":"YulFunctionCall","src":"4201:32:181"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"4190:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"4267:7:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4242:24:181"},"nodeType":"YulFunctionCall","src":"4242:33:181"},"nodeType":"YulExpressionStatement","src":"4242:33:181"},{"nodeType":"YulAssignment","src":"4284:17:181","value":{"name":"value_2","nodeType":"YulIdentifier","src":"4294:7:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4284:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"4310:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4342:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4353:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4338:3:181"},"nodeType":"YulFunctionCall","src":"4338:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4325:12:181"},"nodeType":"YulFunctionCall","src":"4325:32:181"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"4314:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"4391:7:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4366:24:181"},"nodeType":"YulFunctionCall","src":"4366:33:181"},"nodeType":"YulExpressionStatement","src":"4366:33:181"},{"nodeType":"YulAssignment","src":"4408:17:181","value":{"name":"value_3","nodeType":"YulIdentifier","src":"4418:7:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4408:6:181"}]},{"nodeType":"YulAssignment","src":"4434:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4461:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4472:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4457:3:181"},"nodeType":"YulFunctionCall","src":"4457:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4444:12:181"},"nodeType":"YulFunctionCall","src":"4444:33:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"4434:6:181"}]},{"nodeType":"YulAssignment","src":"4486:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4513:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4524:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4509:3:181"},"nodeType":"YulFunctionCall","src":"4509:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4496:12:181"},"nodeType":"YulFunctionCall","src":"4496:33:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"4486:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"4538:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4569:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4580:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4565:3:181"},"nodeType":"YulFunctionCall","src":"4565:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4552:12:181"},"nodeType":"YulFunctionCall","src":"4552:33:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"4542:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4594:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4604:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4598:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4649:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4658:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4661:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4651:6:181"},"nodeType":"YulFunctionCall","src":"4651:12:181"},"nodeType":"YulExpressionStatement","src":"4651:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4637:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4645:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4634:2:181"},"nodeType":"YulFunctionCall","src":"4634:14:181"},"nodeType":"YulIf","src":"4631:34:181"},{"nodeType":"YulVariableDeclaration","src":"4674:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4688:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"4699:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4684:3:181"},"nodeType":"YulFunctionCall","src":"4684:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"4678:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4754:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4763:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4766:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4756:6:181"},"nodeType":"YulFunctionCall","src":"4756:12:181"},"nodeType":"YulExpressionStatement","src":"4756:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4733:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4737:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4729:3:181"},"nodeType":"YulFunctionCall","src":"4729:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4744:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4725:3:181"},"nodeType":"YulFunctionCall","src":"4725:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4718:6:181"},"nodeType":"YulFunctionCall","src":"4718:35:181"},"nodeType":"YulIf","src":"4715:55:181"},{"nodeType":"YulVariableDeclaration","src":"4779:30:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4806:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4793:12:181"},"nodeType":"YulFunctionCall","src":"4793:16:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"4783:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4836:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4845:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4848:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4838:6:181"},"nodeType":"YulFunctionCall","src":"4838:12:181"},"nodeType":"YulExpressionStatement","src":"4838:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4824:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4832:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4821:2:181"},"nodeType":"YulFunctionCall","src":"4821:14:181"},"nodeType":"YulIf","src":"4818:34:181"},{"body":{"nodeType":"YulBlock","src":"4902:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4911:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4914:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4904:6:181"},"nodeType":"YulFunctionCall","src":"4904:12:181"},"nodeType":"YulExpressionStatement","src":"4904:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4875:2:181"},{"name":"length","nodeType":"YulIdentifier","src":"4879:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4871:3:181"},"nodeType":"YulFunctionCall","src":"4871:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"4888:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4867:3:181"},"nodeType":"YulFunctionCall","src":"4867:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4893:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4864:2:181"},"nodeType":"YulFunctionCall","src":"4864:37:181"},"nodeType":"YulIf","src":"4861:57:181"},{"nodeType":"YulAssignment","src":"4927:21:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4941:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4945:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4937:3:181"},"nodeType":"YulFunctionCall","src":"4937:11:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"4927:6:181"}]},{"nodeType":"YulAssignment","src":"4957:16:181","value":{"name":"length","nodeType":"YulIdentifier","src":"4967:6:181"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"4957:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_addresst_addresst_addresst_uint256t_uint256t_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3792:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3803:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3815:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3823:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3831:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3839:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3847:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3855:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3863:6:181","type":""},{"name":"value7","nodeType":"YulTypedName","src":"3871:6:181","type":""}],"src":"3692:1287:181"},{"body":{"nodeType":"YulBlock","src":"5085:76:181","statements":[{"nodeType":"YulAssignment","src":"5095:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5107:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5118:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5103:3:181"},"nodeType":"YulFunctionCall","src":"5103:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5095:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5137:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"5148:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5130:6:181"},"nodeType":"YulFunctionCall","src":"5130:25:181"},"nodeType":"YulExpressionStatement","src":"5130:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5054:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5065:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5076:4:181","type":""}],"src":"4984:177:181"},{"body":{"nodeType":"YulBlock","src":"5252:227:181","statements":[{"body":{"nodeType":"YulBlock","src":"5298:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5307:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5310:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5300:6:181"},"nodeType":"YulFunctionCall","src":"5300:12:181"},"nodeType":"YulExpressionStatement","src":"5300:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5273:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5282:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5269:3:181"},"nodeType":"YulFunctionCall","src":"5269:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5294:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5265:3:181"},"nodeType":"YulFunctionCall","src":"5265:32:181"},"nodeType":"YulIf","src":"5262:52:181"},{"nodeType":"YulVariableDeclaration","src":"5323:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5349:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5336:12:181"},"nodeType":"YulFunctionCall","src":"5336:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5327:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5392:5:181"}],"functionName":{"name":"validator_revert_uint32","nodeType":"YulIdentifier","src":"5368:23:181"},"nodeType":"YulFunctionCall","src":"5368:30:181"},"nodeType":"YulExpressionStatement","src":"5368:30:181"},{"nodeType":"YulAssignment","src":"5407:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"5417:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5407:6:181"}]},{"nodeType":"YulAssignment","src":"5431:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5458:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5469:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5454:3:181"},"nodeType":"YulFunctionCall","src":"5454:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5441:12:181"},"nodeType":"YulFunctionCall","src":"5441:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5431:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5210:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5221:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5233:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5241:6:181","type":""}],"src":"5166:313:181"},{"body":{"nodeType":"YulBlock","src":"5516:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5533:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5540:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"5545:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5536:3:181"},"nodeType":"YulFunctionCall","src":"5536:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5526:6:181"},"nodeType":"YulFunctionCall","src":"5526:31:181"},"nodeType":"YulExpressionStatement","src":"5526:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5573:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5576:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5566:6:181"},"nodeType":"YulFunctionCall","src":"5566:15:181"},"nodeType":"YulExpressionStatement","src":"5566:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5597:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5600:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5590:6:181"},"nodeType":"YulFunctionCall","src":"5590:15:181"},"nodeType":"YulExpressionStatement","src":"5590:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"5484:127:181"},{"body":{"nodeType":"YulBlock","src":"5684:159:181","statements":[{"body":{"nodeType":"YulBlock","src":"5726:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5747:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5754:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"5759:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5750:3:181"},"nodeType":"YulFunctionCall","src":"5750:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5740:6:181"},"nodeType":"YulFunctionCall","src":"5740:31:181"},"nodeType":"YulExpressionStatement","src":"5740:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5791:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5794:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5784:6:181"},"nodeType":"YulFunctionCall","src":"5784:15:181"},"nodeType":"YulExpressionStatement","src":"5784:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5819:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5822:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5812:6:181"},"nodeType":"YulFunctionCall","src":"5812:15:181"},"nodeType":"YulExpressionStatement","src":"5812:15:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5707:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5714:1:181","type":"","value":"4"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5704:2:181"},"nodeType":"YulFunctionCall","src":"5704:12:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5697:6:181"},"nodeType":"YulFunctionCall","src":"5697:20:181"},"nodeType":"YulIf","src":"5694:143:181"}]},"name":"validator_assert_enum_DestinationTransferStatus","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5673:5:181","type":""}],"src":"5616:227:181"},{"body":{"nodeType":"YulBlock","src":"5978:140:181","statements":[{"nodeType":"YulAssignment","src":"5988:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6000:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6011:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5996:3:181"},"nodeType":"YulFunctionCall","src":"5996:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5988:4:181"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6071:6:181"}],"functionName":{"name":"validator_assert_enum_DestinationTransferStatus","nodeType":"YulIdentifier","src":"6023:47:181"},"nodeType":"YulFunctionCall","src":"6023:55:181"},"nodeType":"YulExpressionStatement","src":"6023:55:181"},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6094:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"6105:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6087:6:181"},"nodeType":"YulFunctionCall","src":"6087:25:181"},"nodeType":"YulExpressionStatement","src":"6087:25:181"}]},"name":"abi_encode_tuple_t_enum$_DestinationTransferStatus_$29324__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5947:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5958:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5969:4:181","type":""}],"src":"5848:270:181"},{"body":{"nodeType":"YulBlock","src":"6166:51:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6183:3:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6192:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"6199:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6188:3:181"},"nodeType":"YulFunctionCall","src":"6188:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6176:6:181"},"nodeType":"YulFunctionCall","src":"6176:35:181"},"nodeType":"YulExpressionStatement","src":"6176:35:181"}]},"name":"abi_encode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"6150:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"6157:3:181","type":""}],"src":"6123:94:181"},{"body":{"nodeType":"YulBlock","src":"6321:93:181","statements":[{"nodeType":"YulAssignment","src":"6331:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6343:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6354:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6339:3:181"},"nodeType":"YulFunctionCall","src":"6339:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6331:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6373:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6388:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6396:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6384:3:181"},"nodeType":"YulFunctionCall","src":"6384:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6366:6:181"},"nodeType":"YulFunctionCall","src":"6366:42:181"},"nodeType":"YulExpressionStatement","src":"6366:42:181"}]},"name":"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6290:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6301:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6312:4:181","type":""}],"src":"6222:192:181"},{"body":{"nodeType":"YulBlock","src":"6522:264:181","statements":[{"body":{"nodeType":"YulBlock","src":"6568:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6577:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6580:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6570:6:181"},"nodeType":"YulFunctionCall","src":"6570:12:181"},"nodeType":"YulExpressionStatement","src":"6570:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6543:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6552:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6539:3:181"},"nodeType":"YulFunctionCall","src":"6539:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"6564:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6535:3:181"},"nodeType":"YulFunctionCall","src":"6535:32:181"},"nodeType":"YulIf","src":"6532:52:181"},{"nodeType":"YulVariableDeclaration","src":"6593:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6620:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6607:12:181"},"nodeType":"YulFunctionCall","src":"6607:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"6597:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6673:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6682:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6685:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6675:6:181"},"nodeType":"YulFunctionCall","src":"6675:12:181"},"nodeType":"YulExpressionStatement","src":"6675:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6645:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6653:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6642:2:181"},"nodeType":"YulFunctionCall","src":"6642:30:181"},"nodeType":"YulIf","src":"6639:50:181"},{"nodeType":"YulAssignment","src":"6698:82:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6752:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"6763:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6748:3:181"},"nodeType":"YulFunctionCall","src":"6748:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6772:7:181"}],"functionName":{"name":"abi_decode_struct_TransferInfo_calldata","nodeType":"YulIdentifier","src":"6708:39:181"},"nodeType":"YulFunctionCall","src":"6708:72:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6698:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_TransferInfo_$29351_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6488:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6499:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6511:6:181","type":""}],"src":"6419:367:181"},{"body":{"nodeType":"YulBlock","src":"6871:169:181","statements":[{"body":{"nodeType":"YulBlock","src":"6917:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6926:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6929:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6919:6:181"},"nodeType":"YulFunctionCall","src":"6919:12:181"},"nodeType":"YulExpressionStatement","src":"6919:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6892:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6901:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6888:3:181"},"nodeType":"YulFunctionCall","src":"6888:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"6913:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6884:3:181"},"nodeType":"YulFunctionCall","src":"6884:32:181"},"nodeType":"YulIf","src":"6881:52:181"},{"nodeType":"YulVariableDeclaration","src":"6942:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6961:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6955:5:181"},"nodeType":"YulFunctionCall","src":"6955:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6946:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7004:5:181"}],"functionName":{"name":"validator_revert_uint32","nodeType":"YulIdentifier","src":"6980:23:181"},"nodeType":"YulFunctionCall","src":"6980:30:181"},"nodeType":"YulExpressionStatement","src":"6980:30:181"},{"nodeType":"YulAssignment","src":"7019:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"7029:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7019:6:181"}]}]},"name":"abi_decode_tuple_t_uint32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6837:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6848:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6860:6:181","type":""}],"src":"6791:249:181"},{"body":{"nodeType":"YulBlock","src":"7174:175:181","statements":[{"nodeType":"YulAssignment","src":"7184:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7196:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7207:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7192:3:181"},"nodeType":"YulFunctionCall","src":"7192:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7184:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"7219:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7237:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"7242:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7233:3:181"},"nodeType":"YulFunctionCall","src":"7233:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"7246:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7229:3:181"},"nodeType":"YulFunctionCall","src":"7229:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7223:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7264:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7279:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7287:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7275:3:181"},"nodeType":"YulFunctionCall","src":"7275:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7257:6:181"},"nodeType":"YulFunctionCall","src":"7257:34:181"},"nodeType":"YulExpressionStatement","src":"7257:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7311:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7322:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7307:3:181"},"nodeType":"YulFunctionCall","src":"7307:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"7331:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7339:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7327:3:181"},"nodeType":"YulFunctionCall","src":"7327:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7300:6:181"},"nodeType":"YulFunctionCall","src":"7300:43:181"},"nodeType":"YulExpressionStatement","src":"7300:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7135:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7146:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7154:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7165:4:181","type":""}],"src":"7045:304:181"},{"body":{"nodeType":"YulBlock","src":"7386:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7403:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7410:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"7415:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7406:3:181"},"nodeType":"YulFunctionCall","src":"7406:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7396:6:181"},"nodeType":"YulFunctionCall","src":"7396:31:181"},"nodeType":"YulExpressionStatement","src":"7396:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7443:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7446:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7436:6:181"},"nodeType":"YulFunctionCall","src":"7436:15:181"},"nodeType":"YulExpressionStatement","src":"7436:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7467:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7470:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7460:6:181"},"nodeType":"YulFunctionCall","src":"7460:15:181"},"nodeType":"YulExpressionStatement","src":"7460:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"7354:127:181"},{"body":{"nodeType":"YulBlock","src":"7532:209:181","statements":[{"nodeType":"YulAssignment","src":"7542:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7558:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7552:5:181"},"nodeType":"YulFunctionCall","src":"7552:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7542:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"7570:37:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7592:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"7600:6:181","type":"","value":"0x01a0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7588:3:181"},"nodeType":"YulFunctionCall","src":"7588:19:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"7574:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7682:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7684:16:181"},"nodeType":"YulFunctionCall","src":"7684:18:181"},"nodeType":"YulExpressionStatement","src":"7684:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7625:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"7637:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7622:2:181"},"nodeType":"YulFunctionCall","src":"7622:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7661:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"7673:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7658:2:181"},"nodeType":"YulFunctionCall","src":"7658:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7619:2:181"},"nodeType":"YulFunctionCall","src":"7619:62:181"},"nodeType":"YulIf","src":"7616:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7720:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7724:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7713:6:181"},"nodeType":"YulFunctionCall","src":"7713:22:181"},"nodeType":"YulExpressionStatement","src":"7713:22:181"}]},"name":"allocate_memory_4834","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"7521:6:181","type":""}],"src":"7486:255:181"},{"body":{"nodeType":"YulBlock","src":"7791:230:181","statements":[{"nodeType":"YulAssignment","src":"7801:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7817:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7811:5:181"},"nodeType":"YulFunctionCall","src":"7811:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7801:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"7829:58:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7851:6:181"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"7867:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"7873:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7863:3:181"},"nodeType":"YulFunctionCall","src":"7863:13:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7882:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7878:3:181"},"nodeType":"YulFunctionCall","src":"7878:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7859:3:181"},"nodeType":"YulFunctionCall","src":"7859:27:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7847:3:181"},"nodeType":"YulFunctionCall","src":"7847:40:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"7833:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7962:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7964:16:181"},"nodeType":"YulFunctionCall","src":"7964:18:181"},"nodeType":"YulExpressionStatement","src":"7964:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7905:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"7917:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7902:2:181"},"nodeType":"YulFunctionCall","src":"7902:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7941:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"7953:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7938:2:181"},"nodeType":"YulFunctionCall","src":"7938:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7899:2:181"},"nodeType":"YulFunctionCall","src":"7899:62:181"},"nodeType":"YulIf","src":"7896:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8000:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"8004:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7993:6:181"},"nodeType":"YulFunctionCall","src":"7993:22:181"},"nodeType":"YulExpressionStatement","src":"7993:22:181"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"7771:4:181","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"7780:6:181","type":""}],"src":"7746:275:181"},{"body":{"nodeType":"YulBlock","src":"8068:76:181","statements":[{"body":{"nodeType":"YulBlock","src":"8122:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8131:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8134:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8124:6:181"},"nodeType":"YulFunctionCall","src":"8124:12:181"},"nodeType":"YulExpressionStatement","src":"8124:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8091:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8112:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8105:6:181"},"nodeType":"YulFunctionCall","src":"8105:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8098:6:181"},"nodeType":"YulFunctionCall","src":"8098:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8088:2:181"},"nodeType":"YulFunctionCall","src":"8088:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8081:6:181"},"nodeType":"YulFunctionCall","src":"8081:40:181"},"nodeType":"YulIf","src":"8078:60:181"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8057:5:181","type":""}],"src":"8026:118:181"},{"body":{"nodeType":"YulBlock","src":"8195:82:181","statements":[{"nodeType":"YulAssignment","src":"8205:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8227:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8214:12:181"},"nodeType":"YulFunctionCall","src":"8214:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"8205:5:181"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8265:5:181"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"8243:21:181"},"nodeType":"YulFunctionCall","src":"8243:28:181"},"nodeType":"YulExpressionStatement","src":"8243:28:181"}]},"name":"abi_decode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"8174:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"8185:5:181","type":""}],"src":"8149:128:181"},{"body":{"nodeType":"YulBlock","src":"8339:129:181","statements":[{"body":{"nodeType":"YulBlock","src":"8383:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"8385:16:181"},"nodeType":"YulFunctionCall","src":"8385:18:181"},"nodeType":"YulExpressionStatement","src":"8385:18:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8355:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8363:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8352:2:181"},"nodeType":"YulFunctionCall","src":"8352:30:181"},"nodeType":"YulIf","src":"8349:56:181"},{"nodeType":"YulAssignment","src":"8414:48:181","value":{"arguments":[{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8434:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8442:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8430:3:181"},"nodeType":"YulFunctionCall","src":"8430:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8451:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"8447:3:181"},"nodeType":"YulFunctionCall","src":"8447:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8426:3:181"},"nodeType":"YulFunctionCall","src":"8426:29:181"},{"kind":"number","nodeType":"YulLiteral","src":"8457:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8422:3:181"},"nodeType":"YulFunctionCall","src":"8422:40:181"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"8414:4:181"}]}]},"name":"array_allocation_size_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nodeType":"YulTypedName","src":"8319:6:181","type":""}],"returnVariables":[{"name":"size","nodeType":"YulTypedName","src":"8330:4:181","type":""}],"src":"8282:186:181"},{"body":{"nodeType":"YulBlock","src":"8525:410:181","statements":[{"body":{"nodeType":"YulBlock","src":"8574:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8583:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8586:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8576:6:181"},"nodeType":"YulFunctionCall","src":"8576:12:181"},"nodeType":"YulExpressionStatement","src":"8576:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8553:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8561:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8549:3:181"},"nodeType":"YulFunctionCall","src":"8549:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"8568:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8545:3:181"},"nodeType":"YulFunctionCall","src":"8545:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8538:6:181"},"nodeType":"YulFunctionCall","src":"8538:35:181"},"nodeType":"YulIf","src":"8535:55:181"},{"nodeType":"YulVariableDeclaration","src":"8599:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8622:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8609:12:181"},"nodeType":"YulFunctionCall","src":"8609:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8603:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8638:63:181","value":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"8697:2:181"}],"functionName":{"name":"array_allocation_size_bytes","nodeType":"YulIdentifier","src":"8669:27:181"},"nodeType":"YulFunctionCall","src":"8669:31:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"8653:15:181"},"nodeType":"YulFunctionCall","src":"8653:48:181"},"variables":[{"name":"array_1","nodeType":"YulTypedName","src":"8642:7:181","type":""}]},{"expression":{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"8717:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8726:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8710:6:181"},"nodeType":"YulFunctionCall","src":"8710:19:181"},"nodeType":"YulExpressionStatement","src":"8710:19:181"},{"body":{"nodeType":"YulBlock","src":"8777:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8786:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8789:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8779:6:181"},"nodeType":"YulFunctionCall","src":"8779:12:181"},"nodeType":"YulExpressionStatement","src":"8779:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8752:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8760:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8748:3:181"},"nodeType":"YulFunctionCall","src":"8748:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"8765:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8744:3:181"},"nodeType":"YulFunctionCall","src":"8744:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"8772:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8741:2:181"},"nodeType":"YulFunctionCall","src":"8741:35:181"},"nodeType":"YulIf","src":"8738:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"8819:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"8828:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8815:3:181"},"nodeType":"YulFunctionCall","src":"8815:18:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8839:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8847:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8835:3:181"},"nodeType":"YulFunctionCall","src":"8835:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8854:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"8802:12:181"},"nodeType":"YulFunctionCall","src":"8802:55:181"},"nodeType":"YulExpressionStatement","src":"8802:55:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"8881:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8890:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8877:3:181"},"nodeType":"YulFunctionCall","src":"8877:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"8895:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8873:3:181"},"nodeType":"YulFunctionCall","src":"8873:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"8902:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8866:6:181"},"nodeType":"YulFunctionCall","src":"8866:38:181"},"nodeType":"YulExpressionStatement","src":"8866:38:181"},{"nodeType":"YulAssignment","src":"8913:16:181","value":{"name":"array_1","nodeType":"YulIdentifier","src":"8922:7:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"8913:5:181"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"8499:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"8507:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"8515:5:181","type":""}],"src":"8473:462:181"},{"body":{"nodeType":"YulBlock","src":"9068:1239:181","statements":[{"body":{"nodeType":"YulBlock","src":"9121:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9130:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9133:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9123:6:181"},"nodeType":"YulFunctionCall","src":"9123:12:181"},"nodeType":"YulExpressionStatement","src":"9123:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"9089:12:181"},"nodeType":"YulFunctionCall","src":"9089:14:181"},{"name":"value","nodeType":"YulIdentifier","src":"9105:5:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9085:3:181"},"nodeType":"YulFunctionCall","src":"9085:26:181"},{"kind":"number","nodeType":"YulLiteral","src":"9113:6:181","type":"","value":"0x01a0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9081:3:181"},"nodeType":"YulFunctionCall","src":"9081:39:181"},"nodeType":"YulIf","src":"9078:59:181"},{"nodeType":"YulVariableDeclaration","src":"9146:37:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_4834","nodeType":"YulIdentifier","src":"9161:20:181"},"nodeType":"YulFunctionCall","src":"9161:22:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"9150:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9199:7:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9226:5:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"9208:17:181"},"nodeType":"YulFunctionCall","src":"9208:24:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9192:6:181"},"nodeType":"YulFunctionCall","src":"9192:41:181"},"nodeType":"YulExpressionStatement","src":"9192:41:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9253:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"9262:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9249:3:181"},"nodeType":"YulFunctionCall","src":"9249:16:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9289:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9296:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9285:3:181"},"nodeType":"YulFunctionCall","src":"9285:14:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"9267:17:181"},"nodeType":"YulFunctionCall","src":"9267:33:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9242:6:181"},"nodeType":"YulFunctionCall","src":"9242:59:181"},"nodeType":"YulExpressionStatement","src":"9242:59:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9321:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"9330:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9317:3:181"},"nodeType":"YulFunctionCall","src":"9317:16:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9357:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9364:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9353:3:181"},"nodeType":"YulFunctionCall","src":"9353:14:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"9335:17:181"},"nodeType":"YulFunctionCall","src":"9335:33:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9310:6:181"},"nodeType":"YulFunctionCall","src":"9310:59:181"},"nodeType":"YulExpressionStatement","src":"9310:59:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9389:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"9398:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9385:3:181"},"nodeType":"YulFunctionCall","src":"9385:16:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9426:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9433:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9422:3:181"},"nodeType":"YulFunctionCall","src":"9422:14:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"9403:18:181"},"nodeType":"YulFunctionCall","src":"9403:34:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9378:6:181"},"nodeType":"YulFunctionCall","src":"9378:60:181"},"nodeType":"YulExpressionStatement","src":"9378:60:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9458:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"9467:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9454:3:181"},"nodeType":"YulFunctionCall","src":"9454:17:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9496:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9503:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9492:3:181"},"nodeType":"YulFunctionCall","src":"9492:15:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"9473:18:181"},"nodeType":"YulFunctionCall","src":"9473:35:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9447:6:181"},"nodeType":"YulFunctionCall","src":"9447:62:181"},"nodeType":"YulExpressionStatement","src":"9447:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9529:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"9538:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9525:3:181"},"nodeType":"YulFunctionCall","src":"9525:17:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9564:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9571:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9560:3:181"},"nodeType":"YulFunctionCall","src":"9560:15:181"}],"functionName":{"name":"abi_decode_bool","nodeType":"YulIdentifier","src":"9544:15:181"},"nodeType":"YulFunctionCall","src":"9544:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9518:6:181"},"nodeType":"YulFunctionCall","src":"9518:59:181"},"nodeType":"YulExpressionStatement","src":"9518:59:181"},{"nodeType":"YulVariableDeclaration","src":"9586:43:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9617:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9624:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9613:3:181"},"nodeType":"YulFunctionCall","src":"9613:15:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9600:12:181"},"nodeType":"YulFunctionCall","src":"9600:29:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"9590:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9672:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9681:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9684:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9674:6:181"},"nodeType":"YulFunctionCall","src":"9674:12:181"},"nodeType":"YulExpressionStatement","src":"9674:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9644:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"9652:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9641:2:181"},"nodeType":"YulFunctionCall","src":"9641:30:181"},"nodeType":"YulIf","src":"9638:50:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9708:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"9717:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9704:3:181"},"nodeType":"YulFunctionCall","src":"9704:17:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9744:5:181"},{"name":"offset","nodeType":"YulIdentifier","src":"9751:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9740:3:181"},"nodeType":"YulFunctionCall","src":"9740:18:181"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"9760:12:181"},"nodeType":"YulFunctionCall","src":"9760:14:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"9723:16:181"},"nodeType":"YulFunctionCall","src":"9723:52:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9697:6:181"},"nodeType":"YulFunctionCall","src":"9697:79:181"},"nodeType":"YulExpressionStatement","src":"9697:79:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9796:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"9805:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9792:3:181"},"nodeType":"YulFunctionCall","src":"9792:17:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9828:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9835:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9824:3:181"},"nodeType":"YulFunctionCall","src":"9824:15:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9811:12:181"},"nodeType":"YulFunctionCall","src":"9811:29:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9785:6:181"},"nodeType":"YulFunctionCall","src":"9785:56:181"},"nodeType":"YulExpressionStatement","src":"9785:56:181"},{"nodeType":"YulVariableDeclaration","src":"9850:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"9860:3:181","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9854:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9883:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9892:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9879:3:181"},"nodeType":"YulFunctionCall","src":"9879:16:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9920:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9927:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9916:3:181"},"nodeType":"YulFunctionCall","src":"9916:14:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"9897:18:181"},"nodeType":"YulFunctionCall","src":"9897:34:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9872:6:181"},"nodeType":"YulFunctionCall","src":"9872:60:181"},"nodeType":"YulExpressionStatement","src":"9872:60:181"},{"nodeType":"YulVariableDeclaration","src":"9941:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"9951:3:181","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"9945:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9974:7:181"},{"name":"_2","nodeType":"YulIdentifier","src":"9983:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9970:3:181"},"nodeType":"YulFunctionCall","src":"9970:16:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10005:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"10012:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10001:3:181"},"nodeType":"YulFunctionCall","src":"10001:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9988:12:181"},"nodeType":"YulFunctionCall","src":"9988:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9963:6:181"},"nodeType":"YulFunctionCall","src":"9963:54:181"},"nodeType":"YulExpressionStatement","src":"9963:54:181"},{"nodeType":"YulVariableDeclaration","src":"10026:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10036:3:181","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"10030:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"10059:7:181"},{"name":"_3","nodeType":"YulIdentifier","src":"10068:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10055:3:181"},"nodeType":"YulFunctionCall","src":"10055:16:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10090:5:181"},{"name":"_3","nodeType":"YulIdentifier","src":"10097:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10086:3:181"},"nodeType":"YulFunctionCall","src":"10086:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10073:12:181"},"nodeType":"YulFunctionCall","src":"10073:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10048:6:181"},"nodeType":"YulFunctionCall","src":"10048:54:181"},"nodeType":"YulExpressionStatement","src":"10048:54:181"},{"nodeType":"YulVariableDeclaration","src":"10111:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10121:3:181","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"10115:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"10144:7:181"},{"name":"_4","nodeType":"YulIdentifier","src":"10153:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10140:3:181"},"nodeType":"YulFunctionCall","src":"10140:16:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10175:5:181"},{"name":"_4","nodeType":"YulIdentifier","src":"10182:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10171:3:181"},"nodeType":"YulFunctionCall","src":"10171:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10158:12:181"},"nodeType":"YulFunctionCall","src":"10158:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10133:6:181"},"nodeType":"YulFunctionCall","src":"10133:54:181"},"nodeType":"YulExpressionStatement","src":"10133:54:181"},{"nodeType":"YulVariableDeclaration","src":"10196:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10206:3:181","type":"","value":"384"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"10200:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"10229:7:181"},{"name":"_5","nodeType":"YulIdentifier","src":"10238:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10225:3:181"},"nodeType":"YulFunctionCall","src":"10225:16:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10260:5:181"},{"name":"_5","nodeType":"YulIdentifier","src":"10267:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10256:3:181"},"nodeType":"YulFunctionCall","src":"10256:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10243:12:181"},"nodeType":"YulFunctionCall","src":"10243:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10218:6:181"},"nodeType":"YulFunctionCall","src":"10218:54:181"},"nodeType":"YulExpressionStatement","src":"10218:54:181"},{"nodeType":"YulAssignment","src":"10281:20:181","value":{"name":"value_1","nodeType":"YulIdentifier","src":"10294:7:181"},"variableNames":[{"name":"converted","nodeType":"YulIdentifier","src":"10281:9:181"}]}]},"name":"convert_t_struct$_TransferInfo_$29351_calldata_ptr_to_t_struct$_TransferInfo_$29351_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"9044:5:181","type":""}],"returnVariables":[{"name":"converted","nodeType":"YulTypedName","src":"9054:9:181","type":""}],"src":"8940:1367:181"},{"body":{"nodeType":"YulBlock","src":"10420:223:181","statements":[{"nodeType":"YulVariableDeclaration","src":"10430:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"10469:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10456:12:181"},"nodeType":"YulFunctionCall","src":"10456:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"10434:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10571:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10580:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10583:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10573:6:181"},"nodeType":"YulFunctionCall","src":"10573:12:181"},"nodeType":"YulExpressionStatement","src":"10573:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10504:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"10532:12:181"},"nodeType":"YulFunctionCall","src":"10532:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"10548:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10528:3:181"},"nodeType":"YulFunctionCall","src":"10528:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10563:3:181","type":"","value":"414"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10559:3:181"},"nodeType":"YulFunctionCall","src":"10559:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10524:3:181"},"nodeType":"YulFunctionCall","src":"10524:44:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10500:3:181"},"nodeType":"YulFunctionCall","src":"10500:69:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10493:6:181"},"nodeType":"YulFunctionCall","src":"10493:77:181"},"nodeType":"YulIf","src":"10490:97:181"},{"nodeType":"YulAssignment","src":"10596:41:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"10608:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10618:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10604:3:181"},"nodeType":"YulFunctionCall","src":"10604:33:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"10596:4:181"}]}]},"name":"access_calldata_tail_t_struct$_TransferInfo_$29351_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"10385:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"10395:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"10411:4:181","type":""}],"src":"10312:331:181"},{"body":{"nodeType":"YulBlock","src":"10724:424:181","statements":[{"nodeType":"YulVariableDeclaration","src":"10734:43:181","value":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"10773:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10760:12:181"},"nodeType":"YulFunctionCall","src":"10760:17:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"10738:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10866:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10875:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10878:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10868:6:181"},"nodeType":"YulFunctionCall","src":"10868:12:181"},"nodeType":"YulExpressionStatement","src":"10868:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10800:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"10828:12:181"},"nodeType":"YulFunctionCall","src":"10828:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"10844:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10824:3:181"},"nodeType":"YulFunctionCall","src":"10824:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10859:2:181","type":"","value":"30"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10855:3:181"},"nodeType":"YulFunctionCall","src":"10855:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10820:3:181"},"nodeType":"YulFunctionCall","src":"10820:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10796:3:181"},"nodeType":"YulFunctionCall","src":"10796:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10789:6:181"},"nodeType":"YulFunctionCall","src":"10789:76:181"},"nodeType":"YulIf","src":"10786:96:181"},{"nodeType":"YulVariableDeclaration","src":"10891:48:181","value":{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10910:18:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"10930:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10906:3:181"},"nodeType":"YulFunctionCall","src":"10906:33:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"10895:7:181","type":""}]},{"nodeType":"YulAssignment","src":"10948:31:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"10971:7:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10958:12:181"},"nodeType":"YulFunctionCall","src":"10958:21:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"10948:6:181"}]},{"nodeType":"YulAssignment","src":"10988:27:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"11001:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"11010:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10997:3:181"},"nodeType":"YulFunctionCall","src":"10997:18:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"10988:5:181"}]},{"body":{"nodeType":"YulBlock","src":"11058:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11067:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11070:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11060:6:181"},"nodeType":"YulFunctionCall","src":"11060:12:181"},"nodeType":"YulExpressionStatement","src":"11060:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"11030:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11038:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11027:2:181"},"nodeType":"YulFunctionCall","src":"11027:30:181"},"nodeType":"YulIf","src":"11024:50:181"},{"body":{"nodeType":"YulBlock","src":"11126:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11135:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11138:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11128:6:181"},"nodeType":"YulFunctionCall","src":"11128:12:181"},"nodeType":"YulExpressionStatement","src":"11128:12:181"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11090:5:181"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"11101:12:181"},"nodeType":"YulFunctionCall","src":"11101:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"11117:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11097:3:181"},"nodeType":"YulFunctionCall","src":"11097:27:181"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"11086:3:181"},"nodeType":"YulFunctionCall","src":"11086:39:181"},"nodeType":"YulIf","src":"11083:59:181"}]},"name":"calldata_access_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"10688:8:181","type":""},{"name":"ptr","nodeType":"YulTypedName","src":"10698:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"10706:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"10713:6:181","type":""}],"src":"10648:500:181"},{"body":{"nodeType":"YulBlock","src":"11219:200:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11236:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"11241:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11229:6:181"},"nodeType":"YulFunctionCall","src":"11229:19:181"},"nodeType":"YulExpressionStatement","src":"11229:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11274:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"11279:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11270:3:181"},"nodeType":"YulFunctionCall","src":"11270:14:181"},{"name":"start","nodeType":"YulIdentifier","src":"11286:5:181"},{"name":"length","nodeType":"YulIdentifier","src":"11293:6:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"11257:12:181"},"nodeType":"YulFunctionCall","src":"11257:43:181"},"nodeType":"YulExpressionStatement","src":"11257:43:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11324:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"11329:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11320:3:181"},"nodeType":"YulFunctionCall","src":"11320:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"11338:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11316:3:181"},"nodeType":"YulFunctionCall","src":"11316:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"11345:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11309:6:181"},"nodeType":"YulFunctionCall","src":"11309:38:181"},"nodeType":"YulExpressionStatement","src":"11309:38:181"},{"nodeType":"YulAssignment","src":"11356:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11371:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"11384:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11392:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11380:3:181"},"nodeType":"YulFunctionCall","src":"11380:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11401:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11397:3:181"},"nodeType":"YulFunctionCall","src":"11397:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11376:3:181"},"nodeType":"YulFunctionCall","src":"11376:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11367:3:181"},"nodeType":"YulFunctionCall","src":"11367:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"11408:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11363:3:181"},"nodeType":"YulFunctionCall","src":"11363:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"11356:3:181"}]}]},"name":"abi_encode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"11188:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"11195:6:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"11203:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"11211:3:181","type":""}],"src":"11153:266:181"},{"body":{"nodeType":"YulBlock","src":"11512:432:181","statements":[{"nodeType":"YulVariableDeclaration","src":"11522:43:181","value":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"11561:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11548:12:181"},"nodeType":"YulFunctionCall","src":"11548:17:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"11526:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"11654:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11663:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11666:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11656:6:181"},"nodeType":"YulFunctionCall","src":"11656:12:181"},"nodeType":"YulExpressionStatement","src":"11656:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"11588:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"11616:12:181"},"nodeType":"YulFunctionCall","src":"11616:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"11632:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11612:3:181"},"nodeType":"YulFunctionCall","src":"11612:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11647:2:181","type":"","value":"30"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11643:3:181"},"nodeType":"YulFunctionCall","src":"11643:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11608:3:181"},"nodeType":"YulFunctionCall","src":"11608:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11584:3:181"},"nodeType":"YulFunctionCall","src":"11584:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11577:6:181"},"nodeType":"YulFunctionCall","src":"11577:76:181"},"nodeType":"YulIf","src":"11574:96:181"},{"nodeType":"YulVariableDeclaration","src":"11679:48:181","value":{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"11698:18:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"11718:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11694:3:181"},"nodeType":"YulFunctionCall","src":"11694:33:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"11683:7:181","type":""}]},{"nodeType":"YulAssignment","src":"11736:31:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"11759:7:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11746:12:181"},"nodeType":"YulFunctionCall","src":"11746:21:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"11736:6:181"}]},{"nodeType":"YulAssignment","src":"11776:27:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"11789:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"11798:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11785:3:181"},"nodeType":"YulFunctionCall","src":"11785:18:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"11776:5:181"}]},{"body":{"nodeType":"YulBlock","src":"11846:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11855:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11858:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11848:6:181"},"nodeType":"YulFunctionCall","src":"11848:12:181"},"nodeType":"YulExpressionStatement","src":"11848:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"11818:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11826:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11815:2:181"},"nodeType":"YulFunctionCall","src":"11815:30:181"},"nodeType":"YulIf","src":"11812:50:181"},{"body":{"nodeType":"YulBlock","src":"11922:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11931:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11934:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11924:6:181"},"nodeType":"YulFunctionCall","src":"11924:12:181"},"nodeType":"YulExpressionStatement","src":"11924:12:181"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11878:5:181"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"11889:12:181"},"nodeType":"YulFunctionCall","src":"11889:14:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11909:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"11912:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11905:3:181"},"nodeType":"YulFunctionCall","src":"11905:14:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11885:3:181"},"nodeType":"YulFunctionCall","src":"11885:35:181"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"11874:3:181"},"nodeType":"YulFunctionCall","src":"11874:47:181"},"nodeType":"YulIf","src":"11871:67:181"}]},"name":"calldata_access_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"11476:8:181","type":""},{"name":"ptr","nodeType":"YulTypedName","src":"11486:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"11494:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"11501:6:181","type":""}],"src":"11424:520:181"},{"body":{"nodeType":"YulBlock","src":"12027:444:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12044:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"12049:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12037:6:181"},"nodeType":"YulFunctionCall","src":"12037:19:181"},"nodeType":"YulExpressionStatement","src":"12037:19:181"},{"nodeType":"YulVariableDeclaration","src":"12065:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12075:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12069:2:181","type":""}]},{"nodeType":"YulAssignment","src":"12088:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12099:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12104:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12095:3:181"},"nodeType":"YulFunctionCall","src":"12095:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"12088:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"12116:19:181","value":{"name":"value","nodeType":"YulIdentifier","src":"12130:5:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"12120:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12144:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12153:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"12148:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"12212:234:181","statements":[{"nodeType":"YulVariableDeclaration","src":"12226:35:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"12254:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12241:12:181"},"nodeType":"YulFunctionCall","src":"12241:20:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"12230:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"12299:7:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12274:24:181"},"nodeType":"YulFunctionCall","src":"12274:33:181"},"nodeType":"YulExpressionStatement","src":"12274:33:181"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12327:3:181"},{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"12336:7:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12353:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"12358:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12349:3:181"},"nodeType":"YulFunctionCall","src":"12349:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"12362:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12345:3:181"},"nodeType":"YulFunctionCall","src":"12345:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12332:3:181"},"nodeType":"YulFunctionCall","src":"12332:33:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12320:6:181"},"nodeType":"YulFunctionCall","src":"12320:46:181"},"nodeType":"YulExpressionStatement","src":"12320:46:181"},{"nodeType":"YulAssignment","src":"12379:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12390:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12395:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12386:3:181"},"nodeType":"YulFunctionCall","src":"12386:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"12379:3:181"}]},{"nodeType":"YulAssignment","src":"12411:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"12425:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12433:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12421:3:181"},"nodeType":"YulFunctionCall","src":"12421:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"12411:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"12174:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"12177:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12171:2:181"},"nodeType":"YulFunctionCall","src":"12171:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"12185:18:181","statements":[{"nodeType":"YulAssignment","src":"12187:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"12196:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"12199:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12192:3:181"},"nodeType":"YulFunctionCall","src":"12192:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"12187:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"12167:3:181","statements":[]},"src":"12163:283:181"},{"nodeType":"YulAssignment","src":"12455:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"12462:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"12455:3:181"}]}]},"name":"abi_encode_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"11996:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"12003:6:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"12011:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"12019:3:181","type":""}],"src":"11949:522:181"},{"body":{"nodeType":"YulBlock","src":"12561:629:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12578:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"12583:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12571:6:181"},"nodeType":"YulFunctionCall","src":"12571:19:181"},"nodeType":"YulExpressionStatement","src":"12571:19:181"},{"nodeType":"YulVariableDeclaration","src":"12599:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12609:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12603:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12622:31:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12645:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12650:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12641:3:181"},"nodeType":"YulFunctionCall","src":"12641:12:181"},"variables":[{"name":"updated_pos","nodeType":"YulTypedName","src":"12626:11:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12662:24:181","value":{"name":"updated_pos","nodeType":"YulIdentifier","src":"12675:11:181"},"variables":[{"name":"pos_1","nodeType":"YulTypedName","src":"12666:5:181","type":""}]},{"nodeType":"YulAssignment","src":"12695:18:181","value":{"name":"updated_pos","nodeType":"YulIdentifier","src":"12702:11:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"12695:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"12722:38:181","value":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"12738:5:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12749:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"12752:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12745:3:181"},"nodeType":"YulFunctionCall","src":"12745:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12734:3:181"},"nodeType":"YulFunctionCall","src":"12734:26:181"},"variables":[{"name":"tail","nodeType":"YulTypedName","src":"12726:4:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12769:19:181","value":{"name":"value","nodeType":"YulIdentifier","src":"12783:5:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"12773:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12797:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12806:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"12801:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"12865:299:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12886:3:181"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"12895:4:181"},{"name":"pos_1","nodeType":"YulIdentifier","src":"12901:5:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12891:3:181"},"nodeType":"YulFunctionCall","src":"12891:16:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12879:6:181"},"nodeType":"YulFunctionCall","src":"12879:29:181"},"nodeType":"YulExpressionStatement","src":"12879:29:181"},{"nodeType":"YulVariableDeclaration","src":"12921:81:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12988:5:181"},{"name":"srcPtr","nodeType":"YulIdentifier","src":"12995:6:181"}],"functionName":{"name":"calldata_access_bytes_calldata","nodeType":"YulIdentifier","src":"12957:30:181"},"nodeType":"YulFunctionCall","src":"12957:45:181"},"variables":[{"name":"elementValue0","nodeType":"YulTypedName","src":"12925:13:181","type":""},{"name":"elementValue1","nodeType":"YulTypedName","src":"12940:13:181","type":""}]},{"nodeType":"YulAssignment","src":"13015:69:181","value":{"arguments":[{"name":"elementValue0","nodeType":"YulIdentifier","src":"13049:13:181"},{"name":"elementValue1","nodeType":"YulIdentifier","src":"13064:13:181"},{"name":"tail","nodeType":"YulIdentifier","src":"13079:4:181"}],"functionName":{"name":"abi_encode_bytes_calldata","nodeType":"YulIdentifier","src":"13023:25:181"},"nodeType":"YulFunctionCall","src":"13023:61:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13015:4:181"}]},{"nodeType":"YulAssignment","src":"13097:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"13111:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13119:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13107:3:181"},"nodeType":"YulFunctionCall","src":"13107:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"13097:6:181"}]},{"nodeType":"YulAssignment","src":"13135:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13146:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13151:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13142:3:181"},"nodeType":"YulFunctionCall","src":"13142:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"13135:3:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"12827:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"12830:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12824:2:181"},"nodeType":"YulFunctionCall","src":"12824:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"12838:18:181","statements":[{"nodeType":"YulAssignment","src":"12840:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"12849:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"12852:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12845:3:181"},"nodeType":"YulFunctionCall","src":"12845:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"12840:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"12820:3:181","statements":[]},"src":"12816:348:181"},{"nodeType":"YulAssignment","src":"13173:11:181","value":{"name":"tail","nodeType":"YulIdentifier","src":"13180:4:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"13173:3:181"}]}]},"name":"abi_encode_array_bytes_calldata_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"12530:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"12537:6:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"12545:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"12553:3:181","type":""}],"src":"12476:714:181"},{"body":{"nodeType":"YulBlock","src":"13442:2991:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13459:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13470:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13452:6:181"},"nodeType":"YulFunctionCall","src":"13452:22:181"},"nodeType":"YulExpressionStatement","src":"13452:22:181"},{"nodeType":"YulVariableDeclaration","src":"13483:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13493:3:181","type":"","value":"288"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13487:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13505:46:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13544:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13531:12:181"},"nodeType":"YulFunctionCall","src":"13531:20:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"13509:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"13639:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13648:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13651:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13641:6:181"},"nodeType":"YulFunctionCall","src":"13641:12:181"},"nodeType":"YulExpressionStatement","src":"13641:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"13574:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"13602:12:181"},"nodeType":"YulFunctionCall","src":"13602:14:181"},{"name":"value0","nodeType":"YulIdentifier","src":"13618:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13598:3:181"},"nodeType":"YulFunctionCall","src":"13598:27:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13631:3:181","type":"","value":"414"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"13627:3:181"},"nodeType":"YulFunctionCall","src":"13627:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13594:3:181"},"nodeType":"YulFunctionCall","src":"13594:42:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13570:3:181"},"nodeType":"YulFunctionCall","src":"13570:67:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13563:6:181"},"nodeType":"YulFunctionCall","src":"13563:75:181"},"nodeType":"YulIf","src":"13560:95:181"},{"nodeType":"YulVariableDeclaration","src":"13664:44:181","value":{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"13681:18:181"},{"name":"value0","nodeType":"YulIdentifier","src":"13701:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13677:3:181"},"nodeType":"YulFunctionCall","src":"13677:31:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13668:5:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13728:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13739:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13724:3:181"},"nodeType":"YulFunctionCall","src":"13724:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"13745:4:181","type":"","value":"0xa0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13717:6:181"},"nodeType":"YulFunctionCall","src":"13717:33:181"},"nodeType":"YulExpressionStatement","src":"13717:33:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13795:5:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"13777:17:181"},"nodeType":"YulFunctionCall","src":"13777:24:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13807:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13818:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13803:3:181"},"nodeType":"YulFunctionCall","src":"13803:18:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"13759:17:181"},"nodeType":"YulFunctionCall","src":"13759:63:181"},"nodeType":"YulExpressionStatement","src":"13759:63:181"},{"nodeType":"YulVariableDeclaration","src":"13831:55:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13873:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"13880:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13869:3:181"},"nodeType":"YulFunctionCall","src":"13869:16:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"13851:17:181"},"nodeType":"YulFunctionCall","src":"13851:35:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"13835:12:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13895:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13905:3:181","type":"","value":"320"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"13899:2:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"13935:12:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13953:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"13964:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13949:3:181"},"nodeType":"YulFunctionCall","src":"13949:18:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"13917:17:181"},"nodeType":"YulFunctionCall","src":"13917:51:181"},"nodeType":"YulExpressionStatement","src":"13917:51:181"},{"nodeType":"YulVariableDeclaration","src":"13977:57:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14021:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"14028:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14017:3:181"},"nodeType":"YulFunctionCall","src":"14017:16:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"13999:17:181"},"nodeType":"YulFunctionCall","src":"13999:35:181"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"13981:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"14043:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14053:3:181","type":"","value":"352"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"14047:2:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"14083:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14103:9:181"},{"name":"_3","nodeType":"YulIdentifier","src":"14114:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14099:3:181"},"nodeType":"YulFunctionCall","src":"14099:18:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"14065:17:181"},"nodeType":"YulFunctionCall","src":"14065:53:181"},"nodeType":"YulExpressionStatement","src":"14065:53:181"},{"nodeType":"YulVariableDeclaration","src":"14127:58:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14172:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"14179:4:181","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14168:3:181"},"nodeType":"YulFunctionCall","src":"14168:16:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"14149:18:181"},"nodeType":"YulFunctionCall","src":"14149:36:181"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"14131:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"14194:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14204:3:181","type":"","value":"384"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"14198:2:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"14235:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14255:9:181"},{"name":"_4","nodeType":"YulIdentifier","src":"14266:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14251:3:181"},"nodeType":"YulFunctionCall","src":"14251:18:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"14216:18:181"},"nodeType":"YulFunctionCall","src":"14216:54:181"},"nodeType":"YulExpressionStatement","src":"14216:54:181"},{"nodeType":"YulVariableDeclaration","src":"14279:57:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14324:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"14331:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14320:3:181"},"nodeType":"YulFunctionCall","src":"14320:15:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"14301:18:181"},"nodeType":"YulFunctionCall","src":"14301:35:181"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"14283:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"14345:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14355:6:181","type":"","value":"0x01a0"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"14349:2:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"14389:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14409:9:181"},{"name":"_5","nodeType":"YulIdentifier","src":"14420:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14405:3:181"},"nodeType":"YulFunctionCall","src":"14405:18:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"14370:18:181"},"nodeType":"YulFunctionCall","src":"14370:54:181"},"nodeType":"YulExpressionStatement","src":"14370:54:181"},{"nodeType":"YulVariableDeclaration","src":"14433:55:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14475:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"14482:4:181","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14471:3:181"},"nodeType":"YulFunctionCall","src":"14471:16:181"}],"functionName":{"name":"abi_decode_bool","nodeType":"YulIdentifier","src":"14455:15:181"},"nodeType":"YulFunctionCall","src":"14455:33:181"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"14437:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"14513:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14533:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14544:3:181","type":"","value":"448"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14529:3:181"},"nodeType":"YulFunctionCall","src":"14529:19:181"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"14497:15:181"},"nodeType":"YulFunctionCall","src":"14497:52:181"},"nodeType":"YulExpressionStatement","src":"14497:52:181"},{"nodeType":"YulVariableDeclaration","src":"14558:91:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14625:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14636:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"14643:4:181","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14632:3:181"},"nodeType":"YulFunctionCall","src":"14632:16:181"}],"functionName":{"name":"calldata_access_bytes_calldata","nodeType":"YulIdentifier","src":"14594:30:181"},"nodeType":"YulFunctionCall","src":"14594:55:181"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"14562:14:181","type":""},{"name":"memberValue1","nodeType":"YulTypedName","src":"14578:12:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14669:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14680:3:181","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14665:3:181"},"nodeType":"YulFunctionCall","src":"14665:19:181"},{"name":"_5","nodeType":"YulIdentifier","src":"14686:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14658:6:181"},"nodeType":"YulFunctionCall","src":"14658:31:181"},"nodeType":"YulExpressionStatement","src":"14658:31:181"},{"nodeType":"YulVariableDeclaration","src":"14698:90:181","value":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"14738:14:181"},{"name":"memberValue1","nodeType":"YulIdentifier","src":"14754:12:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14772:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14783:3:181","type":"","value":"704"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14768:3:181"},"nodeType":"YulFunctionCall","src":"14768:19:181"}],"functionName":{"name":"abi_encode_bytes_calldata","nodeType":"YulIdentifier","src":"14712:25:181"},"nodeType":"YulFunctionCall","src":"14712:76:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"14702:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14808:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14819:3:181","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14804:3:181"},"nodeType":"YulFunctionCall","src":"14804:19:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14842:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"14849:4:181","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14838:3:181"},"nodeType":"YulFunctionCall","src":"14838:16:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14825:12:181"},"nodeType":"YulFunctionCall","src":"14825:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14797:6:181"},"nodeType":"YulFunctionCall","src":"14797:59:181"},"nodeType":"YulExpressionStatement","src":"14797:59:181"},{"nodeType":"YulVariableDeclaration","src":"14865:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14875:6:181","type":"","value":"0x0100"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"14869:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"14890:56:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14935:5:181"},{"name":"_6","nodeType":"YulIdentifier","src":"14942:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14931:3:181"},"nodeType":"YulFunctionCall","src":"14931:14:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"14912:18:181"},"nodeType":"YulFunctionCall","src":"14912:34:181"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"14894:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"14974:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14994:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15005:3:181","type":"","value":"544"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14990:3:181"},"nodeType":"YulFunctionCall","src":"14990:19:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"14955:18:181"},"nodeType":"YulFunctionCall","src":"14955:55:181"},"nodeType":"YulExpressionStatement","src":"14955:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15030:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15041:3:181","type":"","value":"576"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15026:3:181"},"nodeType":"YulFunctionCall","src":"15026:19:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15064:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"15071:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15060:3:181"},"nodeType":"YulFunctionCall","src":"15060:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15047:12:181"},"nodeType":"YulFunctionCall","src":"15047:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15019:6:181"},"nodeType":"YulFunctionCall","src":"15019:57:181"},"nodeType":"YulExpressionStatement","src":"15019:57:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15096:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15107:3:181","type":"","value":"608"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15092:3:181"},"nodeType":"YulFunctionCall","src":"15092:19:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15130:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"15137:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15126:3:181"},"nodeType":"YulFunctionCall","src":"15126:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15113:12:181"},"nodeType":"YulFunctionCall","src":"15113:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15085:6:181"},"nodeType":"YulFunctionCall","src":"15085:57:181"},"nodeType":"YulExpressionStatement","src":"15085:57:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15162:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15173:3:181","type":"","value":"640"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15158:3:181"},"nodeType":"YulFunctionCall","src":"15158:19:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15196:5:181"},{"name":"_3","nodeType":"YulIdentifier","src":"15203:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15192:3:181"},"nodeType":"YulFunctionCall","src":"15192:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15179:12:181"},"nodeType":"YulFunctionCall","src":"15179:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15151:6:181"},"nodeType":"YulFunctionCall","src":"15151:57:181"},"nodeType":"YulExpressionStatement","src":"15151:57:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15228:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15239:3:181","type":"","value":"672"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15224:3:181"},"nodeType":"YulFunctionCall","src":"15224:19:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15262:5:181"},{"name":"_4","nodeType":"YulIdentifier","src":"15269:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15258:3:181"},"nodeType":"YulFunctionCall","src":"15258:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15245:12:181"},"nodeType":"YulFunctionCall","src":"15245:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15217:6:181"},"nodeType":"YulFunctionCall","src":"15217:57:181"},"nodeType":"YulExpressionStatement","src":"15217:57:181"},{"nodeType":"YulVariableDeclaration","src":"15283:107:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15364:6:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15376:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"15384:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15372:3:181"},"nodeType":"YulFunctionCall","src":"15372:17:181"}],"functionName":{"name":"calldata_access_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15321:42:181"},"nodeType":"YulFunctionCall","src":"15321:69:181"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"15287:14:181","type":""},{"name":"memberValue1_1","nodeType":"YulTypedName","src":"15303:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15399:18:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15413:3:181","type":"","value":"127"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"15409:3:181"},"nodeType":"YulFunctionCall","src":"15409:8:181"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"15403:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15437:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15448:4:181","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15433:3:181"},"nodeType":"YulFunctionCall","src":"15433:20:181"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"15463:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"15471:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15459:3:181"},"nodeType":"YulFunctionCall","src":"15459:22:181"},{"name":"_7","nodeType":"YulIdentifier","src":"15483:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15455:3:181"},"nodeType":"YulFunctionCall","src":"15455:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15426:6:181"},"nodeType":"YulFunctionCall","src":"15426:61:181"},"nodeType":"YulExpressionStatement","src":"15426:61:181"},{"nodeType":"YulVariableDeclaration","src":"15496:91:181","value":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"15548:14:181"},{"name":"memberValue1_1","nodeType":"YulIdentifier","src":"15564:14:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"15580:6:181"}],"functionName":{"name":"abi_encode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15510:37:181"},"nodeType":"YulFunctionCall","src":"15510:77:181"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"15500:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15596:107:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15677:6:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15689:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"15697:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15685:3:181"},"nodeType":"YulFunctionCall","src":"15685:17:181"}],"functionName":{"name":"calldata_access_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15634:42:181"},"nodeType":"YulFunctionCall","src":"15634:69:181"},"variables":[{"name":"memberValue0_8","nodeType":"YulTypedName","src":"15600:14:181","type":""},{"name":"memberValue1_2","nodeType":"YulTypedName","src":"15616:14:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15723:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15734:4:181","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15719:3:181"},"nodeType":"YulFunctionCall","src":"15719:20:181"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"15749:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"15757:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15745:3:181"},"nodeType":"YulFunctionCall","src":"15745:22:181"},{"name":"_7","nodeType":"YulIdentifier","src":"15769:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15741:3:181"},"nodeType":"YulFunctionCall","src":"15741:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15712:6:181"},"nodeType":"YulFunctionCall","src":"15712:61:181"},"nodeType":"YulExpressionStatement","src":"15712:61:181"},{"nodeType":"YulVariableDeclaration","src":"15782:98:181","value":{"arguments":[{"name":"memberValue0_8","nodeType":"YulIdentifier","src":"15841:14:181"},{"name":"memberValue1_2","nodeType":"YulIdentifier","src":"15857:14:181"},{"name":"tail_2","nodeType":"YulIdentifier","src":"15873:6:181"}],"functionName":{"name":"abi_encode_array_bytes_calldata_dyn_calldata","nodeType":"YulIdentifier","src":"15796:44:181"},"nodeType":"YulFunctionCall","src":"15796:84:181"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"15786:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15889:59:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15934:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"15942:4:181","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15930:3:181"},"nodeType":"YulFunctionCall","src":"15930:17:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"15911:18:181"},"nodeType":"YulFunctionCall","src":"15911:37:181"},"variables":[{"name":"memberValue0_9","nodeType":"YulTypedName","src":"15893:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_9","nodeType":"YulIdentifier","src":"15976:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15996:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16007:4:181","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15992:3:181"},"nodeType":"YulFunctionCall","src":"15992:20:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"15957:18:181"},"nodeType":"YulFunctionCall","src":"15957:56:181"},"nodeType":"YulExpressionStatement","src":"15957:56:181"},{"nodeType":"YulVariableDeclaration","src":"16022:95:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16092:6:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16104:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"16112:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16100:3:181"},"nodeType":"YulFunctionCall","src":"16100:16:181"}],"functionName":{"name":"calldata_access_bytes_calldata","nodeType":"YulIdentifier","src":"16061:30:181"},"nodeType":"YulFunctionCall","src":"16061:56:181"},"variables":[{"name":"memberValue0_10","nodeType":"YulTypedName","src":"16026:15:181","type":""},{"name":"memberValue1_3","nodeType":"YulTypedName","src":"16043:14:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16137:9:181"},{"name":"_6","nodeType":"YulIdentifier","src":"16148:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16133:3:181"},"nodeType":"YulFunctionCall","src":"16133:18:181"},{"arguments":[{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"16161:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"16169:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16157:3:181"},"nodeType":"YulFunctionCall","src":"16157:22:181"},{"name":"_7","nodeType":"YulIdentifier","src":"16181:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16153:3:181"},"nodeType":"YulFunctionCall","src":"16153:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16126:6:181"},"nodeType":"YulFunctionCall","src":"16126:59:181"},"nodeType":"YulExpressionStatement","src":"16126:59:181"},{"nodeType":"YulAssignment","src":"16194:74:181","value":{"arguments":[{"name":"memberValue0_10","nodeType":"YulIdentifier","src":"16228:15:181"},{"name":"memberValue1_3","nodeType":"YulIdentifier","src":"16245:14:181"},{"name":"tail_3","nodeType":"YulIdentifier","src":"16261:6:181"}],"functionName":{"name":"abi_encode_bytes_calldata","nodeType":"YulIdentifier","src":"16202:25:181"},"nodeType":"YulFunctionCall","src":"16202:66:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16194:4:181"}]},{"expression":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"16296:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16308:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16319:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16304:3:181"},"nodeType":"YulFunctionCall","src":"16304:20:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"16277:18:181"},"nodeType":"YulFunctionCall","src":"16277:48:181"},"nodeType":"YulExpressionStatement","src":"16277:48:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16345:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16356:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16341:3:181"},"nodeType":"YulFunctionCall","src":"16341:20:181"},{"name":"value2","nodeType":"YulIdentifier","src":"16363:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16334:6:181"},"nodeType":"YulFunctionCall","src":"16334:36:181"},"nodeType":"YulExpressionStatement","src":"16334:36:181"},{"expression":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"16398:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16410:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16421:4:181","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16406:3:181"},"nodeType":"YulFunctionCall","src":"16406:20:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"16379:18:181"},"nodeType":"YulFunctionCall","src":"16379:48:181"},"nodeType":"YulExpressionStatement","src":"16379:48:181"}]},"name":"abi_encode_tuple_t_struct$_ExecuteArgs_$29365_calldata_ptr_t_address_t_uint256_t_address__to_t_struct$_ExecuteArgs_$29365_memory_ptr_t_address_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13387:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13398:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13406:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13414:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13422:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13433:4:181","type":""}],"src":"13195:3238:181"},{"body":{"nodeType":"YulBlock","src":"16593:235:181","statements":[{"nodeType":"YulAssignment","src":"16603:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16615:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16626:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16611:3:181"},"nodeType":"YulFunctionCall","src":"16611:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16603:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16645:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16660:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"16668:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16656:3:181"},"nodeType":"YulFunctionCall","src":"16656:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16638:6:181"},"nodeType":"YulFunctionCall","src":"16638:42:181"},"nodeType":"YulExpressionStatement","src":"16638:42:181"},{"nodeType":"YulVariableDeclaration","src":"16689:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16707:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"16712:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16703:3:181"},"nodeType":"YulFunctionCall","src":"16703:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"16716:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16699:3:181"},"nodeType":"YulFunctionCall","src":"16699:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"16693:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16738:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16749:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16734:3:181"},"nodeType":"YulFunctionCall","src":"16734:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"16758:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"16766:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16754:3:181"},"nodeType":"YulFunctionCall","src":"16754:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16727:6:181"},"nodeType":"YulFunctionCall","src":"16727:43:181"},"nodeType":"YulExpressionStatement","src":"16727:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16790:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16801:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16786:3:181"},"nodeType":"YulFunctionCall","src":"16786:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"16810:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"16818:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16806:3:181"},"nodeType":"YulFunctionCall","src":"16806:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16779:6:181"},"nodeType":"YulFunctionCall","src":"16779:43:181"},"nodeType":"YulExpressionStatement","src":"16779:43:181"}]},"name":"abi_encode_tuple_t_uint32_t_address_t_address__to_t_uint32_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16546:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16557:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16565:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16573:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16584:4:181","type":""}],"src":"16438:390:181"},{"body":{"nodeType":"YulBlock","src":"16962:145:181","statements":[{"nodeType":"YulAssignment","src":"16972:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16984:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16995:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16980:3:181"},"nodeType":"YulFunctionCall","src":"16980:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16972:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17014:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"17025:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17007:6:181"},"nodeType":"YulFunctionCall","src":"17007:25:181"},"nodeType":"YulExpressionStatement","src":"17007:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17052:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17063:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17048:3:181"},"nodeType":"YulFunctionCall","src":"17048:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"17072:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17088:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"17093:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"17084:3:181"},"nodeType":"YulFunctionCall","src":"17084:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"17097:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17080:3:181"},"nodeType":"YulFunctionCall","src":"17080:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17068:3:181"},"nodeType":"YulFunctionCall","src":"17068:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17041:6:181"},"nodeType":"YulFunctionCall","src":"17041:60:181"},"nodeType":"YulExpressionStatement","src":"17041:60:181"}]},"name":"abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16923:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16934:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16942:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16953:4:181","type":""}],"src":"16833:274:181"},{"body":{"nodeType":"YulBlock","src":"17178:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"17188:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"17197:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"17192:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"17257:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"17282:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"17287:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17278:3:181"},"nodeType":"YulFunctionCall","src":"17278:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"17301:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"17306:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17297:3:181"},"nodeType":"YulFunctionCall","src":"17297:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17291:5:181"},"nodeType":"YulFunctionCall","src":"17291:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17271:6:181"},"nodeType":"YulFunctionCall","src":"17271:39:181"},"nodeType":"YulExpressionStatement","src":"17271:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17218:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"17221:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17215:2:181"},"nodeType":"YulFunctionCall","src":"17215:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"17229:19:181","statements":[{"nodeType":"YulAssignment","src":"17231:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17240:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"17243:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17236:3:181"},"nodeType":"YulFunctionCall","src":"17236:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"17231:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"17211:3:181","statements":[]},"src":"17207:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"17340:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"17345:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17336:3:181"},"nodeType":"YulFunctionCall","src":"17336:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"17354:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17329:6:181"},"nodeType":"YulFunctionCall","src":"17329:27:181"},"nodeType":"YulExpressionStatement","src":"17329:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"17156:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"17161:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"17166:6:181","type":""}],"src":"17112:250:181"},{"body":{"nodeType":"YulBlock","src":"17416:221:181","statements":[{"nodeType":"YulVariableDeclaration","src":"17426:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17446:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17440:5:181"},"nodeType":"YulFunctionCall","src":"17440:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"17430:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17468:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"17473:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17461:6:181"},"nodeType":"YulFunctionCall","src":"17461:19:181"},"nodeType":"YulExpressionStatement","src":"17461:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17528:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"17535:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17524:3:181"},"nodeType":"YulFunctionCall","src":"17524:16:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17546:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"17551:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17542:3:181"},"nodeType":"YulFunctionCall","src":"17542:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"17558:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"17489:34:181"},"nodeType":"YulFunctionCall","src":"17489:76:181"},"nodeType":"YulExpressionStatement","src":"17489:76:181"},{"nodeType":"YulAssignment","src":"17574:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17589:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"17602:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"17610:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17598:3:181"},"nodeType":"YulFunctionCall","src":"17598:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17619:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"17615:3:181"},"nodeType":"YulFunctionCall","src":"17615:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17594:3:181"},"nodeType":"YulFunctionCall","src":"17594:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17585:3:181"},"nodeType":"YulFunctionCall","src":"17585:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"17626:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17581:3:181"},"nodeType":"YulFunctionCall","src":"17581:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"17574:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"17393:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"17400:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"17408:3:181","type":""}],"src":"17367:270:181"},{"body":{"nodeType":"YulBlock","src":"17705:1307:181","statements":[{"nodeType":"YulVariableDeclaration","src":"17715:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"17725:6:181","type":"","value":"0x01a0"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"17719:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17764:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17758:5:181"},"nodeType":"YulFunctionCall","src":"17758:12:181"},{"name":"pos","nodeType":"YulIdentifier","src":"17772:3:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"17740:17:181"},"nodeType":"YulFunctionCall","src":"17740:36:181"},"nodeType":"YulExpressionStatement","src":"17740:36:181"},{"nodeType":"YulVariableDeclaration","src":"17785:43:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17815:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"17822:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17811:3:181"},"nodeType":"YulFunctionCall","src":"17811:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17805:5:181"},"nodeType":"YulFunctionCall","src":"17805:23:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"17789:12:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"17855:12:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17873:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"17878:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17869:3:181"},"nodeType":"YulFunctionCall","src":"17869:14:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"17837:17:181"},"nodeType":"YulFunctionCall","src":"17837:47:181"},"nodeType":"YulExpressionStatement","src":"17837:47:181"},{"nodeType":"YulVariableDeclaration","src":"17893:45:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17925:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"17932:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17921:3:181"},"nodeType":"YulFunctionCall","src":"17921:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17915:5:181"},"nodeType":"YulFunctionCall","src":"17915:23:181"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"17897:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"17965:14:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17985:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"17990:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17981:3:181"},"nodeType":"YulFunctionCall","src":"17981:14:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"17947:17:181"},"nodeType":"YulFunctionCall","src":"17947:49:181"},"nodeType":"YulExpressionStatement","src":"17947:49:181"},{"nodeType":"YulVariableDeclaration","src":"18005:45:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18037:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"18044:4:181","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18033:3:181"},"nodeType":"YulFunctionCall","src":"18033:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18027:5:181"},"nodeType":"YulFunctionCall","src":"18027:23:181"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"18009:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"18078:14:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18098:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"18103:4:181","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18094:3:181"},"nodeType":"YulFunctionCall","src":"18094:14:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"18059:18:181"},"nodeType":"YulFunctionCall","src":"18059:50:181"},"nodeType":"YulExpressionStatement","src":"18059:50:181"},{"nodeType":"YulVariableDeclaration","src":"18118:45:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18150:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"18157:4:181","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18146:3:181"},"nodeType":"YulFunctionCall","src":"18146:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18140:5:181"},"nodeType":"YulFunctionCall","src":"18140:23:181"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"18122:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"18191:14:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18211:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"18216:4:181","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18207:3:181"},"nodeType":"YulFunctionCall","src":"18207:14:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"18172:18:181"},"nodeType":"YulFunctionCall","src":"18172:50:181"},"nodeType":"YulExpressionStatement","src":"18172:50:181"},{"nodeType":"YulVariableDeclaration","src":"18231:45:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18263:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"18270:4:181","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18259:3:181"},"nodeType":"YulFunctionCall","src":"18259:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18253:5:181"},"nodeType":"YulFunctionCall","src":"18253:23:181"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"18235:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"18301:14:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18321:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"18326:4:181","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18317:3:181"},"nodeType":"YulFunctionCall","src":"18317:14:181"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"18285:15:181"},"nodeType":"YulFunctionCall","src":"18285:47:181"},"nodeType":"YulExpressionStatement","src":"18285:47:181"},{"nodeType":"YulVariableDeclaration","src":"18341:45:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18373:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"18380:4:181","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18369:3:181"},"nodeType":"YulFunctionCall","src":"18369:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18363:5:181"},"nodeType":"YulFunctionCall","src":"18363:23:181"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"18345:14:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18406:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"18411:4:181","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18402:3:181"},"nodeType":"YulFunctionCall","src":"18402:14:181"},{"name":"_1","nodeType":"YulIdentifier","src":"18418:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18395:6:181"},"nodeType":"YulFunctionCall","src":"18395:26:181"},"nodeType":"YulExpressionStatement","src":"18395:26:181"},{"nodeType":"YulVariableDeclaration","src":"18430:58:181","value":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"18459:14:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18479:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"18484:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18475:3:181"},"nodeType":"YulFunctionCall","src":"18475:12:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"18442:16:181"},"nodeType":"YulFunctionCall","src":"18442:46:181"},"variables":[{"name":"tail","nodeType":"YulTypedName","src":"18434:4:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18508:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"18513:4:181","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18504:3:181"},"nodeType":"YulFunctionCall","src":"18504:14:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18530:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"18537:4:181","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18526:3:181"},"nodeType":"YulFunctionCall","src":"18526:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18520:5:181"},"nodeType":"YulFunctionCall","src":"18520:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18497:6:181"},"nodeType":"YulFunctionCall","src":"18497:47:181"},"nodeType":"YulExpressionStatement","src":"18497:47:181"},{"nodeType":"YulVariableDeclaration","src":"18553:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"18563:6:181","type":"","value":"0x0100"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"18557:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18578:43:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18610:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"18617:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18606:3:181"},"nodeType":"YulFunctionCall","src":"18606:14:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18600:5:181"},"nodeType":"YulFunctionCall","src":"18600:21:181"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"18582:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"18649:14:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18669:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"18674:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18665:3:181"},"nodeType":"YulFunctionCall","src":"18665:12:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"18630:18:181"},"nodeType":"YulFunctionCall","src":"18630:48:181"},"nodeType":"YulExpressionStatement","src":"18630:48:181"},{"nodeType":"YulVariableDeclaration","src":"18687:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"18697:6:181","type":"","value":"0x0120"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"18691:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18723:3:181"},{"name":"_3","nodeType":"YulIdentifier","src":"18728:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18719:3:181"},"nodeType":"YulFunctionCall","src":"18719:12:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18743:5:181"},{"name":"_3","nodeType":"YulIdentifier","src":"18750:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18739:3:181"},"nodeType":"YulFunctionCall","src":"18739:14:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18733:5:181"},"nodeType":"YulFunctionCall","src":"18733:21:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18712:6:181"},"nodeType":"YulFunctionCall","src":"18712:43:181"},"nodeType":"YulExpressionStatement","src":"18712:43:181"},{"nodeType":"YulVariableDeclaration","src":"18764:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"18774:6:181","type":"","value":"0x0140"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"18768:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18800:3:181"},{"name":"_4","nodeType":"YulIdentifier","src":"18805:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18796:3:181"},"nodeType":"YulFunctionCall","src":"18796:12:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18820:5:181"},{"name":"_4","nodeType":"YulIdentifier","src":"18827:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18816:3:181"},"nodeType":"YulFunctionCall","src":"18816:14:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18810:5:181"},"nodeType":"YulFunctionCall","src":"18810:21:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18789:6:181"},"nodeType":"YulFunctionCall","src":"18789:43:181"},"nodeType":"YulExpressionStatement","src":"18789:43:181"},{"nodeType":"YulVariableDeclaration","src":"18841:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"18851:6:181","type":"","value":"0x0160"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"18845:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18877:3:181"},{"name":"_5","nodeType":"YulIdentifier","src":"18882:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18873:3:181"},"nodeType":"YulFunctionCall","src":"18873:12:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18897:5:181"},{"name":"_5","nodeType":"YulIdentifier","src":"18904:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18893:3:181"},"nodeType":"YulFunctionCall","src":"18893:14:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18887:5:181"},"nodeType":"YulFunctionCall","src":"18887:21:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18866:6:181"},"nodeType":"YulFunctionCall","src":"18866:43:181"},"nodeType":"YulExpressionStatement","src":"18866:43:181"},{"nodeType":"YulVariableDeclaration","src":"18918:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"18928:6:181","type":"","value":"0x0180"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"18922:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18954:3:181"},{"name":"_6","nodeType":"YulIdentifier","src":"18959:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18950:3:181"},"nodeType":"YulFunctionCall","src":"18950:12:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18974:5:181"},{"name":"_6","nodeType":"YulIdentifier","src":"18981:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18970:3:181"},"nodeType":"YulFunctionCall","src":"18970:14:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18964:5:181"},"nodeType":"YulFunctionCall","src":"18964:21:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18943:6:181"},"nodeType":"YulFunctionCall","src":"18943:43:181"},"nodeType":"YulExpressionStatement","src":"18943:43:181"},{"nodeType":"YulAssignment","src":"18995:11:181","value":{"name":"tail","nodeType":"YulIdentifier","src":"19002:4:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"18995:3:181"}]}]},"name":"abi_encode_struct_TransferInfo","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"17682:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"17689:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"17697:3:181","type":""}],"src":"17642:1370:181"},{"body":{"nodeType":"YulBlock","src":"19180:112:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19197:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19208:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19190:6:181"},"nodeType":"YulFunctionCall","src":"19190:21:181"},"nodeType":"YulExpressionStatement","src":"19190:21:181"},{"nodeType":"YulAssignment","src":"19220:66:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19259:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19271:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19282:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19267:3:181"},"nodeType":"YulFunctionCall","src":"19267:18:181"}],"functionName":{"name":"abi_encode_struct_TransferInfo","nodeType":"YulIdentifier","src":"19228:30:181"},"nodeType":"YulFunctionCall","src":"19228:58:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19220:4:181"}]}]},"name":"abi_encode_tuple_t_struct$_TransferInfo_$29351_memory_ptr__to_t_struct$_TransferInfo_$29351_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19149:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19160:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19171:4:181","type":""}],"src":"19017:275:181"},{"body":{"nodeType":"YulBlock","src":"19407:435:181","statements":[{"nodeType":"YulVariableDeclaration","src":"19417:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"19456:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"19443:12:181"},"nodeType":"YulFunctionCall","src":"19443:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"19421:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"19557:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19566:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19569:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19559:6:181"},"nodeType":"YulFunctionCall","src":"19559:12:181"},"nodeType":"YulExpressionStatement","src":"19559:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"19491:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"19519:12:181"},"nodeType":"YulFunctionCall","src":"19519:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"19535:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19515:3:181"},"nodeType":"YulFunctionCall","src":"19515:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19550:2:181","type":"","value":"30"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"19546:3:181"},"nodeType":"YulFunctionCall","src":"19546:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19511:3:181"},"nodeType":"YulFunctionCall","src":"19511:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"19487:3:181"},"nodeType":"YulFunctionCall","src":"19487:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19480:6:181"},"nodeType":"YulFunctionCall","src":"19480:76:181"},"nodeType":"YulIf","src":"19477:96:181"},{"nodeType":"YulVariableDeclaration","src":"19582:47:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"19600:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"19610:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19596:3:181"},"nodeType":"YulFunctionCall","src":"19596:33:181"},"variables":[{"name":"addr_1","nodeType":"YulTypedName","src":"19586:6:181","type":""}]},{"nodeType":"YulAssignment","src":"19638:30:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"19661:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"19648:12:181"},"nodeType":"YulFunctionCall","src":"19648:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"19638:6:181"}]},{"body":{"nodeType":"YulBlock","src":"19711:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19720:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19723:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19713:6:181"},"nodeType":"YulFunctionCall","src":"19713:12:181"},"nodeType":"YulExpressionStatement","src":"19713:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"19683:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"19691:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"19680:2:181"},"nodeType":"YulFunctionCall","src":"19680:30:181"},"nodeType":"YulIf","src":"19677:50:181"},{"nodeType":"YulAssignment","src":"19736:25:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"19748:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"19756:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19744:3:181"},"nodeType":"YulFunctionCall","src":"19744:17:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"19736:4:181"}]},{"body":{"nodeType":"YulBlock","src":"19820:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19829:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19832:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19822:6:181"},"nodeType":"YulFunctionCall","src":"19822:12:181"},"nodeType":"YulExpressionStatement","src":"19822:12:181"}]},"condition":{"arguments":[{"name":"addr","nodeType":"YulIdentifier","src":"19777:4:181"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"19787:12:181"},"nodeType":"YulFunctionCall","src":"19787:14:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19807:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"19810:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"19803:3:181"},"nodeType":"YulFunctionCall","src":"19803:14:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19783:3:181"},"nodeType":"YulFunctionCall","src":"19783:35:181"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"19773:3:181"},"nodeType":"YulFunctionCall","src":"19773:46:181"},"nodeType":"YulIf","src":"19770:66:181"}]},"name":"access_calldata_tail_t_array$_t_address_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"19364:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"19374:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"19390:4:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"19396:6:181","type":""}],"src":"19297:545:181"},{"body":{"nodeType":"YulBlock","src":"20036:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20053:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"20064:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20046:6:181"},"nodeType":"YulFunctionCall","src":"20046:25:181"},"nodeType":"YulExpressionStatement","src":"20046:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20091:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20102:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20087:3:181"},"nodeType":"YulFunctionCall","src":"20087:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20107:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20080:6:181"},"nodeType":"YulFunctionCall","src":"20080:30:181"},"nodeType":"YulExpressionStatement","src":"20080:30:181"},{"nodeType":"YulAssignment","src":"20119:81:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20165:6:181"},{"name":"value2","nodeType":"YulIdentifier","src":"20173:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20185:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20196:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20181:3:181"},"nodeType":"YulFunctionCall","src":"20181:18:181"}],"functionName":{"name":"abi_encode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"20127:37:181"},"nodeType":"YulFunctionCall","src":"20127:73:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20119:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_array$_t_address_$dyn_calldata_ptr__to_t_bytes32_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19989:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"20000:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"20008:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"20016:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20027:4:181","type":""}],"src":"19847:359:181"},{"body":{"nodeType":"YulBlock","src":"20305:427:181","statements":[{"nodeType":"YulVariableDeclaration","src":"20315:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"20354:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20341:12:181"},"nodeType":"YulFunctionCall","src":"20341:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"20319:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"20455:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20464:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20467:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20457:6:181"},"nodeType":"YulFunctionCall","src":"20457:12:181"},"nodeType":"YulExpressionStatement","src":"20457:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"20389:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"20417:12:181"},"nodeType":"YulFunctionCall","src":"20417:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"20433:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20413:3:181"},"nodeType":"YulFunctionCall","src":"20413:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20448:2:181","type":"","value":"30"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"20444:3:181"},"nodeType":"YulFunctionCall","src":"20444:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20409:3:181"},"nodeType":"YulFunctionCall","src":"20409:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"20385:3:181"},"nodeType":"YulFunctionCall","src":"20385:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"20378:6:181"},"nodeType":"YulFunctionCall","src":"20378:76:181"},"nodeType":"YulIf","src":"20375:96:181"},{"nodeType":"YulVariableDeclaration","src":"20480:47:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"20498:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"20508:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20494:3:181"},"nodeType":"YulFunctionCall","src":"20494:33:181"},"variables":[{"name":"addr_1","nodeType":"YulTypedName","src":"20484:6:181","type":""}]},{"nodeType":"YulAssignment","src":"20536:30:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"20559:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20546:12:181"},"nodeType":"YulFunctionCall","src":"20546:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"20536:6:181"}]},{"body":{"nodeType":"YulBlock","src":"20609:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20618:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20621:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20611:6:181"},"nodeType":"YulFunctionCall","src":"20611:12:181"},"nodeType":"YulExpressionStatement","src":"20611:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"20581:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"20589:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20578:2:181"},"nodeType":"YulFunctionCall","src":"20578:30:181"},"nodeType":"YulIf","src":"20575:50:181"},{"nodeType":"YulAssignment","src":"20634:25:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"20646:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"20654:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20642:3:181"},"nodeType":"YulFunctionCall","src":"20642:17:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"20634:4:181"}]},{"body":{"nodeType":"YulBlock","src":"20710:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20719:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20722:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20712:6:181"},"nodeType":"YulFunctionCall","src":"20712:12:181"},"nodeType":"YulExpressionStatement","src":"20712:12:181"}]},"condition":{"arguments":[{"name":"addr","nodeType":"YulIdentifier","src":"20675:4:181"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"20685:12:181"},"nodeType":"YulFunctionCall","src":"20685:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"20701:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20681:3:181"},"nodeType":"YulFunctionCall","src":"20681:27:181"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"20671:3:181"},"nodeType":"YulFunctionCall","src":"20671:38:181"},"nodeType":"YulIf","src":"20668:58:181"}]},"name":"access_calldata_tail_t_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"20262:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"20272:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"20288:4:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"20294:6:181","type":""}],"src":"20211:521:181"},{"body":{"nodeType":"YulBlock","src":"20866:119:181","statements":[{"nodeType":"YulAssignment","src":"20876:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20888:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20899:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20884:3:181"},"nodeType":"YulFunctionCall","src":"20884:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20876:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20918:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"20929:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20911:6:181"},"nodeType":"YulFunctionCall","src":"20911:25:181"},"nodeType":"YulExpressionStatement","src":"20911:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20956:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20967:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20952:3:181"},"nodeType":"YulFunctionCall","src":"20952:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"20972:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20945:6:181"},"nodeType":"YulFunctionCall","src":"20945:34:181"},"nodeType":"YulExpressionStatement","src":"20945:34:181"}]},"name":"abi_encode_tuple_t_bytes32_t_uint256__to_t_bytes32_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20827:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"20838:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"20846:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20857:4:181","type":""}],"src":"20737:248:181"},{"body":{"nodeType":"YulBlock","src":"21022:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21039:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21046:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"21051:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21042:3:181"},"nodeType":"YulFunctionCall","src":"21042:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21032:6:181"},"nodeType":"YulFunctionCall","src":"21032:31:181"},"nodeType":"YulExpressionStatement","src":"21032:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21079:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"21082:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21072:6:181"},"nodeType":"YulFunctionCall","src":"21072:15:181"},"nodeType":"YulExpressionStatement","src":"21072:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21103:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21106:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21096:6:181"},"nodeType":"YulFunctionCall","src":"21096:15:181"},"nodeType":"YulExpressionStatement","src":"21096:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"20990:127:181"},{"body":{"nodeType":"YulBlock","src":"21243:435:181","statements":[{"nodeType":"YulVariableDeclaration","src":"21253:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"21292:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21279:12:181"},"nodeType":"YulFunctionCall","src":"21279:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"21257:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"21393:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21402:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21405:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21395:6:181"},"nodeType":"YulFunctionCall","src":"21395:12:181"},"nodeType":"YulExpressionStatement","src":"21395:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"21327:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"21355:12:181"},"nodeType":"YulFunctionCall","src":"21355:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"21371:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21351:3:181"},"nodeType":"YulFunctionCall","src":"21351:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21386:2:181","type":"","value":"30"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"21382:3:181"},"nodeType":"YulFunctionCall","src":"21382:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21347:3:181"},"nodeType":"YulFunctionCall","src":"21347:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"21323:3:181"},"nodeType":"YulFunctionCall","src":"21323:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"21316:6:181"},"nodeType":"YulFunctionCall","src":"21316:76:181"},"nodeType":"YulIf","src":"21313:96:181"},{"nodeType":"YulVariableDeclaration","src":"21418:47:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"21436:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"21446:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21432:3:181"},"nodeType":"YulFunctionCall","src":"21432:33:181"},"variables":[{"name":"addr_1","nodeType":"YulTypedName","src":"21422:6:181","type":""}]},{"nodeType":"YulAssignment","src":"21474:30:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"21497:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21484:12:181"},"nodeType":"YulFunctionCall","src":"21484:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"21474:6:181"}]},{"body":{"nodeType":"YulBlock","src":"21547:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21556:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21559:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21549:6:181"},"nodeType":"YulFunctionCall","src":"21549:12:181"},"nodeType":"YulExpressionStatement","src":"21549:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"21519:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"21527:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21516:2:181"},"nodeType":"YulFunctionCall","src":"21516:30:181"},"nodeType":"YulIf","src":"21513:50:181"},{"nodeType":"YulAssignment","src":"21572:25:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"21584:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"21592:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21580:3:181"},"nodeType":"YulFunctionCall","src":"21580:17:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"21572:4:181"}]},{"body":{"nodeType":"YulBlock","src":"21656:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21665:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21668:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21658:6:181"},"nodeType":"YulFunctionCall","src":"21658:12:181"},"nodeType":"YulExpressionStatement","src":"21658:12:181"}]},"condition":{"arguments":[{"name":"addr","nodeType":"YulIdentifier","src":"21613:4:181"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"21623:12:181"},"nodeType":"YulFunctionCall","src":"21623:14:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21643:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"21646:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21639:3:181"},"nodeType":"YulFunctionCall","src":"21639:14:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21619:3:181"},"nodeType":"YulFunctionCall","src":"21619:35:181"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"21609:3:181"},"nodeType":"YulFunctionCall","src":"21609:46:181"},"nodeType":"YulIf","src":"21606:66:181"}]},"name":"access_calldata_tail_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"21200:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"21210:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"21226:4:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"21232:6:181","type":""}],"src":"21122:556:181"},{"body":{"nodeType":"YulBlock","src":"21810:136:181","statements":[{"nodeType":"YulAssignment","src":"21820:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21832:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21843:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21828:3:181"},"nodeType":"YulFunctionCall","src":"21828:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21820:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21862:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"21873:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21855:6:181"},"nodeType":"YulFunctionCall","src":"21855:25:181"},"nodeType":"YulExpressionStatement","src":"21855:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21900:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21911:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21896:3:181"},"nodeType":"YulFunctionCall","src":"21896:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"21920:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"21928:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21916:3:181"},"nodeType":"YulFunctionCall","src":"21916:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21889:6:181"},"nodeType":"YulFunctionCall","src":"21889:51:181"},"nodeType":"YulExpressionStatement","src":"21889:51:181"}]},"name":"abi_encode_tuple_t_bytes32_t_uint32__to_t_bytes32_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21771:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21782:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"21790:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21801:4:181","type":""}],"src":"21683:263:181"},{"body":{"nodeType":"YulBlock","src":"22018:174:181","statements":[{"body":{"nodeType":"YulBlock","src":"22064:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22073:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22076:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22066:6:181"},"nodeType":"YulFunctionCall","src":"22066:12:181"},"nodeType":"YulExpressionStatement","src":"22066:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"22039:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"22048:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22035:3:181"},"nodeType":"YulFunctionCall","src":"22035:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"22060:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"22031:3:181"},"nodeType":"YulFunctionCall","src":"22031:32:181"},"nodeType":"YulIf","src":"22028:52:181"},{"nodeType":"YulVariableDeclaration","src":"22089:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22115:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22102:12:181"},"nodeType":"YulFunctionCall","src":"22102:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"22093:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"22156:5:181"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"22134:21:181"},"nodeType":"YulFunctionCall","src":"22134:28:181"},"nodeType":"YulExpressionStatement","src":"22134:28:181"},{"nodeType":"YulAssignment","src":"22171:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"22181:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"22171:6:181"}]}]},"name":"abi_decode_tuple_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21984:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"21995:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"22007:6:181","type":""}],"src":"21951:241:181"},{"body":{"nodeType":"YulBlock","src":"22229:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22246:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22253:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"22258:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"22249:3:181"},"nodeType":"YulFunctionCall","src":"22249:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22239:6:181"},"nodeType":"YulFunctionCall","src":"22239:31:181"},"nodeType":"YulExpressionStatement","src":"22239:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22286:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"22289:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22279:6:181"},"nodeType":"YulFunctionCall","src":"22279:15:181"},"nodeType":"YulExpressionStatement","src":"22279:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22310:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22313:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22303:6:181"},"nodeType":"YulFunctionCall","src":"22303:15:181"},"nodeType":"YulExpressionStatement","src":"22303:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"22197:127:181"},{"body":{"nodeType":"YulBlock","src":"22378:79:181","statements":[{"nodeType":"YulAssignment","src":"22388:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"22400:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"22403:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22396:3:181"},"nodeType":"YulFunctionCall","src":"22396:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"22388:4:181"}]},{"body":{"nodeType":"YulBlock","src":"22429:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"22431:16:181"},"nodeType":"YulFunctionCall","src":"22431:18:181"},"nodeType":"YulExpressionStatement","src":"22431:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"22420:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"22426:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"22417:2:181"},"nodeType":"YulFunctionCall","src":"22417:11:181"},"nodeType":"YulIf","src":"22414:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"22360:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"22363:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"22369:4:181","type":""}],"src":"22329:128:181"},{"body":{"nodeType":"YulBlock","src":"22494:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22511:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22518:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"22523:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"22514:3:181"},"nodeType":"YulFunctionCall","src":"22514:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22504:6:181"},"nodeType":"YulFunctionCall","src":"22504:31:181"},"nodeType":"YulExpressionStatement","src":"22504:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22551:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"22554:4:181","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22544:6:181"},"nodeType":"YulFunctionCall","src":"22544:15:181"},"nodeType":"YulExpressionStatement","src":"22544:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22575:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22578:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22568:6:181"},"nodeType":"YulFunctionCall","src":"22568:15:181"},"nodeType":"YulExpressionStatement","src":"22568:15:181"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"22462:127:181"},{"body":{"nodeType":"YulBlock","src":"22640:74:181","statements":[{"body":{"nodeType":"YulBlock","src":"22663:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x12","nodeType":"YulIdentifier","src":"22665:16:181"},"nodeType":"YulFunctionCall","src":"22665:18:181"},"nodeType":"YulExpressionStatement","src":"22665:18:181"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"22660:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"22653:6:181"},"nodeType":"YulFunctionCall","src":"22653:9:181"},"nodeType":"YulIf","src":"22650:35:181"},{"nodeType":"YulAssignment","src":"22694:14:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"22703:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"22706:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"22699:3:181"},"nodeType":"YulFunctionCall","src":"22699:9:181"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"22694:1:181"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"22625:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"22628:1:181","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"22634:1:181","type":""}],"src":"22594:120:181"},{"body":{"nodeType":"YulBlock","src":"22757:74:181","statements":[{"body":{"nodeType":"YulBlock","src":"22780:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x12","nodeType":"YulIdentifier","src":"22782:16:181"},"nodeType":"YulFunctionCall","src":"22782:18:181"},"nodeType":"YulExpressionStatement","src":"22782:18:181"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"22777:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"22770:6:181"},"nodeType":"YulFunctionCall","src":"22770:9:181"},"nodeType":"YulIf","src":"22767:35:181"},{"nodeType":"YulAssignment","src":"22811:14:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"22820:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"22823:1:181"}],"functionName":{"name":"mod","nodeType":"YulIdentifier","src":"22816:3:181"},"nodeType":"YulFunctionCall","src":"22816:9:181"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"22811:1:181"}]}]},"name":"mod_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"22742:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"22745:1:181","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"22751:1:181","type":""}],"src":"22719:112:181"},{"body":{"nodeType":"YulBlock","src":"22884:77:181","statements":[{"nodeType":"YulAssignment","src":"22894:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"22905:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"22908:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22901:3:181"},"nodeType":"YulFunctionCall","src":"22901:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"22894:3:181"}]},{"body":{"nodeType":"YulBlock","src":"22933:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"22935:16:181"},"nodeType":"YulFunctionCall","src":"22935:18:181"},"nodeType":"YulExpressionStatement","src":"22935:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"22925:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"22928:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"22922:2:181"},"nodeType":"YulFunctionCall","src":"22922:10:181"},"nodeType":"YulIf","src":"22919:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"22867:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"22870:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"22876:3:181","type":""}],"src":"22836:125:181"},{"body":{"nodeType":"YulBlock","src":"23013:88:181","statements":[{"body":{"nodeType":"YulBlock","src":"23044:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"23046:16:181"},"nodeType":"YulFunctionCall","src":"23046:18:181"},"nodeType":"YulExpressionStatement","src":"23046:18:181"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23029:5:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23040:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"23036:3:181"},"nodeType":"YulFunctionCall","src":"23036:6:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"23026:2:181"},"nodeType":"YulFunctionCall","src":"23026:17:181"},"nodeType":"YulIf","src":"23023:43:181"},{"nodeType":"YulAssignment","src":"23075:20:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23086:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"23093:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23082:3:181"},"nodeType":"YulFunctionCall","src":"23082:13:181"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"23075:3:181"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"22995:5:181","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"23005:3:181","type":""}],"src":"22966:135:181"},{"body":{"nodeType":"YulBlock","src":"23280:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23297:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23308:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23290:6:181"},"nodeType":"YulFunctionCall","src":"23290:21:181"},"nodeType":"YulExpressionStatement","src":"23290:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23331:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23342:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23327:3:181"},"nodeType":"YulFunctionCall","src":"23327:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23347:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23320:6:181"},"nodeType":"YulFunctionCall","src":"23320:30:181"},"nodeType":"YulExpressionStatement","src":"23320:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23370:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23381:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23366:3:181"},"nodeType":"YulFunctionCall","src":"23366:18:181"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","kind":"string","nodeType":"YulLiteral","src":"23386:31:181","type":"","value":"Address: insufficient balance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23359:6:181"},"nodeType":"YulFunctionCall","src":"23359:59:181"},"nodeType":"YulExpressionStatement","src":"23359:59:181"},{"nodeType":"YulAssignment","src":"23427:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23439:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23450:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23435:3:181"},"nodeType":"YulFunctionCall","src":"23435:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23427:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23257:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23271:4:181","type":""}],"src":"23106:353:181"},{"body":{"nodeType":"YulBlock","src":"23655:14:181","statements":[{"nodeType":"YulAssignment","src":"23657:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"23664:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"23657:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"23639:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"23647:3:181","type":""}],"src":"23464:205:181"},{"body":{"nodeType":"YulBlock","src":"23848:248:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23865:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23876:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23858:6:181"},"nodeType":"YulFunctionCall","src":"23858:21:181"},"nodeType":"YulExpressionStatement","src":"23858:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23899:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23910:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23895:3:181"},"nodeType":"YulFunctionCall","src":"23895:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23915:2:181","type":"","value":"58"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23888:6:181"},"nodeType":"YulFunctionCall","src":"23888:30:181"},"nodeType":"YulExpressionStatement","src":"23888:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23938:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23949:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23934:3:181"},"nodeType":"YulFunctionCall","src":"23934:18:181"},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c2072","kind":"string","nodeType":"YulLiteral","src":"23954:34:181","type":"","value":"Address: unable to send value, r"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23927:6:181"},"nodeType":"YulFunctionCall","src":"23927:62:181"},"nodeType":"YulExpressionStatement","src":"23927:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24009:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24020:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24005:3:181"},"nodeType":"YulFunctionCall","src":"24005:18:181"},{"hexValue":"6563697069656e74206d61792068617665207265766572746564","kind":"string","nodeType":"YulLiteral","src":"24025:28:181","type":"","value":"ecipient may have reverted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23998:6:181"},"nodeType":"YulFunctionCall","src":"23998:56:181"},"nodeType":"YulExpressionStatement","src":"23998:56:181"},{"nodeType":"YulAssignment","src":"24063:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24075:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24086:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24071:3:181"},"nodeType":"YulFunctionCall","src":"24071:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24063:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23825:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23839:4:181","type":""}],"src":"23674:422:181"},{"body":{"nodeType":"YulBlock","src":"24153:116:181","statements":[{"nodeType":"YulAssignment","src":"24163:20:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"24178:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"24181:1:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"24174:3:181"},"nodeType":"YulFunctionCall","src":"24174:9:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"24163:7:181"}]},{"body":{"nodeType":"YulBlock","src":"24241:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"24243:16:181"},"nodeType":"YulFunctionCall","src":"24243:18:181"},"nodeType":"YulExpressionStatement","src":"24243:18:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"24212:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"24205:6:181"},"nodeType":"YulFunctionCall","src":"24205:9:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"24219:1:181"},{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"24226:7:181"},{"name":"x","nodeType":"YulIdentifier","src":"24235:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"24222:3:181"},"nodeType":"YulFunctionCall","src":"24222:15:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"24216:2:181"},"nodeType":"YulFunctionCall","src":"24216:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"24202:2:181"},"nodeType":"YulFunctionCall","src":"24202:37:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"24195:6:181"},"nodeType":"YulFunctionCall","src":"24195:45:181"},"nodeType":"YulIf","src":"24192:71:181"}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"24132:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"24135:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"24141:7:181","type":""}],"src":"24101:168:181"},{"body":{"nodeType":"YulBlock","src":"24457:275:181","statements":[{"nodeType":"YulAssignment","src":"24467:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24479:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24490:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24475:3:181"},"nodeType":"YulFunctionCall","src":"24475:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24467:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"24503:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24521:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"24526:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"24517:3:181"},"nodeType":"YulFunctionCall","src":"24517:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"24530:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"24513:3:181"},"nodeType":"YulFunctionCall","src":"24513:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"24507:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24548:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"24563:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"24571:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24559:3:181"},"nodeType":"YulFunctionCall","src":"24559:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24541:6:181"},"nodeType":"YulFunctionCall","src":"24541:34:181"},"nodeType":"YulExpressionStatement","src":"24541:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24595:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24606:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24591:3:181"},"nodeType":"YulFunctionCall","src":"24591:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"24611:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24584:6:181"},"nodeType":"YulFunctionCall","src":"24584:34:181"},"nodeType":"YulExpressionStatement","src":"24584:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24638:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24649:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24634:3:181"},"nodeType":"YulFunctionCall","src":"24634:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"24658:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"24666:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24654:3:181"},"nodeType":"YulFunctionCall","src":"24654:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24627:6:181"},"nodeType":"YulFunctionCall","src":"24627:43:181"},"nodeType":"YulExpressionStatement","src":"24627:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24690:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24701:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24686:3:181"},"nodeType":"YulFunctionCall","src":"24686:18:181"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"24710:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"24718:6:181","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24706:3:181"},"nodeType":"YulFunctionCall","src":"24706:19:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24679:6:181"},"nodeType":"YulFunctionCall","src":"24679:47:181"},"nodeType":"YulExpressionStatement","src":"24679:47:181"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_address_t_uint16__to_t_address_t_uint256_t_address_t_uint16__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24402:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"24413:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"24421:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"24429:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"24437:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24448:4:181","type":""}],"src":"24274:458:181"},{"body":{"nodeType":"YulBlock","src":"24894:218:181","statements":[{"nodeType":"YulAssignment","src":"24904:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24916:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24927:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24912:3:181"},"nodeType":"YulFunctionCall","src":"24912:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24904:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"24939:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24957:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"24962:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"24953:3:181"},"nodeType":"YulFunctionCall","src":"24953:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"24966:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"24949:3:181"},"nodeType":"YulFunctionCall","src":"24949:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"24943:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24984:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"24999:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"25007:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24995:3:181"},"nodeType":"YulFunctionCall","src":"24995:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24977:6:181"},"nodeType":"YulFunctionCall","src":"24977:34:181"},"nodeType":"YulExpressionStatement","src":"24977:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25031:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25042:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25027:3:181"},"nodeType":"YulFunctionCall","src":"25027:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"25047:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25020:6:181"},"nodeType":"YulFunctionCall","src":"25020:34:181"},"nodeType":"YulExpressionStatement","src":"25020:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25074:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25085:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25070:3:181"},"nodeType":"YulFunctionCall","src":"25070:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"25094:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"25102:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25090:3:181"},"nodeType":"YulFunctionCall","src":"25090:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25063:6:181"},"nodeType":"YulFunctionCall","src":"25063:43:181"},"nodeType":"YulExpressionStatement","src":"25063:43:181"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24847:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"24858:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"24866:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"24874:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24885:4:181","type":""}],"src":"24737:375:181"},{"body":{"nodeType":"YulBlock","src":"25198:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"25244:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25253:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"25256:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"25246:6:181"},"nodeType":"YulFunctionCall","src":"25246:12:181"},"nodeType":"YulExpressionStatement","src":"25246:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"25219:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"25228:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25215:3:181"},"nodeType":"YulFunctionCall","src":"25215:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"25240:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"25211:3:181"},"nodeType":"YulFunctionCall","src":"25211:32:181"},"nodeType":"YulIf","src":"25208:52:181"},{"nodeType":"YulAssignment","src":"25269:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25285:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25279:5:181"},"nodeType":"YulFunctionCall","src":"25279:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"25269:6:181"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25164:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"25175:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"25187:6:181","type":""}],"src":"25117:184:181"},{"body":{"nodeType":"YulBlock","src":"25435:145:181","statements":[{"nodeType":"YulAssignment","src":"25445:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25457:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25468:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25453:3:181"},"nodeType":"YulFunctionCall","src":"25453:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25445:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25487:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"25502:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25518:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"25523:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"25514:3:181"},"nodeType":"YulFunctionCall","src":"25514:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"25527:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25510:3:181"},"nodeType":"YulFunctionCall","src":"25510:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25498:3:181"},"nodeType":"YulFunctionCall","src":"25498:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25480:6:181"},"nodeType":"YulFunctionCall","src":"25480:51:181"},"nodeType":"YulExpressionStatement","src":"25480:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25551:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25562:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25547:3:181"},"nodeType":"YulFunctionCall","src":"25547:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"25567:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25540:6:181"},"nodeType":"YulFunctionCall","src":"25540:34:181"},"nodeType":"YulExpressionStatement","src":"25540:34:181"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25396:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"25407:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"25415:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25426:4:181","type":""}],"src":"25306:274:181"},{"body":{"nodeType":"YulBlock","src":"25732:124:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"25755:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"25760:6:181"},{"name":"value1","nodeType":"YulIdentifier","src":"25768:6:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"25742:12:181"},"nodeType":"YulFunctionCall","src":"25742:33:181"},"nodeType":"YulExpressionStatement","src":"25742:33:181"},{"nodeType":"YulVariableDeclaration","src":"25784:26:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"25798:3:181"},{"name":"value1","nodeType":"YulIdentifier","src":"25803:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25794:3:181"},"nodeType":"YulFunctionCall","src":"25794:16:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"25788:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"25826:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"25830:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25819:6:181"},"nodeType":"YulFunctionCall","src":"25819:13:181"},"nodeType":"YulExpressionStatement","src":"25819:13:181"},{"nodeType":"YulAssignment","src":"25841:9:181","value":{"name":"_1","nodeType":"YulIdentifier","src":"25848:2:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"25841:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"25700:3:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"25705:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"25713:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"25724:3:181","type":""}],"src":"25585:271:181"},{"body":{"nodeType":"YulBlock","src":"26128:407:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26145:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"26156:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26138:6:181"},"nodeType":"YulFunctionCall","src":"26138:25:181"},"nodeType":"YulExpressionStatement","src":"26138:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26183:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26194:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26179:3:181"},"nodeType":"YulFunctionCall","src":"26179:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"26199:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26172:6:181"},"nodeType":"YulFunctionCall","src":"26172:34:181"},"nodeType":"YulExpressionStatement","src":"26172:34:181"},{"nodeType":"YulVariableDeclaration","src":"26215:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26233:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"26238:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26229:3:181"},"nodeType":"YulFunctionCall","src":"26229:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"26242:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"26225:3:181"},"nodeType":"YulFunctionCall","src":"26225:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"26219:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26264:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26275:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26260:3:181"},"nodeType":"YulFunctionCall","src":"26260:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"26284:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"26292:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26280:3:181"},"nodeType":"YulFunctionCall","src":"26280:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26253:6:181"},"nodeType":"YulFunctionCall","src":"26253:43:181"},"nodeType":"YulExpressionStatement","src":"26253:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26316:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26327:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26312:3:181"},"nodeType":"YulFunctionCall","src":"26312:18:181"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"26336:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"26344:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26332:3:181"},"nodeType":"YulFunctionCall","src":"26332:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26305:6:181"},"nodeType":"YulFunctionCall","src":"26305:43:181"},"nodeType":"YulExpressionStatement","src":"26305:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26368:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26379:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26364:3:181"},"nodeType":"YulFunctionCall","src":"26364:19:181"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"26389:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"26397:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26385:3:181"},"nodeType":"YulFunctionCall","src":"26385:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26357:6:181"},"nodeType":"YulFunctionCall","src":"26357:52:181"},"nodeType":"YulExpressionStatement","src":"26357:52:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26429:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26440:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26425:3:181"},"nodeType":"YulFunctionCall","src":"26425:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"26446:3:181","type":"","value":"192"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26418:6:181"},"nodeType":"YulFunctionCall","src":"26418:32:181"},"nodeType":"YulExpressionStatement","src":"26418:32:181"},{"nodeType":"YulAssignment","src":"26459:70:181","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"26493:6:181"},{"name":"value6","nodeType":"YulIdentifier","src":"26501:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26513:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26524:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26509:3:181"},"nodeType":"YulFunctionCall","src":"26509:19:181"}],"functionName":{"name":"abi_encode_bytes_calldata","nodeType":"YulIdentifier","src":"26467:25:181"},"nodeType":"YulFunctionCall","src":"26467:62:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26459:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_uint256_t_address_t_address_t_uint32_t_bytes_calldata_ptr__to_t_bytes32_t_uint256_t_address_t_address_t_uint32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26049:9:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"26060:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"26068:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"26076:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"26084:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"26092:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"26100:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"26108:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26119:4:181","type":""}],"src":"25861:674:181"},{"body":{"nodeType":"YulBlock","src":"26681:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26698:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"26723:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"26716:6:181"},"nodeType":"YulFunctionCall","src":"26716:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"26709:6:181"},"nodeType":"YulFunctionCall","src":"26709:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26691:6:181"},"nodeType":"YulFunctionCall","src":"26691:41:181"},"nodeType":"YulExpressionStatement","src":"26691:41:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26752:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26763:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26748:3:181"},"nodeType":"YulFunctionCall","src":"26748:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"26768:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26741:6:181"},"nodeType":"YulFunctionCall","src":"26741:30:181"},"nodeType":"YulExpressionStatement","src":"26741:30:181"},{"nodeType":"YulAssignment","src":"26780:52:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"26805:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26817:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26828:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26813:3:181"},"nodeType":"YulFunctionCall","src":"26813:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"26788:16:181"},"nodeType":"YulFunctionCall","src":"26788:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26780:4:181"}]}]},"name":"abi_encode_tuple_t_bool_t_bytes_memory_ptr__to_t_bool_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26642:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"26653:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"26661:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26672:4:181","type":""}],"src":"26540:298:181"},{"body":{"nodeType":"YulBlock","src":"26890:104:181","statements":[{"nodeType":"YulAssignment","src":"26900:39:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"26916:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"26919:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26912:3:181"},"nodeType":"YulFunctionCall","src":"26912:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"26930:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"26933:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26926:3:181"},"nodeType":"YulFunctionCall","src":"26926:12:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"26908:3:181"},"nodeType":"YulFunctionCall","src":"26908:31:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"26900:4:181"}]},{"body":{"nodeType":"YulBlock","src":"26966:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"26968:16:181"},"nodeType":"YulFunctionCall","src":"26968:18:181"},"nodeType":"YulExpressionStatement","src":"26968:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"26954:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"26960:4:181","type":"","value":"0xff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"26951:2:181"},"nodeType":"YulFunctionCall","src":"26951:14:181"},"nodeType":"YulIf","src":"26948:40:181"}]},"name":"checked_sub_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"26872:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"26875:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"26881:4:181","type":""}],"src":"26843:151:181"},{"body":{"nodeType":"YulBlock","src":"27063:358:181","statements":[{"nodeType":"YulVariableDeclaration","src":"27073:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"27088:1:181","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"27077:7:181","type":""}]},{"nodeType":"YulAssignment","src":"27098:16:181","value":{"name":"power_1","nodeType":"YulIdentifier","src":"27107:7:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"27098:5:181"}]},{"nodeType":"YulAssignment","src":"27123:13:181","value":{"name":"_base","nodeType":"YulIdentifier","src":"27131:5:181"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"27123:4:181"}]},{"body":{"nodeType":"YulBlock","src":"27187:228:181","statements":[{"body":{"nodeType":"YulBlock","src":"27232:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"27234:16:181"},"nodeType":"YulFunctionCall","src":"27234:18:181"},"nodeType":"YulExpressionStatement","src":"27234:18:181"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"27207:4:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27221:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"27217:3:181"},"nodeType":"YulFunctionCall","src":"27217:6:181"},{"name":"base","nodeType":"YulIdentifier","src":"27225:4:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"27213:3:181"},"nodeType":"YulFunctionCall","src":"27213:17:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"27204:2:181"},"nodeType":"YulFunctionCall","src":"27204:27:181"},"nodeType":"YulIf","src":"27201:53:181"},{"body":{"nodeType":"YulBlock","src":"27293:29:181","statements":[{"nodeType":"YulAssignment","src":"27295:25:181","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"27308:5:181"},{"name":"base","nodeType":"YulIdentifier","src":"27315:4:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"27304:3:181"},"nodeType":"YulFunctionCall","src":"27304:16:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"27295:5:181"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"27274:8:181"},{"name":"power_1","nodeType":"YulIdentifier","src":"27284:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27270:3:181"},"nodeType":"YulFunctionCall","src":"27270:22:181"},"nodeType":"YulIf","src":"27267:55:181"},{"nodeType":"YulAssignment","src":"27335:23:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"27347:4:181"},{"name":"base","nodeType":"YulIdentifier","src":"27353:4:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"27343:3:181"},"nodeType":"YulFunctionCall","src":"27343:15:181"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"27335:4:181"}]},{"nodeType":"YulAssignment","src":"27371:34:181","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"27387:7:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"27396:8:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"27383:3:181"},"nodeType":"YulFunctionCall","src":"27383:22:181"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"27371:8:181"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"27156:8:181"},{"name":"power_1","nodeType":"YulIdentifier","src":"27166:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"27153:2:181"},"nodeType":"YulFunctionCall","src":"27153:21:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"27175:3:181","statements":[]},"pre":{"nodeType":"YulBlock","src":"27149:3:181","statements":[]},"src":"27145:270:181"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"27027:5:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"27034:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"27047:5:181","type":""},{"name":"base","nodeType":"YulTypedName","src":"27054:4:181","type":""}],"src":"26999:422:181"},{"body":{"nodeType":"YulBlock","src":"27485:747:181","statements":[{"body":{"nodeType":"YulBlock","src":"27523:52:181","statements":[{"nodeType":"YulAssignment","src":"27537:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"27546:1:181","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"27537:5:181"}]},{"nodeType":"YulLeave","src":"27560:5:181"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"27505:8:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"27498:6:181"},"nodeType":"YulFunctionCall","src":"27498:16:181"},"nodeType":"YulIf","src":"27495:80:181"},{"body":{"nodeType":"YulBlock","src":"27608:52:181","statements":[{"nodeType":"YulAssignment","src":"27622:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"27631:1:181","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"27622:5:181"}]},{"nodeType":"YulLeave","src":"27645:5:181"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"27594:4:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"27587:6:181"},"nodeType":"YulFunctionCall","src":"27587:12:181"},"nodeType":"YulIf","src":"27584:76:181"},{"cases":[{"body":{"nodeType":"YulBlock","src":"27696:52:181","statements":[{"nodeType":"YulAssignment","src":"27710:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"27719:1:181","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"27710:5:181"}]},{"nodeType":"YulLeave","src":"27733:5:181"}]},"nodeType":"YulCase","src":"27689:59:181","value":{"kind":"number","nodeType":"YulLiteral","src":"27694:1:181","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"27764:123:181","statements":[{"body":{"nodeType":"YulBlock","src":"27799:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"27801:16:181"},"nodeType":"YulFunctionCall","src":"27801:18:181"},"nodeType":"YulExpressionStatement","src":"27801:18:181"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"27784:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"27794:3:181","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"27781:2:181"},"nodeType":"YulFunctionCall","src":"27781:17:181"},"nodeType":"YulIf","src":"27778:43:181"},{"nodeType":"YulAssignment","src":"27834:25:181","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"27847:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"27857:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"27843:3:181"},"nodeType":"YulFunctionCall","src":"27843:16:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"27834:5:181"}]},{"nodeType":"YulLeave","src":"27872:5:181"}]},"nodeType":"YulCase","src":"27757:130:181","value":{"kind":"number","nodeType":"YulLiteral","src":"27762:1:181","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"27676:4:181"},"nodeType":"YulSwitch","src":"27669:218:181"},{"body":{"nodeType":"YulBlock","src":"27985:70:181","statements":[{"nodeType":"YulAssignment","src":"27999:28:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"28012:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"28018:8:181"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"28008:3:181"},"nodeType":"YulFunctionCall","src":"28008:19:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"27999:5:181"}]},{"nodeType":"YulLeave","src":"28040:5:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"27909:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"27915:2:181","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"27906:2:181"},"nodeType":"YulFunctionCall","src":"27906:12:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"27923:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"27933:2:181","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"27920:2:181"},"nodeType":"YulFunctionCall","src":"27920:16:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27902:3:181"},"nodeType":"YulFunctionCall","src":"27902:35:181"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"27946:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"27952:3:181","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"27943:2:181"},"nodeType":"YulFunctionCall","src":"27943:13:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"27961:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"27971:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"27958:2:181"},"nodeType":"YulFunctionCall","src":"27958:16:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27939:3:181"},"nodeType":"YulFunctionCall","src":"27939:36:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"27899:2:181"},"nodeType":"YulFunctionCall","src":"27899:77:181"},"nodeType":"YulIf","src":"27896:159:181"},{"nodeType":"YulVariableDeclaration","src":"28064:57:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"28106:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"28112:8:181"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"28087:18:181"},"nodeType":"YulFunctionCall","src":"28087:34:181"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"28068:7:181","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"28077:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"28166:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"28168:16:181"},"nodeType":"YulFunctionCall","src":"28168:18:181"},"nodeType":"YulExpressionStatement","src":"28168:18:181"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"28136:7:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28153:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"28149:3:181"},"nodeType":"YulFunctionCall","src":"28149:6:181"},{"name":"base_1","nodeType":"YulIdentifier","src":"28157:6:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"28145:3:181"},"nodeType":"YulFunctionCall","src":"28145:19:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"28133:2:181"},"nodeType":"YulFunctionCall","src":"28133:32:181"},"nodeType":"YulIf","src":"28130:58:181"},{"nodeType":"YulAssignment","src":"28197:29:181","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"28210:7:181"},{"name":"base_1","nodeType":"YulIdentifier","src":"28219:6:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"28206:3:181"},"nodeType":"YulFunctionCall","src":"28206:20:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"28197:5:181"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"27456:4:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"27462:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"27475:5:181","type":""}],"src":"27426:806:181"},{"body":{"nodeType":"YulBlock","src":"28305:72:181","statements":[{"nodeType":"YulAssignment","src":"28315:56:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"28345:4:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"28355:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"28365:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28351:3:181"},"nodeType":"YulFunctionCall","src":"28351:19:181"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"28324:20:181"},"nodeType":"YulFunctionCall","src":"28324:47:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"28315:5:181"}]}]},"name":"checked_exp_t_uint256_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"28276:4:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"28282:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"28295:5:181","type":""}],"src":"28237:140:181"},{"body":{"nodeType":"YulBlock","src":"28620:322:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"28637:3:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28650:3:181","type":"","value":"224"},{"name":"value0","nodeType":"YulIdentifier","src":"28655:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28646:3:181"},"nodeType":"YulFunctionCall","src":"28646:16:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28668:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"28673:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28664:3:181"},"nodeType":"YulFunctionCall","src":"28664:20:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28642:3:181"},"nodeType":"YulFunctionCall","src":"28642:43:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28630:6:181"},"nodeType":"YulFunctionCall","src":"28630:56:181"},"nodeType":"YulExpressionStatement","src":"28630:56:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"28706:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"28711:1:181","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28702:3:181"},"nodeType":"YulFunctionCall","src":"28702:11:181"},{"name":"value1","nodeType":"YulIdentifier","src":"28715:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28695:6:181"},"nodeType":"YulFunctionCall","src":"28695:27:181"},"nodeType":"YulExpressionStatement","src":"28695:27:181"},{"expression":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"28779:6:181"}],"functionName":{"name":"validator_assert_enum_DestinationTransferStatus","nodeType":"YulIdentifier","src":"28731:47:181"},"nodeType":"YulFunctionCall","src":"28731:55:181"},"nodeType":"YulExpressionStatement","src":"28731:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"28806:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"28811:2:181","type":"","value":"36"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28802:3:181"},"nodeType":"YulFunctionCall","src":"28802:12:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28820:3:181","type":"","value":"248"},{"name":"value2","nodeType":"YulIdentifier","src":"28825:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"28816:3:181"},"nodeType":"YulFunctionCall","src":"28816:16:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28795:6:181"},"nodeType":"YulFunctionCall","src":"28795:38:181"},"nodeType":"YulExpressionStatement","src":"28795:38:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"28853:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"28858:2:181","type":"","value":"37"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28849:3:181"},"nodeType":"YulFunctionCall","src":"28849:12:181"},{"name":"value3","nodeType":"YulIdentifier","src":"28863:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28842:6:181"},"nodeType":"YulFunctionCall","src":"28842:28:181"},"nodeType":"YulExpressionStatement","src":"28842:28:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"28890:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"28895:2:181","type":"","value":"69"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28886:3:181"},"nodeType":"YulFunctionCall","src":"28886:12:181"},{"name":"value4","nodeType":"YulIdentifier","src":"28900:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28879:6:181"},"nodeType":"YulFunctionCall","src":"28879:28:181"},"nodeType":"YulExpressionStatement","src":"28879:28:181"},{"nodeType":"YulAssignment","src":"28916:20:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"28927:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"28932:3:181","type":"","value":"101"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28923:3:181"},"nodeType":"YulFunctionCall","src":"28923:13:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"28916:3:181"}]}]},"name":"abi_encode_tuple_packed_t_uint32_t_bytes32_t_enum$_Types_$28713_t_uint256_t_bytes32__to_t_uint32_t_bytes32_t_uint8_t_uint256_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"28564:3:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"28569:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"28577:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"28585:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"28593:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"28601:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"28612:3:181","type":""}],"src":"28382:560:181"},{"body":{"nodeType":"YulBlock","src":"29045:170:181","statements":[{"body":{"nodeType":"YulBlock","src":"29091:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29100:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29103:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"29093:6:181"},"nodeType":"YulFunctionCall","src":"29093:12:181"},"nodeType":"YulExpressionStatement","src":"29093:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"29066:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"29075:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29062:3:181"},"nodeType":"YulFunctionCall","src":"29062:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"29087:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"29058:3:181"},"nodeType":"YulFunctionCall","src":"29058:32:181"},"nodeType":"YulIf","src":"29055:52:181"},{"nodeType":"YulVariableDeclaration","src":"29116:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29135:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29129:5:181"},"nodeType":"YulFunctionCall","src":"29129:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"29120:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"29179:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"29154:24:181"},"nodeType":"YulFunctionCall","src":"29154:31:181"},"nodeType":"YulExpressionStatement","src":"29154:31:181"},{"nodeType":"YulAssignment","src":"29194:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"29204:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"29194:6:181"}]}]},"name":"abi_decode_tuple_t_contract$_IOutbox_$47864_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29011:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"29022:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"29034:6:181","type":""}],"src":"28947:268:181"},{"body":{"nodeType":"YulBlock","src":"29393:201:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29410:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"29425:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"29433:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29421:3:181"},"nodeType":"YulFunctionCall","src":"29421:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29403:6:181"},"nodeType":"YulFunctionCall","src":"29403:42:181"},"nodeType":"YulExpressionStatement","src":"29403:42:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29465:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"29476:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29461:3:181"},"nodeType":"YulFunctionCall","src":"29461:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"29481:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29454:6:181"},"nodeType":"YulFunctionCall","src":"29454:34:181"},"nodeType":"YulExpressionStatement","src":"29454:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29508:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"29519:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29504:3:181"},"nodeType":"YulFunctionCall","src":"29504:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"29524:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29497:6:181"},"nodeType":"YulFunctionCall","src":"29497:30:181"},"nodeType":"YulExpressionStatement","src":"29497:30:181"},{"nodeType":"YulAssignment","src":"29536:52:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"29561:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29573:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"29584:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29569:3:181"},"nodeType":"YulFunctionCall","src":"29569:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"29544:16:181"},"nodeType":"YulFunctionCall","src":"29544:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"29536:4:181"}]}]},"name":"abi_encode_tuple_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29346:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"29357:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"29365:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"29373:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"29384:4:181","type":""}],"src":"29220:374:181"},{"body":{"nodeType":"YulBlock","src":"29706:601:181","statements":[{"body":{"nodeType":"YulBlock","src":"29752:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29761:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29764:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"29754:6:181"},"nodeType":"YulFunctionCall","src":"29754:12:181"},"nodeType":"YulExpressionStatement","src":"29754:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"29727:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"29736:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29723:3:181"},"nodeType":"YulFunctionCall","src":"29723:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"29748:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"29719:3:181"},"nodeType":"YulFunctionCall","src":"29719:32:181"},"nodeType":"YulIf","src":"29716:52:181"},{"nodeType":"YulAssignment","src":"29777:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29793:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29787:5:181"},"nodeType":"YulFunctionCall","src":"29787:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"29777:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"29812:39:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29836:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"29847:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29832:3:181"},"nodeType":"YulFunctionCall","src":"29832:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29826:5:181"},"nodeType":"YulFunctionCall","src":"29826:25:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"29816:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"29894:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29903:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29906:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"29896:6:181"},"nodeType":"YulFunctionCall","src":"29896:12:181"},"nodeType":"YulExpressionStatement","src":"29896:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"29866:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"29874:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"29863:2:181"},"nodeType":"YulFunctionCall","src":"29863:30:181"},"nodeType":"YulIf","src":"29860:50:181"},{"nodeType":"YulVariableDeclaration","src":"29919:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29933:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"29944:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29929:3:181"},"nodeType":"YulFunctionCall","src":"29929:22:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"29923:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"29999:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30008:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"30011:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"30001:6:181"},"nodeType":"YulFunctionCall","src":"30001:12:181"},"nodeType":"YulExpressionStatement","src":"30001:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"29978:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"29982:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29974:3:181"},"nodeType":"YulFunctionCall","src":"29974:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"29989:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"29970:3:181"},"nodeType":"YulFunctionCall","src":"29970:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29963:6:181"},"nodeType":"YulFunctionCall","src":"29963:35:181"},"nodeType":"YulIf","src":"29960:55:181"},{"nodeType":"YulVariableDeclaration","src":"30024:19:181","value":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"30040:2:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30034:5:181"},"nodeType":"YulFunctionCall","src":"30034:9:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"30028:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"30052:61:181","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"30109:2:181"}],"functionName":{"name":"array_allocation_size_bytes","nodeType":"YulIdentifier","src":"30081:27:181"},"nodeType":"YulFunctionCall","src":"30081:31:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"30065:15:181"},"nodeType":"YulFunctionCall","src":"30065:48:181"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"30056:5:181","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"30129:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"30136:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30122:6:181"},"nodeType":"YulFunctionCall","src":"30122:17:181"},"nodeType":"YulExpressionStatement","src":"30122:17:181"},{"body":{"nodeType":"YulBlock","src":"30185:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30194:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"30197:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"30187:6:181"},"nodeType":"YulFunctionCall","src":"30187:12:181"},"nodeType":"YulExpressionStatement","src":"30187:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"30162:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"30166:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30158:3:181"},"nodeType":"YulFunctionCall","src":"30158:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"30171:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30154:3:181"},"nodeType":"YulFunctionCall","src":"30154:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"30176:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"30151:2:181"},"nodeType":"YulFunctionCall","src":"30151:33:181"},"nodeType":"YulIf","src":"30148:53:181"},{"expression":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"30249:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"30253:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30245:3:181"},"nodeType":"YulFunctionCall","src":"30245:11:181"},{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"30262:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"30269:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30258:3:181"},"nodeType":"YulFunctionCall","src":"30258:14:181"},{"name":"_2","nodeType":"YulIdentifier","src":"30274:2:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"30210:34:181"},"nodeType":"YulFunctionCall","src":"30210:67:181"},"nodeType":"YulExpressionStatement","src":"30210:67:181"},{"nodeType":"YulAssignment","src":"30286:15:181","value":{"name":"array","nodeType":"YulIdentifier","src":"30296:5:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"30286:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_bytes_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29664:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"29675:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"29687:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"29695:6:181","type":""}],"src":"29599:708:181"},{"body":{"nodeType":"YulBlock","src":"30605:414:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30622:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"30633:3:181","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30615:6:181"},"nodeType":"YulFunctionCall","src":"30615:22:181"},"nodeType":"YulExpressionStatement","src":"30615:22:181"},{"nodeType":"YulVariableDeclaration","src":"30646:73:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"30691:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30703:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"30714:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30699:3:181"},"nodeType":"YulFunctionCall","src":"30699:19:181"}],"functionName":{"name":"abi_encode_struct_TransferInfo","nodeType":"YulIdentifier","src":"30660:30:181"},"nodeType":"YulFunctionCall","src":"30660:59:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"30650:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"30728:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30746:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"30751:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"30742:3:181"},"nodeType":"YulFunctionCall","src":"30742:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"30755:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30738:3:181"},"nodeType":"YulFunctionCall","src":"30738:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"30732:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30777:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"30788:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30773:3:181"},"nodeType":"YulFunctionCall","src":"30773:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30797:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"30805:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30793:3:181"},"nodeType":"YulFunctionCall","src":"30793:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30766:6:181"},"nodeType":"YulFunctionCall","src":"30766:43:181"},"nodeType":"YulExpressionStatement","src":"30766:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30829:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"30840:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30825:3:181"},"nodeType":"YulFunctionCall","src":"30825:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"30845:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30818:6:181"},"nodeType":"YulFunctionCall","src":"30818:34:181"},"nodeType":"YulExpressionStatement","src":"30818:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30872:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"30883:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30868:3:181"},"nodeType":"YulFunctionCall","src":"30868:18:181"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"30892:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"30900:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30888:3:181"},"nodeType":"YulFunctionCall","src":"30888:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30861:6:181"},"nodeType":"YulFunctionCall","src":"30861:43:181"},"nodeType":"YulExpressionStatement","src":"30861:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30924:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"30935:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30920:3:181"},"nodeType":"YulFunctionCall","src":"30920:19:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"30945:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"30953:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"30941:3:181"},"nodeType":"YulFunctionCall","src":"30941:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30913:6:181"},"nodeType":"YulFunctionCall","src":"30913:51:181"},"nodeType":"YulExpressionStatement","src":"30913:51:181"},{"nodeType":"YulAssignment","src":"30973:40:181","value":{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"30998:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"31006:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"30981:16:181"},"nodeType":"YulFunctionCall","src":"30981:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"30973:4:181"}]}]},"name":"abi_encode_tuple_t_struct$_TransferInfo_$29351_memory_ptr_t_address_t_uint256_t_address_t_bytes_memory_ptr__to_t_struct$_TransferInfo_$29351_memory_ptr_t_address_t_uint256_t_address_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"30542:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"30553:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"30561:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"30569:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"30577:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"30585:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"30596:4:181","type":""}],"src":"30312:707:181"},{"body":{"nodeType":"YulBlock","src":"31244:160:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"31261:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"31266:66:181","type":"","value":"0x19457468657265756d205369676e6564204d6573736167653a0a333200000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31254:6:181"},"nodeType":"YulFunctionCall","src":"31254:79:181"},"nodeType":"YulExpressionStatement","src":"31254:79:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"31353:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"31358:2:181","type":"","value":"28"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31349:3:181"},"nodeType":"YulFunctionCall","src":"31349:12:181"},{"name":"value0","nodeType":"YulIdentifier","src":"31363:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31342:6:181"},"nodeType":"YulFunctionCall","src":"31342:28:181"},"nodeType":"YulExpressionStatement","src":"31342:28:181"},{"nodeType":"YulAssignment","src":"31379:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"31390:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"31395:2:181","type":"","value":"60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31386:3:181"},"nodeType":"YulFunctionCall","src":"31386:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"31379:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73_t_bytes32__to_t_string_memory_ptr_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"31220:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"31225:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"31236:3:181","type":""}],"src":"31024:380:181"},{"body":{"nodeType":"YulBlock","src":"31622:306:181","statements":[{"nodeType":"YulAssignment","src":"31632:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31644:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"31655:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31640:3:181"},"nodeType":"YulFunctionCall","src":"31640:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"31632:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31675:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"31686:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31668:6:181"},"nodeType":"YulFunctionCall","src":"31668:25:181"},"nodeType":"YulExpressionStatement","src":"31668:25:181"},{"nodeType":"YulVariableDeclaration","src":"31702:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"31720:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"31725:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"31716:3:181"},"nodeType":"YulFunctionCall","src":"31716:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"31729:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"31712:3:181"},"nodeType":"YulFunctionCall","src":"31712:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"31706:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31751:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"31762:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31747:3:181"},"nodeType":"YulFunctionCall","src":"31747:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"31771:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"31779:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31767:3:181"},"nodeType":"YulFunctionCall","src":"31767:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31740:6:181"},"nodeType":"YulFunctionCall","src":"31740:43:181"},"nodeType":"YulExpressionStatement","src":"31740:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31803:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"31814:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31799:3:181"},"nodeType":"YulFunctionCall","src":"31799:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"31823:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"31831:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31819:3:181"},"nodeType":"YulFunctionCall","src":"31819:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31792:6:181"},"nodeType":"YulFunctionCall","src":"31792:43:181"},"nodeType":"YulExpressionStatement","src":"31792:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31855:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"31866:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31851:3:181"},"nodeType":"YulFunctionCall","src":"31851:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"31871:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31844:6:181"},"nodeType":"YulFunctionCall","src":"31844:34:181"},"nodeType":"YulExpressionStatement","src":"31844:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31898:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"31909:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31894:3:181"},"nodeType":"YulFunctionCall","src":"31894:19:181"},{"name":"value4","nodeType":"YulIdentifier","src":"31915:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31887:6:181"},"nodeType":"YulFunctionCall","src":"31887:35:181"},"nodeType":"YulExpressionStatement","src":"31887:35:181"}]},"name":"abi_encode_tuple_t_uint256_t_address_t_address_t_uint256_t_uint256__to_t_uint256_t_address_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"31559:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"31570:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"31578:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"31586:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"31594:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"31602:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"31613:4:181","type":""}],"src":"31409:519:181"},{"body":{"nodeType":"YulBlock","src":"32090:218:181","statements":[{"nodeType":"YulAssignment","src":"32100:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32112:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"32123:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32108:3:181"},"nodeType":"YulFunctionCall","src":"32108:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"32100:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"32135:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"32153:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"32158:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"32149:3:181"},"nodeType":"YulFunctionCall","src":"32149:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"32162:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"32145:3:181"},"nodeType":"YulFunctionCall","src":"32145:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"32139:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32180:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"32195:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"32203:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"32191:3:181"},"nodeType":"YulFunctionCall","src":"32191:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32173:6:181"},"nodeType":"YulFunctionCall","src":"32173:34:181"},"nodeType":"YulExpressionStatement","src":"32173:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32227:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"32238:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32223:3:181"},"nodeType":"YulFunctionCall","src":"32223:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"32247:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"32255:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"32243:3:181"},"nodeType":"YulFunctionCall","src":"32243:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32216:6:181"},"nodeType":"YulFunctionCall","src":"32216:43:181"},"nodeType":"YulExpressionStatement","src":"32216:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32279:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"32290:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32275:3:181"},"nodeType":"YulFunctionCall","src":"32275:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"32295:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32268:6:181"},"nodeType":"YulFunctionCall","src":"32268:34:181"},"nodeType":"YulExpressionStatement","src":"32268:34:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"32043:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"32054:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"32062:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"32070:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"32081:4:181","type":""}],"src":"31933:375:181"},{"body":{"nodeType":"YulBlock","src":"32487:174:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32504:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"32515:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32497:6:181"},"nodeType":"YulFunctionCall","src":"32497:21:181"},"nodeType":"YulExpressionStatement","src":"32497:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32538:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"32549:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32534:3:181"},"nodeType":"YulFunctionCall","src":"32534:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"32554:2:181","type":"","value":"24"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32527:6:181"},"nodeType":"YulFunctionCall","src":"32527:30:181"},"nodeType":"YulExpressionStatement","src":"32527:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32577:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"32588:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32573:3:181"},"nodeType":"YulFunctionCall","src":"32573:18:181"},{"hexValue":"45434453413a20696e76616c6964207369676e6174757265","kind":"string","nodeType":"YulLiteral","src":"32593:26:181","type":"","value":"ECDSA: invalid signature"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32566:6:181"},"nodeType":"YulFunctionCall","src":"32566:54:181"},"nodeType":"YulExpressionStatement","src":"32566:54:181"},{"nodeType":"YulAssignment","src":"32629:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32641:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"32652:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32637:3:181"},"nodeType":"YulFunctionCall","src":"32637:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"32629:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"32464:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"32478:4:181","type":""}],"src":"32313:348:181"},{"body":{"nodeType":"YulBlock","src":"32840:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32857:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"32868:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32850:6:181"},"nodeType":"YulFunctionCall","src":"32850:21:181"},"nodeType":"YulExpressionStatement","src":"32850:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32891:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"32902:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32887:3:181"},"nodeType":"YulFunctionCall","src":"32887:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"32907:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32880:6:181"},"nodeType":"YulFunctionCall","src":"32880:30:181"},"nodeType":"YulExpressionStatement","src":"32880:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32930:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"32941:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32926:3:181"},"nodeType":"YulFunctionCall","src":"32926:18:181"},{"hexValue":"45434453413a20696e76616c6964207369676e6174757265206c656e677468","kind":"string","nodeType":"YulLiteral","src":"32946:33:181","type":"","value":"ECDSA: invalid signature length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32919:6:181"},"nodeType":"YulFunctionCall","src":"32919:61:181"},"nodeType":"YulExpressionStatement","src":"32919:61:181"},{"nodeType":"YulAssignment","src":"32989:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33001:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"33012:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32997:3:181"},"nodeType":"YulFunctionCall","src":"32997:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"32989:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"32817:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"32831:4:181","type":""}],"src":"32666:355:181"},{"body":{"nodeType":"YulBlock","src":"33200:224:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33217:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"33228:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33210:6:181"},"nodeType":"YulFunctionCall","src":"33210:21:181"},"nodeType":"YulExpressionStatement","src":"33210:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33251:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"33262:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33247:3:181"},"nodeType":"YulFunctionCall","src":"33247:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"33267:2:181","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33240:6:181"},"nodeType":"YulFunctionCall","src":"33240:30:181"},"nodeType":"YulExpressionStatement","src":"33240:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33290:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"33301:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33286:3:181"},"nodeType":"YulFunctionCall","src":"33286:18:181"},{"hexValue":"45434453413a20696e76616c6964207369676e6174757265202773272076616c","kind":"string","nodeType":"YulLiteral","src":"33306:34:181","type":"","value":"ECDSA: invalid signature 's' val"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33279:6:181"},"nodeType":"YulFunctionCall","src":"33279:62:181"},"nodeType":"YulExpressionStatement","src":"33279:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33361:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"33372:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33357:3:181"},"nodeType":"YulFunctionCall","src":"33357:18:181"},{"hexValue":"7565","kind":"string","nodeType":"YulLiteral","src":"33377:4:181","type":"","value":"ue"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33350:6:181"},"nodeType":"YulFunctionCall","src":"33350:32:181"},"nodeType":"YulExpressionStatement","src":"33350:32:181"},{"nodeType":"YulAssignment","src":"33391:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33403:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"33414:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33399:3:181"},"nodeType":"YulFunctionCall","src":"33399:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"33391:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"33177:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"33191:4:181","type":""}],"src":"33026:398:181"},{"body":{"nodeType":"YulBlock","src":"33603:163:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33620:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"33631:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33613:6:181"},"nodeType":"YulFunctionCall","src":"33613:21:181"},"nodeType":"YulExpressionStatement","src":"33613:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33654:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"33665:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33650:3:181"},"nodeType":"YulFunctionCall","src":"33650:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"33670:2:181","type":"","value":"13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33643:6:181"},"nodeType":"YulFunctionCall","src":"33643:30:181"},"nodeType":"YulExpressionStatement","src":"33643:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33693:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"33704:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33689:3:181"},"nodeType":"YulFunctionCall","src":"33689:18:181"},{"hexValue":"64697361626c656420706f6f6c","kind":"string","nodeType":"YulLiteral","src":"33709:15:181","type":"","value":"disabled pool"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33682:6:181"},"nodeType":"YulFunctionCall","src":"33682:43:181"},"nodeType":"YulExpressionStatement","src":"33682:43:181"},{"nodeType":"YulAssignment","src":"33734:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33746:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"33757:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33742:3:181"},"nodeType":"YulFunctionCall","src":"33742:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"33734:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"33580:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"33594:4:181","type":""}],"src":"33429:337:181"},{"body":{"nodeType":"YulBlock","src":"33945:172:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33962:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"33973:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33955:6:181"},"nodeType":"YulFunctionCall","src":"33955:21:181"},"nodeType":"YulExpressionStatement","src":"33955:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33996:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"34007:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33992:3:181"},"nodeType":"YulFunctionCall","src":"33992:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"34012:2:181","type":"","value":"22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33985:6:181"},"nodeType":"YulFunctionCall","src":"33985:30:181"},"nodeType":"YulExpressionStatement","src":"33985:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34035:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"34046:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34031:3:181"},"nodeType":"YulFunctionCall","src":"34031:18:181"},{"hexValue":"6d6f7265207468616e20706f6f6c2062616c616e6365","kind":"string","nodeType":"YulLiteral","src":"34051:24:181","type":"","value":"more than pool balance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34024:6:181"},"nodeType":"YulFunctionCall","src":"34024:52:181"},"nodeType":"YulExpressionStatement","src":"34024:52:181"},{"nodeType":"YulAssignment","src":"34085:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34097:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"34108:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34093:3:181"},"nodeType":"YulFunctionCall","src":"34093:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"34085:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e8a8072019b830892cd4deb2ef47d584565d80622116f9044abf32bb22a18a4f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"33922:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"33936:4:181","type":""}],"src":"33771:346:181"},{"body":{"nodeType":"YulBlock","src":"34296:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34313:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"34324:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34306:6:181"},"nodeType":"YulFunctionCall","src":"34306:21:181"},"nodeType":"YulExpressionStatement","src":"34306:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34347:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"34358:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34343:3:181"},"nodeType":"YulFunctionCall","src":"34343:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"34363:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34336:6:181"},"nodeType":"YulFunctionCall","src":"34336:30:181"},"nodeType":"YulExpressionStatement","src":"34336:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34386:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"34397:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34382:3:181"},"nodeType":"YulFunctionCall","src":"34382:18:181"},{"hexValue":"6479203c206d696e4479","kind":"string","nodeType":"YulLiteral","src":"34402:12:181","type":"","value":"dy < minDy"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34375:6:181"},"nodeType":"YulFunctionCall","src":"34375:40:181"},"nodeType":"YulExpressionStatement","src":"34375:40:181"},{"nodeType":"YulAssignment","src":"34424:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34436:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"34447:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34432:3:181"},"nodeType":"YulFunctionCall","src":"34432:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"34424:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_6e40b987a1bdbab1b9eb0952052a8ed8be99e503ecda84e0b9bc15992dc05932__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"34273:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"34287:4:181","type":""}],"src":"34122:334:181"},{"body":{"nodeType":"YulBlock","src":"34642:228:181","statements":[{"nodeType":"YulAssignment","src":"34652:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34664:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"34675:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34660:3:181"},"nodeType":"YulFunctionCall","src":"34660:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"34652:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34695:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"34706:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34688:6:181"},"nodeType":"YulFunctionCall","src":"34688:25:181"},"nodeType":"YulExpressionStatement","src":"34688:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34733:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"34744:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34729:3:181"},"nodeType":"YulFunctionCall","src":"34729:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"34749:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34722:6:181"},"nodeType":"YulFunctionCall","src":"34722:34:181"},"nodeType":"YulExpressionStatement","src":"34722:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34776:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"34787:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34772:3:181"},"nodeType":"YulFunctionCall","src":"34772:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"34796:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"34804:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34792:3:181"},"nodeType":"YulFunctionCall","src":"34792:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34765:6:181"},"nodeType":"YulFunctionCall","src":"34765:45:181"},"nodeType":"YulExpressionStatement","src":"34765:45:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34830:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"34841:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34826:3:181"},"nodeType":"YulFunctionCall","src":"34826:18:181"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"34850:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"34858:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34846:3:181"},"nodeType":"YulFunctionCall","src":"34846:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34819:6:181"},"nodeType":"YulFunctionCall","src":"34819:45:181"},"nodeType":"YulExpressionStatement","src":"34819:45:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint8_t_uint8__to_t_uint256_t_uint256_t_uint128_t_uint128__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"34587:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"34598:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"34606:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"34614:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"34622:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"34633:4:181","type":""}],"src":"34461:409:181"},{"body":{"nodeType":"YulBlock","src":"35049:244:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35066:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"35077:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35059:6:181"},"nodeType":"YulFunctionCall","src":"35059:21:181"},"nodeType":"YulExpressionStatement","src":"35059:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35100:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"35111:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35096:3:181"},"nodeType":"YulFunctionCall","src":"35096:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"35116:2:181","type":"","value":"54"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35089:6:181"},"nodeType":"YulFunctionCall","src":"35089:30:181"},"nodeType":"YulExpressionStatement","src":"35089:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35139:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"35150:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35135:3:181"},"nodeType":"YulFunctionCall","src":"35135:18:181"},{"hexValue":"5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f","kind":"string","nodeType":"YulLiteral","src":"35155:34:181","type":"","value":"SafeERC20: approve from non-zero"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35128:6:181"},"nodeType":"YulFunctionCall","src":"35128:62:181"},"nodeType":"YulExpressionStatement","src":"35128:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35210:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"35221:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35206:3:181"},"nodeType":"YulFunctionCall","src":"35206:18:181"},{"hexValue":"20746f206e6f6e2d7a65726f20616c6c6f77616e6365","kind":"string","nodeType":"YulLiteral","src":"35226:24:181","type":"","value":" to non-zero allowance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35199:6:181"},"nodeType":"YulFunctionCall","src":"35199:52:181"},"nodeType":"YulExpressionStatement","src":"35199:52:181"},{"nodeType":"YulAssignment","src":"35260:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35272:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"35283:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35268:3:181"},"nodeType":"YulFunctionCall","src":"35268:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"35260:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"35026:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"35040:4:181","type":""}],"src":"34875:418:181"},{"body":{"nodeType":"YulBlock","src":"35376:167:181","statements":[{"body":{"nodeType":"YulBlock","src":"35422:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35431:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"35434:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"35424:6:181"},"nodeType":"YulFunctionCall","src":"35424:12:181"},"nodeType":"YulExpressionStatement","src":"35424:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"35397:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"35406:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"35393:3:181"},"nodeType":"YulFunctionCall","src":"35393:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"35418:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"35389:3:181"},"nodeType":"YulFunctionCall","src":"35389:32:181"},"nodeType":"YulIf","src":"35386:52:181"},{"nodeType":"YulVariableDeclaration","src":"35447:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35466:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35460:5:181"},"nodeType":"YulFunctionCall","src":"35460:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"35451:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"35507:5:181"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"35485:21:181"},"nodeType":"YulFunctionCall","src":"35485:28:181"},"nodeType":"YulExpressionStatement","src":"35485:28:181"},{"nodeType":"YulAssignment","src":"35522:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"35532:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"35522:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"35342:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"35353:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"35365:6:181","type":""}],"src":"35298:245:181"},{"body":{"nodeType":"YulBlock","src":"35722:232:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35739:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"35750:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35732:6:181"},"nodeType":"YulFunctionCall","src":"35732:21:181"},"nodeType":"YulExpressionStatement","src":"35732:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35773:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"35784:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35769:3:181"},"nodeType":"YulFunctionCall","src":"35769:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"35789:2:181","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35762:6:181"},"nodeType":"YulFunctionCall","src":"35762:30:181"},"nodeType":"YulExpressionStatement","src":"35762:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35812:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"35823:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35808:3:181"},"nodeType":"YulFunctionCall","src":"35808:18:181"},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e","kind":"string","nodeType":"YulLiteral","src":"35828:34:181","type":"","value":"SafeERC20: ERC20 operation did n"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35801:6:181"},"nodeType":"YulFunctionCall","src":"35801:62:181"},"nodeType":"YulExpressionStatement","src":"35801:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35883:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"35894:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35879:3:181"},"nodeType":"YulFunctionCall","src":"35879:18:181"},{"hexValue":"6f742073756363656564","kind":"string","nodeType":"YulLiteral","src":"35899:12:181","type":"","value":"ot succeed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35872:6:181"},"nodeType":"YulFunctionCall","src":"35872:40:181"},"nodeType":"YulExpressionStatement","src":"35872:40:181"},{"nodeType":"YulAssignment","src":"35921:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35933:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"35944:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35929:3:181"},"nodeType":"YulFunctionCall","src":"35929:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"35921:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"35699:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"35713:4:181","type":""}],"src":"35548:406:181"},{"body":{"nodeType":"YulBlock","src":"36140:217:181","statements":[{"nodeType":"YulAssignment","src":"36150:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36162:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"36173:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36158:3:181"},"nodeType":"YulFunctionCall","src":"36158:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"36150:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36193:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"36204:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36186:6:181"},"nodeType":"YulFunctionCall","src":"36186:25:181"},"nodeType":"YulExpressionStatement","src":"36186:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36231:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"36242:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36227:3:181"},"nodeType":"YulFunctionCall","src":"36227:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"36251:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"36259:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36247:3:181"},"nodeType":"YulFunctionCall","src":"36247:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36220:6:181"},"nodeType":"YulFunctionCall","src":"36220:45:181"},"nodeType":"YulExpressionStatement","src":"36220:45:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36285:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"36296:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36281:3:181"},"nodeType":"YulFunctionCall","src":"36281:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"36301:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36274:6:181"},"nodeType":"YulFunctionCall","src":"36274:34:181"},"nodeType":"YulExpressionStatement","src":"36274:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36328:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"36339:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36324:3:181"},"nodeType":"YulFunctionCall","src":"36324:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"36344:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36317:6:181"},"nodeType":"YulFunctionCall","src":"36317:34:181"},"nodeType":"YulExpressionStatement","src":"36317:34:181"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"36085:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"36096:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"36104:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"36112:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"36120:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"36131:4:181","type":""}],"src":"35959:398:181"},{"body":{"nodeType":"YulBlock","src":"36536:168:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36553:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"36564:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36546:6:181"},"nodeType":"YulFunctionCall","src":"36546:21:181"},"nodeType":"YulExpressionStatement","src":"36546:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36587:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"36598:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36583:3:181"},"nodeType":"YulFunctionCall","src":"36583:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"36603:2:181","type":"","value":"18"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36576:6:181"},"nodeType":"YulFunctionCall","src":"36576:30:181"},"nodeType":"YulExpressionStatement","src":"36576:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36626:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"36637:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36622:3:181"},"nodeType":"YulFunctionCall","src":"36622:18:181"},{"hexValue":"696e646578206f7574206f662072616e6765","kind":"string","nodeType":"YulLiteral","src":"36642:20:181","type":"","value":"index out of range"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36615:6:181"},"nodeType":"YulFunctionCall","src":"36615:48:181"},"nodeType":"YulExpressionStatement","src":"36615:48:181"},{"nodeType":"YulAssignment","src":"36672:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36684:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"36695:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36680:3:181"},"nodeType":"YulFunctionCall","src":"36680:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"36672:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"36513:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"36527:4:181","type":""}],"src":"36362:342:181"},{"body":{"nodeType":"YulBlock","src":"36883:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36900:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"36911:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36893:6:181"},"nodeType":"YulFunctionCall","src":"36893:21:181"},"nodeType":"YulExpressionStatement","src":"36893:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36934:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"36945:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36930:3:181"},"nodeType":"YulFunctionCall","src":"36930:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"36950:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36923:6:181"},"nodeType":"YulFunctionCall","src":"36923:30:181"},"nodeType":"YulExpressionStatement","src":"36923:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36973:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"36984:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36969:3:181"},"nodeType":"YulFunctionCall","src":"36969:18:181"},{"hexValue":"6d69736d61746368206d756c7469706c69657273","kind":"string","nodeType":"YulLiteral","src":"36989:22:181","type":"","value":"mismatch multipliers"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36962:6:181"},"nodeType":"YulFunctionCall","src":"36962:50:181"},"nodeType":"YulExpressionStatement","src":"36962:50:181"},{"nodeType":"YulAssignment","src":"37021:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37033:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"37044:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37029:3:181"},"nodeType":"YulFunctionCall","src":"37029:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"37021:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d9b2e328f4209b3735eca19488e3afd57ba32c456d5e1a010a233e595f7b0b47__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"36860:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"36874:4:181","type":""}],"src":"36709:344:181"},{"body":{"nodeType":"YulBlock","src":"37232:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37249:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"37260:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37242:6:181"},"nodeType":"YulFunctionCall","src":"37242:21:181"},"nodeType":"YulExpressionStatement","src":"37242:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37283:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"37294:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37279:3:181"},"nodeType":"YulFunctionCall","src":"37279:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"37299:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37272:6:181"},"nodeType":"YulFunctionCall","src":"37272:30:181"},"nodeType":"YulExpressionStatement","src":"37272:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37322:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"37333:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37318:3:181"},"nodeType":"YulFunctionCall","src":"37318:18:181"},{"hexValue":"636f6d7061726520746f6b656e20746f20697473656c66","kind":"string","nodeType":"YulLiteral","src":"37338:25:181","type":"","value":"compare token to itself"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37311:6:181"},"nodeType":"YulFunctionCall","src":"37311:53:181"},"nodeType":"YulExpressionStatement","src":"37311:53:181"},{"nodeType":"YulAssignment","src":"37373:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37385:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"37396:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37381:3:181"},"nodeType":"YulFunctionCall","src":"37381:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"37373:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"37209:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"37223:4:181","type":""}],"src":"37058:347:181"},{"body":{"nodeType":"YulBlock","src":"37584:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37601:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"37612:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37594:6:181"},"nodeType":"YulFunctionCall","src":"37594:21:181"},"nodeType":"YulExpressionStatement","src":"37594:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37635:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"37646:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37631:3:181"},"nodeType":"YulFunctionCall","src":"37631:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"37651:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37624:6:181"},"nodeType":"YulFunctionCall","src":"37624:30:181"},"nodeType":"YulExpressionStatement","src":"37624:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37674:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"37685:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37670:3:181"},"nodeType":"YulFunctionCall","src":"37670:18:181"},{"hexValue":"746f6b656e206e6f7420666f756e64","kind":"string","nodeType":"YulLiteral","src":"37690:17:181","type":"","value":"token not found"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37663:6:181"},"nodeType":"YulFunctionCall","src":"37663:45:181"},"nodeType":"YulExpressionStatement","src":"37663:45:181"},{"nodeType":"YulAssignment","src":"37717:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37729:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"37740:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37725:3:181"},"nodeType":"YulFunctionCall","src":"37725:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"37717:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9696d201946a7b6efbea55f1e57c9bbecf77447f35c86ca3cfdc292daa9e8b3d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"37561:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"37575:4:181","type":""}],"src":"37410:339:181"},{"body":{"nodeType":"YulBlock","src":"37928:180:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37945:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"37956:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37938:6:181"},"nodeType":"YulFunctionCall","src":"37938:21:181"},"nodeType":"YulExpressionStatement","src":"37938:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37979:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"37990:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37975:3:181"},"nodeType":"YulFunctionCall","src":"37975:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"37995:2:181","type":"","value":"30"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37968:6:181"},"nodeType":"YulFunctionCall","src":"37968:30:181"},"nodeType":"YulExpressionStatement","src":"37968:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38018:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"38029:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38014:3:181"},"nodeType":"YulFunctionCall","src":"38014:18:181"},{"hexValue":"417070726f78696d6174696f6e20646964206e6f7420636f6e7665726765","kind":"string","nodeType":"YulLiteral","src":"38034:32:181","type":"","value":"Approximation did not converge"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38007:6:181"},"nodeType":"YulFunctionCall","src":"38007:60:181"},"nodeType":"YulExpressionStatement","src":"38007:60:181"},{"nodeType":"YulAssignment","src":"38076:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38088:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"38099:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38084:3:181"},"nodeType":"YulFunctionCall","src":"38084:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"38076:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"37905:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"37919:4:181","type":""}],"src":"37754:354:181"},{"body":{"nodeType":"YulBlock","src":"38287:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38304:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"38315:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38297:6:181"},"nodeType":"YulFunctionCall","src":"38297:21:181"},"nodeType":"YulExpressionStatement","src":"38297:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38338:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"38349:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38334:3:181"},"nodeType":"YulFunctionCall","src":"38334:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"38354:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38327:6:181"},"nodeType":"YulFunctionCall","src":"38327:30:181"},"nodeType":"YulExpressionStatement","src":"38327:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38377:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"38388:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38373:3:181"},"nodeType":"YulFunctionCall","src":"38373:18:181"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f","kind":"string","nodeType":"YulLiteral","src":"38393:34:181","type":"","value":"Address: insufficient balance fo"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38366:6:181"},"nodeType":"YulFunctionCall","src":"38366:62:181"},"nodeType":"YulExpressionStatement","src":"38366:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38448:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"38459:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38444:3:181"},"nodeType":"YulFunctionCall","src":"38444:18:181"},{"hexValue":"722063616c6c","kind":"string","nodeType":"YulLiteral","src":"38464:8:181","type":"","value":"r call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38437:6:181"},"nodeType":"YulFunctionCall","src":"38437:36:181"},"nodeType":"YulExpressionStatement","src":"38437:36:181"},{"nodeType":"YulAssignment","src":"38482:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38494:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"38505:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38490:3:181"},"nodeType":"YulFunctionCall","src":"38490:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"38482:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"38264:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"38278:4:181","type":""}],"src":"38113:402:181"},{"body":{"nodeType":"YulBlock","src":"38657:150:181","statements":[{"nodeType":"YulVariableDeclaration","src":"38667:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"38687:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38681:5:181"},"nodeType":"YulFunctionCall","src":"38681:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"38671:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"38742:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"38750:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38738:3:181"},"nodeType":"YulFunctionCall","src":"38738:17:181"},{"name":"pos","nodeType":"YulIdentifier","src":"38757:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"38762:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"38703:34:181"},"nodeType":"YulFunctionCall","src":"38703:66:181"},"nodeType":"YulExpressionStatement","src":"38703:66:181"},{"nodeType":"YulAssignment","src":"38778:23:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"38789:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"38794:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38785:3:181"},"nodeType":"YulFunctionCall","src":"38785:16:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"38778:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"38633:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"38638:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"38649:3:181","type":""}],"src":"38520:287:181"},{"body":{"nodeType":"YulBlock","src":"38986:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39003:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"39014:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38996:6:181"},"nodeType":"YulFunctionCall","src":"38996:21:181"},"nodeType":"YulExpressionStatement","src":"38996:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39037:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"39048:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39033:3:181"},"nodeType":"YulFunctionCall","src":"39033:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"39053:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39026:6:181"},"nodeType":"YulFunctionCall","src":"39026:30:181"},"nodeType":"YulExpressionStatement","src":"39026:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39076:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"39087:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39072:3:181"},"nodeType":"YulFunctionCall","src":"39072:18:181"},{"hexValue":"4420646f6573206e6f7420636f6e7665726765","kind":"string","nodeType":"YulLiteral","src":"39092:21:181","type":"","value":"D does not converge"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39065:6:181"},"nodeType":"YulFunctionCall","src":"39065:49:181"},"nodeType":"YulExpressionStatement","src":"39065:49:181"},{"nodeType":"YulAssignment","src":"39123:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39135:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"39146:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39131:3:181"},"nodeType":"YulFunctionCall","src":"39131:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"39123:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_eb80683d13e69e40aa7f57ce3558136d2c8c4c88f682021213f7030fc3d23afd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"38963:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"38977:4:181","type":""}],"src":"38812:343:181"},{"body":{"nodeType":"YulBlock","src":"39334:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39351:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"39362:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39344:6:181"},"nodeType":"YulFunctionCall","src":"39344:21:181"},"nodeType":"YulExpressionStatement","src":"39344:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39385:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"39396:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39381:3:181"},"nodeType":"YulFunctionCall","src":"39381:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"39401:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39374:6:181"},"nodeType":"YulFunctionCall","src":"39374:30:181"},"nodeType":"YulExpressionStatement","src":"39374:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39424:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"39435:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39420:3:181"},"nodeType":"YulFunctionCall","src":"39420:18:181"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"39440:31:181","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39413:6:181"},"nodeType":"YulFunctionCall","src":"39413:59:181"},"nodeType":"YulExpressionStatement","src":"39413:59:181"},{"nodeType":"YulAssignment","src":"39481:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39493:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"39504:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39489:3:181"},"nodeType":"YulFunctionCall","src":"39489:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"39481:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"39311:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"39325:4:181","type":""}],"src":"39160:353:181"},{"body":{"nodeType":"YulBlock","src":"39639:98:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39656:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"39667:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39649:6:181"},"nodeType":"YulFunctionCall","src":"39649:21:181"},"nodeType":"YulExpressionStatement","src":"39649:21:181"},{"nodeType":"YulAssignment","src":"39679:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"39704:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39716:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"39727:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39712:3:181"},"nodeType":"YulFunctionCall","src":"39712:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"39687:16:181"},"nodeType":"YulFunctionCall","src":"39687:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"39679:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"39608:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"39619:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"39630:4:181","type":""}],"src":"39518:219:181"}]},"contents":"{\n    { }\n    function validator_revert_uint32(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_uint32(value)\n    }\n    function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_uint32(value)\n        value0 := value\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_bool(value, pos)\n    {\n        mstore(pos, iszero(iszero(value)))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_decode_struct_TransferInfo_calldata(offset, end) -> value\n    {\n        if slt(sub(end, offset), 416) { revert(0, 0) }\n        value := offset\n    }\n    function abi_decode_tuple_t_struct$_TransferInfo_$29351_calldata_ptrt_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_struct_TransferInfo_calldata(add(headStart, offset), dataEnd)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_struct$_ExecuteArgs_$29365_calldata_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if slt(sub(dataEnd, _1), 160) { revert(0, 0) }\n        value0 := _1\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_uint32t_addresst_addresst_addresst_uint256t_uint256t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_uint32(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        let value_3 := calldataload(add(headStart, 96))\n        validator_revert_address(value_3)\n        value3 := value_3\n        value4 := calldataload(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        let offset := calldataload(add(headStart, 192))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n        value6 := add(_2, 32)\n        value7 := length\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_uint32t_bytes32(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_uint32(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function validator_assert_enum_DestinationTransferStatus(value)\n    {\n        if iszero(lt(value, 4))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_enum$_DestinationTransferStatus_$29324__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        validator_assert_enum_DestinationTransferStatus(value0)\n        mstore(headStart, value0)\n    }\n    function abi_encode_uint32(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffff))\n    }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function abi_decode_tuple_t_struct$_TransferInfo_$29351_calldata_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_struct_TransferInfo_calldata(add(headStart, offset), dataEnd)\n    }\n    function abi_decode_tuple_t_uint32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_uint32(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_4834() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x01a0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_bool(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_bool(value)\n    }\n    function array_allocation_size_bytes(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(and(add(length, 31), not(31)), 0x20)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let array_1 := allocate_memory(array_allocation_size_bytes(_1))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(array_1, _1), 0x20), 0)\n        array := array_1\n    }\n    function convert_t_struct$_TransferInfo_$29351_calldata_ptr_to_t_struct$_TransferInfo_$29351_memory_ptr(value) -> converted\n    {\n        if slt(sub(calldatasize(), value), 0x01a0) { revert(0, 0) }\n        let value_1 := allocate_memory_4834()\n        mstore(value_1, abi_decode_uint32(value))\n        mstore(add(value_1, 32), abi_decode_uint32(add(value, 32)))\n        mstore(add(value_1, 64), abi_decode_uint32(add(value, 64)))\n        mstore(add(value_1, 96), abi_decode_address(add(value, 96)))\n        mstore(add(value_1, 128), abi_decode_address(add(value, 128)))\n        mstore(add(value_1, 160), abi_decode_bool(add(value, 160)))\n        let offset := calldataload(add(value, 192))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        mstore(add(value_1, 192), abi_decode_bytes(add(value, offset), calldatasize()))\n        mstore(add(value_1, 224), calldataload(add(value, 224)))\n        let _1 := 256\n        mstore(add(value_1, _1), abi_decode_address(add(value, _1)))\n        let _2 := 288\n        mstore(add(value_1, _2), calldataload(add(value, _2)))\n        let _3 := 320\n        mstore(add(value_1, _3), calldataload(add(value, _3)))\n        let _4 := 352\n        mstore(add(value_1, _4), calldataload(add(value, _4)))\n        let _5 := 384\n        mstore(add(value_1, _5), calldataload(add(value, _5)))\n        converted := value_1\n    }\n    function access_calldata_tail_t_struct$_TransferInfo_$29351_calldata_ptr(base_ref, ptr_to_tail) -> addr\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(414)))) { revert(0, 0) }\n        addr := add(base_ref, rel_offset_of_tail)\n    }\n    function calldata_access_bytes_calldata(base_ref, ptr) -> value, length\n    {\n        let rel_offset_of_tail := calldataload(ptr)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n        let value_1 := add(rel_offset_of_tail, base_ref)\n        length := calldataload(value_1)\n        value := add(value_1, 0x20)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        if sgt(value, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function abi_encode_bytes_calldata(start, length, pos) -> end\n    {\n        mstore(pos, length)\n        calldatacopy(add(pos, 0x20), start, length)\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function calldata_access_array_address_dyn_calldata(base_ref, ptr) -> value, length\n    {\n        let rel_offset_of_tail := calldataload(ptr)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n        let value_1 := add(rel_offset_of_tail, base_ref)\n        length := calldataload(value_1)\n        value := add(value_1, 0x20)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        if sgt(value, sub(calldatasize(), shl(5, length))) { revert(0, 0) }\n    }\n    function abi_encode_array_address_dyn_calldata(value, length, pos) -> end\n    {\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := value\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            let value_1 := calldataload(srcPtr)\n            validator_revert_address(value_1)\n            mstore(pos, and(value_1, sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_array_bytes_calldata_dyn_calldata(value, length, pos) -> end\n    {\n        mstore(pos, length)\n        let _1 := 0x20\n        let updated_pos := add(pos, _1)\n        let pos_1 := updated_pos\n        pos := updated_pos\n        let tail := add(pos_1, shl(5, length))\n        let srcPtr := value\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, sub(tail, pos_1))\n            let elementValue0, elementValue1 := calldata_access_bytes_calldata(value, srcPtr)\n            tail := abi_encode_bytes_calldata(elementValue0, elementValue1, tail)\n            srcPtr := add(srcPtr, _1)\n            pos := add(pos, _1)\n        }\n        end := tail\n    }\n    function abi_encode_tuple_t_struct$_ExecuteArgs_$29365_calldata_ptr_t_address_t_uint256_t_address__to_t_struct$_ExecuteArgs_$29365_memory_ptr_t_address_t_uint256_t_address__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 128)\n        let _1 := 288\n        let rel_offset_of_tail := calldataload(value0)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), value0), not(414)))) { revert(0, 0) }\n        let value := add(rel_offset_of_tail, value0)\n        mstore(add(headStart, 128), 0xa0)\n        abi_encode_uint32(abi_decode_uint32(value), add(headStart, _1))\n        let memberValue0 := abi_decode_uint32(add(value, 0x20))\n        let _2 := 320\n        abi_encode_uint32(memberValue0, add(headStart, _2))\n        let memberValue0_1 := abi_decode_uint32(add(value, 0x40))\n        let _3 := 352\n        abi_encode_uint32(memberValue0_1, add(headStart, _3))\n        let memberValue0_2 := abi_decode_address(add(value, 0x60))\n        let _4 := 384\n        abi_encode_address(memberValue0_2, add(headStart, _4))\n        let memberValue0_3 := abi_decode_address(add(value, 128))\n        let _5 := 0x01a0\n        abi_encode_address(memberValue0_3, add(headStart, _5))\n        let memberValue0_4 := abi_decode_bool(add(value, 0xa0))\n        abi_encode_bool(memberValue0_4, add(headStart, 448))\n        let memberValue0_5, memberValue1 := calldata_access_bytes_calldata(value, add(value, 0xc0))\n        mstore(add(headStart, 480), _5)\n        let tail_1 := abi_encode_bytes_calldata(memberValue0_5, memberValue1, add(headStart, 704))\n        mstore(add(headStart, 512), calldataload(add(value, 0xe0)))\n        let _6 := 0x0100\n        let memberValue0_6 := abi_decode_address(add(value, _6))\n        abi_encode_address(memberValue0_6, add(headStart, 544))\n        mstore(add(headStart, 576), calldataload(add(value, _1)))\n        mstore(add(headStart, 608), calldataload(add(value, _2)))\n        mstore(add(headStart, 640), calldataload(add(value, _3)))\n        mstore(add(headStart, 672), calldataload(add(value, _4)))\n        let memberValue0_7, memberValue1_1 := calldata_access_array_address_dyn_calldata(value0, add(value0, 0x20))\n        let _7 := not(127)\n        mstore(add(headStart, 0xa0), add(sub(tail_1, headStart), _7))\n        let tail_2 := abi_encode_array_address_dyn_calldata(memberValue0_7, memberValue1_1, tail_1)\n        let memberValue0_8, memberValue1_2 := calldata_access_array_address_dyn_calldata(value0, add(value0, 0x40))\n        mstore(add(headStart, 0xc0), add(sub(tail_2, headStart), _7))\n        let tail_3 := abi_encode_array_bytes_calldata_dyn_calldata(memberValue0_8, memberValue1_2, tail_2)\n        let memberValue0_9 := abi_decode_address(add(value0, 0x60))\n        abi_encode_address(memberValue0_9, add(headStart, 0xe0))\n        let memberValue0_10, memberValue1_3 := calldata_access_bytes_calldata(value0, add(value0, 128))\n        mstore(add(headStart, _6), add(sub(tail_3, headStart), _7))\n        tail := abi_encode_bytes_calldata(memberValue0_10, memberValue1_3, tail_3)\n        abi_encode_address(value1, add(headStart, 0x20))\n        mstore(add(headStart, 0x40), value2)\n        abi_encode_address(value3, add(headStart, 0x60))\n    }\n    function abi_encode_tuple_t_uint32_t_address_t_address__to_t_uint32_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffff))\n        let _1 := sub(shl(160, 1), 1)\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_struct_TransferInfo(value, pos) -> end\n    {\n        let _1 := 0x01a0\n        abi_encode_uint32(mload(value), pos)\n        let memberValue0 := mload(add(value, 0x20))\n        abi_encode_uint32(memberValue0, add(pos, 0x20))\n        let memberValue0_1 := mload(add(value, 0x40))\n        abi_encode_uint32(memberValue0_1, add(pos, 0x40))\n        let memberValue0_2 := mload(add(value, 0x60))\n        abi_encode_address(memberValue0_2, add(pos, 0x60))\n        let memberValue0_3 := mload(add(value, 0x80))\n        abi_encode_address(memberValue0_3, add(pos, 0x80))\n        let memberValue0_4 := mload(add(value, 0xa0))\n        abi_encode_bool(memberValue0_4, add(pos, 0xa0))\n        let memberValue0_5 := mload(add(value, 0xc0))\n        mstore(add(pos, 0xc0), _1)\n        let tail := abi_encode_bytes(memberValue0_5, add(pos, _1))\n        mstore(add(pos, 0xe0), mload(add(value, 0xe0)))\n        let _2 := 0x0100\n        let memberValue0_6 := mload(add(value, _2))\n        abi_encode_address(memberValue0_6, add(pos, _2))\n        let _3 := 0x0120\n        mstore(add(pos, _3), mload(add(value, _3)))\n        let _4 := 0x0140\n        mstore(add(pos, _4), mload(add(value, _4)))\n        let _5 := 0x0160\n        mstore(add(pos, _5), mload(add(value, _5)))\n        let _6 := 0x0180\n        mstore(add(pos, _6), mload(add(value, _6)))\n        end := tail\n    }\n    function abi_encode_tuple_t_struct$_TransferInfo_$29351_memory_ptr__to_t_struct$_TransferInfo_$29351_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_struct_TransferInfo(value0, add(headStart, 32))\n    }\n    function access_calldata_tail_t_array$_t_address_$dyn_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), shl(5, length))) { revert(0, 0) }\n    }\n    function abi_encode_tuple_t_bytes32_t_array$_t_address_$dyn_calldata_ptr__to_t_bytes32_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_array_address_dyn_calldata(value1, value2, add(headStart, 64))\n    }\n    function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function abi_encode_tuple_t_bytes32_t_uint256__to_t_bytes32_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function access_calldata_tail_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), shl(5, length))) { revert(0, 0) }\n    }\n    function abi_encode_tuple_t_bytes32_t_uint32__to_t_bytes32_t_uint32__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffff))\n    }\n    function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function mod_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := mod(x, y)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: insufficient balance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    { end := pos }\n    function abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 58)\n        mstore(add(headStart, 64), \"Address: unable to send value, r\")\n        mstore(add(headStart, 96), \"ecipient may have reverted\")\n        tail := add(headStart, 128)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        product := mul(x, y)\n        if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_address_t_uint16__to_t_address_t_uint256_t_address_t_uint16__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), and(value3, 0xffff))\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function abi_encode_tuple_t_bytes32_t_uint256_t_address_t_address_t_uint32_t_bytes_calldata_ptr__to_t_bytes32_t_uint256_t_address_t_address_t_uint32_t_bytes_memory_ptr__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), and(value4, 0xffffffff))\n        mstore(add(headStart, 160), 192)\n        tail := abi_encode_bytes_calldata(value5, value6, add(headStart, 192))\n    }\n    function abi_encode_tuple_t_bool_t_bytes_memory_ptr__to_t_bool_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, iszero(iszero(value0)))\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_bytes(value1, add(headStart, 64))\n    }\n    function checked_sub_t_uint8(x, y) -> diff\n    {\n        diff := sub(and(x, 0xff), and(y, 0xff))\n        if gt(diff, 0xff) { panic_error_0x11() }\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(not(0), base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(not(0), base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint8(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, and(exponent, 0xff))\n    }\n    function abi_encode_tuple_packed_t_uint32_t_bytes32_t_enum$_Types_$28713_t_uint256_t_bytes32__to_t_uint32_t_bytes32_t_uint8_t_uint256_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value4, value3, value2, value1, value0) -> end\n    {\n        mstore(pos, and(shl(224, value0), shl(224, 0xffffffff)))\n        mstore(add(pos, 4), value1)\n        validator_assert_enum_DestinationTransferStatus(value2)\n        mstore(add(pos, 36), shl(248, value2))\n        mstore(add(pos, 37), value3)\n        mstore(add(pos, 69), value4)\n        end := add(pos, 101)\n    }\n    function abi_decode_tuple_t_contract$_IOutbox_$47864_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), 96)\n        tail := abi_encode_bytes(value2, add(headStart, 96))\n    }\n    function abi_decode_tuple_t_bytes32t_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := mload(headStart)\n        let offset := mload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n        let _2 := mload(_1)\n        let array := allocate_memory(array_allocation_size_bytes(_2))\n        mstore(array, _2)\n        if gt(add(add(_1, _2), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory_with_cleanup(add(_1, 32), add(array, 32), _2)\n        value1 := array\n    }\n    function abi_encode_tuple_t_struct$_TransferInfo_$29351_memory_ptr_t_address_t_uint256_t_address_t_bytes_memory_ptr__to_t_struct$_TransferInfo_$29351_memory_ptr_t_address_t_uint256_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 160)\n        let tail_1 := abi_encode_struct_TransferInfo(value0, add(headStart, 160))\n        let _1 := sub(shl(160, 1), 1)\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value4, tail_1)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73_t_bytes32__to_t_string_memory_ptr_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000)\n        mstore(add(pos, 28), value0)\n        end := add(pos, 60)\n    }\n    function abi_encode_tuple_t_uint256_t_address_t_address_t_uint256_t_uint256__to_t_uint256_t_address_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature 's' val\")\n        mstore(add(headStart, 96), \"ue\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 13)\n        mstore(add(headStart, 64), \"disabled pool\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e8a8072019b830892cd4deb2ef47d584565d80622116f9044abf32bb22a18a4f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"more than pool balance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_6e40b987a1bdbab1b9eb0952052a8ed8be99e503ecda84e0b9bc15992dc05932__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"dy < minDy\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint8_t_uint8__to_t_uint256_t_uint256_t_uint128_t_uint128__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), and(value3, 0xff))\n    }\n    function abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"SafeERC20: approve from non-zero\")\n        mstore(add(headStart, 96), \" to non-zero allowance\")\n        tail := add(headStart, 128)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"index out of range\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_d9b2e328f4209b3735eca19488e3afd57ba32c456d5e1a010a233e595f7b0b47__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"mismatch multipliers\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"compare token to itself\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_9696d201946a7b6efbea55f1e57c9bbecf77447f35c86ca3cfdc292daa9e8b3d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"token not found\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 30)\n        mstore(add(headStart, 64), \"Approximation did not converge\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_eb80683d13e69e40aa7f57ce3558136d2c8c4c88f682021213f7030fc3d23afd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"D does not converge\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052600436106100fe5760003560e01c80636989ca7c11610095578063affed0e011610064578063affed0e0146102bd578063b49c53a7146102d2578063bfd79030146102f2578063c2fb26a61461032f578063cb8058ba1461035457600080fd5b80636989ca7c146102575780638a336231146102775780638aac16ba1461029757806391f5de79146102aa57600080fd5b80633339df96116100d15780633339df96146101cb57806341bdc8b5146101e9578063541267111461020957806363e3e7d21461022957600080fd5b8063121cca3114610103578063159e041f146101405780631a8bc0e1146101895780632424401f146101b6575b600080fd5b34801561010f57600080fd5b5061012361011e366004613d89565b610374565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014c57600080fd5b5061017961015b366004613dc6565b6001600160a01b03166000908152601f602052604090205460ff1690565b6040519015158152602001610137565b34801561019557600080fd5b506101a96101a4366004613de3565b610391565b6040516101379190613dfc565b6101c96101c4366004613de3565b6103fd565b005b3480156101d757600080fd5b506020546001600160a01b0316610123565b3480156101f557600080fd5b506101c9610204366004613dc6565b610483565b34801561021557600080fd5b506101c9610224366004613e62565b6105e0565b34801561023557600080fd5b50610249610244366004613ea6565b6106e2565b604051908152602001610137565b34801561026357600080fd5b506101c9610272366004613dc6565b6108a1565b34801561028357600080fd5b506101c9610292366004613dc6565b610999565b6102496102a5366004613ee0565b610ab5565b6102496102b8366004613ee0565b610ba9565b3480156102c957600080fd5b50600354610249565b3480156102de57600080fd5b506101c96102ed366004613faf565b610c8a565b3480156102fe57600080fd5b5061032261030d366004613de3565b60009081526008602052604090205460ff1690565b604051610137919061400f565b34801561033b57600080fd5b5060045460405163ffffffff9091168152602001610137565b34801561036057600080fd5b506101c961036f366004614022565b610da8565b63ffffffff81166000908152600f60205260408120545b92915050565b6000818152600960209081526040918290208054835181840281018401909452808452606093928301828280156103f157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116103d3575b50505050509050919050565b6016546001190161042157604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561045157604051633ee5b89360e01b815260040160405180910390fd5b34600003610472576040516348e7dc3f60e01b815260040160405180910390fd5b61047b81610e75565b506001601655565b3361048c610ee7565b6001600160a01b0316141580156104c7575060033360009081526014602052604090205460ff1660038111156104c4576104c4613fdb565b14155b156104e557604051637b32c26b60e01b815260040160405180910390fd5b600480546040805163234d8e3d60e21b81529051849363ffffffff909316926001600160a01b03851692638d3638f492818301926020928290030181865afa158015610535573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105599190614056565b63ffffffff161461057c57604051621ff66160e61b815260040160405180910390fd5b604080516001600160a01b03841681523360208201527fd6e53d12bb441b2201be4949c7f431b383623888df2abfeef43aaaf272802d50910160405180910390a1602080546001600160a01b0319166001600160a01b039290921691909117905550565b81336105f260a0830160808401613dc6565b6001600160a01b0316146106195760405163e3613aff60e01b815260040160405180910390fd5b61271082111561063c57604051633345cd4360e11b815260040160405180910390fd5b60045463ffffffff166106556040850160208601613d89565b63ffffffff161461067957604051632a8e462760e01b815260040160405180910390fd5b600061068c61068785614178565b610f15565b6000818152600d6020526040908190208590555190915081907fb243c3cea6cd1bbfd64d5d0765f13734ca7b87fdf14e017391fe12a8891434ca906106d49086815260200190565b60405180910390a250505050565b6016546000906001190161070957604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561073957604051633ee5b89360e01b815260040160405180910390fd5b60008061074584610f45565b90925090506000600182600381111561076057610760613fdb565b1461076c57600261076f565b60035b60008481526008602052604090208054919250829160ff1916600183600381111561079c5761079c613fdb565b0217905550600080806107f7866107db6107b68b8061426d565b61018001356107c58c8061426d565b6107d6906060810190604001613d89565b611306565b60038760038111156107ef576107ef613fdb565b14158b611348565b9194509250905060006108218985858a60038a600381111561081b5761081b613fdb565b146118d5565b90506001600160a01b0383166108378a8061426d565b610848906080810190606001613dc6565b6001600160a01b0316887f0b07a8b0b083f8976b3c832b720632f49cb8ba1e7a99e1b145f51a47d3391cb78c86863360405161088794939291906143ea565b60405180910390a450506001601655509295945050505050565b336108aa610ee7565b6001600160a01b0316141580156108e5575060033360009081526014602052604090205460ff1660038111156108e2576108e2613fdb565b14155b1561090357604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0381166000908152601f602052604090205460ff1661093c57604051637840a40d60e01b815260040160405180910390fd5b6001600160a01b0381166000818152601f6020908152604091829020805460ff19169055815192835233908301527f4860b0a180d4b5969c2757493a999f05d0b22318320f154a02170aa239e24b1391015b60405180910390a150565b336109a2610ee7565b6001600160a01b0316141580156109dd575060033360009081526014602052604090205460ff1660038111156109da576109da613fdb565b14155b156109fb57604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b038116610a22576040516332f9c08d60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601f602052604090205460ff1615610a5c5760405163e2a4506360e01b815260040160405180910390fd5b6001600160a01b0381166000818152601f6020908152604091829020805460ff19166001179055815192835233908301527f3860a100215fe93b6b95ed1ae0870e538f85a73b30d073f63fefc60e08b0c124910161098e565b60175460009060011901610adc576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528b1660208083019190915260008284018190526001600160a01b03808d1660608501528a16608084015260a083018190528351601f87018390048302810183019094528584529260c08301918790879081908401838280828437600092018290525093855250505060208201889052336040830152606082018190526080820181905260a0820181905260c0909101529050610b9681898861191e565b60016017559a9950505050505050505050565b60175460009060011901610bd0576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528b1660208083019190915260008284018190526001600160a01b03808d1660608501528a166080840152600160a08401528351601f87018390048302810183019094528584529260c08301918790879081908401838280828437600092018290525093855250505060208201889052336040830152606082018190526080820181905260a0820181905260c0909101529050610b9681898861191e565b33610c93610ee7565b6001600160a01b031614158015610cce575060033360009081526014602052604090205460ff166003811115610ccb57610ccb613fdb565b14155b15610cec57604051637b32c26b60e01b815260040160405180910390fd5b80610d0a57604051633bca644d60e11b815260040160405180910390fd5b63ffffffff82161580610d27575060045463ffffffff8381169116145b15610d4557604051632892757b60e21b815260040160405180910390fd5b63ffffffff82166000818152600f602090815260409182902084905581519283526001600160a01b038416908301523382820152517fb07f562723347d6ea7f9f37b3b31f96b65104c3339d1c89e1b6fa88e2410b85c9181900360600190a15050565b8033610dba60a0830160808401613dc6565b6001600160a01b031614610de15760405163e3613aff60e01b815260040160405180910390fd5b60045463ffffffff16610dfa6040840160208501613d89565b63ffffffff1614610e1e57604051630ada556f60e31b815260040160405180910390fd5b6000610e2c61068784614178565b6000818152600e6020526040808220805460ff191660011790555191925082917f2510041334ede909998b9aefcca4300fc36c670dd00e1f7f0afffaca56adcb399190a2505050565b6002546001600160a01b031680610e9f57604051630bd7619560e41b815260040160405180910390fd5b610ea98134611bba565b6040805134815233602082015283917ffd832caf789e0dadd0e7ed643b3ea6051fa26c48516e242ca4cb3db9eda6c8ec910160405180910390a25050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b600081604051602001610f289190614764565b604051602081830303815290604052805190602001209050919050565b336000908152600b6020526040812054819060ff16158015610f935750610f6c838061426d565b610f7d9060a0810190608001613dc6565b6001600160a01b0316336001600160a01b031614155b15610fb157604051637c32a2b360e01b815260040160405180910390fd5b60045463ffffffff16610fc4848061426d565b610fd5906040810190602001613d89565b63ffffffff1614610ff95760405163b6bb322560e01b815260040160405180910390fd5b60006110086020850185614777565b91506000905061102461101b868061426d565b61068790614178565b60008181526008602052604090205490915060ff1682156112c957600c54831115611062576040516313c06ef360e01b815260040160405180910390fd5b600081600381111561107657611076613fdb565b1461109457604051630caaeb0b60e11b815260040160405180910390fd5b601f60006110a86080890160608a01613dc6565b6001600160a01b0316815260208101919091526040016000205460ff166110e257604051631fa09b5360e31b815260040160405180910390fd5b61112f826110f36020890189614777565b604051602001611105939291906147c0565b60408051601f19818403018152919052805160209091012061112a60808901896147da565b611cdd565b6001600160a01b03166111486080880160608901613dc6565b6001600160a01b03161461116f57604051638579eca560e01b815260040160405180910390fd5b6040805160208082018590528183018690528251808303840181526060909201909252805191012060005b848110156112c2576111aa611d2f565b1580156112075750601560006111c360208b018b614777565b848181106111d3576111d3614820565b90506020020160208101906111e89190613dc6565b6001600160a01b0316815260208101919091526040016000205460ff16155b1561122557604051630e1eb7f760e31b815260040160405180910390fd5b6112588261123660408b018b614777565b8481811061124657611246614820565b905060200281019061112a91906147da565b6001600160a01b031661126e60208a018a614777565b8381811061127e5761127e614820565b90506020020160208101906112939190613dc6565b6001600160a01b0316146112ba57604051633a1dd23360e21b815260040160405180910390fd5b60010161119a565b50506112fb565b60018160038111156112dd576112dd613fdb565b146112fb57604051636320d2cf60e11b815260040160405180910390fd5b909590945092505050565b6000828260405160200161132a92919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b600080806113596020850185614777565b6000898152600960205260409020611372929091613cf4565b50600061137f858061426d565b611390906060810190604001613d89565b63ffffffff16156113d1576113ce876113a9878061426d565b61018001356113b8888061426d565b6113c9906060810190604001613d89565b611d56565b90505b6113db858061426d565b61012001356000036113f5576000935091508190506118cb565b6000611401868061426d565b6114129060c081019060a001614836565b8061142b57506000898152600e602052604090205460ff165b90506000611439878061426d565b6101200135905087156117d95760006114556020890189614777565b91506114799050611466898061426d565b6101200135600060010154612710611d65565b91508060010361166a57821580156114f0575081600a600061149e60208c018c614777565b60008181106114af576114af614820565b90506020020160208101906114c49190613dc6565b6001600160a01b0390811682526020808301939093526040918201600090812091891681529252902054105b80156115065750601b546001600160a01b031615155b156115d5576015600061151c60208b018b614777565b600081811061152d5761152d614820565b90506020020160208101906115429190613dc6565b6001600160a01b03168152602081019190915260400160002054610100900460ff16611581576040516310c4e50960e01b815260040160405180910390fd5b6000806115c28d8d8661159760208f018f614777565b60008181106115a8576115a8614820565b90506020020160208101906115bd9190613dc6565b611d7c565b90995097509495506118cb945050505050565b81600a60006115e760208c018c614777565b60008181106115f8576115f8614820565b905060200201602081019061160d9190613dc6565b6001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b03168152602001908152602001600020600082825461165f9190614869565b909155506117d79050565b60006116768284614892565b905060005b611686600184614869565b8110156117235781600a600061169f60208e018e614777565b858181106116af576116af614820565b90506020020160208101906116c49190613dc6565b6001600160a01b03166001600160a01b031681526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546117169190614869565b909155505060010161167b565b50600061173083856148a6565b61173a90836148ba565b905080600a600061174e60208e018e614777565b611759600189614869565b81811061176857611768614820565b905060200201602081019061177d9190613dc6565b6001600160a01b03166001600160a01b031681526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546117cf9190614869565b909155505050505b505b6117e3878061426d565b6117f4906060810190604001613d89565b60045463ffffffff908116911614801561181a575060006118148a611f3b565b60030154115b156118465760008981526007602052604081206004018054839290611840908490614869565b90915550505b81156118715760008a8152600e60205260409020805460ff1916905594509092508291506118cb9050565b60008a8152600d6020526040812080549082905590806118bd8c87868685036118a75761189e8e8061426d565b60e001356118a9565b865b6118b38f8061426d565b6101400135611f7c565b909950975094955050505050505b9450945094915050565b60006118fc846118e5888061426d565b6118f6906080810190606001613dc6565b87612001565b6119128386868561190d8b8061426d565b612040565b50835b95945050505050565b601a54600090600160a01b900460ff161561194c57604051633ee5b89360e01b815260040160405180910390fd5b60006001600160a01b03841615801561196457508215155b156119825760405163ae715ad360e01b815260040160405180910390fd5b61198f85602001516121b4565b60608601519091506001600160a01b03166119bc5760405162845fdd60e41b815260040160405180910390fd5b6127108560e0015111156119e35760405163388d723160e11b815260040160405180910390fd5b6040805180820190915260008082526020820181905290819060006001600160a01b03881615611b67576000611a18896121ed565b90935090506000611a2882611f3b565b84518c5163ffffffff9081169116149350905082611a505780546001600160a01b0316611a56565b60208401515b95506001600160a01b038616611a7f5760405163965a46c160e01b815260040160405180910390fd5b6003810154838015611a915750600081115b15611ade5760008a8360040154611aa891906148ba565b905081811115611acb576040516348ba8bf160e01b815260040160405180910390fd5b6000848152600760205260409020600401555b50835163ffffffff1660408c015260208401516101808c01528815611b6457611b078a8a612263565b611b18828b888c8f60e001516123b4565b6101208c0152611b5d6001600160a01b038b811690881614611b48576001820154600160a01b900460ff16611b55565b8154600160a01b900460ff165b60128b612437565b6101408c01525b50505b60038054906000611b77836148cd565b909155506101608a0152611b8a89610f15565b92503415611b9b57611b9b83610e75565b611bab838a8a8a89878a886124a2565b509093505050505b9392505050565b80471015611c0f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611c5c576040519150601f19603f3d011682016040523d82523d6000602084013e611c61565b606091505b5050905080611cd85760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611c06565b505050565b6000611d27611ceb85612689565b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506126c492505050565b949350505050565b600080611d3a610ee7565b6001600160a01b03161480611d51575060125460ff165b905090565b6000611d2784848460006126e8565b600081611d7284866148e6565b611d279190614892565b6000806000611d8a86612723565b601b546040516369a933a560e01b81526001600160a01b03808416600483015260248201899052306044830152600060648301529293509116906369a933a590608401600060405180830381600087803b158015611de757600080fd5b505af1158015611dfb573d6000803e3d6000fd5b5050601b54604051631a4ca37b60e21b81526001600160a01b038581166004830152602482018a90523060448301526000945090911691506369328dec906064016020604051808303816000875af1158015611e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7f91906148fd565b905085811015611ea25760405163407559a360e11b815260040160405180910390fd5b6000888152601d60205260409020869055601c5461271090611ec59088906148e6565b611ecf9190614892565b6000898152601e60209081526040918290209290925580516001600160a01b038581168252928101899052918716918a917f2d3ba0fa5be2ef8cb1ec8920a07a6cbccc2397b18ca3e70f48ea695500b8f218910160405180910390a35084925090505b94509492505050565b6000818152600760205260408120600180820154839291600160a01b90910460ff161015611bb35760405163618cca3f60e11b815260040160405180910390fd5b6000806000611f8a88611f3b565b60018101549091506001600160a01b039081169088168103611fb2578693509150611ff79050565b86600003611fc6578693509150611ff79050565b611ff08989838a611feb60128860010160149054906101000a900460ff168c8e61275c565b6127a8565b9350935050505b9550959350505050565b8060000361200e57505050565b6001600160a01b03831661203557604051633a48ca7b60e11b815260040160405180910390fd5b611cd88383836128e7565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47061206e60c08301836147da565b60405161207c929190614916565b604051809103902003156121ad576000806121436120a06080850160608601613dc6565b6127105a6120ae9190614869565b600061010063fd614f4160e01b8c8c8c8c6120ca5760006120dc565b6120dc6101208d016101008e01613dc6565b6120e960208e018e613d89565b6120f660c08f018f6147da565b60405160240161210c9796959493929190614926565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261294a565b9150915083158015612153575081155b15612170576040516264cdd360e41b815260040160405180910390fd5b867fb1a4ab59facaedd6d3a71da3902e0a1fa5b99750c0e20cd878334378a41cb33583836040516121a2929190614979565b60405180910390a250505b5050505050565b63ffffffff81166000908152600f6020526040902054806121e857604051630c3bcd4960e41b815260040160405180910390fd5b919050565b604080518082019091526000808252602082015260008061220d846129d4565b9050600061222382602001518360000151611306565b905061222e81611f3b565b60020154600160a01b900460ff166122595760405163a13f958f60e01b815260040160405180910390fd5b9094909350915050565b8060000361226f575050565b6001600160a01b03821661229657604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156122df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230391906148fd565b905061231a6001600160a01b0383163330866129f3565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa158015612362573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238691906148fd565b6123909190614869565b146123ae57604051630e40773560e21b815260040160405180910390fd5b50505050565b6000826000036123c657506000611915565b846001600160a01b0316846001600160a01b0316036123e6575081611915565b60006123f187611f3b565b9050600061242a88888888611feb8760010160149054906101000a900460ff168860000160149054906101000a900460ff168c8c61275c565b5098975050505050505050565b60008260ff168460ff160361244d575080611bb3565b60008360ff168560ff161015612483576124678585614994565b61247290600a614a91565b61247c90846148e6565b9050611d27565b61248d8486614994565b61249890600a614a91565b6119159084614892565b6101208701518015612514578161251457604051632770a7eb60e21b8152306004820152602481018290526001600160a01b03841690639dc29fac90604401600060405180830381600087803b1580156124fb57600080fd5b505af115801561250f573d6000803e3d6000fd5b505050505b6000846000015185602001516003848d604051602001612538959493929190614aa0565b60408051601f1981840301815282825260208054639fa92f9d60e01b8552925191945060009384936001600160a01b031692639fa92f9d926004808401939192918290030181865afa158015612592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b69190614adf565b6001600160a01b031663fa31de018c602001518a866040518463ffffffff1660e01b81526004016125e993929190614afc565b6000604051808303816000875af1158015612608573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126309190810190614b21565b91509150818b61016001518d7fed8e6ba697dd65259e5ce532ac08ff06d1a3607bcec58f8f0937fe36a5666c548e8e8e8c88604051612673959493929190614ba3565b60405180910390a4505050505050505050505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01610f28565b60008060006126d38585612a2b565b915091506126e081612a70565b509392505050565b600481015460009063ffffffff90811690841603612707575082611d27565b61271085611f3b565b546001600160a01b031695945050505050565b60008061272f83611f3b565b600101546001600160a01b031690508061038b57604051630558a50760e31b815260040160405180910390fd5b60008260000361276e57506000611d27565b600061271061277d8482614869565b61278790866148e6565b6127919190614892565b905061279e868683612437565b9695505050505050565b6000858152601860205260408120819081906127c381612bbd565b156127f5576127e96127d58a8a612bda565b6127df8b8a612bda565b8391908989612c5a565b87935093505050611ff7565b60006128008a611f3b565b600201546001600160a01b0390811691508990612821908216836000612f63565b6128356001600160a01b038216838a613078565b6001600160a01b03821663d460f0a2898c8c8b612854610e10426148ba565b6040516001600160e01b031960e088901b16815260048101959095526001600160a01b0393841660248601529290911660448401526064830152608482015260a4016020604051808303816000875af11580156128b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d991906148fd565b899550955050505050611ff7565b6040516001600160a01b038316602482015260448101829052611cd890849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261312a565b6000606060008060008661ffff166001600160401b0381111561296f5761296f614073565b6040519080825280601f01601f191660200182016040528015612999576020820181803683370190505b5090506000808751602089018b8e8ef191503d9250868311156129ba578692505b828152826000602083013e90999098509650505050505050565b604080518082019091526000808252602082015261038b8260006131fc565b6040516001600160a01b03808516602483015283166044820152606481018290526123ae9085906323b872dd60e01b90608401612913565b6000808251604103612a615760208301516040840151606085015160001a612a55878285856132f4565b94509450505050612a69565b506000905060025b9250929050565b6000816004811115612a8457612a84613fdb565b03612a8c5750565b6001816004811115612aa057612aa0613fdb565b03612aed5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611c06565b6002816004811115612b0157612b01613fdb565b03612b4e5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611c06565b6003816004811115612b6257612b62613fdb565b03612bba5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611c06565b50565b600c81015460009060ff1615801561038b57505060080154151590565b60008281526019602090815260408083206001600160a01b0385168085529083528184205486855260189093529083206008018054849360ff1692919083908110612c2757612c27614820565b6000918252602090912001546001600160a01b031614611d275760405163054e442960e41b815260040160405180910390fd5b600c85015460009060ff1615612ca25760405162461bcd60e51b815260206004820152600d60248201526c191a5cd8589b1959081c1bdbdb609a1b6044820152606401611c06565b85600a018560ff1681548110612cba57612cba614820565b9060005260206000200154831115612d0d5760405162461bcd60e51b81526020600482015260166024820152756d6f7265207468616e20706f6f6c2062616c616e636560501b6044820152606401611c06565b600080600088600a01805480602002602001604051908101604052809291908181526020018280548015612d6057602002820191906000526020600020905b815481526020019060010190808311612d4c575b50505050509050612d7489898989856133b5565b909350915084831015612db65760405162461bcd60e51b815260206004820152600a6024820152696479203c206d696e447960b01b6044820152606401611c06565b6000896009018860ff1681548110612dd057612dd0614820565b90600052602060002001546402540be4008b6006015485612df191906148e6565b612dfb9190614892565b612e059190614892565b905086828a60ff1681518110612e1d57612e1d614820565b6020026020010151612e2f91906148ba565b8a600a018a60ff1681548110612e4757612e47614820565b90600052602060002001819055508084838a60ff1681518110612e6c57612e6c614820565b6020026020010151612e7e9190614869565b612e889190614869565b8a600a018960ff1681548110612ea057612ea0614820565b6000918252602090912001558015612f0557808a600b018960ff1681548110612ecb57612ecb614820565b9060005260206000200154612ee091906148ba565b8a600b018960ff1681548110612ef857612ef8614820565b6000918252602090912001555b8954604080518981526020810187905260ff8c8116828401528b16606082015290513392917f28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df320919081900360800190a3509198975050505050505050565b801580612fdd5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fdb91906148fd565b155b6130485760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401611c06565b6040516001600160a01b038316602482015260448101829052611cd890849063095ea7b360e01b90606401612913565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156130c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ed91906148fd565b6130f791906148ba565b6040516001600160a01b0385166024820152604481018290529091506123ae90859063095ea7b360e01b90606401612913565b600061317f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661357b9092919063ffffffff16565b805190915015611cd8578080602001905181019061319d9190614bf2565b611cd85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611c06565b604080518082019091526000808252602082015260408051808201909152600080825260208201526001600160a01b03841661323957905061038b565b506001600160a01b03831660009081526005830160209081526040918290208251808401909352805463ffffffff16808452600190910154918301919091521561328457905061038b565b61328e848461358a565b156132b457600483015463ffffffff1681526001600160a01b0384166020820152611bb3565b506001600160a01b03831660009081526006830160209081526040918290208251808401909352805463ffffffff16835260010154908201529392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561332b5750600090506003611f32565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561337f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166133a857600060019250925050611f32565b9660009650945050505050565b60008060008760090180548060200260200160405190810160405280929190818152602001828054801561340857602002820191906000526020600020905b8154815260200190600101908083116133f4575b50505050509050600061341b85836135c9565b905080518860ff16108015613433575080518760ff16105b6134745760405162461bcd60e51b8152602060048201526012602482015271696e646578206f7574206f662072616e676560701b6044820152606401611c06565b6000818960ff168151811061348b5761348b614820565b6020026020010151838a60ff16815181106134a8576134a8614820565b6020026020010151886134bb91906148e6565b6134c591906148ba565b905060006134de6134d58c6136d3565b8b8b85876136de565b9050600181848b60ff16815181106134f8576134f8614820565b602002602001015161350a9190614869565b6135149190614869565b95506402540be4008b600501548761352c91906148e6565b6135369190614892565b9450838960ff168151811061354d5761354d614820565b602002602001015185876135619190614869565b61356b9190614892565b9550505050509550959350505050565b6060611d278484600085613945565b6001600160a01b038216600090815260068201602052604081205463ffffffff16156135b85750600061038b565b50506001600160a01b03163b151590565b815181516060919081146136165760405162461bcd60e51b81526020600482015260146024820152736d69736d61746368206d756c7469706c6965727360601b6044820152606401611c06565b6000816001600160401b0381111561363057613630614073565b604051908082528060200260200182016040528015613659578160200160208202803683370190505b50905060005b828110156136ca5784818151811061367957613679614820565b602002602001015186828151811061369357613693614820565b60200260200101516136a591906148e6565b8282815181106136b7576136b7614820565b602090810291909101015260010161365f565b50949350505050565b600061038b82613a20565b805160009060ff808616908716036137385760405162461bcd60e51b815260206004820152601760248201527f636f6d7061726520746f6b656e20746f20697473656c660000000000000000006044820152606401611c06565b808660ff1610801561374c5750808560ff16105b61378a5760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881b9bdd08199bdd5b99608a1b6044820152606401611c06565b60006137968489613a69565b9050806000806137a68b866148e6565b90506000805b8681101561382d578b60ff1681036137c6578991506137f9565b8a60ff1681146137f1578881815181106137e2576137e2614820565b602002602001015191506137f9565b6001016137ac565b61380382856148ba565b935061380f87836148e6565b61381987876148e6565b6138239190614892565b94506001016137ac565b5061383886836148e6565b606461384487876148e6565b61384e91906148e6565b6138589190614892565b93506000826138686064886148e6565b6138729190614892565b61387c90856148ba565b9050600086815b6101008110156138fc57819250888483600261389f91906148e6565b6138a991906148ba565b6138b39190614869565b886138be84806148e6565b6138c891906148ba565b6138d29190614892565b91506138de8284613c16565b156138f457509850611915975050505050505050565b600101613883565b5060405162461bcd60e51b815260206004820152601e60248201527f417070726f78696d6174696f6e20646964206e6f7420636f6e766572676500006044820152606401611c06565b6060824710156139a65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611c06565b600080866001600160a01b031685876040516139c29190614c0f565b60006040518083038185875af1925050503d80600081146139ff576040519150601f19603f3d011682016040523d82523d6000602084013e613a04565b606091505b5091509150613a1587838387613c2c565b979650505050505050565b600481015460028201546001830154909190808314801590613a4157508142105b15613a62576000846003015490508083038142038502428503840201049350505b5050919050565b815160009081805b82811015613aa857858181518110613a8b57613a8b614820565b602002602001015182613a9e91906148ba565b9150600101613a71565b5080600003613abc5760009250505061038b565b60008181613aca85886148e6565b905060005b610100811015613bd7578260005b87811015613b2857878b8281518110613af857613af8614820565b6020026020010151613b0a91906148e6565b613b1486846148e6565b613b1e9190614892565b9150600101613add565b5083945080876001613b3a91906148ba565b613b4491906148e6565b606485613b518287614869565b613b5b91906148e6565b613b659190614892565b613b6f91906148ba565b84613b7a89846148e6565b6064613b868a886148e6565b613b909190614892565b613b9a91906148ba565b613ba491906148e6565b613bae9190614892565b9350613bba8486613c16565b15613bce578397505050505050505061038b565b50600101613acf565b5060405162461bcd60e51b81526020600482015260136024820152724420646f6573206e6f7420636f6e766572676560681b6044820152606401611c06565b60006002613c248484613ca5565b109392505050565b60608315613c9b578251600003613c94576001600160a01b0385163b613c945760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611c06565b5081611d27565b611d278383613cca565b600081831115613cc057613cb98284614869565b905061038b565b611bb38383614869565b815115613cda5781518083602001fd5b8060405162461bcd60e51b8152600401611c069190614c21565b828054828255906000526020600020908101928215613d47579160200282015b82811115613d475781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190613d14565b50613d53929150613d57565b5090565b5b80821115613d535760008155600101613d58565b63ffffffff81168114612bba57600080fd5b80356121e881613d6c565b600060208284031215613d9b57600080fd5b8135611bb381613d6c565b6001600160a01b0381168114612bba57600080fd5b80356121e881613da6565b600060208284031215613dd857600080fd5b8135611bb381613da6565b600060208284031215613df557600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b81811015613e3d5783516001600160a01b031683529284019291840191600101613e18565b50909695505050505050565b60006101a08284031215613e5c57600080fd5b50919050565b60008060408385031215613e7557600080fd5b82356001600160401b03811115613e8b57600080fd5b613e9785828601613e49565b95602094909401359450505050565b600060208284031215613eb857600080fd5b81356001600160401b03811115613ece57600080fd5b820160a08185031215611bb357600080fd5b60008060008060008060008060e0898b031215613efc57600080fd5b8835613f0781613d6c565b97506020890135613f1781613da6565b96506040890135613f2781613da6565b95506060890135613f3781613da6565b94506080890135935060a0890135925060c08901356001600160401b0380821115613f6157600080fd5b818b0191508b601f830112613f7557600080fd5b813581811115613f8457600080fd5b8c6020828501011115613f9657600080fd5b6020830194508093505050509295985092959890939650565b60008060408385031215613fc257600080fd5b8235613fcd81613d6c565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b60048110612bba57634e487b7160e01b600052602160045260246000fd5b6020810161401c83613ff1565b91905290565b60006020828403121561403457600080fd5b81356001600160401b0381111561404a57600080fd5b611d2784828501613e49565b60006020828403121561406857600080fd5b8151611bb381613d6c565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b03811182821017156140ac576140ac614073565b60405290565b604051601f8201601f191681016001600160401b03811182821017156140da576140da614073565b604052919050565b8015158114612bba57600080fd5b80356121e8816140e2565b60006001600160401b0382111561411457614114614073565b50601f01601f191660200190565b600082601f83011261413357600080fd5b8135614146614141826140fb565b6140b2565b81815284602083860101111561415b57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a0823603121561418b57600080fd5b614193614089565b61419c83613d7e565b81526141aa60208401613d7e565b60208201526141bb60408401613d7e565b60408201526141cc60608401613dbb565b60608201526141dd60808401613dbb565b60808201526141ee60a084016140f0565b60a082015260c08301356001600160401b0381111561420c57600080fd5b61421836828601614122565b60c08301525060e083013560e0820152610100614236818501613dbb565b9082015261012083810135908201526101408084013590820152610160808401359082015261018092830135928101929092525090565b6000823561019e1983360301811261428457600080fd5b9190910192915050565b6000808335601e198436030181126142a557600080fd5b83016020810192503590506001600160401b038111156142c457600080fd5b803603821315612a6957600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e1984360301811261431357600080fd5b83016020810192503590506001600160401b0381111561433257600080fd5b8060051b3603821315612a6957600080fd5b8183526000602080850194508260005b8581101561438257813561436781613da6565b6001600160a01b031687529582019590820190600101614354565b509495945050505050565b81835260006020808501808196508560051b810191508460005b878110156143dd5782840389526143be828861428e565b6143c98682846142d3565b9a87019a95505050908401906001016143a7565b5091979650505050505050565b608081526000610120863561019e1988360301811261440857600080fd5b60a06080850152870161442a82850161442083613d7e565b63ffffffff169052565b61443660208201613d7e565b61014061444a8187018363ffffffff169052565b61445660408401613d7e565b915061016061446c8188018463ffffffff169052565b61447860608501613dbb565b9250610180614491818901856001600160a01b03169052565b61449d60808601613dbb565b93506101a06144b6818a01866001600160a01b03169052565b6144c260a087016140f0565b8015156101c08b015294506144da60c087018761428e565b9550816101e08b01526144f26102c08b0187836142d3565b9550505060e085013561020089015261010061450f818701613dbb565b6001600160a01b03166102208a0152858701356102408a0152838601356102608a0152828601356102808a0152818601356102a08a015261455360208e018e6142fc565b97509550607f199350838986030160a08a0152614571858888614344565b965061458060408e018e6142fc565b96509450838988030160c08a015261459987878761438d565b96506145a760608e01613dbb565b6001600160a01b03811660e08b015295506145c560808e018e61428e565b965094508389880301818a0152505050506145e18383836142d3565b93505050506145fb60208301866001600160a01b03169052565b83604083015261191560608301846001600160a01b03169052565b60005b83811015614631578181015183820152602001614619565b50506000910152565b60008151808452614652816020860160208601614616565b601f01601f19169290920160200192915050565b805163ffffffff16825260006101a0602083015161468c602086018263ffffffff169052565b5060408301516146a4604086018263ffffffff169052565b5060608301516146bf60608601826001600160a01b03169052565b5060808301516146da60808601826001600160a01b03169052565b5060a08301516146ee60a086018215159052565b5060c08301518160c08601526147068286018261463a565b91505060e083015160e08501526101008084015161472e828701826001600160a01b03169052565b50506101208381015190850152610140808401519085015261016080840151908501526101809283015192909301919091525090565b602081526000611bb36020830184614666565b6000808335601e1984360301811261478e57600080fd5b8301803591506001600160401b038211156147a857600080fd5b6020019150600581901b3603821315612a6957600080fd5b838152604060208201526000611915604083018486614344565b6000808335601e198436030181126147f157600080fd5b8301803591506001600160401b0382111561480b57600080fd5b602001915036819003821315612a6957600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561484857600080fd5b8135611bb3816140e2565b634e487b7160e01b600052601160045260246000fd5b8181038181111561038b5761038b614853565b634e487b7160e01b600052601260045260246000fd5b6000826148a1576148a161487c565b500490565b6000826148b5576148b561487c565b500690565b8082018082111561038b5761038b614853565b6000600182016148df576148df614853565b5060010190565b808202811582820484141761038b5761038b614853565b60006020828403121561490f57600080fd5b5051919050565b8183823760009101908152919050565b878152602081018790526001600160a01b0386811660408301528516606082015263ffffffff8416608082015260c060a0820181905260009061496c90830184866142d3565b9998505050505050505050565b8215158152604060208201526000611d27604083018461463a565b60ff828116828216039081111561038b5761038b614853565b600181815b808511156149e85781600019048211156149ce576149ce614853565b808516156149db57918102915b93841c93908002906149b2565b509250929050565b6000826149ff5750600161038b565b81614a0c5750600061038b565b8160018114614a225760028114614a2c57614a48565b600191505061038b565b60ff841115614a3d57614a3d614853565b50506001821b61038b565b5060208310610133831016604e8410600b8410161715614a6b575081810a61038b565b614a7583836149ad565b8060001904821115614a8957614a89614853565b029392505050565b6000611bb360ff8416836149f0565b63ffffffff60e01b8660e01b168152846004820152614abe84613ff1565b60f89390931b60248401526025830191909152604582015260650192915050565b600060208284031215614af157600080fd5b8151611bb381613da6565b63ffffffff84168152826020820152606060408201526000611915606083018461463a565b60008060408385031215614b3457600080fd5b8251915060208301516001600160401b03811115614b5157600080fd5b8301601f81018513614b6257600080fd5b8051614b70614141826140fb565b818152866020838501011115614b8557600080fd5b614b96826020830160208601614616565b8093505050509250929050565b60a081526000614bb660a0830188614666565b6001600160a01b03878116602085015260408401879052851660608401528281036080840152614be6818561463a565b98975050505050505050565b600060208284031215614c0457600080fd5b8151611bb3816140e2565b60008251614284818460208701614616565b602081526000611bb3602083018461463a56fea2646970667358221220e42637b26ba9d67de61a02bdc6d0e8d841fcb6a6c6929ba1c112d28f05bae8fd64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xFE JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6989CA7C GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xAFFED0E0 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xAFFED0E0 EQ PUSH2 0x2BD JUMPI DUP1 PUSH4 0xB49C53A7 EQ PUSH2 0x2D2 JUMPI DUP1 PUSH4 0xBFD79030 EQ PUSH2 0x2F2 JUMPI DUP1 PUSH4 0xC2FB26A6 EQ PUSH2 0x32F JUMPI DUP1 PUSH4 0xCB8058BA EQ PUSH2 0x354 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6989CA7C EQ PUSH2 0x257 JUMPI DUP1 PUSH4 0x8A336231 EQ PUSH2 0x277 JUMPI DUP1 PUSH4 0x8AAC16BA EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0x91F5DE79 EQ PUSH2 0x2AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3339DF96 GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0x3339DF96 EQ PUSH2 0x1CB JUMPI DUP1 PUSH4 0x41BDC8B5 EQ PUSH2 0x1E9 JUMPI DUP1 PUSH4 0x54126711 EQ PUSH2 0x209 JUMPI DUP1 PUSH4 0x63E3E7D2 EQ PUSH2 0x229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x121CCA31 EQ PUSH2 0x103 JUMPI DUP1 PUSH4 0x159E041F EQ PUSH2 0x140 JUMPI DUP1 PUSH4 0x1A8BC0E1 EQ PUSH2 0x189 JUMPI DUP1 PUSH4 0x2424401F EQ PUSH2 0x1B6 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x123 PUSH2 0x11E CALLDATASIZE PUSH1 0x4 PUSH2 0x3D89 JUMP JUMPDEST PUSH2 0x374 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x179 PUSH2 0x15B CALLDATASIZE PUSH1 0x4 PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1F PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x137 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A9 PUSH2 0x1A4 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DE3 JUMP JUMPDEST PUSH2 0x391 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x137 SWAP2 SWAP1 PUSH2 0x3DFC JUMP JUMPDEST PUSH2 0x1C9 PUSH2 0x1C4 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DE3 JUMP JUMPDEST PUSH2 0x3FD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x123 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C9 PUSH2 0x204 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DC6 JUMP JUMPDEST PUSH2 0x483 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C9 PUSH2 0x224 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E62 JUMP JUMPDEST PUSH2 0x5E0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x235 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH2 0x244 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EA6 JUMP JUMPDEST PUSH2 0x6E2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x137 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x263 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C9 PUSH2 0x272 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DC6 JUMP JUMPDEST PUSH2 0x8A1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x283 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C9 PUSH2 0x292 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DC6 JUMP JUMPDEST PUSH2 0x999 JUMP JUMPDEST PUSH2 0x249 PUSH2 0x2A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EE0 JUMP JUMPDEST PUSH2 0xAB5 JUMP JUMPDEST PUSH2 0x249 PUSH2 0x2B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EE0 JUMP JUMPDEST PUSH2 0xBA9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x249 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C9 PUSH2 0x2ED CALLDATASIZE PUSH1 0x4 PUSH2 0x3FAF JUMP JUMPDEST PUSH2 0xC8A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x322 PUSH2 0x30D CALLDATASIZE PUSH1 0x4 PUSH2 0x3DE3 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x137 SWAP2 SWAP1 PUSH2 0x400F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x137 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C9 PUSH2 0x36F CALLDATASIZE PUSH1 0x4 PUSH2 0x4022 JUMP JUMPDEST PUSH2 0xDA8 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3F1 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3D3 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 NOT ADD PUSH2 0x421 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x451 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLVALUE PUSH1 0x0 SUB PUSH2 0x472 JUMPI PUSH1 0x40 MLOAD PUSH4 0x48E7DC3F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x47B DUP2 PUSH2 0xE75 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x16 SSTORE JUMP JUMPDEST CALLER PUSH2 0x48C PUSH2 0xEE7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x4C7 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4C4 JUMPI PUSH2 0x4C4 PUSH2 0x3FDB JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x234D8E3D PUSH1 0xE2 SHL DUP2 MSTORE SWAP1 MLOAD DUP5 SWAP4 PUSH4 0xFFFFFFFF SWAP1 SWAP4 AND SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP3 PUSH4 0x8D3638F4 SWAP3 DUP2 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x535 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x559 SWAP2 SWAP1 PUSH2 0x4056 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x57C JUMPI PUSH1 0x40 MLOAD PUSH3 0x1FF661 PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xD6E53D12BB441B2201BE4949C7F431B383623888DF2ABFEEF43AAAF272802D50 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x20 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST DUP2 CALLER PUSH2 0x5F2 PUSH1 0xA0 DUP4 ADD PUSH1 0x80 DUP5 ADD PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x619 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE3613AFF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2710 DUP3 GT ISZERO PUSH2 0x63C JUMPI PUSH1 0x40 MLOAD PUSH4 0x3345CD43 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF AND PUSH2 0x655 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3D89 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x679 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2A8E4627 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x68C PUSH2 0x687 DUP6 PUSH2 0x4178 JUMP JUMPDEST PUSH2 0xF15 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP1 SWAP2 POP DUP2 SWAP1 PUSH32 0xB243C3CEA6CD1BBFD64D5D0765F13734CA7B87FDF14E017391FE12A8891434CA SWAP1 PUSH2 0x6D4 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0x709 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x739 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x745 DUP5 PUSH2 0xF45 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x760 JUMPI PUSH2 0x760 PUSH2 0x3FDB JUMP JUMPDEST EQ PUSH2 0x76C JUMPI PUSH1 0x2 PUSH2 0x76F JUMP JUMPDEST PUSH1 0x3 JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 POP DUP3 SWAP2 PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x79C JUMPI PUSH2 0x79C PUSH2 0x3FDB JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP1 DUP1 PUSH2 0x7F7 DUP7 PUSH2 0x7DB PUSH2 0x7B6 DUP12 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x180 ADD CALLDATALOAD PUSH2 0x7C5 DUP13 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x7D6 SWAP1 PUSH1 0x60 DUP2 ADD SWAP1 PUSH1 0x40 ADD PUSH2 0x3D89 JUMP JUMPDEST PUSH2 0x1306 JUMP JUMPDEST PUSH1 0x3 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x7EF JUMPI PUSH2 0x7EF PUSH2 0x3FDB JUMP JUMPDEST EQ ISZERO DUP12 PUSH2 0x1348 JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH1 0x0 PUSH2 0x821 DUP10 DUP6 DUP6 DUP11 PUSH1 0x3 DUP11 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x81B JUMPI PUSH2 0x81B PUSH2 0x3FDB JUMP JUMPDEST EQ PUSH2 0x18D5 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x837 DUP11 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x848 SWAP1 PUSH1 0x80 DUP2 ADD SWAP1 PUSH1 0x60 ADD PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 PUSH32 0xB07A8B0B083F8976B3C832B720632F49CB8BA1E7A99E1B145F51A47D3391CB7 DUP13 DUP7 DUP7 CALLER PUSH1 0x40 MLOAD PUSH2 0x887 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x43EA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP PUSH1 0x1 PUSH1 0x16 SSTORE POP SWAP3 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLER PUSH2 0x8AA PUSH2 0xEE7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x8E5 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x8E2 JUMPI PUSH2 0x8E2 PUSH2 0x3FDB JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x903 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1F PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x93C JUMPI PUSH1 0x40 MLOAD PUSH4 0x7840A40D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1F PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE CALLER SWAP1 DUP4 ADD MSTORE PUSH32 0x4860B0A180D4B5969C2757493A999F05D0B22318320F154A02170AA239E24B13 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST CALLER PUSH2 0x9A2 PUSH2 0xEE7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x9DD JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x9DA JUMPI PUSH2 0x9DA PUSH2 0x3FDB JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x9FB JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xA22 JUMPI PUSH1 0x40 MLOAD PUSH4 0x32F9C08D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1F PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xA5C JUMPI PUSH1 0x40 MLOAD PUSH4 0xE2A45063 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1F PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE CALLER SWAP1 DUP4 ADD MSTORE PUSH32 0x3860A100215FE93B6B95ED1AE0870E538F85A73B30D073F63FEFC60E08B0C124 SWAP2 ADD PUSH2 0x98E JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0xADC JUMPI PUSH1 0x40 MLOAD PUSH4 0x63B468CB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x17 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH2 0x1A0 DUP2 ADD DUP3 MSTORE PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP12 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP3 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP14 AND PUSH1 0x60 DUP6 ADD MSTORE DUP11 AND PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD DUP2 SWAP1 MSTORE DUP4 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP6 DUP5 MSTORE SWAP3 PUSH1 0xC0 DUP4 ADD SWAP2 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH1 0x20 DUP3 ADD DUP9 SWAP1 MSTORE CALLER PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 SWAP1 SWAP2 ADD MSTORE SWAP1 POP PUSH2 0xB96 DUP2 DUP10 DUP9 PUSH2 0x191E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x17 SSTORE SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x17 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0xBD0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x63B468CB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x17 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH2 0x1A0 DUP2 ADD DUP3 MSTORE PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE DUP12 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP3 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP14 AND PUSH1 0x60 DUP6 ADD MSTORE DUP11 AND PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0xA0 DUP5 ADD MSTORE DUP4 MLOAD PUSH1 0x1F DUP8 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD SWAP1 SWAP5 MSTORE DUP6 DUP5 MSTORE SWAP3 PUSH1 0xC0 DUP4 ADD SWAP2 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH1 0x20 DUP3 ADD DUP9 SWAP1 MSTORE CALLER PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 SWAP1 SWAP2 ADD MSTORE SWAP1 POP PUSH2 0xB96 DUP2 DUP10 DUP9 PUSH2 0x191E JUMP JUMPDEST CALLER PUSH2 0xC93 PUSH2 0xEE7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0xCCE JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xCCB JUMPI PUSH2 0xCCB PUSH2 0x3FDB JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0xCEC JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0xD0A JUMPI PUSH1 0x40 MLOAD PUSH4 0x3BCA644D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP3 AND ISZERO DUP1 PUSH2 0xD27 JUMPI POP PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST ISZERO PUSH2 0xD45 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2892757B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 ADD MSTORE CALLER DUP3 DUP3 ADD MSTORE MLOAD PUSH32 0xB07F562723347D6EA7F9F37B3B31F96B65104C3339D1C89E1B6FA88E2410B85C SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST DUP1 CALLER PUSH2 0xDBA PUSH1 0xA0 DUP4 ADD PUSH1 0x80 DUP5 ADD PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xDE1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE3613AFF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF AND PUSH2 0xDFA PUSH1 0x40 DUP5 ADD PUSH1 0x20 DUP6 ADD PUSH2 0x3D89 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0xE1E JUMPI PUSH1 0x40 MLOAD PUSH4 0xADA556F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE2C PUSH2 0x687 DUP5 PUSH2 0x4178 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD SWAP2 SWAP3 POP DUP3 SWAP2 PUSH32 0x2510041334EDE909998B9AEFCCA4300FC36C670DD00E1F7F0AFFFACA56ADCB39 SWAP2 SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0xE9F JUMPI PUSH1 0x40 MLOAD PUSH4 0xBD76195 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xEA9 DUP2 CALLVALUE PUSH2 0x1BBA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE DUP4 SWAP2 PUSH32 0xFD832CAF789E0DADD0E7ED643B3EA6051FA26C48516E242CA4CB3DB9EDA6C8EC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xF28 SWAP2 SWAP1 PUSH2 0x4764 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xF93 JUMPI POP PUSH2 0xF6C DUP4 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0xF7D SWAP1 PUSH1 0xA0 DUP2 ADD SWAP1 PUSH1 0x80 ADD PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST ISZERO PUSH2 0xFB1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7C32A2B3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF AND PUSH2 0xFC4 DUP5 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0xFD5 SWAP1 PUSH1 0x40 DUP2 ADD SWAP1 PUSH1 0x20 ADD PUSH2 0x3D89 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0xFF9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB6BB3225 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1008 PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x4777 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 SWAP1 POP PUSH2 0x1024 PUSH2 0x101B DUP7 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x687 SWAP1 PUSH2 0x4178 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND DUP3 ISZERO PUSH2 0x12C9 JUMPI PUSH1 0xC SLOAD DUP4 GT ISZERO PUSH2 0x1062 JUMPI PUSH1 0x40 MLOAD PUSH4 0x13C06EF3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1076 JUMPI PUSH2 0x1076 PUSH2 0x3FDB JUMP JUMPDEST EQ PUSH2 0x1094 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCAAEB0B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1F PUSH1 0x0 PUSH2 0x10A8 PUSH1 0x80 DUP10 ADD PUSH1 0x60 DUP11 ADD PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x10E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1FA09B53 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x112F DUP3 PUSH2 0x10F3 PUSH1 0x20 DUP10 ADD DUP10 PUSH2 0x4777 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1105 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x47C0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 PUSH2 0x112A PUSH1 0x80 DUP10 ADD DUP10 PUSH2 0x47DA JUMP JUMPDEST PUSH2 0x1CDD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1148 PUSH1 0x80 DUP9 ADD PUSH1 0x60 DUP10 ADD PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x116F JUMPI PUSH1 0x40 MLOAD PUSH4 0x8579ECA5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP6 SWAP1 MSTORE DUP2 DUP4 ADD DUP7 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB DUP5 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x12C2 JUMPI PUSH2 0x11AA PUSH2 0x1D2F JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x1207 JUMPI POP PUSH1 0x15 PUSH1 0x0 PUSH2 0x11C3 PUSH1 0x20 DUP12 ADD DUP12 PUSH2 0x4777 JUMP JUMPDEST DUP5 DUP2 DUP2 LT PUSH2 0x11D3 JUMPI PUSH2 0x11D3 PUSH2 0x4820 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x11E8 SWAP2 SWAP1 PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x1225 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE1EB7F7 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1258 DUP3 PUSH2 0x1236 PUSH1 0x40 DUP12 ADD DUP12 PUSH2 0x4777 JUMP JUMPDEST DUP5 DUP2 DUP2 LT PUSH2 0x1246 JUMPI PUSH2 0x1246 PUSH2 0x4820 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x112A SWAP2 SWAP1 PUSH2 0x47DA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x126E PUSH1 0x20 DUP11 ADD DUP11 PUSH2 0x4777 JUMP JUMPDEST DUP4 DUP2 DUP2 LT PUSH2 0x127E JUMPI PUSH2 0x127E PUSH2 0x4820 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1293 SWAP2 SWAP1 PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x12BA JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A1DD233 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 ADD PUSH2 0x119A JUMP JUMPDEST POP POP PUSH2 0x12FB JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x12DD JUMPI PUSH2 0x12DD PUSH2 0x3FDB JUMP JUMPDEST EQ PUSH2 0x12FB JUMPI PUSH1 0x40 MLOAD PUSH4 0x6320D2CF PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x132A SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH4 0xFFFFFFFF AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x1359 PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x4777 JUMP JUMPDEST PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1372 SWAP3 SWAP1 SWAP2 PUSH2 0x3CF4 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x137F DUP6 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x1390 SWAP1 PUSH1 0x60 DUP2 ADD SWAP1 PUSH1 0x40 ADD PUSH2 0x3D89 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND ISZERO PUSH2 0x13D1 JUMPI PUSH2 0x13CE DUP8 PUSH2 0x13A9 DUP8 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x180 ADD CALLDATALOAD PUSH2 0x13B8 DUP9 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x13C9 SWAP1 PUSH1 0x60 DUP2 ADD SWAP1 PUSH1 0x40 ADD PUSH2 0x3D89 JUMP JUMPDEST PUSH2 0x1D56 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0x13DB DUP6 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x120 ADD CALLDATALOAD PUSH1 0x0 SUB PUSH2 0x13F5 JUMPI PUSH1 0x0 SWAP4 POP SWAP2 POP DUP2 SWAP1 POP PUSH2 0x18CB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1401 DUP7 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x1412 SWAP1 PUSH1 0xC0 DUP2 ADD SWAP1 PUSH1 0xA0 ADD PUSH2 0x4836 JUMP JUMPDEST DUP1 PUSH2 0x142B JUMPI POP PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1439 DUP8 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x120 ADD CALLDATALOAD SWAP1 POP DUP8 ISZERO PUSH2 0x17D9 JUMPI PUSH1 0x0 PUSH2 0x1455 PUSH1 0x20 DUP10 ADD DUP10 PUSH2 0x4777 JUMP JUMPDEST SWAP2 POP PUSH2 0x1479 SWAP1 POP PUSH2 0x1466 DUP10 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x120 ADD CALLDATALOAD PUSH1 0x0 PUSH1 0x1 ADD SLOAD PUSH2 0x2710 PUSH2 0x1D65 JUMP JUMPDEST SWAP2 POP DUP1 PUSH1 0x1 SUB PUSH2 0x166A JUMPI DUP3 ISZERO DUP1 ISZERO PUSH2 0x14F0 JUMPI POP DUP2 PUSH1 0xA PUSH1 0x0 PUSH2 0x149E PUSH1 0x20 DUP13 ADD DUP13 PUSH2 0x4777 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x14AF JUMPI PUSH2 0x14AF PUSH2 0x4820 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x14C4 SWAP2 SWAP1 PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP10 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD LT JUMPDEST DUP1 ISZERO PUSH2 0x1506 JUMPI POP PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x15D5 JUMPI PUSH1 0x15 PUSH1 0x0 PUSH2 0x151C PUSH1 0x20 DUP12 ADD DUP12 PUSH2 0x4777 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x152D JUMPI PUSH2 0x152D PUSH2 0x4820 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1542 SWAP2 SWAP1 PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1581 JUMPI PUSH1 0x40 MLOAD PUSH4 0x10C4E509 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x15C2 DUP14 DUP14 DUP7 PUSH2 0x1597 PUSH1 0x20 DUP16 ADD DUP16 PUSH2 0x4777 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x15A8 JUMPI PUSH2 0x15A8 PUSH2 0x4820 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x15BD SWAP2 SWAP1 PUSH2 0x3DC6 JUMP JUMPDEST PUSH2 0x1D7C JUMP JUMPDEST SWAP1 SWAP10 POP SWAP8 POP SWAP5 SWAP6 POP PUSH2 0x18CB SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP2 PUSH1 0xA PUSH1 0x0 PUSH2 0x15E7 PUSH1 0x20 DUP13 ADD DUP13 PUSH2 0x4777 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 LT PUSH2 0x15F8 JUMPI PUSH2 0x15F8 PUSH2 0x4820 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x160D SWAP2 SWAP1 PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x165F SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x17D7 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1676 DUP3 DUP5 PUSH2 0x4892 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH2 0x1686 PUSH1 0x1 DUP5 PUSH2 0x4869 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1723 JUMPI DUP2 PUSH1 0xA PUSH1 0x0 PUSH2 0x169F PUSH1 0x20 DUP15 ADD DUP15 PUSH2 0x4777 JUMP JUMPDEST DUP6 DUP2 DUP2 LT PUSH2 0x16AF JUMPI PUSH2 0x16AF PUSH2 0x4820 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x16C4 SWAP2 SWAP1 PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x1716 SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 ADD PUSH2 0x167B JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1730 DUP4 DUP6 PUSH2 0x48A6 JUMP JUMPDEST PUSH2 0x173A SWAP1 DUP4 PUSH2 0x48BA JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0xA PUSH1 0x0 PUSH2 0x174E PUSH1 0x20 DUP15 ADD DUP15 PUSH2 0x4777 JUMP JUMPDEST PUSH2 0x1759 PUSH1 0x1 DUP10 PUSH2 0x4869 JUMP JUMPDEST DUP2 DUP2 LT PUSH2 0x1768 JUMPI PUSH2 0x1768 PUSH2 0x4820 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x177D SWAP2 SWAP1 PUSH2 0x3DC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x17CF SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP JUMPDEST POP JUMPDEST PUSH2 0x17E3 DUP8 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x17F4 SWAP1 PUSH1 0x60 DUP2 ADD SWAP1 PUSH1 0x40 ADD PUSH2 0x3D89 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x181A JUMPI POP PUSH1 0x0 PUSH2 0x1814 DUP11 PUSH2 0x1F3B JUMP JUMPDEST PUSH1 0x3 ADD SLOAD GT JUMPDEST ISZERO PUSH2 0x1846 JUMPI PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x4 ADD DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x1840 SWAP1 DUP5 SWAP1 PUSH2 0x4869 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST DUP2 ISZERO PUSH2 0x1871 JUMPI PUSH1 0x0 DUP11 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP5 POP SWAP1 SWAP3 POP DUP3 SWAP2 POP PUSH2 0x18CB SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP11 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE SWAP1 DUP1 PUSH2 0x18BD DUP13 DUP8 DUP7 DUP7 DUP6 SUB PUSH2 0x18A7 JUMPI PUSH2 0x189E DUP15 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH1 0xE0 ADD CALLDATALOAD PUSH2 0x18A9 JUMP JUMPDEST DUP7 JUMPDEST PUSH2 0x18B3 DUP16 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x140 ADD CALLDATALOAD PUSH2 0x1F7C JUMP JUMPDEST SWAP1 SWAP10 POP SWAP8 POP SWAP5 SWAP6 POP POP POP POP POP POP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18FC DUP5 PUSH2 0x18E5 DUP9 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x18F6 SWAP1 PUSH1 0x80 DUP2 ADD SWAP1 PUSH1 0x60 ADD PUSH2 0x3DC6 JUMP JUMPDEST DUP8 PUSH2 0x2001 JUMP JUMPDEST PUSH2 0x1912 DUP4 DUP7 DUP7 DUP6 PUSH2 0x190D DUP12 DUP1 PUSH2 0x426D JUMP JUMPDEST PUSH2 0x2040 JUMP JUMPDEST POP DUP4 JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x194C JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO DUP1 ISZERO PUSH2 0x1964 JUMPI POP DUP3 ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1982 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAE715AD3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x198F DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x21B4 JUMP JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x19BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x845FDD PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2710 DUP6 PUSH1 0xE0 ADD MLOAD GT ISZERO PUSH2 0x19E3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x388D7231 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND ISZERO PUSH2 0x1B67 JUMPI PUSH1 0x0 PUSH2 0x1A18 DUP10 PUSH2 0x21ED JUMP JUMPDEST SWAP1 SWAP4 POP SWAP1 POP PUSH1 0x0 PUSH2 0x1A28 DUP3 PUSH2 0x1F3B JUMP JUMPDEST DUP5 MLOAD DUP13 MLOAD PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP2 AND EQ SWAP4 POP SWAP1 POP DUP3 PUSH2 0x1A50 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1A56 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD JUMPDEST SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x1A7F JUMPI PUSH1 0x40 MLOAD PUSH4 0x965A46C1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD DUP4 DUP1 ISZERO PUSH2 0x1A91 JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST ISZERO PUSH2 0x1ADE JUMPI PUSH1 0x0 DUP11 DUP4 PUSH1 0x4 ADD SLOAD PUSH2 0x1AA8 SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST SWAP1 POP DUP2 DUP2 GT ISZERO PUSH2 0x1ACB JUMPI PUSH1 0x40 MLOAD PUSH4 0x48BA8BF1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SSTORE JUMPDEST POP DUP4 MLOAD PUSH4 0xFFFFFFFF AND PUSH1 0x40 DUP13 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x180 DUP13 ADD MSTORE DUP9 ISZERO PUSH2 0x1B64 JUMPI PUSH2 0x1B07 DUP11 DUP11 PUSH2 0x2263 JUMP JUMPDEST PUSH2 0x1B18 DUP3 DUP12 DUP9 DUP13 DUP16 PUSH1 0xE0 ADD MLOAD PUSH2 0x23B4 JUMP JUMPDEST PUSH2 0x120 DUP13 ADD MSTORE PUSH2 0x1B5D PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND SWAP1 DUP9 AND EQ PUSH2 0x1B48 JUMPI PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1B55 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND JUMPDEST PUSH1 0x12 DUP12 PUSH2 0x2437 JUMP JUMPDEST PUSH2 0x140 DUP13 ADD MSTORE JUMPDEST POP POP JUMPDEST PUSH1 0x3 DUP1 SLOAD SWAP1 PUSH1 0x0 PUSH2 0x1B77 DUP4 PUSH2 0x48CD JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x160 DUP11 ADD MSTORE PUSH2 0x1B8A DUP10 PUSH2 0xF15 JUMP JUMPDEST SWAP3 POP CALLVALUE ISZERO PUSH2 0x1B9B JUMPI PUSH2 0x1B9B DUP4 PUSH2 0xE75 JUMP JUMPDEST PUSH2 0x1BAB DUP4 DUP11 DUP11 DUP11 DUP10 DUP8 DUP11 DUP9 PUSH2 0x24A2 JUMP JUMPDEST POP SWAP1 SWAP4 POP POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x1C0F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1C5C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1C61 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x1CD8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1C06 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D27 PUSH2 0x1CEB DUP6 PUSH2 0x2689 JUMP JUMPDEST DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x26C4 SWAP3 POP POP POP JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1D3A PUSH2 0xEE7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x1D51 JUMPI POP PUSH1 0x12 SLOAD PUSH1 0xFF AND JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D27 DUP5 DUP5 DUP5 PUSH1 0x0 PUSH2 0x26E8 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1D72 DUP5 DUP7 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x1D27 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1D8A DUP7 PUSH2 0x2723 JUMP JUMPDEST PUSH1 0x1B SLOAD PUSH1 0x40 MLOAD PUSH4 0x69A933A5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP10 SWAP1 MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP4 ADD MSTORE SWAP3 SWAP4 POP SWAP2 AND SWAP1 PUSH4 0x69A933A5 SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1DFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1B SLOAD PUSH1 0x40 MLOAD PUSH4 0x1A4CA37B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP11 SWAP1 MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x0 SWAP5 POP SWAP1 SWAP2 AND SWAP2 POP PUSH4 0x69328DEC SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E5B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E7F SWAP2 SWAP1 PUSH2 0x48FD JUMP JUMPDEST SWAP1 POP DUP6 DUP2 LT ISZERO PUSH2 0x1EA2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x407559A3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x1D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE PUSH1 0x1C SLOAD PUSH2 0x2710 SWAP1 PUSH2 0x1EC5 SWAP1 DUP9 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x1ECF SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x1E PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE SWAP3 DUP2 ADD DUP10 SWAP1 MSTORE SWAP2 DUP8 AND SWAP2 DUP11 SWAP2 PUSH32 0x2D3BA0FA5BE2EF8CB1EC8920A07A6CBCCC2397B18CA3E70F48EA695500B8F218 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP DUP5 SWAP3 POP SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 DUP1 DUP3 ADD SLOAD DUP4 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0xFF AND LT ISZERO PUSH2 0x1BB3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x618CCA3F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1F8A DUP9 PUSH2 0x1F3B JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP9 AND DUP2 SUB PUSH2 0x1FB2 JUMPI DUP7 SWAP4 POP SWAP2 POP PUSH2 0x1FF7 SWAP1 POP JUMP JUMPDEST DUP7 PUSH1 0x0 SUB PUSH2 0x1FC6 JUMPI DUP7 SWAP4 POP SWAP2 POP PUSH2 0x1FF7 SWAP1 POP JUMP JUMPDEST PUSH2 0x1FF0 DUP10 DUP10 DUP4 DUP11 PUSH2 0x1FEB PUSH1 0x12 DUP9 PUSH1 0x1 ADD PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP13 DUP15 PUSH2 0x275C JUMP JUMPDEST PUSH2 0x27A8 JUMP JUMPDEST SWAP4 POP SWAP4 POP POP POP JUMPDEST SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x200E JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x2035 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A48CA7B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1CD8 DUP4 DUP4 DUP4 PUSH2 0x28E7 JUMP JUMPDEST PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 PUSH2 0x206E PUSH1 0xC0 DUP4 ADD DUP4 PUSH2 0x47DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x207C SWAP3 SWAP2 SWAP1 PUSH2 0x4916 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SUB ISZERO PUSH2 0x21AD JUMPI PUSH1 0x0 DUP1 PUSH2 0x2143 PUSH2 0x20A0 PUSH1 0x80 DUP6 ADD PUSH1 0x60 DUP7 ADD PUSH2 0x3DC6 JUMP JUMPDEST PUSH2 0x2710 GAS PUSH2 0x20AE SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 PUSH4 0xFD614F41 PUSH1 0xE0 SHL DUP13 DUP13 DUP13 DUP13 PUSH2 0x20CA JUMPI PUSH1 0x0 PUSH2 0x20DC JUMP JUMPDEST PUSH2 0x20DC PUSH2 0x120 DUP14 ADD PUSH2 0x100 DUP15 ADD PUSH2 0x3DC6 JUMP JUMPDEST PUSH2 0x20E9 PUSH1 0x20 DUP15 ADD DUP15 PUSH2 0x3D89 JUMP JUMPDEST PUSH2 0x20F6 PUSH1 0xC0 DUP16 ADD DUP16 PUSH2 0x47DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x210C SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4926 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x294A JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP4 ISZERO DUP1 ISZERO PUSH2 0x2153 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x2170 JUMPI PUSH1 0x40 MLOAD PUSH3 0x64CDD3 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP7 PUSH32 0xB1A4AB59FACAEDD6D3A71DA3902E0A1FA5B99750C0E20CD878334378A41CB335 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x21A2 SWAP3 SWAP2 SWAP1 PUSH2 0x4979 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 PUSH2 0x21E8 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC3BCD49 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 DUP1 PUSH2 0x220D DUP5 PUSH2 0x29D4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2223 DUP3 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0x0 ADD MLOAD PUSH2 0x1306 JUMP JUMPDEST SWAP1 POP PUSH2 0x222E DUP2 PUSH2 0x1F3B JUMP JUMPDEST PUSH1 0x2 ADD SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2259 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA13F958F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP1 SWAP5 SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x226F JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2296 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2A38B133 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP3 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2303 SWAP2 SWAP1 PUSH2 0x48FD JUMP JUMPDEST SWAP1 POP PUSH2 0x231A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP7 PUSH2 0x29F3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP4 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2362 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2386 SWAP2 SWAP1 PUSH2 0x48FD JUMP JUMPDEST PUSH2 0x2390 SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST EQ PUSH2 0x23AE JUMPI PUSH1 0x40 MLOAD PUSH4 0xE407735 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 SUB PUSH2 0x23C6 JUMPI POP PUSH1 0x0 PUSH2 0x1915 JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x23E6 JUMPI POP DUP2 PUSH2 0x1915 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x23F1 DUP8 PUSH2 0x1F3B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x242A DUP9 DUP9 DUP9 DUP9 PUSH2 0x1FEB DUP8 PUSH1 0x1 ADD PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP9 PUSH1 0x0 ADD PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP13 DUP13 PUSH2 0x275C JUMP JUMPDEST POP SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0xFF AND DUP5 PUSH1 0xFF AND SUB PUSH2 0x244D JUMPI POP DUP1 PUSH2 0x1BB3 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0xFF AND DUP6 PUSH1 0xFF AND LT ISZERO PUSH2 0x2483 JUMPI PUSH2 0x2467 DUP6 DUP6 PUSH2 0x4994 JUMP JUMPDEST PUSH2 0x2472 SWAP1 PUSH1 0xA PUSH2 0x4A91 JUMP JUMPDEST PUSH2 0x247C SWAP1 DUP5 PUSH2 0x48E6 JUMP JUMPDEST SWAP1 POP PUSH2 0x1D27 JUMP JUMPDEST PUSH2 0x248D DUP5 DUP7 PUSH2 0x4994 JUMP JUMPDEST PUSH2 0x2498 SWAP1 PUSH1 0xA PUSH2 0x4A91 JUMP JUMPDEST PUSH2 0x1915 SWAP1 DUP5 PUSH2 0x4892 JUMP JUMPDEST PUSH2 0x120 DUP8 ADD MLOAD DUP1 ISZERO PUSH2 0x2514 JUMPI DUP2 PUSH2 0x2514 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2770A7EB PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x9DC29FAC SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x250F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x3 DUP5 DUP14 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2538 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4AA0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE PUSH1 0x20 DUP1 SLOAD PUSH4 0x9FA92F9D PUSH1 0xE0 SHL DUP6 MSTORE SWAP3 MLOAD SWAP2 SWAP5 POP PUSH1 0x0 SWAP4 DUP5 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 PUSH4 0x9FA92F9D SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2592 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x25B6 SWAP2 SWAP1 PUSH2 0x4ADF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFA31DE01 DUP13 PUSH1 0x20 ADD MLOAD DUP11 DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x25E9 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4AFC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2608 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2630 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x4B21 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 DUP12 PUSH2 0x160 ADD MLOAD DUP14 PUSH32 0xED8E6BA697DD65259E5CE532AC08FF06D1A3607BCEC58F8F0937FE36A5666C54 DUP15 DUP15 DUP15 DUP13 DUP9 PUSH1 0x40 MLOAD PUSH2 0x2673 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4BA3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x19457468657265756D205369676E6564204D6573736167653A0A333200000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x3C DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x5C ADD PUSH2 0xF28 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x26D3 DUP6 DUP6 PUSH2 0x2A2B JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x26E0 DUP2 PUSH2 0x2A70 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP5 AND SUB PUSH2 0x2707 JUMPI POP DUP3 PUSH2 0x1D27 JUMP JUMPDEST PUSH2 0x2710 DUP6 PUSH2 0x1F3B JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x272F DUP4 PUSH2 0x1F3B JUMP JUMPDEST PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 PUSH2 0x38B JUMPI PUSH1 0x40 MLOAD PUSH4 0x558A507 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 SUB PUSH2 0x276E JUMPI POP PUSH1 0x0 PUSH2 0x1D27 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2710 PUSH2 0x277D DUP5 DUP3 PUSH2 0x4869 JUMP JUMPDEST PUSH2 0x2787 SWAP1 DUP7 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x2791 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST SWAP1 POP PUSH2 0x279E DUP7 DUP7 DUP4 PUSH2 0x2437 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 PUSH2 0x27C3 DUP2 PUSH2 0x2BBD JUMP JUMPDEST ISZERO PUSH2 0x27F5 JUMPI PUSH2 0x27E9 PUSH2 0x27D5 DUP11 DUP11 PUSH2 0x2BDA JUMP JUMPDEST PUSH2 0x27DF DUP12 DUP11 PUSH2 0x2BDA JUMP JUMPDEST DUP4 SWAP2 SWAP1 DUP10 DUP10 PUSH2 0x2C5A JUMP JUMPDEST DUP8 SWAP4 POP SWAP4 POP POP POP PUSH2 0x1FF7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2800 DUP11 PUSH2 0x1F3B JUMP JUMPDEST PUSH1 0x2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 POP DUP10 SWAP1 PUSH2 0x2821 SWAP1 DUP3 AND DUP4 PUSH1 0x0 PUSH2 0x2F63 JUMP JUMPDEST PUSH2 0x2835 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP4 DUP11 PUSH2 0x3078 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH4 0xD460F0A2 DUP10 DUP13 DUP13 DUP12 PUSH2 0x2854 PUSH2 0xE10 TIMESTAMP PUSH2 0x48BA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x28B5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x28D9 SWAP2 SWAP1 PUSH2 0x48FD JUMP JUMPDEST DUP10 SWAP6 POP SWAP6 POP POP POP POP POP PUSH2 0x1FF7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1CD8 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x312A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH2 0xFFFF AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x296F JUMPI PUSH2 0x296F PUSH2 0x4073 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2999 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP8 MLOAD PUSH1 0x20 DUP10 ADD DUP12 DUP15 DUP15 CALL SWAP2 POP RETURNDATASIZE SWAP3 POP DUP7 DUP4 GT ISZERO PUSH2 0x29BA JUMPI DUP7 SWAP3 POP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x38B DUP3 PUSH1 0x0 PUSH2 0x31FC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x23AE SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD PUSH2 0x2913 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD PUSH1 0x41 SUB PUSH2 0x2A61 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x0 BYTE PUSH2 0x2A55 DUP8 DUP3 DUP6 DUP6 PUSH2 0x32F4 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP POP POP PUSH2 0x2A69 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 POP PUSH1 0x2 JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x2A84 JUMPI PUSH2 0x2A84 PUSH2 0x3FDB JUMP JUMPDEST SUB PUSH2 0x2A8C JUMPI POP JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x2AA0 JUMPI PUSH2 0x2AA0 PUSH2 0x3FDB JUMP JUMPDEST SUB PUSH2 0x2AED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x2B01 JUMPI PUSH2 0x2B01 PUSH2 0x3FDB JUMP JUMPDEST SUB PUSH2 0x2B4E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x2B62 JUMPI PUSH2 0x2B62 PUSH2 0x3FDB JUMP JUMPDEST SUB PUSH2 0x2BBA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1C06 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0xC DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x38B JUMPI POP POP PUSH1 0x8 ADD SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD DUP7 DUP6 MSTORE PUSH1 0x18 SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 PUSH1 0x8 ADD DUP1 SLOAD DUP5 SWAP4 PUSH1 0xFF AND SWAP3 SWAP2 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0x2C27 JUMPI PUSH2 0x2C27 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1D27 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54E4429 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x2CA2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x191A5CD8589B1959081C1BDBDB PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST DUP6 PUSH1 0xA ADD DUP6 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2CBA JUMPI PUSH2 0x2CBA PUSH2 0x4820 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP4 GT ISZERO PUSH2 0x2D0D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x6D6F7265207468616E20706F6F6C2062616C616E6365 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP9 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2D60 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x2D4C JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x2D74 DUP10 DUP10 DUP10 DUP10 DUP6 PUSH2 0x33B5 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP DUP5 DUP4 LT ISZERO PUSH2 0x2DB6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x6479203C206D696E4479 PUSH1 0xB0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x0 DUP10 PUSH1 0x9 ADD DUP9 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2DD0 JUMPI PUSH2 0x2DD0 PUSH2 0x4820 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH5 0x2540BE400 DUP12 PUSH1 0x6 ADD SLOAD DUP6 PUSH2 0x2DF1 SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x2DFB SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST PUSH2 0x2E05 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST SWAP1 POP DUP7 DUP3 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x2E1D JUMPI PUSH2 0x2E1D PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2E2F SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2E47 JUMPI PUSH2 0x2E47 PUSH2 0x4820 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP1 DUP5 DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x2E6C JUMPI PUSH2 0x2E6C PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2E7E SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST PUSH2 0x2E88 SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2EA0 JUMPI PUSH2 0x2EA0 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE DUP1 ISZERO PUSH2 0x2F05 JUMPI DUP1 DUP11 PUSH1 0xB ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2ECB JUMPI PUSH2 0x2ECB PUSH2 0x4820 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x2EE0 SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST DUP11 PUSH1 0xB ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2EF8 JUMPI PUSH2 0x2EF8 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE JUMPDEST DUP10 SLOAD PUSH1 0x40 DUP1 MLOAD DUP10 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0xFF DUP13 DUP2 AND DUP3 DUP5 ADD MSTORE DUP12 AND PUSH1 0x60 DUP3 ADD MSTORE SWAP1 MLOAD CALLER SWAP3 SWAP2 PUSH32 0x28D4CF2D5709DA3B474B5F05CFD7083FAFFD601F9500D1F8439B8A13EC7DF320 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP SWAP2 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x2FDD JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2FB7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FDB SWAP2 SWAP1 PUSH2 0x48FD JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x3048 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH22 0x20746F206E6F6E2D7A65726F20616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1CD8 SWAP1 DUP5 SWAP1 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x2913 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP4 SWAP2 DUP7 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x30C9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x30ED SWAP2 SWAP1 PUSH2 0x48FD JUMP JUMPDEST PUSH2 0x30F7 SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH2 0x23AE SWAP1 DUP6 SWAP1 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x2913 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x317F DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x357B SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1CD8 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x319D SWAP2 SWAP1 PUSH2 0x4BF2 JUMP JUMPDEST PUSH2 0x1CD8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x3239 JUMPI SWAP1 POP PUSH2 0x38B JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 DUP4 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD PUSH4 0xFFFFFFFF AND DUP1 DUP5 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ISZERO PUSH2 0x3284 JUMPI SWAP1 POP PUSH2 0x38B JUMP JUMPDEST PUSH2 0x328E DUP5 DUP5 PUSH2 0x358A JUMP JUMPDEST ISZERO PUSH2 0x32B4 JUMPI PUSH1 0x4 DUP4 ADD SLOAD PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x1BB3 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 DUP4 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE PUSH1 0x1 ADD SLOAD SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP4 GT ISZERO PUSH2 0x332B JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x3 PUSH2 0x1F32 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x337F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x33A8 JUMPI PUSH1 0x0 PUSH1 0x1 SWAP3 POP SWAP3 POP POP PUSH2 0x1F32 JUMP JUMPDEST SWAP7 PUSH1 0x0 SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP8 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3408 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x33F4 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x341B DUP6 DUP4 PUSH2 0x35C9 JUMP JUMPDEST SWAP1 POP DUP1 MLOAD DUP9 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x3433 JUMPI POP DUP1 MLOAD DUP8 PUSH1 0xFF AND LT JUMPDEST PUSH2 0x3474 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x696E646578206F7574206F662072616E6765 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x348B JUMPI PUSH2 0x348B PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x34A8 JUMPI PUSH2 0x34A8 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH2 0x34BB SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x34C5 SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x34DE PUSH2 0x34D5 DUP13 PUSH2 0x36D3 JUMP JUMPDEST DUP12 DUP12 DUP6 DUP8 PUSH2 0x36DE JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 DUP5 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x34F8 JUMPI PUSH2 0x34F8 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x350A SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST PUSH2 0x3514 SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST SWAP6 POP PUSH5 0x2540BE400 DUP12 PUSH1 0x5 ADD SLOAD DUP8 PUSH2 0x352C SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3536 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST SWAP5 POP DUP4 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x354D JUMPI PUSH2 0x354D PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP8 PUSH2 0x3561 SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST PUSH2 0x356B SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST SWAP6 POP POP POP POP POP SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1D27 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x3945 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND ISZERO PUSH2 0x35B8 JUMPI POP PUSH1 0x0 PUSH2 0x38B JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH1 0x60 SWAP2 SWAP1 DUP2 EQ PUSH2 0x3616 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x6D69736D61746368206D756C7469706C69657273 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3630 JUMPI PUSH2 0x3630 PUSH2 0x4073 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3659 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x36CA JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3679 JUMPI PUSH2 0x3679 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3693 JUMPI PUSH2 0x3693 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x36A5 SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x36B7 JUMPI PUSH2 0x36B7 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x365F JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x38B DUP3 PUSH2 0x3A20 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF DUP1 DUP7 AND SWAP1 DUP8 AND SUB PUSH2 0x3738 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x636F6D7061726520746F6B656E20746F20697473656C66000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST DUP1 DUP7 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x374C JUMPI POP DUP1 DUP6 PUSH1 0xFF AND LT JUMPDEST PUSH2 0x378A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1D1BDAD95B881B9BDD08199BDD5B99 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3796 DUP5 DUP10 PUSH2 0x3A69 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 DUP1 PUSH2 0x37A6 DUP12 DUP7 PUSH2 0x48E6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x382D JUMPI DUP12 PUSH1 0xFF AND DUP2 SUB PUSH2 0x37C6 JUMPI DUP10 SWAP2 POP PUSH2 0x37F9 JUMP JUMPDEST DUP11 PUSH1 0xFF AND DUP2 EQ PUSH2 0x37F1 JUMPI DUP9 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x37E2 JUMPI PUSH2 0x37E2 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP2 POP PUSH2 0x37F9 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x37AC JUMP JUMPDEST PUSH2 0x3803 DUP3 DUP6 PUSH2 0x48BA JUMP JUMPDEST SWAP4 POP PUSH2 0x380F DUP8 DUP4 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3819 DUP8 DUP8 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3823 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST SWAP5 POP PUSH1 0x1 ADD PUSH2 0x37AC JUMP JUMPDEST POP PUSH2 0x3838 DUP7 DUP4 PUSH2 0x48E6 JUMP JUMPDEST PUSH1 0x64 PUSH2 0x3844 DUP8 DUP8 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x384E SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3858 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST SWAP4 POP PUSH1 0x0 DUP3 PUSH2 0x3868 PUSH1 0x64 DUP9 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3872 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST PUSH2 0x387C SWAP1 DUP6 PUSH2 0x48BA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP7 DUP2 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x38FC JUMPI DUP2 SWAP3 POP DUP9 DUP5 DUP4 PUSH1 0x2 PUSH2 0x389F SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x38A9 SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST PUSH2 0x38B3 SWAP2 SWAP1 PUSH2 0x4869 JUMP JUMPDEST DUP9 PUSH2 0x38BE DUP5 DUP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x38C8 SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST PUSH2 0x38D2 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST SWAP2 POP PUSH2 0x38DE DUP3 DUP5 PUSH2 0x3C16 JUMP JUMPDEST ISZERO PUSH2 0x38F4 JUMPI POP SWAP9 POP PUSH2 0x1915 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x3883 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x417070726F78696D6174696F6E20646964206E6F7420636F6E76657267650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x39A6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x39C2 SWAP2 SWAP1 PUSH2 0x4C0F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x39FF JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3A04 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x3A15 DUP8 DUP4 DUP4 DUP8 PUSH2 0x3C2C JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x2 DUP3 ADD SLOAD PUSH1 0x1 DUP4 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP1 DUP4 EQ DUP1 ISZERO SWAP1 PUSH2 0x3A41 JUMPI POP DUP2 TIMESTAMP LT JUMPDEST ISZERO PUSH2 0x3A62 JUMPI PUSH1 0x0 DUP5 PUSH1 0x3 ADD SLOAD SWAP1 POP DUP1 DUP4 SUB DUP2 TIMESTAMP SUB DUP6 MUL TIMESTAMP DUP6 SUB DUP5 MUL ADD DIV SWAP4 POP POP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP2 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3AA8 JUMPI DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3A8B JUMPI PUSH2 0x3A8B PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH2 0x3A9E SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x3A71 JUMP JUMPDEST POP DUP1 PUSH1 0x0 SUB PUSH2 0x3ABC JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x38B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 PUSH2 0x3ACA DUP6 DUP9 PUSH2 0x48E6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x3BD7 JUMPI DUP3 PUSH1 0x0 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0x3B28 JUMPI DUP8 DUP12 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3AF8 JUMPI PUSH2 0x3AF8 PUSH2 0x4820 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3B0A SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3B14 DUP7 DUP5 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3B1E SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x3ADD JUMP JUMPDEST POP DUP4 SWAP5 POP DUP1 DUP8 PUSH1 0x1 PUSH2 0x3B3A SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST PUSH2 0x3B44 SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH1 0x64 DUP6 PUSH2 0x3B51 DUP3 DUP8 PUSH2 0x4869 JUMP JUMPDEST PUSH2 0x3B5B SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3B65 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST PUSH2 0x3B6F SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST DUP5 PUSH2 0x3B7A DUP10 DUP5 PUSH2 0x48E6 JUMP JUMPDEST PUSH1 0x64 PUSH2 0x3B86 DUP11 DUP9 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3B90 SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST PUSH2 0x3B9A SWAP2 SWAP1 PUSH2 0x48BA JUMP JUMPDEST PUSH2 0x3BA4 SWAP2 SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH2 0x3BAE SWAP2 SWAP1 PUSH2 0x4892 JUMP JUMPDEST SWAP4 POP PUSH2 0x3BBA DUP5 DUP7 PUSH2 0x3C16 JUMP JUMPDEST ISZERO PUSH2 0x3BCE JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x38B JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x3ACF JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x4420646F6573206E6F7420636F6E7665726765 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH2 0x3C24 DUP5 DUP5 PUSH2 0x3CA5 JUMP JUMPDEST LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x3C9B JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x3C94 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x3C94 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1C06 JUMP JUMPDEST POP DUP2 PUSH2 0x1D27 JUMP JUMPDEST PUSH2 0x1D27 DUP4 DUP4 PUSH2 0x3CCA JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 GT ISZERO PUSH2 0x3CC0 JUMPI PUSH2 0x3CB9 DUP3 DUP5 PUSH2 0x4869 JUMP JUMPDEST SWAP1 POP PUSH2 0x38B JUMP JUMPDEST PUSH2 0x1BB3 DUP4 DUP4 PUSH2 0x4869 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x3CDA JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1C06 SWAP2 SWAP1 PUSH2 0x4C21 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x3D47 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x3D47 JUMPI DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 CALLDATALOAD AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x3D14 JUMP JUMPDEST POP PUSH2 0x3D53 SWAP3 SWAP2 POP PUSH2 0x3D57 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x3D53 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3D58 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2BBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x21E8 DUP2 PUSH2 0x3D6C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3D9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1BB3 DUP2 PUSH2 0x3D6C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2BBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x21E8 DUP2 PUSH2 0x3DA6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3DD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1BB3 DUP2 PUSH2 0x3DA6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3DF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3E3D JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x3E18 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3E5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3E75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3E8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3E97 DUP6 DUP3 DUP7 ADD PUSH2 0x3E49 JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3EB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3ECE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0xA0 DUP2 DUP6 SUB SLT ISZERO PUSH2 0x1BB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xE0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x3EFC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x3F07 DUP2 PUSH2 0x3D6C JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x3F17 DUP2 PUSH2 0x3DA6 JUMP JUMPDEST SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x3F27 DUP2 PUSH2 0x3DA6 JUMP JUMPDEST SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0x3F37 DUP2 PUSH2 0x3DA6 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD SWAP4 POP PUSH1 0xA0 DUP10 ADD CALLDATALOAD SWAP3 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x3F61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP12 ADD SWAP2 POP DUP12 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3F75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x3F84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP13 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3F96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3FC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3FCD DUP2 PUSH2 0x3D6C JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x4 DUP2 LT PUSH2 0x2BBA JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x401C DUP4 PUSH2 0x3FF1 JUMP JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4034 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x404A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D27 DUP5 DUP3 DUP6 ADD PUSH2 0x3E49 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4068 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1BB3 DUP2 PUSH2 0x3D6C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1A0 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x40AC JUMPI PUSH2 0x40AC PUSH2 0x4073 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x40DA JUMPI PUSH2 0x40DA PUSH2 0x4073 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2BBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x21E8 DUP2 PUSH2 0x40E2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x4114 JUMPI PUSH2 0x4114 PUSH2 0x4073 JUMP JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4133 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4146 PUSH2 0x4141 DUP3 PUSH2 0x40FB JUMP JUMPDEST PUSH2 0x40B2 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x415B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 CALLDATASIZE SUB SLT ISZERO PUSH2 0x418B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4193 PUSH2 0x4089 JUMP JUMPDEST PUSH2 0x419C DUP4 PUSH2 0x3D7E JUMP JUMPDEST DUP2 MSTORE PUSH2 0x41AA PUSH1 0x20 DUP5 ADD PUSH2 0x3D7E JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x41BB PUSH1 0x40 DUP5 ADD PUSH2 0x3D7E JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x41CC PUSH1 0x60 DUP5 ADD PUSH2 0x3DBB JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x41DD PUSH1 0x80 DUP5 ADD PUSH2 0x3DBB JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x41EE PUSH1 0xA0 DUP5 ADD PUSH2 0x40F0 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x420C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4218 CALLDATASIZE DUP3 DUP7 ADD PUSH2 0x4122 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 DUP4 ADD CALLDATALOAD PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x4236 DUP2 DUP6 ADD PUSH2 0x3DBB JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 DUP4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x140 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x160 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x180 SWAP3 DUP4 ADD CALLDATALOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x19E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x4284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x42A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x42C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x2A69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 DUP3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x4313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4332 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x5 SHL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x2A69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x4382 JUMPI DUP2 CALLDATALOAD PUSH2 0x4367 DUP2 PUSH2 0x3DA6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4354 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP6 ADD DUP1 DUP2 SWAP7 POP DUP6 PUSH1 0x5 SHL DUP2 ADD SWAP2 POP DUP5 PUSH1 0x0 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0x43DD JUMPI DUP3 DUP5 SUB DUP10 MSTORE PUSH2 0x43BE DUP3 DUP9 PUSH2 0x428E JUMP JUMPDEST PUSH2 0x43C9 DUP7 DUP3 DUP5 PUSH2 0x42D3 JUMP JUMPDEST SWAP11 DUP8 ADD SWAP11 SWAP6 POP POP POP SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x43A7 JUMP JUMPDEST POP SWAP2 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 MSTORE PUSH1 0x0 PUSH2 0x120 DUP7 CALLDATALOAD PUSH2 0x19E NOT DUP9 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x4408 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xA0 PUSH1 0x80 DUP6 ADD MSTORE DUP8 ADD PUSH2 0x442A DUP3 DUP6 ADD PUSH2 0x4420 DUP4 PUSH2 0x3D7E JUMP JUMPDEST PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x4436 PUSH1 0x20 DUP3 ADD PUSH2 0x3D7E JUMP JUMPDEST PUSH2 0x140 PUSH2 0x444A DUP2 DUP8 ADD DUP4 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x4456 PUSH1 0x40 DUP5 ADD PUSH2 0x3D7E JUMP JUMPDEST SWAP2 POP PUSH2 0x160 PUSH2 0x446C DUP2 DUP9 ADD DUP5 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x4478 PUSH1 0x60 DUP6 ADD PUSH2 0x3DBB JUMP JUMPDEST SWAP3 POP PUSH2 0x180 PUSH2 0x4491 DUP2 DUP10 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x449D PUSH1 0x80 DUP7 ADD PUSH2 0x3DBB JUMP JUMPDEST SWAP4 POP PUSH2 0x1A0 PUSH2 0x44B6 DUP2 DUP11 ADD DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x44C2 PUSH1 0xA0 DUP8 ADD PUSH2 0x40F0 JUMP JUMPDEST DUP1 ISZERO ISZERO PUSH2 0x1C0 DUP12 ADD MSTORE SWAP5 POP PUSH2 0x44DA PUSH1 0xC0 DUP8 ADD DUP8 PUSH2 0x428E JUMP JUMPDEST SWAP6 POP DUP2 PUSH2 0x1E0 DUP12 ADD MSTORE PUSH2 0x44F2 PUSH2 0x2C0 DUP12 ADD DUP8 DUP4 PUSH2 0x42D3 JUMP JUMPDEST SWAP6 POP POP POP PUSH1 0xE0 DUP6 ADD CALLDATALOAD PUSH2 0x200 DUP10 ADD MSTORE PUSH2 0x100 PUSH2 0x450F DUP2 DUP8 ADD PUSH2 0x3DBB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x220 DUP11 ADD MSTORE DUP6 DUP8 ADD CALLDATALOAD PUSH2 0x240 DUP11 ADD MSTORE DUP4 DUP7 ADD CALLDATALOAD PUSH2 0x260 DUP11 ADD MSTORE DUP3 DUP7 ADD CALLDATALOAD PUSH2 0x280 DUP11 ADD MSTORE DUP2 DUP7 ADD CALLDATALOAD PUSH2 0x2A0 DUP11 ADD MSTORE PUSH2 0x4553 PUSH1 0x20 DUP15 ADD DUP15 PUSH2 0x42FC JUMP JUMPDEST SWAP8 POP SWAP6 POP PUSH1 0x7F NOT SWAP4 POP DUP4 DUP10 DUP7 SUB ADD PUSH1 0xA0 DUP11 ADD MSTORE PUSH2 0x4571 DUP6 DUP9 DUP9 PUSH2 0x4344 JUMP JUMPDEST SWAP7 POP PUSH2 0x4580 PUSH1 0x40 DUP15 ADD DUP15 PUSH2 0x42FC JUMP JUMPDEST SWAP7 POP SWAP5 POP DUP4 DUP10 DUP9 SUB ADD PUSH1 0xC0 DUP11 ADD MSTORE PUSH2 0x4599 DUP8 DUP8 DUP8 PUSH2 0x438D JUMP JUMPDEST SWAP7 POP PUSH2 0x45A7 PUSH1 0x60 DUP15 ADD PUSH2 0x3DBB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0xE0 DUP12 ADD MSTORE SWAP6 POP PUSH2 0x45C5 PUSH1 0x80 DUP15 ADD DUP15 PUSH2 0x428E JUMP JUMPDEST SWAP7 POP SWAP5 POP DUP4 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE POP POP POP POP PUSH2 0x45E1 DUP4 DUP4 DUP4 PUSH2 0x42D3 JUMP JUMPDEST SWAP4 POP POP POP POP PUSH2 0x45FB PUSH1 0x20 DUP4 ADD DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1915 PUSH1 0x60 DUP4 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4631 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4619 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x4652 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x4616 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH4 0xFFFFFFFF AND DUP3 MSTORE PUSH1 0x0 PUSH2 0x1A0 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x468C PUSH1 0x20 DUP7 ADD DUP3 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x46A4 PUSH1 0x40 DUP7 ADD DUP3 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x46BF PUSH1 0x60 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x46DA PUSH1 0x80 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x46EE PUSH1 0xA0 DUP7 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD DUP2 PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x4706 DUP3 DUP7 ADD DUP3 PUSH2 0x463A JUMP JUMPDEST SWAP2 POP POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD MLOAD PUSH2 0x472E DUP3 DUP8 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP POP PUSH2 0x120 DUP4 DUP2 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x140 DUP1 DUP5 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x160 DUP1 DUP5 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x180 SWAP3 DUP4 ADD MLOAD SWAP3 SWAP1 SWAP4 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1BB3 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4666 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x478E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x47A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP PUSH1 0x5 DUP2 SWAP1 SHL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x2A69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1915 PUSH1 0x40 DUP4 ADD DUP5 DUP7 PUSH2 0x4344 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x47F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x480B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x2A69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4848 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1BB3 DUP2 PUSH2 0x40E2 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x38B JUMPI PUSH2 0x38B PUSH2 0x4853 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x48A1 JUMPI PUSH2 0x48A1 PUSH2 0x487C JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x48B5 JUMPI PUSH2 0x48B5 PUSH2 0x487C JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x38B JUMPI PUSH2 0x38B PUSH2 0x4853 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x48DF JUMPI PUSH2 0x48DF PUSH2 0x4853 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x38B JUMPI PUSH2 0x38B PUSH2 0x4853 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x490F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST DUP8 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x40 DUP4 ADD MSTORE DUP6 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH4 0xFFFFFFFF DUP5 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x496C SWAP1 DUP4 ADD DUP5 DUP7 PUSH2 0x42D3 JUMP JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1D27 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x463A JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x38B JUMPI PUSH2 0x38B PUSH2 0x4853 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x49E8 JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x49CE JUMPI PUSH2 0x49CE PUSH2 0x4853 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x49DB JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x49B2 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x49FF JUMPI POP PUSH1 0x1 PUSH2 0x38B JUMP JUMPDEST DUP2 PUSH2 0x4A0C JUMPI POP PUSH1 0x0 PUSH2 0x38B JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x4A22 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x4A2C JUMPI PUSH2 0x4A48 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x38B JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x4A3D JUMPI PUSH2 0x4A3D PUSH2 0x4853 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x38B JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x4A6B JUMPI POP DUP2 DUP2 EXP PUSH2 0x38B JUMP JUMPDEST PUSH2 0x4A75 DUP4 DUP4 PUSH2 0x49AD JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x4A89 JUMPI PUSH2 0x4A89 PUSH2 0x4853 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1BB3 PUSH1 0xFF DUP5 AND DUP4 PUSH2 0x49F0 JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP7 PUSH1 0xE0 SHL AND DUP2 MSTORE DUP5 PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x4ABE DUP5 PUSH2 0x3FF1 JUMP JUMPDEST PUSH1 0xF8 SWAP4 SWAP1 SWAP4 SHL PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x25 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x45 DUP3 ADD MSTORE PUSH1 0x65 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4AF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1BB3 DUP2 PUSH2 0x3DA6 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP5 AND DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1915 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x463A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4B34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD SWAP2 POP PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4B51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x1F DUP2 ADD DUP6 SGT PUSH2 0x4B62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x4B70 PUSH2 0x4141 DUP3 PUSH2 0x40FB JUMP JUMPDEST DUP2 DUP2 MSTORE DUP7 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x4B85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4B96 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x4616 JUMP JUMPDEST DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0xA0 DUP2 MSTORE PUSH1 0x0 PUSH2 0x4BB6 PUSH1 0xA0 DUP4 ADD DUP9 PUSH2 0x4666 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD DUP8 SWAP1 MSTORE DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x4BE6 DUP2 DUP6 PUSH2 0x463A JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4C04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1BB3 DUP2 PUSH2 0x40E2 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x4284 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x4616 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1BB3 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x463A JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE4 0x26 CALLDATACOPY 0xB2 PUSH12 0xA9D67DE61A02BDC6D0E8D841 0xFC 0xB6 0xA6 0xC6 SWAP3 SWAP12 LOG1 0xC1 SLT 0xD2 DUP16 SDIV 0xBA 0xE8 REVERT PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"1262:38611:69:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8809:126;;;;;;;;;;-1:-1:-1;8809:126:69;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;800:32:181;;;782:51;;770:2;755:18;8809:126:69;;;;;;;;9092:127;;;;;;;;;;-1:-1:-1;9092:127:69;;;;;:::i;:::-;-1:-1:-1;;;;;9182:32:69;9163:4;9182:32;;;:20;:32;;;;;;;;;9092:127;;;;1632:14:181;;1625:22;1607:41;;1595:2;1580:18;9092:127:69;1467:187:181;8528:133:69;;;;;;;;;;-1:-1:-1;8528:133:69;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16166:196::-;;;;;;:::i;:::-;;:::i;:::-;;9223:113;;;;;;;;;;-1:-1:-1;9307:23:69;;-1:-1:-1;;;;;9307:23:69;9223:113;;10461:404;;;;;;;;;;-1:-1:-1;10461:404:69;;;;;:::i;:::-;;:::i;16940:650::-;;;;;;;;;;-1:-1:-1;16940:650:69;;;;;:::i;:::-;;:::i;14681:1283::-;;;;;;;;;;-1:-1:-1;14681:1283:69;;;;;:::i;:::-;;:::i;:::-;;;3656:25:181;;;3644:2;3629:18;14681:1283:69;3510:177:181;10016:267:69;;;;;;;;;;-1:-1:-1;10016:267:69;;;;;:::i;:::-;;:::i;9522:350::-;;;;;;;;;;-1:-1:-1;9522:350:69;;;;;:::i;:::-;;:::i;11634:1129::-;;;;;;:::i;:::-;;:::i;12767:1131::-;;;;;;:::i;:::-;;:::i;9016:72::-;;;;;;;;;;-1:-1:-1;9076:7:69;;9016:72;;11087:484;;;;;;;;;;-1:-1:-1;11087:484:69;;;;;:::i;:::-;;:::i;8665:140::-;;;;;;;;;;-1:-1:-1;8665:140:69;;;;;:::i;:::-;8731:25;8771:29;;;:16;:29;;;;;;;;;8665:140;;;;;;;;:::i;8939:73::-;;;;;;;;;;-1:-1:-1;8999:8:69;;8939:73;;8999:8;;;;6366:42:181;;6354:2;6339:18;8939:73:69;6222:192:181;17902:471:69;;;;;;;;;;-1:-1:-1;17902:471:69;;;;;:::i;:::-;;:::i;8809:126::-;8911:18;;;8862:7;8911:18;;;:9;:18;;;;;;8884:46;8877:53;8809:126;-1:-1:-1;;8809:126:69:o;8528:133::-;8626:1;:30;;;:17;:30;;;;;;;;;8619:37;;;;;;;;;;;;;;;;;8595:16;;8619:37;;;8626:30;8619:37;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8619:37:69;;;;;;;;;;;;;;;;;;;;;;;8528:133;;;:::o;16166:196::-;1556:9:68;;-1:-1:-1;;1556:30:68;1552:89;;1595:46;;-1:-1:-1;;;1595:46:68;;;;;;;;;;;1552:89;808:1:104;1708:9:68;:29;3834:9:::1;::::0;-1:-1:-1;;;3834:9:68;::::1;;;3830:62;;;3852:40;;-1:-1:-1::0;;;3852:40:68::1;;;;;;;;;;;3830:62;16263:9:69::2;16276:1;16263:14:::0;16259:66:::2;;16286:39;;-1:-1:-1::0;;;16286:39:69::2;;;;;;;;;;;16259:66;16331:26;16345:11;16331:13;:26::i;:::-;-1:-1:-1::0;709:1:104;1876:9:68;:33;16166:196:69:o;10461:404::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;10663:8:69::1;::::0;;10638:21:::1;::::0;;-1:-1:-1;;;10638:21:69;;;;10605:22;;10663:8:::1;::::0;;::::1;::::0;-1:-1:-1;;;;;10638:19:69;::::1;::::0;::::1;::::0;:21;;::::1;::::0;::::1;::::0;;;;;;:19;:21:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;;10634:117;;10688:56;;-1:-1:-1::0;;;10688:56:69::1;;;;;;;;;;;10634:117;10761:60;::::0;;-1:-1:-1;;;;;7275:15:181;;7257:34;;10810:10:69::1;7322:2:181::0;7307:18;;7300:43;10761:60:69::1;::::0;7192:18:181;10761:60:69::1;;;;;;;10827:23;:33:::0;;-1:-1:-1;;;;;;10827:33:69::1;-1:-1:-1::0;;;;;10827:33:69;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;10461:404:69:o;16940:650::-;17041:7;8414:10;8394:16;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8394:30:69;;8390:82;;8433:39;;-1:-1:-1;;;8433:39:69;;;;;;;;;;;8390:82;1023:6:104::1;17089:9:69;:41;17085:119;;;17147:50;;-1:-1:-1::0;;;17147:50:69::1;;;;;;;;;;;17085:119;17294:8;::::0;::::1;;17265:25;::::0;;;::::1;::::0;::::1;;:::i;:::-;:37;;;17261:114;;17319:49;;-1:-1:-1::0;;;17319:49:69::1;;;;;;;;;;;17261:114;17403:18;17424:29;;17445:7:::0;17424:29:::1;:::i;:::-;:20;:29::i;:::-;17483:1;:22:::0;;;:10:::1;:22;::::0;;;;;;:34;;;17547:38;17403:50;;-1:-1:-1;17403:50:69;;17547:38:::1;::::0;::::1;::::0;17508:9;3656:25:181;;3644:2;3629:18;;3510:177;17547:38:69::1;;;;;;;;17050:540;16940:650:::0;;;:::o;14681:1283::-;1556:9:68;;14771:7:69;;-1:-1:-1;;1556:30:68;1552:89;;1595:46;;-1:-1:-1;;;1595:46:68;;;;;;;;;;;1552:89;808:1:104;1708:9:68;:29;3834:9:::1;::::0;-1:-1:-1;;;3834:9:68;::::1;;;3830:62;;;3852:40;;-1:-1:-1::0;;;3852:40:68::1;;;;;;;;;;;3830:62;14787:18:69::2;14807:32:::0;14843:27:::2;14864:5;14843:20;:27::i;:::-;14786:84:::0;;-1:-1:-1;14786:84:69;-1:-1:-1;14877:33:69::2;14923:36;14913:6;:46;;;;;;;;:::i;:::-;;:133;;15012:34;14913:133;;;14968:35;14913:133;15053:1;:28:::0;;;:16:::2;:28;::::0;;;;:38;;14877:169;;-1:-1:-1;14877:169:69;;-1:-1:-1;;15053:38:69::2;::::0;14877:169;15053:38:::2;::::0;::::2;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;15332:17:69::2;::::0;;15383:211:::2;15414:10:::0;15432:89:::2;15466:12;:5:::0;;:12:::2;:::i;:::-;:24;;;15492:12;:5:::0;;:12:::2;:::i;:::-;:28;::::0;;;;;::::2;;;:::i;:::-;15432:33;:89::i;:::-;15540:35;15529:7;:46;;;;;;;;:::i;:::-;;;15583:5;15383:23;:211::i;:::-;15331:263:::0;;-1:-1:-1;15331:263:69;-1:-1:-1;15331:263:69;-1:-1:-1;15663:14:69::2;15680:146;15713:5:::0;15331:263;;15756:10;15785:35:::2;15774:7;:46;;;;;;;;:::i;:::-;;15680:25;:146::i;:::-;15663:163:::0;-1:-1:-1;;;;;;15857:78:69;::::2;15878:12;:5:::0;;:12:::2;:::i;:::-;:15;::::0;;;;;::::2;;;:::i;:::-;-1:-1:-1::0;;;;;15857:78:69::2;15866:10;15857:78;15902:5;15909;15916:6;15924:10;15857:78;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;709:1:104;1876:9:68;:33;-1:-1:-1;15949:10:69;;14681:1283;-1:-1:-1;;;;;14681:1283:69:o;10016:267::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;-1:-1:-1;;;;;10098:32:69;::::1;:1;:32:::0;;;:20:::1;:32;::::0;;;;;::::1;;10093:88;;10139:42;;-1:-1:-1::0;;;10139:42:69::1;;;;;;;;;;;10093:88;-1:-1:-1::0;;;;;10194:32:69;::::1;:1;:32:::0;;;:20:::1;:32;::::0;;;;;;;;10187:39;;-1:-1:-1;;10187:39:69::1;::::0;;10238:40;;7257:34:181;;;10267:10:69::1;7307:18:181::0;;;7300:43;10238:40:69::1;::::0;7192:18:181;10238:40:69::1;;;;;;;;10016:267:::0;:::o;9522:350::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;-1:-1:-1;;;;;9600:24:69;::::1;9596:81;;9633:44;;-1:-1:-1::0;;;9633:44:69::1;;;;;;;;;;;9596:81;-1:-1:-1::0;;;;;9688:32:69;::::1;:1;:32:::0;;;:20:::1;:32;::::0;;;;;::::1;;9684:88;;;9729:43;;-1:-1:-1::0;;;9729:43:69::1;;;;;;;;;;;9684:88;-1:-1:-1::0;;;;;9778:32:69;::::1;:1;:32:::0;;;:20:::1;:32;::::0;;;;;;;;:39;;-1:-1:-1;;9778:39:69::1;9813:4;9778:39;::::0;;9829:38;;7257:34:181;;;9856:10:69::1;7307:18:181::0;;;7300:43;9829:38:69::1;::::0;7192:18:181;9829:38:69::1;7045:304:181::0;11634:1129:69;2024:14:68;;11856:7:69;;-1:-1:-1;;2024:35:68;2020:99;;2068:51;;-1:-1:-1;;;2068:51:68;;;;;;;;;;;2020:99;808:1:104;2186:14:68;:34;12133:581:69::1;::::0;;::::1;::::0;::::1;::::0;;12210:8:::1;::::0;::::1;::::0;;::::1;12133:581:::0;;;::::1;;::::0;;::::1;::::0;;;;2186:1:68;12133:581:69;;;;;;-1:-1:-1;;;;;12133:581:69;;::::1;::::0;;;;;::::1;::::0;;;;;;;;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;2186:1:68;12133:581:69;;;;12179:9;;;;;;12133:581;::::1;12179:9:::0;;;;12133:581;::::1;;::::0;::::1;::::0;;;-1:-1:-1;12133:581:69;;;-1:-1:-1;;;12133:581:69::1;::::0;::::1;::::0;;;12520:10:::1;12133:581:::0;;;;;;;;;;;;;;;;;;;;;;;;;;;12104:610;-1:-1:-1;12727:31:69::1;12104:610:::0;12742:6;12750:7;12727:6:::1;:31::i;:::-;709:1:104::0;2359:14:68;:38;12720::69;11634:1129;-1:-1:-1;;;;;;;;;;11634:1129:69:o;12767:1131::-;2024:14:68;;12998:7:69;;-1:-1:-1;;2024:35:68;2020:99;;2068:51;;-1:-1:-1;;;2068:51:68;;;;;;;;;;;2020:99;808:1:104;2186:14:68;:34;13275:574:69::1;::::0;;::::1;::::0;::::1;::::0;;13352:8:::1;::::0;::::1;::::0;;::::1;13275:574:::0;;;::::1;;::::0;;::::1;::::0;;;;2186:1:68;13275:574:69;;;;;;-1:-1:-1;;;;;13275:574:69;;::::1;::::0;;;;;::::1;::::0;;;;13352:8;13275:574;;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;2186:1:68;13275:574:69;;;;13321:9;;;;;;13275:574;::::1;13321:9:::0;;;;13275:574;::::1;;::::0;::::1;::::0;;;-1:-1:-1;13275:574:69;;;-1:-1:-1;;;13275:574:69::1;::::0;::::1;::::0;;;13655:10:::1;13275:574:::0;;;;;;;;;;;;;;;;;;;;;;;;;;;13246:603;-1:-1:-1;13862:31:69::1;13246:603:::0;13877:6;13885:7;13862:6:::1;:31::i;11087:484::-:0;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;11184:7:69;11180:73:::1;;11215:38;;-1:-1:-1::0;;;11215:38:69::1;;;;;;;;;;;11180:73;11355:12;::::0;::::1;::::0;;:35:::1;;-1:-1:-1::0;11382:8:69::1;::::0;::::1;11371:19:::0;;::::1;11382:8:::0;::::1;11371:19;11355:35;11351:101;;;11407:38;;-1:-1:-1::0;;;11407:38:69::1;;;;;;;;;;;11351:101;11458:18;::::0;::::1;:1;:18:::0;;;:9:::1;:18;::::0;;;;;;;;:28;;;11497:69;;16638:42:181;;;-1:-1:-1;;;;;16754:15:181;;16734:18;;;16727:43;11555:10:69::1;16786:18:181::0;;;16779:43;11497:69:69;::::1;::::0;;;;16626:2:181;11497:69:69;;::::1;11087:484:::0;;:::o;17902:471::-;17982:7;8414:10;8394:16;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8394:30:69;;8390:82;;8433:39;;-1:-1:-1;;;8433:39:69;;;;;;;;;;;8390:82;18081:8:::1;::::0;::::1;;18052:25;::::0;;;::::1;::::0;::::1;;:::i;:::-;:37;;;18048:112;;18106:47;;-1:-1:-1::0;;;18106:47:69::1;;;;;;;;;;;18048:112;18188:18;18209:29;;18230:7:::0;18209:29:::1;:::i;:::-;18268:1;:34:::0;;;:22:::1;:34;::::0;;;;;:41;;-1:-1:-1;;18268:41:69::1;18305:4;18268:41;::::0;;18339:29;18188:50;;-1:-1:-1;18188:50:69;;18339:29:::1;::::0;18268:1;18339:29:::1;17991:382;17902:471:::0;;:::o;16366:324::-;16448:17;;-1:-1:-1;;;;;16448:17:69;;16471:81;;16510:42;;-1:-1:-1;;;16510:42:69;;;;;;;;;;;16471:81;16558:51;16584:12;16599:9;16558:17;:51::i;:::-;16621:64;;;16663:9;17007:25:181;;16674:10:69;17063:2:181;17048:18;;17041:60;16650:11:69;;16621:64;;16980:18:181;16621:64:69;;;;;;;16419:271;16366:324;:::o;2273:130:106:-;2368:30;;-1:-1:-1;;;;;2368:30:106;;2273:130::o;4956:139:68:-;5038:7;5081;5070:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;5060:30;;;;;;5053:37;;4956:139;;;:::o;24515:4204:69:-;24714:10;24595:7;24695:30;;;:18;:30;;;;;;24595:7;;24695:30;;24694:31;:70;;;;-1:-1:-1;24743:12:69;:5;;:12;:::i;:::-;:21;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24729:35:69;:10;-1:-1:-1;;;;;24729:35:69;;;24694:70;24690:137;;;24781:39;;-1:-1:-1;;;24781:39:69;;;;;;;;;;;24690:137;24923:8;;;;24889:12;:5;;:12;:::i;:::-;:30;;;;;;;;;:::i;:::-;:42;;;24885:104;;24948:34;;-1:-1:-1;;;24948:34:69;;;;;;;;;;;24885:104;25169:18;25190:13;;;;:5;:13;:::i;:::-;:20;-1:-1:-1;25269:18:69;;-1:-1:-1;25290:34:69;25311:12;:5;;:12;:::i;:::-;25290:34;;;:::i;:::-;25370:32;25405:28;;;:16;:28;;;;;;25269:55;;-1:-1:-1;25405:28:69;;25444:15;;25440:3241;;25556:23;;25543:36;;25539:90;;;25588:41;;-1:-1:-1;;;25588:41:69;;;;;;;;;;;25539:90;25862:30;25852:6;:40;;;;;;;;:::i;:::-;;25848:98;;25901:45;;-1:-1:-1;;;25901:45:69;;;;;;;;;;;25848:98;26269:20;:1;26290:15;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26269:37:69;;;;;;;;;;;;-1:-1:-1;26269:37:69;;;;26264:114;;26325:44;;-1:-1:-1;;;26325:44:69;;;;;;;;;;;26264:114;26941:93;26980:10;26992:13;;;;:5;:13;:::i;:::-;26969:37;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;26969:37:69;;;;;;;;;26959:48;;26969:37;26959:48;;;;27009:24;;;;:5;:24;:::i;:::-;26941:17;:93::i;:::-;-1:-1:-1;;;;;26922:112:69;:15;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26922:112:69;;26909:208;;27060:48;;-1:-1:-1;;;27060:48:69;;;;;;;;;;;26909:208;27476:34;;;;;;;20911:25:181;;;20952:18;;;20945:34;;;27476::69;;;;;;;;;20884:18:181;;;;27476:34:69;;;27466:45;;;;;-1:-1:-1;27520:866:69;27540:10;27536:1;:14;27520:866;;;27803:27;:25;:27::i;:::-;27802:28;:75;;;;-1:-1:-1;27835:15:69;:1;27851:13;;;;:5;:13;:::i;:::-;27865:1;27851:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27835:33:69;;;;;;;;;;;;-1:-1:-1;27835:33:69;:42;;;27834:43;27802:75;27798:152;;;27898:41;;-1:-1:-1;;;27898:41:69;;;;;;;;;;;27798:152;28199:56;28217:10;28229:22;;;;:5;:22;:::i;:::-;28252:1;28229:25;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;28199:56::-;-1:-1:-1;;;;;28179:76:69;:13;;;;:5;:13;:::i;:::-;28193:1;28179:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28179:76:69;;28175:157;;28276:45;;-1:-1:-1;;;28276:45:69;;;;;;;;;;;28175:157;28364:3;;27520:866;;;;25461:2931;25440:3241;;;28593:36;28583:6;:46;;;;;;;;:::i;:::-;;28579:95;;28638:36;;-1:-1:-1;;;28638:36:69;;;;;;;;;;;28579:95;28695:10;;28707:6;;-1:-1:-1;24515:4204:69;-1:-1:-1;;;24515:4204:69:o;19324:146:102:-;19408:7;19451:3;19456:7;19440:24;;;;;;;;21855:25:181;;;21928:10;21916:23;21911:2;21896:18;;21889:51;21843:2;21828:18;;21683:263;19440:24:102;;;;;;;;;;;;;19430:35;;;;;;19423:42;;19324:146;;;;:::o;29320:4511:69:-;29482:7;;;29647:13;;;;:5;:13;:::i;:::-;29614:1;:30;;;:17;:30;;;;;:46;;:30;;:46;:::i;:::-;-1:-1:-1;29728:13:69;29751:12;:5;;:12;:::i;:::-;:28;;;;;;;;;:::i;:::-;:33;;;29747:138;;29802:76;29817:4;29823:12;:5;;:12;:::i;:::-;:24;;;29849:12;:5;;:12;:::i;:::-;:28;;;;;;;;;:::i;:::-;29802:14;:76::i;:::-;29794:84;;29747:138;29967:12;:5;;:12;:::i;:::-;:23;;;29994:1;29967:28;29963:73;;30013:1;;-1:-1:-1;30016:5:69;-1:-1:-1;30016:5:69;;-1:-1:-1;30005:24:69;;29963:73;30078:17;30098:12;:5;;:12;:::i;:::-;:25;;;;;;;;;:::i;:::-;:64;;;-1:-1:-1;30127:1:69;:35;;;:22;:35;;;;;;;;30098:64;30078:84;-1:-1:-1;30169:14:69;30186:12;:5;;:12;:::i;:::-;:23;;;30169:40;;30643:7;30639:2021;;;30660:15;30678:13;;;;:5;:13;:::i;:::-;:20;-1:-1:-1;30806:90:69;;-1:-1:-1;30814:12:69;:5;;:12;:::i;:::-;:23;;;30839:1;:25;;;1023:6:104;30806:7:69;:90::i;:::-;30797:99;;30909:7;30920:1;30909:12;30905:1749;;31219:12;31218:13;:67;;;;-1:-1:-1;31279:6:69;31235:16;:1;31252:13;;;;:5;:13;:::i;:::-;31266:1;31252:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31235:34:69;;;;;;;;;;;;;;;;;-1:-1:-1;31235:34:69;;;:41;;;;;;;;;;:50;31218:67;:95;;;;-1:-1:-1;31289:10:69;;-1:-1:-1;;;;;31289:10:69;:24;;31218:95;31214:717;;;31332:15;:1;31348:13;;;;:5;:13;:::i;:::-;31362:1;31348:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31332:33:69;;;;;;;;;;;;-1:-1:-1;31332:33:69;:48;;;;;;31327:106;;31389:44;;-1:-1:-1;;;31389:44:69;;;;;;;;;;;31327:106;31548:29;;31603:127;31639:11;31664:4;31682:6;31702:13;;;;:5;:13;:::i;:::-;31716:1;31702:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;31603:22;:127::i;:::-;31547:183;;-1:-1:-1;31547:183:69;-1:-1:-1;31787:5:69;;-1:-1:-1;31742:51:69;;-1:-1:-1;;;;;31742:51:69;31214:717;31914:6;31869:16;:1;31886:13;;;;:5;:13;:::i;:::-;31900:1;31886:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31869:34:69;-1:-1:-1;;;;;31869:34:69;;;;;;;;;;;;:41;31904:5;-1:-1:-1;;;;;31869:41:69;-1:-1:-1;;;;;31869:41:69;;;;;;;;;;;;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;30905:1749:69;;-1:-1:-1;30905:1749:69;;32031:20;32054:16;32063:7;32054:6;:16;:::i;:::-;32031:39;;32085:9;32080:325;32100:11;32110:1;32100:7;:11;:::i;:::-;32096:1;:15;32080:325;;;32330:12;32285:16;:1;32302:13;;;;:5;:13;:::i;:::-;32316:1;32302:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32285:34:69;-1:-1:-1;;;;;32285:34:69;;;;;;;;;;;;:41;32320:5;-1:-1:-1;;;;;32285:41:69;-1:-1:-1;;;;;32285:41:69;;;;;;;;;;;;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;32379:3:69;;32080:325;;;-1:-1:-1;32522:15:69;32556:16;32565:7;32556:6;:16;:::i;:::-;32540:33;;:12;:33;:::i;:::-;32522:51;-1:-1:-1;32522:51:69;32583:16;:1;32600:13;;;;:5;:13;:::i;:::-;32614:11;32624:1;32614:7;:11;:::i;:::-;32600:26;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32583:44:69;-1:-1:-1;;;;;32583:44:69;;;;;;;;;;;;:51;32628:5;-1:-1:-1;;;;;32583:51:69;-1:-1:-1;;;;;32583:51:69;;;;;;;;;;;;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;30905:1749:69;30652:2008;30639:2021;32745:12;:5;;:12;:::i;:::-;:28;;;;;;;;;:::i;:::-;32733:8;;:40;:8;;;:40;;;:78;;;;;32810:1;32777:26;32798:4;32777:20;:26::i;:::-;:30;;;:34;32733:78;32729:314;;;32996:1;:20;;;:14;:20;;;;;:30;;:40;;33030:6;;32996:1;:40;;33030:6;;32996:40;:::i;:::-;;;;-1:-1:-1;;32729:314:69;33232:12;33228:138;;;33286:1;:35;;;:22;:35;;;;;33279:42;;-1:-1:-1;;33279:42:69;;;33338:6;-1:-1:-1;33346:5:69;;-1:-1:-1;33346:5:69;;-1:-1:-1;33330:29:69;;-1:-1:-1;33330:29:69;33228:138;33444:24;33471:23;;;:10;:23;;;;;;;33529:30;;;;33471:23;33444:24;33602:187;33647:4;33659:5;33672:6;33686:21;;;:64;;33729:12;:5;;:12;:::i;:::-;:21;;;33686:64;;;33710:16;33686:64;33758:12;:5;;:12;:::i;:::-;:25;;;33602:37;:187::i;:::-;33566:223;;-1:-1:-1;33566:223:69;-1:-1:-1;33820:5:69;;-1:-1:-1;;;;;;29320:4511:69;;;;;;;;;:::o;33975:471::-;34189:7;34239:67;34270:6;34278:12;:5;;:12;:::i;:::-;:15;;;;;;;;;:::i;:::-;34295:10;34239:30;:67::i;:::-;34341:76;34358:11;34371:10;34383:6;34391:11;34404:12;:5;;:12;:::i;:::-;34341:16;:76::i;:::-;-1:-1:-1;34431:10:69;33975:471;;;;;;;;:::o;19298:4571::-;3834:9:68;;19424:7:69;;-1:-1:-1;;;3834:9:68;;;;3830:62;;;3852:40;;-1:-1:-1;;;3852:40:68;;;;;;;;;;;3830:62;19461:22:69::1;-1:-1:-1::0;;;;;19769:20:69;::::1;::::0;:36;::::1;;;-1:-1:-1::0;19793:12:69;;::::1;19769:36;19765:112;;;19824:44;;-1:-1:-1::0;;;19824:44:69::1;;;;;;;;;;;19765:112;20123:42;20139:7;:25;;;20123:15;:42::i;:::-;20206:10;::::0;::::1;::::0;20106:59;;-1:-1:-1;;;;;;20206:24:69::1;20202:84;;20249:28;;-1:-1:-1::0;;;20249:28:69::1;;;;;;;;;;;20202:84;1023:6:104;20298:7:69;:16;;;:48;20294:116;;;20365:36;;-1:-1:-1::0;;;20365:36:69::1;;;;;;;;;;;20294:116;-1:-1:-1::0;;;;;;;;;20597:13:69::1;-1:-1:-1::0;;;;;;;;;20597:13:69;;;20670:16:::1;-1:-1:-1::0;;;;;21097:20:69;::::1;::::0;21093:2211:::1;;21182:11;21222:31;21246:6;21222:23;:31::i;:::-;21203:50:::0;;-1:-1:-1;21203:50:69;-1:-1:-1;21297:26:69::1;21326:25;21203:50:::0;21326:20:::1;:25::i;:::-;21428:16:::0;;21404:20;;:40:::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21297:54:69;-1:-1:-1;21404:40:69;21496:78:::1;;21553:21:::0;;-1:-1:-1;;;;;21553:21:69::1;21496:78;;;21537:12;::::0;::::1;::::0;21510:40:::1;21488:86:::0;-1:-1:-1;;;;;;21588:19:69;::::1;21584:91;;21628:36;;-1:-1:-1::0;;;21628:36:69::1;;;;;;;;;;;21584:91;21880:10;::::0;::::1;::::0;21906:11;:22;::::1;;;;21927:1;21921:3;:7;21906:22;21902:408;;;22066:26;22114:7;22095:6;:16;;;:26;;;;:::i;:::-;22066:55;;22160:3;22139:18;:24;22135:99;;;22188:31;;-1:-1:-1::0;;;22188:31:69::1;;;;;;;;;;;22135:99;22247:1;:19:::0;;;:14:::1;:19;::::0;;;;:29:::1;;:50:::0;21902:408:::1;-1:-1:-1::0;22431:16:69;;22405:42:::1;;:23;::::0;::::1;:42:::0;22479:12:::1;::::0;::::1;::::0;22457:19:::1;::::0;::::1;:34:::0;22506:11;;22502:794:::1;;22605:47;22636:6;22644:7;22605:30;:47::i;:::-;22751:82;22787:3;22792:6;22800:5;22807:7;22816;:16;;;22751:35;:82::i;:::-;22730:18;::::0;::::1;:103:::0;23087:198:::1;-1:-1:-1::0;;;;;23129:15:69;;::::1;::::0;;::::1;;:72;;23179:22;::::0;::::1;::::0;-1:-1:-1;;;23179:22:69;::::1;;;23129:72;;;23147:29:::0;;-1:-1:-1;;;23147:29:69;::::1;;;23129:72;1907:2:104;23266:7:69;23087:28;:198::i;:::-;23064:20;::::0;::::1;:221:::0;22502:794:::1;21119:2185;;21093:2211;23364:7;:9:::0;;;:1:::1;:9;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;23348:13:69::1;::::0;::::1;:25:::0;23394:29:::1;23348:7:::0;23394:20:::1;:29::i;:::-;23381:42:::0;-1:-1:-1;23639:9:69::1;:13:::0;23635:59:::1;;23662:25;23676:10;23662:13;:25::i;:::-;23736:104;23756:10;23768:7;23777:6;23785:7;23794:14;23810:9;23821:5;23828:11;23736:19;:104::i;:::-;-1:-1:-1::0;23854:10:69;;-1:-1:-1;;;;3898:1:68::1;19298:4571:69::0;;;;;:::o;2412:312:57:-;2526:6;2501:21;:31;;2493:73;;;;-1:-1:-1;;;2493:73:57;;23308:2:181;2493:73:57;;;23290:21:181;23347:2;23327:18;;;23320:30;23386:31;23366:18;;;23359:59;23435:18;;2493:73:57;;;;;;;;;2578:12;2596:9;-1:-1:-1;;;;;2596:14:57;2618:6;2596:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:52;;;2647:7;2639:78;;;;-1:-1:-1;;;2639:78:57;;23876:2:181;2639:78:57;;;23858:21:181;23915:2;23895:18;;;23888:30;23954:34;23934:18;;;23927:62;24025:28;24005:18;;;23998:56;24071:19;;2639:78:57;23674:422:181;2639:78:57;2483:241;2412:312;;:::o;24135:188:69:-;24223:7;24260:58;24274:37;24303:7;24274:28;:37::i;:::-;24313:4;;24260:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24260:13:69;;-1:-1:-1;;;24260:58:69:i;:::-;24253:65;24135:188;-1:-1:-1;;;;24135:188:69:o;4034:153:68:-;4094:4;;4113:26;:24;:26::i;:::-;-1:-1:-1;;;;;4113:40:68;;:69;;;-1:-1:-1;4157:25:68;;;;4113:69;4106:76;;4034:153;:::o;5603:180::-;5709:7;5731:47;5756:4;5762:3;5767:7;5776:1;5731:24;:47::i;28887:178:69:-;29001:7;29048:12;29024:20;29034:10;29024:7;:20;:::i;:::-;29023:37;;;;:::i;36223:1095::-;36374:7;36383;36454:15;36472:22;36489:4;36472:16;:22::i;:::-;36511:10;;36501:109;;-1:-1:-1;;;36501:109:69;;-1:-1:-1;;;;;24559:15:181;;;36501:109:69;;;24541:34:181;24591:18;;;24584:34;;;36574:4:69;24634:18:181;;;24627:43;36511:1:69;24686:18:181;;;24679:47;36454:40:69;;-1:-1:-1;36511:10:69;;;36501:34;;24475:19:181;;36501:109:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36775:10:69;;36765:75;;-1:-1:-1;;;36765:75:69;;-1:-1:-1;;;;;24995:15:181;;;36765:75:69;;;24977:34:181;25027:18;;;25020:34;;;36834:4:69;25070:18:181;;;25063:43;36739:23:69;;-1:-1:-1;36775:10:69;;;;-1:-1:-1;36765:30:69;;24912:18:181;;36765:75:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36739:101;;36869:19;36851:15;:37;36847:114;;;36897:64;;-1:-1:-1;;;36897:64:69;;;;;;;;;;;36847:114;36996:1;:25;;;:12;:25;;;;;:47;;;37104:24;;1023:6:104;;37104:46:69;;37024:19;;37104:46;:::i;:::-;37103:80;;;;:::i;:::-;37072:1;:28;;;:15;:28;;;;;;;;;:111;;;;37195:74;;-1:-1:-1;;;;;25498:32:181;;;25480:51;;25547:18;;;25540:34;;;37195:74:69;;;;37072:28;;37195:74;;25453:18:181;37195:74:69;;;;;;;-1:-1:-1;37284:19:69;;-1:-1:-1;37305:7:69;-1:-1:-1;36223:1095:69;;;;;;;;:::o;1192:571:102:-;1248:19;1367:20;;;:14;:20;;;;;1677:1;1652:22;;;;1248:19;;1367:20;-1:-1:-1;;;1652:22:102;;;;;:26;1648:91;;;1695:37;;-1:-1:-1;;;1695:37:102;;;;;;;;;;;6397:1102;6564:7;6573;6617:26;6646:15;6656:4;6646:9;:15::i;:::-;6685:14;;;;6617:44;;-1:-1:-1;;;;;;6685:14:102;;;;6775:17;;;;6771:63;;6810:7;;-1:-1:-1;6819:7:102;-1:-1:-1;6802:25:102;;-1:-1:-1;6802:25:102;6771:63;6890:7;6901:1;6890:12;6886:58;;6920:7;;-1:-1:-1;6929:7:102;-1:-1:-1;6912:25:102;;-1:-1:-1;6912:25:102;6886:58;7011:483;7031:4;7045:6;7061:7;7078;7322:164;1907:2:104;7408:6:102;:22;;;;;;;;;;;;7442:13;7467:9;7322:25;:164::i;:::-;7011:10;:483::i;:::-;6998:496;;;;;;6397:1102;;;;;;;;;:::o;3194:444::-;3353:7;3364:1;3353:12;3349:39;;3194:444;;;:::o;3349:39::-;-1:-1:-1;;;;;3445:20:102;;3441:76;;3474:43;;-1:-1:-1;;;3474:43:102;;;;;;;;;;;3441:76;3573:60;3611:6;3620:3;3625:7;3573:22;:60::i;35025:1125:69:-;907:13:104;35235:16:69;;;;:7;:16;:::i;:::-;35225:27;;;;;;;:::i;:::-;;;;;;;;:51;35221:119;35327:7;35221:119;35347:12;;35388:523;35435:10;;;;;;;;:::i;:::-;1352:6:104;35453:9:69;:50;;;;:::i;:::-;35511:1;2050:3:104;-1:-1:-1;;;35699:11:69;35720:7;35737:6;35753:11;:47;;35798:1;35753:47;;;35767:20;;;;;;;;:::i;:::-;35851;;;;:7;:20;:::i;:::-;35881:16;;;;:7;:16;:::i;:::-;35629:276;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;35629:276:69;;;;;;;;;;;;;;-1:-1:-1;;;;;35629:276:69;-1:-1:-1;;;;;;35629:276:69;;;;;;;;;;35388:39;:523::i;:::-;35346:565;;;;35923:11;35922:12;:24;;;;;35939:7;35938:8;35922:24;35918:158;;;36028:41;;-1:-1:-1;;;36028:41:69;;;;;;;;;;;35918:158;36112:11;36087:58;36125:7;36134:10;36087:58;;;;;;;:::i;:::-;;;;;;;;35187:963;;35025:1125;;;;;;:::o;39644:227::-;39741:18;;;39708:15;39741:18;;;:9;:18;;;;;;;39765:102;;39807:53;;-1:-1:-1;;;39807:53:69;;;;;;;;;;;39765:102;39644:227;;;:::o;6360:417:68:-;-1:-1:-1;;;;;;;;;;;;;;;;;6452:7:68;6467:25;6495:32;6516:10;6495:20;:32::i;:::-;6467:60;;6533:12;6548:67;6582:10;:13;;;6597:10;:17;;;6548:33;:67::i;:::-;6533:82;;6626:26;6647:4;6626:20;:26::i;:::-;:35;;;-1:-1:-1;;;6626:35:68;;;;6621:121;;6678:57;;-1:-1:-1;;;6678:57:68;;;;;;;;;;;6621:121;6755:10;;6767:4;;-1:-1:-1;6360:417:68;-1:-1:-1;;6360:417:68:o;2052:843:102:-;2182:7;2193:1;2182:12;2178:39;;2052:843;;:::o;2178:39::-;-1:-1:-1;;;;;2274:20:102;;2270:105;;2311:57;;-1:-1:-1;;;2311:57:102;;;;;;;;;;;2270:105;2525:30;;-1:-1:-1;;;2525:30:102;;2549:4;2525:30;;;782:51:181;2419:6:102;;2381:20;;-1:-1:-1;;;;;2525:15:102;;;;;755:18:181;;2525:30:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2506:49;-1:-1:-1;2597:58:102;-1:-1:-1;;;;;2597:22:102;;2620:10;2640:4;2647:7;2597:22;:58::i;:::-;2756:30;;-1:-1:-1;;;2756:30:102;;2780:4;2756:30;;;782:51:181;2801:7:102;;2789:8;;-1:-1:-1;;;;;2756:15:102;;;;;755:18:181;;2756:30:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;;;:::i;:::-;:52;2752:139;;2825:59;;-1:-1:-1;;;2825:59:102;;;;;;;;;;;2752:139;2123:772;;2052:843;;:::o;4942:757::-;5100:7;5165;5176:1;5165:12;5161:41;;-1:-1:-1;5194:1:102;5187:8;;5161:41;5314:6;-1:-1:-1;;;;;5304:16:102;:6;-1:-1:-1;;;;;5304:16:102;;5300:51;;-1:-1:-1;5337:7:102;5330:14;;5300:51;5381:26;5410:15;5420:4;5410:9;:15::i;:::-;5381:44;;5482:11;5499:179;5517:4;5529:6;5543;5557:7;5572:100;5598:6;:22;;;;;;;;;;;;5622:6;:29;;;;;;;;;;;;5653:7;5662:9;5572:25;:100::i;5499:179::-;-1:-1:-1;5481:197:102;4942:757;-1:-1:-1;;;;;;;;4942:757:102:o;20733:412::-;20839:7;20865:4;20858:11;;:3;:11;;;20854:46;;-1:-1:-1;20886:7:102;20879:14;;20854:46;20960:18;20994:4;20988:10;;:3;:10;;;20984:134;;;21037:10;21044:3;21037:4;:10;:::i;:::-;21032:16;;:2;:16;:::i;:::-;21021:28;;:7;:28;:::i;:::-;21008:41;;20984:134;;;21099:10;21105:4;21099:3;:10;:::i;:::-;21094:16;;:2;:16;:::i;:::-;21083:28;;:7;:28;:::i;37901:1486:69:-;38234:18;;;;38262:14;;38258:540;;38291:12;38286:192;;38417:52;;-1:-1:-1;;;38417:52:69;;38451:4;38417:52;;;25480:51:181;25547:18;;;25540:34;;;-1:-1:-1;;;;;38417:25:69;;;;;25453:18:181;;38417:52:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38286:192;38804:25;38856:10;:17;;;38881:10;:13;;;38902:28;38938:10;38956:11;38832:141;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;38832:141:69;;;;;;;;;;39139:23;;-1:-1:-1;;;39139:30:69;;;;38832:141;;-1:-1:-1;39082:19:69;;;;-1:-1:-1;;;;;39139:23:69;;:28;;:30;;;;;38832:141;;39139:30;;;;;;:23;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39131:48:69;;39187:7;:25;;;39220:11;39239:12;39131:126;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39131:126:69;;;;;;;;;;;;:::i;:::-;39081:176;;;;39323:11;39308:7;:13;;;39295:11;39287:95;39336:7;39345:6;39353:7;39362:6;39370:11;39287:95;;;;;;;;;;:::i;:::-;;;;;;;;38140:1247;;;;37901:1486;;;;;;;;:::o;7256:265:62:-;7455:58;;31266:66:181;7455:58:62;;;31254:79:181;31349:12;;;31342:28;;;7325:7:62;;31386:12:181;;7455:58:62;31024:380:181;3661:227:62;3739:7;3759:17;3778:18;3800:27;3811:4;3817:9;3800:10;:27::i;:::-;3758:69;;;;3837:18;3849:5;3837:11;:18::i;:::-;-1:-1:-1;3872:9:62;3661:227;-1:-1:-1;;;3661:227:62:o;18635:383:102:-;18796:8;;;;18766:7;;18796:8;;;;18785:19;;;;18781:233;;-1:-1:-1;18882:3:102;18848:38;;18781:233;18977:15;18987:4;18977:9;:15::i;:::-;:30;-1:-1:-1;;;;;18977:30:102;;18635:383;-1:-1:-1;;;;;18635:383:102:o;4275:258:68:-;4338:7;4353:15;4371:26;4392:4;4371:20;:26::i;:::-;:34;;;-1:-1:-1;;;;;4371:34:68;;-1:-1:-1;4371:34:68;4411:98;;4453:49;;-1:-1:-1;;;4453:49:68;;;;;;;;;;;19993:416:102;20132:7;20151:9;20164:1;20151:14;20147:43;;-1:-1:-1;20182:1:102;20175:8;;20147:43;20255:11;1023:6:104;20283:41:102;20315:9;1023:6:104;20283:41:102;:::i;:::-;20270:55;;:9;:55;:::i;:::-;20269:89;;;;:::i;:::-;20255:103;;20371:33;20389:3;20394:4;20400:3;20371:17;:33::i;:::-;20364:40;19993:416;-1:-1:-1;;;;;;19993:416:102:o;9063:1197::-;9210:7;9375:20;;;:14;:20;;;;;9210:7;;;;9406:14;9375:20;9406:12;:14::i;:::-;9402:854;;;9484:185;9514:47;9546:4;9552:8;9514:31;:47::i;:::-;9573:48;9605:4;9611:9;9573:31;:48::i;:::-;9484:5;;:185;9633:7;9652;9484:18;:185::i;:::-;9679:9;9467:229;;;;;;;;9402:854;9772:16;9803:15;9813:4;9803:9;:15::i;:::-;:43;;;-1:-1:-1;;;;;9803:43:102;;;;-1:-1:-1;9896:8:102;;9914:37;;:19;;9803:43;;9914:19;:37::i;:::-;9959:53;-1:-1:-1;;;;;9959:29:102;;9997:4;10004:7;9959:29;:53::i;:::-;-1:-1:-1;;;;;10113:14:102;;;10128:7;10137:8;10147:9;10158:7;10167:54;2186:4:104;10167:15:102;:54;:::i;:::-;10113:109;;-1:-1:-1;;;;;;10113:109:102;;;;;;;;;;31668:25:181;;;;-1:-1:-1;;;;;31767:15:181;;;31747:18;;;31740:43;31819:15;;;;31799:18;;;31792:43;31851:18;;;31844:34;31894:19;;;31887:35;31640:19;;10113:109:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10232:9;10096:153;;;;;;;;;;763:205:56;902:58;;-1:-1:-1;;;;;25498:32:181;;902:58:56;;;25480:51:181;25547:18;;;25540:34;;;875:86:56;;895:5;;-1:-1:-1;;;925:23:56;25453:18:181;;902:58:56;;;;-1:-1:-1;;902:58:56;;;;;;;;;;;;;;-1:-1:-1;;;;;902:58:56;-1:-1:-1;;;;;;902:58:56;;;;;;;;;;875:19;:86::i;1360:1117:171:-;1519:4;1525:12;1577:15;1598:13;1617:24;1654:8;1644:19;;-1:-1:-1;;;;;1644:19:171;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1644:19:171;;1617:46;;2083:1;2062;2033:9;2027:16;2003:4;1992:9;1988:20;1957:6;1927:7;1906:4;1892:210;1880:222;;2157:16;2146:27;;2195:8;2186:7;2183:21;2180:62;;;2226:8;2215:19;;2180:62;2315:7;2302:11;2295:28;2423:7;2420:1;2413:4;2400:11;2396:22;2381:50;2450:8;;;;-1:-1:-1;1360:1117:171;-1:-1:-1;;;;;;;1360:1117:171:o;5787:152:68:-;-1:-1:-1;;;;;;;;;;;;;;;;;5889:45:68;5920:10;5932:1;5889:30;:45::i;974:241:56:-;1139:68;;-1:-1:-1;;;;;32191:15:181;;;1139:68:56;;;32173:34:181;32243:15;;32223:18;;;32216:43;32275:18;;;32268:34;;;1112:96:56;;1132:5;;-1:-1:-1;;;1162:27:56;32108:18:181;;1139:68:56;31933:375:181;2145:730:62;2226:7;2235:12;2263:9;:16;2283:2;2263:22;2259:610;;2599:4;2584:20;;2578:27;2648:4;2633:20;;2627:27;2705:4;2690:20;;2684:27;2301:9;2676:36;2746:25;2757:4;2676:36;2578:27;2627;2746:10;:25::i;:::-;2739:32;;;;;;;;;2259:610;-1:-1:-1;2818:1:62;;-1:-1:-1;2822:35:62;2259:610;2145:730;;;;;:::o;570:511::-;647:20;638:5;:29;;;;;;;;:::i;:::-;;634:441;;570:511;:::o;634:441::-;743:29;734:5;:38;;;;;;;;:::i;:::-;;730:345;;788:34;;-1:-1:-1;;;788:34:62;;32515:2:181;788:34:62;;;32497:21:181;32554:2;32534:18;;;32527:30;32593:26;32573:18;;;32566:54;32637:18;;788:34:62;32313:348:181;730:345:62;852:35;843:5;:44;;;;;;;;:::i;:::-;;839:236;;903:41;;-1:-1:-1;;;903:41:62;;32868:2:181;903:41:62;;;32850:21:181;32907:2;32887:18;;;32880:30;32946:33;32926:18;;;32919:61;32997:18;;903:41:62;32666:355:181;839:236:62;974:30;965:5;:39;;;;;;;;:::i;:::-;;961:114;;1020:44;;-1:-1:-1;;;1020:44:62;;33228:2:181;1020:44:62;;;33210:21:181;33267:2;33247:18;;;33240:30;33306:34;33286:18;;;33279:62;-1:-1:-1;;;33357:18:181;;;33350:32;33399:19;;1020:44:62;33026:398:181;961:114:62;570:511;:::o;39242:129:108:-;39320:13;;;;39300:4;;39320:13;;39319:14;:47;;;;-1:-1:-1;;39337:17:108;;:24;:29;;;39242:129::o;3967:388:102:-;4066:5;4156:19;;;:14;:19;;;;;;;;-1:-1:-1;;;;;4156:33:102;;;;;;;;;;;;4207:19;;;:14;:19;;;;;;:32;;:39;;4066:5;;4156:33;;;;4207:32;4156:33;;4207:39;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;4207:39:102;4199:64;4195:137;;4278:54;;-1:-1:-1;;;4278:54:102;;;;;;;;;;;26562:988:108;26738:13;;;;26714:7;;26738:13;;26737:14;26729:40;;;;-1:-1:-1;;;26729:40:108;;33631:2:181;26729:40:108;;;33613:21:181;33670:2;33650:18;;;33643:30;-1:-1:-1;;;33689:18:181;;;33682:43;33742:18;;26729:40:108;33429:337:181;26729:40:108;26789:4;:13;;26803:14;26789:29;;;;;;;;;;:::i;:::-;;;;;;;;;26783:2;:35;;26775:70;;;;-1:-1:-1;;;26775:70:108;;33973:2:181;26775:70:108;;;33955:21:181;34012:2;33992:18;;;33985:30;-1:-1:-1;;;34031:18:181;;;34024:52;34093:18;;26775:70:108;33771:346:181;26775:70:108;26852:10;26868:13;26887:25;26915:4;:13;;26887:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26948:64;26963:4;26969:14;26985:12;26999:2;27003:8;26948:14;:64::i;:::-;26934:78;;-1:-1:-1;26934:78:108;-1:-1:-1;27026:11:108;;;;27018:34;;;;-1:-1:-1;;;27018:34:108;;34324:2:181;27018:34:108;;;34306:21:181;34363:2;34343:18;;;34336:30;-1:-1:-1;;;34382:18:181;;;34375:40;34432:18;;27018:34:108;34122:334:181;27018:34:108;27059:18;27146:4;:30;;27177:12;27146:44;;;;;;;;;;:::i;:::-;;;;;;;;;3443:4:104;27089::108;:13;;;27081:5;:21;;;;:::i;:::-;27080:57;;;;:::i;:::-;:110;;;;:::i;:::-;27059:131;;27256:2;27229:8;27238:14;27229:24;;;;;;;;;;:::i;:::-;;;;;;;:29;;;;:::i;:::-;27197:4;:13;;27211:14;27197:29;;;;;;;;;;:::i;:::-;;;;;;;;:61;;;;27324:10;27319:2;27294:8;27303:12;27294:22;;;;;;;;;;:::i;:::-;;;;;;;:27;;;;:::i;:::-;:40;;;;:::i;:::-;27264:4;:13;;27278:12;27264:27;;;;;;;;;;:::i;:::-;;;;;;;;;;:70;27345:15;;27341:108;;27432:10;27401:4;:14;;27416:12;27401:28;;;;;;;;;;:::i;:::-;;;;;;;;;:41;;;;:::i;:::-;27370:4;:14;;27385:12;27370:28;;;;;;;;;;:::i;:::-;;;;;;;;;;:72;27341:108;27470:8;;27460:69;;;34688:25:181;;;34744:2;34729:18;;34722:34;;;34804:4;34792:17;;;34772:18;;;34765:45;34846:17;;34841:2;34826:18;;34819:45;27460:69:108;;27480:10;;27470:8;27460:69;;;;;;34675:3:181;27460:69:108;;;-1:-1:-1;27543:2:108;;26562:988;-1:-1:-1;;;;;;;;26562:988:108:o;1475:603:56:-;1830:10;;;1829:62;;-1:-1:-1;1846:39:56;;-1:-1:-1;;;1846:39:56;;1870:4;1846:39;;;7257:34:181;-1:-1:-1;;;;;7327:15:181;;;7307:18;;;7300:43;1846:15:56;;;;;7192:18:181;;1846:39:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;1829:62;1808:163;;;;-1:-1:-1;;;1808:163:56;;35077:2:181;1808:163:56;;;35059:21:181;35116:2;35096:18;;;35089:30;35155:34;35135:18;;;35128:62;-1:-1:-1;;;35206:18:181;;;35199:52;35268:19;;1808:163:56;34875:418:181;1808:163:56;2008:62;;-1:-1:-1;;;;;25498:32:181;;2008:62:56;;;25480:51:181;25547:18;;;25540:34;;;1981:90:56;;2001:5;;-1:-1:-1;;;2031:22:56;25453:18:181;;2008:62:56;25306:274:181;2084:310:56;2233:39;;-1:-1:-1;;;2233:39:56;;2257:4;2233:39;;;7257:34:181;-1:-1:-1;;;;;7327:15:181;;;7307:18;;;7300:43;2210:20:56;;2275:5;;2233:15;;;;;7192:18:181;;2233:39:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;;:::i;:::-;2317:69;;-1:-1:-1;;;;;25498:32:181;;2317:69:56;;;25480:51:181;25547:18;;;25540:34;;;2210:70:56;;-1:-1:-1;2290:97:56;;2310:5;;-1:-1:-1;;;2340:22:56;25453:18:181;;2317:69:56;25306:274:181;3747:706:56;4166:23;4192:69;4220:4;4192:69;;;;;;;;;;;;;;;;;4200:5;-1:-1:-1;;;;;4192:27:56;;;:69;;;;;:::i;:::-;4275:17;;4166:95;;-1:-1:-1;4275:21:56;4271:176;;4370:10;4359:30;;;;;;;;;;;;:::i;:::-;4351:85;;;;-1:-1:-1;;;4351:85:56;;35750:2:181;4351:85:56;;;35732:21:181;35789:2;35769:18;;;35762:30;35828:34;35808:18;;;35801:62;-1:-1:-1;;;35879:18:181;;;35872:40;35929:19;;4351:85:56;35548:406:181;16433:1118:102;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16649:24:102;;16645:62;;16690:10;-1:-1:-1;16683:17:102;;16645:62;-1:-1:-1;;;;;;16780:32:102;;;;;;:20;;;:32;;;;;;;;;16767:45;;;;;;;;;;;;;;;;;;;;;;;;;;;16822:22;16818:123;;16924:10;-1:-1:-1;16917:17:102;;16818:123;17148:28;17162:10;17174:1;17148:13;:28::i;:::-;17144:380;;;17319:8;;;;;;17299:28;;-1:-1:-1;;;;;335:23:173;;17335:13:102;;;:54;17144:380;;;-1:-1:-1;;;;;;17478:39:102;;;;;;:27;;;:39;;;;;;;;;17465:52;;;;;;;;;;;;;;;;;;;;;17536:10;16433:1118;-1:-1:-1;;;16433:1118:102:o;5069:1494:62:-;5195:7;;6119:66;6106:79;;6102:161;;;-1:-1:-1;6217:1:62;;-1:-1:-1;6221:30:62;6201:51;;6102:161;6374:24;;;6357:14;6374:24;;;;;;;;;36186:25:181;;;36259:4;36247:17;;36227:18;;;36220:45;;;;36281:18;;;36274:34;;;36324:18;;;36317:34;;;6374:24:62;;36158:19:181;;6374:24:62;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6374:24:62;;-1:-1:-1;;6374:24:62;;;-1:-1:-1;;;;;;;6412:20:62;;6408:101;;6464:1;6468:29;6448:50;;;;;;;6408:101;6527:6;6535:20;;-1:-1:-1;5069:1494:62;-1:-1:-1;;;;;5069:1494:62:o;16896:712:108:-;17067:10;17079:13;17100:28;17131:4;:30;;17100:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17167:19;17189:26;17193:8;17203:11;17189:3;:26::i;:::-;17167:48;;17246:2;:9;17229:14;:26;;;:54;;;;;17274:2;:9;17259:12;:24;;;17229:54;17221:85;;;;-1:-1:-1;;;17221:85:108;;36564:2:181;17221:85:108;;;36546:21:181;36603:2;36583:18;;;36576:30;-1:-1:-1;;;36622:18:181;;;36615:48;36680:18;;17221:85:108;36362:342:181;17221:85:108;17312:9;17359:2;17362:14;17359:18;;;;;;;;;;:::i;:::-;;;;;;;17329:11;17341:14;17329:27;;;;;;;;;;:::i;:::-;;;;;;;17324:2;:32;;;;:::i;:::-;:53;;;;:::i;:::-;17312:65;;17383:9;17395:61;17400:18;17413:4;17400:12;:18::i;:::-;17420:14;17436:12;17450:1;17453:2;17395:4;:61::i;:::-;17383:73;;17490:1;17486;17467:2;17470:12;17467:16;;;;;;;;;;:::i;:::-;;;;;;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;17462:29;;3443:4:104;17511::108;:12;;;17506:2;:17;;;;:::i;:::-;17505:47;;;;:::i;:::-;17497:55;;17578:11;17590:12;17578:25;;;;;;;;;;:::i;:::-;;;;;;;17569:5;17564:2;:10;;;;:::i;:::-;17563:40;;;;:::i;:::-;17558:45;;17094:514;;;;16896:712;;;;;;;;:::o;3873:223:57:-;4006:12;4037:52;4059:6;4067:4;4073:1;4076:12;4037:21;:52::i;17816:515:102:-;-1:-1:-1;;;;;18056:35:102;;17900:4;18056:35;;;:27;;;:35;;;;;:42;;;:47;18052:80;;-1:-1:-1;18120:5:102;18113:12;;18052:80;-1:-1:-1;;;;;;;18303:18:102;;:23;;;17816:515::o;11512:464:108:-;11672:15;;11714:27;;11626:16;;11672:15;11701:40;;11693:73;;;;-1:-1:-1;;;11693:73:108;;36911:2:181;11693:73:108;;;36893:21:181;36950:2;36930:18;;;36923:30;-1:-1:-1;;;36969:18:181;;;36962:50;37029:18;;11693:73:108;36709:344:181;11693:73:108;11772:19;11808:9;-1:-1:-1;;;;;11794:24:108;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11794:24:108;;11772:46;;11829:9;11824:133;11844:9;11840:1;:13;11824:133;;;11887:20;11908:1;11887:23;;;;;;;;:::i;:::-;;;;;;;11873:8;11882:1;11873:11;;;;;;;;:::i;:::-;;;;;;;:37;;;;:::i;:::-;11865:2;11868:1;11865:5;;;;;;;;:::i;:::-;;;;;;;;;;:45;11939:3;;11824:133;;;-1:-1:-1;11969:2:108;11512:464;-1:-1:-1;;;;11512:464:108:o;3755:127::-;3818:7;3840:37;3872:4;3840:31;:37::i;13522:1503::-;13710:9;;13675:7;;13733:30;;;;;;;;13725:66;;;;-1:-1:-1;;;13725:66:108;;37260:2:181;13725:66:108;;;37242:21:181;37299:2;37279:18;;;37272:30;37338:25;37318:18;;;37311:53;37381:18;;13725:66:108;37058:347:181;13725:66:108;13822:9;13805:14;:26;;;:54;;;;;13850:9;13835:12;:24;;;13805:54;13797:82;;;;-1:-1:-1;;;13797:82:108;;37612:2:181;13797:82:108;;;37594:21:181;37651:2;37631:18;;;37624:30;-1:-1:-1;;;37670:18:181;;;37663:45;37725:18;;13797:82:108;37410:339:181;13797:82:108;13886:9;13898:18;13903:2;13907:8;13898:4;:18::i;:::-;13886:30;-1:-1:-1;13886:30:108;13922:9;;13969:20;13981:8;13969:9;:20;:::i;:::-;13956:33;;13996:10;14017:9;14012:559;14032:9;14028:1;:13;14012:559;;;14062:14;14057:19;;:1;:19;14053:186;;14093:1;14088:6;;14053:186;;;14118:12;14113:17;;:1;:17;14109:130;;14147:2;14150:1;14147:5;;;;;;;;:::i;:::-;;;;;;;14142:10;;14109:130;;;14199:3;;14012:559;;14109:130;14246:7;14251:2;14246:7;;:::i;:::-;;-1:-1:-1;14276:14:108;14281:9;14276:2;:14;:::i;:::-;14266:5;14270:1;14266;:5;:::i;:::-;14265:26;;;;:::i;:::-;14261:30;-1:-1:-1;14553:3:108;;14012:559;;;-1:-1:-1;14615:14:108;14620:9;14615:2;:14;:::i;:::-;4566:3:104;14581:5:108;14585:1;14581;:5;:::i;:::-;:29;;;;:::i;:::-;14580:50;;;;:::i;:::-;14576:54;-1:-1:-1;14636:9:108;14683:2;14654:25;4566:3:104;14654:1:108;:25;:::i;:::-;14653:32;;;;:::i;:::-;14648:38;;:1;:38;:::i;:::-;14636:50;-1:-1:-1;14692:13:108;14723:1;14692:13;14762:213;4231:3:104;14778:1:108;:28;14762:213;;;14826:1;14818:9;;14870:1;14866;14857;14861;14857:5;;;;:::i;:::-;14856:11;;;;:::i;:::-;:15;;;;:::i;:::-;14850:1;14841:5;14845:1;;14841:5;:::i;:::-;14840:11;;;;:::i;:::-;14839:33;;;;:::i;:::-;14835:37;-1:-1:-1;14884:16:108;14835:37;14894:5;14884:9;:16::i;:::-;14880:49;;;-1:-1:-1;14919:1:108;-1:-1:-1;14912:8:108;;-1:-1:-1;;;;;;;;14912:8:108;14880:49;14957:3;;14762:213;;;-1:-1:-1;14980:40:108;;-1:-1:-1;;;14980:40:108;;37956:2:181;14980:40:108;;;37938:21:181;37995:2;37975:18;;;37968:30;38034:32;38014:18;;;38007:60;38084:18;;14980:40:108;37754:354:181;4960:446:57;5125:12;5182:5;5157:21;:30;;5149:81;;;;-1:-1:-1;;;5149:81:57;;38315:2:181;5149:81:57;;;38297:21:181;38354:2;38334:18;;;38327:30;38393:34;38373:18;;;38366:62;-1:-1:-1;;;38444:18:181;;;38437:36;38490:19;;5149:81:57;38113:402:181;5149:81:57;5241:12;5255:23;5282:6;-1:-1:-1;;;;;5282:11:57;5301:5;5308:4;5282:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5240:73;;;;5330:69;5357:6;5365:7;5374:10;5386:12;5330:26;:69::i;:::-;5323:76;4960:446;-1:-1:-1;;;;;;;4960:446:57:o;1367:561:101:-;1478:16;;;;1541:12;;;;1611:13;;;;1541:12;;1478:16;1675:14;;;;;;:38;;;1711:2;1693:15;:20;1675:38;1671:253;;;1723:10;1736:4;:17;;;1723:30;;1906:2;1902;1898:11;1891:2;1878:11;1874:20;1864:8;1860:35;1845:11;1841:2;1837:20;1833:2;1829:29;1825:71;1821:89;1809:101;;1799:119;1671:253;1459:469;;1367:561;;;:::o;9598:1376:108:-;9702:9;;9667:7;;;;9732:98;9752:9;9748:1;:13;9732:98;;;9778:2;9781:1;9778:5;;;;;;;;:::i;:::-;;;;;;;9773:10;;;;;:::i;:::-;;-1:-1:-1;9812:3:108;;9732:98;;;;9839:1;9844;9839:6;9835:35;;9862:1;9855:8;;;;;;9835:35;9876:13;9907:1;9876:13;9927;9931:9;9927:1;:13;:::i;:::-;9914:26;;9952:9;9947:744;4231:3:104;9963:1:108;:28;9947:744;;;10016:1;10003:10;10025:374;10045:9;10041:1;:13;10025:374;;;10093:9;10085:2;10088:1;10085:5;;;;;;;;:::i;:::-;;;;;;;:17;;;;:::i;:::-;10074:6;10079:1;10074:2;:6;:::i;:::-;10073:30;;;;:::i;:::-;10068:35;-1:-1:-1;10377:3:108;;10025:374;;;;10414:1;10406:9;;10584:2;10567:9;10579:1;10567:13;;;;:::i;:::-;10566:20;;;;:::i;:::-;4566:3:104;10537:1:108;10507:26;4566:3:104;10507:2:108;:26;:::i;:::-;10506:32;;;;:::i;:::-;10505:58;;;;:::i;:::-;:81;;;;:::i;:::-;10490:1;10472:14;10477:9;10472:2;:14;:::i;:::-;4566:3:104;10438:6:108;10443:1;10438:2;:6;:::i;:::-;10437:32;;;;:::i;:::-;:49;;;;:::i;:::-;10436:55;;;;:::i;:::-;10435:153;;;;:::i;:::-;10423:165;-1:-1:-1;10600:16:108;10423:165;10610:5;10600:9;:16::i;:::-;10596:49;;;10635:1;10628:8;;;;;;;;;;;10596:49;-1:-1:-1;10673:3:108;;9947:744;;;-1:-1:-1;10940:29:108;;-1:-1:-1;;;10940:29:108;;39014:2:181;10940:29:108;;;38996:21:181;39053:2;39033:18;;;39026:30;-1:-1:-1;;;39072:18:181;;;39065:49;39131:18;;10940:29:108;38812:343:181;589:130:107;651:4;690:5;671:16;682:1;685;671:10;:16::i;:::-;:24;;589:130;-1:-1:-1;;;589:130:107:o;7466:628:57:-;7646:12;7674:7;7670:418;;;7701:10;:17;7722:1;7701:22;7697:286;;-1:-1:-1;;;;;1465:19:57;;;7908:60;;;;-1:-1:-1;;;7908:60:57;;39362:2:181;7908:60:57;;;39344:21:181;39401:2;39381:18;;;39374:30;39440:31;39420:18;;;39413:59;39489:18;;7908:60:57;39160:353:181;7908:60:57;-1:-1:-1;8003:10:57;7996:17;;7670:418;8044:33;8052:10;8064:12;8044:7;:33::i;911:140:107:-;976:7;999:1;995;:5;991:38;;;1017:5;1021:1;1017;:5;:::i;:::-;1010:12;;;;991:38;1041:5;1045:1;1041;:5;:::i;8616:540:57:-;8775:17;;:21;8771:379;;9003:10;8997:17;9059:15;9046:10;9042:2;9038:19;9031:44;8771:379;9126:12;9119:20;;-1:-1:-1;;;9119:20:57;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:121:181;99:10;92:5;88:22;81:5;78:33;68:61;;125:1;122;115:12;140:132;207:20;;236:30;207:20;236:30;:::i;277:245::-;335:6;388:2;376:9;367:7;363:23;359:32;356:52;;;404:1;401;394:12;356:52;443:9;430:23;462:30;486:5;462:30;:::i;844:131::-;-1:-1:-1;;;;;919:31:181;;909:42;;899:70;;965:1;962;955:12;980:134;1048:20;;1077:31;1048:20;1077:31;:::i;1119:247::-;1178:6;1231:2;1219:9;1210:7;1206:23;1202:32;1199:52;;;1247:1;1244;1237:12;1199:52;1286:9;1273:23;1305:31;1330:5;1305:31;:::i;1659:180::-;1718:6;1771:2;1759:9;1750:7;1746:23;1742:32;1739:52;;;1787:1;1784;1777:12;1739:52;-1:-1:-1;1810:23:181;;1659:180;-1:-1:-1;1659:180:181:o;1844:658::-;2015:2;2067:21;;;2137:13;;2040:18;;;2159:22;;;1986:4;;2015:2;2238:15;;;;2212:2;2197:18;;;1986:4;2281:195;2295:6;2292:1;2289:13;2281:195;;;2360:13;;-1:-1:-1;;;;;2356:39:181;2344:52;;2451:15;;;;2416:12;;;;2392:1;2310:9;2281:195;;;-1:-1:-1;2493:3:181;;1844:658;-1:-1:-1;;;;;;1844:658:181:o;2507:161::-;2572:5;2617:3;2608:6;2603:3;2599:16;2595:26;2592:46;;;2634:1;2631;2624:12;2592:46;-1:-1:-1;2656:6:181;2507:161;-1:-1:-1;2507:161:181:o;2673:435::-;2774:6;2782;2835:2;2823:9;2814:7;2810:23;2806:32;2803:52;;;2851:1;2848;2841:12;2803:52;2891:9;2878:23;-1:-1:-1;;;;;2916:6:181;2913:30;2910:50;;;2956:1;2953;2946:12;2910:50;2979:72;3043:7;3034:6;3023:9;3019:22;2979:72;:::i;:::-;2969:82;3098:2;3083:18;;;;3070:32;;-1:-1:-1;;;;2673:435:181:o;3113:392::-;3204:6;3257:2;3245:9;3236:7;3232:23;3228:32;3225:52;;;3273:1;3270;3263:12;3225:52;3313:9;3300:23;-1:-1:-1;;;;;3338:6:181;3335:30;3332:50;;;3378:1;3375;3368:12;3332:50;3401:22;;3457:3;3439:16;;;3435:26;3432:46;;;3474:1;3471;3464:12;3692:1287;3815:6;3823;3831;3839;3847;3855;3863;3871;3924:3;3912:9;3903:7;3899:23;3895:33;3892:53;;;3941:1;3938;3931:12;3892:53;3980:9;3967:23;3999:30;4023:5;3999:30;:::i;:::-;4048:5;-1:-1:-1;4105:2:181;4090:18;;4077:32;4118:33;4077:32;4118:33;:::i;:::-;4170:7;-1:-1:-1;4229:2:181;4214:18;;4201:32;4242:33;4201:32;4242:33;:::i;:::-;4294:7;-1:-1:-1;4353:2:181;4338:18;;4325:32;4366:33;4325:32;4366:33;:::i;:::-;4418:7;-1:-1:-1;4472:3:181;4457:19;;4444:33;;-1:-1:-1;4524:3:181;4509:19;;4496:33;;-1:-1:-1;4580:3:181;4565:19;;4552:33;-1:-1:-1;;;;;4634:14:181;;;4631:34;;;4661:1;4658;4651:12;4631:34;4699:6;4688:9;4684:22;4674:32;;4744:7;4737:4;4733:2;4729:13;4725:27;4715:55;;4766:1;4763;4756:12;4715:55;4806:2;4793:16;4832:2;4824:6;4821:14;4818:34;;;4848:1;4845;4838:12;4818:34;4893:7;4888:2;4879:6;4875:2;4871:15;4867:24;4864:37;4861:57;;;4914:1;4911;4904:12;4861:57;4945:2;4941;4937:11;4927:21;;4967:6;4957:16;;;;;3692:1287;;;;;;;;;;;:::o;5166:313::-;5233:6;5241;5294:2;5282:9;5273:7;5269:23;5265:32;5262:52;;;5310:1;5307;5300:12;5262:52;5349:9;5336:23;5368:30;5392:5;5368:30;:::i;:::-;5417:5;5469:2;5454:18;;;;5441:32;;-1:-1:-1;;;5166:313:181:o;5484:127::-;5545:10;5540:3;5536:20;5533:1;5526:31;5576:4;5573:1;5566:15;5600:4;5597:1;5590:15;5616:227;5714:1;5707:5;5704:12;5694:143;;5759:10;5754:3;5750:20;5747:1;5740:31;5794:4;5791:1;5784:15;5822:4;5819:1;5812:15;5848:270;6011:2;5996:18;;6023:55;6071:6;6023:55;:::i;:::-;6087:25;;;5848:270;:::o;6419:367::-;6511:6;6564:2;6552:9;6543:7;6539:23;6535:32;6532:52;;;6580:1;6577;6570:12;6532:52;6620:9;6607:23;-1:-1:-1;;;;;6645:6:181;6642:30;6639:50;;;6685:1;6682;6675:12;6639:50;6708:72;6772:7;6763:6;6752:9;6748:22;6708:72;:::i;6791:249::-;6860:6;6913:2;6901:9;6892:7;6888:23;6884:32;6881:52;;;6929:1;6926;6919:12;6881:52;6961:9;6955:16;6980:30;7004:5;6980:30;:::i;7354:127::-;7415:10;7410:3;7406:20;7403:1;7396:31;7446:4;7443:1;7436:15;7470:4;7467:1;7460:15;7486:255;7558:2;7552:9;7600:6;7588:19;;-1:-1:-1;;;;;7622:34:181;;7658:22;;;7619:62;7616:88;;;7684:18;;:::i;:::-;7720:2;7713:22;7486:255;:::o;7746:275::-;7817:2;7811:9;7882:2;7863:13;;-1:-1:-1;;7859:27:181;7847:40;;-1:-1:-1;;;;;7902:34:181;;7938:22;;;7899:62;7896:88;;;7964:18;;:::i;:::-;8000:2;7993:22;7746:275;;-1:-1:-1;7746:275:181:o;8026:118::-;8112:5;8105:13;8098:21;8091:5;8088:32;8078:60;;8134:1;8131;8124:12;8149:128;8214:20;;8243:28;8214:20;8243:28;:::i;8282:186::-;8330:4;-1:-1:-1;;;;;8355:6:181;8352:30;8349:56;;;8385:18;;:::i;:::-;-1:-1:-1;8451:2:181;8430:15;-1:-1:-1;;8426:29:181;8457:4;8422:40;;8282:186::o;8473:462::-;8515:5;8568:3;8561:4;8553:6;8549:17;8545:27;8535:55;;8586:1;8583;8576:12;8535:55;8622:6;8609:20;8653:48;8669:31;8697:2;8669:31;:::i;:::-;8653:48;:::i;:::-;8726:2;8717:7;8710:19;8772:3;8765:4;8760:2;8752:6;8748:15;8744:26;8741:35;8738:55;;;8789:1;8786;8779:12;8738:55;8854:2;8847:4;8839:6;8835:17;8828:4;8819:7;8815:18;8802:55;8902:1;8877:16;;;8895:4;8873:27;8866:38;;;;8881:7;8473:462;-1:-1:-1;;;8473:462:181:o;8940:1367::-;9054:9;9113:6;9105:5;9089:14;9085:26;9081:39;9078:59;;;9133:1;9130;9123:12;9078:59;9161:22;;:::i;:::-;9208:24;9226:5;9208:24;:::i;:::-;9199:7;9192:41;9267:33;9296:2;9289:5;9285:14;9267:33;:::i;:::-;9262:2;9253:7;9249:16;9242:59;9335:33;9364:2;9357:5;9353:14;9335:33;:::i;:::-;9330:2;9321:7;9317:16;9310:59;9403:34;9433:2;9426:5;9422:14;9403:34;:::i;:::-;9398:2;9389:7;9385:16;9378:60;9473:35;9503:3;9496:5;9492:15;9473:35;:::i;:::-;9467:3;9458:7;9454:17;9447:62;9544:32;9571:3;9564:5;9560:15;9544:32;:::i;:::-;9538:3;9529:7;9525:17;9518:59;9624:3;9617:5;9613:15;9600:29;-1:-1:-1;;;;;9644:6:181;9641:30;9638:50;;;9684:1;9681;9674:12;9638:50;9723:52;9760:14;9751:6;9744:5;9740:18;9723:52;:::i;:::-;9717:3;9708:7;9704:17;9697:79;;9835:3;9828:5;9824:15;9811:29;9805:3;9796:7;9792:17;9785:56;9860:3;9897:34;9927:2;9920:5;9916:14;9897:34;:::i;:::-;9879:16;;;9872:60;9951:3;10001:14;;;9988:28;9970:16;;;9963:54;10036:3;10086:14;;;10073:28;10055:16;;;10048:54;10121:3;10171:14;;;10158:28;10140:16;;;10133:54;10206:3;10256:14;;;10243:28;10225:16;;;10218:54;;;;-1:-1:-1;9883:7:181;8940:1367::o;10312:331::-;10411:4;10469:11;10456:25;10563:3;10559:8;10548;10532:14;10528:29;10524:44;10504:18;10500:69;10490:97;;10583:1;10580;10573:12;10490:97;10604:33;;;;;10312:331;-1:-1:-1;;10312:331:181:o;10648:500::-;10706:5;10713:6;10773:3;10760:17;10859:2;10855:7;10844:8;10828:14;10824:29;10820:43;10800:18;10796:68;10786:96;;10878:1;10875;10868:12;10786:96;10906:33;;11010:4;10997:18;;;-1:-1:-1;10958:21:181;;-1:-1:-1;;;;;;11027:30:181;;11024:50;;;11070:1;11067;11060:12;11024:50;11117:6;11101:14;11097:27;11090:5;11086:39;11083:59;;;11138:1;11135;11128:12;11153:266;11241:6;11236:3;11229:19;11293:6;11286:5;11279:4;11274:3;11270:14;11257:43;-1:-1:-1;11345:1:181;11320:16;;;11338:4;11316:27;;;11309:38;;;;11401:2;11380:15;;;-1:-1:-1;;11376:29:181;11367:39;;;11363:50;;11153:266::o;11424:520::-;11494:5;11501:6;11561:3;11548:17;11647:2;11643:7;11632:8;11616:14;11612:29;11608:43;11588:18;11584:68;11574:96;;11666:1;11663;11656:12;11574:96;11694:33;;11798:4;11785:18;;;-1:-1:-1;11746:21:181;;-1:-1:-1;;;;;;11815:30:181;;11812:50;;;11858:1;11855;11848:12;11812:50;11912:6;11909:1;11905:14;11889;11885:35;11878:5;11874:47;11871:67;;;11934:1;11931;11924:12;11949:522;12049:6;12044:3;12037:19;12019:3;12075:4;12104:2;12099:3;12095:12;12088:19;;12130:5;12153:1;12163:283;12177:6;12174:1;12171:13;12163:283;;;12254:6;12241:20;12274:33;12299:7;12274:33;:::i;:::-;-1:-1:-1;;;;;12332:33:181;12320:46;;12386:12;;;;12421:15;;;;12362:1;12192:9;12163:283;;;-1:-1:-1;12462:3:181;;11949:522;-1:-1:-1;;;;;11949:522:181:o;12476:714::-;12583:6;12578:3;12571:19;12553:3;12609:4;12650:2;12645:3;12641:12;12675:11;12702;12695:18;;12752:6;12749:1;12745:14;12738:5;12734:26;12722:38;;12783:5;12806:1;12816:348;12830:6;12827:1;12824:13;12816:348;;;12901:5;12895:4;12891:16;12886:3;12879:29;12957:45;12995:6;12988:5;12957:45;:::i;:::-;13023:61;13079:4;13064:13;13049;13023:61;:::i;:::-;13142:12;;;;13015:69;-1:-1:-1;;;13107:15:181;;;;12852:1;12845:9;12816:348;;;-1:-1:-1;13180:4:181;;12476:714;-1:-1:-1;;;;;;;12476:714:181:o;13195:3238::-;13470:3;13459:9;13452:22;13433:4;13493:3;13544:6;13531:20;13631:3;13627:8;13618:6;13602:14;13598:27;13594:42;13574:18;13570:67;13560:95;;13651:1;13648;13641:12;13560:95;13745:4;13739:3;13724:19;;13717:33;13677:31;;13759:63;13803:18;;;13777:24;13677:31;13777:24;:::i;:::-;6199:10;6188:22;6176:35;;6123:94;13759:63;13851:35;13880:4;13873:5;13869:16;13851:35;:::i;:::-;13905:3;13917:51;13964:2;13953:9;13949:18;13935:12;6199:10;6188:22;6176:35;;6123:94;13917:51;13999:35;14028:4;14021:5;14017:16;13999:35;:::i;:::-;13977:57;;14053:3;14065:53;14114:2;14103:9;14099:18;14083:14;6199:10;6188:22;6176:35;;6123:94;14065:53;14149:36;14179:4;14172:5;14168:16;14149:36;:::i;:::-;14127:58;;14204:3;14216:54;14266:2;14255:9;14251:18;14235:14;-1:-1:-1;;;;;593:31:181;581:44;;527:104;14216:54;14301:35;14331:3;14324:5;14320:15;14301:35;:::i;:::-;14279:57;;14355:6;14370:54;14420:2;14409:9;14405:18;14389:14;-1:-1:-1;;;;;593:31:181;581:44;;527:104;14370:54;14455:33;14482:4;14475:5;14471:16;14455:33;:::i;:::-;1441:13;;1434:21;14544:3;14529:19;;1422:34;14433:55;-1:-1:-1;14594:55:181;14643:4;14636:5;14632:16;14625:5;14594:55;:::i;:::-;14558:91;;14686:2;14680:3;14669:9;14665:19;14658:31;14712:76;14783:3;14772:9;14768:19;14754:12;14738:14;14712:76;:::i;:::-;14698:90;;;;14849:4;14842:5;14838:16;14825:30;14819:3;14808:9;14804:19;14797:59;14875:6;14912:34;14942:2;14935:5;14931:14;14912:34;:::i;:::-;-1:-1:-1;;;;;593:31:181;15005:3;14990:19;;581:44;15060:14;;;15047:28;15041:3;15026:19;;15019:57;15126:14;;;15113:28;15107:3;15092:19;;15085:57;15192:14;;;15179:28;15173:3;15158:19;;15151:57;15258:14;;;15245:28;15239:3;15224:19;;15217:57;15321:69;15384:4;15372:17;;15376:6;15321:69;:::i;:::-;15283:107;;;;15413:3;15409:8;15399:18;;15483:2;15471:9;15463:6;15459:22;15455:31;15448:4;15437:9;15433:20;15426:61;15510:77;15580:6;15564:14;15548;15510:77;:::i;:::-;15496:91;;15634:69;15697:4;15689:6;15685:17;15677:6;15634:69;:::i;:::-;15596:107;;;;15769:2;15757:9;15749:6;15745:22;15741:31;15734:4;15723:9;15719:20;15712:61;15796:84;15873:6;15857:14;15841;15796:84;:::i;:::-;15782:98;;15911:37;15942:4;15934:6;15930:17;15911:37;:::i;:::-;-1:-1:-1;;;;;593:31:181;;16007:4;15992:20;;581:44;15889:59;-1:-1:-1;16061:56:181;16112:3;16104:6;16100:16;16092:6;16061:56;:::i;:::-;16022:95;;;;16181:2;16169:9;16161:6;16157:22;16153:31;16148:2;16137:9;16133:18;16126:59;;;;;16202:66;16261:6;16245:14;16228:15;16202:66;:::i;:::-;16194:74;;;;;16277:48;16319:4;16308:9;16304:20;16296:6;-1:-1:-1;;;;;593:31:181;581:44;;527:104;16277:48;16363:6;16356:4;16345:9;16341:20;16334:36;16379:48;16421:4;16410:9;16406:20;16398:6;-1:-1:-1;;;;;593:31:181;581:44;;527:104;17112:250;17197:1;17207:113;17221:6;17218:1;17215:13;17207:113;;;17297:11;;;17291:18;17278:11;;;17271:39;17243:2;17236:10;17207:113;;;-1:-1:-1;;17354:1:181;17336:16;;17329:27;17112:250::o;17367:270::-;17408:3;17446:5;17440:12;17473:6;17468:3;17461:19;17489:76;17558:6;17551:4;17546:3;17542:14;17535:4;17528:5;17524:16;17489:76;:::i;:::-;17619:2;17598:15;-1:-1:-1;;17594:29:181;17585:39;;;;17626:4;17581:50;;17367:270;-1:-1:-1;;17367:270:181:o;17642:1370::-;17758:12;;6199:10;6188:22;6176:35;;17697:3;17725:6;17822:4;17815:5;17811:16;17805:23;17837:47;17878:4;17873:3;17869:14;17855:12;6199:10;6188:22;6176:35;;6123:94;17837:47;;17932:4;17925:5;17921:16;17915:23;17947:49;17990:4;17985:3;17981:14;17965;6199:10;6188:22;6176:35;;6123:94;17947:49;;18044:4;18037:5;18033:16;18027:23;18059:50;18103:4;18098:3;18094:14;18078;-1:-1:-1;;;;;593:31:181;581:44;;527:104;18059:50;;18157:4;18150:5;18146:16;18140:23;18172:50;18216:4;18211:3;18207:14;18191;-1:-1:-1;;;;;593:31:181;581:44;;527:104;18172:50;;18270:4;18263:5;18259:16;18253:23;18285:47;18326:4;18321:3;18317:14;18301;1441:13;1434:21;1422:34;;1371:91;18285:47;;18380:4;18373:5;18369:16;18363:23;18418:2;18411:4;18406:3;18402:14;18395:26;18442:46;18484:2;18479:3;18475:12;18459:14;18442:46;:::i;:::-;18430:58;;;18537:4;18530:5;18526:16;18520:23;18513:4;18508:3;18504:14;18497:47;18563:6;18617:2;18610:5;18606:14;18600:21;18630:48;18674:2;18669:3;18665:12;18649:14;-1:-1:-1;;;;;593:31:181;581:44;;527:104;18630:48;-1:-1:-1;;18697:6:181;18739:14;;;18733:21;18719:12;;;18712:43;18774:6;18816:14;;;18810:21;18796:12;;;18789:43;18851:6;18893:14;;;18887:21;18873:12;;;18866:43;18928:6;18970:14;;;18964:21;18950:12;;;;18943:43;;;;-1:-1:-1;19002:4:181;17642:1370::o;19017:275::-;19208:2;19197:9;19190:21;19171:4;19228:58;19282:2;19271:9;19267:18;19259:6;19228:58;:::i;19297:545::-;19390:4;19396:6;19456:11;19443:25;19550:2;19546:7;19535:8;19519:14;19515:29;19511:43;19491:18;19487:68;19477:96;;19569:1;19566;19559:12;19477:96;19596:33;;19648:20;;;-1:-1:-1;;;;;;19680:30:181;;19677:50;;;19723:1;19720;19713:12;19677:50;19756:4;19744:17;;-1:-1:-1;19807:1:181;19803:14;;;19787;19783:35;19773:46;;19770:66;;;19832:1;19829;19822:12;19847:359;20064:6;20053:9;20046:25;20107:2;20102;20091:9;20087:18;20080:30;20027:4;20127:73;20196:2;20185:9;20181:18;20173:6;20165;20127:73;:::i;20211:521::-;20288:4;20294:6;20354:11;20341:25;20448:2;20444:7;20433:8;20417:14;20413:29;20409:43;20389:18;20385:68;20375:96;;20467:1;20464;20457:12;20375:96;20494:33;;20546:20;;;-1:-1:-1;;;;;;20578:30:181;;20575:50;;;20621:1;20618;20611:12;20575:50;20654:4;20642:17;;-1:-1:-1;20685:14:181;20681:27;;;20671:38;;20668:58;;;20722:1;20719;20712:12;20990:127;21051:10;21046:3;21042:20;21039:1;21032:31;21082:4;21079:1;21072:15;21106:4;21103:1;21096:15;21951:241;22007:6;22060:2;22048:9;22039:7;22035:23;22031:32;22028:52;;;22076:1;22073;22066:12;22028:52;22115:9;22102:23;22134:28;22156:5;22134:28;:::i;22197:127::-;22258:10;22253:3;22249:20;22246:1;22239:31;22289:4;22286:1;22279:15;22313:4;22310:1;22303:15;22329:128;22396:9;;;22417:11;;;22414:37;;;22431:18;;:::i;22462:127::-;22523:10;22518:3;22514:20;22511:1;22504:31;22554:4;22551:1;22544:15;22578:4;22575:1;22568:15;22594:120;22634:1;22660;22650:35;;22665:18;;:::i;:::-;-1:-1:-1;22699:9:181;;22594:120::o;22719:112::-;22751:1;22777;22767:35;;22782:18;;:::i;:::-;-1:-1:-1;22816:9:181;;22719:112::o;22836:125::-;22901:9;;;22922:10;;;22919:36;;;22935:18;;:::i;22966:135::-;23005:3;23026:17;;;23023:43;;23046:18;;:::i;:::-;-1:-1:-1;23093:1:181;23082:13;;22966:135::o;24101:168::-;24174:9;;;24205;;24222:15;;;24216:22;;24202:37;24192:71;;24243:18;;:::i;25117:184::-;25187:6;25240:2;25228:9;25219:7;25215:23;25211:32;25208:52;;;25256:1;25253;25246:12;25208:52;-1:-1:-1;25279:16:181;;25117:184;-1:-1:-1;25117:184:181:o;25585:271::-;25768:6;25760;25755:3;25742:33;25724:3;25794:16;;25819:13;;;25794:16;25585:271;-1:-1:-1;25585:271:181:o;25861:674::-;26138:25;;;26194:2;26179:18;;26172:34;;;-1:-1:-1;;;;;26280:15:181;;;26275:2;26260:18;;26253:43;26332:15;;26327:2;26312:18;;26305:43;26397:10;26385:23;;26379:3;26364:19;;26357:52;26446:3;26233;26425:19;;26418:32;;;-1:-1:-1;;26467:62:181;;26509:19;;26501:6;26493;26467:62;:::i;:::-;26459:70;25861:674;-1:-1:-1;;;;;;;;;25861:674:181:o;26540:298::-;26723:6;26716:14;26709:22;26698:9;26691:41;26768:2;26763;26752:9;26748:18;26741:30;26672:4;26788:44;26828:2;26817:9;26813:18;26805:6;26788:44;:::i;26843:151::-;26933:4;26926:12;;;26912;;;26908:31;;26951:14;;26948:40;;;26968:18;;:::i;26999:422::-;27088:1;27131:5;27088:1;27145:270;27166:7;27156:8;27153:21;27145:270;;;27225:4;27221:1;27217:6;27213:17;27207:4;27204:27;27201:53;;;27234:18;;:::i;:::-;27284:7;27274:8;27270:22;27267:55;;;27304:16;;;;27267:55;27383:22;;;;27343:15;;;;27145:270;;;27149:3;26999:422;;;;;:::o;27426:806::-;27475:5;27505:8;27495:80;;-1:-1:-1;27546:1:181;27560:5;;27495:80;27594:4;27584:76;;-1:-1:-1;27631:1:181;27645:5;;27584:76;27676:4;27694:1;27689:59;;;;27762:1;27757:130;;;;27669:218;;27689:59;27719:1;27710:10;;27733:5;;;27757:130;27794:3;27784:8;27781:17;27778:43;;;27801:18;;:::i;:::-;-1:-1:-1;;27857:1:181;27843:16;;27872:5;;27669:218;;27971:2;27961:8;27958:16;27952:3;27946:4;27943:13;27939:36;27933:2;27923:8;27920:16;27915:2;27909:4;27906:12;27902:35;27899:77;27896:159;;;-1:-1:-1;28008:19:181;;;28040:5;;27896:159;28087:34;28112:8;28106:4;28087:34;:::i;:::-;28157:6;28153:1;28149:6;28145:19;28136:7;28133:32;28130:58;;;28168:18;;:::i;:::-;28206:20;;27426:806;-1:-1:-1;;;27426:806:181:o;28237:140::-;28295:5;28324:47;28365:4;28355:8;28351:19;28345:4;28324:47;:::i;28382:560::-;28673:10;28668:3;28664:20;28655:6;28650:3;28646:16;28642:43;28637:3;28630:56;28715:6;28711:1;28706:3;28702:11;28695:27;28731:55;28779:6;28731:55;:::i;:::-;28820:3;28816:16;;;;28811:2;28802:12;;28795:38;28858:2;28849:12;;28842:28;;;;28895:2;28886:12;;28879:28;28932:3;28923:13;;28382:560;-1:-1:-1;;28382:560:181:o;28947:268::-;29034:6;29087:2;29075:9;29066:7;29062:23;29058:32;29055:52;;;29103:1;29100;29093:12;29055:52;29135:9;29129:16;29154:31;29179:5;29154:31;:::i;29220:374::-;29433:10;29425:6;29421:23;29410:9;29403:42;29481:6;29476:2;29465:9;29461:18;29454:34;29524:2;29519;29508:9;29504:18;29497:30;29384:4;29544:44;29584:2;29573:9;29569:18;29561:6;29544:44;:::i;29599:708::-;29687:6;29695;29748:2;29736:9;29727:7;29723:23;29719:32;29716:52;;;29764:1;29761;29754:12;29716:52;29793:9;29787:16;29777:26;;29847:2;29836:9;29832:18;29826:25;-1:-1:-1;;;;;29866:6:181;29863:30;29860:50;;;29906:1;29903;29896:12;29860:50;29929:22;;29982:4;29974:13;;29970:27;-1:-1:-1;29960:55:181;;30011:1;30008;30001:12;29960:55;30040:2;30034:9;30065:48;30081:31;30109:2;30081:31;:::i;30065:48::-;30136:2;30129:5;30122:17;30176:7;30171:2;30166;30162;30158:11;30154:20;30151:33;30148:53;;;30197:1;30194;30187:12;30148:53;30210:67;30274:2;30269;30262:5;30258:14;30253:2;30249;30245:11;30210:67;:::i;:::-;30296:5;30286:15;;;;;29599:708;;;;;:::o;30312:707::-;30633:3;30622:9;30615:22;30596:4;30660:59;30714:3;30703:9;30699:19;30691:6;30660:59;:::i;:::-;-1:-1:-1;;;;;30793:15:181;;;30788:2;30773:18;;30766:43;30840:2;30825:18;;30818:34;;;30888:15;;30883:2;30868:18;;30861:43;30941:22;;;30935:3;30920:19;;30913:51;30981:32;30945:6;30998;30981:32;:::i;:::-;30973:40;30312:707;-1:-1:-1;;;;;;;;30312:707:181:o;35298:245::-;35365:6;35418:2;35406:9;35397:7;35393:23;35389:32;35386:52;;;35434:1;35431;35424:12;35386:52;35466:9;35460:16;35485:28;35507:5;35485:28;:::i;38520:287::-;38649:3;38687:6;38681:13;38703:66;38762:6;38757:3;38750:4;38742:6;38738:17;38703:66;:::i;39518:219::-;39667:2;39656:9;39649:21;39630:4;39687:44;39727:2;39716:9;39712:18;39704:6;39687:44;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"3912400","executionCost":"4454","totalCost":"3916854"},"external":{"addSequencer(address)":"32678","approvedSequencers(address)":"2589","bumpTransfer(bytes32)":"infinite","domain()":"2377","enrollRemoteRouter(uint32,bytes32)":"30782","execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes))":"infinite","forceReceiveLocal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32))":"infinite","forceUpdateSlippage((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256)":"infinite","nonce()":"2314","remote(uint32)":"2564","removeSequencer(address)":"32601","routedTransfers(bytes32)":"infinite","setXAppConnectionManager(address)":"infinite","transferStatus(bytes32)":"2586","xAppConnectionManager()":"2343","xcall(uint32,address,address,address,uint256,uint256,bytes)":"infinite","xcallIntoLocal(uint32,address,address,address,uint256,uint256,bytes)":"infinite"},"internal":{"_bumpTransfer(bytes32)":"infinite","_executeCalldata(bytes32,uint256,address,bool,struct TransferInfo calldata)":"infinite","_executePortalTransfer(bytes32,bytes32,uint256,address)":"infinite","_executeSanityChecks(struct ExecuteArgs calldata)":"infinite","_handleExecuteLiquidity(bytes32,bytes32,bool,struct ExecuteArgs calldata)":"infinite","_handleExecuteTransaction(struct ExecuteArgs calldata,uint256,address,bytes32,bool)":"infinite","_muldiv(uint256,uint256,uint256)":"189","_mustHaveRemote(uint32)":"infinite","_recoverSignature(bytes32,bytes calldata)":"infinite","_sendMessageAndEmit(bytes32,struct TransferInfo memory,address,uint256,bytes32,struct TokenId memory,address,bool)":"infinite","_xcall(struct TransferInfo memory,address,uint256)":"infinite"}},"methodIdentifiers":{"addSequencer(address)":"8a336231","approvedSequencers(address)":"159e041f","bumpTransfer(bytes32)":"2424401f","domain()":"c2fb26a6","enrollRemoteRouter(uint32,bytes32)":"b49c53a7","execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes))":"63e3e7d2","forceReceiveLocal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32))":"cb8058ba","forceUpdateSlippage((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256)":"54126711","nonce()":"affed0e0","remote(uint32)":"121cca31","removeSequencer(address)":"6989ca7c","routedTransfers(bytes32)":"1a8bc0e1","setXAppConnectionManager(address)":"41bdc8b5","transferStatus(bytes32)":"bfd79030","xAppConnectionManager()":"3339df96","xcall(uint32,address,address,address,uint256,uint256,bytes)":"8aac16ba","xcallIntoLocal(uint32,address,address,address,uint256,uint256,bytes)":"91f5de79"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AssetLogic__getConfig_notRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__getTokenIndexFromStableSwapPool_notExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_feeOnTransferNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_nativeAssetNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleOutgoingAsset_notNative\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__addRemote_invalidDomain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__addRemote_invalidRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__addSequencer_alreadyApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__addSequencer_invalidSequencer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__bumpTransfer_noRelayerVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__bumpTransfer_valueIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__excecute_insufficientGas\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_badFastLiquidityStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_externalCallFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_invalidRouterSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_invalidSequencerSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_maxRoutersExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_notApprovedForPortals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_notReconciled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_notSupportedRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_notSupportedSequencer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_unapprovedSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_wrongDomain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__forceReceiveLocal_notDestination\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__forceUpdateSlippage_invalidSlippage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__forceUpdateSlippage_notDestination\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__mustHaveRemote_destinationNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__onlyDelegate_notDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__removeSequencer_notApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__setXAppConnectionManager_domainsDontMatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__xcall_capReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__xcall_emptyTo\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__xcall_invalidSlippage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__xcall_nativeAssetNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet_xcall__emptyLocalAsset\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AavePortalMintUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"routers\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"routerSignatures\",\"type\":\"bytes[]\"},{\"internalType\":\"address\",\"name\":\"sequencer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSignature\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ExecuteArgs\",\"name\":\"args\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"local\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"ExternalCalldataExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"}],\"name\":\"ForceReceiveLocal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"remote\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RemoteAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sequencer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SequencerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sequencer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SequencerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"}],\"name\":\"SlippageUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"increase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"TransferRelayerFeesIncreased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"XAppConnectionManagerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct TransferInfo\",\"name\":\"params\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"local\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"messageBody\",\"type\":\"bytes\"}],\"name\":\"XCalled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"}],\"name\":\"addSequencer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"}],\"name\":\"approvedSequencers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferId\",\"type\":\"bytes32\"}],\"name\":\"bumpTransfer\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domain\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_router\",\"type\":\"bytes32\"}],\"name\":\"enrollRemoteRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"routers\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"routerSignatures\",\"type\":\"bytes[]\"},{\"internalType\":\"address\",\"name\":\"sequencer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSignature\",\"type\":\"bytes\"}],\"internalType\":\"struct ExecuteArgs\",\"name\":\"_args\",\"type\":\"tuple\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"_params\",\"type\":\"tuple\"}],\"name\":\"forceReceiveLocal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"_params\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_slippage\",\"type\":\"uint256\"}],\"name\":\"forceUpdateSlippage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"}],\"name\":\"remote\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"}],\"name\":\"removeSequencer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferId\",\"type\":\"bytes32\"}],\"name\":\"routedTransfers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_xAppConnectionManager\",\"type\":\"address\"}],\"name\":\"setXAppConnectionManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferId\",\"type\":\"bytes32\"}],\"name\":\"transferStatus\",\"outputs\":[{\"internalType\":\"enum DestinationTransferStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xAppConnectionManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destination\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_slippage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_callData\",\"type\":\"bytes\"}],\"name\":\"xcall\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destination\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_slippage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_callData\",\"type\":\"bytes\"}],\"name\":\"xcallIntoLocal\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"AavePortalMintUnbacked(bytes32,address,address,uint256)\":{\"params\":{\"amount\":\"- The amount of asset that was provided by Aave Portal\",\"asset\":\"- The asset that was provided by Aave Portal\",\"router\":\"- The authorized router that used Aave Portal liquidity\",\"transferId\":\"- The unique identifier of the crosschain transaction\"}},\"Executed(bytes32,address,address,((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),address,uint256,address)\":{\"details\":\"`execute` may be called when providing fast liquidity or when processing a reconciled (slow) transfer.\",\"params\":{\"amount\":\"- The amount of transferring asset the recipient address receives or the external call is executed with.\",\"args\":\"- The `ExecuteArgs` provided to the function.\",\"asset\":\"- The asset the recipient is given or the external call is executed with. Should be the adopted asset on that chain.\",\"caller\":\"- The account that called the function.\",\"local\":\"- The local asset that was either supplied by the router for a fast-liquidity transfer or minted by the bridge in a reconciled (slow) transfer. Could be the same as the adopted `asset` param.\",\"to\":\"- The recipient `TransferInfo.to` provided, created as indexed parameter.\",\"transferId\":\"- The unique identifier of the crosschain transfer.\"}},\"ExternalCalldataExecuted(bytes32,bool,bytes)\":{\"params\":{\"returnData\":\"- Return bytes from the IXReceiver\",\"success\":\"- Whether calldata succeeded\",\"transferId\":\"- The unique identifier of the crosschain transfer.\"}},\"ForceReceiveLocal(bytes32)\":{\"params\":{\"transferId\":\"- The unique identifier of the crosschain transaction\"}},\"RemoteAdded(uint32,address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"domain\":\"- The domain the remote instance is on\",\"remote\":\"- The address of the remote instance\"}},\"SequencerAdded(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"sequencer\":\"- The sequencer address to be added or removed\"}},\"SequencerRemoved(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"sequencer\":\"- The sequencer address to be added or removed\"}},\"SlippageUpdated(bytes32,uint256)\":{\"params\":{\"slippage\":\"- The updated slippage boundary\",\"transferId\":\"- The unique identifier of the crosschain transaction\"}},\"TransferRelayerFeesIncreased(bytes32,uint256,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"increase\":\"- The additional amount fees increased by\",\"transferId\":\"- The unique identifier of the crosschain transaction\"}},\"XAppConnectionManagerSet(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"updated\":\"- The updated address\"}},\"XCalled(bytes32,uint256,bytes32,(uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address,uint256,address,bytes)\":{\"params\":{\"amount\":\"- The amount sent in with xcall\",\"asset\":\"- The asset sent in with xcall\",\"local\":\"- The local asset that is controlled by the bridge and can be burned/minted\",\"messageHash\":\"- The hash of the message bytes (containing all transfer info) that were bridged.\",\"nonce\":\"- The bridge nonce of the transfer on the origin domain.\",\"params\":\"- The `TransferInfo` provided to the function.\",\"transferId\":\"- The unique identifier of the crosschain transfer.\"}}},\"kind\":\"dev\",\"methods\":{\"addSequencer(address)\":{\"params\":{\"_sequencer\":\"- The sequencer address to add.\"}},\"bumpTransfer(bytes32)\":{\"params\":{\"_transferId\":\"- The unique identifier of the crosschain transaction\"}},\"enrollRemoteRouter(uint32,bytes32)\":{\"params\":{\"_domain\":\"The domain of the remote xApp Router\",\"_router\":\"The address of the remote xApp Router\"}},\"execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes))\":{\"details\":\"Can be called before or after `handle` [reconcile] is called (regarding the same transfer), depending on whether the fast liquidity route (i.e. funds provided by routers) is being used for this transfer. As a result, executed calldata (including properties like `originSender`) may or may not be verified depending on whether the reconcile has been completed (i.e. the optimistic confirmation period has elapsed).\",\"params\":{\"_args\":\"- ExecuteArgs arguments.\"},\"returns\":{\"_0\":\"bytes32 - The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for reconciliation to occur.\"}},\"forceReceiveLocal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32))\":{\"details\":\"Calldata will still be executed with the local asset. `IXReceiver` contracts should be able to handle local assets in event of failures.\",\"params\":{\"_params\":\"TransferInfo associated with the transfer\"}},\"forceUpdateSlippage((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256)\":{\"params\":{\"_params\":\"TransferInfo associated with the transfer\",\"_slippage\":\"The updated slippage\"}},\"removeSequencer(address)\":{\"params\":{\"_sequencer\":\"- The sequencer address to remove.\"}},\"setXAppConnectionManager(address)\":{\"params\":{\"_xAppConnectionManager\":\"The address of the xAppConnectionManager contract\"}}},\"version\":1},\"userdoc\":{\"events\":{\"AavePortalMintUnbacked(bytes32,address,address,uint256)\":{\"notice\":\"Emitted when a router used Aave Portal liquidity for fast transfer\"},\"Executed(bytes32,address,address,((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),address,uint256,address)\":{\"notice\":\"Emitted when `execute` is called on the destination domain of a transfer.\"},\"ExternalCalldataExecuted(bytes32,bool,bytes)\":{\"notice\":\"Emitted when a transfer has its external data executed\"},\"ForceReceiveLocal(bytes32)\":{\"notice\":\"Emitted when `forceReceiveLocal` is called by a user-delegated EOA on the destination domain\"},\"RemoteAdded(uint32,address,address)\":{\"notice\":\"Emitted when a new remote instance is added\"},\"SequencerAdded(address,address)\":{\"notice\":\"Emitted when a sequencer is added or removed from allowlists\"},\"SequencerRemoved(address,address)\":{\"notice\":\"Emitted when a sequencer is added or removed from allowlists\"},\"SlippageUpdated(bytes32,uint256)\":{\"notice\":\"Emitted when `forceUpdateSlippage` is called by user-delegated EOA on the destination domain\"},\"TransferRelayerFeesIncreased(bytes32,uint256,address)\":{\"notice\":\"Emitted when `_bumpTransfer` is called by an user on the origin domain both in `xcall` and `bumpTransfer`\"},\"XAppConnectionManagerSet(address,address)\":{\"notice\":\"Emitted `xAppConnectionManager` is updated\"},\"XCalled(bytes32,uint256,bytes32,(uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address,uint256,address,bytes)\":{\"notice\":\"Emitted when `xcall` is called on the origin domain of a transfer.\"}},\"kind\":\"user\",\"methods\":{\"addSequencer(address)\":{\"notice\":\"Used to add an approved sequencer to the allowlist.\"},\"bumpTransfer(bytes32)\":{\"notice\":\"Anyone can call this function on the origin domain to increase the relayer fee for a transfer.\"},\"enrollRemoteRouter(uint32,bytes32)\":{\"notice\":\"Register the address of a Router contract for the same xApp on a remote chain\"},\"execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes))\":{\"notice\":\"Called on a destination domain to disburse correct assets to end recipient and execute any included calldata.\"},\"forceReceiveLocal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32))\":{\"notice\":\"Allows a user-specified account to withdraw the local asset directly\"},\"forceUpdateSlippage((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256)\":{\"notice\":\"Allows a user-specified account to update the slippage they are willing to take on destination transfers.\"},\"removeSequencer(address)\":{\"notice\":\"Used to remove an approved sequencer from the allowlist.\"},\"setXAppConnectionManager(address)\":{\"notice\":\"Modify the contract the xApp uses to validate Replica contracts\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/BridgeFacet.sol\":\"BridgeFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        bytes32 r,\\n        bytes32 vs\\n    ) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(\\n        bytes32 hash,\\n        bytes32 r,\\n        bytes32 vs\\n    ) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n    }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator\\n    ) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1);\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator,\\n        Rounding rounding\\n    ) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10**64) {\\n                value /= 10**64;\\n                result += 64;\\n            }\\n            if (value >= 10**32) {\\n                value /= 10**32;\\n                result += 32;\\n            }\\n            if (value >= 10**16) {\\n                value /= 10**16;\\n                result += 16;\\n            }\\n            if (value >= 10**8) {\\n                value /= 10**8;\\n                result += 8;\\n            }\\n            if (value >= 10**4) {\\n                value /= 10**4;\\n                result += 4;\\n            }\\n            if (value >= 10**2) {\\n                value /= 10**2;\\n                result += 2;\\n            }\\n            if (value >= 10**1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n  AppStorage internal s;\\n\\n  // ========== Custom Errors ===========\\n\\n  error BaseConnextFacet__onlyOwner_notOwner();\\n  error BaseConnextFacet__onlyProposed_notProposedOwner();\\n  error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n  error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n  error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n  error BaseConnextFacet__whenNotPaused_paused();\\n  error BaseConnextFacet__nonReentrant_reentrantCall();\\n  error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n  error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n  error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @dev Prevents a contract from calling itself, directly or indirectly.\\n   * Calling a `nonReentrant` function from another `nonReentrant`\\n   * function is not supported. It is possible to prevent this from happening\\n   * by making the `nonReentrant` function external, and making it call a\\n   * `private` function that does the actual work.\\n   */\\n  modifier nonReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._status = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._status = Constants.NOT_ENTERED;\\n  }\\n\\n  modifier nonXCallReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._xcallStatus = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._xcallStatus = Constants.NOT_ENTERED;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and router role.\\n   */\\n  modifier onlyOwnerOrRouter() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n      revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and watcher role.\\n   */\\n  modifier onlyOwnerOrWatcher() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n      revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and admin role.\\n   */\\n  modifier onlyOwnerOrAdmin() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n      revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if all functionality is paused\\n   */\\n  modifier whenNotPaused() {\\n    if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n    _;\\n  }\\n\\n  // ============ Internal functions ============\\n  /**\\n   * @notice Indicates if the router allowlist has been removed\\n   */\\n  function _isRouterAllowlistRemoved() internal view returns (bool) {\\n    return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n    address adopted = AssetLogic.getConfig(_key).adopted;\\n    if (adopted == address(0)) {\\n      revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n    }\\n    return adopted;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n    address representation = AssetLogic.getConfig(_key).representation;\\n    // If this is address(0), then there is no mintable token for this asset on this\\n    // domain\\n    return representation;\\n  }\\n\\n  /**\\n   * @notice Calculates a transferId\\n   */\\n  function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_params));\\n  }\\n\\n  /**\\n   * @notice Internal utility function that combines\\n   *         `_origin` and `_nonce`.\\n   * @dev Both origin and nonce should be less than 2^32 - 1\\n   * @param _origin Domain of chain where the transfer originated\\n   * @param _nonce The unique identifier for the message from origin to destination\\n   * @return Returns (`_origin` << 32) & `_nonce`\\n   */\\n  function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n    return (uint64(_origin) << 32) | _nonce;\\n  }\\n\\n  function _getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address) {\\n    return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n  }\\n\\n  function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n    return AssetLogic.getCanonicalTokenId(_candidate, s);\\n  }\\n\\n  function _getLocalAndAdoptedToken(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address, address) {\\n    address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n    address _adopted = _getAdoptedAsset(_key);\\n    return (_local, _adopted);\\n  }\\n\\n  function _isLocalOrigin(address _token) internal view returns (bool) {\\n    return AssetLogic.isLocalOrigin(_token, s);\\n  }\\n\\n  function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n    TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n    bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n    if (!AssetLogic.getConfig(_key).approval) {\\n      revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n    }\\n    return (_canonical, _key);\\n  }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/BridgeFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\nimport {ECDSA} from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport {ExcessivelySafeCall} from \\\"../../../shared/libraries/ExcessivelySafeCall.sol\\\";\\nimport {TypedMemView} from \\\"../../../shared/libraries/TypedMemView.sol\\\";\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IOutbox} from \\\"../../../messaging/interfaces/IOutbox.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\n\\nimport {BaseConnextFacet} from \\\"./BaseConnextFacet.sol\\\";\\n\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {ExecuteArgs, TransferInfo, DestinationTransferStatus, TokenConfig} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {BridgeMessage} from \\\"../libraries/BridgeMessage.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\n\\nimport {IXReceiver} from \\\"../interfaces/IXReceiver.sol\\\";\\nimport {IAavePool} from \\\"../interfaces/IAavePool.sol\\\";\\nimport {IBridgeToken} from \\\"../interfaces/IBridgeToken.sol\\\";\\n\\ncontract BridgeFacet is BaseConnextFacet {\\n  // ============ Libraries ============\\n\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n  using BridgeMessage for bytes29;\\n\\n  // ========== Custom Errors ===========\\n\\n  error BridgeFacet__addRemote_invalidRouter();\\n  error BridgeFacet__addRemote_invalidDomain();\\n  error BridgeFacet__onlyDelegate_notDelegate();\\n  error BridgeFacet__addSequencer_invalidSequencer();\\n  error BridgeFacet__addSequencer_alreadyApproved();\\n  error BridgeFacet__removeSequencer_notApproved();\\n  error BridgeFacet__setXAppConnectionManager_domainsDontMatch();\\n  error BridgeFacet__xcall_nativeAssetNotSupported();\\n  error BridgeFacet__xcall_emptyTo();\\n  error BridgeFacet__xcall_invalidSlippage();\\n  error BridgeFacet_xcall__emptyLocalAsset();\\n  error BridgeFacet__xcall_capReached();\\n  error BridgeFacet__execute_unapprovedSender();\\n  error BridgeFacet__execute_wrongDomain();\\n  error BridgeFacet__execute_notSupportedSequencer();\\n  error BridgeFacet__execute_invalidSequencerSignature();\\n  error BridgeFacet__execute_maxRoutersExceeded();\\n  error BridgeFacet__execute_notSupportedRouter();\\n  error BridgeFacet__execute_invalidRouterSignature();\\n  error BridgeFacet__execute_notApprovedForPortals();\\n  error BridgeFacet__execute_badFastLiquidityStatus();\\n  error BridgeFacet__execute_notReconciled();\\n  error BridgeFacet__execute_externalCallFailed();\\n  error BridgeFacet__excecute_insufficientGas();\\n  error BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn();\\n  error BridgeFacet__bumpTransfer_valueIsZero();\\n  error BridgeFacet__bumpTransfer_noRelayerVault();\\n  error BridgeFacet__forceUpdateSlippage_invalidSlippage();\\n  error BridgeFacet__forceUpdateSlippage_notDestination();\\n  error BridgeFacet__forceReceiveLocal_notDestination();\\n  error BridgeFacet__mustHaveRemote_destinationNotSupported();\\n\\n  // ============ Properties ============\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted when `xcall` is called on the origin domain of a transfer.\\n   * @param transferId - The unique identifier of the crosschain transfer.\\n   * @param nonce - The bridge nonce of the transfer on the origin domain.\\n   * @param messageHash - The hash of the message bytes (containing all transfer info) that were bridged.\\n   * @param params - The `TransferInfo` provided to the function.\\n   * @param asset - The asset sent in with xcall\\n   * @param amount - The amount sent in with xcall\\n   * @param local - The local asset that is controlled by the bridge and can be burned/minted\\n   */\\n  event XCalled(\\n    bytes32 indexed transferId,\\n    uint256 indexed nonce,\\n    bytes32 indexed messageHash,\\n    TransferInfo params,\\n    address asset,\\n    uint256 amount,\\n    address local,\\n    bytes messageBody\\n  );\\n\\n  /**\\n   * @notice Emitted when a transfer has its external data executed\\n   * @param transferId - The unique identifier of the crosschain transfer.\\n   * @param success - Whether calldata succeeded\\n   * @param returnData - Return bytes from the IXReceiver\\n   */\\n  event ExternalCalldataExecuted(bytes32 indexed transferId, bool success, bytes returnData);\\n\\n  /**\\n   * @notice Emitted when `execute` is called on the destination domain of a transfer.\\n   * @dev `execute` may be called when providing fast liquidity or when processing a reconciled (slow) transfer.\\n   * @param transferId - The unique identifier of the crosschain transfer.\\n   * @param to - The recipient `TransferInfo.to` provided, created as indexed parameter.\\n   * @param asset - The asset the recipient is given or the external call is executed with. Should be the\\n   * adopted asset on that chain.\\n   * @param args - The `ExecuteArgs` provided to the function.\\n   * @param local - The local asset that was either supplied by the router for a fast-liquidity transfer or\\n   * minted by the bridge in a reconciled (slow) transfer. Could be the same as the adopted `asset` param.\\n   * @param amount - The amount of transferring asset the recipient address receives or the external call is\\n   * executed with.\\n   * @param caller - The account that called the function.\\n   */\\n  event Executed(\\n    bytes32 indexed transferId,\\n    address indexed to,\\n    address indexed asset,\\n    ExecuteArgs args,\\n    address local,\\n    uint256 amount,\\n    address caller\\n  );\\n\\n  /**\\n   * @notice Emitted when `_bumpTransfer` is called by an user on the origin domain both in\\n   * `xcall` and `bumpTransfer`\\n   * @param transferId - The unique identifier of the crosschain transaction\\n   * @param increase - The additional amount fees increased by\\n   * @param caller - The account that called the function\\n   */\\n  event TransferRelayerFeesIncreased(bytes32 indexed transferId, uint256 increase, address caller);\\n\\n  /**\\n   * @notice Emitted when `forceUpdateSlippage` is called by user-delegated EOA\\n   * on the destination domain\\n   * @param transferId - The unique identifier of the crosschain transaction\\n   * @param slippage - The updated slippage boundary\\n   */\\n  event SlippageUpdated(bytes32 indexed transferId, uint256 slippage);\\n\\n  /**\\n   * @notice Emitted when `forceReceiveLocal` is called by a user-delegated EOA\\n   * on the destination domain\\n   * @param transferId - The unique identifier of the crosschain transaction\\n   */\\n  event ForceReceiveLocal(bytes32 indexed transferId);\\n\\n  /**\\n   * @notice Emitted when a router used Aave Portal liquidity for fast transfer\\n   * @param transferId - The unique identifier of the crosschain transaction\\n   * @param router - The authorized router that used Aave Portal liquidity\\n   * @param asset - The asset that was provided by Aave Portal\\n   * @param amount - The amount of asset that was provided by Aave Portal\\n   */\\n  event AavePortalMintUnbacked(bytes32 indexed transferId, address indexed router, address asset, uint256 amount);\\n\\n  /**\\n   * @notice Emitted when a new remote instance is added\\n   * @param domain - The domain the remote instance is on\\n   * @param remote - The address of the remote instance\\n   * @param caller - The account that called the function\\n   */\\n  event RemoteAdded(uint32 domain, address remote, address caller);\\n\\n  /**\\n   * @notice Emitted when a sequencer is added or removed from allowlists\\n   * @param sequencer - The sequencer address to be added or removed\\n   * @param caller - The account that called the function\\n   */\\n  event SequencerAdded(address sequencer, address caller);\\n\\n  /**\\n   * @notice Emitted when a sequencer is added or removed from allowlists\\n   * @param sequencer - The sequencer address to be added or removed\\n   * @param caller - The account that called the function\\n   */\\n  event SequencerRemoved(address sequencer, address caller);\\n\\n  /**\\n   * @notice Emitted `xAppConnectionManager` is updated\\n   * @param updated - The updated address\\n   * @param caller - The account that called the function\\n   */\\n  event XAppConnectionManagerSet(address updated, address caller);\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Only accept a transfer's designated delegate.\\n   * @param _params The TransferInfo of the transfer.\\n   */\\n  modifier onlyDelegate(TransferInfo calldata _params) {\\n    if (_params.delegate != msg.sender) revert BridgeFacet__onlyDelegate_notDelegate();\\n    _;\\n  }\\n\\n  // ============ Getters ============\\n\\n  function routedTransfers(bytes32 _transferId) public view returns (address[] memory) {\\n    return s.routedTransfers[_transferId];\\n  }\\n\\n  function transferStatus(bytes32 _transferId) public view returns (DestinationTransferStatus) {\\n    return s.transferStatus[_transferId];\\n  }\\n\\n  function remote(uint32 _domain) public view returns (address) {\\n    return TypeCasts.bytes32ToAddress(s.remotes[_domain]);\\n  }\\n\\n  function domain() public view returns (uint32) {\\n    return s.domain;\\n  }\\n\\n  function nonce() public view returns (uint256) {\\n    return s.nonce;\\n  }\\n\\n  function approvedSequencers(address _sequencer) external view returns (bool) {\\n    return s.approvedSequencers[_sequencer];\\n  }\\n\\n  function xAppConnectionManager() public view returns (address) {\\n    return address(s.xAppConnectionManager);\\n  }\\n\\n  // ============ Admin Functions ==============\\n\\n  /**\\n   * @notice Used to add an approved sequencer to the allowlist.\\n   * @param _sequencer - The sequencer address to add.\\n   */\\n  function addSequencer(address _sequencer) external onlyOwnerOrAdmin {\\n    if (_sequencer == address(0)) revert BridgeFacet__addSequencer_invalidSequencer();\\n\\n    if (s.approvedSequencers[_sequencer]) revert BridgeFacet__addSequencer_alreadyApproved();\\n    s.approvedSequencers[_sequencer] = true;\\n\\n    emit SequencerAdded(_sequencer, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Used to remove an approved sequencer from the allowlist.\\n   * @param _sequencer - The sequencer address to remove.\\n   */\\n  function removeSequencer(address _sequencer) external onlyOwnerOrAdmin {\\n    if (!s.approvedSequencers[_sequencer]) revert BridgeFacet__removeSequencer_notApproved();\\n    delete s.approvedSequencers[_sequencer];\\n\\n    emit SequencerRemoved(_sequencer, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Modify the contract the xApp uses to validate Replica contracts\\n   * @param _xAppConnectionManager The address of the xAppConnectionManager contract\\n   */\\n  function setXAppConnectionManager(address _xAppConnectionManager) external onlyOwnerOrAdmin {\\n    IConnectorManager manager = IConnectorManager(_xAppConnectionManager);\\n    if (manager.localDomain() != s.domain) {\\n      revert BridgeFacet__setXAppConnectionManager_domainsDontMatch();\\n    }\\n    emit XAppConnectionManagerSet(_xAppConnectionManager, msg.sender);\\n    s.xAppConnectionManager = manager;\\n  }\\n\\n  /**\\n   * @notice Register the address of a Router contract for the same xApp on a remote chain\\n   * @param _domain The domain of the remote xApp Router\\n   * @param _router The address of the remote xApp Router\\n   */\\n  function enrollRemoteRouter(uint32 _domain, bytes32 _router) external onlyOwnerOrAdmin {\\n    if (_router == bytes32(\\\"\\\")) revert BridgeFacet__addRemote_invalidRouter();\\n\\n    // Make sure we aren't setting the current domain (or an empty one) as the connextion.\\n    if (_domain == 0 || _domain == s.domain) {\\n      revert BridgeFacet__addRemote_invalidDomain();\\n    }\\n\\n    s.remotes[_domain] = _router;\\n    emit RemoteAdded(_domain, TypeCasts.bytes32ToAddress(_router), msg.sender);\\n  }\\n\\n  // ============ Public Functions: Bridge ==============\\n\\n  function xcall(\\n    uint32 _destination,\\n    address _to,\\n    address _asset,\\n    address _delegate,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    bytes calldata _callData\\n  ) external payable nonXCallReentrant returns (bytes32) {\\n    // NOTE: Here, we fill in as much information as we can for the TransferInfo.\\n    // Some info is left blank and will be assigned in the internal `_xcall` function (e.g.\\n    // `normalizedIn`, `bridgedAmt`, canonical info, etc).\\n    TransferInfo memory params = TransferInfo({\\n      to: _to,\\n      callData: _callData,\\n      originDomain: s.domain,\\n      destinationDomain: _destination,\\n      delegate: _delegate,\\n      // `receiveLocal: false` indicates we should always deliver the adopted asset on the\\n      // destination chain, swapping from the local asset if needed.\\n      receiveLocal: false,\\n      slippage: _slippage,\\n      originSender: msg.sender,\\n      // The following values should be assigned in _xcall.\\n      nonce: 0,\\n      canonicalDomain: 0,\\n      bridgedAmt: 0,\\n      normalizedIn: 0,\\n      canonicalId: bytes32(0)\\n    });\\n    return _xcall(params, _asset, _amount);\\n  }\\n\\n  function xcallIntoLocal(\\n    uint32 _destination,\\n    address _to,\\n    address _asset,\\n    address _delegate,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    bytes calldata _callData\\n  ) external payable nonXCallReentrant returns (bytes32) {\\n    // NOTE: Here, we fill in as much information as we can for the TransferInfo.\\n    // Some info is left blank and will be assigned in the internal `_xcall` function (e.g.\\n    // `normalizedIn`, `bridgedAmt`, canonical info, etc).\\n    TransferInfo memory params = TransferInfo({\\n      to: _to,\\n      callData: _callData,\\n      originDomain: s.domain,\\n      destinationDomain: _destination,\\n      delegate: _delegate,\\n      // `receiveLocal: true` indicates we should always deliver the local asset on the\\n      // destination chain, and NOT swap into any adopted assets.\\n      receiveLocal: true,\\n      slippage: _slippage,\\n      originSender: msg.sender,\\n      // The following values should be assigned in _xcall.\\n      nonce: 0,\\n      canonicalDomain: 0,\\n      bridgedAmt: 0,\\n      normalizedIn: 0,\\n      canonicalId: bytes32(0)\\n    });\\n    return _xcall(params, _asset, _amount);\\n  }\\n\\n  /**\\n   * @notice Called on a destination domain to disburse correct assets to end recipient and execute any included\\n   * calldata.\\n   *\\n   * @dev Can be called before or after `handle` [reconcile] is called (regarding the same transfer), depending on\\n   * whether the fast liquidity route (i.e. funds provided by routers) is being used for this transfer. As a result,\\n   * executed calldata (including properties like `originSender`) may or may not be verified depending on whether the\\n   * reconcile has been completed (i.e. the optimistic confirmation period has elapsed).\\n   *\\n   * @param _args - ExecuteArgs arguments.\\n   * @return bytes32 - The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for\\n   * reconciliation to occur.\\n   */\\n  function execute(ExecuteArgs calldata _args) external nonReentrant whenNotPaused returns (bytes32) {\\n    (bytes32 transferId, DestinationTransferStatus status) = _executeSanityChecks(_args);\\n\\n    DestinationTransferStatus updated = status == DestinationTransferStatus.Reconciled\\n      ? DestinationTransferStatus.Completed\\n      : DestinationTransferStatus.Executed;\\n\\n    s.transferStatus[transferId] = updated;\\n\\n    // Supply assets to target recipient. Use router liquidity when this is a fast transfer, or mint bridge tokens\\n    // when this is a slow transfer.\\n    // NOTE: Asset will be adopted unless specified to `receiveLocal` in params.\\n    (uint256 amountOut, address asset, address local) = _handleExecuteLiquidity(\\n      transferId,\\n      AssetLogic.calculateCanonicalHash(_args.params.canonicalId, _args.params.canonicalDomain),\\n      updated != DestinationTransferStatus.Completed,\\n      _args\\n    );\\n\\n    // Execute the transaction using the designated calldata.\\n    uint256 amount = _handleExecuteTransaction(\\n      _args,\\n      amountOut,\\n      asset,\\n      transferId,\\n      updated == DestinationTransferStatus.Completed\\n    );\\n\\n    // Emit event.\\n    emit Executed(transferId, _args.params.to, asset, _args, local, amount, msg.sender);\\n\\n    return transferId;\\n  }\\n\\n  /**\\n   * @notice Anyone can call this function on the origin domain to increase the relayer fee for a transfer.\\n   * @param _transferId - The unique identifier of the crosschain transaction\\n   */\\n  function bumpTransfer(bytes32 _transferId) external payable nonReentrant whenNotPaused {\\n    if (msg.value == 0) revert BridgeFacet__bumpTransfer_valueIsZero();\\n    _bumpTransfer(_transferId);\\n  }\\n\\n  function _bumpTransfer(bytes32 _transferId) internal {\\n    address relayerVault = s.relayerFeeVault;\\n    if (relayerVault == address(0)) revert BridgeFacet__bumpTransfer_noRelayerVault();\\n    Address.sendValue(payable(relayerVault), msg.value);\\n\\n    emit TransferRelayerFeesIncreased(_transferId, msg.value, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Allows a user-specified account to update the slippage they are willing\\n   * to take on destination transfers.\\n   *\\n   * @param _params TransferInfo associated with the transfer\\n   * @param _slippage The updated slippage\\n   */\\n  function forceUpdateSlippage(TransferInfo calldata _params, uint256 _slippage) external onlyDelegate(_params) {\\n    // Sanity check slippage\\n    if (_slippage > Constants.BPS_FEE_DENOMINATOR) {\\n      revert BridgeFacet__forceUpdateSlippage_invalidSlippage();\\n    }\\n\\n    // Should only be called on destination domain\\n    if (_params.destinationDomain != s.domain) {\\n      revert BridgeFacet__forceUpdateSlippage_notDestination();\\n    }\\n\\n    // Get transferId\\n    bytes32 transferId = _calculateTransferId(_params);\\n\\n    // Store overrides\\n    s.slippage[transferId] = _slippage;\\n\\n    // Emit event\\n    emit SlippageUpdated(transferId, _slippage);\\n  }\\n\\n  /**\\n   * @notice Allows a user-specified account to withdraw the local asset directly\\n   * @dev Calldata will still be executed with the local asset. `IXReceiver` contracts\\n   * should be able to handle local assets in event of failures.\\n   * @param _params TransferInfo associated with the transfer\\n   */\\n  function forceReceiveLocal(TransferInfo calldata _params) external onlyDelegate(_params) {\\n    // Should only be called on destination domain\\n    if (_params.destinationDomain != s.domain) {\\n      revert BridgeFacet__forceReceiveLocal_notDestination();\\n    }\\n\\n    // Get transferId\\n    bytes32 transferId = _calculateTransferId(_params);\\n\\n    // Store overrides\\n    s.receiveLocalOverride[transferId] = true;\\n\\n    // Emit event\\n    emit ForceReceiveLocal(transferId);\\n  }\\n\\n  // ============ Internal: Bridge ============\\n\\n  /**\\n   * @notice Initiates a cross-chain transfer of funds and/or calldata\\n   *\\n   * @dev For ERC20 transfers, this contract must have approval to transfer the input (transacting) assets. The adopted\\n   * assets will be swapped for their local asset counterparts (i.e. bridgeable tokens) via the configured AMM if\\n   * necessary. In the event that the adopted assets *are* local bridge assets, no swap is needed. The local tokens will\\n   * then be sent via the bridge router. If the local assets are representational for an asset on another chain, we will\\n   * burn the tokens here. If the local assets are canonical (meaning that the adopted<>local asset pairing is native\\n   * to this chain), we will custody the tokens here.\\n   *\\n   * @param _params - The TransferInfo arguments.\\n   * @return bytes32 - The transfer ID of the newly created crosschain transfer.\\n   */\\n  function _xcall(\\n    TransferInfo memory _params,\\n    address _asset,\\n    uint256 _amount\\n  ) internal whenNotPaused returns (bytes32) {\\n    // Sanity checks.\\n    bytes32 remoteInstance;\\n    {\\n      // Not native asset.\\n      // NOTE: We support using address(0) as an intuitive default if you are sending a 0-value\\n      // transfer. In that edge case, address(0) will not be registered as a supported asset, but should\\n      // pass the `isLocalOrigin` check\\n      if (_asset == address(0) && _amount != 0) {\\n        revert BridgeFacet__xcall_nativeAssetNotSupported();\\n      }\\n\\n      // Destination domain is supported.\\n      // NOTE: This check implicitly also checks that `_params.destinationDomain != s.domain`, because the index\\n      // `s.domain` of `s.remotes` should always be `bytes32(0)`.\\n      remoteInstance = _mustHaveRemote(_params.destinationDomain);\\n\\n      // Recipient defined.\\n      if (_params.to == address(0)) {\\n        revert BridgeFacet__xcall_emptyTo();\\n      }\\n\\n      if (_params.slippage > Constants.BPS_FEE_DENOMINATOR) {\\n        revert BridgeFacet__xcall_invalidSlippage();\\n      }\\n    }\\n\\n    // NOTE: The local asset will stay address(0) if input asset is address(0) in the event of a\\n    // 0-value transfer. Otherwise, the local address will be retrieved below\\n    address local;\\n    bytes32 transferId;\\n    TokenId memory canonical;\\n    bool isCanonical;\\n    {\\n      // Check that the asset is supported -- can be either adopted or local.\\n      // NOTE: Above we check that you can only have `address(0)` as the input asset if this is a\\n      // 0-value transfer. Because 0-value transfers short-circuit all checks on mappings keyed on\\n      // hash(canonicalId, canonicalDomain), this is safe even when the address(0) asset is not\\n      // allowlisted.\\n      if (_asset != address(0)) {\\n        // Retrieve the canonical token information.\\n        bytes32 key;\\n        (canonical, key) = _getApprovedCanonicalId(_asset);\\n\\n        // Get the token config.\\n        TokenConfig storage config = AssetLogic.getConfig(key);\\n\\n        // Set boolean flag\\n        isCanonical = _params.originDomain == canonical.domain;\\n\\n        // Get the local address\\n        local = isCanonical ? TypeCasts.bytes32ToAddress(canonical.id) : config.representation;\\n        if (local == address(0)) {\\n          revert BridgeFacet_xcall__emptyLocalAsset();\\n        }\\n\\n        {\\n          // Enforce liquidity caps.\\n          // NOTE: Safe to do this before the swap because canonical domains do\\n          // not hit the AMMs (local == canonical).\\n          uint256 cap = config.cap;\\n          if (isCanonical && cap > 0) {\\n            // NOTE: this method includes router liquidity as part of the caps,\\n            // not only the minted amount\\n            uint256 newCustodiedAmount = config.custodied + _amount;\\n            if (newCustodiedAmount > cap) {\\n              revert BridgeFacet__xcall_capReached();\\n            }\\n            s.tokenConfigs[key].custodied = newCustodiedAmount;\\n          }\\n        }\\n\\n        // Update TransferInfo to reflect the canonical token information.\\n        _params.canonicalDomain = canonical.domain;\\n        _params.canonicalId = canonical.id;\\n\\n        if (_amount > 0) {\\n          // Transfer funds of input asset to the contract from the user.\\n          AssetLogic.handleIncomingAsset(_asset, _amount);\\n\\n          // Swap to the local asset from adopted if applicable.\\n          _params.bridgedAmt = AssetLogic.swapToLocalAssetIfNeeded(key, _asset, local, _amount, _params.slippage);\\n\\n          // Get the normalized amount in (amount sent in by user in 18 decimals).\\n          // NOTE: when getting the decimals from `_asset`, you don't know if you are looking for\\n          // adopted or local assets\\n          _params.normalizedIn = AssetLogic.normalizeDecimals(\\n            _asset == local ? config.representationDecimals : config.adoptedDecimals,\\n            Constants.DEFAULT_NORMALIZED_DECIMALS,\\n            _amount\\n          );\\n        }\\n      }\\n\\n      // Calculate the transfer ID.\\n      _params.nonce = s.nonce++;\\n      transferId = _calculateTransferId(_params);\\n    }\\n\\n    // Handle the relayer fee.\\n    // NOTE: This has to be done *after* transferring in + swapping assets because\\n    // the transfer id uses the amount that is bridged (i.e. amount in local asset).\\n    if (msg.value > 0) {\\n      _bumpTransfer(transferId);\\n    }\\n\\n    // Send the crosschain message.\\n    _sendMessageAndEmit(transferId, _params, _asset, _amount, remoteInstance, canonical, local, isCanonical);\\n\\n    return transferId;\\n  }\\n\\n  /**\\n   * @notice Holds the logic to recover the signer from an encoded payload.\\n   * @dev Will hash and convert to an eth signed message.\\n   * @param _signed The hash that was signed.\\n   * @param _sig The signature from which we will recover the signer.\\n   */\\n  function _recoverSignature(bytes32 _signed, bytes calldata _sig) internal pure returns (address) {\\n    // Recover\\n    return ECDSA.recover(ECDSA.toEthSignedMessageHash(_signed), _sig);\\n  }\\n\\n  /**\\n   * @notice Performs some sanity checks for `execute`.\\n   * @dev Need this to prevent stack too deep.\\n   * @param _args ExecuteArgs that were passed in to the `execute` call.\\n   */\\n  function _executeSanityChecks(ExecuteArgs calldata _args) private view returns (bytes32, DestinationTransferStatus) {\\n    // If the sender is not approved relayer, revert\\n    if (!s.approvedRelayers[msg.sender] && msg.sender != _args.params.delegate) {\\n      revert BridgeFacet__execute_unapprovedSender();\\n    }\\n\\n    // If this is not the destination domain revert\\n    if (_args.params.destinationDomain != s.domain) {\\n      revert BridgeFacet__execute_wrongDomain();\\n    }\\n\\n    // Path length refers to the number of facilitating routers. A transfer is considered 'multipath'\\n    // if multiple routers provide liquidity (in even 'shares') for it.\\n    uint256 pathLength = _args.routers.length;\\n\\n    // Derive transfer ID based on given arguments.\\n    bytes32 transferId = _calculateTransferId(_args.params);\\n\\n    // Retrieve the reconciled record.\\n    DestinationTransferStatus status = s.transferStatus[transferId];\\n\\n    if (pathLength != 0) {\\n      // Make sure number of routers is below the configured maximum.\\n      if (pathLength > s.maxRoutersPerTransfer) revert BridgeFacet__execute_maxRoutersExceeded();\\n\\n      // Check to make sure the transfer has not been reconciled (no need for routers if the transfer is\\n      // already reconciled; i.e. if there are routers provided, the transfer must *not* be reconciled).\\n      if (status != DestinationTransferStatus.None) revert BridgeFacet__execute_badFastLiquidityStatus();\\n\\n      // NOTE: The sequencer address may be empty and no signature needs to be provided in the case of the\\n      // slow liquidity route (i.e. no routers involved). Additionally, the sequencer does not need to be the\\n      // msg.sender.\\n      // Check to make sure the sequencer address provided is approved\\n      if (!s.approvedSequencers[_args.sequencer]) {\\n        revert BridgeFacet__execute_notSupportedSequencer();\\n      }\\n      // Check to make sure the sequencer provided did sign the transfer ID and router path provided.\\n      // NOTE: when caps are enforced, this signature also acts as protection from malicious routers looking\\n      // to block the network. routers could `execute` a fake transaction, and use up the rest of the `custodied`\\n      // bandwidth, causing future `execute`s to fail. this would also cause a break in the accounting, where the\\n      // `custodied` balance no longer tracks representation asset minting / burning\\n      if (\\n        _args.sequencer != _recoverSignature(keccak256(abi.encode(transferId, _args.routers)), _args.sequencerSignature)\\n      ) {\\n        revert BridgeFacet__execute_invalidSequencerSignature();\\n      }\\n\\n      // Hash the payload for which each router should have produced a signature.\\n      // Each router should have signed the `transferId` (which implicitly signs call params,\\n      // amount, and tokenId) as well as the `pathLength`, or the number of routers with which\\n      // they are splitting liquidity provision.\\n      bytes32 routerHash = keccak256(abi.encode(transferId, pathLength));\\n\\n      for (uint256 i; i < pathLength; ) {\\n        // Make sure the router is approved, if applicable.\\n        // If router ownership is renounced (_RouterOwnershipRenounced() is true), then the router allowlist\\n        // no longer applies and we can skip this approval step.\\n        if (!_isRouterAllowlistRemoved() && !s.routerConfigs[_args.routers[i]].approved) {\\n          revert BridgeFacet__execute_notSupportedRouter();\\n        }\\n\\n        // Validate the signature. We'll recover the signer's address using the expected payload and basic ECDSA\\n        // signature scheme recovery. The address for each signature must match the router's address.\\n        if (_args.routers[i] != _recoverSignature(routerHash, _args.routerSignatures[i])) {\\n          revert BridgeFacet__execute_invalidRouterSignature();\\n        }\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n    } else {\\n      // If there are no routers for this transfer, this `execute` must be a slow liquidity route; in which\\n      // case, we must make sure the transfer's been reconciled.\\n      if (status != DestinationTransferStatus.Reconciled) revert BridgeFacet__execute_notReconciled();\\n    }\\n\\n    return (transferId, status);\\n  }\\n\\n  /**\\n   * @notice Calculates fast transfer amount.\\n   * @param _amount Transfer amount\\n   * @param _numerator Numerator\\n   * @param _denominator Denominator\\n   */\\n  function _muldiv(\\n    uint256 _amount,\\n    uint256 _numerator,\\n    uint256 _denominator\\n  ) private pure returns (uint256) {\\n    return (_amount * _numerator) / _denominator;\\n  }\\n\\n  /**\\n   * @notice Execute liquidity process used when calling `execute`.\\n   * @dev Will revert with underflow if any router in the path has insufficient liquidity to provide\\n   * for the transfer.\\n   * @dev Need this to prevent stack too deep.\\n   */\\n  function _handleExecuteLiquidity(\\n    bytes32 _transferId,\\n    bytes32 _key,\\n    bool _isFast,\\n    ExecuteArgs calldata _args\\n  )\\n    private\\n    returns (\\n      uint256,\\n      address,\\n      address\\n    )\\n  {\\n    // Save the addresses of all routers providing liquidity for this transfer.\\n    s.routedTransfers[_transferId] = _args.routers;\\n\\n    // Get the local asset contract address (if applicable).\\n    address local;\\n    if (_args.params.canonicalDomain != 0) {\\n      local = _getLocalAsset(_key, _args.params.canonicalId, _args.params.canonicalDomain);\\n    }\\n\\n    // If this is a zero-value transfer, short-circuit remaining logic.\\n    if (_args.params.bridgedAmt == 0) {\\n      return (0, local, local);\\n    }\\n\\n    // Get the receive local status\\n    bool receiveLocal = _args.params.receiveLocal || s.receiveLocalOverride[_transferId];\\n\\n    uint256 toSwap = _args.params.bridgedAmt;\\n    // If this is a fast liquidity path, we should handle deducting from applicable routers' liquidity.\\n    // If this is a slow liquidity path, the transfer must have been reconciled (if we've reached this point),\\n    // and the funds would have been custodied in this contract. The exact custodied amount is untracked in state\\n    // (since the amount is hashed in the transfer ID itself) - thus, no updates are required.\\n    if (_isFast) {\\n      uint256 pathLen = _args.routers.length;\\n\\n      // Calculate amount that routers will provide with the fast-liquidity fee deducted.\\n      toSwap = _muldiv(_args.params.bridgedAmt, s.LIQUIDITY_FEE_NUMERATOR, Constants.BPS_FEE_DENOMINATOR);\\n\\n      if (pathLen == 1) {\\n        // If router does not have enough liquidity, try to use Aave Portals.\\n        // NOTE: Only one router should be responsible for taking on this credit risk, and it should only deal\\n        // with transfers expecting adopted assets (to avoid introducing runtime slippage).\\n        if (!receiveLocal && s.routerBalances[_args.routers[0]][local] < toSwap && s.aavePool != address(0)) {\\n          if (!s.routerConfigs[_args.routers[0]].portalApproved) revert BridgeFacet__execute_notApprovedForPortals();\\n\\n          // Portals deliver the adopted asset directly; return after portal execution is completed.\\n          (uint256 portalDeliveredAmount, address adoptedAsset) = _executePortalTransfer(\\n            _transferId,\\n            _key,\\n            toSwap,\\n            _args.routers[0]\\n          );\\n          return (portalDeliveredAmount, adoptedAsset, local);\\n        } else {\\n          // Decrement the router's liquidity.\\n          s.routerBalances[_args.routers[0]][local] -= toSwap;\\n        }\\n      } else {\\n        // For each router, assert they are approved, and deduct liquidity.\\n        uint256 routerAmount = toSwap / pathLen;\\n        for (uint256 i; i < pathLen - 1; ) {\\n          // Decrement router's liquidity.\\n          // NOTE: If any router in the path has insufficient liquidity, this will revert with an underflow error.\\n          s.routerBalances[_args.routers[i]][local] -= routerAmount;\\n\\n          unchecked {\\n            ++i;\\n          }\\n        }\\n        // The last router in the multipath will sweep the remaining balance to account for remainder dust.\\n        uint256 toSweep = routerAmount + (toSwap % pathLen);\\n        s.routerBalances[_args.routers[pathLen - 1]][local] -= toSweep;\\n      }\\n    }\\n\\n    // If it is the canonical domain, decrease custodied value\\n    if (s.domain == _args.params.canonicalDomain && AssetLogic.getConfig(_key).cap > 0) {\\n      // NOTE: safe to use the amount here instead of post-swap because there are no\\n      // AMMs on the canonical domain (assuming canonical == adopted on canonical domain)\\n      s.tokenConfigs[_key].custodied -= toSwap;\\n    }\\n\\n    // If the local asset is specified, or the adopted asset was overridden (e.g. when user facing slippage\\n    // conditions outside of their boundaries), exit without swapping.\\n    if (receiveLocal) {\\n      // Delete override\\n      delete s.receiveLocalOverride[_transferId];\\n\\n      return (toSwap, local, local);\\n    }\\n\\n    // Swap out of representational asset into adopted asset if needed.\\n    uint256 slippageOverride = s.slippage[_transferId];\\n    // delete for gas refund\\n    delete s.slippage[_transferId];\\n\\n    (uint256 amount, address adopted) = AssetLogic.swapFromLocalAssetIfNeeded(\\n      _key,\\n      local,\\n      toSwap,\\n      slippageOverride != 0 ? slippageOverride : _args.params.slippage,\\n      _args.params.normalizedIn\\n    );\\n    return (amount, adopted, local);\\n  }\\n\\n  /**\\n   * @notice Process the transfer, and calldata if needed, when calling `execute`\\n   * @dev Need this to prevent stack too deep\\n   */\\n  function _handleExecuteTransaction(\\n    ExecuteArgs calldata _args,\\n    uint256 _amountOut,\\n    address _asset, // adopted (or local if specified)\\n    bytes32 _transferId,\\n    bool _reconciled\\n  ) private returns (uint256) {\\n    // transfer funds to recipient\\n    AssetLogic.handleOutgoingAsset(_asset, _args.params.to, _amountOut);\\n\\n    // execute the calldata\\n    _executeCalldata(_transferId, _amountOut, _asset, _reconciled, _args.params);\\n\\n    return _amountOut;\\n  }\\n\\n  /**\\n   * @notice Executes external calldata.\\n   * \\n   * @dev Once a transfer is reconciled (i.e. data is authenticated), external calls will\\n   * fail gracefully. This means errors will be emitted in an event, but the function itself\\n   * will not revert.\\n\\n   * In the case where a transaction is *not* reconciled (i.e. data is unauthenticated), this\\n   * external call will fail loudly. This allows all functions that rely on authenticated data\\n   * (using a specific check on the origin sender), to be forced into the slow path for\\n   * execution to succeed.\\n   * \\n   */\\n  function _executeCalldata(\\n    bytes32 _transferId,\\n    uint256 _amount,\\n    address _asset,\\n    bool _reconciled,\\n    TransferInfo calldata _params\\n  ) internal {\\n    // execute the calldata\\n    if (keccak256(_params.callData) == Constants.EMPTY_HASH) {\\n      // no call data, return amount out\\n      return;\\n    }\\n\\n    (bool success, bytes memory returnData) = ExcessivelySafeCall.excessivelySafeCall(\\n      _params.to,\\n      gasleft() - Constants.EXECUTE_CALLDATA_RESERVE_GAS,\\n      0, // native asset value (always 0)\\n      Constants.DEFAULT_COPY_BYTES, // only copy 256 bytes back as calldata\\n      abi.encodeWithSelector(\\n        IXReceiver.xReceive.selector,\\n        _transferId,\\n        _amount,\\n        _asset,\\n        _reconciled ? _params.originSender : address(0), // use passed in value iff authenticated\\n        _params.originDomain,\\n        _params.callData\\n      )\\n    );\\n\\n    if (!_reconciled && !success) {\\n      // See above devnote, reverts if unsuccessful on fast path\\n      revert BridgeFacet__execute_externalCallFailed();\\n    }\\n\\n    emit ExternalCalldataExecuted(_transferId, success, returnData);\\n  }\\n\\n  /**\\n   * @notice Uses Aave Portals to provide fast liquidity\\n   */\\n  function _executePortalTransfer(\\n    bytes32 _transferId,\\n    bytes32 _key,\\n    uint256 _fastTransferAmount,\\n    address _router\\n  ) internal returns (uint256, address) {\\n    // Calculate local to adopted swap output if needed\\n    address adopted = _getAdoptedAsset(_key);\\n\\n    IAavePool(s.aavePool).mintUnbacked(adopted, _fastTransferAmount, address(this), Constants.AAVE_REFERRAL_CODE);\\n\\n    // Improvement: Instead of withdrawing to address(this), withdraw directly to the user or executor to save 1 transfer\\n    uint256 amountWithdrawn = IAavePool(s.aavePool).withdraw(adopted, _fastTransferAmount, address(this));\\n\\n    if (amountWithdrawn < _fastTransferAmount) revert BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn();\\n\\n    // Store principle debt\\n    s.portalDebt[_transferId] = _fastTransferAmount;\\n\\n    // Store fee debt\\n    s.portalFeeDebt[_transferId] = (s.aavePortalFeeNumerator * _fastTransferAmount) / Constants.BPS_FEE_DENOMINATOR;\\n\\n    emit AavePortalMintUnbacked(_transferId, _router, adopted, _fastTransferAmount);\\n\\n    return (_fastTransferAmount, adopted);\\n  }\\n\\n  // ============ Internal: Send & Emit Xcalled============\\n\\n  /**\\n   * @notice Format and send transfer message to a remote chain.\\n   *\\n   * @param _transferId Unique identifier for the transfer.\\n   * @param _params The TransferInfo.\\n   * @param _connextion The connext instance on the destination domain.\\n   * @param _canonical The canonical token ID/domain info.\\n   * @param _local The local token address.\\n   * @param _amount The token amount.\\n   * @param _isCanonical Whether or not the local token is the canonical asset (i.e. this is the token's\\n   * \\\"home\\\" chain).\\n   */\\n  function _sendMessageAndEmit(\\n    bytes32 _transferId,\\n    TransferInfo memory _params,\\n    address _asset,\\n    uint256 _amount,\\n    bytes32 _connextion,\\n    TokenId memory _canonical,\\n    address _local,\\n    bool _isCanonical\\n  ) private {\\n    // Remove tokens from circulation on this chain if applicable.\\n    uint256 bridgedAmt = _params.bridgedAmt;\\n    if (bridgedAmt > 0) {\\n      if (!_isCanonical) {\\n        // If the token originates on a remote chain, burn the representational tokens on this chain.\\n        IBridgeToken(_local).burn(address(this), bridgedAmt);\\n      }\\n      // IFF the token IS the canonical token (i.e. originates on this chain), we lock the input tokens in escrow\\n      // in this contract, as an equal amount of representational assets will be minted on the destination chain.\\n      // NOTE: The tokens should be in the contract already at this point from xcall.\\n    }\\n\\n    bytes memory _messageBody = abi.encodePacked(\\n      _canonical.domain,\\n      _canonical.id,\\n      BridgeMessage.Types.Transfer,\\n      bridgedAmt,\\n      _transferId\\n    );\\n\\n    // Send message to destination chain bridge router.\\n    // return message hash and unhashed body\\n    (bytes32 messageHash, bytes memory messageBody) = IOutbox(s.xAppConnectionManager.home()).dispatch(\\n      _params.destinationDomain,\\n      _connextion,\\n      _messageBody\\n    );\\n\\n    // emit event\\n    emit XCalled(_transferId, _params.nonce, messageHash, _params, _asset, _amount, _local, messageBody);\\n  }\\n\\n  /**\\n   * @notice Assert that the given domain has a xApp Router registered and return its address\\n   * @param _domain The domain of the chain for which to get the xApp Router\\n   * @return _remote The address of the remote xApp Router on _domain\\n   */\\n  function _mustHaveRemote(uint32 _domain) internal view returns (bytes32 _remote) {\\n    _remote = s.remotes[_domain];\\n    if (_remote == bytes32(0)) {\\n      revert BridgeFacet__mustHaveRemote_destinationNotSupported();\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x82f4fc304ac042fdd07d504201288bbd097fac6eef2378116cce8b5ccfff8546\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IAavePool.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\ninterface IAavePool {\\n  /**\\n   * @dev Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   **/\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @dev Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   **/\\n  function backUnbacked(\\n    address asset,\\n    uint256 amount,\\n    uint256 fee\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   **/\\n  function withdraw(\\n    address asset,\\n    uint256 amount,\\n    address to\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xd196cc8605b8ecfa5991614f6c234f2bc5d1a605cdb53778e91a93822dfb752f\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IBridgeToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\ninterface IBridgeToken is IERC20Metadata {\\n  function burn(address _from, uint256 _amnt) external;\\n\\n  function mint(address _to, uint256 _amnt) external;\\n\\n  function setDetails(string calldata _name, string calldata _symbol) external;\\n}\\n\",\"keccak256\":\"0x93b2adcc4b953ecd2d3e738d797f5fbde2ccb3726df10bc7acde9c1b4775b019\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IXReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\ninterface IXReceiver {\\n  function xReceive(\\n    bytes32 _transferId,\\n    uint256 _amount,\\n    address _asset,\\n    address _originSender,\\n    uint32 _origin,\\n    bytes memory _callData\\n  ) external returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x02ae47cb6441eb876b47ff35687ddd9f78eae75399af98815ada1ae618a3945c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/BridgeMessage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============ External Imports ============\\nimport {TypedMemView} from \\\"../../../shared/libraries/TypedMemView.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary BridgeMessage {\\n  // ============ Libraries ============\\n\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // ============ Enums ============\\n\\n  // WARNING: do NOT re-write the numbers / order\\n  // of message types in an upgrade;\\n  // will cause in-flight messages to be mis-interpreted\\n  // The Types enum it defines the types of `views` that we use in BridgeMessage. A view\\n  // points to a specific part of the memory and can slice bytes out of it. When we give a `type` to a view,\\n  // we define the structure of the data it points to, so that we can do easy runtime assertions without\\n  // having to fetch the whole data from memory and check for ourselves. In BridgeMessage.sol\\n  // the types of `data` we can have are defined in this enum and may belong to different taxonomies.\\n  // For example, a `Message` includes a `TokenId` and an Action (a `Transfer`).\\n  // The Message is a different TYPE of data than a TokenId or Transfer, as TokenId and Transfer live inside\\n  // the message. For that reason, we define them as different data types and we add them to the same enum\\n  // for ease of use.\\n  enum Types {\\n    Invalid, // 0\\n    TokenId, // 1\\n    Message, // 2\\n    Transfer // 3\\n  }\\n\\n  // ============ Constants ============\\n\\n  uint256 private constant TOKEN_ID_LEN = 36; // 4 bytes domain + 32 bytes id\\n  uint256 private constant IDENTIFIER_LEN = 1;\\n  uint256 private constant TRANSFER_LEN = 65; // 1 byte identifier + 32 bytes amount + 32 bytes transfer id\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Asserts a message is of type `_t`\\n   * @param _view The message\\n   * @param _t The expected type\\n   */\\n  modifier typeAssert(bytes29 _view, Types _t) {\\n    _view.assertType(uint40(_t));\\n    _;\\n  }\\n\\n  // ============ Internal Functions ============\\n\\n  /**\\n   * @notice Checks that Action is valid type\\n   * @param _action The action\\n   * @return TRUE if action is valid\\n   */\\n  function isValidAction(bytes29 _action) internal pure returns (bool) {\\n    return isTransfer(_action);\\n  }\\n\\n  /**\\n   * @notice Checks that view is a valid message length\\n   * @param _view The bytes string\\n   * @return TRUE if message is valid\\n   */\\n  function isValidMessageLength(bytes29 _view) internal pure returns (bool) {\\n    uint256 _len = _view.len();\\n    return _len == TOKEN_ID_LEN + TRANSFER_LEN;\\n  }\\n\\n  /**\\n   * @notice Formats an action message\\n   * @param _tokenId The token ID\\n   * @param _action The action\\n   * @return The formatted message\\n   */\\n  function formatMessage(bytes29 _tokenId, bytes29 _action)\\n    internal\\n    view\\n    typeAssert(_tokenId, Types.TokenId)\\n    returns (bytes memory)\\n  {\\n    require(isValidAction(_action), \\\"!action\\\");\\n    bytes29[] memory _views = new bytes29[](2);\\n    _views[0] = _tokenId;\\n    _views[1] = _action;\\n    return TypedMemView.join(_views);\\n  }\\n\\n  /**\\n   * @notice Returns the type of the message\\n   * @param _view The message\\n   * @return The type of the message\\n   */\\n  function messageType(bytes29 _view) internal pure returns (Types) {\\n    return Types(uint8(_view.typeOf()));\\n  }\\n\\n  /**\\n   * @notice Checks that the message is of the specified type\\n   * @param _type the type to check for\\n   * @param _action The message\\n   * @return True if the message is of the specified type\\n   */\\n  function isType(bytes29 _action, Types _type) internal pure returns (bool) {\\n    return actionType(_action) == uint8(_type) && messageType(_action) == _type;\\n  }\\n\\n  /**\\n   * @notice Checks that the message is of type Transfer\\n   * @param _action The message\\n   * @return True if the message is of type Transfer\\n   */\\n  function isTransfer(bytes29 _action) internal pure returns (bool) {\\n    return isType(_action, Types.Transfer);\\n  }\\n\\n  /**\\n   * @notice Formats Transfer\\n   * @param _amnt The transfer amount\\n   * @param _transferId The unique identifier of the transfer\\n   * @return\\n   */\\n  function formatTransfer(uint256 _amnt, bytes32 _transferId) internal pure returns (bytes29) {\\n    return abi.encodePacked(Types.Transfer, _amnt, _transferId).ref(uint40(Types.Transfer));\\n  }\\n\\n  /**\\n   * @notice Serializes a Token ID struct\\n   * @param _tokenId The token id struct\\n   * @return The formatted Token ID\\n   */\\n  function formatTokenId(TokenId memory _tokenId) internal pure returns (bytes29) {\\n    return formatTokenId(_tokenId.domain, _tokenId.id);\\n  }\\n\\n  /**\\n   * @notice Creates a serialized Token ID from components\\n   * @param _domain The domain\\n   * @param _id The ID\\n   * @return The formatted Token ID\\n   */\\n  function formatTokenId(uint32 _domain, bytes32 _id) internal pure returns (bytes29) {\\n    return abi.encodePacked(_domain, _id).ref(uint40(Types.TokenId));\\n  }\\n\\n  /**\\n   * @notice Retrieves the domain from a TokenID\\n   * @param _tokenId The message\\n   * @return The domain\\n   */\\n  function domain(bytes29 _tokenId) internal pure typeAssert(_tokenId, Types.TokenId) returns (uint32) {\\n    return uint32(_tokenId.indexUint(0, 4));\\n  }\\n\\n  /**\\n   * @notice Retrieves the ID from a TokenID\\n   * @param _tokenId The message\\n   * @return The ID\\n   */\\n  function id(bytes29 _tokenId) internal pure typeAssert(_tokenId, Types.TokenId) returns (bytes32) {\\n    // before = 4 bytes domain\\n    return _tokenId.index(4, 32);\\n  }\\n\\n  /**\\n   * @notice Retrieves the EVM ID\\n   * @param _tokenId The message\\n   * @return The EVM ID\\n   */\\n  function evmId(bytes29 _tokenId) internal pure typeAssert(_tokenId, Types.TokenId) returns (address) {\\n    // before = 4 bytes domain + 12 bytes empty to trim for address\\n    return _tokenId.indexAddress(16);\\n  }\\n\\n  /**\\n   * @notice Retrieves the action identifier from message\\n   * @param _message The action\\n   * @return The message type\\n   */\\n  function msgType(bytes29 _message) internal pure returns (uint8) {\\n    return uint8(_message.indexUint(TOKEN_ID_LEN, 1));\\n  }\\n\\n  /**\\n   * @notice Retrieves the identifier from action\\n   * @param _action The action\\n   * @return The action type\\n   */\\n  function actionType(bytes29 _action) internal pure returns (uint8) {\\n    return uint8(_action.indexUint(0, 1));\\n  }\\n\\n  /**\\n   * @notice Retrieves the amount from a Transfer\\n   * @param _transferAction The message\\n   * @return The amount\\n   */\\n  function amnt(bytes29 _transferAction) internal pure returns (uint256) {\\n    // before = 1 byte identifier = 1 bytes\\n    return _transferAction.indexUint(1, 32);\\n  }\\n\\n  /**\\n   * @notice Retrieves the transfer id from a Transfer\\n   * @param _transferAction The message\\n   * @return The id\\n   */\\n  function transferId(bytes29 _transferAction) internal pure returns (bytes32) {\\n    // before = 1 byte identifier + 32 bytes amount = 33 bytes\\n    return _transferAction.index(33, 32);\\n  }\\n\\n  /**\\n   * @notice Retrieves the token ID from a Message\\n   * @param _message The message\\n   * @return The ID\\n   */\\n  function tokenId(bytes29 _message) internal pure typeAssert(_message, Types.Message) returns (bytes29) {\\n    return _message.slice(0, TOKEN_ID_LEN, uint40(Types.TokenId));\\n  }\\n\\n  /**\\n   * @notice Retrieves the action data from a Message\\n   * @param _message The message\\n   * @return The action\\n   */\\n  function action(bytes29 _message) internal pure typeAssert(_message, Types.Message) returns (bytes29) {\\n    uint256 _actionLen = _message.len() - TOKEN_ID_LEN;\\n    uint40 _type = uint40(msgType(_message));\\n    return _message.slice(TOKEN_ID_LEN, _actionLen, _type);\\n  }\\n\\n  /**\\n   * @notice Converts to a Message\\n   * @param _message The message\\n   * @return The newly typed message\\n   */\\n  function tryAsMessage(bytes29 _message) internal pure returns (bytes29) {\\n    if (isValidMessageLength(_message)) {\\n      return _message.castTo(uint40(Types.Message));\\n    }\\n    return TypedMemView.nullView();\\n  }\\n\\n  /**\\n   * @notice Asserts that the message is of type Message\\n   * @param _view The message\\n   * @return The message\\n   */\\n  function mustBeMessage(bytes29 _view) internal pure returns (bytes29) {\\n    return tryAsMessage(_view).assertValid();\\n  }\\n}\\n\",\"keccak256\":\"0x18f34053f524fbed1c307c08e863d015b96dade86249276eb05fbd5b8ac86a6b\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/ExcessivelySafeCall.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// Taken from: https://github.com/nomad-xyz/ExcessivelySafeCall\\n// NOTE: There is a difference between npm latest and github main versions\\n// where the latest github version allows you to specify an ether value.\\n\\nlibrary ExcessivelySafeCall {\\n  uint256 constant LOW_28_MASK = 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _value The value in wei to send to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeCall(\\n    address _target,\\n    uint256 _gas,\\n    uint256 _value,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := call(\\n        _gas, // gas\\n        _target, // recipient\\n        _value, // ether value\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeStaticCall(\\n    address _target,\\n    uint256 _gas,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal view returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := staticcall(\\n        _gas, // gas\\n        _target, // recipient\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /**\\n   * @notice Swaps function selectors in encoded contract calls\\n   * @dev Allows reuse of encoded calldata for functions with identical\\n   * argument types but different names. It simply swaps out the first 4 bytes\\n   * for the new selector. This function modifies memory in place, and should\\n   * only be used with caution.\\n   * @param _newSelector The new 4-byte selector\\n   * @param _buf The encoded contract args\\n   */\\n  function swapSelector(bytes4 _newSelector, bytes memory _buf) internal pure {\\n    require(_buf.length > 4 - 1);\\n    uint256 _mask = LOW_28_MASK;\\n    assembly {\\n      // load the first word of\\n      let _word := mload(add(_buf, 0x20))\\n      // mask out the top 4 bytes\\n      // /x\\n      _word := and(_word, _mask)\\n      _word := or(_newSelector, _word)\\n      mstore(add(_buf, 0x20), _word)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x5472b56fa56886620b1a8e4e2f12f8925500bb237a4dad38651c79db69f0724c\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":13726,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"s","offset":0,"slot":"0","type":"t_struct(AppStorage)29536_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_contract(IERC20)10812)dyn_storage":{"base":"t_contract(IERC20)10812","encoding":"dynamic_array","label":"contract IERC20[]","numberOfBytes":"32"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IConnectorManager)47805":{"encoding":"inplace","label":"contract IConnectorManager","numberOfBytes":"20"},"t_contract(IERC20)10812":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_contract(LPToken)23179":{"encoding":"inplace","label":"contract LPToken","numberOfBytes":"20"},"t_enum(DestinationTransferStatus)29324":{"encoding":"inplace","label":"enum DestinationTransferStatus","numberOfBytes":"1"},"t_enum(Role)29319":{"encoding":"inplace","label":"enum Role","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_enum(Role)29319)":{"encoding":"mapping","key":"t_address","label":"mapping(address => enum Role)","numberOfBytes":"32","value":"t_enum(Role)29319"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(RouterConfig)29378_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RouterConfig)","numberOfBytes":"32","value":"t_struct(RouterConfig)29378_storage"},"t_mapping(t_address,t_struct(TokenId)37728_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct TokenId)","numberOfBytes":"32","value":"t_struct(TokenId)37728_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_bytes32,t_array(t_address)dyn_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => address[])","numberOfBytes":"32","value":"t_array(t_address)dyn_storage"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum DestinationTransferStatus)","numberOfBytes":"32","value":"t_enum(DestinationTransferStatus)29324"},"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => mapping(address => uint8))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint8)"},"t_mapping(t_bytes32,t_struct(Swap)30786_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct SwapUtils.Swap)","numberOfBytes":"32","value":"t_struct(Swap)30786_storage"},"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct TokenConfig)","numberOfBytes":"32","value":"t_struct(TokenConfig)29395_storage"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_bytes32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => bytes32)","numberOfBytes":"32","value":"t_bytes32"},"t_struct(AppStorage)29536_storage":{"encoding":"inplace","label":"struct AppStorage","members":[{"astId":29397,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":29399,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"LIQUIDITY_FEE_NUMERATOR","offset":0,"slot":"1","type":"t_uint256"},{"astId":29402,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"relayerFeeVault","offset":0,"slot":"2","type":"t_address"},{"astId":29405,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"nonce","offset":0,"slot":"3","type":"t_uint256"},{"astId":29408,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"domain","offset":0,"slot":"4","type":"t_uint32"},{"astId":29414,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"adoptedToCanonical","offset":0,"slot":"5","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29420,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"representationToCanonical","offset":0,"slot":"6","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29426,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"tokenConfigs","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)"},{"astId":29432,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"transferStatus","offset":0,"slot":"8","type":"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)"},{"astId":29438,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"routedTransfers","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_array(t_address)dyn_storage)"},{"astId":29445,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"routerBalances","offset":0,"slot":"10","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":29450,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"approvedRelayers","offset":0,"slot":"11","type":"t_mapping(t_address,t_bool)"},{"astId":29453,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"maxRoutersPerTransfer","offset":0,"slot":"12","type":"t_uint256"},{"astId":29458,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"slippage","offset":0,"slot":"13","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29463,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"receiveLocalOverride","offset":0,"slot":"14","type":"t_mapping(t_bytes32,t_bool)"},{"astId":29468,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"remotes","offset":0,"slot":"15","type":"t_mapping(t_uint32,t_bytes32)"},{"astId":29470,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"_proposed","offset":0,"slot":"16","type":"t_address"},{"astId":29472,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"_proposedOwnershipTimestamp","offset":0,"slot":"17","type":"t_uint256"},{"astId":29474,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"_routerAllowlistRemoved","offset":0,"slot":"18","type":"t_bool"},{"astId":29476,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"_routerAllowlistTimestamp","offset":0,"slot":"19","type":"t_uint256"},{"astId":29482,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"roles","offset":0,"slot":"20","type":"t_mapping(t_address,t_enum(Role)29319)"},{"astId":29487,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"routerConfigs","offset":0,"slot":"21","type":"t_mapping(t_address,t_struct(RouterConfig)29378_storage)"},{"astId":29489,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"_status","offset":0,"slot":"22","type":"t_uint256"},{"astId":29491,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"_xcallStatus","offset":0,"slot":"23","type":"t_uint256"},{"astId":29497,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"swapStorages","offset":0,"slot":"24","type":"t_mapping(t_bytes32,t_struct(Swap)30786_storage)"},{"astId":29504,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"tokenIndexes","offset":0,"slot":"25","type":"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))"},{"astId":29507,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"lpTokenTargetAddress","offset":0,"slot":"26","type":"t_address"},{"astId":29510,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"_paused","offset":20,"slot":"26","type":"t_bool"},{"astId":29513,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"aavePool","offset":0,"slot":"27","type":"t_address"},{"astId":29516,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"aavePortalFeeNumerator","offset":0,"slot":"28","type":"t_uint256"},{"astId":29521,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"portalDebt","offset":0,"slot":"29","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29526,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"portalFeeDebt","offset":0,"slot":"30","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29531,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"approvedSequencers","offset":0,"slot":"31","type":"t_mapping(t_address,t_bool)"},{"astId":29535,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"xAppConnectionManager","offset":0,"slot":"32","type":"t_contract(IConnectorManager)47805"}],"numberOfBytes":"1056"},"t_struct(RouterConfig)29378_storage":{"encoding":"inplace","label":"struct RouterConfig","members":[{"astId":29367,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"approved","offset":0,"slot":"0","type":"t_bool"},{"astId":29369,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"portalApproved","offset":1,"slot":"0","type":"t_bool"},{"astId":29371,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"owner","offset":2,"slot":"0","type":"t_address"},{"astId":29373,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"recipient","offset":0,"slot":"1","type":"t_address"},{"astId":29375,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"proposed","offset":0,"slot":"2","type":"t_address"},{"astId":29377,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"proposedTimestamp","offset":0,"slot":"3","type":"t_uint256"}],"numberOfBytes":"128"},"t_struct(Swap)30786_storage":{"encoding":"inplace","label":"struct SwapUtils.Swap","members":[{"astId":30753,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"key","offset":0,"slot":"0","type":"t_bytes32"},{"astId":30755,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"initialA","offset":0,"slot":"1","type":"t_uint256"},{"astId":30757,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"futureA","offset":0,"slot":"2","type":"t_uint256"},{"astId":30759,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"initialATime","offset":0,"slot":"3","type":"t_uint256"},{"astId":30761,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"futureATime","offset":0,"slot":"4","type":"t_uint256"},{"astId":30763,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"swapFee","offset":0,"slot":"5","type":"t_uint256"},{"astId":30765,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"adminFee","offset":0,"slot":"6","type":"t_uint256"},{"astId":30768,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"lpToken","offset":0,"slot":"7","type":"t_contract(LPToken)23179"},{"astId":30772,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"pooledTokens","offset":0,"slot":"8","type":"t_array(t_contract(IERC20)10812)dyn_storage"},{"astId":30775,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"tokenPrecisionMultipliers","offset":0,"slot":"9","type":"t_array(t_uint256)dyn_storage"},{"astId":30778,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"balances","offset":0,"slot":"10","type":"t_array(t_uint256)dyn_storage"},{"astId":30781,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"adminFees","offset":0,"slot":"11","type":"t_array(t_uint256)dyn_storage"},{"astId":30783,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"disabled","offset":0,"slot":"12","type":"t_bool"},{"astId":30785,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"removeTime","offset":0,"slot":"13","type":"t_uint256"}],"numberOfBytes":"448"},"t_struct(TokenConfig)29395_storage":{"encoding":"inplace","label":"struct TokenConfig","members":[{"astId":29380,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"representation","offset":0,"slot":"0","type":"t_address"},{"astId":29382,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"representationDecimals","offset":20,"slot":"0","type":"t_uint8"},{"astId":29384,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"adopted","offset":0,"slot":"1","type":"t_address"},{"astId":29386,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"adoptedDecimals","offset":20,"slot":"1","type":"t_uint8"},{"astId":29388,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"adoptedToLocalExternalPools","offset":0,"slot":"2","type":"t_address"},{"astId":29390,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"approval","offset":20,"slot":"2","type":"t_bool"},{"astId":29392,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"cap","offset":0,"slot":"3","type":"t_uint256"},{"astId":29394,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"custodied","offset":0,"slot":"4","type":"t_uint256"}],"numberOfBytes":"160"},"t_struct(TokenId)37728_storage":{"encoding":"inplace","label":"struct TokenId","members":[{"astId":37725,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"domain","offset":0,"slot":"0","type":"t_uint32"},{"astId":37727,"contract":"contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet","label":"id","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"events":{"AavePortalMintUnbacked(bytes32,address,address,uint256)":{"notice":"Emitted when a router used Aave Portal liquidity for fast transfer"},"Executed(bytes32,address,address,((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),address,uint256,address)":{"notice":"Emitted when `execute` is called on the destination domain of a transfer."},"ExternalCalldataExecuted(bytes32,bool,bytes)":{"notice":"Emitted when a transfer has its external data executed"},"ForceReceiveLocal(bytes32)":{"notice":"Emitted when `forceReceiveLocal` is called by a user-delegated EOA on the destination domain"},"RemoteAdded(uint32,address,address)":{"notice":"Emitted when a new remote instance is added"},"SequencerAdded(address,address)":{"notice":"Emitted when a sequencer is added or removed from allowlists"},"SequencerRemoved(address,address)":{"notice":"Emitted when a sequencer is added or removed from allowlists"},"SlippageUpdated(bytes32,uint256)":{"notice":"Emitted when `forceUpdateSlippage` is called by user-delegated EOA on the destination domain"},"TransferRelayerFeesIncreased(bytes32,uint256,address)":{"notice":"Emitted when `_bumpTransfer` is called by an user on the origin domain both in `xcall` and `bumpTransfer`"},"XAppConnectionManagerSet(address,address)":{"notice":"Emitted `xAppConnectionManager` is updated"},"XCalled(bytes32,uint256,bytes32,(uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address,uint256,address,bytes)":{"notice":"Emitted when `xcall` is called on the origin domain of a transfer."}},"kind":"user","methods":{"addSequencer(address)":{"notice":"Used to add an approved sequencer to the allowlist."},"bumpTransfer(bytes32)":{"notice":"Anyone can call this function on the origin domain to increase the relayer fee for a transfer."},"enrollRemoteRouter(uint32,bytes32)":{"notice":"Register the address of a Router contract for the same xApp on a remote chain"},"execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes))":{"notice":"Called on a destination domain to disburse correct assets to end recipient and execute any included calldata."},"forceReceiveLocal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32))":{"notice":"Allows a user-specified account to withdraw the local asset directly"},"forceUpdateSlippage((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256)":{"notice":"Allows a user-specified account to update the slippage they are willing to take on destination transfers."},"removeSequencer(address)":{"notice":"Used to remove an approved sequencer from the allowlist."},"setXAppConnectionManager(address)":{"notice":"Modify the contract the xApp uses to validate Replica contracts"}},"version":1}}},"contracts/core/connext/facets/DiamondCutFacet.sol":{"DiamondCutFacet":{"abi":[{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"DiamondCut","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"DiamondCutProposed","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"DiamondCutRescinded","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"internalType":"address","name":"_init","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"diamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"internalType":"address","name":"_init","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"getAcceptanceTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"internalType":"address","name":"_init","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"proposeDiamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"internalType":"address","name":"_init","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"rescindDiamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"diamondCut((address,uint8,bytes4[])[],address,bytes)":{"params":{"_calldata":"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init","_diamondCut":"Contains the facet addresses and function selectors","_init":"The address of the contract or facet to execute _calldata"}},"getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)":{"params":{"_calldata":"A function call, including function selector and arguments _calldata is executed with delegatecall on _init","_diamondCut":"Contains the facet addresses and function selectors","_init":"The address of the contract or facet to execute _calldata"}},"proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)":{"params":{"_calldata":"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init","_diamondCut":"Contains the facet addresses and function selectors","_init":"The address of the contract or facet to execute _calldata"}},"rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)":{"params":{"_calldata":"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init","_diamondCut":"Contains the facet addresses and function selectors","_init":"The address of the contract or facet to execute _calldata"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50611ac4806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631f931c1c146100515780632c67849c1461006657806356a8ea4814610079578063bbf2358e1461009e575b600080fd5b61006461005f3660046112de565b6100b1565b005b6100646100743660046112de565b61010a565b61008c6100873660046112de565b61015c565b60405190815260200160405180910390f35b6100646100ac3660046112de565b6101cb565b6100b961021d565b6101036100c6858761144b565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061028e92505050565b5050505050565b61011261021d565b61010361011f858761144b565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056592505050565b60006101c1868686868660405160200161017a959493929190611621565b6040516020818303038152906040528051906020012060009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1321602052604090205490565b9695505050505050565b6101d361021d565b6101036101e0858761144b565b8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105f692505050565b600080516020611a23833981519152600401546001600160a01b0316331461028c5760405162461bcd60e51b815260206004820152601b60248201527f4c69624469616d6f6e643a2021636f6e7472616374206f776e6572000000000060448201526064015b60405180910390fd5b565b604051600080516020611a23833981519152906000906102b690869086908690602001611847565b60408051601f19818403018152919052805160209091012060028301549091501561035a57600081815260058301602052604090205480158015906102fb5750428111155b6103475760405162461bcd60e51b815260206004820152601d60248201527f4c69624469616d6f6e643a2064656c6179206e6f7420656c61707365640000006044820152606401610283565b5060008181526005830160205260408120555b845160005b8181101561051757600087828151811061037b5761037b61187b565b60200260200101516020015190506000600281111561039c5761039c611578565b8160028111156103ae576103ae611578565b036103fc576103f78883815181106103c8576103c861187b565b6020026020010151600001518984815181106103e6576103e661187b565b6020026020010151604001516106bf565b61050e565b600181600281111561041057610410611578565b03610459576103f788838151811061042a5761042a61187b565b6020026020010151600001518984815181106104485761044861187b565b602002602001015160400151610830565b600281600281111561046d5761046d611578565b036104b6576103f78883815181106104875761048761187b565b6020026020010151600001518984815181106104a5576104a561187b565b6020026020010151604001516109b9565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b6064820152608401610283565b5060010161035f565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67386868660405161054b93929190611847565b60405180910390a161055d8585610b6b565b505050505050565b600080516020611a23833981519152600501600084848460405160200161058e93929190611847565b604051602081830303815290604052805190602001208152602001908152602001600020600090557f47b4eb69218cd939e2a72afd9d24fe3a6ca02515a6d712ff3942062df2eedbdb8383836040516105e993929190611847565b60405180910390a1505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132254600080516020611a238339815191529060009061063590426118a7565b90508082600501600087878760405160200161065393929190611847565b604051602081830303815290604052805190602001208152602001908152602001600020819055507f6c20294df7018c510b52fd6cc0352d7b78056de164d751b75da6ef7b63daa83e858585846040516106b094939291906118c0565b60405180910390a15050505050565b80516000036106e05760405162461bcd60e51b815260040161028390611906565b600080516020611a238339815191526001600160a01b0383166107155760405162461bcd60e51b815260040161028390611951565b6001600160a01b0383166000908152600182016020526040812054906001600160601b038216900361074b5761074b8285610d7e565b825160005b8181101561055d57600085828151811061076c5761076c61187b565b6020908102919091018101516001600160e01b031981166000908152918790526040909120549091506001600160a01b0316801561080a5760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6044820152746e207468617420616c72656164792065786973747360581b6064820152608401610283565b6108168683878b610de8565b846108208161199d565b9550508260010192505050610750565b805160008190036108535760405162461bcd60e51b815260040161028390611906565b600080516020611a238339815191526001600160a01b0384166108885760405162461bcd60e51b815260040161028390611951565b6001600160a01b0384166000908152600182016020526040812054906001600160601b03821690036108be576108be8286610d7e565b60005b8381101561055d5760008582815181106108dd576108dd61187b565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0390811690881681036109885760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e00000000000000006064820152608401610283565b610993858284610e88565b61099f8583868b610de8565b836109a98161199d565b94505082600101925050506108c1565b80516000036109da5760405162461bcd60e51b815260040161028390611906565b600080516020611a23833981519152635df91ac760e11b6307e4c70760e21b6001600160a01b03851615610a6f5760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472604482015275657373206d757374206265206164647265737328302960501b6064820152608401610283565b835160005b81811015610b62576000868281518110610a9057610a9061187b565b60200260200101519050846001600160e01b031916816001600160e01b03191614158015610acb57506001600160e01b031981811690851614155b610b2a5760405162461bcd60e51b815260206004820152602a60248201527f4c69624469616d6f6e644375743a2043616e6e6f742072656d6f7665206375746044820152692073656c6563746f727360b01b6064820152608401610283565b6001600160e01b031981166000908152602087905260409020546001600160a01b0316610b58878284610e88565b5050600101610a74565b50505050505050565b6001600160a01b038216610bf257805115610bee5760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d707479000000006064820152608401610283565b5050565b8051600003610c695760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f7420616464726573732830290000006064820152608401610283565b6001600160a01b0382163014610c9b57610c9b82604051806060016040528060288152602001611a436028913961124b565b600080836001600160a01b031683604051610cb691906119c3565b600060405180830381855af49150503d8060008114610cf1576040519150601f19603f3d011682016040523d82523d6000602084013e610cf6565b606091505b509150915081610d7857805115610d21578060405162461bcd60e51b815260040161028391906119df565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656044820152651d995c9d195960d21b6064820152608401610283565b50505050565b610da081604051806060016040528060248152602001611a6b6024913961124b565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160e01b0319831660008181526020868152604080832080546001600160601b03909716600160a01b026001600160a01b0397881617815594909516808352600180890183529583208054968701815583528183206008870401805460e09890981c60046007909816979097026101000a96870263ffffffff9097021990971695909517909555529290915281546001600160a01b031916179055565b6001600160a01b038216610f045760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e27742065786973740000000000000000006064820152608401610283565b306001600160a01b03831603610f735760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b6064820152608401610283565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b03169291610fc2916119f9565b90508082146110b4576001600160a01b03841660009081526001860160205260408120805483908110610ff757610ff761187b565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b9250829190859081106110485761104861187b565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b038416600090815260018601602052604090208054806110dd576110dd611a0c565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b03198516825286905260408120819055819003610103576002850154600090611140906001906119f9565b6001600160a01b03861660009081526001808901602052604090912001549091508082146111ef57600087600201838154811061117f5761117f61187b565b6000918252602090912001546002890180546001600160a01b0390921692508291849081106111b0576111b061187b565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b8660020180548061120257611202611a0c565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505050505050565b806001600160a01b0383163b6112745760405162461bcd60e51b815260040161028391906119df565b505050565b80356001600160a01b038116811461129057600080fd5b919050565b60008083601f8401126112a757600080fd5b50813567ffffffffffffffff8111156112bf57600080fd5b6020830191508360208285010111156112d757600080fd5b9250929050565b6000806000806000606086880312156112f657600080fd5b853567ffffffffffffffff8082111561130e57600080fd5b818801915088601f83011261132257600080fd5b81358181111561133157600080fd5b8960208260051b850101111561134657600080fd5b6020830197508096505061135c60208901611279565b9450604088013591508082111561137257600080fd5b5061137f88828901611295565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156113c9576113c9611390565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156113f8576113f8611390565b604052919050565b600067ffffffffffffffff82111561141a5761141a611390565b5060051b60200190565b80356003811061129057600080fd5b80356001600160e01b03198116811461129057600080fd5b600061145e61145984611400565b6113cf565b83815260208082019190600586811b86013681111561147c57600080fd5b865b8181101561156b57803567ffffffffffffffff8082111561149f5760008081fd5b818a019150606082360312156114b55760008081fd5b6114bd6113a6565b6114c683611279565b81526114d3878401611424565b87820152604080840135838111156114eb5760008081fd5b939093019236601f85011261150257600092508283fd5b8335925061151261145984611400565b83815292871b8401880192888101903685111561152f5760008081fd5b948901945b848610156115545761154586611433565b82529489019490890190611534565b91830191909152508852505094830194830161147e565b5092979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600381106115ac57634e487b7160e01b600052602160045260246000fd5b9052565b8183526000602080850194508260005b858110156115ed576001600160e01b03196115da83611433565b16875295820195908201906001016115c0565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060808252818101869052600090600560808085019089831b8601018a855b8b81101561170557878303607f190184528135368e9003605e1901811261166657600080fd5b8d016001600160a01b0361167982611279565b1684526020611689818301611424565b6116958287018261158e565b50604080830135601e198436030181126116ae57600080fd5b90920181810192903567ffffffffffffffff8111156116cc57600080fd5b80891b36038413156116dd57600080fd5b89828801526116ef8a880182866115b0565b9783019796505050929092019150600101611640565b50506001600160a01b0389166020870152858103604087015261172981888a6115f8565b9b9a5050505050505050505050565b600081518084526020808501808196508360051b810191508286016000805b868110156117e9578385038a52825180516001600160a01b03168652868101516060908188019061178a8a8a018261158e565b506040928301519288019190915281519081905290870190608087019084905b808210156117d45783516001600160e01b03191683529289019291890191600191909101906117aa565b50509a87019a95505091850191600101611757565b509298975050505050505050565b60005b838110156118125781810151838201526020016117fa565b50506000910152565b600081518084526118338160208601602086016117f7565b601f01601f19169290920160200192915050565b60608152600061185a6060830186611738565b6001600160a01b038516602084015282810360408401526101c1818561181b565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156118ba576118ba611891565b92915050565b6080815260006118d36080830187611738565b6001600160a01b038616602084015282810360408401526118f4818661181b565b91505082606083015295945050505050565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b60006001600160601b038083168181036119b9576119b9611891565b6001019392505050565b600082516119d58184602087016117f7565b9190910192915050565b6020815260006119f2602083018461181b565b9392505050565b818103818111156118ba576118ba611891565b634e487b7160e01b600052603160045260246000fdfec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220d7015fe5a1d65a1c30b4d8718001179a86cdd7dafda138481807b85aeca7375f64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AC4 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1F931C1C EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x2C67849C EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x56A8EA48 EQ PUSH2 0x79 JUMPI DUP1 PUSH4 0xBBF2358E EQ PUSH2 0x9E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x12DE JUMP JUMPDEST PUSH2 0xB1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x64 PUSH2 0x74 CALLDATASIZE PUSH1 0x4 PUSH2 0x12DE JUMP JUMPDEST PUSH2 0x10A JUMP JUMPDEST PUSH2 0x8C PUSH2 0x87 CALLDATASIZE PUSH1 0x4 PUSH2 0x12DE JUMP JUMPDEST PUSH2 0x15C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x64 PUSH2 0xAC CALLDATASIZE PUSH1 0x4 PUSH2 0x12DE JUMP JUMPDEST PUSH2 0x1CB JUMP JUMPDEST PUSH2 0xB9 PUSH2 0x21D JUMP JUMPDEST PUSH2 0x103 PUSH2 0xC6 DUP6 DUP8 PUSH2 0x144B JUMP JUMPDEST DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x28E SWAP3 POP POP POP JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x112 PUSH2 0x21D JUMP JUMPDEST PUSH2 0x103 PUSH2 0x11F DUP6 DUP8 PUSH2 0x144B JUMP JUMPDEST DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x565 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C1 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x17A SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1621 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1321 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1D3 PUSH2 0x21D JUMP JUMPDEST PUSH2 0x103 PUSH2 0x1E0 DUP6 DUP8 PUSH2 0x144B JUMP JUMPDEST DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x5F6 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1A23 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x4 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x28C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A2021636F6E7472616374206F776E65720000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1A23 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x2B6 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x20 ADD PUSH2 0x1847 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 PUSH1 0x2 DUP4 ADD SLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x35A JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2FB JUMPI POP TIMESTAMP DUP2 GT ISZERO JUMPDEST PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A2064656C6179206E6F7420656C6170736564000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x283 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMPDEST DUP5 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x517 JUMPI PUSH1 0x0 DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x37B JUMPI PUSH2 0x37B PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x39C JUMPI PUSH2 0x39C PUSH2 0x1578 JUMP JUMPDEST DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x3AE JUMPI PUSH2 0x3AE PUSH2 0x1578 JUMP JUMPDEST SUB PUSH2 0x3FC JUMPI PUSH2 0x3F7 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3C8 JUMPI PUSH2 0x3C8 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3E6 JUMPI PUSH2 0x3E6 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x6BF JUMP JUMPDEST PUSH2 0x50E JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x410 JUMPI PUSH2 0x410 PUSH2 0x1578 JUMP JUMPDEST SUB PUSH2 0x459 JUMPI PUSH2 0x3F7 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x42A JUMPI PUSH2 0x42A PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x448 JUMPI PUSH2 0x448 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x830 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x46D JUMPI PUSH2 0x46D PUSH2 0x1578 JUMP JUMPDEST SUB PUSH2 0x4B6 JUMPI PUSH2 0x3F7 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x487 JUMPI PUSH2 0x487 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4A5 JUMPI PUSH2 0x4A5 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x9B9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A20496E636F72726563742046616365744375 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x3A20B1BA34B7B7 PUSH1 0xC9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x35F JUMP JUMPDEST POP PUSH32 0x8FAA70878671CCD212D20771B795C50AF8FD3FF6CF27F4BDE57E5D4DE0AEB673 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x54B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1847 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x55D DUP6 DUP6 PUSH2 0xB6B JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1A23 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x5 ADD PUSH1 0x0 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x58E SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1847 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH32 0x47B4EB69218CD939E2A72AFD9D24FE3A6CA02515A6D712FF3942062DF2EEDBDB DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x5E9 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1847 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1322 SLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1A23 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x635 SWAP1 TIMESTAMP PUSH2 0x18A7 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 PUSH1 0x5 ADD PUSH1 0x0 DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x653 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1847 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH32 0x6C20294DF7018C510B52FD6CC0352D7B78056DE164D751B75DA6EF7B63DAA83E DUP6 DUP6 DUP6 DUP5 PUSH1 0x40 MLOAD PUSH2 0x6B0 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x18C0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0x6E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x283 SWAP1 PUSH2 0x1906 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1A23 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x715 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x283 SWAP1 PUSH2 0x1951 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND SWAP1 SUB PUSH2 0x74B JUMPI PUSH2 0x74B DUP3 DUP6 PUSH2 0xD7E JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x55D JUMPI PUSH1 0x0 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x76C JUMPI PUSH2 0x76C PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP8 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x80A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774206164642066756E6374696F PUSH1 0x44 DUP3 ADD MSTORE PUSH21 0x6E207468617420616C726561647920657869737473 PUSH1 0x58 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST PUSH2 0x816 DUP7 DUP4 DUP8 DUP12 PUSH2 0xDE8 JUMP JUMPDEST DUP5 PUSH2 0x820 DUP2 PUSH2 0x199D JUMP JUMPDEST SWAP6 POP POP DUP3 PUSH1 0x1 ADD SWAP3 POP POP POP PUSH2 0x750 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 DUP2 SWAP1 SUB PUSH2 0x853 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x283 SWAP1 PUSH2 0x1906 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1A23 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x888 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x283 SWAP1 PUSH2 0x1951 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND SWAP1 SUB PUSH2 0x8BE JUMPI PUSH2 0x8BE DUP3 DUP7 PUSH2 0xD7E JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x55D JUMPI PUSH1 0x0 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x8DD JUMPI PUSH2 0x8DD PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP9 AND DUP2 SUB PUSH2 0x988 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x38 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774207265706C6163652066756E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6374696F6E20776974682073616D652066756E6374696F6E0000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST PUSH2 0x993 DUP6 DUP3 DUP5 PUSH2 0xE88 JUMP JUMPDEST PUSH2 0x99F DUP6 DUP4 DUP7 DUP12 PUSH2 0xDE8 JUMP JUMPDEST DUP4 PUSH2 0x9A9 DUP2 PUSH2 0x199D JUMP JUMPDEST SWAP5 POP POP DUP3 PUSH1 0x1 ADD SWAP3 POP POP POP PUSH2 0x8C1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0x9DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x283 SWAP1 PUSH2 0x1906 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1A23 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH4 0x5DF91AC7 PUSH1 0xE1 SHL PUSH4 0x7E4C707 PUSH1 0xE2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND ISZERO PUSH2 0xA6F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2052656D6F76652066616365742061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH22 0x657373206D7573742062652061646472657373283029 PUSH1 0x50 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB62 JUMPI PUSH1 0x0 DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xA90 JUMPI PUSH2 0xA90 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND EQ ISZERO DUP1 ISZERO PUSH2 0xACB JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 DUP2 AND SWAP1 DUP6 AND EQ ISZERO JUMPDEST PUSH2 0xB2A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E6E6F742072656D6F766520637574 PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x2073656C6563746F7273 PUSH1 0xB0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xB58 DUP8 DUP3 DUP5 PUSH2 0xE88 JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0xA74 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xBF2 JUMPI DUP1 MLOAD ISZERO PUSH2 0xBEE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E6974206973206164647265737328 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3029206275745F63616C6C64617461206973206E6F7420656D70747900000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0xC69 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F63616C6C6461746120697320656D7074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7920627574205F696E6974206973206E6F742061646472657373283029000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADDRESS EQ PUSH2 0xC9B JUMPI PUSH2 0xC9B DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A43 PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x124B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 MLOAD PUSH2 0xCB6 SWAP2 SWAP1 PUSH2 0x19C3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xCF1 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xCF6 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0xD78 JUMPI DUP1 MLOAD ISZERO PUSH2 0xD21 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x283 SWAP2 SWAP1 PUSH2 0x19DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E69742066756E6374696F6E207265 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1D995C9D1959 PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0xDA0 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A6B PUSH1 0x24 SWAP2 CODECOPY PUSH2 0x124B JUMP JUMPDEST PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP5 DUP6 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP7 ADD DUP6 SWAP1 SSTORE SWAP5 DUP5 ADD DUP4 SSTORE SWAP2 DUP3 MSTORE SWAP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP7 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP8 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 DUP9 AND OR DUP2 SSTORE SWAP5 SWAP1 SWAP6 AND DUP1 DUP4 MSTORE PUSH1 0x1 DUP1 DUP10 ADD DUP4 MSTORE SWAP6 DUP4 KECCAK256 DUP1 SLOAD SWAP7 DUP8 ADD DUP2 SSTORE DUP4 MSTORE DUP2 DUP4 KECCAK256 PUSH1 0x8 DUP8 DIV ADD DUP1 SLOAD PUSH1 0xE0 SWAP9 SWAP1 SWAP9 SHR PUSH1 0x4 PUSH1 0x7 SWAP1 SWAP9 AND SWAP8 SWAP1 SWAP8 MUL PUSH2 0x100 EXP SWAP7 DUP8 MUL PUSH4 0xFFFFFFFF SWAP1 SWAP8 MUL NOT SWAP1 SWAP8 AND SWAP6 SWAP1 SWAP6 OR SWAP1 SWAP6 SSTORE MSTORE SWAP3 SWAP1 SWAP2 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xF04 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F76652066756E63 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74696F6E207468617420646F65736E2774206578697374000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SUB PUSH2 0xF73 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F766520696D6D75 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x3A30B1363290333AB731BA34B7B7 PUSH1 0x91 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 ADD SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP3 SWAP2 PUSH2 0xFC2 SWAP2 PUSH2 0x19F9 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 EQ PUSH2 0x10B4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH2 0xFF7 JUMPI PUSH2 0xFF7 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP5 MSTORE PUSH1 0x1 DUP11 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0x7 SWAP1 SWAP3 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP1 SWAP3 DIV PUSH1 0xE0 SHL SWAP3 POP DUP3 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x1048 JUMPI PUSH2 0x1048 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP5 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP4 DUP5 MUL NOT AND PUSH1 0xE0 SWAP6 SWAP1 SWAP6 SHR SWAP3 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP6 AND MUL OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP1 PUSH2 0x10DD JUMPI PUSH2 0x10DD PUSH2 0x1A0C JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x8 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x4 PUSH1 0x7 DUP8 AND MUL PUSH2 0x100 EXP MUL NOT AND SWAP1 SSTORE SWAP2 SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP6 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 SSTORE DUP2 SWAP1 SUB PUSH2 0x103 JUMPI PUSH1 0x2 DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0x1140 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP1 DUP10 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 SWAP2 POP DUP1 DUP3 EQ PUSH2 0x11EF JUMPI PUSH1 0x0 DUP8 PUSH1 0x2 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x117F JUMPI PUSH2 0x117F PUSH2 0x187B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP10 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x11B0 JUMPI PUSH2 0x11B0 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 ADD DUP2 SWAP1 SSTORE JUMPDEST DUP7 PUSH1 0x2 ADD DUP1 SLOAD DUP1 PUSH2 0x1202 JUMPI PUSH2 0x1202 PUSH2 0x1A0C JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH1 0x0 NOT SWAP1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP3 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE PUSH2 0x1274 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x283 SWAP2 SWAP1 PUSH2 0x19DF JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1290 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x12A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x12BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x12D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x12F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x130E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1322 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x1331 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x1346 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP8 POP DUP1 SWAP7 POP POP PUSH2 0x135C PUSH1 0x20 DUP10 ADD PUSH2 0x1279 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1372 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x137F DUP9 DUP3 DUP10 ADD PUSH2 0x1295 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x13C9 JUMPI PUSH2 0x13C9 PUSH2 0x1390 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x13F8 JUMPI PUSH2 0x13F8 PUSH2 0x1390 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x141A JUMPI PUSH2 0x141A PUSH2 0x1390 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x3 DUP2 LT PUSH2 0x1290 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0x1290 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x145E PUSH2 0x1459 DUP5 PUSH2 0x1400 JUMP JUMPDEST PUSH2 0x13CF JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP2 SWAP1 PUSH1 0x5 DUP7 DUP2 SHL DUP7 ADD CALLDATASIZE DUP2 GT ISZERO PUSH2 0x147C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x156B JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x149F JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP2 DUP11 ADD SWAP2 POP PUSH1 0x60 DUP3 CALLDATASIZE SUB SLT ISZERO PUSH2 0x14B5 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0x14BD PUSH2 0x13A6 JUMP JUMPDEST PUSH2 0x14C6 DUP4 PUSH2 0x1279 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x14D3 DUP8 DUP5 ADD PUSH2 0x1424 JUMP JUMPDEST DUP8 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP5 ADD CALLDATALOAD DUP4 DUP2 GT ISZERO PUSH2 0x14EB JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP4 SWAP1 SWAP4 ADD SWAP3 CALLDATASIZE PUSH1 0x1F DUP6 ADD SLT PUSH2 0x1502 JUMPI PUSH1 0x0 SWAP3 POP DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH2 0x1512 PUSH2 0x1459 DUP5 PUSH2 0x1400 JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP3 DUP8 SHL DUP5 ADD DUP9 ADD SWAP3 DUP9 DUP2 ADD SWAP1 CALLDATASIZE DUP6 GT ISZERO PUSH2 0x152F JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP5 DUP10 ADD SWAP5 JUMPDEST DUP5 DUP7 LT ISZERO PUSH2 0x1554 JUMPI PUSH2 0x1545 DUP7 PUSH2 0x1433 JUMP JUMPDEST DUP3 MSTORE SWAP5 DUP10 ADD SWAP5 SWAP1 DUP10 ADD SWAP1 PUSH2 0x1534 JUMP JUMPDEST SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP9 MSTORE POP POP SWAP5 DUP4 ADD SWAP5 DUP4 ADD PUSH2 0x147E JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x15AC JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x15ED JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH2 0x15DA DUP4 PUSH2 0x1433 JUMP JUMPDEST AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x15C0 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 DUP3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x5 PUSH1 0x80 DUP1 DUP6 ADD SWAP1 DUP10 DUP4 SHL DUP7 ADD ADD DUP11 DUP6 JUMPDEST DUP12 DUP2 LT ISZERO PUSH2 0x1705 JUMPI DUP8 DUP4 SUB PUSH1 0x7F NOT ADD DUP5 MSTORE DUP2 CALLDATALOAD CALLDATASIZE DUP15 SWAP1 SUB PUSH1 0x5E NOT ADD DUP2 SLT PUSH2 0x1666 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP14 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1679 DUP3 PUSH2 0x1279 JUMP JUMPDEST AND DUP5 MSTORE PUSH1 0x20 PUSH2 0x1689 DUP2 DUP4 ADD PUSH2 0x1424 JUMP JUMPDEST PUSH2 0x1695 DUP3 DUP8 ADD DUP3 PUSH2 0x158E JUMP JUMPDEST POP PUSH1 0x40 DUP1 DUP4 ADD CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x16AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP3 ADD DUP2 DUP2 ADD SWAP3 SWAP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x16CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP10 SHL CALLDATASIZE SUB DUP5 SGT ISZERO PUSH2 0x16DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 DUP3 DUP9 ADD MSTORE PUSH2 0x16EF DUP11 DUP9 ADD DUP3 DUP7 PUSH2 0x15B0 JUMP JUMPDEST SWAP8 DUP4 ADD SWAP8 SWAP7 POP POP POP SWAP3 SWAP1 SWAP3 ADD SWAP2 POP PUSH1 0x1 ADD PUSH2 0x1640 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x20 DUP8 ADD MSTORE DUP6 DUP2 SUB PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x1729 DUP2 DUP9 DUP11 PUSH2 0x15F8 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD DUP1 DUP2 SWAP7 POP DUP4 PUSH1 0x5 SHL DUP2 ADD SWAP2 POP DUP3 DUP7 ADD PUSH1 0x0 DUP1 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x17E9 JUMPI DUP4 DUP6 SUB DUP11 MSTORE DUP3 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 MSTORE DUP7 DUP2 ADD MLOAD PUSH1 0x60 SWAP1 DUP2 DUP9 ADD SWAP1 PUSH2 0x178A DUP11 DUP11 ADD DUP3 PUSH2 0x158E JUMP JUMPDEST POP PUSH1 0x40 SWAP3 DUP4 ADD MLOAD SWAP3 DUP9 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 DUP8 ADD SWAP1 PUSH1 0x80 DUP8 ADD SWAP1 DUP5 SWAP1 JUMPDEST DUP1 DUP3 LT ISZERO PUSH2 0x17D4 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP4 MSTORE SWAP3 DUP10 ADD SWAP3 SWAP2 DUP10 ADD SWAP2 PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x17AA JUMP JUMPDEST POP POP SWAP11 DUP8 ADD SWAP11 SWAP6 POP POP SWAP2 DUP6 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1757 JUMP JUMPDEST POP SWAP3 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1812 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x17FA JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1833 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x17F7 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x185A PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x1738 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x20 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x1C1 DUP2 DUP6 PUSH2 0x181B JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x18BA JUMPI PUSH2 0x18BA PUSH2 0x1891 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 MSTORE PUSH1 0x0 PUSH2 0x18D3 PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0x1738 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x18F4 DUP2 DUP7 PUSH2 0x181B JUMP JUMPDEST SWAP2 POP POP DUP3 PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2B SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x40 DUP3 ADD MSTORE PUSH11 0x1858D95D081D1BC818DD5D PUSH1 0xAA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2C SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x40 DUP3 ADD MSTORE PUSH12 0x652061646472657373283029 PUSH1 0xA0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x19B9 JUMPI PUSH2 0x19B9 PUSH2 0x1891 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x19D5 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x17F7 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x19F2 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x181B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x18BA JUMPI PUSH2 0x18BA PUSH2 0x1891 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID 0xC8 0xFC 0xAD DUP14 0xB8 0x4D EXTCODECOPY 0xC1 DUP12 0x4C COINBASE 0xD5 MLOAD 0xEA 0xE 0xE6 PUSH14 0xD599CDE068D998E57D5E09332C13 SHR 0x4C PUSH10 0x624469616D6F6E644375 PUSH21 0x3A205F696E6974206164647265737320686173206E PUSH16 0x20636F64654C69624469616D6F6E6443 PUSH22 0x743A204E657720666163657420686173206E6F20636F PUSH5 0x65A2646970 PUSH7 0x7358221220D701 0x5F 0xE5 LOG1 0xD6 GAS SHR ADDRESS 0xB4 0xD8 PUSH18 0x8001179A86CDD7DAFDA138481807B85AECA7 CALLDATACOPY 0x5F PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"626:1441:70:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@acceptanceTime_29669":{"entryPoint":null,"id":29669,"parameterSlots":1,"returnSlots":1},"@addFacet_30293":{"entryPoint":3454,"id":30293,"parameterSlots":2,"returnSlots":0},"@addFunction_30334":{"entryPoint":3560,"id":30334,"parameterSlots":4,"returnSlots":0},"@addFunctions_30059":{"entryPoint":1727,"id":30059,"parameterSlots":2,"returnSlots":0},"@diamondCut_16162":{"entryPoint":177,"id":16162,"parameterSlots":5,"returnSlots":0},"@diamondCut_29953":{"entryPoint":654,"id":29953,"parameterSlots":3,"returnSlots":0},"@diamondStorage_29603":{"entryPoint":null,"id":29603,"parameterSlots":0,"returnSlots":1},"@enforceHasContractCode_30595":{"entryPoint":4683,"id":30595,"parameterSlots":2,"returnSlots":0},"@enforceIsContractOwner_29683":{"entryPoint":541,"id":29683,"parameterSlots":0,"returnSlots":0},"@getAcceptanceTime_16238":{"entryPoint":348,"id":16238,"parameterSlots":5,"returnSlots":1},"@initializeDiamondCut_30578":{"entryPoint":2923,"id":30578,"parameterSlots":2,"returnSlots":0},"@proposeDiamondCut_16187":{"entryPoint":459,"id":16187,"parameterSlots":5,"returnSlots":0},"@proposeDiamondCut_29743":{"entryPoint":1526,"id":29743,"parameterSlots":3,"returnSlots":0},"@removeFunction_30501":{"entryPoint":3720,"id":30501,"parameterSlots":3,"returnSlots":0},"@removeFunctions_30260":{"entryPoint":2489,"id":30260,"parameterSlots":2,"returnSlots":0},"@replaceFunctions_30167":{"entryPoint":2096,"id":30167,"parameterSlots":2,"returnSlots":0},"@rescindDiamondCut_16212":{"entryPoint":266,"id":16212,"parameterSlots":5,"returnSlots":0},"@rescindDiamondCut_29785":{"entryPoint":1381,"id":29785,"parameterSlots":3,"returnSlots":0},"abi_decode_address":{"entryPoint":4729,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes4":{"entryPoint":5171,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":4757,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_enum_FacetCutAction":{"entryPoint":5156,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptrt_addresst_bytes_calldata_ptr":{"entryPoint":4830,"id":null,"parameterSlots":2,"returnSlots":5},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_bytes4_dyn_calldata":{"entryPoint":5552,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_struct_FacetCut_dyn":{"entryPoint":5944,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes":{"entryPoint":6171,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes_calldata":{"entryPoint":5624,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_enum_FacetCutAction":{"entryPoint":5518,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":6595,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr_t_address_t_bytes_calldata_ptr__to_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":5665,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":6215,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr_t_uint256__to_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr_t_uint256__fromStack_reversed":{"entryPoint":6336,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":6623,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":6406,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4beb0b63f903eb8754578ce7af3eb73865b73e0886b8ef814c8fa0e6d2575299__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":6481,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_6dc3f1dab50ff21fc15088aa16d05815257e5abe70c54939829f018f001302c3__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bf74910c6b16e2fe967a9c2fd1df7451e7594bd2184362aed0a451068a63c3f3__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":5071,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_3454":{"entryPoint":5030,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_array_struct_FacetCut_dyn":{"entryPoint":5120,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":6311,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":6649,"id":null,"parameterSlots":2,"returnSlots":1},"convert_array_t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr_to_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr":{"entryPoint":5195,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":6135,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint96":{"entryPoint":6557,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":6289,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":5496,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x31":{"entryPoint":6668,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":6267,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":5008,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:19070:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:124:181","statements":[{"nodeType":"YulAssignment","src":"73:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:181"},"nodeType":"YulFunctionCall","src":"82:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:181"}]},{"body":{"nodeType":"YulBlock","src":"165:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"174:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"177:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"167:6:181"},"nodeType":"YulFunctionCall","src":"167:12:181"},"nodeType":"YulExpressionStatement","src":"167:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"155:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"146:3:181"},"nodeType":"YulFunctionCall","src":"146:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"142:3:181"},"nodeType":"YulFunctionCall","src":"142:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:181"},"nodeType":"YulFunctionCall","src":"131:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:181"},"nodeType":"YulFunctionCall","src":"121:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:181"},"nodeType":"YulFunctionCall","src":"114:50:181"},"nodeType":"YulIf","src":"111:70:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:181","type":""}],"src":"14:173:181"},{"body":{"nodeType":"YulBlock","src":"264:275:181","statements":[{"body":{"nodeType":"YulBlock","src":"313:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"322:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"325:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"315:6:181"},"nodeType":"YulFunctionCall","src":"315:12:181"},"nodeType":"YulExpressionStatement","src":"315:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"292:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"300:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:181"},"nodeType":"YulFunctionCall","src":"288:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"307:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"284:3:181"},"nodeType":"YulFunctionCall","src":"284:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"277:6:181"},"nodeType":"YulFunctionCall","src":"277:35:181"},"nodeType":"YulIf","src":"274:55:181"},{"nodeType":"YulAssignment","src":"338:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"361:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"348:12:181"},"nodeType":"YulFunctionCall","src":"348:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"338:6:181"}]},{"body":{"nodeType":"YulBlock","src":"411:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"420:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"423:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"413:6:181"},"nodeType":"YulFunctionCall","src":"413:12:181"},"nodeType":"YulExpressionStatement","src":"413:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"383:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"391:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"380:2:181"},"nodeType":"YulFunctionCall","src":"380:30:181"},"nodeType":"YulIf","src":"377:50:181"},{"nodeType":"YulAssignment","src":"436:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"452:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"460:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"448:3:181"},"nodeType":"YulFunctionCall","src":"448:17:181"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"436:8:181"}]},{"body":{"nodeType":"YulBlock","src":"517:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"526:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"529:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"519:6:181"},"nodeType":"YulFunctionCall","src":"519:12:181"},"nodeType":"YulExpressionStatement","src":"519:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"488:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"496:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"484:3:181"},"nodeType":"YulFunctionCall","src":"484:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"505:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"480:3:181"},"nodeType":"YulFunctionCall","src":"480:30:181"},{"name":"end","nodeType":"YulIdentifier","src":"512:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"477:2:181"},"nodeType":"YulFunctionCall","src":"477:39:181"},"nodeType":"YulIf","src":"474:59:181"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"227:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"235:3:181","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"243:8:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"253:6:181","type":""}],"src":"192:347:181"},{"body":{"nodeType":"YulBlock","src":"731:824:181","statements":[{"body":{"nodeType":"YulBlock","src":"777:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"786:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"789:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"779:6:181"},"nodeType":"YulFunctionCall","src":"779:12:181"},"nodeType":"YulExpressionStatement","src":"779:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"752:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"761:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"748:3:181"},"nodeType":"YulFunctionCall","src":"748:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"773:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"744:3:181"},"nodeType":"YulFunctionCall","src":"744:32:181"},"nodeType":"YulIf","src":"741:52:181"},{"nodeType":"YulVariableDeclaration","src":"802:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"829:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"816:12:181"},"nodeType":"YulFunctionCall","src":"816:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"806:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"848:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"858:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"852:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"903:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"912:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"915:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"905:6:181"},"nodeType":"YulFunctionCall","src":"905:12:181"},"nodeType":"YulExpressionStatement","src":"905:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"891:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"899:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"888:2:181"},"nodeType":"YulFunctionCall","src":"888:14:181"},"nodeType":"YulIf","src":"885:34:181"},{"nodeType":"YulVariableDeclaration","src":"928:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"942:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"953:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"938:3:181"},"nodeType":"YulFunctionCall","src":"938:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"932:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1008:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1017:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1020:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1010:6:181"},"nodeType":"YulFunctionCall","src":"1010:12:181"},"nodeType":"YulExpressionStatement","src":"1010:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"987:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"991:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"983:3:181"},"nodeType":"YulFunctionCall","src":"983:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"998:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"979:3:181"},"nodeType":"YulFunctionCall","src":"979:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"972:6:181"},"nodeType":"YulFunctionCall","src":"972:35:181"},"nodeType":"YulIf","src":"969:55:181"},{"nodeType":"YulVariableDeclaration","src":"1033:30:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1060:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1047:12:181"},"nodeType":"YulFunctionCall","src":"1047:16:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1037:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1090:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1099:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1102:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1092:6:181"},"nodeType":"YulFunctionCall","src":"1092:12:181"},"nodeType":"YulExpressionStatement","src":"1092:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1078:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1086:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1075:2:181"},"nodeType":"YulFunctionCall","src":"1075:14:181"},"nodeType":"YulIf","src":"1072:34:181"},{"body":{"nodeType":"YulBlock","src":"1166:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1175:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1178:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1168:6:181"},"nodeType":"YulFunctionCall","src":"1168:12:181"},"nodeType":"YulExpressionStatement","src":"1168:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1129:2:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1137:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"1140:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1133:3:181"},"nodeType":"YulFunctionCall","src":"1133:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1125:3:181"},"nodeType":"YulFunctionCall","src":"1125:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1150:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1121:3:181"},"nodeType":"YulFunctionCall","src":"1121:34:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1157:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1118:2:181"},"nodeType":"YulFunctionCall","src":"1118:47:181"},"nodeType":"YulIf","src":"1115:67:181"},{"nodeType":"YulAssignment","src":"1191:23:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1205:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1209:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1201:3:181"},"nodeType":"YulFunctionCall","src":"1201:13:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1191:6:181"}]},{"nodeType":"YulAssignment","src":"1223:16:181","value":{"name":"length","nodeType":"YulIdentifier","src":"1233:6:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1223:6:181"}]},{"nodeType":"YulAssignment","src":"1248:50:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1281:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1292:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1277:3:181"},"nodeType":"YulFunctionCall","src":"1277:20:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1258:18:181"},"nodeType":"YulFunctionCall","src":"1258:40:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1248:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1307:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1340:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1351:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1336:3:181"},"nodeType":"YulFunctionCall","src":"1336:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1323:12:181"},"nodeType":"YulFunctionCall","src":"1323:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"1311:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1384:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1393:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1396:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1386:6:181"},"nodeType":"YulFunctionCall","src":"1386:12:181"},"nodeType":"YulExpressionStatement","src":"1386:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"1370:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1380:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1367:2:181"},"nodeType":"YulFunctionCall","src":"1367:16:181"},"nodeType":"YulIf","src":"1364:36:181"},{"nodeType":"YulVariableDeclaration","src":"1409:86:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1465:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"1476:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1461:3:181"},"nodeType":"YulFunctionCall","src":"1461:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1487:7:181"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"1435:25:181"},"nodeType":"YulFunctionCall","src":"1435:60:181"},"variables":[{"name":"value3_1","nodeType":"YulTypedName","src":"1413:8:181","type":""},{"name":"value4_1","nodeType":"YulTypedName","src":"1423:8:181","type":""}]},{"nodeType":"YulAssignment","src":"1504:18:181","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"1514:8:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1504:6:181"}]},{"nodeType":"YulAssignment","src":"1531:18:181","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"1541:8:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"1531:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptrt_addresst_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"665:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"676:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"688:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"696:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"704:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"712:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"720:6:181","type":""}],"src":"544:1011:181"},{"body":{"nodeType":"YulBlock","src":"1661:76:181","statements":[{"nodeType":"YulAssignment","src":"1671:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1683:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1694:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1679:3:181"},"nodeType":"YulFunctionCall","src":"1679:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1671:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1713:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"1724:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1706:6:181"},"nodeType":"YulFunctionCall","src":"1706:25:181"},"nodeType":"YulExpressionStatement","src":"1706:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1630:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1641:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1652:4:181","type":""}],"src":"1560:177:181"},{"body":{"nodeType":"YulBlock","src":"1774:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1791:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1798:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1803:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1794:3:181"},"nodeType":"YulFunctionCall","src":"1794:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1784:6:181"},"nodeType":"YulFunctionCall","src":"1784:31:181"},"nodeType":"YulExpressionStatement","src":"1784:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1831:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1834:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1824:6:181"},"nodeType":"YulFunctionCall","src":"1824:15:181"},"nodeType":"YulExpressionStatement","src":"1824:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1855:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1858:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1848:6:181"},"nodeType":"YulFunctionCall","src":"1848:15:181"},"nodeType":"YulExpressionStatement","src":"1848:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1742:127:181"},{"body":{"nodeType":"YulBlock","src":"1920:207:181","statements":[{"nodeType":"YulAssignment","src":"1930:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1946:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1940:5:181"},"nodeType":"YulFunctionCall","src":"1940:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1930:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1958:35:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1980:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1988:4:181","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1976:3:181"},"nodeType":"YulFunctionCall","src":"1976:17:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1962:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2068:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2070:16:181"},"nodeType":"YulFunctionCall","src":"2070:18:181"},"nodeType":"YulExpressionStatement","src":"2070:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2011:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"2023:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2008:2:181"},"nodeType":"YulFunctionCall","src":"2008:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2047:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2059:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2044:2:181"},"nodeType":"YulFunctionCall","src":"2044:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2005:2:181"},"nodeType":"YulFunctionCall","src":"2005:62:181"},"nodeType":"YulIf","src":"2002:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2106:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2110:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2099:6:181"},"nodeType":"YulFunctionCall","src":"2099:22:181"},"nodeType":"YulExpressionStatement","src":"2099:22:181"}]},"name":"allocate_memory_3454","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1909:6:181","type":""}],"src":"1874:253:181"},{"body":{"nodeType":"YulBlock","src":"2177:230:181","statements":[{"nodeType":"YulAssignment","src":"2187:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2203:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2197:5:181"},"nodeType":"YulFunctionCall","src":"2197:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2187:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2215:58:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2237:6:181"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"2253:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"2259:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2249:3:181"},"nodeType":"YulFunctionCall","src":"2249:13:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2268:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2264:3:181"},"nodeType":"YulFunctionCall","src":"2264:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2245:3:181"},"nodeType":"YulFunctionCall","src":"2245:27:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2233:3:181"},"nodeType":"YulFunctionCall","src":"2233:40:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2219:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2348:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2350:16:181"},"nodeType":"YulFunctionCall","src":"2350:18:181"},"nodeType":"YulExpressionStatement","src":"2350:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2291:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"2303:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2288:2:181"},"nodeType":"YulFunctionCall","src":"2288:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2327:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2339:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2324:2:181"},"nodeType":"YulFunctionCall","src":"2324:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2285:2:181"},"nodeType":"YulFunctionCall","src":"2285:62:181"},"nodeType":"YulIf","src":"2282:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2386:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2390:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2379:6:181"},"nodeType":"YulFunctionCall","src":"2379:22:181"},"nodeType":"YulExpressionStatement","src":"2379:22:181"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"2157:4:181","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2166:6:181","type":""}],"src":"2132:275:181"},{"body":{"nodeType":"YulBlock","src":"2489:114:181","statements":[{"body":{"nodeType":"YulBlock","src":"2533:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2535:16:181"},"nodeType":"YulFunctionCall","src":"2535:18:181"},"nodeType":"YulExpressionStatement","src":"2535:18:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2505:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2513:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2502:2:181"},"nodeType":"YulFunctionCall","src":"2502:30:181"},"nodeType":"YulIf","src":"2499:56:181"},{"nodeType":"YulAssignment","src":"2564:33:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2580:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"2583:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2576:3:181"},"nodeType":"YulFunctionCall","src":"2576:14:181"},{"kind":"number","nodeType":"YulLiteral","src":"2592:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2572:3:181"},"nodeType":"YulFunctionCall","src":"2572:25:181"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"2564:4:181"}]}]},"name":"array_allocation_size_array_struct_FacetCut_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nodeType":"YulTypedName","src":"2469:6:181","type":""}],"returnVariables":[{"name":"size","nodeType":"YulTypedName","src":"2480:4:181","type":""}],"src":"2412:191:181"},{"body":{"nodeType":"YulBlock","src":"2669:94:181","statements":[{"nodeType":"YulAssignment","src":"2679:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2701:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2688:12:181"},"nodeType":"YulFunctionCall","src":"2688:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2679:5:181"}]},{"body":{"nodeType":"YulBlock","src":"2741:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2750:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2753:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2743:6:181"},"nodeType":"YulFunctionCall","src":"2743:12:181"},"nodeType":"YulExpressionStatement","src":"2743:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2730:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"2737:1:181","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2727:2:181"},"nodeType":"YulFunctionCall","src":"2727:12:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2720:6:181"},"nodeType":"YulFunctionCall","src":"2720:20:181"},"nodeType":"YulIf","src":"2717:40:181"}]},"name":"abi_decode_enum_FacetCutAction","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2648:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2659:5:181","type":""}],"src":"2608:155:181"},{"body":{"nodeType":"YulBlock","src":"2816:125:181","statements":[{"nodeType":"YulAssignment","src":"2826:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2848:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2835:12:181"},"nodeType":"YulFunctionCall","src":"2835:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2826:5:181"}]},{"body":{"nodeType":"YulBlock","src":"2919:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2928:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2931:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2921:6:181"},"nodeType":"YulFunctionCall","src":"2921:12:181"},"nodeType":"YulExpressionStatement","src":"2921:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2877:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2888:5:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2899:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2904:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2895:3:181"},"nodeType":"YulFunctionCall","src":"2895:20:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2884:3:181"},"nodeType":"YulFunctionCall","src":"2884:32:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2874:2:181"},"nodeType":"YulFunctionCall","src":"2874:43:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2867:6:181"},"nodeType":"YulFunctionCall","src":"2867:51:181"},"nodeType":"YulIf","src":"2864:71:181"}]},"name":"abi_decode_bytes4","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2795:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2806:5:181","type":""}],"src":"2768:173:181"},{"body":{"nodeType":"YulBlock","src":"3132:2179:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3142:83:181","value":{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3217:6:181"}],"functionName":{"name":"array_allocation_size_array_struct_FacetCut_dyn","nodeType":"YulIdentifier","src":"3169:47:181"},"nodeType":"YulFunctionCall","src":"3169:55:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"3153:15:181"},"nodeType":"YulFunctionCall","src":"3153:72:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"3146:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3234:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"3247:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"3238:5:181","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"3266:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"3271:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3259:6:181"},"nodeType":"YulFunctionCall","src":"3259:19:181"},"nodeType":"YulExpressionStatement","src":"3259:19:181"},{"nodeType":"YulVariableDeclaration","src":"3287:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3297:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3291:2:181","type":""}]},{"nodeType":"YulAssignment","src":"3310:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"3321:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3326:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3317:3:181"},"nodeType":"YulFunctionCall","src":"3317:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"3310:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"3338:11:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3348:1:181","type":"","value":"5"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"3342:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3358:41:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3376:5:181"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3387:2:181"},{"name":"length","nodeType":"YulIdentifier","src":"3391:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3383:3:181"},"nodeType":"YulFunctionCall","src":"3383:15:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3372:3:181"},"nodeType":"YulFunctionCall","src":"3372:27:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"3362:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3438:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3447:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3450:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3440:6:181"},"nodeType":"YulFunctionCall","src":"3440:12:181"},"nodeType":"YulExpressionStatement","src":"3440:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"3414:6:181"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"3422:12:181"},"nodeType":"YulFunctionCall","src":"3422:14:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3411:2:181"},"nodeType":"YulFunctionCall","src":"3411:26:181"},"nodeType":"YulIf","src":"3408:46:181"},{"nodeType":"YulVariableDeclaration","src":"3463:16:181","value":{"name":"value","nodeType":"YulIdentifier","src":"3474:5:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"3467:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3544:1734:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3558:36:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3590:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3577:12:181"},"nodeType":"YulFunctionCall","src":"3577:17:181"},"variables":[{"name":"innerOffset","nodeType":"YulTypedName","src":"3562:11:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3607:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3617:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"3611:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3683:74:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3701:11:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3711:1:181","type":"","value":"0"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"3705:2:181","type":""}]},{"expression":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"3736:2:181"},{"name":"_4","nodeType":"YulIdentifier","src":"3740:2:181"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3729:6:181"},"nodeType":"YulFunctionCall","src":"3729:14:181"},"nodeType":"YulExpressionStatement","src":"3729:14:181"}]},"condition":{"arguments":[{"name":"innerOffset","nodeType":"YulIdentifier","src":"3654:11:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3667:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3651:2:181"},"nodeType":"YulFunctionCall","src":"3651:19:181"},"nodeType":"YulIf","src":"3648:109:181"},{"nodeType":"YulVariableDeclaration","src":"3770:33:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3784:5:181"},{"name":"innerOffset","nodeType":"YulIdentifier","src":"3791:11:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3780:3:181"},"nodeType":"YulFunctionCall","src":"3780:23:181"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"3774:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3866:74:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3884:11:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3894:1:181","type":"","value":"0"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"3888:2:181","type":""}]},{"expression":{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"3919:2:181"},{"name":"_6","nodeType":"YulIdentifier","src":"3923:2:181"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3912:6:181"},"nodeType":"YulFunctionCall","src":"3912:14:181"},"nodeType":"YulExpressionStatement","src":"3912:14:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"3827:12:181"},"nodeType":"YulFunctionCall","src":"3827:14:181"},{"name":"_5","nodeType":"YulIdentifier","src":"3843:2:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3823:3:181"},"nodeType":"YulFunctionCall","src":"3823:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3848:4:181","type":"","value":"0x60"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3819:3:181"},"nodeType":"YulFunctionCall","src":"3819:34:181"},"nodeType":"YulIf","src":"3816:124:181"},{"nodeType":"YulVariableDeclaration","src":"3953:37:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_3454","nodeType":"YulIdentifier","src":"3968:20:181"},"nodeType":"YulFunctionCall","src":"3968:22:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3957:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4010:7:181"},{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"4038:2:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"4019:18:181"},"nodeType":"YulFunctionCall","src":"4019:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4003:6:181"},"nodeType":"YulFunctionCall","src":"4003:39:181"},"nodeType":"YulExpressionStatement","src":"4003:39:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4066:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4075:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4062:3:181"},"nodeType":"YulFunctionCall","src":"4062:16:181"},{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"4115:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4119:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4111:3:181"},"nodeType":"YulFunctionCall","src":"4111:11:181"}],"functionName":{"name":"abi_decode_enum_FacetCutAction","nodeType":"YulIdentifier","src":"4080:30:181"},"nodeType":"YulFunctionCall","src":"4080:43:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4055:6:181"},"nodeType":"YulFunctionCall","src":"4055:69:181"},"nodeType":"YulExpressionStatement","src":"4055:69:181"},{"nodeType":"YulVariableDeclaration","src":"4137:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4147:2:181","type":"","value":"64"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"4141:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4162:39:181","value":{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"4193:2:181"},{"name":"_7","nodeType":"YulIdentifier","src":"4197:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4189:3:181"},"nodeType":"YulFunctionCall","src":"4189:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4176:12:181"},"nodeType":"YulFunctionCall","src":"4176:25:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"4166:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4244:74:181","statements":[{"nodeType":"YulVariableDeclaration","src":"4262:11:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4272:1:181","type":"","value":"0"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"4266:2:181","type":""}]},{"expression":{"arguments":[{"name":"_8","nodeType":"YulIdentifier","src":"4297:2:181"},{"name":"_8","nodeType":"YulIdentifier","src":"4301:2:181"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4290:6:181"},"nodeType":"YulFunctionCall","src":"4290:14:181"},"nodeType":"YulExpressionStatement","src":"4290:14:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4220:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"4228:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4217:2:181"},"nodeType":"YulFunctionCall","src":"4217:14:181"},"nodeType":"YulIf","src":"4214:104:181"},{"nodeType":"YulVariableDeclaration","src":"4331:25:181","value":{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"4345:2:181"},{"name":"offset","nodeType":"YulIdentifier","src":"4349:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4341:3:181"},"nodeType":"YulFunctionCall","src":"4341:15:181"},"variables":[{"name":"_9","nodeType":"YulTypedName","src":"4335:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4427:77:181","statements":[{"nodeType":"YulVariableDeclaration","src":"4445:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4456:1:181","type":"","value":"0"},"variables":[{"name":"_10","nodeType":"YulTypedName","src":"4449:3:181","type":""}]},{"expression":{"arguments":[{"name":"_10","nodeType":"YulIdentifier","src":"4481:3:181"},{"name":"_10","nodeType":"YulIdentifier","src":"4486:3:181"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4474:6:181"},"nodeType":"YulFunctionCall","src":"4474:16:181"},"nodeType":"YulExpressionStatement","src":"4474:16:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_9","nodeType":"YulIdentifier","src":"4387:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4391:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4383:3:181"},"nodeType":"YulFunctionCall","src":"4383:13:181"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"4398:12:181"},"nodeType":"YulFunctionCall","src":"4398:14:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4379:3:181"},"nodeType":"YulFunctionCall","src":"4379:34:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4372:6:181"},"nodeType":"YulFunctionCall","src":"4372:42:181"},"nodeType":"YulIf","src":"4369:135:181"},{"nodeType":"YulVariableDeclaration","src":"4517:27:181","value":{"arguments":[{"name":"_9","nodeType":"YulIdentifier","src":"4541:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4528:12:181"},"nodeType":"YulFunctionCall","src":"4528:16:181"},"variables":[{"name":"_11","nodeType":"YulTypedName","src":"4521:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4557:82:181","value":{"arguments":[{"arguments":[{"name":"_11","nodeType":"YulIdentifier","src":"4634:3:181"}],"functionName":{"name":"array_allocation_size_array_struct_FacetCut_dyn","nodeType":"YulIdentifier","src":"4586:47:181"},"nodeType":"YulFunctionCall","src":"4586:52:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"4570:15:181"},"nodeType":"YulFunctionCall","src":"4570:69:181"},"variables":[{"name":"dst_2","nodeType":"YulTypedName","src":"4561:5:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4652:18:181","value":{"name":"dst_2","nodeType":"YulIdentifier","src":"4665:5:181"},"variables":[{"name":"dst_3","nodeType":"YulTypedName","src":"4656:5:181","type":""}]},{"expression":{"arguments":[{"name":"dst_2","nodeType":"YulIdentifier","src":"4690:5:181"},{"name":"_11","nodeType":"YulIdentifier","src":"4697:3:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4683:6:181"},"nodeType":"YulFunctionCall","src":"4683:18:181"},"nodeType":"YulExpressionStatement","src":"4683:18:181"},{"nodeType":"YulAssignment","src":"4714:23:181","value":{"arguments":[{"name":"dst_2","nodeType":"YulIdentifier","src":"4727:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4734:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4723:3:181"},"nodeType":"YulFunctionCall","src":"4723:14:181"},"variableNames":[{"name":"dst_2","nodeType":"YulIdentifier","src":"4714:5:181"}]},{"nodeType":"YulVariableDeclaration","src":"4750:46:181","value":{"arguments":[{"arguments":[{"name":"_9","nodeType":"YulIdentifier","src":"4774:2:181"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4782:2:181"},{"name":"_11","nodeType":"YulIdentifier","src":"4786:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4778:3:181"},"nodeType":"YulFunctionCall","src":"4778:12:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4770:3:181"},"nodeType":"YulFunctionCall","src":"4770:21:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4793:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4766:3:181"},"nodeType":"YulFunctionCall","src":"4766:30:181"},"variables":[{"name":"srcEnd_1","nodeType":"YulTypedName","src":"4754:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4853:77:181","statements":[{"nodeType":"YulVariableDeclaration","src":"4871:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4882:1:181","type":"","value":"0"},"variables":[{"name":"_12","nodeType":"YulTypedName","src":"4875:3:181","type":""}]},{"expression":{"arguments":[{"name":"_12","nodeType":"YulIdentifier","src":"4907:3:181"},{"name":"_12","nodeType":"YulIdentifier","src":"4912:3:181"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4900:6:181"},"nodeType":"YulFunctionCall","src":"4900:16:181"},"nodeType":"YulExpressionStatement","src":"4900:16:181"}]},"condition":{"arguments":[{"name":"srcEnd_1","nodeType":"YulIdentifier","src":"4815:8:181"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"4825:12:181"},"nodeType":"YulFunctionCall","src":"4825:14:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4812:2:181"},"nodeType":"YulFunctionCall","src":"4812:28:181"},"nodeType":"YulIf","src":"4809:121:181"},{"nodeType":"YulVariableDeclaration","src":"4943:24:181","value":{"arguments":[{"name":"_9","nodeType":"YulIdentifier","src":"4960:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4964:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4956:3:181"},"nodeType":"YulFunctionCall","src":"4956:11:181"},"variables":[{"name":"src_1","nodeType":"YulTypedName","src":"4947:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5048:111:181","statements":[{"expression":{"arguments":[{"name":"dst_2","nodeType":"YulIdentifier","src":"5073:5:181"},{"arguments":[{"name":"src_1","nodeType":"YulIdentifier","src":"5098:5:181"}],"functionName":{"name":"abi_decode_bytes4","nodeType":"YulIdentifier","src":"5080:17:181"},"nodeType":"YulFunctionCall","src":"5080:24:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5066:6:181"},"nodeType":"YulFunctionCall","src":"5066:39:181"},"nodeType":"YulExpressionStatement","src":"5066:39:181"},{"nodeType":"YulAssignment","src":"5122:23:181","value":{"arguments":[{"name":"dst_2","nodeType":"YulIdentifier","src":"5135:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5142:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5131:3:181"},"nodeType":"YulFunctionCall","src":"5131:14:181"},"variableNames":[{"name":"dst_2","nodeType":"YulIdentifier","src":"5122:5:181"}]}]},"condition":{"arguments":[{"name":"src_1","nodeType":"YulIdentifier","src":"4991:5:181"},{"name":"srcEnd_1","nodeType":"YulIdentifier","src":"4998:8:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4988:2:181"},"nodeType":"YulFunctionCall","src":"4988:19:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5008:27:181","statements":[{"nodeType":"YulAssignment","src":"5010:23:181","value":{"arguments":[{"name":"src_1","nodeType":"YulIdentifier","src":"5023:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5030:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5019:3:181"},"nodeType":"YulFunctionCall","src":"5019:14:181"},"variableNames":[{"name":"src_1","nodeType":"YulIdentifier","src":"5010:5:181"}]}]},"pre":{"nodeType":"YulBlock","src":"4984:3:181","statements":[]},"src":"4980:179:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5183:7:181"},{"name":"_7","nodeType":"YulIdentifier","src":"5192:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5179:3:181"},"nodeType":"YulFunctionCall","src":"5179:16:181"},{"name":"dst_3","nodeType":"YulIdentifier","src":"5197:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5172:6:181"},"nodeType":"YulFunctionCall","src":"5172:31:181"},"nodeType":"YulExpressionStatement","src":"5172:31:181"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5223:3:181"},{"name":"value_1","nodeType":"YulIdentifier","src":"5228:7:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5216:6:181"},"nodeType":"YulFunctionCall","src":"5216:20:181"},"nodeType":"YulExpressionStatement","src":"5216:20:181"},{"nodeType":"YulAssignment","src":"5249:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5260:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5265:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5256:3:181"},"nodeType":"YulFunctionCall","src":"5256:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"5249:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3499:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"3504:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3496:2:181"},"nodeType":"YulFunctionCall","src":"3496:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3512:23:181","statements":[{"nodeType":"YulAssignment","src":"3514:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3525:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3530:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3521:3:181"},"nodeType":"YulFunctionCall","src":"3521:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"3514:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"3492:3:181","statements":[]},"src":"3488:1790:181"},{"nodeType":"YulAssignment","src":"5287:18:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"5300:5:181"},"variableNames":[{"name":"converted","nodeType":"YulIdentifier","src":"5287:9:181"}]}]},"name":"convert_array_t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr_to_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3100:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"3107:6:181","type":""}],"returnVariables":[{"name":"converted","nodeType":"YulTypedName","src":"3118:9:181","type":""}],"src":"2946:2365:181"},{"body":{"nodeType":"YulBlock","src":"5360:60:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5377:3:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5386:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5401:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5406:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5397:3:181"},"nodeType":"YulFunctionCall","src":"5397:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5410:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5393:3:181"},"nodeType":"YulFunctionCall","src":"5393:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5382:3:181"},"nodeType":"YulFunctionCall","src":"5382:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5370:6:181"},"nodeType":"YulFunctionCall","src":"5370:44:181"},"nodeType":"YulExpressionStatement","src":"5370:44:181"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5344:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5351:3:181","type":""}],"src":"5316:104:181"},{"body":{"nodeType":"YulBlock","src":"5457:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5474:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5481:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"5486:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5477:3:181"},"nodeType":"YulFunctionCall","src":"5477:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5467:6:181"},"nodeType":"YulFunctionCall","src":"5467:31:181"},"nodeType":"YulExpressionStatement","src":"5467:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5514:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5517:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5507:6:181"},"nodeType":"YulFunctionCall","src":"5507:15:181"},"nodeType":"YulExpressionStatement","src":"5507:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5538:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5541:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5531:6:181"},"nodeType":"YulFunctionCall","src":"5531:15:181"},"nodeType":"YulExpressionStatement","src":"5531:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"5425:127:181"},{"body":{"nodeType":"YulBlock","src":"5613:186:181","statements":[{"body":{"nodeType":"YulBlock","src":"5655:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5676:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5683:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"5688:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5679:3:181"},"nodeType":"YulFunctionCall","src":"5679:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5669:6:181"},"nodeType":"YulFunctionCall","src":"5669:31:181"},"nodeType":"YulExpressionStatement","src":"5669:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5720:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5723:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5713:6:181"},"nodeType":"YulFunctionCall","src":"5713:15:181"},"nodeType":"YulExpressionStatement","src":"5713:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5748:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5751:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5741:6:181"},"nodeType":"YulFunctionCall","src":"5741:15:181"},"nodeType":"YulExpressionStatement","src":"5741:15:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5636:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5643:1:181","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5633:2:181"},"nodeType":"YulFunctionCall","src":"5633:12:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5626:6:181"},"nodeType":"YulFunctionCall","src":"5626:20:181"},"nodeType":"YulIf","src":"5623:143:181"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5782:3:181"},{"name":"value","nodeType":"YulIdentifier","src":"5787:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5775:6:181"},"nodeType":"YulFunctionCall","src":"5775:18:181"},"nodeType":"YulExpressionStatement","src":"5775:18:181"}]},"name":"abi_encode_enum_FacetCutAction","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5597:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5604:3:181","type":""}],"src":"5557:242:181"},{"body":{"nodeType":"YulBlock","src":"5881:369:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5898:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"5903:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5891:6:181"},"nodeType":"YulFunctionCall","src":"5891:19:181"},"nodeType":"YulExpressionStatement","src":"5891:19:181"},{"nodeType":"YulVariableDeclaration","src":"5919:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"5929:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5923:2:181","type":""}]},{"nodeType":"YulAssignment","src":"5942:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5953:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5958:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5949:3:181"},"nodeType":"YulFunctionCall","src":"5949:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"5942:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"5970:19:181","value":{"name":"value","nodeType":"YulIdentifier","src":"5984:5:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"5974:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5998:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6007:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"6002:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6066:159:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6087:3:181"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6114:6:181"}],"functionName":{"name":"abi_decode_bytes4","nodeType":"YulIdentifier","src":"6096:17:181"},"nodeType":"YulFunctionCall","src":"6096:25:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6127:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"6132:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6123:3:181"},"nodeType":"YulFunctionCall","src":"6123:20:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6092:3:181"},"nodeType":"YulFunctionCall","src":"6092:52:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6080:6:181"},"nodeType":"YulFunctionCall","src":"6080:65:181"},"nodeType":"YulExpressionStatement","src":"6080:65:181"},{"nodeType":"YulAssignment","src":"6158:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6169:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6174:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6165:3:181"},"nodeType":"YulFunctionCall","src":"6165:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"6158:3:181"}]},{"nodeType":"YulAssignment","src":"6190:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6204:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6212:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6200:3:181"},"nodeType":"YulFunctionCall","src":"6200:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6190:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6028:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"6031:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6025:2:181"},"nodeType":"YulFunctionCall","src":"6025:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6039:18:181","statements":[{"nodeType":"YulAssignment","src":"6041:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6050:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"6053:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6046:3:181"},"nodeType":"YulFunctionCall","src":"6046:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"6041:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"6021:3:181","statements":[]},"src":"6017:208:181"},{"nodeType":"YulAssignment","src":"6234:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"6241:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"6234:3:181"}]}]},"name":"abi_encode_array_bytes4_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5850:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"5857:6:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5865:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"5873:3:181","type":""}],"src":"5804:446:181"},{"body":{"nodeType":"YulBlock","src":"6321:200:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6338:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"6343:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6331:6:181"},"nodeType":"YulFunctionCall","src":"6331:19:181"},"nodeType":"YulExpressionStatement","src":"6331:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6376:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"6381:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6372:3:181"},"nodeType":"YulFunctionCall","src":"6372:14:181"},{"name":"start","nodeType":"YulIdentifier","src":"6388:5:181"},{"name":"length","nodeType":"YulIdentifier","src":"6395:6:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"6359:12:181"},"nodeType":"YulFunctionCall","src":"6359:43:181"},"nodeType":"YulExpressionStatement","src":"6359:43:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6426:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"6431:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6422:3:181"},"nodeType":"YulFunctionCall","src":"6422:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"6440:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6418:3:181"},"nodeType":"YulFunctionCall","src":"6418:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"6447:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6411:6:181"},"nodeType":"YulFunctionCall","src":"6411:38:181"},"nodeType":"YulExpressionStatement","src":"6411:38:181"},{"nodeType":"YulAssignment","src":"6458:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6473:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6486:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6494:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6482:3:181"},"nodeType":"YulFunctionCall","src":"6482:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6503:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6499:3:181"},"nodeType":"YulFunctionCall","src":"6499:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6478:3:181"},"nodeType":"YulFunctionCall","src":"6478:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6469:3:181"},"nodeType":"YulFunctionCall","src":"6469:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"6510:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6465:3:181"},"nodeType":"YulFunctionCall","src":"6465:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"6458:3:181"}]}]},"name":"abi_encode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"6290:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"6297:6:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"6305:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"6313:3:181","type":""}],"src":"6255:266:181"},{"body":{"nodeType":"YulBlock","src":"6827:1827:181","statements":[{"nodeType":"YulVariableDeclaration","src":"6837:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6847:2:181","type":"","value":"96"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6841:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6858:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6876:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6887:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6872:3:181"},"nodeType":"YulFunctionCall","src":"6872:18:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"6862:6:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6906:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6917:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6899:6:181"},"nodeType":"YulFunctionCall","src":"6899:21:181"},"nodeType":"YulExpressionStatement","src":"6899:21:181"},{"nodeType":"YulVariableDeclaration","src":"6929:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"6940:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"6933:3:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"6962:6:181"},{"name":"value1","nodeType":"YulIdentifier","src":"6970:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6955:6:181"},"nodeType":"YulFunctionCall","src":"6955:22:181"},"nodeType":"YulExpressionStatement","src":"6955:22:181"},{"nodeType":"YulAssignment","src":"6986:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6997:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7008:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6993:3:181"},"nodeType":"YulFunctionCall","src":"6993:19:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"6986:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"7021:11:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7031:1:181","type":"","value":"5"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"7025:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7041:55:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7063:9:181"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7078:2:181"},{"name":"value1","nodeType":"YulIdentifier","src":"7082:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7074:3:181"},"nodeType":"YulFunctionCall","src":"7074:15:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7059:3:181"},"nodeType":"YulFunctionCall","src":"7059:31:181"},{"kind":"number","nodeType":"YulLiteral","src":"7092:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7055:3:181"},"nodeType":"YulFunctionCall","src":"7055:41:181"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"7045:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7105:20:181","value":{"name":"value0","nodeType":"YulIdentifier","src":"7119:6:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"7109:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7134:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7143:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"7138:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7202:1262:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7223:3:181"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"7236:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7244:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7232:3:181"},"nodeType":"YulFunctionCall","src":"7232:22:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7260:3:181","type":"","value":"127"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7256:3:181"},"nodeType":"YulFunctionCall","src":"7256:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7228:3:181"},"nodeType":"YulFunctionCall","src":"7228:37:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7216:6:181"},"nodeType":"YulFunctionCall","src":"7216:50:181"},"nodeType":"YulExpressionStatement","src":"7216:50:181"},{"nodeType":"YulVariableDeclaration","src":"7279:46:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"7318:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7305:12:181"},"nodeType":"YulFunctionCall","src":"7305:20:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"7283:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7416:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7425:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7428:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7418:6:181"},"nodeType":"YulFunctionCall","src":"7418:12:181"},"nodeType":"YulExpressionStatement","src":"7418:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"7352:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"7380:12:181"},"nodeType":"YulFunctionCall","src":"7380:14:181"},{"name":"value0","nodeType":"YulIdentifier","src":"7396:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7376:3:181"},"nodeType":"YulFunctionCall","src":"7376:27:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7409:2:181","type":"","value":"94"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7405:3:181"},"nodeType":"YulFunctionCall","src":"7405:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7372:3:181"},"nodeType":"YulFunctionCall","src":"7372:41:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7348:3:181"},"nodeType":"YulFunctionCall","src":"7348:66:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7341:6:181"},"nodeType":"YulFunctionCall","src":"7341:74:181"},"nodeType":"YulIf","src":"7338:94:181"},{"nodeType":"YulVariableDeclaration","src":"7445:44:181","value":{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"7462:18:181"},{"name":"value0","nodeType":"YulIdentifier","src":"7482:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7458:3:181"},"nodeType":"YulFunctionCall","src":"7458:31:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7449:5:181","type":""}]},{"expression":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"7509:6:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7540:5:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"7521:18:181"},"nodeType":"YulFunctionCall","src":"7521:25:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7556:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"7561:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7552:3:181"},"nodeType":"YulFunctionCall","src":"7552:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"7565:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7548:3:181"},"nodeType":"YulFunctionCall","src":"7548:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7517:3:181"},"nodeType":"YulFunctionCall","src":"7517:51:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7502:6:181"},"nodeType":"YulFunctionCall","src":"7502:67:181"},"nodeType":"YulExpressionStatement","src":"7502:67:181"},{"nodeType":"YulVariableDeclaration","src":"7582:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7592:4:181","type":"","value":"0x20"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"7586:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7609:66:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7664:5:181"},{"name":"_3","nodeType":"YulIdentifier","src":"7671:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7660:3:181"},"nodeType":"YulFunctionCall","src":"7660:14:181"}],"functionName":{"name":"abi_decode_enum_FacetCutAction","nodeType":"YulIdentifier","src":"7629:30:181"},"nodeType":"YulFunctionCall","src":"7629:46:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"7613:12:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"7719:12:181"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"7737:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"7745:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7733:3:181"},"nodeType":"YulFunctionCall","src":"7733:15:181"}],"functionName":{"name":"abi_encode_enum_FacetCutAction","nodeType":"YulIdentifier","src":"7688:30:181"},"nodeType":"YulFunctionCall","src":"7688:61:181"},"nodeType":"YulExpressionStatement","src":"7688:61:181"},{"nodeType":"YulVariableDeclaration","src":"7762:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7772:4:181","type":"","value":"0x40"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"7766:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7789:56:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7834:5:181"},{"name":"_4","nodeType":"YulIdentifier","src":"7841:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7830:3:181"},"nodeType":"YulFunctionCall","src":"7830:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7817:12:181"},"nodeType":"YulFunctionCall","src":"7817:28:181"},"variables":[{"name":"rel_offset_of_tail_1","nodeType":"YulTypedName","src":"7793:20:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7937:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7946:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7949:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7939:6:181"},"nodeType":"YulFunctionCall","src":"7939:12:181"},"nodeType":"YulExpressionStatement","src":"7939:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail_1","nodeType":"YulIdentifier","src":"7872:20:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"7902:12:181"},"nodeType":"YulFunctionCall","src":"7902:14:181"},{"name":"value","nodeType":"YulIdentifier","src":"7918:5:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7898:3:181"},"nodeType":"YulFunctionCall","src":"7898:26:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7930:2:181","type":"","value":"30"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7926:3:181"},"nodeType":"YulFunctionCall","src":"7926:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7894:3:181"},"nodeType":"YulFunctionCall","src":"7894:40:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7868:3:181"},"nodeType":"YulFunctionCall","src":"7868:67:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7861:6:181"},"nodeType":"YulFunctionCall","src":"7861:75:181"},"nodeType":"YulIf","src":"7858:95:181"},{"nodeType":"YulVariableDeclaration","src":"7966:47:181","value":{"arguments":[{"name":"rel_offset_of_tail_1","nodeType":"YulIdentifier","src":"7985:20:181"},{"name":"value","nodeType":"YulIdentifier","src":"8007:5:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7981:3:181"},"nodeType":"YulFunctionCall","src":"7981:32:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7970:7:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8026:35:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8053:7:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8040:12:181"},"nodeType":"YulFunctionCall","src":"8040:21:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"8030:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8074:31:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8093:7:181"},{"name":"_3","nodeType":"YulIdentifier","src":"8102:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8089:3:181"},"nodeType":"YulFunctionCall","src":"8089:16:181"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"8078:7:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8152:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8161:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8164:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8154:6:181"},"nodeType":"YulFunctionCall","src":"8154:12:181"},"nodeType":"YulExpressionStatement","src":"8154:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8124:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8132:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8121:2:181"},"nodeType":"YulFunctionCall","src":"8121:30:181"},"nodeType":"YulIf","src":"8118:50:181"},{"body":{"nodeType":"YulBlock","src":"8235:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8244:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8247:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8237:6:181"},"nodeType":"YulFunctionCall","src":"8237:12:181"},"nodeType":"YulExpressionStatement","src":"8237:12:181"}]},"condition":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"8188:7:181"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"8201:12:181"},"nodeType":"YulFunctionCall","src":"8201:14:181"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"8221:2:181"},{"name":"length","nodeType":"YulIdentifier","src":"8225:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8217:3:181"},"nodeType":"YulFunctionCall","src":"8217:15:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8197:3:181"},"nodeType":"YulFunctionCall","src":"8197:36:181"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"8184:3:181"},"nodeType":"YulFunctionCall","src":"8184:50:181"},"nodeType":"YulIf","src":"8181:70:181"},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"8275:6:181"},{"name":"_4","nodeType":"YulIdentifier","src":"8283:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8271:3:181"},"nodeType":"YulFunctionCall","src":"8271:15:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8288:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8264:6:181"},"nodeType":"YulFunctionCall","src":"8264:27:181"},"nodeType":"YulExpressionStatement","src":"8264:27:181"},{"nodeType":"YulAssignment","src":"8304:80:181","value":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"8351:7:181"},{"name":"length","nodeType":"YulIdentifier","src":"8360:6:181"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"8372:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8380:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8368:3:181"},"nodeType":"YulFunctionCall","src":"8368:15:181"}],"functionName":{"name":"abi_encode_array_bytes4_dyn_calldata","nodeType":"YulIdentifier","src":"8314:36:181"},"nodeType":"YulFunctionCall","src":"8314:70:181"},"variableNames":[{"name":"tail_2","nodeType":"YulIdentifier","src":"8304:6:181"}]},{"nodeType":"YulAssignment","src":"8397:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"8411:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"8419:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8407:3:181"},"nodeType":"YulFunctionCall","src":"8407:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"8397:6:181"}]},{"nodeType":"YulAssignment","src":"8435:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8446:3:181"},{"name":"_3","nodeType":"YulIdentifier","src":"8451:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8442:3:181"},"nodeType":"YulFunctionCall","src":"8442:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"8435:3:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"7164:1:181"},{"name":"value1","nodeType":"YulIdentifier","src":"7167:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7161:2:181"},"nodeType":"YulFunctionCall","src":"7161:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"7175:18:181","statements":[{"nodeType":"YulAssignment","src":"7177:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"7186:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"7189:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7182:3:181"},"nodeType":"YulFunctionCall","src":"7182:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"7177:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"7157:3:181","statements":[]},"src":"7153:1311:181"},{"expression":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"8492:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8504:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8515:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8500:3:181"},"nodeType":"YulFunctionCall","src":"8500:20:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"8473:18:181"},"nodeType":"YulFunctionCall","src":"8473:48:181"},"nodeType":"YulExpressionStatement","src":"8473:48:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8541:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8552:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8537:3:181"},"nodeType":"YulFunctionCall","src":"8537:20:181"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"8563:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8571:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8559:3:181"},"nodeType":"YulFunctionCall","src":"8559:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8530:6:181"},"nodeType":"YulFunctionCall","src":"8530:52:181"},"nodeType":"YulExpressionStatement","src":"8530:52:181"},{"nodeType":"YulAssignment","src":"8591:57:181","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"8625:6:181"},{"name":"value4","nodeType":"YulIdentifier","src":"8633:6:181"},{"name":"tail_2","nodeType":"YulIdentifier","src":"8641:6:181"}],"functionName":{"name":"abi_encode_bytes_calldata","nodeType":"YulIdentifier","src":"8599:25:181"},"nodeType":"YulFunctionCall","src":"8599:49:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8591:4:181"}]}]},"name":"abi_encode_tuple_t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr_t_address_t_bytes_calldata_ptr__to_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6764:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"6775:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6783:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6791:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6799:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6807:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6818:4:181","type":""}],"src":"6526:2128:181"},{"body":{"nodeType":"YulBlock","src":"8833:177:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8850:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8861:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8843:6:181"},"nodeType":"YulFunctionCall","src":"8843:21:181"},"nodeType":"YulExpressionStatement","src":"8843:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8884:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8895:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8880:3:181"},"nodeType":"YulFunctionCall","src":"8880:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8900:2:181","type":"","value":"27"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8873:6:181"},"nodeType":"YulFunctionCall","src":"8873:30:181"},"nodeType":"YulExpressionStatement","src":"8873:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8923:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8934:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8919:3:181"},"nodeType":"YulFunctionCall","src":"8919:18:181"},{"hexValue":"4c69624469616d6f6e643a2021636f6e7472616374206f776e6572","kind":"string","nodeType":"YulLiteral","src":"8939:29:181","type":"","value":"LibDiamond: !contract owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8912:6:181"},"nodeType":"YulFunctionCall","src":"8912:57:181"},"nodeType":"YulExpressionStatement","src":"8912:57:181"},{"nodeType":"YulAssignment","src":"8978:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8990:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9001:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8986:3:181"},"nodeType":"YulFunctionCall","src":"8986:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8978:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4beb0b63f903eb8754578ce7af3eb73865b73e0886b8ef814c8fa0e6d2575299__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8810:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8824:4:181","type":""}],"src":"8659:351:181"},{"body":{"nodeType":"YulBlock","src":"9084:1437:181","statements":[{"nodeType":"YulVariableDeclaration","src":"9094:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9114:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9108:5:181"},"nodeType":"YulFunctionCall","src":"9108:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"9098:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9136:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"9141:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9129:6:181"},"nodeType":"YulFunctionCall","src":"9129:19:181"},"nodeType":"YulExpressionStatement","src":"9129:19:181"},{"nodeType":"YulVariableDeclaration","src":"9157:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"9167:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9161:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9180:31:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9203:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9208:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9199:3:181"},"nodeType":"YulFunctionCall","src":"9199:12:181"},"variables":[{"name":"updated_pos","nodeType":"YulTypedName","src":"9184:11:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9220:24:181","value":{"name":"updated_pos","nodeType":"YulIdentifier","src":"9233:11:181"},"variables":[{"name":"pos_1","nodeType":"YulTypedName","src":"9224:5:181","type":""}]},{"nodeType":"YulAssignment","src":"9253:18:181","value":{"name":"updated_pos","nodeType":"YulIdentifier","src":"9260:11:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"9253:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"9280:38:181","value":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"9296:5:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9307:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"9310:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9303:3:181"},"nodeType":"YulFunctionCall","src":"9303:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9292:3:181"},"nodeType":"YulFunctionCall","src":"9292:26:181"},"variables":[{"name":"tail","nodeType":"YulTypedName","src":"9284:4:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9327:28:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9345:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9352:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9341:3:181"},"nodeType":"YulFunctionCall","src":"9341:14:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"9331:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9364:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"9373:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"9368:1:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9383:12:181","value":{"name":"i","nodeType":"YulIdentifier","src":"9394:1:181"},"variables":[{"name":"i_1","nodeType":"YulTypedName","src":"9387:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9459:1036:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9480:3:181"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"9489:4:181"},{"name":"pos_1","nodeType":"YulIdentifier","src":"9495:5:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9485:3:181"},"nodeType":"YulFunctionCall","src":"9485:16:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9473:6:181"},"nodeType":"YulFunctionCall","src":"9473:29:181"},"nodeType":"YulExpressionStatement","src":"9473:29:181"},{"nodeType":"YulVariableDeclaration","src":"9515:23:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"9531:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9525:5:181"},"nodeType":"YulFunctionCall","src":"9525:13:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"9519:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9551:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"9561:4:181","type":"","value":"0x60"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"9555:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9578:27:181","value":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"9596:4:181"},{"name":"_3","nodeType":"YulIdentifier","src":"9602:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9592:3:181"},"nodeType":"YulFunctionCall","src":"9592:13:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"9582:6:181","type":""}]},{"expression":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"9625:4:181"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"9641:2:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9635:5:181"},"nodeType":"YulFunctionCall","src":"9635:9:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9654:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"9659:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9650:3:181"},"nodeType":"YulFunctionCall","src":"9650:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"9663:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9646:3:181"},"nodeType":"YulFunctionCall","src":"9646:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9631:3:181"},"nodeType":"YulFunctionCall","src":"9631:35:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9618:6:181"},"nodeType":"YulFunctionCall","src":"9618:49:181"},"nodeType":"YulExpressionStatement","src":"9618:49:181"},{"nodeType":"YulVariableDeclaration","src":"9680:38:181","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"9710:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9714:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9706:3:181"},"nodeType":"YulFunctionCall","src":"9706:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9700:5:181"},"nodeType":"YulFunctionCall","src":"9700:18:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"9684:12:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"9762:12:181"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"9780:4:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9786:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9776:3:181"},"nodeType":"YulFunctionCall","src":"9776:13:181"}],"functionName":{"name":"abi_encode_enum_FacetCutAction","nodeType":"YulIdentifier","src":"9731:30:181"},"nodeType":"YulFunctionCall","src":"9731:59:181"},"nodeType":"YulExpressionStatement","src":"9731:59:181"},{"nodeType":"YulVariableDeclaration","src":"9803:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"9813:4:181","type":"","value":"0x40"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"9807:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9830:40:181","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"9862:2:181"},{"name":"_4","nodeType":"YulIdentifier","src":"9866:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9858:3:181"},"nodeType":"YulFunctionCall","src":"9858:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9852:5:181"},"nodeType":"YulFunctionCall","src":"9852:18:181"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"9834:14:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"9894:4:181"},{"name":"_4","nodeType":"YulIdentifier","src":"9900:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9890:3:181"},"nodeType":"YulFunctionCall","src":"9890:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"9905:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9883:6:181"},"nodeType":"YulFunctionCall","src":"9883:25:181"},"nodeType":"YulExpressionStatement","src":"9883:25:181"},{"nodeType":"YulVariableDeclaration","src":"9921:19:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"9934:6:181"},"variables":[{"name":"pos_2","nodeType":"YulTypedName","src":"9925:5:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9953:37:181","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"9975:14:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9969:5:181"},"nodeType":"YulFunctionCall","src":"9969:21:181"},"variables":[{"name":"length_1","nodeType":"YulTypedName","src":"9957:8:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"10010:6:181"},{"name":"length_1","nodeType":"YulIdentifier","src":"10018:8:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10003:6:181"},"nodeType":"YulFunctionCall","src":"10003:24:181"},"nodeType":"YulExpressionStatement","src":"10003:24:181"},{"nodeType":"YulAssignment","src":"10040:23:181","value":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"10053:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"10059:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10049:3:181"},"nodeType":"YulFunctionCall","src":"10049:14:181"},"variableNames":[{"name":"pos_2","nodeType":"YulIdentifier","src":"10040:5:181"}]},{"nodeType":"YulVariableDeclaration","src":"10076:39:181","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"10096:14:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10112:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10092:3:181"},"nodeType":"YulFunctionCall","src":"10092:23:181"},"variables":[{"name":"srcPtr_1","nodeType":"YulTypedName","src":"10080:8:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10128:12:181","value":{"name":"i","nodeType":"YulIdentifier","src":"10139:1:181"},"variables":[{"name":"i_2","nodeType":"YulTypedName","src":"10132:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10214:175:181","statements":[{"expression":{"arguments":[{"name":"pos_2","nodeType":"YulIdentifier","src":"10239:5:181"},{"arguments":[{"arguments":[{"name":"srcPtr_1","nodeType":"YulIdentifier","src":"10256:8:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10250:5:181"},"nodeType":"YulFunctionCall","src":"10250:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10271:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"10276:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10267:3:181"},"nodeType":"YulFunctionCall","src":"10267:20:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10246:3:181"},"nodeType":"YulFunctionCall","src":"10246:42:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10232:6:181"},"nodeType":"YulFunctionCall","src":"10232:57:181"},"nodeType":"YulExpressionStatement","src":"10232:57:181"},{"nodeType":"YulAssignment","src":"10306:23:181","value":{"arguments":[{"name":"pos_2","nodeType":"YulIdentifier","src":"10319:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10326:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10315:3:181"},"nodeType":"YulFunctionCall","src":"10315:14:181"},"variableNames":[{"name":"pos_2","nodeType":"YulIdentifier","src":"10306:5:181"}]},{"nodeType":"YulAssignment","src":"10346:29:181","value":{"arguments":[{"name":"srcPtr_1","nodeType":"YulIdentifier","src":"10362:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10372:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10358:3:181"},"nodeType":"YulFunctionCall","src":"10358:17:181"},"variableNames":[{"name":"srcPtr_1","nodeType":"YulIdentifier","src":"10346:8:181"}]}]},"condition":{"arguments":[{"name":"i_2","nodeType":"YulIdentifier","src":"10164:3:181"},{"name":"length_1","nodeType":"YulIdentifier","src":"10169:8:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10161:2:181"},"nodeType":"YulFunctionCall","src":"10161:17:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"10179:22:181","statements":[{"nodeType":"YulAssignment","src":"10181:18:181","value":{"arguments":[{"name":"i_2","nodeType":"YulIdentifier","src":"10192:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"10197:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10188:3:181"},"nodeType":"YulFunctionCall","src":"10188:11:181"},"variableNames":[{"name":"i_2","nodeType":"YulIdentifier","src":"10181:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"10157:3:181","statements":[]},"src":"10153:236:181"},{"nodeType":"YulAssignment","src":"10402:13:181","value":{"name":"pos_2","nodeType":"YulIdentifier","src":"10410:5:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10402:4:181"}]},{"nodeType":"YulAssignment","src":"10428:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"10442:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10450:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10438:3:181"},"nodeType":"YulFunctionCall","src":"10438:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"10428:6:181"}]},{"nodeType":"YulAssignment","src":"10466:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10477:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10482:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10473:3:181"},"nodeType":"YulFunctionCall","src":"10473:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"10466:3:181"}]}]},"condition":{"arguments":[{"name":"i_1","nodeType":"YulIdentifier","src":"9415:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"9420:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9412:2:181"},"nodeType":"YulFunctionCall","src":"9412:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"9428:22:181","statements":[{"nodeType":"YulAssignment","src":"9430:18:181","value":{"arguments":[{"name":"i_1","nodeType":"YulIdentifier","src":"9441:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"9446:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9437:3:181"},"nodeType":"YulFunctionCall","src":"9437:11:181"},"variableNames":[{"name":"i_1","nodeType":"YulIdentifier","src":"9430:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"9408:3:181","statements":[]},"src":"9404:1091:181"},{"nodeType":"YulAssignment","src":"10504:11:181","value":{"name":"tail","nodeType":"YulIdentifier","src":"10511:4:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"10504:3:181"}]}]},"name":"abi_encode_array_struct_FacetCut_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"9061:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"9068:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"9076:3:181","type":""}],"src":"9015:1506:181"},{"body":{"nodeType":"YulBlock","src":"10592:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"10602:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10611:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"10606:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10671:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"10696:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"10701:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10692:3:181"},"nodeType":"YulFunctionCall","src":"10692:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"10715:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"10720:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10711:3:181"},"nodeType":"YulFunctionCall","src":"10711:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10705:5:181"},"nodeType":"YulFunctionCall","src":"10705:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10685:6:181"},"nodeType":"YulFunctionCall","src":"10685:39:181"},"nodeType":"YulExpressionStatement","src":"10685:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"10632:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"10635:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10629:2:181"},"nodeType":"YulFunctionCall","src":"10629:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"10643:19:181","statements":[{"nodeType":"YulAssignment","src":"10645:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"10654:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"10657:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10650:3:181"},"nodeType":"YulFunctionCall","src":"10650:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"10645:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"10625:3:181","statements":[]},"src":"10621:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"10754:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"10759:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10750:3:181"},"nodeType":"YulFunctionCall","src":"10750:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"10768:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10743:6:181"},"nodeType":"YulFunctionCall","src":"10743:27:181"},"nodeType":"YulExpressionStatement","src":"10743:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"10570:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"10575:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"10580:6:181","type":""}],"src":"10526:250:181"},{"body":{"nodeType":"YulBlock","src":"10830:221:181","statements":[{"nodeType":"YulVariableDeclaration","src":"10840:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10860:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10854:5:181"},"nodeType":"YulFunctionCall","src":"10854:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"10844:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10882:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"10887:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10875:6:181"},"nodeType":"YulFunctionCall","src":"10875:19:181"},"nodeType":"YulExpressionStatement","src":"10875:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10942:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"10949:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10938:3:181"},"nodeType":"YulFunctionCall","src":"10938:16:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10960:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"10965:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10956:3:181"},"nodeType":"YulFunctionCall","src":"10956:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"10972:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"10903:34:181"},"nodeType":"YulFunctionCall","src":"10903:76:181"},"nodeType":"YulExpressionStatement","src":"10903:76:181"},{"nodeType":"YulAssignment","src":"10988:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11003:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"11016:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11024:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11012:3:181"},"nodeType":"YulFunctionCall","src":"11012:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11033:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11029:3:181"},"nodeType":"YulFunctionCall","src":"11029:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11008:3:181"},"nodeType":"YulFunctionCall","src":"11008:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10999:3:181"},"nodeType":"YulFunctionCall","src":"10999:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"11040:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10995:3:181"},"nodeType":"YulFunctionCall","src":"10995:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"10988:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"10807:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"10814:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10822:3:181","type":""}],"src":"10781:270:181"},{"body":{"nodeType":"YulBlock","src":"11335:301:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11352:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11363:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11345:6:181"},"nodeType":"YulFunctionCall","src":"11345:21:181"},"nodeType":"YulExpressionStatement","src":"11345:21:181"},{"nodeType":"YulVariableDeclaration","src":"11375:78:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11426:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11438:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11449:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11434:3:181"},"nodeType":"YulFunctionCall","src":"11434:18:181"}],"functionName":{"name":"abi_encode_array_struct_FacetCut_dyn","nodeType":"YulIdentifier","src":"11389:36:181"},"nodeType":"YulFunctionCall","src":"11389:64:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"11379:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11473:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11484:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11469:3:181"},"nodeType":"YulFunctionCall","src":"11469:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11493:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11509:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"11514:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11505:3:181"},"nodeType":"YulFunctionCall","src":"11505:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"11518:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11501:3:181"},"nodeType":"YulFunctionCall","src":"11501:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11489:3:181"},"nodeType":"YulFunctionCall","src":"11489:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11462:6:181"},"nodeType":"YulFunctionCall","src":"11462:60:181"},"nodeType":"YulExpressionStatement","src":"11462:60:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11542:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11553:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11538:3:181"},"nodeType":"YulFunctionCall","src":"11538:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"11562:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"11570:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11558:3:181"},"nodeType":"YulFunctionCall","src":"11558:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11531:6:181"},"nodeType":"YulFunctionCall","src":"11531:50:181"},"nodeType":"YulExpressionStatement","src":"11531:50:181"},{"nodeType":"YulAssignment","src":"11590:40:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"11615:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"11623:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"11598:16:181"},"nodeType":"YulFunctionCall","src":"11598:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11590:4:181"}]}]},"name":"abi_encode_tuple_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11288:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11299:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11307:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11315:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11326:4:181","type":""}],"src":"11056:580:181"},{"body":{"nodeType":"YulBlock","src":"11815:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11832:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11843:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11825:6:181"},"nodeType":"YulFunctionCall","src":"11825:21:181"},"nodeType":"YulExpressionStatement","src":"11825:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11866:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11877:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11862:3:181"},"nodeType":"YulFunctionCall","src":"11862:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11882:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11855:6:181"},"nodeType":"YulFunctionCall","src":"11855:30:181"},"nodeType":"YulExpressionStatement","src":"11855:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11905:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11916:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11901:3:181"},"nodeType":"YulFunctionCall","src":"11901:18:181"},{"hexValue":"4c69624469616d6f6e643a2064656c6179206e6f7420656c6170736564","kind":"string","nodeType":"YulLiteral","src":"11921:31:181","type":"","value":"LibDiamond: delay not elapsed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11894:6:181"},"nodeType":"YulFunctionCall","src":"11894:59:181"},"nodeType":"YulExpressionStatement","src":"11894:59:181"},{"nodeType":"YulAssignment","src":"11962:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11974:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11985:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11970:3:181"},"nodeType":"YulFunctionCall","src":"11970:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11962:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_bf74910c6b16e2fe967a9c2fd1df7451e7594bd2184362aed0a451068a63c3f3__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11792:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11806:4:181","type":""}],"src":"11641:353:181"},{"body":{"nodeType":"YulBlock","src":"12031:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12048:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12055:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"12060:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12051:3:181"},"nodeType":"YulFunctionCall","src":"12051:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12041:6:181"},"nodeType":"YulFunctionCall","src":"12041:31:181"},"nodeType":"YulExpressionStatement","src":"12041:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12088:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"12091:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12081:6:181"},"nodeType":"YulFunctionCall","src":"12081:15:181"},"nodeType":"YulExpressionStatement","src":"12081:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12112:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12115:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12105:6:181"},"nodeType":"YulFunctionCall","src":"12105:15:181"},"nodeType":"YulExpressionStatement","src":"12105:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"11999:127:181"},{"body":{"nodeType":"YulBlock","src":"12305:229:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12322:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12333:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12315:6:181"},"nodeType":"YulFunctionCall","src":"12315:21:181"},"nodeType":"YulExpressionStatement","src":"12315:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12356:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12367:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12352:3:181"},"nodeType":"YulFunctionCall","src":"12352:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12372:2:181","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12345:6:181"},"nodeType":"YulFunctionCall","src":"12345:30:181"},"nodeType":"YulExpressionStatement","src":"12345:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12395:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12406:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12391:3:181"},"nodeType":"YulFunctionCall","src":"12391:18:181"},{"hexValue":"4c69624469616d6f6e644375743a20496e636f72726563742046616365744375","kind":"string","nodeType":"YulLiteral","src":"12411:34:181","type":"","value":"LibDiamondCut: Incorrect FacetCu"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12384:6:181"},"nodeType":"YulFunctionCall","src":"12384:62:181"},"nodeType":"YulExpressionStatement","src":"12384:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12466:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12477:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12462:3:181"},"nodeType":"YulFunctionCall","src":"12462:18:181"},{"hexValue":"74416374696f6e","kind":"string","nodeType":"YulLiteral","src":"12482:9:181","type":"","value":"tAction"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12455:6:181"},"nodeType":"YulFunctionCall","src":"12455:37:181"},"nodeType":"YulExpressionStatement","src":"12455:37:181"},{"nodeType":"YulAssignment","src":"12501:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12513:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12524:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12509:3:181"},"nodeType":"YulFunctionCall","src":"12509:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12501:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12282:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12296:4:181","type":""}],"src":"12131:403:181"},{"body":{"nodeType":"YulBlock","src":"12571:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12588:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12595:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"12600:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12591:3:181"},"nodeType":"YulFunctionCall","src":"12591:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12581:6:181"},"nodeType":"YulFunctionCall","src":"12581:31:181"},"nodeType":"YulExpressionStatement","src":"12581:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12628:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"12631:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12621:6:181"},"nodeType":"YulFunctionCall","src":"12621:15:181"},"nodeType":"YulExpressionStatement","src":"12621:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12652:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12655:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12645:6:181"},"nodeType":"YulFunctionCall","src":"12645:15:181"},"nodeType":"YulExpressionStatement","src":"12645:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"12539:127:181"},{"body":{"nodeType":"YulBlock","src":"12719:77:181","statements":[{"nodeType":"YulAssignment","src":"12729:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"12740:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"12743:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12736:3:181"},"nodeType":"YulFunctionCall","src":"12736:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"12729:3:181"}]},{"body":{"nodeType":"YulBlock","src":"12768:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"12770:16:181"},"nodeType":"YulFunctionCall","src":"12770:18:181"},"nodeType":"YulExpressionStatement","src":"12770:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"12760:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"12763:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12757:2:181"},"nodeType":"YulFunctionCall","src":"12757:10:181"},"nodeType":"YulIf","src":"12754:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"12702:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"12705:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"12711:3:181","type":""}],"src":"12671:125:181"},{"body":{"nodeType":"YulBlock","src":"13108:346:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13125:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13136:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13118:6:181"},"nodeType":"YulFunctionCall","src":"13118:22:181"},"nodeType":"YulExpressionStatement","src":"13118:22:181"},{"nodeType":"YulVariableDeclaration","src":"13149:79:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13200:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13212:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13223:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13208:3:181"},"nodeType":"YulFunctionCall","src":"13208:19:181"}],"functionName":{"name":"abi_encode_array_struct_FacetCut_dyn","nodeType":"YulIdentifier","src":"13163:36:181"},"nodeType":"YulFunctionCall","src":"13163:65:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"13153:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13248:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13259:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13244:3:181"},"nodeType":"YulFunctionCall","src":"13244:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13268:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13284:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"13289:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13280:3:181"},"nodeType":"YulFunctionCall","src":"13280:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"13293:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13276:3:181"},"nodeType":"YulFunctionCall","src":"13276:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13264:3:181"},"nodeType":"YulFunctionCall","src":"13264:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13237:6:181"},"nodeType":"YulFunctionCall","src":"13237:60:181"},"nodeType":"YulExpressionStatement","src":"13237:60:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13317:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13328:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13313:3:181"},"nodeType":"YulFunctionCall","src":"13313:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"13337:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"13345:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13333:3:181"},"nodeType":"YulFunctionCall","src":"13333:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13306:6:181"},"nodeType":"YulFunctionCall","src":"13306:50:181"},"nodeType":"YulExpressionStatement","src":"13306:50:181"},{"nodeType":"YulAssignment","src":"13365:40:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"13390:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"13398:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"13373:16:181"},"nodeType":"YulFunctionCall","src":"13373:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13365:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13425:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13436:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13421:3:181"},"nodeType":"YulFunctionCall","src":"13421:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"13441:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13414:6:181"},"nodeType":"YulFunctionCall","src":"13414:34:181"},"nodeType":"YulExpressionStatement","src":"13414:34:181"}]},"name":"abi_encode_tuple_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr_t_uint256__to_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13053:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13064:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13072:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13080:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13088:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13099:4:181","type":""}],"src":"12801:653:181"},{"body":{"nodeType":"YulBlock","src":"13633:233:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13650:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13661:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13643:6:181"},"nodeType":"YulFunctionCall","src":"13643:21:181"},"nodeType":"YulExpressionStatement","src":"13643:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13684:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13695:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13680:3:181"},"nodeType":"YulFunctionCall","src":"13680:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13700:2:181","type":"","value":"43"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13673:6:181"},"nodeType":"YulFunctionCall","src":"13673:30:181"},"nodeType":"YulExpressionStatement","src":"13673:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13723:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13734:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13719:3:181"},"nodeType":"YulFunctionCall","src":"13719:18:181"},{"hexValue":"4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e2066","kind":"string","nodeType":"YulLiteral","src":"13739:34:181","type":"","value":"LibDiamondCut: No selectors in f"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13712:6:181"},"nodeType":"YulFunctionCall","src":"13712:62:181"},"nodeType":"YulExpressionStatement","src":"13712:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13794:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13805:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13790:3:181"},"nodeType":"YulFunctionCall","src":"13790:18:181"},{"hexValue":"6163657420746f20637574","kind":"string","nodeType":"YulLiteral","src":"13810:13:181","type":"","value":"acet to cut"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13783:6:181"},"nodeType":"YulFunctionCall","src":"13783:41:181"},"nodeType":"YulExpressionStatement","src":"13783:41:181"},{"nodeType":"YulAssignment","src":"13833:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13845:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13856:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13841:3:181"},"nodeType":"YulFunctionCall","src":"13841:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13833:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13610:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13624:4:181","type":""}],"src":"13459:407:181"},{"body":{"nodeType":"YulBlock","src":"14045:234:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14062:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14073:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14055:6:181"},"nodeType":"YulFunctionCall","src":"14055:21:181"},"nodeType":"YulExpressionStatement","src":"14055:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14096:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14107:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14092:3:181"},"nodeType":"YulFunctionCall","src":"14092:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14112:2:181","type":"","value":"44"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14085:6:181"},"nodeType":"YulFunctionCall","src":"14085:30:181"},"nodeType":"YulExpressionStatement","src":"14085:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14135:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14146:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14131:3:181"},"nodeType":"YulFunctionCall","src":"14131:18:181"},{"hexValue":"4c69624469616d6f6e644375743a204164642066616365742063616e27742062","kind":"string","nodeType":"YulLiteral","src":"14151:34:181","type":"","value":"LibDiamondCut: Add facet can't b"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14124:6:181"},"nodeType":"YulFunctionCall","src":"14124:62:181"},"nodeType":"YulExpressionStatement","src":"14124:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14206:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14217:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14202:3:181"},"nodeType":"YulFunctionCall","src":"14202:18:181"},{"hexValue":"652061646472657373283029","kind":"string","nodeType":"YulLiteral","src":"14222:14:181","type":"","value":"e address(0)"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14195:6:181"},"nodeType":"YulFunctionCall","src":"14195:42:181"},"nodeType":"YulExpressionStatement","src":"14195:42:181"},{"nodeType":"YulAssignment","src":"14246:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14258:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14269:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14254:3:181"},"nodeType":"YulFunctionCall","src":"14254:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14246:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14022:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14036:4:181","type":""}],"src":"13871:408:181"},{"body":{"nodeType":"YulBlock","src":"14458:243:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14475:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14486:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14468:6:181"},"nodeType":"YulFunctionCall","src":"14468:21:181"},"nodeType":"YulExpressionStatement","src":"14468:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14509:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14520:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14505:3:181"},"nodeType":"YulFunctionCall","src":"14505:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14525:2:181","type":"","value":"53"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14498:6:181"},"nodeType":"YulFunctionCall","src":"14498:30:181"},"nodeType":"YulExpressionStatement","src":"14498:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14548:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14559:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14544:3:181"},"nodeType":"YulFunctionCall","src":"14544:18:181"},{"hexValue":"4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f","kind":"string","nodeType":"YulLiteral","src":"14564:34:181","type":"","value":"LibDiamondCut: Can't add functio"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14537:6:181"},"nodeType":"YulFunctionCall","src":"14537:62:181"},"nodeType":"YulExpressionStatement","src":"14537:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14619:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14630:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14615:3:181"},"nodeType":"YulFunctionCall","src":"14615:18:181"},{"hexValue":"6e207468617420616c726561647920657869737473","kind":"string","nodeType":"YulLiteral","src":"14635:23:181","type":"","value":"n that already exists"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14608:6:181"},"nodeType":"YulFunctionCall","src":"14608:51:181"},"nodeType":"YulExpressionStatement","src":"14608:51:181"},{"nodeType":"YulAssignment","src":"14668:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14680:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14691:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14676:3:181"},"nodeType":"YulFunctionCall","src":"14676:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14668:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14435:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14449:4:181","type":""}],"src":"14284:417:181"},{"body":{"nodeType":"YulBlock","src":"14752:171:181","statements":[{"nodeType":"YulVariableDeclaration","src":"14762:36:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14772:26:181","type":"","value":"0xffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14766:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"14807:29:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14826:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14833:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14822:3:181"},"nodeType":"YulFunctionCall","src":"14822:14:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"14811:7:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"14864:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14866:16:181"},"nodeType":"YulFunctionCall","src":"14866:18:181"},"nodeType":"YulExpressionStatement","src":"14866:18:181"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"14851:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14860:2:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"14848:2:181"},"nodeType":"YulFunctionCall","src":"14848:15:181"},"nodeType":"YulIf","src":"14845:41:181"},{"nodeType":"YulAssignment","src":"14895:22:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"14906:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"14915:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14902:3:181"},"nodeType":"YulFunctionCall","src":"14902:15:181"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"14895:3:181"}]}]},"name":"increment_t_uint96","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"14734:5:181","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"14744:3:181","type":""}],"src":"14706:217:181"},{"body":{"nodeType":"YulBlock","src":"15102:246:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15119:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15130:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15112:6:181"},"nodeType":"YulFunctionCall","src":"15112:21:181"},"nodeType":"YulExpressionStatement","src":"15112:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15153:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15164:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15149:3:181"},"nodeType":"YulFunctionCall","src":"15149:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15169:2:181","type":"","value":"56"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15142:6:181"},"nodeType":"YulFunctionCall","src":"15142:30:181"},"nodeType":"YulExpressionStatement","src":"15142:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15192:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15203:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15188:3:181"},"nodeType":"YulFunctionCall","src":"15188:18:181"},{"hexValue":"4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e","kind":"string","nodeType":"YulLiteral","src":"15208:34:181","type":"","value":"LibDiamondCut: Can't replace fun"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15181:6:181"},"nodeType":"YulFunctionCall","src":"15181:62:181"},"nodeType":"YulExpressionStatement","src":"15181:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15263:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15274:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15259:3:181"},"nodeType":"YulFunctionCall","src":"15259:18:181"},{"hexValue":"6374696f6e20776974682073616d652066756e6374696f6e","kind":"string","nodeType":"YulLiteral","src":"15279:26:181","type":"","value":"ction with same function"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15252:6:181"},"nodeType":"YulFunctionCall","src":"15252:54:181"},"nodeType":"YulExpressionStatement","src":"15252:54:181"},{"nodeType":"YulAssignment","src":"15315:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15327:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15338:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15323:3:181"},"nodeType":"YulFunctionCall","src":"15323:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15315:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15079:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15093:4:181","type":""}],"src":"14928:420:181"},{"body":{"nodeType":"YulBlock","src":"15527:244:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15544:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15555:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15537:6:181"},"nodeType":"YulFunctionCall","src":"15537:21:181"},"nodeType":"YulExpressionStatement","src":"15537:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15578:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15589:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15574:3:181"},"nodeType":"YulFunctionCall","src":"15574:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15594:2:181","type":"","value":"54"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15567:6:181"},"nodeType":"YulFunctionCall","src":"15567:30:181"},"nodeType":"YulExpressionStatement","src":"15567:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15617:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15628:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15613:3:181"},"nodeType":"YulFunctionCall","src":"15613:18:181"},{"hexValue":"4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472","kind":"string","nodeType":"YulLiteral","src":"15633:34:181","type":"","value":"LibDiamondCut: Remove facet addr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15606:6:181"},"nodeType":"YulFunctionCall","src":"15606:62:181"},"nodeType":"YulExpressionStatement","src":"15606:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15688:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15699:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15684:3:181"},"nodeType":"YulFunctionCall","src":"15684:18:181"},{"hexValue":"657373206d7573742062652061646472657373283029","kind":"string","nodeType":"YulLiteral","src":"15704:24:181","type":"","value":"ess must be address(0)"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15677:6:181"},"nodeType":"YulFunctionCall","src":"15677:52:181"},"nodeType":"YulExpressionStatement","src":"15677:52:181"},{"nodeType":"YulAssignment","src":"15738:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15750:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15761:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15746:3:181"},"nodeType":"YulFunctionCall","src":"15746:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15738:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15504:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15518:4:181","type":""}],"src":"15353:418:181"},{"body":{"nodeType":"YulBlock","src":"15950:232:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15967:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15978:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15960:6:181"},"nodeType":"YulFunctionCall","src":"15960:21:181"},"nodeType":"YulExpressionStatement","src":"15960:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16001:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16012:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15997:3:181"},"nodeType":"YulFunctionCall","src":"15997:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16017:2:181","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15990:6:181"},"nodeType":"YulFunctionCall","src":"15990:30:181"},"nodeType":"YulExpressionStatement","src":"15990:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16040:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16051:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16036:3:181"},"nodeType":"YulFunctionCall","src":"16036:18:181"},{"hexValue":"4c69624469616d6f6e644375743a2043616e6e6f742072656d6f766520637574","kind":"string","nodeType":"YulLiteral","src":"16056:34:181","type":"","value":"LibDiamondCut: Cannot remove cut"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16029:6:181"},"nodeType":"YulFunctionCall","src":"16029:62:181"},"nodeType":"YulExpressionStatement","src":"16029:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16111:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16122:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16107:3:181"},"nodeType":"YulFunctionCall","src":"16107:18:181"},{"hexValue":"2073656c6563746f7273","kind":"string","nodeType":"YulLiteral","src":"16127:12:181","type":"","value":" selectors"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16100:6:181"},"nodeType":"YulFunctionCall","src":"16100:40:181"},"nodeType":"YulExpressionStatement","src":"16100:40:181"},{"nodeType":"YulAssignment","src":"16149:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16161:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16172:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16157:3:181"},"nodeType":"YulFunctionCall","src":"16157:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16149:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_6dc3f1dab50ff21fc15088aa16d05815257e5abe70c54939829f018f001302c3__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15927:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15941:4:181","type":""}],"src":"15776:406:181"},{"body":{"nodeType":"YulBlock","src":"16361:250:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16378:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16389:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16371:6:181"},"nodeType":"YulFunctionCall","src":"16371:21:181"},"nodeType":"YulExpressionStatement","src":"16371:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16412:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16423:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16408:3:181"},"nodeType":"YulFunctionCall","src":"16408:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16428:2:181","type":"","value":"60"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16401:6:181"},"nodeType":"YulFunctionCall","src":"16401:30:181"},"nodeType":"YulExpressionStatement","src":"16401:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16451:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16462:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16447:3:181"},"nodeType":"YulFunctionCall","src":"16447:18:181"},{"hexValue":"4c69624469616d6f6e644375743a205f696e6974206973206164647265737328","kind":"string","nodeType":"YulLiteral","src":"16467:34:181","type":"","value":"LibDiamondCut: _init is address("}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16440:6:181"},"nodeType":"YulFunctionCall","src":"16440:62:181"},"nodeType":"YulExpressionStatement","src":"16440:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16522:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16533:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16518:3:181"},"nodeType":"YulFunctionCall","src":"16518:18:181"},{"hexValue":"3029206275745f63616c6c64617461206973206e6f7420656d707479","kind":"string","nodeType":"YulLiteral","src":"16538:30:181","type":"","value":"0) but_calldata is not empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16511:6:181"},"nodeType":"YulFunctionCall","src":"16511:58:181"},"nodeType":"YulExpressionStatement","src":"16511:58:181"},{"nodeType":"YulAssignment","src":"16578:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16590:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16601:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16586:3:181"},"nodeType":"YulFunctionCall","src":"16586:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16578:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16338:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16352:4:181","type":""}],"src":"16187:424:181"},{"body":{"nodeType":"YulBlock","src":"16790:251:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16807:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16818:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16800:6:181"},"nodeType":"YulFunctionCall","src":"16800:21:181"},"nodeType":"YulExpressionStatement","src":"16800:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16841:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16852:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16837:3:181"},"nodeType":"YulFunctionCall","src":"16837:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16857:2:181","type":"","value":"61"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16830:6:181"},"nodeType":"YulFunctionCall","src":"16830:30:181"},"nodeType":"YulExpressionStatement","src":"16830:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16880:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16891:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16876:3:181"},"nodeType":"YulFunctionCall","src":"16876:18:181"},{"hexValue":"4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d7074","kind":"string","nodeType":"YulLiteral","src":"16896:34:181","type":"","value":"LibDiamondCut: _calldata is empt"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16869:6:181"},"nodeType":"YulFunctionCall","src":"16869:62:181"},"nodeType":"YulExpressionStatement","src":"16869:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16951:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16962:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16947:3:181"},"nodeType":"YulFunctionCall","src":"16947:18:181"},{"hexValue":"7920627574205f696e6974206973206e6f742061646472657373283029","kind":"string","nodeType":"YulLiteral","src":"16967:31:181","type":"","value":"y but _init is not address(0)"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16940:6:181"},"nodeType":"YulFunctionCall","src":"16940:59:181"},"nodeType":"YulExpressionStatement","src":"16940:59:181"},{"nodeType":"YulAssignment","src":"17008:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17020:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17031:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17016:3:181"},"nodeType":"YulFunctionCall","src":"17016:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17008:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16767:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16781:4:181","type":""}],"src":"16616:425:181"},{"body":{"nodeType":"YulBlock","src":"17183:150:181","statements":[{"nodeType":"YulVariableDeclaration","src":"17193:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17213:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17207:5:181"},"nodeType":"YulFunctionCall","src":"17207:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"17197:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17268:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"17276:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17264:3:181"},"nodeType":"YulFunctionCall","src":"17264:17:181"},{"name":"pos","nodeType":"YulIdentifier","src":"17283:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"17288:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"17229:34:181"},"nodeType":"YulFunctionCall","src":"17229:66:181"},"nodeType":"YulExpressionStatement","src":"17229:66:181"},{"nodeType":"YulAssignment","src":"17304:23:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17315:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"17320:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17311:3:181"},"nodeType":"YulFunctionCall","src":"17311:16:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"17304:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"17159:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17164:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"17175:3:181","type":""}],"src":"17046:287:181"},{"body":{"nodeType":"YulBlock","src":"17459:98:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17476:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17487:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17469:6:181"},"nodeType":"YulFunctionCall","src":"17469:21:181"},"nodeType":"YulExpressionStatement","src":"17469:21:181"},{"nodeType":"YulAssignment","src":"17499:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17524:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17536:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17547:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17532:3:181"},"nodeType":"YulFunctionCall","src":"17532:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"17507:16:181"},"nodeType":"YulFunctionCall","src":"17507:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17499:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17428:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17439:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17450:4:181","type":""}],"src":"17338:219:181"},{"body":{"nodeType":"YulBlock","src":"17736:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17753:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17764:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17746:6:181"},"nodeType":"YulFunctionCall","src":"17746:21:181"},"nodeType":"YulExpressionStatement","src":"17746:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17787:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17798:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17783:3:181"},"nodeType":"YulFunctionCall","src":"17783:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17803:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17776:6:181"},"nodeType":"YulFunctionCall","src":"17776:30:181"},"nodeType":"YulExpressionStatement","src":"17776:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17826:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17837:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17822:3:181"},"nodeType":"YulFunctionCall","src":"17822:18:181"},{"hexValue":"4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e207265","kind":"string","nodeType":"YulLiteral","src":"17842:34:181","type":"","value":"LibDiamondCut: _init function re"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17815:6:181"},"nodeType":"YulFunctionCall","src":"17815:62:181"},"nodeType":"YulExpressionStatement","src":"17815:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17897:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17908:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17893:3:181"},"nodeType":"YulFunctionCall","src":"17893:18:181"},{"hexValue":"766572746564","kind":"string","nodeType":"YulLiteral","src":"17913:8:181","type":"","value":"verted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17886:6:181"},"nodeType":"YulFunctionCall","src":"17886:36:181"},"nodeType":"YulExpressionStatement","src":"17886:36:181"},{"nodeType":"YulAssignment","src":"17931:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17943:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17954:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17939:3:181"},"nodeType":"YulFunctionCall","src":"17939:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17931:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17713:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17727:4:181","type":""}],"src":"17562:402:181"},{"body":{"nodeType":"YulBlock","src":"18143:245:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18160:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18171:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18153:6:181"},"nodeType":"YulFunctionCall","src":"18153:21:181"},"nodeType":"YulExpressionStatement","src":"18153:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18194:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18205:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18190:3:181"},"nodeType":"YulFunctionCall","src":"18190:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18210:2:181","type":"","value":"55"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18183:6:181"},"nodeType":"YulFunctionCall","src":"18183:30:181"},"nodeType":"YulExpressionStatement","src":"18183:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18233:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18244:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18229:3:181"},"nodeType":"YulFunctionCall","src":"18229:18:181"},{"hexValue":"4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e63","kind":"string","nodeType":"YulLiteral","src":"18249:34:181","type":"","value":"LibDiamondCut: Can't remove func"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18222:6:181"},"nodeType":"YulFunctionCall","src":"18222:62:181"},"nodeType":"YulExpressionStatement","src":"18222:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18304:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18315:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18300:3:181"},"nodeType":"YulFunctionCall","src":"18300:18:181"},{"hexValue":"74696f6e207468617420646f65736e2774206578697374","kind":"string","nodeType":"YulLiteral","src":"18320:25:181","type":"","value":"tion that doesn't exist"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18293:6:181"},"nodeType":"YulFunctionCall","src":"18293:53:181"},"nodeType":"YulExpressionStatement","src":"18293:53:181"},{"nodeType":"YulAssignment","src":"18355:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18367:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18378:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18363:3:181"},"nodeType":"YulFunctionCall","src":"18363:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18355:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18120:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18134:4:181","type":""}],"src":"17969:419:181"},{"body":{"nodeType":"YulBlock","src":"18567:236:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18584:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18595:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18577:6:181"},"nodeType":"YulFunctionCall","src":"18577:21:181"},"nodeType":"YulExpressionStatement","src":"18577:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18618:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18629:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18614:3:181"},"nodeType":"YulFunctionCall","src":"18614:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18634:2:181","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18607:6:181"},"nodeType":"YulFunctionCall","src":"18607:30:181"},"nodeType":"YulExpressionStatement","src":"18607:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18657:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18668:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18653:3:181"},"nodeType":"YulFunctionCall","src":"18653:18:181"},{"hexValue":"4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d75","kind":"string","nodeType":"YulLiteral","src":"18673:34:181","type":"","value":"LibDiamondCut: Can't remove immu"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18646:6:181"},"nodeType":"YulFunctionCall","src":"18646:62:181"},"nodeType":"YulExpressionStatement","src":"18646:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18728:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18739:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18724:3:181"},"nodeType":"YulFunctionCall","src":"18724:18:181"},{"hexValue":"7461626c652066756e6374696f6e","kind":"string","nodeType":"YulLiteral","src":"18744:16:181","type":"","value":"table function"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18717:6:181"},"nodeType":"YulFunctionCall","src":"18717:44:181"},"nodeType":"YulExpressionStatement","src":"18717:44:181"},{"nodeType":"YulAssignment","src":"18770:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18782:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18793:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18778:3:181"},"nodeType":"YulFunctionCall","src":"18778:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18770:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18544:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18558:4:181","type":""}],"src":"18393:410:181"},{"body":{"nodeType":"YulBlock","src":"18857:79:181","statements":[{"nodeType":"YulAssignment","src":"18867:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"18879:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"18882:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"18875:3:181"},"nodeType":"YulFunctionCall","src":"18875:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"18867:4:181"}]},{"body":{"nodeType":"YulBlock","src":"18908:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"18910:16:181"},"nodeType":"YulFunctionCall","src":"18910:18:181"},"nodeType":"YulExpressionStatement","src":"18910:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"18899:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"18905:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"18896:2:181"},"nodeType":"YulFunctionCall","src":"18896:11:181"},"nodeType":"YulIf","src":"18893:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"18839:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"18842:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"18848:4:181","type":""}],"src":"18808:128:181"},{"body":{"nodeType":"YulBlock","src":"18973:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18990:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18997:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"19002:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"18993:3:181"},"nodeType":"YulFunctionCall","src":"18993:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18983:6:181"},"nodeType":"YulFunctionCall","src":"18983:31:181"},"nodeType":"YulExpressionStatement","src":"18983:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19030:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"19033:4:181","type":"","value":"0x31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19023:6:181"},"nodeType":"YulFunctionCall","src":"19023:15:181"},"nodeType":"YulExpressionStatement","src":"19023:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19054:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19057:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19047:6:181"},"nodeType":"YulFunctionCall","src":"19047:15:181"},"nodeType":"YulExpressionStatement","src":"19047:15:181"}]},"name":"panic_error_0x31","nodeType":"YulFunctionDefinition","src":"18941:127:181"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptrt_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, shl(5, length)), 0x20), dataEnd) { revert(0, 0) }\n        value0 := add(_2, 0x20)\n        value1 := length\n        value2 := abi_decode_address(add(headStart, 0x20))\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_bytes_calldata(add(headStart, offset_1), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_3454() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x60)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_array_struct_FacetCut_dyn(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(shl(5, length), 0x20)\n    }\n    function abi_decode_enum_FacetCutAction(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(lt(value, 3)) { revert(0, 0) }\n    }\n    function abi_decode_bytes4(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, shl(224, 0xffffffff)))) { revert(0, 0) }\n    }\n    function convert_array_t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr_to_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr(value, length) -> converted\n    {\n        let dst := allocate_memory(array_allocation_size_array_struct_FacetCut_dyn(length))\n        let dst_1 := dst\n        mstore(dst, length)\n        let _1 := 0x20\n        dst := add(dst, _1)\n        let _2 := 5\n        let srcEnd := add(value, shl(_2, length))\n        if gt(srcEnd, calldatasize()) { revert(0, 0) }\n        let src := value\n        for { } lt(src, srcEnd) { src := add(src, _1) }\n        {\n            let innerOffset := calldataload(src)\n            let _3 := 0xffffffffffffffff\n            if gt(innerOffset, _3)\n            {\n                let _4 := 0\n                revert(_4, _4)\n            }\n            let _5 := add(value, innerOffset)\n            if slt(sub(calldatasize(), _5), 0x60)\n            {\n                let _6 := 0\n                revert(_6, _6)\n            }\n            let value_1 := allocate_memory_3454()\n            mstore(value_1, abi_decode_address(_5))\n            mstore(add(value_1, _1), abi_decode_enum_FacetCutAction(add(_5, _1)))\n            let _7 := 64\n            let offset := calldataload(add(_5, _7))\n            if gt(offset, _3)\n            {\n                let _8 := 0\n                revert(_8, _8)\n            }\n            let _9 := add(_5, offset)\n            if iszero(slt(add(_9, 0x1f), calldatasize()))\n            {\n                let _10 := 0\n                revert(_10, _10)\n            }\n            let _11 := calldataload(_9)\n            let dst_2 := allocate_memory(array_allocation_size_array_struct_FacetCut_dyn(_11))\n            let dst_3 := dst_2\n            mstore(dst_2, _11)\n            dst_2 := add(dst_2, _1)\n            let srcEnd_1 := add(add(_9, shl(_2, _11)), _1)\n            if gt(srcEnd_1, calldatasize())\n            {\n                let _12 := 0\n                revert(_12, _12)\n            }\n            let src_1 := add(_9, _1)\n            for { } lt(src_1, srcEnd_1) { src_1 := add(src_1, _1) }\n            {\n                mstore(dst_2, abi_decode_bytes4(src_1))\n                dst_2 := add(dst_2, _1)\n            }\n            mstore(add(value_1, _7), dst_3)\n            mstore(dst, value_1)\n            dst := add(dst, _1)\n        }\n        converted := dst_1\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, sub(shl(160, 1), 1)))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_enum_FacetCutAction(value, pos)\n    {\n        if iszero(lt(value, 3))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(pos, value)\n    }\n    function abi_encode_array_bytes4_dyn_calldata(value, length, pos) -> end\n    {\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := value\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(abi_decode_bytes4(srcPtr), shl(224, 0xffffffff)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_bytes_calldata(start, length, pos) -> end\n    {\n        mstore(pos, length)\n        calldatacopy(add(pos, 0x20), start, length)\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_array$_t_struct$_FacetCut_$26861_calldata_ptr_$dyn_calldata_ptr_t_address_t_bytes_calldata_ptr__to_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 96\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        mstore(tail_1, value1)\n        pos := add(headStart, 128)\n        let _2 := 5\n        let tail_2 := add(add(headStart, shl(_2, value1)), 128)\n        let srcPtr := value0\n        let i := 0\n        for { } lt(i, value1) { i := add(i, 1) }\n        {\n            mstore(pos, add(sub(tail_2, headStart), not(127)))\n            let rel_offset_of_tail := calldataload(srcPtr)\n            if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), value0), not(94)))) { revert(0, 0) }\n            let value := add(rel_offset_of_tail, value0)\n            mstore(tail_2, and(abi_decode_address(value), sub(shl(160, 1), 1)))\n            let _3 := 0x20\n            let memberValue0 := abi_decode_enum_FacetCutAction(add(value, _3))\n            abi_encode_enum_FacetCutAction(memberValue0, add(tail_2, _3))\n            let _4 := 0x40\n            let rel_offset_of_tail_1 := calldataload(add(value, _4))\n            if iszero(slt(rel_offset_of_tail_1, add(sub(calldatasize(), value), not(30)))) { revert(0, 0) }\n            let value_1 := add(rel_offset_of_tail_1, value)\n            let length := calldataload(value_1)\n            let value_2 := add(value_1, _3)\n            if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n            if sgt(value_2, sub(calldatasize(), shl(_2, length))) { revert(0, 0) }\n            mstore(add(tail_2, _4), _1)\n            tail_2 := abi_encode_array_bytes4_dyn_calldata(value_2, length, add(tail_2, _1))\n            srcPtr := add(srcPtr, _3)\n            pos := add(pos, _3)\n        }\n        abi_encode_address(value2, add(headStart, 0x20))\n        mstore(add(headStart, 0x40), sub(tail_2, headStart))\n        tail := abi_encode_bytes_calldata(value3, value4, tail_2)\n    }\n    function abi_encode_tuple_t_stringliteral_4beb0b63f903eb8754578ce7af3eb73865b73e0886b8ef814c8fa0e6d2575299__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"LibDiamond: !contract owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_array_struct_FacetCut_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        let updated_pos := add(pos, _1)\n        let pos_1 := updated_pos\n        pos := updated_pos\n        let tail := add(pos_1, shl(5, length))\n        let srcPtr := add(value, _1)\n        let i := 0\n        let i_1 := i\n        for { } lt(i_1, length) { i_1 := add(i_1, 1) }\n        {\n            mstore(pos, sub(tail, pos_1))\n            let _2 := mload(srcPtr)\n            let _3 := 0x60\n            let tail_1 := add(tail, _3)\n            mstore(tail, and(mload(_2), sub(shl(160, 1), 1)))\n            let memberValue0 := mload(add(_2, _1))\n            abi_encode_enum_FacetCutAction(memberValue0, add(tail, _1))\n            let _4 := 0x40\n            let memberValue0_1 := mload(add(_2, _4))\n            mstore(add(tail, _4), _3)\n            let pos_2 := tail_1\n            let length_1 := mload(memberValue0_1)\n            mstore(tail_1, length_1)\n            pos_2 := add(tail, 128)\n            let srcPtr_1 := add(memberValue0_1, _1)\n            let i_2 := i\n            for { } lt(i_2, length_1) { i_2 := add(i_2, 1) }\n            {\n                mstore(pos_2, and(mload(srcPtr_1), shl(224, 0xffffffff)))\n                pos_2 := add(pos_2, _1)\n                srcPtr_1 := add(srcPtr_1, _1)\n            }\n            tail := pos_2\n            srcPtr := add(srcPtr, _1)\n            pos := add(pos, _1)\n        }\n        end := tail\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        let tail_1 := abi_encode_array_struct_FacetCut_dyn(value0, add(headStart, 96))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 64), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value2, tail_1)\n    }\n    function abi_encode_tuple_t_stringliteral_bf74910c6b16e2fe967a9c2fd1df7451e7594bd2184362aed0a451068a63c3f3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"LibDiamond: delay not elapsed\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"LibDiamondCut: Incorrect FacetCu\")\n        mstore(add(headStart, 96), \"tAction\")\n        tail := add(headStart, 128)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr_t_uint256__to_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 128)\n        let tail_1 := abi_encode_array_struct_FacetCut_dyn(value0, add(headStart, 128))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 64), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value2, tail_1)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 43)\n        mstore(add(headStart, 64), \"LibDiamondCut: No selectors in f\")\n        mstore(add(headStart, 96), \"acet to cut\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 44)\n        mstore(add(headStart, 64), \"LibDiamondCut: Add facet can't b\")\n        mstore(add(headStart, 96), \"e address(0)\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 53)\n        mstore(add(headStart, 64), \"LibDiamondCut: Can't add functio\")\n        mstore(add(headStart, 96), \"n that already exists\")\n        tail := add(headStart, 128)\n    }\n    function increment_t_uint96(value) -> ret\n    {\n        let _1 := 0xffffffffffffffffffffffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 56)\n        mstore(add(headStart, 64), \"LibDiamondCut: Can't replace fun\")\n        mstore(add(headStart, 96), \"ction with same function\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"LibDiamondCut: Remove facet addr\")\n        mstore(add(headStart, 96), \"ess must be address(0)\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_6dc3f1dab50ff21fc15088aa16d05815257e5abe70c54939829f018f001302c3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"LibDiamondCut: Cannot remove cut\")\n        mstore(add(headStart, 96), \" selectors\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 60)\n        mstore(add(headStart, 64), \"LibDiamondCut: _init is address(\")\n        mstore(add(headStart, 96), \"0) but_calldata is not empty\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 61)\n        mstore(add(headStart, 64), \"LibDiamondCut: _calldata is empt\")\n        mstore(add(headStart, 96), \"y but _init is not address(0)\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"LibDiamondCut: _init function re\")\n        mstore(add(headStart, 96), \"verted\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 55)\n        mstore(add(headStart, 64), \"LibDiamondCut: Can't remove func\")\n        mstore(add(headStart, 96), \"tion that doesn't exist\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"LibDiamondCut: Can't remove immu\")\n        mstore(add(headStart, 96), \"table function\")\n        tail := add(headStart, 128)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061004c5760003560e01c80631f931c1c146100515780632c67849c1461006657806356a8ea4814610079578063bbf2358e1461009e575b600080fd5b61006461005f3660046112de565b6100b1565b005b6100646100743660046112de565b61010a565b61008c6100873660046112de565b61015c565b60405190815260200160405180910390f35b6100646100ac3660046112de565b6101cb565b6100b961021d565b6101036100c6858761144b565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061028e92505050565b5050505050565b61011261021d565b61010361011f858761144b565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056592505050565b60006101c1868686868660405160200161017a959493929190611621565b6040516020818303038152906040528051906020012060009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1321602052604090205490565b9695505050505050565b6101d361021d565b6101036101e0858761144b565b8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105f692505050565b600080516020611a23833981519152600401546001600160a01b0316331461028c5760405162461bcd60e51b815260206004820152601b60248201527f4c69624469616d6f6e643a2021636f6e7472616374206f776e6572000000000060448201526064015b60405180910390fd5b565b604051600080516020611a23833981519152906000906102b690869086908690602001611847565b60408051601f19818403018152919052805160209091012060028301549091501561035a57600081815260058301602052604090205480158015906102fb5750428111155b6103475760405162461bcd60e51b815260206004820152601d60248201527f4c69624469616d6f6e643a2064656c6179206e6f7420656c61707365640000006044820152606401610283565b5060008181526005830160205260408120555b845160005b8181101561051757600087828151811061037b5761037b61187b565b60200260200101516020015190506000600281111561039c5761039c611578565b8160028111156103ae576103ae611578565b036103fc576103f78883815181106103c8576103c861187b565b6020026020010151600001518984815181106103e6576103e661187b565b6020026020010151604001516106bf565b61050e565b600181600281111561041057610410611578565b03610459576103f788838151811061042a5761042a61187b565b6020026020010151600001518984815181106104485761044861187b565b602002602001015160400151610830565b600281600281111561046d5761046d611578565b036104b6576103f78883815181106104875761048761187b565b6020026020010151600001518984815181106104a5576104a561187b565b6020026020010151604001516109b9565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b6064820152608401610283565b5060010161035f565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67386868660405161054b93929190611847565b60405180910390a161055d8585610b6b565b505050505050565b600080516020611a23833981519152600501600084848460405160200161058e93929190611847565b604051602081830303815290604052805190602001208152602001908152602001600020600090557f47b4eb69218cd939e2a72afd9d24fe3a6ca02515a6d712ff3942062df2eedbdb8383836040516105e993929190611847565b60405180910390a1505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132254600080516020611a238339815191529060009061063590426118a7565b90508082600501600087878760405160200161065393929190611847565b604051602081830303815290604052805190602001208152602001908152602001600020819055507f6c20294df7018c510b52fd6cc0352d7b78056de164d751b75da6ef7b63daa83e858585846040516106b094939291906118c0565b60405180910390a15050505050565b80516000036106e05760405162461bcd60e51b815260040161028390611906565b600080516020611a238339815191526001600160a01b0383166107155760405162461bcd60e51b815260040161028390611951565b6001600160a01b0383166000908152600182016020526040812054906001600160601b038216900361074b5761074b8285610d7e565b825160005b8181101561055d57600085828151811061076c5761076c61187b565b6020908102919091018101516001600160e01b031981166000908152918790526040909120549091506001600160a01b0316801561080a5760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6044820152746e207468617420616c72656164792065786973747360581b6064820152608401610283565b6108168683878b610de8565b846108208161199d565b9550508260010192505050610750565b805160008190036108535760405162461bcd60e51b815260040161028390611906565b600080516020611a238339815191526001600160a01b0384166108885760405162461bcd60e51b815260040161028390611951565b6001600160a01b0384166000908152600182016020526040812054906001600160601b03821690036108be576108be8286610d7e565b60005b8381101561055d5760008582815181106108dd576108dd61187b565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0390811690881681036109885760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e00000000000000006064820152608401610283565b610993858284610e88565b61099f8583868b610de8565b836109a98161199d565b94505082600101925050506108c1565b80516000036109da5760405162461bcd60e51b815260040161028390611906565b600080516020611a23833981519152635df91ac760e11b6307e4c70760e21b6001600160a01b03851615610a6f5760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472604482015275657373206d757374206265206164647265737328302960501b6064820152608401610283565b835160005b81811015610b62576000868281518110610a9057610a9061187b565b60200260200101519050846001600160e01b031916816001600160e01b03191614158015610acb57506001600160e01b031981811690851614155b610b2a5760405162461bcd60e51b815260206004820152602a60248201527f4c69624469616d6f6e644375743a2043616e6e6f742072656d6f7665206375746044820152692073656c6563746f727360b01b6064820152608401610283565b6001600160e01b031981166000908152602087905260409020546001600160a01b0316610b58878284610e88565b5050600101610a74565b50505050505050565b6001600160a01b038216610bf257805115610bee5760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d707479000000006064820152608401610283565b5050565b8051600003610c695760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f7420616464726573732830290000006064820152608401610283565b6001600160a01b0382163014610c9b57610c9b82604051806060016040528060288152602001611a436028913961124b565b600080836001600160a01b031683604051610cb691906119c3565b600060405180830381855af49150503d8060008114610cf1576040519150601f19603f3d011682016040523d82523d6000602084013e610cf6565b606091505b509150915081610d7857805115610d21578060405162461bcd60e51b815260040161028391906119df565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656044820152651d995c9d195960d21b6064820152608401610283565b50505050565b610da081604051806060016040528060248152602001611a6b6024913961124b565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160e01b0319831660008181526020868152604080832080546001600160601b03909716600160a01b026001600160a01b0397881617815594909516808352600180890183529583208054968701815583528183206008870401805460e09890981c60046007909816979097026101000a96870263ffffffff9097021990971695909517909555529290915281546001600160a01b031916179055565b6001600160a01b038216610f045760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e27742065786973740000000000000000006064820152608401610283565b306001600160a01b03831603610f735760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b6064820152608401610283565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b03169291610fc2916119f9565b90508082146110b4576001600160a01b03841660009081526001860160205260408120805483908110610ff757610ff761187b565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b9250829190859081106110485761104861187b565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b038416600090815260018601602052604090208054806110dd576110dd611a0c565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b03198516825286905260408120819055819003610103576002850154600090611140906001906119f9565b6001600160a01b03861660009081526001808901602052604090912001549091508082146111ef57600087600201838154811061117f5761117f61187b565b6000918252602090912001546002890180546001600160a01b0390921692508291849081106111b0576111b061187b565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b8660020180548061120257611202611a0c565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505050505050565b806001600160a01b0383163b6112745760405162461bcd60e51b815260040161028391906119df565b505050565b80356001600160a01b038116811461129057600080fd5b919050565b60008083601f8401126112a757600080fd5b50813567ffffffffffffffff8111156112bf57600080fd5b6020830191508360208285010111156112d757600080fd5b9250929050565b6000806000806000606086880312156112f657600080fd5b853567ffffffffffffffff8082111561130e57600080fd5b818801915088601f83011261132257600080fd5b81358181111561133157600080fd5b8960208260051b850101111561134657600080fd5b6020830197508096505061135c60208901611279565b9450604088013591508082111561137257600080fd5b5061137f88828901611295565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156113c9576113c9611390565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156113f8576113f8611390565b604052919050565b600067ffffffffffffffff82111561141a5761141a611390565b5060051b60200190565b80356003811061129057600080fd5b80356001600160e01b03198116811461129057600080fd5b600061145e61145984611400565b6113cf565b83815260208082019190600586811b86013681111561147c57600080fd5b865b8181101561156b57803567ffffffffffffffff8082111561149f5760008081fd5b818a019150606082360312156114b55760008081fd5b6114bd6113a6565b6114c683611279565b81526114d3878401611424565b87820152604080840135838111156114eb5760008081fd5b939093019236601f85011261150257600092508283fd5b8335925061151261145984611400565b83815292871b8401880192888101903685111561152f5760008081fd5b948901945b848610156115545761154586611433565b82529489019490890190611534565b91830191909152508852505094830194830161147e565b5092979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600381106115ac57634e487b7160e01b600052602160045260246000fd5b9052565b8183526000602080850194508260005b858110156115ed576001600160e01b03196115da83611433565b16875295820195908201906001016115c0565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060808252818101869052600090600560808085019089831b8601018a855b8b81101561170557878303607f190184528135368e9003605e1901811261166657600080fd5b8d016001600160a01b0361167982611279565b1684526020611689818301611424565b6116958287018261158e565b50604080830135601e198436030181126116ae57600080fd5b90920181810192903567ffffffffffffffff8111156116cc57600080fd5b80891b36038413156116dd57600080fd5b89828801526116ef8a880182866115b0565b9783019796505050929092019150600101611640565b50506001600160a01b0389166020870152858103604087015261172981888a6115f8565b9b9a5050505050505050505050565b600081518084526020808501808196508360051b810191508286016000805b868110156117e9578385038a52825180516001600160a01b03168652868101516060908188019061178a8a8a018261158e565b506040928301519288019190915281519081905290870190608087019084905b808210156117d45783516001600160e01b03191683529289019291890191600191909101906117aa565b50509a87019a95505091850191600101611757565b509298975050505050505050565b60005b838110156118125781810151838201526020016117fa565b50506000910152565b600081518084526118338160208601602086016117f7565b601f01601f19169290920160200192915050565b60608152600061185a6060830186611738565b6001600160a01b038516602084015282810360408401526101c1818561181b565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156118ba576118ba611891565b92915050565b6080815260006118d36080830187611738565b6001600160a01b038616602084015282810360408401526118f4818661181b565b91505082606083015295945050505050565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b60006001600160601b038083168181036119b9576119b9611891565b6001019392505050565b600082516119d58184602087016117f7565b9190910192915050565b6020815260006119f2602083018461181b565b9392505050565b818103818111156118ba576118ba611891565b634e487b7160e01b600052603160045260246000fdfec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220d7015fe5a1d65a1c30b4d8718001179a86cdd7dafda138481807b85aeca7375f64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1F931C1C EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x2C67849C EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x56A8EA48 EQ PUSH2 0x79 JUMPI DUP1 PUSH4 0xBBF2358E EQ PUSH2 0x9E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x12DE JUMP JUMPDEST PUSH2 0xB1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x64 PUSH2 0x74 CALLDATASIZE PUSH1 0x4 PUSH2 0x12DE JUMP JUMPDEST PUSH2 0x10A JUMP JUMPDEST PUSH2 0x8C PUSH2 0x87 CALLDATASIZE PUSH1 0x4 PUSH2 0x12DE JUMP JUMPDEST PUSH2 0x15C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x64 PUSH2 0xAC CALLDATASIZE PUSH1 0x4 PUSH2 0x12DE JUMP JUMPDEST PUSH2 0x1CB JUMP JUMPDEST PUSH2 0xB9 PUSH2 0x21D JUMP JUMPDEST PUSH2 0x103 PUSH2 0xC6 DUP6 DUP8 PUSH2 0x144B JUMP JUMPDEST DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x28E SWAP3 POP POP POP JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x112 PUSH2 0x21D JUMP JUMPDEST PUSH2 0x103 PUSH2 0x11F DUP6 DUP8 PUSH2 0x144B JUMP JUMPDEST DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x565 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C1 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x17A SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1621 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1321 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1D3 PUSH2 0x21D JUMP JUMPDEST PUSH2 0x103 PUSH2 0x1E0 DUP6 DUP8 PUSH2 0x144B JUMP JUMPDEST DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x5F6 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1A23 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x4 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x28C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A2021636F6E7472616374206F776E65720000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1A23 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x2B6 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x20 ADD PUSH2 0x1847 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 PUSH1 0x2 DUP4 ADD SLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x35A JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2FB JUMPI POP TIMESTAMP DUP2 GT ISZERO JUMPDEST PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A2064656C6179206E6F7420656C6170736564000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x283 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMPDEST DUP5 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x517 JUMPI PUSH1 0x0 DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x37B JUMPI PUSH2 0x37B PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x39C JUMPI PUSH2 0x39C PUSH2 0x1578 JUMP JUMPDEST DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x3AE JUMPI PUSH2 0x3AE PUSH2 0x1578 JUMP JUMPDEST SUB PUSH2 0x3FC JUMPI PUSH2 0x3F7 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3C8 JUMPI PUSH2 0x3C8 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3E6 JUMPI PUSH2 0x3E6 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x6BF JUMP JUMPDEST PUSH2 0x50E JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x410 JUMPI PUSH2 0x410 PUSH2 0x1578 JUMP JUMPDEST SUB PUSH2 0x459 JUMPI PUSH2 0x3F7 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x42A JUMPI PUSH2 0x42A PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x448 JUMPI PUSH2 0x448 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x830 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x46D JUMPI PUSH2 0x46D PUSH2 0x1578 JUMP JUMPDEST SUB PUSH2 0x4B6 JUMPI PUSH2 0x3F7 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x487 JUMPI PUSH2 0x487 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4A5 JUMPI PUSH2 0x4A5 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x9B9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A20496E636F72726563742046616365744375 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x3A20B1BA34B7B7 PUSH1 0xC9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x35F JUMP JUMPDEST POP PUSH32 0x8FAA70878671CCD212D20771B795C50AF8FD3FF6CF27F4BDE57E5D4DE0AEB673 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x54B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1847 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x55D DUP6 DUP6 PUSH2 0xB6B JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1A23 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x5 ADD PUSH1 0x0 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x58E SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1847 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH32 0x47B4EB69218CD939E2A72AFD9D24FE3A6CA02515A6D712FF3942062DF2EEDBDB DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x5E9 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1847 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1322 SLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1A23 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x635 SWAP1 TIMESTAMP PUSH2 0x18A7 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 PUSH1 0x5 ADD PUSH1 0x0 DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x653 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1847 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH32 0x6C20294DF7018C510B52FD6CC0352D7B78056DE164D751B75DA6EF7B63DAA83E DUP6 DUP6 DUP6 DUP5 PUSH1 0x40 MLOAD PUSH2 0x6B0 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x18C0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0x6E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x283 SWAP1 PUSH2 0x1906 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1A23 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x715 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x283 SWAP1 PUSH2 0x1951 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND SWAP1 SUB PUSH2 0x74B JUMPI PUSH2 0x74B DUP3 DUP6 PUSH2 0xD7E JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x55D JUMPI PUSH1 0x0 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x76C JUMPI PUSH2 0x76C PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP8 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x80A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774206164642066756E6374696F PUSH1 0x44 DUP3 ADD MSTORE PUSH21 0x6E207468617420616C726561647920657869737473 PUSH1 0x58 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST PUSH2 0x816 DUP7 DUP4 DUP8 DUP12 PUSH2 0xDE8 JUMP JUMPDEST DUP5 PUSH2 0x820 DUP2 PUSH2 0x199D JUMP JUMPDEST SWAP6 POP POP DUP3 PUSH1 0x1 ADD SWAP3 POP POP POP PUSH2 0x750 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 DUP2 SWAP1 SUB PUSH2 0x853 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x283 SWAP1 PUSH2 0x1906 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1A23 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x888 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x283 SWAP1 PUSH2 0x1951 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND SWAP1 SUB PUSH2 0x8BE JUMPI PUSH2 0x8BE DUP3 DUP7 PUSH2 0xD7E JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x55D JUMPI PUSH1 0x0 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x8DD JUMPI PUSH2 0x8DD PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP9 AND DUP2 SUB PUSH2 0x988 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x38 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774207265706C6163652066756E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6374696F6E20776974682073616D652066756E6374696F6E0000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST PUSH2 0x993 DUP6 DUP3 DUP5 PUSH2 0xE88 JUMP JUMPDEST PUSH2 0x99F DUP6 DUP4 DUP7 DUP12 PUSH2 0xDE8 JUMP JUMPDEST DUP4 PUSH2 0x9A9 DUP2 PUSH2 0x199D JUMP JUMPDEST SWAP5 POP POP DUP3 PUSH1 0x1 ADD SWAP3 POP POP POP PUSH2 0x8C1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0x9DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x283 SWAP1 PUSH2 0x1906 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1A23 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH4 0x5DF91AC7 PUSH1 0xE1 SHL PUSH4 0x7E4C707 PUSH1 0xE2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND ISZERO PUSH2 0xA6F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2052656D6F76652066616365742061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH22 0x657373206D7573742062652061646472657373283029 PUSH1 0x50 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB62 JUMPI PUSH1 0x0 DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xA90 JUMPI PUSH2 0xA90 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND EQ ISZERO DUP1 ISZERO PUSH2 0xACB JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 DUP2 AND SWAP1 DUP6 AND EQ ISZERO JUMPDEST PUSH2 0xB2A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E6E6F742072656D6F766520637574 PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x2073656C6563746F7273 PUSH1 0xB0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xB58 DUP8 DUP3 DUP5 PUSH2 0xE88 JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0xA74 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xBF2 JUMPI DUP1 MLOAD ISZERO PUSH2 0xBEE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E6974206973206164647265737328 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3029206275745F63616C6C64617461206973206E6F7420656D70747900000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0xC69 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F63616C6C6461746120697320656D7074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7920627574205F696E6974206973206E6F742061646472657373283029000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADDRESS EQ PUSH2 0xC9B JUMPI PUSH2 0xC9B DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A43 PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x124B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 MLOAD PUSH2 0xCB6 SWAP2 SWAP1 PUSH2 0x19C3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xCF1 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xCF6 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0xD78 JUMPI DUP1 MLOAD ISZERO PUSH2 0xD21 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x283 SWAP2 SWAP1 PUSH2 0x19DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E69742066756E6374696F6E207265 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1D995C9D1959 PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0xDA0 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A6B PUSH1 0x24 SWAP2 CODECOPY PUSH2 0x124B JUMP JUMPDEST PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP5 DUP6 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP7 ADD DUP6 SWAP1 SSTORE SWAP5 DUP5 ADD DUP4 SSTORE SWAP2 DUP3 MSTORE SWAP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP7 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP8 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 DUP9 AND OR DUP2 SSTORE SWAP5 SWAP1 SWAP6 AND DUP1 DUP4 MSTORE PUSH1 0x1 DUP1 DUP10 ADD DUP4 MSTORE SWAP6 DUP4 KECCAK256 DUP1 SLOAD SWAP7 DUP8 ADD DUP2 SSTORE DUP4 MSTORE DUP2 DUP4 KECCAK256 PUSH1 0x8 DUP8 DIV ADD DUP1 SLOAD PUSH1 0xE0 SWAP9 SWAP1 SWAP9 SHR PUSH1 0x4 PUSH1 0x7 SWAP1 SWAP9 AND SWAP8 SWAP1 SWAP8 MUL PUSH2 0x100 EXP SWAP7 DUP8 MUL PUSH4 0xFFFFFFFF SWAP1 SWAP8 MUL NOT SWAP1 SWAP8 AND SWAP6 SWAP1 SWAP6 OR SWAP1 SWAP6 SSTORE MSTORE SWAP3 SWAP1 SWAP2 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xF04 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F76652066756E63 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74696F6E207468617420646F65736E2774206578697374000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SUB PUSH2 0xF73 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F766520696D6D75 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x3A30B1363290333AB731BA34B7B7 PUSH1 0x91 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x283 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 ADD SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP3 SWAP2 PUSH2 0xFC2 SWAP2 PUSH2 0x19F9 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 EQ PUSH2 0x10B4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH2 0xFF7 JUMPI PUSH2 0xFF7 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP5 MSTORE PUSH1 0x1 DUP11 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0x7 SWAP1 SWAP3 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP1 SWAP3 DIV PUSH1 0xE0 SHL SWAP3 POP DUP3 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x1048 JUMPI PUSH2 0x1048 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP5 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP4 DUP5 MUL NOT AND PUSH1 0xE0 SWAP6 SWAP1 SWAP6 SHR SWAP3 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP6 AND MUL OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP1 PUSH2 0x10DD JUMPI PUSH2 0x10DD PUSH2 0x1A0C JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x8 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x4 PUSH1 0x7 DUP8 AND MUL PUSH2 0x100 EXP MUL NOT AND SWAP1 SSTORE SWAP2 SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP6 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 SSTORE DUP2 SWAP1 SUB PUSH2 0x103 JUMPI PUSH1 0x2 DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0x1140 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x19F9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP1 DUP10 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 SWAP2 POP DUP1 DUP3 EQ PUSH2 0x11EF JUMPI PUSH1 0x0 DUP8 PUSH1 0x2 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x117F JUMPI PUSH2 0x117F PUSH2 0x187B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP10 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x11B0 JUMPI PUSH2 0x11B0 PUSH2 0x187B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 ADD DUP2 SWAP1 SSTORE JUMPDEST DUP7 PUSH1 0x2 ADD DUP1 SLOAD DUP1 PUSH2 0x1202 JUMPI PUSH2 0x1202 PUSH2 0x1A0C JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH1 0x0 NOT SWAP1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP3 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE PUSH2 0x1274 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x283 SWAP2 SWAP1 PUSH2 0x19DF JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1290 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x12A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x12BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x12D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x12F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x130E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1322 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x1331 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x1346 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP8 POP DUP1 SWAP7 POP POP PUSH2 0x135C PUSH1 0x20 DUP10 ADD PUSH2 0x1279 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1372 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x137F DUP9 DUP3 DUP10 ADD PUSH2 0x1295 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x13C9 JUMPI PUSH2 0x13C9 PUSH2 0x1390 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x13F8 JUMPI PUSH2 0x13F8 PUSH2 0x1390 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x141A JUMPI PUSH2 0x141A PUSH2 0x1390 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x3 DUP2 LT PUSH2 0x1290 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0x1290 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x145E PUSH2 0x1459 DUP5 PUSH2 0x1400 JUMP JUMPDEST PUSH2 0x13CF JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP2 SWAP1 PUSH1 0x5 DUP7 DUP2 SHL DUP7 ADD CALLDATASIZE DUP2 GT ISZERO PUSH2 0x147C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x156B JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x149F JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP2 DUP11 ADD SWAP2 POP PUSH1 0x60 DUP3 CALLDATASIZE SUB SLT ISZERO PUSH2 0x14B5 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0x14BD PUSH2 0x13A6 JUMP JUMPDEST PUSH2 0x14C6 DUP4 PUSH2 0x1279 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x14D3 DUP8 DUP5 ADD PUSH2 0x1424 JUMP JUMPDEST DUP8 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP5 ADD CALLDATALOAD DUP4 DUP2 GT ISZERO PUSH2 0x14EB JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP4 SWAP1 SWAP4 ADD SWAP3 CALLDATASIZE PUSH1 0x1F DUP6 ADD SLT PUSH2 0x1502 JUMPI PUSH1 0x0 SWAP3 POP DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH2 0x1512 PUSH2 0x1459 DUP5 PUSH2 0x1400 JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP3 DUP8 SHL DUP5 ADD DUP9 ADD SWAP3 DUP9 DUP2 ADD SWAP1 CALLDATASIZE DUP6 GT ISZERO PUSH2 0x152F JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP5 DUP10 ADD SWAP5 JUMPDEST DUP5 DUP7 LT ISZERO PUSH2 0x1554 JUMPI PUSH2 0x1545 DUP7 PUSH2 0x1433 JUMP JUMPDEST DUP3 MSTORE SWAP5 DUP10 ADD SWAP5 SWAP1 DUP10 ADD SWAP1 PUSH2 0x1534 JUMP JUMPDEST SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP9 MSTORE POP POP SWAP5 DUP4 ADD SWAP5 DUP4 ADD PUSH2 0x147E JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x15AC JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x15ED JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH2 0x15DA DUP4 PUSH2 0x1433 JUMP JUMPDEST AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x15C0 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 DUP3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x5 PUSH1 0x80 DUP1 DUP6 ADD SWAP1 DUP10 DUP4 SHL DUP7 ADD ADD DUP11 DUP6 JUMPDEST DUP12 DUP2 LT ISZERO PUSH2 0x1705 JUMPI DUP8 DUP4 SUB PUSH1 0x7F NOT ADD DUP5 MSTORE DUP2 CALLDATALOAD CALLDATASIZE DUP15 SWAP1 SUB PUSH1 0x5E NOT ADD DUP2 SLT PUSH2 0x1666 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP14 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1679 DUP3 PUSH2 0x1279 JUMP JUMPDEST AND DUP5 MSTORE PUSH1 0x20 PUSH2 0x1689 DUP2 DUP4 ADD PUSH2 0x1424 JUMP JUMPDEST PUSH2 0x1695 DUP3 DUP8 ADD DUP3 PUSH2 0x158E JUMP JUMPDEST POP PUSH1 0x40 DUP1 DUP4 ADD CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x16AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP3 ADD DUP2 DUP2 ADD SWAP3 SWAP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x16CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP10 SHL CALLDATASIZE SUB DUP5 SGT ISZERO PUSH2 0x16DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 DUP3 DUP9 ADD MSTORE PUSH2 0x16EF DUP11 DUP9 ADD DUP3 DUP7 PUSH2 0x15B0 JUMP JUMPDEST SWAP8 DUP4 ADD SWAP8 SWAP7 POP POP POP SWAP3 SWAP1 SWAP3 ADD SWAP2 POP PUSH1 0x1 ADD PUSH2 0x1640 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x20 DUP8 ADD MSTORE DUP6 DUP2 SUB PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x1729 DUP2 DUP9 DUP11 PUSH2 0x15F8 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD DUP1 DUP2 SWAP7 POP DUP4 PUSH1 0x5 SHL DUP2 ADD SWAP2 POP DUP3 DUP7 ADD PUSH1 0x0 DUP1 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x17E9 JUMPI DUP4 DUP6 SUB DUP11 MSTORE DUP3 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 MSTORE DUP7 DUP2 ADD MLOAD PUSH1 0x60 SWAP1 DUP2 DUP9 ADD SWAP1 PUSH2 0x178A DUP11 DUP11 ADD DUP3 PUSH2 0x158E JUMP JUMPDEST POP PUSH1 0x40 SWAP3 DUP4 ADD MLOAD SWAP3 DUP9 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 DUP8 ADD SWAP1 PUSH1 0x80 DUP8 ADD SWAP1 DUP5 SWAP1 JUMPDEST DUP1 DUP3 LT ISZERO PUSH2 0x17D4 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP4 MSTORE SWAP3 DUP10 ADD SWAP3 SWAP2 DUP10 ADD SWAP2 PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x17AA JUMP JUMPDEST POP POP SWAP11 DUP8 ADD SWAP11 SWAP6 POP POP SWAP2 DUP6 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1757 JUMP JUMPDEST POP SWAP3 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1812 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x17FA JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1833 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x17F7 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x185A PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x1738 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x20 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x1C1 DUP2 DUP6 PUSH2 0x181B JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x18BA JUMPI PUSH2 0x18BA PUSH2 0x1891 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 MSTORE PUSH1 0x0 PUSH2 0x18D3 PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0x1738 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x18F4 DUP2 DUP7 PUSH2 0x181B JUMP JUMPDEST SWAP2 POP POP DUP3 PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2B SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x40 DUP3 ADD MSTORE PUSH11 0x1858D95D081D1BC818DD5D PUSH1 0xAA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2C SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x40 DUP3 ADD MSTORE PUSH12 0x652061646472657373283029 PUSH1 0xA0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x19B9 JUMPI PUSH2 0x19B9 PUSH2 0x1891 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x19D5 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x17F7 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x19F2 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x181B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x18BA JUMPI PUSH2 0x18BA PUSH2 0x1891 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID 0xC8 0xFC 0xAD DUP14 0xB8 0x4D EXTCODECOPY 0xC1 DUP12 0x4C COINBASE 0xD5 MLOAD 0xEA 0xE 0xE6 PUSH14 0xD599CDE068D998E57D5E09332C13 SHR 0x4C PUSH10 0x624469616D6F6E644375 PUSH21 0x3A205F696E6974206164647265737320686173206E PUSH16 0x20636F64654C69624469616D6F6E6443 PUSH22 0x743A204E657720666163657420686173206E6F20636F PUSH5 0x65A2646970 PUSH7 0x7358221220D701 0x5F 0xE5 LOG1 0xD6 GAS SHR ADDRESS 0xB4 0xD8 PUSH18 0x8001179A86CDD7DAFDA138481807B85AECA7 CALLDATACOPY 0x5F PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"626:1441:70:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1101:232;;;;;;:::i;:::-;;:::i;:::-;;1578:237;;;;;;:::i;:::-;;:::i;1819:246::-;;;;;;:::i;:::-;;:::i;:::-;;;1706:25:181;;;1694:2;1679:18;1819:246:70;;;;;;;1337:237;;;;;;:::i;:::-;;:::i;1101:232::-;1235:35;:33;:35::i;:::-;1276:52;;1298:11;;1276:52;:::i;:::-;1311:5;1318:9;;1276:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1276:21:70;;-1:-1:-1;;;1276:52:70:i;:::-;1101:232;;;;;:::o;1578:237::-;1710:35;:33;:35::i;:::-;1751:59;;1780:11;;1751:59;:::i;:::-;1793:5;1800:9;;1751:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1751:28:70;;-1:-1:-1;;;1751:59:70:i;1819:246::-;1959:7;1981:79;2028:11;;2041:5;2048:9;;2017:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2007:52;;;;;;2581:7:106;2603:38;;;:32;:38;;;;;;;2520:126;1981:79:70;1974:86;1819:246;-1:-1:-1;;;;;;1819:246:70:o;1337:237::-;1469:35;:33;:35::i;:::-;1510:59;;1539:11;;1510:59;:::i;:::-;1552:5;1559:9;;1510:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1510:28:70;;-1:-1:-1;;;1510:59:70:i;2650:143:106:-;-1:-1:-1;;;;;;;;;;;2726:30:106;;;-1:-1:-1;;;;;2726:30:106;2712:10;:44;2704:84;;;;-1:-1:-1;;;2704:84:106;;8861:2:181;2704:84:106;;;8843:21:181;8900:2;8880:18;;;8873:30;8939:29;8919:18;;;8912:57;8986:18;;2704:84:106;;;;;;;;;2650:143::o;4277:2043::-;4484:41;;-1:-1:-1;;;;;;;;;;;636:45:106;4410:25;;4484:41;;4495:11;;4508:5;;4515:9;;4484:41;;;:::i;:::-;;;;-1:-1:-1;;4484:41:106;;;;;;;;;4474:52;;4484:41;4474:52;;;;4536:17;;;:24;4474:52;;-1:-1:-1;4536:29:106;4532:802;;4575:12;4590:23;;;:18;;;:23;;;;;;4629:9;;;;;:36;;;4650:15;4642:4;:23;;4629:36;4621:78;;;;-1:-1:-1;;;4621:78:106;;11843:2:181;4621:78:106;;;11825:21:181;11882:2;11862:18;;;11855:30;11921:31;11901:18;;;11894:59;11970:18;;4621:78:106;11641:353:181;4621:78:106;-1:-1:-1;5304:23:106;;;;:18;;;:23;;;;;5297:30;4532:802;5440:18;;5426:11;5464:756;5502:3;5489:10;:16;5464:756;;;5517:33;5553:11;5565:10;5553:23;;;;;;;;:::i;:::-;;;;;;;:30;;;5517:66;;5605:30;5595:40;;;;;;;;:::i;:::-;:6;:40;;;;;;;;:::i;:::-;;5591:574;;5647:93;5660:11;5672:10;5660:23;;;;;;;;:::i;:::-;;;;;;;:36;;;5698:11;5710:10;5698:23;;;;;;;;:::i;:::-;;;;;;;:41;;;5647:12;:93::i;:::-;5591:574;;;5769:34;5759:6;:44;;;;;;;;:::i;:::-;;5755:410;;5815:97;5832:11;5844:10;5832:23;;;;;;;;:::i;:::-;;;;;;;:36;;;5870:11;5882:10;5870:23;;;;;;;;:::i;:::-;;;;;;;:41;;;5815:16;:97::i;5755:410::-;5941:33;5931:6;:43;;;;;;;;:::i;:::-;;5927:238;;5986:96;6002:11;6014:10;6002:23;;;;;;;;:::i;:::-;;;;;;;:36;;;6040:11;6052:10;6040:23;;;;;;;;:::i;:::-;;;;;;;:41;;;5986:15;:96::i;5927:238::-;6107:49;;-1:-1:-1;;;6107:49:106;;12333:2:181;6107:49:106;;;12315:21:181;12372:2;12352:18;;;12345:30;12411:34;12391:18;;;12384:62;-1:-1:-1;;;12462:18:181;;;12455:37;12509:19;;6107:49:106;12131:403:181;5927:238:106;-1:-1:-1;6193:12:106;;5464:756;;;;6230:41;6241:11;6254:5;6261:9;6230:41;;;;;;;;:::i;:::-;;;;;;;;6277:38;6298:5;6305:9;6277:20;:38::i;:::-;4404:1916;;;4277:2043;;;:::o;3696:443::-;-1:-1:-1;;;;;;;;;;;3987:32:106;;:86;4041:11;4054:5;4061:9;4030:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4020:52;;;;;;3987:86;;;;;;;;;;;3980:93;;;4084:50;4104:11;4117:5;4124:9;4084:50;;;;;;;;:::i;:::-;;;;;;;;3696:443;;;:::o;2912:682::-;3408:18;;-1:-1:-1;;;;;;;;;;;636:45:106;3319:25;;3390:36;;:15;:36;:::i;:::-;3369:57;;3507:10;3432:2;:18;;:72;3472:11;3485:5;3492:9;3461:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3451:52;;;;;;3432:72;;;;;;;;;;;:85;;;;3528:61;3547:11;3560:5;3567:9;3578:10;3528:61;;;;;;;;;:::i;:::-;;;;;;;;3046:548;;2912:682;;;:::o;6324:1056::-;6428:18;:25;6457:1;6428:30;6420:86;;;;-1:-1:-1;;;6420:86:106;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;6570:27:106;;6562:84;;;;-1:-1:-1;;;6562:84:106;;;;;;;:::i;:::-;-1:-1:-1;;;;;6685:40:106;;6652:23;6685:40;;;:25;;;:40;;;;;:65;;-1:-1:-1;;;;;6811:21:106;;;;6807:69;;6842:27;6851:2;6855:13;6842:8;:27::i;:::-;6895:25;;6881:11;6926:450;6970:3;6954:13;:19;6926:450;;;6985:15;7003:18;7022:13;7003:33;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;;7070:39:106;;7044:23;7070:39;;;;;;;;;;;:52;7003:33;;-1:-1:-1;;;;;;7070:52:106;7138:29;;7130:95;;;;-1:-1:-1;;;7130:95:106;;14486:2:181;7130:95:106;;;14468:21:181;14525:2;14505:18;;;14498:30;14564:34;14544:18;;;14537:62;-1:-1:-1;;;14615:18:181;;;14608:51;14676:19;;7130:95:106;14284:417:181;7130:95:106;7233:58;7245:2;7249:8;7259:16;7277:13;7233:11;:58::i;:::-;7299:18;;;;:::i;:::-;;;;7346:15;;;;;6977:399;;6926:450;;7384:1097;7498:25;;7484:11;7537:8;;;7529:64;;;;-1:-1:-1;;;7529:64:106;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;7657:27:106;;7649:84;;;;-1:-1:-1;;;7649:84:106;;;;;;;:::i;:::-;-1:-1:-1;;;;;7772:40:106;;7739:23;7772:40;;;:25;;;:40;;;;;:65;;-1:-1:-1;;;;;7898:21:106;;;;7894:69;;7929:27;7938:2;7942:13;7929:8;:27::i;:::-;7973:21;7968:509;8012:3;7996:13;:19;7968:509;;;8027:15;8045:18;8064:13;8045:33;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;;8112:39:106;;8086:23;8112:39;;;;;;;;;;;:52;8045:33;;-1:-1:-1;;;;;;8112:52:106;;;;8180:32;;;;8172:101;;;;-1:-1:-1;;;8172:101:106;;15130:2:181;8172:101:106;;;15112:21:181;15169:2;15149:18;;;15142:30;15208:34;15188:18;;;15181:62;15279:26;15259:18;;;15252:54;15323:19;;8172:101:106;14928:420:181;8172:101:106;8281:45;8296:2;8300:15;8317:8;8281:14;:45::i;:::-;8334:58;8346:2;8350:8;8360:16;8378:13;8334:11;:58::i;:::-;8400:18;;;;:::i;:::-;;;;8447:15;;;;;8019:458;;7968:509;;8485:1070;8592:18;:25;8621:1;8592:30;8584:86;;;;-1:-1:-1;;;8584:86:106;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;8989:27:106;;;8981:94;;;;-1:-1:-1;;;8981:94:106;;15555:2:181;8981:94:106;;;15537:21:181;15594:2;15574:18;;;15567:30;15633:34;15613:18;;;15606:62;-1:-1:-1;;;15684:18:181;;;15677:52;15746:19;;8981:94:106;15353:418:181;8981:94:106;9095:25;;9081:11;9126:425;9170:3;9154:13;:19;9126:425;;;9185:15;9203:18;9222:13;9203:33;;;;;;;;:::i;:::-;;;;;;;9185:51;;9264:15;-1:-1:-1;;;;;9252:27:106;;:8;-1:-1:-1;;;;;9252:27:106;;;;:54;;;;-1:-1:-1;;;;;;;9283:23:106;;;;;;;;9252:54;9244:109;;;;-1:-1:-1;;;9244:109:106;;15978:2:181;9244:109:106;;;15960:21:181;16017:2;15997:18;;;15990:30;16056:34;16036:18;;;16029:62;-1:-1:-1;;;16107:18:181;;;16100:40;16157:19;;9244:109:106;15776:406:181;9244:109:106;-1:-1:-1;;;;;;9387:39:106;;9361:23;9387:39;;;;;;;;;;:52;-1:-1:-1;;;;;9387:52:106;9447:45;9387:2;:52;9417:8;9447:14;:45::i;:::-;-1:-1:-1;;9521:15:106;;9126:425;;;;8578:977;;;;8485:1070;;:::o;12320:755::-;-1:-1:-1;;;;;12408:19:106;;12404:667;;12445:16;;:21;12437:94;;;;-1:-1:-1;;;12437:94:106;;16389:2:181;12437:94:106;;;16371:21:181;16428:2;16408:18;;;16401:30;16467:34;16447:18;;;16440:62;16538:30;16518:18;;;16511:58;16586:19;;12437:94:106;16187:424:181;12437:94:106;12320:755;;:::o;12404:667::-;12560:9;:16;12580:1;12560:21;12552:95;;;;-1:-1:-1;;;12552:95:106;;16818:2:181;12552:95:106;;;16800:21:181;16857:2;16837:18;;;16830:30;16896:34;16876:18;;;16869:62;16967:31;16947:18;;;16940:59;17016:19;;12552:95:106;16616:425:181;12552:95:106;-1:-1:-1;;;;;12659:22:106;;12676:4;12659:22;12655:120;;12693:73;12716:5;12693:73;;;;;;;;;;;;;;;;;:22;:73::i;:::-;12783:12;12797:18;12819:5;-1:-1:-1;;;;;12819:18:106;12838:9;12819:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12782:66;;;;12861:7;12856:209;;12884:12;;:17;12880:177;;12962:5;12948:21;;-1:-1:-1;;;12948:21:106;;;;;;;;:::i;12880:177::-;12998:48;;-1:-1:-1;;;12998:48:106;;17764:2:181;12998:48:106;;;17746:21:181;17803:2;17783:18;;;17776:30;17842:34;17822:18;;;17815:62;-1:-1:-1;;;17893:18:181;;;17886:36;17939:19;;12998:48:106;17562:402:181;12880:177:106;12544:527;;12320:755;;:::o;9559:302::-;9642:77;9665:13;9642:77;;;;;;;;;;;;;;;;;:22;:77::i;:::-;9789:17;;;:24;;-1:-1:-1;;;;;9725:40:106;;;;;;;:25;;;;:40;;;;;;;:61;;:88;;;9819:37;;;;;;;;;;;;;;-1:-1:-1;;;;;;9819:37:106;;;;;;9559:302::o;9865:395::-;-1:-1:-1;;;;;;10015:40:106;;:29;:40;;;;;;;;;;;:85;;-1:-1:-1;;;;;10015:85:106;;;-1:-1:-1;;;10015:85:106;-1:-1:-1;;;;;10015:85:106;;;;;;10106:40;;;;;;;-1:-1:-1;10106:25:106;;;:40;;;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10015:85;10106:74;;;;;;;;;;;;;;;;;;;10186:40;;;;;:69;;-1:-1:-1;;;;;;10186:69:106;;;;9865:395::o;10264:2052::-;-1:-1:-1;;;;;10395:27:106;;10387:95;;;;-1:-1:-1;;;10387:95:106;;18171:2:181;10387:95:106;;;18153:21:181;18210:2;18190:18;;;18183:30;18249:34;18229:18;;;18222:62;18320:25;18300:18;;;18293:53;18363:19;;10387:95:106;17969:419:181;10387:95:106;10594:4;-1:-1:-1;;;;;10569:30:106;;;10561:89;;;;-1:-1:-1;;;10561:89:106;;18595:2:181;10561:89:106;;;18577:21:181;18634:2;18614:18;;;18607:30;18673:34;18653:18;;;18646:62;-1:-1:-1;;;18724:18:181;;;18717:44;18778:19;;10561:89:106;18393:410:181;10561:89:106;-1:-1:-1;;;;;;10753:40:106;;10726:24;10753:40;;;;;;;;;;;:65;-1:-1:-1;;;;;10855:40:106;;;;10923:1;10855:25;;;:40;;;;;;:65;-1:-1:-1;;;10753:65:106;;;-1:-1:-1;;;;;10753:65:106;;10726:24;10855:69;;;:::i;:::-;10824:100;;11018:20;10998:16;:40;10994:365;;-1:-1:-1;;;;;11070:40:106;;11048:19;11070:40;;;:25;;;:40;;;;;:80;;11129:20;;11070:80;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;11158:40:106;;;;:25;;;:40;;;;;;;:76;;11070:80;;;;;;;;;;;;;;-1:-1:-1;11070:80:106;;11158:40;11217:16;;11158:76;;;;;;:::i;:::-;;;;;;;;;;;;;:91;;;:76;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11257:43:106;;;;;;;;;;;;:95;;-1:-1:-1;;;;;11257:95:106;-1:-1:-1;;;;;;;;11257:95:106;;;;;;10994:365;-1:-1:-1;;;;;11396:40:106;;;;;;:25;;;:40;;;;;:64;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;11396:64:106;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11473:40:106;;;;;;;;;;11466:47;;;11600:25;;;11596:716;;11755:17;;;:24;11720:32;;11755:28;;11782:1;;11755:28;:::i;:::-;-1:-1:-1;;;;;11822:40:106;;11791:28;11822:40;;;:25;;;;:40;;;;;;:61;;11720:63;;-1:-1:-1;11895:48:106;;;11891:308;;11955:24;11982:2;:17;;12000:24;11982:43;;;;;;;;:::i;:::-;;;;;;;;;;;12035:17;;;:39;;-1:-1:-1;;;;;11982:43:106;;;;-1:-1:-1;11982:43:106;;12053:20;;12035:39;;;;;;:::i;:::-;;;;;;;;;;;;;:58;;-1:-1:-1;;;;;;12035:58:106;-1:-1:-1;;;;;12035:58:106;;;;;;12103:43;;;;;;-1:-1:-1;12103:25:106;;;:43;;;;;;:64;:87;;;11891:308;12206:2;:17;;:23;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;12206:23:106;;;;;-1:-1:-1;;;;;;12206:23:106;;;;;;;;;-1:-1:-1;;;;;12244:40:106;;;;12206:23;12244:25;;;:40;;;;;;:61;12237:68;-1:-1:-1;;10381:1935:106;;10264:2052;;;:::o;13079:155::-;13215:13;-1:-1:-1;;;;;13187:21:106;;;13179:50;;;;-1:-1:-1;;;13179:50:106;;;;;;;;:::i;:::-;;13079:155;;:::o;14:173:181:-;82:20;;-1:-1:-1;;;;;131:31:181;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:347::-;243:8;253:6;307:3;300:4;292:6;288:17;284:27;274:55;;325:1;322;315:12;274:55;-1:-1:-1;348:20:181;;391:18;380:30;;377:50;;;423:1;420;413:12;377:50;460:4;452:6;448:17;436:29;;512:3;505:4;496:6;488;484:19;480:30;477:39;474:59;;;529:1;526;519:12;474:59;192:347;;;;;:::o;544:1011::-;688:6;696;704;712;720;773:2;761:9;752:7;748:23;744:32;741:52;;;789:1;786;779:12;741:52;829:9;816:23;858:18;899:2;891:6;888:14;885:34;;;915:1;912;905:12;885:34;953:6;942:9;938:22;928:32;;998:7;991:4;987:2;983:13;979:27;969:55;;1020:1;1017;1010:12;969:55;1060:2;1047:16;1086:2;1078:6;1075:14;1072:34;;;1102:1;1099;1092:12;1072:34;1157:7;1150:4;1140:6;1137:1;1133:14;1129:2;1125:23;1121:34;1118:47;1115:67;;;1178:1;1175;1168:12;1115:67;1209:4;1205:2;1201:13;1191:23;;1233:6;1223:16;;;1258:40;1292:4;1281:9;1277:20;1258:40;:::i;:::-;1248:50;;1351:2;1340:9;1336:18;1323:32;1307:48;;1380:2;1370:8;1367:16;1364:36;;;1396:1;1393;1386:12;1364:36;;1435:60;1487:7;1476:8;1465:9;1461:24;1435:60;:::i;:::-;544:1011;;;;-1:-1:-1;544:1011:181;;-1:-1:-1;1514:8:181;;1409:86;544:1011;-1:-1:-1;;;544:1011:181:o;1742:127::-;1803:10;1798:3;1794:20;1791:1;1784:31;1834:4;1831:1;1824:15;1858:4;1855:1;1848:15;1874:253;1946:2;1940:9;1988:4;1976:17;;2023:18;2008:34;;2044:22;;;2005:62;2002:88;;;2070:18;;:::i;:::-;2106:2;2099:22;1874:253;:::o;2132:275::-;2203:2;2197:9;2268:2;2249:13;;-1:-1:-1;;2245:27:181;2233:40;;2303:18;2288:34;;2324:22;;;2285:62;2282:88;;;2350:18;;:::i;:::-;2386:2;2379:22;2132:275;;-1:-1:-1;2132:275:181:o;2412:191::-;2480:4;2513:18;2505:6;2502:30;2499:56;;;2535:18;;:::i;:::-;-1:-1:-1;2580:1:181;2576:14;2592:4;2572:25;;2412:191::o;2608:155::-;2688:20;;2737:1;2727:12;;2717:40;;2753:1;2750;2743:12;2768:173;2835:20;;-1:-1:-1;;;;;;2884:32:181;;2874:43;;2864:71;;2931:1;2928;2921:12;2946:2365;3118:9;3153:72;3169:55;3217:6;3169:55;:::i;:::-;3153:72;:::i;:::-;3259:19;;;3297:4;3317:12;;;;3247:3;3348:1;3383:15;;;3372:27;;3422:14;3411:26;;3408:46;;;3450:1;3447;3440:12;3408:46;3474:5;3488:1790;3504:6;3499:3;3496:15;3488:1790;;;3590:3;3577:17;3617:18;3667:2;3654:11;3651:19;3648:109;;;3711:1;3740:2;3736;3729:14;3648:109;3791:11;3784:5;3780:23;3770:33;;3848:4;3843:2;3827:14;3823:23;3819:34;3816:124;;;3894:1;3923:2;3919;3912:14;3816:124;3968:22;;:::i;:::-;4019;4038:2;4019:22;:::i;:::-;4010:7;4003:39;4080:43;4119:2;4115;4111:11;4080:43;:::i;:::-;4075:2;4066:7;4062:16;4055:69;4147:2;4197;4193;4189:11;4176:25;4228:2;4220:6;4217:14;4214:104;;;4272:1;4301:2;4297;4290:14;4214:104;4341:15;;;;;4398:14;4391:4;4383:13;;4379:34;4369:135;;4456:1;4445:12;;4486:3;4481;4474:16;4369:135;4541:2;4528:16;4517:27;;4570:69;4586:52;4634:3;4586:52;:::i;4570:69::-;4683:18;;;4778:12;;;4770:21;;4766:30;;;4723:14;;;;4825;4812:28;;4809:121;;;4882:1;4912:3;4907;4900:16;4809:121;4956:11;;;;4980:179;4998:8;4991:5;4988:19;4980:179;;;5080:24;5098:5;5080:24;:::i;:::-;5066:39;;5019:14;;;;5131;;;;4980:179;;;5179:16;;;5172:31;;;;-1:-1:-1;5216:20:181;;-1:-1:-1;;5256:12:181;;;;3521;;3488:1790;;;-1:-1:-1;5300:5:181;;2946:2365;-1:-1:-1;;;;;;;2946:2365:181:o;5425:127::-;5486:10;5481:3;5477:20;5474:1;5467:31;5517:4;5514:1;5507:15;5541:4;5538:1;5531:15;5557:242;5643:1;5636:5;5633:12;5623:143;;5688:10;5683:3;5679:20;5676:1;5669:31;5723:4;5720:1;5713:15;5751:4;5748:1;5741:15;5623:143;5775:18;;5557:242::o;5804:446::-;5903:6;5898:3;5891:19;5873:3;5929:4;5958:2;5953:3;5949:12;5942:19;;5984:5;6007:1;6017:208;6031:6;6028:1;6025:13;6017:208;;;-1:-1:-1;;;;;;6096:25:181;6114:6;6096:25;:::i;:::-;6092:52;6080:65;;6165:12;;;;6200:15;;;;6053:1;6046:9;6017:208;;;-1:-1:-1;6241:3:181;;5804:446;-1:-1:-1;;;;;5804:446:181:o;6255:266::-;6343:6;6338:3;6331:19;6395:6;6388:5;6381:4;6376:3;6372:14;6359:43;-1:-1:-1;6447:1:181;6422:16;;;6440:4;6418:27;;;6411:38;;;;6503:2;6482:15;;;-1:-1:-1;;6478:29:181;6469:39;;;6465:50;;6255:266::o;6526:2128::-;6847:2;6899:21;;;6872:18;;;6955:22;;;6818:4;;7031:1;7008:3;6993:19;;;;7074:15;;;7059:31;;7055:41;7119:6;6818:4;7153:1311;7167:6;7164:1;7161:13;7153:1311;;;7232:22;;;-1:-1:-1;;7228:37:181;7216:50;;7305:20;;7380:14;7376:27;;;-1:-1:-1;;7372:41:181;7348:66;;7338:94;;7428:1;7425;7418:12;7338:94;7458:31;;-1:-1:-1;;;;;7521:25:181;7458:31;7521:25;:::i;:::-;7517:51;7509:6;7502:67;7592:4;7629:46;7671:2;7664:5;7660:14;7629:46;:::i;:::-;7688:61;7745:2;7737:6;7733:15;7719:12;7688:61;:::i;:::-;;7772:4;7841:2;7834:5;7830:14;7817:28;7930:2;7926:7;7918:5;7902:14;7898:26;7894:40;7872:20;7868:67;7858:95;;7949:1;7946;7939:12;7858:95;7981:32;;;8089:16;;;;-1:-1:-1;8040:21:181;8132:18;8121:30;;8118:50;;;8164:1;8161;8154:12;8118:50;8225:6;8221:2;8217:15;8201:14;8197:36;8188:7;8184:50;8181:70;;;8247:1;8244;8237:12;8181:70;8288:2;8283;8275:6;8271:15;8264:27;8314:70;8380:2;8372:6;8368:15;8360:6;8351:7;8314:70;:::i;:::-;8442:12;;;;8304:80;-1:-1:-1;;;8407:15:181;;;;;-1:-1:-1;7189:1:181;7182:9;7153:1311;;;-1:-1:-1;;;;;;;5382:31:181;;8515:4;8500:20;;5370:44;8571:9;8563:6;8559:22;8552:4;8541:9;8537:20;8530:52;8599:49;8641:6;8633;8625;8599:49;:::i;:::-;8591:57;6526:2128;-1:-1:-1;;;;;;;;;;;6526:2128:181:o;9015:1506::-;9076:3;9114:5;9108:12;9141:6;9136:3;9129:19;9167:4;9208:2;9203:3;9199:12;9233:11;9260;9253:18;;9310:6;9307:1;9303:14;9296:5;9292:26;9280:38;;9352:2;9345:5;9341:14;9373:1;9394;9404:1091;9420:6;9415:3;9412:15;9404:1091;;;9485:16;;;9473:29;;9525:13;;9635:9;;-1:-1:-1;;;;;9631:35:181;9618:49;;9706:11;;;9700:18;9561:4;;9592:13;;;;9731:59;9776:13;;;9700:18;9731:59;:::i;:::-;-1:-1:-1;9813:4:181;9858:11;;;9852:18;9890:13;;;9883:25;;;;9969:21;;10003:24;;;;10092:23;;;;10059:3;10049:14;;;10139:1;;10153:236;10169:8;10164:3;10161:17;10153:236;;;10250:15;;-1:-1:-1;;;;;;10246:42:181;10232:57;;10358:17;;;;10315:14;;;;10197:1;10188:11;;;;;10153:236;;;-1:-1:-1;;10473:12:181;;;;10410:5;-1:-1:-1;;10438:15:181;;;;9446:1;9437:11;9404:1091;;;-1:-1:-1;10511:4:181;;9015:1506;-1:-1:-1;;;;;;;;9015:1506:181:o;10526:250::-;10611:1;10621:113;10635:6;10632:1;10629:13;10621:113;;;10711:11;;;10705:18;10692:11;;;10685:39;10657:2;10650:10;10621:113;;;-1:-1:-1;;10768:1:181;10750:16;;10743:27;10526:250::o;10781:270::-;10822:3;10860:5;10854:12;10887:6;10882:3;10875:19;10903:76;10972:6;10965:4;10960:3;10956:14;10949:4;10942:5;10938:16;10903:76;:::i;:::-;11033:2;11012:15;-1:-1:-1;;11008:29:181;10999:39;;;;11040:4;10995:50;;10781:270;-1:-1:-1;;10781:270:181:o;11056:580::-;11363:2;11352:9;11345:21;11326:4;11389:64;11449:2;11438:9;11434:18;11426:6;11389:64;:::i;:::-;-1:-1:-1;;;;;11489:32:181;;11484:2;11469:18;;11462:60;11558:22;;;11553:2;11538:18;;11531:50;11598:32;11562:6;11615;11598:32;:::i;11999:127::-;12060:10;12055:3;12051:20;12048:1;12041:31;12091:4;12088:1;12081:15;12115:4;12112:1;12105:15;12539:127;12600:10;12595:3;12591:20;12588:1;12581:31;12631:4;12628:1;12621:15;12655:4;12652:1;12645:15;12671:125;12736:9;;;12757:10;;;12754:36;;;12770:18;;:::i;:::-;12671:125;;;;:::o;12801:653::-;13136:3;13125:9;13118:22;13099:4;13163:65;13223:3;13212:9;13208:19;13200:6;13163:65;:::i;:::-;-1:-1:-1;;;;;13264:32:181;;13259:2;13244:18;;13237:60;13333:22;;;13328:2;13313:18;;13306:50;13373:32;13337:6;13390;13373:32;:::i;:::-;13365:40;;;13441:6;13436:2;13425:9;13421:18;13414:34;12801:653;;;;;;;:::o;13459:407::-;13661:2;13643:21;;;13700:2;13680:18;;;13673:30;13739:34;13734:2;13719:18;;13712:62;-1:-1:-1;;;13805:2:181;13790:18;;13783:41;13856:3;13841:19;;13459:407::o;13871:408::-;14073:2;14055:21;;;14112:2;14092:18;;;14085:30;14151:34;14146:2;14131:18;;14124:62;-1:-1:-1;;;14217:2:181;14202:18;;14195:42;14269:3;14254:19;;13871:408::o;14706:217::-;14744:3;-1:-1:-1;;;;;14833:2:181;14826:5;14822:14;14860:2;14851:7;14848:15;14845:41;;14866:18;;:::i;:::-;14915:1;14902:15;;14706:217;-1:-1:-1;;;14706:217:181:o;17046:287::-;17175:3;17213:6;17207:13;17229:66;17288:6;17283:3;17276:4;17268:6;17264:17;17229:66;:::i;:::-;17311:16;;;;;17046:287;-1:-1:-1;;17046:287:181:o;17338:219::-;17487:2;17476:9;17469:21;17450:4;17507:44;17547:2;17536:9;17532:18;17524:6;17507:44;:::i;:::-;17499:52;17338:219;-1:-1:-1;;;17338:219:181:o;18808:128::-;18875:9;;;18896:11;;;18893:37;;;18910:18;;:::i;18941:127::-;19002:10;18997:3;18993:20;18990:1;18983:31;19033:4;19030:1;19023:15;19057:4;19054:1;19047:15"},"gasEstimates":{"creation":{"codeDepositCost":"1370400","executionCost":"1431","totalCost":"1371831"},"external":{"diamondCut((address,uint8,bytes4[])[],address,bytes)":"infinite","getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)":"infinite","proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)":"infinite","rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)":"infinite"}},"methodIdentifiers":{"diamondCut((address,uint8,bytes4[])[],address,bytes)":"1f931c1c","getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)":"56a8ea48","proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)":"bbf2358e","rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)":"2c67849c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCut\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"DiamondCutProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCutRescinded\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"diamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"getAcceptanceTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"proposeDiamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"rescindDiamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}},\"getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}},\"proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}},\"rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Add/replace/remove any number of functions and optionally execute         a function with delegatecall\"},\"getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Returns the acceptance time for a given proposal\"},\"proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Propose to add/replace/remove any number of functions and optionally execute         a function with delegatecall\"},\"rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Propose to add/replace/remove any number of functions and optionally execute         a function with delegatecall\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/DiamondCutFacet.sol\":\"DiamondCutFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/connext/facets/DiamondCutFacet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external override {\\n    LibDiamond.enforceIsContractOwner();\\n    LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n  }\\n\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external {\\n    LibDiamond.enforceIsContractOwner();\\n    LibDiamond.proposeDiamondCut(_diamondCut, _init, _calldata);\\n  }\\n\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external {\\n    LibDiamond.enforceIsContractOwner();\\n    LibDiamond.rescindDiamondCut(_diamondCut, _init, _calldata);\\n  }\\n\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external view returns (uint256) {\\n    return LibDiamond.acceptanceTime(keccak256(abi.encode(_diamondCut, _init, _calldata)));\\n  }\\n}\\n\",\"keccak256\":\"0xfd7e9f489e8a67109b64fcb1136fd8126cfddb7e4db9096560b9285cc4c57486\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"diamondCut((address,uint8,bytes4[])[],address,bytes)":{"notice":"Add/replace/remove any number of functions and optionally execute         a function with delegatecall"},"getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)":{"notice":"Returns the acceptance time for a given proposal"},"proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)":{"notice":"Propose to add/replace/remove any number of functions and optionally execute         a function with delegatecall"},"rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)":{"notice":"Propose to add/replace/remove any number of functions and optionally execute         a function with delegatecall"}},"version":1}}},"contracts/core/connext/facets/DiamondLoupeFacet.sol":{"DiamondLoupeFacet":{"abi":[{"inputs":[{"internalType":"bytes4","name":"_functionSelector","type":"bytes4"}],"name":"facetAddress","outputs":[{"internalType":"address","name":"facetAddress_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facetAddresses","outputs":[{"internalType":"address[]","name":"facetAddresses_","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_facet","type":"address"}],"name":"facetFunctionSelectors","outputs":[{"internalType":"bytes4[]","name":"facetFunctionSelectors_","type":"bytes4[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facets","outputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondLoupe.Facet[]","name":"facets_","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"facetAddress(bytes4)":{"details":"If facet is not found return address(0).","params":{"_functionSelector":"The function selector."},"returns":{"facetAddress_":"The facet address."}},"facetAddresses()":{"returns":{"facetAddresses_":"facetAddresses_"}},"facetFunctionSelectors(address)":{"params":{"_facet":"The facet address."},"returns":{"facetFunctionSelectors_":"facetFunctionSelectors_"}},"facets()":{"returns":{"facets_":"Facet"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5061065b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806301ffc9a71461005c57806352ef6b2c146100bd5780637a0ed627146100d2578063adfca15e146100e7578063cdffacc614610107575b600080fd5b6100a861006a36600461045d565b6001600160e01b03191660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6100c561015f565b6040516100b4919061048e565b6100da6101d2565b6040516100b49190610520565b6100fa6100f536600461059d565b610391565b6040516100b491906105c6565b61014761011536600461045d565b6001600160e01b031916600090815260008051602061060683398151915260205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020016100b4565b60606000600080516020610606833981519152600281018054604080516020808402820181019092528281529394508301828280156101c757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116101a9575b505050505091505090565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131e54606090600080516020610606833981519152908067ffffffffffffffff811115610220576102206105d9565b60405190808252806020026020018201604052801561026657816020015b60408051808201909152600081526060602082015281526020019060019003908161023e5790505b50925060005b8181101561038b57600083600201828154811061028b5761028b6105ef565b9060005260206000200160009054906101000a90046001600160a01b03169050808583815181106102be576102be6105ef565b6020908102919091018101516001600160a01b03928316905290821660009081526001860182526040908190208054825181850281018501909352808352919290919083018282801561035d57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b0319168152602001906004019060208260030104928301926001038202915080841161031f5790505b5050505050858381518110610374576103746105ef565b60209081029190910181015101525060010161026c565b50505090565b6001600160a01b03811660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d60209081526040918290208054835181840281018401909452808452606093600080516020610606833981519152939092919083018282801561045057602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116104125790505b5050505050915050919050565b60006020828403121561046f57600080fd5b81356001600160e01b03198116811461048757600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156104cf5783516001600160a01b0316835292840192918401916001016104aa565b50909695505050505050565b600081518084526020808501945080840160005b838110156105155781516001600160e01b031916875295820195908201906001016104ef565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561058f57888303603f19018552815180516001600160a01b0316845287015187840187905261057c878501826104db565b9588019593505090860190600101610547565b509098975050505050505050565b6000602082840312156105af57600080fd5b81356001600160a01b038116811461048757600080fd5b60208152600061048760208301846104db565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fdfec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131ca2646970667358221220bdf72abe01aa75859908eaa230b2d8e40d84c683db8b0da95fbdf8944cce617e64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x65B DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x52EF6B2C EQ PUSH2 0xBD JUMPI DUP1 PUSH4 0x7A0ED627 EQ PUSH2 0xD2 JUMPI DUP1 PUSH4 0xADFCA15E EQ PUSH2 0xE7 JUMPI DUP1 PUSH4 0xCDFFACC6 EQ PUSH2 0x107 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA8 PUSH2 0x6A CALLDATASIZE PUSH1 0x4 PUSH2 0x45D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131F PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC5 PUSH2 0x15F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB4 SWAP2 SWAP1 PUSH2 0x48E JUMP JUMPDEST PUSH2 0xDA PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB4 SWAP2 SWAP1 PUSH2 0x520 JUMP JUMPDEST PUSH2 0xFA PUSH2 0xF5 CALLDATASIZE PUSH1 0x4 PUSH2 0x59D JUMP JUMPDEST PUSH2 0x391 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB4 SWAP2 SWAP1 PUSH2 0x5C6 JUMP JUMPDEST PUSH2 0x147 PUSH2 0x115 CALLDATASIZE PUSH1 0x4 PUSH2 0x45D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x606 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB4 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x606 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x2 DUP2 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP5 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP5 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1C7 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1A9 JUMPI JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131E SLOAD PUSH1 0x60 SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x606 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x220 JUMPI PUSH2 0x220 PUSH2 0x5D9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x266 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x23E JUMPI SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x38B JUMPI PUSH1 0x0 DUP4 PUSH1 0x2 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x28B JUMPI PUSH2 0x28B PUSH2 0x5EF JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2BE JUMPI PUSH2 0x2BE PUSH2 0x5EF JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP1 MSTORE SWAP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD DUP3 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x35D JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x31F JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x374 JUMPI PUSH2 0x374 PUSH2 0x5EF JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x26C JUMP JUMPDEST POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x606 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 SWAP1 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x450 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x412 JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x46F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0x487 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4CF JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x4AA JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x515 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4EF JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x58F JUMPI DUP9 DUP4 SUB PUSH1 0x3F NOT ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MSTORE DUP8 ADD MLOAD DUP8 DUP5 ADD DUP8 SWAP1 MSTORE PUSH2 0x57C DUP8 DUP6 ADD DUP3 PUSH2 0x4DB JUMP JUMPDEST SWAP6 DUP9 ADD SWAP6 SWAP4 POP POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x547 JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x487 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x487 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4DB JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID 0xC8 0xFC 0xAD DUP14 0xB8 0x4D EXTCODECOPY 0xC1 DUP12 0x4C COINBASE 0xD5 MLOAD 0xEA 0xE 0xE6 PUSH14 0xD599CDE068D998E57D5E09332C13 SHR LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBD 0xF7 0x2A 0xBE ADD 0xAA PUSH22 0x859908EAA230B2D8E40D84C683DB8B0DA95FBDF8944C 0xCE PUSH2 0x7E64 PUSH20 0x6F6C634300081100330000000000000000000000 ","sourceMap":"658:2409:71:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@diamondStorage_29603":{"entryPoint":null,"id":29603,"parameterSlots":0,"returnSlots":1},"@facetAddress_16400":{"entryPoint":null,"id":16400,"parameterSlots":1,"returnSlots":1},"@facetAddresses_16373":{"entryPoint":351,"id":16373,"parameterSlots":0,"returnSlots":1},"@facetFunctionSelectors_16350":{"entryPoint":913,"id":16350,"parameterSlots":1,"returnSlots":1},"@facets_16322":{"entryPoint":466,"id":16322,"parameterSlots":0,"returnSlots":1},"@supportsInterface_16423":{"entryPoint":null,"id":16423,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":1437,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes4":{"entryPoint":1117,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_bytes4_dyn":{"entryPoint":1243,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":1166,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_bytes4_$dyn_memory_ptr__to_t_array$_t_bytes4_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":1478,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_struct$_Facet_$26952_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_Facet_$26952_memory_ptr_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":1312,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x32":{"entryPoint":1519,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":1497,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3715:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"83:217:181","statements":[{"body":{"nodeType":"YulBlock","src":"129:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"138:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"141:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"131:6:181"},"nodeType":"YulFunctionCall","src":"131:12:181"},"nodeType":"YulExpressionStatement","src":"131:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"104:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"113:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"100:3:181"},"nodeType":"YulFunctionCall","src":"100:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"125:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"96:3:181"},"nodeType":"YulFunctionCall","src":"96:32:181"},"nodeType":"YulIf","src":"93:52:181"},{"nodeType":"YulVariableDeclaration","src":"154:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"180:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"167:12:181"},"nodeType":"YulFunctionCall","src":"167:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"158:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"254:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"263:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"266:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"256:6:181"},"nodeType":"YulFunctionCall","src":"256:12:181"},"nodeType":"YulExpressionStatement","src":"256:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"212:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"223:5:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"234:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"239:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"230:3:181"},"nodeType":"YulFunctionCall","src":"230:20:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"219:3:181"},"nodeType":"YulFunctionCall","src":"219:32:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"209:2:181"},"nodeType":"YulFunctionCall","src":"209:43:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"202:6:181"},"nodeType":"YulFunctionCall","src":"202:51:181"},"nodeType":"YulIf","src":"199:71:181"},{"nodeType":"YulAssignment","src":"279:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"289:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"279:6:181"}]}]},"name":"abi_decode_tuple_t_bytes4","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"49:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"60:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"72:6:181","type":""}],"src":"14:286:181"},{"body":{"nodeType":"YulBlock","src":"400:92:181","statements":[{"nodeType":"YulAssignment","src":"410:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"422:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"433:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"418:3:181"},"nodeType":"YulFunctionCall","src":"418:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"410:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"452:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"477:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"470:6:181"},"nodeType":"YulFunctionCall","src":"470:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"463:6:181"},"nodeType":"YulFunctionCall","src":"463:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"445:6:181"},"nodeType":"YulFunctionCall","src":"445:41:181"},"nodeType":"YulExpressionStatement","src":"445:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"369:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"380:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"391:4:181","type":""}],"src":"305:187:181"},{"body":{"nodeType":"YulBlock","src":"648:507:181","statements":[{"nodeType":"YulVariableDeclaration","src":"658:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"668:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"662:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"679:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"697:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"708:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"693:3:181"},"nodeType":"YulFunctionCall","src":"693:18:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"683:6:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"727:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"738:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"720:6:181"},"nodeType":"YulFunctionCall","src":"720:21:181"},"nodeType":"YulExpressionStatement","src":"720:21:181"},{"nodeType":"YulVariableDeclaration","src":"750:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"761:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"754:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"776:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"796:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"790:5:181"},"nodeType":"YulFunctionCall","src":"790:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"780:6:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"819:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"827:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"812:6:181"},"nodeType":"YulFunctionCall","src":"812:22:181"},"nodeType":"YulExpressionStatement","src":"812:22:181"},{"nodeType":"YulAssignment","src":"843:25:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"854:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"865:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"850:3:181"},"nodeType":"YulFunctionCall","src":"850:18:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"843:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"877:29:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"895:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"903:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"891:3:181"},"nodeType":"YulFunctionCall","src":"891:15:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"881:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"915:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"924:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"919:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"983:146:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1004:3:181"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"1019:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1013:5:181"},"nodeType":"YulFunctionCall","src":"1013:13:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1036:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1041:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1032:3:181"},"nodeType":"YulFunctionCall","src":"1032:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1045:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1028:3:181"},"nodeType":"YulFunctionCall","src":"1028:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1009:3:181"},"nodeType":"YulFunctionCall","src":"1009:39:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"997:6:181"},"nodeType":"YulFunctionCall","src":"997:52:181"},"nodeType":"YulExpressionStatement","src":"997:52:181"},{"nodeType":"YulAssignment","src":"1062:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1073:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1078:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1069:3:181"},"nodeType":"YulFunctionCall","src":"1069:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"1062:3:181"}]},{"nodeType":"YulAssignment","src":"1094:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"1108:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1116:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1104:3:181"},"nodeType":"YulFunctionCall","src":"1104:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"1094:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"945:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"948:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"942:2:181"},"nodeType":"YulFunctionCall","src":"942:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"956:18:181","statements":[{"nodeType":"YulAssignment","src":"958:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"967:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"970:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:181"},"nodeType":"YulFunctionCall","src":"963:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"958:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"938:3:181","statements":[]},"src":"934:195:181"},{"nodeType":"YulAssignment","src":"1138:11:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"1146:3:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1138:4:181"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"617:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"628:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"639:4:181","type":""}],"src":"497:658:181"},{"body":{"nodeType":"YulBlock","src":"1220:401:181","statements":[{"nodeType":"YulVariableDeclaration","src":"1230:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1250:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1244:5:181"},"nodeType":"YulFunctionCall","src":"1244:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1234:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1272:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"1277:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1265:6:181"},"nodeType":"YulFunctionCall","src":"1265:19:181"},"nodeType":"YulExpressionStatement","src":"1265:19:181"},{"nodeType":"YulVariableDeclaration","src":"1293:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1303:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1297:2:181","type":""}]},{"nodeType":"YulAssignment","src":"1316:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1327:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1332:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1323:3:181"},"nodeType":"YulFunctionCall","src":"1323:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"1316:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"1344:28:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1362:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1369:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1358:3:181"},"nodeType":"YulFunctionCall","src":"1358:14:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"1348:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1381:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1390:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"1385:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1449:147:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1470:3:181"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"1485:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1479:5:181"},"nodeType":"YulFunctionCall","src":"1479:13:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1498:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1503:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1494:3:181"},"nodeType":"YulFunctionCall","src":"1494:20:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1475:3:181"},"nodeType":"YulFunctionCall","src":"1475:40:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1463:6:181"},"nodeType":"YulFunctionCall","src":"1463:53:181"},"nodeType":"YulExpressionStatement","src":"1463:53:181"},{"nodeType":"YulAssignment","src":"1529:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1540:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1545:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1536:3:181"},"nodeType":"YulFunctionCall","src":"1536:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"1529:3:181"}]},{"nodeType":"YulAssignment","src":"1561:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"1575:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1583:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1571:3:181"},"nodeType":"YulFunctionCall","src":"1571:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"1561:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1411:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"1414:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1408:2:181"},"nodeType":"YulFunctionCall","src":"1408:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1422:18:181","statements":[{"nodeType":"YulAssignment","src":"1424:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1433:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"1436:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1429:3:181"},"nodeType":"YulFunctionCall","src":"1429:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"1424:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"1404:3:181","statements":[]},"src":"1400:196:181"},{"nodeType":"YulAssignment","src":"1605:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"1612:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"1605:3:181"}]}]},"name":"abi_encode_array_bytes4_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1197:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"1204:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"1212:3:181","type":""}],"src":"1160:461:181"},{"body":{"nodeType":"YulBlock","src":"1825:862:181","statements":[{"nodeType":"YulVariableDeclaration","src":"1835:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1845:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1839:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1856:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1874:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1885:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1870:3:181"},"nodeType":"YulFunctionCall","src":"1870:18:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"1860:6:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1904:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1915:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1897:6:181"},"nodeType":"YulFunctionCall","src":"1897:21:181"},"nodeType":"YulExpressionStatement","src":"1897:21:181"},{"nodeType":"YulVariableDeclaration","src":"1927:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"1938:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"1931:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1953:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1973:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1967:5:181"},"nodeType":"YulFunctionCall","src":"1967:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1957:6:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"1996:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"2004:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1989:6:181"},"nodeType":"YulFunctionCall","src":"1989:22:181"},"nodeType":"YulExpressionStatement","src":"1989:22:181"},{"nodeType":"YulVariableDeclaration","src":"2020:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2030:2:181","type":"","value":"64"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2024:2:181","type":""}]},{"nodeType":"YulAssignment","src":"2041:25:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2052:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"2063:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2048:3:181"},"nodeType":"YulFunctionCall","src":"2048:18:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"2041:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"2075:53:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2097:9:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2112:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"2115:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2108:3:181"},"nodeType":"YulFunctionCall","src":"2108:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2093:3:181"},"nodeType":"YulFunctionCall","src":"2093:30:181"},{"name":"_2","nodeType":"YulIdentifier","src":"2125:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2089:3:181"},"nodeType":"YulFunctionCall","src":"2089:39:181"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"2079:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2137:29:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2155:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2163:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2151:3:181"},"nodeType":"YulFunctionCall","src":"2151:15:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"2141:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2175:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2184:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2179:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2243:415:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2264:3:181"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"2277:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2285:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2273:3:181"},"nodeType":"YulFunctionCall","src":"2273:22:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2301:2:181","type":"","value":"63"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2297:3:181"},"nodeType":"YulFunctionCall","src":"2297:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2269:3:181"},"nodeType":"YulFunctionCall","src":"2269:36:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2257:6:181"},"nodeType":"YulFunctionCall","src":"2257:49:181"},"nodeType":"YulExpressionStatement","src":"2257:49:181"},{"nodeType":"YulVariableDeclaration","src":"2319:23:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2335:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2329:5:181"},"nodeType":"YulFunctionCall","src":"2329:13:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"2323:2:181","type":""}]},{"expression":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"2362:6:181"},{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2380:2:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2374:5:181"},"nodeType":"YulFunctionCall","src":"2374:9:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2393:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2398:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2389:3:181"},"nodeType":"YulFunctionCall","src":"2389:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2402:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2385:3:181"},"nodeType":"YulFunctionCall","src":"2385:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2370:3:181"},"nodeType":"YulFunctionCall","src":"2370:35:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2355:6:181"},"nodeType":"YulFunctionCall","src":"2355:51:181"},"nodeType":"YulExpressionStatement","src":"2355:51:181"},{"nodeType":"YulVariableDeclaration","src":"2419:38:181","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2449:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2453:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2445:3:181"},"nodeType":"YulFunctionCall","src":"2445:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2439:5:181"},"nodeType":"YulFunctionCall","src":"2439:18:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"2423:12:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"2481:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2489:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2477:3:181"},"nodeType":"YulFunctionCall","src":"2477:15:181"},{"name":"_2","nodeType":"YulIdentifier","src":"2494:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2470:6:181"},"nodeType":"YulFunctionCall","src":"2470:27:181"},"nodeType":"YulExpressionStatement","src":"2470:27:181"},{"nodeType":"YulAssignment","src":"2510:68:181","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"2548:12:181"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"2566:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"2574:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2562:3:181"},"nodeType":"YulFunctionCall","src":"2562:15:181"}],"functionName":{"name":"abi_encode_array_bytes4_dyn","nodeType":"YulIdentifier","src":"2520:27:181"},"nodeType":"YulFunctionCall","src":"2520:58:181"},"variableNames":[{"name":"tail_2","nodeType":"YulIdentifier","src":"2510:6:181"}]},{"nodeType":"YulAssignment","src":"2591:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2605:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2613:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2601:3:181"},"nodeType":"YulFunctionCall","src":"2601:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2591:6:181"}]},{"nodeType":"YulAssignment","src":"2629:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2640:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2645:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2636:3:181"},"nodeType":"YulFunctionCall","src":"2636:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"2629:3:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2205:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"2208:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2202:2:181"},"nodeType":"YulFunctionCall","src":"2202:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2216:18:181","statements":[{"nodeType":"YulAssignment","src":"2218:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2227:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"2230:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2223:3:181"},"nodeType":"YulFunctionCall","src":"2223:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2218:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"2198:3:181","statements":[]},"src":"2194:464:181"},{"nodeType":"YulAssignment","src":"2667:14:181","value":{"name":"tail_2","nodeType":"YulIdentifier","src":"2675:6:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2667:4:181"}]}]},"name":"abi_encode_tuple_t_array$_t_struct$_Facet_$26952_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_Facet_$26952_memory_ptr_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1794:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1805:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1816:4:181","type":""}],"src":"1626:1061:181"},{"body":{"nodeType":"YulBlock","src":"2762:216:181","statements":[{"body":{"nodeType":"YulBlock","src":"2808:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2817:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2820:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2810:6:181"},"nodeType":"YulFunctionCall","src":"2810:12:181"},"nodeType":"YulExpressionStatement","src":"2810:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2783:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2792:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2779:3:181"},"nodeType":"YulFunctionCall","src":"2779:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2804:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2775:3:181"},"nodeType":"YulFunctionCall","src":"2775:32:181"},"nodeType":"YulIf","src":"2772:52:181"},{"nodeType":"YulVariableDeclaration","src":"2833:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2859:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2846:12:181"},"nodeType":"YulFunctionCall","src":"2846:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2837:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2932:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2941:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2944:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2934:6:181"},"nodeType":"YulFunctionCall","src":"2934:12:181"},"nodeType":"YulExpressionStatement","src":"2934:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2891:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2902:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2917:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2922:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2913:3:181"},"nodeType":"YulFunctionCall","src":"2913:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2926:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2909:3:181"},"nodeType":"YulFunctionCall","src":"2909:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2898:3:181"},"nodeType":"YulFunctionCall","src":"2898:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2888:2:181"},"nodeType":"YulFunctionCall","src":"2888:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2881:6:181"},"nodeType":"YulFunctionCall","src":"2881:50:181"},"nodeType":"YulIf","src":"2878:70:181"},{"nodeType":"YulAssignment","src":"2957:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"2967:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2957:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2728:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2739:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2751:6:181","type":""}],"src":"2692:286:181"},{"body":{"nodeType":"YulBlock","src":"3132:109:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3149:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3160:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3142:6:181"},"nodeType":"YulFunctionCall","src":"3142:21:181"},"nodeType":"YulExpressionStatement","src":"3142:21:181"},{"nodeType":"YulAssignment","src":"3172:63:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3208:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3220:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3231:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3216:3:181"},"nodeType":"YulFunctionCall","src":"3216:18:181"}],"functionName":{"name":"abi_encode_array_bytes4_dyn","nodeType":"YulIdentifier","src":"3180:27:181"},"nodeType":"YulFunctionCall","src":"3180:55:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3172:4:181"}]}]},"name":"abi_encode_tuple_t_array$_t_bytes4_$dyn_memory_ptr__to_t_array$_t_bytes4_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3101:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3112:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3123:4:181","type":""}],"src":"2983:258:181"},{"body":{"nodeType":"YulBlock","src":"3347:102:181","statements":[{"nodeType":"YulAssignment","src":"3357:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3369:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3380:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3365:3:181"},"nodeType":"YulFunctionCall","src":"3365:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3357:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3399:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3414:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3430:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3435:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3426:3:181"},"nodeType":"YulFunctionCall","src":"3426:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3439:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3422:3:181"},"nodeType":"YulFunctionCall","src":"3422:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3410:3:181"},"nodeType":"YulFunctionCall","src":"3410:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3392:6:181"},"nodeType":"YulFunctionCall","src":"3392:51:181"},"nodeType":"YulExpressionStatement","src":"3392:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3316:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3327:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3338:4:181","type":""}],"src":"3246:203:181"},{"body":{"nodeType":"YulBlock","src":"3486:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3503:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3510:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"3515:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3506:3:181"},"nodeType":"YulFunctionCall","src":"3506:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3496:6:181"},"nodeType":"YulFunctionCall","src":"3496:31:181"},"nodeType":"YulExpressionStatement","src":"3496:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3543:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3546:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3536:6:181"},"nodeType":"YulFunctionCall","src":"3536:15:181"},"nodeType":"YulExpressionStatement","src":"3536:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3567:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3570:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3560:6:181"},"nodeType":"YulFunctionCall","src":"3560:15:181"},"nodeType":"YulExpressionStatement","src":"3560:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"3454:127:181"},{"body":{"nodeType":"YulBlock","src":"3618:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3635:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3642:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"3647:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3638:3:181"},"nodeType":"YulFunctionCall","src":"3638:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3628:6:181"},"nodeType":"YulFunctionCall","src":"3628:31:181"},"nodeType":"YulExpressionStatement","src":"3628:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3675:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3678:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3668:6:181"},"nodeType":"YulFunctionCall","src":"3668:15:181"},"nodeType":"YulExpressionStatement","src":"3668:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3699:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3702:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3692:6:181"},"nodeType":"YulFunctionCall","src":"3692:15:181"},"nodeType":"YulExpressionStatement","src":"3692:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"3586:127:181"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, shl(224, 0xffffffff)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_array_bytes4_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), shl(224, 0xffffffff)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_array$_t_struct$_Facet_$26952_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_Facet_$26952_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        let _2 := 64\n        pos := add(headStart, _2)\n        let tail_2 := add(add(headStart, shl(5, length)), _2)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, add(sub(tail_2, headStart), not(63)))\n            let _3 := mload(srcPtr)\n            mstore(tail_2, and(mload(_3), sub(shl(160, 1), 1)))\n            let memberValue0 := mload(add(_3, _1))\n            mstore(add(tail_2, _1), _2)\n            tail_2 := abi_encode_array_bytes4_dyn(memberValue0, add(tail_2, _2))\n            srcPtr := add(srcPtr, _1)\n            pos := add(pos, _1)\n        }\n        tail := tail_2\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_array$_t_bytes4_$dyn_memory_ptr__to_t_array$_t_bytes4_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_array_bytes4_dyn(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100575760003560e01c806301ffc9a71461005c57806352ef6b2c146100bd5780637a0ed627146100d2578063adfca15e146100e7578063cdffacc614610107575b600080fd5b6100a861006a36600461045d565b6001600160e01b03191660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6100c561015f565b6040516100b4919061048e565b6100da6101d2565b6040516100b49190610520565b6100fa6100f536600461059d565b610391565b6040516100b491906105c6565b61014761011536600461045d565b6001600160e01b031916600090815260008051602061060683398151915260205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020016100b4565b60606000600080516020610606833981519152600281018054604080516020808402820181019092528281529394508301828280156101c757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116101a9575b505050505091505090565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131e54606090600080516020610606833981519152908067ffffffffffffffff811115610220576102206105d9565b60405190808252806020026020018201604052801561026657816020015b60408051808201909152600081526060602082015281526020019060019003908161023e5790505b50925060005b8181101561038b57600083600201828154811061028b5761028b6105ef565b9060005260206000200160009054906101000a90046001600160a01b03169050808583815181106102be576102be6105ef565b6020908102919091018101516001600160a01b03928316905290821660009081526001860182526040908190208054825181850281018501909352808352919290919083018282801561035d57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b0319168152602001906004019060208260030104928301926001038202915080841161031f5790505b5050505050858381518110610374576103746105ef565b60209081029190910181015101525060010161026c565b50505090565b6001600160a01b03811660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d60209081526040918290208054835181840281018401909452808452606093600080516020610606833981519152939092919083018282801561045057602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116104125790505b5050505050915050919050565b60006020828403121561046f57600080fd5b81356001600160e01b03198116811461048757600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156104cf5783516001600160a01b0316835292840192918401916001016104aa565b50909695505050505050565b600081518084526020808501945080840160005b838110156105155781516001600160e01b031916875295820195908201906001016104ef565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561058f57888303603f19018552815180516001600160a01b0316845287015187840187905261057c878501826104db565b9588019593505090860190600101610547565b509098975050505050505050565b6000602082840312156105af57600080fd5b81356001600160a01b038116811461048757600080fd5b60208152600061048760208301846104db565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fdfec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131ca2646970667358221220bdf72abe01aa75859908eaa230b2d8e40d84c683db8b0da95fbdf8944cce617e64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x52EF6B2C EQ PUSH2 0xBD JUMPI DUP1 PUSH4 0x7A0ED627 EQ PUSH2 0xD2 JUMPI DUP1 PUSH4 0xADFCA15E EQ PUSH2 0xE7 JUMPI DUP1 PUSH4 0xCDFFACC6 EQ PUSH2 0x107 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA8 PUSH2 0x6A CALLDATASIZE PUSH1 0x4 PUSH2 0x45D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131F PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC5 PUSH2 0x15F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB4 SWAP2 SWAP1 PUSH2 0x48E JUMP JUMPDEST PUSH2 0xDA PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB4 SWAP2 SWAP1 PUSH2 0x520 JUMP JUMPDEST PUSH2 0xFA PUSH2 0xF5 CALLDATASIZE PUSH1 0x4 PUSH2 0x59D JUMP JUMPDEST PUSH2 0x391 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB4 SWAP2 SWAP1 PUSH2 0x5C6 JUMP JUMPDEST PUSH2 0x147 PUSH2 0x115 CALLDATASIZE PUSH1 0x4 PUSH2 0x45D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x606 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB4 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x606 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x2 DUP2 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP5 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP5 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1C7 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1A9 JUMPI JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131E SLOAD PUSH1 0x60 SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x606 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x220 JUMPI PUSH2 0x220 PUSH2 0x5D9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x266 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x23E JUMPI SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x38B JUMPI PUSH1 0x0 DUP4 PUSH1 0x2 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x28B JUMPI PUSH2 0x28B PUSH2 0x5EF JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2BE JUMPI PUSH2 0x2BE PUSH2 0x5EF JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP1 MSTORE SWAP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD DUP3 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x35D JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x31F JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x374 JUMPI PUSH2 0x374 PUSH2 0x5EF JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x26C JUMP JUMPDEST POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x606 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 SWAP1 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x450 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x412 JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x46F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0x487 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4CF JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x4AA JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x515 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4EF JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x58F JUMPI DUP9 DUP4 SUB PUSH1 0x3F NOT ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MSTORE DUP8 ADD MLOAD DUP8 DUP5 ADD DUP8 SWAP1 MSTORE PUSH2 0x57C DUP8 DUP6 ADD DUP3 PUSH2 0x4DB JUMP JUMPDEST SWAP6 DUP9 ADD SWAP6 SWAP4 POP POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x547 JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x487 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x487 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4DB JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID 0xC8 0xFC 0xAD DUP14 0xB8 0x4D EXTCODECOPY 0xC1 DUP12 0x4C COINBASE 0xD5 MLOAD 0xEA 0xE 0xE6 PUSH14 0xD599CDE068D998E57D5E09332C13 SHR LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBD 0xF7 0x2A 0xBE ADD 0xAA PUSH22 0x859908EAA230B2D8E40D84C683DB8B0DA95FBDF8944C 0xCE PUSH2 0x7E64 PUSH20 0x6F6C634300081100330000000000000000000000 ","sourceMap":"658:2409:71:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2853:212;;;;;;:::i;:::-;-1:-1:-1;;;;;;3024:36:71;2933:4;3024:36;;;:22;:36;;;;;;;;;2853:212;;;;470:14:181;;463:22;445:41;;433:2;418:18;2853:212:71;;;;;;;;2126:210;;;:::i;:::-;;;;;;;:::i;1064:520::-;;;:::i;:::-;;;;;;;:::i;1732:299::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2556:263::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;2753:48:71;2636:21;2753:48;;;-1:-1:-1;;;;;;;;;;;2753:48:71;;;;;:61;-1:-1:-1;;;;;2753:61:71;;2556:263;;;;-1:-1:-1;;;;;3410:32:181;;;3392:51;;3380:2;3365:18;2556:263:71;3246:203:181;2126:210:71;2184:32;2224:36;-1:-1:-1;;;;;;;;;;;2314:17:71;;;2296:35;;;;;;;;;;;;;;;;;;;2224:66;;-1:-1:-1;2296:35:71;;2314:17;2296:35;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2296:35:71;;;;;;;;;;;;;;;;;;;;;;;2218:118;2126:210;:::o;1064:520::-;1236:17;:24;1114:22;;-1:-1:-1;;;;;;;;;;;636:45:106;1236:24:71;1276:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;1276:22:71;;;;;;;;;;;;;;;;1266:32;;1309:9;1304:276;1324:9;1320:1;:13;1304:276;;;1345:21;1369:2;:17;;1387:1;1369:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1369:20:71;1345:44;;1423:13;1397:7;1405:1;1397:10;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1397:39:71;;;;;1475:40;;;1397:23;1475:40;;;:25;;;:40;;;;;;;1444:89;;;;;;;;;;;;;;;;;;;1475:40;;1444:89;;;1475:40;1444:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1444:89:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;1452:1;1444:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;:89;-1:-1:-1;1562:3:71;;1304:276;;;;1138:446;;1064:520;:::o;1732:299::-;-1:-1:-1;;;;;1975:33:71;;1877:36;1975:33;;;:25;:33;;;;;;;;;1949:77;;;;;;;;;;;;;;;;;1828:39;;-1:-1:-1;;;;;;;;;;;636:45:106;1949:77:71;;1975:33;1949:77;;;1975:33;1949:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1949:77:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1871:160;1732:299;;;:::o;14:286:181:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:181;;209:43;;199:71;;266:1;263;256:12;199:71;289:5;14:286;-1:-1:-1;;;14:286:181:o;497:658::-;668:2;720:21;;;790:13;;693:18;;;812:22;;;639:4;;668:2;891:15;;;;865:2;850:18;;;639:4;934:195;948:6;945:1;942:13;934:195;;;1013:13;;-1:-1:-1;;;;;1009:39:181;997:52;;1104:15;;;;1069:12;;;;1045:1;963:9;934:195;;;-1:-1:-1;1146:3:181;;497:658;-1:-1:-1;;;;;;497:658:181:o;1160:461::-;1212:3;1250:5;1244:12;1277:6;1272:3;1265:19;1303:4;1332:2;1327:3;1323:12;1316:19;;1369:2;1362:5;1358:14;1390:1;1400:196;1414:6;1411:1;1408:13;1400:196;;;1479:13;;-1:-1:-1;;;;;;1475:40:181;1463:53;;1536:12;;;;1571:15;;;;1436:1;1429:9;1400:196;;;-1:-1:-1;1612:3:181;;1160:461;-1:-1:-1;;;;;1160:461:181:o;1626:1061::-;1816:4;1845:2;1885;1874:9;1870:18;1915:2;1904:9;1897:21;1938:6;1973;1967:13;2004:6;1996;1989:22;2030:2;2020:12;;2063:2;2052:9;2048:18;2041:25;;2125:2;2115:6;2112:1;2108:14;2097:9;2093:30;2089:39;2163:2;2155:6;2151:15;2184:1;2194:464;2208:6;2205:1;2202:13;2194:464;;;2273:22;;;-1:-1:-1;;2269:36:181;2257:49;;2329:13;;2374:9;;-1:-1:-1;;;;;2370:35:181;2355:51;;2445:11;;2439:18;2477:15;;;2470:27;;;2520:58;2562:15;;;2439:18;2520:58;:::i;:::-;2636:12;;;;2510:68;-1:-1:-1;;2601:15:181;;;;2230:1;2223:9;2194:464;;;-1:-1:-1;2675:6:181;;1626:1061;-1:-1:-1;;;;;;;;1626:1061:181:o;2692:286::-;2751:6;2804:2;2792:9;2783:7;2779:23;2775:32;2772:52;;;2820:1;2817;2810:12;2772:52;2846:23;;-1:-1:-1;;;;;2898:31:181;;2888:42;;2878:70;;2944:1;2941;2934:12;2983:258;3160:2;3149:9;3142:21;3123:4;3180:55;3231:2;3220:9;3216:18;3208:6;3180:55;:::i;3454:127::-;3515:10;3510:3;3506:20;3503:1;3496:31;3546:4;3543:1;3536:15;3570:4;3567:1;3560:15;3586:127;3647:10;3642:3;3638:20;3635:1;3628:31;3678:4;3675:1;3668:15;3702:4;3699:1;3692:15"},"gasEstimates":{"creation":{"codeDepositCost":"325400","executionCost":"362","totalCost":"325762"},"external":{"facetAddress(bytes4)":"infinite","facetAddresses()":"infinite","facetFunctionSelectors(address)":"infinite","facets()":"infinite","supportsInterface(bytes4)":"2487"}},"methodIdentifiers":{"facetAddress(bytes4)":"cdffacc6","facetAddresses()":"52ef6b2c","facetFunctionSelectors(address)":"adfca15e","facets()":"7a0ed627","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_functionSelector\",\"type\":\"bytes4\"}],\"name\":\"facetAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"facetAddress_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facetAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"facetAddresses_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_facet\",\"type\":\"address\"}],\"name\":\"facetFunctionSelectors\",\"outputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"facetFunctionSelectors_\",\"type\":\"bytes4[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facets\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondLoupe.Facet[]\",\"name\":\"facets_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"facetAddress(bytes4)\":{\"details\":\"If facet is not found return address(0).\",\"params\":{\"_functionSelector\":\"The function selector.\"},\"returns\":{\"facetAddress_\":\"The facet address.\"}},\"facetAddresses()\":{\"returns\":{\"facetAddresses_\":\"facetAddresses_\"}},\"facetFunctionSelectors(address)\":{\"params\":{\"_facet\":\"The facet address.\"},\"returns\":{\"facetFunctionSelectors_\":\"facetFunctionSelectors_\"}},\"facets()\":{\"returns\":{\"facets_\":\"Facet\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"facetAddress(bytes4)\":{\"notice\":\"Gets the facet that supports the given selector.\"},\"facetAddresses()\":{\"notice\":\"Get all the facet addresses used by a diamond.\"},\"facetFunctionSelectors(address)\":{\"notice\":\"Gets all the function selectors provided by a facet.\"},\"facets()\":{\"notice\":\"Gets all facets and their selectors.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/DiamondLoupeFacet.sol\":\"DiamondLoupeFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/connext/facets/DiamondLoupeFacet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\n// The functions in DiamondLoupeFacet MUST be added to a diamond.\\n// The EIP-2535 Diamond standard requires these functions.\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n  // Diamond Loupe Functions\\n  ////////////////////////////////////////////////////////////////////\\n  /// These functions are expected to be called frequently by tools.\\n  //\\n  // struct Facet {\\n  //     address facetAddress;\\n  //     bytes4[] functionSelectors;\\n  // }\\n\\n  /// @notice Gets all facets and their selectors.\\n  /// @return facets_ Facet\\n  function facets() external view override returns (Facet[] memory facets_) {\\n    LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n    uint256 numFacets = ds.facetAddresses.length;\\n    facets_ = new Facet[](numFacets);\\n    for (uint256 i; i < numFacets; ) {\\n      address facetAddress_ = ds.facetAddresses[i];\\n      facets_[i].facetAddress = facetAddress_;\\n      facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /// @notice Gets all the function selectors provided by a facet.\\n  /// @param _facet The facet address.\\n  /// @return facetFunctionSelectors_\\n  function facetFunctionSelectors(address _facet)\\n    external\\n    view\\n    override\\n    returns (bytes4[] memory facetFunctionSelectors_)\\n  {\\n    LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n    facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n  }\\n\\n  /// @notice Get all the facet addresses used by a diamond.\\n  /// @return facetAddresses_\\n  function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n    LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n    facetAddresses_ = ds.facetAddresses;\\n  }\\n\\n  /// @notice Gets the facet that supports the given selector.\\n  /// @dev If facet is not found return address(0).\\n  /// @param _functionSelector The function selector.\\n  /// @return facetAddress_ The facet address.\\n  function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n    LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n    facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n  }\\n\\n  // This implements ERC-165.\\n  function supportsInterface(bytes4 _interfaceId) external view override returns (bool) {\\n    LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n    return ds.supportedInterfaces[_interfaceId];\\n  }\\n}\\n\",\"keccak256\":\"0xd94974a685e96dfffcd6c1cb5775e3f95c821024ecd7028eb1b2171b021facb9\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IDiamondLoupe.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n  /// These functions are expected to be called frequently\\n  /// by tools.\\n\\n  struct Facet {\\n    address facetAddress;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Gets all facet addresses and their four byte function selectors.\\n  /// @return facets_ Facet\\n  function facets() external view returns (Facet[] memory facets_);\\n\\n  /// @notice Gets all the function selectors supported by a specific facet.\\n  /// @param _facet The facet address.\\n  /// @return facetFunctionSelectors_\\n  function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n  /// @notice Get all the facet addresses used by a diamond.\\n  /// @return facetAddresses_\\n  function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n  /// @notice Gets the facet that supports the given selector.\\n  /// @dev If facet is not found return address(0).\\n  /// @param _functionSelector The function selector.\\n  /// @return facetAddress_ The facet address.\\n  function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\",\"keccak256\":\"0xc408c13dc42d9526b1f292bad3f3915efa15c2133f509d90a45422b5f6cf829c\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\ninterface IERC165 {\\n  /// @notice Query if a contract implements an interface\\n  /// @param interfaceId The interface identifier, as specified in ERC-165\\n  /// @dev Interface identification is specified in ERC-165. This function\\n  ///  uses less than 30,000 gas.\\n  /// @return `true` if the contract implements `interfaceID` and\\n  ///  `interfaceID` is not 0xffffffff, `false` otherwise\\n  function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xc92e38025a8eff9eafa17be136dd134e8b95060b7a258f840713d2a7d4b7fa85\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"facetAddress(bytes4)":{"notice":"Gets the facet that supports the given selector."},"facetAddresses()":{"notice":"Get all the facet addresses used by a diamond."},"facetFunctionSelectors(address)":{"notice":"Gets all the function selectors provided by a facet."},"facets()":{"notice":"Gets all facets and their selectors."}},"version":1}}},"contracts/core/connext/facets/InboxFacet.sol":{"InboxFacet":{"abi":[{"inputs":[],"name":"AssetLogic__getConfig_notRegistered","type":"error"},{"inputs":[],"name":"BaseConnextFacet__getAdoptedAsset_assetNotFound","type":"error"},{"inputs":[],"name":"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonXCallReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__whenNotPaused_paused","type":"error"},{"inputs":[],"name":"InboxFacet__handle_notTransfer","type":"error"},{"inputs":[],"name":"InboxFacet__onlyRemoteRouter_notRemote","type":"error"},{"inputs":[],"name":"InboxFacet__onlyReplica_notReplica","type":"error"},{"inputs":[],"name":"InboxFacet__reconcile_alreadyReconciled","type":"error"},{"inputs":[],"name":"InboxFacet__reconcile_noPortalRouter","type":"error"},{"inputs":[{"internalType":"uint256","name":"actual","type":"uint256"},{"internalType":"uint256","name":"expected","type":"uint256"}],"name":"TypedMemView__assertType_typeAssertionFailed","type":"error"},{"inputs":[],"name":"TypedMemView__assertValid_validityAssertionFailed","type":"error"},{"inputs":[],"name":"TypedMemView__index_indexMoreThan32Bytes","type":"error"},{"inputs":[{"internalType":"uint256","name":"loc","type":"uint256"},{"internalType":"uint256","name":"len","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"slice","type":"uint256"}],"name":"TypedMemView__index_overrun","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint64","name":"originAndNonce","type":"uint64"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Receive","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"transferId","type":"bytes32"},{"indexed":true,"internalType":"uint32","name":"originDomain","type":"uint32"},{"indexed":true,"internalType":"address","name":"local","type":"address"},{"indexed":false,"internalType":"address[]","name":"routers","type":"address[]"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"Reconciled","type":"event"},{"inputs":[{"internalType":"uint32","name":"_origin","type":"uint32"},{"internalType":"uint32","name":"_nonce","type":"uint32"},{"internalType":"bytes32","name":"_sender","type":"bytes32"},{"internalType":"bytes","name":"_message","type":"bytes"}],"name":"handle","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"events":{"Receive(uint64,address,address,address,uint256)":{"params":{"amount":"The amount of tokens being received","liquidityProvider":"The account providing liquidity","originAndNonce":"Domain where the transfer originated and the        unique identifier for the message from origin to destination,        combined in a single field ((origin << 32) & nonce)","recipient":"The address receiving the tokens; the original        recipient of the transfer","token":"The address of the local token contract being received"}},"Reconciled(bytes32,uint32,address,address[],uint256,address)":{"params":{"amount":"- The amount that was provided by the bridge.","caller":"- The account that called the function","local":"- The local asset that was provided by the bridge.","originDomain":"- The originating domain of the transfer.","routers":"- The routers that were reimbursed the bridged token, if fast liquidity was provided for the given transfer.","transferId":"- The unique identifier of the transfer."}}},"kind":"dev","methods":{"handle(uint32,uint32,bytes32,bytes)":{"params":{"_message":"The message body.","_nonce":"The unique identifier for the message from origin to destination.","_origin":"The origin domain.","_sender":"The sender address."}}},"title":"InboxFacet","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506110ad806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063ab2dc3f514610030575b600080fd5b61004361003e366004610e33565b610045565b005b61004e3361013c565b61006b5760405163761c560f60e11b815260040160405180910390fd5b838261007782826101b1565b610094576040516346b4a0e960e01b815260040160405180910390fd5b60006100ae6100a385836101db565b62ffffff19166101ff565b905060006100c162ffffff198316610218565b905060006100d462ffffff19841661024d565b90506100e562ffffff1982166102a5565b61010257604051632af392f960e11b815260040160405180910390fd5b6000806101118b8b86866102b2565b9150915061012f6101278462ffffff1916610500565b8c8484610515565b5050505050505050505050565b602054604051635190bc5360e01b81526001600160a01b0383811660048301526000921690635190bc5390602401602060405180830381865afa158015610187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ab9190610f0f565b92915050565b63ffffffff82166000908152600f6020526040812054821480156101d457508115155b9392505050565b8151600090602084016101f664ffffffffff85168284610827565b95945050505050565b60006101ab61020d83610864565b62ffffff1916610896565b600081600261022f815b62ffffff198416906108c3565b5061024562ffffff198516600060246001610914565b949350505050565b600081600261025b81610222565b5060006102766024601887901c6001600160601b0316610f5d565b9050600061028386610984565b60ff16905061029b62ffffff19871660248484610914565b9695505050505050565b60006101ab826003610999565b600080806102c562ffffff1986166109f8565b905060006102d862ffffff198716610a1a565b905060006102eb62ffffff198716610a3c565b9050801580156102ff575063ffffffff8216155b8015610309575082155b1561037f5730600067ffffffff0000000060208c901b1663ffffffff8b161760408051600081526020810186905267ffffffffffffffff92909216917f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb910160405180910390a4600080945094505050506104f7565b600061039561038e8585610a51565b8585610a93565b90508160000361041857306001600160a01b03821667ffffffff0000000060208d901b1663ffffffff8c161760408051600081526020810187905267ffffffffffffffff92909216917f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb910160405180910390a49450600093506104f792505050565b61042181610aa2565b610486576040516340c10f1960e01b8152306004820152602481018390526001600160a01b038216906340c10f1990604401600060405180830381600087803b15801561046d57600080fd5b505af1158015610481573d6000803e3d6000fd5b505050505b306001600160a01b03821667ffffffff0000000060208d901b1663ffffffff8c161760408051600081526020810187905267ffffffffffffffff92909216917f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb910160405180910390a49450925050505b94509492505050565b60006101ab62ffffff19831660216020610aaf565b60008481526008602052604081205460ff169081600381111561053a5761053a610f31565b1415801561055a5750600281600381111561055757610557610f31565b14155b1561057857604051638f6bc06f60e01b815260040160405180910390fd5b600081600381111561058c5761058c610f31565b1461059857600361059b565b60015b6000868152600860205260409020805460ff191660018360038111156105c3576105c3610f31565b021790555060008581526009602090815260408083208054825181850281018501909352808352919290919083018282801561062857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161060a575b5050506000898152601e6020908152604080832054601d90925282205494955090936106579350909150610f70565b8251909150811580159061066c575080600114155b1561068a5760405163d3bd901560e01b815260040160405180910390fd5b80156107d057600061069c8287610f99565b905060005b6106ac600184610f5d565b81101561073457816000600a0160008784815181106106cd576106cd610fad565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546107279190610f70565b90915550506001016106a1565b5060006107418388610fc3565b61074b9083610f70565b905080600a60008761075e600188610f5d565b8151811061076e5761076e610fad565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546107c89190610f70565b909155505050505b856001600160a01b03168763ffffffff16897f30bf44531c04b96173a40012c90db840a147cf7d50a3e160f5227f1af2faa3a086893360405161081593929190610fd7565b60405180910390a45050505050505050565b6000806108348385610f70565b9050604051811115610844575060005b806000036108595762ffffff199150506101d4565b6101f6858585610bba565b600061086f82610c31565b1561088c576301000000600160d81b038216600160d91b176101ab565b62ffffff196101ab565b60006108a182610c54565b156108bf5760405163252e0d8360e01b815260040160405180910390fd5b5090565b60006108cf8383610c90565b61090d576108dd8360d81c90565b60405163d32c1d3760e01b815264ffffffffff918216600482015290831660248201526044015b60405180910390fd5b5090919050565b60008061092a8660781c6001600160601b031690565b6001600160601b0316905061093e86610cb3565b846109498784610f70565b6109539190610f70565b11156109665762ffffff19915050610245565b6109708582610f70565b905061029b8364ffffffffff168286610827565b60006101ab62ffffff19831660246001610cec565b60008160038111156109ad576109ad610f31565b60ff166109b984610d1c565b60ff161480156101d457508160038111156109d6576109d6610f31565b6109df84610d30565b60038111156109f0576109f0610f31565b149392505050565b6000816001610a0681610222565b5061024562ffffff19851660046020610aaf565b6000816001610a2881610222565b5061024562ffffff19851660006004610cec565b60006101ab62ffffff19831660016020610cec565b60008282604051602001610a7592919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b60006102458484846000610d4b565b60006101ab826000610d84565b60008160ff16600003610ac4575060006101d4565b610ad78460181c6001600160601b031690565b6001600160601b0316610aed60ff841685610f70565b1115610b5557610b068460781c6001600160601b031690565b610b198560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610904565b60208260ff161115610b7a5760405163045df3f960e01b815260040160405180910390fd5b600882026000610b938660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b60006060601883856001600160601b03821682148015610be2575086816001600160601b0316145b610c1b5760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610904565b96831b90961790911b90941790931b9392505050565b6000601882901c6001600160601b0316610c4d60416024610f70565b1492915050565b6000610c608260d81c90565b64ffffffffff1664ffffffffff03610c7a57506001919050565b6000610c8583610cb3565b604051109392505050565b60008164ffffffffff16610ca48460d81c90565b64ffffffffff16149392505050565b6000610cc88260181c6001600160601b031690565b610cdb8360781c6001600160601b031690565b016001600160601b03169050919050565b6000610cf982602061103b565b610d04906008611054565b60ff16610d12858585610aaf565b901c949350505050565b60006101ab62ffffff198316826001610cec565b600060d882901c60ff1660038111156101ab576101ab610f31565b600481015460009063ffffffff90811690841603610d6a575082610245565b610d7385610dc3565b546001600160a01b03169050610245565b6001600160a01b038216600090815260068201602052604081205463ffffffff1615610db2575060006101ab565b50506001600160a01b03163b151590565b6000818152600760205260408120600180820154839291600160a01b90910460ff1610156101d45760405163618cca3f60e11b815260040160405180910390fd5b803563ffffffff81168114610e1857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215610e4957600080fd5b610e5285610e04565b9350610e6060208601610e04565b925060408501359150606085013567ffffffffffffffff80821115610e8457600080fd5b818701915087601f830112610e9857600080fd5b813581811115610eaa57610eaa610e1d565b604051601f8201601f19908116603f01168101908382118183101715610ed257610ed2610e1d565b816040528281528a6020848701011115610eeb57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600060208284031215610f2157600080fd5b815180151581146101d457600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156101ab576101ab610f47565b808201808211156101ab576101ab610f47565b634e487b7160e01b600052601260045260246000fd5b600082610fa857610fa8610f83565b500490565b634e487b7160e01b600052603260045260246000fd5b600082610fd257610fd2610f83565b500690565b606080825284519082018190526000906020906080840190828801845b828110156110195781516001600160a01b031684529284019290840190600101610ff4565b50505090830194909452506001600160a01b0391909116604090910152919050565b60ff82811682821603908111156101ab576101ab610f47565b60ff818116838216029081169081811461107057611070610f47565b509291505056fea2646970667358221220329ea0b47a7a6608e0cd1630a7d58f709d39644e057e6ca7c7e75c468b82148c64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10AD DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAB2DC3F5 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x3E CALLDATASIZE PUSH1 0x4 PUSH2 0xE33 JUMP JUMPDEST PUSH2 0x45 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x4E CALLER PUSH2 0x13C JUMP JUMPDEST PUSH2 0x6B JUMPI PUSH1 0x40 MLOAD PUSH4 0x761C560F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 DUP3 PUSH2 0x77 DUP3 DUP3 PUSH2 0x1B1 JUMP JUMPDEST PUSH2 0x94 JUMPI PUSH1 0x40 MLOAD PUSH4 0x46B4A0E9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAE PUSH2 0xA3 DUP6 DUP4 PUSH2 0x1DB JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND PUSH2 0x1FF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xC1 PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x218 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xD4 PUSH3 0xFFFFFF NOT DUP5 AND PUSH2 0x24D JUMP JUMPDEST SWAP1 POP PUSH2 0xE5 PUSH3 0xFFFFFF NOT DUP3 AND PUSH2 0x2A5 JUMP JUMPDEST PUSH2 0x102 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2AF392F9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x111 DUP12 DUP12 DUP7 DUP7 PUSH2 0x2B2 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x12F PUSH2 0x127 DUP5 PUSH3 0xFFFFFF NOT AND PUSH2 0x500 JUMP JUMPDEST DUP13 DUP5 DUP5 PUSH2 0x515 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 SLOAD PUSH1 0x40 MLOAD PUSH4 0x5190BC53 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0x5190BC53 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x187 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1AB SWAP2 SWAP1 PUSH2 0xF0F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 EQ DUP1 ISZERO PUSH2 0x1D4 JUMPI POP DUP2 ISZERO ISZERO JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0x1F6 PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x827 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AB PUSH2 0x20D DUP4 PUSH2 0x864 JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND PUSH2 0x896 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 PUSH2 0x22F DUP2 JUMPDEST PUSH3 0xFFFFFF NOT DUP5 AND SWAP1 PUSH2 0x8C3 JUMP JUMPDEST POP PUSH2 0x245 PUSH3 0xFFFFFF NOT DUP6 AND PUSH1 0x0 PUSH1 0x24 PUSH1 0x1 PUSH2 0x914 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 PUSH2 0x25B DUP2 PUSH2 0x222 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x276 PUSH1 0x24 PUSH1 0x18 DUP8 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0xF5D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x283 DUP7 PUSH2 0x984 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH2 0x29B PUSH3 0xFFFFFF NOT DUP8 AND PUSH1 0x24 DUP5 DUP5 PUSH2 0x914 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AB DUP3 PUSH1 0x3 PUSH2 0x999 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x2C5 PUSH3 0xFFFFFF NOT DUP7 AND PUSH2 0x9F8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2D8 PUSH3 0xFFFFFF NOT DUP8 AND PUSH2 0xA1A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2EB PUSH3 0xFFFFFF NOT DUP8 AND PUSH2 0xA3C JUMP JUMPDEST SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x2FF JUMPI POP PUSH4 0xFFFFFFFF DUP3 AND ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x309 JUMPI POP DUP3 ISZERO JUMPDEST ISZERO PUSH2 0x37F JUMPI ADDRESS PUSH1 0x0 PUSH8 0xFFFFFFFF00000000 PUSH1 0x20 DUP13 SWAP1 SHL AND PUSH4 0xFFFFFFFF DUP12 AND OR PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH32 0x9F9A97DB84F39202CA3B409B63F7CCF7D3FD810E176573C7483088B6F181BBBB SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x0 DUP1 SWAP5 POP SWAP5 POP POP POP POP PUSH2 0x4F7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x395 PUSH2 0x38E DUP6 DUP6 PUSH2 0xA51 JUMP JUMPDEST DUP6 DUP6 PUSH2 0xA93 JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x0 SUB PUSH2 0x418 JUMPI ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH8 0xFFFFFFFF00000000 PUSH1 0x20 DUP14 SWAP1 SHL AND PUSH4 0xFFFFFFFF DUP13 AND OR PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH32 0x9F9A97DB84F39202CA3B409B63F7CCF7D3FD810E176573C7483088B6F181BBBB SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP5 POP PUSH1 0x0 SWAP4 POP PUSH2 0x4F7 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x421 DUP2 PUSH2 0xAA2 JUMP JUMPDEST PUSH2 0x486 JUMPI PUSH1 0x40 MLOAD PUSH4 0x40C10F19 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x40C10F19 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x46D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x481 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH8 0xFFFFFFFF00000000 PUSH1 0x20 DUP14 SWAP1 SHL AND PUSH4 0xFFFFFFFF DUP13 AND OR PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH32 0x9F9A97DB84F39202CA3B409B63F7CCF7D3FD810E176573C7483088B6F181BBBB SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP5 POP SWAP3 POP POP POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AB PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x21 PUSH1 0x20 PUSH2 0xAAF JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x53A JUMPI PUSH2 0x53A PUSH2 0xF31 JUMP JUMPDEST EQ ISZERO DUP1 ISZERO PUSH2 0x55A JUMPI POP PUSH1 0x2 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x557 JUMPI PUSH2 0x557 PUSH2 0xF31 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x578 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8F6BC06F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x58C JUMPI PUSH2 0x58C PUSH2 0xF31 JUMP JUMPDEST EQ PUSH2 0x598 JUMPI PUSH1 0x3 PUSH2 0x59B JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x5C3 JUMPI PUSH2 0x5C3 PUSH2 0xF31 JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x628 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x60A JUMPI JUMPDEST POP POP POP PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x1E PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x1D SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD SWAP5 SWAP6 POP SWAP1 SWAP4 PUSH2 0x657 SWAP4 POP SWAP1 SWAP2 POP PUSH2 0xF70 JUMP JUMPDEST DUP3 MLOAD SWAP1 SWAP2 POP DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x66C JUMPI POP DUP1 PUSH1 0x1 EQ ISZERO JUMPDEST ISZERO PUSH2 0x68A JUMPI PUSH1 0x40 MLOAD PUSH4 0xD3BD9015 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x7D0 JUMPI PUSH1 0x0 PUSH2 0x69C DUP3 DUP8 PUSH2 0xF99 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH2 0x6AC PUSH1 0x1 DUP5 PUSH2 0xF5D JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x734 JUMPI DUP2 PUSH1 0x0 PUSH1 0xA ADD PUSH1 0x0 DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x6CD JUMPI PUSH2 0x6CD PUSH2 0xFAD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x727 SWAP2 SWAP1 PUSH2 0xF70 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 ADD PUSH2 0x6A1 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x741 DUP4 DUP9 PUSH2 0xFC3 JUMP JUMPDEST PUSH2 0x74B SWAP1 DUP4 PUSH2 0xF70 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0xA PUSH1 0x0 DUP8 PUSH2 0x75E PUSH1 0x1 DUP9 PUSH2 0xF5D JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x76E JUMPI PUSH2 0x76E PUSH2 0xFAD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x7C8 SWAP2 SWAP1 PUSH2 0xF70 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH4 0xFFFFFFFF AND DUP10 PUSH32 0x30BF44531C04B96173A40012C90DB840A147CF7D50A3E160F5227F1AF2FAA3A0 DUP7 DUP10 CALLER PUSH1 0x40 MLOAD PUSH2 0x815 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xFD7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x834 DUP4 DUP6 PUSH2 0xF70 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x844 JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x859 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x1D4 JUMP JUMPDEST PUSH2 0x1F6 DUP6 DUP6 DUP6 PUSH2 0xBBA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x86F DUP3 PUSH2 0xC31 JUMP JUMPDEST ISZERO PUSH2 0x88C JUMPI PUSH4 0x1000000 PUSH1 0x1 PUSH1 0xD8 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0xD9 SHL OR PUSH2 0x1AB JUMP JUMPDEST PUSH3 0xFFFFFF NOT PUSH2 0x1AB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8A1 DUP3 PUSH2 0xC54 JUMP JUMPDEST ISZERO PUSH2 0x8BF JUMPI PUSH1 0x40 MLOAD PUSH4 0x252E0D83 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8CF DUP4 DUP4 PUSH2 0xC90 JUMP JUMPDEST PUSH2 0x90D JUMPI PUSH2 0x8DD DUP4 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD32C1D37 PUSH1 0xE0 SHL DUP2 MSTORE PUSH5 0xFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x92A DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH2 0x93E DUP7 PUSH2 0xCB3 JUMP JUMPDEST DUP5 PUSH2 0x949 DUP8 DUP5 PUSH2 0xF70 JUMP JUMPDEST PUSH2 0x953 SWAP2 SWAP1 PUSH2 0xF70 JUMP JUMPDEST GT ISZERO PUSH2 0x966 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x245 JUMP JUMPDEST PUSH2 0x970 DUP6 DUP3 PUSH2 0xF70 JUMP JUMPDEST SWAP1 POP PUSH2 0x29B DUP4 PUSH5 0xFFFFFFFFFF AND DUP3 DUP7 PUSH2 0x827 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AB PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x24 PUSH1 0x1 PUSH2 0xCEC JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x9AD JUMPI PUSH2 0x9AD PUSH2 0xF31 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x9B9 DUP5 PUSH2 0xD1C JUMP JUMPDEST PUSH1 0xFF AND EQ DUP1 ISZERO PUSH2 0x1D4 JUMPI POP DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x9D6 JUMPI PUSH2 0x9D6 PUSH2 0xF31 JUMP JUMPDEST PUSH2 0x9DF DUP5 PUSH2 0xD30 JUMP JUMPDEST PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x9F0 JUMPI PUSH2 0x9F0 PUSH2 0xF31 JUMP JUMPDEST EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH2 0xA06 DUP2 PUSH2 0x222 JUMP JUMPDEST POP PUSH2 0x245 PUSH3 0xFFFFFF NOT DUP6 AND PUSH1 0x4 PUSH1 0x20 PUSH2 0xAAF JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH2 0xA28 DUP2 PUSH2 0x222 JUMP JUMPDEST POP PUSH2 0x245 PUSH3 0xFFFFFF NOT DUP6 AND PUSH1 0x0 PUSH1 0x4 PUSH2 0xCEC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AB PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x1 PUSH1 0x20 PUSH2 0xCEC JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xA75 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH4 0xFFFFFFFF AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x245 DUP5 DUP5 DUP5 PUSH1 0x0 PUSH2 0xD4B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AB DUP3 PUSH1 0x0 PUSH2 0xD84 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0xAC4 JUMPI POP PUSH1 0x0 PUSH2 0x1D4 JUMP JUMPDEST PUSH2 0xAD7 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0xAED PUSH1 0xFF DUP5 AND DUP6 PUSH2 0xF70 JUMP JUMPDEST GT ISZERO PUSH2 0xB55 JUMPI PUSH2 0xB06 DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xB19 DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x904 JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0xB7A JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0xB93 DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT DUP5 ADD SAR SWAP2 SWAP1 SWAP6 ADD MLOAD AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0xBE2 JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0xC1B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x904 JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x18 DUP3 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0xC4D PUSH1 0x41 PUSH1 0x24 PUSH2 0xF70 JUMP JUMPDEST EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC60 DUP3 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH5 0xFFFFFFFFFF SUB PUSH2 0xC7A JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC85 DUP4 PUSH2 0xCB3 JUMP JUMPDEST PUSH1 0x40 MLOAD LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH5 0xFFFFFFFFFF AND PUSH2 0xCA4 DUP5 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC8 DUP3 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xCDB DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCF9 DUP3 PUSH1 0x20 PUSH2 0x103B JUMP JUMPDEST PUSH2 0xD04 SWAP1 PUSH1 0x8 PUSH2 0x1054 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0xD12 DUP6 DUP6 DUP6 PUSH2 0xAAF JUMP JUMPDEST SWAP1 SHR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AB PUSH3 0xFFFFFF NOT DUP4 AND DUP3 PUSH1 0x1 PUSH2 0xCEC JUMP JUMPDEST PUSH1 0x0 PUSH1 0xD8 DUP3 SWAP1 SHR PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1AB JUMPI PUSH2 0x1AB PUSH2 0xF31 JUMP JUMPDEST PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP5 AND SUB PUSH2 0xD6A JUMPI POP DUP3 PUSH2 0x245 JUMP JUMPDEST PUSH2 0xD73 DUP6 PUSH2 0xDC3 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH2 0x245 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND ISZERO PUSH2 0xDB2 JUMPI POP PUSH1 0x0 PUSH2 0x1AB JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 DUP1 DUP3 ADD SLOAD DUP4 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0xFF AND LT ISZERO PUSH2 0x1D4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x618CCA3F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xE49 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE52 DUP6 PUSH2 0xE04 JUMP JUMPDEST SWAP4 POP PUSH2 0xE60 PUSH1 0x20 DUP7 ADD PUSH2 0xE04 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xE84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xE98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xEAA JUMPI PUSH2 0xEAA PUSH2 0xE1D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xED2 JUMPI PUSH2 0xED2 PUSH2 0xE1D JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP11 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0xEEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x1AB JUMPI PUSH2 0x1AB PUSH2 0xF47 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x1AB JUMPI PUSH2 0x1AB PUSH2 0xF47 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xFA8 JUMPI PUSH2 0xFA8 PUSH2 0xF83 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xFD2 JUMPI PUSH2 0xFD2 PUSH2 0xF83 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP5 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x80 DUP5 ADD SWAP1 DUP3 DUP9 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1019 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xFF4 JUMP JUMPDEST POP POP POP SWAP1 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x40 SWAP1 SWAP2 ADD MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x1AB JUMPI PUSH2 0x1AB PUSH2 0xF47 JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND MUL SWAP1 DUP2 AND SWAP1 DUP2 DUP2 EQ PUSH2 0x1070 JUMPI PUSH2 0x1070 PUSH2 0xF47 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ORIGIN SWAP15 LOG0 0xB4 PUSH27 0x7A6608E0CD1630A7D58F709D39644E057E6CA7C7E75C468B82148C PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"883:10474:72:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_creditTokens_16946":{"entryPoint":690,"id":16946,"parameterSlots":4,"returnSlots":2},"@_getLocalAsset_14039":{"entryPoint":2707,"id":14039,"parameterSlots":3,"returnSlots":1},"@_isLocalOrigin_14102":{"entryPoint":2722,"id":14102,"parameterSlots":1,"returnSlots":1},"@_isRemoteHandler_16792":{"entryPoint":433,"id":16792,"parameterSlots":2,"returnSlots":1},"@_isReplica_16767":{"entryPoint":316,"id":16767,"parameterSlots":1,"returnSlots":1},"@_originAndNonce_14019":{"entryPoint":null,"id":14019,"parameterSlots":2,"returnSlots":1},"@_reconcile_16752":{"entryPoint":1301,"id":16752,"parameterSlots":4,"returnSlots":0},"@actionType_29052":{"entryPoint":3356,"id":29052,"parameterSlots":1,"returnSlots":1},"@action_29145":{"entryPoint":589,"id":29145,"parameterSlots":1,"returnSlots":1},"@amnt_29067":{"entryPoint":2620,"id":29067,"parameterSlots":1,"returnSlots":1},"@assertType_50471":{"entryPoint":2243,"id":50471,"parameterSlots":2,"returnSlots":1},"@assertValid_50421":{"entryPoint":2198,"id":50421,"parameterSlots":1,"returnSlots":1},"@build_50565":{"entryPoint":2087,"id":50565,"parameterSlots":3,"returnSlots":1},"@bytes32ToAddress_50187":{"entryPoint":null,"id":50187,"parameterSlots":1,"returnSlots":1},"@calculateCanonicalHash_28598":{"entryPoint":2641,"id":28598,"parameterSlots":2,"returnSlots":1},"@castTo_50483":{"entryPoint":null,"id":50483,"parameterSlots":2,"returnSlots":1},"@connextStorage_29544":{"entryPoint":null,"id":29544,"parameterSlots":0,"returnSlots":1},"@domain_28977":{"entryPoint":2586,"id":28977,"parameterSlots":1,"returnSlots":1},"@end_50683":{"entryPoint":3251,"id":50683,"parameterSlots":1,"returnSlots":1},"@getConfig_27701":{"entryPoint":3523,"id":27701,"parameterSlots":1,"returnSlots":1},"@getLocalAsset_28579":{"entryPoint":3403,"id":28579,"parameterSlots":4,"returnSlots":1},"@handle_16592":{"entryPoint":69,"id":16592,"parameterSlots":4,"returnSlots":0},"@id_28997":{"entryPoint":2552,"id":28997,"parameterSlots":1,"returnSlots":1},"@indexUint_50882":{"entryPoint":3308,"id":50882,"parameterSlots":3,"returnSlots":1},"@index_50852":{"entryPoint":2735,"id":50852,"parameterSlots":3,"returnSlots":1},"@isLocalOrigin_28546":{"entryPoint":3460,"id":28546,"parameterSlots":2,"returnSlots":1},"@isNotValid_50403":{"entryPoint":3156,"id":50403,"parameterSlots":1,"returnSlots":1},"@isTransfer_28887":{"entryPoint":677,"id":28887,"parameterSlots":1,"returnSlots":1},"@isType_28872":{"entryPoint":2457,"id":28872,"parameterSlots":2,"returnSlots":1},"@isType_50438":{"entryPoint":3216,"id":50438,"parameterSlots":2,"returnSlots":1},"@isValidMessageLength_28775":{"entryPoint":3121,"id":28775,"parameterSlots":1,"returnSlots":1},"@leftMask_50342":{"entryPoint":null,"id":50342,"parameterSlots":1,"returnSlots":1},"@len_50665":{"entryPoint":null,"id":50665,"parameterSlots":1,"returnSlots":1},"@loc_50615":{"entryPoint":null,"id":50615,"parameterSlots":1,"returnSlots":1},"@messageType_28845":{"entryPoint":3376,"id":28845,"parameterSlots":1,"returnSlots":1},"@msgType_29034":{"entryPoint":2436,"id":29034,"parameterSlots":1,"returnSlots":1},"@mustBeMessage_29187":{"entryPoint":511,"id":29187,"parameterSlots":1,"returnSlots":1},"@nullView_50351":{"entryPoint":null,"id":50351,"parameterSlots":0,"returnSlots":1},"@ref_50591":{"entryPoint":475,"id":50591,"parameterSlots":2,"returnSlots":1},"@slice_50729":{"entryPoint":2324,"id":50729,"parameterSlots":4,"returnSlots":1},"@tokenId_29107":{"entryPoint":536,"id":29107,"parameterSlots":1,"returnSlots":1},"@transferId_29082":{"entryPoint":1280,"id":29082,"parameterSlots":1,"returnSlots":1},"@tryAsMessage_29172":{"entryPoint":2148,"id":29172,"parameterSlots":1,"returnSlots":1},"@typeOf_50601":{"entryPoint":null,"id":50601,"parameterSlots":1,"returnSlots":1},"@unsafeBuildUnchecked_50530":{"entryPoint":3002,"id":50530,"parameterSlots":3,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":3855,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32t_uint32t_bytes32t_bytes_memory_ptr":{"entryPoint":3635,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_uint32":{"entryPoint":3588,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_uint256_t_address__to_t_array$_t_address_$dyn_memory_ptr_t_uint256_t_address__fromStack_reversed":{"entryPoint":4055,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint32__to_t_bytes32_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":3952,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":3993,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint8":{"entryPoint":4180,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":3933,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint8":{"entryPoint":4155,"id":null,"parameterSlots":2,"returnSlots":1},"mod_t_uint256":{"entryPoint":4035,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":3911,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":3971,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":3889,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":4013,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":3613,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:5789:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"62:115:181","statements":[{"nodeType":"YulAssignment","src":"72:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"94:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"81:12:181"},"nodeType":"YulFunctionCall","src":"81:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"72:5:181"}]},{"body":{"nodeType":"YulBlock","src":"155:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"164:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"167:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"157:6:181"},"nodeType":"YulFunctionCall","src":"157:12:181"},"nodeType":"YulExpressionStatement","src":"157:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"123:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"134:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"141:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"130:3:181"},"nodeType":"YulFunctionCall","src":"130:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"120:2:181"},"nodeType":"YulFunctionCall","src":"120:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"113:6:181"},"nodeType":"YulFunctionCall","src":"113:41:181"},"nodeType":"YulIf","src":"110:61:181"}]},"name":"abi_decode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"41:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"52:5:181","type":""}],"src":"14:163:181"},{"body":{"nodeType":"YulBlock","src":"214:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"231:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"238:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"243:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"234:3:181"},"nodeType":"YulFunctionCall","src":"234:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"224:6:181"},"nodeType":"YulFunctionCall","src":"224:31:181"},"nodeType":"YulExpressionStatement","src":"224:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"271:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"274:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"264:6:181"},"nodeType":"YulFunctionCall","src":"264:15:181"},"nodeType":"YulExpressionStatement","src":"264:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"295:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"298:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"288:6:181"},"nodeType":"YulFunctionCall","src":"288:15:181"},"nodeType":"YulExpressionStatement","src":"288:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"182:127:181"},{"body":{"nodeType":"YulBlock","src":"442:1006:181","statements":[{"body":{"nodeType":"YulBlock","src":"489:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"498:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"501:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"491:6:181"},"nodeType":"YulFunctionCall","src":"491:12:181"},"nodeType":"YulExpressionStatement","src":"491:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"463:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"472:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"459:3:181"},"nodeType":"YulFunctionCall","src":"459:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"484:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"455:3:181"},"nodeType":"YulFunctionCall","src":"455:33:181"},"nodeType":"YulIf","src":"452:53:181"},{"nodeType":"YulAssignment","src":"514:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"542:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"524:17:181"},"nodeType":"YulFunctionCall","src":"524:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"514:6:181"}]},{"nodeType":"YulAssignment","src":"561:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"593:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"604:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"589:3:181"},"nodeType":"YulFunctionCall","src":"589:18:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"571:17:181"},"nodeType":"YulFunctionCall","src":"571:37:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"561:6:181"}]},{"nodeType":"YulAssignment","src":"617:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"644:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"655:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"640:3:181"},"nodeType":"YulFunctionCall","src":"640:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"627:12:181"},"nodeType":"YulFunctionCall","src":"627:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"617:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"668:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"699:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"710:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"695:3:181"},"nodeType":"YulFunctionCall","src":"695:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"682:12:181"},"nodeType":"YulFunctionCall","src":"682:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"672:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"723:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"733:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"727:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"778:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"787:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"790:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"780:6:181"},"nodeType":"YulFunctionCall","src":"780:12:181"},"nodeType":"YulExpressionStatement","src":"780:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"766:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"774:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"763:2:181"},"nodeType":"YulFunctionCall","src":"763:14:181"},"nodeType":"YulIf","src":"760:34:181"},{"nodeType":"YulVariableDeclaration","src":"803:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"817:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"828:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"813:3:181"},"nodeType":"YulFunctionCall","src":"813:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"807:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"883:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"892:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"895:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"885:6:181"},"nodeType":"YulFunctionCall","src":"885:12:181"},"nodeType":"YulExpressionStatement","src":"885:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"862:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"866:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"858:3:181"},"nodeType":"YulFunctionCall","src":"858:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"873:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"854:3:181"},"nodeType":"YulFunctionCall","src":"854:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"847:6:181"},"nodeType":"YulFunctionCall","src":"847:35:181"},"nodeType":"YulIf","src":"844:55:181"},{"nodeType":"YulVariableDeclaration","src":"908:26:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"931:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"918:12:181"},"nodeType":"YulFunctionCall","src":"918:16:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"912:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"957:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"959:16:181"},"nodeType":"YulFunctionCall","src":"959:18:181"},"nodeType":"YulExpressionStatement","src":"959:18:181"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"949:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"953:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"946:2:181"},"nodeType":"YulFunctionCall","src":"946:10:181"},"nodeType":"YulIf","src":"943:36:181"},{"nodeType":"YulVariableDeclaration","src":"988:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1002:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"998:3:181"},"nodeType":"YulFunctionCall","src":"998:7:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"992:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1014:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1034:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1028:5:181"},"nodeType":"YulFunctionCall","src":"1028:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1018:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1046:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1068:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1092:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1096:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1088:3:181"},"nodeType":"YulFunctionCall","src":"1088:13:181"},{"name":"_4","nodeType":"YulIdentifier","src":"1103:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1084:3:181"},"nodeType":"YulFunctionCall","src":"1084:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"1108:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1080:3:181"},"nodeType":"YulFunctionCall","src":"1080:31:181"},{"name":"_4","nodeType":"YulIdentifier","src":"1113:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1076:3:181"},"nodeType":"YulFunctionCall","src":"1076:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1064:3:181"},"nodeType":"YulFunctionCall","src":"1064:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1050:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1176:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1178:16:181"},"nodeType":"YulFunctionCall","src":"1178:18:181"},"nodeType":"YulExpressionStatement","src":"1178:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1135:10:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1147:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1132:2:181"},"nodeType":"YulFunctionCall","src":"1132:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1155:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1167:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1152:2:181"},"nodeType":"YulFunctionCall","src":"1152:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1129:2:181"},"nodeType":"YulFunctionCall","src":"1129:46:181"},"nodeType":"YulIf","src":"1126:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1214:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1218:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1207:6:181"},"nodeType":"YulFunctionCall","src":"1207:22:181"},"nodeType":"YulExpressionStatement","src":"1207:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1245:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1253:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1238:6:181"},"nodeType":"YulFunctionCall","src":"1238:18:181"},"nodeType":"YulExpressionStatement","src":"1238:18:181"},{"body":{"nodeType":"YulBlock","src":"1302:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1311:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1314:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1304:6:181"},"nodeType":"YulFunctionCall","src":"1304:12:181"},"nodeType":"YulExpressionStatement","src":"1304:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1279:2:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1283:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1275:3:181"},"nodeType":"YulFunctionCall","src":"1275:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1288:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1271:3:181"},"nodeType":"YulFunctionCall","src":"1271:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1293:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1268:2:181"},"nodeType":"YulFunctionCall","src":"1268:33:181"},"nodeType":"YulIf","src":"1265:53:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1344:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1352:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1340:3:181"},"nodeType":"YulFunctionCall","src":"1340:15:181"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1361:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1365:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1357:3:181"},"nodeType":"YulFunctionCall","src":"1357:11:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1370:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1327:12:181"},"nodeType":"YulFunctionCall","src":"1327:46:181"},"nodeType":"YulExpressionStatement","src":"1327:46:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1397:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1405:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1393:3:181"},"nodeType":"YulFunctionCall","src":"1393:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1410:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1389:3:181"},"nodeType":"YulFunctionCall","src":"1389:24:181"},{"kind":"number","nodeType":"YulLiteral","src":"1415:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1382:6:181"},"nodeType":"YulFunctionCall","src":"1382:35:181"},"nodeType":"YulExpressionStatement","src":"1382:35:181"},{"nodeType":"YulAssignment","src":"1426:16:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1436:6:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1426:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_uint32t_bytes32t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"384:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"395:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"407:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"415:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"423:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"431:6:181","type":""}],"src":"314:1134:181"},{"body":{"nodeType":"YulBlock","src":"1554:102:181","statements":[{"nodeType":"YulAssignment","src":"1564:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1576:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1587:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1572:3:181"},"nodeType":"YulFunctionCall","src":"1572:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1564:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1606:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1621:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1637:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1642:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1633:3:181"},"nodeType":"YulFunctionCall","src":"1633:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1646:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1629:3:181"},"nodeType":"YulFunctionCall","src":"1629:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1617:3:181"},"nodeType":"YulFunctionCall","src":"1617:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1599:6:181"},"nodeType":"YulFunctionCall","src":"1599:51:181"},"nodeType":"YulExpressionStatement","src":"1599:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1523:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1534:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1545:4:181","type":""}],"src":"1453:203:181"},{"body":{"nodeType":"YulBlock","src":"1739:199:181","statements":[{"body":{"nodeType":"YulBlock","src":"1785:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1794:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1797:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1787:6:181"},"nodeType":"YulFunctionCall","src":"1787:12:181"},"nodeType":"YulExpressionStatement","src":"1787:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1760:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1769:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1756:3:181"},"nodeType":"YulFunctionCall","src":"1756:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1781:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1752:3:181"},"nodeType":"YulFunctionCall","src":"1752:32:181"},"nodeType":"YulIf","src":"1749:52:181"},{"nodeType":"YulVariableDeclaration","src":"1810:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1829:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1823:5:181"},"nodeType":"YulFunctionCall","src":"1823:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1814:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1892:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1901:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1904:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1894:6:181"},"nodeType":"YulFunctionCall","src":"1894:12:181"},"nodeType":"YulExpressionStatement","src":"1894:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1861:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1882:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1875:6:181"},"nodeType":"YulFunctionCall","src":"1875:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1868:6:181"},"nodeType":"YulFunctionCall","src":"1868:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1858:2:181"},"nodeType":"YulFunctionCall","src":"1858:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1851:6:181"},"nodeType":"YulFunctionCall","src":"1851:40:181"},"nodeType":"YulIf","src":"1848:60:181"},{"nodeType":"YulAssignment","src":"1917:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1927:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1917:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1705:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1716:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1728:6:181","type":""}],"src":"1661:277:181"},{"body":{"nodeType":"YulBlock","src":"1975:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1992:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1999:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2004:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1995:3:181"},"nodeType":"YulFunctionCall","src":"1995:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1985:6:181"},"nodeType":"YulFunctionCall","src":"1985:31:181"},"nodeType":"YulExpressionStatement","src":"1985:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2032:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2035:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2025:6:181"},"nodeType":"YulFunctionCall","src":"2025:15:181"},"nodeType":"YulExpressionStatement","src":"2025:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2056:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2059:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2049:6:181"},"nodeType":"YulFunctionCall","src":"2049:15:181"},"nodeType":"YulExpressionStatement","src":"2049:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"1943:127:181"},{"body":{"nodeType":"YulBlock","src":"2107:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2124:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2131:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2136:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2127:3:181"},"nodeType":"YulFunctionCall","src":"2127:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2117:6:181"},"nodeType":"YulFunctionCall","src":"2117:31:181"},"nodeType":"YulExpressionStatement","src":"2117:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2164:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2167:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2157:6:181"},"nodeType":"YulFunctionCall","src":"2157:15:181"},"nodeType":"YulExpressionStatement","src":"2157:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2188:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2191:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2181:6:181"},"nodeType":"YulFunctionCall","src":"2181:15:181"},"nodeType":"YulExpressionStatement","src":"2181:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"2075:127:181"},{"body":{"nodeType":"YulBlock","src":"2256:79:181","statements":[{"nodeType":"YulAssignment","src":"2266:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2278:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"2281:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2274:3:181"},"nodeType":"YulFunctionCall","src":"2274:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"2266:4:181"}]},{"body":{"nodeType":"YulBlock","src":"2307:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"2309:16:181"},"nodeType":"YulFunctionCall","src":"2309:18:181"},"nodeType":"YulExpressionStatement","src":"2309:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"2298:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"2304:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2295:2:181"},"nodeType":"YulFunctionCall","src":"2295:11:181"},"nodeType":"YulIf","src":"2292:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"2238:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"2241:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"2247:4:181","type":""}],"src":"2207:128:181"},{"body":{"nodeType":"YulBlock","src":"2469:145:181","statements":[{"nodeType":"YulAssignment","src":"2479:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2491:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2502:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2487:3:181"},"nodeType":"YulFunctionCall","src":"2487:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2479:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2521:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2536:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2552:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2557:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2548:3:181"},"nodeType":"YulFunctionCall","src":"2548:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2561:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2544:3:181"},"nodeType":"YulFunctionCall","src":"2544:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2532:3:181"},"nodeType":"YulFunctionCall","src":"2532:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2514:6:181"},"nodeType":"YulFunctionCall","src":"2514:51:181"},"nodeType":"YulExpressionStatement","src":"2514:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2585:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2596:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2581:3:181"},"nodeType":"YulFunctionCall","src":"2581:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"2601:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2574:6:181"},"nodeType":"YulFunctionCall","src":"2574:34:181"},"nodeType":"YulExpressionStatement","src":"2574:34:181"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2430:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2441:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2449:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2460:4:181","type":""}],"src":"2340:274:181"},{"body":{"nodeType":"YulBlock","src":"2667:77:181","statements":[{"nodeType":"YulAssignment","src":"2677:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2688:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"2691:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2684:3:181"},"nodeType":"YulFunctionCall","src":"2684:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"2677:3:181"}]},{"body":{"nodeType":"YulBlock","src":"2716:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"2718:16:181"},"nodeType":"YulFunctionCall","src":"2718:18:181"},"nodeType":"YulExpressionStatement","src":"2718:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2708:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"2711:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2705:2:181"},"nodeType":"YulFunctionCall","src":"2705:10:181"},"nodeType":"YulIf","src":"2702:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"2650:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"2653:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"2659:3:181","type":""}],"src":"2619:125:181"},{"body":{"nodeType":"YulBlock","src":"2781:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2798:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2805:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2810:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2801:3:181"},"nodeType":"YulFunctionCall","src":"2801:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2791:6:181"},"nodeType":"YulFunctionCall","src":"2791:31:181"},"nodeType":"YulExpressionStatement","src":"2791:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2838:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2841:4:181","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2831:6:181"},"nodeType":"YulFunctionCall","src":"2831:15:181"},"nodeType":"YulExpressionStatement","src":"2831:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2862:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2865:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2855:6:181"},"nodeType":"YulFunctionCall","src":"2855:15:181"},"nodeType":"YulExpressionStatement","src":"2855:15:181"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"2749:127:181"},{"body":{"nodeType":"YulBlock","src":"2927:74:181","statements":[{"body":{"nodeType":"YulBlock","src":"2950:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x12","nodeType":"YulIdentifier","src":"2952:16:181"},"nodeType":"YulFunctionCall","src":"2952:18:181"},"nodeType":"YulExpressionStatement","src":"2952:18:181"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"2947:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2940:6:181"},"nodeType":"YulFunctionCall","src":"2940:9:181"},"nodeType":"YulIf","src":"2937:35:181"},{"nodeType":"YulAssignment","src":"2981:14:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2990:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"2993:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"2986:3:181"},"nodeType":"YulFunctionCall","src":"2986:9:181"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"2981:1:181"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"2912:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"2915:1:181","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"2921:1:181","type":""}],"src":"2881:120:181"},{"body":{"nodeType":"YulBlock","src":"3038:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3055:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3062:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"3067:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3058:3:181"},"nodeType":"YulFunctionCall","src":"3058:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3048:6:181"},"nodeType":"YulFunctionCall","src":"3048:31:181"},"nodeType":"YulExpressionStatement","src":"3048:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3095:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3098:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3088:6:181"},"nodeType":"YulFunctionCall","src":"3088:15:181"},"nodeType":"YulExpressionStatement","src":"3088:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3119:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3122:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3112:6:181"},"nodeType":"YulFunctionCall","src":"3112:15:181"},"nodeType":"YulExpressionStatement","src":"3112:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"3006:127:181"},{"body":{"nodeType":"YulBlock","src":"3176:74:181","statements":[{"body":{"nodeType":"YulBlock","src":"3199:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x12","nodeType":"YulIdentifier","src":"3201:16:181"},"nodeType":"YulFunctionCall","src":"3201:18:181"},"nodeType":"YulExpressionStatement","src":"3201:18:181"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"3196:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3189:6:181"},"nodeType":"YulFunctionCall","src":"3189:9:181"},"nodeType":"YulIf","src":"3186:35:181"},{"nodeType":"YulAssignment","src":"3230:14:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3239:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"3242:1:181"}],"functionName":{"name":"mod","nodeType":"YulIdentifier","src":"3235:3:181"},"nodeType":"YulFunctionCall","src":"3235:9:181"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"3230:1:181"}]}]},"name":"mod_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3161:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"3164:1:181","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"3170:1:181","type":""}],"src":"3138:112:181"},{"body":{"nodeType":"YulBlock","src":"3462:622:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3472:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3490:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3501:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3486:3:181"},"nodeType":"YulFunctionCall","src":"3486:18:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"3476:6:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3520:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3531:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3513:6:181"},"nodeType":"YulFunctionCall","src":"3513:21:181"},"nodeType":"YulExpressionStatement","src":"3513:21:181"},{"nodeType":"YulVariableDeclaration","src":"3543:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"3554:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"3547:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3569:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3589:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3583:5:181"},"nodeType":"YulFunctionCall","src":"3583:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3573:6:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"3612:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"3620:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3605:6:181"},"nodeType":"YulFunctionCall","src":"3605:22:181"},"nodeType":"YulExpressionStatement","src":"3605:22:181"},{"nodeType":"YulAssignment","src":"3636:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3647:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3658:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3643:3:181"},"nodeType":"YulFunctionCall","src":"3643:19:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"3636:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"3671:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3681:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3675:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3694:29:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3712:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3720:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3708:3:181"},"nodeType":"YulFunctionCall","src":"3708:15:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"3698:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3732:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3741:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"3736:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3800:146:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3821:3:181"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"3836:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3830:5:181"},"nodeType":"YulFunctionCall","src":"3830:13:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3853:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3858:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3849:3:181"},"nodeType":"YulFunctionCall","src":"3849:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3862:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3845:3:181"},"nodeType":"YulFunctionCall","src":"3845:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3826:3:181"},"nodeType":"YulFunctionCall","src":"3826:39:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3814:6:181"},"nodeType":"YulFunctionCall","src":"3814:52:181"},"nodeType":"YulExpressionStatement","src":"3814:52:181"},{"nodeType":"YulAssignment","src":"3879:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3890:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3895:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3886:3:181"},"nodeType":"YulFunctionCall","src":"3886:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"3879:3:181"}]},{"nodeType":"YulAssignment","src":"3911:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"3925:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3933:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3921:3:181"},"nodeType":"YulFunctionCall","src":"3921:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"3911:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3762:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"3765:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3759:2:181"},"nodeType":"YulFunctionCall","src":"3759:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3773:18:181","statements":[{"nodeType":"YulAssignment","src":"3775:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3784:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"3787:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3780:3:181"},"nodeType":"YulFunctionCall","src":"3780:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"3775:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"3755:3:181","statements":[]},"src":"3751:195:181"},{"nodeType":"YulAssignment","src":"3955:11:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"3963:3:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3955:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3986:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3997:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3982:3:181"},"nodeType":"YulFunctionCall","src":"3982:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"4002:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3975:6:181"},"nodeType":"YulFunctionCall","src":"3975:34:181"},"nodeType":"YulExpressionStatement","src":"3975:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4029:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4040:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4025:3:181"},"nodeType":"YulFunctionCall","src":"4025:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"4049:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4065:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4070:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4061:3:181"},"nodeType":"YulFunctionCall","src":"4061:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4074:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4057:3:181"},"nodeType":"YulFunctionCall","src":"4057:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4045:3:181"},"nodeType":"YulFunctionCall","src":"4045:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4018:6:181"},"nodeType":"YulFunctionCall","src":"4018:60:181"},"nodeType":"YulExpressionStatement","src":"4018:60:181"}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_uint256_t_address__to_t_array$_t_address_$dyn_memory_ptr_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3415:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3426:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3434:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3442:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3453:4:181","type":""}],"src":"3255:829:181"},{"body":{"nodeType":"YulBlock","src":"4218:119:181","statements":[{"nodeType":"YulAssignment","src":"4228:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4240:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4251:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4236:3:181"},"nodeType":"YulFunctionCall","src":"4236:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4228:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4270:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"4281:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4263:6:181"},"nodeType":"YulFunctionCall","src":"4263:25:181"},"nodeType":"YulExpressionStatement","src":"4263:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4308:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4319:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4304:3:181"},"nodeType":"YulFunctionCall","src":"4304:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"4324:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4297:6:181"},"nodeType":"YulFunctionCall","src":"4297:34:181"},"nodeType":"YulExpressionStatement","src":"4297:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4179:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4190:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4198:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4209:4:181","type":""}],"src":"4089:248:181"},{"body":{"nodeType":"YulBlock","src":"4469:136:181","statements":[{"nodeType":"YulAssignment","src":"4479:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4491:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4502:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4487:3:181"},"nodeType":"YulFunctionCall","src":"4487:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4479:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4521:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"4532:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4514:6:181"},"nodeType":"YulFunctionCall","src":"4514:25:181"},"nodeType":"YulExpressionStatement","src":"4514:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4559:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4570:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4555:3:181"},"nodeType":"YulFunctionCall","src":"4555:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"4579:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4587:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4575:3:181"},"nodeType":"YulFunctionCall","src":"4575:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4548:6:181"},"nodeType":"YulFunctionCall","src":"4548:51:181"},"nodeType":"YulExpressionStatement","src":"4548:51:181"}]},"name":"abi_encode_tuple_t_bytes32_t_uint32__to_t_bytes32_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4430:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4441:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4449:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4460:4:181","type":""}],"src":"4342:263:181"},{"body":{"nodeType":"YulBlock","src":"4793:269:181","statements":[{"nodeType":"YulAssignment","src":"4803:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4815:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4826:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4811:3:181"},"nodeType":"YulFunctionCall","src":"4811:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4803:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"4839:36:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4849:26:181","type":"","value":"0xffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4843:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4891:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4906:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4914:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4902:3:181"},"nodeType":"YulFunctionCall","src":"4902:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4884:6:181"},"nodeType":"YulFunctionCall","src":"4884:34:181"},"nodeType":"YulExpressionStatement","src":"4884:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4938:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4949:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4934:3:181"},"nodeType":"YulFunctionCall","src":"4934:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"4958:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4966:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4954:3:181"},"nodeType":"YulFunctionCall","src":"4954:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4927:6:181"},"nodeType":"YulFunctionCall","src":"4927:43:181"},"nodeType":"YulExpressionStatement","src":"4927:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4990:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5001:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4986:3:181"},"nodeType":"YulFunctionCall","src":"4986:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"5006:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4979:6:181"},"nodeType":"YulFunctionCall","src":"4979:34:181"},"nodeType":"YulExpressionStatement","src":"4979:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5033:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5044:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5029:3:181"},"nodeType":"YulFunctionCall","src":"5029:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"5049:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5022:6:181"},"nodeType":"YulFunctionCall","src":"5022:34:181"},"nodeType":"YulExpressionStatement","src":"5022:34:181"}]},"name":"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4738:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4749:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4757:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4765:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4773:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4784:4:181","type":""}],"src":"4610:452:181"},{"body":{"nodeType":"YulBlock","src":"5241:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5258:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5269:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5251:6:181"},"nodeType":"YulFunctionCall","src":"5251:21:181"},"nodeType":"YulExpressionStatement","src":"5251:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5292:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5303:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5288:3:181"},"nodeType":"YulFunctionCall","src":"5288:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5308:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5281:6:181"},"nodeType":"YulFunctionCall","src":"5281:30:181"},"nodeType":"YulExpressionStatement","src":"5281:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5331:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5342:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5327:3:181"},"nodeType":"YulFunctionCall","src":"5327:18:181"},{"hexValue":"217472756e6361746564","kind":"string","nodeType":"YulLiteral","src":"5347:12:181","type":"","value":"!truncated"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5320:6:181"},"nodeType":"YulFunctionCall","src":"5320:40:181"},"nodeType":"YulExpressionStatement","src":"5320:40:181"},{"nodeType":"YulAssignment","src":"5369:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5381:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5392:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5377:3:181"},"nodeType":"YulFunctionCall","src":"5377:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5369:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5218:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5232:4:181","type":""}],"src":"5067:334:181"},{"body":{"nodeType":"YulBlock","src":"5453:104:181","statements":[{"nodeType":"YulAssignment","src":"5463:39:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5479:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"5482:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5475:3:181"},"nodeType":"YulFunctionCall","src":"5475:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"5493:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"5496:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5489:3:181"},"nodeType":"YulFunctionCall","src":"5489:12:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5471:3:181"},"nodeType":"YulFunctionCall","src":"5471:31:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"5463:4:181"}]},{"body":{"nodeType":"YulBlock","src":"5529:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"5531:16:181"},"nodeType":"YulFunctionCall","src":"5531:18:181"},"nodeType":"YulExpressionStatement","src":"5531:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"5517:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"5523:4:181","type":"","value":"0xff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5514:2:181"},"nodeType":"YulFunctionCall","src":"5514:14:181"},"nodeType":"YulIf","src":"5511:40:181"}]},"name":"checked_sub_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"5435:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"5438:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"5444:4:181","type":""}],"src":"5406:151:181"},{"body":{"nodeType":"YulBlock","src":"5612:175:181","statements":[{"nodeType":"YulVariableDeclaration","src":"5622:50:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5649:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"5652:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5645:3:181"},"nodeType":"YulFunctionCall","src":"5645:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"5663:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"5666:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5659:3:181"},"nodeType":"YulFunctionCall","src":"5659:12:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"5641:3:181"},"nodeType":"YulFunctionCall","src":"5641:31:181"},"variables":[{"name":"product_raw","nodeType":"YulTypedName","src":"5626:11:181","type":""}]},{"nodeType":"YulAssignment","src":"5681:33:181","value":{"arguments":[{"name":"product_raw","nodeType":"YulIdentifier","src":"5696:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5709:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5692:3:181"},"nodeType":"YulFunctionCall","src":"5692:22:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"5681:7:181"}]},{"body":{"nodeType":"YulBlock","src":"5759:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"5761:16:181"},"nodeType":"YulFunctionCall","src":"5761:18:181"},"nodeType":"YulExpressionStatement","src":"5761:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"5736:7:181"},{"name":"product_raw","nodeType":"YulIdentifier","src":"5745:11:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5733:2:181"},"nodeType":"YulFunctionCall","src":"5733:24:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5726:6:181"},"nodeType":"YulFunctionCall","src":"5726:32:181"},"nodeType":"YulIf","src":"5723:58:181"}]},"name":"checked_mul_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"5591:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"5594:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"5600:7:181","type":""}],"src":"5562:225:181"}]},"contents":"{\n    { }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_uint32t_uint32t_bytes32t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n        value1 := abi_decode_uint32(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), 0)\n        value3 := memPtr\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function mod_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := mod(x, y)\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_uint256_t_address__to_t_array$_t_address_$dyn_memory_ptr_t_uint256_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 96)\n        mstore(headStart, 96)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 128)\n        let _1 := 0x20\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n        mstore(add(headStart, _1), value1)\n        mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint32__to_t_bytes32_t_uint32__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffff))\n    }\n    function abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"!truncated\")\n        tail := add(headStart, 96)\n    }\n    function checked_sub_t_uint8(x, y) -> diff\n    {\n        diff := sub(and(x, 0xff), and(y, 0xff))\n        if gt(diff, 0xff) { panic_error_0x11() }\n    }\n    function checked_mul_t_uint8(x, y) -> product\n    {\n        let product_raw := mul(and(x, 0xff), and(y, 0xff))\n        product := and(product_raw, 0xff)\n        if iszero(eq(product, product_raw)) { panic_error_0x11() }\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061002b5760003560e01c8063ab2dc3f514610030575b600080fd5b61004361003e366004610e33565b610045565b005b61004e3361013c565b61006b5760405163761c560f60e11b815260040160405180910390fd5b838261007782826101b1565b610094576040516346b4a0e960e01b815260040160405180910390fd5b60006100ae6100a385836101db565b62ffffff19166101ff565b905060006100c162ffffff198316610218565b905060006100d462ffffff19841661024d565b90506100e562ffffff1982166102a5565b61010257604051632af392f960e11b815260040160405180910390fd5b6000806101118b8b86866102b2565b9150915061012f6101278462ffffff1916610500565b8c8484610515565b5050505050505050505050565b602054604051635190bc5360e01b81526001600160a01b0383811660048301526000921690635190bc5390602401602060405180830381865afa158015610187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ab9190610f0f565b92915050565b63ffffffff82166000908152600f6020526040812054821480156101d457508115155b9392505050565b8151600090602084016101f664ffffffffff85168284610827565b95945050505050565b60006101ab61020d83610864565b62ffffff1916610896565b600081600261022f815b62ffffff198416906108c3565b5061024562ffffff198516600060246001610914565b949350505050565b600081600261025b81610222565b5060006102766024601887901c6001600160601b0316610f5d565b9050600061028386610984565b60ff16905061029b62ffffff19871660248484610914565b9695505050505050565b60006101ab826003610999565b600080806102c562ffffff1986166109f8565b905060006102d862ffffff198716610a1a565b905060006102eb62ffffff198716610a3c565b9050801580156102ff575063ffffffff8216155b8015610309575082155b1561037f5730600067ffffffff0000000060208c901b1663ffffffff8b161760408051600081526020810186905267ffffffffffffffff92909216917f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb910160405180910390a4600080945094505050506104f7565b600061039561038e8585610a51565b8585610a93565b90508160000361041857306001600160a01b03821667ffffffff0000000060208d901b1663ffffffff8c161760408051600081526020810187905267ffffffffffffffff92909216917f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb910160405180910390a49450600093506104f792505050565b61042181610aa2565b610486576040516340c10f1960e01b8152306004820152602481018390526001600160a01b038216906340c10f1990604401600060405180830381600087803b15801561046d57600080fd5b505af1158015610481573d6000803e3d6000fd5b505050505b306001600160a01b03821667ffffffff0000000060208d901b1663ffffffff8c161760408051600081526020810187905267ffffffffffffffff92909216917f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb910160405180910390a49450925050505b94509492505050565b60006101ab62ffffff19831660216020610aaf565b60008481526008602052604081205460ff169081600381111561053a5761053a610f31565b1415801561055a5750600281600381111561055757610557610f31565b14155b1561057857604051638f6bc06f60e01b815260040160405180910390fd5b600081600381111561058c5761058c610f31565b1461059857600361059b565b60015b6000868152600860205260409020805460ff191660018360038111156105c3576105c3610f31565b021790555060008581526009602090815260408083208054825181850281018501909352808352919290919083018282801561062857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161060a575b5050506000898152601e6020908152604080832054601d90925282205494955090936106579350909150610f70565b8251909150811580159061066c575080600114155b1561068a5760405163d3bd901560e01b815260040160405180910390fd5b80156107d057600061069c8287610f99565b905060005b6106ac600184610f5d565b81101561073457816000600a0160008784815181106106cd576106cd610fad565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546107279190610f70565b90915550506001016106a1565b5060006107418388610fc3565b61074b9083610f70565b905080600a60008761075e600188610f5d565b8151811061076e5761076e610fad565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546107c89190610f70565b909155505050505b856001600160a01b03168763ffffffff16897f30bf44531c04b96173a40012c90db840a147cf7d50a3e160f5227f1af2faa3a086893360405161081593929190610fd7565b60405180910390a45050505050505050565b6000806108348385610f70565b9050604051811115610844575060005b806000036108595762ffffff199150506101d4565b6101f6858585610bba565b600061086f82610c31565b1561088c576301000000600160d81b038216600160d91b176101ab565b62ffffff196101ab565b60006108a182610c54565b156108bf5760405163252e0d8360e01b815260040160405180910390fd5b5090565b60006108cf8383610c90565b61090d576108dd8360d81c90565b60405163d32c1d3760e01b815264ffffffffff918216600482015290831660248201526044015b60405180910390fd5b5090919050565b60008061092a8660781c6001600160601b031690565b6001600160601b0316905061093e86610cb3565b846109498784610f70565b6109539190610f70565b11156109665762ffffff19915050610245565b6109708582610f70565b905061029b8364ffffffffff168286610827565b60006101ab62ffffff19831660246001610cec565b60008160038111156109ad576109ad610f31565b60ff166109b984610d1c565b60ff161480156101d457508160038111156109d6576109d6610f31565b6109df84610d30565b60038111156109f0576109f0610f31565b149392505050565b6000816001610a0681610222565b5061024562ffffff19851660046020610aaf565b6000816001610a2881610222565b5061024562ffffff19851660006004610cec565b60006101ab62ffffff19831660016020610cec565b60008282604051602001610a7592919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b60006102458484846000610d4b565b60006101ab826000610d84565b60008160ff16600003610ac4575060006101d4565b610ad78460181c6001600160601b031690565b6001600160601b0316610aed60ff841685610f70565b1115610b5557610b068460781c6001600160601b031690565b610b198560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610904565b60208260ff161115610b7a5760405163045df3f960e01b815260040160405180910390fd5b600882026000610b938660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b60006060601883856001600160601b03821682148015610be2575086816001600160601b0316145b610c1b5760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610904565b96831b90961790911b90941790931b9392505050565b6000601882901c6001600160601b0316610c4d60416024610f70565b1492915050565b6000610c608260d81c90565b64ffffffffff1664ffffffffff03610c7a57506001919050565b6000610c8583610cb3565b604051109392505050565b60008164ffffffffff16610ca48460d81c90565b64ffffffffff16149392505050565b6000610cc88260181c6001600160601b031690565b610cdb8360781c6001600160601b031690565b016001600160601b03169050919050565b6000610cf982602061103b565b610d04906008611054565b60ff16610d12858585610aaf565b901c949350505050565b60006101ab62ffffff198316826001610cec565b600060d882901c60ff1660038111156101ab576101ab610f31565b600481015460009063ffffffff90811690841603610d6a575082610245565b610d7385610dc3565b546001600160a01b03169050610245565b6001600160a01b038216600090815260068201602052604081205463ffffffff1615610db2575060006101ab565b50506001600160a01b03163b151590565b6000818152600760205260408120600180820154839291600160a01b90910460ff1610156101d45760405163618cca3f60e11b815260040160405180910390fd5b803563ffffffff81168114610e1857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215610e4957600080fd5b610e5285610e04565b9350610e6060208601610e04565b925060408501359150606085013567ffffffffffffffff80821115610e8457600080fd5b818701915087601f830112610e9857600080fd5b813581811115610eaa57610eaa610e1d565b604051601f8201601f19908116603f01168101908382118183101715610ed257610ed2610e1d565b816040528281528a6020848701011115610eeb57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600060208284031215610f2157600080fd5b815180151581146101d457600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156101ab576101ab610f47565b808201808211156101ab576101ab610f47565b634e487b7160e01b600052601260045260246000fd5b600082610fa857610fa8610f83565b500490565b634e487b7160e01b600052603260045260246000fd5b600082610fd257610fd2610f83565b500690565b606080825284519082018190526000906020906080840190828801845b828110156110195781516001600160a01b031684529284019290840190600101610ff4565b50505090830194909452506001600160a01b0391909116604090910152919050565b60ff82811682821603908111156101ab576101ab610f47565b60ff818116838216029081169081811461107057611070610f47565b509291505056fea2646970667358221220329ea0b47a7a6608e0cd1630a7d58f709d39644e057e6ca7c7e75c468b82148c64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAB2DC3F5 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x3E CALLDATASIZE PUSH1 0x4 PUSH2 0xE33 JUMP JUMPDEST PUSH2 0x45 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x4E CALLER PUSH2 0x13C JUMP JUMPDEST PUSH2 0x6B JUMPI PUSH1 0x40 MLOAD PUSH4 0x761C560F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 DUP3 PUSH2 0x77 DUP3 DUP3 PUSH2 0x1B1 JUMP JUMPDEST PUSH2 0x94 JUMPI PUSH1 0x40 MLOAD PUSH4 0x46B4A0E9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAE PUSH2 0xA3 DUP6 DUP4 PUSH2 0x1DB JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND PUSH2 0x1FF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xC1 PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x218 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xD4 PUSH3 0xFFFFFF NOT DUP5 AND PUSH2 0x24D JUMP JUMPDEST SWAP1 POP PUSH2 0xE5 PUSH3 0xFFFFFF NOT DUP3 AND PUSH2 0x2A5 JUMP JUMPDEST PUSH2 0x102 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2AF392F9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x111 DUP12 DUP12 DUP7 DUP7 PUSH2 0x2B2 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x12F PUSH2 0x127 DUP5 PUSH3 0xFFFFFF NOT AND PUSH2 0x500 JUMP JUMPDEST DUP13 DUP5 DUP5 PUSH2 0x515 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 SLOAD PUSH1 0x40 MLOAD PUSH4 0x5190BC53 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0x5190BC53 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x187 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1AB SWAP2 SWAP1 PUSH2 0xF0F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 EQ DUP1 ISZERO PUSH2 0x1D4 JUMPI POP DUP2 ISZERO ISZERO JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0x1F6 PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x827 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AB PUSH2 0x20D DUP4 PUSH2 0x864 JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND PUSH2 0x896 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 PUSH2 0x22F DUP2 JUMPDEST PUSH3 0xFFFFFF NOT DUP5 AND SWAP1 PUSH2 0x8C3 JUMP JUMPDEST POP PUSH2 0x245 PUSH3 0xFFFFFF NOT DUP6 AND PUSH1 0x0 PUSH1 0x24 PUSH1 0x1 PUSH2 0x914 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 PUSH2 0x25B DUP2 PUSH2 0x222 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x276 PUSH1 0x24 PUSH1 0x18 DUP8 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0xF5D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x283 DUP7 PUSH2 0x984 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH2 0x29B PUSH3 0xFFFFFF NOT DUP8 AND PUSH1 0x24 DUP5 DUP5 PUSH2 0x914 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AB DUP3 PUSH1 0x3 PUSH2 0x999 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x2C5 PUSH3 0xFFFFFF NOT DUP7 AND PUSH2 0x9F8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2D8 PUSH3 0xFFFFFF NOT DUP8 AND PUSH2 0xA1A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2EB PUSH3 0xFFFFFF NOT DUP8 AND PUSH2 0xA3C JUMP JUMPDEST SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x2FF JUMPI POP PUSH4 0xFFFFFFFF DUP3 AND ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x309 JUMPI POP DUP3 ISZERO JUMPDEST ISZERO PUSH2 0x37F JUMPI ADDRESS PUSH1 0x0 PUSH8 0xFFFFFFFF00000000 PUSH1 0x20 DUP13 SWAP1 SHL AND PUSH4 0xFFFFFFFF DUP12 AND OR PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH32 0x9F9A97DB84F39202CA3B409B63F7CCF7D3FD810E176573C7483088B6F181BBBB SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x0 DUP1 SWAP5 POP SWAP5 POP POP POP POP PUSH2 0x4F7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x395 PUSH2 0x38E DUP6 DUP6 PUSH2 0xA51 JUMP JUMPDEST DUP6 DUP6 PUSH2 0xA93 JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x0 SUB PUSH2 0x418 JUMPI ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH8 0xFFFFFFFF00000000 PUSH1 0x20 DUP14 SWAP1 SHL AND PUSH4 0xFFFFFFFF DUP13 AND OR PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH32 0x9F9A97DB84F39202CA3B409B63F7CCF7D3FD810E176573C7483088B6F181BBBB SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP5 POP PUSH1 0x0 SWAP4 POP PUSH2 0x4F7 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x421 DUP2 PUSH2 0xAA2 JUMP JUMPDEST PUSH2 0x486 JUMPI PUSH1 0x40 MLOAD PUSH4 0x40C10F19 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x40C10F19 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x46D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x481 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH8 0xFFFFFFFF00000000 PUSH1 0x20 DUP14 SWAP1 SHL AND PUSH4 0xFFFFFFFF DUP13 AND OR PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 PUSH32 0x9F9A97DB84F39202CA3B409B63F7CCF7D3FD810E176573C7483088B6F181BBBB SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP5 POP SWAP3 POP POP POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AB PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x21 PUSH1 0x20 PUSH2 0xAAF JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x53A JUMPI PUSH2 0x53A PUSH2 0xF31 JUMP JUMPDEST EQ ISZERO DUP1 ISZERO PUSH2 0x55A JUMPI POP PUSH1 0x2 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x557 JUMPI PUSH2 0x557 PUSH2 0xF31 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x578 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8F6BC06F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x58C JUMPI PUSH2 0x58C PUSH2 0xF31 JUMP JUMPDEST EQ PUSH2 0x598 JUMPI PUSH1 0x3 PUSH2 0x59B JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x5C3 JUMPI PUSH2 0x5C3 PUSH2 0xF31 JUMP JUMPDEST MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x628 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x60A JUMPI JUMPDEST POP POP POP PUSH1 0x0 DUP10 DUP2 MSTORE PUSH1 0x1E PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x1D SWAP1 SWAP3 MSTORE DUP3 KECCAK256 SLOAD SWAP5 SWAP6 POP SWAP1 SWAP4 PUSH2 0x657 SWAP4 POP SWAP1 SWAP2 POP PUSH2 0xF70 JUMP JUMPDEST DUP3 MLOAD SWAP1 SWAP2 POP DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x66C JUMPI POP DUP1 PUSH1 0x1 EQ ISZERO JUMPDEST ISZERO PUSH2 0x68A JUMPI PUSH1 0x40 MLOAD PUSH4 0xD3BD9015 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x7D0 JUMPI PUSH1 0x0 PUSH2 0x69C DUP3 DUP8 PUSH2 0xF99 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH2 0x6AC PUSH1 0x1 DUP5 PUSH2 0xF5D JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x734 JUMPI DUP2 PUSH1 0x0 PUSH1 0xA ADD PUSH1 0x0 DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x6CD JUMPI PUSH2 0x6CD PUSH2 0xFAD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x727 SWAP2 SWAP1 PUSH2 0xF70 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 ADD PUSH2 0x6A1 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x741 DUP4 DUP9 PUSH2 0xFC3 JUMP JUMPDEST PUSH2 0x74B SWAP1 DUP4 PUSH2 0xF70 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0xA PUSH1 0x0 DUP8 PUSH2 0x75E PUSH1 0x1 DUP9 PUSH2 0xF5D JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x76E JUMPI PUSH2 0x76E PUSH2 0xFAD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x7C8 SWAP2 SWAP1 PUSH2 0xF70 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 PUSH4 0xFFFFFFFF AND DUP10 PUSH32 0x30BF44531C04B96173A40012C90DB840A147CF7D50A3E160F5227F1AF2FAA3A0 DUP7 DUP10 CALLER PUSH1 0x40 MLOAD PUSH2 0x815 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xFD7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x834 DUP4 DUP6 PUSH2 0xF70 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x844 JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x859 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x1D4 JUMP JUMPDEST PUSH2 0x1F6 DUP6 DUP6 DUP6 PUSH2 0xBBA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x86F DUP3 PUSH2 0xC31 JUMP JUMPDEST ISZERO PUSH2 0x88C JUMPI PUSH4 0x1000000 PUSH1 0x1 PUSH1 0xD8 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0xD9 SHL OR PUSH2 0x1AB JUMP JUMPDEST PUSH3 0xFFFFFF NOT PUSH2 0x1AB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8A1 DUP3 PUSH2 0xC54 JUMP JUMPDEST ISZERO PUSH2 0x8BF JUMPI PUSH1 0x40 MLOAD PUSH4 0x252E0D83 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8CF DUP4 DUP4 PUSH2 0xC90 JUMP JUMPDEST PUSH2 0x90D JUMPI PUSH2 0x8DD DUP4 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD32C1D37 PUSH1 0xE0 SHL DUP2 MSTORE PUSH5 0xFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x92A DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH2 0x93E DUP7 PUSH2 0xCB3 JUMP JUMPDEST DUP5 PUSH2 0x949 DUP8 DUP5 PUSH2 0xF70 JUMP JUMPDEST PUSH2 0x953 SWAP2 SWAP1 PUSH2 0xF70 JUMP JUMPDEST GT ISZERO PUSH2 0x966 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x245 JUMP JUMPDEST PUSH2 0x970 DUP6 DUP3 PUSH2 0xF70 JUMP JUMPDEST SWAP1 POP PUSH2 0x29B DUP4 PUSH5 0xFFFFFFFFFF AND DUP3 DUP7 PUSH2 0x827 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AB PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x24 PUSH1 0x1 PUSH2 0xCEC JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x9AD JUMPI PUSH2 0x9AD PUSH2 0xF31 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x9B9 DUP5 PUSH2 0xD1C JUMP JUMPDEST PUSH1 0xFF AND EQ DUP1 ISZERO PUSH2 0x1D4 JUMPI POP DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x9D6 JUMPI PUSH2 0x9D6 PUSH2 0xF31 JUMP JUMPDEST PUSH2 0x9DF DUP5 PUSH2 0xD30 JUMP JUMPDEST PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x9F0 JUMPI PUSH2 0x9F0 PUSH2 0xF31 JUMP JUMPDEST EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH2 0xA06 DUP2 PUSH2 0x222 JUMP JUMPDEST POP PUSH2 0x245 PUSH3 0xFFFFFF NOT DUP6 AND PUSH1 0x4 PUSH1 0x20 PUSH2 0xAAF JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH2 0xA28 DUP2 PUSH2 0x222 JUMP JUMPDEST POP PUSH2 0x245 PUSH3 0xFFFFFF NOT DUP6 AND PUSH1 0x0 PUSH1 0x4 PUSH2 0xCEC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AB PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x1 PUSH1 0x20 PUSH2 0xCEC JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xA75 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH4 0xFFFFFFFF AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x245 DUP5 DUP5 DUP5 PUSH1 0x0 PUSH2 0xD4B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AB DUP3 PUSH1 0x0 PUSH2 0xD84 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0xAC4 JUMPI POP PUSH1 0x0 PUSH2 0x1D4 JUMP JUMPDEST PUSH2 0xAD7 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0xAED PUSH1 0xFF DUP5 AND DUP6 PUSH2 0xF70 JUMP JUMPDEST GT ISZERO PUSH2 0xB55 JUMPI PUSH2 0xB06 DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xB19 DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x904 JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0xB7A JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0xB93 DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT DUP5 ADD SAR SWAP2 SWAP1 SWAP6 ADD MLOAD AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0xBE2 JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0xC1B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x904 JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x18 DUP3 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0xC4D PUSH1 0x41 PUSH1 0x24 PUSH2 0xF70 JUMP JUMPDEST EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC60 DUP3 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH5 0xFFFFFFFFFF SUB PUSH2 0xC7A JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC85 DUP4 PUSH2 0xCB3 JUMP JUMPDEST PUSH1 0x40 MLOAD LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH5 0xFFFFFFFFFF AND PUSH2 0xCA4 DUP5 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC8 DUP3 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xCDB DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCF9 DUP3 PUSH1 0x20 PUSH2 0x103B JUMP JUMPDEST PUSH2 0xD04 SWAP1 PUSH1 0x8 PUSH2 0x1054 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0xD12 DUP6 DUP6 DUP6 PUSH2 0xAAF JUMP JUMPDEST SWAP1 SHR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AB PUSH3 0xFFFFFF NOT DUP4 AND DUP3 PUSH1 0x1 PUSH2 0xCEC JUMP JUMPDEST PUSH1 0x0 PUSH1 0xD8 DUP3 SWAP1 SHR PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1AB JUMPI PUSH2 0x1AB PUSH2 0xF31 JUMP JUMPDEST PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP5 AND SUB PUSH2 0xD6A JUMPI POP DUP3 PUSH2 0x245 JUMP JUMPDEST PUSH2 0xD73 DUP6 PUSH2 0xDC3 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH2 0x245 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND ISZERO PUSH2 0xDB2 JUMPI POP PUSH1 0x0 PUSH2 0x1AB JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 DUP1 DUP3 ADD SLOAD DUP4 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0xFF AND LT ISZERO PUSH2 0x1D4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x618CCA3F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xE49 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE52 DUP6 PUSH2 0xE04 JUMP JUMPDEST SWAP4 POP PUSH2 0xE60 PUSH1 0x20 DUP7 ADD PUSH2 0xE04 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xE84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xE98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xEAA JUMPI PUSH2 0xEAA PUSH2 0xE1D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xED2 JUMPI PUSH2 0xED2 PUSH2 0xE1D JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP11 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0xEEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x1AB JUMPI PUSH2 0x1AB PUSH2 0xF47 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x1AB JUMPI PUSH2 0x1AB PUSH2 0xF47 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xFA8 JUMPI PUSH2 0xFA8 PUSH2 0xF83 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xFD2 JUMPI PUSH2 0xFD2 PUSH2 0xF83 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP5 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x80 DUP5 ADD SWAP1 DUP3 DUP9 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1019 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xFF4 JUMP JUMPDEST POP POP POP SWAP1 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x40 SWAP1 SWAP2 ADD MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x1AB JUMPI PUSH2 0x1AB PUSH2 0xF47 JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND MUL SWAP1 DUP2 AND SWAP1 DUP2 DUP2 EQ PUSH2 0x1070 JUMPI PUSH2 0x1070 PUSH2 0xF47 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ORIGIN SWAP15 LOG0 0xB4 PUSH27 0x7A6608E0CD1630A7D58F709D39644E057E6CA7C7E75C468B82148C PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"883:10474:72:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3962:874;;;;;;:::i;:::-;;:::i;:::-;;;3160:22;3171:10;3160;:22::i;:::-;3155:87;;3199:36;;-1:-1:-1;;;3199:36:72;;;;;;;;;;;3155:87;4108:7:::1;4117;3524:34;3541:7;3550;3524:16;:34::i;:::-;3519:103;;3575:40;;-1:-1:-1::0;;;3575:40:72::1;;;;;;;;;;;3519:103;4184:12:::2;4199:31;:15;:8:::0;4184:12;4199::::2;:15::i;:::-;-1:-1:-1::0;;4199:29:72::2;;:31::i;:::-;4184:46:::0;-1:-1:-1;4236:16:72::2;4255:14;-1:-1:-1::0;;4255:12:72;::::2;;:14::i;:::-;4236:33:::0;-1:-1:-1;4275:15:72::2;4293:13;-1:-1:-1::0;;4293:11:72;::::2;;:13::i;:::-;4275:31:::0;-1:-1:-1;4372:20:72::2;-1:-1:-1::0;;4372:18:72;::::2;;:20::i;:::-;4367:81;;4409:32;;-1:-1:-1::0;;;4409:32:72::2;;;;;;;;;;;4367:81;4651:14;4667:15:::0;4686:49:::2;4700:7;4709:6;4717:8;4727:7;4686:13;:49::i;:::-;4650:85;;;;4773:58;4784:20;:7;:18;;;;:20::i;:::-;4806:7;4815:6;4823:7;4773:10;:58::i;:::-;4126:710;;;;;3247:1:::1;;3962:874:::0;;;;:::o;7927:146::-;8016:23;;:52;;-1:-1:-1;;;8016:52:72;;-1:-1:-1;;;;;1617:32:181;;;8016:52:72;;;1599:51:181;7997:4:72;;8016:23;;:33;;1572:18:181;;8016:52:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8009:59;7927:146;-1:-1:-1;;7927:146:72:o;8323:175::-;8429:18;;;8410:4;8429:18;;;:9;:18;;;;;;:34;;:64;;;;-1:-1:-1;8467:26:72;;;8429:64;8422:71;8323:175;-1:-1:-1;;;8323:175:72:o;10748:325:174:-;10848:10;;10818:7;;10975:4;10966:14;;11042:26;;;;10966:14;10848:10;11042:5;:26::i;:::-;11035:33;10748:325;-1:-1:-1;;;;;10748:325:174:o;8047:121:103:-;8108:7;8130:33;:19;8143:5;8130:12;:19::i;:::-;-1:-1:-1;;8130:31:103;;:33::i;7013:175::-;7107:7;7073:8;7083:13;1948:28;7083:13;1965:10;-1:-1:-1;;1948:16:103;;;;:28::i;:::-;-1:-1:-1;7129:54:103::1;-1:-1:-1::0;;7129:14:103;::::1;7144:1;1539:2;7168:13;7129:14;:54::i;:::-;7122:61:::0;7013:175;-1:-1:-1;;;;7013:175:103:o;7315:269::-;7408:7;7374:8;7384:13;1948:28;7384:13;1965:10;;1948:28;-1:-1:-1;7423:18:103::1;7444:29;1539:2;13008::174::0;13004:16;;;-1:-1:-1;;;;;13000:28:174;7444:29:103::1;:::i;:::-;7423:50;;7479:12;7501:17;7509:8;7501:7;:17::i;:::-;7494:25;;::::0;-1:-1:-1;7532:47:103::1;-1:-1:-1::0;;7532:14:103;::::1;1539:2;7561:10:::0;7494:25;7532:14:::1;:47::i;:::-;7525:54:::0;7315:269;-1:-1:-1;;;;;;7315:269:103:o;3840:115::-;3900:4;3919:31;3926:7;3935:14;3919:6;:31::i;9231:2124:72:-;9358:7;;;9405:13;-1:-1:-1;;9405:11:72;;;:13::i;:::-;9382:36;-1:-1:-1;9424:23:72;9450:17;-1:-1:-1;;9450:15:72;;;:17::i;:::-;9424:43;-1:-1:-1;9499:15:72;9517:14;-1:-1:-1;;9517:12:72;;;:14::i;:::-;9499:32;-1:-1:-1;9772:12:72;;:37;;;;-1:-1:-1;9788:21:72;;;;9772:37;:67;;;;-1:-1:-1;9813:26:72;;9772:67;9768:307;;;10011:4;9999:1;5563:21:68;5582:2;5563:21;;;;5562:32;;;;9949:89:72;;;10026:1;2514:51:181;;2596:2;2581:18;;2574:34;;;9949:89:72;;;;;;;;2487:18:181;9949:89:72;;;;;;;10062:1;10066;10046:22;;;;;;;;;9768:307;10148:14;10165:137;10187:65;10221:12;10235:16;10187:33;:65::i;:::-;10260:12;10280:16;10165:14;:137::i;:::-;10148:154;;10313:7;10324:1;10313:12;10309:244;;10493:4;-1:-1:-1;;;;;10435:85:72;;5563:21:68;5582:2;5563:21;;;;5562:32;;;;10435:85:72;;;10508:1;2514:51:181;;2596:2;2581:18;;2574:34;;;10435:85:72;;;;;;;;2487:18:181;10435:85:72;;;;;;;10536:6;-1:-1:-1;10544:1:72;;-1:-1:-1;10528:18:72;;-1:-1:-1;;;10528:18:72;10309:244;10619:22;10634:6;10619:14;:22::i;:::-;10614:282;;10840:49;;-1:-1:-1;;;10840:49:72;;10874:4;10840:49;;;2514:51:181;2581:18;;;2574:34;;;-1:-1:-1;;;;;10840:25:72;;;;;2487:18:181;;10840:49:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10614:282;11293:4;-1:-1:-1;;;;;11235:85:72;;5563:21:68;5582:2;5563:21;;;;5562:32;;;;11235:85:72;;;11308:1;2514:51:181;;2596:2;2581:18;;2574:34;;;11235:85:72;;;;;;;;2487:18:181;11235:85:72;;;;;;;11334:6;-1:-1:-1;11342:7:72;-1:-1:-1;;;9231:2124:72;;;;;;;;:::o;6706:187:103:-;6774:7;6859:29;-1:-1:-1;;6859:21:103;;6881:2;6885;6859:21;:29::i;5338:2408:72:-;5707:32;5742:29;;;:16;:29;;;;;;;;;5781:6;:40;;;;;;;;:::i;:::-;;;:88;;;;-1:-1:-1;5835:34:72;5825:6;:44;;;;;;;;:::i;:::-;;;5781:88;5777:157;;;5886:41;;-1:-1:-1;;;5886:41:72;;;;;;;;;;;5777:157;6022:30;6012:6;:40;;;;;;;;:::i;:::-;;:129;;6106:35;6012:129;;;6061:36;6012:129;5980:1;:29;;;:16;:29;;;;;:161;;-1:-1:-1;;5980:161:72;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;6504:24:72;6531:30;;;:17;:30;;;;;;;;6504:57;;;;;;;;;;;;;;;;;;;6531:30;;6504:57;;;6531:30;6504:57;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6504:57:72;;;;;;;;;;;;;;;;-1:-1:-1;;;6807:28:72;6866;;;:15;:28;;;;;;;;;6838:12;:25;;;;;;6504:57;;-1:-1:-1;6807:28:72;;6838:56;;-1:-1:-1;6866:28:72;;-1:-1:-1;6838:56:72;:::i;:::-;6919:14;;6807:87;;-1:-1:-1;7005:25:72;;;;;:41;;;7034:7;7045:1;7034:12;;7005:41;7001:107;;;7063:38;;-1:-1:-1;;;7063:38:72;;;;;;;;;;;7001:107;7118:12;;7114:546;;7224:20;7247:17;7257:7;7247;:17;:::i;:::-;7224:40;;7277:9;7272:151;7292:11;7302:1;7292:7;:11;:::i;:::-;7288:1;:15;7272:151;;;7357:12;7317:1;:16;;:28;7334:7;7342:1;7334:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;7317:28:72;-1:-1:-1;;;;;7317:28:72;;;;;;;;;;;;:36;7346:6;-1:-1:-1;;;;;7317:36:72;-1:-1:-1;;;;;7317:36:72;;;;;;;;;;;;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;7401:3:72;;7272:151;;;-1:-1:-1;7536:15:72;7570:17;7580:7;7570;:17;:::i;:::-;7554:34;;:12;:34;:::i;:::-;7536:52;-1:-1:-1;7536:52:72;7596:16;:1;7613:7;7621:11;7631:1;7621:7;:11;:::i;:::-;7613:20;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;7596:38:72;-1:-1:-1;;;;;7596:38:72;;;;;;;;;;;;:46;7635:6;-1:-1:-1;;;;;7596:46:72;-1:-1:-1;;;;;7596:46:72;;;;;;;;;;;;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;7114:546:72;7704:6;-1:-1:-1;;;;;7671:70:72;7695:7;7671:70;;7682:11;7671:70;7712:7;7721;7730:10;7671:70;;;;;;;;:::i;:::-;;;;;;;;5457:2289;;;;5338:2408;;;;:::o;9979:390:174:-;10076:15;;10114:11;10121:4;10114;:11;:::i;:::-;10099:26;;10224:4;10218:11;10212:4;10209:21;10206:52;;;-1:-1:-1;10249:1:174;10206:52;10273:4;10281:1;10273:9;10269:41;;-1:-1:-1;;10292:11:174;;;;;10269:41;10325:39;10346:5;10353:4;10359;10325:20;:39::i;7705:214:103:-;7768:7;7787:30;7808:8;7787:20;:30::i;:::-;7783:96;;;-1:-1:-1;;;;;8208:31:174;;-1:-1:-1;;;8205:69:174;7834:38:103;7958:326:174;7783:96:103;-1:-1:-1;;7891:23:103;5220:74:174;6632:184;6693:7;6712:19;6723:7;6712:10;:19::i;:::-;6708:83;;;6740:51;;-1:-1:-1;;;6740:51:174;;;;;;;;;;;6708:83;-1:-1:-1;6804:7:174;6632:184::o;7475:262::-;7553:7;7573:26;7580:7;7589:9;7573:6;:26::i;:::-;7568:145;;7669:15;7676:7;11442:17;11438:31;;11253:254;7669:15;7616:90;;-1:-1:-1;;;7616:90:174;;7661:24;;;;7616:90;;;4263:25:181;7687:18:174;;;4304::181;;;4297:34;4236:18;;7616:90:174;;;;;;;;7568:145;-1:-1:-1;7725:7:174;;7475:262;-1:-1:-1;7475:262:174:o;13593:349::-;13714:7;13729:12;13744;13748:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;13744:12;-1:-1:-1;;;;;13729:27:174;;;13832:12;13836:7;13832:3;:12::i;:::-;13825:4;13809:13;13816:6;13809:4;:13;:::i;:::-;:20;;;;:::i;:::-;:35;13805:67;;;-1:-1:-1;;13854:11:174;;;;;13805:67;13885:13;13892:6;13885:4;:13;:::i;:::-;13878:20;;13911:26;13917:7;13911:26;;13926:4;13932;13911:5;:26::i;5914:125:103:-;5972:5;5998:35;-1:-1:-1;;5998:18:103;;1539:2;6031:1;5998:18;:35::i;3521:161::-;3590:4;3638:5;3632:12;;;;;;;;:::i;:::-;3609:35;;:19;3620:7;3609:10;:19::i;:::-;:35;;;:68;;;;;3672:5;3648:29;;;;;;;;:::i;:::-;:20;3660:7;3648:11;:20::i;:::-;:29;;;;;;;;:::i;:::-;;;3521:161;-1:-1:-1;;;3521:161:103:o;5291:168::-;5380:7;5346:8;5356:13;1948:28;5356:13;1965:10;;1948:28;-1:-1:-1;5433:21:103::1;-1:-1:-1::0;;5433:14:103;::::1;5448:1;5451:2;5433:14;:21::i;5026:151::-:0;5119:6;5085:8;5095:13;1948:28;5095:13;1965:10;;1948:28;-1:-1:-1;5147:24:103::1;-1:-1:-1::0;;5147:18:103;::::1;5166:1;5169;5147:18;:24::i;6410:165::-:0;6472:7;6538:32;-1:-1:-1;;6538:25:103;;6564:1;6567:2;6538:25;:32::i;19324:146:102:-;19408:7;19451:3;19456:7;19440:24;;;;;;;;4514:25:181;;;4587:10;4575:23;4570:2;4555:18;;4548:51;4502:2;4487:18;;4342:263;19440:24:102;;;;;;;;;;;;;19430:35;;;;;;19423:42;;19324:146;;;;:::o;5603:180:68:-;5709:7;5731:47;5756:4;5762:3;5767:7;5776:1;5731:24;:47::i;6234:122::-;6297:4;6316:35;6341:6;6349:1;6316:24;:35::i;15274:815:174:-;15375:14;15401:6;:11;;15411:1;15401:11;15397:49;;-1:-1:-1;15437:1:174;15422:17;;15397:49;15473:12;15477:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15473:12;-1:-1:-1;;;;;15455:30:174;:15;;;;:6;:15;:::i;:::-;:30;15451:282;;;15674:12;15678:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15674:12;15688;15692:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15688:12;15646:80;;-1:-1:-1;;;15646:80:174;;-1:-1:-1;;;;;4902:15:181;;;15646:80:174;;;4884:34:181;4954:15;;4934:18;;;4927:43;4986:18;;;4979:34;;;15710:15:174;;;5029:18:181;;;5022:34;4811:19;;15646:80:174;4610:452:181;15451:282:174;15751:2;15742:6;:11;;;15738:66;;;15762:42;;-1:-1:-1;;;15762:42:174;;;;;;;;;;;15738:66;15871:1;15862:10;;15811:15;15899:12;15903:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15899:12;-1:-1:-1;;;;;15884:27:174;;-1:-1:-1;15917:13:174;-1:-1:-1;;;;;5031:12:174;;5027:85;16053:17;;;;16047:24;16043:36;;;-1:-1:-1;;;;;15274:815:174:o;8805:657::-;8916:15;8961:2;8990;9076:4;9108;-1:-1:-1;;;;;9127:12:174;;;;:28;;;;;9151:4;9143;-1:-1:-1;;;;;9143:12:174;;9127:28;9119:51;;;;-1:-1:-1;;;9119:51:174;;5269:2:181;9119:51:174;;;5251:21:181;5308:2;5288:18;;;5281:30;-1:-1:-1;;;5327:18:181;;;5320:40;5377:18;;9119:51:174;5067:334:181;9119:51:174;9271:23;;;9344:17;;;9327:35;;;9410:17;;;9394:34;;;;;-1:-1:-1;;;8805:657:174:o;2420:159:103:-;2488:4;13008:2:174;13004:16;;;-1:-1:-1;;;;;13000:28:174;2547:27:103;1664:2;1539;2547:27;:::i;:::-;2539:35;;2420:159;-1:-1:-1;;2420:159:103:o;6121:290:174:-;6181:8;6201:15;6208:7;11442:17;11438:31;;11253:254;6201:15;:31;;6220:12;6201:31;6197:63;;-1:-1:-1;6249:4:174;;6121:290;-1:-1:-1;6121:290:174:o;6197:63::-;6265:12;6280;6284:7;6280:3;:12::i;:::-;6395:4;6389:11;-1:-1:-1;6380:21:174;6121:290;-1:-1:-1;;;6121:290:174:o;7067:126::-;7141:4;7179:9;7160:28;;:15;7167:7;11442:17;11438:31;;11253:254;7160:15;:28;;;;7067:126;-1:-1:-1;;;7067:126:174:o;13200:131::-;13253:7;13308:12;13312:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;13308:12;13293;13297:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;13293:12;:27;-1:-1:-1;;;;;13286:34:174;;;13200:131;;;:::o;16417:201::-;16522:14;16596:11;16601:6;16596:2;:11;:::i;:::-;16595:17;;16611:1;16595:17;:::i;:::-;16551:62;;16559:30;16565:7;16574:6;16582;16559:5;:30::i;:::-;16551:62;;;16417:201;-1:-1:-1;;;;16417:201:174:o;6165:115:103:-;6225:5;6251:23;-1:-1:-1;;6251:17:103;;6225:5;6272:1;6251:17;:23::i;3201:112::-;3260:5;11442:17:174;11438:31;;;3280:28:103;;;;;;;;;;:::i;18635:383:102:-;18796:8;;;;18766:7;;18796:8;;;;18785:19;;;;18781:233;;-1:-1:-1;18882:3:102;18848:38;;18781:233;18977:15;18987:4;18977:9;:15::i;:::-;:30;-1:-1:-1;;;;;18977:30:102;;-1:-1:-1;18970:37:102;;17816:515;-1:-1:-1;;;;;18056:35:102;;17900:4;18056:35;;;:27;;;:35;;;;;:42;;;:47;18052:80;;-1:-1:-1;18120:5:102;18113:12;;18052:80;-1:-1:-1;;;;;;;18303:18:102;;:23;;;17816:515::o;1192:571::-;1248:19;1367:20;;;:14;:20;;;;;1677:1;1652:22;;;;1248:19;;1367:20;-1:-1:-1;;;1652:22:102;;;;;:26;1648:91;;;1695:37;;-1:-1:-1;;;1695:37:102;;;;;;;;;;;14:163:181;81:20;;141:10;130:22;;120:33;;110:61;;167:1;164;157:12;110:61;14:163;;;:::o;182:127::-;243:10;238:3;234:20;231:1;224:31;274:4;271:1;264:15;298:4;295:1;288:15;314:1134;407:6;415;423;431;484:3;472:9;463:7;459:23;455:33;452:53;;;501:1;498;491:12;452:53;524:28;542:9;524:28;:::i;:::-;514:38;;571:37;604:2;593:9;589:18;571:37;:::i;:::-;561:47;;655:2;644:9;640:18;627:32;617:42;;710:2;699:9;695:18;682:32;733:18;774:2;766:6;763:14;760:34;;;790:1;787;780:12;760:34;828:6;817:9;813:22;803:32;;873:7;866:4;862:2;858:13;854:27;844:55;;895:1;892;885:12;844:55;931:2;918:16;953:2;949;946:10;943:36;;;959:18;;:::i;:::-;1034:2;1028:9;1002:2;1088:13;;-1:-1:-1;;1084:22:181;;;1108:2;1080:31;1076:40;1064:53;;;1132:18;;;1152:22;;;1129:46;1126:72;;;1178:18;;:::i;:::-;1218:10;1214:2;1207:22;1253:2;1245:6;1238:18;1293:7;1288:2;1283;1279;1275:11;1271:20;1268:33;1265:53;;;1314:1;1311;1304:12;1265:53;1370:2;1365;1361;1357:11;1352:2;1344:6;1340:15;1327:46;1415:1;1410:2;1405;1397:6;1393:15;1389:24;1382:35;1436:6;1426:16;;;;;;;314:1134;;;;;;;:::o;1661:277::-;1728:6;1781:2;1769:9;1760:7;1756:23;1752:32;1749:52;;;1797:1;1794;1787:12;1749:52;1829:9;1823:16;1882:5;1875:13;1868:21;1861:5;1858:32;1848:60;;1904:1;1901;1894:12;1943:127;2004:10;1999:3;1995:20;1992:1;1985:31;2035:4;2032:1;2025:15;2059:4;2056:1;2049:15;2075:127;2136:10;2131:3;2127:20;2124:1;2117:31;2167:4;2164:1;2157:15;2191:4;2188:1;2181:15;2207:128;2274:9;;;2295:11;;;2292:37;;;2309:18;;:::i;2619:125::-;2684:9;;;2705:10;;;2702:36;;;2718:18;;:::i;2749:127::-;2810:10;2805:3;2801:20;2798:1;2791:31;2841:4;2838:1;2831:15;2865:4;2862:1;2855:15;2881:120;2921:1;2947;2937:35;;2952:18;;:::i;:::-;-1:-1:-1;2986:9:181;;2881:120::o;3006:127::-;3067:10;3062:3;3058:20;3055:1;3048:31;3098:4;3095:1;3088:15;3122:4;3119:1;3112:15;3138:112;3170:1;3196;3186:35;;3201:18;;:::i;:::-;-1:-1:-1;3235:9:181;;3138:112::o;3255:829::-;3501:2;3513:21;;;3583:13;;3486:18;;;3605:22;;;3453:4;;3681;;3658:3;3643:19;;;3708:15;;;3453:4;3751:195;3765:6;3762:1;3759:13;3751:195;;;3830:13;;-1:-1:-1;;;;;3826:39:181;3814:52;;3886:12;;;;3921:15;;;;3862:1;3780:9;3751:195;;;-1:-1:-1;;;3982:18:181;;;3975:34;;;;-1:-1:-1;;;;;;4045:32:181;;;;4040:2;4025:18;;;4018:60;3963:3;3255:829;-1:-1:-1;3255:829:181:o;5406:151::-;5496:4;5489:12;;;5475;;;5471:31;;5514:14;;5511:40;;;5531:18;;:::i;5562:225::-;5666:4;5645:12;;;5659;;;5641:31;5692:22;;;;5733:24;;;5723:58;;5761:18;;:::i;:::-;5723:58;5562:225;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"853800","executionCost":"890","totalCost":"854690"},"external":{"handle(uint32,uint32,bytes32,bytes)":"infinite"},"internal":{"_creditTokens(uint32,uint32,bytes29,bytes29)":"infinite","_isRemoteHandler(uint32,bytes32)":"2242","_isReplica(address)":"infinite","_reconcile(bytes32,uint32,address,uint256)":"infinite"}},"methodIdentifiers":{"handle(uint32,uint32,bytes32,bytes)":"ab2dc3f5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AssetLogic__getConfig_notRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InboxFacet__handle_notTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InboxFacet__onlyRemoteRouter_notRemote\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InboxFacet__onlyReplica_notReplica\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InboxFacet__reconcile_alreadyReconciled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InboxFacet__reconcile_noPortalRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"}],\"name\":\"TypedMemView__assertType_typeAssertionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__assertValid_validityAssertionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__index_indexMoreThan32Bytes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"len\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slice\",\"type\":\"uint256\"}],\"name\":\"TypedMemView__index_overrun\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"originAndNonce\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Receive\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"local\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"routers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Reconciled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_origin\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_nonce\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"handle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Receive(uint64,address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of tokens being received\",\"liquidityProvider\":\"The account providing liquidity\",\"originAndNonce\":\"Domain where the transfer originated and the        unique identifier for the message from origin to destination,        combined in a single field ((origin << 32) & nonce)\",\"recipient\":\"The address receiving the tokens; the original        recipient of the transfer\",\"token\":\"The address of the local token contract being received\"}},\"Reconciled(bytes32,uint32,address,address[],uint256,address)\":{\"params\":{\"amount\":\"- The amount that was provided by the bridge.\",\"caller\":\"- The account that called the function\",\"local\":\"- The local asset that was provided by the bridge.\",\"originDomain\":\"- The originating domain of the transfer.\",\"routers\":\"- The routers that were reimbursed the bridged token, if fast liquidity was provided for the given transfer.\",\"transferId\":\"- The unique identifier of the transfer.\"}}},\"kind\":\"dev\",\"methods\":{\"handle(uint32,uint32,bytes32,bytes)\":{\"params\":{\"_message\":\"The message body.\",\"_nonce\":\"The unique identifier for the message from origin to destination.\",\"_origin\":\"The origin domain.\",\"_sender\":\"The sender address.\"}}},\"title\":\"InboxFacet\",\"version\":1},\"userdoc\":{\"events\":{\"Receive(uint64,address,address,address,uint256)\":{\"notice\":\"emitted when tokens are dispensed to an account on this domain         emitted both when fast liquidity is provided, and when the         transfer ultimately settles\"},\"Reconciled(bytes32,uint32,address,address[],uint256,address)\":{\"notice\":\"Emitted when `reconciled` is called by the bridge on the destination domain.\"}},\"kind\":\"user\",\"methods\":{\"handle(uint32,uint32,bytes32,bytes)\":{\"notice\":\"Handles an incoming cross-chain message.\"}},\"notice\":\"This is the facet that holds all the functionality needed for Connext's messaging layer to reconcile cross-chain transfers. Authenticated (proven) message data is delivered to the `reconcile` function, where it is parsed to determine the message action. Tokens are credited (representational assets are minted, canonical tokens are unlocked from escrow) if applicable.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/InboxFacet.sol\":\"InboxFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n  AppStorage internal s;\\n\\n  // ========== Custom Errors ===========\\n\\n  error BaseConnextFacet__onlyOwner_notOwner();\\n  error BaseConnextFacet__onlyProposed_notProposedOwner();\\n  error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n  error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n  error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n  error BaseConnextFacet__whenNotPaused_paused();\\n  error BaseConnextFacet__nonReentrant_reentrantCall();\\n  error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n  error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n  error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @dev Prevents a contract from calling itself, directly or indirectly.\\n   * Calling a `nonReentrant` function from another `nonReentrant`\\n   * function is not supported. It is possible to prevent this from happening\\n   * by making the `nonReentrant` function external, and making it call a\\n   * `private` function that does the actual work.\\n   */\\n  modifier nonReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._status = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._status = Constants.NOT_ENTERED;\\n  }\\n\\n  modifier nonXCallReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._xcallStatus = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._xcallStatus = Constants.NOT_ENTERED;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and router role.\\n   */\\n  modifier onlyOwnerOrRouter() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n      revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and watcher role.\\n   */\\n  modifier onlyOwnerOrWatcher() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n      revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and admin role.\\n   */\\n  modifier onlyOwnerOrAdmin() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n      revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if all functionality is paused\\n   */\\n  modifier whenNotPaused() {\\n    if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n    _;\\n  }\\n\\n  // ============ Internal functions ============\\n  /**\\n   * @notice Indicates if the router allowlist has been removed\\n   */\\n  function _isRouterAllowlistRemoved() internal view returns (bool) {\\n    return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n    address adopted = AssetLogic.getConfig(_key).adopted;\\n    if (adopted == address(0)) {\\n      revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n    }\\n    return adopted;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n    address representation = AssetLogic.getConfig(_key).representation;\\n    // If this is address(0), then there is no mintable token for this asset on this\\n    // domain\\n    return representation;\\n  }\\n\\n  /**\\n   * @notice Calculates a transferId\\n   */\\n  function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_params));\\n  }\\n\\n  /**\\n   * @notice Internal utility function that combines\\n   *         `_origin` and `_nonce`.\\n   * @dev Both origin and nonce should be less than 2^32 - 1\\n   * @param _origin Domain of chain where the transfer originated\\n   * @param _nonce The unique identifier for the message from origin to destination\\n   * @return Returns (`_origin` << 32) & `_nonce`\\n   */\\n  function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n    return (uint64(_origin) << 32) | _nonce;\\n  }\\n\\n  function _getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address) {\\n    return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n  }\\n\\n  function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n    return AssetLogic.getCanonicalTokenId(_candidate, s);\\n  }\\n\\n  function _getLocalAndAdoptedToken(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address, address) {\\n    address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n    address _adopted = _getAdoptedAsset(_key);\\n    return (_local, _adopted);\\n  }\\n\\n  function _isLocalOrigin(address _token) internal view returns (bool) {\\n    return AssetLogic.isLocalOrigin(_token, s);\\n  }\\n\\n  function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n    TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n    bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n    if (!AssetLogic.getConfig(_key).approval) {\\n      revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n    }\\n    return (_canonical, _key);\\n  }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/InboxFacet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"../../../shared/libraries/TypedMemView.sol\\\";\\n\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {BridgeMessage} from \\\"../libraries/BridgeMessage.sol\\\";\\nimport {DestinationTransferStatus} from \\\"../libraries/LibConnextStorage.sol\\\";\\n\\nimport {IBridgeToken} from \\\"../interfaces/IBridgeToken.sol\\\";\\n\\nimport {BaseConnextFacet} from \\\"./BaseConnextFacet.sol\\\";\\n\\n/**\\n * @title InboxFacet\\n * @notice This is the facet that holds all the functionality needed for Connext's messaging layer to\\n * reconcile cross-chain transfers. Authenticated (proven) message data is delivered to the `reconcile`\\n * function, where it is parsed to determine the message action. Tokens are credited (representational\\n * assets are minted, canonical tokens are unlocked from escrow) if applicable.\\n *\\n */\\ncontract InboxFacet is BaseConnextFacet {\\n  // ============ Libraries ============\\n\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n  using BridgeMessage for bytes29;\\n\\n  // ========== Custom Errors ===========\\n\\n  error InboxFacet__onlyReplica_notReplica();\\n  error InboxFacet__onlyRemoteRouter_notRemote();\\n  error InboxFacet__handle_notTransfer();\\n  error InboxFacet__reconcile_alreadyReconciled();\\n  error InboxFacet__reconcile_noPortalRouter();\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted when `reconciled` is called by the bridge on the destination domain.\\n   * @param transferId - The unique identifier of the transfer.\\n   * @param originDomain - The originating domain of the transfer.\\n   * @param local - The local asset that was provided by the bridge.\\n   * @param routers - The routers that were reimbursed the bridged token, if fast liquidity was\\n   * provided for the given transfer.\\n   * @param amount - The amount that was provided by the bridge.\\n   * @param caller - The account that called the function\\n   */\\n  event Reconciled(\\n    bytes32 indexed transferId,\\n    uint32 indexed originDomain,\\n    address indexed local,\\n    address[] routers,\\n    uint256 amount,\\n    address caller\\n  );\\n\\n  /**\\n   * @notice emitted when tokens are dispensed to an account on this domain\\n   *         emitted both when fast liquidity is provided, and when the\\n   *         transfer ultimately settles\\n   * @param originAndNonce Domain where the transfer originated and the\\n   *        unique identifier for the message from origin to destination,\\n   *        combined in a single field ((origin << 32) & nonce)\\n   * @param token The address of the local token contract being received\\n   * @param recipient The address receiving the tokens; the original\\n   *        recipient of the transfer\\n   * @param liquidityProvider The account providing liquidity\\n   * @param amount The amount of tokens being received\\n   */\\n  event Receive(\\n    uint64 indexed originAndNonce,\\n    address indexed token,\\n    address indexed recipient,\\n    address liquidityProvider,\\n    uint256 amount\\n  );\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Only accept messages from a registered inbox contract.\\n   */\\n  modifier onlyReplica() {\\n    if (!_isReplica(msg.sender)) {\\n      revert InboxFacet__onlyReplica_notReplica();\\n    }\\n    _;\\n  }\\n\\n  /**\\n   * @notice Only accept messages from a remote Router contract.\\n   * @param _origin The domain the message is coming from.\\n   * @param _router The address the message is coming from.\\n   */\\n  modifier onlyRemoteHandler(uint32 _origin, bytes32 _router) {\\n    if (!_isRemoteHandler(_origin, _router)) {\\n      revert InboxFacet__onlyRemoteRouter_notRemote();\\n    }\\n    _;\\n  }\\n\\n  // ============ External Functions ============\\n\\n  /**\\n   * @notice Handles an incoming cross-chain message.\\n   *\\n   * @param _origin The origin domain.\\n   * @param _nonce The unique identifier for the message from origin to destination.\\n   * @param _sender The sender address.\\n   * @param _message The message body.\\n   */\\n  function handle(\\n    uint32 _origin,\\n    uint32 _nonce,\\n    bytes32 _sender,\\n    bytes memory _message\\n  ) external onlyReplica onlyRemoteHandler(_origin, _sender) {\\n    // Parse token ID and action from message body.\\n    bytes29 _msg = _message.ref(0).mustBeMessage();\\n    bytes29 _tokenId = _msg.tokenId();\\n    bytes29 _action = _msg.action();\\n\\n    // Sanity check: action must be a valid transfer.\\n    if (!_action.isTransfer()) {\\n      revert InboxFacet__handle_notTransfer();\\n    }\\n\\n    // If applicable, mint the local asset that corresponds with the message's token ID in the\\n    // amount specified by the message.\\n    // Returns the local asset address and message's amount.\\n    (address _token, uint256 _amount) = _creditTokens(_origin, _nonce, _tokenId, _action);\\n\\n    // Reconcile the transfer.\\n    _reconcile(_action.transferId(), _origin, _token, _amount);\\n  }\\n\\n  // ============ Internal Functions ============\\n\\n  /**\\n   * @notice Reconcile the transfer, marking the transfer ID in storage as authenticated. Reimburses\\n   * routers with local asset if it was a fast-liquidity transfer (i.e. it was previously executed).\\n   * @param _transferId Unique identifier of the transfer.\\n   * @param _origin Origin domain of the transfer.\\n   * @param _asset Local asset address (representational or canonical).\\n   * @param _amount The amount of the local asset.\\n   */\\n  function _reconcile(\\n    bytes32 _transferId,\\n    uint32 _origin,\\n    address _asset,\\n    uint256 _amount\\n  ) internal {\\n    // Ensure the transfer has not already been handled (i.e. previously reconciled).\\n    // Will be previously reconciled IFF status == reconciled -or- status == executed\\n    // and there is no path length on the transfers (no fast liquidity)\\n    DestinationTransferStatus status = s.transferStatus[_transferId];\\n    if (status != DestinationTransferStatus.None && status != DestinationTransferStatus.Executed) {\\n      revert InboxFacet__reconcile_alreadyReconciled();\\n    }\\n\\n    // Mark the transfer as reconciled.\\n    s.transferStatus[_transferId] = status == DestinationTransferStatus.None\\n      ? DestinationTransferStatus.Reconciled\\n      : DestinationTransferStatus.Completed;\\n\\n    // If the transfer was executed using fast-liquidity provided by routers, then this value would be set\\n    // to the participating routers.\\n    // NOTE: If the transfer was not executed using fast-liquidity, then the funds will be reserved for\\n    // execution (i.e. funds will be delivered to the transfer's recipient in a subsequent `execute` call).\\n    address[] memory routers = s.routedTransfers[_transferId];\\n\\n    // If fast transfer was made using portal liquidity, portal debt must be repaid first.\\n    // NOTE: Routers can repay any-amount out-of-band using the `repayAavePortal` method\\n    // or by interacting with the aave contracts directly.\\n    uint256 portalTransferAmount = s.portalDebt[_transferId] + s.portalFeeDebt[_transferId];\\n\\n    uint256 pathLen = routers.length;\\n    // Sanity check: ensure a router took on the credit risk.\\n    if (portalTransferAmount != 0 && pathLen != 1) {\\n      revert InboxFacet__reconcile_noPortalRouter();\\n    }\\n\\n    if (pathLen != 0) {\\n      // Credit each router that provided liquidity their due 'share' of the asset.\\n      uint256 routerAmount = _amount / pathLen;\\n      for (uint256 i; i < pathLen - 1; ) {\\n        s.routerBalances[routers[i]][_asset] += routerAmount;\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      // The last router in the multipath will sweep the remaining balance to account for remainder dust.\\n      uint256 toSweep = routerAmount + (_amount % pathLen);\\n      s.routerBalances[routers[pathLen - 1]][_asset] += toSweep;\\n    }\\n\\n    emit Reconciled(_transferId, _origin, _asset, routers, _amount, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function _isReplica(address _potentialReplica) internal view returns (bool) {\\n    return s.xAppConnectionManager.isReplica(_potentialReplica);\\n  }\\n\\n  /**\\n   * @notice Return true if the given domain / router is the address of a remote xApp Router\\n   * @param _domain The domain of the potential remote xApp Router\\n   * @param _xAppHandler The address of the potential remote xApp handler\\n   */\\n  function _isRemoteHandler(uint32 _domain, bytes32 _xAppHandler) internal view returns (bool) {\\n    return s.remotes[_domain] == _xAppHandler && _xAppHandler != bytes32(0);\\n  }\\n\\n  /**\\n   * @notice If applicable, mints tokens corresponding to the inbound message action.\\n   * @dev IFF the asset is representational (i.e. originates from a remote chain), tokens will be minted.\\n   * Otherwise, the token must be canonical (i.e. we are on the token's home chain), and the corresponding\\n   * amount will already be available in escrow in this contract.\\n   *\\n   * @param _origin The domain of the chain from which the transfer originated.\\n   * @param _nonce The unique identifier for the message from origin to destination.\\n   * @param _tokenId The canonical token identifier to credit.\\n   * @param _action The contents of the transfer message.\\n   * @return _token The address of the local token contract.\\n   */\\n  function _creditTokens(\\n    uint32 _origin,\\n    uint32 _nonce,\\n    bytes29 _tokenId,\\n    bytes29 _action\\n  ) internal returns (address, uint256) {\\n    bytes32 _canonicalId = _tokenId.id();\\n    uint32 _canonicalDomain = _tokenId.domain();\\n\\n    // Load amount once.\\n    uint256 _amount = _action.amnt();\\n\\n    // Check for the empty case -- if it is 0 value there is no strict requirement for the\\n    // canonical information be defined (i.e. you can supply address(0) to xcall). If this\\n    // is the case, return _token as address(0)\\n    if (_amount == 0 && _canonicalDomain == 0 && _canonicalId == bytes32(0)) {\\n      // Emit Receive event and short-circuit remaining logic: no tokens need to be delivered.\\n      emit Receive(_originAndNonce(_origin, _nonce), address(0), address(this), address(0), _amount);\\n      return (address(0), 0);\\n    }\\n\\n    // Get the token contract for the given tokenId on this chain.\\n    address _token = _getLocalAsset(\\n      AssetLogic.calculateCanonicalHash(_canonicalId, _canonicalDomain),\\n      _canonicalId,\\n      _canonicalDomain\\n    );\\n\\n    if (_amount == 0) {\\n      // Emit Receive event and short-circuit remaining logic: no tokens need to be delivered.\\n      emit Receive(_originAndNonce(_origin, _nonce), _token, address(this), address(0), _amount);\\n      return (_token, 0);\\n    }\\n\\n    // Mint the tokens into circulation on this chain.\\n    if (!_isLocalOrigin(_token)) {\\n      // If the token is of remote origin, mint the representational asset into circulation here.\\n      // NOTE: The bridge tokens should be distributed to their intended recipient outside\\n      IBridgeToken(_token).mint(address(this), _amount);\\n    }\\n    // NOTE: If the tokens are locally originating - meaning they are the canonical asset - then they\\n    // would be held in escrow in this contract. If we're receiving this message, it must mean\\n    // corresponding representational assets circulating on a remote chain were burnt when it was sent.\\n\\n    // Emit Receive event.\\n    emit Receive(_originAndNonce(_origin, _nonce), _token, address(this), address(0), _amount);\\n    return (_token, _amount);\\n  }\\n}\\n\",\"keccak256\":\"0x776789bda0036f8f9b9917bb039d7f0b722ddabc8396093685e1b9c2d41a45ae\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IBridgeToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\ninterface IBridgeToken is IERC20Metadata {\\n  function burn(address _from, uint256 _amnt) external;\\n\\n  function mint(address _to, uint256 _amnt) external;\\n\\n  function setDetails(string calldata _name, string calldata _symbol) external;\\n}\\n\",\"keccak256\":\"0x93b2adcc4b953ecd2d3e738d797f5fbde2ccb3726df10bc7acde9c1b4775b019\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/BridgeMessage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============ External Imports ============\\nimport {TypedMemView} from \\\"../../../shared/libraries/TypedMemView.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary BridgeMessage {\\n  // ============ Libraries ============\\n\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // ============ Enums ============\\n\\n  // WARNING: do NOT re-write the numbers / order\\n  // of message types in an upgrade;\\n  // will cause in-flight messages to be mis-interpreted\\n  // The Types enum it defines the types of `views` that we use in BridgeMessage. A view\\n  // points to a specific part of the memory and can slice bytes out of it. When we give a `type` to a view,\\n  // we define the structure of the data it points to, so that we can do easy runtime assertions without\\n  // having to fetch the whole data from memory and check for ourselves. In BridgeMessage.sol\\n  // the types of `data` we can have are defined in this enum and may belong to different taxonomies.\\n  // For example, a `Message` includes a `TokenId` and an Action (a `Transfer`).\\n  // The Message is a different TYPE of data than a TokenId or Transfer, as TokenId and Transfer live inside\\n  // the message. For that reason, we define them as different data types and we add them to the same enum\\n  // for ease of use.\\n  enum Types {\\n    Invalid, // 0\\n    TokenId, // 1\\n    Message, // 2\\n    Transfer // 3\\n  }\\n\\n  // ============ Constants ============\\n\\n  uint256 private constant TOKEN_ID_LEN = 36; // 4 bytes domain + 32 bytes id\\n  uint256 private constant IDENTIFIER_LEN = 1;\\n  uint256 private constant TRANSFER_LEN = 65; // 1 byte identifier + 32 bytes amount + 32 bytes transfer id\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Asserts a message is of type `_t`\\n   * @param _view The message\\n   * @param _t The expected type\\n   */\\n  modifier typeAssert(bytes29 _view, Types _t) {\\n    _view.assertType(uint40(_t));\\n    _;\\n  }\\n\\n  // ============ Internal Functions ============\\n\\n  /**\\n   * @notice Checks that Action is valid type\\n   * @param _action The action\\n   * @return TRUE if action is valid\\n   */\\n  function isValidAction(bytes29 _action) internal pure returns (bool) {\\n    return isTransfer(_action);\\n  }\\n\\n  /**\\n   * @notice Checks that view is a valid message length\\n   * @param _view The bytes string\\n   * @return TRUE if message is valid\\n   */\\n  function isValidMessageLength(bytes29 _view) internal pure returns (bool) {\\n    uint256 _len = _view.len();\\n    return _len == TOKEN_ID_LEN + TRANSFER_LEN;\\n  }\\n\\n  /**\\n   * @notice Formats an action message\\n   * @param _tokenId The token ID\\n   * @param _action The action\\n   * @return The formatted message\\n   */\\n  function formatMessage(bytes29 _tokenId, bytes29 _action)\\n    internal\\n    view\\n    typeAssert(_tokenId, Types.TokenId)\\n    returns (bytes memory)\\n  {\\n    require(isValidAction(_action), \\\"!action\\\");\\n    bytes29[] memory _views = new bytes29[](2);\\n    _views[0] = _tokenId;\\n    _views[1] = _action;\\n    return TypedMemView.join(_views);\\n  }\\n\\n  /**\\n   * @notice Returns the type of the message\\n   * @param _view The message\\n   * @return The type of the message\\n   */\\n  function messageType(bytes29 _view) internal pure returns (Types) {\\n    return Types(uint8(_view.typeOf()));\\n  }\\n\\n  /**\\n   * @notice Checks that the message is of the specified type\\n   * @param _type the type to check for\\n   * @param _action The message\\n   * @return True if the message is of the specified type\\n   */\\n  function isType(bytes29 _action, Types _type) internal pure returns (bool) {\\n    return actionType(_action) == uint8(_type) && messageType(_action) == _type;\\n  }\\n\\n  /**\\n   * @notice Checks that the message is of type Transfer\\n   * @param _action The message\\n   * @return True if the message is of type Transfer\\n   */\\n  function isTransfer(bytes29 _action) internal pure returns (bool) {\\n    return isType(_action, Types.Transfer);\\n  }\\n\\n  /**\\n   * @notice Formats Transfer\\n   * @param _amnt The transfer amount\\n   * @param _transferId The unique identifier of the transfer\\n   * @return\\n   */\\n  function formatTransfer(uint256 _amnt, bytes32 _transferId) internal pure returns (bytes29) {\\n    return abi.encodePacked(Types.Transfer, _amnt, _transferId).ref(uint40(Types.Transfer));\\n  }\\n\\n  /**\\n   * @notice Serializes a Token ID struct\\n   * @param _tokenId The token id struct\\n   * @return The formatted Token ID\\n   */\\n  function formatTokenId(TokenId memory _tokenId) internal pure returns (bytes29) {\\n    return formatTokenId(_tokenId.domain, _tokenId.id);\\n  }\\n\\n  /**\\n   * @notice Creates a serialized Token ID from components\\n   * @param _domain The domain\\n   * @param _id The ID\\n   * @return The formatted Token ID\\n   */\\n  function formatTokenId(uint32 _domain, bytes32 _id) internal pure returns (bytes29) {\\n    return abi.encodePacked(_domain, _id).ref(uint40(Types.TokenId));\\n  }\\n\\n  /**\\n   * @notice Retrieves the domain from a TokenID\\n   * @param _tokenId The message\\n   * @return The domain\\n   */\\n  function domain(bytes29 _tokenId) internal pure typeAssert(_tokenId, Types.TokenId) returns (uint32) {\\n    return uint32(_tokenId.indexUint(0, 4));\\n  }\\n\\n  /**\\n   * @notice Retrieves the ID from a TokenID\\n   * @param _tokenId The message\\n   * @return The ID\\n   */\\n  function id(bytes29 _tokenId) internal pure typeAssert(_tokenId, Types.TokenId) returns (bytes32) {\\n    // before = 4 bytes domain\\n    return _tokenId.index(4, 32);\\n  }\\n\\n  /**\\n   * @notice Retrieves the EVM ID\\n   * @param _tokenId The message\\n   * @return The EVM ID\\n   */\\n  function evmId(bytes29 _tokenId) internal pure typeAssert(_tokenId, Types.TokenId) returns (address) {\\n    // before = 4 bytes domain + 12 bytes empty to trim for address\\n    return _tokenId.indexAddress(16);\\n  }\\n\\n  /**\\n   * @notice Retrieves the action identifier from message\\n   * @param _message The action\\n   * @return The message type\\n   */\\n  function msgType(bytes29 _message) internal pure returns (uint8) {\\n    return uint8(_message.indexUint(TOKEN_ID_LEN, 1));\\n  }\\n\\n  /**\\n   * @notice Retrieves the identifier from action\\n   * @param _action The action\\n   * @return The action type\\n   */\\n  function actionType(bytes29 _action) internal pure returns (uint8) {\\n    return uint8(_action.indexUint(0, 1));\\n  }\\n\\n  /**\\n   * @notice Retrieves the amount from a Transfer\\n   * @param _transferAction The message\\n   * @return The amount\\n   */\\n  function amnt(bytes29 _transferAction) internal pure returns (uint256) {\\n    // before = 1 byte identifier = 1 bytes\\n    return _transferAction.indexUint(1, 32);\\n  }\\n\\n  /**\\n   * @notice Retrieves the transfer id from a Transfer\\n   * @param _transferAction The message\\n   * @return The id\\n   */\\n  function transferId(bytes29 _transferAction) internal pure returns (bytes32) {\\n    // before = 1 byte identifier + 32 bytes amount = 33 bytes\\n    return _transferAction.index(33, 32);\\n  }\\n\\n  /**\\n   * @notice Retrieves the token ID from a Message\\n   * @param _message The message\\n   * @return The ID\\n   */\\n  function tokenId(bytes29 _message) internal pure typeAssert(_message, Types.Message) returns (bytes29) {\\n    return _message.slice(0, TOKEN_ID_LEN, uint40(Types.TokenId));\\n  }\\n\\n  /**\\n   * @notice Retrieves the action data from a Message\\n   * @param _message The message\\n   * @return The action\\n   */\\n  function action(bytes29 _message) internal pure typeAssert(_message, Types.Message) returns (bytes29) {\\n    uint256 _actionLen = _message.len() - TOKEN_ID_LEN;\\n    uint40 _type = uint40(msgType(_message));\\n    return _message.slice(TOKEN_ID_LEN, _actionLen, _type);\\n  }\\n\\n  /**\\n   * @notice Converts to a Message\\n   * @param _message The message\\n   * @return The newly typed message\\n   */\\n  function tryAsMessage(bytes29 _message) internal pure returns (bytes29) {\\n    if (isValidMessageLength(_message)) {\\n      return _message.castTo(uint40(Types.Message));\\n    }\\n    return TypedMemView.nullView();\\n  }\\n\\n  /**\\n   * @notice Asserts that the message is of type Message\\n   * @param _view The message\\n   * @return The message\\n   */\\n  function mustBeMessage(bytes29 _view) internal pure returns (bytes29) {\\n    return tryAsMessage(_view).assertValid();\\n  }\\n}\\n\",\"keccak256\":\"0x18f34053f524fbed1c307c08e863d015b96dade86249276eb05fbd5b8ac86a6b\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":13726,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"s","offset":0,"slot":"0","type":"t_struct(AppStorage)29536_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_contract(IERC20)10812)dyn_storage":{"base":"t_contract(IERC20)10812","encoding":"dynamic_array","label":"contract IERC20[]","numberOfBytes":"32"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IConnectorManager)47805":{"encoding":"inplace","label":"contract IConnectorManager","numberOfBytes":"20"},"t_contract(IERC20)10812":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_contract(LPToken)23179":{"encoding":"inplace","label":"contract LPToken","numberOfBytes":"20"},"t_enum(DestinationTransferStatus)29324":{"encoding":"inplace","label":"enum DestinationTransferStatus","numberOfBytes":"1"},"t_enum(Role)29319":{"encoding":"inplace","label":"enum Role","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_enum(Role)29319)":{"encoding":"mapping","key":"t_address","label":"mapping(address => enum Role)","numberOfBytes":"32","value":"t_enum(Role)29319"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(RouterConfig)29378_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RouterConfig)","numberOfBytes":"32","value":"t_struct(RouterConfig)29378_storage"},"t_mapping(t_address,t_struct(TokenId)37728_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct TokenId)","numberOfBytes":"32","value":"t_struct(TokenId)37728_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_bytes32,t_array(t_address)dyn_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => address[])","numberOfBytes":"32","value":"t_array(t_address)dyn_storage"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum DestinationTransferStatus)","numberOfBytes":"32","value":"t_enum(DestinationTransferStatus)29324"},"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => mapping(address => uint8))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint8)"},"t_mapping(t_bytes32,t_struct(Swap)30786_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct SwapUtils.Swap)","numberOfBytes":"32","value":"t_struct(Swap)30786_storage"},"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct TokenConfig)","numberOfBytes":"32","value":"t_struct(TokenConfig)29395_storage"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_bytes32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => bytes32)","numberOfBytes":"32","value":"t_bytes32"},"t_struct(AppStorage)29536_storage":{"encoding":"inplace","label":"struct AppStorage","members":[{"astId":29397,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":29399,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"LIQUIDITY_FEE_NUMERATOR","offset":0,"slot":"1","type":"t_uint256"},{"astId":29402,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"relayerFeeVault","offset":0,"slot":"2","type":"t_address"},{"astId":29405,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"nonce","offset":0,"slot":"3","type":"t_uint256"},{"astId":29408,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"domain","offset":0,"slot":"4","type":"t_uint32"},{"astId":29414,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"adoptedToCanonical","offset":0,"slot":"5","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29420,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"representationToCanonical","offset":0,"slot":"6","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29426,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"tokenConfigs","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)"},{"astId":29432,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"transferStatus","offset":0,"slot":"8","type":"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)"},{"astId":29438,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"routedTransfers","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_array(t_address)dyn_storage)"},{"astId":29445,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"routerBalances","offset":0,"slot":"10","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":29450,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"approvedRelayers","offset":0,"slot":"11","type":"t_mapping(t_address,t_bool)"},{"astId":29453,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"maxRoutersPerTransfer","offset":0,"slot":"12","type":"t_uint256"},{"astId":29458,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"slippage","offset":0,"slot":"13","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29463,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"receiveLocalOverride","offset":0,"slot":"14","type":"t_mapping(t_bytes32,t_bool)"},{"astId":29468,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"remotes","offset":0,"slot":"15","type":"t_mapping(t_uint32,t_bytes32)"},{"astId":29470,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"_proposed","offset":0,"slot":"16","type":"t_address"},{"astId":29472,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"_proposedOwnershipTimestamp","offset":0,"slot":"17","type":"t_uint256"},{"astId":29474,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"_routerAllowlistRemoved","offset":0,"slot":"18","type":"t_bool"},{"astId":29476,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"_routerAllowlistTimestamp","offset":0,"slot":"19","type":"t_uint256"},{"astId":29482,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"roles","offset":0,"slot":"20","type":"t_mapping(t_address,t_enum(Role)29319)"},{"astId":29487,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"routerConfigs","offset":0,"slot":"21","type":"t_mapping(t_address,t_struct(RouterConfig)29378_storage)"},{"astId":29489,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"_status","offset":0,"slot":"22","type":"t_uint256"},{"astId":29491,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"_xcallStatus","offset":0,"slot":"23","type":"t_uint256"},{"astId":29497,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"swapStorages","offset":0,"slot":"24","type":"t_mapping(t_bytes32,t_struct(Swap)30786_storage)"},{"astId":29504,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"tokenIndexes","offset":0,"slot":"25","type":"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))"},{"astId":29507,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"lpTokenTargetAddress","offset":0,"slot":"26","type":"t_address"},{"astId":29510,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"_paused","offset":20,"slot":"26","type":"t_bool"},{"astId":29513,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"aavePool","offset":0,"slot":"27","type":"t_address"},{"astId":29516,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"aavePortalFeeNumerator","offset":0,"slot":"28","type":"t_uint256"},{"astId":29521,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"portalDebt","offset":0,"slot":"29","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29526,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"portalFeeDebt","offset":0,"slot":"30","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29531,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"approvedSequencers","offset":0,"slot":"31","type":"t_mapping(t_address,t_bool)"},{"astId":29535,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"xAppConnectionManager","offset":0,"slot":"32","type":"t_contract(IConnectorManager)47805"}],"numberOfBytes":"1056"},"t_struct(RouterConfig)29378_storage":{"encoding":"inplace","label":"struct RouterConfig","members":[{"astId":29367,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"approved","offset":0,"slot":"0","type":"t_bool"},{"astId":29369,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"portalApproved","offset":1,"slot":"0","type":"t_bool"},{"astId":29371,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"owner","offset":2,"slot":"0","type":"t_address"},{"astId":29373,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"recipient","offset":0,"slot":"1","type":"t_address"},{"astId":29375,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"proposed","offset":0,"slot":"2","type":"t_address"},{"astId":29377,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"proposedTimestamp","offset":0,"slot":"3","type":"t_uint256"}],"numberOfBytes":"128"},"t_struct(Swap)30786_storage":{"encoding":"inplace","label":"struct SwapUtils.Swap","members":[{"astId":30753,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"key","offset":0,"slot":"0","type":"t_bytes32"},{"astId":30755,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"initialA","offset":0,"slot":"1","type":"t_uint256"},{"astId":30757,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"futureA","offset":0,"slot":"2","type":"t_uint256"},{"astId":30759,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"initialATime","offset":0,"slot":"3","type":"t_uint256"},{"astId":30761,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"futureATime","offset":0,"slot":"4","type":"t_uint256"},{"astId":30763,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"swapFee","offset":0,"slot":"5","type":"t_uint256"},{"astId":30765,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"adminFee","offset":0,"slot":"6","type":"t_uint256"},{"astId":30768,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"lpToken","offset":0,"slot":"7","type":"t_contract(LPToken)23179"},{"astId":30772,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"pooledTokens","offset":0,"slot":"8","type":"t_array(t_contract(IERC20)10812)dyn_storage"},{"astId":30775,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"tokenPrecisionMultipliers","offset":0,"slot":"9","type":"t_array(t_uint256)dyn_storage"},{"astId":30778,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"balances","offset":0,"slot":"10","type":"t_array(t_uint256)dyn_storage"},{"astId":30781,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"adminFees","offset":0,"slot":"11","type":"t_array(t_uint256)dyn_storage"},{"astId":30783,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"disabled","offset":0,"slot":"12","type":"t_bool"},{"astId":30785,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"removeTime","offset":0,"slot":"13","type":"t_uint256"}],"numberOfBytes":"448"},"t_struct(TokenConfig)29395_storage":{"encoding":"inplace","label":"struct TokenConfig","members":[{"astId":29380,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"representation","offset":0,"slot":"0","type":"t_address"},{"astId":29382,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"representationDecimals","offset":20,"slot":"0","type":"t_uint8"},{"astId":29384,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"adopted","offset":0,"slot":"1","type":"t_address"},{"astId":29386,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"adoptedDecimals","offset":20,"slot":"1","type":"t_uint8"},{"astId":29388,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"adoptedToLocalExternalPools","offset":0,"slot":"2","type":"t_address"},{"astId":29390,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"approval","offset":20,"slot":"2","type":"t_bool"},{"astId":29392,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"cap","offset":0,"slot":"3","type":"t_uint256"},{"astId":29394,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"custodied","offset":0,"slot":"4","type":"t_uint256"}],"numberOfBytes":"160"},"t_struct(TokenId)37728_storage":{"encoding":"inplace","label":"struct TokenId","members":[{"astId":37725,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"domain","offset":0,"slot":"0","type":"t_uint32"},{"astId":37727,"contract":"contracts/core/connext/facets/InboxFacet.sol:InboxFacet","label":"id","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"events":{"Receive(uint64,address,address,address,uint256)":{"notice":"emitted when tokens are dispensed to an account on this domain         emitted both when fast liquidity is provided, and when the         transfer ultimately settles"},"Reconciled(bytes32,uint32,address,address[],uint256,address)":{"notice":"Emitted when `reconciled` is called by the bridge on the destination domain."}},"kind":"user","methods":{"handle(uint32,uint32,bytes32,bytes)":{"notice":"Handles an incoming cross-chain message."}},"notice":"This is the facet that holds all the functionality needed for Connext's messaging layer to reconcile cross-chain transfers. Authenticated (proven) message data is delivered to the `reconcile` function, where it is parsed to determine the message action. Tokens are credited (representational assets are minted, canonical tokens are unlocked from escrow) if applicable.","version":1}}},"contracts/core/connext/facets/PortalFacet.sol":{"PortalFacet":{"abi":[{"inputs":[],"name":"AssetLogic__getConfig_notRegistered","type":"error"},{"inputs":[],"name":"AssetLogic__getTokenIndexFromStableSwapPool_notExist","type":"error"},{"inputs":[],"name":"AssetLogic__handleIncomingAsset_feeOnTransferNotSupported","type":"error"},{"inputs":[],"name":"AssetLogic__handleIncomingAsset_nativeAssetNotSupported","type":"error"},{"inputs":[],"name":"BaseConnextFacet__getAdoptedAsset_assetNotFound","type":"error"},{"inputs":[],"name":"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonXCallReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__whenNotPaused_paused","type":"error"},{"inputs":[],"name":"PortalFacet__repayAavePortalFor_invalidAsset","type":"error"},{"inputs":[],"name":"PortalFacet__repayAavePortalFor_zeroAmount","type":"error"},{"inputs":[],"name":"PortalFacet__repayAavePortal_assetNotApproved","type":"error"},{"inputs":[],"name":"PortalFacet__repayAavePortal_insufficientFunds","type":"error"},{"inputs":[],"name":"PortalFacet__setAavePortalFee_invalidFee","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updated","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"AavePoolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"updated","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"AavePortalFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"transferId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"AavePortalRepayment","type":"event"},{"inputs":[],"name":"aavePool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aavePortalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transferId","type":"bytes32"}],"name":"getAavePortalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transferId","type":"bytes32"}],"name":"getAavePortalFeeDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"originDomain","type":"uint32"},{"internalType":"uint32","name":"destinationDomain","type":"uint32"},{"internalType":"uint32","name":"canonicalDomain","type":"uint32"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"delegate","type":"address"},{"internalType":"bool","name":"receiveLocal","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"slippage","type":"uint256"},{"internalType":"address","name":"originSender","type":"address"},{"internalType":"uint256","name":"bridgedAmt","type":"uint256"},{"internalType":"uint256","name":"normalizedIn","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"internalType":"struct TransferInfo","name":"_params","type":"tuple"},{"internalType":"uint256","name":"_backingAmount","type":"uint256"},{"internalType":"uint256","name":"_feeAmount","type":"uint256"},{"internalType":"uint256","name":"_maxIn","type":"uint256"}],"name":"repayAavePortal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"originDomain","type":"uint32"},{"internalType":"uint32","name":"destinationDomain","type":"uint32"},{"internalType":"uint32","name":"canonicalDomain","type":"uint32"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"delegate","type":"address"},{"internalType":"bool","name":"receiveLocal","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"slippage","type":"uint256"},{"internalType":"address","name":"originSender","type":"address"},{"internalType":"uint256","name":"bridgedAmt","type":"uint256"},{"internalType":"uint256","name":"normalizedIn","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"internalType":"struct TransferInfo","name":"_params","type":"tuple"},{"internalType":"address","name":"_portalAsset","type":"address"},{"internalType":"uint256","name":"_backingAmount","type":"uint256"},{"internalType":"uint256","name":"_feeAmount","type":"uint256"}],"name":"repayAavePortalFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_aavePool","type":"address"}],"name":"setAavePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_aavePortalFeeNumerator","type":"uint256"}],"name":"setAavePortalFee","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"events":{"AavePoolUpdated(address,address)":{"params":{"caller":"- The account that called the function","updated":"- The updated address"}},"AavePortalFeeUpdated(uint256,address)":{"params":{"caller":"- The account that called the function","updated":"- The updated fee numerator"}},"AavePortalRepayment(bytes32,address,uint256,uint256,address)":{"params":{"amount":"- The amount that was repaid","asset":"- The asset that was repaid","fee":"- The fee amount that was repaid","transferId":"- The transfer debt that was repaid"}}},"kind":"dev","methods":{"repayAavePortal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256,uint256,uint256)":{"details":"The router must be approved for portal and with enough liquidity, and must be the caller of this function. If the asset is not whitelisted, must use the `repayAavePortalFor` function.","params":{"_backingAmount":"The principle to be paid (in adopted asset)","_feeAmount":"The fee to be paid (in adopted asset)","_maxIn":"The max value of the local asset to swap for the _backingAmount of adopted asset","_params":"TransferInfo associated with the transfer"}},"repayAavePortalFor((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address,uint256,uint256)":{"details":"Should always be paying in the backing asset for the aave loan. NOTE: This will *NOT* work if an asset is removed.","params":{"_backingAmount":"Amount of principle to repay","_feeAmount":"Amount of fees to repay","_params":"TransferInfo associated with the transfer","_portalAsset":"The asset you borrowed (adopted asset)"}},"setAavePool(address)":{"details":"Allows to set the aavePool to address zero to disable Aave Portal if needed","params":{"_aavePool":"The address of the Aave Pool contract"}},"setAavePortalFee(uint256)":{"params":{"_aavePortalFeeNumerator":"The new value for the Aave Portal fee numerator"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5061209a806100206000396000f3fe60806040526004361061007b5760003560e01c8063a03e4bc31161004e578063a03e4bc314610115578063b3f62fcb1461013d578063d1e5f31c1461015d578063ef1eb0c11461018a57600080fd5b806309d7ba5414610080578063349f937c146100c05780633bd30d34146100e257806375d3237114610102575b600080fd5b34801561008c57600080fd5b506100ad61009b366004611aec565b6000908152601d602052604090205490565b6040519081526020015b60405180910390f35b3480156100cc57600080fd5b506100e06100db366004611b21565b61019f565b005b3480156100ee57600080fd5b506100e06100fd366004611aec565b610284565b6100e0610110366004611b55565b61036c565b34801561012157600080fd5b50601b546040516001600160a01b0390911681526020016100b7565b34801561014957600080fd5b506100e0610158366004611bb2565b61047e565b34801561016957600080fd5b506100ad610178366004611aec565b6000908152601e602052604090205490565b34801561019657600080fd5b50601c546100ad565b336101d17fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b6001600160a01b03161415801561020c575060033360009081526014602052604090205460ff16600381111561020957610209611c06565b14155b1561022a57604051637b32c26b60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b038316908117909155604080519182523360208301527f7935dbc7e9662d3877fe03509de1a139f55a861386088919480ed3162e2976ec91015b60405180910390a150565b336102b67fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b6001600160a01b0316141580156102f1575060033360009081526014602052604090205460ff1660038111156102ee576102ee611c06565b14155b1561030f57604051637b32c26b60e01b815260040160405180910390fd5b6127108111156103325760405163f48157d160e01b815260040160405180910390fd5b601c819055604080518281523360208201527f7d403a16a513cb194fca13e6aba342102a2a11c978e12a90981891c1a19f0b6f9101610279565b6016546001190161039057604051637ce54e2d60e11b815260040160405180910390fd5b600260165560006007816103b86101808801356103b360608a0160408b01611c30565b6105df565b81526020810191909152604001600020600101546001600160a01b0316905080158015906103f85750806001600160a01b0316846001600160a01b031614155b15610416576040516339bcb9bb60e11b815260040160405180910390fd5b600061042961042487611d34565b610622565b905060006104378486611e40565b90508060000361045a576040516330d5e3e360e11b815260040160405180910390fd5b6104648382610652565b610470838686856107a3565b505060016016555050505050565b601654600119016104a257604051637ce54e2d60e11b815260040160405180910390fd5b600260165560006104c26101808601356103b36060880160408901611c30565b600081815260076020526040902060020154909150600160a01b900460ff166104fe5760405163b074ae7360e01b815260040160405180910390fd5b600061051f8261018088013561051a60608a0160408b01611c30565b6108d7565b336000908152600a602090815260408083206001600160a01b0385168452909152902054909150838110156105675760405163badaeb5960e01b815260040160405180910390fd5b600061057561042489611d34565b905060008061058f86866105898b8d611e40565b8a6108ee565b909250905061059e8285611e53565b336000908152600a602090815260408083206001600160a01b038a1684529091529020556105ce818a8a866107a3565b505060016016555050505050505050565b6000828260405160200161060392919091825263ffffffff16602082015260400190565b6040516020818303038152906040528051906020012090505b92915050565b6000816040516020016106359190611eb6565b604051602081830303815290604052805190602001209050919050565b8060000361065e575050565b6001600160a01b03821661068557604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156106ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f29190611fb0565b90506107096001600160a01b038316333086610941565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa158015610751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107759190611fb0565b61077f9190611e53565b1461079d57604051630e40773560e21b815260040160405180910390fd5b50505050565b6000818152601d6020526040812080548592906107c1908490611e53565b90915550506000818152601e6020526040812080548492906107e4908490611e53565b9091555050601b546001600160a01b0316610801858260006109ac565b61081585826108108688611e40565b610acb565b60405163d65dc7a160e01b81526001600160a01b038681166004830152602482018690526044820185905282169063d65dc7a190606401600060405180830381600087803b15801561086657600080fd5b505af115801561087a573d6000803e3d6000fd5b5050604080516001600160a01b0389168152602081018890529081018690523360608201528492507f54b01a5ae4ec60eeeef60570103ba1a5de0999725219c02b2baf1b706625bb08915060800160405180910390a25050505050565b60006108e68484846000610b7d565b949350505050565b60008060006108fc87610bb8565b60018101549091506001600160a01b0390811690871681036109245785935091506109389050565b6109318888838989610c00565b9350935050505b94509492505050565b6040516001600160a01b038085166024830152831660448201526064810182905261079d9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610d66565b801580610a265750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015610a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a249190611fb0565b155b610a965760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084015b60405180910390fd5b6040516001600160a01b038316602482015260448101829052610ac690849063095ea7b360e01b90606401610975565b505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b409190611fb0565b610b4a9190611e40565b6040516001600160a01b03851660248201526044810182905290915061079d90859063095ea7b360e01b90606401610975565b600481015460009063ffffffff90811690841603610b9c5750826108e6565b610ba585610bb8565b546001600160a01b031695945050505050565b6000818152600760205260408120600180820154839291600160a01b90910460ff161015610bf95760405163618cca3f60e11b815260040160405180910390fd5b9392505050565b600085815260186020526040812081908190610c1b81610e38565b15610c4d57610c41610c2d8a8a610e55565b610c378b8a610e55565b8391908989610ed5565b87935093505050610d5c565b6000610c588a610bb8565b600201546001600160a01b03908116915081908a90610c7b9082168360006109ac565b610c8f6001600160a01b038216838a610acb565b60006001600160a01b038416635428c1178b8e8e8d610cb0610e1042611e40565b6040516001600160e01b031960e088901b16815260048101959095526001600160a01b0393841660248601529290911660448401526064830152608482015260a4016020604051808303816000875af1158015610d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d359190611fb0565b9050610d4c6001600160a01b0383168460006109ac565b9650899550610d5c945050505050565b9550959350505050565b6000610dbb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111de9092919063ffffffff16565b805190915015610ac65780806020019051810190610dd99190611fc9565b610ac65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a8d565b600c81015460009060ff1615801561061c57505060080154151590565b60008281526019602090815260408083206001600160a01b0385168085529083528184205486855260189093529083206008018054849360ff1692919083908110610ea257610ea2611fe6565b6000918252602090912001546001600160a01b0316146108e65760405163054e442960e41b815260040160405180910390fd5b600c85015460009060ff1615610f1d5760405162461bcd60e51b815260206004820152600d60248201526c191a5cd8589b1959081c1bdbdb609a1b6044820152606401610a8d565b85600a018460ff1681548110610f3557610f35611fe6565b9060005260206000200154831115610f885760405162461bcd60e51b81526020600482015260166024820152756d6f7265207468616e20706f6f6c2062616c616e636560501b6044820152606401610a8d565b600080600088600a01805480602002602001604051908101604052809291908181526020018280548015610fdb57602002820191906000526020600020905b815481526020019060010190808311610fc7575b50505050509050610fef89898989856111ed565b9093509150848311156110315760405162461bcd60e51b815260206004820152600a6024820152690c8f0407c40dac2f088f60b31b6044820152606401610a8d565b6000896009018960ff168154811061104b5761104b611fe6565b90600052602060002001546402540be4008b600601548561106c9190611ffc565b6110769190612013565b6110809190612013565b90508084838b60ff168151811061109957611099611fe6565b60200260200101516110ab9190611e40565b6110b59190611e53565b8a600a018a60ff16815481106110cd576110cd611fe6565b906000526020600020018190555086828960ff16815181106110f1576110f1611fe6565b60200260200101516111039190611e53565b8a600a018960ff168154811061111b5761111b611fe6565b600091825260209091200155801561118057808a600b018a60ff168154811061114657611146611fe6565b906000526020600020015461115b9190611e40565b8a600b018a60ff168154811061117357611173611fe6565b6000918252602090912001555b895460408051868152602081018a905260ff8c8116828401528b16606082015290513392917f28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df320919081900360800190a3509198975050505050505050565b60606108e68484600085611438565b6000808460ff168660ff16036112455760405162461bcd60e51b815260206004820152601760248201527f636f6d7061726520746f6b656e20746f20697473656c660000000000000000006044820152606401610a8d565b60008760090180548060200260200160405190810160405280929190818152602001828054801561129557602002820191906000526020600020905b815481526020019060010190808311611281575b5050505050905060006112a88583611513565b905080518860ff161080156112c0575080518760ff16105b6113015760405162461bcd60e51b8152602060048201526012602482015271696e646578206f7574206f662072616e676560701b6044820152606401610a8d565b600061130c8a61161e565b9050600061131a8383611629565b9050838960ff168151811061133157611331611fe6565b6020026020010151886113449190611ffc565b838a60ff168151811061135957611359611fe6565b602002602001015161136b9190611e53565b838a60ff168151811061138057611380611fe6565b602002602001018181525050600061139a838c86856117d6565b9050838b60ff16815181106113b1576113b1611fe6565b60200260200101518160016113c69190611e40565b6113d09190611e53565b96506402540be4008c60050154886113e89190611ffc565b6113f29190612013565b9550848b60ff168151811061140957611409611fe6565b6020026020010151868861141d9190611e40565b6114279190612013565b965050505050509550959350505050565b6060824710156114995760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a8d565b600080866001600160a01b031685876040516114b59190612035565b60006040518083038185875af1925050503d80600081146114f2576040519150601f19603f3d011682016040523d82523d6000602084013e6114f7565b606091505b5091509150611508878383876119c5565b979650505050505050565b815181516060919081146115605760405162461bcd60e51b81526020600482015260146024820152736d69736d61746368206d756c7469706c6965727360601b6044820152606401610a8d565b60008167ffffffffffffffff81111561157b5761157b611c4b565b6040519080825280602002602001820160405280156115a4578160200160208202803683370190505b50905060005b82811015611615578481815181106115c4576115c4611fe6565b60200260200101518682815181106115de576115de611fe6565b60200260200101516115f09190611ffc565b82828151811061160257611602611fe6565b60209081029190910101526001016115aa565b50949350505050565b600061061c82611a3e565b815160009081805b828110156116685785818151811061164b5761164b611fe6565b60200260200101518261165e9190611e40565b9150600101611631565b508060000361167c5760009250505061061c565b6000818161168a8588611ffc565b905060005b610100811015611797578260005b878110156116e857878b82815181106116b8576116b8611fe6565b60200260200101516116ca9190611ffc565b6116d48684611ffc565b6116de9190612013565b915060010161169d565b50839450808760016116fa9190611e40565b6117049190611ffc565b6064856117118287611e53565b61171b9190611ffc565b6117259190612013565b61172f9190611e40565b8461173a8984611ffc565b60646117468a88611ffc565b6117509190612013565b61175a9190611e40565b6117649190611ffc565b61176e9190612013565b935061177a8486611a87565b1561178e578397505050505050505061061c565b5060010161168f565b5060405162461bcd60e51b81526020600482015260136024820152724420646f6573206e6f7420636f6e766572676560681b6044820152606401610a8d565b815160009060ff8516811161181f5760405162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08199bdd5b99608a1b6044820152606401610a8d565b8260008061182d848a611ffc565b905060005b848110156118af578860ff1681146118a75787818151811061185657611856611fe6565b6020026020010151836118699190611e40565b92508488828151811061187e5761187e611fe6565b60200260200101516118909190611ffc565b61189a8886611ffc565b6118a49190612013565b93505b600101611832565b506118ba8482611ffc565b60646118c68886611ffc565b6118d09190611ffc565b6118da9190612013565b92506000816118ea606489611ffc565b6118f49190612013565b6118fe9084611e40565b9050600087815b61010081101561197c5781925089848360026119219190611ffc565b61192b9190611e40565b6119359190611e53565b876119408480611ffc565b61194a9190611e40565b6119549190612013565b91506119608284611a87565b15611974575096506108e695505050505050565b600101611905565b5060405162461bcd60e51b815260206004820152601e60248201527f417070726f78696d6174696f6e20646964206e6f7420636f6e766572676500006044820152606401610a8d565b60608315611a34578251600003611a2d576001600160a01b0385163b611a2d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a8d565b50816108e6565b6108e68383611a9d565b600481015460028201546001830154909190808314801590611a5f57508142105b15611a80576000846003015490508083038142038502428503840201049350505b5050919050565b60006002611a958484611ac7565b109392505050565b815115611aad5781518083602001fd5b8060405162461bcd60e51b8152600401610a8d9190612051565b600081831115611ae257611adb8284611e53565b905061061c565b610bf98383611e53565b600060208284031215611afe57600080fd5b5035919050565b80356001600160a01b0381168114611b1c57600080fd5b919050565b600060208284031215611b3357600080fd5b610bf982611b05565b60006101a08284031215611b4f57600080fd5b50919050565b60008060008060808587031215611b6b57600080fd5b843567ffffffffffffffff811115611b8257600080fd5b611b8e87828801611b3c565b945050611b9d60208601611b05565b93969395505050506040820135916060013590565b60008060008060808587031215611bc857600080fd5b843567ffffffffffffffff811115611bdf57600080fd5b611beb87828801611b3c565b97602087013597506040870135966060013595509350505050565b634e487b7160e01b600052602160045260246000fd5b803563ffffffff81168114611b1c57600080fd5b600060208284031215611c4257600080fd5b610bf982611c1c565b634e487b7160e01b600052604160045260246000fd5b6040516101a0810167ffffffffffffffff81118282101715611c8557611c85611c4b565b60405290565b8015158114611c9957600080fd5b50565b8035611b1c81611c8b565b600082601f830112611cb857600080fd5b813567ffffffffffffffff80821115611cd357611cd3611c4b565b604051601f8301601f19908116603f01168101908282118183101715611cfb57611cfb611c4b565b81604052838152866020858801011115611d1457600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006101a08236031215611d4757600080fd5b611d4f611c61565b611d5883611c1c565b8152611d6660208401611c1c565b6020820152611d7760408401611c1c565b6040820152611d8860608401611b05565b6060820152611d9960808401611b05565b6080820152611daa60a08401611c9c565b60a082015260c083013567ffffffffffffffff811115611dc957600080fd5b611dd536828601611ca7565b60c08301525060e083013560e0820152610100611df3818501611b05565b9082015261012083810135908201526101408084013590820152610160808401359082015261018092830135928101929092525090565b634e487b7160e01b600052601160045260246000fd5b8082018082111561061c5761061c611e2a565b8181038181111561061c5761061c611e2a565b60005b83811015611e81578181015183820152602001611e69565b50506000910152565b60008151808452611ea2816020860160208601611e66565b601f01601f19169290920160200192915050565b60208152611ecd60208201835163ffffffff169052565b60006020830151611ee6604084018263ffffffff169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160a01b03811660a08401525060a083015180151560c08401525060c08301516101a08060e0850152611f4d6101c0850183611e8a565b60e086015161010086810191909152860151909250610120611f79818701836001600160a01b03169052565b8601516101408681019190915286015161016080870191909152860151610180808701919091529095015193019290925250919050565b600060208284031215611fc257600080fd5b5051919050565b600060208284031215611fdb57600080fd5b8151610bf981611c8b565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761061c5761061c611e2a565b60008261203057634e487b7160e01b600052601260045260246000fd5b500490565b60008251612047818460208701611e66565b9190910192915050565b602081526000610bf96020830184611e8a56fea2646970667358221220435414d19a516483a5bf09ee82445bb9569fdec76d4f7422de7909f26178a7b464736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x209A DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA03E4BC3 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xA03E4BC3 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0xB3F62FCB EQ PUSH2 0x13D JUMPI DUP1 PUSH4 0xD1E5F31C EQ PUSH2 0x15D JUMPI DUP1 PUSH4 0xEF1EB0C1 EQ PUSH2 0x18A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9D7BA54 EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x349F937C EQ PUSH2 0xC0 JUMPI DUP1 PUSH4 0x3BD30D34 EQ PUSH2 0xE2 JUMPI DUP1 PUSH4 0x75D32371 EQ PUSH2 0x102 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0x1AEC JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE0 PUSH2 0xDB CALLDATASIZE PUSH1 0x4 PUSH2 0x1B21 JUMP JUMPDEST PUSH2 0x19F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE0 PUSH2 0xFD CALLDATASIZE PUSH1 0x4 PUSH2 0x1AEC JUMP JUMPDEST PUSH2 0x284 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x110 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B55 JUMP JUMPDEST PUSH2 0x36C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1B SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x149 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE0 PUSH2 0x158 CALLDATASIZE PUSH1 0x4 PUSH2 0x1BB2 JUMP JUMPDEST PUSH2 0x47E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0x178 CALLDATASIZE PUSH1 0x4 PUSH2 0x1AEC JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x196 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1C SLOAD PUSH2 0xAD JUMP JUMPDEST CALLER PUSH2 0x1D1 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x20C JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x209 JUMPI PUSH2 0x209 PUSH2 0x1C06 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x22A JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE CALLER PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x7935DBC7E9662D3877FE03509DE1A139F55A861386088919480ED3162E2976EC SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST CALLER PUSH2 0x2B6 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x2F1 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2EE JUMPI PUSH2 0x2EE PUSH2 0x1C06 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x30F JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2710 DUP2 GT ISZERO PUSH2 0x332 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF48157D1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x7D403A16A513CB194FCA13E6ABA342102A2A11C978E12A90981891C1A19F0B6F SWAP2 ADD PUSH2 0x279 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 NOT ADD PUSH2 0x390 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE PUSH1 0x0 PUSH1 0x7 DUP2 PUSH2 0x3B8 PUSH2 0x180 DUP9 ADD CALLDATALOAD PUSH2 0x3B3 PUSH1 0x60 DUP11 ADD PUSH1 0x40 DUP12 ADD PUSH2 0x1C30 JUMP JUMPDEST PUSH2 0x5DF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3F8 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST ISZERO PUSH2 0x416 JUMPI PUSH1 0x40 MLOAD PUSH4 0x39BCB9BB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x429 PUSH2 0x424 DUP8 PUSH2 0x1D34 JUMP JUMPDEST PUSH2 0x622 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x437 DUP5 DUP7 PUSH2 0x1E40 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x45A JUMPI PUSH1 0x40 MLOAD PUSH4 0x30D5E3E3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x464 DUP4 DUP3 PUSH2 0x652 JUMP JUMPDEST PUSH2 0x470 DUP4 DUP7 DUP7 DUP6 PUSH2 0x7A3 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x16 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 NOT ADD PUSH2 0x4A2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE PUSH1 0x0 PUSH2 0x4C2 PUSH2 0x180 DUP7 ADD CALLDATALOAD PUSH2 0x3B3 PUSH1 0x60 DUP9 ADD PUSH1 0x40 DUP10 ADD PUSH2 0x1C30 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x4FE JUMPI PUSH1 0x40 MLOAD PUSH4 0xB074AE73 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x51F DUP3 PUSH2 0x180 DUP9 ADD CALLDATALOAD PUSH2 0x51A PUSH1 0x60 DUP11 ADD PUSH1 0x40 DUP12 ADD PUSH2 0x1C30 JUMP JUMPDEST PUSH2 0x8D7 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP4 DUP2 LT ISZERO PUSH2 0x567 JUMPI PUSH1 0x40 MLOAD PUSH4 0xBADAEB59 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x575 PUSH2 0x424 DUP10 PUSH2 0x1D34 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x58F DUP7 DUP7 PUSH2 0x589 DUP12 DUP14 PUSH2 0x1E40 JUMP JUMPDEST DUP11 PUSH2 0x8EE JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x59E DUP3 DUP6 PUSH2 0x1E53 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE PUSH2 0x5CE DUP2 DUP11 DUP11 DUP7 PUSH2 0x7A3 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x16 SSTORE POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x603 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH4 0xFFFFFFFF AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x635 SWAP2 SWAP1 PUSH2 0x1EB6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x65E JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x685 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2A38B133 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP3 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6F2 SWAP2 SWAP1 PUSH2 0x1FB0 JUMP JUMPDEST SWAP1 POP PUSH2 0x709 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP7 PUSH2 0x941 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP4 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x751 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x775 SWAP2 SWAP1 PUSH2 0x1FB0 JUMP JUMPDEST PUSH2 0x77F SWAP2 SWAP1 PUSH2 0x1E53 JUMP JUMPDEST EQ PUSH2 0x79D JUMPI PUSH1 0x40 MLOAD PUSH4 0xE407735 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1D PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP6 SWAP3 SWAP1 PUSH2 0x7C1 SWAP1 DUP5 SWAP1 PUSH2 0x1E53 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1E PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x7E4 SWAP1 DUP5 SWAP1 PUSH2 0x1E53 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x801 DUP6 DUP3 PUSH1 0x0 PUSH2 0x9AC JUMP JUMPDEST PUSH2 0x815 DUP6 DUP3 PUSH2 0x810 DUP7 DUP9 PUSH2 0x1E40 JUMP JUMPDEST PUSH2 0xACB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD65DC7A1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD DUP6 SWAP1 MSTORE DUP3 AND SWAP1 PUSH4 0xD65DC7A1 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x866 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x87A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE CALLER PUSH1 0x60 DUP3 ADD MSTORE DUP5 SWAP3 POP PUSH32 0x54B01A5AE4EC60EEEEF60570103BA1A5DE0999725219C02B2BAF1B706625BB08 SWAP2 POP PUSH1 0x80 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8E6 DUP5 DUP5 DUP5 PUSH1 0x0 PUSH2 0xB7D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x8FC DUP8 PUSH2 0xBB8 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP8 AND DUP2 SUB PUSH2 0x924 JUMPI DUP6 SWAP4 POP SWAP2 POP PUSH2 0x938 SWAP1 POP JUMP JUMPDEST PUSH2 0x931 DUP9 DUP9 DUP4 DUP10 DUP10 PUSH2 0xC00 JUMP JUMPDEST SWAP4 POP SWAP4 POP POP POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x79D SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0xD66 JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0xA26 JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA00 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA24 SWAP2 SWAP1 PUSH2 0x1FB0 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0xA96 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH22 0x20746F206E6F6E2D7A65726F20616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0xAC6 SWAP1 DUP5 SWAP1 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x975 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP4 SWAP2 DUP7 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB1C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB40 SWAP2 SWAP1 PUSH2 0x1FB0 JUMP JUMPDEST PUSH2 0xB4A SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH2 0x79D SWAP1 DUP6 SWAP1 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x975 JUMP JUMPDEST PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP5 AND SUB PUSH2 0xB9C JUMPI POP DUP3 PUSH2 0x8E6 JUMP JUMPDEST PUSH2 0xBA5 DUP6 PUSH2 0xBB8 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 DUP1 DUP3 ADD SLOAD DUP4 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0xFF AND LT ISZERO PUSH2 0xBF9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x618CCA3F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 PUSH2 0xC1B DUP2 PUSH2 0xE38 JUMP JUMPDEST ISZERO PUSH2 0xC4D JUMPI PUSH2 0xC41 PUSH2 0xC2D DUP11 DUP11 PUSH2 0xE55 JUMP JUMPDEST PUSH2 0xC37 DUP12 DUP11 PUSH2 0xE55 JUMP JUMPDEST DUP4 SWAP2 SWAP1 DUP10 DUP10 PUSH2 0xED5 JUMP JUMPDEST DUP8 SWAP4 POP SWAP4 POP POP POP PUSH2 0xD5C JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC58 DUP11 PUSH2 0xBB8 JUMP JUMPDEST PUSH1 0x2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 POP DUP2 SWAP1 DUP11 SWAP1 PUSH2 0xC7B SWAP1 DUP3 AND DUP4 PUSH1 0x0 PUSH2 0x9AC JUMP JUMPDEST PUSH2 0xC8F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP4 DUP11 PUSH2 0xACB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH4 0x5428C117 DUP12 DUP15 DUP15 DUP14 PUSH2 0xCB0 PUSH2 0xE10 TIMESTAMP PUSH2 0x1E40 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD11 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD35 SWAP2 SWAP1 PUSH2 0x1FB0 JUMP JUMPDEST SWAP1 POP PUSH2 0xD4C PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP5 PUSH1 0x0 PUSH2 0x9AC JUMP JUMPDEST SWAP7 POP DUP10 SWAP6 POP PUSH2 0xD5C SWAP5 POP POP POP POP POP JUMP JUMPDEST SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDBB DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x11DE SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0xAC6 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xDD9 SWAP2 SWAP1 PUSH2 0x1FC9 JUMP JUMPDEST PUSH2 0xAC6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA8D JUMP JUMPDEST PUSH1 0xC DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x61C JUMPI POP POP PUSH1 0x8 ADD SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD DUP7 DUP6 MSTORE PUSH1 0x18 SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 PUSH1 0x8 ADD DUP1 SLOAD DUP5 SWAP4 PUSH1 0xFF AND SWAP3 SWAP2 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0xEA2 JUMPI PUSH2 0xEA2 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x8E6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54E4429 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xF1D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x191A5CD8589B1959081C1BDBDB PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST DUP6 PUSH1 0xA ADD DUP5 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0xF35 JUMPI PUSH2 0xF35 PUSH2 0x1FE6 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP4 GT ISZERO PUSH2 0xF88 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x6D6F7265207468616E20706F6F6C2062616C616E6365 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP9 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xFDB JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xFC7 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0xFEF DUP10 DUP10 DUP10 DUP10 DUP6 PUSH2 0x11ED JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP DUP5 DUP4 GT ISZERO PUSH2 0x1031 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0xC8F0407C40DAC2F088F PUSH1 0xB3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST PUSH1 0x0 DUP10 PUSH1 0x9 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x104B JUMPI PUSH2 0x104B PUSH2 0x1FE6 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH5 0x2540BE400 DUP12 PUSH1 0x6 ADD SLOAD DUP6 PUSH2 0x106C SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x1076 SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST PUSH2 0x1080 SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST SWAP1 POP DUP1 DUP5 DUP4 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x1099 JUMPI PUSH2 0x1099 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x10AB SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST PUSH2 0x10B5 SWAP2 SWAP1 PUSH2 0x1E53 JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x10CD JUMPI PUSH2 0x10CD PUSH2 0x1FE6 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP7 DUP3 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x10F1 JUMPI PUSH2 0x10F1 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1103 SWAP2 SWAP1 PUSH2 0x1E53 JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x111B JUMPI PUSH2 0x111B PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE DUP1 ISZERO PUSH2 0x1180 JUMPI DUP1 DUP11 PUSH1 0xB ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x1146 JUMPI PUSH2 0x1146 PUSH2 0x1FE6 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x115B SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST DUP11 PUSH1 0xB ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x1173 JUMPI PUSH2 0x1173 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE JUMPDEST DUP10 SLOAD PUSH1 0x40 DUP1 MLOAD DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP11 SWAP1 MSTORE PUSH1 0xFF DUP13 DUP2 AND DUP3 DUP5 ADD MSTORE DUP12 AND PUSH1 0x60 DUP3 ADD MSTORE SWAP1 MLOAD CALLER SWAP3 SWAP2 PUSH32 0x28D4CF2D5709DA3B474B5F05CFD7083FAFFD601F9500D1F8439B8A13EC7DF320 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP SWAP2 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x8E6 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x1438 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0xFF AND DUP7 PUSH1 0xFF AND SUB PUSH2 0x1245 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x636F6D7061726520746F6B656E20746F20697473656C66000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST PUSH1 0x0 DUP8 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1295 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1281 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x12A8 DUP6 DUP4 PUSH2 0x1513 JUMP JUMPDEST SWAP1 POP DUP1 MLOAD DUP9 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x12C0 JUMPI POP DUP1 MLOAD DUP8 PUSH1 0xFF AND LT JUMPDEST PUSH2 0x1301 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x696E646578206F7574206F662072616E6765 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x130C DUP11 PUSH2 0x161E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x131A DUP4 DUP4 PUSH2 0x1629 JUMP JUMPDEST SWAP1 POP DUP4 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x1331 JUMPI PUSH2 0x1331 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH2 0x1344 SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x1359 JUMPI PUSH2 0x1359 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x136B SWAP2 SWAP1 PUSH2 0x1E53 JUMP JUMPDEST DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x1380 JUMPI PUSH2 0x1380 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x139A DUP4 DUP13 DUP7 DUP6 PUSH2 0x17D6 JUMP JUMPDEST SWAP1 POP DUP4 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x13B1 JUMPI PUSH2 0x13B1 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x1 PUSH2 0x13C6 SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST PUSH2 0x13D0 SWAP2 SWAP1 PUSH2 0x1E53 JUMP JUMPDEST SWAP7 POP PUSH5 0x2540BE400 DUP13 PUSH1 0x5 ADD SLOAD DUP9 PUSH2 0x13E8 SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x13F2 SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST SWAP6 POP DUP5 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x1409 JUMPI PUSH2 0x1409 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP9 PUSH2 0x141D SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST PUSH2 0x1427 SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST SWAP7 POP POP POP POP POP POP SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x1499 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA8D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x14B5 SWAP2 SWAP1 PUSH2 0x2035 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x14F2 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x14F7 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1508 DUP8 DUP4 DUP4 DUP8 PUSH2 0x19C5 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH1 0x60 SWAP2 SWAP1 DUP2 EQ PUSH2 0x1560 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x6D69736D61746368206D756C7469706C69657273 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x157B JUMPI PUSH2 0x157B PUSH2 0x1C4B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x15A4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1615 JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x15C4 JUMPI PUSH2 0x15C4 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x15DE JUMPI PUSH2 0x15DE PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x15F0 SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1602 JUMPI PUSH2 0x1602 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x15AA JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x61C DUP3 PUSH2 0x1A3E JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP2 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1668 JUMPI DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x164B JUMPI PUSH2 0x164B PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH2 0x165E SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x1631 JUMP JUMPDEST POP DUP1 PUSH1 0x0 SUB PUSH2 0x167C JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x61C JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 PUSH2 0x168A DUP6 DUP9 PUSH2 0x1FFC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x1797 JUMPI DUP3 PUSH1 0x0 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0x16E8 JUMPI DUP8 DUP12 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x16B8 JUMPI PUSH2 0x16B8 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x16CA SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x16D4 DUP7 DUP5 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x16DE SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x169D JUMP JUMPDEST POP DUP4 SWAP5 POP DUP1 DUP8 PUSH1 0x1 PUSH2 0x16FA SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST PUSH2 0x1704 SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH1 0x64 DUP6 PUSH2 0x1711 DUP3 DUP8 PUSH2 0x1E53 JUMP JUMPDEST PUSH2 0x171B SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x1725 SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST PUSH2 0x172F SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST DUP5 PUSH2 0x173A DUP10 DUP5 PUSH2 0x1FFC JUMP JUMPDEST PUSH1 0x64 PUSH2 0x1746 DUP11 DUP9 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x1750 SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST PUSH2 0x175A SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST PUSH2 0x1764 SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x176E SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST SWAP4 POP PUSH2 0x177A DUP5 DUP7 PUSH2 0x1A87 JUMP JUMPDEST ISZERO PUSH2 0x178E JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x61C JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x168F JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x4420646F6573206E6F7420636F6E7665726765 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF DUP6 AND DUP2 GT PUSH2 0x181F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x151BDAD95B881B9BDD08199BDD5B99 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST DUP3 PUSH1 0x0 DUP1 PUSH2 0x182D DUP5 DUP11 PUSH2 0x1FFC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x18AF JUMPI DUP9 PUSH1 0xFF AND DUP2 EQ PUSH2 0x18A7 JUMPI DUP8 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1856 JUMPI PUSH2 0x1856 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x1869 SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST SWAP3 POP DUP5 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x187E JUMPI PUSH2 0x187E PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1890 SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x189A DUP9 DUP7 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x18A4 SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST SWAP4 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1832 JUMP JUMPDEST POP PUSH2 0x18BA DUP5 DUP3 PUSH2 0x1FFC JUMP JUMPDEST PUSH1 0x64 PUSH2 0x18C6 DUP9 DUP7 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x18D0 SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x18DA SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST SWAP3 POP PUSH1 0x0 DUP2 PUSH2 0x18EA PUSH1 0x64 DUP10 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x18F4 SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST PUSH2 0x18FE SWAP1 DUP5 PUSH2 0x1E40 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP8 DUP2 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x197C JUMPI DUP2 SWAP3 POP DUP10 DUP5 DUP4 PUSH1 0x2 PUSH2 0x1921 SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x192B SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST PUSH2 0x1935 SWAP2 SWAP1 PUSH2 0x1E53 JUMP JUMPDEST DUP8 PUSH2 0x1940 DUP5 DUP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x194A SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST PUSH2 0x1954 SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST SWAP2 POP PUSH2 0x1960 DUP3 DUP5 PUSH2 0x1A87 JUMP JUMPDEST ISZERO PUSH2 0x1974 JUMPI POP SWAP7 POP PUSH2 0x8E6 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1905 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x417070726F78696D6174696F6E20646964206E6F7420636F6E76657267650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1A34 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x1A2D JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x1A2D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST POP DUP2 PUSH2 0x8E6 JUMP JUMPDEST PUSH2 0x8E6 DUP4 DUP4 PUSH2 0x1A9D JUMP JUMPDEST PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x2 DUP3 ADD SLOAD PUSH1 0x1 DUP4 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP1 DUP4 EQ DUP1 ISZERO SWAP1 PUSH2 0x1A5F JUMPI POP DUP2 TIMESTAMP LT JUMPDEST ISZERO PUSH2 0x1A80 JUMPI PUSH1 0x0 DUP5 PUSH1 0x3 ADD SLOAD SWAP1 POP DUP1 DUP4 SUB DUP2 TIMESTAMP SUB DUP6 MUL TIMESTAMP DUP6 SUB DUP5 MUL ADD DIV SWAP4 POP POP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH2 0x1A95 DUP5 DUP5 PUSH2 0x1AC7 JUMP JUMPDEST LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x1AAD JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA8D SWAP2 SWAP1 PUSH2 0x2051 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 GT ISZERO PUSH2 0x1AE2 JUMPI PUSH2 0x1ADB DUP3 DUP5 PUSH2 0x1E53 JUMP JUMPDEST SWAP1 POP PUSH2 0x61C JUMP JUMPDEST PUSH2 0xBF9 DUP4 DUP4 PUSH2 0x1E53 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1AFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1B1C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1B33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBF9 DUP3 PUSH2 0x1B05 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1B4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1B6B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1B82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B8E DUP8 DUP3 DUP9 ADD PUSH2 0x1B3C JUMP JUMPDEST SWAP5 POP POP PUSH2 0x1B9D PUSH1 0x20 DUP7 ADD PUSH2 0x1B05 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1BC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1BDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1BEB DUP8 DUP3 DUP9 ADD PUSH2 0x1B3C JUMP JUMPDEST SWAP8 PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP8 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP7 PUSH1 0x60 ADD CALLDATALOAD SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1B1C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1C42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBF9 DUP3 PUSH2 0x1C1C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1A0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1C85 JUMPI PUSH2 0x1C85 PUSH2 0x1C4B JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1C99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1B1C DUP2 PUSH2 0x1C8B JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1CB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1CD3 JUMPI PUSH2 0x1CD3 PUSH2 0x1C4B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x1CFB JUMPI PUSH2 0x1CFB PUSH2 0x1C4B JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x1D14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 CALLDATASIZE SUB SLT ISZERO PUSH2 0x1D47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D4F PUSH2 0x1C61 JUMP JUMPDEST PUSH2 0x1D58 DUP4 PUSH2 0x1C1C JUMP JUMPDEST DUP2 MSTORE PUSH2 0x1D66 PUSH1 0x20 DUP5 ADD PUSH2 0x1C1C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x1D77 PUSH1 0x40 DUP5 ADD PUSH2 0x1C1C JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x1D88 PUSH1 0x60 DUP5 ADD PUSH2 0x1B05 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x1D99 PUSH1 0x80 DUP5 ADD PUSH2 0x1B05 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x1DAA PUSH1 0xA0 DUP5 ADD PUSH2 0x1C9C JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1DC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1DD5 CALLDATASIZE DUP3 DUP7 ADD PUSH2 0x1CA7 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 DUP4 ADD CALLDATALOAD PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x1DF3 DUP2 DUP6 ADD PUSH2 0x1B05 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 DUP4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x140 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x160 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x180 SWAP3 DUP4 ADD CALLDATALOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x61C JUMPI PUSH2 0x61C PUSH2 0x1E2A JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x61C JUMPI PUSH2 0x61C PUSH2 0x1E2A JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1E81 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1E69 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1EA2 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1E66 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH2 0x1ECD PUSH1 0x20 DUP3 ADD DUP4 MLOAD PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1EE6 PUSH1 0x40 DUP5 ADD DUP3 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x80 DUP5 ADD MSTORE POP PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD MLOAD DUP1 ISZERO ISZERO PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x1A0 DUP1 PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1F4D PUSH2 0x1C0 DUP6 ADD DUP4 PUSH2 0x1E8A JUMP JUMPDEST PUSH1 0xE0 DUP7 ADD MLOAD PUSH2 0x100 DUP7 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP7 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x120 PUSH2 0x1F79 DUP2 DUP8 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP7 ADD MLOAD PUSH2 0x140 DUP7 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP7 ADD MLOAD PUSH2 0x160 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP7 ADD MLOAD PUSH2 0x180 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP6 ADD MLOAD SWAP4 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1FC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1FDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xBF9 DUP2 PUSH2 0x1C8B JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x61C JUMPI PUSH2 0x61C PUSH2 0x1E2A JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2030 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x2047 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1E66 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xBF9 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1E8A JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER SLOAD EQ 0xD1 SWAP11 MLOAD PUSH5 0x83A5BF09EE DUP3 DIFFICULTY JUMPDEST 0xB9 JUMP SWAP16 0xDE 0xC7 PUSH14 0x4F7422DE7909F26178A7B464736F PUSH13 0x63430008110033000000000000 ","sourceMap":"509:8581:73:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_backLoan_17352":{"entryPoint":1955,"id":17352,"parameterSlots":4,"returnSlots":0},"@_calculateSwapInv_32094":{"entryPoint":4589,"id":32094,"parameterSlots":5,"returnSlots":2},"@_calculateTransferId_13998":{"entryPoint":1570,"id":13998,"parameterSlots":1,"returnSlots":1},"@_callOptionalReturn_11153":{"entryPoint":3430,"id":11153,"parameterSlots":2,"returnSlots":0},"@_getAPrecise_27444":{"entryPoint":6718,"id":27444,"parameterSlots":1,"returnSlots":1},"@_getAPrecise_30831":{"entryPoint":5662,"id":30831,"parameterSlots":1,"returnSlots":1},"@_getLocalAsset_14039":{"entryPoint":2263,"id":14039,"parameterSlots":3,"returnSlots":1},"@_revert_11483":{"entryPoint":6813,"id":11483,"parameterSlots":2,"returnSlots":0},"@_swapAssetOut_28253":{"entryPoint":3072,"id":28253,"parameterSlots":5,"returnSlots":2},"@_xp_31527":{"entryPoint":5395,"id":31527,"parameterSlots":2,"returnSlots":1},"@aavePool_17037":{"entryPoint":null,"id":17037,"parameterSlots":0,"returnSlots":1},"@aavePortalFee_17046":{"entryPoint":null,"id":17046,"parameterSlots":0,"returnSlots":1},"@bytes32ToAddress_50187":{"entryPoint":null,"id":50187,"parameterSlots":1,"returnSlots":1},"@calculateCanonicalHash_28598":{"entryPoint":1503,"id":28598,"parameterSlots":2,"returnSlots":1},"@connextStorage_29544":{"entryPoint":null,"id":29544,"parameterSlots":0,"returnSlots":1},"@contractOwner_29645":{"entryPoint":null,"id":29645,"parameterSlots":0,"returnSlots":1},"@diamondStorage_29603":{"entryPoint":null,"id":29603,"parameterSlots":0,"returnSlots":1},"@difference_30644":{"entryPoint":6855,"id":30644,"parameterSlots":2,"returnSlots":1},"@exists_34243":{"entryPoint":3640,"id":34243,"parameterSlots":1,"returnSlots":1},"@functionCallWithValue_11308":{"entryPoint":5176,"id":11308,"parameterSlots":4,"returnSlots":1},"@functionCall_11244":{"entryPoint":4574,"id":11244,"parameterSlots":3,"returnSlots":1},"@getAavePortalDebt_17015":{"entryPoint":null,"id":17015,"parameterSlots":1,"returnSlots":1},"@getAavePortalFeeDebt_17028":{"entryPoint":null,"id":17028,"parameterSlots":1,"returnSlots":1},"@getConfig_27701":{"entryPoint":3000,"id":27701,"parameterSlots":1,"returnSlots":1},"@getD_31463":{"entryPoint":5673,"id":31463,"parameterSlots":2,"returnSlots":1},"@getLocalAsset_28579":{"entryPoint":2941,"id":28579,"parameterSlots":4,"returnSlots":1},"@getTokenIndexFromStableSwapPool_27854":{"entryPoint":3669,"id":27854,"parameterSlots":2,"returnSlots":1},"@getYD_31307":{"entryPoint":6102,"id":31307,"parameterSlots":4,"returnSlots":1},"@handleIncomingAsset_27772":{"entryPoint":1618,"id":27772,"parameterSlots":2,"returnSlots":0},"@isContract_11172":{"entryPoint":null,"id":11172,"parameterSlots":1,"returnSlots":1},"@repayAavePortalFor_17278":{"entryPoint":876,"id":17278,"parameterSlots":4,"returnSlots":0},"@repayAavePortal_17200":{"entryPoint":1150,"id":17200,"parameterSlots":4,"returnSlots":0},"@safeApprove_10975":{"entryPoint":2476,"id":10975,"parameterSlots":3,"returnSlots":0},"@safeIncreaseAllowance_11011":{"entryPoint":2763,"id":11011,"parameterSlots":3,"returnSlots":0},"@safeTransferFrom_10931":{"entryPoint":2369,"id":10931,"parameterSlots":4,"returnSlots":0},"@setAavePool_17067":{"entryPoint":415,"id":17067,"parameterSlots":1,"returnSlots":0},"@setAavePortalFee_17096":{"entryPoint":644,"id":17096,"parameterSlots":1,"returnSlots":0},"@swapFromLocalAssetIfNeededForExactOut_28021":{"entryPoint":2286,"id":28021,"parameterSlots":4,"returnSlots":2},"@swapInternalOut_33016":{"entryPoint":3797,"id":33016,"parameterSlots":5,"returnSlots":1},"@verifyCallResultFromTarget_11439":{"entryPoint":6597,"id":11439,"parameterSlots":4,"returnSlots":1},"@within1_30620":{"entryPoint":6791,"id":30620,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":6917,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bool":{"entryPoint":7324,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes":{"entryPoint":7335,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_TransferInfo_calldata":{"entryPoint":6972,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":6945,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":8137,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":6892,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_TransferInfo_$29351_calldata_ptrt_addresst_uint256t_uint256":{"entryPoint":6997,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_struct$_TransferInfo_$29351_calldata_ptrt_uint256t_uint256t_uint256":{"entryPoint":7090,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":8112,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32":{"entryPoint":7216,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint32":{"entryPoint":7196,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_bytes":{"entryPoint":7818,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":8245,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256_t_address__to_t_address_t_uint256_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint32__to_t_bytes32_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":8273,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4406c1e208c572ab95085aa92d385cddaa474035df8163bb5a0a2c403800484d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_487af3faa279cd1df07c0d1897feb1b8a94d7a439a5fcca3a8f816912eee96c2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d9b2e328f4209b3735eca19488e3afd57ba32c456d5e1a010a233e595f7b0b47__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e8a8072019b830892cd4deb2ef47d584565d80622116f9044abf32bb22a18a4f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_eb80683d13e69e40aa7f57ce3558136d2c8c4c88f682021213f7030fc3d23afd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_TransferInfo_$29351_memory_ptr__to_t_struct$_TransferInfo_$29351_memory_ptr__fromStack_reversed":{"entryPoint":7862,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_address_t_address_t_uint256_t_uint256__to_t_uint256_t_address_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint8_t_uint8__to_t_uint256_t_uint256_t_uint128_t_uint128__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_uint32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_memory":{"entryPoint":7265,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":7744,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":8211,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":8188,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":7763,"id":null,"parameterSlots":2,"returnSlots":1},"convert_t_struct$_TransferInfo_$29351_calldata_ptr_to_t_struct$_TransferInfo_$29351_memory_ptr":{"entryPoint":7476,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":7782,"id":null,"parameterSlots":3,"returnSlots":0},"panic_error_0x11":{"entryPoint":7722,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":7174,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":8166,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":7243,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_bool":{"entryPoint":7307,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:18053:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"84:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:181"},"nodeType":"YulFunctionCall","src":"132:12:181"},"nodeType":"YulExpressionStatement","src":"132:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"105:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"114:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"101:3:181"},"nodeType":"YulFunctionCall","src":"101:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"126:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"97:3:181"},"nodeType":"YulFunctionCall","src":"97:32:181"},"nodeType":"YulIf","src":"94:52:181"},{"nodeType":"YulAssignment","src":"155:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"178:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"165:12:181"},"nodeType":"YulFunctionCall","src":"165:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"155:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"50:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"61:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"73:6:181","type":""}],"src":"14:180:181"},{"body":{"nodeType":"YulBlock","src":"300:76:181","statements":[{"nodeType":"YulAssignment","src":"310:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"322:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"333:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"318:3:181"},"nodeType":"YulFunctionCall","src":"318:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"310:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"352:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"363:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"345:6:181"},"nodeType":"YulFunctionCall","src":"345:25:181"},"nodeType":"YulExpressionStatement","src":"345:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"269:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"280:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"291:4:181","type":""}],"src":"199:177:181"},{"body":{"nodeType":"YulBlock","src":"430:124:181","statements":[{"nodeType":"YulAssignment","src":"440:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"462:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"449:12:181"},"nodeType":"YulFunctionCall","src":"449:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"440:5:181"}]},{"body":{"nodeType":"YulBlock","src":"532:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"541:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"544:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"534:6:181"},"nodeType":"YulFunctionCall","src":"534:12:181"},"nodeType":"YulExpressionStatement","src":"534:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"491:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"502:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"517:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"522:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"513:3:181"},"nodeType":"YulFunctionCall","src":"513:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"526:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"509:3:181"},"nodeType":"YulFunctionCall","src":"509:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"498:3:181"},"nodeType":"YulFunctionCall","src":"498:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"488:2:181"},"nodeType":"YulFunctionCall","src":"488:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"481:6:181"},"nodeType":"YulFunctionCall","src":"481:50:181"},"nodeType":"YulIf","src":"478:70:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"409:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"420:5:181","type":""}],"src":"381:173:181"},{"body":{"nodeType":"YulBlock","src":"629:116:181","statements":[{"body":{"nodeType":"YulBlock","src":"675:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"684:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"687:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"677:6:181"},"nodeType":"YulFunctionCall","src":"677:12:181"},"nodeType":"YulExpressionStatement","src":"677:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"650:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"659:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"646:3:181"},"nodeType":"YulFunctionCall","src":"646:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"671:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"642:3:181"},"nodeType":"YulFunctionCall","src":"642:32:181"},"nodeType":"YulIf","src":"639:52:181"},{"nodeType":"YulAssignment","src":"700:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"729:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"710:18:181"},"nodeType":"YulFunctionCall","src":"710:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"700:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"595:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"606:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"618:6:181","type":""}],"src":"559:186:181"},{"body":{"nodeType":"YulBlock","src":"820:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"866:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"875:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"878:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"868:6:181"},"nodeType":"YulFunctionCall","src":"868:12:181"},"nodeType":"YulExpressionStatement","src":"868:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"841:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"850:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"837:3:181"},"nodeType":"YulFunctionCall","src":"837:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"862:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"833:3:181"},"nodeType":"YulFunctionCall","src":"833:32:181"},"nodeType":"YulIf","src":"830:52:181"},{"nodeType":"YulAssignment","src":"891:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"914:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"901:12:181"},"nodeType":"YulFunctionCall","src":"901:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"891:6:181"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"786:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"797:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"809:6:181","type":""}],"src":"750:180:181"},{"body":{"nodeType":"YulBlock","src":"1010:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"1050:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1059:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1062:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1052:6:181"},"nodeType":"YulFunctionCall","src":"1052:12:181"},"nodeType":"YulExpressionStatement","src":"1052:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"1031:3:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1036:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1027:3:181"},"nodeType":"YulFunctionCall","src":"1027:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"1045:3:181","type":"","value":"416"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1023:3:181"},"nodeType":"YulFunctionCall","src":"1023:26:181"},"nodeType":"YulIf","src":"1020:46:181"},{"nodeType":"YulAssignment","src":"1075:15:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"1084:6:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1075:5:181"}]}]},"name":"abi_decode_struct_TransferInfo_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"984:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"992:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1000:5:181","type":""}],"src":"935:161:181"},{"body":{"nodeType":"YulBlock","src":"1255:424:181","statements":[{"body":{"nodeType":"YulBlock","src":"1302:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1311:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1314:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1304:6:181"},"nodeType":"YulFunctionCall","src":"1304:12:181"},"nodeType":"YulExpressionStatement","src":"1304:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1276:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1285:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1272:3:181"},"nodeType":"YulFunctionCall","src":"1272:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1297:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1268:3:181"},"nodeType":"YulFunctionCall","src":"1268:33:181"},"nodeType":"YulIf","src":"1265:53:181"},{"nodeType":"YulVariableDeclaration","src":"1327:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1354:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1341:12:181"},"nodeType":"YulFunctionCall","src":"1341:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1331:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1407:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1416:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1419:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1409:6:181"},"nodeType":"YulFunctionCall","src":"1409:12:181"},"nodeType":"YulExpressionStatement","src":"1409:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1379:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1387:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1376:2:181"},"nodeType":"YulFunctionCall","src":"1376:30:181"},"nodeType":"YulIf","src":"1373:50:181"},{"nodeType":"YulAssignment","src":"1432:82:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1486:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1497:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1482:3:181"},"nodeType":"YulFunctionCall","src":"1482:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1506:7:181"}],"functionName":{"name":"abi_decode_struct_TransferInfo_calldata","nodeType":"YulIdentifier","src":"1442:39:181"},"nodeType":"YulFunctionCall","src":"1442:72:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1432:6:181"}]},{"nodeType":"YulAssignment","src":"1523:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1556:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1567:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1552:3:181"},"nodeType":"YulFunctionCall","src":"1552:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1533:18:181"},"nodeType":"YulFunctionCall","src":"1533:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1523:6:181"}]},{"nodeType":"YulAssignment","src":"1580:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1607:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1618:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1603:3:181"},"nodeType":"YulFunctionCall","src":"1603:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1590:12:181"},"nodeType":"YulFunctionCall","src":"1590:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1580:6:181"}]},{"nodeType":"YulAssignment","src":"1631:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1658:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1669:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1654:3:181"},"nodeType":"YulFunctionCall","src":"1654:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1641:12:181"},"nodeType":"YulFunctionCall","src":"1641:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1631:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_TransferInfo_$29351_calldata_ptrt_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1197:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1208:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1220:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1228:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1236:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1244:6:181","type":""}],"src":"1101:578:181"},{"body":{"nodeType":"YulBlock","src":"1728:60:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1745:3:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1754:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1769:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1774:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1765:3:181"},"nodeType":"YulFunctionCall","src":"1765:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1778:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1761:3:181"},"nodeType":"YulFunctionCall","src":"1761:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1750:3:181"},"nodeType":"YulFunctionCall","src":"1750:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1738:6:181"},"nodeType":"YulFunctionCall","src":"1738:44:181"},"nodeType":"YulExpressionStatement","src":"1738:44:181"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1712:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"1719:3:181","type":""}],"src":"1684:104:181"},{"body":{"nodeType":"YulBlock","src":"1894:102:181","statements":[{"nodeType":"YulAssignment","src":"1904:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1916:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1927:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1912:3:181"},"nodeType":"YulFunctionCall","src":"1912:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1904:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1946:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1961:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1977:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1982:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1973:3:181"},"nodeType":"YulFunctionCall","src":"1973:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1986:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1969:3:181"},"nodeType":"YulFunctionCall","src":"1969:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1957:3:181"},"nodeType":"YulFunctionCall","src":"1957:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1939:6:181"},"nodeType":"YulFunctionCall","src":"1939:51:181"},"nodeType":"YulExpressionStatement","src":"1939:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1863:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1874:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1885:4:181","type":""}],"src":"1793:203:181"},{"body":{"nodeType":"YulBlock","src":"2155:418:181","statements":[{"body":{"nodeType":"YulBlock","src":"2202:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2211:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2214:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2204:6:181"},"nodeType":"YulFunctionCall","src":"2204:12:181"},"nodeType":"YulExpressionStatement","src":"2204:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2176:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2185:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2172:3:181"},"nodeType":"YulFunctionCall","src":"2172:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2197:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2168:3:181"},"nodeType":"YulFunctionCall","src":"2168:33:181"},"nodeType":"YulIf","src":"2165:53:181"},{"nodeType":"YulVariableDeclaration","src":"2227:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2254:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2241:12:181"},"nodeType":"YulFunctionCall","src":"2241:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2231:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2307:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2316:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2319:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2309:6:181"},"nodeType":"YulFunctionCall","src":"2309:12:181"},"nodeType":"YulExpressionStatement","src":"2309:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2279:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2287:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2276:2:181"},"nodeType":"YulFunctionCall","src":"2276:30:181"},"nodeType":"YulIf","src":"2273:50:181"},{"nodeType":"YulAssignment","src":"2332:82:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2386:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"2397:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2382:3:181"},"nodeType":"YulFunctionCall","src":"2382:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2406:7:181"}],"functionName":{"name":"abi_decode_struct_TransferInfo_calldata","nodeType":"YulIdentifier","src":"2342:39:181"},"nodeType":"YulFunctionCall","src":"2342:72:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2332:6:181"}]},{"nodeType":"YulAssignment","src":"2423:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2450:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2461:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2446:3:181"},"nodeType":"YulFunctionCall","src":"2446:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2433:12:181"},"nodeType":"YulFunctionCall","src":"2433:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2423:6:181"}]},{"nodeType":"YulAssignment","src":"2474:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2501:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2512:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2497:3:181"},"nodeType":"YulFunctionCall","src":"2497:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2484:12:181"},"nodeType":"YulFunctionCall","src":"2484:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2474:6:181"}]},{"nodeType":"YulAssignment","src":"2525:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2552:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2563:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2548:3:181"},"nodeType":"YulFunctionCall","src":"2548:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2535:12:181"},"nodeType":"YulFunctionCall","src":"2535:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2525:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_TransferInfo_$29351_calldata_ptrt_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2097:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2108:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2120:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2128:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2136:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2144:6:181","type":""}],"src":"2001:572:181"},{"body":{"nodeType":"YulBlock","src":"2610:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2627:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2634:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2639:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2630:3:181"},"nodeType":"YulFunctionCall","src":"2630:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2620:6:181"},"nodeType":"YulFunctionCall","src":"2620:31:181"},"nodeType":"YulExpressionStatement","src":"2620:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2667:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2670:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2660:6:181"},"nodeType":"YulFunctionCall","src":"2660:15:181"},"nodeType":"YulExpressionStatement","src":"2660:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2691:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2694:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2684:6:181"},"nodeType":"YulFunctionCall","src":"2684:15:181"},"nodeType":"YulExpressionStatement","src":"2684:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"2578:127:181"},{"body":{"nodeType":"YulBlock","src":"2839:175:181","statements":[{"nodeType":"YulAssignment","src":"2849:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2861:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2872:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2857:3:181"},"nodeType":"YulFunctionCall","src":"2857:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2849:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"2884:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2902:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2907:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2898:3:181"},"nodeType":"YulFunctionCall","src":"2898:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2911:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2894:3:181"},"nodeType":"YulFunctionCall","src":"2894:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2888:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2929:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2944:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2952:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2940:3:181"},"nodeType":"YulFunctionCall","src":"2940:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2922:6:181"},"nodeType":"YulFunctionCall","src":"2922:34:181"},"nodeType":"YulExpressionStatement","src":"2922:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2976:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2987:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2972:3:181"},"nodeType":"YulFunctionCall","src":"2972:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2996:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3004:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2992:3:181"},"nodeType":"YulFunctionCall","src":"2992:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2965:6:181"},"nodeType":"YulFunctionCall","src":"2965:43:181"},"nodeType":"YulExpressionStatement","src":"2965:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2800:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2811:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2819:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2830:4:181","type":""}],"src":"2710:304:181"},{"body":{"nodeType":"YulBlock","src":"3148:145:181","statements":[{"nodeType":"YulAssignment","src":"3158:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3170:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3181:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3166:3:181"},"nodeType":"YulFunctionCall","src":"3166:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3158:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3200:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"3211:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3193:6:181"},"nodeType":"YulFunctionCall","src":"3193:25:181"},"nodeType":"YulExpressionStatement","src":"3193:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3238:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3249:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3234:3:181"},"nodeType":"YulFunctionCall","src":"3234:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3258:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3274:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3279:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3270:3:181"},"nodeType":"YulFunctionCall","src":"3270:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3283:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3266:3:181"},"nodeType":"YulFunctionCall","src":"3266:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3254:3:181"},"nodeType":"YulFunctionCall","src":"3254:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3227:6:181"},"nodeType":"YulFunctionCall","src":"3227:60:181"},"nodeType":"YulExpressionStatement","src":"3227:60:181"}]},"name":"abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3109:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3120:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3128:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3139:4:181","type":""}],"src":"3019:274:181"},{"body":{"nodeType":"YulBlock","src":"3346:115:181","statements":[{"nodeType":"YulAssignment","src":"3356:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3378:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3365:12:181"},"nodeType":"YulFunctionCall","src":"3365:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3356:5:181"}]},{"body":{"nodeType":"YulBlock","src":"3439:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3448:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3451:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3441:6:181"},"nodeType":"YulFunctionCall","src":"3441:12:181"},"nodeType":"YulExpressionStatement","src":"3441:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3407:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3418:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"3425:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3414:3:181"},"nodeType":"YulFunctionCall","src":"3414:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3404:2:181"},"nodeType":"YulFunctionCall","src":"3404:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3397:6:181"},"nodeType":"YulFunctionCall","src":"3397:41:181"},"nodeType":"YulIf","src":"3394:61:181"}]},"name":"abi_decode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3325:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3336:5:181","type":""}],"src":"3298:163:181"},{"body":{"nodeType":"YulBlock","src":"3535:115:181","statements":[{"body":{"nodeType":"YulBlock","src":"3581:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3590:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3593:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3583:6:181"},"nodeType":"YulFunctionCall","src":"3583:12:181"},"nodeType":"YulExpressionStatement","src":"3583:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3556:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3565:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3552:3:181"},"nodeType":"YulFunctionCall","src":"3552:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3577:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3548:3:181"},"nodeType":"YulFunctionCall","src":"3548:32:181"},"nodeType":"YulIf","src":"3545:52:181"},{"nodeType":"YulAssignment","src":"3606:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3634:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"3616:17:181"},"nodeType":"YulFunctionCall","src":"3616:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3606:6:181"}]}]},"name":"abi_decode_tuple_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3501:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3512:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3524:6:181","type":""}],"src":"3466:184:181"},{"body":{"nodeType":"YulBlock","src":"3687:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3704:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3711:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"3716:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3707:3:181"},"nodeType":"YulFunctionCall","src":"3707:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3697:6:181"},"nodeType":"YulFunctionCall","src":"3697:31:181"},"nodeType":"YulExpressionStatement","src":"3697:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3744:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3747:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3737:6:181"},"nodeType":"YulFunctionCall","src":"3737:15:181"},"nodeType":"YulExpressionStatement","src":"3737:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3768:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3771:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3761:6:181"},"nodeType":"YulFunctionCall","src":"3761:15:181"},"nodeType":"YulExpressionStatement","src":"3761:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"3655:127:181"},{"body":{"nodeType":"YulBlock","src":"3828:209:181","statements":[{"nodeType":"YulAssignment","src":"3838:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3854:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3848:5:181"},"nodeType":"YulFunctionCall","src":"3848:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3838:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3866:37:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3888:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3896:6:181","type":"","value":"0x01a0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3884:3:181"},"nodeType":"YulFunctionCall","src":"3884:19:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"3870:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3978:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"3980:16:181"},"nodeType":"YulFunctionCall","src":"3980:18:181"},"nodeType":"YulExpressionStatement","src":"3980:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3921:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"3933:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3918:2:181"},"nodeType":"YulFunctionCall","src":"3918:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3957:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"3969:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3954:2:181"},"nodeType":"YulFunctionCall","src":"3954:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"3915:2:181"},"nodeType":"YulFunctionCall","src":"3915:62:181"},"nodeType":"YulIf","src":"3912:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4016:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4020:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4009:6:181"},"nodeType":"YulFunctionCall","src":"4009:22:181"},"nodeType":"YulExpressionStatement","src":"4009:22:181"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"3817:6:181","type":""}],"src":"3787:250:181"},{"body":{"nodeType":"YulBlock","src":"4084:76:181","statements":[{"body":{"nodeType":"YulBlock","src":"4138:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4147:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4150:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4140:6:181"},"nodeType":"YulFunctionCall","src":"4140:12:181"},"nodeType":"YulExpressionStatement","src":"4140:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4107:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4128:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4121:6:181"},"nodeType":"YulFunctionCall","src":"4121:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4114:6:181"},"nodeType":"YulFunctionCall","src":"4114:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4104:2:181"},"nodeType":"YulFunctionCall","src":"4104:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4097:6:181"},"nodeType":"YulFunctionCall","src":"4097:40:181"},"nodeType":"YulIf","src":"4094:60:181"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4073:5:181","type":""}],"src":"4042:118:181"},{"body":{"nodeType":"YulBlock","src":"4211:82:181","statements":[{"nodeType":"YulAssignment","src":"4221:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4243:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4230:12:181"},"nodeType":"YulFunctionCall","src":"4230:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"4221:5:181"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4281:5:181"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"4259:21:181"},"nodeType":"YulFunctionCall","src":"4259:28:181"},"nodeType":"YulExpressionStatement","src":"4259:28:181"}]},"name":"abi_decode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"4190:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"4201:5:181","type":""}],"src":"4165:128:181"},{"body":{"nodeType":"YulBlock","src":"4350:666:181","statements":[{"body":{"nodeType":"YulBlock","src":"4399:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4408:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4411:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4401:6:181"},"nodeType":"YulFunctionCall","src":"4401:12:181"},"nodeType":"YulExpressionStatement","src":"4401:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4378:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4386:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4374:3:181"},"nodeType":"YulFunctionCall","src":"4374:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"4393:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4370:3:181"},"nodeType":"YulFunctionCall","src":"4370:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4363:6:181"},"nodeType":"YulFunctionCall","src":"4363:35:181"},"nodeType":"YulIf","src":"4360:55:181"},{"nodeType":"YulVariableDeclaration","src":"4424:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4447:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4434:12:181"},"nodeType":"YulFunctionCall","src":"4434:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4428:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4463:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4473:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"4467:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4514:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"4516:16:181"},"nodeType":"YulFunctionCall","src":"4516:18:181"},"nodeType":"YulExpressionStatement","src":"4516:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"4506:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"4510:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4503:2:181"},"nodeType":"YulFunctionCall","src":"4503:10:181"},"nodeType":"YulIf","src":"4500:36:181"},{"nodeType":"YulVariableDeclaration","src":"4545:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4559:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4555:3:181"},"nodeType":"YulFunctionCall","src":"4555:7:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"4549:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4571:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4591:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4585:5:181"},"nodeType":"YulFunctionCall","src":"4585:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"4575:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4603:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4625:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"4649:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4653:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4645:3:181"},"nodeType":"YulFunctionCall","src":"4645:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"4660:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4641:3:181"},"nodeType":"YulFunctionCall","src":"4641:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"4665:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4637:3:181"},"nodeType":"YulFunctionCall","src":"4637:31:181"},{"name":"_3","nodeType":"YulIdentifier","src":"4670:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4633:3:181"},"nodeType":"YulFunctionCall","src":"4633:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4621:3:181"},"nodeType":"YulFunctionCall","src":"4621:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"4607:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4733:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"4735:16:181"},"nodeType":"YulFunctionCall","src":"4735:18:181"},"nodeType":"YulExpressionStatement","src":"4735:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4692:10:181"},{"name":"_2","nodeType":"YulIdentifier","src":"4704:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4689:2:181"},"nodeType":"YulFunctionCall","src":"4689:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4712:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"4724:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4709:2:181"},"nodeType":"YulFunctionCall","src":"4709:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"4686:2:181"},"nodeType":"YulFunctionCall","src":"4686:46:181"},"nodeType":"YulIf","src":"4683:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4771:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4775:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4764:6:181"},"nodeType":"YulFunctionCall","src":"4764:22:181"},"nodeType":"YulExpressionStatement","src":"4764:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4802:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4810:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4795:6:181"},"nodeType":"YulFunctionCall","src":"4795:18:181"},"nodeType":"YulExpressionStatement","src":"4795:18:181"},{"body":{"nodeType":"YulBlock","src":"4861:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4870:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4873:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4863:6:181"},"nodeType":"YulFunctionCall","src":"4863:12:181"},"nodeType":"YulExpressionStatement","src":"4863:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4836:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4844:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4832:3:181"},"nodeType":"YulFunctionCall","src":"4832:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"4849:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4828:3:181"},"nodeType":"YulFunctionCall","src":"4828:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"4856:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4825:2:181"},"nodeType":"YulFunctionCall","src":"4825:35:181"},"nodeType":"YulIf","src":"4822:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4903:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4911:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4899:3:181"},"nodeType":"YulFunctionCall","src":"4899:17:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4922:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4930:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4918:3:181"},"nodeType":"YulFunctionCall","src":"4918:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4937:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"4886:12:181"},"nodeType":"YulFunctionCall","src":"4886:54:181"},"nodeType":"YulExpressionStatement","src":"4886:54:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4964:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4972:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4960:3:181"},"nodeType":"YulFunctionCall","src":"4960:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"4977:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4956:3:181"},"nodeType":"YulFunctionCall","src":"4956:26:181"},{"kind":"number","nodeType":"YulLiteral","src":"4984:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4949:6:181"},"nodeType":"YulFunctionCall","src":"4949:37:181"},"nodeType":"YulExpressionStatement","src":"4949:37:181"},{"nodeType":"YulAssignment","src":"4995:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"5004:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"4995:5:181"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"4324:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"4332:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"4340:5:181","type":""}],"src":"4298:718:181"},{"body":{"nodeType":"YulBlock","src":"5149:1234:181","statements":[{"body":{"nodeType":"YulBlock","src":"5202:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5211:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5214:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5204:6:181"},"nodeType":"YulFunctionCall","src":"5204:12:181"},"nodeType":"YulExpressionStatement","src":"5204:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"5170:12:181"},"nodeType":"YulFunctionCall","src":"5170:14:181"},{"name":"value","nodeType":"YulIdentifier","src":"5186:5:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5166:3:181"},"nodeType":"YulFunctionCall","src":"5166:26:181"},{"kind":"number","nodeType":"YulLiteral","src":"5194:6:181","type":"","value":"0x01a0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5162:3:181"},"nodeType":"YulFunctionCall","src":"5162:39:181"},"nodeType":"YulIf","src":"5159:59:181"},{"nodeType":"YulVariableDeclaration","src":"5227:32:181","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"5242:15:181"},"nodeType":"YulFunctionCall","src":"5242:17:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"5231:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5275:7:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5302:5:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"5284:17:181"},"nodeType":"YulFunctionCall","src":"5284:24:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5268:6:181"},"nodeType":"YulFunctionCall","src":"5268:41:181"},"nodeType":"YulExpressionStatement","src":"5268:41:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5329:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"5338:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5325:3:181"},"nodeType":"YulFunctionCall","src":"5325:16:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5365:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5372:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5361:3:181"},"nodeType":"YulFunctionCall","src":"5361:14:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"5343:17:181"},"nodeType":"YulFunctionCall","src":"5343:33:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5318:6:181"},"nodeType":"YulFunctionCall","src":"5318:59:181"},"nodeType":"YulExpressionStatement","src":"5318:59:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5397:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"5406:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5393:3:181"},"nodeType":"YulFunctionCall","src":"5393:16:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5433:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5440:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5429:3:181"},"nodeType":"YulFunctionCall","src":"5429:14:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"5411:17:181"},"nodeType":"YulFunctionCall","src":"5411:33:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5386:6:181"},"nodeType":"YulFunctionCall","src":"5386:59:181"},"nodeType":"YulExpressionStatement","src":"5386:59:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5465:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"5474:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5461:3:181"},"nodeType":"YulFunctionCall","src":"5461:16:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5502:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5509:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5498:3:181"},"nodeType":"YulFunctionCall","src":"5498:14:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5479:18:181"},"nodeType":"YulFunctionCall","src":"5479:34:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5454:6:181"},"nodeType":"YulFunctionCall","src":"5454:60:181"},"nodeType":"YulExpressionStatement","src":"5454:60:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5534:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"5543:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5530:3:181"},"nodeType":"YulFunctionCall","src":"5530:17:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5572:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5579:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5568:3:181"},"nodeType":"YulFunctionCall","src":"5568:15:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5549:18:181"},"nodeType":"YulFunctionCall","src":"5549:35:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5523:6:181"},"nodeType":"YulFunctionCall","src":"5523:62:181"},"nodeType":"YulExpressionStatement","src":"5523:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5605:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"5614:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5601:3:181"},"nodeType":"YulFunctionCall","src":"5601:17:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5640:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5647:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5636:3:181"},"nodeType":"YulFunctionCall","src":"5636:15:181"}],"functionName":{"name":"abi_decode_bool","nodeType":"YulIdentifier","src":"5620:15:181"},"nodeType":"YulFunctionCall","src":"5620:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5594:6:181"},"nodeType":"YulFunctionCall","src":"5594:59:181"},"nodeType":"YulExpressionStatement","src":"5594:59:181"},{"nodeType":"YulVariableDeclaration","src":"5662:43:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5693:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5700:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5689:3:181"},"nodeType":"YulFunctionCall","src":"5689:15:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5676:12:181"},"nodeType":"YulFunctionCall","src":"5676:29:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"5666:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5748:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5757:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5760:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5750:6:181"},"nodeType":"YulFunctionCall","src":"5750:12:181"},"nodeType":"YulExpressionStatement","src":"5750:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5720:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5728:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5717:2:181"},"nodeType":"YulFunctionCall","src":"5717:30:181"},"nodeType":"YulIf","src":"5714:50:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5784:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"5793:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5780:3:181"},"nodeType":"YulFunctionCall","src":"5780:17:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5820:5:181"},{"name":"offset","nodeType":"YulIdentifier","src":"5827:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5816:3:181"},"nodeType":"YulFunctionCall","src":"5816:18:181"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"5836:12:181"},"nodeType":"YulFunctionCall","src":"5836:14:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"5799:16:181"},"nodeType":"YulFunctionCall","src":"5799:52:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5773:6:181"},"nodeType":"YulFunctionCall","src":"5773:79:181"},"nodeType":"YulExpressionStatement","src":"5773:79:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5872:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"5881:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5868:3:181"},"nodeType":"YulFunctionCall","src":"5868:17:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5904:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5911:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5900:3:181"},"nodeType":"YulFunctionCall","src":"5900:15:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5887:12:181"},"nodeType":"YulFunctionCall","src":"5887:29:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5861:6:181"},"nodeType":"YulFunctionCall","src":"5861:56:181"},"nodeType":"YulExpressionStatement","src":"5861:56:181"},{"nodeType":"YulVariableDeclaration","src":"5926:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"5936:3:181","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5930:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5959:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5968:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5955:3:181"},"nodeType":"YulFunctionCall","src":"5955:16:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5996:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6003:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5992:3:181"},"nodeType":"YulFunctionCall","src":"5992:14:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5973:18:181"},"nodeType":"YulFunctionCall","src":"5973:34:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5948:6:181"},"nodeType":"YulFunctionCall","src":"5948:60:181"},"nodeType":"YulExpressionStatement","src":"5948:60:181"},{"nodeType":"YulVariableDeclaration","src":"6017:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6027:3:181","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"6021:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6050:7:181"},{"name":"_2","nodeType":"YulIdentifier","src":"6059:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6046:3:181"},"nodeType":"YulFunctionCall","src":"6046:16:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6081:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"6088:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6077:3:181"},"nodeType":"YulFunctionCall","src":"6077:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6064:12:181"},"nodeType":"YulFunctionCall","src":"6064:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6039:6:181"},"nodeType":"YulFunctionCall","src":"6039:54:181"},"nodeType":"YulExpressionStatement","src":"6039:54:181"},{"nodeType":"YulVariableDeclaration","src":"6102:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6112:3:181","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"6106:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6135:7:181"},{"name":"_3","nodeType":"YulIdentifier","src":"6144:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6131:3:181"},"nodeType":"YulFunctionCall","src":"6131:16:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6166:5:181"},{"name":"_3","nodeType":"YulIdentifier","src":"6173:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6162:3:181"},"nodeType":"YulFunctionCall","src":"6162:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6149:12:181"},"nodeType":"YulFunctionCall","src":"6149:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6124:6:181"},"nodeType":"YulFunctionCall","src":"6124:54:181"},"nodeType":"YulExpressionStatement","src":"6124:54:181"},{"nodeType":"YulVariableDeclaration","src":"6187:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6197:3:181","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"6191:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6220:7:181"},{"name":"_4","nodeType":"YulIdentifier","src":"6229:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6216:3:181"},"nodeType":"YulFunctionCall","src":"6216:16:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6251:5:181"},{"name":"_4","nodeType":"YulIdentifier","src":"6258:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6247:3:181"},"nodeType":"YulFunctionCall","src":"6247:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6234:12:181"},"nodeType":"YulFunctionCall","src":"6234:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6209:6:181"},"nodeType":"YulFunctionCall","src":"6209:54:181"},"nodeType":"YulExpressionStatement","src":"6209:54:181"},{"nodeType":"YulVariableDeclaration","src":"6272:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6282:3:181","type":"","value":"384"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"6276:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6305:7:181"},{"name":"_5","nodeType":"YulIdentifier","src":"6314:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6301:3:181"},"nodeType":"YulFunctionCall","src":"6301:16:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6336:5:181"},{"name":"_5","nodeType":"YulIdentifier","src":"6343:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6332:3:181"},"nodeType":"YulFunctionCall","src":"6332:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6319:12:181"},"nodeType":"YulFunctionCall","src":"6319:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6294:6:181"},"nodeType":"YulFunctionCall","src":"6294:54:181"},"nodeType":"YulExpressionStatement","src":"6294:54:181"},{"nodeType":"YulAssignment","src":"6357:20:181","value":{"name":"value_1","nodeType":"YulIdentifier","src":"6370:7:181"},"variableNames":[{"name":"converted","nodeType":"YulIdentifier","src":"6357:9:181"}]}]},"name":"convert_t_struct$_TransferInfo_$29351_calldata_ptr_to_t_struct$_TransferInfo_$29351_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5125:5:181","type":""}],"returnVariables":[{"name":"converted","nodeType":"YulTypedName","src":"5135:9:181","type":""}],"src":"5021:1362:181"},{"body":{"nodeType":"YulBlock","src":"6420:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6437:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6444:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"6449:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6440:3:181"},"nodeType":"YulFunctionCall","src":"6440:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6430:6:181"},"nodeType":"YulFunctionCall","src":"6430:31:181"},"nodeType":"YulExpressionStatement","src":"6430:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6477:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6480:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6470:6:181"},"nodeType":"YulFunctionCall","src":"6470:15:181"},"nodeType":"YulExpressionStatement","src":"6470:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6501:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6504:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6494:6:181"},"nodeType":"YulFunctionCall","src":"6494:15:181"},"nodeType":"YulExpressionStatement","src":"6494:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"6388:127:181"},{"body":{"nodeType":"YulBlock","src":"6568:77:181","statements":[{"nodeType":"YulAssignment","src":"6578:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6589:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"6592:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6585:3:181"},"nodeType":"YulFunctionCall","src":"6585:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"6578:3:181"}]},{"body":{"nodeType":"YulBlock","src":"6617:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6619:16:181"},"nodeType":"YulFunctionCall","src":"6619:18:181"},"nodeType":"YulExpressionStatement","src":"6619:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6609:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"6612:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6606:2:181"},"nodeType":"YulFunctionCall","src":"6606:10:181"},"nodeType":"YulIf","src":"6603:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"6551:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"6554:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"6560:3:181","type":""}],"src":"6520:125:181"},{"body":{"nodeType":"YulBlock","src":"6699:79:181","statements":[{"nodeType":"YulAssignment","src":"6709:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6721:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"6724:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6717:3:181"},"nodeType":"YulFunctionCall","src":"6717:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"6709:4:181"}]},{"body":{"nodeType":"YulBlock","src":"6750:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6752:16:181"},"nodeType":"YulFunctionCall","src":"6752:18:181"},"nodeType":"YulExpressionStatement","src":"6752:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"6741:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"6747:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6738:2:181"},"nodeType":"YulFunctionCall","src":"6738:11:181"},"nodeType":"YulIf","src":"6735:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"6681:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"6684:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"6690:4:181","type":""}],"src":"6650:128:181"},{"body":{"nodeType":"YulBlock","src":"6826:51:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6843:3:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6852:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"6859:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6848:3:181"},"nodeType":"YulFunctionCall","src":"6848:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6836:6:181"},"nodeType":"YulFunctionCall","src":"6836:35:181"},"nodeType":"YulExpressionStatement","src":"6836:35:181"}]},"name":"abi_encode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"6810:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"6817:3:181","type":""}],"src":"6783:94:181"},{"body":{"nodeType":"YulBlock","src":"7009:136:181","statements":[{"nodeType":"YulAssignment","src":"7019:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7031:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7042:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7027:3:181"},"nodeType":"YulFunctionCall","src":"7027:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7019:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7061:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"7072:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7054:6:181"},"nodeType":"YulFunctionCall","src":"7054:25:181"},"nodeType":"YulExpressionStatement","src":"7054:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7099:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7110:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7095:3:181"},"nodeType":"YulFunctionCall","src":"7095:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"7119:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"7127:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7115:3:181"},"nodeType":"YulFunctionCall","src":"7115:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7088:6:181"},"nodeType":"YulFunctionCall","src":"7088:51:181"},"nodeType":"YulExpressionStatement","src":"7088:51:181"}]},"name":"abi_encode_tuple_t_bytes32_t_uint32__to_t_bytes32_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6970:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6981:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6989:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7000:4:181","type":""}],"src":"6882:263:181"},{"body":{"nodeType":"YulBlock","src":"7191:50:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7208:3:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7227:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7220:6:181"},"nodeType":"YulFunctionCall","src":"7220:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7213:6:181"},"nodeType":"YulFunctionCall","src":"7213:21:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7201:6:181"},"nodeType":"YulFunctionCall","src":"7201:34:181"},"nodeType":"YulExpressionStatement","src":"7201:34:181"}]},"name":"abi_encode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"7175:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"7182:3:181","type":""}],"src":"7150:91:181"},{"body":{"nodeType":"YulBlock","src":"7312:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"7322:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7331:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"7326:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7391:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"7416:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"7421:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7412:3:181"},"nodeType":"YulFunctionCall","src":"7412:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"7435:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"7440:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7431:3:181"},"nodeType":"YulFunctionCall","src":"7431:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7425:5:181"},"nodeType":"YulFunctionCall","src":"7425:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7405:6:181"},"nodeType":"YulFunctionCall","src":"7405:39:181"},"nodeType":"YulExpressionStatement","src":"7405:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"7352:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"7355:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7349:2:181"},"nodeType":"YulFunctionCall","src":"7349:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"7363:19:181","statements":[{"nodeType":"YulAssignment","src":"7365:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"7374:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"7377:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7370:3:181"},"nodeType":"YulFunctionCall","src":"7370:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"7365:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"7345:3:181","statements":[]},"src":"7341:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"7474:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"7479:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7470:3:181"},"nodeType":"YulFunctionCall","src":"7470:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"7488:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7463:6:181"},"nodeType":"YulFunctionCall","src":"7463:27:181"},"nodeType":"YulExpressionStatement","src":"7463:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"7290:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"7295:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"7300:6:181","type":""}],"src":"7246:250:181"},{"body":{"nodeType":"YulBlock","src":"7550:221:181","statements":[{"nodeType":"YulVariableDeclaration","src":"7560:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7580:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7574:5:181"},"nodeType":"YulFunctionCall","src":"7574:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"7564:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7602:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"7607:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7595:6:181"},"nodeType":"YulFunctionCall","src":"7595:19:181"},"nodeType":"YulExpressionStatement","src":"7595:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7662:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"7669:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7658:3:181"},"nodeType":"YulFunctionCall","src":"7658:16:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7680:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"7685:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7676:3:181"},"nodeType":"YulFunctionCall","src":"7676:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"7692:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"7623:34:181"},"nodeType":"YulFunctionCall","src":"7623:76:181"},"nodeType":"YulExpressionStatement","src":"7623:76:181"},{"nodeType":"YulAssignment","src":"7708:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7723:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"7736:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"7744:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7732:3:181"},"nodeType":"YulFunctionCall","src":"7732:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7753:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7749:3:181"},"nodeType":"YulFunctionCall","src":"7749:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7728:3:181"},"nodeType":"YulFunctionCall","src":"7728:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7719:3:181"},"nodeType":"YulFunctionCall","src":"7719:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"7760:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7715:3:181"},"nodeType":"YulFunctionCall","src":"7715:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"7708:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"7527:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"7534:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"7542:3:181","type":""}],"src":"7501:270:181"},{"body":{"nodeType":"YulBlock","src":"7939:1501:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7956:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7967:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7949:6:181"},"nodeType":"YulFunctionCall","src":"7949:21:181"},"nodeType":"YulExpressionStatement","src":"7949:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8003:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7997:5:181"},"nodeType":"YulFunctionCall","src":"7997:13:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8016:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8027:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8012:3:181"},"nodeType":"YulFunctionCall","src":"8012:18:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"7979:17:181"},"nodeType":"YulFunctionCall","src":"7979:52:181"},"nodeType":"YulExpressionStatement","src":"7979:52:181"},{"nodeType":"YulVariableDeclaration","src":"8040:42:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8070:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8078:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8066:3:181"},"nodeType":"YulFunctionCall","src":"8066:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8060:5:181"},"nodeType":"YulFunctionCall","src":"8060:22:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"8044:12:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"8109:12:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8127:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8138:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8123:3:181"},"nodeType":"YulFunctionCall","src":"8123:18:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"8091:17:181"},"nodeType":"YulFunctionCall","src":"8091:51:181"},"nodeType":"YulExpressionStatement","src":"8091:51:181"},{"nodeType":"YulVariableDeclaration","src":"8151:44:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8183:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8191:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8179:3:181"},"nodeType":"YulFunctionCall","src":"8179:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8173:5:181"},"nodeType":"YulFunctionCall","src":"8173:22:181"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"8155:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"8222:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8242:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8253:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8238:3:181"},"nodeType":"YulFunctionCall","src":"8238:18:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"8204:17:181"},"nodeType":"YulFunctionCall","src":"8204:53:181"},"nodeType":"YulExpressionStatement","src":"8204:53:181"},{"nodeType":"YulVariableDeclaration","src":"8266:44:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8298:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8306:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8294:3:181"},"nodeType":"YulFunctionCall","src":"8294:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8288:5:181"},"nodeType":"YulFunctionCall","src":"8288:22:181"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"8270:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"8338:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8358:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8369:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8354:3:181"},"nodeType":"YulFunctionCall","src":"8354:19:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"8319:18:181"},"nodeType":"YulFunctionCall","src":"8319:55:181"},"nodeType":"YulExpressionStatement","src":"8319:55:181"},{"nodeType":"YulVariableDeclaration","src":"8383:45:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8415:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8423:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8411:3:181"},"nodeType":"YulFunctionCall","src":"8411:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8405:5:181"},"nodeType":"YulFunctionCall","src":"8405:23:181"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"8387:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"8456:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8476:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8487:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8472:3:181"},"nodeType":"YulFunctionCall","src":"8472:19:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"8437:18:181"},"nodeType":"YulFunctionCall","src":"8437:55:181"},"nodeType":"YulExpressionStatement","src":"8437:55:181"},{"nodeType":"YulVariableDeclaration","src":"8501:45:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8533:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8541:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8529:3:181"},"nodeType":"YulFunctionCall","src":"8529:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8523:5:181"},"nodeType":"YulFunctionCall","src":"8523:23:181"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"8505:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"8571:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8591:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8602:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8587:3:181"},"nodeType":"YulFunctionCall","src":"8587:19:181"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"8555:15:181"},"nodeType":"YulFunctionCall","src":"8555:52:181"},"nodeType":"YulExpressionStatement","src":"8555:52:181"},{"nodeType":"YulVariableDeclaration","src":"8616:45:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8648:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8656:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8644:3:181"},"nodeType":"YulFunctionCall","src":"8644:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8638:5:181"},"nodeType":"YulFunctionCall","src":"8638:23:181"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"8620:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8670:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8680:6:181","type":"","value":"0x01a0"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8674:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8706:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8717:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8702:3:181"},"nodeType":"YulFunctionCall","src":"8702:19:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8723:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8695:6:181"},"nodeType":"YulFunctionCall","src":"8695:31:181"},"nodeType":"YulExpressionStatement","src":"8695:31:181"},{"nodeType":"YulVariableDeclaration","src":"8735:67:181","value":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"8766:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8786:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8797:3:181","type":"","value":"448"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8782:3:181"},"nodeType":"YulFunctionCall","src":"8782:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"8749:16:181"},"nodeType":"YulFunctionCall","src":"8749:53:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"8739:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8811:33:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8831:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8839:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8827:3:181"},"nodeType":"YulFunctionCall","src":"8827:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8821:5:181"},"nodeType":"YulFunctionCall","src":"8821:23:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"8815:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8853:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8863:3:181","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"8857:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8886:9:181"},{"name":"_3","nodeType":"YulIdentifier","src":"8897:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8882:3:181"},"nodeType":"YulFunctionCall","src":"8882:18:181"},{"name":"_2","nodeType":"YulIdentifier","src":"8902:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8875:6:181"},"nodeType":"YulFunctionCall","src":"8875:30:181"},"nodeType":"YulExpressionStatement","src":"8875:30:181"},{"nodeType":"YulVariableDeclaration","src":"8914:44:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8946:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"8954:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8942:3:181"},"nodeType":"YulFunctionCall","src":"8942:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8936:5:181"},"nodeType":"YulFunctionCall","src":"8936:22:181"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"8918:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8967:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8977:3:181","type":"","value":"288"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"8971:2:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"9008:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9028:9:181"},{"name":"_4","nodeType":"YulIdentifier","src":"9039:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9024:3:181"},"nodeType":"YulFunctionCall","src":"9024:18:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"8989:18:181"},"nodeType":"YulFunctionCall","src":"8989:54:181"},"nodeType":"YulExpressionStatement","src":"8989:54:181"},{"nodeType":"YulVariableDeclaration","src":"9052:32:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9072:6:181"},{"name":"_4","nodeType":"YulIdentifier","src":"9080:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9068:3:181"},"nodeType":"YulFunctionCall","src":"9068:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9062:5:181"},"nodeType":"YulFunctionCall","src":"9062:22:181"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"9056:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9093:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"9103:3:181","type":"","value":"320"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"9097:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9126:9:181"},{"name":"_6","nodeType":"YulIdentifier","src":"9137:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9122:3:181"},"nodeType":"YulFunctionCall","src":"9122:18:181"},{"name":"_5","nodeType":"YulIdentifier","src":"9142:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9115:6:181"},"nodeType":"YulFunctionCall","src":"9115:30:181"},"nodeType":"YulExpressionStatement","src":"9115:30:181"},{"nodeType":"YulVariableDeclaration","src":"9154:32:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9174:6:181"},{"name":"_6","nodeType":"YulIdentifier","src":"9182:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9170:3:181"},"nodeType":"YulFunctionCall","src":"9170:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9164:5:181"},"nodeType":"YulFunctionCall","src":"9164:22:181"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"9158:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9195:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"9205:3:181","type":"","value":"352"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"9199:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9228:9:181"},{"name":"_8","nodeType":"YulIdentifier","src":"9239:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9224:3:181"},"nodeType":"YulFunctionCall","src":"9224:18:181"},{"name":"_7","nodeType":"YulIdentifier","src":"9244:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9217:6:181"},"nodeType":"YulFunctionCall","src":"9217:30:181"},"nodeType":"YulExpressionStatement","src":"9217:30:181"},{"nodeType":"YulVariableDeclaration","src":"9256:32:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9276:6:181"},{"name":"_8","nodeType":"YulIdentifier","src":"9284:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9272:3:181"},"nodeType":"YulFunctionCall","src":"9272:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9266:5:181"},"nodeType":"YulFunctionCall","src":"9266:22:181"},"variables":[{"name":"_9","nodeType":"YulTypedName","src":"9260:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9297:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"9308:3:181","type":"","value":"384"},"variables":[{"name":"_10","nodeType":"YulTypedName","src":"9301:3:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9331:9:181"},{"name":"_10","nodeType":"YulIdentifier","src":"9342:3:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9327:3:181"},"nodeType":"YulFunctionCall","src":"9327:19:181"},{"name":"_9","nodeType":"YulIdentifier","src":"9348:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9320:6:181"},"nodeType":"YulFunctionCall","src":"9320:31:181"},"nodeType":"YulExpressionStatement","src":"9320:31:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9371:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9382:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9367:3:181"},"nodeType":"YulFunctionCall","src":"9367:18:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9397:6:181"},{"name":"_10","nodeType":"YulIdentifier","src":"9405:3:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9393:3:181"},"nodeType":"YulFunctionCall","src":"9393:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9387:5:181"},"nodeType":"YulFunctionCall","src":"9387:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9360:6:181"},"nodeType":"YulFunctionCall","src":"9360:51:181"},"nodeType":"YulExpressionStatement","src":"9360:51:181"},{"nodeType":"YulAssignment","src":"9420:14:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"9428:6:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9420:4:181"}]}]},"name":"abi_encode_tuple_t_struct$_TransferInfo_$29351_memory_ptr__to_t_struct$_TransferInfo_$29351_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7908:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7919:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7930:4:181","type":""}],"src":"7776:1664:181"},{"body":{"nodeType":"YulBlock","src":"9526:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"9572:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9581:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9584:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9574:6:181"},"nodeType":"YulFunctionCall","src":"9574:12:181"},"nodeType":"YulExpressionStatement","src":"9574:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9547:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"9556:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9543:3:181"},"nodeType":"YulFunctionCall","src":"9543:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"9568:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9539:3:181"},"nodeType":"YulFunctionCall","src":"9539:32:181"},"nodeType":"YulIf","src":"9536:52:181"},{"nodeType":"YulAssignment","src":"9597:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9613:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9607:5:181"},"nodeType":"YulFunctionCall","src":"9607:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9597:6:181"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9492:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9503:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9515:6:181","type":""}],"src":"9445:184:181"},{"body":{"nodeType":"YulBlock","src":"9791:188:181","statements":[{"nodeType":"YulAssignment","src":"9801:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9813:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9824:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9809:3:181"},"nodeType":"YulFunctionCall","src":"9809:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9801:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9843:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9858:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9874:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"9879:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9870:3:181"},"nodeType":"YulFunctionCall","src":"9870:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"9883:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9866:3:181"},"nodeType":"YulFunctionCall","src":"9866:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9854:3:181"},"nodeType":"YulFunctionCall","src":"9854:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9836:6:181"},"nodeType":"YulFunctionCall","src":"9836:51:181"},"nodeType":"YulExpressionStatement","src":"9836:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9907:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9918:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9903:3:181"},"nodeType":"YulFunctionCall","src":"9903:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"9923:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9896:6:181"},"nodeType":"YulFunctionCall","src":"9896:34:181"},"nodeType":"YulExpressionStatement","src":"9896:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9950:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9961:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9946:3:181"},"nodeType":"YulFunctionCall","src":"9946:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"9966:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9939:6:181"},"nodeType":"YulFunctionCall","src":"9939:34:181"},"nodeType":"YulExpressionStatement","src":"9939:34:181"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9744:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9755:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9763:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9771:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9782:4:181","type":""}],"src":"9634:345:181"},{"body":{"nodeType":"YulBlock","src":"10169:262:181","statements":[{"nodeType":"YulAssignment","src":"10179:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10191:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10202:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10187:3:181"},"nodeType":"YulFunctionCall","src":"10187:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10179:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"10215:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10233:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"10238:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10229:3:181"},"nodeType":"YulFunctionCall","src":"10229:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"10242:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10225:3:181"},"nodeType":"YulFunctionCall","src":"10225:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10219:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10260:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10275:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10283:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10271:3:181"},"nodeType":"YulFunctionCall","src":"10271:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10253:6:181"},"nodeType":"YulFunctionCall","src":"10253:34:181"},"nodeType":"YulExpressionStatement","src":"10253:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10307:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10318:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10303:3:181"},"nodeType":"YulFunctionCall","src":"10303:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"10323:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10296:6:181"},"nodeType":"YulFunctionCall","src":"10296:34:181"},"nodeType":"YulExpressionStatement","src":"10296:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10350:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10361:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10346:3:181"},"nodeType":"YulFunctionCall","src":"10346:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"10366:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10339:6:181"},"nodeType":"YulFunctionCall","src":"10339:34:181"},"nodeType":"YulExpressionStatement","src":"10339:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10393:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10404:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10389:3:181"},"nodeType":"YulFunctionCall","src":"10389:18:181"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"10413:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10421:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10409:3:181"},"nodeType":"YulFunctionCall","src":"10409:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10382:6:181"},"nodeType":"YulFunctionCall","src":"10382:43:181"},"nodeType":"YulExpressionStatement","src":"10382:43:181"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256_t_address__to_t_address_t_uint256_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10114:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10125:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10133:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10141:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10149:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10160:4:181","type":""}],"src":"9984:447:181"},{"body":{"nodeType":"YulBlock","src":"10593:218:181","statements":[{"nodeType":"YulAssignment","src":"10603:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10615:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10626:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10611:3:181"},"nodeType":"YulFunctionCall","src":"10611:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10603:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"10638:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10656:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"10661:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10652:3:181"},"nodeType":"YulFunctionCall","src":"10652:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"10665:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10648:3:181"},"nodeType":"YulFunctionCall","src":"10648:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10642:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10683:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10698:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10706:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10694:3:181"},"nodeType":"YulFunctionCall","src":"10694:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10676:6:181"},"nodeType":"YulFunctionCall","src":"10676:34:181"},"nodeType":"YulExpressionStatement","src":"10676:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10730:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10741:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10726:3:181"},"nodeType":"YulFunctionCall","src":"10726:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10750:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10758:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10746:3:181"},"nodeType":"YulFunctionCall","src":"10746:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10719:6:181"},"nodeType":"YulFunctionCall","src":"10719:43:181"},"nodeType":"YulExpressionStatement","src":"10719:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10782:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10793:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10778:3:181"},"nodeType":"YulFunctionCall","src":"10778:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"10798:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10771:6:181"},"nodeType":"YulFunctionCall","src":"10771:34:181"},"nodeType":"YulExpressionStatement","src":"10771:34:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10546:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10557:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10565:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10573:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10584:4:181","type":""}],"src":"10436:375:181"},{"body":{"nodeType":"YulBlock","src":"10990:244:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11007:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11018:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11000:6:181"},"nodeType":"YulFunctionCall","src":"11000:21:181"},"nodeType":"YulExpressionStatement","src":"11000:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11041:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11052:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11037:3:181"},"nodeType":"YulFunctionCall","src":"11037:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11057:2:181","type":"","value":"54"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11030:6:181"},"nodeType":"YulFunctionCall","src":"11030:30:181"},"nodeType":"YulExpressionStatement","src":"11030:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11080:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11091:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11076:3:181"},"nodeType":"YulFunctionCall","src":"11076:18:181"},{"hexValue":"5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f","kind":"string","nodeType":"YulLiteral","src":"11096:34:181","type":"","value":"SafeERC20: approve from non-zero"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11069:6:181"},"nodeType":"YulFunctionCall","src":"11069:62:181"},"nodeType":"YulExpressionStatement","src":"11069:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11151:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11162:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11147:3:181"},"nodeType":"YulFunctionCall","src":"11147:18:181"},{"hexValue":"20746f206e6f6e2d7a65726f20616c6c6f77616e6365","kind":"string","nodeType":"YulLiteral","src":"11167:24:181","type":"","value":" to non-zero allowance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11140:6:181"},"nodeType":"YulFunctionCall","src":"11140:52:181"},"nodeType":"YulExpressionStatement","src":"11140:52:181"},{"nodeType":"YulAssignment","src":"11201:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11213:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11224:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11209:3:181"},"nodeType":"YulFunctionCall","src":"11209:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11201:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10967:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10981:4:181","type":""}],"src":"10816:418:181"},{"body":{"nodeType":"YulBlock","src":"11368:145:181","statements":[{"nodeType":"YulAssignment","src":"11378:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11390:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11401:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11386:3:181"},"nodeType":"YulFunctionCall","src":"11386:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11378:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11420:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11435:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11451:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"11456:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11447:3:181"},"nodeType":"YulFunctionCall","src":"11447:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"11460:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11443:3:181"},"nodeType":"YulFunctionCall","src":"11443:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11431:3:181"},"nodeType":"YulFunctionCall","src":"11431:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11413:6:181"},"nodeType":"YulFunctionCall","src":"11413:51:181"},"nodeType":"YulExpressionStatement","src":"11413:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11484:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11495:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11480:3:181"},"nodeType":"YulFunctionCall","src":"11480:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"11500:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11473:6:181"},"nodeType":"YulFunctionCall","src":"11473:34:181"},"nodeType":"YulExpressionStatement","src":"11473:34:181"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11329:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11340:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11348:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11359:4:181","type":""}],"src":"11239:274:181"},{"body":{"nodeType":"YulBlock","src":"11731:306:181","statements":[{"nodeType":"YulAssignment","src":"11741:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11753:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11764:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11749:3:181"},"nodeType":"YulFunctionCall","src":"11749:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11741:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11784:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"11795:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11777:6:181"},"nodeType":"YulFunctionCall","src":"11777:25:181"},"nodeType":"YulExpressionStatement","src":"11777:25:181"},{"nodeType":"YulVariableDeclaration","src":"11811:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11829:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"11834:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11825:3:181"},"nodeType":"YulFunctionCall","src":"11825:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"11838:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11821:3:181"},"nodeType":"YulFunctionCall","src":"11821:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11815:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11860:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11871:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11856:3:181"},"nodeType":"YulFunctionCall","src":"11856:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11880:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"11888:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11876:3:181"},"nodeType":"YulFunctionCall","src":"11876:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11849:6:181"},"nodeType":"YulFunctionCall","src":"11849:43:181"},"nodeType":"YulExpressionStatement","src":"11849:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11912:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11923:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11908:3:181"},"nodeType":"YulFunctionCall","src":"11908:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"11932:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"11940:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11928:3:181"},"nodeType":"YulFunctionCall","src":"11928:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11901:6:181"},"nodeType":"YulFunctionCall","src":"11901:43:181"},"nodeType":"YulExpressionStatement","src":"11901:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11964:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11975:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11960:3:181"},"nodeType":"YulFunctionCall","src":"11960:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"11980:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11953:6:181"},"nodeType":"YulFunctionCall","src":"11953:34:181"},"nodeType":"YulExpressionStatement","src":"11953:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12007:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12018:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12003:3:181"},"nodeType":"YulFunctionCall","src":"12003:19:181"},{"name":"value4","nodeType":"YulIdentifier","src":"12024:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11996:6:181"},"nodeType":"YulFunctionCall","src":"11996:35:181"},"nodeType":"YulExpressionStatement","src":"11996:35:181"}]},"name":"abi_encode_tuple_t_uint256_t_address_t_address_t_uint256_t_uint256__to_t_uint256_t_address_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11668:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"11679:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11687:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11695:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11703:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11711:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11722:4:181","type":""}],"src":"11518:519:181"},{"body":{"nodeType":"YulBlock","src":"12120:167:181","statements":[{"body":{"nodeType":"YulBlock","src":"12166:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12175:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12178:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12168:6:181"},"nodeType":"YulFunctionCall","src":"12168:12:181"},"nodeType":"YulExpressionStatement","src":"12168:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12141:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"12150:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12137:3:181"},"nodeType":"YulFunctionCall","src":"12137:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"12162:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12133:3:181"},"nodeType":"YulFunctionCall","src":"12133:32:181"},"nodeType":"YulIf","src":"12130:52:181"},{"nodeType":"YulVariableDeclaration","src":"12191:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12210:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12204:5:181"},"nodeType":"YulFunctionCall","src":"12204:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12195:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12251:5:181"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"12229:21:181"},"nodeType":"YulFunctionCall","src":"12229:28:181"},"nodeType":"YulExpressionStatement","src":"12229:28:181"},{"nodeType":"YulAssignment","src":"12266:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"12276:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"12266:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12086:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12097:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12109:6:181","type":""}],"src":"12042:245:181"},{"body":{"nodeType":"YulBlock","src":"12466:232:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12483:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12494:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12476:6:181"},"nodeType":"YulFunctionCall","src":"12476:21:181"},"nodeType":"YulExpressionStatement","src":"12476:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12517:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12528:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12513:3:181"},"nodeType":"YulFunctionCall","src":"12513:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12533:2:181","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12506:6:181"},"nodeType":"YulFunctionCall","src":"12506:30:181"},"nodeType":"YulExpressionStatement","src":"12506:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12556:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12567:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12552:3:181"},"nodeType":"YulFunctionCall","src":"12552:18:181"},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e","kind":"string","nodeType":"YulLiteral","src":"12572:34:181","type":"","value":"SafeERC20: ERC20 operation did n"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12545:6:181"},"nodeType":"YulFunctionCall","src":"12545:62:181"},"nodeType":"YulExpressionStatement","src":"12545:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12627:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12638:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12623:3:181"},"nodeType":"YulFunctionCall","src":"12623:18:181"},{"hexValue":"6f742073756363656564","kind":"string","nodeType":"YulLiteral","src":"12643:12:181","type":"","value":"ot succeed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12616:6:181"},"nodeType":"YulFunctionCall","src":"12616:40:181"},"nodeType":"YulExpressionStatement","src":"12616:40:181"},{"nodeType":"YulAssignment","src":"12665:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12677:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12688:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12673:3:181"},"nodeType":"YulFunctionCall","src":"12673:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12665:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12443:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12457:4:181","type":""}],"src":"12292:406:181"},{"body":{"nodeType":"YulBlock","src":"12735:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12752:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12759:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"12764:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12755:3:181"},"nodeType":"YulFunctionCall","src":"12755:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12745:6:181"},"nodeType":"YulFunctionCall","src":"12745:31:181"},"nodeType":"YulExpressionStatement","src":"12745:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12792:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"12795:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12785:6:181"},"nodeType":"YulFunctionCall","src":"12785:15:181"},"nodeType":"YulExpressionStatement","src":"12785:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12816:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12819:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12809:6:181"},"nodeType":"YulFunctionCall","src":"12809:15:181"},"nodeType":"YulExpressionStatement","src":"12809:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"12703:127:181"},{"body":{"nodeType":"YulBlock","src":"13009:163:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13026:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13037:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13019:6:181"},"nodeType":"YulFunctionCall","src":"13019:21:181"},"nodeType":"YulExpressionStatement","src":"13019:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13060:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13071:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13056:3:181"},"nodeType":"YulFunctionCall","src":"13056:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13076:2:181","type":"","value":"13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13049:6:181"},"nodeType":"YulFunctionCall","src":"13049:30:181"},"nodeType":"YulExpressionStatement","src":"13049:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13099:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13110:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13095:3:181"},"nodeType":"YulFunctionCall","src":"13095:18:181"},{"hexValue":"64697361626c656420706f6f6c","kind":"string","nodeType":"YulLiteral","src":"13115:15:181","type":"","value":"disabled pool"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13088:6:181"},"nodeType":"YulFunctionCall","src":"13088:43:181"},"nodeType":"YulExpressionStatement","src":"13088:43:181"},{"nodeType":"YulAssignment","src":"13140:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13152:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13163:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13148:3:181"},"nodeType":"YulFunctionCall","src":"13148:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13140:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12986:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13000:4:181","type":""}],"src":"12835:337:181"},{"body":{"nodeType":"YulBlock","src":"13351:172:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13368:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13379:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13361:6:181"},"nodeType":"YulFunctionCall","src":"13361:21:181"},"nodeType":"YulExpressionStatement","src":"13361:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13402:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13413:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13398:3:181"},"nodeType":"YulFunctionCall","src":"13398:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13418:2:181","type":"","value":"22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13391:6:181"},"nodeType":"YulFunctionCall","src":"13391:30:181"},"nodeType":"YulExpressionStatement","src":"13391:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13441:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13452:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13437:3:181"},"nodeType":"YulFunctionCall","src":"13437:18:181"},{"hexValue":"6d6f7265207468616e20706f6f6c2062616c616e6365","kind":"string","nodeType":"YulLiteral","src":"13457:24:181","type":"","value":"more than pool balance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13430:6:181"},"nodeType":"YulFunctionCall","src":"13430:52:181"},"nodeType":"YulExpressionStatement","src":"13430:52:181"},{"nodeType":"YulAssignment","src":"13491:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13503:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13514:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13499:3:181"},"nodeType":"YulFunctionCall","src":"13499:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13491:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e8a8072019b830892cd4deb2ef47d584565d80622116f9044abf32bb22a18a4f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13328:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13342:4:181","type":""}],"src":"13177:346:181"},{"body":{"nodeType":"YulBlock","src":"13702:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13719:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13730:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13712:6:181"},"nodeType":"YulFunctionCall","src":"13712:21:181"},"nodeType":"YulExpressionStatement","src":"13712:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13753:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13764:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13749:3:181"},"nodeType":"YulFunctionCall","src":"13749:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13769:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13742:6:181"},"nodeType":"YulFunctionCall","src":"13742:30:181"},"nodeType":"YulExpressionStatement","src":"13742:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13792:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13803:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13788:3:181"},"nodeType":"YulFunctionCall","src":"13788:18:181"},{"hexValue":"6478203e206d61784478","kind":"string","nodeType":"YulLiteral","src":"13808:12:181","type":"","value":"dx > maxDx"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13781:6:181"},"nodeType":"YulFunctionCall","src":"13781:40:181"},"nodeType":"YulExpressionStatement","src":"13781:40:181"},{"nodeType":"YulAssignment","src":"13830:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13842:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13853:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13838:3:181"},"nodeType":"YulFunctionCall","src":"13838:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13830:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4406c1e208c572ab95085aa92d385cddaa474035df8163bb5a0a2c403800484d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13679:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13693:4:181","type":""}],"src":"13528:334:181"},{"body":{"nodeType":"YulBlock","src":"13919:116:181","statements":[{"nodeType":"YulAssignment","src":"13929:20:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13944:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"13947:1:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"13940:3:181"},"nodeType":"YulFunctionCall","src":"13940:9:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"13929:7:181"}]},{"body":{"nodeType":"YulBlock","src":"14007:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14009:16:181"},"nodeType":"YulFunctionCall","src":"14009:18:181"},"nodeType":"YulExpressionStatement","src":"14009:18:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13978:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13971:6:181"},"nodeType":"YulFunctionCall","src":"13971:9:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"13985:1:181"},{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"13992:7:181"},{"name":"x","nodeType":"YulIdentifier","src":"14001:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"13988:3:181"},"nodeType":"YulFunctionCall","src":"13988:15:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"13982:2:181"},"nodeType":"YulFunctionCall","src":"13982:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"13968:2:181"},"nodeType":"YulFunctionCall","src":"13968:37:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13961:6:181"},"nodeType":"YulFunctionCall","src":"13961:45:181"},"nodeType":"YulIf","src":"13958:71:181"}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"13898:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"13901:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"13907:7:181","type":""}],"src":"13867:168:181"},{"body":{"nodeType":"YulBlock","src":"14086:171:181","statements":[{"body":{"nodeType":"YulBlock","src":"14117:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14138:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14145:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"14150:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14141:3:181"},"nodeType":"YulFunctionCall","src":"14141:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14131:6:181"},"nodeType":"YulFunctionCall","src":"14131:31:181"},"nodeType":"YulExpressionStatement","src":"14131:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14182:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"14185:4:181","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14175:6:181"},"nodeType":"YulFunctionCall","src":"14175:15:181"},"nodeType":"YulExpressionStatement","src":"14175:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14210:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14213:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14203:6:181"},"nodeType":"YulFunctionCall","src":"14203:15:181"},"nodeType":"YulExpressionStatement","src":"14203:15:181"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"14106:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14099:6:181"},"nodeType":"YulFunctionCall","src":"14099:9:181"},"nodeType":"YulIf","src":"14096:132:181"},{"nodeType":"YulAssignment","src":"14237:14:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14246:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"14249:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"14242:3:181"},"nodeType":"YulFunctionCall","src":"14242:9:181"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"14237:1:181"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"14071:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"14074:1:181","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"14080:1:181","type":""}],"src":"14040:217:181"},{"body":{"nodeType":"YulBlock","src":"14443:228:181","statements":[{"nodeType":"YulAssignment","src":"14453:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14465:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14476:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14461:3:181"},"nodeType":"YulFunctionCall","src":"14461:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14453:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14496:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"14507:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14489:6:181"},"nodeType":"YulFunctionCall","src":"14489:25:181"},"nodeType":"YulExpressionStatement","src":"14489:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14534:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14545:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14530:3:181"},"nodeType":"YulFunctionCall","src":"14530:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"14550:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14523:6:181"},"nodeType":"YulFunctionCall","src":"14523:34:181"},"nodeType":"YulExpressionStatement","src":"14523:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14577:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14588:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14573:3:181"},"nodeType":"YulFunctionCall","src":"14573:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"14597:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"14605:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14593:3:181"},"nodeType":"YulFunctionCall","src":"14593:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14566:6:181"},"nodeType":"YulFunctionCall","src":"14566:45:181"},"nodeType":"YulExpressionStatement","src":"14566:45:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14631:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14642:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14627:3:181"},"nodeType":"YulFunctionCall","src":"14627:18:181"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"14651:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"14659:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14647:3:181"},"nodeType":"YulFunctionCall","src":"14647:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14620:6:181"},"nodeType":"YulFunctionCall","src":"14620:45:181"},"nodeType":"YulExpressionStatement","src":"14620:45:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint8_t_uint8__to_t_uint256_t_uint256_t_uint128_t_uint128__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14388:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14399:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14407:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14415:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14423:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14434:4:181","type":""}],"src":"14262:409:181"},{"body":{"nodeType":"YulBlock","src":"14850:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14867:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14878:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14860:6:181"},"nodeType":"YulFunctionCall","src":"14860:21:181"},"nodeType":"YulExpressionStatement","src":"14860:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14901:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14912:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14897:3:181"},"nodeType":"YulFunctionCall","src":"14897:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14917:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14890:6:181"},"nodeType":"YulFunctionCall","src":"14890:30:181"},"nodeType":"YulExpressionStatement","src":"14890:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14940:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14951:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14936:3:181"},"nodeType":"YulFunctionCall","src":"14936:18:181"},{"hexValue":"636f6d7061726520746f6b656e20746f20697473656c66","kind":"string","nodeType":"YulLiteral","src":"14956:25:181","type":"","value":"compare token to itself"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14929:6:181"},"nodeType":"YulFunctionCall","src":"14929:53:181"},"nodeType":"YulExpressionStatement","src":"14929:53:181"},{"nodeType":"YulAssignment","src":"14991:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15003:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15014:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14999:3:181"},"nodeType":"YulFunctionCall","src":"14999:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14991:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14827:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14841:4:181","type":""}],"src":"14676:347:181"},{"body":{"nodeType":"YulBlock","src":"15202:168:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15219:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15230:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15212:6:181"},"nodeType":"YulFunctionCall","src":"15212:21:181"},"nodeType":"YulExpressionStatement","src":"15212:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15253:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15264:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15249:3:181"},"nodeType":"YulFunctionCall","src":"15249:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15269:2:181","type":"","value":"18"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15242:6:181"},"nodeType":"YulFunctionCall","src":"15242:30:181"},"nodeType":"YulExpressionStatement","src":"15242:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15292:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15303:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15288:3:181"},"nodeType":"YulFunctionCall","src":"15288:18:181"},{"hexValue":"696e646578206f7574206f662072616e6765","kind":"string","nodeType":"YulLiteral","src":"15308:20:181","type":"","value":"index out of range"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15281:6:181"},"nodeType":"YulFunctionCall","src":"15281:48:181"},"nodeType":"YulExpressionStatement","src":"15281:48:181"},{"nodeType":"YulAssignment","src":"15338:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15350:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15361:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15346:3:181"},"nodeType":"YulFunctionCall","src":"15346:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15338:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15179:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15193:4:181","type":""}],"src":"15028:342:181"},{"body":{"nodeType":"YulBlock","src":"15549:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15566:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15577:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15559:6:181"},"nodeType":"YulFunctionCall","src":"15559:21:181"},"nodeType":"YulExpressionStatement","src":"15559:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15600:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15611:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15596:3:181"},"nodeType":"YulFunctionCall","src":"15596:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15616:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15589:6:181"},"nodeType":"YulFunctionCall","src":"15589:30:181"},"nodeType":"YulExpressionStatement","src":"15589:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15639:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15650:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15635:3:181"},"nodeType":"YulFunctionCall","src":"15635:18:181"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f","kind":"string","nodeType":"YulLiteral","src":"15655:34:181","type":"","value":"Address: insufficient balance fo"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15628:6:181"},"nodeType":"YulFunctionCall","src":"15628:62:181"},"nodeType":"YulExpressionStatement","src":"15628:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15710:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15721:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15706:3:181"},"nodeType":"YulFunctionCall","src":"15706:18:181"},{"hexValue":"722063616c6c","kind":"string","nodeType":"YulLiteral","src":"15726:8:181","type":"","value":"r call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15699:6:181"},"nodeType":"YulFunctionCall","src":"15699:36:181"},"nodeType":"YulExpressionStatement","src":"15699:36:181"},{"nodeType":"YulAssignment","src":"15744:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15756:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15767:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15752:3:181"},"nodeType":"YulFunctionCall","src":"15752:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15744:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15526:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15540:4:181","type":""}],"src":"15375:402:181"},{"body":{"nodeType":"YulBlock","src":"15919:150:181","statements":[{"nodeType":"YulVariableDeclaration","src":"15929:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15949:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15943:5:181"},"nodeType":"YulFunctionCall","src":"15943:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"15933:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16004:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"16012:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16000:3:181"},"nodeType":"YulFunctionCall","src":"16000:17:181"},{"name":"pos","nodeType":"YulIdentifier","src":"16019:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"16024:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"15965:34:181"},"nodeType":"YulFunctionCall","src":"15965:66:181"},"nodeType":"YulExpressionStatement","src":"15965:66:181"},{"nodeType":"YulAssignment","src":"16040:23:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16051:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"16056:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16047:3:181"},"nodeType":"YulFunctionCall","src":"16047:16:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"16040:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"15895:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15900:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"15911:3:181","type":""}],"src":"15782:287:181"},{"body":{"nodeType":"YulBlock","src":"16248:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16265:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16276:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16258:6:181"},"nodeType":"YulFunctionCall","src":"16258:21:181"},"nodeType":"YulExpressionStatement","src":"16258:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16299:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16310:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16295:3:181"},"nodeType":"YulFunctionCall","src":"16295:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16315:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16288:6:181"},"nodeType":"YulFunctionCall","src":"16288:30:181"},"nodeType":"YulExpressionStatement","src":"16288:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16338:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16349:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16334:3:181"},"nodeType":"YulFunctionCall","src":"16334:18:181"},{"hexValue":"6d69736d61746368206d756c7469706c69657273","kind":"string","nodeType":"YulLiteral","src":"16354:22:181","type":"","value":"mismatch multipliers"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16327:6:181"},"nodeType":"YulFunctionCall","src":"16327:50:181"},"nodeType":"YulExpressionStatement","src":"16327:50:181"},{"nodeType":"YulAssignment","src":"16386:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16398:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16409:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16394:3:181"},"nodeType":"YulFunctionCall","src":"16394:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16386:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d9b2e328f4209b3735eca19488e3afd57ba32c456d5e1a010a233e595f7b0b47__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16225:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16239:4:181","type":""}],"src":"16074:344:181"},{"body":{"nodeType":"YulBlock","src":"16597:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16614:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16625:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16607:6:181"},"nodeType":"YulFunctionCall","src":"16607:21:181"},"nodeType":"YulExpressionStatement","src":"16607:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16648:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16659:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16644:3:181"},"nodeType":"YulFunctionCall","src":"16644:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16664:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16637:6:181"},"nodeType":"YulFunctionCall","src":"16637:30:181"},"nodeType":"YulExpressionStatement","src":"16637:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16687:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16698:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16683:3:181"},"nodeType":"YulFunctionCall","src":"16683:18:181"},{"hexValue":"4420646f6573206e6f7420636f6e7665726765","kind":"string","nodeType":"YulLiteral","src":"16703:21:181","type":"","value":"D does not converge"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16676:6:181"},"nodeType":"YulFunctionCall","src":"16676:49:181"},"nodeType":"YulExpressionStatement","src":"16676:49:181"},{"nodeType":"YulAssignment","src":"16734:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16746:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16757:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16742:3:181"},"nodeType":"YulFunctionCall","src":"16742:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16734:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_eb80683d13e69e40aa7f57ce3558136d2c8c4c88f682021213f7030fc3d23afd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16574:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16588:4:181","type":""}],"src":"16423:343:181"},{"body":{"nodeType":"YulBlock","src":"16945:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16962:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16973:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16955:6:181"},"nodeType":"YulFunctionCall","src":"16955:21:181"},"nodeType":"YulExpressionStatement","src":"16955:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16996:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17007:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16992:3:181"},"nodeType":"YulFunctionCall","src":"16992:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17012:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16985:6:181"},"nodeType":"YulFunctionCall","src":"16985:30:181"},"nodeType":"YulExpressionStatement","src":"16985:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17035:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17046:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17031:3:181"},"nodeType":"YulFunctionCall","src":"17031:18:181"},{"hexValue":"546f6b656e206e6f7420666f756e64","kind":"string","nodeType":"YulLiteral","src":"17051:17:181","type":"","value":"Token not found"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17024:6:181"},"nodeType":"YulFunctionCall","src":"17024:45:181"},"nodeType":"YulExpressionStatement","src":"17024:45:181"},{"nodeType":"YulAssignment","src":"17078:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17090:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17101:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17086:3:181"},"nodeType":"YulFunctionCall","src":"17086:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17078:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_487af3faa279cd1df07c0d1897feb1b8a94d7a439a5fcca3a8f816912eee96c2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16922:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16936:4:181","type":""}],"src":"16771:339:181"},{"body":{"nodeType":"YulBlock","src":"17289:180:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17306:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17317:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17299:6:181"},"nodeType":"YulFunctionCall","src":"17299:21:181"},"nodeType":"YulExpressionStatement","src":"17299:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17340:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17351:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17336:3:181"},"nodeType":"YulFunctionCall","src":"17336:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17356:2:181","type":"","value":"30"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17329:6:181"},"nodeType":"YulFunctionCall","src":"17329:30:181"},"nodeType":"YulExpressionStatement","src":"17329:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17379:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17390:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17375:3:181"},"nodeType":"YulFunctionCall","src":"17375:18:181"},{"hexValue":"417070726f78696d6174696f6e20646964206e6f7420636f6e7665726765","kind":"string","nodeType":"YulLiteral","src":"17395:32:181","type":"","value":"Approximation did not converge"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17368:6:181"},"nodeType":"YulFunctionCall","src":"17368:60:181"},"nodeType":"YulExpressionStatement","src":"17368:60:181"},{"nodeType":"YulAssignment","src":"17437:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17449:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17460:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17445:3:181"},"nodeType":"YulFunctionCall","src":"17445:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17437:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17266:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17280:4:181","type":""}],"src":"17115:354:181"},{"body":{"nodeType":"YulBlock","src":"17648:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17665:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17676:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17658:6:181"},"nodeType":"YulFunctionCall","src":"17658:21:181"},"nodeType":"YulExpressionStatement","src":"17658:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17699:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17710:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17695:3:181"},"nodeType":"YulFunctionCall","src":"17695:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17715:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17688:6:181"},"nodeType":"YulFunctionCall","src":"17688:30:181"},"nodeType":"YulExpressionStatement","src":"17688:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17738:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17749:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17734:3:181"},"nodeType":"YulFunctionCall","src":"17734:18:181"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"17754:31:181","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17727:6:181"},"nodeType":"YulFunctionCall","src":"17727:59:181"},"nodeType":"YulExpressionStatement","src":"17727:59:181"},{"nodeType":"YulAssignment","src":"17795:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17807:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17818:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17803:3:181"},"nodeType":"YulFunctionCall","src":"17803:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17795:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17625:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17639:4:181","type":""}],"src":"17474:353:181"},{"body":{"nodeType":"YulBlock","src":"17953:98:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17970:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17981:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17963:6:181"},"nodeType":"YulFunctionCall","src":"17963:21:181"},"nodeType":"YulExpressionStatement","src":"17963:21:181"},{"nodeType":"YulAssignment","src":"17993:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18018:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18030:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18041:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18026:3:181"},"nodeType":"YulFunctionCall","src":"18026:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"18001:16:181"},"nodeType":"YulFunctionCall","src":"18001:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17993:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17922:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17933:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17944:4:181","type":""}],"src":"17832:219:181"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_struct_TransferInfo_calldata(offset, end) -> value\n    {\n        if slt(sub(end, offset), 416) { revert(0, 0) }\n        value := offset\n    }\n    function abi_decode_tuple_t_struct$_TransferInfo_$29351_calldata_ptrt_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_struct_TransferInfo_calldata(add(headStart, offset), dataEnd)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_struct$_TransferInfo_$29351_calldata_ptrt_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_struct_TransferInfo_calldata(add(headStart, offset), dataEnd)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x01a0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_bool(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_bool(value)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function convert_t_struct$_TransferInfo_$29351_calldata_ptr_to_t_struct$_TransferInfo_$29351_memory_ptr(value) -> converted\n    {\n        if slt(sub(calldatasize(), value), 0x01a0) { revert(0, 0) }\n        let value_1 := allocate_memory()\n        mstore(value_1, abi_decode_uint32(value))\n        mstore(add(value_1, 32), abi_decode_uint32(add(value, 32)))\n        mstore(add(value_1, 64), abi_decode_uint32(add(value, 64)))\n        mstore(add(value_1, 96), abi_decode_address(add(value, 96)))\n        mstore(add(value_1, 128), abi_decode_address(add(value, 128)))\n        mstore(add(value_1, 160), abi_decode_bool(add(value, 160)))\n        let offset := calldataload(add(value, 192))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        mstore(add(value_1, 192), abi_decode_bytes(add(value, offset), calldatasize()))\n        mstore(add(value_1, 224), calldataload(add(value, 224)))\n        let _1 := 256\n        mstore(add(value_1, _1), abi_decode_address(add(value, _1)))\n        let _2 := 288\n        mstore(add(value_1, _2), calldataload(add(value, _2)))\n        let _3 := 320\n        mstore(add(value_1, _3), calldataload(add(value, _3)))\n        let _4 := 352\n        mstore(add(value_1, _4), calldataload(add(value, _4)))\n        let _5 := 384\n        mstore(add(value_1, _5), calldataload(add(value, _5)))\n        converted := value_1\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_uint32(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffff))\n    }\n    function abi_encode_tuple_t_bytes32_t_uint32__to_t_bytes32_t_uint32__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffff))\n    }\n    function abi_encode_bool(value, pos)\n    {\n        mstore(pos, iszero(iszero(value)))\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_struct$_TransferInfo_$29351_memory_ptr__to_t_struct$_TransferInfo_$29351_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        abi_encode_uint32(mload(value0), add(headStart, 32))\n        let memberValue0 := mload(add(value0, 32))\n        abi_encode_uint32(memberValue0, add(headStart, 64))\n        let memberValue0_1 := mload(add(value0, 64))\n        abi_encode_uint32(memberValue0_1, add(headStart, 96))\n        let memberValue0_2 := mload(add(value0, 96))\n        abi_encode_address(memberValue0_2, add(headStart, 128))\n        let memberValue0_3 := mload(add(value0, 128))\n        abi_encode_address(memberValue0_3, add(headStart, 160))\n        let memberValue0_4 := mload(add(value0, 160))\n        abi_encode_bool(memberValue0_4, add(headStart, 192))\n        let memberValue0_5 := mload(add(value0, 192))\n        let _1 := 0x01a0\n        mstore(add(headStart, 224), _1)\n        let tail_1 := abi_encode_bytes(memberValue0_5, add(headStart, 448))\n        let _2 := mload(add(value0, 224))\n        let _3 := 256\n        mstore(add(headStart, _3), _2)\n        let memberValue0_6 := mload(add(value0, _3))\n        let _4 := 288\n        abi_encode_address(memberValue0_6, add(headStart, _4))\n        let _5 := mload(add(value0, _4))\n        let _6 := 320\n        mstore(add(headStart, _6), _5)\n        let _7 := mload(add(value0, _6))\n        let _8 := 352\n        mstore(add(headStart, _8), _7)\n        let _9 := mload(add(value0, _8))\n        let _10 := 384\n        mstore(add(headStart, _10), _9)\n        mstore(add(headStart, _1), mload(add(value0, _10)))\n        tail := tail_1\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256_t_address__to_t_address_t_uint256_t_uint256_t_address__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, _1))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"SafeERC20: approve from non-zero\")\n        mstore(add(headStart, 96), \" to non-zero allowance\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256_t_address_t_address_t_uint256_t_uint256__to_t_uint256_t_address_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 13)\n        mstore(add(headStart, 64), \"disabled pool\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e8a8072019b830892cd4deb2ef47d584565d80622116f9044abf32bb22a18a4f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"more than pool balance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4406c1e208c572ab95085aa92d385cddaa474035df8163bb5a0a2c403800484d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"dx > maxDx\")\n        tail := add(headStart, 96)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        product := mul(x, y)\n        if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint8_t_uint8__to_t_uint256_t_uint256_t_uint128_t_uint128__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), and(value3, 0xff))\n    }\n    function abi_encode_tuple_t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"compare token to itself\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"index out of range\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_d9b2e328f4209b3735eca19488e3afd57ba32c456d5e1a010a233e595f7b0b47__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"mismatch multipliers\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_eb80683d13e69e40aa7f57ce3558136d2c8c4c88f682021213f7030fc3d23afd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"D does not converge\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_487af3faa279cd1df07c0d1897feb1b8a94d7a439a5fcca3a8f816912eee96c2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"Token not found\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 30)\n        mstore(add(headStart, 64), \"Approximation did not converge\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"60806040526004361061007b5760003560e01c8063a03e4bc31161004e578063a03e4bc314610115578063b3f62fcb1461013d578063d1e5f31c1461015d578063ef1eb0c11461018a57600080fd5b806309d7ba5414610080578063349f937c146100c05780633bd30d34146100e257806375d3237114610102575b600080fd5b34801561008c57600080fd5b506100ad61009b366004611aec565b6000908152601d602052604090205490565b6040519081526020015b60405180910390f35b3480156100cc57600080fd5b506100e06100db366004611b21565b61019f565b005b3480156100ee57600080fd5b506100e06100fd366004611aec565b610284565b6100e0610110366004611b55565b61036c565b34801561012157600080fd5b50601b546040516001600160a01b0390911681526020016100b7565b34801561014957600080fd5b506100e0610158366004611bb2565b61047e565b34801561016957600080fd5b506100ad610178366004611aec565b6000908152601e602052604090205490565b34801561019657600080fd5b50601c546100ad565b336101d17fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b6001600160a01b03161415801561020c575060033360009081526014602052604090205460ff16600381111561020957610209611c06565b14155b1561022a57604051637b32c26b60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b038316908117909155604080519182523360208301527f7935dbc7e9662d3877fe03509de1a139f55a861386088919480ed3162e2976ec91015b60405180910390a150565b336102b67fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b6001600160a01b0316141580156102f1575060033360009081526014602052604090205460ff1660038111156102ee576102ee611c06565b14155b1561030f57604051637b32c26b60e01b815260040160405180910390fd5b6127108111156103325760405163f48157d160e01b815260040160405180910390fd5b601c819055604080518281523360208201527f7d403a16a513cb194fca13e6aba342102a2a11c978e12a90981891c1a19f0b6f9101610279565b6016546001190161039057604051637ce54e2d60e11b815260040160405180910390fd5b600260165560006007816103b86101808801356103b360608a0160408b01611c30565b6105df565b81526020810191909152604001600020600101546001600160a01b0316905080158015906103f85750806001600160a01b0316846001600160a01b031614155b15610416576040516339bcb9bb60e11b815260040160405180910390fd5b600061042961042487611d34565b610622565b905060006104378486611e40565b90508060000361045a576040516330d5e3e360e11b815260040160405180910390fd5b6104648382610652565b610470838686856107a3565b505060016016555050505050565b601654600119016104a257604051637ce54e2d60e11b815260040160405180910390fd5b600260165560006104c26101808601356103b36060880160408901611c30565b600081815260076020526040902060020154909150600160a01b900460ff166104fe5760405163b074ae7360e01b815260040160405180910390fd5b600061051f8261018088013561051a60608a0160408b01611c30565b6108d7565b336000908152600a602090815260408083206001600160a01b0385168452909152902054909150838110156105675760405163badaeb5960e01b815260040160405180910390fd5b600061057561042489611d34565b905060008061058f86866105898b8d611e40565b8a6108ee565b909250905061059e8285611e53565b336000908152600a602090815260408083206001600160a01b038a1684529091529020556105ce818a8a866107a3565b505060016016555050505050505050565b6000828260405160200161060392919091825263ffffffff16602082015260400190565b6040516020818303038152906040528051906020012090505b92915050565b6000816040516020016106359190611eb6565b604051602081830303815290604052805190602001209050919050565b8060000361065e575050565b6001600160a01b03821661068557604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156106ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f29190611fb0565b90506107096001600160a01b038316333086610941565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa158015610751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107759190611fb0565b61077f9190611e53565b1461079d57604051630e40773560e21b815260040160405180910390fd5b50505050565b6000818152601d6020526040812080548592906107c1908490611e53565b90915550506000818152601e6020526040812080548492906107e4908490611e53565b9091555050601b546001600160a01b0316610801858260006109ac565b61081585826108108688611e40565b610acb565b60405163d65dc7a160e01b81526001600160a01b038681166004830152602482018690526044820185905282169063d65dc7a190606401600060405180830381600087803b15801561086657600080fd5b505af115801561087a573d6000803e3d6000fd5b5050604080516001600160a01b0389168152602081018890529081018690523360608201528492507f54b01a5ae4ec60eeeef60570103ba1a5de0999725219c02b2baf1b706625bb08915060800160405180910390a25050505050565b60006108e68484846000610b7d565b949350505050565b60008060006108fc87610bb8565b60018101549091506001600160a01b0390811690871681036109245785935091506109389050565b6109318888838989610c00565b9350935050505b94509492505050565b6040516001600160a01b038085166024830152831660448201526064810182905261079d9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610d66565b801580610a265750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015610a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a249190611fb0565b155b610a965760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084015b60405180910390fd5b6040516001600160a01b038316602482015260448101829052610ac690849063095ea7b360e01b90606401610975565b505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b409190611fb0565b610b4a9190611e40565b6040516001600160a01b03851660248201526044810182905290915061079d90859063095ea7b360e01b90606401610975565b600481015460009063ffffffff90811690841603610b9c5750826108e6565b610ba585610bb8565b546001600160a01b031695945050505050565b6000818152600760205260408120600180820154839291600160a01b90910460ff161015610bf95760405163618cca3f60e11b815260040160405180910390fd5b9392505050565b600085815260186020526040812081908190610c1b81610e38565b15610c4d57610c41610c2d8a8a610e55565b610c378b8a610e55565b8391908989610ed5565b87935093505050610d5c565b6000610c588a610bb8565b600201546001600160a01b03908116915081908a90610c7b9082168360006109ac565b610c8f6001600160a01b038216838a610acb565b60006001600160a01b038416635428c1178b8e8e8d610cb0610e1042611e40565b6040516001600160e01b031960e088901b16815260048101959095526001600160a01b0393841660248601529290911660448401526064830152608482015260a4016020604051808303816000875af1158015610d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d359190611fb0565b9050610d4c6001600160a01b0383168460006109ac565b9650899550610d5c945050505050565b9550959350505050565b6000610dbb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111de9092919063ffffffff16565b805190915015610ac65780806020019051810190610dd99190611fc9565b610ac65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a8d565b600c81015460009060ff1615801561061c57505060080154151590565b60008281526019602090815260408083206001600160a01b0385168085529083528184205486855260189093529083206008018054849360ff1692919083908110610ea257610ea2611fe6565b6000918252602090912001546001600160a01b0316146108e65760405163054e442960e41b815260040160405180910390fd5b600c85015460009060ff1615610f1d5760405162461bcd60e51b815260206004820152600d60248201526c191a5cd8589b1959081c1bdbdb609a1b6044820152606401610a8d565b85600a018460ff1681548110610f3557610f35611fe6565b9060005260206000200154831115610f885760405162461bcd60e51b81526020600482015260166024820152756d6f7265207468616e20706f6f6c2062616c616e636560501b6044820152606401610a8d565b600080600088600a01805480602002602001604051908101604052809291908181526020018280548015610fdb57602002820191906000526020600020905b815481526020019060010190808311610fc7575b50505050509050610fef89898989856111ed565b9093509150848311156110315760405162461bcd60e51b815260206004820152600a6024820152690c8f0407c40dac2f088f60b31b6044820152606401610a8d565b6000896009018960ff168154811061104b5761104b611fe6565b90600052602060002001546402540be4008b600601548561106c9190611ffc565b6110769190612013565b6110809190612013565b90508084838b60ff168151811061109957611099611fe6565b60200260200101516110ab9190611e40565b6110b59190611e53565b8a600a018a60ff16815481106110cd576110cd611fe6565b906000526020600020018190555086828960ff16815181106110f1576110f1611fe6565b60200260200101516111039190611e53565b8a600a018960ff168154811061111b5761111b611fe6565b600091825260209091200155801561118057808a600b018a60ff168154811061114657611146611fe6565b906000526020600020015461115b9190611e40565b8a600b018a60ff168154811061117357611173611fe6565b6000918252602090912001555b895460408051868152602081018a905260ff8c8116828401528b16606082015290513392917f28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df320919081900360800190a3509198975050505050505050565b60606108e68484600085611438565b6000808460ff168660ff16036112455760405162461bcd60e51b815260206004820152601760248201527f636f6d7061726520746f6b656e20746f20697473656c660000000000000000006044820152606401610a8d565b60008760090180548060200260200160405190810160405280929190818152602001828054801561129557602002820191906000526020600020905b815481526020019060010190808311611281575b5050505050905060006112a88583611513565b905080518860ff161080156112c0575080518760ff16105b6113015760405162461bcd60e51b8152602060048201526012602482015271696e646578206f7574206f662072616e676560701b6044820152606401610a8d565b600061130c8a61161e565b9050600061131a8383611629565b9050838960ff168151811061133157611331611fe6565b6020026020010151886113449190611ffc565b838a60ff168151811061135957611359611fe6565b602002602001015161136b9190611e53565b838a60ff168151811061138057611380611fe6565b602002602001018181525050600061139a838c86856117d6565b9050838b60ff16815181106113b1576113b1611fe6565b60200260200101518160016113c69190611e40565b6113d09190611e53565b96506402540be4008c60050154886113e89190611ffc565b6113f29190612013565b9550848b60ff168151811061140957611409611fe6565b6020026020010151868861141d9190611e40565b6114279190612013565b965050505050509550959350505050565b6060824710156114995760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a8d565b600080866001600160a01b031685876040516114b59190612035565b60006040518083038185875af1925050503d80600081146114f2576040519150601f19603f3d011682016040523d82523d6000602084013e6114f7565b606091505b5091509150611508878383876119c5565b979650505050505050565b815181516060919081146115605760405162461bcd60e51b81526020600482015260146024820152736d69736d61746368206d756c7469706c6965727360601b6044820152606401610a8d565b60008167ffffffffffffffff81111561157b5761157b611c4b565b6040519080825280602002602001820160405280156115a4578160200160208202803683370190505b50905060005b82811015611615578481815181106115c4576115c4611fe6565b60200260200101518682815181106115de576115de611fe6565b60200260200101516115f09190611ffc565b82828151811061160257611602611fe6565b60209081029190910101526001016115aa565b50949350505050565b600061061c82611a3e565b815160009081805b828110156116685785818151811061164b5761164b611fe6565b60200260200101518261165e9190611e40565b9150600101611631565b508060000361167c5760009250505061061c565b6000818161168a8588611ffc565b905060005b610100811015611797578260005b878110156116e857878b82815181106116b8576116b8611fe6565b60200260200101516116ca9190611ffc565b6116d48684611ffc565b6116de9190612013565b915060010161169d565b50839450808760016116fa9190611e40565b6117049190611ffc565b6064856117118287611e53565b61171b9190611ffc565b6117259190612013565b61172f9190611e40565b8461173a8984611ffc565b60646117468a88611ffc565b6117509190612013565b61175a9190611e40565b6117649190611ffc565b61176e9190612013565b935061177a8486611a87565b1561178e578397505050505050505061061c565b5060010161168f565b5060405162461bcd60e51b81526020600482015260136024820152724420646f6573206e6f7420636f6e766572676560681b6044820152606401610a8d565b815160009060ff8516811161181f5760405162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08199bdd5b99608a1b6044820152606401610a8d565b8260008061182d848a611ffc565b905060005b848110156118af578860ff1681146118a75787818151811061185657611856611fe6565b6020026020010151836118699190611e40565b92508488828151811061187e5761187e611fe6565b60200260200101516118909190611ffc565b61189a8886611ffc565b6118a49190612013565b93505b600101611832565b506118ba8482611ffc565b60646118c68886611ffc565b6118d09190611ffc565b6118da9190612013565b92506000816118ea606489611ffc565b6118f49190612013565b6118fe9084611e40565b9050600087815b61010081101561197c5781925089848360026119219190611ffc565b61192b9190611e40565b6119359190611e53565b876119408480611ffc565b61194a9190611e40565b6119549190612013565b91506119608284611a87565b15611974575096506108e695505050505050565b600101611905565b5060405162461bcd60e51b815260206004820152601e60248201527f417070726f78696d6174696f6e20646964206e6f7420636f6e766572676500006044820152606401610a8d565b60608315611a34578251600003611a2d576001600160a01b0385163b611a2d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a8d565b50816108e6565b6108e68383611a9d565b600481015460028201546001830154909190808314801590611a5f57508142105b15611a80576000846003015490508083038142038502428503840201049350505b5050919050565b60006002611a958484611ac7565b109392505050565b815115611aad5781518083602001fd5b8060405162461bcd60e51b8152600401610a8d9190612051565b600081831115611ae257611adb8284611e53565b905061061c565b610bf98383611e53565b600060208284031215611afe57600080fd5b5035919050565b80356001600160a01b0381168114611b1c57600080fd5b919050565b600060208284031215611b3357600080fd5b610bf982611b05565b60006101a08284031215611b4f57600080fd5b50919050565b60008060008060808587031215611b6b57600080fd5b843567ffffffffffffffff811115611b8257600080fd5b611b8e87828801611b3c565b945050611b9d60208601611b05565b93969395505050506040820135916060013590565b60008060008060808587031215611bc857600080fd5b843567ffffffffffffffff811115611bdf57600080fd5b611beb87828801611b3c565b97602087013597506040870135966060013595509350505050565b634e487b7160e01b600052602160045260246000fd5b803563ffffffff81168114611b1c57600080fd5b600060208284031215611c4257600080fd5b610bf982611c1c565b634e487b7160e01b600052604160045260246000fd5b6040516101a0810167ffffffffffffffff81118282101715611c8557611c85611c4b565b60405290565b8015158114611c9957600080fd5b50565b8035611b1c81611c8b565b600082601f830112611cb857600080fd5b813567ffffffffffffffff80821115611cd357611cd3611c4b565b604051601f8301601f19908116603f01168101908282118183101715611cfb57611cfb611c4b565b81604052838152866020858801011115611d1457600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006101a08236031215611d4757600080fd5b611d4f611c61565b611d5883611c1c565b8152611d6660208401611c1c565b6020820152611d7760408401611c1c565b6040820152611d8860608401611b05565b6060820152611d9960808401611b05565b6080820152611daa60a08401611c9c565b60a082015260c083013567ffffffffffffffff811115611dc957600080fd5b611dd536828601611ca7565b60c08301525060e083013560e0820152610100611df3818501611b05565b9082015261012083810135908201526101408084013590820152610160808401359082015261018092830135928101929092525090565b634e487b7160e01b600052601160045260246000fd5b8082018082111561061c5761061c611e2a565b8181038181111561061c5761061c611e2a565b60005b83811015611e81578181015183820152602001611e69565b50506000910152565b60008151808452611ea2816020860160208601611e66565b601f01601f19169290920160200192915050565b60208152611ecd60208201835163ffffffff169052565b60006020830151611ee6604084018263ffffffff169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160a01b03811660a08401525060a083015180151560c08401525060c08301516101a08060e0850152611f4d6101c0850183611e8a565b60e086015161010086810191909152860151909250610120611f79818701836001600160a01b03169052565b8601516101408681019190915286015161016080870191909152860151610180808701919091529095015193019290925250919050565b600060208284031215611fc257600080fd5b5051919050565b600060208284031215611fdb57600080fd5b8151610bf981611c8b565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761061c5761061c611e2a565b60008261203057634e487b7160e01b600052601260045260246000fd5b500490565b60008251612047818460208701611e66565b9190910192915050565b602081526000610bf96020830184611e8a56fea2646970667358221220435414d19a516483a5bf09ee82445bb9569fdec76d4f7422de7909f26178a7b464736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA03E4BC3 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xA03E4BC3 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0xB3F62FCB EQ PUSH2 0x13D JUMPI DUP1 PUSH4 0xD1E5F31C EQ PUSH2 0x15D JUMPI DUP1 PUSH4 0xEF1EB0C1 EQ PUSH2 0x18A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9D7BA54 EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x349F937C EQ PUSH2 0xC0 JUMPI DUP1 PUSH4 0x3BD30D34 EQ PUSH2 0xE2 JUMPI DUP1 PUSH4 0x75D32371 EQ PUSH2 0x102 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0x1AEC JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE0 PUSH2 0xDB CALLDATASIZE PUSH1 0x4 PUSH2 0x1B21 JUMP JUMPDEST PUSH2 0x19F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE0 PUSH2 0xFD CALLDATASIZE PUSH1 0x4 PUSH2 0x1AEC JUMP JUMPDEST PUSH2 0x284 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x110 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B55 JUMP JUMPDEST PUSH2 0x36C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1B SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x149 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE0 PUSH2 0x158 CALLDATASIZE PUSH1 0x4 PUSH2 0x1BB2 JUMP JUMPDEST PUSH2 0x47E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0x178 CALLDATASIZE PUSH1 0x4 PUSH2 0x1AEC JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x196 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1C SLOAD PUSH2 0xAD JUMP JUMPDEST CALLER PUSH2 0x1D1 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x20C JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x209 JUMPI PUSH2 0x209 PUSH2 0x1C06 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x22A JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1B DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE CALLER PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x7935DBC7E9662D3877FE03509DE1A139F55A861386088919480ED3162E2976EC SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST CALLER PUSH2 0x2B6 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x2F1 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2EE JUMPI PUSH2 0x2EE PUSH2 0x1C06 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x30F JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2710 DUP2 GT ISZERO PUSH2 0x332 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF48157D1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1C DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x7D403A16A513CB194FCA13E6ABA342102A2A11C978E12A90981891C1A19F0B6F SWAP2 ADD PUSH2 0x279 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 NOT ADD PUSH2 0x390 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE PUSH1 0x0 PUSH1 0x7 DUP2 PUSH2 0x3B8 PUSH2 0x180 DUP9 ADD CALLDATALOAD PUSH2 0x3B3 PUSH1 0x60 DUP11 ADD PUSH1 0x40 DUP12 ADD PUSH2 0x1C30 JUMP JUMPDEST PUSH2 0x5DF JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3F8 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST ISZERO PUSH2 0x416 JUMPI PUSH1 0x40 MLOAD PUSH4 0x39BCB9BB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x429 PUSH2 0x424 DUP8 PUSH2 0x1D34 JUMP JUMPDEST PUSH2 0x622 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x437 DUP5 DUP7 PUSH2 0x1E40 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x45A JUMPI PUSH1 0x40 MLOAD PUSH4 0x30D5E3E3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x464 DUP4 DUP3 PUSH2 0x652 JUMP JUMPDEST PUSH2 0x470 DUP4 DUP7 DUP7 DUP6 PUSH2 0x7A3 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x16 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 NOT ADD PUSH2 0x4A2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE PUSH1 0x0 PUSH2 0x4C2 PUSH2 0x180 DUP7 ADD CALLDATALOAD PUSH2 0x3B3 PUSH1 0x60 DUP9 ADD PUSH1 0x40 DUP10 ADD PUSH2 0x1C30 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x4FE JUMPI PUSH1 0x40 MLOAD PUSH4 0xB074AE73 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x51F DUP3 PUSH2 0x180 DUP9 ADD CALLDATALOAD PUSH2 0x51A PUSH1 0x60 DUP11 ADD PUSH1 0x40 DUP12 ADD PUSH2 0x1C30 JUMP JUMPDEST PUSH2 0x8D7 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP4 DUP2 LT ISZERO PUSH2 0x567 JUMPI PUSH1 0x40 MLOAD PUSH4 0xBADAEB59 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x575 PUSH2 0x424 DUP10 PUSH2 0x1D34 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x58F DUP7 DUP7 PUSH2 0x589 DUP12 DUP14 PUSH2 0x1E40 JUMP JUMPDEST DUP11 PUSH2 0x8EE JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x59E DUP3 DUP6 PUSH2 0x1E53 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE PUSH2 0x5CE DUP2 DUP11 DUP11 DUP7 PUSH2 0x7A3 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x16 SSTORE POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x603 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH4 0xFFFFFFFF AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x635 SWAP2 SWAP1 PUSH2 0x1EB6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x65E JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x685 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2A38B133 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP3 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6F2 SWAP2 SWAP1 PUSH2 0x1FB0 JUMP JUMPDEST SWAP1 POP PUSH2 0x709 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP7 PUSH2 0x941 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP4 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x751 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x775 SWAP2 SWAP1 PUSH2 0x1FB0 JUMP JUMPDEST PUSH2 0x77F SWAP2 SWAP1 PUSH2 0x1E53 JUMP JUMPDEST EQ PUSH2 0x79D JUMPI PUSH1 0x40 MLOAD PUSH4 0xE407735 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1D PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP6 SWAP3 SWAP1 PUSH2 0x7C1 SWAP1 DUP5 SWAP1 PUSH2 0x1E53 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1E PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x7E4 SWAP1 DUP5 SWAP1 PUSH2 0x1E53 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1B SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x801 DUP6 DUP3 PUSH1 0x0 PUSH2 0x9AC JUMP JUMPDEST PUSH2 0x815 DUP6 DUP3 PUSH2 0x810 DUP7 DUP9 PUSH2 0x1E40 JUMP JUMPDEST PUSH2 0xACB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD65DC7A1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD DUP6 SWAP1 MSTORE DUP3 AND SWAP1 PUSH4 0xD65DC7A1 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x866 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x87A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE CALLER PUSH1 0x60 DUP3 ADD MSTORE DUP5 SWAP3 POP PUSH32 0x54B01A5AE4EC60EEEEF60570103BA1A5DE0999725219C02B2BAF1B706625BB08 SWAP2 POP PUSH1 0x80 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8E6 DUP5 DUP5 DUP5 PUSH1 0x0 PUSH2 0xB7D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x8FC DUP8 PUSH2 0xBB8 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP8 AND DUP2 SUB PUSH2 0x924 JUMPI DUP6 SWAP4 POP SWAP2 POP PUSH2 0x938 SWAP1 POP JUMP JUMPDEST PUSH2 0x931 DUP9 DUP9 DUP4 DUP10 DUP10 PUSH2 0xC00 JUMP JUMPDEST SWAP4 POP SWAP4 POP POP POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x79D SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0xD66 JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0xA26 JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA00 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA24 SWAP2 SWAP1 PUSH2 0x1FB0 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0xA96 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH22 0x20746F206E6F6E2D7A65726F20616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0xAC6 SWAP1 DUP5 SWAP1 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x975 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP4 SWAP2 DUP7 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB1C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB40 SWAP2 SWAP1 PUSH2 0x1FB0 JUMP JUMPDEST PUSH2 0xB4A SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH2 0x79D SWAP1 DUP6 SWAP1 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x975 JUMP JUMPDEST PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP5 AND SUB PUSH2 0xB9C JUMPI POP DUP3 PUSH2 0x8E6 JUMP JUMPDEST PUSH2 0xBA5 DUP6 PUSH2 0xBB8 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 DUP1 DUP3 ADD SLOAD DUP4 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0xFF AND LT ISZERO PUSH2 0xBF9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x618CCA3F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 DUP2 SWAP1 PUSH2 0xC1B DUP2 PUSH2 0xE38 JUMP JUMPDEST ISZERO PUSH2 0xC4D JUMPI PUSH2 0xC41 PUSH2 0xC2D DUP11 DUP11 PUSH2 0xE55 JUMP JUMPDEST PUSH2 0xC37 DUP12 DUP11 PUSH2 0xE55 JUMP JUMPDEST DUP4 SWAP2 SWAP1 DUP10 DUP10 PUSH2 0xED5 JUMP JUMPDEST DUP8 SWAP4 POP SWAP4 POP POP POP PUSH2 0xD5C JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC58 DUP11 PUSH2 0xBB8 JUMP JUMPDEST PUSH1 0x2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 POP DUP2 SWAP1 DUP11 SWAP1 PUSH2 0xC7B SWAP1 DUP3 AND DUP4 PUSH1 0x0 PUSH2 0x9AC JUMP JUMPDEST PUSH2 0xC8F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP4 DUP11 PUSH2 0xACB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH4 0x5428C117 DUP12 DUP15 DUP15 DUP14 PUSH2 0xCB0 PUSH2 0xE10 TIMESTAMP PUSH2 0x1E40 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD11 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD35 SWAP2 SWAP1 PUSH2 0x1FB0 JUMP JUMPDEST SWAP1 POP PUSH2 0xD4C PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP5 PUSH1 0x0 PUSH2 0x9AC JUMP JUMPDEST SWAP7 POP DUP10 SWAP6 POP PUSH2 0xD5C SWAP5 POP POP POP POP POP JUMP JUMPDEST SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDBB DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x11DE SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0xAC6 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xDD9 SWAP2 SWAP1 PUSH2 0x1FC9 JUMP JUMPDEST PUSH2 0xAC6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA8D JUMP JUMPDEST PUSH1 0xC DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x61C JUMPI POP POP PUSH1 0x8 ADD SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD DUP7 DUP6 MSTORE PUSH1 0x18 SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 PUSH1 0x8 ADD DUP1 SLOAD DUP5 SWAP4 PUSH1 0xFF AND SWAP3 SWAP2 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0xEA2 JUMPI PUSH2 0xEA2 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x8E6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x54E4429 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xF1D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x191A5CD8589B1959081C1BDBDB PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST DUP6 PUSH1 0xA ADD DUP5 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0xF35 JUMPI PUSH2 0xF35 PUSH2 0x1FE6 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP4 GT ISZERO PUSH2 0xF88 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x6D6F7265207468616E20706F6F6C2062616C616E6365 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP9 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xFDB JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xFC7 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0xFEF DUP10 DUP10 DUP10 DUP10 DUP6 PUSH2 0x11ED JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP DUP5 DUP4 GT ISZERO PUSH2 0x1031 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0xC8F0407C40DAC2F088F PUSH1 0xB3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST PUSH1 0x0 DUP10 PUSH1 0x9 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x104B JUMPI PUSH2 0x104B PUSH2 0x1FE6 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH5 0x2540BE400 DUP12 PUSH1 0x6 ADD SLOAD DUP6 PUSH2 0x106C SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x1076 SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST PUSH2 0x1080 SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST SWAP1 POP DUP1 DUP5 DUP4 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x1099 JUMPI PUSH2 0x1099 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x10AB SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST PUSH2 0x10B5 SWAP2 SWAP1 PUSH2 0x1E53 JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x10CD JUMPI PUSH2 0x10CD PUSH2 0x1FE6 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP7 DUP3 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x10F1 JUMPI PUSH2 0x10F1 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1103 SWAP2 SWAP1 PUSH2 0x1E53 JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x111B JUMPI PUSH2 0x111B PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE DUP1 ISZERO PUSH2 0x1180 JUMPI DUP1 DUP11 PUSH1 0xB ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x1146 JUMPI PUSH2 0x1146 PUSH2 0x1FE6 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x115B SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST DUP11 PUSH1 0xB ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x1173 JUMPI PUSH2 0x1173 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE JUMPDEST DUP10 SLOAD PUSH1 0x40 DUP1 MLOAD DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP11 SWAP1 MSTORE PUSH1 0xFF DUP13 DUP2 AND DUP3 DUP5 ADD MSTORE DUP12 AND PUSH1 0x60 DUP3 ADD MSTORE SWAP1 MLOAD CALLER SWAP3 SWAP2 PUSH32 0x28D4CF2D5709DA3B474B5F05CFD7083FAFFD601F9500D1F8439B8A13EC7DF320 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP SWAP2 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x8E6 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x1438 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0xFF AND DUP7 PUSH1 0xFF AND SUB PUSH2 0x1245 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x636F6D7061726520746F6B656E20746F20697473656C66000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST PUSH1 0x0 DUP8 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1295 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1281 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x12A8 DUP6 DUP4 PUSH2 0x1513 JUMP JUMPDEST SWAP1 POP DUP1 MLOAD DUP9 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x12C0 JUMPI POP DUP1 MLOAD DUP8 PUSH1 0xFF AND LT JUMPDEST PUSH2 0x1301 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x696E646578206F7574206F662072616E6765 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x130C DUP11 PUSH2 0x161E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x131A DUP4 DUP4 PUSH2 0x1629 JUMP JUMPDEST SWAP1 POP DUP4 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x1331 JUMPI PUSH2 0x1331 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH2 0x1344 SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x1359 JUMPI PUSH2 0x1359 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x136B SWAP2 SWAP1 PUSH2 0x1E53 JUMP JUMPDEST DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x1380 JUMPI PUSH2 0x1380 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x139A DUP4 DUP13 DUP7 DUP6 PUSH2 0x17D6 JUMP JUMPDEST SWAP1 POP DUP4 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x13B1 JUMPI PUSH2 0x13B1 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x1 PUSH2 0x13C6 SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST PUSH2 0x13D0 SWAP2 SWAP1 PUSH2 0x1E53 JUMP JUMPDEST SWAP7 POP PUSH5 0x2540BE400 DUP13 PUSH1 0x5 ADD SLOAD DUP9 PUSH2 0x13E8 SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x13F2 SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST SWAP6 POP DUP5 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x1409 JUMPI PUSH2 0x1409 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP9 PUSH2 0x141D SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST PUSH2 0x1427 SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST SWAP7 POP POP POP POP POP POP SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x1499 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA8D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x14B5 SWAP2 SWAP1 PUSH2 0x2035 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x14F2 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x14F7 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1508 DUP8 DUP4 DUP4 DUP8 PUSH2 0x19C5 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH1 0x60 SWAP2 SWAP1 DUP2 EQ PUSH2 0x1560 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x6D69736D61746368206D756C7469706C69657273 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x157B JUMPI PUSH2 0x157B PUSH2 0x1C4B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x15A4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1615 JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x15C4 JUMPI PUSH2 0x15C4 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x15DE JUMPI PUSH2 0x15DE PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x15F0 SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1602 JUMPI PUSH2 0x1602 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x15AA JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x61C DUP3 PUSH2 0x1A3E JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP2 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1668 JUMPI DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x164B JUMPI PUSH2 0x164B PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH2 0x165E SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x1631 JUMP JUMPDEST POP DUP1 PUSH1 0x0 SUB PUSH2 0x167C JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x61C JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 PUSH2 0x168A DUP6 DUP9 PUSH2 0x1FFC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x1797 JUMPI DUP3 PUSH1 0x0 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0x16E8 JUMPI DUP8 DUP12 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x16B8 JUMPI PUSH2 0x16B8 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x16CA SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x16D4 DUP7 DUP5 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x16DE SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x169D JUMP JUMPDEST POP DUP4 SWAP5 POP DUP1 DUP8 PUSH1 0x1 PUSH2 0x16FA SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST PUSH2 0x1704 SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH1 0x64 DUP6 PUSH2 0x1711 DUP3 DUP8 PUSH2 0x1E53 JUMP JUMPDEST PUSH2 0x171B SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x1725 SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST PUSH2 0x172F SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST DUP5 PUSH2 0x173A DUP10 DUP5 PUSH2 0x1FFC JUMP JUMPDEST PUSH1 0x64 PUSH2 0x1746 DUP11 DUP9 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x1750 SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST PUSH2 0x175A SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST PUSH2 0x1764 SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x176E SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST SWAP4 POP PUSH2 0x177A DUP5 DUP7 PUSH2 0x1A87 JUMP JUMPDEST ISZERO PUSH2 0x178E JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x61C JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x168F JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x4420646F6573206E6F7420636F6E7665726765 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF DUP6 AND DUP2 GT PUSH2 0x181F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x151BDAD95B881B9BDD08199BDD5B99 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST DUP3 PUSH1 0x0 DUP1 PUSH2 0x182D DUP5 DUP11 PUSH2 0x1FFC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x18AF JUMPI DUP9 PUSH1 0xFF AND DUP2 EQ PUSH2 0x18A7 JUMPI DUP8 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1856 JUMPI PUSH2 0x1856 PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x1869 SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST SWAP3 POP DUP5 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x187E JUMPI PUSH2 0x187E PUSH2 0x1FE6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1890 SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x189A DUP9 DUP7 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x18A4 SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST SWAP4 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1832 JUMP JUMPDEST POP PUSH2 0x18BA DUP5 DUP3 PUSH2 0x1FFC JUMP JUMPDEST PUSH1 0x64 PUSH2 0x18C6 DUP9 DUP7 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x18D0 SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x18DA SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST SWAP3 POP PUSH1 0x0 DUP2 PUSH2 0x18EA PUSH1 0x64 DUP10 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x18F4 SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST PUSH2 0x18FE SWAP1 DUP5 PUSH2 0x1E40 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP8 DUP2 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x197C JUMPI DUP2 SWAP3 POP DUP10 DUP5 DUP4 PUSH1 0x2 PUSH2 0x1921 SWAP2 SWAP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x192B SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST PUSH2 0x1935 SWAP2 SWAP1 PUSH2 0x1E53 JUMP JUMPDEST DUP8 PUSH2 0x1940 DUP5 DUP1 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x194A SWAP2 SWAP1 PUSH2 0x1E40 JUMP JUMPDEST PUSH2 0x1954 SWAP2 SWAP1 PUSH2 0x2013 JUMP JUMPDEST SWAP2 POP PUSH2 0x1960 DUP3 DUP5 PUSH2 0x1A87 JUMP JUMPDEST ISZERO PUSH2 0x1974 JUMPI POP SWAP7 POP PUSH2 0x8E6 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1905 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x417070726F78696D6174696F6E20646964206E6F7420636F6E76657267650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1A34 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x1A2D JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x1A2D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA8D JUMP JUMPDEST POP DUP2 PUSH2 0x8E6 JUMP JUMPDEST PUSH2 0x8E6 DUP4 DUP4 PUSH2 0x1A9D JUMP JUMPDEST PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x2 DUP3 ADD SLOAD PUSH1 0x1 DUP4 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP1 DUP4 EQ DUP1 ISZERO SWAP1 PUSH2 0x1A5F JUMPI POP DUP2 TIMESTAMP LT JUMPDEST ISZERO PUSH2 0x1A80 JUMPI PUSH1 0x0 DUP5 PUSH1 0x3 ADD SLOAD SWAP1 POP DUP1 DUP4 SUB DUP2 TIMESTAMP SUB DUP6 MUL TIMESTAMP DUP6 SUB DUP5 MUL ADD DIV SWAP4 POP POP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH2 0x1A95 DUP5 DUP5 PUSH2 0x1AC7 JUMP JUMPDEST LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x1AAD JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA8D SWAP2 SWAP1 PUSH2 0x2051 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 GT ISZERO PUSH2 0x1AE2 JUMPI PUSH2 0x1ADB DUP3 DUP5 PUSH2 0x1E53 JUMP JUMPDEST SWAP1 POP PUSH2 0x61C JUMP JUMPDEST PUSH2 0xBF9 DUP4 DUP4 PUSH2 0x1E53 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1AFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1B1C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1B33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBF9 DUP3 PUSH2 0x1B05 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1B4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1B6B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1B82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B8E DUP8 DUP3 DUP9 ADD PUSH2 0x1B3C JUMP JUMPDEST SWAP5 POP POP PUSH2 0x1B9D PUSH1 0x20 DUP7 ADD PUSH2 0x1B05 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1BC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1BDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1BEB DUP8 DUP3 DUP9 ADD PUSH2 0x1B3C JUMP JUMPDEST SWAP8 PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP8 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP7 PUSH1 0x60 ADD CALLDATALOAD SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1B1C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1C42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBF9 DUP3 PUSH2 0x1C1C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1A0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1C85 JUMPI PUSH2 0x1C85 PUSH2 0x1C4B JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1C99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1B1C DUP2 PUSH2 0x1C8B JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1CB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1CD3 JUMPI PUSH2 0x1CD3 PUSH2 0x1C4B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x1CFB JUMPI PUSH2 0x1CFB PUSH2 0x1C4B JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x1D14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 CALLDATASIZE SUB SLT ISZERO PUSH2 0x1D47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D4F PUSH2 0x1C61 JUMP JUMPDEST PUSH2 0x1D58 DUP4 PUSH2 0x1C1C JUMP JUMPDEST DUP2 MSTORE PUSH2 0x1D66 PUSH1 0x20 DUP5 ADD PUSH2 0x1C1C JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x1D77 PUSH1 0x40 DUP5 ADD PUSH2 0x1C1C JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x1D88 PUSH1 0x60 DUP5 ADD PUSH2 0x1B05 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x1D99 PUSH1 0x80 DUP5 ADD PUSH2 0x1B05 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x1DAA PUSH1 0xA0 DUP5 ADD PUSH2 0x1C9C JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1DC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1DD5 CALLDATASIZE DUP3 DUP7 ADD PUSH2 0x1CA7 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 DUP4 ADD CALLDATALOAD PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x1DF3 DUP2 DUP6 ADD PUSH2 0x1B05 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 DUP4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x140 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x160 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x180 SWAP3 DUP4 ADD CALLDATALOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x61C JUMPI PUSH2 0x61C PUSH2 0x1E2A JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x61C JUMPI PUSH2 0x61C PUSH2 0x1E2A JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1E81 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1E69 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1EA2 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1E66 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH2 0x1ECD PUSH1 0x20 DUP3 ADD DUP4 MLOAD PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1EE6 PUSH1 0x40 DUP5 ADD DUP3 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x80 DUP5 ADD MSTORE POP PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD MLOAD DUP1 ISZERO ISZERO PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x1A0 DUP1 PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1F4D PUSH2 0x1C0 DUP6 ADD DUP4 PUSH2 0x1E8A JUMP JUMPDEST PUSH1 0xE0 DUP7 ADD MLOAD PUSH2 0x100 DUP7 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP7 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x120 PUSH2 0x1F79 DUP2 DUP8 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP7 ADD MLOAD PUSH2 0x140 DUP7 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP7 ADD MLOAD PUSH2 0x160 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP7 ADD MLOAD PUSH2 0x180 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP6 ADD MLOAD SWAP4 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1FC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1FDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xBF9 DUP2 PUSH2 0x1C8B JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x61C JUMPI PUSH2 0x61C PUSH2 0x1E2A JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2030 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x2047 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1E66 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xBF9 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1E8A JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER SLOAD EQ 0xD1 SWAP11 MLOAD PUSH5 0x83A5BF09EE DUP3 DIFFICULTY JUMPDEST 0xB9 JUMP SWAP16 0xDE 0xC7 PUSH14 0x4F7422DE7909F26178A7B464736F PUSH13 0x63430008110033000000000000 ","sourceMap":"509:8581:73:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1814:123;;;;;;;;;;-1:-1:-1;1814:123:73;;;;;:::i;:::-;1885:7;1907:25;;;:12;:25;;;;;;;1814:123;;;;345:25:181;;;333:2;318:18;1814:123:73;;;;;;;;2520:148;;;;;;;;;;-1:-1:-1;2520:148:73;;;;;:::i;:::-;;:::i;:::-;;2816:331;;;;;;;;;;-1:-1:-1;2816:331:73;;;;;:::i;:::-;;:::i;6239:1845::-;;;;;;:::i;:::-;;:::i;2074:80::-;;;;;;;;;;-1:-1:-1;2139:10:73;;2074:80;;-1:-1:-1;;;;;2139:10:73;;;1939:51:181;;1927:2;1912:18;2074:80:73;1793:203:181;3761:1983:73;;;;;;;;;;-1:-1:-1;3761:1983:73;;;;;:::i;:::-;;:::i;1941:129::-;;;;;;;;;;-1:-1:-1;1941:129:73;;;;;:::i;:::-;2015:7;2037:28;;;:15;:28;;;;;;;1941:129;2158:99;;;;;;;;;;-1:-1:-1;2228:24:73;;2158:99;;2520:148;3606:10:68;3576:26;2368:30:106;;-1:-1:-1;;;;;2368:30:106;;2273:130;3576:26:68;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;2592:10:73::1;:22:::0;;-1:-1:-1;;;;;;2592:22:73::1;-1:-1:-1::0;;;;;2592:22:73;::::1;::::0;;::::1;::::0;;;2625:38:::1;::::0;;2922:34:181;;;2652:10:73::1;2987:2:181::0;2972:18;;2965:43;2625:38:73::1;::::0;2857:18:181;2625:38:73::1;;;;;;;;2520:148:::0;:::o;2816:331::-;3606:10:68;3576:26;2368:30:106;;-1:-1:-1;;;;;2368:30:106;;2273:130;3576:26:68;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;1023:6:104::1;2911:23:73;:55;2907:110;;;2975:42;;-1:-1:-1::0;;;2975:42:73::1;;;;;;;;;;;2907:110;3024:24;:50:::0;;;3085:57:::1;::::0;;3193:25:181;;;3131:10:73::1;3249:2:181::0;3234:18;;3227:60;3085:57:73::1;::::0;3166:18:181;3085:57:73::1;3019:274:181::0;6239:1845:73;1556:9:68;;-1:-1:-1;;1556:30:68;1552:89;;1595:46;;-1:-1:-1;;;1595:46:68;;;;;;;;;;;1552:89;808:1:104;1708:9:68;:29;:1;6641:21:73::1;1708:1:68::0;6663:79:73::1;6697:19;::::0;::::1;;6718:23;::::0;;;::::1;::::0;::::1;;:::i;:::-;6663:33;:79::i;:::-;6641:102:::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;6641:102:73;:117:::1;;::::0;-1:-1:-1;;;;;6641:117:73::1;::::0;-1:-1:-1;6947:21:73;;;::::1;::::0;:48:::1;;;6988:7;-1:-1:-1::0;;;;;6972:23:73::1;:12;-1:-1:-1::0;;;;;6972:23:73::1;;;6947:48;6943:122;;;7012:46;;-1:-1:-1::0;;;7012:46:73::1;;;;;;;;;;;6943:122;7663:18;7684:29;;7705:7:::0;7684:29:::1;:::i;:::-;:20;:29::i;:::-;7663:50:::0;-1:-1:-1;7758:13:73::1;7774:27;7791:10:::0;7774:14;:27:::1;:::i;:::-;7758:43;;7811:5;7820:1;7811:10:::0;7807:67:::1;;7830:44;;-1:-1:-1::0;;;7830:44:73::1;;;;;;;;;;;7807:67;7881:46;7912:7;7921:5;7881:30;:46::i;:::-;8021:58;8031:7;8040:14;8056:10;8068;8021:9;:58::i;:::-;-1:-1:-1::0;;709:1:104;1876:9:68;:33;-1:-1:-1;;;;;6239:1845:73:o;3761:1983::-;1556:9:68;;-1:-1:-1;;1556:30:68;1552:89;;1595:46;;-1:-1:-1;;;1595:46:68;;;;;;;;;;;1552:89;808:1:104;1708:9:68;:29;:1;3939:79:73::1;3973:19;::::0;::::1;;3994:23;::::0;;;::::1;::::0;::::1;;:::i;3939:79::-;4066:1;:19:::0;;;:14:::1;:19;::::0;;;;:28:::1;;::::0;:19;;-1:-1:-1;;;;4066:28:73;::::1;;;4061:104;;4111:47;;-1:-1:-1::0;;;4111:47:73::1;;;;;;;;;;;4061:104;4171:13;4187:65;4202:3:::0;4207:19:::1;::::0;::::1;;4228:23;::::0;;;::::1;::::0;::::1;;:::i;:::-;4187:14;:65::i;:::-;4300:10;4259:21;4283:28:::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;4283:35:73;::::1;::::0;;;;;;;;4171:81;;-1:-1:-1;4372:22:73;;::::1;4368:83;;;4403:48;;-1:-1:-1::0;;;4403:48:73::1;;;;;;;;;;;4368:83;5046:18;5067:29;;5088:7:::0;5067:29:::1;:::i;:::-;5046:50:::0;-1:-1:-1;5373:21:73::1;::::0;5419:127:::1;5475:3:::0;5486:5;5499:27:::1;5516:10:::0;5499:14;:27:::1;:::i;:::-;5534:6;5419:48;:127::i;:::-;5372:174:::0;;-1:-1:-1;5372:174:73;-1:-1:-1;5624:29:73::1;5372:174:::0;5624:13;:29:::1;:::i;:::-;5603:10;5586:1;:28:::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;5586:35:73;::::1;::::0;;;;;;;:67;5677:62:::1;5687:11:::0;5700:14;5716:10;5728;5677:9:::1;:62::i;:::-;-1:-1:-1::0;;709:1:104;1876:9:68;:33;-1:-1:-1;;;;;;;;3761:1983:73:o;19324:146:102:-;19408:7;19451:3;19456:7;19440:24;;;;;;;;7054:25:181;;;7127:10;7115:23;7110:2;7095:18;;7088:51;7042:2;7027:18;;6882:263;19440:24:102;;;;;;;;;;;;;19430:35;;;;;;19423:42;;19324:146;;;;;:::o;4956:139:68:-;5038:7;5081;5070:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;5060:30;;;;;;5053:37;;4956:139;;;:::o;2052:843:102:-;2182:7;2193:1;2182:12;2178:39;;2052:843;;:::o;2178:39::-;-1:-1:-1;;;;;2274:20:102;;2270:105;;2311:57;;-1:-1:-1;;;2311:57:102;;;;;;;;;;;2270:105;2525:30;;-1:-1:-1;;;2525:30:102;;2549:4;2525:30;;;1939:51:181;2419:6:102;;2381:20;;-1:-1:-1;;;;;2525:15:102;;;;;1912:18:181;;2525:30:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2506:49;-1:-1:-1;2597:58:102;-1:-1:-1;;;;;2597:22:102;;2620:10;2640:4;2647:7;2597:22;:58::i;:::-;2756:30;;-1:-1:-1;;;2756:30:102;;2780:4;2756:30;;;1939:51:181;2801:7:102;;2789:8;;-1:-1:-1;;;;;2756:15:102;;;;;1912:18:181;;2756:30:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;;;:::i;:::-;:52;2752:139;;2825:59;;-1:-1:-1;;;2825:59:102;;;;;;;;;;;2752:139;2123:772;;2052:843;;:::o;8497:591:73:-;8639:1;:25;;;:12;:25;;;;;:37;;8668:8;;8639:1;:37;;8668:8;;8639:37;:::i;:::-;;;;-1:-1:-1;;8682:1:73;:28;;;:15;:28;;;;;:36;;8714:4;;8682:1;:36;;8714:4;;8682:36;:::i;:::-;;;;-1:-1:-1;;8741:10:73;;-1:-1:-1;;;;;8741:10:73;8784:47;8813:6;8741:10;8725:13;8784:21;:47::i;:::-;8837:71;8876:6;8885:5;8892:15;8903:4;8892:8;:15;:::i;:::-;8837:31;:71::i;:::-;8932:53;;-1:-1:-1;;;8932:53:73;;-1:-1:-1;;;;;9854:32:181;;;8932:53:73;;;9836:51:181;9903:18;;;9896:34;;;9946:18;;;9939:34;;;8932:29:73;;;;;9809:18:181;;8932:53:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9015:68:73;;;-1:-1:-1;;;;;10271:15:181;;10253:34;;10318:2;10303:18;;10296:34;;;10346:18;;;10339:34;;;9072:10:73;10404:2:181;10389:18;;10382:43;9035:11:73;;-1:-1:-1;9015:68:73;;-1:-1:-1;10202:3:181;10187:19;9015:68:73;;;;;;;8614:474;8497:591;;;;:::o;5603:180:68:-;5709:7;5731:47;5756:4;5762:3;5767:7;5776:1;5731:24;:47::i;:::-;5724:54;5603:180;-1:-1:-1;;;;5603:180:68:o;8045:460:102:-;8193:7;8202;8217:26;8246:15;8256:4;8246:9;:15::i;:::-;8351:14;;;;8217:44;;-1:-1:-1;;;;;;8351:14:102;;;;8375:17;;;;8371:63;;8410:7;;-1:-1:-1;8419:7:102;-1:-1:-1;8402:25:102;;-1:-1:-1;8402:25:102;8371:63;8447:53;8461:4;8467:6;8475:7;8484;8493:6;8447:13;:53::i;:::-;8440:60;;;;;;8045:460;;;;;;;;:::o;974:241:56:-;1139:68;;-1:-1:-1;;;;;10694:15:181;;;1139:68:56;;;10676:34:181;10746:15;;10726:18;;;10719:43;10778:18;;;10771:34;;;1112:96:56;;1132:5;;-1:-1:-1;;;1162:27:56;10611:18:181;;1139:68:56;;;;-1:-1:-1;;1139:68:56;;;;;;;;;;;;;;-1:-1:-1;;;;;1139:68:56;-1:-1:-1;;;;;;1139:68:56;;;;;;;;;;1112:19;:96::i;1475:603::-;1830:10;;;1829:62;;-1:-1:-1;1846:39:56;;-1:-1:-1;;;1846:39:56;;1870:4;1846:39;;;2922:34:181;-1:-1:-1;;;;;2992:15:181;;;2972:18;;;2965:43;1846:15:56;;;;;2857:18:181;;1846:39:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;1829:62;1808:163;;;;-1:-1:-1;;;1808:163:56;;11018:2:181;1808:163:56;;;11000:21:181;11057:2;11037:18;;;11030:30;11096:34;11076:18;;;11069:62;-1:-1:-1;;;11147:18:181;;;11140:52;11209:19;;1808:163:56;;;;;;;;;2008:62;;-1:-1:-1;;;;;11431:32:181;;2008:62:56;;;11413:51:181;11480:18;;;11473:34;;;1981:90:56;;2001:5;;-1:-1:-1;;;2031:22:56;11386:18:181;;2008:62:56;11239:274:181;1981:90:56;1475:603;;;:::o;2084:310::-;2233:39;;-1:-1:-1;;;2233:39:56;;2257:4;2233:39;;;2922:34:181;-1:-1:-1;;;;;2992:15:181;;;2972:18;;;2965:43;2210:20:56;;2275:5;;2233:15;;;;;2857:18:181;;2233:39:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;;:::i;:::-;2317:69;;-1:-1:-1;;;;;11431:32:181;;2317:69:56;;;11413:51:181;11480:18;;;11473:34;;;2210:70:56;;-1:-1:-1;2290:97:56;;2310:5;;-1:-1:-1;;;2340:22:56;11386:18:181;;2317:69:56;11239:274:181;18635:383:102;18796:8;;;;18766:7;;18796:8;;;;18785:19;;;;18781:233;;-1:-1:-1;18882:3:102;18848:38;;18781:233;18977:15;18987:4;18977:9;:15::i;:::-;:30;-1:-1:-1;;;;;18977:30:102;;18635:383;-1:-1:-1;;;;;18635:383:102:o;1192:571::-;1248:19;1367:20;;;:14;:20;;;;;1677:1;1652:22;;;;1248:19;;1367:20;-1:-1:-1;;;1652:22:102;;;;;:26;1648:91;;;1695:37;;-1:-1:-1;;;1695:37:102;;;;;;;;;;;1648:91;1752:6;1192:571;-1:-1:-1;;;1192:571:102:o;10818:2126::-;10970:7;11215:20;;;:14;:20;;;;;10970:7;;;;11396:14;11215:20;11396:12;:14::i;:::-;11392:1548;;;11474:190;11507:47;11539:4;11545:8;11507:31;:47::i;:::-;11566:48;11598:4;11604:9;11566:31;:48::i;:::-;11474:5;;:190;11626:10;11648:6;11474:21;:190::i;:::-;11674:9;11457:234;;;;;;;;11392:1548;11851:16;11882:15;11892:4;11882:9;:15::i;:::-;:43;;;-1:-1:-1;;;;;11882:43:102;;;;-1:-1:-1;11882:43:102;;12537:8;;12555:35;;:19;;11882:43;;12555:19;:35::i;:::-;12598:50;-1:-1:-1;;;;;12598:29:102;;12628:11;12641:6;12598:29;:50::i;:::-;12657:11;-1:-1:-1;;;;;12671:17:102;;;12698:10;12718:8;12736:9;12755:6;12771:54;2186:4:104;12771:15:102;:54;:::i;:::-;12671:162;;-1:-1:-1;;;;;;12671:162:102;;;;;;;;;;11777:25:181;;;;-1:-1:-1;;;;;11876:15:181;;;11856:18;;;11849:43;11928:15;;;;11908:18;;;11901:43;11960:18;;;11953:34;12003:19;;;11996:35;11749:19;;12671:162:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12657:176;-1:-1:-1;12867:35:102;-1:-1:-1;;;;;12867:19:102;;12887:11;12900:1;12867:19;:35::i;:::-;12918:3;-1:-1:-1;12923:9:102;;-1:-1:-1;12910:23:102;;-1:-1:-1;;;;;12910:23:102;10818:2126;;;;;;;;;:::o;3747:706:56:-;4166:23;4192:69;4220:4;4192:69;;;;;;;;;;;;;;;;;4200:5;-1:-1:-1;;;;;4192:27:56;;;:69;;;;;:::i;:::-;4275:17;;4166:95;;-1:-1:-1;4275:21:56;4271:176;;4370:10;4359:30;;;;;;;;;;;;:::i;:::-;4351:85;;;;-1:-1:-1;;;4351:85:56;;12494:2:181;4351:85:56;;;12476:21:181;12533:2;12513:18;;;12506:30;12572:34;12552:18;;;12545:62;-1:-1:-1;;;12623:18:181;;;12616:40;12673:19;;4351:85:56;12292:406:181;39242:129:108;39320:13;;;;39300:4;;39320:13;;39319:14;:47;;;;-1:-1:-1;;39337:17:108;;:24;:29;;;39242:129::o;3967:388:102:-;4066:5;4156:19;;;:14;:19;;;;;;;;-1:-1:-1;;;;;4156:33:102;;;;;;;;;;;;4207:19;;;:14;:19;;;;;;:32;;:39;;4066:5;;4156:33;;;;4207:32;4156:33;;4207:39;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;4207:39:102;4199:64;4195:137;;4278:54;;-1:-1:-1;;;4278:54:102;;;;;;;;;;;27631:998:108;27810:13;;;;27786:7;;27810:13;;27809:14;27801:40;;;;-1:-1:-1;;;27801:40:108;;13037:2:181;27801:40:108;;;13019:21:181;13076:2;13056:18;;;13049:30;-1:-1:-1;;;13095:18:181;;;13088:43;13148:18;;27801:40:108;12835:337:181;27801:40:108;27861:4;:13;;27875:12;27861:27;;;;;;;;;;:::i;:::-;;;;;;;;;27855:2;:33;;27847:68;;;;-1:-1:-1;;;27847:68:108;;13379:2:181;27847:68:108;;;13361:21:181;13418:2;13398:18;;;13391:30;-1:-1:-1;;;13437:18:181;;;13430:52;13499:18;;27847:68:108;13177:346:181;27847:68:108;27922:10;27938:13;27957:25;27985:4;:13;;27957:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28018:67;28036:4;28042:14;28058:12;28072:2;28076:8;28018:17;:67::i;:::-;28004:81;;-1:-1:-1;28004:81:108;-1:-1:-1;28099:11:108;;;;28091:34;;;;-1:-1:-1;;;28091:34:108;;13730:2:181;28091:34:108;;;13712:21:181;13769:2;13749:18;;;13742:30;-1:-1:-1;;;13788:18:181;;;13781:40;13838:18;;28091:34:108;13528:334:181;28091:34:108;28132:18;28219:4;:30;;28250:14;28219:46;;;;;;;;;;:::i;:::-;;;;;;;;;3443:4:104;28162::108;:13;;;28154:5;:21;;;;:::i;:::-;28153:57;;;;:::i;:::-;:112;;;;:::i;:::-;28132:133;;28336:10;28331:2;28304:8;28313:14;28304:24;;;;;;;;;;:::i;:::-;;;;;;;:29;;;;:::i;:::-;:42;;;;:::i;:::-;28272:4;:13;;28286:14;28272:29;;;;;;;;;;:::i;:::-;;;;;;;;:74;;;;28407:2;28382:8;28391:12;28382:22;;;;;;;;;;:::i;:::-;;;;;;;:27;;;;:::i;:::-;28352:4;:13;;28366:12;28352:27;;;;;;;;;;:::i;:::-;;;;;;;;;;:57;28420:15;;28416:112;;28511:10;28478:4;:14;;28493;28478:30;;;;;;;;;;:::i;:::-;;;;;;;;;:43;;;;:::i;:::-;28445:4;:14;;28460;28445:30;;;;;;;;;;:::i;:::-;;;;;;;;;;:76;28416:112;28549:8;;28539:69;;;14489:25:181;;;14545:2;14530:18;;14523:34;;;14605:4;14593:17;;;14573:18;;;14566:45;14647:17;;14642:2;14627:18;;14620:45;28539:69:108;;28559:10;;28549:8;28539:69;;;;;;14476:3:181;28539:69:108;;;-1:-1:-1;28622:2:108;;27631:998;-1:-1:-1;;;;;;;;27631:998:108:o;3873:223:57:-;4006:12;4037:52;4059:6;4067:4;4073:1;4076:12;4037:21;:52::i;18274:837:108:-;18448:10;18460:13;18507:12;18489:30;;:14;:30;;;18481:66;;;;-1:-1:-1;;;18481:66:108;;14878:2:181;18481:66:108;;;14860:21:181;14917:2;14897:18;;;14890:30;14956:25;14936:18;;;14929:53;14999:18;;18481:66:108;14676:347:181;18481:66:108;18553:28;18584:4;:30;;18553:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18620:19;18642:26;18646:8;18656:11;18642:3;:26::i;:::-;18620:48;;18699:2;:9;18682:14;:26;;;:54;;;;;18727:2;:9;18712:12;:24;;;18682:54;18674:85;;;;-1:-1:-1;;;18674:85:108;;15230:2:181;18674:85:108;;;15212:21:181;15269:2;15249:18;;;15242:30;-1:-1:-1;;;15288:18:181;;;15281:48;15346:18;;18674:85:108;15028:342:181;18674:85:108;18766:9;18778:18;18791:4;18778:12;:18::i;:::-;18766:30;;18802:10;18815:11;18820:2;18824:1;18815:4;:11::i;:::-;18802:24;;18877:11;18889:12;18877:25;;;;;;;;;;:::i;:::-;;;;;;;18872:2;:30;;;;:::i;:::-;18852:2;18855:12;18852:16;;;;;;;;;;:::i;:::-;;;;;;;:51;;;;:::i;:::-;18833:2;18836:12;18833:16;;;;;;;;;;:::i;:::-;;;;;;:70;;;;;18909:9;18921:32;18927:1;18930:14;18946:2;18950;18921:5;:32::i;:::-;18909:44;;18974:2;18977:14;18974:18;;;;;;;;;;:::i;:::-;;;;;;;18965:1;18969;18965:5;;;;:::i;:::-;18964:28;;;;:::i;:::-;18959:33;;3443:4:104;19012::108;:12;;;19007:2;:17;;;;:::i;:::-;19006:47;;;;:::i;:::-;18998:55;;19079:11;19091:14;19079:27;;;;;;;;;;:::i;:::-;;;;;;;19070:5;19065:2;:10;;;;:::i;:::-;19064:42;;;;:::i;:::-;19059:47;;18475:636;;;;;18274:837;;;;;;;;:::o;4960:446:57:-;5125:12;5182:5;5157:21;:30;;5149:81;;;;-1:-1:-1;;;5149:81:57;;15577:2:181;5149:81:57;;;15559:21:181;15616:2;15596:18;;;15589:30;15655:34;15635:18;;;15628:62;-1:-1:-1;;;15706:18:181;;;15699:36;15752:19;;5149:81:57;15375:402:181;5149:81:57;5241:12;5255:23;5282:6;-1:-1:-1;;;;;5282:11:57;5301:5;5308:4;5282:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5240:73;;;;5330:69;5357:6;5365:7;5374:10;5386:12;5330:26;:69::i;:::-;5323:76;4960:446;-1:-1:-1;;;;;;;4960:446:57:o;11512:464:108:-;11672:15;;11714:27;;11626:16;;11672:15;11701:40;;11693:73;;;;-1:-1:-1;;;11693:73:108;;16276:2:181;11693:73:108;;;16258:21:181;16315:2;16295:18;;;16288:30;-1:-1:-1;;;16334:18:181;;;16327:50;16394:18;;11693:73:108;16074:344:181;11693:73:108;11772:19;11808:9;11794:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11794:24:108;;11772:46;;11829:9;11824:133;11844:9;11840:1;:13;11824:133;;;11887:20;11908:1;11887:23;;;;;;;;:::i;:::-;;;;;;;11873:8;11882:1;11873:11;;;;;;;;:::i;:::-;;;;;;;:37;;;;:::i;:::-;11865:2;11868:1;11865:5;;;;;;;;:::i;:::-;;;;;;;;;;:45;11939:3;;11824:133;;;-1:-1:-1;11969:2:108;11512:464;-1:-1:-1;;;;11512:464:108:o;3755:127::-;3818:7;3840:37;3872:4;3840:31;:37::i;9598:1376::-;9702:9;;9667:7;;;;9732:98;9752:9;9748:1;:13;9732:98;;;9778:2;9781:1;9778:5;;;;;;;;:::i;:::-;;;;;;;9773:10;;;;;:::i;:::-;;-1:-1:-1;9812:3:108;;9732:98;;;;9839:1;9844;9839:6;9835:35;;9862:1;9855:8;;;;;;9835:35;9876:13;9907:1;9876:13;9927;9931:9;9927:1;:13;:::i;:::-;9914:26;;9952:9;9947:744;4231:3:104;9963:1:108;:28;9947:744;;;10016:1;10003:10;10025:374;10045:9;10041:1;:13;10025:374;;;10093:9;10085:2;10088:1;10085:5;;;;;;;;:::i;:::-;;;;;;;:17;;;;:::i;:::-;10074:6;10079:1;10074:2;:6;:::i;:::-;10073:30;;;;:::i;:::-;10068:35;-1:-1:-1;10377:3:108;;10025:374;;;;10414:1;10406:9;;10584:2;10567:9;10579:1;10567:13;;;;:::i;:::-;10566:20;;;;:::i;:::-;4566:3:104;10537:1:108;10507:26;4566:3:104;10507:2:108;:26;:::i;:::-;10506:32;;;;:::i;:::-;10505:58;;;;:::i;:::-;:81;;;;:::i;:::-;10490:1;10472:14;10477:9;10472:2;:14;:::i;:::-;4566:3:104;10438:6:108;10443:1;10438:2;:6;:::i;:::-;10437:32;;;;:::i;:::-;:49;;;;:::i;:::-;10436:55;;;;:::i;:::-;10435:153;;;;:::i;:::-;10423:165;-1:-1:-1;10600:16:108;10423:165;10610:5;10600:9;:16::i;:::-;10596:49;;;10635:1;10628:8;;;;;;;;;;;10596:49;-1:-1:-1;10673:3:108;;9947:744;;;-1:-1:-1;10940:29:108;;-1:-1:-1;;;10940:29:108;;16625:2:181;10940:29:108;;;16607:21:181;16664:2;16644:18;;;16637:30;-1:-1:-1;;;16683:18:181;;;16676:49;16742:18;;10940:29:108;16423:343:181;7906:1296:108;8060:9;;8025:7;;8083:22;;;;-1:-1:-1;8075:50:108;;;;-1:-1:-1;;;8075:50:108;;16973:2:181;8075:50:108;;;16955:21:181;17012:2;16992:18;;;16985:30;-1:-1:-1;;;17031:18:181;;;17024:45;17086:18;;8075:50:108;16771:339:181;8075:50:108;8144:1;8132:9;;8179:13;8183:9;8179:1;:13;:::i;:::-;8166:26;;8204:9;8199:419;8219:9;8215:1;:13;8199:419;;;8249:10;8244:15;;:1;:15;8240:332;;8276:2;8279:1;8276:5;;;;;;;;:::i;:::-;;;;;;;8271:10;;;;;:::i;:::-;;;8314:9;8306:2;8309:1;8306:5;;;;;;;;:::i;:::-;;;;;;;:17;;;;:::i;:::-;8296:5;8300:1;8296;:5;:::i;:::-;8295:29;;;;:::i;:::-;8291:33;;8240:332;8600:3;;8199:419;;;-1:-1:-1;8662:14:108;8667:9;8662:2;:14;:::i;:::-;4566:3:104;8628:5:108;8632:1;8628;:5;:::i;:::-;:29;;;;:::i;:::-;8627:50;;;;:::i;:::-;8623:54;-1:-1:-1;8684:9:108;8731:2;8702:25;4566:3:104;8702:1:108;:25;:::i;:::-;8701:32;;;;:::i;:::-;8696:38;;:1;:38;:::i;:::-;8684:50;-1:-1:-1;8740:13:108;8932:1;8740:13;8939:213;4231:3:104;8955:1:108;:28;8939:213;;;9003:1;8995:9;;9047:1;9043;9034;9038;9034:5;;;;:::i;:::-;9033:11;;;;:::i;:::-;:15;;;;:::i;:::-;9027:1;9018:5;9022:1;;9018:5;:::i;:::-;9017:11;;;;:::i;:::-;9016:33;;;;:::i;:::-;9012:37;-1:-1:-1;9061:16:108;9012:37;9071:5;9061:9;:16::i;:::-;9057:49;;;-1:-1:-1;9096:1:108;-1:-1:-1;9089:8:108;;-1:-1:-1;;;;;;9089:8:108;9057:49;9134:3;;8939:213;;;-1:-1:-1;9157:40:108;;-1:-1:-1;;;9157:40:108;;17317:2:181;9157:40:108;;;17299:21:181;17356:2;17336:18;;;17329:30;17395:32;17375:18;;;17368:60;17445:18;;9157:40:108;17115:354:181;7466:628:57;7646:12;7674:7;7670:418;;;7701:10;:17;7722:1;7701:22;7697:286;;-1:-1:-1;;;;;1465:19:57;;;7908:60;;;;-1:-1:-1;;;7908:60:57;;17676:2:181;7908:60:57;;;17658:21:181;17715:2;17695:18;;;17688:30;17754:31;17734:18;;;17727:59;17803:18;;7908:60:57;17474:353:181;7908:60:57;-1:-1:-1;8003:10:57;7996:17;;7670:418;8044:33;8052:10;8064:12;8044:7;:33::i;1367:561:101:-;1478:16;;;;1541:12;;;;1611:13;;;;1541:12;;1478:16;1675:14;;;;;;:38;;;1711:2;1693:15;:20;1675:38;1671:253;;;1723:10;1736:4;:17;;;1723:30;;1906:2;1902;1898:11;1891:2;1878:11;1874:20;1864:8;1860:35;1845:11;1841:2;1837:20;1833:2;1829:29;1825:71;1821:89;1809:101;;1799:119;1671:253;1459:469;;1367:561;;;:::o;589:130:107:-;651:4;690:5;671:16;682:1;685;671:10;:16::i;:::-;:24;;589:130;-1:-1:-1;;;589:130:107:o;8616:540:57:-;8775:17;;:21;8771:379;;9003:10;8997:17;9059:15;9046:10;9042:2;9038:19;9031:44;8771:379;9126:12;9119:20;;-1:-1:-1;;;9119:20:57;;;;;;;;:::i;911:140:107:-;976:7;999:1;995;:5;991:38;;;1017:5;1021:1;1017;:5;:::i;:::-;1010:12;;;;991:38;1041:5;1045:1;1041;:5;:::i;14:180:181:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:181;;14:180;-1:-1:-1;14:180:181:o;381:173::-;449:20;;-1:-1:-1;;;;;498:31:181;;488:42;;478:70;;544:1;541;534:12;478:70;381:173;;;:::o;559:186::-;618:6;671:2;659:9;650:7;646:23;642:32;639:52;;;687:1;684;677:12;639:52;710:29;729:9;710:29;:::i;935:161::-;1000:5;1045:3;1036:6;1031:3;1027:16;1023:26;1020:46;;;1062:1;1059;1052:12;1020:46;-1:-1:-1;1084:6:181;935:161;-1:-1:-1;935:161:181:o;1101:578::-;1220:6;1228;1236;1244;1297:3;1285:9;1276:7;1272:23;1268:33;1265:53;;;1314:1;1311;1304:12;1265:53;1354:9;1341:23;1387:18;1379:6;1376:30;1373:50;;;1419:1;1416;1409:12;1373:50;1442:72;1506:7;1497:6;1486:9;1482:22;1442:72;:::i;:::-;1432:82;;;1533:38;1567:2;1556:9;1552:18;1533:38;:::i;:::-;1101:578;;1523:48;;-1:-1:-1;;;;1618:2:181;1603:18;;1590:32;;1669:2;1654:18;1641:32;;1101:578::o;2001:572::-;2120:6;2128;2136;2144;2197:3;2185:9;2176:7;2172:23;2168:33;2165:53;;;2214:1;2211;2204:12;2165:53;2254:9;2241:23;2287:18;2279:6;2276:30;2273:50;;;2319:1;2316;2309:12;2273:50;2342:72;2406:7;2397:6;2386:9;2382:22;2342:72;:::i;:::-;2332:82;2461:2;2446:18;;2433:32;;-1:-1:-1;2512:2:181;2497:18;;2484:32;;2563:2;2548:18;2535:32;;-1:-1:-1;2001:572:181;-1:-1:-1;;;;2001:572:181:o;2578:127::-;2639:10;2634:3;2630:20;2627:1;2620:31;2670:4;2667:1;2660:15;2694:4;2691:1;2684:15;3298:163;3365:20;;3425:10;3414:22;;3404:33;;3394:61;;3451:1;3448;3441:12;3466:184;3524:6;3577:2;3565:9;3556:7;3552:23;3548:32;3545:52;;;3593:1;3590;3583:12;3545:52;3616:28;3634:9;3616:28;:::i;3655:127::-;3716:10;3711:3;3707:20;3704:1;3697:31;3747:4;3744:1;3737:15;3771:4;3768:1;3761:15;3787:250;3854:2;3848:9;3896:6;3884:19;;3933:18;3918:34;;3954:22;;;3915:62;3912:88;;;3980:18;;:::i;:::-;4016:2;4009:22;3787:250;:::o;4042:118::-;4128:5;4121:13;4114:21;4107:5;4104:32;4094:60;;4150:1;4147;4140:12;4094:60;4042:118;:::o;4165:128::-;4230:20;;4259:28;4230:20;4259:28;:::i;4298:718::-;4340:5;4393:3;4386:4;4378:6;4374:17;4370:27;4360:55;;4411:1;4408;4401:12;4360:55;4447:6;4434:20;4473:18;4510:2;4506;4503:10;4500:36;;;4516:18;;:::i;:::-;4591:2;4585:9;4559:2;4645:13;;-1:-1:-1;;4641:22:181;;;4665:2;4637:31;4633:40;4621:53;;;4689:18;;;4709:22;;;4686:46;4683:72;;;4735:18;;:::i;:::-;4775:10;4771:2;4764:22;4810:2;4802:6;4795:18;4856:3;4849:4;4844:2;4836:6;4832:15;4828:26;4825:35;4822:55;;;4873:1;4870;4863:12;4822:55;4937:2;4930:4;4922:6;4918:17;4911:4;4903:6;4899:17;4886:54;4984:1;4977:4;4972:2;4964:6;4960:15;4956:26;4949:37;5004:6;4995:15;;;;;;4298:718;;;;:::o;5021:1362::-;5135:9;5194:6;5186:5;5170:14;5166:26;5162:39;5159:59;;;5214:1;5211;5204:12;5159:59;5242:17;;:::i;:::-;5284:24;5302:5;5284:24;:::i;:::-;5275:7;5268:41;5343:33;5372:2;5365:5;5361:14;5343:33;:::i;:::-;5338:2;5329:7;5325:16;5318:59;5411:33;5440:2;5433:5;5429:14;5411:33;:::i;:::-;5406:2;5397:7;5393:16;5386:59;5479:34;5509:2;5502:5;5498:14;5479:34;:::i;:::-;5474:2;5465:7;5461:16;5454:60;5549:35;5579:3;5572:5;5568:15;5549:35;:::i;:::-;5543:3;5534:7;5530:17;5523:62;5620:32;5647:3;5640:5;5636:15;5620:32;:::i;:::-;5614:3;5605:7;5601:17;5594:59;5700:3;5693:5;5689:15;5676:29;5728:18;5720:6;5717:30;5714:50;;;5760:1;5757;5750:12;5714:50;5799:52;5836:14;5827:6;5820:5;5816:18;5799:52;:::i;:::-;5793:3;5784:7;5780:17;5773:79;;5911:3;5904:5;5900:15;5887:29;5881:3;5872:7;5868:17;5861:56;5936:3;5973:34;6003:2;5996:5;5992:14;5973:34;:::i;:::-;5955:16;;;5948:60;6027:3;6077:14;;;6064:28;6046:16;;;6039:54;6112:3;6162:14;;;6149:28;6131:16;;;6124:54;6197:3;6247:14;;;6234:28;6216:16;;;6209:54;6282:3;6332:14;;;6319:28;6301:16;;;6294:54;;;;-1:-1:-1;5959:7:181;5021:1362::o;6388:127::-;6449:10;6444:3;6440:20;6437:1;6430:31;6480:4;6477:1;6470:15;6504:4;6501:1;6494:15;6520:125;6585:9;;;6606:10;;;6603:36;;;6619:18;;:::i;6650:128::-;6717:9;;;6738:11;;;6735:37;;;6752:18;;:::i;7246:250::-;7331:1;7341:113;7355:6;7352:1;7349:13;7341:113;;;7431:11;;;7425:18;7412:11;;;7405:39;7377:2;7370:10;7341:113;;;-1:-1:-1;;7488:1:181;7470:16;;7463:27;7246:250::o;7501:270::-;7542:3;7580:5;7574:12;7607:6;7602:3;7595:19;7623:76;7692:6;7685:4;7680:3;7676:14;7669:4;7662:5;7658:16;7623:76;:::i;:::-;7753:2;7732:15;-1:-1:-1;;7728:29:181;7719:39;;;;7760:4;7715:50;;7501:270;-1:-1:-1;;7501:270:181:o;7776:1664::-;7967:2;7956:9;7949:21;7979:52;8027:2;8016:9;8012:18;8003:6;7997:13;6859:10;6848:22;6836:35;;6783:94;7979:52;7930:4;8078:2;8070:6;8066:15;8060:22;8091:51;8138:2;8127:9;8123:18;8109:12;6859:10;6848:22;6836:35;;6783:94;8091:51;-1:-1:-1;8191:2:181;8179:15;;8173:22;6859:10;6848:22;;8253:2;8238:18;;6836:35;-1:-1:-1;8306:2:181;8294:15;;8288:22;-1:-1:-1;;;;;1750:31:181;;8369:3;8354:19;;1738:44;-1:-1:-1;8423:3:181;8411:16;;8405:23;-1:-1:-1;;;;;1750:31:181;;8487:3;8472:19;;1738:44;-1:-1:-1;8541:3:181;8529:16;;8523:23;7220:13;;7213:21;8602:3;8587:19;;7201:34;8555:52;8656:3;8648:6;8644:16;8638:23;8680:6;8723:2;8717:3;8706:9;8702:19;8695:31;8749:53;8797:3;8786:9;8782:19;8766:14;8749:53;:::i;:::-;8839:3;8827:16;;8821:23;8863:3;8882:18;;;8875:30;;;;8942:15;;8936:22;8735:67;;-1:-1:-1;8977:3:181;8989:54;9024:18;;;8936:22;-1:-1:-1;;;;;1750:31:181;1738:44;;1684:104;8989:54;9068:15;;9062:22;9103:3;9122:18;;;9115:30;;;;9170:15;;9164:22;9205:3;9224:18;;;9217:30;;;;9272:15;;9266:22;9308:3;9327:19;;;9320:31;;;;9393:16;;;9387:23;9367:18;;9360:51;;;;-1:-1:-1;9428:6:181;7776:1664;-1:-1:-1;7776:1664:181:o;9445:184::-;9515:6;9568:2;9556:9;9547:7;9543:23;9539:32;9536:52;;;9584:1;9581;9574:12;9536:52;-1:-1:-1;9607:16:181;;9445:184;-1:-1:-1;9445:184:181:o;12042:245::-;12109:6;12162:2;12150:9;12141:7;12137:23;12133:32;12130:52;;;12178:1;12175;12168:12;12130:52;12210:9;12204:16;12229:28;12251:5;12229:28;:::i;12703:127::-;12764:10;12759:3;12755:20;12752:1;12745:31;12795:4;12792:1;12785:15;12819:4;12816:1;12809:15;13867:168;13940:9;;;13971;;13988:15;;;13982:22;;13968:37;13958:71;;14009:18;;:::i;14040:217::-;14080:1;14106;14096:132;;14150:10;14145:3;14141:20;14138:1;14131:31;14185:4;14182:1;14175:15;14213:4;14210:1;14203:15;14096:132;-1:-1:-1;14242:9:181;;14040:217::o;15782:287::-;15911:3;15949:6;15943:13;15965:66;16024:6;16019:3;16012:4;16004:6;16000:17;15965:66;:::i;:::-;16047:16;;;;;15782:287;-1:-1:-1;;15782:287:181:o;17832:219::-;17981:2;17970:9;17963:21;17944:4;18001:44;18041:2;18030:9;18026:18;18018:6;18001:44;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"1669200","executionCost":"1750","totalCost":"1670950"},"external":{"aavePool()":"2301","aavePortalFee()":"2347","getAavePortalDebt(bytes32)":"2428","getAavePortalFeeDebt(bytes32)":"2471","repayAavePortal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256,uint256,uint256)":"infinite","repayAavePortalFor((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address,uint256,uint256)":"infinite","setAavePool(address)":"30334","setAavePortalFee(uint256)":"28158"},"internal":{"_backLoan(address,uint256,uint256,bytes32)":"infinite"}},"methodIdentifiers":{"aavePool()":"a03e4bc3","aavePortalFee()":"ef1eb0c1","getAavePortalDebt(bytes32)":"09d7ba54","getAavePortalFeeDebt(bytes32)":"d1e5f31c","repayAavePortal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256,uint256,uint256)":"b3f62fcb","repayAavePortalFor((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address,uint256,uint256)":"75d32371","setAavePool(address)":"349f937c","setAavePortalFee(uint256)":"3bd30d34"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AssetLogic__getConfig_notRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__getTokenIndexFromStableSwapPool_notExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_feeOnTransferNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_nativeAssetNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PortalFacet__repayAavePortalFor_invalidAsset\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PortalFacet__repayAavePortalFor_zeroAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PortalFacet__repayAavePortal_assetNotApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PortalFacet__repayAavePortal_insufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PortalFacet__setAavePortalFee_invalidFee\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AavePoolUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"updated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AavePortalFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AavePortalRepayment\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"aavePool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"aavePortalFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferId\",\"type\":\"bytes32\"}],\"name\":\"getAavePortalDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferId\",\"type\":\"bytes32\"}],\"name\":\"getAavePortalFeeDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"_params\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_backingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxIn\",\"type\":\"uint256\"}],\"name\":\"repayAavePortal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"_params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_portalAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_backingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeAmount\",\"type\":\"uint256\"}],\"name\":\"repayAavePortalFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_aavePool\",\"type\":\"address\"}],\"name\":\"setAavePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_aavePortalFeeNumerator\",\"type\":\"uint256\"}],\"name\":\"setAavePortalFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"AavePoolUpdated(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"updated\":\"- The updated address\"}},\"AavePortalFeeUpdated(uint256,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"updated\":\"- The updated fee numerator\"}},\"AavePortalRepayment(bytes32,address,uint256,uint256,address)\":{\"params\":{\"amount\":\"- The amount that was repaid\",\"asset\":\"- The asset that was repaid\",\"fee\":\"- The fee amount that was repaid\",\"transferId\":\"- The transfer debt that was repaid\"}}},\"kind\":\"dev\",\"methods\":{\"repayAavePortal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256,uint256,uint256)\":{\"details\":\"The router must be approved for portal and with enough liquidity, and must be the caller of this function. If the asset is not whitelisted, must use the `repayAavePortalFor` function.\",\"params\":{\"_backingAmount\":\"The principle to be paid (in adopted asset)\",\"_feeAmount\":\"The fee to be paid (in adopted asset)\",\"_maxIn\":\"The max value of the local asset to swap for the _backingAmount of adopted asset\",\"_params\":\"TransferInfo associated with the transfer\"}},\"repayAavePortalFor((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address,uint256,uint256)\":{\"details\":\"Should always be paying in the backing asset for the aave loan. NOTE: This will *NOT* work if an asset is removed.\",\"params\":{\"_backingAmount\":\"Amount of principle to repay\",\"_feeAmount\":\"Amount of fees to repay\",\"_params\":\"TransferInfo associated with the transfer\",\"_portalAsset\":\"The asset you borrowed (adopted asset)\"}},\"setAavePool(address)\":{\"details\":\"Allows to set the aavePool to address zero to disable Aave Portal if needed\",\"params\":{\"_aavePool\":\"The address of the Aave Pool contract\"}},\"setAavePortalFee(uint256)\":{\"params\":{\"_aavePortalFeeNumerator\":\"The new value for the Aave Portal fee numerator\"}}},\"version\":1},\"userdoc\":{\"events\":{\"AavePoolUpdated(address,address)\":{\"notice\":\"Emitted `setAavePool` is updated\"},\"AavePortalFeeUpdated(uint256,address)\":{\"notice\":\"Emitted `setAavePortalFee` is updated\"},\"AavePortalRepayment(bytes32,address,uint256,uint256,address)\":{\"notice\":\"Emitted when a repayment on an Aave portal loan is made\"}},\"kind\":\"user\",\"methods\":{\"repayAavePortal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256,uint256,uint256)\":{\"notice\":\"Used by routers to perform a manual repayment to Aave Portals to cover any outstanding debt\"},\"repayAavePortalFor((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address,uint256,uint256)\":{\"notice\":\"This allows anyone to repay the portal in the adopted asset for a given router and transfer\"},\"setAavePool(address)\":{\"notice\":\"Sets the Aave Pool contract address.\"},\"setAavePortalFee(uint256)\":{\"notice\":\"Sets the Aave Portal fee numerator\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/PortalFacet.sol\":\"PortalFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n  AppStorage internal s;\\n\\n  // ========== Custom Errors ===========\\n\\n  error BaseConnextFacet__onlyOwner_notOwner();\\n  error BaseConnextFacet__onlyProposed_notProposedOwner();\\n  error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n  error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n  error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n  error BaseConnextFacet__whenNotPaused_paused();\\n  error BaseConnextFacet__nonReentrant_reentrantCall();\\n  error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n  error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n  error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @dev Prevents a contract from calling itself, directly or indirectly.\\n   * Calling a `nonReentrant` function from another `nonReentrant`\\n   * function is not supported. It is possible to prevent this from happening\\n   * by making the `nonReentrant` function external, and making it call a\\n   * `private` function that does the actual work.\\n   */\\n  modifier nonReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._status = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._status = Constants.NOT_ENTERED;\\n  }\\n\\n  modifier nonXCallReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._xcallStatus = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._xcallStatus = Constants.NOT_ENTERED;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and router role.\\n   */\\n  modifier onlyOwnerOrRouter() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n      revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and watcher role.\\n   */\\n  modifier onlyOwnerOrWatcher() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n      revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and admin role.\\n   */\\n  modifier onlyOwnerOrAdmin() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n      revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if all functionality is paused\\n   */\\n  modifier whenNotPaused() {\\n    if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n    _;\\n  }\\n\\n  // ============ Internal functions ============\\n  /**\\n   * @notice Indicates if the router allowlist has been removed\\n   */\\n  function _isRouterAllowlistRemoved() internal view returns (bool) {\\n    return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n    address adopted = AssetLogic.getConfig(_key).adopted;\\n    if (adopted == address(0)) {\\n      revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n    }\\n    return adopted;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n    address representation = AssetLogic.getConfig(_key).representation;\\n    // If this is address(0), then there is no mintable token for this asset on this\\n    // domain\\n    return representation;\\n  }\\n\\n  /**\\n   * @notice Calculates a transferId\\n   */\\n  function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_params));\\n  }\\n\\n  /**\\n   * @notice Internal utility function that combines\\n   *         `_origin` and `_nonce`.\\n   * @dev Both origin and nonce should be less than 2^32 - 1\\n   * @param _origin Domain of chain where the transfer originated\\n   * @param _nonce The unique identifier for the message from origin to destination\\n   * @return Returns (`_origin` << 32) & `_nonce`\\n   */\\n  function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n    return (uint64(_origin) << 32) | _nonce;\\n  }\\n\\n  function _getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address) {\\n    return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n  }\\n\\n  function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n    return AssetLogic.getCanonicalTokenId(_candidate, s);\\n  }\\n\\n  function _getLocalAndAdoptedToken(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address, address) {\\n    address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n    address _adopted = _getAdoptedAsset(_key);\\n    return (_local, _adopted);\\n  }\\n\\n  function _isLocalOrigin(address _token) internal view returns (bool) {\\n    return AssetLogic.isLocalOrigin(_token, s);\\n  }\\n\\n  function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n    TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n    bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n    if (!AssetLogic.getConfig(_key).approval) {\\n      revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n    }\\n    return (_canonical, _key);\\n  }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/PortalFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\nimport {BaseConnextFacet} from \\\"./BaseConnextFacet.sol\\\";\\n\\nimport {IAavePool} from \\\"../interfaces/IAavePool.sol\\\";\\n\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\nimport {TransferInfo} from \\\"../libraries/LibConnextStorage.sol\\\";\\n\\ncontract PortalFacet is BaseConnextFacet {\\n  // ========== Custom Errors ===========\\n  error PortalFacet__setAavePortalFee_invalidFee();\\n  error PortalFacet__repayAavePortal_assetNotApproved();\\n  error PortalFacet__repayAavePortal_insufficientFunds();\\n  error PortalFacet__repayAavePortalFor_zeroAmount();\\n  error PortalFacet__repayAavePortalFor_invalidAsset();\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted `setAavePool` is updated\\n   * @param updated - The updated address\\n   * @param caller - The account that called the function\\n   */\\n  event AavePoolUpdated(address updated, address caller);\\n\\n  /**\\n   * @notice Emitted `setAavePortalFee` is updated\\n   * @param updated - The updated fee numerator\\n   * @param caller - The account that called the function\\n   */\\n  event AavePortalFeeUpdated(uint256 updated, address caller);\\n\\n  /**\\n   * @notice Emitted when a repayment on an Aave portal loan is made\\n   * @param transferId - The transfer debt that was repaid\\n   * @param asset - The asset that was repaid\\n   * @param amount - The amount that was repaid\\n   * @param fee - The fee amount that was repaid\\n   */\\n  event AavePortalRepayment(bytes32 indexed transferId, address asset, uint256 amount, uint256 fee, address caller);\\n\\n  // ============ Getters methods ==============\\n\\n  function getAavePortalDebt(bytes32 _transferId) external view returns (uint256) {\\n    return s.portalDebt[_transferId];\\n  }\\n\\n  function getAavePortalFeeDebt(bytes32 _transferId) external view returns (uint256) {\\n    return s.portalFeeDebt[_transferId];\\n  }\\n\\n  function aavePool() external view returns (address) {\\n    return s.aavePool;\\n  }\\n\\n  function aavePortalFee() external view returns (uint256) {\\n    return s.aavePortalFeeNumerator;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Sets the Aave Pool contract address.\\n   * @dev Allows to set the aavePool to address zero to disable Aave Portal if needed\\n   * @param _aavePool The address of the Aave Pool contract\\n   */\\n  function setAavePool(address _aavePool) external onlyOwnerOrAdmin {\\n    s.aavePool = _aavePool;\\n    emit AavePoolUpdated(_aavePool, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Sets the Aave Portal fee numerator\\n   * @param _aavePortalFeeNumerator The new value for the Aave Portal fee numerator\\n   */\\n  function setAavePortalFee(uint256 _aavePortalFeeNumerator) external onlyOwnerOrAdmin {\\n    if (_aavePortalFeeNumerator > Constants.BPS_FEE_DENOMINATOR) revert PortalFacet__setAavePortalFee_invalidFee();\\n\\n    s.aavePortalFeeNumerator = _aavePortalFeeNumerator;\\n    emit AavePortalFeeUpdated(_aavePortalFeeNumerator, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Used by routers to perform a manual repayment to Aave Portals to cover any outstanding debt\\n   * @dev The router must be approved for portal and with enough liquidity, and must be the caller of this\\n   * function. If the asset is not whitelisted, must use the `repayAavePortalFor` function.\\n   * @param _params TransferInfo associated with the transfer\\n   * @param _backingAmount The principle to be paid (in adopted asset)\\n   * @param _feeAmount The fee to be paid (in adopted asset)\\n   * @param _maxIn The max value of the local asset to swap for the _backingAmount of adopted asset\\n   */\\n  function repayAavePortal(\\n    TransferInfo calldata _params,\\n    uint256 _backingAmount,\\n    uint256 _feeAmount,\\n    uint256 _maxIn\\n  ) external nonReentrant {\\n    bytes32 key = AssetLogic.calculateCanonicalHash(_params.canonicalId, _params.canonicalDomain);\\n\\n    // Ensure the asset is approved\\n    if (!s.tokenConfigs[key].approval) {\\n      revert PortalFacet__repayAavePortal_assetNotApproved();\\n    }\\n\\n    address local = _getLocalAsset(key, _params.canonicalId, _params.canonicalDomain);\\n\\n    uint256 routerBalance = s.routerBalances[msg.sender][local];\\n    // Sanity check: has that much to spend\\n    if (routerBalance < _maxIn) revert PortalFacet__repayAavePortal_insufficientFunds();\\n\\n    // Here, generate the transfer id. This allows us to ensure the `_local` asset\\n    // is the correct one associated with the transfer. Otherwise, anyone could pay back\\n    // the loan with the incorrect asset and remove the ability to transfer here. If the\\n    // `_local` asset is incorrectly supplied, the generated transferId will also be\\n    // incorrect, and the _backLoan call (which manipulates the debt stored) will fail.\\n    // Another option is to store the asset associated with the transfer on `execute`, but\\n    // this would make an already expensive call even more so.\\n    bytes32 transferId = _calculateTransferId(_params);\\n\\n    // Need to swap into adopted asset or asset that was backing the loan\\n    // The router will always be holding collateral in the local asset while the loaned asset\\n    // is the adopted asset\\n\\n    // Swap for exact `totalRepayAmount` of adopted asset to repay aave\\n    (uint256 amountDebited, address assetLoaned) = AssetLogic.swapFromLocalAssetIfNeededForExactOut(\\n      key,\\n      local,\\n      _backingAmount + _feeAmount,\\n      _maxIn\\n    );\\n\\n    // decrement router balances\\n    s.routerBalances[msg.sender][local] = routerBalance - amountDebited;\\n\\n    // back loan\\n    _backLoan(assetLoaned, _backingAmount, _feeAmount, transferId);\\n  }\\n\\n  /**\\n   * @notice This allows anyone to repay the portal in the adopted asset for a given router\\n   * and transfer\\n   *\\n   * @dev Should always be paying in the backing asset for the aave loan. NOTE: This will *NOT*\\n   * work if an asset is removed.\\n   *\\n   * @param _params TransferInfo associated with the transfer\\n   * @param _portalAsset The asset you borrowed (adopted asset)\\n   * @param _backingAmount Amount of principle to repay\\n   * @param _feeAmount Amount of fees to repay\\n   */\\n  function repayAavePortalFor(\\n    TransferInfo calldata _params,\\n    address _portalAsset,\\n    uint256 _backingAmount,\\n    uint256 _feeAmount\\n  ) external payable nonReentrant {\\n    // Get the adopted address\\n    // NOTE: using storage directly because if `_getAdoptedAsset` is used, will revert if\\n    // the asset is not whitelisted (and this fn should work if asset is removed)\\n    address adopted = s\\n      .tokenConfigs[AssetLogic.calculateCanonicalHash(_params.canonicalId, _params.canonicalDomain)]\\n      .adopted;\\n\\n    // Verify asset\\n    // NOTE: if asset is removed, `adopted` will be `address(0)`, so you cannot verify the asset\\n    // but should still allow for portal loans to be repaid.\\n    if (adopted != address(0) && _portalAsset != adopted) {\\n      revert PortalFacet__repayAavePortalFor_invalidAsset();\\n    }\\n\\n    // Here, generate the transfer id. This allows us to ensure the `_adopted` asset\\n    // is the correct one associated with the transfer. Otherwise, anyone could pay back\\n    // the loan with the incorrect asset and remove the ability to transfer here. If the\\n    // `_adopted` asset is incorrectly supplied, the generated transferId will also be\\n    // incorrect, and the _backLoan call (which manipulates the debt stored) will fail.\\n    // Another option is to store the asset associated with the transfer on `execute`, but\\n    // this would make an already expensive call even more so.\\n    bytes32 transferId = _calculateTransferId(_params);\\n\\n    // Transfer funds to the contract\\n    uint256 total = _backingAmount + _feeAmount;\\n    if (total == 0) revert PortalFacet__repayAavePortalFor_zeroAmount();\\n\\n    AssetLogic.handleIncomingAsset(adopted, total);\\n\\n    // No need to swap because this is the adopted asset. Simply\\n    // repay the loan\\n    _backLoan(adopted, _backingAmount, _feeAmount, transferId);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @notice Calls backUnbacked on the aave contracts\\n   * @dev Assumes funds in adopted asset are already on contract\\n   * @param _asset Address of the adopted asset (asset backing the loan)\\n   * @param _backing Amount of principle to repay\\n   * @param _fee Amount of fees to repay\\n   * @param _transferId Corresponding transfer id for the fees\\n   */\\n  function _backLoan(\\n    address _asset,\\n    uint256 _backing,\\n    uint256 _fee,\\n    bytes32 _transferId\\n  ) internal {\\n    // reduce debt\\n    s.portalDebt[_transferId] -= _backing;\\n    s.portalFeeDebt[_transferId] -= _fee;\\n\\n    address aPool = s.aavePool;\\n\\n    // increase allowance\\n    SafeERC20.safeApprove(IERC20(_asset), aPool, 0);\\n    SafeERC20.safeIncreaseAllowance(IERC20(_asset), aPool, _backing + _fee);\\n\\n    // back loan\\n    IAavePool(aPool).backUnbacked(_asset, _backing, _fee);\\n\\n    // emit event\\n    emit AavePortalRepayment(_transferId, _asset, _backing, _fee, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0x044a78e50570ccea3e0537068d261c7d681051faa9f9795ae924a3c176a5e80a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IAavePool.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\ninterface IAavePool {\\n  /**\\n   * @dev Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   **/\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @dev Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   **/\\n  function backUnbacked(\\n    address asset,\\n    uint256 amount,\\n    uint256 fee\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   **/\\n  function withdraw(\\n    address asset,\\n    uint256 amount,\\n    address to\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xd196cc8605b8ecfa5991614f6c234f2bc5d1a605cdb53778e91a93822dfb752f\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":13726,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"s","offset":0,"slot":"0","type":"t_struct(AppStorage)29536_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_contract(IERC20)10812)dyn_storage":{"base":"t_contract(IERC20)10812","encoding":"dynamic_array","label":"contract IERC20[]","numberOfBytes":"32"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IConnectorManager)47805":{"encoding":"inplace","label":"contract IConnectorManager","numberOfBytes":"20"},"t_contract(IERC20)10812":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_contract(LPToken)23179":{"encoding":"inplace","label":"contract LPToken","numberOfBytes":"20"},"t_enum(DestinationTransferStatus)29324":{"encoding":"inplace","label":"enum DestinationTransferStatus","numberOfBytes":"1"},"t_enum(Role)29319":{"encoding":"inplace","label":"enum Role","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_enum(Role)29319)":{"encoding":"mapping","key":"t_address","label":"mapping(address => enum Role)","numberOfBytes":"32","value":"t_enum(Role)29319"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(RouterConfig)29378_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RouterConfig)","numberOfBytes":"32","value":"t_struct(RouterConfig)29378_storage"},"t_mapping(t_address,t_struct(TokenId)37728_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct TokenId)","numberOfBytes":"32","value":"t_struct(TokenId)37728_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_bytes32,t_array(t_address)dyn_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => address[])","numberOfBytes":"32","value":"t_array(t_address)dyn_storage"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum DestinationTransferStatus)","numberOfBytes":"32","value":"t_enum(DestinationTransferStatus)29324"},"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => mapping(address => uint8))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint8)"},"t_mapping(t_bytes32,t_struct(Swap)30786_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct SwapUtils.Swap)","numberOfBytes":"32","value":"t_struct(Swap)30786_storage"},"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct TokenConfig)","numberOfBytes":"32","value":"t_struct(TokenConfig)29395_storage"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_bytes32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => bytes32)","numberOfBytes":"32","value":"t_bytes32"},"t_struct(AppStorage)29536_storage":{"encoding":"inplace","label":"struct AppStorage","members":[{"astId":29397,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":29399,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"LIQUIDITY_FEE_NUMERATOR","offset":0,"slot":"1","type":"t_uint256"},{"astId":29402,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"relayerFeeVault","offset":0,"slot":"2","type":"t_address"},{"astId":29405,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"nonce","offset":0,"slot":"3","type":"t_uint256"},{"astId":29408,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"domain","offset":0,"slot":"4","type":"t_uint32"},{"astId":29414,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"adoptedToCanonical","offset":0,"slot":"5","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29420,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"representationToCanonical","offset":0,"slot":"6","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29426,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"tokenConfigs","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)"},{"astId":29432,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"transferStatus","offset":0,"slot":"8","type":"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)"},{"astId":29438,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"routedTransfers","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_array(t_address)dyn_storage)"},{"astId":29445,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"routerBalances","offset":0,"slot":"10","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":29450,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"approvedRelayers","offset":0,"slot":"11","type":"t_mapping(t_address,t_bool)"},{"astId":29453,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"maxRoutersPerTransfer","offset":0,"slot":"12","type":"t_uint256"},{"astId":29458,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"slippage","offset":0,"slot":"13","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29463,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"receiveLocalOverride","offset":0,"slot":"14","type":"t_mapping(t_bytes32,t_bool)"},{"astId":29468,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"remotes","offset":0,"slot":"15","type":"t_mapping(t_uint32,t_bytes32)"},{"astId":29470,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"_proposed","offset":0,"slot":"16","type":"t_address"},{"astId":29472,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"_proposedOwnershipTimestamp","offset":0,"slot":"17","type":"t_uint256"},{"astId":29474,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"_routerAllowlistRemoved","offset":0,"slot":"18","type":"t_bool"},{"astId":29476,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"_routerAllowlistTimestamp","offset":0,"slot":"19","type":"t_uint256"},{"astId":29482,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"roles","offset":0,"slot":"20","type":"t_mapping(t_address,t_enum(Role)29319)"},{"astId":29487,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"routerConfigs","offset":0,"slot":"21","type":"t_mapping(t_address,t_struct(RouterConfig)29378_storage)"},{"astId":29489,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"_status","offset":0,"slot":"22","type":"t_uint256"},{"astId":29491,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"_xcallStatus","offset":0,"slot":"23","type":"t_uint256"},{"astId":29497,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"swapStorages","offset":0,"slot":"24","type":"t_mapping(t_bytes32,t_struct(Swap)30786_storage)"},{"astId":29504,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"tokenIndexes","offset":0,"slot":"25","type":"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))"},{"astId":29507,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"lpTokenTargetAddress","offset":0,"slot":"26","type":"t_address"},{"astId":29510,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"_paused","offset":20,"slot":"26","type":"t_bool"},{"astId":29513,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"aavePool","offset":0,"slot":"27","type":"t_address"},{"astId":29516,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"aavePortalFeeNumerator","offset":0,"slot":"28","type":"t_uint256"},{"astId":29521,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"portalDebt","offset":0,"slot":"29","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29526,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"portalFeeDebt","offset":0,"slot":"30","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29531,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"approvedSequencers","offset":0,"slot":"31","type":"t_mapping(t_address,t_bool)"},{"astId":29535,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"xAppConnectionManager","offset":0,"slot":"32","type":"t_contract(IConnectorManager)47805"}],"numberOfBytes":"1056"},"t_struct(RouterConfig)29378_storage":{"encoding":"inplace","label":"struct RouterConfig","members":[{"astId":29367,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"approved","offset":0,"slot":"0","type":"t_bool"},{"astId":29369,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"portalApproved","offset":1,"slot":"0","type":"t_bool"},{"astId":29371,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"owner","offset":2,"slot":"0","type":"t_address"},{"astId":29373,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"recipient","offset":0,"slot":"1","type":"t_address"},{"astId":29375,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"proposed","offset":0,"slot":"2","type":"t_address"},{"astId":29377,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"proposedTimestamp","offset":0,"slot":"3","type":"t_uint256"}],"numberOfBytes":"128"},"t_struct(Swap)30786_storage":{"encoding":"inplace","label":"struct SwapUtils.Swap","members":[{"astId":30753,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"key","offset":0,"slot":"0","type":"t_bytes32"},{"astId":30755,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"initialA","offset":0,"slot":"1","type":"t_uint256"},{"astId":30757,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"futureA","offset":0,"slot":"2","type":"t_uint256"},{"astId":30759,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"initialATime","offset":0,"slot":"3","type":"t_uint256"},{"astId":30761,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"futureATime","offset":0,"slot":"4","type":"t_uint256"},{"astId":30763,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"swapFee","offset":0,"slot":"5","type":"t_uint256"},{"astId":30765,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"adminFee","offset":0,"slot":"6","type":"t_uint256"},{"astId":30768,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"lpToken","offset":0,"slot":"7","type":"t_contract(LPToken)23179"},{"astId":30772,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"pooledTokens","offset":0,"slot":"8","type":"t_array(t_contract(IERC20)10812)dyn_storage"},{"astId":30775,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"tokenPrecisionMultipliers","offset":0,"slot":"9","type":"t_array(t_uint256)dyn_storage"},{"astId":30778,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"balances","offset":0,"slot":"10","type":"t_array(t_uint256)dyn_storage"},{"astId":30781,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"adminFees","offset":0,"slot":"11","type":"t_array(t_uint256)dyn_storage"},{"astId":30783,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"disabled","offset":0,"slot":"12","type":"t_bool"},{"astId":30785,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"removeTime","offset":0,"slot":"13","type":"t_uint256"}],"numberOfBytes":"448"},"t_struct(TokenConfig)29395_storage":{"encoding":"inplace","label":"struct TokenConfig","members":[{"astId":29380,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"representation","offset":0,"slot":"0","type":"t_address"},{"astId":29382,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"representationDecimals","offset":20,"slot":"0","type":"t_uint8"},{"astId":29384,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"adopted","offset":0,"slot":"1","type":"t_address"},{"astId":29386,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"adoptedDecimals","offset":20,"slot":"1","type":"t_uint8"},{"astId":29388,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"adoptedToLocalExternalPools","offset":0,"slot":"2","type":"t_address"},{"astId":29390,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"approval","offset":20,"slot":"2","type":"t_bool"},{"astId":29392,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"cap","offset":0,"slot":"3","type":"t_uint256"},{"astId":29394,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"custodied","offset":0,"slot":"4","type":"t_uint256"}],"numberOfBytes":"160"},"t_struct(TokenId)37728_storage":{"encoding":"inplace","label":"struct TokenId","members":[{"astId":37725,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"domain","offset":0,"slot":"0","type":"t_uint32"},{"astId":37727,"contract":"contracts/core/connext/facets/PortalFacet.sol:PortalFacet","label":"id","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"events":{"AavePoolUpdated(address,address)":{"notice":"Emitted `setAavePool` is updated"},"AavePortalFeeUpdated(uint256,address)":{"notice":"Emitted `setAavePortalFee` is updated"},"AavePortalRepayment(bytes32,address,uint256,uint256,address)":{"notice":"Emitted when a repayment on an Aave portal loan is made"}},"kind":"user","methods":{"repayAavePortal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256,uint256,uint256)":{"notice":"Used by routers to perform a manual repayment to Aave Portals to cover any outstanding debt"},"repayAavePortalFor((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address,uint256,uint256)":{"notice":"This allows anyone to repay the portal in the adopted asset for a given router and transfer"},"setAavePool(address)":{"notice":"Sets the Aave Pool contract address."},"setAavePortalFee(uint256)":{"notice":"Sets the Aave Portal fee numerator"}},"version":1}}},"contracts/core/connext/facets/ProposedOwnableFacet.sol":{"ProposedOwnableFacet":{"abi":[{"inputs":[],"name":"BaseConnextFacet__getAdoptedAsset_assetNotFound","type":"error"},{"inputs":[],"name":"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonXCallReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__whenNotPaused_paused","type":"error"},{"inputs":[],"name":"ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnableFacet__assignRoleAdmin_invalidInput","type":"error"},{"inputs":[],"name":"ProposedOwnableFacet__assignRoleRouter_invalidInput","type":"error"},{"inputs":[],"name":"ProposedOwnableFacet__assignRoleWatcher_invalidInput","type":"error"},{"inputs":[],"name":"ProposedOwnableFacet__delayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnableFacet__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnableFacet__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnableFacet__removeAssetAllowlist_noProposal","type":"error"},{"inputs":[],"name":"ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnableFacet__removeRouterAllowlist_noProposal","type":"error"},{"inputs":[],"name":"ProposedOwnableFacet__revokeRole_invalidInput","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"AssignRoleAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"router","type":"address"}],"name":"AssignRoleRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"watcher","type":"address"}],"name":"AssignRoleWatcher","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"revokedAddress","type":"address"},{"indexed":false,"internalType":"enum Role","name":"revokedRole","type":"uint8"}],"name":"RevokeRole","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"RouterAllowlistRemovalProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"renounced","type":"bool"}],"name":"RouterAllowlistRemoved","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","type":"event"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"assignRoleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"assignRoleRouterAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_watcher","type":"address"}],"name":"assignRoleWatcher","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposeRouterAllowlistRemoval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_role","type":"address"}],"name":"queryRole","outputs":[{"internalType":"enum Role","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeRouterAllowlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_revoke","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerAllowlistRemoved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routerAllowlistTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.The majority of this code was taken from the openzeppelin Ownable contract","kind":"dev","methods":{"assignRoleAdmin(address)":{"details":"requested address will be allowlisted as Role.Admin under mapping roles","params":{"_admin":"- The address to beassigned as Role.Admin under roles"}},"assignRoleRouterAdmin(address)":{"details":"requested address will be whitelisted as Role.RouterAdmin under mapping roles","params":{"_router":"- The address to be assigned as Role.RouterAdmin under roles"}},"assignRoleWatcher(address)":{"details":"requested address will be allowlisted as Role.Watcher under mapping roles","params":{"_watcher":"- The address to be assigned as Role.Watcher under roles"}},"queryRole(address)":{"details":"returns uint value of representing enum value of Role","params":{"_role":"The address for which Role need to be queried"}},"revokeRole(address)":{"details":"input address will be assingned default value i.e Role.None under mapping roles","params":{"_revoke":"- The address to be revoked from it's Role"}}},"title":"ProposedOwnableFacet","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50610db6806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638456cb59116100a2578063bb271a2711610071578063bb271a27146101f1578063c56ce35814610204578063c5b350df1461020c578063c91cb56a14610214578063d1851c921461024d57600080fd5b80638456cb59146101a35780638da5cb5b146101ab578063a9943b1b146101cb578063b1f8100d146101de57600080fd5b80633f4ba83a116100e95780633f4ba83a146101575780635c975abb1461015f5780636a42b8f81461017d5780636be557851461018557806380e52e3f1461019057600080fd5b8063122329371461011b57806323986f7d146101325780632ec0c0021461013c5780633cf52ffb1461014f575b600080fd5b6013545b6040519081526020015b60405180910390f35b61013a61025e565b005b61013a61014a366004610cc6565b610347565b60115461011f565b61013a610463565b601a54600160a01b900460ff165b6040519015158152602001610129565b61011f6104fd565b60125460ff1661016d565b61013a61019e366004610cc6565b61052c565b61013a61064c565b6101b36106ec565b6040516001600160a01b039091168152602001610129565b61013a6101d9366004610cc6565b6106f6565b61013a6101ec366004610cc6565b61080b565b61013a6101ff366004610cc6565b6108be565b61013a6109d2565b61013a610a62565b610240610222366004610cc6565b6001600160a01b031660009081526014602052604090205460ff1690565b6040516101299190610d2e565b6010546001600160a01b03166101b3565b33610267610b10565b6001600160a01b0316141580156102a2575060033360009081526014602052604090205460ff16600381111561029f5761029f610cf6565b14155b156102c057604051637b32c26b60e01b815260040160405180910390fd5b6013546102cb6104fd565b6102d58242610d42565b116102f357604051637f0369a960e11b815260040160405180910390fd5b60125460ff161561031757604051634b4da55560e01b815260040160405180910390fd5b60135460000361033a576040516368ad12e160e11b815260040160405180910390fd5b6103446001610b3e565b50565b33610350610b10565b6001600160a01b03161415801561038b575060033360009081526014602052604090205460ff16600381111561038857610388610cf6565b14155b156103a957604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604081205460ff1660038111156103d6576103d6610cf6565b1415806103ea57506001600160a01b038116155b15610408576040516319f546ad60e11b815260040160405180910390fd5b6001600160a01b038116600081815260146020908152604091829020805460ff1916600117905590519182527ff294e68c632d2c26e3d36129816c9a3e54bfa0ebada89d07d08e15e87a8e240391015b60405180910390a150565b3361046c610b10565b6001600160a01b0316141580156104a7575060033360009081526014602052604090205460ff1660038111156104a4576104a4610cf6565b14155b156104c557604051637b32c26b60e01b815260040160405180910390fd5b601a805460ff60a01b191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b60006105277fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13225490565b905090565b33610535610b10565b6001600160a01b031614158015610570575060033360009081526014602052604090205460ff16600381111561056d5761056d610cf6565b14155b1561058e57604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604081205460ff16908160038111156105bd576105bd610cf6565b14806105d057506001600160a01b038216155b156105ee57604051630e15d72960e31b815260040160405180910390fd5b6001600160a01b03821660009081526014602052604090819020805460ff19169055517fdc6f53b47a9dfbea7a15fceef0cd84711d3d79ccc0952111866167af5e59e264906106409084908490610d63565b60405180910390a15050565b33610655610b10565b6001600160a01b031614158015610690575060023360009081526014602052604090205460ff16600381111561068d5761068d610cf6565b14155b156106ae5760405163bae4c01f60e01b815260040160405180910390fd5b601a805460ff60a01b1916600160a01b1790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b6000610527610b10565b336106ff610b10565b6001600160a01b03161415801561073a575060033360009081526014602052604090205460ff16600381111561073757610737610cf6565b14155b1561075857604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604081205460ff16600381111561078557610785610cf6565b14158061079957506001600160a01b038116155b156107b757604051630bceab9d60e01b815260040160405180910390fd5b6001600160a01b038116600081815260146020908152604091829020805460ff1916600217905590519182527ffaac289281b8fc57dff30d0ff38b071d28bb5f24cd5ed1bd2379d6fb27f714dd9101610458565b33610814610b10565b6001600160a01b03161461083b576040516314e74a2560e21b815260040160405180910390fd5b6010546001600160a01b038281169116148061085e57506001600160a01b038116155b1561087c57604051630274ac4360e21b815260040160405180910390fd5b806001600160a01b031661088e6106ec565b6001600160a01b0316036108b557604051631f677f5160e01b815260040160405180910390fd5b61034481610b84565b336108c7610b10565b6001600160a01b031614158015610902575060033360009081526014602052604090205460ff1660038111156108ff576108ff610cf6565b14155b1561092057604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604081205460ff16600381111561094d5761094d610cf6565b14158061096157506001600160a01b038116155b1561097f57604051631600e74560e31b815260040160405180910390fd5b6001600160a01b038116600081815260146020908152604091829020805460ff1916600317905590519182527e0a317382a4189d8763d4a024ec833785cebd3580a084ff0f887f156b822cb19101610458565b336109db610b10565b6001600160a01b031614158015610a16575060033360009081526014602052604090205460ff166003811115610a1357610a13610cf6565b14155b15610a3457604051637b32c26b60e01b815260040160405180910390fd5b60125460ff1615610a58576040516333bfb93f60e11b815260040160405180910390fd5b610a60610bd2565b565b6010546001600160a01b03163314610a8d57604051631b54eee360e11b815260040160405180910390fd5b601154610a986104fd565b610aa28242610d42565b11610ac057604051637f0369a960e11b815260040160405180910390fd5b6010546001600160a01b0316610ad46106ec565b6001600160a01b031603610afb576040516355cc507960e01b815260040160405180910390fd5b601054610344906001600160a01b0316610c0d565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b6012805460ff191682151590811790915560006013556040519081527f7c21a455b42ac52b1f1cc1103db5afe532e817479e9503a97a734720271c5a7490602001610458565b42601155601080546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b4260138190556040519081527feb0f48d74c7254e5b55ef91a3f6e496e6a4a8676b6dae07f3d6fb0805b9fac939060200160405180910390a1565b60006011819055601080546001600160a01b03191690557fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546040516103449284927fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c926001600160a01b03808616939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360040180546001600160a01b0319166001600160a01b0392909216919091179055565b600060208284031215610cd857600080fd5b81356001600160a01b0381168114610cef57600080fd5b9392505050565b634e487b7160e01b600052602160045260246000fd5b60048110610d2a57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610d3c8284610d0c565b92915050565b81810381811115610d3c57634e487b7160e01b600052601160045260246000fd5b6001600160a01b038316815260408101610cef6020830184610d0c56fea264697066735822122052a4de252bfb99433f423c5341eec731d6d65626491045e67279fdcfde54307b64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDB6 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x116 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xBB271A27 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xBB271A27 EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0xC56CE358 EQ PUSH2 0x204 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x20C JUMPI DUP1 PUSH4 0xC91CB56A EQ PUSH2 0x214 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x24D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x1A3 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1AB JUMPI DUP1 PUSH4 0xA9943B1B EQ PUSH2 0x1CB JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x1DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3F4BA83A GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x15F JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x17D JUMPI DUP1 PUSH4 0x6BE55785 EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0x80E52E3F EQ PUSH2 0x190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x12232937 EQ PUSH2 0x11B JUMPI DUP1 PUSH4 0x23986F7D EQ PUSH2 0x132 JUMPI DUP1 PUSH4 0x2EC0C002 EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x14F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x13 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x13A PUSH2 0x25E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x13A PUSH2 0x14A CALLDATASIZE PUSH1 0x4 PUSH2 0xCC6 JUMP JUMPDEST PUSH2 0x347 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0x11F JUMP JUMPDEST PUSH2 0x13A PUSH2 0x463 JUMP JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129 JUMP JUMPDEST PUSH2 0x11F PUSH2 0x4FD JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0xFF AND PUSH2 0x16D JUMP JUMPDEST PUSH2 0x13A PUSH2 0x19E CALLDATASIZE PUSH1 0x4 PUSH2 0xCC6 JUMP JUMPDEST PUSH2 0x52C JUMP JUMPDEST PUSH2 0x13A PUSH2 0x64C JUMP JUMPDEST PUSH2 0x1B3 PUSH2 0x6EC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129 JUMP JUMPDEST PUSH2 0x13A PUSH2 0x1D9 CALLDATASIZE PUSH1 0x4 PUSH2 0xCC6 JUMP JUMPDEST PUSH2 0x6F6 JUMP JUMPDEST PUSH2 0x13A PUSH2 0x1EC CALLDATASIZE PUSH1 0x4 PUSH2 0xCC6 JUMP JUMPDEST PUSH2 0x80B JUMP JUMPDEST PUSH2 0x13A PUSH2 0x1FF CALLDATASIZE PUSH1 0x4 PUSH2 0xCC6 JUMP JUMPDEST PUSH2 0x8BE JUMP JUMPDEST PUSH2 0x13A PUSH2 0x9D2 JUMP JUMPDEST PUSH2 0x13A PUSH2 0xA62 JUMP JUMPDEST PUSH2 0x240 PUSH2 0x222 CALLDATASIZE PUSH1 0x4 PUSH2 0xCC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x129 SWAP2 SWAP1 PUSH2 0xD2E JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1B3 JUMP JUMPDEST CALLER PUSH2 0x267 PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x2A2 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x29F JUMPI PUSH2 0x29F PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x2C0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x13 SLOAD PUSH2 0x2CB PUSH2 0x4FD JUMP JUMPDEST PUSH2 0x2D5 DUP3 TIMESTAMP PUSH2 0xD42 JUMP JUMPDEST GT PUSH2 0x2F3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7F0369A9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x12 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x317 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B4DA555 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x13 SLOAD PUSH1 0x0 SUB PUSH2 0x33A JUMPI PUSH1 0x40 MLOAD PUSH4 0x68AD12E1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x344 PUSH1 0x1 PUSH2 0xB3E JUMP JUMPDEST POP JUMP JUMPDEST CALLER PUSH2 0x350 PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x38B JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x388 JUMPI PUSH2 0x388 PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x3A9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x3D6 JUMPI PUSH2 0x3D6 PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO DUP1 PUSH2 0x3EA JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST ISZERO PUSH2 0x408 JUMPI PUSH1 0x40 MLOAD PUSH4 0x19F546AD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xF294E68C632D2C26E3D36129816C9A3E54BFA0EBADA89D07D08E15E87A8E2403 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST CALLER PUSH2 0x46C PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x4A7 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4A4 JUMPI PUSH2 0x4A4 PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x4C5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA45F47FDEA8A1EFDD9029A5691C7F759C32B7C698632B563573E155625D16933 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x527 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1322 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH2 0x535 PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x570 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x56D JUMPI PUSH2 0x56D PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x58E JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x5BD JUMPI PUSH2 0x5BD PUSH2 0xCF6 JUMP JUMPDEST EQ DUP1 PUSH2 0x5D0 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO JUMPDEST ISZERO PUSH2 0x5EE JUMPI PUSH1 0x40 MLOAD PUSH4 0xE15D729 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0xDC6F53B47A9DFBEA7A15FCEEF0CD84711D3D79CCC0952111866167AF5E59E264 SWAP1 PUSH2 0x640 SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0xD63 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH2 0x655 PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x690 JUMPI POP PUSH1 0x2 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x68D JUMPI PUSH2 0x68D PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x6AE JUMPI PUSH1 0x40 MLOAD PUSH4 0xBAE4C01F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x9E87FAC88FF661F02D44F95383C817FECE4BCE600A3DAB7A54406878B965E752 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x527 PUSH2 0xB10 JUMP JUMPDEST CALLER PUSH2 0x6FF PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x73A JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x737 JUMPI PUSH2 0x737 PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x758 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x785 JUMPI PUSH2 0x785 PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO DUP1 PUSH2 0x799 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST ISZERO PUSH2 0x7B7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xBCEAB9D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x2 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xFAAC289281B8FC57DFF30D0FF38B071D28BB5F24CD5ED1BD2379D6FB27F714DD SWAP2 ADD PUSH2 0x458 JUMP JUMPDEST CALLER PUSH2 0x814 PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x83B JUMPI PUSH1 0x40 MLOAD PUSH4 0x14E74A25 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 PUSH2 0x85E JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST ISZERO PUSH2 0x87C JUMPI PUSH1 0x40 MLOAD PUSH4 0x274AC43 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x88E PUSH2 0x6EC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x8B5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F677F51 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x344 DUP2 PUSH2 0xB84 JUMP JUMPDEST CALLER PUSH2 0x8C7 PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x902 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x8FF JUMPI PUSH2 0x8FF PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x920 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x94D JUMPI PUSH2 0x94D PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO DUP1 PUSH2 0x961 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST ISZERO PUSH2 0x97F JUMPI PUSH1 0x40 MLOAD PUSH4 0x1600E745 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x3 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH31 0xA317382A4189D8763D4A024EC833785CEBD3580A084FF0F887F156B822CB1 SWAP2 ADD PUSH2 0x458 JUMP JUMPDEST CALLER PUSH2 0x9DB PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0xA16 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xA13 JUMPI PUSH2 0xA13 PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0xA34 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x12 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xA58 JUMPI PUSH1 0x40 MLOAD PUSH4 0x33BFB93F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xA60 PUSH2 0xBD2 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA8D JUMPI PUSH1 0x40 MLOAD PUSH4 0x1B54EEE3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x11 SLOAD PUSH2 0xA98 PUSH2 0x4FD JUMP JUMPDEST PUSH2 0xAA2 DUP3 TIMESTAMP PUSH2 0xD42 JUMP JUMPDEST GT PUSH2 0xAC0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7F0369A9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xAD4 PUSH2 0x6EC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0xAFB JUMPI PUSH1 0x40 MLOAD PUSH4 0x55CC5079 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x10 SLOAD PUSH2 0x344 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xC0D JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x12 DUP1 SLOAD PUSH1 0xFF NOT AND DUP3 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x0 PUSH1 0x13 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x7C21A455B42AC52B1F1CC1103DB5AFE532E817479E9503A97A734720271C5A74 SWAP1 PUSH1 0x20 ADD PUSH2 0x458 JUMP JUMPDEST TIMESTAMP PUSH1 0x11 SSTORE PUSH1 0x10 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST TIMESTAMP PUSH1 0x13 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xEB0F48D74C7254E5B55EF91A3F6E496E6A4A8676B6DAE07F3D6FB0805B9FAC93 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x11 DUP2 SWAP1 SSTORE PUSH1 0x10 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x40 MLOAD PUSH2 0x344 SWAP3 DUP5 SWAP3 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xCEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x4 DUP2 LT PUSH2 0xD2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xD3C DUP3 DUP5 PUSH2 0xD0C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xD3C JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 DUP2 ADD PUSH2 0xCEF PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xD0C JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE LOG4 0xDE 0x25 0x2B 0xFB SWAP10 NUMBER EXTCODEHASH TIMESTAMP EXTCODECOPY MSTORE8 COINBASE 0xEE 0xC7 BALANCE 0xD6 0xD6 JUMP 0x26 0x49 LT GASLIMIT 0xE6 PUSH19 0x79FDCFDE54307B64736F6C6343000811003300 ","sourceMap":"1024:9605:74:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_setOwner_17889":{"entryPoint":3085,"id":17889,"parameterSlots":1,"returnSlots":0},"@_setProposed_17912":{"entryPoint":2948,"id":17912,"parameterSlots":1,"returnSlots":0},"@_setRouterAllowlistRemoved_17869":{"entryPoint":2878,"id":17869,"parameterSlots":1,"returnSlots":0},"@_setRouterAllowlistTimestamp_17849":{"entryPoint":3026,"id":17849,"parameterSlots":0,"returnSlots":0},"@acceptProposedOwner_17639":{"entryPoint":2658,"id":17639,"parameterSlots":0,"returnSlots":0},"@acceptanceDelay_29655":{"entryPoint":null,"id":29655,"parameterSlots":0,"returnSlots":1},"@assignRoleAdmin_17805":{"entryPoint":2238,"id":17805,"parameterSlots":1,"returnSlots":0},"@assignRoleRouterAdmin_17725":{"entryPoint":839,"id":17725,"parameterSlots":1,"returnSlots":0},"@assignRoleWatcher_17765":{"entryPoint":1782,"id":17765,"parameterSlots":1,"returnSlots":0},"@contractOwner_29645":{"entryPoint":2832,"id":29645,"parameterSlots":0,"returnSlots":1},"@delay_17508":{"entryPoint":1277,"id":17508,"parameterSlots":0,"returnSlots":1},"@diamondStorage_29603":{"entryPoint":null,"id":29603,"parameterSlots":0,"returnSlots":1},"@owner_17457":{"entryPoint":1772,"id":17457,"parameterSlots":0,"returnSlots":1},"@pause_17820":{"entryPoint":1612,"id":17820,"parameterSlots":0,"returnSlots":0},"@paused_17518":{"entryPoint":null,"id":17518,"parameterSlots":0,"returnSlots":1},"@proposeNewOwner_17614":{"entryPoint":2059,"id":17614,"parameterSlots":1,"returnSlots":0},"@proposeRouterAllowlistRemoval_17549":{"entryPoint":2514,"id":17549,"parameterSlots":0,"returnSlots":0},"@proposedTimestamp_17487":{"entryPoint":null,"id":17487,"parameterSlots":0,"returnSlots":1},"@proposed_17477":{"entryPoint":null,"id":17477,"parameterSlots":0,"returnSlots":1},"@queryRole_17533":{"entryPoint":null,"id":17533,"parameterSlots":1,"returnSlots":1},"@removeRouterAllowlist_17578":{"entryPoint":606,"id":17578,"parameterSlots":0,"returnSlots":0},"@revokeRole_17685":{"entryPoint":1324,"id":17685,"parameterSlots":1,"returnSlots":0},"@routerAllowlistRemoved_17467":{"entryPoint":null,"id":17467,"parameterSlots":0,"returnSlots":1},"@routerAllowlistTimestamp_17497":{"entryPoint":null,"id":17497,"parameterSlots":0,"returnSlots":1},"@setContractOwner_29633":{"entryPoint":null,"id":29633,"parameterSlots":1,"returnSlots":0},"@unpause_17833":{"entryPoint":1123,"id":17833,"parameterSlots":0,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":3270,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_enum_Role":{"entryPoint":3340,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_enum$_Role_$29319__to_t_address_t_uint8__fromStack_reversed":{"entryPoint":3427,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_enum$_Role_$29319__to_t_uint8__fromStack_reversed":{"entryPoint":3374,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":3394,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x21":{"entryPoint":3318,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1988:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:76:181","statements":[{"nodeType":"YulAssignment","src":"125:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:181"},"nodeType":"YulFunctionCall","src":"133:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"178:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:181"},"nodeType":"YulFunctionCall","src":"160:25:181"},"nodeType":"YulExpressionStatement","src":"160:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:181","type":""}],"src":"14:177:181"},{"body":{"nodeType":"YulBlock","src":"266:216:181","statements":[{"body":{"nodeType":"YulBlock","src":"312:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"321:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"324:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"314:6:181"},"nodeType":"YulFunctionCall","src":"314:12:181"},"nodeType":"YulExpressionStatement","src":"314:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"287:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"296:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"283:3:181"},"nodeType":"YulFunctionCall","src":"283:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"308:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"279:3:181"},"nodeType":"YulFunctionCall","src":"279:32:181"},"nodeType":"YulIf","src":"276:52:181"},{"nodeType":"YulVariableDeclaration","src":"337:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"363:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"350:12:181"},"nodeType":"YulFunctionCall","src":"350:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"341:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"436:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"445:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"448:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"438:6:181"},"nodeType":"YulFunctionCall","src":"438:12:181"},"nodeType":"YulExpressionStatement","src":"438:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"395:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"406:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"421:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"426:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"417:3:181"},"nodeType":"YulFunctionCall","src":"417:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"430:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"413:3:181"},"nodeType":"YulFunctionCall","src":"413:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"402:3:181"},"nodeType":"YulFunctionCall","src":"402:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"392:2:181"},"nodeType":"YulFunctionCall","src":"392:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"385:6:181"},"nodeType":"YulFunctionCall","src":"385:50:181"},"nodeType":"YulIf","src":"382:70:181"},{"nodeType":"YulAssignment","src":"461:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"471:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"461:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"232:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"243:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"255:6:181","type":""}],"src":"196:286:181"},{"body":{"nodeType":"YulBlock","src":"582:92:181","statements":[{"nodeType":"YulAssignment","src":"592:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"604:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"615:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"600:3:181"},"nodeType":"YulFunctionCall","src":"600:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"592:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"634:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"659:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"652:6:181"},"nodeType":"YulFunctionCall","src":"652:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"645:6:181"},"nodeType":"YulFunctionCall","src":"645:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"627:6:181"},"nodeType":"YulFunctionCall","src":"627:41:181"},"nodeType":"YulExpressionStatement","src":"627:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"551:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"562:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"573:4:181","type":""}],"src":"487:187:181"},{"body":{"nodeType":"YulBlock","src":"780:102:181","statements":[{"nodeType":"YulAssignment","src":"790:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"802:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"813:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"798:3:181"},"nodeType":"YulFunctionCall","src":"798:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"790:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"832:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"847:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"863:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"868:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"859:3:181"},"nodeType":"YulFunctionCall","src":"859:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"872:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"855:3:181"},"nodeType":"YulFunctionCall","src":"855:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"843:3:181"},"nodeType":"YulFunctionCall","src":"843:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"825:6:181"},"nodeType":"YulFunctionCall","src":"825:51:181"},"nodeType":"YulExpressionStatement","src":"825:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"749:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"760:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"771:4:181","type":""}],"src":"679:203:181"},{"body":{"nodeType":"YulBlock","src":"919:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"936:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"943:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"948:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"939:3:181"},"nodeType":"YulFunctionCall","src":"939:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"929:6:181"},"nodeType":"YulFunctionCall","src":"929:31:181"},"nodeType":"YulExpressionStatement","src":"929:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"976:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"979:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"969:6:181"},"nodeType":"YulFunctionCall","src":"969:15:181"},"nodeType":"YulExpressionStatement","src":"969:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1000:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1003:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"993:6:181"},"nodeType":"YulFunctionCall","src":"993:15:181"},"nodeType":"YulExpressionStatement","src":"993:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"887:127:181"},{"body":{"nodeType":"YulBlock","src":"1065:186:181","statements":[{"body":{"nodeType":"YulBlock","src":"1107:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1128:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1135:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1140:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1131:3:181"},"nodeType":"YulFunctionCall","src":"1131:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1121:6:181"},"nodeType":"YulFunctionCall","src":"1121:31:181"},"nodeType":"YulExpressionStatement","src":"1121:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1172:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1175:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1165:6:181"},"nodeType":"YulFunctionCall","src":"1165:15:181"},"nodeType":"YulExpressionStatement","src":"1165:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1200:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1203:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1193:6:181"},"nodeType":"YulFunctionCall","src":"1193:15:181"},"nodeType":"YulExpressionStatement","src":"1193:15:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1088:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"1095:1:181","type":"","value":"4"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1085:2:181"},"nodeType":"YulFunctionCall","src":"1085:12:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1078:6:181"},"nodeType":"YulFunctionCall","src":"1078:20:181"},"nodeType":"YulIf","src":"1075:143:181"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1234:3:181"},{"name":"value","nodeType":"YulIdentifier","src":"1239:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1227:6:181"},"nodeType":"YulFunctionCall","src":"1227:18:181"},"nodeType":"YulExpressionStatement","src":"1227:18:181"}]},"name":"abi_encode_enum_Role","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1049:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"1056:3:181","type":""}],"src":"1019:232:181"},{"body":{"nodeType":"YulBlock","src":"1365:90:181","statements":[{"nodeType":"YulAssignment","src":"1375:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1387:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1398:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1383:3:181"},"nodeType":"YulFunctionCall","src":"1383:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1375:4:181"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1431:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1439:9:181"}],"functionName":{"name":"abi_encode_enum_Role","nodeType":"YulIdentifier","src":"1410:20:181"},"nodeType":"YulFunctionCall","src":"1410:39:181"},"nodeType":"YulExpressionStatement","src":"1410:39:181"}]},"name":"abi_encode_tuple_t_enum$_Role_$29319__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1334:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1345:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1356:4:181","type":""}],"src":"1256:199:181"},{"body":{"nodeType":"YulBlock","src":"1509:176:181","statements":[{"nodeType":"YulAssignment","src":"1519:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1531:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"1534:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1527:3:181"},"nodeType":"YulFunctionCall","src":"1527:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"1519:4:181"}]},{"body":{"nodeType":"YulBlock","src":"1568:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1589:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1596:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1601:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1592:3:181"},"nodeType":"YulFunctionCall","src":"1592:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1582:6:181"},"nodeType":"YulFunctionCall","src":"1582:31:181"},"nodeType":"YulExpressionStatement","src":"1582:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1633:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1636:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1626:6:181"},"nodeType":"YulFunctionCall","src":"1626:15:181"},"nodeType":"YulExpressionStatement","src":"1626:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1661:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1664:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1654:6:181"},"nodeType":"YulFunctionCall","src":"1654:15:181"},"nodeType":"YulExpressionStatement","src":"1654:15:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"1551:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"1557:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1548:2:181"},"nodeType":"YulFunctionCall","src":"1548:11:181"},"nodeType":"YulIf","src":"1545:134:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"1491:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"1494:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"1500:4:181","type":""}],"src":"1460:225:181"},{"body":{"nodeType":"YulBlock","src":"1827:159:181","statements":[{"nodeType":"YulAssignment","src":"1837:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1849:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1860:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1845:3:181"},"nodeType":"YulFunctionCall","src":"1845:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1837:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1879:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1894:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1910:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1915:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1906:3:181"},"nodeType":"YulFunctionCall","src":"1906:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1919:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1902:3:181"},"nodeType":"YulFunctionCall","src":"1902:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1890:3:181"},"nodeType":"YulFunctionCall","src":"1890:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1872:6:181"},"nodeType":"YulFunctionCall","src":"1872:51:181"},"nodeType":"YulExpressionStatement","src":"1872:51:181"},{"expression":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"1953:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1965:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1976:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1961:3:181"},"nodeType":"YulFunctionCall","src":"1961:18:181"}],"functionName":{"name":"abi_encode_enum_Role","nodeType":"YulIdentifier","src":"1932:20:181"},"nodeType":"YulFunctionCall","src":"1932:48:181"},"nodeType":"YulExpressionStatement","src":"1932:48:181"}]},"name":"abi_encode_tuple_t_address_t_enum$_Role_$29319__to_t_address_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1788:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1799:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1807:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1818:4:181","type":""}],"src":"1690:296:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_enum_Role(value, pos)\n    {\n        if iszero(lt(value, 4))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(pos, value)\n    }\n    function abi_encode_tuple_t_enum$_Role_$29319__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        abi_encode_enum_Role(value0, headStart)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_address_t_enum$_Role_$29319__to_t_address_t_uint8__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        abi_encode_enum_Role(value1, add(headStart, 32))\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101165760003560e01c80638456cb59116100a2578063bb271a2711610071578063bb271a27146101f1578063c56ce35814610204578063c5b350df1461020c578063c91cb56a14610214578063d1851c921461024d57600080fd5b80638456cb59146101a35780638da5cb5b146101ab578063a9943b1b146101cb578063b1f8100d146101de57600080fd5b80633f4ba83a116100e95780633f4ba83a146101575780635c975abb1461015f5780636a42b8f81461017d5780636be557851461018557806380e52e3f1461019057600080fd5b8063122329371461011b57806323986f7d146101325780632ec0c0021461013c5780633cf52ffb1461014f575b600080fd5b6013545b6040519081526020015b60405180910390f35b61013a61025e565b005b61013a61014a366004610cc6565b610347565b60115461011f565b61013a610463565b601a54600160a01b900460ff165b6040519015158152602001610129565b61011f6104fd565b60125460ff1661016d565b61013a61019e366004610cc6565b61052c565b61013a61064c565b6101b36106ec565b6040516001600160a01b039091168152602001610129565b61013a6101d9366004610cc6565b6106f6565b61013a6101ec366004610cc6565b61080b565b61013a6101ff366004610cc6565b6108be565b61013a6109d2565b61013a610a62565b610240610222366004610cc6565b6001600160a01b031660009081526014602052604090205460ff1690565b6040516101299190610d2e565b6010546001600160a01b03166101b3565b33610267610b10565b6001600160a01b0316141580156102a2575060033360009081526014602052604090205460ff16600381111561029f5761029f610cf6565b14155b156102c057604051637b32c26b60e01b815260040160405180910390fd5b6013546102cb6104fd565b6102d58242610d42565b116102f357604051637f0369a960e11b815260040160405180910390fd5b60125460ff161561031757604051634b4da55560e01b815260040160405180910390fd5b60135460000361033a576040516368ad12e160e11b815260040160405180910390fd5b6103446001610b3e565b50565b33610350610b10565b6001600160a01b03161415801561038b575060033360009081526014602052604090205460ff16600381111561038857610388610cf6565b14155b156103a957604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604081205460ff1660038111156103d6576103d6610cf6565b1415806103ea57506001600160a01b038116155b15610408576040516319f546ad60e11b815260040160405180910390fd5b6001600160a01b038116600081815260146020908152604091829020805460ff1916600117905590519182527ff294e68c632d2c26e3d36129816c9a3e54bfa0ebada89d07d08e15e87a8e240391015b60405180910390a150565b3361046c610b10565b6001600160a01b0316141580156104a7575060033360009081526014602052604090205460ff1660038111156104a4576104a4610cf6565b14155b156104c557604051637b32c26b60e01b815260040160405180910390fd5b601a805460ff60a01b191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b60006105277fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13225490565b905090565b33610535610b10565b6001600160a01b031614158015610570575060033360009081526014602052604090205460ff16600381111561056d5761056d610cf6565b14155b1561058e57604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604081205460ff16908160038111156105bd576105bd610cf6565b14806105d057506001600160a01b038216155b156105ee57604051630e15d72960e31b815260040160405180910390fd5b6001600160a01b03821660009081526014602052604090819020805460ff19169055517fdc6f53b47a9dfbea7a15fceef0cd84711d3d79ccc0952111866167af5e59e264906106409084908490610d63565b60405180910390a15050565b33610655610b10565b6001600160a01b031614158015610690575060023360009081526014602052604090205460ff16600381111561068d5761068d610cf6565b14155b156106ae5760405163bae4c01f60e01b815260040160405180910390fd5b601a805460ff60a01b1916600160a01b1790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b6000610527610b10565b336106ff610b10565b6001600160a01b03161415801561073a575060033360009081526014602052604090205460ff16600381111561073757610737610cf6565b14155b1561075857604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604081205460ff16600381111561078557610785610cf6565b14158061079957506001600160a01b038116155b156107b757604051630bceab9d60e01b815260040160405180910390fd5b6001600160a01b038116600081815260146020908152604091829020805460ff1916600217905590519182527ffaac289281b8fc57dff30d0ff38b071d28bb5f24cd5ed1bd2379d6fb27f714dd9101610458565b33610814610b10565b6001600160a01b03161461083b576040516314e74a2560e21b815260040160405180910390fd5b6010546001600160a01b038281169116148061085e57506001600160a01b038116155b1561087c57604051630274ac4360e21b815260040160405180910390fd5b806001600160a01b031661088e6106ec565b6001600160a01b0316036108b557604051631f677f5160e01b815260040160405180910390fd5b61034481610b84565b336108c7610b10565b6001600160a01b031614158015610902575060033360009081526014602052604090205460ff1660038111156108ff576108ff610cf6565b14155b1561092057604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604081205460ff16600381111561094d5761094d610cf6565b14158061096157506001600160a01b038116155b1561097f57604051631600e74560e31b815260040160405180910390fd5b6001600160a01b038116600081815260146020908152604091829020805460ff1916600317905590519182527e0a317382a4189d8763d4a024ec833785cebd3580a084ff0f887f156b822cb19101610458565b336109db610b10565b6001600160a01b031614158015610a16575060033360009081526014602052604090205460ff166003811115610a1357610a13610cf6565b14155b15610a3457604051637b32c26b60e01b815260040160405180910390fd5b60125460ff1615610a58576040516333bfb93f60e11b815260040160405180910390fd5b610a60610bd2565b565b6010546001600160a01b03163314610a8d57604051631b54eee360e11b815260040160405180910390fd5b601154610a986104fd565b610aa28242610d42565b11610ac057604051637f0369a960e11b815260040160405180910390fd5b6010546001600160a01b0316610ad46106ec565b6001600160a01b031603610afb576040516355cc507960e01b815260040160405180910390fd5b601054610344906001600160a01b0316610c0d565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b6012805460ff191682151590811790915560006013556040519081527f7c21a455b42ac52b1f1cc1103db5afe532e817479e9503a97a734720271c5a7490602001610458565b42601155601080546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b4260138190556040519081527feb0f48d74c7254e5b55ef91a3f6e496e6a4a8676b6dae07f3d6fb0805b9fac939060200160405180910390a1565b60006011819055601080546001600160a01b03191690557fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546040516103449284927fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c926001600160a01b03808616939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360040180546001600160a01b0319166001600160a01b0392909216919091179055565b600060208284031215610cd857600080fd5b81356001600160a01b0381168114610cef57600080fd5b9392505050565b634e487b7160e01b600052602160045260246000fd5b60048110610d2a57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610d3c8284610d0c565b92915050565b81810381811115610d3c57634e487b7160e01b600052601160045260246000fd5b6001600160a01b038316815260408101610cef6020830184610d0c56fea264697066735822122052a4de252bfb99433f423c5341eec731d6d65626491045e67279fdcfde54307b64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x116 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xBB271A27 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xBB271A27 EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0xC56CE358 EQ PUSH2 0x204 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x20C JUMPI DUP1 PUSH4 0xC91CB56A EQ PUSH2 0x214 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x24D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x1A3 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1AB JUMPI DUP1 PUSH4 0xA9943B1B EQ PUSH2 0x1CB JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x1DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3F4BA83A GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x15F JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x17D JUMPI DUP1 PUSH4 0x6BE55785 EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0x80E52E3F EQ PUSH2 0x190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x12232937 EQ PUSH2 0x11B JUMPI DUP1 PUSH4 0x23986F7D EQ PUSH2 0x132 JUMPI DUP1 PUSH4 0x2EC0C002 EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x14F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x13 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x13A PUSH2 0x25E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x13A PUSH2 0x14A CALLDATASIZE PUSH1 0x4 PUSH2 0xCC6 JUMP JUMPDEST PUSH2 0x347 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0x11F JUMP JUMPDEST PUSH2 0x13A PUSH2 0x463 JUMP JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129 JUMP JUMPDEST PUSH2 0x11F PUSH2 0x4FD JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH1 0xFF AND PUSH2 0x16D JUMP JUMPDEST PUSH2 0x13A PUSH2 0x19E CALLDATASIZE PUSH1 0x4 PUSH2 0xCC6 JUMP JUMPDEST PUSH2 0x52C JUMP JUMPDEST PUSH2 0x13A PUSH2 0x64C JUMP JUMPDEST PUSH2 0x1B3 PUSH2 0x6EC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129 JUMP JUMPDEST PUSH2 0x13A PUSH2 0x1D9 CALLDATASIZE PUSH1 0x4 PUSH2 0xCC6 JUMP JUMPDEST PUSH2 0x6F6 JUMP JUMPDEST PUSH2 0x13A PUSH2 0x1EC CALLDATASIZE PUSH1 0x4 PUSH2 0xCC6 JUMP JUMPDEST PUSH2 0x80B JUMP JUMPDEST PUSH2 0x13A PUSH2 0x1FF CALLDATASIZE PUSH1 0x4 PUSH2 0xCC6 JUMP JUMPDEST PUSH2 0x8BE JUMP JUMPDEST PUSH2 0x13A PUSH2 0x9D2 JUMP JUMPDEST PUSH2 0x13A PUSH2 0xA62 JUMP JUMPDEST PUSH2 0x240 PUSH2 0x222 CALLDATASIZE PUSH1 0x4 PUSH2 0xCC6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x129 SWAP2 SWAP1 PUSH2 0xD2E JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1B3 JUMP JUMPDEST CALLER PUSH2 0x267 PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x2A2 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x29F JUMPI PUSH2 0x29F PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x2C0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x13 SLOAD PUSH2 0x2CB PUSH2 0x4FD JUMP JUMPDEST PUSH2 0x2D5 DUP3 TIMESTAMP PUSH2 0xD42 JUMP JUMPDEST GT PUSH2 0x2F3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7F0369A9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x12 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x317 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B4DA555 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x13 SLOAD PUSH1 0x0 SUB PUSH2 0x33A JUMPI PUSH1 0x40 MLOAD PUSH4 0x68AD12E1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x344 PUSH1 0x1 PUSH2 0xB3E JUMP JUMPDEST POP JUMP JUMPDEST CALLER PUSH2 0x350 PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x38B JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x388 JUMPI PUSH2 0x388 PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x3A9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x3D6 JUMPI PUSH2 0x3D6 PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO DUP1 PUSH2 0x3EA JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST ISZERO PUSH2 0x408 JUMPI PUSH1 0x40 MLOAD PUSH4 0x19F546AD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xF294E68C632D2C26E3D36129816C9A3E54BFA0EBADA89D07D08E15E87A8E2403 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST CALLER PUSH2 0x46C PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x4A7 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4A4 JUMPI PUSH2 0x4A4 PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x4C5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA45F47FDEA8A1EFDD9029A5691C7F759C32B7C698632B563573E155625D16933 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x527 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1322 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH2 0x535 PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x570 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x56D JUMPI PUSH2 0x56D PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x58E JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x5BD JUMPI PUSH2 0x5BD PUSH2 0xCF6 JUMP JUMPDEST EQ DUP1 PUSH2 0x5D0 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO JUMPDEST ISZERO PUSH2 0x5EE JUMPI PUSH1 0x40 MLOAD PUSH4 0xE15D729 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0xDC6F53B47A9DFBEA7A15FCEEF0CD84711D3D79CCC0952111866167AF5E59E264 SWAP1 PUSH2 0x640 SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0xD63 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH2 0x655 PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x690 JUMPI POP PUSH1 0x2 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x68D JUMPI PUSH2 0x68D PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x6AE JUMPI PUSH1 0x40 MLOAD PUSH4 0xBAE4C01F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x9E87FAC88FF661F02D44F95383C817FECE4BCE600A3DAB7A54406878B965E752 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x527 PUSH2 0xB10 JUMP JUMPDEST CALLER PUSH2 0x6FF PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x73A JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x737 JUMPI PUSH2 0x737 PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x758 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x785 JUMPI PUSH2 0x785 PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO DUP1 PUSH2 0x799 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST ISZERO PUSH2 0x7B7 JUMPI PUSH1 0x40 MLOAD PUSH4 0xBCEAB9D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x2 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xFAAC289281B8FC57DFF30D0FF38B071D28BB5F24CD5ED1BD2379D6FB27F714DD SWAP2 ADD PUSH2 0x458 JUMP JUMPDEST CALLER PUSH2 0x814 PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x83B JUMPI PUSH1 0x40 MLOAD PUSH4 0x14E74A25 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 PUSH2 0x85E JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST ISZERO PUSH2 0x87C JUMPI PUSH1 0x40 MLOAD PUSH4 0x274AC43 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x88E PUSH2 0x6EC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x8B5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F677F51 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x344 DUP2 PUSH2 0xB84 JUMP JUMPDEST CALLER PUSH2 0x8C7 PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x902 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x8FF JUMPI PUSH2 0x8FF PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x920 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x94D JUMPI PUSH2 0x94D PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO DUP1 PUSH2 0x961 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST ISZERO PUSH2 0x97F JUMPI PUSH1 0x40 MLOAD PUSH4 0x1600E745 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x3 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH31 0xA317382A4189D8763D4A024EC833785CEBD3580A084FF0F887F156B822CB1 SWAP2 ADD PUSH2 0x458 JUMP JUMPDEST CALLER PUSH2 0x9DB PUSH2 0xB10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0xA16 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xA13 JUMPI PUSH2 0xA13 PUSH2 0xCF6 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0xA34 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x12 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xA58 JUMPI PUSH1 0x40 MLOAD PUSH4 0x33BFB93F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xA60 PUSH2 0xBD2 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA8D JUMPI PUSH1 0x40 MLOAD PUSH4 0x1B54EEE3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x11 SLOAD PUSH2 0xA98 PUSH2 0x4FD JUMP JUMPDEST PUSH2 0xAA2 DUP3 TIMESTAMP PUSH2 0xD42 JUMP JUMPDEST GT PUSH2 0xAC0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7F0369A9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xAD4 PUSH2 0x6EC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0xAFB JUMPI PUSH1 0x40 MLOAD PUSH4 0x55CC5079 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x10 SLOAD PUSH2 0x344 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xC0D JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x12 DUP1 SLOAD PUSH1 0xFF NOT AND DUP3 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x0 PUSH1 0x13 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x7C21A455B42AC52B1F1CC1103DB5AFE532E817479E9503A97A734720271C5A74 SWAP1 PUSH1 0x20 ADD PUSH2 0x458 JUMP JUMPDEST TIMESTAMP PUSH1 0x11 SSTORE PUSH1 0x10 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST TIMESTAMP PUSH1 0x13 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xEB0F48D74C7254E5B55EF91A3F6E496E6A4A8676B6DAE07F3D6FB0805B9FAC93 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x11 DUP2 SWAP1 SSTORE PUSH1 0x10 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x40 MLOAD PUSH2 0x344 SWAP3 DUP5 SWAP3 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xCEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x4 DUP2 LT PUSH2 0xD2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0xD3C DUP3 DUP5 PUSH2 0xD0C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xD3C JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 DUP2 ADD PUSH2 0xCEF PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xD0C JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE LOG4 0xDE 0x25 0x2B 0xFB SWAP10 NUMBER EXTCODEHASH TIMESTAMP EXTCODECOPY MSTORE8 COINBASE 0xEE 0xC7 BALANCE 0xD6 0xD6 JUMP 0x26 0x49 LT GASLIMIT 0xE6 PUSH19 0x79FDCFDE54307B64736F6C6343000811003300 ","sourceMap":"1024:9605:74:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3670:111;3749:27;;3670:111;;;160:25:181;;;148:2;133:18;3670:111:74;;;;;;;;4972:561;;;:::i;:::-;;7835:405;;;;;;:::i;:::-;;:::i;3459:106::-;3531:29;;3459:106;;9806:91;;;:::i;4019:72::-;4077:9;;-1:-1:-1;;;4077:9:74;;;;4019:72;;;652:14:181;;645:22;627:41;;615:2;600:18;4019:72:74;487:187:181;3871:93:74;;;:::i;3132:104::-;3206:25;;;;3132:104;;7064:425;;;;;;:::i;:::-;;:::i;9713:89::-;;;:::i;2968:91::-;;;:::i;:::-;;;-1:-1:-1;;;;;843:32:181;;;825:51;;813:2;798:18;2968:91:74;679:203:181;8571:404:74;;;;;;:::i;:::-;;:::i;5679:420::-;;;;;;:::i;:::-;;:::i;9323:386::-;;;;;;:::i;:::-;;:::i;4518:351::-;;;:::i;6242:548::-;;;:::i;4280:93::-;;;;;;:::i;:::-;-1:-1:-1;;;;;4354:14:74;4335:4;4354:14;;;:7;:14;;;;;;;;;4280:93;;;;;;;;:::i;3308:79::-;3371:11;;-1:-1:-1;;;;;3371:11:74;3308:79;;4972:561;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;5042:27:74::1;::::0;2767:7:::1;:5;:7::i;:::-;2739:23;2757:5:::0;2739:15:::1;:23;:::i;:::-;2738:36;2734:101;;2783:52;;-1:-1:-1::0;;;2783:52:74::1;;;;;;;;;;;2734:101;5175:25:::2;::::0;::::2;;5171:101;;;5209:63;;-1:-1:-1::0;;;5209:63:74::2;;;;;;;;;;;5171:101;5337:27;::::0;:1:::2;:32:::0;5333:101:::2;;5378:56;;-1:-1:-1::0;;;5378:56:74::2;;;;;;;;;;;5333:101;5496:32;5523:4;5496:26;:32::i;:::-;3726:1:68::1;4972:561:74:o:0;7835:405::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;-1:-1:-1;;;;;8035:16:74;::::1;8055:9;8035:16:::0;;;:7:::1;:16;::::0;;;;;::::1;;:29;::::0;::::1;;;;;;:::i;:::-;;;:54;;;-1:-1:-1::0;;;;;;8068:21:74;::::1;::::0;8035:54:::1;8031:126;;;8104:53;;-1:-1:-1::0;;;8104:53:74::1;;;;;;;;;;;8031:126;-1:-1:-1::0;;;;;8164:16:74;::::1;:1;:16:::0;;;:7:::1;:16;::::0;;;;;;;;:35;;-1:-1:-1;;8164:35:74::1;8183:16;8164:35;::::0;;8210:25;;825:51:181;;;8210:25:74::1;::::0;798:18:181;8210:25:74::1;;;;;;;;7835:405:::0;:::o;9806:91::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;9862:9:74::1;9855:16:::0;;-1:-1:-1;;;;9855:16:74::1;::::0;;9882:10:::1;::::0;::::1;::::0;9862:1:::1;::::0;9882:10:::1;9806:91::o:0;3871:93::-;3909:7;3931:28;2479:32:106;;;2407:109;3931:28:74;3924:35;;3871:93;:::o;7064:425::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;-1:-1:-1;;;;;7275:16:74;::::1;7256;7275::::0;;;:7:::1;:16;::::0;;;;;::::1;;::::0;7301:11:::1;:24;;;;;;;;:::i;:::-;;:49;;;-1:-1:-1::0;;;;;;7329:21:74;::::1;::::0;7301:49:::1;7297:109;;;7359:47;;-1:-1:-1::0;;;7359:47:74::1;;;;;;;;;;;7297:109;-1:-1:-1::0;;;;;7413:16:74;::::1;7432:9;7413:16:::0;;;:7:::1;:16;::::0;;;;;;:28;;-1:-1:-1;;7413:28:74::1;::::0;;7452:32;::::1;::::0;::::1;::::0;7413:16;;7472:11;;7452:32:::1;:::i;:::-;;;;;;;;7125:364;7064:425:::0;:::o;9713:89::-;3308:10:68;3278:26;:24;:26::i;:::-;-1:-1:-1;;;;;3278:40:68;;;:79;;;;-1:-1:-1;3345:12:68;3330:10;3322:1;:19;;;:7;:19;;;;;;;;:35;;;;;;;;:::i;:::-;;;3278:79;3274:154;;;3372:56;;-1:-1:-1;;;3372:56:68;;;;;;;;;;;3274:154;9762:9:74::1;:16:::0;;-1:-1:-1;;;;9762:16:74::1;-1:-1:-1::0;;;9762:16:74::1;::::0;;9789:8:::1;::::0;::::1;::::0;9762:1:::1;::::0;9789:8:::1;9713:89::o:0;2968:91::-;3006:7;3028:26;:24;:26::i;8571:404::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;-1:-1:-1;;;;;8768:17:74;::::1;8789:9;8768:17:::0;;;:7:::1;:17;::::0;;;;;::::1;;:30;::::0;::::1;;;;;;:::i;:::-;;;:56;;;-1:-1:-1::0;;;;;;8802:22:74;::::1;::::0;8768:56:::1;8764:129;;;8839:54;;-1:-1:-1::0;;;8839:54:74::1;;;;;;;;;;;8764:129;-1:-1:-1::0;;;;;8900:17:74;::::1;:1;:17:::0;;;:7:::1;:17;::::0;;;;;;;;:32;;-1:-1:-1;;8900:32:74::1;8920:12;8900:32;::::0;;8943:27;;825:51:181;;;8943:27:74::1;::::0;798:18:181;8943:27:74::1;679:203:181::0;5679:420:74;2546:10:68;2516:26;:24;:26::i;:::-;-1:-1:-1;;;;;2516:40:68;;2512:91;;2565:38;;-1:-1:-1;;;2565:38:68;;;;;;;;;;;2512:91;5789:11:74::1;::::0;-1:-1:-1;;;;;5789:28:74;;::::1;:11:::0;::::1;:28;::::0;:59:::1;;-1:-1:-1::0;;;;;;5821:27:74;::::1;::::0;5789:59:::1;5785:133;;;5863:55;;-1:-1:-1::0;;;5863:55:74::1;;;;;;;;;;;5785:133;5981:13;-1:-1:-1::0;;;;;5970:24:74::1;:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;5970:24:74::1;::::0;5966:94:::1;;6003:57;;-1:-1:-1::0;;;6003:57:74::1;;;;;;;;;;;5966:94;6067:27;6080:13;6067:12;:27::i;9323:386::-:0;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;-1:-1:-1;;;;;9516:15:74;::::1;9535:9;9516:15:::0;;;:7:::1;:15;::::0;;;;;::::1;;:28;::::0;::::1;;;;;;:::i;:::-;;;:52;;;-1:-1:-1::0;;;;;;9548:20:74;::::1;::::0;9516:52:::1;9512:123;;;9583:52;;-1:-1:-1::0;;;9583:52:74::1;;;;;;;;;;;9512:123;-1:-1:-1::0;;;;;9642:15:74;::::1;:1;:15:::0;;;:7:::1;:15;::::0;;;;;;;;:28;;-1:-1:-1;;9642:28:74::1;9660:10;9642:28;::::0;;9681:23;;825:51:181;;;9681:23:74::1;::::0;798:18:181;9681:23:74::1;679:203:181::0;4518:351:74;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;4691:25:74::1;::::0;::::1;;4687:109;;;4725:71;;-1:-1:-1::0;;;4725:71:74::1;;;;;;;;;;;4687:109;4834:30;:28;:30::i;:::-;4518:351::o:0;6242:548::-;2741:11:68;;-1:-1:-1;;;;;2741:11:68;2756:10;2741:25;2737:87;;2775:49;;-1:-1:-1;;;2775:49:68;;;;;;;;;;;2737:87;6306:29:74::1;::::0;2767:7:::1;:5;:7::i;:::-;2739:23;2757:5:::0;2739:15:::1;:23;:::i;:::-;2738:36;2734:101;;2783:52;;-1:-1:-1::0;;;2783:52:74::1;;;;;;;;;;;2734:101;6393:11:::2;::::0;-1:-1:-1;;;;;6393:11:74::2;6382:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;6382:22:74::2;::::0;6378:96:::2;;6413:61;;-1:-1:-1::0;;;6413:61:74::2;;;;;;;;;;;6378:96;6773:11;::::0;6763:22:::2;::::0;-1:-1:-1;;;;;6773:11:74::2;6763:9;:22::i;2273:130:106:-:0;2368:30;;-1:-1:-1;;;;;2368:30:106;;2273:130::o;10093:180:74:-;10155:25;:33;;-1:-1:-1;;10155:33:74;;;;;;;;;;-1:-1:-1;10201:27:74;10194:34;10239:29;;627:41:181;;;10239:29:74;;615:2:181;600:18;10239:29:74;487:187:181;10440::74;10531:15;10499:29;:47;10552:11;:27;;-1:-1:-1;;;;;;10552:27:74;-1:-1:-1;;;;;10552:27:74;;;;;;;;10590:32;;;;-1:-1:-1;;10590:32:74;10440:187;:::o;9927:162::-;10011:15;9981:27;:45;;;10037:47;;160:25:181;;;10037:47:74;;148:2:181;133:18;10037:47:74;;;;;;;9927:162::o;10277:159::-;10335:1;:29;10328:36;;;10377:11;10370:18;;-1:-1:-1;;;;;;10370:18:74;;;2202:16:106;;2181:49;;10394:37:74;;10422:8;;636:45:106;;-1:-1:-1;;;;;2181:49:106;;;;2202:16;;;2181:49;;;2236:16;;:28;;-1:-1:-1;;;;;;2236:28:106;-1:-1:-1;;;;;2236:28:106;;;;;;;;;;2066:203::o;196:286:181:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;350:23;;-1:-1:-1;;;;;402:31:181;;392:42;;382:70;;448:1;445;438:12;382:70;471:5;196:286;-1:-1:-1;;;196:286:181:o;887:127::-;948:10;943:3;939:20;936:1;929:31;979:4;976:1;969:15;1003:4;1000:1;993:15;1019:232;1095:1;1088:5;1085:12;1075:143;;1140:10;1135:3;1131:20;1128:1;1121:31;1175:4;1172:1;1165:15;1203:4;1200:1;1193:15;1075:143;1227:18;;1019:232::o;1256:199::-;1398:2;1383:18;;1410:39;1387:9;1431:6;1410:39;:::i;:::-;1256:199;;;;:::o;1460:225::-;1527:9;;;1548:11;;;1545:134;;;1601:10;1596:3;1592:20;1589:1;1582:31;1636:4;1633:1;1626:15;1664:4;1661:1;1654:15;1690:296;-1:-1:-1;;;;;1890:32:181;;1872:51;;1860:2;1845:18;;1932:48;1976:2;1961:18;;1953:6;1932:48;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"702000","executionCost":"734","totalCost":"702734"},"external":{"acceptProposedOwner()":"infinite","assignRoleAdmin(address)":"32393","assignRoleRouterAdmin(address)":"32428","assignRoleWatcher(address)":"32438","delay()":"2386","owner()":"2426","pause()":"29596","paused()":"2355","proposeNewOwner(address)":"infinite","proposeRouterAllowlistRemoval()":"29931","proposed()":"2441","proposedTimestamp()":"2371","queryRole(address)":"2677","removeRouterAllowlist()":"43556","revokeRole(address)":"infinite","routerAllowlistRemoved()":"2393","routerAllowlistTimestamp()":"2294","unpause()":"29584"},"internal":{"_setOwner(address)":"57212","_setProposed(address)":"47531","_setRouterAllowlistRemoved(bool)":"infinite","_setRouterAllowlistTimestamp()":"infinite"}},"methodIdentifiers":{"acceptProposedOwner()":"c5b350df","assignRoleAdmin(address)":"bb271a27","assignRoleRouterAdmin(address)":"2ec0c002","assignRoleWatcher(address)":"a9943b1b","delay()":"6a42b8f8","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","proposeNewOwner(address)":"b1f8100d","proposeRouterAllowlistRemoval()":"c56ce358","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","queryRole(address)":"c91cb56a","removeRouterAllowlist()":"23986f7d","revokeRole(address)":"80e52e3f","routerAllowlistRemoved()":"6be55785","routerAllowlistTimestamp()":"12232937","unpause()":"3f4ba83a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__assignRoleAdmin_invalidInput\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__assignRoleRouter_invalidInput\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__assignRoleWatcher_invalidInput\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__delayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__removeAssetAllowlist_noProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__removeRouterAllowlist_noProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__revokeRole_invalidInput\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"AssignRoleAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"AssignRoleRouter\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"watcher\",\"type\":\"address\"}],\"name\":\"AssignRoleWatcher\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"revokedAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enum Role\",\"name\":\"revokedRole\",\"type\":\"uint8\"}],\"name\":\"RevokeRole\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"RouterAllowlistRemovalProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"renounced\",\"type\":\"bool\"}],\"name\":\"RouterAllowlistRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"assignRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"assignRoleRouterAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_watcher\",\"type\":\"address\"}],\"name\":\"assignRoleWatcher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposeRouterAllowlistRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_role\",\"type\":\"address\"}],\"name\":\"queryRole\",\"outputs\":[{\"internalType\":\"enum Role\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeRouterAllowlist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_revoke\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"routerAllowlistRemoved\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"routerAllowlistTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.The majority of this code was taken from the openzeppelin Ownable contract\",\"kind\":\"dev\",\"methods\":{\"assignRoleAdmin(address)\":{\"details\":\"requested address will be allowlisted as Role.Admin under mapping roles\",\"params\":{\"_admin\":\"- The address to beassigned as Role.Admin under roles\"}},\"assignRoleRouterAdmin(address)\":{\"details\":\"requested address will be whitelisted as Role.RouterAdmin under mapping roles\",\"params\":{\"_router\":\"- The address to be assigned as Role.RouterAdmin under roles\"}},\"assignRoleWatcher(address)\":{\"details\":\"requested address will be allowlisted as Role.Watcher under mapping roles\",\"params\":{\"_watcher\":\"- The address to be assigned as Role.Watcher under roles\"}},\"queryRole(address)\":{\"details\":\"returns uint value of representing enum value of Role\",\"params\":{\"_role\":\"The address for which Role need to be queried\"}},\"revokeRole(address)\":{\"details\":\"input address will be assingned default value i.e Role.None under mapping roles\",\"params\":{\"_revoke\":\"- The address to be revoked from it's Role\"}}},\"title\":\"ProposedOwnableFacet\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the proposed owner.\"},\"assignRoleAdmin(address)\":{\"notice\":\"Use to assign an address Admin role Address with Admin role has permission to all else of Router & Watcher role Can only be called by Owner or Role.Admin\"},\"assignRoleRouterAdmin(address)\":{\"notice\":\"Use to assign an address Router role Address with Router has permission to add new router Can only be called by Owner or Role.RouterAdmin\"},\"assignRoleWatcher(address)\":{\"notice\":\"Use to assign an address Watcher role Address with Watcher role has permission to pause Can only be called by Owner or Role.Admin\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"paused()\":{\"notice\":\"Returns if paused or not.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposeRouterAllowlistRemoval()\":{\"notice\":\"Indicates if the ownership of the router allowlist has been renounced\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"queryRole(address)\":{\"notice\":\"Returns the Role of the address\"},\"removeRouterAllowlist()\":{\"notice\":\"Indicates if the ownership of the asset allowlist has been renounced\"},\"revokeRole(address)\":{\"notice\":\"Use to revoke the Role of an address to None Can only be called by Owner or Role.Admin\"},\"routerAllowlistRemoved()\":{\"notice\":\"Returns if the router allowlist is removed.\"},\"routerAllowlistTimestamp()\":{\"notice\":\"Returns the timestamp when router allowlist was last proposed to be removed\"}},\"notice\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed via a two step process: 1. Call `proposeOwner` 2. Wait out the delay period 3. Call `acceptOwner`\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/ProposedOwnableFacet.sol\":\"ProposedOwnableFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n  AppStorage internal s;\\n\\n  // ========== Custom Errors ===========\\n\\n  error BaseConnextFacet__onlyOwner_notOwner();\\n  error BaseConnextFacet__onlyProposed_notProposedOwner();\\n  error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n  error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n  error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n  error BaseConnextFacet__whenNotPaused_paused();\\n  error BaseConnextFacet__nonReentrant_reentrantCall();\\n  error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n  error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n  error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @dev Prevents a contract from calling itself, directly or indirectly.\\n   * Calling a `nonReentrant` function from another `nonReentrant`\\n   * function is not supported. It is possible to prevent this from happening\\n   * by making the `nonReentrant` function external, and making it call a\\n   * `private` function that does the actual work.\\n   */\\n  modifier nonReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._status = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._status = Constants.NOT_ENTERED;\\n  }\\n\\n  modifier nonXCallReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._xcallStatus = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._xcallStatus = Constants.NOT_ENTERED;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and router role.\\n   */\\n  modifier onlyOwnerOrRouter() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n      revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and watcher role.\\n   */\\n  modifier onlyOwnerOrWatcher() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n      revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and admin role.\\n   */\\n  modifier onlyOwnerOrAdmin() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n      revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if all functionality is paused\\n   */\\n  modifier whenNotPaused() {\\n    if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n    _;\\n  }\\n\\n  // ============ Internal functions ============\\n  /**\\n   * @notice Indicates if the router allowlist has been removed\\n   */\\n  function _isRouterAllowlistRemoved() internal view returns (bool) {\\n    return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n    address adopted = AssetLogic.getConfig(_key).adopted;\\n    if (adopted == address(0)) {\\n      revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n    }\\n    return adopted;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n    address representation = AssetLogic.getConfig(_key).representation;\\n    // If this is address(0), then there is no mintable token for this asset on this\\n    // domain\\n    return representation;\\n  }\\n\\n  /**\\n   * @notice Calculates a transferId\\n   */\\n  function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_params));\\n  }\\n\\n  /**\\n   * @notice Internal utility function that combines\\n   *         `_origin` and `_nonce`.\\n   * @dev Both origin and nonce should be less than 2^32 - 1\\n   * @param _origin Domain of chain where the transfer originated\\n   * @param _nonce The unique identifier for the message from origin to destination\\n   * @return Returns (`_origin` << 32) & `_nonce`\\n   */\\n  function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n    return (uint64(_origin) << 32) | _nonce;\\n  }\\n\\n  function _getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address) {\\n    return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n  }\\n\\n  function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n    return AssetLogic.getCanonicalTokenId(_candidate, s);\\n  }\\n\\n  function _getLocalAndAdoptedToken(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address, address) {\\n    address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n    address _adopted = _getAdoptedAsset(_key);\\n    return (_local, _adopted);\\n  }\\n\\n  function _isLocalOrigin(address _token) internal view returns (bool) {\\n    return AssetLogic.isLocalOrigin(_token, s);\\n  }\\n\\n  function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n    TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n    bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n    if (!AssetLogic.getConfig(_key).approval) {\\n      revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n    }\\n    return (_canonical, _key);\\n  }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/ProposedOwnableFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {BaseConnextFacet} from \\\"./BaseConnextFacet.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {IProposedOwnable} from \\\"../../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnableFacet\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\ncontract ProposedOwnableFacet is BaseConnextFacet, IProposedOwnable {\\n  // ========== Custom Errors ===========\\n  error ProposedOwnableFacet__delayElapsed_delayNotElapsed();\\n  error ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange();\\n  error ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange();\\n  error ProposedOwnableFacet__removeRouterAllowlist_noProposal();\\n  error ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange();\\n  error ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange();\\n  error ProposedOwnableFacet__removeAssetAllowlist_noProposal();\\n  error ProposedOwnableFacet__proposeNewOwner_invalidProposal();\\n  error ProposedOwnableFacet__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange();\\n  error ProposedOwnableFacet__revokeRole_invalidInput();\\n  error ProposedOwnableFacet__assignRoleRouter_invalidInput();\\n  error ProposedOwnableFacet__assignRoleWatcher_invalidInput();\\n  error ProposedOwnableFacet__assignRoleAdmin_invalidInput();\\n\\n  // ============ Events ============\\n\\n  event RouterAllowlistRemovalProposed(uint256 timestamp);\\n\\n  event RouterAllowlistRemoved(bool renounced);\\n\\n  event RevokeRole(address revokedAddress, Role revokedRole);\\n\\n  event AssignRoleRouter(address router);\\n\\n  event AssignRoleWatcher(address watcher);\\n\\n  event AssignRoleAdmin(address admin);\\n\\n  event Paused();\\n\\n  event Unpaused();\\n\\n  // ============ Modifier ============\\n  /**\\n   * @notice Reverts the call if the expected delay has not elapsed.\\n   * @param start Timestamp marking the beginning of the delay period.\\n   */\\n  modifier delayElapsed(uint256 start) {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - start) <= delay()) revert ProposedOwnableFacet__delayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  // ============ External: Getters ============\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return LibDiamond.contractOwner();\\n  }\\n\\n  /**\\n   * @notice Returns if the router allowlist is removed.\\n   */\\n  function routerAllowlistRemoved() public view returns (bool) {\\n    return s._routerAllowlistRemoved;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view returns (address) {\\n    return s._proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view returns (uint256) {\\n    return s._proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the timestamp when router allowlist was last proposed to be removed\\n   */\\n  function routerAllowlistTimestamp() public view returns (uint256) {\\n    return s._routerAllowlistTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view returns (uint256) {\\n    return LibDiamond.acceptanceDelay();\\n  }\\n\\n  /**\\n   * @notice Returns if paused or not.\\n   */\\n  function paused() public view returns (bool) {\\n    return s._paused;\\n  }\\n\\n  /**\\n   * @notice Returns the Role of the address\\n   * @dev returns uint value of representing enum value of Role\\n   * @param _role The address for which Role need to be queried\\n   */\\n  function queryRole(address _role) public view returns (Role) {\\n    return s.roles[_role];\\n  }\\n\\n  // ============ External ============\\n\\n  /**\\n   * @notice Indicates if the ownership of the router allowlist has\\n   * been renounced\\n   */\\n  function proposeRouterAllowlistRemoval() public onlyOwnerOrAdmin {\\n    // Use contract as source of truth\\n    // Will fail if all ownership is renounced by modifier\\n    if (s._routerAllowlistRemoved) revert ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange();\\n\\n    // Begin delay, emit event\\n    _setRouterAllowlistTimestamp();\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership of the asset allowlist has\\n   * been renounced\\n   */\\n  function removeRouterAllowlist() public onlyOwnerOrAdmin delayElapsed(s._routerAllowlistTimestamp) {\\n    // Contract as sounce of truth\\n    // Will fail if all ownership is renounced by modifier\\n    if (s._routerAllowlistRemoved) revert ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange();\\n\\n    // Ensure there has been a proposal cycle started\\n    if (s._routerAllowlistTimestamp == 0) revert ProposedOwnableFacet__removeRouterAllowlist_noProposal();\\n\\n    // Set renounced, emit event, reset timestamp to 0\\n    _setRouterAllowlistRemoved(true);\\n  }\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public onlyOwner {\\n    // Contract as source of truth\\n    if (s._proposed == newlyProposed || newlyProposed == address(0))\\n      revert ProposedOwnableFacet__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (owner() == newlyProposed) revert ProposedOwnableFacet__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the proposed owner.\\n   */\\n  function acceptProposedOwner() public onlyProposed delayElapsed(s._proposedOwnershipTimestamp) {\\n    // Contract as source of truth\\n    if (owner() == s._proposed) revert ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange();\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(s._proposed);\\n  }\\n\\n  /**\\n   * @notice Use to revoke the Role of an address to None\\n   * Can only be called by Owner or Role.Admin\\n   * @dev input address will be assingned default value i.e Role.None under mapping roles\\n   * @param _revoke - The address to be revoked from it's Role\\n   */\\n  function revokeRole(address _revoke) public onlyOwnerOrAdmin {\\n    // Use contract as source of truth\\n    // Will fail if candidate isn't assinged any Role OR input address is addressZero\\n    Role revokedRole = s.roles[_revoke];\\n    if (revokedRole == Role.None || _revoke == address(0)) revert ProposedOwnableFacet__revokeRole_invalidInput();\\n\\n    s.roles[_revoke] = Role.None;\\n    emit RevokeRole(_revoke, revokedRole);\\n  }\\n\\n  /**\\n   * @notice Use to assign an address Router role\\n   * Address with Router has permission to add new router\\n   * Can only be called by Owner or Role.RouterAdmin\\n   * @dev requested address will be whitelisted as Role.RouterAdmin under mapping roles\\n   * @param _router - The address to be assigned as Role.RouterAdmin under roles\\n   */\\n  function assignRoleRouterAdmin(address _router) public onlyOwnerOrAdmin {\\n    // Use contract as source of truth\\n    // Will fail if candidate is already added OR input address is addressZero\\n    if (s.roles[_router] != Role.None || _router == address(0))\\n      revert ProposedOwnableFacet__assignRoleRouter_invalidInput();\\n\\n    s.roles[_router] = Role.RouterAdmin;\\n    emit AssignRoleRouter(_router);\\n  }\\n\\n  /**\\n   * @notice Use to assign an address Watcher role\\n   * Address with Watcher role has permission to pause\\n   * Can only be called by Owner or Role.Admin\\n   * @dev requested address will be allowlisted as Role.Watcher under mapping roles\\n   * @param _watcher - The address to be assigned as Role.Watcher under roles\\n   */\\n  function assignRoleWatcher(address _watcher) public onlyOwnerOrAdmin {\\n    // Use contract as source of truth\\n    // Will fail if candidate is already added OR input address is addressZero\\n    if (s.roles[_watcher] != Role.None || _watcher == address(0))\\n      revert ProposedOwnableFacet__assignRoleWatcher_invalidInput();\\n\\n    s.roles[_watcher] = Role.Watcher;\\n    emit AssignRoleWatcher(_watcher);\\n  }\\n\\n  /**\\n   * @notice Use to assign an address Admin role\\n   * Address with Admin role has permission to all else of Router & Watcher role\\n   * Can only be called by Owner or Role.Admin\\n   * @dev requested address will be allowlisted as Role.Admin under mapping roles\\n   * @param _admin - The address to beassigned as Role.Admin under roles\\n   */\\n  function assignRoleAdmin(address _admin) public onlyOwnerOrAdmin {\\n    // Use contract as source of truth\\n    // Will fail if candidate is already added OR input address is addressZero\\n    if (s.roles[_admin] != Role.None || _admin == address(0))\\n      revert ProposedOwnableFacet__assignRoleAdmin_invalidInput();\\n\\n    s.roles[_admin] = Role.Admin;\\n    emit AssignRoleAdmin(_admin);\\n  }\\n\\n  function pause() public onlyOwnerOrWatcher {\\n    s._paused = true;\\n    emit Paused();\\n  }\\n\\n  function unpause() public onlyOwnerOrAdmin {\\n    delete s._paused;\\n    emit Unpaused();\\n  }\\n\\n  ////// INTERNAL //////\\n\\n  function _setRouterAllowlistTimestamp() private {\\n    s._routerAllowlistTimestamp = block.timestamp;\\n    emit RouterAllowlistRemovalProposed(block.timestamp);\\n  }\\n\\n  function _setRouterAllowlistRemoved(bool value) private {\\n    s._routerAllowlistRemoved = value;\\n    delete s._routerAllowlistTimestamp;\\n    emit RouterAllowlistRemoved(value);\\n  }\\n\\n  function _setOwner(address newOwner) private {\\n    delete s._proposedOwnershipTimestamp;\\n    delete s._proposed;\\n    LibDiamond.setContractOwner(newOwner);\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    s._proposedOwnershipTimestamp = block.timestamp;\\n    s._proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0x9f56898c59fa169a13888e6b0292769d86eb2d74dd17a615713e160c93ea1e5b\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":13726,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"s","offset":0,"slot":"0","type":"t_struct(AppStorage)29536_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_contract(IERC20)10812)dyn_storage":{"base":"t_contract(IERC20)10812","encoding":"dynamic_array","label":"contract IERC20[]","numberOfBytes":"32"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IConnectorManager)47805":{"encoding":"inplace","label":"contract IConnectorManager","numberOfBytes":"20"},"t_contract(IERC20)10812":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_contract(LPToken)23179":{"encoding":"inplace","label":"contract LPToken","numberOfBytes":"20"},"t_enum(DestinationTransferStatus)29324":{"encoding":"inplace","label":"enum DestinationTransferStatus","numberOfBytes":"1"},"t_enum(Role)29319":{"encoding":"inplace","label":"enum Role","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_enum(Role)29319)":{"encoding":"mapping","key":"t_address","label":"mapping(address => enum Role)","numberOfBytes":"32","value":"t_enum(Role)29319"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(RouterConfig)29378_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RouterConfig)","numberOfBytes":"32","value":"t_struct(RouterConfig)29378_storage"},"t_mapping(t_address,t_struct(TokenId)37728_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct TokenId)","numberOfBytes":"32","value":"t_struct(TokenId)37728_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_bytes32,t_array(t_address)dyn_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => address[])","numberOfBytes":"32","value":"t_array(t_address)dyn_storage"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum DestinationTransferStatus)","numberOfBytes":"32","value":"t_enum(DestinationTransferStatus)29324"},"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => mapping(address => uint8))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint8)"},"t_mapping(t_bytes32,t_struct(Swap)30786_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct SwapUtils.Swap)","numberOfBytes":"32","value":"t_struct(Swap)30786_storage"},"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct TokenConfig)","numberOfBytes":"32","value":"t_struct(TokenConfig)29395_storage"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_bytes32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => bytes32)","numberOfBytes":"32","value":"t_bytes32"},"t_struct(AppStorage)29536_storage":{"encoding":"inplace","label":"struct AppStorage","members":[{"astId":29397,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":29399,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"LIQUIDITY_FEE_NUMERATOR","offset":0,"slot":"1","type":"t_uint256"},{"astId":29402,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"relayerFeeVault","offset":0,"slot":"2","type":"t_address"},{"astId":29405,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"nonce","offset":0,"slot":"3","type":"t_uint256"},{"astId":29408,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"domain","offset":0,"slot":"4","type":"t_uint32"},{"astId":29414,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"adoptedToCanonical","offset":0,"slot":"5","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29420,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"representationToCanonical","offset":0,"slot":"6","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29426,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"tokenConfigs","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)"},{"astId":29432,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"transferStatus","offset":0,"slot":"8","type":"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)"},{"astId":29438,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"routedTransfers","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_array(t_address)dyn_storage)"},{"astId":29445,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"routerBalances","offset":0,"slot":"10","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":29450,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"approvedRelayers","offset":0,"slot":"11","type":"t_mapping(t_address,t_bool)"},{"astId":29453,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"maxRoutersPerTransfer","offset":0,"slot":"12","type":"t_uint256"},{"astId":29458,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"slippage","offset":0,"slot":"13","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29463,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"receiveLocalOverride","offset":0,"slot":"14","type":"t_mapping(t_bytes32,t_bool)"},{"astId":29468,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"remotes","offset":0,"slot":"15","type":"t_mapping(t_uint32,t_bytes32)"},{"astId":29470,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"_proposed","offset":0,"slot":"16","type":"t_address"},{"astId":29472,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"_proposedOwnershipTimestamp","offset":0,"slot":"17","type":"t_uint256"},{"astId":29474,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"_routerAllowlistRemoved","offset":0,"slot":"18","type":"t_bool"},{"astId":29476,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"_routerAllowlistTimestamp","offset":0,"slot":"19","type":"t_uint256"},{"astId":29482,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"roles","offset":0,"slot":"20","type":"t_mapping(t_address,t_enum(Role)29319)"},{"astId":29487,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"routerConfigs","offset":0,"slot":"21","type":"t_mapping(t_address,t_struct(RouterConfig)29378_storage)"},{"astId":29489,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"_status","offset":0,"slot":"22","type":"t_uint256"},{"astId":29491,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"_xcallStatus","offset":0,"slot":"23","type":"t_uint256"},{"astId":29497,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"swapStorages","offset":0,"slot":"24","type":"t_mapping(t_bytes32,t_struct(Swap)30786_storage)"},{"astId":29504,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"tokenIndexes","offset":0,"slot":"25","type":"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))"},{"astId":29507,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"lpTokenTargetAddress","offset":0,"slot":"26","type":"t_address"},{"astId":29510,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"_paused","offset":20,"slot":"26","type":"t_bool"},{"astId":29513,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"aavePool","offset":0,"slot":"27","type":"t_address"},{"astId":29516,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"aavePortalFeeNumerator","offset":0,"slot":"28","type":"t_uint256"},{"astId":29521,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"portalDebt","offset":0,"slot":"29","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29526,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"portalFeeDebt","offset":0,"slot":"30","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29531,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"approvedSequencers","offset":0,"slot":"31","type":"t_mapping(t_address,t_bool)"},{"astId":29535,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"xAppConnectionManager","offset":0,"slot":"32","type":"t_contract(IConnectorManager)47805"}],"numberOfBytes":"1056"},"t_struct(RouterConfig)29378_storage":{"encoding":"inplace","label":"struct RouterConfig","members":[{"astId":29367,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"approved","offset":0,"slot":"0","type":"t_bool"},{"astId":29369,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"portalApproved","offset":1,"slot":"0","type":"t_bool"},{"astId":29371,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"owner","offset":2,"slot":"0","type":"t_address"},{"astId":29373,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"recipient","offset":0,"slot":"1","type":"t_address"},{"astId":29375,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"proposed","offset":0,"slot":"2","type":"t_address"},{"astId":29377,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"proposedTimestamp","offset":0,"slot":"3","type":"t_uint256"}],"numberOfBytes":"128"},"t_struct(Swap)30786_storage":{"encoding":"inplace","label":"struct SwapUtils.Swap","members":[{"astId":30753,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"key","offset":0,"slot":"0","type":"t_bytes32"},{"astId":30755,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"initialA","offset":0,"slot":"1","type":"t_uint256"},{"astId":30757,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"futureA","offset":0,"slot":"2","type":"t_uint256"},{"astId":30759,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"initialATime","offset":0,"slot":"3","type":"t_uint256"},{"astId":30761,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"futureATime","offset":0,"slot":"4","type":"t_uint256"},{"astId":30763,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"swapFee","offset":0,"slot":"5","type":"t_uint256"},{"astId":30765,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"adminFee","offset":0,"slot":"6","type":"t_uint256"},{"astId":30768,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"lpToken","offset":0,"slot":"7","type":"t_contract(LPToken)23179"},{"astId":30772,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"pooledTokens","offset":0,"slot":"8","type":"t_array(t_contract(IERC20)10812)dyn_storage"},{"astId":30775,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"tokenPrecisionMultipliers","offset":0,"slot":"9","type":"t_array(t_uint256)dyn_storage"},{"astId":30778,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"balances","offset":0,"slot":"10","type":"t_array(t_uint256)dyn_storage"},{"astId":30781,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"adminFees","offset":0,"slot":"11","type":"t_array(t_uint256)dyn_storage"},{"astId":30783,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"disabled","offset":0,"slot":"12","type":"t_bool"},{"astId":30785,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"removeTime","offset":0,"slot":"13","type":"t_uint256"}],"numberOfBytes":"448"},"t_struct(TokenConfig)29395_storage":{"encoding":"inplace","label":"struct TokenConfig","members":[{"astId":29380,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"representation","offset":0,"slot":"0","type":"t_address"},{"astId":29382,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"representationDecimals","offset":20,"slot":"0","type":"t_uint8"},{"astId":29384,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"adopted","offset":0,"slot":"1","type":"t_address"},{"astId":29386,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"adoptedDecimals","offset":20,"slot":"1","type":"t_uint8"},{"astId":29388,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"adoptedToLocalExternalPools","offset":0,"slot":"2","type":"t_address"},{"astId":29390,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"approval","offset":20,"slot":"2","type":"t_bool"},{"astId":29392,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"cap","offset":0,"slot":"3","type":"t_uint256"},{"astId":29394,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"custodied","offset":0,"slot":"4","type":"t_uint256"}],"numberOfBytes":"160"},"t_struct(TokenId)37728_storage":{"encoding":"inplace","label":"struct TokenId","members":[{"astId":37725,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"domain","offset":0,"slot":"0","type":"t_uint32"},{"astId":37727,"contract":"contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet","label":"id","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the proposed owner."},"assignRoleAdmin(address)":{"notice":"Use to assign an address Admin role Address with Admin role has permission to all else of Router & Watcher role Can only be called by Owner or Role.Admin"},"assignRoleRouterAdmin(address)":{"notice":"Use to assign an address Router role Address with Router has permission to add new router Can only be called by Owner or Role.RouterAdmin"},"assignRoleWatcher(address)":{"notice":"Use to assign an address Watcher role Address with Watcher role has permission to pause Can only be called by Owner or Role.Admin"},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"owner()":{"notice":"Returns the address of the current owner."},"paused()":{"notice":"Returns if paused or not."},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposeRouterAllowlistRemoval()":{"notice":"Indicates if the ownership of the router allowlist has been renounced"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"queryRole(address)":{"notice":"Returns the Role of the address"},"removeRouterAllowlist()":{"notice":"Indicates if the ownership of the asset allowlist has been renounced"},"revokeRole(address)":{"notice":"Use to revoke the Role of an address to None Can only be called by Owner or Role.Admin"},"routerAllowlistRemoved()":{"notice":"Returns if the router allowlist is removed."},"routerAllowlistTimestamp()":{"notice":"Returns the timestamp when router allowlist was last proposed to be removed"}},"notice":"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed via a two step process: 1. Call `proposeOwner` 2. Wait out the delay period 3. Call `acceptOwner`","version":1}}},"contracts/core/connext/facets/RelayerFacet.sol":{"RelayerFacet":{"abi":[{"inputs":[],"name":"BaseConnextFacet__getAdoptedAsset_assetNotFound","type":"error"},{"inputs":[],"name":"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonXCallReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__whenNotPaused_paused","type":"error"},{"inputs":[],"name":"RelayerFacet__addRelayer_alreadyApproved","type":"error"},{"inputs":[],"name":"RelayerFacet__removeRelayer_notApproved","type":"error"},{"inputs":[],"name":"RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"relayer","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"RelayerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldVault","type":"address"},{"indexed":false,"internalType":"address","name":"newVault","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"RelayerFeeVaultUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"relayer","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"RelayerRemoved","type":"event"},{"inputs":[{"internalType":"address","name":"_relayer","type":"address"}],"name":"addRelayer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_relayer","type":"address"}],"name":"approvedRelayers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"relayerFeeVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_relayer","type":"address"}],"name":"removeRelayer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_relayerFeeVault","type":"address"}],"name":"setRelayerFeeVault","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"events":{"RelayerAdded(address,address)":{"params":{"caller":"- The account that called the function","relayer":"- The relayer address to be added or removed"}},"RelayerFeeVaultUpdated(address,address,address)":{"params":{"caller":"- The account that called the function","newVault":"- The relayerFeeVault new value","oldVault":"- The relayerFeeVault old value"}},"RelayerRemoved(address,address)":{"params":{"caller":"- The account that called the function","relayer":"- The relayer address to be added or removed"}}},"kind":"dev","methods":{"addRelayer(address)":{"params":{"_relayer":"- The relayer address to add"}},"removeRelayer(address)":{"params":{"_relayer":"- The relayer address to remove"}},"setRelayerFeeVault(address)":{"params":{"_relayerFeeVault":"The address of the new router"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50610482806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806360f0a5ac1461005c57806365bc8582146100715780638cba8b6a14610091578063dd39f00d146100cd578063f01b3e01146100e0575b600080fd5b61006f61006a366004610406565b6100f3565b005b6002546040516001600160a01b0390911681526020015b60405180910390f35b6100bd61009f366004610406565b6001600160a01b03166000908152600b602052604090205460ff1690565b6040519015158152602001610088565b61006f6100db366004610406565b6101eb565b61006f6100ee366004610406565b6102e0565b336100fc6103d8565b6001600160a01b031614158015610137575060033360009081526014602052604090205460ff16600381111561013457610134610436565b14155b1561015557604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0381166000908152600b602052604090205460ff1661018e5760405163050d2e7760e21b815260040160405180910390fd5b6001600160a01b0381166000818152600b6020908152604091829020805460ff19169055815192835233908301527f0bdcf1d6f29aa87af8131cc81dcbb295fcf98d71cfcdc79cc5d965317bae1d0a91015b60405180910390a150565b336101f46103d8565b6001600160a01b03161415801561022f575060033360009081526014602052604090205460ff16600381111561022c5761022c610436565b14155b1561024d57604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0381166000908152600b602052604090205460ff1615610287576040516317a65d9f60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600b6020908152604091829020805460ff19166001179055815192835233908301527fd756b9aee10d6f2c80dc42c5031beb0e0847f6e1d6ba50199bdfc3f0de5cc0cc91016101e0565b336102e96103d8565b6001600160a01b031614158015610324575060033360009081526014602052604090205460ff16600381111561032157610321610436565b14155b1561034257604051637b32c26b60e01b815260040160405180910390fd5b6002546001600160a01b0390811690821681036103725760405163cbb50e4160e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b03848116918217909255604080519284168352602083019190915233908201527f81ccf12657606de24814d9c94f72fc587a18c112856a546a1669fff3cb6cac2b9060600160405180910390a15050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b60006020828403121561041857600080fd5b81356001600160a01b038116811461042f57600080fd5b9392505050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220ef6cea583b26d4879d4c821cf31356b5b53b78bcd24c49d3bcdbe7fe4faccee964736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x482 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x60F0A5AC EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x65BC8582 EQ PUSH2 0x71 JUMPI DUP1 PUSH4 0x8CBA8B6A EQ PUSH2 0x91 JUMPI DUP1 PUSH4 0xDD39F00D EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0xF01B3E01 EQ PUSH2 0xE0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x6A CALLDATASIZE PUSH1 0x4 PUSH2 0x406 JUMP JUMPDEST PUSH2 0xF3 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xBD PUSH2 0x9F CALLDATASIZE PUSH1 0x4 PUSH2 0x406 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x88 JUMP JUMPDEST PUSH2 0x6F PUSH2 0xDB CALLDATASIZE PUSH1 0x4 PUSH2 0x406 JUMP JUMPDEST PUSH2 0x1EB JUMP JUMPDEST PUSH2 0x6F PUSH2 0xEE CALLDATASIZE PUSH1 0x4 PUSH2 0x406 JUMP JUMPDEST PUSH2 0x2E0 JUMP JUMPDEST CALLER PUSH2 0xFC PUSH2 0x3D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x137 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x134 JUMPI PUSH2 0x134 PUSH2 0x436 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x155 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x18E JUMPI PUSH1 0x40 MLOAD PUSH4 0x50D2E77 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE CALLER SWAP1 DUP4 ADD MSTORE PUSH32 0xBDCF1D6F29AA87AF8131CC81DCBB295FCF98D71CFCDC79CC5D965317BAE1D0A SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST CALLER PUSH2 0x1F4 PUSH2 0x3D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x22F JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x22C JUMPI PUSH2 0x22C PUSH2 0x436 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x24D JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x287 JUMPI PUSH1 0x40 MLOAD PUSH4 0x17A65D9F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE CALLER SWAP1 DUP4 ADD MSTORE PUSH32 0xD756B9AEE10D6F2C80DC42C5031BEB0E0847F6E1D6BA50199BDFC3F0DE5CC0CC SWAP2 ADD PUSH2 0x1E0 JUMP JUMPDEST CALLER PUSH2 0x2E9 PUSH2 0x3D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x324 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x321 JUMPI PUSH2 0x321 PUSH2 0x436 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x342 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP3 AND DUP2 SUB PUSH2 0x372 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCBB50E41 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 DUP5 AND DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLER SWAP1 DUP3 ADD MSTORE PUSH32 0x81CCF12657606DE24814D9C94F72FC587A18C112856A546A1669FFF3CB6CAC2B SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x418 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x42F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEF PUSH13 0xEA583B26D4879D4C821CF31356 0xB5 0xB5 EXTCODESIZE PUSH25 0xBCD24C49D3BCDBE7FE4FACCEE964736F6C6343000811003300 ","sourceMap":"122:2673:75:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@addRelayer_18038":{"entryPoint":491,"id":18038,"parameterSlots":1,"returnSlots":0},"@approvedRelayers_17961":{"entryPoint":null,"id":17961,"parameterSlots":1,"returnSlots":1},"@contractOwner_29645":{"entryPoint":984,"id":29645,"parameterSlots":0,"returnSlots":1},"@diamondStorage_29603":{"entryPoint":null,"id":29603,"parameterSlots":0,"returnSlots":1},"@relayerFeeVault_17970":{"entryPoint":null,"id":17970,"parameterSlots":0,"returnSlots":1},"@removeRelayer_18068":{"entryPoint":243,"id":18068,"parameterSlots":1,"returnSlots":0},"@setRelayerFeeVault_18007":{"entryPoint":736,"id":18007,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":1030,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x21":{"entryPoint":1078,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1532:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"84:216:181","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:181"},"nodeType":"YulFunctionCall","src":"132:12:181"},"nodeType":"YulExpressionStatement","src":"132:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"105:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"114:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"101:3:181"},"nodeType":"YulFunctionCall","src":"101:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"126:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"97:3:181"},"nodeType":"YulFunctionCall","src":"97:32:181"},"nodeType":"YulIf","src":"94:52:181"},{"nodeType":"YulVariableDeclaration","src":"155:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"181:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"168:12:181"},"nodeType":"YulFunctionCall","src":"168:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"159:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"254:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"263:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"266:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"256:6:181"},"nodeType":"YulFunctionCall","src":"256:12:181"},"nodeType":"YulExpressionStatement","src":"256:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"213:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"224:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"239:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"244:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"235:3:181"},"nodeType":"YulFunctionCall","src":"235:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"231:3:181"},"nodeType":"YulFunctionCall","src":"231:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"220:3:181"},"nodeType":"YulFunctionCall","src":"220:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"210:2:181"},"nodeType":"YulFunctionCall","src":"210:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"203:6:181"},"nodeType":"YulFunctionCall","src":"203:50:181"},"nodeType":"YulIf","src":"200:70:181"},{"nodeType":"YulAssignment","src":"279:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"289:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"279:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"50:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"61:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"73:6:181","type":""}],"src":"14:286:181"},{"body":{"nodeType":"YulBlock","src":"406:102:181","statements":[{"nodeType":"YulAssignment","src":"416:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"428:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"439:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"424:3:181"},"nodeType":"YulFunctionCall","src":"424:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"416:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"458:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"473:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"489:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"494:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"485:3:181"},"nodeType":"YulFunctionCall","src":"485:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"498:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"481:3:181"},"nodeType":"YulFunctionCall","src":"481:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"469:3:181"},"nodeType":"YulFunctionCall","src":"469:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"451:6:181"},"nodeType":"YulFunctionCall","src":"451:51:181"},"nodeType":"YulExpressionStatement","src":"451:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"375:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"386:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"397:4:181","type":""}],"src":"305:203:181"},{"body":{"nodeType":"YulBlock","src":"608:92:181","statements":[{"nodeType":"YulAssignment","src":"618:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"630:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"641:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"626:3:181"},"nodeType":"YulFunctionCall","src":"626:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"618:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"660:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"685:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"678:6:181"},"nodeType":"YulFunctionCall","src":"678:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"671:6:181"},"nodeType":"YulFunctionCall","src":"671:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"653:6:181"},"nodeType":"YulFunctionCall","src":"653:41:181"},"nodeType":"YulExpressionStatement","src":"653:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"577:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"588:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"599:4:181","type":""}],"src":"513:187:181"},{"body":{"nodeType":"YulBlock","src":"737:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"754:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"761:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"766:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"757:3:181"},"nodeType":"YulFunctionCall","src":"757:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"747:6:181"},"nodeType":"YulFunctionCall","src":"747:31:181"},"nodeType":"YulExpressionStatement","src":"747:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"794:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"797:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"787:6:181"},"nodeType":"YulFunctionCall","src":"787:15:181"},"nodeType":"YulExpressionStatement","src":"787:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"818:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"821:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"811:6:181"},"nodeType":"YulFunctionCall","src":"811:15:181"},"nodeType":"YulExpressionStatement","src":"811:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"705:127:181"},{"body":{"nodeType":"YulBlock","src":"966:175:181","statements":[{"nodeType":"YulAssignment","src":"976:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"988:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"999:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"984:3:181"},"nodeType":"YulFunctionCall","src":"984:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"976:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"1011:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1029:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1034:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1025:3:181"},"nodeType":"YulFunctionCall","src":"1025:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1038:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1021:3:181"},"nodeType":"YulFunctionCall","src":"1021:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1015:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1056:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1071:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1079:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1067:3:181"},"nodeType":"YulFunctionCall","src":"1067:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1049:6:181"},"nodeType":"YulFunctionCall","src":"1049:34:181"},"nodeType":"YulExpressionStatement","src":"1049:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1103:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1114:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1099:3:181"},"nodeType":"YulFunctionCall","src":"1099:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"1123:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1131:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1119:3:181"},"nodeType":"YulFunctionCall","src":"1119:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1092:6:181"},"nodeType":"YulFunctionCall","src":"1092:43:181"},"nodeType":"YulExpressionStatement","src":"1092:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"927:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"938:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"946:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"957:4:181","type":""}],"src":"837:304:181"},{"body":{"nodeType":"YulBlock","src":"1303:227:181","statements":[{"nodeType":"YulAssignment","src":"1313:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1325:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1336:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1321:3:181"},"nodeType":"YulFunctionCall","src":"1321:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1313:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"1348:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1366:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1371:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1362:3:181"},"nodeType":"YulFunctionCall","src":"1362:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1375:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1358:3:181"},"nodeType":"YulFunctionCall","src":"1358:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1352:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1393:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1408:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1416:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1404:3:181"},"nodeType":"YulFunctionCall","src":"1404:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1386:6:181"},"nodeType":"YulFunctionCall","src":"1386:34:181"},"nodeType":"YulExpressionStatement","src":"1386:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1440:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1451:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1436:3:181"},"nodeType":"YulFunctionCall","src":"1436:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"1460:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1468:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1456:3:181"},"nodeType":"YulFunctionCall","src":"1456:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1429:6:181"},"nodeType":"YulFunctionCall","src":"1429:43:181"},"nodeType":"YulExpressionStatement","src":"1429:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1492:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1503:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1488:3:181"},"nodeType":"YulFunctionCall","src":"1488:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"1512:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1520:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1508:3:181"},"nodeType":"YulFunctionCall","src":"1508:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1481:6:181"},"nodeType":"YulFunctionCall","src":"1481:43:181"},"nodeType":"YulExpressionStatement","src":"1481:43:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1256:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1267:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1275:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1283:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1294:4:181","type":""}],"src":"1146:384:181"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100575760003560e01c806360f0a5ac1461005c57806365bc8582146100715780638cba8b6a14610091578063dd39f00d146100cd578063f01b3e01146100e0575b600080fd5b61006f61006a366004610406565b6100f3565b005b6002546040516001600160a01b0390911681526020015b60405180910390f35b6100bd61009f366004610406565b6001600160a01b03166000908152600b602052604090205460ff1690565b6040519015158152602001610088565b61006f6100db366004610406565b6101eb565b61006f6100ee366004610406565b6102e0565b336100fc6103d8565b6001600160a01b031614158015610137575060033360009081526014602052604090205460ff16600381111561013457610134610436565b14155b1561015557604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0381166000908152600b602052604090205460ff1661018e5760405163050d2e7760e21b815260040160405180910390fd5b6001600160a01b0381166000818152600b6020908152604091829020805460ff19169055815192835233908301527f0bdcf1d6f29aa87af8131cc81dcbb295fcf98d71cfcdc79cc5d965317bae1d0a91015b60405180910390a150565b336101f46103d8565b6001600160a01b03161415801561022f575060033360009081526014602052604090205460ff16600381111561022c5761022c610436565b14155b1561024d57604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0381166000908152600b602052604090205460ff1615610287576040516317a65d9f60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600b6020908152604091829020805460ff19166001179055815192835233908301527fd756b9aee10d6f2c80dc42c5031beb0e0847f6e1d6ba50199bdfc3f0de5cc0cc91016101e0565b336102e96103d8565b6001600160a01b031614158015610324575060033360009081526014602052604090205460ff16600381111561032157610321610436565b14155b1561034257604051637b32c26b60e01b815260040160405180910390fd5b6002546001600160a01b0390811690821681036103725760405163cbb50e4160e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b03848116918217909255604080519284168352602083019190915233908201527f81ccf12657606de24814d9c94f72fc587a18c112856a546a1669fff3cb6cac2b9060600160405180910390a15050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b60006020828403121561041857600080fd5b81356001600160a01b038116811461042f57600080fd5b9392505050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220ef6cea583b26d4879d4c821cf31356b5b53b78bcd24c49d3bcdbe7fe4faccee964736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x60F0A5AC EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x65BC8582 EQ PUSH2 0x71 JUMPI DUP1 PUSH4 0x8CBA8B6A EQ PUSH2 0x91 JUMPI DUP1 PUSH4 0xDD39F00D EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0xF01B3E01 EQ PUSH2 0xE0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x6A CALLDATASIZE PUSH1 0x4 PUSH2 0x406 JUMP JUMPDEST PUSH2 0xF3 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xBD PUSH2 0x9F CALLDATASIZE PUSH1 0x4 PUSH2 0x406 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x88 JUMP JUMPDEST PUSH2 0x6F PUSH2 0xDB CALLDATASIZE PUSH1 0x4 PUSH2 0x406 JUMP JUMPDEST PUSH2 0x1EB JUMP JUMPDEST PUSH2 0x6F PUSH2 0xEE CALLDATASIZE PUSH1 0x4 PUSH2 0x406 JUMP JUMPDEST PUSH2 0x2E0 JUMP JUMPDEST CALLER PUSH2 0xFC PUSH2 0x3D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x137 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x134 JUMPI PUSH2 0x134 PUSH2 0x436 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x155 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x18E JUMPI PUSH1 0x40 MLOAD PUSH4 0x50D2E77 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE CALLER SWAP1 DUP4 ADD MSTORE PUSH32 0xBDCF1D6F29AA87AF8131CC81DCBB295FCF98D71CFCDC79CC5D965317BAE1D0A SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST CALLER PUSH2 0x1F4 PUSH2 0x3D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x22F JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x22C JUMPI PUSH2 0x22C PUSH2 0x436 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x24D JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x287 JUMPI PUSH1 0x40 MLOAD PUSH4 0x17A65D9F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE CALLER SWAP1 DUP4 ADD MSTORE PUSH32 0xD756B9AEE10D6F2C80DC42C5031BEB0E0847F6E1D6BA50199BDFC3F0DE5CC0CC SWAP2 ADD PUSH2 0x1E0 JUMP JUMPDEST CALLER PUSH2 0x2E9 PUSH2 0x3D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x324 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x321 JUMPI PUSH2 0x321 PUSH2 0x436 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x342 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP3 AND DUP2 SUB PUSH2 0x372 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCBB50E41 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 DUP5 AND DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLER SWAP1 DUP3 ADD MSTORE PUSH32 0x81CCF12657606DE24814D9C94F72FC587A18C112856A546A1669FFF3CB6CAC2B SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x418 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x42F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEF PUSH13 0xEA583B26D4879D4C821CF31356 0xB5 0xB5 EXTCODESIZE PUSH25 0xBCD24C49D3BCDBE7FE4FACCEE964736F6C6343000811003300 ","sourceMap":"122:2673:75:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2543:250;;;;;;:::i;:::-;;:::i;:::-;;1474:94;1546:17;;1474:94;;-1:-1:-1;;;;;1546:17:75;;;451:51:181;;439:2;424:18;1474:94:75;;;;;;;;1353:117;;;;;;:::i;:::-;-1:-1:-1;;;;;1437:28:75;1418:4;1437:28;;;:18;:28;;;;;;;;;1353:117;;;;678:14:181;;671:22;653:41;;641:2;626:18;1353:117:75;513:187:181;2184:245:75;;;;;;:::i;:::-;;:::i;1735:341::-;;;;;;:::i;:::-;;:::i;2543:250::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;-1:-1:-1;;;;;2621:28:75;::::1;:1;:28:::0;;;:18:::1;:28;::::0;;;;;::::1;;2616:83;;2658:41;;-1:-1:-1::0;;;2658:41:75::1;;;;;;;;;;;2616:83;-1:-1:-1::0;;;;;2712:28:75;::::1;:1;:28:::0;;;:18:::1;:28;::::0;;;;;;;;2705:35;;-1:-1:-1;;2705:35:75::1;::::0;;2752:36;;1049:34:181;;;2777:10:75::1;1099:18:181::0;;;1092:43;2752:36:75::1;::::0;984:18:181;2752:36:75::1;;;;;;;;2543:250:::0;:::o;2184:245::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;-1:-1:-1;;;;;2258:28:75;::::1;:1;:28:::0;;;:18:::1;:28;::::0;;;;;::::1;;2254:83;;;2295:42;;-1:-1:-1::0;;;2295:42:75::1;;;;;;;;;;;2254:83;-1:-1:-1::0;;;;;2343:28:75;::::1;:1;:28:::0;;;:18:::1;:28;::::0;;;;;;;;:35;;-1:-1:-1;;2343:35:75::1;2374:4;2343:35;::::0;;2390:34;;1049::181;;;2413:10:75::1;1099:18:181::0;;;1092:43;2390:34:75::1;::::0;984:18:181;2390:34:75::1;837:304:181::0;1735:341:75;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;1843:17:75::1;::::0;-1:-1:-1;;;;;1843:17:75;;::::1;::::0;1871:23;::::1;::::0;;1867:93:::1;;1903:57;;-1:-1:-1::0;;;1903:57:75::1;;;;;;;;;;;1867:93;1967:17;:36:::0;;-1:-1:-1;;;;;;1967:36:75::1;-1:-1:-1::0;;;;;1967:36:75;;::::1;::::0;;::::1;::::0;;;2014:57:::1;::::0;;1404:15:181;;;1386:34;;1451:2;1436:18;;1429:43;;;;2060:10:75::1;1488:18:181::0;;;1481:43;2014:57:75::1;::::0;1336:2:181;1321:18;2014:57:75::1;;;;;;;1815:261;1735:341:::0;:::o;2273:130:106:-;2368:30;;-1:-1:-1;;;;;2368:30:106;;2273:130::o;14:286:181:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;168:23;;-1:-1:-1;;;;;220:31:181;;210:42;;200:70;;266:1;263;256:12;200:70;289:5;14:286;-1:-1:-1;;;14:286:181:o;705:127::-;766:10;761:3;757:20;754:1;747:31;797:4;794:1;787:15;821:4;818:1;811:15"},"gasEstimates":{"creation":{"codeDepositCost":"230800","executionCost":"275","totalCost":"231075"},"external":{"addRelayer(address)":"32613","approvedRelayers(address)":"2536","relayerFeeVault()":"2290","removeRelayer(address)":"32527","setRelayerFeeVault(address)":"32803"}},"methodIdentifiers":{"addRelayer(address)":"dd39f00d","approvedRelayers(address)":"8cba8b6a","relayerFeeVault()":"65bc8582","removeRelayer(address)":"60f0a5ac","setRelayerFeeVault(address)":"f01b3e01"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RelayerFacet__addRelayer_alreadyApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RelayerFacet__removeRelayer_notApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RelayerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldVault\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newVault\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RelayerFeeVaultUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RelayerRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayer\",\"type\":\"address\"}],\"name\":\"addRelayer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayer\",\"type\":\"address\"}],\"name\":\"approvedRelayers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"relayerFeeVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayer\",\"type\":\"address\"}],\"name\":\"removeRelayer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayerFeeVault\",\"type\":\"address\"}],\"name\":\"setRelayerFeeVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"RelayerAdded(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"relayer\":\"- The relayer address to be added or removed\"}},\"RelayerFeeVaultUpdated(address,address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"newVault\":\"- The relayerFeeVault new value\",\"oldVault\":\"- The relayerFeeVault old value\"}},\"RelayerRemoved(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"relayer\":\"- The relayer address to be added or removed\"}}},\"kind\":\"dev\",\"methods\":{\"addRelayer(address)\":{\"params\":{\"_relayer\":\"- The relayer address to add\"}},\"removeRelayer(address)\":{\"params\":{\"_relayer\":\"- The relayer address to remove\"}},\"setRelayerFeeVault(address)\":{\"params\":{\"_relayerFeeVault\":\"The address of the new router\"}}},\"version\":1},\"userdoc\":{\"events\":{\"RelayerAdded(address,address)\":{\"notice\":\"Emitted when a relayer is added or removed from allowlists\"},\"RelayerFeeVaultUpdated(address,address,address)\":{\"notice\":\"Emitted when the relayerFeeVault variable is updated\"},\"RelayerRemoved(address,address)\":{\"notice\":\"Emitted when a relayer is added or removed from allowlists\"}},\"kind\":\"user\",\"methods\":{\"addRelayer(address)\":{\"notice\":\"Used to add approved relayer\"},\"removeRelayer(address)\":{\"notice\":\"Used to remove approved relayer\"},\"setRelayerFeeVault(address)\":{\"notice\":\"Updates the relayer fee router\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/RelayerFacet.sol\":\"RelayerFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n  AppStorage internal s;\\n\\n  // ========== Custom Errors ===========\\n\\n  error BaseConnextFacet__onlyOwner_notOwner();\\n  error BaseConnextFacet__onlyProposed_notProposedOwner();\\n  error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n  error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n  error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n  error BaseConnextFacet__whenNotPaused_paused();\\n  error BaseConnextFacet__nonReentrant_reentrantCall();\\n  error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n  error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n  error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @dev Prevents a contract from calling itself, directly or indirectly.\\n   * Calling a `nonReentrant` function from another `nonReentrant`\\n   * function is not supported. It is possible to prevent this from happening\\n   * by making the `nonReentrant` function external, and making it call a\\n   * `private` function that does the actual work.\\n   */\\n  modifier nonReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._status = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._status = Constants.NOT_ENTERED;\\n  }\\n\\n  modifier nonXCallReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._xcallStatus = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._xcallStatus = Constants.NOT_ENTERED;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and router role.\\n   */\\n  modifier onlyOwnerOrRouter() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n      revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and watcher role.\\n   */\\n  modifier onlyOwnerOrWatcher() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n      revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and admin role.\\n   */\\n  modifier onlyOwnerOrAdmin() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n      revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if all functionality is paused\\n   */\\n  modifier whenNotPaused() {\\n    if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n    _;\\n  }\\n\\n  // ============ Internal functions ============\\n  /**\\n   * @notice Indicates if the router allowlist has been removed\\n   */\\n  function _isRouterAllowlistRemoved() internal view returns (bool) {\\n    return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n    address adopted = AssetLogic.getConfig(_key).adopted;\\n    if (adopted == address(0)) {\\n      revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n    }\\n    return adopted;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n    address representation = AssetLogic.getConfig(_key).representation;\\n    // If this is address(0), then there is no mintable token for this asset on this\\n    // domain\\n    return representation;\\n  }\\n\\n  /**\\n   * @notice Calculates a transferId\\n   */\\n  function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_params));\\n  }\\n\\n  /**\\n   * @notice Internal utility function that combines\\n   *         `_origin` and `_nonce`.\\n   * @dev Both origin and nonce should be less than 2^32 - 1\\n   * @param _origin Domain of chain where the transfer originated\\n   * @param _nonce The unique identifier for the message from origin to destination\\n   * @return Returns (`_origin` << 32) & `_nonce`\\n   */\\n  function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n    return (uint64(_origin) << 32) | _nonce;\\n  }\\n\\n  function _getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address) {\\n    return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n  }\\n\\n  function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n    return AssetLogic.getCanonicalTokenId(_candidate, s);\\n  }\\n\\n  function _getLocalAndAdoptedToken(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address, address) {\\n    address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n    address _adopted = _getAdoptedAsset(_key);\\n    return (_local, _adopted);\\n  }\\n\\n  function _isLocalOrigin(address _token) internal view returns (bool) {\\n    return AssetLogic.isLocalOrigin(_token, s);\\n  }\\n\\n  function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n    TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n    bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n    if (!AssetLogic.getConfig(_key).approval) {\\n      revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n    }\\n    return (_canonical, _key);\\n  }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/RelayerFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {BaseConnextFacet} from \\\"./BaseConnextFacet.sol\\\";\\n\\ncontract RelayerFacet is BaseConnextFacet {\\n  // ========== Custom Errors ===========\\n  error RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault();\\n  error RelayerFacet__addRelayer_alreadyApproved();\\n  error RelayerFacet__removeRelayer_notApproved();\\n\\n  // ========== Events ===========\\n  /**\\n   * @notice Emitted when the relayerFeeVault variable is updated\\n   * @param oldVault - The relayerFeeVault old value\\n   * @param newVault - The relayerFeeVault new value\\n   * @param caller - The account that called the function\\n   */\\n  event RelayerFeeVaultUpdated(address oldVault, address newVault, address caller);\\n\\n  /**\\n   * @notice Emitted when a relayer is added or removed from allowlists\\n   * @param relayer - The relayer address to be added or removed\\n   * @param caller - The account that called the function\\n   */\\n  event RelayerAdded(address relayer, address caller);\\n\\n  /**\\n   * @notice Emitted when a relayer is added or removed from allowlists\\n   * @param relayer - The relayer address to be added or removed\\n   * @param caller - The account that called the function\\n   */\\n  event RelayerRemoved(address relayer, address caller);\\n\\n  // ============ Modifiers ============\\n\\n  // ============ Getters ============\\n\\n  function approvedRelayers(address _relayer) public view returns (bool) {\\n    return s.approvedRelayers[_relayer];\\n  }\\n\\n  function relayerFeeVault() external view returns (address) {\\n    return s.relayerFeeVault;\\n  }\\n\\n  // ============ Admin functions ============\\n\\n  /**\\n   * @notice Updates the relayer fee router\\n   * @param _relayerFeeVault The address of the new router\\n   */\\n  function setRelayerFeeVault(address _relayerFeeVault) external onlyOwnerOrAdmin {\\n    address old = address(s.relayerFeeVault);\\n    if (old == _relayerFeeVault) revert RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault();\\n\\n    s.relayerFeeVault = _relayerFeeVault;\\n    emit RelayerFeeVaultUpdated(old, _relayerFeeVault, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Used to add approved relayer\\n   * @param _relayer - The relayer address to add\\n   */\\n  function addRelayer(address _relayer) external onlyOwnerOrAdmin {\\n    if (s.approvedRelayers[_relayer]) revert RelayerFacet__addRelayer_alreadyApproved();\\n    s.approvedRelayers[_relayer] = true;\\n\\n    emit RelayerAdded(_relayer, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Used to remove approved relayer\\n   * @param _relayer - The relayer address to remove\\n   */\\n  function removeRelayer(address _relayer) external onlyOwnerOrAdmin {\\n    if (!s.approvedRelayers[_relayer]) revert RelayerFacet__removeRelayer_notApproved();\\n    delete s.approvedRelayers[_relayer];\\n\\n    emit RelayerRemoved(_relayer, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0xa90ddde365e229b466492f9fe2585d1b9a41a0da6fc80b092eb7a56cf620efd3\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":13726,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"s","offset":0,"slot":"0","type":"t_struct(AppStorage)29536_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_contract(IERC20)10812)dyn_storage":{"base":"t_contract(IERC20)10812","encoding":"dynamic_array","label":"contract IERC20[]","numberOfBytes":"32"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IConnectorManager)47805":{"encoding":"inplace","label":"contract IConnectorManager","numberOfBytes":"20"},"t_contract(IERC20)10812":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_contract(LPToken)23179":{"encoding":"inplace","label":"contract LPToken","numberOfBytes":"20"},"t_enum(DestinationTransferStatus)29324":{"encoding":"inplace","label":"enum DestinationTransferStatus","numberOfBytes":"1"},"t_enum(Role)29319":{"encoding":"inplace","label":"enum Role","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_enum(Role)29319)":{"encoding":"mapping","key":"t_address","label":"mapping(address => enum Role)","numberOfBytes":"32","value":"t_enum(Role)29319"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(RouterConfig)29378_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RouterConfig)","numberOfBytes":"32","value":"t_struct(RouterConfig)29378_storage"},"t_mapping(t_address,t_struct(TokenId)37728_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct TokenId)","numberOfBytes":"32","value":"t_struct(TokenId)37728_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_bytes32,t_array(t_address)dyn_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => address[])","numberOfBytes":"32","value":"t_array(t_address)dyn_storage"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum DestinationTransferStatus)","numberOfBytes":"32","value":"t_enum(DestinationTransferStatus)29324"},"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => mapping(address => uint8))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint8)"},"t_mapping(t_bytes32,t_struct(Swap)30786_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct SwapUtils.Swap)","numberOfBytes":"32","value":"t_struct(Swap)30786_storage"},"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct TokenConfig)","numberOfBytes":"32","value":"t_struct(TokenConfig)29395_storage"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_bytes32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => bytes32)","numberOfBytes":"32","value":"t_bytes32"},"t_struct(AppStorage)29536_storage":{"encoding":"inplace","label":"struct AppStorage","members":[{"astId":29397,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":29399,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"LIQUIDITY_FEE_NUMERATOR","offset":0,"slot":"1","type":"t_uint256"},{"astId":29402,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"relayerFeeVault","offset":0,"slot":"2","type":"t_address"},{"astId":29405,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"nonce","offset":0,"slot":"3","type":"t_uint256"},{"astId":29408,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"domain","offset":0,"slot":"4","type":"t_uint32"},{"astId":29414,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"adoptedToCanonical","offset":0,"slot":"5","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29420,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"representationToCanonical","offset":0,"slot":"6","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29426,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"tokenConfigs","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)"},{"astId":29432,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"transferStatus","offset":0,"slot":"8","type":"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)"},{"astId":29438,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"routedTransfers","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_array(t_address)dyn_storage)"},{"astId":29445,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"routerBalances","offset":0,"slot":"10","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":29450,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"approvedRelayers","offset":0,"slot":"11","type":"t_mapping(t_address,t_bool)"},{"astId":29453,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"maxRoutersPerTransfer","offset":0,"slot":"12","type":"t_uint256"},{"astId":29458,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"slippage","offset":0,"slot":"13","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29463,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"receiveLocalOverride","offset":0,"slot":"14","type":"t_mapping(t_bytes32,t_bool)"},{"astId":29468,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"remotes","offset":0,"slot":"15","type":"t_mapping(t_uint32,t_bytes32)"},{"astId":29470,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"_proposed","offset":0,"slot":"16","type":"t_address"},{"astId":29472,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"_proposedOwnershipTimestamp","offset":0,"slot":"17","type":"t_uint256"},{"astId":29474,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"_routerAllowlistRemoved","offset":0,"slot":"18","type":"t_bool"},{"astId":29476,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"_routerAllowlistTimestamp","offset":0,"slot":"19","type":"t_uint256"},{"astId":29482,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"roles","offset":0,"slot":"20","type":"t_mapping(t_address,t_enum(Role)29319)"},{"astId":29487,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"routerConfigs","offset":0,"slot":"21","type":"t_mapping(t_address,t_struct(RouterConfig)29378_storage)"},{"astId":29489,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"_status","offset":0,"slot":"22","type":"t_uint256"},{"astId":29491,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"_xcallStatus","offset":0,"slot":"23","type":"t_uint256"},{"astId":29497,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"swapStorages","offset":0,"slot":"24","type":"t_mapping(t_bytes32,t_struct(Swap)30786_storage)"},{"astId":29504,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"tokenIndexes","offset":0,"slot":"25","type":"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))"},{"astId":29507,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"lpTokenTargetAddress","offset":0,"slot":"26","type":"t_address"},{"astId":29510,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"_paused","offset":20,"slot":"26","type":"t_bool"},{"astId":29513,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"aavePool","offset":0,"slot":"27","type":"t_address"},{"astId":29516,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"aavePortalFeeNumerator","offset":0,"slot":"28","type":"t_uint256"},{"astId":29521,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"portalDebt","offset":0,"slot":"29","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29526,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"portalFeeDebt","offset":0,"slot":"30","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29531,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"approvedSequencers","offset":0,"slot":"31","type":"t_mapping(t_address,t_bool)"},{"astId":29535,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"xAppConnectionManager","offset":0,"slot":"32","type":"t_contract(IConnectorManager)47805"}],"numberOfBytes":"1056"},"t_struct(RouterConfig)29378_storage":{"encoding":"inplace","label":"struct RouterConfig","members":[{"astId":29367,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"approved","offset":0,"slot":"0","type":"t_bool"},{"astId":29369,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"portalApproved","offset":1,"slot":"0","type":"t_bool"},{"astId":29371,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"owner","offset":2,"slot":"0","type":"t_address"},{"astId":29373,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"recipient","offset":0,"slot":"1","type":"t_address"},{"astId":29375,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"proposed","offset":0,"slot":"2","type":"t_address"},{"astId":29377,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"proposedTimestamp","offset":0,"slot":"3","type":"t_uint256"}],"numberOfBytes":"128"},"t_struct(Swap)30786_storage":{"encoding":"inplace","label":"struct SwapUtils.Swap","members":[{"astId":30753,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"key","offset":0,"slot":"0","type":"t_bytes32"},{"astId":30755,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"initialA","offset":0,"slot":"1","type":"t_uint256"},{"astId":30757,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"futureA","offset":0,"slot":"2","type":"t_uint256"},{"astId":30759,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"initialATime","offset":0,"slot":"3","type":"t_uint256"},{"astId":30761,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"futureATime","offset":0,"slot":"4","type":"t_uint256"},{"astId":30763,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"swapFee","offset":0,"slot":"5","type":"t_uint256"},{"astId":30765,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"adminFee","offset":0,"slot":"6","type":"t_uint256"},{"astId":30768,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"lpToken","offset":0,"slot":"7","type":"t_contract(LPToken)23179"},{"astId":30772,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"pooledTokens","offset":0,"slot":"8","type":"t_array(t_contract(IERC20)10812)dyn_storage"},{"astId":30775,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"tokenPrecisionMultipliers","offset":0,"slot":"9","type":"t_array(t_uint256)dyn_storage"},{"astId":30778,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"balances","offset":0,"slot":"10","type":"t_array(t_uint256)dyn_storage"},{"astId":30781,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"adminFees","offset":0,"slot":"11","type":"t_array(t_uint256)dyn_storage"},{"astId":30783,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"disabled","offset":0,"slot":"12","type":"t_bool"},{"astId":30785,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"removeTime","offset":0,"slot":"13","type":"t_uint256"}],"numberOfBytes":"448"},"t_struct(TokenConfig)29395_storage":{"encoding":"inplace","label":"struct TokenConfig","members":[{"astId":29380,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"representation","offset":0,"slot":"0","type":"t_address"},{"astId":29382,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"representationDecimals","offset":20,"slot":"0","type":"t_uint8"},{"astId":29384,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"adopted","offset":0,"slot":"1","type":"t_address"},{"astId":29386,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"adoptedDecimals","offset":20,"slot":"1","type":"t_uint8"},{"astId":29388,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"adoptedToLocalExternalPools","offset":0,"slot":"2","type":"t_address"},{"astId":29390,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"approval","offset":20,"slot":"2","type":"t_bool"},{"astId":29392,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"cap","offset":0,"slot":"3","type":"t_uint256"},{"astId":29394,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"custodied","offset":0,"slot":"4","type":"t_uint256"}],"numberOfBytes":"160"},"t_struct(TokenId)37728_storage":{"encoding":"inplace","label":"struct TokenId","members":[{"astId":37725,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"domain","offset":0,"slot":"0","type":"t_uint32"},{"astId":37727,"contract":"contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet","label":"id","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"events":{"RelayerAdded(address,address)":{"notice":"Emitted when a relayer is added or removed from allowlists"},"RelayerFeeVaultUpdated(address,address,address)":{"notice":"Emitted when the relayerFeeVault variable is updated"},"RelayerRemoved(address,address)":{"notice":"Emitted when a relayer is added or removed from allowlists"}},"kind":"user","methods":{"addRelayer(address)":{"notice":"Used to add approved relayer"},"removeRelayer(address)":{"notice":"Used to remove approved relayer"},"setRelayerFeeVault(address)":{"notice":"Updates the relayer fee router"}},"version":1}}},"contracts/core/connext/facets/RoutersFacet.sol":{"RoutersFacet":{"abi":[{"inputs":[],"name":"AssetLogic__handleIncomingAsset_feeOnTransferNotSupported","type":"error"},{"inputs":[],"name":"AssetLogic__handleIncomingAsset_nativeAssetNotSupported","type":"error"},{"inputs":[],"name":"AssetLogic__handleOutgoingAsset_notNative","type":"error"},{"inputs":[],"name":"BaseConnextFacet__getAdoptedAsset_assetNotFound","type":"error"},{"inputs":[],"name":"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonXCallReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__whenNotPaused_paused","type":"error"},{"inputs":[],"name":"RoutersFacet__acceptProposedRouterOwner_badCaller","type":"error"},{"inputs":[],"name":"RoutersFacet__acceptProposedRouterOwner_notElapsed","type":"error"},{"inputs":[],"name":"RoutersFacet__addLiquidityForRouter_amountIsZero","type":"error"},{"inputs":[],"name":"RoutersFacet__addLiquidityForRouter_badRouter","type":"error"},{"inputs":[],"name":"RoutersFacet__addLiquidityForRouter_capReached","type":"error"},{"inputs":[],"name":"RoutersFacet__addLiquidityForRouter_routerEmpty","type":"error"},{"inputs":[],"name":"RoutersFacet__approveRouterForPortal_alreadyApproved","type":"error"},{"inputs":[],"name":"RoutersFacet__approveRouterForPortal_notAdded","type":"error"},{"inputs":[],"name":"RoutersFacet__approveRouter_alreadyAdded","type":"error"},{"inputs":[],"name":"RoutersFacet__approveRouter_routerEmpty","type":"error"},{"inputs":[],"name":"RoutersFacet__initializeRouter_configNotEmpty","type":"error"},{"inputs":[],"name":"RoutersFacet__onlyRouterOwner_notRouterOwner","type":"error"},{"inputs":[],"name":"RoutersFacet__proposeRouterOwner_badRouter","type":"error"},{"inputs":[],"name":"RoutersFacet__proposeRouterOwner_notNewOwner","type":"error"},{"inputs":[],"name":"RoutersFacet__removeRouterLiquidityFor_notOwner","type":"error"},{"inputs":[],"name":"RoutersFacet__removeRouterLiquidity_amountIsZero","type":"error"},{"inputs":[],"name":"RoutersFacet__removeRouterLiquidity_insufficientFunds","type":"error"},{"inputs":[],"name":"RoutersFacet__removeRouterLiquidity_recipientEmpty","type":"error"},{"inputs":[],"name":"RoutersFacet__setLiquidityFeeNumerator_tooLarge","type":"error"},{"inputs":[],"name":"RoutersFacet__setLiquidityFeeNumerator_tooSmall","type":"error"},{"inputs":[],"name":"RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer","type":"error"},{"inputs":[],"name":"RoutersFacet__setRouterOwner_noChange","type":"error"},{"inputs":[],"name":"RoutersFacet__setRouterRecipient_notNewRecipient","type":"error"},{"inputs":[],"name":"RoutersFacet__unapproveRouterForPortal_notApproved","type":"error"},{"inputs":[],"name":"RoutersFacet__unapproveRouter_notAdded","type":"error"},{"inputs":[],"name":"RoutersFacet__unapproveRouter_routerEmpty","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFeeNumerator","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"LiquidityFeeNumeratorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxRoutersPerTransfer","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MaxRoutersPerTransferUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"RouterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"router","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"RouterApprovedForPortal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"}],"name":"RouterInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"},{"indexed":false,"internalType":"address","name":"local","type":"address"},{"indexed":false,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"RouterLiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"local","type":"address"},{"indexed":false,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"RouterLiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"},{"indexed":true,"internalType":"address","name":"prevOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"RouterOwnerAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"},{"indexed":true,"internalType":"address","name":"prevProposed","type":"address"},{"indexed":true,"internalType":"address","name":"newProposed","type":"address"}],"name":"RouterOwnerProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"},{"indexed":true,"internalType":"address","name":"prevRecipient","type":"address"},{"indexed":true,"internalType":"address","name":"newRecipient","type":"address"}],"name":"RouterRecipientSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"RouterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"router","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"RouterUnapprovedForPortal","type":"event"},{"inputs":[],"name":"LIQUIDITY_FEE_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"LIQUIDITY_FEE_NUMERATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"acceptProposedRouterOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_local","type":"address"}],"name":"addRouterLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_local","type":"address"},{"internalType":"address","name":"_router","type":"address"}],"name":"addRouterLiquidityFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"approveRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"approveRouterForPortal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"getProposedRouterOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"getProposedRouterOwnerTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"getRouterApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"getRouterApprovalForPortal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"getRouterOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"getRouterRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"initializeRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxRoutersPerTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_proposed","type":"address"}],"name":"proposeRouterOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address payable","name":"_to","type":"address"}],"name":"removeRouterLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"address","name":"_router","type":"address"}],"name":"removeRouterLiquidityFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_asset","type":"address"}],"name":"routerBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numerator","type":"uint256"}],"name":"setLiquidityFeeNumerator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxRouters","type":"uint256"}],"name":"setMaxRoutersPerTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"setRouterRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"unapproveRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"unapproveRouterForPortal","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"events":{"LiquidityFeeNumeratorUpdated(uint256,address)":{"params":{"caller":"- The account that called the function","liquidityFeeNumerator":"- The LIQUIDITY_FEE_NUMERATOR new value"}},"MaxRoutersPerTransferUpdated(uint256,address)":{"params":{"caller":"- The account that called the function","maxRoutersPerTransfer":"- The maxRoutersPerTransfer new value"}},"RouterAdded(address,address)":{"params":{"caller":"- The account that called the function","router":"- The address of the added router"}},"RouterApprovedForPortal(address,address)":{"params":{"caller":"- The account that called the function","router":"- The address of the approved router"}},"RouterInitialized(address)":{"details":"This does not confer permissions onto the router, only the configuration","params":{"router":"The router initialized"}},"RouterLiquidityAdded(address,address,bytes32,uint256,address)":{"params":{"amount":"- The amount of liquidity added","caller":"- The account that called the function","key":"- The hash of the canonical id and domain","local":"- The address of the token added (all liquidity held in local asset)","router":"- The address of the router the funds were credited to"}},"RouterLiquidityRemoved(address,address,address,bytes32,uint256,address)":{"params":{"amount":"- The amount of liquidity withdrawn","caller":"- The account that called the function","local":"- The address of the token withdrawn","router":"- The router you are removing liquidity from","to":"- The address the funds were withdrawn to"}},"RouterOwnerAccepted(address,address,address)":{"params":{"newOwner":"- The address of the new owner of the router","prevOwner":"- The address of the previous owner of the router","router":"- The address of the added router"}},"RouterOwnerProposed(address,address,address)":{"params":{"newProposed":"- The address of the new proposed","prevProposed":"- The address of the previous proposed","router":"- The address of the added router"}},"RouterRecipientSet(address,address,address)":{"params":{"newRecipient":"- The address of the new recipient of the router","prevRecipient":"- The address of the previous recipient of the router","router":"- The address of the added router"}},"RouterRemoved(address,address)":{"params":{"caller":"- The account that called the function","router":"- The address of the removed router"}},"RouterUnapprovedForPortal(address,address)":{"params":{"caller":"- The account that called the function","router":"- The address of the disapproved router"}}},"kind":"dev","methods":{"acceptProposedRouterOwner(address)":{"params":{"_router":"Router address to set recipient"}},"addRouterLiquidity(uint256,address)":{"details":"The liquidity will be held in the local asset, which is the representation if you are *not* on the canonical domain, and the canonical asset otherwise.","params":{"_amount":"- The amount of liquidity to add for the router","_local":"- The address of the asset you're adding liquidity for. If adding liquidity of the native asset, routers may use `address(0)` or the wrapped asset"}},"addRouterLiquidityFor(uint256,address,address)":{"details":"The liquidity will be held in the local asset, which is the representation if you are *not* on the canonical domain, and the canonical asset otherwise.","params":{"_amount":"- The amount of liquidity to add for the router","_local":"- The address of the asset you're adding liquidity for. If adding liquidity of the native asset, routers may use `address(0)` or the wrapped asset","_router":"The router you are adding liquidity on behalf of"}},"approveRouter(address)":{"params":{"_router":"Router address to setup"}},"approveRouterForPortal(address)":{"params":{"_router":"- The router address to approve"}},"getProposedRouterOwner(address)":{"details":"All routers must wait for the delay timeout before accepting a new owner","params":{"_router":"The relevant router address"}},"getProposedRouterOwnerTimestamp(address)":{"details":"All routers must wait for the delay timeout before accepting a new owner","params":{"_router":"The relevant router address"}},"getRouterApproval(address)":{"params":{"_router":"The relevant router address"}},"getRouterApprovalForPortal(address)":{"params":{"_router":"The relevant router address"}},"getRouterOwner(address)":{"params":{"_router":"The relevant router address"}},"getRouterRecipient(address)":{"details":"The recipient (if set) receives all funds when router liquidity is removed","params":{"_router":"The relevant router address"}},"initializeRouter(address,address)":{"details":"Does not set allowlisting permissions, only owner and recipient","params":{"_owner":"The owner (can change recipient, proposes new owners)","_recipient":"Where liquidity will be withdrawn to"}},"proposeRouterOwner(address,address)":{"details":"If routers burn their ownership, they can no longer update the recipient","params":{"_proposed":"Proposed owner Address to set to router","_router":"Router address to set recipient"}},"removeRouterLiquidity((uint32,bytes32),uint256,address)":{"details":"Using the `_canonical` information in the interface instead of the local asset to allow routers to remove liquidity even if the asset is delisted","params":{"_amount":"- The amount of liquidity to remove for the router","_canonical":"The canonical token information in plaintext","_to":"The address that will receive the liquidity being removed if no router recipient exists."}},"removeRouterLiquidityFor((uint32,bytes32),uint256,address,address)":{"details":"Using the `_canonical` information in the interface instead of the local asset to allow routers to remove liquidity even if the asset is delisted","params":{"_amount":"- The amount of liquidity to remove for the router native asset, routers may use `address(0)` or the wrapped asset","_canonical":"The canonical token information in plaintext","_router":"The address of the router","_to":"The address that will receive the liquidity being removed"}},"setLiquidityFeeNumerator(uint256)":{"details":"Admin can set LIQUIDITY_FEE_NUMERATOR variable, Liquidity fee should be less than 5%","params":{"_numerator":"new LIQUIDITY_FEE_NUMERATOR"}},"setMaxRoutersPerTransfer(uint256)":{"params":{"_newMaxRouters":"The new max amount of routers"}},"setRouterRecipient(address,address)":{"details":"Router should only be able to set this once otherwise if router key compromised, no problem is solved since attacker could just update recipient","params":{"_recipient":"Recipient Address to set to router","_router":"Router address to set recipient"}},"unapproveRouter(address)":{"params":{"_router":"Router address to remove"}},"unapproveRouterForPortal(address)":{"params":{"_router":"- The router address to remove approval"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50611fd3806100206000396000f3fe60806040526004361061014b5760003560e01c806382904716116100b6578063da3a892f1161006f578063da3a892f14610416578063e9160f3e14610436578063f259cd2714610475578063f72c504814610495578063fd5bd5fe146104b5578063ffaf3f1a146104d557600080fd5b806382904716146103275780638770e68214610347578063911b8ee2146103855780639bf6d875146103a5578063b214c901146103ba578063c6bf691d146103da57600080fd5b80632d3f9ef6116101085780632d3f9ef6146102585780633b688da61461026b57806341258b5c146102bf5780634b72c5da146102df57806354064594146102f4578063582c78d21461030757600080fd5b806304376ff4146101505780630951d6d81461017257806309935b8f1461019657806312d57170146101b65780631407093b146101ef57806322a3c00714610238575b600080fd5b34801561015c57600080fd5b5061017061016b366004611c8f565b6104f5565b005b34801561017e57600080fd5b506001545b6040519081526020015b60405180910390f35b3480156101a257600080fd5b506101706101b1366004611c8f565b6105f2565b3480156101c257600080fd5b506101836101d1366004611c8f565b6001600160a01b031660009081526015602052604090206003015490565b3480156101fb57600080fd5b5061022861020a366004611c8f565b6001600160a01b031660009081526015602052604090205460ff1690565b604051901515815260200161018d565b34801561024457600080fd5b50610170610253366004611cb3565b610752565b610170610266366004611cec565b6108d1565b34801561027757600080fd5b506102a7610286366004611c8f565b6001600160a01b039081166000908152601560205260409020600201541690565b6040516001600160a01b03909116815260200161018d565b3480156102cb57600080fd5b506101836102da366004611cb3565b61093a565b3480156102eb57600080fd5b50612710610183565b610170610302366004611d2e565b610967565b34801561031357600080fd5b50610170610322366004611d53565b6109cf565b34801561033357600080fd5b50610170610342366004611d53565b610ace565b34801561035357600080fd5b50610228610362366004611c8f565b6001600160a01b0316600090815260156020526040902054610100900460ff1690565b34801561039157600080fd5b506101706103a0366004611c8f565b610b99565b3480156103b157600080fd5b50600c54610183565b3480156103c657600080fd5b506101706103d5366004611cb3565b610d0e565b3480156103e657600080fd5b506102a76103f5366004611c8f565b6001600160a01b039081166000908152601560205260409020600101541690565b34801561042257600080fd5b50610170610431366004611c8f565b610e42565b34801561044257600080fd5b506102a7610451366004611c8f565b6001600160a01b039081166000908152601560205260409020546201000090041690565b34801561048157600080fd5b50610170610490366004611c8f565b610fc5565b3480156104a157600080fd5b506101706104b0366004611ddc565b6110e2565b3480156104c157600080fd5b506101706104d0366004611e12565b611142565b3480156104e157600080fd5b506101706104f0366004611cb3565b61120c565b336104fe61127f565b6001600160a01b031614158015610539575060033360009081526014602052604090205460ff16600381111561053657610536611e64565b14155b1561055757604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b038116600090815260156020526040902054610100900460ff1661059557604051635d3abc4360e11b815260040160405180910390fd5b6001600160a01b038116600081815260156020908152604091829020805461ff0019169055815192835233908301527f903522f09b29fa2102f5d8d8b181ac8edb4cfaf5d705076e4ab95117f6bb02ad910160405180910390a150565b6001600160a01b03808216600090815260156020908152604091829020825160c081018452815460ff8082161515835261010082041615159382019390935262010000909204841692820192909252600182015483166060820152600282015490921660808301526003015460a0820181905262093a80906106749042611e90565b11610692576040516376b2ad0760e01b815260040160405180910390fd5b60808101516000906001600160a01b0316156106b25781608001516106b8565b81604001515b9050336001600160a01b038216146106e357604051633253a7bd60e01b815260040160405180910390fd5b6106f683836080015184604001516112ad565b60808201516001600160a01b031615610733576001600160a01b038316600090815260156020526040902060020180546001600160a01b03191690555b50506001600160a01b0316600090815260156020526040812060030155565b6001600160a01b038083166000908152601560205260409020548391620100009091041633146107955760405163407c584960e01b815260040160405180910390fd5b6001600160a01b03808416600090815260156020908152604091829020825160c081018452815460ff808216151583526101008204161515938201939093526201000090920484169282018390526001810154841660608301526002810154841660808301526003015460a0820152918416900361082657604051630e49614b60e31b815260040160405180910390fd5b826001600160a01b031681608001516001600160a01b03160361085c57604051631b2163f160e31b815260040160405180910390fd5b6001600160a01b038481166000818152601560205260408082206002810180546001600160a01b031916898716908117909155426003909201919091556080860151915190949190911692917fee0158b57adc03901d8b16c48cd10c33ca1283ee96c6e0d30f817ceba74dc4a191a450505050565b601654600119016108f557604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561092557604051633ee5b89360e01b815260040160405180910390fd5b610930838383611348565b5050600160165550565b6001600160a01b038083166000908152600a60209081526040808320938516835292905220545b92915050565b6016546001190161098b57604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff16156109bb57604051633ee5b89360e01b815260040160405180910390fd5b6109c6828233611348565b50506001601655565b336109d861127f565b6001600160a01b031614158015610a13575060033360009081526014602052604090205460ff166003811115610a1057610a10611e64565b14155b15610a3157604051637b32c26b60e01b815260040160405180910390fd5b6127106064610a4182605f611ea3565b610a4b9190611eba565b821015610a6b5760405163b74bfc8360e01b815260040160405180910390fd5b80821115610a8c57604051637347083360e11b815260040160405180910390fd5b6001829055604080518381523360208201527feb6222a0b32216f861511e9aba88faa9549b749c2e0ad47df4e288565de5ceae91015b60405180910390a15050565b33610ad761127f565b6001600160a01b031614158015610b12575060033360009081526014602052604090205460ff166003811115610b0f57610b0f611e64565b14155b15610b3057604051637b32c26b60e01b815260040160405180910390fd5b801580610b3e5750600c5481145b15610b5c57604051630d9f9fad60e01b815260040160405180910390fd5b604080518281523360208201527fa7fe33308fb33ae6f3259e3c7c954ae3d6cd7f428cd17f653413c2cdc691666d910160405180910390a1600c55565b33610ba261127f565b6001600160a01b031614158015610bdd575060013360009081526014602052604090205460ff166003811115610bda57610bda611e64565b14155b15610bfb576040516360237f6b60e11b815260040160405180910390fd5b6001600160a01b038116610c225760405163085dd61360e11b815260040160405180910390fd5b6001600160a01b03808216600090815260156020908152604091829020825160c081018452815460ff808216151580845261010083049091161515948301949094526201000090048516938101939093526001810154841660608401526002810154909316608083015260039092015460a082015290610cb557604051632b31895f60e21b815260040160405180910390fd5b6001600160a01b038216600081815260156020908152604091829020805461ffff1916905590513381527fbee3e974bb6a6f44f20096ede047c191eef60322e65e4ee4bd3392230a8716d5910160405180910390a25050565b33600090815260156020908152604091829020825160c081018452815460ff80821615158352610100820416151593820193909352620100009092046001600160a01b0390811693830184905260018201548116606084015260028201541660808301526003015460a082015290151580610d95575060608101516001600160a01b031615155b80610dac575060808101516001600160a01b031615155b80610dbb575060008160a00151115b15610dd957604051630efdad3160e11b815260040160405180910390fd5b6001600160a01b038316610deb573392505b610df7338460006112ad565b6001600160a01b03821615610e1257610e1233836000611539565b60405133907f2622745e83f97f2d871ef785497c1eeba6f9bb94c7dd486cf28228e814d929e490600090a2505050565b33610e4b61127f565b6001600160a01b031614158015610e86575060033360009081526014602052604090205460ff166003811115610e8357610e83611e64565b14155b15610ea457604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03808216600090815260156020908152604091829020825160c081018452815460ff808216158015808552610100840490921615159584019590955262010000909104861694820194909452600182015485166060820152600282015490941660808501526003015460a084015290610f295750610f276115cd565b155b15610f47576040516375befccb60e01b815260040160405180910390fd5b806020015115610f6a5760405163c896c2d960e01b815260040160405180910390fd5b6001600160a01b038216600081815260156020908152604091829020805461ff001916610100179055815192835233908301527fc428fad4df337e27be8199c35a79ca103e8d00538a69b0f9701fb2bdf7d6c84c9101610ac2565b33610fce61127f565b6001600160a01b031614158015611009575060013360009081526014602052604090205460ff16600381111561100657611006611e64565b14155b15611027576040516360237f6b60e11b815260040160405180910390fd5b6001600160a01b03811661104e5760405163330ef51f60e01b815260040160405180910390fd5b6001600160a01b03811660009081526015602052604090205460ff16156110885760405163916e73bd60e01b815260040160405180910390fd5b6001600160a01b038116600081815260156020908152604091829020805460ff1916600117905590513381527fbc68405e644da2aaf25623ce2199da82c6dfd2e1de102b400eba6a091704d4f4910160405180910390a250565b6016546001190161110657604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561113657604051633ee5b89360e01b815260040160405180910390fd5b610930828483336115f4565b6016546001190161116657604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561119657604051633ee5b89360e01b815260040160405180910390fd5b6001600160a01b038082166000908152601560205260408120546201000090049091169081156111c657816111c8565b825b9050336001600160a01b038216146111f35760405163f3dc2d1960e01b815260040160405180910390fd5b6111ff858786866115f4565b5050600160165550505050565b6001600160a01b0380831660009081526015602052604090205483916201000090910416331461124f5760405163407c584960e01b815260040160405180910390fd5b6001600160a01b0380841660009081526015602052604090206001015461127a918591859116611539565b505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b816001600160a01b0316816001600160a01b0316036112df576040516309a3ec2160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260156020526040808220805462010000600160b01b031916620100008887169081029190911790915590519093851692917fd73892e8827a6025d74a01fca72a8e0d9e2c04080272e728f8861410c7d3c2d191a4505050565b6001600160a01b03811661136f576040516339773cbf60e21b815260040160405180910390fd5b8260000361139057604051632a24141960e01b815260040160405180910390fd5b6001600160a01b0382166000908152600660209081526040918290208251808401909352805463ffffffff16808452600190910154918301919091521580156113db57506020810151155b156113fb5760045463ffffffff1681526001600160a01b03831660208201525b600061140f826020015183600001516117a3565b600081815260076020526040902060020154909150600160a01b900460ff1661144b5760405163a13f958f60e01b815260040160405180910390fd5b6114536115cd565b15801561147957506001600160a01b03831660009081526015602052604090205460ff16155b1561149757604051631464c65f60e31b815260040160405180910390fd5b6114a184866117e5565b6001600160a01b038084166000908152600a60209081526040808320938816835292905290812080548792906114d8908490611edc565b9091555050604080516001600160a01b03868116825260208201849052918101879052336060820152908416907fcc3100122c1752fe0f6bfa5503175bc53eb00b5f2d774e81efedcd2b10a6d24b9060800160405180910390a25050505050565b816001600160a01b0316816001600160a01b03160361156b57604051631b0043f560e31b815260040160405180910390fd5b6001600160a01b0383811660008181526015602052604080822060010180546001600160a01b03191687861690811790915590519093851692917f31f32ebf07b0ac7fe173f7b7f3f943020d9bdc6dbfbdcdae01bd45ea78d953d791a4505050565b6000806115d861127f565b6001600160a01b031614806115ef575060125460ff165b905090565b6001600160a01b0381811660009081526015602052604090206001015416801561161e5780611620565b825b90506001600160a01b0381166116495760405163516101e760e11b815260040160405180910390fd5b8460000361166a5760405163606ab7a160e11b815260040160405180910390fd5b6004548451602086015163ffffffff8281169316929092149160009161169091906117a3565b90506000826116b6576000828152600760205260409020546001600160a01b03166116bc565b60208701515b6001600160a01b038087166000908152600a60209081526040808320938516835292905220549091508881101561170657604051630a1e6d4d60e01b815260040160405180910390fd5b6001600160a01b038087166000908152600a60209081526040808320938616835292905220898203905561173b82868b611936565b604080516001600160a01b0387811682528481166020830152918101859052606081018b9052336080820152908716907ffacf3161e9675ca1ca84a16d238bc838c7e2084c302cf411d9da7ac0391f64869060a00160405180910390a2505050505050505050565b600082826040516020016117c792919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b806000036117f1575050565b6001600160a01b03821661181857604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611861573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118859190611eef565b905061189c6001600160a01b038316333086611975565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa1580156118e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119089190611eef565b6119129190611e90565b1461193057604051630e40773560e21b815260040160405180910390fd5b50505050565b8060000361194357505050565b6001600160a01b03831661196a57604051633a48ca7b60e11b815260040160405180910390fd5b61127a8383836119e0565b6040516001600160a01b03808516602483015283166044820152606481018290526119309085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611a10565b6040516001600160a01b03831660248201526044810182905261127a90849063a9059cbb60e01b906064016119a9565b6000611a65826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611ae79092919063ffffffff16565b80519091501561127a5780806020019051810190611a839190611f08565b61127a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084015b60405180910390fd5b6060611af68484600085611afe565b949350505050565b606082471015611b5f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611ade565b600080866001600160a01b03168587604051611b7b9190611f4e565b60006040518083038185875af1925050503d8060008114611bb8576040519150601f19603f3d011682016040523d82523d6000602084013e611bbd565b606091505b5091509150611bce87838387611bd9565b979650505050505050565b60608315611c48578251600003611c41576001600160a01b0385163b611c415760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611ade565b5081611af6565b611af68383815115611c5d5781518083602001fd5b8060405162461bcd60e51b8152600401611ade9190611f6a565b6001600160a01b0381168114611c8c57600080fd5b50565b600060208284031215611ca157600080fd5b8135611cac81611c77565b9392505050565b60008060408385031215611cc657600080fd5b8235611cd181611c77565b91506020830135611ce181611c77565b809150509250929050565b600080600060608486031215611d0157600080fd5b833592506020840135611d1381611c77565b91506040840135611d2381611c77565b809150509250925092565b60008060408385031215611d4157600080fd5b823591506020830135611ce181611c77565b600060208284031215611d6557600080fd5b5035919050565b600060408284031215611d7e57600080fd5b6040516040810181811067ffffffffffffffff82111715611daf57634e487b7160e01b600052604160045260246000fd5b604052905080823563ffffffff81168114611dc957600080fd5b8152602092830135920191909152919050565b600080600060808486031215611df157600080fd5b611dfb8585611d6c565b9250604084013591506060840135611d2381611c77565b60008060008060a08587031215611e2857600080fd5b611e328686611d6c565b9350604085013592506060850135611e4981611c77565b91506080850135611e5981611c77565b939692955090935050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561096157610961611e7a565b808202811582820484141761096157610961611e7a565b600082611ed757634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561096157610961611e7a565b600060208284031215611f0157600080fd5b5051919050565b600060208284031215611f1a57600080fd5b81518015158114611cac57600080fd5b60005b83811015611f45578181015183820152602001611f2d565b50506000910152565b60008251611f60818460208701611f2a565b9190910192915050565b6020815260008251806020840152611f89816040850160208701611f2a565b601f01601f1916919091016040019291505056fea2646970667358221220873f6c5e48aec71192a2a188478ea1be49359b708a88acea8d0d9d0b04a20b1f64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD3 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x14B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x82904716 GT PUSH2 0xB6 JUMPI DUP1 PUSH4 0xDA3A892F GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xDA3A892F EQ PUSH2 0x416 JUMPI DUP1 PUSH4 0xE9160F3E EQ PUSH2 0x436 JUMPI DUP1 PUSH4 0xF259CD27 EQ PUSH2 0x475 JUMPI DUP1 PUSH4 0xF72C5048 EQ PUSH2 0x495 JUMPI DUP1 PUSH4 0xFD5BD5FE EQ PUSH2 0x4B5 JUMPI DUP1 PUSH4 0xFFAF3F1A EQ PUSH2 0x4D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x82904716 EQ PUSH2 0x327 JUMPI DUP1 PUSH4 0x8770E682 EQ PUSH2 0x347 JUMPI DUP1 PUSH4 0x911B8EE2 EQ PUSH2 0x385 JUMPI DUP1 PUSH4 0x9BF6D875 EQ PUSH2 0x3A5 JUMPI DUP1 PUSH4 0xB214C901 EQ PUSH2 0x3BA JUMPI DUP1 PUSH4 0xC6BF691D EQ PUSH2 0x3DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2D3F9EF6 GT PUSH2 0x108 JUMPI DUP1 PUSH4 0x2D3F9EF6 EQ PUSH2 0x258 JUMPI DUP1 PUSH4 0x3B688DA6 EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0x41258B5C EQ PUSH2 0x2BF JUMPI DUP1 PUSH4 0x4B72C5DA EQ PUSH2 0x2DF JUMPI DUP1 PUSH4 0x54064594 EQ PUSH2 0x2F4 JUMPI DUP1 PUSH4 0x582C78D2 EQ PUSH2 0x307 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4376FF4 EQ PUSH2 0x150 JUMPI DUP1 PUSH4 0x951D6D8 EQ PUSH2 0x172 JUMPI DUP1 PUSH4 0x9935B8F EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0x12D57170 EQ PUSH2 0x1B6 JUMPI DUP1 PUSH4 0x1407093B EQ PUSH2 0x1EF JUMPI DUP1 PUSH4 0x22A3C007 EQ PUSH2 0x238 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x16B CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH2 0x4F5 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x17E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x1B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH2 0x5F2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x183 PUSH2 0x1D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x228 PUSH2 0x20A CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x18D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x244 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x253 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CB3 JUMP JUMPDEST PUSH2 0x752 JUMP JUMPDEST PUSH2 0x170 PUSH2 0x266 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CEC JUMP JUMPDEST PUSH2 0x8D1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A7 PUSH2 0x286 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x18D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x183 PUSH2 0x2DA CALLDATASIZE PUSH1 0x4 PUSH2 0x1CB3 JUMP JUMPDEST PUSH2 0x93A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 PUSH2 0x183 JUMP JUMPDEST PUSH2 0x170 PUSH2 0x302 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D2E JUMP JUMPDEST PUSH2 0x967 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x322 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D53 JUMP JUMPDEST PUSH2 0x9CF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x333 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x342 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D53 JUMP JUMPDEST PUSH2 0xACE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x353 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x228 PUSH2 0x362 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x3A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH2 0xB99 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xC SLOAD PUSH2 0x183 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x3D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CB3 JUMP JUMPDEST PUSH2 0xD0E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A7 PUSH2 0x3F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD AND SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x422 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x431 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH2 0xE42 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x442 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A7 PUSH2 0x451 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH3 0x10000 SWAP1 DIV AND SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x481 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x490 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH2 0xFC5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x4B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DDC JUMP JUMPDEST PUSH2 0x10E2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x4D0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E12 JUMP JUMPDEST PUSH2 0x1142 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x4F0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CB3 JUMP JUMPDEST PUSH2 0x120C JUMP JUMPDEST CALLER PUSH2 0x4FE PUSH2 0x127F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x539 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x536 JUMPI PUSH2 0x536 PUSH2 0x1E64 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x557 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x595 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5D3ABC43 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE CALLER SWAP1 DUP4 ADD MSTORE PUSH32 0x903522F09B29FA2102F5D8D8B181AC8EDB4CFAF5D705076E4AB95117F6BB02AD SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO ISZERO DUP4 MSTORE PUSH2 0x100 DUP3 DIV AND ISZERO ISZERO SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH3 0x10000 SWAP1 SWAP3 DIV DUP5 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 DUP3 ADD SLOAD DUP4 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP1 SWAP3 AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x3 ADD SLOAD PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH3 0x93A80 SWAP1 PUSH2 0x674 SWAP1 TIMESTAMP PUSH2 0x1E90 JUMP JUMPDEST GT PUSH2 0x692 JUMPI PUSH1 0x40 MLOAD PUSH4 0x76B2AD07 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x6B2 JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0x6B8 JUMP JUMPDEST DUP2 PUSH1 0x40 ADD MLOAD JUMPDEST SWAP1 POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ PUSH2 0x6E3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3253A7BD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6F6 DUP4 DUP4 PUSH1 0x80 ADD MLOAD DUP5 PUSH1 0x40 ADD MLOAD PUSH2 0x12AD JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x733 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 PUSH3 0x10000 SWAP1 SWAP2 DIV AND CALLER EQ PUSH2 0x795 JUMPI PUSH1 0x40 MLOAD PUSH4 0x407C5849 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO ISZERO DUP4 MSTORE PUSH2 0x100 DUP3 DIV AND ISZERO ISZERO SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH3 0x10000 SWAP1 SWAP3 DIV DUP5 AND SWAP3 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 DUP2 ADD SLOAD DUP5 AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x2 DUP2 ADD SLOAD DUP5 AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE SWAP2 DUP5 AND SWAP1 SUB PUSH2 0x826 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE49614B PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x85C JUMPI PUSH1 0x40 MLOAD PUSH4 0x1B2163F1 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 PUSH1 0x2 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP10 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE TIMESTAMP PUSH1 0x3 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x80 DUP7 ADD MLOAD SWAP2 MLOAD SWAP1 SWAP5 SWAP2 SWAP1 SWAP2 AND SWAP3 SWAP2 PUSH32 0xEE0158B57ADC03901D8B16C48CD10C33CA1283EE96C6E0D30F817CEBA74DC4A1 SWAP2 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 NOT ADD PUSH2 0x8F5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x925 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x930 DUP4 DUP4 DUP4 PUSH2 0x1348 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x16 SSTORE POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 NOT ADD PUSH2 0x98B JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x9BB JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x9C6 DUP3 DUP3 CALLER PUSH2 0x1348 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x16 SSTORE JUMP JUMPDEST CALLER PUSH2 0x9D8 PUSH2 0x127F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0xA13 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xA10 JUMPI PUSH2 0xA10 PUSH2 0x1E64 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0xA31 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2710 PUSH1 0x64 PUSH2 0xA41 DUP3 PUSH1 0x5F PUSH2 0x1EA3 JUMP JUMPDEST PUSH2 0xA4B SWAP2 SWAP1 PUSH2 0x1EBA JUMP JUMPDEST DUP3 LT ISZERO PUSH2 0xA6B JUMPI PUSH1 0x40 MLOAD PUSH4 0xB74BFC83 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xA8C JUMPI PUSH1 0x40 MLOAD PUSH4 0x73470833 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xEB6222A0B32216F861511E9ABA88FAA9549B749C2E0AD47DF4E288565DE5CEAE SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH2 0xAD7 PUSH2 0x127F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0xB12 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xB0F JUMPI PUSH2 0xB0F PUSH2 0x1E64 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0xB30 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 ISZERO DUP1 PUSH2 0xB3E JUMPI POP PUSH1 0xC SLOAD DUP2 EQ JUMPDEST ISZERO PUSH2 0xB5C JUMPI PUSH1 0x40 MLOAD PUSH4 0xD9F9FAD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xA7FE33308FB33AE6F3259E3C7C954AE3D6CD7F428CD17F653413C2CDC691666D SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0xC SSTORE JUMP JUMPDEST CALLER PUSH2 0xBA2 PUSH2 0x127F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0xBDD JUMPI POP PUSH1 0x1 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xBDA JUMPI PUSH2 0xBDA PUSH2 0x1E64 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0xBFB JUMPI PUSH1 0x40 MLOAD PUSH4 0x60237F6B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xC22 JUMPI PUSH1 0x40 MLOAD PUSH4 0x85DD613 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO ISZERO DUP1 DUP5 MSTORE PUSH2 0x100 DUP4 DIV SWAP1 SWAP2 AND ISZERO ISZERO SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH3 0x10000 SWAP1 DIV DUP6 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x1 DUP2 ADD SLOAD DUP5 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x2 DUP2 ADD SLOAD SWAP1 SWAP4 AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x3 SWAP1 SWAP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 PUSH2 0xCB5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2B31895F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xFFFF NOT AND SWAP1 SSTORE SWAP1 MLOAD CALLER DUP2 MSTORE PUSH32 0xBEE3E974BB6A6F44F20096EDE047C191EEF60322E65E4EE4BD3392230A8716D5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO ISZERO DUP4 MSTORE PUSH2 0x100 DUP3 DIV AND ISZERO ISZERO SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH3 0x10000 SWAP1 SWAP3 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 DUP4 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 DUP3 ADD SLOAD DUP2 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x2 DUP3 ADD SLOAD AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 ISZERO ISZERO DUP1 PUSH2 0xD95 JUMPI POP PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO ISZERO JUMPDEST DUP1 PUSH2 0xDAC JUMPI POP PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO ISZERO JUMPDEST DUP1 PUSH2 0xDBB JUMPI POP PUSH1 0x0 DUP2 PUSH1 0xA0 ADD MLOAD GT JUMPDEST ISZERO PUSH2 0xDD9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEFDAD31 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xDEB JUMPI CALLER SWAP3 POP JUMPDEST PUSH2 0xDF7 CALLER DUP5 PUSH1 0x0 PUSH2 0x12AD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0xE12 JUMPI PUSH2 0xE12 CALLER DUP4 PUSH1 0x0 PUSH2 0x1539 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH32 0x2622745E83F97F2D871EF785497C1EEBA6F9BB94C7DD486CF28228E814D929E4 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH2 0xE4B PUSH2 0x127F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0xE86 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xE83 JUMPI PUSH2 0xE83 PUSH2 0x1E64 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0xEA4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO DUP1 ISZERO DUP1 DUP6 MSTORE PUSH2 0x100 DUP5 DIV SWAP1 SWAP3 AND ISZERO ISZERO SWAP6 DUP5 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH3 0x10000 SWAP1 SWAP2 DIV DUP7 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x1 DUP3 ADD SLOAD DUP6 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP1 SWAP5 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0x3 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE SWAP1 PUSH2 0xF29 JUMPI POP PUSH2 0xF27 PUSH2 0x15CD JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0xF47 JUMPI PUSH1 0x40 MLOAD PUSH4 0x75BEFCCB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0xF6A JUMPI PUSH1 0x40 MLOAD PUSH4 0xC896C2D9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE CALLER SWAP1 DUP4 ADD MSTORE PUSH32 0xC428FAD4DF337E27BE8199C35A79CA103E8D00538A69B0F9701FB2BDF7D6C84C SWAP2 ADD PUSH2 0xAC2 JUMP JUMPDEST CALLER PUSH2 0xFCE PUSH2 0x127F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x1009 JUMPI POP PUSH1 0x1 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1006 JUMPI PUSH2 0x1006 PUSH2 0x1E64 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x1027 JUMPI PUSH1 0x40 MLOAD PUSH4 0x60237F6B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x104E JUMPI PUSH1 0x40 MLOAD PUSH4 0x330EF51F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1088 JUMPI PUSH1 0x40 MLOAD PUSH4 0x916E73BD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD CALLER DUP2 MSTORE PUSH32 0xBC68405E644DA2AAF25623CE2199DA82C6DFD2E1DE102B400EBA6A091704D4F4 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 NOT ADD PUSH2 0x1106 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x1136 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x930 DUP3 DUP5 DUP4 CALLER PUSH2 0x15F4 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 NOT ADD PUSH2 0x1166 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x1196 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH3 0x10000 SWAP1 DIV SWAP1 SWAP2 AND SWAP1 DUP2 ISZERO PUSH2 0x11C6 JUMPI DUP2 PUSH2 0x11C8 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ PUSH2 0x11F3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF3DC2D19 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x11FF DUP6 DUP8 DUP7 DUP7 PUSH2 0x15F4 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x16 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 PUSH3 0x10000 SWAP1 SWAP2 DIV AND CALLER EQ PUSH2 0x124F JUMPI PUSH1 0x40 MLOAD PUSH4 0x407C5849 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0x127A SWAP2 DUP6 SWAP2 DUP6 SWAP2 AND PUSH2 0x1539 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x12DF JUMPI PUSH1 0x40 MLOAD PUSH4 0x9A3EC21 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH3 0x10000 PUSH1 0x1 PUSH1 0xB0 SHL SUB NOT AND PUSH3 0x10000 DUP9 DUP8 AND SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 SWAP4 DUP6 AND SWAP3 SWAP2 PUSH32 0xD73892E8827A6025D74A01FCA72A8E0D9E2C04080272E728F8861410C7D3C2D1 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x136F JUMPI PUSH1 0x40 MLOAD PUSH4 0x39773CBF PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x0 SUB PUSH2 0x1390 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2A241419 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD PUSH4 0xFFFFFFFF AND DUP1 DUP5 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ISZERO DUP1 ISZERO PUSH2 0x13DB JUMPI POP PUSH1 0x20 DUP2 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x13FB JUMPI PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP3 ADD MSTORE JUMPDEST PUSH1 0x0 PUSH2 0x140F DUP3 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0x0 ADD MLOAD PUSH2 0x17A3 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x144B JUMPI PUSH1 0x40 MLOAD PUSH4 0xA13F958F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1453 PUSH2 0x15CD JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x1479 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x1497 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1464C65F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x14A1 DUP5 DUP7 PUSH2 0x17E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP8 SWAP3 SWAP1 PUSH2 0x14D8 SWAP1 DUP5 SWAP1 PUSH2 0x1EDC JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP5 SWAP1 MSTORE SWAP2 DUP2 ADD DUP8 SWAP1 MSTORE CALLER PUSH1 0x60 DUP3 ADD MSTORE SWAP1 DUP5 AND SWAP1 PUSH32 0xCC3100122C1752FE0F6BFA5503175BC53EB00B5F2D774E81EFEDCD2B10A6D24B SWAP1 PUSH1 0x80 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x156B JUMPI PUSH1 0x40 MLOAD PUSH4 0x1B0043F5 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP8 DUP7 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 SWAP4 DUP6 AND SWAP3 SWAP2 PUSH32 0x31F32EBF07B0AC7FE173F7B7F3F943020D9BDC6DBFBDCDAE01BD45EA78D953D7 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x15D8 PUSH2 0x127F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x15EF JUMPI POP PUSH1 0x12 SLOAD PUSH1 0xFF AND JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD AND DUP1 ISZERO PUSH2 0x161E JUMPI DUP1 PUSH2 0x1620 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1649 JUMPI PUSH1 0x40 MLOAD PUSH4 0x516101E7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 PUSH1 0x0 SUB PUSH2 0x166A JUMPI PUSH1 0x40 MLOAD PUSH4 0x606AB7A1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD DUP5 MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH4 0xFFFFFFFF DUP3 DUP2 AND SWAP4 AND SWAP3 SWAP1 SWAP3 EQ SWAP2 PUSH1 0x0 SWAP2 PUSH2 0x1690 SWAP2 SWAP1 PUSH2 0x17A3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x16B6 JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x16BC JUMP JUMPDEST PUSH1 0x20 DUP8 ADD MLOAD JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP2 POP DUP9 DUP2 LT ISZERO PUSH2 0x1706 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA1E6D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP10 DUP3 SUB SWAP1 SSTORE PUSH2 0x173B DUP3 DUP7 DUP12 PUSH2 0x1936 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND DUP3 MSTORE DUP5 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP2 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP12 SWAP1 MSTORE CALLER PUSH1 0x80 DUP3 ADD MSTORE SWAP1 DUP8 AND SWAP1 PUSH32 0xFACF3161E9675CA1CA84A16D238BC838C7E2084C302CF411D9DA7AC0391F6486 SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x17C7 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH4 0xFFFFFFFF AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x17F1 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1818 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2A38B133 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP3 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1861 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1885 SWAP2 SWAP1 PUSH2 0x1EEF JUMP JUMPDEST SWAP1 POP PUSH2 0x189C PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP7 PUSH2 0x1975 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP4 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18E4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1908 SWAP2 SWAP1 PUSH2 0x1EEF JUMP JUMPDEST PUSH2 0x1912 SWAP2 SWAP1 PUSH2 0x1E90 JUMP JUMPDEST EQ PUSH2 0x1930 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE407735 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x1943 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x196A JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A48CA7B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x127A DUP4 DUP4 DUP4 PUSH2 0x19E0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1930 SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x1A10 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x127A SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A65 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1AE7 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x127A JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1A83 SWAP2 SWAP1 PUSH2 0x1F08 JUMP JUMPDEST PUSH2 0x127A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH2 0x1AF6 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x1AFE JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x1B5F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1ADE JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1B7B SWAP2 SWAP1 PUSH2 0x1F4E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1BB8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1BBD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1BCE DUP8 DUP4 DUP4 DUP8 PUSH2 0x1BD9 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1C48 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x1C41 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x1C41 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1ADE JUMP JUMPDEST POP DUP2 PUSH2 0x1AF6 JUMP JUMPDEST PUSH2 0x1AF6 DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x1C5D JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1ADE SWAP2 SWAP1 PUSH2 0x1F6A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1C8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1CA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1CAC DUP2 PUSH2 0x1C77 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1CC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1CD1 DUP2 PUSH2 0x1C77 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1CE1 DUP2 PUSH2 0x1C77 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1D01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1D13 DUP2 PUSH2 0x1C77 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x1D23 DUP2 PUSH2 0x1C77 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1CE1 DUP2 PUSH2 0x1C77 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1DAF JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 POP DUP1 DUP3 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1DC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD CALLDATALOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1DF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1DFB DUP6 DUP6 PUSH2 0x1D6C JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP5 ADD CALLDATALOAD PUSH2 0x1D23 DUP2 PUSH2 0x1C77 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1E28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E32 DUP7 DUP7 PUSH2 0x1D6C JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x1E49 DUP2 PUSH2 0x1C77 JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP6 ADD CALLDATALOAD PUSH2 0x1E59 DUP2 PUSH2 0x1C77 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x961 JUMPI PUSH2 0x961 PUSH2 0x1E7A JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x961 JUMPI PUSH2 0x961 PUSH2 0x1E7A JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1ED7 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x961 JUMPI PUSH2 0x961 PUSH2 0x1E7A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1CAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1F45 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F2D JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1F60 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1F2A JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1F89 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x1F2A JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP8 EXTCODEHASH PUSH13 0x5E48AEC71192A2A188478EA1BE 0x49 CALLDATALOAD SWAP12 PUSH17 0x8A88ACEA8D0D9D0B04A20B1F64736F6C63 NUMBER STOP ADDMOD GT STOP CALLER ","sourceMap":"1329:24379:76:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@LIQUIDITY_FEE_DENOMINATOR_18277":{"entryPoint":null,"id":18277,"parameterSlots":0,"returnSlots":1},"@LIQUIDITY_FEE_NUMERATOR_18268":{"entryPoint":null,"id":18268,"parameterSlots":0,"returnSlots":1},"@_addLiquidityForRouter_19221":{"entryPoint":4936,"id":19221,"parameterSlots":3,"returnSlots":0},"@_callOptionalReturn_11153":{"entryPoint":6672,"id":11153,"parameterSlots":2,"returnSlots":0},"@_isRouterAllowlistRemoved_13932":{"entryPoint":5581,"id":13932,"parameterSlots":0,"returnSlots":1},"@_removeLiquidityForRouter_19350":{"entryPoint":5620,"id":19350,"parameterSlots":4,"returnSlots":0},"@_revert_11483":{"entryPoint":null,"id":11483,"parameterSlots":2,"returnSlots":0},"@_setRouterOwner_19096":{"entryPoint":4781,"id":19096,"parameterSlots":3,"returnSlots":0},"@_setRouterRecipient_19063":{"entryPoint":5433,"id":19063,"parameterSlots":3,"returnSlots":0},"@acceptProposedRouterOwner_18815":{"entryPoint":1522,"id":18815,"parameterSlots":1,"returnSlots":0},"@addRouterLiquidityFor_18933":{"entryPoint":2257,"id":18933,"parameterSlots":3,"returnSlots":0},"@addRouterLiquidity_18953":{"entryPoint":2407,"id":18953,"parameterSlots":2,"returnSlots":0},"@addressToBytes32_50168":{"entryPoint":null,"id":50168,"parameterSlots":1,"returnSlots":1},"@approveRouterForPortal_18617":{"entryPoint":3650,"id":18617,"parameterSlots":1,"returnSlots":0},"@approveRouter_18436":{"entryPoint":4037,"id":18436,"parameterSlots":1,"returnSlots":0},"@bytes32ToAddress_50187":{"entryPoint":null,"id":50187,"parameterSlots":1,"returnSlots":1},"@calculateCanonicalHash_28598":{"entryPoint":6051,"id":28598,"parameterSlots":2,"returnSlots":1},"@contractOwner_29645":{"entryPoint":4735,"id":29645,"parameterSlots":0,"returnSlots":1},"@diamondStorage_29603":{"entryPoint":null,"id":29603,"parameterSlots":0,"returnSlots":1},"@functionCallWithValue_11308":{"entryPoint":6910,"id":11308,"parameterSlots":4,"returnSlots":1},"@functionCall_11244":{"entryPoint":6887,"id":11244,"parameterSlots":3,"returnSlots":1},"@getProposedRouterOwnerTimestamp_18352":{"entryPoint":null,"id":18352,"parameterSlots":1,"returnSlots":1},"@getProposedRouterOwner_18337":{"entryPoint":null,"id":18337,"parameterSlots":1,"returnSlots":1},"@getRouterApprovalForPortal_18393":{"entryPoint":null,"id":18393,"parameterSlots":1,"returnSlots":1},"@getRouterApproval_18292":{"entryPoint":null,"id":18292,"parameterSlots":1,"returnSlots":1},"@getRouterOwner_18322":{"entryPoint":null,"id":18322,"parameterSlots":1,"returnSlots":1},"@getRouterRecipient_18307":{"entryPoint":null,"id":18307,"parameterSlots":1,"returnSlots":1},"@handleIncomingAsset_27772":{"entryPoint":6117,"id":27772,"parameterSlots":2,"returnSlots":0},"@handleOutgoingAsset_27809":{"entryPoint":6454,"id":27809,"parameterSlots":3,"returnSlots":0},"@initializeRouter_18912":{"entryPoint":3342,"id":18912,"parameterSlots":2,"returnSlots":0},"@isContract_11172":{"entryPoint":null,"id":11172,"parameterSlots":1,"returnSlots":1},"@maxRoutersPerTransfer_18361":{"entryPoint":null,"id":18361,"parameterSlots":0,"returnSlots":1},"@proposeRouterOwner_18733":{"entryPoint":1874,"id":18733,"parameterSlots":2,"returnSlots":0},"@removeRouterLiquidityFor_19006":{"entryPoint":4418,"id":19006,"parameterSlots":4,"returnSlots":0},"@removeRouterLiquidity_19030":{"entryPoint":4322,"id":19030,"parameterSlots":3,"returnSlots":0},"@routerBalances_18378":{"entryPoint":2362,"id":18378,"parameterSlots":2,"returnSlots":1},"@safeTransferFrom_10931":{"entryPoint":6517,"id":10931,"parameterSlots":4,"returnSlots":0},"@safeTransfer_10905":{"entryPoint":6624,"id":10905,"parameterSlots":3,"returnSlots":0},"@setLiquidityFeeNumerator_18568":{"entryPoint":2511,"id":18568,"parameterSlots":1,"returnSlots":0},"@setMaxRoutersPerTransfer_18523":{"entryPoint":2766,"id":18523,"parameterSlots":1,"returnSlots":0},"@setRouterRecipient_18671":{"entryPoint":4620,"id":18671,"parameterSlots":2,"returnSlots":0},"@unapproveRouterForPortal_18649":{"entryPoint":1269,"id":18649,"parameterSlots":1,"returnSlots":0},"@unapproveRouter_18490":{"entryPoint":2969,"id":18490,"parameterSlots":1,"returnSlots":0},"@verifyCallResultFromTarget_11439":{"entryPoint":7129,"id":11439,"parameterSlots":4,"returnSlots":1},"abi_decode_struct_TokenId":{"entryPoint":7532,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":7311,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":7347,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":7944,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_TokenId_$37728_memory_ptrt_uint256t_address_payable":{"entryPoint":7644,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_struct$_TokenId_$37728_memory_ptrt_uint256t_address_payablet_address":{"entryPoint":7698,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_uint256":{"entryPoint":7507,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":7919,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_address":{"entryPoint":7470,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256t_addresst_address":{"entryPoint":7404,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":8014,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_bytes32_t_uint256_t_address__to_t_address_t_address_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_bytes32_t_uint256_t_address__to_t_address_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint32__to_t_bytes32_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":8042,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":7900,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":7866,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":7843,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":7824,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":7978,"id":null,"parameterSlots":3,"returnSlots":0},"panic_error_0x11":{"entryPoint":7802,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":7780,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":7287,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:10072:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"59:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"123:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"132:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"135:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"125:6:181"},"nodeType":"YulFunctionCall","src":"125:12:181"},"nodeType":"YulExpressionStatement","src":"125:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"82:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"93:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"108:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"113:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"104:3:181"},"nodeType":"YulFunctionCall","src":"104:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"117:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"100:3:181"},"nodeType":"YulFunctionCall","src":"100:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"89:3:181"},"nodeType":"YulFunctionCall","src":"89:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"79:2:181"},"nodeType":"YulFunctionCall","src":"79:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"72:6:181"},"nodeType":"YulFunctionCall","src":"72:50:181"},"nodeType":"YulIf","src":"69:70:181"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"48:5:181","type":""}],"src":"14:131:181"},{"body":{"nodeType":"YulBlock","src":"220:177:181","statements":[{"body":{"nodeType":"YulBlock","src":"266:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"275:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"278:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"268:6:181"},"nodeType":"YulFunctionCall","src":"268:12:181"},"nodeType":"YulExpressionStatement","src":"268:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"241:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"250:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"237:3:181"},"nodeType":"YulFunctionCall","src":"237:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"262:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"233:3:181"},"nodeType":"YulFunctionCall","src":"233:32:181"},"nodeType":"YulIf","src":"230:52:181"},{"nodeType":"YulVariableDeclaration","src":"291:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"317:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"304:12:181"},"nodeType":"YulFunctionCall","src":"304:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"295:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"361:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"336:24:181"},"nodeType":"YulFunctionCall","src":"336:31:181"},"nodeType":"YulExpressionStatement","src":"336:31:181"},{"nodeType":"YulAssignment","src":"376:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"386:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"376:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"186:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"197:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"209:6:181","type":""}],"src":"150:247:181"},{"body":{"nodeType":"YulBlock","src":"503:76:181","statements":[{"nodeType":"YulAssignment","src":"513:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"525:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"536:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"521:3:181"},"nodeType":"YulFunctionCall","src":"521:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"513:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"555:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"566:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"548:6:181"},"nodeType":"YulFunctionCall","src":"548:25:181"},"nodeType":"YulExpressionStatement","src":"548:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"472:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"483:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"494:4:181","type":""}],"src":"402:177:181"},{"body":{"nodeType":"YulBlock","src":"679:92:181","statements":[{"nodeType":"YulAssignment","src":"689:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"701:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"712:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"697:3:181"},"nodeType":"YulFunctionCall","src":"697:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"689:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"731:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"756:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"749:6:181"},"nodeType":"YulFunctionCall","src":"749:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"742:6:181"},"nodeType":"YulFunctionCall","src":"742:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"724:6:181"},"nodeType":"YulFunctionCall","src":"724:41:181"},"nodeType":"YulExpressionStatement","src":"724:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"648:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"659:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"670:4:181","type":""}],"src":"584:187:181"},{"body":{"nodeType":"YulBlock","src":"863:301:181","statements":[{"body":{"nodeType":"YulBlock","src":"909:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"918:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"921:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"911:6:181"},"nodeType":"YulFunctionCall","src":"911:12:181"},"nodeType":"YulExpressionStatement","src":"911:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"884:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"893:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"880:3:181"},"nodeType":"YulFunctionCall","src":"880:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"905:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"876:3:181"},"nodeType":"YulFunctionCall","src":"876:32:181"},"nodeType":"YulIf","src":"873:52:181"},{"nodeType":"YulVariableDeclaration","src":"934:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"960:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"947:12:181"},"nodeType":"YulFunctionCall","src":"947:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"938:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1004:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"979:24:181"},"nodeType":"YulFunctionCall","src":"979:31:181"},"nodeType":"YulExpressionStatement","src":"979:31:181"},{"nodeType":"YulAssignment","src":"1019:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1029:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1019:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1043:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1075:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1086:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1071:3:181"},"nodeType":"YulFunctionCall","src":"1071:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1058:12:181"},"nodeType":"YulFunctionCall","src":"1058:32:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1047:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1124:7:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1099:24:181"},"nodeType":"YulFunctionCall","src":"1099:33:181"},"nodeType":"YulExpressionStatement","src":"1099:33:181"},{"nodeType":"YulAssignment","src":"1141:17:181","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1151:7:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1141:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"821:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"832:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"844:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"852:6:181","type":""}],"src":"776:388:181"},{"body":{"nodeType":"YulBlock","src":"1273:352:181","statements":[{"body":{"nodeType":"YulBlock","src":"1319:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1328:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1331:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1321:6:181"},"nodeType":"YulFunctionCall","src":"1321:12:181"},"nodeType":"YulExpressionStatement","src":"1321:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1294:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1303:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1290:3:181"},"nodeType":"YulFunctionCall","src":"1290:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1315:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1286:3:181"},"nodeType":"YulFunctionCall","src":"1286:32:181"},"nodeType":"YulIf","src":"1283:52:181"},{"nodeType":"YulAssignment","src":"1344:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1367:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1354:12:181"},"nodeType":"YulFunctionCall","src":"1354:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1344:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1386:45:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1416:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1427:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1412:3:181"},"nodeType":"YulFunctionCall","src":"1412:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1399:12:181"},"nodeType":"YulFunctionCall","src":"1399:32:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1390:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1465:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1440:24:181"},"nodeType":"YulFunctionCall","src":"1440:31:181"},"nodeType":"YulExpressionStatement","src":"1440:31:181"},{"nodeType":"YulAssignment","src":"1480:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1490:5:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1480:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1504:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1536:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1547:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1532:3:181"},"nodeType":"YulFunctionCall","src":"1532:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1519:12:181"},"nodeType":"YulFunctionCall","src":"1519:32:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1508:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1585:7:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1560:24:181"},"nodeType":"YulFunctionCall","src":"1560:33:181"},"nodeType":"YulExpressionStatement","src":"1560:33:181"},{"nodeType":"YulAssignment","src":"1602:17:181","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1612:7:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1602:6:181"}]}]},"name":"abi_decode_tuple_t_uint256t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1223:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1234:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1246:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1254:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1262:6:181","type":""}],"src":"1169:456:181"},{"body":{"nodeType":"YulBlock","src":"1731:102:181","statements":[{"nodeType":"YulAssignment","src":"1741:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1753:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1764:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1749:3:181"},"nodeType":"YulFunctionCall","src":"1749:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1741:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1783:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1798:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1814:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1819:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1810:3:181"},"nodeType":"YulFunctionCall","src":"1810:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1823:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1806:3:181"},"nodeType":"YulFunctionCall","src":"1806:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1794:3:181"},"nodeType":"YulFunctionCall","src":"1794:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1776:6:181"},"nodeType":"YulFunctionCall","src":"1776:51:181"},"nodeType":"YulExpressionStatement","src":"1776:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1700:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1711:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1722:4:181","type":""}],"src":"1630:203:181"},{"body":{"nodeType":"YulBlock","src":"1925:228:181","statements":[{"body":{"nodeType":"YulBlock","src":"1971:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1980:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1983:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1973:6:181"},"nodeType":"YulFunctionCall","src":"1973:12:181"},"nodeType":"YulExpressionStatement","src":"1973:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1946:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1955:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1942:3:181"},"nodeType":"YulFunctionCall","src":"1942:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1967:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1938:3:181"},"nodeType":"YulFunctionCall","src":"1938:32:181"},"nodeType":"YulIf","src":"1935:52:181"},{"nodeType":"YulAssignment","src":"1996:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2019:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2006:12:181"},"nodeType":"YulFunctionCall","src":"2006:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1996:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2038:45:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2068:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2079:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2064:3:181"},"nodeType":"YulFunctionCall","src":"2064:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2051:12:181"},"nodeType":"YulFunctionCall","src":"2051:32:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2042:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2117:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2092:24:181"},"nodeType":"YulFunctionCall","src":"2092:31:181"},"nodeType":"YulExpressionStatement","src":"2092:31:181"},{"nodeType":"YulAssignment","src":"2132:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"2142:5:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2132:6:181"}]}]},"name":"abi_decode_tuple_t_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1883:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1894:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1906:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1914:6:181","type":""}],"src":"1838:315:181"},{"body":{"nodeType":"YulBlock","src":"2228:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"2274:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2283:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2286:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2276:6:181"},"nodeType":"YulFunctionCall","src":"2276:12:181"},"nodeType":"YulExpressionStatement","src":"2276:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2249:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2258:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2245:3:181"},"nodeType":"YulFunctionCall","src":"2245:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2270:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2241:3:181"},"nodeType":"YulFunctionCall","src":"2241:32:181"},"nodeType":"YulIf","src":"2238:52:181"},{"nodeType":"YulAssignment","src":"2299:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2322:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2309:12:181"},"nodeType":"YulFunctionCall","src":"2309:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2299:6:181"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2194:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2205:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2217:6:181","type":""}],"src":"2158:180:181"},{"body":{"nodeType":"YulBlock","src":"2407:614:181","statements":[{"body":{"nodeType":"YulBlock","src":"2451:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2460:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2463:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2453:6:181"},"nodeType":"YulFunctionCall","src":"2453:12:181"},"nodeType":"YulExpressionStatement","src":"2453:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"2428:3:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2433:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2424:3:181"},"nodeType":"YulFunctionCall","src":"2424:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"2445:4:181","type":"","value":"0x40"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2420:3:181"},"nodeType":"YulFunctionCall","src":"2420:30:181"},"nodeType":"YulIf","src":"2417:50:181"},{"nodeType":"YulVariableDeclaration","src":"2476:25:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2496:4:181","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2490:5:181"},"nodeType":"YulFunctionCall","src":"2490:11:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2480:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2510:35:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2532:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2540:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2528:3:181"},"nodeType":"YulFunctionCall","src":"2528:17:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2514:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2628:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2649:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2656:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2661:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2652:3:181"},"nodeType":"YulFunctionCall","src":"2652:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2642:6:181"},"nodeType":"YulFunctionCall","src":"2642:31:181"},"nodeType":"YulExpressionStatement","src":"2642:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2693:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2696:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2686:6:181"},"nodeType":"YulFunctionCall","src":"2686:15:181"},"nodeType":"YulExpressionStatement","src":"2686:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2721:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2724:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2714:6:181"},"nodeType":"YulFunctionCall","src":"2714:15:181"},"nodeType":"YulExpressionStatement","src":"2714:15:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2563:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"2575:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2560:2:181"},"nodeType":"YulFunctionCall","src":"2560:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2599:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2611:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2596:2:181"},"nodeType":"YulFunctionCall","src":"2596:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2557:2:181"},"nodeType":"YulFunctionCall","src":"2557:62:181"},"nodeType":"YulIf","src":"2554:185:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2755:4:181","type":"","value":"0x40"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2761:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2748:6:181"},"nodeType":"YulFunctionCall","src":"2748:24:181"},"nodeType":"YulExpressionStatement","src":"2748:24:181"},{"nodeType":"YulAssignment","src":"2781:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"2790:6:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2781:5:181"}]},{"nodeType":"YulVariableDeclaration","src":"2805:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2833:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2820:12:181"},"nodeType":"YulFunctionCall","src":"2820:23:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2809:7:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2901:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2910:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2913:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2903:6:181"},"nodeType":"YulFunctionCall","src":"2903:12:181"},"nodeType":"YulExpressionStatement","src":"2903:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2865:7:181"},{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2878:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"2887:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2874:3:181"},"nodeType":"YulFunctionCall","src":"2874:24:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2862:2:181"},"nodeType":"YulFunctionCall","src":"2862:37:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2855:6:181"},"nodeType":"YulFunctionCall","src":"2855:45:181"},"nodeType":"YulIf","src":"2852:65:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2933:6:181"},{"name":"value_1","nodeType":"YulIdentifier","src":"2941:7:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2926:6:181"},"nodeType":"YulFunctionCall","src":"2926:23:181"},"nodeType":"YulExpressionStatement","src":"2926:23:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2969:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2977:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2965:3:181"},"nodeType":"YulFunctionCall","src":"2965:15:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2999:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3010:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2995:3:181"},"nodeType":"YulFunctionCall","src":"2995:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2982:12:181"},"nodeType":"YulFunctionCall","src":"2982:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2958:6:181"},"nodeType":"YulFunctionCall","src":"2958:57:181"},"nodeType":"YulExpressionStatement","src":"2958:57:181"}]},"name":"abi_decode_struct_TokenId","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2378:9:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"2389:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2397:5:181","type":""}],"src":"2343:678:181"},{"body":{"nodeType":"YulBlock","src":"3164:302:181","statements":[{"body":{"nodeType":"YulBlock","src":"3211:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3220:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3223:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3213:6:181"},"nodeType":"YulFunctionCall","src":"3213:12:181"},"nodeType":"YulExpressionStatement","src":"3213:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3185:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3194:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3181:3:181"},"nodeType":"YulFunctionCall","src":"3181:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3206:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3177:3:181"},"nodeType":"YulFunctionCall","src":"3177:33:181"},"nodeType":"YulIf","src":"3174:53:181"},{"nodeType":"YulAssignment","src":"3236:55:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3272:9:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3283:7:181"}],"functionName":{"name":"abi_decode_struct_TokenId","nodeType":"YulIdentifier","src":"3246:25:181"},"nodeType":"YulFunctionCall","src":"3246:45:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3236:6:181"}]},{"nodeType":"YulAssignment","src":"3300:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3327:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3338:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3323:3:181"},"nodeType":"YulFunctionCall","src":"3323:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3310:12:181"},"nodeType":"YulFunctionCall","src":"3310:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3300:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3351:45:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3381:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3392:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3377:3:181"},"nodeType":"YulFunctionCall","src":"3377:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3364:12:181"},"nodeType":"YulFunctionCall","src":"3364:32:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3355:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3430:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3405:24:181"},"nodeType":"YulFunctionCall","src":"3405:31:181"},"nodeType":"YulExpressionStatement","src":"3405:31:181"},{"nodeType":"YulAssignment","src":"3445:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"3455:5:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3445:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_TokenId_$37728_memory_ptrt_uint256t_address_payable","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3114:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3125:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3137:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3145:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3153:6:181","type":""}],"src":"3026:440:181"},{"body":{"nodeType":"YulBlock","src":"3626:427:181","statements":[{"body":{"nodeType":"YulBlock","src":"3673:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3682:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3685:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3675:6:181"},"nodeType":"YulFunctionCall","src":"3675:12:181"},"nodeType":"YulExpressionStatement","src":"3675:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3647:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3656:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3643:3:181"},"nodeType":"YulFunctionCall","src":"3643:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3668:3:181","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3639:3:181"},"nodeType":"YulFunctionCall","src":"3639:33:181"},"nodeType":"YulIf","src":"3636:53:181"},{"nodeType":"YulAssignment","src":"3698:55:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3734:9:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3745:7:181"}],"functionName":{"name":"abi_decode_struct_TokenId","nodeType":"YulIdentifier","src":"3708:25:181"},"nodeType":"YulFunctionCall","src":"3708:45:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3698:6:181"}]},{"nodeType":"YulAssignment","src":"3762:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3789:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3800:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3785:3:181"},"nodeType":"YulFunctionCall","src":"3785:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3772:12:181"},"nodeType":"YulFunctionCall","src":"3772:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3762:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3813:45:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3843:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3854:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3839:3:181"},"nodeType":"YulFunctionCall","src":"3839:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3826:12:181"},"nodeType":"YulFunctionCall","src":"3826:32:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3817:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3892:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3867:24:181"},"nodeType":"YulFunctionCall","src":"3867:31:181"},"nodeType":"YulExpressionStatement","src":"3867:31:181"},{"nodeType":"YulAssignment","src":"3907:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"3917:5:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3907:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3931:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3963:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3974:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3959:3:181"},"nodeType":"YulFunctionCall","src":"3959:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3946:12:181"},"nodeType":"YulFunctionCall","src":"3946:33:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3935:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4013:7:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3988:24:181"},"nodeType":"YulFunctionCall","src":"3988:33:181"},"nodeType":"YulExpressionStatement","src":"3988:33:181"},{"nodeType":"YulAssignment","src":"4030:17:181","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4040:7:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4030:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_TokenId_$37728_memory_ptrt_uint256t_address_payablet_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3568:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3579:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3591:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3599:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3607:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3615:6:181","type":""}],"src":"3471:582:181"},{"body":{"nodeType":"YulBlock","src":"4090:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4107:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4114:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"4119:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4110:3:181"},"nodeType":"YulFunctionCall","src":"4110:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4100:6:181"},"nodeType":"YulFunctionCall","src":"4100:31:181"},"nodeType":"YulExpressionStatement","src":"4100:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4147:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4150:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4140:6:181"},"nodeType":"YulFunctionCall","src":"4140:15:181"},"nodeType":"YulExpressionStatement","src":"4140:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4171:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4174:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4164:6:181"},"nodeType":"YulFunctionCall","src":"4164:15:181"},"nodeType":"YulExpressionStatement","src":"4164:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"4058:127:181"},{"body":{"nodeType":"YulBlock","src":"4319:175:181","statements":[{"nodeType":"YulAssignment","src":"4329:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4341:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4352:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4337:3:181"},"nodeType":"YulFunctionCall","src":"4337:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4329:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"4364:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4382:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4387:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4378:3:181"},"nodeType":"YulFunctionCall","src":"4378:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4391:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4374:3:181"},"nodeType":"YulFunctionCall","src":"4374:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4368:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4409:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4424:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4432:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4420:3:181"},"nodeType":"YulFunctionCall","src":"4420:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4402:6:181"},"nodeType":"YulFunctionCall","src":"4402:34:181"},"nodeType":"YulExpressionStatement","src":"4402:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4456:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4467:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4452:3:181"},"nodeType":"YulFunctionCall","src":"4452:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"4476:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4484:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4472:3:181"},"nodeType":"YulFunctionCall","src":"4472:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4445:6:181"},"nodeType":"YulFunctionCall","src":"4445:43:181"},"nodeType":"YulExpressionStatement","src":"4445:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4280:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4291:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4299:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4310:4:181","type":""}],"src":"4190:304:181"},{"body":{"nodeType":"YulBlock","src":"4531:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4548:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4555:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"4560:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4551:3:181"},"nodeType":"YulFunctionCall","src":"4551:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4541:6:181"},"nodeType":"YulFunctionCall","src":"4541:31:181"},"nodeType":"YulExpressionStatement","src":"4541:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4588:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4591:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4581:6:181"},"nodeType":"YulFunctionCall","src":"4581:15:181"},"nodeType":"YulExpressionStatement","src":"4581:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4612:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4615:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4605:6:181"},"nodeType":"YulFunctionCall","src":"4605:15:181"},"nodeType":"YulExpressionStatement","src":"4605:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"4499:127:181"},{"body":{"nodeType":"YulBlock","src":"4680:79:181","statements":[{"nodeType":"YulAssignment","src":"4690:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4702:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"4705:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4698:3:181"},"nodeType":"YulFunctionCall","src":"4698:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"4690:4:181"}]},{"body":{"nodeType":"YulBlock","src":"4731:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"4733:16:181"},"nodeType":"YulFunctionCall","src":"4733:18:181"},"nodeType":"YulExpressionStatement","src":"4733:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"4722:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"4728:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4719:2:181"},"nodeType":"YulFunctionCall","src":"4719:11:181"},"nodeType":"YulIf","src":"4716:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4662:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"4665:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"4671:4:181","type":""}],"src":"4631:128:181"},{"body":{"nodeType":"YulBlock","src":"4816:116:181","statements":[{"nodeType":"YulAssignment","src":"4826:20:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4841:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"4844:1:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"4837:3:181"},"nodeType":"YulFunctionCall","src":"4837:9:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"4826:7:181"}]},{"body":{"nodeType":"YulBlock","src":"4904:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"4906:16:181"},"nodeType":"YulFunctionCall","src":"4906:18:181"},"nodeType":"YulExpressionStatement","src":"4906:18:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4875:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4868:6:181"},"nodeType":"YulFunctionCall","src":"4868:9:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"4882:1:181"},{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"4889:7:181"},{"name":"x","nodeType":"YulIdentifier","src":"4898:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"4885:3:181"},"nodeType":"YulFunctionCall","src":"4885:15:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4879:2:181"},"nodeType":"YulFunctionCall","src":"4879:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"4865:2:181"},"nodeType":"YulFunctionCall","src":"4865:37:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4858:6:181"},"nodeType":"YulFunctionCall","src":"4858:45:181"},"nodeType":"YulIf","src":"4855:71:181"}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4795:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"4798:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"4804:7:181","type":""}],"src":"4764:168:181"},{"body":{"nodeType":"YulBlock","src":"4983:171:181","statements":[{"body":{"nodeType":"YulBlock","src":"5014:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5035:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5042:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"5047:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5038:3:181"},"nodeType":"YulFunctionCall","src":"5038:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5028:6:181"},"nodeType":"YulFunctionCall","src":"5028:31:181"},"nodeType":"YulExpressionStatement","src":"5028:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5079:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5082:4:181","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5072:6:181"},"nodeType":"YulFunctionCall","src":"5072:15:181"},"nodeType":"YulExpressionStatement","src":"5072:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5107:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5110:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5100:6:181"},"nodeType":"YulFunctionCall","src":"5100:15:181"},"nodeType":"YulExpressionStatement","src":"5100:15:181"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"5003:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4996:6:181"},"nodeType":"YulFunctionCall","src":"4996:9:181"},"nodeType":"YulIf","src":"4993:132:181"},{"nodeType":"YulAssignment","src":"5134:14:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5143:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"5146:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"5139:3:181"},"nodeType":"YulFunctionCall","src":"5139:9:181"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"5134:1:181"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4968:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"4971:1:181","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"4977:1:181","type":""}],"src":"4937:217:181"},{"body":{"nodeType":"YulBlock","src":"5288:145:181","statements":[{"nodeType":"YulAssignment","src":"5298:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5310:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5321:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5306:3:181"},"nodeType":"YulFunctionCall","src":"5306:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5298:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5340:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"5351:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5333:6:181"},"nodeType":"YulFunctionCall","src":"5333:25:181"},"nodeType":"YulExpressionStatement","src":"5333:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5378:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5389:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5374:3:181"},"nodeType":"YulFunctionCall","src":"5374:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"5398:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5414:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5419:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5410:3:181"},"nodeType":"YulFunctionCall","src":"5410:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5423:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5406:3:181"},"nodeType":"YulFunctionCall","src":"5406:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5394:3:181"},"nodeType":"YulFunctionCall","src":"5394:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5367:6:181"},"nodeType":"YulFunctionCall","src":"5367:60:181"},"nodeType":"YulExpressionStatement","src":"5367:60:181"}]},"name":"abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5249:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5260:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5268:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5279:4:181","type":""}],"src":"5159:274:181"},{"body":{"nodeType":"YulBlock","src":"5486:77:181","statements":[{"nodeType":"YulAssignment","src":"5496:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5507:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"5510:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5503:3:181"},"nodeType":"YulFunctionCall","src":"5503:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"5496:3:181"}]},{"body":{"nodeType":"YulBlock","src":"5535:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"5537:16:181"},"nodeType":"YulFunctionCall","src":"5537:18:181"},"nodeType":"YulExpressionStatement","src":"5537:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5527:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"5530:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5524:2:181"},"nodeType":"YulFunctionCall","src":"5524:10:181"},"nodeType":"YulIf","src":"5521:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"5469:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"5472:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"5478:3:181","type":""}],"src":"5438:125:181"},{"body":{"nodeType":"YulBlock","src":"5753:262:181","statements":[{"nodeType":"YulAssignment","src":"5763:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5775:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5786:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5771:3:181"},"nodeType":"YulFunctionCall","src":"5771:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5763:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"5799:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5817:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5822:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5813:3:181"},"nodeType":"YulFunctionCall","src":"5813:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5826:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5809:3:181"},"nodeType":"YulFunctionCall","src":"5809:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5803:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5844:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5859:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5867:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5855:3:181"},"nodeType":"YulFunctionCall","src":"5855:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5837:6:181"},"nodeType":"YulFunctionCall","src":"5837:34:181"},"nodeType":"YulExpressionStatement","src":"5837:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5891:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5902:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5887:3:181"},"nodeType":"YulFunctionCall","src":"5887:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"5907:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5880:6:181"},"nodeType":"YulFunctionCall","src":"5880:34:181"},"nodeType":"YulExpressionStatement","src":"5880:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5934:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5945:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5930:3:181"},"nodeType":"YulFunctionCall","src":"5930:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"5950:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5923:6:181"},"nodeType":"YulFunctionCall","src":"5923:34:181"},"nodeType":"YulExpressionStatement","src":"5923:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5977:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5988:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5973:3:181"},"nodeType":"YulFunctionCall","src":"5973:18:181"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"5997:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6005:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5993:3:181"},"nodeType":"YulFunctionCall","src":"5993:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5966:6:181"},"nodeType":"YulFunctionCall","src":"5966:43:181"},"nodeType":"YulExpressionStatement","src":"5966:43:181"}]},"name":"abi_encode_tuple_t_address_t_bytes32_t_uint256_t_address__to_t_address_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5698:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5709:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5717:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5725:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5733:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5744:4:181","type":""}],"src":"5568:447:181"},{"body":{"nodeType":"YulBlock","src":"6233:315:181","statements":[{"nodeType":"YulAssignment","src":"6243:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6255:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6266:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6251:3:181"},"nodeType":"YulFunctionCall","src":"6251:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6243:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"6279:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6297:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6302:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6293:3:181"},"nodeType":"YulFunctionCall","src":"6293:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"6306:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6289:3:181"},"nodeType":"YulFunctionCall","src":"6289:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6283:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6324:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6339:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6347:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6335:3:181"},"nodeType":"YulFunctionCall","src":"6335:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6317:6:181"},"nodeType":"YulFunctionCall","src":"6317:34:181"},"nodeType":"YulExpressionStatement","src":"6317:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6371:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6382:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6367:3:181"},"nodeType":"YulFunctionCall","src":"6367:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6391:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6399:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6387:3:181"},"nodeType":"YulFunctionCall","src":"6387:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6360:6:181"},"nodeType":"YulFunctionCall","src":"6360:43:181"},"nodeType":"YulExpressionStatement","src":"6360:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6423:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6434:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6419:3:181"},"nodeType":"YulFunctionCall","src":"6419:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"6439:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6412:6:181"},"nodeType":"YulFunctionCall","src":"6412:34:181"},"nodeType":"YulExpressionStatement","src":"6412:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6466:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6477:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6462:3:181"},"nodeType":"YulFunctionCall","src":"6462:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"6482:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6455:6:181"},"nodeType":"YulFunctionCall","src":"6455:34:181"},"nodeType":"YulExpressionStatement","src":"6455:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6509:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6520:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6505:3:181"},"nodeType":"YulFunctionCall","src":"6505:19:181"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"6530:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6538:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6526:3:181"},"nodeType":"YulFunctionCall","src":"6526:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6498:6:181"},"nodeType":"YulFunctionCall","src":"6498:44:181"},"nodeType":"YulExpressionStatement","src":"6498:44:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_bytes32_t_uint256_t_address__to_t_address_t_address_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6170:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"6181:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6189:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6197:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6205:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6213:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6224:4:181","type":""}],"src":"6020:528:181"},{"body":{"nodeType":"YulBlock","src":"6680:136:181","statements":[{"nodeType":"YulAssignment","src":"6690:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6702:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6713:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6698:3:181"},"nodeType":"YulFunctionCall","src":"6698:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6690:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6732:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"6743:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6725:6:181"},"nodeType":"YulFunctionCall","src":"6725:25:181"},"nodeType":"YulExpressionStatement","src":"6725:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6770:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6781:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6766:3:181"},"nodeType":"YulFunctionCall","src":"6766:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6790:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6798:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6786:3:181"},"nodeType":"YulFunctionCall","src":"6786:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6759:6:181"},"nodeType":"YulFunctionCall","src":"6759:51:181"},"nodeType":"YulExpressionStatement","src":"6759:51:181"}]},"name":"abi_encode_tuple_t_bytes32_t_uint32__to_t_bytes32_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6641:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6652:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6660:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6671:4:181","type":""}],"src":"6553:263:181"},{"body":{"nodeType":"YulBlock","src":"6902:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"6948:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6957:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6960:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6950:6:181"},"nodeType":"YulFunctionCall","src":"6950:12:181"},"nodeType":"YulExpressionStatement","src":"6950:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6923:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6932:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6919:3:181"},"nodeType":"YulFunctionCall","src":"6919:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"6944:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6915:3:181"},"nodeType":"YulFunctionCall","src":"6915:32:181"},"nodeType":"YulIf","src":"6912:52:181"},{"nodeType":"YulAssignment","src":"6973:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6989:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6983:5:181"},"nodeType":"YulFunctionCall","src":"6983:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6973:6:181"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6868:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6879:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6891:6:181","type":""}],"src":"6821:184:181"},{"body":{"nodeType":"YulBlock","src":"7167:218:181","statements":[{"nodeType":"YulAssignment","src":"7177:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7189:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7200:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7185:3:181"},"nodeType":"YulFunctionCall","src":"7185:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7177:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"7212:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7230:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"7235:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7226:3:181"},"nodeType":"YulFunctionCall","src":"7226:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"7239:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7222:3:181"},"nodeType":"YulFunctionCall","src":"7222:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7216:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7257:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7272:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7280:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7268:3:181"},"nodeType":"YulFunctionCall","src":"7268:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7250:6:181"},"nodeType":"YulFunctionCall","src":"7250:34:181"},"nodeType":"YulExpressionStatement","src":"7250:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7304:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7315:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7300:3:181"},"nodeType":"YulFunctionCall","src":"7300:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"7324:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7332:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7320:3:181"},"nodeType":"YulFunctionCall","src":"7320:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7293:6:181"},"nodeType":"YulFunctionCall","src":"7293:43:181"},"nodeType":"YulExpressionStatement","src":"7293:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7356:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7367:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7352:3:181"},"nodeType":"YulFunctionCall","src":"7352:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"7372:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7345:6:181"},"nodeType":"YulFunctionCall","src":"7345:34:181"},"nodeType":"YulExpressionStatement","src":"7345:34:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7120:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7131:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7139:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7147:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7158:4:181","type":""}],"src":"7010:375:181"},{"body":{"nodeType":"YulBlock","src":"7519:145:181","statements":[{"nodeType":"YulAssignment","src":"7529:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7541:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7552:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7537:3:181"},"nodeType":"YulFunctionCall","src":"7537:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7529:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7571:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7586:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7602:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"7607:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7598:3:181"},"nodeType":"YulFunctionCall","src":"7598:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"7611:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7594:3:181"},"nodeType":"YulFunctionCall","src":"7594:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7582:3:181"},"nodeType":"YulFunctionCall","src":"7582:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7564:6:181"},"nodeType":"YulFunctionCall","src":"7564:51:181"},"nodeType":"YulExpressionStatement","src":"7564:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7635:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7646:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7631:3:181"},"nodeType":"YulFunctionCall","src":"7631:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"7651:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7624:6:181"},"nodeType":"YulFunctionCall","src":"7624:34:181"},"nodeType":"YulExpressionStatement","src":"7624:34:181"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7480:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7491:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7499:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7510:4:181","type":""}],"src":"7390:274:181"},{"body":{"nodeType":"YulBlock","src":"7747:199:181","statements":[{"body":{"nodeType":"YulBlock","src":"7793:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7802:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7805:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7795:6:181"},"nodeType":"YulFunctionCall","src":"7795:12:181"},"nodeType":"YulExpressionStatement","src":"7795:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7768:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7777:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7764:3:181"},"nodeType":"YulFunctionCall","src":"7764:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7789:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7760:3:181"},"nodeType":"YulFunctionCall","src":"7760:32:181"},"nodeType":"YulIf","src":"7757:52:181"},{"nodeType":"YulVariableDeclaration","src":"7818:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7837:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7831:5:181"},"nodeType":"YulFunctionCall","src":"7831:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7822:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7900:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7909:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7912:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7902:6:181"},"nodeType":"YulFunctionCall","src":"7902:12:181"},"nodeType":"YulExpressionStatement","src":"7902:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7869:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7890:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7883:6:181"},"nodeType":"YulFunctionCall","src":"7883:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7876:6:181"},"nodeType":"YulFunctionCall","src":"7876:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"7866:2:181"},"nodeType":"YulFunctionCall","src":"7866:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7859:6:181"},"nodeType":"YulFunctionCall","src":"7859:40:181"},"nodeType":"YulIf","src":"7856:60:181"},{"nodeType":"YulAssignment","src":"7925:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"7935:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7925:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7713:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7724:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7736:6:181","type":""}],"src":"7669:277:181"},{"body":{"nodeType":"YulBlock","src":"8125:232:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8142:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8153:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8135:6:181"},"nodeType":"YulFunctionCall","src":"8135:21:181"},"nodeType":"YulExpressionStatement","src":"8135:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8176:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8187:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8172:3:181"},"nodeType":"YulFunctionCall","src":"8172:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8192:2:181","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8165:6:181"},"nodeType":"YulFunctionCall","src":"8165:30:181"},"nodeType":"YulExpressionStatement","src":"8165:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8215:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8226:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8211:3:181"},"nodeType":"YulFunctionCall","src":"8211:18:181"},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e","kind":"string","nodeType":"YulLiteral","src":"8231:34:181","type":"","value":"SafeERC20: ERC20 operation did n"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8204:6:181"},"nodeType":"YulFunctionCall","src":"8204:62:181"},"nodeType":"YulExpressionStatement","src":"8204:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8286:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8297:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8282:3:181"},"nodeType":"YulFunctionCall","src":"8282:18:181"},{"hexValue":"6f742073756363656564","kind":"string","nodeType":"YulLiteral","src":"8302:12:181","type":"","value":"ot succeed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8275:6:181"},"nodeType":"YulFunctionCall","src":"8275:40:181"},"nodeType":"YulExpressionStatement","src":"8275:40:181"},{"nodeType":"YulAssignment","src":"8324:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8336:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8347:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8332:3:181"},"nodeType":"YulFunctionCall","src":"8332:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8324:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8102:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8116:4:181","type":""}],"src":"7951:406:181"},{"body":{"nodeType":"YulBlock","src":"8536:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8553:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8564:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8546:6:181"},"nodeType":"YulFunctionCall","src":"8546:21:181"},"nodeType":"YulExpressionStatement","src":"8546:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8587:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8598:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8583:3:181"},"nodeType":"YulFunctionCall","src":"8583:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8603:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8576:6:181"},"nodeType":"YulFunctionCall","src":"8576:30:181"},"nodeType":"YulExpressionStatement","src":"8576:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8626:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8637:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8622:3:181"},"nodeType":"YulFunctionCall","src":"8622:18:181"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f","kind":"string","nodeType":"YulLiteral","src":"8642:34:181","type":"","value":"Address: insufficient balance fo"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8615:6:181"},"nodeType":"YulFunctionCall","src":"8615:62:181"},"nodeType":"YulExpressionStatement","src":"8615:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8697:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8708:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8693:3:181"},"nodeType":"YulFunctionCall","src":"8693:18:181"},{"hexValue":"722063616c6c","kind":"string","nodeType":"YulLiteral","src":"8713:8:181","type":"","value":"r call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8686:6:181"},"nodeType":"YulFunctionCall","src":"8686:36:181"},"nodeType":"YulExpressionStatement","src":"8686:36:181"},{"nodeType":"YulAssignment","src":"8731:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8743:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8754:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8739:3:181"},"nodeType":"YulFunctionCall","src":"8739:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8731:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8513:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8527:4:181","type":""}],"src":"8362:402:181"},{"body":{"nodeType":"YulBlock","src":"8835:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"8845:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8854:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"8849:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8914:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"8939:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"8944:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8935:3:181"},"nodeType":"YulFunctionCall","src":"8935:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"8958:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"8963:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8954:3:181"},"nodeType":"YulFunctionCall","src":"8954:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8948:5:181"},"nodeType":"YulFunctionCall","src":"8948:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8928:6:181"},"nodeType":"YulFunctionCall","src":"8928:39:181"},"nodeType":"YulExpressionStatement","src":"8928:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"8875:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"8878:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8872:2:181"},"nodeType":"YulFunctionCall","src":"8872:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"8886:19:181","statements":[{"nodeType":"YulAssignment","src":"8888:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"8897:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"8900:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8893:3:181"},"nodeType":"YulFunctionCall","src":"8893:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"8888:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"8868:3:181","statements":[]},"src":"8864:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"8997:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"9002:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8993:3:181"},"nodeType":"YulFunctionCall","src":"8993:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"9011:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8986:6:181"},"nodeType":"YulFunctionCall","src":"8986:27:181"},"nodeType":"YulExpressionStatement","src":"8986:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"8813:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"8818:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"8823:6:181","type":""}],"src":"8769:250:181"},{"body":{"nodeType":"YulBlock","src":"9161:150:181","statements":[{"nodeType":"YulVariableDeclaration","src":"9171:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9191:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9185:5:181"},"nodeType":"YulFunctionCall","src":"9185:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"9175:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9246:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"9254:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9242:3:181"},"nodeType":"YulFunctionCall","src":"9242:17:181"},{"name":"pos","nodeType":"YulIdentifier","src":"9261:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"9266:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"9207:34:181"},"nodeType":"YulFunctionCall","src":"9207:66:181"},"nodeType":"YulExpressionStatement","src":"9207:66:181"},{"nodeType":"YulAssignment","src":"9282:23:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9293:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"9298:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9289:3:181"},"nodeType":"YulFunctionCall","src":"9289:16:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"9282:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"9137:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9142:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"9153:3:181","type":""}],"src":"9024:287:181"},{"body":{"nodeType":"YulBlock","src":"9490:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9507:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9518:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9500:6:181"},"nodeType":"YulFunctionCall","src":"9500:21:181"},"nodeType":"YulExpressionStatement","src":"9500:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9541:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9552:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9537:3:181"},"nodeType":"YulFunctionCall","src":"9537:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9557:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9530:6:181"},"nodeType":"YulFunctionCall","src":"9530:30:181"},"nodeType":"YulExpressionStatement","src":"9530:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9580:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9591:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9576:3:181"},"nodeType":"YulFunctionCall","src":"9576:18:181"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"9596:31:181","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9569:6:181"},"nodeType":"YulFunctionCall","src":"9569:59:181"},"nodeType":"YulExpressionStatement","src":"9569:59:181"},{"nodeType":"YulAssignment","src":"9637:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9649:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9660:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9645:3:181"},"nodeType":"YulFunctionCall","src":"9645:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9637:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9467:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9481:4:181","type":""}],"src":"9316:353:181"},{"body":{"nodeType":"YulBlock","src":"9795:275:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9812:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9823:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9805:6:181"},"nodeType":"YulFunctionCall","src":"9805:21:181"},"nodeType":"YulExpressionStatement","src":"9805:21:181"},{"nodeType":"YulVariableDeclaration","src":"9835:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9855:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9849:5:181"},"nodeType":"YulFunctionCall","src":"9849:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"9839:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9882:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9893:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9878:3:181"},"nodeType":"YulFunctionCall","src":"9878:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"9898:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9871:6:181"},"nodeType":"YulFunctionCall","src":"9871:34:181"},"nodeType":"YulExpressionStatement","src":"9871:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9953:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"9961:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9949:3:181"},"nodeType":"YulFunctionCall","src":"9949:15:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9970:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9981:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9966:3:181"},"nodeType":"YulFunctionCall","src":"9966:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"9986:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"9914:34:181"},"nodeType":"YulFunctionCall","src":"9914:79:181"},"nodeType":"YulExpressionStatement","src":"9914:79:181"},{"nodeType":"YulAssignment","src":"10002:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10018:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"10037:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10045:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10033:3:181"},"nodeType":"YulFunctionCall","src":"10033:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10054:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10050:3:181"},"nodeType":"YulFunctionCall","src":"10050:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10029:3:181"},"nodeType":"YulFunctionCall","src":"10029:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10014:3:181"},"nodeType":"YulFunctionCall","src":"10014:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"10061:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10010:3:181"},"nodeType":"YulFunctionCall","src":"10010:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10002:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9764:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9775:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9786:4:181","type":""}],"src":"9674:396:181"}]},"contents":"{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_uint256t_addresst_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value1 := value\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_uint256t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value1 := value\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_struct_TokenId(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x40) { revert(0, 0) }\n        let memPtr := mload(0x40)\n        let newFreePtr := add(memPtr, 0x40)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(0x40, newFreePtr)\n        value := memPtr\n        let value_1 := calldataload(headStart)\n        if iszero(eq(value_1, and(value_1, 0xffffffff))) { revert(0, 0) }\n        mstore(memPtr, value_1)\n        mstore(add(memPtr, 32), calldataload(add(headStart, 32)))\n    }\n    function abi_decode_tuple_t_struct$_TokenId_$37728_memory_ptrt_uint256t_address_payable(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_struct_TokenId(headStart, dataEnd)\n        value1 := calldataload(add(headStart, 64))\n        let value := calldataload(add(headStart, 96))\n        validator_revert_address(value)\n        value2 := value\n    }\n    function abi_decode_tuple_t_struct$_TokenId_$37728_memory_ptrt_uint256t_address_payablet_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := abi_decode_struct_TokenId(headStart, dataEnd)\n        value1 := calldataload(add(headStart, 64))\n        let value := calldataload(add(headStart, 96))\n        validator_revert_address(value)\n        value2 := value\n        let value_1 := calldataload(add(headStart, 128))\n        validator_revert_address(value_1)\n        value3 := value_1\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        product := mul(x, y)\n        if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_address_t_bytes32_t_uint256_t_address__to_t_address_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, _1))\n    }\n    function abi_encode_tuple_t_address_t_address_t_bytes32_t_uint256_t_address__to_t_address_t_address_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, _1))\n    }\n    function abi_encode_tuple_t_bytes32_t_uint32__to_t_bytes32_t_uint32__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffff))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory_with_cleanup(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"60806040526004361061014b5760003560e01c806382904716116100b6578063da3a892f1161006f578063da3a892f14610416578063e9160f3e14610436578063f259cd2714610475578063f72c504814610495578063fd5bd5fe146104b5578063ffaf3f1a146104d557600080fd5b806382904716146103275780638770e68214610347578063911b8ee2146103855780639bf6d875146103a5578063b214c901146103ba578063c6bf691d146103da57600080fd5b80632d3f9ef6116101085780632d3f9ef6146102585780633b688da61461026b57806341258b5c146102bf5780634b72c5da146102df57806354064594146102f4578063582c78d21461030757600080fd5b806304376ff4146101505780630951d6d81461017257806309935b8f1461019657806312d57170146101b65780631407093b146101ef57806322a3c00714610238575b600080fd5b34801561015c57600080fd5b5061017061016b366004611c8f565b6104f5565b005b34801561017e57600080fd5b506001545b6040519081526020015b60405180910390f35b3480156101a257600080fd5b506101706101b1366004611c8f565b6105f2565b3480156101c257600080fd5b506101836101d1366004611c8f565b6001600160a01b031660009081526015602052604090206003015490565b3480156101fb57600080fd5b5061022861020a366004611c8f565b6001600160a01b031660009081526015602052604090205460ff1690565b604051901515815260200161018d565b34801561024457600080fd5b50610170610253366004611cb3565b610752565b610170610266366004611cec565b6108d1565b34801561027757600080fd5b506102a7610286366004611c8f565b6001600160a01b039081166000908152601560205260409020600201541690565b6040516001600160a01b03909116815260200161018d565b3480156102cb57600080fd5b506101836102da366004611cb3565b61093a565b3480156102eb57600080fd5b50612710610183565b610170610302366004611d2e565b610967565b34801561031357600080fd5b50610170610322366004611d53565b6109cf565b34801561033357600080fd5b50610170610342366004611d53565b610ace565b34801561035357600080fd5b50610228610362366004611c8f565b6001600160a01b0316600090815260156020526040902054610100900460ff1690565b34801561039157600080fd5b506101706103a0366004611c8f565b610b99565b3480156103b157600080fd5b50600c54610183565b3480156103c657600080fd5b506101706103d5366004611cb3565b610d0e565b3480156103e657600080fd5b506102a76103f5366004611c8f565b6001600160a01b039081166000908152601560205260409020600101541690565b34801561042257600080fd5b50610170610431366004611c8f565b610e42565b34801561044257600080fd5b506102a7610451366004611c8f565b6001600160a01b039081166000908152601560205260409020546201000090041690565b34801561048157600080fd5b50610170610490366004611c8f565b610fc5565b3480156104a157600080fd5b506101706104b0366004611ddc565b6110e2565b3480156104c157600080fd5b506101706104d0366004611e12565b611142565b3480156104e157600080fd5b506101706104f0366004611cb3565b61120c565b336104fe61127f565b6001600160a01b031614158015610539575060033360009081526014602052604090205460ff16600381111561053657610536611e64565b14155b1561055757604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b038116600090815260156020526040902054610100900460ff1661059557604051635d3abc4360e11b815260040160405180910390fd5b6001600160a01b038116600081815260156020908152604091829020805461ff0019169055815192835233908301527f903522f09b29fa2102f5d8d8b181ac8edb4cfaf5d705076e4ab95117f6bb02ad910160405180910390a150565b6001600160a01b03808216600090815260156020908152604091829020825160c081018452815460ff8082161515835261010082041615159382019390935262010000909204841692820192909252600182015483166060820152600282015490921660808301526003015460a0820181905262093a80906106749042611e90565b11610692576040516376b2ad0760e01b815260040160405180910390fd5b60808101516000906001600160a01b0316156106b25781608001516106b8565b81604001515b9050336001600160a01b038216146106e357604051633253a7bd60e01b815260040160405180910390fd5b6106f683836080015184604001516112ad565b60808201516001600160a01b031615610733576001600160a01b038316600090815260156020526040902060020180546001600160a01b03191690555b50506001600160a01b0316600090815260156020526040812060030155565b6001600160a01b038083166000908152601560205260409020548391620100009091041633146107955760405163407c584960e01b815260040160405180910390fd5b6001600160a01b03808416600090815260156020908152604091829020825160c081018452815460ff808216151583526101008204161515938201939093526201000090920484169282018390526001810154841660608301526002810154841660808301526003015460a0820152918416900361082657604051630e49614b60e31b815260040160405180910390fd5b826001600160a01b031681608001516001600160a01b03160361085c57604051631b2163f160e31b815260040160405180910390fd5b6001600160a01b038481166000818152601560205260408082206002810180546001600160a01b031916898716908117909155426003909201919091556080860151915190949190911692917fee0158b57adc03901d8b16c48cd10c33ca1283ee96c6e0d30f817ceba74dc4a191a450505050565b601654600119016108f557604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561092557604051633ee5b89360e01b815260040160405180910390fd5b610930838383611348565b5050600160165550565b6001600160a01b038083166000908152600a60209081526040808320938516835292905220545b92915050565b6016546001190161098b57604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff16156109bb57604051633ee5b89360e01b815260040160405180910390fd5b6109c6828233611348565b50506001601655565b336109d861127f565b6001600160a01b031614158015610a13575060033360009081526014602052604090205460ff166003811115610a1057610a10611e64565b14155b15610a3157604051637b32c26b60e01b815260040160405180910390fd5b6127106064610a4182605f611ea3565b610a4b9190611eba565b821015610a6b5760405163b74bfc8360e01b815260040160405180910390fd5b80821115610a8c57604051637347083360e11b815260040160405180910390fd5b6001829055604080518381523360208201527feb6222a0b32216f861511e9aba88faa9549b749c2e0ad47df4e288565de5ceae91015b60405180910390a15050565b33610ad761127f565b6001600160a01b031614158015610b12575060033360009081526014602052604090205460ff166003811115610b0f57610b0f611e64565b14155b15610b3057604051637b32c26b60e01b815260040160405180910390fd5b801580610b3e5750600c5481145b15610b5c57604051630d9f9fad60e01b815260040160405180910390fd5b604080518281523360208201527fa7fe33308fb33ae6f3259e3c7c954ae3d6cd7f428cd17f653413c2cdc691666d910160405180910390a1600c55565b33610ba261127f565b6001600160a01b031614158015610bdd575060013360009081526014602052604090205460ff166003811115610bda57610bda611e64565b14155b15610bfb576040516360237f6b60e11b815260040160405180910390fd5b6001600160a01b038116610c225760405163085dd61360e11b815260040160405180910390fd5b6001600160a01b03808216600090815260156020908152604091829020825160c081018452815460ff808216151580845261010083049091161515948301949094526201000090048516938101939093526001810154841660608401526002810154909316608083015260039092015460a082015290610cb557604051632b31895f60e21b815260040160405180910390fd5b6001600160a01b038216600081815260156020908152604091829020805461ffff1916905590513381527fbee3e974bb6a6f44f20096ede047c191eef60322e65e4ee4bd3392230a8716d5910160405180910390a25050565b33600090815260156020908152604091829020825160c081018452815460ff80821615158352610100820416151593820193909352620100009092046001600160a01b0390811693830184905260018201548116606084015260028201541660808301526003015460a082015290151580610d95575060608101516001600160a01b031615155b80610dac575060808101516001600160a01b031615155b80610dbb575060008160a00151115b15610dd957604051630efdad3160e11b815260040160405180910390fd5b6001600160a01b038316610deb573392505b610df7338460006112ad565b6001600160a01b03821615610e1257610e1233836000611539565b60405133907f2622745e83f97f2d871ef785497c1eeba6f9bb94c7dd486cf28228e814d929e490600090a2505050565b33610e4b61127f565b6001600160a01b031614158015610e86575060033360009081526014602052604090205460ff166003811115610e8357610e83611e64565b14155b15610ea457604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03808216600090815260156020908152604091829020825160c081018452815460ff808216158015808552610100840490921615159584019590955262010000909104861694820194909452600182015485166060820152600282015490941660808501526003015460a084015290610f295750610f276115cd565b155b15610f47576040516375befccb60e01b815260040160405180910390fd5b806020015115610f6a5760405163c896c2d960e01b815260040160405180910390fd5b6001600160a01b038216600081815260156020908152604091829020805461ff001916610100179055815192835233908301527fc428fad4df337e27be8199c35a79ca103e8d00538a69b0f9701fb2bdf7d6c84c9101610ac2565b33610fce61127f565b6001600160a01b031614158015611009575060013360009081526014602052604090205460ff16600381111561100657611006611e64565b14155b15611027576040516360237f6b60e11b815260040160405180910390fd5b6001600160a01b03811661104e5760405163330ef51f60e01b815260040160405180910390fd5b6001600160a01b03811660009081526015602052604090205460ff16156110885760405163916e73bd60e01b815260040160405180910390fd5b6001600160a01b038116600081815260156020908152604091829020805460ff1916600117905590513381527fbc68405e644da2aaf25623ce2199da82c6dfd2e1de102b400eba6a091704d4f4910160405180910390a250565b6016546001190161110657604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561113657604051633ee5b89360e01b815260040160405180910390fd5b610930828483336115f4565b6016546001190161116657604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561119657604051633ee5b89360e01b815260040160405180910390fd5b6001600160a01b038082166000908152601560205260408120546201000090049091169081156111c657816111c8565b825b9050336001600160a01b038216146111f35760405163f3dc2d1960e01b815260040160405180910390fd5b6111ff858786866115f4565b5050600160165550505050565b6001600160a01b0380831660009081526015602052604090205483916201000090910416331461124f5760405163407c584960e01b815260040160405180910390fd5b6001600160a01b0380841660009081526015602052604090206001015461127a918591859116611539565b505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b816001600160a01b0316816001600160a01b0316036112df576040516309a3ec2160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260156020526040808220805462010000600160b01b031916620100008887169081029190911790915590519093851692917fd73892e8827a6025d74a01fca72a8e0d9e2c04080272e728f8861410c7d3c2d191a4505050565b6001600160a01b03811661136f576040516339773cbf60e21b815260040160405180910390fd5b8260000361139057604051632a24141960e01b815260040160405180910390fd5b6001600160a01b0382166000908152600660209081526040918290208251808401909352805463ffffffff16808452600190910154918301919091521580156113db57506020810151155b156113fb5760045463ffffffff1681526001600160a01b03831660208201525b600061140f826020015183600001516117a3565b600081815260076020526040902060020154909150600160a01b900460ff1661144b5760405163a13f958f60e01b815260040160405180910390fd5b6114536115cd565b15801561147957506001600160a01b03831660009081526015602052604090205460ff16155b1561149757604051631464c65f60e31b815260040160405180910390fd5b6114a184866117e5565b6001600160a01b038084166000908152600a60209081526040808320938816835292905290812080548792906114d8908490611edc565b9091555050604080516001600160a01b03868116825260208201849052918101879052336060820152908416907fcc3100122c1752fe0f6bfa5503175bc53eb00b5f2d774e81efedcd2b10a6d24b9060800160405180910390a25050505050565b816001600160a01b0316816001600160a01b03160361156b57604051631b0043f560e31b815260040160405180910390fd5b6001600160a01b0383811660008181526015602052604080822060010180546001600160a01b03191687861690811790915590519093851692917f31f32ebf07b0ac7fe173f7b7f3f943020d9bdc6dbfbdcdae01bd45ea78d953d791a4505050565b6000806115d861127f565b6001600160a01b031614806115ef575060125460ff165b905090565b6001600160a01b0381811660009081526015602052604090206001015416801561161e5780611620565b825b90506001600160a01b0381166116495760405163516101e760e11b815260040160405180910390fd5b8460000361166a5760405163606ab7a160e11b815260040160405180910390fd5b6004548451602086015163ffffffff8281169316929092149160009161169091906117a3565b90506000826116b6576000828152600760205260409020546001600160a01b03166116bc565b60208701515b6001600160a01b038087166000908152600a60209081526040808320938516835292905220549091508881101561170657604051630a1e6d4d60e01b815260040160405180910390fd5b6001600160a01b038087166000908152600a60209081526040808320938616835292905220898203905561173b82868b611936565b604080516001600160a01b0387811682528481166020830152918101859052606081018b9052336080820152908716907ffacf3161e9675ca1ca84a16d238bc838c7e2084c302cf411d9da7ac0391f64869060a00160405180910390a2505050505050505050565b600082826040516020016117c792919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b806000036117f1575050565b6001600160a01b03821661181857604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611861573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118859190611eef565b905061189c6001600160a01b038316333086611975565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa1580156118e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119089190611eef565b6119129190611e90565b1461193057604051630e40773560e21b815260040160405180910390fd5b50505050565b8060000361194357505050565b6001600160a01b03831661196a57604051633a48ca7b60e11b815260040160405180910390fd5b61127a8383836119e0565b6040516001600160a01b03808516602483015283166044820152606481018290526119309085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611a10565b6040516001600160a01b03831660248201526044810182905261127a90849063a9059cbb60e01b906064016119a9565b6000611a65826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611ae79092919063ffffffff16565b80519091501561127a5780806020019051810190611a839190611f08565b61127a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084015b60405180910390fd5b6060611af68484600085611afe565b949350505050565b606082471015611b5f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611ade565b600080866001600160a01b03168587604051611b7b9190611f4e565b60006040518083038185875af1925050503d8060008114611bb8576040519150601f19603f3d011682016040523d82523d6000602084013e611bbd565b606091505b5091509150611bce87838387611bd9565b979650505050505050565b60608315611c48578251600003611c41576001600160a01b0385163b611c415760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611ade565b5081611af6565b611af68383815115611c5d5781518083602001fd5b8060405162461bcd60e51b8152600401611ade9190611f6a565b6001600160a01b0381168114611c8c57600080fd5b50565b600060208284031215611ca157600080fd5b8135611cac81611c77565b9392505050565b60008060408385031215611cc657600080fd5b8235611cd181611c77565b91506020830135611ce181611c77565b809150509250929050565b600080600060608486031215611d0157600080fd5b833592506020840135611d1381611c77565b91506040840135611d2381611c77565b809150509250925092565b60008060408385031215611d4157600080fd5b823591506020830135611ce181611c77565b600060208284031215611d6557600080fd5b5035919050565b600060408284031215611d7e57600080fd5b6040516040810181811067ffffffffffffffff82111715611daf57634e487b7160e01b600052604160045260246000fd5b604052905080823563ffffffff81168114611dc957600080fd5b8152602092830135920191909152919050565b600080600060808486031215611df157600080fd5b611dfb8585611d6c565b9250604084013591506060840135611d2381611c77565b60008060008060a08587031215611e2857600080fd5b611e328686611d6c565b9350604085013592506060850135611e4981611c77565b91506080850135611e5981611c77565b939692955090935050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561096157610961611e7a565b808202811582820484141761096157610961611e7a565b600082611ed757634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561096157610961611e7a565b600060208284031215611f0157600080fd5b5051919050565b600060208284031215611f1a57600080fd5b81518015158114611cac57600080fd5b60005b83811015611f45578181015183820152602001611f2d565b50506000910152565b60008251611f60818460208701611f2a565b9190910192915050565b6020815260008251806020840152611f89816040850160208701611f2a565b601f01601f1916919091016040019291505056fea2646970667358221220873f6c5e48aec71192a2a188478ea1be49359b708a88acea8d0d9d0b04a20b1f64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x14B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x82904716 GT PUSH2 0xB6 JUMPI DUP1 PUSH4 0xDA3A892F GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xDA3A892F EQ PUSH2 0x416 JUMPI DUP1 PUSH4 0xE9160F3E EQ PUSH2 0x436 JUMPI DUP1 PUSH4 0xF259CD27 EQ PUSH2 0x475 JUMPI DUP1 PUSH4 0xF72C5048 EQ PUSH2 0x495 JUMPI DUP1 PUSH4 0xFD5BD5FE EQ PUSH2 0x4B5 JUMPI DUP1 PUSH4 0xFFAF3F1A EQ PUSH2 0x4D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x82904716 EQ PUSH2 0x327 JUMPI DUP1 PUSH4 0x8770E682 EQ PUSH2 0x347 JUMPI DUP1 PUSH4 0x911B8EE2 EQ PUSH2 0x385 JUMPI DUP1 PUSH4 0x9BF6D875 EQ PUSH2 0x3A5 JUMPI DUP1 PUSH4 0xB214C901 EQ PUSH2 0x3BA JUMPI DUP1 PUSH4 0xC6BF691D EQ PUSH2 0x3DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2D3F9EF6 GT PUSH2 0x108 JUMPI DUP1 PUSH4 0x2D3F9EF6 EQ PUSH2 0x258 JUMPI DUP1 PUSH4 0x3B688DA6 EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0x41258B5C EQ PUSH2 0x2BF JUMPI DUP1 PUSH4 0x4B72C5DA EQ PUSH2 0x2DF JUMPI DUP1 PUSH4 0x54064594 EQ PUSH2 0x2F4 JUMPI DUP1 PUSH4 0x582C78D2 EQ PUSH2 0x307 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4376FF4 EQ PUSH2 0x150 JUMPI DUP1 PUSH4 0x951D6D8 EQ PUSH2 0x172 JUMPI DUP1 PUSH4 0x9935B8F EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0x12D57170 EQ PUSH2 0x1B6 JUMPI DUP1 PUSH4 0x1407093B EQ PUSH2 0x1EF JUMPI DUP1 PUSH4 0x22A3C007 EQ PUSH2 0x238 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x16B CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH2 0x4F5 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x17E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x1B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH2 0x5F2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x183 PUSH2 0x1D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x228 PUSH2 0x20A CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x18D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x244 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x253 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CB3 JUMP JUMPDEST PUSH2 0x752 JUMP JUMPDEST PUSH2 0x170 PUSH2 0x266 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CEC JUMP JUMPDEST PUSH2 0x8D1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A7 PUSH2 0x286 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x18D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x183 PUSH2 0x2DA CALLDATASIZE PUSH1 0x4 PUSH2 0x1CB3 JUMP JUMPDEST PUSH2 0x93A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 PUSH2 0x183 JUMP JUMPDEST PUSH2 0x170 PUSH2 0x302 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D2E JUMP JUMPDEST PUSH2 0x967 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x322 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D53 JUMP JUMPDEST PUSH2 0x9CF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x333 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x342 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D53 JUMP JUMPDEST PUSH2 0xACE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x353 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x228 PUSH2 0x362 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x3A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH2 0xB99 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xC SLOAD PUSH2 0x183 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x3D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CB3 JUMP JUMPDEST PUSH2 0xD0E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A7 PUSH2 0x3F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD AND SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x422 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x431 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH2 0xE42 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x442 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A7 PUSH2 0x451 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH3 0x10000 SWAP1 DIV AND SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x481 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x490 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8F JUMP JUMPDEST PUSH2 0xFC5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x4B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1DDC JUMP JUMPDEST PUSH2 0x10E2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x4D0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E12 JUMP JUMPDEST PUSH2 0x1142 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x170 PUSH2 0x4F0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CB3 JUMP JUMPDEST PUSH2 0x120C JUMP JUMPDEST CALLER PUSH2 0x4FE PUSH2 0x127F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x539 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x536 JUMPI PUSH2 0x536 PUSH2 0x1E64 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x557 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x595 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5D3ABC43 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE CALLER SWAP1 DUP4 ADD MSTORE PUSH32 0x903522F09B29FA2102F5D8D8B181AC8EDB4CFAF5D705076E4AB95117F6BB02AD SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO ISZERO DUP4 MSTORE PUSH2 0x100 DUP3 DIV AND ISZERO ISZERO SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH3 0x10000 SWAP1 SWAP3 DIV DUP5 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 DUP3 ADD SLOAD DUP4 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP1 SWAP3 AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x3 ADD SLOAD PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH3 0x93A80 SWAP1 PUSH2 0x674 SWAP1 TIMESTAMP PUSH2 0x1E90 JUMP JUMPDEST GT PUSH2 0x692 JUMPI PUSH1 0x40 MLOAD PUSH4 0x76B2AD07 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x6B2 JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0x6B8 JUMP JUMPDEST DUP2 PUSH1 0x40 ADD MLOAD JUMPDEST SWAP1 POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ PUSH2 0x6E3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3253A7BD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6F6 DUP4 DUP4 PUSH1 0x80 ADD MLOAD DUP5 PUSH1 0x40 ADD MLOAD PUSH2 0x12AD JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x733 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 PUSH3 0x10000 SWAP1 SWAP2 DIV AND CALLER EQ PUSH2 0x795 JUMPI PUSH1 0x40 MLOAD PUSH4 0x407C5849 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO ISZERO DUP4 MSTORE PUSH2 0x100 DUP3 DIV AND ISZERO ISZERO SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH3 0x10000 SWAP1 SWAP3 DIV DUP5 AND SWAP3 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 DUP2 ADD SLOAD DUP5 AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x2 DUP2 ADD SLOAD DUP5 AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE SWAP2 DUP5 AND SWAP1 SUB PUSH2 0x826 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE49614B PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x85C JUMPI PUSH1 0x40 MLOAD PUSH4 0x1B2163F1 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 PUSH1 0x2 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP10 DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE TIMESTAMP PUSH1 0x3 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x80 DUP7 ADD MLOAD SWAP2 MLOAD SWAP1 SWAP5 SWAP2 SWAP1 SWAP2 AND SWAP3 SWAP2 PUSH32 0xEE0158B57ADC03901D8B16C48CD10C33CA1283EE96C6E0D30F817CEBA74DC4A1 SWAP2 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 NOT ADD PUSH2 0x8F5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x925 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x930 DUP4 DUP4 DUP4 PUSH2 0x1348 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x16 SSTORE POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 NOT ADD PUSH2 0x98B JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x9BB JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x9C6 DUP3 DUP3 CALLER PUSH2 0x1348 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x16 SSTORE JUMP JUMPDEST CALLER PUSH2 0x9D8 PUSH2 0x127F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0xA13 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xA10 JUMPI PUSH2 0xA10 PUSH2 0x1E64 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0xA31 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2710 PUSH1 0x64 PUSH2 0xA41 DUP3 PUSH1 0x5F PUSH2 0x1EA3 JUMP JUMPDEST PUSH2 0xA4B SWAP2 SWAP1 PUSH2 0x1EBA JUMP JUMPDEST DUP3 LT ISZERO PUSH2 0xA6B JUMPI PUSH1 0x40 MLOAD PUSH4 0xB74BFC83 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xA8C JUMPI PUSH1 0x40 MLOAD PUSH4 0x73470833 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xEB6222A0B32216F861511E9ABA88FAA9549B749C2E0AD47DF4E288565DE5CEAE SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH2 0xAD7 PUSH2 0x127F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0xB12 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xB0F JUMPI PUSH2 0xB0F PUSH2 0x1E64 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0xB30 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 ISZERO DUP1 PUSH2 0xB3E JUMPI POP PUSH1 0xC SLOAD DUP2 EQ JUMPDEST ISZERO PUSH2 0xB5C JUMPI PUSH1 0x40 MLOAD PUSH4 0xD9F9FAD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xA7FE33308FB33AE6F3259E3C7C954AE3D6CD7F428CD17F653413C2CDC691666D SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0xC SSTORE JUMP JUMPDEST CALLER PUSH2 0xBA2 PUSH2 0x127F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0xBDD JUMPI POP PUSH1 0x1 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xBDA JUMPI PUSH2 0xBDA PUSH2 0x1E64 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0xBFB JUMPI PUSH1 0x40 MLOAD PUSH4 0x60237F6B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xC22 JUMPI PUSH1 0x40 MLOAD PUSH4 0x85DD613 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO ISZERO DUP1 DUP5 MSTORE PUSH2 0x100 DUP4 DIV SWAP1 SWAP2 AND ISZERO ISZERO SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH3 0x10000 SWAP1 DIV DUP6 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x1 DUP2 ADD SLOAD DUP5 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x2 DUP2 ADD SLOAD SWAP1 SWAP4 AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x3 SWAP1 SWAP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 PUSH2 0xCB5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2B31895F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xFFFF NOT AND SWAP1 SSTORE SWAP1 MLOAD CALLER DUP2 MSTORE PUSH32 0xBEE3E974BB6A6F44F20096EDE047C191EEF60322E65E4EE4BD3392230A8716D5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO ISZERO DUP4 MSTORE PUSH2 0x100 DUP3 DIV AND ISZERO ISZERO SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH3 0x10000 SWAP1 SWAP3 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 DUP4 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 DUP3 ADD SLOAD DUP2 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x2 DUP3 ADD SLOAD AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE SWAP1 ISZERO ISZERO DUP1 PUSH2 0xD95 JUMPI POP PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO ISZERO JUMPDEST DUP1 PUSH2 0xDAC JUMPI POP PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO ISZERO JUMPDEST DUP1 PUSH2 0xDBB JUMPI POP PUSH1 0x0 DUP2 PUSH1 0xA0 ADD MLOAD GT JUMPDEST ISZERO PUSH2 0xDD9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEFDAD31 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xDEB JUMPI CALLER SWAP3 POP JUMPDEST PUSH2 0xDF7 CALLER DUP5 PUSH1 0x0 PUSH2 0x12AD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0xE12 JUMPI PUSH2 0xE12 CALLER DUP4 PUSH1 0x0 PUSH2 0x1539 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH32 0x2622745E83F97F2D871EF785497C1EEBA6F9BB94C7DD486CF28228E814D929E4 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH2 0xE4B PUSH2 0x127F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0xE86 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xE83 JUMPI PUSH2 0xE83 PUSH2 0x1E64 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0xEA4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xC0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO DUP1 ISZERO DUP1 DUP6 MSTORE PUSH2 0x100 DUP5 DIV SWAP1 SWAP3 AND ISZERO ISZERO SWAP6 DUP5 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH3 0x10000 SWAP1 SWAP2 DIV DUP7 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x1 DUP3 ADD SLOAD DUP6 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x2 DUP3 ADD SLOAD SWAP1 SWAP5 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0x3 ADD SLOAD PUSH1 0xA0 DUP5 ADD MSTORE SWAP1 PUSH2 0xF29 JUMPI POP PUSH2 0xF27 PUSH2 0x15CD JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0xF47 JUMPI PUSH1 0x40 MLOAD PUSH4 0x75BEFCCB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0xF6A JUMPI PUSH1 0x40 MLOAD PUSH4 0xC896C2D9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE CALLER SWAP1 DUP4 ADD MSTORE PUSH32 0xC428FAD4DF337E27BE8199C35A79CA103E8D00538A69B0F9701FB2BDF7D6C84C SWAP2 ADD PUSH2 0xAC2 JUMP JUMPDEST CALLER PUSH2 0xFCE PUSH2 0x127F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x1009 JUMPI POP PUSH1 0x1 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1006 JUMPI PUSH2 0x1006 PUSH2 0x1E64 JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x1027 JUMPI PUSH1 0x40 MLOAD PUSH4 0x60237F6B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x104E JUMPI PUSH1 0x40 MLOAD PUSH4 0x330EF51F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1088 JUMPI PUSH1 0x40 MLOAD PUSH4 0x916E73BD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD CALLER DUP2 MSTORE PUSH32 0xBC68405E644DA2AAF25623CE2199DA82C6DFD2E1DE102B400EBA6A091704D4F4 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 NOT ADD PUSH2 0x1106 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x1136 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x930 DUP3 DUP5 DUP4 CALLER PUSH2 0x15F4 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 NOT ADD PUSH2 0x1166 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x1196 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH3 0x10000 SWAP1 DIV SWAP1 SWAP2 AND SWAP1 DUP2 ISZERO PUSH2 0x11C6 JUMPI DUP2 PUSH2 0x11C8 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ PUSH2 0x11F3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF3DC2D19 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x11FF DUP6 DUP8 DUP7 DUP7 PUSH2 0x15F4 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x16 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 PUSH3 0x10000 SWAP1 SWAP2 DIV AND CALLER EQ PUSH2 0x124F JUMPI PUSH1 0x40 MLOAD PUSH4 0x407C5849 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0x127A SWAP2 DUP6 SWAP2 DUP6 SWAP2 AND PUSH2 0x1539 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x12DF JUMPI PUSH1 0x40 MLOAD PUSH4 0x9A3EC21 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH3 0x10000 PUSH1 0x1 PUSH1 0xB0 SHL SUB NOT AND PUSH3 0x10000 DUP9 DUP8 AND SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 SWAP4 DUP6 AND SWAP3 SWAP2 PUSH32 0xD73892E8827A6025D74A01FCA72A8E0D9E2C04080272E728F8861410C7D3C2D1 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x136F JUMPI PUSH1 0x40 MLOAD PUSH4 0x39773CBF PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x0 SUB PUSH2 0x1390 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2A241419 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD PUSH4 0xFFFFFFFF AND DUP1 DUP5 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ISZERO DUP1 ISZERO PUSH2 0x13DB JUMPI POP PUSH1 0x20 DUP2 ADD MLOAD ISZERO JUMPDEST ISZERO PUSH2 0x13FB JUMPI PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP3 ADD MSTORE JUMPDEST PUSH1 0x0 PUSH2 0x140F DUP3 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0x0 ADD MLOAD PUSH2 0x17A3 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x144B JUMPI PUSH1 0x40 MLOAD PUSH4 0xA13F958F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1453 PUSH2 0x15CD JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x1479 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0x1497 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1464C65F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x14A1 DUP5 DUP7 PUSH2 0x17E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP9 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 DUP1 SLOAD DUP8 SWAP3 SWAP1 PUSH2 0x14D8 SWAP1 DUP5 SWAP1 PUSH2 0x1EDC JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP5 SWAP1 MSTORE SWAP2 DUP2 ADD DUP8 SWAP1 MSTORE CALLER PUSH1 0x60 DUP3 ADD MSTORE SWAP1 DUP5 AND SWAP1 PUSH32 0xCC3100122C1752FE0F6BFA5503175BC53EB00B5F2D774E81EFEDCD2B10A6D24B SWAP1 PUSH1 0x80 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x156B JUMPI PUSH1 0x40 MLOAD PUSH4 0x1B0043F5 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP8 DUP7 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 SWAP4 DUP6 AND SWAP3 SWAP2 PUSH32 0x31F32EBF07B0AC7FE173F7B7F3F943020D9BDC6DBFBDCDAE01BD45EA78D953D7 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x15D8 PUSH2 0x127F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x15EF JUMPI POP PUSH1 0x12 SLOAD PUSH1 0xFF AND JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD AND DUP1 ISZERO PUSH2 0x161E JUMPI DUP1 PUSH2 0x1620 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1649 JUMPI PUSH1 0x40 MLOAD PUSH4 0x516101E7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 PUSH1 0x0 SUB PUSH2 0x166A JUMPI PUSH1 0x40 MLOAD PUSH4 0x606AB7A1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD DUP5 MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH4 0xFFFFFFFF DUP3 DUP2 AND SWAP4 AND SWAP3 SWAP1 SWAP3 EQ SWAP2 PUSH1 0x0 SWAP2 PUSH2 0x1690 SWAP2 SWAP1 PUSH2 0x17A3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x16B6 JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x16BC JUMP JUMPDEST PUSH1 0x20 DUP8 ADD MLOAD JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP2 POP DUP9 DUP2 LT ISZERO PUSH2 0x1706 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA1E6D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP10 DUP3 SUB SWAP1 SSTORE PUSH2 0x173B DUP3 DUP7 DUP12 PUSH2 0x1936 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND DUP3 MSTORE DUP5 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP2 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP12 SWAP1 MSTORE CALLER PUSH1 0x80 DUP3 ADD MSTORE SWAP1 DUP8 AND SWAP1 PUSH32 0xFACF3161E9675CA1CA84A16D238BC838C7E2084C302CF411D9DA7AC0391F6486 SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x17C7 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH4 0xFFFFFFFF AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x17F1 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1818 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2A38B133 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP3 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1861 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1885 SWAP2 SWAP1 PUSH2 0x1EEF JUMP JUMPDEST SWAP1 POP PUSH2 0x189C PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP7 PUSH2 0x1975 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP4 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18E4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1908 SWAP2 SWAP1 PUSH2 0x1EEF JUMP JUMPDEST PUSH2 0x1912 SWAP2 SWAP1 PUSH2 0x1E90 JUMP JUMPDEST EQ PUSH2 0x1930 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE407735 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x1943 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x196A JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A48CA7B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x127A DUP4 DUP4 DUP4 PUSH2 0x19E0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1930 SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x1A10 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x127A SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A65 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1AE7 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x127A JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1A83 SWAP2 SWAP1 PUSH2 0x1F08 JUMP JUMPDEST PUSH2 0x127A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH2 0x1AF6 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x1AFE JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x1B5F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1ADE JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1B7B SWAP2 SWAP1 PUSH2 0x1F4E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1BB8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1BBD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1BCE DUP8 DUP4 DUP4 DUP8 PUSH2 0x1BD9 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1C48 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x1C41 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x1C41 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1ADE JUMP JUMPDEST POP DUP2 PUSH2 0x1AF6 JUMP JUMPDEST PUSH2 0x1AF6 DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x1C5D JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1ADE SWAP2 SWAP1 PUSH2 0x1F6A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1C8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1CA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1CAC DUP2 PUSH2 0x1C77 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1CC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1CD1 DUP2 PUSH2 0x1C77 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1CE1 DUP2 PUSH2 0x1C77 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1D01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1D13 DUP2 PUSH2 0x1C77 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x1D23 DUP2 PUSH2 0x1C77 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1CE1 DUP2 PUSH2 0x1C77 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1DAF JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 POP DUP1 DUP3 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1DC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD CALLDATALOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1DF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1DFB DUP6 DUP6 PUSH2 0x1D6C JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP5 ADD CALLDATALOAD PUSH2 0x1D23 DUP2 PUSH2 0x1C77 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1E28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E32 DUP7 DUP7 PUSH2 0x1D6C JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x1E49 DUP2 PUSH2 0x1C77 JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP6 ADD CALLDATALOAD PUSH2 0x1E59 DUP2 PUSH2 0x1C77 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x961 JUMPI PUSH2 0x961 PUSH2 0x1E7A JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x961 JUMPI PUSH2 0x961 PUSH2 0x1E7A JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1ED7 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x961 JUMPI PUSH2 0x961 PUSH2 0x1E7A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1CAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1F45 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1F2D JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1F60 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1F2A JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1F89 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x1F2A JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP8 EXTCODEHASH PUSH13 0x5E48AEC71192A2A188478EA1BE 0x49 CALLDATALOAD SWAP12 PUSH17 0x8A88ACEA8D0D9D0B04A20B1F64736F6C63 NUMBER STOP ADDMOD GT STOP CALLER ","sourceMap":"1329:24379:76:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12989:304;;;;;;;;;;-1:-1:-1;12989:304:76;;;;;:::i;:::-;;:::i;:::-;;7365:108;;;;;;;;;;-1:-1:-1;7443:25:76;;7365:108;;;548:25:181;;;536:2;521:18;7365:108:76;;;;;;;;15092:806;;;;;;;;;;-1:-1:-1;15092:806:76;;;;;:::i;:::-;;:::i;8994:148::-;;;;;;;;;;-1:-1:-1;8994:148:76;;;;;:::i;:::-;-1:-1:-1;;;;;9095:24:76;9073:7;9095:24;;;:15;:24;;;;;:42;;;;8994:148;7725:122;;;;;;;;;;-1:-1:-1;7725:122:76;;;;;:::i;:::-;-1:-1:-1;;;;;7809:24:76;7790:4;7809:24;;;:15;:24;;;;;:33;;;;7725:122;;;;749:14:181;;742:22;724:41;;712:2;697:18;7725:122:76;584:187:181;14151:794:76;;;;;;;;;;-1:-1:-1;14151:794:76;;;;;:::i;:::-;;:::i;17644:200::-;;;;;;:::i;:::-;;:::i;8650:130::-;;;;;;;;;;-1:-1:-1;8650:130:76;;;;;:::i;:::-;-1:-1:-1;;;;;8742:24:76;;;8720:7;8742:24;;;:15;:24;;;;;:33;;;;;8650:130;;;;-1:-1:-1;;;;;1794:32:181;;;1776:51;;1764:2;1749:18;8650:130:76;1630:203:181;9254:138:76;;;;;;;;;;-1:-1:-1;9254:138:76;;;;;:::i;:::-;;:::i;7477:114::-;;;;;;;;;;-1:-1:-1;1023:6:104;7477:114:76;;18363:167;;;;;;:::i;:::-;;:::i;11679:620::-;;;;;;;;;;-1:-1:-1;11679:620:76;;;;;:::i;:::-;;:::i;11109:362::-;;;;;;;;;;-1:-1:-1;11109:362:76;;;;;:::i;:::-;;:::i;9527:137::-;;;;;;;;;;-1:-1:-1;9527:137:76;;;;;:::i;:::-;-1:-1:-1;;;;;9620:24:76;9601:4;9620:24;;;:15;:24;;;;;:39;;;;;;;9527:137;10390:563;;;;;;;;;;-1:-1:-1;10390:563:76;;;;;:::i;:::-;;:::i;9146:104::-;;;;;;;;;;-1:-1:-1;9222:23:76;;9146:104;;16208:847;;;;;;;;;;-1:-1:-1;16208:847:76;;;;;:::i;:::-;;:::i;8056:127::-;;;;;;;;;;-1:-1:-1;8056:127:76;;;;;:::i;:::-;-1:-1:-1;;;;;8144:24:76;;;8122:7;8144:24;;;:15;:24;;;;;:34;;;;;8056:127;12408:456;;;;;;;;;;-1:-1:-1;12408:456:76;;;;;:::i;:::-;;:::i;8327:119::-;;;;;;;;;;-1:-1:-1;8327:119:76;;;;;:::i;:::-;-1:-1:-1;;;;;8411:24:76;;;8389:7;8411:24;;;:15;:24;;;;;:30;;;;;;8327:119;9818:446;;;;;;;;;;-1:-1:-1;9818:446:76;;;;;:::i;:::-;;:::i;20203:222::-;;;;;;;;;;-1:-1:-1;20203:222:76;;;;;:::i;:::-;;:::i;19138:547::-;;;;;;;;;;-1:-1:-1;19138:547:76;;;;;:::i;:::-;;:::i;13684:186::-;;;;;;;;;;-1:-1:-1;13684:186:76;;;;;:::i;:::-;;:::i;12989:304::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;-1:-1:-1;;;;;13077:24:76;::::1;:1;:24:::0;;;:15:::1;:24;::::0;;;;:39;::::1;::::0;::::1;;;13072:105;;13125:52;;-1:-1:-1::0;;;13125:52:76::1;;;;;;;;;;;13072:105;-1:-1:-1::0;;;;;13191:24:76;::::1;:1;:24:::0;;;:15:::1;:24;::::0;;;;;;;;13184:46;;-1:-1:-1;;13184:46:76::1;::::0;;13242;;4402:34:181;;;13277:10:76::1;4452:18:181::0;;;4445:43;13242:46:76::1;::::0;4337:18:181;13242:46:76::1;;;;;;;12989:304:::0;:::o;15092:806::-;-1:-1:-1;;;;;15188:24:76;;;15159:26;15188:24;;;:15;:24;;;;;;;;;15159:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1137:6:104;;15257:42:76;;:15;:42;:::i;:::-;:72;15253:143;;15344:52;;-1:-1:-1;;;15344:52:76;;;;;;;;;;;15253:143;15446:15;;;;15427:16;;-1:-1:-1;;;;;15446:29:76;;:62;;15493:6;:15;;;15446:62;;;15478:6;:12;;;15446:62;15427:81;-1:-1:-1;15518:10:76;-1:-1:-1;;;;;15518:22:76;;;15514:101;;15557:51;;-1:-1:-1;;;15557:51:76;;;;;;;;;;;15514:101;15653:55;15669:7;15678:6;:15;;;15695:6;:12;;;15653:15;:55::i;:::-;15753:15;;;;-1:-1:-1;;;;;15753:29:76;;15749:90;;-1:-1:-1;;;;;15799:24:76;;:1;:24;;;:15;:24;;;;;:33;;15792:40;;-1:-1:-1;;;;;;15792:40:76;;;15749:90;-1:-1:-1;;;;;;;15851:24:76;:1;:24;;;:15;:24;;;;;:42;;15844:49;15092:806::o;14151:794::-;-1:-1:-1;;;;;7208:24:76;;;:1;:24;;;:15;:24;;;;;:30;14240:7;;7208:30;;;;;7242:10;7208:44;7204:103;;7261:46;;-1:-1:-1;;;7261:46:76;;;;;;;;;;;7204:103;-1:-1:-1;;;;;14430:24:76;;::::1;14401:26;14430:24:::0;;;:15:::1;:24;::::0;;;;;;;;14401:53;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;;;::::0;;::::1;::::0;::::1;;;;::::0;;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;;::::0;;;;;;14464:25;::::1;::::0;;14460:84:::1;;14498:46;;-1:-1:-1::0;;;14498:46:76::1;;;;;;;;;;;14460:84;14636:9;-1:-1:-1::0;;;;;14617:28:76::1;:6;:15;;;-1:-1:-1::0;;;;;14617:28:76::1;::::0;14613:85:::1;;14654:44;;-1:-1:-1::0;;;14654:44:76::1;;;;;;;;;;;14613:85;-1:-1:-1::0;;;;;14743:24:76;;::::1;:1;:24:::0;;;:15:::1;:24;::::0;;;;;:33:::1;::::0;::::1;:45:::0;;-1:-1:-1;;;;;;14743:45:76::1;::::0;;::::1;::::0;;::::1;::::0;;;14839:15:::1;14794:42;::::0;;::::1;:60:::0;;;;14913:15:::1;::::0;::::1;::::0;14884:56;;14743:45;;14884:56;;;::::1;::::0;14743:24;14884:56:::1;::::0;::::1;14249:696;14151:794:::0;;;:::o;17644:200::-;1556:9:68;;-1:-1:-1;;1556:30:68;1552:89;;1595:46;;-1:-1:-1;;;1595:46:68;;;;;;;;;;;1552:89;808:1:104;1708:9:68;:29;3834:9:::1;::::0;-1:-1:-1;;;3834:9:68;::::1;;;3830:62;;;3852:40;;-1:-1:-1::0;;;3852:40:68::1;;;;;;;;;;;3830:62;17791:48:76::2;17814:7;17823:6;17831:7;17791:22;:48::i;:::-;-1:-1:-1::0;;709:1:104;1876:9:68;:33;-1:-1:-1;17644:200:76:o;9254:138::-;-1:-1:-1;;;;;9354:25:76;;;9332:7;9354:25;;;:16;:25;;;;;;;;:33;;;;;;;;;;9254:138;;;;;:::o;18363:167::-;1556:9:68;;-1:-1:-1;;1556:30:68;1552:89;;1595:46;;-1:-1:-1;;;1595:46:68;;;;;;;;;;;1552:89;808:1:104;1708:9:68;:29;3834:9:::1;::::0;-1:-1:-1;;;3834:9:68;::::1;;;3830:62;;;3852:40;;-1:-1:-1::0;;;3852:40:68::1;;;;;;;;;;;3830:62;18474:51:76::2;18497:7;18506:6;18514:10;18474:22;:51::i;:::-;-1:-1:-1::0;;709:1:104;1876:9:68;:33;18363:167:76:o;11679:620::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;1023:6:104::1;12032:3:76;12012:16;1023:6:104::0;12026:2:76::1;12012:16;:::i;:::-;12011:24;;;;:::i;:::-;11998:10;:37;11994:99;;;12044:49;;-1:-1:-1::0;;;12044:49:76::1;;;;;;;;;;;11994:99;12117:11;12104:10;:24;12100:86;;;12137:49;;-1:-1:-1::0;;;12137:49:76::1;;;;;;;;;;;12100:86;12192:25;:38:::0;;;12242:52:::1;::::0;;5333:25:181;;;12283:10:76::1;5389:2:181::0;5374:18;;5367:60;12242:52:76::1;::::0;5306:18:181;12242:52:76::1;;;;;;;;11759:540;11679:620:::0;:::o;11109:362::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;11203:19:76;;;:64:::1;;-1:-1:-1::0;11244:23:76::1;::::0;11226:41;::::1;11203:64;11199:152;;;11282:69;;-1:-1:-1::0;;;11282:69:76::1;;;;;;;;;;;11199:152;11363:56;::::0;;5333:25:181;;;11408:10:76::1;5389:2:181::0;5374:18;;5367:60;11363:56:76::1;::::0;5306:18:181;11363:56:76::1;;;;;;;11426:23;:40:::0;11109:362::o;10390:563::-;3004:10:68;2974:26;:24;:26::i;:::-;-1:-1:-1;;;;;2974:40:68;;;:83;;;;-1:-1:-1;3041:16:68;3026:10;3018:1;:19;;;:7;:19;;;;;;;;:39;;;;;;;;:::i;:::-;;;2974:83;2970:156;;;3072:54;;-1:-1:-1;;;3072:54:68;;;;;;;;;;;2970:156;-1:-1:-1;;;;;10500:21:76;::::1;10496:77;;10530:43;;-1:-1:-1::0;;;10530:43:76::1;;;;;;;;;;;10496:77;-1:-1:-1::0;;;;;10644:24:76;;::::1;10615:26;10644:24:::0;;;:15:::1;:24;::::0;;;;;;;;10615:53;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;::::1;::::0;;::::1;;;::::0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;;;;10674:69:::1;;10703:40;;-1:-1:-1::0;;;10703:40:76::1;;;;;;;;;;;10674:69;-1:-1:-1::0;;;;;10799:24:76;::::1;:1;:24:::0;;;:15:::1;:24;::::0;;;;;;;;10792:40;;-1:-1:-1;;10838:46:76;;;10914:34;;10937:10:::1;1776:51:181::0;;10914:34:76::1;::::0;1749:18:181;10914:34:76::1;;;;;;;10459:494;10390:563:::0;:::o;16208:847::-;16364:10;16319:26;16348:27;;;:15;:27;;;;;;;;;16319:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16319:56:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16392:26;;;:66;;-1:-1:-1;16428:16:76;;;;-1:-1:-1;;;;;16428:30:76;;;16392:66;:105;;;-1:-1:-1;16468:15:76;;;;-1:-1:-1;;;;;16468:29:76;;;16392:105;:143;;;;16534:1;16507:6;:24;;;:28;16392:143;16381:230;;;16557:47;;-1:-1:-1;;;16557:47:76;;;;;;;;;;;16381:230;-1:-1:-1;;;;;16659:20:76;;16655:60;;16698:10;16689:19;;16655:60;16770:47;16786:10;16798:6;16814:1;16770:15;:47::i;:::-;-1:-1:-1;;;;;16896:24:76;;;16892:100;;16930:55;16950:10;16962;16982:1;16930:19;:55::i;:::-;17021:29;;17039:10;;17021:29;;;;;16279:776;16208:847;;:::o;12408:456::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;-1:-1:-1;;;;;12518:24:76;;::::1;12489:26;12518:24:::0;;;:15:::1;:24;::::0;;;;;;;;12489:53;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;;;::::0;;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;;::::0;;;;;;12552:48:::1;;;12573:27;:25;:27::i;:::-;12572:28;12552:48;12548:108;;;12609:47;;-1:-1:-1::0;;;12609:47:76::1;;;;;;;;;;;12548:108;12666:6;:21;;;12662:88;;;12696:54;;-1:-1:-1::0;;;12696:54:76::1;;;;;;;;;;;12662:88;-1:-1:-1::0;;;;;12757:24:76;::::1;:1;:24:::0;;;:15:::1;:24;::::0;;;;;;;;:46;;-1:-1:-1;;12757:46:76::1;;;::::0;;12815:44;;4402:34:181;;;12848:10:76::1;4452:18:181::0;;;4445:43;12815:44:76::1;::::0;4337:18:181;12815:44:76::1;4190:304:181::0;9818:446:76;3004:10:68;2974:26;:24;:26::i;:::-;-1:-1:-1;;;;;2974:40:68;;;:83;;;;-1:-1:-1;3041:16:68;3026:10;3018:1;:19;;;:7;:19;;;;;;;;:39;;;;;;;;:::i;:::-;;;2974:83;2970:156;;;3072:54;;-1:-1:-1;;;3072:54:68;;;;;;;;;;;2970:156;-1:-1:-1;;;;;9926:21:76;::::1;9922:75;;9956:41;;-1:-1:-1::0;;;9956:41:76::1;;;;;;;;;;;9922:75;-1:-1:-1::0;;;;;10044:24:76;::::1;:1;:24:::0;;;:15:::1;:24;::::0;;;;:33;::::1;;10040:88;;;10086:42;;-1:-1:-1::0;;;10086:42:76::1;;;;;;;;;;;10040:88;-1:-1:-1::0;;;;;10157:24:76;::::1;:1;:24:::0;;;:15:::1;:24;::::0;;;;;;;;:40;;-1:-1:-1;;10157:40:76::1;10193:4;10157:40;::::0;;10227:32;;10248:10:::1;1776:51:181::0;;10227:32:76::1;::::0;1749:18:181;10227:32:76::1;;;;;;;9818:446:::0;:::o;20203:222::-;1556:9:68;;-1:-1:-1;;1556:30:68;1552:89;;1595:46;;-1:-1:-1;;;1595:46:68;;;;;;;;;;;1552:89;808:1:104;1708:9:68;:29;3834:9:::1;::::0;-1:-1:-1;;;3834:9:68;::::1;;;3830:62;;;3852:40;;-1:-1:-1::0;;;3852:40:68::1;;;;;;;;;;;3830:62;20357:63:76::2;20383:7;20392:10;20404:3;20409:10;20357:25;:63::i;19138:547::-:0;1556:9:68;;-1:-1:-1;;1556:30:68;1552:89;;1595:46;;-1:-1:-1;;;1595:46:68;;;;;;;;;;;1552:89;808:1:104;1708:9:68;:29;3834:9:::1;::::0;-1:-1:-1;;;3834:9:68;::::1;;;3830:62;;;3852:40;;-1:-1:-1::0;;;3852:40:68::1;;;;;;;;;;;3830:62;-1:-1:-1::0;;;;;19400:24:76;;::::2;19384:13;19400:24:::0;;;:15:::2;:24;::::0;;;;:30;;;::::2;::::0;;::::2;::::0;19459:19;;:37:::2;;19491:5;19459:37;;;19481:7;19459:37;19436:60:::0;-1:-1:-1;19506:10:76::2;-1:-1:-1::0;;;;;19506:26:76;::::2;;19502:88;;19541:49;;-1:-1:-1::0;;;19541:49:76::2;;;;;;;;;;;19502:88;19620:60;19646:7;19655:10;19667:3;19672:7;19620:25;:60::i;:::-;-1:-1:-1::0;;709:1:104;1876:9:68;:33;-1:-1:-1;;;;19138:547:76:o;13684:186::-;-1:-1:-1;;;;;7208:24:76;;;:1;:24;;;:15;:24;;;;;:30;13774:7;;7208:30;;;;;7242:10;7208:44;7204:103;;7261:46;;-1:-1:-1;;;7261:46:76;;;;;;;;;;;7204:103;-1:-1:-1;;;;;13830:24:76;;::::1;:1;:24:::0;;;:15:::1;:24;::::0;;;;:34:::1;;::::0;13789:76:::1;::::0;13809:7;;13818:10;;13830:34:::1;13789:19;:76::i;:::-;13684:186:::0;;;:::o;2273:130:106:-;2368:30;;-1:-1:-1;;;;;2368:30:106;;2273:130::o;21249:367:76:-;21407:8;-1:-1:-1;;;;;21394:21:76;:9;-1:-1:-1;;;;;21394:21:76;;21390:73;;21424:39;;-1:-1:-1;;;21424:39:76;;;;;;;;;;;21390:73;-1:-1:-1;;;;;21491:24:76;;;:1;:24;;;:15;:24;;;;;;:41;;-1:-1:-1;;;;;;21491:41:76;;;;;;;;;;;;;;;21562:49;;21491:41;;21562:49;;;21491:24;21562:49;;;21249:367;;;:::o;22093:1602::-;-1:-1:-1;;;;;22251:21:76;;22247:83;;22281:49;;-1:-1:-1;;;22281:49:76;;;;;;;;;;;22247:83;22379:7;22390:1;22379:12;22375:75;;22400:50;;-1:-1:-1;;;22400:50:76;;;;;;;;;;;22375:75;-1:-1:-1;;;;;22630:35:76;;22603:24;22630:35;;;:27;:35;;;;;;;;;22603:62;;;;;;;;;;;;;;;;;;;;;;;;;;;22675:21;:51;;;;-1:-1:-1;22700:12:76;;;;:26;22675:51;22671:315;;;22914:8;;;;22895:27;;-1:-1:-1;;;;;335:23:173;;22930:12:76;;;:49;22671:315;22991:11;23005:65;23039:9;:12;;;23053:9;:16;;;23005:33;:65::i;:::-;23081:1;:19;;;:14;:19;;;;;:28;;;:19;;-1:-1:-1;;;;23081:28:76;;;;23076:114;;23126:57;;-1:-1:-1;;;23126:57:76;;;;;;;;;;;23076:114;23242:27;:25;:27::i;:::-;23241:28;:59;;;;-1:-1:-1;;;;;;7809:24:76;;7790:4;7809:24;;;:15;:24;;;;;:33;;;23273:27;23241:59;23237:125;;;23315:47;;-1:-1:-1;;;23315:47:76;;;;;;;;;;;23237:125;23404:47;23435:6;23443:7;23404:30;:47::i;:::-;-1:-1:-1;;;;;23571:25:76;;;:1;:25;;;:16;:25;;;;;;;;:33;;;;;;;;;;;:44;;23608:7;;23571:1;:44;;23608:7;;23571:44;:::i;:::-;;;;-1:-1:-1;;23627:63:76;;;-1:-1:-1;;;;;5855:15:181;;;5837:34;;5902:2;5887:18;;5880:34;;;5930:18;;;5923:34;;;23679:10:76;5988:2:181;5973:18;;5966:43;23627:63:76;;;;;;5786:3:181;5771:19;23627:63:76;;;;;;;22200:1495;;22093:1602;;;:::o;20674:393::-;20840:8;-1:-1:-1;;;;;20827:21:76;:9;-1:-1:-1;;;;;20827:21:76;;20823:84;;20857:50;;-1:-1:-1;;;20857:50:76;;;;;;;;;;;20823:84;-1:-1:-1;;;;;20939:24:76;;;:1;:24;;;:15;:24;;;;;;:34;;:45;;-1:-1:-1;;;;;;20939:45:76;;;;;;;;;;21014:48;;20939:45;;21014:48;;;20939:24;21014:48;;;20674:393;;;:::o;4034:153:68:-;4094:4;;4113:26;:24;:26::i;:::-;-1:-1:-1;;;;;4113:40:68;;:69;;;-1:-1:-1;4157:25:68;;;;4113:69;4106:76;;4034:153;:::o;24073:1633:76:-;-1:-1:-1;;;;;8144:24:76;;;24286:17;8144:24;;;:15;:24;;;;;:34;;;;24351:23;;:41;;24383:9;24351:41;;;24377:3;24351:41;24339:53;-1:-1:-1;;;;;;24440:23:76;;24436:88;;24472:52;;-1:-1:-1;;;24472:52:76;;;;;;;;;;;24436:88;24573:7;24584:1;24573:12;24569:75;;24594:50;;-1:-1:-1;;;24594:50:76;;;;;;;;;;;24569:75;24691:8;;24670:17;;24969:13;;;;24691:8;24670:29;;;24691:8;;24670:29;;;;;24651:16;;24935:67;;24969:13;24935:33;:67::i;:::-;24921:81;;25008:13;25024:11;:92;;25082:1;:19;;;:14;:19;;;;;:34;-1:-1:-1;;;;;25082:34:76;25024:92;;;25065:13;;;;25038:41;-1:-1:-1;;;;;25183:25:76;;;25159:21;25183:25;;;:16;:25;;;;;;;;:32;;;;;;;;;;25008:108;;-1:-1:-1;25286:23:76;;;25282:91;;;25318:55;;-1:-1:-1;;;25318:55:76;;;;;;;;;;;25282:91;-1:-1:-1;;;;;25429:25:76;;;:1;:25;;;:16;:25;;;;;;;;:32;;;;;;;;;25464:23;;;25429:58;;25557:57;25455:5;25595:9;25480:7;25557:30;:57::i;:::-;25626:75;;;-1:-1:-1;;;;;6335:15:181;;;6317:34;;6387:15;;;6382:2;6367:18;;6360:43;6419:18;;;6412:34;;;6477:2;6462:18;;6455:34;;;25690:10:76;6520:3:181;6505:19;;6498:44;25626:75:76;;;;;;6266:3:181;6251:19;25626:75:76;;;;;;;24219:1487;;;;;24073:1633;;;;:::o;19324:146:102:-;19408:7;19451:3;19456:7;19440:24;;;;;;;;6725:25:181;;;6798:10;6786:23;6781:2;6766:18;;6759:51;6713:2;6698:18;;6553:263;19440:24:102;;;;;;;;;;;;;19430:35;;;;;;19423:42;;19324:146;;;;:::o;2052:843::-;2182:7;2193:1;2182:12;2178:39;;2052:843;;:::o;2178:39::-;-1:-1:-1;;;;;2274:20:102;;2270:105;;2311:57;;-1:-1:-1;;;2311:57:102;;;;;;;;;;;2270:105;2525:30;;-1:-1:-1;;;2525:30:102;;2549:4;2525:30;;;1776:51:181;2419:6:102;;2381:20;;-1:-1:-1;;;;;2525:15:102;;;;;1749:18:181;;2525:30:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2506:49;-1:-1:-1;2597:58:102;-1:-1:-1;;;;;2597:22:102;;2620:10;2640:4;2647:7;2597:22;:58::i;:::-;2756:30;;-1:-1:-1;;;2756:30:102;;2780:4;2756:30;;;1776:51:181;2801:7:102;;2789:8;;-1:-1:-1;;;;;2756:15:102;;;;;1749:18:181;;2756:30:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;;;:::i;:::-;:52;2752:139;;2825:59;;-1:-1:-1;;;2825:59:102;;;;;;;;;;;2752:139;2123:772;;2052:843;;:::o;3194:444::-;3353:7;3364:1;3353:12;3349:39;;3194:444;;;:::o;3349:39::-;-1:-1:-1;;;;;3445:20:102;;3441:76;;3474:43;;-1:-1:-1;;;3474:43:102;;;;;;;;;;;3441:76;3573:60;3611:6;3620:3;3625:7;3573:22;:60::i;974:241:56:-;1139:68;;-1:-1:-1;;;;;7268:15:181;;;1139:68:56;;;7250:34:181;7320:15;;7300:18;;;7293:43;7352:18;;;7345:34;;;1112:96:56;;1132:5;;-1:-1:-1;;;1162:27:56;7185:18:181;;1139:68:56;;;;-1:-1:-1;;1139:68:56;;;;;;;;;;;;;;-1:-1:-1;;;;;1139:68:56;-1:-1:-1;;;;;;1139:68:56;;;;;;;;;;1112:19;:96::i;763:205::-;902:58;;-1:-1:-1;;;;;7582:32:181;;902:58:56;;;7564:51:181;7631:18;;;7624:34;;;875:86:56;;895:5;;-1:-1:-1;;;925:23:56;7537:18:181;;902:58:56;7390:274:181;3747:706:56;4166:23;4192:69;4220:4;4192:69;;;;;;;;;;;;;;;;;4200:5;-1:-1:-1;;;;;4192:27:56;;;:69;;;;;:::i;:::-;4275:17;;4166:95;;-1:-1:-1;4275:21:56;4271:176;;4370:10;4359:30;;;;;;;;;;;;:::i;:::-;4351:85;;;;-1:-1:-1;;;4351:85:56;;8153:2:181;4351:85:56;;;8135:21:181;8192:2;8172:18;;;8165:30;8231:34;8211:18;;;8204:62;-1:-1:-1;;;8282:18:181;;;8275:40;8332:19;;4351:85:56;;;;;;;;3873:223:57;4006:12;4037:52;4059:6;4067:4;4073:1;4076:12;4037:21;:52::i;:::-;4030:59;3873:223;-1:-1:-1;;;;3873:223:57:o;4960:446::-;5125:12;5182:5;5157:21;:30;;5149:81;;;;-1:-1:-1;;;5149:81:57;;8564:2:181;5149:81:57;;;8546:21:181;8603:2;8583:18;;;8576:30;8642:34;8622:18;;;8615:62;-1:-1:-1;;;8693:18:181;;;8686:36;8739:19;;5149:81:57;8362:402:181;5149:81:57;5241:12;5255:23;5282:6;-1:-1:-1;;;;;5282:11:57;5301:5;5308:4;5282:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5240:73;;;;5330:69;5357:6;5365:7;5374:10;5386:12;5330:26;:69::i;:::-;5323:76;4960:446;-1:-1:-1;;;;;;;4960:446:57:o;7466:628::-;7646:12;7674:7;7670:418;;;7701:10;:17;7722:1;7701:22;7697:286;;-1:-1:-1;;;;;1465:19:57;;;7908:60;;;;-1:-1:-1;;;7908:60:57;;9518:2:181;7908:60:57;;;9500:21:181;9557:2;9537:18;;;9530:30;9596:31;9576:18;;;9569:59;9645:18;;7908:60:57;9316:353:181;7908:60:57;-1:-1:-1;8003:10:57;7996:17;;7670:418;8044:33;8052:10;8064:12;8775:17;;:21;8771:379;;9003:10;8997:17;9059:15;9046:10;9042:2;9038:19;9031:44;8771:379;9126:12;9119:20;;-1:-1:-1;;;9119:20:57;;;;;;;;:::i;14:131:181:-;-1:-1:-1;;;;;89:31:181;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:247::-;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:181:o;776:388::-;844:6;852;905:2;893:9;884:7;880:23;876:32;873:52;;;921:1;918;911:12;873:52;960:9;947:23;979:31;1004:5;979:31;:::i;:::-;1029:5;-1:-1:-1;1086:2:181;1071:18;;1058:32;1099:33;1058:32;1099:33;:::i;:::-;1151:7;1141:17;;;776:388;;;;;:::o;1169:456::-;1246:6;1254;1262;1315:2;1303:9;1294:7;1290:23;1286:32;1283:52;;;1331:1;1328;1321:12;1283:52;1367:9;1354:23;1344:33;;1427:2;1416:9;1412:18;1399:32;1440:31;1465:5;1440:31;:::i;:::-;1490:5;-1:-1:-1;1547:2:181;1532:18;;1519:32;1560:33;1519:32;1560:33;:::i;:::-;1612:7;1602:17;;;1169:456;;;;;:::o;1838:315::-;1906:6;1914;1967:2;1955:9;1946:7;1942:23;1938:32;1935:52;;;1983:1;1980;1973:12;1935:52;2019:9;2006:23;1996:33;;2079:2;2068:9;2064:18;2051:32;2092:31;2117:5;2092:31;:::i;2158:180::-;2217:6;2270:2;2258:9;2249:7;2245:23;2241:32;2238:52;;;2286:1;2283;2276:12;2238:52;-1:-1:-1;2309:23:181;;2158:180;-1:-1:-1;2158:180:181:o;2343:678::-;2397:5;2445:4;2433:9;2428:3;2424:19;2420:30;2417:50;;;2463:1;2460;2453:12;2417:50;2496:4;2490:11;2540:4;2532:6;2528:17;2611:6;2599:10;2596:22;2575:18;2563:10;2560:34;2557:62;2554:185;;;2661:10;2656:3;2652:20;2649:1;2642:31;2696:4;2693:1;2686:15;2724:4;2721:1;2714:15;2554:185;2755:4;2748:24;2790:6;-1:-1:-1;2790:6:181;2820:23;;2887:10;2874:24;;2862:37;;2852:65;;2913:1;2910;2903:12;2852:65;2926:23;;3010:2;2995:18;;;2982:32;2965:15;;2958:57;;;;2343:678;;-1:-1:-1;2343:678:181:o;3026:440::-;3137:6;3145;3153;3206:3;3194:9;3185:7;3181:23;3177:33;3174:53;;;3223:1;3220;3213:12;3174:53;3246:45;3283:7;3272:9;3246:45;:::i;:::-;3236:55;;3338:2;3327:9;3323:18;3310:32;3300:42;;3392:2;3381:9;3377:18;3364:32;3405:31;3430:5;3405:31;:::i;3471:582::-;3591:6;3599;3607;3615;3668:3;3656:9;3647:7;3643:23;3639:33;3636:53;;;3685:1;3682;3675:12;3636:53;3708:45;3745:7;3734:9;3708:45;:::i;:::-;3698:55;;3800:2;3789:9;3785:18;3772:32;3762:42;;3854:2;3843:9;3839:18;3826:32;3867:31;3892:5;3867:31;:::i;:::-;3917:5;-1:-1:-1;3974:3:181;3959:19;;3946:33;3988;3946;3988;:::i;:::-;3471:582;;;;-1:-1:-1;3471:582:181;;-1:-1:-1;;3471:582:181:o;4058:127::-;4119:10;4114:3;4110:20;4107:1;4100:31;4150:4;4147:1;4140:15;4174:4;4171:1;4164:15;4499:127;4560:10;4555:3;4551:20;4548:1;4541:31;4591:4;4588:1;4581:15;4615:4;4612:1;4605:15;4631:128;4698:9;;;4719:11;;;4716:37;;;4733:18;;:::i;4764:168::-;4837:9;;;4868;;4885:15;;;4879:22;;4865:37;4855:71;;4906:18;;:::i;4937:217::-;4977:1;5003;4993:132;;5047:10;5042:3;5038:20;5035:1;5028:31;5082:4;5079:1;5072:15;5110:4;5107:1;5100:15;4993:132;-1:-1:-1;5139:9:181;;4937:217::o;5438:125::-;5503:9;;;5524:10;;;5521:36;;;5537:18;;:::i;6821:184::-;6891:6;6944:2;6932:9;6923:7;6919:23;6915:32;6912:52;;;6960:1;6957;6950:12;6912:52;-1:-1:-1;6983:16:181;;6821:184;-1:-1:-1;6821:184:181:o;7669:277::-;7736:6;7789:2;7777:9;7768:7;7764:23;7760:32;7757:52;;;7805:1;7802;7795:12;7757:52;7837:9;7831:16;7890:5;7883:13;7876:21;7869:5;7866:32;7856:60;;7912:1;7909;7902:12;8769:250;8854:1;8864:113;8878:6;8875:1;8872:13;8864:113;;;8954:11;;;8948:18;8935:11;;;8928:39;8900:2;8893:10;8864:113;;;-1:-1:-1;;9011:1:181;8993:16;;8986:27;8769:250::o;9024:287::-;9153:3;9191:6;9185:13;9207:66;9266:6;9261:3;9254:4;9246:6;9242:17;9207:66;:::i;:::-;9289:16;;;;;9024:287;-1:-1:-1;;9024:287:181:o;9674:396::-;9823:2;9812:9;9805:21;9786:4;9855:6;9849:13;9898:6;9893:2;9882:9;9878:18;9871:34;9914:79;9986:6;9981:2;9970:9;9966:18;9961:2;9953:6;9949:15;9914:79;:::i;:::-;10054:2;10033:15;-1:-1:-1;;10029:29:181;10014:45;;;;10061:2;10010:54;;9674:396;-1:-1:-1;;9674:396:181:o"},"gasEstimates":{"creation":{"codeDepositCost":"1629400","executionCost":"1708","totalCost":"1631108"},"external":{"LIQUIDITY_FEE_DENOMINATOR()":"270","LIQUIDITY_FEE_NUMERATOR()":"2316","acceptProposedRouterOwner(address)":"65168","addRouterLiquidity(uint256,address)":"infinite","addRouterLiquidityFor(uint256,address,address)":"infinite","approveRouter(address)":"32788","approveRouterForPortal(address)":"infinite","getProposedRouterOwner(address)":"2612","getProposedRouterOwnerTimestamp(address)":"2616","getRouterApproval(address)":"2655","getRouterApprovalForPortal(address)":"2599","getRouterOwner(address)":"2616","getRouterRecipient(address)":"2700","initializeRouter(address,address)":"infinite","maxRoutersPerTransfer()":"2370","proposeRouterOwner(address,address)":"infinite","removeRouterLiquidity((uint32,bytes32),uint256,address)":"infinite","removeRouterLiquidityFor((uint32,bytes32),uint256,address,address)":"infinite","routerBalances(address,address)":"infinite","setLiquidityFeeNumerator(uint256)":"28429","setMaxRoutersPerTransfer(uint256)":"30253","setRouterRecipient(address,address)":"infinite","unapproveRouter(address)":"39329","unapproveRouterForPortal(address)":"32612"},"internal":{"_addLiquidityForRouter(uint256,address,address)":"infinite","_removeLiquidityForRouter(uint256,struct TokenId memory,address payable,address)":"infinite","_setRouterOwner(address,address,address)":"infinite","_setRouterRecipient(address,address,address)":"infinite"}},"methodIdentifiers":{"LIQUIDITY_FEE_DENOMINATOR()":"4b72c5da","LIQUIDITY_FEE_NUMERATOR()":"0951d6d8","acceptProposedRouterOwner(address)":"09935b8f","addRouterLiquidity(uint256,address)":"54064594","addRouterLiquidityFor(uint256,address,address)":"2d3f9ef6","approveRouter(address)":"f259cd27","approveRouterForPortal(address)":"da3a892f","getProposedRouterOwner(address)":"3b688da6","getProposedRouterOwnerTimestamp(address)":"12d57170","getRouterApproval(address)":"1407093b","getRouterApprovalForPortal(address)":"8770e682","getRouterOwner(address)":"e9160f3e","getRouterRecipient(address)":"c6bf691d","initializeRouter(address,address)":"b214c901","maxRoutersPerTransfer()":"9bf6d875","proposeRouterOwner(address,address)":"22a3c007","removeRouterLiquidity((uint32,bytes32),uint256,address)":"f72c5048","removeRouterLiquidityFor((uint32,bytes32),uint256,address,address)":"fd5bd5fe","routerBalances(address,address)":"41258b5c","setLiquidityFeeNumerator(uint256)":"582c78d2","setMaxRoutersPerTransfer(uint256)":"82904716","setRouterRecipient(address,address)":"ffaf3f1a","unapproveRouter(address)":"911b8ee2","unapproveRouterForPortal(address)":"04376ff4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_feeOnTransferNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_nativeAssetNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleOutgoingAsset_notNative\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__acceptProposedRouterOwner_badCaller\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__acceptProposedRouterOwner_notElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__addLiquidityForRouter_amountIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__addLiquidityForRouter_badRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__addLiquidityForRouter_capReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__addLiquidityForRouter_routerEmpty\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__approveRouterForPortal_alreadyApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__approveRouterForPortal_notAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__approveRouter_alreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__approveRouter_routerEmpty\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__initializeRouter_configNotEmpty\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__onlyRouterOwner_notRouterOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__proposeRouterOwner_badRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__proposeRouterOwner_notNewOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__removeRouterLiquidityFor_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__removeRouterLiquidity_amountIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__removeRouterLiquidity_insufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__removeRouterLiquidity_recipientEmpty\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__setLiquidityFeeNumerator_tooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__setLiquidityFeeNumerator_tooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__setRouterOwner_noChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__setRouterRecipient_notNewRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__unapproveRouterForPortal_notApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__unapproveRouter_notAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__unapproveRouter_routerEmpty\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityFeeNumerator\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"LiquidityFeeNumeratorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxRoutersPerTransfer\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MaxRoutersPerTransferUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RouterAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RouterApprovedForPortal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"RouterInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"local\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RouterLiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"local\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RouterLiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prevOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"RouterOwnerAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prevProposed\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newProposed\",\"type\":\"address\"}],\"name\":\"RouterOwnerProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prevRecipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRecipient\",\"type\":\"address\"}],\"name\":\"RouterRecipientSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RouterRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RouterUnapprovedForPortal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LIQUIDITY_FEE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LIQUIDITY_FEE_NUMERATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"acceptProposedRouterOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_local\",\"type\":\"address\"}],\"name\":\"addRouterLiquidity\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_local\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"addRouterLiquidityFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"approveRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"approveRouterForPortal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"getProposedRouterOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"getProposedRouterOwnerTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"getRouterApproval\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"getRouterApprovalForPortal\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"getRouterOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"getRouterRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"}],\"name\":\"initializeRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxRoutersPerTransfer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_proposed\",\"type\":\"address\"}],\"name\":\"proposeRouterOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"removeRouterLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"removeRouterLiquidityFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"routerBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_numerator\",\"type\":\"uint256\"}],\"name\":\"setLiquidityFeeNumerator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newMaxRouters\",\"type\":\"uint256\"}],\"name\":\"setMaxRoutersPerTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"}],\"name\":\"setRouterRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"unapproveRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"unapproveRouterForPortal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"LiquidityFeeNumeratorUpdated(uint256,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"liquidityFeeNumerator\":\"- The LIQUIDITY_FEE_NUMERATOR new value\"}},\"MaxRoutersPerTransferUpdated(uint256,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"maxRoutersPerTransfer\":\"- The maxRoutersPerTransfer new value\"}},\"RouterAdded(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"router\":\"- The address of the added router\"}},\"RouterApprovedForPortal(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"router\":\"- The address of the approved router\"}},\"RouterInitialized(address)\":{\"details\":\"This does not confer permissions onto the router, only the configuration\",\"params\":{\"router\":\"The router initialized\"}},\"RouterLiquidityAdded(address,address,bytes32,uint256,address)\":{\"params\":{\"amount\":\"- The amount of liquidity added\",\"caller\":\"- The account that called the function\",\"key\":\"- The hash of the canonical id and domain\",\"local\":\"- The address of the token added (all liquidity held in local asset)\",\"router\":\"- The address of the router the funds were credited to\"}},\"RouterLiquidityRemoved(address,address,address,bytes32,uint256,address)\":{\"params\":{\"amount\":\"- The amount of liquidity withdrawn\",\"caller\":\"- The account that called the function\",\"local\":\"- The address of the token withdrawn\",\"router\":\"- The router you are removing liquidity from\",\"to\":\"- The address the funds were withdrawn to\"}},\"RouterOwnerAccepted(address,address,address)\":{\"params\":{\"newOwner\":\"- The address of the new owner of the router\",\"prevOwner\":\"- The address of the previous owner of the router\",\"router\":\"- The address of the added router\"}},\"RouterOwnerProposed(address,address,address)\":{\"params\":{\"newProposed\":\"- The address of the new proposed\",\"prevProposed\":\"- The address of the previous proposed\",\"router\":\"- The address of the added router\"}},\"RouterRecipientSet(address,address,address)\":{\"params\":{\"newRecipient\":\"- The address of the new recipient of the router\",\"prevRecipient\":\"- The address of the previous recipient of the router\",\"router\":\"- The address of the added router\"}},\"RouterRemoved(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"router\":\"- The address of the removed router\"}},\"RouterUnapprovedForPortal(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"router\":\"- The address of the disapproved router\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProposedRouterOwner(address)\":{\"params\":{\"_router\":\"Router address to set recipient\"}},\"addRouterLiquidity(uint256,address)\":{\"details\":\"The liquidity will be held in the local asset, which is the representation if you are *not* on the canonical domain, and the canonical asset otherwise.\",\"params\":{\"_amount\":\"- The amount of liquidity to add for the router\",\"_local\":\"- The address of the asset you're adding liquidity for. If adding liquidity of the native asset, routers may use `address(0)` or the wrapped asset\"}},\"addRouterLiquidityFor(uint256,address,address)\":{\"details\":\"The liquidity will be held in the local asset, which is the representation if you are *not* on the canonical domain, and the canonical asset otherwise.\",\"params\":{\"_amount\":\"- The amount of liquidity to add for the router\",\"_local\":\"- The address of the asset you're adding liquidity for. If adding liquidity of the native asset, routers may use `address(0)` or the wrapped asset\",\"_router\":\"The router you are adding liquidity on behalf of\"}},\"approveRouter(address)\":{\"params\":{\"_router\":\"Router address to setup\"}},\"approveRouterForPortal(address)\":{\"params\":{\"_router\":\"- The router address to approve\"}},\"getProposedRouterOwner(address)\":{\"details\":\"All routers must wait for the delay timeout before accepting a new owner\",\"params\":{\"_router\":\"The relevant router address\"}},\"getProposedRouterOwnerTimestamp(address)\":{\"details\":\"All routers must wait for the delay timeout before accepting a new owner\",\"params\":{\"_router\":\"The relevant router address\"}},\"getRouterApproval(address)\":{\"params\":{\"_router\":\"The relevant router address\"}},\"getRouterApprovalForPortal(address)\":{\"params\":{\"_router\":\"The relevant router address\"}},\"getRouterOwner(address)\":{\"params\":{\"_router\":\"The relevant router address\"}},\"getRouterRecipient(address)\":{\"details\":\"The recipient (if set) receives all funds when router liquidity is removed\",\"params\":{\"_router\":\"The relevant router address\"}},\"initializeRouter(address,address)\":{\"details\":\"Does not set allowlisting permissions, only owner and recipient\",\"params\":{\"_owner\":\"The owner (can change recipient, proposes new owners)\",\"_recipient\":\"Where liquidity will be withdrawn to\"}},\"proposeRouterOwner(address,address)\":{\"details\":\"If routers burn their ownership, they can no longer update the recipient\",\"params\":{\"_proposed\":\"Proposed owner Address to set to router\",\"_router\":\"Router address to set recipient\"}},\"removeRouterLiquidity((uint32,bytes32),uint256,address)\":{\"details\":\"Using the `_canonical` information in the interface instead of the local asset to allow routers to remove liquidity even if the asset is delisted\",\"params\":{\"_amount\":\"- The amount of liquidity to remove for the router\",\"_canonical\":\"The canonical token information in plaintext\",\"_to\":\"The address that will receive the liquidity being removed if no router recipient exists.\"}},\"removeRouterLiquidityFor((uint32,bytes32),uint256,address,address)\":{\"details\":\"Using the `_canonical` information in the interface instead of the local asset to allow routers to remove liquidity even if the asset is delisted\",\"params\":{\"_amount\":\"- The amount of liquidity to remove for the router native asset, routers may use `address(0)` or the wrapped asset\",\"_canonical\":\"The canonical token information in plaintext\",\"_router\":\"The address of the router\",\"_to\":\"The address that will receive the liquidity being removed\"}},\"setLiquidityFeeNumerator(uint256)\":{\"details\":\"Admin can set LIQUIDITY_FEE_NUMERATOR variable, Liquidity fee should be less than 5%\",\"params\":{\"_numerator\":\"new LIQUIDITY_FEE_NUMERATOR\"}},\"setMaxRoutersPerTransfer(uint256)\":{\"params\":{\"_newMaxRouters\":\"The new max amount of routers\"}},\"setRouterRecipient(address,address)\":{\"details\":\"Router should only be able to set this once otherwise if router key compromised, no problem is solved since attacker could just update recipient\",\"params\":{\"_recipient\":\"Recipient Address to set to router\",\"_router\":\"Router address to set recipient\"}},\"unapproveRouter(address)\":{\"params\":{\"_router\":\"Router address to remove\"}},\"unapproveRouterForPortal(address)\":{\"params\":{\"_router\":\"- The router address to remove approval\"}}},\"version\":1},\"userdoc\":{\"events\":{\"LiquidityFeeNumeratorUpdated(uint256,address)\":{\"notice\":\"Emitted when the LIQUIDITY_FEE_NUMERATOR variable is updated\"},\"MaxRoutersPerTransferUpdated(uint256,address)\":{\"notice\":\"Emitted when the maxRoutersPerTransfer variable is updated\"},\"RouterAdded(address,address)\":{\"notice\":\"Emitted when a new router is added\"},\"RouterApprovedForPortal(address,address)\":{\"notice\":\"Emitted when a router is approved for Portal\"},\"RouterInitialized(address)\":{\"notice\":\"Emitted when a router adds a config via `addRouterConfig`\"},\"RouterLiquidityAdded(address,address,bytes32,uint256,address)\":{\"notice\":\"Emitted when a router adds liquidity to the contract\"},\"RouterLiquidityRemoved(address,address,address,bytes32,uint256,address)\":{\"notice\":\"Emitted when a router withdraws liquidity from the contract\"},\"RouterOwnerAccepted(address,address,address)\":{\"notice\":\"Emitted when the owner of router is accepted\"},\"RouterOwnerProposed(address,address,address)\":{\"notice\":\"Emitted when the owner of router is proposed\"},\"RouterRecipientSet(address,address,address)\":{\"notice\":\"Emitted when the recipient of router is updated\"},\"RouterRemoved(address,address)\":{\"notice\":\"Emitted when an existing router is removed\"},\"RouterUnapprovedForPortal(address,address)\":{\"notice\":\"Emitted when a router is disapproved for Portal\"}},\"kind\":\"user\",\"methods\":{\"acceptProposedRouterOwner(address)\":{\"notice\":\"New router owner must accept role, or previous if proposed is 0x0\"},\"addRouterLiquidity(uint256,address)\":{\"notice\":\"This is used by any router to increase their available liquidity for a given asset.\"},\"addRouterLiquidityFor(uint256,address,address)\":{\"notice\":\"This is used by anyone to increase a router's available liquidity for a given asset.\"},\"approveRouter(address)\":{\"notice\":\"Used to allowlist a given router\"},\"approveRouterForPortal(address)\":{\"notice\":\"Allow router to use Portals\"},\"getProposedRouterOwner(address)\":{\"notice\":\"Returns the currently proposed router owner\"},\"getProposedRouterOwnerTimestamp(address)\":{\"notice\":\"Returns the currently proposed router owner timestamp\"},\"getRouterApproval(address)\":{\"notice\":\"Returns the approved router for the given router address\"},\"getRouterApprovalForPortal(address)\":{\"notice\":\"Returns whether the router is approved for portals or not\"},\"getRouterOwner(address)\":{\"notice\":\"Returns the router owner if it is set, or the router itself if not\"},\"getRouterRecipient(address)\":{\"notice\":\"Returns the recipient for the specified router\"},\"initializeRouter(address,address)\":{\"notice\":\"Can be called by anyone to set a config for their router (the msg.sender)\"},\"proposeRouterOwner(address,address)\":{\"notice\":\"Current owner or router may propose a new router owner\"},\"removeRouterLiquidity((uint32,bytes32),uint256,address)\":{\"notice\":\"This is used by any router to decrease their available liquidity for a given asset.\"},\"removeRouterLiquidityFor((uint32,bytes32),uint256,address,address)\":{\"notice\":\"This is used by any router owner to decrease their available liquidity for a given asset.\"},\"setLiquidityFeeNumerator(uint256)\":{\"notice\":\"Sets the LIQUIDITY_FEE_NUMERATOR\"},\"setMaxRoutersPerTransfer(uint256)\":{\"notice\":\"Used to set the max amount of routers a payment can be routed through\"},\"setRouterRecipient(address,address)\":{\"notice\":\"Sets the designated recipient for a router\"},\"unapproveRouter(address)\":{\"notice\":\"Used to remove routers that can transact crosschain\"},\"unapproveRouterForPortal(address)\":{\"notice\":\"Remove router access to use Portals\"}},\"notice\":\"This contract is designed to manage router access, meaning it maintains the router recipients, owners, and the router allowlist itself. As a router, there are three important permissions: `router` - this is the address that will sign bids sent to the sequencer `routerRecipient` - this is the address that receives funds when liquidity is withdrawn `routerOwner` - this is the address permitted to update recipients and propose new owners In cases where the owner is not set, the caller should be the `router` itself. In cases where the `routerRecipient` is not set, the funds can be removed to anywhere. When setting a new `routerOwner`, the current owner (or router) must create a proposal, which can be accepted by the proposed owner after the delay period. If the proposed owner is the empty address, then it must be accepted by the current owner.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/RoutersFacet.sol\":\"RoutersFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n  AppStorage internal s;\\n\\n  // ========== Custom Errors ===========\\n\\n  error BaseConnextFacet__onlyOwner_notOwner();\\n  error BaseConnextFacet__onlyProposed_notProposedOwner();\\n  error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n  error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n  error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n  error BaseConnextFacet__whenNotPaused_paused();\\n  error BaseConnextFacet__nonReentrant_reentrantCall();\\n  error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n  error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n  error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @dev Prevents a contract from calling itself, directly or indirectly.\\n   * Calling a `nonReentrant` function from another `nonReentrant`\\n   * function is not supported. It is possible to prevent this from happening\\n   * by making the `nonReentrant` function external, and making it call a\\n   * `private` function that does the actual work.\\n   */\\n  modifier nonReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._status = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._status = Constants.NOT_ENTERED;\\n  }\\n\\n  modifier nonXCallReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._xcallStatus = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._xcallStatus = Constants.NOT_ENTERED;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and router role.\\n   */\\n  modifier onlyOwnerOrRouter() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n      revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and watcher role.\\n   */\\n  modifier onlyOwnerOrWatcher() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n      revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and admin role.\\n   */\\n  modifier onlyOwnerOrAdmin() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n      revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if all functionality is paused\\n   */\\n  modifier whenNotPaused() {\\n    if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n    _;\\n  }\\n\\n  // ============ Internal functions ============\\n  /**\\n   * @notice Indicates if the router allowlist has been removed\\n   */\\n  function _isRouterAllowlistRemoved() internal view returns (bool) {\\n    return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n    address adopted = AssetLogic.getConfig(_key).adopted;\\n    if (adopted == address(0)) {\\n      revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n    }\\n    return adopted;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n    address representation = AssetLogic.getConfig(_key).representation;\\n    // If this is address(0), then there is no mintable token for this asset on this\\n    // domain\\n    return representation;\\n  }\\n\\n  /**\\n   * @notice Calculates a transferId\\n   */\\n  function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_params));\\n  }\\n\\n  /**\\n   * @notice Internal utility function that combines\\n   *         `_origin` and `_nonce`.\\n   * @dev Both origin and nonce should be less than 2^32 - 1\\n   * @param _origin Domain of chain where the transfer originated\\n   * @param _nonce The unique identifier for the message from origin to destination\\n   * @return Returns (`_origin` << 32) & `_nonce`\\n   */\\n  function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n    return (uint64(_origin) << 32) | _nonce;\\n  }\\n\\n  function _getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address) {\\n    return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n  }\\n\\n  function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n    return AssetLogic.getCanonicalTokenId(_candidate, s);\\n  }\\n\\n  function _getLocalAndAdoptedToken(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address, address) {\\n    address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n    address _adopted = _getAdoptedAsset(_key);\\n    return (_local, _adopted);\\n  }\\n\\n  function _isLocalOrigin(address _token) internal view returns (bool) {\\n    return AssetLogic.isLocalOrigin(_token, s);\\n  }\\n\\n  function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n    TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n    bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n    if (!AssetLogic.getConfig(_key).approval) {\\n      revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n    }\\n    return (_canonical, _key);\\n  }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/RoutersFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {RouterConfig} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\n\\nimport {BaseConnextFacet} from \\\"./BaseConnextFacet.sol\\\";\\n\\n/**\\n * @notice\\n * This contract is designed to manage router access, meaning it maintains the\\n * router recipients, owners, and the router allowlist itself.\\n *\\n * As a router, there are three important permissions:\\n * `router` - this is the address that will sign bids sent to the sequencer\\n * `routerRecipient` - this is the address that receives funds when liquidity is withdrawn\\n * `routerOwner` - this is the address permitted to update recipients and propose new owners\\n *\\n * In cases where the owner is not set, the caller should be the `router` itself. In cases where the\\n * `routerRecipient` is not set, the funds can be removed to anywhere.\\n *\\n * When setting a new `routerOwner`, the current owner (or router) must create a proposal, which\\n * can be accepted by the proposed owner after the delay period. If the proposed owner is the empty\\n * address, then it must be accepted by the current owner.\\n */\\ncontract RoutersFacet is BaseConnextFacet {\\n  // ========== Custom Errors ===========\\n  error RoutersFacet__acceptProposedRouterOwner_notElapsed();\\n  error RoutersFacet__acceptProposedRouterOwner_badCaller();\\n  error RoutersFacet__initializeRouter_configNotEmpty();\\n  error RoutersFacet__setRouterRecipient_notNewRecipient();\\n  error RoutersFacet__onlyRouterOwner_notRouterOwner();\\n  error RoutersFacet__unapproveRouter_routerEmpty();\\n  error RoutersFacet__unapproveRouter_notAdded();\\n  error RoutersFacet__approveRouter_routerEmpty();\\n  error RoutersFacet__approveRouter_alreadyAdded();\\n  error RoutersFacet__proposeRouterOwner_notNewOwner();\\n  error RoutersFacet__proposeRouterOwner_badRouter();\\n  error RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer();\\n  error RoutersFacet__addLiquidityForRouter_routerEmpty();\\n  error RoutersFacet__addLiquidityForRouter_amountIsZero();\\n  error RoutersFacet__addLiquidityForRouter_badRouter();\\n  error RoutersFacet__addLiquidityForRouter_capReached();\\n  error RoutersFacet__removeRouterLiquidity_recipientEmpty();\\n  error RoutersFacet__removeRouterLiquidity_amountIsZero();\\n  error RoutersFacet__removeRouterLiquidity_insufficientFunds();\\n  error RoutersFacet__removeRouterLiquidityFor_notOwner();\\n  error RoutersFacet__setLiquidityFeeNumerator_tooSmall();\\n  error RoutersFacet__setLiquidityFeeNumerator_tooLarge();\\n  error RoutersFacet__approveRouterForPortal_notAdded();\\n  error RoutersFacet__approveRouterForPortal_alreadyApproved();\\n  error RoutersFacet__unapproveRouterForPortal_notApproved();\\n  error RoutersFacet__setRouterOwner_noChange();\\n\\n  // ============ Properties ============\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted when a new router is added\\n   * @param router - The address of the added router\\n   * @param caller - The account that called the function\\n   */\\n  event RouterAdded(address indexed router, address caller);\\n\\n  /**\\n   * @notice Emitted when an existing router is removed\\n   * @param router - The address of the removed router\\n   * @param caller - The account that called the function\\n   */\\n  event RouterRemoved(address indexed router, address caller);\\n\\n  /**\\n   * @notice Emitted when the recipient of router is updated\\n   * @param router - The address of the added router\\n   * @param prevRecipient  - The address of the previous recipient of the router\\n   * @param newRecipient  - The address of the new recipient of the router\\n   */\\n  event RouterRecipientSet(address indexed router, address indexed prevRecipient, address indexed newRecipient);\\n\\n  /**\\n   * @notice Emitted when the owner of router is proposed\\n   * @param router - The address of the added router\\n   * @param prevProposed  - The address of the previous proposed\\n   * @param newProposed  - The address of the new proposed\\n   */\\n  event RouterOwnerProposed(address indexed router, address indexed prevProposed, address indexed newProposed);\\n\\n  /**\\n   * @notice Emitted when the owner of router is accepted\\n   * @param router - The address of the added router\\n   * @param prevOwner  - The address of the previous owner of the router\\n   * @param newOwner  - The address of the new owner of the router\\n   */\\n  event RouterOwnerAccepted(address indexed router, address indexed prevOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Emitted when a router adds a config via `addRouterConfig`\\n   * @dev This does not confer permissions onto the router, only the configuration\\n   * @param router The router initialized\\n   *\\n   */\\n  event RouterInitialized(address indexed router);\\n\\n  /**\\n   * @notice Emitted when the maxRoutersPerTransfer variable is updated\\n   * @param maxRoutersPerTransfer - The maxRoutersPerTransfer new value\\n   * @param caller - The account that called the function\\n   */\\n  event MaxRoutersPerTransferUpdated(uint256 maxRoutersPerTransfer, address caller);\\n\\n  /**\\n   * @notice Emitted when the LIQUIDITY_FEE_NUMERATOR variable is updated\\n   * @param liquidityFeeNumerator - The LIQUIDITY_FEE_NUMERATOR new value\\n   * @param caller - The account that called the function\\n   */\\n  event LiquidityFeeNumeratorUpdated(uint256 liquidityFeeNumerator, address caller);\\n\\n  /**\\n   * @notice Emitted when a router is approved for Portal\\n   * @param router - The address of the approved router\\n   * @param caller - The account that called the function\\n   */\\n  event RouterApprovedForPortal(address router, address caller);\\n\\n  /**\\n   * @notice Emitted when a router is disapproved for Portal\\n   * @param router - The address of the disapproved router\\n   * @param caller - The account that called the function\\n   */\\n  event RouterUnapprovedForPortal(address router, address caller);\\n\\n  /**\\n   * @notice Emitted when a router adds liquidity to the contract\\n   * @param router - The address of the router the funds were credited to\\n   * @param local - The address of the token added (all liquidity held in local asset)\\n   * @param key - The hash of the canonical id and domain\\n   * @param amount - The amount of liquidity added\\n   * @param caller - The account that called the function\\n   */\\n  event RouterLiquidityAdded(address indexed router, address local, bytes32 key, uint256 amount, address caller);\\n\\n  /**\\n   * @notice Emitted when a router withdraws liquidity from the contract\\n   * @param router - The router you are removing liquidity from\\n   * @param to - The address the funds were withdrawn to\\n   * @param local - The address of the token withdrawn\\n   * @param amount - The amount of liquidity withdrawn\\n   * @param caller - The account that called the function\\n   */\\n  event RouterLiquidityRemoved(\\n    address indexed router,\\n    address to,\\n    address local,\\n    bytes32 key,\\n    uint256 amount,\\n    address caller\\n  );\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Asserts caller is the router owner\\n   */\\n  modifier onlyRouterOwner(address _router) {\\n    if (s.routerConfigs[_router].owner != msg.sender) revert RoutersFacet__onlyRouterOwner_notRouterOwner();\\n    _;\\n  }\\n\\n  // ============ Getters ==============\\n\\n  function LIQUIDITY_FEE_NUMERATOR() public view returns (uint256) {\\n    return s.LIQUIDITY_FEE_NUMERATOR;\\n  }\\n\\n  function LIQUIDITY_FEE_DENOMINATOR() public pure returns (uint256) {\\n    return Constants.BPS_FEE_DENOMINATOR;\\n  }\\n\\n  /**\\n   * @notice Returns the approved router for the given router address\\n   * @param _router The relevant router address\\n   */\\n  function getRouterApproval(address _router) public view returns (bool) {\\n    return s.routerConfigs[_router].approved;\\n  }\\n\\n  /**\\n   * @notice Returns the recipient for the specified router\\n   * @dev The recipient (if set) receives all funds when router liquidity is removed\\n   * @param _router The relevant router address\\n   */\\n  function getRouterRecipient(address _router) public view returns (address) {\\n    return s.routerConfigs[_router].recipient;\\n  }\\n\\n  /**\\n   * @notice Returns the router owner if it is set, or the router itself if not\\n   * @param _router The relevant router address\\n   */\\n  function getRouterOwner(address _router) public view returns (address) {\\n    return s.routerConfigs[_router].owner;\\n  }\\n\\n  /**\\n   * @notice Returns the currently proposed router owner\\n   * @dev All routers must wait for the delay timeout before accepting a new owner\\n   * @param _router The relevant router address\\n   */\\n  function getProposedRouterOwner(address _router) public view returns (address) {\\n    return s.routerConfigs[_router].proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the currently proposed router owner timestamp\\n   * @dev All routers must wait for the delay timeout before accepting a new owner\\n   * @param _router The relevant router address\\n   */\\n  function getProposedRouterOwnerTimestamp(address _router) public view returns (uint256) {\\n    return s.routerConfigs[_router].proposedTimestamp;\\n  }\\n\\n  function maxRoutersPerTransfer() public view returns (uint256) {\\n    return s.maxRoutersPerTransfer;\\n  }\\n\\n  function routerBalances(address _router, address _asset) public view returns (uint256) {\\n    return s.routerBalances[_router][_asset];\\n  }\\n\\n  /**\\n   * @notice Returns whether the router is approved for portals or not\\n   * @param _router The relevant router address\\n   */\\n  function getRouterApprovalForPortal(address _router) public view returns (bool) {\\n    return s.routerConfigs[_router].portalApproved;\\n  }\\n\\n  // ============ Admin methods ==============\\n\\n  /**\\n   * @notice Used to allowlist a given router\\n   * @param _router Router address to setup\\n   */\\n  function approveRouter(address _router) external onlyOwnerOrRouter {\\n    // Sanity check: not empty\\n    if (_router == address(0)) revert RoutersFacet__approveRouter_routerEmpty();\\n\\n    // Sanity check: needs approval\\n    if (s.routerConfigs[_router].approved) revert RoutersFacet__approveRouter_alreadyAdded();\\n\\n    // Approve router\\n    s.routerConfigs[_router].approved = true;\\n\\n    // Emit event\\n    emit RouterAdded(_router, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Used to remove routers that can transact crosschain\\n   * @param _router Router address to remove\\n   */\\n  function unapproveRouter(address _router) external onlyOwnerOrRouter {\\n    // Sanity check: not empty\\n    if (_router == address(0)) revert RoutersFacet__unapproveRouter_routerEmpty();\\n\\n    // Sanity check: needs removal\\n    RouterConfig memory config = s.routerConfigs[_router];\\n    if (!config.approved) revert RoutersFacet__unapproveRouter_notAdded();\\n\\n    // Update approvals in config mapping\\n    delete s.routerConfigs[_router].approved;\\n    delete s.routerConfigs[_router].portalApproved;\\n\\n    // Emit event\\n    emit RouterRemoved(_router, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Used to set the max amount of routers a payment can be routed through\\n   * @param _newMaxRouters The new max amount of routers\\n   */\\n  function setMaxRoutersPerTransfer(uint256 _newMaxRouters) external onlyOwnerOrAdmin {\\n    if (_newMaxRouters == 0 || _newMaxRouters == s.maxRoutersPerTransfer)\\n      revert RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer();\\n\\n    emit MaxRoutersPerTransferUpdated(_newMaxRouters, msg.sender);\\n\\n    s.maxRoutersPerTransfer = _newMaxRouters;\\n  }\\n\\n  /**\\n   * @notice Sets the LIQUIDITY_FEE_NUMERATOR\\n   * @dev Admin can set LIQUIDITY_FEE_NUMERATOR variable, Liquidity fee should be less than 5%\\n   * @param _numerator new LIQUIDITY_FEE_NUMERATOR\\n   */\\n  function setLiquidityFeeNumerator(uint256 _numerator) external onlyOwnerOrAdmin {\\n    // Slightly misleading: the liquidity fee numerator is not the amount charged,\\n    // but the amount received after fees are deducted (e.g. 9995/10000 would be .005%).\\n    uint256 denominator = Constants.BPS_FEE_DENOMINATOR;\\n    if (_numerator < (denominator * 95) / 100) revert RoutersFacet__setLiquidityFeeNumerator_tooSmall();\\n\\n    if (_numerator > denominator) revert RoutersFacet__setLiquidityFeeNumerator_tooLarge();\\n    s.LIQUIDITY_FEE_NUMERATOR = _numerator;\\n\\n    emit LiquidityFeeNumeratorUpdated(_numerator, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Allow router to use Portals\\n   * @param _router - The router address to approve\\n   */\\n  function approveRouterForPortal(address _router) external onlyOwnerOrAdmin {\\n    RouterConfig memory config = s.routerConfigs[_router];\\n    if (!config.approved && !_isRouterAllowlistRemoved()) revert RoutersFacet__approveRouterForPortal_notAdded();\\n    if (config.portalApproved) revert RoutersFacet__approveRouterForPortal_alreadyApproved();\\n\\n    s.routerConfigs[_router].portalApproved = true;\\n\\n    emit RouterApprovedForPortal(_router, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Remove router access to use Portals\\n   * @param _router - The router address to remove approval\\n   */\\n  function unapproveRouterForPortal(address _router) external onlyOwnerOrAdmin {\\n    if (!s.routerConfigs[_router].portalApproved) revert RoutersFacet__unapproveRouterForPortal_notApproved();\\n\\n    delete s.routerConfigs[_router].portalApproved;\\n\\n    emit RouterUnapprovedForPortal(_router, msg.sender);\\n  }\\n\\n  // ============ Public methods ==============\\n\\n  /**\\n   * @notice Sets the designated recipient for a router\\n   * @dev Router should only be able to set this once otherwise if router key compromised,\\n   * no problem is solved since attacker could just update recipient\\n   * @param _router Router address to set recipient\\n   * @param _recipient Recipient Address to set to router\\n   */\\n  function setRouterRecipient(address _router, address _recipient) external onlyRouterOwner(_router) {\\n    _setRouterRecipient(_router, _recipient, s.routerConfigs[_router].recipient);\\n  }\\n\\n  /**\\n   * @notice Current owner or router may propose a new router owner\\n   * @dev If routers burn their ownership, they can no longer update the recipient\\n   * @param _router Router address to set recipient\\n   * @param _proposed Proposed owner Address to set to router\\n   */\\n  function proposeRouterOwner(address _router, address _proposed) external onlyRouterOwner(_router) {\\n    // NOTE: If routers burn their ownership, they can no longer update the recipient\\n\\n    // Check that proposed is different than current owner\\n    RouterConfig memory config = s.routerConfigs[_router];\\n    if (config.owner == _proposed) revert RoutersFacet__proposeRouterOwner_notNewOwner();\\n\\n    // Check that proposed is different than current proposed\\n    if (config.proposed == _proposed) revert RoutersFacet__proposeRouterOwner_badRouter();\\n\\n    // Set proposed owner + timestamp\\n    s.routerConfigs[_router].proposed = _proposed;\\n    s.routerConfigs[_router].proposedTimestamp = block.timestamp;\\n\\n    // Emit event\\n    emit RouterOwnerProposed(_router, config.proposed, _proposed);\\n  }\\n\\n  /**\\n   * @notice New router owner must accept role, or previous if proposed is 0x0\\n   * @param _router Router address to set recipient\\n   */\\n  function acceptProposedRouterOwner(address _router) external {\\n    RouterConfig memory config = s.routerConfigs[_router];\\n\\n    // Check timestamp has passed\\n    if (block.timestamp - config.proposedTimestamp <= Constants.GOVERNANCE_DELAY)\\n      revert RoutersFacet__acceptProposedRouterOwner_notElapsed();\\n\\n    // Check the caller\\n    address expected = config.proposed == address(0) ? config.owner : config.proposed;\\n    if (msg.sender != expected) {\\n      revert RoutersFacet__acceptProposedRouterOwner_badCaller();\\n    }\\n\\n    // Update the current owner\\n    _setRouterOwner(_router, config.proposed, config.owner);\\n\\n    // Reset proposal + timestamp\\n    if (config.proposed != address(0)) {\\n      delete s.routerConfigs[_router].proposed;\\n    }\\n    delete s.routerConfigs[_router].proposedTimestamp;\\n  }\\n\\n  /**\\n   * @notice Can be called by anyone to set a config for their router (the msg.sender)\\n   * @dev Does not set allowlisting permissions, only owner and recipient\\n   * @param _owner The owner (can change recipient, proposes new owners)\\n   * @param _recipient Where liquidity will be withdrawn to\\n   */\\n  function initializeRouter(address _owner, address _recipient) external {\\n    // Ensure the config is empty\\n    RouterConfig memory config = s.routerConfigs[msg.sender];\\n    if (\\n      config.owner != address(0) ||\\n      config.recipient != address(0) ||\\n      config.proposed != address(0) ||\\n      config.proposedTimestamp > 0\\n    ) {\\n      revert RoutersFacet__initializeRouter_configNotEmpty();\\n    }\\n\\n    // Default owner should be router\\n    if (_owner == address(0)) {\\n      _owner = msg.sender;\\n    }\\n    // Update routerOwner (zero address possible)\\n    _setRouterOwner(msg.sender, _owner, address(0));\\n\\n    // Update router recipient (fine to have no recipient provided)\\n    if (_recipient != address(0)) {\\n      _setRouterRecipient(msg.sender, _recipient, address(0));\\n    }\\n\\n    // Emit event\\n    emit RouterInitialized(msg.sender);\\n  }\\n\\n  /**\\n   * @notice This is used by anyone to increase a router's available liquidity for a given asset.\\n   * @dev The liquidity will be held in the local asset, which is the representation if you\\n   * are *not* on the canonical domain, and the canonical asset otherwise.\\n   * @param _amount - The amount of liquidity to add for the router\\n   * @param _local - The address of the asset you're adding liquidity for. If adding liquidity of the\\n   * native asset, routers may use `address(0)` or the wrapped asset\\n   * @param _router The router you are adding liquidity on behalf of\\n   */\\n  function addRouterLiquidityFor(\\n    uint256 _amount,\\n    address _local,\\n    address _router\\n  ) external payable nonReentrant whenNotPaused {\\n    _addLiquidityForRouter(_amount, _local, _router);\\n  }\\n\\n  /**\\n   * @notice This is used by any router to increase their available liquidity for a given asset.\\n   * @dev The liquidity will be held in the local asset, which is the representation if you\\n   * are *not* on the canonical domain, and the canonical asset otherwise.\\n   * @param _amount - The amount of liquidity to add for the router\\n   * @param _local - The address of the asset you're adding liquidity for. If adding liquidity of the\\n   * native asset, routers may use `address(0)` or the wrapped asset\\n   */\\n  function addRouterLiquidity(uint256 _amount, address _local) external payable nonReentrant whenNotPaused {\\n    _addLiquidityForRouter(_amount, _local, msg.sender);\\n  }\\n\\n  /**\\n   * @notice This is used by any router owner to decrease their available liquidity for a given asset.\\n   * @dev Using the `_canonical` information in the interface instead of the local asset to allow\\n   * routers to remove liquidity even if the asset is delisted\\n   * @param _canonical The canonical token information in plaintext\\n   * @param _amount - The amount of liquidity to remove for the router\\n   * native asset, routers may use `address(0)` or the wrapped asset\\n   * @param _to The address that will receive the liquidity being removed\\n   * @param _router The address of the router\\n   */\\n  function removeRouterLiquidityFor(\\n    TokenId memory _canonical,\\n    uint256 _amount,\\n    address payable _to,\\n    address _router\\n  ) external nonReentrant whenNotPaused {\\n    // Caller must be the router owner, if defined, else the router\\n    address owner = s.routerConfigs[_router].owner;\\n    address permissioned = owner == address(0) ? _router : owner;\\n    if (msg.sender != permissioned) revert RoutersFacet__removeRouterLiquidityFor_notOwner();\\n    // Remove liquidity\\n    _removeLiquidityForRouter(_amount, _canonical, _to, _router);\\n  }\\n\\n  /**\\n   * @notice This is used by any router to decrease their available liquidity for a given asset.\\n   * @dev Using the `_canonical` information in the interface instead of the local asset to allow\\n   * routers to remove liquidity even if the asset is delisted\\n   * @param _canonical The canonical token information in plaintext\\n   * @param _amount - The amount of liquidity to remove for the router\\n   * @param _to The address that will receive the liquidity being removed if no router recipient exists.\\n   */\\n  function removeRouterLiquidity(\\n    TokenId memory _canonical,\\n    uint256 _amount,\\n    address payable _to\\n  ) external nonReentrant whenNotPaused {\\n    _removeLiquidityForRouter(_amount, _canonical, _to, msg.sender);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @notice Sets the router recipient\\n   * @param _router The router to set the recipient for\\n   * @param _updated The recipient to set\\n   * @param _previous The existing recipient\\n   */\\n  function _setRouterRecipient(\\n    address _router,\\n    address _updated,\\n    address _previous\\n  ) internal {\\n    // Check recipient is changing\\n    if (_previous == _updated) revert RoutersFacet__setRouterRecipient_notNewRecipient();\\n\\n    // Set new recipient\\n    s.routerConfigs[_router].recipient = _updated;\\n\\n    // Emit event\\n    emit RouterRecipientSet(_router, _previous, _updated);\\n  }\\n\\n  /**\\n   * @notice Sets the router owner\\n   * @param _router The router to set the owner for\\n   * @param _updated The owner to set\\n   * @param _previous The existing owner\\n   */\\n  function _setRouterOwner(\\n    address _router,\\n    address _updated,\\n    address _previous\\n  ) internal {\\n    // Check owner is changing\\n    if (_previous == _updated) revert RoutersFacet__setRouterOwner_noChange();\\n\\n    // Set new owner\\n    s.routerConfigs[_router].owner = _updated;\\n\\n    // Emit event\\n    emit RouterOwnerAccepted(_router, _previous, _updated);\\n  }\\n\\n  /**\\n   * @notice Contains the logic to verify + increment a given routers liquidity\\n   * @dev The liquidity will be held in the local asset, which is the representation if you\\n   * are *not* on the canonical domain, and the canonical asset otherwise.\\n   * @param _amount - The amount of liquidity to add for the router\\n   * @param _local - The address of the bridge representation of the asset\\n   * @param _router - The router you are adding liquidity on behalf of\\n   */\\n  function _addLiquidityForRouter(\\n    uint256 _amount,\\n    address _local,\\n    address _router\\n  ) internal {\\n    // Sanity check: router is sensible.\\n    if (_router == address(0)) revert RoutersFacet__addLiquidityForRouter_routerEmpty();\\n\\n    // Sanity check: nonzero amounts.\\n    if (_amount == 0) revert RoutersFacet__addLiquidityForRouter_amountIsZero();\\n\\n    // Get the canonical asset ID from the representation.\\n    // NOTE: not using `_getApprovedCanonicalId` because candidate can *only* be local\\n    TokenId memory canonical = s.representationToCanonical[_local];\\n    if (canonical.domain == 0 && canonical.id == bytes32(0)) {\\n      // Assume you are on the canonical domain, which does not update the above mapping\\n      // If this is an incorrect assumption, the approval should fail\\n      canonical.domain = s.domain;\\n      canonical.id = TypeCasts.addressToBytes32(_local);\\n    }\\n    bytes32 key = AssetLogic.calculateCanonicalHash(canonical.id, canonical.domain);\\n    if (!s.tokenConfigs[key].approval) {\\n      revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n    }\\n\\n    // Sanity check: router is approved.\\n    if (!_isRouterAllowlistRemoved() && !getRouterApproval(_router))\\n      revert RoutersFacet__addLiquidityForRouter_badRouter();\\n\\n    // Transfer funds to contract.\\n    AssetLogic.handleIncomingAsset(_local, _amount);\\n\\n    // Update the router balances. Happens after pulling funds to account for\\n    // the fee on transfer tokens.\\n    s.routerBalances[_router][_local] += _amount;\\n\\n    emit RouterLiquidityAdded(_router, _local, key, _amount, msg.sender);\\n  }\\n\\n  /**\\n   * @notice This is used by any router owner to decrease their available liquidity for a given asset.\\n   * @param _amount - The amount of liquidity to remove for the router\\n   * @param _canonical The canonical token information in plaintext\\n   * @param _to The address that will receive the liquidity being removed\\n   * @param _router The address of the router\\n   */\\n  function _removeLiquidityForRouter(\\n    uint256 _amount,\\n    TokenId memory _canonical,\\n    address payable _to,\\n    address _router\\n  ) internal {\\n    // Transfer to specified recipient IF recipient not set.\\n    address recipient = getRouterRecipient(_router);\\n    recipient = recipient == address(0) ? _to : recipient;\\n\\n    // Sanity check: to is sensible.\\n    if (recipient == address(0)) revert RoutersFacet__removeRouterLiquidity_recipientEmpty();\\n\\n    // Sanity check: nonzero amounts.\\n    if (_amount == 0) revert RoutersFacet__removeRouterLiquidity_amountIsZero();\\n\\n    bool onCanonical = _canonical.domain == s.domain;\\n\\n    // Get the local asset from canonical\\n    // NOTE: allow getting unapproved assets to prevent lockup on approval status change\\n    // NOTE: not using `_getCanonicalTokenId` because candidate can *only* be local\\n    bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n    address local = onCanonical ? TypeCasts.bytes32ToAddress(_canonical.id) : s.tokenConfigs[key].representation;\\n\\n    // Get existing router balance.\\n    uint256 routerBalance = s.routerBalances[_router][local];\\n\\n    // Sanity check: amount can be deducted for the router.\\n    if (routerBalance < _amount) revert RoutersFacet__removeRouterLiquidity_insufficientFunds();\\n\\n    // Update router balances.\\n    unchecked {\\n      s.routerBalances[_router][local] = routerBalance - _amount;\\n    }\\n\\n    // Transfer from contract to specified `to` address.\\n    AssetLogic.handleOutgoingAsset(local, recipient, _amount);\\n\\n    emit RouterLiquidityRemoved(_router, recipient, local, key, _amount, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0x26cea28c8991f6407475fc1354f35c9ab312ea8c9e400ae0907b1c45e575b620\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":13726,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"s","offset":0,"slot":"0","type":"t_struct(AppStorage)29536_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_contract(IERC20)10812)dyn_storage":{"base":"t_contract(IERC20)10812","encoding":"dynamic_array","label":"contract IERC20[]","numberOfBytes":"32"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IConnectorManager)47805":{"encoding":"inplace","label":"contract IConnectorManager","numberOfBytes":"20"},"t_contract(IERC20)10812":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_contract(LPToken)23179":{"encoding":"inplace","label":"contract LPToken","numberOfBytes":"20"},"t_enum(DestinationTransferStatus)29324":{"encoding":"inplace","label":"enum DestinationTransferStatus","numberOfBytes":"1"},"t_enum(Role)29319":{"encoding":"inplace","label":"enum Role","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_enum(Role)29319)":{"encoding":"mapping","key":"t_address","label":"mapping(address => enum Role)","numberOfBytes":"32","value":"t_enum(Role)29319"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(RouterConfig)29378_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RouterConfig)","numberOfBytes":"32","value":"t_struct(RouterConfig)29378_storage"},"t_mapping(t_address,t_struct(TokenId)37728_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct TokenId)","numberOfBytes":"32","value":"t_struct(TokenId)37728_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_bytes32,t_array(t_address)dyn_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => address[])","numberOfBytes":"32","value":"t_array(t_address)dyn_storage"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum DestinationTransferStatus)","numberOfBytes":"32","value":"t_enum(DestinationTransferStatus)29324"},"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => mapping(address => uint8))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint8)"},"t_mapping(t_bytes32,t_struct(Swap)30786_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct SwapUtils.Swap)","numberOfBytes":"32","value":"t_struct(Swap)30786_storage"},"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct TokenConfig)","numberOfBytes":"32","value":"t_struct(TokenConfig)29395_storage"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_bytes32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => bytes32)","numberOfBytes":"32","value":"t_bytes32"},"t_struct(AppStorage)29536_storage":{"encoding":"inplace","label":"struct AppStorage","members":[{"astId":29397,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":29399,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"LIQUIDITY_FEE_NUMERATOR","offset":0,"slot":"1","type":"t_uint256"},{"astId":29402,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"relayerFeeVault","offset":0,"slot":"2","type":"t_address"},{"astId":29405,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"nonce","offset":0,"slot":"3","type":"t_uint256"},{"astId":29408,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"domain","offset":0,"slot":"4","type":"t_uint32"},{"astId":29414,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"adoptedToCanonical","offset":0,"slot":"5","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29420,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"representationToCanonical","offset":0,"slot":"6","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29426,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"tokenConfigs","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)"},{"astId":29432,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"transferStatus","offset":0,"slot":"8","type":"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)"},{"astId":29438,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"routedTransfers","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_array(t_address)dyn_storage)"},{"astId":29445,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"routerBalances","offset":0,"slot":"10","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":29450,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"approvedRelayers","offset":0,"slot":"11","type":"t_mapping(t_address,t_bool)"},{"astId":29453,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"maxRoutersPerTransfer","offset":0,"slot":"12","type":"t_uint256"},{"astId":29458,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"slippage","offset":0,"slot":"13","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29463,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"receiveLocalOverride","offset":0,"slot":"14","type":"t_mapping(t_bytes32,t_bool)"},{"astId":29468,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"remotes","offset":0,"slot":"15","type":"t_mapping(t_uint32,t_bytes32)"},{"astId":29470,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"_proposed","offset":0,"slot":"16","type":"t_address"},{"astId":29472,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"_proposedOwnershipTimestamp","offset":0,"slot":"17","type":"t_uint256"},{"astId":29474,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"_routerAllowlistRemoved","offset":0,"slot":"18","type":"t_bool"},{"astId":29476,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"_routerAllowlistTimestamp","offset":0,"slot":"19","type":"t_uint256"},{"astId":29482,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"roles","offset":0,"slot":"20","type":"t_mapping(t_address,t_enum(Role)29319)"},{"astId":29487,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"routerConfigs","offset":0,"slot":"21","type":"t_mapping(t_address,t_struct(RouterConfig)29378_storage)"},{"astId":29489,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"_status","offset":0,"slot":"22","type":"t_uint256"},{"astId":29491,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"_xcallStatus","offset":0,"slot":"23","type":"t_uint256"},{"astId":29497,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"swapStorages","offset":0,"slot":"24","type":"t_mapping(t_bytes32,t_struct(Swap)30786_storage)"},{"astId":29504,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"tokenIndexes","offset":0,"slot":"25","type":"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))"},{"astId":29507,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"lpTokenTargetAddress","offset":0,"slot":"26","type":"t_address"},{"astId":29510,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"_paused","offset":20,"slot":"26","type":"t_bool"},{"astId":29513,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"aavePool","offset":0,"slot":"27","type":"t_address"},{"astId":29516,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"aavePortalFeeNumerator","offset":0,"slot":"28","type":"t_uint256"},{"astId":29521,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"portalDebt","offset":0,"slot":"29","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29526,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"portalFeeDebt","offset":0,"slot":"30","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29531,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"approvedSequencers","offset":0,"slot":"31","type":"t_mapping(t_address,t_bool)"},{"astId":29535,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"xAppConnectionManager","offset":0,"slot":"32","type":"t_contract(IConnectorManager)47805"}],"numberOfBytes":"1056"},"t_struct(RouterConfig)29378_storage":{"encoding":"inplace","label":"struct RouterConfig","members":[{"astId":29367,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"approved","offset":0,"slot":"0","type":"t_bool"},{"astId":29369,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"portalApproved","offset":1,"slot":"0","type":"t_bool"},{"astId":29371,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"owner","offset":2,"slot":"0","type":"t_address"},{"astId":29373,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"recipient","offset":0,"slot":"1","type":"t_address"},{"astId":29375,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"proposed","offset":0,"slot":"2","type":"t_address"},{"astId":29377,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"proposedTimestamp","offset":0,"slot":"3","type":"t_uint256"}],"numberOfBytes":"128"},"t_struct(Swap)30786_storage":{"encoding":"inplace","label":"struct SwapUtils.Swap","members":[{"astId":30753,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"key","offset":0,"slot":"0","type":"t_bytes32"},{"astId":30755,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"initialA","offset":0,"slot":"1","type":"t_uint256"},{"astId":30757,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"futureA","offset":0,"slot":"2","type":"t_uint256"},{"astId":30759,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"initialATime","offset":0,"slot":"3","type":"t_uint256"},{"astId":30761,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"futureATime","offset":0,"slot":"4","type":"t_uint256"},{"astId":30763,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"swapFee","offset":0,"slot":"5","type":"t_uint256"},{"astId":30765,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"adminFee","offset":0,"slot":"6","type":"t_uint256"},{"astId":30768,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"lpToken","offset":0,"slot":"7","type":"t_contract(LPToken)23179"},{"astId":30772,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"pooledTokens","offset":0,"slot":"8","type":"t_array(t_contract(IERC20)10812)dyn_storage"},{"astId":30775,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"tokenPrecisionMultipliers","offset":0,"slot":"9","type":"t_array(t_uint256)dyn_storage"},{"astId":30778,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"balances","offset":0,"slot":"10","type":"t_array(t_uint256)dyn_storage"},{"astId":30781,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"adminFees","offset":0,"slot":"11","type":"t_array(t_uint256)dyn_storage"},{"astId":30783,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"disabled","offset":0,"slot":"12","type":"t_bool"},{"astId":30785,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"removeTime","offset":0,"slot":"13","type":"t_uint256"}],"numberOfBytes":"448"},"t_struct(TokenConfig)29395_storage":{"encoding":"inplace","label":"struct TokenConfig","members":[{"astId":29380,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"representation","offset":0,"slot":"0","type":"t_address"},{"astId":29382,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"representationDecimals","offset":20,"slot":"0","type":"t_uint8"},{"astId":29384,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"adopted","offset":0,"slot":"1","type":"t_address"},{"astId":29386,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"adoptedDecimals","offset":20,"slot":"1","type":"t_uint8"},{"astId":29388,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"adoptedToLocalExternalPools","offset":0,"slot":"2","type":"t_address"},{"astId":29390,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"approval","offset":20,"slot":"2","type":"t_bool"},{"astId":29392,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"cap","offset":0,"slot":"3","type":"t_uint256"},{"astId":29394,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"custodied","offset":0,"slot":"4","type":"t_uint256"}],"numberOfBytes":"160"},"t_struct(TokenId)37728_storage":{"encoding":"inplace","label":"struct TokenId","members":[{"astId":37725,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"domain","offset":0,"slot":"0","type":"t_uint32"},{"astId":37727,"contract":"contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet","label":"id","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"events":{"LiquidityFeeNumeratorUpdated(uint256,address)":{"notice":"Emitted when the LIQUIDITY_FEE_NUMERATOR variable is updated"},"MaxRoutersPerTransferUpdated(uint256,address)":{"notice":"Emitted when the maxRoutersPerTransfer variable is updated"},"RouterAdded(address,address)":{"notice":"Emitted when a new router is added"},"RouterApprovedForPortal(address,address)":{"notice":"Emitted when a router is approved for Portal"},"RouterInitialized(address)":{"notice":"Emitted when a router adds a config via `addRouterConfig`"},"RouterLiquidityAdded(address,address,bytes32,uint256,address)":{"notice":"Emitted when a router adds liquidity to the contract"},"RouterLiquidityRemoved(address,address,address,bytes32,uint256,address)":{"notice":"Emitted when a router withdraws liquidity from the contract"},"RouterOwnerAccepted(address,address,address)":{"notice":"Emitted when the owner of router is accepted"},"RouterOwnerProposed(address,address,address)":{"notice":"Emitted when the owner of router is proposed"},"RouterRecipientSet(address,address,address)":{"notice":"Emitted when the recipient of router is updated"},"RouterRemoved(address,address)":{"notice":"Emitted when an existing router is removed"},"RouterUnapprovedForPortal(address,address)":{"notice":"Emitted when a router is disapproved for Portal"}},"kind":"user","methods":{"acceptProposedRouterOwner(address)":{"notice":"New router owner must accept role, or previous if proposed is 0x0"},"addRouterLiquidity(uint256,address)":{"notice":"This is used by any router to increase their available liquidity for a given asset."},"addRouterLiquidityFor(uint256,address,address)":{"notice":"This is used by anyone to increase a router's available liquidity for a given asset."},"approveRouter(address)":{"notice":"Used to allowlist a given router"},"approveRouterForPortal(address)":{"notice":"Allow router to use Portals"},"getProposedRouterOwner(address)":{"notice":"Returns the currently proposed router owner"},"getProposedRouterOwnerTimestamp(address)":{"notice":"Returns the currently proposed router owner timestamp"},"getRouterApproval(address)":{"notice":"Returns the approved router for the given router address"},"getRouterApprovalForPortal(address)":{"notice":"Returns whether the router is approved for portals or not"},"getRouterOwner(address)":{"notice":"Returns the router owner if it is set, or the router itself if not"},"getRouterRecipient(address)":{"notice":"Returns the recipient for the specified router"},"initializeRouter(address,address)":{"notice":"Can be called by anyone to set a config for their router (the msg.sender)"},"proposeRouterOwner(address,address)":{"notice":"Current owner or router may propose a new router owner"},"removeRouterLiquidity((uint32,bytes32),uint256,address)":{"notice":"This is used by any router to decrease their available liquidity for a given asset."},"removeRouterLiquidityFor((uint32,bytes32),uint256,address,address)":{"notice":"This is used by any router owner to decrease their available liquidity for a given asset."},"setLiquidityFeeNumerator(uint256)":{"notice":"Sets the LIQUIDITY_FEE_NUMERATOR"},"setMaxRoutersPerTransfer(uint256)":{"notice":"Used to set the max amount of routers a payment can be routed through"},"setRouterRecipient(address,address)":{"notice":"Sets the designated recipient for a router"},"unapproveRouter(address)":{"notice":"Used to remove routers that can transact crosschain"},"unapproveRouterForPortal(address)":{"notice":"Remove router access to use Portals"}},"notice":"This contract is designed to manage router access, meaning it maintains the router recipients, owners, and the router allowlist itself. As a router, there are three important permissions: `router` - this is the address that will sign bids sent to the sequencer `routerRecipient` - this is the address that receives funds when liquidity is withdrawn `routerOwner` - this is the address permitted to update recipients and propose new owners In cases where the owner is not set, the caller should be the `router` itself. In cases where the `routerRecipient` is not set, the funds can be removed to anywhere. When setting a new `routerOwner`, the current owner (or router) must create a proposal, which can be accepted by the proposed owner after the delay period. If the proposed owner is the empty address, then it must be accepted by the current owner.","version":1}}},"contracts/core/connext/facets/StableSwapFacet.sol":{"StableSwapFacet":{"abi":[{"inputs":[],"name":"AssetLogic__handleIncomingAsset_feeOnTransferNotSupported","type":"error"},{"inputs":[],"name":"AssetLogic__handleIncomingAsset_nativeAssetNotSupported","type":"error"},{"inputs":[],"name":"AssetLogic__handleOutgoingAsset_notNative","type":"error"},{"inputs":[],"name":"BaseConnextFacet__getAdoptedAsset_assetNotFound","type":"error"},{"inputs":[],"name":"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonXCallReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__whenNotPaused_paused","type":"error"},{"inputs":[],"name":"StableSwapFacet__deadlineCheck_deadlineNotMet","type":"error"},{"inputs":[],"name":"StableSwapFacet__getSwapTokenBalance_indexOutOfRange","type":"error"},{"inputs":[],"name":"StableSwapFacet__getSwapTokenIndex_notExist","type":"error"},{"inputs":[],"name":"StableSwapFacet__getSwapToken_outOfRange","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"fees","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"invariant","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"newAdminFee","type":"uint256"}],"name":"NewAdminFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"newSwapFee","type":"uint256"}],"name":"NewSwapFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"}],"name":"RemoveLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"fees","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"invariant","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"}],"name":"RemoveLiquidityImbalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"lpTokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"boughtId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensBought","type":"uint256"}],"name":"RemoveLiquidityOne","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensSold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":false,"internalType":"uint128","name":"soldId","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"boughtId","type":"uint128"}],"name":"TokenSwap","type":"event"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256","name":"minToMint","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addSwapLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"calculateRemoveSwapLiquidity","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint8","name":"tokenIndex","type":"uint8"}],"name":"calculateRemoveSwapLiquidityOneToken","outputs":[{"internalType":"uint256","name":"availableTokenAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint8","name":"tokenIndexFrom","type":"uint8"},{"internalType":"uint8","name":"tokenIndexTo","type":"uint8"},{"internalType":"uint256","name":"dx","type":"uint256"}],"name":"calculateSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bool","name":"deposit","type":"bool"}],"name":"calculateSwapTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"getSwapA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"getSwapAPrecise","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getSwapAdminBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"getSwapLPToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"getSwapStorage","outputs":[{"components":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint256","name":"initialA","type":"uint256"},{"internalType":"uint256","name":"futureA","type":"uint256"},{"internalType":"uint256","name":"initialATime","type":"uint256"},{"internalType":"uint256","name":"futureATime","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"uint256","name":"adminFee","type":"uint256"},{"internalType":"contract LPToken","name":"lpToken","type":"address"},{"internalType":"contract IERC20[]","name":"pooledTokens","type":"address[]"},{"internalType":"uint256[]","name":"tokenPrecisionMultipliers","type":"uint256[]"},{"internalType":"uint256[]","name":"balances","type":"uint256[]"},{"internalType":"uint256[]","name":"adminFees","type":"uint256[]"},{"internalType":"bool","name":"disabled","type":"bool"},{"internalType":"uint256","name":"removeTime","type":"uint256"}],"internalType":"struct SwapUtils.Swap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint8","name":"index","type":"uint8"}],"name":"getSwapToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint8","name":"index","type":"uint8"}],"name":"getSwapTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getSwapTokenIndex","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"getSwapVirtualPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256[]","name":"minAmounts","type":"uint256[]"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeSwapLiquidity","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256","name":"maxBurnAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeSwapLiquidityImbalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint8","name":"tokenIndex","type":"uint8"},{"internalType":"uint256","name":"minAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeSwapLiquidityOneToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint8","name":"tokenIndexFrom","type":"uint8"},{"internalType":"uint8","name":"tokenIndexTo","type":"uint8"},{"internalType":"uint256","name":"dx","type":"uint256"},{"internalType":"uint256","name":"minDy","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"assetIn","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address","name":"assetIn","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Most of the logic is stored as a library `SwapUtils` for the sake of contract readability.","kind":"dev","methods":{"addSwapLiquidity(bytes32,uint256[],uint256,uint256)":{"params":{"amounts":"the amounts of each token to add, in their native precision","deadline":"latest timestamp to accept this transaction","key":"Hash of the canonical id + domain","minToMint":"the minimum LP tokens adding this amount of liquidity should mint, otherwise revert. Handy for front-running mitigation"},"returns":{"_0":"amount of LP token user minted and received"}},"calculateRemoveSwapLiquidity(bytes32,uint256)":{"params":{"amount":"the amount of LP tokens that would be burned on withdrawal","key":"Hash of the canonical id + domain"},"returns":{"_0":"array of token balances that the user will receive"}},"calculateRemoveSwapLiquidityOneToken(bytes32,uint256,uint8)":{"params":{"key":"Hash of the canonical id + domain","tokenAmount":"the amount of LP token to burn","tokenIndex":"index of which token will be withdrawn"},"returns":{"availableTokenAmount":"calculated amount of underlying token available to withdraw"}},"calculateSwap(bytes32,uint8,uint8,uint256)":{"params":{"dx":"the amount of tokens the user wants to sell. If the token charges a fee on transfers, use the amount that gets transferred after the fee.","key":"Hash of the canonical id + domain","tokenIndexFrom":"the token the user wants to sell","tokenIndexTo":"the token the user wants to buy"},"returns":{"_0":"amount of tokens the user will receive"}},"calculateSwapTokenAmount(bytes32,uint256[],bool)":{"details":"This shouldn't be used outside frontends for user estimates.","params":{"amounts":"an array of token amounts to deposit or withdrawal, corresponding to pooledTokens. The amount should be in each pooled token's native precision. If a token charges a fee on transfers, use the amount that gets transferred after the fee.","deposit":"whether this is a deposit or a withdrawal","key":"Hash of the canonical id + domain"},"returns":{"_0":"token amount the user will receive"}},"getSwapA(bytes32)":{"details":"See the StableSwap paper for details","params":{"key":"Hash of the canonical id + domain"},"returns":{"_0":"A parameter"}},"getSwapAPrecise(bytes32)":{"details":"See the StableSwap paper for details","params":{"key":"Hash of the canonical id + domain"},"returns":{"_0":"A parameter in its raw precision form"}},"getSwapAdminBalance(bytes32,uint256)":{"params":{"index":"Index of the pooled token","key":"Hash of the canonical id + domain"},"returns":{"_0":"admin's token balance in the token's precision"}},"getSwapLPToken(bytes32)":{"params":{"key":"Hash of the canonical id + domain"},"returns":{"_0":"LPToken"}},"getSwapStorage(bytes32)":{"params":{"key":"Hash of the canonical id + domain"},"returns":{"_0":"SwapUtils.Swap"}},"getSwapToken(bytes32,uint8)":{"params":{"index":"the index of the token","key":"Hash of the canonical id + domain"},"returns":{"_0":"address of the token at given index"}},"getSwapTokenBalance(bytes32,uint8)":{"params":{"index":"the index of the token","key":"Hash of the canonical id + domain"},"returns":{"_0":"current balance of the pooled token at given index with token's native precision"}},"getSwapTokenIndex(bytes32,address)":{"params":{"key":"Hash of the canonical id + domain","tokenAddress":"address of the token"},"returns":{"_0":"the index of the given token address"}},"getSwapVirtualPrice(bytes32)":{"params":{"key":"Hash of the canonical id + domain"},"returns":{"_0":"the virtual price, scaled to the POOL_PRECISION_DECIMALS"}},"removeSwapLiquidity(bytes32,uint256,uint256[],uint256)":{"details":"Liquidity can always be removed, even when the pool is paused.","params":{"amount":"the amount of LP tokens to burn","deadline":"latest timestamp to accept this transaction","key":"Hash of the canonical id + domain","minAmounts":"the minimum amounts of each token in the pool        acceptable for this burn. Useful as a front-running mitigation"},"returns":{"_0":"amounts of tokens user received"}},"removeSwapLiquidityImbalance(bytes32,uint256[],uint256,uint256)":{"params":{"amounts":"how much of each token to withdraw","deadline":"latest timestamp to accept this transaction","key":"Hash of the canonical id + domain","maxBurnAmount":"the max LP token provider is willing to pay to remove liquidity. Useful as a front-running mitigation."},"returns":{"_0":"amount of LP tokens burned"}},"removeSwapLiquidityOneToken(bytes32,uint256,uint8,uint256,uint256)":{"params":{"deadline":"latest timestamp to accept this transaction","key":"Hash of the canonical id + domain","minAmount":"the minimum amount to withdraw, otherwise revert","tokenAmount":"the amount of the token you want to receive","tokenIndex":"the index of the token you want to receive"},"returns":{"_0":"amount of chosen token user received"}},"swap(bytes32,uint8,uint8,uint256,uint256,uint256)":{"params":{"deadline":"latest timestamp to accept this transaction","dx":"the amount of tokens the user wants to swap from","key":"Hash of the canonical id + domain","minDy":"the min amount the user would like to receive, or revert.","tokenIndexFrom":"the token the user wants to swap from","tokenIndexTo":"the token the user wants to swap to"}},"swapExact(bytes32,uint256,address,address,uint256,uint256)":{"params":{"amountIn":"the amount of tokens the user wants to swap from","assetIn":"the token the user wants to swap from","assetOut":"the token the user wants to swap to","key":"Hash of the canonical id + domain"}},"swapExactOut(bytes32,uint256,address,address,uint256,uint256)":{"params":{"amountOut":"the amount of tokens the user wants to swap to","assetIn":"the token the user wants to swap from","assetOut":"the token the user wants to swap to","key":"Hash of the canonical id + domain"}}},"title":"Swap - A StableSwap implementation in solidity.","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50614e22806100206000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80638d365457116100ad578063b6618dff11610071578063b6618dff146102be578063bb0577eb146102d1578063d251dc35146102e4578063f495e807146102f7578063ff126de91461030a57600080fd5b80638d3654571461024d5780638f11d27f14610260578063a02288f414610273578063ad94911b14610286578063b3a4eab4146102ab57600080fd5b806374c6b89b116100f457806374c6b89b146101bd5780637652f59d146101d057806376ca2e52146101e357806380b297e8146101f65780638b480b121461020957600080fd5b80631301caa214610131578063241ca57a1461015757806329d99b101461016a5780632d91a5151461017d5780634bbcba8e1461019d575b600080fd5b61014461013f3660046145ab565b61031d565b6040519081526020015b60405180910390f35b610144610165366004614619565b61033e565b61014461017836600461468d565b610411565b61019061018b3660046146c2565b610432565b60405161014e919061474f565b6101b06101ab36600461485e565b6106a9565b60405161014e91906148b9565b6101446101cb3660046148e3565b61073c565b6101446101de3660046146c2565b6107f4565b6101446101f136600461494c565b61080b565b6101446102043660046148e3565b61082e565b6102356102173660046146c2565b6000908152601860205260409020600701546001600160a01b031690565b6040516001600160a01b03909116815260200161014e565b61014461025b366004614619565b6108d5565b61014461026e3660046149ab565b610998565b6101b06102813660046145ab565b6109b2565b6102996102943660046149ef565b6109cd565b60405160ff909116815260200161014e565b6102356102b9366004614a1b565b610a25565b6101446102cc366004614a3e565b610a9a565b6101446102df366004614a1b565b610b2d565b6101446102f23660046146c2565b610b9a565b6101446103053660046146c2565b610bb1565b610144610318366004614a85565b610bc8565b60008281526018602052604081206103359083610c5c565b90505b92915050565b6016546000906001190161036557604051637ce54e2d60e11b815260040160405180910390fd5b6002601655814281101561038c576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff16156103b757604051633ee5b89360e01b815260040160405180910390fd5b61040186868080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508c815260186020526040902093925088915050610ca0565b6001601655979650505050505050565b600083815260186020526040812061042a9084846114d0565b949350505050565b6104b2604051806101c001604052806000801916815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160608152602001606081526020016060815260200160608152602001600015158152602001600081525090565b60008281526018602090815260409182902082516101c081018452815481526001820154818401526002820154818501526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260078201546001600160a01b031660e082015260088201805485518186028101860190965280865291949293610100860193929083018282801561057857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161055a575b50505050508152602001600982018054806020026020016040519081016040528092919081815260200182805480156105d057602002820191906000526020600020905b8154815260200190600101908083116105bc575b50505050508152602001600a820180548060200260200160405190810160405280929190818152602001828054801561062857602002820191906000526020600020905b815481526020019060010190808311610614575b50505050508152602001600b820180548060200260200160405190810160405280929190818152602001828054801561068057602002820191906000526020600020905b81548152602001906001019080831161066c575b5050509183525050600c82015460ff1615156020820152600d9091015460409091015292915050565b601654606090600119016106d057604051637ce54e2d60e11b815260040160405180910390fd5b600260165581428110156106f7576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff161561072257604051633ee5b89360e01b815260040160405180910390fd5b600087815260186020526040902061040190878787611561565b6016546000906001190161076357604051637ce54e2d60e11b815260040160405180910390fd5b6002601655814281101561078a576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff16156107b557604051633ee5b89360e01b815260040160405180910390fd5b6107e36107c289886109cd565b6107cc8a886109cd565b60008b815260186020526040902091908a886118fe565b600160165598975050505050505050565b600081815260186020526040812061033890611cfa565b600084815260186020526040812061082590858585611d05565b95945050505050565b6016546000906001190161085557604051637ce54e2d60e11b815260040160405180910390fd5b6002601655814281101561087c576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff16156108a757604051633ee5b89360e01b815260040160405180910390fd5b6107e36108b489886109cd565b6108be8a886109cd565b60008b815260186020526040902091908a88611fd5565b601654600090600119016108fc57604051637ce54e2d60e11b815260040160405180910390fd5b60026016558142811015610923576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff161561094e57604051633ee5b89360e01b815260040160405180910390fd5b61040186868080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508c815260186020526040902093925088915050612362565b600084815260186020526040812061082590858585612b55565b60008281526018602052604090206060906103359083612bb6565b60008281526019602090815260408083206001600160a01b038516808552925282205460ff16906109fe8583610a25565b6001600160a01b0316146103355760405163336752bb60e01b815260040160405180910390fd5b60008281526018602052604081206008015460ff831610610a585760405162e6731760e41b815260040160405180910390fd5b6000838152601860205260409020600801805460ff8416908110610a7e57610a7e614add565b6000918252602090912001546001600160a01b03169392505050565b60165460009060011901610ac157604051637ce54e2d60e11b815260040160405180910390fd5b60026016558142811015610ae8576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff1615610b1357604051633ee5b89360e01b815260040160405180910390fd5b600087815260186020526040902061040190878787612c8d565b6000828152601860205260408120600a015460ff831610610b6157604051634105699160e01b815260040160405180910390fd5b6000838152601860205260409020600a01805460ff8416908110610b8757610b87614add565b9060005260206000200154905092915050565b600081815260186020526040812061033890612fe7565b600081815260186020526040812061033890612ffe565b60165460009060011901610bef57604051637ce54e2d60e11b815260040160405180910390fd5b60026016558142811015610c16576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff1615610c4157604051633ee5b89360e01b815260040160405180910390fd5b60008881526018602052604090206107e39088888888611fd5565b60088201546000908210610c8b5760405162461bcd60e51b8152600401610c8290614af3565b60405180910390fd5b82600b018281548110610b8757610b87614add565b600080604051806101000160405280600081526020016000815260200160008152602001610ccd87611cfa565b81526020018660070160009054906101000a90046001600160a01b03166001600160a01b031681526020016000815260200186600a01805480602002602001604051908101604052809291908181526020018280548015610d4d57602002820191906000526020600020905b815481526020019060010190808311610d39575b5050505050815260200186600901805480602002602001604051908101604052809291908181526020018280548015610da557602002820191906000526020600020905b815481526020019060010190808311610d91575b5050505050815250905080608001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e159190614b1f565b60a082015260088501548451808214610e675760405162461bcd60e51b81526020600482015260146024820152736d69736d6174636820706f6f6c20746f6b656e7360601b6044820152606401610c82565b60808301516040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed59190614b1f565b8511158015610ee357508415155b610eff5760405162461bcd60e51b8152600401610c8290614b38565b6000610f0f8860050154846130d1565b905060008367ffffffffffffffff811115610f2c57610f2c614b5f565b604051908082528060200260200182016040528015610f55578160200160208202803683370190505b50905060008467ffffffffffffffff811115610f7357610f73614b5f565b604051908082528060200260200182016040528015610f9c578160200160208202803683370190505b509050610fbe610fb48760c001518860e001516130fd565b8760600151613208565b865260005b858110156110af57898181518110610fdd57610fdd614add565b60200260200101518760c001518281518110610ffb57610ffb614add565b602002602001015110156110515760405162461bcd60e51b815260206004820152601c60248201527f7769746864726177206d6f7265207468616e20617661696c61626c65000000006044820152606401610c82565b89818151811061106357611063614add565b60200260200101518760c00151828151811061108157611081614add565b60200260200101510382828151811061109c5761109c614add565b6020908102919091010152600101610fc3565b506110c1610fb4828860e001516130fd565b602087015260005b858110156112b257600087600001518860c0015183815181106110ee576110ee614add565b602002602001015189602001516111059190614b8b565b61110f9190614ba2565b9050600061113f84848151811061112857611128614add565b6020026020010151836133b590919063ffffffff16565b90506402540be4006111518288614b8b565b61115b9190614ba2565b85848151811061116d5761116d614add565b602002602001018181525050505060006402540be4008c6006015485848151811061119a5761119a614add565b60200260200101516111ac9190614b8b565b6111b69190614ba2565b9050808383815181106111cb576111cb614add565b60200260200101516111dd9190614bc4565b8c600a0183815481106111f2576111f2614add565b9060005260206000200181905550808c600b01838154811061121657611216614add565b906000526020600020015461122b9190614bd7565b8c600b01838154811061124057611240614add565b906000526020600020018190555083828151811061126057611260614add565b602002602001015183838151811061127a5761127a614add565b602002602001015161128c9190614bc4565b83838151811061129e5761129e614add565b6020908102919091010152506001016110c9565b506112c4610fb4828860e001516130fd565b60408701819052865160a08801516000935090916112e29083614bc4565b6112ec9190614b8b565b6112f69190614ba2565b9050806000036113375760405162461bcd60e51b815260206004820152600c60248201526b085e995c9bc8185b5bdd5b9d60a21b6044820152606401610c82565b611342816001614bd7565b9050878111156113945760405162461bcd60e51b815260206004820152601b60248201527f746f6b656e416d6f756e74203e206d61784275726e416d6f756e7400000000006044820152606401610c82565b608086015160405163079cc67960e41b8152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b1580156113e257600080fd5b505af11580156113f6573d6000803e3d6000fd5b5050505060005b858110156114635761145b8b600801828154811061141d5761141d614add565b9060005260206000200160009054906101000a90046001600160a01b0316338c848151811061144e5761144e614add565b60200260200101516133da565b6001016113fd565b50336001600160a01b03168a600001547fa404896827f41a3845de89f154bf1f4fe5cbdf79da7c7805263a3d0b7de9e6728b858a60200151868c60a001516114ab9190614bc4565b6040516114bb9493929190614bea565b60405180910390a39998505050505050505050565b6000806115578585858860070160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561152e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115529190614b1f565b61341e565b5095945050505050565b60078401546040516370a0823160e01b81523360048201526060916001600160a01b03169081906370a0823190602401602060405180830381865afa1580156115ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d29190614b1f565b8511156115f15760405162461bcd60e51b8152600401610c8290614b38565b600886015483811461163b5760405162461bcd60e51b81526020600482015260136024820152726d69736d6174636820706f6f6c546f6b656e7360681b6044820152606401610c82565b600087600a0180548060200260200160405190810160405280929190818152602001828054801561168b57602002820191906000526020600020905b815481526020019060010190808311611677575b505050505090506000836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f69190614b1f565b90506000611705838a84613495565b805190915060005b818110156118485789898281811061172757611727614add565b9050602002013583828151811061174057611740614add565b602002602001015110156117965760405162461bcd60e51b815260206004820152601a60248201527f616d6f756e74735b695d203c206d696e416d6f756e74735b695d0000000000006044820152606401610c82565b8281815181106117a8576117a8614add565b60200260200101518582815181106117c2576117c2614add565b60200260200101516117d49190614bc4565b8c600a0182815481106117e9576117e9614add565b90600052602060002001819055506118408c600801828154811061180f5761180f614add565b9060005260206000200160009054906101000a90046001600160a01b03163385848151811061144e5761144e614add565b60010161170d565b5060405163079cc67960e41b8152336004820152602481018b90526001600160a01b038716906379cc679090604401600060405180830381600087803b15801561189157600080fd5b505af11580156118a5573d6000803e3d6000fd5b50508c5433925090507f58f96d387ac27c23fb6350424cb6b032322b14ffd82029e96aeed2c525e790e8846118da8e88614bc4565b6040516118e8929190614c23565b60405180910390a3509998505050505050505050565b600c85015460009060ff16156119265760405162461bcd60e51b8152600401610c8290614c45565b85600a018460ff168154811061193e5761193e614add565b90600052602060002001548311156119885760405162461bcd60e51b815260206004820152600d60248201526c3e706f6f6c2062616c616e636560981b6044820152606401610c82565b600080600088600a018054806020026020016040519081016040528092919081815260200182805480156119db57602002820191906000526020600020905b8154815260200190600101908083116119c7575b505050505090506119ef8989898985613586565b909350915084831115611a315760405162461bcd60e51b815260206004820152600a6024820152690c8f0407c40dac2f088f60b31b6044820152606401610c82565b6000896009018960ff1681548110611a4b57611a4b614add565b90600052602060002001546402540be4008b6006015485611a6c9190614b8b565b611a769190614ba2565b611a809190614ba2565b90508084838b60ff1681518110611a9957611a99614add565b6020026020010151611aab9190614bd7565b611ab59190614bc4565b8a600a018a60ff1681548110611acd57611acd614add565b906000526020600020018190555086828960ff1681518110611af157611af1614add565b6020026020010151611b039190614bc4565b8a600a018960ff1681548110611b1b57611b1b614add565b6000918252602090912001558015611b8057808a600b018a60ff1681548110611b4657611b46614add565b9060005260206000200154611b5b9190614bd7565b8a600b018a60ff1681548110611b7357611b73614add565b6000918252602090912001555b60008a6008018a60ff1681548110611b9a57611b9a614add565b6000918252602090912001546040516370a0823160e01b81523360048201526001600160a01b03909116915081906370a0823190602401602060405180830381865afa158015611bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c129190614b1f565b851115611c555760405162461bcd60e51b815260206004820152601160248201527036b7b932903a3430b7103cb7ba9037bbb760791b6044820152606401610c82565b611c5f81866137a6565b50611c978a6008018960ff1681548110611c7b57611c7b614add565b6000918252602090912001546001600160a01b031633896133da565b895460408051868152602081018a905260ff808d1692820192909252908a1660608201523391907f28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df320906080015b60405180910390a3509198975050505050505050565b6000610338826138f7565b60008085600a01805480602002602001604051908101604052809291908181526020018280548015611d5657602002820191906000526020600020905b815481526020019060010190808311611d42575b5050835193945050508582149050611db05760405162461bcd60e51b815260206004820152601960248201527f696e76616c6964206c656e677468206f6620616d6f756e7473000000000000006044820152606401610c82565b6000611dbb88611cfa565b9050600088600901805480602002602001604051908101604052809291908181526020018280548015611e0d57602002820191906000526020600020905b815481526020019060010190808311611df9575b505050505090506000611e29611e2386846130fd565b84613208565b905060005b84811015611f00578715611e9c57898982818110611e4e57611e4e614add565b90506020020135868281518110611e6757611e67614add565b6020026020010151611e799190614bd7565b868281518110611e8b57611e8b614add565b602002602001018181525050611ef8565b898982818110611eae57611eae614add565b90506020020135868281518110611ec757611ec7614add565b6020026020010151611ed99190614bc4565b868281518110611eeb57611eeb614add565b6020026020010181815250505b600101611e2e565b506000611f16611f1087856130fd565b85613208565b905060008b60070160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f939190614b1f565b90508815611fc9578281611fa78285614bc4565b611fb19190614b8b565b611fbb9190614ba2565b97505050505050505061042a565b8281611fa78483614bc4565b600c85015460009060ff1615611ffd5760405162461bcd60e51b8152600401610c8290614c45565b6000866008018660ff168154811061201757612017614add565b6000918252602090912001546040516370a0823160e01b81523360048201526001600160a01b03909116915081906370a0823190602401602060405180830381865afa15801561206b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208f9190614b1f565b8411156120d75760405162461bcd60e51b815260206004820152601660248201527539bbb0b81036b7b932903a3430b7103cb7ba9037bbb760511b6044820152606401610c82565b6120e181856137a6565b50600080600088600a0180548060200260200160405190810160405280929190818152602001828054801561213557602002820191906000526020600020905b815481526020019060010190808311612121575b505050505090506121498989898985613940565b90935091508483101561218b5760405162461bcd60e51b815260206004820152600a6024820152696479203c206d696e447960b01b6044820152606401610c82565b6000896009018860ff16815481106121a5576121a5614add565b90600052602060002001546402540be4008b60060154856121c69190614b8b565b6121d09190614ba2565b6121da9190614ba2565b905086828a60ff16815181106121f2576121f2614add565b60200260200101516122049190614bd7565b8a600a018a60ff168154811061221c5761221c614add565b90600052602060002001819055508084838a60ff168151811061224157612241614add565b60200260200101516122539190614bc4565b61225d9190614bc4565b8a600a018960ff168154811061227557612275614add565b60009182526020909120015580156122da57808a600b018960ff16815481106122a0576122a0614add565b90600052602060002001546122b59190614bd7565b8a600b018960ff16815481106122cd576122cd614add565b6000918252602090912001555b6123118a6008018960ff16815481106122f5576122f5614add565b6000918252602090912001546001600160a01b031633866133da565b8954604080518981526020810187905260ff808d1692820192909252908a1660608201523391907f28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df32090608001611ce4565b600c83015460009060ff161561238a5760405162461bcd60e51b8152600401610c8290614c45565b6008840154835181146123d85760405162461bcd60e51b81526020600482015260166024820152756d69736d6174636820706f6f6c656420746f6b656e7360501b6044820152606401610c82565b600060405180610100016040528060008152602001600081526020016000815260200161240488611cfa565b81526020018760070160009054906101000a90046001600160a01b03166001600160a01b031681526020016000815260200187600a0180548060200260200160405190810160405280929190818152602001828054801561248457602002820191906000526020600020905b815481526020019060010190808311612470575b50505050508152602001876009018054806020026020016040519081016040528092919081815260200182805480156124dc57602002820191906000526020600020905b8154815260200190600101908083116124c8575b5050505050815250905080608001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254c9190614b1f565b60a082018190521561257a5761257761256d8260c001518360e001516130fd565b8260600151613208565b81525b60008267ffffffffffffffff81111561259557612595614b5f565b6040519080825280602002602001820160405280156125be578160200160208202803683370190505b50905060005b8381101561271d5760a08301511515806125f857508681815181106125eb576125eb614add565b6020026020010151600014155b6126395760405162461bcd60e51b815260206004820152601260248201527121737570706c7920616c6c20746f6b656e7360701b6044820152606401610c82565b86818151811061264b5761264b614add565b60200260200101516000146126b657600088600801828154811061267157612671614add565b9060005260206000200160009054906101000a90046001600160a01b031690506126b4818984815181106126a7576126a7614add565b60200260200101516137a6565b505b8681815181106126c8576126c8614add565b60200260200101518360c0015182815181106126e6576126e6614add565b60200260200101516126f89190614bd7565b82828151811061270a5761270a614add565b60209081029190910101526001016125c4565b5061273961272f828460e001516130fd565b8360600151613208565b602083018190528251106127835760405162461bcd60e51b8152602060048201526011602482015270442073686f756c6420696e63726561736560781b6044820152606401610c82565b6020820151604083015260008367ffffffffffffffff8111156127a8576127a8614b5f565b6040519080825280602002602001820160405280156127d1578160200160208202803683370190505b5090508260a001516000146129e95760006127f08960050154866130d1565b905060005b858110156129c257600085600001518660c00151838151811061281a5761281a614add565b602002602001015187602001516128319190614b8b565b61283b9190614ba2565b90506402540be40061285886848151811061112857611128614add565b6128629085614b8b565b61286c9190614ba2565b84838151811061287e5761287e614add565b60200260200101818152505060006402540be4008c600601548685815181106128a9576128a9614add565b60200260200101516128bb9190614b8b565b6128c59190614ba2565b9050808684815181106128da576128da614add565b60200260200101516128ec9190614bc4565b8c600a01848154811061290157612901614add565b9060005260206000200181905550808c600b01848154811061292557612925614add565b906000526020600020015461293a9190614bd7565b8c600b01848154811061294f5761294f614add565b906000526020600020018190555084838151811061296f5761296f614add565b602002602001015186848151811061298957612989614add565b602002602001015161299b9190614bc4565b8684815181106129ad576129ad614add565b602090810291909101015250506001016127f5565b506129de6129d4848660e001516130fd565b8560600151613208565b604085015250612a00565b81516129fe90600a8a0190602085019061454b565b505b60008360a00151600003612a1957506020830151612a47565b835160a08501516040860151612a30908390614bc4565b612a3a9190614b8b565b612a449190614ba2565b90505b86811015612a845760405162461bcd60e51b815260206004820152600a60248201526936b4b73a101e1036b4b760b11b6044820152606401610c82565b60808401516040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b158015612ad257600080fd5b505af1158015612ae6573d6000803e3d6000fd5b50505050336001600160a01b031689600001547fbcb1ab680ee25ef87d34ec297263a10e0a823cd81326b0aa6bc55b86cb2a41888a858860200151868a60a00151612b319190614bd7565b604051612b419493929190614bea565b60405180910390a398975050505050505050565b60006115578585858589600a01805480602002602001604051908101604052809291908181526020018280548015612bac57602002820191906000526020600020905b815481526020019060010190808311612b98575b5050505050613940565b606061033583600a01805480602002602001604051908101604052809291908181526020018280548015612c0957602002820191906000526020600020905b815481526020019060010190808311612bf5575b5050505050838560070160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c889190614b1f565b613495565b60078401546040516370a0823160e01b81523360048201526000916001600160a01b03169081906370a0823190602401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe9190614b1f565b851115612d1d5760405162461bcd60e51b8152600401610c8290614b38565b600886015460ff85168111612d605760405162461bcd60e51b81526020600482015260096024820152681b9bdd08199bdd5b9960ba1b6044820152606401610c82565b6000826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc49190614b1f565b9050600080612dd58a8a8a8661341e565b9150915086821015612e1a5760405162461bcd60e51b815260206004820152600e60248201526d191e480f081b5a5b905b5bdd5b9d60921b6044820152606401610c82565b60006402540be4008b6006015483612e329190614b8b565b612e3c9190614ba2565b9050612e488184614bd7565b8b600a018a60ff1681548110612e6057612e60614add565b9060005260206000200154612e759190614bc4565b8b600a018a60ff1681548110612e8d57612e8d614add565b6000918252602090912001558015612ef257808b600b018a60ff1681548110612eb857612eb8614add565b9060005260206000200154612ecd9190614bd7565b8b600b018a60ff1681548110612ee557612ee5614add565b6000918252602090912001555b60405163079cc67960e41b8152336004820152602481018b90526001600160a01b038716906379cc679090604401600060405180830381600087803b158015612f3a57600080fd5b505af1158015612f4e573d6000803e3d6000fd5b50505050612f898b6008018a60ff1681548110612f6d57612f6d614add565b6000918252602090912001546001600160a01b031633856133da565b8a54604080518c81526020810187905260ff8c16818301526060810186905290513392917f1a66f6ea1c14e22a62ab434f3414908bb5f49133d673c872c8957aa961e4c215919081900360800190a350909998505050505050505050565b60006064612ff4836138f7565b6103389190614ba2565b60008061301b61300d84613ae1565b61301685611cfa565b613208565b905060008360070160009054906101000a90046001600160a01b031690506000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309d9190614b1f565b905080156130c657806130b26012600a614d50565b6130bc9085614b8b565b6108259190614ba2565b506000949350505050565b60006130de600183614bc4565b6130e9906004614b8b565b6130f38385614b8b565b6103359190614ba2565b8151815160609190811461314a5760405162461bcd60e51b81526020600482015260146024820152736d69736d61746368206d756c7469706c6965727360601b6044820152606401610c82565b60008167ffffffffffffffff81111561316557613165614b5f565b60405190808252806020026020018201604052801561318e578160200160208202803683370190505b50905060005b828110156131ff578481815181106131ae576131ae614add565b60200260200101518682815181106131c8576131c8614add565b60200260200101516131da9190614b8b565b8282815181106131ec576131ec614add565b6020908102919091010152600101613194565b50949350505050565b815160009081805b828110156132475785818151811061322a5761322a614add565b60200260200101518261323d9190614bd7565b9150600101613210565b508060000361325b57600092505050610338565b600081816132698588614b8b565b905060005b610100811015613376578260005b878110156132c757878b828151811061329757613297614add565b60200260200101516132a99190614b8b565b6132b38684614b8b565b6132bd9190614ba2565b915060010161327c565b50839450808760016132d99190614bd7565b6132e39190614b8b565b6064856132f08287614bc4565b6132fa9190614b8b565b6133049190614ba2565b61330e9190614bd7565b846133198984614b8b565b60646133258a88614b8b565b61332f9190614ba2565b6133399190614bd7565b6133439190614b8b565b61334d9190614ba2565b93506133598486613b91565b1561336d5783975050505050505050610338565b5060010161326e565b5060405162461bcd60e51b81526020600482015260136024820152724420646f6573206e6f7420636f6e766572676560681b6044820152606401610c82565b6000818311156133d0576133c98284614bc4565b9050610338565b6103358383614bc4565b806000036133e757505050565b6001600160a01b03831661340e57604051633a48ca7b60e11b815260040160405180910390fd5b613419838383613ba7565b505050565b600080600080600061343289888a89613c0a565b8093508194508295505050506000838a6009018960ff168154811061345957613459614add565b906000526020600020015484846134709190614bc4565b61347a9190614ba2565b6134849190614bc4565b939a93995092975050505050505050565b6060818311156134dd5760405162461bcd60e51b815260206004820152601360248201527265786365656420746f74616c20737570706c7960681b6044820152606401610c82565b835160008167ffffffffffffffff8111156134fa576134fa614b5f565b604051908082528060200260200182016040528015613523578160200160208202803683370190505b50905060005b8281101561155757848688838151811061354557613545614add565b60200260200101516135579190614b8b565b6135619190614ba2565b82828151811061357357613573614add565b6020908102919091010152600101613529565b6000808460ff168660ff16036135d85760405162461bcd60e51b815260206004820152601760248201527631b7b6b830b932903a37b5b2b7103a379034ba39b2b63360491b6044820152606401610c82565b60008760090180548060200260200160405190810160405280929190818152602001828054801561362857602002820191906000526020600020905b815481526020019060010190808311613614575b50505050509050600061363b85836130fd565b905080518860ff16108015613653575080518760ff16105b61366f5760405162461bcd60e51b8152600401610c8290614af3565b600061367a8a611cfa565b905060006136888383613208565b9050838960ff168151811061369f5761369f614add565b6020026020010151886136b29190614b8b565b838a60ff16815181106136c7576136c7614add565b60200260200101516136d99190614bc4565b838a60ff16815181106136ee576136ee614add565b6020026020010181815250506000613708838c8685613f17565b9050838b60ff168151811061371f5761371f614add565b60200260200101518160016137349190614bd7565b61373e9190614bc4565b96506402540be4008c60050154886137569190614b8b565b6137609190614ba2565b9550848b60ff168151811061377757613777614add565b6020026020010151868861378b9190614bd7565b6137959190614ba2565b965050505050509550959350505050565b806000036137b2575050565b6001600160a01b0382166137d957604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015613822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138469190614b1f565b905061385d6001600160a01b038316333086614106565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa1580156138a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c99190614b1f565b6138d39190614bc4565b146138f157604051630e40773560e21b815260040160405180910390fd5b50505050565b60048101546002820154600183015490919080831480159061391857508142105b15613939576000846003015490508083038142038502428503840201049350505b5050919050565b60008060008760090180548060200260200160405190810160405280929190818152602001828054801561399357602002820191906000526020600020905b81548152602001906001019080831161397f575b5050505050905060006139a685836130fd565b905080518860ff161080156139be575080518760ff16105b6139da5760405162461bcd60e51b8152600401610c8290614af3565b6000818960ff16815181106139f1576139f1614add565b6020026020010151838a60ff1681518110613a0e57613a0e614add565b602002602001015188613a219190614b8b565b613a2b9190614bd7565b90506000613a44613a3b8c611cfa565b8b8b858761413e565b9050600181848b60ff1681518110613a5e57613a5e614add565b6020026020010151613a709190614bc4565b613a7a9190614bc4565b95506402540be4008b6005015487613a929190614b8b565b613a9c9190614ba2565b9450838960ff1681518110613ab357613ab3614add565b60200260200101518587613ac79190614bc4565b613ad19190614ba2565b9550505050509550959350505050565b606061033882600a01805480602002602001604051908101604052809291908181526020018280548015613b3457602002820191906000526020600020905b815481526020019060010190808311613b20575b505050505083600901805480602002602001604051908101604052809291908181526020018280548015613b8757602002820191906000526020600020905b815481526020019060010190808311613b73575b50505050506130fd565b60006002613b9f84846133b5565b109392505050565b6040516001600160a01b03831660248201526044810182905261341990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614356565b600080600080613c1988613ae1565b905080518760ff1610613c3e5760405162461bcd60e51b8152600401610c8290614af3565b60006040518060a001604052806000815260200160008152602001600081526020016000815260200160008152509050613c7789611cfa565b60808201819052613c89908390613208565b8082528690613c989089614b8b565b613ca29190614ba2565b8151613cae9190614bc4565b60208201528151829060ff8a16908110613cca57613cca614add565b6020026020010151871115613d155760405162461bcd60e51b81526020600482015260116024820152706578636565647320617661696c61626c6560781b6044820152606401610c82565b613d29816080015189848460200151613f17565b6040820152815160009067ffffffffffffffff811115613d4b57613d4b614b5f565b604051908082528060200260200182016040528015613d74578160200160208202803683370190505b509050613d868a6005015484516130d1565b6060830152825160005b81811015613e63576000858281518110613dac57613dac614add565b602002602001015190506402540be40085606001518d60ff168414613df55786516020880151613ddc9085614b8b565b613de69190614ba2565b613df09084614bc4565b613e1f565b604087015187516020890151613e0b9086614b8b565b613e159190614ba2565b613e1f9190614bc4565b613e299190614b8b565b613e339190614ba2565b613e3d9082614bc4565b848381518110613e4f57613e4f614add565b602090810291909101015250600101613d90565b506000613e7a84608001518c858760200151613f17565b838c60ff1681518110613e8f57613e8f614add565b6020026020010151613ea19190614bc4565b90508b6009018b60ff1681548110613ebb57613ebb614add565b9060005260206000200154600182613ed39190614bc4565b613edd9190614ba2565b9050808460400151868d60ff1681518110613efa57613efa614add565b602002602001015197509750975050505050509450945094915050565b815160009060ff85168111613f605760405162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08199bdd5b99608a1b6044820152606401610c82565b82600080613f6e848a614b8b565b905060005b84811015613ff0578860ff168114613fe857878181518110613f9757613f97614add565b602002602001015183613faa9190614bd7565b925084888281518110613fbf57613fbf614add565b6020026020010151613fd19190614b8b565b613fdb8886614b8b565b613fe59190614ba2565b93505b600101613f73565b50613ffb8482614b8b565b60646140078886614b8b565b6140119190614b8b565b61401b9190614ba2565b925060008161402b606489614b8b565b6140359190614ba2565b61403f9084614bd7565b9050600087815b6101008110156140bd5781925089848360026140629190614b8b565b61406c9190614bd7565b6140769190614bc4565b876140818480614b8b565b61408b9190614bd7565b6140959190614ba2565b91506140a18284613b91565b156140b55750965061042a95505050505050565b600101614046565b5060405162461bcd60e51b815260206004820152601e60248201527f417070726f78696d6174696f6e20646964206e6f7420636f6e766572676500006044820152606401610c82565b6040516001600160a01b03808516602483015283166044820152606481018290526138f19085906323b872dd60e01b90608401613bd3565b805160009060ff808616908716036141925760405162461bcd60e51b815260206004820152601760248201527631b7b6b830b932903a37b5b2b7103a379034ba39b2b63360491b6044820152606401610c82565b808660ff161080156141a65750808560ff16105b6141e45760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881b9bdd08199bdd5b99608a1b6044820152606401610c82565b60006141f08489613208565b9050806000806142008b86614b8b565b90506000805b86811015614287578b60ff16810361422057899150614253565b8a60ff16811461424b5788818151811061423c5761423c614add565b60200260200101519150614253565b600101614206565b61425d8285614bd7565b93506142698783614b8b565b6142738787614b8b565b61427d9190614ba2565b9450600101614206565b506142928683614b8b565b606461429e8787614b8b565b6142a89190614b8b565b6142b29190614ba2565b93506000826142c2606488614b8b565b6142cc9190614ba2565b6142d69085614bd7565b9050600086815b6101008110156140bd5781925088848360026142f99190614b8b565b6143039190614bd7565b61430d9190614bc4565b886143188480614b8b565b6143229190614bd7565b61432c9190614ba2565b91506143388284613b91565b1561434e57509850610825975050505050505050565b6001016142dd565b60006143ab826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166144289092919063ffffffff16565b80519091501561341957808060200190518101906143c99190614d5c565b6134195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c82565b606061042a848460008585600080866001600160a01b0316858760405161444f9190614d9d565b60006040518083038185875af1925050503d806000811461448c576040519150601f19603f3d011682016040523d82523d6000602084013e614491565b606091505b50915091506144a2878383876144ad565b979650505050505050565b6060831561451c578251600003614515576001600160a01b0385163b6145155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c82565b508161042a565b61042a83838151156145315781518083602001fd5b8060405162461bcd60e51b8152600401610c829190614db9565b828054828255906000526020600020908101928215614586579160200282015b8281111561458657825182559160200191906001019061456b565b50614592929150614596565b5090565b5b808211156145925760008155600101614597565b600080604083850312156145be57600080fd5b50508035926020909101359150565b60008083601f8401126145df57600080fd5b50813567ffffffffffffffff8111156145f757600080fd5b6020830191508360208260051b850101111561461257600080fd5b9250929050565b60008060008060006080868803121561463157600080fd5b85359450602086013567ffffffffffffffff81111561464f57600080fd5b61465b888289016145cd565b9699909850959660408101359660609091013595509350505050565b803560ff8116811461468857600080fd5b919050565b6000806000606084860312156146a257600080fd5b83359250602084013591506146b960408501614677565b90509250925092565b6000602082840312156146d457600080fd5b5035919050565b600081518084526020808501945080840160005b838110156147145781516001600160a01b0316875295820195908201906001016146ef565b509495945050505050565b600081518084526020808501945080840160005b8381101561471457815187529582019590820190600101614733565b6020815281516020820152602082015160408201526040820151606082015260608201516080820152608082015160a082015260a082015160c082015260c082015160e0820152600060e08301516101006147b4818501836001600160a01b03169052565b808501519150506101c061012081818601526147d46101e08601846146db565b9250808601519050601f196101408187860301818801526147f5858461471f565b945080880151925050610160818786030181880152614814858461471f565b945080880151925050610180818786030181880152614833858461471f565b945080880151925050506101a061484d8187018315159052565b959095015193019290925250919050565b60008060008060006080868803121561487657600080fd5b8535945060208601359350604086013567ffffffffffffffff81111561489b57600080fd5b6148a7888289016145cd565b96999598509660600135949350505050565b602081526000610335602083018461471f565b80356001600160a01b038116811461468857600080fd5b60008060008060008060c087890312156148fc57600080fd5b8635955060208701359450614913604088016148cc565b9350614921606088016148cc565b92506080870135915060a087013590509295509295509295565b801515811461494957600080fd5b50565b6000806000806060858703121561496257600080fd5b84359350602085013567ffffffffffffffff81111561498057600080fd5b61498c878288016145cd565b90945092505060408501356149a08161493b565b939692955090935050565b600080600080608085870312156149c157600080fd5b843593506149d160208601614677565b92506149df60408601614677565b9396929550929360600135925050565b60008060408385031215614a0257600080fd5b82359150614a12602084016148cc565b90509250929050565b60008060408385031215614a2e57600080fd5b82359150614a1260208401614677565b600080600080600060a08688031215614a5657600080fd5b8535945060208601359350614a6d60408701614677565b94979396509394606081013594506080013592915050565b60008060008060008060c08789031215614a9e57600080fd5b86359550614aae60208801614677565b9450614abc60408801614677565b9350606087013592506080870135915060a087013590509295509295509295565b634e487b7160e01b600052603260045260246000fd5b602080825260129082015271696e646578206f7574206f662072616e676560701b604082015260600190565b600060208284031215614b3157600080fd5b5051919050565b6020808252600d908201526c1f2628173130b630b731b2a7b360991b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761033857610338614b75565b600082614bbf57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561033857610338614b75565b8082018082111561033857610338614b75565b608081526000614bfd608083018761471f565b8281036020840152614c0f818761471f565b604084019590955250506060015292915050565b604081526000614c36604083018561471f565b90508260208301529392505050565b6020808252600d908201526c191a5cd8589b1959081c1bdbdb609a1b604082015260600190565b600181815b80851115614ca7578160001904821115614c8d57614c8d614b75565b80851615614c9a57918102915b93841c9390800290614c71565b509250929050565b600082614cbe57506001610338565b81614ccb57506000610338565b8160018114614ce15760028114614ceb57614d07565b6001915050610338565b60ff841115614cfc57614cfc614b75565b50506001821b610338565b5060208310610133831016604e8410600b8410161715614d2a575081810a610338565b614d348383614c6c565b8060001904821115614d4857614d48614b75565b029392505050565b60006103358383614caf565b600060208284031215614d6e57600080fd5b81516103358161493b565b60005b83811015614d94578181015183820152602001614d7c565b50506000910152565b60008251614daf818460208701614d79565b9190910192915050565b6020815260008251806020840152614dd8816040850160208701614d79565b601f01601f1916919091016040019291505056fea264697066735822122025cedc3c210fe9aca4513b0d3b8a60d2365375dbcd2d8dc7a1249f05a95fc7cb64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4E22 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x12C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8D365457 GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xB6618DFF GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xB6618DFF EQ PUSH2 0x2BE JUMPI DUP1 PUSH4 0xBB0577EB EQ PUSH2 0x2D1 JUMPI DUP1 PUSH4 0xD251DC35 EQ PUSH2 0x2E4 JUMPI DUP1 PUSH4 0xF495E807 EQ PUSH2 0x2F7 JUMPI DUP1 PUSH4 0xFF126DE9 EQ PUSH2 0x30A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8D365457 EQ PUSH2 0x24D JUMPI DUP1 PUSH4 0x8F11D27F EQ PUSH2 0x260 JUMPI DUP1 PUSH4 0xA02288F4 EQ PUSH2 0x273 JUMPI DUP1 PUSH4 0xAD94911B EQ PUSH2 0x286 JUMPI DUP1 PUSH4 0xB3A4EAB4 EQ PUSH2 0x2AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x74C6B89B GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0x74C6B89B EQ PUSH2 0x1BD JUMPI DUP1 PUSH4 0x7652F59D EQ PUSH2 0x1D0 JUMPI DUP1 PUSH4 0x76CA2E52 EQ PUSH2 0x1E3 JUMPI DUP1 PUSH4 0x80B297E8 EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0x8B480B12 EQ PUSH2 0x209 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1301CAA2 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0x241CA57A EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0x29D99B10 EQ PUSH2 0x16A JUMPI DUP1 PUSH4 0x2D91A515 EQ PUSH2 0x17D JUMPI DUP1 PUSH4 0x4BBCBA8E EQ PUSH2 0x19D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x144 PUSH2 0x13F CALLDATASIZE PUSH1 0x4 PUSH2 0x45AB JUMP JUMPDEST PUSH2 0x31D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x144 PUSH2 0x165 CALLDATASIZE PUSH1 0x4 PUSH2 0x4619 JUMP JUMPDEST PUSH2 0x33E JUMP JUMPDEST PUSH2 0x144 PUSH2 0x178 CALLDATASIZE PUSH1 0x4 PUSH2 0x468D JUMP JUMPDEST PUSH2 0x411 JUMP JUMPDEST PUSH2 0x190 PUSH2 0x18B CALLDATASIZE PUSH1 0x4 PUSH2 0x46C2 JUMP JUMPDEST PUSH2 0x432 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x14E SWAP2 SWAP1 PUSH2 0x474F JUMP JUMPDEST PUSH2 0x1B0 PUSH2 0x1AB CALLDATASIZE PUSH1 0x4 PUSH2 0x485E JUMP JUMPDEST PUSH2 0x6A9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x14E SWAP2 SWAP1 PUSH2 0x48B9 JUMP JUMPDEST PUSH2 0x144 PUSH2 0x1CB CALLDATASIZE PUSH1 0x4 PUSH2 0x48E3 JUMP JUMPDEST PUSH2 0x73C JUMP JUMPDEST PUSH2 0x144 PUSH2 0x1DE CALLDATASIZE PUSH1 0x4 PUSH2 0x46C2 JUMP JUMPDEST PUSH2 0x7F4 JUMP JUMPDEST PUSH2 0x144 PUSH2 0x1F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x494C JUMP JUMPDEST PUSH2 0x80B JUMP JUMPDEST PUSH2 0x144 PUSH2 0x204 CALLDATASIZE PUSH1 0x4 PUSH2 0x48E3 JUMP JUMPDEST PUSH2 0x82E JUMP JUMPDEST PUSH2 0x235 PUSH2 0x217 CALLDATASIZE PUSH1 0x4 PUSH2 0x46C2 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x14E JUMP JUMPDEST PUSH2 0x144 PUSH2 0x25B CALLDATASIZE PUSH1 0x4 PUSH2 0x4619 JUMP JUMPDEST PUSH2 0x8D5 JUMP JUMPDEST PUSH2 0x144 PUSH2 0x26E CALLDATASIZE PUSH1 0x4 PUSH2 0x49AB JUMP JUMPDEST PUSH2 0x998 JUMP JUMPDEST PUSH2 0x1B0 PUSH2 0x281 CALLDATASIZE PUSH1 0x4 PUSH2 0x45AB JUMP JUMPDEST PUSH2 0x9B2 JUMP JUMPDEST PUSH2 0x299 PUSH2 0x294 CALLDATASIZE PUSH1 0x4 PUSH2 0x49EF JUMP JUMPDEST PUSH2 0x9CD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x14E JUMP JUMPDEST PUSH2 0x235 PUSH2 0x2B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4A1B JUMP JUMPDEST PUSH2 0xA25 JUMP JUMPDEST PUSH2 0x144 PUSH2 0x2CC CALLDATASIZE PUSH1 0x4 PUSH2 0x4A3E JUMP JUMPDEST PUSH2 0xA9A JUMP JUMPDEST PUSH2 0x144 PUSH2 0x2DF CALLDATASIZE PUSH1 0x4 PUSH2 0x4A1B JUMP JUMPDEST PUSH2 0xB2D JUMP JUMPDEST PUSH2 0x144 PUSH2 0x2F2 CALLDATASIZE PUSH1 0x4 PUSH2 0x46C2 JUMP JUMPDEST PUSH2 0xB9A JUMP JUMPDEST PUSH2 0x144 PUSH2 0x305 CALLDATASIZE PUSH1 0x4 PUSH2 0x46C2 JUMP JUMPDEST PUSH2 0xBB1 JUMP JUMPDEST PUSH2 0x144 PUSH2 0x318 CALLDATASIZE PUSH1 0x4 PUSH2 0x4A85 JUMP JUMPDEST PUSH2 0xBC8 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x335 SWAP1 DUP4 PUSH2 0xC5C JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0x365 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE DUP2 TIMESTAMP DUP2 LT ISZERO PUSH2 0x38C JUMPI PUSH1 0x40 MLOAD PUSH4 0x26F04E8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x3B7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x401 DUP7 DUP7 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP DUP13 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP4 SWAP3 POP DUP9 SWAP2 POP POP PUSH2 0xCA0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x16 SSTORE SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x42A SWAP1 DUP5 DUP5 PUSH2 0x14D0 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x4B2 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x1C0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP2 DUP6 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x8 DUP3 ADD DUP1 SLOAD DUP6 MLOAD DUP2 DUP7 MUL DUP2 ADD DUP7 ADD SWAP1 SWAP7 MSTORE DUP1 DUP7 MSTORE SWAP2 SWAP5 SWAP3 SWAP4 PUSH2 0x100 DUP7 ADD SWAP4 SWAP3 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x578 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x55A JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x9 DUP3 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x5D0 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x5BC JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0xA DUP3 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x628 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x614 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0xB DUP3 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x680 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x66C JUMPI JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0xC DUP3 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xD SWAP1 SWAP2 ADD SLOAD PUSH1 0x40 SWAP1 SWAP2 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x60 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0x6D0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE DUP2 TIMESTAMP DUP2 LT ISZERO PUSH2 0x6F7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x26F04E8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x722 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x401 SWAP1 DUP8 DUP8 DUP8 PUSH2 0x1561 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0x763 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE DUP2 TIMESTAMP DUP2 LT ISZERO PUSH2 0x78A JUMPI PUSH1 0x40 MLOAD PUSH4 0x26F04E8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x7B5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7E3 PUSH2 0x7C2 DUP10 DUP9 PUSH2 0x9CD JUMP JUMPDEST PUSH2 0x7CC DUP11 DUP9 PUSH2 0x9CD JUMP JUMPDEST PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 DUP11 DUP9 PUSH2 0x18FE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x16 SSTORE SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x338 SWAP1 PUSH2 0x1CFA JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x825 SWAP1 DUP6 DUP6 DUP6 PUSH2 0x1D05 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0x855 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE DUP2 TIMESTAMP DUP2 LT ISZERO PUSH2 0x87C JUMPI PUSH1 0x40 MLOAD PUSH4 0x26F04E8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x8A7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7E3 PUSH2 0x8B4 DUP10 DUP9 PUSH2 0x9CD JUMP JUMPDEST PUSH2 0x8BE DUP11 DUP9 PUSH2 0x9CD JUMP JUMPDEST PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 DUP11 DUP9 PUSH2 0x1FD5 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0x8FC JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE DUP2 TIMESTAMP DUP2 LT ISZERO PUSH2 0x923 JUMPI PUSH1 0x40 MLOAD PUSH4 0x26F04E8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x94E JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x401 DUP7 DUP7 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP DUP13 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP4 SWAP3 POP DUP9 SWAP2 POP POP PUSH2 0x2362 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x825 SWAP1 DUP6 DUP6 DUP6 PUSH2 0x2B55 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 SWAP1 PUSH2 0x335 SWAP1 DUP4 PUSH2 0x2BB6 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP3 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 PUSH2 0x9FE DUP6 DUP4 PUSH2 0xA25 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x335 JUMPI PUSH1 0x40 MLOAD PUSH4 0x336752BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x8 ADD SLOAD PUSH1 0xFF DUP4 AND LT PUSH2 0xA58 JUMPI PUSH1 0x40 MLOAD PUSH3 0xE67317 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x8 ADD DUP1 SLOAD PUSH1 0xFF DUP5 AND SWAP1 DUP2 LT PUSH2 0xA7E JUMPI PUSH2 0xA7E PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0xAC1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE DUP2 TIMESTAMP DUP2 LT ISZERO PUSH2 0xAE8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x26F04E8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xB13 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x401 SWAP1 DUP8 DUP8 DUP8 PUSH2 0x2C8D JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0xA ADD SLOAD PUSH1 0xFF DUP4 AND LT PUSH2 0xB61 JUMPI PUSH1 0x40 MLOAD PUSH4 0x41056991 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xA ADD DUP1 SLOAD PUSH1 0xFF DUP5 AND SWAP1 DUP2 LT PUSH2 0xB87 JUMPI PUSH2 0xB87 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x338 SWAP1 PUSH2 0x2FE7 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x338 SWAP1 PUSH2 0x2FFE JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0xBEF JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE DUP2 TIMESTAMP DUP2 LT ISZERO PUSH2 0xC16 JUMPI PUSH1 0x40 MLOAD PUSH4 0x26F04E8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xC41 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x7E3 SWAP1 DUP9 DUP9 DUP9 DUP9 PUSH2 0x1FD5 JUMP JUMPDEST PUSH1 0x8 DUP3 ADD SLOAD PUSH1 0x0 SWAP1 DUP3 LT PUSH2 0xC8B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4AF3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0xB ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xB87 JUMPI PUSH2 0xB87 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xCCD DUP8 PUSH2 0x1CFA JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x7 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xD4D JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xD39 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xDA5 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xD91 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE POP SWAP1 POP DUP1 PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDF1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE15 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x8 DUP6 ADD SLOAD DUP5 MLOAD DUP1 DUP3 EQ PUSH2 0xE67 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x6D69736D6174636820706F6F6C20746F6B656E73 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEB1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xED5 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST DUP6 GT ISZERO DUP1 ISZERO PUSH2 0xEE3 JUMPI POP DUP5 ISZERO ISZERO JUMPDEST PUSH2 0xEFF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4B38 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF0F DUP9 PUSH1 0x5 ADD SLOAD DUP5 PUSH2 0x30D1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF2C JUMPI PUSH2 0xF2C PUSH2 0x4B5F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF55 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP5 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF73 JUMPI PUSH2 0xF73 PUSH2 0x4B5F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF9C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH2 0xFBE PUSH2 0xFB4 DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD PUSH2 0x30FD JUMP JUMPDEST DUP8 PUSH1 0x60 ADD MLOAD PUSH2 0x3208 JUMP JUMPDEST DUP7 MSTORE PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x10AF JUMPI DUP10 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xFDD JUMPI PUSH2 0xFDD PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xFFB JUMPI PUSH2 0xFFB PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD LT ISZERO PUSH2 0x1051 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x7769746864726177206D6F7265207468616E20617661696C61626C6500000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST DUP10 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1063 JUMPI PUSH2 0x1063 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1081 JUMPI PUSH2 0x1081 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x109C JUMPI PUSH2 0x109C PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0xFC3 JUMP JUMPDEST POP PUSH2 0x10C1 PUSH2 0xFB4 DUP3 DUP9 PUSH1 0xE0 ADD MLOAD PUSH2 0x30FD JUMP JUMPDEST PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x12B2 JUMPI PUSH1 0x0 DUP8 PUSH1 0x0 ADD MLOAD DUP9 PUSH1 0xC0 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x10EE JUMPI PUSH2 0x10EE PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x20 ADD MLOAD PUSH2 0x1105 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x110F SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x113F DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1128 JUMPI PUSH2 0x1128 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x33B5 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH5 0x2540BE400 PUSH2 0x1151 DUP3 DUP9 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x115B SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x116D JUMPI PUSH2 0x116D PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP POP POP PUSH1 0x0 PUSH5 0x2540BE400 DUP13 PUSH1 0x6 ADD SLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x119A JUMPI PUSH2 0x119A PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x11AC SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x11B6 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x11CB JUMPI PUSH2 0x11CB PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x11DD SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP13 PUSH1 0xA ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x11F2 JUMPI PUSH2 0x11F2 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP1 DUP13 PUSH1 0xB ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x1216 JUMPI PUSH2 0x1216 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x122B SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST DUP13 PUSH1 0xB ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x1240 JUMPI PUSH2 0x1240 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1260 JUMPI PUSH2 0x1260 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x127A JUMPI PUSH2 0x127A PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x128C SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x129E JUMPI PUSH2 0x129E PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x10C9 JUMP JUMPDEST POP PUSH2 0x12C4 PUSH2 0xFB4 DUP3 DUP9 PUSH1 0xE0 ADD MLOAD PUSH2 0x30FD JUMP JUMPDEST PUSH1 0x40 DUP8 ADD DUP2 SWAP1 MSTORE DUP7 MLOAD PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0x0 SWAP4 POP SWAP1 SWAP2 PUSH2 0x12E2 SWAP1 DUP4 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x12EC SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x12F6 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x1337 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x85E995C9BC8185B5BDD5B9D PUSH1 0xA2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x1342 DUP2 PUSH1 0x1 PUSH2 0x4BD7 JUMP JUMPDEST SWAP1 POP DUP8 DUP2 GT ISZERO PUSH2 0x1394 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F6B656E416D6F756E74203E206D61784275726E416D6F756E740000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x79CC679 PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x79CC6790 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x13E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x13F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x1463 JUMPI PUSH2 0x145B DUP12 PUSH1 0x8 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x141D JUMPI PUSH2 0x141D PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x144E JUMPI PUSH2 0x144E PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x33DA JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x13FD JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP11 PUSH1 0x0 ADD SLOAD PUSH32 0xA404896827F41A3845DE89F154BF1F4FE5CBDF79DA7C7805263A3D0B7DE9E672 DUP12 DUP6 DUP11 PUSH1 0x20 ADD MLOAD DUP7 DUP13 PUSH1 0xA0 ADD MLOAD PUSH2 0x14AB SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x14BB SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4BEA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1557 DUP6 DUP6 DUP6 DUP9 PUSH1 0x7 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x152E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1552 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST PUSH2 0x341E JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x7 DUP5 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15AE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15D2 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST DUP6 GT ISZERO PUSH2 0x15F1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4B38 JUMP JUMPDEST PUSH1 0x8 DUP7 ADD SLOAD DUP4 DUP2 EQ PUSH2 0x163B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x6D69736D6174636820706F6F6C546F6B656E73 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 DUP8 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x168B JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1677 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16F6 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1705 DUP4 DUP11 DUP5 PUSH2 0x3495 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1848 JUMPI DUP10 DUP10 DUP3 DUP2 DUP2 LT PUSH2 0x1727 JUMPI PUSH2 0x1727 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1740 JUMPI PUSH2 0x1740 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD LT ISZERO PUSH2 0x1796 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616D6F756E74735B695D203C206D696E416D6F756E74735B695D000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x17A8 JUMPI PUSH2 0x17A8 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x17C2 JUMPI PUSH2 0x17C2 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x17D4 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP13 PUSH1 0xA ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x17E9 JUMPI PUSH2 0x17E9 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP PUSH2 0x1840 DUP13 PUSH1 0x8 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x180F JUMPI PUSH2 0x180F PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x144E JUMPI PUSH2 0x144E PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x170D JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0x79CC679 PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0x79CC6790 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1891 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x18A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP DUP13 SLOAD CALLER SWAP3 POP SWAP1 POP PUSH32 0x58F96D387AC27C23FB6350424CB6B032322B14FFD82029E96AEED2C525E790E8 DUP5 PUSH2 0x18DA DUP15 DUP9 PUSH2 0x4BC4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x18E8 SWAP3 SWAP2 SWAP1 PUSH2 0x4C23 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xC DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1926 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4C45 JUMP JUMPDEST DUP6 PUSH1 0xA ADD DUP5 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x193E JUMPI PUSH2 0x193E PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP4 GT ISZERO PUSH2 0x1988 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x3E706F6F6C2062616C616E6365 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP9 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x19DB JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x19C7 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x19EF DUP10 DUP10 DUP10 DUP10 DUP6 PUSH2 0x3586 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP DUP5 DUP4 GT ISZERO PUSH2 0x1A31 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0xC8F0407C40DAC2F088F PUSH1 0xB3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 DUP10 PUSH1 0x9 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x1A4B JUMPI PUSH2 0x1A4B PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH5 0x2540BE400 DUP12 PUSH1 0x6 ADD SLOAD DUP6 PUSH2 0x1A6C SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x1A76 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x1A80 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP DUP1 DUP5 DUP4 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x1A99 JUMPI PUSH2 0x1A99 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1AAB SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH2 0x1AB5 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x1ACD JUMPI PUSH2 0x1ACD PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP7 DUP3 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x1AF1 JUMPI PUSH2 0x1AF1 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1B03 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x1B1B JUMPI PUSH2 0x1B1B PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE DUP1 ISZERO PUSH2 0x1B80 JUMPI DUP1 DUP11 PUSH1 0xB ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x1B46 JUMPI PUSH2 0x1B46 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x1B5B SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST DUP11 PUSH1 0xB ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x1B73 JUMPI PUSH2 0x1B73 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE JUMPDEST PUSH1 0x0 DUP11 PUSH1 0x8 ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x1B9A JUMPI PUSH2 0x1B9A PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BEE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C12 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST DUP6 GT ISZERO PUSH2 0x1C55 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x36B7B932903A3430B7103CB7BA9037BBB7 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x1C5F DUP2 DUP7 PUSH2 0x37A6 JUMP JUMPDEST POP PUSH2 0x1C97 DUP11 PUSH1 0x8 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x1C7B JUMPI PUSH2 0x1C7B PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP10 PUSH2 0x33DA JUMP JUMPDEST DUP10 SLOAD PUSH1 0x40 DUP1 MLOAD DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP11 SWAP1 MSTORE PUSH1 0xFF DUP1 DUP14 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP11 AND PUSH1 0x60 DUP3 ADD MSTORE CALLER SWAP2 SWAP1 PUSH32 0x28D4CF2D5709DA3B474B5F05CFD7083FAFFD601F9500D1F8439B8A13EC7DF320 SWAP1 PUSH1 0x80 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP SWAP2 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x338 DUP3 PUSH2 0x38F7 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1D56 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1D42 JUMPI JUMPDEST POP POP DUP4 MLOAD SWAP4 SWAP5 POP POP POP DUP6 DUP3 EQ SWAP1 POP PUSH2 0x1DB0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x696E76616C6964206C656E677468206F6620616D6F756E747300000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DBB DUP9 PUSH2 0x1CFA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP9 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1E0D JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1DF9 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x1E29 PUSH2 0x1E23 DUP7 DUP5 PUSH2 0x30FD JUMP JUMPDEST DUP5 PUSH2 0x3208 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1F00 JUMPI DUP8 ISZERO PUSH2 0x1E9C JUMPI DUP10 DUP10 DUP3 DUP2 DUP2 LT PUSH2 0x1E4E JUMPI PUSH2 0x1E4E PUSH2 0x4ADD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E67 JUMPI PUSH2 0x1E67 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1E79 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E8B JUMPI PUSH2 0x1E8B PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x1EF8 JUMP JUMPDEST DUP10 DUP10 DUP3 DUP2 DUP2 LT PUSH2 0x1EAE JUMPI PUSH2 0x1EAE PUSH2 0x4ADD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1EC7 JUMPI PUSH2 0x1EC7 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1ED9 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1EEB JUMPI PUSH2 0x1EEB PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1E2E JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1F16 PUSH2 0x1F10 DUP8 DUP6 PUSH2 0x30FD JUMP JUMPDEST DUP6 PUSH2 0x3208 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP12 PUSH1 0x7 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F6F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F93 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST SWAP1 POP DUP9 ISZERO PUSH2 0x1FC9 JUMPI DUP3 DUP2 PUSH2 0x1FA7 DUP3 DUP6 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x1FB1 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x1FBB SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x42A JUMP JUMPDEST DUP3 DUP2 PUSH2 0x1FA7 DUP5 DUP4 PUSH2 0x4BC4 JUMP JUMPDEST PUSH1 0xC DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1FFD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4C45 JUMP JUMPDEST PUSH1 0x0 DUP7 PUSH1 0x8 ADD DUP7 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2017 JUMPI PUSH2 0x2017 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x206B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x208F SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST DUP5 GT ISZERO PUSH2 0x20D7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39BBB0B81036B7B932903A3430B7103CB7BA9037BBB7 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x20E1 DUP2 DUP6 PUSH2 0x37A6 JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP9 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2135 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x2121 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x2149 DUP10 DUP10 DUP10 DUP10 DUP6 PUSH2 0x3940 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP DUP5 DUP4 LT ISZERO PUSH2 0x218B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x6479203C206D696E4479 PUSH1 0xB0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 DUP10 PUSH1 0x9 ADD DUP9 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x21A5 JUMPI PUSH2 0x21A5 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH5 0x2540BE400 DUP12 PUSH1 0x6 ADD SLOAD DUP6 PUSH2 0x21C6 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x21D0 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x21DA SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP DUP7 DUP3 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x21F2 JUMPI PUSH2 0x21F2 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2204 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x221C JUMPI PUSH2 0x221C PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP1 DUP5 DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x2241 JUMPI PUSH2 0x2241 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2253 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x225D SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2275 JUMPI PUSH2 0x2275 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE DUP1 ISZERO PUSH2 0x22DA JUMPI DUP1 DUP11 PUSH1 0xB ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x22A0 JUMPI PUSH2 0x22A0 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x22B5 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST DUP11 PUSH1 0xB ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x22CD JUMPI PUSH2 0x22CD PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE JUMPDEST PUSH2 0x2311 DUP11 PUSH1 0x8 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x22F5 JUMPI PUSH2 0x22F5 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP7 PUSH2 0x33DA JUMP JUMPDEST DUP10 SLOAD PUSH1 0x40 DUP1 MLOAD DUP10 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0xFF DUP1 DUP14 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP11 AND PUSH1 0x60 DUP3 ADD MSTORE CALLER SWAP2 SWAP1 PUSH32 0x28D4CF2D5709DA3B474B5F05CFD7083FAFFD601F9500D1F8439B8A13EC7DF320 SWAP1 PUSH1 0x80 ADD PUSH2 0x1CE4 JUMP JUMPDEST PUSH1 0xC DUP4 ADD SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x238A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4C45 JUMP JUMPDEST PUSH1 0x8 DUP5 ADD SLOAD DUP4 MLOAD DUP2 EQ PUSH2 0x23D8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x6D69736D6174636820706F6F6C656420746F6B656E73 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2404 DUP9 PUSH2 0x1CFA JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x7 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2484 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x2470 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x24DC JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x24C8 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE POP SWAP1 POP DUP1 PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2528 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x254C SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x257A JUMPI PUSH2 0x2577 PUSH2 0x256D DUP3 PUSH1 0xC0 ADD MLOAD DUP4 PUSH1 0xE0 ADD MLOAD PUSH2 0x30FD JUMP JUMPDEST DUP3 PUSH1 0x60 ADD MLOAD PUSH2 0x3208 JUMP JUMPDEST DUP2 MSTORE JUMPDEST PUSH1 0x0 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2595 JUMPI PUSH2 0x2595 PUSH2 0x4B5F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x25BE JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x271D JUMPI PUSH1 0xA0 DUP4 ADD MLOAD ISZERO ISZERO DUP1 PUSH2 0x25F8 JUMPI POP DUP7 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x25EB JUMPI PUSH2 0x25EB PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 EQ ISZERO JUMPDEST PUSH2 0x2639 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x21737570706C7920616C6C20746F6B656E73 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST DUP7 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x264B JUMPI PUSH2 0x264B PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 EQ PUSH2 0x26B6 JUMPI PUSH1 0x0 DUP9 PUSH1 0x8 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x2671 JUMPI PUSH2 0x2671 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH2 0x26B4 DUP2 DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x26A7 JUMPI PUSH2 0x26A7 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x37A6 JUMP JUMPDEST POP JUMPDEST DUP7 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x26C8 JUMPI PUSH2 0x26C8 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH1 0xC0 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x26E6 JUMPI PUSH2 0x26E6 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x26F8 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x270A JUMPI PUSH2 0x270A PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x25C4 JUMP JUMPDEST POP PUSH2 0x2739 PUSH2 0x272F DUP3 DUP5 PUSH1 0xE0 ADD MLOAD PUSH2 0x30FD JUMP JUMPDEST DUP4 PUSH1 0x60 ADD MLOAD PUSH2 0x3208 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD DUP2 SWAP1 MSTORE DUP3 MLOAD LT PUSH2 0x2783 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x442073686F756C6420696E637265617365 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x0 DUP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x27A8 JUMPI PUSH2 0x27A8 PUSH2 0x4B5F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x27D1 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x29E9 JUMPI PUSH1 0x0 PUSH2 0x27F0 DUP10 PUSH1 0x5 ADD SLOAD DUP7 PUSH2 0x30D1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x29C2 JUMPI PUSH1 0x0 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0xC0 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x281A JUMPI PUSH2 0x281A PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD PUSH2 0x2831 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x283B SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP PUSH5 0x2540BE400 PUSH2 0x2858 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1128 JUMPI PUSH2 0x1128 PUSH2 0x4ADD JUMP JUMPDEST PUSH2 0x2862 SWAP1 DUP6 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x286C SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x287E JUMPI PUSH2 0x287E PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH5 0x2540BE400 DUP13 PUSH1 0x6 ADD SLOAD DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x28A9 JUMPI PUSH2 0x28A9 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x28BB SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x28C5 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP DUP1 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x28DA JUMPI PUSH2 0x28DA PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x28EC SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP13 PUSH1 0xA ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x2901 JUMPI PUSH2 0x2901 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP1 DUP13 PUSH1 0xB ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x2925 JUMPI PUSH2 0x2925 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x293A SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST DUP13 PUSH1 0xB ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x294F JUMPI PUSH2 0x294F PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x296F JUMPI PUSH2 0x296F PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2989 JUMPI PUSH2 0x2989 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x299B SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x29AD JUMPI PUSH2 0x29AD PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x27F5 JUMP JUMPDEST POP PUSH2 0x29DE PUSH2 0x29D4 DUP5 DUP7 PUSH1 0xE0 ADD MLOAD PUSH2 0x30FD JUMP JUMPDEST DUP6 PUSH1 0x60 ADD MLOAD PUSH2 0x3208 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE POP PUSH2 0x2A00 JUMP JUMPDEST DUP2 MLOAD PUSH2 0x29FE SWAP1 PUSH1 0xA DUP11 ADD SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH2 0x454B JUMP JUMPDEST POP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 SUB PUSH2 0x2A19 JUMPI POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x2A47 JUMP JUMPDEST DUP4 MLOAD PUSH1 0xA0 DUP6 ADD MLOAD PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x2A30 SWAP1 DUP4 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x2A3A SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x2A44 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x2A84 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x36B4B73A101E1036B4B7 PUSH1 0xB1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x40C10F19 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x40C10F19 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2AE6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x0 ADD SLOAD PUSH32 0xBCB1AB680EE25EF87D34EC297263A10E0A823CD81326B0AA6BC55B86CB2A4188 DUP11 DUP6 DUP9 PUSH1 0x20 ADD MLOAD DUP7 DUP11 PUSH1 0xA0 ADD MLOAD PUSH2 0x2B31 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2B41 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4BEA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1557 DUP6 DUP6 DUP6 DUP6 DUP10 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2BAC JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x2B98 JUMPI JUMPDEST POP POP POP POP POP PUSH2 0x3940 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x335 DUP4 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2C09 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x2BF5 JUMPI JUMPDEST POP POP POP POP POP DUP4 DUP6 PUSH1 0x7 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C64 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2C88 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST PUSH2 0x3495 JUMP JUMPDEST PUSH1 0x7 DUP5 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2CDA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2CFE SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST DUP6 GT ISZERO PUSH2 0x2D1D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4B38 JUMP JUMPDEST PUSH1 0x8 DUP7 ADD SLOAD PUSH1 0xFF DUP6 AND DUP2 GT PUSH2 0x2D60 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x1B9BDD08199BDD5B99 PUSH1 0xBA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2DA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2DC4 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x2DD5 DUP11 DUP11 DUP11 DUP7 PUSH2 0x341E JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP7 DUP3 LT ISZERO PUSH2 0x2E1A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x191E480F081B5A5B905B5BDD5B9D PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 PUSH5 0x2540BE400 DUP12 PUSH1 0x6 ADD SLOAD DUP4 PUSH2 0x2E32 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x2E3C SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP PUSH2 0x2E48 DUP2 DUP5 PUSH2 0x4BD7 JUMP JUMPDEST DUP12 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2E60 JUMPI PUSH2 0x2E60 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x2E75 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP12 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2E8D JUMPI PUSH2 0x2E8D PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE DUP1 ISZERO PUSH2 0x2EF2 JUMPI DUP1 DUP12 PUSH1 0xB ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2EB8 JUMPI PUSH2 0x2EB8 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x2ECD SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST DUP12 PUSH1 0xB ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2EE5 JUMPI PUSH2 0x2EE5 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x79CC679 PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0x79CC6790 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F4E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x2F89 DUP12 PUSH1 0x8 ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2F6D JUMPI PUSH2 0x2F6D PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP6 PUSH2 0x33DA JUMP JUMPDEST DUP11 SLOAD PUSH1 0x40 DUP1 MLOAD DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0xFF DUP13 AND DUP2 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD CALLER SWAP3 SWAP2 PUSH32 0x1A66F6EA1C14E22A62AB434F3414908BB5F49133D673C872C8957AA961E4C215 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP SWAP1 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x64 PUSH2 0x2FF4 DUP4 PUSH2 0x38F7 JUMP JUMPDEST PUSH2 0x338 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x301B PUSH2 0x300D DUP5 PUSH2 0x3AE1 JUMP JUMPDEST PUSH2 0x3016 DUP6 PUSH2 0x1CFA JUMP JUMPDEST PUSH2 0x3208 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x7 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3079 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x309D SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x30C6 JUMPI DUP1 PUSH2 0x30B2 PUSH1 0x12 PUSH1 0xA PUSH2 0x4D50 JUMP JUMPDEST PUSH2 0x30BC SWAP1 DUP6 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x825 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST POP PUSH1 0x0 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x30DE PUSH1 0x1 DUP4 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x30E9 SWAP1 PUSH1 0x4 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x30F3 DUP4 DUP6 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x335 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH1 0x60 SWAP2 SWAP1 DUP2 EQ PUSH2 0x314A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x6D69736D61746368206D756C7469706C69657273 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3165 JUMPI PUSH2 0x3165 PUSH2 0x4B5F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x318E JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x31FF JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x31AE JUMPI PUSH2 0x31AE PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x31C8 JUMPI PUSH2 0x31C8 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x31DA SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x31EC JUMPI PUSH2 0x31EC PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3194 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP2 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3247 JUMPI DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x322A JUMPI PUSH2 0x322A PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH2 0x323D SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x3210 JUMP JUMPDEST POP DUP1 PUSH1 0x0 SUB PUSH2 0x325B JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x338 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 PUSH2 0x3269 DUP6 DUP9 PUSH2 0x4B8B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x3376 JUMPI DUP3 PUSH1 0x0 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0x32C7 JUMPI DUP8 DUP12 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3297 JUMPI PUSH2 0x3297 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x32A9 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x32B3 DUP7 DUP5 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x32BD SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x327C JUMP JUMPDEST POP DUP4 SWAP5 POP DUP1 DUP8 PUSH1 0x1 PUSH2 0x32D9 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH2 0x32E3 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH1 0x64 DUP6 PUSH2 0x32F0 DUP3 DUP8 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x32FA SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3304 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x330E SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST DUP5 PUSH2 0x3319 DUP10 DUP5 PUSH2 0x4B8B JUMP JUMPDEST PUSH1 0x64 PUSH2 0x3325 DUP11 DUP9 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x332F SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x3339 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH2 0x3343 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x334D SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP4 POP PUSH2 0x3359 DUP5 DUP7 PUSH2 0x3B91 JUMP JUMPDEST ISZERO PUSH2 0x336D JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x338 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x326E JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x4420646F6573206E6F7420636F6E7665726765 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 GT ISZERO PUSH2 0x33D0 JUMPI PUSH2 0x33C9 DUP3 DUP5 PUSH2 0x4BC4 JUMP JUMPDEST SWAP1 POP PUSH2 0x338 JUMP JUMPDEST PUSH2 0x335 DUP4 DUP4 PUSH2 0x4BC4 JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x33E7 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x340E JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A48CA7B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3419 DUP4 DUP4 DUP4 PUSH2 0x3BA7 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3432 DUP10 DUP9 DUP11 DUP10 PUSH2 0x3C0A JUMP JUMPDEST DUP1 SWAP4 POP DUP2 SWAP5 POP DUP3 SWAP6 POP POP POP POP PUSH1 0x0 DUP4 DUP11 PUSH1 0x9 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x3459 JUMPI PUSH2 0x3459 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP5 DUP5 PUSH2 0x3470 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x347A SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x3484 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST SWAP4 SWAP11 SWAP4 SWAP10 POP SWAP3 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 DUP4 GT ISZERO PUSH2 0x34DD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x65786365656420746F74616C20737570706C79 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x34FA JUMPI PUSH2 0x34FA PUSH2 0x4B5F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3523 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1557 JUMPI DUP5 DUP7 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3545 JUMPI PUSH2 0x3545 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3557 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3561 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3573 JUMPI PUSH2 0x3573 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3529 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0xFF AND DUP7 PUSH1 0xFF AND SUB PUSH2 0x35D8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x31B7B6B830B932903A37B5B2B7103A379034BA39B2B633 PUSH1 0x49 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 DUP8 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3628 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x3614 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x363B DUP6 DUP4 PUSH2 0x30FD JUMP JUMPDEST SWAP1 POP DUP1 MLOAD DUP9 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x3653 JUMPI POP DUP1 MLOAD DUP8 PUSH1 0xFF AND LT JUMPDEST PUSH2 0x366F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4AF3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x367A DUP11 PUSH2 0x1CFA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3688 DUP4 DUP4 PUSH2 0x3208 JUMP JUMPDEST SWAP1 POP DUP4 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x369F JUMPI PUSH2 0x369F PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH2 0x36B2 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x36C7 JUMPI PUSH2 0x36C7 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x36D9 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x36EE JUMPI PUSH2 0x36EE PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x3708 DUP4 DUP13 DUP7 DUP6 PUSH2 0x3F17 JUMP JUMPDEST SWAP1 POP DUP4 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x371F JUMPI PUSH2 0x371F PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x1 PUSH2 0x3734 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH2 0x373E SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST SWAP7 POP PUSH5 0x2540BE400 DUP13 PUSH1 0x5 ADD SLOAD DUP9 PUSH2 0x3756 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3760 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP6 POP DUP5 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3777 JUMPI PUSH2 0x3777 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP9 PUSH2 0x378B SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH2 0x3795 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP7 POP POP POP POP POP POP SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x37B2 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x37D9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2A38B133 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP3 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3822 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3846 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST SWAP1 POP PUSH2 0x385D PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP7 PUSH2 0x4106 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP4 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x38C9 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST PUSH2 0x38D3 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST EQ PUSH2 0x38F1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE407735 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x2 DUP3 ADD SLOAD PUSH1 0x1 DUP4 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP1 DUP4 EQ DUP1 ISZERO SWAP1 PUSH2 0x3918 JUMPI POP DUP2 TIMESTAMP LT JUMPDEST ISZERO PUSH2 0x3939 JUMPI PUSH1 0x0 DUP5 PUSH1 0x3 ADD SLOAD SWAP1 POP DUP1 DUP4 SUB DUP2 TIMESTAMP SUB DUP6 MUL TIMESTAMP DUP6 SUB DUP5 MUL ADD DIV SWAP4 POP POP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP8 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3993 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x397F JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x39A6 DUP6 DUP4 PUSH2 0x30FD JUMP JUMPDEST SWAP1 POP DUP1 MLOAD DUP9 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x39BE JUMPI POP DUP1 MLOAD DUP8 PUSH1 0xFF AND LT JUMPDEST PUSH2 0x39DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4AF3 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x39F1 JUMPI PUSH2 0x39F1 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3A0E JUMPI PUSH2 0x3A0E PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH2 0x3A21 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3A2B SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3A44 PUSH2 0x3A3B DUP13 PUSH2 0x1CFA JUMP JUMPDEST DUP12 DUP12 DUP6 DUP8 PUSH2 0x413E JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 DUP5 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3A5E JUMPI PUSH2 0x3A5E PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3A70 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x3A7A SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST SWAP6 POP PUSH5 0x2540BE400 DUP12 PUSH1 0x5 ADD SLOAD DUP8 PUSH2 0x3A92 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3A9C SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP5 POP DUP4 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3AB3 JUMPI PUSH2 0x3AB3 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP8 PUSH2 0x3AC7 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x3AD1 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP6 POP POP POP POP POP SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x338 DUP3 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3B34 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x3B20 JUMPI JUMPDEST POP POP POP POP POP DUP4 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3B87 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x3B73 JUMPI JUMPDEST POP POP POP POP POP PUSH2 0x30FD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH2 0x3B9F DUP5 DUP5 PUSH2 0x33B5 JUMP JUMPDEST LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x3419 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x4356 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3C19 DUP9 PUSH2 0x3AE1 JUMP JUMPDEST SWAP1 POP DUP1 MLOAD DUP8 PUSH1 0xFF AND LT PUSH2 0x3C3E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4AF3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 POP PUSH2 0x3C77 DUP10 PUSH2 0x1CFA JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x3C89 SWAP1 DUP4 SWAP1 PUSH2 0x3208 JUMP JUMPDEST DUP1 DUP3 MSTORE DUP7 SWAP1 PUSH2 0x3C98 SWAP1 DUP10 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3CA2 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST DUP2 MLOAD PUSH2 0x3CAE SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD DUP3 SWAP1 PUSH1 0xFF DUP11 AND SWAP1 DUP2 LT PUSH2 0x3CCA JUMPI PUSH2 0x3CCA PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 GT ISZERO PUSH2 0x3D15 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x6578636565647320617661696C61626C65 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x3D29 DUP2 PUSH1 0x80 ADD MLOAD DUP10 DUP5 DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x3F17 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3D4B JUMPI PUSH2 0x3D4B PUSH2 0x4B5F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3D74 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH2 0x3D86 DUP11 PUSH1 0x5 ADD SLOAD DUP5 MLOAD PUSH2 0x30D1 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3E63 JUMPI PUSH1 0x0 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3DAC JUMPI PUSH2 0x3DAC PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH5 0x2540BE400 DUP6 PUSH1 0x60 ADD MLOAD DUP14 PUSH1 0xFF AND DUP5 EQ PUSH2 0x3DF5 JUMPI DUP7 MLOAD PUSH1 0x20 DUP9 ADD MLOAD PUSH2 0x3DDC SWAP1 DUP6 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3DE6 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x3DF0 SWAP1 DUP5 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x3E1F JUMP JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD DUP8 MLOAD PUSH1 0x20 DUP10 ADD MLOAD PUSH2 0x3E0B SWAP1 DUP7 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3E15 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x3E1F SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x3E29 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3E33 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x3E3D SWAP1 DUP3 PUSH2 0x4BC4 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3E4F JUMPI PUSH2 0x3E4F PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x3D90 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x3E7A DUP5 PUSH1 0x80 ADD MLOAD DUP13 DUP6 DUP8 PUSH1 0x20 ADD MLOAD PUSH2 0x3F17 JUMP JUMPDEST DUP4 DUP13 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3E8F JUMPI PUSH2 0x3E8F PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3EA1 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST SWAP1 POP DUP12 PUSH1 0x9 ADD DUP12 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x3EBB JUMPI PUSH2 0x3EBB PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH1 0x1 DUP3 PUSH2 0x3ED3 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x3EDD SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP DUP1 DUP5 PUSH1 0x40 ADD MLOAD DUP7 DUP14 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3EFA JUMPI PUSH2 0x3EFA PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP8 POP SWAP8 POP SWAP8 POP POP POP POP POP POP SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF DUP6 AND DUP2 GT PUSH2 0x3F60 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x151BDAD95B881B9BDD08199BDD5B99 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST DUP3 PUSH1 0x0 DUP1 PUSH2 0x3F6E DUP5 DUP11 PUSH2 0x4B8B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x3FF0 JUMPI DUP9 PUSH1 0xFF AND DUP2 EQ PUSH2 0x3FE8 JUMPI DUP8 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3F97 JUMPI PUSH2 0x3F97 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x3FAA SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST SWAP3 POP DUP5 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3FBF JUMPI PUSH2 0x3FBF PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3FD1 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3FDB DUP9 DUP7 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3FE5 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP4 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x3F73 JUMP JUMPDEST POP PUSH2 0x3FFB DUP5 DUP3 PUSH2 0x4B8B JUMP JUMPDEST PUSH1 0x64 PUSH2 0x4007 DUP9 DUP7 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x4011 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x401B SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP3 POP PUSH1 0x0 DUP2 PUSH2 0x402B PUSH1 0x64 DUP10 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x4035 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x403F SWAP1 DUP5 PUSH2 0x4BD7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP8 DUP2 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x40BD JUMPI DUP2 SWAP3 POP DUP10 DUP5 DUP4 PUSH1 0x2 PUSH2 0x4062 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x406C SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH2 0x4076 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP8 PUSH2 0x4081 DUP5 DUP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x408B SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH2 0x4095 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP2 POP PUSH2 0x40A1 DUP3 DUP5 PUSH2 0x3B91 JUMP JUMPDEST ISZERO PUSH2 0x40B5 JUMPI POP SWAP7 POP PUSH2 0x42A SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x4046 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x417070726F78696D6174696F6E20646964206E6F7420636F6E76657267650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x38F1 SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD PUSH2 0x3BD3 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF DUP1 DUP7 AND SWAP1 DUP8 AND SUB PUSH2 0x4192 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x31B7B6B830B932903A37B5B2B7103A379034BA39B2B633 PUSH1 0x49 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST DUP1 DUP7 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x41A6 JUMPI POP DUP1 DUP6 PUSH1 0xFF AND LT JUMPDEST PUSH2 0x41E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1D1BDAD95B881B9BDD08199BDD5B99 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x41F0 DUP5 DUP10 PUSH2 0x3208 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 DUP1 PUSH2 0x4200 DUP12 DUP7 PUSH2 0x4B8B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x4287 JUMPI DUP12 PUSH1 0xFF AND DUP2 SUB PUSH2 0x4220 JUMPI DUP10 SWAP2 POP PUSH2 0x4253 JUMP JUMPDEST DUP11 PUSH1 0xFF AND DUP2 EQ PUSH2 0x424B JUMPI DUP9 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x423C JUMPI PUSH2 0x423C PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP2 POP PUSH2 0x4253 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x4206 JUMP JUMPDEST PUSH2 0x425D DUP3 DUP6 PUSH2 0x4BD7 JUMP JUMPDEST SWAP4 POP PUSH2 0x4269 DUP8 DUP4 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x4273 DUP8 DUP8 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x427D SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP5 POP PUSH1 0x1 ADD PUSH2 0x4206 JUMP JUMPDEST POP PUSH2 0x4292 DUP7 DUP4 PUSH2 0x4B8B JUMP JUMPDEST PUSH1 0x64 PUSH2 0x429E DUP8 DUP8 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x42A8 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x42B2 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP4 POP PUSH1 0x0 DUP3 PUSH2 0x42C2 PUSH1 0x64 DUP9 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x42CC SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x42D6 SWAP1 DUP6 PUSH2 0x4BD7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP7 DUP2 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x40BD JUMPI DUP2 SWAP3 POP DUP9 DUP5 DUP4 PUSH1 0x2 PUSH2 0x42F9 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x4303 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH2 0x430D SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP9 PUSH2 0x4318 DUP5 DUP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x4322 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH2 0x432C SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP2 POP PUSH2 0x4338 DUP3 DUP5 PUSH2 0x3B91 JUMP JUMPDEST ISZERO PUSH2 0x434E JUMPI POP SWAP9 POP PUSH2 0x825 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x42DD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x43AB DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4428 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x3419 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x43C9 SWAP2 SWAP1 PUSH2 0x4D5C JUMP JUMPDEST PUSH2 0x3419 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x42A DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x444F SWAP2 SWAP1 PUSH2 0x4D9D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x448C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4491 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x44A2 DUP8 DUP4 DUP4 DUP8 PUSH2 0x44AD JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x451C JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x4515 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x4515 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST POP DUP2 PUSH2 0x42A JUMP JUMPDEST PUSH2 0x42A DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x4531 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP2 SWAP1 PUSH2 0x4DB9 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x4586 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x4586 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x456B JUMP JUMPDEST POP PUSH2 0x4592 SWAP3 SWAP2 POP PUSH2 0x4596 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x4592 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x4597 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x45BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x45DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x45F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x4612 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4631 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x464F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x465B DUP9 DUP3 DUP10 ADD PUSH2 0x45CD JUMP JUMPDEST SWAP7 SWAP10 SWAP1 SWAP9 POP SWAP6 SWAP7 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP7 PUSH1 0x60 SWAP1 SWAP2 ADD CALLDATALOAD SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x4688 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x46A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x46B9 PUSH1 0x40 DUP6 ADD PUSH2 0x4677 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x46D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4714 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x46EF JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4714 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4733 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x47B4 DUP2 DUP6 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP1 DUP6 ADD MLOAD SWAP2 POP POP PUSH2 0x1C0 PUSH2 0x120 DUP2 DUP2 DUP7 ADD MSTORE PUSH2 0x47D4 PUSH2 0x1E0 DUP7 ADD DUP5 PUSH2 0x46DB JUMP JUMPDEST SWAP3 POP DUP1 DUP7 ADD MLOAD SWAP1 POP PUSH1 0x1F NOT PUSH2 0x140 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x47F5 DUP6 DUP5 PUSH2 0x471F JUMP JUMPDEST SWAP5 POP DUP1 DUP9 ADD MLOAD SWAP3 POP POP PUSH2 0x160 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x4814 DUP6 DUP5 PUSH2 0x471F JUMP JUMPDEST SWAP5 POP DUP1 DUP9 ADD MLOAD SWAP3 POP POP PUSH2 0x180 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x4833 DUP6 DUP5 PUSH2 0x471F JUMP JUMPDEST SWAP5 POP DUP1 DUP9 ADD MLOAD SWAP3 POP POP POP PUSH2 0x1A0 PUSH2 0x484D DUP2 DUP8 ADD DUP4 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST SWAP6 SWAP1 SWAP6 ADD MLOAD SWAP4 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4876 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x489B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x48A7 DUP9 DUP3 DUP10 ADD PUSH2 0x45CD JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP7 PUSH1 0x60 ADD CALLDATALOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x335 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x471F JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x4688 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x48FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH2 0x4913 PUSH1 0x40 DUP9 ADD PUSH2 0x48CC JUMP JUMPDEST SWAP4 POP PUSH2 0x4921 PUSH1 0x60 DUP9 ADD PUSH2 0x48CC JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x4949 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4962 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4980 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x498C DUP8 DUP3 DUP9 ADD PUSH2 0x45CD JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x49A0 DUP2 PUSH2 0x493B JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x49C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH2 0x49D1 PUSH1 0x20 DUP7 ADD PUSH2 0x4677 JUMP JUMPDEST SWAP3 POP PUSH2 0x49DF PUSH1 0x40 DUP7 ADD PUSH2 0x4677 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4A02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x4A12 PUSH1 0x20 DUP5 ADD PUSH2 0x48CC JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4A2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x4A12 PUSH1 0x20 DUP5 ADD PUSH2 0x4677 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4A56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH2 0x4A6D PUSH1 0x40 DUP8 ADD PUSH2 0x4677 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP4 SWAP5 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP5 POP PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4A9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH2 0x4AAE PUSH1 0x20 DUP9 ADD PUSH2 0x4677 JUMP JUMPDEST SWAP5 POP PUSH2 0x4ABC PUSH1 0x40 DUP9 ADD PUSH2 0x4677 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x12 SWAP1 DUP3 ADD MSTORE PUSH18 0x696E646578206F7574206F662072616E6765 PUSH1 0x70 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4B31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xD SWAP1 DUP3 ADD MSTORE PUSH13 0x1F2628173130B630B731B2A7B3 PUSH1 0x99 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x338 JUMPI PUSH2 0x338 PUSH2 0x4B75 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4BBF JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x338 JUMPI PUSH2 0x338 PUSH2 0x4B75 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x338 JUMPI PUSH2 0x338 PUSH2 0x4B75 JUMP JUMPDEST PUSH1 0x80 DUP2 MSTORE PUSH1 0x0 PUSH2 0x4BFD PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0x471F JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x4C0F DUP2 DUP8 PUSH2 0x471F JUMP JUMPDEST PUSH1 0x40 DUP5 ADD SWAP6 SWAP1 SWAP6 MSTORE POP POP PUSH1 0x60 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x4C36 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x471F JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xD SWAP1 DUP3 ADD MSTORE PUSH13 0x191A5CD8589B1959081C1BDBDB PUSH1 0x9A SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x4CA7 JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x4C8D JUMPI PUSH2 0x4C8D PUSH2 0x4B75 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x4C9A JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x4C71 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4CBE JUMPI POP PUSH1 0x1 PUSH2 0x338 JUMP JUMPDEST DUP2 PUSH2 0x4CCB JUMPI POP PUSH1 0x0 PUSH2 0x338 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x4CE1 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x4CEB JUMPI PUSH2 0x4D07 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x338 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x4CFC JUMPI PUSH2 0x4CFC PUSH2 0x4B75 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x338 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x4D2A JUMPI POP DUP2 DUP2 EXP PUSH2 0x338 JUMP JUMPDEST PUSH2 0x4D34 DUP4 DUP4 PUSH2 0x4C6C JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x4D48 JUMPI PUSH2 0x4D48 PUSH2 0x4B75 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x335 DUP4 DUP4 PUSH2 0x4CAF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4D6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x335 DUP2 PUSH2 0x493B JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4D94 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4D7C JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x4DAF DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x4D79 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x4DD8 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x4D79 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x25 0xCE 0xDC EXTCODECOPY 0x21 0xF 0xE9 0xAC LOG4 MLOAD EXTCODESIZE 0xD EXTCODESIZE DUP11 PUSH1 0xD2 CALLDATASIZE MSTORE8 PUSH22 0xDBCD2D8DC7A1249F05A95FC7CB64736F6C6343000811 STOP CALLER ","sourceMap":"1194:13712:77:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_calculateRemoveLiquidity_32181":{"entryPoint":13461,"id":32181,"parameterSlots":3,"returnSlots":1},"@_calculateSwapInv_32094":{"entryPoint":13702,"id":32094,"parameterSlots":5,"returnSlots":2},"@_calculateSwap_31965":{"entryPoint":14656,"id":31965,"parameterSlots":5,"returnSlots":2},"@_calculateWithdrawOneToken_30915":{"entryPoint":13342,"id":30915,"parameterSlots":4,"returnSlots":2},"@_callOptionalReturn_11153":{"entryPoint":17238,"id":11153,"parameterSlots":2,"returnSlots":0},"@_feePerToken_32372":{"entryPoint":12497,"id":32372,"parameterSlots":2,"returnSlots":1},"@_getAPrecise_27444":{"entryPoint":14583,"id":27444,"parameterSlots":1,"returnSlots":1},"@_getAPrecise_30831":{"entryPoint":null,"id":30831,"parameterSlots":1,"returnSlots":1},"@_revert_11483":{"entryPoint":null,"id":11483,"parameterSlots":2,"returnSlots":0},"@_xp_31527":{"entryPoint":12541,"id":31527,"parameterSlots":2,"returnSlots":1},"@_xp_31545":{"entryPoint":15073,"id":31545,"parameterSlots":1,"returnSlots":1},"@addLiquidity_33413":{"entryPoint":9058,"id":33413,"parameterSlots":3,"returnSlots":1},"@addSwapLiquidity_19920":{"entryPoint":2261,"id":19920,"parameterSlots":5,"returnSlots":1},"@calculateRemoveLiquidity_32117":{"entryPoint":11190,"id":32117,"parameterSlots":2,"returnSlots":1},"@calculateRemoveSwapLiquidityOneToken_19746":{"entryPoint":1041,"id":19746,"parameterSlots":3,"returnSlots":1},"@calculateRemoveSwapLiquidity_19724":{"entryPoint":2482,"id":19724,"parameterSlots":2,"returnSlots":1},"@calculateSwapTokenAmount_19704":{"entryPoint":2059,"id":19704,"parameterSlots":4,"returnSlots":1},"@calculateSwap_19681":{"entryPoint":2456,"id":19681,"parameterSlots":4,"returnSlots":1},"@calculateSwap_31829":{"entryPoint":11093,"id":31829,"parameterSlots":4,"returnSlots":1},"@calculateTokenAmount_32322":{"entryPoint":7429,"id":32322,"parameterSlots":4,"returnSlots":1},"@calculateWithdrawOneTokenDY_31145":{"entryPoint":15370,"id":31145,"parameterSlots":4,"returnSlots":3},"@calculateWithdrawOneToken_30859":{"entryPoint":5328,"id":30859,"parameterSlots":3,"returnSlots":1},"@difference_30644":{"entryPoint":13237,"id":30644,"parameterSlots":2,"returnSlots":1},"@functionCallWithValue_11308":{"entryPoint":null,"id":11308,"parameterSlots":4,"returnSlots":1},"@functionCall_11244":{"entryPoint":17448,"id":11244,"parameterSlots":3,"returnSlots":1},"@getAPrecise_27403":{"entryPoint":7418,"id":27403,"parameterSlots":1,"returnSlots":1},"@getA_27389":{"entryPoint":12263,"id":27389,"parameterSlots":1,"returnSlots":1},"@getAdminBalance_32348":{"entryPoint":3164,"id":32348,"parameterSlots":2,"returnSlots":1},"@getD_31463":{"entryPoint":12808,"id":31463,"parameterSlots":2,"returnSlots":1},"@getSwapAPrecise_19542":{"entryPoint":2036,"id":19542,"parameterSlots":1,"returnSlots":1},"@getSwapA_19526":{"entryPoint":2970,"id":19526,"parameterSlots":1,"returnSlots":1},"@getSwapAdminBalance_19765":{"entryPoint":797,"id":19765,"parameterSlots":2,"returnSlots":1},"@getSwapLPToken_19510":{"entryPoint":null,"id":19510,"parameterSlots":1,"returnSlots":1},"@getSwapStorage_19492":{"entryPoint":1074,"id":19492,"parameterSlots":1,"returnSlots":1},"@getSwapTokenBalance_19640":{"entryPoint":2861,"id":19640,"parameterSlots":2,"returnSlots":1},"@getSwapTokenIndex_19609":{"entryPoint":2509,"id":19609,"parameterSlots":2,"returnSlots":1},"@getSwapToken_19574":{"entryPoint":2597,"id":19574,"parameterSlots":2,"returnSlots":1},"@getSwapVirtualPrice_19656":{"entryPoint":2993,"id":19656,"parameterSlots":1,"returnSlots":1},"@getVirtualPrice_31599":{"entryPoint":12286,"id":31599,"parameterSlots":1,"returnSlots":1},"@getYD_31307":{"entryPoint":16151,"id":31307,"parameterSlots":4,"returnSlots":1},"@getY_31801":{"entryPoint":16702,"id":31801,"parameterSlots":5,"returnSlots":1},"@handleIncomingAsset_27772":{"entryPoint":14246,"id":27772,"parameterSlots":2,"returnSlots":0},"@handleOutgoingAsset_27809":{"entryPoint":13274,"id":27809,"parameterSlots":3,"returnSlots":0},"@isContract_11172":{"entryPoint":null,"id":11172,"parameterSlots":1,"returnSlots":1},"@removeLiquidityImbalance_34094":{"entryPoint":3232,"id":34094,"parameterSlots":3,"returnSlots":1},"@removeLiquidityOneToken_33716":{"entryPoint":11405,"id":33716,"parameterSlots":4,"returnSlots":1},"@removeLiquidity_33565":{"entryPoint":5473,"id":33565,"parameterSlots":4,"returnSlots":1},"@removeSwapLiquidityImbalance_20019":{"entryPoint":830,"id":20019,"parameterSlots":5,"returnSlots":1},"@removeSwapLiquidityOneToken_19987":{"entryPoint":2714,"id":19987,"parameterSlots":5,"returnSlots":1},"@removeSwapLiquidity_19953":{"entryPoint":1705,"id":19953,"parameterSlots":5,"returnSlots":1},"@safeTransferFrom_10931":{"entryPoint":16646,"id":10931,"parameterSlots":4,"returnSlots":0},"@safeTransfer_10905":{"entryPoint":15271,"id":10905,"parameterSlots":3,"returnSlots":0},"@swapExactOut_19888":{"entryPoint":1852,"id":19888,"parameterSlots":6,"returnSlots":1},"@swapExact_19845":{"entryPoint":2094,"id":19845,"parameterSlots":6,"returnSlots":1},"@swapOut_32734":{"entryPoint":6398,"id":32734,"parameterSlots":5,"returnSlots":1},"@swap_19802":{"entryPoint":3016,"id":19802,"parameterSlots":6,"returnSlots":1},"@swap_32548":{"entryPoint":8149,"id":32548,"parameterSlots":5,"returnSlots":1},"@verifyCallResultFromTarget_11439":{"entryPoint":17581,"id":11439,"parameterSlots":4,"returnSlots":1},"@within1_30620":{"entryPoint":15249,"id":30620,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":18636,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_uint256_dyn_calldata":{"entryPoint":17869,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":19804,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":18114,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_address":{"entryPoint":18927,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes32t_array$_t_uint256_$dyn_calldata_ptrt_bool":{"entryPoint":18764,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_bytes32t_array$_t_uint256_$dyn_calldata_ptrt_uint256t_uint256":{"entryPoint":17945,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bytes32t_uint256":{"entryPoint":17835,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes32t_uint256t_addresst_addresst_uint256t_uint256":{"entryPoint":18659,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_bytes32t_uint256t_array$_t_uint256_$dyn_calldata_ptrt_uint256":{"entryPoint":18526,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bytes32t_uint256t_uint8":{"entryPoint":18061,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_bytes32t_uint256t_uint8t_uint256t_uint256":{"entryPoint":19006,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bytes32t_uint8":{"entryPoint":18971,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes32t_uint8t_uint8t_uint256":{"entryPoint":18859,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_bytes32t_uint8t_uint8t_uint256t_uint256t_uint256":{"entryPoint":19077,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":19231,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint8":{"entryPoint":18039,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_array_contract_IERC20_dyn":{"entryPoint":18139,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_memory_ptr":{"entryPoint":18207,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_contract_LPToken":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":19869,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":18617,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_uint256_t_uint256__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":19434,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_uint256__to_t_array$_t_uint256_$dyn_memory_ptr_t_uint256__fromStack_reversed":{"entryPoint":19491,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_contract$_IERC20_$10812__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":19897,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_080aeafdd82a5e4bff11e63d1393c2f6239b0d47ad30f78715e3cb5585e8484e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1b3f2c393a520e73eb7bdb3fda675794175327c242b37d24eefae133e4d40778__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2f637b5966c86516cd0e8631a2a2dbb5ced6ddd78c0dceb24f758a9d4073aab8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3569a113599fc30dddee53f7bfa525ade1d72800ee559c1f223157ef9a1e0da6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3dce4b63d19b87f59f00e1c83d4e9014c5f915f724b6e06015f43e433d5a13b8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_407c82c74f364e90cf3f20876b92912fd15eeb935ea71a01446be03014fed388__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4406c1e208c572ab95085aa92d385cddaa474035df8163bb5a0a2c403800484d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4798a1cccb10622ad3eddce5aec990d3b316e4246900ba5afea19b6d9d371948__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_487af3faa279cd1df07c0d1897feb1b8a94d7a439a5fcca3a8f816912eee96c2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_49b5230bcef6bb857dbf12a192f051cfc648d5c34767bdb2c1c4044373c29ca8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4ad81e79192646de58c05c664c8c46273241020a112976d2773155fc181b7641__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_6ddd7f5b4f156ad60913b3898ca8aedad82b4753c6391199bcbb48583e596887__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_6e40b987a1bdbab1b9eb0952052a8ed8be99e503ecda84e0b9bc15992dc05932__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":19187,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9696d201946a7b6efbea55f1e57c9bbecf77447f35c86ca3cfdc292daa9e8b3d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9b887cfddc434e3cf41b666954131afc611b880c7637aac66ca1f629f8984c5b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a5d69ce6c1af4155857291c80267a8fe45eaf0a8a37d5e7aef002f4e00be6446__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a7a312f14c5778159227ed2c11234cdc582e54216594239df89b5aac8a9fbfd9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ad3743fd30ada6469788b58d66f88c735cea919feecd588df3ad8b7d9a2a3507__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b19f02778fe2ebdf3ae6da8b526e4f3fcfda929b6d006b58be5eb0b43957bde5__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bb9053a0213fd7b0c31f2850e8d9176b933be82fddca9a3800fc76e83e2e796c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cfeed71d91768718346c2ea3c2ab2e22b6f1283f91f1be8620ac590423d0fe0f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":19525,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d9b2e328f4209b3735eca19488e3afd57ba32c456d5e1a010a233e595f7b0b47__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_eb80683d13e69e40aa7f57ce3558136d2c8c4c88f682021213f7030fc3d23afd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f6ffe39fc3cc1849a13d51ded78dcf3b5c94216cc465a3b1b92bc78f59ae6cef__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":19256,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f9716ead0cbfa1f0d7e4fb0f8f862f9707576ae17b9c27448547344167a1c211__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_Swap_$30786_memory_ptr__to_t_struct$_Swap_$30786_memory_ptr__fromStack_reversed":{"entryPoint":18255,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint8_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint8_t_uint8__to_t_uint256_t_uint256_t_uint128_t_uint128__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":19415,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":19362,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":19564,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":19792,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":19631,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":19339,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":19396,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":19833,"id":null,"parameterSlots":3,"returnSlots":0},"panic_error_0x11":{"entryPoint":19317,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":19165,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":19295,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_bool":{"entryPoint":18747,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:28018:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"101:161:181","statements":[{"body":{"nodeType":"YulBlock","src":"147:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"156:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"149:6:181"},"nodeType":"YulFunctionCall","src":"149:12:181"},"nodeType":"YulExpressionStatement","src":"149:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"122:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"131:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"118:3:181"},"nodeType":"YulFunctionCall","src":"118:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"143:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"114:3:181"},"nodeType":"YulFunctionCall","src":"114:32:181"},"nodeType":"YulIf","src":"111:52:181"},{"nodeType":"YulAssignment","src":"172:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"195:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"182:12:181"},"nodeType":"YulFunctionCall","src":"182:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"172:6:181"}]},{"nodeType":"YulAssignment","src":"214:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"241:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"252:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"237:3:181"},"nodeType":"YulFunctionCall","src":"237:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"224:12:181"},"nodeType":"YulFunctionCall","src":"224:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"214:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"59:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"70:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"82:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"90:6:181","type":""}],"src":"14:248:181"},{"body":{"nodeType":"YulBlock","src":"368:76:181","statements":[{"nodeType":"YulAssignment","src":"378:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"390:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"401:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"386:3:181"},"nodeType":"YulFunctionCall","src":"386:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"378:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"420:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"431:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"413:6:181"},"nodeType":"YulFunctionCall","src":"413:25:181"},"nodeType":"YulExpressionStatement","src":"413:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"337:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"348:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"359:4:181","type":""}],"src":"267:177:181"},{"body":{"nodeType":"YulBlock","src":"533:283:181","statements":[{"body":{"nodeType":"YulBlock","src":"582:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"591:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"594:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"584:6:181"},"nodeType":"YulFunctionCall","src":"584:12:181"},"nodeType":"YulExpressionStatement","src":"584:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"561:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"569:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"557:3:181"},"nodeType":"YulFunctionCall","src":"557:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"576:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"553:3:181"},"nodeType":"YulFunctionCall","src":"553:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"546:6:181"},"nodeType":"YulFunctionCall","src":"546:35:181"},"nodeType":"YulIf","src":"543:55:181"},{"nodeType":"YulAssignment","src":"607:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"630:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"617:12:181"},"nodeType":"YulFunctionCall","src":"617:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"607:6:181"}]},{"body":{"nodeType":"YulBlock","src":"680:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"689:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"692:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"682:6:181"},"nodeType":"YulFunctionCall","src":"682:12:181"},"nodeType":"YulExpressionStatement","src":"682:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"652:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"660:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"649:2:181"},"nodeType":"YulFunctionCall","src":"649:30:181"},"nodeType":"YulIf","src":"646:50:181"},{"nodeType":"YulAssignment","src":"705:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"721:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"729:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"717:3:181"},"nodeType":"YulFunctionCall","src":"717:17:181"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"705:8:181"}]},{"body":{"nodeType":"YulBlock","src":"794:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"803:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"806:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"796:6:181"},"nodeType":"YulFunctionCall","src":"796:12:181"},"nodeType":"YulExpressionStatement","src":"796:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"757:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"769:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"772:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"765:3:181"},"nodeType":"YulFunctionCall","src":"765:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"753:3:181"},"nodeType":"YulFunctionCall","src":"753:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"782:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"749:3:181"},"nodeType":"YulFunctionCall","src":"749:38:181"},{"name":"end","nodeType":"YulIdentifier","src":"789:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"746:2:181"},"nodeType":"YulFunctionCall","src":"746:47:181"},"nodeType":"YulIf","src":"743:67:181"}]},"name":"abi_decode_array_uint256_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"496:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"504:3:181","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"512:8:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"522:6:181","type":""}],"src":"449:367:181"},{"body":{"nodeType":"YulBlock","src":"977:486:181","statements":[{"body":{"nodeType":"YulBlock","src":"1024:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1033:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1036:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1026:6:181"},"nodeType":"YulFunctionCall","src":"1026:12:181"},"nodeType":"YulExpressionStatement","src":"1026:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"998:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1007:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"994:3:181"},"nodeType":"YulFunctionCall","src":"994:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1019:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"990:3:181"},"nodeType":"YulFunctionCall","src":"990:33:181"},"nodeType":"YulIf","src":"987:53:181"},{"nodeType":"YulAssignment","src":"1049:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1072:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1059:12:181"},"nodeType":"YulFunctionCall","src":"1059:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1049:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1091:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1122:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1133:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1118:3:181"},"nodeType":"YulFunctionCall","src":"1118:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1105:12:181"},"nodeType":"YulFunctionCall","src":"1105:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1095:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1180:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1189:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1192:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1182:6:181"},"nodeType":"YulFunctionCall","src":"1182:12:181"},"nodeType":"YulExpressionStatement","src":"1182:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1152:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1160:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1149:2:181"},"nodeType":"YulFunctionCall","src":"1149:30:181"},"nodeType":"YulIf","src":"1146:50:181"},{"nodeType":"YulVariableDeclaration","src":"1205:96:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1273:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1284:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1269:3:181"},"nodeType":"YulFunctionCall","src":"1269:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1293:7:181"}],"functionName":{"name":"abi_decode_array_uint256_dyn_calldata","nodeType":"YulIdentifier","src":"1231:37:181"},"nodeType":"YulFunctionCall","src":"1231:70:181"},"variables":[{"name":"value1_1","nodeType":"YulTypedName","src":"1209:8:181","type":""},{"name":"value2_1","nodeType":"YulTypedName","src":"1219:8:181","type":""}]},{"nodeType":"YulAssignment","src":"1310:18:181","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"1320:8:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1310:6:181"}]},{"nodeType":"YulAssignment","src":"1337:18:181","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"1347:8:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1337:6:181"}]},{"nodeType":"YulAssignment","src":"1364:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1391:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1402:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1387:3:181"},"nodeType":"YulFunctionCall","src":"1387:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1374:12:181"},"nodeType":"YulFunctionCall","src":"1374:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1364:6:181"}]},{"nodeType":"YulAssignment","src":"1415:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1442:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1453:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1438:3:181"},"nodeType":"YulFunctionCall","src":"1438:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1425:12:181"},"nodeType":"YulFunctionCall","src":"1425:32:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"1415:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_array$_t_uint256_$dyn_calldata_ptrt_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"911:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"922:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"934:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"942:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"950:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"958:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"966:6:181","type":""}],"src":"821:642:181"},{"body":{"nodeType":"YulBlock","src":"1515:109:181","statements":[{"nodeType":"YulAssignment","src":"1525:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1547:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1534:12:181"},"nodeType":"YulFunctionCall","src":"1534:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1525:5:181"}]},{"body":{"nodeType":"YulBlock","src":"1602:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1611:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1614:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1604:6:181"},"nodeType":"YulFunctionCall","src":"1604:12:181"},"nodeType":"YulExpressionStatement","src":"1604:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1576:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1587:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"1594:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1583:3:181"},"nodeType":"YulFunctionCall","src":"1583:16:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1573:2:181"},"nodeType":"YulFunctionCall","src":"1573:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1566:6:181"},"nodeType":"YulFunctionCall","src":"1566:35:181"},"nodeType":"YulIf","src":"1563:55:181"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1494:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1505:5:181","type":""}],"src":"1468:156:181"},{"body":{"nodeType":"YulBlock","src":"1731:216:181","statements":[{"body":{"nodeType":"YulBlock","src":"1777:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1786:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1789:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1779:6:181"},"nodeType":"YulFunctionCall","src":"1779:12:181"},"nodeType":"YulExpressionStatement","src":"1779:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1752:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1761:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1748:3:181"},"nodeType":"YulFunctionCall","src":"1748:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1773:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1744:3:181"},"nodeType":"YulFunctionCall","src":"1744:32:181"},"nodeType":"YulIf","src":"1741:52:181"},{"nodeType":"YulAssignment","src":"1802:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1825:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1812:12:181"},"nodeType":"YulFunctionCall","src":"1812:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1802:6:181"}]},{"nodeType":"YulAssignment","src":"1844:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1871:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1882:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1867:3:181"},"nodeType":"YulFunctionCall","src":"1867:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1854:12:181"},"nodeType":"YulFunctionCall","src":"1854:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1844:6:181"}]},{"nodeType":"YulAssignment","src":"1895:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1926:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1937:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1922:3:181"},"nodeType":"YulFunctionCall","src":"1922:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"1905:16:181"},"nodeType":"YulFunctionCall","src":"1905:36:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1895:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint256t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1681:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1692:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1704:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1712:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1720:6:181","type":""}],"src":"1629:318:181"},{"body":{"nodeType":"YulBlock","src":"2022:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"2068:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2077:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2080:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2070:6:181"},"nodeType":"YulFunctionCall","src":"2070:12:181"},"nodeType":"YulExpressionStatement","src":"2070:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2043:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2052:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2039:3:181"},"nodeType":"YulFunctionCall","src":"2039:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2064:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2035:3:181"},"nodeType":"YulFunctionCall","src":"2035:32:181"},"nodeType":"YulIf","src":"2032:52:181"},{"nodeType":"YulAssignment","src":"2093:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2116:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2103:12:181"},"nodeType":"YulFunctionCall","src":"2103:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2093:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1988:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1999:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2011:6:181","type":""}],"src":"1952:180:181"},{"body":{"nodeType":"YulBlock","src":"2190:60:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2207:3:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2216:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2231:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2236:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2227:3:181"},"nodeType":"YulFunctionCall","src":"2227:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2240:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2223:3:181"},"nodeType":"YulFunctionCall","src":"2223:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2212:3:181"},"nodeType":"YulFunctionCall","src":"2212:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2200:6:181"},"nodeType":"YulFunctionCall","src":"2200:44:181"},"nodeType":"YulExpressionStatement","src":"2200:44:181"}]},"name":"abi_encode_contract_LPToken","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"2174:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"2181:3:181","type":""}],"src":"2137:113:181"},{"body":{"nodeType":"YulBlock","src":"2324:400:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2334:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2354:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2348:5:181"},"nodeType":"YulFunctionCall","src":"2348:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2338:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2376:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"2381:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2369:6:181"},"nodeType":"YulFunctionCall","src":"2369:19:181"},"nodeType":"YulExpressionStatement","src":"2369:19:181"},{"nodeType":"YulVariableDeclaration","src":"2397:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2407:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2401:2:181","type":""}]},{"nodeType":"YulAssignment","src":"2420:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2431:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2436:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2427:3:181"},"nodeType":"YulFunctionCall","src":"2427:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"2420:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"2448:28:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2466:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2473:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2462:3:181"},"nodeType":"YulFunctionCall","src":"2462:14:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"2452:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2485:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2494:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2489:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2553:146:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2574:3:181"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2589:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2583:5:181"},"nodeType":"YulFunctionCall","src":"2583:13:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2606:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2611:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2602:3:181"},"nodeType":"YulFunctionCall","src":"2602:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2615:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2598:3:181"},"nodeType":"YulFunctionCall","src":"2598:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2579:3:181"},"nodeType":"YulFunctionCall","src":"2579:39:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2567:6:181"},"nodeType":"YulFunctionCall","src":"2567:52:181"},"nodeType":"YulExpressionStatement","src":"2567:52:181"},{"nodeType":"YulAssignment","src":"2632:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2643:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2648:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2639:3:181"},"nodeType":"YulFunctionCall","src":"2639:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"2632:3:181"}]},{"nodeType":"YulAssignment","src":"2664:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2678:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2686:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2674:3:181"},"nodeType":"YulFunctionCall","src":"2674:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2664:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2515:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"2518:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2512:2:181"},"nodeType":"YulFunctionCall","src":"2512:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2526:18:181","statements":[{"nodeType":"YulAssignment","src":"2528:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2537:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"2540:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2533:3:181"},"nodeType":"YulFunctionCall","src":"2533:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2528:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"2508:3:181","statements":[]},"src":"2504:195:181"},{"nodeType":"YulAssignment","src":"2708:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"2715:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"2708:3:181"}]}]},"name":"abi_encode_array_contract_IERC20_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"2301:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"2308:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"2316:3:181","type":""}],"src":"2255:469:181"},{"body":{"nodeType":"YulBlock","src":"2801:374:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2811:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2831:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2825:5:181"},"nodeType":"YulFunctionCall","src":"2825:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2815:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2853:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"2858:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2846:6:181"},"nodeType":"YulFunctionCall","src":"2846:19:181"},"nodeType":"YulExpressionStatement","src":"2846:19:181"},{"nodeType":"YulVariableDeclaration","src":"2874:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2884:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2878:2:181","type":""}]},{"nodeType":"YulAssignment","src":"2897:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2908:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2913:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2904:3:181"},"nodeType":"YulFunctionCall","src":"2904:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"2897:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"2925:28:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2943:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2950:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2939:3:181"},"nodeType":"YulFunctionCall","src":"2939:14:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"2929:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2962:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2971:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2966:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3030:120:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3051:3:181"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"3062:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3056:5:181"},"nodeType":"YulFunctionCall","src":"3056:13:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3044:6:181"},"nodeType":"YulFunctionCall","src":"3044:26:181"},"nodeType":"YulExpressionStatement","src":"3044:26:181"},{"nodeType":"YulAssignment","src":"3083:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3094:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3099:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3090:3:181"},"nodeType":"YulFunctionCall","src":"3090:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"3083:3:181"}]},{"nodeType":"YulAssignment","src":"3115:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"3129:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3137:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3125:3:181"},"nodeType":"YulFunctionCall","src":"3125:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"3115:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2992:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"2995:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2989:2:181"},"nodeType":"YulFunctionCall","src":"2989:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3003:18:181","statements":[{"nodeType":"YulAssignment","src":"3005:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3014:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"3017:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3010:3:181"},"nodeType":"YulFunctionCall","src":"3010:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"3005:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"2985:3:181","statements":[]},"src":"2981:169:181"},{"nodeType":"YulAssignment","src":"3159:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"3166:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"3159:3:181"}]}]},"name":"abi_encode_array_uint256_dyn_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"2778:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"2785:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"2793:3:181","type":""}],"src":"2729:446:181"},{"body":{"nodeType":"YulBlock","src":"3221:50:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3238:3:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3257:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3250:6:181"},"nodeType":"YulFunctionCall","src":"3250:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3243:6:181"},"nodeType":"YulFunctionCall","src":"3243:21:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3231:6:181"},"nodeType":"YulFunctionCall","src":"3231:34:181"},"nodeType":"YulExpressionStatement","src":"3231:34:181"}]},"name":"abi_encode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3205:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"3212:3:181","type":""}],"src":"3180:91:181"},{"body":{"nodeType":"YulBlock","src":"3423:1757:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3440:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3451:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3433:6:181"},"nodeType":"YulFunctionCall","src":"3433:21:181"},"nodeType":"YulExpressionStatement","src":"3433:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3474:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3485:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3470:3:181"},"nodeType":"YulFunctionCall","src":"3470:18:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3496:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3490:5:181"},"nodeType":"YulFunctionCall","src":"3490:13:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3463:6:181"},"nodeType":"YulFunctionCall","src":"3463:41:181"},"nodeType":"YulExpressionStatement","src":"3463:41:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3524:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3535:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3520:3:181"},"nodeType":"YulFunctionCall","src":"3520:18:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3550:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3558:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3546:3:181"},"nodeType":"YulFunctionCall","src":"3546:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3540:5:181"},"nodeType":"YulFunctionCall","src":"3540:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3513:6:181"},"nodeType":"YulFunctionCall","src":"3513:50:181"},"nodeType":"YulExpressionStatement","src":"3513:50:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3583:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3594:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3579:3:181"},"nodeType":"YulFunctionCall","src":"3579:18:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3609:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3617:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3605:3:181"},"nodeType":"YulFunctionCall","src":"3605:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3599:5:181"},"nodeType":"YulFunctionCall","src":"3599:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3572:6:181"},"nodeType":"YulFunctionCall","src":"3572:50:181"},"nodeType":"YulExpressionStatement","src":"3572:50:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3642:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3653:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3638:3:181"},"nodeType":"YulFunctionCall","src":"3638:19:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3669:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3677:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3665:3:181"},"nodeType":"YulFunctionCall","src":"3665:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3659:5:181"},"nodeType":"YulFunctionCall","src":"3659:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3631:6:181"},"nodeType":"YulFunctionCall","src":"3631:51:181"},"nodeType":"YulExpressionStatement","src":"3631:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3702:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3713:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3698:3:181"},"nodeType":"YulFunctionCall","src":"3698:19:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3729:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3737:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3725:3:181"},"nodeType":"YulFunctionCall","src":"3725:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3719:5:181"},"nodeType":"YulFunctionCall","src":"3719:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3691:6:181"},"nodeType":"YulFunctionCall","src":"3691:52:181"},"nodeType":"YulExpressionStatement","src":"3691:52:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3763:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3774:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3759:3:181"},"nodeType":"YulFunctionCall","src":"3759:19:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3790:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3798:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3786:3:181"},"nodeType":"YulFunctionCall","src":"3786:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3780:5:181"},"nodeType":"YulFunctionCall","src":"3780:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3752:6:181"},"nodeType":"YulFunctionCall","src":"3752:52:181"},"nodeType":"YulExpressionStatement","src":"3752:52:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3824:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3835:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3820:3:181"},"nodeType":"YulFunctionCall","src":"3820:19:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3851:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3859:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3847:3:181"},"nodeType":"YulFunctionCall","src":"3847:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3841:5:181"},"nodeType":"YulFunctionCall","src":"3841:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3813:6:181"},"nodeType":"YulFunctionCall","src":"3813:52:181"},"nodeType":"YulExpressionStatement","src":"3813:52:181"},{"nodeType":"YulVariableDeclaration","src":"3874:43:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3904:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3912:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3900:3:181"},"nodeType":"YulFunctionCall","src":"3900:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3894:5:181"},"nodeType":"YulFunctionCall","src":"3894:23:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"3878:12:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3926:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3936:3:181","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3930:2:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"3976:12:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3994:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4005:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3990:3:181"},"nodeType":"YulFunctionCall","src":"3990:18:181"}],"functionName":{"name":"abi_encode_contract_LPToken","nodeType":"YulIdentifier","src":"3948:27:181"},"nodeType":"YulFunctionCall","src":"3948:61:181"},"nodeType":"YulExpressionStatement","src":"3948:61:181"},{"nodeType":"YulVariableDeclaration","src":"4018:44:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4050:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4058:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4046:3:181"},"nodeType":"YulFunctionCall","src":"4046:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4040:5:181"},"nodeType":"YulFunctionCall","src":"4040:22:181"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"4022:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4071:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4081:6:181","type":"","value":"0x01c0"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"4075:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4096:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4106:3:181","type":"","value":"288"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"4100:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4129:9:181"},{"name":"_3","nodeType":"YulIdentifier","src":"4140:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4125:3:181"},"nodeType":"YulFunctionCall","src":"4125:18:181"},{"name":"_2","nodeType":"YulIdentifier","src":"4145:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4118:6:181"},"nodeType":"YulFunctionCall","src":"4118:30:181"},"nodeType":"YulExpressionStatement","src":"4118:30:181"},{"nodeType":"YulVariableDeclaration","src":"4157:87:181","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"4208:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4228:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4239:3:181","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4224:3:181"},"nodeType":"YulFunctionCall","src":"4224:19:181"}],"functionName":{"name":"abi_encode_array_contract_IERC20_dyn","nodeType":"YulIdentifier","src":"4171:36:181"},"nodeType":"YulFunctionCall","src":"4171:73:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"4161:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4253:44:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4285:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"4293:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4281:3:181"},"nodeType":"YulFunctionCall","src":"4281:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4275:5:181"},"nodeType":"YulFunctionCall","src":"4275:22:181"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"4257:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4306:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4320:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4316:3:181"},"nodeType":"YulFunctionCall","src":"4316:7:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"4310:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4332:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4342:3:181","type":"","value":"320"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"4336:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4365:9:181"},{"name":"_5","nodeType":"YulIdentifier","src":"4376:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4361:3:181"},"nodeType":"YulFunctionCall","src":"4361:18:181"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"4389:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"4397:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4385:3:181"},"nodeType":"YulFunctionCall","src":"4385:22:181"},{"name":"_4","nodeType":"YulIdentifier","src":"4409:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4381:3:181"},"nodeType":"YulFunctionCall","src":"4381:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4354:6:181"},"nodeType":"YulFunctionCall","src":"4354:59:181"},"nodeType":"YulExpressionStatement","src":"4354:59:181"},{"nodeType":"YulVariableDeclaration","src":"4422:77:181","value":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"4476:14:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"4492:6:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn_memory_ptr","nodeType":"YulIdentifier","src":"4436:39:181"},"nodeType":"YulFunctionCall","src":"4436:63:181"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"4426:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4508:44:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4540:6:181"},{"name":"_5","nodeType":"YulIdentifier","src":"4548:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4536:3:181"},"nodeType":"YulFunctionCall","src":"4536:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4530:5:181"},"nodeType":"YulFunctionCall","src":"4530:22:181"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"4512:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4561:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4571:3:181","type":"","value":"352"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"4565:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4594:9:181"},{"name":"_6","nodeType":"YulIdentifier","src":"4605:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4590:3:181"},"nodeType":"YulFunctionCall","src":"4590:18:181"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"4618:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"4626:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4614:3:181"},"nodeType":"YulFunctionCall","src":"4614:22:181"},{"name":"_4","nodeType":"YulIdentifier","src":"4638:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4610:3:181"},"nodeType":"YulFunctionCall","src":"4610:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4583:6:181"},"nodeType":"YulFunctionCall","src":"4583:59:181"},"nodeType":"YulExpressionStatement","src":"4583:59:181"},{"nodeType":"YulVariableDeclaration","src":"4651:77:181","value":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"4705:14:181"},{"name":"tail_2","nodeType":"YulIdentifier","src":"4721:6:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn_memory_ptr","nodeType":"YulIdentifier","src":"4665:39:181"},"nodeType":"YulFunctionCall","src":"4665:63:181"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"4655:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4737:44:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4769:6:181"},{"name":"_6","nodeType":"YulIdentifier","src":"4777:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4765:3:181"},"nodeType":"YulFunctionCall","src":"4765:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4759:5:181"},"nodeType":"YulFunctionCall","src":"4759:22:181"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"4741:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4790:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4800:3:181","type":"","value":"384"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"4794:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4823:9:181"},{"name":"_7","nodeType":"YulIdentifier","src":"4834:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4819:3:181"},"nodeType":"YulFunctionCall","src":"4819:18:181"},{"arguments":[{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"4847:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"4855:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4843:3:181"},"nodeType":"YulFunctionCall","src":"4843:22:181"},{"name":"_4","nodeType":"YulIdentifier","src":"4867:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4839:3:181"},"nodeType":"YulFunctionCall","src":"4839:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4812:6:181"},"nodeType":"YulFunctionCall","src":"4812:59:181"},"nodeType":"YulExpressionStatement","src":"4812:59:181"},{"nodeType":"YulVariableDeclaration","src":"4880:77:181","value":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"4934:14:181"},{"name":"tail_3","nodeType":"YulIdentifier","src":"4950:6:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn_memory_ptr","nodeType":"YulIdentifier","src":"4894:39:181"},"nodeType":"YulFunctionCall","src":"4894:63:181"},"variables":[{"name":"tail_4","nodeType":"YulTypedName","src":"4884:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4966:44:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4998:6:181"},{"name":"_7","nodeType":"YulIdentifier","src":"5006:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4994:3:181"},"nodeType":"YulFunctionCall","src":"4994:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4988:5:181"},"nodeType":"YulFunctionCall","src":"4988:22:181"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"4970:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5019:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"5029:3:181","type":"","value":"416"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"5023:2:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"5057:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5077:9:181"},{"name":"_8","nodeType":"YulIdentifier","src":"5088:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5073:3:181"},"nodeType":"YulFunctionCall","src":"5073:18:181"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"5041:15:181"},"nodeType":"YulFunctionCall","src":"5041:51:181"},"nodeType":"YulExpressionStatement","src":"5041:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5112:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"5123:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5108:3:181"},"nodeType":"YulFunctionCall","src":"5108:18:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5138:6:181"},{"name":"_8","nodeType":"YulIdentifier","src":"5146:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5134:3:181"},"nodeType":"YulFunctionCall","src":"5134:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5128:5:181"},"nodeType":"YulFunctionCall","src":"5128:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5101:6:181"},"nodeType":"YulFunctionCall","src":"5101:50:181"},"nodeType":"YulExpressionStatement","src":"5101:50:181"},{"nodeType":"YulAssignment","src":"5160:14:181","value":{"name":"tail_4","nodeType":"YulIdentifier","src":"5168:6:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5160:4:181"}]}]},"name":"abi_encode_tuple_t_struct$_Swap_$30786_memory_ptr__to_t_struct$_Swap_$30786_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3392:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3403:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3414:4:181","type":""}],"src":"3276:1904:181"},{"body":{"nodeType":"YulBlock","src":"5341:486:181","statements":[{"body":{"nodeType":"YulBlock","src":"5388:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5397:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5400:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5390:6:181"},"nodeType":"YulFunctionCall","src":"5390:12:181"},"nodeType":"YulExpressionStatement","src":"5390:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5362:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5371:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5358:3:181"},"nodeType":"YulFunctionCall","src":"5358:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5383:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5354:3:181"},"nodeType":"YulFunctionCall","src":"5354:33:181"},"nodeType":"YulIf","src":"5351:53:181"},{"nodeType":"YulAssignment","src":"5413:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5436:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5423:12:181"},"nodeType":"YulFunctionCall","src":"5423:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5413:6:181"}]},{"nodeType":"YulAssignment","src":"5455:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5482:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5493:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5478:3:181"},"nodeType":"YulFunctionCall","src":"5478:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5465:12:181"},"nodeType":"YulFunctionCall","src":"5465:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5455:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"5506:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5537:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5548:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5533:3:181"},"nodeType":"YulFunctionCall","src":"5533:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5520:12:181"},"nodeType":"YulFunctionCall","src":"5520:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"5510:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5595:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5604:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5607:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5597:6:181"},"nodeType":"YulFunctionCall","src":"5597:12:181"},"nodeType":"YulExpressionStatement","src":"5597:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5567:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5575:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5564:2:181"},"nodeType":"YulFunctionCall","src":"5564:30:181"},"nodeType":"YulIf","src":"5561:50:181"},{"nodeType":"YulVariableDeclaration","src":"5620:96:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5688:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"5699:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5684:3:181"},"nodeType":"YulFunctionCall","src":"5684:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5708:7:181"}],"functionName":{"name":"abi_decode_array_uint256_dyn_calldata","nodeType":"YulIdentifier","src":"5646:37:181"},"nodeType":"YulFunctionCall","src":"5646:70:181"},"variables":[{"name":"value2_1","nodeType":"YulTypedName","src":"5624:8:181","type":""},{"name":"value3_1","nodeType":"YulTypedName","src":"5634:8:181","type":""}]},{"nodeType":"YulAssignment","src":"5725:18:181","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"5735:8:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5725:6:181"}]},{"nodeType":"YulAssignment","src":"5752:18:181","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"5762:8:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5752:6:181"}]},{"nodeType":"YulAssignment","src":"5779:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5806:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5817:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5802:3:181"},"nodeType":"YulFunctionCall","src":"5802:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5789:12:181"},"nodeType":"YulFunctionCall","src":"5789:32:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"5779:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint256t_array$_t_uint256_$dyn_calldata_ptrt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5275:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5286:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5298:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5306:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5314:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5322:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"5330:6:181","type":""}],"src":"5185:642:181"},{"body":{"nodeType":"YulBlock","src":"5893:374:181","statements":[{"nodeType":"YulVariableDeclaration","src":"5903:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5923:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5917:5:181"},"nodeType":"YulFunctionCall","src":"5917:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"5907:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5945:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"5950:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5938:6:181"},"nodeType":"YulFunctionCall","src":"5938:19:181"},"nodeType":"YulExpressionStatement","src":"5938:19:181"},{"nodeType":"YulVariableDeclaration","src":"5966:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"5976:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5970:2:181","type":""}]},{"nodeType":"YulAssignment","src":"5989:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6000:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6005:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5996:3:181"},"nodeType":"YulFunctionCall","src":"5996:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"5989:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"6017:28:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6035:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6042:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6031:3:181"},"nodeType":"YulFunctionCall","src":"6031:14:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"6021:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6054:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6063:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"6058:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6122:120:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6143:3:181"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6154:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6148:5:181"},"nodeType":"YulFunctionCall","src":"6148:13:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6136:6:181"},"nodeType":"YulFunctionCall","src":"6136:26:181"},"nodeType":"YulExpressionStatement","src":"6136:26:181"},{"nodeType":"YulAssignment","src":"6175:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6186:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6191:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6182:3:181"},"nodeType":"YulFunctionCall","src":"6182:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"6175:3:181"}]},{"nodeType":"YulAssignment","src":"6207:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6221:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6229:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6217:3:181"},"nodeType":"YulFunctionCall","src":"6217:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6207:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6084:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"6087:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6081:2:181"},"nodeType":"YulFunctionCall","src":"6081:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6095:18:181","statements":[{"nodeType":"YulAssignment","src":"6097:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6106:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"6109:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6102:3:181"},"nodeType":"YulFunctionCall","src":"6102:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"6097:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"6077:3:181","statements":[]},"src":"6073:169:181"},{"nodeType":"YulAssignment","src":"6251:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"6258:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"6251:3:181"}]}]},"name":"abi_encode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5870:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5877:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"5885:3:181","type":""}],"src":"5832:435:181"},{"body":{"nodeType":"YulBlock","src":"6423:110:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6440:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6451:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6433:6:181"},"nodeType":"YulFunctionCall","src":"6433:21:181"},"nodeType":"YulExpressionStatement","src":"6433:21:181"},{"nodeType":"YulAssignment","src":"6463:64:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6500:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6512:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6523:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6508:3:181"},"nodeType":"YulFunctionCall","src":"6508:18:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"6471:28:181"},"nodeType":"YulFunctionCall","src":"6471:56:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6463:4:181"}]}]},"name":"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6392:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6403:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6414:4:181","type":""}],"src":"6272:261:181"},{"body":{"nodeType":"YulBlock","src":"6587:124:181","statements":[{"nodeType":"YulAssignment","src":"6597:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6619:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6606:12:181"},"nodeType":"YulFunctionCall","src":"6606:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"6597:5:181"}]},{"body":{"nodeType":"YulBlock","src":"6689:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6698:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6701:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6691:6:181"},"nodeType":"YulFunctionCall","src":"6691:12:181"},"nodeType":"YulExpressionStatement","src":"6691:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6648:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6659:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6674:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6679:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6670:3:181"},"nodeType":"YulFunctionCall","src":"6670:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"6683:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6666:3:181"},"nodeType":"YulFunctionCall","src":"6666:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6655:3:181"},"nodeType":"YulFunctionCall","src":"6655:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"6645:2:181"},"nodeType":"YulFunctionCall","src":"6645:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6638:6:181"},"nodeType":"YulFunctionCall","src":"6638:50:181"},"nodeType":"YulIf","src":"6635:70:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"6566:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"6577:5:181","type":""}],"src":"6538:173:181"},{"body":{"nodeType":"YulBlock","src":"6871:380:181","statements":[{"body":{"nodeType":"YulBlock","src":"6918:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6927:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6930:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6920:6:181"},"nodeType":"YulFunctionCall","src":"6920:12:181"},"nodeType":"YulExpressionStatement","src":"6920:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6892:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6901:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6888:3:181"},"nodeType":"YulFunctionCall","src":"6888:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"6913:3:181","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6884:3:181"},"nodeType":"YulFunctionCall","src":"6884:33:181"},"nodeType":"YulIf","src":"6881:53:181"},{"nodeType":"YulAssignment","src":"6943:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6966:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6953:12:181"},"nodeType":"YulFunctionCall","src":"6953:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6943:6:181"}]},{"nodeType":"YulAssignment","src":"6985:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7012:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7023:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7008:3:181"},"nodeType":"YulFunctionCall","src":"7008:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6995:12:181"},"nodeType":"YulFunctionCall","src":"6995:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6985:6:181"}]},{"nodeType":"YulAssignment","src":"7036:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7069:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7080:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7065:3:181"},"nodeType":"YulFunctionCall","src":"7065:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"7046:18:181"},"nodeType":"YulFunctionCall","src":"7046:38:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7036:6:181"}]},{"nodeType":"YulAssignment","src":"7093:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7126:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7137:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7122:3:181"},"nodeType":"YulFunctionCall","src":"7122:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"7103:18:181"},"nodeType":"YulFunctionCall","src":"7103:38:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"7093:6:181"}]},{"nodeType":"YulAssignment","src":"7150:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7177:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7188:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7173:3:181"},"nodeType":"YulFunctionCall","src":"7173:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7160:12:181"},"nodeType":"YulFunctionCall","src":"7160:33:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"7150:6:181"}]},{"nodeType":"YulAssignment","src":"7202:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7229:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7240:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7225:3:181"},"nodeType":"YulFunctionCall","src":"7225:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7212:12:181"},"nodeType":"YulFunctionCall","src":"7212:33:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"7202:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint256t_addresst_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6797:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6808:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6820:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6828:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6836:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6844:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"6852:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"6860:6:181","type":""}],"src":"6716:535:181"},{"body":{"nodeType":"YulBlock","src":"7298:76:181","statements":[{"body":{"nodeType":"YulBlock","src":"7352:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7361:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7364:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7354:6:181"},"nodeType":"YulFunctionCall","src":"7354:12:181"},"nodeType":"YulExpressionStatement","src":"7354:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7321:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7342:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7335:6:181"},"nodeType":"YulFunctionCall","src":"7335:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7328:6:181"},"nodeType":"YulFunctionCall","src":"7328:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"7318:2:181"},"nodeType":"YulFunctionCall","src":"7318:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7311:6:181"},"nodeType":"YulFunctionCall","src":"7311:40:181"},"nodeType":"YulIf","src":"7308:60:181"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"7287:5:181","type":""}],"src":"7256:118:181"},{"body":{"nodeType":"YulBlock","src":"7515:498:181","statements":[{"body":{"nodeType":"YulBlock","src":"7561:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7570:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7573:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7563:6:181"},"nodeType":"YulFunctionCall","src":"7563:12:181"},"nodeType":"YulExpressionStatement","src":"7563:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7536:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7545:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7532:3:181"},"nodeType":"YulFunctionCall","src":"7532:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7557:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7528:3:181"},"nodeType":"YulFunctionCall","src":"7528:32:181"},"nodeType":"YulIf","src":"7525:52:181"},{"nodeType":"YulAssignment","src":"7586:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7609:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7596:12:181"},"nodeType":"YulFunctionCall","src":"7596:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7586:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"7628:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7659:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7670:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7655:3:181"},"nodeType":"YulFunctionCall","src":"7655:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7642:12:181"},"nodeType":"YulFunctionCall","src":"7642:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"7632:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7717:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7726:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7729:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7719:6:181"},"nodeType":"YulFunctionCall","src":"7719:12:181"},"nodeType":"YulExpressionStatement","src":"7719:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7689:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"7697:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7686:2:181"},"nodeType":"YulFunctionCall","src":"7686:30:181"},"nodeType":"YulIf","src":"7683:50:181"},{"nodeType":"YulVariableDeclaration","src":"7742:96:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7810:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"7821:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7806:3:181"},"nodeType":"YulFunctionCall","src":"7806:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"7830:7:181"}],"functionName":{"name":"abi_decode_array_uint256_dyn_calldata","nodeType":"YulIdentifier","src":"7768:37:181"},"nodeType":"YulFunctionCall","src":"7768:70:181"},"variables":[{"name":"value1_1","nodeType":"YulTypedName","src":"7746:8:181","type":""},{"name":"value2_1","nodeType":"YulTypedName","src":"7756:8:181","type":""}]},{"nodeType":"YulAssignment","src":"7847:18:181","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"7857:8:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7847:6:181"}]},{"nodeType":"YulAssignment","src":"7874:18:181","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"7884:8:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7874:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"7901:45:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7931:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7942:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7927:3:181"},"nodeType":"YulFunctionCall","src":"7927:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7914:12:181"},"nodeType":"YulFunctionCall","src":"7914:32:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7905:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7977:5:181"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"7955:21:181"},"nodeType":"YulFunctionCall","src":"7955:28:181"},"nodeType":"YulExpressionStatement","src":"7955:28:181"},{"nodeType":"YulAssignment","src":"7992:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"8002:5:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"7992:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_array$_t_uint256_$dyn_calldata_ptrt_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7457:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7468:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7480:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7488:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7496:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7504:6:181","type":""}],"src":"7379:634:181"},{"body":{"nodeType":"YulBlock","src":"8119:102:181","statements":[{"nodeType":"YulAssignment","src":"8129:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8141:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8152:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8137:3:181"},"nodeType":"YulFunctionCall","src":"8137:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8129:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8171:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8186:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8202:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"8207:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8198:3:181"},"nodeType":"YulFunctionCall","src":"8198:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"8211:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8194:3:181"},"nodeType":"YulFunctionCall","src":"8194:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8182:3:181"},"nodeType":"YulFunctionCall","src":"8182:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8164:6:181"},"nodeType":"YulFunctionCall","src":"8164:51:181"},"nodeType":"YulExpressionStatement","src":"8164:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8088:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8099:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8110:4:181","type":""}],"src":"8018:203:181"},{"body":{"nodeType":"YulBlock","src":"8343:272:181","statements":[{"body":{"nodeType":"YulBlock","src":"8390:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8399:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8402:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8392:6:181"},"nodeType":"YulFunctionCall","src":"8392:12:181"},"nodeType":"YulExpressionStatement","src":"8392:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8364:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8373:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8360:3:181"},"nodeType":"YulFunctionCall","src":"8360:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"8385:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8356:3:181"},"nodeType":"YulFunctionCall","src":"8356:33:181"},"nodeType":"YulIf","src":"8353:53:181"},{"nodeType":"YulAssignment","src":"8415:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8438:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8425:12:181"},"nodeType":"YulFunctionCall","src":"8425:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8415:6:181"}]},{"nodeType":"YulAssignment","src":"8457:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8488:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8499:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8484:3:181"},"nodeType":"YulFunctionCall","src":"8484:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"8467:16:181"},"nodeType":"YulFunctionCall","src":"8467:36:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8457:6:181"}]},{"nodeType":"YulAssignment","src":"8512:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8543:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8554:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8539:3:181"},"nodeType":"YulFunctionCall","src":"8539:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"8522:16:181"},"nodeType":"YulFunctionCall","src":"8522:36:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"8512:6:181"}]},{"nodeType":"YulAssignment","src":"8567:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8594:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8605:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8590:3:181"},"nodeType":"YulFunctionCall","src":"8590:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8577:12:181"},"nodeType":"YulFunctionCall","src":"8577:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"8567:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint8t_uint8t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8285:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8296:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8308:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8316:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8324:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"8332:6:181","type":""}],"src":"8226:389:181"},{"body":{"nodeType":"YulBlock","src":"8707:167:181","statements":[{"body":{"nodeType":"YulBlock","src":"8753:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8762:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8765:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8755:6:181"},"nodeType":"YulFunctionCall","src":"8755:12:181"},"nodeType":"YulExpressionStatement","src":"8755:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8728:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8737:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8724:3:181"},"nodeType":"YulFunctionCall","src":"8724:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"8749:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8720:3:181"},"nodeType":"YulFunctionCall","src":"8720:32:181"},"nodeType":"YulIf","src":"8717:52:181"},{"nodeType":"YulAssignment","src":"8778:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8801:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8788:12:181"},"nodeType":"YulFunctionCall","src":"8788:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8778:6:181"}]},{"nodeType":"YulAssignment","src":"8820:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8853:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8864:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8849:3:181"},"nodeType":"YulFunctionCall","src":"8849:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"8830:18:181"},"nodeType":"YulFunctionCall","src":"8830:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8820:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8665:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8676:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8688:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8696:6:181","type":""}],"src":"8620:254:181"},{"body":{"nodeType":"YulBlock","src":"8976:87:181","statements":[{"nodeType":"YulAssignment","src":"8986:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8998:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9009:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8994:3:181"},"nodeType":"YulFunctionCall","src":"8994:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8986:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9028:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9043:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"9051:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9039:3:181"},"nodeType":"YulFunctionCall","src":"9039:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9021:6:181"},"nodeType":"YulFunctionCall","src":"9021:36:181"},"nodeType":"YulExpressionStatement","src":"9021:36:181"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8945:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8956:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8967:4:181","type":""}],"src":"8879:184:181"},{"body":{"nodeType":"YulBlock","src":"9153:165:181","statements":[{"body":{"nodeType":"YulBlock","src":"9199:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9208:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9211:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9201:6:181"},"nodeType":"YulFunctionCall","src":"9201:12:181"},"nodeType":"YulExpressionStatement","src":"9201:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9174:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"9183:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9170:3:181"},"nodeType":"YulFunctionCall","src":"9170:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"9195:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9166:3:181"},"nodeType":"YulFunctionCall","src":"9166:32:181"},"nodeType":"YulIf","src":"9163:52:181"},{"nodeType":"YulAssignment","src":"9224:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9247:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9234:12:181"},"nodeType":"YulFunctionCall","src":"9234:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9224:6:181"}]},{"nodeType":"YulAssignment","src":"9266:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9297:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9308:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9293:3:181"},"nodeType":"YulFunctionCall","src":"9293:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"9276:16:181"},"nodeType":"YulFunctionCall","src":"9276:36:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9266:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9111:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9122:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9134:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9142:6:181","type":""}],"src":"9068:250:181"},{"body":{"nodeType":"YulBlock","src":"9440:102:181","statements":[{"nodeType":"YulAssignment","src":"9450:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9462:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9473:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9458:3:181"},"nodeType":"YulFunctionCall","src":"9458:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9450:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9492:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9507:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9523:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"9528:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9519:3:181"},"nodeType":"YulFunctionCall","src":"9519:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"9532:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9515:3:181"},"nodeType":"YulFunctionCall","src":"9515:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9503:3:181"},"nodeType":"YulFunctionCall","src":"9503:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9485:6:181"},"nodeType":"YulFunctionCall","src":"9485:51:181"},"nodeType":"YulExpressionStatement","src":"9485:51:181"}]},"name":"abi_encode_tuple_t_contract$_IERC20_$10812__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9409:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9420:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9431:4:181","type":""}],"src":"9323:219:181"},{"body":{"nodeType":"YulBlock","src":"9683:320:181","statements":[{"body":{"nodeType":"YulBlock","src":"9730:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9739:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9742:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9732:6:181"},"nodeType":"YulFunctionCall","src":"9732:12:181"},"nodeType":"YulExpressionStatement","src":"9732:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9704:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"9713:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9700:3:181"},"nodeType":"YulFunctionCall","src":"9700:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"9725:3:181","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9696:3:181"},"nodeType":"YulFunctionCall","src":"9696:33:181"},"nodeType":"YulIf","src":"9693:53:181"},{"nodeType":"YulAssignment","src":"9755:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9778:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9765:12:181"},"nodeType":"YulFunctionCall","src":"9765:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9755:6:181"}]},{"nodeType":"YulAssignment","src":"9797:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9824:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9835:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9820:3:181"},"nodeType":"YulFunctionCall","src":"9820:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9807:12:181"},"nodeType":"YulFunctionCall","src":"9807:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9797:6:181"}]},{"nodeType":"YulAssignment","src":"9848:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9879:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9890:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9875:3:181"},"nodeType":"YulFunctionCall","src":"9875:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"9858:16:181"},"nodeType":"YulFunctionCall","src":"9858:36:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"9848:6:181"}]},{"nodeType":"YulAssignment","src":"9903:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9930:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9941:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9926:3:181"},"nodeType":"YulFunctionCall","src":"9926:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9913:12:181"},"nodeType":"YulFunctionCall","src":"9913:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"9903:6:181"}]},{"nodeType":"YulAssignment","src":"9954:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9981:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9992:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9977:3:181"},"nodeType":"YulFunctionCall","src":"9977:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9964:12:181"},"nodeType":"YulFunctionCall","src":"9964:33:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"9954:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint256t_uint8t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9617:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9628:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9640:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9648:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9656:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9664:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"9672:6:181","type":""}],"src":"9547:456:181"},{"body":{"nodeType":"YulBlock","src":"10159:376:181","statements":[{"body":{"nodeType":"YulBlock","src":"10206:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10215:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10218:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10208:6:181"},"nodeType":"YulFunctionCall","src":"10208:12:181"},"nodeType":"YulExpressionStatement","src":"10208:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10180:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"10189:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10176:3:181"},"nodeType":"YulFunctionCall","src":"10176:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"10201:3:181","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10172:3:181"},"nodeType":"YulFunctionCall","src":"10172:33:181"},"nodeType":"YulIf","src":"10169:53:181"},{"nodeType":"YulAssignment","src":"10231:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10254:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10241:12:181"},"nodeType":"YulFunctionCall","src":"10241:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10231:6:181"}]},{"nodeType":"YulAssignment","src":"10273:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10304:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10315:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10300:3:181"},"nodeType":"YulFunctionCall","src":"10300:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"10283:16:181"},"nodeType":"YulFunctionCall","src":"10283:36:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"10273:6:181"}]},{"nodeType":"YulAssignment","src":"10328:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10359:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10370:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10355:3:181"},"nodeType":"YulFunctionCall","src":"10355:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"10338:16:181"},"nodeType":"YulFunctionCall","src":"10338:36:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"10328:6:181"}]},{"nodeType":"YulAssignment","src":"10383:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10410:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10421:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10406:3:181"},"nodeType":"YulFunctionCall","src":"10406:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10393:12:181"},"nodeType":"YulFunctionCall","src":"10393:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"10383:6:181"}]},{"nodeType":"YulAssignment","src":"10434:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10461:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10472:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10457:3:181"},"nodeType":"YulFunctionCall","src":"10457:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10444:12:181"},"nodeType":"YulFunctionCall","src":"10444:33:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"10434:6:181"}]},{"nodeType":"YulAssignment","src":"10486:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10513:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10524:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10509:3:181"},"nodeType":"YulFunctionCall","src":"10509:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10496:12:181"},"nodeType":"YulFunctionCall","src":"10496:33:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"10486:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint8t_uint8t_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10085:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10096:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10108:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10116:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10124:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10132:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"10140:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"10148:6:181","type":""}],"src":"10008:527:181"},{"body":{"nodeType":"YulBlock","src":"10572:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10589:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10596:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"10601:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10592:3:181"},"nodeType":"YulFunctionCall","src":"10592:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10582:6:181"},"nodeType":"YulFunctionCall","src":"10582:31:181"},"nodeType":"YulExpressionStatement","src":"10582:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10629:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10632:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10622:6:181"},"nodeType":"YulFunctionCall","src":"10622:15:181"},"nodeType":"YulExpressionStatement","src":"10622:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10653:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10656:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10646:6:181"},"nodeType":"YulFunctionCall","src":"10646:15:181"},"nodeType":"YulExpressionStatement","src":"10646:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"10540:127:181"},{"body":{"nodeType":"YulBlock","src":"10846:168:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10863:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10874:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10856:6:181"},"nodeType":"YulFunctionCall","src":"10856:21:181"},"nodeType":"YulExpressionStatement","src":"10856:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10897:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10908:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10893:3:181"},"nodeType":"YulFunctionCall","src":"10893:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10913:2:181","type":"","value":"18"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10886:6:181"},"nodeType":"YulFunctionCall","src":"10886:30:181"},"nodeType":"YulExpressionStatement","src":"10886:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10936:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10947:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10932:3:181"},"nodeType":"YulFunctionCall","src":"10932:18:181"},{"hexValue":"696e646578206f7574206f662072616e6765","kind":"string","nodeType":"YulLiteral","src":"10952:20:181","type":"","value":"index out of range"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10925:6:181"},"nodeType":"YulFunctionCall","src":"10925:48:181"},"nodeType":"YulExpressionStatement","src":"10925:48:181"},{"nodeType":"YulAssignment","src":"10982:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10994:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11005:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10990:3:181"},"nodeType":"YulFunctionCall","src":"10990:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10982:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10823:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10837:4:181","type":""}],"src":"10672:342:181"},{"body":{"nodeType":"YulBlock","src":"11100:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"11146:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11155:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11158:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11148:6:181"},"nodeType":"YulFunctionCall","src":"11148:12:181"},"nodeType":"YulExpressionStatement","src":"11148:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11121:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"11130:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11117:3:181"},"nodeType":"YulFunctionCall","src":"11117:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"11142:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11113:3:181"},"nodeType":"YulFunctionCall","src":"11113:32:181"},"nodeType":"YulIf","src":"11110:52:181"},{"nodeType":"YulAssignment","src":"11171:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11187:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11181:5:181"},"nodeType":"YulFunctionCall","src":"11181:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11171:6:181"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11066:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11077:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11089:6:181","type":""}],"src":"11019:184:181"},{"body":{"nodeType":"YulBlock","src":"11382:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11399:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11410:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11392:6:181"},"nodeType":"YulFunctionCall","src":"11392:21:181"},"nodeType":"YulExpressionStatement","src":"11392:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11433:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11444:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11429:3:181"},"nodeType":"YulFunctionCall","src":"11429:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11449:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11422:6:181"},"nodeType":"YulFunctionCall","src":"11422:30:181"},"nodeType":"YulExpressionStatement","src":"11422:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11472:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11483:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11468:3:181"},"nodeType":"YulFunctionCall","src":"11468:18:181"},{"hexValue":"6d69736d6174636820706f6f6c20746f6b656e73","kind":"string","nodeType":"YulLiteral","src":"11488:22:181","type":"","value":"mismatch pool tokens"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11461:6:181"},"nodeType":"YulFunctionCall","src":"11461:50:181"},"nodeType":"YulExpressionStatement","src":"11461:50:181"},{"nodeType":"YulAssignment","src":"11520:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11532:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11543:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11528:3:181"},"nodeType":"YulFunctionCall","src":"11528:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11520:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2f637b5966c86516cd0e8631a2a2dbb5ced6ddd78c0dceb24f758a9d4073aab8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11359:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11373:4:181","type":""}],"src":"11208:344:181"},{"body":{"nodeType":"YulBlock","src":"11731:163:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11748:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11759:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11741:6:181"},"nodeType":"YulFunctionCall","src":"11741:21:181"},"nodeType":"YulExpressionStatement","src":"11741:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11782:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11793:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11778:3:181"},"nodeType":"YulFunctionCall","src":"11778:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11798:2:181","type":"","value":"13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11771:6:181"},"nodeType":"YulFunctionCall","src":"11771:30:181"},"nodeType":"YulExpressionStatement","src":"11771:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11821:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11832:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11817:3:181"},"nodeType":"YulFunctionCall","src":"11817:18:181"},{"hexValue":"3e4c502e62616c616e63654f66","kind":"string","nodeType":"YulLiteral","src":"11837:15:181","type":"","value":">LP.balanceOf"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11810:6:181"},"nodeType":"YulFunctionCall","src":"11810:43:181"},"nodeType":"YulExpressionStatement","src":"11810:43:181"},{"nodeType":"YulAssignment","src":"11862:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11874:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11885:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11870:3:181"},"nodeType":"YulFunctionCall","src":"11870:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11862:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f6ffe39fc3cc1849a13d51ded78dcf3b5c94216cc465a3b1b92bc78f59ae6cef__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11708:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11722:4:181","type":""}],"src":"11557:337:181"},{"body":{"nodeType":"YulBlock","src":"11931:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11948:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11955:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"11960:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11951:3:181"},"nodeType":"YulFunctionCall","src":"11951:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11941:6:181"},"nodeType":"YulFunctionCall","src":"11941:31:181"},"nodeType":"YulExpressionStatement","src":"11941:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11988:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"11991:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11981:6:181"},"nodeType":"YulFunctionCall","src":"11981:15:181"},"nodeType":"YulExpressionStatement","src":"11981:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12012:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12015:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12005:6:181"},"nodeType":"YulFunctionCall","src":"12005:15:181"},"nodeType":"YulExpressionStatement","src":"12005:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"11899:127:181"},{"body":{"nodeType":"YulBlock","src":"12205:178:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12222:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12233:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12215:6:181"},"nodeType":"YulFunctionCall","src":"12215:21:181"},"nodeType":"YulExpressionStatement","src":"12215:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12256:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12267:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12252:3:181"},"nodeType":"YulFunctionCall","src":"12252:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12272:2:181","type":"","value":"28"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12245:6:181"},"nodeType":"YulFunctionCall","src":"12245:30:181"},"nodeType":"YulExpressionStatement","src":"12245:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12295:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12306:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12291:3:181"},"nodeType":"YulFunctionCall","src":"12291:18:181"},{"hexValue":"7769746864726177206d6f7265207468616e20617661696c61626c65","kind":"string","nodeType":"YulLiteral","src":"12311:30:181","type":"","value":"withdraw more than available"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12284:6:181"},"nodeType":"YulFunctionCall","src":"12284:58:181"},"nodeType":"YulExpressionStatement","src":"12284:58:181"},{"nodeType":"YulAssignment","src":"12351:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12363:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12374:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12359:3:181"},"nodeType":"YulFunctionCall","src":"12359:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12351:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a5d69ce6c1af4155857291c80267a8fe45eaf0a8a37d5e7aef002f4e00be6446__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12182:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12196:4:181","type":""}],"src":"12031:352:181"},{"body":{"nodeType":"YulBlock","src":"12420:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12437:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12444:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"12449:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12440:3:181"},"nodeType":"YulFunctionCall","src":"12440:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12430:6:181"},"nodeType":"YulFunctionCall","src":"12430:31:181"},"nodeType":"YulExpressionStatement","src":"12430:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12477:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"12480:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12470:6:181"},"nodeType":"YulFunctionCall","src":"12470:15:181"},"nodeType":"YulExpressionStatement","src":"12470:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12501:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12504:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12494:6:181"},"nodeType":"YulFunctionCall","src":"12494:15:181"},"nodeType":"YulExpressionStatement","src":"12494:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"12388:127:181"},{"body":{"nodeType":"YulBlock","src":"12572:116:181","statements":[{"nodeType":"YulAssignment","src":"12582:20:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"12597:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"12600:1:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"12593:3:181"},"nodeType":"YulFunctionCall","src":"12593:9:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"12582:7:181"}]},{"body":{"nodeType":"YulBlock","src":"12660:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"12662:16:181"},"nodeType":"YulFunctionCall","src":"12662:18:181"},"nodeType":"YulExpressionStatement","src":"12662:18:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"12631:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12624:6:181"},"nodeType":"YulFunctionCall","src":"12624:9:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"12638:1:181"},{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"12645:7:181"},{"name":"x","nodeType":"YulIdentifier","src":"12654:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"12641:3:181"},"nodeType":"YulFunctionCall","src":"12641:15:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"12635:2:181"},"nodeType":"YulFunctionCall","src":"12635:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"12621:2:181"},"nodeType":"YulFunctionCall","src":"12621:37:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12614:6:181"},"nodeType":"YulFunctionCall","src":"12614:45:181"},"nodeType":"YulIf","src":"12611:71:181"}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"12551:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"12554:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"12560:7:181","type":""}],"src":"12520:168:181"},{"body":{"nodeType":"YulBlock","src":"12739:171:181","statements":[{"body":{"nodeType":"YulBlock","src":"12770:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12791:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12798:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"12803:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12794:3:181"},"nodeType":"YulFunctionCall","src":"12794:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12784:6:181"},"nodeType":"YulFunctionCall","src":"12784:31:181"},"nodeType":"YulExpressionStatement","src":"12784:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12835:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"12838:4:181","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12828:6:181"},"nodeType":"YulFunctionCall","src":"12828:15:181"},"nodeType":"YulExpressionStatement","src":"12828:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12863:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12866:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12856:6:181"},"nodeType":"YulFunctionCall","src":"12856:15:181"},"nodeType":"YulExpressionStatement","src":"12856:15:181"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"12759:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12752:6:181"},"nodeType":"YulFunctionCall","src":"12752:9:181"},"nodeType":"YulIf","src":"12749:132:181"},{"nodeType":"YulAssignment","src":"12890:14:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"12899:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"12902:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"12895:3:181"},"nodeType":"YulFunctionCall","src":"12895:9:181"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"12890:1:181"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"12724:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"12727:1:181","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"12733:1:181","type":""}],"src":"12693:217:181"},{"body":{"nodeType":"YulBlock","src":"12964:79:181","statements":[{"nodeType":"YulAssignment","src":"12974:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"12986:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"12989:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12982:3:181"},"nodeType":"YulFunctionCall","src":"12982:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"12974:4:181"}]},{"body":{"nodeType":"YulBlock","src":"13015:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13017:16:181"},"nodeType":"YulFunctionCall","src":"13017:18:181"},"nodeType":"YulExpressionStatement","src":"13017:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"13006:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"13012:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13003:2:181"},"nodeType":"YulFunctionCall","src":"13003:11:181"},"nodeType":"YulIf","src":"13000:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"12946:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"12949:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"12955:4:181","type":""}],"src":"12915:128:181"},{"body":{"nodeType":"YulBlock","src":"13096:77:181","statements":[{"nodeType":"YulAssignment","src":"13106:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13117:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"13120:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13113:3:181"},"nodeType":"YulFunctionCall","src":"13113:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"13106:3:181"}]},{"body":{"nodeType":"YulBlock","src":"13145:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13147:16:181"},"nodeType":"YulFunctionCall","src":"13147:18:181"},"nodeType":"YulExpressionStatement","src":"13147:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13137:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"13140:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13134:2:181"},"nodeType":"YulFunctionCall","src":"13134:10:181"},"nodeType":"YulIf","src":"13131:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"13079:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"13082:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"13088:3:181","type":""}],"src":"13048:125:181"},{"body":{"nodeType":"YulBlock","src":"13352:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13369:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13380:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13362:6:181"},"nodeType":"YulFunctionCall","src":"13362:21:181"},"nodeType":"YulExpressionStatement","src":"13362:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13403:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13414:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13399:3:181"},"nodeType":"YulFunctionCall","src":"13399:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13419:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13392:6:181"},"nodeType":"YulFunctionCall","src":"13392:30:181"},"nodeType":"YulExpressionStatement","src":"13392:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13442:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13453:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13438:3:181"},"nodeType":"YulFunctionCall","src":"13438:18:181"},{"hexValue":"217a65726f20616d6f756e74","kind":"string","nodeType":"YulLiteral","src":"13458:14:181","type":"","value":"!zero amount"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13431:6:181"},"nodeType":"YulFunctionCall","src":"13431:42:181"},"nodeType":"YulExpressionStatement","src":"13431:42:181"},{"nodeType":"YulAssignment","src":"13482:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13494:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13505:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13490:3:181"},"nodeType":"YulFunctionCall","src":"13490:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13482:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ad3743fd30ada6469788b58d66f88c735cea919feecd588df3ad8b7d9a2a3507__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13329:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13343:4:181","type":""}],"src":"13178:336:181"},{"body":{"nodeType":"YulBlock","src":"13693:177:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13710:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13721:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13703:6:181"},"nodeType":"YulFunctionCall","src":"13703:21:181"},"nodeType":"YulExpressionStatement","src":"13703:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13744:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13755:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13740:3:181"},"nodeType":"YulFunctionCall","src":"13740:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13760:2:181","type":"","value":"27"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13733:6:181"},"nodeType":"YulFunctionCall","src":"13733:30:181"},"nodeType":"YulExpressionStatement","src":"13733:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13783:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13794:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13779:3:181"},"nodeType":"YulFunctionCall","src":"13779:18:181"},{"hexValue":"746f6b656e416d6f756e74203e206d61784275726e416d6f756e74","kind":"string","nodeType":"YulLiteral","src":"13799:29:181","type":"","value":"tokenAmount > maxBurnAmount"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13772:6:181"},"nodeType":"YulFunctionCall","src":"13772:57:181"},"nodeType":"YulExpressionStatement","src":"13772:57:181"},{"nodeType":"YulAssignment","src":"13838:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13850:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13861:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13846:3:181"},"nodeType":"YulFunctionCall","src":"13846:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13838:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a7a312f14c5778159227ed2c11234cdc582e54216594239df89b5aac8a9fbfd9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13670:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13684:4:181","type":""}],"src":"13519:351:181"},{"body":{"nodeType":"YulBlock","src":"14004:145:181","statements":[{"nodeType":"YulAssignment","src":"14014:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14026:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14037:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14022:3:181"},"nodeType":"YulFunctionCall","src":"14022:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14014:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14056:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14071:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14087:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"14092:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14083:3:181"},"nodeType":"YulFunctionCall","src":"14083:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"14096:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14079:3:181"},"nodeType":"YulFunctionCall","src":"14079:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14067:3:181"},"nodeType":"YulFunctionCall","src":"14067:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14049:6:181"},"nodeType":"YulFunctionCall","src":"14049:51:181"},"nodeType":"YulExpressionStatement","src":"14049:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14120:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14131:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14116:3:181"},"nodeType":"YulFunctionCall","src":"14116:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"14136:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14109:6:181"},"nodeType":"YulFunctionCall","src":"14109:34:181"},"nodeType":"YulExpressionStatement","src":"14109:34:181"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13965:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13976:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13984:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13995:4:181","type":""}],"src":"13875:274:181"},{"body":{"nodeType":"YulBlock","src":"14439:324:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14456:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14467:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14449:6:181"},"nodeType":"YulFunctionCall","src":"14449:22:181"},"nodeType":"YulExpressionStatement","src":"14449:22:181"},{"nodeType":"YulVariableDeclaration","src":"14480:71:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14523:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14535:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14546:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14531:3:181"},"nodeType":"YulFunctionCall","src":"14531:19:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"14494:28:181"},"nodeType":"YulFunctionCall","src":"14494:57:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"14484:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14571:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14582:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14567:3:181"},"nodeType":"YulFunctionCall","src":"14567:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"14591:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"14599:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14587:3:181"},"nodeType":"YulFunctionCall","src":"14587:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14560:6:181"},"nodeType":"YulFunctionCall","src":"14560:50:181"},"nodeType":"YulExpressionStatement","src":"14560:50:181"},{"nodeType":"YulAssignment","src":"14619:52:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14656:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"14664:6:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"14627:28:181"},"nodeType":"YulFunctionCall","src":"14627:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14619:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14691:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14702:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14687:3:181"},"nodeType":"YulFunctionCall","src":"14687:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"14707:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14680:6:181"},"nodeType":"YulFunctionCall","src":"14680:34:181"},"nodeType":"YulExpressionStatement","src":"14680:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14734:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14745:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14730:3:181"},"nodeType":"YulFunctionCall","src":"14730:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"14750:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14723:6:181"},"nodeType":"YulFunctionCall","src":"14723:34:181"},"nodeType":"YulExpressionStatement","src":"14723:34:181"}]},"name":"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_uint256_t_uint256__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14384:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14395:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14403:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14411:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14419:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14430:4:181","type":""}],"src":"14154:609:181"},{"body":{"nodeType":"YulBlock","src":"14942:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14959:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14970:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14952:6:181"},"nodeType":"YulFunctionCall","src":"14952:21:181"},"nodeType":"YulExpressionStatement","src":"14952:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14993:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15004:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14989:3:181"},"nodeType":"YulFunctionCall","src":"14989:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15009:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14982:6:181"},"nodeType":"YulFunctionCall","src":"14982:30:181"},"nodeType":"YulExpressionStatement","src":"14982:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15032:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15043:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15028:3:181"},"nodeType":"YulFunctionCall","src":"15028:18:181"},{"hexValue":"6d69736d6174636820706f6f6c546f6b656e73","kind":"string","nodeType":"YulLiteral","src":"15048:21:181","type":"","value":"mismatch poolTokens"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15021:6:181"},"nodeType":"YulFunctionCall","src":"15021:49:181"},"nodeType":"YulExpressionStatement","src":"15021:49:181"},{"nodeType":"YulAssignment","src":"15079:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15091:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15102:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15087:3:181"},"nodeType":"YulFunctionCall","src":"15087:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15079:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4ad81e79192646de58c05c664c8c46273241020a112976d2773155fc181b7641__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14919:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14933:4:181","type":""}],"src":"14768:343:181"},{"body":{"nodeType":"YulBlock","src":"15290:176:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15307:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15318:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15300:6:181"},"nodeType":"YulFunctionCall","src":"15300:21:181"},"nodeType":"YulExpressionStatement","src":"15300:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15341:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15352:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15337:3:181"},"nodeType":"YulFunctionCall","src":"15337:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15357:2:181","type":"","value":"26"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15330:6:181"},"nodeType":"YulFunctionCall","src":"15330:30:181"},"nodeType":"YulExpressionStatement","src":"15330:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15380:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15391:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15376:3:181"},"nodeType":"YulFunctionCall","src":"15376:18:181"},{"hexValue":"616d6f756e74735b695d203c206d696e416d6f756e74735b695d","kind":"string","nodeType":"YulLiteral","src":"15396:28:181","type":"","value":"amounts[i] < minAmounts[i]"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15369:6:181"},"nodeType":"YulFunctionCall","src":"15369:56:181"},"nodeType":"YulExpressionStatement","src":"15369:56:181"},{"nodeType":"YulAssignment","src":"15434:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15446:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15457:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15442:3:181"},"nodeType":"YulFunctionCall","src":"15442:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15434:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f9716ead0cbfa1f0d7e4fb0f8f862f9707576ae17b9c27448547344167a1c211__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15267:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15281:4:181","type":""}],"src":"15116:350:181"},{"body":{"nodeType":"YulBlock","src":"15650:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15667:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15678:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15660:6:181"},"nodeType":"YulFunctionCall","src":"15660:21:181"},"nodeType":"YulExpressionStatement","src":"15660:21:181"},{"nodeType":"YulAssignment","src":"15690:64:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15727:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15739:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15750:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15735:3:181"},"nodeType":"YulFunctionCall","src":"15735:18:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"15698:28:181"},"nodeType":"YulFunctionCall","src":"15698:56:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15690:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15774:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15785:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15770:3:181"},"nodeType":"YulFunctionCall","src":"15770:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"15790:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15763:6:181"},"nodeType":"YulFunctionCall","src":"15763:34:181"},"nodeType":"YulExpressionStatement","src":"15763:34:181"}]},"name":"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_uint256__to_t_array$_t_uint256_$dyn_memory_ptr_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15611:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15622:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15630:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15641:4:181","type":""}],"src":"15471:332:181"},{"body":{"nodeType":"YulBlock","src":"15982:163:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15999:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16010:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15992:6:181"},"nodeType":"YulFunctionCall","src":"15992:21:181"},"nodeType":"YulExpressionStatement","src":"15992:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16033:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16044:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16029:3:181"},"nodeType":"YulFunctionCall","src":"16029:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16049:2:181","type":"","value":"13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16022:6:181"},"nodeType":"YulFunctionCall","src":"16022:30:181"},"nodeType":"YulExpressionStatement","src":"16022:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16072:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16083:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16068:3:181"},"nodeType":"YulFunctionCall","src":"16068:18:181"},{"hexValue":"64697361626c656420706f6f6c","kind":"string","nodeType":"YulLiteral","src":"16088:15:181","type":"","value":"disabled pool"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16061:6:181"},"nodeType":"YulFunctionCall","src":"16061:43:181"},"nodeType":"YulExpressionStatement","src":"16061:43:181"},{"nodeType":"YulAssignment","src":"16113:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16125:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16136:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16121:3:181"},"nodeType":"YulFunctionCall","src":"16121:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16113:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15959:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15973:4:181","type":""}],"src":"15808:337:181"},{"body":{"nodeType":"YulBlock","src":"16324:163:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16341:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16352:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16334:6:181"},"nodeType":"YulFunctionCall","src":"16334:21:181"},"nodeType":"YulExpressionStatement","src":"16334:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16375:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16386:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16371:3:181"},"nodeType":"YulFunctionCall","src":"16371:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16391:2:181","type":"","value":"13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16364:6:181"},"nodeType":"YulFunctionCall","src":"16364:30:181"},"nodeType":"YulExpressionStatement","src":"16364:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16414:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16425:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16410:3:181"},"nodeType":"YulFunctionCall","src":"16410:18:181"},{"hexValue":"3e706f6f6c2062616c616e6365","kind":"string","nodeType":"YulLiteral","src":"16430:15:181","type":"","value":">pool balance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16403:6:181"},"nodeType":"YulFunctionCall","src":"16403:43:181"},"nodeType":"YulExpressionStatement","src":"16403:43:181"},{"nodeType":"YulAssignment","src":"16455:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16467:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16478:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16463:3:181"},"nodeType":"YulFunctionCall","src":"16463:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16455:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4798a1cccb10622ad3eddce5aec990d3b316e4246900ba5afea19b6d9d371948__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16301:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16315:4:181","type":""}],"src":"16150:337:181"},{"body":{"nodeType":"YulBlock","src":"16666:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16683:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16694:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16676:6:181"},"nodeType":"YulFunctionCall","src":"16676:21:181"},"nodeType":"YulExpressionStatement","src":"16676:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16717:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16728:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16713:3:181"},"nodeType":"YulFunctionCall","src":"16713:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16733:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16706:6:181"},"nodeType":"YulFunctionCall","src":"16706:30:181"},"nodeType":"YulExpressionStatement","src":"16706:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16756:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16767:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16752:3:181"},"nodeType":"YulFunctionCall","src":"16752:18:181"},{"hexValue":"6478203e206d61784478","kind":"string","nodeType":"YulLiteral","src":"16772:12:181","type":"","value":"dx > maxDx"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16745:6:181"},"nodeType":"YulFunctionCall","src":"16745:40:181"},"nodeType":"YulExpressionStatement","src":"16745:40:181"},{"nodeType":"YulAssignment","src":"16794:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16806:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16817:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16802:3:181"},"nodeType":"YulFunctionCall","src":"16802:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16794:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4406c1e208c572ab95085aa92d385cddaa474035df8163bb5a0a2c403800484d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16643:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16657:4:181","type":""}],"src":"16492:334:181"},{"body":{"nodeType":"YulBlock","src":"17005:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17022:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17033:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17015:6:181"},"nodeType":"YulFunctionCall","src":"17015:21:181"},"nodeType":"YulExpressionStatement","src":"17015:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17056:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17067:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17052:3:181"},"nodeType":"YulFunctionCall","src":"17052:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17072:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17045:6:181"},"nodeType":"YulFunctionCall","src":"17045:30:181"},"nodeType":"YulExpressionStatement","src":"17045:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17095:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17106:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17091:3:181"},"nodeType":"YulFunctionCall","src":"17091:18:181"},{"hexValue":"6d6f7265207468616e20796f75206f776e","kind":"string","nodeType":"YulLiteral","src":"17111:19:181","type":"","value":"more than you own"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17084:6:181"},"nodeType":"YulFunctionCall","src":"17084:47:181"},"nodeType":"YulExpressionStatement","src":"17084:47:181"},{"nodeType":"YulAssignment","src":"17140:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17152:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17163:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17148:3:181"},"nodeType":"YulFunctionCall","src":"17148:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17140:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_49b5230bcef6bb857dbf12a192f051cfc648d5c34767bdb2c1c4044373c29ca8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16982:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16996:4:181","type":""}],"src":"16831:341:181"},{"body":{"nodeType":"YulBlock","src":"17358:228:181","statements":[{"nodeType":"YulAssignment","src":"17368:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17380:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17391:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17376:3:181"},"nodeType":"YulFunctionCall","src":"17376:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17368:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17411:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"17422:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17404:6:181"},"nodeType":"YulFunctionCall","src":"17404:25:181"},"nodeType":"YulExpressionStatement","src":"17404:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17449:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17460:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17445:3:181"},"nodeType":"YulFunctionCall","src":"17445:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"17465:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17438:6:181"},"nodeType":"YulFunctionCall","src":"17438:34:181"},"nodeType":"YulExpressionStatement","src":"17438:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17492:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17503:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17488:3:181"},"nodeType":"YulFunctionCall","src":"17488:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"17512:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"17520:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17508:3:181"},"nodeType":"YulFunctionCall","src":"17508:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17481:6:181"},"nodeType":"YulFunctionCall","src":"17481:45:181"},"nodeType":"YulExpressionStatement","src":"17481:45:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17546:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17557:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17542:3:181"},"nodeType":"YulFunctionCall","src":"17542:18:181"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"17566:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"17574:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17562:3:181"},"nodeType":"YulFunctionCall","src":"17562:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17535:6:181"},"nodeType":"YulFunctionCall","src":"17535:45:181"},"nodeType":"YulExpressionStatement","src":"17535:45:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint8_t_uint8__to_t_uint256_t_uint256_t_uint128_t_uint128__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17303:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"17314:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"17322:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"17330:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17338:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17349:4:181","type":""}],"src":"17177:409:181"},{"body":{"nodeType":"YulBlock","src":"17765:175:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17782:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17793:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17775:6:181"},"nodeType":"YulFunctionCall","src":"17775:21:181"},"nodeType":"YulExpressionStatement","src":"17775:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17816:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17827:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17812:3:181"},"nodeType":"YulFunctionCall","src":"17812:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17832:2:181","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17805:6:181"},"nodeType":"YulFunctionCall","src":"17805:30:181"},"nodeType":"YulExpressionStatement","src":"17805:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17855:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17866:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17851:3:181"},"nodeType":"YulFunctionCall","src":"17851:18:181"},{"hexValue":"696e76616c6964206c656e677468206f6620616d6f756e7473","kind":"string","nodeType":"YulLiteral","src":"17871:27:181","type":"","value":"invalid length of amounts"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17844:6:181"},"nodeType":"YulFunctionCall","src":"17844:55:181"},"nodeType":"YulExpressionStatement","src":"17844:55:181"},{"nodeType":"YulAssignment","src":"17908:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17920:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17931:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17916:3:181"},"nodeType":"YulFunctionCall","src":"17916:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17908:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_080aeafdd82a5e4bff11e63d1393c2f6239b0d47ad30f78715e3cb5585e8484e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17742:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17756:4:181","type":""}],"src":"17591:349:181"},{"body":{"nodeType":"YulBlock","src":"18119:172:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18136:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18147:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18129:6:181"},"nodeType":"YulFunctionCall","src":"18129:21:181"},"nodeType":"YulExpressionStatement","src":"18129:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18170:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18181:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18166:3:181"},"nodeType":"YulFunctionCall","src":"18166:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18186:2:181","type":"","value":"22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18159:6:181"},"nodeType":"YulFunctionCall","src":"18159:30:181"},"nodeType":"YulExpressionStatement","src":"18159:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18209:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18220:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18205:3:181"},"nodeType":"YulFunctionCall","src":"18205:18:181"},{"hexValue":"73776170206d6f7265207468616e20796f75206f776e","kind":"string","nodeType":"YulLiteral","src":"18225:24:181","type":"","value":"swap more than you own"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18198:6:181"},"nodeType":"YulFunctionCall","src":"18198:52:181"},"nodeType":"YulExpressionStatement","src":"18198:52:181"},{"nodeType":"YulAssignment","src":"18259:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18271:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18282:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18267:3:181"},"nodeType":"YulFunctionCall","src":"18267:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18259:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1b3f2c393a520e73eb7bdb3fda675794175327c242b37d24eefae133e4d40778__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18096:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18110:4:181","type":""}],"src":"17945:346:181"},{"body":{"nodeType":"YulBlock","src":"18470:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18487:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18498:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18480:6:181"},"nodeType":"YulFunctionCall","src":"18480:21:181"},"nodeType":"YulExpressionStatement","src":"18480:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18521:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18532:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18517:3:181"},"nodeType":"YulFunctionCall","src":"18517:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18537:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18510:6:181"},"nodeType":"YulFunctionCall","src":"18510:30:181"},"nodeType":"YulExpressionStatement","src":"18510:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18560:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18571:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18556:3:181"},"nodeType":"YulFunctionCall","src":"18556:18:181"},{"hexValue":"6479203c206d696e4479","kind":"string","nodeType":"YulLiteral","src":"18576:12:181","type":"","value":"dy < minDy"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18549:6:181"},"nodeType":"YulFunctionCall","src":"18549:40:181"},"nodeType":"YulExpressionStatement","src":"18549:40:181"},{"nodeType":"YulAssignment","src":"18598:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18610:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18621:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18606:3:181"},"nodeType":"YulFunctionCall","src":"18606:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18598:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_6e40b987a1bdbab1b9eb0952052a8ed8be99e503ecda84e0b9bc15992dc05932__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18447:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18461:4:181","type":""}],"src":"18296:334:181"},{"body":{"nodeType":"YulBlock","src":"18809:172:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18826:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18837:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18819:6:181"},"nodeType":"YulFunctionCall","src":"18819:21:181"},"nodeType":"YulExpressionStatement","src":"18819:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18860:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18871:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18856:3:181"},"nodeType":"YulFunctionCall","src":"18856:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18876:2:181","type":"","value":"22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18849:6:181"},"nodeType":"YulFunctionCall","src":"18849:30:181"},"nodeType":"YulExpressionStatement","src":"18849:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18899:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18910:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18895:3:181"},"nodeType":"YulFunctionCall","src":"18895:18:181"},{"hexValue":"6d69736d6174636820706f6f6c656420746f6b656e73","kind":"string","nodeType":"YulLiteral","src":"18915:24:181","type":"","value":"mismatch pooled tokens"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18888:6:181"},"nodeType":"YulFunctionCall","src":"18888:52:181"},"nodeType":"YulExpressionStatement","src":"18888:52:181"},{"nodeType":"YulAssignment","src":"18949:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18961:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18972:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18957:3:181"},"nodeType":"YulFunctionCall","src":"18957:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18949:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_407c82c74f364e90cf3f20876b92912fd15eeb935ea71a01446be03014fed388__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18786:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18800:4:181","type":""}],"src":"18635:346:181"},{"body":{"nodeType":"YulBlock","src":"19160:168:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19177:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19188:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19170:6:181"},"nodeType":"YulFunctionCall","src":"19170:21:181"},"nodeType":"YulExpressionStatement","src":"19170:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19211:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19222:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19207:3:181"},"nodeType":"YulFunctionCall","src":"19207:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19227:2:181","type":"","value":"18"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19200:6:181"},"nodeType":"YulFunctionCall","src":"19200:30:181"},"nodeType":"YulExpressionStatement","src":"19200:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19250:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19261:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19246:3:181"},"nodeType":"YulFunctionCall","src":"19246:18:181"},{"hexValue":"21737570706c7920616c6c20746f6b656e73","kind":"string","nodeType":"YulLiteral","src":"19266:20:181","type":"","value":"!supply all tokens"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19239:6:181"},"nodeType":"YulFunctionCall","src":"19239:48:181"},"nodeType":"YulExpressionStatement","src":"19239:48:181"},{"nodeType":"YulAssignment","src":"19296:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19308:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19319:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19304:3:181"},"nodeType":"YulFunctionCall","src":"19304:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19296:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_3dce4b63d19b87f59f00e1c83d4e9014c5f915f724b6e06015f43e433d5a13b8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19137:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19151:4:181","type":""}],"src":"18986:342:181"},{"body":{"nodeType":"YulBlock","src":"19507:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19524:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19535:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19517:6:181"},"nodeType":"YulFunctionCall","src":"19517:21:181"},"nodeType":"YulExpressionStatement","src":"19517:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19558:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19569:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19554:3:181"},"nodeType":"YulFunctionCall","src":"19554:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19574:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19547:6:181"},"nodeType":"YulFunctionCall","src":"19547:30:181"},"nodeType":"YulExpressionStatement","src":"19547:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19597:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19608:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19593:3:181"},"nodeType":"YulFunctionCall","src":"19593:18:181"},{"hexValue":"442073686f756c6420696e637265617365","kind":"string","nodeType":"YulLiteral","src":"19613:19:181","type":"","value":"D should increase"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19586:6:181"},"nodeType":"YulFunctionCall","src":"19586:47:181"},"nodeType":"YulExpressionStatement","src":"19586:47:181"},{"nodeType":"YulAssignment","src":"19642:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19654:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19665:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19650:3:181"},"nodeType":"YulFunctionCall","src":"19650:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19642:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_bb9053a0213fd7b0c31f2850e8d9176b933be82fddca9a3800fc76e83e2e796c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19484:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19498:4:181","type":""}],"src":"19333:341:181"},{"body":{"nodeType":"YulBlock","src":"19853:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19870:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19881:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19863:6:181"},"nodeType":"YulFunctionCall","src":"19863:21:181"},"nodeType":"YulExpressionStatement","src":"19863:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19904:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19915:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19900:3:181"},"nodeType":"YulFunctionCall","src":"19900:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19920:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19893:6:181"},"nodeType":"YulFunctionCall","src":"19893:30:181"},"nodeType":"YulExpressionStatement","src":"19893:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19943:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19954:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19939:3:181"},"nodeType":"YulFunctionCall","src":"19939:18:181"},{"hexValue":"6d696e74203c206d696e","kind":"string","nodeType":"YulLiteral","src":"19959:12:181","type":"","value":"mint < min"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19932:6:181"},"nodeType":"YulFunctionCall","src":"19932:40:181"},"nodeType":"YulExpressionStatement","src":"19932:40:181"},{"nodeType":"YulAssignment","src":"19981:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19993:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20004:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19989:3:181"},"nodeType":"YulFunctionCall","src":"19989:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19981:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_6ddd7f5b4f156ad60913b3898ca8aedad82b4753c6391199bcbb48583e596887__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19830:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19844:4:181","type":""}],"src":"19679:334:181"},{"body":{"nodeType":"YulBlock","src":"20192:158:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20209:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20220:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20202:6:181"},"nodeType":"YulFunctionCall","src":"20202:21:181"},"nodeType":"YulExpressionStatement","src":"20202:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20243:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20254:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20239:3:181"},"nodeType":"YulFunctionCall","src":"20239:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20259:1:181","type":"","value":"9"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20232:6:181"},"nodeType":"YulFunctionCall","src":"20232:29:181"},"nodeType":"YulExpressionStatement","src":"20232:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20281:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20292:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20277:3:181"},"nodeType":"YulFunctionCall","src":"20277:18:181"},{"hexValue":"6e6f7420666f756e64","kind":"string","nodeType":"YulLiteral","src":"20297:11:181","type":"","value":"not found"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20270:6:181"},"nodeType":"YulFunctionCall","src":"20270:39:181"},"nodeType":"YulExpressionStatement","src":"20270:39:181"},{"nodeType":"YulAssignment","src":"20318:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20330:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20341:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20326:3:181"},"nodeType":"YulFunctionCall","src":"20326:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20318:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9b887cfddc434e3cf41b666954131afc611b880c7637aac66ca1f629f8984c5b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20169:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20183:4:181","type":""}],"src":"20018:332:181"},{"body":{"nodeType":"YulBlock","src":"20529:164:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20546:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20557:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20539:6:181"},"nodeType":"YulFunctionCall","src":"20539:21:181"},"nodeType":"YulExpressionStatement","src":"20539:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20580:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20591:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20576:3:181"},"nodeType":"YulFunctionCall","src":"20576:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20596:2:181","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20569:6:181"},"nodeType":"YulFunctionCall","src":"20569:30:181"},"nodeType":"YulExpressionStatement","src":"20569:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20619:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20630:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20615:3:181"},"nodeType":"YulFunctionCall","src":"20615:18:181"},{"hexValue":"6479203c206d696e416d6f756e74","kind":"string","nodeType":"YulLiteral","src":"20635:16:181","type":"","value":"dy < minAmount"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20608:6:181"},"nodeType":"YulFunctionCall","src":"20608:44:181"},"nodeType":"YulExpressionStatement","src":"20608:44:181"},{"nodeType":"YulAssignment","src":"20661:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20673:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20684:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20669:3:181"},"nodeType":"YulFunctionCall","src":"20669:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20661:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_3569a113599fc30dddee53f7bfa525ade1d72800ee559c1f223157ef9a1e0da6__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20506:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20520:4:181","type":""}],"src":"20355:338:181"},{"body":{"nodeType":"YulBlock","src":"20881:217:181","statements":[{"nodeType":"YulAssignment","src":"20891:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20903:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20914:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20899:3:181"},"nodeType":"YulFunctionCall","src":"20899:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20891:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20934:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"20945:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20927:6:181"},"nodeType":"YulFunctionCall","src":"20927:25:181"},"nodeType":"YulExpressionStatement","src":"20927:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20972:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20983:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20968:3:181"},"nodeType":"YulFunctionCall","src":"20968:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"20988:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20961:6:181"},"nodeType":"YulFunctionCall","src":"20961:34:181"},"nodeType":"YulExpressionStatement","src":"20961:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21015:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21026:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21011:3:181"},"nodeType":"YulFunctionCall","src":"21011:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"21035:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"21043:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21031:3:181"},"nodeType":"YulFunctionCall","src":"21031:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21004:6:181"},"nodeType":"YulFunctionCall","src":"21004:45:181"},"nodeType":"YulExpressionStatement","src":"21004:45:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21069:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21080:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21065:3:181"},"nodeType":"YulFunctionCall","src":"21065:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"21085:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21058:6:181"},"nodeType":"YulFunctionCall","src":"21058:34:181"},"nodeType":"YulExpressionStatement","src":"21058:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint8_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20826:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"20837:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"20845:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"20853:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"20861:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20872:4:181","type":""}],"src":"20698:400:181"},{"body":{"nodeType":"YulBlock","src":"21167:358:181","statements":[{"nodeType":"YulVariableDeclaration","src":"21177:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"21192:1:181","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"21181:7:181","type":""}]},{"nodeType":"YulAssignment","src":"21202:16:181","value":{"name":"power_1","nodeType":"YulIdentifier","src":"21211:7:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"21202:5:181"}]},{"nodeType":"YulAssignment","src":"21227:13:181","value":{"name":"_base","nodeType":"YulIdentifier","src":"21235:5:181"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"21227:4:181"}]},{"body":{"nodeType":"YulBlock","src":"21291:228:181","statements":[{"body":{"nodeType":"YulBlock","src":"21336:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"21338:16:181"},"nodeType":"YulFunctionCall","src":"21338:18:181"},"nodeType":"YulExpressionStatement","src":"21338:18:181"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"21311:4:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21325:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"21321:3:181"},"nodeType":"YulFunctionCall","src":"21321:6:181"},{"name":"base","nodeType":"YulIdentifier","src":"21329:4:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"21317:3:181"},"nodeType":"YulFunctionCall","src":"21317:17:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21308:2:181"},"nodeType":"YulFunctionCall","src":"21308:27:181"},"nodeType":"YulIf","src":"21305:53:181"},{"body":{"nodeType":"YulBlock","src":"21397:29:181","statements":[{"nodeType":"YulAssignment","src":"21399:25:181","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"21412:5:181"},{"name":"base","nodeType":"YulIdentifier","src":"21419:4:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"21408:3:181"},"nodeType":"YulFunctionCall","src":"21408:16:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"21399:5:181"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"21378:8:181"},{"name":"power_1","nodeType":"YulIdentifier","src":"21388:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21374:3:181"},"nodeType":"YulFunctionCall","src":"21374:22:181"},"nodeType":"YulIf","src":"21371:55:181"},{"nodeType":"YulAssignment","src":"21439:23:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"21451:4:181"},{"name":"base","nodeType":"YulIdentifier","src":"21457:4:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"21447:3:181"},"nodeType":"YulFunctionCall","src":"21447:15:181"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"21439:4:181"}]},{"nodeType":"YulAssignment","src":"21475:34:181","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"21491:7:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"21500:8:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"21487:3:181"},"nodeType":"YulFunctionCall","src":"21487:22:181"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"21475:8:181"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"21260:8:181"},{"name":"power_1","nodeType":"YulIdentifier","src":"21270:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21257:2:181"},"nodeType":"YulFunctionCall","src":"21257:21:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"21279:3:181","statements":[]},"pre":{"nodeType":"YulBlock","src":"21253:3:181","statements":[]},"src":"21249:270:181"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"21131:5:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"21138:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"21151:5:181","type":""},{"name":"base","nodeType":"YulTypedName","src":"21158:4:181","type":""}],"src":"21103:422:181"},{"body":{"nodeType":"YulBlock","src":"21589:747:181","statements":[{"body":{"nodeType":"YulBlock","src":"21627:52:181","statements":[{"nodeType":"YulAssignment","src":"21641:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"21650:1:181","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"21641:5:181"}]},{"nodeType":"YulLeave","src":"21664:5:181"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"21609:8:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"21602:6:181"},"nodeType":"YulFunctionCall","src":"21602:16:181"},"nodeType":"YulIf","src":"21599:80:181"},{"body":{"nodeType":"YulBlock","src":"21712:52:181","statements":[{"nodeType":"YulAssignment","src":"21726:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"21735:1:181","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"21726:5:181"}]},{"nodeType":"YulLeave","src":"21749:5:181"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"21698:4:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"21691:6:181"},"nodeType":"YulFunctionCall","src":"21691:12:181"},"nodeType":"YulIf","src":"21688:76:181"},{"cases":[{"body":{"nodeType":"YulBlock","src":"21800:52:181","statements":[{"nodeType":"YulAssignment","src":"21814:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"21823:1:181","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"21814:5:181"}]},{"nodeType":"YulLeave","src":"21837:5:181"}]},"nodeType":"YulCase","src":"21793:59:181","value":{"kind":"number","nodeType":"YulLiteral","src":"21798:1:181","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"21868:123:181","statements":[{"body":{"nodeType":"YulBlock","src":"21903:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"21905:16:181"},"nodeType":"YulFunctionCall","src":"21905:18:181"},"nodeType":"YulExpressionStatement","src":"21905:18:181"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"21888:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"21898:3:181","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21885:2:181"},"nodeType":"YulFunctionCall","src":"21885:17:181"},"nodeType":"YulIf","src":"21882:43:181"},{"nodeType":"YulAssignment","src":"21938:25:181","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"21951:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"21961:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21947:3:181"},"nodeType":"YulFunctionCall","src":"21947:16:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"21938:5:181"}]},{"nodeType":"YulLeave","src":"21976:5:181"}]},"nodeType":"YulCase","src":"21861:130:181","value":{"kind":"number","nodeType":"YulLiteral","src":"21866:1:181","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"21780:4:181"},"nodeType":"YulSwitch","src":"21773:218:181"},{"body":{"nodeType":"YulBlock","src":"22089:70:181","statements":[{"nodeType":"YulAssignment","src":"22103:28:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"22116:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"22122:8:181"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"22112:3:181"},"nodeType":"YulFunctionCall","src":"22112:19:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"22103:5:181"}]},{"nodeType":"YulLeave","src":"22144:5:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"22013:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"22019:2:181","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"22010:2:181"},"nodeType":"YulFunctionCall","src":"22010:12:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"22027:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"22037:2:181","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"22024:2:181"},"nodeType":"YulFunctionCall","src":"22024:16:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22006:3:181"},"nodeType":"YulFunctionCall","src":"22006:35:181"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"22050:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"22056:3:181","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"22047:2:181"},"nodeType":"YulFunctionCall","src":"22047:13:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"22065:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"22075:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"22062:2:181"},"nodeType":"YulFunctionCall","src":"22062:16:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22043:3:181"},"nodeType":"YulFunctionCall","src":"22043:36:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"22003:2:181"},"nodeType":"YulFunctionCall","src":"22003:77:181"},"nodeType":"YulIf","src":"22000:159:181"},{"nodeType":"YulVariableDeclaration","src":"22168:57:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"22210:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"22216:8:181"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"22191:18:181"},"nodeType":"YulFunctionCall","src":"22191:34:181"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"22172:7:181","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"22181:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"22270:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"22272:16:181"},"nodeType":"YulFunctionCall","src":"22272:18:181"},"nodeType":"YulExpressionStatement","src":"22272:18:181"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"22240:7:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22257:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"22253:3:181"},"nodeType":"YulFunctionCall","src":"22253:6:181"},{"name":"base_1","nodeType":"YulIdentifier","src":"22261:6:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"22249:3:181"},"nodeType":"YulFunctionCall","src":"22249:19:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"22237:2:181"},"nodeType":"YulFunctionCall","src":"22237:32:181"},"nodeType":"YulIf","src":"22234:58:181"},{"nodeType":"YulAssignment","src":"22301:29:181","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"22314:7:181"},{"name":"base_1","nodeType":"YulIdentifier","src":"22323:6:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"22310:3:181"},"nodeType":"YulFunctionCall","src":"22310:20:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"22301:5:181"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"21560:4:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"21566:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"21579:5:181","type":""}],"src":"21530:806:181"},{"body":{"nodeType":"YulBlock","src":"22411:61:181","statements":[{"nodeType":"YulAssignment","src":"22421:45:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"22451:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"22457:8:181"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"22430:20:181"},"nodeType":"YulFunctionCall","src":"22430:36:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"22421:5:181"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"22382:4:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"22388:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"22401:5:181","type":""}],"src":"22341:131:181"},{"body":{"nodeType":"YulBlock","src":"22651:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22668:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22679:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22661:6:181"},"nodeType":"YulFunctionCall","src":"22661:21:181"},"nodeType":"YulExpressionStatement","src":"22661:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22702:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22713:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22698:3:181"},"nodeType":"YulFunctionCall","src":"22698:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22718:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22691:6:181"},"nodeType":"YulFunctionCall","src":"22691:30:181"},"nodeType":"YulExpressionStatement","src":"22691:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22741:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22752:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22737:3:181"},"nodeType":"YulFunctionCall","src":"22737:18:181"},{"hexValue":"6d69736d61746368206d756c7469706c69657273","kind":"string","nodeType":"YulLiteral","src":"22757:22:181","type":"","value":"mismatch multipliers"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22730:6:181"},"nodeType":"YulFunctionCall","src":"22730:50:181"},"nodeType":"YulExpressionStatement","src":"22730:50:181"},{"nodeType":"YulAssignment","src":"22789:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22801:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22812:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22797:3:181"},"nodeType":"YulFunctionCall","src":"22797:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22789:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d9b2e328f4209b3735eca19488e3afd57ba32c456d5e1a010a233e595f7b0b47__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22628:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22642:4:181","type":""}],"src":"22477:344:181"},{"body":{"nodeType":"YulBlock","src":"23000:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23017:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23028:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23010:6:181"},"nodeType":"YulFunctionCall","src":"23010:21:181"},"nodeType":"YulExpressionStatement","src":"23010:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23051:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23062:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23047:3:181"},"nodeType":"YulFunctionCall","src":"23047:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23067:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23040:6:181"},"nodeType":"YulFunctionCall","src":"23040:30:181"},"nodeType":"YulExpressionStatement","src":"23040:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23090:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23101:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23086:3:181"},"nodeType":"YulFunctionCall","src":"23086:18:181"},{"hexValue":"4420646f6573206e6f7420636f6e7665726765","kind":"string","nodeType":"YulLiteral","src":"23106:21:181","type":"","value":"D does not converge"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23079:6:181"},"nodeType":"YulFunctionCall","src":"23079:49:181"},"nodeType":"YulExpressionStatement","src":"23079:49:181"},{"nodeType":"YulAssignment","src":"23137:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23149:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23160:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23145:3:181"},"nodeType":"YulFunctionCall","src":"23145:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23137:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_eb80683d13e69e40aa7f57ce3558136d2c8c4c88f682021213f7030fc3d23afd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22977:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22991:4:181","type":""}],"src":"22826:343:181"},{"body":{"nodeType":"YulBlock","src":"23348:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23365:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23376:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23358:6:181"},"nodeType":"YulFunctionCall","src":"23358:21:181"},"nodeType":"YulExpressionStatement","src":"23358:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23399:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23410:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23395:3:181"},"nodeType":"YulFunctionCall","src":"23395:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23415:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23388:6:181"},"nodeType":"YulFunctionCall","src":"23388:30:181"},"nodeType":"YulExpressionStatement","src":"23388:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23438:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23449:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23434:3:181"},"nodeType":"YulFunctionCall","src":"23434:18:181"},{"hexValue":"65786365656420746f74616c20737570706c79","kind":"string","nodeType":"YulLiteral","src":"23454:21:181","type":"","value":"exceed total supply"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23427:6:181"},"nodeType":"YulFunctionCall","src":"23427:49:181"},"nodeType":"YulExpressionStatement","src":"23427:49:181"},{"nodeType":"YulAssignment","src":"23485:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23497:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23508:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23493:3:181"},"nodeType":"YulFunctionCall","src":"23493:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23485:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b19f02778fe2ebdf3ae6da8b526e4f3fcfda929b6d006b58be5eb0b43957bde5__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23325:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23339:4:181","type":""}],"src":"23174:343:181"},{"body":{"nodeType":"YulBlock","src":"23696:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23713:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23724:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23706:6:181"},"nodeType":"YulFunctionCall","src":"23706:21:181"},"nodeType":"YulExpressionStatement","src":"23706:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23747:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23758:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23743:3:181"},"nodeType":"YulFunctionCall","src":"23743:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23763:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23736:6:181"},"nodeType":"YulFunctionCall","src":"23736:30:181"},"nodeType":"YulExpressionStatement","src":"23736:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23786:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23797:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23782:3:181"},"nodeType":"YulFunctionCall","src":"23782:18:181"},{"hexValue":"636f6d7061726520746f6b656e20746f20697473656c66","kind":"string","nodeType":"YulLiteral","src":"23802:25:181","type":"","value":"compare token to itself"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23775:6:181"},"nodeType":"YulFunctionCall","src":"23775:53:181"},"nodeType":"YulExpressionStatement","src":"23775:53:181"},{"nodeType":"YulAssignment","src":"23837:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23849:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23860:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23845:3:181"},"nodeType":"YulFunctionCall","src":"23845:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23837:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23673:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23687:4:181","type":""}],"src":"23522:347:181"},{"body":{"nodeType":"YulBlock","src":"24048:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24065:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24076:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24058:6:181"},"nodeType":"YulFunctionCall","src":"24058:21:181"},"nodeType":"YulExpressionStatement","src":"24058:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24099:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24110:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24095:3:181"},"nodeType":"YulFunctionCall","src":"24095:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24115:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24088:6:181"},"nodeType":"YulFunctionCall","src":"24088:30:181"},"nodeType":"YulExpressionStatement","src":"24088:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24138:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24149:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24134:3:181"},"nodeType":"YulFunctionCall","src":"24134:18:181"},{"hexValue":"6578636565647320617661696c61626c65","kind":"string","nodeType":"YulLiteral","src":"24154:19:181","type":"","value":"exceeds available"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24127:6:181"},"nodeType":"YulFunctionCall","src":"24127:47:181"},"nodeType":"YulExpressionStatement","src":"24127:47:181"},{"nodeType":"YulAssignment","src":"24183:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24195:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24206:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24191:3:181"},"nodeType":"YulFunctionCall","src":"24191:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24183:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cfeed71d91768718346c2ea3c2ab2e22b6f1283f91f1be8620ac590423d0fe0f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24025:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24039:4:181","type":""}],"src":"23874:341:181"},{"body":{"nodeType":"YulBlock","src":"24394:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24411:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24422:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24404:6:181"},"nodeType":"YulFunctionCall","src":"24404:21:181"},"nodeType":"YulExpressionStatement","src":"24404:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24445:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24456:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24441:3:181"},"nodeType":"YulFunctionCall","src":"24441:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24461:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24434:6:181"},"nodeType":"YulFunctionCall","src":"24434:30:181"},"nodeType":"YulExpressionStatement","src":"24434:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24484:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24495:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24480:3:181"},"nodeType":"YulFunctionCall","src":"24480:18:181"},{"hexValue":"546f6b656e206e6f7420666f756e64","kind":"string","nodeType":"YulLiteral","src":"24500:17:181","type":"","value":"Token not found"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24473:6:181"},"nodeType":"YulFunctionCall","src":"24473:45:181"},"nodeType":"YulExpressionStatement","src":"24473:45:181"},{"nodeType":"YulAssignment","src":"24527:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24539:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24550:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24535:3:181"},"nodeType":"YulFunctionCall","src":"24535:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24527:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_487af3faa279cd1df07c0d1897feb1b8a94d7a439a5fcca3a8f816912eee96c2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24371:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24385:4:181","type":""}],"src":"24220:339:181"},{"body":{"nodeType":"YulBlock","src":"24738:180:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24755:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24766:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24748:6:181"},"nodeType":"YulFunctionCall","src":"24748:21:181"},"nodeType":"YulExpressionStatement","src":"24748:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24789:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24800:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24785:3:181"},"nodeType":"YulFunctionCall","src":"24785:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24805:2:181","type":"","value":"30"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24778:6:181"},"nodeType":"YulFunctionCall","src":"24778:30:181"},"nodeType":"YulExpressionStatement","src":"24778:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24828:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24839:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24824:3:181"},"nodeType":"YulFunctionCall","src":"24824:18:181"},{"hexValue":"417070726f78696d6174696f6e20646964206e6f7420636f6e7665726765","kind":"string","nodeType":"YulLiteral","src":"24844:32:181","type":"","value":"Approximation did not converge"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24817:6:181"},"nodeType":"YulFunctionCall","src":"24817:60:181"},"nodeType":"YulExpressionStatement","src":"24817:60:181"},{"nodeType":"YulAssignment","src":"24886:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24898:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24909:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24894:3:181"},"nodeType":"YulFunctionCall","src":"24894:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24886:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24715:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24729:4:181","type":""}],"src":"24564:354:181"},{"body":{"nodeType":"YulBlock","src":"25080:218:181","statements":[{"nodeType":"YulAssignment","src":"25090:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25102:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25113:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25098:3:181"},"nodeType":"YulFunctionCall","src":"25098:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25090:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"25125:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25143:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"25148:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"25139:3:181"},"nodeType":"YulFunctionCall","src":"25139:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"25152:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25135:3:181"},"nodeType":"YulFunctionCall","src":"25135:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"25129:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25170:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"25185:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"25193:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25181:3:181"},"nodeType":"YulFunctionCall","src":"25181:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25163:6:181"},"nodeType":"YulFunctionCall","src":"25163:34:181"},"nodeType":"YulExpressionStatement","src":"25163:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25217:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25228:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25213:3:181"},"nodeType":"YulFunctionCall","src":"25213:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25237:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"25245:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25233:3:181"},"nodeType":"YulFunctionCall","src":"25233:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25206:6:181"},"nodeType":"YulFunctionCall","src":"25206:43:181"},"nodeType":"YulExpressionStatement","src":"25206:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25269:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25280:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25265:3:181"},"nodeType":"YulFunctionCall","src":"25265:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"25285:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25258:6:181"},"nodeType":"YulFunctionCall","src":"25258:34:181"},"nodeType":"YulExpressionStatement","src":"25258:34:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25033:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"25044:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"25052:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"25060:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25071:4:181","type":""}],"src":"24923:375:181"},{"body":{"nodeType":"YulBlock","src":"25477:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25494:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25505:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25487:6:181"},"nodeType":"YulFunctionCall","src":"25487:21:181"},"nodeType":"YulExpressionStatement","src":"25487:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25528:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25539:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25524:3:181"},"nodeType":"YulFunctionCall","src":"25524:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"25544:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25517:6:181"},"nodeType":"YulFunctionCall","src":"25517:30:181"},"nodeType":"YulExpressionStatement","src":"25517:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25567:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25578:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25563:3:181"},"nodeType":"YulFunctionCall","src":"25563:18:181"},{"hexValue":"746f6b656e206e6f7420666f756e64","kind":"string","nodeType":"YulLiteral","src":"25583:17:181","type":"","value":"token not found"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25556:6:181"},"nodeType":"YulFunctionCall","src":"25556:45:181"},"nodeType":"YulExpressionStatement","src":"25556:45:181"},{"nodeType":"YulAssignment","src":"25610:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25622:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25633:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25618:3:181"},"nodeType":"YulFunctionCall","src":"25618:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25610:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9696d201946a7b6efbea55f1e57c9bbecf77447f35c86ca3cfdc292daa9e8b3d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25454:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25468:4:181","type":""}],"src":"25303:339:181"},{"body":{"nodeType":"YulBlock","src":"25725:167:181","statements":[{"body":{"nodeType":"YulBlock","src":"25771:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25780:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"25783:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"25773:6:181"},"nodeType":"YulFunctionCall","src":"25773:12:181"},"nodeType":"YulExpressionStatement","src":"25773:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"25746:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"25755:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25742:3:181"},"nodeType":"YulFunctionCall","src":"25742:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"25767:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"25738:3:181"},"nodeType":"YulFunctionCall","src":"25738:32:181"},"nodeType":"YulIf","src":"25735:52:181"},{"nodeType":"YulVariableDeclaration","src":"25796:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25815:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25809:5:181"},"nodeType":"YulFunctionCall","src":"25809:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"25800:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"25856:5:181"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"25834:21:181"},"nodeType":"YulFunctionCall","src":"25834:28:181"},"nodeType":"YulExpressionStatement","src":"25834:28:181"},{"nodeType":"YulAssignment","src":"25871:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"25881:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"25871:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25691:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"25702:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"25714:6:181","type":""}],"src":"25647:245:181"},{"body":{"nodeType":"YulBlock","src":"26071:232:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26088:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26099:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26081:6:181"},"nodeType":"YulFunctionCall","src":"26081:21:181"},"nodeType":"YulExpressionStatement","src":"26081:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26122:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26133:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26118:3:181"},"nodeType":"YulFunctionCall","src":"26118:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"26138:2:181","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26111:6:181"},"nodeType":"YulFunctionCall","src":"26111:30:181"},"nodeType":"YulExpressionStatement","src":"26111:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26161:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26172:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26157:3:181"},"nodeType":"YulFunctionCall","src":"26157:18:181"},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e","kind":"string","nodeType":"YulLiteral","src":"26177:34:181","type":"","value":"SafeERC20: ERC20 operation did n"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26150:6:181"},"nodeType":"YulFunctionCall","src":"26150:62:181"},"nodeType":"YulExpressionStatement","src":"26150:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26232:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26243:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26228:3:181"},"nodeType":"YulFunctionCall","src":"26228:18:181"},{"hexValue":"6f742073756363656564","kind":"string","nodeType":"YulLiteral","src":"26248:12:181","type":"","value":"ot succeed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26221:6:181"},"nodeType":"YulFunctionCall","src":"26221:40:181"},"nodeType":"YulExpressionStatement","src":"26221:40:181"},{"nodeType":"YulAssignment","src":"26270:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26282:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26293:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26278:3:181"},"nodeType":"YulFunctionCall","src":"26278:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26270:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26048:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26062:4:181","type":""}],"src":"25897:406:181"},{"body":{"nodeType":"YulBlock","src":"26482:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26499:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26510:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26492:6:181"},"nodeType":"YulFunctionCall","src":"26492:21:181"},"nodeType":"YulExpressionStatement","src":"26492:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26533:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26544:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26529:3:181"},"nodeType":"YulFunctionCall","src":"26529:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"26549:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26522:6:181"},"nodeType":"YulFunctionCall","src":"26522:30:181"},"nodeType":"YulExpressionStatement","src":"26522:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26572:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26583:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26568:3:181"},"nodeType":"YulFunctionCall","src":"26568:18:181"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f","kind":"string","nodeType":"YulLiteral","src":"26588:34:181","type":"","value":"Address: insufficient balance fo"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26561:6:181"},"nodeType":"YulFunctionCall","src":"26561:62:181"},"nodeType":"YulExpressionStatement","src":"26561:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26643:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26654:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26639:3:181"},"nodeType":"YulFunctionCall","src":"26639:18:181"},{"hexValue":"722063616c6c","kind":"string","nodeType":"YulLiteral","src":"26659:8:181","type":"","value":"r call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26632:6:181"},"nodeType":"YulFunctionCall","src":"26632:36:181"},"nodeType":"YulExpressionStatement","src":"26632:36:181"},{"nodeType":"YulAssignment","src":"26677:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26689:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26700:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26685:3:181"},"nodeType":"YulFunctionCall","src":"26685:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26677:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26459:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26473:4:181","type":""}],"src":"26308:402:181"},{"body":{"nodeType":"YulBlock","src":"26781:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"26791:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"26800:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"26795:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"26860:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"26885:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"26890:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26881:3:181"},"nodeType":"YulFunctionCall","src":"26881:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"26904:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"26909:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26900:3:181"},"nodeType":"YulFunctionCall","src":"26900:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26894:5:181"},"nodeType":"YulFunctionCall","src":"26894:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26874:6:181"},"nodeType":"YulFunctionCall","src":"26874:39:181"},"nodeType":"YulExpressionStatement","src":"26874:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"26821:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"26824:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"26818:2:181"},"nodeType":"YulFunctionCall","src":"26818:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"26832:19:181","statements":[{"nodeType":"YulAssignment","src":"26834:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"26843:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"26846:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26839:3:181"},"nodeType":"YulFunctionCall","src":"26839:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"26834:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"26814:3:181","statements":[]},"src":"26810:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"26943:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"26948:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26939:3:181"},"nodeType":"YulFunctionCall","src":"26939:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"26957:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26932:6:181"},"nodeType":"YulFunctionCall","src":"26932:27:181"},"nodeType":"YulExpressionStatement","src":"26932:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"26759:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"26764:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"26769:6:181","type":""}],"src":"26715:250:181"},{"body":{"nodeType":"YulBlock","src":"27107:150:181","statements":[{"nodeType":"YulVariableDeclaration","src":"27117:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"27137:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27131:5:181"},"nodeType":"YulFunctionCall","src":"27131:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"27121:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"27192:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"27200:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27188:3:181"},"nodeType":"YulFunctionCall","src":"27188:17:181"},{"name":"pos","nodeType":"YulIdentifier","src":"27207:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"27212:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"27153:34:181"},"nodeType":"YulFunctionCall","src":"27153:66:181"},"nodeType":"YulExpressionStatement","src":"27153:66:181"},{"nodeType":"YulAssignment","src":"27228:23:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"27239:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"27244:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27235:3:181"},"nodeType":"YulFunctionCall","src":"27235:16:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"27228:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"27083:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"27088:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"27099:3:181","type":""}],"src":"26970:287:181"},{"body":{"nodeType":"YulBlock","src":"27436:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27453:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27464:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27446:6:181"},"nodeType":"YulFunctionCall","src":"27446:21:181"},"nodeType":"YulExpressionStatement","src":"27446:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27487:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27498:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27483:3:181"},"nodeType":"YulFunctionCall","src":"27483:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"27503:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27476:6:181"},"nodeType":"YulFunctionCall","src":"27476:30:181"},"nodeType":"YulExpressionStatement","src":"27476:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27526:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27537:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27522:3:181"},"nodeType":"YulFunctionCall","src":"27522:18:181"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"27542:31:181","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27515:6:181"},"nodeType":"YulFunctionCall","src":"27515:59:181"},"nodeType":"YulExpressionStatement","src":"27515:59:181"},{"nodeType":"YulAssignment","src":"27583:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27595:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27606:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27591:3:181"},"nodeType":"YulFunctionCall","src":"27591:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"27583:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27413:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"27427:4:181","type":""}],"src":"27262:353:181"},{"body":{"nodeType":"YulBlock","src":"27741:275:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27758:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27769:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27751:6:181"},"nodeType":"YulFunctionCall","src":"27751:21:181"},"nodeType":"YulExpressionStatement","src":"27751:21:181"},{"nodeType":"YulVariableDeclaration","src":"27781:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"27801:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27795:5:181"},"nodeType":"YulFunctionCall","src":"27795:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"27785:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27828:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27839:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27824:3:181"},"nodeType":"YulFunctionCall","src":"27824:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"27844:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27817:6:181"},"nodeType":"YulFunctionCall","src":"27817:34:181"},"nodeType":"YulExpressionStatement","src":"27817:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"27899:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"27907:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27895:3:181"},"nodeType":"YulFunctionCall","src":"27895:15:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27916:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27927:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27912:3:181"},"nodeType":"YulFunctionCall","src":"27912:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"27932:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"27860:34:181"},"nodeType":"YulFunctionCall","src":"27860:79:181"},"nodeType":"YulExpressionStatement","src":"27860:79:181"},{"nodeType":"YulAssignment","src":"27948:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27964:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"27983:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"27991:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27979:3:181"},"nodeType":"YulFunctionCall","src":"27979:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28000:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"27996:3:181"},"nodeType":"YulFunctionCall","src":"27996:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27975:3:181"},"nodeType":"YulFunctionCall","src":"27975:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27960:3:181"},"nodeType":"YulFunctionCall","src":"27960:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"28007:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27956:3:181"},"nodeType":"YulFunctionCall","src":"27956:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"27948:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27710:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"27721:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"27732:4:181","type":""}],"src":"27620:396:181"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_bytes32t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_array_uint256_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_bytes32t_array$_t_uint256_$dyn_calldata_ptrt_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_array_uint256_dyn_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n        value3 := calldataload(add(headStart, 64))\n        value4 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_bytes32t_uint256t_uint8(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := abi_decode_uint8(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_contract_LPToken(value, pos)\n    {\n        mstore(pos, and(value, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_array_contract_IERC20_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_array_uint256_dyn_memory_ptr(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_bool(value, pos)\n    {\n        mstore(pos, iszero(iszero(value)))\n    }\n    function abi_encode_tuple_t_struct$_Swap_$30786_memory_ptr__to_t_struct$_Swap_$30786_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), mload(value0))\n        mstore(add(headStart, 64), mload(add(value0, 32)))\n        mstore(add(headStart, 96), mload(add(value0, 64)))\n        mstore(add(headStart, 128), mload(add(value0, 96)))\n        mstore(add(headStart, 160), mload(add(value0, 128)))\n        mstore(add(headStart, 192), mload(add(value0, 160)))\n        mstore(add(headStart, 224), mload(add(value0, 192)))\n        let memberValue0 := mload(add(value0, 224))\n        let _1 := 256\n        abi_encode_contract_LPToken(memberValue0, add(headStart, _1))\n        let memberValue0_1 := mload(add(value0, _1))\n        let _2 := 0x01c0\n        let _3 := 288\n        mstore(add(headStart, _3), _2)\n        let tail_1 := abi_encode_array_contract_IERC20_dyn(memberValue0_1, add(headStart, 480))\n        let memberValue0_2 := mload(add(value0, _3))\n        let _4 := not(31)\n        let _5 := 320\n        mstore(add(headStart, _5), add(sub(tail_1, headStart), _4))\n        let tail_2 := abi_encode_array_uint256_dyn_memory_ptr(memberValue0_2, tail_1)\n        let memberValue0_3 := mload(add(value0, _5))\n        let _6 := 352\n        mstore(add(headStart, _6), add(sub(tail_2, headStart), _4))\n        let tail_3 := abi_encode_array_uint256_dyn_memory_ptr(memberValue0_3, tail_2)\n        let memberValue0_4 := mload(add(value0, _6))\n        let _7 := 384\n        mstore(add(headStart, _7), add(sub(tail_3, headStart), _4))\n        let tail_4 := abi_encode_array_uint256_dyn_memory_ptr(memberValue0_4, tail_3)\n        let memberValue0_5 := mload(add(value0, _7))\n        let _8 := 416\n        abi_encode_bool(memberValue0_5, add(headStart, _8))\n        mstore(add(headStart, _2), mload(add(value0, _8)))\n        tail := tail_4\n    }\n    function abi_decode_tuple_t_bytes32t_uint256t_array$_t_uint256_$dyn_calldata_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_uint256_dyn_calldata(add(headStart, offset), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n        value4 := calldataload(add(headStart, 96))\n    }\n    function abi_encode_array_uint256_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_array_uint256_dyn(value0, add(headStart, 32))\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_bytes32t_uint256t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := abi_decode_address(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_bytes32t_array$_t_uint256_$dyn_calldata_ptrt_bool(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_array_uint256_dyn_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n        let value := calldataload(add(headStart, 64))\n        validator_revert_bool(value)\n        value3 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_bytes32t_uint8t_uint8t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_uint8(add(headStart, 32))\n        value2 := abi_decode_uint8(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_bytes32t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_bytes32t_uint8(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_uint8(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_contract$_IERC20_$10812__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_bytes32t_uint256t_uint8t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := abi_decode_uint8(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n    }\n    function abi_decode_tuple_t_bytes32t_uint8t_uint8t_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_uint8(add(headStart, 32))\n        value2 := abi_decode_uint8(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"index out of range\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_2f637b5966c86516cd0e8631a2a2dbb5ced6ddd78c0dceb24f758a9d4073aab8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"mismatch pool tokens\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_f6ffe39fc3cc1849a13d51ded78dcf3b5c94216cc465a3b1b92bc78f59ae6cef__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 13)\n        mstore(add(headStart, 64), \">LP.balanceOf\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_a5d69ce6c1af4155857291c80267a8fe45eaf0a8a37d5e7aef002f4e00be6446__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 28)\n        mstore(add(headStart, 64), \"withdraw more than available\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        product := mul(x, y)\n        if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_ad3743fd30ada6469788b58d66f88c735cea919feecd588df3ad8b7d9a2a3507__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!zero amount\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_a7a312f14c5778159227ed2c11234cdc582e54216594239df89b5aac8a9fbfd9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"tokenAmount > maxBurnAmount\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_uint256_t_uint256__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 128)\n        let tail_1 := abi_encode_array_uint256_dyn(value0, add(headStart, 128))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_array_uint256_dyn(value1, tail_1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_4ad81e79192646de58c05c664c8c46273241020a112976d2773155fc181b7641__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"mismatch poolTokens\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_f9716ead0cbfa1f0d7e4fb0f8f862f9707576ae17b9c27448547344167a1c211__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 26)\n        mstore(add(headStart, 64), \"amounts[i] < minAmounts[i]\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_uint256__to_t_array$_t_uint256_$dyn_memory_ptr_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        tail := abi_encode_array_uint256_dyn(value0, add(headStart, 64))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_d5d2a5dfc7e5a8b29ac25fcb7822374ec01bb51931f73ac28de993f311e9b8de__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 13)\n        mstore(add(headStart, 64), \"disabled pool\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4798a1cccb10622ad3eddce5aec990d3b316e4246900ba5afea19b6d9d371948__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 13)\n        mstore(add(headStart, 64), \">pool balance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4406c1e208c572ab95085aa92d385cddaa474035df8163bb5a0a2c403800484d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"dx > maxDx\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_49b5230bcef6bb857dbf12a192f051cfc648d5c34767bdb2c1c4044373c29ca8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"more than you own\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint8_t_uint8__to_t_uint256_t_uint256_t_uint128_t_uint128__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), and(value3, 0xff))\n    }\n    function abi_encode_tuple_t_stringliteral_080aeafdd82a5e4bff11e63d1393c2f6239b0d47ad30f78715e3cb5585e8484e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"invalid length of amounts\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1b3f2c393a520e73eb7bdb3fda675794175327c242b37d24eefae133e4d40778__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"swap more than you own\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_6e40b987a1bdbab1b9eb0952052a8ed8be99e503ecda84e0b9bc15992dc05932__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"dy < minDy\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_407c82c74f364e90cf3f20876b92912fd15eeb935ea71a01446be03014fed388__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"mismatch pooled tokens\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_3dce4b63d19b87f59f00e1c83d4e9014c5f915f724b6e06015f43e433d5a13b8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"!supply all tokens\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_bb9053a0213fd7b0c31f2850e8d9176b933be82fddca9a3800fc76e83e2e796c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"D should increase\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_6ddd7f5b4f156ad60913b3898ca8aedad82b4753c6391199bcbb48583e596887__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"mint < min\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_9b887cfddc434e3cf41b666954131afc611b880c7637aac66ca1f629f8984c5b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 9)\n        mstore(add(headStart, 64), \"not found\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_3569a113599fc30dddee53f7bfa525ade1d72800ee559c1f223157ef9a1e0da6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"dy < minAmount\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint8_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), value3)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(not(0), base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(not(0), base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function abi_encode_tuple_t_stringliteral_d9b2e328f4209b3735eca19488e3afd57ba32c456d5e1a010a233e595f7b0b47__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"mismatch multipliers\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_eb80683d13e69e40aa7f57ce3558136d2c8c4c88f682021213f7030fc3d23afd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"D does not converge\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_b19f02778fe2ebdf3ae6da8b526e4f3fcfda929b6d006b58be5eb0b43957bde5__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"exceed total supply\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"compare token to itself\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_cfeed71d91768718346c2ea3c2ab2e22b6f1283f91f1be8620ac590423d0fe0f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"exceeds available\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_487af3faa279cd1df07c0d1897feb1b8a94d7a439a5fcca3a8f816912eee96c2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"Token not found\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 30)\n        mstore(add(headStart, 64), \"Approximation did not converge\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_stringliteral_9696d201946a7b6efbea55f1e57c9bbecf77447f35c86ca3cfdc292daa9e8b3d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"token not found\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory_with_cleanup(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061012c5760003560e01c80638d365457116100ad578063b6618dff11610071578063b6618dff146102be578063bb0577eb146102d1578063d251dc35146102e4578063f495e807146102f7578063ff126de91461030a57600080fd5b80638d3654571461024d5780638f11d27f14610260578063a02288f414610273578063ad94911b14610286578063b3a4eab4146102ab57600080fd5b806374c6b89b116100f457806374c6b89b146101bd5780637652f59d146101d057806376ca2e52146101e357806380b297e8146101f65780638b480b121461020957600080fd5b80631301caa214610131578063241ca57a1461015757806329d99b101461016a5780632d91a5151461017d5780634bbcba8e1461019d575b600080fd5b61014461013f3660046145ab565b61031d565b6040519081526020015b60405180910390f35b610144610165366004614619565b61033e565b61014461017836600461468d565b610411565b61019061018b3660046146c2565b610432565b60405161014e919061474f565b6101b06101ab36600461485e565b6106a9565b60405161014e91906148b9565b6101446101cb3660046148e3565b61073c565b6101446101de3660046146c2565b6107f4565b6101446101f136600461494c565b61080b565b6101446102043660046148e3565b61082e565b6102356102173660046146c2565b6000908152601860205260409020600701546001600160a01b031690565b6040516001600160a01b03909116815260200161014e565b61014461025b366004614619565b6108d5565b61014461026e3660046149ab565b610998565b6101b06102813660046145ab565b6109b2565b6102996102943660046149ef565b6109cd565b60405160ff909116815260200161014e565b6102356102b9366004614a1b565b610a25565b6101446102cc366004614a3e565b610a9a565b6101446102df366004614a1b565b610b2d565b6101446102f23660046146c2565b610b9a565b6101446103053660046146c2565b610bb1565b610144610318366004614a85565b610bc8565b60008281526018602052604081206103359083610c5c565b90505b92915050565b6016546000906001190161036557604051637ce54e2d60e11b815260040160405180910390fd5b6002601655814281101561038c576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff16156103b757604051633ee5b89360e01b815260040160405180910390fd5b61040186868080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508c815260186020526040902093925088915050610ca0565b6001601655979650505050505050565b600083815260186020526040812061042a9084846114d0565b949350505050565b6104b2604051806101c001604052806000801916815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160608152602001606081526020016060815260200160608152602001600015158152602001600081525090565b60008281526018602090815260409182902082516101c081018452815481526001820154818401526002820154818501526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260078201546001600160a01b031660e082015260088201805485518186028101860190965280865291949293610100860193929083018282801561057857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161055a575b50505050508152602001600982018054806020026020016040519081016040528092919081815260200182805480156105d057602002820191906000526020600020905b8154815260200190600101908083116105bc575b50505050508152602001600a820180548060200260200160405190810160405280929190818152602001828054801561062857602002820191906000526020600020905b815481526020019060010190808311610614575b50505050508152602001600b820180548060200260200160405190810160405280929190818152602001828054801561068057602002820191906000526020600020905b81548152602001906001019080831161066c575b5050509183525050600c82015460ff1615156020820152600d9091015460409091015292915050565b601654606090600119016106d057604051637ce54e2d60e11b815260040160405180910390fd5b600260165581428110156106f7576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff161561072257604051633ee5b89360e01b815260040160405180910390fd5b600087815260186020526040902061040190878787611561565b6016546000906001190161076357604051637ce54e2d60e11b815260040160405180910390fd5b6002601655814281101561078a576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff16156107b557604051633ee5b89360e01b815260040160405180910390fd5b6107e36107c289886109cd565b6107cc8a886109cd565b60008b815260186020526040902091908a886118fe565b600160165598975050505050505050565b600081815260186020526040812061033890611cfa565b600084815260186020526040812061082590858585611d05565b95945050505050565b6016546000906001190161085557604051637ce54e2d60e11b815260040160405180910390fd5b6002601655814281101561087c576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff16156108a757604051633ee5b89360e01b815260040160405180910390fd5b6107e36108b489886109cd565b6108be8a886109cd565b60008b815260186020526040902091908a88611fd5565b601654600090600119016108fc57604051637ce54e2d60e11b815260040160405180910390fd5b60026016558142811015610923576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff161561094e57604051633ee5b89360e01b815260040160405180910390fd5b61040186868080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508c815260186020526040902093925088915050612362565b600084815260186020526040812061082590858585612b55565b60008281526018602052604090206060906103359083612bb6565b60008281526019602090815260408083206001600160a01b038516808552925282205460ff16906109fe8583610a25565b6001600160a01b0316146103355760405163336752bb60e01b815260040160405180910390fd5b60008281526018602052604081206008015460ff831610610a585760405162e6731760e41b815260040160405180910390fd5b6000838152601860205260409020600801805460ff8416908110610a7e57610a7e614add565b6000918252602090912001546001600160a01b03169392505050565b60165460009060011901610ac157604051637ce54e2d60e11b815260040160405180910390fd5b60026016558142811015610ae8576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff1615610b1357604051633ee5b89360e01b815260040160405180910390fd5b600087815260186020526040902061040190878787612c8d565b6000828152601860205260408120600a015460ff831610610b6157604051634105699160e01b815260040160405180910390fd5b6000838152601860205260409020600a01805460ff8416908110610b8757610b87614add565b9060005260206000200154905092915050565b600081815260186020526040812061033890612fe7565b600081815260186020526040812061033890612ffe565b60165460009060011901610bef57604051637ce54e2d60e11b815260040160405180910390fd5b60026016558142811015610c16576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff1615610c4157604051633ee5b89360e01b815260040160405180910390fd5b60008881526018602052604090206107e39088888888611fd5565b60088201546000908210610c8b5760405162461bcd60e51b8152600401610c8290614af3565b60405180910390fd5b82600b018281548110610b8757610b87614add565b600080604051806101000160405280600081526020016000815260200160008152602001610ccd87611cfa565b81526020018660070160009054906101000a90046001600160a01b03166001600160a01b031681526020016000815260200186600a01805480602002602001604051908101604052809291908181526020018280548015610d4d57602002820191906000526020600020905b815481526020019060010190808311610d39575b5050505050815260200186600901805480602002602001604051908101604052809291908181526020018280548015610da557602002820191906000526020600020905b815481526020019060010190808311610d91575b5050505050815250905080608001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e159190614b1f565b60a082015260088501548451808214610e675760405162461bcd60e51b81526020600482015260146024820152736d69736d6174636820706f6f6c20746f6b656e7360601b6044820152606401610c82565b60808301516040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed59190614b1f565b8511158015610ee357508415155b610eff5760405162461bcd60e51b8152600401610c8290614b38565b6000610f0f8860050154846130d1565b905060008367ffffffffffffffff811115610f2c57610f2c614b5f565b604051908082528060200260200182016040528015610f55578160200160208202803683370190505b50905060008467ffffffffffffffff811115610f7357610f73614b5f565b604051908082528060200260200182016040528015610f9c578160200160208202803683370190505b509050610fbe610fb48760c001518860e001516130fd565b8760600151613208565b865260005b858110156110af57898181518110610fdd57610fdd614add565b60200260200101518760c001518281518110610ffb57610ffb614add565b602002602001015110156110515760405162461bcd60e51b815260206004820152601c60248201527f7769746864726177206d6f7265207468616e20617661696c61626c65000000006044820152606401610c82565b89818151811061106357611063614add565b60200260200101518760c00151828151811061108157611081614add565b60200260200101510382828151811061109c5761109c614add565b6020908102919091010152600101610fc3565b506110c1610fb4828860e001516130fd565b602087015260005b858110156112b257600087600001518860c0015183815181106110ee576110ee614add565b602002602001015189602001516111059190614b8b565b61110f9190614ba2565b9050600061113f84848151811061112857611128614add565b6020026020010151836133b590919063ffffffff16565b90506402540be4006111518288614b8b565b61115b9190614ba2565b85848151811061116d5761116d614add565b602002602001018181525050505060006402540be4008c6006015485848151811061119a5761119a614add565b60200260200101516111ac9190614b8b565b6111b69190614ba2565b9050808383815181106111cb576111cb614add565b60200260200101516111dd9190614bc4565b8c600a0183815481106111f2576111f2614add565b9060005260206000200181905550808c600b01838154811061121657611216614add565b906000526020600020015461122b9190614bd7565b8c600b01838154811061124057611240614add565b906000526020600020018190555083828151811061126057611260614add565b602002602001015183838151811061127a5761127a614add565b602002602001015161128c9190614bc4565b83838151811061129e5761129e614add565b6020908102919091010152506001016110c9565b506112c4610fb4828860e001516130fd565b60408701819052865160a08801516000935090916112e29083614bc4565b6112ec9190614b8b565b6112f69190614ba2565b9050806000036113375760405162461bcd60e51b815260206004820152600c60248201526b085e995c9bc8185b5bdd5b9d60a21b6044820152606401610c82565b611342816001614bd7565b9050878111156113945760405162461bcd60e51b815260206004820152601b60248201527f746f6b656e416d6f756e74203e206d61784275726e416d6f756e7400000000006044820152606401610c82565b608086015160405163079cc67960e41b8152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b1580156113e257600080fd5b505af11580156113f6573d6000803e3d6000fd5b5050505060005b858110156114635761145b8b600801828154811061141d5761141d614add565b9060005260206000200160009054906101000a90046001600160a01b0316338c848151811061144e5761144e614add565b60200260200101516133da565b6001016113fd565b50336001600160a01b03168a600001547fa404896827f41a3845de89f154bf1f4fe5cbdf79da7c7805263a3d0b7de9e6728b858a60200151868c60a001516114ab9190614bc4565b6040516114bb9493929190614bea565b60405180910390a39998505050505050505050565b6000806115578585858860070160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561152e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115529190614b1f565b61341e565b5095945050505050565b60078401546040516370a0823160e01b81523360048201526060916001600160a01b03169081906370a0823190602401602060405180830381865afa1580156115ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d29190614b1f565b8511156115f15760405162461bcd60e51b8152600401610c8290614b38565b600886015483811461163b5760405162461bcd60e51b81526020600482015260136024820152726d69736d6174636820706f6f6c546f6b656e7360681b6044820152606401610c82565b600087600a0180548060200260200160405190810160405280929190818152602001828054801561168b57602002820191906000526020600020905b815481526020019060010190808311611677575b505050505090506000836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f69190614b1f565b90506000611705838a84613495565b805190915060005b818110156118485789898281811061172757611727614add565b9050602002013583828151811061174057611740614add565b602002602001015110156117965760405162461bcd60e51b815260206004820152601a60248201527f616d6f756e74735b695d203c206d696e416d6f756e74735b695d0000000000006044820152606401610c82565b8281815181106117a8576117a8614add565b60200260200101518582815181106117c2576117c2614add565b60200260200101516117d49190614bc4565b8c600a0182815481106117e9576117e9614add565b90600052602060002001819055506118408c600801828154811061180f5761180f614add565b9060005260206000200160009054906101000a90046001600160a01b03163385848151811061144e5761144e614add565b60010161170d565b5060405163079cc67960e41b8152336004820152602481018b90526001600160a01b038716906379cc679090604401600060405180830381600087803b15801561189157600080fd5b505af11580156118a5573d6000803e3d6000fd5b50508c5433925090507f58f96d387ac27c23fb6350424cb6b032322b14ffd82029e96aeed2c525e790e8846118da8e88614bc4565b6040516118e8929190614c23565b60405180910390a3509998505050505050505050565b600c85015460009060ff16156119265760405162461bcd60e51b8152600401610c8290614c45565b85600a018460ff168154811061193e5761193e614add565b90600052602060002001548311156119885760405162461bcd60e51b815260206004820152600d60248201526c3e706f6f6c2062616c616e636560981b6044820152606401610c82565b600080600088600a018054806020026020016040519081016040528092919081815260200182805480156119db57602002820191906000526020600020905b8154815260200190600101908083116119c7575b505050505090506119ef8989898985613586565b909350915084831115611a315760405162461bcd60e51b815260206004820152600a6024820152690c8f0407c40dac2f088f60b31b6044820152606401610c82565b6000896009018960ff1681548110611a4b57611a4b614add565b90600052602060002001546402540be4008b6006015485611a6c9190614b8b565b611a769190614ba2565b611a809190614ba2565b90508084838b60ff1681518110611a9957611a99614add565b6020026020010151611aab9190614bd7565b611ab59190614bc4565b8a600a018a60ff1681548110611acd57611acd614add565b906000526020600020018190555086828960ff1681518110611af157611af1614add565b6020026020010151611b039190614bc4565b8a600a018960ff1681548110611b1b57611b1b614add565b6000918252602090912001558015611b8057808a600b018a60ff1681548110611b4657611b46614add565b9060005260206000200154611b5b9190614bd7565b8a600b018a60ff1681548110611b7357611b73614add565b6000918252602090912001555b60008a6008018a60ff1681548110611b9a57611b9a614add565b6000918252602090912001546040516370a0823160e01b81523360048201526001600160a01b03909116915081906370a0823190602401602060405180830381865afa158015611bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c129190614b1f565b851115611c555760405162461bcd60e51b815260206004820152601160248201527036b7b932903a3430b7103cb7ba9037bbb760791b6044820152606401610c82565b611c5f81866137a6565b50611c978a6008018960ff1681548110611c7b57611c7b614add565b6000918252602090912001546001600160a01b031633896133da565b895460408051868152602081018a905260ff808d1692820192909252908a1660608201523391907f28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df320906080015b60405180910390a3509198975050505050505050565b6000610338826138f7565b60008085600a01805480602002602001604051908101604052809291908181526020018280548015611d5657602002820191906000526020600020905b815481526020019060010190808311611d42575b5050835193945050508582149050611db05760405162461bcd60e51b815260206004820152601960248201527f696e76616c6964206c656e677468206f6620616d6f756e7473000000000000006044820152606401610c82565b6000611dbb88611cfa565b9050600088600901805480602002602001604051908101604052809291908181526020018280548015611e0d57602002820191906000526020600020905b815481526020019060010190808311611df9575b505050505090506000611e29611e2386846130fd565b84613208565b905060005b84811015611f00578715611e9c57898982818110611e4e57611e4e614add565b90506020020135868281518110611e6757611e67614add565b6020026020010151611e799190614bd7565b868281518110611e8b57611e8b614add565b602002602001018181525050611ef8565b898982818110611eae57611eae614add565b90506020020135868281518110611ec757611ec7614add565b6020026020010151611ed99190614bc4565b868281518110611eeb57611eeb614add565b6020026020010181815250505b600101611e2e565b506000611f16611f1087856130fd565b85613208565b905060008b60070160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f939190614b1f565b90508815611fc9578281611fa78285614bc4565b611fb19190614b8b565b611fbb9190614ba2565b97505050505050505061042a565b8281611fa78483614bc4565b600c85015460009060ff1615611ffd5760405162461bcd60e51b8152600401610c8290614c45565b6000866008018660ff168154811061201757612017614add565b6000918252602090912001546040516370a0823160e01b81523360048201526001600160a01b03909116915081906370a0823190602401602060405180830381865afa15801561206b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208f9190614b1f565b8411156120d75760405162461bcd60e51b815260206004820152601660248201527539bbb0b81036b7b932903a3430b7103cb7ba9037bbb760511b6044820152606401610c82565b6120e181856137a6565b50600080600088600a0180548060200260200160405190810160405280929190818152602001828054801561213557602002820191906000526020600020905b815481526020019060010190808311612121575b505050505090506121498989898985613940565b90935091508483101561218b5760405162461bcd60e51b815260206004820152600a6024820152696479203c206d696e447960b01b6044820152606401610c82565b6000896009018860ff16815481106121a5576121a5614add565b90600052602060002001546402540be4008b60060154856121c69190614b8b565b6121d09190614ba2565b6121da9190614ba2565b905086828a60ff16815181106121f2576121f2614add565b60200260200101516122049190614bd7565b8a600a018a60ff168154811061221c5761221c614add565b90600052602060002001819055508084838a60ff168151811061224157612241614add565b60200260200101516122539190614bc4565b61225d9190614bc4565b8a600a018960ff168154811061227557612275614add565b60009182526020909120015580156122da57808a600b018960ff16815481106122a0576122a0614add565b90600052602060002001546122b59190614bd7565b8a600b018960ff16815481106122cd576122cd614add565b6000918252602090912001555b6123118a6008018960ff16815481106122f5576122f5614add565b6000918252602090912001546001600160a01b031633866133da565b8954604080518981526020810187905260ff808d1692820192909252908a1660608201523391907f28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df32090608001611ce4565b600c83015460009060ff161561238a5760405162461bcd60e51b8152600401610c8290614c45565b6008840154835181146123d85760405162461bcd60e51b81526020600482015260166024820152756d69736d6174636820706f6f6c656420746f6b656e7360501b6044820152606401610c82565b600060405180610100016040528060008152602001600081526020016000815260200161240488611cfa565b81526020018760070160009054906101000a90046001600160a01b03166001600160a01b031681526020016000815260200187600a0180548060200260200160405190810160405280929190818152602001828054801561248457602002820191906000526020600020905b815481526020019060010190808311612470575b50505050508152602001876009018054806020026020016040519081016040528092919081815260200182805480156124dc57602002820191906000526020600020905b8154815260200190600101908083116124c8575b5050505050815250905080608001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254c9190614b1f565b60a082018190521561257a5761257761256d8260c001518360e001516130fd565b8260600151613208565b81525b60008267ffffffffffffffff81111561259557612595614b5f565b6040519080825280602002602001820160405280156125be578160200160208202803683370190505b50905060005b8381101561271d5760a08301511515806125f857508681815181106125eb576125eb614add565b6020026020010151600014155b6126395760405162461bcd60e51b815260206004820152601260248201527121737570706c7920616c6c20746f6b656e7360701b6044820152606401610c82565b86818151811061264b5761264b614add565b60200260200101516000146126b657600088600801828154811061267157612671614add565b9060005260206000200160009054906101000a90046001600160a01b031690506126b4818984815181106126a7576126a7614add565b60200260200101516137a6565b505b8681815181106126c8576126c8614add565b60200260200101518360c0015182815181106126e6576126e6614add565b60200260200101516126f89190614bd7565b82828151811061270a5761270a614add565b60209081029190910101526001016125c4565b5061273961272f828460e001516130fd565b8360600151613208565b602083018190528251106127835760405162461bcd60e51b8152602060048201526011602482015270442073686f756c6420696e63726561736560781b6044820152606401610c82565b6020820151604083015260008367ffffffffffffffff8111156127a8576127a8614b5f565b6040519080825280602002602001820160405280156127d1578160200160208202803683370190505b5090508260a001516000146129e95760006127f08960050154866130d1565b905060005b858110156129c257600085600001518660c00151838151811061281a5761281a614add565b602002602001015187602001516128319190614b8b565b61283b9190614ba2565b90506402540be40061285886848151811061112857611128614add565b6128629085614b8b565b61286c9190614ba2565b84838151811061287e5761287e614add565b60200260200101818152505060006402540be4008c600601548685815181106128a9576128a9614add565b60200260200101516128bb9190614b8b565b6128c59190614ba2565b9050808684815181106128da576128da614add565b60200260200101516128ec9190614bc4565b8c600a01848154811061290157612901614add565b9060005260206000200181905550808c600b01848154811061292557612925614add565b906000526020600020015461293a9190614bd7565b8c600b01848154811061294f5761294f614add565b906000526020600020018190555084838151811061296f5761296f614add565b602002602001015186848151811061298957612989614add565b602002602001015161299b9190614bc4565b8684815181106129ad576129ad614add565b602090810291909101015250506001016127f5565b506129de6129d4848660e001516130fd565b8560600151613208565b604085015250612a00565b81516129fe90600a8a0190602085019061454b565b505b60008360a00151600003612a1957506020830151612a47565b835160a08501516040860151612a30908390614bc4565b612a3a9190614b8b565b612a449190614ba2565b90505b86811015612a845760405162461bcd60e51b815260206004820152600a60248201526936b4b73a101e1036b4b760b11b6044820152606401610c82565b60808401516040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b158015612ad257600080fd5b505af1158015612ae6573d6000803e3d6000fd5b50505050336001600160a01b031689600001547fbcb1ab680ee25ef87d34ec297263a10e0a823cd81326b0aa6bc55b86cb2a41888a858860200151868a60a00151612b319190614bd7565b604051612b419493929190614bea565b60405180910390a398975050505050505050565b60006115578585858589600a01805480602002602001604051908101604052809291908181526020018280548015612bac57602002820191906000526020600020905b815481526020019060010190808311612b98575b5050505050613940565b606061033583600a01805480602002602001604051908101604052809291908181526020018280548015612c0957602002820191906000526020600020905b815481526020019060010190808311612bf5575b5050505050838560070160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c889190614b1f565b613495565b60078401546040516370a0823160e01b81523360048201526000916001600160a01b03169081906370a0823190602401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe9190614b1f565b851115612d1d5760405162461bcd60e51b8152600401610c8290614b38565b600886015460ff85168111612d605760405162461bcd60e51b81526020600482015260096024820152681b9bdd08199bdd5b9960ba1b6044820152606401610c82565b6000826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc49190614b1f565b9050600080612dd58a8a8a8661341e565b9150915086821015612e1a5760405162461bcd60e51b815260206004820152600e60248201526d191e480f081b5a5b905b5bdd5b9d60921b6044820152606401610c82565b60006402540be4008b6006015483612e329190614b8b565b612e3c9190614ba2565b9050612e488184614bd7565b8b600a018a60ff1681548110612e6057612e60614add565b9060005260206000200154612e759190614bc4565b8b600a018a60ff1681548110612e8d57612e8d614add565b6000918252602090912001558015612ef257808b600b018a60ff1681548110612eb857612eb8614add565b9060005260206000200154612ecd9190614bd7565b8b600b018a60ff1681548110612ee557612ee5614add565b6000918252602090912001555b60405163079cc67960e41b8152336004820152602481018b90526001600160a01b038716906379cc679090604401600060405180830381600087803b158015612f3a57600080fd5b505af1158015612f4e573d6000803e3d6000fd5b50505050612f898b6008018a60ff1681548110612f6d57612f6d614add565b6000918252602090912001546001600160a01b031633856133da565b8a54604080518c81526020810187905260ff8c16818301526060810186905290513392917f1a66f6ea1c14e22a62ab434f3414908bb5f49133d673c872c8957aa961e4c215919081900360800190a350909998505050505050505050565b60006064612ff4836138f7565b6103389190614ba2565b60008061301b61300d84613ae1565b61301685611cfa565b613208565b905060008360070160009054906101000a90046001600160a01b031690506000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309d9190614b1f565b905080156130c657806130b26012600a614d50565b6130bc9085614b8b565b6108259190614ba2565b506000949350505050565b60006130de600183614bc4565b6130e9906004614b8b565b6130f38385614b8b565b6103359190614ba2565b8151815160609190811461314a5760405162461bcd60e51b81526020600482015260146024820152736d69736d61746368206d756c7469706c6965727360601b6044820152606401610c82565b60008167ffffffffffffffff81111561316557613165614b5f565b60405190808252806020026020018201604052801561318e578160200160208202803683370190505b50905060005b828110156131ff578481815181106131ae576131ae614add565b60200260200101518682815181106131c8576131c8614add565b60200260200101516131da9190614b8b565b8282815181106131ec576131ec614add565b6020908102919091010152600101613194565b50949350505050565b815160009081805b828110156132475785818151811061322a5761322a614add565b60200260200101518261323d9190614bd7565b9150600101613210565b508060000361325b57600092505050610338565b600081816132698588614b8b565b905060005b610100811015613376578260005b878110156132c757878b828151811061329757613297614add565b60200260200101516132a99190614b8b565b6132b38684614b8b565b6132bd9190614ba2565b915060010161327c565b50839450808760016132d99190614bd7565b6132e39190614b8b565b6064856132f08287614bc4565b6132fa9190614b8b565b6133049190614ba2565b61330e9190614bd7565b846133198984614b8b565b60646133258a88614b8b565b61332f9190614ba2565b6133399190614bd7565b6133439190614b8b565b61334d9190614ba2565b93506133598486613b91565b1561336d5783975050505050505050610338565b5060010161326e565b5060405162461bcd60e51b81526020600482015260136024820152724420646f6573206e6f7420636f6e766572676560681b6044820152606401610c82565b6000818311156133d0576133c98284614bc4565b9050610338565b6103358383614bc4565b806000036133e757505050565b6001600160a01b03831661340e57604051633a48ca7b60e11b815260040160405180910390fd5b613419838383613ba7565b505050565b600080600080600061343289888a89613c0a565b8093508194508295505050506000838a6009018960ff168154811061345957613459614add565b906000526020600020015484846134709190614bc4565b61347a9190614ba2565b6134849190614bc4565b939a93995092975050505050505050565b6060818311156134dd5760405162461bcd60e51b815260206004820152601360248201527265786365656420746f74616c20737570706c7960681b6044820152606401610c82565b835160008167ffffffffffffffff8111156134fa576134fa614b5f565b604051908082528060200260200182016040528015613523578160200160208202803683370190505b50905060005b8281101561155757848688838151811061354557613545614add565b60200260200101516135579190614b8b565b6135619190614ba2565b82828151811061357357613573614add565b6020908102919091010152600101613529565b6000808460ff168660ff16036135d85760405162461bcd60e51b815260206004820152601760248201527631b7b6b830b932903a37b5b2b7103a379034ba39b2b63360491b6044820152606401610c82565b60008760090180548060200260200160405190810160405280929190818152602001828054801561362857602002820191906000526020600020905b815481526020019060010190808311613614575b50505050509050600061363b85836130fd565b905080518860ff16108015613653575080518760ff16105b61366f5760405162461bcd60e51b8152600401610c8290614af3565b600061367a8a611cfa565b905060006136888383613208565b9050838960ff168151811061369f5761369f614add565b6020026020010151886136b29190614b8b565b838a60ff16815181106136c7576136c7614add565b60200260200101516136d99190614bc4565b838a60ff16815181106136ee576136ee614add565b6020026020010181815250506000613708838c8685613f17565b9050838b60ff168151811061371f5761371f614add565b60200260200101518160016137349190614bd7565b61373e9190614bc4565b96506402540be4008c60050154886137569190614b8b565b6137609190614ba2565b9550848b60ff168151811061377757613777614add565b6020026020010151868861378b9190614bd7565b6137959190614ba2565b965050505050509550959350505050565b806000036137b2575050565b6001600160a01b0382166137d957604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015613822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138469190614b1f565b905061385d6001600160a01b038316333086614106565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa1580156138a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c99190614b1f565b6138d39190614bc4565b146138f157604051630e40773560e21b815260040160405180910390fd5b50505050565b60048101546002820154600183015490919080831480159061391857508142105b15613939576000846003015490508083038142038502428503840201049350505b5050919050565b60008060008760090180548060200260200160405190810160405280929190818152602001828054801561399357602002820191906000526020600020905b81548152602001906001019080831161397f575b5050505050905060006139a685836130fd565b905080518860ff161080156139be575080518760ff16105b6139da5760405162461bcd60e51b8152600401610c8290614af3565b6000818960ff16815181106139f1576139f1614add565b6020026020010151838a60ff1681518110613a0e57613a0e614add565b602002602001015188613a219190614b8b565b613a2b9190614bd7565b90506000613a44613a3b8c611cfa565b8b8b858761413e565b9050600181848b60ff1681518110613a5e57613a5e614add565b6020026020010151613a709190614bc4565b613a7a9190614bc4565b95506402540be4008b6005015487613a929190614b8b565b613a9c9190614ba2565b9450838960ff1681518110613ab357613ab3614add565b60200260200101518587613ac79190614bc4565b613ad19190614ba2565b9550505050509550959350505050565b606061033882600a01805480602002602001604051908101604052809291908181526020018280548015613b3457602002820191906000526020600020905b815481526020019060010190808311613b20575b505050505083600901805480602002602001604051908101604052809291908181526020018280548015613b8757602002820191906000526020600020905b815481526020019060010190808311613b73575b50505050506130fd565b60006002613b9f84846133b5565b109392505050565b6040516001600160a01b03831660248201526044810182905261341990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614356565b600080600080613c1988613ae1565b905080518760ff1610613c3e5760405162461bcd60e51b8152600401610c8290614af3565b60006040518060a001604052806000815260200160008152602001600081526020016000815260200160008152509050613c7789611cfa565b60808201819052613c89908390613208565b8082528690613c989089614b8b565b613ca29190614ba2565b8151613cae9190614bc4565b60208201528151829060ff8a16908110613cca57613cca614add565b6020026020010151871115613d155760405162461bcd60e51b81526020600482015260116024820152706578636565647320617661696c61626c6560781b6044820152606401610c82565b613d29816080015189848460200151613f17565b6040820152815160009067ffffffffffffffff811115613d4b57613d4b614b5f565b604051908082528060200260200182016040528015613d74578160200160208202803683370190505b509050613d868a6005015484516130d1565b6060830152825160005b81811015613e63576000858281518110613dac57613dac614add565b602002602001015190506402540be40085606001518d60ff168414613df55786516020880151613ddc9085614b8b565b613de69190614ba2565b613df09084614bc4565b613e1f565b604087015187516020890151613e0b9086614b8b565b613e159190614ba2565b613e1f9190614bc4565b613e299190614b8b565b613e339190614ba2565b613e3d9082614bc4565b848381518110613e4f57613e4f614add565b602090810291909101015250600101613d90565b506000613e7a84608001518c858760200151613f17565b838c60ff1681518110613e8f57613e8f614add565b6020026020010151613ea19190614bc4565b90508b6009018b60ff1681548110613ebb57613ebb614add565b9060005260206000200154600182613ed39190614bc4565b613edd9190614ba2565b9050808460400151868d60ff1681518110613efa57613efa614add565b602002602001015197509750975050505050509450945094915050565b815160009060ff85168111613f605760405162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08199bdd5b99608a1b6044820152606401610c82565b82600080613f6e848a614b8b565b905060005b84811015613ff0578860ff168114613fe857878181518110613f9757613f97614add565b602002602001015183613faa9190614bd7565b925084888281518110613fbf57613fbf614add565b6020026020010151613fd19190614b8b565b613fdb8886614b8b565b613fe59190614ba2565b93505b600101613f73565b50613ffb8482614b8b565b60646140078886614b8b565b6140119190614b8b565b61401b9190614ba2565b925060008161402b606489614b8b565b6140359190614ba2565b61403f9084614bd7565b9050600087815b6101008110156140bd5781925089848360026140629190614b8b565b61406c9190614bd7565b6140769190614bc4565b876140818480614b8b565b61408b9190614bd7565b6140959190614ba2565b91506140a18284613b91565b156140b55750965061042a95505050505050565b600101614046565b5060405162461bcd60e51b815260206004820152601e60248201527f417070726f78696d6174696f6e20646964206e6f7420636f6e766572676500006044820152606401610c82565b6040516001600160a01b03808516602483015283166044820152606481018290526138f19085906323b872dd60e01b90608401613bd3565b805160009060ff808616908716036141925760405162461bcd60e51b815260206004820152601760248201527631b7b6b830b932903a37b5b2b7103a379034ba39b2b63360491b6044820152606401610c82565b808660ff161080156141a65750808560ff16105b6141e45760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881b9bdd08199bdd5b99608a1b6044820152606401610c82565b60006141f08489613208565b9050806000806142008b86614b8b565b90506000805b86811015614287578b60ff16810361422057899150614253565b8a60ff16811461424b5788818151811061423c5761423c614add565b60200260200101519150614253565b600101614206565b61425d8285614bd7565b93506142698783614b8b565b6142738787614b8b565b61427d9190614ba2565b9450600101614206565b506142928683614b8b565b606461429e8787614b8b565b6142a89190614b8b565b6142b29190614ba2565b93506000826142c2606488614b8b565b6142cc9190614ba2565b6142d69085614bd7565b9050600086815b6101008110156140bd5781925088848360026142f99190614b8b565b6143039190614bd7565b61430d9190614bc4565b886143188480614b8b565b6143229190614bd7565b61432c9190614ba2565b91506143388284613b91565b1561434e57509850610825975050505050505050565b6001016142dd565b60006143ab826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166144289092919063ffffffff16565b80519091501561341957808060200190518101906143c99190614d5c565b6134195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c82565b606061042a848460008585600080866001600160a01b0316858760405161444f9190614d9d565b60006040518083038185875af1925050503d806000811461448c576040519150601f19603f3d011682016040523d82523d6000602084013e614491565b606091505b50915091506144a2878383876144ad565b979650505050505050565b6060831561451c578251600003614515576001600160a01b0385163b6145155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c82565b508161042a565b61042a83838151156145315781518083602001fd5b8060405162461bcd60e51b8152600401610c829190614db9565b828054828255906000526020600020908101928215614586579160200282015b8281111561458657825182559160200191906001019061456b565b50614592929150614596565b5090565b5b808211156145925760008155600101614597565b600080604083850312156145be57600080fd5b50508035926020909101359150565b60008083601f8401126145df57600080fd5b50813567ffffffffffffffff8111156145f757600080fd5b6020830191508360208260051b850101111561461257600080fd5b9250929050565b60008060008060006080868803121561463157600080fd5b85359450602086013567ffffffffffffffff81111561464f57600080fd5b61465b888289016145cd565b9699909850959660408101359660609091013595509350505050565b803560ff8116811461468857600080fd5b919050565b6000806000606084860312156146a257600080fd5b83359250602084013591506146b960408501614677565b90509250925092565b6000602082840312156146d457600080fd5b5035919050565b600081518084526020808501945080840160005b838110156147145781516001600160a01b0316875295820195908201906001016146ef565b509495945050505050565b600081518084526020808501945080840160005b8381101561471457815187529582019590820190600101614733565b6020815281516020820152602082015160408201526040820151606082015260608201516080820152608082015160a082015260a082015160c082015260c082015160e0820152600060e08301516101006147b4818501836001600160a01b03169052565b808501519150506101c061012081818601526147d46101e08601846146db565b9250808601519050601f196101408187860301818801526147f5858461471f565b945080880151925050610160818786030181880152614814858461471f565b945080880151925050610180818786030181880152614833858461471f565b945080880151925050506101a061484d8187018315159052565b959095015193019290925250919050565b60008060008060006080868803121561487657600080fd5b8535945060208601359350604086013567ffffffffffffffff81111561489b57600080fd5b6148a7888289016145cd565b96999598509660600135949350505050565b602081526000610335602083018461471f565b80356001600160a01b038116811461468857600080fd5b60008060008060008060c087890312156148fc57600080fd5b8635955060208701359450614913604088016148cc565b9350614921606088016148cc565b92506080870135915060a087013590509295509295509295565b801515811461494957600080fd5b50565b6000806000806060858703121561496257600080fd5b84359350602085013567ffffffffffffffff81111561498057600080fd5b61498c878288016145cd565b90945092505060408501356149a08161493b565b939692955090935050565b600080600080608085870312156149c157600080fd5b843593506149d160208601614677565b92506149df60408601614677565b9396929550929360600135925050565b60008060408385031215614a0257600080fd5b82359150614a12602084016148cc565b90509250929050565b60008060408385031215614a2e57600080fd5b82359150614a1260208401614677565b600080600080600060a08688031215614a5657600080fd5b8535945060208601359350614a6d60408701614677565b94979396509394606081013594506080013592915050565b60008060008060008060c08789031215614a9e57600080fd5b86359550614aae60208801614677565b9450614abc60408801614677565b9350606087013592506080870135915060a087013590509295509295509295565b634e487b7160e01b600052603260045260246000fd5b602080825260129082015271696e646578206f7574206f662072616e676560701b604082015260600190565b600060208284031215614b3157600080fd5b5051919050565b6020808252600d908201526c1f2628173130b630b731b2a7b360991b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761033857610338614b75565b600082614bbf57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561033857610338614b75565b8082018082111561033857610338614b75565b608081526000614bfd608083018761471f565b8281036020840152614c0f818761471f565b604084019590955250506060015292915050565b604081526000614c36604083018561471f565b90508260208301529392505050565b6020808252600d908201526c191a5cd8589b1959081c1bdbdb609a1b604082015260600190565b600181815b80851115614ca7578160001904821115614c8d57614c8d614b75565b80851615614c9a57918102915b93841c9390800290614c71565b509250929050565b600082614cbe57506001610338565b81614ccb57506000610338565b8160018114614ce15760028114614ceb57614d07565b6001915050610338565b60ff841115614cfc57614cfc614b75565b50506001821b610338565b5060208310610133831016604e8410600b8410161715614d2a575081810a610338565b614d348383614c6c565b8060001904821115614d4857614d48614b75565b029392505050565b60006103358383614caf565b600060208284031215614d6e57600080fd5b81516103358161493b565b60005b83811015614d94578181015183820152602001614d7c565b50506000910152565b60008251614daf818460208701614d79565b9190910192915050565b6020815260008251806020840152614dd8816040850160208701614d79565b601f01601f1916919091016040019291505056fea264697066735822122025cedc3c210fe9aca4513b0d3b8a60d2365375dbcd2d8dc7a1249f05a95fc7cb64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x12C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8D365457 GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xB6618DFF GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xB6618DFF EQ PUSH2 0x2BE JUMPI DUP1 PUSH4 0xBB0577EB EQ PUSH2 0x2D1 JUMPI DUP1 PUSH4 0xD251DC35 EQ PUSH2 0x2E4 JUMPI DUP1 PUSH4 0xF495E807 EQ PUSH2 0x2F7 JUMPI DUP1 PUSH4 0xFF126DE9 EQ PUSH2 0x30A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8D365457 EQ PUSH2 0x24D JUMPI DUP1 PUSH4 0x8F11D27F EQ PUSH2 0x260 JUMPI DUP1 PUSH4 0xA02288F4 EQ PUSH2 0x273 JUMPI DUP1 PUSH4 0xAD94911B EQ PUSH2 0x286 JUMPI DUP1 PUSH4 0xB3A4EAB4 EQ PUSH2 0x2AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x74C6B89B GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0x74C6B89B EQ PUSH2 0x1BD JUMPI DUP1 PUSH4 0x7652F59D EQ PUSH2 0x1D0 JUMPI DUP1 PUSH4 0x76CA2E52 EQ PUSH2 0x1E3 JUMPI DUP1 PUSH4 0x80B297E8 EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0x8B480B12 EQ PUSH2 0x209 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1301CAA2 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0x241CA57A EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0x29D99B10 EQ PUSH2 0x16A JUMPI DUP1 PUSH4 0x2D91A515 EQ PUSH2 0x17D JUMPI DUP1 PUSH4 0x4BBCBA8E EQ PUSH2 0x19D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x144 PUSH2 0x13F CALLDATASIZE PUSH1 0x4 PUSH2 0x45AB JUMP JUMPDEST PUSH2 0x31D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x144 PUSH2 0x165 CALLDATASIZE PUSH1 0x4 PUSH2 0x4619 JUMP JUMPDEST PUSH2 0x33E JUMP JUMPDEST PUSH2 0x144 PUSH2 0x178 CALLDATASIZE PUSH1 0x4 PUSH2 0x468D JUMP JUMPDEST PUSH2 0x411 JUMP JUMPDEST PUSH2 0x190 PUSH2 0x18B CALLDATASIZE PUSH1 0x4 PUSH2 0x46C2 JUMP JUMPDEST PUSH2 0x432 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x14E SWAP2 SWAP1 PUSH2 0x474F JUMP JUMPDEST PUSH2 0x1B0 PUSH2 0x1AB CALLDATASIZE PUSH1 0x4 PUSH2 0x485E JUMP JUMPDEST PUSH2 0x6A9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x14E SWAP2 SWAP1 PUSH2 0x48B9 JUMP JUMPDEST PUSH2 0x144 PUSH2 0x1CB CALLDATASIZE PUSH1 0x4 PUSH2 0x48E3 JUMP JUMPDEST PUSH2 0x73C JUMP JUMPDEST PUSH2 0x144 PUSH2 0x1DE CALLDATASIZE PUSH1 0x4 PUSH2 0x46C2 JUMP JUMPDEST PUSH2 0x7F4 JUMP JUMPDEST PUSH2 0x144 PUSH2 0x1F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x494C JUMP JUMPDEST PUSH2 0x80B JUMP JUMPDEST PUSH2 0x144 PUSH2 0x204 CALLDATASIZE PUSH1 0x4 PUSH2 0x48E3 JUMP JUMPDEST PUSH2 0x82E JUMP JUMPDEST PUSH2 0x235 PUSH2 0x217 CALLDATASIZE PUSH1 0x4 PUSH2 0x46C2 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x14E JUMP JUMPDEST PUSH2 0x144 PUSH2 0x25B CALLDATASIZE PUSH1 0x4 PUSH2 0x4619 JUMP JUMPDEST PUSH2 0x8D5 JUMP JUMPDEST PUSH2 0x144 PUSH2 0x26E CALLDATASIZE PUSH1 0x4 PUSH2 0x49AB JUMP JUMPDEST PUSH2 0x998 JUMP JUMPDEST PUSH2 0x1B0 PUSH2 0x281 CALLDATASIZE PUSH1 0x4 PUSH2 0x45AB JUMP JUMPDEST PUSH2 0x9B2 JUMP JUMPDEST PUSH2 0x299 PUSH2 0x294 CALLDATASIZE PUSH1 0x4 PUSH2 0x49EF JUMP JUMPDEST PUSH2 0x9CD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x14E JUMP JUMPDEST PUSH2 0x235 PUSH2 0x2B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4A1B JUMP JUMPDEST PUSH2 0xA25 JUMP JUMPDEST PUSH2 0x144 PUSH2 0x2CC CALLDATASIZE PUSH1 0x4 PUSH2 0x4A3E JUMP JUMPDEST PUSH2 0xA9A JUMP JUMPDEST PUSH2 0x144 PUSH2 0x2DF CALLDATASIZE PUSH1 0x4 PUSH2 0x4A1B JUMP JUMPDEST PUSH2 0xB2D JUMP JUMPDEST PUSH2 0x144 PUSH2 0x2F2 CALLDATASIZE PUSH1 0x4 PUSH2 0x46C2 JUMP JUMPDEST PUSH2 0xB9A JUMP JUMPDEST PUSH2 0x144 PUSH2 0x305 CALLDATASIZE PUSH1 0x4 PUSH2 0x46C2 JUMP JUMPDEST PUSH2 0xBB1 JUMP JUMPDEST PUSH2 0x144 PUSH2 0x318 CALLDATASIZE PUSH1 0x4 PUSH2 0x4A85 JUMP JUMPDEST PUSH2 0xBC8 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x335 SWAP1 DUP4 PUSH2 0xC5C JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0x365 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE DUP2 TIMESTAMP DUP2 LT ISZERO PUSH2 0x38C JUMPI PUSH1 0x40 MLOAD PUSH4 0x26F04E8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x3B7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x401 DUP7 DUP7 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP DUP13 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP4 SWAP3 POP DUP9 SWAP2 POP POP PUSH2 0xCA0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x16 SSTORE SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x42A SWAP1 DUP5 DUP5 PUSH2 0x14D0 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x4B2 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x1C0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP2 DUP6 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x8 DUP3 ADD DUP1 SLOAD DUP6 MLOAD DUP2 DUP7 MUL DUP2 ADD DUP7 ADD SWAP1 SWAP7 MSTORE DUP1 DUP7 MSTORE SWAP2 SWAP5 SWAP3 SWAP4 PUSH2 0x100 DUP7 ADD SWAP4 SWAP3 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x578 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x55A JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x9 DUP3 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x5D0 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x5BC JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0xA DUP3 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x628 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x614 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0xB DUP3 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x680 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x66C JUMPI JUMPDEST POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0xC DUP3 ADD SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xD SWAP1 SWAP2 ADD SLOAD PUSH1 0x40 SWAP1 SWAP2 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x60 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0x6D0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE DUP2 TIMESTAMP DUP2 LT ISZERO PUSH2 0x6F7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x26F04E8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x722 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x401 SWAP1 DUP8 DUP8 DUP8 PUSH2 0x1561 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0x763 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE DUP2 TIMESTAMP DUP2 LT ISZERO PUSH2 0x78A JUMPI PUSH1 0x40 MLOAD PUSH4 0x26F04E8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x7B5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7E3 PUSH2 0x7C2 DUP10 DUP9 PUSH2 0x9CD JUMP JUMPDEST PUSH2 0x7CC DUP11 DUP9 PUSH2 0x9CD JUMP JUMPDEST PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 DUP11 DUP9 PUSH2 0x18FE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x16 SSTORE SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x338 SWAP1 PUSH2 0x1CFA JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x825 SWAP1 DUP6 DUP6 DUP6 PUSH2 0x1D05 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0x855 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE DUP2 TIMESTAMP DUP2 LT ISZERO PUSH2 0x87C JUMPI PUSH1 0x40 MLOAD PUSH4 0x26F04E8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x8A7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7E3 PUSH2 0x8B4 DUP10 DUP9 PUSH2 0x9CD JUMP JUMPDEST PUSH2 0x8BE DUP11 DUP9 PUSH2 0x9CD JUMP JUMPDEST PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 DUP11 DUP9 PUSH2 0x1FD5 JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0x8FC JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE DUP2 TIMESTAMP DUP2 LT ISZERO PUSH2 0x923 JUMPI PUSH1 0x40 MLOAD PUSH4 0x26F04E8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x94E JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x401 DUP7 DUP7 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP DUP13 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP4 SWAP3 POP DUP9 SWAP2 POP POP PUSH2 0x2362 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x825 SWAP1 DUP6 DUP6 DUP6 PUSH2 0x2B55 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 SWAP1 PUSH2 0x335 SWAP1 DUP4 PUSH2 0x2BB6 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP3 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 PUSH2 0x9FE DUP6 DUP4 PUSH2 0xA25 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x335 JUMPI PUSH1 0x40 MLOAD PUSH4 0x336752BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x8 ADD SLOAD PUSH1 0xFF DUP4 AND LT PUSH2 0xA58 JUMPI PUSH1 0x40 MLOAD PUSH3 0xE67317 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x8 ADD DUP1 SLOAD PUSH1 0xFF DUP5 AND SWAP1 DUP2 LT PUSH2 0xA7E JUMPI PUSH2 0xA7E PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0xAC1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE DUP2 TIMESTAMP DUP2 LT ISZERO PUSH2 0xAE8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x26F04E8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xB13 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x401 SWAP1 DUP8 DUP8 DUP8 PUSH2 0x2C8D JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0xA ADD SLOAD PUSH1 0xFF DUP4 AND LT PUSH2 0xB61 JUMPI PUSH1 0x40 MLOAD PUSH4 0x41056991 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xA ADD DUP1 SLOAD PUSH1 0xFF DUP5 AND SWAP1 DUP2 LT PUSH2 0xB87 JUMPI PUSH2 0xB87 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x338 SWAP1 PUSH2 0x2FE7 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x338 SWAP1 PUSH2 0x2FFE JUMP JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 NOT ADD PUSH2 0xBEF JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE DUP2 TIMESTAMP DUP2 LT ISZERO PUSH2 0xC16 JUMPI PUSH1 0x40 MLOAD PUSH4 0x26F04E8B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xC41 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3EE5B893 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x7E3 SWAP1 DUP9 DUP9 DUP9 DUP9 PUSH2 0x1FD5 JUMP JUMPDEST PUSH1 0x8 DUP3 ADD SLOAD PUSH1 0x0 SWAP1 DUP3 LT PUSH2 0xC8B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4AF3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0xB ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xB87 JUMPI PUSH2 0xB87 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xCCD DUP8 PUSH2 0x1CFA JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x7 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xD4D JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xD39 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xDA5 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xD91 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE POP SWAP1 POP DUP1 PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDF1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE15 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x8 DUP6 ADD SLOAD DUP5 MLOAD DUP1 DUP3 EQ PUSH2 0xE67 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x6D69736D6174636820706F6F6C20746F6B656E73 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEB1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xED5 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST DUP6 GT ISZERO DUP1 ISZERO PUSH2 0xEE3 JUMPI POP DUP5 ISZERO ISZERO JUMPDEST PUSH2 0xEFF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4B38 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF0F DUP9 PUSH1 0x5 ADD SLOAD DUP5 PUSH2 0x30D1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF2C JUMPI PUSH2 0xF2C PUSH2 0x4B5F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF55 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP5 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF73 JUMPI PUSH2 0xF73 PUSH2 0x4B5F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xF9C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH2 0xFBE PUSH2 0xFB4 DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD PUSH2 0x30FD JUMP JUMPDEST DUP8 PUSH1 0x60 ADD MLOAD PUSH2 0x3208 JUMP JUMPDEST DUP7 MSTORE PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x10AF JUMPI DUP10 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xFDD JUMPI PUSH2 0xFDD PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xFFB JUMPI PUSH2 0xFFB PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD LT ISZERO PUSH2 0x1051 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x7769746864726177206D6F7265207468616E20617661696C61626C6500000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST DUP10 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1063 JUMPI PUSH2 0x1063 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1081 JUMPI PUSH2 0x1081 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x109C JUMPI PUSH2 0x109C PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0xFC3 JUMP JUMPDEST POP PUSH2 0x10C1 PUSH2 0xFB4 DUP3 DUP9 PUSH1 0xE0 ADD MLOAD PUSH2 0x30FD JUMP JUMPDEST PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x12B2 JUMPI PUSH1 0x0 DUP8 PUSH1 0x0 ADD MLOAD DUP9 PUSH1 0xC0 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x10EE JUMPI PUSH2 0x10EE PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x20 ADD MLOAD PUSH2 0x1105 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x110F SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x113F DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1128 JUMPI PUSH2 0x1128 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x33B5 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH5 0x2540BE400 PUSH2 0x1151 DUP3 DUP9 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x115B SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x116D JUMPI PUSH2 0x116D PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP POP POP PUSH1 0x0 PUSH5 0x2540BE400 DUP13 PUSH1 0x6 ADD SLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x119A JUMPI PUSH2 0x119A PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x11AC SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x11B6 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x11CB JUMPI PUSH2 0x11CB PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x11DD SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP13 PUSH1 0xA ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x11F2 JUMPI PUSH2 0x11F2 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP1 DUP13 PUSH1 0xB ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x1216 JUMPI PUSH2 0x1216 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x122B SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST DUP13 PUSH1 0xB ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x1240 JUMPI PUSH2 0x1240 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1260 JUMPI PUSH2 0x1260 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x127A JUMPI PUSH2 0x127A PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x128C SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x129E JUMPI PUSH2 0x129E PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x10C9 JUMP JUMPDEST POP PUSH2 0x12C4 PUSH2 0xFB4 DUP3 DUP9 PUSH1 0xE0 ADD MLOAD PUSH2 0x30FD JUMP JUMPDEST PUSH1 0x40 DUP8 ADD DUP2 SWAP1 MSTORE DUP7 MLOAD PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0x0 SWAP4 POP SWAP1 SWAP2 PUSH2 0x12E2 SWAP1 DUP4 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x12EC SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x12F6 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x1337 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x85E995C9BC8185B5BDD5B9D PUSH1 0xA2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x1342 DUP2 PUSH1 0x1 PUSH2 0x4BD7 JUMP JUMPDEST SWAP1 POP DUP8 DUP2 GT ISZERO PUSH2 0x1394 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F6B656E416D6F756E74203E206D61784275726E416D6F756E740000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x79CC679 PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x79CC6790 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x13E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x13F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x1463 JUMPI PUSH2 0x145B DUP12 PUSH1 0x8 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x141D JUMPI PUSH2 0x141D PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x144E JUMPI PUSH2 0x144E PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x33DA JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x13FD JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP11 PUSH1 0x0 ADD SLOAD PUSH32 0xA404896827F41A3845DE89F154BF1F4FE5CBDF79DA7C7805263A3D0B7DE9E672 DUP12 DUP6 DUP11 PUSH1 0x20 ADD MLOAD DUP7 DUP13 PUSH1 0xA0 ADD MLOAD PUSH2 0x14AB SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x14BB SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4BEA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1557 DUP6 DUP6 DUP6 DUP9 PUSH1 0x7 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x152E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1552 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST PUSH2 0x341E JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x7 DUP5 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15AE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15D2 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST DUP6 GT ISZERO PUSH2 0x15F1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4B38 JUMP JUMPDEST PUSH1 0x8 DUP7 ADD SLOAD DUP4 DUP2 EQ PUSH2 0x163B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x6D69736D6174636820706F6F6C546F6B656E73 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 DUP8 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x168B JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1677 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16F6 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1705 DUP4 DUP11 DUP5 PUSH2 0x3495 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1848 JUMPI DUP10 DUP10 DUP3 DUP2 DUP2 LT PUSH2 0x1727 JUMPI PUSH2 0x1727 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1740 JUMPI PUSH2 0x1740 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD LT ISZERO PUSH2 0x1796 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616D6F756E74735B695D203C206D696E416D6F756E74735B695D000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x17A8 JUMPI PUSH2 0x17A8 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x17C2 JUMPI PUSH2 0x17C2 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x17D4 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP13 PUSH1 0xA ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x17E9 JUMPI PUSH2 0x17E9 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP PUSH2 0x1840 DUP13 PUSH1 0x8 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x180F JUMPI PUSH2 0x180F PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x144E JUMPI PUSH2 0x144E PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x170D JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0x79CC679 PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0x79CC6790 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1891 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x18A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP DUP13 SLOAD CALLER SWAP3 POP SWAP1 POP PUSH32 0x58F96D387AC27C23FB6350424CB6B032322B14FFD82029E96AEED2C525E790E8 DUP5 PUSH2 0x18DA DUP15 DUP9 PUSH2 0x4BC4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x18E8 SWAP3 SWAP2 SWAP1 PUSH2 0x4C23 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xC DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1926 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4C45 JUMP JUMPDEST DUP6 PUSH1 0xA ADD DUP5 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x193E JUMPI PUSH2 0x193E PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP4 GT ISZERO PUSH2 0x1988 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x3E706F6F6C2062616C616E6365 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP9 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x19DB JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x19C7 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x19EF DUP10 DUP10 DUP10 DUP10 DUP6 PUSH2 0x3586 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP DUP5 DUP4 GT ISZERO PUSH2 0x1A31 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0xC8F0407C40DAC2F088F PUSH1 0xB3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 DUP10 PUSH1 0x9 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x1A4B JUMPI PUSH2 0x1A4B PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH5 0x2540BE400 DUP12 PUSH1 0x6 ADD SLOAD DUP6 PUSH2 0x1A6C SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x1A76 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x1A80 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP DUP1 DUP5 DUP4 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x1A99 JUMPI PUSH2 0x1A99 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1AAB SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH2 0x1AB5 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x1ACD JUMPI PUSH2 0x1ACD PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP7 DUP3 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x1AF1 JUMPI PUSH2 0x1AF1 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1B03 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x1B1B JUMPI PUSH2 0x1B1B PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE DUP1 ISZERO PUSH2 0x1B80 JUMPI DUP1 DUP11 PUSH1 0xB ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x1B46 JUMPI PUSH2 0x1B46 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x1B5B SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST DUP11 PUSH1 0xB ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x1B73 JUMPI PUSH2 0x1B73 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE JUMPDEST PUSH1 0x0 DUP11 PUSH1 0x8 ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x1B9A JUMPI PUSH2 0x1B9A PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BEE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C12 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST DUP6 GT ISZERO PUSH2 0x1C55 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x36B7B932903A3430B7103CB7BA9037BBB7 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x1C5F DUP2 DUP7 PUSH2 0x37A6 JUMP JUMPDEST POP PUSH2 0x1C97 DUP11 PUSH1 0x8 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x1C7B JUMPI PUSH2 0x1C7B PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP10 PUSH2 0x33DA JUMP JUMPDEST DUP10 SLOAD PUSH1 0x40 DUP1 MLOAD DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP11 SWAP1 MSTORE PUSH1 0xFF DUP1 DUP14 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP11 AND PUSH1 0x60 DUP3 ADD MSTORE CALLER SWAP2 SWAP1 PUSH32 0x28D4CF2D5709DA3B474B5F05CFD7083FAFFD601F9500D1F8439B8A13EC7DF320 SWAP1 PUSH1 0x80 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP SWAP2 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x338 DUP3 PUSH2 0x38F7 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1D56 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1D42 JUMPI JUMPDEST POP POP DUP4 MLOAD SWAP4 SWAP5 POP POP POP DUP6 DUP3 EQ SWAP1 POP PUSH2 0x1DB0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x696E76616C6964206C656E677468206F6620616D6F756E747300000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DBB DUP9 PUSH2 0x1CFA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP9 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1E0D JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1DF9 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x1E29 PUSH2 0x1E23 DUP7 DUP5 PUSH2 0x30FD JUMP JUMPDEST DUP5 PUSH2 0x3208 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1F00 JUMPI DUP8 ISZERO PUSH2 0x1E9C JUMPI DUP10 DUP10 DUP3 DUP2 DUP2 LT PUSH2 0x1E4E JUMPI PUSH2 0x1E4E PUSH2 0x4ADD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E67 JUMPI PUSH2 0x1E67 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1E79 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E8B JUMPI PUSH2 0x1E8B PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x1EF8 JUMP JUMPDEST DUP10 DUP10 DUP3 DUP2 DUP2 LT PUSH2 0x1EAE JUMPI PUSH2 0x1EAE PUSH2 0x4ADD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1EC7 JUMPI PUSH2 0x1EC7 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1ED9 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1EEB JUMPI PUSH2 0x1EEB PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1E2E JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1F16 PUSH2 0x1F10 DUP8 DUP6 PUSH2 0x30FD JUMP JUMPDEST DUP6 PUSH2 0x3208 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP12 PUSH1 0x7 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F6F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F93 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST SWAP1 POP DUP9 ISZERO PUSH2 0x1FC9 JUMPI DUP3 DUP2 PUSH2 0x1FA7 DUP3 DUP6 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x1FB1 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x1FBB SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x42A JUMP JUMPDEST DUP3 DUP2 PUSH2 0x1FA7 DUP5 DUP4 PUSH2 0x4BC4 JUMP JUMPDEST PUSH1 0xC DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1FFD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4C45 JUMP JUMPDEST PUSH1 0x0 DUP7 PUSH1 0x8 ADD DUP7 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2017 JUMPI PUSH2 0x2017 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x206B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x208F SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST DUP5 GT ISZERO PUSH2 0x20D7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39BBB0B81036B7B932903A3430B7103CB7BA9037BBB7 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x20E1 DUP2 DUP6 PUSH2 0x37A6 JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP9 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2135 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x2121 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x2149 DUP10 DUP10 DUP10 DUP10 DUP6 PUSH2 0x3940 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP DUP5 DUP4 LT ISZERO PUSH2 0x218B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x6479203C206D696E4479 PUSH1 0xB0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 DUP10 PUSH1 0x9 ADD DUP9 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x21A5 JUMPI PUSH2 0x21A5 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH5 0x2540BE400 DUP12 PUSH1 0x6 ADD SLOAD DUP6 PUSH2 0x21C6 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x21D0 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x21DA SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP DUP7 DUP3 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x21F2 JUMPI PUSH2 0x21F2 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2204 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x221C JUMPI PUSH2 0x221C PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP1 DUP5 DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x2241 JUMPI PUSH2 0x2241 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2253 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x225D SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2275 JUMPI PUSH2 0x2275 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE DUP1 ISZERO PUSH2 0x22DA JUMPI DUP1 DUP11 PUSH1 0xB ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x22A0 JUMPI PUSH2 0x22A0 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x22B5 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST DUP11 PUSH1 0xB ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x22CD JUMPI PUSH2 0x22CD PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE JUMPDEST PUSH2 0x2311 DUP11 PUSH1 0x8 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x22F5 JUMPI PUSH2 0x22F5 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP7 PUSH2 0x33DA JUMP JUMPDEST DUP10 SLOAD PUSH1 0x40 DUP1 MLOAD DUP10 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0xFF DUP1 DUP14 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP11 AND PUSH1 0x60 DUP3 ADD MSTORE CALLER SWAP2 SWAP1 PUSH32 0x28D4CF2D5709DA3B474B5F05CFD7083FAFFD601F9500D1F8439B8A13EC7DF320 SWAP1 PUSH1 0x80 ADD PUSH2 0x1CE4 JUMP JUMPDEST PUSH1 0xC DUP4 ADD SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x238A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4C45 JUMP JUMPDEST PUSH1 0x8 DUP5 ADD SLOAD DUP4 MLOAD DUP2 EQ PUSH2 0x23D8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x6D69736D6174636820706F6F6C656420746F6B656E73 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2404 DUP9 PUSH2 0x1CFA JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x7 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2484 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x2470 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x24DC JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x24C8 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE POP SWAP1 POP DUP1 PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2528 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x254C SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x257A JUMPI PUSH2 0x2577 PUSH2 0x256D DUP3 PUSH1 0xC0 ADD MLOAD DUP4 PUSH1 0xE0 ADD MLOAD PUSH2 0x30FD JUMP JUMPDEST DUP3 PUSH1 0x60 ADD MLOAD PUSH2 0x3208 JUMP JUMPDEST DUP2 MSTORE JUMPDEST PUSH1 0x0 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2595 JUMPI PUSH2 0x2595 PUSH2 0x4B5F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x25BE JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x271D JUMPI PUSH1 0xA0 DUP4 ADD MLOAD ISZERO ISZERO DUP1 PUSH2 0x25F8 JUMPI POP DUP7 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x25EB JUMPI PUSH2 0x25EB PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 EQ ISZERO JUMPDEST PUSH2 0x2639 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x21737570706C7920616C6C20746F6B656E73 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST DUP7 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x264B JUMPI PUSH2 0x264B PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 EQ PUSH2 0x26B6 JUMPI PUSH1 0x0 DUP9 PUSH1 0x8 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x2671 JUMPI PUSH2 0x2671 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH2 0x26B4 DUP2 DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x26A7 JUMPI PUSH2 0x26A7 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x37A6 JUMP JUMPDEST POP JUMPDEST DUP7 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x26C8 JUMPI PUSH2 0x26C8 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH1 0xC0 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x26E6 JUMPI PUSH2 0x26E6 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x26F8 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x270A JUMPI PUSH2 0x270A PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x25C4 JUMP JUMPDEST POP PUSH2 0x2739 PUSH2 0x272F DUP3 DUP5 PUSH1 0xE0 ADD MLOAD PUSH2 0x30FD JUMP JUMPDEST DUP4 PUSH1 0x60 ADD MLOAD PUSH2 0x3208 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD DUP2 SWAP1 MSTORE DUP3 MLOAD LT PUSH2 0x2783 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x442073686F756C6420696E637265617365 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x0 DUP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x27A8 JUMPI PUSH2 0x27A8 PUSH2 0x4B5F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x27D1 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x29E9 JUMPI PUSH1 0x0 PUSH2 0x27F0 DUP10 PUSH1 0x5 ADD SLOAD DUP7 PUSH2 0x30D1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x29C2 JUMPI PUSH1 0x0 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0xC0 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x281A JUMPI PUSH2 0x281A PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD PUSH2 0x2831 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x283B SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP PUSH5 0x2540BE400 PUSH2 0x2858 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1128 JUMPI PUSH2 0x1128 PUSH2 0x4ADD JUMP JUMPDEST PUSH2 0x2862 SWAP1 DUP6 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x286C SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x287E JUMPI PUSH2 0x287E PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH5 0x2540BE400 DUP13 PUSH1 0x6 ADD SLOAD DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x28A9 JUMPI PUSH2 0x28A9 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x28BB SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x28C5 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP DUP1 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x28DA JUMPI PUSH2 0x28DA PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x28EC SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP13 PUSH1 0xA ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x2901 JUMPI PUSH2 0x2901 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP1 DUP13 PUSH1 0xB ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x2925 JUMPI PUSH2 0x2925 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x293A SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST DUP13 PUSH1 0xB ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x294F JUMPI PUSH2 0x294F PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x296F JUMPI PUSH2 0x296F PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2989 JUMPI PUSH2 0x2989 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x299B SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x29AD JUMPI PUSH2 0x29AD PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x27F5 JUMP JUMPDEST POP PUSH2 0x29DE PUSH2 0x29D4 DUP5 DUP7 PUSH1 0xE0 ADD MLOAD PUSH2 0x30FD JUMP JUMPDEST DUP6 PUSH1 0x60 ADD MLOAD PUSH2 0x3208 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE POP PUSH2 0x2A00 JUMP JUMPDEST DUP2 MLOAD PUSH2 0x29FE SWAP1 PUSH1 0xA DUP11 ADD SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH2 0x454B JUMP JUMPDEST POP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 SUB PUSH2 0x2A19 JUMPI POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x2A47 JUMP JUMPDEST DUP4 MLOAD PUSH1 0xA0 DUP6 ADD MLOAD PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x2A30 SWAP1 DUP4 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x2A3A SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x2A44 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x2A84 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x36B4B73A101E1036B4B7 PUSH1 0xB1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x40C10F19 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x40C10F19 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2AE6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 PUSH1 0x0 ADD SLOAD PUSH32 0xBCB1AB680EE25EF87D34EC297263A10E0A823CD81326B0AA6BC55B86CB2A4188 DUP11 DUP6 DUP9 PUSH1 0x20 ADD MLOAD DUP7 DUP11 PUSH1 0xA0 ADD MLOAD PUSH2 0x2B31 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2B41 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4BEA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1557 DUP6 DUP6 DUP6 DUP6 DUP10 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2BAC JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x2B98 JUMPI JUMPDEST POP POP POP POP POP PUSH2 0x3940 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x335 DUP4 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2C09 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x2BF5 JUMPI JUMPDEST POP POP POP POP POP DUP4 DUP6 PUSH1 0x7 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C64 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2C88 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST PUSH2 0x3495 JUMP JUMPDEST PUSH1 0x7 DUP5 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2CDA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2CFE SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST DUP6 GT ISZERO PUSH2 0x2D1D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4B38 JUMP JUMPDEST PUSH1 0x8 DUP7 ADD SLOAD PUSH1 0xFF DUP6 AND DUP2 GT PUSH2 0x2D60 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x1B9BDD08199BDD5B99 PUSH1 0xBA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2DA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2DC4 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x2DD5 DUP11 DUP11 DUP11 DUP7 PUSH2 0x341E JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP7 DUP3 LT ISZERO PUSH2 0x2E1A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x191E480F081B5A5B905B5BDD5B9D PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 PUSH5 0x2540BE400 DUP12 PUSH1 0x6 ADD SLOAD DUP4 PUSH2 0x2E32 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x2E3C SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP PUSH2 0x2E48 DUP2 DUP5 PUSH2 0x4BD7 JUMP JUMPDEST DUP12 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2E60 JUMPI PUSH2 0x2E60 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x2E75 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP12 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2E8D JUMPI PUSH2 0x2E8D PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE DUP1 ISZERO PUSH2 0x2EF2 JUMPI DUP1 DUP12 PUSH1 0xB ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2EB8 JUMPI PUSH2 0x2EB8 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x2ECD SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST DUP12 PUSH1 0xB ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2EE5 JUMPI PUSH2 0x2EE5 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x79CC679 PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0x79CC6790 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F4E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x2F89 DUP12 PUSH1 0x8 ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2F6D JUMPI PUSH2 0x2F6D PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP6 PUSH2 0x33DA JUMP JUMPDEST DUP11 SLOAD PUSH1 0x40 DUP1 MLOAD DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0xFF DUP13 AND DUP2 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD CALLER SWAP3 SWAP2 PUSH32 0x1A66F6EA1C14E22A62AB434F3414908BB5F49133D673C872C8957AA961E4C215 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG3 POP SWAP1 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x64 PUSH2 0x2FF4 DUP4 PUSH2 0x38F7 JUMP JUMPDEST PUSH2 0x338 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x301B PUSH2 0x300D DUP5 PUSH2 0x3AE1 JUMP JUMPDEST PUSH2 0x3016 DUP6 PUSH2 0x1CFA JUMP JUMPDEST PUSH2 0x3208 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x7 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3079 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x309D SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x30C6 JUMPI DUP1 PUSH2 0x30B2 PUSH1 0x12 PUSH1 0xA PUSH2 0x4D50 JUMP JUMPDEST PUSH2 0x30BC SWAP1 DUP6 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x825 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST POP PUSH1 0x0 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x30DE PUSH1 0x1 DUP4 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x30E9 SWAP1 PUSH1 0x4 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x30F3 DUP4 DUP6 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x335 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH1 0x60 SWAP2 SWAP1 DUP2 EQ PUSH2 0x314A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x6D69736D61746368206D756C7469706C69657273 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3165 JUMPI PUSH2 0x3165 PUSH2 0x4B5F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x318E JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x31FF JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x31AE JUMPI PUSH2 0x31AE PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x31C8 JUMPI PUSH2 0x31C8 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x31DA SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x31EC JUMPI PUSH2 0x31EC PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3194 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP2 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3247 JUMPI DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x322A JUMPI PUSH2 0x322A PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH2 0x323D SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x3210 JUMP JUMPDEST POP DUP1 PUSH1 0x0 SUB PUSH2 0x325B JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x338 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 PUSH2 0x3269 DUP6 DUP9 PUSH2 0x4B8B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x3376 JUMPI DUP3 PUSH1 0x0 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0x32C7 JUMPI DUP8 DUP12 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3297 JUMPI PUSH2 0x3297 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x32A9 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x32B3 DUP7 DUP5 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x32BD SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x327C JUMP JUMPDEST POP DUP4 SWAP5 POP DUP1 DUP8 PUSH1 0x1 PUSH2 0x32D9 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH2 0x32E3 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH1 0x64 DUP6 PUSH2 0x32F0 DUP3 DUP8 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x32FA SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3304 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x330E SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST DUP5 PUSH2 0x3319 DUP10 DUP5 PUSH2 0x4B8B JUMP JUMPDEST PUSH1 0x64 PUSH2 0x3325 DUP11 DUP9 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x332F SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x3339 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH2 0x3343 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x334D SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP4 POP PUSH2 0x3359 DUP5 DUP7 PUSH2 0x3B91 JUMP JUMPDEST ISZERO PUSH2 0x336D JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x338 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x326E JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x4420646F6573206E6F7420636F6E7665726765 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 GT ISZERO PUSH2 0x33D0 JUMPI PUSH2 0x33C9 DUP3 DUP5 PUSH2 0x4BC4 JUMP JUMPDEST SWAP1 POP PUSH2 0x338 JUMP JUMPDEST PUSH2 0x335 DUP4 DUP4 PUSH2 0x4BC4 JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x33E7 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x340E JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A48CA7B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3419 DUP4 DUP4 DUP4 PUSH2 0x3BA7 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3432 DUP10 DUP9 DUP11 DUP10 PUSH2 0x3C0A JUMP JUMPDEST DUP1 SWAP4 POP DUP2 SWAP5 POP DUP3 SWAP6 POP POP POP POP PUSH1 0x0 DUP4 DUP11 PUSH1 0x9 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x3459 JUMPI PUSH2 0x3459 PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP5 DUP5 PUSH2 0x3470 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x347A SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x3484 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST SWAP4 SWAP11 SWAP4 SWAP10 POP SWAP3 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 DUP4 GT ISZERO PUSH2 0x34DD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x65786365656420746F74616C20737570706C79 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x34FA JUMPI PUSH2 0x34FA PUSH2 0x4B5F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3523 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1557 JUMPI DUP5 DUP7 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3545 JUMPI PUSH2 0x3545 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3557 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3561 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3573 JUMPI PUSH2 0x3573 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3529 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0xFF AND DUP7 PUSH1 0xFF AND SUB PUSH2 0x35D8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x31B7B6B830B932903A37B5B2B7103A379034BA39B2B633 PUSH1 0x49 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 DUP8 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3628 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x3614 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x363B DUP6 DUP4 PUSH2 0x30FD JUMP JUMPDEST SWAP1 POP DUP1 MLOAD DUP9 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x3653 JUMPI POP DUP1 MLOAD DUP8 PUSH1 0xFF AND LT JUMPDEST PUSH2 0x366F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4AF3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x367A DUP11 PUSH2 0x1CFA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3688 DUP4 DUP4 PUSH2 0x3208 JUMP JUMPDEST SWAP1 POP DUP4 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x369F JUMPI PUSH2 0x369F PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH2 0x36B2 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x36C7 JUMPI PUSH2 0x36C7 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x36D9 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x36EE JUMPI PUSH2 0x36EE PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x3708 DUP4 DUP13 DUP7 DUP6 PUSH2 0x3F17 JUMP JUMPDEST SWAP1 POP DUP4 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x371F JUMPI PUSH2 0x371F PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x1 PUSH2 0x3734 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH2 0x373E SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST SWAP7 POP PUSH5 0x2540BE400 DUP13 PUSH1 0x5 ADD SLOAD DUP9 PUSH2 0x3756 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3760 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP6 POP DUP5 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3777 JUMPI PUSH2 0x3777 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP9 PUSH2 0x378B SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH2 0x3795 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP7 POP POP POP POP POP POP SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x37B2 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x37D9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2A38B133 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP3 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3822 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3846 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST SWAP1 POP PUSH2 0x385D PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP7 PUSH2 0x4106 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP4 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x38C9 SWAP2 SWAP1 PUSH2 0x4B1F JUMP JUMPDEST PUSH2 0x38D3 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST EQ PUSH2 0x38F1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE407735 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x2 DUP3 ADD SLOAD PUSH1 0x1 DUP4 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP1 DUP4 EQ DUP1 ISZERO SWAP1 PUSH2 0x3918 JUMPI POP DUP2 TIMESTAMP LT JUMPDEST ISZERO PUSH2 0x3939 JUMPI PUSH1 0x0 DUP5 PUSH1 0x3 ADD SLOAD SWAP1 POP DUP1 DUP4 SUB DUP2 TIMESTAMP SUB DUP6 MUL TIMESTAMP DUP6 SUB DUP5 MUL ADD DIV SWAP4 POP POP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP8 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3993 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x397F JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x39A6 DUP6 DUP4 PUSH2 0x30FD JUMP JUMPDEST SWAP1 POP DUP1 MLOAD DUP9 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x39BE JUMPI POP DUP1 MLOAD DUP8 PUSH1 0xFF AND LT JUMPDEST PUSH2 0x39DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4AF3 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x39F1 JUMPI PUSH2 0x39F1 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3A0E JUMPI PUSH2 0x3A0E PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH2 0x3A21 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3A2B SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3A44 PUSH2 0x3A3B DUP13 PUSH2 0x1CFA JUMP JUMPDEST DUP12 DUP12 DUP6 DUP8 PUSH2 0x413E JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 DUP5 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3A5E JUMPI PUSH2 0x3A5E PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3A70 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x3A7A SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST SWAP6 POP PUSH5 0x2540BE400 DUP12 PUSH1 0x5 ADD SLOAD DUP8 PUSH2 0x3A92 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3A9C SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP5 POP DUP4 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3AB3 JUMPI PUSH2 0x3AB3 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP8 PUSH2 0x3AC7 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x3AD1 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP6 POP POP POP POP POP SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x338 DUP3 PUSH1 0xA ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3B34 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x3B20 JUMPI JUMPDEST POP POP POP POP POP DUP4 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3B87 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x3B73 JUMPI JUMPDEST POP POP POP POP POP PUSH2 0x30FD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH2 0x3B9F DUP5 DUP5 PUSH2 0x33B5 JUMP JUMPDEST LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x3419 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x4356 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3C19 DUP9 PUSH2 0x3AE1 JUMP JUMPDEST SWAP1 POP DUP1 MLOAD DUP8 PUSH1 0xFF AND LT PUSH2 0x3C3E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP1 PUSH2 0x4AF3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 POP PUSH2 0x3C77 DUP10 PUSH2 0x1CFA JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x3C89 SWAP1 DUP4 SWAP1 PUSH2 0x3208 JUMP JUMPDEST DUP1 DUP3 MSTORE DUP7 SWAP1 PUSH2 0x3C98 SWAP1 DUP10 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3CA2 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST DUP2 MLOAD PUSH2 0x3CAE SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD DUP3 SWAP1 PUSH1 0xFF DUP11 AND SWAP1 DUP2 LT PUSH2 0x3CCA JUMPI PUSH2 0x3CCA PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 GT ISZERO PUSH2 0x3D15 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x6578636565647320617661696C61626C65 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH2 0x3D29 DUP2 PUSH1 0x80 ADD MLOAD DUP10 DUP5 DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x3F17 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3D4B JUMPI PUSH2 0x3D4B PUSH2 0x4B5F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3D74 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH2 0x3D86 DUP11 PUSH1 0x5 ADD SLOAD DUP5 MLOAD PUSH2 0x30D1 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3E63 JUMPI PUSH1 0x0 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3DAC JUMPI PUSH2 0x3DAC PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH5 0x2540BE400 DUP6 PUSH1 0x60 ADD MLOAD DUP14 PUSH1 0xFF AND DUP5 EQ PUSH2 0x3DF5 JUMPI DUP7 MLOAD PUSH1 0x20 DUP9 ADD MLOAD PUSH2 0x3DDC SWAP1 DUP6 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3DE6 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x3DF0 SWAP1 DUP5 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x3E1F JUMP JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD DUP8 MLOAD PUSH1 0x20 DUP10 ADD MLOAD PUSH2 0x3E0B SWAP1 DUP7 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3E15 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x3E1F SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x3E29 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3E33 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x3E3D SWAP1 DUP3 PUSH2 0x4BC4 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3E4F JUMPI PUSH2 0x3E4F PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x3D90 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x3E7A DUP5 PUSH1 0x80 ADD MLOAD DUP13 DUP6 DUP8 PUSH1 0x20 ADD MLOAD PUSH2 0x3F17 JUMP JUMPDEST DUP4 DUP13 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3E8F JUMPI PUSH2 0x3E8F PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3EA1 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST SWAP1 POP DUP12 PUSH1 0x9 ADD DUP12 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x3EBB JUMPI PUSH2 0x3EBB PUSH2 0x4ADD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH1 0x1 DUP3 PUSH2 0x3ED3 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x3EDD SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP1 POP DUP1 DUP5 PUSH1 0x40 ADD MLOAD DUP7 DUP14 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3EFA JUMPI PUSH2 0x3EFA PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP8 POP SWAP8 POP SWAP8 POP POP POP POP POP POP SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF DUP6 AND DUP2 GT PUSH2 0x3F60 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x151BDAD95B881B9BDD08199BDD5B99 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST DUP3 PUSH1 0x0 DUP1 PUSH2 0x3F6E DUP5 DUP11 PUSH2 0x4B8B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x3FF0 JUMPI DUP9 PUSH1 0xFF AND DUP2 EQ PUSH2 0x3FE8 JUMPI DUP8 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3F97 JUMPI PUSH2 0x3F97 PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x3FAA SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST SWAP3 POP DUP5 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3FBF JUMPI PUSH2 0x3FBF PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3FD1 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3FDB DUP9 DUP7 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x3FE5 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP4 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x3F73 JUMP JUMPDEST POP PUSH2 0x3FFB DUP5 DUP3 PUSH2 0x4B8B JUMP JUMPDEST PUSH1 0x64 PUSH2 0x4007 DUP9 DUP7 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x4011 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x401B SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP3 POP PUSH1 0x0 DUP2 PUSH2 0x402B PUSH1 0x64 DUP10 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x4035 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x403F SWAP1 DUP5 PUSH2 0x4BD7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP8 DUP2 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x40BD JUMPI DUP2 SWAP3 POP DUP10 DUP5 DUP4 PUSH1 0x2 PUSH2 0x4062 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x406C SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH2 0x4076 SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP8 PUSH2 0x4081 DUP5 DUP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x408B SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH2 0x4095 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP2 POP PUSH2 0x40A1 DUP3 DUP5 PUSH2 0x3B91 JUMP JUMPDEST ISZERO PUSH2 0x40B5 JUMPI POP SWAP7 POP PUSH2 0x42A SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x4046 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x417070726F78696D6174696F6E20646964206E6F7420636F6E76657267650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x38F1 SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD PUSH2 0x3BD3 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF DUP1 DUP7 AND SWAP1 DUP8 AND SUB PUSH2 0x4192 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x31B7B6B830B932903A37B5B2B7103A379034BA39B2B633 PUSH1 0x49 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST DUP1 DUP7 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x41A6 JUMPI POP DUP1 DUP6 PUSH1 0xFF AND LT JUMPDEST PUSH2 0x41E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1D1BDAD95B881B9BDD08199BDD5B99 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x41F0 DUP5 DUP10 PUSH2 0x3208 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 DUP1 PUSH2 0x4200 DUP12 DUP7 PUSH2 0x4B8B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x4287 JUMPI DUP12 PUSH1 0xFF AND DUP2 SUB PUSH2 0x4220 JUMPI DUP10 SWAP2 POP PUSH2 0x4253 JUMP JUMPDEST DUP11 PUSH1 0xFF AND DUP2 EQ PUSH2 0x424B JUMPI DUP9 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x423C JUMPI PUSH2 0x423C PUSH2 0x4ADD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP2 POP PUSH2 0x4253 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x4206 JUMP JUMPDEST PUSH2 0x425D DUP3 DUP6 PUSH2 0x4BD7 JUMP JUMPDEST SWAP4 POP PUSH2 0x4269 DUP8 DUP4 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x4273 DUP8 DUP8 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x427D SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP5 POP PUSH1 0x1 ADD PUSH2 0x4206 JUMP JUMPDEST POP PUSH2 0x4292 DUP7 DUP4 PUSH2 0x4B8B JUMP JUMPDEST PUSH1 0x64 PUSH2 0x429E DUP8 DUP8 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x42A8 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x42B2 SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP4 POP PUSH1 0x0 DUP3 PUSH2 0x42C2 PUSH1 0x64 DUP9 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x42CC SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST PUSH2 0x42D6 SWAP1 DUP6 PUSH2 0x4BD7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP7 DUP2 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x40BD JUMPI DUP2 SWAP3 POP DUP9 DUP5 DUP4 PUSH1 0x2 PUSH2 0x42F9 SWAP2 SWAP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x4303 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH2 0x430D SWAP2 SWAP1 PUSH2 0x4BC4 JUMP JUMPDEST DUP9 PUSH2 0x4318 DUP5 DUP1 PUSH2 0x4B8B JUMP JUMPDEST PUSH2 0x4322 SWAP2 SWAP1 PUSH2 0x4BD7 JUMP JUMPDEST PUSH2 0x432C SWAP2 SWAP1 PUSH2 0x4BA2 JUMP JUMPDEST SWAP2 POP PUSH2 0x4338 DUP3 DUP5 PUSH2 0x3B91 JUMP JUMPDEST ISZERO PUSH2 0x434E JUMPI POP SWAP9 POP PUSH2 0x825 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x42DD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x43AB DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4428 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x3419 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x43C9 SWAP2 SWAP1 PUSH2 0x4D5C JUMP JUMPDEST PUSH2 0x3419 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x42A DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x444F SWAP2 SWAP1 PUSH2 0x4D9D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x448C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4491 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x44A2 DUP8 DUP4 DUP4 DUP8 PUSH2 0x44AD JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x451C JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x4515 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x4515 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC82 JUMP JUMPDEST POP DUP2 PUSH2 0x42A JUMP JUMPDEST PUSH2 0x42A DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x4531 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC82 SWAP2 SWAP1 PUSH2 0x4DB9 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x4586 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x4586 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x456B JUMP JUMPDEST POP PUSH2 0x4592 SWAP3 SWAP2 POP PUSH2 0x4596 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x4592 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x4597 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x45BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x45DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x45F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x4612 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4631 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x464F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x465B DUP9 DUP3 DUP10 ADD PUSH2 0x45CD JUMP JUMPDEST SWAP7 SWAP10 SWAP1 SWAP9 POP SWAP6 SWAP7 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP7 PUSH1 0x60 SWAP1 SWAP2 ADD CALLDATALOAD SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x4688 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x46A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x46B9 PUSH1 0x40 DUP6 ADD PUSH2 0x4677 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x46D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4714 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x46EF JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4714 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4733 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x47B4 DUP2 DUP6 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP1 DUP6 ADD MLOAD SWAP2 POP POP PUSH2 0x1C0 PUSH2 0x120 DUP2 DUP2 DUP7 ADD MSTORE PUSH2 0x47D4 PUSH2 0x1E0 DUP7 ADD DUP5 PUSH2 0x46DB JUMP JUMPDEST SWAP3 POP DUP1 DUP7 ADD MLOAD SWAP1 POP PUSH1 0x1F NOT PUSH2 0x140 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x47F5 DUP6 DUP5 PUSH2 0x471F JUMP JUMPDEST SWAP5 POP DUP1 DUP9 ADD MLOAD SWAP3 POP POP PUSH2 0x160 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x4814 DUP6 DUP5 PUSH2 0x471F JUMP JUMPDEST SWAP5 POP DUP1 DUP9 ADD MLOAD SWAP3 POP POP PUSH2 0x180 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x4833 DUP6 DUP5 PUSH2 0x471F JUMP JUMPDEST SWAP5 POP DUP1 DUP9 ADD MLOAD SWAP3 POP POP POP PUSH2 0x1A0 PUSH2 0x484D DUP2 DUP8 ADD DUP4 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST SWAP6 SWAP1 SWAP6 ADD MLOAD SWAP4 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4876 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x489B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x48A7 DUP9 DUP3 DUP10 ADD PUSH2 0x45CD JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP7 PUSH1 0x60 ADD CALLDATALOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x335 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x471F JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x4688 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x48FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH2 0x4913 PUSH1 0x40 DUP9 ADD PUSH2 0x48CC JUMP JUMPDEST SWAP4 POP PUSH2 0x4921 PUSH1 0x60 DUP9 ADD PUSH2 0x48CC JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x4949 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4962 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4980 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x498C DUP8 DUP3 DUP9 ADD PUSH2 0x45CD JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x49A0 DUP2 PUSH2 0x493B JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x49C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH2 0x49D1 PUSH1 0x20 DUP7 ADD PUSH2 0x4677 JUMP JUMPDEST SWAP3 POP PUSH2 0x49DF PUSH1 0x40 DUP7 ADD PUSH2 0x4677 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4A02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x4A12 PUSH1 0x20 DUP5 ADD PUSH2 0x48CC JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4A2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x4A12 PUSH1 0x20 DUP5 ADD PUSH2 0x4677 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4A56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH2 0x4A6D PUSH1 0x40 DUP8 ADD PUSH2 0x4677 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP4 SWAP5 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP5 POP PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4A9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH2 0x4AAE PUSH1 0x20 DUP9 ADD PUSH2 0x4677 JUMP JUMPDEST SWAP5 POP PUSH2 0x4ABC PUSH1 0x40 DUP9 ADD PUSH2 0x4677 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x12 SWAP1 DUP3 ADD MSTORE PUSH18 0x696E646578206F7574206F662072616E6765 PUSH1 0x70 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4B31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xD SWAP1 DUP3 ADD MSTORE PUSH13 0x1F2628173130B630B731B2A7B3 PUSH1 0x99 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x338 JUMPI PUSH2 0x338 PUSH2 0x4B75 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4BBF JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x338 JUMPI PUSH2 0x338 PUSH2 0x4B75 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x338 JUMPI PUSH2 0x338 PUSH2 0x4B75 JUMP JUMPDEST PUSH1 0x80 DUP2 MSTORE PUSH1 0x0 PUSH2 0x4BFD PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0x471F JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x4C0F DUP2 DUP8 PUSH2 0x471F JUMP JUMPDEST PUSH1 0x40 DUP5 ADD SWAP6 SWAP1 SWAP6 MSTORE POP POP PUSH1 0x60 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x4C36 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x471F JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xD SWAP1 DUP3 ADD MSTORE PUSH13 0x191A5CD8589B1959081C1BDBDB PUSH1 0x9A SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x4CA7 JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x4C8D JUMPI PUSH2 0x4C8D PUSH2 0x4B75 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x4C9A JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x4C71 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4CBE JUMPI POP PUSH1 0x1 PUSH2 0x338 JUMP JUMPDEST DUP2 PUSH2 0x4CCB JUMPI POP PUSH1 0x0 PUSH2 0x338 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x4CE1 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x4CEB JUMPI PUSH2 0x4D07 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x338 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x4CFC JUMPI PUSH2 0x4CFC PUSH2 0x4B75 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x338 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x4D2A JUMPI POP DUP2 DUP2 EXP PUSH2 0x338 JUMP JUMPDEST PUSH2 0x4D34 DUP4 DUP4 PUSH2 0x4C6C JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x4D48 JUMPI PUSH2 0x4D48 PUSH2 0x4B75 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x335 DUP4 DUP4 PUSH2 0x4CAF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4D6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x335 DUP2 PUSH2 0x493B JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4D94 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4D7C JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x4DAF DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x4D79 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x4DD8 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x4D79 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x25 0xCE 0xDC EXTCODECOPY 0x21 0xF 0xE9 0xAC LOG4 MLOAD EXTCODESIZE 0xD EXTCODESIZE DUP11 PUSH1 0xD2 CALLDATASIZE MSTORE8 PUSH22 0xDBCD2D8DC7A1249F05A95FC7CB64736F6C6343000811 STOP CALLER ","sourceMap":"1194:13712:77:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9180:149;;;;;;:::i;:::-;;:::i;:::-;;;413:25:181;;;401:2;386:18;9180:149:77;;;;;;;;14600:304;;;;;;:::i;:::-;;:::i;8655:255::-;;;;;;:::i;:::-;;:::i;3161:120::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12889:287::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11114:416::-;;;;;;:::i;:::-;;:::i;4062:121::-;;;;;;:::i;:::-;;:::i;7518:213::-;;;;;;:::i;:::-;;:::i;10409:410::-;;;;;;:::i;:::-;;:::i;3414:123::-;;;;;;:::i;:::-;3474:7;3504:19;;;:14;:19;;;;;:27;;;-1:-1:-1;;;;;3504:27:77;;3414:123;;;;-1:-1:-1;;;;;8182:32:181;;;8164:51;;8152:2;8137:18;3414:123:77;8018:203:181;12017:272:77;;;;;;:::i;:::-;;:::i;6536:227::-;;;;;;:::i;:::-;;:::i;8075:178::-;;;;;;:::i;:::-;;:::i;4949:279::-;;;;;;:::i;:::-;;:::i;:::-;;;9051:4:181;9039:17;;;9021:36;;9009:2;8994:18;4949:279:77;8879:184:181;4442:243:77;;;;;;:::i;:::-;;:::i;13717:325::-;;;;;;:::i;:::-;;:::i;5500:257::-;;;;;;:::i;:::-;;:::i;3743:107::-;;;;;;:::i;:::-;;:::i;5954:129::-;;;;;;:::i;:::-;;:::i;9810:303::-;;;;;;:::i;:::-;;:::i;9180:149::-;9260:7;9282:19;;;:14;:19;;;;;:42;;9318:5;9282:35;:42::i;:::-;9275:49;;9180:149;;;;;:::o;14600:304::-;1556:9:68;;14809:7:77;;-1:-1:-1;;1556:30:68;1552:89;;1595:46;;-1:-1:-1;;;1595:46:68;;;;;;;;;;;1552:89;808:1:104;1708:9:68;:29;14776:8:77;2887:15:::1;:26:::0;-1:-1:-1;2883:86:77::1;;;2922:47;;-1:-1:-1::0;;;2922:47:77::1;;;;;;;;;;;2883:86;3834:9:68::2;::::0;-1:-1:-1;;;3834:9:68;::::2;;;3830:62;;;3852:40;;-1:-1:-1::0;;;3852:40:68::2;;;;;;;;;;;3830:62;14831:68:77::3;14876:7;;14831:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;::::0;;;-1:-1:-1;14831:19:77;;;:14:::3;:19;::::0;;;;;:68;-1:-1:-1;14885:13:77;;-1:-1:-1;;14831:44:77::3;:68::i;:::-;709:1:104::0;1876:9:68;:33;14824:75:77;14600:304;-1:-1:-1;;;;;;;14600:304:77:o;8655:255::-;8792:28;8835:19;;;:14;:19;;;;;:70;;8881:11;8894:10;8835:45;:70::i;:::-;8828:77;8655:255;-1:-1:-1;;;;8655:255:77:o;3161:120::-;3221:21;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3221:21:77;3257:1;:19;;;:14;:19;;;;;;;;;3250:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3250:26:77;;;;;;;;;;;;;;;;;;;;;;;;;;;3257:19;;3250:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3250:26:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3250:26:77;;;-1:-1:-1;;3250:26:77;;;;;;;;;;;;;;;;;;;;;;;3161:120;-1:-1:-1;;3161:120:77:o;12889:287::-;1556:9:68;;13085:16:77;;-1:-1:-1;;1556:30:68;1552:89;;1595:46;;-1:-1:-1;;;1595:46:68;;;;;;;;;;;1552:89;808:1:104;1708:9:68;:29;13052:8:77;2887:15:::1;:26:::0;-1:-1:-1;2883:86:77::1;;;2922:47;;-1:-1:-1::0;;;2922:47:77::1;;;;;;;;;;;2883:86;3834:9:68::2;::::0;-1:-1:-1;;;3834:9:68;::::2;;;3830:62;;;3852:40;;-1:-1:-1::0;;;3852:40:68::2;;;;;;;;;;;3830:62;13116:1:77::3;:19:::0;;;:14:::3;:19;::::0;;;;:55:::3;::::0;13152:6;13160:10;;13116:35:::3;:55::i;11114:416::-:0;1556:9:68;;11339:7:77;;-1:-1:-1;;1556:30:68;1552:89;;1595:46;;-1:-1:-1;;;1595:46:68;;;;;;;;;;;1552:89;808:1:104;1708:9:68;:29;11306:8:77;2887:15:::1;:26:::0;-1:-1:-1;2883:86:77::1;;;2922:47;;-1:-1:-1::0;;;2922:47:77::1;;;;;;;;;;;2883:86;3834:9:68::2;::::0;-1:-1:-1;;;3834:9:68;::::2;;;3830:62;;;3852:40;;-1:-1:-1::0;;;3852:40:68::2;;;;;;;;;;;3830:62;11367:158:77::3;11404:31;11422:3;11427:7;11404:17;:31::i;:::-;11445:32;11463:3;11468:8;11445:17;:32::i;:::-;11367:1;:19:::0;;;:14:::3;:19;::::0;;;;;:158;11487:9;11506:11;11367:27:::3;:158::i;:::-;709:1:104::0;1876:9:68;:33;11354:171:77;11114:416;-1:-1:-1;;;;;;;;11114:416:77:o;4062:121::-;4123:7;4145:19;;;:14;:19;;;;;:33;;:31;:33::i;7518:213::-;7646:7;7668:19;;;:14;:19;;;;;:58;;7709:7;;7718;7668:40;:58::i;:::-;7661:65;7518:213;-1:-1:-1;;;;;7518:213:77:o;10409:410::-;1556:9:68;;10631:7:77;;-1:-1:-1;;1556:30:68;1552:89;;1595:46;;-1:-1:-1;;;1595:46:68;;;;;;;;;;;1552:89;808:1:104;1708:9:68;:29;10598:8:77;2887:15:::1;:26:::0;-1:-1:-1;2883:86:77::1;;;2922:47;;-1:-1:-1::0;;;2922:47:77::1;;;;;;;;;;;2883:86;3834:9:68::2;::::0;-1:-1:-1;;;3834:9:68;::::2;;;3830:62;;;3852:40;;-1:-1:-1::0;;;3852:40:68::2;;;;;;;;;;;3830:62;10659:155:77::3;10693:31;10711:3;10716:7;10693:17;:31::i;:::-;10734:32;10752:3;10757:8;10734:17;:32::i;:::-;10659:1;:19:::0;;;:14:::3;:19;::::0;;;;;:155;10776:8;10794:12;10659:24:::3;:155::i;12017:272::-:0;1556:9:68;;12210:7:77;;-1:-1:-1;;1556:30:68;1552:89;;1595:46;;-1:-1:-1;;;1595:46:68;;;;;;;;;;;1552:89;808:1:104;1708:9:68;:29;12177:8:77;2887:15:::1;:26:::0;-1:-1:-1;2883:86:77::1;;;2922:47;;-1:-1:-1::0;;;2922:47:77::1;;;;;;;;;;;2883:86;3834:9:68::2;::::0;-1:-1:-1;;;3834:9:68;::::2;;;3830:62;;;3852:40;;-1:-1:-1::0;;;3852:40:68::2;;;;;;;;;;;3830:62;12232:52:77::3;12265:7;;12232:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;::::0;;;-1:-1:-1;12232:19:77;;;:14:::3;:19;::::0;;;;;:52;-1:-1:-1;12274:9:77;;-1:-1:-1;;12232:32:77::3;:52::i;6536:227::-:0;6669:7;6691:19;;;:14;:19;;;;;:67;;6725:14;6741:12;6755:2;6691:33;:67::i;8075:178::-;8196:1;:19;;;:14;:19;;;;;8165:16;;8196:52;;8241:6;8196:44;:52::i;4949:279::-;5032:5;5059:19;;;:14;:19;;;;;;;;-1:-1:-1;;;;;5059:33:77;;;;;;;;;;;;;5110:24;5074:3;5059:33;5110:12;:24::i;:::-;-1:-1:-1;;;;;5102:49:77;;5098:107;;5160:45;;-1:-1:-1;;;5160:45:77;;;;;;;;;;;4442:243;4511:6;4538:19;;;:14;:19;;;;;:32;;:39;4529:48;;;;4525:103;;4586:42;;-1:-1:-1;;;4586:42:77;;;;;;;;;;;4525:103;4641:1;:19;;;:14;:19;;;;;:32;;:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;4641:39:77;;4442:243;-1:-1:-1;;;4442:243:77:o;13717:325::-;1556:9:68;;13936:7:77;;-1:-1:-1;;1556:30:68;1552:89;;1595:46;;-1:-1:-1;;;1595:46:68;;;;;;;;;;;1552:89;808:1:104;1708:9:68;:29;13903:8:77;2887:15:::1;:26:::0;-1:-1:-1;2883:86:77::1;;;2922:47;;-1:-1:-1::0;;;2922:47:77::1;;;;;;;;;;;2883:86;3834:9:68::2;::::0;-1:-1:-1;;;3834:9:68;::::2;;;3830:62;;;3852:40;;-1:-1:-1::0;;;3852:40:68::2;;;;;;;;;;;3830:62;13958:1:77::3;:19:::0;;;:14:::3;:19;::::0;;;;:79:::3;::::0;14002:11;14015:10;14027:9;13958:43:::3;:79::i;5500:257::-:0;5578:7;5606:19;;;:14;:19;;;;;:28;;:35;5597:44;;;;5593:111;;5650:54;;-1:-1:-1;;;5650:54:77;;;;;;;;;;;5593:111;5717:1;:19;;;:14;:19;;;;;:28;;:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;5710:42;;5500:257;;;;:::o;3743:107::-;3797:7;3819:19;;;:14;:19;;;;;:26;;:24;:26::i;5954:129::-;6019:7;6041:19;;;:14;:19;;;;;:37;;:35;:37::i;9810:303::-;1556:9:68;;10021:7:77;;-1:-1:-1;;1556:30:68;1552:89;;1595:46;;-1:-1:-1;;;1595:46:68;;;;;;;;;;;1552:89;808:1:104;1708:9:68;:29;9988:8:77;2887:15:::1;:26:::0;-1:-1:-1;2883:86:77::1;;;2922:47;;-1:-1:-1::0;;;2922:47:77::1;;;;;;;;;;;2883:86;3834:9:68::2;::::0;-1:-1:-1;;;3834:9:68;::::2;;;3830:62;;;3852:40;;-1:-1:-1::0;;;3852:40:68::2;;;;;;;;;;;3830:62;10043:1:77::3;:19:::0;;;:14:::3;:19;::::0;;;;:65:::3;::::0;10068:14;10084:12;10098:2;10102:5;10043:24:::3;:65::i;22134:199:108:-:0;22247:17;;;:24;22216:7;;22239:32;;22231:63;;;;-1:-1:-1;;;22231:63:108;;;;;;;:::i;:::-;;;;;;;;;22307:4;:14;;22322:5;22307:21;;;;;;;;:::i;35150:2412::-;35286:7;35301:28;35332:166;;;;;;;;35359:1;35332:166;;;;35368:1;35332:166;;;;35377:1;35332:166;;;;35386:18;35399:4;35386:12;:18::i;:::-;35332:166;;;;35412:4;:12;;;;;;;;;;-1:-1:-1;;;;;35412:12:108;-1:-1:-1;;;;;35332:166:108;;;;;35432:1;35332:166;;;;35441:4;:13;;35332:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35462:4;:30;;35332:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35301:197;;35520:1;:9;;;-1:-1:-1;;;;;35520:21:108;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35504:13;;;:39;35570:17;;;:24;35621:14;;35649:23;;;35641:56;;;;-1:-1:-1;;;35641:56:108;;11410:2:181;35641:56:108;;;11392:21:181;11449:2;11429:18;;;11422:30;-1:-1:-1;;;11468:18:181;;;11461:50;11528:18;;35641:56:108;11208:344:181;35641:56:108;35729:9;;;;:31;;-1:-1:-1;;;35729:31:108;;35749:10;35729:31;;;8164:51:181;-1:-1:-1;;;;;35729:19:108;;;;;;8137:18:181;;35729:31:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35712:13;:48;;:70;;;;-1:-1:-1;35764:18:108;;;35712:70;35704:96;;;;-1:-1:-1;;;35704:96:108;;;;;;;:::i;:::-;35807:19;35829:37;35842:4;:12;;;35856:9;35829:12;:37::i;:::-;35807:59;;35872:21;35910:9;35896:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35896:24:108;;35872:48;;35934:26;35977:9;35963:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35963:24:108;;35934:53;;36002:48;36007:30;36011:1;:10;;;36023:1;:13;;;36007:3;:30::i;:::-;36039:1;:10;;;36002:4;:48::i;:::-;35995:55;;:4;36058:219;36078:9;36074:1;:13;36058:219;;;36126:7;36134:1;36126:10;;;;;;;;:::i;:::-;;;;;;;36109:1;:10;;;36120:1;36109:13;;;;;;;;:::i;:::-;;;;;;;:27;;36101:68;;;;-1:-1:-1;;;36101:68:108;;12233:2:181;36101:68:108;;;12215:21:181;12272:2;12252:18;;;12245:30;12311;12291:18;;;12284:58;12359:18;;36101:68:108;12031:352:181;36101:68:108;36233:7;36241:1;36233:10;;;;;;;;:::i;:::-;;;;;;;36217:1;:10;;;36228:1;36217:13;;;;;;;;:::i;:::-;;;;;;;:26;36202:9;36212:1;36202:12;;;;;;;;:::i;:::-;;;;;;;;;;:41;36255:3;;36058:219;;;;36291:47;36296:29;36300:9;36311:1;:13;;;36296:3;:29::i;36291:47::-;36284:4;;;:54;36352:9;36347:557;36367:9;36363:1;:13;36347:557;;;36402:20;36450:1;:4;;;36433:1;:10;;;36444:1;36433:13;;;;;;;;:::i;:::-;;;;;;;36426:1;:4;;;:20;;;;:::i;:::-;36425:29;;;;:::i;:::-;36402:52;;36466:18;36487:37;36511:9;36521:1;36511:12;;;;;;;;:::i;:::-;;;;;;;36487;:23;;:37;;;;:::i;:::-;36466:58;-1:-1:-1;3443:4:104;36547:24:108;36466:58;36547:11;:24;:::i;:::-;36546:54;;;;:::i;:::-;36536:4;36541:1;36536:7;;;;;;;;:::i;:::-;;;;;;:64;;;;;36390:221;;36620:16;3443:4:104;36650::108;:13;;;36640:4;36645:1;36640:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;:::i;:::-;36639:53;;;;:::i;:::-;36620:72;;36736:8;36721:9;36731:1;36721:12;;;;;;;;:::i;:::-;;;;;;;:23;;;;:::i;:::-;36702:4;:13;;36716:1;36702:16;;;;;;;;:::i;:::-;;;;;;;;:42;;;;36794:8;36774:4;:14;;36789:1;36774:17;;;;;;;;:::i;:::-;;;;;;;;;:28;;;;:::i;:::-;36754:4;:14;;36769:1;36754:17;;;;;;;;:::i;:::-;;;;;;;;:48;;;;36842:4;36847:1;36842:7;;;;;;;;:::i;:::-;;;;;;;36827:9;36837:1;36827:12;;;;;;;;:::i;:::-;;;;;;;:22;;;;:::i;:::-;36812:9;36822:1;36812:12;;;;;;;;:::i;:::-;;;;;;;;;;:37;-1:-1:-1;36882:3:108;;36347:557;;;;36919:47;36924:29;36928:9;36939:1;:13;;;36924:3;:29::i;36919:47::-;36912:4;;;:54;;;37034:4;;37017:13;;;;36978:19;;-1:-1:-1;37034:4:108;;37002:11;;37034:4;37002:11;:::i;:::-;37001:29;;;;:::i;:::-;37000:38;;;;:::i;:::-;36978:60;;37052:11;37067:1;37052:16;37044:41;;;;-1:-1:-1;;;37044:41:108;;13380:2:181;37044:41:108;;;13362:21:181;13419:2;13399:18;;;13392:30;-1:-1:-1;;;13438:18:181;;;13431:42;13490:18;;37044:41:108;13178:336:181;37044:41:108;37105:15;:11;37119:1;37105:15;:::i;:::-;37091:29;;37150:13;37135:11;:28;;37127:68;;;;-1:-1:-1;;;37127:68:108;;13721:2:181;37127:68:108;;;13703:21:181;13760:2;13740:18;;;13733:30;13799:29;13779:18;;;13772:57;13846:18;;37127:68:108;13519:351:181;37127:68:108;37202:9;;;;:43;;-1:-1:-1;;;37202:43:108;;37221:10;37202:43;;;14049:51:181;14116:18;;;14109:34;;;-1:-1:-1;;;;;37202:18:108;;;;;;14022::181;;37202:43:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37257:9;37252:173;37272:9;37268:1;:13;37252:173;;;37293:85;37332:4;:17;;37350:1;37332:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37332:20:108;37355:10;37367:7;37375:1;37367:10;;;;;;;;:::i;:::-;;;;;;;37293:30;:85::i;:::-;37407:3;;37252:173;;;;37471:10;-1:-1:-1;;;;;37436:96:108;37461:4;:8;;;37436:96;37483:7;37492:4;37498:1;:4;;;37520:11;37504:1;:13;;;:27;;;;:::i;:::-;37436:96;;;;;;;;;:::i;:::-;;;;;;;;37546:11;35150:2412;-1:-1:-1;;;;;;;;;35150:2412:108:o;4239:335::-;4371:7;4387:28;4421:115;4455:4;4467:11;4486:10;4504:4;:12;;;;;;;;;;-1:-1:-1;;;;;4504:12:108;-1:-1:-1;;;;;4504:24:108;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4421;:115::i;:::-;-1:-1:-1;4386:150:108;4239:335;-1:-1:-1;;;;;4239:335:108:o;32194:1050::-;32361:12;;;;32397:29;;-1:-1:-1;;;32397:29:108;;32415:10;32397:29;;;8164:51:181;32319:16:108;;-1:-1:-1;;;;;32361:12:108;;;;32397:17;;8137:18:181;;32397:29:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32387:6;:39;;32379:65;;;;-1:-1:-1;;;32379:65:108;;;;;;;:::i;:::-;32470:17;;;:24;32508:30;;;32500:62;;;;-1:-1:-1;;;32500:62:108;;14970:2:181;32500:62:108;;;14952:21:181;15009:2;14989:18;;;14982:30;-1:-1:-1;;;15028:18:181;;;15021:49;15087:18;;32500:62:108;14768:343:181;32500:62:108;32569:25;32597:4;:13;;32569:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32616:19;32638:7;-1:-1:-1;;;;;32638:19:108;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32616:43;;32666:24;32693:56;32719:8;32729:6;32737:11;32693:25;:56::i;:::-;32777:14;;32666:83;;-1:-1:-1;32756:18:108;32797:299;32817:10;32813:1;:14;32797:299;;;32861:10;;32872:1;32861:13;;;;;;;:::i;:::-;;;;;;;32847:7;32855:1;32847:10;;;;;;;;:::i;:::-;;;;;;;:27;;32839:66;;;;-1:-1:-1;;;32839:66:108;;15318:2:181;32839:66:108;;;15300:21:181;15357:2;15337:18;;;15330:30;15396:28;15376:18;;;15369:56;15442:18;;32839:66:108;15116:350:181;32839:66:108;32946:7;32954:1;32946:10;;;;;;;;:::i;:::-;;;;;;;32932:8;32941:1;32932:11;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;32913:4;:13;;32927:1;32913:16;;;;;;;;:::i;:::-;;;;;;;;:43;;;;32964:85;33003:4;:17;;33021:1;33003:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33003:20:108;33026:10;33038:7;33046:1;33038:10;;;;;;;;:::i;32964:85::-;33078:3;;32797:299;;;-1:-1:-1;33102:36:108;;-1:-1:-1;;;33102:36:108;;33119:10;33102:36;;;14049:51:181;14116:18;;;14109:34;;;-1:-1:-1;;;;;33102:16:108;;;;;14022:18:181;;33102:36:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33166:8:108;;33176:10;;-1:-1:-1;33166:8:108;-1:-1:-1;33150:68:108;33188:7;33197:20;33211:6;33197:11;:20;:::i;:::-;33150:68;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;33232:7:108;32194:1050;-1:-1:-1;;;;;;;;;32194:1050:108:o;24814:1322::-;24985:13;;;;24961:7;;24985:13;;24984:14;24976:40;;;;-1:-1:-1;;;24976:40:108;;;;;;;:::i;:::-;25036:4;:13;;25050:12;25036:27;;;;;;;;;;:::i;:::-;;;;;;;;;25030:2;:33;;25022:59;;;;-1:-1:-1;;;25022:59:108;;16352:2:181;25022:59:108;;;16334:21:181;16391:2;16371:18;;;16364:30;-1:-1:-1;;;16410:18:181;;;16403:43;16463:18;;25022:59:108;16150:337:181;25022:59:108;25088:10;25104:13;25123:25;25151:4;:13;;25123:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25184:67;25202:4;25208:14;25224:12;25238:2;25242:8;25184:17;:67::i;:::-;25170:81;;-1:-1:-1;25170:81:108;-1:-1:-1;25265:11:108;;;;25257:34;;;;-1:-1:-1;;;25257:34:108;;16694:2:181;25257:34:108;;;16676:21:181;16733:2;16713:18;;;16706:30;-1:-1:-1;;;16752:18:181;;;16745:40;16802:18;;25257:34:108;16492:334:181;25257:34:108;25298:18;25385:4;:30;;25416:14;25385:46;;;;;;;;;;:::i;:::-;;;;;;;;;3443:4:104;25328::108;:13;;;25320:5;:21;;;;:::i;:::-;25319:57;;;;:::i;:::-;:112;;;;:::i;:::-;25298:133;;25502:10;25497:2;25470:8;25479:14;25470:24;;;;;;;;;;:::i;:::-;;;;;;;:29;;;;:::i;:::-;:42;;;;:::i;:::-;25438:4;:13;;25452:14;25438:29;;;;;;;;;;:::i;:::-;;;;;;;;:74;;;;25573:2;25548:8;25557:12;25548:22;;;;;;;;;;:::i;:::-;;;;;;;:27;;;;:::i;:::-;25518:4;:13;;25532:12;25518:27;;;;;;;;;;:::i;:::-;;;;;;;;;;:57;25585:15;;25581:112;;25676:10;25643:4;:14;;25658;25643:30;;;;;;;;;;:::i;:::-;;;;;;;;;:43;;;;:::i;:::-;25610:4;:14;;25625;25610:30;;;;;;;;;;:::i;:::-;;;;;;;;;;:76;25581:112;25707:16;25726:4;:17;;25744:14;25726:33;;;;;;;;;;:::i;:::-;;;;;;;;;;;25781:31;;-1:-1:-1;;;25781:31:108;;25801:10;25781:31;;;8164:51:181;-1:-1:-1;;;;;25726:33:108;;;;-1:-1:-1;25726:33:108;;25781:19;;8137:18:181;;25781:31:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25775:2;:37;;25767:67;;;;-1:-1:-1;;;25767:67:108;;17033:2:181;25767:67:108;;;17015:21:181;17072:2;17052:18;;;17045:30;-1:-1:-1;;;17091:18:181;;;17084:47;17148:18;;25767:67:108;16831:341:181;25767:67:108;25879:54;25918:9;25930:2;25879:30;:54::i;:::-;25699:241;25946:88;25985:4;:17;;26003:12;25985:31;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;25985:31:108;26019:10;26031:2;25946:30;:88::i;:::-;26056:8;;26046:69;;;17404:25:181;;;17460:2;17445:18;;17438:34;;;17520:4;17508:17;;;17488:18;;;17481:45;;;;17562:17;;;17557:2;17542:18;;17535:45;26066:10:108;;26056:8;26046:69;;17391:3:181;17376:19;26046:69:108;;;;;;;;-1:-1:-1;26129:2:108;;24814:1322;-1:-1:-1;;;;;;;;24814:1322:108:o;1041:118:101:-;1114:7;1136:18;1149:4;1136:12;:18::i;20967:930:108:-;21097:7;21112:25;21140:4;:13;;21112:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21181:15:108;;21112:41;;-1:-1:-1;;;21210:29:108;;;;-1:-1:-1;21202:67:108;;;;-1:-1:-1;;;21202:67:108;;17793:2:181;21202:67:108;;;17775:21:181;17832:2;17812:18;;;17805:30;17871:27;17851:18;;;17844:55;17916:18;;21202:67:108;17591:349:181;21202:67:108;21276:9;21288:18;21301:4;21288:12;:18::i;:::-;21276:30;;21312:28;21343:4;:30;;21312:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21380:10;21393:35;21398:26;21402:8;21412:11;21398:3;:26::i;:::-;21426:1;21393:4;:35::i;:::-;21380:48;;21439:9;21434:222;21454:11;21450:1;:15;21434:222;;;21481:7;21477:133;;;21528:7;;21536:1;21528:10;;;;;;;:::i;:::-;;;;;;;21514:8;21523:1;21514:11;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;21500:8;21509:1;21500:11;;;;;;;;:::i;:::-;;;;;;:38;;;;;21477:133;;;21591:7;;21599:1;21591:10;;;;;;;:::i;:::-;;;;;;;21577:8;21586:1;21577:11;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;21563:8;21572:1;21563:11;;;;;;;;:::i;:::-;;;;;;:38;;;;;21477:133;21638:3;;21434:222;;;;21661:10;21674:35;21679:26;21683:8;21693:11;21679:3;:26::i;:::-;21707:1;21674:4;:35::i;:::-;21661:48;;21715:19;21737:4;:12;;;;;;;;;;-1:-1:-1;;;;;21737:12:108;-1:-1:-1;;;;;21737:24:108;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21715:48;;21774:7;21770:123;;;21826:2;21811:11;21800:7;21826:2;21800;:7;:::i;:::-;21799:23;;;;:::i;:::-;21798:30;;;;:::i;:::-;21791:37;;;;;;;;;;;21770:123;21884:2;21869:11;21858:7;21863:2;21884;21858:7;:::i;23157:1249::-;23325:13;;;;23301:7;;23325:13;;23324:14;23316:40;;;;-1:-1:-1;;;23316:40:108;;;;;;;:::i;:::-;23370:16;23389:4;:17;;23407:14;23389:33;;;;;;;;;;:::i;:::-;;;;;;;;;;;23444:31;;-1:-1:-1;;;23444:31:108;;23464:10;23444:31;;;8164:51:181;-1:-1:-1;;;;;23389:33:108;;;;-1:-1:-1;23389:33:108;;23444:19;;8137:18:181;;23444:31:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23438:2;:37;;23430:72;;;;-1:-1:-1;;;23430:72:108;;18147:2:181;23430:72:108;;;18129:21:181;18186:2;18166:18;;;18159:30;-1:-1:-1;;;18205:18:181;;;18198:52;18267:18;;23430:72:108;17945:346:181;23430:72:108;23547:54;23586:9;23598:2;23547:30;:54::i;:::-;23362:246;23614:10;23630:13;23649:25;23677:4;:13;;23649:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23710:64;23725:4;23731:14;23747:12;23761:2;23765:8;23710:14;:64::i;:::-;23696:78;;-1:-1:-1;23696:78:108;-1:-1:-1;23788:11:108;;;;23780:34;;;;-1:-1:-1;;;23780:34:108;;18498:2:181;23780:34:108;;;18480:21:181;18537:2;18517:18;;;18510:30;-1:-1:-1;;;18556:18:181;;;18549:40;18606:18;;23780:34:108;18296:334:181;23780:34:108;23821:18;23908:4;:30;;23939:12;23908:44;;;;;;;;;;:::i;:::-;;;;;;;;;3443:4:104;23851::108;:13;;;23843:5;:21;;;;:::i;:::-;23842:57;;;;:::i;:::-;:110;;;;:::i;:::-;23821:131;;24018:2;23991:8;24000:14;23991:24;;;;;;;;;;:::i;:::-;;;;;;;:29;;;;:::i;:::-;23959:4;:13;;23973:14;23959:29;;;;;;;;;;:::i;:::-;;;;;;;;:61;;;;24086:10;24081:2;24056:8;24065:12;24056:22;;;;;;;;;;:::i;:::-;;;;;;;:27;;;;:::i;:::-;:40;;;;:::i;:::-;24026:4;:13;;24040:12;24026:27;;;;;;;;;;:::i;:::-;;;;;;;;;;:70;24106:15;;24102:108;;24193:10;24162:4;:14;;24177:12;24162:28;;;;;;;;;;:::i;:::-;;;;;;;;;:41;;;;:::i;:::-;24131:4;:14;;24146:12;24131:28;;;;;;;;;;:::i;:::-;;;;;;;;;;:72;24102:108;24216:88;24255:4;:17;;24273:12;24255:31;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;24255:31:108;24289:10;24301:2;24216:30;:88::i;:::-;24326:8;;24316:69;;;17404:25:181;;;17460:2;17445:18;;17438:34;;;17520:4;17508:17;;;17488:18;;;17481:45;;;;17562:17;;;17557:2;17542:18;;17535:45;24336:10:108;;24326:8;24316:69;;17391:3:181;17376:19;24316:69:108;17177:409:181;29116:2634:108;29260:13;;;;29236:7;;29260:13;;29259:14;29251:40;;;;-1:-1:-1;;;29251:40:108;;;;;;;:::i;:::-;29318:17;;;:24;29356:14;;:27;;29348:62;;;;-1:-1:-1;;;29348:62:108;;18837:2:181;29348:62:108;;;18819:21:181;18876:2;18856:18;;;18849:30;-1:-1:-1;;;18895:18:181;;;18888:52;18957:18;;29348:62:108;18635:346:181;29348:62:108;29438:28;29469:166;;;;;;;;29496:1;29469:166;;;;29505:1;29469:166;;;;29514:1;29469:166;;;;29523:18;29536:4;29523:12;:18::i;:::-;29469:166;;;;29549:4;:12;;;;;;;;;;-1:-1:-1;;;;;29549:12:108;-1:-1:-1;;;;;29469:166:108;;;;;29569:1;29469:166;;;;29578:4;:13;;29469:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29599:4;:30;;29469:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29438:197;;29657:1;:9;;;-1:-1:-1;;;;;29657:21:108;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29641:13;;;:39;;;29690:18;29686:94;;29725:48;29730:30;29734:1;:10;;;29746:1;:13;;;29730:3;:30::i;:::-;29762:1;:10;;;29725:4;:48::i;:::-;29718:55;;29686:94;29786:28;29831:9;29817:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29817:24:108;;29786:55;;29853:9;29848:469;29868:9;29864:1;:13;29848:469;;;29897:13;;;;:18;;;:37;;;29919:7;29927:1;29919:10;;;;;;;;:::i;:::-;;;;;;;29933:1;29919:15;;29897:37;29889:68;;;;-1:-1:-1;;;29889:68:108;;19188:2:181;29889:68:108;;;19170:21:181;19227:2;19207:18;;;19200:30;-1:-1:-1;;;19246:18:181;;;19239:48;19304:18;;29889:68:108;18986:342:181;29889:68:108;30041:7;30049:1;30041:10;;;;;;;;:::i;:::-;;;;;;;30055:1;30041:15;30037:182;;30068:12;30083:4;:17;;30101:1;30083:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30083:20:108;30068:35;;30152:58;30191:5;30199:7;30207:1;30199:10;;;;;;;;:::i;:::-;;;;;;;30152:30;:58::i;:::-;30058:161;30037:182;30260:7;30268:1;30260:10;;;;;;;;:::i;:::-;;;;;;;30244:1;:10;;;30255:1;30244:13;;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;30227:11;30239:1;30227:14;;;;;;;;:::i;:::-;;;;;;;;;;:43;30299:3;;29848:469;;;;30360:49;30365:31;30369:11;30382:1;:13;;;30365:3;:31::i;:::-;30398:1;:10;;;30360:4;:49::i;:::-;30353:4;;;:56;;;30430:4;;-1:-1:-1;30415:41:108;;;;-1:-1:-1;;;30415:41:108;;19535:2:181;30415:41:108;;;19517:21:181;19574:2;19554:18;;;19547:30;-1:-1:-1;;;19593:18:181;;;19586:47;19650:18;;30415:41:108;19333:341:181;30415:41:108;30536:4;;;;30529;;;:11;-1:-1:-1;30584:9:108;30570:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30570:24:108;;30546:48;;30605:1;:13;;;30622:1;30605:18;30601:765;;30633:19;30655:37;30668:4;:12;;;30682:9;30655:12;:37::i;:::-;30633:59;;30705:9;30700:500;30720:9;30716:1;:13;30700:500;;;30743:20;30791:1;:4;;;30774:1;:10;;;30785:1;30774:13;;;;;;;;:::i;:::-;;;;;;;30767:1;:4;;;:20;;;;:::i;:::-;30766:29;;;;:::i;:::-;30743:52;;3443:4:104;30831:39:108;30855:11;30867:1;30855:14;;;;;;;;:::i;30831:39::-;30816:55;;:11;:55;:::i;:::-;30815:85;;;;:::i;:::-;30805:4;30810:1;30805:7;;;;;;;;:::i;:::-;;;;;;:95;;;;;30910:16;3443:4:104;30940::108;:13;;;30930:4;30935:1;30930:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;:::i;:::-;30929:53;;;;:::i;:::-;30910:72;;31028:8;31011:11;31023:1;31011:14;;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;30992:4;:13;;31006:1;30992:16;;;;;;;;:::i;:::-;;;;;;;;:44;;;;31086:8;31066:4;:14;;31081:1;31066:17;;;;;;;;:::i;:::-;;;;;;;;;:28;;;;:::i;:::-;31046:4;:14;;31061:1;31046:17;;;;;;;;:::i;:::-;;;;;;;;:48;;;;31138:4;31143:1;31138:7;;;;;;;;:::i;:::-;;;;;;;31121:11;31133:1;31121:14;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;31104:11;31116:1;31104:14;;;;;;;;:::i;:::-;;;;;;;;;;:41;-1:-1:-1;;31178:3:108;;30700:500;;;;31214:49;31219:31;31223:11;31236:1;:13;;;31219:3;:31::i;:::-;31252:1;:10;;;31214:4;:49::i;:::-;31207:4;;;:56;-1:-1:-1;30601:765:108;;;31332:27;;;;:13;;;;:27;;;;;:::i;:::-;;30601:765;31372:14;31396:1;:13;;;31413:1;31396:18;31392:120;;-1:-1:-1;31433:4:108;;;;31392:120;;;31501:4;;31484:13;;;;31469:4;;;;:11;;31501:4;;31469:11;:::i;:::-;31468:29;;;;:::i;:::-;31467:38;;;;:::i;:::-;31458:47;;31392:120;31536:9;31526:6;:19;;31518:42;;;;-1:-1:-1;;;31518:42:108;;19881:2:181;31518:42:108;;;19863:21:181;19920:2;19900:18;;;19893:30;-1:-1:-1;;;19939:18:181;;;19932:40;19989:18;;31518:42:108;19679:334:181;31518:42:108;31600:9;;;;:34;;-1:-1:-1;;;31600:34:108;;31615:10;31600:34;;;14049:51:181;14116:18;;;14109:34;;;-1:-1:-1;;;;;31600:14:108;;;;;;14022:18:181;;31600:34:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31669:10;-1:-1:-1;;;;;31646:79:108;31659:4;:8;;;31646:79;31681:7;31690:4;31696:1;:4;;;31718:6;31702:1;:13;;;:22;;;;:::i;:::-;31646:79;;;;;;;;;:::i;:::-;;;;;;;;31739:6;29116:2634;-1:-1:-1;;;;;;;;29116:2634:108:o;15430:240::-;15569:10;15596:69;15611:4;15617:14;15633:12;15647:2;15651:4;:13;;15596:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:14;:69::i;19417:204::-;19509:16;19540:76;19566:4;:13;;19540:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19581:6;19589:4;:12;;;;;;;;;;-1:-1:-1;;;;;19589:12:108;-1:-1:-1;;;;;19589:24:108;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19540:25;:76::i;33626:1089::-;33807:12;;;;33849:29;;-1:-1:-1;;;33849:29:108;;33867:10;33849:29;;;8164:51:181;33774:7:108;;-1:-1:-1;;;;;33807:12:108;;;;33849:17;;8137:18:181;;33849:29:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33834:11;:44;;33826:70;;;;-1:-1:-1;;;33826:70:108;;;;;;;:::i;:::-;33922:17;;;:24;33960:22;;;;-1:-1:-1;33952:44:108;;;;-1:-1:-1;;;33952:44:108;;20220:2:181;33952:44:108;;;20202:21:181;20259:1;20239:18;;;20232:29;-1:-1:-1;;;20277:18:181;;;20270:39;20326:18;;33952:44:108;20018:332:181;33952:44:108;34003:19;34025:7;-1:-1:-1;;;;;34025:19:108;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34003:43;;34054:10;34066:13;34083:70;34110:4;34116:11;34129:10;34141:11;34083:26;:70::i;:::-;34053:100;;;;34174:9;34168:2;:15;;34160:42;;;;-1:-1:-1;;;34160:42:108;;20557:2:181;34160:42:108;;;20539:21:181;20596:2;20576:18;;;20569:30;-1:-1:-1;;;20615:18:181;;;20608:44;20669:18;;34160:42:108;20355:338:181;34160:42:108;34209:16;3443:4:104;34237::108;:13;;;34229:5;:21;;;;:::i;:::-;34228:51;;;;:::i;:::-;34209:70;-1:-1:-1;34342:13:108;34209:70;34342:2;:13;:::i;:::-;34313:4;:13;;34327:10;34313:25;;;;;;;;;;:::i;:::-;;;;;;;;;:43;;;;:::i;:::-;34285:4;:13;;34299:10;34285:25;;;;;;;;;;:::i;:::-;;;;;;;;;;:71;34366:13;;34362:100;;34447:8;34418:4;:14;;34433:10;34418:26;;;;;;;;;;:::i;:::-;;;;;;;;;:37;;;;:::i;:::-;34389:4;:14;;34404:10;34389:26;;;;;;;;;;:::i;:::-;;;;;;;;;;:66;34362:100;34467:41;;-1:-1:-1;;;34467:41:108;;34484:10;34467:41;;;14049:51:181;14116:18;;;14109:34;;;-1:-1:-1;;;;;34467:16:108;;;;;14022:18:181;;34467:41:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34514:86;34553:4;:17;;34571:10;34553:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;34553:29:108;34585:10;34597:2;34514:30;:86::i;:::-;34631:8;;34612:82;;;20927:25:181;;;20983:2;20968:18;;20961:34;;;21043:4;21031:17;;21011:18;;;21004:45;21080:2;21065:18;;21058:34;;;34612:82:108;;34641:10;;34631:8;34612:82;;;;;;20914:3:181;34612:82:108;;;-1:-1:-1;34708:2:108;;33626:1089;-1:-1:-1;;;;;;;;;33626:1089:108:o;707:135:101:-;773:7;4566:3:104;795:18:101;808:4;795:12;:18::i;:::-;:42;;;;:::i;12573:335:108:-;12640:7;12655:9;12667:35;12672:9;12676:4;12672:3;:9::i;:::-;12683:18;12696:4;12683:12;:18::i;:::-;12667:4;:35::i;:::-;12655:47;;12708:15;12726:4;:12;;;;;;;;;;-1:-1:-1;;;;;12726:12:108;12708:30;;12744:14;12761:7;-1:-1:-1;;;;;12761:19:108;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12744:38;-1:-1:-1;12792:11:108;;12788:102;;12877:6;12826:46;3133:2:104;12826::108;:46;:::i;:::-;12821:52;;:1;:52;:::i;:::-;12820:63;;;;:::i;12788:102::-;-1:-1:-1;12902:1:108;;12573:335;-1:-1:-1;;;;12573:335:108:o;22550:153::-;22631:7;22679:13;22691:1;22679:9;:13;:::i;:::-;22678:19;;22696:1;22678:19;:::i;:::-;22654;22664:9;22654:7;:19;:::i;:::-;22653:45;;;;:::i;11512:464::-;11672:15;;11714:27;;11626:16;;11672:15;11701:40;;11693:73;;;;-1:-1:-1;;;11693:73:108;;22679:2:181;11693:73:108;;;22661:21:181;22718:2;22698:18;;;22691:30;-1:-1:-1;;;22737:18:181;;;22730:50;22797:18;;11693:73:108;22477:344:181;11693:73:108;11772:19;11808:9;11794:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11794:24:108;;11772:46;;11829:9;11824:133;11844:9;11840:1;:13;11824:133;;;11887:20;11908:1;11887:23;;;;;;;;:::i;:::-;;;;;;;11873:8;11882:1;11873:11;;;;;;;;:::i;:::-;;;;;;;:37;;;;:::i;:::-;11865:2;11868:1;11865:5;;;;;;;;:::i;:::-;;;;;;;;;;:45;11939:3;;11824:133;;;-1:-1:-1;11969:2:108;11512:464;-1:-1:-1;;;;11512:464:108:o;9598:1376::-;9702:9;;9667:7;;;;9732:98;9752:9;9748:1;:13;9732:98;;;9778:2;9781:1;9778:5;;;;;;;;:::i;:::-;;;;;;;9773:10;;;;;:::i;:::-;;-1:-1:-1;9812:3:108;;9732:98;;;;9839:1;9844;9839:6;9835:35;;9862:1;9855:8;;;;;;9835:35;9876:13;9907:1;9876:13;9927;9931:9;9927:1;:13;:::i;:::-;9914:26;;9952:9;9947:744;4231:3:104;9963:1:108;:28;9947:744;;;10016:1;10003:10;10025:374;10045:9;10041:1;:13;10025:374;;;10093:9;10085:2;10088:1;10085:5;;;;;;;;:::i;:::-;;;;;;;:17;;;;:::i;:::-;10074:6;10079:1;10074:2;:6;:::i;:::-;10073:30;;;;:::i;:::-;10068:35;-1:-1:-1;10377:3:108;;10025:374;;;;10414:1;10406:9;;10584:2;10567:9;10579:1;10567:13;;;;:::i;:::-;10566:20;;;;:::i;:::-;4566:3:104;10537:1:108;10507:26;4566:3:104;10507:2:108;:26;:::i;:::-;10506:32;;;;:::i;:::-;10505:58;;;;:::i;:::-;:81;;;;:::i;:::-;10490:1;10472:14;10477:9;10472:2;:14;:::i;:::-;4566:3:104;10438:6:108;10443:1;10438:2;:6;:::i;:::-;10437:32;;;;:::i;:::-;:49;;;;:::i;:::-;10436:55;;;;:::i;:::-;10435:153;;;;:::i;:::-;10423:165;-1:-1:-1;10600:16:108;10423:165;10610:5;10600:9;:16::i;:::-;10596:49;;;10635:1;10628:8;;;;;;;;;;;10596:49;-1:-1:-1;10673:3:108;;9947:744;;;-1:-1:-1;10940:29:108;;-1:-1:-1;;;10940:29:108;;23028:2:181;10940:29:108;;;23010:21:181;23067:2;23047:18;;;23040:30;-1:-1:-1;;;23086:18:181;;;23079:49;23145:18;;10940:29:108;22826:343:181;911:140:107;976:7;999:1;995;:5;991:38;;;1017:5;1021:1;1017;:5;:::i;:::-;1010:12;;;;991:38;1041:5;1045:1;1041;:5;:::i;3194:444:102:-;3353:7;3364:1;3353:12;3349:39;;3194:444;;;:::o;3349:39::-;-1:-1:-1;;;;;3445:20:102;;3441:76;;3474:43;;-1:-1:-1;;;3474:43:102;;;;;;;;;;;3441:76;3573:60;3611:6;3620:3;3625:7;3573:22;:60::i;:::-;3194:444;;;:::o;4578:509:108:-;4735:7;4744;4759:10;4775:12;4793:16;4839:71;4867:4;4873:10;4885:11;4898;4839:27;:71::i;:::-;4816:94;;;;;;;;;;;;4966:17;5051:2;5006:4;:30;;5037:10;5006:42;;;;;;;;;;:::i;:::-;;;;;;;;;4998:4;4987:8;:15;;;;:::i;:::-;4986:62;;;;:::i;:::-;:67;;;;:::i;:::-;5068:2;;;;-1:-1:-1;4578:509:108;;-1:-1:-1;;;;;;;;4578:509:108:o;19625:488::-;19763:16;19805:11;19795:6;:21;;19787:53;;;;-1:-1:-1;;;19787:53:108;;23376:2:181;19787:53:108;;;23358:21:181;23415:2;23395:18;;;23388:30;-1:-1:-1;;;23434:18:181;;;23427:49;23493:18;;19787:53:108;23174:343:181;19787:53:108;19869:15;;19847:19;19869:15;19917:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19917:26:108;;19890:53;;19955:9;19950:139;19970:11;19966:1;:15;19950:139;;;20031:11;20021:6;20007:8;20016:1;20007:11;;;;;;;;:::i;:::-;;;;;;;:20;;;;:::i;:::-;20006:36;;;;:::i;:::-;19993:7;20001:1;19993:10;;;;;;;;:::i;:::-;;;;;;;;;;:49;20071:3;;19950:139;;18274:837;18448:10;18460:13;18507:12;18489:30;;:14;:30;;;18481:66;;;;-1:-1:-1;;;18481:66:108;;23724:2:181;18481:66:108;;;23706:21:181;23763:2;23743:18;;;23736:30;-1:-1:-1;;;23782:18:181;;;23775:53;23845:18;;18481:66:108;23522:347:181;18481:66:108;18553:28;18584:4;:30;;18553:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18620:19;18642:26;18646:8;18656:11;18642:3;:26::i;:::-;18620:48;;18699:2;:9;18682:14;:26;;;:54;;;;;18727:2;:9;18712:12;:24;;;18682:54;18674:85;;;;-1:-1:-1;;;18674:85:108;;;;;;;:::i;:::-;18766:9;18778:18;18791:4;18778:12;:18::i;:::-;18766:30;;18802:10;18815:11;18820:2;18824:1;18815:4;:11::i;:::-;18802:24;;18877:11;18889:12;18877:25;;;;;;;;;;:::i;:::-;;;;;;;18872:2;:30;;;;:::i;:::-;18852:2;18855:12;18852:16;;;;;;;;;;:::i;:::-;;;;;;;:51;;;;:::i;:::-;18833:2;18836:12;18833:16;;;;;;;;;;:::i;:::-;;;;;;:70;;;;;18909:9;18921:32;18927:1;18930:14;18946:2;18950;18921:5;:32::i;:::-;18909:44;;18974:2;18977:14;18974:18;;;;;;;;;;:::i;:::-;;;;;;;18965:1;18969;18965:5;;;;:::i;:::-;18964:28;;;;:::i;:::-;18959:33;;3443:4:104;19012::108;:12;;;19007:2;:17;;;;:::i;:::-;19006:47;;;;:::i;:::-;18998:55;;19079:11;19091:14;19079:27;;;;;;;;;;:::i;:::-;;;;;;;19070:5;19065:2;:10;;;;:::i;:::-;19064:42;;;;:::i;:::-;19059:47;;18475:636;;;;;18274:837;;;;;;;;:::o;2052:843:102:-;2182:7;2193:1;2182:12;2178:39;;2052:843;;:::o;2178:39::-;-1:-1:-1;;;;;2274:20:102;;2270:105;;2311:57;;-1:-1:-1;;;2311:57:102;;;;;;;;;;;2270:105;2525:30;;-1:-1:-1;;;2525:30:102;;2549:4;2525:30;;;8164:51:181;2419:6:102;;2381:20;;-1:-1:-1;;;;;2525:15:102;;;;;8137:18:181;;2525:30:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2506:49;-1:-1:-1;2597:58:102;-1:-1:-1;;;;;2597:22:102;;2620:10;2640:4;2647:7;2597:22;:58::i;:::-;2756:30;;-1:-1:-1;;;2756:30:102;;2780:4;2756:30;;;8164:51:181;2801:7:102;;2789:8;;-1:-1:-1;;;;;2756:15:102;;;;;8137:18:181;;2756:30:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;;;:::i;:::-;:52;2752:139;;2825:59;;-1:-1:-1;;;2825:59:102;;;;;;;;;;;2752:139;2123:772;;2052:843;;:::o;1367:561:101:-;1478:16;;;;1541:12;;;;1611:13;;;;1541:12;;1478:16;1675:14;;;;;;:38;;;1711:2;1693:15;:20;1675:38;1671:253;;;1723:10;1736:4;:17;;;1723:30;;1906:2;1902;1898:11;1891:2;1878:11;1874:20;1864:8;1860:35;1845:11;1841:2;1837:20;1833:2;1829:29;1825:71;1821:89;1809:101;;1799:119;1671:253;1459:469;;1367:561;;;:::o;16896:712:108:-;17067:10;17079:13;17100:28;17131:4;:30;;17100:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17167:19;17189:26;17193:8;17203:11;17189:3;:26::i;:::-;17167:48;;17246:2;:9;17229:14;:26;;;:54;;;;;17274:2;:9;17259:12;:24;;;17229:54;17221:85;;;;-1:-1:-1;;;17221:85:108;;;;;;;:::i;:::-;17312:9;17359:2;17362:14;17359:18;;;;;;;;;;:::i;:::-;;;;;;;17329:11;17341:14;17329:27;;;;;;;;;;:::i;:::-;;;;;;;17324:2;:32;;;;:::i;:::-;:53;;;;:::i;:::-;17312:65;;17383:9;17395:61;17400:18;17413:4;17400:12;:18::i;:::-;17420:14;17436:12;17450:1;17453:2;17395:4;:61::i;:::-;17383:73;;17490:1;17486;17467:2;17470:12;17467:16;;;;;;;;;;:::i;:::-;;;;;;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;17462:29;;3443:4:104;17511::108;:12;;;17506:2;:17;;;;:::i;:::-;17505:47;;;;:::i;:::-;17497:55;;17578:11;17590:12;17578:25;;;;;;;;;;:::i;:::-;;;;;;;17569:5;17564:2;:10;;;;:::i;:::-;17563:40;;;;:::i;:::-;17558:45;;17094:514;;;;16896:712;;;;;;;;:::o;12224:141::-;12279:16;12310:50;12314:4;:13;;12310:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12329:4;:30;;12310:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:3;:50::i;589:130:107:-;651:4;690:5;671:16;682:1;685;671:10;:16::i;:::-;:24;;589:130;-1:-1:-1;;;589:130:107:o;763:205:56:-;902:58;;-1:-1:-1;;;;;14067:32:181;;902:58:56;;;14049:51:181;14116:18;;;14109:34;;;875:86:56;;895:5;;-1:-1:-1;;;925:23:56;14022:18:181;;902:58:56;;;;-1:-1:-1;;902:58:56;;;;;;;;;;;;;;-1:-1:-1;;;;;902:58:56;-1:-1:-1;;;;;;902:58:56;;;;;;;;;;875:19;:86::i;5387:1675:108:-;5565:7;5580;5595;5710:19;5732:9;5736:4;5732:3;:9::i;:::-;5710:31;;5769:2;:9;5756:10;:22;;;5748:53;;;;-1:-1:-1;;;5748:53:108;;;;;;;:::i;:::-;5808:40;5851:46;;;;;;;;5883:1;5851:46;;;;5886:1;5851:46;;;;5889:1;5851:46;;;;5892:1;5851:46;;;;5895:1;5851:46;;;5808:89;;5916:18;5929:4;5916:12;:18::i;:::-;5903:10;;;:31;;;5947:20;;5952:2;;5947:4;:20::i;:::-;5940:27;;;6011:11;;5989:18;;:11;:18;:::i;:::-;5988:34;;;;:::i;:::-;5980:4;;:43;;;;:::i;:::-;5973:4;;;:50;6053:14;;:2;;:14;;;;;;;;;;:::i;:::-;;;;;;;6038:11;:29;;6030:59;;;;-1:-1:-1;;;6030:59:108;;24076:2:181;6030:59:108;;;24058:21:181;24115:2;24095:18;;;24088:30;-1:-1:-1;;;24134:18:181;;;24127:47;24191:18;;6030:59:108;23874:341:181;6030:59:108;6105:39;6111:1;:10;;;6123;6135:2;6139:1;:4;;;6105:5;:39::i;:::-;6096:6;;;:48;6194:9;;6151:26;;6180:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6180:24:108;;6151:53;;6227:37;6240:4;:12;;;6254:2;:9;6227:12;:37::i;:::-;6211:13;;;:53;6371:9;;6357:11;6386:474;6406:3;6402:1;:7;6386:474;;;6421:11;6435:2;6438:1;6435:5;;;;;;;;:::i;:::-;;;;;;;6421:19;;3443:4:104;6760:1:108;:13;;;6682:10;6677:15;;:1;:15;6676:80;;6751:4;;6743;;;;6737:10;;:3;:10;:::i;:::-;6736:19;;;;:::i;:::-;6730:25;;:3;:25;:::i;:::-;6676:80;;;6719:6;;;;6712:4;;6704;;;;6698:10;;:3;:10;:::i;:::-;6697:19;;;;:::i;:::-;:28;;;;:::i;:::-;6675:98;;;;:::i;:::-;6674:138;;;;:::i;:::-;6659:154;;:3;:154;:::i;:::-;6636:9;6646:1;6636:12;;;;;;;;:::i;:::-;;;;;;;;;;:177;-1:-1:-1;6842:3:108;;6386:474;;;;6866:10;6903:46;6909:1;:10;;;6921;6933:9;6944:1;:4;;;6903:5;:46::i;:::-;6879:9;6889:10;6879:21;;;;;;;;;;:::i;:::-;;;;;;;:70;;;;:::i;:::-;6866:83;;6972:4;:30;;7003:10;6972:42;;;;;;;;;;:::i;:::-;;;;;;;;;6966:1;6961:2;:6;;;;:::i;:::-;6960:55;;;;:::i;:::-;6955:60;;7030:2;7034:1;:6;;;7042:2;7045:10;7042:14;;;;;;;;;;:::i;:::-;;;;;;;7022:35;;;;;;;;;;;5387:1675;;;;;;;;:::o;7906:1296::-;8060:9;;8025:7;;8083:22;;;;-1:-1:-1;8075:50:108;;;;-1:-1:-1;;;8075:50:108;;24422:2:181;8075:50:108;;;24404:21:181;24461:2;24441:18;;;24434:30;-1:-1:-1;;;24480:18:181;;;24473:45;24535:18;;8075:50:108;24220:339:181;8075:50:108;8144:1;8132:9;;8179:13;8183:9;8179:1;:13;:::i;:::-;8166:26;;8204:9;8199:419;8219:9;8215:1;:13;8199:419;;;8249:10;8244:15;;:1;:15;8240:332;;8276:2;8279:1;8276:5;;;;;;;;:::i;:::-;;;;;;;8271:10;;;;;:::i;:::-;;;8314:9;8306:2;8309:1;8306:5;;;;;;;;:::i;:::-;;;;;;;:17;;;;:::i;:::-;8296:5;8300:1;8296;:5;:::i;:::-;8295:29;;;;:::i;:::-;8291:33;;8240:332;8600:3;;8199:419;;;-1:-1:-1;8662:14:108;8667:9;8662:2;:14;:::i;:::-;4566:3:104;8628:5:108;8632:1;8628;:5;:::i;:::-;:29;;;;:::i;:::-;8627:50;;;;:::i;:::-;8623:54;-1:-1:-1;8684:9:108;8731:2;8702:25;4566:3:104;8702:1:108;:25;:::i;:::-;8701:32;;;;:::i;:::-;8696:38;;:1;:38;:::i;:::-;8684:50;-1:-1:-1;8740:13:108;8932:1;8740:13;8939:213;4231:3:104;8955:1:108;:28;8939:213;;;9003:1;8995:9;;9047:1;9043;9034;9038;9034:5;;;;:::i;:::-;9033:11;;;;:::i;:::-;:15;;;;:::i;:::-;9027:1;9018:5;9022:1;;9018:5;:::i;:::-;9017:11;;;;:::i;:::-;9016:33;;;;:::i;:::-;9012:37;-1:-1:-1;9061:16:108;9012:37;9071:5;9061:9;:16::i;:::-;9057:49;;;-1:-1:-1;9096:1:108;-1:-1:-1;9089:8:108;;-1:-1:-1;;;;;;9089:8:108;9057:49;9134:3;;8939:213;;;-1:-1:-1;9157:40:108;;-1:-1:-1;;;9157:40:108;;24766:2:181;9157:40:108;;;24748:21:181;24805:2;24785:18;;;24778:30;24844:32;24824:18;;;24817:60;24894:18;;9157:40:108;24564:354:181;974:241:56;1139:68;;-1:-1:-1;;;;;25181:15:181;;;1139:68:56;;;25163:34:181;25233:15;;25213:18;;;25206:43;25265:18;;;25258:34;;;1112:96:56;;1132:5;;-1:-1:-1;;;1162:27:56;25098:18:181;;1139:68:56;24923:375:181;13522:1503:108;13710:9;;13675:7;;13733:30;;;;;;;;13725:66;;;;-1:-1:-1;;;13725:66:108;;23724:2:181;13725:66:108;;;23706:21:181;23763:2;23743:18;;;23736:30;-1:-1:-1;;;23782:18:181;;;23775:53;23845:18;;13725:66:108;23522:347:181;13725:66:108;13822:9;13805:14;:26;;;:54;;;;;13850:9;13835:12;:24;;;13805:54;13797:82;;;;-1:-1:-1;;;13797:82:108;;25505:2:181;13797:82:108;;;25487:21:181;25544:2;25524:18;;;25517:30;-1:-1:-1;;;25563:18:181;;;25556:45;25618:18;;13797:82:108;25303:339:181;13797:82:108;13886:9;13898:18;13903:2;13907:8;13898:4;:18::i;:::-;13886:30;-1:-1:-1;13886:30:108;13922:9;;13969:20;13981:8;13969:9;:20;:::i;:::-;13956:33;;13996:10;14017:9;14012:559;14032:9;14028:1;:13;14012:559;;;14062:14;14057:19;;:1;:19;14053:186;;14093:1;14088:6;;14053:186;;;14118:12;14113:17;;:1;:17;14109:130;;14147:2;14150:1;14147:5;;;;;;;;:::i;:::-;;;;;;;14142:10;;14109:130;;;14199:3;;14012:559;;14109:130;14246:7;14251:2;14246:7;;:::i;:::-;;-1:-1:-1;14276:14:108;14281:9;14276:2;:14;:::i;:::-;14266:5;14270:1;14266;:5;:::i;:::-;14265:26;;;;:::i;:::-;14261:30;-1:-1:-1;14553:3:108;;14012:559;;;-1:-1:-1;14615:14:108;14620:9;14615:2;:14;:::i;:::-;4566:3:104;14581:5:108;14585:1;14581;:5;:::i;:::-;:29;;;;:::i;:::-;14580:50;;;;:::i;:::-;14576:54;-1:-1:-1;14636:9:108;14683:2;14654:25;4566:3:104;14654:1:108;:25;:::i;:::-;14653:32;;;;:::i;:::-;14648:38;;:1;:38;:::i;:::-;14636:50;-1:-1:-1;14692:13:108;14723:1;14692:13;14762:213;4231:3:104;14778:1:108;:28;14762:213;;;14826:1;14818:9;;14870:1;14866;14857;14861;14857:5;;;;:::i;:::-;14856:11;;;;:::i;:::-;:15;;;;:::i;:::-;14850:1;14841:5;14845:1;;14841:5;:::i;:::-;14840:11;;;;:::i;:::-;14839:33;;;;:::i;:::-;14835:37;-1:-1:-1;14884:16:108;14835:37;14894:5;14884:9;:16::i;:::-;14880:49;;;-1:-1:-1;14919:1:108;-1:-1:-1;14912:8:108;;-1:-1:-1;;;;;;;;14912:8:108;14880:49;14957:3;;14762:213;;3747:706:56;4166:23;4192:69;4220:4;4192:69;;;;;;;;;;;;;;;;;4200:5;-1:-1:-1;;;;;4192:27:56;;;:69;;;;;:::i;:::-;4275:17;;4166:95;;-1:-1:-1;4275:21:56;4271:176;;4370:10;4359:30;;;;;;;;;;;;:::i;:::-;4351:85;;;;-1:-1:-1;;;4351:85:56;;26099:2:181;4351:85:56;;;26081:21:181;26138:2;26118:18;;;26111:30;26177:34;26157:18;;;26150:62;-1:-1:-1;;;26228:18:181;;;26221:40;26278:19;;4351:85:56;25897:406:181;3873:223:57;4006:12;4037:52;4059:6;4067:4;4073:1;4076:12;4006;5241;5255:23;5282:6;-1:-1:-1;;;;;5282:11:57;5301:5;5308:4;5282:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5240:73;;;;5330:69;5357:6;5365:7;5374:10;5386:12;5330:26;:69::i;:::-;5323:76;4960:446;-1:-1:-1;;;;;;;4960:446:57:o;7466:628::-;7646:12;7674:7;7670:418;;;7701:10;:17;7722:1;7701:22;7697:286;;-1:-1:-1;;;;;1465:19:57;;;7908:60;;;;-1:-1:-1;;;7908:60:57;;27464:2:181;7908:60:57;;;27446:21:181;27503:2;27483:18;;;27476:30;27542:31;27522:18;;;27515:59;27591:18;;7908:60:57;27262:353:181;7908:60:57;-1:-1:-1;8003:10:57;7996:17;;7670:418;8044:33;8052:10;8064:12;8775:17;;:21;8771:379;;9003:10;8997:17;9059:15;9046:10;9042:2;9038:19;9031:44;8771:379;9126:12;9119:20;;-1:-1:-1;;;9119:20:57;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:248:181;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:181;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:181:o;449:367::-;512:8;522:6;576:3;569:4;561:6;557:17;553:27;543:55;;594:1;591;584:12;543:55;-1:-1:-1;617:20:181;;660:18;649:30;;646:50;;;692:1;689;682:12;646:50;729:4;721:6;717:17;705:29;;789:3;782:4;772:6;769:1;765:14;757:6;753:27;749:38;746:47;743:67;;;806:1;803;796:12;743:67;449:367;;;;;:::o;821:642::-;934:6;942;950;958;966;1019:3;1007:9;998:7;994:23;990:33;987:53;;;1036:1;1033;1026:12;987:53;1072:9;1059:23;1049:33;;1133:2;1122:9;1118:18;1105:32;1160:18;1152:6;1149:30;1146:50;;;1192:1;1189;1182:12;1146:50;1231:70;1293:7;1284:6;1273:9;1269:22;1231:70;:::i;:::-;821:642;;1320:8;;-1:-1:-1;1205:96:181;;1402:2;1387:18;;1374:32;;1453:2;1438:18;;;1425:32;;-1:-1:-1;821:642:181;-1:-1:-1;;;;821:642:181:o;1468:156::-;1534:20;;1594:4;1583:16;;1573:27;;1563:55;;1614:1;1611;1604:12;1563:55;1468:156;;;:::o;1629:318::-;1704:6;1712;1720;1773:2;1761:9;1752:7;1748:23;1744:32;1741:52;;;1789:1;1786;1779:12;1741:52;1825:9;1812:23;1802:33;;1882:2;1871:9;1867:18;1854:32;1844:42;;1905:36;1937:2;1926:9;1922:18;1905:36;:::i;:::-;1895:46;;1629:318;;;;;:::o;1952:180::-;2011:6;2064:2;2052:9;2043:7;2039:23;2035:32;2032:52;;;2080:1;2077;2070:12;2032:52;-1:-1:-1;2103:23:181;;1952:180;-1:-1:-1;1952:180:181:o;2255:469::-;2316:3;2354:5;2348:12;2381:6;2376:3;2369:19;2407:4;2436:2;2431:3;2427:12;2420:19;;2473:2;2466:5;2462:14;2494:1;2504:195;2518:6;2515:1;2512:13;2504:195;;;2583:13;;-1:-1:-1;;;;;2579:39:181;2567:52;;2639:12;;;;2674:15;;;;2615:1;2533:9;2504:195;;;-1:-1:-1;2715:3:181;;2255:469;-1:-1:-1;;;;;2255:469:181:o;2729:446::-;2793:3;2831:5;2825:12;2858:6;2853:3;2846:19;2884:4;2913:2;2908:3;2904:12;2897:19;;2950:2;2943:5;2939:14;2971:1;2981:169;2995:6;2992:1;2989:13;2981:169;;;3056:13;;3044:26;;3090:12;;;;3125:15;;;;3017:1;3010:9;2981:169;;3276:1904;3451:2;3440:9;3433:21;3496:6;3490:13;3485:2;3474:9;3470:18;3463:41;3558:2;3550:6;3546:15;3540:22;3535:2;3524:9;3520:18;3513:50;3617:2;3609:6;3605:15;3599:22;3594:2;3583:9;3579:18;3572:50;3677:2;3669:6;3665:15;3659:22;3653:3;3642:9;3638:19;3631:51;3737:3;3729:6;3725:16;3719:23;3713:3;3702:9;3698:19;3691:52;3798:3;3790:6;3786:16;3780:23;3774:3;3763:9;3759:19;3752:52;3859:3;3851:6;3847:16;3841:23;3835:3;3824:9;3820:19;3813:52;3414:4;3912:3;3904:6;3900:16;3894:23;3936:3;3948:61;4005:2;3994:9;3990:18;3976:12;-1:-1:-1;;;;;2212:31:181;2200:44;;2137:113;3948:61;4058:2;4050:6;4046:15;4040:22;4018:44;;;4081:6;4106:3;4145:2;4140;4129:9;4125:18;4118:30;4171:73;4239:3;4228:9;4224:19;4208:14;4171:73;:::i;:::-;4157:87;;4293:2;4285:6;4281:15;4275:22;4253:44;;4320:2;4316:7;4342:3;4409:2;4397:9;4389:6;4385:22;4381:31;4376:2;4365:9;4361:18;4354:59;4436:63;4492:6;4476:14;4436:63;:::i;:::-;4422:77;;4548:2;4540:6;4536:15;4530:22;4508:44;;;4571:3;4638:2;4626:9;4618:6;4614:22;4610:31;4605:2;4594:9;4590:18;4583:59;4665:63;4721:6;4705:14;4665:63;:::i;:::-;4651:77;;4777:2;4769:6;4765:15;4759:22;4737:44;;;4800:3;4867:2;4855:9;4847:6;4843:22;4839:31;4834:2;4823:9;4819:18;4812:59;4894:63;4950:6;4934:14;4894:63;:::i;:::-;4880:77;;5006:2;4998:6;4994:15;4988:22;4966:44;;;;5029:3;5041:51;5088:2;5077:9;5073:18;5057:14;3250:13;3243:21;3231:34;;3180:91;5041:51;5134:15;;;;5128:22;5108:18;;5101:50;;;;-1:-1:-1;5168:6:181;3276:1904;-1:-1:-1;3276:1904:181:o;5185:642::-;5298:6;5306;5314;5322;5330;5383:3;5371:9;5362:7;5358:23;5354:33;5351:53;;;5400:1;5397;5390:12;5351:53;5436:9;5423:23;5413:33;;5493:2;5482:9;5478:18;5465:32;5455:42;;5548:2;5537:9;5533:18;5520:32;5575:18;5567:6;5564:30;5561:50;;;5607:1;5604;5597:12;5561:50;5646:70;5708:7;5699:6;5688:9;5684:22;5646:70;:::i;:::-;5185:642;;;;-1:-1:-1;5735:8:181;5817:2;5802:18;5789:32;;5185:642;-1:-1:-1;;;;5185:642:181:o;6272:261::-;6451:2;6440:9;6433:21;6414:4;6471:56;6523:2;6512:9;6508:18;6500:6;6471:56;:::i;6538:173::-;6606:20;;-1:-1:-1;;;;;6655:31:181;;6645:42;;6635:70;;6701:1;6698;6691:12;6716:535;6820:6;6828;6836;6844;6852;6860;6913:3;6901:9;6892:7;6888:23;6884:33;6881:53;;;6930:1;6927;6920:12;6881:53;6966:9;6953:23;6943:33;;7023:2;7012:9;7008:18;6995:32;6985:42;;7046:38;7080:2;7069:9;7065:18;7046:38;:::i;:::-;7036:48;;7103:38;7137:2;7126:9;7122:18;7103:38;:::i;:::-;7093:48;;7188:3;7177:9;7173:19;7160:33;7150:43;;7240:3;7229:9;7225:19;7212:33;7202:43;;6716:535;;;;;;;;:::o;7256:118::-;7342:5;7335:13;7328:21;7321:5;7318:32;7308:60;;7364:1;7361;7354:12;7308:60;7256:118;:::o;7379:634::-;7480:6;7488;7496;7504;7557:2;7545:9;7536:7;7532:23;7528:32;7525:52;;;7573:1;7570;7563:12;7525:52;7609:9;7596:23;7586:33;;7670:2;7659:9;7655:18;7642:32;7697:18;7689:6;7686:30;7683:50;;;7729:1;7726;7719:12;7683:50;7768:70;7830:7;7821:6;7810:9;7806:22;7768:70;:::i;:::-;7857:8;;-1:-1:-1;7742:96:181;-1:-1:-1;;7942:2:181;7927:18;;7914:32;7955:28;7914:32;7955:28;:::i;:::-;7379:634;;;;-1:-1:-1;7379:634:181;;-1:-1:-1;;7379:634:181:o;8226:389::-;8308:6;8316;8324;8332;8385:3;8373:9;8364:7;8360:23;8356:33;8353:53;;;8402:1;8399;8392:12;8353:53;8438:9;8425:23;8415:33;;8467:36;8499:2;8488:9;8484:18;8467:36;:::i;:::-;8457:46;;8522:36;8554:2;8543:9;8539:18;8522:36;:::i;:::-;8226:389;;;;-1:-1:-1;8512:46:181;;8605:2;8590:18;8577:32;;-1:-1:-1;;8226:389:181:o;8620:254::-;8688:6;8696;8749:2;8737:9;8728:7;8724:23;8720:32;8717:52;;;8765:1;8762;8755:12;8717:52;8801:9;8788:23;8778:33;;8830:38;8864:2;8853:9;8849:18;8830:38;:::i;:::-;8820:48;;8620:254;;;;;:::o;9068:250::-;9134:6;9142;9195:2;9183:9;9174:7;9170:23;9166:32;9163:52;;;9211:1;9208;9201:12;9163:52;9247:9;9234:23;9224:33;;9276:36;9308:2;9297:9;9293:18;9276:36;:::i;9547:456::-;9640:6;9648;9656;9664;9672;9725:3;9713:9;9704:7;9700:23;9696:33;9693:53;;;9742:1;9739;9732:12;9693:53;9778:9;9765:23;9755:33;;9835:2;9824:9;9820:18;9807:32;9797:42;;9858:36;9890:2;9879:9;9875:18;9858:36;:::i;:::-;9547:456;;;;-1:-1:-1;9848:46:181;;9941:2;9926:18;;9913:32;;-1:-1:-1;9992:3:181;9977:19;9964:33;;9547:456;-1:-1:-1;;9547:456:181:o;10008:527::-;10108:6;10116;10124;10132;10140;10148;10201:3;10189:9;10180:7;10176:23;10172:33;10169:53;;;10218:1;10215;10208:12;10169:53;10254:9;10241:23;10231:33;;10283:36;10315:2;10304:9;10300:18;10283:36;:::i;:::-;10273:46;;10338:36;10370:2;10359:9;10355:18;10338:36;:::i;:::-;10328:46;;10421:2;10410:9;10406:18;10393:32;10383:42;;10472:3;10461:9;10457:19;10444:33;10434:43;;10524:3;10513:9;10509:19;10496:33;10486:43;;10008:527;;;;;;;;:::o;10540:127::-;10601:10;10596:3;10592:20;10589:1;10582:31;10632:4;10629:1;10622:15;10656:4;10653:1;10646:15;10672:342;10874:2;10856:21;;;10913:2;10893:18;;;10886:30;-1:-1:-1;;;10947:2:181;10932:18;;10925:48;11005:2;10990:18;;10672:342::o;11019:184::-;11089:6;11142:2;11130:9;11121:7;11117:23;11113:32;11110:52;;;11158:1;11155;11148:12;11110:52;-1:-1:-1;11181:16:181;;11019:184;-1:-1:-1;11019:184:181:o;11557:337::-;11759:2;11741:21;;;11798:2;11778:18;;;11771:30;-1:-1:-1;;;11832:2:181;11817:18;;11810:43;11885:2;11870:18;;11557:337::o;11899:127::-;11960:10;11955:3;11951:20;11948:1;11941:31;11991:4;11988:1;11981:15;12015:4;12012:1;12005:15;12388:127;12449:10;12444:3;12440:20;12437:1;12430:31;12480:4;12477:1;12470:15;12504:4;12501:1;12494:15;12520:168;12593:9;;;12624;;12641:15;;;12635:22;;12621:37;12611:71;;12662:18;;:::i;12693:217::-;12733:1;12759;12749:132;;12803:10;12798:3;12794:20;12791:1;12784:31;12838:4;12835:1;12828:15;12866:4;12863:1;12856:15;12749:132;-1:-1:-1;12895:9:181;;12693:217::o;12915:128::-;12982:9;;;13003:11;;;13000:37;;;13017:18;;:::i;13048:125::-;13113:9;;;13134:10;;;13131:36;;;13147:18;;:::i;14154:609::-;14467:3;14456:9;14449:22;14430:4;14494:57;14546:3;14535:9;14531:19;14523:6;14494:57;:::i;:::-;14599:9;14591:6;14587:22;14582:2;14571:9;14567:18;14560:50;14627:44;14664:6;14656;14627:44;:::i;:::-;14702:2;14687:18;;14680:34;;;;-1:-1:-1;;14745:2:181;14730:18;14723:34;14619:52;14154:609;-1:-1:-1;;14154:609:181:o;15471:332::-;15678:2;15667:9;15660:21;15641:4;15698:56;15750:2;15739:9;15735:18;15727:6;15698:56;:::i;:::-;15690:64;;15790:6;15785:2;15774:9;15770:18;15763:34;15471:332;;;;;:::o;15808:337::-;16010:2;15992:21;;;16049:2;16029:18;;;16022:30;-1:-1:-1;;;16083:2:181;16068:18;;16061:43;16136:2;16121:18;;15808:337::o;21103:422::-;21192:1;21235:5;21192:1;21249:270;21270:7;21260:8;21257:21;21249:270;;;21329:4;21325:1;21321:6;21317:17;21311:4;21308:27;21305:53;;;21338:18;;:::i;:::-;21388:7;21378:8;21374:22;21371:55;;;21408:16;;;;21371:55;21487:22;;;;21447:15;;;;21249:270;;;21253:3;21103:422;;;;;:::o;21530:806::-;21579:5;21609:8;21599:80;;-1:-1:-1;21650:1:181;21664:5;;21599:80;21698:4;21688:76;;-1:-1:-1;21735:1:181;21749:5;;21688:76;21780:4;21798:1;21793:59;;;;21866:1;21861:130;;;;21773:218;;21793:59;21823:1;21814:10;;21837:5;;;21861:130;21898:3;21888:8;21885:17;21882:43;;;21905:18;;:::i;:::-;-1:-1:-1;;21961:1:181;21947:16;;21976:5;;21773:218;;22075:2;22065:8;22062:16;22056:3;22050:4;22047:13;22043:36;22037:2;22027:8;22024:16;22019:2;22013:4;22010:12;22006:35;22003:77;22000:159;;;-1:-1:-1;22112:19:181;;;22144:5;;22000:159;22191:34;22216:8;22210:4;22191:34;:::i;:::-;22261:6;22257:1;22253:6;22249:19;22240:7;22237:32;22234:58;;;22272:18;;:::i;:::-;22310:20;;21530:806;-1:-1:-1;;;21530:806:181:o;22341:131::-;22401:5;22430:36;22457:8;22451:4;22430:36;:::i;25647:245::-;25714:6;25767:2;25755:9;25746:7;25742:23;25738:32;25735:52;;;25783:1;25780;25773:12;25735:52;25815:9;25809:16;25834:28;25856:5;25834:28;:::i;26715:250::-;26800:1;26810:113;26824:6;26821:1;26818:13;26810:113;;;26900:11;;;26894:18;26881:11;;;26874:39;26846:2;26839:10;26810:113;;;-1:-1:-1;;26957:1:181;26939:16;;26932:27;26715:250::o;26970:287::-;27099:3;27137:6;27131:13;27153:66;27212:6;27207:3;27200:4;27192:6;27188:17;27153:66;:::i;:::-;27235:16;;;;;26970:287;-1:-1:-1;;26970:287:181:o;27620:396::-;27769:2;27758:9;27751:21;27732:4;27801:6;27795:13;27844:6;27839:2;27828:9;27824:18;27817:34;27860:79;27932:6;27927:2;27916:9;27912:18;27907:2;27899:6;27895:15;27860:79;:::i;:::-;28000:2;27979:15;-1:-1:-1;;27975:29:181;27960:45;;;;28007:2;27956:54;;27620:396;-1:-1:-1;;27620:396:181:o"},"gasEstimates":{"creation":{"codeDepositCost":"4000400","executionCost":"4572","totalCost":"4004972"},"external":{"addSwapLiquidity(bytes32,uint256[],uint256,uint256)":"infinite","calculateRemoveSwapLiquidity(bytes32,uint256)":"infinite","calculateRemoveSwapLiquidityOneToken(bytes32,uint256,uint8)":"infinite","calculateSwap(bytes32,uint8,uint8,uint256)":"infinite","calculateSwapTokenAmount(bytes32,uint256[],bool)":"infinite","getSwapA(bytes32)":"infinite","getSwapAPrecise(bytes32)":"infinite","getSwapAdminBalance(bytes32,uint256)":"6868","getSwapLPToken(bytes32)":"2594","getSwapStorage(bytes32)":"infinite","getSwapToken(bytes32,uint8)":"7106","getSwapTokenBalance(bytes32,uint8)":"6986","getSwapTokenIndex(bytes32,address)":"9433","getSwapVirtualPrice(bytes32)":"infinite","removeSwapLiquidity(bytes32,uint256,uint256[],uint256)":"infinite","removeSwapLiquidityImbalance(bytes32,uint256[],uint256,uint256)":"infinite","removeSwapLiquidityOneToken(bytes32,uint256,uint8,uint256,uint256)":"infinite","swap(bytes32,uint8,uint8,uint256,uint256,uint256)":"infinite","swapExact(bytes32,uint256,address,address,uint256,uint256)":"infinite","swapExactOut(bytes32,uint256,address,address,uint256,uint256)":"infinite"}},"methodIdentifiers":{"addSwapLiquidity(bytes32,uint256[],uint256,uint256)":"8d365457","calculateRemoveSwapLiquidity(bytes32,uint256)":"a02288f4","calculateRemoveSwapLiquidityOneToken(bytes32,uint256,uint8)":"29d99b10","calculateSwap(bytes32,uint8,uint8,uint256)":"8f11d27f","calculateSwapTokenAmount(bytes32,uint256[],bool)":"76ca2e52","getSwapA(bytes32)":"d251dc35","getSwapAPrecise(bytes32)":"7652f59d","getSwapAdminBalance(bytes32,uint256)":"1301caa2","getSwapLPToken(bytes32)":"8b480b12","getSwapStorage(bytes32)":"2d91a515","getSwapToken(bytes32,uint8)":"b3a4eab4","getSwapTokenBalance(bytes32,uint8)":"bb0577eb","getSwapTokenIndex(bytes32,address)":"ad94911b","getSwapVirtualPrice(bytes32)":"f495e807","removeSwapLiquidity(bytes32,uint256,uint256[],uint256)":"4bbcba8e","removeSwapLiquidityImbalance(bytes32,uint256[],uint256,uint256)":"241ca57a","removeSwapLiquidityOneToken(bytes32,uint256,uint8,uint256,uint256)":"b6618dff","swap(bytes32,uint8,uint8,uint256,uint256,uint256)":"ff126de9","swapExact(bytes32,uint256,address,address,uint256,uint256)":"80b297e8","swapExactOut(bytes32,uint256,address,address,uint256,uint256)":"74c6b89b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_feeOnTransferNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_nativeAssetNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleOutgoingAsset_notNative\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StableSwapFacet__deadlineCheck_deadlineNotMet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StableSwapFacet__getSwapTokenBalance_indexOutOfRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StableSwapFacet__getSwapTokenIndex_notExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StableSwapFacet__getSwapToken_outOfRange\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"fees\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"}],\"name\":\"AddLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newAdminFee\",\"type\":\"uint256\"}],\"name\":\"NewAdminFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSwapFee\",\"type\":\"uint256\"}],\"name\":\"NewSwapFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"fees\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidityImbalance\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"boughtId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensBought\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidityOne\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensSold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensBought\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"soldId\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"boughtId\",\"type\":\"uint128\"}],\"name\":\"TokenSwap\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minToMint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"addSwapLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"calculateRemoveSwapLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndex\",\"type\":\"uint8\"}],\"name\":\"calculateRemoveSwapLiquidityOneToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"availableTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexFrom\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexTo\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"dx\",\"type\":\"uint256\"}],\"name\":\"calculateSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"deposit\",\"type\":\"bool\"}],\"name\":\"calculateSwapTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"getSwapA\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"getSwapAPrecise\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getSwapAdminBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"getSwapLPToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"getSwapStorage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"initialA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialATime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureATime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"adminFee\",\"type\":\"uint256\"},{\"internalType\":\"contract LPToken\",\"name\":\"lpToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"pooledTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenPrecisionMultipliers\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"adminFees\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"disabled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"removeTime\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapUtils.Swap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"getSwapToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"getSwapTokenBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"getSwapTokenIndex\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"getSwapVirtualPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeSwapLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"maxBurnAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeSwapLiquidityImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndex\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeSwapLiquidityOneToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexFrom\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexTo\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"dx\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minDy\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"assetIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExact\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"assetIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Most of the logic is stored as a library `SwapUtils` for the sake of contract readability.\",\"kind\":\"dev\",\"methods\":{\"addSwapLiquidity(bytes32,uint256[],uint256,uint256)\":{\"params\":{\"amounts\":\"the amounts of each token to add, in their native precision\",\"deadline\":\"latest timestamp to accept this transaction\",\"key\":\"Hash of the canonical id + domain\",\"minToMint\":\"the minimum LP tokens adding this amount of liquidity should mint, otherwise revert. Handy for front-running mitigation\"},\"returns\":{\"_0\":\"amount of LP token user minted and received\"}},\"calculateRemoveSwapLiquidity(bytes32,uint256)\":{\"params\":{\"amount\":\"the amount of LP tokens that would be burned on withdrawal\",\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"array of token balances that the user will receive\"}},\"calculateRemoveSwapLiquidityOneToken(bytes32,uint256,uint8)\":{\"params\":{\"key\":\"Hash of the canonical id + domain\",\"tokenAmount\":\"the amount of LP token to burn\",\"tokenIndex\":\"index of which token will be withdrawn\"},\"returns\":{\"availableTokenAmount\":\"calculated amount of underlying token available to withdraw\"}},\"calculateSwap(bytes32,uint8,uint8,uint256)\":{\"params\":{\"dx\":\"the amount of tokens the user wants to sell. If the token charges a fee on transfers, use the amount that gets transferred after the fee.\",\"key\":\"Hash of the canonical id + domain\",\"tokenIndexFrom\":\"the token the user wants to sell\",\"tokenIndexTo\":\"the token the user wants to buy\"},\"returns\":{\"_0\":\"amount of tokens the user will receive\"}},\"calculateSwapTokenAmount(bytes32,uint256[],bool)\":{\"details\":\"This shouldn't be used outside frontends for user estimates.\",\"params\":{\"amounts\":\"an array of token amounts to deposit or withdrawal, corresponding to pooledTokens. The amount should be in each pooled token's native precision. If a token charges a fee on transfers, use the amount that gets transferred after the fee.\",\"deposit\":\"whether this is a deposit or a withdrawal\",\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"token amount the user will receive\"}},\"getSwapA(bytes32)\":{\"details\":\"See the StableSwap paper for details\",\"params\":{\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"A parameter\"}},\"getSwapAPrecise(bytes32)\":{\"details\":\"See the StableSwap paper for details\",\"params\":{\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"A parameter in its raw precision form\"}},\"getSwapAdminBalance(bytes32,uint256)\":{\"params\":{\"index\":\"Index of the pooled token\",\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"admin's token balance in the token's precision\"}},\"getSwapLPToken(bytes32)\":{\"params\":{\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"LPToken\"}},\"getSwapStorage(bytes32)\":{\"params\":{\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"SwapUtils.Swap\"}},\"getSwapToken(bytes32,uint8)\":{\"params\":{\"index\":\"the index of the token\",\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"address of the token at given index\"}},\"getSwapTokenBalance(bytes32,uint8)\":{\"params\":{\"index\":\"the index of the token\",\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"current balance of the pooled token at given index with token's native precision\"}},\"getSwapTokenIndex(bytes32,address)\":{\"params\":{\"key\":\"Hash of the canonical id + domain\",\"tokenAddress\":\"address of the token\"},\"returns\":{\"_0\":\"the index of the given token address\"}},\"getSwapVirtualPrice(bytes32)\":{\"params\":{\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"the virtual price, scaled to the POOL_PRECISION_DECIMALS\"}},\"removeSwapLiquidity(bytes32,uint256,uint256[],uint256)\":{\"details\":\"Liquidity can always be removed, even when the pool is paused.\",\"params\":{\"amount\":\"the amount of LP tokens to burn\",\"deadline\":\"latest timestamp to accept this transaction\",\"key\":\"Hash of the canonical id + domain\",\"minAmounts\":\"the minimum amounts of each token in the pool        acceptable for this burn. Useful as a front-running mitigation\"},\"returns\":{\"_0\":\"amounts of tokens user received\"}},\"removeSwapLiquidityImbalance(bytes32,uint256[],uint256,uint256)\":{\"params\":{\"amounts\":\"how much of each token to withdraw\",\"deadline\":\"latest timestamp to accept this transaction\",\"key\":\"Hash of the canonical id + domain\",\"maxBurnAmount\":\"the max LP token provider is willing to pay to remove liquidity. Useful as a front-running mitigation.\"},\"returns\":{\"_0\":\"amount of LP tokens burned\"}},\"removeSwapLiquidityOneToken(bytes32,uint256,uint8,uint256,uint256)\":{\"params\":{\"deadline\":\"latest timestamp to accept this transaction\",\"key\":\"Hash of the canonical id + domain\",\"minAmount\":\"the minimum amount to withdraw, otherwise revert\",\"tokenAmount\":\"the amount of the token you want to receive\",\"tokenIndex\":\"the index of the token you want to receive\"},\"returns\":{\"_0\":\"amount of chosen token user received\"}},\"swap(bytes32,uint8,uint8,uint256,uint256,uint256)\":{\"params\":{\"deadline\":\"latest timestamp to accept this transaction\",\"dx\":\"the amount of tokens the user wants to swap from\",\"key\":\"Hash of the canonical id + domain\",\"minDy\":\"the min amount the user would like to receive, or revert.\",\"tokenIndexFrom\":\"the token the user wants to swap from\",\"tokenIndexTo\":\"the token the user wants to swap to\"}},\"swapExact(bytes32,uint256,address,address,uint256,uint256)\":{\"params\":{\"amountIn\":\"the amount of tokens the user wants to swap from\",\"assetIn\":\"the token the user wants to swap from\",\"assetOut\":\"the token the user wants to swap to\",\"key\":\"Hash of the canonical id + domain\"}},\"swapExactOut(bytes32,uint256,address,address,uint256,uint256)\":{\"params\":{\"amountOut\":\"the amount of tokens the user wants to swap to\",\"assetIn\":\"the token the user wants to swap from\",\"assetOut\":\"the token the user wants to swap to\",\"key\":\"Hash of the canonical id + domain\"}}},\"title\":\"Swap - A StableSwap implementation in solidity.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addSwapLiquidity(bytes32,uint256[],uint256,uint256)\":{\"notice\":\"Add liquidity to the pool with the given amounts of tokens\"},\"calculateRemoveSwapLiquidity(bytes32,uint256)\":{\"notice\":\"A simple method to calculate amount of each underlying tokens that is returned upon burning given amount of LP tokens\"},\"calculateRemoveSwapLiquidityOneToken(bytes32,uint256,uint8)\":{\"notice\":\"Calculate the amount of underlying token available to withdraw when withdrawing via only single token\"},\"calculateSwap(bytes32,uint8,uint8,uint256)\":{\"notice\":\"Calculate amount of tokens you receive on swap\"},\"calculateSwapTokenAmount(bytes32,uint256[],bool)\":{\"notice\":\"A simple method to calculate prices from deposits or withdrawals, excluding fees but including slippage. This is helpful as an input into the various \\\"min\\\" parameters on calls to fight front-running\"},\"getSwapA(bytes32)\":{\"notice\":\"Return A, the amplification coefficient * n ** (n - 1)\"},\"getSwapAPrecise(bytes32)\":{\"notice\":\"Return A in its raw precision form\"},\"getSwapAdminBalance(bytes32,uint256)\":{\"notice\":\"This function reads the accumulated amount of admin fees of the token with given index\"},\"getSwapLPToken(bytes32)\":{\"notice\":\"Return LP token for canonical Id\"},\"getSwapStorage(bytes32)\":{\"notice\":\"Return Stable swap storage\"},\"getSwapToken(bytes32,uint8)\":{\"notice\":\"Return address of the pooled token at given index. Reverts if tokenIndex is out of range.\"},\"getSwapTokenBalance(bytes32,uint8)\":{\"notice\":\"Return current balance of the pooled token at given index\"},\"getSwapTokenIndex(bytes32,address)\":{\"notice\":\"Return the index of the given token address. Reverts if no matching token is found.\"},\"getSwapVirtualPrice(bytes32)\":{\"notice\":\"Get the virtual price, to help calculate profit\"},\"removeSwapLiquidity(bytes32,uint256,uint256[],uint256)\":{\"notice\":\"Burn LP tokens to remove liquidity from the pool. Withdraw fee that decays linearly over period of 4 weeks since last deposit will apply.\"},\"removeSwapLiquidityImbalance(bytes32,uint256[],uint256,uint256)\":{\"notice\":\"Remove liquidity from the pool, weighted differently than the pool's current balances. Withdraw fee that decays linearly over period of 4 weeks since last deposit will apply.\"},\"removeSwapLiquidityOneToken(bytes32,uint256,uint8,uint256,uint256)\":{\"notice\":\"Remove liquidity from the pool all in one token. Withdraw fee that decays linearly over period of 4 weeks since last deposit will apply.\"},\"swap(bytes32,uint8,uint8,uint256,uint256,uint256)\":{\"notice\":\"Swap two tokens using this pool\"},\"swapExact(bytes32,uint256,address,address,uint256,uint256)\":{\"notice\":\"Swap two tokens using this pool\"},\"swapExactOut(bytes32,uint256,address,address,uint256,uint256)\":{\"notice\":\"Swap two tokens using this pool\"}},\"notice\":\"This contract is responsible for custody of closely pegged assets (eg. group of stablecoins) and automatic market making system. Users become an LP (Liquidity Provider) by depositing their tokens in desired ratios for an exchange of the pool token that represents their share of the pool. Users can burn pool tokens and withdraw their share of token(s). Each time a swap between the pooled tokens happens, a set fee incurs which effectively gets distributed to the LPs. In case of emergencies, admin can pause additional deposits, swaps, or single-asset withdraws - which stops the ratio of the tokens in the pool from changing. Users can always withdraw their tokens via multi-asset withdraws.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/StableSwapFacet.sol\":\"StableSwapFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n  AppStorage internal s;\\n\\n  // ========== Custom Errors ===========\\n\\n  error BaseConnextFacet__onlyOwner_notOwner();\\n  error BaseConnextFacet__onlyProposed_notProposedOwner();\\n  error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n  error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n  error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n  error BaseConnextFacet__whenNotPaused_paused();\\n  error BaseConnextFacet__nonReentrant_reentrantCall();\\n  error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n  error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n  error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @dev Prevents a contract from calling itself, directly or indirectly.\\n   * Calling a `nonReentrant` function from another `nonReentrant`\\n   * function is not supported. It is possible to prevent this from happening\\n   * by making the `nonReentrant` function external, and making it call a\\n   * `private` function that does the actual work.\\n   */\\n  modifier nonReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._status = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._status = Constants.NOT_ENTERED;\\n  }\\n\\n  modifier nonXCallReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._xcallStatus = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._xcallStatus = Constants.NOT_ENTERED;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and router role.\\n   */\\n  modifier onlyOwnerOrRouter() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n      revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and watcher role.\\n   */\\n  modifier onlyOwnerOrWatcher() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n      revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and admin role.\\n   */\\n  modifier onlyOwnerOrAdmin() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n      revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if all functionality is paused\\n   */\\n  modifier whenNotPaused() {\\n    if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n    _;\\n  }\\n\\n  // ============ Internal functions ============\\n  /**\\n   * @notice Indicates if the router allowlist has been removed\\n   */\\n  function _isRouterAllowlistRemoved() internal view returns (bool) {\\n    return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n    address adopted = AssetLogic.getConfig(_key).adopted;\\n    if (adopted == address(0)) {\\n      revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n    }\\n    return adopted;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n    address representation = AssetLogic.getConfig(_key).representation;\\n    // If this is address(0), then there is no mintable token for this asset on this\\n    // domain\\n    return representation;\\n  }\\n\\n  /**\\n   * @notice Calculates a transferId\\n   */\\n  function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_params));\\n  }\\n\\n  /**\\n   * @notice Internal utility function that combines\\n   *         `_origin` and `_nonce`.\\n   * @dev Both origin and nonce should be less than 2^32 - 1\\n   * @param _origin Domain of chain where the transfer originated\\n   * @param _nonce The unique identifier for the message from origin to destination\\n   * @return Returns (`_origin` << 32) & `_nonce`\\n   */\\n  function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n    return (uint64(_origin) << 32) | _nonce;\\n  }\\n\\n  function _getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address) {\\n    return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n  }\\n\\n  function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n    return AssetLogic.getCanonicalTokenId(_candidate, s);\\n  }\\n\\n  function _getLocalAndAdoptedToken(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address, address) {\\n    address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n    address _adopted = _getAdoptedAsset(_key);\\n    return (_local, _adopted);\\n  }\\n\\n  function _isLocalOrigin(address _token) internal view returns (bool) {\\n    return AssetLogic.isLocalOrigin(_token, s);\\n  }\\n\\n  function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n    TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n    bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n    if (!AssetLogic.getConfig(_key).approval) {\\n      revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n    }\\n    return (_canonical, _key);\\n  }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/StableSwapFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {AmplificationUtils, SwapUtils} from \\\"../libraries/AmplificationUtils.sol\\\";\\n\\nimport {BaseConnextFacet} from \\\"./BaseConnextFacet.sol\\\";\\n\\n/**\\n * @title Swap - A StableSwap implementation in solidity.\\n * @notice This contract is responsible for custody of closely pegged assets (eg. group of stablecoins)\\n * and automatic market making system. Users become an LP (Liquidity Provider) by depositing their tokens\\n * in desired ratios for an exchange of the pool token that represents their share of the pool.\\n * Users can burn pool tokens and withdraw their share of token(s).\\n *\\n * Each time a swap between the pooled tokens happens, a set fee incurs which effectively gets\\n * distributed to the LPs.\\n *\\n * In case of emergencies, admin can pause additional deposits, swaps, or single-asset withdraws - which\\n * stops the ratio of the tokens in the pool from changing.\\n *\\n * Users can always withdraw their tokens via multi-asset withdraws.\\n *\\n * @dev Most of the logic is stored as a library `SwapUtils` for the sake of contract readability.\\n */\\ncontract StableSwapFacet is BaseConnextFacet {\\n  using SwapUtils for SwapUtils.Swap;\\n  using AmplificationUtils for SwapUtils.Swap;\\n\\n  // ========== Custom Errors ===========\\n  error StableSwapFacet__deadlineCheck_deadlineNotMet();\\n  error StableSwapFacet__getSwapToken_outOfRange();\\n  error StableSwapFacet__getSwapTokenIndex_notExist();\\n  error StableSwapFacet__getSwapTokenBalance_indexOutOfRange();\\n\\n  // ============ Properties ============\\n\\n  // ============ Events ============\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Modifier to check deadline against current timestamp\\n   * @param deadline latest timestamp to accept this transaction\\n   */\\n  modifier deadlineCheck(uint256 deadline) {\\n    if (block.timestamp > deadline) revert StableSwapFacet__deadlineCheck_deadlineNotMet();\\n    _;\\n  }\\n\\n  // ============ View Functions ============\\n  /**\\n   * @notice Return Stable swap storage\\n   * @param key Hash of the canonical id + domain\\n   * @return SwapUtils.Swap\\n   */\\n  function getSwapStorage(bytes32 key) external view returns (SwapUtils.Swap memory) {\\n    return s.swapStorages[key];\\n  }\\n\\n  /**\\n   * @notice Return LP token for canonical Id\\n   * @param key Hash of the canonical id + domain\\n   * @return LPToken\\n   */\\n  function getSwapLPToken(bytes32 key) external view returns (address) {\\n    return address(s.swapStorages[key].lpToken);\\n  }\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param key Hash of the canonical id + domain\\n   * @return A parameter\\n   */\\n  function getSwapA(bytes32 key) external view returns (uint256) {\\n    return s.swapStorages[key].getA();\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision form\\n   * @dev See the StableSwap paper for details\\n   * @param key Hash of the canonical id + domain\\n   * @return A parameter in its raw precision form\\n   */\\n  function getSwapAPrecise(bytes32 key) external view returns (uint256) {\\n    return s.swapStorages[key].getAPrecise();\\n  }\\n\\n  /**\\n   * @notice Return address of the pooled token at given index. Reverts if tokenIndex is out of range.\\n   * @param key Hash of the canonical id + domain\\n   * @param index the index of the token\\n   * @return address of the token at given index\\n   */\\n  function getSwapToken(bytes32 key, uint8 index) public view returns (IERC20) {\\n    if (index >= s.swapStorages[key].pooledTokens.length) revert StableSwapFacet__getSwapToken_outOfRange();\\n    return s.swapStorages[key].pooledTokens[index];\\n  }\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key Hash of the canonical id + domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getSwapTokenIndex(bytes32 key, address tokenAddress) public view returns (uint8) {\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(getSwapToken(key, index)) != tokenAddress) revert StableSwapFacet__getSwapTokenIndex_notExist();\\n    return index;\\n  }\\n\\n  /**\\n   * @notice Return current balance of the pooled token at given index\\n   * @param key Hash of the canonical id + domain\\n   * @param index the index of the token\\n   * @return current balance of the pooled token at given index with token's native precision\\n   */\\n  function getSwapTokenBalance(bytes32 key, uint8 index) external view returns (uint256) {\\n    if (index >= s.swapStorages[key].balances.length) revert StableSwapFacet__getSwapTokenBalance_indexOutOfRange();\\n    return s.swapStorages[key].balances[index];\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param key Hash of the canonical id + domain\\n   * @return the virtual price, scaled to the POOL_PRECISION_DECIMALS\\n   */\\n  function getSwapVirtualPrice(bytes32 key) external view returns (uint256) {\\n    return s.swapStorages[key].getVirtualPrice();\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on swap\\n   * @param key Hash of the canonical id + domain\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell. If the token charges\\n   * a fee on transfers, use the amount that gets transferred after the fee.\\n   * @return amount of tokens the user will receive\\n   */\\n  function calculateSwap(\\n    bytes32 key,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256) {\\n    return s.swapStorages[key].calculateSwap(tokenIndexFrom, tokenIndexTo, dx);\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param key Hash of the canonical id + domain\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return token amount the user will receive\\n   */\\n  function calculateSwapTokenAmount(\\n    bytes32 key,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) external view returns (uint256) {\\n    return s.swapStorages[key].calculateTokenAmount(amounts, deposit);\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of LP tokens\\n   * @param key Hash of the canonical id + domain\\n   * @param amount the amount of LP tokens that would be burned on withdrawal\\n   * @return array of token balances that the user will receive\\n   */\\n  function calculateRemoveSwapLiquidity(bytes32 key, uint256 amount) external view returns (uint256[] memory) {\\n    return s.swapStorages[key].calculateRemoveLiquidity(amount);\\n  }\\n\\n  /**\\n   * @notice Calculate the amount of underlying token available to withdraw\\n   * when withdrawing via only single token\\n   * @param key Hash of the canonical id + domain\\n   * @param tokenAmount the amount of LP token to burn\\n   * @param tokenIndex index of which token will be withdrawn\\n   * @return availableTokenAmount calculated amount of underlying token\\n   * available to withdraw\\n   */\\n  function calculateRemoveSwapLiquidityOneToken(\\n    bytes32 key,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) external view returns (uint256 availableTokenAmount) {\\n    return s.swapStorages[key].calculateWithdrawOneToken(tokenAmount, tokenIndex);\\n  }\\n\\n  /**\\n   * @notice This function reads the accumulated amount of admin fees of the token with given index\\n   * @param key Hash of the canonical id + domain\\n   * @param index Index of the pooled token\\n   * @return admin's token balance in the token's precision\\n   */\\n  function getSwapAdminBalance(bytes32 key, uint256 index) external view returns (uint256) {\\n    return s.swapStorages[key].getAdminBalance(index);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice Swap two tokens using this pool\\n   * @param key Hash of the canonical id + domain\\n   * @param tokenIndexFrom the token the user wants to swap from\\n   * @param tokenIndexTo the token the user wants to swap to\\n   * @param dx the amount of tokens the user wants to swap from\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @param deadline latest timestamp to accept this transaction\\n   */\\n  function swap(\\n    bytes32 key,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256) {\\n    return s.swapStorages[key].swap(tokenIndexFrom, tokenIndexTo, dx, minDy);\\n  }\\n\\n  /**\\n   * @notice Swap two tokens using this pool\\n   * @param key Hash of the canonical id + domain\\n   * @param assetIn the token the user wants to swap from\\n   * @param assetOut the token the user wants to swap to\\n   * @param amountIn the amount of tokens the user wants to swap from\\n   */\\n  function swapExact(\\n    bytes32 key,\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256) {\\n    return\\n      s.swapStorages[key].swap(\\n        getSwapTokenIndex(key, assetIn),\\n        getSwapTokenIndex(key, assetOut),\\n        amountIn,\\n        minAmountOut\\n      );\\n  }\\n\\n  /**\\n   * @notice Swap two tokens using this pool\\n   * @param key Hash of the canonical id + domain\\n   * @param assetIn the token the user wants to swap from\\n   * @param assetOut the token the user wants to swap to\\n   * @param amountOut the amount of tokens the user wants to swap to\\n   */\\n  function swapExactOut(\\n    bytes32 key,\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256) {\\n    return\\n      s.swapStorages[key].swapOut(\\n        getSwapTokenIndex(key, assetIn),\\n        getSwapTokenIndex(key, assetOut),\\n        amountOut,\\n        maxAmountIn\\n      );\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool with the given amounts of tokens\\n   * @param key Hash of the canonical id + domain\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * @param deadline latest timestamp to accept this transaction\\n   * @return amount of LP token user minted and received\\n   */\\n  function addSwapLiquidity(\\n    bytes32 key,\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256) {\\n    return s.swapStorages[key].addLiquidity(amounts, minToMint);\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool. Withdraw fee that decays linearly\\n   * over period of 4 weeks since last deposit will apply.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param key Hash of the canonical id + domain\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   *        acceptable for this burn. Useful as a front-running mitigation\\n   * @param deadline latest timestamp to accept this transaction\\n   * @return amounts of tokens user received\\n   */\\n  function removeSwapLiquidity(\\n    bytes32 key,\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256[] memory) {\\n    return s.swapStorages[key].removeLiquidity(amount, minAmounts);\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token. Withdraw fee that decays linearly\\n   * over period of 4 weeks since last deposit will apply.\\n   * @param key Hash of the canonical id + domain\\n   * @param tokenAmount the amount of the token you want to receive\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @param deadline latest timestamp to accept this transaction\\n   * @return amount of chosen token user received\\n   */\\n  function removeSwapLiquidityOneToken(\\n    bytes32 key,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256) {\\n    return s.swapStorages[key].removeLiquidityOneToken(tokenAmount, tokenIndex, minAmount);\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances. Withdraw fee that decays linearly\\n   * over period of 4 weeks since last deposit will apply.\\n   * @param key Hash of the canonical id + domain\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @param deadline latest timestamp to accept this transaction\\n   * @return amount of LP tokens burned\\n   */\\n  function removeSwapLiquidityImbalance(\\n    bytes32 key,\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256) {\\n    return s.swapStorages[key].removeLiquidityImbalance(amounts, maxBurnAmount);\\n  }\\n}\\n\",\"keccak256\":\"0xa8a638d05a9acb209662dbd4fbe867fc374a42bd3adfe5c035cecaaa303e6276\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":13726,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"s","offset":0,"slot":"0","type":"t_struct(AppStorage)29536_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_contract(IERC20)10812)dyn_storage":{"base":"t_contract(IERC20)10812","encoding":"dynamic_array","label":"contract IERC20[]","numberOfBytes":"32"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IConnectorManager)47805":{"encoding":"inplace","label":"contract IConnectorManager","numberOfBytes":"20"},"t_contract(IERC20)10812":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_contract(LPToken)23179":{"encoding":"inplace","label":"contract LPToken","numberOfBytes":"20"},"t_enum(DestinationTransferStatus)29324":{"encoding":"inplace","label":"enum DestinationTransferStatus","numberOfBytes":"1"},"t_enum(Role)29319":{"encoding":"inplace","label":"enum Role","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_enum(Role)29319)":{"encoding":"mapping","key":"t_address","label":"mapping(address => enum Role)","numberOfBytes":"32","value":"t_enum(Role)29319"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(RouterConfig)29378_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RouterConfig)","numberOfBytes":"32","value":"t_struct(RouterConfig)29378_storage"},"t_mapping(t_address,t_struct(TokenId)37728_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct TokenId)","numberOfBytes":"32","value":"t_struct(TokenId)37728_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_bytes32,t_array(t_address)dyn_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => address[])","numberOfBytes":"32","value":"t_array(t_address)dyn_storage"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum DestinationTransferStatus)","numberOfBytes":"32","value":"t_enum(DestinationTransferStatus)29324"},"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => mapping(address => uint8))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint8)"},"t_mapping(t_bytes32,t_struct(Swap)30786_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct SwapUtils.Swap)","numberOfBytes":"32","value":"t_struct(Swap)30786_storage"},"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct TokenConfig)","numberOfBytes":"32","value":"t_struct(TokenConfig)29395_storage"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_bytes32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => bytes32)","numberOfBytes":"32","value":"t_bytes32"},"t_struct(AppStorage)29536_storage":{"encoding":"inplace","label":"struct AppStorage","members":[{"astId":29397,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":29399,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"LIQUIDITY_FEE_NUMERATOR","offset":0,"slot":"1","type":"t_uint256"},{"astId":29402,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"relayerFeeVault","offset":0,"slot":"2","type":"t_address"},{"astId":29405,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"nonce","offset":0,"slot":"3","type":"t_uint256"},{"astId":29408,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"domain","offset":0,"slot":"4","type":"t_uint32"},{"astId":29414,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"adoptedToCanonical","offset":0,"slot":"5","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29420,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"representationToCanonical","offset":0,"slot":"6","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29426,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"tokenConfigs","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)"},{"astId":29432,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"transferStatus","offset":0,"slot":"8","type":"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)"},{"astId":29438,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"routedTransfers","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_array(t_address)dyn_storage)"},{"astId":29445,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"routerBalances","offset":0,"slot":"10","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":29450,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"approvedRelayers","offset":0,"slot":"11","type":"t_mapping(t_address,t_bool)"},{"astId":29453,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"maxRoutersPerTransfer","offset":0,"slot":"12","type":"t_uint256"},{"astId":29458,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"slippage","offset":0,"slot":"13","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29463,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"receiveLocalOverride","offset":0,"slot":"14","type":"t_mapping(t_bytes32,t_bool)"},{"astId":29468,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"remotes","offset":0,"slot":"15","type":"t_mapping(t_uint32,t_bytes32)"},{"astId":29470,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"_proposed","offset":0,"slot":"16","type":"t_address"},{"astId":29472,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"_proposedOwnershipTimestamp","offset":0,"slot":"17","type":"t_uint256"},{"astId":29474,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"_routerAllowlistRemoved","offset":0,"slot":"18","type":"t_bool"},{"astId":29476,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"_routerAllowlistTimestamp","offset":0,"slot":"19","type":"t_uint256"},{"astId":29482,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"roles","offset":0,"slot":"20","type":"t_mapping(t_address,t_enum(Role)29319)"},{"astId":29487,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"routerConfigs","offset":0,"slot":"21","type":"t_mapping(t_address,t_struct(RouterConfig)29378_storage)"},{"astId":29489,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"_status","offset":0,"slot":"22","type":"t_uint256"},{"astId":29491,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"_xcallStatus","offset":0,"slot":"23","type":"t_uint256"},{"astId":29497,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"swapStorages","offset":0,"slot":"24","type":"t_mapping(t_bytes32,t_struct(Swap)30786_storage)"},{"astId":29504,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"tokenIndexes","offset":0,"slot":"25","type":"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))"},{"astId":29507,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"lpTokenTargetAddress","offset":0,"slot":"26","type":"t_address"},{"astId":29510,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"_paused","offset":20,"slot":"26","type":"t_bool"},{"astId":29513,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"aavePool","offset":0,"slot":"27","type":"t_address"},{"astId":29516,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"aavePortalFeeNumerator","offset":0,"slot":"28","type":"t_uint256"},{"astId":29521,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"portalDebt","offset":0,"slot":"29","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29526,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"portalFeeDebt","offset":0,"slot":"30","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29531,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"approvedSequencers","offset":0,"slot":"31","type":"t_mapping(t_address,t_bool)"},{"astId":29535,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"xAppConnectionManager","offset":0,"slot":"32","type":"t_contract(IConnectorManager)47805"}],"numberOfBytes":"1056"},"t_struct(RouterConfig)29378_storage":{"encoding":"inplace","label":"struct RouterConfig","members":[{"astId":29367,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"approved","offset":0,"slot":"0","type":"t_bool"},{"astId":29369,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"portalApproved","offset":1,"slot":"0","type":"t_bool"},{"astId":29371,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"owner","offset":2,"slot":"0","type":"t_address"},{"astId":29373,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"recipient","offset":0,"slot":"1","type":"t_address"},{"astId":29375,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"proposed","offset":0,"slot":"2","type":"t_address"},{"astId":29377,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"proposedTimestamp","offset":0,"slot":"3","type":"t_uint256"}],"numberOfBytes":"128"},"t_struct(Swap)30786_storage":{"encoding":"inplace","label":"struct SwapUtils.Swap","members":[{"astId":30753,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"key","offset":0,"slot":"0","type":"t_bytes32"},{"astId":30755,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"initialA","offset":0,"slot":"1","type":"t_uint256"},{"astId":30757,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"futureA","offset":0,"slot":"2","type":"t_uint256"},{"astId":30759,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"initialATime","offset":0,"slot":"3","type":"t_uint256"},{"astId":30761,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"futureATime","offset":0,"slot":"4","type":"t_uint256"},{"astId":30763,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"swapFee","offset":0,"slot":"5","type":"t_uint256"},{"astId":30765,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"adminFee","offset":0,"slot":"6","type":"t_uint256"},{"astId":30768,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"lpToken","offset":0,"slot":"7","type":"t_contract(LPToken)23179"},{"astId":30772,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"pooledTokens","offset":0,"slot":"8","type":"t_array(t_contract(IERC20)10812)dyn_storage"},{"astId":30775,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"tokenPrecisionMultipliers","offset":0,"slot":"9","type":"t_array(t_uint256)dyn_storage"},{"astId":30778,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"balances","offset":0,"slot":"10","type":"t_array(t_uint256)dyn_storage"},{"astId":30781,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"adminFees","offset":0,"slot":"11","type":"t_array(t_uint256)dyn_storage"},{"astId":30783,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"disabled","offset":0,"slot":"12","type":"t_bool"},{"astId":30785,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"removeTime","offset":0,"slot":"13","type":"t_uint256"}],"numberOfBytes":"448"},"t_struct(TokenConfig)29395_storage":{"encoding":"inplace","label":"struct TokenConfig","members":[{"astId":29380,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"representation","offset":0,"slot":"0","type":"t_address"},{"astId":29382,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"representationDecimals","offset":20,"slot":"0","type":"t_uint8"},{"astId":29384,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"adopted","offset":0,"slot":"1","type":"t_address"},{"astId":29386,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"adoptedDecimals","offset":20,"slot":"1","type":"t_uint8"},{"astId":29388,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"adoptedToLocalExternalPools","offset":0,"slot":"2","type":"t_address"},{"astId":29390,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"approval","offset":20,"slot":"2","type":"t_bool"},{"astId":29392,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"cap","offset":0,"slot":"3","type":"t_uint256"},{"astId":29394,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"custodied","offset":0,"slot":"4","type":"t_uint256"}],"numberOfBytes":"160"},"t_struct(TokenId)37728_storage":{"encoding":"inplace","label":"struct TokenId","members":[{"astId":37725,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"domain","offset":0,"slot":"0","type":"t_uint32"},{"astId":37727,"contract":"contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet","label":"id","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"addSwapLiquidity(bytes32,uint256[],uint256,uint256)":{"notice":"Add liquidity to the pool with the given amounts of tokens"},"calculateRemoveSwapLiquidity(bytes32,uint256)":{"notice":"A simple method to calculate amount of each underlying tokens that is returned upon burning given amount of LP tokens"},"calculateRemoveSwapLiquidityOneToken(bytes32,uint256,uint8)":{"notice":"Calculate the amount of underlying token available to withdraw when withdrawing via only single token"},"calculateSwap(bytes32,uint8,uint8,uint256)":{"notice":"Calculate amount of tokens you receive on swap"},"calculateSwapTokenAmount(bytes32,uint256[],bool)":{"notice":"A simple method to calculate prices from deposits or withdrawals, excluding fees but including slippage. This is helpful as an input into the various \"min\" parameters on calls to fight front-running"},"getSwapA(bytes32)":{"notice":"Return A, the amplification coefficient * n ** (n - 1)"},"getSwapAPrecise(bytes32)":{"notice":"Return A in its raw precision form"},"getSwapAdminBalance(bytes32,uint256)":{"notice":"This function reads the accumulated amount of admin fees of the token with given index"},"getSwapLPToken(bytes32)":{"notice":"Return LP token for canonical Id"},"getSwapStorage(bytes32)":{"notice":"Return Stable swap storage"},"getSwapToken(bytes32,uint8)":{"notice":"Return address of the pooled token at given index. Reverts if tokenIndex is out of range."},"getSwapTokenBalance(bytes32,uint8)":{"notice":"Return current balance of the pooled token at given index"},"getSwapTokenIndex(bytes32,address)":{"notice":"Return the index of the given token address. Reverts if no matching token is found."},"getSwapVirtualPrice(bytes32)":{"notice":"Get the virtual price, to help calculate profit"},"removeSwapLiquidity(bytes32,uint256,uint256[],uint256)":{"notice":"Burn LP tokens to remove liquidity from the pool. Withdraw fee that decays linearly over period of 4 weeks since last deposit will apply."},"removeSwapLiquidityImbalance(bytes32,uint256[],uint256,uint256)":{"notice":"Remove liquidity from the pool, weighted differently than the pool's current balances. Withdraw fee that decays linearly over period of 4 weeks since last deposit will apply."},"removeSwapLiquidityOneToken(bytes32,uint256,uint8,uint256,uint256)":{"notice":"Remove liquidity from the pool all in one token. Withdraw fee that decays linearly over period of 4 weeks since last deposit will apply."},"swap(bytes32,uint8,uint8,uint256,uint256,uint256)":{"notice":"Swap two tokens using this pool"},"swapExact(bytes32,uint256,address,address,uint256,uint256)":{"notice":"Swap two tokens using this pool"},"swapExactOut(bytes32,uint256,address,address,uint256,uint256)":{"notice":"Swap two tokens using this pool"}},"notice":"This contract is responsible for custody of closely pegged assets (eg. group of stablecoins) and automatic market making system. Users become an LP (Liquidity Provider) by depositing their tokens in desired ratios for an exchange of the pool token that represents their share of the pool. Users can burn pool tokens and withdraw their share of token(s). Each time a swap between the pooled tokens happens, a set fee incurs which effectively gets distributed to the LPs. In case of emergencies, admin can pause additional deposits, swaps, or single-asset withdraws - which stops the ratio of the tokens in the pool from changing. Users can always withdraw their tokens via multi-asset withdraws.","version":1}}},"contracts/core/connext/facets/SwapAdminFacet.sol":{"SwapAdminFacet":{"abi":[{"inputs":[],"name":"AssetLogic__handleOutgoingAsset_notNative","type":"error"},{"inputs":[],"name":"BaseConnextFacet__getAdoptedAsset_assetNotFound","type":"error"},{"inputs":[],"name":"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonXCallReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__whenNotPaused_paused","type":"error"},{"inputs":[],"name":"SwapAdminFacet__disableSwap_alreadyDisabled","type":"error"},{"inputs":[],"name":"SwapAdminFacet__disableSwap_notInitialized","type":"error"},{"inputs":[],"name":"SwapAdminFacet__initializeSwap_aExceedMax","type":"error"},{"inputs":[],"name":"SwapAdminFacet__initializeSwap_adminFeeExceedMax","type":"error"},{"inputs":[],"name":"SwapAdminFacet__initializeSwap_alreadyInitialized","type":"error"},{"inputs":[],"name":"SwapAdminFacet__initializeSwap_decimalsMismatch","type":"error"},{"inputs":[],"name":"SwapAdminFacet__initializeSwap_duplicateTokens","type":"error"},{"inputs":[],"name":"SwapAdminFacet__initializeSwap_failedInitLpTokenClone","type":"error"},{"inputs":[],"name":"SwapAdminFacet__initializeSwap_feeExceedMax","type":"error"},{"inputs":[],"name":"SwapAdminFacet__initializeSwap_invalidPooledTokens","type":"error"},{"inputs":[],"name":"SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax","type":"error"},{"inputs":[],"name":"SwapAdminFacet__initializeSwap_zeroTokenAddress","type":"error"},{"inputs":[],"name":"SwapAdminFacet__removeSwap_delayNotElapsed","type":"error"},{"inputs":[],"name":"SwapAdminFacet__removeSwap_notDisabledPool","type":"error"},{"inputs":[],"name":"SwapAdminFacet__removeSwap_notInitialized","type":"error"},{"inputs":[],"name":"SwapAdminFacet__updateLpTokenTarget_invalidNewAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"newAdminFee","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"AdminFeesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"AdminFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"LPTokenTargetUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"futureA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"futureTime","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"RampAStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"RampAStopped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"SwapDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"newSwapFee","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"SwapFeesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"components":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint256","name":"initialA","type":"uint256"},{"internalType":"uint256","name":"futureA","type":"uint256"},{"internalType":"uint256","name":"initialATime","type":"uint256"},{"internalType":"uint256","name":"futureATime","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"uint256","name":"adminFee","type":"uint256"},{"internalType":"contract LPToken","name":"lpToken","type":"address"},{"internalType":"contract IERC20[]","name":"pooledTokens","type":"address[]"},{"internalType":"uint256[]","name":"tokenPrecisionMultipliers","type":"uint256[]"},{"internalType":"uint256[]","name":"balances","type":"uint256[]"},{"internalType":"uint256[]","name":"adminFees","type":"uint256[]"},{"internalType":"bool","name":"disabled","type":"bool"},{"internalType":"uint256","name":"removeTime","type":"uint256"}],"indexed":false,"internalType":"struct SwapUtils.Swap","name":"swap","type":"tuple"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"SwapInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"SwapRemoved","type":"event"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"disableSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"},{"internalType":"contract IERC20[]","name":"_pooledTokens","type":"address[]"},{"internalType":"uint8[]","name":"decimals","type":"uint8[]"},{"internalType":"string","name":"lpTokenName","type":"string"},{"internalType":"string","name":"lpTokenSymbol","type":"string"},{"internalType":"uint256","name":"_a","type":"uint256"},{"internalType":"uint256","name":"_fee","type":"uint256"},{"internalType":"uint256","name":"_adminFee","type":"uint256"}],"name":"initializeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"isDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpTokenTargetAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint256","name":"futureA","type":"uint256"},{"internalType":"uint256","name":"futureTime","type":"uint256"}],"name":"rampA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"removeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint256","name":"newAdminFee","type":"uint256"}],"name":"setSwapAdminFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint256","name":"newSwapFee","type":"uint256"}],"name":"setSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"stopRampA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateLpTokenTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"withdrawSwapAdminFees","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.","events":{"AdminFeesSet(bytes32,uint256,address)":{"params":{"caller":"- The caller of the function","key":"- Identifier for asset","newAdminFee":"- The updated fee"}},"AdminFeesWithdrawn(bytes32,address)":{"params":{"caller":"- The caller of the function","key":"- Identifier for asset"}},"LPTokenTargetUpdated(address,address,address)":{"params":{"caller":"- The caller of the function","newAddress":"- Updated address","oldAddress":"- The old lpTokenTargetAddress"}},"RampAStarted(bytes32,uint256,uint256,address)":{"params":{"caller":"- The caller of the function","futureA":"- The final A value after ramp","futureTime":"- The time A should reach the final value","key":"- Identifier for asset"}},"RampAStopped(bytes32,address)":{"params":{"caller":"- The caller of the function","key":"- Identifier for asset"}},"SwapDisabled(bytes32,address)":{"params":{"caller":"- The caller of the function","key":"- Identifier for asset"}},"SwapFeesSet(bytes32,uint256,address)":{"params":{"caller":"- The caller of the function","key":"- Identifier for asset","newSwapFee":"- The updated fee"}},"SwapInitialized(bytes32,(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,address,address[],uint256[],uint256[],uint256[],bool,uint256),address)":{"params":{"caller":"- The caller of the function","key":"- Identifier for asset","swap":"- The swap that was initialized"}},"SwapRemoved(bytes32,address)":{"params":{"caller":"- The caller of the function","key":"- Identifier for asset"}}},"kind":"dev","methods":{"disableSwap(bytes32)":{"params":{"_key":"the hash of the canonical id and domain for token"}},"initializeSwap(bytes32,address[],uint8[],string,string,uint256,uint256,uint256)":{"details":"The swap can only be updated after initialization via `rampA`. This means if this value is incorrectly set, it will take some time to reach the correct value.","params":{"_a":"the amplification coefficient * n ** (n - 1). See the StableSwap paper for details","_adminFee":"default adminFee to be initialized with","_fee":"default swap fee to be initialized with","_key":"the hash of the canonical id and domain for token","_pooledTokens":"an array of ERC20s this pool will accept. length of this array should be in 2 ~ 16","decimals":"the decimals to use for each pooled token, eg 8 for WBTC. Cannot be larger than POOL_PRECISION_DECIMALS(18) Only fixed decimal tokens are allowed.","lpTokenName":"the long-form name of the token to be deployed","lpTokenSymbol":"the short symbol for the token to be deployed"}},"isDisabled(bytes32)":{"params":{"key":"Hash of the canonical id + domain"},"returns":{"_0":"disabled flag"}},"lpTokenTargetAddress()":{"returns":{"_0":"address"}},"rampA(bytes32,uint256,uint256)":{"params":{"futureA":"the new A to ramp towards","futureTime":"timestamp when the new A should be reached","key":"Hash of the canonical domain and id"}},"removeSwap(bytes32)":{"params":{"_key":"the hash of the canonical id and domain for token"}},"setSwapAdminFee(bytes32,uint256)":{"params":{"key":"Hash of the canonical domain and id","newAdminFee":"new admin fee to be applied on future transactions"}},"setSwapFee(bytes32,uint256)":{"params":{"key":"Hash of the canonical domain and id","newSwapFee":"new swap fee to be applied on future transactions"}},"stopRampA(bytes32)":{"params":{"key":"Hash of the canonical domain and id"}},"updateLpTokenTarget(address)":{"params":{"newAddress":"New lpTokenTargetAddress"}},"withdrawSwapAdminFees(bytes32)":{"params":{"key":"Hash of the canonical domain and id"}}},"title":"SwapAdminFacet","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50612279806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806372a30e081161007157806372a30e081461013f5780638dc51484146101525780639c8eab9714610165578063a1a23c2914610178578063e5f6220f1461018b578063ea027c2f1461019e57600080fd5b80631963e426146100ae5780632bf63bcc146100c35780633e74aea0146100e357806343be5eaf146100f65780634b141bb414610109575b600080fd5b6100c16100bc366004611b2a565b6101b1565b005b601a546040516001600160a01b0390911681526020015b60405180910390f35b6100c16100f1366004611b56565b610273565b6100c1610104366004611b6f565b610546565b61012f610117366004611b56565b6000908152601860205260409020600c015460ff1690565b60405190151581526020016100da565b6100c161014d366004611b56565b6105f7565b6100c1610160366004611ba6565b6106a8565b6100c1610173366004611b6f565b6107a0565b6100c1610186366004611b56565b610851565b6100c1610199366004611d7d565b6108ee565b6100c16101ac366004611b56565b610fc4565b336101ba6110fc565b6001600160a01b0316141580156101f5575060033360009081526014602052604090205460ff1660038111156101f2576101f2611e4f565b14155b1561021357604051637b32c26b60e01b815260040160405180910390fd5b600083815260186020526040902061022c90838361112a565b60408051838152602081018390523381830152905184917f58e6fbecdb1a94225cf82c6b317a771aa08c9ab6552702b819bcd84ba8e8312f919081900360600190a2505050565b3361027c6110fc565b6001600160a01b0316141580156102b7575060033360009081526014602052604090205460ff1660038111156102b4576102b4611e4f565b14155b156102d557604051637b32c26b60e01b815260040160405180910390fd5b6000818152601860205260408120600801549081900361030857604051635e98c38d60e11b815260040160405180910390fd5b6000828152601860205260409020600c015460ff1661033a57604051637baf490160e11b815260040160405180910390fd5b6000828152601860205260409020600d015442101561036c576040516302aba83160e51b815260040160405180910390fd5b60005b8181101561046757600083815260186020526040812060080180548390811061039a5761039a611e65565b6000918252602080832090910154868352601890915260408220600a0180546001600160a01b03909216935090849081106103d7576103d7611e65565b90600052602060002001541115610435576000848152601860205260409020600a0180546104359133918590811061041157610411611e65565b9060005260206000200154836001600160a01b03166113b89092919063ffffffff16565b60008481526019602090815260408083206001600160a01b03909416835292905220805460ff1916905560010161036f565b50610472823361140f565b60008281526018602052604081208181556001810182905560028101829055600381018290556004810182905560058101829055600681018290556007810180546001600160a01b0319169055906104cd6008830182611a54565b6104db600983016000611a54565b6104e9600a83016000611a54565b6104f7600b83016000611a54565b50600c8101805460ff191690556000600d9091015560405133815282907fb729dde7e954c83f790a153521f9d2e12779b36305ed42c8bf86ac4cf7ce6915906020015b60405180910390a25050565b3361054f6110fc565b6001600160a01b03161415801561058a575060033360009081526014602052604090205460ff16600381111561058757610587611e4f565b14155b156105a857604051637b32c26b60e01b815260040160405180910390fd5b60008281526018602052604090206105c09082611462565b6040805182815233602082015283917f6d9b91502dc11e7c127e8e2d114c1f8026647ecb6b987c1baaadb706b5eb3176910161053a565b336106006110fc565b6001600160a01b03161415801561063b575060033360009081526014602052604090205460ff16600381111561063857610638611e4f565b14155b1561065957604051637b32c26b60e01b815260040160405180910390fd5b6000818152601860205260409020610670906114e3565b60405133815281907f86ce75679135e270f845c02bcb49ef6fb50464cb322dcc30096cccd13d2597df9060200160405180910390a250565b336106b16110fc565b6001600160a01b0316141580156106ec575060033360009081526014602052604090205460ff1660038111156106e9576106e9611e4f565b14155b1561070a57604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0381163b61073257604051630db340a960e21b815260040160405180910390fd5b601a54604080516001600160a01b03928316815291831660208301523382820152517f98bc4f3f4ec7b43d0c86b6136979bfbe279b2d54a930505d34ec02d72dfb1c409181900360600190a1601a80546001600160a01b0319166001600160a01b0392909216919091179055565b336107a96110fc565b6001600160a01b0316141580156107e4575060033360009081526014602052604090205460ff1660038111156107e1576107e1611e4f565b14155b1561080257604051637b32c26b60e01b815260040160405180910390fd5b600082815260186020526040902061081a90826115a4565b6040805182815233602082015283917f46eefbb271e4103912d3c227656de8afc0849f4c8cba4b2a1e38b660361e0463910161053a565b3361085a6110fc565b6001600160a01b031614158015610895575060033360009081526014602052604090205460ff16600381111561089257610892611e4f565b14155b156108b357604051637b32c26b60e01b815260040160405180910390fd5b601654600119016108d757604051637ce54e2d60e11b815260040160405180910390fd5b60026016556108e6813361140f565b506001601655565b336108f76110fc565b6001600160a01b031614158015610932575060033360009081526014602052604090205460ff16600381111561092f5761092f611e4f565b14155b1561095057604051637b32c26b60e01b815260040160405180910390fd5b60008881526018602052604090206008015415610980576040516376a1368960e11b815260040160405180910390fd5b600287511080610991575060108751115b156109af5760405163502ef3af60e01b815260040160405180910390fd5b8651865181146109d25760405163d6e48e5d60e01b815260040160405180910390fd5b6000875167ffffffffffffffff8111156109ee576109ee611bc3565b604051908082528060200260200182016040528015610a17578160200160208202803683370190505b50905060005b82811015610c2d578015610ae65760008b81526019602052604081208b519091908c9084908110610a5057610a50611e65565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16151580610ac85750898181518110610a9157610a91611e65565b60200260200101516001600160a01b03168a600081518110610ab557610ab5611e65565b60200260200101516001600160a01b0316145b15610ae657604051632fa9e93b60e11b815260040160405180910390fd5b60006001600160a01b03168a8281518110610b0357610b03611e65565b60200260200101516001600160a01b031603610b3257604051634ce187ad60e11b815260040160405180910390fd5b601260ff16898281518110610b4957610b49611e65565b602002602001015160ff161115610b7357604051637d4ada4560e11b815260040160405180910390fd5b888181518110610b8557610b85611e65565b60200260200101516012610b999190611e91565b610ba79060ff16600a611f94565b828281518110610bb957610bb9611e65565b60200260200101818152505080600060190160008d815260200190815260200160002060008c8481518110610bf057610bf0611e65565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191660ff92909216919091179055600101610a1d565b50610c3c6001620f4240611fa0565b851115610c5c576040516306aedbfd60e01b815260040160405180910390fd5b610c6b60016305f5e100611fa0565b841115610c8b57604051634fc2217d60e11b815260040160405180910390fd5b610c9b60016402540be400611fa0565b831115610cbb576040516384b9a37f60e01b815260040160405180910390fd5b601a54600090610cd3906001600160a01b0316611626565b60405163266c45bb60e11b81529091506001600160a01b03821690634cd88b7690610d04908b908b90600401612003565b6020604051808303816000875af1158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190612031565b610d645760405163276cd8b960e01b815260040160405180910390fd5b6000604051806101c001604052808d8152602001606489610d859190612053565b8152602001610d9560648a612053565b81526020016000815260200160008152602001878152602001868152602001836001600160a01b031681526020018c81526020018481526020018c5167ffffffffffffffff811115610de957610de9611bc3565b604051908082528060200260200182016040528015610e12578160200160208202803683370190505b5081526020018c5167ffffffffffffffff811115610e3257610e32611bc3565b604051908082528060200260200182016040528015610e5b578160200160208202803683370190505b5081526000602080830182905260409283018290528f8252601881529082902083518155838201516001820155918301516002830155606083015160038301556080830151600483015560a0830151600583015560c0830151600683015560e08301516007830180546001600160a01b0319166001600160a01b0390921691909117905561010083015180519394508493610efc9260088501920190611a75565b506101208201518051610f19916009840191602090910190611ada565b506101408201518051610f3691600a840191602090910190611ada565b506101608201518051610f5391600b840191602090910190611ada565b50610180820151600c8201805460ff19169115159190911790556101a090910151600d909101556040518c907f17624207b3ada0ecb82d25bef7eb308a62e614001936961428b08af45651c3f190610fae90849033906120de565b60405180910390a2505050505050505050505050565b33610fcd6110fc565b6001600160a01b031614158015611008575060033360009081526014602052604090205460ff16600381111561100557611005611e4f565b14155b1561102657604051637b32c26b60e01b815260040160405180910390fd5b60008181526018602052604081206008015490819003611059576040516303bb6f8760e61b815260040160405180910390fd5b6000828152601860205260409020600c015460ff161561108c576040516380cd476f60e01b815260040160405180910390fd5b6000828152601860205260409020600c01805460ff191660011790556110b562093a8042612201565b600083815260186020908152604091829020600d01929092555133815283917f436f3434791c806271347887826cd8df45595907e6cfdc188dd8c9b468d8521e910161053a565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b62015180836003015461113d9190612201565b4210156111915760405162461bcd60e51b815260206004820152601f60248201527f57616974203120646179206265666f7265207374617274696e672072616d700060448201526064015b60405180910390fd5b61119e6212750042612201565b8110156111e65760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e742072616d702074696d6560501b6044820152606401611188565b81158015906111f75750620f424082105b6112435760405162461bcd60e51b815260206004820181905260248201527f667574757265415f206d757374206265203e203020616e64203c204d41585f416044820152606401611188565b600061124e846116c0565b9050600061125d606485612053565b905080820361129c5760405162461bcd60e51b815260206004820152600b60248201526a02176616c69642072616d760ac1b6044820152606401611188565b818110156112fb57816112b0600283612053565b10156112f65760405162461bcd60e51b8152602060048201526015602482015274199d5d1d5c995057c81a5cc81d1bdbc81cdb585b1b605a1b6044820152606401611188565b61134d565b611306600283612053565b81111561134d5760405162461bcd60e51b8152602060048201526015602482015274667574757265415f20697320746f6f206c6172676560581b6044820152606401611188565b600185018290556002850181905542600386018190556004860184905560408051848152602081018490528082019290925260608201859052517fa2b71ec6df949300b59aab36b55e189697b750119dd349fcfa8c0f779e83c2549181900360800190a15050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261140a908490611709565b505050565b600082815260186020526040902061142790826117db565b6040516001600160a01b038216815282907f2e6c35653408399a9853c5e5f81b67018cba78568bfd76dd46f93c825cbfb95d9060200161053a565b6114716305f5e1006001612201565b81106114aa5760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401611188565b6005820181905581546040518281527f29aee3d14d18e1b8ace81481838ab2996fee9446a44336847d1d5c7fdf2471b19060200161053a565b428160040154116115365760405162461bcd60e51b815260206004820152601760248201527f52616d7020697320616c72656164792073746f707065640000000000000000006044820152606401611188565b6000611541826116c0565b60018301819055600283018190554260038401819055600484018190556040519192507f46e22fb3709ad289f62ce63d469248536dbc78d82b84a3d7e74ad606dc2019389161159891848252602082015260400190565b60405180910390a15050565b6115b46402540be4006001612201565b81106115ed5760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401611188565b6006820181905581546040518281527f7b4e02f2e320870ba4f764edf60a5289a465018a3fe159f0d72ba33139b0a6169060200161053a565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166116bb5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b6044820152606401611188565b919050565b6004810154600282015460018301549091908083148015906116e157508142105b15611702576000846003015490508083038142038502428503840201049350505b5050919050565b600061175e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166118819092919063ffffffff16565b80519091501561140a578080602001905181019061177c9190612031565b61140a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611188565b600882015460005b8181101561187b57600084600801828154811061180257611802611e65565b6000918252602082200154600b870180546001600160a01b039092169350908490811061183157611831611e65565b90600052602060002001549050806000146118715785600b01838154811061185b5761185b611e65565b600091825260208220015561187182868361189a565b50506001016117e3565b50505050565b606061189084846000856118d9565b90505b9392505050565b806000036118a757505050565b6001600160a01b0383166118ce57604051633a48ca7b60e11b815260040160405180910390fd5b61140a8383836113b8565b60608247101561193a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611188565b600080866001600160a01b031685876040516119569190612214565b60006040518083038185875af1925050503d8060008114611993576040519150601f19603f3d011682016040523d82523d6000602084013e611998565b606091505b50915091506119a9878383876119b6565b925050505b949350505050565b60608315611a25578251600003611a1e576001600160a01b0385163b611a1e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611188565b50816119ae565b6119ae8383815115611a3a5781518083602001fd5b8060405162461bcd60e51b81526004016111889190612230565b5080546000825590600052602060002090810190611a729190611b15565b50565b828054828255906000526020600020908101928215611aca579160200282015b82811115611aca57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611a95565b50611ad6929150611b15565b5090565b828054828255906000526020600020908101928215611aca579160200282015b82811115611aca578251825591602001919060010190611afa565b5b80821115611ad65760008155600101611b16565b600080600060608486031215611b3f57600080fd5b505081359360208301359350604090920135919050565b600060208284031215611b6857600080fd5b5035919050565b60008060408385031215611b8257600080fd5b50508035926020909101359150565b6001600160a01b0381168114611a7257600080fd5b600060208284031215611bb857600080fd5b813561189381611b91565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611c0257611c02611bc3565b604052919050565b600067ffffffffffffffff821115611c2457611c24611bc3565b5060051b60200190565b600082601f830112611c3f57600080fd5b81356020611c54611c4f83611c0a565b611bd9565b82815260059290921b84018101918181019086841115611c7357600080fd5b8286015b84811015611c97578035611c8a81611b91565b8352918301918301611c77565b509695505050505050565b600082601f830112611cb357600080fd5b81356020611cc3611c4f83611c0a565b82815260059290921b84018101918181019086841115611ce257600080fd5b8286015b84811015611c9757803560ff81168114611d005760008081fd5b8352918301918301611ce6565b600082601f830112611d1e57600080fd5b813567ffffffffffffffff811115611d3857611d38611bc3565b611d4b601f8201601f1916602001611bd9565b818152846020838601011115611d6057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b031215611d9a57600080fd5b88359750602089013567ffffffffffffffff80821115611db957600080fd5b611dc58c838d01611c2e565b985060408b0135915080821115611ddb57600080fd5b611de78c838d01611ca2565b975060608b0135915080821115611dfd57600080fd5b611e098c838d01611d0d565b965060808b0135915080821115611e1f57600080fd5b50611e2c8b828c01611d0d565b989b979a50959894979660a0860135965060c08601359560e00135945092505050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff8281168282160390811115611eaa57611eaa611e7b565b92915050565b600181815b80851115611eeb578160001904821115611ed157611ed1611e7b565b80851615611ede57918102915b93841c9390800290611eb5565b509250929050565b600082611f0257506001611eaa565b81611f0f57506000611eaa565b8160018114611f255760028114611f2f57611f4b565b6001915050611eaa565b60ff841115611f4057611f40611e7b565b50506001821b611eaa565b5060208310610133831016604e8410600b8410161715611f6e575081810a611eaa565b611f788383611eb0565b8060001904821115611f8c57611f8c611e7b565b029392505050565b60006118938383611ef3565b81810381811115611eaa57611eaa611e7b565b60005b83811015611fce578181015183820152602001611fb6565b50506000910152565b60008151808452611fef816020860160208601611fb3565b601f01601f19169290920160200192915050565b6040815260006120166040830185611fd7565b82810360208401526120288185611fd7565b95945050505050565b60006020828403121561204357600080fd5b8151801515811461189357600080fd5b8082028115828204841417611eaa57611eaa611e7b565b600081518084526020808501945080840160005b838110156120a35781516001600160a01b03168752958201959082019060010161207e565b509495945050505050565b600081518084526020808501945080840160005b838110156120a3578151875295820195908201906001016120c2565b60408152825160408201526020830151606082015260408301516080820152606083015160a0820152608083015160c082015260a083015160e0820152600060c0840151610100818185015260e08601519150610120612148818601846001600160a01b03169052565b8187015192506101c09150610140828187015261216961020087018561206a565b9350818801519150603f1961016081888703018189015261218a86856120ae565b9550828a0151935061018092508188870301838901526121aa86856120ae565b9550808a01519350506101a08188870301818901526121c986856120ae565b9550828a015193506121de8589018515159052565b8901516101e08801525050506001600160a01b0385166020850152509050611893565b80820180821115611eaa57611eaa611e7b565b60008251612226818460208701611fb3565b9190910192915050565b6020815260006118936020830184611fd756fea264697066735822122064a71594956868d9b1646f86d724aacb274b2332baed3ab7d2e4dd393d32da7664736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2279 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x72A30E08 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x72A30E08 EQ PUSH2 0x13F JUMPI DUP1 PUSH4 0x8DC51484 EQ PUSH2 0x152 JUMPI DUP1 PUSH4 0x9C8EAB97 EQ PUSH2 0x165 JUMPI DUP1 PUSH4 0xA1A23C29 EQ PUSH2 0x178 JUMPI DUP1 PUSH4 0xE5F6220F EQ PUSH2 0x18B JUMPI DUP1 PUSH4 0xEA027C2F EQ PUSH2 0x19E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1963E426 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x2BF63BCC EQ PUSH2 0xC3 JUMPI DUP1 PUSH4 0x3E74AEA0 EQ PUSH2 0xE3 JUMPI DUP1 PUSH4 0x43BE5EAF EQ PUSH2 0xF6 JUMPI DUP1 PUSH4 0x4B141BB4 EQ PUSH2 0x109 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0xBC CALLDATASIZE PUSH1 0x4 PUSH2 0x1B2A JUMP JUMPDEST PUSH2 0x1B1 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC1 PUSH2 0xF1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B56 JUMP JUMPDEST PUSH2 0x273 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x104 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B6F JUMP JUMPDEST PUSH2 0x546 JUMP JUMPDEST PUSH2 0x12F PUSH2 0x117 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B56 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xC ADD SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xDA JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x14D CALLDATASIZE PUSH1 0x4 PUSH2 0x1B56 JUMP JUMPDEST PUSH2 0x5F7 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x160 CALLDATASIZE PUSH1 0x4 PUSH2 0x1BA6 JUMP JUMPDEST PUSH2 0x6A8 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x173 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B6F JUMP JUMPDEST PUSH2 0x7A0 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x186 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B56 JUMP JUMPDEST PUSH2 0x851 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x199 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D7D JUMP JUMPDEST PUSH2 0x8EE JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x1AC CALLDATASIZE PUSH1 0x4 PUSH2 0x1B56 JUMP JUMPDEST PUSH2 0xFC4 JUMP JUMPDEST CALLER PUSH2 0x1BA PUSH2 0x10FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x1F5 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1F2 JUMPI PUSH2 0x1F2 PUSH2 0x1E4F JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x213 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x22C SWAP1 DUP4 DUP4 PUSH2 0x112A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE CALLER DUP2 DUP4 ADD MSTORE SWAP1 MLOAD DUP5 SWAP2 PUSH32 0x58E6FBECDB1A94225CF82C6B317A771AA08C9AB6552702B819BCD84BA8E8312F SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH2 0x27C PUSH2 0x10FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x2B7 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2B4 JUMPI PUSH2 0x2B4 PUSH2 0x1E4F JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x2D5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x8 ADD SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x308 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5E98C38D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xC ADD SLOAD PUSH1 0xFF AND PUSH2 0x33A JUMPI PUSH1 0x40 MLOAD PUSH4 0x7BAF4901 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD TIMESTAMP LT ISZERO PUSH2 0x36C JUMPI PUSH1 0x40 MLOAD PUSH4 0x2ABA831 PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x467 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x8 ADD DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH2 0x39A JUMPI PUSH2 0x39A PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD DUP7 DUP4 MSTORE PUSH1 0x18 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 PUSH1 0xA ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP4 POP SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x3D7 JUMPI PUSH2 0x3D7 PUSH2 0x1E65 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD GT ISZERO PUSH2 0x435 JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xA ADD DUP1 SLOAD PUSH2 0x435 SWAP2 CALLER SWAP2 DUP6 SWAP1 DUP2 LT PUSH2 0x411 JUMPI PUSH2 0x411 PUSH2 0x1E65 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x13B8 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x1 ADD PUSH2 0x36F JUMP JUMPDEST POP PUSH2 0x472 DUP3 CALLER PUSH2 0x140F JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x5 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x6 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x7 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE SWAP1 PUSH2 0x4CD PUSH1 0x8 DUP4 ADD DUP3 PUSH2 0x1A54 JUMP JUMPDEST PUSH2 0x4DB PUSH1 0x9 DUP4 ADD PUSH1 0x0 PUSH2 0x1A54 JUMP JUMPDEST PUSH2 0x4E9 PUSH1 0xA DUP4 ADD PUSH1 0x0 PUSH2 0x1A54 JUMP JUMPDEST PUSH2 0x4F7 PUSH1 0xB DUP4 ADD PUSH1 0x0 PUSH2 0x1A54 JUMP JUMPDEST POP PUSH1 0xC DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x0 PUSH1 0xD SWAP1 SWAP2 ADD SSTORE PUSH1 0x40 MLOAD CALLER DUP2 MSTORE DUP3 SWAP1 PUSH32 0xB729DDE7E954C83F790A153521F9D2E12779B36305ED42C8BF86AC4CF7CE6915 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST CALLER PUSH2 0x54F PUSH2 0x10FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x58A JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x587 JUMPI PUSH2 0x587 PUSH2 0x1E4F JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x5A8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x5C0 SWAP1 DUP3 PUSH2 0x1462 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE DUP4 SWAP2 PUSH32 0x6D9B91502DC11E7C127E8E2D114C1F8026647ECB6B987C1BAAADB706B5EB3176 SWAP2 ADD PUSH2 0x53A JUMP JUMPDEST CALLER PUSH2 0x600 PUSH2 0x10FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x63B JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x638 JUMPI PUSH2 0x638 PUSH2 0x1E4F JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x659 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x670 SWAP1 PUSH2 0x14E3 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER DUP2 MSTORE DUP2 SWAP1 PUSH32 0x86CE75679135E270F845C02BCB49EF6FB50464CB322DCC30096CCCD13D2597DF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST CALLER PUSH2 0x6B1 PUSH2 0x10FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x6EC JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x6E9 JUMPI PUSH2 0x6E9 PUSH2 0x1E4F JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x70A JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x732 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB340A9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE CALLER DUP3 DUP3 ADD MSTORE MLOAD PUSH32 0x98BC4F3F4EC7B43D0C86B6136979BFBE279B2D54A930505D34EC02D72DFB1C40 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 PUSH1 0x1A DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH2 0x7A9 PUSH2 0x10FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x7E4 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x7E1 JUMPI PUSH2 0x7E1 PUSH2 0x1E4F JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x81A SWAP1 DUP3 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE DUP4 SWAP2 PUSH32 0x46EEFBB271E4103912D3C227656DE8AFC0849F4C8CBA4B2A1E38B660361E0463 SWAP2 ADD PUSH2 0x53A JUMP JUMPDEST CALLER PUSH2 0x85A PUSH2 0x10FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x895 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x892 JUMPI PUSH2 0x892 PUSH2 0x1E4F JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x8B3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 NOT ADD PUSH2 0x8D7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE PUSH2 0x8E6 DUP2 CALLER PUSH2 0x140F JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x16 SSTORE JUMP JUMPDEST CALLER PUSH2 0x8F7 PUSH2 0x10FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x932 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x92F JUMPI PUSH2 0x92F PUSH2 0x1E4F JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x950 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x8 ADD SLOAD ISZERO PUSH2 0x980 JUMPI PUSH1 0x40 MLOAD PUSH4 0x76A13689 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP8 MLOAD LT DUP1 PUSH2 0x991 JUMPI POP PUSH1 0x10 DUP8 MLOAD GT JUMPDEST ISZERO PUSH2 0x9AF JUMPI PUSH1 0x40 MLOAD PUSH4 0x502EF3AF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP7 MLOAD DUP7 MLOAD DUP2 EQ PUSH2 0x9D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD6E48E5D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP8 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x9EE JUMPI PUSH2 0x9EE PUSH2 0x1BC3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xA17 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xC2D JUMPI DUP1 ISZERO PUSH2 0xAE6 JUMPI PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP12 MLOAD SWAP1 SWAP2 SWAP1 DUP13 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0xA50 JUMPI PUSH2 0xA50 PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO DUP1 PUSH2 0xAC8 JUMPI POP DUP10 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xA91 JUMPI PUSH2 0xA91 PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP11 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xAB5 JUMPI PUSH2 0xAB5 PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST ISZERO PUSH2 0xAE6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2FA9E93B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP11 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xB03 JUMPI PUSH2 0xB03 PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0xB32 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4CE187AD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x12 PUSH1 0xFF AND DUP10 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xB49 JUMPI PUSH2 0xB49 PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xFF AND GT ISZERO PUSH2 0xB73 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7D4ADA45 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP9 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xB85 JUMPI PUSH2 0xB85 PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x12 PUSH2 0xB99 SWAP2 SWAP1 PUSH2 0x1E91 JUMP JUMPDEST PUSH2 0xBA7 SWAP1 PUSH1 0xFF AND PUSH1 0xA PUSH2 0x1F94 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xBB9 JUMPI PUSH2 0xBB9 PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x0 PUSH1 0x19 ADD PUSH1 0x0 DUP14 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xBF0 JUMPI PUSH2 0xBF0 PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 ADD PUSH2 0xA1D JUMP JUMPDEST POP PUSH2 0xC3C PUSH1 0x1 PUSH3 0xF4240 PUSH2 0x1FA0 JUMP JUMPDEST DUP6 GT ISZERO PUSH2 0xC5C JUMPI PUSH1 0x40 MLOAD PUSH4 0x6AEDBFD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC6B PUSH1 0x1 PUSH4 0x5F5E100 PUSH2 0x1FA0 JUMP JUMPDEST DUP5 GT ISZERO PUSH2 0xC8B JUMPI PUSH1 0x40 MLOAD PUSH4 0x4FC2217D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC9B PUSH1 0x1 PUSH5 0x2540BE400 PUSH2 0x1FA0 JUMP JUMPDEST DUP4 GT ISZERO PUSH2 0xCBB JUMPI PUSH1 0x40 MLOAD PUSH4 0x84B9A37F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x0 SWAP1 PUSH2 0xCD3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x266C45BB PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x4CD88B76 SWAP1 PUSH2 0xD04 SWAP1 DUP12 SWAP1 DUP12 SWAP1 PUSH1 0x4 ADD PUSH2 0x2003 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD47 SWAP2 SWAP1 PUSH2 0x2031 JUMP JUMPDEST PUSH2 0xD64 JUMPI PUSH1 0x40 MLOAD PUSH4 0x276CD8B9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 DUP14 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x64 DUP10 PUSH2 0xD85 SWAP2 SWAP1 PUSH2 0x2053 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD95 PUSH1 0x64 DUP11 PUSH2 0x2053 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP13 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDE9 JUMPI PUSH2 0xDE9 PUSH2 0x1BC3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE12 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP DUP2 MSTORE PUSH1 0x20 ADD DUP13 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xE32 JUMPI PUSH2 0xE32 PUSH2 0x1BC3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE5B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 SWAP3 DUP4 ADD DUP3 SWAP1 MSTORE DUP16 DUP3 MSTORE PUSH1 0x18 DUP2 MSTORE SWAP1 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SSTORE DUP4 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SSTORE SWAP2 DUP4 ADD MLOAD PUSH1 0x2 DUP4 ADD SSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x3 DUP4 ADD SSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x4 DUP4 ADD SSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x5 DUP4 ADD SSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0x6 DUP4 ADD SSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0x7 DUP4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x100 DUP4 ADD MLOAD DUP1 MLOAD SWAP4 SWAP5 POP DUP5 SWAP4 PUSH2 0xEFC SWAP3 PUSH1 0x8 DUP6 ADD SWAP3 ADD SWAP1 PUSH2 0x1A75 JUMP JUMPDEST POP PUSH2 0x120 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0xF19 SWAP2 PUSH1 0x9 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x1ADA JUMP JUMPDEST POP PUSH2 0x140 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0xF36 SWAP2 PUSH1 0xA DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x1ADA JUMP JUMPDEST POP PUSH2 0x160 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0xF53 SWAP2 PUSH1 0xB DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x1ADA JUMP JUMPDEST POP PUSH2 0x180 DUP3 ADD MLOAD PUSH1 0xC DUP3 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1A0 SWAP1 SWAP2 ADD MLOAD PUSH1 0xD SWAP1 SWAP2 ADD SSTORE PUSH1 0x40 MLOAD DUP13 SWAP1 PUSH32 0x17624207B3ADA0ECB82D25BEF7EB308A62E614001936961428B08AF45651C3F1 SWAP1 PUSH2 0xFAE SWAP1 DUP5 SWAP1 CALLER SWAP1 PUSH2 0x20DE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH2 0xFCD PUSH2 0x10FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x1008 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1005 JUMPI PUSH2 0x1005 PUSH2 0x1E4F JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x1026 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x8 ADD SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x1059 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3BB6F87 PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xC ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x108C JUMPI PUSH1 0x40 MLOAD PUSH4 0x80CD476F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xC ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x10B5 PUSH3 0x93A80 TIMESTAMP PUSH2 0x2201 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0xD ADD SWAP3 SWAP1 SWAP3 SSTORE MLOAD CALLER DUP2 MSTORE DUP4 SWAP2 PUSH32 0x436F3434791C806271347887826CD8DF45595907E6CFDC188DD8C9B468D8521E SWAP2 ADD PUSH2 0x53A JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH3 0x15180 DUP4 PUSH1 0x3 ADD SLOAD PUSH2 0x113D SWAP2 SWAP1 PUSH2 0x2201 JUMP JUMPDEST TIMESTAMP LT ISZERO PUSH2 0x1191 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x57616974203120646179206265666F7265207374617274696E672072616D7000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x119E PUSH3 0x127500 TIMESTAMP PUSH2 0x2201 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x11E6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x496E73756666696369656E742072616D702074696D65 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x11F7 JUMPI POP PUSH3 0xF4240 DUP3 LT JUMPDEST PUSH2 0x1243 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x667574757265415F206D757374206265203E203020616E64203C204D41585F41 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x124E DUP5 PUSH2 0x16C0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x125D PUSH1 0x64 DUP6 PUSH2 0x2053 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 SUB PUSH2 0x129C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x2176616C69642072616D7 PUSH1 0xAC SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x12FB JUMPI DUP2 PUSH2 0x12B0 PUSH1 0x2 DUP4 PUSH2 0x2053 JUMP JUMPDEST LT ISZERO PUSH2 0x12F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x199D5D1D5C995057C81A5CC81D1BDBC81CDB585B1B PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST PUSH2 0x134D JUMP JUMPDEST PUSH2 0x1306 PUSH1 0x2 DUP4 PUSH2 0x2053 JUMP JUMPDEST DUP2 GT ISZERO PUSH2 0x134D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x667574757265415F20697320746F6F206C61726765 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST PUSH1 0x1 DUP6 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP6 ADD DUP2 SWAP1 SSTORE TIMESTAMP PUSH1 0x3 DUP7 ADD DUP2 SWAP1 SSTORE PUSH1 0x4 DUP7 ADD DUP5 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP3 ADD DUP6 SWAP1 MSTORE MLOAD PUSH32 0xA2B71EC6DF949300B59AAB36B55E189697B750119DD349FCFA8C0F779E83C254 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x140A SWAP1 DUP5 SWAP1 PUSH2 0x1709 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1427 SWAP1 DUP3 PUSH2 0x17DB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP2 MSTORE DUP3 SWAP1 PUSH32 0x2E6C35653408399A9853C5E5F81B67018CBA78568BFD76DD46F93C825CBFB95D SWAP1 PUSH1 0x20 ADD PUSH2 0x53A JUMP JUMPDEST PUSH2 0x1471 PUSH4 0x5F5E100 PUSH1 0x1 PUSH2 0x2201 JUMP JUMPDEST DUP2 LT PUSH2 0x14AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0xE8DEDE40D0D2CED PUSH1 0xC3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST PUSH1 0x5 DUP3 ADD DUP2 SWAP1 SSTORE DUP2 SLOAD PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0x29AEE3D14D18E1B8ACE81481838AB2996FEE9446A44336847D1D5C7FDF2471B1 SWAP1 PUSH1 0x20 ADD PUSH2 0x53A JUMP JUMPDEST TIMESTAMP DUP2 PUSH1 0x4 ADD SLOAD GT PUSH2 0x1536 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x52616D7020697320616C72656164792073746F70706564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1541 DUP3 PUSH2 0x16C0 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD DUP2 SWAP1 SSTORE PUSH1 0x2 DUP4 ADD DUP2 SWAP1 SSTORE TIMESTAMP PUSH1 0x3 DUP5 ADD DUP2 SWAP1 SSTORE PUSH1 0x4 DUP5 ADD DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP3 POP PUSH32 0x46E22FB3709AD289F62CE63D469248536DBC78D82B84A3D7E74AD606DC201938 SWAP2 PUSH2 0x1598 SWAP2 DUP5 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0x15B4 PUSH5 0x2540BE400 PUSH1 0x1 PUSH2 0x2201 JUMP JUMPDEST DUP2 LT PUSH2 0x15ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0xE8DEDE40D0D2CED PUSH1 0xC3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST PUSH1 0x6 DUP3 ADD DUP2 SWAP1 SSTORE DUP2 SLOAD PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0x7B4E02F2E320870BA4F764EDF60A5289A465018A3FE159F0D72BA33139B0A616 SWAP1 PUSH1 0x20 ADD PUSH2 0x53A JUMP JUMPDEST PUSH1 0x0 PUSH23 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000 DUP3 PUSH1 0x60 SHL PUSH1 0xE8 SHR OR PUSH1 0x0 MSTORE PUSH15 0x5AF43D82803E903D91602B57FD5BF3 DUP3 PUSH1 0x78 SHL OR PUSH1 0x20 MSTORE PUSH1 0x37 PUSH1 0x9 PUSH1 0x0 CREATE SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x16BB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x115490CC4C4D8DCE8818DC99585D194819985A5B1959 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x2 DUP3 ADD SLOAD PUSH1 0x1 DUP4 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP1 DUP4 EQ DUP1 ISZERO SWAP1 PUSH2 0x16E1 JUMPI POP DUP2 TIMESTAMP LT JUMPDEST ISZERO PUSH2 0x1702 JUMPI PUSH1 0x0 DUP5 PUSH1 0x3 ADD SLOAD SWAP1 POP DUP1 DUP4 SUB DUP2 TIMESTAMP SUB DUP6 MUL TIMESTAMP DUP6 SUB DUP5 MUL ADD DIV SWAP4 POP POP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x175E DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1881 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x140A JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x177C SWAP2 SWAP1 PUSH2 0x2031 JUMP JUMPDEST PUSH2 0x140A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1188 JUMP JUMPDEST PUSH1 0x8 DUP3 ADD SLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x187B JUMPI PUSH1 0x0 DUP5 PUSH1 0x8 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1802 JUMPI PUSH2 0x1802 PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 KECCAK256 ADD SLOAD PUSH1 0xB DUP8 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP4 POP SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x1831 JUMPI PUSH2 0x1831 PUSH2 0x1E65 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ PUSH2 0x1871 JUMPI DUP6 PUSH1 0xB ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x185B JUMPI PUSH2 0x185B PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 KECCAK256 ADD SSTORE PUSH2 0x1871 DUP3 DUP7 DUP4 PUSH2 0x189A JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x17E3 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1890 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x18D9 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x18A7 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x18CE JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A48CA7B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x140A DUP4 DUP4 DUP4 PUSH2 0x13B8 JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x193A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1188 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1956 SWAP2 SWAP1 PUSH2 0x2214 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1993 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1998 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x19A9 DUP8 DUP4 DUP4 DUP8 PUSH2 0x19B6 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1A25 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x1A1E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x1A1E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST POP DUP2 PUSH2 0x19AE JUMP JUMPDEST PUSH2 0x19AE DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x1A3A JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1188 SWAP2 SWAP1 PUSH2 0x2230 JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x0 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1A72 SWAP2 SWAP1 PUSH2 0x1B15 JUMP JUMPDEST POP JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x1ACA JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1ACA JUMPI DUP3 MLOAD DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x1A95 JUMP JUMPDEST POP PUSH2 0x1AD6 SWAP3 SWAP2 POP PUSH2 0x1B15 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x1ACA JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1ACA JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1AFA JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1AD6 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1B16 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1B3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP2 CALLDATALOAD SWAP4 PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 SWAP1 SWAP3 ADD CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1B68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1B82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1A72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1BB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1893 DUP2 PUSH2 0x1B91 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1C02 JUMPI PUSH2 0x1C02 PUSH2 0x1BC3 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1C24 JUMPI PUSH2 0x1C24 PUSH2 0x1BC3 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1C3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x1C54 PUSH2 0x1C4F DUP4 PUSH2 0x1C0A JUMP JUMPDEST PUSH2 0x1BD9 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x1C73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1C97 JUMPI DUP1 CALLDATALOAD PUSH2 0x1C8A DUP2 PUSH2 0x1B91 JUMP JUMPDEST DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x1C77 JUMP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1CB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x1CC3 PUSH2 0x1C4F DUP4 PUSH2 0x1C0A JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x1CE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1C97 JUMPI DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1D00 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x1CE6 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1D1E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1D38 JUMPI PUSH2 0x1D38 PUSH2 0x1BC3 JUMP JUMPDEST PUSH2 0x1D4B PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x1BD9 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x1D60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x1D9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1DB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1DC5 DUP13 DUP4 DUP14 ADD PUSH2 0x1C2E JUMP JUMPDEST SWAP9 POP PUSH1 0x40 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1DDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1DE7 DUP13 DUP4 DUP14 ADD PUSH2 0x1CA2 JUMP JUMPDEST SWAP8 POP PUSH1 0x60 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1DFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E09 DUP13 DUP4 DUP14 ADD PUSH2 0x1D0D JUMP JUMPDEST SWAP7 POP PUSH1 0x80 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1E1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2C DUP12 DUP3 DUP13 ADD PUSH2 0x1D0D JUMP JUMPDEST SWAP9 SWAP12 SWAP8 SWAP11 POP SWAP6 SWAP9 SWAP5 SWAP8 SWAP7 PUSH1 0xA0 DUP7 ADD CALLDATALOAD SWAP7 POP PUSH1 0xC0 DUP7 ADD CALLDATALOAD SWAP6 PUSH1 0xE0 ADD CALLDATALOAD SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x1EAA JUMPI PUSH2 0x1EAA PUSH2 0x1E7B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x1EEB JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x1ED1 JUMPI PUSH2 0x1ED1 PUSH2 0x1E7B JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x1EDE JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x1EB5 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1F02 JUMPI POP PUSH1 0x1 PUSH2 0x1EAA JUMP JUMPDEST DUP2 PUSH2 0x1F0F JUMPI POP PUSH1 0x0 PUSH2 0x1EAA JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x1F25 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x1F2F JUMPI PUSH2 0x1F4B JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x1EAA JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x1F40 JUMPI PUSH2 0x1F40 PUSH2 0x1E7B JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x1EAA JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x1F6E JUMPI POP DUP2 DUP2 EXP PUSH2 0x1EAA JUMP JUMPDEST PUSH2 0x1F78 DUP4 DUP4 PUSH2 0x1EB0 JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x1F8C JUMPI PUSH2 0x1F8C PUSH2 0x1E7B JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1893 DUP4 DUP4 PUSH2 0x1EF3 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x1EAA JUMPI PUSH2 0x1EAA PUSH2 0x1E7B JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1FCE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1FB6 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1FEF DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1FB3 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2016 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x1FD7 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2028 DUP2 DUP6 PUSH2 0x1FD7 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2043 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1893 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x1EAA JUMPI PUSH2 0x1EAA PUSH2 0x1E7B JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20A3 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x207E JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20A3 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x20C2 JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE DUP3 MLOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x100 DUP2 DUP2 DUP6 ADD MSTORE PUSH1 0xE0 DUP7 ADD MLOAD SWAP2 POP PUSH2 0x120 PUSH2 0x2148 DUP2 DUP7 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP2 DUP8 ADD MLOAD SWAP3 POP PUSH2 0x1C0 SWAP2 POP PUSH2 0x140 DUP3 DUP2 DUP8 ADD MSTORE PUSH2 0x2169 PUSH2 0x200 DUP8 ADD DUP6 PUSH2 0x206A JUMP JUMPDEST SWAP4 POP DUP2 DUP9 ADD MLOAD SWAP2 POP PUSH1 0x3F NOT PUSH2 0x160 DUP2 DUP9 DUP8 SUB ADD DUP2 DUP10 ADD MSTORE PUSH2 0x218A DUP7 DUP6 PUSH2 0x20AE JUMP JUMPDEST SWAP6 POP DUP3 DUP11 ADD MLOAD SWAP4 POP PUSH2 0x180 SWAP3 POP DUP2 DUP9 DUP8 SUB ADD DUP4 DUP10 ADD MSTORE PUSH2 0x21AA DUP7 DUP6 PUSH2 0x20AE JUMP JUMPDEST SWAP6 POP DUP1 DUP11 ADD MLOAD SWAP4 POP POP PUSH2 0x1A0 DUP2 DUP9 DUP8 SUB ADD DUP2 DUP10 ADD MSTORE PUSH2 0x21C9 DUP7 DUP6 PUSH2 0x20AE JUMP JUMPDEST SWAP6 POP DUP3 DUP11 ADD MLOAD SWAP4 POP PUSH2 0x21DE DUP6 DUP10 ADD DUP6 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST DUP10 ADD MLOAD PUSH2 0x1E0 DUP9 ADD MSTORE POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x20 DUP6 ADD MSTORE POP SWAP1 POP PUSH2 0x1893 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x1EAA JUMPI PUSH2 0x1EAA PUSH2 0x1E7B JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x2226 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1FB3 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1893 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1FD7 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH5 0xA715949568 PUSH9 0xD9B1646F86D724AACB 0x27 0x4B 0x23 ORIGIN 0xBA 0xED GASPRICE 0xB7 0xD2 0xE4 0xDD CODECOPY RETURNDATASIZE ORIGIN 0xDA PUSH23 0x64736F6C63430008110033000000000000000000000000 ","sourceMap":"789:12718:78:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_callOptionalReturn_11153":{"entryPoint":5897,"id":11153,"parameterSlots":2,"returnSlots":0},"@_getAPrecise_27444":{"entryPoint":5824,"id":27444,"parameterSlots":1,"returnSlots":1},"@_revert_11483":{"entryPoint":null,"id":11483,"parameterSlots":2,"returnSlots":0},"@_withdrawAdminFees_20696":{"entryPoint":5135,"id":20696,"parameterSlots":2,"returnSlots":0},"@clone_9814":{"entryPoint":5670,"id":9814,"parameterSlots":1,"returnSlots":1},"@contractOwner_29645":{"entryPoint":4348,"id":29645,"parameterSlots":0,"returnSlots":1},"@diamondStorage_29603":{"entryPoint":null,"id":29603,"parameterSlots":0,"returnSlots":1},"@disableSwap_20532":{"entryPoint":4036,"id":20532,"parameterSlots":1,"returnSlots":0},"@functionCallWithValue_11308":{"entryPoint":6361,"id":11308,"parameterSlots":4,"returnSlots":1},"@functionCall_11244":{"entryPoint":6273,"id":11244,"parameterSlots":3,"returnSlots":1},"@handleOutgoingAsset_27809":{"entryPoint":6298,"id":27809,"parameterSlots":3,"returnSlots":0},"@initializeSwap_20470":{"entryPoint":2286,"id":20470,"parameterSlots":8,"returnSlots":0},"@isContract_11172":{"entryPoint":null,"id":11172,"parameterSlots":1,"returnSlots":1},"@isDisabled_20185":{"entryPoint":null,"id":20185,"parameterSlots":1,"returnSlots":1},"@lpTokenTargetAddress_20170":{"entryPoint":null,"id":20170,"parameterSlots":0,"returnSlots":1},"@rampA_20781":{"entryPoint":433,"id":20781,"parameterSlots":3,"returnSlots":0},"@rampA_27570":{"entryPoint":4394,"id":27570,"parameterSlots":3,"returnSlots":0},"@removeSwap_20656":{"entryPoint":627,"id":20656,"parameterSlots":1,"returnSlots":0},"@safeTransfer_10905":{"entryPoint":5048,"id":10905,"parameterSlots":3,"returnSlots":0},"@setAdminFee_34191":{"entryPoint":5540,"id":34191,"parameterSlots":2,"returnSlots":0},"@setSwapAdminFee_20723":{"entryPoint":1952,"id":20723,"parameterSlots":2,"returnSlots":0},"@setSwapFee_20750":{"entryPoint":1350,"id":20750,"parameterSlots":2,"returnSlots":0},"@setSwapFee_34223":{"entryPoint":5218,"id":34223,"parameterSlots":2,"returnSlots":0},"@stopRampA_20804":{"entryPoint":1527,"id":20804,"parameterSlots":1,"returnSlots":0},"@stopRampA_27625":{"entryPoint":5347,"id":27625,"parameterSlots":1,"returnSlots":0},"@updateLpTokenTarget_20836":{"entryPoint":1704,"id":20836,"parameterSlots":1,"returnSlots":0},"@verifyCallResultFromTarget_11439":{"entryPoint":6582,"id":11439,"parameterSlots":4,"returnSlots":1},"@withdrawAdminFees_34159":{"entryPoint":6107,"id":34159,"parameterSlots":2,"returnSlots":0},"@withdrawSwapAdminFees_20673":{"entryPoint":2129,"id":20673,"parameterSlots":1,"returnSlots":0},"abi_decode_array_contract_IERC20_dyn":{"entryPoint":7214,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint8_dyn":{"entryPoint":7330,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_string":{"entryPoint":7437,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":7078,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":8241,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":6998,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptrt_array$_t_uint8_$dyn_memory_ptrt_string_memory_ptrt_string_memory_ptrt_uint256t_uint256t_uint256":{"entryPoint":7549,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_bytes32t_uint256":{"entryPoint":7023,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes32t_uint256t_uint256":{"entryPoint":6954,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_contract_IERC20_dyn":{"entryPoint":8298,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":8366,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_string":{"entryPoint":8151,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":8724,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":8752,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed":{"entryPoint":8195,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1a473326c7eab86a4c1915be8a93321772f3ce5660b51eb1a81d3ac6b9907aa3__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1b53e581d849d126253991f586658292489ca99b95601d0e9a46e8a40560683c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2ee4dedb99ff885c57b93a92e7fecc104d42f54e9af51e109d9629ee80d199e9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_44788ed50b2245d8a26f7d03698b757639551ce6b3f4191322e3b922fdd0abc9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4c79bf4677fbadf48dfed0cfd80497295366e965c13f89299485a45d83898b6a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_70ef023479c1247bc56a8110e918ad65744efc349b9118a585df0f3c4ddea941__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8649b1e5b06e4f5968b2a3f0fa64e06710ce221cf73d9057a24a3fccd677b635__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_97176162870e7e456f7a0a31334045c46f00da24e81344128ac9050ab0db28db__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_Swap_$30786_memory_ptr_t_address__to_t_struct$_Swap_$30786_memory_ptr_t_address__fromStack_reversed":{"entryPoint":8414,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_address__to_t_uint256_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"allocate_memory":{"entryPoint":7129,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_contract_IERC20_dyn":{"entryPoint":7178,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":8705,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":7856,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":8084,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":7923,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":8275,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":8096,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint8":{"entryPoint":7825,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":8115,"id":null,"parameterSlots":3,"returnSlots":0},"panic_error_0x11":{"entryPoint":7803,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":7759,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":7781,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":7107,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":7057,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:19229:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"118:212:181","statements":[{"body":{"nodeType":"YulBlock","src":"164:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"173:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"176:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"166:6:181"},"nodeType":"YulFunctionCall","src":"166:12:181"},"nodeType":"YulExpressionStatement","src":"166:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"139:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"148:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"135:3:181"},"nodeType":"YulFunctionCall","src":"135:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"160:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"131:3:181"},"nodeType":"YulFunctionCall","src":"131:32:181"},"nodeType":"YulIf","src":"128:52:181"},{"nodeType":"YulAssignment","src":"189:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"212:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"199:12:181"},"nodeType":"YulFunctionCall","src":"199:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"189:6:181"}]},{"nodeType":"YulAssignment","src":"231:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"258:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"269:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"254:3:181"},"nodeType":"YulFunctionCall","src":"254:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"241:12:181"},"nodeType":"YulFunctionCall","src":"241:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"231:6:181"}]},{"nodeType":"YulAssignment","src":"282:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"309:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"320:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"305:3:181"},"nodeType":"YulFunctionCall","src":"305:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"292:12:181"},"nodeType":"YulFunctionCall","src":"292:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"282:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"68:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"79:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"91:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"99:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"107:6:181","type":""}],"src":"14:316:181"},{"body":{"nodeType":"YulBlock","src":"379:60:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"396:3:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"405:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"420:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"425:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"416:3:181"},"nodeType":"YulFunctionCall","src":"416:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"429:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"412:3:181"},"nodeType":"YulFunctionCall","src":"412:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"401:3:181"},"nodeType":"YulFunctionCall","src":"401:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"389:6:181"},"nodeType":"YulFunctionCall","src":"389:44:181"},"nodeType":"YulExpressionStatement","src":"389:44:181"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"363:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"370:3:181","type":""}],"src":"335:104:181"},{"body":{"nodeType":"YulBlock","src":"545:102:181","statements":[{"nodeType":"YulAssignment","src":"555:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"567:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"578:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"563:3:181"},"nodeType":"YulFunctionCall","src":"563:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"555:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"597:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"612:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"628:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"633:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"624:3:181"},"nodeType":"YulFunctionCall","src":"624:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"637:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"620:3:181"},"nodeType":"YulFunctionCall","src":"620:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"608:3:181"},"nodeType":"YulFunctionCall","src":"608:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"590:6:181"},"nodeType":"YulFunctionCall","src":"590:51:181"},"nodeType":"YulExpressionStatement","src":"590:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"514:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"525:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"536:4:181","type":""}],"src":"444:203:181"},{"body":{"nodeType":"YulBlock","src":"722:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"768:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"777:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"780:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"770:6:181"},"nodeType":"YulFunctionCall","src":"770:12:181"},"nodeType":"YulExpressionStatement","src":"770:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"743:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"752:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"739:3:181"},"nodeType":"YulFunctionCall","src":"739:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"764:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"735:3:181"},"nodeType":"YulFunctionCall","src":"735:32:181"},"nodeType":"YulIf","src":"732:52:181"},{"nodeType":"YulAssignment","src":"793:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"816:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"803:12:181"},"nodeType":"YulFunctionCall","src":"803:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"793:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"688:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"699:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"711:6:181","type":""}],"src":"652:180:181"},{"body":{"nodeType":"YulBlock","src":"924:161:181","statements":[{"body":{"nodeType":"YulBlock","src":"970:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"979:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"982:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"972:6:181"},"nodeType":"YulFunctionCall","src":"972:12:181"},"nodeType":"YulExpressionStatement","src":"972:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"945:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"954:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"941:3:181"},"nodeType":"YulFunctionCall","src":"941:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"966:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"937:3:181"},"nodeType":"YulFunctionCall","src":"937:32:181"},"nodeType":"YulIf","src":"934:52:181"},{"nodeType":"YulAssignment","src":"995:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1018:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1005:12:181"},"nodeType":"YulFunctionCall","src":"1005:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"995:6:181"}]},{"nodeType":"YulAssignment","src":"1037:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1064:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1075:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1060:3:181"},"nodeType":"YulFunctionCall","src":"1060:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1047:12:181"},"nodeType":"YulFunctionCall","src":"1047:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1037:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"882:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"893:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"905:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"913:6:181","type":""}],"src":"837:248:181"},{"body":{"nodeType":"YulBlock","src":"1131:50:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1148:3:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1167:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1160:6:181"},"nodeType":"YulFunctionCall","src":"1160:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1153:6:181"},"nodeType":"YulFunctionCall","src":"1153:21:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1141:6:181"},"nodeType":"YulFunctionCall","src":"1141:34:181"},"nodeType":"YulExpressionStatement","src":"1141:34:181"}]},"name":"abi_encode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1115:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"1122:3:181","type":""}],"src":"1090:91:181"},{"body":{"nodeType":"YulBlock","src":"1281:92:181","statements":[{"nodeType":"YulAssignment","src":"1291:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1303:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1314:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1299:3:181"},"nodeType":"YulFunctionCall","src":"1299:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1291:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1333:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1358:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1351:6:181"},"nodeType":"YulFunctionCall","src":"1351:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1344:6:181"},"nodeType":"YulFunctionCall","src":"1344:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1326:6:181"},"nodeType":"YulFunctionCall","src":"1326:41:181"},"nodeType":"YulExpressionStatement","src":"1326:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1250:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1261:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1272:4:181","type":""}],"src":"1186:187:181"},{"body":{"nodeType":"YulBlock","src":"1423:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"1487:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1496:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1499:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1489:6:181"},"nodeType":"YulFunctionCall","src":"1489:12:181"},"nodeType":"YulExpressionStatement","src":"1489:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1446:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1457:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1472:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1477:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1468:3:181"},"nodeType":"YulFunctionCall","src":"1468:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1481:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1464:3:181"},"nodeType":"YulFunctionCall","src":"1464:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1453:3:181"},"nodeType":"YulFunctionCall","src":"1453:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1443:2:181"},"nodeType":"YulFunctionCall","src":"1443:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1436:6:181"},"nodeType":"YulFunctionCall","src":"1436:50:181"},"nodeType":"YulIf","src":"1433:70:181"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1412:5:181","type":""}],"src":"1378:131:181"},{"body":{"nodeType":"YulBlock","src":"1584:177:181","statements":[{"body":{"nodeType":"YulBlock","src":"1630:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1639:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1642:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1632:6:181"},"nodeType":"YulFunctionCall","src":"1632:12:181"},"nodeType":"YulExpressionStatement","src":"1632:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1605:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1614:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1601:3:181"},"nodeType":"YulFunctionCall","src":"1601:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1626:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1597:3:181"},"nodeType":"YulFunctionCall","src":"1597:32:181"},"nodeType":"YulIf","src":"1594:52:181"},{"nodeType":"YulVariableDeclaration","src":"1655:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1681:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1668:12:181"},"nodeType":"YulFunctionCall","src":"1668:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1659:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1725:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1700:24:181"},"nodeType":"YulFunctionCall","src":"1700:31:181"},"nodeType":"YulExpressionStatement","src":"1700:31:181"},{"nodeType":"YulAssignment","src":"1740:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1750:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1740:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1550:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1561:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1573:6:181","type":""}],"src":"1514:247:181"},{"body":{"nodeType":"YulBlock","src":"1798:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1815:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1822:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1827:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1818:3:181"},"nodeType":"YulFunctionCall","src":"1818:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1808:6:181"},"nodeType":"YulFunctionCall","src":"1808:31:181"},"nodeType":"YulExpressionStatement","src":"1808:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1855:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1858:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1848:6:181"},"nodeType":"YulFunctionCall","src":"1848:15:181"},"nodeType":"YulExpressionStatement","src":"1848:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1879:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1882:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1872:6:181"},"nodeType":"YulFunctionCall","src":"1872:15:181"},"nodeType":"YulExpressionStatement","src":"1872:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1766:127:181"},{"body":{"nodeType":"YulBlock","src":"1943:230:181","statements":[{"nodeType":"YulAssignment","src":"1953:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1969:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1963:5:181"},"nodeType":"YulFunctionCall","src":"1963:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1953:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1981:58:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2003:6:181"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"2019:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"2025:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2015:3:181"},"nodeType":"YulFunctionCall","src":"2015:13:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2034:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2030:3:181"},"nodeType":"YulFunctionCall","src":"2030:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2011:3:181"},"nodeType":"YulFunctionCall","src":"2011:27:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1999:3:181"},"nodeType":"YulFunctionCall","src":"1999:40:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1985:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2114:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2116:16:181"},"nodeType":"YulFunctionCall","src":"2116:18:181"},"nodeType":"YulExpressionStatement","src":"2116:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2057:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"2069:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2054:2:181"},"nodeType":"YulFunctionCall","src":"2054:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2093:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2105:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2090:2:181"},"nodeType":"YulFunctionCall","src":"2090:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2051:2:181"},"nodeType":"YulFunctionCall","src":"2051:62:181"},"nodeType":"YulIf","src":"2048:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2152:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2156:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2145:6:181"},"nodeType":"YulFunctionCall","src":"2145:22:181"},"nodeType":"YulExpressionStatement","src":"2145:22:181"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"1923:4:181","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1932:6:181","type":""}],"src":"1898:275:181"},{"body":{"nodeType":"YulBlock","src":"2255:114:181","statements":[{"body":{"nodeType":"YulBlock","src":"2299:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2301:16:181"},"nodeType":"YulFunctionCall","src":"2301:18:181"},"nodeType":"YulExpressionStatement","src":"2301:18:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2271:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2279:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2268:2:181"},"nodeType":"YulFunctionCall","src":"2268:30:181"},"nodeType":"YulIf","src":"2265:56:181"},{"nodeType":"YulAssignment","src":"2330:33:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2346:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"2349:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2342:3:181"},"nodeType":"YulFunctionCall","src":"2342:14:181"},{"kind":"number","nodeType":"YulLiteral","src":"2358:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2338:3:181"},"nodeType":"YulFunctionCall","src":"2338:25:181"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"2330:4:181"}]}]},"name":"array_allocation_size_array_contract_IERC20_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nodeType":"YulTypedName","src":"2235:6:181","type":""}],"returnVariables":[{"name":"size","nodeType":"YulTypedName","src":"2246:4:181","type":""}],"src":"2178:191:181"},{"body":{"nodeType":"YulBlock","src":"2446:681:181","statements":[{"body":{"nodeType":"YulBlock","src":"2495:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2504:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2507:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2497:6:181"},"nodeType":"YulFunctionCall","src":"2497:12:181"},"nodeType":"YulExpressionStatement","src":"2497:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2474:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2482:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2470:3:181"},"nodeType":"YulFunctionCall","src":"2470:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"2489:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2466:3:181"},"nodeType":"YulFunctionCall","src":"2466:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2459:6:181"},"nodeType":"YulFunctionCall","src":"2459:35:181"},"nodeType":"YulIf","src":"2456:55:181"},{"nodeType":"YulVariableDeclaration","src":"2520:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2543:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2530:12:181"},"nodeType":"YulFunctionCall","src":"2530:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2524:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2559:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2569:4:181","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2563:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2582:79:181","value":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2657:2:181"}],"functionName":{"name":"array_allocation_size_array_contract_IERC20_dyn","nodeType":"YulIdentifier","src":"2609:47:181"},"nodeType":"YulFunctionCall","src":"2609:51:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"2593:15:181"},"nodeType":"YulFunctionCall","src":"2593:68:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"2586:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2670:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"2683:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"2674:5:181","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2702:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2707:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2695:6:181"},"nodeType":"YulFunctionCall","src":"2695:15:181"},"nodeType":"YulExpressionStatement","src":"2695:15:181"},{"nodeType":"YulAssignment","src":"2719:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2730:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"2735:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2726:3:181"},"nodeType":"YulFunctionCall","src":"2726:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2719:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"2747:46:181","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2769:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2781:1:181","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"2784:2:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2777:3:181"},"nodeType":"YulFunctionCall","src":"2777:10:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2765:3:181"},"nodeType":"YulFunctionCall","src":"2765:23:181"},{"name":"_2","nodeType":"YulIdentifier","src":"2790:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2761:3:181"},"nodeType":"YulFunctionCall","src":"2761:32:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"2751:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2821:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2830:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2833:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2823:6:181"},"nodeType":"YulFunctionCall","src":"2823:12:181"},"nodeType":"YulExpressionStatement","src":"2823:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"2808:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"2816:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2805:2:181"},"nodeType":"YulFunctionCall","src":"2805:15:181"},"nodeType":"YulIf","src":"2802:35:181"},{"nodeType":"YulVariableDeclaration","src":"2846:26:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2861:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"2869:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2857:3:181"},"nodeType":"YulFunctionCall","src":"2857:15:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"2850:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2937:161:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2951:30:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2977:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2964:12:181"},"nodeType":"YulFunctionCall","src":"2964:17:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2955:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3019:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2994:24:181"},"nodeType":"YulFunctionCall","src":"2994:31:181"},"nodeType":"YulExpressionStatement","src":"2994:31:181"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"3045:3:181"},{"name":"value","nodeType":"YulIdentifier","src":"3050:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3038:6:181"},"nodeType":"YulFunctionCall","src":"3038:18:181"},"nodeType":"YulExpressionStatement","src":"3038:18:181"},{"nodeType":"YulAssignment","src":"3069:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"3080:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"3085:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3076:3:181"},"nodeType":"YulFunctionCall","src":"3076:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"3069:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2892:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"2897:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2889:2:181"},"nodeType":"YulFunctionCall","src":"2889:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2905:23:181","statements":[{"nodeType":"YulAssignment","src":"2907:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2918:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"2923:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2914:3:181"},"nodeType":"YulFunctionCall","src":"2914:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"2907:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"2885:3:181","statements":[]},"src":"2881:217:181"},{"nodeType":"YulAssignment","src":"3107:14:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"3116:5:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"3107:5:181"}]}]},"name":"abi_decode_array_contract_IERC20_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2420:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"2428:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"2436:5:181","type":""}],"src":"2374:753:181"},{"body":{"nodeType":"YulBlock","src":"3194:775:181","statements":[{"body":{"nodeType":"YulBlock","src":"3243:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3252:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3255:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3245:6:181"},"nodeType":"YulFunctionCall","src":"3245:12:181"},"nodeType":"YulExpressionStatement","src":"3245:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3222:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3230:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3218:3:181"},"nodeType":"YulFunctionCall","src":"3218:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"3237:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3214:3:181"},"nodeType":"YulFunctionCall","src":"3214:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3207:6:181"},"nodeType":"YulFunctionCall","src":"3207:35:181"},"nodeType":"YulIf","src":"3204:55:181"},{"nodeType":"YulVariableDeclaration","src":"3268:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3291:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3278:12:181"},"nodeType":"YulFunctionCall","src":"3278:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3272:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3307:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3317:4:181","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"3311:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3330:79:181","value":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3405:2:181"}],"functionName":{"name":"array_allocation_size_array_contract_IERC20_dyn","nodeType":"YulIdentifier","src":"3357:47:181"},"nodeType":"YulFunctionCall","src":"3357:51:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"3341:15:181"},"nodeType":"YulFunctionCall","src":"3341:68:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"3334:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3418:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"3431:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"3422:5:181","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"3450:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3455:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3443:6:181"},"nodeType":"YulFunctionCall","src":"3443:15:181"},"nodeType":"YulExpressionStatement","src":"3443:15:181"},{"nodeType":"YulAssignment","src":"3467:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"3478:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"3483:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3474:3:181"},"nodeType":"YulFunctionCall","src":"3474:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"3467:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"3495:46:181","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3517:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3529:1:181","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"3532:2:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3525:3:181"},"nodeType":"YulFunctionCall","src":"3525:10:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3513:3:181"},"nodeType":"YulFunctionCall","src":"3513:23:181"},{"name":"_2","nodeType":"YulIdentifier","src":"3538:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3509:3:181"},"nodeType":"YulFunctionCall","src":"3509:32:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"3499:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3569:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3578:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3581:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3571:6:181"},"nodeType":"YulFunctionCall","src":"3571:12:181"},"nodeType":"YulExpressionStatement","src":"3571:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"3556:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"3564:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3553:2:181"},"nodeType":"YulFunctionCall","src":"3553:15:181"},"nodeType":"YulIf","src":"3550:35:181"},{"nodeType":"YulVariableDeclaration","src":"3594:26:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3609:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"3617:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3605:3:181"},"nodeType":"YulFunctionCall","src":"3605:15:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"3598:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3685:255:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3699:30:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3725:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3712:12:181"},"nodeType":"YulFunctionCall","src":"3712:17:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3703:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3793:74:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3811:11:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3821:1:181","type":"","value":"0"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"3815:2:181","type":""}]},{"expression":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3846:2:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3850:2:181"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3839:6:181"},"nodeType":"YulFunctionCall","src":"3839:14:181"},"nodeType":"YulExpressionStatement","src":"3839:14:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3755:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3766:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"3773:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3762:3:181"},"nodeType":"YulFunctionCall","src":"3762:16:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3752:2:181"},"nodeType":"YulFunctionCall","src":"3752:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3745:6:181"},"nodeType":"YulFunctionCall","src":"3745:35:181"},"nodeType":"YulIf","src":"3742:125:181"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"3887:3:181"},{"name":"value","nodeType":"YulIdentifier","src":"3892:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3880:6:181"},"nodeType":"YulFunctionCall","src":"3880:18:181"},"nodeType":"YulExpressionStatement","src":"3880:18:181"},{"nodeType":"YulAssignment","src":"3911:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"3922:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"3927:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3918:3:181"},"nodeType":"YulFunctionCall","src":"3918:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"3911:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3640:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"3645:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3637:2:181"},"nodeType":"YulFunctionCall","src":"3637:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3653:23:181","statements":[{"nodeType":"YulAssignment","src":"3655:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3666:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"3671:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3662:3:181"},"nodeType":"YulFunctionCall","src":"3662:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"3655:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"3633:3:181","statements":[]},"src":"3629:311:181"},{"nodeType":"YulAssignment","src":"3949:14:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"3958:5:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"3949:5:181"}]}]},"name":"abi_decode_array_uint8_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3168:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"3176:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"3184:5:181","type":""}],"src":"3132:837:181"},{"body":{"nodeType":"YulBlock","src":"4027:478:181","statements":[{"body":{"nodeType":"YulBlock","src":"4076:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4085:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4088:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4078:6:181"},"nodeType":"YulFunctionCall","src":"4078:12:181"},"nodeType":"YulExpressionStatement","src":"4078:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4055:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4063:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4051:3:181"},"nodeType":"YulFunctionCall","src":"4051:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"4070:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4047:3:181"},"nodeType":"YulFunctionCall","src":"4047:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4040:6:181"},"nodeType":"YulFunctionCall","src":"4040:35:181"},"nodeType":"YulIf","src":"4037:55:181"},{"nodeType":"YulVariableDeclaration","src":"4101:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4124:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4111:12:181"},"nodeType":"YulFunctionCall","src":"4111:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4105:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4170:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"4172:16:181"},"nodeType":"YulFunctionCall","src":"4172:18:181"},"nodeType":"YulExpressionStatement","src":"4172:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"4146:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4150:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4143:2:181"},"nodeType":"YulFunctionCall","src":"4143:26:181"},"nodeType":"YulIf","src":"4140:52:181"},{"nodeType":"YulVariableDeclaration","src":"4201:70:181","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"4244:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4248:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4240:3:181"},"nodeType":"YulFunctionCall","src":"4240:13:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4259:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4255:3:181"},"nodeType":"YulFunctionCall","src":"4255:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4236:3:181"},"nodeType":"YulFunctionCall","src":"4236:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"4265:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4232:3:181"},"nodeType":"YulFunctionCall","src":"4232:38:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"4216:15:181"},"nodeType":"YulFunctionCall","src":"4216:55:181"},"variables":[{"name":"array_1","nodeType":"YulTypedName","src":"4205:7:181","type":""}]},{"expression":{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"4287:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4296:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4280:6:181"},"nodeType":"YulFunctionCall","src":"4280:19:181"},"nodeType":"YulExpressionStatement","src":"4280:19:181"},{"body":{"nodeType":"YulBlock","src":"4347:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4356:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4359:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4349:6:181"},"nodeType":"YulFunctionCall","src":"4349:12:181"},"nodeType":"YulExpressionStatement","src":"4349:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4322:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4330:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4318:3:181"},"nodeType":"YulFunctionCall","src":"4318:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"4335:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4314:3:181"},"nodeType":"YulFunctionCall","src":"4314:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"4342:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4311:2:181"},"nodeType":"YulFunctionCall","src":"4311:35:181"},"nodeType":"YulIf","src":"4308:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"4389:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"4398:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4385:3:181"},"nodeType":"YulFunctionCall","src":"4385:18:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4409:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4417:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4405:3:181"},"nodeType":"YulFunctionCall","src":"4405:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4424:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"4372:12:181"},"nodeType":"YulFunctionCall","src":"4372:55:181"},"nodeType":"YulExpressionStatement","src":"4372:55:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"4451:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4460:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4447:3:181"},"nodeType":"YulFunctionCall","src":"4447:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"4465:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4443:3:181"},"nodeType":"YulFunctionCall","src":"4443:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"4472:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4436:6:181"},"nodeType":"YulFunctionCall","src":"4436:38:181"},"nodeType":"YulExpressionStatement","src":"4436:38:181"},{"nodeType":"YulAssignment","src":"4483:16:181","value":{"name":"array_1","nodeType":"YulIdentifier","src":"4492:7:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"4483:5:181"}]}]},"name":"abi_decode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"4001:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"4009:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"4017:5:181","type":""}],"src":"3974:531:181"},{"body":{"nodeType":"YulBlock","src":"4783:1019:181","statements":[{"body":{"nodeType":"YulBlock","src":"4830:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4839:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4842:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4832:6:181"},"nodeType":"YulFunctionCall","src":"4832:12:181"},"nodeType":"YulExpressionStatement","src":"4832:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4804:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"4813:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4800:3:181"},"nodeType":"YulFunctionCall","src":"4800:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"4825:3:181","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4796:3:181"},"nodeType":"YulFunctionCall","src":"4796:33:181"},"nodeType":"YulIf","src":"4793:53:181"},{"nodeType":"YulAssignment","src":"4855:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4878:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4865:12:181"},"nodeType":"YulFunctionCall","src":"4865:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4855:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"4897:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4928:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4939:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4924:3:181"},"nodeType":"YulFunctionCall","src":"4924:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4911:12:181"},"nodeType":"YulFunctionCall","src":"4911:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"4901:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4952:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4962:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4956:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5007:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5016:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5019:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5009:6:181"},"nodeType":"YulFunctionCall","src":"5009:12:181"},"nodeType":"YulExpressionStatement","src":"5009:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4995:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5003:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4992:2:181"},"nodeType":"YulFunctionCall","src":"4992:14:181"},"nodeType":"YulIf","src":"4989:34:181"},{"nodeType":"YulAssignment","src":"5032:79:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5083:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"5094:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5079:3:181"},"nodeType":"YulFunctionCall","src":"5079:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5103:7:181"}],"functionName":{"name":"abi_decode_array_contract_IERC20_dyn","nodeType":"YulIdentifier","src":"5042:36:181"},"nodeType":"YulFunctionCall","src":"5042:69:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5032:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"5120:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5153:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5164:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5149:3:181"},"nodeType":"YulFunctionCall","src":"5149:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5136:12:181"},"nodeType":"YulFunctionCall","src":"5136:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"5124:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5197:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5206:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5209:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5199:6:181"},"nodeType":"YulFunctionCall","src":"5199:12:181"},"nodeType":"YulExpressionStatement","src":"5199:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"5183:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5193:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5180:2:181"},"nodeType":"YulFunctionCall","src":"5180:16:181"},"nodeType":"YulIf","src":"5177:36:181"},{"nodeType":"YulAssignment","src":"5222:71:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5263:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"5274:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5259:3:181"},"nodeType":"YulFunctionCall","src":"5259:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5285:7:181"}],"functionName":{"name":"abi_decode_array_uint8_dyn","nodeType":"YulIdentifier","src":"5232:26:181"},"nodeType":"YulFunctionCall","src":"5232:61:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5222:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"5302:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5335:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5346:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5331:3:181"},"nodeType":"YulFunctionCall","src":"5331:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5318:12:181"},"nodeType":"YulFunctionCall","src":"5318:32:181"},"variables":[{"name":"offset_2","nodeType":"YulTypedName","src":"5306:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5379:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5388:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5391:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5381:6:181"},"nodeType":"YulFunctionCall","src":"5381:12:181"},"nodeType":"YulExpressionStatement","src":"5381:12:181"}]},"condition":{"arguments":[{"name":"offset_2","nodeType":"YulIdentifier","src":"5365:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5375:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5362:2:181"},"nodeType":"YulFunctionCall","src":"5362:16:181"},"nodeType":"YulIf","src":"5359:36:181"},{"nodeType":"YulAssignment","src":"5404:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5436:9:181"},{"name":"offset_2","nodeType":"YulIdentifier","src":"5447:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5432:3:181"},"nodeType":"YulFunctionCall","src":"5432:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5458:7:181"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"5414:17:181"},"nodeType":"YulFunctionCall","src":"5414:52:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5404:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"5475:49:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5508:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5519:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5504:3:181"},"nodeType":"YulFunctionCall","src":"5504:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5491:12:181"},"nodeType":"YulFunctionCall","src":"5491:33:181"},"variables":[{"name":"offset_3","nodeType":"YulTypedName","src":"5479:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5553:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5562:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5565:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5555:6:181"},"nodeType":"YulFunctionCall","src":"5555:12:181"},"nodeType":"YulExpressionStatement","src":"5555:12:181"}]},"condition":{"arguments":[{"name":"offset_3","nodeType":"YulIdentifier","src":"5539:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5549:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5536:2:181"},"nodeType":"YulFunctionCall","src":"5536:16:181"},"nodeType":"YulIf","src":"5533:36:181"},{"nodeType":"YulAssignment","src":"5578:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5610:9:181"},{"name":"offset_3","nodeType":"YulIdentifier","src":"5621:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5606:3:181"},"nodeType":"YulFunctionCall","src":"5606:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5632:7:181"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"5588:17:181"},"nodeType":"YulFunctionCall","src":"5588:52:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"5578:6:181"}]},{"nodeType":"YulAssignment","src":"5649:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5676:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5687:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5672:3:181"},"nodeType":"YulFunctionCall","src":"5672:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5659:12:181"},"nodeType":"YulFunctionCall","src":"5659:33:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"5649:6:181"}]},{"nodeType":"YulAssignment","src":"5701:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5728:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5739:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5724:3:181"},"nodeType":"YulFunctionCall","src":"5724:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5711:12:181"},"nodeType":"YulFunctionCall","src":"5711:33:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"5701:6:181"}]},{"nodeType":"YulAssignment","src":"5753:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5780:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5791:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5776:3:181"},"nodeType":"YulFunctionCall","src":"5776:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5763:12:181"},"nodeType":"YulFunctionCall","src":"5763:33:181"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"5753:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptrt_array$_t_uint8_$dyn_memory_ptrt_string_memory_ptrt_string_memory_ptrt_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4693:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4704:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4716:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4724:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4732:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4740:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"4748:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"4756:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"4764:6:181","type":""},{"name":"value7","nodeType":"YulTypedName","src":"4772:6:181","type":""}],"src":"4510:1292:181"},{"body":{"nodeType":"YulBlock","src":"5839:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5856:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5863:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"5868:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5859:3:181"},"nodeType":"YulFunctionCall","src":"5859:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5849:6:181"},"nodeType":"YulFunctionCall","src":"5849:31:181"},"nodeType":"YulExpressionStatement","src":"5849:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5896:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5899:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5889:6:181"},"nodeType":"YulFunctionCall","src":"5889:15:181"},"nodeType":"YulExpressionStatement","src":"5889:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5920:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5923:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5913:6:181"},"nodeType":"YulFunctionCall","src":"5913:15:181"},"nodeType":"YulExpressionStatement","src":"5913:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"5807:127:181"},{"body":{"nodeType":"YulBlock","src":"6096:188:181","statements":[{"nodeType":"YulAssignment","src":"6106:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6118:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6129:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6114:3:181"},"nodeType":"YulFunctionCall","src":"6114:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6106:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6148:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"6159:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6141:6:181"},"nodeType":"YulFunctionCall","src":"6141:25:181"},"nodeType":"YulExpressionStatement","src":"6141:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6186:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6197:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6182:3:181"},"nodeType":"YulFunctionCall","src":"6182:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"6202:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6175:6:181"},"nodeType":"YulFunctionCall","src":"6175:34:181"},"nodeType":"YulExpressionStatement","src":"6175:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6229:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6240:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6225:3:181"},"nodeType":"YulFunctionCall","src":"6225:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"6249:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6265:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6270:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6261:3:181"},"nodeType":"YulFunctionCall","src":"6261:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"6274:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6257:3:181"},"nodeType":"YulFunctionCall","src":"6257:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6245:3:181"},"nodeType":"YulFunctionCall","src":"6245:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6218:6:181"},"nodeType":"YulFunctionCall","src":"6218:60:181"},"nodeType":"YulExpressionStatement","src":"6218:60:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_address__to_t_uint256_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6049:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6060:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6068:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6076:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6087:4:181","type":""}],"src":"5939:345:181"},{"body":{"nodeType":"YulBlock","src":"6321:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6338:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6345:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"6350:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6341:3:181"},"nodeType":"YulFunctionCall","src":"6341:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6331:6:181"},"nodeType":"YulFunctionCall","src":"6331:31:181"},"nodeType":"YulExpressionStatement","src":"6331:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6378:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6381:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6371:6:181"},"nodeType":"YulFunctionCall","src":"6371:15:181"},"nodeType":"YulExpressionStatement","src":"6371:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6402:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6405:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6395:6:181"},"nodeType":"YulFunctionCall","src":"6395:15:181"},"nodeType":"YulExpressionStatement","src":"6395:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"6289:127:181"},{"body":{"nodeType":"YulBlock","src":"6550:145:181","statements":[{"nodeType":"YulAssignment","src":"6560:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6572:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6583:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6568:3:181"},"nodeType":"YulFunctionCall","src":"6568:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6560:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6602:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"6613:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6595:6:181"},"nodeType":"YulFunctionCall","src":"6595:25:181"},"nodeType":"YulExpressionStatement","src":"6595:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6640:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6651:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6636:3:181"},"nodeType":"YulFunctionCall","src":"6636:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6660:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6676:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6681:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6672:3:181"},"nodeType":"YulFunctionCall","src":"6672:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"6685:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6668:3:181"},"nodeType":"YulFunctionCall","src":"6668:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6656:3:181"},"nodeType":"YulFunctionCall","src":"6656:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6629:6:181"},"nodeType":"YulFunctionCall","src":"6629:60:181"},"nodeType":"YulExpressionStatement","src":"6629:60:181"}]},"name":"abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6511:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6522:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6530:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6541:4:181","type":""}],"src":"6421:274:181"},{"body":{"nodeType":"YulBlock","src":"6857:227:181","statements":[{"nodeType":"YulAssignment","src":"6867:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6879:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6890:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6875:3:181"},"nodeType":"YulFunctionCall","src":"6875:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6867:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"6902:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6920:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6925:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6916:3:181"},"nodeType":"YulFunctionCall","src":"6916:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"6929:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6912:3:181"},"nodeType":"YulFunctionCall","src":"6912:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6906:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6947:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6962:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6970:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6958:3:181"},"nodeType":"YulFunctionCall","src":"6958:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6940:6:181"},"nodeType":"YulFunctionCall","src":"6940:34:181"},"nodeType":"YulExpressionStatement","src":"6940:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6994:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7005:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6990:3:181"},"nodeType":"YulFunctionCall","src":"6990:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"7014:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7022:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7010:3:181"},"nodeType":"YulFunctionCall","src":"7010:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6983:6:181"},"nodeType":"YulFunctionCall","src":"6983:43:181"},"nodeType":"YulExpressionStatement","src":"6983:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7046:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7057:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7042:3:181"},"nodeType":"YulFunctionCall","src":"7042:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"7066:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7074:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7062:3:181"},"nodeType":"YulFunctionCall","src":"7062:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7035:6:181"},"nodeType":"YulFunctionCall","src":"7035:43:181"},"nodeType":"YulExpressionStatement","src":"7035:43:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6810:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6821:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6829:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6837:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6848:4:181","type":""}],"src":"6700:384:181"},{"body":{"nodeType":"YulBlock","src":"7121:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7138:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7145:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"7150:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7141:3:181"},"nodeType":"YulFunctionCall","src":"7141:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7131:6:181"},"nodeType":"YulFunctionCall","src":"7131:31:181"},"nodeType":"YulExpressionStatement","src":"7131:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7178:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7181:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7171:6:181"},"nodeType":"YulFunctionCall","src":"7171:15:181"},"nodeType":"YulExpressionStatement","src":"7171:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7202:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7205:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7195:6:181"},"nodeType":"YulFunctionCall","src":"7195:15:181"},"nodeType":"YulExpressionStatement","src":"7195:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"7089:127:181"},{"body":{"nodeType":"YulBlock","src":"7268:104:181","statements":[{"nodeType":"YulAssignment","src":"7278:39:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7294:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"7297:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7290:3:181"},"nodeType":"YulFunctionCall","src":"7290:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"7308:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"7311:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7304:3:181"},"nodeType":"YulFunctionCall","src":"7304:12:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7286:3:181"},"nodeType":"YulFunctionCall","src":"7286:31:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"7278:4:181"}]},{"body":{"nodeType":"YulBlock","src":"7344:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7346:16:181"},"nodeType":"YulFunctionCall","src":"7346:18:181"},"nodeType":"YulExpressionStatement","src":"7346:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"7332:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"7338:4:181","type":"","value":"0xff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7329:2:181"},"nodeType":"YulFunctionCall","src":"7329:14:181"},"nodeType":"YulIf","src":"7326:40:181"}]},"name":"checked_sub_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"7250:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"7253:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"7259:4:181","type":""}],"src":"7221:151:181"},{"body":{"nodeType":"YulBlock","src":"7441:358:181","statements":[{"nodeType":"YulVariableDeclaration","src":"7451:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7466:1:181","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"7455:7:181","type":""}]},{"nodeType":"YulAssignment","src":"7476:16:181","value":{"name":"power_1","nodeType":"YulIdentifier","src":"7485:7:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"7476:5:181"}]},{"nodeType":"YulAssignment","src":"7501:13:181","value":{"name":"_base","nodeType":"YulIdentifier","src":"7509:5:181"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"7501:4:181"}]},{"body":{"nodeType":"YulBlock","src":"7565:228:181","statements":[{"body":{"nodeType":"YulBlock","src":"7610:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7612:16:181"},"nodeType":"YulFunctionCall","src":"7612:18:181"},"nodeType":"YulExpressionStatement","src":"7612:18:181"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"7585:4:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7599:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7595:3:181"},"nodeType":"YulFunctionCall","src":"7595:6:181"},{"name":"base","nodeType":"YulIdentifier","src":"7603:4:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"7591:3:181"},"nodeType":"YulFunctionCall","src":"7591:17:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7582:2:181"},"nodeType":"YulFunctionCall","src":"7582:27:181"},"nodeType":"YulIf","src":"7579:53:181"},{"body":{"nodeType":"YulBlock","src":"7671:29:181","statements":[{"nodeType":"YulAssignment","src":"7673:25:181","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"7686:5:181"},{"name":"base","nodeType":"YulIdentifier","src":"7693:4:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"7682:3:181"},"nodeType":"YulFunctionCall","src":"7682:16:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"7673:5:181"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"7652:8:181"},{"name":"power_1","nodeType":"YulIdentifier","src":"7662:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7648:3:181"},"nodeType":"YulFunctionCall","src":"7648:22:181"},"nodeType":"YulIf","src":"7645:55:181"},{"nodeType":"YulAssignment","src":"7713:23:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"7725:4:181"},{"name":"base","nodeType":"YulIdentifier","src":"7731:4:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"7721:3:181"},"nodeType":"YulFunctionCall","src":"7721:15:181"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"7713:4:181"}]},{"nodeType":"YulAssignment","src":"7749:34:181","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"7765:7:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"7774:8:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"7761:3:181"},"nodeType":"YulFunctionCall","src":"7761:22:181"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"7749:8:181"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"7534:8:181"},{"name":"power_1","nodeType":"YulIdentifier","src":"7544:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7531:2:181"},"nodeType":"YulFunctionCall","src":"7531:21:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"7553:3:181","statements":[]},"pre":{"nodeType":"YulBlock","src":"7527:3:181","statements":[]},"src":"7523:270:181"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"7405:5:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"7412:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"7425:5:181","type":""},{"name":"base","nodeType":"YulTypedName","src":"7432:4:181","type":""}],"src":"7377:422:181"},{"body":{"nodeType":"YulBlock","src":"7863:747:181","statements":[{"body":{"nodeType":"YulBlock","src":"7901:52:181","statements":[{"nodeType":"YulAssignment","src":"7915:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7924:1:181","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"7915:5:181"}]},{"nodeType":"YulLeave","src":"7938:5:181"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"7883:8:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7876:6:181"},"nodeType":"YulFunctionCall","src":"7876:16:181"},"nodeType":"YulIf","src":"7873:80:181"},{"body":{"nodeType":"YulBlock","src":"7986:52:181","statements":[{"nodeType":"YulAssignment","src":"8000:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8009:1:181","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"8000:5:181"}]},{"nodeType":"YulLeave","src":"8023:5:181"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"7972:4:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7965:6:181"},"nodeType":"YulFunctionCall","src":"7965:12:181"},"nodeType":"YulIf","src":"7962:76:181"},{"cases":[{"body":{"nodeType":"YulBlock","src":"8074:52:181","statements":[{"nodeType":"YulAssignment","src":"8088:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8097:1:181","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"8088:5:181"}]},{"nodeType":"YulLeave","src":"8111:5:181"}]},"nodeType":"YulCase","src":"8067:59:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8072:1:181","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"8142:123:181","statements":[{"body":{"nodeType":"YulBlock","src":"8177:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8179:16:181"},"nodeType":"YulFunctionCall","src":"8179:18:181"},"nodeType":"YulExpressionStatement","src":"8179:18:181"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"8162:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"8172:3:181","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8159:2:181"},"nodeType":"YulFunctionCall","src":"8159:17:181"},"nodeType":"YulIf","src":"8156:43:181"},{"nodeType":"YulAssignment","src":"8212:25:181","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"8225:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"8235:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8221:3:181"},"nodeType":"YulFunctionCall","src":"8221:16:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"8212:5:181"}]},{"nodeType":"YulLeave","src":"8250:5:181"}]},"nodeType":"YulCase","src":"8135:130:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8140:1:181","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"8054:4:181"},"nodeType":"YulSwitch","src":"8047:218:181"},{"body":{"nodeType":"YulBlock","src":"8363:70:181","statements":[{"nodeType":"YulAssignment","src":"8377:28:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"8390:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"8396:8:181"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"8386:3:181"},"nodeType":"YulFunctionCall","src":"8386:19:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"8377:5:181"}]},{"nodeType":"YulLeave","src":"8418:5:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"8287:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"8293:2:181","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8284:2:181"},"nodeType":"YulFunctionCall","src":"8284:12:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"8301:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"8311:2:181","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8298:2:181"},"nodeType":"YulFunctionCall","src":"8298:16:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8280:3:181"},"nodeType":"YulFunctionCall","src":"8280:35:181"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"8324:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"8330:3:181","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8321:2:181"},"nodeType":"YulFunctionCall","src":"8321:13:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"8339:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"8349:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8336:2:181"},"nodeType":"YulFunctionCall","src":"8336:16:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8317:3:181"},"nodeType":"YulFunctionCall","src":"8317:36:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"8277:2:181"},"nodeType":"YulFunctionCall","src":"8277:77:181"},"nodeType":"YulIf","src":"8274:159:181"},{"nodeType":"YulVariableDeclaration","src":"8442:57:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"8484:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"8490:8:181"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"8465:18:181"},"nodeType":"YulFunctionCall","src":"8465:34:181"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"8446:7:181","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"8455:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8544:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8546:16:181"},"nodeType":"YulFunctionCall","src":"8546:18:181"},"nodeType":"YulExpressionStatement","src":"8546:18:181"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"8514:7:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8531:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"8527:3:181"},"nodeType":"YulFunctionCall","src":"8527:6:181"},{"name":"base_1","nodeType":"YulIdentifier","src":"8535:6:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"8523:3:181"},"nodeType":"YulFunctionCall","src":"8523:19:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8511:2:181"},"nodeType":"YulFunctionCall","src":"8511:32:181"},"nodeType":"YulIf","src":"8508:58:181"},{"nodeType":"YulAssignment","src":"8575:29:181","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"8588:7:181"},{"name":"base_1","nodeType":"YulIdentifier","src":"8597:6:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"8584:3:181"},"nodeType":"YulFunctionCall","src":"8584:20:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"8575:5:181"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"7834:4:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"7840:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"7853:5:181","type":""}],"src":"7804:806:181"},{"body":{"nodeType":"YulBlock","src":"8685:61:181","statements":[{"nodeType":"YulAssignment","src":"8695:45:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"8725:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"8731:8:181"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"8704:20:181"},"nodeType":"YulFunctionCall","src":"8704:36:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"8695:5:181"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"8656:4:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"8662:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"8675:5:181","type":""}],"src":"8615:131:181"},{"body":{"nodeType":"YulBlock","src":"8800:79:181","statements":[{"nodeType":"YulAssignment","src":"8810:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"8822:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"8825:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8818:3:181"},"nodeType":"YulFunctionCall","src":"8818:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"8810:4:181"}]},{"body":{"nodeType":"YulBlock","src":"8851:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8853:16:181"},"nodeType":"YulFunctionCall","src":"8853:18:181"},"nodeType":"YulExpressionStatement","src":"8853:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"8842:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"8848:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8839:2:181"},"nodeType":"YulFunctionCall","src":"8839:11:181"},"nodeType":"YulIf","src":"8836:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"8782:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"8785:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"8791:4:181","type":""}],"src":"8751:128:181"},{"body":{"nodeType":"YulBlock","src":"8950:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"8960:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8969:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"8964:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9029:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"9054:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"9059:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9050:3:181"},"nodeType":"YulFunctionCall","src":"9050:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"9073:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"9078:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9069:3:181"},"nodeType":"YulFunctionCall","src":"9069:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9063:5:181"},"nodeType":"YulFunctionCall","src":"9063:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9043:6:181"},"nodeType":"YulFunctionCall","src":"9043:39:181"},"nodeType":"YulExpressionStatement","src":"9043:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"8990:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"8993:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8987:2:181"},"nodeType":"YulFunctionCall","src":"8987:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"9001:19:181","statements":[{"nodeType":"YulAssignment","src":"9003:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9012:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"9015:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9008:3:181"},"nodeType":"YulFunctionCall","src":"9008:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"9003:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"8983:3:181","statements":[]},"src":"8979:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"9112:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"9117:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9108:3:181"},"nodeType":"YulFunctionCall","src":"9108:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"9126:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9101:6:181"},"nodeType":"YulFunctionCall","src":"9101:27:181"},"nodeType":"YulExpressionStatement","src":"9101:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"8928:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"8933:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"8938:6:181","type":""}],"src":"8884:250:181"},{"body":{"nodeType":"YulBlock","src":"9189:221:181","statements":[{"nodeType":"YulVariableDeclaration","src":"9199:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9219:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9213:5:181"},"nodeType":"YulFunctionCall","src":"9213:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"9203:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9241:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"9246:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9234:6:181"},"nodeType":"YulFunctionCall","src":"9234:19:181"},"nodeType":"YulExpressionStatement","src":"9234:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9301:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9308:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9297:3:181"},"nodeType":"YulFunctionCall","src":"9297:16:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9319:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"9324:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9315:3:181"},"nodeType":"YulFunctionCall","src":"9315:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"9331:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"9262:34:181"},"nodeType":"YulFunctionCall","src":"9262:76:181"},"nodeType":"YulExpressionStatement","src":"9262:76:181"},{"nodeType":"YulAssignment","src":"9347:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9362:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9375:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"9383:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9371:3:181"},"nodeType":"YulFunctionCall","src":"9371:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9392:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"9388:3:181"},"nodeType":"YulFunctionCall","src":"9388:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9367:3:181"},"nodeType":"YulFunctionCall","src":"9367:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9358:3:181"},"nodeType":"YulFunctionCall","src":"9358:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"9399:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9354:3:181"},"nodeType":"YulFunctionCall","src":"9354:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"9347:3:181"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"9166:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"9173:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"9181:3:181","type":""}],"src":"9139:271:181"},{"body":{"nodeType":"YulBlock","src":"9584:214:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9601:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9612:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9594:6:181"},"nodeType":"YulFunctionCall","src":"9594:21:181"},"nodeType":"YulExpressionStatement","src":"9594:21:181"},{"nodeType":"YulVariableDeclaration","src":"9624:59:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9656:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9668:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9679:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9664:3:181"},"nodeType":"YulFunctionCall","src":"9664:18:181"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"9638:17:181"},"nodeType":"YulFunctionCall","src":"9638:45:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"9628:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9703:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9714:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9699:3:181"},"nodeType":"YulFunctionCall","src":"9699:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"9723:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"9731:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9719:3:181"},"nodeType":"YulFunctionCall","src":"9719:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9692:6:181"},"nodeType":"YulFunctionCall","src":"9692:50:181"},"nodeType":"YulExpressionStatement","src":"9692:50:181"},{"nodeType":"YulAssignment","src":"9751:41:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9777:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"9785:6:181"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"9759:17:181"},"nodeType":"YulFunctionCall","src":"9759:33:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9751:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9545:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9556:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9564:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9575:4:181","type":""}],"src":"9415:383:181"},{"body":{"nodeType":"YulBlock","src":"9881:199:181","statements":[{"body":{"nodeType":"YulBlock","src":"9927:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9936:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9939:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9929:6:181"},"nodeType":"YulFunctionCall","src":"9929:12:181"},"nodeType":"YulExpressionStatement","src":"9929:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9902:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"9911:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9898:3:181"},"nodeType":"YulFunctionCall","src":"9898:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"9923:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9894:3:181"},"nodeType":"YulFunctionCall","src":"9894:32:181"},"nodeType":"YulIf","src":"9891:52:181"},{"nodeType":"YulVariableDeclaration","src":"9952:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9971:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9965:5:181"},"nodeType":"YulFunctionCall","src":"9965:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9956:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10034:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10043:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10046:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10036:6:181"},"nodeType":"YulFunctionCall","src":"10036:12:181"},"nodeType":"YulExpressionStatement","src":"10036:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10003:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10024:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10017:6:181"},"nodeType":"YulFunctionCall","src":"10017:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10010:6:181"},"nodeType":"YulFunctionCall","src":"10010:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"10000:2:181"},"nodeType":"YulFunctionCall","src":"10000:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9993:6:181"},"nodeType":"YulFunctionCall","src":"9993:40:181"},"nodeType":"YulIf","src":"9990:60:181"},{"nodeType":"YulAssignment","src":"10059:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"10069:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10059:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9847:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9858:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9870:6:181","type":""}],"src":"9803:277:181"},{"body":{"nodeType":"YulBlock","src":"10137:116:181","statements":[{"nodeType":"YulAssignment","src":"10147:20:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10162:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"10165:1:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"10158:3:181"},"nodeType":"YulFunctionCall","src":"10158:9:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"10147:7:181"}]},{"body":{"nodeType":"YulBlock","src":"10225:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10227:16:181"},"nodeType":"YulFunctionCall","src":"10227:18:181"},"nodeType":"YulExpressionStatement","src":"10227:18:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10196:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10189:6:181"},"nodeType":"YulFunctionCall","src":"10189:9:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"10203:1:181"},{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"10210:7:181"},{"name":"x","nodeType":"YulIdentifier","src":"10219:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"10206:3:181"},"nodeType":"YulFunctionCall","src":"10206:15:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"10200:2:181"},"nodeType":"YulFunctionCall","src":"10200:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"10186:2:181"},"nodeType":"YulFunctionCall","src":"10186:37:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10179:6:181"},"nodeType":"YulFunctionCall","src":"10179:45:181"},"nodeType":"YulIf","src":"10176:71:181"}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10116:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"10119:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"10125:7:181","type":""}],"src":"10085:168:181"},{"body":{"nodeType":"YulBlock","src":"10327:400:181","statements":[{"nodeType":"YulVariableDeclaration","src":"10337:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10357:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10351:5:181"},"nodeType":"YulFunctionCall","src":"10351:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"10341:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10379:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"10384:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10372:6:181"},"nodeType":"YulFunctionCall","src":"10372:19:181"},"nodeType":"YulExpressionStatement","src":"10372:19:181"},{"nodeType":"YulVariableDeclaration","src":"10400:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10410:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10404:2:181","type":""}]},{"nodeType":"YulAssignment","src":"10423:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10434:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10439:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10430:3:181"},"nodeType":"YulFunctionCall","src":"10430:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"10423:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"10451:28:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10469:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10476:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10465:3:181"},"nodeType":"YulFunctionCall","src":"10465:14:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"10455:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10488:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10497:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"10492:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10556:146:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10577:3:181"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"10592:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10586:5:181"},"nodeType":"YulFunctionCall","src":"10586:13:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10609:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"10614:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10605:3:181"},"nodeType":"YulFunctionCall","src":"10605:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"10618:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10601:3:181"},"nodeType":"YulFunctionCall","src":"10601:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10582:3:181"},"nodeType":"YulFunctionCall","src":"10582:39:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10570:6:181"},"nodeType":"YulFunctionCall","src":"10570:52:181"},"nodeType":"YulExpressionStatement","src":"10570:52:181"},{"nodeType":"YulAssignment","src":"10635:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10646:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10651:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10642:3:181"},"nodeType":"YulFunctionCall","src":"10642:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"10635:3:181"}]},{"nodeType":"YulAssignment","src":"10667:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"10681:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10689:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10677:3:181"},"nodeType":"YulFunctionCall","src":"10677:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"10667:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"10518:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"10521:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10515:2:181"},"nodeType":"YulFunctionCall","src":"10515:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"10529:18:181","statements":[{"nodeType":"YulAssignment","src":"10531:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"10540:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"10543:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10536:3:181"},"nodeType":"YulFunctionCall","src":"10536:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"10531:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"10511:3:181","statements":[]},"src":"10507:195:181"},{"nodeType":"YulAssignment","src":"10711:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"10718:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"10711:3:181"}]}]},"name":"abi_encode_array_contract_IERC20_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"10304:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"10311:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10319:3:181","type":""}],"src":"10258:469:181"},{"body":{"nodeType":"YulBlock","src":"10793:374:181","statements":[{"nodeType":"YulVariableDeclaration","src":"10803:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10823:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10817:5:181"},"nodeType":"YulFunctionCall","src":"10817:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"10807:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10845:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"10850:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10838:6:181"},"nodeType":"YulFunctionCall","src":"10838:19:181"},"nodeType":"YulExpressionStatement","src":"10838:19:181"},{"nodeType":"YulVariableDeclaration","src":"10866:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10876:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10870:2:181","type":""}]},{"nodeType":"YulAssignment","src":"10889:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10900:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10905:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10896:3:181"},"nodeType":"YulFunctionCall","src":"10896:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"10889:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"10917:28:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10935:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10942:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10931:3:181"},"nodeType":"YulFunctionCall","src":"10931:14:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"10921:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10954:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10963:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"10958:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"11022:120:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11043:3:181"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"11054:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11048:5:181"},"nodeType":"YulFunctionCall","src":"11048:13:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11036:6:181"},"nodeType":"YulFunctionCall","src":"11036:26:181"},"nodeType":"YulExpressionStatement","src":"11036:26:181"},{"nodeType":"YulAssignment","src":"11075:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11086:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"11091:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11082:3:181"},"nodeType":"YulFunctionCall","src":"11082:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"11075:3:181"}]},{"nodeType":"YulAssignment","src":"11107:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"11121:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"11129:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11117:3:181"},"nodeType":"YulFunctionCall","src":"11117:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"11107:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"10984:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"10987:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10981:2:181"},"nodeType":"YulFunctionCall","src":"10981:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"10995:18:181","statements":[{"nodeType":"YulAssignment","src":"10997:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11006:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"11009:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11002:3:181"},"nodeType":"YulFunctionCall","src":"11002:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"10997:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"10977:3:181","statements":[]},"src":"10973:169:181"},{"nodeType":"YulAssignment","src":"11151:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"11158:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"11151:3:181"}]}]},"name":"abi_encode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"10770:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"10777:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10785:3:181","type":""}],"src":"10732:435:181"},{"body":{"nodeType":"YulBlock","src":"11347:1796:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11364:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11375:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11357:6:181"},"nodeType":"YulFunctionCall","src":"11357:21:181"},"nodeType":"YulExpressionStatement","src":"11357:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11398:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11409:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11394:3:181"},"nodeType":"YulFunctionCall","src":"11394:18:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11420:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11414:5:181"},"nodeType":"YulFunctionCall","src":"11414:13:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11387:6:181"},"nodeType":"YulFunctionCall","src":"11387:41:181"},"nodeType":"YulExpressionStatement","src":"11387:41:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11448:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11459:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11444:3:181"},"nodeType":"YulFunctionCall","src":"11444:18:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11474:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11482:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11470:3:181"},"nodeType":"YulFunctionCall","src":"11470:17:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11464:5:181"},"nodeType":"YulFunctionCall","src":"11464:24:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11437:6:181"},"nodeType":"YulFunctionCall","src":"11437:52:181"},"nodeType":"YulExpressionStatement","src":"11437:52:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11509:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11520:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11505:3:181"},"nodeType":"YulFunctionCall","src":"11505:19:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11536:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11544:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11532:3:181"},"nodeType":"YulFunctionCall","src":"11532:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11526:5:181"},"nodeType":"YulFunctionCall","src":"11526:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11498:6:181"},"nodeType":"YulFunctionCall","src":"11498:51:181"},"nodeType":"YulExpressionStatement","src":"11498:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11569:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11580:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11565:3:181"},"nodeType":"YulFunctionCall","src":"11565:19:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11596:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11604:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11592:3:181"},"nodeType":"YulFunctionCall","src":"11592:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11586:5:181"},"nodeType":"YulFunctionCall","src":"11586:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11558:6:181"},"nodeType":"YulFunctionCall","src":"11558:51:181"},"nodeType":"YulExpressionStatement","src":"11558:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11629:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11640:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11625:3:181"},"nodeType":"YulFunctionCall","src":"11625:19:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11656:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11664:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11652:3:181"},"nodeType":"YulFunctionCall","src":"11652:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11646:5:181"},"nodeType":"YulFunctionCall","src":"11646:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11618:6:181"},"nodeType":"YulFunctionCall","src":"11618:52:181"},"nodeType":"YulExpressionStatement","src":"11618:52:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11690:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11701:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11686:3:181"},"nodeType":"YulFunctionCall","src":"11686:19:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11717:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11725:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11713:3:181"},"nodeType":"YulFunctionCall","src":"11713:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11707:5:181"},"nodeType":"YulFunctionCall","src":"11707:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11679:6:181"},"nodeType":"YulFunctionCall","src":"11679:52:181"},"nodeType":"YulExpressionStatement","src":"11679:52:181"},{"nodeType":"YulVariableDeclaration","src":"11740:33:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11760:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11768:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11756:3:181"},"nodeType":"YulFunctionCall","src":"11756:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11750:5:181"},"nodeType":"YulFunctionCall","src":"11750:23:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11744:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11782:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"11792:3:181","type":"","value":"256"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"11786:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11815:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"11826:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11811:3:181"},"nodeType":"YulFunctionCall","src":"11811:18:181"},{"name":"_1","nodeType":"YulIdentifier","src":"11831:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11804:6:181"},"nodeType":"YulFunctionCall","src":"11804:30:181"},"nodeType":"YulExpressionStatement","src":"11804:30:181"},{"nodeType":"YulVariableDeclaration","src":"11843:43:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11873:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11881:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11869:3:181"},"nodeType":"YulFunctionCall","src":"11869:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11863:5:181"},"nodeType":"YulFunctionCall","src":"11863:23:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"11847:12:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11895:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"11905:3:181","type":"","value":"288"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"11899:2:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"11936:12:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11954:9:181"},{"name":"_3","nodeType":"YulIdentifier","src":"11965:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11950:3:181"},"nodeType":"YulFunctionCall","src":"11950:18:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"11917:18:181"},"nodeType":"YulFunctionCall","src":"11917:52:181"},"nodeType":"YulExpressionStatement","src":"11917:52:181"},{"nodeType":"YulVariableDeclaration","src":"11978:44:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12010:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"12018:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12006:3:181"},"nodeType":"YulFunctionCall","src":"12006:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12000:5:181"},"nodeType":"YulFunctionCall","src":"12000:22:181"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"11982:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12031:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12041:6:181","type":"","value":"0x01c0"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"12035:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12056:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12066:3:181","type":"","value":"320"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"12060:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12089:9:181"},{"name":"_5","nodeType":"YulIdentifier","src":"12100:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12085:3:181"},"nodeType":"YulFunctionCall","src":"12085:18:181"},{"name":"_4","nodeType":"YulIdentifier","src":"12105:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12078:6:181"},"nodeType":"YulFunctionCall","src":"12078:30:181"},"nodeType":"YulExpressionStatement","src":"12078:30:181"},{"nodeType":"YulVariableDeclaration","src":"12117:87:181","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"12168:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12188:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12199:3:181","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12184:3:181"},"nodeType":"YulFunctionCall","src":"12184:19:181"}],"functionName":{"name":"abi_encode_array_contract_IERC20_dyn","nodeType":"YulIdentifier","src":"12131:36:181"},"nodeType":"YulFunctionCall","src":"12131:73:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"12121:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12213:44:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12245:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"12253:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12241:3:181"},"nodeType":"YulFunctionCall","src":"12241:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12235:5:181"},"nodeType":"YulFunctionCall","src":"12235:22:181"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"12217:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12266:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12280:2:181","type":"","value":"63"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"12276:3:181"},"nodeType":"YulFunctionCall","src":"12276:7:181"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"12270:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12292:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12302:3:181","type":"","value":"352"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"12296:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12325:9:181"},{"name":"_7","nodeType":"YulIdentifier","src":"12336:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12321:3:181"},"nodeType":"YulFunctionCall","src":"12321:18:181"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"12349:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"12357:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12345:3:181"},"nodeType":"YulFunctionCall","src":"12345:22:181"},{"name":"_6","nodeType":"YulIdentifier","src":"12369:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12341:3:181"},"nodeType":"YulFunctionCall","src":"12341:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12314:6:181"},"nodeType":"YulFunctionCall","src":"12314:59:181"},"nodeType":"YulExpressionStatement","src":"12314:59:181"},{"nodeType":"YulVariableDeclaration","src":"12382:66:181","value":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"12425:14:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"12441:6:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"12396:28:181"},"nodeType":"YulFunctionCall","src":"12396:52:181"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"12386:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12457:44:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12489:6:181"},{"name":"_5","nodeType":"YulIdentifier","src":"12497:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12485:3:181"},"nodeType":"YulFunctionCall","src":"12485:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12479:5:181"},"nodeType":"YulFunctionCall","src":"12479:22:181"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"12461:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12510:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12520:3:181","type":"","value":"384"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"12514:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12543:9:181"},{"name":"_8","nodeType":"YulIdentifier","src":"12554:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12539:3:181"},"nodeType":"YulFunctionCall","src":"12539:18:181"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12567:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"12575:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12563:3:181"},"nodeType":"YulFunctionCall","src":"12563:22:181"},{"name":"_6","nodeType":"YulIdentifier","src":"12587:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12559:3:181"},"nodeType":"YulFunctionCall","src":"12559:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12532:6:181"},"nodeType":"YulFunctionCall","src":"12532:59:181"},"nodeType":"YulExpressionStatement","src":"12532:59:181"},{"nodeType":"YulVariableDeclaration","src":"12600:66:181","value":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"12643:14:181"},{"name":"tail_2","nodeType":"YulIdentifier","src":"12659:6:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"12614:28:181"},"nodeType":"YulFunctionCall","src":"12614:52:181"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"12604:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12675:44:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12707:6:181"},{"name":"_7","nodeType":"YulIdentifier","src":"12715:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12703:3:181"},"nodeType":"YulFunctionCall","src":"12703:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12697:5:181"},"nodeType":"YulFunctionCall","src":"12697:22:181"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"12679:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12728:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12738:3:181","type":"","value":"416"},"variables":[{"name":"_9","nodeType":"YulTypedName","src":"12732:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12761:9:181"},{"name":"_9","nodeType":"YulIdentifier","src":"12772:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12757:3:181"},"nodeType":"YulFunctionCall","src":"12757:18:181"},{"arguments":[{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"12785:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"12793:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12781:3:181"},"nodeType":"YulFunctionCall","src":"12781:22:181"},{"name":"_6","nodeType":"YulIdentifier","src":"12805:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12777:3:181"},"nodeType":"YulFunctionCall","src":"12777:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12750:6:181"},"nodeType":"YulFunctionCall","src":"12750:59:181"},"nodeType":"YulExpressionStatement","src":"12750:59:181"},{"nodeType":"YulVariableDeclaration","src":"12818:66:181","value":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"12861:14:181"},{"name":"tail_3","nodeType":"YulIdentifier","src":"12877:6:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"12832:28:181"},"nodeType":"YulFunctionCall","src":"12832:52:181"},"variables":[{"name":"tail_4","nodeType":"YulTypedName","src":"12822:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12893:44:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12925:6:181"},{"name":"_8","nodeType":"YulIdentifier","src":"12933:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12921:3:181"},"nodeType":"YulFunctionCall","src":"12921:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12915:5:181"},"nodeType":"YulFunctionCall","src":"12915:22:181"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"12897:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"12962:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12982:9:181"},{"name":"_4","nodeType":"YulIdentifier","src":"12993:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12978:3:181"},"nodeType":"YulFunctionCall","src":"12978:18:181"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"12946:15:181"},"nodeType":"YulFunctionCall","src":"12946:51:181"},"nodeType":"YulExpressionStatement","src":"12946:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13017:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13028:3:181","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13013:3:181"},"nodeType":"YulFunctionCall","src":"13013:19:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13044:6:181"},{"name":"_9","nodeType":"YulIdentifier","src":"13052:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13040:3:181"},"nodeType":"YulFunctionCall","src":"13040:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13034:5:181"},"nodeType":"YulFunctionCall","src":"13034:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13006:6:181"},"nodeType":"YulFunctionCall","src":"13006:51:181"},"nodeType":"YulExpressionStatement","src":"13006:51:181"},{"nodeType":"YulAssignment","src":"13066:14:181","value":{"name":"tail_4","nodeType":"YulIdentifier","src":"13074:6:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13066:4:181"}]},{"expression":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13108:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13120:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13131:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13116:3:181"},"nodeType":"YulFunctionCall","src":"13116:20:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"13089:18:181"},"nodeType":"YulFunctionCall","src":"13089:48:181"},"nodeType":"YulExpressionStatement","src":"13089:48:181"}]},"name":"abi_encode_tuple_t_struct$_Swap_$30786_memory_ptr_t_address__to_t_struct$_Swap_$30786_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11308:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11319:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11327:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11338:4:181","type":""}],"src":"11172:1971:181"},{"body":{"nodeType":"YulBlock","src":"13196:77:181","statements":[{"nodeType":"YulAssignment","src":"13206:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13217:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"13220:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13213:3:181"},"nodeType":"YulFunctionCall","src":"13213:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"13206:3:181"}]},{"body":{"nodeType":"YulBlock","src":"13245:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13247:16:181"},"nodeType":"YulFunctionCall","src":"13247:18:181"},"nodeType":"YulExpressionStatement","src":"13247:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13237:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"13240:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13234:2:181"},"nodeType":"YulFunctionCall","src":"13234:10:181"},"nodeType":"YulIf","src":"13231:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"13179:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"13182:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"13188:3:181","type":""}],"src":"13148:125:181"},{"body":{"nodeType":"YulBlock","src":"13452:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13469:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13480:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13462:6:181"},"nodeType":"YulFunctionCall","src":"13462:21:181"},"nodeType":"YulExpressionStatement","src":"13462:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13503:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13514:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13499:3:181"},"nodeType":"YulFunctionCall","src":"13499:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13519:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13492:6:181"},"nodeType":"YulFunctionCall","src":"13492:30:181"},"nodeType":"YulExpressionStatement","src":"13492:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13542:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13553:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13538:3:181"},"nodeType":"YulFunctionCall","src":"13538:18:181"},{"hexValue":"57616974203120646179206265666f7265207374617274696e672072616d70","kind":"string","nodeType":"YulLiteral","src":"13558:33:181","type":"","value":"Wait 1 day before starting ramp"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13531:6:181"},"nodeType":"YulFunctionCall","src":"13531:61:181"},"nodeType":"YulExpressionStatement","src":"13531:61:181"},{"nodeType":"YulAssignment","src":"13601:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13613:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13624:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13609:3:181"},"nodeType":"YulFunctionCall","src":"13609:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13601:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1b53e581d849d126253991f586658292489ca99b95601d0e9a46e8a40560683c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13429:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13443:4:181","type":""}],"src":"13278:355:181"},{"body":{"nodeType":"YulBlock","src":"13812:172:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13829:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13840:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13822:6:181"},"nodeType":"YulFunctionCall","src":"13822:21:181"},"nodeType":"YulExpressionStatement","src":"13822:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13863:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13874:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13859:3:181"},"nodeType":"YulFunctionCall","src":"13859:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13879:2:181","type":"","value":"22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13852:6:181"},"nodeType":"YulFunctionCall","src":"13852:30:181"},"nodeType":"YulExpressionStatement","src":"13852:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13902:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13913:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13898:3:181"},"nodeType":"YulFunctionCall","src":"13898:18:181"},{"hexValue":"496e73756666696369656e742072616d702074696d65","kind":"string","nodeType":"YulLiteral","src":"13918:24:181","type":"","value":"Insufficient ramp time"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13891:6:181"},"nodeType":"YulFunctionCall","src":"13891:52:181"},"nodeType":"YulExpressionStatement","src":"13891:52:181"},{"nodeType":"YulAssignment","src":"13952:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13964:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13975:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13960:3:181"},"nodeType":"YulFunctionCall","src":"13960:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13952:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4c79bf4677fbadf48dfed0cfd80497295366e965c13f89299485a45d83898b6a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13789:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13803:4:181","type":""}],"src":"13638:346:181"},{"body":{"nodeType":"YulBlock","src":"14163:182:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14180:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14191:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14173:6:181"},"nodeType":"YulFunctionCall","src":"14173:21:181"},"nodeType":"YulExpressionStatement","src":"14173:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14214:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14225:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14210:3:181"},"nodeType":"YulFunctionCall","src":"14210:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14230:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14203:6:181"},"nodeType":"YulFunctionCall","src":"14203:30:181"},"nodeType":"YulExpressionStatement","src":"14203:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14253:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14264:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14249:3:181"},"nodeType":"YulFunctionCall","src":"14249:18:181"},{"hexValue":"667574757265415f206d757374206265203e203020616e64203c204d41585f41","kind":"string","nodeType":"YulLiteral","src":"14269:34:181","type":"","value":"futureA_ must be > 0 and < MAX_A"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14242:6:181"},"nodeType":"YulFunctionCall","src":"14242:62:181"},"nodeType":"YulExpressionStatement","src":"14242:62:181"},{"nodeType":"YulAssignment","src":"14313:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14325:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14336:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14321:3:181"},"nodeType":"YulFunctionCall","src":"14321:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14313:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_97176162870e7e456f7a0a31334045c46f00da24e81344128ac9050ab0db28db__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14140:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14154:4:181","type":""}],"src":"13989:356:181"},{"body":{"nodeType":"YulBlock","src":"14524:161:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14541:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14552:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14534:6:181"},"nodeType":"YulFunctionCall","src":"14534:21:181"},"nodeType":"YulExpressionStatement","src":"14534:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14575:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14586:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14571:3:181"},"nodeType":"YulFunctionCall","src":"14571:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14591:2:181","type":"","value":"11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14564:6:181"},"nodeType":"YulFunctionCall","src":"14564:30:181"},"nodeType":"YulExpressionStatement","src":"14564:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14614:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14625:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14610:3:181"},"nodeType":"YulFunctionCall","src":"14610:18:181"},{"hexValue":"2176616c69642072616d70","kind":"string","nodeType":"YulLiteral","src":"14630:13:181","type":"","value":"!valid ramp"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14603:6:181"},"nodeType":"YulFunctionCall","src":"14603:41:181"},"nodeType":"YulExpressionStatement","src":"14603:41:181"},{"nodeType":"YulAssignment","src":"14653:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14665:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14676:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14661:3:181"},"nodeType":"YulFunctionCall","src":"14661:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14653:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_44788ed50b2245d8a26f7d03698b757639551ce6b3f4191322e3b922fdd0abc9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14501:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14515:4:181","type":""}],"src":"14350:335:181"},{"body":{"nodeType":"YulBlock","src":"14864:171:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14881:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14892:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14874:6:181"},"nodeType":"YulFunctionCall","src":"14874:21:181"},"nodeType":"YulExpressionStatement","src":"14874:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14915:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14926:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14911:3:181"},"nodeType":"YulFunctionCall","src":"14911:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14931:2:181","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14904:6:181"},"nodeType":"YulFunctionCall","src":"14904:30:181"},"nodeType":"YulExpressionStatement","src":"14904:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14954:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14965:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14950:3:181"},"nodeType":"YulFunctionCall","src":"14950:18:181"},{"hexValue":"667574757265415f20697320746f6f20736d616c6c","kind":"string","nodeType":"YulLiteral","src":"14970:23:181","type":"","value":"futureA_ is too small"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14943:6:181"},"nodeType":"YulFunctionCall","src":"14943:51:181"},"nodeType":"YulExpressionStatement","src":"14943:51:181"},{"nodeType":"YulAssignment","src":"15003:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15015:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15026:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15011:3:181"},"nodeType":"YulFunctionCall","src":"15011:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15003:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_70ef023479c1247bc56a8110e918ad65744efc349b9118a585df0f3c4ddea941__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14841:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14855:4:181","type":""}],"src":"14690:345:181"},{"body":{"nodeType":"YulBlock","src":"15214:171:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15231:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15242:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15224:6:181"},"nodeType":"YulFunctionCall","src":"15224:21:181"},"nodeType":"YulExpressionStatement","src":"15224:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15265:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15276:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15261:3:181"},"nodeType":"YulFunctionCall","src":"15261:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15281:2:181","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15254:6:181"},"nodeType":"YulFunctionCall","src":"15254:30:181"},"nodeType":"YulExpressionStatement","src":"15254:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15304:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15315:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15300:3:181"},"nodeType":"YulFunctionCall","src":"15300:18:181"},{"hexValue":"667574757265415f20697320746f6f206c61726765","kind":"string","nodeType":"YulLiteral","src":"15320:23:181","type":"","value":"futureA_ is too large"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15293:6:181"},"nodeType":"YulFunctionCall","src":"15293:51:181"},"nodeType":"YulExpressionStatement","src":"15293:51:181"},{"nodeType":"YulAssignment","src":"15353:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15365:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15376:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15361:3:181"},"nodeType":"YulFunctionCall","src":"15361:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15353:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2ee4dedb99ff885c57b93a92e7fecc104d42f54e9af51e109d9629ee80d199e9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15191:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15205:4:181","type":""}],"src":"15040:345:181"},{"body":{"nodeType":"YulBlock","src":"15575:206:181","statements":[{"nodeType":"YulAssignment","src":"15585:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15597:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15608:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15593:3:181"},"nodeType":"YulFunctionCall","src":"15593:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15585:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15628:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"15639:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15621:6:181"},"nodeType":"YulFunctionCall","src":"15621:25:181"},"nodeType":"YulExpressionStatement","src":"15621:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15666:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15677:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15662:3:181"},"nodeType":"YulFunctionCall","src":"15662:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"15682:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15655:6:181"},"nodeType":"YulFunctionCall","src":"15655:34:181"},"nodeType":"YulExpressionStatement","src":"15655:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15709:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15720:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15705:3:181"},"nodeType":"YulFunctionCall","src":"15705:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"15725:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15698:6:181"},"nodeType":"YulFunctionCall","src":"15698:34:181"},"nodeType":"YulExpressionStatement","src":"15698:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15752:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15763:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15748:3:181"},"nodeType":"YulFunctionCall","src":"15748:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"15768:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15741:6:181"},"nodeType":"YulFunctionCall","src":"15741:34:181"},"nodeType":"YulExpressionStatement","src":"15741:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15520:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"15531:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15539:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15547:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15555:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15566:4:181","type":""}],"src":"15390:391:181"},{"body":{"nodeType":"YulBlock","src":"15915:145:181","statements":[{"nodeType":"YulAssignment","src":"15925:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15937:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15948:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15933:3:181"},"nodeType":"YulFunctionCall","src":"15933:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15925:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15967:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15982:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15998:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"16003:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"15994:3:181"},"nodeType":"YulFunctionCall","src":"15994:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"16007:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15990:3:181"},"nodeType":"YulFunctionCall","src":"15990:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15978:3:181"},"nodeType":"YulFunctionCall","src":"15978:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15960:6:181"},"nodeType":"YulFunctionCall","src":"15960:51:181"},"nodeType":"YulExpressionStatement","src":"15960:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16031:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16042:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16027:3:181"},"nodeType":"YulFunctionCall","src":"16027:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"16047:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16020:6:181"},"nodeType":"YulFunctionCall","src":"16020:34:181"},"nodeType":"YulExpressionStatement","src":"16020:34:181"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15876:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15887:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15895:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15906:4:181","type":""}],"src":"15786:274:181"},{"body":{"nodeType":"YulBlock","src":"16239:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16256:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16267:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16249:6:181"},"nodeType":"YulFunctionCall","src":"16249:21:181"},"nodeType":"YulExpressionStatement","src":"16249:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16290:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16301:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16286:3:181"},"nodeType":"YulFunctionCall","src":"16286:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16306:1:181","type":"","value":"8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16279:6:181"},"nodeType":"YulFunctionCall","src":"16279:29:181"},"nodeType":"YulExpressionStatement","src":"16279:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16328:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16339:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16324:3:181"},"nodeType":"YulFunctionCall","src":"16324:18:181"},{"hexValue":"746f6f2068696768","kind":"string","nodeType":"YulLiteral","src":"16344:10:181","type":"","value":"too high"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16317:6:181"},"nodeType":"YulFunctionCall","src":"16317:38:181"},"nodeType":"YulExpressionStatement","src":"16317:38:181"},{"nodeType":"YulAssignment","src":"16364:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16376:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16387:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16372:3:181"},"nodeType":"YulFunctionCall","src":"16372:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16364:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8649b1e5b06e4f5968b2a3f0fa64e06710ce221cf73d9057a24a3fccd677b635__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16216:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16230:4:181","type":""}],"src":"16065:331:181"},{"body":{"nodeType":"YulBlock","src":"16502:76:181","statements":[{"nodeType":"YulAssignment","src":"16512:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16524:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16535:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16520:3:181"},"nodeType":"YulFunctionCall","src":"16520:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16512:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16554:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"16565:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16547:6:181"},"nodeType":"YulFunctionCall","src":"16547:25:181"},"nodeType":"YulExpressionStatement","src":"16547:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16471:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16482:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16493:4:181","type":""}],"src":"16401:177:181"},{"body":{"nodeType":"YulBlock","src":"16757:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16774:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16785:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16767:6:181"},"nodeType":"YulFunctionCall","src":"16767:21:181"},"nodeType":"YulExpressionStatement","src":"16767:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16808:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16819:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16804:3:181"},"nodeType":"YulFunctionCall","src":"16804:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16824:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16797:6:181"},"nodeType":"YulFunctionCall","src":"16797:30:181"},"nodeType":"YulExpressionStatement","src":"16797:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16847:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16858:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16843:3:181"},"nodeType":"YulFunctionCall","src":"16843:18:181"},{"hexValue":"52616d7020697320616c72656164792073746f70706564","kind":"string","nodeType":"YulLiteral","src":"16863:25:181","type":"","value":"Ramp is already stopped"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16836:6:181"},"nodeType":"YulFunctionCall","src":"16836:53:181"},"nodeType":"YulExpressionStatement","src":"16836:53:181"},{"nodeType":"YulAssignment","src":"16898:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16910:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16921:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16906:3:181"},"nodeType":"YulFunctionCall","src":"16906:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16898:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1a473326c7eab86a4c1915be8a93321772f3ce5660b51eb1a81d3ac6b9907aa3__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16734:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16748:4:181","type":""}],"src":"16583:347:181"},{"body":{"nodeType":"YulBlock","src":"17064:119:181","statements":[{"nodeType":"YulAssignment","src":"17074:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17086:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17097:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17082:3:181"},"nodeType":"YulFunctionCall","src":"17082:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17074:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17116:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"17127:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17109:6:181"},"nodeType":"YulFunctionCall","src":"17109:25:181"},"nodeType":"YulExpressionStatement","src":"17109:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17154:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17165:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17150:3:181"},"nodeType":"YulFunctionCall","src":"17150:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"17170:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17143:6:181"},"nodeType":"YulFunctionCall","src":"17143:34:181"},"nodeType":"YulExpressionStatement","src":"17143:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17025:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"17036:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17044:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17055:4:181","type":""}],"src":"16935:248:181"},{"body":{"nodeType":"YulBlock","src":"17362:172:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17379:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17390:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17372:6:181"},"nodeType":"YulFunctionCall","src":"17372:21:181"},"nodeType":"YulExpressionStatement","src":"17372:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17413:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17424:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17409:3:181"},"nodeType":"YulFunctionCall","src":"17409:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17429:2:181","type":"","value":"22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17402:6:181"},"nodeType":"YulFunctionCall","src":"17402:30:181"},"nodeType":"YulExpressionStatement","src":"17402:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17452:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17463:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17448:3:181"},"nodeType":"YulFunctionCall","src":"17448:18:181"},{"hexValue":"455243313136373a20637265617465206661696c6564","kind":"string","nodeType":"YulLiteral","src":"17468:24:181","type":"","value":"ERC1167: create failed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17441:6:181"},"nodeType":"YulFunctionCall","src":"17441:52:181"},"nodeType":"YulExpressionStatement","src":"17441:52:181"},{"nodeType":"YulAssignment","src":"17502:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17514:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17525:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17510:3:181"},"nodeType":"YulFunctionCall","src":"17510:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17502:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17339:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17353:4:181","type":""}],"src":"17188:346:181"},{"body":{"nodeType":"YulBlock","src":"17713:232:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17730:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17741:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17723:6:181"},"nodeType":"YulFunctionCall","src":"17723:21:181"},"nodeType":"YulExpressionStatement","src":"17723:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17764:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17775:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17760:3:181"},"nodeType":"YulFunctionCall","src":"17760:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17780:2:181","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17753:6:181"},"nodeType":"YulFunctionCall","src":"17753:30:181"},"nodeType":"YulExpressionStatement","src":"17753:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17803:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17814:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17799:3:181"},"nodeType":"YulFunctionCall","src":"17799:18:181"},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e","kind":"string","nodeType":"YulLiteral","src":"17819:34:181","type":"","value":"SafeERC20: ERC20 operation did n"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17792:6:181"},"nodeType":"YulFunctionCall","src":"17792:62:181"},"nodeType":"YulExpressionStatement","src":"17792:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17874:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17885:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17870:3:181"},"nodeType":"YulFunctionCall","src":"17870:18:181"},{"hexValue":"6f742073756363656564","kind":"string","nodeType":"YulLiteral","src":"17890:12:181","type":"","value":"ot succeed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17863:6:181"},"nodeType":"YulFunctionCall","src":"17863:40:181"},"nodeType":"YulExpressionStatement","src":"17863:40:181"},{"nodeType":"YulAssignment","src":"17912:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17924:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17935:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17920:3:181"},"nodeType":"YulFunctionCall","src":"17920:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17912:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17690:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17704:4:181","type":""}],"src":"17539:406:181"},{"body":{"nodeType":"YulBlock","src":"18124:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18141:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18152:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18134:6:181"},"nodeType":"YulFunctionCall","src":"18134:21:181"},"nodeType":"YulExpressionStatement","src":"18134:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18175:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18186:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18171:3:181"},"nodeType":"YulFunctionCall","src":"18171:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18191:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18164:6:181"},"nodeType":"YulFunctionCall","src":"18164:30:181"},"nodeType":"YulExpressionStatement","src":"18164:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18214:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18225:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18210:3:181"},"nodeType":"YulFunctionCall","src":"18210:18:181"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f","kind":"string","nodeType":"YulLiteral","src":"18230:34:181","type":"","value":"Address: insufficient balance fo"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18203:6:181"},"nodeType":"YulFunctionCall","src":"18203:62:181"},"nodeType":"YulExpressionStatement","src":"18203:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18285:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18296:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18281:3:181"},"nodeType":"YulFunctionCall","src":"18281:18:181"},{"hexValue":"722063616c6c","kind":"string","nodeType":"YulLiteral","src":"18301:8:181","type":"","value":"r call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18274:6:181"},"nodeType":"YulFunctionCall","src":"18274:36:181"},"nodeType":"YulExpressionStatement","src":"18274:36:181"},{"nodeType":"YulAssignment","src":"18319:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18331:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18342:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18327:3:181"},"nodeType":"YulFunctionCall","src":"18327:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18319:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18101:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18115:4:181","type":""}],"src":"17950:402:181"},{"body":{"nodeType":"YulBlock","src":"18494:150:181","statements":[{"nodeType":"YulVariableDeclaration","src":"18504:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18524:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18518:5:181"},"nodeType":"YulFunctionCall","src":"18518:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"18508:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18579:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"18587:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18575:3:181"},"nodeType":"YulFunctionCall","src":"18575:17:181"},{"name":"pos","nodeType":"YulIdentifier","src":"18594:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"18599:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"18540:34:181"},"nodeType":"YulFunctionCall","src":"18540:66:181"},"nodeType":"YulExpressionStatement","src":"18540:66:181"},{"nodeType":"YulAssignment","src":"18615:23:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18626:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"18631:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18622:3:181"},"nodeType":"YulFunctionCall","src":"18622:16:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"18615:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"18470:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18475:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"18486:3:181","type":""}],"src":"18357:287:181"},{"body":{"nodeType":"YulBlock","src":"18823:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18840:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18851:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18833:6:181"},"nodeType":"YulFunctionCall","src":"18833:21:181"},"nodeType":"YulExpressionStatement","src":"18833:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18874:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18885:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18870:3:181"},"nodeType":"YulFunctionCall","src":"18870:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18890:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18863:6:181"},"nodeType":"YulFunctionCall","src":"18863:30:181"},"nodeType":"YulExpressionStatement","src":"18863:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18913:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18924:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18909:3:181"},"nodeType":"YulFunctionCall","src":"18909:18:181"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"18929:31:181","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18902:6:181"},"nodeType":"YulFunctionCall","src":"18902:59:181"},"nodeType":"YulExpressionStatement","src":"18902:59:181"},{"nodeType":"YulAssignment","src":"18970:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18982:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18993:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18978:3:181"},"nodeType":"YulFunctionCall","src":"18978:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18970:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18800:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18814:4:181","type":""}],"src":"18649:353:181"},{"body":{"nodeType":"YulBlock","src":"19128:99:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19145:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19156:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19138:6:181"},"nodeType":"YulFunctionCall","src":"19138:21:181"},"nodeType":"YulExpressionStatement","src":"19138:21:181"},{"nodeType":"YulAssignment","src":"19168:53:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19194:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19206:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19217:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19202:3:181"},"nodeType":"YulFunctionCall","src":"19202:18:181"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"19176:17:181"},"nodeType":"YulFunctionCall","src":"19176:45:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19168:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19097:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19108:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19119:4:181","type":""}],"src":"19007:220:181"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_bytes32t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_bytes32t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_bool(value, pos)\n    {\n        mstore(pos, iszero(iszero(value)))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_array_contract_IERC20_dyn(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(shl(5, length), 0x20)\n    }\n    function abi_decode_array_contract_IERC20_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_contract_IERC20_dyn(_1))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let srcEnd := add(add(offset, shl(5, _1)), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            let value := calldataload(src)\n            validator_revert_address(value)\n            mstore(dst, value)\n            dst := add(dst, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_array_uint8_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_contract_IERC20_dyn(_1))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let srcEnd := add(add(offset, shl(5, _1)), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            let value := calldataload(src)\n            if iszero(eq(value, and(value, 0xff)))\n            {\n                let _3 := 0\n                revert(_3, _3)\n            }\n            mstore(dst, value)\n            dst := add(dst, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_string(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        if gt(_1, 0xffffffffffffffff) { panic_error_0x41() }\n        let array_1 := allocate_memory(add(and(add(_1, 0x1f), not(31)), 0x20))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(array_1, _1), 0x20), 0)\n        array := array_1\n    }\n    function abi_decode_tuple_t_bytes32t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptrt_array$_t_uint8_$dyn_memory_ptrt_string_memory_ptrt_string_memory_ptrt_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value1 := abi_decode_array_contract_IERC20_dyn(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value2 := abi_decode_array_uint8_dyn(add(headStart, offset_1), dataEnd)\n        let offset_2 := calldataload(add(headStart, 96))\n        if gt(offset_2, _1) { revert(0, 0) }\n        value3 := abi_decode_string(add(headStart, offset_2), dataEnd)\n        let offset_3 := calldataload(add(headStart, 128))\n        if gt(offset_3, _1) { revert(0, 0) }\n        value4 := abi_decode_string(add(headStart, offset_3), dataEnd)\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n        value7 := calldataload(add(headStart, 224))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_address__to_t_uint256_t_uint256_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint8(x, y) -> diff\n    {\n        diff := sub(and(x, 0xff), and(y, 0xff))\n        if gt(diff, 0xff) { panic_error_0x11() }\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(not(0), base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(not(0), base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        let tail_1 := abi_encode_string(value0, add(headStart, 64))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_string(value1, tail_1)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        product := mul(x, y)\n        if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n    }\n    function abi_encode_array_contract_IERC20_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_array_uint256_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_struct$_Swap_$30786_memory_ptr_t_address__to_t_struct$_Swap_$30786_memory_ptr_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        mstore(add(headStart, 64), mload(value0))\n        mstore(add(headStart, 96), mload(add(value0, 0x20)))\n        mstore(add(headStart, 128), mload(add(value0, 64)))\n        mstore(add(headStart, 160), mload(add(value0, 96)))\n        mstore(add(headStart, 192), mload(add(value0, 128)))\n        mstore(add(headStart, 224), mload(add(value0, 160)))\n        let _1 := mload(add(value0, 192))\n        let _2 := 256\n        mstore(add(headStart, _2), _1)\n        let memberValue0 := mload(add(value0, 224))\n        let _3 := 288\n        abi_encode_address(memberValue0, add(headStart, _3))\n        let memberValue0_1 := mload(add(value0, _2))\n        let _4 := 0x01c0\n        let _5 := 320\n        mstore(add(headStart, _5), _4)\n        let tail_1 := abi_encode_array_contract_IERC20_dyn(memberValue0_1, add(headStart, 512))\n        let memberValue0_2 := mload(add(value0, _3))\n        let _6 := not(63)\n        let _7 := 352\n        mstore(add(headStart, _7), add(sub(tail_1, headStart), _6))\n        let tail_2 := abi_encode_array_uint256_dyn(memberValue0_2, tail_1)\n        let memberValue0_3 := mload(add(value0, _5))\n        let _8 := 384\n        mstore(add(headStart, _8), add(sub(tail_2, headStart), _6))\n        let tail_3 := abi_encode_array_uint256_dyn(memberValue0_3, tail_2)\n        let memberValue0_4 := mload(add(value0, _7))\n        let _9 := 416\n        mstore(add(headStart, _9), add(sub(tail_3, headStart), _6))\n        let tail_4 := abi_encode_array_uint256_dyn(memberValue0_4, tail_3)\n        let memberValue0_5 := mload(add(value0, _8))\n        abi_encode_bool(memberValue0_5, add(headStart, _4))\n        mstore(add(headStart, 480), mload(add(value0, _9)))\n        tail := tail_4\n        abi_encode_address(value1, add(headStart, 0x20))\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_1b53e581d849d126253991f586658292489ca99b95601d0e9a46e8a40560683c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"Wait 1 day before starting ramp\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4c79bf4677fbadf48dfed0cfd80497295366e965c13f89299485a45d83898b6a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"Insufficient ramp time\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_97176162870e7e456f7a0a31334045c46f00da24e81344128ac9050ab0db28db__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"futureA_ must be > 0 and < MAX_A\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_44788ed50b2245d8a26f7d03698b757639551ce6b3f4191322e3b922fdd0abc9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 11)\n        mstore(add(headStart, 64), \"!valid ramp\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_70ef023479c1247bc56a8110e918ad65744efc349b9118a585df0f3c4ddea941__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"futureA_ is too small\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_2ee4dedb99ff885c57b93a92e7fecc104d42f54e9af51e109d9629ee80d199e9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"futureA_ is too large\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_8649b1e5b06e4f5968b2a3f0fa64e06710ce221cf73d9057a24a3fccd677b635__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 8)\n        mstore(add(headStart, 64), \"too high\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_stringliteral_1a473326c7eab86a4c1915be8a93321772f3ce5660b51eb1a81d3ac6b9907aa3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"Ramp is already stopped\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"ERC1167: create failed\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100a95760003560e01c806372a30e081161007157806372a30e081461013f5780638dc51484146101525780639c8eab9714610165578063a1a23c2914610178578063e5f6220f1461018b578063ea027c2f1461019e57600080fd5b80631963e426146100ae5780632bf63bcc146100c35780633e74aea0146100e357806343be5eaf146100f65780634b141bb414610109575b600080fd5b6100c16100bc366004611b2a565b6101b1565b005b601a546040516001600160a01b0390911681526020015b60405180910390f35b6100c16100f1366004611b56565b610273565b6100c1610104366004611b6f565b610546565b61012f610117366004611b56565b6000908152601860205260409020600c015460ff1690565b60405190151581526020016100da565b6100c161014d366004611b56565b6105f7565b6100c1610160366004611ba6565b6106a8565b6100c1610173366004611b6f565b6107a0565b6100c1610186366004611b56565b610851565b6100c1610199366004611d7d565b6108ee565b6100c16101ac366004611b56565b610fc4565b336101ba6110fc565b6001600160a01b0316141580156101f5575060033360009081526014602052604090205460ff1660038111156101f2576101f2611e4f565b14155b1561021357604051637b32c26b60e01b815260040160405180910390fd5b600083815260186020526040902061022c90838361112a565b60408051838152602081018390523381830152905184917f58e6fbecdb1a94225cf82c6b317a771aa08c9ab6552702b819bcd84ba8e8312f919081900360600190a2505050565b3361027c6110fc565b6001600160a01b0316141580156102b7575060033360009081526014602052604090205460ff1660038111156102b4576102b4611e4f565b14155b156102d557604051637b32c26b60e01b815260040160405180910390fd5b6000818152601860205260408120600801549081900361030857604051635e98c38d60e11b815260040160405180910390fd5b6000828152601860205260409020600c015460ff1661033a57604051637baf490160e11b815260040160405180910390fd5b6000828152601860205260409020600d015442101561036c576040516302aba83160e51b815260040160405180910390fd5b60005b8181101561046757600083815260186020526040812060080180548390811061039a5761039a611e65565b6000918252602080832090910154868352601890915260408220600a0180546001600160a01b03909216935090849081106103d7576103d7611e65565b90600052602060002001541115610435576000848152601860205260409020600a0180546104359133918590811061041157610411611e65565b9060005260206000200154836001600160a01b03166113b89092919063ffffffff16565b60008481526019602090815260408083206001600160a01b03909416835292905220805460ff1916905560010161036f565b50610472823361140f565b60008281526018602052604081208181556001810182905560028101829055600381018290556004810182905560058101829055600681018290556007810180546001600160a01b0319169055906104cd6008830182611a54565b6104db600983016000611a54565b6104e9600a83016000611a54565b6104f7600b83016000611a54565b50600c8101805460ff191690556000600d9091015560405133815282907fb729dde7e954c83f790a153521f9d2e12779b36305ed42c8bf86ac4cf7ce6915906020015b60405180910390a25050565b3361054f6110fc565b6001600160a01b03161415801561058a575060033360009081526014602052604090205460ff16600381111561058757610587611e4f565b14155b156105a857604051637b32c26b60e01b815260040160405180910390fd5b60008281526018602052604090206105c09082611462565b6040805182815233602082015283917f6d9b91502dc11e7c127e8e2d114c1f8026647ecb6b987c1baaadb706b5eb3176910161053a565b336106006110fc565b6001600160a01b03161415801561063b575060033360009081526014602052604090205460ff16600381111561063857610638611e4f565b14155b1561065957604051637b32c26b60e01b815260040160405180910390fd5b6000818152601860205260409020610670906114e3565b60405133815281907f86ce75679135e270f845c02bcb49ef6fb50464cb322dcc30096cccd13d2597df9060200160405180910390a250565b336106b16110fc565b6001600160a01b0316141580156106ec575060033360009081526014602052604090205460ff1660038111156106e9576106e9611e4f565b14155b1561070a57604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0381163b61073257604051630db340a960e21b815260040160405180910390fd5b601a54604080516001600160a01b03928316815291831660208301523382820152517f98bc4f3f4ec7b43d0c86b6136979bfbe279b2d54a930505d34ec02d72dfb1c409181900360600190a1601a80546001600160a01b0319166001600160a01b0392909216919091179055565b336107a96110fc565b6001600160a01b0316141580156107e4575060033360009081526014602052604090205460ff1660038111156107e1576107e1611e4f565b14155b1561080257604051637b32c26b60e01b815260040160405180910390fd5b600082815260186020526040902061081a90826115a4565b6040805182815233602082015283917f46eefbb271e4103912d3c227656de8afc0849f4c8cba4b2a1e38b660361e0463910161053a565b3361085a6110fc565b6001600160a01b031614158015610895575060033360009081526014602052604090205460ff16600381111561089257610892611e4f565b14155b156108b357604051637b32c26b60e01b815260040160405180910390fd5b601654600119016108d757604051637ce54e2d60e11b815260040160405180910390fd5b60026016556108e6813361140f565b506001601655565b336108f76110fc565b6001600160a01b031614158015610932575060033360009081526014602052604090205460ff16600381111561092f5761092f611e4f565b14155b1561095057604051637b32c26b60e01b815260040160405180910390fd5b60008881526018602052604090206008015415610980576040516376a1368960e11b815260040160405180910390fd5b600287511080610991575060108751115b156109af5760405163502ef3af60e01b815260040160405180910390fd5b8651865181146109d25760405163d6e48e5d60e01b815260040160405180910390fd5b6000875167ffffffffffffffff8111156109ee576109ee611bc3565b604051908082528060200260200182016040528015610a17578160200160208202803683370190505b50905060005b82811015610c2d578015610ae65760008b81526019602052604081208b519091908c9084908110610a5057610a50611e65565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16151580610ac85750898181518110610a9157610a91611e65565b60200260200101516001600160a01b03168a600081518110610ab557610ab5611e65565b60200260200101516001600160a01b0316145b15610ae657604051632fa9e93b60e11b815260040160405180910390fd5b60006001600160a01b03168a8281518110610b0357610b03611e65565b60200260200101516001600160a01b031603610b3257604051634ce187ad60e11b815260040160405180910390fd5b601260ff16898281518110610b4957610b49611e65565b602002602001015160ff161115610b7357604051637d4ada4560e11b815260040160405180910390fd5b888181518110610b8557610b85611e65565b60200260200101516012610b999190611e91565b610ba79060ff16600a611f94565b828281518110610bb957610bb9611e65565b60200260200101818152505080600060190160008d815260200190815260200160002060008c8481518110610bf057610bf0611e65565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191660ff92909216919091179055600101610a1d565b50610c3c6001620f4240611fa0565b851115610c5c576040516306aedbfd60e01b815260040160405180910390fd5b610c6b60016305f5e100611fa0565b841115610c8b57604051634fc2217d60e11b815260040160405180910390fd5b610c9b60016402540be400611fa0565b831115610cbb576040516384b9a37f60e01b815260040160405180910390fd5b601a54600090610cd3906001600160a01b0316611626565b60405163266c45bb60e11b81529091506001600160a01b03821690634cd88b7690610d04908b908b90600401612003565b6020604051808303816000875af1158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190612031565b610d645760405163276cd8b960e01b815260040160405180910390fd5b6000604051806101c001604052808d8152602001606489610d859190612053565b8152602001610d9560648a612053565b81526020016000815260200160008152602001878152602001868152602001836001600160a01b031681526020018c81526020018481526020018c5167ffffffffffffffff811115610de957610de9611bc3565b604051908082528060200260200182016040528015610e12578160200160208202803683370190505b5081526020018c5167ffffffffffffffff811115610e3257610e32611bc3565b604051908082528060200260200182016040528015610e5b578160200160208202803683370190505b5081526000602080830182905260409283018290528f8252601881529082902083518155838201516001820155918301516002830155606083015160038301556080830151600483015560a0830151600583015560c0830151600683015560e08301516007830180546001600160a01b0319166001600160a01b0390921691909117905561010083015180519394508493610efc9260088501920190611a75565b506101208201518051610f19916009840191602090910190611ada565b506101408201518051610f3691600a840191602090910190611ada565b506101608201518051610f5391600b840191602090910190611ada565b50610180820151600c8201805460ff19169115159190911790556101a090910151600d909101556040518c907f17624207b3ada0ecb82d25bef7eb308a62e614001936961428b08af45651c3f190610fae90849033906120de565b60405180910390a2505050505050505050505050565b33610fcd6110fc565b6001600160a01b031614158015611008575060033360009081526014602052604090205460ff16600381111561100557611005611e4f565b14155b1561102657604051637b32c26b60e01b815260040160405180910390fd5b60008181526018602052604081206008015490819003611059576040516303bb6f8760e61b815260040160405180910390fd5b6000828152601860205260409020600c015460ff161561108c576040516380cd476f60e01b815260040160405180910390fd5b6000828152601860205260409020600c01805460ff191660011790556110b562093a8042612201565b600083815260186020908152604091829020600d01929092555133815283917f436f3434791c806271347887826cd8df45595907e6cfdc188dd8c9b468d8521e910161053a565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b62015180836003015461113d9190612201565b4210156111915760405162461bcd60e51b815260206004820152601f60248201527f57616974203120646179206265666f7265207374617274696e672072616d700060448201526064015b60405180910390fd5b61119e6212750042612201565b8110156111e65760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e742072616d702074696d6560501b6044820152606401611188565b81158015906111f75750620f424082105b6112435760405162461bcd60e51b815260206004820181905260248201527f667574757265415f206d757374206265203e203020616e64203c204d41585f416044820152606401611188565b600061124e846116c0565b9050600061125d606485612053565b905080820361129c5760405162461bcd60e51b815260206004820152600b60248201526a02176616c69642072616d760ac1b6044820152606401611188565b818110156112fb57816112b0600283612053565b10156112f65760405162461bcd60e51b8152602060048201526015602482015274199d5d1d5c995057c81a5cc81d1bdbc81cdb585b1b605a1b6044820152606401611188565b61134d565b611306600283612053565b81111561134d5760405162461bcd60e51b8152602060048201526015602482015274667574757265415f20697320746f6f206c6172676560581b6044820152606401611188565b600185018290556002850181905542600386018190556004860184905560408051848152602081018490528082019290925260608201859052517fa2b71ec6df949300b59aab36b55e189697b750119dd349fcfa8c0f779e83c2549181900360800190a15050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261140a908490611709565b505050565b600082815260186020526040902061142790826117db565b6040516001600160a01b038216815282907f2e6c35653408399a9853c5e5f81b67018cba78568bfd76dd46f93c825cbfb95d9060200161053a565b6114716305f5e1006001612201565b81106114aa5760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401611188565b6005820181905581546040518281527f29aee3d14d18e1b8ace81481838ab2996fee9446a44336847d1d5c7fdf2471b19060200161053a565b428160040154116115365760405162461bcd60e51b815260206004820152601760248201527f52616d7020697320616c72656164792073746f707065640000000000000000006044820152606401611188565b6000611541826116c0565b60018301819055600283018190554260038401819055600484018190556040519192507f46e22fb3709ad289f62ce63d469248536dbc78d82b84a3d7e74ad606dc2019389161159891848252602082015260400190565b60405180910390a15050565b6115b46402540be4006001612201565b81106115ed5760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401611188565b6006820181905581546040518281527f7b4e02f2e320870ba4f764edf60a5289a465018a3fe159f0d72ba33139b0a6169060200161053a565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166116bb5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b6044820152606401611188565b919050565b6004810154600282015460018301549091908083148015906116e157508142105b15611702576000846003015490508083038142038502428503840201049350505b5050919050565b600061175e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166118819092919063ffffffff16565b80519091501561140a578080602001905181019061177c9190612031565b61140a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611188565b600882015460005b8181101561187b57600084600801828154811061180257611802611e65565b6000918252602082200154600b870180546001600160a01b039092169350908490811061183157611831611e65565b90600052602060002001549050806000146118715785600b01838154811061185b5761185b611e65565b600091825260208220015561187182868361189a565b50506001016117e3565b50505050565b606061189084846000856118d9565b90505b9392505050565b806000036118a757505050565b6001600160a01b0383166118ce57604051633a48ca7b60e11b815260040160405180910390fd5b61140a8383836113b8565b60608247101561193a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611188565b600080866001600160a01b031685876040516119569190612214565b60006040518083038185875af1925050503d8060008114611993576040519150601f19603f3d011682016040523d82523d6000602084013e611998565b606091505b50915091506119a9878383876119b6565b925050505b949350505050565b60608315611a25578251600003611a1e576001600160a01b0385163b611a1e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611188565b50816119ae565b6119ae8383815115611a3a5781518083602001fd5b8060405162461bcd60e51b81526004016111889190612230565b5080546000825590600052602060002090810190611a729190611b15565b50565b828054828255906000526020600020908101928215611aca579160200282015b82811115611aca57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611a95565b50611ad6929150611b15565b5090565b828054828255906000526020600020908101928215611aca579160200282015b82811115611aca578251825591602001919060010190611afa565b5b80821115611ad65760008155600101611b16565b600080600060608486031215611b3f57600080fd5b505081359360208301359350604090920135919050565b600060208284031215611b6857600080fd5b5035919050565b60008060408385031215611b8257600080fd5b50508035926020909101359150565b6001600160a01b0381168114611a7257600080fd5b600060208284031215611bb857600080fd5b813561189381611b91565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611c0257611c02611bc3565b604052919050565b600067ffffffffffffffff821115611c2457611c24611bc3565b5060051b60200190565b600082601f830112611c3f57600080fd5b81356020611c54611c4f83611c0a565b611bd9565b82815260059290921b84018101918181019086841115611c7357600080fd5b8286015b84811015611c97578035611c8a81611b91565b8352918301918301611c77565b509695505050505050565b600082601f830112611cb357600080fd5b81356020611cc3611c4f83611c0a565b82815260059290921b84018101918181019086841115611ce257600080fd5b8286015b84811015611c9757803560ff81168114611d005760008081fd5b8352918301918301611ce6565b600082601f830112611d1e57600080fd5b813567ffffffffffffffff811115611d3857611d38611bc3565b611d4b601f8201601f1916602001611bd9565b818152846020838601011115611d6057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b031215611d9a57600080fd5b88359750602089013567ffffffffffffffff80821115611db957600080fd5b611dc58c838d01611c2e565b985060408b0135915080821115611ddb57600080fd5b611de78c838d01611ca2565b975060608b0135915080821115611dfd57600080fd5b611e098c838d01611d0d565b965060808b0135915080821115611e1f57600080fd5b50611e2c8b828c01611d0d565b989b979a50959894979660a0860135965060c08601359560e00135945092505050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff8281168282160390811115611eaa57611eaa611e7b565b92915050565b600181815b80851115611eeb578160001904821115611ed157611ed1611e7b565b80851615611ede57918102915b93841c9390800290611eb5565b509250929050565b600082611f0257506001611eaa565b81611f0f57506000611eaa565b8160018114611f255760028114611f2f57611f4b565b6001915050611eaa565b60ff841115611f4057611f40611e7b565b50506001821b611eaa565b5060208310610133831016604e8410600b8410161715611f6e575081810a611eaa565b611f788383611eb0565b8060001904821115611f8c57611f8c611e7b565b029392505050565b60006118938383611ef3565b81810381811115611eaa57611eaa611e7b565b60005b83811015611fce578181015183820152602001611fb6565b50506000910152565b60008151808452611fef816020860160208601611fb3565b601f01601f19169290920160200192915050565b6040815260006120166040830185611fd7565b82810360208401526120288185611fd7565b95945050505050565b60006020828403121561204357600080fd5b8151801515811461189357600080fd5b8082028115828204841417611eaa57611eaa611e7b565b600081518084526020808501945080840160005b838110156120a35781516001600160a01b03168752958201959082019060010161207e565b509495945050505050565b600081518084526020808501945080840160005b838110156120a3578151875295820195908201906001016120c2565b60408152825160408201526020830151606082015260408301516080820152606083015160a0820152608083015160c082015260a083015160e0820152600060c0840151610100818185015260e08601519150610120612148818601846001600160a01b03169052565b8187015192506101c09150610140828187015261216961020087018561206a565b9350818801519150603f1961016081888703018189015261218a86856120ae565b9550828a0151935061018092508188870301838901526121aa86856120ae565b9550808a01519350506101a08188870301818901526121c986856120ae565b9550828a015193506121de8589018515159052565b8901516101e08801525050506001600160a01b0385166020850152509050611893565b80820180821115611eaa57611eaa611e7b565b60008251612226818460208701611fb3565b9190910192915050565b6020815260006118936020830184611fd756fea264697066735822122064a71594956868d9b1646f86d724aacb274b2332baed3ab7d2e4dd393d32da7664736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x72A30E08 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x72A30E08 EQ PUSH2 0x13F JUMPI DUP1 PUSH4 0x8DC51484 EQ PUSH2 0x152 JUMPI DUP1 PUSH4 0x9C8EAB97 EQ PUSH2 0x165 JUMPI DUP1 PUSH4 0xA1A23C29 EQ PUSH2 0x178 JUMPI DUP1 PUSH4 0xE5F6220F EQ PUSH2 0x18B JUMPI DUP1 PUSH4 0xEA027C2F EQ PUSH2 0x19E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1963E426 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x2BF63BCC EQ PUSH2 0xC3 JUMPI DUP1 PUSH4 0x3E74AEA0 EQ PUSH2 0xE3 JUMPI DUP1 PUSH4 0x43BE5EAF EQ PUSH2 0xF6 JUMPI DUP1 PUSH4 0x4B141BB4 EQ PUSH2 0x109 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0xBC CALLDATASIZE PUSH1 0x4 PUSH2 0x1B2A JUMP JUMPDEST PUSH2 0x1B1 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC1 PUSH2 0xF1 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B56 JUMP JUMPDEST PUSH2 0x273 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x104 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B6F JUMP JUMPDEST PUSH2 0x546 JUMP JUMPDEST PUSH2 0x12F PUSH2 0x117 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B56 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xC ADD SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xDA JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x14D CALLDATASIZE PUSH1 0x4 PUSH2 0x1B56 JUMP JUMPDEST PUSH2 0x5F7 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x160 CALLDATASIZE PUSH1 0x4 PUSH2 0x1BA6 JUMP JUMPDEST PUSH2 0x6A8 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x173 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B6F JUMP JUMPDEST PUSH2 0x7A0 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x186 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B56 JUMP JUMPDEST PUSH2 0x851 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x199 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D7D JUMP JUMPDEST PUSH2 0x8EE JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x1AC CALLDATASIZE PUSH1 0x4 PUSH2 0x1B56 JUMP JUMPDEST PUSH2 0xFC4 JUMP JUMPDEST CALLER PUSH2 0x1BA PUSH2 0x10FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x1F5 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1F2 JUMPI PUSH2 0x1F2 PUSH2 0x1E4F JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x213 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x22C SWAP1 DUP4 DUP4 PUSH2 0x112A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE CALLER DUP2 DUP4 ADD MSTORE SWAP1 MLOAD DUP5 SWAP2 PUSH32 0x58E6FBECDB1A94225CF82C6B317A771AA08C9AB6552702B819BCD84BA8E8312F SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH2 0x27C PUSH2 0x10FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x2B7 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2B4 JUMPI PUSH2 0x2B4 PUSH2 0x1E4F JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x2D5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x8 ADD SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x308 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5E98C38D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xC ADD SLOAD PUSH1 0xFF AND PUSH2 0x33A JUMPI PUSH1 0x40 MLOAD PUSH4 0x7BAF4901 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD ADD SLOAD TIMESTAMP LT ISZERO PUSH2 0x36C JUMPI PUSH1 0x40 MLOAD PUSH4 0x2ABA831 PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x467 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x8 ADD DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH2 0x39A JUMPI PUSH2 0x39A PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD DUP7 DUP4 MSTORE PUSH1 0x18 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 PUSH1 0xA ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP4 POP SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x3D7 JUMPI PUSH2 0x3D7 PUSH2 0x1E65 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD GT ISZERO PUSH2 0x435 JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xA ADD DUP1 SLOAD PUSH2 0x435 SWAP2 CALLER SWAP2 DUP6 SWAP1 DUP2 LT PUSH2 0x411 JUMPI PUSH2 0x411 PUSH2 0x1E65 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x13B8 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x1 ADD PUSH2 0x36F JUMP JUMPDEST POP PUSH2 0x472 DUP3 CALLER PUSH2 0x140F JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x5 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x6 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x7 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE SWAP1 PUSH2 0x4CD PUSH1 0x8 DUP4 ADD DUP3 PUSH2 0x1A54 JUMP JUMPDEST PUSH2 0x4DB PUSH1 0x9 DUP4 ADD PUSH1 0x0 PUSH2 0x1A54 JUMP JUMPDEST PUSH2 0x4E9 PUSH1 0xA DUP4 ADD PUSH1 0x0 PUSH2 0x1A54 JUMP JUMPDEST PUSH2 0x4F7 PUSH1 0xB DUP4 ADD PUSH1 0x0 PUSH2 0x1A54 JUMP JUMPDEST POP PUSH1 0xC DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x0 PUSH1 0xD SWAP1 SWAP2 ADD SSTORE PUSH1 0x40 MLOAD CALLER DUP2 MSTORE DUP3 SWAP1 PUSH32 0xB729DDE7E954C83F790A153521F9D2E12779B36305ED42C8BF86AC4CF7CE6915 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST CALLER PUSH2 0x54F PUSH2 0x10FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x58A JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x587 JUMPI PUSH2 0x587 PUSH2 0x1E4F JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x5A8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x5C0 SWAP1 DUP3 PUSH2 0x1462 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE DUP4 SWAP2 PUSH32 0x6D9B91502DC11E7C127E8E2D114C1F8026647ECB6B987C1BAAADB706B5EB3176 SWAP2 ADD PUSH2 0x53A JUMP JUMPDEST CALLER PUSH2 0x600 PUSH2 0x10FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x63B JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x638 JUMPI PUSH2 0x638 PUSH2 0x1E4F JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x659 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x670 SWAP1 PUSH2 0x14E3 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER DUP2 MSTORE DUP2 SWAP1 PUSH32 0x86CE75679135E270F845C02BCB49EF6FB50464CB322DCC30096CCCD13D2597DF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST CALLER PUSH2 0x6B1 PUSH2 0x10FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x6EC JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x6E9 JUMPI PUSH2 0x6E9 PUSH2 0x1E4F JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x70A JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x732 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDB340A9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE CALLER DUP3 DUP3 ADD MSTORE MLOAD PUSH32 0x98BC4F3F4EC7B43D0C86B6136979BFBE279B2D54A930505D34EC02D72DFB1C40 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 PUSH1 0x1A DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH2 0x7A9 PUSH2 0x10FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x7E4 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x7E1 JUMPI PUSH2 0x7E1 PUSH2 0x1E4F JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x81A SWAP1 DUP3 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE DUP4 SWAP2 PUSH32 0x46EEFBB271E4103912D3C227656DE8AFC0849F4C8CBA4B2A1E38B660361E0463 SWAP2 ADD PUSH2 0x53A JUMP JUMPDEST CALLER PUSH2 0x85A PUSH2 0x10FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x895 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x892 JUMPI PUSH2 0x892 PUSH2 0x1E4F JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x8B3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x16 SLOAD PUSH1 0x1 NOT ADD PUSH2 0x8D7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7CE54E2D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x16 SSTORE PUSH2 0x8E6 DUP2 CALLER PUSH2 0x140F JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x16 SSTORE JUMP JUMPDEST CALLER PUSH2 0x8F7 PUSH2 0x10FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x932 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x92F JUMPI PUSH2 0x92F PUSH2 0x1E4F JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x950 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x8 ADD SLOAD ISZERO PUSH2 0x980 JUMPI PUSH1 0x40 MLOAD PUSH4 0x76A13689 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP8 MLOAD LT DUP1 PUSH2 0x991 JUMPI POP PUSH1 0x10 DUP8 MLOAD GT JUMPDEST ISZERO PUSH2 0x9AF JUMPI PUSH1 0x40 MLOAD PUSH4 0x502EF3AF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP7 MLOAD DUP7 MLOAD DUP2 EQ PUSH2 0x9D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD6E48E5D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP8 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x9EE JUMPI PUSH2 0x9EE PUSH2 0x1BC3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xA17 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xC2D JUMPI DUP1 ISZERO PUSH2 0xAE6 JUMPI PUSH1 0x0 DUP12 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP12 MLOAD SWAP1 SWAP2 SWAP1 DUP13 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0xA50 JUMPI PUSH2 0xA50 PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO ISZERO DUP1 PUSH2 0xAC8 JUMPI POP DUP10 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xA91 JUMPI PUSH2 0xA91 PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP11 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xAB5 JUMPI PUSH2 0xAB5 PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST ISZERO PUSH2 0xAE6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2FA9E93B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP11 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xB03 JUMPI PUSH2 0xB03 PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0xB32 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4CE187AD PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x12 PUSH1 0xFF AND DUP10 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xB49 JUMPI PUSH2 0xB49 PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xFF AND GT ISZERO PUSH2 0xB73 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7D4ADA45 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP9 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xB85 JUMPI PUSH2 0xB85 PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x12 PUSH2 0xB99 SWAP2 SWAP1 PUSH2 0x1E91 JUMP JUMPDEST PUSH2 0xBA7 SWAP1 PUSH1 0xFF AND PUSH1 0xA PUSH2 0x1F94 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xBB9 JUMPI PUSH2 0xBB9 PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x0 PUSH1 0x19 ADD PUSH1 0x0 DUP14 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xBF0 JUMPI PUSH2 0xBF0 PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 ADD PUSH2 0xA1D JUMP JUMPDEST POP PUSH2 0xC3C PUSH1 0x1 PUSH3 0xF4240 PUSH2 0x1FA0 JUMP JUMPDEST DUP6 GT ISZERO PUSH2 0xC5C JUMPI PUSH1 0x40 MLOAD PUSH4 0x6AEDBFD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC6B PUSH1 0x1 PUSH4 0x5F5E100 PUSH2 0x1FA0 JUMP JUMPDEST DUP5 GT ISZERO PUSH2 0xC8B JUMPI PUSH1 0x40 MLOAD PUSH4 0x4FC2217D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC9B PUSH1 0x1 PUSH5 0x2540BE400 PUSH2 0x1FA0 JUMP JUMPDEST DUP4 GT ISZERO PUSH2 0xCBB JUMPI PUSH1 0x40 MLOAD PUSH4 0x84B9A37F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1A SLOAD PUSH1 0x0 SWAP1 PUSH2 0xCD3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x266C45BB PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x4CD88B76 SWAP1 PUSH2 0xD04 SWAP1 DUP12 SWAP1 DUP12 SWAP1 PUSH1 0x4 ADD PUSH2 0x2003 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD47 SWAP2 SWAP1 PUSH2 0x2031 JUMP JUMPDEST PUSH2 0xD64 JUMPI PUSH1 0x40 MLOAD PUSH4 0x276CD8B9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 DUP14 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x64 DUP10 PUSH2 0xD85 SWAP2 SWAP1 PUSH2 0x2053 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD95 PUSH1 0x64 DUP11 PUSH2 0x2053 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP13 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDE9 JUMPI PUSH2 0xDE9 PUSH2 0x1BC3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE12 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP DUP2 MSTORE PUSH1 0x20 ADD DUP13 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xE32 JUMPI PUSH2 0xE32 PUSH2 0x1BC3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE5B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 SWAP3 DUP4 ADD DUP3 SWAP1 MSTORE DUP16 DUP3 MSTORE PUSH1 0x18 DUP2 MSTORE SWAP1 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SSTORE DUP4 DUP3 ADD MLOAD PUSH1 0x1 DUP3 ADD SSTORE SWAP2 DUP4 ADD MLOAD PUSH1 0x2 DUP4 ADD SSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x3 DUP4 ADD SSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x4 DUP4 ADD SSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x5 DUP4 ADD SSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0x6 DUP4 ADD SSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0x7 DUP4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x100 DUP4 ADD MLOAD DUP1 MLOAD SWAP4 SWAP5 POP DUP5 SWAP4 PUSH2 0xEFC SWAP3 PUSH1 0x8 DUP6 ADD SWAP3 ADD SWAP1 PUSH2 0x1A75 JUMP JUMPDEST POP PUSH2 0x120 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0xF19 SWAP2 PUSH1 0x9 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x1ADA JUMP JUMPDEST POP PUSH2 0x140 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0xF36 SWAP2 PUSH1 0xA DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x1ADA JUMP JUMPDEST POP PUSH2 0x160 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0xF53 SWAP2 PUSH1 0xB DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x1ADA JUMP JUMPDEST POP PUSH2 0x180 DUP3 ADD MLOAD PUSH1 0xC DUP3 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1A0 SWAP1 SWAP2 ADD MLOAD PUSH1 0xD SWAP1 SWAP2 ADD SSTORE PUSH1 0x40 MLOAD DUP13 SWAP1 PUSH32 0x17624207B3ADA0ECB82D25BEF7EB308A62E614001936961428B08AF45651C3F1 SWAP1 PUSH2 0xFAE SWAP1 DUP5 SWAP1 CALLER SWAP1 PUSH2 0x20DE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH2 0xFCD PUSH2 0x10FC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x1008 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1005 JUMPI PUSH2 0x1005 PUSH2 0x1E4F JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH2 0x1026 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x8 ADD SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x1059 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3BB6F87 PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xC ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x108C JUMPI PUSH1 0x40 MLOAD PUSH4 0x80CD476F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xC ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x10B5 PUSH3 0x93A80 TIMESTAMP PUSH2 0x2201 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0xD ADD SWAP3 SWAP1 SWAP3 SSTORE MLOAD CALLER DUP2 MSTORE DUP4 SWAP2 PUSH32 0x436F3434791C806271347887826CD8DF45595907E6CFDC188DD8C9B468D8521E SWAP2 ADD PUSH2 0x53A JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH3 0x15180 DUP4 PUSH1 0x3 ADD SLOAD PUSH2 0x113D SWAP2 SWAP1 PUSH2 0x2201 JUMP JUMPDEST TIMESTAMP LT ISZERO PUSH2 0x1191 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x57616974203120646179206265666F7265207374617274696E672072616D7000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x119E PUSH3 0x127500 TIMESTAMP PUSH2 0x2201 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x11E6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x496E73756666696369656E742072616D702074696D65 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x11F7 JUMPI POP PUSH3 0xF4240 DUP3 LT JUMPDEST PUSH2 0x1243 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x667574757265415F206D757374206265203E203020616E64203C204D41585F41 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x124E DUP5 PUSH2 0x16C0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x125D PUSH1 0x64 DUP6 PUSH2 0x2053 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 SUB PUSH2 0x129C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x2176616C69642072616D7 PUSH1 0xAC SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x12FB JUMPI DUP2 PUSH2 0x12B0 PUSH1 0x2 DUP4 PUSH2 0x2053 JUMP JUMPDEST LT ISZERO PUSH2 0x12F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x199D5D1D5C995057C81A5CC81D1BDBC81CDB585B1B PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST PUSH2 0x134D JUMP JUMPDEST PUSH2 0x1306 PUSH1 0x2 DUP4 PUSH2 0x2053 JUMP JUMPDEST DUP2 GT ISZERO PUSH2 0x134D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x667574757265415F20697320746F6F206C61726765 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST PUSH1 0x1 DUP6 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP6 ADD DUP2 SWAP1 SSTORE TIMESTAMP PUSH1 0x3 DUP7 ADD DUP2 SWAP1 SSTORE PUSH1 0x4 DUP7 ADD DUP5 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP3 ADD DUP6 SWAP1 MSTORE MLOAD PUSH32 0xA2B71EC6DF949300B59AAB36B55E189697B750119DD349FCFA8C0F779E83C254 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x140A SWAP1 DUP5 SWAP1 PUSH2 0x1709 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1427 SWAP1 DUP3 PUSH2 0x17DB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP2 MSTORE DUP3 SWAP1 PUSH32 0x2E6C35653408399A9853C5E5F81B67018CBA78568BFD76DD46F93C825CBFB95D SWAP1 PUSH1 0x20 ADD PUSH2 0x53A JUMP JUMPDEST PUSH2 0x1471 PUSH4 0x5F5E100 PUSH1 0x1 PUSH2 0x2201 JUMP JUMPDEST DUP2 LT PUSH2 0x14AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0xE8DEDE40D0D2CED PUSH1 0xC3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST PUSH1 0x5 DUP3 ADD DUP2 SWAP1 SSTORE DUP2 SLOAD PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0x29AEE3D14D18E1B8ACE81481838AB2996FEE9446A44336847D1D5C7FDF2471B1 SWAP1 PUSH1 0x20 ADD PUSH2 0x53A JUMP JUMPDEST TIMESTAMP DUP2 PUSH1 0x4 ADD SLOAD GT PUSH2 0x1536 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x52616D7020697320616C72656164792073746F70706564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1541 DUP3 PUSH2 0x16C0 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD DUP2 SWAP1 SSTORE PUSH1 0x2 DUP4 ADD DUP2 SWAP1 SSTORE TIMESTAMP PUSH1 0x3 DUP5 ADD DUP2 SWAP1 SSTORE PUSH1 0x4 DUP5 ADD DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP3 POP PUSH32 0x46E22FB3709AD289F62CE63D469248536DBC78D82B84A3D7E74AD606DC201938 SWAP2 PUSH2 0x1598 SWAP2 DUP5 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0x15B4 PUSH5 0x2540BE400 PUSH1 0x1 PUSH2 0x2201 JUMP JUMPDEST DUP2 LT PUSH2 0x15ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0xE8DEDE40D0D2CED PUSH1 0xC3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST PUSH1 0x6 DUP3 ADD DUP2 SWAP1 SSTORE DUP2 SLOAD PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0x7B4E02F2E320870BA4F764EDF60A5289A465018A3FE159F0D72BA33139B0A616 SWAP1 PUSH1 0x20 ADD PUSH2 0x53A JUMP JUMPDEST PUSH1 0x0 PUSH23 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000 DUP3 PUSH1 0x60 SHL PUSH1 0xE8 SHR OR PUSH1 0x0 MSTORE PUSH15 0x5AF43D82803E903D91602B57FD5BF3 DUP3 PUSH1 0x78 SHL OR PUSH1 0x20 MSTORE PUSH1 0x37 PUSH1 0x9 PUSH1 0x0 CREATE SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x16BB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x115490CC4C4D8DCE8818DC99585D194819985A5B1959 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x2 DUP3 ADD SLOAD PUSH1 0x1 DUP4 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP1 DUP4 EQ DUP1 ISZERO SWAP1 PUSH2 0x16E1 JUMPI POP DUP2 TIMESTAMP LT JUMPDEST ISZERO PUSH2 0x1702 JUMPI PUSH1 0x0 DUP5 PUSH1 0x3 ADD SLOAD SWAP1 POP DUP1 DUP4 SUB DUP2 TIMESTAMP SUB DUP6 MUL TIMESTAMP DUP6 SUB DUP5 MUL ADD DIV SWAP4 POP POP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x175E DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1881 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x140A JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x177C SWAP2 SWAP1 PUSH2 0x2031 JUMP JUMPDEST PUSH2 0x140A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1188 JUMP JUMPDEST PUSH1 0x8 DUP3 ADD SLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x187B JUMPI PUSH1 0x0 DUP5 PUSH1 0x8 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1802 JUMPI PUSH2 0x1802 PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 KECCAK256 ADD SLOAD PUSH1 0xB DUP8 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP4 POP SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x1831 JUMPI PUSH2 0x1831 PUSH2 0x1E65 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ PUSH2 0x1871 JUMPI DUP6 PUSH1 0xB ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x185B JUMPI PUSH2 0x185B PUSH2 0x1E65 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 KECCAK256 ADD SSTORE PUSH2 0x1871 DUP3 DUP7 DUP4 PUSH2 0x189A JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x17E3 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1890 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x18D9 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x18A7 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x18CE JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A48CA7B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x140A DUP4 DUP4 DUP4 PUSH2 0x13B8 JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x193A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1188 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1956 SWAP2 SWAP1 PUSH2 0x2214 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1993 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1998 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x19A9 DUP8 DUP4 DUP4 DUP8 PUSH2 0x19B6 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1A25 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x1A1E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x1A1E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1188 JUMP JUMPDEST POP DUP2 PUSH2 0x19AE JUMP JUMPDEST PUSH2 0x19AE DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x1A3A JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1188 SWAP2 SWAP1 PUSH2 0x2230 JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x0 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1A72 SWAP2 SWAP1 PUSH2 0x1B15 JUMP JUMPDEST POP JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x1ACA JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1ACA JUMPI DUP3 MLOAD DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x1A95 JUMP JUMPDEST POP PUSH2 0x1AD6 SWAP3 SWAP2 POP PUSH2 0x1B15 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x1ACA JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1ACA JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1AFA JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1AD6 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1B16 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1B3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP2 CALLDATALOAD SWAP4 PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 SWAP1 SWAP3 ADD CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1B68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1B82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1A72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1BB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1893 DUP2 PUSH2 0x1B91 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1C02 JUMPI PUSH2 0x1C02 PUSH2 0x1BC3 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1C24 JUMPI PUSH2 0x1C24 PUSH2 0x1BC3 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1C3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x1C54 PUSH2 0x1C4F DUP4 PUSH2 0x1C0A JUMP JUMPDEST PUSH2 0x1BD9 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x1C73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1C97 JUMPI DUP1 CALLDATALOAD PUSH2 0x1C8A DUP2 PUSH2 0x1B91 JUMP JUMPDEST DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x1C77 JUMP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1CB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x1CC3 PUSH2 0x1C4F DUP4 PUSH2 0x1C0A JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x1CE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1C97 JUMPI DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1D00 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x1CE6 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1D1E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1D38 JUMPI PUSH2 0x1D38 PUSH2 0x1BC3 JUMP JUMPDEST PUSH2 0x1D4B PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x1BD9 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x1D60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x1D9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1DB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1DC5 DUP13 DUP4 DUP14 ADD PUSH2 0x1C2E JUMP JUMPDEST SWAP9 POP PUSH1 0x40 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1DDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1DE7 DUP13 DUP4 DUP14 ADD PUSH2 0x1CA2 JUMP JUMPDEST SWAP8 POP PUSH1 0x60 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1DFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E09 DUP13 DUP4 DUP14 ADD PUSH2 0x1D0D JUMP JUMPDEST SWAP7 POP PUSH1 0x80 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1E1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2C DUP12 DUP3 DUP13 ADD PUSH2 0x1D0D JUMP JUMPDEST SWAP9 SWAP12 SWAP8 SWAP11 POP SWAP6 SWAP9 SWAP5 SWAP8 SWAP7 PUSH1 0xA0 DUP7 ADD CALLDATALOAD SWAP7 POP PUSH1 0xC0 DUP7 ADD CALLDATALOAD SWAP6 PUSH1 0xE0 ADD CALLDATALOAD SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x1EAA JUMPI PUSH2 0x1EAA PUSH2 0x1E7B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x1EEB JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x1ED1 JUMPI PUSH2 0x1ED1 PUSH2 0x1E7B JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x1EDE JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x1EB5 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1F02 JUMPI POP PUSH1 0x1 PUSH2 0x1EAA JUMP JUMPDEST DUP2 PUSH2 0x1F0F JUMPI POP PUSH1 0x0 PUSH2 0x1EAA JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x1F25 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x1F2F JUMPI PUSH2 0x1F4B JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x1EAA JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x1F40 JUMPI PUSH2 0x1F40 PUSH2 0x1E7B JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x1EAA JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x1F6E JUMPI POP DUP2 DUP2 EXP PUSH2 0x1EAA JUMP JUMPDEST PUSH2 0x1F78 DUP4 DUP4 PUSH2 0x1EB0 JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x1F8C JUMPI PUSH2 0x1F8C PUSH2 0x1E7B JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1893 DUP4 DUP4 PUSH2 0x1EF3 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x1EAA JUMPI PUSH2 0x1EAA PUSH2 0x1E7B JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1FCE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1FB6 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1FEF DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1FB3 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2016 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x1FD7 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2028 DUP2 DUP6 PUSH2 0x1FD7 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2043 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1893 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x1EAA JUMPI PUSH2 0x1EAA PUSH2 0x1E7B JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20A3 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x207E JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20A3 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x20C2 JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE DUP3 MLOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x100 DUP2 DUP2 DUP6 ADD MSTORE PUSH1 0xE0 DUP7 ADD MLOAD SWAP2 POP PUSH2 0x120 PUSH2 0x2148 DUP2 DUP7 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP2 DUP8 ADD MLOAD SWAP3 POP PUSH2 0x1C0 SWAP2 POP PUSH2 0x140 DUP3 DUP2 DUP8 ADD MSTORE PUSH2 0x2169 PUSH2 0x200 DUP8 ADD DUP6 PUSH2 0x206A JUMP JUMPDEST SWAP4 POP DUP2 DUP9 ADD MLOAD SWAP2 POP PUSH1 0x3F NOT PUSH2 0x160 DUP2 DUP9 DUP8 SUB ADD DUP2 DUP10 ADD MSTORE PUSH2 0x218A DUP7 DUP6 PUSH2 0x20AE JUMP JUMPDEST SWAP6 POP DUP3 DUP11 ADD MLOAD SWAP4 POP PUSH2 0x180 SWAP3 POP DUP2 DUP9 DUP8 SUB ADD DUP4 DUP10 ADD MSTORE PUSH2 0x21AA DUP7 DUP6 PUSH2 0x20AE JUMP JUMPDEST SWAP6 POP DUP1 DUP11 ADD MLOAD SWAP4 POP POP PUSH2 0x1A0 DUP2 DUP9 DUP8 SUB ADD DUP2 DUP10 ADD MSTORE PUSH2 0x21C9 DUP7 DUP6 PUSH2 0x20AE JUMP JUMPDEST SWAP6 POP DUP3 DUP11 ADD MLOAD SWAP4 POP PUSH2 0x21DE DUP6 DUP10 ADD DUP6 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST DUP10 ADD MLOAD PUSH2 0x1E0 DUP9 ADD MSTORE POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x20 DUP6 ADD MSTORE POP SWAP1 POP PUSH2 0x1893 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x1EAA JUMPI PUSH2 0x1EAA PUSH2 0x1E7B JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x2226 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1FB3 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1893 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1FD7 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH5 0xA715949568 PUSH9 0xD9B1646F86D724AACB 0x27 0x4B 0x23 ORIGIN 0xBA 0xED GASPRICE 0xB7 0xD2 0xE4 0xDD CODECOPY RETURNDATASIZE ORIGIN 0xDA PUSH23 0x64736F6C63430008110033000000000000000000000000 ","sourceMap":"789:12718:78:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12583:225;;;;;;:::i;:::-;;:::i;:::-;;4558:102;4633:22;;4558:102;;-1:-1:-1;;;;;4633:22:78;;;590:51:181;;578:2;563:18;4558:102:78;;;;;;;;9836:966;;;;;;:::i;:::-;;:::i;12018:183::-;;;;;;:::i;:::-;;:::i;4797:108::-;;;;;;:::i;:::-;4853:4;4872:19;;;:14;:19;;;;;:28;;;;;;4797:108;;;;1351:14:181;;1344:22;1326:41;;1314:2;1299:18;4797:108:78;1186:187:181;12955:140:78;;;;;;:::i;:::-;;:::i;13200:305::-;;;;;;:::i;:::-;;:::i;11628:193::-;;;;;;:::i;:::-;;:::i;10929:129::-;;;;;;:::i;:::-;;:::i;6144:2962::-;;;;;;:::i;:::-;;:::i;9228:480::-;;;;;;:::i;:::-;;:::i;12583:225::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;12696:1:78::1;:19:::0;;;:14:::1;:19;::::0;;;;:46:::1;::::0;12722:7;12731:10;12696:25:::1;:46::i;:::-;12753:50;::::0;;6141:25:181;;;6197:2;6182:18;;6175:34;;;12792:10:78::1;6225:18:181::0;;;6218:60;12753:50:78;;12766:3;;12753:50:::1;::::0;;;;;6129:2:181;12753:50:78;;::::1;12583:225:::0;;;:::o;9836:966::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;9902:23:78::1;9928:20:::0;;;:14:::1;:20;::::0;;;;:33:::1;;:40:::0;;9978:20;;;9974:76:::1;;10007:43;;-1:-1:-1::0;;;10007:43:78::1;;;;;;;;;;;9974:76;10062:1;:20:::0;;;:14:::1;:20;::::0;;;;:29:::1;;::::0;::::1;;10057:87;;10100:44;;-1:-1:-1::0;;;10100:44:78::1;;;;;;;;;;;10057:87;10154:1;:20:::0;;;:14:::1;:20;::::0;;;;:31:::1;;::::0;10188:15:::1;-1:-1:-1::0;10150:106:78::1;;;10212:44;;-1:-1:-1::0;;;10212:44:78::1;;;;;;;;;;;10150:106;10268:9;10263:417;10283:15;10279:1;:19;10263:417;;;10310:18;10331:20:::0;;;:14:::1;:20;::::0;;;;:33:::1;;:36:::0;;10365:1;;10331:36;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;10379:20;;;:14:::1;:20:::0;;;;;;:29:::1;;:32:::0;;-1:-1:-1;;;;;10331:36:78;;::::1;::::0;-1:-1:-1;10379:29:78;10409:1;;10379:32;::::1;;;;;:::i;:::-;;;;;;;;;:36;10375:201;;;10534:1;:20:::0;;;:14:::1;:20;::::0;;;;:29:::1;;:32:::0;;10497:70:::1;::::0;10522:10:::1;::::0;10564:1;;10534:32;::::1;;;;;:::i;:::-;;;;;;;;;10497:11;-1:-1:-1::0;;;;;10497:24:78::1;;;:70;;;;;:::i;:::-;10591:1;:20:::0;;;:14:::1;:20;::::0;;;;;;;-1:-1:-1;;;;;10591:42:78;;::::1;::::0;;;;;;10584:49;;-1:-1:-1;;10584:49:78::1;::::0;;;10662:3:::1;10263:417;;;;10686:36;10705:4;10711:10;10686:18;:36::i;:::-;10736:1;:20:::0;;;:14:::1;:20;::::0;;;;10729:27;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;10729:27:78::1;::::0;;10736:20;10729:27:::1;;::::0;::::1;10736:1:::0;10729:27:::1;:::i;:::-;;;::::0;::::1;;;:::i;:::-;;;::::0;::::1;;;:::i;:::-;;;::::0;::::1;;;:::i;:::-;-1:-1:-1::0;10729:27:78::1;::::0;::::1;::::0;;-1:-1:-1;;10729:27:78::1;::::0;;-1:-1:-1;10729:27:78::1;::::0;;::::1;::::0;10768:29:::1;::::0;10786:10:::1;590:51:181::0;;10780:4:78;;10768:29:::1;::::0;578:2:181;563:18;10768:29:78::1;;;;;;;;9896:906;9836:966:::0;:::o;12018:183::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;12103:1:78::1;:19:::0;;;:14:::1;:19;::::0;;;;:42:::1;::::0;12134:10;12103:30:::1;:42::i;:::-;12156:40;::::0;;6595:25:181;;;12185:10:78::1;6651:2:181::0;6636:18;;6629:60;12168:3:78;;12156:40:::1;::::0;6568:18:181;12156:40:78::1;6421:274:181::0;12955:140:78;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;13019:1:78::1;:19:::0;;;:14:::1;:19;::::0;;;;:31:::1;::::0;:29:::1;:31::i;:::-;13061:29;::::0;13079:10:::1;590:51:181::0;;13074:3:78;;13061:29:::1;::::0;578:2:181;563:18;13061:29:78::1;;;;;;;12955:140:::0;:::o;13200:305::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;-1:-1:-1;;;;;1465:19:57;;;13281:99:78::1;;13325:55;;-1:-1:-1::0;;;13325:55:78::1;;;;;;;;;;;13281:99;13412:22;::::0;13391:68:::1;::::0;;-1:-1:-1;;;;;13412:22:78;;::::1;6940:34:181::0;;7010:15;;;7005:2;6990:18;;6983:43;13448:10:78::1;7042:18:181::0;;;7035:43;13391:68:78;::::1;::::0;;;;6890:2:181;13391:68:78;;::::1;13465:22;:35:::0;;-1:-1:-1;;;;;;13465:35:78::1;-1:-1:-1::0;;;;;13465:35:78;;;::::1;::::0;;;::::1;::::0;;13200:305::o;11628:193::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;11719:1:78::1;:19:::0;;;:14:::1;:19;::::0;;;;:44:::1;::::0;11751:11;11719:31:::1;:44::i;:::-;11774:42;::::0;;6595:25:181;;;11805:10:78::1;6651:2:181::0;6636:18;;6629:60;11787:3:78;;11774:42:::1;::::0;6568:18:181;11774:42:78::1;6421:274:181::0;10929:129:78;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;1556:9:::1;::::0;-1:-1:-1;;1556:30:68;1552:89:::1;;1595:46;;-1:-1:-1::0;;;1595:46:68::1;;;;;;;;;;;1552:89;808:1:104;1708:9:68;:29:::0;11018:35:78::2;11037:3:::0;11042:10:::2;11018:18;:35::i;:::-;-1:-1:-1::0;709:1:104::1;1876:9:68;:33:::0;10929:129:78:o;6144:2962::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;6411:1:78::1;:20:::0;;;:14:::1;:20;::::0;;;;:33:::1;;:40:::0;:45;6407:109:::1;;6465:51;;-1:-1:-1::0;;;6465:51:78::1;;;;;;;;;;;6407:109;2859:1:104;6586:13:78;:20;:54;:112;;;;2912:2:104;6644:13:78;:20;:54;6586:112;6575:204;;;6720:52;;-1:-1:-1::0;;;6720:52:78::1;;;;;;;;;;;6575:204;6811:20:::0;;6861:15;;6842:34;::::1;6838:96;;6885:49;;-1:-1:-1::0;;;6885:49:78::1;;;;;;;;;;;6838:96;6941:37;6995:8;:15;6981:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;6981:30:78::1;;6941:70;;7023:9;7018:863;7038:15;7034:1;:19;7018:863;;;7069:6:::0;;7065:274:::1;;7171:1;:20:::0;;;:14:::1;:20;::::0;;;;7200:16;;7171:20;;:1;7200:13;;7214:1;;7200:16;::::1;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;7171:47:78::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;7171:47:78;;::::1;;:52:::0;::::1;::::0;:92:::1;;;7247:13;7261:1;7247:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;7227:36:78::1;:13;7241:1;7227:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;7227:36:78::1;;7171:92;7167:163;;;7282:48;;-1:-1:-1::0;;;7282:48:78::1;;;;;;;;;;;7167:163;7387:1;-1:-1:-1::0;;;;;7350:39:78::1;7358:13;7372:1;7358:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;7350:39:78::1;::::0;7346:101:::1;;7398:49;;-1:-1:-1::0;;;7398:49:78::1;;;;;;;;;;;7346:101;3133:2:104;7460:47:78;;:8;7469:1;7460:11;;;;;;;;:::i;:::-;;;;;;;:47;;;7456:123;;;7524:55;;-1:-1:-1::0;;;7524:55:78::1;;;;;;;;;;;7456:123;7662:8;7671:1;7662:11;;;;;;;;:::i;:::-;;;;;;;3133:2:104;7626:47:78;;;;:::i;:::-;7614:60;::::0;7618:56:::1;;7614:2;:60;:::i;:::-;7588:20;7609:1;7588:23;;;;;;;;:::i;:::-;;;;;;:86;;;::::0;::::1;7832:1;7776;:14;;:20;7791:4;7776:20;;;;;;;;;;;:47;7805:13;7819:1;7805:16;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;7776:47:78::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;7776:47:78;:58;;-1:-1:-1;;7776:58:78::1;;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;7863:3:78::1;7018:863;;;-1:-1:-1::0;7954:19:78::1;7972:1;4605:5:104;7954:19:78;:::i;:::-;7949:2;:24;7945:80;;;7982:43;;-1:-1:-1::0;;;7982:43:78::1;;;;;;;;;;;7945:80;8042:26;8067:1;3647:3:104;8042:26:78;:::i;:::-;8035:4;:33;8031:91;;;8077:45;;-1:-1:-1::0;;;8077:45:78::1;;;;;;;;;;;8031:91;8144:27;8170:1;4029:4:104;8144:27:78;:::i;:::-;8132:9;:39;8128:102;;;8180:50;;-1:-1:-1::0;;;8180:50:78::1;;;;;;;;;;;8128:102;8313:22;::::0;8274:15:::1;::::0;8300:36:::1;::::0;-1:-1:-1;;;;;8313:22:78::1;8300:12;:36::i;:::-;8348:46;::::0;-1:-1:-1;;;8348:46:78;;8274:63;;-1:-1:-1;;;;;;8348:18:78;::::1;::::0;::::1;::::0;:46:::1;::::0;8367:11;;8380:13;;8348:46:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8343:115;;8403:55;;-1:-1:-1::0;;;8403:55:78::1;;;;;;;;;;;8343:115;8502:27;8532:484;;;;;;;;8560:4;8532:484;;;;4566:3:104;8582:2:78;:26;;;;:::i;:::-;8532:484:::0;;::::1;;8625:26;4566:3:104;8625:2:78::0;:26:::1;:::i;:::-;8532:484;;;;8942:1;8532:484;;;;8964:1;8532:484;;;;8668:4;8532:484;;;;8690:9;8532:484;;;;8716:7;-1:-1:-1::0;;;;;8532:484:78::1;;;;;8745:13;8532:484;;;;8793:20;8532:484;;;;8845:13;:20;8831:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;8831:35:78::1;;8532:484;;;;8899:13;:20;8885:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;8885:35:78::1;-1:-1:-1::0;8532:484:78;;8983:5:::1;8532:484;::::0;;::::1;::::0;;;;;;;;;;9022:20;;;:14:::1;:20:::0;;;;;;:28;;;;;;::::1;::::0;8532:484;9022:28;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;9022:28:78::1;-1:-1:-1::0;;;;;9022:28:78;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;9022:28:78;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;9022:28:78::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;9022:28:78::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;9022:28:78::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;9022:28:78::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;9022:28:78::1;::::0;::::1;;::::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;9061:40:::1;::::0;9077:4;;9061:40:::1;::::0;::::1;::::0;9083:5;;9090:10:::1;::::0;9061:40:::1;:::i;:::-;;;;;;;;6401:2705;;;;6144:2962:::0;;;;;;;;:::o;9228:480::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;9295:23:78::1;9321:20:::0;;;:14:::1;:20;::::0;;;;:33:::1;;:40:::0;;9372:20;;;9368:77:::1;;9401:44;;-1:-1:-1::0;;;9401:44:78::1;;;;;;;;;;;9368:77;9455:1;:20:::0;;;:14:::1;:20;::::0;;;;:29:::1;;::::0;::::1;;9451:87;;;9493:45;;-1:-1:-1::0;;;9493:45:78::1;;;;;;;;;;;9451:87;9545:1;:20:::0;;;:14:::1;:20;::::0;;;;:29:::1;;:36:::0;;-1:-1:-1;;9545:36:78::1;9577:4;9545:36;::::0;;9621:40:::1;4356:6:104;9621:15:78;:40;:::i;:::-;9587:1;:20:::0;;;:14:::1;:20;::::0;;;;;;;;:31:::1;;:74:::0;;;;9673:30;9692:10:::1;590:51:181::0;;9587:20:78;;9673:30:::1;::::0;563:18:181;9673:30:78::1;444:203:181::0;2273:130:106;2368:30;;-1:-1:-1;;;;;2368:30:106;;2273:130::o;2301:1088:101:-;4750:6:104;2442:4:101;:17;;;:44;;;;:::i;:::-;2423:15;:63;;2415:107;;;;-1:-1:-1;;;2415:107:101;;13480:2:181;2415:107:101;;;13462:21:181;13519:2;13499:18;;;13492:30;13558:33;13538:18;;;13531:61;13609:18;;2415:107:101;;;;;;;;;2551:41;4698:7:104;2551:15:101;:41;:::i;:::-;2536:11;:56;;2528:91;;;;-1:-1:-1;;;2528:91:101;;13840:2:181;2528:91:101;;;13822:21:181;13879:2;13859:18;;;13852:30;-1:-1:-1;;;13898:18:181;;;13891:52;13960:18;;2528:91:101;13638:346:181;2528:91:101;2633:13;;;;;:43;;;4605:5:104;2650:8:101;:26;2633:43;2625:88;;;;-1:-1:-1;;;2625:88:101;;14191:2:181;2625:88:101;;;14173:21:181;;;14210:18;;;14203:30;14269:34;14249:18;;;14242:62;14321:18;;2625:88:101;13989:356:181;2625:88:101;2720:23;2746:18;2759:4;2746:12;:18::i;:::-;2720:44;-1:-1:-1;2770:22:101;2795:32;4566:3:104;2795:8:101;:32;:::i;:::-;2770:57;;2860:14;2841:15;:33;2833:57;;;;-1:-1:-1;;;2833:57:101;;14552:2:181;2833:57:101;;;14534:21:181;14591:2;14571:18;;;14564:30;-1:-1:-1;;;14610:18:181;;;14603:41;14661:18;;2833:57:101;14350:335:181;2833:57:101;2918:15;2901:14;:32;2897:258;;;2994:15;2951:39;4653:1:104;2951:14:101;:39;:::i;:::-;:58;;2943:92;;;;-1:-1:-1;;;2943:92:101;;14892:2:181;2943:92:101;;;14874:21:181;14931:2;14911:18;;;14904:30;-1:-1:-1;;;14950:18:181;;;14943:51;15011:18;;2943:92:101;14690:345:181;2943:92:101;2897:258;;;3082:40;4653:1:104;3082:15:101;:40;:::i;:::-;3064:14;:58;;3056:92;;;;-1:-1:-1;;;3056:92:101;;15242:2:181;3056:92:101;;;15224:21:181;15281:2;15261:18;;;15254:30;-1:-1:-1;;;15300:18:181;;;15293:51;15361:18;;3056:92:101;15040:345:181;3056:92:101;3161:13;;;:31;;;3198:12;;;:29;;;3253:15;3233:17;;;:35;;;3274:16;;;:30;;;3316:68;;;15621:25:181;;;15677:2;15662:18;;15655:34;;;15705:18;;;15698:34;;;;15763:2;15748:18;;15741:34;;;3316:68:101;;;;;;15608:3:181;3316:68:101;;;2409:980;;2301:1088;;;:::o;763:205:56:-;902:58;;;-1:-1:-1;;;;;15978:32:181;;902:58:56;;;15960:51:181;16027:18;;;;16020:34;;;902:58:56;;;;;;;;;;15933:18:181;;;;902:58:56;;;;;;;;-1:-1:-1;;;;;902:58:56;-1:-1:-1;;;902:58:56;;;875:86;;895:5;;875:19;:86::i;:::-;763:205;;;:::o;11251:158:78:-;11321:1;:20;;;:14;:20;;;;;:43;;11360:3;11321:38;:43::i;:::-;11375:29;;-1:-1:-1;;;;;608:32:181;;590:51;;11394:4:78;;11375:29;;578:2:181;563:18;11375:29:78;444:203:181;38817:214:108;38912:26;3647:3:104;38937:1:108;38912:26;:::i;:::-;38899:10;:39;38891:60;;;;-1:-1:-1;;;38891:60:108;;16267:2:181;38891:60:108;;;16249:21:181;16306:1;16286:18;;;16279:29;-1:-1:-1;;;16324:18:181;;;16317:38;16372:18;;38891:60:108;16065:331:181;38891:60:108;38957:12;;;:25;;;39005:8;;38994:32;;16547:25:181;;;38994:32:108;;16535:2:181;16520:18;38994:32:108;16401:177:181;3567:370:101;3657:15;3638:4;:16;;;:34;3630:70;;;;-1:-1:-1;;;3630:70:101;;16785:2:181;3630:70:101;;;16767:21:181;16824:2;16804:18;;;16797:30;16863:25;16843:18;;;16836:53;16906:18;;3630:70:101;16583:347:181;3630:70:101;3707:16;3726:18;3739:4;3726:12;:18::i;:::-;3750:13;;;:24;;;3780:12;;;:23;;;3829:15;3809:17;;;:35;;;3850:16;;;:34;;;3896:36;;3707:37;;-1:-1:-1;3896:36:101;;;;3707:37;17109:25:181;;17165:2;17150:18;;17143:34;17097:2;17082:18;;16935:248;3896:36:101;;;;;;;;3624:313;3567:370;:::o;38382:222:108:-;38480:27;4029:4:104;38506:1:108;38480:27;:::i;:::-;38466:11;:41;38458:62;;;;-1:-1:-1;;;38458:62:108;;16267:2:181;38458:62:108;;;16249:21:181;16306:1;16286:18;;;16279:29;-1:-1:-1;;;16324:18:181;;;16317:38;16372:18;;38458:62:108;16065:331:181;38458:62:108;38526:13;;;:27;;;38577:8;;38565:34;;16547:25:181;;;38565:34:108;;16535:2:181;16520:18;38565:34:108;16401:177:181;973:759:44;1030:16;1362:48;1344:14;1338:4;1334:25;1328:4;1324:36;1321:90;1315:4;1308:104;1569:32;1552:14;1546:4;1542:25;1539:63;1533:4;1526:77;1644:4;1638;1635:1;1628:21;1616:33;-1:-1:-1;;;;;;1676:22:44;;1668:57;;;;-1:-1:-1;;;1668:57:44;;17390:2:181;1668:57:44;;;17372:21:181;17429:2;17409:18;;;17402:30;-1:-1:-1;;;17448:18:181;;;17441:52;17510:18;;1668:57:44;17188:346:181;1668:57:44;973:759;;;:::o;1367:561:101:-;1478:16;;;;1541:12;;;;1611:13;;;;1541:12;;1478:16;1675:14;;;;;;:38;;;1711:2;1693:15;:20;1675:38;1671:253;;;1723:10;1736:4;:17;;;1723:30;;1906:2;1902;1898:11;1891:2;1878:11;1874:20;1864:8;1860:35;1845:11;1841:2;1837:20;1833:2;1829:29;1825:71;1821:89;1809:101;;1799:119;1671:253;1459:469;;1367:561;;;:::o;3747:706:56:-;4166:23;4192:69;4220:4;4192:69;;;;;;;;;;;;;;;;;4200:5;-1:-1:-1;;;;;4192:27:56;;;:69;;;;;:::i;:::-;4275:17;;4166:95;;-1:-1:-1;4275:21:56;4271:176;;4370:10;4359:30;;;;;;;;;;;;:::i;:::-;4351:85;;;;-1:-1:-1;;;4351:85:56;;17741:2:181;4351:85:56;;;17723:21:181;17780:2;17760:18;;;17753:30;17819:34;17799:18;;;17792:62;-1:-1:-1;;;17870:18:181;;;17863:40;17920:19;;4351:85:56;17539:406:181;37728:430:108;37821:17;;;:24;37801:17;37851:303;37871:9;37867:1;:13;37851:303;;;37892:12;37907:4;:17;;37925:1;37907:20;;;;;;;;:::i;:::-;;;;;;;;;;37953:14;;;:17;;-1:-1:-1;;;;;37907:20:108;;;;-1:-1:-1;37953:14:108;37968:1;;37953:17;;;;;;:::i;:::-;;;;;;;;;37935:35;;37982:7;37993:1;37982:12;37978:130;;38013:4;:14;;38028:1;38013:17;;;;;;;;:::i;:::-;;;;;;;;;38006:24;38040:59;38079:5;38087:2;38091:7;38040:30;:59::i;:::-;-1:-1:-1;;38136:3:108;;37851:303;;;;37795:363;37728:430;;:::o;3873:223:57:-;4006:12;4037:52;4059:6;4067:4;4073:1;4076:12;4037:21;:52::i;:::-;4030:59;;3873:223;;;;;;:::o;3194:444:102:-;3353:7;3364:1;3353:12;3349:39;;3194:444;;;:::o;3349:39::-;-1:-1:-1;;;;;3445:20:102;;3441:76;;3474:43;;-1:-1:-1;;;3474:43:102;;;;;;;;;;;3441:76;3573:60;3611:6;3620:3;3625:7;3573:22;:60::i;4960:446:57:-;5125:12;5182:5;5157:21;:30;;5149:81;;;;-1:-1:-1;;;5149:81:57;;18152:2:181;5149:81:57;;;18134:21:181;18191:2;18171:18;;;18164:30;18230:34;18210:18;;;18203:62;-1:-1:-1;;;18281:18:181;;;18274:36;18327:19;;5149:81:57;17950:402:181;5149:81:57;5241:12;5255:23;5282:6;-1:-1:-1;;;;;5282:11:57;5301:5;5308:4;5282:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5240:73;;;;5330:69;5357:6;5365:7;5374:10;5386:12;5330:26;:69::i;:::-;5323:76;;;;4960:446;;;;;;;:::o;7466:628::-;7646:12;7674:7;7670:418;;;7701:10;:17;7722:1;7701:22;7697:286;;-1:-1:-1;;;;;1465:19:57;;;7908:60;;;;-1:-1:-1;;;7908:60:57;;18851:2:181;7908:60:57;;;18833:21:181;18890:2;18870:18;;;18863:30;18929:31;18909:18;;;18902:59;18978:18;;7908:60:57;18649:353:181;7908:60:57;-1:-1:-1;8003:10:57;7996:17;;7670:418;8044:33;8052:10;8064:12;8775:17;;:21;8771:379;;9003:10;8997:17;9059:15;9046:10;9042:2;9038:19;9031:44;8771:379;9126:12;9119:20;;-1:-1:-1;;;9119:20:57;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:316:181;91:6;99;107;160:2;148:9;139:7;135:23;131:32;128:52;;;176:1;173;166:12;128:52;-1:-1:-1;;199:23:181;;;269:2;254:18;;241:32;;-1:-1:-1;320:2:181;305:18;;;292:32;;14:316;-1:-1:-1;14:316:181:o;652:180::-;711:6;764:2;752:9;743:7;739:23;735:32;732:52;;;780:1;777;770:12;732:52;-1:-1:-1;803:23:181;;652:180;-1:-1:-1;652:180:181:o;837:248::-;905:6;913;966:2;954:9;945:7;941:23;937:32;934:52;;;982:1;979;972:12;934:52;-1:-1:-1;;1005:23:181;;;1075:2;1060:18;;;1047:32;;-1:-1:-1;837:248:181:o;1378:131::-;-1:-1:-1;;;;;1453:31:181;;1443:42;;1433:70;;1499:1;1496;1489:12;1514:247;1573:6;1626:2;1614:9;1605:7;1601:23;1597:32;1594:52;;;1642:1;1639;1632:12;1594:52;1681:9;1668:23;1700:31;1725:5;1700:31;:::i;1766:127::-;1827:10;1822:3;1818:20;1815:1;1808:31;1858:4;1855:1;1848:15;1882:4;1879:1;1872:15;1898:275;1969:2;1963:9;2034:2;2015:13;;-1:-1:-1;;2011:27:181;1999:40;;2069:18;2054:34;;2090:22;;;2051:62;2048:88;;;2116:18;;:::i;:::-;2152:2;2145:22;1898:275;;-1:-1:-1;1898:275:181:o;2178:191::-;2246:4;2279:18;2271:6;2268:30;2265:56;;;2301:18;;:::i;:::-;-1:-1:-1;2346:1:181;2342:14;2358:4;2338:25;;2178:191::o;2374:753::-;2436:5;2489:3;2482:4;2474:6;2470:17;2466:27;2456:55;;2507:1;2504;2497:12;2456:55;2543:6;2530:20;2569:4;2593:68;2609:51;2657:2;2609:51;:::i;:::-;2593:68;:::i;:::-;2695:15;;;2781:1;2777:10;;;;2765:23;;2761:32;;;2726:12;;;;2805:15;;;2802:35;;;2833:1;2830;2823:12;2802:35;2869:2;2861:6;2857:15;2881:217;2897:6;2892:3;2889:15;2881:217;;;2977:3;2964:17;2994:31;3019:5;2994:31;:::i;:::-;3038:18;;3076:12;;;;2914;;2881:217;;;-1:-1:-1;3116:5:181;2374:753;-1:-1:-1;;;;;;2374:753:181:o;3132:837::-;3184:5;3237:3;3230:4;3222:6;3218:17;3214:27;3204:55;;3255:1;3252;3245:12;3204:55;3291:6;3278:20;3317:4;3341:68;3357:51;3405:2;3357:51;:::i;3341:68::-;3443:15;;;3529:1;3525:10;;;;3513:23;;3509:32;;;3474:12;;;;3553:15;;;3550:35;;;3581:1;3578;3571:12;3550:35;3617:2;3609:6;3605:15;3629:311;3645:6;3640:3;3637:15;3629:311;;;3725:3;3712:17;3773:4;3766:5;3762:16;3755:5;3752:27;3742:125;;3821:1;3850:2;3846;3839:14;3742:125;3880:18;;3918:12;;;;3662;;3629:311;;3974:531;4017:5;4070:3;4063:4;4055:6;4051:17;4047:27;4037:55;;4088:1;4085;4078:12;4037:55;4124:6;4111:20;4150:18;4146:2;4143:26;4140:52;;;4172:18;;:::i;:::-;4216:55;4259:2;4240:13;;-1:-1:-1;;4236:27:181;4265:4;4232:38;4216:55;:::i;:::-;4296:2;4287:7;4280:19;4342:3;4335:4;4330:2;4322:6;4318:15;4314:26;4311:35;4308:55;;;4359:1;4356;4349:12;4308:55;4424:2;4417:4;4409:6;4405:17;4398:4;4389:7;4385:18;4372:55;4472:1;4447:16;;;4465:4;4443:27;4436:38;;;;4451:7;3974:531;-1:-1:-1;;;3974:531:181:o;4510:1292::-;4716:6;4724;4732;4740;4748;4756;4764;4772;4825:3;4813:9;4804:7;4800:23;4796:33;4793:53;;;4842:1;4839;4832:12;4793:53;4878:9;4865:23;4855:33;;4939:2;4928:9;4924:18;4911:32;4962:18;5003:2;4995:6;4992:14;4989:34;;;5019:1;5016;5009:12;4989:34;5042:69;5103:7;5094:6;5083:9;5079:22;5042:69;:::i;:::-;5032:79;;5164:2;5153:9;5149:18;5136:32;5120:48;;5193:2;5183:8;5180:16;5177:36;;;5209:1;5206;5199:12;5177:36;5232:61;5285:7;5274:8;5263:9;5259:24;5232:61;:::i;:::-;5222:71;;5346:2;5335:9;5331:18;5318:32;5302:48;;5375:2;5365:8;5362:16;5359:36;;;5391:1;5388;5381:12;5359:36;5414:52;5458:7;5447:8;5436:9;5432:24;5414:52;:::i;:::-;5404:62;;5519:3;5508:9;5504:19;5491:33;5475:49;;5549:2;5539:8;5536:16;5533:36;;;5565:1;5562;5555:12;5533:36;;5588:52;5632:7;5621:8;5610:9;5606:24;5588:52;:::i;:::-;4510:1292;;;;-1:-1:-1;4510:1292:181;;;;5578:62;5687:3;5672:19;;5659:33;;-1:-1:-1;5739:3:181;5724:19;;5711:33;;5791:3;5776:19;5763:33;;-1:-1:-1;4510:1292:181;-1:-1:-1;;;4510:1292:181:o;5807:127::-;5868:10;5863:3;5859:20;5856:1;5849:31;5899:4;5896:1;5889:15;5923:4;5920:1;5913:15;6289:127;6350:10;6345:3;6341:20;6338:1;6331:31;6381:4;6378:1;6371:15;6405:4;6402:1;6395:15;7089:127;7150:10;7145:3;7141:20;7138:1;7131:31;7181:4;7178:1;7171:15;7205:4;7202:1;7195:15;7221:151;7311:4;7304:12;;;7290;;;7286:31;;7329:14;;7326:40;;;7346:18;;:::i;:::-;7221:151;;;;:::o;7377:422::-;7466:1;7509:5;7466:1;7523:270;7544:7;7534:8;7531:21;7523:270;;;7603:4;7599:1;7595:6;7591:17;7585:4;7582:27;7579:53;;;7612:18;;:::i;:::-;7662:7;7652:8;7648:22;7645:55;;;7682:16;;;;7645:55;7761:22;;;;7721:15;;;;7523:270;;;7527:3;7377:422;;;;;:::o;7804:806::-;7853:5;7883:8;7873:80;;-1:-1:-1;7924:1:181;7938:5;;7873:80;7972:4;7962:76;;-1:-1:-1;8009:1:181;8023:5;;7962:76;8054:4;8072:1;8067:59;;;;8140:1;8135:130;;;;8047:218;;8067:59;8097:1;8088:10;;8111:5;;;8135:130;8172:3;8162:8;8159:17;8156:43;;;8179:18;;:::i;:::-;-1:-1:-1;;8235:1:181;8221:16;;8250:5;;8047:218;;8349:2;8339:8;8336:16;8330:3;8324:4;8321:13;8317:36;8311:2;8301:8;8298:16;8293:2;8287:4;8284:12;8280:35;8277:77;8274:159;;;-1:-1:-1;8386:19:181;;;8418:5;;8274:159;8465:34;8490:8;8484:4;8465:34;:::i;:::-;8535:6;8531:1;8527:6;8523:19;8514:7;8511:32;8508:58;;;8546:18;;:::i;:::-;8584:20;;7804:806;-1:-1:-1;;;7804:806:181:o;8615:131::-;8675:5;8704:36;8731:8;8725:4;8704:36;:::i;8751:128::-;8818:9;;;8839:11;;;8836:37;;;8853:18;;:::i;8884:250::-;8969:1;8979:113;8993:6;8990:1;8987:13;8979:113;;;9069:11;;;9063:18;9050:11;;;9043:39;9015:2;9008:10;8979:113;;;-1:-1:-1;;9126:1:181;9108:16;;9101:27;8884:250::o;9139:271::-;9181:3;9219:5;9213:12;9246:6;9241:3;9234:19;9262:76;9331:6;9324:4;9319:3;9315:14;9308:4;9301:5;9297:16;9262:76;:::i;:::-;9392:2;9371:15;-1:-1:-1;;9367:29:181;9358:39;;;;9399:4;9354:50;;9139:271;-1:-1:-1;;9139:271:181:o;9415:383::-;9612:2;9601:9;9594:21;9575:4;9638:45;9679:2;9668:9;9664:18;9656:6;9638:45;:::i;:::-;9731:9;9723:6;9719:22;9714:2;9703:9;9699:18;9692:50;9759:33;9785:6;9777;9759:33;:::i;:::-;9751:41;9415:383;-1:-1:-1;;;;;9415:383:181:o;9803:277::-;9870:6;9923:2;9911:9;9902:7;9898:23;9894:32;9891:52;;;9939:1;9936;9929:12;9891:52;9971:9;9965:16;10024:5;10017:13;10010:21;10003:5;10000:32;9990:60;;10046:1;10043;10036:12;10085:168;10158:9;;;10189;;10206:15;;;10200:22;;10186:37;10176:71;;10227:18;;:::i;10258:469::-;10319:3;10357:5;10351:12;10384:6;10379:3;10372:19;10410:4;10439:2;10434:3;10430:12;10423:19;;10476:2;10469:5;10465:14;10497:1;10507:195;10521:6;10518:1;10515:13;10507:195;;;10586:13;;-1:-1:-1;;;;;10582:39:181;10570:52;;10642:12;;;;10677:15;;;;10618:1;10536:9;10507:195;;;-1:-1:-1;10718:3:181;;10258:469;-1:-1:-1;;;;;10258:469:181:o;10732:435::-;10785:3;10823:5;10817:12;10850:6;10845:3;10838:19;10876:4;10905:2;10900:3;10896:12;10889:19;;10942:2;10935:5;10931:14;10963:1;10973:169;10987:6;10984:1;10981:13;10973:169;;;11048:13;;11036:26;;11082:12;;;;11117:15;;;;11009:1;11002:9;10973:169;;11172:1971;11375:2;11364:9;11357:21;11420:6;11414:13;11409:2;11398:9;11394:18;11387:41;11482:4;11474:6;11470:17;11464:24;11459:2;11448:9;11444:18;11437:52;11544:2;11536:6;11532:15;11526:22;11520:3;11509:9;11505:19;11498:51;11604:2;11596:6;11592:15;11586:22;11580:3;11569:9;11565:19;11558:51;11664:3;11656:6;11652:16;11646:23;11640:3;11629:9;11625:19;11618:52;11725:3;11717:6;11713:16;11707:23;11701:3;11690:9;11686:19;11679:52;11338:4;11768:3;11760:6;11756:16;11750:23;11792:3;11831:2;11826;11815:9;11811:18;11804:30;11881:3;11873:6;11869:16;11863:23;11843:43;;11905:3;11917:52;11965:2;11954:9;11950:18;11936:12;-1:-1:-1;;;;;401:31:181;389:44;;335:104;11917:52;12018:2;12010:6;12006:15;12000:22;11978:44;;12041:6;12031:16;;12066:3;12105:2;12100;12089:9;12085:18;12078:30;12131:73;12199:3;12188:9;12184:19;12168:14;12131:73;:::i;:::-;12117:87;;12253:2;12245:6;12241:15;12235:22;12213:44;;12280:2;12276:7;12302:3;12369:2;12357:9;12349:6;12345:22;12341:31;12336:2;12325:9;12321:18;12314:59;12396:52;12441:6;12425:14;12396:52;:::i;:::-;12382:66;;12497:2;12489:6;12485:15;12479:22;12457:44;;12520:3;12510:13;;12587:2;12575:9;12567:6;12563:22;12559:31;12554:2;12543:9;12539:18;12532:59;12614:52;12659:6;12643:14;12614:52;:::i;:::-;12600:66;;12715:2;12707:6;12703:15;12697:22;12675:44;;;12738:3;12805:2;12793:9;12785:6;12781:22;12777:31;12772:2;12761:9;12757:18;12750:59;12832:52;12877:6;12861:14;12832:52;:::i;:::-;12818:66;;12933:2;12925:6;12921:15;12915:22;12893:44;;12946:51;12993:2;12982:9;12978:18;12962:14;1160:13;1153:21;1141:34;;1090:91;12946:51;13040:15;;13034:22;13028:3;13013:19;;13006:51;-1:-1:-1;;;;;;;;401:31:181;;13131:4;13116:20;;389:44;-1:-1:-1;13074:6:181;-1:-1:-1;13089:48:181;335:104;13148:125;13213:9;;;13234:10;;;13231:36;;;13247:18;;:::i;18357:287::-;18486:3;18524:6;18518:13;18540:66;18599:6;18594:3;18587:4;18579:6;18575:17;18540:66;:::i;:::-;18622:16;;;;;18357:287;-1:-1:-1;;18357:287:181:o;19007:220::-;19156:2;19145:9;19138:21;19119:4;19176:45;19217:2;19206:9;19202:18;19194:6;19176:45;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"1765000","executionCost":"1855","totalCost":"1766855"},"external":{"disableSwap(bytes32)":"57168","initializeSwap(bytes32,address[],uint8[],string,string,uint256,uint256,uint256)":"infinite","isDisabled(bytes32)":"2545","lpTokenTargetAddress()":"2313","rampA(bytes32,uint256,uint256)":"infinite","removeSwap(bytes32)":"infinite","setSwapAdminFee(bytes32,uint256)":"infinite","setSwapFee(bytes32,uint256)":"infinite","stopRampA(bytes32)":"106733","updateLpTokenTarget(address)":"35381","withdrawSwapAdminFees(bytes32)":"infinite"},"internal":{"_withdrawAdminFees(bytes32,address)":"infinite"}},"methodIdentifiers":{"disableSwap(bytes32)":"ea027c2f","initializeSwap(bytes32,address[],uint8[],string,string,uint256,uint256,uint256)":"e5f6220f","isDisabled(bytes32)":"4b141bb4","lpTokenTargetAddress()":"2bf63bcc","rampA(bytes32,uint256,uint256)":"1963e426","removeSwap(bytes32)":"3e74aea0","setSwapAdminFee(bytes32,uint256)":"9c8eab97","setSwapFee(bytes32,uint256)":"43be5eaf","stopRampA(bytes32)":"72a30e08","updateLpTokenTarget(address)":"8dc51484","withdrawSwapAdminFees(bytes32)":"a1a23c29"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AssetLogic__handleOutgoingAsset_notNative\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__disableSwap_alreadyDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__disableSwap_notInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_aExceedMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_adminFeeExceedMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_alreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_decimalsMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_duplicateTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_failedInitLpTokenClone\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_feeExceedMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_invalidPooledTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_zeroTokenAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__removeSwap_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__removeSwap_notDisabledPool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__removeSwap_notInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__updateLpTokenTarget_invalidNewAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newAdminFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AdminFeesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AdminFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"LPTokenTargetUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"futureA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"futureTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RampAStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RampAStopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SwapDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSwapFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SwapFeesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"initialA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialATime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureATime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"adminFee\",\"type\":\"uint256\"},{\"internalType\":\"contract LPToken\",\"name\":\"lpToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"pooledTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenPrecisionMultipliers\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"adminFees\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"disabled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"removeTime\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct SwapUtils.Swap\",\"name\":\"swap\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SwapInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SwapRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"disableSwap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"_pooledTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint8[]\",\"name\":\"decimals\",\"type\":\"uint8[]\"},{\"internalType\":\"string\",\"name\":\"lpTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"lpTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_adminFee\",\"type\":\"uint256\"}],\"name\":\"initializeSwap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lpTokenTargetAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"futureA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureTime\",\"type\":\"uint256\"}],\"name\":\"rampA\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"removeSwap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newAdminFee\",\"type\":\"uint256\"}],\"name\":\"setSwapAdminFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newSwapFee\",\"type\":\"uint256\"}],\"name\":\"setSwapFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"stopRampA\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"updateLpTokenTarget\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"withdrawSwapAdminFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"events\":{\"AdminFeesSet(bytes32,uint256,address)\":{\"params\":{\"caller\":\"- The caller of the function\",\"key\":\"- Identifier for asset\",\"newAdminFee\":\"- The updated fee\"}},\"AdminFeesWithdrawn(bytes32,address)\":{\"params\":{\"caller\":\"- The caller of the function\",\"key\":\"- Identifier for asset\"}},\"LPTokenTargetUpdated(address,address,address)\":{\"params\":{\"caller\":\"- The caller of the function\",\"newAddress\":\"- Updated address\",\"oldAddress\":\"- The old lpTokenTargetAddress\"}},\"RampAStarted(bytes32,uint256,uint256,address)\":{\"params\":{\"caller\":\"- The caller of the function\",\"futureA\":\"- The final A value after ramp\",\"futureTime\":\"- The time A should reach the final value\",\"key\":\"- Identifier for asset\"}},\"RampAStopped(bytes32,address)\":{\"params\":{\"caller\":\"- The caller of the function\",\"key\":\"- Identifier for asset\"}},\"SwapDisabled(bytes32,address)\":{\"params\":{\"caller\":\"- The caller of the function\",\"key\":\"- Identifier for asset\"}},\"SwapFeesSet(bytes32,uint256,address)\":{\"params\":{\"caller\":\"- The caller of the function\",\"key\":\"- Identifier for asset\",\"newSwapFee\":\"- The updated fee\"}},\"SwapInitialized(bytes32,(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,address,address[],uint256[],uint256[],uint256[],bool,uint256),address)\":{\"params\":{\"caller\":\"- The caller of the function\",\"key\":\"- Identifier for asset\",\"swap\":\"- The swap that was initialized\"}},\"SwapRemoved(bytes32,address)\":{\"params\":{\"caller\":\"- The caller of the function\",\"key\":\"- Identifier for asset\"}}},\"kind\":\"dev\",\"methods\":{\"disableSwap(bytes32)\":{\"params\":{\"_key\":\"the hash of the canonical id and domain for token\"}},\"initializeSwap(bytes32,address[],uint8[],string,string,uint256,uint256,uint256)\":{\"details\":\"The swap can only be updated after initialization via `rampA`. This means if this value is incorrectly set, it will take some time to reach the correct value.\",\"params\":{\"_a\":\"the amplification coefficient * n ** (n - 1). See the StableSwap paper for details\",\"_adminFee\":\"default adminFee to be initialized with\",\"_fee\":\"default swap fee to be initialized with\",\"_key\":\"the hash of the canonical id and domain for token\",\"_pooledTokens\":\"an array of ERC20s this pool will accept. length of this array should be in 2 ~ 16\",\"decimals\":\"the decimals to use for each pooled token, eg 8 for WBTC. Cannot be larger than POOL_PRECISION_DECIMALS(18) Only fixed decimal tokens are allowed.\",\"lpTokenName\":\"the long-form name of the token to be deployed\",\"lpTokenSymbol\":\"the short symbol for the token to be deployed\"}},\"isDisabled(bytes32)\":{\"params\":{\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"disabled flag\"}},\"lpTokenTargetAddress()\":{\"returns\":{\"_0\":\"address\"}},\"rampA(bytes32,uint256,uint256)\":{\"params\":{\"futureA\":\"the new A to ramp towards\",\"futureTime\":\"timestamp when the new A should be reached\",\"key\":\"Hash of the canonical domain and id\"}},\"removeSwap(bytes32)\":{\"params\":{\"_key\":\"the hash of the canonical id and domain for token\"}},\"setSwapAdminFee(bytes32,uint256)\":{\"params\":{\"key\":\"Hash of the canonical domain and id\",\"newAdminFee\":\"new admin fee to be applied on future transactions\"}},\"setSwapFee(bytes32,uint256)\":{\"params\":{\"key\":\"Hash of the canonical domain and id\",\"newSwapFee\":\"new swap fee to be applied on future transactions\"}},\"stopRampA(bytes32)\":{\"params\":{\"key\":\"Hash of the canonical domain and id\"}},\"updateLpTokenTarget(address)\":{\"params\":{\"newAddress\":\"New lpTokenTargetAddress\"}},\"withdrawSwapAdminFees(bytes32)\":{\"params\":{\"key\":\"Hash of the canonical domain and id\"}}},\"title\":\"SwapAdminFacet\",\"version\":1},\"userdoc\":{\"events\":{\"AdminFeesSet(bytes32,uint256,address)\":{\"notice\":\"Emitted when the owner sets admin fees\"},\"AdminFeesWithdrawn(bytes32,address)\":{\"notice\":\"Emitted when the owner withdraws admin fees\"},\"LPTokenTargetUpdated(address,address,address)\":{\"notice\":\"Emitted when the owner update lpTokenTargetAddress\"},\"RampAStarted(bytes32,uint256,uint256,address)\":{\"notice\":\"Emitted when the owner starts ramping up or down the A parameter\"},\"RampAStopped(bytes32,address)\":{\"notice\":\"Emitted when the owner stops ramping up or down the A parameter\"},\"SwapDisabled(bytes32,address)\":{\"notice\":\"Emitted when the owner calls `disableSwap`\"},\"SwapFeesSet(bytes32,uint256,address)\":{\"notice\":\"Emitted when the owner sets swap fees\"},\"SwapInitialized(bytes32,(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,address,address[],uint256[],uint256[],uint256[],bool,uint256),address)\":{\"notice\":\"Emitted when the owner calls `initializeSwap`\"},\"SwapRemoved(bytes32,address)\":{\"notice\":\"Emitted when the owner calls `removeSwap`\"}},\"kind\":\"user\",\"methods\":{\"disableSwap(bytes32)\":{\"notice\":\"disable swap for key\"},\"initializeSwap(bytes32,address[],uint8[],string,string,uint256,uint256,uint256)\":{\"notice\":\"Initializes this Swap contract with the given parameters. This will also clone a LPToken contract that represents users' LP positions. The owner of LPToken will be this contract - which means only this contract is allowed to mint/burn tokens.\"},\"isDisabled(bytes32)\":{\"notice\":\"Return if the pool is disabled\"},\"lpTokenTargetAddress()\":{\"notice\":\"Returns the lp target token address\"},\"rampA(bytes32,uint256,uint256)\":{\"notice\":\"Start ramping up or down A parameter towards given futureA and futureTime Checks if the change is too rapid, and commits the new A value only when it falls under the limit range.\"},\"removeSwap(bytes32)\":{\"notice\":\"remove Swap Struct for key\"},\"setSwapAdminFee(bytes32,uint256)\":{\"notice\":\"Update the admin fee. Admin fee takes portion of the swap fee.\"},\"setSwapFee(bytes32,uint256)\":{\"notice\":\"Update the swap fee to be applied on swaps\"},\"stopRampA(bytes32)\":{\"notice\":\"Stop ramping A immediately. Reverts if ramp A is already stopped.\"},\"updateLpTokenTarget(address)\":{\"notice\":\"Update lpTokenTargetAddress\"},\"withdrawSwapAdminFees(bytes32)\":{\"notice\":\"Withdraw all admin fees to the contract owner\"}},\"notice\":\"Contract module which exposes only-admin controls for the StableSwapFacet contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/SwapAdminFacet.sol\":\"SwapAdminFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Clones.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n    /**\\n     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n     *\\n     * This function uses the create opcode, which should never revert.\\n     */\\n    function clone(address implementation) internal returns (address instance) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes\\n            // of the `implementation` address with the bytecode before the address.\\n            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))\\n            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.\\n            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))\\n            instance := create(0, 0x09, 0x37)\\n        }\\n        require(instance != address(0), \\\"ERC1167: create failed\\\");\\n    }\\n\\n    /**\\n     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n     *\\n     * This function uses the create2 opcode and a `salt` to deterministically deploy\\n     * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n     * the clones cannot be deployed twice at the same address.\\n     */\\n    function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes\\n            // of the `implementation` address with the bytecode before the address.\\n            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))\\n            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.\\n            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))\\n            instance := create2(0, 0x09, 0x37, salt)\\n        }\\n        require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n    }\\n\\n    /**\\n     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n     */\\n    function predictDeterministicAddress(\\n        address implementation,\\n        bytes32 salt,\\n        address deployer\\n    ) internal pure returns (address predicted) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(add(ptr, 0x38), deployer)\\n            mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff)\\n            mstore(add(ptr, 0x14), implementation)\\n            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73)\\n            mstore(add(ptr, 0x58), salt)\\n            mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37))\\n            predicted := keccak256(add(ptr, 0x43), 0x55)\\n        }\\n    }\\n\\n    /**\\n     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n     */\\n    function predictDeterministicAddress(address implementation, bytes32 salt)\\n        internal\\n        view\\n        returns (address predicted)\\n    {\\n        return predictDeterministicAddress(implementation, salt, address(this));\\n    }\\n}\\n\",\"keccak256\":\"0x888d64d221d52c31d015b76e50ca1af5ef8ff076550810b49cea6b01d8267a10\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n  AppStorage internal s;\\n\\n  // ========== Custom Errors ===========\\n\\n  error BaseConnextFacet__onlyOwner_notOwner();\\n  error BaseConnextFacet__onlyProposed_notProposedOwner();\\n  error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n  error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n  error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n  error BaseConnextFacet__whenNotPaused_paused();\\n  error BaseConnextFacet__nonReentrant_reentrantCall();\\n  error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n  error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n  error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @dev Prevents a contract from calling itself, directly or indirectly.\\n   * Calling a `nonReentrant` function from another `nonReentrant`\\n   * function is not supported. It is possible to prevent this from happening\\n   * by making the `nonReentrant` function external, and making it call a\\n   * `private` function that does the actual work.\\n   */\\n  modifier nonReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._status = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._status = Constants.NOT_ENTERED;\\n  }\\n\\n  modifier nonXCallReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._xcallStatus = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._xcallStatus = Constants.NOT_ENTERED;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and router role.\\n   */\\n  modifier onlyOwnerOrRouter() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n      revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and watcher role.\\n   */\\n  modifier onlyOwnerOrWatcher() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n      revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and admin role.\\n   */\\n  modifier onlyOwnerOrAdmin() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n      revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if all functionality is paused\\n   */\\n  modifier whenNotPaused() {\\n    if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n    _;\\n  }\\n\\n  // ============ Internal functions ============\\n  /**\\n   * @notice Indicates if the router allowlist has been removed\\n   */\\n  function _isRouterAllowlistRemoved() internal view returns (bool) {\\n    return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n    address adopted = AssetLogic.getConfig(_key).adopted;\\n    if (adopted == address(0)) {\\n      revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n    }\\n    return adopted;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n    address representation = AssetLogic.getConfig(_key).representation;\\n    // If this is address(0), then there is no mintable token for this asset on this\\n    // domain\\n    return representation;\\n  }\\n\\n  /**\\n   * @notice Calculates a transferId\\n   */\\n  function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_params));\\n  }\\n\\n  /**\\n   * @notice Internal utility function that combines\\n   *         `_origin` and `_nonce`.\\n   * @dev Both origin and nonce should be less than 2^32 - 1\\n   * @param _origin Domain of chain where the transfer originated\\n   * @param _nonce The unique identifier for the message from origin to destination\\n   * @return Returns (`_origin` << 32) & `_nonce`\\n   */\\n  function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n    return (uint64(_origin) << 32) | _nonce;\\n  }\\n\\n  function _getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address) {\\n    return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n  }\\n\\n  function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n    return AssetLogic.getCanonicalTokenId(_candidate, s);\\n  }\\n\\n  function _getLocalAndAdoptedToken(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address, address) {\\n    address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n    address _adopted = _getAdoptedAsset(_key);\\n    return (_local, _adopted);\\n  }\\n\\n  function _isLocalOrigin(address _token) internal view returns (bool) {\\n    return AssetLogic.isLocalOrigin(_token, s);\\n  }\\n\\n  function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n    TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n    bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n    if (!AssetLogic.getConfig(_key).approval) {\\n      revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n    }\\n    return (_canonical, _key);\\n  }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/SwapAdminFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20, Address, SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {Clones} from \\\"@openzeppelin/contracts/proxy/Clones.sol\\\";\\n\\nimport {AmplificationUtils, SwapUtils} from \\\"../libraries/AmplificationUtils.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {BaseConnextFacet} from \\\"./BaseConnextFacet.sol\\\";\\n\\n/**\\n * @title SwapAdminFacet\\n * @notice Contract module which exposes only-admin controls for the StableSwapFacet\\n * contract.\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n */\\ncontract SwapAdminFacet is BaseConnextFacet {\\n  using SafeERC20 for IERC20;\\n  using SwapUtils for SwapUtils.Swap;\\n  using AmplificationUtils for SwapUtils.Swap;\\n\\n  // ========== Custom Errors ===========\\n  error SwapAdminFacet__initializeSwap_alreadyInitialized();\\n  error SwapAdminFacet__initializeSwap_invalidPooledTokens();\\n  error SwapAdminFacet__initializeSwap_decimalsMismatch();\\n  error SwapAdminFacet__initializeSwap_duplicateTokens();\\n  error SwapAdminFacet__initializeSwap_zeroTokenAddress();\\n  error SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax();\\n  error SwapAdminFacet__initializeSwap_aExceedMax();\\n  error SwapAdminFacet__initializeSwap_feeExceedMax();\\n  error SwapAdminFacet__initializeSwap_adminFeeExceedMax();\\n  error SwapAdminFacet__initializeSwap_failedInitLpTokenClone();\\n  error SwapAdminFacet__updateLpTokenTarget_invalidNewAddress();\\n  error SwapAdminFacet__removeSwap_notInitialized();\\n  error SwapAdminFacet__removeSwap_notDisabledPool();\\n  error SwapAdminFacet__removeSwap_delayNotElapsed();\\n  error SwapAdminFacet__disableSwap_notInitialized();\\n  error SwapAdminFacet__disableSwap_alreadyDisabled();\\n\\n  // ============ Properties ============\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted when the owner calls `initializeSwap`\\n   * @param key - Identifier for asset\\n   * @param swap - The swap that was initialized\\n   * @param caller - The caller of the function\\n   */\\n  event SwapInitialized(bytes32 indexed key, SwapUtils.Swap swap, address caller);\\n\\n  /**\\n   * @notice Emitted when the owner calls `removeSwap`\\n   * @param key - Identifier for asset\\n   * @param caller - The caller of the function\\n   */\\n  event SwapRemoved(bytes32 indexed key, address caller);\\n\\n  /**\\n   * @notice Emitted when the owner calls `disableSwap`\\n   * @param key - Identifier for asset\\n   * @param caller - The caller of the function\\n   */\\n  event SwapDisabled(bytes32 indexed key, address caller);\\n\\n  /**\\n   * @notice Emitted when the owner withdraws admin fees\\n   * @param key - Identifier for asset\\n   * @param caller - The caller of the function\\n   */\\n  event AdminFeesWithdrawn(bytes32 indexed key, address caller);\\n\\n  /**\\n   * @notice Emitted when the owner sets admin fees\\n   * @param key - Identifier for asset\\n   * @param newAdminFee - The updated fee\\n   * @param caller - The caller of the function\\n   */\\n  event AdminFeesSet(bytes32 indexed key, uint256 newAdminFee, address caller);\\n\\n  /**\\n   * @notice Emitted when the owner sets swap fees\\n   * @param key - Identifier for asset\\n   * @param newSwapFee - The updated fee\\n   * @param caller - The caller of the function\\n   */\\n  event SwapFeesSet(bytes32 indexed key, uint256 newSwapFee, address caller);\\n\\n  /**\\n   * @notice Emitted when the owner starts ramping up or down the A parameter\\n   * @param key - Identifier for asset\\n   * @param futureA - The final A value after ramp\\n   * @param futureTime - The time A should reach the final value\\n   * @param caller - The caller of the function\\n   */\\n  event RampAStarted(bytes32 indexed key, uint256 futureA, uint256 futureTime, address caller);\\n\\n  /**\\n   * @notice Emitted when the owner stops ramping up or down the A parameter\\n   * @param key - Identifier for asset\\n   * @param caller - The caller of the function\\n   */\\n  event RampAStopped(bytes32 indexed key, address caller);\\n\\n  /**\\n   * @notice Emitted when the owner update lpTokenTargetAddress\\n   * @param oldAddress - The old lpTokenTargetAddress\\n   * @param newAddress - Updated address\\n   * @param caller - The caller of the function\\n   */\\n  event LPTokenTargetUpdated(address oldAddress, address newAddress, address caller);\\n\\n  // ============ External: Getters ============\\n  /**\\n   * @notice Returns the lp target token address\\n   * @return address\\n   */\\n  function lpTokenTargetAddress() public view returns (address) {\\n    return s.lpTokenTargetAddress;\\n  }\\n\\n  /**\\n   * @notice Return if the pool is disabled\\n   * @param key Hash of the canonical id + domain\\n   * @return disabled flag\\n   */\\n  function isDisabled(bytes32 key) external view returns (bool) {\\n    return s.swapStorages[key].disabled;\\n  }\\n\\n  /*** StableSwap ADMIN FUNCTIONS ***/\\n  /**\\n   * @notice Initializes this Swap contract with the given parameters.\\n   * This will also clone a LPToken contract that represents users'\\n   * LP positions. The owner of LPToken will be this contract - which means\\n   * only this contract is allowed to mint/burn tokens.\\n   *\\n   * @dev The swap can only be updated after initialization via `rampA`. This means\\n   * if this value is incorrectly set, it will take some time to reach the\\n   * correct value.\\n   *\\n   * @param _key the hash of the canonical id and domain for token\\n   * @param _pooledTokens an array of ERC20s this pool will accept.\\n   * length of this array should be in 2 ~ 16\\n   * @param decimals the decimals to use for each pooled token,\\n   * eg 8 for WBTC. Cannot be larger than POOL_PRECISION_DECIMALS(18)\\n   * Only fixed decimal tokens are allowed.\\n   * @param lpTokenName the long-form name of the token to be deployed\\n   * @param lpTokenSymbol the short symbol for the token to be deployed\\n   * @param _a the amplification coefficient * n ** (n - 1). See the\\n   * StableSwap paper for details\\n   * @param _fee default swap fee to be initialized with\\n   * @param _adminFee default adminFee to be initialized with\\n   */\\n  function initializeSwap(\\n    bytes32 _key,\\n    IERC20[] memory _pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 _a,\\n    uint256 _fee,\\n    uint256 _adminFee\\n  ) external onlyOwnerOrAdmin {\\n    if (s.swapStorages[_key].pooledTokens.length != 0) revert SwapAdminFacet__initializeSwap_alreadyInitialized();\\n\\n    // Check _pooledTokens and precisions parameter\\n    if (\\n      _pooledTokens.length < Constants.MINIMUM_POOLED_TOKENS || _pooledTokens.length > Constants.MAXIMUM_POOLED_TOKENS\\n    ) {\\n      revert SwapAdminFacet__initializeSwap_invalidPooledTokens();\\n    }\\n\\n    uint256 numPooledTokens = _pooledTokens.length;\\n\\n    if (numPooledTokens != decimals.length) revert SwapAdminFacet__initializeSwap_decimalsMismatch();\\n\\n    uint256[] memory precisionMultipliers = new uint256[](decimals.length);\\n\\n    for (uint256 i; i < numPooledTokens; ) {\\n      if (i != 0) {\\n        // Check if index is already used. Check if 0th element is a duplicate.\\n        if (s.tokenIndexes[_key][address(_pooledTokens[i])] != 0 || _pooledTokens[0] == _pooledTokens[i])\\n          revert SwapAdminFacet__initializeSwap_duplicateTokens();\\n      }\\n      if (address(_pooledTokens[i]) == address(0)) revert SwapAdminFacet__initializeSwap_zeroTokenAddress();\\n\\n      if (decimals[i] > Constants.POOL_PRECISION_DECIMALS)\\n        revert SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax();\\n\\n      precisionMultipliers[i] = 10**uint256(Constants.POOL_PRECISION_DECIMALS - decimals[i]);\\n      // NOTE: safe to cast to uint8 as the numPooledTokens is that type and the loop ceiling\\n      s.tokenIndexes[_key][address(_pooledTokens[i])] = uint8(i);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Check _a, _fee, _adminFee, _withdrawFee parameters\\n    if (_a > Constants.MAX_A - 1) revert SwapAdminFacet__initializeSwap_aExceedMax();\\n    if (_fee > Constants.MAX_SWAP_FEE - 1) revert SwapAdminFacet__initializeSwap_feeExceedMax();\\n    if (_adminFee > Constants.MAX_ADMIN_FEE - 1) revert SwapAdminFacet__initializeSwap_adminFeeExceedMax();\\n\\n    // Initialize a LPToken contract\\n    LPToken lpToken = LPToken(Clones.clone(s.lpTokenTargetAddress));\\n    if (!lpToken.initialize(lpTokenName, lpTokenSymbol)) revert SwapAdminFacet__initializeSwap_failedInitLpTokenClone();\\n\\n    // Initialize swapStorage struct\\n    SwapUtils.Swap memory entry = SwapUtils.Swap({\\n      key: _key,\\n      initialA: _a * Constants.A_PRECISION,\\n      futureA: _a * Constants.A_PRECISION,\\n      swapFee: _fee,\\n      adminFee: _adminFee,\\n      lpToken: lpToken,\\n      pooledTokens: _pooledTokens,\\n      tokenPrecisionMultipliers: precisionMultipliers,\\n      balances: new uint256[](_pooledTokens.length),\\n      adminFees: new uint256[](_pooledTokens.length),\\n      initialATime: 0,\\n      futureATime: 0,\\n      disabled: false,\\n      removeTime: 0\\n    });\\n    s.swapStorages[_key] = entry;\\n    emit SwapInitialized(_key, entry, msg.sender);\\n  }\\n\\n  /**\\n   * @notice disable swap for key\\n   *\\n   * @param _key the hash of the canonical id and domain for token\\n   */\\n  function disableSwap(bytes32 _key) external onlyOwnerOrAdmin {\\n    uint256 numPooledTokens = s.swapStorages[_key].pooledTokens.length;\\n\\n    if (numPooledTokens == 0) revert SwapAdminFacet__disableSwap_notInitialized();\\n    if (s.swapStorages[_key].disabled) revert SwapAdminFacet__disableSwap_alreadyDisabled();\\n\\n    s.swapStorages[_key].disabled = true;\\n    s.swapStorages[_key].removeTime = block.timestamp + Constants.REMOVE_DELAY;\\n\\n    emit SwapDisabled(_key, msg.sender);\\n  }\\n\\n  /**\\n   * @notice remove Swap Struct for key\\n   *\\n   * @param _key the hash of the canonical id and domain for token\\n   */\\n  function removeSwap(bytes32 _key) external onlyOwnerOrAdmin {\\n    uint256 numPooledTokens = s.swapStorages[_key].pooledTokens.length;\\n    if (numPooledTokens == 0) revert SwapAdminFacet__removeSwap_notInitialized();\\n\\n    if (!s.swapStorages[_key].disabled) revert SwapAdminFacet__removeSwap_notDisabledPool();\\n    if (s.swapStorages[_key].removeTime > block.timestamp) revert SwapAdminFacet__removeSwap_delayNotElapsed();\\n\\n    for (uint256 i; i < numPooledTokens; ) {\\n      IERC20 pooledToken = s.swapStorages[_key].pooledTokens[i];\\n      if (s.swapStorages[_key].balances[i] > 0) {\\n        // if there is not removed balance, transfer to admin wallet.\\n        pooledToken.safeTransfer(msg.sender, s.swapStorages[_key].balances[i]);\\n      }\\n\\n      delete s.tokenIndexes[_key][address(pooledToken)];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    _withdrawAdminFees(_key, msg.sender);\\n\\n    delete s.swapStorages[_key];\\n\\n    emit SwapRemoved(_key, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Withdraw all admin fees to the contract owner\\n   * @param key Hash of the canonical domain and id\\n   */\\n  function withdrawSwapAdminFees(bytes32 key) external onlyOwnerOrAdmin nonReentrant {\\n    _withdrawAdminFees(key, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Withdraws all admin fees for pool at key to provided address and emits event\\n   * @param _key Hash of the canonical domain and id\\n   * @param _to Recipient of fees\\n   */\\n  function _withdrawAdminFees(bytes32 _key, address _to) internal {\\n    s.swapStorages[_key].withdrawAdminFees(_to);\\n    emit AdminFeesWithdrawn(_key, _to);\\n  }\\n\\n  /**\\n   * @notice Update the admin fee. Admin fee takes portion of the swap fee.\\n   * @param key Hash of the canonical domain and id\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setSwapAdminFee(bytes32 key, uint256 newAdminFee) external onlyOwnerOrAdmin {\\n    s.swapStorages[key].setAdminFee(newAdminFee);\\n    emit AdminFeesSet(key, newAdminFee, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Update the swap fee to be applied on swaps\\n   * @param key Hash of the canonical domain and id\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(bytes32 key, uint256 newSwapFee) external onlyOwnerOrAdmin {\\n    s.swapStorages[key].setSwapFee(newSwapFee);\\n    emit SwapFeesSet(key, newSwapFee, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA and futureTime\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param key Hash of the canonical domain and id\\n   * @param futureA the new A to ramp towards\\n   * @param futureTime timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    bytes32 key,\\n    uint256 futureA,\\n    uint256 futureTime\\n  ) external onlyOwnerOrAdmin {\\n    s.swapStorages[key].rampA(futureA, futureTime);\\n    emit RampAStarted(key, futureA, futureTime, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Stop ramping A immediately. Reverts if ramp A is already stopped.\\n   * @param key Hash of the canonical domain and id\\n   */\\n  function stopRampA(bytes32 key) external onlyOwnerOrAdmin {\\n    s.swapStorages[key].stopRampA();\\n    emit RampAStopped(key, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Update lpTokenTargetAddress\\n   * @param newAddress New lpTokenTargetAddress\\n   */\\n  function updateLpTokenTarget(address newAddress) external onlyOwnerOrAdmin {\\n    if (!Address.isContract(newAddress)) revert SwapAdminFacet__updateLpTokenTarget_invalidNewAddress();\\n    emit LPTokenTargetUpdated(s.lpTokenTargetAddress, newAddress, msg.sender);\\n    s.lpTokenTargetAddress = newAddress;\\n  }\\n}\\n\",\"keccak256\":\"0xd869a156caef1a6a17918a5bd93f4cf945b227b436751db262faba4bb956ac58\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":13726,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"s","offset":0,"slot":"0","type":"t_struct(AppStorage)29536_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_contract(IERC20)10812)dyn_storage":{"base":"t_contract(IERC20)10812","encoding":"dynamic_array","label":"contract IERC20[]","numberOfBytes":"32"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IConnectorManager)47805":{"encoding":"inplace","label":"contract IConnectorManager","numberOfBytes":"20"},"t_contract(IERC20)10812":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_contract(LPToken)23179":{"encoding":"inplace","label":"contract LPToken","numberOfBytes":"20"},"t_enum(DestinationTransferStatus)29324":{"encoding":"inplace","label":"enum DestinationTransferStatus","numberOfBytes":"1"},"t_enum(Role)29319":{"encoding":"inplace","label":"enum Role","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_enum(Role)29319)":{"encoding":"mapping","key":"t_address","label":"mapping(address => enum Role)","numberOfBytes":"32","value":"t_enum(Role)29319"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(RouterConfig)29378_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RouterConfig)","numberOfBytes":"32","value":"t_struct(RouterConfig)29378_storage"},"t_mapping(t_address,t_struct(TokenId)37728_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct TokenId)","numberOfBytes":"32","value":"t_struct(TokenId)37728_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_bytes32,t_array(t_address)dyn_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => address[])","numberOfBytes":"32","value":"t_array(t_address)dyn_storage"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum DestinationTransferStatus)","numberOfBytes":"32","value":"t_enum(DestinationTransferStatus)29324"},"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => mapping(address => uint8))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint8)"},"t_mapping(t_bytes32,t_struct(Swap)30786_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct SwapUtils.Swap)","numberOfBytes":"32","value":"t_struct(Swap)30786_storage"},"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct TokenConfig)","numberOfBytes":"32","value":"t_struct(TokenConfig)29395_storage"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_bytes32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => bytes32)","numberOfBytes":"32","value":"t_bytes32"},"t_struct(AppStorage)29536_storage":{"encoding":"inplace","label":"struct AppStorage","members":[{"astId":29397,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":29399,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"LIQUIDITY_FEE_NUMERATOR","offset":0,"slot":"1","type":"t_uint256"},{"astId":29402,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"relayerFeeVault","offset":0,"slot":"2","type":"t_address"},{"astId":29405,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"nonce","offset":0,"slot":"3","type":"t_uint256"},{"astId":29408,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"domain","offset":0,"slot":"4","type":"t_uint32"},{"astId":29414,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"adoptedToCanonical","offset":0,"slot":"5","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29420,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"representationToCanonical","offset":0,"slot":"6","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29426,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"tokenConfigs","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)"},{"astId":29432,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"transferStatus","offset":0,"slot":"8","type":"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)"},{"astId":29438,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"routedTransfers","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_array(t_address)dyn_storage)"},{"astId":29445,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"routerBalances","offset":0,"slot":"10","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":29450,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"approvedRelayers","offset":0,"slot":"11","type":"t_mapping(t_address,t_bool)"},{"astId":29453,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"maxRoutersPerTransfer","offset":0,"slot":"12","type":"t_uint256"},{"astId":29458,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"slippage","offset":0,"slot":"13","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29463,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"receiveLocalOverride","offset":0,"slot":"14","type":"t_mapping(t_bytes32,t_bool)"},{"astId":29468,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"remotes","offset":0,"slot":"15","type":"t_mapping(t_uint32,t_bytes32)"},{"astId":29470,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"_proposed","offset":0,"slot":"16","type":"t_address"},{"astId":29472,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"_proposedOwnershipTimestamp","offset":0,"slot":"17","type":"t_uint256"},{"astId":29474,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"_routerAllowlistRemoved","offset":0,"slot":"18","type":"t_bool"},{"astId":29476,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"_routerAllowlistTimestamp","offset":0,"slot":"19","type":"t_uint256"},{"astId":29482,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"roles","offset":0,"slot":"20","type":"t_mapping(t_address,t_enum(Role)29319)"},{"astId":29487,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"routerConfigs","offset":0,"slot":"21","type":"t_mapping(t_address,t_struct(RouterConfig)29378_storage)"},{"astId":29489,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"_status","offset":0,"slot":"22","type":"t_uint256"},{"astId":29491,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"_xcallStatus","offset":0,"slot":"23","type":"t_uint256"},{"astId":29497,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"swapStorages","offset":0,"slot":"24","type":"t_mapping(t_bytes32,t_struct(Swap)30786_storage)"},{"astId":29504,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"tokenIndexes","offset":0,"slot":"25","type":"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))"},{"astId":29507,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"lpTokenTargetAddress","offset":0,"slot":"26","type":"t_address"},{"astId":29510,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"_paused","offset":20,"slot":"26","type":"t_bool"},{"astId":29513,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"aavePool","offset":0,"slot":"27","type":"t_address"},{"astId":29516,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"aavePortalFeeNumerator","offset":0,"slot":"28","type":"t_uint256"},{"astId":29521,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"portalDebt","offset":0,"slot":"29","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29526,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"portalFeeDebt","offset":0,"slot":"30","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29531,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"approvedSequencers","offset":0,"slot":"31","type":"t_mapping(t_address,t_bool)"},{"astId":29535,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"xAppConnectionManager","offset":0,"slot":"32","type":"t_contract(IConnectorManager)47805"}],"numberOfBytes":"1056"},"t_struct(RouterConfig)29378_storage":{"encoding":"inplace","label":"struct RouterConfig","members":[{"astId":29367,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"approved","offset":0,"slot":"0","type":"t_bool"},{"astId":29369,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"portalApproved","offset":1,"slot":"0","type":"t_bool"},{"astId":29371,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"owner","offset":2,"slot":"0","type":"t_address"},{"astId":29373,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"recipient","offset":0,"slot":"1","type":"t_address"},{"astId":29375,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"proposed","offset":0,"slot":"2","type":"t_address"},{"astId":29377,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"proposedTimestamp","offset":0,"slot":"3","type":"t_uint256"}],"numberOfBytes":"128"},"t_struct(Swap)30786_storage":{"encoding":"inplace","label":"struct SwapUtils.Swap","members":[{"astId":30753,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"key","offset":0,"slot":"0","type":"t_bytes32"},{"astId":30755,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"initialA","offset":0,"slot":"1","type":"t_uint256"},{"astId":30757,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"futureA","offset":0,"slot":"2","type":"t_uint256"},{"astId":30759,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"initialATime","offset":0,"slot":"3","type":"t_uint256"},{"astId":30761,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"futureATime","offset":0,"slot":"4","type":"t_uint256"},{"astId":30763,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"swapFee","offset":0,"slot":"5","type":"t_uint256"},{"astId":30765,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"adminFee","offset":0,"slot":"6","type":"t_uint256"},{"astId":30768,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"lpToken","offset":0,"slot":"7","type":"t_contract(LPToken)23179"},{"astId":30772,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"pooledTokens","offset":0,"slot":"8","type":"t_array(t_contract(IERC20)10812)dyn_storage"},{"astId":30775,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"tokenPrecisionMultipliers","offset":0,"slot":"9","type":"t_array(t_uint256)dyn_storage"},{"astId":30778,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"balances","offset":0,"slot":"10","type":"t_array(t_uint256)dyn_storage"},{"astId":30781,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"adminFees","offset":0,"slot":"11","type":"t_array(t_uint256)dyn_storage"},{"astId":30783,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"disabled","offset":0,"slot":"12","type":"t_bool"},{"astId":30785,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"removeTime","offset":0,"slot":"13","type":"t_uint256"}],"numberOfBytes":"448"},"t_struct(TokenConfig)29395_storage":{"encoding":"inplace","label":"struct TokenConfig","members":[{"astId":29380,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"representation","offset":0,"slot":"0","type":"t_address"},{"astId":29382,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"representationDecimals","offset":20,"slot":"0","type":"t_uint8"},{"astId":29384,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"adopted","offset":0,"slot":"1","type":"t_address"},{"astId":29386,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"adoptedDecimals","offset":20,"slot":"1","type":"t_uint8"},{"astId":29388,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"adoptedToLocalExternalPools","offset":0,"slot":"2","type":"t_address"},{"astId":29390,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"approval","offset":20,"slot":"2","type":"t_bool"},{"astId":29392,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"cap","offset":0,"slot":"3","type":"t_uint256"},{"astId":29394,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"custodied","offset":0,"slot":"4","type":"t_uint256"}],"numberOfBytes":"160"},"t_struct(TokenId)37728_storage":{"encoding":"inplace","label":"struct TokenId","members":[{"astId":37725,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"domain","offset":0,"slot":"0","type":"t_uint32"},{"astId":37727,"contract":"contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet","label":"id","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"events":{"AdminFeesSet(bytes32,uint256,address)":{"notice":"Emitted when the owner sets admin fees"},"AdminFeesWithdrawn(bytes32,address)":{"notice":"Emitted when the owner withdraws admin fees"},"LPTokenTargetUpdated(address,address,address)":{"notice":"Emitted when the owner update lpTokenTargetAddress"},"RampAStarted(bytes32,uint256,uint256,address)":{"notice":"Emitted when the owner starts ramping up or down the A parameter"},"RampAStopped(bytes32,address)":{"notice":"Emitted when the owner stops ramping up or down the A parameter"},"SwapDisabled(bytes32,address)":{"notice":"Emitted when the owner calls `disableSwap`"},"SwapFeesSet(bytes32,uint256,address)":{"notice":"Emitted when the owner sets swap fees"},"SwapInitialized(bytes32,(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,address,address[],uint256[],uint256[],uint256[],bool,uint256),address)":{"notice":"Emitted when the owner calls `initializeSwap`"},"SwapRemoved(bytes32,address)":{"notice":"Emitted when the owner calls `removeSwap`"}},"kind":"user","methods":{"disableSwap(bytes32)":{"notice":"disable swap for key"},"initializeSwap(bytes32,address[],uint8[],string,string,uint256,uint256,uint256)":{"notice":"Initializes this Swap contract with the given parameters. This will also clone a LPToken contract that represents users' LP positions. The owner of LPToken will be this contract - which means only this contract is allowed to mint/burn tokens."},"isDisabled(bytes32)":{"notice":"Return if the pool is disabled"},"lpTokenTargetAddress()":{"notice":"Returns the lp target token address"},"rampA(bytes32,uint256,uint256)":{"notice":"Start ramping up or down A parameter towards given futureA and futureTime Checks if the change is too rapid, and commits the new A value only when it falls under the limit range."},"removeSwap(bytes32)":{"notice":"remove Swap Struct for key"},"setSwapAdminFee(bytes32,uint256)":{"notice":"Update the admin fee. Admin fee takes portion of the swap fee."},"setSwapFee(bytes32,uint256)":{"notice":"Update the swap fee to be applied on swaps"},"stopRampA(bytes32)":{"notice":"Stop ramping A immediately. Reverts if ramp A is already stopped."},"updateLpTokenTarget(address)":{"notice":"Update lpTokenTargetAddress"},"withdrawSwapAdminFees(bytes32)":{"notice":"Withdraw all admin fees to the contract owner"}},"notice":"Contract module which exposes only-admin controls for the StableSwapFacet contract.","version":1}}},"contracts/core/connext/facets/TokenFacet.sol":{"TokenFacet":{"abi":[{"inputs":[],"name":"AssetLogic__getConfig_notRegistered","type":"error"},{"inputs":[],"name":"BaseConnextFacet__getAdoptedAsset_assetNotFound","type":"error"},{"inputs":[],"name":"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonXCallReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__whenNotPaused_paused","type":"error"},{"inputs":[],"name":"TokenFacet__addAssetId_alreadyAdded","type":"error"},{"inputs":[],"name":"TokenFacet__addAssetId_badBurn","type":"error"},{"inputs":[],"name":"TokenFacet__addAssetId_badMint","type":"error"},{"inputs":[],"name":"TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical","type":"error"},{"inputs":[],"name":"TokenFacet__removeAssetId_invalidParams","type":"error"},{"inputs":[],"name":"TokenFacet__removeAssetId_notAdded","type":"error"},{"inputs":[],"name":"TokenFacet__removeAssetId_remainsCustodied","type":"error"},{"inputs":[],"name":"TokenFacet__setLiquidityCap_notCanonicalDomain","type":"error"},{"inputs":[],"name":"TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation","type":"error"},{"inputs":[],"name":"TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain","type":"error"},{"inputs":[],"name":"TokenFacet__setupAsset_invalidCanonicalConfiguration","type":"error"},{"inputs":[],"name":"TokenFacet__setupAsset_representationListed","type":"error"},{"inputs":[],"name":"TokenFacet__updateDetails_localNotFound","type":"error"},{"inputs":[],"name":"TokenFacet__updateDetails_notApproved","type":"error"},{"inputs":[],"name":"TokenFacet__updateDetails_onlyRemote","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":false,"internalType":"address","name":"adoptedAsset","type":"address"},{"indexed":false,"internalType":"address","name":"localAsset","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"AssetAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"AssetRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"cap","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"LiquidityCapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":false,"internalType":"address","name":"swapPool","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"StableSwapAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"representation","type":"address"}],"name":"TokenDeployed","type":"event"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"},{"internalType":"address","name":"_stableSwapPool","type":"address"}],"name":"addStableSwapPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adopted","type":"address"}],"name":"adoptedToCanonical","outputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"}],"name":"adoptedToLocalExternalPools","outputs":[{"internalType":"contract IStableSwap","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"adoptedToLocalExternalPools","outputs":[{"internalType":"contract IStableSwap","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"approvedAssets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"}],"name":"approvedAssets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"canonicalToAdopted","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"}],"name":"canonicalToAdopted","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"canonicalToRepresentation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"}],"name":"canonicalToRepresentation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"getCustodiedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"},{"internalType":"uint32","name":"_domain","type":"uint32"}],"name":"getLocalAndAdoptedToken","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_candidate","type":"address"}],"name":"getTokenId","outputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"},{"internalType":"address","name":"_adoptedAssetId","type":"address"},{"internalType":"address","name":"_representation","type":"address"}],"name":"removeAssetId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"},{"internalType":"address","name":"_adoptedAssetId","type":"address"},{"internalType":"address","name":"_representation","type":"address"}],"name":"removeAssetId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_representation","type":"address"}],"name":"representationToCanonical","outputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"},{"internalType":"uint8","name":"_canonicalDecimals","type":"uint8"},{"internalType":"string","name":"_representationName","type":"string"},{"internalType":"string","name":"_representationSymbol","type":"string"},{"internalType":"address","name":"_adoptedAssetId","type":"address"},{"internalType":"address","name":"_stableSwapPool","type":"address"},{"internalType":"uint256","name":"_cap","type":"uint256"}],"name":"setupAsset","outputs":[{"internalType":"address","name":"_local","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"},{"internalType":"address","name":"_representation","type":"address"},{"internalType":"address","name":"_adoptedAssetId","type":"address"},{"internalType":"address","name":"_stableSwapPool","type":"address"}],"name":"setupAssetWithDeployedRepresentation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"updateDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"},{"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"updateLiquidityCap","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"events":{"AssetAdded(bytes32,bytes32,uint32,address,address,address)":{"params":{"adoptedAsset":"- The address of the adopted (user-expected) asset","caller":"- The account that called the function","canonicalId":"- The canonical identifier of the token the local <> adopted AMM is for","domain":"- The domain of the canonical token for the local <> adopted amm","key":"- The key in the mapping (hash of canonical id and domain)","localAsset":"- The address of the local asset"}},"AssetRemoved(bytes32,address)":{"params":{"caller":"- The account that called the function","key":"- The hash of the canonical identifier and domain of the token removed"}},"LiquidityCapUpdated(bytes32,bytes32,uint32,uint256,address)":{"params":{"caller":"- The account that called the function","canonicalId":"- The canonical identifier of the token the local <> adopted AMM is for","cap":"- The newly enforced liquidity cap (if it is 0, no cap is enforced)","domain":"- The domain of the canonical token for the local <> adopted amm","key":"- The key in the mapping (hash of canonical id and domain)"}},"StableSwapAdded(bytes32,bytes32,uint32,address,address)":{"params":{"caller":"- The account that called the function","canonicalId":"- The canonical identifier of the token the local <> adopted AMM is for","domain":"- The domain of the canonical token for the local <> adopted amm","key":"- The key in the mapping (hash of canonical id and domain)","swapPool":"- The address of the AMM"}},"TokenDeployed(uint32,bytes32,address)":{"params":{"domain":"the domain of the chain where the canonical asset is deployed","id":"the bytes32 address of the canonical token contract","representation":"the address of the newly locally deployed representation contract"}}},"kind":"dev","methods":{"addStableSwapPool((uint32,bytes32),address)":{"details":"Must pass in the _canonical information so it can be emitted in event"},"removeAssetId((uint32,bytes32),address,address)":{"params":{"_adoptedAssetId":"- Corresponding adopted asset to remove","_canonical":"- The canonical id and domain to remove","_representation":"- Corresponding representation asset to remove"}},"removeAssetId(bytes32,address,address)":{"params":{"_adoptedAssetId":"- Corresponding adopted asset to remove","_key":"- The hash of the canonical id and domain to remove (mapping key)","_representation":"- Corresponding representation asset to remove"}},"setupAsset((uint32,bytes32),uint8,string,string,address,address,uint256)":{"details":"When allowlisting the canonical asset, all representational assets would be allowlisted as well. In the event you have a different adopted asset (i.e. PoS USDC on polygon), you should *not* allowlist the adopted asset. The stable swap pool address used should allow you to swap between the local <> adopted asset. If a representation has been deployed at any point, `setupAssetWithDeployedRepresentation` should be used instead. The following can only be added on *REMOTE* domains: - `_adoptedAssetId` - `_stableSwapPool` Whereas the `_cap` can only be added on the canonical domain","params":{"_adoptedAssetId":"- The used asset id for this domain (e.g. PoS USDC for polygon)","_canonical":"- The canonical asset to add by id and domain. All representations will be allowlisted as well","_canonicalDecimals":"- The decimals of the canonical asset (will be used for deployed representation)","_representationName":"- The name to be used for the deployed asset","_representationSymbol":"- The symbol used for the deployed asset","_stableSwapPool":"- The address of the local stableswap pool, if it exists."}},"setupAssetWithDeployedRepresentation((uint32,bytes32),address,address,address)":{"details":"This function does very minimal checks to ensure the correct `_representation` token is used. The only enforced checks are: - Bridge can mint, and balance of bridge will increase - Bridge can burn, and balance of bridge will decrease However, there are many things that must be checked manually to avoid enrolling a bad representation: - decimals must always be equal to canonical decimals - regular `mint`, `burn`, `ERC20` functionality could be implemented improperly - the required interface functions (see `IBridgeToken`) may not be implemented - upgradeability could interfere with required functionality Using this method allows admins to override existing local tokens, and should be used carefully.","params":{"_adoptedAssetId":"- The used asset id for this domain (e.g. PoS USDC for polygon)","_canonical":"- The canonical asset to add by id and domain. All representations will be whitelisted as well","_representation":"- The address of the representative asset","_stableSwapPool":"- The address of the local stableswap pool, if it exists."}},"updateDetails((uint32,bytes32),string,string)":{"params":{"_canonical":"- The canonical id and domain to remove","_name":"- The new name","_symbol":"- The new symbol"}},"updateLiquidityCap((uint32,bytes32),uint256)":{"details":"Must pass in the _canonical information so it can be emitted in event"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50613a2d806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620001455760003560e01c80639b59851911620000bb578063bd8671a7116200007a578063bd8671a714620003ff578063c40584291462000416578063e1cb3958146200042d578063e9d7bcec1462000444578063f1537686146200045b57600080fd5b80639b5985191462000374578063a1b1930114620003a3578063ad4c777114620003ba578063ae8bc0de14620003d1578063b64a5e0714620003e857600080fd5b806357bd0a32116200010857806357bd0a32146200026c5780635a2164e514620002ad5780636006209114620002c457806380dc22481462000328578063949de969146200033f57600080fd5b806303e418c2146200014a57806307a38d7b14620001d45780631506e463146200020c5780631ecf6f9f14620002255780632c1999d01462000255575b600080fd5b620001ae6200015b36600462001a89565b6040805180820190915260008082526020820152506040805180820182526001600160a01b03909216600081815260066020818152938220805463ffffffff168652929091528252600101549082015290565b60408051825163ffffffff16815260209283015192810192909252015b60405180910390f35b620001eb620001e536600462001abc565b62000472565b604080516001600160a01b03938416815292909116602083015201620001cb565b620002236200021d36600462001b04565b62000498565b005b6200023c6200023636600462001b34565b62000534565b6040516001600160a01b039091168152602001620001cb565b6200023c6200026636600462001b34565b62000547565b6200029c6200027d36600462001b34565b600090815260076020526040902060020154600160a01b900460ff1690565b6040519015158152602001620001cb565b62000223620002be36600462001b4e565b62000554565b620001ae620002d536600462001a89565b6040805180820190915260008082526020820152506040805180820182526001600160a01b03909216600081815260056020818152938220805463ffffffff168652929091528252600101549082015290565b6200023c6200033936600462001b99565b620005fc565b620003656200035036600462001b34565b60009081526007602052604090206004015490565b604051908152602001620001cb565b6200023c6200038536600462001b34565b6000908152600760205260409020600201546001600160a01b031690565b62000223620003b436600462001bb8565b62000619565b6200023c620003cb36600462001b99565b620006c6565b6200029c620003e236600462001b99565b620006e9565b6200023c620003f936600462001cae565b62000706565b6200023c6200041036600462001b99565b620008d7565b620002236200042736600462001d71565b620008fa565b6200023c6200043e36600462001def565b62000a96565b620002236200045536600462001e4d565b62000c06565b620001ae6200046c36600462001a89565b62000c97565b6000806200048d62000485858562000cb6565b858562000cf9565b915091509250929050565b33620004a362000d2a565b6001600160a01b031614158015620004e2575060033360009081526014602052604090205460ff166003811115620004df57620004df62001e7b565b14155b156200050157604051637b32c26b60e01b815260040160405180910390fd5b600062000520602084018035906200051a908662001e91565b62000cb6565b90506200052f83838362000d58565b505050565b6000620005418262000df3565b92915050565b6000620005418262000e12565b336200055f62000d2a565b6001600160a01b0316141580156200059e575060033360009081526014602052604090205460ff1660038111156200059b576200059b62001e7b565b14155b15620005bd57604051637b32c26b60e01b815260040160405180910390fd5b6000620005d6602085018035906200051a908762001e91565b9050620005f6818484620005f03689900389018962001eaf565b62000e4e565b50505050565b60006200054162000385602084018035906200051a908662001e91565b336200062462000d2a565b6001600160a01b03161415801562000663575060033360009081526014602052604090205460ff16600381111562000660576200066062001e7b565b14155b156200068257604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0382166000908152600560209081526040918290208251808401909352805463ffffffff1683526001015490820152620005f68484848462000e4e565b600062000541620006e3602084018035906200051a908662001e91565b62000df3565b6000620005416200027d602084018035906200051a908662001e91565b6000336200071362000d2a565b6001600160a01b03161415801562000752575060033360009081526014602052604090205460ff1660038111156200074f576200074f62001e7b565b14155b156200077157604051637b32c26b60e01b815260040160405180910390fd5b60006200078a60208a018035906200051a908c62001e91565b60045490915060009063ffffffff16620007a860208c018c62001e91565b63ffffffff161490508015620008385760208a013592506001600160a01b03861615801590620007ea5750826001600160a01b0316866001600160a01b031614155b80620007fe57506001600160a01b03851615155b156200081d5760405163022d833560e01b815260040160405180910390fd5b6200083260018a60008660008f8a89620010cc565b620008ca565b6000828152600760205260409020546001600160a01b0316151580620008755750600082815260076020526040902054600160a01b900460ff1615155b15620008945760405163ae154e0360e01b815260040160405180910390fd5b620008b460208b01803590620008ab908d62001e91565b8b8b8b620016af565b9250620008ca60008a8886898f600089620010cc565b5050979650505050505050565b600062000541620008f4602084018035906200051a908662001e91565b62000e12565b336200090562000d2a565b6001600160a01b03161415801562000944575060033360009081526014602052604090205460ff16600381111562000941576200094162001e7b565b14155b156200096357604051637b32c26b60e01b815260040160405180910390fd5b60006200097c602085018035906200051a908762001e91565b905060006200098b8262001737565b546001600160a01b0316905080620009b657604051639db40a2560e01b815260040160405180910390fd5b620009c5602086018662001e91565b60045463ffffffff918216911603620009f157604051630e5a87cb60e21b815260040160405180910390fd5b600082815260076020526040902060020154600160a01b900460ff1662000a2b57604051634d665d9960e01b815260040160405180910390fd5b604051635bd8487760e11b81526001600160a01b0382169063b7b090ee9062000a5b908790879060040162001f54565b600060405180830381600087803b15801562000a7657600080fd5b505af115801562000a8b573d6000803e3d6000fd5b505050505050505050565b60003362000aa362000d2a565b6001600160a01b03161415801562000ae2575060033360009081526014602052604090205460ff16600381111562000adf5762000adf62001e7b565b14155b1562000b0157604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03841662000b2957604051631363580360e21b815260040160405180910390fd5b60045463ffffffff1662000b41602087018762001e91565b63ffffffff160362000b665760405163333de67d60e21b815260040160405180910390fd5b600062000b7f602087018035906200051a908962001e91565b905062000bf96000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000bc6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bec919062001f86565b8688878b600088620010cc565b849150505b949350505050565b3362000c1162000d2a565b6001600160a01b03161415801562000c50575060033360009081526014602052604090205460ff16600381111562000c4d5762000c4d62001e7b565b14155b1562000c6f57604051637b32c26b60e01b815260040160405180910390fd5b600062000c88602084018035906200051a908662001e91565b90506200052f83838362001780565b60408051808201909152600080825260208201526200054182620018be565b6000828260405160200162000cdb92919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b600080600062000d0d8686866000620018df565b9050600062000d1c8762000e12565b919791965090945050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b600081815260076020908152604090912060020180546001600160a01b0319166001600160a01b03851617905562000d939084018462001e91565b63ffffffff168360200135827f16285b1cf634d546d51fefe55f6e63e5edf970d2a3d2bd50b55a8cfad25e8b56853360405162000de69291906001600160a01b0392831681529116602082015260400190565b60405180910390a4505050565b60008062000e018362001737565b546001600160a01b03169392505050565b60008062000e208362001737565b600101546001600160a01b03169050806200054157604051630558a50760e31b815260040160405180910390fd5b60008481526007602052604090206002810154600160a01b900460ff1662000e8957604051631c999e7d60e11b815260040160405180910390fd5b60018101546001600160a01b03858116911614158062000eb6575080546001600160a01b03848116911614155b1562000ed5576040516318707fc960e31b815260040160405180910390fd5b815160045463ffffffff908116911614801562000f9257600062000efa846020015190565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa15801562000f45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f6b919062001fa6565b111562000f8b5760405163454732f160e11b815260040160405180910390fd5b5062001019565b6000846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000fd3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ff9919062001fa6565b1115620010195760405163454732f160e11b815260040160405180910390fd5b6000868152600760209081526040808320600180820180546001600160a81b0319908116909155600283018054909116905560039091018490556001600160a01b03888116855260068452828520805463ffffffff199081168255908301869055908a16855260058452828520805490911681550192909255905133815287917f9d181adb70e733f5235f839c1eed929407ea8526e41d01f49b9fef703e78dddf910160405180910390a2505050505050565b620010db602084018462001e91565b63ffffffff161580620010f057506020830135155b156200110f576040516375ba0d7960e11b815260040160405180910390fd5b6001600160a01b038616156000816200112957876200112b565b865b905060006200113e602087018762001e91565b60045460008681526007602052604090206002015463ffffffff92831692909116919091149150600160a01b900460ff16156200118e5760405163bfa2bf9b60e01b815260040160405180910390fd5b80620013f3576040516370a0823160e01b815230600482015288906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015620011de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001204919062001fa6565b6040516340c10f1960e01b8152306004820152600160248201529091506001600160a01b038316906340c10f1990604401600060405180830381600087803b1580156200125057600080fd5b505af115801562001265573d6000803e3d6000fd5b5050505080600162001278919062001fc0565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015620012bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012e3919062001fa6565b14620013025760405163016dd8ed60e71b815260040160405180910390fd5b604051632770a7eb60e21b8152306004820152600160248201526001600160a01b03831690639dc29fac90604401600060405180830381600087803b1580156200134b57600080fd5b505af115801562001360573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528392506001600160a01b03851691506370a0823190602401602060405180830381865afa158015620013ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013d1919062001fa6565b14620013f05760405163ad6f16e360e01b815260040160405180910390fd5b50505b6040518061010001604052808c6200140c57896200140f565b60005b6001600160a01b031681526020018b60ff168152602001836001600160a01b0316815260200184620014a657836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200147a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014a0919062001f86565b620014a8565b8b5b60ff90811682526000602080840182905260016040808601829052606080870185905260809687018590528b8552600784529381902087518154898601518816600160a01b9081026001600160a81b03199283166001600160a01b0394851617178455938a01519483018054978b0151909816840296811694821694909417959095179095559486015160028501805460a089015115159097029690921693169290921793909317905560c0830151600382015560e090920151600490920191909155620015799087018762001e91565b6001600160a01b0383166000908152600560209081526040909120805463ffffffff191663ffffffff939093169290921782558701356001909101558a6200161957620015ca602087018762001e91565b6001600160a01b0389166000908152600660209081526040909120805463ffffffff191663ffffffff939093169290921782558701356001909101556200161386888662000d58565b6200162d565b84156200162d576200162d86868662001780565b6200163c602087018762001e91565b63ffffffff168660200135857f0c58c78506e2d526f5ccdba28119c9ca3b5ce48e1462e0e19bc39232db11c632858c336040516200169a939291906001600160a01b0393841681529183166020830152909116604082015260600190565b60405180910390a45050505050505050505050565b6000838383604051620016c29062001a5e565b620016d09392919062001fe2565b604051809103906000f080158015620016ed573d6000803e3d6000fd5b509050806001600160a01b0316868663ffffffff167f84d5e3618bf276f3d29a931646fdd996b398a3efa3cf6bceefc1fe7f0304059f60405160405180910390a495945050505050565b6000818152600760205260408120600180820154839291600160a01b90910460ff161015620017795760405163618cca3f60e11b815260040160405180910390fd5b9392505050565b6200178f602084018462001e91565b60045463ffffffff908116911614620017bb5760405163a56029bd60e01b815260040160405180910390fd5b600081815260076020526040902060030182905581156200185f57600060208401356040516370a0823160e01b81523060048201529091506001600160a01b038216906370a0823190602401602060405180830381865afa15801562001825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200184b919062001fa6565b600083815260076020526040902060040155505b6200186e602084018462001e91565b63ffffffff168360200135827f8976b61819dcee01042166c2c5612babc4f820a30843a7f8b23c0ddc343f6ef4853360405162000de69291909182526001600160a01b0316602082015260400190565b6040805180820190915260008082526020820152620005418260006200191d565b600481015460009063ffffffff908116908416036200190057508262000bfe565b6200190b8562001737565b546001600160a01b0316905062000bfe565b604080518082019091526000808252602082015260408051808201909152600080825260208201526001600160a01b0384166200195c57905062000541565b506001600160a01b03831660009081526005830160209081526040918290208251808401909352805463ffffffff168084526001909101549183019190915215620019a957905062000541565b620019b5848462001a1d565b15620019dd57600483015463ffffffff1681526001600160a01b038416602082015262001779565b506001600160a01b03831660009081526006830160209081526040918290208251808401909352805463ffffffff16835260010154908201529392505050565b6001600160a01b038216600090815260068201602052604081205463ffffffff161562001a4d5750600062000541565b50506001600160a01b03163b151590565b6119d9806200201f83390190565b80356001600160a01b038116811462001a8457600080fd5b919050565b60006020828403121562001a9c57600080fd5b620017798262001a6c565b803563ffffffff8116811462001a8457600080fd5b6000806040838503121562001ad057600080fd5b8235915062001ae26020840162001aa7565b90509250929050565b60006040828403121562001afe57600080fd5b50919050565b6000806060838503121562001b1857600080fd5b62001b24848462001aeb565b915062001ae26040840162001a6c565b60006020828403121562001b4757600080fd5b5035919050565b60008060006080848603121562001b6457600080fd5b62001b70858562001aeb565b925062001b806040850162001a6c565b915062001b906060850162001a6c565b90509250925092565b60006040828403121562001bac57600080fd5b62001779838362001aeb565b60008060006060848603121562001bce57600080fd5b8335925062001be06020850162001a6c565b915062001b906040850162001a6c565b60ff8116811462001c0057600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f83011262001c2b57600080fd5b813567ffffffffffffffff8082111562001c495762001c4962001c03565b604051601f8301601f19908116603f0116810190828211818310171562001c745762001c7462001c03565b8160405283815286602085880101111562001c8e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806000806000610100888a03121562001ccb57600080fd5b62001cd7898962001aeb565b9650604088013562001ce98162001bf0565b9550606088013567ffffffffffffffff8082111562001d0757600080fd5b62001d158b838c0162001c19565b965060808a013591508082111562001d2c57600080fd5b5062001d3b8a828b0162001c19565b94505062001d4c60a0890162001a6c565b925062001d5c60c0890162001a6c565b915060e0880135905092959891949750929550565b60008060006080848603121562001d8757600080fd5b62001d93858562001aeb565b9250604084013567ffffffffffffffff8082111562001db157600080fd5b62001dbf8783880162001c19565b9350606086013591508082111562001dd657600080fd5b5062001de58682870162001c19565b9150509250925092565b60008060008060a0858703121562001e0657600080fd5b62001e12868662001aeb565b935062001e226040860162001a6c565b925062001e326060860162001a6c565b915062001e426080860162001a6c565b905092959194509250565b6000806060838503121562001e6157600080fd5b62001e6d848462001aeb565b946040939093013593505050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121562001ea457600080fd5b620017798262001aa7565b60006040828403121562001ec257600080fd5b6040516040810181811067ffffffffffffffff8211171562001ee85762001ee862001c03565b60405262001ef68362001aa7565b8152602083013560208201528091505092915050565b6000815180845260005b8181101562001f345760208185018101518683018201520162001f16565b506000602082860101526020601f19601f83011685010191505092915050565b60408152600062001f69604083018562001f0c565b828103602084015262001f7d818562001f0c565b95945050505050565b60006020828403121562001f9957600080fd5b8151620017798162001bf0565b60006020828403121562001fb957600080fd5b5051919050565b808201808211156200054157634e487b7160e01b600052601160045260246000fd5b60ff8416815260606020820152600062002000606083018562001f0c565b828103604084015262002014818562001f0c565b969550505050505056fe60e06040523480156200001157600080fd5b50604051620019d9380380620019d9833981016040819052620000349162000245565b828282604051806040016040528060018152602001603160f81b8152506200006b620000656200012c60201b60201c565b62000130565b600462000079848262000358565b50600562000088838262000358565b506006805460ff191660ff9590951694909417909355508051602091820120825192820192909220600983905560c0818152466080818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801528082019790975260608701949094528501523060a08086018290528351808703820181529590920190925283519390920192909220600855525062000424915050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001a857600080fd5b81516001600160401b0380821115620001c557620001c562000180565b604051601f8301601f19908116603f01168101908282118183101715620001f057620001f062000180565b816040528381526020925086838588010111156200020d57600080fd5b600091505b8382101562000231578582018301518183018401529082019062000212565b600093810190920192909252949350505050565b6000806000606084860312156200025b57600080fd5b835160ff811681146200026d57600080fd5b60208501519093506001600160401b03808211156200028b57600080fd5b620002998783880162000196565b93506040860151915080821115620002b057600080fd5b50620002bf8682870162000196565b9150509250925092565b600181811c90821680620002de57607f821691505b602082108103620002ff57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200035357600081815260208120601f850160051c810160208610156200032e5750805b601f850160051c820191505b818110156200034f578281556001016200033a565b5050505b505050565b81516001600160401b0381111562000374576200037462000180565b6200038c81620003858454620002c9565b8462000305565b602080601f831160018114620003c45760008415620003ab5750858301515b600019600386901b1c1916600185901b1785556200034f565b600085815260208120601f198616915b82811015620003f557888601518255948401946001909101908401620003d4565b5085821015620004145787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05161157e6200045b600039600081816105400152610ba601526000610b2501526000610b4f015261157e6000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637ecebe00116100ad578063a9059cbb11610071578063a9059cbb14610269578063b7b090ee1461027c578063d505accf1461028f578063dd62ed3e146102a2578063f2fde38b146102b557600080fd5b80637ecebe001461020d5780638da5cb5b1461022057806395d89b411461023b5780639dc29fac14610243578063a457c2d71461025657600080fd5b80633644e515116100f45780633644e515146101ac57806339509351146101b457806340c10f19146101c757806370a08231146101dc578063715018a61461020557600080fd5b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017257806323b872dd14610184578063313ce56714610197575b600080fd5b6101396102c8565b604051610146919061115b565b60405180910390f35b61016261015d3660046111c5565b61035a565b6040519015158152602001610146565b6003545b604051908152602001610146565b6101626101923660046111ef565b610371565b60065460405160ff9091168152602001610146565b610176610393565b6101626101c23660046111c5565b6103a2565b6101da6101d53660046111c5565b6103de565b005b6101766101ea36600461122b565b6001600160a01b031660009081526001602052604090205490565b6101da6103f4565b61017661021b36600461122b565b610408565b6000546040516001600160a01b039091168152602001610146565b610139610426565b6101da6102513660046111c5565b610435565b6101626102643660046111c5565b610447565b6101626102773660046111c5565b6104c6565b6101da61028a366004611296565b6104d3565b6101da61029d366004611302565b6105c6565b6101766102b0366004611375565b61072a565b6101da6102c336600461122b565b610755565b6060600480546102d7906113a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610303906113a8565b80156103505780601f1061032557610100808354040283529160200191610350565b820191906000526020600020905b81548152906001019060200180831161033357829003601f168201915b5050505050905090565b60006103673384846107ce565b5060015b92915050565b600061037e8433846108f3565b61038984848461096d565b5060019392505050565b600061039d610b18565b905090565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916103679185906103d99086906113dc565b6107ce565b6103e6610bca565b6103f08282610c24565b5050565b6103fc610bca565b6104066000610ce5565b565b6001600160a01b03811660009081526007602052604081205461036b565b6060600580546102d7906113a8565b61043d610bca565b6103f08282610d35565b600080610454338561072a565b9050828110156104b95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61038933858584036107ce565b600061036733848461096d565b6104db610bca565b60046104e8848683611461565b5060056104f6828483611461565b5060008484604051610509929190611522565b604051908190039020600981905590506105647f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f827f0000000000000000000000000000000000000000000000000000000000000000610e66565b6008556040516105779084908490611522565b6040518091039020858560405161058f929190611522565b604051908190038120907f1ec4c73af923253fb2c28a509dd78d342709289a09929d78c64c0b8e047efbcd90600090a35050505050565b834211156106165760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104b0565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886106458c610eaf565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106a082610ed7565b905060006106b082878787610f25565b9050896001600160a01b0316816001600160a01b0316146107135760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104b0565b61071e8a8a8a6107ce565b50505050505050505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b61075d610bca565b6001600160a01b0381166107c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104b0565b6107cb81610ce5565b50565b6001600160a01b0383166108305760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104b0565b6001600160a01b0382166108915760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104b0565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006108ff848461072a565b90506000198114610967578181101561095a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104b0565b61096784848484036107ce565b50505050565b6001600160a01b0383166109d15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104b0565b6001600160a01b038216610a335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104b0565b6001600160a01b03831660009081526001602052604090205481811015610aab5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104b0565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b0b9086815260200190565b60405180910390a3610967565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b7157507f000000000000000000000000000000000000000000000000000000000000000046145b15610b7d575060085490565b61039d7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6009547f0000000000000000000000000000000000000000000000000000000000000000610e66565b6000546001600160a01b031633146104065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b0565b6001600160a01b038216610c7a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104b0565b8060036000828254610c8c91906113dc565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216610d955760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104b0565b6001600160a01b03821660009081526001602052604090205481811015610e095760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104b0565b6001600160a01b03831660008181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016108e6565b505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b600061036b610ee4610b18565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610f3687878787610f4d565b91509150610f4381611011565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610f845750600090506003611008565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610fd8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661100157600060019250925050611008565b9150600090505b94509492505050565b600081600481111561102557611025611532565b0361102d5750565b600181600481111561104157611041611532565b0361108e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104b0565b60028160048111156110a2576110a2611532565b036110ef5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104b0565b600381600481111561110357611103611532565b036107cb5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104b0565b600060208083528351808285015260005b818110156111885785810183015185820160400152820161116c565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146111c057600080fd5b919050565b600080604083850312156111d857600080fd5b6111e1836111a9565b946020939093013593505050565b60008060006060848603121561120457600080fd5b61120d846111a9565b925061121b602085016111a9565b9150604084013590509250925092565b60006020828403121561123d57600080fd5b611246826111a9565b9392505050565b60008083601f84011261125f57600080fd5b50813567ffffffffffffffff81111561127757600080fd5b60208301915083602082850101111561128f57600080fd5b9250929050565b600080600080604085870312156112ac57600080fd5b843567ffffffffffffffff808211156112c457600080fd5b6112d08883890161124d565b909650945060208701359150808211156112e957600080fd5b506112f68782880161124d565b95989497509550505050565b600080600080600080600060e0888a03121561131d57600080fd5b611326886111a9565b9650611334602089016111a9565b95506040880135945060608801359350608088013560ff8116811461135857600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561138857600080fd5b611391836111a9565b915061139f602084016111a9565b90509250929050565b600181811c908216806113bc57607f821691505b602082108103610ed157634e487b7160e01b600052602260045260246000fd5b8082018082111561036b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b601f821115610e6157600081815260208120601f850160051c8101602086101561143a5750805b601f850160051c820191505b8181101561145957828155600101611446565b505050505050565b67ffffffffffffffff831115611479576114796113fd565b61148d8361148783546113a8565b83611413565b6000601f8411600181146114c157600085156114a95750838201355b600019600387901b1c1916600186901b17835561151b565b600083815260209020601f19861690835b828110156114f257868501358255602094850194600190920191016114d2565b508682101561150f5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8183823760009101908152919050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212208113c928e03165e19b5c7ac5b67b85c32ab586cd042677306fbd142d27afccf664736f6c63430008110033a2646970667358221220300cc646d0359b86871a6e263ab844429c60311081ebea2afdd51b016410d91c64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3A2D DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH3 0x145 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9B598519 GT PUSH3 0xBB JUMPI DUP1 PUSH4 0xBD8671A7 GT PUSH3 0x7A JUMPI DUP1 PUSH4 0xBD8671A7 EQ PUSH3 0x3FF JUMPI DUP1 PUSH4 0xC4058429 EQ PUSH3 0x416 JUMPI DUP1 PUSH4 0xE1CB3958 EQ PUSH3 0x42D JUMPI DUP1 PUSH4 0xE9D7BCEC EQ PUSH3 0x444 JUMPI DUP1 PUSH4 0xF1537686 EQ PUSH3 0x45B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9B598519 EQ PUSH3 0x374 JUMPI DUP1 PUSH4 0xA1B19301 EQ PUSH3 0x3A3 JUMPI DUP1 PUSH4 0xAD4C7771 EQ PUSH3 0x3BA JUMPI DUP1 PUSH4 0xAE8BC0DE EQ PUSH3 0x3D1 JUMPI DUP1 PUSH4 0xB64A5E07 EQ PUSH3 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x57BD0A32 GT PUSH3 0x108 JUMPI DUP1 PUSH4 0x57BD0A32 EQ PUSH3 0x26C JUMPI DUP1 PUSH4 0x5A2164E5 EQ PUSH3 0x2AD JUMPI DUP1 PUSH4 0x60062091 EQ PUSH3 0x2C4 JUMPI DUP1 PUSH4 0x80DC2248 EQ PUSH3 0x328 JUMPI DUP1 PUSH4 0x949DE969 EQ PUSH3 0x33F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3E418C2 EQ PUSH3 0x14A JUMPI DUP1 PUSH4 0x7A38D7B EQ PUSH3 0x1D4 JUMPI DUP1 PUSH4 0x1506E463 EQ PUSH3 0x20C JUMPI DUP1 PUSH4 0x1ECF6F9F EQ PUSH3 0x225 JUMPI DUP1 PUSH4 0x2C1999D0 EQ PUSH3 0x255 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1AE PUSH3 0x15B CALLDATASIZE PUSH1 0x4 PUSH3 0x1A89 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP4 DUP3 KECCAK256 DUP1 SLOAD PUSH4 0xFFFFFFFF AND DUP7 MSTORE SWAP3 SWAP1 SWAP2 MSTORE DUP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD MLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH3 0x1EB PUSH3 0x1E5 CALLDATASIZE PUSH1 0x4 PUSH3 0x1ABC JUMP JUMPDEST PUSH3 0x472 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH3 0x1CB JUMP JUMPDEST PUSH3 0x223 PUSH3 0x21D CALLDATASIZE PUSH1 0x4 PUSH3 0x1B04 JUMP JUMPDEST PUSH3 0x498 JUMP JUMPDEST STOP JUMPDEST PUSH3 0x23C PUSH3 0x236 CALLDATASIZE PUSH1 0x4 PUSH3 0x1B34 JUMP JUMPDEST PUSH3 0x534 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x1CB JUMP JUMPDEST PUSH3 0x23C PUSH3 0x266 CALLDATASIZE PUSH1 0x4 PUSH3 0x1B34 JUMP JUMPDEST PUSH3 0x547 JUMP JUMPDEST PUSH3 0x29C PUSH3 0x27D CALLDATASIZE PUSH1 0x4 PUSH3 0x1B34 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x1CB JUMP JUMPDEST PUSH3 0x223 PUSH3 0x2BE CALLDATASIZE PUSH1 0x4 PUSH3 0x1B4E JUMP JUMPDEST PUSH3 0x554 JUMP JUMPDEST PUSH3 0x1AE PUSH3 0x2D5 CALLDATASIZE PUSH1 0x4 PUSH3 0x1A89 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP4 DUP3 KECCAK256 DUP1 SLOAD PUSH4 0xFFFFFFFF AND DUP7 MSTORE SWAP3 SWAP1 SWAP2 MSTORE DUP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH3 0x23C PUSH3 0x339 CALLDATASIZE PUSH1 0x4 PUSH3 0x1B99 JUMP JUMPDEST PUSH3 0x5FC JUMP JUMPDEST PUSH3 0x365 PUSH3 0x350 CALLDATASIZE PUSH1 0x4 PUSH3 0x1B34 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x1CB JUMP JUMPDEST PUSH3 0x23C PUSH3 0x385 CALLDATASIZE PUSH1 0x4 PUSH3 0x1B34 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH3 0x223 PUSH3 0x3B4 CALLDATASIZE PUSH1 0x4 PUSH3 0x1BB8 JUMP JUMPDEST PUSH3 0x619 JUMP JUMPDEST PUSH3 0x23C PUSH3 0x3CB CALLDATASIZE PUSH1 0x4 PUSH3 0x1B99 JUMP JUMPDEST PUSH3 0x6C6 JUMP JUMPDEST PUSH3 0x29C PUSH3 0x3E2 CALLDATASIZE PUSH1 0x4 PUSH3 0x1B99 JUMP JUMPDEST PUSH3 0x6E9 JUMP JUMPDEST PUSH3 0x23C PUSH3 0x3F9 CALLDATASIZE PUSH1 0x4 PUSH3 0x1CAE JUMP JUMPDEST PUSH3 0x706 JUMP JUMPDEST PUSH3 0x23C PUSH3 0x410 CALLDATASIZE PUSH1 0x4 PUSH3 0x1B99 JUMP JUMPDEST PUSH3 0x8D7 JUMP JUMPDEST PUSH3 0x223 PUSH3 0x427 CALLDATASIZE PUSH1 0x4 PUSH3 0x1D71 JUMP JUMPDEST PUSH3 0x8FA JUMP JUMPDEST PUSH3 0x23C PUSH3 0x43E CALLDATASIZE PUSH1 0x4 PUSH3 0x1DEF JUMP JUMPDEST PUSH3 0xA96 JUMP JUMPDEST PUSH3 0x223 PUSH3 0x455 CALLDATASIZE PUSH1 0x4 PUSH3 0x1E4D JUMP JUMPDEST PUSH3 0xC06 JUMP JUMPDEST PUSH3 0x1AE PUSH3 0x46C CALLDATASIZE PUSH1 0x4 PUSH3 0x1A89 JUMP JUMPDEST PUSH3 0xC97 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH3 0x48D PUSH3 0x485 DUP6 DUP6 PUSH3 0xCB6 JUMP JUMPDEST DUP6 DUP6 PUSH3 0xCF9 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST CALLER PUSH3 0x4A3 PUSH3 0xD2A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH3 0x4E2 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH3 0x4DF JUMPI PUSH3 0x4DF PUSH3 0x1E7B JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH3 0x501 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x520 PUSH1 0x20 DUP5 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP7 PUSH3 0x1E91 JUMP JUMPDEST PUSH3 0xCB6 JUMP JUMPDEST SWAP1 POP PUSH3 0x52F DUP4 DUP4 DUP4 PUSH3 0xD58 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x541 DUP3 PUSH3 0xDF3 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x541 DUP3 PUSH3 0xE12 JUMP JUMPDEST CALLER PUSH3 0x55F PUSH3 0xD2A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH3 0x59E JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH3 0x59B JUMPI PUSH3 0x59B PUSH3 0x1E7B JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH3 0x5BD JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x5D6 PUSH1 0x20 DUP6 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP8 PUSH3 0x1E91 JUMP JUMPDEST SWAP1 POP PUSH3 0x5F6 DUP2 DUP5 DUP5 PUSH3 0x5F0 CALLDATASIZE DUP10 SWAP1 SUB DUP10 ADD DUP10 PUSH3 0x1EAF JUMP JUMPDEST PUSH3 0xE4E JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x541 PUSH3 0x385 PUSH1 0x20 DUP5 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP7 PUSH3 0x1E91 JUMP JUMPDEST CALLER PUSH3 0x624 PUSH3 0xD2A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH3 0x663 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH3 0x660 JUMPI PUSH3 0x660 PUSH3 0x1E7B JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH3 0x682 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE PUSH1 0x1 ADD SLOAD SWAP1 DUP3 ADD MSTORE PUSH3 0x5F6 DUP5 DUP5 DUP5 DUP5 PUSH3 0xE4E JUMP JUMPDEST PUSH1 0x0 PUSH3 0x541 PUSH3 0x6E3 PUSH1 0x20 DUP5 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP7 PUSH3 0x1E91 JUMP JUMPDEST PUSH3 0xDF3 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x541 PUSH3 0x27D PUSH1 0x20 DUP5 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP7 PUSH3 0x1E91 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH3 0x713 PUSH3 0xD2A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH3 0x752 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH3 0x74F JUMPI PUSH3 0x74F PUSH3 0x1E7B JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH3 0x771 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x78A PUSH1 0x20 DUP11 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP13 PUSH3 0x1E91 JUMP JUMPDEST PUSH1 0x4 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH4 0xFFFFFFFF AND PUSH3 0x7A8 PUSH1 0x20 DUP13 ADD DUP13 PUSH3 0x1E91 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ SWAP1 POP DUP1 ISZERO PUSH3 0x838 JUMPI PUSH1 0x20 DUP11 ADD CALLDATALOAD SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND ISZERO DUP1 ISZERO SWAP1 PUSH3 0x7EA JUMPI POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST DUP1 PUSH3 0x7FE JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND ISZERO ISZERO JUMPDEST ISZERO PUSH3 0x81D JUMPI PUSH1 0x40 MLOAD PUSH4 0x22D8335 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x832 PUSH1 0x1 DUP11 PUSH1 0x0 DUP7 PUSH1 0x0 DUP16 DUP11 DUP10 PUSH3 0x10CC JUMP JUMPDEST PUSH3 0x8CA JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO ISZERO DUP1 PUSH3 0x875 JUMPI POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO JUMPDEST ISZERO PUSH3 0x894 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAE154E03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x8B4 PUSH1 0x20 DUP12 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x8AB SWAP1 DUP14 PUSH3 0x1E91 JUMP JUMPDEST DUP12 DUP12 DUP12 PUSH3 0x16AF JUMP JUMPDEST SWAP3 POP PUSH3 0x8CA PUSH1 0x0 DUP11 DUP9 DUP7 DUP10 DUP16 PUSH1 0x0 DUP10 PUSH3 0x10CC JUMP JUMPDEST POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x541 PUSH3 0x8F4 PUSH1 0x20 DUP5 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP7 PUSH3 0x1E91 JUMP JUMPDEST PUSH3 0xE12 JUMP JUMPDEST CALLER PUSH3 0x905 PUSH3 0xD2A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH3 0x944 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH3 0x941 JUMPI PUSH3 0x941 PUSH3 0x1E7B JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH3 0x963 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x97C PUSH1 0x20 DUP6 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP8 PUSH3 0x1E91 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH3 0x98B DUP3 PUSH3 0x1737 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 PUSH3 0x9B6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9DB40A25 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x9C5 PUSH1 0x20 DUP7 ADD DUP7 PUSH3 0x1E91 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF SWAP2 DUP3 AND SWAP2 AND SUB PUSH3 0x9F1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE5A87CB PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH3 0xA2B JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D665D99 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5BD84877 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0xB7B090EE SWAP1 PUSH3 0xA5B SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH3 0x1F54 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xA76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0xA8B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH3 0xAA3 PUSH3 0xD2A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH3 0xAE2 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH3 0xADF JUMPI PUSH3 0xADF PUSH3 0x1E7B JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH3 0xB01 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH3 0xB29 JUMPI PUSH1 0x40 MLOAD PUSH4 0x13635803 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF AND PUSH3 0xB41 PUSH1 0x20 DUP8 ADD DUP8 PUSH3 0x1E91 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND SUB PUSH3 0xB66 JUMPI PUSH1 0x40 MLOAD PUSH4 0x333DE67D PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0xB7F PUSH1 0x20 DUP8 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP10 PUSH3 0x1E91 JUMP JUMPDEST SWAP1 POP PUSH3 0xBF9 PUSH1 0x0 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xBC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xBEC SWAP2 SWAP1 PUSH3 0x1F86 JUMP JUMPDEST DUP7 DUP9 DUP8 DUP12 PUSH1 0x0 DUP9 PUSH3 0x10CC JUMP JUMPDEST DUP5 SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST CALLER PUSH3 0xC11 PUSH3 0xD2A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH3 0xC50 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH3 0xC4D JUMPI PUSH3 0xC4D PUSH3 0x1E7B JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH3 0xC6F JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0xC88 PUSH1 0x20 DUP5 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP7 PUSH3 0x1E91 JUMP JUMPDEST SWAP1 POP PUSH3 0x52F DUP4 DUP4 DUP4 PUSH3 0x1780 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH3 0x541 DUP3 PUSH3 0x18BE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH3 0xCDB SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH4 0xFFFFFFFF AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH3 0xD0D DUP7 DUP7 DUP7 PUSH1 0x0 PUSH3 0x18DF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH3 0xD1C DUP8 PUSH3 0xE12 JUMP JUMPDEST SWAP2 SWAP8 SWAP2 SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 PUSH1 0x2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND OR SWAP1 SSTORE PUSH3 0xD93 SWAP1 DUP5 ADD DUP5 PUSH3 0x1E91 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP4 PUSH1 0x20 ADD CALLDATALOAD DUP3 PUSH32 0x16285B1CF634D546D51FEFE55F6E63E5EDF970D2A3D2BD50B55A8CFAD25E8B56 DUP6 CALLER PUSH1 0x40 MLOAD PUSH3 0xDE6 SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH3 0xE01 DUP4 PUSH3 0x1737 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH3 0xE20 DUP4 PUSH3 0x1737 JUMP JUMPDEST PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 PUSH3 0x541 JUMPI PUSH1 0x40 MLOAD PUSH4 0x558A507 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH3 0xE89 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1C999E7D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP2 AND EQ ISZERO DUP1 PUSH3 0xEB6 JUMPI POP DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 AND EQ ISZERO JUMPDEST ISZERO PUSH3 0xED5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x18707FC9 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH3 0xF92 JUMPI PUSH1 0x0 PUSH3 0xEFA DUP5 PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xF45 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xF6B SWAP2 SWAP1 PUSH3 0x1FA6 JUMP JUMPDEST GT ISZERO PUSH3 0xF8B JUMPI PUSH1 0x40 MLOAD PUSH4 0x454732F1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH3 0x1019 JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xFD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xFF9 SWAP2 SWAP1 PUSH3 0x1FA6 JUMP JUMPDEST GT ISZERO PUSH3 0x1019 JUMPI PUSH1 0x40 MLOAD PUSH4 0x454732F1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 DUP1 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP4 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH1 0x3 SWAP1 SWAP2 ADD DUP5 SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND DUP6 MSTORE PUSH1 0x6 DUP5 MSTORE DUP3 DUP6 KECCAK256 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT SWAP1 DUP2 AND DUP3 SSTORE SWAP1 DUP4 ADD DUP7 SWAP1 SSTORE SWAP1 DUP11 AND DUP6 MSTORE PUSH1 0x5 DUP5 MSTORE DUP3 DUP6 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 AND DUP2 SSTORE ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP1 MLOAD CALLER DUP2 MSTORE DUP8 SWAP2 PUSH32 0x9D181ADB70E733F5235F839C1EED929407EA8526E41D01F49B9FEF703E78DDDF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH3 0x10DB PUSH1 0x20 DUP5 ADD DUP5 PUSH3 0x1E91 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND ISZERO DUP1 PUSH3 0x10F0 JUMPI POP PUSH1 0x20 DUP4 ADD CALLDATALOAD ISZERO JUMPDEST ISZERO PUSH3 0x110F JUMPI PUSH1 0x40 MLOAD PUSH4 0x75BA0D79 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND ISZERO PUSH1 0x0 DUP2 PUSH3 0x1129 JUMPI DUP8 PUSH3 0x112B JUMP JUMPDEST DUP7 JUMPDEST SWAP1 POP PUSH1 0x0 PUSH3 0x113E PUSH1 0x20 DUP8 ADD DUP8 PUSH3 0x1E91 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH4 0xFFFFFFFF SWAP3 DUP4 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 EQ SWAP2 POP PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH3 0x118E JUMPI PUSH1 0x40 MLOAD PUSH4 0xBFA2BF9B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH3 0x13F3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP9 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x11DE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x1204 SWAP2 SWAP1 PUSH3 0x1FA6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x40C10F19 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x40C10F19 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x1250 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x1265 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x1 PUSH3 0x1278 SWAP2 SWAP1 PUSH3 0x1FC0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x12BD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x12E3 SWAP2 SWAP1 PUSH3 0x1FA6 JUMP JUMPDEST EQ PUSH3 0x1302 JUMPI PUSH1 0x40 MLOAD PUSH4 0x16DD8ED PUSH1 0xE7 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2770A7EB PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x9DC29FAC SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x134B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x1360 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP4 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 POP PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x13AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x13D1 SWAP2 SWAP1 PUSH3 0x1FA6 JUMP JUMPDEST EQ PUSH3 0x13F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD6F16E3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 DUP13 PUSH3 0x140C JUMPI DUP10 PUSH3 0x140F JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH3 0x14A6 JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x147A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x14A0 SWAP2 SWAP1 PUSH3 0x1F86 JUMP JUMPDEST PUSH3 0x14A8 JUMP JUMPDEST DUP12 JUMPDEST PUSH1 0xFF SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x40 DUP1 DUP7 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP8 ADD DUP6 SWAP1 MSTORE PUSH1 0x80 SWAP7 DUP8 ADD DUP6 SWAP1 MSTORE DUP12 DUP6 MSTORE PUSH1 0x7 DUP5 MSTORE SWAP4 DUP2 SWAP1 KECCAK256 DUP8 MLOAD DUP2 SLOAD DUP10 DUP7 ADD MLOAD DUP9 AND PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DUP2 MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND OR OR DUP5 SSTORE SWAP4 DUP11 ADD MLOAD SWAP5 DUP4 ADD DUP1 SLOAD SWAP8 DUP12 ADD MLOAD SWAP1 SWAP9 AND DUP5 MUL SWAP7 DUP2 AND SWAP5 DUP3 AND SWAP5 SWAP1 SWAP5 OR SWAP6 SWAP1 SWAP6 OR SWAP1 SWAP6 SSTORE SWAP5 DUP7 ADD MLOAD PUSH1 0x2 DUP6 ADD DUP1 SLOAD PUSH1 0xA0 DUP10 ADD MLOAD ISZERO ISZERO SWAP1 SWAP8 MUL SWAP7 SWAP1 SWAP3 AND SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0x3 DUP3 ADD SSTORE PUSH1 0xE0 SWAP1 SWAP3 ADD MLOAD PUSH1 0x4 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH3 0x1579 SWAP1 DUP8 ADD DUP8 PUSH3 0x1E91 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR DUP3 SSTORE DUP8 ADD CALLDATALOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE DUP11 PUSH3 0x1619 JUMPI PUSH3 0x15CA PUSH1 0x20 DUP8 ADD DUP8 PUSH3 0x1E91 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR DUP3 SSTORE DUP8 ADD CALLDATALOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE PUSH3 0x1613 DUP7 DUP9 DUP7 PUSH3 0xD58 JUMP JUMPDEST PUSH3 0x162D JUMP JUMPDEST DUP5 ISZERO PUSH3 0x162D JUMPI PUSH3 0x162D DUP7 DUP7 DUP7 PUSH3 0x1780 JUMP JUMPDEST PUSH3 0x163C PUSH1 0x20 DUP8 ADD DUP8 PUSH3 0x1E91 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP7 PUSH1 0x20 ADD CALLDATALOAD DUP6 PUSH32 0xC58C78506E2D526F5CCDBA28119C9CA3B5CE48E1462E0E19BC39232DB11C632 DUP6 DUP13 CALLER PUSH1 0x40 MLOAD PUSH3 0x169A SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH3 0x16C2 SWAP1 PUSH3 0x1A5E JUMP JUMPDEST PUSH3 0x16D0 SWAP4 SWAP3 SWAP2 SWAP1 PUSH3 0x1FE2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x16ED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP7 PUSH4 0xFFFFFFFF AND PUSH32 0x84D5E3618BF276F3D29A931646FDD996B398A3EFA3CF6BCEEFC1FE7F0304059F PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 DUP1 DUP3 ADD SLOAD DUP4 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0xFF AND LT ISZERO PUSH3 0x1779 JUMPI PUSH1 0x40 MLOAD PUSH4 0x618CCA3F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH3 0x178F PUSH1 0x20 DUP5 ADD DUP5 PUSH3 0x1E91 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP2 AND EQ PUSH3 0x17BB JUMPI PUSH1 0x40 MLOAD PUSH4 0xA56029BD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD DUP3 SWAP1 SSTORE DUP2 ISZERO PUSH3 0x185F JUMPI PUSH1 0x0 PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x1825 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x184B SWAP2 SWAP1 PUSH3 0x1FA6 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SSTORE POP JUMPDEST PUSH3 0x186E PUSH1 0x20 DUP5 ADD DUP5 PUSH3 0x1E91 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP4 PUSH1 0x20 ADD CALLDATALOAD DUP3 PUSH32 0x8976B61819DCEE01042166C2C5612BABC4F820A30843A7F8B23C0DDC343F6EF4 DUP6 CALLER PUSH1 0x40 MLOAD PUSH3 0xDE6 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH3 0x541 DUP3 PUSH1 0x0 PUSH3 0x191D JUMP JUMPDEST PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP5 AND SUB PUSH3 0x1900 JUMPI POP DUP3 PUSH3 0xBFE JUMP JUMPDEST PUSH3 0x190B DUP6 PUSH3 0x1737 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH3 0xBFE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH3 0x195C JUMPI SWAP1 POP PUSH3 0x541 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 DUP4 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD PUSH4 0xFFFFFFFF AND DUP1 DUP5 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ISZERO PUSH3 0x19A9 JUMPI SWAP1 POP PUSH3 0x541 JUMP JUMPDEST PUSH3 0x19B5 DUP5 DUP5 PUSH3 0x1A1D JUMP JUMPDEST ISZERO PUSH3 0x19DD JUMPI PUSH1 0x4 DUP4 ADD SLOAD PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH3 0x1779 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 DUP4 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE PUSH1 0x1 ADD SLOAD SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND ISZERO PUSH3 0x1A4D JUMPI POP PUSH1 0x0 PUSH3 0x541 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x19D9 DUP1 PUSH3 0x201F DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1A84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1A9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1779 DUP3 PUSH3 0x1A6C JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH3 0x1A84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x1AD0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH3 0x1AE2 PUSH1 0x20 DUP5 ADD PUSH3 0x1AA7 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1AFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x1B18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1B24 DUP5 DUP5 PUSH3 0x1AEB JUMP JUMPDEST SWAP2 POP PUSH3 0x1AE2 PUSH1 0x40 DUP5 ADD PUSH3 0x1A6C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1B47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x1B64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1B70 DUP6 DUP6 PUSH3 0x1AEB JUMP JUMPDEST SWAP3 POP PUSH3 0x1B80 PUSH1 0x40 DUP6 ADD PUSH3 0x1A6C JUMP JUMPDEST SWAP2 POP PUSH3 0x1B90 PUSH1 0x60 DUP6 ADD PUSH3 0x1A6C JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1BAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1779 DUP4 DUP4 PUSH3 0x1AEB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x1BCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH3 0x1BE0 PUSH1 0x20 DUP6 ADD PUSH3 0x1A6C JUMP JUMPDEST SWAP2 POP PUSH3 0x1B90 PUSH1 0x40 DUP6 ADD PUSH3 0x1A6C JUMP JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH3 0x1C00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x1C2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH3 0x1C49 JUMPI PUSH3 0x1C49 PUSH3 0x1C03 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x1C74 JUMPI PUSH3 0x1C74 PUSH3 0x1C03 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x1C8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 DUP9 DUP11 SUB SLT ISZERO PUSH3 0x1CCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1CD7 DUP10 DUP10 PUSH3 0x1AEB JUMP JUMPDEST SWAP7 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH3 0x1CE9 DUP2 PUSH3 0x1BF0 JUMP JUMPDEST SWAP6 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH3 0x1D07 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1D15 DUP12 DUP4 DUP13 ADD PUSH3 0x1C19 JUMP JUMPDEST SWAP7 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x1D2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x1D3B DUP11 DUP3 DUP12 ADD PUSH3 0x1C19 JUMP JUMPDEST SWAP5 POP POP PUSH3 0x1D4C PUSH1 0xA0 DUP10 ADD PUSH3 0x1A6C JUMP JUMPDEST SWAP3 POP PUSH3 0x1D5C PUSH1 0xC0 DUP10 ADD PUSH3 0x1A6C JUMP JUMPDEST SWAP2 POP PUSH1 0xE0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x1D87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1D93 DUP6 DUP6 PUSH3 0x1AEB JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH3 0x1DB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1DBF DUP8 DUP4 DUP9 ADD PUSH3 0x1C19 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x1DD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x1DE5 DUP7 DUP3 DUP8 ADD PUSH3 0x1C19 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x1E06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1E12 DUP7 DUP7 PUSH3 0x1AEB JUMP JUMPDEST SWAP4 POP PUSH3 0x1E22 PUSH1 0x40 DUP7 ADD PUSH3 0x1A6C JUMP JUMPDEST SWAP3 POP PUSH3 0x1E32 PUSH1 0x60 DUP7 ADD PUSH3 0x1A6C JUMP JUMPDEST SWAP2 POP PUSH3 0x1E42 PUSH1 0x80 DUP7 ADD PUSH3 0x1A6C JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x1E61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1E6D DUP5 DUP5 PUSH3 0x1AEB JUMP JUMPDEST SWAP5 PUSH1 0x40 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1EA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1779 DUP3 PUSH3 0x1AA7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1EC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH3 0x1EE8 JUMPI PUSH3 0x1EE8 PUSH3 0x1C03 JUMP JUMPDEST PUSH1 0x40 MSTORE PUSH3 0x1EF6 DUP4 PUSH3 0x1AA7 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x1F34 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH3 0x1F16 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH3 0x1F69 PUSH1 0x40 DUP4 ADD DUP6 PUSH3 0x1F0C JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH3 0x1F7D DUP2 DUP6 PUSH3 0x1F0C JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1F99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x1779 DUP2 PUSH3 0x1BF0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1FB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH3 0x541 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0xFF DUP5 AND DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH3 0x2000 PUSH1 0x60 DUP4 ADD DUP6 PUSH3 0x1F0C JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH3 0x2014 DUP2 DUP6 PUSH3 0x1F0C JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x19D9 CODESIZE SUB DUP1 PUSH3 0x19D9 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x245 JUMP JUMPDEST DUP3 DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH3 0x6B PUSH3 0x65 PUSH3 0x12C PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x130 JUMP JUMPDEST PUSH1 0x4 PUSH3 0x79 DUP5 DUP3 PUSH3 0x358 JUMP JUMPDEST POP PUSH1 0x5 PUSH3 0x88 DUP4 DUP3 PUSH3 0x358 JUMP JUMPDEST POP PUSH1 0x6 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP6 SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE POP DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 DUP3 MLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 KECCAK256 PUSH1 0x9 DUP4 SWAP1 SSTORE PUSH1 0xC0 DUP2 DUP2 MSTORE CHAINID PUSH1 0x80 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP2 DUP9 ADD MSTORE DUP1 DUP3 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x60 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP6 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP8 SUB DUP3 ADD DUP2 MSTORE SWAP6 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP4 MLOAD SWAP4 SWAP1 SWAP3 ADD SWAP3 SWAP1 SWAP3 KECCAK256 PUSH1 0x8 SSTORE MSTORE POP PUSH3 0x424 SWAP2 POP POP JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x1C5 JUMPI PUSH3 0x1C5 PUSH3 0x180 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x1F0 JUMPI PUSH3 0x1F0 PUSH3 0x180 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x20D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x231 JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x212 JUMP JUMPDEST PUSH1 0x0 SWAP4 DUP2 ADD SWAP1 SWAP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x25B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH3 0x26D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x28B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x299 DUP8 DUP4 DUP9 ADD PUSH3 0x196 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x2B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x2BF DUP7 DUP3 DUP8 ADD PUSH3 0x196 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x2DE JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH3 0x2FF JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH3 0x353 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH3 0x32E JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x34F JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x33A JUMP JUMPDEST POP POP POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH3 0x374 JUMPI PUSH3 0x374 PUSH3 0x180 JUMP JUMPDEST PUSH3 0x38C DUP2 PUSH3 0x385 DUP5 SLOAD PUSH3 0x2C9 JUMP JUMPDEST DUP5 PUSH3 0x305 JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH3 0x3C4 JUMPI PUSH1 0x0 DUP5 ISZERO PUSH3 0x3AB JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH3 0x34F JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH3 0x3F5 JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH3 0x3D4 JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH3 0x414 JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x157E PUSH3 0x45B PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x540 ADD MSTORE PUSH2 0xBA6 ADD MSTORE PUSH1 0x0 PUSH2 0xB25 ADD MSTORE PUSH1 0x0 PUSH2 0xB4F ADD MSTORE PUSH2 0x157E PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x12C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x269 JUMPI DUP1 PUSH4 0xB7B090EE EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2A2 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x2B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x220 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x23B JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x243 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3644E515 GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1B4 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x1C7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1DC JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x205 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x14F JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x172 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x184 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x197 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x139 PUSH2 0x2C8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x146 SWAP2 SWAP1 PUSH2 0x115B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH2 0x15D CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x35A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x146 JUMP JUMPDEST PUSH1 0x3 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x146 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x192 CALLDATASIZE PUSH1 0x4 PUSH2 0x11EF JUMP JUMPDEST PUSH2 0x371 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x146 JUMP JUMPDEST PUSH2 0x176 PUSH2 0x393 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x1C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x3A2 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x1D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x3DE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x176 PUSH2 0x1EA CALLDATASIZE PUSH1 0x4 PUSH2 0x122B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x3F4 JUMP JUMPDEST PUSH2 0x176 PUSH2 0x21B CALLDATASIZE PUSH1 0x4 PUSH2 0x122B JUMP JUMPDEST PUSH2 0x408 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x146 JUMP JUMPDEST PUSH2 0x139 PUSH2 0x426 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x251 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x435 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x264 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x447 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x277 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x4C6 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x28A CALLDATASIZE PUSH1 0x4 PUSH2 0x1296 JUMP JUMPDEST PUSH2 0x4D3 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x29D CALLDATASIZE PUSH1 0x4 PUSH2 0x1302 JUMP JUMPDEST PUSH2 0x5C6 JUMP JUMPDEST PUSH2 0x176 PUSH2 0x2B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1375 JUMP JUMPDEST PUSH2 0x72A JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x2C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x122B JUMP JUMPDEST PUSH2 0x755 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x2D7 SWAP1 PUSH2 0x13A8 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x303 SWAP1 PUSH2 0x13A8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x350 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x325 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x350 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x333 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x367 CALLER DUP5 DUP5 PUSH2 0x7CE JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E DUP5 CALLER DUP5 PUSH2 0x8F3 JUMP JUMPDEST PUSH2 0x389 DUP5 DUP5 DUP5 PUSH2 0x96D JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39D PUSH2 0xB18 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x367 SWAP2 DUP6 SWAP1 PUSH2 0x3D9 SWAP1 DUP7 SWAP1 PUSH2 0x13DC JUMP JUMPDEST PUSH2 0x7CE JUMP JUMPDEST PUSH2 0x3E6 PUSH2 0xBCA JUMP JUMPDEST PUSH2 0x3F0 DUP3 DUP3 PUSH2 0xC24 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x3FC PUSH2 0xBCA JUMP JUMPDEST PUSH2 0x406 PUSH1 0x0 PUSH2 0xCE5 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x36B JUMP JUMPDEST PUSH1 0x60 PUSH1 0x5 DUP1 SLOAD PUSH2 0x2D7 SWAP1 PUSH2 0x13A8 JUMP JUMPDEST PUSH2 0x43D PUSH2 0xBCA JUMP JUMPDEST PUSH2 0x3F0 DUP3 DUP3 PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x454 CALLER DUP6 PUSH2 0x72A JUMP JUMPDEST SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0x4B9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x389 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x7CE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x367 CALLER DUP5 DUP5 PUSH2 0x96D JUMP JUMPDEST PUSH2 0x4DB PUSH2 0xBCA JUMP JUMPDEST PUSH1 0x4 PUSH2 0x4E8 DUP5 DUP7 DUP4 PUSH2 0x1461 JUMP JUMPDEST POP PUSH1 0x5 PUSH2 0x4F6 DUP3 DUP5 DUP4 PUSH2 0x1461 JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x509 SWAP3 SWAP2 SWAP1 PUSH2 0x1522 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB SWAP1 KECCAK256 PUSH1 0x9 DUP2 SWAP1 SSTORE SWAP1 POP PUSH2 0x564 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 PUSH32 0x0 PUSH2 0xE66 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH2 0x577 SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0x1522 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x58F SWAP3 SWAP2 SWAP1 PUSH2 0x1522 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB DUP2 KECCAK256 SWAP1 PUSH32 0x1EC4C73AF923253FB2C28A509DD78D342709289A09929D78C64C0B8E047EFBCD SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x616 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x645 DUP13 PUSH2 0xEAF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP1 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x6A0 DUP3 PUSH2 0xED7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x6B0 DUP3 DUP8 DUP8 DUP8 PUSH2 0xF25 JUMP JUMPDEST SWAP1 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x713 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH2 0x71E DUP11 DUP11 DUP11 PUSH2 0x7CE JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x75D PUSH2 0xBCA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7C2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH2 0x7CB DUP2 PUSH2 0xCE5 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x830 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x891 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8FF DUP5 DUP5 PUSH2 0x72A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x967 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x95A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH2 0x967 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x7CE JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x9D1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xA33 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0xAAB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE SWAP3 DUP7 AND DUP1 DUP3 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE SWAP2 MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0xB0B SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x967 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ DUP1 ISZERO PUSH2 0xB71 JUMPI POP PUSH32 0x0 CHAINID EQ JUMPDEST ISZERO PUSH2 0xB7D JUMPI POP PUSH1 0x8 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x39D PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH1 0x9 SLOAD PUSH32 0x0 PUSH2 0xE66 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x406 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xC7A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST DUP1 PUSH1 0x3 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0xC8C SWAP2 SWAP1 PUSH2 0x13DC JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE MLOAD DUP5 DUP2 MSTORE PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xD95 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E2066726F6D20746865207A65726F20616464726573 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x73 PUSH1 0xF8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0xE09 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E20616D6F756E7420657863656564732062616C616E PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD DUP8 SWAP1 SUB SWAP1 SSTORE MLOAD DUP6 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0x8E6 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP1 JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x36B PUSH2 0xEE4 PUSH2 0xB18 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH2 0x1901 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x22 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x42 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x62 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xF36 DUP8 DUP8 DUP8 DUP8 PUSH2 0xF4D JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xF43 DUP2 PUSH2 0x1011 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP4 GT ISZERO PUSH2 0xF84 JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x3 PUSH2 0x1008 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFD8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1001 JUMPI PUSH1 0x0 PUSH1 0x1 SWAP3 POP SWAP3 POP POP PUSH2 0x1008 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x1025 JUMPI PUSH2 0x1025 PUSH2 0x1532 JUMP JUMPDEST SUB PUSH2 0x102D JUMPI POP JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x1041 JUMPI PUSH2 0x1041 PUSH2 0x1532 JUMP JUMPDEST SUB PUSH2 0x108E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x10A2 JUMPI PUSH2 0x10A2 PUSH2 0x1532 JUMP JUMPDEST SUB PUSH2 0x10EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x1103 JUMPI PUSH2 0x1103 PUSH2 0x1532 JUMP JUMPDEST SUB PUSH2 0x7CB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1188 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x116C JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x11C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x11D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11E1 DUP4 PUSH2 0x11A9 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1204 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x120D DUP5 PUSH2 0x11A9 JUMP JUMPDEST SWAP3 POP PUSH2 0x121B PUSH1 0x20 DUP6 ADD PUSH2 0x11A9 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x123D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1246 DUP3 PUSH2 0x11A9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x125F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x128F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x12AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x12C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12D0 DUP9 DUP4 DUP10 ADD PUSH2 0x124D JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x12E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x12F6 DUP8 DUP3 DUP9 ADD PUSH2 0x124D JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x131D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1326 DUP9 PUSH2 0x11A9 JUMP JUMPDEST SWAP7 POP PUSH2 0x1334 PUSH1 0x20 DUP10 ADD PUSH2 0x11A9 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1358 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1391 DUP4 PUSH2 0x11A9 JUMP JUMPDEST SWAP2 POP PUSH2 0x139F PUSH1 0x20 DUP5 ADD PUSH2 0x11A9 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x13BC JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0xED1 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x36B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0xE61 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH2 0x143A JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1459 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1446 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x1479 JUMPI PUSH2 0x1479 PUSH2 0x13FD JUMP JUMPDEST PUSH2 0x148D DUP4 PUSH2 0x1487 DUP4 SLOAD PUSH2 0x13A8 JUMP JUMPDEST DUP4 PUSH2 0x1413 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP5 GT PUSH1 0x1 DUP2 EQ PUSH2 0x14C1 JUMPI PUSH1 0x0 DUP6 ISZERO PUSH2 0x14A9 JUMPI POP DUP4 DUP3 ADD CALLDATALOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP8 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP7 SWAP1 SHL OR DUP4 SSTORE PUSH2 0x151B JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP1 DUP4 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x14F2 JUMPI DUP7 DUP6 ADD CALLDATALOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x14D2 JUMP JUMPDEST POP DUP7 DUP3 LT ISZERO PUSH2 0x150F JUMPI PUSH1 0x0 NOT PUSH1 0xF8 DUP9 PUSH1 0x3 SHL AND SHR NOT DUP5 DUP8 ADD CALLDATALOAD AND DUP2 SSTORE JUMPDEST POP POP PUSH1 0x1 DUP6 PUSH1 0x1 SHL ADD DUP4 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 SGT 0xC9 0x28 0xE0 BALANCE PUSH6 0xE19B5C7AC5B6 PUSH28 0x85C32AB586CD042677306FBD142D27AFCCF664736F6C634300081100 CALLER LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADDRESS 0xC 0xC6 CHAINID 0xD0 CALLDATALOAD SWAP12 DUP7 DUP8 BYTE PUSH15 0x263AB844429C60311081EBEA2AFDD5 SHL ADD PUSH5 0x10D91C6473 PUSH16 0x6C634300081100330000000000000000 ","sourceMap":"619:23358:79:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_addStableSwapPool_21854":{"entryPoint":3416,"id":21854,"parameterSlots":3,"returnSlots":0},"@_deployRepresentation_22105":{"entryPoint":5807,"id":22105,"parameterSlots":5,"returnSlots":1},"@_enrollAdoptedAndLocalAssets_21822":{"entryPoint":4300,"id":21822,"parameterSlots":8,"returnSlots":0},"@_getAdoptedAsset_13962":{"entryPoint":3602,"id":13962,"parameterSlots":1,"returnSlots":1},"@_getCanonicalTokenId_14054":{"entryPoint":6334,"id":14054,"parameterSlots":1,"returnSlots":1},"@_getLocalAndAdoptedToken_14088":{"entryPoint":3321,"id":14088,"parameterSlots":3,"returnSlots":2},"@_getRepresentationAsset_13981":{"entryPoint":3571,"id":13981,"parameterSlots":1,"returnSlots":1},"@_removeAssetId_22069":{"entryPoint":3662,"id":22069,"parameterSlots":4,"returnSlots":0},"@_setLiquidityCap_21926":{"entryPoint":6016,"id":21926,"parameterSlots":3,"returnSlots":0},"@addStableSwapPool_21415":{"entryPoint":1176,"id":21415,"parameterSlots":2,"returnSlots":0},"@addressToBytes32_50168":{"entryPoint":null,"id":50168,"parameterSlots":1,"returnSlots":1},"@adoptedToCanonical_21004":{"entryPoint":null,"id":21004,"parameterSlots":1,"returnSlots":1},"@adoptedToLocalExternalPools_21147":{"entryPoint":null,"id":21147,"parameterSlots":1,"returnSlots":1},"@adoptedToLocalExternalPools_21167":{"entryPoint":1532,"id":21167,"parameterSlots":1,"returnSlots":1},"@approvedAssets_21111":{"entryPoint":null,"id":21111,"parameterSlots":1,"returnSlots":1},"@approvedAssets_21130":{"entryPoint":1769,"id":21130,"parameterSlots":1,"returnSlots":1},"@bytes32ToAddress_50187":{"entryPoint":null,"id":50187,"parameterSlots":1,"returnSlots":1},"@calculateCanonicalHash_28598":{"entryPoint":3254,"id":28598,"parameterSlots":2,"returnSlots":1},"@canonicalToAdopted_20958":{"entryPoint":1351,"id":20958,"parameterSlots":1,"returnSlots":1},"@canonicalToAdopted_20977":{"entryPoint":2263,"id":20977,"parameterSlots":1,"returnSlots":1},"@canonicalToRepresentation_21016":{"entryPoint":1332,"id":21016,"parameterSlots":1,"returnSlots":1},"@canonicalToRepresentation_21035":{"entryPoint":1734,"id":21035,"parameterSlots":1,"returnSlots":1},"@connextStorage_29544":{"entryPoint":null,"id":29544,"parameterSlots":0,"returnSlots":1},"@contractOwner_29645":{"entryPoint":3370,"id":29645,"parameterSlots":0,"returnSlots":1},"@diamondStorage_29603":{"entryPoint":null,"id":29603,"parameterSlots":0,"returnSlots":1},"@getCanonicalTokenId_28517":{"entryPoint":6429,"id":28517,"parameterSlots":2,"returnSlots":1},"@getConfig_27701":{"entryPoint":5943,"id":27701,"parameterSlots":1,"returnSlots":1},"@getCustodiedAmount_21181":{"entryPoint":null,"id":21181,"parameterSlots":1,"returnSlots":1},"@getLocalAndAdoptedToken_21097":{"entryPoint":1138,"id":21097,"parameterSlots":2,"returnSlots":2},"@getLocalAsset_28579":{"entryPoint":6367,"id":28579,"parameterSlots":4,"returnSlots":1},"@getTokenId_21075":{"entryPoint":3223,"id":21075,"parameterSlots":1,"returnSlots":1},"@isLocalOrigin_28546":{"entryPoint":6685,"id":28546,"parameterSlots":2,"returnSlots":1},"@removeAssetId_21471":{"entryPoint":1561,"id":21471,"parameterSlots":3,"returnSlots":0},"@removeAssetId_21502":{"entryPoint":1364,"id":21502,"parameterSlots":3,"returnSlots":0},"@representationToCanonical_21062":{"entryPoint":null,"id":21062,"parameterSlots":1,"returnSlots":1},"@setupAssetWithDeployedRepresentation_21387":{"entryPoint":2710,"id":21387,"parameterSlots":4,"returnSlots":1},"@setupAsset_21321":{"entryPoint":1798,"id":21321,"parameterSlots":7,"returnSlots":1},"@updateDetails_21574":{"entryPoint":2298,"id":21574,"parameterSlots":3,"returnSlots":0},"@updateLiquidityCap_21443":{"entryPoint":3078,"id":21443,"parameterSlots":2,"returnSlots":0},"abi_decode_address":{"entryPoint":6764,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_string":{"entryPoint":7193,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_TokenId_calldata":{"entryPoint":6891,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":6793,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":6964,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_addresst_address":{"entryPoint":7096,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_bytes32t_uint32":{"entryPoint":6844,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptr":{"entryPoint":7065,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptrt_address":{"entryPoint":6916,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptrt_addresst_address":{"entryPoint":6990,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptrt_addresst_addresst_address":{"entryPoint":7663,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptrt_string_memory_ptrt_string_memory_ptr":{"entryPoint":7537,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptrt_uint256":{"entryPoint":7757,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptrt_uint8t_string_memory_ptrt_string_memory_ptrt_addresst_addresst_uint256":{"entryPoint":7342,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_struct$_TokenId_$37728_memory_ptr":{"entryPoint":7855,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":8102,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32":{"entryPoint":7825,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8_fromMemory":{"entryPoint":8070,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint32":{"entryPoint":6823,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":7948,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_rational_1_by_1__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint32__to_t_bytes32_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_contract$_IStableSwap_$27329__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed":{"entryPoint":8020,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_struct$_TokenId_$37728_memory_ptr__to_t_struct$_TokenId_$37728_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint8_t_string_memory_ptr_t_string_memory_ptr__to_t_uint8_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed":{"entryPoint":8162,"id":null,"parameterSlots":4,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":8128,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x21":{"entryPoint":7803,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":7171,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_uint8":{"entryPoint":7152,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:11346:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:124:181","statements":[{"nodeType":"YulAssignment","src":"73:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:181"},"nodeType":"YulFunctionCall","src":"82:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:181"}]},{"body":{"nodeType":"YulBlock","src":"165:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"174:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"177:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"167:6:181"},"nodeType":"YulFunctionCall","src":"167:12:181"},"nodeType":"YulExpressionStatement","src":"167:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"155:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"146:3:181"},"nodeType":"YulFunctionCall","src":"146:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"142:3:181"},"nodeType":"YulFunctionCall","src":"142:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:181"},"nodeType":"YulFunctionCall","src":"131:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:181"},"nodeType":"YulFunctionCall","src":"121:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:181"},"nodeType":"YulFunctionCall","src":"114:50:181"},"nodeType":"YulIf","src":"111:70:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:181","type":""}],"src":"14:173:181"},{"body":{"nodeType":"YulBlock","src":"262:116:181","statements":[{"body":{"nodeType":"YulBlock","src":"308:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"317:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"320:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"310:6:181"},"nodeType":"YulFunctionCall","src":"310:12:181"},"nodeType":"YulExpressionStatement","src":"310:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"283:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"292:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"279:3:181"},"nodeType":"YulFunctionCall","src":"279:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"304:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"275:3:181"},"nodeType":"YulFunctionCall","src":"275:32:181"},"nodeType":"YulIf","src":"272:52:181"},{"nodeType":"YulAssignment","src":"333:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"362:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"343:18:181"},"nodeType":"YulFunctionCall","src":"343:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"333:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"228:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"239:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"251:6:181","type":""}],"src":"192:186:181"},{"body":{"nodeType":"YulBlock","src":"536:163:181","statements":[{"nodeType":"YulAssignment","src":"546:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"558:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"569:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"554:3:181"},"nodeType":"YulFunctionCall","src":"554:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"546:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"588:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"609:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"603:5:181"},"nodeType":"YulFunctionCall","src":"603:13:181"},{"kind":"number","nodeType":"YulLiteral","src":"618:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"599:3:181"},"nodeType":"YulFunctionCall","src":"599:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"581:6:181"},"nodeType":"YulFunctionCall","src":"581:49:181"},"nodeType":"YulExpressionStatement","src":"581:49:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"650:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"661:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"646:3:181"},"nodeType":"YulFunctionCall","src":"646:20:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"678:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"686:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"674:3:181"},"nodeType":"YulFunctionCall","src":"674:17:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"668:5:181"},"nodeType":"YulFunctionCall","src":"668:24:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"639:6:181"},"nodeType":"YulFunctionCall","src":"639:54:181"},"nodeType":"YulExpressionStatement","src":"639:54:181"}]},"name":"abi_encode_tuple_t_struct$_TokenId_$37728_memory_ptr__to_t_struct$_TokenId_$37728_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"505:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"516:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"527:4:181","type":""}],"src":"383:316:181"},{"body":{"nodeType":"YulBlock","src":"752:115:181","statements":[{"nodeType":"YulAssignment","src":"762:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"784:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"771:12:181"},"nodeType":"YulFunctionCall","src":"771:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"762:5:181"}]},{"body":{"nodeType":"YulBlock","src":"845:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"854:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"857:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"847:6:181"},"nodeType":"YulFunctionCall","src":"847:12:181"},"nodeType":"YulExpressionStatement","src":"847:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"813:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"824:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"831:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"820:3:181"},"nodeType":"YulFunctionCall","src":"820:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"810:2:181"},"nodeType":"YulFunctionCall","src":"810:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"803:6:181"},"nodeType":"YulFunctionCall","src":"803:41:181"},"nodeType":"YulIf","src":"800:61:181"}]},"name":"abi_decode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"731:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"742:5:181","type":""}],"src":"704:163:181"},{"body":{"nodeType":"YulBlock","src":"958:166:181","statements":[{"body":{"nodeType":"YulBlock","src":"1004:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1013:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1016:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1006:6:181"},"nodeType":"YulFunctionCall","src":"1006:12:181"},"nodeType":"YulExpressionStatement","src":"1006:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"979:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"988:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"975:3:181"},"nodeType":"YulFunctionCall","src":"975:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1000:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"971:3:181"},"nodeType":"YulFunctionCall","src":"971:32:181"},"nodeType":"YulIf","src":"968:52:181"},{"nodeType":"YulAssignment","src":"1029:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1052:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1039:12:181"},"nodeType":"YulFunctionCall","src":"1039:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1029:6:181"}]},{"nodeType":"YulAssignment","src":"1071:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1103:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1114:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1099:3:181"},"nodeType":"YulFunctionCall","src":"1099:18:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"1081:17:181"},"nodeType":"YulFunctionCall","src":"1081:37:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1071:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"916:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"927:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"939:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"947:6:181","type":""}],"src":"872:252:181"},{"body":{"nodeType":"YulBlock","src":"1258:175:181","statements":[{"nodeType":"YulAssignment","src":"1268:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1280:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1291:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1276:3:181"},"nodeType":"YulFunctionCall","src":"1276:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1268:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"1303:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1321:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1326:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1317:3:181"},"nodeType":"YulFunctionCall","src":"1317:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1330:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1313:3:181"},"nodeType":"YulFunctionCall","src":"1313:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1307:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1348:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1363:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1371:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1359:3:181"},"nodeType":"YulFunctionCall","src":"1359:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1341:6:181"},"nodeType":"YulFunctionCall","src":"1341:34:181"},"nodeType":"YulExpressionStatement","src":"1341:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1395:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1406:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1391:3:181"},"nodeType":"YulFunctionCall","src":"1391:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"1415:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1423:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1411:3:181"},"nodeType":"YulFunctionCall","src":"1411:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1384:6:181"},"nodeType":"YulFunctionCall","src":"1384:43:181"},"nodeType":"YulExpressionStatement","src":"1384:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1219:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1230:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1238:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1249:4:181","type":""}],"src":"1129:304:181"},{"body":{"nodeType":"YulBlock","src":"1508:85:181","statements":[{"body":{"nodeType":"YulBlock","src":"1547:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1556:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1559:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1549:6:181"},"nodeType":"YulFunctionCall","src":"1549:12:181"},"nodeType":"YulExpressionStatement","src":"1549:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"1529:3:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1534:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1525:3:181"},"nodeType":"YulFunctionCall","src":"1525:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"1543:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1521:3:181"},"nodeType":"YulFunctionCall","src":"1521:25:181"},"nodeType":"YulIf","src":"1518:45:181"},{"nodeType":"YulAssignment","src":"1572:15:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"1581:6:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1572:5:181"}]}]},"name":"abi_decode_struct_TokenId_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1482:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"1490:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1498:5:181","type":""}],"src":"1438:155:181"},{"body":{"nodeType":"YulBlock","src":"1713:198:181","statements":[{"body":{"nodeType":"YulBlock","src":"1759:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1768:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1771:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1761:6:181"},"nodeType":"YulFunctionCall","src":"1761:12:181"},"nodeType":"YulExpressionStatement","src":"1761:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1734:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1743:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1730:3:181"},"nodeType":"YulFunctionCall","src":"1730:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1755:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1726:3:181"},"nodeType":"YulFunctionCall","src":"1726:32:181"},"nodeType":"YulIf","src":"1723:52:181"},{"nodeType":"YulAssignment","src":"1784:64:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1829:9:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1840:7:181"}],"functionName":{"name":"abi_decode_struct_TokenId_calldata","nodeType":"YulIdentifier","src":"1794:34:181"},"nodeType":"YulFunctionCall","src":"1794:54:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1784:6:181"}]},{"nodeType":"YulAssignment","src":"1857:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1890:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1901:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1886:3:181"},"nodeType":"YulFunctionCall","src":"1886:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1867:18:181"},"nodeType":"YulFunctionCall","src":"1867:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1857:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptrt_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1671:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1682:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1694:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1702:6:181","type":""}],"src":"1598:313:181"},{"body":{"nodeType":"YulBlock","src":"1986:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"2032:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2041:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2044:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2034:6:181"},"nodeType":"YulFunctionCall","src":"2034:12:181"},"nodeType":"YulExpressionStatement","src":"2034:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2007:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2016:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2003:3:181"},"nodeType":"YulFunctionCall","src":"2003:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2028:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1999:3:181"},"nodeType":"YulFunctionCall","src":"1999:32:181"},"nodeType":"YulIf","src":"1996:52:181"},{"nodeType":"YulAssignment","src":"2057:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2080:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2067:12:181"},"nodeType":"YulFunctionCall","src":"2067:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2057:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1952:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1963:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1975:6:181","type":""}],"src":"1916:180:181"},{"body":{"nodeType":"YulBlock","src":"2202:102:181","statements":[{"nodeType":"YulAssignment","src":"2212:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2224:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2235:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2220:3:181"},"nodeType":"YulFunctionCall","src":"2220:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2212:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2254:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2269:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2285:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2290:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2281:3:181"},"nodeType":"YulFunctionCall","src":"2281:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2294:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2277:3:181"},"nodeType":"YulFunctionCall","src":"2277:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2265:3:181"},"nodeType":"YulFunctionCall","src":"2265:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2247:6:181"},"nodeType":"YulFunctionCall","src":"2247:51:181"},"nodeType":"YulExpressionStatement","src":"2247:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2171:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2182:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2193:4:181","type":""}],"src":"2101:203:181"},{"body":{"nodeType":"YulBlock","src":"2404:92:181","statements":[{"nodeType":"YulAssignment","src":"2414:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2426:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2437:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2422:3:181"},"nodeType":"YulFunctionCall","src":"2422:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2414:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2456:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2481:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2474:6:181"},"nodeType":"YulFunctionCall","src":"2474:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2467:6:181"},"nodeType":"YulFunctionCall","src":"2467:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2449:6:181"},"nodeType":"YulFunctionCall","src":"2449:41:181"},"nodeType":"YulExpressionStatement","src":"2449:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2373:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2384:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2395:4:181","type":""}],"src":"2309:187:181"},{"body":{"nodeType":"YulBlock","src":"2633:256:181","statements":[{"body":{"nodeType":"YulBlock","src":"2680:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2689:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2692:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2682:6:181"},"nodeType":"YulFunctionCall","src":"2682:12:181"},"nodeType":"YulExpressionStatement","src":"2682:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2654:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2663:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2650:3:181"},"nodeType":"YulFunctionCall","src":"2650:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2675:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2646:3:181"},"nodeType":"YulFunctionCall","src":"2646:33:181"},"nodeType":"YulIf","src":"2643:53:181"},{"nodeType":"YulAssignment","src":"2705:64:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2750:9:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2761:7:181"}],"functionName":{"name":"abi_decode_struct_TokenId_calldata","nodeType":"YulIdentifier","src":"2715:34:181"},"nodeType":"YulFunctionCall","src":"2715:54:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2705:6:181"}]},{"nodeType":"YulAssignment","src":"2778:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2811:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2822:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2807:3:181"},"nodeType":"YulFunctionCall","src":"2807:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2788:18:181"},"nodeType":"YulFunctionCall","src":"2788:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2778:6:181"}]},{"nodeType":"YulAssignment","src":"2835:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2868:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2879:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2864:3:181"},"nodeType":"YulFunctionCall","src":"2864:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2845:18:181"},"nodeType":"YulFunctionCall","src":"2845:38:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2835:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptrt_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2583:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2594:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2606:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2614:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2622:6:181","type":""}],"src":"2501:388:181"},{"body":{"nodeType":"YulBlock","src":"2992:141:181","statements":[{"body":{"nodeType":"YulBlock","src":"3038:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3047:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3050:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3040:6:181"},"nodeType":"YulFunctionCall","src":"3040:12:181"},"nodeType":"YulExpressionStatement","src":"3040:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3013:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3022:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3009:3:181"},"nodeType":"YulFunctionCall","src":"3009:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3034:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3005:3:181"},"nodeType":"YulFunctionCall","src":"3005:32:181"},"nodeType":"YulIf","src":"3002:52:181"},{"nodeType":"YulAssignment","src":"3063:64:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3108:9:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3119:7:181"}],"functionName":{"name":"abi_decode_struct_TokenId_calldata","nodeType":"YulIdentifier","src":"3073:34:181"},"nodeType":"YulFunctionCall","src":"3073:54:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3063:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2958:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2969:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2981:6:181","type":""}],"src":"2894:239:181"},{"body":{"nodeType":"YulBlock","src":"3260:102:181","statements":[{"nodeType":"YulAssignment","src":"3270:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3282:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3293:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3278:3:181"},"nodeType":"YulFunctionCall","src":"3278:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3270:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3312:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3327:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3343:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3348:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3339:3:181"},"nodeType":"YulFunctionCall","src":"3339:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3352:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3335:3:181"},"nodeType":"YulFunctionCall","src":"3335:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3323:3:181"},"nodeType":"YulFunctionCall","src":"3323:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3305:6:181"},"nodeType":"YulFunctionCall","src":"3305:51:181"},"nodeType":"YulExpressionStatement","src":"3305:51:181"}]},"name":"abi_encode_tuple_t_contract$_IStableSwap_$27329__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3229:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3240:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3251:4:181","type":""}],"src":"3138:224:181"},{"body":{"nodeType":"YulBlock","src":"3468:76:181","statements":[{"nodeType":"YulAssignment","src":"3478:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3490:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3501:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3486:3:181"},"nodeType":"YulFunctionCall","src":"3486:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3478:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3520:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"3531:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3513:6:181"},"nodeType":"YulFunctionCall","src":"3513:25:181"},"nodeType":"YulExpressionStatement","src":"3513:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3437:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3448:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3459:4:181","type":""}],"src":"3367:177:181"},{"body":{"nodeType":"YulBlock","src":"3653:224:181","statements":[{"body":{"nodeType":"YulBlock","src":"3699:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3708:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3711:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3701:6:181"},"nodeType":"YulFunctionCall","src":"3701:12:181"},"nodeType":"YulExpressionStatement","src":"3701:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3674:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3683:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3670:3:181"},"nodeType":"YulFunctionCall","src":"3670:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3695:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3666:3:181"},"nodeType":"YulFunctionCall","src":"3666:32:181"},"nodeType":"YulIf","src":"3663:52:181"},{"nodeType":"YulAssignment","src":"3724:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3747:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3734:12:181"},"nodeType":"YulFunctionCall","src":"3734:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3724:6:181"}]},{"nodeType":"YulAssignment","src":"3766:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3799:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3810:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3795:3:181"},"nodeType":"YulFunctionCall","src":"3795:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3776:18:181"},"nodeType":"YulFunctionCall","src":"3776:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3766:6:181"}]},{"nodeType":"YulAssignment","src":"3823:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3856:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3867:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3852:3:181"},"nodeType":"YulFunctionCall","src":"3852:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3833:18:181"},"nodeType":"YulFunctionCall","src":"3833:38:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3823:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3603:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3614:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3626:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3634:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3642:6:181","type":""}],"src":"3549:328:181"},{"body":{"nodeType":"YulBlock","src":"3925:71:181","statements":[{"body":{"nodeType":"YulBlock","src":"3974:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3983:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3986:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3976:6:181"},"nodeType":"YulFunctionCall","src":"3976:12:181"},"nodeType":"YulExpressionStatement","src":"3976:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3948:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3959:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"3966:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3955:3:181"},"nodeType":"YulFunctionCall","src":"3955:16:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3945:2:181"},"nodeType":"YulFunctionCall","src":"3945:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3938:6:181"},"nodeType":"YulFunctionCall","src":"3938:35:181"},"nodeType":"YulIf","src":"3935:55:181"}]},"name":"validator_revert_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3914:5:181","type":""}],"src":"3882:114:181"},{"body":{"nodeType":"YulBlock","src":"4033:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4050:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4057:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"4062:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4053:3:181"},"nodeType":"YulFunctionCall","src":"4053:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4043:6:181"},"nodeType":"YulFunctionCall","src":"4043:31:181"},"nodeType":"YulExpressionStatement","src":"4043:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4090:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4093:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4083:6:181"},"nodeType":"YulFunctionCall","src":"4083:15:181"},"nodeType":"YulExpressionStatement","src":"4083:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4114:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4117:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4107:6:181"},"nodeType":"YulFunctionCall","src":"4107:15:181"},"nodeType":"YulExpressionStatement","src":"4107:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"4001:127:181"},{"body":{"nodeType":"YulBlock","src":"4186:666:181","statements":[{"body":{"nodeType":"YulBlock","src":"4235:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4244:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4247:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4237:6:181"},"nodeType":"YulFunctionCall","src":"4237:12:181"},"nodeType":"YulExpressionStatement","src":"4237:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4214:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4222:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4210:3:181"},"nodeType":"YulFunctionCall","src":"4210:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"4229:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4206:3:181"},"nodeType":"YulFunctionCall","src":"4206:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4199:6:181"},"nodeType":"YulFunctionCall","src":"4199:35:181"},"nodeType":"YulIf","src":"4196:55:181"},{"nodeType":"YulVariableDeclaration","src":"4260:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4283:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4270:12:181"},"nodeType":"YulFunctionCall","src":"4270:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4264:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4299:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4309:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"4303:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4350:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"4352:16:181"},"nodeType":"YulFunctionCall","src":"4352:18:181"},"nodeType":"YulExpressionStatement","src":"4352:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"4342:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"4346:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4339:2:181"},"nodeType":"YulFunctionCall","src":"4339:10:181"},"nodeType":"YulIf","src":"4336:36:181"},{"nodeType":"YulVariableDeclaration","src":"4381:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4395:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4391:3:181"},"nodeType":"YulFunctionCall","src":"4391:7:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"4385:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4407:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4427:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4421:5:181"},"nodeType":"YulFunctionCall","src":"4421:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"4411:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4439:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4461:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"4485:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4489:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4481:3:181"},"nodeType":"YulFunctionCall","src":"4481:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"4496:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4477:3:181"},"nodeType":"YulFunctionCall","src":"4477:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"4501:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4473:3:181"},"nodeType":"YulFunctionCall","src":"4473:31:181"},{"name":"_3","nodeType":"YulIdentifier","src":"4506:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4469:3:181"},"nodeType":"YulFunctionCall","src":"4469:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4457:3:181"},"nodeType":"YulFunctionCall","src":"4457:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"4443:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4569:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"4571:16:181"},"nodeType":"YulFunctionCall","src":"4571:18:181"},"nodeType":"YulExpressionStatement","src":"4571:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4528:10:181"},{"name":"_2","nodeType":"YulIdentifier","src":"4540:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4525:2:181"},"nodeType":"YulFunctionCall","src":"4525:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4548:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"4560:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4545:2:181"},"nodeType":"YulFunctionCall","src":"4545:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"4522:2:181"},"nodeType":"YulFunctionCall","src":"4522:46:181"},"nodeType":"YulIf","src":"4519:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4607:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4611:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4600:6:181"},"nodeType":"YulFunctionCall","src":"4600:22:181"},"nodeType":"YulExpressionStatement","src":"4600:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4638:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4646:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4631:6:181"},"nodeType":"YulFunctionCall","src":"4631:18:181"},"nodeType":"YulExpressionStatement","src":"4631:18:181"},{"body":{"nodeType":"YulBlock","src":"4697:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4706:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4709:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4699:6:181"},"nodeType":"YulFunctionCall","src":"4699:12:181"},"nodeType":"YulExpressionStatement","src":"4699:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4672:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4680:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4668:3:181"},"nodeType":"YulFunctionCall","src":"4668:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"4685:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4664:3:181"},"nodeType":"YulFunctionCall","src":"4664:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"4692:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4661:2:181"},"nodeType":"YulFunctionCall","src":"4661:35:181"},"nodeType":"YulIf","src":"4658:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4739:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4747:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4735:3:181"},"nodeType":"YulFunctionCall","src":"4735:17:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4758:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4766:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4754:3:181"},"nodeType":"YulFunctionCall","src":"4754:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4773:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"4722:12:181"},"nodeType":"YulFunctionCall","src":"4722:54:181"},"nodeType":"YulExpressionStatement","src":"4722:54:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4800:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4808:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4796:3:181"},"nodeType":"YulFunctionCall","src":"4796:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"4813:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4792:3:181"},"nodeType":"YulFunctionCall","src":"4792:26:181"},{"kind":"number","nodeType":"YulLiteral","src":"4820:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4785:6:181"},"nodeType":"YulFunctionCall","src":"4785:37:181"},"nodeType":"YulExpressionStatement","src":"4785:37:181"},{"nodeType":"YulAssignment","src":"4831:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"4840:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"4831:5:181"}]}]},"name":"abi_decode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"4160:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"4168:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"4176:5:181","type":""}],"src":"4133:719:181"},{"body":{"nodeType":"YulBlock","src":"5075:804:181","statements":[{"body":{"nodeType":"YulBlock","src":"5122:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5131:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5134:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5124:6:181"},"nodeType":"YulFunctionCall","src":"5124:12:181"},"nodeType":"YulExpressionStatement","src":"5124:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5096:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5105:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5092:3:181"},"nodeType":"YulFunctionCall","src":"5092:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5117:3:181","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5088:3:181"},"nodeType":"YulFunctionCall","src":"5088:33:181"},"nodeType":"YulIf","src":"5085:53:181"},{"nodeType":"YulAssignment","src":"5147:64:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5192:9:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5203:7:181"}],"functionName":{"name":"abi_decode_struct_TokenId_calldata","nodeType":"YulIdentifier","src":"5157:34:181"},"nodeType":"YulFunctionCall","src":"5157:54:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5147:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"5220:45:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5250:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5261:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5246:3:181"},"nodeType":"YulFunctionCall","src":"5246:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5233:12:181"},"nodeType":"YulFunctionCall","src":"5233:32:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5224:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5297:5:181"}],"functionName":{"name":"validator_revert_uint8","nodeType":"YulIdentifier","src":"5274:22:181"},"nodeType":"YulFunctionCall","src":"5274:29:181"},"nodeType":"YulExpressionStatement","src":"5274:29:181"},{"nodeType":"YulAssignment","src":"5312:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"5322:5:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5312:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"5336:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5367:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5378:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5363:3:181"},"nodeType":"YulFunctionCall","src":"5363:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5350:12:181"},"nodeType":"YulFunctionCall","src":"5350:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"5340:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5391:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"5401:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5395:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5446:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5455:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5458:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5448:6:181"},"nodeType":"YulFunctionCall","src":"5448:12:181"},"nodeType":"YulExpressionStatement","src":"5448:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5434:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5442:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5431:2:181"},"nodeType":"YulFunctionCall","src":"5431:14:181"},"nodeType":"YulIf","src":"5428:34:181"},{"nodeType":"YulAssignment","src":"5471:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5503:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"5514:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5499:3:181"},"nodeType":"YulFunctionCall","src":"5499:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5523:7:181"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"5481:17:181"},"nodeType":"YulFunctionCall","src":"5481:50:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5471:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"5540:49:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5573:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5584:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5569:3:181"},"nodeType":"YulFunctionCall","src":"5569:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5556:12:181"},"nodeType":"YulFunctionCall","src":"5556:33:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"5544:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5618:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5627:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5630:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5620:6:181"},"nodeType":"YulFunctionCall","src":"5620:12:181"},"nodeType":"YulExpressionStatement","src":"5620:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"5604:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5614:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5601:2:181"},"nodeType":"YulFunctionCall","src":"5601:16:181"},"nodeType":"YulIf","src":"5598:36:181"},{"nodeType":"YulAssignment","src":"5643:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5675:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"5686:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5671:3:181"},"nodeType":"YulFunctionCall","src":"5671:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5697:7:181"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"5653:17:181"},"nodeType":"YulFunctionCall","src":"5653:52:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5643:6:181"}]},{"nodeType":"YulAssignment","src":"5714:49:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5747:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5758:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5743:3:181"},"nodeType":"YulFunctionCall","src":"5743:19:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5724:18:181"},"nodeType":"YulFunctionCall","src":"5724:39:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"5714:6:181"}]},{"nodeType":"YulAssignment","src":"5772:49:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5805:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5816:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5801:3:181"},"nodeType":"YulFunctionCall","src":"5801:19:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5782:18:181"},"nodeType":"YulFunctionCall","src":"5782:39:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"5772:6:181"}]},{"nodeType":"YulAssignment","src":"5830:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5857:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5868:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5853:3:181"},"nodeType":"YulFunctionCall","src":"5853:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5840:12:181"},"nodeType":"YulFunctionCall","src":"5840:33:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"5830:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptrt_uint8t_string_memory_ptrt_string_memory_ptrt_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4993:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5004:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5016:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5024:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5032:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5040:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"5048:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"5056:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"5064:6:181","type":""}],"src":"4857:1022:181"},{"body":{"nodeType":"YulBlock","src":"6036:519:181","statements":[{"body":{"nodeType":"YulBlock","src":"6083:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6092:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6095:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6085:6:181"},"nodeType":"YulFunctionCall","src":"6085:12:181"},"nodeType":"YulExpressionStatement","src":"6085:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6057:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6066:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6053:3:181"},"nodeType":"YulFunctionCall","src":"6053:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"6078:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6049:3:181"},"nodeType":"YulFunctionCall","src":"6049:33:181"},"nodeType":"YulIf","src":"6046:53:181"},{"nodeType":"YulAssignment","src":"6108:64:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6153:9:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6164:7:181"}],"functionName":{"name":"abi_decode_struct_TokenId_calldata","nodeType":"YulIdentifier","src":"6118:34:181"},"nodeType":"YulFunctionCall","src":"6118:54:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6108:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"6181:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6212:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6223:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6208:3:181"},"nodeType":"YulFunctionCall","src":"6208:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6195:12:181"},"nodeType":"YulFunctionCall","src":"6195:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"6185:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6236:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6246:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6240:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6291:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6300:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6303:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6293:6:181"},"nodeType":"YulFunctionCall","src":"6293:12:181"},"nodeType":"YulExpressionStatement","src":"6293:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6279:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6287:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6276:2:181"},"nodeType":"YulFunctionCall","src":"6276:14:181"},"nodeType":"YulIf","src":"6273:34:181"},{"nodeType":"YulAssignment","src":"6316:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6348:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"6359:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6344:3:181"},"nodeType":"YulFunctionCall","src":"6344:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6368:7:181"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"6326:17:181"},"nodeType":"YulFunctionCall","src":"6326:50:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6316:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"6385:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6418:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6429:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6414:3:181"},"nodeType":"YulFunctionCall","src":"6414:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6401:12:181"},"nodeType":"YulFunctionCall","src":"6401:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"6389:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6462:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6471:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6474:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6464:6:181"},"nodeType":"YulFunctionCall","src":"6464:12:181"},"nodeType":"YulExpressionStatement","src":"6464:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"6448:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6458:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6445:2:181"},"nodeType":"YulFunctionCall","src":"6445:16:181"},"nodeType":"YulIf","src":"6442:36:181"},{"nodeType":"YulAssignment","src":"6487:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6519:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"6530:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6515:3:181"},"nodeType":"YulFunctionCall","src":"6515:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6541:7:181"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"6497:17:181"},"nodeType":"YulFunctionCall","src":"6497:52:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6487:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptrt_string_memory_ptrt_string_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5986:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5997:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6009:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6017:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6025:6:181","type":""}],"src":"5884:671:181"},{"body":{"nodeType":"YulBlock","src":"6709:314:181","statements":[{"body":{"nodeType":"YulBlock","src":"6756:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6765:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6768:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6758:6:181"},"nodeType":"YulFunctionCall","src":"6758:12:181"},"nodeType":"YulExpressionStatement","src":"6758:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6730:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6739:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6726:3:181"},"nodeType":"YulFunctionCall","src":"6726:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"6751:3:181","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6722:3:181"},"nodeType":"YulFunctionCall","src":"6722:33:181"},"nodeType":"YulIf","src":"6719:53:181"},{"nodeType":"YulAssignment","src":"6781:64:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6826:9:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6837:7:181"}],"functionName":{"name":"abi_decode_struct_TokenId_calldata","nodeType":"YulIdentifier","src":"6791:34:181"},"nodeType":"YulFunctionCall","src":"6791:54:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6781:6:181"}]},{"nodeType":"YulAssignment","src":"6854:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6887:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6898:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6883:3:181"},"nodeType":"YulFunctionCall","src":"6883:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"6864:18:181"},"nodeType":"YulFunctionCall","src":"6864:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6854:6:181"}]},{"nodeType":"YulAssignment","src":"6911:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6944:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6955:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6940:3:181"},"nodeType":"YulFunctionCall","src":"6940:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"6921:18:181"},"nodeType":"YulFunctionCall","src":"6921:38:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6911:6:181"}]},{"nodeType":"YulAssignment","src":"6968:49:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7001:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7012:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6997:3:181"},"nodeType":"YulFunctionCall","src":"6997:19:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"6978:18:181"},"nodeType":"YulFunctionCall","src":"6978:39:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"6968:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptrt_addresst_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6651:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6662:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6674:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6682:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6690:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6698:6:181","type":""}],"src":"6560:463:181"},{"body":{"nodeType":"YulBlock","src":"7143:192:181","statements":[{"body":{"nodeType":"YulBlock","src":"7189:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7198:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7201:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7191:6:181"},"nodeType":"YulFunctionCall","src":"7191:12:181"},"nodeType":"YulExpressionStatement","src":"7191:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7164:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7173:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7160:3:181"},"nodeType":"YulFunctionCall","src":"7160:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7185:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7156:3:181"},"nodeType":"YulFunctionCall","src":"7156:32:181"},"nodeType":"YulIf","src":"7153:52:181"},{"nodeType":"YulAssignment","src":"7214:64:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7259:9:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"7270:7:181"}],"functionName":{"name":"abi_decode_struct_TokenId_calldata","nodeType":"YulIdentifier","src":"7224:34:181"},"nodeType":"YulFunctionCall","src":"7224:54:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7214:6:181"}]},{"nodeType":"YulAssignment","src":"7287:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7314:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7325:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7310:3:181"},"nodeType":"YulFunctionCall","src":"7310:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7297:12:181"},"nodeType":"YulFunctionCall","src":"7297:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7287:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptrt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7101:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7112:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7124:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7132:6:181","type":""}],"src":"7028:307:181"},{"body":{"nodeType":"YulBlock","src":"7372:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7389:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7396:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"7401:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7392:3:181"},"nodeType":"YulFunctionCall","src":"7392:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7382:6:181"},"nodeType":"YulFunctionCall","src":"7382:31:181"},"nodeType":"YulExpressionStatement","src":"7382:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7429:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7432:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7422:6:181"},"nodeType":"YulFunctionCall","src":"7422:15:181"},"nodeType":"YulExpressionStatement","src":"7422:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7453:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7456:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7446:6:181"},"nodeType":"YulFunctionCall","src":"7446:15:181"},"nodeType":"YulExpressionStatement","src":"7446:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"7340:127:181"},{"body":{"nodeType":"YulBlock","src":"7541:115:181","statements":[{"body":{"nodeType":"YulBlock","src":"7587:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7596:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7599:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7589:6:181"},"nodeType":"YulFunctionCall","src":"7589:12:181"},"nodeType":"YulExpressionStatement","src":"7589:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7562:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7571:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7558:3:181"},"nodeType":"YulFunctionCall","src":"7558:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7583:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7554:3:181"},"nodeType":"YulFunctionCall","src":"7554:32:181"},"nodeType":"YulIf","src":"7551:52:181"},{"nodeType":"YulAssignment","src":"7612:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7640:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"7622:17:181"},"nodeType":"YulFunctionCall","src":"7622:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7612:6:181"}]}]},"name":"abi_decode_tuple_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7507:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7518:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7530:6:181","type":""}],"src":"7472:184:181"},{"body":{"nodeType":"YulBlock","src":"7757:414:181","statements":[{"body":{"nodeType":"YulBlock","src":"7803:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7812:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7815:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7805:6:181"},"nodeType":"YulFunctionCall","src":"7805:12:181"},"nodeType":"YulExpressionStatement","src":"7805:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7778:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7787:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7774:3:181"},"nodeType":"YulFunctionCall","src":"7774:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7799:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7770:3:181"},"nodeType":"YulFunctionCall","src":"7770:32:181"},"nodeType":"YulIf","src":"7767:52:181"},{"nodeType":"YulVariableDeclaration","src":"7828:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7848:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7842:5:181"},"nodeType":"YulFunctionCall","src":"7842:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"7832:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7860:33:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7882:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"7890:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7878:3:181"},"nodeType":"YulFunctionCall","src":"7878:15:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"7864:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7968:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7970:16:181"},"nodeType":"YulFunctionCall","src":"7970:18:181"},"nodeType":"YulExpressionStatement","src":"7970:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7911:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"7923:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7908:2:181"},"nodeType":"YulFunctionCall","src":"7908:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7947:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"7959:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7944:2:181"},"nodeType":"YulFunctionCall","src":"7944:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7905:2:181"},"nodeType":"YulFunctionCall","src":"7905:62:181"},"nodeType":"YulIf","src":"7902:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8006:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"8010:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7999:6:181"},"nodeType":"YulFunctionCall","src":"7999:22:181"},"nodeType":"YulExpressionStatement","src":"7999:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"8037:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8063:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"8045:17:181"},"nodeType":"YulFunctionCall","src":"8045:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8030:6:181"},"nodeType":"YulFunctionCall","src":"8030:44:181"},"nodeType":"YulExpressionStatement","src":"8030:44:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"8094:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8102:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8090:3:181"},"nodeType":"YulFunctionCall","src":"8090:15:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8124:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8135:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8120:3:181"},"nodeType":"YulFunctionCall","src":"8120:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8107:12:181"},"nodeType":"YulFunctionCall","src":"8107:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8083:6:181"},"nodeType":"YulFunctionCall","src":"8083:57:181"},"nodeType":"YulExpressionStatement","src":"8083:57:181"},{"nodeType":"YulAssignment","src":"8149:16:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"8159:6:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8149:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_TokenId_$37728_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7723:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7734:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7746:6:181","type":""}],"src":"7661:510:181"},{"body":{"nodeType":"YulBlock","src":"8226:373:181","statements":[{"nodeType":"YulVariableDeclaration","src":"8236:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8256:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8250:5:181"},"nodeType":"YulFunctionCall","src":"8250:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"8240:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8278:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"8283:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8271:6:181"},"nodeType":"YulFunctionCall","src":"8271:19:181"},"nodeType":"YulExpressionStatement","src":"8271:19:181"},{"nodeType":"YulVariableDeclaration","src":"8299:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8308:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"8303:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8370:110:181","statements":[{"nodeType":"YulVariableDeclaration","src":"8384:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8394:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8388:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8426:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"8431:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8422:3:181"},"nodeType":"YulFunctionCall","src":"8422:11:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8435:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8418:3:181"},"nodeType":"YulFunctionCall","src":"8418:20:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8454:5:181"},{"name":"i","nodeType":"YulIdentifier","src":"8461:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8450:3:181"},"nodeType":"YulFunctionCall","src":"8450:13:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8465:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8446:3:181"},"nodeType":"YulFunctionCall","src":"8446:22:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8440:5:181"},"nodeType":"YulFunctionCall","src":"8440:29:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8411:6:181"},"nodeType":"YulFunctionCall","src":"8411:59:181"},"nodeType":"YulExpressionStatement","src":"8411:59:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"8329:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"8332:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8326:2:181"},"nodeType":"YulFunctionCall","src":"8326:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"8340:21:181","statements":[{"nodeType":"YulAssignment","src":"8342:17:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"8351:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"8354:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8347:3:181"},"nodeType":"YulFunctionCall","src":"8347:12:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"8342:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"8322:3:181","statements":[]},"src":"8318:162:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8504:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"8509:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8500:3:181"},"nodeType":"YulFunctionCall","src":"8500:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"8518:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8496:3:181"},"nodeType":"YulFunctionCall","src":"8496:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"8525:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8489:6:181"},"nodeType":"YulFunctionCall","src":"8489:38:181"},"nodeType":"YulExpressionStatement","src":"8489:38:181"},{"nodeType":"YulAssignment","src":"8536:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8551:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8564:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8572:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8560:3:181"},"nodeType":"YulFunctionCall","src":"8560:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8581:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"8577:3:181"},"nodeType":"YulFunctionCall","src":"8577:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8556:3:181"},"nodeType":"YulFunctionCall","src":"8556:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8547:3:181"},"nodeType":"YulFunctionCall","src":"8547:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"8588:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8543:3:181"},"nodeType":"YulFunctionCall","src":"8543:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"8536:3:181"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8203:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"8210:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"8218:3:181","type":""}],"src":"8176:423:181"},{"body":{"nodeType":"YulBlock","src":"8773:214:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8790:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8801:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8783:6:181"},"nodeType":"YulFunctionCall","src":"8783:21:181"},"nodeType":"YulExpressionStatement","src":"8783:21:181"},{"nodeType":"YulVariableDeclaration","src":"8813:59:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8845:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8857:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8868:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8853:3:181"},"nodeType":"YulFunctionCall","src":"8853:18:181"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"8827:17:181"},"nodeType":"YulFunctionCall","src":"8827:45:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"8817:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8892:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8903:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8888:3:181"},"nodeType":"YulFunctionCall","src":"8888:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"8912:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8920:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8908:3:181"},"nodeType":"YulFunctionCall","src":"8908:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8881:6:181"},"nodeType":"YulFunctionCall","src":"8881:50:181"},"nodeType":"YulExpressionStatement","src":"8881:50:181"},{"nodeType":"YulAssignment","src":"8940:41:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"8966:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"8974:6:181"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"8948:17:181"},"nodeType":"YulFunctionCall","src":"8948:33:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8940:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8734:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8745:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8753:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8764:4:181","type":""}],"src":"8604:383:181"},{"body":{"nodeType":"YulBlock","src":"9071:168:181","statements":[{"body":{"nodeType":"YulBlock","src":"9117:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9126:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9129:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9119:6:181"},"nodeType":"YulFunctionCall","src":"9119:12:181"},"nodeType":"YulExpressionStatement","src":"9119:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9092:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"9101:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9088:3:181"},"nodeType":"YulFunctionCall","src":"9088:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"9113:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9084:3:181"},"nodeType":"YulFunctionCall","src":"9084:32:181"},"nodeType":"YulIf","src":"9081:52:181"},{"nodeType":"YulVariableDeclaration","src":"9142:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9161:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9155:5:181"},"nodeType":"YulFunctionCall","src":"9155:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9146:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9203:5:181"}],"functionName":{"name":"validator_revert_uint8","nodeType":"YulIdentifier","src":"9180:22:181"},"nodeType":"YulFunctionCall","src":"9180:29:181"},"nodeType":"YulExpressionStatement","src":"9180:29:181"},{"nodeType":"YulAssignment","src":"9218:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"9228:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9218:6:181"}]}]},"name":"abi_decode_tuple_t_uint8_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9037:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9048:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9060:6:181","type":""}],"src":"8992:247:181"},{"body":{"nodeType":"YulBlock","src":"9371:136:181","statements":[{"nodeType":"YulAssignment","src":"9381:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9393:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9404:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9389:3:181"},"nodeType":"YulFunctionCall","src":"9389:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9381:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9423:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"9434:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9416:6:181"},"nodeType":"YulFunctionCall","src":"9416:25:181"},"nodeType":"YulExpressionStatement","src":"9416:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9461:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9472:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9457:3:181"},"nodeType":"YulFunctionCall","src":"9457:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9481:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"9489:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9477:3:181"},"nodeType":"YulFunctionCall","src":"9477:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9450:6:181"},"nodeType":"YulFunctionCall","src":"9450:51:181"},"nodeType":"YulExpressionStatement","src":"9450:51:181"}]},"name":"abi_encode_tuple_t_bytes32_t_uint32__to_t_bytes32_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9332:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9343:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9351:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9362:4:181","type":""}],"src":"9244:263:181"},{"body":{"nodeType":"YulBlock","src":"9593:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"9639:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9648:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9651:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9641:6:181"},"nodeType":"YulFunctionCall","src":"9641:12:181"},"nodeType":"YulExpressionStatement","src":"9641:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9614:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"9623:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9610:3:181"},"nodeType":"YulFunctionCall","src":"9610:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"9635:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9606:3:181"},"nodeType":"YulFunctionCall","src":"9606:32:181"},"nodeType":"YulIf","src":"9603:52:181"},{"nodeType":"YulAssignment","src":"9664:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9680:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9674:5:181"},"nodeType":"YulFunctionCall","src":"9674:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9664:6:181"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9559:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9570:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9582:6:181","type":""}],"src":"9512:184:181"},{"body":{"nodeType":"YulBlock","src":"9838:145:181","statements":[{"nodeType":"YulAssignment","src":"9848:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9860:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9871:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9856:3:181"},"nodeType":"YulFunctionCall","src":"9856:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9848:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9890:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9905:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9921:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"9926:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9917:3:181"},"nodeType":"YulFunctionCall","src":"9917:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"9930:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9913:3:181"},"nodeType":"YulFunctionCall","src":"9913:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9901:3:181"},"nodeType":"YulFunctionCall","src":"9901:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9883:6:181"},"nodeType":"YulFunctionCall","src":"9883:51:181"},"nodeType":"YulExpressionStatement","src":"9883:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9954:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9965:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9950:3:181"},"nodeType":"YulFunctionCall","src":"9950:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"9970:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9943:6:181"},"nodeType":"YulFunctionCall","src":"9943:34:181"},"nodeType":"YulExpressionStatement","src":"9943:34:181"}]},"name":"abi_encode_tuple_t_address_t_rational_1_by_1__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9799:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9810:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9818:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9829:4:181","type":""}],"src":"9701:282:181"},{"body":{"nodeType":"YulBlock","src":"10036:174:181","statements":[{"nodeType":"YulAssignment","src":"10046:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10057:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"10060:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10053:3:181"},"nodeType":"YulFunctionCall","src":"10053:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"10046:3:181"}]},{"body":{"nodeType":"YulBlock","src":"10093:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10114:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10121:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"10126:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10117:3:181"},"nodeType":"YulFunctionCall","src":"10117:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10107:6:181"},"nodeType":"YulFunctionCall","src":"10107:31:181"},"nodeType":"YulExpressionStatement","src":"10107:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10158:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10161:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10151:6:181"},"nodeType":"YulFunctionCall","src":"10151:15:181"},"nodeType":"YulExpressionStatement","src":"10151:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10186:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10189:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10179:6:181"},"nodeType":"YulFunctionCall","src":"10179:15:181"},"nodeType":"YulExpressionStatement","src":"10179:15:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10077:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"10080:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10074:2:181"},"nodeType":"YulFunctionCall","src":"10074:10:181"},"nodeType":"YulIf","src":"10071:133:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10019:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"10022:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"10028:3:181","type":""}],"src":"9988:222:181"},{"body":{"nodeType":"YulBlock","src":"10372:227:181","statements":[{"nodeType":"YulAssignment","src":"10382:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10394:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10405:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10390:3:181"},"nodeType":"YulFunctionCall","src":"10390:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10382:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"10417:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10435:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"10440:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10431:3:181"},"nodeType":"YulFunctionCall","src":"10431:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"10444:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10427:3:181"},"nodeType":"YulFunctionCall","src":"10427:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10421:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10462:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10477:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10485:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10473:3:181"},"nodeType":"YulFunctionCall","src":"10473:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10455:6:181"},"nodeType":"YulFunctionCall","src":"10455:34:181"},"nodeType":"YulExpressionStatement","src":"10455:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10509:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10520:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10505:3:181"},"nodeType":"YulFunctionCall","src":"10505:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10529:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10537:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10525:3:181"},"nodeType":"YulFunctionCall","src":"10525:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10498:6:181"},"nodeType":"YulFunctionCall","src":"10498:43:181"},"nodeType":"YulExpressionStatement","src":"10498:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10561:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10572:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10557:3:181"},"nodeType":"YulFunctionCall","src":"10557:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"10581:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10589:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10577:3:181"},"nodeType":"YulFunctionCall","src":"10577:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10550:6:181"},"nodeType":"YulFunctionCall","src":"10550:43:181"},"nodeType":"YulExpressionStatement","src":"10550:43:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10325:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10336:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10344:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10352:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10363:4:181","type":""}],"src":"10215:384:181"},{"body":{"nodeType":"YulBlock","src":"10797:268:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10814:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10829:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10837:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10825:3:181"},"nodeType":"YulFunctionCall","src":"10825:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10807:6:181"},"nodeType":"YulFunctionCall","src":"10807:36:181"},"nodeType":"YulExpressionStatement","src":"10807:36:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10863:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10874:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10859:3:181"},"nodeType":"YulFunctionCall","src":"10859:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10879:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10852:6:181"},"nodeType":"YulFunctionCall","src":"10852:30:181"},"nodeType":"YulExpressionStatement","src":"10852:30:181"},{"nodeType":"YulVariableDeclaration","src":"10891:59:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10923:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10935:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10946:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10931:3:181"},"nodeType":"YulFunctionCall","src":"10931:18:181"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"10905:17:181"},"nodeType":"YulFunctionCall","src":"10905:45:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"10895:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10970:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10981:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10966:3:181"},"nodeType":"YulFunctionCall","src":"10966:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"10990:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"10998:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10986:3:181"},"nodeType":"YulFunctionCall","src":"10986:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10959:6:181"},"nodeType":"YulFunctionCall","src":"10959:50:181"},"nodeType":"YulExpressionStatement","src":"10959:50:181"},{"nodeType":"YulAssignment","src":"11018:41:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"11044:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"11052:6:181"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"11026:17:181"},"nodeType":"YulFunctionCall","src":"11026:33:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11018:4:181"}]}]},"name":"abi_encode_tuple_t_uint8_t_string_memory_ptr_t_string_memory_ptr__to_t_uint8_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10750:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10761:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10769:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10777:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10788:4:181","type":""}],"src":"10604:461:181"},{"body":{"nodeType":"YulBlock","src":"11199:145:181","statements":[{"nodeType":"YulAssignment","src":"11209:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11221:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11232:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11217:3:181"},"nodeType":"YulFunctionCall","src":"11217:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11209:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11251:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"11262:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11244:6:181"},"nodeType":"YulFunctionCall","src":"11244:25:181"},"nodeType":"YulExpressionStatement","src":"11244:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11289:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11300:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11285:3:181"},"nodeType":"YulFunctionCall","src":"11285:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11309:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11325:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"11330:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11321:3:181"},"nodeType":"YulFunctionCall","src":"11321:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"11334:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11317:3:181"},"nodeType":"YulFunctionCall","src":"11317:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11305:3:181"},"nodeType":"YulFunctionCall","src":"11305:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11278:6:181"},"nodeType":"YulFunctionCall","src":"11278:60:181"},"nodeType":"YulExpressionStatement","src":"11278:60:181"}]},"name":"abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11160:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11171:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11179:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11190:4:181","type":""}],"src":"11070:274:181"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_struct$_TokenId_$37728_memory_ptr__to_t_struct$_TokenId_$37728_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(mload(value0), 0xffffffff))\n        mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_bytes32t_uint32(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_uint32(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_decode_struct_TokenId_calldata(offset, end) -> value\n    {\n        if slt(sub(end, offset), 64) { revert(0, 0) }\n        value := offset\n    }\n    function abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptrt_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_struct_TokenId_calldata(headStart, dataEnd)\n        value1 := abi_decode_address(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptrt_addresst_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_struct_TokenId_calldata(headStart, dataEnd)\n        value1 := abi_decode_address(add(headStart, 64))\n        value2 := abi_decode_address(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_struct_TokenId_calldata(headStart, dataEnd)\n    }\n    function abi_encode_tuple_t_contract$_IStableSwap_$27329__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_bytes32t_addresst_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n    }\n    function validator_revert_uint8(value)\n    {\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptrt_uint8t_string_memory_ptrt_string_memory_ptrt_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        value0 := abi_decode_struct_TokenId_calldata(headStart, dataEnd)\n        let value := calldataload(add(headStart, 64))\n        validator_revert_uint8(value)\n        value1 := value\n        let offset := calldataload(add(headStart, 96))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value2 := abi_decode_string(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 128))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value3 := abi_decode_string(add(headStart, offset_1), dataEnd)\n        value4 := abi_decode_address(add(headStart, 160))\n        value5 := abi_decode_address(add(headStart, 192))\n        value6 := calldataload(add(headStart, 224))\n    }\n    function abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptrt_string_memory_ptrt_string_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_struct_TokenId_calldata(headStart, dataEnd)\n        let offset := calldataload(add(headStart, 64))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value1 := abi_decode_string(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 96))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value2 := abi_decode_string(add(headStart, offset_1), dataEnd)\n    }\n    function abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptrt_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := abi_decode_struct_TokenId_calldata(headStart, dataEnd)\n        value1 := abi_decode_address(add(headStart, 64))\n        value2 := abi_decode_address(add(headStart, 96))\n        value3 := abi_decode_address(add(headStart, 128))\n    }\n    function abi_decode_tuple_t_struct$_TokenId_$37728_calldata_ptrt_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_struct_TokenId_calldata(headStart, dataEnd)\n        value1 := calldataload(add(headStart, 64))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n    }\n    function abi_decode_tuple_t_struct$_TokenId_$37728_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 64)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, abi_decode_uint32(headStart))\n        mstore(add(memPtr, 32), calldataload(add(headStart, 32)))\n        value0 := memPtr\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        let tail_1 := abi_encode_string(value0, add(headStart, 64))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_string(value1, tail_1)\n    }\n    function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_uint8(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_uint32__to_t_bytes32_t_uint32__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffff))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_address_t_rational_1_by_1__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_uint8_t_string_memory_ptr_t_string_memory_ptr__to_t_uint8_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xff))\n        mstore(add(headStart, 32), 96)\n        let tail_1 := abi_encode_string(value1, add(headStart, 96))\n        mstore(add(headStart, 64), sub(tail_1, headStart))\n        tail := abi_encode_string(value2, tail_1)\n    }\n    function abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"60806040523480156200001157600080fd5b5060043610620001455760003560e01c80639b59851911620000bb578063bd8671a7116200007a578063bd8671a714620003ff578063c40584291462000416578063e1cb3958146200042d578063e9d7bcec1462000444578063f1537686146200045b57600080fd5b80639b5985191462000374578063a1b1930114620003a3578063ad4c777114620003ba578063ae8bc0de14620003d1578063b64a5e0714620003e857600080fd5b806357bd0a32116200010857806357bd0a32146200026c5780635a2164e514620002ad5780636006209114620002c457806380dc22481462000328578063949de969146200033f57600080fd5b806303e418c2146200014a57806307a38d7b14620001d45780631506e463146200020c5780631ecf6f9f14620002255780632c1999d01462000255575b600080fd5b620001ae6200015b36600462001a89565b6040805180820190915260008082526020820152506040805180820182526001600160a01b03909216600081815260066020818152938220805463ffffffff168652929091528252600101549082015290565b60408051825163ffffffff16815260209283015192810192909252015b60405180910390f35b620001eb620001e536600462001abc565b62000472565b604080516001600160a01b03938416815292909116602083015201620001cb565b620002236200021d36600462001b04565b62000498565b005b6200023c6200023636600462001b34565b62000534565b6040516001600160a01b039091168152602001620001cb565b6200023c6200026636600462001b34565b62000547565b6200029c6200027d36600462001b34565b600090815260076020526040902060020154600160a01b900460ff1690565b6040519015158152602001620001cb565b62000223620002be36600462001b4e565b62000554565b620001ae620002d536600462001a89565b6040805180820190915260008082526020820152506040805180820182526001600160a01b03909216600081815260056020818152938220805463ffffffff168652929091528252600101549082015290565b6200023c6200033936600462001b99565b620005fc565b620003656200035036600462001b34565b60009081526007602052604090206004015490565b604051908152602001620001cb565b6200023c6200038536600462001b34565b6000908152600760205260409020600201546001600160a01b031690565b62000223620003b436600462001bb8565b62000619565b6200023c620003cb36600462001b99565b620006c6565b6200029c620003e236600462001b99565b620006e9565b6200023c620003f936600462001cae565b62000706565b6200023c6200041036600462001b99565b620008d7565b620002236200042736600462001d71565b620008fa565b6200023c6200043e36600462001def565b62000a96565b620002236200045536600462001e4d565b62000c06565b620001ae6200046c36600462001a89565b62000c97565b6000806200048d62000485858562000cb6565b858562000cf9565b915091509250929050565b33620004a362000d2a565b6001600160a01b031614158015620004e2575060033360009081526014602052604090205460ff166003811115620004df57620004df62001e7b565b14155b156200050157604051637b32c26b60e01b815260040160405180910390fd5b600062000520602084018035906200051a908662001e91565b62000cb6565b90506200052f83838362000d58565b505050565b6000620005418262000df3565b92915050565b6000620005418262000e12565b336200055f62000d2a565b6001600160a01b0316141580156200059e575060033360009081526014602052604090205460ff1660038111156200059b576200059b62001e7b565b14155b15620005bd57604051637b32c26b60e01b815260040160405180910390fd5b6000620005d6602085018035906200051a908762001e91565b9050620005f6818484620005f03689900389018962001eaf565b62000e4e565b50505050565b60006200054162000385602084018035906200051a908662001e91565b336200062462000d2a565b6001600160a01b03161415801562000663575060033360009081526014602052604090205460ff16600381111562000660576200066062001e7b565b14155b156200068257604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0382166000908152600560209081526040918290208251808401909352805463ffffffff1683526001015490820152620005f68484848462000e4e565b600062000541620006e3602084018035906200051a908662001e91565b62000df3565b6000620005416200027d602084018035906200051a908662001e91565b6000336200071362000d2a565b6001600160a01b03161415801562000752575060033360009081526014602052604090205460ff1660038111156200074f576200074f62001e7b565b14155b156200077157604051637b32c26b60e01b815260040160405180910390fd5b60006200078a60208a018035906200051a908c62001e91565b60045490915060009063ffffffff16620007a860208c018c62001e91565b63ffffffff161490508015620008385760208a013592506001600160a01b03861615801590620007ea5750826001600160a01b0316866001600160a01b031614155b80620007fe57506001600160a01b03851615155b156200081d5760405163022d833560e01b815260040160405180910390fd5b6200083260018a60008660008f8a89620010cc565b620008ca565b6000828152600760205260409020546001600160a01b0316151580620008755750600082815260076020526040902054600160a01b900460ff1615155b15620008945760405163ae154e0360e01b815260040160405180910390fd5b620008b460208b01803590620008ab908d62001e91565b8b8b8b620016af565b9250620008ca60008a8886898f600089620010cc565b5050979650505050505050565b600062000541620008f4602084018035906200051a908662001e91565b62000e12565b336200090562000d2a565b6001600160a01b03161415801562000944575060033360009081526014602052604090205460ff16600381111562000941576200094162001e7b565b14155b156200096357604051637b32c26b60e01b815260040160405180910390fd5b60006200097c602085018035906200051a908762001e91565b905060006200098b8262001737565b546001600160a01b0316905080620009b657604051639db40a2560e01b815260040160405180910390fd5b620009c5602086018662001e91565b60045463ffffffff918216911603620009f157604051630e5a87cb60e21b815260040160405180910390fd5b600082815260076020526040902060020154600160a01b900460ff1662000a2b57604051634d665d9960e01b815260040160405180910390fd5b604051635bd8487760e11b81526001600160a01b0382169063b7b090ee9062000a5b908790879060040162001f54565b600060405180830381600087803b15801562000a7657600080fd5b505af115801562000a8b573d6000803e3d6000fd5b505050505050505050565b60003362000aa362000d2a565b6001600160a01b03161415801562000ae2575060033360009081526014602052604090205460ff16600381111562000adf5762000adf62001e7b565b14155b1562000b0157604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03841662000b2957604051631363580360e21b815260040160405180910390fd5b60045463ffffffff1662000b41602087018762001e91565b63ffffffff160362000b665760405163333de67d60e21b815260040160405180910390fd5b600062000b7f602087018035906200051a908962001e91565b905062000bf96000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000bc6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bec919062001f86565b8688878b600088620010cc565b849150505b949350505050565b3362000c1162000d2a565b6001600160a01b03161415801562000c50575060033360009081526014602052604090205460ff16600381111562000c4d5762000c4d62001e7b565b14155b1562000c6f57604051637b32c26b60e01b815260040160405180910390fd5b600062000c88602084018035906200051a908662001e91565b90506200052f83838362001780565b60408051808201909152600080825260208201526200054182620018be565b6000828260405160200162000cdb92919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b600080600062000d0d8686866000620018df565b9050600062000d1c8762000e12565b919791965090945050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b600081815260076020908152604090912060020180546001600160a01b0319166001600160a01b03851617905562000d939084018462001e91565b63ffffffff168360200135827f16285b1cf634d546d51fefe55f6e63e5edf970d2a3d2bd50b55a8cfad25e8b56853360405162000de69291906001600160a01b0392831681529116602082015260400190565b60405180910390a4505050565b60008062000e018362001737565b546001600160a01b03169392505050565b60008062000e208362001737565b600101546001600160a01b03169050806200054157604051630558a50760e31b815260040160405180910390fd5b60008481526007602052604090206002810154600160a01b900460ff1662000e8957604051631c999e7d60e11b815260040160405180910390fd5b60018101546001600160a01b03858116911614158062000eb6575080546001600160a01b03848116911614155b1562000ed5576040516318707fc960e31b815260040160405180910390fd5b815160045463ffffffff908116911614801562000f9257600062000efa846020015190565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa15801562000f45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f6b919062001fa6565b111562000f8b5760405163454732f160e11b815260040160405180910390fd5b5062001019565b6000846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000fd3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ff9919062001fa6565b1115620010195760405163454732f160e11b815260040160405180910390fd5b6000868152600760209081526040808320600180820180546001600160a81b0319908116909155600283018054909116905560039091018490556001600160a01b03888116855260068452828520805463ffffffff199081168255908301869055908a16855260058452828520805490911681550192909255905133815287917f9d181adb70e733f5235f839c1eed929407ea8526e41d01f49b9fef703e78dddf910160405180910390a2505050505050565b620010db602084018462001e91565b63ffffffff161580620010f057506020830135155b156200110f576040516375ba0d7960e11b815260040160405180910390fd5b6001600160a01b038616156000816200112957876200112b565b865b905060006200113e602087018762001e91565b60045460008681526007602052604090206002015463ffffffff92831692909116919091149150600160a01b900460ff16156200118e5760405163bfa2bf9b60e01b815260040160405180910390fd5b80620013f3576040516370a0823160e01b815230600482015288906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015620011de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001204919062001fa6565b6040516340c10f1960e01b8152306004820152600160248201529091506001600160a01b038316906340c10f1990604401600060405180830381600087803b1580156200125057600080fd5b505af115801562001265573d6000803e3d6000fd5b5050505080600162001278919062001fc0565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015620012bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012e3919062001fa6565b14620013025760405163016dd8ed60e71b815260040160405180910390fd5b604051632770a7eb60e21b8152306004820152600160248201526001600160a01b03831690639dc29fac90604401600060405180830381600087803b1580156200134b57600080fd5b505af115801562001360573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528392506001600160a01b03851691506370a0823190602401602060405180830381865afa158015620013ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013d1919062001fa6565b14620013f05760405163ad6f16e360e01b815260040160405180910390fd5b50505b6040518061010001604052808c6200140c57896200140f565b60005b6001600160a01b031681526020018b60ff168152602001836001600160a01b0316815260200184620014a657836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200147a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014a0919062001f86565b620014a8565b8b5b60ff90811682526000602080840182905260016040808601829052606080870185905260809687018590528b8552600784529381902087518154898601518816600160a01b9081026001600160a81b03199283166001600160a01b0394851617178455938a01519483018054978b0151909816840296811694821694909417959095179095559486015160028501805460a089015115159097029690921693169290921793909317905560c0830151600382015560e090920151600490920191909155620015799087018762001e91565b6001600160a01b0383166000908152600560209081526040909120805463ffffffff191663ffffffff939093169290921782558701356001909101558a6200161957620015ca602087018762001e91565b6001600160a01b0389166000908152600660209081526040909120805463ffffffff191663ffffffff939093169290921782558701356001909101556200161386888662000d58565b6200162d565b84156200162d576200162d86868662001780565b6200163c602087018762001e91565b63ffffffff168660200135857f0c58c78506e2d526f5ccdba28119c9ca3b5ce48e1462e0e19bc39232db11c632858c336040516200169a939291906001600160a01b0393841681529183166020830152909116604082015260600190565b60405180910390a45050505050505050505050565b6000838383604051620016c29062001a5e565b620016d09392919062001fe2565b604051809103906000f080158015620016ed573d6000803e3d6000fd5b509050806001600160a01b0316868663ffffffff167f84d5e3618bf276f3d29a931646fdd996b398a3efa3cf6bceefc1fe7f0304059f60405160405180910390a495945050505050565b6000818152600760205260408120600180820154839291600160a01b90910460ff161015620017795760405163618cca3f60e11b815260040160405180910390fd5b9392505050565b6200178f602084018462001e91565b60045463ffffffff908116911614620017bb5760405163a56029bd60e01b815260040160405180910390fd5b600081815260076020526040902060030182905581156200185f57600060208401356040516370a0823160e01b81523060048201529091506001600160a01b038216906370a0823190602401602060405180830381865afa15801562001825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200184b919062001fa6565b600083815260076020526040902060040155505b6200186e602084018462001e91565b63ffffffff168360200135827f8976b61819dcee01042166c2c5612babc4f820a30843a7f8b23c0ddc343f6ef4853360405162000de69291909182526001600160a01b0316602082015260400190565b6040805180820190915260008082526020820152620005418260006200191d565b600481015460009063ffffffff908116908416036200190057508262000bfe565b6200190b8562001737565b546001600160a01b0316905062000bfe565b604080518082019091526000808252602082015260408051808201909152600080825260208201526001600160a01b0384166200195c57905062000541565b506001600160a01b03831660009081526005830160209081526040918290208251808401909352805463ffffffff168084526001909101549183019190915215620019a957905062000541565b620019b5848462001a1d565b15620019dd57600483015463ffffffff1681526001600160a01b038416602082015262001779565b506001600160a01b03831660009081526006830160209081526040918290208251808401909352805463ffffffff16835260010154908201529392505050565b6001600160a01b038216600090815260068201602052604081205463ffffffff161562001a4d5750600062000541565b50506001600160a01b03163b151590565b6119d9806200201f83390190565b80356001600160a01b038116811462001a8457600080fd5b919050565b60006020828403121562001a9c57600080fd5b620017798262001a6c565b803563ffffffff8116811462001a8457600080fd5b6000806040838503121562001ad057600080fd5b8235915062001ae26020840162001aa7565b90509250929050565b60006040828403121562001afe57600080fd5b50919050565b6000806060838503121562001b1857600080fd5b62001b24848462001aeb565b915062001ae26040840162001a6c565b60006020828403121562001b4757600080fd5b5035919050565b60008060006080848603121562001b6457600080fd5b62001b70858562001aeb565b925062001b806040850162001a6c565b915062001b906060850162001a6c565b90509250925092565b60006040828403121562001bac57600080fd5b62001779838362001aeb565b60008060006060848603121562001bce57600080fd5b8335925062001be06020850162001a6c565b915062001b906040850162001a6c565b60ff8116811462001c0057600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f83011262001c2b57600080fd5b813567ffffffffffffffff8082111562001c495762001c4962001c03565b604051601f8301601f19908116603f0116810190828211818310171562001c745762001c7462001c03565b8160405283815286602085880101111562001c8e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806000806000610100888a03121562001ccb57600080fd5b62001cd7898962001aeb565b9650604088013562001ce98162001bf0565b9550606088013567ffffffffffffffff8082111562001d0757600080fd5b62001d158b838c0162001c19565b965060808a013591508082111562001d2c57600080fd5b5062001d3b8a828b0162001c19565b94505062001d4c60a0890162001a6c565b925062001d5c60c0890162001a6c565b915060e0880135905092959891949750929550565b60008060006080848603121562001d8757600080fd5b62001d93858562001aeb565b9250604084013567ffffffffffffffff8082111562001db157600080fd5b62001dbf8783880162001c19565b9350606086013591508082111562001dd657600080fd5b5062001de58682870162001c19565b9150509250925092565b60008060008060a0858703121562001e0657600080fd5b62001e12868662001aeb565b935062001e226040860162001a6c565b925062001e326060860162001a6c565b915062001e426080860162001a6c565b905092959194509250565b6000806060838503121562001e6157600080fd5b62001e6d848462001aeb565b946040939093013593505050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121562001ea457600080fd5b620017798262001aa7565b60006040828403121562001ec257600080fd5b6040516040810181811067ffffffffffffffff8211171562001ee85762001ee862001c03565b60405262001ef68362001aa7565b8152602083013560208201528091505092915050565b6000815180845260005b8181101562001f345760208185018101518683018201520162001f16565b506000602082860101526020601f19601f83011685010191505092915050565b60408152600062001f69604083018562001f0c565b828103602084015262001f7d818562001f0c565b95945050505050565b60006020828403121562001f9957600080fd5b8151620017798162001bf0565b60006020828403121562001fb957600080fd5b5051919050565b808201808211156200054157634e487b7160e01b600052601160045260246000fd5b60ff8416815260606020820152600062002000606083018562001f0c565b828103604084015262002014818562001f0c565b969550505050505056fe60e06040523480156200001157600080fd5b50604051620019d9380380620019d9833981016040819052620000349162000245565b828282604051806040016040528060018152602001603160f81b8152506200006b620000656200012c60201b60201c565b62000130565b600462000079848262000358565b50600562000088838262000358565b506006805460ff191660ff9590951694909417909355508051602091820120825192820192909220600983905560c0818152466080818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801528082019790975260608701949094528501523060a08086018290528351808703820181529590920190925283519390920192909220600855525062000424915050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001a857600080fd5b81516001600160401b0380821115620001c557620001c562000180565b604051601f8301601f19908116603f01168101908282118183101715620001f057620001f062000180565b816040528381526020925086838588010111156200020d57600080fd5b600091505b8382101562000231578582018301518183018401529082019062000212565b600093810190920192909252949350505050565b6000806000606084860312156200025b57600080fd5b835160ff811681146200026d57600080fd5b60208501519093506001600160401b03808211156200028b57600080fd5b620002998783880162000196565b93506040860151915080821115620002b057600080fd5b50620002bf8682870162000196565b9150509250925092565b600181811c90821680620002de57607f821691505b602082108103620002ff57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200035357600081815260208120601f850160051c810160208610156200032e5750805b601f850160051c820191505b818110156200034f578281556001016200033a565b5050505b505050565b81516001600160401b0381111562000374576200037462000180565b6200038c81620003858454620002c9565b8462000305565b602080601f831160018114620003c45760008415620003ab5750858301515b600019600386901b1c1916600185901b1785556200034f565b600085815260208120601f198616915b82811015620003f557888601518255948401946001909101908401620003d4565b5085821015620004145787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05161157e6200045b600039600081816105400152610ba601526000610b2501526000610b4f015261157e6000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637ecebe00116100ad578063a9059cbb11610071578063a9059cbb14610269578063b7b090ee1461027c578063d505accf1461028f578063dd62ed3e146102a2578063f2fde38b146102b557600080fd5b80637ecebe001461020d5780638da5cb5b1461022057806395d89b411461023b5780639dc29fac14610243578063a457c2d71461025657600080fd5b80633644e515116100f45780633644e515146101ac57806339509351146101b457806340c10f19146101c757806370a08231146101dc578063715018a61461020557600080fd5b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017257806323b872dd14610184578063313ce56714610197575b600080fd5b6101396102c8565b604051610146919061115b565b60405180910390f35b61016261015d3660046111c5565b61035a565b6040519015158152602001610146565b6003545b604051908152602001610146565b6101626101923660046111ef565b610371565b60065460405160ff9091168152602001610146565b610176610393565b6101626101c23660046111c5565b6103a2565b6101da6101d53660046111c5565b6103de565b005b6101766101ea36600461122b565b6001600160a01b031660009081526001602052604090205490565b6101da6103f4565b61017661021b36600461122b565b610408565b6000546040516001600160a01b039091168152602001610146565b610139610426565b6101da6102513660046111c5565b610435565b6101626102643660046111c5565b610447565b6101626102773660046111c5565b6104c6565b6101da61028a366004611296565b6104d3565b6101da61029d366004611302565b6105c6565b6101766102b0366004611375565b61072a565b6101da6102c336600461122b565b610755565b6060600480546102d7906113a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610303906113a8565b80156103505780601f1061032557610100808354040283529160200191610350565b820191906000526020600020905b81548152906001019060200180831161033357829003601f168201915b5050505050905090565b60006103673384846107ce565b5060015b92915050565b600061037e8433846108f3565b61038984848461096d565b5060019392505050565b600061039d610b18565b905090565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916103679185906103d99086906113dc565b6107ce565b6103e6610bca565b6103f08282610c24565b5050565b6103fc610bca565b6104066000610ce5565b565b6001600160a01b03811660009081526007602052604081205461036b565b6060600580546102d7906113a8565b61043d610bca565b6103f08282610d35565b600080610454338561072a565b9050828110156104b95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61038933858584036107ce565b600061036733848461096d565b6104db610bca565b60046104e8848683611461565b5060056104f6828483611461565b5060008484604051610509929190611522565b604051908190039020600981905590506105647f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f827f0000000000000000000000000000000000000000000000000000000000000000610e66565b6008556040516105779084908490611522565b6040518091039020858560405161058f929190611522565b604051908190038120907f1ec4c73af923253fb2c28a509dd78d342709289a09929d78c64c0b8e047efbcd90600090a35050505050565b834211156106165760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104b0565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886106458c610eaf565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106a082610ed7565b905060006106b082878787610f25565b9050896001600160a01b0316816001600160a01b0316146107135760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104b0565b61071e8a8a8a6107ce565b50505050505050505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b61075d610bca565b6001600160a01b0381166107c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104b0565b6107cb81610ce5565b50565b6001600160a01b0383166108305760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104b0565b6001600160a01b0382166108915760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104b0565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006108ff848461072a565b90506000198114610967578181101561095a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104b0565b61096784848484036107ce565b50505050565b6001600160a01b0383166109d15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104b0565b6001600160a01b038216610a335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104b0565b6001600160a01b03831660009081526001602052604090205481811015610aab5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104b0565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b0b9086815260200190565b60405180910390a3610967565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b7157507f000000000000000000000000000000000000000000000000000000000000000046145b15610b7d575060085490565b61039d7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6009547f0000000000000000000000000000000000000000000000000000000000000000610e66565b6000546001600160a01b031633146104065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b0565b6001600160a01b038216610c7a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104b0565b8060036000828254610c8c91906113dc565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216610d955760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104b0565b6001600160a01b03821660009081526001602052604090205481811015610e095760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104b0565b6001600160a01b03831660008181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016108e6565b505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b600061036b610ee4610b18565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610f3687878787610f4d565b91509150610f4381611011565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610f845750600090506003611008565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610fd8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661100157600060019250925050611008565b9150600090505b94509492505050565b600081600481111561102557611025611532565b0361102d5750565b600181600481111561104157611041611532565b0361108e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104b0565b60028160048111156110a2576110a2611532565b036110ef5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104b0565b600381600481111561110357611103611532565b036107cb5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104b0565b600060208083528351808285015260005b818110156111885785810183015185820160400152820161116c565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146111c057600080fd5b919050565b600080604083850312156111d857600080fd5b6111e1836111a9565b946020939093013593505050565b60008060006060848603121561120457600080fd5b61120d846111a9565b925061121b602085016111a9565b9150604084013590509250925092565b60006020828403121561123d57600080fd5b611246826111a9565b9392505050565b60008083601f84011261125f57600080fd5b50813567ffffffffffffffff81111561127757600080fd5b60208301915083602082850101111561128f57600080fd5b9250929050565b600080600080604085870312156112ac57600080fd5b843567ffffffffffffffff808211156112c457600080fd5b6112d08883890161124d565b909650945060208701359150808211156112e957600080fd5b506112f68782880161124d565b95989497509550505050565b600080600080600080600060e0888a03121561131d57600080fd5b611326886111a9565b9650611334602089016111a9565b95506040880135945060608801359350608088013560ff8116811461135857600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561138857600080fd5b611391836111a9565b915061139f602084016111a9565b90509250929050565b600181811c908216806113bc57607f821691505b602082108103610ed157634e487b7160e01b600052602260045260246000fd5b8082018082111561036b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b601f821115610e6157600081815260208120601f850160051c8101602086101561143a5750805b601f850160051c820191505b8181101561145957828155600101611446565b505050505050565b67ffffffffffffffff831115611479576114796113fd565b61148d8361148783546113a8565b83611413565b6000601f8411600181146114c157600085156114a95750838201355b600019600387901b1c1916600186901b17835561151b565b600083815260209020601f19861690835b828110156114f257868501358255602094850194600190920191016114d2565b508682101561150f5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8183823760009101908152919050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212208113c928e03165e19b5c7ac5b67b85c32ab586cd042677306fbd142d27afccf664736f6c63430008110033a2646970667358221220300cc646d0359b86871a6e263ab844429c60311081ebea2afdd51b016410d91c64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH3 0x145 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9B598519 GT PUSH3 0xBB JUMPI DUP1 PUSH4 0xBD8671A7 GT PUSH3 0x7A JUMPI DUP1 PUSH4 0xBD8671A7 EQ PUSH3 0x3FF JUMPI DUP1 PUSH4 0xC4058429 EQ PUSH3 0x416 JUMPI DUP1 PUSH4 0xE1CB3958 EQ PUSH3 0x42D JUMPI DUP1 PUSH4 0xE9D7BCEC EQ PUSH3 0x444 JUMPI DUP1 PUSH4 0xF1537686 EQ PUSH3 0x45B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9B598519 EQ PUSH3 0x374 JUMPI DUP1 PUSH4 0xA1B19301 EQ PUSH3 0x3A3 JUMPI DUP1 PUSH4 0xAD4C7771 EQ PUSH3 0x3BA JUMPI DUP1 PUSH4 0xAE8BC0DE EQ PUSH3 0x3D1 JUMPI DUP1 PUSH4 0xB64A5E07 EQ PUSH3 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x57BD0A32 GT PUSH3 0x108 JUMPI DUP1 PUSH4 0x57BD0A32 EQ PUSH3 0x26C JUMPI DUP1 PUSH4 0x5A2164E5 EQ PUSH3 0x2AD JUMPI DUP1 PUSH4 0x60062091 EQ PUSH3 0x2C4 JUMPI DUP1 PUSH4 0x80DC2248 EQ PUSH3 0x328 JUMPI DUP1 PUSH4 0x949DE969 EQ PUSH3 0x33F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3E418C2 EQ PUSH3 0x14A JUMPI DUP1 PUSH4 0x7A38D7B EQ PUSH3 0x1D4 JUMPI DUP1 PUSH4 0x1506E463 EQ PUSH3 0x20C JUMPI DUP1 PUSH4 0x1ECF6F9F EQ PUSH3 0x225 JUMPI DUP1 PUSH4 0x2C1999D0 EQ PUSH3 0x255 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1AE PUSH3 0x15B CALLDATASIZE PUSH1 0x4 PUSH3 0x1A89 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP4 DUP3 KECCAK256 DUP1 SLOAD PUSH4 0xFFFFFFFF AND DUP7 MSTORE SWAP3 SWAP1 SWAP2 MSTORE DUP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 MLOAD PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD MLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH3 0x1EB PUSH3 0x1E5 CALLDATASIZE PUSH1 0x4 PUSH3 0x1ABC JUMP JUMPDEST PUSH3 0x472 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH3 0x1CB JUMP JUMPDEST PUSH3 0x223 PUSH3 0x21D CALLDATASIZE PUSH1 0x4 PUSH3 0x1B04 JUMP JUMPDEST PUSH3 0x498 JUMP JUMPDEST STOP JUMPDEST PUSH3 0x23C PUSH3 0x236 CALLDATASIZE PUSH1 0x4 PUSH3 0x1B34 JUMP JUMPDEST PUSH3 0x534 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x1CB JUMP JUMPDEST PUSH3 0x23C PUSH3 0x266 CALLDATASIZE PUSH1 0x4 PUSH3 0x1B34 JUMP JUMPDEST PUSH3 0x547 JUMP JUMPDEST PUSH3 0x29C PUSH3 0x27D CALLDATASIZE PUSH1 0x4 PUSH3 0x1B34 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x1CB JUMP JUMPDEST PUSH3 0x223 PUSH3 0x2BE CALLDATASIZE PUSH1 0x4 PUSH3 0x1B4E JUMP JUMPDEST PUSH3 0x554 JUMP JUMPDEST PUSH3 0x1AE PUSH3 0x2D5 CALLDATASIZE PUSH1 0x4 PUSH3 0x1A89 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE SWAP4 DUP3 KECCAK256 DUP1 SLOAD PUSH4 0xFFFFFFFF AND DUP7 MSTORE SWAP3 SWAP1 SWAP2 MSTORE DUP3 MSTORE PUSH1 0x1 ADD SLOAD SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH3 0x23C PUSH3 0x339 CALLDATASIZE PUSH1 0x4 PUSH3 0x1B99 JUMP JUMPDEST PUSH3 0x5FC JUMP JUMPDEST PUSH3 0x365 PUSH3 0x350 CALLDATASIZE PUSH1 0x4 PUSH3 0x1B34 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x1CB JUMP JUMPDEST PUSH3 0x23C PUSH3 0x385 CALLDATASIZE PUSH1 0x4 PUSH3 0x1B34 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH3 0x223 PUSH3 0x3B4 CALLDATASIZE PUSH1 0x4 PUSH3 0x1BB8 JUMP JUMPDEST PUSH3 0x619 JUMP JUMPDEST PUSH3 0x23C PUSH3 0x3CB CALLDATASIZE PUSH1 0x4 PUSH3 0x1B99 JUMP JUMPDEST PUSH3 0x6C6 JUMP JUMPDEST PUSH3 0x29C PUSH3 0x3E2 CALLDATASIZE PUSH1 0x4 PUSH3 0x1B99 JUMP JUMPDEST PUSH3 0x6E9 JUMP JUMPDEST PUSH3 0x23C PUSH3 0x3F9 CALLDATASIZE PUSH1 0x4 PUSH3 0x1CAE JUMP JUMPDEST PUSH3 0x706 JUMP JUMPDEST PUSH3 0x23C PUSH3 0x410 CALLDATASIZE PUSH1 0x4 PUSH3 0x1B99 JUMP JUMPDEST PUSH3 0x8D7 JUMP JUMPDEST PUSH3 0x223 PUSH3 0x427 CALLDATASIZE PUSH1 0x4 PUSH3 0x1D71 JUMP JUMPDEST PUSH3 0x8FA JUMP JUMPDEST PUSH3 0x23C PUSH3 0x43E CALLDATASIZE PUSH1 0x4 PUSH3 0x1DEF JUMP JUMPDEST PUSH3 0xA96 JUMP JUMPDEST PUSH3 0x223 PUSH3 0x455 CALLDATASIZE PUSH1 0x4 PUSH3 0x1E4D JUMP JUMPDEST PUSH3 0xC06 JUMP JUMPDEST PUSH3 0x1AE PUSH3 0x46C CALLDATASIZE PUSH1 0x4 PUSH3 0x1A89 JUMP JUMPDEST PUSH3 0xC97 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH3 0x48D PUSH3 0x485 DUP6 DUP6 PUSH3 0xCB6 JUMP JUMPDEST DUP6 DUP6 PUSH3 0xCF9 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST CALLER PUSH3 0x4A3 PUSH3 0xD2A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH3 0x4E2 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH3 0x4DF JUMPI PUSH3 0x4DF PUSH3 0x1E7B JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH3 0x501 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x520 PUSH1 0x20 DUP5 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP7 PUSH3 0x1E91 JUMP JUMPDEST PUSH3 0xCB6 JUMP JUMPDEST SWAP1 POP PUSH3 0x52F DUP4 DUP4 DUP4 PUSH3 0xD58 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x541 DUP3 PUSH3 0xDF3 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x541 DUP3 PUSH3 0xE12 JUMP JUMPDEST CALLER PUSH3 0x55F PUSH3 0xD2A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH3 0x59E JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH3 0x59B JUMPI PUSH3 0x59B PUSH3 0x1E7B JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH3 0x5BD JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x5D6 PUSH1 0x20 DUP6 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP8 PUSH3 0x1E91 JUMP JUMPDEST SWAP1 POP PUSH3 0x5F6 DUP2 DUP5 DUP5 PUSH3 0x5F0 CALLDATASIZE DUP10 SWAP1 SUB DUP10 ADD DUP10 PUSH3 0x1EAF JUMP JUMPDEST PUSH3 0xE4E JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x541 PUSH3 0x385 PUSH1 0x20 DUP5 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP7 PUSH3 0x1E91 JUMP JUMPDEST CALLER PUSH3 0x624 PUSH3 0xD2A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH3 0x663 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH3 0x660 JUMPI PUSH3 0x660 PUSH3 0x1E7B JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH3 0x682 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE PUSH1 0x1 ADD SLOAD SWAP1 DUP3 ADD MSTORE PUSH3 0x5F6 DUP5 DUP5 DUP5 DUP5 PUSH3 0xE4E JUMP JUMPDEST PUSH1 0x0 PUSH3 0x541 PUSH3 0x6E3 PUSH1 0x20 DUP5 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP7 PUSH3 0x1E91 JUMP JUMPDEST PUSH3 0xDF3 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x541 PUSH3 0x27D PUSH1 0x20 DUP5 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP7 PUSH3 0x1E91 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH3 0x713 PUSH3 0xD2A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH3 0x752 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH3 0x74F JUMPI PUSH3 0x74F PUSH3 0x1E7B JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH3 0x771 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x78A PUSH1 0x20 DUP11 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP13 PUSH3 0x1E91 JUMP JUMPDEST PUSH1 0x4 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH4 0xFFFFFFFF AND PUSH3 0x7A8 PUSH1 0x20 DUP13 ADD DUP13 PUSH3 0x1E91 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ SWAP1 POP DUP1 ISZERO PUSH3 0x838 JUMPI PUSH1 0x20 DUP11 ADD CALLDATALOAD SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND ISZERO DUP1 ISZERO SWAP1 PUSH3 0x7EA JUMPI POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST DUP1 PUSH3 0x7FE JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND ISZERO ISZERO JUMPDEST ISZERO PUSH3 0x81D JUMPI PUSH1 0x40 MLOAD PUSH4 0x22D8335 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x832 PUSH1 0x1 DUP11 PUSH1 0x0 DUP7 PUSH1 0x0 DUP16 DUP11 DUP10 PUSH3 0x10CC JUMP JUMPDEST PUSH3 0x8CA JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO ISZERO DUP1 PUSH3 0x875 JUMPI POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO JUMPDEST ISZERO PUSH3 0x894 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAE154E03 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x8B4 PUSH1 0x20 DUP12 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x8AB SWAP1 DUP14 PUSH3 0x1E91 JUMP JUMPDEST DUP12 DUP12 DUP12 PUSH3 0x16AF JUMP JUMPDEST SWAP3 POP PUSH3 0x8CA PUSH1 0x0 DUP11 DUP9 DUP7 DUP10 DUP16 PUSH1 0x0 DUP10 PUSH3 0x10CC JUMP JUMPDEST POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x541 PUSH3 0x8F4 PUSH1 0x20 DUP5 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP7 PUSH3 0x1E91 JUMP JUMPDEST PUSH3 0xE12 JUMP JUMPDEST CALLER PUSH3 0x905 PUSH3 0xD2A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH3 0x944 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH3 0x941 JUMPI PUSH3 0x941 PUSH3 0x1E7B JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH3 0x963 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x97C PUSH1 0x20 DUP6 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP8 PUSH3 0x1E91 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH3 0x98B DUP3 PUSH3 0x1737 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 PUSH3 0x9B6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9DB40A25 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x9C5 PUSH1 0x20 DUP7 ADD DUP7 PUSH3 0x1E91 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF SWAP2 DUP3 AND SWAP2 AND SUB PUSH3 0x9F1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE5A87CB PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH3 0xA2B JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D665D99 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5BD84877 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0xB7B090EE SWAP1 PUSH3 0xA5B SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH3 0x1F54 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xA76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0xA8B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH3 0xAA3 PUSH3 0xD2A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH3 0xAE2 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH3 0xADF JUMPI PUSH3 0xADF PUSH3 0x1E7B JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH3 0xB01 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH3 0xB29 JUMPI PUSH1 0x40 MLOAD PUSH4 0x13635803 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF AND PUSH3 0xB41 PUSH1 0x20 DUP8 ADD DUP8 PUSH3 0x1E91 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND SUB PUSH3 0xB66 JUMPI PUSH1 0x40 MLOAD PUSH4 0x333DE67D PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0xB7F PUSH1 0x20 DUP8 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP10 PUSH3 0x1E91 JUMP JUMPDEST SWAP1 POP PUSH3 0xBF9 PUSH1 0x0 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xBC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xBEC SWAP2 SWAP1 PUSH3 0x1F86 JUMP JUMPDEST DUP7 DUP9 DUP8 DUP12 PUSH1 0x0 DUP9 PUSH3 0x10CC JUMP JUMPDEST DUP5 SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST CALLER PUSH3 0xC11 PUSH3 0xD2A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH3 0xC50 JUMPI POP PUSH1 0x3 CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x14 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH3 0xC4D JUMPI PUSH3 0xC4D PUSH3 0x1E7B JUMP JUMPDEST EQ ISZERO JUMPDEST ISZERO PUSH3 0xC6F JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B32C26B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0xC88 PUSH1 0x20 DUP5 ADD DUP1 CALLDATALOAD SWAP1 PUSH3 0x51A SWAP1 DUP7 PUSH3 0x1E91 JUMP JUMPDEST SWAP1 POP PUSH3 0x52F DUP4 DUP4 DUP4 PUSH3 0x1780 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH3 0x541 DUP3 PUSH3 0x18BE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH3 0xCDB SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH4 0xFFFFFFFF AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH3 0xD0D DUP7 DUP7 DUP7 PUSH1 0x0 PUSH3 0x18DF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH3 0xD1C DUP8 PUSH3 0xE12 JUMP JUMPDEST SWAP2 SWAP8 SWAP2 SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 PUSH1 0x2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND OR SWAP1 SSTORE PUSH3 0xD93 SWAP1 DUP5 ADD DUP5 PUSH3 0x1E91 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP4 PUSH1 0x20 ADD CALLDATALOAD DUP3 PUSH32 0x16285B1CF634D546D51FEFE55F6E63E5EDF970D2A3D2BD50B55A8CFAD25E8B56 DUP6 CALLER PUSH1 0x40 MLOAD PUSH3 0xDE6 SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH3 0xE01 DUP4 PUSH3 0x1737 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH3 0xE20 DUP4 PUSH3 0x1737 JUMP JUMPDEST PUSH1 0x1 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 PUSH3 0x541 JUMPI PUSH1 0x40 MLOAD PUSH4 0x558A507 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH3 0xE89 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1C999E7D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP2 AND EQ ISZERO DUP1 PUSH3 0xEB6 JUMPI POP DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 AND EQ ISZERO JUMPDEST ISZERO PUSH3 0xED5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x18707FC9 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH3 0xF92 JUMPI PUSH1 0x0 PUSH3 0xEFA DUP5 PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xF45 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xF6B SWAP2 SWAP1 PUSH3 0x1FA6 JUMP JUMPDEST GT ISZERO PUSH3 0xF8B JUMPI PUSH1 0x40 MLOAD PUSH4 0x454732F1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH3 0x1019 JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xFD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xFF9 SWAP2 SWAP1 PUSH3 0x1FA6 JUMP JUMPDEST GT ISZERO PUSH3 0x1019 JUMPI PUSH1 0x40 MLOAD PUSH4 0x454732F1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 DUP1 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x2 DUP4 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH1 0x3 SWAP1 SWAP2 ADD DUP5 SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND DUP6 MSTORE PUSH1 0x6 DUP5 MSTORE DUP3 DUP6 KECCAK256 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT SWAP1 DUP2 AND DUP3 SSTORE SWAP1 DUP4 ADD DUP7 SWAP1 SSTORE SWAP1 DUP11 AND DUP6 MSTORE PUSH1 0x5 DUP5 MSTORE DUP3 DUP6 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 AND DUP2 SSTORE ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP1 MLOAD CALLER DUP2 MSTORE DUP8 SWAP2 PUSH32 0x9D181ADB70E733F5235F839C1EED929407EA8526E41D01F49B9FEF703E78DDDF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH3 0x10DB PUSH1 0x20 DUP5 ADD DUP5 PUSH3 0x1E91 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND ISZERO DUP1 PUSH3 0x10F0 JUMPI POP PUSH1 0x20 DUP4 ADD CALLDATALOAD ISZERO JUMPDEST ISZERO PUSH3 0x110F JUMPI PUSH1 0x40 MLOAD PUSH4 0x75BA0D79 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND ISZERO PUSH1 0x0 DUP2 PUSH3 0x1129 JUMPI DUP8 PUSH3 0x112B JUMP JUMPDEST DUP7 JUMPDEST SWAP1 POP PUSH1 0x0 PUSH3 0x113E PUSH1 0x20 DUP8 ADD DUP8 PUSH3 0x1E91 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH4 0xFFFFFFFF SWAP3 DUP4 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 EQ SWAP2 POP PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH3 0x118E JUMPI PUSH1 0x40 MLOAD PUSH4 0xBFA2BF9B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH3 0x13F3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP9 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x11DE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x1204 SWAP2 SWAP1 PUSH3 0x1FA6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x40C10F19 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x40C10F19 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x1250 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x1265 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x1 PUSH3 0x1278 SWAP2 SWAP1 PUSH3 0x1FC0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x12BD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x12E3 SWAP2 SWAP1 PUSH3 0x1FA6 JUMP JUMPDEST EQ PUSH3 0x1302 JUMPI PUSH1 0x40 MLOAD PUSH4 0x16DD8ED PUSH1 0xE7 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2770A7EB PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x9DC29FAC SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x134B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x1360 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP4 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 POP PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x13AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x13D1 SWAP2 SWAP1 PUSH3 0x1FA6 JUMP JUMPDEST EQ PUSH3 0x13F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD6F16E3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 DUP13 PUSH3 0x140C JUMPI DUP10 PUSH3 0x140F JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH3 0x14A6 JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x147A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x14A0 SWAP2 SWAP1 PUSH3 0x1F86 JUMP JUMPDEST PUSH3 0x14A8 JUMP JUMPDEST DUP12 JUMPDEST PUSH1 0xFF SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x40 DUP1 DUP7 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP8 ADD DUP6 SWAP1 MSTORE PUSH1 0x80 SWAP7 DUP8 ADD DUP6 SWAP1 MSTORE DUP12 DUP6 MSTORE PUSH1 0x7 DUP5 MSTORE SWAP4 DUP2 SWAP1 KECCAK256 DUP8 MLOAD DUP2 SLOAD DUP10 DUP7 ADD MLOAD DUP9 AND PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DUP2 MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND OR OR DUP5 SSTORE SWAP4 DUP11 ADD MLOAD SWAP5 DUP4 ADD DUP1 SLOAD SWAP8 DUP12 ADD MLOAD SWAP1 SWAP9 AND DUP5 MUL SWAP7 DUP2 AND SWAP5 DUP3 AND SWAP5 SWAP1 SWAP5 OR SWAP6 SWAP1 SWAP6 OR SWAP1 SWAP6 SSTORE SWAP5 DUP7 ADD MLOAD PUSH1 0x2 DUP6 ADD DUP1 SLOAD PUSH1 0xA0 DUP10 ADD MLOAD ISZERO ISZERO SWAP1 SWAP8 MUL SWAP7 SWAP1 SWAP3 AND SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0x3 DUP3 ADD SSTORE PUSH1 0xE0 SWAP1 SWAP3 ADD MLOAD PUSH1 0x4 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH3 0x1579 SWAP1 DUP8 ADD DUP8 PUSH3 0x1E91 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR DUP3 SSTORE DUP8 ADD CALLDATALOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE DUP11 PUSH3 0x1619 JUMPI PUSH3 0x15CA PUSH1 0x20 DUP8 ADD DUP8 PUSH3 0x1E91 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR DUP3 SSTORE DUP8 ADD CALLDATALOAD PUSH1 0x1 SWAP1 SWAP2 ADD SSTORE PUSH3 0x1613 DUP7 DUP9 DUP7 PUSH3 0xD58 JUMP JUMPDEST PUSH3 0x162D JUMP JUMPDEST DUP5 ISZERO PUSH3 0x162D JUMPI PUSH3 0x162D DUP7 DUP7 DUP7 PUSH3 0x1780 JUMP JUMPDEST PUSH3 0x163C PUSH1 0x20 DUP8 ADD DUP8 PUSH3 0x1E91 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP7 PUSH1 0x20 ADD CALLDATALOAD DUP6 PUSH32 0xC58C78506E2D526F5CCDBA28119C9CA3B5CE48E1462E0E19BC39232DB11C632 DUP6 DUP13 CALLER PUSH1 0x40 MLOAD PUSH3 0x169A SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH3 0x16C2 SWAP1 PUSH3 0x1A5E JUMP JUMPDEST PUSH3 0x16D0 SWAP4 SWAP3 SWAP2 SWAP1 PUSH3 0x1FE2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x16ED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP7 PUSH4 0xFFFFFFFF AND PUSH32 0x84D5E3618BF276F3D29A931646FDD996B398A3EFA3CF6BCEEFC1FE7F0304059F PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 DUP1 DUP3 ADD SLOAD DUP4 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0xFF AND LT ISZERO PUSH3 0x1779 JUMPI PUSH1 0x40 MLOAD PUSH4 0x618CCA3F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH3 0x178F PUSH1 0x20 DUP5 ADD DUP5 PUSH3 0x1E91 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP2 AND EQ PUSH3 0x17BB JUMPI PUSH1 0x40 MLOAD PUSH4 0xA56029BD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD DUP3 SWAP1 SSTORE DUP2 ISZERO PUSH3 0x185F JUMPI PUSH1 0x0 PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x1825 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x184B SWAP2 SWAP1 PUSH3 0x1FA6 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x4 ADD SSTORE POP JUMPDEST PUSH3 0x186E PUSH1 0x20 DUP5 ADD DUP5 PUSH3 0x1E91 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP4 PUSH1 0x20 ADD CALLDATALOAD DUP3 PUSH32 0x8976B61819DCEE01042166C2C5612BABC4F820A30843A7F8B23C0DDC343F6EF4 DUP6 CALLER PUSH1 0x40 MLOAD PUSH3 0xDE6 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH3 0x541 DUP3 PUSH1 0x0 PUSH3 0x191D JUMP JUMPDEST PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP5 AND SUB PUSH3 0x1900 JUMPI POP DUP3 PUSH3 0xBFE JUMP JUMPDEST PUSH3 0x190B DUP6 PUSH3 0x1737 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH3 0xBFE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH3 0x195C JUMPI SWAP1 POP PUSH3 0x541 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 DUP4 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD PUSH4 0xFFFFFFFF AND DUP1 DUP5 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ISZERO PUSH3 0x19A9 JUMPI SWAP1 POP PUSH3 0x541 JUMP JUMPDEST PUSH3 0x19B5 DUP5 DUP5 PUSH3 0x1A1D JUMP JUMPDEST ISZERO PUSH3 0x19DD JUMPI PUSH1 0x4 DUP4 ADD SLOAD PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH3 0x1779 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 DUP4 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE PUSH1 0x1 ADD SLOAD SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND ISZERO PUSH3 0x1A4D JUMPI POP PUSH1 0x0 PUSH3 0x541 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x19D9 DUP1 PUSH3 0x201F DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1A84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1A9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1779 DUP3 PUSH3 0x1A6C JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH3 0x1A84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x1AD0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH3 0x1AE2 PUSH1 0x20 DUP5 ADD PUSH3 0x1AA7 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1AFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x1B18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1B24 DUP5 DUP5 PUSH3 0x1AEB JUMP JUMPDEST SWAP2 POP PUSH3 0x1AE2 PUSH1 0x40 DUP5 ADD PUSH3 0x1A6C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1B47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x1B64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1B70 DUP6 DUP6 PUSH3 0x1AEB JUMP JUMPDEST SWAP3 POP PUSH3 0x1B80 PUSH1 0x40 DUP6 ADD PUSH3 0x1A6C JUMP JUMPDEST SWAP2 POP PUSH3 0x1B90 PUSH1 0x60 DUP6 ADD PUSH3 0x1A6C JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1BAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1779 DUP4 DUP4 PUSH3 0x1AEB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x1BCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH3 0x1BE0 PUSH1 0x20 DUP6 ADD PUSH3 0x1A6C JUMP JUMPDEST SWAP2 POP PUSH3 0x1B90 PUSH1 0x40 DUP6 ADD PUSH3 0x1A6C JUMP JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH3 0x1C00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x1C2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH3 0x1C49 JUMPI PUSH3 0x1C49 PUSH3 0x1C03 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x1C74 JUMPI PUSH3 0x1C74 PUSH3 0x1C03 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x1C8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 DUP9 DUP11 SUB SLT ISZERO PUSH3 0x1CCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1CD7 DUP10 DUP10 PUSH3 0x1AEB JUMP JUMPDEST SWAP7 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH3 0x1CE9 DUP2 PUSH3 0x1BF0 JUMP JUMPDEST SWAP6 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH3 0x1D07 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1D15 DUP12 DUP4 DUP13 ADD PUSH3 0x1C19 JUMP JUMPDEST SWAP7 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x1D2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x1D3B DUP11 DUP3 DUP12 ADD PUSH3 0x1C19 JUMP JUMPDEST SWAP5 POP POP PUSH3 0x1D4C PUSH1 0xA0 DUP10 ADD PUSH3 0x1A6C JUMP JUMPDEST SWAP3 POP PUSH3 0x1D5C PUSH1 0xC0 DUP10 ADD PUSH3 0x1A6C JUMP JUMPDEST SWAP2 POP PUSH1 0xE0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x1D87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1D93 DUP6 DUP6 PUSH3 0x1AEB JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH3 0x1DB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1DBF DUP8 DUP4 DUP9 ADD PUSH3 0x1C19 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x1DD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x1DE5 DUP7 DUP3 DUP8 ADD PUSH3 0x1C19 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x1E06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1E12 DUP7 DUP7 PUSH3 0x1AEB JUMP JUMPDEST SWAP4 POP PUSH3 0x1E22 PUSH1 0x40 DUP7 ADD PUSH3 0x1A6C JUMP JUMPDEST SWAP3 POP PUSH3 0x1E32 PUSH1 0x60 DUP7 ADD PUSH3 0x1A6C JUMP JUMPDEST SWAP2 POP PUSH3 0x1E42 PUSH1 0x80 DUP7 ADD PUSH3 0x1A6C JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x1E61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1E6D DUP5 DUP5 PUSH3 0x1AEB JUMP JUMPDEST SWAP5 PUSH1 0x40 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1EA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1779 DUP3 PUSH3 0x1AA7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1EC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH3 0x1EE8 JUMPI PUSH3 0x1EE8 PUSH3 0x1C03 JUMP JUMPDEST PUSH1 0x40 MSTORE PUSH3 0x1EF6 DUP4 PUSH3 0x1AA7 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x1F34 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH3 0x1F16 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH3 0x1F69 PUSH1 0x40 DUP4 ADD DUP6 PUSH3 0x1F0C JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH3 0x1F7D DUP2 DUP6 PUSH3 0x1F0C JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1F99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x1779 DUP2 PUSH3 0x1BF0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1FB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH3 0x541 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0xFF DUP5 AND DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH3 0x2000 PUSH1 0x60 DUP4 ADD DUP6 PUSH3 0x1F0C JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH3 0x2014 DUP2 DUP6 PUSH3 0x1F0C JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x19D9 CODESIZE SUB DUP1 PUSH3 0x19D9 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x245 JUMP JUMPDEST DUP3 DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH3 0x6B PUSH3 0x65 PUSH3 0x12C PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x130 JUMP JUMPDEST PUSH1 0x4 PUSH3 0x79 DUP5 DUP3 PUSH3 0x358 JUMP JUMPDEST POP PUSH1 0x5 PUSH3 0x88 DUP4 DUP3 PUSH3 0x358 JUMP JUMPDEST POP PUSH1 0x6 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP6 SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE POP DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 DUP3 MLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 KECCAK256 PUSH1 0x9 DUP4 SWAP1 SSTORE PUSH1 0xC0 DUP2 DUP2 MSTORE CHAINID PUSH1 0x80 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP2 DUP9 ADD MSTORE DUP1 DUP3 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x60 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP6 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP8 SUB DUP3 ADD DUP2 MSTORE SWAP6 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP4 MLOAD SWAP4 SWAP1 SWAP3 ADD SWAP3 SWAP1 SWAP3 KECCAK256 PUSH1 0x8 SSTORE MSTORE POP PUSH3 0x424 SWAP2 POP POP JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x1C5 JUMPI PUSH3 0x1C5 PUSH3 0x180 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x1F0 JUMPI PUSH3 0x1F0 PUSH3 0x180 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x20D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x231 JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x212 JUMP JUMPDEST PUSH1 0x0 SWAP4 DUP2 ADD SWAP1 SWAP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x25B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH3 0x26D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x28B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x299 DUP8 DUP4 DUP9 ADD PUSH3 0x196 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x2B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x2BF DUP7 DUP3 DUP8 ADD PUSH3 0x196 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x2DE JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH3 0x2FF JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH3 0x353 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH3 0x32E JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x34F JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x33A JUMP JUMPDEST POP POP POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH3 0x374 JUMPI PUSH3 0x374 PUSH3 0x180 JUMP JUMPDEST PUSH3 0x38C DUP2 PUSH3 0x385 DUP5 SLOAD PUSH3 0x2C9 JUMP JUMPDEST DUP5 PUSH3 0x305 JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH3 0x3C4 JUMPI PUSH1 0x0 DUP5 ISZERO PUSH3 0x3AB JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH3 0x34F JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH3 0x3F5 JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH3 0x3D4 JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH3 0x414 JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x157E PUSH3 0x45B PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x540 ADD MSTORE PUSH2 0xBA6 ADD MSTORE PUSH1 0x0 PUSH2 0xB25 ADD MSTORE PUSH1 0x0 PUSH2 0xB4F ADD MSTORE PUSH2 0x157E PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x12C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x269 JUMPI DUP1 PUSH4 0xB7B090EE EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2A2 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x2B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x220 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x23B JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x243 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3644E515 GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1B4 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x1C7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1DC JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x205 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x14F JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x172 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x184 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x197 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x139 PUSH2 0x2C8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x146 SWAP2 SWAP1 PUSH2 0x115B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH2 0x15D CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x35A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x146 JUMP JUMPDEST PUSH1 0x3 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x146 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x192 CALLDATASIZE PUSH1 0x4 PUSH2 0x11EF JUMP JUMPDEST PUSH2 0x371 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x146 JUMP JUMPDEST PUSH2 0x176 PUSH2 0x393 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x1C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x3A2 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x1D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x3DE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x176 PUSH2 0x1EA CALLDATASIZE PUSH1 0x4 PUSH2 0x122B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x3F4 JUMP JUMPDEST PUSH2 0x176 PUSH2 0x21B CALLDATASIZE PUSH1 0x4 PUSH2 0x122B JUMP JUMPDEST PUSH2 0x408 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x146 JUMP JUMPDEST PUSH2 0x139 PUSH2 0x426 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x251 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x435 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x264 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x447 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x277 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x4C6 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x28A CALLDATASIZE PUSH1 0x4 PUSH2 0x1296 JUMP JUMPDEST PUSH2 0x4D3 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x29D CALLDATASIZE PUSH1 0x4 PUSH2 0x1302 JUMP JUMPDEST PUSH2 0x5C6 JUMP JUMPDEST PUSH2 0x176 PUSH2 0x2B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1375 JUMP JUMPDEST PUSH2 0x72A JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x2C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x122B JUMP JUMPDEST PUSH2 0x755 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x2D7 SWAP1 PUSH2 0x13A8 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x303 SWAP1 PUSH2 0x13A8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x350 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x325 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x350 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x333 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x367 CALLER DUP5 DUP5 PUSH2 0x7CE JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E DUP5 CALLER DUP5 PUSH2 0x8F3 JUMP JUMPDEST PUSH2 0x389 DUP5 DUP5 DUP5 PUSH2 0x96D JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39D PUSH2 0xB18 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x367 SWAP2 DUP6 SWAP1 PUSH2 0x3D9 SWAP1 DUP7 SWAP1 PUSH2 0x13DC JUMP JUMPDEST PUSH2 0x7CE JUMP JUMPDEST PUSH2 0x3E6 PUSH2 0xBCA JUMP JUMPDEST PUSH2 0x3F0 DUP3 DUP3 PUSH2 0xC24 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x3FC PUSH2 0xBCA JUMP JUMPDEST PUSH2 0x406 PUSH1 0x0 PUSH2 0xCE5 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x36B JUMP JUMPDEST PUSH1 0x60 PUSH1 0x5 DUP1 SLOAD PUSH2 0x2D7 SWAP1 PUSH2 0x13A8 JUMP JUMPDEST PUSH2 0x43D PUSH2 0xBCA JUMP JUMPDEST PUSH2 0x3F0 DUP3 DUP3 PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x454 CALLER DUP6 PUSH2 0x72A JUMP JUMPDEST SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0x4B9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x389 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x7CE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x367 CALLER DUP5 DUP5 PUSH2 0x96D JUMP JUMPDEST PUSH2 0x4DB PUSH2 0xBCA JUMP JUMPDEST PUSH1 0x4 PUSH2 0x4E8 DUP5 DUP7 DUP4 PUSH2 0x1461 JUMP JUMPDEST POP PUSH1 0x5 PUSH2 0x4F6 DUP3 DUP5 DUP4 PUSH2 0x1461 JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x509 SWAP3 SWAP2 SWAP1 PUSH2 0x1522 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB SWAP1 KECCAK256 PUSH1 0x9 DUP2 SWAP1 SSTORE SWAP1 POP PUSH2 0x564 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 PUSH32 0x0 PUSH2 0xE66 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH2 0x577 SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0x1522 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x58F SWAP3 SWAP2 SWAP1 PUSH2 0x1522 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB DUP2 KECCAK256 SWAP1 PUSH32 0x1EC4C73AF923253FB2C28A509DD78D342709289A09929D78C64C0B8E047EFBCD SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x616 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x645 DUP13 PUSH2 0xEAF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP1 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x6A0 DUP3 PUSH2 0xED7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x6B0 DUP3 DUP8 DUP8 DUP8 PUSH2 0xF25 JUMP JUMPDEST SWAP1 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x713 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH2 0x71E DUP11 DUP11 DUP11 PUSH2 0x7CE JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x75D PUSH2 0xBCA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7C2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH2 0x7CB DUP2 PUSH2 0xCE5 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x830 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x891 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8FF DUP5 DUP5 PUSH2 0x72A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x967 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x95A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH2 0x967 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x7CE JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x9D1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xA33 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0xAAB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE SWAP3 DUP7 AND DUP1 DUP3 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE SWAP2 MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0xB0B SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x967 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ DUP1 ISZERO PUSH2 0xB71 JUMPI POP PUSH32 0x0 CHAINID EQ JUMPDEST ISZERO PUSH2 0xB7D JUMPI POP PUSH1 0x8 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x39D PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH1 0x9 SLOAD PUSH32 0x0 PUSH2 0xE66 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x406 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xC7A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST DUP1 PUSH1 0x3 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0xC8C SWAP2 SWAP1 PUSH2 0x13DC JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE MLOAD DUP5 DUP2 MSTORE PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xD95 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E2066726F6D20746865207A65726F20616464726573 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x73 PUSH1 0xF8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0xE09 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E20616D6F756E7420657863656564732062616C616E PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD DUP8 SWAP1 SUB SWAP1 SSTORE MLOAD DUP6 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0x8E6 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP1 JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x36B PUSH2 0xEE4 PUSH2 0xB18 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH2 0x1901 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x22 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x42 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x62 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xF36 DUP8 DUP8 DUP8 DUP8 PUSH2 0xF4D JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xF43 DUP2 PUSH2 0x1011 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP4 GT ISZERO PUSH2 0xF84 JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x3 PUSH2 0x1008 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFD8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1001 JUMPI PUSH1 0x0 PUSH1 0x1 SWAP3 POP SWAP3 POP POP PUSH2 0x1008 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x1025 JUMPI PUSH2 0x1025 PUSH2 0x1532 JUMP JUMPDEST SUB PUSH2 0x102D JUMPI POP JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x1041 JUMPI PUSH2 0x1041 PUSH2 0x1532 JUMP JUMPDEST SUB PUSH2 0x108E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x10A2 JUMPI PUSH2 0x10A2 PUSH2 0x1532 JUMP JUMPDEST SUB PUSH2 0x10EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x1103 JUMPI PUSH2 0x1103 PUSH2 0x1532 JUMP JUMPDEST SUB PUSH2 0x7CB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1188 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x116C JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x11C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x11D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11E1 DUP4 PUSH2 0x11A9 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1204 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x120D DUP5 PUSH2 0x11A9 JUMP JUMPDEST SWAP3 POP PUSH2 0x121B PUSH1 0x20 DUP6 ADD PUSH2 0x11A9 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x123D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1246 DUP3 PUSH2 0x11A9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x125F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x128F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x12AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x12C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12D0 DUP9 DUP4 DUP10 ADD PUSH2 0x124D JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x12E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x12F6 DUP8 DUP3 DUP9 ADD PUSH2 0x124D JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x131D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1326 DUP9 PUSH2 0x11A9 JUMP JUMPDEST SWAP7 POP PUSH2 0x1334 PUSH1 0x20 DUP10 ADD PUSH2 0x11A9 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1358 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1391 DUP4 PUSH2 0x11A9 JUMP JUMPDEST SWAP2 POP PUSH2 0x139F PUSH1 0x20 DUP5 ADD PUSH2 0x11A9 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x13BC JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0xED1 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x36B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0xE61 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH2 0x143A JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1459 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1446 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x1479 JUMPI PUSH2 0x1479 PUSH2 0x13FD JUMP JUMPDEST PUSH2 0x148D DUP4 PUSH2 0x1487 DUP4 SLOAD PUSH2 0x13A8 JUMP JUMPDEST DUP4 PUSH2 0x1413 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP5 GT PUSH1 0x1 DUP2 EQ PUSH2 0x14C1 JUMPI PUSH1 0x0 DUP6 ISZERO PUSH2 0x14A9 JUMPI POP DUP4 DUP3 ADD CALLDATALOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP8 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP7 SWAP1 SHL OR DUP4 SSTORE PUSH2 0x151B JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP1 DUP4 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x14F2 JUMPI DUP7 DUP6 ADD CALLDATALOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x14D2 JUMP JUMPDEST POP DUP7 DUP3 LT ISZERO PUSH2 0x150F JUMPI PUSH1 0x0 NOT PUSH1 0xF8 DUP9 PUSH1 0x3 SHL AND SHR NOT DUP5 DUP8 ADD CALLDATALOAD AND DUP2 SSTORE JUMPDEST POP POP PUSH1 0x1 DUP6 PUSH1 0x1 SHL ADD DUP4 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 SGT 0xC9 0x28 0xE0 BALANCE PUSH6 0xE19B5C7AC5B6 PUSH28 0x85C32AB586CD042677306FBD142D27AFCCF664736F6C634300081100 CALLER LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADDRESS 0xC 0xC6 CHAINID 0xD0 CALLDATALOAD SWAP12 DUP7 DUP8 BYTE PUSH15 0x263AB844429C60311081EBEA2AFDD5 SHL ADD PUSH5 0x10D91C6473 PUSH16 0x6C634300081100330000000000000000 ","sourceMap":"619:23358:79:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5113:284;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;5243:127:79;;;;;;;;-1:-1:-1;;;;;5258:44:79;;;5216:24;5258:44;;;:27;:44;;;;;;;:51;;;;5243:127;;5317:44;;;;;;5258:51;5317:47;;5243:127;;;;;5113:284;;;;;603:13:181;;618:10;599:30;581:49;;686:4;674:17;;;668:24;646:20;;;639:54;;;;554:18;5113:284:79;;;;;;;;5532:206;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;1359:15:181;;;1341:34;;1411:15;;;;1406:2;1391:18;;1384:43;1276:18;5532:206:79;1129:304:181;12484:257:79;;;;;;:::i;:::-;;:::i;:::-;;4775:126;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2265:32:181;;;2247:51;;2235:2;2220:18;4775:126:79;2101:203:181;4237:112:79;;;;;;:::i;:::-;;:::i;5742:::-;;;;;;:::i;:::-;5801:4;5820:20;;;:14;:20;;;;;:29;;;-1:-1:-1;;;5820:29:79;;;;;5742:112;;;;2474:14:181;;2467:22;2449:41;;2437:2;2422:18;5742:112:79;2309:187:181;13999:307:79;;;;;;:::i;:::-;;:::i;4547:224::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;4663:81:79;;;;;;;;-1:-1:-1;;;;;4671:30:79;;;4636:24;4671:30;;;:20;:30;;;;;;;:37;;;;4663:81;;4710:30;;;;;;4671:37;4710:33;;4663:81;;;;;4547:224;6211:214;;;;;;:::i;:::-;;:::i;6429:120::-;;;;;;:::i;:::-;6492:7;6514:20;;;:14;:20;;;;;:30;;;;6429:120;;;;3513:25:181;;;3501:2;3486:18;6429:120:79;3367:177:181;6043:164:79;;;;;;:::i;:::-;6115:11;6153:20;;;:14;:20;;;;;:48;;;-1:-1:-1;;;;;6153:48:79;;6043:164;13448:275;;;;;;:::i;:::-;;:::i;4905:204::-;;;;;;:::i;:::-;;:::i;5858:181::-;;;;;;:::i;:::-;;:::i;7925:2189::-;;;;;;:::i;:::-;;:::i;4353:190::-;;;;;;:::i;:::-;;:::i;14520:870::-;;;;;;:::i;:::-;;:::i;11471:848::-;;;;;;:::i;:::-;;:::i;12906:242::-;;;;;;:::i;:::-;;:::i;5401:127::-;;;;;;:::i;:::-;;:::i;5532:206::-;5615:7;5624;5646:87;5671:47;5705:3;5710:7;5671:33;:47::i;:::-;5720:3;5725:7;5646:24;:87::i;:::-;5639:94;;;;5532:206;;;;;:::o;12484:257::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;12597:11:79::1;12611:67;12645:13;::::0;::::1;::::0;::::1;::::0;12660:17:::1;::::0;12645:10;12660:17:::1;:::i;:::-;12611:33;:67::i;:::-;12597:81;;12684:52;12703:10;12715:15;12732:3;12684:18;:52::i;:::-;12591:150;12484:257:::0;;:::o;4775:126::-;4845:7;4867:29;4891:4;4867:23;:29::i;:::-;4860:36;4775:126;-1:-1:-1;;4775:126:79:o;4237:112::-;4300:7;4322:22;4339:4;4322:16;:22::i;13999:307::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;14149:11:79::1;14163:67;14197:13;::::0;::::1;::::0;::::1;::::0;14212:17:::1;::::0;14197:10;14212:17:::1;:::i;14163:67::-;14149:81:::0;-1:-1:-1;14236:65:79::1;14149:81:::0;14256:15;14273;14236:65:::1;;::::0;;::::1;::::0;::::1;14290:10:::0;14236:65:::1;:::i;:::-;:14;:65::i;:::-;14143:163;13999:307:::0;;;:::o;6211:214::-;6298:11;6324:96;6352:67;6386:13;;;;;;6401:17;;6386:10;6401:17;:::i;13448:275::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;-1:-1:-1;;;;;13610:37:79;::::1;13583:24;13610:37:::0;;;:20:::1;:37;::::0;;;;;;;;13583:64;;;;::::1;::::0;;;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;13653:65:::1;13668:4:::0;13631:15;13691;13583:64;13653:14:::1;:65::i;4905:204::-:0;4990:7;5012:92;5036:67;5070:13;;;;;;5085:17;;5070:10;5085:17;:::i;5036:67::-;5012:23;:92::i;5858:181::-;5932:4;5951:83;5966:67;6000:13;;;;;;6015:17;;6000:10;6015:17;:::i;7925:2189::-;8203:14;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;8261:11:79::1;8275:67;8309:13;::::0;::::1;::::0;::::1;::::0;8324:17:::1;::::0;8309:10;8324:17:::1;:::i;8275:67::-;8389:8;::::0;8261:81;;-1:-1:-1;8349:16:79::1;::::0;8389:8:::1;;8368:17;;::::0;::::1;:10:::0;:17:::1;:::i;:::-;:29;;;8349:48;;8407:11;8403:1707;;;8534:13;::::0;::::1;;8498:50:::0;-1:-1:-1;;;;;;8827:29:79;::::1;::::0;;::::1;::::0;:58:::1;;;8879:6;-1:-1:-1::0;;;;;8860:25:79::1;:15;-1:-1:-1::0;;;;;8860:25:79::1;;;8827:58;8826:93;;;-1:-1:-1::0;;;;;;8890:29:79;::::1;::::0;::::1;8826:93;8822:179;;;8938:54;;-1:-1:-1::0;;;8938:54:79::1;;;;;;;;;;;8822:179;9183:109;9212:4;9218:18;9246:1;9250:6;9266:1;9270:10;9282:4;9288:3;9183:28;:109::i;:::-;8403:1707;;;9518:1;9472:19:::0;;;:14:::1;:19;::::0;;;;:34;-1:-1:-1;;;;;9472:34:79::1;:48:::0;::::1;::::0;:99:::1;;-1:-1:-1::0;9524:1:79::1;:19:::0;;;:14:::1;:19;::::0;;;;:42;-1:-1:-1;;;9524:42:79;::::1;;;:47:::0;::::1;9472:99;9468:176;;;9590:45;;-1:-1:-1::0;;;9590:45:79::1;;;;;;;;;;;9468:176;9712:167;9743:13;::::0;::::1;::::0;::::1;::::0;9766:17:::1;::::0;9743:10;9766:17:::1;:::i;:::-;9793:18;9821:19;9850:21;9712;:167::i;:::-;9703:176;;9914:189;9952:5;9967:18;9995:15;10020:6;10036:15;10061:10;10081:1;10092:3;9914:28;:189::i;:::-;8219:1895;;7925:2189:::0;;;;;;;;;:::o;4353:190::-;4431:7;4453:85;4470:67;4504:13;;;;;;4519:17;;4504:10;4519:17;:::i;4470:67::-;4453:16;:85::i;14520:870::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;14664:11:79::1;14678:67;14712:13;::::0;::::1;::::0;::::1;::::0;14727:17:::1;::::0;14712:10;14727:17:::1;:::i;14678:67::-;14664:81;;14751:13;14767:25;14788:3;14767:20;:25::i;:::-;:40:::0;-1:-1:-1;;;;;14767:40:79::1;::::0;-1:-1:-1;14767:40:79;14813:88:::1;;14853:41;;-1:-1:-1::0;;;14853:41:79::1;;;;;;;;;;;14813:88;14964:17;;::::0;::::1;:10:::0;:17:::1;:::i;:::-;14952:8;::::0;:29:::1;::::0;;::::1;:8:::0;::::1;:29:::0;14948:95:::1;;14998:38;;-1:-1:-1::0;;;14998:38:79::1;;;;;;;;;;;14948:95;15199:1;:19:::0;;;:14:::1;:19;::::0;;;;:28:::1;;::::0;-1:-1:-1;;;15199:28:79;::::1;;;15194:96;;15244:39;;-1:-1:-1::0;;;15244:39:79::1;;;;;;;;;;;15194:96;15339:46;::::0;-1:-1:-1;;;15339:46:79;;-1:-1:-1;;;;;15339:30:79;::::1;::::0;::::1;::::0;:46:::1;::::0;15370:5;;15377:7;;15339:46:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14658:732;;14520:870:::0;;;:::o;11471:848::-;11676:7;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;-1:-1:-1;;;;;11695:29:79;::::1;11691:129;;11741:72;;-1:-1:-1::0;;;11741:72:79::1;;;;;;;;;;;11691:129;11851:8;::::0;::::1;;11830:17;;::::0;::::1;:10:::0;:17:::1;:::i;:::-;:29;;::::0;11826:125:::1;;11876:68;;-1:-1:-1::0;;;11876:68:79::1;;;;;;;;;;;11826:125;11993:11;12007:67;12041:13;::::0;::::1;::::0;::::1;::::0;12056:17:::1;::::0;12041:10;12056:17:::1;:::i;12007:67::-;11993:81;;12081:204;12117:5;12145:15;-1:-1:-1::0;;;;;12130:40:79::1;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12180:15;12203;12226;12249:10;12267:1;12276:3;12081:28;:204::i;:::-;12299:15;12292:22;;;3726:1:68;11471:848:79::0;;;;;;:::o;12906:242::-;3606:10:68;3576:26;:24;:26::i;:::-;-1:-1:-1;;;;;3576:40:68;;;:77;;;;-1:-1:-1;3643:10:68;3628;3620:1;:19;;;:7;:19;;;;;;;;:33;;;;;;;;:::i;:::-;;;3576:77;3572:148;;;3668:52;;-1:-1:-1;;;3668:52:68;;;;;;;;;;;3572:148;13013:11:79::1;13027:67;13061:13;::::0;::::1;::::0;::::1;::::0;13076:17:::1;::::0;13061:10;13076:17:::1;:::i;13027:67::-;13013:81;;13100:43;13117:10;13129:8;13139:3;13100:16;:43::i;5401:127::-:0;-1:-1:-1;;;;;;;;;;;;;;;;;5491:32:79;5512:10;5491:20;:32::i;19324:146:102:-;19408:7;19451:3;19456:7;19440:24;;;;;;;;9416:25:181;;;9489:10;9477:23;9472:2;9457:18;;9450:51;9404:2;9389:18;;9244:263;19440:24:102;;;;;;;;;;;;;19430:35;;;;;;19423:42;;19324:146;;;;:::o;5943:287:68:-;6059:7;6068;6083:14;6100:47;6125:4;6131:3;6136:7;6145:1;6100:24;:47::i;:::-;6083:64;;6153:16;6172:22;6189:4;6172:16;:22::i;:::-;6208:6;;;;-1:-1:-1;5943:287:68;;-1:-1:-1;;;;;5943:287:68:o;2273:130:106:-;2368:30;;-1:-1:-1;;;;;2368:30:106;;2273:130::o;18581:331:79:-;18735:1;:20;;;:14;:20;;;;;;;;:48;;:62;;-1:-1:-1;;;;;;18735:62:79;-1:-1:-1;;;;;18735:62:79;;;;;18864:17;;;;;;:::i;:::-;18827:80;;18849:10;:13;;;18843:4;18827:80;18883:11;18896:10;18827:80;;;;;;-1:-1:-1;;;;;1359:15:181;;;1341:34;;1411:15;;1406:2;1391:18;;1384:43;1291:2;1276:18;;1129:304;18827:80:79;;;;;;;;18581:331;;;:::o;4621:282:68:-;4691:7;4706:22;4731:26;4752:4;4731:20;:26::i;:::-;:41;-1:-1:-1;;;;;4731:41:68;;4621:282;-1:-1:-1;;;4621:282:68:o;4275:258::-;4338:7;4353:15;4371:26;4392:4;4371:20;:26::i;:::-;:34;;;-1:-1:-1;;;;;4371:34:68;;-1:-1:-1;4371:34:68;4411:98;;4453:49;;-1:-1:-1;;;4453:49:68;;;;;;;;;;;20994:2396:79;21144:26;21173:20;;;:14;:20;;;;;21242:15;;;;-1:-1:-1;;;21242:15:79;;;;21237:65;;21266:36;;-1:-1:-1;;;21266:36:79;;;;;;;;;;;21237:65;21359:14;;;;-1:-1:-1;;;;;21359:33:79;;;:14;;:33;;;:77;;-1:-1:-1;21396:21:79;;-1:-1:-1;;;;;21396:40:79;;;:21;;:40;;21359:77;21355:137;;;21451:41;;-1:-1:-1;;;21451:41:79;;;;;;;;;;;21355:137;21530:17;;21518:8;;:29;:8;;;:29;;;21553:1135;;;;21643:22;21668:41;21695:10;:13;;;508:4:173;399:121;21668:41:79;22352:55;;-1:-1:-1;;;22352:55:79;;22401:4;22352:55;;;2247:51:181;21643:66:79;;-1:-1:-1;22410:1:79;;-1:-1:-1;;;;;22352:40:79;;;;;2220:18:181;;22352:55:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;22348:135;;;22430:44;;-1:-1:-1;;;22430:44:79;;;;;;;;;;;22348:135;21570:919;21553:1135;;;22609:1;22576:15;-1:-1:-1;;;;;22563:41:79;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;22559:123;;;22629:44;;-1:-1:-1;;;22629:44:79;;;;;;;;;;;22559:123;22911:1;:20;;;:14;:20;;;;;;;;:28;;;;22904:35;;-1:-1:-1;;;;;;22945:43:79;;;;;;23001:48;;;22994:55;;23055:36;;;;;23104:24;;;;23097:31;;;-1:-1:-1;;;;;23231:44:79;;;;;:27;:44;;;;;23224:51;;-1:-1:-1;;23224:51:79;;;;;;;;;;;23288:37;;;;;:20;:37;;;;;23281:44;;;;;;;;;;;;23355:30;;23374:10;2247:51:181;;22911:20:79;;23355:30;;2220:18:181;23355:30:79;;;;;;;21138:2252;;20994:2396;;;;:::o;15444:2876::-;15750:17;;;;:10;:17;:::i;:::-;:22;;;;:54;;-1:-1:-1;15776:13:79;;;;:28;15750:54;15746:138;;;15821:56;;-1:-1:-1;;;15821:56:79;;;;;;;;;;;15746:138;-1:-1:-1;;;;;15936:22:79;;;15914:19;15936:22;15982:34;;16008:8;15982:34;;;15999:6;15982:34;15964:52;-1:-1:-1;16063:16:79;16094:17;;;;:10;:17;:::i;:::-;16082:8;;:1;16158:20;;;:14;:20;;;;;:29;;;16082;;;;:8;;;;:29;;;;;-1:-1:-1;;;;16158:29:79;;;;16154:79;;;16196:37;;-1:-1:-1;;;16196:37:79;;;;;;;;;;;16154:79;16299:11;16294:457;;16392:34;;-1:-1:-1;;;16392:34:79;;16420:4;16392:34;;;2247:51:181;16358:6:79;;16320:22;;-1:-1:-1;;;;;16392:19:79;;;;;2220:18:181;;16392:34:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16434:32;;-1:-1:-1;;;16434:32:79;;16457:4;16434:32;;;9883:51:181;16464:1:79;9950:18:181;;;9943:34;16373:53:79;;-1:-1:-1;;;;;;16434:14:79;;;;;9856:18:181;;16434:32:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16516:8;16527:1;16516:12;;;;:::i;:::-;16478:34;;-1:-1:-1;;;16478:34:79;;16506:4;16478:34;;;2247:51:181;-1:-1:-1;;;;;16478:19:79;;;;;2220:18:181;;16478:34:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;16474:114;;16547:32;;-1:-1:-1;;;16547:32:79;;;;;;;;;;;16474:114;16595:32;;-1:-1:-1;;;16595:32:79;;16618:4;16595:32;;;9883:51:181;16625:1:79;9950:18:181;;;9943:34;-1:-1:-1;;;;;16595:14:79;;;;;9856:18:181;;16595:32:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16639:34:79;;-1:-1:-1;;;16639:34:79;;16667:4;16639:34;;;2247:51:181;16677:8:79;;-1:-1:-1;;;;;;16639:19:79;;;-1:-1:-1;16639:19:79;;2220:18:181;;16639:34:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;16635:110;;16704:32;;-1:-1:-1;;;16704:32:79;;;;;;;;;;;16635:110;16312:439;;16294:457;17048:387;;;;;;;;17067:12;:34;;17095:6;17067:34;;;17090:1;17067:34;-1:-1:-1;;;;;17048:387:79;;;;;17127:14;17048:387;;;;;;17175:7;-1:-1:-1;;;;;17048:387:79;;;;;17201:14;:68;;17250:7;-1:-1:-1;;;;;17235:32:79;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17201:68;;;17218:14;17201:68;17048:387;;;;;;17304:1;17048:387;;;;;;;17355:4;17048:387;;;;;;;;;;;;;;;;;;;;;17025:20;;;:14;:20;;;;;;:410;;;;;;;;;;-1:-1:-1;;;17025:410:79;;;-1:-1:-1;;;;;;17025:410:79;;;-1:-1:-1;;;;;17025:410:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17611:17;;;;:10;:17;:::i;:::-;-1:-1:-1;;;;;17572:29:79;;:1;:29;;;:20;:29;;;;;;;;:56;;-1:-1:-1;;17572:56:79;;;;;;;;;;;;17669:13;;;-1:-1:-1;17634:32:79;;;:48;17694:12;17689:518;;17854:17;;;;:10;:17;:::i;:::-;-1:-1:-1;;;;;17809:35:79;;:1;:35;;;:27;:35;;;;;;;;:62;;-1:-1:-1;;17809:62:79;;;;;;;;;;;;17920:13;;;-1:-1:-1;17879:38:79;;;:54;18024:53;17920:13;18055:15;18072:4;18024:18;:53::i;:::-;17689:518;;;18094:8;;18090:117;;18160:40;18177:10;18189:4;18195;18160:16;:40::i;:::-;18268:17;;;;:10;:17;:::i;:::-;18236:79;;18253:10;:13;;;18247:4;18236:79;18287:7;18296:6;18304:10;18236:79;;;;;;;-1:-1:-1;;;;;10473:15:181;;;10455:34;;10525:15;;;10520:2;10505:18;;10498:43;10577:15;;;10572:2;10557:18;;10550:43;10405:2;10390:18;;10215:384;18236:79:79;;;;;;;;15684:2636;;;15444:2876;;;;;;;;:::o;23603:372::-;23766:14;23854:9;23865:5;23872:7;23838:42;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;23821:60;;23963:6;-1:-1:-1;;;;;23935:35:79;23958:3;23949:7;23935:35;;;;;;;;;;;;23603:372;;;;;;;:::o;1192:571:102:-;1248:19;1367:20;;;:14;:20;;;;;1677:1;1652:22;;;;1248:19;;1367:20;-1:-1:-1;;;1652:22:102;;;;;:26;1648:91;;;1695:37;;-1:-1:-1;;;1695:37:102;;;;;;;;;;;1648:91;1752:6;1192:571;-1:-1:-1;;;1192:571:102:o;19729:652:79:-;19863:17;;;;:10;:17;:::i;:::-;19851:8;;:29;:8;;;:29;;;19847:105;;19897:48;;-1:-1:-1;;;19897:48:79;;;;;;;;;;;19847:105;19986:1;:20;;;:14;:20;;;;;:24;;:35;;;20032:12;;20028:256;;20125:17;20172:13;;;;20227:50;;-1:-1:-1;;;20227:50:79;;20271:4;20227:50;;;2247:51:181;20125:61:79;;-1:-1:-1;;;;;;20227:35:79;;;;;2220:18:181;;20227:50:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20194:1;:20;;;:14;:20;;;;;:30;;:83;-1:-1:-1;20028:256:79;20336:17;;;;:10;:17;:::i;:::-;20295:81;;20321:10;:13;;;20315:4;20295:81;20355:8;20365:10;20295:81;;;;;;11244:25:181;;;-1:-1:-1;;;;;11305:32:181;11300:2;11285:18;;11278:60;11232:2;11217:18;;11070:274;5787:152:68;-1:-1:-1;;;;;;;;;;;;;;;;;5889:45:68;5920:10;5932:1;5889:30;:45::i;18635:383:102:-;18796:8;;;;18766:7;;18796:8;;;;18785:19;;;;18781:233;;-1:-1:-1;18882:3:102;18848:38;;18781:233;18977:15;18987:4;18977:9;:15::i;:::-;:30;-1:-1:-1;;;;;18977:30:102;;-1:-1:-1;18970:37:102;;16433:1118;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16649:24:102;;16645:62;;16690:10;-1:-1:-1;16683:17:102;;16645:62;-1:-1:-1;;;;;;16780:32:102;;;;;;:20;;;:32;;;;;;;;;16767:45;;;;;;;;;;;;;;;;;;;;;;;;;;;16822:22;16818:123;;16924:10;-1:-1:-1;16917:17:102;;16818:123;17148:28;17162:10;17174:1;17148:13;:28::i;:::-;17144:380;;;17319:8;;;;;;17299:28;;-1:-1:-1;;;;;335:23:173;;17335:13:102;;;:54;17144:380;;;-1:-1:-1;;;;;;17478:39:102;;;;;;:27;;;:39;;;;;;;;;17465:52;;;;;;;;;;;;;;;;;;;;;17536:10;16433:1118;-1:-1:-1;;;16433:1118:102:o;17816:515::-;-1:-1:-1;;;;;18056:35:102;;17900:4;18056:35;;;:27;;;:35;;;;;:42;;;:47;18052:80;;-1:-1:-1;18120:5:102;18113:12;;18052:80;-1:-1:-1;;;;;;;18303:18:102;;:23;;;17816:515::o;-1:-1:-1:-;;;;;;;;:::o;14:173:181:-;82:20;;-1:-1:-1;;;;;131:31:181;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;704:163::-;771:20;;831:10;820:22;;810:33;;800:61;;857:1;854;847:12;872:252;939:6;947;1000:2;988:9;979:7;975:23;971:32;968:52;;;1016:1;1013;1006:12;968:52;1052:9;1039:23;1029:33;;1081:37;1114:2;1103:9;1099:18;1081:37;:::i;:::-;1071:47;;872:252;;;;;:::o;1438:155::-;1498:5;1543:2;1534:6;1529:3;1525:16;1521:25;1518:45;;;1559:1;1556;1549:12;1518:45;-1:-1:-1;1581:6:181;1438:155;-1:-1:-1;1438:155:181:o;1598:313::-;1694:6;1702;1755:2;1743:9;1734:7;1730:23;1726:32;1723:52;;;1771:1;1768;1761:12;1723:52;1794:54;1840:7;1829:9;1794:54;:::i;:::-;1784:64;;1867:38;1901:2;1890:9;1886:18;1867:38;:::i;1916:180::-;1975:6;2028:2;2016:9;2007:7;2003:23;1999:32;1996:52;;;2044:1;2041;2034:12;1996:52;-1:-1:-1;2067:23:181;;1916:180;-1:-1:-1;1916:180:181:o;2501:388::-;2606:6;2614;2622;2675:3;2663:9;2654:7;2650:23;2646:33;2643:53;;;2692:1;2689;2682:12;2643:53;2715:54;2761:7;2750:9;2715:54;:::i;:::-;2705:64;;2788:38;2822:2;2811:9;2807:18;2788:38;:::i;:::-;2778:48;;2845:38;2879:2;2868:9;2864:18;2845:38;:::i;:::-;2835:48;;2501:388;;;;;:::o;2894:239::-;2981:6;3034:2;3022:9;3013:7;3009:23;3005:32;3002:52;;;3050:1;3047;3040:12;3002:52;3073:54;3119:7;3108:9;3073:54;:::i;3549:328::-;3626:6;3634;3642;3695:2;3683:9;3674:7;3670:23;3666:32;3663:52;;;3711:1;3708;3701:12;3663:52;3747:9;3734:23;3724:33;;3776:38;3810:2;3799:9;3795:18;3776:38;:::i;:::-;3766:48;;3833:38;3867:2;3856:9;3852:18;3833:38;:::i;3882:114::-;3966:4;3959:5;3955:16;3948:5;3945:27;3935:55;;3986:1;3983;3976:12;3935:55;3882:114;:::o;4001:127::-;4062:10;4057:3;4053:20;4050:1;4043:31;4093:4;4090:1;4083:15;4117:4;4114:1;4107:15;4133:719;4176:5;4229:3;4222:4;4214:6;4210:17;4206:27;4196:55;;4247:1;4244;4237:12;4196:55;4283:6;4270:20;4309:18;4346:2;4342;4339:10;4336:36;;;4352:18;;:::i;:::-;4427:2;4421:9;4395:2;4481:13;;-1:-1:-1;;4477:22:181;;;4501:2;4473:31;4469:40;4457:53;;;4525:18;;;4545:22;;;4522:46;4519:72;;;4571:18;;:::i;:::-;4611:10;4607:2;4600:22;4646:2;4638:6;4631:18;4692:3;4685:4;4680:2;4672:6;4668:15;4664:26;4661:35;4658:55;;;4709:1;4706;4699:12;4658:55;4773:2;4766:4;4758:6;4754:17;4747:4;4739:6;4735:17;4722:54;4820:1;4813:4;4808:2;4800:6;4796:15;4792:26;4785:37;4840:6;4831:15;;;;;;4133:719;;;;:::o;4857:1022::-;5016:6;5024;5032;5040;5048;5056;5064;5117:3;5105:9;5096:7;5092:23;5088:33;5085:53;;;5134:1;5131;5124:12;5085:53;5157:54;5203:7;5192:9;5157:54;:::i;:::-;5147:64;;5261:2;5250:9;5246:18;5233:32;5274:29;5297:5;5274:29;:::i;:::-;5322:5;-1:-1:-1;5378:2:181;5363:18;;5350:32;5401:18;5431:14;;;5428:34;;;5458:1;5455;5448:12;5428:34;5481:50;5523:7;5514:6;5503:9;5499:22;5481:50;:::i;:::-;5471:60;;5584:3;5573:9;5569:19;5556:33;5540:49;;5614:2;5604:8;5601:16;5598:36;;;5630:1;5627;5620:12;5598:36;;5653:52;5697:7;5686:8;5675:9;5671:24;5653:52;:::i;:::-;5643:62;;;5724:39;5758:3;5747:9;5743:19;5724:39;:::i;:::-;5714:49;;5782:39;5816:3;5805:9;5801:19;5782:39;:::i;:::-;5772:49;;5868:3;5857:9;5853:19;5840:33;5830:43;;4857:1022;;;;;;;;;;:::o;5884:671::-;6009:6;6017;6025;6078:3;6066:9;6057:7;6053:23;6049:33;6046:53;;;6095:1;6092;6085:12;6046:53;6118:54;6164:7;6153:9;6118:54;:::i;:::-;6108:64;;6223:2;6212:9;6208:18;6195:32;6246:18;6287:2;6279:6;6276:14;6273:34;;;6303:1;6300;6293:12;6273:34;6326:50;6368:7;6359:6;6348:9;6344:22;6326:50;:::i;:::-;6316:60;;6429:2;6418:9;6414:18;6401:32;6385:48;;6458:2;6448:8;6445:16;6442:36;;;6474:1;6471;6464:12;6442:36;;6497:52;6541:7;6530:8;6519:9;6515:24;6497:52;:::i;:::-;6487:62;;;5884:671;;;;;:::o;6560:463::-;6674:6;6682;6690;6698;6751:3;6739:9;6730:7;6726:23;6722:33;6719:53;;;6768:1;6765;6758:12;6719:53;6791:54;6837:7;6826:9;6791:54;:::i;:::-;6781:64;;6864:38;6898:2;6887:9;6883:18;6864:38;:::i;:::-;6854:48;;6921:38;6955:2;6944:9;6940:18;6921:38;:::i;:::-;6911:48;;6978:39;7012:3;7001:9;6997:19;6978:39;:::i;:::-;6968:49;;6560:463;;;;;;;:::o;7028:307::-;7124:6;7132;7185:2;7173:9;7164:7;7160:23;7156:32;7153:52;;;7201:1;7198;7191:12;7153:52;7224:54;7270:7;7259:9;7224:54;:::i;:::-;7214:64;7325:2;7310:18;;;;7297:32;;-1:-1:-1;;;7028:307:181:o;7340:127::-;7401:10;7396:3;7392:20;7389:1;7382:31;7432:4;7429:1;7422:15;7456:4;7453:1;7446:15;7472:184;7530:6;7583:2;7571:9;7562:7;7558:23;7554:32;7551:52;;;7599:1;7596;7589:12;7551:52;7622:28;7640:9;7622:28;:::i;7661:510::-;7746:6;7799:2;7787:9;7778:7;7774:23;7770:32;7767:52;;;7815:1;7812;7805:12;7767:52;7848:2;7842:9;7890:2;7882:6;7878:15;7959:6;7947:10;7944:22;7923:18;7911:10;7908:34;7905:62;7902:88;;;7970:18;;:::i;:::-;8006:2;7999:22;8045:28;8063:9;8045:28;:::i;:::-;8037:6;8030:44;8135:2;8124:9;8120:18;8107:32;8102:2;8094:6;8090:15;8083:57;8159:6;8149:16;;;7661:510;;;;:::o;8176:423::-;8218:3;8256:5;8250:12;8283:6;8278:3;8271:19;8308:1;8318:162;8332:6;8329:1;8326:13;8318:162;;;8394:4;8450:13;;;8446:22;;8440:29;8422:11;;;8418:20;;8411:59;8347:12;8318:162;;;8322:3;8525:1;8518:4;8509:6;8504:3;8500:16;8496:27;8489:38;8588:4;8581:2;8577:7;8572:2;8564:6;8560:15;8556:29;8551:3;8547:39;8543:50;8536:57;;;8176:423;;;;:::o;8604:383::-;8801:2;8790:9;8783:21;8764:4;8827:45;8868:2;8857:9;8853:18;8845:6;8827:45;:::i;:::-;8920:9;8912:6;8908:22;8903:2;8892:9;8888:18;8881:50;8948:33;8974:6;8966;8948:33;:::i;:::-;8940:41;8604:383;-1:-1:-1;;;;;8604:383:181:o;8992:247::-;9060:6;9113:2;9101:9;9092:7;9088:23;9084:32;9081:52;;;9129:1;9126;9119:12;9081:52;9161:9;9155:16;9180:29;9203:5;9180:29;:::i;9512:184::-;9582:6;9635:2;9623:9;9614:7;9610:23;9606:32;9603:52;;;9651:1;9648;9641:12;9603:52;-1:-1:-1;9674:16:181;;9512:184;-1:-1:-1;9512:184:181:o;9988:222::-;10053:9;;;10074:10;;;10071:133;;;10126:10;10121:3;10117:20;10114:1;10107:31;10161:4;10158:1;10151:15;10189:4;10186:1;10179:15;10604:461;10837:4;10829:6;10825:17;10814:9;10807:36;10879:2;10874;10863:9;10859:18;10852:30;10788:4;10905:45;10946:2;10935:9;10931:18;10923:6;10905:45;:::i;:::-;10998:9;10990:6;10986:22;10981:2;10970:9;10966:18;10959:50;11026:33;11052:6;11044;11026:33;:::i;:::-;11018:41;10604:461;-1:-1:-1;;;;;;10604:461:181:o"},"gasEstimates":{"creation":{"codeDepositCost":"2978600","executionCost":"3271","totalCost":"2981871"},"external":{"addStableSwapPool((uint32,bytes32),address)":"infinite","adoptedToCanonical(address)":"4893","adoptedToLocalExternalPools((uint32,bytes32))":"infinite","adoptedToLocalExternalPools(bytes32)":"2506","approvedAssets((uint32,bytes32))":"infinite","approvedAssets(bytes32)":"2496","canonicalToAdopted((uint32,bytes32))":"infinite","canonicalToAdopted(bytes32)":"infinite","canonicalToRepresentation((uint32,bytes32))":"infinite","canonicalToRepresentation(bytes32)":"4840","getCustodiedAmount(bytes32)":"2555","getLocalAndAdoptedToken(bytes32,uint32)":"infinite","getTokenId(address)":"infinite","removeAssetId((uint32,bytes32),address,address)":"infinite","removeAssetId(bytes32,address,address)":"infinite","representationToCanonical(address)":"4850","setupAsset((uint32,bytes32),uint8,string,string,address,address,uint256)":"infinite","setupAssetWithDeployedRepresentation((uint32,bytes32),address,address,address)":"infinite","updateDetails((uint32,bytes32),string,string)":"infinite","updateLiquidityCap((uint32,bytes32),uint256)":"infinite"},"internal":{"_addStableSwapPool(struct TokenId calldata,address,bytes32)":"infinite","_deployRepresentation(bytes32,uint32,uint8,string memory,string memory)":"infinite","_enrollAdoptedAndLocalAssets(bool,uint8,address,address,address,struct TokenId calldata,uint256,bytes32)":"infinite","_removeAssetId(bytes32,address,address,struct TokenId memory)":"infinite","_setLiquidityCap(struct TokenId calldata,uint256,bytes32)":"infinite"}},"methodIdentifiers":{"addStableSwapPool((uint32,bytes32),address)":"1506e463","adoptedToCanonical(address)":"60062091","adoptedToLocalExternalPools((uint32,bytes32))":"80dc2248","adoptedToLocalExternalPools(bytes32)":"9b598519","approvedAssets((uint32,bytes32))":"ae8bc0de","approvedAssets(bytes32)":"57bd0a32","canonicalToAdopted((uint32,bytes32))":"bd8671a7","canonicalToAdopted(bytes32)":"2c1999d0","canonicalToRepresentation((uint32,bytes32))":"ad4c7771","canonicalToRepresentation(bytes32)":"1ecf6f9f","getCustodiedAmount(bytes32)":"949de969","getLocalAndAdoptedToken(bytes32,uint32)":"07a38d7b","getTokenId(address)":"f1537686","removeAssetId((uint32,bytes32),address,address)":"5a2164e5","removeAssetId(bytes32,address,address)":"a1b19301","representationToCanonical(address)":"03e418c2","setupAsset((uint32,bytes32),uint8,string,string,address,address,uint256)":"b64a5e07","setupAssetWithDeployedRepresentation((uint32,bytes32),address,address,address)":"e1cb3958","updateDetails((uint32,bytes32),string,string)":"c4058429","updateLiquidityCap((uint32,bytes32),uint256)":"e9d7bcec"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AssetLogic__getConfig_notRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__addAssetId_alreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__addAssetId_badBurn\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__addAssetId_badMint\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__removeAssetId_invalidParams\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__removeAssetId_notAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__removeAssetId_remainsCustodied\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__setLiquidityCap_notCanonicalDomain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__setupAsset_invalidCanonicalConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__setupAsset_representationListed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__updateDetails_localNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__updateDetails_notApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__updateDetails_onlyRemote\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"adoptedAsset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"localAsset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AssetAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AssetRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cap\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"LiquidityCapUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"swapPool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"StableSwapAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"representation\",\"type\":\"address\"}],\"name\":\"TokenDeployed\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_stableSwapPool\",\"type\":\"address\"}],\"name\":\"addStableSwapPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_adopted\",\"type\":\"address\"}],\"name\":\"adoptedToCanonical\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"}],\"name\":\"adoptedToLocalExternalPools\",\"outputs\":[{\"internalType\":\"contract IStableSwap\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"adoptedToLocalExternalPools\",\"outputs\":[{\"internalType\":\"contract IStableSwap\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"approvedAssets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"}],\"name\":\"approvedAssets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"canonicalToAdopted\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"}],\"name\":\"canonicalToAdopted\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"canonicalToRepresentation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"}],\"name\":\"canonicalToRepresentation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"getCustodiedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_id\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"}],\"name\":\"getLocalAndAdoptedToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getTokenId\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_adoptedAssetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_representation\",\"type\":\"address\"}],\"name\":\"removeAssetId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_adoptedAssetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_representation\",\"type\":\"address\"}],\"name\":\"removeAssetId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_representation\",\"type\":\"address\"}],\"name\":\"representationToCanonical\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"uint8\",\"name\":\"_canonicalDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"_representationName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_representationSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_adoptedAssetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_stableSwapPool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"setupAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_local\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_representation\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_adoptedAssetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_stableSwapPool\",\"type\":\"address\"}],\"name\":\"setupAssetWithDeployedRepresentation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"updateDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"updateLiquidityCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"AssetAdded(bytes32,bytes32,uint32,address,address,address)\":{\"params\":{\"adoptedAsset\":\"- The address of the adopted (user-expected) asset\",\"caller\":\"- The account that called the function\",\"canonicalId\":\"- The canonical identifier of the token the local <> adopted AMM is for\",\"domain\":\"- The domain of the canonical token for the local <> adopted amm\",\"key\":\"- The key in the mapping (hash of canonical id and domain)\",\"localAsset\":\"- The address of the local asset\"}},\"AssetRemoved(bytes32,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"key\":\"- The hash of the canonical identifier and domain of the token removed\"}},\"LiquidityCapUpdated(bytes32,bytes32,uint32,uint256,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"canonicalId\":\"- The canonical identifier of the token the local <> adopted AMM is for\",\"cap\":\"- The newly enforced liquidity cap (if it is 0, no cap is enforced)\",\"domain\":\"- The domain of the canonical token for the local <> adopted amm\",\"key\":\"- The key in the mapping (hash of canonical id and domain)\"}},\"StableSwapAdded(bytes32,bytes32,uint32,address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"canonicalId\":\"- The canonical identifier of the token the local <> adopted AMM is for\",\"domain\":\"- The domain of the canonical token for the local <> adopted amm\",\"key\":\"- The key in the mapping (hash of canonical id and domain)\",\"swapPool\":\"- The address of the AMM\"}},\"TokenDeployed(uint32,bytes32,address)\":{\"params\":{\"domain\":\"the domain of the chain where the canonical asset is deployed\",\"id\":\"the bytes32 address of the canonical token contract\",\"representation\":\"the address of the newly locally deployed representation contract\"}}},\"kind\":\"dev\",\"methods\":{\"addStableSwapPool((uint32,bytes32),address)\":{\"details\":\"Must pass in the _canonical information so it can be emitted in event\"},\"removeAssetId((uint32,bytes32),address,address)\":{\"params\":{\"_adoptedAssetId\":\"- Corresponding adopted asset to remove\",\"_canonical\":\"- The canonical id and domain to remove\",\"_representation\":\"- Corresponding representation asset to remove\"}},\"removeAssetId(bytes32,address,address)\":{\"params\":{\"_adoptedAssetId\":\"- Corresponding adopted asset to remove\",\"_key\":\"- The hash of the canonical id and domain to remove (mapping key)\",\"_representation\":\"- Corresponding representation asset to remove\"}},\"setupAsset((uint32,bytes32),uint8,string,string,address,address,uint256)\":{\"details\":\"When allowlisting the canonical asset, all representational assets would be allowlisted as well. In the event you have a different adopted asset (i.e. PoS USDC on polygon), you should *not* allowlist the adopted asset. The stable swap pool address used should allow you to swap between the local <> adopted asset. If a representation has been deployed at any point, `setupAssetWithDeployedRepresentation` should be used instead. The following can only be added on *REMOTE* domains: - `_adoptedAssetId` - `_stableSwapPool` Whereas the `_cap` can only be added on the canonical domain\",\"params\":{\"_adoptedAssetId\":\"- The used asset id for this domain (e.g. PoS USDC for polygon)\",\"_canonical\":\"- The canonical asset to add by id and domain. All representations will be allowlisted as well\",\"_canonicalDecimals\":\"- The decimals of the canonical asset (will be used for deployed representation)\",\"_representationName\":\"- The name to be used for the deployed asset\",\"_representationSymbol\":\"- The symbol used for the deployed asset\",\"_stableSwapPool\":\"- The address of the local stableswap pool, if it exists.\"}},\"setupAssetWithDeployedRepresentation((uint32,bytes32),address,address,address)\":{\"details\":\"This function does very minimal checks to ensure the correct `_representation` token is used. The only enforced checks are: - Bridge can mint, and balance of bridge will increase - Bridge can burn, and balance of bridge will decrease However, there are many things that must be checked manually to avoid enrolling a bad representation: - decimals must always be equal to canonical decimals - regular `mint`, `burn`, `ERC20` functionality could be implemented improperly - the required interface functions (see `IBridgeToken`) may not be implemented - upgradeability could interfere with required functionality Using this method allows admins to override existing local tokens, and should be used carefully.\",\"params\":{\"_adoptedAssetId\":\"- The used asset id for this domain (e.g. PoS USDC for polygon)\",\"_canonical\":\"- The canonical asset to add by id and domain. All representations will be whitelisted as well\",\"_representation\":\"- The address of the representative asset\",\"_stableSwapPool\":\"- The address of the local stableswap pool, if it exists.\"}},\"updateDetails((uint32,bytes32),string,string)\":{\"params\":{\"_canonical\":\"- The canonical id and domain to remove\",\"_name\":\"- The new name\",\"_symbol\":\"- The new symbol\"}},\"updateLiquidityCap((uint32,bytes32),uint256)\":{\"details\":\"Must pass in the _canonical information so it can be emitted in event\"}},\"version\":1},\"userdoc\":{\"events\":{\"AssetAdded(bytes32,bytes32,uint32,address,address,address)\":{\"notice\":\"Emitted when a new asset is added\"},\"AssetRemoved(bytes32,address)\":{\"notice\":\"Emitted when an asset is removed from allowlists\"},\"LiquidityCapUpdated(bytes32,bytes32,uint32,uint256,address)\":{\"notice\":\"Emitted when a liquidity cap is updated\"},\"StableSwapAdded(bytes32,bytes32,uint32,address,address)\":{\"notice\":\"Emitted when a new stable-swap AMM is added for the local <> adopted token\"},\"TokenDeployed(uint32,bytes32,address)\":{\"notice\":\"emitted when a representation token contract is deployed\"}},\"kind\":\"user\",\"methods\":{\"addStableSwapPool((uint32,bytes32),address)\":{\"notice\":\"Adds a stable swap pool for the local <> adopted asset.\"},\"removeAssetId((uint32,bytes32),address,address)\":{\"notice\":\"Used to remove assets from the allowlist\"},\"removeAssetId(bytes32,address,address)\":{\"notice\":\"Used to remove assets from the allowlist\"},\"setupAsset((uint32,bytes32),uint8,string,string,address,address,uint256)\":{\"notice\":\"Used to add supported assets. This is an admin only function\"},\"setupAssetWithDeployedRepresentation((uint32,bytes32),address,address,address)\":{\"notice\":\"Used to add supported assets, without deploying a unique representation asset, and instead using what admins have provided. This is an admin only function\"},\"updateDetails((uint32,bytes32),string,string)\":{\"notice\":\"Used to update the name and symbol of a local token\"},\"updateLiquidityCap((uint32,bytes32),uint256)\":{\"notice\":\"Adds a stable swap pool for the local <> adopted asset.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/TokenFacet.sol\":\"TokenFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\",\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\",\"keccak256\":\"0x687142c633b33037c3137b6bfeef848a44eb1ef83fb5fdb59a3affdf28a46516\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Counters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Counters\\n * @author Matt Condon (@shrugs)\\n * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\\n * of elements in a mapping, issuing ERC721 ids, or counting request ids.\\n *\\n * Include with `using Counters for Counters.Counter;`\\n */\\nlibrary Counters {\\n    struct Counter {\\n        // This variable should never be directly accessed by users of the library: interactions must be restricted to\\n        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add\\n        // this feature: see https://github.com/ethereum/solidity/issues/4637\\n        uint256 _value; // default: 0\\n    }\\n\\n    function current(Counter storage counter) internal view returns (uint256) {\\n        return counter._value;\\n    }\\n\\n    function increment(Counter storage counter) internal {\\n        unchecked {\\n            counter._value += 1;\\n        }\\n    }\\n\\n    function decrement(Counter storage counter) internal {\\n        uint256 value = counter._value;\\n        require(value > 0, \\\"Counter: decrement overflow\\\");\\n        unchecked {\\n            counter._value = value - 1;\\n        }\\n    }\\n\\n    function reset(Counter storage counter) internal {\\n        counter._value = 0;\\n    }\\n}\\n\",\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        bytes32 r,\\n        bytes32 vs\\n    ) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(\\n        bytes32 hash,\\n        bytes32 r,\\n        bytes32 vs\\n    ) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n    }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n    /* solhint-disable var-name-mixedcase */\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n    // invalidate the cached domain separator if the chain id changes.\\n    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n    uint256 private immutable _CACHED_CHAIN_ID;\\n    address private immutable _CACHED_THIS;\\n\\n    bytes32 private immutable _HASHED_NAME;\\n    bytes32 private immutable _HASHED_VERSION;\\n    bytes32 private immutable _TYPE_HASH;\\n\\n    /* solhint-enable var-name-mixedcase */\\n\\n    /**\\n     * @dev Initializes the domain separator and parameter caches.\\n     *\\n     * The meaning of `name` and `version` is specified in\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n     *\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n     * - `version`: the current major version of the signing domain.\\n     *\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n     * contract upgrade].\\n     */\\n    constructor(string memory name, string memory version) {\\n        bytes32 hashedName = keccak256(bytes(name));\\n        bytes32 hashedVersion = keccak256(bytes(version));\\n        bytes32 typeHash = keccak256(\\n            \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n        );\\n        _HASHED_NAME = hashedName;\\n        _HASHED_VERSION = hashedVersion;\\n        _CACHED_CHAIN_ID = block.chainid;\\n        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n        _CACHED_THIS = address(this);\\n        _TYPE_HASH = typeHash;\\n    }\\n\\n    /**\\n     * @dev Returns the domain separator for the current chain.\\n     */\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\n        if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n            return _CACHED_DOMAIN_SEPARATOR;\\n        } else {\\n            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n        }\\n    }\\n\\n    function _buildDomainSeparator(\\n        bytes32 typeHash,\\n        bytes32 nameHash,\\n        bytes32 versionHash\\n    ) private view returns (bytes32) {\\n        return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n    }\\n\\n    /**\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\n     *\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n     *\\n     * ```solidity\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n     *     keccak256(\\\"Mail(address to,string contents)\\\"),\\n     *     mailTo,\\n     *     keccak256(bytes(mailContents))\\n     * )));\\n     * address signer = ECDSA.recover(digest, signature);\\n     * ```\\n     */\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n    }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator\\n    ) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1);\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator,\\n        Rounding rounding\\n    ) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10**64) {\\n                value /= 10**64;\\n                result += 64;\\n            }\\n            if (value >= 10**32) {\\n                value /= 10**32;\\n                result += 32;\\n            }\\n            if (value >= 10**16) {\\n                value /= 10**16;\\n                result += 16;\\n            }\\n            if (value >= 10**8) {\\n                value /= 10**8;\\n                result += 8;\\n            }\\n            if (value >= 10**4) {\\n                value /= 10**4;\\n                result += 4;\\n            }\\n            if (value >= 10**2) {\\n                value /= 10**2;\\n                result += 2;\\n            }\\n            if (value >= 10**1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n  AppStorage internal s;\\n\\n  // ========== Custom Errors ===========\\n\\n  error BaseConnextFacet__onlyOwner_notOwner();\\n  error BaseConnextFacet__onlyProposed_notProposedOwner();\\n  error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n  error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n  error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n  error BaseConnextFacet__whenNotPaused_paused();\\n  error BaseConnextFacet__nonReentrant_reentrantCall();\\n  error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n  error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n  error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @dev Prevents a contract from calling itself, directly or indirectly.\\n   * Calling a `nonReentrant` function from another `nonReentrant`\\n   * function is not supported. It is possible to prevent this from happening\\n   * by making the `nonReentrant` function external, and making it call a\\n   * `private` function that does the actual work.\\n   */\\n  modifier nonReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._status = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._status = Constants.NOT_ENTERED;\\n  }\\n\\n  modifier nonXCallReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._xcallStatus = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._xcallStatus = Constants.NOT_ENTERED;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and router role.\\n   */\\n  modifier onlyOwnerOrRouter() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n      revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and watcher role.\\n   */\\n  modifier onlyOwnerOrWatcher() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n      revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and admin role.\\n   */\\n  modifier onlyOwnerOrAdmin() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n      revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if all functionality is paused\\n   */\\n  modifier whenNotPaused() {\\n    if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n    _;\\n  }\\n\\n  // ============ Internal functions ============\\n  /**\\n   * @notice Indicates if the router allowlist has been removed\\n   */\\n  function _isRouterAllowlistRemoved() internal view returns (bool) {\\n    return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n    address adopted = AssetLogic.getConfig(_key).adopted;\\n    if (adopted == address(0)) {\\n      revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n    }\\n    return adopted;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n    address representation = AssetLogic.getConfig(_key).representation;\\n    // If this is address(0), then there is no mintable token for this asset on this\\n    // domain\\n    return representation;\\n  }\\n\\n  /**\\n   * @notice Calculates a transferId\\n   */\\n  function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_params));\\n  }\\n\\n  /**\\n   * @notice Internal utility function that combines\\n   *         `_origin` and `_nonce`.\\n   * @dev Both origin and nonce should be less than 2^32 - 1\\n   * @param _origin Domain of chain where the transfer originated\\n   * @param _nonce The unique identifier for the message from origin to destination\\n   * @return Returns (`_origin` << 32) & `_nonce`\\n   */\\n  function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n    return (uint64(_origin) << 32) | _nonce;\\n  }\\n\\n  function _getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address) {\\n    return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n  }\\n\\n  function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n    return AssetLogic.getCanonicalTokenId(_candidate, s);\\n  }\\n\\n  function _getLocalAndAdoptedToken(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address, address) {\\n    address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n    address _adopted = _getAdoptedAsset(_key);\\n    return (_local, _adopted);\\n  }\\n\\n  function _isLocalOrigin(address _token) internal view returns (bool) {\\n    return AssetLogic.isLocalOrigin(_token, s);\\n  }\\n\\n  function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n    TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n    bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n    if (!AssetLogic.getConfig(_key).approval) {\\n      revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n    }\\n    return (_canonical, _key);\\n  }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/TokenFacet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/interfaces/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenConfig} from \\\"../libraries/LibConnextStorage.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IBridgeToken} from \\\"../interfaces/IBridgeToken.sol\\\";\\n\\nimport {BridgeToken} from \\\"../helpers/BridgeToken.sol\\\";\\n\\nimport {BaseConnextFacet} from \\\"./BaseConnextFacet.sol\\\";\\n\\ncontract TokenFacet is BaseConnextFacet {\\n  // ========== Custom Errors ===========\\n  error TokenFacet__addAssetId_alreadyAdded();\\n  error TokenFacet__addAssetId_badMint();\\n  error TokenFacet__addAssetId_badBurn();\\n  error TokenFacet__removeAssetId_notAdded();\\n  error TokenFacet__removeAssetId_invalidParams();\\n  error TokenFacet__removeAssetId_remainsCustodied();\\n  error TokenFacet__updateDetails_localNotFound();\\n  error TokenFacet__updateDetails_onlyRemote();\\n  error TokenFacet__updateDetails_notApproved();\\n  error TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical();\\n  error TokenFacet__setupAsset_representationListed();\\n  error TokenFacet__setupAsset_invalidCanonicalConfiguration();\\n  error TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation();\\n  error TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain();\\n  error TokenFacet__setLiquidityCap_notCanonicalDomain();\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice emitted when a representation token contract is deployed\\n   * @param domain the domain of the chain where the canonical asset is deployed\\n   * @param id the bytes32 address of the canonical token contract\\n   * @param representation the address of the newly locally deployed representation contract\\n   */\\n  event TokenDeployed(uint32 indexed domain, bytes32 indexed id, address indexed representation);\\n\\n  /**\\n   * @notice Emitted when a new stable-swap AMM is added for the local <> adopted token\\n   * @param key - The key in the mapping (hash of canonical id and domain)\\n   * @param canonicalId - The canonical identifier of the token the local <> adopted AMM is for\\n   * @param domain - The domain of the canonical token for the local <> adopted amm\\n   * @param swapPool - The address of the AMM\\n   * @param caller - The account that called the function\\n   */\\n  event StableSwapAdded(\\n    bytes32 indexed key,\\n    bytes32 indexed canonicalId,\\n    uint32 indexed domain,\\n    address swapPool,\\n    address caller\\n  );\\n\\n  /**\\n   * @notice Emitted when a liquidity cap is updated\\n   * @param key - The key in the mapping (hash of canonical id and domain)\\n   * @param canonicalId - The canonical identifier of the token the local <> adopted AMM is for\\n   * @param domain - The domain of the canonical token for the local <> adopted amm\\n   * @param cap - The newly enforced liquidity cap (if it is 0, no cap is enforced)\\n   * @param caller - The account that called the function\\n   */\\n  event LiquidityCapUpdated(\\n    bytes32 indexed key,\\n    bytes32 indexed canonicalId,\\n    uint32 indexed domain,\\n    uint256 cap,\\n    address caller\\n  );\\n\\n  /**\\n   * @notice Emitted when a new asset is added\\n   * @param key - The key in the mapping (hash of canonical id and domain)\\n   * @param canonicalId - The canonical identifier of the token the local <> adopted AMM is for\\n   * @param domain - The domain of the canonical token for the local <> adopted amm\\n   * @param adoptedAsset - The address of the adopted (user-expected) asset\\n   * @param localAsset - The address of the local asset\\n   * @param caller - The account that called the function\\n   */\\n  event AssetAdded(\\n    bytes32 indexed key,\\n    bytes32 indexed canonicalId,\\n    uint32 indexed domain,\\n    address adoptedAsset,\\n    address localAsset,\\n    address caller\\n  );\\n\\n  /**\\n   * @notice Emitted when an asset is removed from allowlists\\n   * @param key - The hash of the canonical identifier and domain of the token removed\\n   * @param caller - The account that called the function\\n   */\\n  event AssetRemoved(bytes32 indexed key, address caller);\\n\\n  // ============ Getters ============\\n\\n  function canonicalToAdopted(bytes32 _key) public view returns (address) {\\n    return _getAdoptedAsset(_key);\\n  }\\n\\n  function canonicalToAdopted(TokenId calldata _canonical) public view returns (address) {\\n    return _getAdoptedAsset(AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain));\\n  }\\n\\n  function adoptedToCanonical(address _adopted) public view returns (TokenId memory) {\\n    TokenId memory canonical = TokenId(s.adoptedToCanonical[_adopted].domain, s.adoptedToCanonical[_adopted].id);\\n    return canonical;\\n  }\\n\\n  function canonicalToRepresentation(bytes32 _key) public view returns (address) {\\n    return _getRepresentationAsset(_key);\\n  }\\n\\n  function canonicalToRepresentation(TokenId calldata _canonical) public view returns (address) {\\n    return _getRepresentationAsset(AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain));\\n  }\\n\\n  function representationToCanonical(address _representation) public view returns (TokenId memory) {\\n    TokenId memory canonical = TokenId(\\n      s.representationToCanonical[_representation].domain,\\n      s.representationToCanonical[_representation].id\\n    );\\n    return canonical;\\n  }\\n\\n  function getTokenId(address _candidate) public view returns (TokenId memory) {\\n    return _getCanonicalTokenId(_candidate);\\n  }\\n\\n  function getLocalAndAdoptedToken(bytes32 _id, uint32 _domain) public view returns (address, address) {\\n    return _getLocalAndAdoptedToken(AssetLogic.calculateCanonicalHash(_id, _domain), _id, _domain);\\n  }\\n\\n  function approvedAssets(bytes32 _key) public view returns (bool) {\\n    return s.tokenConfigs[_key].approval;\\n  }\\n\\n  function approvedAssets(TokenId calldata _canonical) public view returns (bool) {\\n    return approvedAssets(AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain));\\n  }\\n\\n  function adoptedToLocalExternalPools(bytes32 _key) public view returns (IStableSwap) {\\n    return IStableSwap(s.tokenConfigs[_key].adoptedToLocalExternalPools);\\n  }\\n\\n  function adoptedToLocalExternalPools(TokenId calldata _canonical) public view returns (IStableSwap) {\\n    return adoptedToLocalExternalPools(AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain));\\n  }\\n\\n  function getCustodiedAmount(bytes32 _key) public view returns (uint256) {\\n    return s.tokenConfigs[_key].custodied;\\n  }\\n\\n  // ============ Admin functions ============\\n\\n  /**\\n   * @notice Used to add supported assets. This is an admin only function\\n   *\\n   * @dev When allowlisting the canonical asset, all representational assets would be\\n   * allowlisted as well. In the event you have a different adopted asset (i.e. PoS USDC\\n   * on polygon), you should *not* allowlist the adopted asset. The stable swap pool\\n   * address used should allow you to swap between the local <> adopted asset.\\n   *\\n   * If a representation has been deployed at any point, `setupAssetWithDeployedRepresentation`\\n   * should be used instead.\\n   *\\n   * The following can only be added on *REMOTE* domains:\\n   * - `_adoptedAssetId`\\n   * - `_stableSwapPool`\\n   *\\n   * Whereas the `_cap` can only be added on the canonical domain\\n   *\\n   * @param _canonical - The canonical asset to add by id and domain. All representations\\n   * will be allowlisted as well\\n   * @param _canonicalDecimals - The decimals of the canonical asset (will be used for deployed\\n   * representation)\\n   * @param _representationName - The name to be used for the deployed asset\\n   * @param _representationSymbol - The symbol used for the deployed asset\\n   * @param _adoptedAssetId - The used asset id for this domain (e.g. PoS USDC for\\n   * polygon)\\n   * @param _stableSwapPool - The address of the local stableswap pool, if it exists.\\n   */\\n  function setupAsset(\\n    TokenId calldata _canonical,\\n    uint8 _canonicalDecimals,\\n    string memory _representationName,\\n    string memory _representationSymbol,\\n    address _adoptedAssetId,\\n    address _stableSwapPool,\\n    uint256 _cap\\n  ) external onlyOwnerOrAdmin returns (address _local) {\\n    // Calculate the canonical key.\\n    bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n\\n    bool onCanonical = _canonical.domain == s.domain;\\n    if (onCanonical) {\\n      // On the canonical domain, the local is the canonical address.\\n      _local = TypeCasts.bytes32ToAddress(_canonical.id);\\n\\n      // Sanity check: ensure adopted asset ID == canonical address (or empty).\\n      // This could reflect a user error or miscalculation and lead to unexpected behavior.\\n      // NOTE: Since we're on canonical domain, there should be no stableswap pool provided.\\n      if ((_adoptedAssetId != address(0) && _adoptedAssetId != _local) || _stableSwapPool != address(0)) {\\n        revert TokenFacet__setupAsset_invalidCanonicalConfiguration();\\n      }\\n\\n      // Enroll the asset. Pass in address(0) for adopted: it should use the local asset (i.e. the\\n      // canonical asset in this case) instead for both adopted and local.\\n      _enrollAdoptedAndLocalAssets(true, _canonicalDecimals, address(0), _local, address(0), _canonical, _cap, key);\\n    } else {\\n      // Cannot already have an assigned representation.\\n      // NOTE: *If* it does, it can still be replaced with `setupAssetWithDeployedRepresentation`\\n      if (s.tokenConfigs[key].representation != address(0) || s.tokenConfigs[key].representationDecimals != 0) {\\n        revert TokenFacet__setupAsset_representationListed();\\n      }\\n\\n      // On remote, deploy a local representation.\\n      _local = _deployRepresentation(\\n        _canonical.id,\\n        _canonical.domain,\\n        _canonicalDecimals,\\n        _representationName,\\n        _representationSymbol\\n      );\\n      // Enroll the asset.\\n      _enrollAdoptedAndLocalAssets(\\n        false,\\n        _canonicalDecimals,\\n        _adoptedAssetId,\\n        _local,\\n        _stableSwapPool,\\n        _canonical,\\n        0,\\n        key\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Used to add supported assets, without deploying a unique representation\\n   * asset, and instead using what admins have provided. This is an admin only function\\n   *\\n   * @dev This function does very minimal checks to ensure the correct `_representation`\\n   * token is used. The only enforced checks are:\\n   * - Bridge can mint, and balance of bridge will increase\\n   * - Bridge can burn, and balance of bridge will decrease\\n   *\\n   * However, there are many things that must be checked manually to avoid enrolling a bad\\n   * representation:\\n   * - decimals must always be equal to canonical decimals\\n   * - regular `mint`, `burn`, `ERC20` functionality could be implemented improperly\\n   * - the required interface functions (see `IBridgeToken`) may not be implemented\\n   * - upgradeability could interfere with required functionality\\n   *\\n   * Using this method allows admins to override existing local tokens, and should be used\\n   * carefully.\\n   *\\n   * @param _canonical - The canonical asset to add by id and domain. All representations\\n   * will be whitelisted as well\\n   * @param _representation - The address of the representative asset\\n   * @param _adoptedAssetId - The used asset id for this domain (e.g. PoS USDC for\\n   * polygon)\\n   * @param _stableSwapPool - The address of the local stableswap pool, if it exists.\\n   */\\n  function setupAssetWithDeployedRepresentation(\\n    TokenId calldata _canonical,\\n    address _representation,\\n    address _adoptedAssetId,\\n    address _stableSwapPool\\n  ) external onlyOwnerOrAdmin returns (address) {\\n    if (_representation == address(0)) {\\n      revert TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation();\\n    }\\n\\n    if (_canonical.domain == s.domain) {\\n      revert TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain();\\n    }\\n\\n    // Calculate the canonical key.\\n    bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n\\n    _enrollAdoptedAndLocalAssets(\\n      false,\\n      IERC20Metadata(_representation).decimals(),\\n      _adoptedAssetId,\\n      _representation,\\n      _stableSwapPool,\\n      _canonical,\\n      0,\\n      key\\n    );\\n\\n    return _representation;\\n  }\\n\\n  /**\\n   * @notice Adds a stable swap pool for the local <> adopted asset.\\n   * @dev Must pass in the _canonical information so it can be emitted in event\\n   */\\n  function addStableSwapPool(TokenId calldata _canonical, address _stableSwapPool) external onlyOwnerOrAdmin {\\n    bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n    _addStableSwapPool(_canonical, _stableSwapPool, key);\\n  }\\n\\n  /**\\n   * @notice Adds a stable swap pool for the local <> adopted asset.\\n   * @dev Must pass in the _canonical information so it can be emitted in event\\n   */\\n  function updateLiquidityCap(TokenId calldata _canonical, uint256 _updated) external onlyOwnerOrAdmin {\\n    bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n    _setLiquidityCap(_canonical, _updated, key);\\n  }\\n\\n  /**\\n   * @notice Used to remove assets from the allowlist\\n   * @param _key - The hash of the canonical id and domain to remove (mapping key)\\n   * @param _adoptedAssetId - Corresponding adopted asset to remove\\n      * @param _representation - Corresponding representation asset to remove\\n\\n   */\\n  function removeAssetId(\\n    bytes32 _key,\\n    address _adoptedAssetId,\\n    address _representation\\n  ) external onlyOwnerOrAdmin {\\n    TokenId memory canonical = s.adoptedToCanonical[_adoptedAssetId];\\n    _removeAssetId(_key, _adoptedAssetId, _representation, canonical);\\n  }\\n\\n  /**\\n   * @notice Used to remove assets from the allowlist\\n   * @param _canonical - The canonical id and domain to remove\\n   * @param _adoptedAssetId - Corresponding adopted asset to remove\\n   * @param _representation - Corresponding representation asset to remove\\n   */\\n  function removeAssetId(\\n    TokenId calldata _canonical,\\n    address _adoptedAssetId,\\n    address _representation\\n  ) external onlyOwnerOrAdmin {\\n    bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n    _removeAssetId(key, _adoptedAssetId, _representation, _canonical);\\n  }\\n\\n  /**\\n   * @notice Used to update the name and symbol of a local token\\n   * @param _canonical - The canonical id and domain to remove\\n   * @param _name - The new name\\n   * @param _symbol - The new symbol\\n   */\\n  function updateDetails(\\n    TokenId calldata _canonical,\\n    string memory _name,\\n    string memory _symbol\\n  ) external onlyOwnerOrAdmin {\\n    bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n    address local = AssetLogic.getConfig(key).representation;\\n    if (local == address(0)) {\\n      revert TokenFacet__updateDetails_localNotFound();\\n    }\\n\\n    // Can only happen on remote domains\\n    if (s.domain == _canonical.domain) {\\n      revert TokenFacet__updateDetails_onlyRemote();\\n    }\\n\\n    // ensure asset is currently approved because `s.canonicalToRepresentation` does\\n    // not get cleared when asset is removed from allowlist\\n    if (!s.tokenConfigs[key].approval) {\\n      revert TokenFacet__updateDetails_notApproved();\\n    }\\n\\n    // make sure the asset is still active\\n    IBridgeToken(local).setDetails(_name, _symbol);\\n  }\\n\\n  // ============ Private Functions ============\\n\\n  function _enrollAdoptedAndLocalAssets(\\n    bool _onCanonical,\\n    uint8 _localDecimals,\\n    address _adopted,\\n    address _local,\\n    address _stableSwapPool,\\n    TokenId calldata _canonical,\\n    uint256 _cap,\\n    bytes32 _key\\n  ) internal {\\n    // Sanity check: canonical ID and domain are not 0.\\n    if (_canonical.domain == 0 || _canonical.id == bytes32(\\\"\\\")) {\\n      revert TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical();\\n    }\\n\\n    // Get true adopted\\n    bool adoptedIsLocal = _adopted == address(0);\\n    address adopted = adoptedIsLocal ? _local : _adopted;\\n\\n    // Get whether you are on canonical\\n    bool onCanonical = s.domain == _canonical.domain;\\n\\n    // Sanity check: needs approval\\n    if (s.tokenConfigs[_key].approval) revert TokenFacet__addAssetId_alreadyAdded();\\n\\n    // Sanity check: bridge can mint / burn on remote\\n    if (!onCanonical) {\\n      IBridgeToken candidate = IBridgeToken(_local);\\n      uint256 starting = candidate.balanceOf(address(this));\\n      candidate.mint(address(this), 1);\\n      if (candidate.balanceOf(address(this)) != starting + 1) {\\n        revert TokenFacet__addAssetId_badMint();\\n      }\\n      candidate.burn(address(this), 1);\\n      if (candidate.balanceOf(address(this)) != starting) {\\n        revert TokenFacet__addAssetId_badBurn();\\n      }\\n    }\\n\\n    // Generate Config\\n    // NOTE: Using address(0) for stable swap, then using `_addStableSwap`. Slightly less\\n    // efficient, but preserves events. Same case for cap / custodied.\\n    // NOTE: IFF on canonical domain, `representation` must *always* be address(0)!\\n    s.tokenConfigs[_key] = TokenConfig(\\n      _onCanonical ? address(0) : _local, // representation\\n      _localDecimals, // representationDecimals\\n      adopted, // adopted\\n      adoptedIsLocal ? _localDecimals : IERC20Metadata(adopted).decimals(), // adoptedDecimals\\n      address(0), // adoptedToLocalExternalPools, see note\\n      true, // approval\\n      0, // cap, see note\\n      0 // custodied, see note\\n    );\\n\\n    // Update reverse lookups\\n    // Update the adopted mapping using convention of local == adopted iff (_adopted == address(0))\\n    s.adoptedToCanonical[adopted].domain = _canonical.domain;\\n    s.adoptedToCanonical[adopted].id = _canonical.id;\\n\\n    if (!_onCanonical) {\\n      // Update the local <> canonical. Representations only exist on non-canonical domains.\\n      s.representationToCanonical[_local].domain = _canonical.domain;\\n      s.representationToCanonical[_local].id = _canonical.id;\\n      // Update swap (on the canonical domain, there is no representation / pool).\\n      _addStableSwapPool(_canonical, _stableSwapPool, _key);\\n    } else if (_cap > 0) {\\n      // Update cap (only on canonical domain).\\n      _setLiquidityCap(_canonical, _cap, _key);\\n    }\\n\\n    // Emit event\\n    emit AssetAdded(_key, _canonical.id, _canonical.domain, adopted, _local, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Used to add an AMM for adopted <> local assets\\n   * @param _canonical - The canonical TokenId to add (domain and id)\\n   * @param _stableSwap - The address of the amm to add\\n   * @param _key - The hash of the canonical id and domain\\n   */\\n  function _addStableSwapPool(\\n    TokenId calldata _canonical,\\n    address _stableSwap,\\n    bytes32 _key\\n  ) internal {\\n    // Update the pool mapping\\n    s.tokenConfigs[_key].adoptedToLocalExternalPools = _stableSwap;\\n\\n    // Emit event\\n    emit StableSwapAdded(_key, _canonical.id, _canonical.domain, _stableSwap, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Used to add a cap on amount of custodied canonical asset\\n   * @dev The `custodied` amount will only increase in real time as router liquidity\\n   * and xcall are used and the cap is set (i.e. if cap is removed, `custodied` values are\\n   * no longer updated or enforced).\\n   *\\n   * When the `cap` is updated, the `custodied` value is set to the balance of the contract,\\n   * which is distinct from *retrievable* funds from the contracts (i.e. could include the\\n   * value someone just sent directly to the contract). Whenever you are updating the cap, you\\n   * should set the value with this in mind.\\n   *\\n   * @param _canonical - The canonical TokenId to add (domain and id)\\n   * @param _updated - The updated liquidity cap value\\n   * @param _key - The hash of the canonical id and domain\\n   */\\n  function _setLiquidityCap(\\n    TokenId calldata _canonical,\\n    uint256 _updated,\\n    bytes32 _key\\n  ) internal {\\n    if (s.domain != _canonical.domain) {\\n      revert TokenFacet__setLiquidityCap_notCanonicalDomain();\\n    }\\n    // Update the stored cap\\n    s.tokenConfigs[_key].cap = _updated;\\n\\n    if (_updated > 0) {\\n      // Update the custodied value to be the balance of this contract\\n      address canonical = TypeCasts.bytes32ToAddress(_canonical.id);\\n      s.tokenConfigs[_key].custodied = IERC20Metadata(canonical).balanceOf(address(this));\\n    }\\n\\n    emit LiquidityCapUpdated(_key, _canonical.id, _canonical.domain, _updated, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Used to remove assets from the allowlist\\n   *\\n   * @dev When you are removing an asset, `xcall` will fail but `handle` and `execute` will not to\\n   * allow for inflight transfers to be addressed. Similarly, the `repayAavePortal` function will\\n   * work.\\n   *\\n   * @param _key - The hash of the canonical id and domain to remove (mapping key)\\n   * @param _adoptedAssetId - Corresponding adopted asset to remove\\n   * @param _representation - Corresponding representation asset (i.e. bridged asset) to remove.\\n   * @param _canonical - The TokenId (canonical ID and domain) of the asset.\\n   */\\n  function _removeAssetId(\\n    bytes32 _key,\\n    address _adoptedAssetId,\\n    address _representation,\\n    TokenId memory _canonical\\n  ) internal {\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n    // Sanity check: already approval\\n    if (!config.approval) revert TokenFacet__removeAssetId_notAdded();\\n\\n    // Sanity check: consistent set of params\\n    if (config.adopted != _adoptedAssetId || config.representation != _representation)\\n      revert TokenFacet__removeAssetId_invalidParams();\\n\\n    bool onCanonical = s.domain == _canonical.domain;\\n    if (onCanonical) {\\n      // Sanity check: no value custodied if on canonical domain\\n      address canonicalAsset = TypeCasts.bytes32ToAddress(_canonical.id);\\n      // Check custodied amount for the given canonical asset address.\\n      // NOTE: if the `cap` is not set, the `custodied` value will not continue to be updated,\\n      // so you must use the `balanceOf` for accurate accounting. If there are funds held\\n      // on these contracts, then when you remove the asset id, the assets cannot be bridged back and\\n      // become worthless. This means the bridged assets would become worthless.\\n      // An attacker could prevent admins from removing an asset by sending funds to this contract,\\n      // but all of the liquidity should already be removed before this function is called.\\n      if (IERC20Metadata(canonicalAsset).balanceOf(address(this)) > 0) {\\n        revert TokenFacet__removeAssetId_remainsCustodied();\\n      }\\n    } else {\\n      // Sanity check: supply is 0 if on remote domain.\\n      if (IBridgeToken(_representation).totalSupply() > 0) {\\n        revert TokenFacet__removeAssetId_remainsCustodied();\\n      }\\n    }\\n\\n    // Delete token config from configs mapping.\\n    // NOTE: we do NOT delete the representation entries from the config. This is\\n    // done to prevent multiple representations being deployed in `setupAsset`\\n    delete s.tokenConfigs[_key].adopted;\\n    delete s.tokenConfigs[_key].adoptedDecimals;\\n    delete s.tokenConfigs[_key].adoptedToLocalExternalPools;\\n    delete s.tokenConfigs[_key].approval;\\n    delete s.tokenConfigs[_key].cap;\\n    // NOTE: custodied will always be 0 at this point\\n\\n    // Delete from reverse lookups\\n    delete s.representationToCanonical[_representation];\\n    delete s.adoptedToCanonical[_adoptedAssetId];\\n\\n    // Emit event\\n    emit AssetRemoved(_key, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Deploy and initialize a new token contract\\n   * @dev Each token contract is a proxy which\\n   * points to the token upgrade beacon\\n   * @return _token the address of the token contract\\n   */\\n  function _deployRepresentation(\\n    bytes32 _id,\\n    uint32 _domain,\\n    uint8 _decimals,\\n    string memory _name,\\n    string memory _symbol\\n  ) internal returns (address _token) {\\n    // deploy the token contract\\n    _token = address(new BridgeToken(_decimals, _name, _symbol));\\n    // emit event upon deploying new token\\n    emit TokenDeployed(_domain, _id, _token);\\n  }\\n}\\n\",\"keccak256\":\"0x5a7a81aedb000b6c7318a60a982cac6ced747e7d1b6b479f54760a2c04e97ad0\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/BridgeToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Ownable} from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport {IBridgeToken} from \\\"../interfaces/IBridgeToken.sol\\\";\\n\\nimport {ERC20} from \\\"./OZERC20.sol\\\";\\n\\ncontract BridgeToken is IBridgeToken, Ownable, ERC20 {\\n  // ============ Constructor ============\\n  constructor(\\n    uint8 decimals_,\\n    string memory name_,\\n    string memory symbol_\\n  ) Ownable() ERC20(decimals_, name_, symbol_, \\\"1\\\") {}\\n\\n  // ============ Events ============\\n\\n  event UpdateDetails(string indexed name, string indexed symbol);\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Destroys `_amnt` tokens from `_from`, reducing the\\n   * total supply.\\n   * @dev Emits a {Transfer} event with `to` set to the zero address.\\n   * Requirements:\\n   * - `_from` cannot be the zero address.\\n   * - `_from` must have at least `_amnt` tokens.\\n   * @param _from The address from which to destroy the tokens\\n   * @param _amnt The amount of tokens to be destroyed\\n   */\\n  function burn(address _from, uint256 _amnt) external override onlyOwner {\\n    _burn(_from, _amnt);\\n  }\\n\\n  /** @notice Creates `_amnt` tokens and assigns them to `_to`, increasing\\n   * the total supply.\\n   * @dev Emits a {Transfer} event with `from` set to the zero address.\\n   * Requirements:\\n   * - `to` cannot be the zero address.\\n   * @param _to The destination address\\n   * @param _amnt The amount of tokens to be minted\\n   */\\n  function mint(address _to, uint256 _amnt) external override onlyOwner {\\n    _mint(_to, _amnt);\\n  }\\n\\n  /**\\n   * @notice Set the details of a token\\n   * @param _newName The new name\\n   * @param _newSymbol The new symbol\\n   */\\n  function setDetails(string calldata _newName, string calldata _newSymbol) external override onlyOwner {\\n    // careful with naming convention change here\\n    _name = _newName;\\n    _symbol = _newSymbol;\\n    bytes32 hashedName = keccak256(bytes(_newName));\\n    _HASHED_NAME = hashedName;\\n    _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, hashedName, _HASHED_VERSION);\\n    emit UpdateDetails(_newName, _newSymbol);\\n  }\\n}\\n\",\"keccak256\":\"0xed6c82aedc8a694d40521389d3547cab2436d59bd2183a021e4a1844fd766636\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/OZERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n// This is modified from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\"\\n// Modifications were made to allow the name, hashed name, and cached\\n// domain separator to be internal\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\\\";\\nimport {EIP712} from \\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\";\\nimport {ECDSA} from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Counters.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * Implements ERC20 Permit extension allowing approvals to be made via\\n * signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20\\n * allowance (see {IERC20-allowance}) by presenting a message signed by the\\n * account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin guidelines: functions revert instead\\n * of returning `false` on failure. This behavior is nonetheless conventional\\n * and does not conflict with the expectations of ERC20 applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n *\\n * @dev Cannot use default ERC20/ERC20Permit implementation as there is no way to update\\n * the name (set to private).\\n *\\n * Cannot use default EIP712 implementation as the _HASHED_NAME may change.\\n * These functions use the same implementation, with easier storage access.\\n */\\ncontract ERC20 is IERC20Metadata, IERC20Permit {\\n  // See ERC20\\n  mapping(address => uint256) private _balances;\\n\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 private _totalSupply;\\n\\n  string internal _name; // made internal, need access\\n  string internal _symbol; // made internal, need access\\n  uint8 internal _decimals; // made internal, need access\\n\\n  // See ERC20Permit\\n  using Counters for Counters.Counter;\\n\\n  mapping(address => Counters.Counter) private _nonces;\\n\\n  // See EIP712\\n  // Immutables used in EIP 712 structured data hashing & signing\\n  // https://eips.ethereum.org/EIPS/eip-712\\n  bytes32 private constant _PERMIT_TYPEHASH =\\n    keccak256(\\\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\\\");\\n  bytes32 internal constant _TYPE_HASH =\\n    keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n  // made internal, need access\\n\\n  // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n  // invalidate the cached domain separator if the chain id changes.\\n  bytes32 internal _CACHED_DOMAIN_SEPARATOR; // made internal, may change\\n  uint256 private immutable _CACHED_CHAIN_ID;\\n  address private immutable _CACHED_THIS;\\n\\n  bytes32 internal _HASHED_NAME; // made internal, may change\\n  bytes32 internal immutable _HASHED_VERSION; // made internal, need access\\n\\n  /**\\n   * @dev Initializes the {EIP712} domain separator using the `name` parameter,\\n   * and setting `version` to `\\\"1\\\"`.\\n   *\\n   * It's a good idea to use the same `name` that is defined as the ERC20 token name.\\n   */\\n  constructor(\\n    uint8 decimals_,\\n    string memory name_,\\n    string memory symbol_,\\n    string memory version_\\n  ) {\\n    // ERC20\\n    _name = name_;\\n    _symbol = symbol_;\\n    _decimals = decimals_;\\n\\n    // EIP712\\n    bytes32 hashedName = keccak256(bytes(name_));\\n    bytes32 hashedVersion = keccak256(bytes(version_));\\n    _HASHED_NAME = hashedName;\\n    _HASHED_VERSION = hashedVersion;\\n    _CACHED_CHAIN_ID = block.chainid;\\n    _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, hashedName, hashedVersion);\\n    _CACHED_THIS = address(this);\\n  }\\n\\n  /**\\n   * @dev Returns the name of the token.\\n   */\\n  function name() public view virtual override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /**\\n   * @dev Returns the symbol of the token, usually a shorter version of the\\n   * name.\\n   */\\n  function symbol() public view virtual override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /**\\n   * @dev Returns the number of decimals used to get its user representation.\\n   * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n   * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n   *\\n   * Tokens usually opt for a value of 18, imitating the relationship between\\n   * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n   * overridden;\\n   *\\n   * NOTE: This information is only used for _display_ purposes: it in\\n   * no way affects any of the arithmetic of the contract, including\\n   * {IERC20-balanceOf} and {IERC20-transfer}.\\n   */\\n  function decimals() public view virtual override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-totalSupply}.\\n   */\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-balanceOf}.\\n   */\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _balances[account];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transfer}.\\n   *\\n   * Requirements:\\n   *\\n   * - `to` cannot be the zero address.\\n   * - the caller must have a balance of at least `amount`.\\n   */\\n  function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n    _transfer(msg.sender, to, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-allowance}.\\n   */\\n  function allowance(address _owner, address _spender) public view virtual override returns (uint256) {\\n    return _allowances[_owner][_spender];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-approve}.\\n   *\\n   * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n   * `transferFrom`. This is semantically equivalent to an infinite approval.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   */\\n  function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n    _approve(msg.sender, spender, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transferFrom}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance. This is not\\n   * required by the EIP. See the note at the beginning of {ERC20}.\\n   *\\n   * Requirements:\\n   *\\n   * - `_sender` and `recipient` cannot be the zero address.\\n   * - `_sender` must have a balance of at least `amount`.\\n   * - the caller must have allowance for ``_sender``'s tokens of at least\\n   * `amount`.\\n   */\\n  function transferFrom(\\n    address _sender,\\n    address _recipient,\\n    uint256 _amount\\n  ) public virtual override returns (bool) {\\n    _spendAllowance(_sender, msg.sender, _amount);\\n    _transfer(_sender, _recipient, _amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically increases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `_spender` cannot be the zero address.\\n   */\\n  function increaseAllowance(address _spender, uint256 _addedValue) public virtual returns (bool) {\\n    _approve(msg.sender, _spender, _allowances[msg.sender][_spender] + _addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `_spender` cannot be the zero address.\\n   * - `_spender` must have allowance for the caller of at least\\n   * `_subtractedValue`.\\n   */\\n  function decreaseAllowance(address _spender, uint256 _subtractedValue) public virtual returns (bool) {\\n    uint256 currentAllowance = allowance(msg.sender, _spender);\\n    require(currentAllowance >= _subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n    unchecked {\\n      _approve(msg.sender, _spender, currentAllowance - _subtractedValue);\\n    }\\n\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Moves tokens `amount` from `_sender` to `_recipient`.\\n   *\\n   * This is internal function is equivalent to {transfer}, and can be used to\\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\\n   *\\n   * Emits a {Transfer} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `_sender` cannot be the zero address.\\n   * - `_recipient` cannot be the zero address.\\n   * - `_sender` must have a balance of at least `amount`.\\n   */\\n  function _transfer(\\n    address _sender,\\n    address _recipient,\\n    uint256 _amount\\n  ) internal virtual {\\n    require(_sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n    require(_recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n    _beforeTokenTransfer(_sender, _recipient, _amount);\\n\\n    uint256 fromBalance = _balances[_sender];\\n    require(fromBalance >= _amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n    unchecked {\\n      _balances[_sender] = fromBalance - _amount;\\n      // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n      // decrementing then incrementing.\\n      _balances[_recipient] += _amount;\\n    }\\n\\n    emit Transfer(_sender, _recipient, _amount);\\n\\n    _afterTokenTransfer(_sender, _recipient, _amount);\\n  }\\n\\n  /** @dev Creates `_amount` tokens and assigns them to `_account`, increasing\\n   * the total supply.\\n   *\\n   * Emits a {Transfer} event with `from` set to the zero address.\\n   *\\n   * Requirements:\\n   *\\n   * - `to` cannot be the zero address.\\n   */\\n  function _mint(address _account, uint256 _amount) internal virtual {\\n    require(_account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n    _beforeTokenTransfer(address(0), _account, _amount);\\n\\n    _totalSupply += _amount;\\n    unchecked {\\n      // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n      _balances[_account] += _amount;\\n    }\\n    emit Transfer(address(0), _account, _amount);\\n\\n    _afterTokenTransfer(address(0), _account, _amount);\\n  }\\n\\n  /**\\n   * @dev Destroys `_amount` tokens from `_account`, reducing the\\n   * total supply.\\n   *\\n   * Emits a {Transfer} event with `to` set to the zero address.\\n   *\\n   * Requirements:\\n   *\\n   * - `_account` cannot be the zero address.\\n   * - `_account` must have at least `_amount` tokens.\\n   */\\n  function _burn(address _account, uint256 _amount) internal virtual {\\n    require(_account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n    _beforeTokenTransfer(_account, address(0), _amount);\\n\\n    uint256 accountBalance = _balances[_account];\\n    require(accountBalance >= _amount, \\\"ERC20: burn amount exceeds balance\\\");\\n    unchecked {\\n      _balances[_account] = accountBalance - _amount;\\n      // Overflow not possible: amount <= accountBalance <= totalSupply\\n      _totalSupply -= _amount;\\n    }\\n\\n    emit Transfer(_account, address(0), _amount);\\n\\n    _afterTokenTransfer(_account, address(0), _amount);\\n  }\\n\\n  /**\\n   * @dev Sets `_amount` as the allowance of `_spender` over the `_owner` s tokens.\\n   *\\n   * This internal function is equivalent to `approve`, and can be used to\\n   * e.g. set automatic allowances for certain subsystems, etc.\\n   *\\n   * Emits an {Approval} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `_owner` cannot be the zero address.\\n   * - `_spender` cannot be the zero address.\\n   */\\n  function _approve(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount\\n  ) internal virtual {\\n    require(_owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n    require(_spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n    _allowances[_owner][_spender] = _amount;\\n    emit Approval(_owner, _spender, _amount);\\n  }\\n\\n  /**\\n   * @dev Updates `_owner` s allowance for `_spender` based on spent `_amount`.\\n   *\\n   * Does not update the allowance amount in case of infinite allowance.\\n   * Revert if not enough allowance is available.\\n   *\\n   * Might emit an {Approval} event.\\n   */\\n  function _spendAllowance(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount\\n  ) internal virtual {\\n    uint256 currentAllowance = allowance(_owner, _spender);\\n    if (currentAllowance != type(uint256).max) {\\n      require(currentAllowance >= _amount, \\\"ERC20: insufficient allowance\\\");\\n      unchecked {\\n        _approve(_owner, _spender, currentAllowance - _amount);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Hook that is called before any transfer of tokens. This includes\\n   * minting and burning.\\n   *\\n   * Calling conditions:\\n   *\\n   * - when `_from` and `_to` are both non-zero, `_amount` of ``_from``'s tokens\\n   * will be to transferred to `_to`.\\n   * - when `_from` is zero, `_amount` tokens will be minted for `_to`.\\n   * - when `_to` is zero, `_amount` of ``_from``'s tokens will be burned.\\n   * - `_from` and `_to` are never both zero.\\n   *\\n   * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n   */\\n  function _beforeTokenTransfer(\\n    address _from,\\n    address _to,\\n    uint256 _amount\\n  ) internal virtual {}\\n\\n  /**\\n   * @dev Hook that is called after any transfer of tokens. This includes\\n   * minting and burning.\\n   *\\n   * Calling conditions:\\n   *\\n   * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n   * has been transferred to `to`.\\n   * - when `from` is zero, `amount` tokens have been minted for `to`.\\n   * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n   * - `from` and `to` are never both zero.\\n   *\\n   * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n   */\\n  function _afterTokenTransfer(\\n    address _from,\\n    address _to,\\n    uint256 _amount\\n  ) internal virtual {}\\n\\n  /**\\n   * @dev See {IERC20Permit-permit}.\\n   * @notice Sets approval from owner to spender to value\\n   * as long as deadline has not passed\\n   * by submitting a valid signature from owner\\n   * Uses EIP 712 structured data hashing & signing\\n   * https://eips.ethereum.org/EIPS/eip-712\\n   * @param _owner The account setting approval & signing the message\\n   * @param _spender The account receiving approval to spend owner's tokens\\n   * @param _value The amount to set approval for\\n   * @param _deadline The timestamp before which the signature must be submitted\\n   * @param _v ECDSA signature v\\n   * @param _r ECDSA signature r\\n   * @param _s ECDSA signature s\\n   */\\n  function permit(\\n    address _owner,\\n    address _spender,\\n    uint256 _value,\\n    uint256 _deadline,\\n    uint8 _v,\\n    bytes32 _r,\\n    bytes32 _s\\n  ) public virtual override {\\n    require(block.timestamp <= _deadline, \\\"ERC20Permit: expired deadline\\\");\\n\\n    bytes32 _structHash = keccak256(\\n      abi.encode(_PERMIT_TYPEHASH, _owner, _spender, _value, _useNonce(_owner), _deadline)\\n    );\\n\\n    bytes32 _hash = _hashTypedDataV4(_structHash);\\n\\n    address _signer = ECDSA.recover(_hash, _v, _r, _s);\\n    require(_signer == _owner, \\\"ERC20Permit: invalid signature\\\");\\n\\n    _approve(_owner, _spender, _value);\\n  }\\n\\n  /**\\n   * @dev See {IERC20Permit-nonces}.\\n   */\\n  function nonces(address _owner) public view virtual override returns (uint256) {\\n    return _nonces[_owner].current();\\n  }\\n\\n  /**\\n   * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.\\n   * This is ALWAYS calculated at runtime because the token name is mutable, not constant.\\n   */\\n  function DOMAIN_SEPARATOR() external view override returns (bytes32) {\\n    return _domainSeparatorV4();\\n  }\\n\\n  /**\\n   * @dev \\\"Consume a nonce\\\": return the current value and increment.\\n   * @dev See {EIP712._buildDomainSeparator}\\n   */\\n  function _useNonce(address _owner) internal virtual returns (uint256 current) {\\n    Counters.Counter storage nonce = _nonces[_owner];\\n    current = nonce.current();\\n    nonce.increment();\\n  }\\n\\n  /**\\n   * @dev Returns the domain separator for the current chain.\\n   * @dev See {EIP712._buildDomainSeparator}\\n   */\\n  function _domainSeparatorV4() internal view returns (bytes32) {\\n    if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n      return _CACHED_DOMAIN_SEPARATOR;\\n    } else {\\n      return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n    }\\n  }\\n\\n  /**\\n   * @dev See {EIP712._buildDomainSeparator}. Made internal to allow usage in parent class.\\n   */\\n  function _buildDomainSeparator(\\n    bytes32 typeHash,\\n    bytes32 nameHash,\\n    bytes32 versionHash\\n  ) internal view returns (bytes32) {\\n    return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n  }\\n\\n  /**\\n   * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n   * function returns the hash of the fully encoded EIP712 message for this domain.\\n   *\\n   * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n   *\\n   * ```solidity\\n   * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n   *     keccak256(\\\"Mail(address to,string contents)\\\"),\\n   *     mailTo,\\n   *     keccak256(bytes(mailContents))\\n   * )));\\n   * address signer = ECDSA.recover(digest, signature);\\n   * ```\\n   */\\n  function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n    return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n  }\\n}\\n\",\"keccak256\":\"0x7219667c651b2cbcbd1866667c5aa5fa1b1120a2fc111f24290c5ece3b3bba52\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IBridgeToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\ninterface IBridgeToken is IERC20Metadata {\\n  function burn(address _from, uint256 _amnt) external;\\n\\n  function mint(address _to, uint256 _amnt) external;\\n\\n  function setDetails(string calldata _name, string calldata _symbol) external;\\n}\\n\",\"keccak256\":\"0x93b2adcc4b953ecd2d3e738d797f5fbde2ccb3726df10bc7acde9c1b4775b019\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":13726,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"s","offset":0,"slot":"0","type":"t_struct(AppStorage)29536_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_contract(IERC20)10812)dyn_storage":{"base":"t_contract(IERC20)10812","encoding":"dynamic_array","label":"contract IERC20[]","numberOfBytes":"32"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IConnectorManager)47805":{"encoding":"inplace","label":"contract IConnectorManager","numberOfBytes":"20"},"t_contract(IERC20)10812":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_contract(LPToken)23179":{"encoding":"inplace","label":"contract LPToken","numberOfBytes":"20"},"t_enum(DestinationTransferStatus)29324":{"encoding":"inplace","label":"enum DestinationTransferStatus","numberOfBytes":"1"},"t_enum(Role)29319":{"encoding":"inplace","label":"enum Role","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_enum(Role)29319)":{"encoding":"mapping","key":"t_address","label":"mapping(address => enum Role)","numberOfBytes":"32","value":"t_enum(Role)29319"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(RouterConfig)29378_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RouterConfig)","numberOfBytes":"32","value":"t_struct(RouterConfig)29378_storage"},"t_mapping(t_address,t_struct(TokenId)37728_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct TokenId)","numberOfBytes":"32","value":"t_struct(TokenId)37728_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_bytes32,t_array(t_address)dyn_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => address[])","numberOfBytes":"32","value":"t_array(t_address)dyn_storage"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum DestinationTransferStatus)","numberOfBytes":"32","value":"t_enum(DestinationTransferStatus)29324"},"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => mapping(address => uint8))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint8)"},"t_mapping(t_bytes32,t_struct(Swap)30786_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct SwapUtils.Swap)","numberOfBytes":"32","value":"t_struct(Swap)30786_storage"},"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct TokenConfig)","numberOfBytes":"32","value":"t_struct(TokenConfig)29395_storage"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_bytes32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => bytes32)","numberOfBytes":"32","value":"t_bytes32"},"t_struct(AppStorage)29536_storage":{"encoding":"inplace","label":"struct AppStorage","members":[{"astId":29397,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":29399,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"LIQUIDITY_FEE_NUMERATOR","offset":0,"slot":"1","type":"t_uint256"},{"astId":29402,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"relayerFeeVault","offset":0,"slot":"2","type":"t_address"},{"astId":29405,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"nonce","offset":0,"slot":"3","type":"t_uint256"},{"astId":29408,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"domain","offset":0,"slot":"4","type":"t_uint32"},{"astId":29414,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"adoptedToCanonical","offset":0,"slot":"5","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29420,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"representationToCanonical","offset":0,"slot":"6","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29426,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"tokenConfigs","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)"},{"astId":29432,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"transferStatus","offset":0,"slot":"8","type":"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)"},{"astId":29438,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"routedTransfers","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_array(t_address)dyn_storage)"},{"astId":29445,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"routerBalances","offset":0,"slot":"10","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":29450,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"approvedRelayers","offset":0,"slot":"11","type":"t_mapping(t_address,t_bool)"},{"astId":29453,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"maxRoutersPerTransfer","offset":0,"slot":"12","type":"t_uint256"},{"astId":29458,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"slippage","offset":0,"slot":"13","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29463,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"receiveLocalOverride","offset":0,"slot":"14","type":"t_mapping(t_bytes32,t_bool)"},{"astId":29468,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"remotes","offset":0,"slot":"15","type":"t_mapping(t_uint32,t_bytes32)"},{"astId":29470,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"_proposed","offset":0,"slot":"16","type":"t_address"},{"astId":29472,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"_proposedOwnershipTimestamp","offset":0,"slot":"17","type":"t_uint256"},{"astId":29474,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"_routerAllowlistRemoved","offset":0,"slot":"18","type":"t_bool"},{"astId":29476,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"_routerAllowlistTimestamp","offset":0,"slot":"19","type":"t_uint256"},{"astId":29482,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"roles","offset":0,"slot":"20","type":"t_mapping(t_address,t_enum(Role)29319)"},{"astId":29487,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"routerConfigs","offset":0,"slot":"21","type":"t_mapping(t_address,t_struct(RouterConfig)29378_storage)"},{"astId":29489,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"_status","offset":0,"slot":"22","type":"t_uint256"},{"astId":29491,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"_xcallStatus","offset":0,"slot":"23","type":"t_uint256"},{"astId":29497,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"swapStorages","offset":0,"slot":"24","type":"t_mapping(t_bytes32,t_struct(Swap)30786_storage)"},{"astId":29504,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"tokenIndexes","offset":0,"slot":"25","type":"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))"},{"astId":29507,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"lpTokenTargetAddress","offset":0,"slot":"26","type":"t_address"},{"astId":29510,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"_paused","offset":20,"slot":"26","type":"t_bool"},{"astId":29513,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"aavePool","offset":0,"slot":"27","type":"t_address"},{"astId":29516,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"aavePortalFeeNumerator","offset":0,"slot":"28","type":"t_uint256"},{"astId":29521,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"portalDebt","offset":0,"slot":"29","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29526,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"portalFeeDebt","offset":0,"slot":"30","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29531,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"approvedSequencers","offset":0,"slot":"31","type":"t_mapping(t_address,t_bool)"},{"astId":29535,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"xAppConnectionManager","offset":0,"slot":"32","type":"t_contract(IConnectorManager)47805"}],"numberOfBytes":"1056"},"t_struct(RouterConfig)29378_storage":{"encoding":"inplace","label":"struct RouterConfig","members":[{"astId":29367,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"approved","offset":0,"slot":"0","type":"t_bool"},{"astId":29369,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"portalApproved","offset":1,"slot":"0","type":"t_bool"},{"astId":29371,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"owner","offset":2,"slot":"0","type":"t_address"},{"astId":29373,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"recipient","offset":0,"slot":"1","type":"t_address"},{"astId":29375,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"proposed","offset":0,"slot":"2","type":"t_address"},{"astId":29377,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"proposedTimestamp","offset":0,"slot":"3","type":"t_uint256"}],"numberOfBytes":"128"},"t_struct(Swap)30786_storage":{"encoding":"inplace","label":"struct SwapUtils.Swap","members":[{"astId":30753,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"key","offset":0,"slot":"0","type":"t_bytes32"},{"astId":30755,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"initialA","offset":0,"slot":"1","type":"t_uint256"},{"astId":30757,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"futureA","offset":0,"slot":"2","type":"t_uint256"},{"astId":30759,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"initialATime","offset":0,"slot":"3","type":"t_uint256"},{"astId":30761,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"futureATime","offset":0,"slot":"4","type":"t_uint256"},{"astId":30763,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"swapFee","offset":0,"slot":"5","type":"t_uint256"},{"astId":30765,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"adminFee","offset":0,"slot":"6","type":"t_uint256"},{"astId":30768,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"lpToken","offset":0,"slot":"7","type":"t_contract(LPToken)23179"},{"astId":30772,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"pooledTokens","offset":0,"slot":"8","type":"t_array(t_contract(IERC20)10812)dyn_storage"},{"astId":30775,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"tokenPrecisionMultipliers","offset":0,"slot":"9","type":"t_array(t_uint256)dyn_storage"},{"astId":30778,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"balances","offset":0,"slot":"10","type":"t_array(t_uint256)dyn_storage"},{"astId":30781,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"adminFees","offset":0,"slot":"11","type":"t_array(t_uint256)dyn_storage"},{"astId":30783,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"disabled","offset":0,"slot":"12","type":"t_bool"},{"astId":30785,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"removeTime","offset":0,"slot":"13","type":"t_uint256"}],"numberOfBytes":"448"},"t_struct(TokenConfig)29395_storage":{"encoding":"inplace","label":"struct TokenConfig","members":[{"astId":29380,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"representation","offset":0,"slot":"0","type":"t_address"},{"astId":29382,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"representationDecimals","offset":20,"slot":"0","type":"t_uint8"},{"astId":29384,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"adopted","offset":0,"slot":"1","type":"t_address"},{"astId":29386,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"adoptedDecimals","offset":20,"slot":"1","type":"t_uint8"},{"astId":29388,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"adoptedToLocalExternalPools","offset":0,"slot":"2","type":"t_address"},{"astId":29390,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"approval","offset":20,"slot":"2","type":"t_bool"},{"astId":29392,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"cap","offset":0,"slot":"3","type":"t_uint256"},{"astId":29394,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"custodied","offset":0,"slot":"4","type":"t_uint256"}],"numberOfBytes":"160"},"t_struct(TokenId)37728_storage":{"encoding":"inplace","label":"struct TokenId","members":[{"astId":37725,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"domain","offset":0,"slot":"0","type":"t_uint32"},{"astId":37727,"contract":"contracts/core/connext/facets/TokenFacet.sol:TokenFacet","label":"id","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"events":{"AssetAdded(bytes32,bytes32,uint32,address,address,address)":{"notice":"Emitted when a new asset is added"},"AssetRemoved(bytes32,address)":{"notice":"Emitted when an asset is removed from allowlists"},"LiquidityCapUpdated(bytes32,bytes32,uint32,uint256,address)":{"notice":"Emitted when a liquidity cap is updated"},"StableSwapAdded(bytes32,bytes32,uint32,address,address)":{"notice":"Emitted when a new stable-swap AMM is added for the local <> adopted token"},"TokenDeployed(uint32,bytes32,address)":{"notice":"emitted when a representation token contract is deployed"}},"kind":"user","methods":{"addStableSwapPool((uint32,bytes32),address)":{"notice":"Adds a stable swap pool for the local <> adopted asset."},"removeAssetId((uint32,bytes32),address,address)":{"notice":"Used to remove assets from the allowlist"},"removeAssetId(bytes32,address,address)":{"notice":"Used to remove assets from the allowlist"},"setupAsset((uint32,bytes32),uint8,string,string,address,address,uint256)":{"notice":"Used to add supported assets. This is an admin only function"},"setupAssetWithDeployedRepresentation((uint32,bytes32),address,address,address)":{"notice":"Used to add supported assets, without deploying a unique representation asset, and instead using what admins have provided. This is an admin only function"},"updateDetails((uint32,bytes32),string,string)":{"notice":"Used to update the name and symbol of a local token"},"updateLiquidityCap((uint32,bytes32),uint256)":{"notice":"Adds a stable swap pool for the local <> adopted asset."}},"version":1}}},"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol":{"DiamondInit":{"abi":[{"inputs":[],"name":"BaseConnextFacet__getAdoptedAsset_assetNotFound","type":"error"},{"inputs":[],"name":"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__nonXCallReentrant_reentrantCall","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"BaseConnextFacet__whenNotPaused_paused","type":"error"},{"inputs":[],"name":"DiamondInit__init_alreadyInitialized","type":"error"},{"inputs":[],"name":"DiamondInit__init_domainsDontMatch","type":"error"},{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"address","name":"_xAppConnectionManager","type":"address"},{"internalType":"uint256","name":"_acceptanceDelay","type":"uint256"},{"internalType":"address","name":"_lpTokenTargetAddress","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50610365806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80639a7e155e14610030575b600080fd5b61004361003e3660046102bc565b610045565b005b60005460ff1615610069576040516318fc834360e21b815260040160405180910390fd5b610071610209565b60008390508463ffffffff16816001600160a01b0316638d3638f46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100df919061030b565b63ffffffff161461010357604051631fdd17b360e11b815260040160405180910390fd5b6000805460ff191660011781556101377fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b6301ffc9a760e01b600090815260038201602090815260408083208054600160ff199182168117909255636f5723a360e11b855282852080548216831790556348e2b09360e01b8552828520805482168317905563286b971b60e01b855291909320805490911683179055600690920195909555601685905560178590556004805463ffffffff191663ffffffff98909816979097179096555061270b9092556005600c5583546001600160a01b03199081166001600160a01b0393841617909455601a805490941691161790915550565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c600401546001600160a01b031633146102895760405162461bcd60e51b815260206004820152601b60248201527f4c69624469616d6f6e643a2021636f6e7472616374206f776e65720000000000604482015260640160405180910390fd5b565b63ffffffff8116811461029d57600080fd5b50565b80356001600160a01b03811681146102b757600080fd5b919050565b600080600080608085870312156102d257600080fd5b84356102dd8161028b565b93506102eb602086016102a0565b925060408501359150610300606086016102a0565b905092959194509250565b60006020828403121561031d57600080fd5b81516103288161028b565b939250505056fea2646970667358221220569631f7d94406d31f73ca4585b97237f054110c5aebb920464901a93d1abbde64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x365 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9A7E155E EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x3E CALLDATASIZE PUSH1 0x4 PUSH2 0x2BC JUMP JUMPDEST PUSH2 0x45 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x69 JUMPI PUSH1 0x40 MLOAD PUSH4 0x18FC8343 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x71 PUSH2 0x209 JUMP JUMPDEST PUSH1 0x0 DUP4 SWAP1 POP DUP5 PUSH4 0xFFFFFFFF AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8D3638F4 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDF SWAP2 SWAP1 PUSH2 0x30B JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x103 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1FDD17B3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR DUP2 SSTORE PUSH2 0x137 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP1 JUMP JUMPDEST PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0xFF NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE PUSH4 0x6F5723A3 PUSH1 0xE1 SHL DUP6 MSTORE DUP3 DUP6 KECCAK256 DUP1 SLOAD DUP3 AND DUP4 OR SWAP1 SSTORE PUSH4 0x48E2B093 PUSH1 0xE0 SHL DUP6 MSTORE DUP3 DUP6 KECCAK256 DUP1 SLOAD DUP3 AND DUP4 OR SWAP1 SSTORE PUSH4 0x286B971B PUSH1 0xE0 SHL DUP6 MSTORE SWAP2 SWAP1 SWAP4 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 AND DUP4 OR SWAP1 SSTORE PUSH1 0x6 SWAP1 SWAP3 ADD SWAP6 SWAP1 SWAP6 SSTORE PUSH1 0x16 DUP6 SWAP1 SSTORE PUSH1 0x17 DUP6 SWAP1 SSTORE PUSH1 0x4 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP9 SWAP1 SWAP9 AND SWAP8 SWAP1 SWAP8 OR SWAP1 SWAP7 SSTORE POP PUSH2 0x270B SWAP1 SWAP3 SSTORE PUSH1 0x5 PUSH1 0xC SSTORE DUP4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP5 SSTORE PUSH1 0x1A DUP1 SLOAD SWAP1 SWAP5 AND SWAP2 AND OR SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x4 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x289 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A2021636F6E7472616374206F776E65720000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x2DD DUP2 PUSH2 0x28B JUMP JUMPDEST SWAP4 POP PUSH2 0x2EB PUSH1 0x20 DUP7 ADD PUSH2 0x2A0 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH2 0x300 PUSH1 0x60 DUP7 ADD PUSH2 0x2A0 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x31D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x328 DUP2 PUSH2 0x28B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMP SWAP7 BALANCE 0xF7 0xD9 DIFFICULTY MOD 0xD3 0x1F PUSH20 0xCA4585B97237F054110C5AEBB920464901A93D1A 0xBB 0xDE PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"1180:2297:80:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@diamondStorage_29603":{"entryPoint":null,"id":29603,"parameterSlots":0,"returnSlots":1},"@enforceIsContractOwner_29683":{"entryPoint":521,"id":29683,"parameterSlots":0,"returnSlots":0},"@init_22282":{"entryPoint":69,"id":22282,"parameterSlots":4,"returnSlots":0},"abi_decode_address":{"entryPoint":672,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_uint32_fromMemory":{"entryPoint":779,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32t_addresst_uint256t_address":{"entryPoint":700,"id":null,"parameterSlots":2,"returnSlots":4},"abi_encode_tuple_t_stringliteral_4beb0b63f903eb8754578ce7af3eb73865b73e0886b8ef814c8fa0e6d2575299__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_uint32":{"entryPoint":651,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1392:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"58:77:181","statements":[{"body":{"nodeType":"YulBlock","src":"113:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"122:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"125:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"115:6:181"},"nodeType":"YulFunctionCall","src":"115:12:181"},"nodeType":"YulExpressionStatement","src":"115:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"81:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"92:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"99:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"88:3:181"},"nodeType":"YulFunctionCall","src":"88:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"78:2:181"},"nodeType":"YulFunctionCall","src":"78:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"71:6:181"},"nodeType":"YulFunctionCall","src":"71:41:181"},"nodeType":"YulIf","src":"68:61:181"}]},"name":"validator_revert_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"47:5:181","type":""}],"src":"14:121:181"},{"body":{"nodeType":"YulBlock","src":"189:124:181","statements":[{"nodeType":"YulAssignment","src":"199:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"221:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"208:12:181"},"nodeType":"YulFunctionCall","src":"208:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"199:5:181"}]},{"body":{"nodeType":"YulBlock","src":"291:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"300:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"303:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"293:6:181"},"nodeType":"YulFunctionCall","src":"293:12:181"},"nodeType":"YulExpressionStatement","src":"293:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"250:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"261:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"276:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"281:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"272:3:181"},"nodeType":"YulFunctionCall","src":"272:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"285:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"268:3:181"},"nodeType":"YulFunctionCall","src":"268:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"257:3:181"},"nodeType":"YulFunctionCall","src":"257:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"247:2:181"},"nodeType":"YulFunctionCall","src":"247:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"240:6:181"},"nodeType":"YulFunctionCall","src":"240:50:181"},"nodeType":"YulIf","src":"237:70:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"168:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"179:5:181","type":""}],"src":"140:173:181"},{"body":{"nodeType":"YulBlock","src":"438:342:181","statements":[{"body":{"nodeType":"YulBlock","src":"485:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"494:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"497:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"487:6:181"},"nodeType":"YulFunctionCall","src":"487:12:181"},"nodeType":"YulExpressionStatement","src":"487:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"459:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"468:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"455:3:181"},"nodeType":"YulFunctionCall","src":"455:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"480:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"451:3:181"},"nodeType":"YulFunctionCall","src":"451:33:181"},"nodeType":"YulIf","src":"448:53:181"},{"nodeType":"YulVariableDeclaration","src":"510:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"536:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"523:12:181"},"nodeType":"YulFunctionCall","src":"523:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"514:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"579:5:181"}],"functionName":{"name":"validator_revert_uint32","nodeType":"YulIdentifier","src":"555:23:181"},"nodeType":"YulFunctionCall","src":"555:30:181"},"nodeType":"YulExpressionStatement","src":"555:30:181"},{"nodeType":"YulAssignment","src":"594:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"604:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"594:6:181"}]},{"nodeType":"YulAssignment","src":"618:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"651:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"662:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"647:3:181"},"nodeType":"YulFunctionCall","src":"647:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"628:18:181"},"nodeType":"YulFunctionCall","src":"628:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"618:6:181"}]},{"nodeType":"YulAssignment","src":"675:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"702:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"713:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"698:3:181"},"nodeType":"YulFunctionCall","src":"698:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"685:12:181"},"nodeType":"YulFunctionCall","src":"685:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"675:6:181"}]},{"nodeType":"YulAssignment","src":"726:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"759:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"770:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"755:3:181"},"nodeType":"YulFunctionCall","src":"755:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"736:18:181"},"nodeType":"YulFunctionCall","src":"736:38:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"726:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_addresst_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"380:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"391:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"403:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"411:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"419:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"427:6:181","type":""}],"src":"318:462:181"},{"body":{"nodeType":"YulBlock","src":"865:169:181","statements":[{"body":{"nodeType":"YulBlock","src":"911:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"920:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"923:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"913:6:181"},"nodeType":"YulFunctionCall","src":"913:12:181"},"nodeType":"YulExpressionStatement","src":"913:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"886:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"895:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"882:3:181"},"nodeType":"YulFunctionCall","src":"882:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"907:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"878:3:181"},"nodeType":"YulFunctionCall","src":"878:32:181"},"nodeType":"YulIf","src":"875:52:181"},{"nodeType":"YulVariableDeclaration","src":"936:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"955:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"949:5:181"},"nodeType":"YulFunctionCall","src":"949:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"940:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"998:5:181"}],"functionName":{"name":"validator_revert_uint32","nodeType":"YulIdentifier","src":"974:23:181"},"nodeType":"YulFunctionCall","src":"974:30:181"},"nodeType":"YulExpressionStatement","src":"974:30:181"},{"nodeType":"YulAssignment","src":"1013:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1023:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1013:6:181"}]}]},"name":"abi_decode_tuple_t_uint32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"831:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"842:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"854:6:181","type":""}],"src":"785:249:181"},{"body":{"nodeType":"YulBlock","src":"1213:177:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1230:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1241:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1223:6:181"},"nodeType":"YulFunctionCall","src":"1223:21:181"},"nodeType":"YulExpressionStatement","src":"1223:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1264:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1275:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1260:3:181"},"nodeType":"YulFunctionCall","src":"1260:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1280:2:181","type":"","value":"27"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1253:6:181"},"nodeType":"YulFunctionCall","src":"1253:30:181"},"nodeType":"YulExpressionStatement","src":"1253:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1303:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1314:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1299:3:181"},"nodeType":"YulFunctionCall","src":"1299:18:181"},{"hexValue":"4c69624469616d6f6e643a2021636f6e7472616374206f776e6572","kind":"string","nodeType":"YulLiteral","src":"1319:29:181","type":"","value":"LibDiamond: !contract owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1292:6:181"},"nodeType":"YulFunctionCall","src":"1292:57:181"},"nodeType":"YulExpressionStatement","src":"1292:57:181"},{"nodeType":"YulAssignment","src":"1358:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1370:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1381:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1366:3:181"},"nodeType":"YulFunctionCall","src":"1366:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1358:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4beb0b63f903eb8754578ce7af3eb73865b73e0886b8ef814c8fa0e6d2575299__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1190:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1204:4:181","type":""}],"src":"1039:351:181"}]},"contents":"{\n    { }\n    function validator_revert_uint32(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_uint32(value)\n        value0 := value\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := abi_decode_address(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_uint32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_uint32(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_4beb0b63f903eb8754578ce7af3eb73865b73e0886b8ef814c8fa0e6d2575299__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"LibDiamond: !contract owner\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061002b5760003560e01c80639a7e155e14610030575b600080fd5b61004361003e3660046102bc565b610045565b005b60005460ff1615610069576040516318fc834360e21b815260040160405180910390fd5b610071610209565b60008390508463ffffffff16816001600160a01b0316638d3638f46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100df919061030b565b63ffffffff161461010357604051631fdd17b360e11b815260040160405180910390fd5b6000805460ff191660011781556101377fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b6301ffc9a760e01b600090815260038201602090815260408083208054600160ff199182168117909255636f5723a360e11b855282852080548216831790556348e2b09360e01b8552828520805482168317905563286b971b60e01b855291909320805490911683179055600690920195909555601685905560178590556004805463ffffffff191663ffffffff98909816979097179096555061270b9092556005600c5583546001600160a01b03199081166001600160a01b0393841617909455601a805490941691161790915550565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c600401546001600160a01b031633146102895760405162461bcd60e51b815260206004820152601b60248201527f4c69624469616d6f6e643a2021636f6e7472616374206f776e65720000000000604482015260640160405180910390fd5b565b63ffffffff8116811461029d57600080fd5b50565b80356001600160a01b03811681146102b757600080fd5b919050565b600080600080608085870312156102d257600080fd5b84356102dd8161028b565b93506102eb602086016102a0565b925060408501359150610300606086016102a0565b905092959194509250565b60006020828403121561031d57600080fd5b81516103288161028b565b939250505056fea2646970667358221220569631f7d94406d31f73ca4585b97237f054110c5aebb920464901a93d1abbde64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9A7E155E EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x3E CALLDATASIZE PUSH1 0x4 PUSH2 0x2BC JUMP JUMPDEST PUSH2 0x45 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x69 JUMPI PUSH1 0x40 MLOAD PUSH4 0x18FC8343 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x71 PUSH2 0x209 JUMP JUMPDEST PUSH1 0x0 DUP4 SWAP1 POP DUP5 PUSH4 0xFFFFFFFF AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8D3638F4 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDF SWAP2 SWAP1 PUSH2 0x30B JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x103 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1FDD17B3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR DUP2 SSTORE PUSH2 0x137 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP1 JUMP JUMPDEST PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0xFF NOT SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE PUSH4 0x6F5723A3 PUSH1 0xE1 SHL DUP6 MSTORE DUP3 DUP6 KECCAK256 DUP1 SLOAD DUP3 AND DUP4 OR SWAP1 SSTORE PUSH4 0x48E2B093 PUSH1 0xE0 SHL DUP6 MSTORE DUP3 DUP6 KECCAK256 DUP1 SLOAD DUP3 AND DUP4 OR SWAP1 SSTORE PUSH4 0x286B971B PUSH1 0xE0 SHL DUP6 MSTORE SWAP2 SWAP1 SWAP4 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 AND DUP4 OR SWAP1 SSTORE PUSH1 0x6 SWAP1 SWAP3 ADD SWAP6 SWAP1 SWAP6 SSTORE PUSH1 0x16 DUP6 SWAP1 SSTORE PUSH1 0x17 DUP6 SWAP1 SSTORE PUSH1 0x4 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP9 SWAP1 SWAP9 AND SWAP8 SWAP1 SWAP8 OR SWAP1 SWAP7 SSTORE POP PUSH2 0x270B SWAP1 SWAP3 SSTORE PUSH1 0x5 PUSH1 0xC SSTORE DUP4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND OR SWAP1 SWAP5 SSTORE PUSH1 0x1A DUP1 SLOAD SWAP1 SWAP5 AND SWAP2 AND OR SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x4 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x289 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A2021636F6E7472616374206F776E65720000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x2DD DUP2 PUSH2 0x28B JUMP JUMPDEST SWAP4 POP PUSH2 0x2EB PUSH1 0x20 DUP7 ADD PUSH2 0x2A0 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH2 0x300 PUSH1 0x60 DUP7 ADD PUSH2 0x2A0 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x31D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x328 DUP2 PUSH2 0x28B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMP SWAP7 BALANCE 0xF7 0xD9 DIFFICULTY MOD 0xD3 0x1F PUSH20 0xCA4585B97237F054110C5AEBB920464901A93D1A 0xBB 0xDE PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"1180:2297:80:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1636:1839;;;;;;:::i;:::-;;:::i;:::-;;;1823:1;:13;;;1819:79;;;1853:38;;-1:-1:-1;;;1853:38:80;;;;;;;;;;;1819:79;1936:35;:33;:35::i;:::-;2013:25;2059:22;2013:69;;2117:7;2092:32;;:7;-1:-1:-1;;;;;2092:19:80;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;;;2088:96;;2141:36;;-1:-1:-1;;;2141:36:80;;;;;;;;;;;2088:96;2225:1;:20;;-1:-1:-1;;2225:20:80;2241:4;2225:20;;;2317:27;636:45:106;;1797:177;2317:27:80;-1:-1:-1;;;2350:49:80;;;;:22;;;:49;;;;;;;;:56;;2402:4;-1:-1:-1;;2350:56:80;;;;;;;;-1:-1:-1;;;2412:53:80;;;;;:60;;;;;;;;-1:-1:-1;;;2478:55:80;;;;;:62;;;;;;;;-1:-1:-1;;;2546:58:80;;;;;;:65;;;;;;;;;2617:18;;;;:37;;;;3126:9;:33;;;3165:14;:38;;;3225:8;:18;;-1:-1:-1;;3225:18:80;;;;;;;;;;;;;-1:-1:-1;258:5:104;3249:69:80;;;381:1:104;3324:23:80;:55;3385:33;;-1:-1:-1;;;;;;3385:33:80;;;-1:-1:-1;;;;;3385:33:80;;;;;;;3424:22;:46;;;;;;;;;;;-1:-1:-1;1636:1839:80:o;2650:143:106:-;636:45;2726:30;;;-1:-1:-1;;;;;2726:30:106;2712:10;:44;2704:84;;;;-1:-1:-1;;;2704:84:106;;1241:2:181;2704:84:106;;;1223:21:181;1280:2;1260:18;;;1253:30;1319:29;1299:18;;;1292:57;1366:18;;2704:84:106;;;;;;;;2650:143::o;14:121:181:-;99:10;92:5;88:22;81:5;78:33;68:61;;125:1;122;115:12;68:61;14:121;:::o;140:173::-;208:20;;-1:-1:-1;;;;;257:31:181;;247:42;;237:70;;303:1;300;293:12;237:70;140:173;;;:::o;318:462::-;403:6;411;419;427;480:3;468:9;459:7;455:23;451:33;448:53;;;497:1;494;487:12;448:53;536:9;523:23;555:30;579:5;555:30;:::i;:::-;604:5;-1:-1:-1;628:38:181;662:2;647:18;;628:38;:::i;:::-;618:48;;713:2;702:9;698:18;685:32;675:42;;736:38;770:2;759:9;755:18;736:38;:::i;:::-;726:48;;318:462;;;;;;;:::o;785:249::-;854:6;907:2;895:9;886:7;882:23;878:32;875:52;;;923:1;920;913:12;875:52;955:9;949:16;974:30;998:5;974:30;:::i;:::-;1023:5;785:249;-1:-1:-1;;;785:249:181:o"},"gasEstimates":{"creation":{"codeDepositCost":"173800","executionCost":"220","totalCost":"174020"},"external":{"init(uint32,address,uint256,address)":"infinite"}},"methodIdentifiers":{"init(uint32,address,uint256,address)":"9a7e155e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DiamondInit__init_alreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DiamondInit__init_domainsDontMatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_xAppConnectionManager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_acceptanceDelay\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_lpTokenTargetAddress\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol\":\"DiamondInit\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n  AppStorage internal s;\\n\\n  // ========== Custom Errors ===========\\n\\n  error BaseConnextFacet__onlyOwner_notOwner();\\n  error BaseConnextFacet__onlyProposed_notProposedOwner();\\n  error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n  error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n  error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n  error BaseConnextFacet__whenNotPaused_paused();\\n  error BaseConnextFacet__nonReentrant_reentrantCall();\\n  error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n  error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n  error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @dev Prevents a contract from calling itself, directly or indirectly.\\n   * Calling a `nonReentrant` function from another `nonReentrant`\\n   * function is not supported. It is possible to prevent this from happening\\n   * by making the `nonReentrant` function external, and making it call a\\n   * `private` function that does the actual work.\\n   */\\n  modifier nonReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._status = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._status = Constants.NOT_ENTERED;\\n  }\\n\\n  modifier nonXCallReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n    // Any calls to nonReentrant after this point will fail\\n    s._xcallStatus = Constants.ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    s._xcallStatus = Constants.NOT_ENTERED;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and router role.\\n   */\\n  modifier onlyOwnerOrRouter() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n      revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and watcher role.\\n   */\\n  modifier onlyOwnerOrWatcher() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n      revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner and admin role.\\n   */\\n  modifier onlyOwnerOrAdmin() {\\n    if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n      revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if all functionality is paused\\n   */\\n  modifier whenNotPaused() {\\n    if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n    _;\\n  }\\n\\n  // ============ Internal functions ============\\n  /**\\n   * @notice Indicates if the router allowlist has been removed\\n   */\\n  function _isRouterAllowlistRemoved() internal view returns (bool) {\\n    return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n    address adopted = AssetLogic.getConfig(_key).adopted;\\n    if (adopted == address(0)) {\\n      revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n    }\\n    return adopted;\\n  }\\n\\n  /**\\n   * @notice Returns the adopted assets for given canonical information\\n   */\\n  function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n    address representation = AssetLogic.getConfig(_key).representation;\\n    // If this is address(0), then there is no mintable token for this asset on this\\n    // domain\\n    return representation;\\n  }\\n\\n  /**\\n   * @notice Calculates a transferId\\n   */\\n  function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_params));\\n  }\\n\\n  /**\\n   * @notice Internal utility function that combines\\n   *         `_origin` and `_nonce`.\\n   * @dev Both origin and nonce should be less than 2^32 - 1\\n   * @param _origin Domain of chain where the transfer originated\\n   * @param _nonce The unique identifier for the message from origin to destination\\n   * @return Returns (`_origin` << 32) & `_nonce`\\n   */\\n  function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n    return (uint64(_origin) << 32) | _nonce;\\n  }\\n\\n  function _getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address) {\\n    return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n  }\\n\\n  function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n    return AssetLogic.getCanonicalTokenId(_candidate, s);\\n  }\\n\\n  function _getLocalAndAdoptedToken(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain\\n  ) internal view returns (address, address) {\\n    address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n    address _adopted = _getAdoptedAsset(_key);\\n    return (_local, _adopted);\\n  }\\n\\n  function _isLocalOrigin(address _token) internal view returns (bool) {\\n    return AssetLogic.isLocalOrigin(_token, s);\\n  }\\n\\n  function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n    TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n    bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n    if (!AssetLogic.getConfig(_key).approval) {\\n      revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n    }\\n    return (_canonical, _key);\\n  }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {IDiamondLoupe} from \\\"../../interfaces/IDiamondLoupe.sol\\\";\\nimport {IDiamondCut} from \\\"../../interfaces/IDiamondCut.sol\\\";\\nimport {IERC165} from \\\"../../interfaces/IERC165.sol\\\";\\n\\nimport {LibDiamond} from \\\"../../libraries/LibDiamond.sol\\\";\\nimport {Constants} from \\\"../../libraries/Constants.sol\\\";\\n\\nimport {BaseConnextFacet} from \\\"../BaseConnextFacet.sol\\\";\\n\\nimport {IProposedOwnable} from \\\"../../../../shared/interfaces/IProposedOwnable.sol\\\";\\nimport {IConnectorManager} from \\\"../../../../messaging/interfaces/IConnectorManager.sol\\\";\\n\\n// It is expected that this contract is customized if you want to deploy your diamond\\n// with data from a deployment script. Use the init function to initialize state variables\\n// of your diamond. Add parameters to the init funciton if you need to.\\n\\ncontract DiamondInit is BaseConnextFacet {\\n  // ========== Custom Errors ===========\\n  error DiamondInit__init_alreadyInitialized();\\n  error DiamondInit__init_domainsDontMatch();\\n\\n  // ============ External ============\\n\\n  // You can add parameters to this function in order to pass in\\n  // data to set your own state variables\\n  // NOTE: not requiring a longer delay related to constant as we want to be able to test\\n  // with shorter governance delays\\n  function init(\\n    uint32 _domain,\\n    address _xAppConnectionManager,\\n    uint256 _acceptanceDelay,\\n    address _lpTokenTargetAddress\\n  ) external {\\n    // should not init twice\\n    if (s.initialized) {\\n      revert DiamondInit__init_alreadyInitialized();\\n    }\\n\\n    // ensure this is the owner\\n    LibDiamond.enforceIsContractOwner();\\n\\n    // ensure domains are the same\\n    IConnectorManager manager = IConnectorManager(_xAppConnectionManager);\\n    if (manager.localDomain() != _domain) {\\n      revert DiamondInit__init_domainsDontMatch();\\n    }\\n\\n    // update the initialized flag\\n    s.initialized = true;\\n\\n    // adding ERC165 data\\n    LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n    ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n    ds.supportedInterfaces[type(IDiamondCut).interfaceId] = true;\\n    ds.supportedInterfaces[type(IDiamondLoupe).interfaceId] = true;\\n    ds.supportedInterfaces[type(IProposedOwnable).interfaceId] = true;\\n    ds.acceptanceDelay = _acceptanceDelay;\\n\\n    // add your own state variables\\n    // EIP-2535 specifies that the `diamondCut` function takes two optional\\n    // arguments: address _init and bytes calldata _calldata\\n    // These arguments are used to execute an arbitrary function using delegatecall\\n    // in order to set state variables in the diamond during deployment or an upgrade\\n    // More info here: https://eips.ethereum.org/EIPS/eip-2535#diamond-interface\\n\\n    // __ReentrancyGuard_init_unchained\\n    s._status = Constants.NOT_ENTERED;\\n    s._xcallStatus = Constants.NOT_ENTERED;\\n\\n    // Connext\\n    s.domain = _domain;\\n    s.LIQUIDITY_FEE_NUMERATOR = Constants.INITIAL_LIQUIDITY_FEE_NUMERATOR;\\n    s.maxRoutersPerTransfer = Constants.INITIAL_MAX_ROUTERS;\\n    s.xAppConnectionManager = manager;\\n    s.lpTokenTargetAddress = _lpTokenTargetAddress;\\n  }\\n}\\n\",\"keccak256\":\"0x9cefcbf8a3cc401958cf56f63870c588fe8146c12e265761d6bbfaece0cb5439\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IDiamondLoupe.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n  /// These functions are expected to be called frequently\\n  /// by tools.\\n\\n  struct Facet {\\n    address facetAddress;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Gets all facet addresses and their four byte function selectors.\\n  /// @return facets_ Facet\\n  function facets() external view returns (Facet[] memory facets_);\\n\\n  /// @notice Gets all the function selectors supported by a specific facet.\\n  /// @param _facet The facet address.\\n  /// @return facetFunctionSelectors_\\n  function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n  /// @notice Get all the facet addresses used by a diamond.\\n  /// @return facetAddresses_\\n  function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n  /// @notice Gets the facet that supports the given selector.\\n  /// @dev If facet is not found return address(0).\\n  /// @param _functionSelector The function selector.\\n  /// @return facetAddress_ The facet address.\\n  function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\",\"keccak256\":\"0xc408c13dc42d9526b1f292bad3f3915efa15c2133f509d90a45422b5f6cf829c\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\ninterface IERC165 {\\n  /// @notice Query if a contract implements an interface\\n  /// @param interfaceId The interface identifier, as specified in ERC-165\\n  /// @dev Interface identification is specified in ERC-165. This function\\n  ///  uses less than 30,000 gas.\\n  /// @return `true` if the contract implements `interfaceID` and\\n  ///  `interfaceID` is not 0xffffffff, `false` otherwise\\n  function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xc92e38025a8eff9eafa17be136dd134e8b95060b7a258f840713d2a7d4b7fa85\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":13726,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"s","offset":0,"slot":"0","type":"t_struct(AppStorage)29536_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_contract(IERC20)10812)dyn_storage":{"base":"t_contract(IERC20)10812","encoding":"dynamic_array","label":"contract IERC20[]","numberOfBytes":"32"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IConnectorManager)47805":{"encoding":"inplace","label":"contract IConnectorManager","numberOfBytes":"20"},"t_contract(IERC20)10812":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_contract(LPToken)23179":{"encoding":"inplace","label":"contract LPToken","numberOfBytes":"20"},"t_enum(DestinationTransferStatus)29324":{"encoding":"inplace","label":"enum DestinationTransferStatus","numberOfBytes":"1"},"t_enum(Role)29319":{"encoding":"inplace","label":"enum Role","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_enum(Role)29319)":{"encoding":"mapping","key":"t_address","label":"mapping(address => enum Role)","numberOfBytes":"32","value":"t_enum(Role)29319"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(RouterConfig)29378_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RouterConfig)","numberOfBytes":"32","value":"t_struct(RouterConfig)29378_storage"},"t_mapping(t_address,t_struct(TokenId)37728_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct TokenId)","numberOfBytes":"32","value":"t_struct(TokenId)37728_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_bytes32,t_array(t_address)dyn_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => address[])","numberOfBytes":"32","value":"t_array(t_address)dyn_storage"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum DestinationTransferStatus)","numberOfBytes":"32","value":"t_enum(DestinationTransferStatus)29324"},"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => mapping(address => uint8))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint8)"},"t_mapping(t_bytes32,t_struct(Swap)30786_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct SwapUtils.Swap)","numberOfBytes":"32","value":"t_struct(Swap)30786_storage"},"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct TokenConfig)","numberOfBytes":"32","value":"t_struct(TokenConfig)29395_storage"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_bytes32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => bytes32)","numberOfBytes":"32","value":"t_bytes32"},"t_struct(AppStorage)29536_storage":{"encoding":"inplace","label":"struct AppStorage","members":[{"astId":29397,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":29399,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"LIQUIDITY_FEE_NUMERATOR","offset":0,"slot":"1","type":"t_uint256"},{"astId":29402,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"relayerFeeVault","offset":0,"slot":"2","type":"t_address"},{"astId":29405,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"nonce","offset":0,"slot":"3","type":"t_uint256"},{"astId":29408,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"domain","offset":0,"slot":"4","type":"t_uint32"},{"astId":29414,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"adoptedToCanonical","offset":0,"slot":"5","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29420,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"representationToCanonical","offset":0,"slot":"6","type":"t_mapping(t_address,t_struct(TokenId)37728_storage)"},{"astId":29426,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"tokenConfigs","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_struct(TokenConfig)29395_storage)"},{"astId":29432,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"transferStatus","offset":0,"slot":"8","type":"t_mapping(t_bytes32,t_enum(DestinationTransferStatus)29324)"},{"astId":29438,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"routedTransfers","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_array(t_address)dyn_storage)"},{"astId":29445,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"routerBalances","offset":0,"slot":"10","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":29450,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"approvedRelayers","offset":0,"slot":"11","type":"t_mapping(t_address,t_bool)"},{"astId":29453,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"maxRoutersPerTransfer","offset":0,"slot":"12","type":"t_uint256"},{"astId":29458,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"slippage","offset":0,"slot":"13","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29463,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"receiveLocalOverride","offset":0,"slot":"14","type":"t_mapping(t_bytes32,t_bool)"},{"astId":29468,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"remotes","offset":0,"slot":"15","type":"t_mapping(t_uint32,t_bytes32)"},{"astId":29470,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"_proposed","offset":0,"slot":"16","type":"t_address"},{"astId":29472,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"_proposedOwnershipTimestamp","offset":0,"slot":"17","type":"t_uint256"},{"astId":29474,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"_routerAllowlistRemoved","offset":0,"slot":"18","type":"t_bool"},{"astId":29476,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"_routerAllowlistTimestamp","offset":0,"slot":"19","type":"t_uint256"},{"astId":29482,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"roles","offset":0,"slot":"20","type":"t_mapping(t_address,t_enum(Role)29319)"},{"astId":29487,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"routerConfigs","offset":0,"slot":"21","type":"t_mapping(t_address,t_struct(RouterConfig)29378_storage)"},{"astId":29489,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"_status","offset":0,"slot":"22","type":"t_uint256"},{"astId":29491,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"_xcallStatus","offset":0,"slot":"23","type":"t_uint256"},{"astId":29497,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"swapStorages","offset":0,"slot":"24","type":"t_mapping(t_bytes32,t_struct(Swap)30786_storage)"},{"astId":29504,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"tokenIndexes","offset":0,"slot":"25","type":"t_mapping(t_bytes32,t_mapping(t_address,t_uint8))"},{"astId":29507,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"lpTokenTargetAddress","offset":0,"slot":"26","type":"t_address"},{"astId":29510,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"_paused","offset":20,"slot":"26","type":"t_bool"},{"astId":29513,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"aavePool","offset":0,"slot":"27","type":"t_address"},{"astId":29516,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"aavePortalFeeNumerator","offset":0,"slot":"28","type":"t_uint256"},{"astId":29521,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"portalDebt","offset":0,"slot":"29","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29526,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"portalFeeDebt","offset":0,"slot":"30","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":29531,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"approvedSequencers","offset":0,"slot":"31","type":"t_mapping(t_address,t_bool)"},{"astId":29535,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"xAppConnectionManager","offset":0,"slot":"32","type":"t_contract(IConnectorManager)47805"}],"numberOfBytes":"1056"},"t_struct(RouterConfig)29378_storage":{"encoding":"inplace","label":"struct RouterConfig","members":[{"astId":29367,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"approved","offset":0,"slot":"0","type":"t_bool"},{"astId":29369,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"portalApproved","offset":1,"slot":"0","type":"t_bool"},{"astId":29371,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"owner","offset":2,"slot":"0","type":"t_address"},{"astId":29373,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"recipient","offset":0,"slot":"1","type":"t_address"},{"astId":29375,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"proposed","offset":0,"slot":"2","type":"t_address"},{"astId":29377,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"proposedTimestamp","offset":0,"slot":"3","type":"t_uint256"}],"numberOfBytes":"128"},"t_struct(Swap)30786_storage":{"encoding":"inplace","label":"struct SwapUtils.Swap","members":[{"astId":30753,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"key","offset":0,"slot":"0","type":"t_bytes32"},{"astId":30755,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"initialA","offset":0,"slot":"1","type":"t_uint256"},{"astId":30757,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"futureA","offset":0,"slot":"2","type":"t_uint256"},{"astId":30759,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"initialATime","offset":0,"slot":"3","type":"t_uint256"},{"astId":30761,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"futureATime","offset":0,"slot":"4","type":"t_uint256"},{"astId":30763,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"swapFee","offset":0,"slot":"5","type":"t_uint256"},{"astId":30765,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"adminFee","offset":0,"slot":"6","type":"t_uint256"},{"astId":30768,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"lpToken","offset":0,"slot":"7","type":"t_contract(LPToken)23179"},{"astId":30772,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"pooledTokens","offset":0,"slot":"8","type":"t_array(t_contract(IERC20)10812)dyn_storage"},{"astId":30775,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"tokenPrecisionMultipliers","offset":0,"slot":"9","type":"t_array(t_uint256)dyn_storage"},{"astId":30778,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"balances","offset":0,"slot":"10","type":"t_array(t_uint256)dyn_storage"},{"astId":30781,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"adminFees","offset":0,"slot":"11","type":"t_array(t_uint256)dyn_storage"},{"astId":30783,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"disabled","offset":0,"slot":"12","type":"t_bool"},{"astId":30785,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"removeTime","offset":0,"slot":"13","type":"t_uint256"}],"numberOfBytes":"448"},"t_struct(TokenConfig)29395_storage":{"encoding":"inplace","label":"struct TokenConfig","members":[{"astId":29380,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"representation","offset":0,"slot":"0","type":"t_address"},{"astId":29382,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"representationDecimals","offset":20,"slot":"0","type":"t_uint8"},{"astId":29384,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"adopted","offset":0,"slot":"1","type":"t_address"},{"astId":29386,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"adoptedDecimals","offset":20,"slot":"1","type":"t_uint8"},{"astId":29388,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"adoptedToLocalExternalPools","offset":0,"slot":"2","type":"t_address"},{"astId":29390,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"approval","offset":20,"slot":"2","type":"t_bool"},{"astId":29392,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"cap","offset":0,"slot":"3","type":"t_uint256"},{"astId":29394,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"custodied","offset":0,"slot":"4","type":"t_uint256"}],"numberOfBytes":"160"},"t_struct(TokenId)37728_storage":{"encoding":"inplace","label":"struct TokenId","members":[{"astId":37725,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"domain","offset":0,"slot":"0","type":"t_uint32"},{"astId":37727,"contract":"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit","label":"id","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/core/connext/helpers/BridgeToken.sol":{"BridgeToken":{"abi":[{"inputs":[{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"name","type":"string"},{"indexed":true,"internalType":"string","name":"symbol","type":"string"}],"name":"UpdateDetails","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amnt","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amnt","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newName","type":"string"},{"internalType":"string","name":"_newSymbol","type":"string"}],"name":"setDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"See {IERC20Permit-DOMAIN_SEPARATOR}. This is ALWAYS calculated at runtime because the token name is mutable, not constant."},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"burn(address,uint256)":{"details":"Emits a {Transfer} event with `to` set to the zero address. Requirements: - `_from` cannot be the zero address. - `_from` must have at least `_amnt` tokens.","params":{"_amnt":"The amount of tokens to be destroyed","_from":"The address from which to destroy the tokens"}},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"decreaseAllowance(address,uint256)":{"details":"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address. - `_spender` must have allowance for the caller of at least `_subtractedValue`."},"increaseAllowance(address,uint256)":{"details":"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address."},"mint(address,uint256)":{"details":"Emits a {Transfer} event with `from` set to the zero address. Requirements: - `to` cannot be the zero address.","params":{"_amnt":"The amount of tokens to be minted","_to":"The destination address"}},"name()":{"details":"Returns the name of the token."},"nonces(address)":{"details":"See {IERC20Permit-nonces}."},"owner()":{"details":"Returns the address of the current owner."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"See {IERC20Permit-permit}.","params":{"_deadline":"The timestamp before which the signature must be submitted","_owner":"The account setting approval & signing the message","_r":"ECDSA signature r","_s":"ECDSA signature s","_spender":"The account receiving approval to spend owner's tokens","_v":"ECDSA signature v","_value":"The amount to set approval for"}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setDetails(string,string)":{"params":{"_newName":"The new name","_newSymbol":"The new symbol"}},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `_sender` and `recipient` cannot be the zero address. - `_sender` must have a balance of at least `amount`. - the caller must have allowance for ``_sender``'s tokens of at least `amount`."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_22315":{"entryPoint":null,"id":22315,"parameterSlots":3,"returnSlots":0},"@_23312":{"entryPoint":null,"id":23312,"parameterSlots":4,"returnSlots":0},"@_9567":{"entryPoint":null,"id":9567,"parameterSlots":0,"returnSlots":0},"@_buildDomainSeparator_24022":{"entryPoint":null,"id":24022,"parameterSlots":3,"returnSlots":1},"@_msgSender_11496":{"entryPoint":300,"id":11496,"parameterSlots":0,"returnSlots":1},"@_transferOwnership_9655":{"entryPoint":304,"id":9655,"parameterSlots":1,"returnSlots":0},"abi_decode_string_fromMemory":{"entryPoint":406,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8t_string_memory_ptrt_string_memory_ptr_fromMemory":{"entryPoint":581,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"array_dataslot_string_storage":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"clean_up_bytearray_end_slots_string_storage":{"entryPoint":773,"id":null,"parameterSlots":3,"returnSlots":0},"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage":{"entryPoint":856,"id":null,"parameterSlots":2,"returnSlots":0},"extract_byte_array_length":{"entryPoint":713,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x41":{"entryPoint":384,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4788:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:181"},"nodeType":"YulFunctionCall","src":"66:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:181"},"nodeType":"YulFunctionCall","src":"56:31:181"},"nodeType":"YulExpressionStatement","src":"56:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:181"},"nodeType":"YulFunctionCall","src":"96:15:181"},"nodeType":"YulExpressionStatement","src":"96:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:181"},"nodeType":"YulFunctionCall","src":"120:15:181"},"nodeType":"YulExpressionStatement","src":"120:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:181"},{"body":{"nodeType":"YulBlock","src":"210:776:181","statements":[{"body":{"nodeType":"YulBlock","src":"259:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"268:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"271:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"261:6:181"},"nodeType":"YulFunctionCall","src":"261:12:181"},"nodeType":"YulExpressionStatement","src":"261:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"238:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"246:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"234:3:181"},"nodeType":"YulFunctionCall","src":"234:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"253:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"230:3:181"},"nodeType":"YulFunctionCall","src":"230:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"223:6:181"},"nodeType":"YulFunctionCall","src":"223:35:181"},"nodeType":"YulIf","src":"220:55:181"},{"nodeType":"YulVariableDeclaration","src":"284:23:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"300:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"294:5:181"},"nodeType":"YulFunctionCall","src":"294:13:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"288:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"316:28:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"334:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"338:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"330:3:181"},"nodeType":"YulFunctionCall","src":"330:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"342:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"326:3:181"},"nodeType":"YulFunctionCall","src":"326:18:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"320:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"367:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"369:16:181"},"nodeType":"YulFunctionCall","src":"369:18:181"},"nodeType":"YulExpressionStatement","src":"369:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"359:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"363:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"356:2:181"},"nodeType":"YulFunctionCall","src":"356:10:181"},"nodeType":"YulIf","src":"353:36:181"},{"nodeType":"YulVariableDeclaration","src":"398:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"412:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"408:3:181"},"nodeType":"YulFunctionCall","src":"408:7:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"402:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"424:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"444:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"438:5:181"},"nodeType":"YulFunctionCall","src":"438:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"428:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"456:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"478:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"502:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"506:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"498:3:181"},"nodeType":"YulFunctionCall","src":"498:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"513:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"494:3:181"},"nodeType":"YulFunctionCall","src":"494:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"518:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"490:3:181"},"nodeType":"YulFunctionCall","src":"490:31:181"},{"name":"_3","nodeType":"YulIdentifier","src":"523:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"486:3:181"},"nodeType":"YulFunctionCall","src":"486:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"474:3:181"},"nodeType":"YulFunctionCall","src":"474:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"460:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"586:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"588:16:181"},"nodeType":"YulFunctionCall","src":"588:18:181"},"nodeType":"YulExpressionStatement","src":"588:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"545:10:181"},{"name":"_2","nodeType":"YulIdentifier","src":"557:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"542:2:181"},"nodeType":"YulFunctionCall","src":"542:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"565:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"577:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"562:2:181"},"nodeType":"YulFunctionCall","src":"562:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"539:2:181"},"nodeType":"YulFunctionCall","src":"539:46:181"},"nodeType":"YulIf","src":"536:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"624:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"628:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"617:6:181"},"nodeType":"YulFunctionCall","src":"617:22:181"},"nodeType":"YulExpressionStatement","src":"617:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"655:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"663:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"648:6:181"},"nodeType":"YulFunctionCall","src":"648:18:181"},"nodeType":"YulExpressionStatement","src":"648:18:181"},{"nodeType":"YulVariableDeclaration","src":"675:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"685:4:181","type":"","value":"0x20"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"679:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"735:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"744:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"747:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"737:6:181"},"nodeType":"YulFunctionCall","src":"737:12:181"},"nodeType":"YulExpressionStatement","src":"737:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"712:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"720:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"708:3:181"},"nodeType":"YulFunctionCall","src":"708:15:181"},{"name":"_4","nodeType":"YulIdentifier","src":"725:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"704:3:181"},"nodeType":"YulFunctionCall","src":"704:24:181"},{"name":"end","nodeType":"YulIdentifier","src":"730:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"701:2:181"},"nodeType":"YulFunctionCall","src":"701:33:181"},"nodeType":"YulIf","src":"698:53:181"},{"nodeType":"YulVariableDeclaration","src":"760:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"769:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"764:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"825:87:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"854:6:181"},{"name":"i","nodeType":"YulIdentifier","src":"862:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"850:3:181"},"nodeType":"YulFunctionCall","src":"850:14:181"},{"name":"_4","nodeType":"YulIdentifier","src":"866:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"846:3:181"},"nodeType":"YulFunctionCall","src":"846:23:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"885:6:181"},{"name":"i","nodeType":"YulIdentifier","src":"893:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"881:3:181"},"nodeType":"YulFunctionCall","src":"881:14:181"},{"name":"_4","nodeType":"YulIdentifier","src":"897:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"877:3:181"},"nodeType":"YulFunctionCall","src":"877:23:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"871:5:181"},"nodeType":"YulFunctionCall","src":"871:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"839:6:181"},"nodeType":"YulFunctionCall","src":"839:63:181"},"nodeType":"YulExpressionStatement","src":"839:63:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"790:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"793:2:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"787:2:181"},"nodeType":"YulFunctionCall","src":"787:9:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"797:19:181","statements":[{"nodeType":"YulAssignment","src":"799:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"808:1:181"},{"name":"_4","nodeType":"YulIdentifier","src":"811:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"804:3:181"},"nodeType":"YulFunctionCall","src":"804:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"799:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"783:3:181","statements":[]},"src":"779:133:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"936:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"944:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"932:3:181"},"nodeType":"YulFunctionCall","src":"932:15:181"},{"name":"_4","nodeType":"YulIdentifier","src":"949:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"928:3:181"},"nodeType":"YulFunctionCall","src":"928:24:181"},{"kind":"number","nodeType":"YulLiteral","src":"954:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"921:6:181"},"nodeType":"YulFunctionCall","src":"921:35:181"},"nodeType":"YulExpressionStatement","src":"921:35:181"},{"nodeType":"YulAssignment","src":"965:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"974:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"965:5:181"}]}]},"name":"abi_decode_string_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"184:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"192:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"200:5:181","type":""}],"src":"146:840:181"},{"body":{"nodeType":"YulBlock","src":"1124:579:181","statements":[{"body":{"nodeType":"YulBlock","src":"1170:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1179:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1182:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1172:6:181"},"nodeType":"YulFunctionCall","src":"1172:12:181"},"nodeType":"YulExpressionStatement","src":"1172:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1145:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1154:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1141:3:181"},"nodeType":"YulFunctionCall","src":"1141:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1166:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1137:3:181"},"nodeType":"YulFunctionCall","src":"1137:32:181"},"nodeType":"YulIf","src":"1134:52:181"},{"nodeType":"YulVariableDeclaration","src":"1195:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1214:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1208:5:181"},"nodeType":"YulFunctionCall","src":"1208:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1199:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1272:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1281:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1284:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1274:6:181"},"nodeType":"YulFunctionCall","src":"1274:12:181"},"nodeType":"YulExpressionStatement","src":"1274:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1246:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1257:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"1264:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1253:3:181"},"nodeType":"YulFunctionCall","src":"1253:16:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1243:2:181"},"nodeType":"YulFunctionCall","src":"1243:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1236:6:181"},"nodeType":"YulFunctionCall","src":"1236:35:181"},"nodeType":"YulIf","src":"1233:55:181"},{"nodeType":"YulAssignment","src":"1297:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1307:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1297:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1321:39:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1345:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1356:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1341:3:181"},"nodeType":"YulFunctionCall","src":"1341:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1335:5:181"},"nodeType":"YulFunctionCall","src":"1335:25:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1325:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1369:28:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1387:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"1391:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1383:3:181"},"nodeType":"YulFunctionCall","src":"1383:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"1395:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1379:3:181"},"nodeType":"YulFunctionCall","src":"1379:18:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1373:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1424:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1433:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1436:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1426:6:181"},"nodeType":"YulFunctionCall","src":"1426:12:181"},"nodeType":"YulExpressionStatement","src":"1426:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1412:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1420:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1409:2:181"},"nodeType":"YulFunctionCall","src":"1409:14:181"},"nodeType":"YulIf","src":"1406:34:181"},{"nodeType":"YulAssignment","src":"1449:71:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1492:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1503:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1488:3:181"},"nodeType":"YulFunctionCall","src":"1488:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1512:7:181"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1459:28:181"},"nodeType":"YulFunctionCall","src":"1459:61:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1449:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1529:41:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1555:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1566:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1551:3:181"},"nodeType":"YulFunctionCall","src":"1551:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1545:5:181"},"nodeType":"YulFunctionCall","src":"1545:25:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"1533:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1599:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1608:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1611:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1601:6:181"},"nodeType":"YulFunctionCall","src":"1601:12:181"},"nodeType":"YulExpressionStatement","src":"1601:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"1585:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1595:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1582:2:181"},"nodeType":"YulFunctionCall","src":"1582:16:181"},"nodeType":"YulIf","src":"1579:36:181"},{"nodeType":"YulAssignment","src":"1624:73:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1667:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"1678:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1663:3:181"},"nodeType":"YulFunctionCall","src":"1663:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1689:7:181"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1634:28:181"},"nodeType":"YulFunctionCall","src":"1634:63:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1624:6:181"}]}]},"name":"abi_decode_tuple_t_uint8t_string_memory_ptrt_string_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1074:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1085:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1097:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1105:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1113:6:181","type":""}],"src":"991:712:181"},{"body":{"nodeType":"YulBlock","src":"1763:325:181","statements":[{"nodeType":"YulAssignment","src":"1773:22:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1787:1:181","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"1790:4:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1783:3:181"},"nodeType":"YulFunctionCall","src":"1783:12:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1773:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1804:38:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1834:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"1840:1:181","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1830:3:181"},"nodeType":"YulFunctionCall","src":"1830:12:181"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"1808:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1881:31:181","statements":[{"nodeType":"YulAssignment","src":"1883:27:181","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1897:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1905:4:181","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1893:3:181"},"nodeType":"YulFunctionCall","src":"1893:17:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1883:6:181"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"1861:18:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1854:6:181"},"nodeType":"YulFunctionCall","src":"1854:26:181"},"nodeType":"YulIf","src":"1851:61:181"},{"body":{"nodeType":"YulBlock","src":"1971:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1992:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1999:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2004:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1995:3:181"},"nodeType":"YulFunctionCall","src":"1995:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1985:6:181"},"nodeType":"YulFunctionCall","src":"1985:31:181"},"nodeType":"YulExpressionStatement","src":"1985:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2036:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2039:4:181","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2029:6:181"},"nodeType":"YulFunctionCall","src":"2029:15:181"},"nodeType":"YulExpressionStatement","src":"2029:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2064:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2067:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2057:6:181"},"nodeType":"YulFunctionCall","src":"2057:15:181"},"nodeType":"YulExpressionStatement","src":"2057:15:181"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"1927:18:181"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1950:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1958:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1947:2:181"},"nodeType":"YulFunctionCall","src":"1947:14:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1924:2:181"},"nodeType":"YulFunctionCall","src":"1924:38:181"},"nodeType":"YulIf","src":"1921:161:181"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"1743:4:181","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"1752:6:181","type":""}],"src":"1708:380:181"},{"body":{"nodeType":"YulBlock","src":"2149:65:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2166:1:181","type":"","value":"0"},{"name":"ptr","nodeType":"YulIdentifier","src":"2169:3:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2159:6:181"},"nodeType":"YulFunctionCall","src":"2159:14:181"},"nodeType":"YulExpressionStatement","src":"2159:14:181"},{"nodeType":"YulAssignment","src":"2182:26:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2200:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2203:4:181","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"2190:9:181"},"nodeType":"YulFunctionCall","src":"2190:18:181"},"variableNames":[{"name":"data","nodeType":"YulIdentifier","src":"2182:4:181"}]}]},"name":"array_dataslot_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nodeType":"YulTypedName","src":"2132:3:181","type":""}],"returnVariables":[{"name":"data","nodeType":"YulTypedName","src":"2140:4:181","type":""}],"src":"2093:121:181"},{"body":{"nodeType":"YulBlock","src":"2300:464:181","statements":[{"body":{"nodeType":"YulBlock","src":"2333:425:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2347:11:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2357:1:181","type":"","value":"0"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2351:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2378:2:181"},{"name":"array","nodeType":"YulIdentifier","src":"2382:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2371:6:181"},"nodeType":"YulFunctionCall","src":"2371:17:181"},"nodeType":"YulExpressionStatement","src":"2371:17:181"},{"nodeType":"YulVariableDeclaration","src":"2401:31:181","value":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2423:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"2427:4:181","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"2413:9:181"},"nodeType":"YulFunctionCall","src":"2413:19:181"},"variables":[{"name":"data","nodeType":"YulTypedName","src":"2405:4:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2445:57:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"2468:4:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2478:1:181","type":"","value":"5"},{"arguments":[{"name":"startIndex","nodeType":"YulIdentifier","src":"2485:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"2497:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2481:3:181"},"nodeType":"YulFunctionCall","src":"2481:19:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2474:3:181"},"nodeType":"YulFunctionCall","src":"2474:27:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2464:3:181"},"nodeType":"YulFunctionCall","src":"2464:38:181"},"variables":[{"name":"deleteStart","nodeType":"YulTypedName","src":"2449:11:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2539:23:181","statements":[{"nodeType":"YulAssignment","src":"2541:19:181","value":{"name":"data","nodeType":"YulIdentifier","src":"2556:4:181"},"variableNames":[{"name":"deleteStart","nodeType":"YulIdentifier","src":"2541:11:181"}]}]},"condition":{"arguments":[{"name":"startIndex","nodeType":"YulIdentifier","src":"2521:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"2533:4:181","type":"","value":"0x20"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2518:2:181"},"nodeType":"YulFunctionCall","src":"2518:20:181"},"nodeType":"YulIf","src":"2515:47:181"},{"nodeType":"YulVariableDeclaration","src":"2575:41:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"2589:4:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2599:1:181","type":"","value":"5"},{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"2606:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"2611:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2602:3:181"},"nodeType":"YulFunctionCall","src":"2602:12:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2595:3:181"},"nodeType":"YulFunctionCall","src":"2595:20:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2585:3:181"},"nodeType":"YulFunctionCall","src":"2585:31:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2579:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2629:24:181","value":{"name":"deleteStart","nodeType":"YulIdentifier","src":"2642:11:181"},"variables":[{"name":"start","nodeType":"YulTypedName","src":"2633:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2727:21:181","statements":[{"expression":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"2736:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2743:2:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"2729:6:181"},"nodeType":"YulFunctionCall","src":"2729:17:181"},"nodeType":"YulExpressionStatement","src":"2729:17:181"}]},"condition":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"2677:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"2684:2:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2674:2:181"},"nodeType":"YulFunctionCall","src":"2674:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2688:26:181","statements":[{"nodeType":"YulAssignment","src":"2690:22:181","value":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"2703:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"2710:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2699:3:181"},"nodeType":"YulFunctionCall","src":"2699:13:181"},"variableNames":[{"name":"start","nodeType":"YulIdentifier","src":"2690:5:181"}]}]},"pre":{"nodeType":"YulBlock","src":"2670:3:181","statements":[]},"src":"2666:82:181"}]},"condition":{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"2316:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"2321:2:181","type":"","value":"31"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2313:2:181"},"nodeType":"YulFunctionCall","src":"2313:11:181"},"nodeType":"YulIf","src":"2310:448:181"}]},"name":"clean_up_bytearray_end_slots_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nodeType":"YulTypedName","src":"2272:5:181","type":""},{"name":"len","nodeType":"YulTypedName","src":"2279:3:181","type":""},{"name":"startIndex","nodeType":"YulTypedName","src":"2284:10:181","type":""}],"src":"2219:545:181"},{"body":{"nodeType":"YulBlock","src":"2854:81:181","statements":[{"nodeType":"YulAssignment","src":"2864:65:181","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"2879:4:181"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2897:1:181","type":"","value":"3"},{"name":"len","nodeType":"YulIdentifier","src":"2900:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2893:3:181"},"nodeType":"YulFunctionCall","src":"2893:11:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2910:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2906:3:181"},"nodeType":"YulFunctionCall","src":"2906:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2889:3:181"},"nodeType":"YulFunctionCall","src":"2889:24:181"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2885:3:181"},"nodeType":"YulFunctionCall","src":"2885:29:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2875:3:181"},"nodeType":"YulFunctionCall","src":"2875:40:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2921:1:181","type":"","value":"1"},{"name":"len","nodeType":"YulIdentifier","src":"2924:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2917:3:181"},"nodeType":"YulFunctionCall","src":"2917:11:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2872:2:181"},"nodeType":"YulFunctionCall","src":"2872:57:181"},"variableNames":[{"name":"used","nodeType":"YulIdentifier","src":"2864:4:181"}]}]},"name":"extract_used_part_and_set_length_of_short_byte_array","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"2831:4:181","type":""},{"name":"len","nodeType":"YulTypedName","src":"2837:3:181","type":""}],"returnVariables":[{"name":"used","nodeType":"YulTypedName","src":"2845:4:181","type":""}],"src":"2769:166:181"},{"body":{"nodeType":"YulBlock","src":"3036:1256:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3046:24:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3066:3:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3060:5:181"},"nodeType":"YulFunctionCall","src":"3060:10:181"},"variables":[{"name":"newLen","nodeType":"YulTypedName","src":"3050:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3113:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"3115:16:181"},"nodeType":"YulFunctionCall","src":"3115:18:181"},"nodeType":"YulExpressionStatement","src":"3115:18:181"}]},"condition":{"arguments":[{"name":"newLen","nodeType":"YulIdentifier","src":"3085:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3101:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"3105:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3097:3:181"},"nodeType":"YulFunctionCall","src":"3097:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"3109:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3093:3:181"},"nodeType":"YulFunctionCall","src":"3093:18:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3082:2:181"},"nodeType":"YulFunctionCall","src":"3082:30:181"},"nodeType":"YulIf","src":"3079:56:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"3188:4:181"},{"arguments":[{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"3226:4:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"3220:5:181"},"nodeType":"YulFunctionCall","src":"3220:11:181"}],"functionName":{"name":"extract_byte_array_length","nodeType":"YulIdentifier","src":"3194:25:181"},"nodeType":"YulFunctionCall","src":"3194:38:181"},{"name":"newLen","nodeType":"YulIdentifier","src":"3234:6:181"}],"functionName":{"name":"clean_up_bytearray_end_slots_string_storage","nodeType":"YulIdentifier","src":"3144:43:181"},"nodeType":"YulFunctionCall","src":"3144:97:181"},"nodeType":"YulExpressionStatement","src":"3144:97:181"},{"nodeType":"YulVariableDeclaration","src":"3250:18:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3267:1:181","type":"","value":"0"},"variables":[{"name":"srcOffset","nodeType":"YulTypedName","src":"3254:9:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3277:23:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3296:4:181","type":"","value":"0x20"},"variables":[{"name":"srcOffset_1","nodeType":"YulTypedName","src":"3281:11:181","type":""}]},{"nodeType":"YulAssignment","src":"3309:24:181","value":{"name":"srcOffset_1","nodeType":"YulIdentifier","src":"3322:11:181"},"variableNames":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"3309:9:181"}]},{"cases":[{"body":{"nodeType":"YulBlock","src":"3379:656:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3393:35:181","value":{"arguments":[{"name":"newLen","nodeType":"YulIdentifier","src":"3412:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3424:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3420:3:181"},"nodeType":"YulFunctionCall","src":"3420:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3408:3:181"},"nodeType":"YulFunctionCall","src":"3408:20:181"},"variables":[{"name":"loopEnd","nodeType":"YulTypedName","src":"3397:7:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3441:49:181","value":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"3485:4:181"}],"functionName":{"name":"array_dataslot_string_storage","nodeType":"YulIdentifier","src":"3455:29:181"},"nodeType":"YulFunctionCall","src":"3455:35:181"},"variables":[{"name":"dstPtr","nodeType":"YulTypedName","src":"3445:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3503:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3512:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"3507:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3590:172:181","statements":[{"expression":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"3615:6:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3633:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"3638:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3629:3:181"},"nodeType":"YulFunctionCall","src":"3629:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3623:5:181"},"nodeType":"YulFunctionCall","src":"3623:26:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"3608:6:181"},"nodeType":"YulFunctionCall","src":"3608:42:181"},"nodeType":"YulExpressionStatement","src":"3608:42:181"},{"nodeType":"YulAssignment","src":"3667:24:181","value":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"3681:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3689:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3677:3:181"},"nodeType":"YulFunctionCall","src":"3677:14:181"},"variableNames":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"3667:6:181"}]},{"nodeType":"YulAssignment","src":"3708:40:181","value":{"arguments":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"3725:9:181"},{"name":"srcOffset_1","nodeType":"YulIdentifier","src":"3736:11:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3721:3:181"},"nodeType":"YulFunctionCall","src":"3721:27:181"},"variableNames":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"3708:9:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3537:1:181"},{"name":"loopEnd","nodeType":"YulIdentifier","src":"3540:7:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3534:2:181"},"nodeType":"YulFunctionCall","src":"3534:14:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3549:28:181","statements":[{"nodeType":"YulAssignment","src":"3551:24:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3560:1:181"},{"name":"srcOffset_1","nodeType":"YulIdentifier","src":"3563:11:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3556:3:181"},"nodeType":"YulFunctionCall","src":"3556:19:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"3551:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"3530:3:181","statements":[]},"src":"3526:236:181"},{"body":{"nodeType":"YulBlock","src":"3810:166:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3828:43:181","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3855:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"3860:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3851:3:181"},"nodeType":"YulFunctionCall","src":"3851:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3845:5:181"},"nodeType":"YulFunctionCall","src":"3845:26:181"},"variables":[{"name":"lastValue","nodeType":"YulTypedName","src":"3832:9:181","type":""}]},{"expression":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"3895:6:181"},{"arguments":[{"name":"lastValue","nodeType":"YulIdentifier","src":"3907:9:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3934:1:181","type":"","value":"3"},{"name":"newLen","nodeType":"YulIdentifier","src":"3937:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3930:3:181"},"nodeType":"YulFunctionCall","src":"3930:14:181"},{"kind":"number","nodeType":"YulLiteral","src":"3946:3:181","type":"","value":"248"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3926:3:181"},"nodeType":"YulFunctionCall","src":"3926:24:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3956:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3952:3:181"},"nodeType":"YulFunctionCall","src":"3952:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3922:3:181"},"nodeType":"YulFunctionCall","src":"3922:37:181"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3918:3:181"},"nodeType":"YulFunctionCall","src":"3918:42:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3903:3:181"},"nodeType":"YulFunctionCall","src":"3903:58:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"3888:6:181"},"nodeType":"YulFunctionCall","src":"3888:74:181"},"nodeType":"YulExpressionStatement","src":"3888:74:181"}]},"condition":{"arguments":[{"name":"loopEnd","nodeType":"YulIdentifier","src":"3781:7:181"},{"name":"newLen","nodeType":"YulIdentifier","src":"3790:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3778:2:181"},"nodeType":"YulFunctionCall","src":"3778:19:181"},"nodeType":"YulIf","src":"3775:201:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"3996:4:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4010:1:181","type":"","value":"1"},{"name":"newLen","nodeType":"YulIdentifier","src":"4013:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4006:3:181"},"nodeType":"YulFunctionCall","src":"4006:14:181"},{"kind":"number","nodeType":"YulLiteral","src":"4022:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4002:3:181"},"nodeType":"YulFunctionCall","src":"4002:22:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"3989:6:181"},"nodeType":"YulFunctionCall","src":"3989:36:181"},"nodeType":"YulExpressionStatement","src":"3989:36:181"}]},"nodeType":"YulCase","src":"3372:663:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3377:1:181","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"4052:234:181","statements":[{"nodeType":"YulVariableDeclaration","src":"4066:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4079:1:181","type":"","value":"0"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4070:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4115:67:181","statements":[{"nodeType":"YulAssignment","src":"4133:35:181","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4152:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"4157:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4148:3:181"},"nodeType":"YulFunctionCall","src":"4148:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4142:5:181"},"nodeType":"YulFunctionCall","src":"4142:26:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"4133:5:181"}]}]},"condition":{"name":"newLen","nodeType":"YulIdentifier","src":"4096:6:181"},"nodeType":"YulIf","src":"4093:89:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"4202:4:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4261:5:181"},{"name":"newLen","nodeType":"YulIdentifier","src":"4268:6:181"}],"functionName":{"name":"extract_used_part_and_set_length_of_short_byte_array","nodeType":"YulIdentifier","src":"4208:52:181"},"nodeType":"YulFunctionCall","src":"4208:67:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"4195:6:181"},"nodeType":"YulFunctionCall","src":"4195:81:181"},"nodeType":"YulExpressionStatement","src":"4195:81:181"}]},"nodeType":"YulCase","src":"4044:242:181","value":"default"}],"expression":{"arguments":[{"name":"newLen","nodeType":"YulIdentifier","src":"3352:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3360:2:181","type":"","value":"31"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3349:2:181"},"nodeType":"YulFunctionCall","src":"3349:14:181"},"nodeType":"YulSwitch","src":"3342:944:181"}]},"name":"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nodeType":"YulTypedName","src":"3021:4:181","type":""},{"name":"src","nodeType":"YulTypedName","src":"3027:3:181","type":""}],"src":"2940:1352:181"},{"body":{"nodeType":"YulBlock","src":"4510:276:181","statements":[{"nodeType":"YulAssignment","src":"4520:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4532:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4543:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4528:3:181"},"nodeType":"YulFunctionCall","src":"4528:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4520:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4563:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"4574:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4556:6:181"},"nodeType":"YulFunctionCall","src":"4556:25:181"},"nodeType":"YulExpressionStatement","src":"4556:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4601:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4612:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4597:3:181"},"nodeType":"YulFunctionCall","src":"4597:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"4617:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4590:6:181"},"nodeType":"YulFunctionCall","src":"4590:34:181"},"nodeType":"YulExpressionStatement","src":"4590:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4644:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4655:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4640:3:181"},"nodeType":"YulFunctionCall","src":"4640:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"4660:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4633:6:181"},"nodeType":"YulFunctionCall","src":"4633:34:181"},"nodeType":"YulExpressionStatement","src":"4633:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4687:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4698:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4683:3:181"},"nodeType":"YulFunctionCall","src":"4683:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"4703:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4676:6:181"},"nodeType":"YulFunctionCall","src":"4676:34:181"},"nodeType":"YulExpressionStatement","src":"4676:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4730:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4741:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4726:3:181"},"nodeType":"YulFunctionCall","src":"4726:19:181"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"4751:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4767:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4772:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4763:3:181"},"nodeType":"YulFunctionCall","src":"4763:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4776:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4759:3:181"},"nodeType":"YulFunctionCall","src":"4759:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4747:3:181"},"nodeType":"YulFunctionCall","src":"4747:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4719:6:181"},"nodeType":"YulFunctionCall","src":"4719:61:181"},"nodeType":"YulExpressionStatement","src":"4719:61:181"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4447:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"4458:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4466:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4474:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4482:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4490:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4501:4:181","type":""}],"src":"4297:489:181"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := sub(shl(64, 1), 1)\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        let _4 := 0x20\n        if gt(add(add(offset, _1), _4), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _1) { i := add(i, _4) }\n        {\n            mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n        }\n        mstore(add(add(memPtr, _1), _4), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_uint8t_string_memory_ptrt_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value0 := value\n        let offset := mload(add(headStart, 32))\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value1 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 64))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value2 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function array_dataslot_string_storage(ptr) -> data\n    {\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n    }\n    function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n    {\n        if gt(len, 31)\n        {\n            let _1 := 0\n            mstore(_1, array)\n            let data := keccak256(_1, 0x20)\n            let deleteStart := add(data, shr(5, add(startIndex, 31)))\n            if lt(startIndex, 0x20) { deleteStart := data }\n            let _2 := add(data, shr(5, add(len, 31)))\n            let start := deleteStart\n            for { } lt(start, _2) { start := add(start, 1) }\n            { sstore(start, _1) }\n        }\n    }\n    function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n    {\n        used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n    }\n    function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n    {\n        let newLen := mload(src)\n        if gt(newLen, sub(shl(64, 1), 1)) { panic_error_0x41() }\n        clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n        let srcOffset := 0\n        let srcOffset_1 := 0x20\n        srcOffset := srcOffset_1\n        switch gt(newLen, 31)\n        case 1 {\n            let loopEnd := and(newLen, not(31))\n            let dstPtr := array_dataslot_string_storage(slot)\n            let i := 0\n            for { } lt(i, loopEnd) { i := add(i, srcOffset_1) }\n            {\n                sstore(dstPtr, mload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, srcOffset_1)\n            }\n            if lt(loopEnd, newLen)\n            {\n                let lastValue := mload(add(src, srcOffset))\n                sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n            }\n            sstore(slot, add(shl(1, newLen), 1))\n        }\n        default {\n            let value := 0\n            if newLen\n            {\n                value := mload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n        }\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e06040523480156200001157600080fd5b50604051620019d9380380620019d9833981016040819052620000349162000245565b828282604051806040016040528060018152602001603160f81b8152506200006b620000656200012c60201b60201c565b62000130565b600462000079848262000358565b50600562000088838262000358565b506006805460ff191660ff9590951694909417909355508051602091820120825192820192909220600983905560c0818152466080818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801528082019790975260608701949094528501523060a08086018290528351808703820181529590920190925283519390920192909220600855525062000424915050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001a857600080fd5b81516001600160401b0380821115620001c557620001c562000180565b604051601f8301601f19908116603f01168101908282118183101715620001f057620001f062000180565b816040528381526020925086838588010111156200020d57600080fd5b600091505b8382101562000231578582018301518183018401529082019062000212565b600093810190920192909252949350505050565b6000806000606084860312156200025b57600080fd5b835160ff811681146200026d57600080fd5b60208501519093506001600160401b03808211156200028b57600080fd5b620002998783880162000196565b93506040860151915080821115620002b057600080fd5b50620002bf8682870162000196565b9150509250925092565b600181811c90821680620002de57607f821691505b602082108103620002ff57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200035357600081815260208120601f850160051c810160208610156200032e5750805b601f850160051c820191505b818110156200034f578281556001016200033a565b5050505b505050565b81516001600160401b0381111562000374576200037462000180565b6200038c81620003858454620002c9565b8462000305565b602080601f831160018114620003c45760008415620003ab5750858301515b600019600386901b1c1916600185901b1785556200034f565b600085815260208120601f198616915b82811015620003f557888601518255948401946001909101908401620003d4565b5085821015620004145787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05161157e6200045b600039600081816105400152610ba601526000610b2501526000610b4f015261157e6000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637ecebe00116100ad578063a9059cbb11610071578063a9059cbb14610269578063b7b090ee1461027c578063d505accf1461028f578063dd62ed3e146102a2578063f2fde38b146102b557600080fd5b80637ecebe001461020d5780638da5cb5b1461022057806395d89b411461023b5780639dc29fac14610243578063a457c2d71461025657600080fd5b80633644e515116100f45780633644e515146101ac57806339509351146101b457806340c10f19146101c757806370a08231146101dc578063715018a61461020557600080fd5b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017257806323b872dd14610184578063313ce56714610197575b600080fd5b6101396102c8565b604051610146919061115b565b60405180910390f35b61016261015d3660046111c5565b61035a565b6040519015158152602001610146565b6003545b604051908152602001610146565b6101626101923660046111ef565b610371565b60065460405160ff9091168152602001610146565b610176610393565b6101626101c23660046111c5565b6103a2565b6101da6101d53660046111c5565b6103de565b005b6101766101ea36600461122b565b6001600160a01b031660009081526001602052604090205490565b6101da6103f4565b61017661021b36600461122b565b610408565b6000546040516001600160a01b039091168152602001610146565b610139610426565b6101da6102513660046111c5565b610435565b6101626102643660046111c5565b610447565b6101626102773660046111c5565b6104c6565b6101da61028a366004611296565b6104d3565b6101da61029d366004611302565b6105c6565b6101766102b0366004611375565b61072a565b6101da6102c336600461122b565b610755565b6060600480546102d7906113a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610303906113a8565b80156103505780601f1061032557610100808354040283529160200191610350565b820191906000526020600020905b81548152906001019060200180831161033357829003601f168201915b5050505050905090565b60006103673384846107ce565b5060015b92915050565b600061037e8433846108f3565b61038984848461096d565b5060019392505050565b600061039d610b18565b905090565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916103679185906103d99086906113dc565b6107ce565b6103e6610bca565b6103f08282610c24565b5050565b6103fc610bca565b6104066000610ce5565b565b6001600160a01b03811660009081526007602052604081205461036b565b6060600580546102d7906113a8565b61043d610bca565b6103f08282610d35565b600080610454338561072a565b9050828110156104b95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61038933858584036107ce565b600061036733848461096d565b6104db610bca565b60046104e8848683611461565b5060056104f6828483611461565b5060008484604051610509929190611522565b604051908190039020600981905590506105647f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f827f0000000000000000000000000000000000000000000000000000000000000000610e66565b6008556040516105779084908490611522565b6040518091039020858560405161058f929190611522565b604051908190038120907f1ec4c73af923253fb2c28a509dd78d342709289a09929d78c64c0b8e047efbcd90600090a35050505050565b834211156106165760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104b0565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886106458c610eaf565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106a082610ed7565b905060006106b082878787610f25565b9050896001600160a01b0316816001600160a01b0316146107135760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104b0565b61071e8a8a8a6107ce565b50505050505050505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b61075d610bca565b6001600160a01b0381166107c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104b0565b6107cb81610ce5565b50565b6001600160a01b0383166108305760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104b0565b6001600160a01b0382166108915760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104b0565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006108ff848461072a565b90506000198114610967578181101561095a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104b0565b61096784848484036107ce565b50505050565b6001600160a01b0383166109d15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104b0565b6001600160a01b038216610a335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104b0565b6001600160a01b03831660009081526001602052604090205481811015610aab5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104b0565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b0b9086815260200190565b60405180910390a3610967565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b7157507f000000000000000000000000000000000000000000000000000000000000000046145b15610b7d575060085490565b61039d7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6009547f0000000000000000000000000000000000000000000000000000000000000000610e66565b6000546001600160a01b031633146104065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b0565b6001600160a01b038216610c7a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104b0565b8060036000828254610c8c91906113dc565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216610d955760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104b0565b6001600160a01b03821660009081526001602052604090205481811015610e095760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104b0565b6001600160a01b03831660008181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016108e6565b505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b600061036b610ee4610b18565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610f3687878787610f4d565b91509150610f4381611011565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610f845750600090506003611008565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610fd8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661100157600060019250925050611008565b9150600090505b94509492505050565b600081600481111561102557611025611532565b0361102d5750565b600181600481111561104157611041611532565b0361108e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104b0565b60028160048111156110a2576110a2611532565b036110ef5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104b0565b600381600481111561110357611103611532565b036107cb5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104b0565b600060208083528351808285015260005b818110156111885785810183015185820160400152820161116c565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146111c057600080fd5b919050565b600080604083850312156111d857600080fd5b6111e1836111a9565b946020939093013593505050565b60008060006060848603121561120457600080fd5b61120d846111a9565b925061121b602085016111a9565b9150604084013590509250925092565b60006020828403121561123d57600080fd5b611246826111a9565b9392505050565b60008083601f84011261125f57600080fd5b50813567ffffffffffffffff81111561127757600080fd5b60208301915083602082850101111561128f57600080fd5b9250929050565b600080600080604085870312156112ac57600080fd5b843567ffffffffffffffff808211156112c457600080fd5b6112d08883890161124d565b909650945060208701359150808211156112e957600080fd5b506112f68782880161124d565b95989497509550505050565b600080600080600080600060e0888a03121561131d57600080fd5b611326886111a9565b9650611334602089016111a9565b95506040880135945060608801359350608088013560ff8116811461135857600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561138857600080fd5b611391836111a9565b915061139f602084016111a9565b90509250929050565b600181811c908216806113bc57607f821691505b602082108103610ed157634e487b7160e01b600052602260045260246000fd5b8082018082111561036b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b601f821115610e6157600081815260208120601f850160051c8101602086101561143a5750805b601f850160051c820191505b8181101561145957828155600101611446565b505050505050565b67ffffffffffffffff831115611479576114796113fd565b61148d8361148783546113a8565b83611413565b6000601f8411600181146114c157600085156114a95750838201355b600019600387901b1c1916600186901b17835561151b565b600083815260209020601f19861690835b828110156114f257868501358255602094850194600190920191016114d2565b508682101561150f5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8183823760009101908152919050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212208113c928e03165e19b5c7ac5b67b85c32ab586cd042677306fbd142d27afccf664736f6c63430008110033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x19D9 CODESIZE SUB DUP1 PUSH3 0x19D9 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x245 JUMP JUMPDEST DUP3 DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE POP PUSH3 0x6B PUSH3 0x65 PUSH3 0x12C PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x130 JUMP JUMPDEST PUSH1 0x4 PUSH3 0x79 DUP5 DUP3 PUSH3 0x358 JUMP JUMPDEST POP PUSH1 0x5 PUSH3 0x88 DUP4 DUP3 PUSH3 0x358 JUMP JUMPDEST POP PUSH1 0x6 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP6 SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE POP DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 DUP3 MLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 KECCAK256 PUSH1 0x9 DUP4 SWAP1 SSTORE PUSH1 0xC0 DUP2 DUP2 MSTORE CHAINID PUSH1 0x80 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP2 DUP9 ADD MSTORE DUP1 DUP3 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x60 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP6 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP8 SUB DUP3 ADD DUP2 MSTORE SWAP6 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP4 MLOAD SWAP4 SWAP1 SWAP3 ADD SWAP3 SWAP1 SWAP3 KECCAK256 PUSH1 0x8 SSTORE MSTORE POP PUSH3 0x424 SWAP2 POP POP JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x1C5 JUMPI PUSH3 0x1C5 PUSH3 0x180 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x1F0 JUMPI PUSH3 0x1F0 PUSH3 0x180 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x20D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x231 JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x212 JUMP JUMPDEST PUSH1 0x0 SWAP4 DUP2 ADD SWAP1 SWAP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x25B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH3 0x26D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x28B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x299 DUP8 DUP4 DUP9 ADD PUSH3 0x196 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x2B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x2BF DUP7 DUP3 DUP8 ADD PUSH3 0x196 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x2DE JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH3 0x2FF JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH3 0x353 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH3 0x32E JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x34F JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x33A JUMP JUMPDEST POP POP POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH3 0x374 JUMPI PUSH3 0x374 PUSH3 0x180 JUMP JUMPDEST PUSH3 0x38C DUP2 PUSH3 0x385 DUP5 SLOAD PUSH3 0x2C9 JUMP JUMPDEST DUP5 PUSH3 0x305 JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH3 0x3C4 JUMPI PUSH1 0x0 DUP5 ISZERO PUSH3 0x3AB JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH3 0x34F JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH3 0x3F5 JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH3 0x3D4 JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH3 0x414 JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x157E PUSH3 0x45B PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x540 ADD MSTORE PUSH2 0xBA6 ADD MSTORE PUSH1 0x0 PUSH2 0xB25 ADD MSTORE PUSH1 0x0 PUSH2 0xB4F ADD MSTORE PUSH2 0x157E PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x12C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x269 JUMPI DUP1 PUSH4 0xB7B090EE EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2A2 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x2B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x220 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x23B JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x243 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3644E515 GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1B4 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x1C7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1DC JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x205 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x14F JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x172 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x184 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x197 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x139 PUSH2 0x2C8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x146 SWAP2 SWAP1 PUSH2 0x115B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH2 0x15D CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x35A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x146 JUMP JUMPDEST PUSH1 0x3 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x146 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x192 CALLDATASIZE PUSH1 0x4 PUSH2 0x11EF JUMP JUMPDEST PUSH2 0x371 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x146 JUMP JUMPDEST PUSH2 0x176 PUSH2 0x393 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x1C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x3A2 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x1D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x3DE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x176 PUSH2 0x1EA CALLDATASIZE PUSH1 0x4 PUSH2 0x122B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x3F4 JUMP JUMPDEST PUSH2 0x176 PUSH2 0x21B CALLDATASIZE PUSH1 0x4 PUSH2 0x122B JUMP JUMPDEST PUSH2 0x408 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x146 JUMP JUMPDEST PUSH2 0x139 PUSH2 0x426 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x251 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x435 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x264 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x447 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x277 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x4C6 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x28A CALLDATASIZE PUSH1 0x4 PUSH2 0x1296 JUMP JUMPDEST PUSH2 0x4D3 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x29D CALLDATASIZE PUSH1 0x4 PUSH2 0x1302 JUMP JUMPDEST PUSH2 0x5C6 JUMP JUMPDEST PUSH2 0x176 PUSH2 0x2B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1375 JUMP JUMPDEST PUSH2 0x72A JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x2C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x122B JUMP JUMPDEST PUSH2 0x755 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x2D7 SWAP1 PUSH2 0x13A8 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x303 SWAP1 PUSH2 0x13A8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x350 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x325 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x350 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x333 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x367 CALLER DUP5 DUP5 PUSH2 0x7CE JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E DUP5 CALLER DUP5 PUSH2 0x8F3 JUMP JUMPDEST PUSH2 0x389 DUP5 DUP5 DUP5 PUSH2 0x96D JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39D PUSH2 0xB18 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x367 SWAP2 DUP6 SWAP1 PUSH2 0x3D9 SWAP1 DUP7 SWAP1 PUSH2 0x13DC JUMP JUMPDEST PUSH2 0x7CE JUMP JUMPDEST PUSH2 0x3E6 PUSH2 0xBCA JUMP JUMPDEST PUSH2 0x3F0 DUP3 DUP3 PUSH2 0xC24 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x3FC PUSH2 0xBCA JUMP JUMPDEST PUSH2 0x406 PUSH1 0x0 PUSH2 0xCE5 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x36B JUMP JUMPDEST PUSH1 0x60 PUSH1 0x5 DUP1 SLOAD PUSH2 0x2D7 SWAP1 PUSH2 0x13A8 JUMP JUMPDEST PUSH2 0x43D PUSH2 0xBCA JUMP JUMPDEST PUSH2 0x3F0 DUP3 DUP3 PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x454 CALLER DUP6 PUSH2 0x72A JUMP JUMPDEST SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0x4B9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x389 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x7CE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x367 CALLER DUP5 DUP5 PUSH2 0x96D JUMP JUMPDEST PUSH2 0x4DB PUSH2 0xBCA JUMP JUMPDEST PUSH1 0x4 PUSH2 0x4E8 DUP5 DUP7 DUP4 PUSH2 0x1461 JUMP JUMPDEST POP PUSH1 0x5 PUSH2 0x4F6 DUP3 DUP5 DUP4 PUSH2 0x1461 JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x509 SWAP3 SWAP2 SWAP1 PUSH2 0x1522 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB SWAP1 KECCAK256 PUSH1 0x9 DUP2 SWAP1 SSTORE SWAP1 POP PUSH2 0x564 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 PUSH32 0x0 PUSH2 0xE66 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH2 0x577 SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0x1522 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x58F SWAP3 SWAP2 SWAP1 PUSH2 0x1522 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB DUP2 KECCAK256 SWAP1 PUSH32 0x1EC4C73AF923253FB2C28A509DD78D342709289A09929D78C64C0B8E047EFBCD SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x616 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x645 DUP13 PUSH2 0xEAF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP1 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x6A0 DUP3 PUSH2 0xED7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x6B0 DUP3 DUP8 DUP8 DUP8 PUSH2 0xF25 JUMP JUMPDEST SWAP1 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x713 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH2 0x71E DUP11 DUP11 DUP11 PUSH2 0x7CE JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x75D PUSH2 0xBCA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7C2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH2 0x7CB DUP2 PUSH2 0xCE5 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x830 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x891 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8FF DUP5 DUP5 PUSH2 0x72A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x967 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x95A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH2 0x967 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x7CE JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x9D1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xA33 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0xAAB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE SWAP3 DUP7 AND DUP1 DUP3 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE SWAP2 MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0xB0B SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x967 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ DUP1 ISZERO PUSH2 0xB71 JUMPI POP PUSH32 0x0 CHAINID EQ JUMPDEST ISZERO PUSH2 0xB7D JUMPI POP PUSH1 0x8 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x39D PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH1 0x9 SLOAD PUSH32 0x0 PUSH2 0xE66 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x406 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xC7A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST DUP1 PUSH1 0x3 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0xC8C SWAP2 SWAP1 PUSH2 0x13DC JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE MLOAD DUP5 DUP2 MSTORE PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xD95 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E2066726F6D20746865207A65726F20616464726573 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x73 PUSH1 0xF8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0xE09 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E20616D6F756E7420657863656564732062616C616E PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD DUP8 SWAP1 SUB SWAP1 SSTORE MLOAD DUP6 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0x8E6 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP1 JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x36B PUSH2 0xEE4 PUSH2 0xB18 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH2 0x1901 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x22 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x42 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x62 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xF36 DUP8 DUP8 DUP8 DUP8 PUSH2 0xF4D JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xF43 DUP2 PUSH2 0x1011 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP4 GT ISZERO PUSH2 0xF84 JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x3 PUSH2 0x1008 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFD8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1001 JUMPI PUSH1 0x0 PUSH1 0x1 SWAP3 POP SWAP3 POP POP PUSH2 0x1008 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x1025 JUMPI PUSH2 0x1025 PUSH2 0x1532 JUMP JUMPDEST SUB PUSH2 0x102D JUMPI POP JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x1041 JUMPI PUSH2 0x1041 PUSH2 0x1532 JUMP JUMPDEST SUB PUSH2 0x108E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x10A2 JUMPI PUSH2 0x10A2 PUSH2 0x1532 JUMP JUMPDEST SUB PUSH2 0x10EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x1103 JUMPI PUSH2 0x1103 PUSH2 0x1532 JUMP JUMPDEST SUB PUSH2 0x7CB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1188 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x116C JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x11C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x11D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11E1 DUP4 PUSH2 0x11A9 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1204 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x120D DUP5 PUSH2 0x11A9 JUMP JUMPDEST SWAP3 POP PUSH2 0x121B PUSH1 0x20 DUP6 ADD PUSH2 0x11A9 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x123D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1246 DUP3 PUSH2 0x11A9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x125F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x128F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x12AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x12C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12D0 DUP9 DUP4 DUP10 ADD PUSH2 0x124D JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x12E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x12F6 DUP8 DUP3 DUP9 ADD PUSH2 0x124D JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x131D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1326 DUP9 PUSH2 0x11A9 JUMP JUMPDEST SWAP7 POP PUSH2 0x1334 PUSH1 0x20 DUP10 ADD PUSH2 0x11A9 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1358 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1391 DUP4 PUSH2 0x11A9 JUMP JUMPDEST SWAP2 POP PUSH2 0x139F PUSH1 0x20 DUP5 ADD PUSH2 0x11A9 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x13BC JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0xED1 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x36B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0xE61 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH2 0x143A JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1459 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1446 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x1479 JUMPI PUSH2 0x1479 PUSH2 0x13FD JUMP JUMPDEST PUSH2 0x148D DUP4 PUSH2 0x1487 DUP4 SLOAD PUSH2 0x13A8 JUMP JUMPDEST DUP4 PUSH2 0x1413 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP5 GT PUSH1 0x1 DUP2 EQ PUSH2 0x14C1 JUMPI PUSH1 0x0 DUP6 ISZERO PUSH2 0x14A9 JUMPI POP DUP4 DUP3 ADD CALLDATALOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP8 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP7 SWAP1 SHL OR DUP4 SSTORE PUSH2 0x151B JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP1 DUP4 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x14F2 JUMPI DUP7 DUP6 ADD CALLDATALOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x14D2 JUMP JUMPDEST POP DUP7 DUP3 LT ISZERO PUSH2 0x150F JUMPI PUSH1 0x0 NOT PUSH1 0xF8 DUP9 PUSH1 0x3 SHL AND SHR NOT DUP5 DUP8 ADD CALLDATALOAD AND DUP2 SSTORE JUMPDEST POP POP PUSH1 0x1 DUP6 PUSH1 0x1 SHL ADD DUP4 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 SGT 0xC9 0x28 0xE0 BALANCE PUSH6 0xE19B5C7AC5B6 PUSH28 0x85C32AB586CD042677306FBD142D27AFCCF664736F6C634300081100 CALLER ","sourceMap":"240:1884:81:-:0;;;340:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;445:9;456:5;463:7;4234:558:86;;;;;;;;;;;;;-1:-1:-1;;;4234:558:86;;;936:32:38;955:12;:10;;;:12;;:::i;:::-;936:18;:32::i;:::-;4370:5:86;:13;4378:5;4370;:13;:::i;:::-;-1:-1:-1;4389:7:86;:17;4399:7;4389;:17;:::i;:::-;-1:-1:-1;4412:9:86;:21;;-1:-1:-1;;4412:21:86;;;;;;;;;;;;;-1:-1:-1;4475:23:86;;;;;;;4528:26;;;;;;;;;4560:12;:25;;;4591:31;;;;4647:13;4628:32;;;;-1:-1:-1;17623:73:86;;3392:95;17623:73;;;4556:25:181;4597:18;;;4590:34;;;;4640:18;;;4633:34;;;;4683:18;;4676:34;17690:4:86;4726:19:181;;;;4719:61;;;17623:73:86;;;;;;;;;4528:19:181;;;;17623:73:86;;;17613:84;;;;;;;;;;4666:24;:87;4759:28;-1:-1:-1;240:1884:81;;-1:-1:-1;;240:1884:81;640:96:58;719:10;;640:96::o;2433:187:38:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:38;;;-1:-1:-1;;;;;;2541:17:38;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;14:127:181:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:840;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:181;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:181;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;730:3;725:2;720;712:6;708:15;704:24;701:33;698:53;;;747:1;744;737:12;698:53;769:1;760:10;;779:133;793:2;790:1;787:9;779:133;;;881:14;;;877:23;;871:30;850:14;;;846:23;;839:63;804:10;;;;779:133;;;954:1;932:15;;;928:24;;;921:35;;;;936:6;146:840;-1:-1:-1;;;;146:840:181:o;991:712::-;1097:6;1105;1113;1166:2;1154:9;1145:7;1141:23;1137:32;1134:52;;;1182:1;1179;1172:12;1134:52;1214:9;1208:16;1264:4;1257:5;1253:16;1246:5;1243:27;1233:55;;1284:1;1281;1274:12;1233:55;1356:2;1341:18;;1335:25;1307:5;;-1:-1:-1;;;;;;1409:14:181;;;1406:34;;;1436:1;1433;1426:12;1406:34;1459:61;1512:7;1503:6;1492:9;1488:22;1459:61;:::i;:::-;1449:71;;1566:2;1555:9;1551:18;1545:25;1529:41;;1595:2;1585:8;1582:16;1579:36;;;1611:1;1608;1601:12;1579:36;;1634:63;1689:7;1678:8;1667:9;1663:24;1634:63;:::i;:::-;1624:73;;;991:712;;;;;:::o;1708:380::-;1787:1;1783:12;;;;1830;;;1851:61;;1905:4;1897:6;1893:17;1883:27;;1851:61;1958:2;1950:6;1947:14;1927:18;1924:38;1921:161;;2004:10;1999:3;1995:20;1992:1;1985:31;2039:4;2036:1;2029:15;2067:4;2064:1;2057:15;1921:161;;1708:380;;;:::o;2219:545::-;2321:2;2316:3;2313:11;2310:448;;;2357:1;2382:5;2378:2;2371:17;2427:4;2423:2;2413:19;2497:2;2485:10;2481:19;2478:1;2474:27;2468:4;2464:38;2533:4;2521:10;2518:20;2515:47;;;-1:-1:-1;2556:4:181;2515:47;2611:2;2606:3;2602:12;2599:1;2595:20;2589:4;2585:31;2575:41;;2666:82;2684:2;2677:5;2674:13;2666:82;;;2729:17;;;2710:1;2699:13;2666:82;;;2670:3;;;2310:448;2219:545;;;:::o;2940:1352::-;3060:10;;-1:-1:-1;;;;;3082:30:181;;3079:56;;;3115:18;;:::i;:::-;3144:97;3234:6;3194:38;3226:4;3220:11;3194:38;:::i;:::-;3188:4;3144:97;:::i;:::-;3296:4;;3360:2;3349:14;;3377:1;3372:663;;;;4079:1;4096:6;4093:89;;;-1:-1:-1;4148:19:181;;;4142:26;4093:89;-1:-1:-1;;2897:1:181;2893:11;;;2889:24;2885:29;2875:40;2921:1;2917:11;;;2872:57;4195:81;;3342:944;;3372:663;2166:1;2159:14;;;2203:4;2190:18;;-1:-1:-1;;3408:20:181;;;3526:236;3540:7;3537:1;3534:14;3526:236;;;3629:19;;;3623:26;3608:42;;3721:27;;;;3689:1;3677:14;;;;3556:19;;3526:236;;;3530:3;3790:6;3781:7;3778:19;3775:201;;;3851:19;;;3845:26;-1:-1:-1;;3934:1:181;3930:14;;;3946:3;3926:24;3922:37;3918:42;3903:58;3888:74;;3775:201;-1:-1:-1;;;;;4022:1:181;4006:14;;;4002:22;3989:36;;-1:-1:-1;2940:1352:181:o;4297:489::-;240:1884:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DOMAIN_SEPARATOR_23936":{"entryPoint":915,"id":23936,"parameterSlots":0,"returnSlots":1},"@_afterTokenTransfer_23836":{"entryPoint":null,"id":23836,"parameterSlots":3,"returnSlots":0},"@_approve_23771":{"entryPoint":1998,"id":23771,"parameterSlots":3,"returnSlots":0},"@_beforeTokenTransfer_23825":{"entryPoint":null,"id":23825,"parameterSlots":3,"returnSlots":0},"@_buildDomainSeparator_24022":{"entryPoint":3686,"id":24022,"parameterSlots":3,"returnSlots":1},"@_burn_23726":{"entryPoint":3381,"id":23726,"parameterSlots":2,"returnSlots":0},"@_checkOwner_9598":{"entryPoint":3018,"id":9598,"parameterSlots":0,"returnSlots":0},"@_domainSeparatorV4_23994":{"entryPoint":2840,"id":23994,"parameterSlots":0,"returnSlots":1},"@_hashTypedDataV4_24038":{"entryPoint":3799,"id":24038,"parameterSlots":1,"returnSlots":1},"@_mint_23654":{"entryPoint":3108,"id":23654,"parameterSlots":2,"returnSlots":0},"@_msgSender_11496":{"entryPoint":null,"id":11496,"parameterSlots":0,"returnSlots":1},"@_spendAllowance_23814":{"entryPoint":2291,"id":23814,"parameterSlots":3,"returnSlots":0},"@_throwError_11869":{"entryPoint":4113,"id":11869,"parameterSlots":1,"returnSlots":0},"@_transferOwnership_9655":{"entryPoint":3301,"id":9655,"parameterSlots":1,"returnSlots":0},"@_transfer_23597":{"entryPoint":2413,"id":23597,"parameterSlots":3,"returnSlots":0},"@_useNonce_23965":{"entryPoint":3759,"id":23965,"parameterSlots":1,"returnSlots":1},"@allowance_23405":{"entryPoint":1834,"id":23405,"parameterSlots":2,"returnSlots":1},"@approve_23426":{"entryPoint":858,"id":23426,"parameterSlots":2,"returnSlots":1},"@balanceOf_23366":{"entryPoint":null,"id":23366,"parameterSlots":1,"returnSlots":1},"@burn_22338":{"entryPoint":1077,"id":22338,"parameterSlots":2,"returnSlots":0},"@current_11524":{"entryPoint":null,"id":11524,"parameterSlots":1,"returnSlots":1},"@decimals_23342":{"entryPoint":null,"id":23342,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_23520":{"entryPoint":1095,"id":23520,"parameterSlots":2,"returnSlots":1},"@increaseAllowance_23482":{"entryPoint":930,"id":23482,"parameterSlots":2,"returnSlots":1},"@increment_11538":{"entryPoint":null,"id":11538,"parameterSlots":1,"returnSlots":0},"@mint_22355":{"entryPoint":990,"id":22355,"parameterSlots":2,"returnSlots":0},"@name_23322":{"entryPoint":712,"id":23322,"parameterSlots":0,"returnSlots":1},"@nonces_23925":{"entryPoint":1032,"id":23925,"parameterSlots":1,"returnSlots":1},"@owner_9584":{"entryPoint":null,"id":9584,"parameterSlots":0,"returnSlots":1},"@permit_23909":{"entryPoint":1478,"id":23909,"parameterSlots":7,"returnSlots":0},"@recover_12116":{"entryPoint":3877,"id":12116,"parameterSlots":4,"returnSlots":1},"@renounceOwnership_9612":{"entryPoint":1012,"id":9612,"parameterSlots":0,"returnSlots":0},"@setDetails_22401":{"entryPoint":1235,"id":22401,"parameterSlots":4,"returnSlots":0},"@symbol_23332":{"entryPoint":1062,"id":23332,"parameterSlots":0,"returnSlots":1},"@toTypedDataHash_12175":{"entryPoint":null,"id":12175,"parameterSlots":2,"returnSlots":1},"@totalSupply_23352":{"entryPoint":null,"id":23352,"parameterSlots":0,"returnSlots":1},"@transferFrom_23455":{"entryPoint":881,"id":23455,"parameterSlots":3,"returnSlots":1},"@transferOwnership_9635":{"entryPoint":1877,"id":9635,"parameterSlots":1,"returnSlots":0},"@transfer_23387":{"entryPoint":1222,"id":23387,"parameterSlots":2,"returnSlots":1},"@tryRecover_12083":{"entryPoint":3917,"id":12083,"parameterSlots":4,"returnSlots":2},"abi_decode_address":{"entryPoint":4521,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_string_calldata":{"entryPoint":4685,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":4651,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":4981,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":4591,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":4866,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":4549,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_string_calldata_ptrt_string_calldata_ptr":{"entryPoint":4758,"id":null,"parameterSlots":2,"returnSlots":4},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":5410,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_string_calldata_ptr__to_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":4443,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3e89525a63fb9c966b61cf8f5305156de8420bc773a2b60828a2f32c3c5797bd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_94ca1ab58dfda790a1782ffbb0c0a140ec51d4148dbeecc6c39e37b25ff4b124__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_dataslot_string_storage":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":5084,"id":null,"parameterSlots":2,"returnSlots":1},"clean_up_bytearray_end_slots_string_storage":{"entryPoint":5139,"id":null,"parameterSlots":3,"returnSlots":0},"copy_byte_array_to_storage_from_t_string_calldata_ptr_to_t_string_storage":{"entryPoint":5217,"id":null,"parameterSlots":3,"returnSlots":0},"extract_byte_array_length":{"entryPoint":5032,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x21":{"entryPoint":5426,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":5117,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:16453:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:427:181","statements":[{"nodeType":"YulVariableDeclaration","src":"145:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"155:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"149:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"173:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"184:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"166:6:181"},"nodeType":"YulFunctionCall","src":"166:21:181"},"nodeType":"YulExpressionStatement","src":"166:21:181"},{"nodeType":"YulVariableDeclaration","src":"196:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"216:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:181"},"nodeType":"YulFunctionCall","src":"210:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"200:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"243:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"254:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"239:3:181"},"nodeType":"YulFunctionCall","src":"239:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"259:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:181"},"nodeType":"YulFunctionCall","src":"232:34:181"},"nodeType":"YulExpressionStatement","src":"232:34:181"},{"nodeType":"YulVariableDeclaration","src":"275:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"284:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"279:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"344:90:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"373:9:181"},{"name":"i","nodeType":"YulIdentifier","src":"384:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"369:3:181"},"nodeType":"YulFunctionCall","src":"369:17:181"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:181"},"nodeType":"YulFunctionCall","src":"365:26:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"407:6:181"},{"name":"i","nodeType":"YulIdentifier","src":"415:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"403:3:181"},"nodeType":"YulFunctionCall","src":"403:14:181"},{"name":"_1","nodeType":"YulIdentifier","src":"419:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:181"},"nodeType":"YulFunctionCall","src":"399:23:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"393:5:181"},"nodeType":"YulFunctionCall","src":"393:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:181"},"nodeType":"YulFunctionCall","src":"358:66:181"},"nodeType":"YulExpressionStatement","src":"358:66:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"305:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"308:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"302:2:181"},"nodeType":"YulFunctionCall","src":"302:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"316:19:181","statements":[{"nodeType":"YulAssignment","src":"318:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"327:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"330:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:181"},"nodeType":"YulFunctionCall","src":"323:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"318:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"298:3:181","statements":[]},"src":"294:140:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"458:9:181"},{"name":"length","nodeType":"YulIdentifier","src":"469:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"454:3:181"},"nodeType":"YulFunctionCall","src":"454:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"478:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"450:3:181"},"nodeType":"YulFunctionCall","src":"450:31:181"},{"kind":"number","nodeType":"YulLiteral","src":"483:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"443:6:181"},"nodeType":"YulFunctionCall","src":"443:42:181"},"nodeType":"YulExpressionStatement","src":"443:42:181"},{"nodeType":"YulAssignment","src":"494:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"510:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"529:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"537:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"525:3:181"},"nodeType":"YulFunctionCall","src":"525:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"546:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"542:3:181"},"nodeType":"YulFunctionCall","src":"542:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"521:3:181"},"nodeType":"YulFunctionCall","src":"521:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"506:3:181"},"nodeType":"YulFunctionCall","src":"506:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"553:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"502:3:181"},"nodeType":"YulFunctionCall","src":"502:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"494:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"115:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"126:4:181","type":""}],"src":"14:548:181"},{"body":{"nodeType":"YulBlock","src":"616:124:181","statements":[{"nodeType":"YulAssignment","src":"626:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"648:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"635:12:181"},"nodeType":"YulFunctionCall","src":"635:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"626:5:181"}]},{"body":{"nodeType":"YulBlock","src":"718:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"727:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"730:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"720:6:181"},"nodeType":"YulFunctionCall","src":"720:12:181"},"nodeType":"YulExpressionStatement","src":"720:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"677:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"688:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"703:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"708:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"699:3:181"},"nodeType":"YulFunctionCall","src":"699:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"712:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"695:3:181"},"nodeType":"YulFunctionCall","src":"695:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"684:3:181"},"nodeType":"YulFunctionCall","src":"684:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"674:2:181"},"nodeType":"YulFunctionCall","src":"674:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"667:6:181"},"nodeType":"YulFunctionCall","src":"667:50:181"},"nodeType":"YulIf","src":"664:70:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"595:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"606:5:181","type":""}],"src":"567:173:181"},{"body":{"nodeType":"YulBlock","src":"832:167:181","statements":[{"body":{"nodeType":"YulBlock","src":"878:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"887:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"890:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"880:6:181"},"nodeType":"YulFunctionCall","src":"880:12:181"},"nodeType":"YulExpressionStatement","src":"880:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"853:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"862:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"849:3:181"},"nodeType":"YulFunctionCall","src":"849:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"874:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"845:3:181"},"nodeType":"YulFunctionCall","src":"845:32:181"},"nodeType":"YulIf","src":"842:52:181"},{"nodeType":"YulAssignment","src":"903:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"932:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"913:18:181"},"nodeType":"YulFunctionCall","src":"913:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"903:6:181"}]},{"nodeType":"YulAssignment","src":"951:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"978:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"989:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"974:3:181"},"nodeType":"YulFunctionCall","src":"974:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"961:12:181"},"nodeType":"YulFunctionCall","src":"961:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"951:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"790:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"801:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"813:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"821:6:181","type":""}],"src":"745:254:181"},{"body":{"nodeType":"YulBlock","src":"1099:92:181","statements":[{"nodeType":"YulAssignment","src":"1109:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1121:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1132:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1117:3:181"},"nodeType":"YulFunctionCall","src":"1117:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1109:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1151:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1176:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1169:6:181"},"nodeType":"YulFunctionCall","src":"1169:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1162:6:181"},"nodeType":"YulFunctionCall","src":"1162:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1144:6:181"},"nodeType":"YulFunctionCall","src":"1144:41:181"},"nodeType":"YulExpressionStatement","src":"1144:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1068:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1079:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1090:4:181","type":""}],"src":"1004:187:181"},{"body":{"nodeType":"YulBlock","src":"1297:76:181","statements":[{"nodeType":"YulAssignment","src":"1307:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1319:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1330:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1315:3:181"},"nodeType":"YulFunctionCall","src":"1315:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1307:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1349:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"1360:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1342:6:181"},"nodeType":"YulFunctionCall","src":"1342:25:181"},"nodeType":"YulExpressionStatement","src":"1342:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1266:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1277:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1288:4:181","type":""}],"src":"1196:177:181"},{"body":{"nodeType":"YulBlock","src":"1482:224:181","statements":[{"body":{"nodeType":"YulBlock","src":"1528:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1537:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1540:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1530:6:181"},"nodeType":"YulFunctionCall","src":"1530:12:181"},"nodeType":"YulExpressionStatement","src":"1530:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1503:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1512:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1499:3:181"},"nodeType":"YulFunctionCall","src":"1499:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1524:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1495:3:181"},"nodeType":"YulFunctionCall","src":"1495:32:181"},"nodeType":"YulIf","src":"1492:52:181"},{"nodeType":"YulAssignment","src":"1553:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1582:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1563:18:181"},"nodeType":"YulFunctionCall","src":"1563:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1553:6:181"}]},{"nodeType":"YulAssignment","src":"1601:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1634:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1645:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1630:3:181"},"nodeType":"YulFunctionCall","src":"1630:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1611:18:181"},"nodeType":"YulFunctionCall","src":"1611:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1601:6:181"}]},{"nodeType":"YulAssignment","src":"1658:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1685:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1696:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1681:3:181"},"nodeType":"YulFunctionCall","src":"1681:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1668:12:181"},"nodeType":"YulFunctionCall","src":"1668:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1658:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1432:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1443:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1455:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1463:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1471:6:181","type":""}],"src":"1378:328:181"},{"body":{"nodeType":"YulBlock","src":"1808:87:181","statements":[{"nodeType":"YulAssignment","src":"1818:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1830:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1841:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1826:3:181"},"nodeType":"YulFunctionCall","src":"1826:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1818:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1860:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1875:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1883:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1871:3:181"},"nodeType":"YulFunctionCall","src":"1871:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1853:6:181"},"nodeType":"YulFunctionCall","src":"1853:36:181"},"nodeType":"YulExpressionStatement","src":"1853:36:181"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1777:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1788:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1799:4:181","type":""}],"src":"1711:184:181"},{"body":{"nodeType":"YulBlock","src":"2001:76:181","statements":[{"nodeType":"YulAssignment","src":"2011:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2023:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2034:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2019:3:181"},"nodeType":"YulFunctionCall","src":"2019:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2011:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2053:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"2064:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2046:6:181"},"nodeType":"YulFunctionCall","src":"2046:25:181"},"nodeType":"YulExpressionStatement","src":"2046:25:181"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1970:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1981:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1992:4:181","type":""}],"src":"1900:177:181"},{"body":{"nodeType":"YulBlock","src":"2152:116:181","statements":[{"body":{"nodeType":"YulBlock","src":"2198:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2207:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2210:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2200:6:181"},"nodeType":"YulFunctionCall","src":"2200:12:181"},"nodeType":"YulExpressionStatement","src":"2200:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2173:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2182:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2169:3:181"},"nodeType":"YulFunctionCall","src":"2169:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2194:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2165:3:181"},"nodeType":"YulFunctionCall","src":"2165:32:181"},"nodeType":"YulIf","src":"2162:52:181"},{"nodeType":"YulAssignment","src":"2223:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2252:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2233:18:181"},"nodeType":"YulFunctionCall","src":"2233:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2223:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2118:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2129:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2141:6:181","type":""}],"src":"2082:186:181"},{"body":{"nodeType":"YulBlock","src":"2374:102:181","statements":[{"nodeType":"YulAssignment","src":"2384:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2396:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2407:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2392:3:181"},"nodeType":"YulFunctionCall","src":"2392:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2384:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2426:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2441:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2457:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2462:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2453:3:181"},"nodeType":"YulFunctionCall","src":"2453:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2466:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2449:3:181"},"nodeType":"YulFunctionCall","src":"2449:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2437:3:181"},"nodeType":"YulFunctionCall","src":"2437:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2419:6:181"},"nodeType":"YulFunctionCall","src":"2419:51:181"},"nodeType":"YulExpressionStatement","src":"2419:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2343:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2354:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2365:4:181","type":""}],"src":"2273:203:181"},{"body":{"nodeType":"YulBlock","src":"2554:275:181","statements":[{"body":{"nodeType":"YulBlock","src":"2603:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2612:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2615:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2605:6:181"},"nodeType":"YulFunctionCall","src":"2605:12:181"},"nodeType":"YulExpressionStatement","src":"2605:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2582:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2590:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2578:3:181"},"nodeType":"YulFunctionCall","src":"2578:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"2597:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2574:3:181"},"nodeType":"YulFunctionCall","src":"2574:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2567:6:181"},"nodeType":"YulFunctionCall","src":"2567:35:181"},"nodeType":"YulIf","src":"2564:55:181"},{"nodeType":"YulAssignment","src":"2628:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2651:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2638:12:181"},"nodeType":"YulFunctionCall","src":"2638:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2628:6:181"}]},{"body":{"nodeType":"YulBlock","src":"2701:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2710:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2713:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2703:6:181"},"nodeType":"YulFunctionCall","src":"2703:12:181"},"nodeType":"YulExpressionStatement","src":"2703:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2673:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2681:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2670:2:181"},"nodeType":"YulFunctionCall","src":"2670:30:181"},"nodeType":"YulIf","src":"2667:50:181"},{"nodeType":"YulAssignment","src":"2726:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2742:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2750:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2738:3:181"},"nodeType":"YulFunctionCall","src":"2738:17:181"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"2726:8:181"}]},{"body":{"nodeType":"YulBlock","src":"2807:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2816:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2819:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2809:6:181"},"nodeType":"YulFunctionCall","src":"2809:12:181"},"nodeType":"YulExpressionStatement","src":"2809:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2778:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"2786:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2774:3:181"},"nodeType":"YulFunctionCall","src":"2774:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"2795:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2770:3:181"},"nodeType":"YulFunctionCall","src":"2770:30:181"},{"name":"end","nodeType":"YulIdentifier","src":"2802:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2767:2:181"},"nodeType":"YulFunctionCall","src":"2767:39:181"},"nodeType":"YulIf","src":"2764:59:181"}]},"name":"abi_decode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2517:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"2525:3:181","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"2533:8:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"2543:6:181","type":""}],"src":"2481:348:181"},{"body":{"nodeType":"YulBlock","src":"2961:594:181","statements":[{"body":{"nodeType":"YulBlock","src":"3007:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3016:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3019:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3009:6:181"},"nodeType":"YulFunctionCall","src":"3009:12:181"},"nodeType":"YulExpressionStatement","src":"3009:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2982:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2991:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2978:3:181"},"nodeType":"YulFunctionCall","src":"2978:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3003:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2974:3:181"},"nodeType":"YulFunctionCall","src":"2974:32:181"},"nodeType":"YulIf","src":"2971:52:181"},{"nodeType":"YulVariableDeclaration","src":"3032:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3059:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3046:12:181"},"nodeType":"YulFunctionCall","src":"3046:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3036:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3078:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3088:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3082:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3133:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3142:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3145:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3135:6:181"},"nodeType":"YulFunctionCall","src":"3135:12:181"},"nodeType":"YulExpressionStatement","src":"3135:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3121:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3129:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3118:2:181"},"nodeType":"YulFunctionCall","src":"3118:14:181"},"nodeType":"YulIf","src":"3115:34:181"},{"nodeType":"YulVariableDeclaration","src":"3158:85:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3215:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"3226:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3211:3:181"},"nodeType":"YulFunctionCall","src":"3211:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3235:7:181"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"3184:26:181"},"nodeType":"YulFunctionCall","src":"3184:59:181"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"3162:8:181","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"3172:8:181","type":""}]},{"nodeType":"YulAssignment","src":"3252:18:181","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"3262:8:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3252:6:181"}]},{"nodeType":"YulAssignment","src":"3279:18:181","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"3289:8:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3279:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3306:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3339:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3350:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3335:3:181"},"nodeType":"YulFunctionCall","src":"3335:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3322:12:181"},"nodeType":"YulFunctionCall","src":"3322:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"3310:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3383:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3392:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3395:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3385:6:181"},"nodeType":"YulFunctionCall","src":"3385:12:181"},"nodeType":"YulExpressionStatement","src":"3385:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"3369:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3379:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3366:2:181"},"nodeType":"YulFunctionCall","src":"3366:16:181"},"nodeType":"YulIf","src":"3363:36:181"},{"nodeType":"YulVariableDeclaration","src":"3408:87:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3465:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"3476:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3461:3:181"},"nodeType":"YulFunctionCall","src":"3461:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3487:7:181"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"3434:26:181"},"nodeType":"YulFunctionCall","src":"3434:61:181"},"variables":[{"name":"value2_1","nodeType":"YulTypedName","src":"3412:8:181","type":""},{"name":"value3_1","nodeType":"YulTypedName","src":"3422:8:181","type":""}]},{"nodeType":"YulAssignment","src":"3504:18:181","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"3514:8:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3504:6:181"}]},{"nodeType":"YulAssignment","src":"3531:18:181","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"3541:8:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3531:6:181"}]}]},"name":"abi_decode_tuple_t_string_calldata_ptrt_string_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2903:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2914:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2926:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2934:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2942:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2950:6:181","type":""}],"src":"2834:721:181"},{"body":{"nodeType":"YulBlock","src":"3730:523:181","statements":[{"body":{"nodeType":"YulBlock","src":"3777:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3786:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3789:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3779:6:181"},"nodeType":"YulFunctionCall","src":"3779:12:181"},"nodeType":"YulExpressionStatement","src":"3779:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3751:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3760:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3747:3:181"},"nodeType":"YulFunctionCall","src":"3747:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3772:3:181","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3743:3:181"},"nodeType":"YulFunctionCall","src":"3743:33:181"},"nodeType":"YulIf","src":"3740:53:181"},{"nodeType":"YulAssignment","src":"3802:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3831:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3812:18:181"},"nodeType":"YulFunctionCall","src":"3812:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3802:6:181"}]},{"nodeType":"YulAssignment","src":"3850:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3883:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3894:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3879:3:181"},"nodeType":"YulFunctionCall","src":"3879:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3860:18:181"},"nodeType":"YulFunctionCall","src":"3860:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3850:6:181"}]},{"nodeType":"YulAssignment","src":"3907:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3934:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3945:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3930:3:181"},"nodeType":"YulFunctionCall","src":"3930:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3917:12:181"},"nodeType":"YulFunctionCall","src":"3917:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3907:6:181"}]},{"nodeType":"YulAssignment","src":"3958:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3985:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3996:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3981:3:181"},"nodeType":"YulFunctionCall","src":"3981:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3968:12:181"},"nodeType":"YulFunctionCall","src":"3968:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3958:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"4009:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4039:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4050:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4035:3:181"},"nodeType":"YulFunctionCall","src":"4035:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4022:12:181"},"nodeType":"YulFunctionCall","src":"4022:33:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4013:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4103:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4112:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4115:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4105:6:181"},"nodeType":"YulFunctionCall","src":"4105:12:181"},"nodeType":"YulExpressionStatement","src":"4105:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4077:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4088:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"4095:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4084:3:181"},"nodeType":"YulFunctionCall","src":"4084:16:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4074:2:181"},"nodeType":"YulFunctionCall","src":"4074:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4067:6:181"},"nodeType":"YulFunctionCall","src":"4067:35:181"},"nodeType":"YulIf","src":"4064:55:181"},{"nodeType":"YulAssignment","src":"4128:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"4138:5:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"4128:6:181"}]},{"nodeType":"YulAssignment","src":"4152:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4179:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4190:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4175:3:181"},"nodeType":"YulFunctionCall","src":"4175:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4162:12:181"},"nodeType":"YulFunctionCall","src":"4162:33:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"4152:6:181"}]},{"nodeType":"YulAssignment","src":"4204:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4231:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4242:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4227:3:181"},"nodeType":"YulFunctionCall","src":"4227:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4214:12:181"},"nodeType":"YulFunctionCall","src":"4214:33:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"4204:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3648:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3659:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3671:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3679:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3687:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3695:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3703:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3711:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3719:6:181","type":""}],"src":"3560:693:181"},{"body":{"nodeType":"YulBlock","src":"4345:173:181","statements":[{"body":{"nodeType":"YulBlock","src":"4391:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4400:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4403:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4393:6:181"},"nodeType":"YulFunctionCall","src":"4393:12:181"},"nodeType":"YulExpressionStatement","src":"4393:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4366:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"4375:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4362:3:181"},"nodeType":"YulFunctionCall","src":"4362:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"4387:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4358:3:181"},"nodeType":"YulFunctionCall","src":"4358:32:181"},"nodeType":"YulIf","src":"4355:52:181"},{"nodeType":"YulAssignment","src":"4416:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4445:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"4426:18:181"},"nodeType":"YulFunctionCall","src":"4426:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4416:6:181"}]},{"nodeType":"YulAssignment","src":"4464:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4497:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4508:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4493:3:181"},"nodeType":"YulFunctionCall","src":"4493:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"4474:18:181"},"nodeType":"YulFunctionCall","src":"4474:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4464:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4303:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4314:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4326:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4334:6:181","type":""}],"src":"4258:260:181"},{"body":{"nodeType":"YulBlock","src":"4578:325:181","statements":[{"nodeType":"YulAssignment","src":"4588:22:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4602:1:181","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"4605:4:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"4598:3:181"},"nodeType":"YulFunctionCall","src":"4598:12:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"4588:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"4619:38:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"4649:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"4655:1:181","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4645:3:181"},"nodeType":"YulFunctionCall","src":"4645:12:181"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"4623:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4696:31:181","statements":[{"nodeType":"YulAssignment","src":"4698:27:181","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4712:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4720:4:181","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4708:3:181"},"nodeType":"YulFunctionCall","src":"4708:17:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"4698:6:181"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"4676:18:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4669:6:181"},"nodeType":"YulFunctionCall","src":"4669:26:181"},"nodeType":"YulIf","src":"4666:61:181"},{"body":{"nodeType":"YulBlock","src":"4786:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4807:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4814:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"4819:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4810:3:181"},"nodeType":"YulFunctionCall","src":"4810:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4800:6:181"},"nodeType":"YulFunctionCall","src":"4800:31:181"},"nodeType":"YulExpressionStatement","src":"4800:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4851:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4854:4:181","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4844:6:181"},"nodeType":"YulFunctionCall","src":"4844:15:181"},"nodeType":"YulExpressionStatement","src":"4844:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4879:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4882:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4872:6:181"},"nodeType":"YulFunctionCall","src":"4872:15:181"},"nodeType":"YulExpressionStatement","src":"4872:15:181"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"4742:18:181"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4765:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4773:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4762:2:181"},"nodeType":"YulFunctionCall","src":"4762:14:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4739:2:181"},"nodeType":"YulFunctionCall","src":"4739:38:181"},"nodeType":"YulIf","src":"4736:161:181"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"4558:4:181","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"4567:6:181","type":""}],"src":"4523:380:181"},{"body":{"nodeType":"YulBlock","src":"4956:174:181","statements":[{"nodeType":"YulAssignment","src":"4966:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4977:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"4980:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4973:3:181"},"nodeType":"YulFunctionCall","src":"4973:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"4966:3:181"}]},{"body":{"nodeType":"YulBlock","src":"5013:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5034:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5041:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"5046:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5037:3:181"},"nodeType":"YulFunctionCall","src":"5037:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5027:6:181"},"nodeType":"YulFunctionCall","src":"5027:31:181"},"nodeType":"YulExpressionStatement","src":"5027:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5078:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5081:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5071:6:181"},"nodeType":"YulFunctionCall","src":"5071:15:181"},"nodeType":"YulExpressionStatement","src":"5071:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5106:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5109:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5099:6:181"},"nodeType":"YulFunctionCall","src":"5099:15:181"},"nodeType":"YulExpressionStatement","src":"5099:15:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4997:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"5000:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4994:2:181"},"nodeType":"YulFunctionCall","src":"4994:10:181"},"nodeType":"YulIf","src":"4991:133:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4939:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"4942:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"4948:3:181","type":""}],"src":"4908:222:181"},{"body":{"nodeType":"YulBlock","src":"5309:227:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5326:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5337:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5319:6:181"},"nodeType":"YulFunctionCall","src":"5319:21:181"},"nodeType":"YulExpressionStatement","src":"5319:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5360:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5371:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5356:3:181"},"nodeType":"YulFunctionCall","src":"5356:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5376:2:181","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5349:6:181"},"nodeType":"YulFunctionCall","src":"5349:30:181"},"nodeType":"YulExpressionStatement","src":"5349:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5399:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5410:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5395:3:181"},"nodeType":"YulFunctionCall","src":"5395:18:181"},{"hexValue":"45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77","kind":"string","nodeType":"YulLiteral","src":"5415:34:181","type":"","value":"ERC20: decreased allowance below"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5388:6:181"},"nodeType":"YulFunctionCall","src":"5388:62:181"},"nodeType":"YulExpressionStatement","src":"5388:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5470:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5481:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5466:3:181"},"nodeType":"YulFunctionCall","src":"5466:18:181"},{"hexValue":"207a65726f","kind":"string","nodeType":"YulLiteral","src":"5486:7:181","type":"","value":" zero"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5459:6:181"},"nodeType":"YulFunctionCall","src":"5459:35:181"},"nodeType":"YulExpressionStatement","src":"5459:35:181"},{"nodeType":"YulAssignment","src":"5503:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5515:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5526:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5511:3:181"},"nodeType":"YulFunctionCall","src":"5511:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5503:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5286:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5300:4:181","type":""}],"src":"5135:401:181"},{"body":{"nodeType":"YulBlock","src":"5573:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5590:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5597:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"5602:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5593:3:181"},"nodeType":"YulFunctionCall","src":"5593:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5583:6:181"},"nodeType":"YulFunctionCall","src":"5583:31:181"},"nodeType":"YulExpressionStatement","src":"5583:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5630:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5633:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5623:6:181"},"nodeType":"YulFunctionCall","src":"5623:15:181"},"nodeType":"YulExpressionStatement","src":"5623:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5654:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5657:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5647:6:181"},"nodeType":"YulFunctionCall","src":"5647:15:181"},"nodeType":"YulExpressionStatement","src":"5647:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"5541:127:181"},{"body":{"nodeType":"YulBlock","src":"5729:65:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5746:1:181","type":"","value":"0"},{"name":"ptr","nodeType":"YulIdentifier","src":"5749:3:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5739:6:181"},"nodeType":"YulFunctionCall","src":"5739:14:181"},"nodeType":"YulExpressionStatement","src":"5739:14:181"},{"nodeType":"YulAssignment","src":"5762:26:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5780:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5783:4:181","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"5770:9:181"},"nodeType":"YulFunctionCall","src":"5770:18:181"},"variableNames":[{"name":"data","nodeType":"YulIdentifier","src":"5762:4:181"}]}]},"name":"array_dataslot_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nodeType":"YulTypedName","src":"5712:3:181","type":""}],"returnVariables":[{"name":"data","nodeType":"YulTypedName","src":"5720:4:181","type":""}],"src":"5673:121:181"},{"body":{"nodeType":"YulBlock","src":"5880:464:181","statements":[{"body":{"nodeType":"YulBlock","src":"5913:425:181","statements":[{"nodeType":"YulVariableDeclaration","src":"5927:11:181","value":{"kind":"number","nodeType":"YulLiteral","src":"5937:1:181","type":"","value":"0"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5931:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"5958:2:181"},{"name":"array","nodeType":"YulIdentifier","src":"5962:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5951:6:181"},"nodeType":"YulFunctionCall","src":"5951:17:181"},"nodeType":"YulExpressionStatement","src":"5951:17:181"},{"nodeType":"YulVariableDeclaration","src":"5981:31:181","value":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"6003:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"6007:4:181","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"5993:9:181"},"nodeType":"YulFunctionCall","src":"5993:19:181"},"variables":[{"name":"data","nodeType":"YulTypedName","src":"5985:4:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6025:57:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"6048:4:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6058:1:181","type":"","value":"5"},{"arguments":[{"name":"startIndex","nodeType":"YulIdentifier","src":"6065:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"6077:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6061:3:181"},"nodeType":"YulFunctionCall","src":"6061:19:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"6054:3:181"},"nodeType":"YulFunctionCall","src":"6054:27:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6044:3:181"},"nodeType":"YulFunctionCall","src":"6044:38:181"},"variables":[{"name":"deleteStart","nodeType":"YulTypedName","src":"6029:11:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6119:23:181","statements":[{"nodeType":"YulAssignment","src":"6121:19:181","value":{"name":"data","nodeType":"YulIdentifier","src":"6136:4:181"},"variableNames":[{"name":"deleteStart","nodeType":"YulIdentifier","src":"6121:11:181"}]}]},"condition":{"arguments":[{"name":"startIndex","nodeType":"YulIdentifier","src":"6101:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"6113:4:181","type":"","value":"0x20"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6098:2:181"},"nodeType":"YulFunctionCall","src":"6098:20:181"},"nodeType":"YulIf","src":"6095:47:181"},{"nodeType":"YulVariableDeclaration","src":"6155:41:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"6169:4:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6179:1:181","type":"","value":"5"},{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"6186:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"6191:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6182:3:181"},"nodeType":"YulFunctionCall","src":"6182:12:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"6175:3:181"},"nodeType":"YulFunctionCall","src":"6175:20:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6165:3:181"},"nodeType":"YulFunctionCall","src":"6165:31:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"6159:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6209:24:181","value":{"name":"deleteStart","nodeType":"YulIdentifier","src":"6222:11:181"},"variables":[{"name":"start","nodeType":"YulTypedName","src":"6213:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6307:21:181","statements":[{"expression":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"6316:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6323:2:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"6309:6:181"},"nodeType":"YulFunctionCall","src":"6309:17:181"},"nodeType":"YulExpressionStatement","src":"6309:17:181"}]},"condition":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"6257:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"6264:2:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6254:2:181"},"nodeType":"YulFunctionCall","src":"6254:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6268:26:181","statements":[{"nodeType":"YulAssignment","src":"6270:22:181","value":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"6283:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"6290:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6279:3:181"},"nodeType":"YulFunctionCall","src":"6279:13:181"},"variableNames":[{"name":"start","nodeType":"YulIdentifier","src":"6270:5:181"}]}]},"pre":{"nodeType":"YulBlock","src":"6250:3:181","statements":[]},"src":"6246:82:181"}]},"condition":{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"5896:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"5901:2:181","type":"","value":"31"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5893:2:181"},"nodeType":"YulFunctionCall","src":"5893:11:181"},"nodeType":"YulIf","src":"5890:448:181"}]},"name":"clean_up_bytearray_end_slots_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nodeType":"YulTypedName","src":"5852:5:181","type":""},{"name":"len","nodeType":"YulTypedName","src":"5859:3:181","type":""},{"name":"startIndex","nodeType":"YulTypedName","src":"5864:10:181","type":""}],"src":"5799:545:181"},{"body":{"nodeType":"YulBlock","src":"6434:81:181","statements":[{"nodeType":"YulAssignment","src":"6444:65:181","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"6459:4:181"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6477:1:181","type":"","value":"3"},{"name":"len","nodeType":"YulIdentifier","src":"6480:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6473:3:181"},"nodeType":"YulFunctionCall","src":"6473:11:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6490:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6486:3:181"},"nodeType":"YulFunctionCall","src":"6486:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"6469:3:181"},"nodeType":"YulFunctionCall","src":"6469:24:181"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6465:3:181"},"nodeType":"YulFunctionCall","src":"6465:29:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6455:3:181"},"nodeType":"YulFunctionCall","src":"6455:40:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6501:1:181","type":"","value":"1"},{"name":"len","nodeType":"YulIdentifier","src":"6504:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6497:3:181"},"nodeType":"YulFunctionCall","src":"6497:11:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"6452:2:181"},"nodeType":"YulFunctionCall","src":"6452:57:181"},"variableNames":[{"name":"used","nodeType":"YulIdentifier","src":"6444:4:181"}]}]},"name":"extract_used_part_and_set_length_of_short_byte_array","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"6411:4:181","type":""},{"name":"len","nodeType":"YulTypedName","src":"6417:3:181","type":""}],"returnVariables":[{"name":"used","nodeType":"YulTypedName","src":"6425:4:181","type":""}],"src":"6349:166:181"},{"body":{"nodeType":"YulBlock","src":"6623:1103:181","statements":[{"body":{"nodeType":"YulBlock","src":"6664:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"6666:16:181"},"nodeType":"YulFunctionCall","src":"6666:18:181"},"nodeType":"YulExpressionStatement","src":"6666:18:181"}]},"condition":{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"6639:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"6644:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6636:2:181"},"nodeType":"YulFunctionCall","src":"6636:27:181"},"nodeType":"YulIf","src":"6633:53:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"6739:4:181"},{"arguments":[{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"6777:4:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"6771:5:181"},"nodeType":"YulFunctionCall","src":"6771:11:181"}],"functionName":{"name":"extract_byte_array_length","nodeType":"YulIdentifier","src":"6745:25:181"},"nodeType":"YulFunctionCall","src":"6745:38:181"},{"name":"len","nodeType":"YulIdentifier","src":"6785:3:181"}],"functionName":{"name":"clean_up_bytearray_end_slots_string_storage","nodeType":"YulIdentifier","src":"6695:43:181"},"nodeType":"YulFunctionCall","src":"6695:94:181"},"nodeType":"YulExpressionStatement","src":"6695:94:181"},{"nodeType":"YulVariableDeclaration","src":"6798:18:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6815:1:181","type":"","value":"0"},"variables":[{"name":"srcOffset","nodeType":"YulTypedName","src":"6802:9:181","type":""}]},{"cases":[{"body":{"nodeType":"YulBlock","src":"6859:609:181","statements":[{"nodeType":"YulVariableDeclaration","src":"6873:32:181","value":{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"6892:3:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6901:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6897:3:181"},"nodeType":"YulFunctionCall","src":"6897:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6888:3:181"},"nodeType":"YulFunctionCall","src":"6888:17:181"},"variables":[{"name":"loopEnd","nodeType":"YulTypedName","src":"6877:7:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6918:49:181","value":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"6962:4:181"}],"functionName":{"name":"array_dataslot_string_storage","nodeType":"YulIdentifier","src":"6932:29:181"},"nodeType":"YulFunctionCall","src":"6932:35:181"},"variables":[{"name":"dstPtr","nodeType":"YulTypedName","src":"6922:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6980:18:181","value":{"name":"srcOffset","nodeType":"YulIdentifier","src":"6989:9:181"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"6984:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7068:172:181","statements":[{"expression":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"7093:6:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"7118:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"7123:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7114:3:181"},"nodeType":"YulFunctionCall","src":"7114:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7101:12:181"},"nodeType":"YulFunctionCall","src":"7101:33:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"7086:6:181"},"nodeType":"YulFunctionCall","src":"7086:49:181"},"nodeType":"YulExpressionStatement","src":"7086:49:181"},{"nodeType":"YulAssignment","src":"7152:24:181","value":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"7166:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"7174:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7162:3:181"},"nodeType":"YulFunctionCall","src":"7162:14:181"},"variableNames":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"7152:6:181"}]},{"nodeType":"YulAssignment","src":"7193:33:181","value":{"arguments":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"7210:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7221:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7206:3:181"},"nodeType":"YulFunctionCall","src":"7206:20:181"},"variableNames":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"7193:9:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"7022:1:181"},{"name":"loopEnd","nodeType":"YulIdentifier","src":"7025:7:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7019:2:181"},"nodeType":"YulFunctionCall","src":"7019:14:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"7034:21:181","statements":[{"nodeType":"YulAssignment","src":"7036:17:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"7045:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"7048:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7041:3:181"},"nodeType":"YulFunctionCall","src":"7041:12:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"7036:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"7015:3:181","statements":[]},"src":"7011:229:181"},{"body":{"nodeType":"YulBlock","src":"7285:127:181","statements":[{"expression":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"7310:6:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"7339:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"7344:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7335:3:181"},"nodeType":"YulFunctionCall","src":"7335:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7322:12:181"},"nodeType":"YulFunctionCall","src":"7322:33:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7373:1:181","type":"","value":"3"},{"name":"len","nodeType":"YulIdentifier","src":"7376:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7369:3:181"},"nodeType":"YulFunctionCall","src":"7369:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"7382:3:181","type":"","value":"248"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7365:3:181"},"nodeType":"YulFunctionCall","src":"7365:21:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7392:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7388:3:181"},"nodeType":"YulFunctionCall","src":"7388:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"7361:3:181"},"nodeType":"YulFunctionCall","src":"7361:34:181"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7357:3:181"},"nodeType":"YulFunctionCall","src":"7357:39:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7318:3:181"},"nodeType":"YulFunctionCall","src":"7318:79:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"7303:6:181"},"nodeType":"YulFunctionCall","src":"7303:95:181"},"nodeType":"YulExpressionStatement","src":"7303:95:181"}]},"condition":{"arguments":[{"name":"loopEnd","nodeType":"YulIdentifier","src":"7259:7:181"},{"name":"len","nodeType":"YulIdentifier","src":"7268:3:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7256:2:181"},"nodeType":"YulFunctionCall","src":"7256:16:181"},"nodeType":"YulIf","src":"7253:159:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"7432:4:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7446:1:181","type":"","value":"1"},{"name":"len","nodeType":"YulIdentifier","src":"7449:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7442:3:181"},"nodeType":"YulFunctionCall","src":"7442:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"7455:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7438:3:181"},"nodeType":"YulFunctionCall","src":"7438:19:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"7425:6:181"},"nodeType":"YulFunctionCall","src":"7425:33:181"},"nodeType":"YulExpressionStatement","src":"7425:33:181"}]},"nodeType":"YulCase","src":"6852:616:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6857:1:181","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"7485:235:181","statements":[{"nodeType":"YulVariableDeclaration","src":"7499:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7512:1:181","type":"","value":"0"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7503:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7545:74:181","statements":[{"nodeType":"YulAssignment","src":"7563:42:181","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"7589:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"7594:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7585:3:181"},"nodeType":"YulFunctionCall","src":"7585:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7572:12:181"},"nodeType":"YulFunctionCall","src":"7572:33:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"7563:5:181"}]}]},"condition":{"name":"len","nodeType":"YulIdentifier","src":"7529:3:181"},"nodeType":"YulIf","src":"7526:93:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"7639:4:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7698:5:181"},{"name":"len","nodeType":"YulIdentifier","src":"7705:3:181"}],"functionName":{"name":"extract_used_part_and_set_length_of_short_byte_array","nodeType":"YulIdentifier","src":"7645:52:181"},"nodeType":"YulFunctionCall","src":"7645:64:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"7632:6:181"},"nodeType":"YulFunctionCall","src":"7632:78:181"},"nodeType":"YulExpressionStatement","src":"7632:78:181"}]},"nodeType":"YulCase","src":"7477:243:181","value":"default"}],"expression":{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"6835:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"6840:2:181","type":"","value":"31"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6832:2:181"},"nodeType":"YulFunctionCall","src":"6832:11:181"},"nodeType":"YulSwitch","src":"6825:895:181"}]},"name":"copy_byte_array_to_storage_from_t_string_calldata_ptr_to_t_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nodeType":"YulTypedName","src":"6603:4:181","type":""},{"name":"src","nodeType":"YulTypedName","src":"6609:3:181","type":""},{"name":"len","nodeType":"YulTypedName","src":"6614:3:181","type":""}],"src":"6520:1206:181"},{"body":{"nodeType":"YulBlock","src":"7878:124:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7901:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"7906:6:181"},{"name":"value1","nodeType":"YulIdentifier","src":"7914:6:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"7888:12:181"},"nodeType":"YulFunctionCall","src":"7888:33:181"},"nodeType":"YulExpressionStatement","src":"7888:33:181"},{"nodeType":"YulVariableDeclaration","src":"7930:26:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7944:3:181"},{"name":"value1","nodeType":"YulIdentifier","src":"7949:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7940:3:181"},"nodeType":"YulFunctionCall","src":"7940:16:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7934:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"7972:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"7976:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7965:6:181"},"nodeType":"YulFunctionCall","src":"7965:13:181"},"nodeType":"YulExpressionStatement","src":"7965:13:181"},{"nodeType":"YulAssignment","src":"7987:9:181","value":{"name":"_1","nodeType":"YulIdentifier","src":"7994:2:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"7987:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"7846:3:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7851:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7859:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"7870:3:181","type":""}],"src":"7731:271:181"},{"body":{"nodeType":"YulBlock","src":"8156:124:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8179:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"8184:6:181"},{"name":"value1","nodeType":"YulIdentifier","src":"8192:6:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"8166:12:181"},"nodeType":"YulFunctionCall","src":"8166:33:181"},"nodeType":"YulExpressionStatement","src":"8166:33:181"},{"nodeType":"YulVariableDeclaration","src":"8208:26:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8222:3:181"},{"name":"value1","nodeType":"YulIdentifier","src":"8227:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8218:3:181"},"nodeType":"YulFunctionCall","src":"8218:16:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8212:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"8250:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"8254:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8243:6:181"},"nodeType":"YulFunctionCall","src":"8243:13:181"},"nodeType":"YulExpressionStatement","src":"8243:13:181"},{"nodeType":"YulAssignment","src":"8265:9:181","value":{"name":"_1","nodeType":"YulIdentifier","src":"8272:2:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"8265:3:181"}]}]},"name":"abi_encode_tuple_packed_t_string_calldata_ptr__to_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"8124:3:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8129:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8137:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"8148:3:181","type":""}],"src":"8007:273:181"},{"body":{"nodeType":"YulBlock","src":"8459:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8476:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8487:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8469:6:181"},"nodeType":"YulFunctionCall","src":"8469:21:181"},"nodeType":"YulExpressionStatement","src":"8469:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8510:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8521:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8506:3:181"},"nodeType":"YulFunctionCall","src":"8506:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8526:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8499:6:181"},"nodeType":"YulFunctionCall","src":"8499:30:181"},"nodeType":"YulExpressionStatement","src":"8499:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8549:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8560:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8545:3:181"},"nodeType":"YulFunctionCall","src":"8545:18:181"},{"hexValue":"45524332305065726d69743a206578706972656420646561646c696e65","kind":"string","nodeType":"YulLiteral","src":"8565:31:181","type":"","value":"ERC20Permit: expired deadline"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8538:6:181"},"nodeType":"YulFunctionCall","src":"8538:59:181"},"nodeType":"YulExpressionStatement","src":"8538:59:181"},{"nodeType":"YulAssignment","src":"8606:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8618:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8629:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8614:3:181"},"nodeType":"YulFunctionCall","src":"8614:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8606:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_3e89525a63fb9c966b61cf8f5305156de8420bc773a2b60828a2f32c3c5797bd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8436:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8450:4:181","type":""}],"src":"8285:353:181"},{"body":{"nodeType":"YulBlock","src":"8884:350:181","statements":[{"nodeType":"YulAssignment","src":"8894:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8906:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8917:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8902:3:181"},"nodeType":"YulFunctionCall","src":"8902:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8894:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8937:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"8948:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8930:6:181"},"nodeType":"YulFunctionCall","src":"8930:25:181"},"nodeType":"YulExpressionStatement","src":"8930:25:181"},{"nodeType":"YulVariableDeclaration","src":"8964:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8982:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"8987:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8978:3:181"},"nodeType":"YulFunctionCall","src":"8978:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"8991:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8974:3:181"},"nodeType":"YulFunctionCall","src":"8974:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8968:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9013:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9024:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9009:3:181"},"nodeType":"YulFunctionCall","src":"9009:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9033:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9041:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9029:3:181"},"nodeType":"YulFunctionCall","src":"9029:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9002:6:181"},"nodeType":"YulFunctionCall","src":"9002:43:181"},"nodeType":"YulExpressionStatement","src":"9002:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9065:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9076:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9061:3:181"},"nodeType":"YulFunctionCall","src":"9061:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"9085:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9093:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9081:3:181"},"nodeType":"YulFunctionCall","src":"9081:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9054:6:181"},"nodeType":"YulFunctionCall","src":"9054:43:181"},"nodeType":"YulExpressionStatement","src":"9054:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9117:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9128:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9113:3:181"},"nodeType":"YulFunctionCall","src":"9113:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"9133:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9106:6:181"},"nodeType":"YulFunctionCall","src":"9106:34:181"},"nodeType":"YulExpressionStatement","src":"9106:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9160:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9171:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9156:3:181"},"nodeType":"YulFunctionCall","src":"9156:19:181"},{"name":"value4","nodeType":"YulIdentifier","src":"9177:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9149:6:181"},"nodeType":"YulFunctionCall","src":"9149:35:181"},"nodeType":"YulExpressionStatement","src":"9149:35:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9204:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9215:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9200:3:181"},"nodeType":"YulFunctionCall","src":"9200:19:181"},{"name":"value5","nodeType":"YulIdentifier","src":"9221:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9193:6:181"},"nodeType":"YulFunctionCall","src":"9193:35:181"},"nodeType":"YulExpressionStatement","src":"9193:35:181"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8813:9:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"8824:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"8832:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"8840:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8848:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8856:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8864:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8875:4:181","type":""}],"src":"8643:591:181"},{"body":{"nodeType":"YulBlock","src":"9413:180:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9430:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9441:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9423:6:181"},"nodeType":"YulFunctionCall","src":"9423:21:181"},"nodeType":"YulExpressionStatement","src":"9423:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9464:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9475:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9460:3:181"},"nodeType":"YulFunctionCall","src":"9460:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9480:2:181","type":"","value":"30"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9453:6:181"},"nodeType":"YulFunctionCall","src":"9453:30:181"},"nodeType":"YulExpressionStatement","src":"9453:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9503:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9514:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9499:3:181"},"nodeType":"YulFunctionCall","src":"9499:18:181"},{"hexValue":"45524332305065726d69743a20696e76616c6964207369676e6174757265","kind":"string","nodeType":"YulLiteral","src":"9519:32:181","type":"","value":"ERC20Permit: invalid signature"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9492:6:181"},"nodeType":"YulFunctionCall","src":"9492:60:181"},"nodeType":"YulExpressionStatement","src":"9492:60:181"},{"nodeType":"YulAssignment","src":"9561:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9573:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9584:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9569:3:181"},"nodeType":"YulFunctionCall","src":"9569:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9561:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_94ca1ab58dfda790a1782ffbb0c0a140ec51d4148dbeecc6c39e37b25ff4b124__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9390:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9404:4:181","type":""}],"src":"9239:354:181"},{"body":{"nodeType":"YulBlock","src":"9772:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9789:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9800:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9782:6:181"},"nodeType":"YulFunctionCall","src":"9782:21:181"},"nodeType":"YulExpressionStatement","src":"9782:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9823:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9834:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9819:3:181"},"nodeType":"YulFunctionCall","src":"9819:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9839:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9812:6:181"},"nodeType":"YulFunctionCall","src":"9812:30:181"},"nodeType":"YulExpressionStatement","src":"9812:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9862:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9873:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9858:3:181"},"nodeType":"YulFunctionCall","src":"9858:18:181"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"9878:34:181","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9851:6:181"},"nodeType":"YulFunctionCall","src":"9851:62:181"},"nodeType":"YulExpressionStatement","src":"9851:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9933:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9944:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9929:3:181"},"nodeType":"YulFunctionCall","src":"9929:18:181"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"9949:8:181","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9922:6:181"},"nodeType":"YulFunctionCall","src":"9922:36:181"},"nodeType":"YulExpressionStatement","src":"9922:36:181"},{"nodeType":"YulAssignment","src":"9967:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9979:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9990:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9975:3:181"},"nodeType":"YulFunctionCall","src":"9975:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9967:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9749:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9763:4:181","type":""}],"src":"9598:402:181"},{"body":{"nodeType":"YulBlock","src":"10179:226:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10196:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10207:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10189:6:181"},"nodeType":"YulFunctionCall","src":"10189:21:181"},"nodeType":"YulExpressionStatement","src":"10189:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10230:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10241:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10226:3:181"},"nodeType":"YulFunctionCall","src":"10226:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10246:2:181","type":"","value":"36"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10219:6:181"},"nodeType":"YulFunctionCall","src":"10219:30:181"},"nodeType":"YulExpressionStatement","src":"10219:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10269:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10280:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10265:3:181"},"nodeType":"YulFunctionCall","src":"10265:18:181"},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f20616464","kind":"string","nodeType":"YulLiteral","src":"10285:34:181","type":"","value":"ERC20: approve from the zero add"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10258:6:181"},"nodeType":"YulFunctionCall","src":"10258:62:181"},"nodeType":"YulExpressionStatement","src":"10258:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10340:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10351:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10336:3:181"},"nodeType":"YulFunctionCall","src":"10336:18:181"},{"hexValue":"72657373","kind":"string","nodeType":"YulLiteral","src":"10356:6:181","type":"","value":"ress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10329:6:181"},"nodeType":"YulFunctionCall","src":"10329:34:181"},"nodeType":"YulExpressionStatement","src":"10329:34:181"},{"nodeType":"YulAssignment","src":"10372:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10384:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10395:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10380:3:181"},"nodeType":"YulFunctionCall","src":"10380:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10372:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10156:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10170:4:181","type":""}],"src":"10005:400:181"},{"body":{"nodeType":"YulBlock","src":"10584:224:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10601:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10612:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10594:6:181"},"nodeType":"YulFunctionCall","src":"10594:21:181"},"nodeType":"YulExpressionStatement","src":"10594:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10635:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10646:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10631:3:181"},"nodeType":"YulFunctionCall","src":"10631:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10651:2:181","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10624:6:181"},"nodeType":"YulFunctionCall","src":"10624:30:181"},"nodeType":"YulExpressionStatement","src":"10624:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10674:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10685:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10670:3:181"},"nodeType":"YulFunctionCall","src":"10670:18:181"},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f206164647265","kind":"string","nodeType":"YulLiteral","src":"10690:34:181","type":"","value":"ERC20: approve to the zero addre"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10663:6:181"},"nodeType":"YulFunctionCall","src":"10663:62:181"},"nodeType":"YulExpressionStatement","src":"10663:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10745:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10756:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10741:3:181"},"nodeType":"YulFunctionCall","src":"10741:18:181"},{"hexValue":"7373","kind":"string","nodeType":"YulLiteral","src":"10761:4:181","type":"","value":"ss"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10734:6:181"},"nodeType":"YulFunctionCall","src":"10734:32:181"},"nodeType":"YulExpressionStatement","src":"10734:32:181"},{"nodeType":"YulAssignment","src":"10775:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10787:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10798:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10783:3:181"},"nodeType":"YulFunctionCall","src":"10783:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10775:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10561:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10575:4:181","type":""}],"src":"10410:398:181"},{"body":{"nodeType":"YulBlock","src":"10987:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11004:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11015:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10997:6:181"},"nodeType":"YulFunctionCall","src":"10997:21:181"},"nodeType":"YulExpressionStatement","src":"10997:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11038:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11049:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11034:3:181"},"nodeType":"YulFunctionCall","src":"11034:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11054:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11027:6:181"},"nodeType":"YulFunctionCall","src":"11027:30:181"},"nodeType":"YulExpressionStatement","src":"11027:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11077:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11088:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11073:3:181"},"nodeType":"YulFunctionCall","src":"11073:18:181"},{"hexValue":"45524332303a20696e73756666696369656e7420616c6c6f77616e6365","kind":"string","nodeType":"YulLiteral","src":"11093:31:181","type":"","value":"ERC20: insufficient allowance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11066:6:181"},"nodeType":"YulFunctionCall","src":"11066:59:181"},"nodeType":"YulExpressionStatement","src":"11066:59:181"},{"nodeType":"YulAssignment","src":"11134:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11146:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11157:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11142:3:181"},"nodeType":"YulFunctionCall","src":"11142:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11134:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10964:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10978:4:181","type":""}],"src":"10813:353:181"},{"body":{"nodeType":"YulBlock","src":"11345:227:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11362:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11373:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11355:6:181"},"nodeType":"YulFunctionCall","src":"11355:21:181"},"nodeType":"YulExpressionStatement","src":"11355:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11396:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11407:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11392:3:181"},"nodeType":"YulFunctionCall","src":"11392:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11412:2:181","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11385:6:181"},"nodeType":"YulFunctionCall","src":"11385:30:181"},"nodeType":"YulExpressionStatement","src":"11385:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11435:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11446:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11431:3:181"},"nodeType":"YulFunctionCall","src":"11431:18:181"},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f206164","kind":"string","nodeType":"YulLiteral","src":"11451:34:181","type":"","value":"ERC20: transfer from the zero ad"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11424:6:181"},"nodeType":"YulFunctionCall","src":"11424:62:181"},"nodeType":"YulExpressionStatement","src":"11424:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11506:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11517:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11502:3:181"},"nodeType":"YulFunctionCall","src":"11502:18:181"},{"hexValue":"6472657373","kind":"string","nodeType":"YulLiteral","src":"11522:7:181","type":"","value":"dress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11495:6:181"},"nodeType":"YulFunctionCall","src":"11495:35:181"},"nodeType":"YulExpressionStatement","src":"11495:35:181"},{"nodeType":"YulAssignment","src":"11539:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11551:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11562:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11547:3:181"},"nodeType":"YulFunctionCall","src":"11547:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11539:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11322:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11336:4:181","type":""}],"src":"11171:401:181"},{"body":{"nodeType":"YulBlock","src":"11751:225:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11768:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11779:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11761:6:181"},"nodeType":"YulFunctionCall","src":"11761:21:181"},"nodeType":"YulExpressionStatement","src":"11761:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11802:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11813:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11798:3:181"},"nodeType":"YulFunctionCall","src":"11798:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11818:2:181","type":"","value":"35"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11791:6:181"},"nodeType":"YulFunctionCall","src":"11791:30:181"},"nodeType":"YulExpressionStatement","src":"11791:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11841:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11852:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11837:3:181"},"nodeType":"YulFunctionCall","src":"11837:18:181"},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472","kind":"string","nodeType":"YulLiteral","src":"11857:34:181","type":"","value":"ERC20: transfer to the zero addr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11830:6:181"},"nodeType":"YulFunctionCall","src":"11830:62:181"},"nodeType":"YulExpressionStatement","src":"11830:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11912:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11923:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11908:3:181"},"nodeType":"YulFunctionCall","src":"11908:18:181"},{"hexValue":"657373","kind":"string","nodeType":"YulLiteral","src":"11928:5:181","type":"","value":"ess"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11901:6:181"},"nodeType":"YulFunctionCall","src":"11901:33:181"},"nodeType":"YulExpressionStatement","src":"11901:33:181"},{"nodeType":"YulAssignment","src":"11943:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11955:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11966:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11951:3:181"},"nodeType":"YulFunctionCall","src":"11951:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11943:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11728:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11742:4:181","type":""}],"src":"11577:399:181"},{"body":{"nodeType":"YulBlock","src":"12155:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12172:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12183:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12165:6:181"},"nodeType":"YulFunctionCall","src":"12165:21:181"},"nodeType":"YulExpressionStatement","src":"12165:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12206:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12217:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12202:3:181"},"nodeType":"YulFunctionCall","src":"12202:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12222:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12195:6:181"},"nodeType":"YulFunctionCall","src":"12195:30:181"},"nodeType":"YulExpressionStatement","src":"12195:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12245:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12256:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12241:3:181"},"nodeType":"YulFunctionCall","src":"12241:18:181"},{"hexValue":"45524332303a207472616e7366657220616d6f756e7420657863656564732062","kind":"string","nodeType":"YulLiteral","src":"12261:34:181","type":"","value":"ERC20: transfer amount exceeds b"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12234:6:181"},"nodeType":"YulFunctionCall","src":"12234:62:181"},"nodeType":"YulExpressionStatement","src":"12234:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12316:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12327:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12312:3:181"},"nodeType":"YulFunctionCall","src":"12312:18:181"},{"hexValue":"616c616e6365","kind":"string","nodeType":"YulLiteral","src":"12332:8:181","type":"","value":"alance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12305:6:181"},"nodeType":"YulFunctionCall","src":"12305:36:181"},"nodeType":"YulExpressionStatement","src":"12305:36:181"},{"nodeType":"YulAssignment","src":"12350:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12362:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12373:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12358:3:181"},"nodeType":"YulFunctionCall","src":"12358:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12350:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12132:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12146:4:181","type":""}],"src":"11981:402:181"},{"body":{"nodeType":"YulBlock","src":"12562:182:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12579:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12590:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12572:6:181"},"nodeType":"YulFunctionCall","src":"12572:21:181"},"nodeType":"YulExpressionStatement","src":"12572:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12613:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12624:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12609:3:181"},"nodeType":"YulFunctionCall","src":"12609:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12629:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12602:6:181"},"nodeType":"YulFunctionCall","src":"12602:30:181"},"nodeType":"YulExpressionStatement","src":"12602:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12652:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12663:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12648:3:181"},"nodeType":"YulFunctionCall","src":"12648:18:181"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"12668:34:181","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12641:6:181"},"nodeType":"YulFunctionCall","src":"12641:62:181"},"nodeType":"YulExpressionStatement","src":"12641:62:181"},{"nodeType":"YulAssignment","src":"12712:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12724:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12735:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12720:3:181"},"nodeType":"YulFunctionCall","src":"12720:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12712:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12539:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12553:4:181","type":""}],"src":"12388:356:181"},{"body":{"nodeType":"YulBlock","src":"12923:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12940:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12951:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12933:6:181"},"nodeType":"YulFunctionCall","src":"12933:21:181"},"nodeType":"YulExpressionStatement","src":"12933:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12974:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12985:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12970:3:181"},"nodeType":"YulFunctionCall","src":"12970:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12990:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12963:6:181"},"nodeType":"YulFunctionCall","src":"12963:30:181"},"nodeType":"YulExpressionStatement","src":"12963:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13013:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13024:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13009:3:181"},"nodeType":"YulFunctionCall","src":"13009:18:181"},{"hexValue":"45524332303a206d696e7420746f20746865207a65726f2061646472657373","kind":"string","nodeType":"YulLiteral","src":"13029:33:181","type":"","value":"ERC20: mint to the zero address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13002:6:181"},"nodeType":"YulFunctionCall","src":"13002:61:181"},"nodeType":"YulExpressionStatement","src":"13002:61:181"},{"nodeType":"YulAssignment","src":"13072:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13084:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13095:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13080:3:181"},"nodeType":"YulFunctionCall","src":"13080:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13072:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12900:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12914:4:181","type":""}],"src":"12749:355:181"},{"body":{"nodeType":"YulBlock","src":"13283:223:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13300:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13311:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13293:6:181"},"nodeType":"YulFunctionCall","src":"13293:21:181"},"nodeType":"YulExpressionStatement","src":"13293:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13334:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13345:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13330:3:181"},"nodeType":"YulFunctionCall","src":"13330:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13350:2:181","type":"","value":"33"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13323:6:181"},"nodeType":"YulFunctionCall","src":"13323:30:181"},"nodeType":"YulExpressionStatement","src":"13323:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13373:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13384:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13369:3:181"},"nodeType":"YulFunctionCall","src":"13369:18:181"},{"hexValue":"45524332303a206275726e2066726f6d20746865207a65726f20616464726573","kind":"string","nodeType":"YulLiteral","src":"13389:34:181","type":"","value":"ERC20: burn from the zero addres"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13362:6:181"},"nodeType":"YulFunctionCall","src":"13362:62:181"},"nodeType":"YulExpressionStatement","src":"13362:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13444:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13455:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13440:3:181"},"nodeType":"YulFunctionCall","src":"13440:18:181"},{"hexValue":"73","kind":"string","nodeType":"YulLiteral","src":"13460:3:181","type":"","value":"s"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13433:6:181"},"nodeType":"YulFunctionCall","src":"13433:31:181"},"nodeType":"YulExpressionStatement","src":"13433:31:181"},{"nodeType":"YulAssignment","src":"13473:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13485:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13496:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13481:3:181"},"nodeType":"YulFunctionCall","src":"13481:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13473:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13260:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13274:4:181","type":""}],"src":"13109:397:181"},{"body":{"nodeType":"YulBlock","src":"13685:224:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13702:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13713:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13695:6:181"},"nodeType":"YulFunctionCall","src":"13695:21:181"},"nodeType":"YulExpressionStatement","src":"13695:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13736:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13747:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13732:3:181"},"nodeType":"YulFunctionCall","src":"13732:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13752:2:181","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13725:6:181"},"nodeType":"YulFunctionCall","src":"13725:30:181"},"nodeType":"YulExpressionStatement","src":"13725:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13775:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13786:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13771:3:181"},"nodeType":"YulFunctionCall","src":"13771:18:181"},{"hexValue":"45524332303a206275726e20616d6f756e7420657863656564732062616c616e","kind":"string","nodeType":"YulLiteral","src":"13791:34:181","type":"","value":"ERC20: burn amount exceeds balan"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13764:6:181"},"nodeType":"YulFunctionCall","src":"13764:62:181"},"nodeType":"YulExpressionStatement","src":"13764:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13846:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13857:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13842:3:181"},"nodeType":"YulFunctionCall","src":"13842:18:181"},{"hexValue":"6365","kind":"string","nodeType":"YulLiteral","src":"13862:4:181","type":"","value":"ce"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13835:6:181"},"nodeType":"YulFunctionCall","src":"13835:32:181"},"nodeType":"YulExpressionStatement","src":"13835:32:181"},{"nodeType":"YulAssignment","src":"13876:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13888:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13899:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13884:3:181"},"nodeType":"YulFunctionCall","src":"13884:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13876:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13662:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13676:4:181","type":""}],"src":"13511:398:181"},{"body":{"nodeType":"YulBlock","src":"14127:276:181","statements":[{"nodeType":"YulAssignment","src":"14137:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14149:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14160:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14145:3:181"},"nodeType":"YulFunctionCall","src":"14145:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14137:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14180:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"14191:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14173:6:181"},"nodeType":"YulFunctionCall","src":"14173:25:181"},"nodeType":"YulExpressionStatement","src":"14173:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14218:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14229:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14214:3:181"},"nodeType":"YulFunctionCall","src":"14214:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"14234:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14207:6:181"},"nodeType":"YulFunctionCall","src":"14207:34:181"},"nodeType":"YulExpressionStatement","src":"14207:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14261:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14272:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14257:3:181"},"nodeType":"YulFunctionCall","src":"14257:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"14277:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14250:6:181"},"nodeType":"YulFunctionCall","src":"14250:34:181"},"nodeType":"YulExpressionStatement","src":"14250:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14304:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14315:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14300:3:181"},"nodeType":"YulFunctionCall","src":"14300:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"14320:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14293:6:181"},"nodeType":"YulFunctionCall","src":"14293:34:181"},"nodeType":"YulExpressionStatement","src":"14293:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14347:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14358:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14343:3:181"},"nodeType":"YulFunctionCall","src":"14343:19:181"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"14368:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14384:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"14389:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14380:3:181"},"nodeType":"YulFunctionCall","src":"14380:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"14393:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14376:3:181"},"nodeType":"YulFunctionCall","src":"14376:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14364:3:181"},"nodeType":"YulFunctionCall","src":"14364:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14336:6:181"},"nodeType":"YulFunctionCall","src":"14336:61:181"},"nodeType":"YulExpressionStatement","src":"14336:61:181"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14064:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14075:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14083:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14091:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14099:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14107:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14118:4:181","type":""}],"src":"13914:489:181"},{"body":{"nodeType":"YulBlock","src":"14656:144:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14673:3:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14682:3:181","type":"","value":"240"},{"kind":"number","nodeType":"YulLiteral","src":"14687:4:181","type":"","value":"6401"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14678:3:181"},"nodeType":"YulFunctionCall","src":"14678:14:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14666:6:181"},"nodeType":"YulFunctionCall","src":"14666:27:181"},"nodeType":"YulExpressionStatement","src":"14666:27:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14713:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"14718:1:181","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14709:3:181"},"nodeType":"YulFunctionCall","src":"14709:11:181"},{"name":"value0","nodeType":"YulIdentifier","src":"14722:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14702:6:181"},"nodeType":"YulFunctionCall","src":"14702:27:181"},"nodeType":"YulExpressionStatement","src":"14702:27:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14749:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"14754:2:181","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14745:3:181"},"nodeType":"YulFunctionCall","src":"14745:12:181"},{"name":"value1","nodeType":"YulIdentifier","src":"14759:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14738:6:181"},"nodeType":"YulFunctionCall","src":"14738:28:181"},"nodeType":"YulExpressionStatement","src":"14738:28:181"},{"nodeType":"YulAssignment","src":"14775:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14786:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"14791:2:181","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14782:3:181"},"nodeType":"YulFunctionCall","src":"14782:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"14775:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"14624:3:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14629:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14637:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"14648:3:181","type":""}],"src":"14408:392:181"},{"body":{"nodeType":"YulBlock","src":"14986:217:181","statements":[{"nodeType":"YulAssignment","src":"14996:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15008:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15019:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15004:3:181"},"nodeType":"YulFunctionCall","src":"15004:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14996:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15039:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"15050:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15032:6:181"},"nodeType":"YulFunctionCall","src":"15032:25:181"},"nodeType":"YulExpressionStatement","src":"15032:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15077:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15088:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15073:3:181"},"nodeType":"YulFunctionCall","src":"15073:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"15097:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"15105:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15093:3:181"},"nodeType":"YulFunctionCall","src":"15093:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15066:6:181"},"nodeType":"YulFunctionCall","src":"15066:45:181"},"nodeType":"YulExpressionStatement","src":"15066:45:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15131:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15142:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15127:3:181"},"nodeType":"YulFunctionCall","src":"15127:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"15147:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15120:6:181"},"nodeType":"YulFunctionCall","src":"15120:34:181"},"nodeType":"YulExpressionStatement","src":"15120:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15174:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15185:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15170:3:181"},"nodeType":"YulFunctionCall","src":"15170:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"15190:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15163:6:181"},"nodeType":"YulFunctionCall","src":"15163:34:181"},"nodeType":"YulExpressionStatement","src":"15163:34:181"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14931:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14942:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14950:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14958:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14966:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14977:4:181","type":""}],"src":"14805:398:181"},{"body":{"nodeType":"YulBlock","src":"15240:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15257:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15264:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"15269:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"15260:3:181"},"nodeType":"YulFunctionCall","src":"15260:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15250:6:181"},"nodeType":"YulFunctionCall","src":"15250:31:181"},"nodeType":"YulExpressionStatement","src":"15250:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15297:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"15300:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15290:6:181"},"nodeType":"YulFunctionCall","src":"15290:15:181"},"nodeType":"YulExpressionStatement","src":"15290:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15321:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15324:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15314:6:181"},"nodeType":"YulFunctionCall","src":"15314:15:181"},"nodeType":"YulExpressionStatement","src":"15314:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"15208:127:181"},{"body":{"nodeType":"YulBlock","src":"15514:174:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15531:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15542:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15524:6:181"},"nodeType":"YulFunctionCall","src":"15524:21:181"},"nodeType":"YulExpressionStatement","src":"15524:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15565:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15576:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15561:3:181"},"nodeType":"YulFunctionCall","src":"15561:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15581:2:181","type":"","value":"24"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15554:6:181"},"nodeType":"YulFunctionCall","src":"15554:30:181"},"nodeType":"YulExpressionStatement","src":"15554:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15604:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15615:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15600:3:181"},"nodeType":"YulFunctionCall","src":"15600:18:181"},{"hexValue":"45434453413a20696e76616c6964207369676e6174757265","kind":"string","nodeType":"YulLiteral","src":"15620:26:181","type":"","value":"ECDSA: invalid signature"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15593:6:181"},"nodeType":"YulFunctionCall","src":"15593:54:181"},"nodeType":"YulExpressionStatement","src":"15593:54:181"},{"nodeType":"YulAssignment","src":"15656:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15668:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15679:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15664:3:181"},"nodeType":"YulFunctionCall","src":"15664:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15656:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15491:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15505:4:181","type":""}],"src":"15340:348:181"},{"body":{"nodeType":"YulBlock","src":"15867:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15884:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15895:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15877:6:181"},"nodeType":"YulFunctionCall","src":"15877:21:181"},"nodeType":"YulExpressionStatement","src":"15877:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15918:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15929:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15914:3:181"},"nodeType":"YulFunctionCall","src":"15914:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15934:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15907:6:181"},"nodeType":"YulFunctionCall","src":"15907:30:181"},"nodeType":"YulExpressionStatement","src":"15907:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15957:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15968:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15953:3:181"},"nodeType":"YulFunctionCall","src":"15953:18:181"},{"hexValue":"45434453413a20696e76616c6964207369676e6174757265206c656e677468","kind":"string","nodeType":"YulLiteral","src":"15973:33:181","type":"","value":"ECDSA: invalid signature length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15946:6:181"},"nodeType":"YulFunctionCall","src":"15946:61:181"},"nodeType":"YulExpressionStatement","src":"15946:61:181"},{"nodeType":"YulAssignment","src":"16016:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16028:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16039:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16024:3:181"},"nodeType":"YulFunctionCall","src":"16024:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16016:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15844:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15858:4:181","type":""}],"src":"15693:355:181"},{"body":{"nodeType":"YulBlock","src":"16227:224:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16244:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16255:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16237:6:181"},"nodeType":"YulFunctionCall","src":"16237:21:181"},"nodeType":"YulExpressionStatement","src":"16237:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16278:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16289:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16274:3:181"},"nodeType":"YulFunctionCall","src":"16274:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16294:2:181","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16267:6:181"},"nodeType":"YulFunctionCall","src":"16267:30:181"},"nodeType":"YulExpressionStatement","src":"16267:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16317:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16328:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16313:3:181"},"nodeType":"YulFunctionCall","src":"16313:18:181"},{"hexValue":"45434453413a20696e76616c6964207369676e6174757265202773272076616c","kind":"string","nodeType":"YulLiteral","src":"16333:34:181","type":"","value":"ECDSA: invalid signature 's' val"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16306:6:181"},"nodeType":"YulFunctionCall","src":"16306:62:181"},"nodeType":"YulExpressionStatement","src":"16306:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16388:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16399:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16384:3:181"},"nodeType":"YulFunctionCall","src":"16384:18:181"},{"hexValue":"7565","kind":"string","nodeType":"YulLiteral","src":"16404:4:181","type":"","value":"ue"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16377:6:181"},"nodeType":"YulFunctionCall","src":"16377:32:181"},"nodeType":"YulExpressionStatement","src":"16377:32:181"},{"nodeType":"YulAssignment","src":"16418:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16430:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16441:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16426:3:181"},"nodeType":"YulFunctionCall","src":"16426:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16418:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16204:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16218:4:181","type":""}],"src":"16053:398:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        mstore(add(add(headStart, length), 64), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_string_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_string_calldata_ptrt_string_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_string_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_string_calldata(add(headStart, offset_1), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let value := calldataload(add(headStart, 128))\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value4 := value\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: decreased allowance below\")\n        mstore(add(headStart, 96), \" zero\")\n        tail := add(headStart, 128)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function array_dataslot_string_storage(ptr) -> data\n    {\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n    }\n    function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n    {\n        if gt(len, 31)\n        {\n            let _1 := 0\n            mstore(_1, array)\n            let data := keccak256(_1, 0x20)\n            let deleteStart := add(data, shr(5, add(startIndex, 31)))\n            if lt(startIndex, 0x20) { deleteStart := data }\n            let _2 := add(data, shr(5, add(len, 31)))\n            let start := deleteStart\n            for { } lt(start, _2) { start := add(start, 1) }\n            { sstore(start, _1) }\n        }\n    }\n    function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n    {\n        used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n    }\n    function copy_byte_array_to_storage_from_t_string_calldata_ptr_to_t_string_storage(slot, src, len)\n    {\n        if gt(len, 0xffffffffffffffff) { panic_error_0x41() }\n        clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), len)\n        let srcOffset := 0\n        switch gt(len, 31)\n        case 1 {\n            let loopEnd := and(len, not(31))\n            let dstPtr := array_dataslot_string_storage(slot)\n            let i := srcOffset\n            for { } lt(i, loopEnd) { i := add(i, 0x20) }\n            {\n                sstore(dstPtr, calldataload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, 0x20)\n            }\n            if lt(loopEnd, len)\n            {\n                sstore(dstPtr, and(calldataload(add(src, srcOffset)), not(shr(and(shl(3, len), 248), not(0)))))\n            }\n            sstore(slot, add(shl(1, len), 1))\n        }\n        default {\n            let value := 0\n            if len\n            {\n                value := calldataload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, len))\n        }\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function abi_encode_tuple_packed_t_string_calldata_ptr__to_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function abi_encode_tuple_t_stringliteral_3e89525a63fb9c966b61cf8f5305156de8420bc773a2b60828a2f32c3c5797bd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"ERC20Permit: expired deadline\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_t_stringliteral_94ca1ab58dfda790a1782ffbb0c0a140ec51d4148dbeecc6c39e37b25ff4b124__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 30)\n        mstore(add(headStart, 64), \"ERC20Permit: invalid signature\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"ERC20: approve from the zero add\")\n        mstore(add(headStart, 96), \"ress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: approve to the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"ERC20: insufficient allowance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: transfer from the zero ad\")\n        mstore(add(headStart, 96), \"dress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"ERC20: transfer to the zero addr\")\n        mstore(add(headStart, 96), \"ess\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"ERC20: transfer amount exceeds b\")\n        mstore(add(headStart, 96), \"alance\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ERC20: mint to the zero address\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"ERC20: burn from the zero addres\")\n        mstore(add(headStart, 96), \"s\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: burn amount exceeds balan\")\n        mstore(add(headStart, 96), \"ce\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, shl(240, 6401))\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature 's' val\")\n        mstore(add(headStart, 96), \"ue\")\n        tail := add(headStart, 128)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"23235":[{"length":32,"start":2895}],"23237":[{"length":32,"start":2853}],"23241":[{"length":32,"start":1344},{"length":32,"start":2982}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061012c5760003560e01c80637ecebe00116100ad578063a9059cbb11610071578063a9059cbb14610269578063b7b090ee1461027c578063d505accf1461028f578063dd62ed3e146102a2578063f2fde38b146102b557600080fd5b80637ecebe001461020d5780638da5cb5b1461022057806395d89b411461023b5780639dc29fac14610243578063a457c2d71461025657600080fd5b80633644e515116100f45780633644e515146101ac57806339509351146101b457806340c10f19146101c757806370a08231146101dc578063715018a61461020557600080fd5b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017257806323b872dd14610184578063313ce56714610197575b600080fd5b6101396102c8565b604051610146919061115b565b60405180910390f35b61016261015d3660046111c5565b61035a565b6040519015158152602001610146565b6003545b604051908152602001610146565b6101626101923660046111ef565b610371565b60065460405160ff9091168152602001610146565b610176610393565b6101626101c23660046111c5565b6103a2565b6101da6101d53660046111c5565b6103de565b005b6101766101ea36600461122b565b6001600160a01b031660009081526001602052604090205490565b6101da6103f4565b61017661021b36600461122b565b610408565b6000546040516001600160a01b039091168152602001610146565b610139610426565b6101da6102513660046111c5565b610435565b6101626102643660046111c5565b610447565b6101626102773660046111c5565b6104c6565b6101da61028a366004611296565b6104d3565b6101da61029d366004611302565b6105c6565b6101766102b0366004611375565b61072a565b6101da6102c336600461122b565b610755565b6060600480546102d7906113a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610303906113a8565b80156103505780601f1061032557610100808354040283529160200191610350565b820191906000526020600020905b81548152906001019060200180831161033357829003601f168201915b5050505050905090565b60006103673384846107ce565b5060015b92915050565b600061037e8433846108f3565b61038984848461096d565b5060019392505050565b600061039d610b18565b905090565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916103679185906103d99086906113dc565b6107ce565b6103e6610bca565b6103f08282610c24565b5050565b6103fc610bca565b6104066000610ce5565b565b6001600160a01b03811660009081526007602052604081205461036b565b6060600580546102d7906113a8565b61043d610bca565b6103f08282610d35565b600080610454338561072a565b9050828110156104b95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61038933858584036107ce565b600061036733848461096d565b6104db610bca565b60046104e8848683611461565b5060056104f6828483611461565b5060008484604051610509929190611522565b604051908190039020600981905590506105647f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f827f0000000000000000000000000000000000000000000000000000000000000000610e66565b6008556040516105779084908490611522565b6040518091039020858560405161058f929190611522565b604051908190038120907f1ec4c73af923253fb2c28a509dd78d342709289a09929d78c64c0b8e047efbcd90600090a35050505050565b834211156106165760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104b0565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886106458c610eaf565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106a082610ed7565b905060006106b082878787610f25565b9050896001600160a01b0316816001600160a01b0316146107135760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104b0565b61071e8a8a8a6107ce565b50505050505050505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b61075d610bca565b6001600160a01b0381166107c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104b0565b6107cb81610ce5565b50565b6001600160a01b0383166108305760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104b0565b6001600160a01b0382166108915760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104b0565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006108ff848461072a565b90506000198114610967578181101561095a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104b0565b61096784848484036107ce565b50505050565b6001600160a01b0383166109d15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104b0565b6001600160a01b038216610a335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104b0565b6001600160a01b03831660009081526001602052604090205481811015610aab5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104b0565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b0b9086815260200190565b60405180910390a3610967565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b7157507f000000000000000000000000000000000000000000000000000000000000000046145b15610b7d575060085490565b61039d7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6009547f0000000000000000000000000000000000000000000000000000000000000000610e66565b6000546001600160a01b031633146104065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b0565b6001600160a01b038216610c7a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104b0565b8060036000828254610c8c91906113dc565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216610d955760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104b0565b6001600160a01b03821660009081526001602052604090205481811015610e095760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104b0565b6001600160a01b03831660008181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016108e6565b505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b600061036b610ee4610b18565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610f3687878787610f4d565b91509150610f4381611011565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610f845750600090506003611008565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610fd8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661100157600060019250925050611008565b9150600090505b94509492505050565b600081600481111561102557611025611532565b0361102d5750565b600181600481111561104157611041611532565b0361108e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104b0565b60028160048111156110a2576110a2611532565b036110ef5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104b0565b600381600481111561110357611103611532565b036107cb5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104b0565b600060208083528351808285015260005b818110156111885785810183015185820160400152820161116c565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146111c057600080fd5b919050565b600080604083850312156111d857600080fd5b6111e1836111a9565b946020939093013593505050565b60008060006060848603121561120457600080fd5b61120d846111a9565b925061121b602085016111a9565b9150604084013590509250925092565b60006020828403121561123d57600080fd5b611246826111a9565b9392505050565b60008083601f84011261125f57600080fd5b50813567ffffffffffffffff81111561127757600080fd5b60208301915083602082850101111561128f57600080fd5b9250929050565b600080600080604085870312156112ac57600080fd5b843567ffffffffffffffff808211156112c457600080fd5b6112d08883890161124d565b909650945060208701359150808211156112e957600080fd5b506112f68782880161124d565b95989497509550505050565b600080600080600080600060e0888a03121561131d57600080fd5b611326886111a9565b9650611334602089016111a9565b95506040880135945060608801359350608088013560ff8116811461135857600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561138857600080fd5b611391836111a9565b915061139f602084016111a9565b90509250929050565b600181811c908216806113bc57607f821691505b602082108103610ed157634e487b7160e01b600052602260045260246000fd5b8082018082111561036b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b601f821115610e6157600081815260208120601f850160051c8101602086101561143a5750805b601f850160051c820191505b8181101561145957828155600101611446565b505050505050565b67ffffffffffffffff831115611479576114796113fd565b61148d8361148783546113a8565b83611413565b6000601f8411600181146114c157600085156114a95750838201355b600019600387901b1c1916600186901b17835561151b565b600083815260209020601f19861690835b828110156114f257868501358255602094850194600190920191016114d2565b508682101561150f5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8183823760009101908152919050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212208113c928e03165e19b5c7ac5b67b85c32ab586cd042677306fbd142d27afccf664736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x12C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x269 JUMPI DUP1 PUSH4 0xB7B090EE EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2A2 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x2B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x220 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x23B JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x243 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3644E515 GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1B4 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x1C7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1DC JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x205 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x131 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x14F JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x172 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x184 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x197 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x139 PUSH2 0x2C8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x146 SWAP2 SWAP1 PUSH2 0x115B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH2 0x15D CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x35A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x146 JUMP JUMPDEST PUSH1 0x3 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x146 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x192 CALLDATASIZE PUSH1 0x4 PUSH2 0x11EF JUMP JUMPDEST PUSH2 0x371 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x146 JUMP JUMPDEST PUSH2 0x176 PUSH2 0x393 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x1C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x3A2 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x1D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x3DE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x176 PUSH2 0x1EA CALLDATASIZE PUSH1 0x4 PUSH2 0x122B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x3F4 JUMP JUMPDEST PUSH2 0x176 PUSH2 0x21B CALLDATASIZE PUSH1 0x4 PUSH2 0x122B JUMP JUMPDEST PUSH2 0x408 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x146 JUMP JUMPDEST PUSH2 0x139 PUSH2 0x426 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x251 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x435 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x264 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x447 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x277 CALLDATASIZE PUSH1 0x4 PUSH2 0x11C5 JUMP JUMPDEST PUSH2 0x4C6 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x28A CALLDATASIZE PUSH1 0x4 PUSH2 0x1296 JUMP JUMPDEST PUSH2 0x4D3 JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x29D CALLDATASIZE PUSH1 0x4 PUSH2 0x1302 JUMP JUMPDEST PUSH2 0x5C6 JUMP JUMPDEST PUSH2 0x176 PUSH2 0x2B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1375 JUMP JUMPDEST PUSH2 0x72A JUMP JUMPDEST PUSH2 0x1DA PUSH2 0x2C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x122B JUMP JUMPDEST PUSH2 0x755 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x2D7 SWAP1 PUSH2 0x13A8 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x303 SWAP1 PUSH2 0x13A8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x350 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x325 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x350 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x333 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x367 CALLER DUP5 DUP5 PUSH2 0x7CE JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E DUP5 CALLER DUP5 PUSH2 0x8F3 JUMP JUMPDEST PUSH2 0x389 DUP5 DUP5 DUP5 PUSH2 0x96D JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39D PUSH2 0xB18 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x367 SWAP2 DUP6 SWAP1 PUSH2 0x3D9 SWAP1 DUP7 SWAP1 PUSH2 0x13DC JUMP JUMPDEST PUSH2 0x7CE JUMP JUMPDEST PUSH2 0x3E6 PUSH2 0xBCA JUMP JUMPDEST PUSH2 0x3F0 DUP3 DUP3 PUSH2 0xC24 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x3FC PUSH2 0xBCA JUMP JUMPDEST PUSH2 0x406 PUSH1 0x0 PUSH2 0xCE5 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x36B JUMP JUMPDEST PUSH1 0x60 PUSH1 0x5 DUP1 SLOAD PUSH2 0x2D7 SWAP1 PUSH2 0x13A8 JUMP JUMPDEST PUSH2 0x43D PUSH2 0xBCA JUMP JUMPDEST PUSH2 0x3F0 DUP3 DUP3 PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x454 CALLER DUP6 PUSH2 0x72A JUMP JUMPDEST SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0x4B9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x389 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x7CE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x367 CALLER DUP5 DUP5 PUSH2 0x96D JUMP JUMPDEST PUSH2 0x4DB PUSH2 0xBCA JUMP JUMPDEST PUSH1 0x4 PUSH2 0x4E8 DUP5 DUP7 DUP4 PUSH2 0x1461 JUMP JUMPDEST POP PUSH1 0x5 PUSH2 0x4F6 DUP3 DUP5 DUP4 PUSH2 0x1461 JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x509 SWAP3 SWAP2 SWAP1 PUSH2 0x1522 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB SWAP1 KECCAK256 PUSH1 0x9 DUP2 SWAP1 SSTORE SWAP1 POP PUSH2 0x564 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 PUSH32 0x0 PUSH2 0xE66 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH2 0x577 SWAP1 DUP5 SWAP1 DUP5 SWAP1 PUSH2 0x1522 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH2 0x58F SWAP3 SWAP2 SWAP1 PUSH2 0x1522 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB DUP2 KECCAK256 SWAP1 PUSH32 0x1EC4C73AF923253FB2C28A509DD78D342709289A09929D78C64C0B8E047EFBCD SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x616 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x645 DUP13 PUSH2 0xEAF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP1 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x6A0 DUP3 PUSH2 0xED7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x6B0 DUP3 DUP8 DUP8 DUP8 PUSH2 0xF25 JUMP JUMPDEST SWAP1 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x713 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH2 0x71E DUP11 DUP11 DUP11 PUSH2 0x7CE JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x75D PUSH2 0xBCA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7C2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH2 0x7CB DUP2 PUSH2 0xCE5 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x830 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x891 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8FF DUP5 DUP5 PUSH2 0x72A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x967 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x95A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH2 0x967 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x7CE JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x9D1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xA33 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0xAAB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE SWAP3 DUP7 AND DUP1 DUP3 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE SWAP2 MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0xB0B SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x967 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ DUP1 ISZERO PUSH2 0xB71 JUMPI POP PUSH32 0x0 CHAINID EQ JUMPDEST ISZERO PUSH2 0xB7D JUMPI POP PUSH1 0x8 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x39D PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH1 0x9 SLOAD PUSH32 0x0 PUSH2 0xE66 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x406 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xC7A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST DUP1 PUSH1 0x3 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0xC8C SWAP2 SWAP1 PUSH2 0x13DC JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE MLOAD DUP5 DUP2 MSTORE PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xD95 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E2066726F6D20746865207A65726F20616464726573 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x73 PUSH1 0xF8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0xE09 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E20616D6F756E7420657863656564732062616C616E PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD DUP8 SWAP1 SUB SWAP1 SSTORE MLOAD DUP6 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0x8E6 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP1 JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x36B PUSH2 0xEE4 PUSH2 0xB18 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH2 0x1901 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x22 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x42 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x62 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xF36 DUP8 DUP8 DUP8 DUP8 PUSH2 0xF4D JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xF43 DUP2 PUSH2 0x1011 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP4 GT ISZERO PUSH2 0xF84 JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x3 PUSH2 0x1008 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFD8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1001 JUMPI PUSH1 0x0 PUSH1 0x1 SWAP3 POP SWAP3 POP POP PUSH2 0x1008 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x1025 JUMPI PUSH2 0x1025 PUSH2 0x1532 JUMP JUMPDEST SUB PUSH2 0x102D JUMPI POP JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x1041 JUMPI PUSH2 0x1041 PUSH2 0x1532 JUMP JUMPDEST SUB PUSH2 0x108E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x10A2 JUMPI PUSH2 0x10A2 PUSH2 0x1532 JUMP JUMPDEST SUB PUSH2 0x10EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x1103 JUMPI PUSH2 0x1103 PUSH2 0x1532 JUMP JUMPDEST SUB PUSH2 0x7CB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4B0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1188 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x116C JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x11C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x11D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11E1 DUP4 PUSH2 0x11A9 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1204 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x120D DUP5 PUSH2 0x11A9 JUMP JUMPDEST SWAP3 POP PUSH2 0x121B PUSH1 0x20 DUP6 ADD PUSH2 0x11A9 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x123D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1246 DUP3 PUSH2 0x11A9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x125F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1277 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x128F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x12AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x12C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12D0 DUP9 DUP4 DUP10 ADD PUSH2 0x124D JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x12E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x12F6 DUP8 DUP3 DUP9 ADD PUSH2 0x124D JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x131D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1326 DUP9 PUSH2 0x11A9 JUMP JUMPDEST SWAP7 POP PUSH2 0x1334 PUSH1 0x20 DUP10 ADD PUSH2 0x11A9 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1358 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1391 DUP4 PUSH2 0x11A9 JUMP JUMPDEST SWAP2 POP PUSH2 0x139F PUSH1 0x20 DUP5 ADD PUSH2 0x11A9 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x13BC JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0xED1 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x36B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0xE61 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH2 0x143A JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1459 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1446 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x1479 JUMPI PUSH2 0x1479 PUSH2 0x13FD JUMP JUMPDEST PUSH2 0x148D DUP4 PUSH2 0x1487 DUP4 SLOAD PUSH2 0x13A8 JUMP JUMPDEST DUP4 PUSH2 0x1413 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP5 GT PUSH1 0x1 DUP2 EQ PUSH2 0x14C1 JUMPI PUSH1 0x0 DUP6 ISZERO PUSH2 0x14A9 JUMPI POP DUP4 DUP3 ADD CALLDATALOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP8 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP7 SWAP1 SHL OR DUP4 SSTORE PUSH2 0x151B JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP1 DUP4 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x14F2 JUMPI DUP7 DUP6 ADD CALLDATALOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x14D2 JUMP JUMPDEST POP DUP7 DUP3 LT ISZERO PUSH2 0x150F JUMPI PUSH1 0x0 NOT PUSH1 0xF8 DUP9 PUSH1 0x3 SHL AND SHR NOT DUP5 DUP8 ADD CALLDATALOAD AND DUP2 SSTORE JUMPDEST POP POP PUSH1 0x1 DUP6 PUSH1 0x1 SHL ADD DUP4 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 SGT 0xC9 0x28 0xE0 BALANCE PUSH6 0xE19B5C7AC5B6 PUSH28 0x85C32AB586CD042677306FBD142D27AFCCF664736F6C634300081100 CALLER ","sourceMap":"240:1884:81:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4849:92:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6956:154;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:181;;1162:22;1144:41;;1132:2;1117:18;6956:154:86;1004:187:181;5880:100:86;5963:12;;5880:100;;;1342:25:181;;;1330:2;1315:18;5880:100:86;1196:177:181;7552:249:86;;;;;;:::i;:::-;;:::i;5736:92::-;5814:9;;5736:92;;5814:9;;;;1853:36:181;;1841:2;1826:18;5736:92:86;1711:184:181;16523:107:86;;;:::i;8171:203::-;;;;;;:::i;:::-;;:::i;1466:98:81:-;;;;;;:::i;:::-;;:::i;:::-;;6030:119:86;;;;;;:::i;:::-;-1:-1:-1;;;;;6126:18:86;6104:7;6126:18;;;:9;:18;;;;;;;6030:119;1831:101:38;;;:::i;16247:122:86:-;;;;;;:::i;:::-;;:::i;1201:85:38:-;1247:7;1273:6;1201:85;;-1:-1:-1;;;;;1273:6:38;;;2419:51:181;;2407:2;2392:18;1201:85:38;2273:203:181;5044:96:86;;;:::i;1033:102:81:-;;;;;;:::i;:::-;;:::i;8834:377:86:-;;;;;;:::i;:::-;;:::i;6327:146::-;;;;;;:::i;:::-;;:::i;1692:430:81:-;;;;;;:::i;:::-;;:::i;15586:608:86:-;;;;;;:::i;:::-;;:::i;6523:147::-;;;;;;:::i;:::-;;:::i;2081:198:38:-;;;;;;:::i;:::-;;:::i;4849:92:86:-;4903:13;4931:5;4924:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4849:92;:::o;6956:154::-;7039:4;7051:37;7060:10;7072:7;7081:6;7051:8;:37::i;:::-;-1:-1:-1;7101:4:86;6956:154;;;;;:::o;7552:249::-;7677:4;7689:45;7705:7;7714:10;7726:7;7689:15;:45::i;:::-;7740:39;7750:7;7759:10;7771:7;7740:9;:39::i;:::-;-1:-1:-1;7792:4:86;7552:249;;;;;:::o;16523:107::-;16583:7;16605:20;:18;:20::i;:::-;16598:27;;16523:107;:::o;8171:203::-;8282:10;8261:4;8304:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;8304:33:86;;;;;;;;;;8261:4;;8273:79;;8294:8;;8304:47;;8340:11;;8304:47;:::i;:::-;8273:8;:79::i;1466:98:81:-;1094:13:38;:11;:13::i;:::-;1542:17:81::1;1548:3;1553:5;1542;:17::i;:::-;1466:98:::0;;:::o;1831:101:38:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;16247:122:86:-;-1:-1:-1;;;;;16339:15:86;;16317:7;16339:15;;;:7;:15;;;;;918:14:59;16339:25:86;827:112:59;5044:96:86;5100:13;5128:7;5121:14;;;;;:::i;1033:102:81:-;1094:13:38;:11;:13::i;:::-;1111:19:81::1;1117:5;1124;1111;:19::i;8834:377:86:-:0;8929:4;8941:24;8968:31;8978:10;8990:8;8968:9;:31::i;:::-;8941:58;;9033:16;9013;:36;;9005:86;;;;-1:-1:-1;;;9005:86:86;;5337:2:181;9005:86:86;;;5319:21:181;5376:2;5356:18;;;5349:30;5415:34;5395:18;;;5388:62;-1:-1:-1;;;5466:18:181;;;5459:35;5511:19;;9005:86:86;;;;;;;;;9115:67;9124:10;9136:8;9165:16;9146;:35;9115:8;:67::i;6327:146::-;6406:4;6418:33;6428:10;6440:2;6444:6;6418:9;:33::i;1692:430:81:-;1094:13:38;:11;:13::i;:::-;1850:5:81::1;:16;1858:8:::0;;1850:5;:16:::1;:::i;:::-;-1:-1:-1::0;1872:7:81::1;:20;1882:10:::0;;1872:7;:20:::1;:::i;:::-;;1898:18;1935:8;;1919:26;;;;;;;:::i;:::-;;::::0;;;;::::1;::::0;;1951:12:::1;:25:::0;;;1919:26;-1:-1:-1;2009:62:81::1;3392:95:86;1919:26:81::0;2055:15:::1;2009:21;:62::i;:::-;1982:24;:89:::0;2082:35:::1;::::0;::::1;::::0;2106:10;;;;2082:35:::1;:::i;:::-;;;;;;;;2096:8;;2082:35;;;;;;;:::i;:::-;;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;1794:328;1692:430:::0;;;;:::o;15586:608:86:-;15794:9;15775:15;:28;;15767:70;;;;-1:-1:-1;;;15767:70:86;;8487:2:181;15767:70:86;;;8469:21:181;8526:2;8506:18;;;8499:30;8565:31;8545:18;;;8538:59;8614:18;;15767:70:86;8285:353:181;15767:70:86;15844:19;3250:95;15912:6;15920:8;15930:6;15938:17;15948:6;15938:9;:17::i;:::-;15883:84;;;;;;8930:25:181;;;;-1:-1:-1;;;;;9029:15:181;;;9009:18;;;9002:43;9081:15;;;;9061:18;;;9054:43;9113:18;;;9106:34;9156:19;;;9149:35;9200:19;;;9193:35;;;8902:19;;15883:84:86;;;;;;;;;;;;15866:107;;;;;;15844:129;;15980:13;15996:29;16013:11;15996:16;:29::i;:::-;15980:45;;16032:15;16050:32;16064:5;16071:2;16075;16079;16050:13;:32::i;:::-;16032:50;;16107:6;-1:-1:-1;;;;;16096:17:86;:7;-1:-1:-1;;;;;16096:17:86;;16088:60;;;;-1:-1:-1;;;16088:60:86;;9441:2:181;16088:60:86;;;9423:21:181;9480:2;9460:18;;;9453:30;9519:32;9499:18;;;9492:60;9569:18;;16088:60:86;9239:354:181;16088:60:86;16155:34;16164:6;16172:8;16182:6;16155:8;:34::i;:::-;15761:433;;;15586:608;;;;;;;:::o;6523:147::-;-1:-1:-1;;;;;6636:19:86;;;6614:7;6636:19;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;6523:147::o;2081:198:38:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:38;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:38;;9800:2:181;2161:73:38::1;::::0;::::1;9782:21:181::0;9839:2;9819:18;;;9812:30;9878:34;9858:18;;;9851:62;-1:-1:-1;;;9929:18:181;;;9922:36;9975:19;;2161:73:38::1;9598:402:181::0;2161:73:38::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;12557:349:86:-;-1:-1:-1;;;;;12673:20:86;;12665:69;;;;-1:-1:-1;;;12665:69:86;;10207:2:181;12665:69:86;;;10189:21:181;10246:2;10226:18;;;10219:30;10285:34;10265:18;;;10258:62;-1:-1:-1;;;10336:18:181;;;10329:34;10380:19;;12665:69:86;10005:400:181;12665:69:86;-1:-1:-1;;;;;12748:22:86;;12740:69;;;;-1:-1:-1;;;12740:69:86;;10612:2:181;12740:69:86;;;10594:21:181;10651:2;10631:18;;;10624:30;10690:34;10670:18;;;10663:62;-1:-1:-1;;;10741:18:181;;;10734:32;10783:19;;12740:69:86;10410:398:181;12740:69:86;-1:-1:-1;;;;;12816:19:86;;;;;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;:39;;;12866:35;;1342:25:181;;;12866:35:86;;1315:18:181;12866:35:86;;;;;;;;12557:349;;;:::o;13172:396::-;13287:24;13314:27;13324:6;13332:8;13314:9;:27::i;:::-;13287:54;;-1:-1:-1;;13351:16:86;:37;13347:217;;13426:7;13406:16;:27;;13398:69;;;;-1:-1:-1;;;13398:69:86;;11015:2:181;13398:69:86;;;10997:21:181;11054:2;11034:18;;;11027:30;11093:31;11073:18;;;11066:59;11142:18;;13398:69:86;10813:353:181;13398:69:86;13495:54;13504:6;13512:8;13541:7;13522:16;:26;13495:8;:54::i;:::-;13281:287;13172:396;;;:::o;9660:818::-;-1:-1:-1;;;;;9780:21:86;;9772:71;;;;-1:-1:-1;;;9772:71:86;;11373:2:181;9772:71:86;;;11355:21:181;11412:2;11392:18;;;11385:30;11451:34;11431:18;;;11424:62;-1:-1:-1;;;11502:18:181;;;11495:35;11547:19;;9772:71:86;11171:401:181;9772:71:86;-1:-1:-1;;;;;9857:24:86;;9849:72;;;;-1:-1:-1;;;9849:72:86;;11779:2:181;9849:72:86;;;11761:21:181;11818:2;11798:18;;;11791:30;11857:34;11837:18;;;11830:62;-1:-1:-1;;;11908:18:181;;;11901:33;11951:19;;9849:72:86;11577:399:181;9849:72:86;-1:-1:-1;;;;;10007:18:86;;9985:19;10007:18;;;:9;:18;;;;;;10039:22;;;;10031:73;;;;-1:-1:-1;;;10031:73:86;;12183:2:181;10031:73:86;;;12165:21:181;12222:2;12202:18;;;12195:30;12261:34;12241:18;;;12234:62;-1:-1:-1;;;12312:18:181;;;12305:36;12358:19;;10031:73:86;11981:402:181;10031:73:86;-1:-1:-1;;;;;10128:18:86;;;;;;;:9;:18;;;;;;10149:21;;;10128:42;;10329:21;;;;;;;;;;:32;;;;;;10379:38;;;;;;10163:7;1342:25:181;;1330:2;1315:18;;1196:177;10379:38:86;;;;;;;;10424:49;11537:620;17074:282;17127:7;17154:4;-1:-1:-1;;;;;17163:12:86;17146:29;;:66;;;;;17196:16;17179:13;:33;17146:66;17142:210;;;-1:-1:-1;17229:24:86;;;17074:282::o;17142:210::-;17281:64;3392:95;17315:12;;17329:15;17281:21;:64::i;1359:130:38:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:38;719:10:58;1422:23:38;1414:68;;;;-1:-1:-1;;;1414:68:38;;12590:2:181;1414:68:38;;;12572:21:181;;;12609:18;;;12602:30;12668:34;12648:18;;;12641:62;12720:18;;1414:68:38;12388:356:181;10731:505:86;-1:-1:-1;;;;;10812:22:86;;10804:66;;;;-1:-1:-1;;;10804:66:86;;12951:2:181;10804:66:86;;;12933:21:181;12990:2;12970:18;;;12963:30;13029:33;13009:18;;;13002:61;13080:18;;10804:66:86;12749:355:181;10804:66:86;10951:7;10935:12;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;11088:19:86;;;;;;:9;:19;;;;;;;;:30;;;;;;11135:39;1342:25:181;;;11135:39:86;;1315:18:181;11135:39:86;;;;;;;1466:98:81;;:::o;2433:187:38:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:38;;;-1:-1:-1;;;;;;2541:17:38;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;11537:620:86:-;-1:-1:-1;;;;;11618:22:86;;11610:68;;;;-1:-1:-1;;;11610:68:86;;13311:2:181;11610:68:86;;;13293:21:181;13350:2;13330:18;;;13323:30;13389:34;13369:18;;;13362:62;-1:-1:-1;;;13440:18:181;;;13433:31;13481:19;;11610:68:86;13109:397:181;11610:68:86;-1:-1:-1;;;;;11768:19:86;;11743:22;11768:19;;;:9;:19;;;;;;11801:25;;;;11793:72;;;;-1:-1:-1;;;11793:72:86;;13713:2:181;11793:72:86;;;13695:21:181;13752:2;13732:18;;;13725:30;13791:34;13771:18;;;13764:62;-1:-1:-1;;;13842:18:181;;;13835:32;13884:19;;11793:72:86;13511:398:181;11793:72:86;-1:-1:-1;;;;;11889:19:86;;;;;;:9;:19;;;;;;;;11911:24;;;11889:46;;12015:12;:23;;;;;;;12056:39;1342:25:181;;;11889:19:86;;;12056:39;;1315:18:181;12056:39:86;1196:177:181;12102:50:86;11604:553;11537:620;;:::o;17464:238::-;17623:73;;;;;;14173:25:181;;;14214:18;;;14207:34;;;14257:18;;;14250:34;;;17667:13:86;14300:18:181;;;14293:34;17690:4:86;14343:19:181;;;14336:61;17591:7:86;;14145:19:181;;17623:73:86;;;;;;;;;;;;17613:84;;;;;;17606:91;;17464:238;;;;;:::o;16760:191::-;-1:-1:-1;;;;;16877:15:86;;16821;16877;;;:7;:15;;;;;918:14:59;;1050:1;1032:19;;;;918:14;16929:17:86;16838:113;16760:191;;;:::o;18295:159::-;18372:7;18394:55;18416:20;:18;:20::i;:::-;18438:10;8470:57:62;;-1:-1:-1;;;8470:57:62;;;14666:27:181;14709:11;;;14702:27;;;14745:12;;;14738:28;;;8434:7:62;;14782:12:181;;8470:57:62;;;;;;;;;;;;8460:68;;;;;;8453:75;;8341:194;;;;;6696:270;6819:7;6839:17;6858:18;6880:25;6891:4;6897:1;6900;6903;6880:10;:25::i;:::-;6838:67;;;;6915:18;6927:5;6915:11;:18::i;:::-;-1:-1:-1;6950:9:62;6696:270;-1:-1:-1;;;;;6696:270:62:o;5069:1494::-;5195:7;;6119:66;6106:79;;6102:161;;;-1:-1:-1;6217:1:62;;-1:-1:-1;6221:30:62;6201:51;;6102:161;6374:24;;;6357:14;6374:24;;;;;;;;;15032:25:181;;;15105:4;15093:17;;15073:18;;;15066:45;;;;15127:18;;;15120:34;;;15170:18;;;15163:34;;;6374:24:62;;15004:19:181;;6374:24:62;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6374:24:62;;-1:-1:-1;;6374:24:62;;;-1:-1:-1;;;;;;;6412:20:62;;6408:101;;6464:1;6468:29;6448:50;;;;;;;6408:101;6527:6;-1:-1:-1;6535:20:62;;-1:-1:-1;5069:1494:62;;;;;;;;:::o;570:511::-;647:20;638:5;:29;;;;;;;;:::i;:::-;;634:441;;570:511;:::o;634:441::-;743:29;734:5;:38;;;;;;;;:::i;:::-;;730:345;;788:34;;-1:-1:-1;;;788:34:62;;15542:2:181;788:34:62;;;15524:21:181;15581:2;15561:18;;;15554:30;15620:26;15600:18;;;15593:54;15664:18;;788:34:62;15340:348:181;730:345:62;852:35;843:5;:44;;;;;;;;:::i;:::-;;839:236;;903:41;;-1:-1:-1;;;903:41:62;;15895:2:181;903:41:62;;;15877:21:181;15934:2;15914:18;;;15907:30;15973:33;15953:18;;;15946:61;16024:18;;903:41:62;15693:355:181;839:236:62;974:30;965:5;:39;;;;;;;;:::i;:::-;;961:114;;1020:44;;-1:-1:-1;;;1020:44:62;;16255:2:181;1020:44:62;;;16237:21:181;16294:2;16274:18;;;16267:30;16333:34;16313:18;;;16306:62;-1:-1:-1;;;16384:18:181;;;16377:32;16426:19;;1020:44:62;16053:398:181;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:181;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:181:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;2082:186::-;2141:6;2194:2;2182:9;2173:7;2169:23;2165:32;2162:52;;;2210:1;2207;2200:12;2162:52;2233:29;2252:9;2233:29;:::i;:::-;2223:39;2082:186;-1:-1:-1;;;2082:186:181:o;2481:348::-;2533:8;2543:6;2597:3;2590:4;2582:6;2578:17;2574:27;2564:55;;2615:1;2612;2605:12;2564:55;-1:-1:-1;2638:20:181;;2681:18;2670:30;;2667:50;;;2713:1;2710;2703:12;2667:50;2750:4;2742:6;2738:17;2726:29;;2802:3;2795:4;2786:6;2778;2774:19;2770:30;2767:39;2764:59;;;2819:1;2816;2809:12;2764:59;2481:348;;;;;:::o;2834:721::-;2926:6;2934;2942;2950;3003:2;2991:9;2982:7;2978:23;2974:32;2971:52;;;3019:1;3016;3009:12;2971:52;3059:9;3046:23;3088:18;3129:2;3121:6;3118:14;3115:34;;;3145:1;3142;3135:12;3115:34;3184:59;3235:7;3226:6;3215:9;3211:22;3184:59;:::i;:::-;3262:8;;-1:-1:-1;3158:85:181;-1:-1:-1;3350:2:181;3335:18;;3322:32;;-1:-1:-1;3366:16:181;;;3363:36;;;3395:1;3392;3385:12;3363:36;;3434:61;3487:7;3476:8;3465:9;3461:24;3434:61;:::i;:::-;2834:721;;;;-1:-1:-1;3514:8:181;-1:-1:-1;;;;2834:721:181:o;3560:693::-;3671:6;3679;3687;3695;3703;3711;3719;3772:3;3760:9;3751:7;3747:23;3743:33;3740:53;;;3789:1;3786;3779:12;3740:53;3812:29;3831:9;3812:29;:::i;:::-;3802:39;;3860:38;3894:2;3883:9;3879:18;3860:38;:::i;:::-;3850:48;;3945:2;3934:9;3930:18;3917:32;3907:42;;3996:2;3985:9;3981:18;3968:32;3958:42;;4050:3;4039:9;4035:19;4022:33;4095:4;4088:5;4084:16;4077:5;4074:27;4064:55;;4115:1;4112;4105:12;4064:55;3560:693;;;;-1:-1:-1;3560:693:181;;;;4138:5;4190:3;4175:19;;4162:33;;-1:-1:-1;4242:3:181;4227:19;;;4214:33;;3560:693;-1:-1:-1;;3560:693:181:o;4258:260::-;4326:6;4334;4387:2;4375:9;4366:7;4362:23;4358:32;4355:52;;;4403:1;4400;4393:12;4355:52;4426:29;4445:9;4426:29;:::i;:::-;4416:39;;4474:38;4508:2;4497:9;4493:18;4474:38;:::i;:::-;4464:48;;4258:260;;;;;:::o;4523:380::-;4602:1;4598:12;;;;4645;;;4666:61;;4720:4;4712:6;4708:17;4698:27;;4666:61;4773:2;4765:6;4762:14;4742:18;4739:38;4736:161;;4819:10;4814:3;4810:20;4807:1;4800:31;4854:4;4851:1;4844:15;4882:4;4879:1;4872:15;4908:222;4973:9;;;4994:10;;;4991:133;;;5046:10;5041:3;5037:20;5034:1;5027:31;5081:4;5078:1;5071:15;5109:4;5106:1;5099:15;5541:127;5602:10;5597:3;5593:20;5590:1;5583:31;5633:4;5630:1;5623:15;5657:4;5654:1;5647:15;5799:545;5901:2;5896:3;5893:11;5890:448;;;5937:1;5962:5;5958:2;5951:17;6007:4;6003:2;5993:19;6077:2;6065:10;6061:19;6058:1;6054:27;6048:4;6044:38;6113:4;6101:10;6098:20;6095:47;;;-1:-1:-1;6136:4:181;6095:47;6191:2;6186:3;6182:12;6179:1;6175:20;6169:4;6165:31;6155:41;;6246:82;6264:2;6257:5;6254:13;6246:82;;;6309:17;;;6290:1;6279:13;6246:82;;;6250:3;;;5799:545;;;:::o;6520:1206::-;6644:18;6639:3;6636:27;6633:53;;;6666:18;;:::i;:::-;6695:94;6785:3;6745:38;6777:4;6771:11;6745:38;:::i;:::-;6739:4;6695:94;:::i;:::-;6815:1;6840:2;6835:3;6832:11;6857:1;6852:616;;;;7512:1;7529:3;7526:93;;;-1:-1:-1;7585:19:181;;;7572:33;7526:93;-1:-1:-1;;6477:1:181;6473:11;;;6469:24;6465:29;6455:40;6501:1;6497:11;;;6452:57;7632:78;;6825:895;;6852:616;5746:1;5739:14;;;5783:4;5770:18;;-1:-1:-1;;6888:17:181;;;6989:9;7011:229;7025:7;7022:1;7019:14;7011:229;;;7114:19;;;7101:33;7086:49;;7221:4;7206:20;;;;7174:1;7162:14;;;;7041:12;7011:229;;;7015:3;7268;7259:7;7256:16;7253:159;;;7392:1;7388:6;7382:3;7376;7373:1;7369:11;7365:21;7361:34;7357:39;7344:9;7339:3;7335:19;7322:33;7318:79;7310:6;7303:95;7253:159;;;7455:1;7449:3;7446:1;7442:11;7438:19;7432:4;7425:33;6825:895;;;6520:1206;;;:::o;7731:271::-;7914:6;7906;7901:3;7888:33;7870:3;7940:16;;7965:13;;;7940:16;7731:271;-1:-1:-1;7731:271:181:o;15208:127::-;15269:10;15264:3;15260:20;15257:1;15250:31;15300:4;15297:1;15290:15;15324:4;15321:1;15314:15"},"gasEstimates":{"creation":{"codeDepositCost":"1100400","executionCost":"infinite","totalCost":"infinite"},"external":{"DOMAIN_SEPARATOR()":"infinite","allowance(address,address)":"infinite","approve(address,uint256)":"24644","balanceOf(address)":"2626","burn(address,uint256)":"53118","decimals()":"2401","decreaseAllowance(address,uint256)":"27056","increaseAllowance(address,uint256)":"infinite","mint(address,uint256)":"53039","name()":"infinite","nonces(address)":"2594","owner()":"2346","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","renounceOwnership()":"infinite","setDetails(string,string)":"infinite","symbol()":"infinite","totalSupply()":"2349","transfer(address,uint256)":"51073","transferFrom(address,address,uint256)":"infinite","transferOwnership(address)":"28443"}},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(address,uint256)":"9dc29fac","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","increaseAllowance(address,uint256)":"39509351","mint(address,uint256)":"40c10f19","name()":"06fdde03","nonces(address)":"7ecebe00","owner()":"8da5cb5b","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","renounceOwnership()":"715018a6","setDetails(string,string)":"b7b090ee","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"UpdateDetails\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amnt\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amnt\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_newName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_newSymbol\",\"type\":\"string\"}],\"name\":\"setDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}. This is ALWAYS calculated at runtime because the token name is mutable, not constant.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burn(address,uint256)\":{\"details\":\"Emits a {Transfer} event with `to` set to the zero address. Requirements: - `_from` cannot be the zero address. - `_from` must have at least `_amnt` tokens.\",\"params\":{\"_amnt\":\"The amount of tokens to be destroyed\",\"_from\":\"The address from which to destroy the tokens\"}},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address. - `_spender` must have allowance for the caller of at least `_subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address.\"},\"mint(address,uint256)\":{\"details\":\"Emits a {Transfer} event with `from` set to the zero address. Requirements: - `to` cannot be the zero address.\",\"params\":{\"_amnt\":\"The amount of tokens to be minted\",\"_to\":\"The destination address\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\",\"params\":{\"_deadline\":\"The timestamp before which the signature must be submitted\",\"_owner\":\"The account setting approval & signing the message\",\"_r\":\"ECDSA signature r\",\"_s\":\"ECDSA signature s\",\"_spender\":\"The account receiving approval to spend owner's tokens\",\"_v\":\"ECDSA signature v\",\"_value\":\"The amount to set approval for\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setDetails(string,string)\":{\"params\":{\"_newName\":\"The new name\",\"_newSymbol\":\"The new symbol\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `_sender` and `recipient` cannot be the zero address. - `_sender` must have a balance of at least `amount`. - the caller must have allowance for ``_sender``'s tokens of at least `amount`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"burn(address,uint256)\":{\"notice\":\"Destroys `_amnt` tokens from `_from`, reducing the total supply.\"},\"mint(address,uint256)\":{\"notice\":\"Creates `_amnt` tokens and assigns them to `_to`, increasing the total supply.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Sets approval from owner to spender to value as long as deadline has not passed by submitting a valid signature from owner Uses EIP 712 structured data hashing & signing https://eips.ethereum.org/EIPS/eip-712\"},\"setDetails(string,string)\":{\"notice\":\"Set the details of a token\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/helpers/BridgeToken.sol\":\"BridgeToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\",\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Counters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Counters\\n * @author Matt Condon (@shrugs)\\n * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\\n * of elements in a mapping, issuing ERC721 ids, or counting request ids.\\n *\\n * Include with `using Counters for Counters.Counter;`\\n */\\nlibrary Counters {\\n    struct Counter {\\n        // This variable should never be directly accessed by users of the library: interactions must be restricted to\\n        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add\\n        // this feature: see https://github.com/ethereum/solidity/issues/4637\\n        uint256 _value; // default: 0\\n    }\\n\\n    function current(Counter storage counter) internal view returns (uint256) {\\n        return counter._value;\\n    }\\n\\n    function increment(Counter storage counter) internal {\\n        unchecked {\\n            counter._value += 1;\\n        }\\n    }\\n\\n    function decrement(Counter storage counter) internal {\\n        uint256 value = counter._value;\\n        require(value > 0, \\\"Counter: decrement overflow\\\");\\n        unchecked {\\n            counter._value = value - 1;\\n        }\\n    }\\n\\n    function reset(Counter storage counter) internal {\\n        counter._value = 0;\\n    }\\n}\\n\",\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        bytes32 r,\\n        bytes32 vs\\n    ) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(\\n        bytes32 hash,\\n        bytes32 r,\\n        bytes32 vs\\n    ) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n    }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n    /* solhint-disable var-name-mixedcase */\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n    // invalidate the cached domain separator if the chain id changes.\\n    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n    uint256 private immutable _CACHED_CHAIN_ID;\\n    address private immutable _CACHED_THIS;\\n\\n    bytes32 private immutable _HASHED_NAME;\\n    bytes32 private immutable _HASHED_VERSION;\\n    bytes32 private immutable _TYPE_HASH;\\n\\n    /* solhint-enable var-name-mixedcase */\\n\\n    /**\\n     * @dev Initializes the domain separator and parameter caches.\\n     *\\n     * The meaning of `name` and `version` is specified in\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n     *\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n     * - `version`: the current major version of the signing domain.\\n     *\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n     * contract upgrade].\\n     */\\n    constructor(string memory name, string memory version) {\\n        bytes32 hashedName = keccak256(bytes(name));\\n        bytes32 hashedVersion = keccak256(bytes(version));\\n        bytes32 typeHash = keccak256(\\n            \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n        );\\n        _HASHED_NAME = hashedName;\\n        _HASHED_VERSION = hashedVersion;\\n        _CACHED_CHAIN_ID = block.chainid;\\n        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n        _CACHED_THIS = address(this);\\n        _TYPE_HASH = typeHash;\\n    }\\n\\n    /**\\n     * @dev Returns the domain separator for the current chain.\\n     */\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\n        if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n            return _CACHED_DOMAIN_SEPARATOR;\\n        } else {\\n            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n        }\\n    }\\n\\n    function _buildDomainSeparator(\\n        bytes32 typeHash,\\n        bytes32 nameHash,\\n        bytes32 versionHash\\n    ) private view returns (bytes32) {\\n        return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n    }\\n\\n    /**\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\n     *\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n     *\\n     * ```solidity\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n     *     keccak256(\\\"Mail(address to,string contents)\\\"),\\n     *     mailTo,\\n     *     keccak256(bytes(mailContents))\\n     * )));\\n     * address signer = ECDSA.recover(digest, signature);\\n     * ```\\n     */\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n    }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator\\n    ) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1);\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator,\\n        Rounding rounding\\n    ) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10**64) {\\n                value /= 10**64;\\n                result += 64;\\n            }\\n            if (value >= 10**32) {\\n                value /= 10**32;\\n                result += 32;\\n            }\\n            if (value >= 10**16) {\\n                value /= 10**16;\\n                result += 16;\\n            }\\n            if (value >= 10**8) {\\n                value /= 10**8;\\n                result += 8;\\n            }\\n            if (value >= 10**4) {\\n                value /= 10**4;\\n                result += 4;\\n            }\\n            if (value >= 10**2) {\\n                value /= 10**2;\\n                result += 2;\\n            }\\n            if (value >= 10**1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/BridgeToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Ownable} from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport {IBridgeToken} from \\\"../interfaces/IBridgeToken.sol\\\";\\n\\nimport {ERC20} from \\\"./OZERC20.sol\\\";\\n\\ncontract BridgeToken is IBridgeToken, Ownable, ERC20 {\\n  // ============ Constructor ============\\n  constructor(\\n    uint8 decimals_,\\n    string memory name_,\\n    string memory symbol_\\n  ) Ownable() ERC20(decimals_, name_, symbol_, \\\"1\\\") {}\\n\\n  // ============ Events ============\\n\\n  event UpdateDetails(string indexed name, string indexed symbol);\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Destroys `_amnt` tokens from `_from`, reducing the\\n   * total supply.\\n   * @dev Emits a {Transfer} event with `to` set to the zero address.\\n   * Requirements:\\n   * - `_from` cannot be the zero address.\\n   * - `_from` must have at least `_amnt` tokens.\\n   * @param _from The address from which to destroy the tokens\\n   * @param _amnt The amount of tokens to be destroyed\\n   */\\n  function burn(address _from, uint256 _amnt) external override onlyOwner {\\n    _burn(_from, _amnt);\\n  }\\n\\n  /** @notice Creates `_amnt` tokens and assigns them to `_to`, increasing\\n   * the total supply.\\n   * @dev Emits a {Transfer} event with `from` set to the zero address.\\n   * Requirements:\\n   * - `to` cannot be the zero address.\\n   * @param _to The destination address\\n   * @param _amnt The amount of tokens to be minted\\n   */\\n  function mint(address _to, uint256 _amnt) external override onlyOwner {\\n    _mint(_to, _amnt);\\n  }\\n\\n  /**\\n   * @notice Set the details of a token\\n   * @param _newName The new name\\n   * @param _newSymbol The new symbol\\n   */\\n  function setDetails(string calldata _newName, string calldata _newSymbol) external override onlyOwner {\\n    // careful with naming convention change here\\n    _name = _newName;\\n    _symbol = _newSymbol;\\n    bytes32 hashedName = keccak256(bytes(_newName));\\n    _HASHED_NAME = hashedName;\\n    _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, hashedName, _HASHED_VERSION);\\n    emit UpdateDetails(_newName, _newSymbol);\\n  }\\n}\\n\",\"keccak256\":\"0xed6c82aedc8a694d40521389d3547cab2436d59bd2183a021e4a1844fd766636\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/helpers/OZERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n// This is modified from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\"\\n// Modifications were made to allow the name, hashed name, and cached\\n// domain separator to be internal\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\\\";\\nimport {EIP712} from \\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\";\\nimport {ECDSA} from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Counters.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * Implements ERC20 Permit extension allowing approvals to be made via\\n * signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20\\n * allowance (see {IERC20-allowance}) by presenting a message signed by the\\n * account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin guidelines: functions revert instead\\n * of returning `false` on failure. This behavior is nonetheless conventional\\n * and does not conflict with the expectations of ERC20 applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n *\\n * @dev Cannot use default ERC20/ERC20Permit implementation as there is no way to update\\n * the name (set to private).\\n *\\n * Cannot use default EIP712 implementation as the _HASHED_NAME may change.\\n * These functions use the same implementation, with easier storage access.\\n */\\ncontract ERC20 is IERC20Metadata, IERC20Permit {\\n  // See ERC20\\n  mapping(address => uint256) private _balances;\\n\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 private _totalSupply;\\n\\n  string internal _name; // made internal, need access\\n  string internal _symbol; // made internal, need access\\n  uint8 internal _decimals; // made internal, need access\\n\\n  // See ERC20Permit\\n  using Counters for Counters.Counter;\\n\\n  mapping(address => Counters.Counter) private _nonces;\\n\\n  // See EIP712\\n  // Immutables used in EIP 712 structured data hashing & signing\\n  // https://eips.ethereum.org/EIPS/eip-712\\n  bytes32 private constant _PERMIT_TYPEHASH =\\n    keccak256(\\\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\\\");\\n  bytes32 internal constant _TYPE_HASH =\\n    keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n  // made internal, need access\\n\\n  // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n  // invalidate the cached domain separator if the chain id changes.\\n  bytes32 internal _CACHED_DOMAIN_SEPARATOR; // made internal, may change\\n  uint256 private immutable _CACHED_CHAIN_ID;\\n  address private immutable _CACHED_THIS;\\n\\n  bytes32 internal _HASHED_NAME; // made internal, may change\\n  bytes32 internal immutable _HASHED_VERSION; // made internal, need access\\n\\n  /**\\n   * @dev Initializes the {EIP712} domain separator using the `name` parameter,\\n   * and setting `version` to `\\\"1\\\"`.\\n   *\\n   * It's a good idea to use the same `name` that is defined as the ERC20 token name.\\n   */\\n  constructor(\\n    uint8 decimals_,\\n    string memory name_,\\n    string memory symbol_,\\n    string memory version_\\n  ) {\\n    // ERC20\\n    _name = name_;\\n    _symbol = symbol_;\\n    _decimals = decimals_;\\n\\n    // EIP712\\n    bytes32 hashedName = keccak256(bytes(name_));\\n    bytes32 hashedVersion = keccak256(bytes(version_));\\n    _HASHED_NAME = hashedName;\\n    _HASHED_VERSION = hashedVersion;\\n    _CACHED_CHAIN_ID = block.chainid;\\n    _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, hashedName, hashedVersion);\\n    _CACHED_THIS = address(this);\\n  }\\n\\n  /**\\n   * @dev Returns the name of the token.\\n   */\\n  function name() public view virtual override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /**\\n   * @dev Returns the symbol of the token, usually a shorter version of the\\n   * name.\\n   */\\n  function symbol() public view virtual override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /**\\n   * @dev Returns the number of decimals used to get its user representation.\\n   * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n   * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n   *\\n   * Tokens usually opt for a value of 18, imitating the relationship between\\n   * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n   * overridden;\\n   *\\n   * NOTE: This information is only used for _display_ purposes: it in\\n   * no way affects any of the arithmetic of the contract, including\\n   * {IERC20-balanceOf} and {IERC20-transfer}.\\n   */\\n  function decimals() public view virtual override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-totalSupply}.\\n   */\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-balanceOf}.\\n   */\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _balances[account];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transfer}.\\n   *\\n   * Requirements:\\n   *\\n   * - `to` cannot be the zero address.\\n   * - the caller must have a balance of at least `amount`.\\n   */\\n  function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n    _transfer(msg.sender, to, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-allowance}.\\n   */\\n  function allowance(address _owner, address _spender) public view virtual override returns (uint256) {\\n    return _allowances[_owner][_spender];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-approve}.\\n   *\\n   * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n   * `transferFrom`. This is semantically equivalent to an infinite approval.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   */\\n  function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n    _approve(msg.sender, spender, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transferFrom}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance. This is not\\n   * required by the EIP. See the note at the beginning of {ERC20}.\\n   *\\n   * Requirements:\\n   *\\n   * - `_sender` and `recipient` cannot be the zero address.\\n   * - `_sender` must have a balance of at least `amount`.\\n   * - the caller must have allowance for ``_sender``'s tokens of at least\\n   * `amount`.\\n   */\\n  function transferFrom(\\n    address _sender,\\n    address _recipient,\\n    uint256 _amount\\n  ) public virtual override returns (bool) {\\n    _spendAllowance(_sender, msg.sender, _amount);\\n    _transfer(_sender, _recipient, _amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically increases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `_spender` cannot be the zero address.\\n   */\\n  function increaseAllowance(address _spender, uint256 _addedValue) public virtual returns (bool) {\\n    _approve(msg.sender, _spender, _allowances[msg.sender][_spender] + _addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `_spender` cannot be the zero address.\\n   * - `_spender` must have allowance for the caller of at least\\n   * `_subtractedValue`.\\n   */\\n  function decreaseAllowance(address _spender, uint256 _subtractedValue) public virtual returns (bool) {\\n    uint256 currentAllowance = allowance(msg.sender, _spender);\\n    require(currentAllowance >= _subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n    unchecked {\\n      _approve(msg.sender, _spender, currentAllowance - _subtractedValue);\\n    }\\n\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Moves tokens `amount` from `_sender` to `_recipient`.\\n   *\\n   * This is internal function is equivalent to {transfer}, and can be used to\\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\\n   *\\n   * Emits a {Transfer} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `_sender` cannot be the zero address.\\n   * - `_recipient` cannot be the zero address.\\n   * - `_sender` must have a balance of at least `amount`.\\n   */\\n  function _transfer(\\n    address _sender,\\n    address _recipient,\\n    uint256 _amount\\n  ) internal virtual {\\n    require(_sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n    require(_recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n    _beforeTokenTransfer(_sender, _recipient, _amount);\\n\\n    uint256 fromBalance = _balances[_sender];\\n    require(fromBalance >= _amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n    unchecked {\\n      _balances[_sender] = fromBalance - _amount;\\n      // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n      // decrementing then incrementing.\\n      _balances[_recipient] += _amount;\\n    }\\n\\n    emit Transfer(_sender, _recipient, _amount);\\n\\n    _afterTokenTransfer(_sender, _recipient, _amount);\\n  }\\n\\n  /** @dev Creates `_amount` tokens and assigns them to `_account`, increasing\\n   * the total supply.\\n   *\\n   * Emits a {Transfer} event with `from` set to the zero address.\\n   *\\n   * Requirements:\\n   *\\n   * - `to` cannot be the zero address.\\n   */\\n  function _mint(address _account, uint256 _amount) internal virtual {\\n    require(_account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n    _beforeTokenTransfer(address(0), _account, _amount);\\n\\n    _totalSupply += _amount;\\n    unchecked {\\n      // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n      _balances[_account] += _amount;\\n    }\\n    emit Transfer(address(0), _account, _amount);\\n\\n    _afterTokenTransfer(address(0), _account, _amount);\\n  }\\n\\n  /**\\n   * @dev Destroys `_amount` tokens from `_account`, reducing the\\n   * total supply.\\n   *\\n   * Emits a {Transfer} event with `to` set to the zero address.\\n   *\\n   * Requirements:\\n   *\\n   * - `_account` cannot be the zero address.\\n   * - `_account` must have at least `_amount` tokens.\\n   */\\n  function _burn(address _account, uint256 _amount) internal virtual {\\n    require(_account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n    _beforeTokenTransfer(_account, address(0), _amount);\\n\\n    uint256 accountBalance = _balances[_account];\\n    require(accountBalance >= _amount, \\\"ERC20: burn amount exceeds balance\\\");\\n    unchecked {\\n      _balances[_account] = accountBalance - _amount;\\n      // Overflow not possible: amount <= accountBalance <= totalSupply\\n      _totalSupply -= _amount;\\n    }\\n\\n    emit Transfer(_account, address(0), _amount);\\n\\n    _afterTokenTransfer(_account, address(0), _amount);\\n  }\\n\\n  /**\\n   * @dev Sets `_amount` as the allowance of `_spender` over the `_owner` s tokens.\\n   *\\n   * This internal function is equivalent to `approve`, and can be used to\\n   * e.g. set automatic allowances for certain subsystems, etc.\\n   *\\n   * Emits an {Approval} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `_owner` cannot be the zero address.\\n   * - `_spender` cannot be the zero address.\\n   */\\n  function _approve(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount\\n  ) internal virtual {\\n    require(_owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n    require(_spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n    _allowances[_owner][_spender] = _amount;\\n    emit Approval(_owner, _spender, _amount);\\n  }\\n\\n  /**\\n   * @dev Updates `_owner` s allowance for `_spender` based on spent `_amount`.\\n   *\\n   * Does not update the allowance amount in case of infinite allowance.\\n   * Revert if not enough allowance is available.\\n   *\\n   * Might emit an {Approval} event.\\n   */\\n  function _spendAllowance(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount\\n  ) internal virtual {\\n    uint256 currentAllowance = allowance(_owner, _spender);\\n    if (currentAllowance != type(uint256).max) {\\n      require(currentAllowance >= _amount, \\\"ERC20: insufficient allowance\\\");\\n      unchecked {\\n        _approve(_owner, _spender, currentAllowance - _amount);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Hook that is called before any transfer of tokens. This includes\\n   * minting and burning.\\n   *\\n   * Calling conditions:\\n   *\\n   * - when `_from` and `_to` are both non-zero, `_amount` of ``_from``'s tokens\\n   * will be to transferred to `_to`.\\n   * - when `_from` is zero, `_amount` tokens will be minted for `_to`.\\n   * - when `_to` is zero, `_amount` of ``_from``'s tokens will be burned.\\n   * - `_from` and `_to` are never both zero.\\n   *\\n   * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n   */\\n  function _beforeTokenTransfer(\\n    address _from,\\n    address _to,\\n    uint256 _amount\\n  ) internal virtual {}\\n\\n  /**\\n   * @dev Hook that is called after any transfer of tokens. This includes\\n   * minting and burning.\\n   *\\n   * Calling conditions:\\n   *\\n   * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n   * has been transferred to `to`.\\n   * - when `from` is zero, `amount` tokens have been minted for `to`.\\n   * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n   * - `from` and `to` are never both zero.\\n   *\\n   * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n   */\\n  function _afterTokenTransfer(\\n    address _from,\\n    address _to,\\n    uint256 _amount\\n  ) internal virtual {}\\n\\n  /**\\n   * @dev See {IERC20Permit-permit}.\\n   * @notice Sets approval from owner to spender to value\\n   * as long as deadline has not passed\\n   * by submitting a valid signature from owner\\n   * Uses EIP 712 structured data hashing & signing\\n   * https://eips.ethereum.org/EIPS/eip-712\\n   * @param _owner The account setting approval & signing the message\\n   * @param _spender The account receiving approval to spend owner's tokens\\n   * @param _value The amount to set approval for\\n   * @param _deadline The timestamp before which the signature must be submitted\\n   * @param _v ECDSA signature v\\n   * @param _r ECDSA signature r\\n   * @param _s ECDSA signature s\\n   */\\n  function permit(\\n    address _owner,\\n    address _spender,\\n    uint256 _value,\\n    uint256 _deadline,\\n    uint8 _v,\\n    bytes32 _r,\\n    bytes32 _s\\n  ) public virtual override {\\n    require(block.timestamp <= _deadline, \\\"ERC20Permit: expired deadline\\\");\\n\\n    bytes32 _structHash = keccak256(\\n      abi.encode(_PERMIT_TYPEHASH, _owner, _spender, _value, _useNonce(_owner), _deadline)\\n    );\\n\\n    bytes32 _hash = _hashTypedDataV4(_structHash);\\n\\n    address _signer = ECDSA.recover(_hash, _v, _r, _s);\\n    require(_signer == _owner, \\\"ERC20Permit: invalid signature\\\");\\n\\n    _approve(_owner, _spender, _value);\\n  }\\n\\n  /**\\n   * @dev See {IERC20Permit-nonces}.\\n   */\\n  function nonces(address _owner) public view virtual override returns (uint256) {\\n    return _nonces[_owner].current();\\n  }\\n\\n  /**\\n   * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.\\n   * This is ALWAYS calculated at runtime because the token name is mutable, not constant.\\n   */\\n  function DOMAIN_SEPARATOR() external view override returns (bytes32) {\\n    return _domainSeparatorV4();\\n  }\\n\\n  /**\\n   * @dev \\\"Consume a nonce\\\": return the current value and increment.\\n   * @dev See {EIP712._buildDomainSeparator}\\n   */\\n  function _useNonce(address _owner) internal virtual returns (uint256 current) {\\n    Counters.Counter storage nonce = _nonces[_owner];\\n    current = nonce.current();\\n    nonce.increment();\\n  }\\n\\n  /**\\n   * @dev Returns the domain separator for the current chain.\\n   * @dev See {EIP712._buildDomainSeparator}\\n   */\\n  function _domainSeparatorV4() internal view returns (bytes32) {\\n    if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n      return _CACHED_DOMAIN_SEPARATOR;\\n    } else {\\n      return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n    }\\n  }\\n\\n  /**\\n   * @dev See {EIP712._buildDomainSeparator}. Made internal to allow usage in parent class.\\n   */\\n  function _buildDomainSeparator(\\n    bytes32 typeHash,\\n    bytes32 nameHash,\\n    bytes32 versionHash\\n  ) internal view returns (bytes32) {\\n    return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n  }\\n\\n  /**\\n   * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n   * function returns the hash of the fully encoded EIP712 message for this domain.\\n   *\\n   * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n   *\\n   * ```solidity\\n   * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n   *     keccak256(\\\"Mail(address to,string contents)\\\"),\\n   *     mailTo,\\n   *     keccak256(bytes(mailContents))\\n   * )));\\n   * address signer = ECDSA.recover(digest, signature);\\n   * ```\\n   */\\n  function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n    return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n  }\\n}\\n\",\"keccak256\":\"0x7219667c651b2cbcbd1866667c5aa5fa1b1120a2fc111f24290c5ece3b3bba52\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IBridgeToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\ninterface IBridgeToken is IERC20Metadata {\\n  function burn(address _from, uint256 _amnt) external;\\n\\n  function mint(address _to, uint256 _amnt) external;\\n\\n  function setDetails(string calldata _name, string calldata _symbol) external;\\n}\\n\",\"keccak256\":\"0x93b2adcc4b953ecd2d3e738d797f5fbde2ccb3726df10bc7acde9c1b4775b019\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":9551,"contract":"contracts/core/connext/helpers/BridgeToken.sol:BridgeToken","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":23198,"contract":"contracts/core/connext/helpers/BridgeToken.sol:BridgeToken","label":"_balances","offset":0,"slot":"1","type":"t_mapping(t_address,t_uint256)"},{"astId":23204,"contract":"contracts/core/connext/helpers/BridgeToken.sol:BridgeToken","label":"_allowances","offset":0,"slot":"2","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":23206,"contract":"contracts/core/connext/helpers/BridgeToken.sol:BridgeToken","label":"_totalSupply","offset":0,"slot":"3","type":"t_uint256"},{"astId":23208,"contract":"contracts/core/connext/helpers/BridgeToken.sol:BridgeToken","label":"_name","offset":0,"slot":"4","type":"t_string_storage"},{"astId":23210,"contract":"contracts/core/connext/helpers/BridgeToken.sol:BridgeToken","label":"_symbol","offset":0,"slot":"5","type":"t_string_storage"},{"astId":23212,"contract":"contracts/core/connext/helpers/BridgeToken.sol:BridgeToken","label":"_decimals","offset":0,"slot":"6","type":"t_uint8"},{"astId":23221,"contract":"contracts/core/connext/helpers/BridgeToken.sol:BridgeToken","label":"_nonces","offset":0,"slot":"7","type":"t_mapping(t_address,t_struct(Counter)11512_storage)"},{"astId":23233,"contract":"contracts/core/connext/helpers/BridgeToken.sol:BridgeToken","label":"_CACHED_DOMAIN_SEPARATOR","offset":0,"slot":"8","type":"t_bytes32"},{"astId":23239,"contract":"contracts/core/connext/helpers/BridgeToken.sol:BridgeToken","label":"_HASHED_NAME","offset":0,"slot":"9","type":"t_bytes32"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(Counter)11512_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct Counters.Counter)","numberOfBytes":"32","value":"t_struct(Counter)11512_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(Counter)11512_storage":{"encoding":"inplace","label":"struct Counters.Counter","members":[{"astId":11511,"contract":"contracts/core/connext/helpers/BridgeToken.sol:BridgeToken","label":"_value","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"burn(address,uint256)":{"notice":"Destroys `_amnt` tokens from `_from`, reducing the total supply."},"mint(address,uint256)":{"notice":"Creates `_amnt` tokens and assigns them to `_to`, increasing the total supply."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Sets approval from owner to spender to value as long as deadline has not passed by submitting a valid signature from owner Uses EIP 712 structured data hashing & signing https://eips.ethereum.org/EIPS/eip-712"},"setDetails(string,string)":{"notice":"Set the details of a token"}},"version":1}}},"contracts/core/connext/helpers/ConnextDiamond.sol":{"ConnextDiamond":{"abi":[{"inputs":[{"internalType":"address","name":"_contractOwner","type":"address"},{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"components":[{"internalType":"address","name":"initContract","type":"address"},{"internalType":"bytes","name":"initData","type":"bytes"}],"internalType":"struct ConnextDiamond.Initialization[]","name":"_initializations","type":"tuple[]"}],"stateMutability":"payable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"constructor":{"params":{"_contractOwner":"the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.","_diamondCut":"the list of facet to add","_initializations":"the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization."}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_22484":{"entryPoint":null,"id":22484,"parameterSlots":3,"returnSlots":0},"@addFacet_30293":{"entryPoint":3582,"id":30293,"parameterSlots":2,"returnSlots":0},"@addFunction_30334":{"entryPoint":null,"id":30334,"parameterSlots":4,"returnSlots":0},"@addFunctions_30059":{"entryPoint":1734,"id":30059,"parameterSlots":2,"returnSlots":0},"@diamondCut_29953":{"entryPoint":379,"id":29953,"parameterSlots":3,"returnSlots":0},"@diamondStorage_29603":{"entryPoint":null,"id":29603,"parameterSlots":0,"returnSlots":1},"@enforceHasContractCode_30595":{"entryPoint":3533,"id":30595,"parameterSlots":2,"returnSlots":0},"@initializeDiamondCut_30578":{"entryPoint":1185,"id":30578,"parameterSlots":2,"returnSlots":0},"@removeFunction_30501":{"entryPoint":3691,"id":30501,"parameterSlots":3,"returnSlots":0},"@removeFunctions_30260":{"entryPoint":3026,"id":30260,"parameterSlots":2,"returnSlots":0},"@replaceFunctions_30167":{"entryPoint":2371,"id":30167,"parameterSlots":2,"returnSlots":0},"@setContractOwner_29633":{"entryPoint":237,"id":29633,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":4684,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_struct_Initialization_dyn_fromMemory":{"entryPoint":4942,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptrt_array$_t_struct$_Initialization_$22413_memory_ptr_$dyn_memory_ptr_fromMemory":{"entryPoint":5271,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_bytes":{"entryPoint":5783,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":6092,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":5829,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":6122,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_6dc3f1dab50ff21fc15088aa16d05815257e5abe70c54939829f018f001302c3__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bf74910c6b16e2fe967a9c2fd1df7451e7594bd2184362aed0a451068a63c3f3__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory":{"entryPoint":4815,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_3534":{"entryPoint":4735,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_3535":{"entryPoint":4778,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_array_struct_FacetCut_dyn":{"entryPoint":4866,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":6221,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":4904,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint96":{"entryPoint":6172,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":6150,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":5761,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x31":{"entryPoint":6249,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":5739,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":4713,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:15582:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"74:117:181","statements":[{"nodeType":"YulAssignment","src":"84:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"99:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"93:5:181"},"nodeType":"YulFunctionCall","src":"93:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"84:5:181"}]},{"body":{"nodeType":"YulBlock","src":"169:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"178:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"181:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"171:6:181"},"nodeType":"YulFunctionCall","src":"171:12:181"},"nodeType":"YulExpressionStatement","src":"171:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"128:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"139:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"154:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"150:3:181"},"nodeType":"YulFunctionCall","src":"150:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"163:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"146:3:181"},"nodeType":"YulFunctionCall","src":"146:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"135:3:181"},"nodeType":"YulFunctionCall","src":"135:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"125:2:181"},"nodeType":"YulFunctionCall","src":"125:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"118:6:181"},"nodeType":"YulFunctionCall","src":"118:50:181"},"nodeType":"YulIf","src":"115:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"53:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"64:5:181","type":""}],"src":"14:177:181"},{"body":{"nodeType":"YulBlock","src":"228:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"245:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"252:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"257:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"248:3:181"},"nodeType":"YulFunctionCall","src":"248:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"238:6:181"},"nodeType":"YulFunctionCall","src":"238:31:181"},"nodeType":"YulExpressionStatement","src":"238:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"285:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"288:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"278:6:181"},"nodeType":"YulFunctionCall","src":"278:15:181"},"nodeType":"YulExpressionStatement","src":"278:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"309:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"312:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"302:6:181"},"nodeType":"YulFunctionCall","src":"302:15:181"},"nodeType":"YulExpressionStatement","src":"302:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"196:127:181"},{"body":{"nodeType":"YulBlock","src":"374:211:181","statements":[{"nodeType":"YulAssignment","src":"384:21:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"400:4:181","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"394:5:181"},"nodeType":"YulFunctionCall","src":"394:11:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"384:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"414:35:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"436:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"444:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"432:3:181"},"nodeType":"YulFunctionCall","src":"432:17:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"418:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"524:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"526:16:181"},"nodeType":"YulFunctionCall","src":"526:18:181"},"nodeType":"YulExpressionStatement","src":"526:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"467:10:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"487:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"491:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"483:3:181"},"nodeType":"YulFunctionCall","src":"483:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"495:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"479:3:181"},"nodeType":"YulFunctionCall","src":"479:18:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"464:2:181"},"nodeType":"YulFunctionCall","src":"464:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"503:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"515:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"500:2:181"},"nodeType":"YulFunctionCall","src":"500:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"461:2:181"},"nodeType":"YulFunctionCall","src":"461:62:181"},"nodeType":"YulIf","src":"458:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"562:4:181","type":"","value":"0x40"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"568:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"555:6:181"},"nodeType":"YulFunctionCall","src":"555:24:181"},"nodeType":"YulExpressionStatement","src":"555:24:181"}]},"name":"allocate_memory_3534","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"363:6:181","type":""}],"src":"328:257:181"},{"body":{"nodeType":"YulBlock","src":"636:205:181","statements":[{"nodeType":"YulAssignment","src":"646:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"662:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"656:5:181"},"nodeType":"YulFunctionCall","src":"656:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"646:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"674:33:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"696:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"704:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"692:3:181"},"nodeType":"YulFunctionCall","src":"692:15:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"678:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"782:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"784:16:181"},"nodeType":"YulFunctionCall","src":"784:18:181"},"nodeType":"YulExpressionStatement","src":"784:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"725:10:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"745:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"749:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"741:3:181"},"nodeType":"YulFunctionCall","src":"741:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"753:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"737:3:181"},"nodeType":"YulFunctionCall","src":"737:18:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"722:2:181"},"nodeType":"YulFunctionCall","src":"722:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"761:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"773:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"758:2:181"},"nodeType":"YulFunctionCall","src":"758:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"719:2:181"},"nodeType":"YulFunctionCall","src":"719:62:181"},"nodeType":"YulIf","src":"716:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"820:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"824:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"813:6:181"},"nodeType":"YulFunctionCall","src":"813:22:181"},"nodeType":"YulExpressionStatement","src":"813:22:181"}]},"name":"allocate_memory_3535","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"625:6:181","type":""}],"src":"590:251:181"},{"body":{"nodeType":"YulBlock","src":"891:230:181","statements":[{"nodeType":"YulAssignment","src":"901:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"917:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"911:5:181"},"nodeType":"YulFunctionCall","src":"911:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"901:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"929:58:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"951:6:181"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"967:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"973:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:181"},"nodeType":"YulFunctionCall","src":"963:13:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"982:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"978:3:181"},"nodeType":"YulFunctionCall","src":"978:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"959:3:181"},"nodeType":"YulFunctionCall","src":"959:27:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"947:3:181"},"nodeType":"YulFunctionCall","src":"947:40:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"933:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1062:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1064:16:181"},"nodeType":"YulFunctionCall","src":"1064:18:181"},"nodeType":"YulExpressionStatement","src":"1064:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1005:10:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1025:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"1029:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1021:3:181"},"nodeType":"YulFunctionCall","src":"1021:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"1033:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1017:3:181"},"nodeType":"YulFunctionCall","src":"1017:18:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1002:2:181"},"nodeType":"YulFunctionCall","src":"1002:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1041:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1053:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1038:2:181"},"nodeType":"YulFunctionCall","src":"1038:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"999:2:181"},"nodeType":"YulFunctionCall","src":"999:62:181"},"nodeType":"YulIf","src":"996:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1100:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1104:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1093:6:181"},"nodeType":"YulFunctionCall","src":"1093:22:181"},"nodeType":"YulExpressionStatement","src":"1093:22:181"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"871:4:181","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"880:6:181","type":""}],"src":"846:275:181"},{"body":{"nodeType":"YulBlock","src":"1203:114:181","statements":[{"body":{"nodeType":"YulBlock","src":"1247:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1249:16:181"},"nodeType":"YulFunctionCall","src":"1249:18:181"},"nodeType":"YulExpressionStatement","src":"1249:18:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1219:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1235:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"1239:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1231:3:181"},"nodeType":"YulFunctionCall","src":"1231:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"1243:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1227:3:181"},"nodeType":"YulFunctionCall","src":"1227:18:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1216:2:181"},"nodeType":"YulFunctionCall","src":"1216:30:181"},"nodeType":"YulIf","src":"1213:56:181"},{"nodeType":"YulAssignment","src":"1278:33:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1294:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"1297:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1290:3:181"},"nodeType":"YulFunctionCall","src":"1290:14:181"},{"kind":"number","nodeType":"YulLiteral","src":"1306:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1286:3:181"},"nodeType":"YulFunctionCall","src":"1286:25:181"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"1278:4:181"}]}]},"name":"array_allocation_size_array_struct_FacetCut_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nodeType":"YulTypedName","src":"1183:6:181","type":""}],"returnVariables":[{"name":"size","nodeType":"YulTypedName","src":"1194:4:181","type":""}],"src":"1126:191:181"},{"body":{"nodeType":"YulBlock","src":"1388:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"1398:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1407:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"1402:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1467:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1492:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"1497:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1488:3:181"},"nodeType":"YulFunctionCall","src":"1488:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"1511:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"1516:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1507:3:181"},"nodeType":"YulFunctionCall","src":"1507:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1501:5:181"},"nodeType":"YulFunctionCall","src":"1501:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1481:6:181"},"nodeType":"YulFunctionCall","src":"1481:39:181"},"nodeType":"YulExpressionStatement","src":"1481:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1428:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"1431:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1425:2:181"},"nodeType":"YulFunctionCall","src":"1425:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1439:19:181","statements":[{"nodeType":"YulAssignment","src":"1441:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1450:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"1453:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1446:3:181"},"nodeType":"YulFunctionCall","src":"1446:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"1441:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"1421:3:181","statements":[]},"src":"1417:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1550:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"1555:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1546:3:181"},"nodeType":"YulFunctionCall","src":"1546:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"1564:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1539:6:181"},"nodeType":"YulFunctionCall","src":"1539:27:181"},"nodeType":"YulExpressionStatement","src":"1539:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"1366:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"1371:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"1376:6:181","type":""}],"src":"1322:250:181"},{"body":{"nodeType":"YulBlock","src":"1666:1980:181","statements":[{"nodeType":"YulVariableDeclaration","src":"1676:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1686:4:181","type":"","value":"0x1f"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1680:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1736:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1745:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1748:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1738:6:181"},"nodeType":"YulFunctionCall","src":"1738:12:181"},"nodeType":"YulExpressionStatement","src":"1738:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1717:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1725:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1713:3:181"},"nodeType":"YulFunctionCall","src":"1713:15:181"},{"name":"end","nodeType":"YulIdentifier","src":"1730:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1709:3:181"},"nodeType":"YulFunctionCall","src":"1709:25:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1702:6:181"},"nodeType":"YulFunctionCall","src":"1702:33:181"},"nodeType":"YulIf","src":"1699:53:181"},{"nodeType":"YulVariableDeclaration","src":"1761:23:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1777:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1771:5:181"},"nodeType":"YulFunctionCall","src":"1771:13:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1765:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1793:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1803:4:181","type":"","value":"0x20"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"1797:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1816:79:181","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1891:2:181"}],"functionName":{"name":"array_allocation_size_array_struct_FacetCut_dyn","nodeType":"YulIdentifier","src":"1843:47:181"},"nodeType":"YulFunctionCall","src":"1843:51:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"1827:15:181"},"nodeType":"YulFunctionCall","src":"1827:68:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"1820:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1904:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"1917:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"1908:5:181","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1936:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"1941:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1929:6:181"},"nodeType":"YulFunctionCall","src":"1929:15:181"},"nodeType":"YulExpressionStatement","src":"1929:15:181"},{"nodeType":"YulAssignment","src":"1953:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1964:3:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1969:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1960:3:181"},"nodeType":"YulFunctionCall","src":"1960:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"1953:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"1981:46:181","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2003:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2015:1:181","type":"","value":"5"},{"name":"_2","nodeType":"YulIdentifier","src":"2018:2:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2011:3:181"},"nodeType":"YulFunctionCall","src":"2011:10:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1999:3:181"},"nodeType":"YulFunctionCall","src":"1999:23:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2024:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1995:3:181"},"nodeType":"YulFunctionCall","src":"1995:32:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"1985:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2055:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2064:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2067:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2057:6:181"},"nodeType":"YulFunctionCall","src":"2057:12:181"},"nodeType":"YulExpressionStatement","src":"2057:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"2042:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"2050:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2039:2:181"},"nodeType":"YulFunctionCall","src":"2039:15:181"},"nodeType":"YulIf","src":"2036:35:181"},{"nodeType":"YulVariableDeclaration","src":"2080:26:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2095:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2103:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2091:3:181"},"nodeType":"YulFunctionCall","src":"2091:15:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"2084:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2171:1446:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2185:29:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2210:3:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2204:5:181"},"nodeType":"YulFunctionCall","src":"2204:10:181"},"variables":[{"name":"innerOffset","nodeType":"YulTypedName","src":"2189:11:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2227:28:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2245:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"2249:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2241:3:181"},"nodeType":"YulFunctionCall","src":"2241:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"2253:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2237:3:181"},"nodeType":"YulFunctionCall","src":"2237:18:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"2231:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2303:74:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2321:11:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2331:1:181","type":"","value":"0"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"2325:2:181","type":""}]},{"expression":{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"2356:2:181"},{"name":"_5","nodeType":"YulIdentifier","src":"2360:2:181"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2349:6:181"},"nodeType":"YulFunctionCall","src":"2349:14:181"},"nodeType":"YulExpressionStatement","src":"2349:14:181"}]},"condition":{"arguments":[{"name":"innerOffset","nodeType":"YulIdentifier","src":"2274:11:181"},{"name":"_4","nodeType":"YulIdentifier","src":"2287:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2271:2:181"},"nodeType":"YulFunctionCall","src":"2271:19:181"},"nodeType":"YulIf","src":"2268:109:181"},{"nodeType":"YulVariableDeclaration","src":"2390:34:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2404:6:181"},{"name":"innerOffset","nodeType":"YulIdentifier","src":"2412:11:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2400:3:181"},"nodeType":"YulFunctionCall","src":"2400:24:181"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"2394:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2437:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2447:4:181","type":"","value":"0x40"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"2441:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2464:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2478:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2474:3:181"},"nodeType":"YulFunctionCall","src":"2474:7:181"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"2468:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2540:74:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2558:11:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2568:1:181","type":"","value":"0"},"variables":[{"name":"_9","nodeType":"YulTypedName","src":"2562:2:181","type":""}]},{"expression":{"arguments":[{"name":"_9","nodeType":"YulIdentifier","src":"2593:2:181"},{"name":"_9","nodeType":"YulIdentifier","src":"2597:2:181"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2586:6:181"},"nodeType":"YulFunctionCall","src":"2586:14:181"},"nodeType":"YulExpressionStatement","src":"2586:14:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"2509:3:181"},{"name":"_6","nodeType":"YulIdentifier","src":"2514:2:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2505:3:181"},"nodeType":"YulFunctionCall","src":"2505:12:181"},{"name":"_8","nodeType":"YulIdentifier","src":"2519:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2501:3:181"},"nodeType":"YulFunctionCall","src":"2501:21:181"},{"name":"_7","nodeType":"YulIdentifier","src":"2524:2:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2497:3:181"},"nodeType":"YulFunctionCall","src":"2497:30:181"},"nodeType":"YulIf","src":"2494:120:181"},{"nodeType":"YulVariableDeclaration","src":"2627:35:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_3534","nodeType":"YulIdentifier","src":"2640:20:181"},"nodeType":"YulFunctionCall","src":"2640:22:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2631:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2682:5:181"},{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"2723:2:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2727:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2719:3:181"},"nodeType":"YulFunctionCall","src":"2719:11:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"2689:29:181"},"nodeType":"YulFunctionCall","src":"2689:42:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2675:6:181"},"nodeType":"YulFunctionCall","src":"2675:57:181"},"nodeType":"YulExpressionStatement","src":"2675:57:181"},{"nodeType":"YulVariableDeclaration","src":"2745:34:181","value":{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"2771:2:181"},{"name":"_7","nodeType":"YulIdentifier","src":"2775:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2767:3:181"},"nodeType":"YulFunctionCall","src":"2767:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2761:5:181"},"nodeType":"YulFunctionCall","src":"2761:18:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"2749:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2824:77:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2842:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2853:1:181","type":"","value":"0"},"variables":[{"name":"_10","nodeType":"YulTypedName","src":"2846:3:181","type":""}]},{"expression":{"arguments":[{"name":"_10","nodeType":"YulIdentifier","src":"2878:3:181"},{"name":"_10","nodeType":"YulIdentifier","src":"2883:3:181"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2871:6:181"},"nodeType":"YulFunctionCall","src":"2871:16:181"},"nodeType":"YulExpressionStatement","src":"2871:16:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"2798:8:181"},{"name":"_4","nodeType":"YulIdentifier","src":"2808:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2795:2:181"},"nodeType":"YulFunctionCall","src":"2795:16:181"},"nodeType":"YulIf","src":"2792:109:181"},{"nodeType":"YulVariableDeclaration","src":"2914:28:181","value":{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"2929:2:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"2933:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2925:3:181"},"nodeType":"YulFunctionCall","src":"2925:17:181"},"variables":[{"name":"_11","nodeType":"YulTypedName","src":"2918:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3001:77:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3019:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3030:1:181","type":"","value":"0"},"variables":[{"name":"_12","nodeType":"YulTypedName","src":"3023:3:181","type":""}]},{"expression":{"arguments":[{"name":"_12","nodeType":"YulIdentifier","src":"3055:3:181"},{"name":"_12","nodeType":"YulIdentifier","src":"3060:3:181"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3048:6:181"},"nodeType":"YulFunctionCall","src":"3048:16:181"},"nodeType":"YulExpressionStatement","src":"3048:16:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_11","nodeType":"YulIdentifier","src":"2973:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"2978:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2969:3:181"},"nodeType":"YulFunctionCall","src":"2969:12:181"},{"name":"end","nodeType":"YulIdentifier","src":"2983:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2965:3:181"},"nodeType":"YulFunctionCall","src":"2965:22:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2958:6:181"},"nodeType":"YulFunctionCall","src":"2958:30:181"},"nodeType":"YulIf","src":"2955:123:181"},{"nodeType":"YulVariableDeclaration","src":"3091:30:181","value":{"arguments":[{"arguments":[{"name":"_11","nodeType":"YulIdentifier","src":"3112:3:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3117:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3108:3:181"},"nodeType":"YulFunctionCall","src":"3108:12:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3102:5:181"},"nodeType":"YulFunctionCall","src":"3102:19:181"},"variables":[{"name":"_13","nodeType":"YulTypedName","src":"3095:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3149:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"3151:16:181"},"nodeType":"YulFunctionCall","src":"3151:18:181"},"nodeType":"YulExpressionStatement","src":"3151:18:181"}]},"condition":{"arguments":[{"name":"_13","nodeType":"YulIdentifier","src":"3140:3:181"},{"name":"_4","nodeType":"YulIdentifier","src":"3145:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3137:2:181"},"nodeType":"YulFunctionCall","src":"3137:11:181"},"nodeType":"YulIf","src":"3134:37:181"},{"nodeType":"YulVariableDeclaration","src":"3184:62:181","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_13","nodeType":"YulIdentifier","src":"3227:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3232:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3223:3:181"},"nodeType":"YulFunctionCall","src":"3223:12:181"},{"name":"_8","nodeType":"YulIdentifier","src":"3237:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3219:3:181"},"nodeType":"YulFunctionCall","src":"3219:21:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3242:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3215:3:181"},"nodeType":"YulFunctionCall","src":"3215:30:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"3199:15:181"},"nodeType":"YulFunctionCall","src":"3199:47:181"},"variables":[{"name":"array_1","nodeType":"YulTypedName","src":"3188:7:181","type":""}]},{"expression":{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"3266:7:181"},{"name":"_13","nodeType":"YulIdentifier","src":"3275:3:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3259:6:181"},"nodeType":"YulFunctionCall","src":"3259:20:181"},"nodeType":"YulExpressionStatement","src":"3259:20:181"},{"body":{"nodeType":"YulBlock","src":"3339:77:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3357:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3368:1:181","type":"","value":"0"},"variables":[{"name":"_14","nodeType":"YulTypedName","src":"3361:3:181","type":""}]},{"expression":{"arguments":[{"name":"_14","nodeType":"YulIdentifier","src":"3393:3:181"},{"name":"_14","nodeType":"YulIdentifier","src":"3398:3:181"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3386:6:181"},"nodeType":"YulFunctionCall","src":"3386:16:181"},"nodeType":"YulExpressionStatement","src":"3386:16:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_11","nodeType":"YulIdentifier","src":"3306:3:181"},{"name":"_13","nodeType":"YulIdentifier","src":"3311:3:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3302:3:181"},"nodeType":"YulFunctionCall","src":"3302:13:181"},{"name":"_7","nodeType":"YulIdentifier","src":"3317:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3298:3:181"},"nodeType":"YulFunctionCall","src":"3298:22:181"},{"name":"end","nodeType":"YulIdentifier","src":"3322:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3295:2:181"},"nodeType":"YulFunctionCall","src":"3295:31:181"},"nodeType":"YulIf","src":"3292:124:181"},{"expression":{"arguments":[{"arguments":[{"name":"_11","nodeType":"YulIdentifier","src":"3468:3:181"},{"name":"_7","nodeType":"YulIdentifier","src":"3473:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3464:3:181"},"nodeType":"YulFunctionCall","src":"3464:12:181"},{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"3482:7:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3491:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3478:3:181"},"nodeType":"YulFunctionCall","src":"3478:16:181"},{"name":"_13","nodeType":"YulIdentifier","src":"3496:3:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"3429:34:181"},"nodeType":"YulFunctionCall","src":"3429:71:181"},"nodeType":"YulExpressionStatement","src":"3429:71:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3524:5:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3531:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3520:3:181"},"nodeType":"YulFunctionCall","src":"3520:14:181"},{"name":"array_1","nodeType":"YulIdentifier","src":"3536:7:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3513:6:181"},"nodeType":"YulFunctionCall","src":"3513:31:181"},"nodeType":"YulExpressionStatement","src":"3513:31:181"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"3564:3:181"},{"name":"value","nodeType":"YulIdentifier","src":"3569:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3557:6:181"},"nodeType":"YulFunctionCall","src":"3557:18:181"},"nodeType":"YulExpressionStatement","src":"3557:18:181"},{"nodeType":"YulAssignment","src":"3588:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"3599:3:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3604:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3595:3:181"},"nodeType":"YulFunctionCall","src":"3595:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"3588:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2126:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"2131:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2123:2:181"},"nodeType":"YulFunctionCall","src":"2123:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2139:23:181","statements":[{"nodeType":"YulAssignment","src":"2141:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2152:3:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2157:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2148:3:181"},"nodeType":"YulFunctionCall","src":"2148:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"2141:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"2119:3:181","statements":[]},"src":"2115:1502:181"},{"nodeType":"YulAssignment","src":"3626:14:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"3635:5:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"3626:5:181"}]}]},"name":"abi_decode_array_struct_Initialization_dyn_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1640:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"1648:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"1656:5:181","type":""}],"src":"1577:2069:181"},{"body":{"nodeType":"YulBlock","src":"3876:2455:181","statements":[{"body":{"nodeType":"YulBlock","src":"3922:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3931:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3934:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3924:6:181"},"nodeType":"YulFunctionCall","src":"3924:12:181"},"nodeType":"YulExpressionStatement","src":"3924:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3897:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3906:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3893:3:181"},"nodeType":"YulFunctionCall","src":"3893:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3918:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3889:3:181"},"nodeType":"YulFunctionCall","src":"3889:32:181"},"nodeType":"YulIf","src":"3886:52:181"},{"nodeType":"YulAssignment","src":"3947:50:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3987:9:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"3957:29:181"},"nodeType":"YulFunctionCall","src":"3957:40:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3947:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"4006:39:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4030:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4041:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4026:3:181"},"nodeType":"YulFunctionCall","src":"4026:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4020:5:181"},"nodeType":"YulFunctionCall","src":"4020:25:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"4010:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4054:28:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4072:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"4076:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4068:3:181"},"nodeType":"YulFunctionCall","src":"4068:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"4080:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4064:3:181"},"nodeType":"YulFunctionCall","src":"4064:18:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4058:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4109:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4118:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4121:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4111:6:181"},"nodeType":"YulFunctionCall","src":"4111:12:181"},"nodeType":"YulExpressionStatement","src":"4111:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4097:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4105:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4094:2:181"},"nodeType":"YulFunctionCall","src":"4094:14:181"},"nodeType":"YulIf","src":"4091:34:181"},{"nodeType":"YulVariableDeclaration","src":"4134:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4148:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"4159:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4144:3:181"},"nodeType":"YulFunctionCall","src":"4144:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"4138:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4214:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4223:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4226:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4216:6:181"},"nodeType":"YulFunctionCall","src":"4216:12:181"},"nodeType":"YulExpressionStatement","src":"4216:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4193:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4197:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4189:3:181"},"nodeType":"YulFunctionCall","src":"4189:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4204:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4185:3:181"},"nodeType":"YulFunctionCall","src":"4185:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4178:6:181"},"nodeType":"YulFunctionCall","src":"4178:35:181"},"nodeType":"YulIf","src":"4175:55:181"},{"nodeType":"YulVariableDeclaration","src":"4239:19:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4255:2:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4249:5:181"},"nodeType":"YulFunctionCall","src":"4249:9:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"4243:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4267:79:181","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"4342:2:181"}],"functionName":{"name":"array_allocation_size_array_struct_FacetCut_dyn","nodeType":"YulIdentifier","src":"4294:47:181"},"nodeType":"YulFunctionCall","src":"4294:51:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"4278:15:181"},"nodeType":"YulFunctionCall","src":"4278:68:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"4271:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4355:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"4368:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"4359:5:181","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4387:3:181"},{"name":"_3","nodeType":"YulIdentifier","src":"4392:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4380:6:181"},"nodeType":"YulFunctionCall","src":"4380:15:181"},"nodeType":"YulExpressionStatement","src":"4380:15:181"},{"nodeType":"YulAssignment","src":"4404:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4415:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"4420:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4411:3:181"},"nodeType":"YulFunctionCall","src":"4411:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"4404:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"4432:42:181","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4454:2:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4462:1:181","type":"","value":"5"},{"name":"_3","nodeType":"YulIdentifier","src":"4465:2:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4458:3:181"},"nodeType":"YulFunctionCall","src":"4458:10:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4450:3:181"},"nodeType":"YulFunctionCall","src":"4450:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"4471:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4446:3:181"},"nodeType":"YulFunctionCall","src":"4446:28:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"4436:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4506:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4515:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4518:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4508:6:181"},"nodeType":"YulFunctionCall","src":"4508:12:181"},"nodeType":"YulExpressionStatement","src":"4508:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"4489:6:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4497:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4486:2:181"},"nodeType":"YulFunctionCall","src":"4486:19:181"},"nodeType":"YulIf","src":"4483:39:181"},{"nodeType":"YulVariableDeclaration","src":"4531:22:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4546:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4550:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4542:3:181"},"nodeType":"YulFunctionCall","src":"4542:11:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"4535:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4618:1481:181","statements":[{"nodeType":"YulVariableDeclaration","src":"4632:29:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4657:3:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4651:5:181"},"nodeType":"YulFunctionCall","src":"4651:10:181"},"variables":[{"name":"innerOffset","nodeType":"YulTypedName","src":"4636:11:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4697:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4706:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4709:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4699:6:181"},"nodeType":"YulFunctionCall","src":"4699:12:181"},"nodeType":"YulExpressionStatement","src":"4699:12:181"}]},"condition":{"arguments":[{"name":"innerOffset","nodeType":"YulIdentifier","src":"4680:11:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4693:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4677:2:181"},"nodeType":"YulFunctionCall","src":"4677:19:181"},"nodeType":"YulIf","src":"4674:39:181"},{"nodeType":"YulVariableDeclaration","src":"4726:30:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4740:2:181"},{"name":"innerOffset","nodeType":"YulIdentifier","src":"4744:11:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4736:3:181"},"nodeType":"YulFunctionCall","src":"4736:20:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"4730:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4812:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4821:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4824:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4814:6:181"},"nodeType":"YulFunctionCall","src":"4814:12:181"},"nodeType":"YulExpressionStatement","src":"4814:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4784:7:181"},{"name":"_4","nodeType":"YulIdentifier","src":"4793:2:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4780:3:181"},"nodeType":"YulFunctionCall","src":"4780:16:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4802:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4798:3:181"},"nodeType":"YulFunctionCall","src":"4798:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4776:3:181"},"nodeType":"YulFunctionCall","src":"4776:30:181"},{"kind":"number","nodeType":"YulLiteral","src":"4808:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4772:3:181"},"nodeType":"YulFunctionCall","src":"4772:39:181"},"nodeType":"YulIf","src":"4769:59:181"},{"nodeType":"YulVariableDeclaration","src":"4841:35:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_3535","nodeType":"YulIdentifier","src":"4854:20:181"},"nodeType":"YulFunctionCall","src":"4854:22:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4845:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4896:5:181"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"4937:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4941:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4933:3:181"},"nodeType":"YulFunctionCall","src":"4933:11:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"4903:29:181"},"nodeType":"YulFunctionCall","src":"4903:42:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4889:6:181"},"nodeType":"YulFunctionCall","src":"4889:57:181"},"nodeType":"YulExpressionStatement","src":"4889:57:181"},{"nodeType":"YulVariableDeclaration","src":"4959:33:181","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"4984:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4988:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4980:3:181"},"nodeType":"YulFunctionCall","src":"4980:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4974:5:181"},"nodeType":"YulFunctionCall","src":"4974:18:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4963:7:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5031:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5040:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5043:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5033:6:181"},"nodeType":"YulFunctionCall","src":"5033:12:181"},"nodeType":"YulExpressionStatement","src":"5033:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5018:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"5027:1:181","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5015:2:181"},"nodeType":"YulFunctionCall","src":"5015:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5008:6:181"},"nodeType":"YulFunctionCall","src":"5008:22:181"},"nodeType":"YulIf","src":"5005:42:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5071:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5078:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5067:3:181"},"nodeType":"YulFunctionCall","src":"5067:14:181"},{"name":"value_1","nodeType":"YulIdentifier","src":"5083:7:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5060:6:181"},"nodeType":"YulFunctionCall","src":"5060:31:181"},"nodeType":"YulExpressionStatement","src":"5060:31:181"},{"nodeType":"YulVariableDeclaration","src":"5104:34:181","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"5130:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"5134:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5126:3:181"},"nodeType":"YulFunctionCall","src":"5126:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5120:5:181"},"nodeType":"YulFunctionCall","src":"5120:18:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"5108:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5171:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5180:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5183:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5173:6:181"},"nodeType":"YulFunctionCall","src":"5173:12:181"},"nodeType":"YulExpressionStatement","src":"5173:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"5157:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5167:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5154:2:181"},"nodeType":"YulFunctionCall","src":"5154:16:181"},"nodeType":"YulIf","src":"5151:36:181"},{"nodeType":"YulVariableDeclaration","src":"5200:27:181","value":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"5214:2:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"5218:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5210:3:181"},"nodeType":"YulFunctionCall","src":"5210:17:181"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"5204:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5277:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5286:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5289:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5279:6:181"},"nodeType":"YulFunctionCall","src":"5279:12:181"},"nodeType":"YulExpressionStatement","src":"5279:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"5258:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"5262:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5254:3:181"},"nodeType":"YulFunctionCall","src":"5254:11:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5267:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5250:3:181"},"nodeType":"YulFunctionCall","src":"5250:25:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5243:6:181"},"nodeType":"YulFunctionCall","src":"5243:33:181"},"nodeType":"YulIf","src":"5240:53:181"},{"nodeType":"YulVariableDeclaration","src":"5306:28:181","value":{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"5326:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"5330:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5322:3:181"},"nodeType":"YulFunctionCall","src":"5322:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5316:5:181"},"nodeType":"YulFunctionCall","src":"5316:18:181"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"5310:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5347:81:181","value":{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"5424:2:181"}],"functionName":{"name":"array_allocation_size_array_struct_FacetCut_dyn","nodeType":"YulIdentifier","src":"5376:47:181"},"nodeType":"YulFunctionCall","src":"5376:51:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"5360:15:181"},"nodeType":"YulFunctionCall","src":"5360:68:181"},"variables":[{"name":"dst_2","nodeType":"YulTypedName","src":"5351:5:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5441:18:181","value":{"name":"dst_2","nodeType":"YulIdentifier","src":"5454:5:181"},"variables":[{"name":"dst_3","nodeType":"YulTypedName","src":"5445:5:181","type":""}]},{"expression":{"arguments":[{"name":"dst_2","nodeType":"YulIdentifier","src":"5479:5:181"},{"name":"_6","nodeType":"YulIdentifier","src":"5486:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5472:6:181"},"nodeType":"YulFunctionCall","src":"5472:17:181"},"nodeType":"YulExpressionStatement","src":"5472:17:181"},{"nodeType":"YulAssignment","src":"5502:23:181","value":{"arguments":[{"name":"dst_2","nodeType":"YulIdentifier","src":"5515:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5522:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5511:3:181"},"nodeType":"YulFunctionCall","src":"5511:14:181"},"variableNames":[{"name":"dst_2","nodeType":"YulIdentifier","src":"5502:5:181"}]},{"nodeType":"YulVariableDeclaration","src":"5538:44:181","value":{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"5562:2:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5570:1:181","type":"","value":"5"},{"name":"_6","nodeType":"YulIdentifier","src":"5573:2:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5566:3:181"},"nodeType":"YulFunctionCall","src":"5566:10:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5558:3:181"},"nodeType":"YulFunctionCall","src":"5558:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"5579:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5554:3:181"},"nodeType":"YulFunctionCall","src":"5554:28:181"},"variables":[{"name":"srcEnd_1","nodeType":"YulTypedName","src":"5542:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5620:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5629:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5632:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5622:6:181"},"nodeType":"YulFunctionCall","src":"5622:12:181"},"nodeType":"YulExpressionStatement","src":"5622:12:181"}]},"condition":{"arguments":[{"name":"srcEnd_1","nodeType":"YulIdentifier","src":"5601:8:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5611:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5598:2:181"},"nodeType":"YulFunctionCall","src":"5598:21:181"},"nodeType":"YulIf","src":"5595:41:181"},{"nodeType":"YulVariableDeclaration","src":"5649:24:181","value":{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"5666:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"5670:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5662:3:181"},"nodeType":"YulFunctionCall","src":"5662:11:181"},"variables":[{"name":"src_1","nodeType":"YulTypedName","src":"5653:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5754:230:181","statements":[{"nodeType":"YulVariableDeclaration","src":"5772:27:181","value":{"arguments":[{"name":"src_1","nodeType":"YulIdentifier","src":"5793:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5787:5:181"},"nodeType":"YulFunctionCall","src":"5787:12:181"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"5776:7:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5875:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5884:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5887:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5877:6:181"},"nodeType":"YulFunctionCall","src":"5877:12:181"},"nodeType":"YulExpressionStatement","src":"5877:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"5829:7:181"},{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"5842:7:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5855:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"5860:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5851:3:181"},"nodeType":"YulFunctionCall","src":"5851:20:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5838:3:181"},"nodeType":"YulFunctionCall","src":"5838:34:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5826:2:181"},"nodeType":"YulFunctionCall","src":"5826:47:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5819:6:181"},"nodeType":"YulFunctionCall","src":"5819:55:181"},"nodeType":"YulIf","src":"5816:75:181"},{"expression":{"arguments":[{"name":"dst_2","nodeType":"YulIdentifier","src":"5915:5:181"},{"name":"value_2","nodeType":"YulIdentifier","src":"5922:7:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5908:6:181"},"nodeType":"YulFunctionCall","src":"5908:22:181"},"nodeType":"YulExpressionStatement","src":"5908:22:181"},{"nodeType":"YulAssignment","src":"5947:23:181","value":{"arguments":[{"name":"dst_2","nodeType":"YulIdentifier","src":"5960:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5967:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5956:3:181"},"nodeType":"YulFunctionCall","src":"5956:14:181"},"variableNames":[{"name":"dst_2","nodeType":"YulIdentifier","src":"5947:5:181"}]}]},"condition":{"arguments":[{"name":"src_1","nodeType":"YulIdentifier","src":"5697:5:181"},{"name":"srcEnd_1","nodeType":"YulIdentifier","src":"5704:8:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5694:2:181"},"nodeType":"YulFunctionCall","src":"5694:19:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5714:27:181","statements":[{"nodeType":"YulAssignment","src":"5716:23:181","value":{"arguments":[{"name":"src_1","nodeType":"YulIdentifier","src":"5729:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5736:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5725:3:181"},"nodeType":"YulFunctionCall","src":"5725:14:181"},"variableNames":[{"name":"src_1","nodeType":"YulIdentifier","src":"5716:5:181"}]}]},"pre":{"nodeType":"YulBlock","src":"5690:3:181","statements":[]},"src":"5686:298:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6008:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"6015:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6004:3:181"},"nodeType":"YulFunctionCall","src":"6004:14:181"},{"name":"dst_3","nodeType":"YulIdentifier","src":"6020:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5997:6:181"},"nodeType":"YulFunctionCall","src":"5997:29:181"},"nodeType":"YulExpressionStatement","src":"5997:29:181"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6046:3:181"},{"name":"value","nodeType":"YulIdentifier","src":"6051:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6039:6:181"},"nodeType":"YulFunctionCall","src":"6039:18:181"},"nodeType":"YulExpressionStatement","src":"6039:18:181"},{"nodeType":"YulAssignment","src":"6070:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6081:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"6086:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6077:3:181"},"nodeType":"YulFunctionCall","src":"6077:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"6070:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4573:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"4578:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4570:2:181"},"nodeType":"YulFunctionCall","src":"4570:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4586:23:181","statements":[{"nodeType":"YulAssignment","src":"4588:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4599:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"4604:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4595:3:181"},"nodeType":"YulFunctionCall","src":"4595:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"4588:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"4566:3:181","statements":[]},"src":"4562:1537:181"},{"nodeType":"YulAssignment","src":"6108:15:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"6118:5:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6108:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"6132:41:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6158:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6169:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6154:3:181"},"nodeType":"YulFunctionCall","src":"6154:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6148:5:181"},"nodeType":"YulFunctionCall","src":"6148:25:181"},"variables":[{"name":"offset_2","nodeType":"YulTypedName","src":"6136:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6202:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6211:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6214:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6204:6:181"},"nodeType":"YulFunctionCall","src":"6204:12:181"},"nodeType":"YulExpressionStatement","src":"6204:12:181"}]},"condition":{"arguments":[{"name":"offset_2","nodeType":"YulIdentifier","src":"6188:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6198:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6185:2:181"},"nodeType":"YulFunctionCall","src":"6185:16:181"},"nodeType":"YulIf","src":"6182:36:181"},{"nodeType":"YulAssignment","src":"6227:98:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6295:9:181"},{"name":"offset_2","nodeType":"YulIdentifier","src":"6306:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6291:3:181"},"nodeType":"YulFunctionCall","src":"6291:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6317:7:181"}],"functionName":{"name":"abi_decode_array_struct_Initialization_dyn_fromMemory","nodeType":"YulIdentifier","src":"6237:53:181"},"nodeType":"YulFunctionCall","src":"6237:88:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6227:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptrt_array$_t_struct$_Initialization_$22413_memory_ptr_$dyn_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3826:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3837:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3849:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3857:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3865:6:181","type":""}],"src":"3651:2680:181"},{"body":{"nodeType":"YulBlock","src":"6368:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6385:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6392:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"6397:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6388:3:181"},"nodeType":"YulFunctionCall","src":"6388:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6378:6:181"},"nodeType":"YulFunctionCall","src":"6378:31:181"},"nodeType":"YulExpressionStatement","src":"6378:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6425:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6428:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6418:6:181"},"nodeType":"YulFunctionCall","src":"6418:15:181"},"nodeType":"YulExpressionStatement","src":"6418:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6449:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6452:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6442:6:181"},"nodeType":"YulFunctionCall","src":"6442:15:181"},"nodeType":"YulExpressionStatement","src":"6442:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"6336:127:181"},{"body":{"nodeType":"YulBlock","src":"6512:60:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6529:3:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6538:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6553:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6558:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6549:3:181"},"nodeType":"YulFunctionCall","src":"6549:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"6562:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6545:3:181"},"nodeType":"YulFunctionCall","src":"6545:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6534:3:181"},"nodeType":"YulFunctionCall","src":"6534:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6522:6:181"},"nodeType":"YulFunctionCall","src":"6522:44:181"},"nodeType":"YulExpressionStatement","src":"6522:44:181"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"6496:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"6503:3:181","type":""}],"src":"6468:104:181"},{"body":{"nodeType":"YulBlock","src":"6609:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6626:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6633:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"6638:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6629:3:181"},"nodeType":"YulFunctionCall","src":"6629:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6619:6:181"},"nodeType":"YulFunctionCall","src":"6619:31:181"},"nodeType":"YulExpressionStatement","src":"6619:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6666:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6669:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6659:6:181"},"nodeType":"YulFunctionCall","src":"6659:15:181"},"nodeType":"YulExpressionStatement","src":"6659:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6690:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6693:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6683:6:181"},"nodeType":"YulFunctionCall","src":"6683:15:181"},"nodeType":"YulExpressionStatement","src":"6683:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"6577:127:181"},{"body":{"nodeType":"YulBlock","src":"6758:221:181","statements":[{"nodeType":"YulVariableDeclaration","src":"6768:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6788:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6782:5:181"},"nodeType":"YulFunctionCall","src":"6782:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"6772:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6810:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"6815:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6803:6:181"},"nodeType":"YulFunctionCall","src":"6803:19:181"},"nodeType":"YulExpressionStatement","src":"6803:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6870:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"6877:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6866:3:181"},"nodeType":"YulFunctionCall","src":"6866:16:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6888:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"6893:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6884:3:181"},"nodeType":"YulFunctionCall","src":"6884:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"6900:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"6831:34:181"},"nodeType":"YulFunctionCall","src":"6831:76:181"},"nodeType":"YulExpressionStatement","src":"6831:76:181"},{"nodeType":"YulAssignment","src":"6916:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6931:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6944:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6952:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6940:3:181"},"nodeType":"YulFunctionCall","src":"6940:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6961:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6957:3:181"},"nodeType":"YulFunctionCall","src":"6957:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6936:3:181"},"nodeType":"YulFunctionCall","src":"6936:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6927:3:181"},"nodeType":"YulFunctionCall","src":"6927:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"6968:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6923:3:181"},"nodeType":"YulFunctionCall","src":"6923:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"6916:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"6735:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"6742:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"6750:3:181","type":""}],"src":"6709:270:181"},{"body":{"nodeType":"YulBlock","src":"7263:1813:181","statements":[{"nodeType":"YulVariableDeclaration","src":"7273:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7283:2:181","type":"","value":"96"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7277:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7294:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7312:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7323:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7308:3:181"},"nodeType":"YulFunctionCall","src":"7308:18:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"7298:6:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7342:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7353:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7335:6:181"},"nodeType":"YulFunctionCall","src":"7335:21:181"},"nodeType":"YulExpressionStatement","src":"7335:21:181"},{"nodeType":"YulVariableDeclaration","src":"7365:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"7376:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"7369:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7391:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7411:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7405:5:181"},"nodeType":"YulFunctionCall","src":"7405:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"7395:6:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"7434:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"7442:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7427:6:181"},"nodeType":"YulFunctionCall","src":"7427:22:181"},"nodeType":"YulExpressionStatement","src":"7427:22:181"},{"nodeType":"YulVariableDeclaration","src":"7458:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7468:3:181","type":"","value":"128"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"7462:2:181","type":""}]},{"nodeType":"YulAssignment","src":"7480:25:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7491:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"7502:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7487:3:181"},"nodeType":"YulFunctionCall","src":"7487:18:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"7480:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"7514:53:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7536:9:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7551:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"7554:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7547:3:181"},"nodeType":"YulFunctionCall","src":"7547:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7532:3:181"},"nodeType":"YulFunctionCall","src":"7532:30:181"},{"name":"_2","nodeType":"YulIdentifier","src":"7564:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7528:3:181"},"nodeType":"YulFunctionCall","src":"7528:39:181"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"7518:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7576:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7586:4:181","type":"","value":"0x20"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"7580:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7599:29:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7617:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"7625:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7613:3:181"},"nodeType":"YulFunctionCall","src":"7613:15:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"7603:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7637:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7646:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"7641:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7705:1200:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7726:3:181"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"7739:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7747:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7735:3:181"},"nodeType":"YulFunctionCall","src":"7735:22:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7763:3:181","type":"","value":"127"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7759:3:181"},"nodeType":"YulFunctionCall","src":"7759:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7731:3:181"},"nodeType":"YulFunctionCall","src":"7731:37:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7719:6:181"},"nodeType":"YulFunctionCall","src":"7719:50:181"},"nodeType":"YulExpressionStatement","src":"7719:50:181"},{"nodeType":"YulVariableDeclaration","src":"7782:23:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"7798:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7792:5:181"},"nodeType":"YulFunctionCall","src":"7792:13:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"7786:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7818:29:181","value":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"7836:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7844:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7832:3:181"},"nodeType":"YulFunctionCall","src":"7832:15:181"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"7822:6:181","type":""}]},{"expression":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"7867:6:181"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"7885:2:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7879:5:181"},"nodeType":"YulFunctionCall","src":"7879:9:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7898:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"7903:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7894:3:181"},"nodeType":"YulFunctionCall","src":"7894:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"7907:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7890:3:181"},"nodeType":"YulFunctionCall","src":"7890:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7875:3:181"},"nodeType":"YulFunctionCall","src":"7875:35:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7860:6:181"},"nodeType":"YulFunctionCall","src":"7860:51:181"},"nodeType":"YulExpressionStatement","src":"7860:51:181"},{"nodeType":"YulVariableDeclaration","src":"7924:38:181","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"7954:2:181"},{"name":"_3","nodeType":"YulIdentifier","src":"7958:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7950:3:181"},"nodeType":"YulFunctionCall","src":"7950:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7944:5:181"},"nodeType":"YulFunctionCall","src":"7944:18:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"7928:12:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8018:127:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8043:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8050:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"8055:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8046:3:181"},"nodeType":"YulFunctionCall","src":"8046:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8036:6:181"},"nodeType":"YulFunctionCall","src":"8036:31:181"},"nodeType":"YulExpressionStatement","src":"8036:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8091:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8094:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8084:6:181"},"nodeType":"YulFunctionCall","src":"8084:15:181"},"nodeType":"YulExpressionStatement","src":"8084:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8123:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8126:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8116:6:181"},"nodeType":"YulFunctionCall","src":"8116:15:181"},"nodeType":"YulExpressionStatement","src":"8116:15:181"}]},"condition":{"arguments":[{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"7988:12:181"},{"kind":"number","nodeType":"YulLiteral","src":"8002:1:181","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7985:2:181"},"nodeType":"YulFunctionCall","src":"7985:19:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7978:6:181"},"nodeType":"YulFunctionCall","src":"7978:27:181"},"nodeType":"YulIf","src":"7975:170:181"},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"8169:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"8177:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8165:3:181"},"nodeType":"YulFunctionCall","src":"8165:15:181"},{"name":"memberValue0","nodeType":"YulIdentifier","src":"8182:12:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8158:6:181"},"nodeType":"YulFunctionCall","src":"8158:37:181"},"nodeType":"YulExpressionStatement","src":"8158:37:181"},{"nodeType":"YulVariableDeclaration","src":"8208:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8218:4:181","type":"","value":"0x40"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"8212:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8235:40:181","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"8267:2:181"},{"name":"_5","nodeType":"YulIdentifier","src":"8271:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8263:3:181"},"nodeType":"YulFunctionCall","src":"8263:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8257:5:181"},"nodeType":"YulFunctionCall","src":"8257:18:181"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"8239:14:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"8299:6:181"},{"name":"_5","nodeType":"YulIdentifier","src":"8307:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8295:3:181"},"nodeType":"YulFunctionCall","src":"8295:15:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8312:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8288:6:181"},"nodeType":"YulFunctionCall","src":"8288:27:181"},"nodeType":"YulExpressionStatement","src":"8288:27:181"},{"nodeType":"YulVariableDeclaration","src":"8328:19:181","value":{"name":"tail_3","nodeType":"YulIdentifier","src":"8341:6:181"},"variables":[{"name":"pos_1","nodeType":"YulTypedName","src":"8332:5:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8360:37:181","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"8382:14:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8376:5:181"},"nodeType":"YulFunctionCall","src":"8376:21:181"},"variables":[{"name":"length_1","nodeType":"YulTypedName","src":"8364:8:181","type":""}]},{"expression":{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"8417:6:181"},{"name":"length_1","nodeType":"YulIdentifier","src":"8425:8:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8410:6:181"},"nodeType":"YulFunctionCall","src":"8410:24:181"},"nodeType":"YulExpressionStatement","src":"8410:24:181"},{"nodeType":"YulAssignment","src":"8447:24:181","value":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"8460:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"8468:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8456:3:181"},"nodeType":"YulFunctionCall","src":"8456:15:181"},"variableNames":[{"name":"pos_1","nodeType":"YulIdentifier","src":"8447:5:181"}]},{"nodeType":"YulVariableDeclaration","src":"8484:39:181","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"8504:14:181"},{"name":"_3","nodeType":"YulIdentifier","src":"8520:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8500:3:181"},"nodeType":"YulFunctionCall","src":"8500:23:181"},"variables":[{"name":"srcPtr_1","nodeType":"YulTypedName","src":"8488:8:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8536:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8547:1:181","type":"","value":"0"},"variables":[{"name":"i_1","nodeType":"YulTypedName","src":"8540:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8622:175:181","statements":[{"expression":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"8647:5:181"},{"arguments":[{"arguments":[{"name":"srcPtr_1","nodeType":"YulIdentifier","src":"8664:8:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8658:5:181"},"nodeType":"YulFunctionCall","src":"8658:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8679:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"8684:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8675:3:181"},"nodeType":"YulFunctionCall","src":"8675:20:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8654:3:181"},"nodeType":"YulFunctionCall","src":"8654:42:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8640:6:181"},"nodeType":"YulFunctionCall","src":"8640:57:181"},"nodeType":"YulExpressionStatement","src":"8640:57:181"},{"nodeType":"YulAssignment","src":"8714:23:181","value":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"8727:5:181"},{"name":"_3","nodeType":"YulIdentifier","src":"8734:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8723:3:181"},"nodeType":"YulFunctionCall","src":"8723:14:181"},"variableNames":[{"name":"pos_1","nodeType":"YulIdentifier","src":"8714:5:181"}]},{"nodeType":"YulAssignment","src":"8754:29:181","value":{"arguments":[{"name":"srcPtr_1","nodeType":"YulIdentifier","src":"8770:8:181"},{"name":"_3","nodeType":"YulIdentifier","src":"8780:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8766:3:181"},"nodeType":"YulFunctionCall","src":"8766:17:181"},"variableNames":[{"name":"srcPtr_1","nodeType":"YulIdentifier","src":"8754:8:181"}]}]},"condition":{"arguments":[{"name":"i_1","nodeType":"YulIdentifier","src":"8572:3:181"},{"name":"length_1","nodeType":"YulIdentifier","src":"8577:8:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8569:2:181"},"nodeType":"YulFunctionCall","src":"8569:17:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"8587:22:181","statements":[{"nodeType":"YulAssignment","src":"8589:18:181","value":{"arguments":[{"name":"i_1","nodeType":"YulIdentifier","src":"8600:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"8605:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8596:3:181"},"nodeType":"YulFunctionCall","src":"8596:11:181"},"variableNames":[{"name":"i_1","nodeType":"YulIdentifier","src":"8589:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"8565:3:181","statements":[]},"src":"8561:236:181"},{"nodeType":"YulAssignment","src":"8810:15:181","value":{"name":"pos_1","nodeType":"YulIdentifier","src":"8820:5:181"},"variableNames":[{"name":"tail_2","nodeType":"YulIdentifier","src":"8810:6:181"}]},{"nodeType":"YulAssignment","src":"8838:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"8852:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"8860:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8848:3:181"},"nodeType":"YulFunctionCall","src":"8848:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"8838:6:181"}]},{"nodeType":"YulAssignment","src":"8876:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8887:3:181"},{"name":"_3","nodeType":"YulIdentifier","src":"8892:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8883:3:181"},"nodeType":"YulFunctionCall","src":"8883:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"8876:3:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"7667:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"7670:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7664:2:181"},"nodeType":"YulFunctionCall","src":"7664:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"7678:18:181","statements":[{"nodeType":"YulAssignment","src":"7680:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"7689:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"7692:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7685:3:181"},"nodeType":"YulFunctionCall","src":"7685:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"7680:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"7660:3:181","statements":[]},"src":"7656:1249:181"},{"expression":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"8933:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8945:9:181"},{"name":"_3","nodeType":"YulIdentifier","src":"8956:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8941:3:181"},"nodeType":"YulFunctionCall","src":"8941:18:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"8914:18:181"},"nodeType":"YulFunctionCall","src":"8914:46:181"},"nodeType":"YulExpressionStatement","src":"8914:46:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8980:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8991:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8976:3:181"},"nodeType":"YulFunctionCall","src":"8976:20:181"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"9002:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"9010:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8998:3:181"},"nodeType":"YulFunctionCall","src":"8998:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8969:6:181"},"nodeType":"YulFunctionCall","src":"8969:52:181"},"nodeType":"YulExpressionStatement","src":"8969:52:181"},{"nodeType":"YulAssignment","src":"9030:40:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"9055:6:181"},{"name":"tail_2","nodeType":"YulIdentifier","src":"9063:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"9038:16:181"},"nodeType":"YulFunctionCall","src":"9038:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9030:4:181"}]}]},"name":"abi_encode_tuple_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7216:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7227:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7235:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7243:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7254:4:181","type":""}],"src":"6984:2092:181"},{"body":{"nodeType":"YulBlock","src":"9255:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9272:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9283:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9265:6:181"},"nodeType":"YulFunctionCall","src":"9265:21:181"},"nodeType":"YulExpressionStatement","src":"9265:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9306:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9317:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9302:3:181"},"nodeType":"YulFunctionCall","src":"9302:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9322:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9295:6:181"},"nodeType":"YulFunctionCall","src":"9295:30:181"},"nodeType":"YulExpressionStatement","src":"9295:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9345:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9356:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9341:3:181"},"nodeType":"YulFunctionCall","src":"9341:18:181"},{"hexValue":"4c69624469616d6f6e643a2064656c6179206e6f7420656c6170736564","kind":"string","nodeType":"YulLiteral","src":"9361:31:181","type":"","value":"LibDiamond: delay not elapsed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9334:6:181"},"nodeType":"YulFunctionCall","src":"9334:59:181"},"nodeType":"YulExpressionStatement","src":"9334:59:181"},{"nodeType":"YulAssignment","src":"9402:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9414:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9425:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9410:3:181"},"nodeType":"YulFunctionCall","src":"9410:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9402:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_bf74910c6b16e2fe967a9c2fd1df7451e7594bd2184362aed0a451068a63c3f3__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9232:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9246:4:181","type":""}],"src":"9081:353:181"},{"body":{"nodeType":"YulBlock","src":"9613:229:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9630:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9641:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9623:6:181"},"nodeType":"YulFunctionCall","src":"9623:21:181"},"nodeType":"YulExpressionStatement","src":"9623:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9664:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9675:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9660:3:181"},"nodeType":"YulFunctionCall","src":"9660:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9680:2:181","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9653:6:181"},"nodeType":"YulFunctionCall","src":"9653:30:181"},"nodeType":"YulExpressionStatement","src":"9653:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9703:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9714:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9699:3:181"},"nodeType":"YulFunctionCall","src":"9699:18:181"},{"hexValue":"4c69624469616d6f6e644375743a20496e636f72726563742046616365744375","kind":"string","nodeType":"YulLiteral","src":"9719:34:181","type":"","value":"LibDiamondCut: Incorrect FacetCu"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9692:6:181"},"nodeType":"YulFunctionCall","src":"9692:62:181"},"nodeType":"YulExpressionStatement","src":"9692:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9774:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9785:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9770:3:181"},"nodeType":"YulFunctionCall","src":"9770:18:181"},{"hexValue":"74416374696f6e","kind":"string","nodeType":"YulLiteral","src":"9790:9:181","type":"","value":"tAction"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9763:6:181"},"nodeType":"YulFunctionCall","src":"9763:37:181"},"nodeType":"YulExpressionStatement","src":"9763:37:181"},{"nodeType":"YulAssignment","src":"9809:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9821:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9832:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9817:3:181"},"nodeType":"YulFunctionCall","src":"9817:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9809:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9590:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9604:4:181","type":""}],"src":"9439:403:181"},{"body":{"nodeType":"YulBlock","src":"10021:250:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10038:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10049:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10031:6:181"},"nodeType":"YulFunctionCall","src":"10031:21:181"},"nodeType":"YulExpressionStatement","src":"10031:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10072:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10083:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10068:3:181"},"nodeType":"YulFunctionCall","src":"10068:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10088:2:181","type":"","value":"60"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10061:6:181"},"nodeType":"YulFunctionCall","src":"10061:30:181"},"nodeType":"YulExpressionStatement","src":"10061:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10111:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10122:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10107:3:181"},"nodeType":"YulFunctionCall","src":"10107:18:181"},{"hexValue":"4c69624469616d6f6e644375743a205f696e6974206973206164647265737328","kind":"string","nodeType":"YulLiteral","src":"10127:34:181","type":"","value":"LibDiamondCut: _init is address("}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10100:6:181"},"nodeType":"YulFunctionCall","src":"10100:62:181"},"nodeType":"YulExpressionStatement","src":"10100:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10182:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10193:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10178:3:181"},"nodeType":"YulFunctionCall","src":"10178:18:181"},{"hexValue":"3029206275745f63616c6c64617461206973206e6f7420656d707479","kind":"string","nodeType":"YulLiteral","src":"10198:30:181","type":"","value":"0) but_calldata is not empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10171:6:181"},"nodeType":"YulFunctionCall","src":"10171:58:181"},"nodeType":"YulExpressionStatement","src":"10171:58:181"},{"nodeType":"YulAssignment","src":"10238:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10250:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10261:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10246:3:181"},"nodeType":"YulFunctionCall","src":"10246:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10238:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9998:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10012:4:181","type":""}],"src":"9847:424:181"},{"body":{"nodeType":"YulBlock","src":"10450:251:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10467:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10478:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10460:6:181"},"nodeType":"YulFunctionCall","src":"10460:21:181"},"nodeType":"YulExpressionStatement","src":"10460:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10501:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10512:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10497:3:181"},"nodeType":"YulFunctionCall","src":"10497:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10517:2:181","type":"","value":"61"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10490:6:181"},"nodeType":"YulFunctionCall","src":"10490:30:181"},"nodeType":"YulExpressionStatement","src":"10490:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10540:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10551:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10536:3:181"},"nodeType":"YulFunctionCall","src":"10536:18:181"},{"hexValue":"4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d7074","kind":"string","nodeType":"YulLiteral","src":"10556:34:181","type":"","value":"LibDiamondCut: _calldata is empt"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10529:6:181"},"nodeType":"YulFunctionCall","src":"10529:62:181"},"nodeType":"YulExpressionStatement","src":"10529:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10611:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10622:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10607:3:181"},"nodeType":"YulFunctionCall","src":"10607:18:181"},{"hexValue":"7920627574205f696e6974206973206e6f742061646472657373283029","kind":"string","nodeType":"YulLiteral","src":"10627:31:181","type":"","value":"y but _init is not address(0)"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10600:6:181"},"nodeType":"YulFunctionCall","src":"10600:59:181"},"nodeType":"YulExpressionStatement","src":"10600:59:181"},{"nodeType":"YulAssignment","src":"10668:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10680:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10691:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10676:3:181"},"nodeType":"YulFunctionCall","src":"10676:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10668:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10427:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10441:4:181","type":""}],"src":"10276:425:181"},{"body":{"nodeType":"YulBlock","src":"10843:150:181","statements":[{"nodeType":"YulVariableDeclaration","src":"10853:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10873:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10867:5:181"},"nodeType":"YulFunctionCall","src":"10867:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"10857:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10928:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10936:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10924:3:181"},"nodeType":"YulFunctionCall","src":"10924:17:181"},{"name":"pos","nodeType":"YulIdentifier","src":"10943:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"10948:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"10889:34:181"},"nodeType":"YulFunctionCall","src":"10889:66:181"},"nodeType":"YulExpressionStatement","src":"10889:66:181"},{"nodeType":"YulAssignment","src":"10964:23:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10975:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"10980:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10971:3:181"},"nodeType":"YulFunctionCall","src":"10971:16:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"10964:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"10819:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10824:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10835:3:181","type":""}],"src":"10706:287:181"},{"body":{"nodeType":"YulBlock","src":"11119:98:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11136:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11147:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11129:6:181"},"nodeType":"YulFunctionCall","src":"11129:21:181"},"nodeType":"YulExpressionStatement","src":"11129:21:181"},{"nodeType":"YulAssignment","src":"11159:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11184:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11196:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11207:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11192:3:181"},"nodeType":"YulFunctionCall","src":"11192:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"11167:16:181"},"nodeType":"YulFunctionCall","src":"11167:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11159:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11088:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11099:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11110:4:181","type":""}],"src":"10998:219:181"},{"body":{"nodeType":"YulBlock","src":"11396:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11413:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11424:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11406:6:181"},"nodeType":"YulFunctionCall","src":"11406:21:181"},"nodeType":"YulExpressionStatement","src":"11406:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11447:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11458:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11443:3:181"},"nodeType":"YulFunctionCall","src":"11443:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11463:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11436:6:181"},"nodeType":"YulFunctionCall","src":"11436:30:181"},"nodeType":"YulExpressionStatement","src":"11436:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11486:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11497:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11482:3:181"},"nodeType":"YulFunctionCall","src":"11482:18:181"},{"hexValue":"4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e207265","kind":"string","nodeType":"YulLiteral","src":"11502:34:181","type":"","value":"LibDiamondCut: _init function re"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11475:6:181"},"nodeType":"YulFunctionCall","src":"11475:62:181"},"nodeType":"YulExpressionStatement","src":"11475:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11557:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11568:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11553:3:181"},"nodeType":"YulFunctionCall","src":"11553:18:181"},{"hexValue":"766572746564","kind":"string","nodeType":"YulLiteral","src":"11573:8:181","type":"","value":"verted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11546:6:181"},"nodeType":"YulFunctionCall","src":"11546:36:181"},"nodeType":"YulExpressionStatement","src":"11546:36:181"},{"nodeType":"YulAssignment","src":"11591:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11603:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11614:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11599:3:181"},"nodeType":"YulFunctionCall","src":"11599:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11591:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11373:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11387:4:181","type":""}],"src":"11222:402:181"},{"body":{"nodeType":"YulBlock","src":"11803:233:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11820:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11831:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11813:6:181"},"nodeType":"YulFunctionCall","src":"11813:21:181"},"nodeType":"YulExpressionStatement","src":"11813:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11854:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11865:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11850:3:181"},"nodeType":"YulFunctionCall","src":"11850:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11870:2:181","type":"","value":"43"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11843:6:181"},"nodeType":"YulFunctionCall","src":"11843:30:181"},"nodeType":"YulExpressionStatement","src":"11843:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11893:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11904:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11889:3:181"},"nodeType":"YulFunctionCall","src":"11889:18:181"},{"hexValue":"4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e2066","kind":"string","nodeType":"YulLiteral","src":"11909:34:181","type":"","value":"LibDiamondCut: No selectors in f"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11882:6:181"},"nodeType":"YulFunctionCall","src":"11882:62:181"},"nodeType":"YulExpressionStatement","src":"11882:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11964:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11975:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11960:3:181"},"nodeType":"YulFunctionCall","src":"11960:18:181"},{"hexValue":"6163657420746f20637574","kind":"string","nodeType":"YulLiteral","src":"11980:13:181","type":"","value":"acet to cut"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11953:6:181"},"nodeType":"YulFunctionCall","src":"11953:41:181"},"nodeType":"YulExpressionStatement","src":"11953:41:181"},{"nodeType":"YulAssignment","src":"12003:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12015:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12026:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12011:3:181"},"nodeType":"YulFunctionCall","src":"12011:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12003:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11780:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11794:4:181","type":""}],"src":"11629:407:181"},{"body":{"nodeType":"YulBlock","src":"12215:234:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12232:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12243:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12225:6:181"},"nodeType":"YulFunctionCall","src":"12225:21:181"},"nodeType":"YulExpressionStatement","src":"12225:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12266:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12277:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12262:3:181"},"nodeType":"YulFunctionCall","src":"12262:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12282:2:181","type":"","value":"44"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12255:6:181"},"nodeType":"YulFunctionCall","src":"12255:30:181"},"nodeType":"YulExpressionStatement","src":"12255:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12305:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12316:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12301:3:181"},"nodeType":"YulFunctionCall","src":"12301:18:181"},{"hexValue":"4c69624469616d6f6e644375743a204164642066616365742063616e27742062","kind":"string","nodeType":"YulLiteral","src":"12321:34:181","type":"","value":"LibDiamondCut: Add facet can't b"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12294:6:181"},"nodeType":"YulFunctionCall","src":"12294:62:181"},"nodeType":"YulExpressionStatement","src":"12294:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12376:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12387:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12372:3:181"},"nodeType":"YulFunctionCall","src":"12372:18:181"},{"hexValue":"652061646472657373283029","kind":"string","nodeType":"YulLiteral","src":"12392:14:181","type":"","value":"e address(0)"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12365:6:181"},"nodeType":"YulFunctionCall","src":"12365:42:181"},"nodeType":"YulExpressionStatement","src":"12365:42:181"},{"nodeType":"YulAssignment","src":"12416:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12428:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12439:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12424:3:181"},"nodeType":"YulFunctionCall","src":"12424:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12416:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12192:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12206:4:181","type":""}],"src":"12041:408:181"},{"body":{"nodeType":"YulBlock","src":"12628:243:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12645:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12656:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12638:6:181"},"nodeType":"YulFunctionCall","src":"12638:21:181"},"nodeType":"YulExpressionStatement","src":"12638:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12679:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12690:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12675:3:181"},"nodeType":"YulFunctionCall","src":"12675:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12695:2:181","type":"","value":"53"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12668:6:181"},"nodeType":"YulFunctionCall","src":"12668:30:181"},"nodeType":"YulExpressionStatement","src":"12668:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12718:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12729:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12714:3:181"},"nodeType":"YulFunctionCall","src":"12714:18:181"},{"hexValue":"4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f","kind":"string","nodeType":"YulLiteral","src":"12734:34:181","type":"","value":"LibDiamondCut: Can't add functio"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12707:6:181"},"nodeType":"YulFunctionCall","src":"12707:62:181"},"nodeType":"YulExpressionStatement","src":"12707:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12789:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12800:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12785:3:181"},"nodeType":"YulFunctionCall","src":"12785:18:181"},{"hexValue":"6e207468617420616c726561647920657869737473","kind":"string","nodeType":"YulLiteral","src":"12805:23:181","type":"","value":"n that already exists"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12778:6:181"},"nodeType":"YulFunctionCall","src":"12778:51:181"},"nodeType":"YulExpressionStatement","src":"12778:51:181"},{"nodeType":"YulAssignment","src":"12838:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12850:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12861:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12846:3:181"},"nodeType":"YulFunctionCall","src":"12846:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12838:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12605:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12619:4:181","type":""}],"src":"12454:417:181"},{"body":{"nodeType":"YulBlock","src":"12908:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12925:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12932:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"12937:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12928:3:181"},"nodeType":"YulFunctionCall","src":"12928:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12918:6:181"},"nodeType":"YulFunctionCall","src":"12918:31:181"},"nodeType":"YulExpressionStatement","src":"12918:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12965:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"12968:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12958:6:181"},"nodeType":"YulFunctionCall","src":"12958:15:181"},"nodeType":"YulExpressionStatement","src":"12958:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12989:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12992:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12982:6:181"},"nodeType":"YulFunctionCall","src":"12982:15:181"},"nodeType":"YulExpressionStatement","src":"12982:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"12876:127:181"},{"body":{"nodeType":"YulBlock","src":"13054:163:181","statements":[{"nodeType":"YulVariableDeclaration","src":"13064:28:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13082:2:181","type":"","value":"96"},{"kind":"number","nodeType":"YulLiteral","src":"13086:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13078:3:181"},"nodeType":"YulFunctionCall","src":"13078:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"13090:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13074:3:181"},"nodeType":"YulFunctionCall","src":"13074:18:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13068:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13101:29:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13120:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13127:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13116:3:181"},"nodeType":"YulFunctionCall","src":"13116:14:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"13105:7:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"13158:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13160:16:181"},"nodeType":"YulFunctionCall","src":"13160:18:181"},"nodeType":"YulExpressionStatement","src":"13160:18:181"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"13145:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13154:2:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"13142:2:181"},"nodeType":"YulFunctionCall","src":"13142:15:181"},"nodeType":"YulIf","src":"13139:41:181"},{"nodeType":"YulAssignment","src":"13189:22:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"13200:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"13209:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13196:3:181"},"nodeType":"YulFunctionCall","src":"13196:15:181"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"13189:3:181"}]}]},"name":"increment_t_uint96","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"13036:5:181","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"13046:3:181","type":""}],"src":"13008:209:181"},{"body":{"nodeType":"YulBlock","src":"13396:246:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13413:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13424:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13406:6:181"},"nodeType":"YulFunctionCall","src":"13406:21:181"},"nodeType":"YulExpressionStatement","src":"13406:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13447:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13458:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13443:3:181"},"nodeType":"YulFunctionCall","src":"13443:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13463:2:181","type":"","value":"56"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13436:6:181"},"nodeType":"YulFunctionCall","src":"13436:30:181"},"nodeType":"YulExpressionStatement","src":"13436:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13486:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13497:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13482:3:181"},"nodeType":"YulFunctionCall","src":"13482:18:181"},{"hexValue":"4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e","kind":"string","nodeType":"YulLiteral","src":"13502:34:181","type":"","value":"LibDiamondCut: Can't replace fun"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13475:6:181"},"nodeType":"YulFunctionCall","src":"13475:62:181"},"nodeType":"YulExpressionStatement","src":"13475:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13557:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13568:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13553:3:181"},"nodeType":"YulFunctionCall","src":"13553:18:181"},{"hexValue":"6374696f6e20776974682073616d652066756e6374696f6e","kind":"string","nodeType":"YulLiteral","src":"13573:26:181","type":"","value":"ction with same function"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13546:6:181"},"nodeType":"YulFunctionCall","src":"13546:54:181"},"nodeType":"YulExpressionStatement","src":"13546:54:181"},{"nodeType":"YulAssignment","src":"13609:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13621:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13632:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13617:3:181"},"nodeType":"YulFunctionCall","src":"13617:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13609:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13373:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13387:4:181","type":""}],"src":"13222:420:181"},{"body":{"nodeType":"YulBlock","src":"13821:244:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13838:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13849:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13831:6:181"},"nodeType":"YulFunctionCall","src":"13831:21:181"},"nodeType":"YulExpressionStatement","src":"13831:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13872:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13883:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13868:3:181"},"nodeType":"YulFunctionCall","src":"13868:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13888:2:181","type":"","value":"54"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13861:6:181"},"nodeType":"YulFunctionCall","src":"13861:30:181"},"nodeType":"YulExpressionStatement","src":"13861:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13911:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13922:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13907:3:181"},"nodeType":"YulFunctionCall","src":"13907:18:181"},{"hexValue":"4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472","kind":"string","nodeType":"YulLiteral","src":"13927:34:181","type":"","value":"LibDiamondCut: Remove facet addr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13900:6:181"},"nodeType":"YulFunctionCall","src":"13900:62:181"},"nodeType":"YulExpressionStatement","src":"13900:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13982:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13993:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13978:3:181"},"nodeType":"YulFunctionCall","src":"13978:18:181"},{"hexValue":"657373206d7573742062652061646472657373283029","kind":"string","nodeType":"YulLiteral","src":"13998:24:181","type":"","value":"ess must be address(0)"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13971:6:181"},"nodeType":"YulFunctionCall","src":"13971:52:181"},"nodeType":"YulExpressionStatement","src":"13971:52:181"},{"nodeType":"YulAssignment","src":"14032:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14044:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14055:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14040:3:181"},"nodeType":"YulFunctionCall","src":"14040:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14032:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13798:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13812:4:181","type":""}],"src":"13647:418:181"},{"body":{"nodeType":"YulBlock","src":"14244:232:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14261:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14272:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14254:6:181"},"nodeType":"YulFunctionCall","src":"14254:21:181"},"nodeType":"YulExpressionStatement","src":"14254:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14295:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14306:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14291:3:181"},"nodeType":"YulFunctionCall","src":"14291:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14311:2:181","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14284:6:181"},"nodeType":"YulFunctionCall","src":"14284:30:181"},"nodeType":"YulExpressionStatement","src":"14284:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14334:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14345:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14330:3:181"},"nodeType":"YulFunctionCall","src":"14330:18:181"},{"hexValue":"4c69624469616d6f6e644375743a2043616e6e6f742072656d6f766520637574","kind":"string","nodeType":"YulLiteral","src":"14350:34:181","type":"","value":"LibDiamondCut: Cannot remove cut"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14323:6:181"},"nodeType":"YulFunctionCall","src":"14323:62:181"},"nodeType":"YulExpressionStatement","src":"14323:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14405:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14416:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14401:3:181"},"nodeType":"YulFunctionCall","src":"14401:18:181"},{"hexValue":"2073656c6563746f7273","kind":"string","nodeType":"YulLiteral","src":"14421:12:181","type":"","value":" selectors"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14394:6:181"},"nodeType":"YulFunctionCall","src":"14394:40:181"},"nodeType":"YulExpressionStatement","src":"14394:40:181"},{"nodeType":"YulAssignment","src":"14443:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14455:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14466:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14451:3:181"},"nodeType":"YulFunctionCall","src":"14451:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14443:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_6dc3f1dab50ff21fc15088aa16d05815257e5abe70c54939829f018f001302c3__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14221:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14235:4:181","type":""}],"src":"14070:406:181"},{"body":{"nodeType":"YulBlock","src":"14655:245:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14672:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14683:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14665:6:181"},"nodeType":"YulFunctionCall","src":"14665:21:181"},"nodeType":"YulExpressionStatement","src":"14665:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14706:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14717:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14702:3:181"},"nodeType":"YulFunctionCall","src":"14702:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14722:2:181","type":"","value":"55"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14695:6:181"},"nodeType":"YulFunctionCall","src":"14695:30:181"},"nodeType":"YulExpressionStatement","src":"14695:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14745:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14756:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14741:3:181"},"nodeType":"YulFunctionCall","src":"14741:18:181"},{"hexValue":"4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e63","kind":"string","nodeType":"YulLiteral","src":"14761:34:181","type":"","value":"LibDiamondCut: Can't remove func"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14734:6:181"},"nodeType":"YulFunctionCall","src":"14734:62:181"},"nodeType":"YulExpressionStatement","src":"14734:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14816:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14827:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14812:3:181"},"nodeType":"YulFunctionCall","src":"14812:18:181"},{"hexValue":"74696f6e207468617420646f65736e2774206578697374","kind":"string","nodeType":"YulLiteral","src":"14832:25:181","type":"","value":"tion that doesn't exist"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14805:6:181"},"nodeType":"YulFunctionCall","src":"14805:53:181"},"nodeType":"YulExpressionStatement","src":"14805:53:181"},{"nodeType":"YulAssignment","src":"14867:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14879:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14890:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14875:3:181"},"nodeType":"YulFunctionCall","src":"14875:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14867:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14632:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14646:4:181","type":""}],"src":"14481:419:181"},{"body":{"nodeType":"YulBlock","src":"15079:236:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15096:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15107:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15089:6:181"},"nodeType":"YulFunctionCall","src":"15089:21:181"},"nodeType":"YulExpressionStatement","src":"15089:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15130:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15141:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15126:3:181"},"nodeType":"YulFunctionCall","src":"15126:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15146:2:181","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15119:6:181"},"nodeType":"YulFunctionCall","src":"15119:30:181"},"nodeType":"YulExpressionStatement","src":"15119:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15169:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15180:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15165:3:181"},"nodeType":"YulFunctionCall","src":"15165:18:181"},{"hexValue":"4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d75","kind":"string","nodeType":"YulLiteral","src":"15185:34:181","type":"","value":"LibDiamondCut: Can't remove immu"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15158:6:181"},"nodeType":"YulFunctionCall","src":"15158:62:181"},"nodeType":"YulExpressionStatement","src":"15158:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15240:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15251:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15236:3:181"},"nodeType":"YulFunctionCall","src":"15236:18:181"},{"hexValue":"7461626c652066756e6374696f6e","kind":"string","nodeType":"YulLiteral","src":"15256:16:181","type":"","value":"table function"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15229:6:181"},"nodeType":"YulFunctionCall","src":"15229:44:181"},"nodeType":"YulExpressionStatement","src":"15229:44:181"},{"nodeType":"YulAssignment","src":"15282:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15294:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15305:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15290:3:181"},"nodeType":"YulFunctionCall","src":"15290:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15282:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15056:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15070:4:181","type":""}],"src":"14905:410:181"},{"body":{"nodeType":"YulBlock","src":"15369:79:181","statements":[{"nodeType":"YulAssignment","src":"15379:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15391:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"15394:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15387:3:181"},"nodeType":"YulFunctionCall","src":"15387:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"15379:4:181"}]},{"body":{"nodeType":"YulBlock","src":"15420:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15422:16:181"},"nodeType":"YulFunctionCall","src":"15422:18:181"},"nodeType":"YulExpressionStatement","src":"15422:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"15411:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"15417:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15408:2:181"},"nodeType":"YulFunctionCall","src":"15408:11:181"},"nodeType":"YulIf","src":"15405:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15351:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"15354:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"15360:4:181","type":""}],"src":"15320:128:181"},{"body":{"nodeType":"YulBlock","src":"15485:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15502:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15509:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"15514:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"15505:3:181"},"nodeType":"YulFunctionCall","src":"15505:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15495:6:181"},"nodeType":"YulFunctionCall","src":"15495:31:181"},"nodeType":"YulExpressionStatement","src":"15495:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15542:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"15545:4:181","type":"","value":"0x31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15535:6:181"},"nodeType":"YulFunctionCall","src":"15535:15:181"},"nodeType":"YulExpressionStatement","src":"15535:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15566:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15569:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15559:6:181"},"nodeType":"YulFunctionCall","src":"15559:15:181"},"nodeType":"YulExpressionStatement","src":"15559:15:181"}]},"name":"panic_error_0x31","nodeType":"YulFunctionDefinition","src":"15453:127:181"}]},"contents":"{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_3534() -> memPtr\n    {\n        memPtr := mload(0x40)\n        let newFreePtr := add(memPtr, 0x40)\n        if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(0x40, newFreePtr)\n    }\n    function allocate_memory_3535() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 96)\n        if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_array_struct_FacetCut_dyn(length) -> size\n    {\n        if gt(length, sub(shl(64, 1), 1)) { panic_error_0x41() }\n        size := add(shl(5, length), 0x20)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_decode_array_struct_Initialization_dyn_fromMemory(offset, end) -> array\n    {\n        let _1 := 0x1f\n        if iszero(slt(add(offset, _1), end)) { revert(0, 0) }\n        let _2 := mload(offset)\n        let _3 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_struct_FacetCut_dyn(_2))\n        let dst_1 := dst\n        mstore(dst, _2)\n        dst := add(dst, _3)\n        let srcEnd := add(add(offset, shl(5, _2)), _3)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _3)\n        for { } lt(src, srcEnd) { src := add(src, _3) }\n        {\n            let innerOffset := mload(src)\n            let _4 := sub(shl(64, 1), 1)\n            if gt(innerOffset, _4)\n            {\n                let _5 := 0\n                revert(_5, _5)\n            }\n            let _6 := add(offset, innerOffset)\n            let _7 := 0x40\n            let _8 := not(31)\n            if slt(add(sub(end, _6), _8), _7)\n            {\n                let _9 := 0\n                revert(_9, _9)\n            }\n            let value := allocate_memory_3534()\n            mstore(value, abi_decode_address_fromMemory(add(_6, _3)))\n            let offset_1 := mload(add(_6, _7))\n            if gt(offset_1, _4)\n            {\n                let _10 := 0\n                revert(_10, _10)\n            }\n            let _11 := add(_6, offset_1)\n            if iszero(slt(add(_11, 63), end))\n            {\n                let _12 := 0\n                revert(_12, _12)\n            }\n            let _13 := mload(add(_11, _3))\n            if gt(_13, _4) { panic_error_0x41() }\n            let array_1 := allocate_memory(add(and(add(_13, _1), _8), _3))\n            mstore(array_1, _13)\n            if gt(add(add(_11, _13), _7), end)\n            {\n                let _14 := 0\n                revert(_14, _14)\n            }\n            copy_memory_to_memory_with_cleanup(add(_11, _7), add(array_1, _3), _13)\n            mstore(add(value, _3), array_1)\n            mstore(dst, value)\n            dst := add(dst, _3)\n        }\n        array := dst_1\n    }\n    function abi_decode_tuple_t_addresst_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptrt_array$_t_struct$_Initialization_$22413_memory_ptr_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        let offset := mload(add(headStart, 32))\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        let dst := allocate_memory(array_allocation_size_array_struct_FacetCut_dyn(_3))\n        let dst_1 := dst\n        mstore(dst, _3)\n        dst := add(dst, 32)\n        let srcEnd := add(add(_2, shl(5, _3)), 32)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_2, 32)\n        for { } lt(src, srcEnd) { src := add(src, 32) }\n        {\n            let innerOffset := mload(src)\n            if gt(innerOffset, _1) { revert(0, 0) }\n            let _4 := add(_2, innerOffset)\n            if slt(add(sub(dataEnd, _4), not(31)), 96) { revert(0, 0) }\n            let value := allocate_memory_3535()\n            mstore(value, abi_decode_address_fromMemory(add(_4, 32)))\n            let value_1 := mload(add(_4, 64))\n            if iszero(lt(value_1, 3)) { revert(0, 0) }\n            mstore(add(value, 32), value_1)\n            let offset_1 := mload(add(_4, 96))\n            if gt(offset_1, _1) { revert(0, 0) }\n            let _5 := add(_4, offset_1)\n            if iszero(slt(add(_5, 63), dataEnd)) { revert(0, 0) }\n            let _6 := mload(add(_5, 32))\n            let dst_2 := allocate_memory(array_allocation_size_array_struct_FacetCut_dyn(_6))\n            let dst_3 := dst_2\n            mstore(dst_2, _6)\n            dst_2 := add(dst_2, 32)\n            let srcEnd_1 := add(add(_5, shl(5, _6)), 64)\n            if gt(srcEnd_1, dataEnd) { revert(0, 0) }\n            let src_1 := add(_5, 64)\n            for { } lt(src_1, srcEnd_1) { src_1 := add(src_1, 32) }\n            {\n                let value_2 := mload(src_1)\n                if iszero(eq(value_2, and(value_2, shl(224, 0xffffffff)))) { revert(0, 0) }\n                mstore(dst_2, value_2)\n                dst_2 := add(dst_2, 32)\n            }\n            mstore(add(value, 64), dst_3)\n            mstore(dst, value)\n            dst := add(dst, 32)\n        }\n        value1 := dst_1\n        let offset_2 := mload(add(headStart, 64))\n        if gt(offset_2, _1) { revert(0, 0) }\n        value2 := abi_decode_array_struct_Initialization_dyn_fromMemory(add(headStart, offset_2), dataEnd)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, sub(shl(160, 1), 1)))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        let _1 := 96\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        let _2 := 128\n        pos := add(headStart, _2)\n        let tail_2 := add(add(headStart, shl(5, length)), _2)\n        let _3 := 0x20\n        let srcPtr := add(value0, _3)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, add(sub(tail_2, headStart), not(127)))\n            let _4 := mload(srcPtr)\n            let tail_3 := add(tail_2, _1)\n            mstore(tail_2, and(mload(_4), sub(shl(160, 1), 1)))\n            let memberValue0 := mload(add(_4, _3))\n            if iszero(lt(memberValue0, 3))\n            {\n                mstore(0, shl(224, 0x4e487b71))\n                mstore(4, 0x21)\n                revert(0, 0x24)\n            }\n            mstore(add(tail_2, _3), memberValue0)\n            let _5 := 0x40\n            let memberValue0_1 := mload(add(_4, _5))\n            mstore(add(tail_2, _5), _1)\n            let pos_1 := tail_3\n            let length_1 := mload(memberValue0_1)\n            mstore(tail_3, length_1)\n            pos_1 := add(tail_2, _2)\n            let srcPtr_1 := add(memberValue0_1, _3)\n            let i_1 := 0\n            for { } lt(i_1, length_1) { i_1 := add(i_1, 1) }\n            {\n                mstore(pos_1, and(mload(srcPtr_1), shl(224, 0xffffffff)))\n                pos_1 := add(pos_1, _3)\n                srcPtr_1 := add(srcPtr_1, _3)\n            }\n            tail_2 := pos_1\n            srcPtr := add(srcPtr, _3)\n            pos := add(pos, _3)\n        }\n        abi_encode_address(value1, add(headStart, _3))\n        mstore(add(headStart, 0x40), sub(tail_2, headStart))\n        tail := abi_encode_bytes(value2, tail_2)\n    }\n    function abi_encode_tuple_t_stringliteral_bf74910c6b16e2fe967a9c2fd1df7451e7594bd2184362aed0a451068a63c3f3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"LibDiamond: delay not elapsed\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"LibDiamondCut: Incorrect FacetCu\")\n        mstore(add(headStart, 96), \"tAction\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 60)\n        mstore(add(headStart, 64), \"LibDiamondCut: _init is address(\")\n        mstore(add(headStart, 96), \"0) but_calldata is not empty\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 61)\n        mstore(add(headStart, 64), \"LibDiamondCut: _calldata is empt\")\n        mstore(add(headStart, 96), \"y but _init is not address(0)\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"LibDiamondCut: _init function re\")\n        mstore(add(headStart, 96), \"verted\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 43)\n        mstore(add(headStart, 64), \"LibDiamondCut: No selectors in f\")\n        mstore(add(headStart, 96), \"acet to cut\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 44)\n        mstore(add(headStart, 64), \"LibDiamondCut: Add facet can't b\")\n        mstore(add(headStart, 96), \"e address(0)\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 53)\n        mstore(add(headStart, 64), \"LibDiamondCut: Can't add functio\")\n        mstore(add(headStart, 96), \"n that already exists\")\n        tail := add(headStart, 128)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function increment_t_uint96(value) -> ret\n    {\n        let _1 := sub(shl(96, 1), 1)\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 56)\n        mstore(add(headStart, 64), \"LibDiamondCut: Can't replace fun\")\n        mstore(add(headStart, 96), \"ction with same function\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"LibDiamondCut: Remove facet addr\")\n        mstore(add(headStart, 96), \"ess must be address(0)\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_6dc3f1dab50ff21fc15088aa16d05815257e5abe70c54939829f018f001302c3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"LibDiamondCut: Cannot remove cut\")\n        mstore(add(headStart, 96), \" selectors\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 55)\n        mstore(add(headStart, 64), \"LibDiamondCut: Can't remove func\")\n        mstore(add(headStart, 96), \"tion that doesn't exist\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"LibDiamondCut: Can't remove immu\")\n        mstore(add(headStart, 96), \"table function\")\n        tail := add(headStart, 128)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405260405162002c6638038062002c66833981016040819052620000269162001497565b6001600160a01b038316156200004c576200004c83620000ed60201b620000b61760201c565b62000074826000604051806020016040528060008152506200017b60201b620001431760201c565b805160005b81811015620000e257620000d98382815181106200009b576200009b6200166b565b602002602001015160000151848381518110620000bc57620000bc6200166b565b602002602001015160200151620004a160201b6200041a1760201c565b60010162000079565b50505050506200187f565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205460405160008051602062002bba833981519152916001600160a01b03848116929116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360040180546001600160a01b0319166001600160a01b0392909216919091179055565b60405160008051602062002bba83398151915290600090620001a690869086908690602001620016c5565b60408051601f198184030181529190528051602090910120600283015490915015620002525760008181526005830160205260409020548015801590620001ed5750428111155b6200023f5760405162461bcd60e51b815260206004820152601d60248201527f4c69624469616d6f6e643a2064656c6179206e6f7420656c617073656400000060448201526064015b60405180910390fd5b5060008181526005830160205260408120555b845160005b818110156200044f5760008782815181106200027757620002776200166b565b6020026020010151602001519050600060028111156200029b576200029b62001681565b816002811115620002b057620002b062001681565b036200030e5762000308888381518110620002cf57620002cf6200166b565b602002602001015160000151898481518110620002f057620002f06200166b565b602002602001015160400151620006c660201b60201c565b62000445565b600181600281111562000325576200032562001681565b036200037d57620003088883815181106200034457620003446200166b565b6020026020010151600001518984815181106200036557620003656200166b565b6020026020010151604001516200094360201b60201c565b600281600281111562000394576200039462001681565b03620003ec5762000308888381518110620003b357620003b36200166b565b602002602001015160000151898481518110620003d457620003d46200166b565b60200260200101516040015162000bd260201b60201c565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b606482015260840162000236565b5060010162000257565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738686866040516200048593929190620016c5565b60405180910390a1620004998585620004a1565b505050505050565b6001600160a01b0382166200052b57805115620005275760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606482015260840162000236565b5050565b8051600003620005a45760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606482015260840162000236565b6001600160a01b0382163014620005da57620005da8260405180606001604052806028815260200162002bda6028913962000dcd565b600080836001600160a01b031683604051620005f79190620017cc565b600060405180830381855af49150503d806000811462000634576040519150601f19603f3d011682016040523d82523d6000602084013e62000639565b606091505b509150915081620006c05780511562000668578060405162461bcd60e51b8152600401620002369190620017ea565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656044820152651d995c9d195960d21b606482015260840162000236565b50505050565b80516000036200071c5760405162461bcd60e51b815260206004820152602b602482015260008051602062002c4683398151915260448201526a1858d95d081d1bc818dd5d60aa1b606482015260840162000236565b60008051602062002bba8339815191526001600160a01b038316620007885760405162461bcd60e51b815260206004820152602c602482015260008051602062002c0283398151915260448201526b65206164647265737328302960a01b606482015260840162000236565b6001600160a01b0383166000908152600182016020526040812054906001600160601b0382169003620007c157620007c1828562000dfe565b825160005b8181101562000499576000858281518110620007e657620007e66200166b565b6020908102919091018101516001600160e01b031981166000908152918790526040909120549091506001600160a01b031680156200088e5760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c7265616479206578697374730000000000000000000000606482015260840162000236565b6001600160e01b0319821660008181526020888152604080832080546001600160a01b03908116600160a01b6001600160601b038d16021782558d168085526001808d0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925288905281546001600160a01b0319161790558462000932816200181c565b9550508260010192505050620007c6565b805160008190036200099b5760405162461bcd60e51b815260206004820152602b602482015260008051602062002c4683398151915260448201526a1858d95d081d1bc818dd5d60aa1b606482015260840162000236565b60008051602062002bba8339815191526001600160a01b03841662000a075760405162461bcd60e51b815260206004820152602c602482015260008051602062002c0283398151915260448201526b65206164647265737328302960a01b606482015260840162000236565b6001600160a01b0384166000908152600182016020526040812054906001600160601b038216900362000a405762000a40828662000dfe565b60005b838110156200049957600085828151811062000a635762000a636200166b565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03908116908816810362000b105760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606482015260840162000236565b62000b1d85828462000e6b565b6001600160e01b0319821660008181526020878152604080832080546001600160a01b03908116600160a01b6001600160601b038c16021782558d168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b0319161790558362000bc1816200181c565b945050826001019250505062000a43565b805160000362000c285760405162461bcd60e51b815260206004820152602b602482015260008051602062002c4683398151915260448201526a1858d95d081d1bc818dd5d60aa1b606482015260840162000236565b60008051602062002bba833981519152635df91ac760e11b6307e4c70760e21b6001600160a01b0385161562000cc75760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d757374206265206164647265737328302900000000000000000000606482015260840162000236565b835160005b8181101562000dc457600086828151811062000cec5762000cec6200166b565b60200260200101519050846001600160e01b031916816001600160e01b0319161415801562000d2857506001600160e01b031981811690851614155b62000d895760405162461bcd60e51b815260206004820152602a60248201527f4c69624469616d6f6e644375743a2043616e6e6f742072656d6f7665206375746044820152692073656c6563746f727360b01b606482015260840162000236565b6001600160e01b031981166000908152602087905260409020546001600160a01b031662000db987828462000e6b565b505060010162000ccc565b50505050505050565b806001600160a01b0383163b62000df95760405162461bcd60e51b8152600401620002369190620017ea565b505050565b62000e238160405180606001604052806024815260200162002c226024913962000dcd565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160a01b03821662000ee95760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606482015260840162000236565b306001600160a01b0383160362000f5a5760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b606482015260840162000236565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b0316929162000fab916200184d565b9050808214620010a4576001600160a01b0384166000908152600186016020526040812080548390811062000fe45762000fe46200166b565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b9250829190859081106200103857620010386200166b565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b03841660009081526001860160205260409020805480620010d057620010d062001869565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b031985168252869052604081208190558190036200124557600285015460009062001136906001906200184d565b6001600160a01b0386166000908152600180890160205260409091200154909150808214620011ec5760008760020183815481106200117957620011796200166b565b6000918252602090912001546002890180546001600160a01b039092169250829184908110620011ad57620011ad6200166b565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b8660020180548062001202576200120262001869565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505b5050505050565b80516001600160a01b03811681146200126457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620012a457620012a462001269565b60405290565b604051606081016001600160401b0381118282101715620012a457620012a462001269565b604051601f8201601f191681016001600160401b0381118282101715620012fa57620012fa62001269565b604052919050565b60006001600160401b038211156200131e576200131e62001269565b5060051b60200190565b60005b83811015620013455781810151838201526020016200132b565b50506000910152565b6000601f83818401126200136157600080fd5b825160206200137a620013748362001302565b620012cf565b82815260059290921b850181019181810190878411156200139a57600080fd5b8287015b848110156200148b5780516001600160401b0380821115620013c05760008081fd5b908901906040601f19838d038101821315620013dc5760008081fd5b620013e66200127f565b620013f38986016200124c565b81528285015184811115620014085760008081fd5b8086019550508d603f8601126200141f5760008081fd5b888501518481111562001436576200143662001269565b620014478a848e84011601620012cf565b94508085528e848288010111156200146157600092508283fd5b62001472818b870186890162001328565b508089019390935250508452509183019183016200139e565b50979650505050505050565b600080600060608486031215620014ad57600080fd5b620014b8846200124c565b60208501519093506001600160401b0380821115620014d657600080fd5b818601915086601f830112620014eb57600080fd5b8151620014fc620013748262001302565b8082825260208201915060208360051b8601019250898311156200151f57600080fd5b602085015b8381101562001637578051858111156200153d57600080fd5b86016060818d03601f190112156200155457600080fd5b6200155e620012aa565b6200156c602083016200124c565b81526040820151600381106200158157600080fd5b60208201526060820151878111156200159957600080fd5b8083019250508c603f830112620015af57600080fd5b6020820151620015c3620013748262001302565b81815260059190911b83016040019060208101908f831115620015e557600080fd5b6040850194505b82851015620016205784516001600160e01b0319811681146200160e57600080fd5b825260209485019490910190620015ec565b604084015250508452506020928301920162001524565b50604089015190965093505050808211156200165257600080fd5b5062001661868287016200134e565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b60008151808452620016b181602086016020860162001328565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b848110156200179a57898403607f19018652815180516001600160a01b031685528381015189860190600381106200173657634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b80831015620017845783516001600160e01b031916825292860192600192909201919086019062001758565b50978501979550505090820190600101620016ee565b50506001600160a01b038a16908801528681036040880152620017be818962001697565b9a9950505050505050505050565b60008251620017e081846020870162001328565b9190910192915050565b602081526000620017ff602083018462001697565b9392505050565b634e487b7160e01b600052601160045260246000fd5b60006001600160601b038281166002600160601b0319810162001843576200184362001806565b6001019392505050565b8181038181111562001863576200186362001806565b92915050565b634e487b7160e01b600052603160045260246000fd5b61132b806200188f6000396000f3fe60806040523661000b57005b600080356001600160e01b031916815260008051602061128a833981519152602081905260409091205481906001600160a01b0316806100925760405162461bcd60e51b815260206004820181905260248201527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f7420657869737460448201526064015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156100b1573d6000f35b3d6000fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205460405160008051602061128a833981519152916001600160a01b03848116929116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360040180546001600160a01b0319166001600160a01b0392909216919091179055565b60405160008051602061128a8339815191529060009061016b9086908690869060200161103b565b60408051601f19818403018152919052805160209091012060028301549091501561020f57600081815260058301602052604090205480158015906101b05750428111155b6101fc5760405162461bcd60e51b815260206004820152601d60248201527f4c69624469616d6f6e643a2064656c6179206e6f7420656c61707365640000006044820152606401610089565b5060008181526005830160205260408120555b845160005b818110156103cc5760008782815181106102305761023061113b565b60200260200101516020015190506000600281111561025157610251610fd5565b81600281111561026357610263610fd5565b036102b1576102ac88838151811061027d5761027d61113b565b60200260200101516000015189848151811061029b5761029b61113b565b60200260200101516040015161062d565b6103c3565b60018160028111156102c5576102c5610fd5565b0361030e576102ac8883815181106102df576102df61113b565b6020026020010151600001518984815181106102fd576102fd61113b565b60200260200101516040015161079e565b600281600281111561032257610322610fd5565b0361036b576102ac88838151811061033c5761033c61113b565b60200260200101516000015189848151811061035a5761035a61113b565b602002602001015160400151610927565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b6064820152608401610089565b50600101610214565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738686866040516104009392919061103b565b60405180910390a1610412858561041a565b505050505050565b6001600160a01b0382166104a15780511561049d5760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d707479000000006064820152608401610089565b5050565b80516000036105185760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f7420616464726573732830290000006064820152608401610089565b6001600160a01b038216301461054a5761054a826040518060600160405280602881526020016112aa60289139610ad9565b600080836001600160a01b0316836040516105659190611151565b600060405180830381855af49150503d80600081146105a0576040519150601f19603f3d011682016040523d82523d6000602084013e6105a5565b606091505b509150915081610627578051156105d0578060405162461bcd60e51b8152600401610089919061116d565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656044820152651d995c9d195960d21b6064820152608401610089565b50505050565b805160000361064e5760405162461bcd60e51b815260040161008990611187565b60008051602061128a8339815191526001600160a01b0383166106835760405162461bcd60e51b8152600401610089906111d2565b6001600160a01b0383166000908152600182016020526040812054906001600160601b03821690036106b9576106b98285610b07565b825160005b818110156104125760008582815181106106da576106da61113b565b6020908102919091018101516001600160e01b031981166000908152918790526040909120549091506001600160a01b031680156107785760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6044820152746e207468617420616c72656164792065786973747360581b6064820152608401610089565b6107848683878b610b71565b8461078e81611234565b95505082600101925050506106be565b805160008190036107c15760405162461bcd60e51b815260040161008990611187565b60008051602061128a8339815191526001600160a01b0384166107f65760405162461bcd60e51b8152600401610089906111d2565b6001600160a01b0384166000908152600182016020526040812054906001600160601b038216900361082c5761082c8286610b07565b60005b8381101561041257600085828151811061084b5761084b61113b565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0390811690881681036108f65760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e00000000000000006064820152608401610089565b610901858284610c11565b61090d8583868b610b71565b8361091781611234565b945050826001019250505061082f565b80516000036109485760405162461bcd60e51b815260040161008990611187565b60008051602061128a833981519152635df91ac760e11b6307e4c70760e21b6001600160a01b038516156109dd5760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472604482015275657373206d757374206265206164647265737328302960501b6064820152608401610089565b835160005b81811015610ad05760008682815181106109fe576109fe61113b565b60200260200101519050846001600160e01b031916816001600160e01b03191614158015610a3957506001600160e01b031981811690851614155b610a985760405162461bcd60e51b815260206004820152602a60248201527f4c69624469616d6f6e644375743a2043616e6e6f742072656d6f7665206375746044820152692073656c6563746f727360b01b6064820152608401610089565b6001600160e01b031981166000908152602087905260409020546001600160a01b0316610ac6878284610c11565b50506001016109e2565b50505050505050565b806001600160a01b0383163b610b025760405162461bcd60e51b8152600401610089919061116d565b505050565b610b29816040518060600160405280602481526020016112d260249139610ad9565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160e01b0319831660008181526020868152604080832080546001600160601b03909716600160a01b026001600160a01b0397881617815594909516808352600180890183529583208054968701815583528183206008870401805460e09890981c60046007909816979097026101000a96870263ffffffff9097021990971695909517909555529290915281546001600160a01b031916179055565b6001600160a01b038216610c8d5760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e27742065786973740000000000000000006064820152608401610089565b306001600160a01b03831603610cfc5760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b6064820152608401610089565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b03169291610d4b9161125a565b9050808214610e3d576001600160a01b03841660009081526001860160205260408120805483908110610d8057610d8061113b565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b925082919085908110610dd157610dd161113b565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b03841660009081526001860160205260409020805480610e6657610e66611273565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b03198516825286905260408120819055819003610fce576002850154600090610ec99060019061125a565b6001600160a01b0386166000908152600180890160205260409091200154909150808214610f78576000876002018381548110610f0857610f0861113b565b6000918252602090912001546002890180546001600160a01b039092169250829184908110610f3957610f3961113b565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b86600201805480610f8b57610f8b611273565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505b5050505050565b634e487b7160e01b600052602160045260246000fd5b60005b83811015611006578181015183820152602001610fee565b50506000910152565b60008151808452611027816020860160208601610feb565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b8481101561110b57898403607f19018652815180516001600160a01b031685528381015189860190600381106110aa57634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b808310156110f65783516001600160e01b03191682529286019260019290920191908601906110cc565b50978501979550505090820190600101611064565b50506001600160a01b038a1690880152868103604088015261112d818961100f565b9a9950505050505050505050565b634e487b7160e01b600052603260045260246000fd5b60008251611163818460208701610feb565b9190910192915050565b602081526000611180602083018461100f565b9392505050565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160601b038083168181036112505761125061121e565b6001019392505050565b8181038181111561126d5761126d61121e565b92915050565b634e487b7160e01b600052603160045260246000fdfec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a26469706673582212203b1f4ed65a6bab0f6c2f33b7eaa1e2b892847a6c215922d52116d1d72f8895c164736f6c63430008110033c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204164642066616365742063616e277420624c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f64654c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e2066","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH3 0x2C66 CODESIZE SUB DUP1 PUSH3 0x2C66 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x26 SWAP2 PUSH3 0x1497 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO PUSH3 0x4C JUMPI PUSH3 0x4C DUP4 PUSH3 0xED PUSH1 0x20 SHL PUSH3 0xB6 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x74 DUP3 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH3 0x17B PUSH1 0x20 SHL PUSH3 0x143 OR PUSH1 0x20 SHR JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0xE2 JUMPI PUSH3 0xD9 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x9B JUMPI PUSH3 0x9B PUSH3 0x166B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0xBC JUMPI PUSH3 0xBC PUSH3 0x166B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH3 0x4A1 PUSH1 0x20 SHL PUSH3 0x41A OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x1 ADD PUSH3 0x79 JUMP JUMPDEST POP POP POP POP POP PUSH3 0x187F JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x2BBA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP3 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0x4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x2BBA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x1A6 SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x20 ADD PUSH3 0x16C5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 PUSH1 0x2 DUP4 ADD SLOAD SWAP1 SWAP2 POP ISZERO PUSH3 0x252 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH3 0x1ED JUMPI POP TIMESTAMP DUP2 GT ISZERO JUMPDEST PUSH3 0x23F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A2064656C6179206E6F7420656C6170736564000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMPDEST DUP5 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x44F JUMPI PUSH1 0x0 DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x277 JUMPI PUSH3 0x277 PUSH3 0x166B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH3 0x29B JUMPI PUSH3 0x29B PUSH3 0x1681 JUMP JUMPDEST DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH3 0x2B0 JUMPI PUSH3 0x2B0 PUSH3 0x1681 JUMP JUMPDEST SUB PUSH3 0x30E JUMPI PUSH3 0x308 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x2CF JUMPI PUSH3 0x2CF PUSH3 0x166B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH3 0x2F0 JUMPI PUSH3 0x2F0 PUSH3 0x166B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH3 0x6C6 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x445 JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH3 0x325 JUMPI PUSH3 0x325 PUSH3 0x1681 JUMP JUMPDEST SUB PUSH3 0x37D JUMPI PUSH3 0x308 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x344 JUMPI PUSH3 0x344 PUSH3 0x166B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH3 0x365 JUMPI PUSH3 0x365 PUSH3 0x166B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH3 0x943 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH3 0x394 JUMPI PUSH3 0x394 PUSH3 0x1681 JUMP JUMPDEST SUB PUSH3 0x3EC JUMPI PUSH3 0x308 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x3B3 JUMPI PUSH3 0x3B3 PUSH3 0x166B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH3 0x3D4 JUMPI PUSH3 0x3D4 PUSH3 0x166B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH3 0xBD2 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A20496E636F72726563742046616365744375 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x3A20B1BA34B7B7 PUSH1 0xC9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x236 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH3 0x257 JUMP JUMPDEST POP PUSH32 0x8FAA70878671CCD212D20771B795C50AF8FD3FF6CF27F4BDE57E5D4DE0AEB673 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH3 0x485 SWAP4 SWAP3 SWAP2 SWAP1 PUSH3 0x16C5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH3 0x499 DUP6 DUP6 PUSH3 0x4A1 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0x52B JUMPI DUP1 MLOAD ISZERO PUSH3 0x527 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E6974206973206164647265737328 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3029206275745F63616C6C64617461206973206E6F7420656D70747900000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x236 JUMP JUMPDEST POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SUB PUSH3 0x5A4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F63616C6C6461746120697320656D7074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7920627574205F696E6974206973206E6F742061646472657373283029000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x236 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADDRESS EQ PUSH3 0x5DA JUMPI PUSH3 0x5DA DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x2BDA PUSH1 0x28 SWAP2 CODECOPY PUSH3 0xDCD JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 MLOAD PUSH3 0x5F7 SWAP2 SWAP1 PUSH3 0x17CC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH3 0x634 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH3 0x639 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH3 0x6C0 JUMPI DUP1 MLOAD ISZERO PUSH3 0x668 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x236 SWAP2 SWAP1 PUSH3 0x17EA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E69742066756E6374696F6E207265 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1D995C9D1959 PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x236 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SUB PUSH3 0x71C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x2C46 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x1858D95D081D1BC818DD5D PUSH1 0xAA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x236 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x2BBA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH3 0x788 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x2C02 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH12 0x652061646472657373283029 PUSH1 0xA0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x236 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND SWAP1 SUB PUSH3 0x7C1 JUMPI PUSH3 0x7C1 DUP3 DUP6 PUSH3 0xDFE JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x499 JUMPI PUSH1 0x0 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x7E6 JUMPI PUSH3 0x7E6 PUSH3 0x166B JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP8 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH3 0x88E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774206164642066756E6374696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E207468617420616C7265616479206578697374730000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x236 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP9 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP14 AND MUL OR DUP3 SSTORE DUP14 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP14 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP9 SWAP1 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND OR SWAP1 SSTORE DUP5 PUSH3 0x932 DUP2 PUSH3 0x181C JUMP JUMPDEST SWAP6 POP POP DUP3 PUSH1 0x1 ADD SWAP3 POP POP POP PUSH3 0x7C6 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 DUP2 SWAP1 SUB PUSH3 0x99B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x2C46 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x1858D95D081D1BC818DD5D PUSH1 0xAA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x236 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x2BBA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH3 0xA07 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x2C02 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH12 0x652061646472657373283029 PUSH1 0xA0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x236 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND SWAP1 SUB PUSH3 0xA40 JUMPI PUSH3 0xA40 DUP3 DUP7 PUSH3 0xDFE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x499 JUMPI PUSH1 0x0 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xA63 JUMPI PUSH3 0xA63 PUSH3 0x166B JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP9 AND DUP2 SUB PUSH3 0xB10 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x38 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774207265706C6163652066756E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6374696F6E20776974682073616D652066756E6374696F6E0000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x236 JUMP JUMPDEST PUSH3 0xB1D DUP6 DUP3 DUP5 PUSH3 0xE6B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP13 AND MUL OR DUP3 SSTORE DUP14 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND OR SWAP1 SSTORE DUP4 PUSH3 0xBC1 DUP2 PUSH3 0x181C JUMP JUMPDEST SWAP5 POP POP DUP3 PUSH1 0x1 ADD SWAP3 POP POP POP PUSH3 0xA43 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SUB PUSH3 0xC28 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x2C46 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x1858D95D081D1BC818DD5D PUSH1 0xAA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x236 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x2BBA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH4 0x5DF91AC7 PUSH1 0xE1 SHL PUSH4 0x7E4C707 PUSH1 0xE2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND ISZERO PUSH3 0xCC7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2052656D6F76652066616365742061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x657373206D757374206265206164647265737328302900000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x236 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0xDC4 JUMPI PUSH1 0x0 DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xCEC JUMPI PUSH3 0xCEC PUSH3 0x166B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND EQ ISZERO DUP1 ISZERO PUSH3 0xD28 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 DUP2 AND SWAP1 DUP6 AND EQ ISZERO JUMPDEST PUSH3 0xD89 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E6E6F742072656D6F766520637574 PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x2073656C6563746F7273 PUSH1 0xB0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x236 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH3 0xDB9 DUP8 DUP3 DUP5 PUSH3 0xE6B JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH3 0xCCC JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE PUSH3 0xDF9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x236 SWAP2 SWAP1 PUSH3 0x17EA JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH3 0xE23 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x2C22 PUSH1 0x24 SWAP2 CODECOPY PUSH3 0xDCD JUMP JUMPDEST PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP5 DUP6 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP7 ADD DUP6 SWAP1 SSTORE SWAP5 DUP5 ADD DUP4 SSTORE SWAP2 DUP3 MSTORE SWAP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xEE9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F76652066756E63 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74696F6E207468617420646F65736E2774206578697374000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x236 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SUB PUSH3 0xF5A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F766520696D6D75 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x3A30B1363290333AB731BA34B7B7 PUSH1 0x91 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x236 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 ADD SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP3 SWAP2 PUSH3 0xFAB SWAP2 PUSH3 0x184D JUMP JUMPDEST SWAP1 POP DUP1 DUP3 EQ PUSH3 0x10A4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH3 0xFE4 JUMPI PUSH3 0xFE4 PUSH3 0x166B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP5 MSTORE PUSH1 0x1 DUP11 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0x7 SWAP1 SWAP3 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP1 SWAP3 DIV PUSH1 0xE0 SHL SWAP3 POP DUP3 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH3 0x1038 JUMPI PUSH3 0x1038 PUSH3 0x166B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP5 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP4 DUP5 MUL NOT AND PUSH1 0xE0 SWAP6 SWAP1 SWAP6 SHR SWAP3 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP6 AND MUL OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP1 PUSH3 0x10D0 JUMPI PUSH3 0x10D0 PUSH3 0x1869 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x8 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x4 PUSH1 0x7 DUP8 AND MUL PUSH2 0x100 EXP MUL NOT AND SWAP1 SSTORE SWAP2 SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP6 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 SSTORE DUP2 SWAP1 SUB PUSH3 0x1245 JUMPI PUSH1 0x2 DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH3 0x1136 SWAP1 PUSH1 0x1 SWAP1 PUSH3 0x184D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP1 DUP10 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 SWAP2 POP DUP1 DUP3 EQ PUSH3 0x11EC JUMPI PUSH1 0x0 DUP8 PUSH1 0x2 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH3 0x1179 JUMPI PUSH3 0x1179 PUSH3 0x166B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP10 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH3 0x11AD JUMPI PUSH3 0x11AD PUSH3 0x166B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 ADD DUP2 SWAP1 SSTORE JUMPDEST DUP7 PUSH1 0x2 ADD DUP1 SLOAD DUP1 PUSH3 0x1202 JUMPI PUSH3 0x1202 PUSH3 0x1869 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH1 0x0 NOT SWAP1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP3 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SSTORE POP POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1264 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x12A4 JUMPI PUSH3 0x12A4 PUSH3 0x1269 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x12A4 JUMPI PUSH3 0x12A4 PUSH3 0x1269 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x12FA JUMPI PUSH3 0x12FA PUSH3 0x1269 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH3 0x131E JUMPI PUSH3 0x131E PUSH3 0x1269 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x1345 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x132B JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP4 DUP2 DUP5 ADD SLT PUSH3 0x1361 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x20 PUSH3 0x137A PUSH3 0x1374 DUP4 PUSH3 0x1302 JUMP JUMPDEST PUSH3 0x12CF JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP6 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP8 DUP5 GT ISZERO PUSH3 0x139A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP8 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x148B JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x13C0 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP1 DUP10 ADD SWAP1 PUSH1 0x40 PUSH1 0x1F NOT DUP4 DUP14 SUB DUP2 ADD DUP3 SGT ISZERO PUSH3 0x13DC JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH3 0x13E6 PUSH3 0x127F JUMP JUMPDEST PUSH3 0x13F3 DUP10 DUP7 ADD PUSH3 0x124C JUMP JUMPDEST DUP2 MSTORE DUP3 DUP6 ADD MLOAD DUP5 DUP2 GT ISZERO PUSH3 0x1408 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP1 DUP7 ADD SWAP6 POP POP DUP14 PUSH1 0x3F DUP7 ADD SLT PUSH3 0x141F JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP9 DUP6 ADD MLOAD DUP5 DUP2 GT ISZERO PUSH3 0x1436 JUMPI PUSH3 0x1436 PUSH3 0x1269 JUMP JUMPDEST PUSH3 0x1447 DUP11 DUP5 DUP15 DUP5 ADD AND ADD PUSH3 0x12CF JUMP JUMPDEST SWAP5 POP DUP1 DUP6 MSTORE DUP15 DUP5 DUP3 DUP9 ADD ADD GT ISZERO PUSH3 0x1461 JUMPI PUSH1 0x0 SWAP3 POP DUP3 DUP4 REVERT JUMPDEST PUSH3 0x1472 DUP2 DUP12 DUP8 ADD DUP7 DUP10 ADD PUSH3 0x1328 JUMP JUMPDEST POP DUP1 DUP10 ADD SWAP4 SWAP1 SWAP4 MSTORE POP POP DUP5 MSTORE POP SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH3 0x139E JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x14AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x14B8 DUP5 PUSH3 0x124C JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x14D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x14EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x14FC PUSH3 0x1374 DUP3 PUSH3 0x1302 JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP DUP10 DUP4 GT ISZERO PUSH3 0x151F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP6 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x1637 JUMPI DUP1 MLOAD DUP6 DUP2 GT ISZERO PUSH3 0x153D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 ADD PUSH1 0x60 DUP2 DUP14 SUB PUSH1 0x1F NOT ADD SLT ISZERO PUSH3 0x1554 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x155E PUSH3 0x12AA JUMP JUMPDEST PUSH3 0x156C PUSH1 0x20 DUP4 ADD PUSH3 0x124C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x3 DUP2 LT PUSH3 0x1581 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD DUP8 DUP2 GT ISZERO PUSH3 0x1599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP4 ADD SWAP3 POP POP DUP13 PUSH1 0x3F DUP4 ADD SLT PUSH3 0x15AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH3 0x15C3 PUSH3 0x1374 DUP3 PUSH3 0x1302 JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x5 SWAP2 SWAP1 SWAP2 SHL DUP4 ADD PUSH1 0x40 ADD SWAP1 PUSH1 0x20 DUP2 ADD SWAP1 DUP16 DUP4 GT ISZERO PUSH3 0x15E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP6 ADD SWAP5 POP JUMPDEST DUP3 DUP6 LT ISZERO PUSH3 0x1620 JUMPI DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH3 0x160E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x15EC JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE POP POP DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH3 0x1524 JUMP JUMPDEST POP PUSH1 0x40 DUP10 ADD MLOAD SWAP1 SWAP7 POP SWAP4 POP POP POP DUP1 DUP3 GT ISZERO PUSH3 0x1652 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x1661 DUP7 DUP3 DUP8 ADD PUSH3 0x134E JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH3 0x16B1 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH3 0x1328 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP8 MLOAD DUP1 DUP4 MSTORE PUSH1 0x80 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD PUSH1 0x20 DUP1 DUP12 ADD PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x179A JUMPI DUP10 DUP5 SUB PUSH1 0x7F NOT ADD DUP7 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE DUP4 DUP2 ADD MLOAD DUP10 DUP7 ADD SWAP1 PUSH1 0x3 DUP2 LT PUSH3 0x1736 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP7 DUP7 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD SWAP2 DUP7 ADD DUP11 SWAP1 MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 DUP5 ADD SWAP1 PUSH1 0x0 SWAP1 DUP10 DUP8 ADD SWAP1 JUMPDEST DUP1 DUP4 LT ISZERO PUSH3 0x1784 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP3 MSTORE SWAP3 DUP7 ADD SWAP3 PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH3 0x1758 JUMP JUMPDEST POP SWAP8 DUP6 ADD SWAP8 SWAP6 POP POP POP SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH3 0x16EE JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP1 DUP9 ADD MSTORE DUP7 DUP2 SUB PUSH1 0x40 DUP9 ADD MSTORE PUSH3 0x17BE DUP2 DUP10 PUSH3 0x1697 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x17E0 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x1328 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH3 0x17FF PUSH1 0x20 DUP4 ADD DUP5 PUSH3 0x1697 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 DUP2 AND PUSH1 0x2 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT DUP2 ADD PUSH3 0x1843 JUMPI PUSH3 0x1843 PUSH3 0x1806 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH3 0x1863 JUMPI PUSH3 0x1863 PUSH3 0x1806 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x132B DUP1 PUSH3 0x188F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0xB JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x128A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0x92 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4469616D6F6E643A2046756E6374696F6E20646F6573206E6F74206578697374 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0xB1 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x128A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP3 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0x4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x128A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x16B SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x20 ADD PUSH2 0x103B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 PUSH1 0x2 DUP4 ADD SLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x20F JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1B0 JUMPI POP TIMESTAMP DUP2 GT ISZERO JUMPDEST PUSH2 0x1FC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A2064656C6179206E6F7420656C6170736564000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x89 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMPDEST DUP5 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3CC JUMPI PUSH1 0x0 DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x230 JUMPI PUSH2 0x230 PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x251 JUMPI PUSH2 0x251 PUSH2 0xFD5 JUMP JUMPDEST DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x263 JUMPI PUSH2 0x263 PUSH2 0xFD5 JUMP JUMPDEST SUB PUSH2 0x2B1 JUMPI PUSH2 0x2AC DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x27D JUMPI PUSH2 0x27D PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x29B JUMPI PUSH2 0x29B PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x62D JUMP JUMPDEST PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2C5 JUMPI PUSH2 0x2C5 PUSH2 0xFD5 JUMP JUMPDEST SUB PUSH2 0x30E JUMPI PUSH2 0x2AC DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2DF JUMPI PUSH2 0x2DF PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2FD JUMPI PUSH2 0x2FD PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x79E JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x322 JUMPI PUSH2 0x322 PUSH2 0xFD5 JUMP JUMPDEST SUB PUSH2 0x36B JUMPI PUSH2 0x2AC DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x33C JUMPI PUSH2 0x33C PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x35A JUMPI PUSH2 0x35A PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x927 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A20496E636F72726563742046616365744375 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x3A20B1BA34B7B7 PUSH1 0xC9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x214 JUMP JUMPDEST POP PUSH32 0x8FAA70878671CCD212D20771B795C50AF8FD3FF6CF27F4BDE57E5D4DE0AEB673 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x400 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x103B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x412 DUP6 DUP6 PUSH2 0x41A JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x4A1 JUMPI DUP1 MLOAD ISZERO PUSH2 0x49D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E6974206973206164647265737328 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3029206275745F63616C6C64617461206973206E6F7420656D70747900000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0x518 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F63616C6C6461746120697320656D7074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7920627574205F696E6974206973206E6F742061646472657373283029000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADDRESS EQ PUSH2 0x54A JUMPI PUSH2 0x54A DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12AA PUSH1 0x28 SWAP2 CODECOPY PUSH2 0xAD9 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x565 SWAP2 SWAP1 PUSH2 0x1151 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x5A0 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x5A5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x627 JUMPI DUP1 MLOAD ISZERO PUSH2 0x5D0 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x89 SWAP2 SWAP1 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E69742066756E6374696F6E207265 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1D995C9D1959 PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0x64E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x89 SWAP1 PUSH2 0x1187 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x128A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x683 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x89 SWAP1 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND SWAP1 SUB PUSH2 0x6B9 JUMPI PUSH2 0x6B9 DUP3 DUP6 PUSH2 0xB07 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x412 JUMPI PUSH1 0x0 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x6DA JUMPI PUSH2 0x6DA PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP8 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x778 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774206164642066756E6374696F PUSH1 0x44 DUP3 ADD MSTORE PUSH21 0x6E207468617420616C726561647920657869737473 PUSH1 0x58 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST PUSH2 0x784 DUP7 DUP4 DUP8 DUP12 PUSH2 0xB71 JUMP JUMPDEST DUP5 PUSH2 0x78E DUP2 PUSH2 0x1234 JUMP JUMPDEST SWAP6 POP POP DUP3 PUSH1 0x1 ADD SWAP3 POP POP POP PUSH2 0x6BE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 DUP2 SWAP1 SUB PUSH2 0x7C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x89 SWAP1 PUSH2 0x1187 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x128A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x7F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x89 SWAP1 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND SWAP1 SUB PUSH2 0x82C JUMPI PUSH2 0x82C DUP3 DUP7 PUSH2 0xB07 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x412 JUMPI PUSH1 0x0 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x84B JUMPI PUSH2 0x84B PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP9 AND DUP2 SUB PUSH2 0x8F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x38 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774207265706C6163652066756E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6374696F6E20776974682073616D652066756E6374696F6E0000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST PUSH2 0x901 DUP6 DUP3 DUP5 PUSH2 0xC11 JUMP JUMPDEST PUSH2 0x90D DUP6 DUP4 DUP7 DUP12 PUSH2 0xB71 JUMP JUMPDEST DUP4 PUSH2 0x917 DUP2 PUSH2 0x1234 JUMP JUMPDEST SWAP5 POP POP DUP3 PUSH1 0x1 ADD SWAP3 POP POP POP PUSH2 0x82F JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0x948 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x89 SWAP1 PUSH2 0x1187 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x128A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH4 0x5DF91AC7 PUSH1 0xE1 SHL PUSH4 0x7E4C707 PUSH1 0xE2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND ISZERO PUSH2 0x9DD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2052656D6F76652066616365742061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH22 0x657373206D7573742062652061646472657373283029 PUSH1 0x50 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAD0 JUMPI PUSH1 0x0 DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9FE JUMPI PUSH2 0x9FE PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND EQ ISZERO DUP1 ISZERO PUSH2 0xA39 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 DUP2 AND SWAP1 DUP6 AND EQ ISZERO JUMPDEST PUSH2 0xA98 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E6E6F742072656D6F766520637574 PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x2073656C6563746F7273 PUSH1 0xB0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xAC6 DUP8 DUP3 DUP5 PUSH2 0xC11 JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x9E2 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE PUSH2 0xB02 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x89 SWAP2 SWAP1 PUSH2 0x116D JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xB29 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12D2 PUSH1 0x24 SWAP2 CODECOPY PUSH2 0xAD9 JUMP JUMPDEST PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP5 DUP6 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP7 ADD DUP6 SWAP1 SSTORE SWAP5 DUP5 ADD DUP4 SSTORE SWAP2 DUP3 MSTORE SWAP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP7 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP8 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 DUP9 AND OR DUP2 SSTORE SWAP5 SWAP1 SWAP6 AND DUP1 DUP4 MSTORE PUSH1 0x1 DUP1 DUP10 ADD DUP4 MSTORE SWAP6 DUP4 KECCAK256 DUP1 SLOAD SWAP7 DUP8 ADD DUP2 SSTORE DUP4 MSTORE DUP2 DUP4 KECCAK256 PUSH1 0x8 DUP8 DIV ADD DUP1 SLOAD PUSH1 0xE0 SWAP9 SWAP1 SWAP9 SHR PUSH1 0x4 PUSH1 0x7 SWAP1 SWAP9 AND SWAP8 SWAP1 SWAP8 MUL PUSH2 0x100 EXP SWAP7 DUP8 MUL PUSH4 0xFFFFFFFF SWAP1 SWAP8 MUL NOT SWAP1 SWAP8 AND SWAP6 SWAP1 SWAP6 OR SWAP1 SWAP6 SSTORE MSTORE SWAP3 SWAP1 SWAP2 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xC8D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F76652066756E63 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74696F6E207468617420646F65736E2774206578697374000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SUB PUSH2 0xCFC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F766520696D6D75 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x3A30B1363290333AB731BA34B7B7 PUSH1 0x91 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 ADD SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP3 SWAP2 PUSH2 0xD4B SWAP2 PUSH2 0x125A JUMP JUMPDEST SWAP1 POP DUP1 DUP3 EQ PUSH2 0xE3D JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH2 0xD80 JUMPI PUSH2 0xD80 PUSH2 0x113B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP5 MSTORE PUSH1 0x1 DUP11 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0x7 SWAP1 SWAP3 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP1 SWAP3 DIV PUSH1 0xE0 SHL SWAP3 POP DUP3 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0xDD1 JUMPI PUSH2 0xDD1 PUSH2 0x113B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP5 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP4 DUP5 MUL NOT AND PUSH1 0xE0 SWAP6 SWAP1 SWAP6 SHR SWAP3 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP6 AND MUL OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP1 PUSH2 0xE66 JUMPI PUSH2 0xE66 PUSH2 0x1273 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x8 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x4 PUSH1 0x7 DUP8 AND MUL PUSH2 0x100 EXP MUL NOT AND SWAP1 SSTORE SWAP2 SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP6 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 SSTORE DUP2 SWAP1 SUB PUSH2 0xFCE JUMPI PUSH1 0x2 DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0xEC9 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x125A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP1 DUP10 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 SWAP2 POP DUP1 DUP3 EQ PUSH2 0xF78 JUMPI PUSH1 0x0 DUP8 PUSH1 0x2 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0xF08 JUMPI PUSH2 0xF08 PUSH2 0x113B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP10 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xF39 JUMPI PUSH2 0xF39 PUSH2 0x113B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 ADD DUP2 SWAP1 SSTORE JUMPDEST DUP7 PUSH1 0x2 ADD DUP1 SLOAD DUP1 PUSH2 0xF8B JUMPI PUSH2 0xF8B PUSH2 0x1273 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH1 0x0 NOT SWAP1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP3 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SSTORE POP POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1006 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFEE JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1027 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xFEB JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP8 MLOAD DUP1 DUP4 MSTORE PUSH1 0x80 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD PUSH1 0x20 DUP1 DUP12 ADD PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x110B JUMPI DUP10 DUP5 SUB PUSH1 0x7F NOT ADD DUP7 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE DUP4 DUP2 ADD MLOAD DUP10 DUP7 ADD SWAP1 PUSH1 0x3 DUP2 LT PUSH2 0x10AA JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP7 DUP7 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD SWAP2 DUP7 ADD DUP11 SWAP1 MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 DUP5 ADD SWAP1 PUSH1 0x0 SWAP1 DUP10 DUP8 ADD SWAP1 JUMPDEST DUP1 DUP4 LT ISZERO PUSH2 0x10F6 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP3 MSTORE SWAP3 DUP7 ADD SWAP3 PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH2 0x10CC JUMP JUMPDEST POP SWAP8 DUP6 ADD SWAP8 SWAP6 POP POP POP SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1064 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP1 DUP9 ADD MSTORE DUP7 DUP2 SUB PUSH1 0x40 DUP9 ADD MSTORE PUSH2 0x112D DUP2 DUP10 PUSH2 0x100F JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1163 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xFEB JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1180 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x100F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2B SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x40 DUP3 ADD MSTORE PUSH11 0x1858D95D081D1BC818DD5D PUSH1 0xAA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2C SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x40 DUP3 ADD MSTORE PUSH12 0x652061646472657373283029 PUSH1 0xA0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x1250 JUMPI PUSH2 0x1250 PUSH2 0x121E JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x126D JUMPI PUSH2 0x126D PUSH2 0x121E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID 0xC8 0xFC 0xAD DUP14 0xB8 0x4D EXTCODECOPY 0xC1 DUP12 0x4C COINBASE 0xD5 MLOAD 0xEA 0xE 0xE6 PUSH14 0xD599CDE068D998E57D5E09332C13 SHR 0x4C PUSH10 0x624469616D6F6E644375 PUSH21 0x3A205F696E6974206164647265737320686173206E PUSH16 0x20636F64654C69624469616D6F6E6443 PUSH22 0x743A204E657720666163657420686173206E6F20636F PUSH5 0x65A2646970 PUSH7 0x73582212203B1F 0x4E 0xD6 GAS PUSH12 0xAB0F6C2F33B7EAA1E2B89284 PUSH27 0x6C215922D52116D1D72F8895C164736F6C63430008110033C8FCAD DUP14 0xB8 0x4D EXTCODECOPY 0xC1 DUP12 0x4C COINBASE 0xD5 MLOAD 0xEA 0xE 0xE6 PUSH14 0xD599CDE068D998E57D5E09332C13 SHR 0x4C PUSH10 0x624469616D6F6E644375 PUSH21 0x3A205F696E6974206164647265737320686173206E PUSH16 0x20636F64654C69624469616D6F6E6443 PUSH22 0x743A204164642066616365742063616E277420624C69 PUSH3 0x446961 PUSH14 0x6F6E644375743A204E6577206661 PUSH4 0x65742068 PUSH2 0x7320 PUSH15 0x6F20636F64654C69624469616D6F6E PUSH5 0x4375743A20 0x4E PUSH16 0x2073656C6563746F727320696E206600 ","sourceMap":"511:2171:82:-:0;;;1010:534;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1165:28:82;;;1161:92;;1203:43;1231:14;1203:27;;;;;:43;;:::i;:::-;1259:50;1281:11;1302:1;1259:50;;;;;;;;;;;;:21;;;;;:50;;:::i;:::-;1330:23;;1316:11;1359:181;1383:3;1379:1;:7;1359:181;;;1398:95;1430:16;1447:1;1430:19;;;;;;;;:::i;:::-;;;;;;;:32;;;1464:16;1481:1;1464:19;;;;;;;;:::i;:::-;;;;;;;:28;;;1398:31;;;;;:95;;:::i;:::-;1522:3;;1359:181;;;;1155:389;1010:534;;;511:2171;;2066:203:106;2202:16;;2181:49;;-1:-1:-1;;;;;;;;;;;636:45:106;-1:-1:-1;;;;;2181:49:106;;;;2202:16;;;2181:49;;2126:25;;2181:49;2236:16;;:28;;-1:-1:-1;;;;;;2236:28:106;-1:-1:-1;;;;;2236:28:106;;;;;;;;;;2066:203::o;4277:2043::-;4484:41;;-1:-1:-1;;;;;;;;;;;636:45:106;4410:25;;4484:41;;4495:11;;4508:5;;4515:9;;4484:41;;;:::i;:::-;;;;-1:-1:-1;;4484:41:106;;;;;;;;;4474:52;;4484:41;4474:52;;;;4536:17;;;:24;4474:52;;-1:-1:-1;4536:29:106;4532:802;;4575:12;4590:23;;;:18;;;:23;;;;;;4629:9;;;;;:36;;;4650:15;4642:4;:23;;4629:36;4621:78;;;;-1:-1:-1;;;4621:78:106;;9283:2:181;4621:78:106;;;9265:21:181;9322:2;9302:18;;;9295:30;9361:31;9341:18;;;9334:59;9410:18;;4621:78:106;;;;;;;;;-1:-1:-1;5304:23:106;;;;:18;;;:23;;;;;5297:30;4532:802;5440:18;;5426:11;5464:756;5502:3;5489:10;:16;5464:756;;;5517:33;5553:11;5565:10;5553:23;;;;;;;;:::i;:::-;;;;;;;:30;;;5517:66;;5605:30;5595:40;;;;;;;;:::i;:::-;:6;:40;;;;;;;;:::i;:::-;;5591:574;;5647:93;5660:11;5672:10;5660:23;;;;;;;;:::i;:::-;;;;;;;:36;;;5698:11;5710:10;5698:23;;;;;;;;:::i;:::-;;;;;;;:41;;;5647:12;;;:93;;:::i;:::-;5591:574;;;5769:34;5759:6;:44;;;;;;;;:::i;:::-;;5755:410;;5815:97;5832:11;5844:10;5832:23;;;;;;;;:::i;:::-;;;;;;;:36;;;5870:11;5882:10;5870:23;;;;;;;;:::i;:::-;;;;;;;:41;;;5815:16;;;:97;;:::i;5755:410::-;5941:33;5931:6;:43;;;;;;;;:::i;:::-;;5927:238;;5986:96;6002:11;6014:10;6002:23;;;;;;;;:::i;:::-;;;;;;;:36;;;6040:11;6052:10;6040:23;;;;;;;;:::i;:::-;;;;;;;:41;;;5986:15;;;:96;;:::i;5927:238::-;6107:49;;-1:-1:-1;;;6107:49:106;;9641:2:181;6107:49:106;;;9623:21:181;9680:2;9660:18;;;9653:30;9719:34;9699:18;;;9692:62;-1:-1:-1;;;9770:18:181;;;9763:37;9817:19;;6107:49:106;9439:403:181;5927:238:106;-1:-1:-1;6193:12:106;;5464:756;;;;6230:41;6241:11;6254:5;6261:9;6230:41;;;;;;;;:::i;:::-;;;;;;;;6277:38;6298:5;6305:9;6277:20;:38::i;:::-;4404:1916;;;4277:2043;;;:::o;12320:755::-;-1:-1:-1;;;;;12408:19:106;;12404:667;;12445:16;;:21;12437:94;;;;-1:-1:-1;;;12437:94:106;;10049:2:181;12437:94:106;;;10031:21:181;10088:2;10068:18;;;10061:30;10127:34;10107:18;;;10100:62;10198:30;10178:18;;;10171:58;10246:19;;12437:94:106;9847:424:181;12437:94:106;12320:755;;:::o;12404:667::-;12560:9;:16;12580:1;12560:21;12552:95;;;;-1:-1:-1;;;12552:95:106;;10478:2:181;12552:95:106;;;10460:21:181;10517:2;10497:18;;;10490:30;10556:34;10536:18;;;10529:62;10627:31;10607:18;;;10600:59;10676:19;;12552:95:106;10276:425:181;12552:95:106;-1:-1:-1;;;;;12659:22:106;;12676:4;12659:22;12655:120;;12693:73;12716:5;12693:73;;;;;;;;;;;;;;;;;:22;:73::i;:::-;12783:12;12797:18;12819:5;-1:-1:-1;;;;;12819:18:106;12838:9;12819:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12782:66;;;;12861:7;12856:209;;12884:12;;:17;12880:177;;12962:5;12948:21;;-1:-1:-1;;;12948:21:106;;;;;;;;:::i;12880:177::-;12998:48;;-1:-1:-1;;;12998:48:106;;11424:2:181;12998:48:106;;;11406:21:181;11463:2;11443:18;;;11436:30;11502:34;11482:18;;;11475:62;-1:-1:-1;;;11553:18:181;;;11546:36;11599:19;;12998:48:106;11222:402:181;12880:177:106;12544:527;;12320:755;;:::o;6324:1056::-;6428:18;:25;6457:1;6428:30;6420:86;;;;-1:-1:-1;;;6420:86:106;;11831:2:181;6420:86:106;;;11813:21:181;11870:2;11850:18;;;11843:30;-1:-1:-1;;;;;;;;;;;11889:18:181;;;11882:62;-1:-1:-1;;;11960:18:181;;;11953:41;12011:19;;6420:86:106;11629:407:181;6420:86:106;-1:-1:-1;;;;;;;;;;;;;;;;6570:27:106;;6562:84;;;;-1:-1:-1;;;6562:84:106;;12243:2:181;6562:84:106;;;12225:21:181;12282:2;12262:18;;;12255:30;-1:-1:-1;;;;;;;;;;;12301:18:181;;;12294:62;-1:-1:-1;;;12372:18:181;;;12365:42;12424:19;;6562:84:106;12041:408:181;6562:84:106;-1:-1:-1;;;;;6685:40:106;;6652:23;6685:40;;;:25;;;:40;;;;;:65;;-1:-1:-1;;;;;6811:21:106;;;;6807:69;;6842:27;6851:2;6855:13;6842:8;:27::i;:::-;6895:25;;6881:11;6926:450;6970:3;6954:13;:19;6926:450;;;6985:15;7003:18;7022:13;7003:33;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;;7070:39:106;;7044:23;7070:39;;;;;;;;;;;:52;7003:33;;-1:-1:-1;;;;;;7070:52:106;7138:29;;7130:95;;;;-1:-1:-1;;;7130:95:106;;12656:2:181;7130:95:106;;;12638:21:181;12695:2;12675:18;;;12668:30;12734:34;12714:18;;;12707:62;12805:23;12785:18;;;12778:51;12846:19;;7130:95:106;12454:417:181;7130:95:106;-1:-1:-1;;;;;;10015:40:106;;:29;:40;;;;;;;;;;;:85;;-1:-1:-1;;;;;10015:85:106;;;-1:-1:-1;;;;;;;;10015:85:106;;;;;;10106:40;;;;;-1:-1:-1;10106:25:106;;;:40;;;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;10015:85;10106:74;;;;;;;;;;;;;;;;;;;;;10186:40;;;;;;;:69;;-1:-1:-1;;;;;;10186:69:106;;;;7299:18;;;;:::i;:::-;;;;7346:15;;;;;6977:399;;6926:450;;7384:1097;7498:25;;7484:11;7537:8;;;7529:64;;;;-1:-1:-1;;;7529:64:106;;11831:2:181;7529:64:106;;;11813:21:181;11870:2;11850:18;;;11843:30;-1:-1:-1;;;;;;;;;;;11889:18:181;;;11882:62;-1:-1:-1;;;11960:18:181;;;11953:41;12011:19;;7529:64:106;11629:407:181;7529:64:106;-1:-1:-1;;;;;;;;;;;;;;;;7657:27:106;;7649:84;;;;-1:-1:-1;;;7649:84:106;;12243:2:181;7649:84:106;;;12225:21:181;12282:2;12262:18;;;12255:30;-1:-1:-1;;;;;;;;;;;12301:18:181;;;12294:62;-1:-1:-1;;;12372:18:181;;;12365:42;12424:19;;7649:84:106;12041:408:181;7649:84:106;-1:-1:-1;;;;;7772:40:106;;7739:23;7772:40;;;:25;;;:40;;;;;:65;;-1:-1:-1;;;;;7898:21:106;;;;7894:69;;7929:27;7938:2;7942:13;7929:8;:27::i;:::-;7973:21;7968:509;8012:3;7996:13;:19;7968:509;;;8027:15;8045:18;8064:13;8045:33;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;;8112:39:106;;8086:23;8112:39;;;;;;;;;;;:52;8045:33;;-1:-1:-1;;;;;;8112:52:106;;;;8180:32;;;;8172:101;;;;-1:-1:-1;;;8172:101:106;;13424:2:181;8172:101:106;;;13406:21:181;13463:2;13443:18;;;13436:30;13502:34;13482:18;;;13475:62;13573:26;13553:18;;;13546:54;13617:19;;8172:101:106;13222:420:181;8172:101:106;8281:45;8296:2;8300:15;8317:8;8281:14;:45::i;:::-;-1:-1:-1;;;;;;10015:40:106;;:29;:40;;;;;;;;;;;:85;;-1:-1:-1;;;;;10015:85:106;;;-1:-1:-1;;;;;;;;10015:85:106;;;;;;10106:40;;;;;-1:-1:-1;10106:25:106;;;:40;;;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;10015:85;10106:74;;;;;;;;;;;;;;;;;;;;;10186:40;;;;;;;:69;;-1:-1:-1;;;;;;10186:69:106;;;;8400:18;;;;:::i;:::-;;;;8447:15;;;;;8019:458;;7968:509;;8485:1070;8592:18;:25;8621:1;8592:30;8584:86;;;;-1:-1:-1;;;8584:86:106;;11831:2:181;8584:86:106;;;11813:21:181;11870:2;11850:18;;;11843:30;-1:-1:-1;;;;;;;;;;;11889:18:181;;;11882:62;-1:-1:-1;;;11960:18:181;;;11953:41;12011:19;;8584:86:106;11629:407:181;8584:86:106;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;8989:27:106;;;8981:94;;;;-1:-1:-1;;;8981:94:106;;13849:2:181;8981:94:106;;;13831:21:181;13888:2;13868:18;;;13861:30;13927:34;13907:18;;;13900:62;13998:24;13978:18;;;13971:52;14040:19;;8981:94:106;13647:418:181;8981:94:106;9095:25;;9081:11;9126:425;9170:3;9154:13;:19;9126:425;;;9185:15;9203:18;9222:13;9203:33;;;;;;;;:::i;:::-;;;;;;;9185:51;;9264:15;-1:-1:-1;;;;;9252:27:106;;:8;-1:-1:-1;;;;;9252:27:106;;;;:54;;;;-1:-1:-1;;;;;;;9283:23:106;;;;;;;;9252:54;9244:109;;;;-1:-1:-1;;;9244:109:106;;14272:2:181;9244:109:106;;;14254:21:181;14311:2;14291:18;;;14284:30;14350:34;14330:18;;;14323:62;-1:-1:-1;;;14401:18:181;;;14394:40;14451:19;;9244:109:106;14070:406:181;9244:109:106;-1:-1:-1;;;;;;9387:39:106;;9361:23;9387:39;;;;;;;;;;:52;-1:-1:-1;;;;;9387:52:106;9447:45;9387:2;:52;9417:8;9447:14;:45::i;:::-;-1:-1:-1;;9521:15:106;;9126:425;;;;8578:977;;;;8485:1070;;:::o;13079:155::-;13215:13;-1:-1:-1;;;;;13187:21:106;;;13179:50;;;;-1:-1:-1;;;13179:50:106;;;;;;;;:::i;:::-;;13079:155;;:::o;9559:302::-;9642:77;9665:13;9642:77;;;;;;;;;;;;;;;;;:22;:77::i;:::-;9789:17;;;:24;;-1:-1:-1;;;;;9725:40:106;;;;;;;:25;;;;:40;;;;;;;:61;;:88;;;9819:37;;;;;;;;;;;;;;-1:-1:-1;;;;;;9819:37:106;;;;;;9559:302::o;10264:2052::-;-1:-1:-1;;;;;10395:27:106;;10387:95;;;;-1:-1:-1;;;10387:95:106;;14683:2:181;10387:95:106;;;14665:21:181;14722:2;14702:18;;;14695:30;14761:34;14741:18;;;14734:62;14832:25;14812:18;;;14805:53;14875:19;;10387:95:106;14481:419:181;10387:95:106;10594:4;-1:-1:-1;;;;;10569:30:106;;;10561:89;;;;-1:-1:-1;;;10561:89:106;;15107:2:181;10561:89:106;;;15089:21:181;15146:2;15126:18;;;15119:30;15185:34;15165:18;;;15158:62;-1:-1:-1;;;15236:18:181;;;15229:44;15290:19;;10561:89:106;14905:410:181;10561:89:106;-1:-1:-1;;;;;;10753:40:106;;10726:24;10753:40;;;;;;;;;;;:65;-1:-1:-1;;;;;10855:40:106;;;;10923:1;10855:25;;;:40;;;;;;:65;-1:-1:-1;;;10753:65:106;;;-1:-1:-1;;;;;10753:65:106;;10726:24;10855:69;;;:::i;:::-;10824:100;;11018:20;10998:16;:40;10994:365;;-1:-1:-1;;;;;11070:40:106;;11048:19;11070:40;;;:25;;;:40;;;;;:80;;11129:20;;11070:80;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;11158:40:106;;;;:25;;;:40;;;;;;;:76;;11070:80;;;;;;;;;;;;;;-1:-1:-1;11070:80:106;;11158:40;11217:16;;11158:76;;;;;;:::i;:::-;;;;;;;;;;;;;:91;;;:76;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11257:43:106;;;;;;;;;;;;:95;;-1:-1:-1;;;;;11257:95:106;-1:-1:-1;;;;;;;;11257:95:106;;;;;;10994:365;-1:-1:-1;;;;;11396:40:106;;;;;;:25;;;:40;;;;;:64;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;11396:64:106;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11473:40:106;;;;;;;;;;11466:47;;;11600:25;;;11596:716;;11755:17;;;:24;11720:32;;11755:28;;11782:1;;11755:28;:::i;:::-;-1:-1:-1;;;;;11822:40:106;;11791:28;11822:40;;;:25;;;;:40;;;;;;:61;;11720:63;;-1:-1:-1;11895:48:106;;;11891:308;;11955:24;11982:2;:17;;12000:24;11982:43;;;;;;;;:::i;:::-;;;;;;;;;;;12035:17;;;:39;;-1:-1:-1;;;;;11982:43:106;;;;-1:-1:-1;11982:43:106;;12053:20;;12035:39;;;;;;:::i;:::-;;;;;;;;;;;;;:58;;-1:-1:-1;;;;;;12035:58:106;-1:-1:-1;;;;;12035:58:106;;;;;;12103:43;;;;;;-1:-1:-1;12103:25:106;;;:43;;;;;;:64;:87;;;11891:308;12206:2;:17;;:23;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;12206:23:106;;;;;-1:-1:-1;;;;;;12206:23:106;;;;;;;;;-1:-1:-1;;;;;12244:40:106;;;;12206:23;12244:25;;;:40;;;;;;:61;12237:68;-1:-1:-1;;11596:716:106;10381:1935;;10264:2052;;;:::o;14:177:181:-;93:13;;-1:-1:-1;;;;;135:31:181;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:127::-;257:10;252:3;248:20;245:1;238:31;288:4;285:1;278:15;312:4;309:1;302:15;328:257;400:4;394:11;;;432:17;;-1:-1:-1;;;;;464:34:181;;500:22;;;461:62;458:88;;;526:18;;:::i;:::-;562:4;555:24;328:257;:::o;590:251::-;662:2;656:9;704:2;692:15;;-1:-1:-1;;;;;722:34:181;;758:22;;;719:62;716:88;;;784:18;;:::i;846:275::-;917:2;911:9;982:2;963:13;;-1:-1:-1;;959:27:181;947:40;;-1:-1:-1;;;;;1002:34:181;;1038:22;;;999:62;996:88;;;1064:18;;:::i;:::-;1100:2;1093:22;846:275;;-1:-1:-1;846:275:181:o;1126:191::-;1194:4;-1:-1:-1;;;;;1216:30:181;;1213:56;;;1249:18;;:::i;:::-;-1:-1:-1;1294:1:181;1290:14;1306:4;1286:25;;1126:191::o;1322:250::-;1407:1;1417:113;1431:6;1428:1;1425:13;1417:113;;;1507:11;;;1501:18;1488:11;;;1481:39;1453:2;1446:10;1417:113;;;-1:-1:-1;;1564:1:181;1546:16;;1539:27;1322:250::o;1577:2069::-;1656:5;1686:4;1730:3;1725:2;1717:6;1713:15;1709:25;1699:53;;1748:1;1745;1738:12;1699:53;1777:6;1771:13;1803:4;1827:68;1843:51;1891:2;1843:51;:::i;:::-;1827:68;:::i;:::-;1929:15;;;2015:1;2011:10;;;;1999:23;;1995:32;;;1960:12;;;;2039:15;;;2036:35;;;2067:1;2064;2057:12;2036:35;2103:2;2095:6;2091:15;2115:1502;2131:6;2126:3;2123:15;2115:1502;;;2204:10;;-1:-1:-1;;;;;2271:19:181;;;2268:109;;;2331:1;2360:2;2356;2349:14;2268:109;2400:24;;;;2447:4;-1:-1:-1;;2505:12:181;;;2501:21;;2497:30;-1:-1:-1;2494:120:181;;;2568:1;2597:2;2593;2586:14;2494:120;2640:22;;:::i;:::-;2689:42;2727:2;2723;2719:11;2689:42;:::i;:::-;2682:5;2675:57;2775:2;2771;2767:11;2761:18;2808:2;2798:8;2795:16;2792:109;;;2853:1;2883:3;2878;2871:16;2792:109;2933:8;2929:2;2925:17;2914:28;;;2983:3;2978:2;2973:3;2969:12;2965:22;2955:123;;3030:1;3060:3;3055;3048:16;2955:123;3117:2;3112:3;3108:12;3102:19;3145:2;3140:3;3137:11;3134:37;;;3151:18;;:::i;:::-;3199:47;3242:2;3237;3232;3227:3;3223:12;3219:21;3215:30;3199:47;:::i;:::-;3184:62;;3275:3;3266:7;3259:20;3322:3;3317:2;3311:3;3306;3302:13;3298:22;3295:31;3292:124;;;3368:1;3357:12;;3398:3;3393;3386:16;3292:124;3429:71;3496:3;3491:2;3482:7;3478:16;3473:2;3468:3;3464:12;3429:71;:::i;:::-;-1:-1:-1;3520:14:181;;;3513:31;;;;-1:-1:-1;;3557:18:181;;-1:-1:-1;3595:12:181;;;;2148;;2115:1502;;;-1:-1:-1;3635:5:181;1577:2069;-1:-1:-1;;;;;;;1577:2069:181:o;3651:2680::-;3849:6;3857;3865;3918:2;3906:9;3897:7;3893:23;3889:32;3886:52;;;3934:1;3931;3924:12;3886:52;3957:40;3987:9;3957:40;:::i;:::-;4041:2;4026:18;;4020:25;3947:50;;-1:-1:-1;;;;;;4094:14:181;;;4091:34;;;4121:1;4118;4111:12;4091:34;4159:6;4148:9;4144:22;4134:32;;4204:7;4197:4;4193:2;4189:13;4185:27;4175:55;;4226:1;4223;4216:12;4175:55;4255:2;4249:9;4278:68;4294:51;4342:2;4294:51;:::i;4278:68::-;4368:3;4392:2;4387:3;4380:15;4420:2;4415:3;4411:12;4404:19;;4471:2;4465;4462:1;4458:10;4454:2;4450:19;4446:28;4432:42;;4497:7;4489:6;4486:19;4483:39;;;4518:1;4515;4508:12;4483:39;4550:2;4546;4542:11;4562:1537;4578:6;4573:3;4570:15;4562:1537;;;4657:3;4651:10;4693:2;4680:11;4677:19;4674:39;;;4709:1;4706;4699:12;4674:39;4736:20;;4808:2;4780:16;;;-1:-1:-1;;4776:30:181;4772:39;4769:59;;;4824:1;4821;4814:12;4769:59;4854:22;;:::i;:::-;4903:42;4941:2;4937;4933:11;4903:42;:::i;:::-;4896:5;4889:57;4988:2;4984;4980:11;4974:18;5027:1;5018:7;5015:14;5005:42;;5043:1;5040;5033:12;5005:42;5078:2;5067:14;;5060:31;5134:2;5126:11;;5120:18;5154:16;;;5151:36;;;5183:1;5180;5173:12;5151:36;5218:8;5214:2;5210:17;5200:27;;;5267:7;5262:2;5258;5254:11;5250:25;5240:53;;5289:1;5286;5279:12;5240:53;5330:2;5326;5322:11;5316:18;5360:68;5376:51;5424:2;5376:51;:::i;5360:68::-;5472:17;;;5570:1;5566:10;;;;5558:19;;5579:2;5554:28;;5522:2;5511:14;;;5598:21;;;5595:41;;;5632:1;5629;5622:12;5595:41;5670:2;5666;5662:11;5649:24;;5686:298;5704:8;5697:5;5694:19;5686:298;;;5787:12;;-1:-1:-1;;;;;;5838:34:181;;5826:47;;5816:75;;5887:1;5884;5877:12;5816:75;5908:22;;5967:2;5725:14;;;;5956;;;;5686:298;;;6015:2;6004:14;;5997:29;-1:-1:-1;;6039:18:181;;-1:-1:-1;6086:2:181;6077:12;;;;4595;4562:1537;;;-1:-1:-1;6169:2:181;6154:18;;6148:25;6118:5;;-1:-1:-1;6148:25:181;-1:-1:-1;;;6185:16:181;;;6182:36;;;6214:1;6211;6204:12;6182:36;;6237:88;6317:7;6306:8;6295:9;6291:24;6237:88;:::i;:::-;6227:98;;;3651:2680;;;;;:::o;6336:127::-;6397:10;6392:3;6388:20;6385:1;6378:31;6428:4;6425:1;6418:15;6452:4;6449:1;6442:15;6577:127;6638:10;6633:3;6629:20;6626:1;6619:31;6669:4;6666:1;6659:15;6693:4;6690:1;6683:15;6709:270;6750:3;6788:5;6782:12;6815:6;6810:3;6803:19;6831:76;6900:6;6893:4;6888:3;6884:14;6877:4;6870:5;6866:16;6831:76;:::i;:::-;6961:2;6940:15;-1:-1:-1;;6936:29:181;6927:39;;;;6968:4;6923:50;;6709:270;-1:-1:-1;;6709:270:181:o;6984:2092::-;7254:4;7283:2;7323;7312:9;7308:18;7353:2;7342:9;7335:21;7376:6;7411;7405:13;7442:6;7434;7427:22;7468:3;7458:13;;7502:2;7491:9;7487:18;7480:25;;7564:2;7554:6;7551:1;7547:14;7536:9;7532:30;7528:39;7586:4;7625:2;7617:6;7613:15;7646:1;7656:1249;7670:6;7667:1;7664:13;7656:1249;;;7735:22;;;-1:-1:-1;;7731:37:181;7719:50;;7792:13;;7879:9;;-1:-1:-1;;;;;7875:35:181;7860:51;;7950:11;;;7944:18;7832:15;;;;8002:1;7985:19;;7975:170;;8055:10;8050:3;8046:20;8043:1;8036:31;8094:4;8091:1;8084:15;8126:4;8123:1;8116:15;7975:170;8165:15;;;8158:37;8218:4;8263:11;;;8257:18;8295:15;;;8288:27;;;8376:21;;8410:24;;;;8500:23;;;;-1:-1:-1;;8456:15:181;;;;8561:236;8577:8;8572:3;8569:17;8561:236;;;8658:15;;-1:-1:-1;;;;;;8654:42:181;8640:57;;8766:17;;;;8605:1;8596:11;;;;;8723:14;;;;8561:236;;;-1:-1:-1;8883:12:181;;;;8820:5;-1:-1:-1;;;8848:15:181;;;;7692:1;7685:9;7656:1249;;;-1:-1:-1;;;;;;;6534:31:181;;8941:18;;;6522:44;8998:22;;;8991:4;8976:20;;8969:52;9038:32;9002:6;9055;9038:32;:::i;:::-;9030:40;6984:2092;-1:-1:-1;;;;;;;;;;6984:2092:181:o;10706:287::-;10835:3;10873:6;10867:13;10889:66;10948:6;10943:3;10936:4;10928:6;10924:17;10889:66;:::i;:::-;10971:16;;;;;10706:287;-1:-1:-1;;10706:287:181:o;10998:219::-;11147:2;11136:9;11129:21;11110:4;11167:44;11207:2;11196:9;11192:18;11184:6;11167:44;:::i;:::-;11159:52;10998:219;-1:-1:-1;;;10998:219:181:o;12876:127::-;12937:10;12932:3;12928:20;12925:1;12918:31;12968:4;12965:1;12958:15;12992:4;12989:1;12982:15;13008:209;13046:3;-1:-1:-1;;;;;13116:14:181;;;-1:-1:-1;;;;;;13142:15:181;;13139:41;;13160:18;;:::i;:::-;13209:1;13196:15;;13008:209;-1:-1:-1;;;13008:209:181:o;15320:128::-;15387:9;;;15408:11;;;15405:37;;;15422:18;;:::i;:::-;15320:128;;;;:::o;15453:127::-;15514:10;15509:3;15505:20;15502:1;15495:31;15545:4;15542:1;15535:15;15569:4;15566:1;15559:15;15453:127;511:2171:82;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_22520":{"entryPoint":null,"id":22520,"parameterSlots":0,"returnSlots":0},"@_22524":{"entryPoint":null,"id":22524,"parameterSlots":0,"returnSlots":0},"@addFacet_30293":{"entryPoint":2823,"id":30293,"parameterSlots":2,"returnSlots":0},"@addFunction_30334":{"entryPoint":2929,"id":30334,"parameterSlots":4,"returnSlots":0},"@addFunctions_30059":{"entryPoint":1581,"id":30059,"parameterSlots":2,"returnSlots":0},"@diamondCut_29953":{"entryPoint":323,"id":29953,"parameterSlots":3,"returnSlots":0},"@diamondStorage_29603":{"entryPoint":null,"id":29603,"parameterSlots":0,"returnSlots":1},"@enforceHasContractCode_30595":{"entryPoint":2777,"id":30595,"parameterSlots":2,"returnSlots":0},"@initializeDiamondCut_30578":{"entryPoint":1050,"id":30578,"parameterSlots":2,"returnSlots":0},"@removeFunction_30501":{"entryPoint":3089,"id":30501,"parameterSlots":3,"returnSlots":0},"@removeFunctions_30260":{"entryPoint":2343,"id":30260,"parameterSlots":2,"returnSlots":0},"@replaceFunctions_30167":{"entryPoint":1950,"id":30167,"parameterSlots":2,"returnSlots":0},"@setContractOwner_29633":{"entryPoint":182,"id":29633,"parameterSlots":1,"returnSlots":0},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_bytes":{"entryPoint":4111,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":4433,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":4155,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":4461,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":4487,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":4562,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_6dc3f1dab50ff21fc15088aa16d05815257e5abe70c54939829f018f001302c3__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_6e6486aeb9db70da259b7171a739046119facaec2d8a6bd46f1145fe8391014a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bf74910c6b16e2fe967a9c2fd1df7451e7594bd2184362aed0a451068a63c3f3__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":4698,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":4075,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint96":{"entryPoint":4660,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":4638,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":4053,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x31":{"entryPoint":4723,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":4411,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:9884:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"188:182:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"205:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"216:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"198:6:181"},"nodeType":"YulFunctionCall","src":"198:21:181"},"nodeType":"YulExpressionStatement","src":"198:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"239:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"250:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"235:3:181"},"nodeType":"YulFunctionCall","src":"235:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"255:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"228:6:181"},"nodeType":"YulFunctionCall","src":"228:30:181"},"nodeType":"YulExpressionStatement","src":"228:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"278:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"289:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"274:3:181"},"nodeType":"YulFunctionCall","src":"274:18:181"},{"hexValue":"4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374","kind":"string","nodeType":"YulLiteral","src":"294:34:181","type":"","value":"Diamond: Function does not exist"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"267:6:181"},"nodeType":"YulFunctionCall","src":"267:62:181"},"nodeType":"YulExpressionStatement","src":"267:62:181"},{"nodeType":"YulAssignment","src":"338:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"350:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"361:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"346:3:181"},"nodeType":"YulFunctionCall","src":"346:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"338:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_6e6486aeb9db70da259b7171a739046119facaec2d8a6bd46f1145fe8391014a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"165:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"179:4:181","type":""}],"src":"14:356:181"},{"body":{"nodeType":"YulBlock","src":"419:60:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"436:3:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"445:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"460:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"465:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"456:3:181"},"nodeType":"YulFunctionCall","src":"456:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"469:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"452:3:181"},"nodeType":"YulFunctionCall","src":"452:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"441:3:181"},"nodeType":"YulFunctionCall","src":"441:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"429:6:181"},"nodeType":"YulFunctionCall","src":"429:44:181"},"nodeType":"YulExpressionStatement","src":"429:44:181"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"403:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"410:3:181","type":""}],"src":"375:104:181"},{"body":{"nodeType":"YulBlock","src":"516:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"533:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"540:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"545:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"536:3:181"},"nodeType":"YulFunctionCall","src":"536:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"526:6:181"},"nodeType":"YulFunctionCall","src":"526:31:181"},"nodeType":"YulExpressionStatement","src":"526:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"573:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"576:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"566:6:181"},"nodeType":"YulFunctionCall","src":"566:15:181"},"nodeType":"YulExpressionStatement","src":"566:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"597:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"600:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"590:6:181"},"nodeType":"YulFunctionCall","src":"590:15:181"},"nodeType":"YulExpressionStatement","src":"590:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"484:127:181"},{"body":{"nodeType":"YulBlock","src":"682:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"692:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"701:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"696:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"761:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"786:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"791:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"782:3:181"},"nodeType":"YulFunctionCall","src":"782:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"805:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"810:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"801:3:181"},"nodeType":"YulFunctionCall","src":"801:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"795:5:181"},"nodeType":"YulFunctionCall","src":"795:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"775:6:181"},"nodeType":"YulFunctionCall","src":"775:39:181"},"nodeType":"YulExpressionStatement","src":"775:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"722:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"725:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"719:2:181"},"nodeType":"YulFunctionCall","src":"719:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"733:19:181","statements":[{"nodeType":"YulAssignment","src":"735:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"744:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"747:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"740:3:181"},"nodeType":"YulFunctionCall","src":"740:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"735:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"715:3:181","statements":[]},"src":"711:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"844:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"849:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"840:3:181"},"nodeType":"YulFunctionCall","src":"840:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"858:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"833:6:181"},"nodeType":"YulFunctionCall","src":"833:27:181"},"nodeType":"YulExpressionStatement","src":"833:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"660:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"665:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"670:6:181","type":""}],"src":"616:250:181"},{"body":{"nodeType":"YulBlock","src":"920:221:181","statements":[{"nodeType":"YulVariableDeclaration","src":"930:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"950:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"944:5:181"},"nodeType":"YulFunctionCall","src":"944:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"934:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"972:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"977:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"965:6:181"},"nodeType":"YulFunctionCall","src":"965:19:181"},"nodeType":"YulExpressionStatement","src":"965:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1032:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"1039:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1028:3:181"},"nodeType":"YulFunctionCall","src":"1028:16:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1050:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"1055:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1046:3:181"},"nodeType":"YulFunctionCall","src":"1046:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"1062:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"993:34:181"},"nodeType":"YulFunctionCall","src":"993:76:181"},"nodeType":"YulExpressionStatement","src":"993:76:181"},{"nodeType":"YulAssignment","src":"1078:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1093:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1106:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1114:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1102:3:181"},"nodeType":"YulFunctionCall","src":"1102:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1123:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1119:3:181"},"nodeType":"YulFunctionCall","src":"1119:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1098:3:181"},"nodeType":"YulFunctionCall","src":"1098:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1089:3:181"},"nodeType":"YulFunctionCall","src":"1089:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"1130:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1085:3:181"},"nodeType":"YulFunctionCall","src":"1085:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"1078:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"897:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"904:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"912:3:181","type":""}],"src":"871:270:181"},{"body":{"nodeType":"YulBlock","src":"1425:1813:181","statements":[{"nodeType":"YulVariableDeclaration","src":"1435:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1445:2:181","type":"","value":"96"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1439:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1456:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1474:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1485:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1470:3:181"},"nodeType":"YulFunctionCall","src":"1470:18:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"1460:6:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1504:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1515:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1497:6:181"},"nodeType":"YulFunctionCall","src":"1497:21:181"},"nodeType":"YulExpressionStatement","src":"1497:21:181"},{"nodeType":"YulVariableDeclaration","src":"1527:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"1538:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"1531:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1553:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1573:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1567:5:181"},"nodeType":"YulFunctionCall","src":"1567:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1557:6:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"1596:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"1604:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1589:6:181"},"nodeType":"YulFunctionCall","src":"1589:22:181"},"nodeType":"YulExpressionStatement","src":"1589:22:181"},{"nodeType":"YulVariableDeclaration","src":"1620:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1630:3:181","type":"","value":"128"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1624:2:181","type":""}]},{"nodeType":"YulAssignment","src":"1642:25:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1653:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"1664:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1649:3:181"},"nodeType":"YulFunctionCall","src":"1649:18:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"1642:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"1676:53:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1698:9:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1713:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"1716:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1709:3:181"},"nodeType":"YulFunctionCall","src":"1709:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1694:3:181"},"nodeType":"YulFunctionCall","src":"1694:30:181"},{"name":"_2","nodeType":"YulIdentifier","src":"1726:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1690:3:181"},"nodeType":"YulFunctionCall","src":"1690:39:181"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"1680:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1738:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1748:4:181","type":"","value":"0x20"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"1742:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1761:29:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1779:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1787:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1775:3:181"},"nodeType":"YulFunctionCall","src":"1775:15:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"1765:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1799:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1808:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"1803:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1867:1200:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1888:3:181"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"1901:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1909:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1897:3:181"},"nodeType":"YulFunctionCall","src":"1897:22:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1925:3:181","type":"","value":"127"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1921:3:181"},"nodeType":"YulFunctionCall","src":"1921:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1893:3:181"},"nodeType":"YulFunctionCall","src":"1893:37:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1881:6:181"},"nodeType":"YulFunctionCall","src":"1881:50:181"},"nodeType":"YulExpressionStatement","src":"1881:50:181"},{"nodeType":"YulVariableDeclaration","src":"1944:23:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"1960:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1954:5:181"},"nodeType":"YulFunctionCall","src":"1954:13:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"1948:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1980:29:181","value":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"1998:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2006:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1994:3:181"},"nodeType":"YulFunctionCall","src":"1994:15:181"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"1984:6:181","type":""}]},{"expression":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"2029:6:181"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2047:2:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2041:5:181"},"nodeType":"YulFunctionCall","src":"2041:9:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2060:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2065:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2056:3:181"},"nodeType":"YulFunctionCall","src":"2056:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2069:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2052:3:181"},"nodeType":"YulFunctionCall","src":"2052:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2037:3:181"},"nodeType":"YulFunctionCall","src":"2037:35:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2022:6:181"},"nodeType":"YulFunctionCall","src":"2022:51:181"},"nodeType":"YulExpressionStatement","src":"2022:51:181"},{"nodeType":"YulVariableDeclaration","src":"2086:38:181","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2116:2:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2120:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2112:3:181"},"nodeType":"YulFunctionCall","src":"2112:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2106:5:181"},"nodeType":"YulFunctionCall","src":"2106:18:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"2090:12:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2180:127:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2205:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2212:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2217:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2208:3:181"},"nodeType":"YulFunctionCall","src":"2208:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2198:6:181"},"nodeType":"YulFunctionCall","src":"2198:31:181"},"nodeType":"YulExpressionStatement","src":"2198:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2253:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2256:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2246:6:181"},"nodeType":"YulFunctionCall","src":"2246:15:181"},"nodeType":"YulExpressionStatement","src":"2246:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2285:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2288:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2278:6:181"},"nodeType":"YulFunctionCall","src":"2278:15:181"},"nodeType":"YulExpressionStatement","src":"2278:15:181"}]},"condition":{"arguments":[{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"2150:12:181"},{"kind":"number","nodeType":"YulLiteral","src":"2164:1:181","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2147:2:181"},"nodeType":"YulFunctionCall","src":"2147:19:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2140:6:181"},"nodeType":"YulFunctionCall","src":"2140:27:181"},"nodeType":"YulIf","src":"2137:170:181"},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"2331:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2339:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2327:3:181"},"nodeType":"YulFunctionCall","src":"2327:15:181"},{"name":"memberValue0","nodeType":"YulIdentifier","src":"2344:12:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2320:6:181"},"nodeType":"YulFunctionCall","src":"2320:37:181"},"nodeType":"YulExpressionStatement","src":"2320:37:181"},{"nodeType":"YulVariableDeclaration","src":"2370:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2380:4:181","type":"","value":"0x40"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"2374:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2397:40:181","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2429:2:181"},{"name":"_5","nodeType":"YulIdentifier","src":"2433:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2425:3:181"},"nodeType":"YulFunctionCall","src":"2425:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2419:5:181"},"nodeType":"YulFunctionCall","src":"2419:18:181"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"2401:14:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"2461:6:181"},{"name":"_5","nodeType":"YulIdentifier","src":"2469:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2457:3:181"},"nodeType":"YulFunctionCall","src":"2457:15:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2474:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2450:6:181"},"nodeType":"YulFunctionCall","src":"2450:27:181"},"nodeType":"YulExpressionStatement","src":"2450:27:181"},{"nodeType":"YulVariableDeclaration","src":"2490:19:181","value":{"name":"tail_3","nodeType":"YulIdentifier","src":"2503:6:181"},"variables":[{"name":"pos_1","nodeType":"YulTypedName","src":"2494:5:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2522:37:181","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"2544:14:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2538:5:181"},"nodeType":"YulFunctionCall","src":"2538:21:181"},"variables":[{"name":"length_1","nodeType":"YulTypedName","src":"2526:8:181","type":""}]},{"expression":{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"2579:6:181"},{"name":"length_1","nodeType":"YulIdentifier","src":"2587:8:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2572:6:181"},"nodeType":"YulFunctionCall","src":"2572:24:181"},"nodeType":"YulExpressionStatement","src":"2572:24:181"},{"nodeType":"YulAssignment","src":"2609:24:181","value":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"2622:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"2630:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2618:3:181"},"nodeType":"YulFunctionCall","src":"2618:15:181"},"variableNames":[{"name":"pos_1","nodeType":"YulIdentifier","src":"2609:5:181"}]},{"nodeType":"YulVariableDeclaration","src":"2646:39:181","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"2666:14:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2682:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2662:3:181"},"nodeType":"YulFunctionCall","src":"2662:23:181"},"variables":[{"name":"srcPtr_1","nodeType":"YulTypedName","src":"2650:8:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2698:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2709:1:181","type":"","value":"0"},"variables":[{"name":"i_1","nodeType":"YulTypedName","src":"2702:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2784:175:181","statements":[{"expression":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"2809:5:181"},{"arguments":[{"arguments":[{"name":"srcPtr_1","nodeType":"YulIdentifier","src":"2826:8:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2820:5:181"},"nodeType":"YulFunctionCall","src":"2820:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2841:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2846:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2837:3:181"},"nodeType":"YulFunctionCall","src":"2837:20:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2816:3:181"},"nodeType":"YulFunctionCall","src":"2816:42:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2802:6:181"},"nodeType":"YulFunctionCall","src":"2802:57:181"},"nodeType":"YulExpressionStatement","src":"2802:57:181"},{"nodeType":"YulAssignment","src":"2876:23:181","value":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"2889:5:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2896:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2885:3:181"},"nodeType":"YulFunctionCall","src":"2885:14:181"},"variableNames":[{"name":"pos_1","nodeType":"YulIdentifier","src":"2876:5:181"}]},{"nodeType":"YulAssignment","src":"2916:29:181","value":{"arguments":[{"name":"srcPtr_1","nodeType":"YulIdentifier","src":"2932:8:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2942:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2928:3:181"},"nodeType":"YulFunctionCall","src":"2928:17:181"},"variableNames":[{"name":"srcPtr_1","nodeType":"YulIdentifier","src":"2916:8:181"}]}]},"condition":{"arguments":[{"name":"i_1","nodeType":"YulIdentifier","src":"2734:3:181"},{"name":"length_1","nodeType":"YulIdentifier","src":"2739:8:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2731:2:181"},"nodeType":"YulFunctionCall","src":"2731:17:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2749:22:181","statements":[{"nodeType":"YulAssignment","src":"2751:18:181","value":{"arguments":[{"name":"i_1","nodeType":"YulIdentifier","src":"2762:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"2767:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2758:3:181"},"nodeType":"YulFunctionCall","src":"2758:11:181"},"variableNames":[{"name":"i_1","nodeType":"YulIdentifier","src":"2751:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"2727:3:181","statements":[]},"src":"2723:236:181"},{"nodeType":"YulAssignment","src":"2972:15:181","value":{"name":"pos_1","nodeType":"YulIdentifier","src":"2982:5:181"},"variableNames":[{"name":"tail_2","nodeType":"YulIdentifier","src":"2972:6:181"}]},{"nodeType":"YulAssignment","src":"3000:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"3014:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3022:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3010:3:181"},"nodeType":"YulFunctionCall","src":"3010:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"3000:6:181"}]},{"nodeType":"YulAssignment","src":"3038:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3049:3:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3054:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3045:3:181"},"nodeType":"YulFunctionCall","src":"3045:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"3038:3:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1829:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"1832:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1826:2:181"},"nodeType":"YulFunctionCall","src":"1826:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1840:18:181","statements":[{"nodeType":"YulAssignment","src":"1842:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1851:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"1854:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1847:3:181"},"nodeType":"YulFunctionCall","src":"1847:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"1842:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"1822:3:181","statements":[]},"src":"1818:1249:181"},{"expression":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3095:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3107:9:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3118:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3103:3:181"},"nodeType":"YulFunctionCall","src":"3103:18:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"3076:18:181"},"nodeType":"YulFunctionCall","src":"3076:46:181"},"nodeType":"YulExpressionStatement","src":"3076:46:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3142:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3153:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3138:3:181"},"nodeType":"YulFunctionCall","src":"3138:20:181"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"3164:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3172:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3160:3:181"},"nodeType":"YulFunctionCall","src":"3160:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3131:6:181"},"nodeType":"YulFunctionCall","src":"3131:52:181"},"nodeType":"YulExpressionStatement","src":"3131:52:181"},{"nodeType":"YulAssignment","src":"3192:40:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"3217:6:181"},{"name":"tail_2","nodeType":"YulIdentifier","src":"3225:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"3200:16:181"},"nodeType":"YulFunctionCall","src":"3200:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3192:4:181"}]}]},"name":"abi_encode_tuple_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1378:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1389:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1397:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1405:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1416:4:181","type":""}],"src":"1146:2092:181"},{"body":{"nodeType":"YulBlock","src":"3417:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3434:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3445:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3427:6:181"},"nodeType":"YulFunctionCall","src":"3427:21:181"},"nodeType":"YulExpressionStatement","src":"3427:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3468:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3479:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3464:3:181"},"nodeType":"YulFunctionCall","src":"3464:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3484:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3457:6:181"},"nodeType":"YulFunctionCall","src":"3457:30:181"},"nodeType":"YulExpressionStatement","src":"3457:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3507:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3518:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3503:3:181"},"nodeType":"YulFunctionCall","src":"3503:18:181"},{"hexValue":"4c69624469616d6f6e643a2064656c6179206e6f7420656c6170736564","kind":"string","nodeType":"YulLiteral","src":"3523:31:181","type":"","value":"LibDiamond: delay not elapsed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3496:6:181"},"nodeType":"YulFunctionCall","src":"3496:59:181"},"nodeType":"YulExpressionStatement","src":"3496:59:181"},{"nodeType":"YulAssignment","src":"3564:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3576:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3587:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3572:3:181"},"nodeType":"YulFunctionCall","src":"3572:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3564:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_bf74910c6b16e2fe967a9c2fd1df7451e7594bd2184362aed0a451068a63c3f3__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3394:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3408:4:181","type":""}],"src":"3243:353:181"},{"body":{"nodeType":"YulBlock","src":"3633:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3650:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3657:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"3662:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3653:3:181"},"nodeType":"YulFunctionCall","src":"3653:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3643:6:181"},"nodeType":"YulFunctionCall","src":"3643:31:181"},"nodeType":"YulExpressionStatement","src":"3643:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3690:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3693:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3683:6:181"},"nodeType":"YulFunctionCall","src":"3683:15:181"},"nodeType":"YulExpressionStatement","src":"3683:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3714:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3717:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3707:6:181"},"nodeType":"YulFunctionCall","src":"3707:15:181"},"nodeType":"YulExpressionStatement","src":"3707:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"3601:127:181"},{"body":{"nodeType":"YulBlock","src":"3907:229:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3924:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3935:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3917:6:181"},"nodeType":"YulFunctionCall","src":"3917:21:181"},"nodeType":"YulExpressionStatement","src":"3917:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3958:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3969:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3954:3:181"},"nodeType":"YulFunctionCall","src":"3954:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3974:2:181","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3947:6:181"},"nodeType":"YulFunctionCall","src":"3947:30:181"},"nodeType":"YulExpressionStatement","src":"3947:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3997:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4008:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3993:3:181"},"nodeType":"YulFunctionCall","src":"3993:18:181"},{"hexValue":"4c69624469616d6f6e644375743a20496e636f72726563742046616365744375","kind":"string","nodeType":"YulLiteral","src":"4013:34:181","type":"","value":"LibDiamondCut: Incorrect FacetCu"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3986:6:181"},"nodeType":"YulFunctionCall","src":"3986:62:181"},"nodeType":"YulExpressionStatement","src":"3986:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4068:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4079:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4064:3:181"},"nodeType":"YulFunctionCall","src":"4064:18:181"},{"hexValue":"74416374696f6e","kind":"string","nodeType":"YulLiteral","src":"4084:9:181","type":"","value":"tAction"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4057:6:181"},"nodeType":"YulFunctionCall","src":"4057:37:181"},"nodeType":"YulExpressionStatement","src":"4057:37:181"},{"nodeType":"YulAssignment","src":"4103:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4115:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4126:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4111:3:181"},"nodeType":"YulFunctionCall","src":"4111:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4103:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3884:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3898:4:181","type":""}],"src":"3733:403:181"},{"body":{"nodeType":"YulBlock","src":"4315:250:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4332:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4343:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4325:6:181"},"nodeType":"YulFunctionCall","src":"4325:21:181"},"nodeType":"YulExpressionStatement","src":"4325:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4366:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4377:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4362:3:181"},"nodeType":"YulFunctionCall","src":"4362:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4382:2:181","type":"","value":"60"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4355:6:181"},"nodeType":"YulFunctionCall","src":"4355:30:181"},"nodeType":"YulExpressionStatement","src":"4355:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4405:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4416:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4401:3:181"},"nodeType":"YulFunctionCall","src":"4401:18:181"},{"hexValue":"4c69624469616d6f6e644375743a205f696e6974206973206164647265737328","kind":"string","nodeType":"YulLiteral","src":"4421:34:181","type":"","value":"LibDiamondCut: _init is address("}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4394:6:181"},"nodeType":"YulFunctionCall","src":"4394:62:181"},"nodeType":"YulExpressionStatement","src":"4394:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4476:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4487:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4472:3:181"},"nodeType":"YulFunctionCall","src":"4472:18:181"},{"hexValue":"3029206275745f63616c6c64617461206973206e6f7420656d707479","kind":"string","nodeType":"YulLiteral","src":"4492:30:181","type":"","value":"0) but_calldata is not empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4465:6:181"},"nodeType":"YulFunctionCall","src":"4465:58:181"},"nodeType":"YulExpressionStatement","src":"4465:58:181"},{"nodeType":"YulAssignment","src":"4532:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4544:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4555:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4540:3:181"},"nodeType":"YulFunctionCall","src":"4540:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4532:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4292:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4306:4:181","type":""}],"src":"4141:424:181"},{"body":{"nodeType":"YulBlock","src":"4744:251:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4761:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4772:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4754:6:181"},"nodeType":"YulFunctionCall","src":"4754:21:181"},"nodeType":"YulExpressionStatement","src":"4754:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4795:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4806:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4791:3:181"},"nodeType":"YulFunctionCall","src":"4791:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4811:2:181","type":"","value":"61"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4784:6:181"},"nodeType":"YulFunctionCall","src":"4784:30:181"},"nodeType":"YulExpressionStatement","src":"4784:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4834:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4845:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4830:3:181"},"nodeType":"YulFunctionCall","src":"4830:18:181"},{"hexValue":"4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d7074","kind":"string","nodeType":"YulLiteral","src":"4850:34:181","type":"","value":"LibDiamondCut: _calldata is empt"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4823:6:181"},"nodeType":"YulFunctionCall","src":"4823:62:181"},"nodeType":"YulExpressionStatement","src":"4823:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4905:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4916:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4901:3:181"},"nodeType":"YulFunctionCall","src":"4901:18:181"},{"hexValue":"7920627574205f696e6974206973206e6f742061646472657373283029","kind":"string","nodeType":"YulLiteral","src":"4921:31:181","type":"","value":"y but _init is not address(0)"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4894:6:181"},"nodeType":"YulFunctionCall","src":"4894:59:181"},"nodeType":"YulExpressionStatement","src":"4894:59:181"},{"nodeType":"YulAssignment","src":"4962:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4974:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4985:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4970:3:181"},"nodeType":"YulFunctionCall","src":"4970:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4962:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4721:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4735:4:181","type":""}],"src":"4570:425:181"},{"body":{"nodeType":"YulBlock","src":"5137:150:181","statements":[{"nodeType":"YulVariableDeclaration","src":"5147:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5167:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5161:5:181"},"nodeType":"YulFunctionCall","src":"5161:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"5151:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5222:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5230:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5218:3:181"},"nodeType":"YulFunctionCall","src":"5218:17:181"},{"name":"pos","nodeType":"YulIdentifier","src":"5237:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"5242:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"5183:34:181"},"nodeType":"YulFunctionCall","src":"5183:66:181"},"nodeType":"YulExpressionStatement","src":"5183:66:181"},{"nodeType":"YulAssignment","src":"5258:23:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5269:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"5274:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5265:3:181"},"nodeType":"YulFunctionCall","src":"5265:16:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"5258:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"5113:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5118:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"5129:3:181","type":""}],"src":"5000:287:181"},{"body":{"nodeType":"YulBlock","src":"5413:98:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5430:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5441:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5423:6:181"},"nodeType":"YulFunctionCall","src":"5423:21:181"},"nodeType":"YulExpressionStatement","src":"5423:21:181"},{"nodeType":"YulAssignment","src":"5453:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5478:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5490:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5501:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5486:3:181"},"nodeType":"YulFunctionCall","src":"5486:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"5461:16:181"},"nodeType":"YulFunctionCall","src":"5461:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5453:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5382:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5393:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5404:4:181","type":""}],"src":"5292:219:181"},{"body":{"nodeType":"YulBlock","src":"5690:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5707:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5718:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5700:6:181"},"nodeType":"YulFunctionCall","src":"5700:21:181"},"nodeType":"YulExpressionStatement","src":"5700:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5741:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5752:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5737:3:181"},"nodeType":"YulFunctionCall","src":"5737:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5757:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5730:6:181"},"nodeType":"YulFunctionCall","src":"5730:30:181"},"nodeType":"YulExpressionStatement","src":"5730:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5780:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5791:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5776:3:181"},"nodeType":"YulFunctionCall","src":"5776:18:181"},{"hexValue":"4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e207265","kind":"string","nodeType":"YulLiteral","src":"5796:34:181","type":"","value":"LibDiamondCut: _init function re"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5769:6:181"},"nodeType":"YulFunctionCall","src":"5769:62:181"},"nodeType":"YulExpressionStatement","src":"5769:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5851:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5862:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5847:3:181"},"nodeType":"YulFunctionCall","src":"5847:18:181"},{"hexValue":"766572746564","kind":"string","nodeType":"YulLiteral","src":"5867:8:181","type":"","value":"verted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5840:6:181"},"nodeType":"YulFunctionCall","src":"5840:36:181"},"nodeType":"YulExpressionStatement","src":"5840:36:181"},{"nodeType":"YulAssignment","src":"5885:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5897:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5908:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5893:3:181"},"nodeType":"YulFunctionCall","src":"5893:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5885:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5667:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5681:4:181","type":""}],"src":"5516:402:181"},{"body":{"nodeType":"YulBlock","src":"6097:233:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6114:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6125:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6107:6:181"},"nodeType":"YulFunctionCall","src":"6107:21:181"},"nodeType":"YulExpressionStatement","src":"6107:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6148:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6159:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6144:3:181"},"nodeType":"YulFunctionCall","src":"6144:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6164:2:181","type":"","value":"43"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6137:6:181"},"nodeType":"YulFunctionCall","src":"6137:30:181"},"nodeType":"YulExpressionStatement","src":"6137:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6187:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6198:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6183:3:181"},"nodeType":"YulFunctionCall","src":"6183:18:181"},{"hexValue":"4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e2066","kind":"string","nodeType":"YulLiteral","src":"6203:34:181","type":"","value":"LibDiamondCut: No selectors in f"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6176:6:181"},"nodeType":"YulFunctionCall","src":"6176:62:181"},"nodeType":"YulExpressionStatement","src":"6176:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6258:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6269:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6254:3:181"},"nodeType":"YulFunctionCall","src":"6254:18:181"},{"hexValue":"6163657420746f20637574","kind":"string","nodeType":"YulLiteral","src":"6274:13:181","type":"","value":"acet to cut"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6247:6:181"},"nodeType":"YulFunctionCall","src":"6247:41:181"},"nodeType":"YulExpressionStatement","src":"6247:41:181"},{"nodeType":"YulAssignment","src":"6297:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6309:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6320:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6305:3:181"},"nodeType":"YulFunctionCall","src":"6305:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6297:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6074:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6088:4:181","type":""}],"src":"5923:407:181"},{"body":{"nodeType":"YulBlock","src":"6509:234:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6526:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6537:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6519:6:181"},"nodeType":"YulFunctionCall","src":"6519:21:181"},"nodeType":"YulExpressionStatement","src":"6519:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6560:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6571:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6556:3:181"},"nodeType":"YulFunctionCall","src":"6556:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6576:2:181","type":"","value":"44"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6549:6:181"},"nodeType":"YulFunctionCall","src":"6549:30:181"},"nodeType":"YulExpressionStatement","src":"6549:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6599:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6610:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6595:3:181"},"nodeType":"YulFunctionCall","src":"6595:18:181"},{"hexValue":"4c69624469616d6f6e644375743a204164642066616365742063616e27742062","kind":"string","nodeType":"YulLiteral","src":"6615:34:181","type":"","value":"LibDiamondCut: Add facet can't b"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6588:6:181"},"nodeType":"YulFunctionCall","src":"6588:62:181"},"nodeType":"YulExpressionStatement","src":"6588:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6670:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6681:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6666:3:181"},"nodeType":"YulFunctionCall","src":"6666:18:181"},{"hexValue":"652061646472657373283029","kind":"string","nodeType":"YulLiteral","src":"6686:14:181","type":"","value":"e address(0)"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6659:6:181"},"nodeType":"YulFunctionCall","src":"6659:42:181"},"nodeType":"YulExpressionStatement","src":"6659:42:181"},{"nodeType":"YulAssignment","src":"6710:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6722:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6733:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6718:3:181"},"nodeType":"YulFunctionCall","src":"6718:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6710:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6486:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6500:4:181","type":""}],"src":"6335:408:181"},{"body":{"nodeType":"YulBlock","src":"6922:243:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6939:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6950:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6932:6:181"},"nodeType":"YulFunctionCall","src":"6932:21:181"},"nodeType":"YulExpressionStatement","src":"6932:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6973:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6984:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6969:3:181"},"nodeType":"YulFunctionCall","src":"6969:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6989:2:181","type":"","value":"53"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6962:6:181"},"nodeType":"YulFunctionCall","src":"6962:30:181"},"nodeType":"YulExpressionStatement","src":"6962:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7012:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7023:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7008:3:181"},"nodeType":"YulFunctionCall","src":"7008:18:181"},{"hexValue":"4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f","kind":"string","nodeType":"YulLiteral","src":"7028:34:181","type":"","value":"LibDiamondCut: Can't add functio"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7001:6:181"},"nodeType":"YulFunctionCall","src":"7001:62:181"},"nodeType":"YulExpressionStatement","src":"7001:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7083:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7094:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7079:3:181"},"nodeType":"YulFunctionCall","src":"7079:18:181"},{"hexValue":"6e207468617420616c726561647920657869737473","kind":"string","nodeType":"YulLiteral","src":"7099:23:181","type":"","value":"n that already exists"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7072:6:181"},"nodeType":"YulFunctionCall","src":"7072:51:181"},"nodeType":"YulExpressionStatement","src":"7072:51:181"},{"nodeType":"YulAssignment","src":"7132:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7144:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7155:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7140:3:181"},"nodeType":"YulFunctionCall","src":"7140:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7132:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6899:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6913:4:181","type":""}],"src":"6748:417:181"},{"body":{"nodeType":"YulBlock","src":"7202:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7219:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7226:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"7231:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7222:3:181"},"nodeType":"YulFunctionCall","src":"7222:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7212:6:181"},"nodeType":"YulFunctionCall","src":"7212:31:181"},"nodeType":"YulExpressionStatement","src":"7212:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7259:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7262:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7252:6:181"},"nodeType":"YulFunctionCall","src":"7252:15:181"},"nodeType":"YulExpressionStatement","src":"7252:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7283:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7286:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7276:6:181"},"nodeType":"YulFunctionCall","src":"7276:15:181"},"nodeType":"YulExpressionStatement","src":"7276:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"7170:127:181"},{"body":{"nodeType":"YulBlock","src":"7348:171:181","statements":[{"nodeType":"YulVariableDeclaration","src":"7358:36:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7368:26:181","type":"","value":"0xffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7362:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7403:29:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7422:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7429:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7418:3:181"},"nodeType":"YulFunctionCall","src":"7418:14:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7407:7:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7460:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7462:16:181"},"nodeType":"YulFunctionCall","src":"7462:18:181"},"nodeType":"YulExpressionStatement","src":"7462:18:181"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7447:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7456:2:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"7444:2:181"},"nodeType":"YulFunctionCall","src":"7444:15:181"},"nodeType":"YulIf","src":"7441:41:181"},{"nodeType":"YulAssignment","src":"7491:22:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7502:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"7511:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7498:3:181"},"nodeType":"YulFunctionCall","src":"7498:15:181"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"7491:3:181"}]}]},"name":"increment_t_uint96","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"7330:5:181","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"7340:3:181","type":""}],"src":"7302:217:181"},{"body":{"nodeType":"YulBlock","src":"7698:246:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7715:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7726:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7708:6:181"},"nodeType":"YulFunctionCall","src":"7708:21:181"},"nodeType":"YulExpressionStatement","src":"7708:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7749:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7760:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7745:3:181"},"nodeType":"YulFunctionCall","src":"7745:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7765:2:181","type":"","value":"56"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7738:6:181"},"nodeType":"YulFunctionCall","src":"7738:30:181"},"nodeType":"YulExpressionStatement","src":"7738:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7788:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7799:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7784:3:181"},"nodeType":"YulFunctionCall","src":"7784:18:181"},{"hexValue":"4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e","kind":"string","nodeType":"YulLiteral","src":"7804:34:181","type":"","value":"LibDiamondCut: Can't replace fun"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7777:6:181"},"nodeType":"YulFunctionCall","src":"7777:62:181"},"nodeType":"YulExpressionStatement","src":"7777:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7859:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7870:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7855:3:181"},"nodeType":"YulFunctionCall","src":"7855:18:181"},{"hexValue":"6374696f6e20776974682073616d652066756e6374696f6e","kind":"string","nodeType":"YulLiteral","src":"7875:26:181","type":"","value":"ction with same function"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7848:6:181"},"nodeType":"YulFunctionCall","src":"7848:54:181"},"nodeType":"YulExpressionStatement","src":"7848:54:181"},{"nodeType":"YulAssignment","src":"7911:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7923:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7934:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7919:3:181"},"nodeType":"YulFunctionCall","src":"7919:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7911:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7675:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7689:4:181","type":""}],"src":"7524:420:181"},{"body":{"nodeType":"YulBlock","src":"8123:244:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8140:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8151:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8133:6:181"},"nodeType":"YulFunctionCall","src":"8133:21:181"},"nodeType":"YulExpressionStatement","src":"8133:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8174:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8185:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8170:3:181"},"nodeType":"YulFunctionCall","src":"8170:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8190:2:181","type":"","value":"54"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8163:6:181"},"nodeType":"YulFunctionCall","src":"8163:30:181"},"nodeType":"YulExpressionStatement","src":"8163:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8213:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8224:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8209:3:181"},"nodeType":"YulFunctionCall","src":"8209:18:181"},{"hexValue":"4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472","kind":"string","nodeType":"YulLiteral","src":"8229:34:181","type":"","value":"LibDiamondCut: Remove facet addr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8202:6:181"},"nodeType":"YulFunctionCall","src":"8202:62:181"},"nodeType":"YulExpressionStatement","src":"8202:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8284:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8295:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8280:3:181"},"nodeType":"YulFunctionCall","src":"8280:18:181"},{"hexValue":"657373206d7573742062652061646472657373283029","kind":"string","nodeType":"YulLiteral","src":"8300:24:181","type":"","value":"ess must be address(0)"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8273:6:181"},"nodeType":"YulFunctionCall","src":"8273:52:181"},"nodeType":"YulExpressionStatement","src":"8273:52:181"},{"nodeType":"YulAssignment","src":"8334:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8346:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8357:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8342:3:181"},"nodeType":"YulFunctionCall","src":"8342:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8334:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8100:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8114:4:181","type":""}],"src":"7949:418:181"},{"body":{"nodeType":"YulBlock","src":"8546:232:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8563:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8574:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8556:6:181"},"nodeType":"YulFunctionCall","src":"8556:21:181"},"nodeType":"YulExpressionStatement","src":"8556:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8597:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8608:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8593:3:181"},"nodeType":"YulFunctionCall","src":"8593:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8613:2:181","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8586:6:181"},"nodeType":"YulFunctionCall","src":"8586:30:181"},"nodeType":"YulExpressionStatement","src":"8586:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8636:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8647:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8632:3:181"},"nodeType":"YulFunctionCall","src":"8632:18:181"},{"hexValue":"4c69624469616d6f6e644375743a2043616e6e6f742072656d6f766520637574","kind":"string","nodeType":"YulLiteral","src":"8652:34:181","type":"","value":"LibDiamondCut: Cannot remove cut"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8625:6:181"},"nodeType":"YulFunctionCall","src":"8625:62:181"},"nodeType":"YulExpressionStatement","src":"8625:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8707:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8718:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8703:3:181"},"nodeType":"YulFunctionCall","src":"8703:18:181"},{"hexValue":"2073656c6563746f7273","kind":"string","nodeType":"YulLiteral","src":"8723:12:181","type":"","value":" selectors"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8696:6:181"},"nodeType":"YulFunctionCall","src":"8696:40:181"},"nodeType":"YulExpressionStatement","src":"8696:40:181"},{"nodeType":"YulAssignment","src":"8745:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8757:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8768:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8753:3:181"},"nodeType":"YulFunctionCall","src":"8753:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8745:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_6dc3f1dab50ff21fc15088aa16d05815257e5abe70c54939829f018f001302c3__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8523:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8537:4:181","type":""}],"src":"8372:406:181"},{"body":{"nodeType":"YulBlock","src":"8957:245:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8974:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8985:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8967:6:181"},"nodeType":"YulFunctionCall","src":"8967:21:181"},"nodeType":"YulExpressionStatement","src":"8967:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9008:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9019:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9004:3:181"},"nodeType":"YulFunctionCall","src":"9004:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9024:2:181","type":"","value":"55"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8997:6:181"},"nodeType":"YulFunctionCall","src":"8997:30:181"},"nodeType":"YulExpressionStatement","src":"8997:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9047:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9058:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9043:3:181"},"nodeType":"YulFunctionCall","src":"9043:18:181"},{"hexValue":"4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e63","kind":"string","nodeType":"YulLiteral","src":"9063:34:181","type":"","value":"LibDiamondCut: Can't remove func"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9036:6:181"},"nodeType":"YulFunctionCall","src":"9036:62:181"},"nodeType":"YulExpressionStatement","src":"9036:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9118:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9129:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9114:3:181"},"nodeType":"YulFunctionCall","src":"9114:18:181"},{"hexValue":"74696f6e207468617420646f65736e2774206578697374","kind":"string","nodeType":"YulLiteral","src":"9134:25:181","type":"","value":"tion that doesn't exist"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9107:6:181"},"nodeType":"YulFunctionCall","src":"9107:53:181"},"nodeType":"YulExpressionStatement","src":"9107:53:181"},{"nodeType":"YulAssignment","src":"9169:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9181:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9192:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9177:3:181"},"nodeType":"YulFunctionCall","src":"9177:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9169:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8934:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8948:4:181","type":""}],"src":"8783:419:181"},{"body":{"nodeType":"YulBlock","src":"9381:236:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9398:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9409:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9391:6:181"},"nodeType":"YulFunctionCall","src":"9391:21:181"},"nodeType":"YulExpressionStatement","src":"9391:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9432:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9443:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9428:3:181"},"nodeType":"YulFunctionCall","src":"9428:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9448:2:181","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9421:6:181"},"nodeType":"YulFunctionCall","src":"9421:30:181"},"nodeType":"YulExpressionStatement","src":"9421:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9471:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9482:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9467:3:181"},"nodeType":"YulFunctionCall","src":"9467:18:181"},{"hexValue":"4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d75","kind":"string","nodeType":"YulLiteral","src":"9487:34:181","type":"","value":"LibDiamondCut: Can't remove immu"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9460:6:181"},"nodeType":"YulFunctionCall","src":"9460:62:181"},"nodeType":"YulExpressionStatement","src":"9460:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9542:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9553:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9538:3:181"},"nodeType":"YulFunctionCall","src":"9538:18:181"},{"hexValue":"7461626c652066756e6374696f6e","kind":"string","nodeType":"YulLiteral","src":"9558:16:181","type":"","value":"table function"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9531:6:181"},"nodeType":"YulFunctionCall","src":"9531:44:181"},"nodeType":"YulExpressionStatement","src":"9531:44:181"},{"nodeType":"YulAssignment","src":"9584:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9596:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9607:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9592:3:181"},"nodeType":"YulFunctionCall","src":"9592:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9584:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9358:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9372:4:181","type":""}],"src":"9207:410:181"},{"body":{"nodeType":"YulBlock","src":"9671:79:181","statements":[{"nodeType":"YulAssignment","src":"9681:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9693:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"9696:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9689:3:181"},"nodeType":"YulFunctionCall","src":"9689:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"9681:4:181"}]},{"body":{"nodeType":"YulBlock","src":"9722:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"9724:16:181"},"nodeType":"YulFunctionCall","src":"9724:18:181"},"nodeType":"YulExpressionStatement","src":"9724:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"9713:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"9719:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9710:2:181"},"nodeType":"YulFunctionCall","src":"9710:11:181"},"nodeType":"YulIf","src":"9707:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"9653:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"9656:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"9662:4:181","type":""}],"src":"9622:128:181"},{"body":{"nodeType":"YulBlock","src":"9787:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9804:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9811:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"9816:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9807:3:181"},"nodeType":"YulFunctionCall","src":"9807:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9797:6:181"},"nodeType":"YulFunctionCall","src":"9797:31:181"},"nodeType":"YulExpressionStatement","src":"9797:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9844:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"9847:4:181","type":"","value":"0x31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9837:6:181"},"nodeType":"YulFunctionCall","src":"9837:15:181"},"nodeType":"YulExpressionStatement","src":"9837:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9868:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9871:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9861:6:181"},"nodeType":"YulFunctionCall","src":"9861:15:181"},"nodeType":"YulExpressionStatement","src":"9861:15:181"}]},"name":"panic_error_0x31","nodeType":"YulFunctionDefinition","src":"9755:127:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_stringliteral_6e6486aeb9db70da259b7171a739046119facaec2d8a6bd46f1145fe8391014a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Diamond: Function does not exist\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, sub(shl(160, 1), 1)))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$26861_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        let _1 := 96\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        let _2 := 128\n        pos := add(headStart, _2)\n        let tail_2 := add(add(headStart, shl(5, length)), _2)\n        let _3 := 0x20\n        let srcPtr := add(value0, _3)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, add(sub(tail_2, headStart), not(127)))\n            let _4 := mload(srcPtr)\n            let tail_3 := add(tail_2, _1)\n            mstore(tail_2, and(mload(_4), sub(shl(160, 1), 1)))\n            let memberValue0 := mload(add(_4, _3))\n            if iszero(lt(memberValue0, 3))\n            {\n                mstore(0, shl(224, 0x4e487b71))\n                mstore(4, 0x21)\n                revert(0, 0x24)\n            }\n            mstore(add(tail_2, _3), memberValue0)\n            let _5 := 0x40\n            let memberValue0_1 := mload(add(_4, _5))\n            mstore(add(tail_2, _5), _1)\n            let pos_1 := tail_3\n            let length_1 := mload(memberValue0_1)\n            mstore(tail_3, length_1)\n            pos_1 := add(tail_2, _2)\n            let srcPtr_1 := add(memberValue0_1, _3)\n            let i_1 := 0\n            for { } lt(i_1, length_1) { i_1 := add(i_1, 1) }\n            {\n                mstore(pos_1, and(mload(srcPtr_1), shl(224, 0xffffffff)))\n                pos_1 := add(pos_1, _3)\n                srcPtr_1 := add(srcPtr_1, _3)\n            }\n            tail_2 := pos_1\n            srcPtr := add(srcPtr, _3)\n            pos := add(pos, _3)\n        }\n        abi_encode_address(value1, add(headStart, _3))\n        mstore(add(headStart, 0x40), sub(tail_2, headStart))\n        tail := abi_encode_bytes(value2, tail_2)\n    }\n    function abi_encode_tuple_t_stringliteral_bf74910c6b16e2fe967a9c2fd1df7451e7594bd2184362aed0a451068a63c3f3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"LibDiamond: delay not elapsed\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"LibDiamondCut: Incorrect FacetCu\")\n        mstore(add(headStart, 96), \"tAction\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 60)\n        mstore(add(headStart, 64), \"LibDiamondCut: _init is address(\")\n        mstore(add(headStart, 96), \"0) but_calldata is not empty\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 61)\n        mstore(add(headStart, 64), \"LibDiamondCut: _calldata is empt\")\n        mstore(add(headStart, 96), \"y but _init is not address(0)\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"LibDiamondCut: _init function re\")\n        mstore(add(headStart, 96), \"verted\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 43)\n        mstore(add(headStart, 64), \"LibDiamondCut: No selectors in f\")\n        mstore(add(headStart, 96), \"acet to cut\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 44)\n        mstore(add(headStart, 64), \"LibDiamondCut: Add facet can't b\")\n        mstore(add(headStart, 96), \"e address(0)\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 53)\n        mstore(add(headStart, 64), \"LibDiamondCut: Can't add functio\")\n        mstore(add(headStart, 96), \"n that already exists\")\n        tail := add(headStart, 128)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function increment_t_uint96(value) -> ret\n    {\n        let _1 := 0xffffffffffffffffffffffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 56)\n        mstore(add(headStart, 64), \"LibDiamondCut: Can't replace fun\")\n        mstore(add(headStart, 96), \"ction with same function\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"LibDiamondCut: Remove facet addr\")\n        mstore(add(headStart, 96), \"ess must be address(0)\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_6dc3f1dab50ff21fc15088aa16d05815257e5abe70c54939829f018f001302c3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"LibDiamondCut: Cannot remove cut\")\n        mstore(add(headStart, 96), \" selectors\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 55)\n        mstore(add(headStart, 64), \"LibDiamondCut: Can't remove func\")\n        mstore(add(headStart, 96), \"tion that doesn't exist\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"LibDiamondCut: Can't remove immu\")\n        mstore(add(headStart, 96), \"table function\")\n        tail := add(headStart, 128)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"60806040523661000b57005b600080356001600160e01b031916815260008051602061128a833981519152602081905260409091205481906001600160a01b0316806100925760405162461bcd60e51b815260206004820181905260248201527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f7420657869737460448201526064015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156100b1573d6000f35b3d6000fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205460405160008051602061128a833981519152916001600160a01b03848116929116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360040180546001600160a01b0319166001600160a01b0392909216919091179055565b60405160008051602061128a8339815191529060009061016b9086908690869060200161103b565b60408051601f19818403018152919052805160209091012060028301549091501561020f57600081815260058301602052604090205480158015906101b05750428111155b6101fc5760405162461bcd60e51b815260206004820152601d60248201527f4c69624469616d6f6e643a2064656c6179206e6f7420656c61707365640000006044820152606401610089565b5060008181526005830160205260408120555b845160005b818110156103cc5760008782815181106102305761023061113b565b60200260200101516020015190506000600281111561025157610251610fd5565b81600281111561026357610263610fd5565b036102b1576102ac88838151811061027d5761027d61113b565b60200260200101516000015189848151811061029b5761029b61113b565b60200260200101516040015161062d565b6103c3565b60018160028111156102c5576102c5610fd5565b0361030e576102ac8883815181106102df576102df61113b565b6020026020010151600001518984815181106102fd576102fd61113b565b60200260200101516040015161079e565b600281600281111561032257610322610fd5565b0361036b576102ac88838151811061033c5761033c61113b565b60200260200101516000015189848151811061035a5761035a61113b565b602002602001015160400151610927565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b6064820152608401610089565b50600101610214565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738686866040516104009392919061103b565b60405180910390a1610412858561041a565b505050505050565b6001600160a01b0382166104a15780511561049d5760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d707479000000006064820152608401610089565b5050565b80516000036105185760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f7420616464726573732830290000006064820152608401610089565b6001600160a01b038216301461054a5761054a826040518060600160405280602881526020016112aa60289139610ad9565b600080836001600160a01b0316836040516105659190611151565b600060405180830381855af49150503d80600081146105a0576040519150601f19603f3d011682016040523d82523d6000602084013e6105a5565b606091505b509150915081610627578051156105d0578060405162461bcd60e51b8152600401610089919061116d565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656044820152651d995c9d195960d21b6064820152608401610089565b50505050565b805160000361064e5760405162461bcd60e51b815260040161008990611187565b60008051602061128a8339815191526001600160a01b0383166106835760405162461bcd60e51b8152600401610089906111d2565b6001600160a01b0383166000908152600182016020526040812054906001600160601b03821690036106b9576106b98285610b07565b825160005b818110156104125760008582815181106106da576106da61113b565b6020908102919091018101516001600160e01b031981166000908152918790526040909120549091506001600160a01b031680156107785760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6044820152746e207468617420616c72656164792065786973747360581b6064820152608401610089565b6107848683878b610b71565b8461078e81611234565b95505082600101925050506106be565b805160008190036107c15760405162461bcd60e51b815260040161008990611187565b60008051602061128a8339815191526001600160a01b0384166107f65760405162461bcd60e51b8152600401610089906111d2565b6001600160a01b0384166000908152600182016020526040812054906001600160601b038216900361082c5761082c8286610b07565b60005b8381101561041257600085828151811061084b5761084b61113b565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0390811690881681036108f65760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e00000000000000006064820152608401610089565b610901858284610c11565b61090d8583868b610b71565b8361091781611234565b945050826001019250505061082f565b80516000036109485760405162461bcd60e51b815260040161008990611187565b60008051602061128a833981519152635df91ac760e11b6307e4c70760e21b6001600160a01b038516156109dd5760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472604482015275657373206d757374206265206164647265737328302960501b6064820152608401610089565b835160005b81811015610ad05760008682815181106109fe576109fe61113b565b60200260200101519050846001600160e01b031916816001600160e01b03191614158015610a3957506001600160e01b031981811690851614155b610a985760405162461bcd60e51b815260206004820152602a60248201527f4c69624469616d6f6e644375743a2043616e6e6f742072656d6f7665206375746044820152692073656c6563746f727360b01b6064820152608401610089565b6001600160e01b031981166000908152602087905260409020546001600160a01b0316610ac6878284610c11565b50506001016109e2565b50505050505050565b806001600160a01b0383163b610b025760405162461bcd60e51b8152600401610089919061116d565b505050565b610b29816040518060600160405280602481526020016112d260249139610ad9565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160e01b0319831660008181526020868152604080832080546001600160601b03909716600160a01b026001600160a01b0397881617815594909516808352600180890183529583208054968701815583528183206008870401805460e09890981c60046007909816979097026101000a96870263ffffffff9097021990971695909517909555529290915281546001600160a01b031916179055565b6001600160a01b038216610c8d5760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e27742065786973740000000000000000006064820152608401610089565b306001600160a01b03831603610cfc5760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b6064820152608401610089565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b03169291610d4b9161125a565b9050808214610e3d576001600160a01b03841660009081526001860160205260408120805483908110610d8057610d8061113b565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b925082919085908110610dd157610dd161113b565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b03841660009081526001860160205260409020805480610e6657610e66611273565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b03198516825286905260408120819055819003610fce576002850154600090610ec99060019061125a565b6001600160a01b0386166000908152600180890160205260409091200154909150808214610f78576000876002018381548110610f0857610f0861113b565b6000918252602090912001546002890180546001600160a01b039092169250829184908110610f3957610f3961113b565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b86600201805480610f8b57610f8b611273565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505b5050505050565b634e487b7160e01b600052602160045260246000fd5b60005b83811015611006578181015183820152602001610fee565b50506000910152565b60008151808452611027816020860160208601610feb565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b8481101561110b57898403607f19018652815180516001600160a01b031685528381015189860190600381106110aa57634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b808310156110f65783516001600160e01b03191682529286019260019290920191908601906110cc565b50978501979550505090820190600101611064565b50506001600160a01b038a1690880152868103604088015261112d818961100f565b9a9950505050505050505050565b634e487b7160e01b600052603260045260246000fd5b60008251611163818460208701610feb565b9190910192915050565b602081526000611180602083018461100f565b9392505050565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160601b038083168181036112505761125061121e565b6001019392505050565b8181038181111561126d5761126d61121e565b92915050565b634e487b7160e01b600052603160045260246000fdfec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a26469706673582212203b1f4ed65a6bab0f6c2f33b7eaa1e2b892847a6c215922d52116d1d72f8895c164736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0xB JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x128A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0x92 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4469616D6F6E643A2046756E6374696F6E20646F6573206E6F74206578697374 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0xB1 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x128A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP3 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0x4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x128A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x16B SWAP1 DUP7 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x20 ADD PUSH2 0x103B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 PUSH1 0x2 DUP4 ADD SLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x20F JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1B0 JUMPI POP TIMESTAMP DUP2 GT ISZERO JUMPDEST PUSH2 0x1FC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A2064656C6179206E6F7420656C6170736564000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x89 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMPDEST DUP5 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3CC JUMPI PUSH1 0x0 DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x230 JUMPI PUSH2 0x230 PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x251 JUMPI PUSH2 0x251 PUSH2 0xFD5 JUMP JUMPDEST DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x263 JUMPI PUSH2 0x263 PUSH2 0xFD5 JUMP JUMPDEST SUB PUSH2 0x2B1 JUMPI PUSH2 0x2AC DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x27D JUMPI PUSH2 0x27D PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x29B JUMPI PUSH2 0x29B PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x62D JUMP JUMPDEST PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2C5 JUMPI PUSH2 0x2C5 PUSH2 0xFD5 JUMP JUMPDEST SUB PUSH2 0x30E JUMPI PUSH2 0x2AC DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2DF JUMPI PUSH2 0x2DF PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2FD JUMPI PUSH2 0x2FD PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x79E JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x322 JUMPI PUSH2 0x322 PUSH2 0xFD5 JUMP JUMPDEST SUB PUSH2 0x36B JUMPI PUSH2 0x2AC DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x33C JUMPI PUSH2 0x33C PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x35A JUMPI PUSH2 0x35A PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x927 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A20496E636F72726563742046616365744375 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x3A20B1BA34B7B7 PUSH1 0xC9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x214 JUMP JUMPDEST POP PUSH32 0x8FAA70878671CCD212D20771B795C50AF8FD3FF6CF27F4BDE57E5D4DE0AEB673 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x400 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x103B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x412 DUP6 DUP6 PUSH2 0x41A JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x4A1 JUMPI DUP1 MLOAD ISZERO PUSH2 0x49D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E6974206973206164647265737328 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3029206275745F63616C6C64617461206973206E6F7420656D70747900000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0x518 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F63616C6C6461746120697320656D7074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7920627574205F696E6974206973206E6F742061646472657373283029000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADDRESS EQ PUSH2 0x54A JUMPI PUSH2 0x54A DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12AA PUSH1 0x28 SWAP2 CODECOPY PUSH2 0xAD9 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x565 SWAP2 SWAP1 PUSH2 0x1151 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x5A0 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x5A5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x627 JUMPI DUP1 MLOAD ISZERO PUSH2 0x5D0 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x89 SWAP2 SWAP1 PUSH2 0x116D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E69742066756E6374696F6E207265 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1D995C9D1959 PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0x64E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x89 SWAP1 PUSH2 0x1187 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x128A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x683 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x89 SWAP1 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND SWAP1 SUB PUSH2 0x6B9 JUMPI PUSH2 0x6B9 DUP3 DUP6 PUSH2 0xB07 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x412 JUMPI PUSH1 0x0 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x6DA JUMPI PUSH2 0x6DA PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP8 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x778 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774206164642066756E6374696F PUSH1 0x44 DUP3 ADD MSTORE PUSH21 0x6E207468617420616C726561647920657869737473 PUSH1 0x58 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST PUSH2 0x784 DUP7 DUP4 DUP8 DUP12 PUSH2 0xB71 JUMP JUMPDEST DUP5 PUSH2 0x78E DUP2 PUSH2 0x1234 JUMP JUMPDEST SWAP6 POP POP DUP3 PUSH1 0x1 ADD SWAP3 POP POP POP PUSH2 0x6BE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 DUP2 SWAP1 SUB PUSH2 0x7C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x89 SWAP1 PUSH2 0x1187 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x128A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x7F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x89 SWAP1 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND SWAP1 SUB PUSH2 0x82C JUMPI PUSH2 0x82C DUP3 DUP7 PUSH2 0xB07 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x412 JUMPI PUSH1 0x0 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x84B JUMPI PUSH2 0x84B PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP9 AND DUP2 SUB PUSH2 0x8F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x38 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774207265706C6163652066756E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6374696F6E20776974682073616D652066756E6374696F6E0000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST PUSH2 0x901 DUP6 DUP3 DUP5 PUSH2 0xC11 JUMP JUMPDEST PUSH2 0x90D DUP6 DUP4 DUP7 DUP12 PUSH2 0xB71 JUMP JUMPDEST DUP4 PUSH2 0x917 DUP2 PUSH2 0x1234 JUMP JUMPDEST SWAP5 POP POP DUP3 PUSH1 0x1 ADD SWAP3 POP POP POP PUSH2 0x82F JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0x948 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x89 SWAP1 PUSH2 0x1187 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x128A DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH4 0x5DF91AC7 PUSH1 0xE1 SHL PUSH4 0x7E4C707 PUSH1 0xE2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND ISZERO PUSH2 0x9DD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2052656D6F76652066616365742061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH22 0x657373206D7573742062652061646472657373283029 PUSH1 0x50 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAD0 JUMPI PUSH1 0x0 DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9FE JUMPI PUSH2 0x9FE PUSH2 0x113B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND EQ ISZERO DUP1 ISZERO PUSH2 0xA39 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 DUP2 AND SWAP1 DUP6 AND EQ ISZERO JUMPDEST PUSH2 0xA98 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E6E6F742072656D6F766520637574 PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x2073656C6563746F7273 PUSH1 0xB0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xAC6 DUP8 DUP3 DUP5 PUSH2 0xC11 JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x9E2 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE PUSH2 0xB02 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x89 SWAP2 SWAP1 PUSH2 0x116D JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xB29 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12D2 PUSH1 0x24 SWAP2 CODECOPY PUSH2 0xAD9 JUMP JUMPDEST PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP5 DUP6 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP7 ADD DUP6 SWAP1 SSTORE SWAP5 DUP5 ADD DUP4 SSTORE SWAP2 DUP3 MSTORE SWAP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP7 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP8 AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 DUP9 AND OR DUP2 SSTORE SWAP5 SWAP1 SWAP6 AND DUP1 DUP4 MSTORE PUSH1 0x1 DUP1 DUP10 ADD DUP4 MSTORE SWAP6 DUP4 KECCAK256 DUP1 SLOAD SWAP7 DUP8 ADD DUP2 SSTORE DUP4 MSTORE DUP2 DUP4 KECCAK256 PUSH1 0x8 DUP8 DIV ADD DUP1 SLOAD PUSH1 0xE0 SWAP9 SWAP1 SWAP9 SHR PUSH1 0x4 PUSH1 0x7 SWAP1 SWAP9 AND SWAP8 SWAP1 SWAP8 MUL PUSH2 0x100 EXP SWAP7 DUP8 MUL PUSH4 0xFFFFFFFF SWAP1 SWAP8 MUL NOT SWAP1 SWAP8 AND SWAP6 SWAP1 SWAP6 OR SWAP1 SWAP6 SSTORE MSTORE SWAP3 SWAP1 SWAP2 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xC8D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F76652066756E63 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74696F6E207468617420646F65736E2774206578697374000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SUB PUSH2 0xCFC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F766520696D6D75 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x3A30B1363290333AB731BA34B7B7 PUSH1 0x91 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x89 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 ADD SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP3 SWAP2 PUSH2 0xD4B SWAP2 PUSH2 0x125A JUMP JUMPDEST SWAP1 POP DUP1 DUP3 EQ PUSH2 0xE3D JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH2 0xD80 JUMPI PUSH2 0xD80 PUSH2 0x113B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP5 MSTORE PUSH1 0x1 DUP11 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0x7 SWAP1 SWAP3 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP1 SWAP3 DIV PUSH1 0xE0 SHL SWAP3 POP DUP3 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0xDD1 JUMPI PUSH2 0xDD1 PUSH2 0x113B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP5 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP4 DUP5 MUL NOT AND PUSH1 0xE0 SWAP6 SWAP1 SWAP6 SHR SWAP3 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP6 AND MUL OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP1 PUSH2 0xE66 JUMPI PUSH2 0xE66 PUSH2 0x1273 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x8 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x4 PUSH1 0x7 DUP8 AND MUL PUSH2 0x100 EXP MUL NOT AND SWAP1 SSTORE SWAP2 SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP6 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 SSTORE DUP2 SWAP1 SUB PUSH2 0xFCE JUMPI PUSH1 0x2 DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0xEC9 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x125A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP1 DUP10 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 SWAP2 POP DUP1 DUP3 EQ PUSH2 0xF78 JUMPI PUSH1 0x0 DUP8 PUSH1 0x2 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0xF08 JUMPI PUSH2 0xF08 PUSH2 0x113B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP10 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0xF39 JUMPI PUSH2 0xF39 PUSH2 0x113B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 ADD DUP2 SWAP1 SSTORE JUMPDEST DUP7 PUSH1 0x2 ADD DUP1 SLOAD DUP1 PUSH2 0xF8B JUMPI PUSH2 0xF8B PUSH2 0x1273 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH1 0x0 NOT SWAP1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP3 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SSTORE POP POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1006 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xFEE JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1027 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xFEB JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP8 MLOAD DUP1 DUP4 MSTORE PUSH1 0x80 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD PUSH1 0x20 DUP1 DUP12 ADD PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x110B JUMPI DUP10 DUP5 SUB PUSH1 0x7F NOT ADD DUP7 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE DUP4 DUP2 ADD MLOAD DUP10 DUP7 ADD SWAP1 PUSH1 0x3 DUP2 LT PUSH2 0x10AA JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP7 DUP7 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD SWAP2 DUP7 ADD DUP11 SWAP1 MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 DUP5 ADD SWAP1 PUSH1 0x0 SWAP1 DUP10 DUP8 ADD SWAP1 JUMPDEST DUP1 DUP4 LT ISZERO PUSH2 0x10F6 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP3 MSTORE SWAP3 DUP7 ADD SWAP3 PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH2 0x10CC JUMP JUMPDEST POP SWAP8 DUP6 ADD SWAP8 SWAP6 POP POP POP SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1064 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP1 DUP9 ADD MSTORE DUP7 DUP2 SUB PUSH1 0x40 DUP9 ADD MSTORE PUSH2 0x112D DUP2 DUP10 PUSH2 0x100F JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1163 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xFEB JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1180 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x100F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2B SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x40 DUP3 ADD MSTORE PUSH11 0x1858D95D081D1BC818DD5D PUSH1 0xAA SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2C SWAP1 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x40 DUP3 ADD MSTORE PUSH12 0x652061646472657373283029 PUSH1 0xA0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x1250 JUMPI PUSH2 0x1250 PUSH2 0x121E JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x126D JUMPI PUSH2 0x126D PUSH2 0x121E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID 0xC8 0xFC 0xAD DUP14 0xB8 0x4D EXTCODECOPY 0xC1 DUP12 0x4C COINBASE 0xD5 MLOAD 0xEA 0xE 0xE6 PUSH14 0xD599CDE068D998E57D5E09332C13 SHR 0x4C PUSH10 0x624469616D6F6E644375 PUSH21 0x3A205F696E6974206164647265737320686173206E PUSH16 0x20636F64654C69624469616D6F6E6443 PUSH22 0x743A204E657720666163657420686173206E6F20636F PUSH5 0x65A2646970 PUSH7 0x73582212203B1F 0x4E 0xD6 GAS PUSH12 0xAB0F6C2F33B7EAA1E2B89284 PUSH27 0x6C215922D52116D1D72F8895C164736F6C63430008110033000000 ","sourceMap":"511:2171:82:-:0;;;;;;;;1698:36;1960:7;;-1:-1:-1;;;;;;1960:7:82;1930:38;;-1:-1:-1;;;;;;;;;;;1930:38:82;;;;;;;;:51;636:45:106;;-1:-1:-1;;;;;1930:51:82;;1987:64;;;;-1:-1:-1;;;1987:64:82;;216:2:181;1987:64:82;;;198:21:181;;;235:18;;;228:30;294:34;274:18;;;267:62;346:18;;1987:64:82;;;;;;;;;2228:14;2225:1;2222;2209:34;2360:1;2357;2341:14;2338:1;2331:5;2324;2311:51;2420:16;2417:1;2414;2399:38;2512:6;2525:52;;;;2612:16;2609:1;2602:27;2525:52;2552:16;2549:1;2542:27;2066:203:106;2202:16;;2181:49;;-1:-1:-1;;;;;;;;;;;636:45:106;-1:-1:-1;;;;;2181:49:106;;;;2202:16;;;2181:49;;2126:25;;2181:49;2236:16;;:28;;-1:-1:-1;;;;;;2236:28:106;-1:-1:-1;;;;;2236:28:106;;;;;;;;;;2066:203::o;4277:2043::-;4484:41;;-1:-1:-1;;;;;;;;;;;636:45:106;4410:25;;4484:41;;4495:11;;4508:5;;4515:9;;4484:41;;;:::i;:::-;;;;-1:-1:-1;;4484:41:106;;;;;;;;;4474:52;;4484:41;4474:52;;;;4536:17;;;:24;4474:52;;-1:-1:-1;4536:29:106;4532:802;;4575:12;4590:23;;;:18;;;:23;;;;;;4629:9;;;;;:36;;;4650:15;4642:4;:23;;4629:36;4621:78;;;;-1:-1:-1;;;4621:78:106;;3445:2:181;4621:78:106;;;3427:21:181;3484:2;3464:18;;;3457:30;3523:31;3503:18;;;3496:59;3572:18;;4621:78:106;3243:353:181;4621:78:106;-1:-1:-1;5304:23:106;;;;:18;;;:23;;;;;5297:30;4532:802;5440:18;;5426:11;5464:756;5502:3;5489:10;:16;5464:756;;;5517:33;5553:11;5565:10;5553:23;;;;;;;;:::i;:::-;;;;;;;:30;;;5517:66;;5605:30;5595:40;;;;;;;;:::i;:::-;:6;:40;;;;;;;;:::i;:::-;;5591:574;;5647:93;5660:11;5672:10;5660:23;;;;;;;;:::i;:::-;;;;;;;:36;;;5698:11;5710:10;5698:23;;;;;;;;:::i;:::-;;;;;;;:41;;;5647:12;:93::i;:::-;5591:574;;;5769:34;5759:6;:44;;;;;;;;:::i;:::-;;5755:410;;5815:97;5832:11;5844:10;5832:23;;;;;;;;:::i;:::-;;;;;;;:36;;;5870:11;5882:10;5870:23;;;;;;;;:::i;:::-;;;;;;;:41;;;5815:16;:97::i;5755:410::-;5941:33;5931:6;:43;;;;;;;;:::i;:::-;;5927:238;;5986:96;6002:11;6014:10;6002:23;;;;;;;;:::i;:::-;;;;;;;:36;;;6040:11;6052:10;6040:23;;;;;;;;:::i;:::-;;;;;;;:41;;;5986:15;:96::i;5927:238::-;6107:49;;-1:-1:-1;;;6107:49:106;;3935:2:181;6107:49:106;;;3917:21:181;3974:2;3954:18;;;3947:30;4013:34;3993:18;;;3986:62;-1:-1:-1;;;4064:18:181;;;4057:37;4111:19;;6107:49:106;3733:403:181;5927:238:106;-1:-1:-1;6193:12:106;;5464:756;;;;6230:41;6241:11;6254:5;6261:9;6230:41;;;;;;;;:::i;:::-;;;;;;;;6277:38;6298:5;6305:9;6277:20;:38::i;:::-;4404:1916;;;4277:2043;;;:::o;12320:755::-;-1:-1:-1;;;;;12408:19:106;;12404:667;;12445:16;;:21;12437:94;;;;-1:-1:-1;;;12437:94:106;;4343:2:181;12437:94:106;;;4325:21:181;4382:2;4362:18;;;4355:30;4421:34;4401:18;;;4394:62;4492:30;4472:18;;;4465:58;4540:19;;12437:94:106;4141:424:181;12437:94:106;12320:755;;:::o;12404:667::-;12560:9;:16;12580:1;12560:21;12552:95;;;;-1:-1:-1;;;12552:95:106;;4772:2:181;12552:95:106;;;4754:21:181;4811:2;4791:18;;;4784:30;4850:34;4830:18;;;4823:62;4921:31;4901:18;;;4894:59;4970:19;;12552:95:106;4570:425:181;12552:95:106;-1:-1:-1;;;;;12659:22:106;;12676:4;12659:22;12655:120;;12693:73;12716:5;12693:73;;;;;;;;;;;;;;;;;:22;:73::i;:::-;12783:12;12797:18;12819:5;-1:-1:-1;;;;;12819:18:106;12838:9;12819:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12782:66;;;;12861:7;12856:209;;12884:12;;:17;12880:177;;12962:5;12948:21;;-1:-1:-1;;;12948:21:106;;;;;;;;:::i;12880:177::-;12998:48;;-1:-1:-1;;;12998:48:106;;5718:2:181;12998:48:106;;;5700:21:181;5757:2;5737:18;;;5730:30;5796:34;5776:18;;;5769:62;-1:-1:-1;;;5847:18:181;;;5840:36;5893:19;;12998:48:106;5516:402:181;12880:177:106;12544:527;;12320:755;;:::o;6324:1056::-;6428:18;:25;6457:1;6428:30;6420:86;;;;-1:-1:-1;;;6420:86:106;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;6570:27:106;;6562:84;;;;-1:-1:-1;;;6562:84:106;;;;;;;:::i;:::-;-1:-1:-1;;;;;6685:40:106;;6652:23;6685:40;;;:25;;;:40;;;;;:65;;-1:-1:-1;;;;;6811:21:106;;;;6807:69;;6842:27;6851:2;6855:13;6842:8;:27::i;:::-;6895:25;;6881:11;6926:450;6970:3;6954:13;:19;6926:450;;;6985:15;7003:18;7022:13;7003:33;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;;7070:39:106;;7044:23;7070:39;;;;;;;;;;;:52;7003:33;;-1:-1:-1;;;;;;7070:52:106;7138:29;;7130:95;;;;-1:-1:-1;;;7130:95:106;;6950:2:181;7130:95:106;;;6932:21:181;6989:2;6969:18;;;6962:30;7028:34;7008:18;;;7001:62;-1:-1:-1;;;7079:18:181;;;7072:51;7140:19;;7130:95:106;6748:417:181;7130:95:106;7233:58;7245:2;7249:8;7259:16;7277:13;7233:11;:58::i;:::-;7299:18;;;;:::i;:::-;;;;7346:15;;;;;6977:399;;6926:450;;7384:1097;7498:25;;7484:11;7537:8;;;7529:64;;;;-1:-1:-1;;;7529:64:106;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;7657:27:106;;7649:84;;;;-1:-1:-1;;;7649:84:106;;;;;;;:::i;:::-;-1:-1:-1;;;;;7772:40:106;;7739:23;7772:40;;;:25;;;:40;;;;;:65;;-1:-1:-1;;;;;7898:21:106;;;;7894:69;;7929:27;7938:2;7942:13;7929:8;:27::i;:::-;7973:21;7968:509;8012:3;7996:13;:19;7968:509;;;8027:15;8045:18;8064:13;8045:33;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;;8112:39:106;;8086:23;8112:39;;;;;;;;;;;:52;8045:33;;-1:-1:-1;;;;;;8112:52:106;;;;8180:32;;;;8172:101;;;;-1:-1:-1;;;8172:101:106;;7726:2:181;8172:101:106;;;7708:21:181;7765:2;7745:18;;;7738:30;7804:34;7784:18;;;7777:62;7875:26;7855:18;;;7848:54;7919:19;;8172:101:106;7524:420:181;8172:101:106;8281:45;8296:2;8300:15;8317:8;8281:14;:45::i;:::-;8334:58;8346:2;8350:8;8360:16;8378:13;8334:11;:58::i;:::-;8400:18;;;;:::i;:::-;;;;8447:15;;;;;8019:458;;7968:509;;8485:1070;8592:18;:25;8621:1;8592:30;8584:86;;;;-1:-1:-1;;;8584:86:106;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;8989:27:106;;;8981:94;;;;-1:-1:-1;;;8981:94:106;;8151:2:181;8981:94:106;;;8133:21:181;8190:2;8170:18;;;8163:30;8229:34;8209:18;;;8202:62;-1:-1:-1;;;8280:18:181;;;8273:52;8342:19;;8981:94:106;7949:418:181;8981:94:106;9095:25;;9081:11;9126:425;9170:3;9154:13;:19;9126:425;;;9185:15;9203:18;9222:13;9203:33;;;;;;;;:::i;:::-;;;;;;;9185:51;;9264:15;-1:-1:-1;;;;;9252:27:106;;:8;-1:-1:-1;;;;;9252:27:106;;;;:54;;;;-1:-1:-1;;;;;;;9283:23:106;;;;;;;;9252:54;9244:109;;;;-1:-1:-1;;;9244:109:106;;8574:2:181;9244:109:106;;;8556:21:181;8613:2;8593:18;;;8586:30;8652:34;8632:18;;;8625:62;-1:-1:-1;;;8703:18:181;;;8696:40;8753:19;;9244:109:106;8372:406:181;9244:109:106;-1:-1:-1;;;;;;9387:39:106;;9361:23;9387:39;;;;;;;;;;:52;-1:-1:-1;;;;;9387:52:106;9447:45;9387:2;:52;9417:8;9447:14;:45::i;:::-;-1:-1:-1;;9521:15:106;;9126:425;;;;8578:977;;;;8485:1070;;:::o;13079:155::-;13215:13;-1:-1:-1;;;;;13187:21:106;;;13179:50;;;;-1:-1:-1;;;13179:50:106;;;;;;;;:::i;:::-;;13079:155;;:::o;9559:302::-;9642:77;9665:13;9642:77;;;;;;;;;;;;;;;;;:22;:77::i;:::-;9789:17;;;:24;;-1:-1:-1;;;;;9725:40:106;;;;;;;:25;;;;:40;;;;;;;:61;;:88;;;9819:37;;;;;;;;;;;;;;-1:-1:-1;;;;;;9819:37:106;;;;;;9559:302::o;9865:395::-;-1:-1:-1;;;;;;10015:40:106;;:29;:40;;;;;;;;;;;:85;;-1:-1:-1;;;;;10015:85:106;;;-1:-1:-1;;;10015:85:106;-1:-1:-1;;;;;10015:85:106;;;;;;10106:40;;;;;;;-1:-1:-1;10106:25:106;;;:40;;;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10015:85;10106:74;;;;;;;;;;;;;;;;;;;10186:40;;;;;:69;;-1:-1:-1;;;;;;10186:69:106;;;;9865:395::o;10264:2052::-;-1:-1:-1;;;;;10395:27:106;;10387:95;;;;-1:-1:-1;;;10387:95:106;;8985:2:181;10387:95:106;;;8967:21:181;9024:2;9004:18;;;8997:30;9063:34;9043:18;;;9036:62;9134:25;9114:18;;;9107:53;9177:19;;10387:95:106;8783:419:181;10387:95:106;10594:4;-1:-1:-1;;;;;10569:30:106;;;10561:89;;;;-1:-1:-1;;;10561:89:106;;9409:2:181;10561:89:106;;;9391:21:181;9448:2;9428:18;;;9421:30;9487:34;9467:18;;;9460:62;-1:-1:-1;;;9538:18:181;;;9531:44;9592:19;;10561:89:106;9207:410:181;10561:89:106;-1:-1:-1;;;;;;10753:40:106;;10726:24;10753:40;;;;;;;;;;;:65;-1:-1:-1;;;;;10855:40:106;;;;10923:1;10855:25;;;:40;;;;;;:65;-1:-1:-1;;;10753:65:106;;;-1:-1:-1;;;;;10753:65:106;;10726:24;10855:69;;;:::i;:::-;10824:100;;11018:20;10998:16;:40;10994:365;;-1:-1:-1;;;;;11070:40:106;;11048:19;11070:40;;;:25;;;:40;;;;;:80;;11129:20;;11070:80;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;11158:40:106;;;;:25;;;:40;;;;;;;:76;;11070:80;;;;;;;;;;;;;;-1:-1:-1;11070:80:106;;11158:40;11217:16;;11158:76;;;;;;:::i;:::-;;;;;;;;;;;;;:91;;;:76;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11257:43:106;;;;;;;;;;;;:95;;-1:-1:-1;;;;;11257:95:106;-1:-1:-1;;;;;;;;11257:95:106;;;;;;10994:365;-1:-1:-1;;;;;11396:40:106;;;;;;:25;;;:40;;;;;:64;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;11396:64:106;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11473:40:106;;;;;;;;;;11466:47;;;11600:25;;;11596:716;;11755:17;;;:24;11720:32;;11755:28;;11782:1;;11755:28;:::i;:::-;-1:-1:-1;;;;;11822:40:106;;11791:28;11822:40;;;:25;;;;:40;;;;;;:61;;11720:63;;-1:-1:-1;11895:48:106;;;11891:308;;11955:24;11982:2;:17;;12000:24;11982:43;;;;;;;;:::i;:::-;;;;;;;;;;;12035:17;;;:39;;-1:-1:-1;;;;;11982:43:106;;;;-1:-1:-1;11982:43:106;;12053:20;;12035:39;;;;;;:::i;:::-;;;;;;;;;;;;;:58;;-1:-1:-1;;;;;;12035:58:106;-1:-1:-1;;;;;12035:58:106;;;;;;12103:43;;;;;;-1:-1:-1;12103:25:106;;;:43;;;;;;:64;:87;;;11891:308;12206:2;:17;;:23;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;12206:23:106;;;;;-1:-1:-1;;;;;;12206:23:106;;;;;;;;;-1:-1:-1;;;;;12244:40:106;;;;12206:23;12244:25;;;:40;;;;;;:61;12237:68;-1:-1:-1;;11596:716:106;10381:1935;;10264:2052;;;:::o;484:127:181:-;545:10;540:3;536:20;533:1;526:31;576:4;573:1;566:15;600:4;597:1;590:15;616:250;701:1;711:113;725:6;722:1;719:13;711:113;;;801:11;;;795:18;782:11;;;775:39;747:2;740:10;711:113;;;-1:-1:-1;;858:1:181;840:16;;833:27;616:250::o;871:270::-;912:3;950:5;944:12;977:6;972:3;965:19;993:76;1062:6;1055:4;1050:3;1046:14;1039:4;1032:5;1028:16;993:76;:::i;:::-;1123:2;1102:15;-1:-1:-1;;1098:29:181;1089:39;;;;1130:4;1085:50;;871:270;-1:-1:-1;;871:270:181:o;1146:2092::-;1416:4;1445:2;1485;1474:9;1470:18;1515:2;1504:9;1497:21;1538:6;1573;1567:13;1604:6;1596;1589:22;1630:3;1620:13;;1664:2;1653:9;1649:18;1642:25;;1726:2;1716:6;1713:1;1709:14;1698:9;1694:30;1690:39;1748:4;1787:2;1779:6;1775:15;1808:1;1818:1249;1832:6;1829:1;1826:13;1818:1249;;;1897:22;;;-1:-1:-1;;1893:37:181;1881:50;;1954:13;;2041:9;;-1:-1:-1;;;;;2037:35:181;2022:51;;2112:11;;;2106:18;1994:15;;;;2164:1;2147:19;;2137:170;;2217:10;2212:3;2208:20;2205:1;2198:31;2256:4;2253:1;2246:15;2288:4;2285:1;2278:15;2137:170;2327:15;;;2320:37;2380:4;2425:11;;;2419:18;2457:15;;;2450:27;;;2538:21;;2572:24;;;;2662:23;;;;-1:-1:-1;;2618:15:181;;;;2723:236;2739:8;2734:3;2731:17;2723:236;;;2820:15;;-1:-1:-1;;;;;;2816:42:181;2802:57;;2928:17;;;;2767:1;2758:11;;;;;2885:14;;;;2723:236;;;-1:-1:-1;3045:12:181;;;;2982:5;-1:-1:-1;;;3010:15:181;;;;1854:1;1847:9;1818:1249;;;-1:-1:-1;;;;;;;441:31:181;;3103:18;;;429:44;3160:22;;;3153:4;3138:20;;3131:52;3200:32;3164:6;3217;3200:32;:::i;:::-;3192:40;1146:2092;-1:-1:-1;;;;;;;;;;1146:2092:181:o;3601:127::-;3662:10;3657:3;3653:20;3650:1;3643:31;3693:4;3690:1;3683:15;3717:4;3714:1;3707:15;5000:287;5129:3;5167:6;5161:13;5183:66;5242:6;5237:3;5230:4;5222:6;5218:17;5183:66;:::i;:::-;5265:16;;;;;5000:287;-1:-1:-1;;5000:287:181:o;5292:219::-;5441:2;5430:9;5423:21;5404:4;5461:44;5501:2;5490:9;5486:18;5478:6;5461:44;:::i;:::-;5453:52;5292:219;-1:-1:-1;;;5292:219:181:o;5923:407::-;6125:2;6107:21;;;6164:2;6144:18;;;6137:30;6203:34;6198:2;6183:18;;6176:62;-1:-1:-1;;;6269:2:181;6254:18;;6247:41;6320:3;6305:19;;5923:407::o;6335:408::-;6537:2;6519:21;;;6576:2;6556:18;;;6549:30;6615:34;6610:2;6595:18;;6588:62;-1:-1:-1;;;6681:2:181;6666:18;;6659:42;6733:3;6718:19;;6335:408::o;7170:127::-;7231:10;7226:3;7222:20;7219:1;7212:31;7262:4;7259:1;7252:15;7286:4;7283:1;7276:15;7302:217;7340:3;-1:-1:-1;;;;;7429:2:181;7422:5;7418:14;7456:2;7447:7;7444:15;7441:41;;7462:18;;:::i;:::-;7511:1;7498:15;;7302:217;-1:-1:-1;;;7302:217:181:o;9622:128::-;9689:9;;;9710:11;;;9707:37;;;9724:18;;:::i;:::-;9622:128;;;;:::o;9755:127::-;9816:10;9811:3;9807:20;9804:1;9797:31;9847:4;9844:1;9837:15;9871:4;9868:1;9861:15"},"gasEstimates":{"creation":{"codeDepositCost":"981400","executionCost":"infinite","totalCost":"infinite"},"external":{"":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contractOwner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"initContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ConnextDiamond.Initialization[]\",\"name\":\"_initializations\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_contractOwner\":\"the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\",\"_diamondCut\":\"the list of facet to add\",\"_initializations\":\"the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"This construct a diamond contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/helpers/ConnextDiamond.sol\":\"ConnextDiamond\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/connext/helpers/ConnextDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\ncontract ConnextDiamond {\\n  struct Initialization {\\n    address initContract;\\n    bytes initData;\\n  }\\n\\n  /// @notice This construct a diamond contract\\n  /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n  /// @param _diamondCut the list of facet to add\\n  /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n  constructor(\\n    address _contractOwner,\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    Initialization[] memory _initializations\\n  ) payable {\\n    if (_contractOwner != address(0)) {\\n      LibDiamond.setContractOwner(_contractOwner);\\n    }\\n\\n    LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n    uint256 len = _initializations.length;\\n    for (uint256 i = 0; i < len; ) {\\n      LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  // Find facet for function that is called and execute the\\n  // function if a facet is found and return any value.\\n  fallback() external payable {\\n    LibDiamond.DiamondStorage storage ds;\\n    bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n    // get diamond storage\\n    assembly {\\n      ds.slot := position\\n    }\\n    // get facet from function selector\\n    address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n    require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n    // Execute external function from facet using delegatecall and return any value.\\n    assembly {\\n      // copy function selector and any arguments\\n      calldatacopy(0, 0, calldatasize())\\n      // execute function call using the facet\\n      let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n      // get any return value\\n      returndatacopy(0, 0, returndatasize())\\n      // return any return value or error back to the caller\\n      switch result\\n      case 0 {\\n        revert(0, returndatasize())\\n      }\\n      default {\\n        return(0, returndatasize())\\n      }\\n    }\\n  }\\n\\n  receive() external payable {}\\n}\\n\",\"keccak256\":\"0x31cc4e10d0029f16079dcffd15721faa272f27f460a0904635d93f6404a22b71\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"constructor":{"notice":"This construct a diamond contract"}},"version":1}}},"contracts/core/connext/helpers/ConnextPriceOracle.sol":{"AggregatorV3Interface":{"abi":[{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"decimals()":"313ce567","description()":"7284e416","latestRoundData()":"feaf968c","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"description\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/helpers/ConnextPriceOracle.sol\":\"AggregatorV3Interface\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/ConnextPriceOracle.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {IPriceOracle} from \\\"../interfaces/IPriceOracle.sol\\\";\\n\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../../../shared/ProposedOwnable.sol\\\";\\nimport {PriceOracle} from \\\"./PriceOracle.sol\\\";\\n\\ninterface AggregatorV3Interface {\\n  function decimals() external view returns (uint8);\\n\\n  function description() external view returns (string memory);\\n\\n  function version() external view returns (uint256);\\n\\n  function latestRoundData()\\n    external\\n    view\\n    returns (\\n      uint80 roundId,\\n      int256 answer,\\n      uint256 startedAt,\\n      uint256 updatedAt,\\n      uint80 answeredInRound\\n    );\\n}\\n\\n/**\\n * @title ConnextPriceOracle\\n * @notice Simple interface for querying a variety of price feeds\\n *\\n * @dev If ownership is renounced, the direct price, aggregators, and price oracles\\n * can no longer be updated\\n */\\ncontract ConnextPriceOracle is PriceOracle, ProposedOwnable {\\n  address public wrapped;\\n  address public v1PriceOracle;\\n\\n  /// @notice Price sources\\n  enum PriceSource {\\n    NA,\\n    DIRECT,\\n    CHAINLINK,\\n    V1_ORACLE\\n  }\\n\\n  /// @notice Chainlink Aggregators\\n  mapping(address => AggregatorV3Interface) public aggregators;\\n\\n  struct Price {\\n    uint256 updatedAt;\\n    uint256 price;\\n  }\\n\\n  mapping(address => Price) public assetPrices;\\n\\n  event DirectPriceUpdated(address token, uint256 oldPrice, uint256 newPrice);\\n  event AggregatorUpdated(address tokenAddress, address source);\\n  event V1PriceOracleUpdated(address oldAddress, address newAddress);\\n\\n  constructor(address _wrapped) {\\n    require(_wrapped != address(0), \\\"zero wrapped address!\\\");\\n\\n    wrapped = _wrapped;\\n    _setOwner(msg.sender);\\n  }\\n\\n  function getTokenPrice(address _tokenAddress) public view override returns (uint256, uint256) {\\n    address tokenAddress = _tokenAddress;\\n\\n    // For native tokens, get price of the wrapped token\\n    if (_tokenAddress == address(0)) {\\n      tokenAddress = wrapped;\\n    }\\n\\n    // First check the direct price which stored in contract. Only owner can set direct price.\\n    uint256 tokenPrice = assetPrices[tokenAddress].price;\\n    // only accept up to and not including Constants.ORACLE_VALID_PERIOD time deviation\\n    if (tokenPrice != 0 && ((block.timestamp - assetPrices[tokenAddress].updatedAt) < Constants.ORACLE_VALID_PERIOD)) {\\n      return (tokenPrice, uint256(PriceSource.DIRECT));\\n    }\\n\\n    // Second, check ChainLink aggregator, If current token is supported by chainlink, return\\n    tokenPrice = getPriceFromOracle(tokenAddress);\\n    if (tokenPrice != 0) {\\n      return (tokenPrice, uint256(PriceSource.CHAINLINK));\\n    }\\n\\n    // Third, If v1 oracle price contract is set, check v1 price\\n    if (v1PriceOracle != address(0)) {\\n      tokenPrice = IPriceOracle(v1PriceOracle).getTokenPrice(tokenAddress);\\n      if (tokenPrice != 0) {\\n        return (tokenPrice, uint256(PriceSource.V1_ORACLE));\\n      }\\n    }\\n\\n    return (0, uint256(PriceSource.NA));\\n  }\\n\\n  function getPriceFromOracle(address _tokenAddress) public view returns (uint256) {\\n    uint256 chainLinkPrice = getPriceFromChainlink(_tokenAddress);\\n    return chainLinkPrice;\\n  }\\n\\n  function getPriceFromChainlink(address _tokenAddress) public view returns (uint256) {\\n    AggregatorV3Interface aggregator = aggregators[_tokenAddress];\\n    if (address(aggregator) != address(0)) {\\n      try aggregator.latestRoundData() returns (\\n        uint80 roundId,\\n        int256 answer,\\n        uint256,\\n        uint256 updateAt,\\n        uint80 answeredInRound\\n      ) {\\n        // It's fine for price to be 0. We have more price feeds.\\n        if (\\n          answer == 0 ||\\n          answeredInRound < roundId ||\\n          updateAt == 0 ||\\n          block.timestamp > updateAt + Constants.ORACLE_VALID_PERIOD\\n        ) {\\n          // answeredInRound > roundId ===> ChainLink Error: Stale price\\n          // updatedAt = 0 ===> ChainLink Error: Round not complete\\n          // block.timestamp - updateAt > Constants.ORACLE_VALID_PERIOD ===> too old data\\n          return 0;\\n        }\\n\\n        uint256 retVal = uint256(answer);\\n        uint256 price;\\n        // Make the decimals to 1e18.\\n        uint256 aggregatorDecimals = uint256(aggregator.decimals());\\n        if (aggregatorDecimals > Constants.DEFAULT_NORMALIZED_DECIMALS) {\\n          price = retVal / (10**(aggregatorDecimals - Constants.DEFAULT_NORMALIZED_DECIMALS));\\n        } else {\\n          price = retVal * (10**(Constants.DEFAULT_NORMALIZED_DECIMALS - aggregatorDecimals));\\n        }\\n\\n        return price;\\n      } catch {\\n        // return 0 to be able to fetch the price from next oracles\\n        return 0;\\n      }\\n    }\\n\\n    return 0;\\n  }\\n\\n  function setDirectPrice(\\n    address _token,\\n    uint256 _price,\\n    uint256 _timestamp\\n  ) external onlyOwner {\\n    require(_price != 0, \\\"bad price\\\");\\n    if (block.timestamp > _timestamp) {\\n      // reject stale price\\n      require(block.timestamp - _timestamp < Constants.ORACLE_VALID_PERIOD, \\\"bad timestamp\\\");\\n    } else {\\n      // reject future timestamp (<3s is allowed)\\n      require(_timestamp - block.timestamp < Constants.FUTURE_TIME_BUFFER, \\\"in future\\\");\\n      _timestamp = block.timestamp;\\n    }\\n\\n    emit DirectPriceUpdated(_token, assetPrices[_token].price, _price);\\n\\n    assetPrices[_token].price = _price;\\n    assetPrices[_token].updatedAt = _timestamp;\\n  }\\n\\n  function setV1PriceOracle(address _v1PriceOracle) external onlyOwner {\\n    emit V1PriceOracleUpdated(v1PriceOracle, _v1PriceOracle);\\n    v1PriceOracle = _v1PriceOracle;\\n  }\\n\\n  function setAggregators(address[] calldata tokenAddresses, address[] calldata sources) external onlyOwner {\\n    uint256 numTokens = tokenAddresses.length;\\n    for (uint256 i; i < numTokens; ) {\\n      aggregators[tokenAddresses[i]] = AggregatorV3Interface(sources[i]);\\n      emit AggregatorUpdated(tokenAddresses[i], sources[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x3ba26d9f1b7385f48acd418e572d8a84b8ccb49bcdd005aaac32d871cb33be6d\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/PriceOracle.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nabstract contract PriceOracle {\\n  /// @notice Indicator that this is a PriceOracle contract (for inspection)\\n  bool public constant isPriceOracle = true;\\n\\n  /**\\n   * @notice Get the price of a token\\n   * @param token The token to get the price of\\n   * @return The asset price mantissa (scaled by 1e18).\\n   *  Zero means the price is unavailable.\\n   * @return The source of the price. enum (NA, DIRECT, CHAINLINK, DEX, V1_ORACLE)\\n   */\\n  function getTokenPrice(address token) external view virtual returns (uint256, uint256);\\n}\\n\",\"keccak256\":\"0x45f7d3bc9454208745a68af35ff5d75592d633d7cd07a6aa13333f694af54d20\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IPriceOracle.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\ninterface IPriceOracle {\\n  /**\\n   * @notice Get the price of a token\\n   * @param token The token to get the price of\\n   * @return The asset price mantissa (scaled by 1e18).\\n   *  Zero means the price is unavailable.\\n   */\\n  function getTokenPrice(address token) external view returns (uint256);\\n\\n  /**\\n   * @notice Get the price of a token from ChainLink\\n   * @param token The token to get the price of\\n   * @return The asset price mantissa (scaled by 1e18).\\n   *  Zero means the price is unavailable.\\n   */\\n  function getPriceFromChainlink(address token) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x7bbaa4b9a32da8fd3dfd468ce4882545182221548744ce06604e1205cb8a2ecb\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"ConnextPriceOracle":{"abi":[{"inputs":[{"internalType":"address","name":"_wrapped","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"address","name":"source","type":"address"}],"name":"AggregatorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"DirectPriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"V1PriceOracleUpdated","type":"event"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"aggregators","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"assetPrices","outputs":[{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"getPriceFromChainlink","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"getPriceFromOracle","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"getTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPriceOracle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokenAddresses","type":"address[]"},{"internalType":"address[]","name":"sources","type":"address[]"}],"name":"setAggregators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setDirectPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_v1PriceOracle","type":"address"}],"name":"setV1PriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"v1PriceOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wrapped","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"If ownership is renounced, the direct price, aggregators, and price oracles can no longer be updated","kind":"dev","methods":{},"title":"ConnextPriceOracle","version":1},"evm":{"bytecode":{"functionDebugData":{"@_22641":{"entryPoint":null,"id":22641,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":179,"id":49908,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":280,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8358411cc6d79ba42cfad693068d69d50e3868c486635f450efaf87314757a4d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:656:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:209:181","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:181"},"nodeType":"YulFunctionCall","src":"143:12:181"},"nodeType":"YulExpressionStatement","src":"143:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:181"},"nodeType":"YulFunctionCall","src":"112:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:181"},"nodeType":"YulFunctionCall","src":"108:32:181"},"nodeType":"YulIf","src":"105:52:181"},{"nodeType":"YulVariableDeclaration","src":"166:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"185:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"179:5:181"},"nodeType":"YulFunctionCall","src":"179:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"170:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"258:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"267:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"270:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"260:6:181"},"nodeType":"YulFunctionCall","src":"260:12:181"},"nodeType":"YulExpressionStatement","src":"260:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"217:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"228:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"243:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"239:3:181"},"nodeType":"YulFunctionCall","src":"239:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"252:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:181"},"nodeType":"YulFunctionCall","src":"235:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"224:3:181"},"nodeType":"YulFunctionCall","src":"224:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"214:2:181"},"nodeType":"YulFunctionCall","src":"214:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"207:6:181"},"nodeType":"YulFunctionCall","src":"207:50:181"},"nodeType":"YulIf","src":"204:70:181"},{"nodeType":"YulAssignment","src":"283:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"293:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"283:6:181"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:181","type":""}],"src":"14:290:181"},{"body":{"nodeType":"YulBlock","src":"483:171:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"500:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"511:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"493:6:181"},"nodeType":"YulFunctionCall","src":"493:21:181"},"nodeType":"YulExpressionStatement","src":"493:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"534:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"545:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"530:3:181"},"nodeType":"YulFunctionCall","src":"530:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"550:2:181","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"523:6:181"},"nodeType":"YulFunctionCall","src":"523:30:181"},"nodeType":"YulExpressionStatement","src":"523:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"573:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"584:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"569:3:181"},"nodeType":"YulFunctionCall","src":"569:18:181"},{"hexValue":"7a65726f2077726170706564206164647265737321","kind":"string","nodeType":"YulLiteral","src":"589:23:181","type":"","value":"zero wrapped address!"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"562:6:181"},"nodeType":"YulFunctionCall","src":"562:51:181"},"nodeType":"YulExpressionStatement","src":"562:51:181"},{"nodeType":"YulAssignment","src":"622:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"634:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"645:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"630:3:181"},"nodeType":"YulFunctionCall","src":"630:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"622:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8358411cc6d79ba42cfad693068d69d50e3868c486635f450efaf87314757a4d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"460:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"474:4:181","type":""}],"src":"309:345:181"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_8358411cc6d79ba42cfad693068d69d50e3868c486635f450efaf87314757a4d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"zero wrapped address!\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060405161109138038061109183398101604081905261002f91610118565b6001600160a01b0381166100895760405162461bcd60e51b815260206004820152601560248201527f7a65726f20777261707065642061646472657373210000000000000000000000604482015260640160405180910390fd5b600380546001600160a01b0319166001600160a01b0383161790556100ad336100b3565b50610148565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60006020828403121561012a57600080fd5b81516001600160a01b038116811461014157600080fd5b9392505050565b610f3a806101576000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063715018a6116100ad578063cb45c4f211610071578063cb45c4f214610270578063d02641a014610283578063d1851c9214610296578063d232c220146102a7578063fe10c98d146102b957600080fd5b8063715018a614610229578063856d562d146102315780638da5cb5b14610244578063b1f8100d14610255578063c5b350df1461026857600080fd5b8063538e573c116100f4578063538e573c146101a65780635e901bdf146101b95780635e9a523c146101cc57806366331bba146102085780636a42b8f81461022057600080fd5b8063112cdab9146101265780633cf52ffb1461016c5780633f9fb5051461017e57806350e70d4814610193575b600080fd5b61014f610134366004610bd7565b6005602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6002545b604051908152602001610163565b61019161018c366004610c3e565b6102cc565b005b60035461014f906001600160a01b031681565b6101706101b4366004610bd7565b610428565b6101916101c7366004610caa565b61043b565b6101f36101da366004610bd7565b6006602052600090815260409020805460019091015482565b60408051928352602083019190915201610163565b610210600181565b6040519015158152602001610163565b62093a80610170565b6101916105c4565b61017061023f366004610bd7565b610678565b6000546001600160a01b031661014f565b610191610263366004610bd7565b61082f565b6101916108d0565b61019161027e366004610bd7565b610940565b6101f3610291366004610bd7565b6109d4565b6001546001600160a01b031661014f565b6000546001600160a01b031615610210565b60045461014f906001600160a01b031681565b6000546001600160a01b031633146102f7576040516311a8a1bb60e31b815260040160405180910390fd5b8260005b818110156104205783838281811061031557610315610cdd565b905060200201602081019061032a9190610bd7565b6005600088888581811061034057610340610cdd565b90506020020160208101906103559190610bd7565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790557f89baabef7dfd0683c0ac16fd2a8431c51b49fbe654c3f7b5ef19763e2ccd88f28686838181106103b9576103b9610cdd565b90506020020160208101906103ce9190610bd7565b8585848181106103e0576103e0610cdd565b90506020020160208101906103f59190610bd7565b604080516001600160a01b0393841681529290911660208301520160405180910390a16001016102fb565b505050505050565b60008061043483610678565b9392505050565b6000546001600160a01b03163314610466576040516311a8a1bb60e31b815260040160405180910390fd5b816000036104a75760405162461bcd60e51b815260206004820152600960248201526862616420707269636560b81b60448201526064015b60405180910390fd5b804211156104fd57603c6104bb8242610d09565b106104f85760405162461bcd60e51b815260206004820152600d60248201526c06261642074696d657374616d7609c1b604482015260640161049e565b610545565b60036105094283610d09565b106105425760405162461bcd60e51b8152602060048201526009602482015268696e2066757475726560b81b604482015260640161049e565b50425b6001600160a01b0383166000818152600660209081526040918290206001015482519384529083015281018390527fe2c8fb681c257e4e8df5ef1c464cff10ce6b072837628c9b6de5e7239a483e5d9060600160405180910390a16001600160a01b039092166000908152600660205260409020600181019190915555565b6000546001600160a01b031633146105ef576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426106019190610d09565b1161061f576040516324e0285f60e21b815260040160405180910390fd5b60025460000361064257604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b03161561066c576040516323295ef960e01b815260040160405180910390fd5b6106766000610b08565b565b6001600160a01b03808216600090815260056020526040812054909116801561082657806001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156106f5575060408051601f3d908101601f191682019092526106f291810190610d3c565b60015b6107025750600092915050565b83158061072657508469ffffffffffffffffffff168169ffffffffffffffffffff16105b8061072f575081155b806107435750610740603c83610d8c565b42115b1561075657506000979650505050505050565b6000849050600080886001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561079c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c09190610d9f565b60ff16905060128111156107f5576107d9601282610d09565b6107e490600a610ea6565b6107ee9084610eb2565b9150610818565b610800816012610d09565b61080b90600a610ea6565b6108159084610ed4565b91505b509998505050505050505050565b50600092915050565b6000546001600160a01b0316331461085a576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610878575060025415155b15610896576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036108c457604051634a2fb73f60e11b815260040160405180910390fd5b6108cd81610b6d565b50565b6001546001600160a01b031633146108fb576040516311a7f27160e11b815260040160405180910390fd5b62093a806002544261090d9190610d09565b1161092b576040516324e0285f60e21b815260040160405180910390fd5b600154610676906001600160a01b0316610b08565b6000546001600160a01b0316331461096b576040516311a8a1bb60e31b815260040160405180910390fd5b600454604080516001600160a01b03928316815291831660208301527f42e2900b37aa23ca681e13d6efc8018181fa216ca6676cf2b983e00e056afc2c910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b600080826001600160a01b0381166109f457506003546001600160a01b03165b6001600160a01b0381166000908152600660205260409020600101548015801590610a4257506001600160a01b038216600090815260066020526040902054603c90610a409042610d09565b105b15610a56578060015b935093505050915091565b610a5f82610428565b90508015610a6f57806002610a4b565b6004546001600160a01b031615610b005760048054604051630681320d60e51b81526001600160a01b038581169382019390935291169063d02641a090602401602060405180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190610eeb565b90508015610b0057806003610a4b565b600080610a4b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b80356001600160a01b0381168114610bd257600080fd5b919050565b600060208284031215610be957600080fd5b61043482610bbb565b60008083601f840112610c0457600080fd5b50813567ffffffffffffffff811115610c1c57600080fd5b6020830191508360208260051b8501011115610c3757600080fd5b9250929050565b60008060008060408587031215610c5457600080fd5b843567ffffffffffffffff80821115610c6c57600080fd5b610c7888838901610bf2565b90965094506020870135915080821115610c9157600080fd5b50610c9e87828801610bf2565b95989497509550505050565b600080600060608486031215610cbf57600080fd5b610cc884610bbb565b95602085013595506040909401359392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610d1c57610d1c610cf3565b92915050565b805169ffffffffffffffffffff81168114610bd257600080fd5b600080600080600060a08688031215610d5457600080fd5b610d5d86610d22565b9450602086015193506040860151925060608601519150610d8060808701610d22565b90509295509295909350565b80820180821115610d1c57610d1c610cf3565b600060208284031215610db157600080fd5b815160ff8116811461043457600080fd5b600181815b80851115610dfd578160001904821115610de357610de3610cf3565b80851615610df057918102915b93841c9390800290610dc7565b509250929050565b600082610e1457506001610d1c565b81610e2157506000610d1c565b8160018114610e375760028114610e4157610e5d565b6001915050610d1c565b60ff841115610e5257610e52610cf3565b50506001821b610d1c565b5060208310610133831016604e8410600b8410161715610e80575081810a610d1c565b610e8a8383610dc2565b8060001904821115610e9e57610e9e610cf3565b029392505050565b60006104348383610e05565b600082610ecf57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610d1c57610d1c610cf3565b600060208284031215610efd57600080fd5b505191905056fea264697066735822122097d5d66e0be24563749d9fd7a227a0c92a1467885c145a115180d4c37c79757264736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1091 CODESIZE SUB DUP1 PUSH2 0x1091 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x118 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x89 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x7A65726F20777261707065642061646472657373210000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH2 0xAD CALLER PUSH2 0xB3 JUMP JUMPDEST POP PUSH2 0x148 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x12A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x141 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xF3A DUP1 PUSH2 0x157 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x121 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xCB45C4F2 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xCB45C4F2 EQ PUSH2 0x270 JUMPI DUP1 PUSH4 0xD02641A0 EQ PUSH2 0x283 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x296 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0xFE10C98D EQ PUSH2 0x2B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x715018A6 EQ PUSH2 0x229 JUMPI DUP1 PUSH4 0x856D562D EQ PUSH2 0x231 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x244 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x255 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x268 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x538E573C GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0x538E573C EQ PUSH2 0x1A6 JUMPI DUP1 PUSH4 0x5E901BDF EQ PUSH2 0x1B9 JUMPI DUP1 PUSH4 0x5E9A523C EQ PUSH2 0x1CC JUMPI DUP1 PUSH4 0x66331BBA EQ PUSH2 0x208 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x112CDAB9 EQ PUSH2 0x126 JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0x3F9FB505 EQ PUSH2 0x17E JUMPI DUP1 PUSH4 0x50E70D48 EQ PUSH2 0x193 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x14F PUSH2 0x134 CALLDATASIZE PUSH1 0x4 PUSH2 0xBD7 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x163 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x18C CALLDATASIZE PUSH1 0x4 PUSH2 0xC3E JUMP JUMPDEST PUSH2 0x2CC JUMP JUMPDEST STOP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x14F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x170 PUSH2 0x1B4 CALLDATASIZE PUSH1 0x4 PUSH2 0xBD7 JUMP JUMPDEST PUSH2 0x428 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x1C7 CALLDATASIZE PUSH1 0x4 PUSH2 0xCAA JUMP JUMPDEST PUSH2 0x43B JUMP JUMPDEST PUSH2 0x1F3 PUSH2 0x1DA CALLDATASIZE PUSH1 0x4 PUSH2 0xBD7 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD DUP3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x163 JUMP JUMPDEST PUSH2 0x210 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x163 JUMP JUMPDEST PUSH3 0x93A80 PUSH2 0x170 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x5C4 JUMP JUMPDEST PUSH2 0x170 PUSH2 0x23F CALLDATASIZE PUSH1 0x4 PUSH2 0xBD7 JUMP JUMPDEST PUSH2 0x678 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x14F JUMP JUMPDEST PUSH2 0x191 PUSH2 0x263 CALLDATASIZE PUSH1 0x4 PUSH2 0xBD7 JUMP JUMPDEST PUSH2 0x82F JUMP JUMPDEST PUSH2 0x191 PUSH2 0x8D0 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x27E CALLDATASIZE PUSH1 0x4 PUSH2 0xBD7 JUMP JUMPDEST PUSH2 0x940 JUMP JUMPDEST PUSH2 0x1F3 PUSH2 0x291 CALLDATASIZE PUSH1 0x4 PUSH2 0xBD7 JUMP JUMPDEST PUSH2 0x9D4 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x14F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x210 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x14F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2F7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x420 JUMPI DUP4 DUP4 DUP3 DUP2 DUP2 LT PUSH2 0x315 JUMPI PUSH2 0x315 PUSH2 0xCDD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x32A SWAP2 SWAP1 PUSH2 0xBD7 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x0 DUP9 DUP9 DUP6 DUP2 DUP2 LT PUSH2 0x340 JUMPI PUSH2 0x340 PUSH2 0xCDD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x355 SWAP2 SWAP1 PUSH2 0xBD7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH32 0x89BAABEF7DFD0683C0AC16FD2A8431C51B49FBE654C3F7B5EF19763E2CCD88F2 DUP7 DUP7 DUP4 DUP2 DUP2 LT PUSH2 0x3B9 JUMPI PUSH2 0x3B9 PUSH2 0xCDD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x3CE SWAP2 SWAP1 PUSH2 0xBD7 JUMP JUMPDEST DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0x3E0 JUMPI PUSH2 0x3E0 PUSH2 0xCDD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x3F5 SWAP2 SWAP1 PUSH2 0xBD7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x1 ADD PUSH2 0x2FB JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x434 DUP4 PUSH2 0x678 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x466 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x0 SUB PUSH2 0x4A7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x626164207072696365 PUSH1 0xB8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 TIMESTAMP GT ISZERO PUSH2 0x4FD JUMPI PUSH1 0x3C PUSH2 0x4BB DUP3 TIMESTAMP PUSH2 0xD09 JUMP JUMPDEST LT PUSH2 0x4F8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x6261642074696D657374616D7 PUSH1 0x9C SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x49E JUMP JUMPDEST PUSH2 0x545 JUMP JUMPDEST PUSH1 0x3 PUSH2 0x509 TIMESTAMP DUP4 PUSH2 0xD09 JUMP JUMPDEST LT PUSH2 0x542 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x696E20667574757265 PUSH1 0xB8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x49E JUMP JUMPDEST POP TIMESTAMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP3 MLOAD SWAP4 DUP5 MSTORE SWAP1 DUP4 ADD MSTORE DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0xE2C8FB681C257E4E8DF5EF1C464CFF10CE6B072837628C9B6DE5E7239A483E5D SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 DUP2 ADD SWAP2 SWAP1 SWAP2 SSTORE SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5EF JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x601 SWAP2 SWAP1 PUSH2 0xD09 JUMP JUMPDEST GT PUSH2 0x61F JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x642 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x66C JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x676 PUSH1 0x0 PUSH2 0xB08 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 AND DUP1 ISZERO PUSH2 0x826 JUMPI DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFEAF968C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x6F5 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x6F2 SWAP2 DUP2 ADD SWAP1 PUSH2 0xD3C JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x702 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP4 ISZERO DUP1 PUSH2 0x726 JUMPI POP DUP5 PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND LT JUMPDEST DUP1 PUSH2 0x72F JUMPI POP DUP2 ISZERO JUMPDEST DUP1 PUSH2 0x743 JUMPI POP PUSH2 0x740 PUSH1 0x3C DUP4 PUSH2 0xD8C JUMP JUMPDEST TIMESTAMP GT JUMPDEST ISZERO PUSH2 0x756 JUMPI POP PUSH1 0x0 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 SWAP1 POP PUSH1 0x0 DUP1 DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x79C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7C0 SWAP2 SWAP1 PUSH2 0xD9F JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x12 DUP2 GT ISZERO PUSH2 0x7F5 JUMPI PUSH2 0x7D9 PUSH1 0x12 DUP3 PUSH2 0xD09 JUMP JUMPDEST PUSH2 0x7E4 SWAP1 PUSH1 0xA PUSH2 0xEA6 JUMP JUMPDEST PUSH2 0x7EE SWAP1 DUP5 PUSH2 0xEB2 JUMP JUMPDEST SWAP2 POP PUSH2 0x818 JUMP JUMPDEST PUSH2 0x800 DUP2 PUSH1 0x12 PUSH2 0xD09 JUMP JUMPDEST PUSH2 0x80B SWAP1 PUSH1 0xA PUSH2 0xEA6 JUMP JUMPDEST PUSH2 0x815 SWAP1 DUP5 PUSH2 0xED4 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x85A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x878 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x896 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x8C4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x8CD DUP2 PUSH2 0xB6D JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8FB JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x90D SWAP2 SWAP1 PUSH2 0xD09 JUMP JUMPDEST GT PUSH2 0x92B JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x676 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xB08 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x96B JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x42E2900B37AA23CA681E13D6EFC8018181FA216CA6676CF2B983E00E056AFC2C SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x9F4 JUMPI POP PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xA42 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x3C SWAP1 PUSH2 0xA40 SWAP1 TIMESTAMP PUSH2 0xD09 JUMP JUMPDEST LT JUMPDEST ISZERO PUSH2 0xA56 JUMPI DUP1 PUSH1 0x1 JUMPDEST SWAP4 POP SWAP4 POP POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH2 0xA5F DUP3 PUSH2 0x428 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xA6F JUMPI DUP1 PUSH1 0x2 PUSH2 0xA4B JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0xB00 JUMPI PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x681320D PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 AND SWAP1 PUSH4 0xD02641A0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xACC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAF0 SWAP2 SWAP1 PUSH2 0xEEB JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xB00 JUMPI DUP1 PUSH1 0x3 PUSH2 0xA4B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xA4B JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xBD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x434 DUP3 PUSH2 0xBBB JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xC04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC1C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0xC37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xC54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xC6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC78 DUP9 DUP4 DUP10 ADD PUSH2 0xBF2 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xC91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC9E DUP8 DUP3 DUP9 ADD PUSH2 0xBF2 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xCBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCC8 DUP5 PUSH2 0xBBB JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xD1C JUMPI PUSH2 0xD1C PUSH2 0xCF3 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xBD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xD54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD5D DUP7 PUSH2 0xD22 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD MLOAD SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD SWAP2 POP PUSH2 0xD80 PUSH1 0x80 DUP8 ADD PUSH2 0xD22 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xD1C JUMPI PUSH2 0xD1C PUSH2 0xCF3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x434 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0xDFD JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0xDE3 JUMPI PUSH2 0xDE3 PUSH2 0xCF3 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0xDF0 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0xDC7 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xE14 JUMPI POP PUSH1 0x1 PUSH2 0xD1C JUMP JUMPDEST DUP2 PUSH2 0xE21 JUMPI POP PUSH1 0x0 PUSH2 0xD1C JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0xE37 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0xE41 JUMPI PUSH2 0xE5D JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0xD1C JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0xE52 JUMPI PUSH2 0xE52 PUSH2 0xCF3 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0xD1C JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0xE80 JUMPI POP DUP2 DUP2 EXP PUSH2 0xD1C JUMP JUMPDEST PUSH2 0xE8A DUP4 DUP4 PUSH2 0xDC2 JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0xE9E JUMPI PUSH2 0xE9E PUSH2 0xCF3 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x434 DUP4 DUP4 PUSH2 0xE05 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xECF JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0xD1C JUMPI PUSH2 0xD1C PUSH2 0xCF3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xEFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP8 0xD5 0xD6 PUSH15 0xBE24563749D9FD7A227A0C92A1467 DUP9 0x5C EQ GAS GT MLOAD DUP1 0xD4 0xC3 PUSH29 0x79757264736F6C63430008110033000000000000000000000000000000 ","sourceMap":"998:5007:83:-:0;;;1653:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1697:22:83;;1689:56;;;;-1:-1:-1;;;1689:56:83;;511:2:181;1689:56:83;;;493:21:181;550:2;530:18;;;523:30;589:23;569:18;;;562:51;630:18;;1689:56:83;;;;;;;;1752:7;:18;;-1:-1:-1;;;;;;1752:18:83;-1:-1:-1;;;;;1752:18:83;;;;;1776:21;1786:10;1776:9;:21::i;:::-;1653:149;998:5007;;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;14:290:181:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:181;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:181:o;309:345::-;998:5007:83;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_setOwner_49908":{"entryPoint":2824,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":2925,"id":49927,"parameterSlots":1,"returnSlots":0},"@acceptProposedOwner_49887":{"entryPoint":2256,"id":49887,"parameterSlots":0,"returnSlots":0},"@aggregators_22586":{"entryPoint":null,"id":22586,"parameterSlots":0,"returnSlots":0},"@assetPrices_22596":{"entryPoint":null,"id":22596,"parameterSlots":0,"returnSlots":0},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@getPriceFromChainlink_22900":{"entryPoint":1656,"id":22900,"parameterSlots":1,"returnSlots":1},"@getPriceFromOracle_22774":{"entryPoint":1064,"id":22774,"parameterSlots":1,"returnSlots":1},"@getTokenPrice_22758":{"entryPoint":2516,"id":22758,"parameterSlots":1,"returnSlots":2},"@isPriceOracle_24100":{"entryPoint":null,"id":24100,"parameterSlots":0,"returnSlots":0},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@proposeNewOwner_49841":{"entryPoint":2095,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_49874":{"entryPoint":1476,"id":49874,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@setAggregators_23043":{"entryPoint":716,"id":23043,"parameterSlots":4,"returnSlots":0},"@setDirectPrice_22976":{"entryPoint":1083,"id":22976,"parameterSlots":3,"returnSlots":0},"@setV1PriceOracle_22993":{"entryPoint":2368,"id":22993,"parameterSlots":1,"returnSlots":0},"@v1PriceOracle_22575":{"entryPoint":null,"id":22575,"parameterSlots":0,"returnSlots":0},"@wrapped_22573":{"entryPoint":null,"id":22573,"parameterSlots":0,"returnSlots":0},"abi_decode_address":{"entryPoint":3003,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn_calldata":{"entryPoint":3058,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":3031,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_uint256t_uint256":{"entryPoint":3242,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptr":{"entryPoint":3134,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":3819,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint80t_int256t_uint256t_uint256t_uint80_fromMemory":{"entryPoint":3388,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_uint8_fromMemory":{"entryPoint":3487,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint80_fromMemory":{"entryPoint":3362,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_AggregatorV3Interface_$22566__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_09d79b800c98f52c04fd901caf943e1f149658482bee7ed49b055432a4617ba7__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ed372387319ab63e354aa0d7833c233303564edb926acd70de198951c4b35b79__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fd972d2f7059975408733d0027af02f68a86abdae415cfd4f9f6ec59581f8976__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":3468,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":3762,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":3522,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":3750,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":3589,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":3796,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":3337,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":3315,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":3293,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:8163:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:124:181","statements":[{"nodeType":"YulAssignment","src":"73:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:181"},"nodeType":"YulFunctionCall","src":"82:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:181"}]},{"body":{"nodeType":"YulBlock","src":"165:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"174:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"177:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"167:6:181"},"nodeType":"YulFunctionCall","src":"167:12:181"},"nodeType":"YulExpressionStatement","src":"167:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"155:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"146:3:181"},"nodeType":"YulFunctionCall","src":"146:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"142:3:181"},"nodeType":"YulFunctionCall","src":"142:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:181"},"nodeType":"YulFunctionCall","src":"131:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:181"},"nodeType":"YulFunctionCall","src":"121:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:181"},"nodeType":"YulFunctionCall","src":"114:50:181"},"nodeType":"YulIf","src":"111:70:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:181","type":""}],"src":"14:173:181"},{"body":{"nodeType":"YulBlock","src":"262:116:181","statements":[{"body":{"nodeType":"YulBlock","src":"308:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"317:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"320:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"310:6:181"},"nodeType":"YulFunctionCall","src":"310:12:181"},"nodeType":"YulExpressionStatement","src":"310:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"283:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"292:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"279:3:181"},"nodeType":"YulFunctionCall","src":"279:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"304:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"275:3:181"},"nodeType":"YulFunctionCall","src":"275:32:181"},"nodeType":"YulIf","src":"272:52:181"},{"nodeType":"YulAssignment","src":"333:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"362:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"343:18:181"},"nodeType":"YulFunctionCall","src":"343:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"333:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"228:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"239:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"251:6:181","type":""}],"src":"192:186:181"},{"body":{"nodeType":"YulBlock","src":"515:102:181","statements":[{"nodeType":"YulAssignment","src":"525:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"537:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"548:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"533:3:181"},"nodeType":"YulFunctionCall","src":"533:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"525:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"567:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"582:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"598:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"603:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"594:3:181"},"nodeType":"YulFunctionCall","src":"594:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"607:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"590:3:181"},"nodeType":"YulFunctionCall","src":"590:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"578:3:181"},"nodeType":"YulFunctionCall","src":"578:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"560:6:181"},"nodeType":"YulFunctionCall","src":"560:51:181"},"nodeType":"YulExpressionStatement","src":"560:51:181"}]},"name":"abi_encode_tuple_t_contract$_AggregatorV3Interface_$22566__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"484:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"495:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"506:4:181","type":""}],"src":"383:234:181"},{"body":{"nodeType":"YulBlock","src":"723:76:181","statements":[{"nodeType":"YulAssignment","src":"733:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"745:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"756:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"741:3:181"},"nodeType":"YulFunctionCall","src":"741:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"733:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"775:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"786:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"768:6:181"},"nodeType":"YulFunctionCall","src":"768:25:181"},"nodeType":"YulExpressionStatement","src":"768:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"692:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"703:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"714:4:181","type":""}],"src":"622:177:181"},{"body":{"nodeType":"YulBlock","src":"888:283:181","statements":[{"body":{"nodeType":"YulBlock","src":"937:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"946:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"949:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"939:6:181"},"nodeType":"YulFunctionCall","src":"939:12:181"},"nodeType":"YulExpressionStatement","src":"939:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"916:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"924:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"912:3:181"},"nodeType":"YulFunctionCall","src":"912:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"931:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"908:3:181"},"nodeType":"YulFunctionCall","src":"908:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"901:6:181"},"nodeType":"YulFunctionCall","src":"901:35:181"},"nodeType":"YulIf","src":"898:55:181"},{"nodeType":"YulAssignment","src":"962:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"985:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"972:12:181"},"nodeType":"YulFunctionCall","src":"972:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"962:6:181"}]},{"body":{"nodeType":"YulBlock","src":"1035:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1044:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1047:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1037:6:181"},"nodeType":"YulFunctionCall","src":"1037:12:181"},"nodeType":"YulExpressionStatement","src":"1037:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1007:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1015:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1004:2:181"},"nodeType":"YulFunctionCall","src":"1004:30:181"},"nodeType":"YulIf","src":"1001:50:181"},{"nodeType":"YulAssignment","src":"1060:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1076:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1084:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1072:3:181"},"nodeType":"YulFunctionCall","src":"1072:17:181"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"1060:8:181"}]},{"body":{"nodeType":"YulBlock","src":"1149:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1158:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1161:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1151:6:181"},"nodeType":"YulFunctionCall","src":"1151:12:181"},"nodeType":"YulExpressionStatement","src":"1151:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1112:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1124:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"1127:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1120:3:181"},"nodeType":"YulFunctionCall","src":"1120:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1108:3:181"},"nodeType":"YulFunctionCall","src":"1108:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"1137:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1104:3:181"},"nodeType":"YulFunctionCall","src":"1104:38:181"},{"name":"end","nodeType":"YulIdentifier","src":"1144:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1101:2:181"},"nodeType":"YulFunctionCall","src":"1101:47:181"},"nodeType":"YulIf","src":"1098:67:181"}]},"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"851:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"859:3:181","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"867:8:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"877:6:181","type":""}],"src":"804:367:181"},{"body":{"nodeType":"YulBlock","src":"1333:616:181","statements":[{"body":{"nodeType":"YulBlock","src":"1379:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1388:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1391:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1381:6:181"},"nodeType":"YulFunctionCall","src":"1381:12:181"},"nodeType":"YulExpressionStatement","src":"1381:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1354:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1363:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1350:3:181"},"nodeType":"YulFunctionCall","src":"1350:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1375:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1346:3:181"},"nodeType":"YulFunctionCall","src":"1346:32:181"},"nodeType":"YulIf","src":"1343:52:181"},{"nodeType":"YulVariableDeclaration","src":"1404:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1431:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1418:12:181"},"nodeType":"YulFunctionCall","src":"1418:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1408:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1450:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1460:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1454:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1505:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1514:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1517:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1507:6:181"},"nodeType":"YulFunctionCall","src":"1507:12:181"},"nodeType":"YulExpressionStatement","src":"1507:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1493:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1501:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1490:2:181"},"nodeType":"YulFunctionCall","src":"1490:14:181"},"nodeType":"YulIf","src":"1487:34:181"},{"nodeType":"YulVariableDeclaration","src":"1530:96:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1598:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1609:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1594:3:181"},"nodeType":"YulFunctionCall","src":"1594:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1618:7:181"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"1556:37:181"},"nodeType":"YulFunctionCall","src":"1556:70:181"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"1534:8:181","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"1544:8:181","type":""}]},{"nodeType":"YulAssignment","src":"1635:18:181","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"1645:8:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1635:6:181"}]},{"nodeType":"YulAssignment","src":"1662:18:181","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"1672:8:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1662:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1689:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1722:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1733:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1718:3:181"},"nodeType":"YulFunctionCall","src":"1718:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1705:12:181"},"nodeType":"YulFunctionCall","src":"1705:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"1693:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1766:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1775:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1778:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1768:6:181"},"nodeType":"YulFunctionCall","src":"1768:12:181"},"nodeType":"YulExpressionStatement","src":"1768:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"1752:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1762:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1749:2:181"},"nodeType":"YulFunctionCall","src":"1749:16:181"},"nodeType":"YulIf","src":"1746:36:181"},{"nodeType":"YulVariableDeclaration","src":"1791:98:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1859:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"1870:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1855:3:181"},"nodeType":"YulFunctionCall","src":"1855:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1881:7:181"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"1817:37:181"},"nodeType":"YulFunctionCall","src":"1817:72:181"},"variables":[{"name":"value2_1","nodeType":"YulTypedName","src":"1795:8:181","type":""},{"name":"value3_1","nodeType":"YulTypedName","src":"1805:8:181","type":""}]},{"nodeType":"YulAssignment","src":"1898:18:181","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"1908:8:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1898:6:181"}]},{"nodeType":"YulAssignment","src":"1925:18:181","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"1935:8:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1925:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1275:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1286:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1298:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1306:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1314:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1322:6:181","type":""}],"src":"1176:773:181"},{"body":{"nodeType":"YulBlock","src":"2055:102:181","statements":[{"nodeType":"YulAssignment","src":"2065:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2077:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2088:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2073:3:181"},"nodeType":"YulFunctionCall","src":"2073:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2065:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2107:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2122:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2138:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2143:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2134:3:181"},"nodeType":"YulFunctionCall","src":"2134:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2147:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2130:3:181"},"nodeType":"YulFunctionCall","src":"2130:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2118:3:181"},"nodeType":"YulFunctionCall","src":"2118:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2100:6:181"},"nodeType":"YulFunctionCall","src":"2100:51:181"},"nodeType":"YulExpressionStatement","src":"2100:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2024:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2035:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2046:4:181","type":""}],"src":"1954:203:181"},{"body":{"nodeType":"YulBlock","src":"2266:218:181","statements":[{"body":{"nodeType":"YulBlock","src":"2312:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2321:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2324:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2314:6:181"},"nodeType":"YulFunctionCall","src":"2314:12:181"},"nodeType":"YulExpressionStatement","src":"2314:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2287:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2296:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2283:3:181"},"nodeType":"YulFunctionCall","src":"2283:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2308:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2279:3:181"},"nodeType":"YulFunctionCall","src":"2279:32:181"},"nodeType":"YulIf","src":"2276:52:181"},{"nodeType":"YulAssignment","src":"2337:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2366:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2347:18:181"},"nodeType":"YulFunctionCall","src":"2347:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2337:6:181"}]},{"nodeType":"YulAssignment","src":"2385:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2412:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2423:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2408:3:181"},"nodeType":"YulFunctionCall","src":"2408:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2395:12:181"},"nodeType":"YulFunctionCall","src":"2395:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2385:6:181"}]},{"nodeType":"YulAssignment","src":"2436:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2463:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2474:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2459:3:181"},"nodeType":"YulFunctionCall","src":"2459:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2446:12:181"},"nodeType":"YulFunctionCall","src":"2446:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2436:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2216:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2227:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2239:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2247:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2255:6:181","type":""}],"src":"2162:322:181"},{"body":{"nodeType":"YulBlock","src":"2618:119:181","statements":[{"nodeType":"YulAssignment","src":"2628:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2640:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2651:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2636:3:181"},"nodeType":"YulFunctionCall","src":"2636:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2628:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2670:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"2681:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2663:6:181"},"nodeType":"YulFunctionCall","src":"2663:25:181"},"nodeType":"YulExpressionStatement","src":"2663:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2708:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2719:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2704:3:181"},"nodeType":"YulFunctionCall","src":"2704:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"2724:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2697:6:181"},"nodeType":"YulFunctionCall","src":"2697:34:181"},"nodeType":"YulExpressionStatement","src":"2697:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2579:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2590:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2598:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2609:4:181","type":""}],"src":"2489:248:181"},{"body":{"nodeType":"YulBlock","src":"2837:92:181","statements":[{"nodeType":"YulAssignment","src":"2847:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2859:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2870:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2855:3:181"},"nodeType":"YulFunctionCall","src":"2855:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2847:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2889:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2914:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2907:6:181"},"nodeType":"YulFunctionCall","src":"2907:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2900:6:181"},"nodeType":"YulFunctionCall","src":"2900:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2882:6:181"},"nodeType":"YulFunctionCall","src":"2882:41:181"},"nodeType":"YulExpressionStatement","src":"2882:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2806:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2817:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2828:4:181","type":""}],"src":"2742:187:181"},{"body":{"nodeType":"YulBlock","src":"2966:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2983:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2990:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2995:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2986:3:181"},"nodeType":"YulFunctionCall","src":"2986:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2976:6:181"},"nodeType":"YulFunctionCall","src":"2976:31:181"},"nodeType":"YulExpressionStatement","src":"2976:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3023:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3026:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3016:6:181"},"nodeType":"YulFunctionCall","src":"3016:15:181"},"nodeType":"YulExpressionStatement","src":"3016:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3047:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3050:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3040:6:181"},"nodeType":"YulFunctionCall","src":"3040:15:181"},"nodeType":"YulExpressionStatement","src":"3040:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"2934:127:181"},{"body":{"nodeType":"YulBlock","src":"3195:175:181","statements":[{"nodeType":"YulAssignment","src":"3205:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3217:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3228:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3213:3:181"},"nodeType":"YulFunctionCall","src":"3213:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3205:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"3240:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3258:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3263:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3254:3:181"},"nodeType":"YulFunctionCall","src":"3254:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3267:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3250:3:181"},"nodeType":"YulFunctionCall","src":"3250:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3244:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3285:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3300:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3308:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3296:3:181"},"nodeType":"YulFunctionCall","src":"3296:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3278:6:181"},"nodeType":"YulFunctionCall","src":"3278:34:181"},"nodeType":"YulExpressionStatement","src":"3278:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3332:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3343:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3328:3:181"},"nodeType":"YulFunctionCall","src":"3328:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3352:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3360:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3348:3:181"},"nodeType":"YulFunctionCall","src":"3348:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3321:6:181"},"nodeType":"YulFunctionCall","src":"3321:43:181"},"nodeType":"YulExpressionStatement","src":"3321:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3156:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3167:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3175:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3186:4:181","type":""}],"src":"3066:304:181"},{"body":{"nodeType":"YulBlock","src":"3549:158:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3566:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3577:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3559:6:181"},"nodeType":"YulFunctionCall","src":"3559:21:181"},"nodeType":"YulExpressionStatement","src":"3559:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3600:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3611:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3596:3:181"},"nodeType":"YulFunctionCall","src":"3596:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3616:1:181","type":"","value":"9"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3589:6:181"},"nodeType":"YulFunctionCall","src":"3589:29:181"},"nodeType":"YulExpressionStatement","src":"3589:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3638:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3649:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3634:3:181"},"nodeType":"YulFunctionCall","src":"3634:18:181"},{"hexValue":"626164207072696365","kind":"string","nodeType":"YulLiteral","src":"3654:11:181","type":"","value":"bad price"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3627:6:181"},"nodeType":"YulFunctionCall","src":"3627:39:181"},"nodeType":"YulExpressionStatement","src":"3627:39:181"},{"nodeType":"YulAssignment","src":"3675:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3687:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3698:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3683:3:181"},"nodeType":"YulFunctionCall","src":"3683:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3675:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_09d79b800c98f52c04fd901caf943e1f149658482bee7ed49b055432a4617ba7__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3526:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3540:4:181","type":""}],"src":"3375:332:181"},{"body":{"nodeType":"YulBlock","src":"3744:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3761:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3768:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"3773:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3764:3:181"},"nodeType":"YulFunctionCall","src":"3764:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3754:6:181"},"nodeType":"YulFunctionCall","src":"3754:31:181"},"nodeType":"YulExpressionStatement","src":"3754:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3801:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3804:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3794:6:181"},"nodeType":"YulFunctionCall","src":"3794:15:181"},"nodeType":"YulExpressionStatement","src":"3794:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3825:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3828:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3818:6:181"},"nodeType":"YulFunctionCall","src":"3818:15:181"},"nodeType":"YulExpressionStatement","src":"3818:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"3712:127:181"},{"body":{"nodeType":"YulBlock","src":"3893:79:181","statements":[{"nodeType":"YulAssignment","src":"3903:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3915:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"3918:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3911:3:181"},"nodeType":"YulFunctionCall","src":"3911:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"3903:4:181"}]},{"body":{"nodeType":"YulBlock","src":"3944:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3946:16:181"},"nodeType":"YulFunctionCall","src":"3946:18:181"},"nodeType":"YulExpressionStatement","src":"3946:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"3935:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"3941:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3932:2:181"},"nodeType":"YulFunctionCall","src":"3932:11:181"},"nodeType":"YulIf","src":"3929:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3875:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"3878:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"3884:4:181","type":""}],"src":"3844:128:181"},{"body":{"nodeType":"YulBlock","src":"4151:163:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4168:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4179:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4161:6:181"},"nodeType":"YulFunctionCall","src":"4161:21:181"},"nodeType":"YulExpressionStatement","src":"4161:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4202:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4213:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4198:3:181"},"nodeType":"YulFunctionCall","src":"4198:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4218:2:181","type":"","value":"13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4191:6:181"},"nodeType":"YulFunctionCall","src":"4191:30:181"},"nodeType":"YulExpressionStatement","src":"4191:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4241:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4252:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4237:3:181"},"nodeType":"YulFunctionCall","src":"4237:18:181"},{"hexValue":"6261642074696d657374616d70","kind":"string","nodeType":"YulLiteral","src":"4257:15:181","type":"","value":"bad timestamp"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4230:6:181"},"nodeType":"YulFunctionCall","src":"4230:43:181"},"nodeType":"YulExpressionStatement","src":"4230:43:181"},{"nodeType":"YulAssignment","src":"4282:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4294:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4305:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4290:3:181"},"nodeType":"YulFunctionCall","src":"4290:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4282:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_fd972d2f7059975408733d0027af02f68a86abdae415cfd4f9f6ec59581f8976__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4128:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4142:4:181","type":""}],"src":"3977:337:181"},{"body":{"nodeType":"YulBlock","src":"4493:158:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4510:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4521:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4503:6:181"},"nodeType":"YulFunctionCall","src":"4503:21:181"},"nodeType":"YulExpressionStatement","src":"4503:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4544:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4555:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4540:3:181"},"nodeType":"YulFunctionCall","src":"4540:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4560:1:181","type":"","value":"9"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4533:6:181"},"nodeType":"YulFunctionCall","src":"4533:29:181"},"nodeType":"YulExpressionStatement","src":"4533:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4582:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4593:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4578:3:181"},"nodeType":"YulFunctionCall","src":"4578:18:181"},{"hexValue":"696e20667574757265","kind":"string","nodeType":"YulLiteral","src":"4598:11:181","type":"","value":"in future"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4571:6:181"},"nodeType":"YulFunctionCall","src":"4571:39:181"},"nodeType":"YulExpressionStatement","src":"4571:39:181"},{"nodeType":"YulAssignment","src":"4619:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4631:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4642:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4627:3:181"},"nodeType":"YulFunctionCall","src":"4627:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4619:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ed372387319ab63e354aa0d7833c233303564edb926acd70de198951c4b35b79__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4470:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4484:4:181","type":""}],"src":"4319:332:181"},{"body":{"nodeType":"YulBlock","src":"4813:188:181","statements":[{"nodeType":"YulAssignment","src":"4823:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4835:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4846:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4831:3:181"},"nodeType":"YulFunctionCall","src":"4831:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4823:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4865:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4880:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4896:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4901:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4892:3:181"},"nodeType":"YulFunctionCall","src":"4892:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4905:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4888:3:181"},"nodeType":"YulFunctionCall","src":"4888:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4876:3:181"},"nodeType":"YulFunctionCall","src":"4876:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4858:6:181"},"nodeType":"YulFunctionCall","src":"4858:51:181"},"nodeType":"YulExpressionStatement","src":"4858:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4929:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4940:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4925:3:181"},"nodeType":"YulFunctionCall","src":"4925:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"4945:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4918:6:181"},"nodeType":"YulFunctionCall","src":"4918:34:181"},"nodeType":"YulExpressionStatement","src":"4918:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4972:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4983:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4968:3:181"},"nodeType":"YulFunctionCall","src":"4968:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"4988:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4961:6:181"},"nodeType":"YulFunctionCall","src":"4961:34:181"},"nodeType":"YulExpressionStatement","src":"4961:34:181"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4766:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4777:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4785:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4793:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4804:4:181","type":""}],"src":"4656:345:181"},{"body":{"nodeType":"YulBlock","src":"5065:120:181","statements":[{"nodeType":"YulAssignment","src":"5075:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5090:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5084:5:181"},"nodeType":"YulFunctionCall","src":"5084:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"5075:5:181"}]},{"body":{"nodeType":"YulBlock","src":"5163:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5172:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5175:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5165:6:181"},"nodeType":"YulFunctionCall","src":"5165:12:181"},"nodeType":"YulExpressionStatement","src":"5165:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5119:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5130:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5137:22:181","type":"","value":"0xffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5126:3:181"},"nodeType":"YulFunctionCall","src":"5126:34:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5116:2:181"},"nodeType":"YulFunctionCall","src":"5116:45:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5109:6:181"},"nodeType":"YulFunctionCall","src":"5109:53:181"},"nodeType":"YulIf","src":"5106:73:181"}]},"name":"abi_decode_uint80_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"5044:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"5055:5:181","type":""}],"src":"5006:179:181"},{"body":{"nodeType":"YulBlock","src":"5336:327:181","statements":[{"body":{"nodeType":"YulBlock","src":"5383:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5392:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5395:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5385:6:181"},"nodeType":"YulFunctionCall","src":"5385:12:181"},"nodeType":"YulExpressionStatement","src":"5385:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5357:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5366:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5353:3:181"},"nodeType":"YulFunctionCall","src":"5353:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5378:3:181","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5349:3:181"},"nodeType":"YulFunctionCall","src":"5349:33:181"},"nodeType":"YulIf","src":"5346:53:181"},{"nodeType":"YulAssignment","src":"5408:49:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5447:9:181"}],"functionName":{"name":"abi_decode_uint80_fromMemory","nodeType":"YulIdentifier","src":"5418:28:181"},"nodeType":"YulFunctionCall","src":"5418:39:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5408:6:181"}]},{"nodeType":"YulAssignment","src":"5466:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5486:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5497:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5482:3:181"},"nodeType":"YulFunctionCall","src":"5482:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5476:5:181"},"nodeType":"YulFunctionCall","src":"5476:25:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5466:6:181"}]},{"nodeType":"YulAssignment","src":"5510:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5530:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5541:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5526:3:181"},"nodeType":"YulFunctionCall","src":"5526:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5520:5:181"},"nodeType":"YulFunctionCall","src":"5520:25:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5510:6:181"}]},{"nodeType":"YulAssignment","src":"5554:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5574:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5585:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5570:3:181"},"nodeType":"YulFunctionCall","src":"5570:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5564:5:181"},"nodeType":"YulFunctionCall","src":"5564:25:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5554:6:181"}]},{"nodeType":"YulAssignment","src":"5598:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5641:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5652:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5637:3:181"},"nodeType":"YulFunctionCall","src":"5637:19:181"}],"functionName":{"name":"abi_decode_uint80_fromMemory","nodeType":"YulIdentifier","src":"5608:28:181"},"nodeType":"YulFunctionCall","src":"5608:49:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"5598:6:181"}]}]},"name":"abi_decode_tuple_t_uint80t_int256t_uint256t_uint256t_uint80_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5270:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5281:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5293:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5301:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5309:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5317:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"5325:6:181","type":""}],"src":"5190:473:181"},{"body":{"nodeType":"YulBlock","src":"5716:77:181","statements":[{"nodeType":"YulAssignment","src":"5726:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5737:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"5740:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5733:3:181"},"nodeType":"YulFunctionCall","src":"5733:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"5726:3:181"}]},{"body":{"nodeType":"YulBlock","src":"5765:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"5767:16:181"},"nodeType":"YulFunctionCall","src":"5767:18:181"},"nodeType":"YulExpressionStatement","src":"5767:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5757:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"5760:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5754:2:181"},"nodeType":"YulFunctionCall","src":"5754:10:181"},"nodeType":"YulIf","src":"5751:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"5699:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"5702:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"5708:3:181","type":""}],"src":"5668:125:181"},{"body":{"nodeType":"YulBlock","src":"5877:194:181","statements":[{"body":{"nodeType":"YulBlock","src":"5923:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5932:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5935:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5925:6:181"},"nodeType":"YulFunctionCall","src":"5925:12:181"},"nodeType":"YulExpressionStatement","src":"5925:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5898:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5907:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5894:3:181"},"nodeType":"YulFunctionCall","src":"5894:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5919:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5890:3:181"},"nodeType":"YulFunctionCall","src":"5890:32:181"},"nodeType":"YulIf","src":"5887:52:181"},{"nodeType":"YulVariableDeclaration","src":"5948:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5967:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5961:5:181"},"nodeType":"YulFunctionCall","src":"5961:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5952:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6025:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6034:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6037:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6027:6:181"},"nodeType":"YulFunctionCall","src":"6027:12:181"},"nodeType":"YulExpressionStatement","src":"6027:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5999:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6010:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"6017:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6006:3:181"},"nodeType":"YulFunctionCall","src":"6006:16:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5996:2:181"},"nodeType":"YulFunctionCall","src":"5996:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5989:6:181"},"nodeType":"YulFunctionCall","src":"5989:35:181"},"nodeType":"YulIf","src":"5986:55:181"},{"nodeType":"YulAssignment","src":"6050:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"6060:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6050:6:181"}]}]},"name":"abi_decode_tuple_t_uint8_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5843:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5854:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5866:6:181","type":""}],"src":"5798:273:181"},{"body":{"nodeType":"YulBlock","src":"6140:358:181","statements":[{"nodeType":"YulVariableDeclaration","src":"6150:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6165:1:181","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"6154:7:181","type":""}]},{"nodeType":"YulAssignment","src":"6175:16:181","value":{"name":"power_1","nodeType":"YulIdentifier","src":"6184:7:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"6175:5:181"}]},{"nodeType":"YulAssignment","src":"6200:13:181","value":{"name":"_base","nodeType":"YulIdentifier","src":"6208:5:181"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"6200:4:181"}]},{"body":{"nodeType":"YulBlock","src":"6264:228:181","statements":[{"body":{"nodeType":"YulBlock","src":"6309:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6311:16:181"},"nodeType":"YulFunctionCall","src":"6311:18:181"},"nodeType":"YulExpressionStatement","src":"6311:18:181"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"6284:4:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6298:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6294:3:181"},"nodeType":"YulFunctionCall","src":"6294:6:181"},{"name":"base","nodeType":"YulIdentifier","src":"6302:4:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"6290:3:181"},"nodeType":"YulFunctionCall","src":"6290:17:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6281:2:181"},"nodeType":"YulFunctionCall","src":"6281:27:181"},"nodeType":"YulIf","src":"6278:53:181"},{"body":{"nodeType":"YulBlock","src":"6370:29:181","statements":[{"nodeType":"YulAssignment","src":"6372:25:181","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"6385:5:181"},{"name":"base","nodeType":"YulIdentifier","src":"6392:4:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"6381:3:181"},"nodeType":"YulFunctionCall","src":"6381:16:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"6372:5:181"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"6351:8:181"},{"name":"power_1","nodeType":"YulIdentifier","src":"6361:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6347:3:181"},"nodeType":"YulFunctionCall","src":"6347:22:181"},"nodeType":"YulIf","src":"6344:55:181"},{"nodeType":"YulAssignment","src":"6412:23:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"6424:4:181"},{"name":"base","nodeType":"YulIdentifier","src":"6430:4:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"6420:3:181"},"nodeType":"YulFunctionCall","src":"6420:15:181"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"6412:4:181"}]},{"nodeType":"YulAssignment","src":"6448:34:181","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"6464:7:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"6473:8:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"6460:3:181"},"nodeType":"YulFunctionCall","src":"6460:22:181"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"6448:8:181"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"6233:8:181"},{"name":"power_1","nodeType":"YulIdentifier","src":"6243:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6230:2:181"},"nodeType":"YulFunctionCall","src":"6230:21:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6252:3:181","statements":[]},"pre":{"nodeType":"YulBlock","src":"6226:3:181","statements":[]},"src":"6222:270:181"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"6104:5:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"6111:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"6124:5:181","type":""},{"name":"base","nodeType":"YulTypedName","src":"6131:4:181","type":""}],"src":"6076:422:181"},{"body":{"nodeType":"YulBlock","src":"6562:747:181","statements":[{"body":{"nodeType":"YulBlock","src":"6600:52:181","statements":[{"nodeType":"YulAssignment","src":"6614:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6623:1:181","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"6614:5:181"}]},{"nodeType":"YulLeave","src":"6637:5:181"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"6582:8:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6575:6:181"},"nodeType":"YulFunctionCall","src":"6575:16:181"},"nodeType":"YulIf","src":"6572:80:181"},{"body":{"nodeType":"YulBlock","src":"6685:52:181","statements":[{"nodeType":"YulAssignment","src":"6699:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6708:1:181","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"6699:5:181"}]},{"nodeType":"YulLeave","src":"6722:5:181"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"6671:4:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6664:6:181"},"nodeType":"YulFunctionCall","src":"6664:12:181"},"nodeType":"YulIf","src":"6661:76:181"},{"cases":[{"body":{"nodeType":"YulBlock","src":"6773:52:181","statements":[{"nodeType":"YulAssignment","src":"6787:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6796:1:181","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"6787:5:181"}]},{"nodeType":"YulLeave","src":"6810:5:181"}]},"nodeType":"YulCase","src":"6766:59:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6771:1:181","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"6841:123:181","statements":[{"body":{"nodeType":"YulBlock","src":"6876:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6878:16:181"},"nodeType":"YulFunctionCall","src":"6878:18:181"},"nodeType":"YulExpressionStatement","src":"6878:18:181"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"6861:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"6871:3:181","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6858:2:181"},"nodeType":"YulFunctionCall","src":"6858:17:181"},"nodeType":"YulIf","src":"6855:43:181"},{"nodeType":"YulAssignment","src":"6911:25:181","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"6924:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"6934:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6920:3:181"},"nodeType":"YulFunctionCall","src":"6920:16:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"6911:5:181"}]},{"nodeType":"YulLeave","src":"6949:5:181"}]},"nodeType":"YulCase","src":"6834:130:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6839:1:181","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"6753:4:181"},"nodeType":"YulSwitch","src":"6746:218:181"},{"body":{"nodeType":"YulBlock","src":"7062:70:181","statements":[{"nodeType":"YulAssignment","src":"7076:28:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"7089:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"7095:8:181"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"7085:3:181"},"nodeType":"YulFunctionCall","src":"7085:19:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"7076:5:181"}]},{"nodeType":"YulLeave","src":"7117:5:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"6986:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"6992:2:181","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6983:2:181"},"nodeType":"YulFunctionCall","src":"6983:12:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"7000:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"7010:2:181","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6997:2:181"},"nodeType":"YulFunctionCall","src":"6997:16:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6979:3:181"},"nodeType":"YulFunctionCall","src":"6979:35:181"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"7023:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"7029:3:181","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7020:2:181"},"nodeType":"YulFunctionCall","src":"7020:13:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"7038:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"7048:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7035:2:181"},"nodeType":"YulFunctionCall","src":"7035:16:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7016:3:181"},"nodeType":"YulFunctionCall","src":"7016:36:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"6976:2:181"},"nodeType":"YulFunctionCall","src":"6976:77:181"},"nodeType":"YulIf","src":"6973:159:181"},{"nodeType":"YulVariableDeclaration","src":"7141:57:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"7183:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"7189:8:181"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"7164:18:181"},"nodeType":"YulFunctionCall","src":"7164:34:181"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"7145:7:181","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"7154:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7243:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7245:16:181"},"nodeType":"YulFunctionCall","src":"7245:18:181"},"nodeType":"YulExpressionStatement","src":"7245:18:181"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"7213:7:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7230:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7226:3:181"},"nodeType":"YulFunctionCall","src":"7226:6:181"},{"name":"base_1","nodeType":"YulIdentifier","src":"7234:6:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"7222:3:181"},"nodeType":"YulFunctionCall","src":"7222:19:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7210:2:181"},"nodeType":"YulFunctionCall","src":"7210:32:181"},"nodeType":"YulIf","src":"7207:58:181"},{"nodeType":"YulAssignment","src":"7274:29:181","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"7287:7:181"},{"name":"base_1","nodeType":"YulIdentifier","src":"7296:6:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"7283:3:181"},"nodeType":"YulFunctionCall","src":"7283:20:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"7274:5:181"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"6533:4:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"6539:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"6552:5:181","type":""}],"src":"6503:806:181"},{"body":{"nodeType":"YulBlock","src":"7384:61:181","statements":[{"nodeType":"YulAssignment","src":"7394:45:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"7424:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"7430:8:181"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"7403:20:181"},"nodeType":"YulFunctionCall","src":"7403:36:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"7394:5:181"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"7355:4:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"7361:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"7374:5:181","type":""}],"src":"7314:131:181"},{"body":{"nodeType":"YulBlock","src":"7496:171:181","statements":[{"body":{"nodeType":"YulBlock","src":"7527:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7548:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7555:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"7560:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7551:3:181"},"nodeType":"YulFunctionCall","src":"7551:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7541:6:181"},"nodeType":"YulFunctionCall","src":"7541:31:181"},"nodeType":"YulExpressionStatement","src":"7541:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7592:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7595:4:181","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7585:6:181"},"nodeType":"YulFunctionCall","src":"7585:15:181"},"nodeType":"YulExpressionStatement","src":"7585:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7620:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7623:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7613:6:181"},"nodeType":"YulFunctionCall","src":"7613:15:181"},"nodeType":"YulExpressionStatement","src":"7613:15:181"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"7516:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7509:6:181"},"nodeType":"YulFunctionCall","src":"7509:9:181"},"nodeType":"YulIf","src":"7506:132:181"},{"nodeType":"YulAssignment","src":"7647:14:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7656:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"7659:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"7652:3:181"},"nodeType":"YulFunctionCall","src":"7652:9:181"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"7647:1:181"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"7481:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"7484:1:181","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"7490:1:181","type":""}],"src":"7450:217:181"},{"body":{"nodeType":"YulBlock","src":"7724:116:181","statements":[{"nodeType":"YulAssignment","src":"7734:20:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7749:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"7752:1:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"7745:3:181"},"nodeType":"YulFunctionCall","src":"7745:9:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"7734:7:181"}]},{"body":{"nodeType":"YulBlock","src":"7812:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7814:16:181"},"nodeType":"YulFunctionCall","src":"7814:18:181"},"nodeType":"YulExpressionStatement","src":"7814:18:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7783:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7776:6:181"},"nodeType":"YulFunctionCall","src":"7776:9:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"7790:1:181"},{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"7797:7:181"},{"name":"x","nodeType":"YulIdentifier","src":"7806:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"7793:3:181"},"nodeType":"YulFunctionCall","src":"7793:15:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"7787:2:181"},"nodeType":"YulFunctionCall","src":"7787:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7773:2:181"},"nodeType":"YulFunctionCall","src":"7773:37:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7766:6:181"},"nodeType":"YulFunctionCall","src":"7766:45:181"},"nodeType":"YulIf","src":"7763:71:181"}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"7703:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"7706:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"7712:7:181","type":""}],"src":"7672:168:181"},{"body":{"nodeType":"YulBlock","src":"7877:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7894:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7901:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"7906:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7897:3:181"},"nodeType":"YulFunctionCall","src":"7897:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7887:6:181"},"nodeType":"YulFunctionCall","src":"7887:31:181"},"nodeType":"YulExpressionStatement","src":"7887:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7934:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7937:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7927:6:181"},"nodeType":"YulFunctionCall","src":"7927:15:181"},"nodeType":"YulExpressionStatement","src":"7927:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7958:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7961:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7951:6:181"},"nodeType":"YulFunctionCall","src":"7951:15:181"},"nodeType":"YulExpressionStatement","src":"7951:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"7845:127:181"},{"body":{"nodeType":"YulBlock","src":"8058:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"8104:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8113:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8116:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8106:6:181"},"nodeType":"YulFunctionCall","src":"8106:12:181"},"nodeType":"YulExpressionStatement","src":"8106:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8079:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8088:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8075:3:181"},"nodeType":"YulFunctionCall","src":"8075:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"8100:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8071:3:181"},"nodeType":"YulFunctionCall","src":"8071:32:181"},"nodeType":"YulIf","src":"8068:52:181"},{"nodeType":"YulAssignment","src":"8129:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8145:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8139:5:181"},"nodeType":"YulFunctionCall","src":"8139:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8129:6:181"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8024:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8035:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8047:6:181","type":""}],"src":"7977:184:181"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_contract$_AggregatorV3Interface_$22566__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_array_address_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_09d79b800c98f52c04fd901caf943e1f149658482bee7ed49b055432a4617ba7__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 9)\n        mstore(add(headStart, 64), \"bad price\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_fd972d2f7059975408733d0027af02f68a86abdae415cfd4f9f6ec59581f8976__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 13)\n        mstore(add(headStart, 64), \"bad timestamp\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_ed372387319ab63e354aa0d7833c233303564edb926acd70de198951c4b35b79__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 9)\n        mstore(add(headStart, 64), \"in future\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_decode_uint80_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint80t_int256t_uint256t_uint256t_uint80_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := abi_decode_uint80_fromMemory(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        value3 := mload(add(headStart, 96))\n        value4 := abi_decode_uint80_fromMemory(add(headStart, 128))\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value0 := value\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(not(0), base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(not(0), base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        product := mul(x, y)\n        if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101215760003560e01c8063715018a6116100ad578063cb45c4f211610071578063cb45c4f214610270578063d02641a014610283578063d1851c9214610296578063d232c220146102a7578063fe10c98d146102b957600080fd5b8063715018a614610229578063856d562d146102315780638da5cb5b14610244578063b1f8100d14610255578063c5b350df1461026857600080fd5b8063538e573c116100f4578063538e573c146101a65780635e901bdf146101b95780635e9a523c146101cc57806366331bba146102085780636a42b8f81461022057600080fd5b8063112cdab9146101265780633cf52ffb1461016c5780633f9fb5051461017e57806350e70d4814610193575b600080fd5b61014f610134366004610bd7565b6005602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6002545b604051908152602001610163565b61019161018c366004610c3e565b6102cc565b005b60035461014f906001600160a01b031681565b6101706101b4366004610bd7565b610428565b6101916101c7366004610caa565b61043b565b6101f36101da366004610bd7565b6006602052600090815260409020805460019091015482565b60408051928352602083019190915201610163565b610210600181565b6040519015158152602001610163565b62093a80610170565b6101916105c4565b61017061023f366004610bd7565b610678565b6000546001600160a01b031661014f565b610191610263366004610bd7565b61082f565b6101916108d0565b61019161027e366004610bd7565b610940565b6101f3610291366004610bd7565b6109d4565b6001546001600160a01b031661014f565b6000546001600160a01b031615610210565b60045461014f906001600160a01b031681565b6000546001600160a01b031633146102f7576040516311a8a1bb60e31b815260040160405180910390fd5b8260005b818110156104205783838281811061031557610315610cdd565b905060200201602081019061032a9190610bd7565b6005600088888581811061034057610340610cdd565b90506020020160208101906103559190610bd7565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790557f89baabef7dfd0683c0ac16fd2a8431c51b49fbe654c3f7b5ef19763e2ccd88f28686838181106103b9576103b9610cdd565b90506020020160208101906103ce9190610bd7565b8585848181106103e0576103e0610cdd565b90506020020160208101906103f59190610bd7565b604080516001600160a01b0393841681529290911660208301520160405180910390a16001016102fb565b505050505050565b60008061043483610678565b9392505050565b6000546001600160a01b03163314610466576040516311a8a1bb60e31b815260040160405180910390fd5b816000036104a75760405162461bcd60e51b815260206004820152600960248201526862616420707269636560b81b60448201526064015b60405180910390fd5b804211156104fd57603c6104bb8242610d09565b106104f85760405162461bcd60e51b815260206004820152600d60248201526c06261642074696d657374616d7609c1b604482015260640161049e565b610545565b60036105094283610d09565b106105425760405162461bcd60e51b8152602060048201526009602482015268696e2066757475726560b81b604482015260640161049e565b50425b6001600160a01b0383166000818152600660209081526040918290206001015482519384529083015281018390527fe2c8fb681c257e4e8df5ef1c464cff10ce6b072837628c9b6de5e7239a483e5d9060600160405180910390a16001600160a01b039092166000908152600660205260409020600181019190915555565b6000546001600160a01b031633146105ef576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426106019190610d09565b1161061f576040516324e0285f60e21b815260040160405180910390fd5b60025460000361064257604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b03161561066c576040516323295ef960e01b815260040160405180910390fd5b6106766000610b08565b565b6001600160a01b03808216600090815260056020526040812054909116801561082657806001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156106f5575060408051601f3d908101601f191682019092526106f291810190610d3c565b60015b6107025750600092915050565b83158061072657508469ffffffffffffffffffff168169ffffffffffffffffffff16105b8061072f575081155b806107435750610740603c83610d8c565b42115b1561075657506000979650505050505050565b6000849050600080886001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561079c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c09190610d9f565b60ff16905060128111156107f5576107d9601282610d09565b6107e490600a610ea6565b6107ee9084610eb2565b9150610818565b610800816012610d09565b61080b90600a610ea6565b6108159084610ed4565b91505b509998505050505050505050565b50600092915050565b6000546001600160a01b0316331461085a576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610878575060025415155b15610896576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036108c457604051634a2fb73f60e11b815260040160405180910390fd5b6108cd81610b6d565b50565b6001546001600160a01b031633146108fb576040516311a7f27160e11b815260040160405180910390fd5b62093a806002544261090d9190610d09565b1161092b576040516324e0285f60e21b815260040160405180910390fd5b600154610676906001600160a01b0316610b08565b6000546001600160a01b0316331461096b576040516311a8a1bb60e31b815260040160405180910390fd5b600454604080516001600160a01b03928316815291831660208301527f42e2900b37aa23ca681e13d6efc8018181fa216ca6676cf2b983e00e056afc2c910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b600080826001600160a01b0381166109f457506003546001600160a01b03165b6001600160a01b0381166000908152600660205260409020600101548015801590610a4257506001600160a01b038216600090815260066020526040902054603c90610a409042610d09565b105b15610a56578060015b935093505050915091565b610a5f82610428565b90508015610a6f57806002610a4b565b6004546001600160a01b031615610b005760048054604051630681320d60e51b81526001600160a01b038581169382019390935291169063d02641a090602401602060405180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190610eeb565b90508015610b0057806003610a4b565b600080610a4b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b80356001600160a01b0381168114610bd257600080fd5b919050565b600060208284031215610be957600080fd5b61043482610bbb565b60008083601f840112610c0457600080fd5b50813567ffffffffffffffff811115610c1c57600080fd5b6020830191508360208260051b8501011115610c3757600080fd5b9250929050565b60008060008060408587031215610c5457600080fd5b843567ffffffffffffffff80821115610c6c57600080fd5b610c7888838901610bf2565b90965094506020870135915080821115610c9157600080fd5b50610c9e87828801610bf2565b95989497509550505050565b600080600060608486031215610cbf57600080fd5b610cc884610bbb565b95602085013595506040909401359392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610d1c57610d1c610cf3565b92915050565b805169ffffffffffffffffffff81168114610bd257600080fd5b600080600080600060a08688031215610d5457600080fd5b610d5d86610d22565b9450602086015193506040860151925060608601519150610d8060808701610d22565b90509295509295909350565b80820180821115610d1c57610d1c610cf3565b600060208284031215610db157600080fd5b815160ff8116811461043457600080fd5b600181815b80851115610dfd578160001904821115610de357610de3610cf3565b80851615610df057918102915b93841c9390800290610dc7565b509250929050565b600082610e1457506001610d1c565b81610e2157506000610d1c565b8160018114610e375760028114610e4157610e5d565b6001915050610d1c565b60ff841115610e5257610e52610cf3565b50506001821b610d1c565b5060208310610133831016604e8410600b8410161715610e80575081810a610d1c565b610e8a8383610dc2565b8060001904821115610e9e57610e9e610cf3565b029392505050565b60006104348383610e05565b600082610ecf57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610d1c57610d1c610cf3565b600060208284031215610efd57600080fd5b505191905056fea264697066735822122097d5d66e0be24563749d9fd7a227a0c92a1467885c145a115180d4c37c79757264736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x121 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xCB45C4F2 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xCB45C4F2 EQ PUSH2 0x270 JUMPI DUP1 PUSH4 0xD02641A0 EQ PUSH2 0x283 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x296 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0xFE10C98D EQ PUSH2 0x2B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x715018A6 EQ PUSH2 0x229 JUMPI DUP1 PUSH4 0x856D562D EQ PUSH2 0x231 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x244 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x255 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x268 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x538E573C GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0x538E573C EQ PUSH2 0x1A6 JUMPI DUP1 PUSH4 0x5E901BDF EQ PUSH2 0x1B9 JUMPI DUP1 PUSH4 0x5E9A523C EQ PUSH2 0x1CC JUMPI DUP1 PUSH4 0x66331BBA EQ PUSH2 0x208 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x112CDAB9 EQ PUSH2 0x126 JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0x3F9FB505 EQ PUSH2 0x17E JUMPI DUP1 PUSH4 0x50E70D48 EQ PUSH2 0x193 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x14F PUSH2 0x134 CALLDATASIZE PUSH1 0x4 PUSH2 0xBD7 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x163 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x18C CALLDATASIZE PUSH1 0x4 PUSH2 0xC3E JUMP JUMPDEST PUSH2 0x2CC JUMP JUMPDEST STOP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x14F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x170 PUSH2 0x1B4 CALLDATASIZE PUSH1 0x4 PUSH2 0xBD7 JUMP JUMPDEST PUSH2 0x428 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x1C7 CALLDATASIZE PUSH1 0x4 PUSH2 0xCAA JUMP JUMPDEST PUSH2 0x43B JUMP JUMPDEST PUSH2 0x1F3 PUSH2 0x1DA CALLDATASIZE PUSH1 0x4 PUSH2 0xBD7 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD DUP3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x163 JUMP JUMPDEST PUSH2 0x210 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x163 JUMP JUMPDEST PUSH3 0x93A80 PUSH2 0x170 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x5C4 JUMP JUMPDEST PUSH2 0x170 PUSH2 0x23F CALLDATASIZE PUSH1 0x4 PUSH2 0xBD7 JUMP JUMPDEST PUSH2 0x678 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x14F JUMP JUMPDEST PUSH2 0x191 PUSH2 0x263 CALLDATASIZE PUSH1 0x4 PUSH2 0xBD7 JUMP JUMPDEST PUSH2 0x82F JUMP JUMPDEST PUSH2 0x191 PUSH2 0x8D0 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x27E CALLDATASIZE PUSH1 0x4 PUSH2 0xBD7 JUMP JUMPDEST PUSH2 0x940 JUMP JUMPDEST PUSH2 0x1F3 PUSH2 0x291 CALLDATASIZE PUSH1 0x4 PUSH2 0xBD7 JUMP JUMPDEST PUSH2 0x9D4 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x14F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x210 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x14F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2F7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP3 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x420 JUMPI DUP4 DUP4 DUP3 DUP2 DUP2 LT PUSH2 0x315 JUMPI PUSH2 0x315 PUSH2 0xCDD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x32A SWAP2 SWAP1 PUSH2 0xBD7 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x0 DUP9 DUP9 DUP6 DUP2 DUP2 LT PUSH2 0x340 JUMPI PUSH2 0x340 PUSH2 0xCDD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x355 SWAP2 SWAP1 PUSH2 0xBD7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH32 0x89BAABEF7DFD0683C0AC16FD2A8431C51B49FBE654C3F7B5EF19763E2CCD88F2 DUP7 DUP7 DUP4 DUP2 DUP2 LT PUSH2 0x3B9 JUMPI PUSH2 0x3B9 PUSH2 0xCDD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x3CE SWAP2 SWAP1 PUSH2 0xBD7 JUMP JUMPDEST DUP6 DUP6 DUP5 DUP2 DUP2 LT PUSH2 0x3E0 JUMPI PUSH2 0x3E0 PUSH2 0xCDD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x3F5 SWAP2 SWAP1 PUSH2 0xBD7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x1 ADD PUSH2 0x2FB JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x434 DUP4 PUSH2 0x678 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x466 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x0 SUB PUSH2 0x4A7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x626164207072696365 PUSH1 0xB8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 TIMESTAMP GT ISZERO PUSH2 0x4FD JUMPI PUSH1 0x3C PUSH2 0x4BB DUP3 TIMESTAMP PUSH2 0xD09 JUMP JUMPDEST LT PUSH2 0x4F8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x6261642074696D657374616D7 PUSH1 0x9C SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x49E JUMP JUMPDEST PUSH2 0x545 JUMP JUMPDEST PUSH1 0x3 PUSH2 0x509 TIMESTAMP DUP4 PUSH2 0xD09 JUMP JUMPDEST LT PUSH2 0x542 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x696E20667574757265 PUSH1 0xB8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x49E JUMP JUMPDEST POP TIMESTAMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP3 MLOAD SWAP4 DUP5 MSTORE SWAP1 DUP4 ADD MSTORE DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0xE2C8FB681C257E4E8DF5EF1C464CFF10CE6B072837628C9B6DE5E7239A483E5D SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 DUP2 ADD SWAP2 SWAP1 SWAP2 SSTORE SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5EF JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x601 SWAP2 SWAP1 PUSH2 0xD09 JUMP JUMPDEST GT PUSH2 0x61F JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x642 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x66C JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x676 PUSH1 0x0 PUSH2 0xB08 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 AND DUP1 ISZERO PUSH2 0x826 JUMPI DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFEAF968C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x6F5 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x6F2 SWAP2 DUP2 ADD SWAP1 PUSH2 0xD3C JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x702 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP4 ISZERO DUP1 PUSH2 0x726 JUMPI POP DUP5 PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND LT JUMPDEST DUP1 PUSH2 0x72F JUMPI POP DUP2 ISZERO JUMPDEST DUP1 PUSH2 0x743 JUMPI POP PUSH2 0x740 PUSH1 0x3C DUP4 PUSH2 0xD8C JUMP JUMPDEST TIMESTAMP GT JUMPDEST ISZERO PUSH2 0x756 JUMPI POP PUSH1 0x0 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 SWAP1 POP PUSH1 0x0 DUP1 DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x79C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7C0 SWAP2 SWAP1 PUSH2 0xD9F JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x12 DUP2 GT ISZERO PUSH2 0x7F5 JUMPI PUSH2 0x7D9 PUSH1 0x12 DUP3 PUSH2 0xD09 JUMP JUMPDEST PUSH2 0x7E4 SWAP1 PUSH1 0xA PUSH2 0xEA6 JUMP JUMPDEST PUSH2 0x7EE SWAP1 DUP5 PUSH2 0xEB2 JUMP JUMPDEST SWAP2 POP PUSH2 0x818 JUMP JUMPDEST PUSH2 0x800 DUP2 PUSH1 0x12 PUSH2 0xD09 JUMP JUMPDEST PUSH2 0x80B SWAP1 PUSH1 0xA PUSH2 0xEA6 JUMP JUMPDEST PUSH2 0x815 SWAP1 DUP5 PUSH2 0xED4 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x85A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x878 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x896 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x8C4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x8CD DUP2 PUSH2 0xB6D JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x8FB JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x90D SWAP2 SWAP1 PUSH2 0xD09 JUMP JUMPDEST GT PUSH2 0x92B JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x676 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xB08 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x96B JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x42E2900B37AA23CA681E13D6EFC8018181FA216CA6676CF2B983E00E056AFC2C SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x9F4 JUMPI POP PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xA42 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x3C SWAP1 PUSH2 0xA40 SWAP1 TIMESTAMP PUSH2 0xD09 JUMP JUMPDEST LT JUMPDEST ISZERO PUSH2 0xA56 JUMPI DUP1 PUSH1 0x1 JUMPDEST SWAP4 POP SWAP4 POP POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH2 0xA5F DUP3 PUSH2 0x428 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xA6F JUMPI DUP1 PUSH1 0x2 PUSH2 0xA4B JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0xB00 JUMPI PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x681320D PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 AND SWAP1 PUSH4 0xD02641A0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xACC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAF0 SWAP2 SWAP1 PUSH2 0xEEB JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xB00 JUMPI DUP1 PUSH1 0x3 PUSH2 0xA4B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xA4B JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xBD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x434 DUP3 PUSH2 0xBBB JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xC04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC1C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0xC37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xC54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xC6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC78 DUP9 DUP4 DUP10 ADD PUSH2 0xBF2 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xC91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC9E DUP8 DUP3 DUP9 ADD PUSH2 0xBF2 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xCBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCC8 DUP5 PUSH2 0xBBB JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xD1C JUMPI PUSH2 0xD1C PUSH2 0xCF3 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xBD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xD54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD5D DUP7 PUSH2 0xD22 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD MLOAD SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD SWAP2 POP PUSH2 0xD80 PUSH1 0x80 DUP8 ADD PUSH2 0xD22 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xD1C JUMPI PUSH2 0xD1C PUSH2 0xCF3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x434 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0xDFD JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0xDE3 JUMPI PUSH2 0xDE3 PUSH2 0xCF3 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0xDF0 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0xDC7 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xE14 JUMPI POP PUSH1 0x1 PUSH2 0xD1C JUMP JUMPDEST DUP2 PUSH2 0xE21 JUMPI POP PUSH1 0x0 PUSH2 0xD1C JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0xE37 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0xE41 JUMPI PUSH2 0xE5D JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0xD1C JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0xE52 JUMPI PUSH2 0xE52 PUSH2 0xCF3 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0xD1C JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0xE80 JUMPI POP DUP2 DUP2 EXP PUSH2 0xD1C JUMP JUMPDEST PUSH2 0xE8A DUP4 DUP4 PUSH2 0xDC2 JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0xE9E JUMPI PUSH2 0xE9E PUSH2 0xCF3 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x434 DUP4 DUP4 PUSH2 0xE05 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xECF JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0xD1C JUMPI PUSH2 0xD1C PUSH2 0xCF3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xEFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP8 0xD5 0xD6 PUSH15 0xBE24563749D9FD7A227A0C92A1467 DUP9 0x5C EQ GAS GT MLOAD DUP1 0xD4 0xC3 PUSH29 0x79757264736F6C63430008110033000000000000000000000000000000 ","sourceMap":"998:5007:83:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1260:60;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1260:60:83;;;;;;-1:-1:-1;;;;;578:32:181;;;560:51;;548:2;533:18;1260:60:83;;;;;;;;1949:112:168;2029:27;;1949:112;;;768:25:181;;;756:2;741:18;1949:112:168;622:177:181;5625:378:83;;;;;;:::i;:::-;;:::i;:::-;;1062:22;;;;;-1:-1:-1;;;;;1062:22:83;;;3073:180;;;;;;:::i;:::-;;:::i;4772:673::-;;;;;;:::i;:::-;;:::i;1389:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2663:25:181;;;2719:2;2704:18;;2697:34;;;;2636:18;1389:44:83;2489:248:181;175:41:88;;212:4;175:41;;;;;2907:14:181;;2900:22;2882:41;;2870:2;2855:18;175:41:88;2742:187:181;2151:79:168;1530:6;2151:79;;3820:442;;;:::i;3257:1511:83:-;;;;;;:::i;:::-;;:::i;1641:79:168:-;1687:7;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;3321:420;;;;;;:::i;:::-;;:::i;4404:539::-;;;:::i;5449:172:83:-;;;;;;:::i;:::-;;:::i;1806:1263::-;;;;;;:::i;:::-;;:::i;1792:85:168:-;1863:9;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;3097:4;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;1088:28:83;;;;;-1:-1:-1;;;;;1088:28:83;;;5625:378;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;5757:14:83;5737:17:::1;5784:215;5804:9;5800:1;:13;5784:215;;;5880:7;;5888:1;5880:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;5825:11;:30;5837:14;;5852:1;5837:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;5825:30:83;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;5825:30:83;:66;;-1:-1:-1;;;;;;5825:66:83::1;::::0;;;::::1;::::0;;;::::1;::::0;;5904:48:::1;5922:14:::0;;5937:1;5922:17;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;5941:7;;5949:1;5941:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;5904:48;::::0;;-1:-1:-1;;;;;3296:15:181;;;3278:34;;3348:15;;;;3343:2;3328:18;;3321:43;3213:18;5904:48:83::1;;;;;;;5981:3;;5784:215;;;;5731:272;5625:378:::0;;;;:::o;3073:180::-;3145:7;3160:22;3185:36;3207:13;3185:21;:36::i;:::-;3160:61;3073:180;-1:-1:-1;;;3073:180:83:o;4772:673::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4897:6:83::1;4907:1;4897:11:::0;4889:33:::1;;;::::0;-1:-1:-1;;;4889:33:83;;3577:2:181;4889:33:83::1;::::0;::::1;3559:21:181::0;3616:1;3596:18;;;3589:29;-1:-1:-1;;;3634:18:181;;;3627:39;3683:18;;4889:33:83::1;;;;;;;;;4950:10;4932:15;:28;4928:351;;;1623:9:104;5006:28:83;5024:10:::0;5006:15:::1;:28;:::i;:::-;:60;4998:86;;;::::0;-1:-1:-1;;;4998:86:83;;4179:2:181;4998:86:83::1;::::0;::::1;4161:21:181::0;4218:2;4198:18;;;4191:30;-1:-1:-1;;;4237:18:181;;;4230:43;4290:18;;4998:86:83::1;3977:337:181::0;4998:86:83::1;4928:351;;;1777:1:104;5163:28:83;5176:15;5163:10:::0;:28:::1;:::i;:::-;:59;5155:81;;;::::0;-1:-1:-1;;;5155:81:83;;4521:2:181;5155:81:83::1;::::0;::::1;4503:21:181::0;4560:1;4540:18;;;4533:29;-1:-1:-1;;;4578:18:181;;;4571:39;4627:18;;5155:81:83::1;4319:332:181::0;5155:81:83::1;-1:-1:-1::0;5257:15:83::1;4928:351;-1:-1:-1::0;;;;;5317:19:83;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;;:25:::1;;::::0;5290:61;;4858:51:181;;;4925:18;;;4918:34;4968:18;;4961:34;;;5290:61:83::1;::::0;4846:2:181;4831:18;5290:61:83::1;;;;;;;-1:-1:-1::0;;;;;5358:19:83;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:25:::1;::::0;::::1;:34:::0;;;;5398:42;4772:673::o;3820:442:168:-;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;3960:27:::2;;3991:1;3960:32:::0;3956:92:::2;;4001:47;;-1:-1:-1::0;;;4001:47:168::2;;;;;;;;;;;3956:92;4095:9;::::0;-1:-1:-1;;;;;4095:9:168::2;:23:::0;4091:88:::2;;4127:52;;-1:-1:-1::0;;;4127:52:168::2;;;;;;;;;;;4091:88;4236:21;4254:1;4236:9;:21::i;:::-;3820:442::o:0;3257:1511:83:-;-1:-1:-1;;;;;3382:26:83;;;3332:7;3382:26;;;:11;:26;;;;;;3332:7;;3382:26;3418:33;;3414:1335;;3465:10;-1:-1:-1;;;;;3465:26:83;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3465:28:83;;;;;;;;-1:-1:-1;;3465:28:83;;;;;;;;;;;;:::i;:::-;;;3461:1282;;-1:-1:-1;4733:1:83;;3257:1511;-1:-1:-1;;3257:1511:83:o;3461:1282::-;3724:11;;;:50;;;3767:7;3749:25;;:15;:25;;;3724:50;:77;;;-1:-1:-1;3788:13:83;;3724:77;:149;;;-1:-1:-1;3833:40:83;1623:9:104;3833:8:83;:40;:::i;:::-;3815:15;:58;3724:149;3709:437;;;-1:-1:-1;4134:1:83;;3257:1511;-1:-1:-1;;;;;;;3257:1511:83:o;3709:437::-;4156:14;4181:6;4156:32;;4198:13;4259:26;4296:10;-1:-1:-1;;;;;4296:19:83;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4288:30;;;-1:-1:-1;1907:2:104;4332:58:83;;4328:282;;;4427:58;1907:2:104;4427:18:83;:58;:::i;:::-;4422:64;;:2;:64;:::i;:::-;4412:75;;:6;:75;:::i;:::-;4404:83;;4328:282;;;4539:58;4579:18;1907:2:104;4539:58:83;:::i;:::-;4534:64;;:2;:64;:::i;:::-;4524:75;;:6;:75;:::i;:::-;4516:83;;4328:282;-1:-1:-1;4627:5:83;3257:1511;-1:-1:-1;;;;;;;;;3257:1511:83:o;3461:1282::-;-1:-1:-1;4762:1:83;;3257:1511;-1:-1:-1;;3257:1511:83:o;3321:420:168:-;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;:::-;3321:420:::0;:::o;4404:539::-;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;5449:172:83:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;5550:13:83::1;::::0;5529:51:::1;::::0;;-1:-1:-1;;;;;5550:13:83;;::::1;3278:34:181::0;;3348:15;;;3343:2;3328:18;;3321:43;5529:51:83::1;::::0;3213:18:181;5529:51:83::1;;;;;;;5586:13;:30:::0;;-1:-1:-1;;;;;;5586:30:83::1;-1:-1:-1::0;;;;;5586:30:83;;;::::1;::::0;;;::::1;::::0;;5449:172::o;1806:1263::-;1882:7;;1929:13;-1:-1:-1;;;;;2010:27:83;;2006:70;;-1:-1:-1;2062:7:83;;-1:-1:-1;;;;;2062:7:83;2006:70;-1:-1:-1;;;;;2198:25:83;;2177:18;2198:25;;;:11;:25;;;;;:31;;;2327:15;;;;;:108;;-1:-1:-1;;;;;;2366:25:83;;;;;;:11;:25;;;;;:35;1623:9:104;;2348:53:83;;:15;:53;:::i;:::-;2347:87;2327:108;2323:177;;;2453:10;2473:18;2465:27;2445:48;;;;;;1806:1263;;;:::o;2323:177::-;2613:32;2632:12;2613:18;:32::i;:::-;2600:45;-1:-1:-1;2655:15:83;;2651:87;;2688:10;2708:21;2700:30;;2651:87;2813:13;;-1:-1:-1;;;;;2813:13:83;:27;2809:214;;2876:13;;;2863:55;;-1:-1:-1;;;2863:55:83;;-1:-1:-1;;;;;578:32:181;;;2863:55:83;;;560:51:181;;;;2876:13:83;;;2863:41;;533:18:181;;2863:55:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2850:68;-1:-1:-1;2930:15:83;;2926:91;;2965:10;2985:21;2977:30;;2926:91;3037:1;;3040:23;;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;5170:183::-;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;14:173:181:-;82:20;;-1:-1:-1;;;;;131:31:181;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;804:367::-;867:8;877:6;931:3;924:4;916:6;912:17;908:27;898:55;;949:1;946;939:12;898:55;-1:-1:-1;972:20:181;;1015:18;1004:30;;1001:50;;;1047:1;1044;1037:12;1001:50;1084:4;1076:6;1072:17;1060:29;;1144:3;1137:4;1127:6;1124:1;1120:14;1112:6;1108:27;1104:38;1101:47;1098:67;;;1161:1;1158;1151:12;1098:67;804:367;;;;;:::o;1176:773::-;1298:6;1306;1314;1322;1375:2;1363:9;1354:7;1350:23;1346:32;1343:52;;;1391:1;1388;1381:12;1343:52;1431:9;1418:23;1460:18;1501:2;1493:6;1490:14;1487:34;;;1517:1;1514;1507:12;1487:34;1556:70;1618:7;1609:6;1598:9;1594:22;1556:70;:::i;:::-;1645:8;;-1:-1:-1;1530:96:181;-1:-1:-1;1733:2:181;1718:18;;1705:32;;-1:-1:-1;1749:16:181;;;1746:36;;;1778:1;1775;1768:12;1746:36;;1817:72;1881:7;1870:8;1859:9;1855:24;1817:72;:::i;:::-;1176:773;;;;-1:-1:-1;1908:8:181;-1:-1:-1;;;;1176:773:181:o;2162:322::-;2239:6;2247;2255;2308:2;2296:9;2287:7;2283:23;2279:32;2276:52;;;2324:1;2321;2314:12;2276:52;2347:29;2366:9;2347:29;:::i;:::-;2337:39;2423:2;2408:18;;2395:32;;-1:-1:-1;2474:2:181;2459:18;;;2446:32;;2162:322;-1:-1:-1;;;2162:322:181:o;2934:127::-;2995:10;2990:3;2986:20;2983:1;2976:31;3026:4;3023:1;3016:15;3050:4;3047:1;3040:15;3712:127;3773:10;3768:3;3764:20;3761:1;3754:31;3804:4;3801:1;3794:15;3828:4;3825:1;3818:15;3844:128;3911:9;;;3932:11;;;3929:37;;;3946:18;;:::i;:::-;3844:128;;;;:::o;5006:179::-;5084:13;;5137:22;5126:34;;5116:45;;5106:73;;5175:1;5172;5165:12;5190:473;5293:6;5301;5309;5317;5325;5378:3;5366:9;5357:7;5353:23;5349:33;5346:53;;;5395:1;5392;5385:12;5346:53;5418:39;5447:9;5418:39;:::i;:::-;5408:49;;5497:2;5486:9;5482:18;5476:25;5466:35;;5541:2;5530:9;5526:18;5520:25;5510:35;;5585:2;5574:9;5570:18;5564:25;5554:35;;5608:49;5652:3;5641:9;5637:19;5608:49;:::i;:::-;5598:59;;5190:473;;;;;;;;:::o;5668:125::-;5733:9;;;5754:10;;;5751:36;;;5767:18;;:::i;5798:273::-;5866:6;5919:2;5907:9;5898:7;5894:23;5890:32;5887:52;;;5935:1;5932;5925:12;5887:52;5967:9;5961:16;6017:4;6010:5;6006:16;5999:5;5996:27;5986:55;;6037:1;6034;6027:12;6076:422;6165:1;6208:5;6165:1;6222:270;6243:7;6233:8;6230:21;6222:270;;;6302:4;6298:1;6294:6;6290:17;6284:4;6281:27;6278:53;;;6311:18;;:::i;:::-;6361:7;6351:8;6347:22;6344:55;;;6381:16;;;;6344:55;6460:22;;;;6420:15;;;;6222:270;;;6226:3;6076:422;;;;;:::o;6503:806::-;6552:5;6582:8;6572:80;;-1:-1:-1;6623:1:181;6637:5;;6572:80;6671:4;6661:76;;-1:-1:-1;6708:1:181;6722:5;;6661:76;6753:4;6771:1;6766:59;;;;6839:1;6834:130;;;;6746:218;;6766:59;6796:1;6787:10;;6810:5;;;6834:130;6871:3;6861:8;6858:17;6855:43;;;6878:18;;:::i;:::-;-1:-1:-1;;6934:1:181;6920:16;;6949:5;;6746:218;;7048:2;7038:8;7035:16;7029:3;7023:4;7020:13;7016:36;7010:2;7000:8;6997:16;6992:2;6986:4;6983:12;6979:35;6976:77;6973:159;;;-1:-1:-1;7085:19:181;;;7117:5;;6973:159;7164:34;7189:8;7183:4;7164:34;:::i;:::-;7234:6;7230:1;7226:6;7222:19;7213:7;7210:32;7207:58;;;7245:18;;:::i;:::-;7283:20;;6503:806;-1:-1:-1;;;6503:806:181:o;7314:131::-;7374:5;7403:36;7430:8;7424:4;7403:36;:::i;7450:217::-;7490:1;7516;7506:132;;7560:10;7555:3;7551:20;7548:1;7541:31;7595:4;7592:1;7585:15;7623:4;7620:1;7613:15;7506:132;-1:-1:-1;7652:9:181;;7450:217::o;7672:168::-;7745:9;;;7776;;7793:15;;;7787:22;;7773:37;7763:71;;7814:18;;:::i;7977:184::-;8047:6;8100:2;8088:9;8079:7;8075:23;8071:32;8068:52;;;8116:1;8113;8106:12;8068:52;-1:-1:-1;8139:16:181;;7977:184;-1:-1:-1;7977:184:181:o"},"gasEstimates":{"creation":{"codeDepositCost":"779600","executionCost":"infinite","totalCost":"infinite"},"external":{"acceptProposedOwner()":"63881","aggregators(address)":"2571","assetPrices(address)":"4725","delay()":"303","getPriceFromChainlink(address)":"infinite","getPriceFromOracle(address)":"infinite","getTokenPrice(address)":"infinite","isPriceOracle()":"290","owner()":"2387","proposeNewOwner(address)":"56507","proposed()":"2386","proposedTimestamp()":"2327","renounceOwnership()":"65933","renounced()":"2407","setAggregators(address[],address[])":"infinite","setDirectPrice(address,uint256,uint256)":"50802","setV1PriceOracle(address)":"30194","v1PriceOracle()":"2436","wrapped()":"2416"}},"methodIdentifiers":{"acceptProposedOwner()":"c5b350df","aggregators(address)":"112cdab9","assetPrices(address)":"5e9a523c","delay()":"6a42b8f8","getPriceFromChainlink(address)":"856d562d","getPriceFromOracle(address)":"538e573c","getTokenPrice(address)":"d02641a0","isPriceOracle()":"66331bba","owner()":"8da5cb5b","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","renounceOwnership()":"715018a6","renounced()":"d232c220","setAggregators(address[],address[])":"3f9fb505","setDirectPrice(address,uint256,uint256)":"5e901bdf","setV1PriceOracle(address)":"cb45c4f2","v1PriceOracle()":"fe10c98d","wrapped()":"50e70d48"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wrapped\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"}],\"name\":\"AggregatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPrice\",\"type\":\"uint256\"}],\"name\":\"DirectPriceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"V1PriceOracleUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"aggregators\",\"outputs\":[{\"internalType\":\"contract AggregatorV3Interface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"assetPrices\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"}],\"name\":\"getPriceFromChainlink\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"}],\"name\":\"getPriceFromOracle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"}],\"name\":\"getTokenPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPriceOracle\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokenAddresses\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"sources\",\"type\":\"address[]\"}],\"name\":\"setAggregators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"setDirectPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_v1PriceOracle\",\"type\":\"address\"}],\"name\":\"setV1PriceOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"v1PriceOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wrapped\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"If ownership is renounced, the direct price, aggregators, and price oracles can no longer be updated\",\"kind\":\"dev\",\"methods\":{},\"title\":\"ConnextPriceOracle\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"aggregators(address)\":{\"notice\":\"Chainlink Aggregators\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"isPriceOracle()\":{\"notice\":\"Indicator that this is a PriceOracle contract (for inspection)\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"}},\"notice\":\"Simple interface for querying a variety of price feeds\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/helpers/ConnextPriceOracle.sol\":\"ConnextPriceOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/ConnextPriceOracle.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {IPriceOracle} from \\\"../interfaces/IPriceOracle.sol\\\";\\n\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../../../shared/ProposedOwnable.sol\\\";\\nimport {PriceOracle} from \\\"./PriceOracle.sol\\\";\\n\\ninterface AggregatorV3Interface {\\n  function decimals() external view returns (uint8);\\n\\n  function description() external view returns (string memory);\\n\\n  function version() external view returns (uint256);\\n\\n  function latestRoundData()\\n    external\\n    view\\n    returns (\\n      uint80 roundId,\\n      int256 answer,\\n      uint256 startedAt,\\n      uint256 updatedAt,\\n      uint80 answeredInRound\\n    );\\n}\\n\\n/**\\n * @title ConnextPriceOracle\\n * @notice Simple interface for querying a variety of price feeds\\n *\\n * @dev If ownership is renounced, the direct price, aggregators, and price oracles\\n * can no longer be updated\\n */\\ncontract ConnextPriceOracle is PriceOracle, ProposedOwnable {\\n  address public wrapped;\\n  address public v1PriceOracle;\\n\\n  /// @notice Price sources\\n  enum PriceSource {\\n    NA,\\n    DIRECT,\\n    CHAINLINK,\\n    V1_ORACLE\\n  }\\n\\n  /// @notice Chainlink Aggregators\\n  mapping(address => AggregatorV3Interface) public aggregators;\\n\\n  struct Price {\\n    uint256 updatedAt;\\n    uint256 price;\\n  }\\n\\n  mapping(address => Price) public assetPrices;\\n\\n  event DirectPriceUpdated(address token, uint256 oldPrice, uint256 newPrice);\\n  event AggregatorUpdated(address tokenAddress, address source);\\n  event V1PriceOracleUpdated(address oldAddress, address newAddress);\\n\\n  constructor(address _wrapped) {\\n    require(_wrapped != address(0), \\\"zero wrapped address!\\\");\\n\\n    wrapped = _wrapped;\\n    _setOwner(msg.sender);\\n  }\\n\\n  function getTokenPrice(address _tokenAddress) public view override returns (uint256, uint256) {\\n    address tokenAddress = _tokenAddress;\\n\\n    // For native tokens, get price of the wrapped token\\n    if (_tokenAddress == address(0)) {\\n      tokenAddress = wrapped;\\n    }\\n\\n    // First check the direct price which stored in contract. Only owner can set direct price.\\n    uint256 tokenPrice = assetPrices[tokenAddress].price;\\n    // only accept up to and not including Constants.ORACLE_VALID_PERIOD time deviation\\n    if (tokenPrice != 0 && ((block.timestamp - assetPrices[tokenAddress].updatedAt) < Constants.ORACLE_VALID_PERIOD)) {\\n      return (tokenPrice, uint256(PriceSource.DIRECT));\\n    }\\n\\n    // Second, check ChainLink aggregator, If current token is supported by chainlink, return\\n    tokenPrice = getPriceFromOracle(tokenAddress);\\n    if (tokenPrice != 0) {\\n      return (tokenPrice, uint256(PriceSource.CHAINLINK));\\n    }\\n\\n    // Third, If v1 oracle price contract is set, check v1 price\\n    if (v1PriceOracle != address(0)) {\\n      tokenPrice = IPriceOracle(v1PriceOracle).getTokenPrice(tokenAddress);\\n      if (tokenPrice != 0) {\\n        return (tokenPrice, uint256(PriceSource.V1_ORACLE));\\n      }\\n    }\\n\\n    return (0, uint256(PriceSource.NA));\\n  }\\n\\n  function getPriceFromOracle(address _tokenAddress) public view returns (uint256) {\\n    uint256 chainLinkPrice = getPriceFromChainlink(_tokenAddress);\\n    return chainLinkPrice;\\n  }\\n\\n  function getPriceFromChainlink(address _tokenAddress) public view returns (uint256) {\\n    AggregatorV3Interface aggregator = aggregators[_tokenAddress];\\n    if (address(aggregator) != address(0)) {\\n      try aggregator.latestRoundData() returns (\\n        uint80 roundId,\\n        int256 answer,\\n        uint256,\\n        uint256 updateAt,\\n        uint80 answeredInRound\\n      ) {\\n        // It's fine for price to be 0. We have more price feeds.\\n        if (\\n          answer == 0 ||\\n          answeredInRound < roundId ||\\n          updateAt == 0 ||\\n          block.timestamp > updateAt + Constants.ORACLE_VALID_PERIOD\\n        ) {\\n          // answeredInRound > roundId ===> ChainLink Error: Stale price\\n          // updatedAt = 0 ===> ChainLink Error: Round not complete\\n          // block.timestamp - updateAt > Constants.ORACLE_VALID_PERIOD ===> too old data\\n          return 0;\\n        }\\n\\n        uint256 retVal = uint256(answer);\\n        uint256 price;\\n        // Make the decimals to 1e18.\\n        uint256 aggregatorDecimals = uint256(aggregator.decimals());\\n        if (aggregatorDecimals > Constants.DEFAULT_NORMALIZED_DECIMALS) {\\n          price = retVal / (10**(aggregatorDecimals - Constants.DEFAULT_NORMALIZED_DECIMALS));\\n        } else {\\n          price = retVal * (10**(Constants.DEFAULT_NORMALIZED_DECIMALS - aggregatorDecimals));\\n        }\\n\\n        return price;\\n      } catch {\\n        // return 0 to be able to fetch the price from next oracles\\n        return 0;\\n      }\\n    }\\n\\n    return 0;\\n  }\\n\\n  function setDirectPrice(\\n    address _token,\\n    uint256 _price,\\n    uint256 _timestamp\\n  ) external onlyOwner {\\n    require(_price != 0, \\\"bad price\\\");\\n    if (block.timestamp > _timestamp) {\\n      // reject stale price\\n      require(block.timestamp - _timestamp < Constants.ORACLE_VALID_PERIOD, \\\"bad timestamp\\\");\\n    } else {\\n      // reject future timestamp (<3s is allowed)\\n      require(_timestamp - block.timestamp < Constants.FUTURE_TIME_BUFFER, \\\"in future\\\");\\n      _timestamp = block.timestamp;\\n    }\\n\\n    emit DirectPriceUpdated(_token, assetPrices[_token].price, _price);\\n\\n    assetPrices[_token].price = _price;\\n    assetPrices[_token].updatedAt = _timestamp;\\n  }\\n\\n  function setV1PriceOracle(address _v1PriceOracle) external onlyOwner {\\n    emit V1PriceOracleUpdated(v1PriceOracle, _v1PriceOracle);\\n    v1PriceOracle = _v1PriceOracle;\\n  }\\n\\n  function setAggregators(address[] calldata tokenAddresses, address[] calldata sources) external onlyOwner {\\n    uint256 numTokens = tokenAddresses.length;\\n    for (uint256 i; i < numTokens; ) {\\n      aggregators[tokenAddresses[i]] = AggregatorV3Interface(sources[i]);\\n      emit AggregatorUpdated(tokenAddresses[i], sources[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x3ba26d9f1b7385f48acd418e572d8a84b8ccb49bcdd005aaac32d871cb33be6d\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/PriceOracle.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nabstract contract PriceOracle {\\n  /// @notice Indicator that this is a PriceOracle contract (for inspection)\\n  bool public constant isPriceOracle = true;\\n\\n  /**\\n   * @notice Get the price of a token\\n   * @param token The token to get the price of\\n   * @return The asset price mantissa (scaled by 1e18).\\n   *  Zero means the price is unavailable.\\n   * @return The source of the price. enum (NA, DIRECT, CHAINLINK, DEX, V1_ORACLE)\\n   */\\n  function getTokenPrice(address token) external view virtual returns (uint256, uint256);\\n}\\n\",\"keccak256\":\"0x45f7d3bc9454208745a68af35ff5d75592d633d7cd07a6aa13333f694af54d20\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IPriceOracle.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\ninterface IPriceOracle {\\n  /**\\n   * @notice Get the price of a token\\n   * @param token The token to get the price of\\n   * @return The asset price mantissa (scaled by 1e18).\\n   *  Zero means the price is unavailable.\\n   */\\n  function getTokenPrice(address token) external view returns (uint256);\\n\\n  /**\\n   * @notice Get the price of a token from ChainLink\\n   * @param token The token to get the price of\\n   * @return The asset price mantissa (scaled by 1e18).\\n   *  Zero means the price is unavailable.\\n   */\\n  function getPriceFromChainlink(address token) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x7bbaa4b9a32da8fd3dfd468ce4882545182221548744ce06604e1205cb8a2ecb\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/core/connext/helpers/ConnextPriceOracle.sol:ConnextPriceOracle","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/core/connext/helpers/ConnextPriceOracle.sol:ConnextPriceOracle","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/core/connext/helpers/ConnextPriceOracle.sol:ConnextPriceOracle","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":22573,"contract":"contracts/core/connext/helpers/ConnextPriceOracle.sol:ConnextPriceOracle","label":"wrapped","offset":0,"slot":"3","type":"t_address"},{"astId":22575,"contract":"contracts/core/connext/helpers/ConnextPriceOracle.sol:ConnextPriceOracle","label":"v1PriceOracle","offset":0,"slot":"4","type":"t_address"},{"astId":22586,"contract":"contracts/core/connext/helpers/ConnextPriceOracle.sol:ConnextPriceOracle","label":"aggregators","offset":0,"slot":"5","type":"t_mapping(t_address,t_contract(AggregatorV3Interface)22566)"},{"astId":22596,"contract":"contracts/core/connext/helpers/ConnextPriceOracle.sol:ConnextPriceOracle","label":"assetPrices","offset":0,"slot":"6","type":"t_mapping(t_address,t_struct(Price)22591_storage)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_contract(AggregatorV3Interface)22566":{"encoding":"inplace","label":"contract AggregatorV3Interface","numberOfBytes":"20"},"t_mapping(t_address,t_contract(AggregatorV3Interface)22566)":{"encoding":"mapping","key":"t_address","label":"mapping(address => contract AggregatorV3Interface)","numberOfBytes":"32","value":"t_contract(AggregatorV3Interface)22566"},"t_mapping(t_address,t_struct(Price)22591_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct ConnextPriceOracle.Price)","numberOfBytes":"32","value":"t_struct(Price)22591_storage"},"t_struct(Price)22591_storage":{"encoding":"inplace","label":"struct ConnextPriceOracle.Price","members":[{"astId":22588,"contract":"contracts/core/connext/helpers/ConnextPriceOracle.sol:ConnextPriceOracle","label":"updatedAt","offset":0,"slot":"0","type":"t_uint256"},{"astId":22590,"contract":"contracts/core/connext/helpers/ConnextPriceOracle.sol:ConnextPriceOracle","label":"price","offset":0,"slot":"1","type":"t_uint256"}],"numberOfBytes":"64"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"aggregators(address)":{"notice":"Chainlink Aggregators"},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"isPriceOracle()":{"notice":"Indicator that this is a PriceOracle contract (for inspection)"},"owner()":{"notice":"Returns the address of the current owner."},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"}},"notice":"Simple interface for querying a variety of price feeds","version":1}}},"contracts/core/connext/helpers/ConnextProxyAdmin.sol":{"ConnextProxyAdmin":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeProxyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"}],"name":"getProxyAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"}],"name":"getProxyImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"implementation","type":"address"}],"name":"upgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeAndCall","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"details":"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.","kind":"dev","methods":{"changeProxyAdmin(address,address)":{"details":"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`."},"getProxyAdmin(address)":{"details":"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`."},"getProxyImplementation(address)":{"details":"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`."},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"upgrade(address,address)":{"details":"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`."},"upgradeAndCall(address,address,bytes)":{"details":"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_23059":{"entryPoint":null,"id":23059,"parameterSlots":1,"returnSlots":0},"@_9567":{"entryPoint":null,"id":9567,"parameterSlots":0,"returnSlots":0},"@_msgSender_11496":{"entryPoint":null,"id":11496,"parameterSlots":0,"returnSlots":1},"@_transferOwnership_9655":{"entryPoint":62,"id":9655,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":142,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:306:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:209:181","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:181"},"nodeType":"YulFunctionCall","src":"143:12:181"},"nodeType":"YulExpressionStatement","src":"143:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:181"},"nodeType":"YulFunctionCall","src":"112:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:181"},"nodeType":"YulFunctionCall","src":"108:32:181"},"nodeType":"YulIf","src":"105:52:181"},{"nodeType":"YulVariableDeclaration","src":"166:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"185:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"179:5:181"},"nodeType":"YulFunctionCall","src":"179:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"170:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"258:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"267:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"270:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"260:6:181"},"nodeType":"YulFunctionCall","src":"260:12:181"},"nodeType":"YulExpressionStatement","src":"260:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"217:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"228:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"243:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"239:3:181"},"nodeType":"YulFunctionCall","src":"239:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"252:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:181"},"nodeType":"YulFunctionCall","src":"235:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"224:3:181"},"nodeType":"YulFunctionCall","src":"224:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"214:2:181"},"nodeType":"YulFunctionCall","src":"214:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"207:6:181"},"nodeType":"YulFunctionCall","src":"207:50:181"},"nodeType":"YulIf","src":"204:70:181"},{"nodeType":"YulAssignment","src":"283:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"293:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"283:6:181"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:181","type":""}],"src":"14:290:181"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060405161076038038061076083398101604081905261002f9161008e565b6100383361003e565b506100be565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a057600080fd5b81516001600160a01b03811681146100b757600080fd5b9392505050565b610693806100cd6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b506000606082860101526060601f19601f83011685010192505050939250505056fea2646970667358221220b0581acce3089c7d8ca5626e7211c58f73be5a6836d4e7178c2e3bb22dbd02c064736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x760 CODESIZE SUB DUP1 PUSH2 0x760 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x8E JUMP JUMPDEST PUSH2 0x38 CALLER PUSH2 0x3E JUMP JUMPDEST POP PUSH2 0xBE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x693 DUP1 PUSH2 0xCD PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9623609D GT PUSH2 0x4E JUMPI DUP1 PUSH4 0x9623609D EQ PUSH2 0x111 JUMPI DUP1 PUSH4 0x99A88EC4 EQ PUSH2 0x124 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0xF3B7DEAD EQ PUSH2 0x164 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x204E1C7A EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xBC JUMPI DUP1 PUSH4 0x7EFF275E EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xF3 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0x499 JUMP JUMPDEST PUSH2 0x184 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1 PUSH2 0x215 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1 PUSH2 0xEE CALLDATASIZE PUSH1 0x4 PUSH2 0x4BD JUMP JUMPDEST PUSH2 0x229 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA0 JUMP JUMPDEST PUSH2 0xD1 PUSH2 0x11F CALLDATASIZE PUSH1 0x4 PUSH2 0x50C JUMP JUMPDEST PUSH2 0x291 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x130 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1 PUSH2 0x13F CALLDATASIZE PUSH1 0x4 PUSH2 0x4BD JUMP JUMPDEST PUSH2 0x300 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x150 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1 PUSH2 0x15F CALLDATASIZE PUSH1 0x4 PUSH2 0x499 JUMP JUMPDEST PUSH2 0x336 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA0 PUSH2 0x17F CALLDATASIZE PUSH1 0x4 PUSH2 0x499 JUMP JUMPDEST PUSH2 0x3B4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 MLOAD PUSH2 0x1AA SWAP1 PUSH4 0x5C60DA1B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1E5 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1EA JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x20D SWAP2 SWAP1 PUSH2 0x5E2 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x21D PUSH2 0x3DA JUMP JUMPDEST PUSH2 0x227 PUSH1 0x0 PUSH2 0x434 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x231 PUSH2 0x3DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8F28397 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x8F283970 SWAP1 PUSH1 0x24 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x289 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x299 PUSH2 0x3DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x278F7943 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 CALLVALUE SWAP1 PUSH2 0x2C9 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5FF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x308 PUSH2 0x3DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1B2CE7F3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x3659CFE6 SWAP1 PUSH1 0x24 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x33E PUSH2 0x3DA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x3A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3B1 DUP2 PUSH2 0x434 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 MLOAD PUSH2 0x1AA SWAP1 PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x227 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x39F JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4B6 DUP2 PUSH2 0x484 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4DB DUP2 PUSH2 0x484 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4EB DUP2 PUSH2 0x484 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x521 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x52C DUP2 PUSH2 0x484 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x53C DUP2 PUSH2 0x484 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x559 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x56D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x57F JUMPI PUSH2 0x57F PUSH2 0x4F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x5A7 JUMPI PUSH2 0x5A7 PUSH2 0x4F6 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x5C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x4B6 DUP2 PUSH2 0x484 JUMP JUMPDEST PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 PUSH1 0x40 DUP2 DUP5 ADD MSTORE DUP4 MLOAD DUP1 PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x63B JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x60 ADD MSTORE DUP3 ADD PUSH2 0x61F JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x60 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x60 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB0 PC BYTE 0xCC 0xE3 ADDMOD SWAP13 PUSH30 0x8CA5626E7211C58F73BE5A6836D4E7178C2E3BB22DBD02C064736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"373:151:84:-:0;;;418:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:38;719:10:58;936:18:38;:32::i;:::-;418:104:84;373:151;;2433:187:38;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:38;;;-1:-1:-1;;;;;;2541:17:38;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;14:290:181:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:181;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:181:o;:::-;373:151:84;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_checkOwner_9598":{"entryPoint":986,"id":9598,"parameterSlots":0,"returnSlots":0},"@_msgSender_11496":{"entryPoint":null,"id":11496,"parameterSlots":0,"returnSlots":1},"@_transferOwnership_9655":{"entryPoint":1076,"id":9655,"parameterSlots":1,"returnSlots":0},"@changeProxyAdmin_10381":{"entryPoint":553,"id":10381,"parameterSlots":2,"returnSlots":0},"@getProxyAdmin_10363":{"entryPoint":948,"id":10363,"parameterSlots":1,"returnSlots":1},"@getProxyImplementation_10329":{"entryPoint":388,"id":10329,"parameterSlots":1,"returnSlots":1},"@owner_9584":{"entryPoint":null,"id":9584,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_9612":{"entryPoint":533,"id":9612,"parameterSlots":0,"returnSlots":0},"@transferOwnership_9635":{"entryPoint":822,"id":9635,"parameterSlots":1,"returnSlots":0},"@upgradeAndCall_10423":{"entryPoint":657,"id":10423,"parameterSlots":3,"returnSlots":0},"@upgrade_10399":{"entryPoint":768,"id":10399,"parameterSlots":2,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_payable_fromMemory":{"entryPoint":1506,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$10572":{"entryPoint":1177,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$10572t_address":{"entryPoint":1213,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$10572t_addresst_bytes_memory_ptr":{"entryPoint":1292,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_packed_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":1535,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":1270,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_contract_TransparentUpgradeableProxy":{"entryPoint":1156,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:5153:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"88:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"152:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"161:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"164:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"154:6:181"},"nodeType":"YulFunctionCall","src":"154:12:181"},"nodeType":"YulExpressionStatement","src":"154:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"111:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"122:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"137:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"133:3:181"},"nodeType":"YulFunctionCall","src":"133:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"146:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"129:3:181"},"nodeType":"YulFunctionCall","src":"129:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"118:3:181"},"nodeType":"YulFunctionCall","src":"118:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"108:2:181"},"nodeType":"YulFunctionCall","src":"108:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"101:6:181"},"nodeType":"YulFunctionCall","src":"101:50:181"},"nodeType":"YulIf","src":"98:70:181"}]},"name":"validator_revert_contract_TransparentUpgradeableProxy","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"77:5:181","type":""}],"src":"14:160:181"},{"body":{"nodeType":"YulBlock","src":"286:206:181","statements":[{"body":{"nodeType":"YulBlock","src":"332:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"341:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"344:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"334:6:181"},"nodeType":"YulFunctionCall","src":"334:12:181"},"nodeType":"YulExpressionStatement","src":"334:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"307:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"316:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"303:3:181"},"nodeType":"YulFunctionCall","src":"303:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"328:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"299:3:181"},"nodeType":"YulFunctionCall","src":"299:32:181"},"nodeType":"YulIf","src":"296:52:181"},{"nodeType":"YulVariableDeclaration","src":"357:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"383:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"370:12:181"},"nodeType":"YulFunctionCall","src":"370:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"361:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"456:5:181"}],"functionName":{"name":"validator_revert_contract_TransparentUpgradeableProxy","nodeType":"YulIdentifier","src":"402:53:181"},"nodeType":"YulFunctionCall","src":"402:60:181"},"nodeType":"YulExpressionStatement","src":"402:60:181"},{"nodeType":"YulAssignment","src":"471:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"481:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"471:6:181"}]}]},"name":"abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$10572","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"252:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"263:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"275:6:181","type":""}],"src":"179:313:181"},{"body":{"nodeType":"YulBlock","src":"598:102:181","statements":[{"nodeType":"YulAssignment","src":"608:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"620:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"631:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"616:3:181"},"nodeType":"YulFunctionCall","src":"616:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"608:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"650:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"665:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"681:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"686:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"677:3:181"},"nodeType":"YulFunctionCall","src":"677:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"690:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"673:3:181"},"nodeType":"YulFunctionCall","src":"673:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"661:3:181"},"nodeType":"YulFunctionCall","src":"661:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"643:6:181"},"nodeType":"YulFunctionCall","src":"643:51:181"},"nodeType":"YulExpressionStatement","src":"643:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"567:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"578:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"589:4:181","type":""}],"src":"497:203:181"},{"body":{"nodeType":"YulBlock","src":"829:359:181","statements":[{"body":{"nodeType":"YulBlock","src":"875:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"884:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"887:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"877:6:181"},"nodeType":"YulFunctionCall","src":"877:12:181"},"nodeType":"YulExpressionStatement","src":"877:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"850:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"859:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"846:3:181"},"nodeType":"YulFunctionCall","src":"846:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"871:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"842:3:181"},"nodeType":"YulFunctionCall","src":"842:32:181"},"nodeType":"YulIf","src":"839:52:181"},{"nodeType":"YulVariableDeclaration","src":"900:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"926:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"913:12:181"},"nodeType":"YulFunctionCall","src":"913:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"904:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"999:5:181"}],"functionName":{"name":"validator_revert_contract_TransparentUpgradeableProxy","nodeType":"YulIdentifier","src":"945:53:181"},"nodeType":"YulFunctionCall","src":"945:60:181"},"nodeType":"YulExpressionStatement","src":"945:60:181"},{"nodeType":"YulAssignment","src":"1014:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1024:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1014:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1038:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1070:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1081:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1066:3:181"},"nodeType":"YulFunctionCall","src":"1066:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1053:12:181"},"nodeType":"YulFunctionCall","src":"1053:32:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1042:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1148:7:181"}],"functionName":{"name":"validator_revert_contract_TransparentUpgradeableProxy","nodeType":"YulIdentifier","src":"1094:53:181"},"nodeType":"YulFunctionCall","src":"1094:62:181"},"nodeType":"YulExpressionStatement","src":"1094:62:181"},{"nodeType":"YulAssignment","src":"1165:17:181","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1175:7:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1165:6:181"}]}]},"name":"abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$10572t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"787:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"798:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"810:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"818:6:181","type":""}],"src":"705:483:181"},{"body":{"nodeType":"YulBlock","src":"1225:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1242:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1249:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1254:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1245:3:181"},"nodeType":"YulFunctionCall","src":"1245:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1235:6:181"},"nodeType":"YulFunctionCall","src":"1235:31:181"},"nodeType":"YulExpressionStatement","src":"1235:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1282:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1285:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1275:6:181"},"nodeType":"YulFunctionCall","src":"1275:15:181"},"nodeType":"YulExpressionStatement","src":"1275:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1306:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1309:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1299:6:181"},"nodeType":"YulFunctionCall","src":"1299:15:181"},"nodeType":"YulExpressionStatement","src":"1299:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1193:127:181"},{"body":{"nodeType":"YulBlock","src":"1475:1142:181","statements":[{"body":{"nodeType":"YulBlock","src":"1521:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1530:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1533:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1523:6:181"},"nodeType":"YulFunctionCall","src":"1523:12:181"},"nodeType":"YulExpressionStatement","src":"1523:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1496:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1505:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1492:3:181"},"nodeType":"YulFunctionCall","src":"1492:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1517:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1488:3:181"},"nodeType":"YulFunctionCall","src":"1488:32:181"},"nodeType":"YulIf","src":"1485:52:181"},{"nodeType":"YulVariableDeclaration","src":"1546:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1572:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1559:12:181"},"nodeType":"YulFunctionCall","src":"1559:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1550:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1645:5:181"}],"functionName":{"name":"validator_revert_contract_TransparentUpgradeableProxy","nodeType":"YulIdentifier","src":"1591:53:181"},"nodeType":"YulFunctionCall","src":"1591:60:181"},"nodeType":"YulExpressionStatement","src":"1591:60:181"},{"nodeType":"YulAssignment","src":"1660:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1670:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1660:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1684:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1716:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1727:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1712:3:181"},"nodeType":"YulFunctionCall","src":"1712:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1699:12:181"},"nodeType":"YulFunctionCall","src":"1699:32:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1688:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1794:7:181"}],"functionName":{"name":"validator_revert_contract_TransparentUpgradeableProxy","nodeType":"YulIdentifier","src":"1740:53:181"},"nodeType":"YulFunctionCall","src":"1740:62:181"},"nodeType":"YulExpressionStatement","src":"1740:62:181"},{"nodeType":"YulAssignment","src":"1811:17:181","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1821:7:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1811:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1837:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1868:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1879:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1864:3:181"},"nodeType":"YulFunctionCall","src":"1864:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1851:12:181"},"nodeType":"YulFunctionCall","src":"1851:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1841:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1892:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1902:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1896:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1947:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1956:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1959:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1949:6:181"},"nodeType":"YulFunctionCall","src":"1949:12:181"},"nodeType":"YulExpressionStatement","src":"1949:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1935:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1943:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1932:2:181"},"nodeType":"YulFunctionCall","src":"1932:14:181"},"nodeType":"YulIf","src":"1929:34:181"},{"nodeType":"YulVariableDeclaration","src":"1972:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1986:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1997:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1982:3:181"},"nodeType":"YulFunctionCall","src":"1982:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1976:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2052:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2061:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2064:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2054:6:181"},"nodeType":"YulFunctionCall","src":"2054:12:181"},"nodeType":"YulExpressionStatement","src":"2054:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2031:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"2035:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2027:3:181"},"nodeType":"YulFunctionCall","src":"2027:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2042:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2023:3:181"},"nodeType":"YulFunctionCall","src":"2023:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2016:6:181"},"nodeType":"YulFunctionCall","src":"2016:35:181"},"nodeType":"YulIf","src":"2013:55:181"},{"nodeType":"YulVariableDeclaration","src":"2077:26:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2100:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2087:12:181"},"nodeType":"YulFunctionCall","src":"2087:16:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"2081:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2126:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2128:16:181"},"nodeType":"YulFunctionCall","src":"2128:18:181"},"nodeType":"YulExpressionStatement","src":"2128:18:181"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2118:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2122:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2115:2:181"},"nodeType":"YulFunctionCall","src":"2115:10:181"},"nodeType":"YulIf","src":"2112:36:181"},{"nodeType":"YulVariableDeclaration","src":"2157:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2171:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2167:3:181"},"nodeType":"YulFunctionCall","src":"2167:7:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"2161:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2183:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2203:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2197:5:181"},"nodeType":"YulFunctionCall","src":"2197:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2187:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2215:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2237:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2261:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"2265:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2257:3:181"},"nodeType":"YulFunctionCall","src":"2257:13:181"},{"name":"_4","nodeType":"YulIdentifier","src":"2272:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2253:3:181"},"nodeType":"YulFunctionCall","src":"2253:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"2277:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2249:3:181"},"nodeType":"YulFunctionCall","src":"2249:31:181"},{"name":"_4","nodeType":"YulIdentifier","src":"2282:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2245:3:181"},"nodeType":"YulFunctionCall","src":"2245:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2233:3:181"},"nodeType":"YulFunctionCall","src":"2233:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2219:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2345:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2347:16:181"},"nodeType":"YulFunctionCall","src":"2347:18:181"},"nodeType":"YulExpressionStatement","src":"2347:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2304:10:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2316:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2301:2:181"},"nodeType":"YulFunctionCall","src":"2301:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2324:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2336:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2321:2:181"},"nodeType":"YulFunctionCall","src":"2321:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2298:2:181"},"nodeType":"YulFunctionCall","src":"2298:46:181"},"nodeType":"YulIf","src":"2295:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2383:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2387:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2376:6:181"},"nodeType":"YulFunctionCall","src":"2376:22:181"},"nodeType":"YulExpressionStatement","src":"2376:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2414:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2422:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2407:6:181"},"nodeType":"YulFunctionCall","src":"2407:18:181"},"nodeType":"YulExpressionStatement","src":"2407:18:181"},{"body":{"nodeType":"YulBlock","src":"2471:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2480:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2483:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2473:6:181"},"nodeType":"YulFunctionCall","src":"2473:12:181"},"nodeType":"YulExpressionStatement","src":"2473:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2448:2:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2452:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2444:3:181"},"nodeType":"YulFunctionCall","src":"2444:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2457:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2440:3:181"},"nodeType":"YulFunctionCall","src":"2440:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2462:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2437:2:181"},"nodeType":"YulFunctionCall","src":"2437:33:181"},"nodeType":"YulIf","src":"2434:53:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2513:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2521:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2509:3:181"},"nodeType":"YulFunctionCall","src":"2509:15:181"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2530:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"2534:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2526:3:181"},"nodeType":"YulFunctionCall","src":"2526:11:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2539:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"2496:12:181"},"nodeType":"YulFunctionCall","src":"2496:46:181"},"nodeType":"YulExpressionStatement","src":"2496:46:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2566:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2574:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2562:3:181"},"nodeType":"YulFunctionCall","src":"2562:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"2579:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2558:3:181"},"nodeType":"YulFunctionCall","src":"2558:24:181"},{"kind":"number","nodeType":"YulLiteral","src":"2584:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2551:6:181"},"nodeType":"YulFunctionCall","src":"2551:35:181"},"nodeType":"YulExpressionStatement","src":"2551:35:181"},{"nodeType":"YulAssignment","src":"2595:16:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"2605:6:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2595:6:181"}]}]},"name":"abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$10572t_addresst_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1425:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1436:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1448:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1456:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1464:6:181","type":""}],"src":"1325:1292:181"},{"body":{"nodeType":"YulBlock","src":"2692:206:181","statements":[{"body":{"nodeType":"YulBlock","src":"2738:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2747:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2750:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2740:6:181"},"nodeType":"YulFunctionCall","src":"2740:12:181"},"nodeType":"YulExpressionStatement","src":"2740:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2713:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2722:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2709:3:181"},"nodeType":"YulFunctionCall","src":"2709:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2734:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2705:3:181"},"nodeType":"YulFunctionCall","src":"2705:32:181"},"nodeType":"YulIf","src":"2702:52:181"},{"nodeType":"YulVariableDeclaration","src":"2763:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2789:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2776:12:181"},"nodeType":"YulFunctionCall","src":"2776:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2767:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2862:5:181"}],"functionName":{"name":"validator_revert_contract_TransparentUpgradeableProxy","nodeType":"YulIdentifier","src":"2808:53:181"},"nodeType":"YulFunctionCall","src":"2808:60:181"},"nodeType":"YulExpressionStatement","src":"2808:60:181"},{"nodeType":"YulAssignment","src":"2877:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"2887:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2877:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2658:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2669:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2681:6:181","type":""}],"src":"2622:276:181"},{"body":{"nodeType":"YulBlock","src":"3094:76:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3111:3:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3120:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"3125:10:181","type":"","value":"0x5c60da1b"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3116:3:181"},"nodeType":"YulFunctionCall","src":"3116:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3104:6:181"},"nodeType":"YulFunctionCall","src":"3104:33:181"},"nodeType":"YulExpressionStatement","src":"3104:33:181"},{"nodeType":"YulAssignment","src":"3146:18:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3157:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"3162:1:181","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3153:3:181"},"nodeType":"YulFunctionCall","src":"3153:11:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"3146:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"3078:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"3086:3:181","type":""}],"src":"2903:267:181"},{"body":{"nodeType":"YulBlock","src":"3264:199:181","statements":[{"body":{"nodeType":"YulBlock","src":"3310:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3319:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3322:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3312:6:181"},"nodeType":"YulFunctionCall","src":"3312:12:181"},"nodeType":"YulExpressionStatement","src":"3312:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3285:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3294:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3281:3:181"},"nodeType":"YulFunctionCall","src":"3281:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3306:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3277:3:181"},"nodeType":"YulFunctionCall","src":"3277:32:181"},"nodeType":"YulIf","src":"3274:52:181"},{"nodeType":"YulVariableDeclaration","src":"3335:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3354:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3348:5:181"},"nodeType":"YulFunctionCall","src":"3348:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3339:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3427:5:181"}],"functionName":{"name":"validator_revert_contract_TransparentUpgradeableProxy","nodeType":"YulIdentifier","src":"3373:53:181"},"nodeType":"YulFunctionCall","src":"3373:60:181"},"nodeType":"YulExpressionStatement","src":"3373:60:181"},{"nodeType":"YulAssignment","src":"3442:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"3452:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3442:6:181"}]}]},"name":"abi_decode_tuple_t_address_payable_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3230:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3241:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3253:6:181","type":""}],"src":"3175:288:181"},{"body":{"nodeType":"YulBlock","src":"3615:496:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3632:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3647:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3663:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3668:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3659:3:181"},"nodeType":"YulFunctionCall","src":"3659:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3672:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3655:3:181"},"nodeType":"YulFunctionCall","src":"3655:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3643:3:181"},"nodeType":"YulFunctionCall","src":"3643:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3625:6:181"},"nodeType":"YulFunctionCall","src":"3625:51:181"},"nodeType":"YulExpressionStatement","src":"3625:51:181"},{"nodeType":"YulVariableDeclaration","src":"3685:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3695:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3689:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3717:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3728:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3713:3:181"},"nodeType":"YulFunctionCall","src":"3713:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3733:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3706:6:181"},"nodeType":"YulFunctionCall","src":"3706:30:181"},"nodeType":"YulExpressionStatement","src":"3706:30:181"},{"nodeType":"YulVariableDeclaration","src":"3745:27:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3765:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3759:5:181"},"nodeType":"YulFunctionCall","src":"3759:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3749:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3792:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3803:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3788:3:181"},"nodeType":"YulFunctionCall","src":"3788:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"3808:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3781:6:181"},"nodeType":"YulFunctionCall","src":"3781:34:181"},"nodeType":"YulExpressionStatement","src":"3781:34:181"},{"nodeType":"YulVariableDeclaration","src":"3824:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3833:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"3828:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3893:90:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3922:9:181"},{"name":"i","nodeType":"YulIdentifier","src":"3933:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3918:3:181"},"nodeType":"YulFunctionCall","src":"3918:17:181"},{"kind":"number","nodeType":"YulLiteral","src":"3937:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3914:3:181"},"nodeType":"YulFunctionCall","src":"3914:26:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3956:6:181"},{"name":"i","nodeType":"YulIdentifier","src":"3964:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3952:3:181"},"nodeType":"YulFunctionCall","src":"3952:14:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3968:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3948:3:181"},"nodeType":"YulFunctionCall","src":"3948:23:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3942:5:181"},"nodeType":"YulFunctionCall","src":"3942:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3907:6:181"},"nodeType":"YulFunctionCall","src":"3907:66:181"},"nodeType":"YulExpressionStatement","src":"3907:66:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3854:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"3857:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3851:2:181"},"nodeType":"YulFunctionCall","src":"3851:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3865:19:181","statements":[{"nodeType":"YulAssignment","src":"3867:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3876:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3879:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3872:3:181"},"nodeType":"YulFunctionCall","src":"3872:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"3867:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"3847:3:181","statements":[]},"src":"3843:140:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4007:9:181"},{"name":"length","nodeType":"YulIdentifier","src":"4018:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4003:3:181"},"nodeType":"YulFunctionCall","src":"4003:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"4027:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3999:3:181"},"nodeType":"YulFunctionCall","src":"3999:31:181"},{"kind":"number","nodeType":"YulLiteral","src":"4032:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3992:6:181"},"nodeType":"YulFunctionCall","src":"3992:42:181"},"nodeType":"YulExpressionStatement","src":"3992:42:181"},{"nodeType":"YulAssignment","src":"4043:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4059:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4078:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4086:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4074:3:181"},"nodeType":"YulFunctionCall","src":"4074:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4095:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4091:3:181"},"nodeType":"YulFunctionCall","src":"4091:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4070:3:181"},"nodeType":"YulFunctionCall","src":"4070:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4055:3:181"},"nodeType":"YulFunctionCall","src":"4055:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"4102:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4051:3:181"},"nodeType":"YulFunctionCall","src":"4051:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4043:4:181"}]}]},"name":"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3576:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3587:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3595:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3606:4:181","type":""}],"src":"3468:643:181"},{"body":{"nodeType":"YulBlock","src":"4290:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4307:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4318:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4300:6:181"},"nodeType":"YulFunctionCall","src":"4300:21:181"},"nodeType":"YulExpressionStatement","src":"4300:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4341:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4352:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4337:3:181"},"nodeType":"YulFunctionCall","src":"4337:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4357:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4330:6:181"},"nodeType":"YulFunctionCall","src":"4330:30:181"},"nodeType":"YulExpressionStatement","src":"4330:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4380:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4391:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4376:3:181"},"nodeType":"YulFunctionCall","src":"4376:18:181"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"4396:34:181","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4369:6:181"},"nodeType":"YulFunctionCall","src":"4369:62:181"},"nodeType":"YulExpressionStatement","src":"4369:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4451:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4462:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4447:3:181"},"nodeType":"YulFunctionCall","src":"4447:18:181"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"4467:8:181","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4440:6:181"},"nodeType":"YulFunctionCall","src":"4440:36:181"},"nodeType":"YulExpressionStatement","src":"4440:36:181"},{"nodeType":"YulAssignment","src":"4485:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4497:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4508:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4493:3:181"},"nodeType":"YulFunctionCall","src":"4493:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4485:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4267:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4281:4:181","type":""}],"src":"4116:402:181"},{"body":{"nodeType":"YulBlock","src":"4714:76:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4731:3:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4740:3:181","type":"","value":"230"},{"kind":"number","nodeType":"YulLiteral","src":"4745:10:181","type":"","value":"0x03e14691"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4736:3:181"},"nodeType":"YulFunctionCall","src":"4736:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4724:6:181"},"nodeType":"YulFunctionCall","src":"4724:33:181"},"nodeType":"YulExpressionStatement","src":"4724:33:181"},{"nodeType":"YulAssignment","src":"4766:18:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4777:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"4782:1:181","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4773:3:181"},"nodeType":"YulFunctionCall","src":"4773:11:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"4766:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"4698:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"4706:3:181","type":""}],"src":"4523:267:181"},{"body":{"nodeType":"YulBlock","src":"4969:182:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4986:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4997:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4979:6:181"},"nodeType":"YulFunctionCall","src":"4979:21:181"},"nodeType":"YulExpressionStatement","src":"4979:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5020:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5031:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5016:3:181"},"nodeType":"YulFunctionCall","src":"5016:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5036:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5009:6:181"},"nodeType":"YulFunctionCall","src":"5009:30:181"},"nodeType":"YulExpressionStatement","src":"5009:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5059:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5070:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5055:3:181"},"nodeType":"YulFunctionCall","src":"5055:18:181"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"5075:34:181","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5048:6:181"},"nodeType":"YulFunctionCall","src":"5048:62:181"},"nodeType":"YulExpressionStatement","src":"5048:62:181"},{"nodeType":"YulAssignment","src":"5119:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5131:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5142:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5127:3:181"},"nodeType":"YulFunctionCall","src":"5127:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5119:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4946:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4960:4:181","type":""}],"src":"4795:356:181"}]},"contents":"{\n    { }\n    function validator_revert_contract_TransparentUpgradeableProxy(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$10572(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_TransparentUpgradeableProxy(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$10572t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_TransparentUpgradeableProxy(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_contract_TransparentUpgradeableProxy(value_1)\n        value1 := value_1\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$10572t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_TransparentUpgradeableProxy(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_contract_TransparentUpgradeableProxy(value_1)\n        value1 := value_1\n        let offset := calldataload(add(headStart, 64))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), 0)\n        value2 := memPtr\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_TransparentUpgradeableProxy(value)\n        value0 := value\n    }\n    function abi_encode_tuple_packed_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    {\n        mstore(pos, shl(224, 0x5c60da1b))\n        end := add(pos, 4)\n    }\n    function abi_decode_tuple_t_address_payable_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_TransparentUpgradeableProxy(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        let _1 := 32\n        mstore(add(headStart, _1), 64)\n        let length := mload(value1)\n        mstore(add(headStart, 64), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 96), mload(add(add(value1, i), _1)))\n        }\n        mstore(add(add(headStart, length), 96), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    {\n        mstore(pos, shl(230, 0x03e14691))\n        end := add(pos, 4)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b506000606082860101526060601f19601f83011685010192505050939250505056fea2646970667358221220b0581acce3089c7d8ca5626e7211c58f73be5a6836d4e7178c2e3bb22dbd02c064736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9623609D GT PUSH2 0x4E JUMPI DUP1 PUSH4 0x9623609D EQ PUSH2 0x111 JUMPI DUP1 PUSH4 0x99A88EC4 EQ PUSH2 0x124 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0xF3B7DEAD EQ PUSH2 0x164 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x204E1C7A EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xBC JUMPI DUP1 PUSH4 0x7EFF275E EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xF3 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0x499 JUMP JUMPDEST PUSH2 0x184 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1 PUSH2 0x215 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1 PUSH2 0xEE CALLDATASIZE PUSH1 0x4 PUSH2 0x4BD JUMP JUMPDEST PUSH2 0x229 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA0 JUMP JUMPDEST PUSH2 0xD1 PUSH2 0x11F CALLDATASIZE PUSH1 0x4 PUSH2 0x50C JUMP JUMPDEST PUSH2 0x291 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x130 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1 PUSH2 0x13F CALLDATASIZE PUSH1 0x4 PUSH2 0x4BD JUMP JUMPDEST PUSH2 0x300 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x150 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1 PUSH2 0x15F CALLDATASIZE PUSH1 0x4 PUSH2 0x499 JUMP JUMPDEST PUSH2 0x336 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA0 PUSH2 0x17F CALLDATASIZE PUSH1 0x4 PUSH2 0x499 JUMP JUMPDEST PUSH2 0x3B4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 MLOAD PUSH2 0x1AA SWAP1 PUSH4 0x5C60DA1B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1E5 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1EA JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x20D SWAP2 SWAP1 PUSH2 0x5E2 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x21D PUSH2 0x3DA JUMP JUMPDEST PUSH2 0x227 PUSH1 0x0 PUSH2 0x434 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x231 PUSH2 0x3DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8F28397 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x8F283970 SWAP1 PUSH1 0x24 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x289 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x299 PUSH2 0x3DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x278F7943 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 CALLVALUE SWAP1 PUSH2 0x2C9 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x5FF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x308 PUSH2 0x3DA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1B2CE7F3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x3659CFE6 SWAP1 PUSH1 0x24 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x33E PUSH2 0x3DA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x3A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3B1 DUP2 PUSH2 0x434 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 MLOAD PUSH2 0x1AA SWAP1 PUSH4 0x3E14691 PUSH1 0xE6 SHL DUP2 MSTORE PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x227 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x39F JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4B6 DUP2 PUSH2 0x484 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4DB DUP2 PUSH2 0x484 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4EB DUP2 PUSH2 0x484 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x521 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x52C DUP2 PUSH2 0x484 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x53C DUP2 PUSH2 0x484 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x559 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x56D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x57F JUMPI PUSH2 0x57F PUSH2 0x4F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x5A7 JUMPI PUSH2 0x5A7 PUSH2 0x4F6 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x5C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x4B6 DUP2 PUSH2 0x484 JUMP JUMPDEST PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 PUSH1 0x40 DUP2 DUP5 ADD MSTORE DUP4 MLOAD DUP1 PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x63B JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x60 ADD MSTORE DUP3 ADD PUSH2 0x61F JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x60 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x60 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB0 PC BYTE 0xCC 0xE3 ADDMOD SWAP13 PUSH30 0x8CA5626E7211C58F73BE5A6836D4E7178C2E3BB22DBD02C064736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"373:151:84:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;635:437:49;;;;;;;;;;-1:-1:-1;635:437:49;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;661:32:181;;;643:51;;631:2;616:18;635:437:49;;;;;;;1831:101:38;;;;;;;;;;;;;:::i;:::-;;1825:148:49;;;;;;;;;;-1:-1:-1;1825:148:49;;;;;:::i;:::-;;:::i;1201:85:38:-;;;;;;;;;;-1:-1:-1;1247:7:38;1273:6;-1:-1:-1;;;;;1273:6:38;1201:85;;2593:244:49;;;;;;:::i;:::-;;:::i;2178:149::-;;;;;;;;;;-1:-1:-1;2178:149:49;;;;;:::i;:::-;;:::i;2081:198:38:-;;;;;;;;;;-1:-1:-1;2081:198:38;;;;;:::i;:::-;;:::i;1232:419:49:-;;;;;;;;;;-1:-1:-1;1232:419:49;;;;;:::i;:::-;;:::i;635:437::-;731:7;908:12;922:23;957:5;-1:-1:-1;;;;;949:25:49;:40;;;;-1:-1:-1;;;3104:33:181;;3162:1;3153:11;;2903:267;949:40:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;907:82;;;;1007:7;999:16;;;;;;1043:10;1032:33;;;;;;;;;;;;:::i;:::-;1025:40;635:437;-1:-1:-1;;;;635:437:49:o;1831:101:38:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;1825:148:49:-;1094:13:38;:11;:13::i;:::-;1939:27:49::1;::::0;-1:-1:-1;;;1939:27:49;;-1:-1:-1;;;;;661:32:181;;;1939:27:49::1;::::0;::::1;643:51:181::0;1939:17:49;::::1;::::0;::::1;::::0;616:18:181;;1939:27:49::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1825:148:::0;;:::o;2593:244::-;1094:13:38;:11;:13::i;:::-;2768:62:49::1;::::0;-1:-1:-1;;;2768:62:49;;-1:-1:-1;;;;;2768:22:49;::::1;::::0;::::1;::::0;2798:9:::1;::::0;2768:62:::1;::::0;2809:14;;2825:4;;2768:62:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;2593:244:::0;;;:::o;2178:149::-;1094:13:38;:11;:13::i;:::-;2289:31:49::1;::::0;-1:-1:-1;;;2289:31:49;;-1:-1:-1;;;;;661:32:181;;;2289:31:49::1;::::0;::::1;643:51:181::0;2289:15:49;::::1;::::0;::::1;::::0;616:18:181;;2289:31:49::1;497:203:181::0;2081:198:38;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:38;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:38;;4318:2:181;2161:73:38::1;::::0;::::1;4300:21:181::0;4357:2;4337:18;;;4330:30;4396:34;4376:18;;;4369:62;-1:-1:-1;;;4447:18:181;;;4440:36;4493:19;;2161:73:38::1;;;;;;;;;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;1232:419:49:-;1319:7;1487:12;1501:23;1536:5;-1:-1:-1;;;;;1528:25:49;:40;;;;-1:-1:-1;;;4724:33:181;;4782:1;4773:11;;4523:267;1359:130:38;1247:7;1273:6;-1:-1:-1;;;;;1273:6:38;719:10:58;1422:23:38;1414:68;;;;-1:-1:-1;;;1414:68:38;;4997:2:181;1414:68:38;;;4979:21:181;;;5016:18;;;5009:30;5075:34;5055:18;;;5048:62;5127:18;;1414:68:38;4795:356:181;2433:187:38;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:38;;;-1:-1:-1;;;;;;2541:17:38;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;14:160:181:-;-1:-1:-1;;;;;118:31:181;;108:42;;98:70;;164:1;161;154:12;179:313;275:6;328:2;316:9;307:7;303:23;299:32;296:52;;;344:1;341;334:12;296:52;383:9;370:23;402:60;456:5;402:60;:::i;:::-;481:5;179:313;-1:-1:-1;;;179:313:181:o;705:483::-;810:6;818;871:2;859:9;850:7;846:23;842:32;839:52;;;887:1;884;877:12;839:52;926:9;913:23;945:60;999:5;945:60;:::i;:::-;1024:5;-1:-1:-1;1081:2:181;1066:18;;1053:32;1094:62;1053:32;1094:62;:::i;:::-;1175:7;1165:17;;;705:483;;;;;:::o;1193:127::-;1254:10;1249:3;1245:20;1242:1;1235:31;1285:4;1282:1;1275:15;1309:4;1306:1;1299:15;1325:1292;1448:6;1456;1464;1517:2;1505:9;1496:7;1492:23;1488:32;1485:52;;;1533:1;1530;1523:12;1485:52;1572:9;1559:23;1591:60;1645:5;1591:60;:::i;:::-;1670:5;-1:-1:-1;1727:2:181;1712:18;;1699:32;1740:62;1699:32;1740:62;:::i;:::-;1821:7;-1:-1:-1;1879:2:181;1864:18;;1851:32;1902:18;1932:14;;;1929:34;;;1959:1;1956;1949:12;1929:34;1997:6;1986:9;1982:22;1972:32;;2042:7;2035:4;2031:2;2027:13;2023:27;2013:55;;2064:1;2061;2054:12;2013:55;2100:2;2087:16;2122:2;2118;2115:10;2112:36;;;2128:18;;:::i;:::-;2203:2;2197:9;2171:2;2257:13;;-1:-1:-1;;2253:22:181;;;2277:2;2249:31;2245:40;2233:53;;;2301:18;;;2321:22;;;2298:46;2295:72;;;2347:18;;:::i;:::-;2387:10;2383:2;2376:22;2422:2;2414:6;2407:18;2462:7;2457:2;2452;2448;2444:11;2440:20;2437:33;2434:53;;;2483:1;2480;2473:12;2434:53;2539:2;2534;2530;2526:11;2521:2;2513:6;2509:15;2496:46;2584:1;2579:2;2574;2566:6;2562:15;2558:24;2551:35;2605:6;2595:16;;;;;;;1325:1292;;;;;:::o;3175:288::-;3253:6;3306:2;3294:9;3285:7;3281:23;3277:32;3274:52;;;3322:1;3319;3312:12;3274:52;3354:9;3348:16;3373:60;3427:5;3373:60;:::i;3468:643::-;3672:1;3668;3663:3;3659:11;3655:19;3647:6;3643:32;3632:9;3625:51;3606:4;3695:2;3733;3728;3717:9;3713:18;3706:30;3765:6;3759:13;3808:6;3803:2;3792:9;3788:18;3781:34;3833:1;3843:140;3857:6;3854:1;3851:13;3843:140;;;3952:14;;;3948:23;;3942:30;3918:17;;;3937:2;3914:26;3907:66;3872:10;;3843:140;;;3847:3;4032:1;4027:2;4018:6;4007:9;4003:22;3999:31;3992:42;4102:2;4095;4091:7;4086:2;4078:6;4074:15;4070:29;4059:9;4055:45;4051:54;4043:62;;;;3468:643;;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"336600","executionCost":"infinite","totalCost":"infinite"},"external":{"changeProxyAdmin(address,address)":"infinite","getProxyAdmin(address)":"infinite","getProxyImplementation(address)":"infinite","owner()":"2386","renounceOwnership()":"infinite","transferOwnership(address)":"infinite","upgrade(address,address)":"infinite","upgradeAndCall(address,address,bytes)":"infinite"}},"methodIdentifiers":{"changeProxyAdmin(address,address)":"7eff275e","getProxyAdmin(address)":"f3b7dead","getProxyImplementation(address)":"204e1c7a","owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","upgrade(address,address)":"99a88ec4","upgradeAndCall(address,address,bytes)":"9623609d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/helpers/ConnextProxyAdmin.sol\":\"ConnextProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\",\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n    /**\\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n     * address.\\n     *\\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n     * function revert if invoked through a proxy.\\n     */\\n    function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n    /**\\n     * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n     *\\n     * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n     * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n     */\\n    constructor(address _logic, bytes memory _data) payable {\\n        _upgradeToAndCall(_logic, _data, false);\\n    }\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _implementation() internal view virtual override returns (address impl) {\\n        return ERC1967Upgrade._getImplementation();\\n    }\\n}\\n\",\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n    // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n    /**\\n     * @dev Storage slot with the address of the current implementation.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n    /**\\n     * @dev Emitted when the implementation is upgraded.\\n     */\\n    event Upgraded(address indexed implementation);\\n\\n    /**\\n     * @dev Returns the current implementation address.\\n     */\\n    function _getImplementation() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 implementation slot.\\n     */\\n    function _setImplementation(address newImplementation) private {\\n        require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeTo(address newImplementation) internal {\\n        _setImplementation(newImplementation);\\n        emit Upgraded(newImplementation);\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCall(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _upgradeTo(newImplementation);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(newImplementation, data);\\n        }\\n    }\\n\\n    /**\\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n     *\\n     * Emits an {Upgraded} event.\\n     */\\n    function _upgradeToAndCallUUPS(\\n        address newImplementation,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\\n        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n            _setImplementation(newImplementation);\\n        } else {\\n            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n                require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n            } catch {\\n                revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n            }\\n            _upgradeToAndCall(newImplementation, data, forceCall);\\n        }\\n    }\\n\\n    /**\\n     * @dev Storage slot with the admin of the contract.\\n     * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n     * validated in the constructor.\\n     */\\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n    /**\\n     * @dev Emitted when the admin account has changed.\\n     */\\n    event AdminChanged(address previousAdmin, address newAdmin);\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _getAdmin() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new address in the EIP1967 admin slot.\\n     */\\n    function _setAdmin(address newAdmin) private {\\n        require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     */\\n    function _changeAdmin(address newAdmin) internal {\\n        emit AdminChanged(_getAdmin(), newAdmin);\\n        _setAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n     */\\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n    /**\\n     * @dev Emitted when the beacon is upgraded.\\n     */\\n    event BeaconUpgraded(address indexed beacon);\\n\\n    /**\\n     * @dev Returns the current beacon.\\n     */\\n    function _getBeacon() internal view returns (address) {\\n        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n    }\\n\\n    /**\\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\\n     */\\n    function _setBeacon(address newBeacon) private {\\n        require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n        require(\\n            Address.isContract(IBeacon(newBeacon).implementation()),\\n            \\\"ERC1967: beacon implementation is not a contract\\\"\\n        );\\n        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n    }\\n\\n    /**\\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n     *\\n     * Emits a {BeaconUpgraded} event.\\n     */\\n    function _upgradeBeaconToAndCall(\\n        address newBeacon,\\n        bytes memory data,\\n        bool forceCall\\n    ) internal {\\n        _setBeacon(newBeacon);\\n        emit BeaconUpgraded(newBeacon);\\n        if (data.length > 0 || forceCall) {\\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n    /**\\n     * @dev Delegates the current call to `implementation`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _delegate(address implementation) internal virtual {\\n        assembly {\\n            // Copy msg.data. We take full control of memory in this inline assembly\\n            // block because it will not return to Solidity code. We overwrite the\\n            // Solidity scratch pad at memory position 0.\\n            calldatacopy(0, 0, calldatasize())\\n\\n            // Call the implementation.\\n            // out and outsize are 0 because we don't know the size yet.\\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n            // Copy the returned data.\\n            returndatacopy(0, 0, returndatasize())\\n\\n            switch result\\n            // delegatecall returns 0 on error.\\n            case 0 {\\n                revert(0, returndatasize())\\n            }\\n            default {\\n                return(0, returndatasize())\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n     * and {_fallback} should delegate.\\n     */\\n    function _implementation() internal view virtual returns (address);\\n\\n    /**\\n     * @dev Delegates the current call to the address returned by `_implementation()`.\\n     *\\n     * This function does not return to its internal call site, it will return directly to the external caller.\\n     */\\n    function _fallback() internal virtual {\\n        _beforeFallback();\\n        _delegate(_implementation());\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n     * function in the contract matches the call data.\\n     */\\n    fallback() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n     * is empty.\\n     */\\n    receive() external payable virtual {\\n        _fallback();\\n    }\\n\\n    /**\\n     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n     * call, or as part of the Solidity `fallback` or `receive` functions.\\n     *\\n     * If overridden should call `super._beforeFallback()`.\\n     */\\n    function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n    /**\\n     * @dev Must return an address that can be used as a delegate call target.\\n     *\\n     * {BeaconProxy} will check that this address is a contract.\\n     */\\n    function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n    /**\\n     * @dev Returns the current implementation of `proxy`.\\n     *\\n     * Requirements:\\n     *\\n     * - This contract must be the admin of `proxy`.\\n     */\\n    function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n        // We need to manually run the static call since the getter cannot be flagged as view\\n        // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n        (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n        require(success);\\n        return abi.decode(returndata, (address));\\n    }\\n\\n    /**\\n     * @dev Returns the current admin of `proxy`.\\n     *\\n     * Requirements:\\n     *\\n     * - This contract must be the admin of `proxy`.\\n     */\\n    function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n        // We need to manually run the static call since the getter cannot be flagged as view\\n        // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n        (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n        require(success);\\n        return abi.decode(returndata, (address));\\n    }\\n\\n    /**\\n     * @dev Changes the admin of `proxy` to `newAdmin`.\\n     *\\n     * Requirements:\\n     *\\n     * - This contract must be the current admin of `proxy`.\\n     */\\n    function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n        proxy.changeAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n     *\\n     * Requirements:\\n     *\\n     * - This contract must be the admin of `proxy`.\\n     */\\n    function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n        proxy.upgradeTo(implementation);\\n    }\\n\\n    /**\\n     * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n     * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n     *\\n     * Requirements:\\n     *\\n     * - This contract must be the admin of `proxy`.\\n     */\\n    function upgradeAndCall(\\n        TransparentUpgradeableProxy proxy,\\n        address implementation,\\n        bytes memory data\\n    ) public payable virtual onlyOwner {\\n        proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n    }\\n}\\n\",\"keccak256\":\"0x33b8603bfbef7f33d9308b79c79aa3db7eb19525fd1addd764285e834ca275d7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n    /**\\n     * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n     * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n     */\\n    constructor(\\n        address _logic,\\n        address admin_,\\n        bytes memory _data\\n    ) payable ERC1967Proxy(_logic, _data) {\\n        _changeAdmin(admin_);\\n    }\\n\\n    /**\\n     * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n     */\\n    modifier ifAdmin() {\\n        if (msg.sender == _getAdmin()) {\\n            _;\\n        } else {\\n            _fallback();\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the current admin.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n     *\\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n     */\\n    function admin() external ifAdmin returns (address admin_) {\\n        admin_ = _getAdmin();\\n    }\\n\\n    /**\\n     * @dev Returns the current implementation.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n     *\\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n     * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n     * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n     */\\n    function implementation() external ifAdmin returns (address implementation_) {\\n        implementation_ = _implementation();\\n    }\\n\\n    /**\\n     * @dev Changes the admin of the proxy.\\n     *\\n     * Emits an {AdminChanged} event.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n     */\\n    function changeAdmin(address newAdmin) external virtual ifAdmin {\\n        _changeAdmin(newAdmin);\\n    }\\n\\n    /**\\n     * @dev Upgrade the implementation of the proxy.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n     */\\n    function upgradeTo(address newImplementation) external ifAdmin {\\n        _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n    }\\n\\n    /**\\n     * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n     * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n     * proxied contract.\\n     *\\n     * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n     */\\n    function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n        _upgradeToAndCall(newImplementation, data, true);\\n    }\\n\\n    /**\\n     * @dev Returns the current admin.\\n     */\\n    function _admin() internal view virtual returns (address) {\\n        return _getAdmin();\\n    }\\n\\n    /**\\n     * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n     */\\n    function _beforeFallback() internal virtual override {\\n        require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n        super._beforeFallback();\\n    }\\n}\\n\",\"keccak256\":\"0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n *     function _getImplementation() internal view returns (address) {\\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n *     }\\n *\\n *     function _setImplementation(address newImplementation) internal {\\n *         require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n *     }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n    struct AddressSlot {\\n        address value;\\n    }\\n\\n    struct BooleanSlot {\\n        bool value;\\n    }\\n\\n    struct Bytes32Slot {\\n        bytes32 value;\\n    }\\n\\n    struct Uint256Slot {\\n        uint256 value;\\n    }\\n\\n    /**\\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n     */\\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n     */\\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n     */\\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n     */\\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            r.slot := slot\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/ConnextProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.17;\\n\\nimport {ProxyAdmin} from \\\"@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ConnextProxyAdmin is ProxyAdmin {\\n  constructor(address owner) ProxyAdmin() {\\n    // We just need this for our hardhat tooling right now\\n  }\\n}\\n\",\"keccak256\":\"0x8a140fe6a125653b70c92a9c8dea7f00da54944ab2028b3320899b891bf940d0\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":9551,"contract":"contracts/core/connext/helpers/ConnextProxyAdmin.sol:ConnextProxyAdmin","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/core/connext/helpers/LPToken.sol":{"LPToken":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"name":"initialize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Only Swap contracts should initialize and own LPToken contracts.","kind":"dev","methods":{"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"burnFrom(address,uint256)":{"details":"only owner can call this burn function","params":{"account":"address of account from which to burn token","amount":"amount of tokens to mint"}},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"decreaseAllowance(address,uint256)":{"details":"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."},"increaseAllowance(address,uint256)":{"details":"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."},"initialize(string,string)":{"details":"The caller of this function will become the owner. A Swap contract should call this in its initializer function.","params":{"name":"name of this token","symbol":"symbol of this token"}},"mint(address,uint256)":{"details":"only owner can call this mint function","params":{"amount":"amount of tokens to mint","recipient":"address of account to receive the tokens"}},"name()":{"details":"Returns the name of the token."},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"title":"Liquidity Provider Token","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506111b3806100206000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a257806395d89b411161007157806395d89b411461021f578063a457c2d714610227578063a9059cbb1461023a578063dd62ed3e1461024d578063f2fde38b1461026057600080fd5b806370a08231146101c0578063715018a6146101e957806379cc6790146101f15780638da5cb5b1461020457600080fd5b8063313ce567116100de578063313ce56714610176578063395093511461018557806340c10f19146101985780634cd88b76146101ad57600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610163575b600080fd5b610118610273565b6040516101259190610d9d565b60405180910390f35b61014161013c366004610e07565b610305565b6040519015158152602001610125565b6035545b604051908152602001610125565b610141610171366004610e31565b61031f565b60405160128152602001610125565b610141610193366004610e07565b610343565b6101ab6101a6366004610e07565b610365565b005b6101416101bb366004610f10565b6103c9565b6101556101ce366004610f74565b6001600160a01b031660009081526033602052604090205490565b6101ab6104f5565b6101ab6101ff366004610e07565b610509565b6065546040516001600160a01b039091168152602001610125565b610118610564565b610141610235366004610e07565b610573565b610141610248366004610e07565b6105ee565b61015561025b366004610f96565b6105fc565b6101ab61026e366004610f74565b610627565b60606036805461028290610fc9565b80601f01602080910402602001604051908101604052809291908181526020018280546102ae90610fc9565b80156102fb5780601f106102d0576101008083540402835291602001916102fb565b820191906000526020600020905b8154815290600101906020018083116102de57829003601f168201915b5050505050905090565b6000336103138185856106a0565b60019150505b92915050565b60003361032d8582856107c4565b61033885858561083e565b506001949350505050565b60003361031381858561035683836105fc565b6103609190611003565b6106a0565b61036d6109f4565b806000036103bb5760405162461bcd60e51b815260206004820152601660248201527504c50546f6b656e3a2063616e6e6f74206d696e7420360541b60448201526064015b60405180910390fd5b6103c58282610a4e565b5050565b60008054610100900460ff16158080156103ea5750600054600160ff909116105b806104045750303b158015610404575060005460ff166001145b6104675760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103b2565b6000805460ff19166001179055801561048a576000805461ff0019166101001790555b610492610b1b565b61049c8484610b42565b6104a4610b87565b6001915080156104ee576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5092915050565b6104fd6109f4565b6105076000610bb3565b565b6105116109f4565b8060000361055a5760405162461bcd60e51b815260206004820152601660248201527504c50546f6b656e3a2063616e6e6f74206275726e20360541b60448201526064016103b2565b6103c58282610c05565b60606037805461028290610fc9565b6000338161058182866105fc565b9050838110156105e15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103b2565b61033882868684036106a0565b60003361031381858561083e565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b61062f6109f4565b6001600160a01b0381166106945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b2565b61069d81610bb3565b50565b6001600160a01b0383166107025760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103b2565b6001600160a01b0382166107635760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103b2565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006107d084846105fc565b90506000198114610838578181101561082b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103b2565b61083884848484036106a0565b50505050565b6001600160a01b0383166108a25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103b2565b6001600160a01b0382166109045760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103b2565b61090f838383610d45565b6001600160a01b038316600090815260336020526040902054818110156109875760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103b2565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906109e79086815260200190565b60405180910390a3610838565b6065546001600160a01b031633146105075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b2565b6001600160a01b038216610aa45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103b2565b610ab060008383610d45565b8060356000828254610ac29190611003565b90915550506001600160a01b0382166000818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600054610100900460ff166105075760405162461bcd60e51b81526004016103b290611024565b600054610100900460ff16610b695760405162461bcd60e51b81526004016103b290611024565b6036610b7583826110bd565b506037610b8282826110bd565b505050565b600054610100900460ff16610bae5760405162461bcd60e51b81526004016103b290611024565b610507335b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103b2565b610c7182600083610d45565b6001600160a01b03821660009081526033602052604090205481811015610ce55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103b2565b6001600160a01b03831660008181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b306001600160a01b03831603610b825760405162461bcd60e51b815260206004820152601e60248201527f4c50546f6b656e3a2063616e6e6f742073656e6420746f20697473656c66000060448201526064016103b2565b600060208083528351808285015260005b81811015610dca57858101830151858201604001528201610dae565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610e0257600080fd5b919050565b60008060408385031215610e1a57600080fd5b610e2383610deb565b946020939093013593505050565b600080600060608486031215610e4657600080fd5b610e4f84610deb565b9250610e5d60208501610deb565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610e9457600080fd5b813567ffffffffffffffff80821115610eaf57610eaf610e6d565b604051601f8301601f19908116603f01168101908282118183101715610ed757610ed7610e6d565b81604052838152866020858801011115610ef057600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610f2357600080fd5b823567ffffffffffffffff80821115610f3b57600080fd5b610f4786838701610e83565b93506020850135915080821115610f5d57600080fd5b50610f6a85828601610e83565b9150509250929050565b600060208284031215610f8657600080fd5b610f8f82610deb565b9392505050565b60008060408385031215610fa957600080fd5b610fb283610deb565b9150610fc060208401610deb565b90509250929050565b600181811c90821680610fdd57607f821691505b602082108103610ffd57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561031957634e487b7160e01b600052601160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610b8257600081815260208120601f850160051c810160208610156110965750805b601f850160051c820191505b818110156110b5578281556001016110a2565b505050505050565b815167ffffffffffffffff8111156110d7576110d7610e6d565b6110eb816110e58454610fc9565b8461106f565b602080601f83116001811461112057600084156111085750858301515b600019600386901b1c1916600185901b1785556110b5565b600085815260208120601f198616915b8281101561114f57888601518255948401946001909101908401611130565b508582101561116d5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122016715179f47a5579a7f4ffe57608078db5b76af23d867ef61df8000244e74e3b64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11B3 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x10B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0x95D89B41 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x21F JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x23A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x24D JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x260 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1E9 JUMPI DUP1 PUSH4 0x79CC6790 EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x204 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0x4CD88B76 EQ PUSH2 0x1AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x12E JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x163 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x118 PUSH2 0x273 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x125 SWAP2 SWAP1 PUSH2 0xD9D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x141 PUSH2 0x13C CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x305 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x125 JUMP JUMPDEST PUSH1 0x35 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x125 JUMP JUMPDEST PUSH2 0x141 PUSH2 0x171 CALLDATASIZE PUSH1 0x4 PUSH2 0xE31 JUMP JUMPDEST PUSH2 0x31F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x125 JUMP JUMPDEST PUSH2 0x141 PUSH2 0x193 CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x343 JUMP JUMPDEST PUSH2 0x1AB PUSH2 0x1A6 CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x365 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x141 PUSH2 0x1BB CALLDATASIZE PUSH1 0x4 PUSH2 0xF10 JUMP JUMPDEST PUSH2 0x3C9 JUMP JUMPDEST PUSH2 0x155 PUSH2 0x1CE CALLDATASIZE PUSH1 0x4 PUSH2 0xF74 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1AB PUSH2 0x4F5 JUMP JUMPDEST PUSH2 0x1AB PUSH2 0x1FF CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x509 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x125 JUMP JUMPDEST PUSH2 0x118 PUSH2 0x564 JUMP JUMPDEST PUSH2 0x141 PUSH2 0x235 CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x573 JUMP JUMPDEST PUSH2 0x141 PUSH2 0x248 CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x5EE JUMP JUMPDEST PUSH2 0x155 PUSH2 0x25B CALLDATASIZE PUSH1 0x4 PUSH2 0xF96 JUMP JUMPDEST PUSH2 0x5FC JUMP JUMPDEST PUSH2 0x1AB PUSH2 0x26E CALLDATASIZE PUSH1 0x4 PUSH2 0xF74 JUMP JUMPDEST PUSH2 0x627 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x36 DUP1 SLOAD PUSH2 0x282 SWAP1 PUSH2 0xFC9 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x2AE SWAP1 PUSH2 0xFC9 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2FB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2D0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2FB JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2DE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x313 DUP2 DUP6 DUP6 PUSH2 0x6A0 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x32D DUP6 DUP3 DUP6 PUSH2 0x7C4 JUMP JUMPDEST PUSH2 0x338 DUP6 DUP6 DUP6 PUSH2 0x83E JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x313 DUP2 DUP6 DUP6 PUSH2 0x356 DUP4 DUP4 PUSH2 0x5FC JUMP JUMPDEST PUSH2 0x360 SWAP2 SWAP1 PUSH2 0x1003 JUMP JUMPDEST PUSH2 0x6A0 JUMP JUMPDEST PUSH2 0x36D PUSH2 0x9F4 JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x3BB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x4C50546F6B656E3A2063616E6E6F74206D696E74203 PUSH1 0x54 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3C5 DUP3 DUP3 PUSH2 0xA4E JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x3EA JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x404 JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x404 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x467 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x48A JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x492 PUSH2 0xB1B JUMP JUMPDEST PUSH2 0x49C DUP5 DUP5 PUSH2 0xB42 JUMP JUMPDEST PUSH2 0x4A4 PUSH2 0xB87 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP DUP1 ISZERO PUSH2 0x4EE JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x4FD PUSH2 0x9F4 JUMP JUMPDEST PUSH2 0x507 PUSH1 0x0 PUSH2 0xBB3 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x511 PUSH2 0x9F4 JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x55A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x4C50546F6B656E3A2063616E6E6F74206275726E203 PUSH1 0x54 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0x3C5 DUP3 DUP3 PUSH2 0xC05 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x282 SWAP1 PUSH2 0xFC9 JUMP JUMPDEST PUSH1 0x0 CALLER DUP2 PUSH2 0x581 DUP3 DUP7 PUSH2 0x5FC JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x5E1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0x338 DUP3 DUP7 DUP7 DUP5 SUB PUSH2 0x6A0 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x313 DUP2 DUP6 DUP6 PUSH2 0x83E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x62F PUSH2 0x9F4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x694 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0x69D DUP2 PUSH2 0xBB3 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x702 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x763 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7D0 DUP5 DUP5 PUSH2 0x5FC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x838 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x82B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0x838 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x6A0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x8A2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x904 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0x90F DUP4 DUP4 DUP4 PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x987 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE SWAP3 DUP7 AND DUP1 DUP3 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE SWAP2 MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x9E7 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x838 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x507 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xAA4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0xAB0 PUSH1 0x0 DUP4 DUP4 PUSH2 0xD45 JUMP JUMPDEST DUP1 PUSH1 0x35 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0xAC2 SWAP2 SWAP1 PUSH2 0x1003 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE MLOAD DUP5 DUP2 MSTORE PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x507 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3B2 SWAP1 PUSH2 0x1024 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xB69 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3B2 SWAP1 PUSH2 0x1024 JUMP JUMPDEST PUSH1 0x36 PUSH2 0xB75 DUP4 DUP3 PUSH2 0x10BD JUMP JUMPDEST POP PUSH1 0x37 PUSH2 0xB82 DUP3 DUP3 PUSH2 0x10BD JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xBAE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3B2 SWAP1 PUSH2 0x1024 JUMP JUMPDEST PUSH2 0x507 CALLER JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xC65 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E2066726F6D20746865207A65726F20616464726573 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x73 PUSH1 0xF8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0xC71 DUP3 PUSH1 0x0 DUP4 PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0xCE5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E20616D6F756E7420657863656564732062616C616E PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE PUSH1 0x35 DUP1 SLOAD DUP8 SWAP1 SUB SWAP1 SSTORE MLOAD DUP6 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SUB PUSH2 0xB82 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C50546F6B656E3A2063616E6E6F742073656E6420746F20697473656C660000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDCA JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xDAE JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xE02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE23 DUP4 PUSH2 0xDEB JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xE46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE4F DUP5 PUSH2 0xDEB JUMP JUMPDEST SWAP3 POP PUSH2 0xE5D PUSH1 0x20 DUP6 ADD PUSH2 0xDEB JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xE94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xEAF JUMPI PUSH2 0xEAF PUSH2 0xE6D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xED7 JUMPI PUSH2 0xED7 PUSH2 0xE6D JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0xEF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xF23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xF3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF47 DUP7 DUP4 DUP8 ADD PUSH2 0xE83 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xF5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF6A DUP6 DUP3 DUP7 ADD PUSH2 0xE83 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF8F DUP3 PUSH2 0xDEB JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xFA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFB2 DUP4 PUSH2 0xDEB JUMP JUMPDEST SWAP2 POP PUSH2 0xFC0 PUSH1 0x20 DUP5 ADD PUSH2 0xDEB JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xFDD JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0xFFD JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x319 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2B SWAP1 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 PUSH1 0x40 DUP3 ADD MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0xB82 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH2 0x1096 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x10B5 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x10A2 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x10D7 JUMPI PUSH2 0x10D7 PUSH2 0xE6D JUMP JUMPDEST PUSH2 0x10EB DUP2 PUSH2 0x10E5 DUP5 SLOAD PUSH2 0xFC9 JUMP JUMPDEST DUP5 PUSH2 0x106F JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x1120 JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x1108 JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH2 0x10B5 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x114F JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH2 0x1130 JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH2 0x116D JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 AND PUSH18 0x5179F47A5579A7F4FFE57608078DB5B76AF2 RETURNDATASIZE DUP7 PUSH31 0xF61DF8000244E74E3B64736F6C634300081100330000000000000000000000 ","sourceMap":"588:2182:85:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@__Context_init_unchained_9519":{"entryPoint":2843,"id":9519,"parameterSlots":0,"returnSlots":0},"@__ERC20_init_unchained_8503":{"entryPoint":2882,"id":8503,"parameterSlots":2,"returnSlots":0},"@__Ownable_init_unchained_7975":{"entryPoint":2951,"id":7975,"parameterSlots":0,"returnSlots":0},"@_afterTokenTransfer_9044":{"entryPoint":null,"id":9044,"parameterSlots":3,"returnSlots":0},"@_approve_8979":{"entryPoint":1696,"id":8979,"parameterSlots":3,"returnSlots":0},"@_beforeTokenTransfer_23174":{"entryPoint":3397,"id":23174,"parameterSlots":3,"returnSlots":0},"@_beforeTokenTransfer_9033":{"entryPoint":null,"id":9033,"parameterSlots":3,"returnSlots":0},"@_burn_8934":{"entryPoint":3077,"id":8934,"parameterSlots":2,"returnSlots":0},"@_checkOwner_8006":{"entryPoint":2548,"id":8006,"parameterSlots":0,"returnSlots":0},"@_mint_8862":{"entryPoint":2638,"id":8862,"parameterSlots":2,"returnSlots":0},"@_msgSender_9528":{"entryPoint":null,"id":9528,"parameterSlots":0,"returnSlots":1},"@_spendAllowance_9022":{"entryPoint":1988,"id":9022,"parameterSlots":3,"returnSlots":0},"@_transferOwnership_8063":{"entryPoint":null,"id":8063,"parameterSlots":1,"returnSlots":0},"@_transfer_8805":{"entryPoint":2110,"id":8805,"parameterSlots":3,"returnSlots":0},"@allowance_8600":{"entryPoint":1532,"id":8600,"parameterSlots":2,"returnSlots":1},"@approve_8625":{"entryPoint":773,"id":8625,"parameterSlots":2,"returnSlots":1},"@balanceOf_8557":{"entryPoint":null,"id":8557,"parameterSlots":1,"returnSlots":1},"@burnFrom_23143":{"entryPoint":1289,"id":23143,"parameterSlots":2,"returnSlots":0},"@decimals_8533":{"entryPoint":null,"id":8533,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_8728":{"entryPoint":1395,"id":8728,"parameterSlots":2,"returnSlots":1},"@increaseAllowance_8687":{"entryPoint":835,"id":8687,"parameterSlots":2,"returnSlots":1},"@initialize_23097":{"entryPoint":969,"id":23097,"parameterSlots":2,"returnSlots":1},"@isContract_9235":{"entryPoint":null,"id":9235,"parameterSlots":1,"returnSlots":1},"@mint_23120":{"entryPoint":869,"id":23120,"parameterSlots":2,"returnSlots":0},"@name_8513":{"entryPoint":627,"id":8513,"parameterSlots":0,"returnSlots":1},"@owner_7992":{"entryPoint":null,"id":7992,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_8020":{"entryPoint":1269,"id":8020,"parameterSlots":0,"returnSlots":0},"@symbol_8523":{"entryPoint":1380,"id":8523,"parameterSlots":0,"returnSlots":1},"@totalSupply_8543":{"entryPoint":null,"id":8543,"parameterSlots":0,"returnSlots":1},"@transferFrom_8658":{"entryPoint":799,"id":8658,"parameterSlots":3,"returnSlots":1},"@transferOwnership_8043":{"entryPoint":1575,"id":8043,"parameterSlots":1,"returnSlots":0},"@transfer_8582":{"entryPoint":1518,"id":8582,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":3563,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_string":{"entryPoint":3715,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":3956,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":3990,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":3633,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":3591,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr":{"entryPoint":3856,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":3485,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_746dbb314e07631883e9c2af6082a34934cdebb65c5ce78cbe0a4a2355827918__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":4132,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ed34f82a9e5f1c19797c90dabe69af55fd60996fe9929040c5fdcf768caac1bc__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ef142e1a2846b964b816ff083db6d21006ea5123566a1edd36cdd44bd455377f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_dataslot_string_storage":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":4099,"id":null,"parameterSlots":2,"returnSlots":1},"clean_up_bytearray_end_slots_string_storage":{"entryPoint":4207,"id":null,"parameterSlots":3,"returnSlots":0},"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage":{"entryPoint":4285,"id":null,"parameterSlots":2,"returnSlots":0},"extract_byte_array_length":{"entryPoint":4041,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x41":{"entryPoint":3693,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:13590:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:427:181","statements":[{"nodeType":"YulVariableDeclaration","src":"145:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"155:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"149:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"173:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"184:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"166:6:181"},"nodeType":"YulFunctionCall","src":"166:21:181"},"nodeType":"YulExpressionStatement","src":"166:21:181"},{"nodeType":"YulVariableDeclaration","src":"196:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"216:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:181"},"nodeType":"YulFunctionCall","src":"210:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"200:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"243:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"254:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"239:3:181"},"nodeType":"YulFunctionCall","src":"239:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"259:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:181"},"nodeType":"YulFunctionCall","src":"232:34:181"},"nodeType":"YulExpressionStatement","src":"232:34:181"},{"nodeType":"YulVariableDeclaration","src":"275:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"284:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"279:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"344:90:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"373:9:181"},{"name":"i","nodeType":"YulIdentifier","src":"384:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"369:3:181"},"nodeType":"YulFunctionCall","src":"369:17:181"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:181"},"nodeType":"YulFunctionCall","src":"365:26:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"407:6:181"},{"name":"i","nodeType":"YulIdentifier","src":"415:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"403:3:181"},"nodeType":"YulFunctionCall","src":"403:14:181"},{"name":"_1","nodeType":"YulIdentifier","src":"419:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:181"},"nodeType":"YulFunctionCall","src":"399:23:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"393:5:181"},"nodeType":"YulFunctionCall","src":"393:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:181"},"nodeType":"YulFunctionCall","src":"358:66:181"},"nodeType":"YulExpressionStatement","src":"358:66:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"305:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"308:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"302:2:181"},"nodeType":"YulFunctionCall","src":"302:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"316:19:181","statements":[{"nodeType":"YulAssignment","src":"318:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"327:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"330:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:181"},"nodeType":"YulFunctionCall","src":"323:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"318:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"298:3:181","statements":[]},"src":"294:140:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"458:9:181"},{"name":"length","nodeType":"YulIdentifier","src":"469:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"454:3:181"},"nodeType":"YulFunctionCall","src":"454:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"478:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"450:3:181"},"nodeType":"YulFunctionCall","src":"450:31:181"},{"kind":"number","nodeType":"YulLiteral","src":"483:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"443:6:181"},"nodeType":"YulFunctionCall","src":"443:42:181"},"nodeType":"YulExpressionStatement","src":"443:42:181"},{"nodeType":"YulAssignment","src":"494:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"510:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"529:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"537:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"525:3:181"},"nodeType":"YulFunctionCall","src":"525:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"546:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"542:3:181"},"nodeType":"YulFunctionCall","src":"542:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"521:3:181"},"nodeType":"YulFunctionCall","src":"521:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"506:3:181"},"nodeType":"YulFunctionCall","src":"506:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"553:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"502:3:181"},"nodeType":"YulFunctionCall","src":"502:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"494:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"115:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"126:4:181","type":""}],"src":"14:548:181"},{"body":{"nodeType":"YulBlock","src":"616:124:181","statements":[{"nodeType":"YulAssignment","src":"626:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"648:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"635:12:181"},"nodeType":"YulFunctionCall","src":"635:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"626:5:181"}]},{"body":{"nodeType":"YulBlock","src":"718:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"727:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"730:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"720:6:181"},"nodeType":"YulFunctionCall","src":"720:12:181"},"nodeType":"YulExpressionStatement","src":"720:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"677:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"688:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"703:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"708:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"699:3:181"},"nodeType":"YulFunctionCall","src":"699:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"712:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"695:3:181"},"nodeType":"YulFunctionCall","src":"695:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"684:3:181"},"nodeType":"YulFunctionCall","src":"684:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"674:2:181"},"nodeType":"YulFunctionCall","src":"674:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"667:6:181"},"nodeType":"YulFunctionCall","src":"667:50:181"},"nodeType":"YulIf","src":"664:70:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"595:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"606:5:181","type":""}],"src":"567:173:181"},{"body":{"nodeType":"YulBlock","src":"832:167:181","statements":[{"body":{"nodeType":"YulBlock","src":"878:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"887:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"890:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"880:6:181"},"nodeType":"YulFunctionCall","src":"880:12:181"},"nodeType":"YulExpressionStatement","src":"880:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"853:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"862:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"849:3:181"},"nodeType":"YulFunctionCall","src":"849:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"874:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"845:3:181"},"nodeType":"YulFunctionCall","src":"845:32:181"},"nodeType":"YulIf","src":"842:52:181"},{"nodeType":"YulAssignment","src":"903:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"932:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"913:18:181"},"nodeType":"YulFunctionCall","src":"913:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"903:6:181"}]},{"nodeType":"YulAssignment","src":"951:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"978:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"989:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"974:3:181"},"nodeType":"YulFunctionCall","src":"974:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"961:12:181"},"nodeType":"YulFunctionCall","src":"961:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"951:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"790:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"801:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"813:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"821:6:181","type":""}],"src":"745:254:181"},{"body":{"nodeType":"YulBlock","src":"1099:92:181","statements":[{"nodeType":"YulAssignment","src":"1109:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1121:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1132:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1117:3:181"},"nodeType":"YulFunctionCall","src":"1117:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1109:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1151:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1176:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1169:6:181"},"nodeType":"YulFunctionCall","src":"1169:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1162:6:181"},"nodeType":"YulFunctionCall","src":"1162:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1144:6:181"},"nodeType":"YulFunctionCall","src":"1144:41:181"},"nodeType":"YulExpressionStatement","src":"1144:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1068:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1079:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1090:4:181","type":""}],"src":"1004:187:181"},{"body":{"nodeType":"YulBlock","src":"1297:76:181","statements":[{"nodeType":"YulAssignment","src":"1307:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1319:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1330:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1315:3:181"},"nodeType":"YulFunctionCall","src":"1315:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1307:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1349:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"1360:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1342:6:181"},"nodeType":"YulFunctionCall","src":"1342:25:181"},"nodeType":"YulExpressionStatement","src":"1342:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1266:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1277:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1288:4:181","type":""}],"src":"1196:177:181"},{"body":{"nodeType":"YulBlock","src":"1482:224:181","statements":[{"body":{"nodeType":"YulBlock","src":"1528:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1537:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1540:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1530:6:181"},"nodeType":"YulFunctionCall","src":"1530:12:181"},"nodeType":"YulExpressionStatement","src":"1530:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1503:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1512:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1499:3:181"},"nodeType":"YulFunctionCall","src":"1499:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1524:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1495:3:181"},"nodeType":"YulFunctionCall","src":"1495:32:181"},"nodeType":"YulIf","src":"1492:52:181"},{"nodeType":"YulAssignment","src":"1553:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1582:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1563:18:181"},"nodeType":"YulFunctionCall","src":"1563:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1553:6:181"}]},{"nodeType":"YulAssignment","src":"1601:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1634:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1645:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1630:3:181"},"nodeType":"YulFunctionCall","src":"1630:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1611:18:181"},"nodeType":"YulFunctionCall","src":"1611:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1601:6:181"}]},{"nodeType":"YulAssignment","src":"1658:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1685:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1696:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1681:3:181"},"nodeType":"YulFunctionCall","src":"1681:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1668:12:181"},"nodeType":"YulFunctionCall","src":"1668:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1658:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1432:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1443:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1455:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1463:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1471:6:181","type":""}],"src":"1378:328:181"},{"body":{"nodeType":"YulBlock","src":"1808:87:181","statements":[{"nodeType":"YulAssignment","src":"1818:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1830:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1841:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1826:3:181"},"nodeType":"YulFunctionCall","src":"1826:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1818:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1860:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1875:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1883:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1871:3:181"},"nodeType":"YulFunctionCall","src":"1871:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1853:6:181"},"nodeType":"YulFunctionCall","src":"1853:36:181"},"nodeType":"YulExpressionStatement","src":"1853:36:181"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1777:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1788:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1799:4:181","type":""}],"src":"1711:184:181"},{"body":{"nodeType":"YulBlock","src":"1932:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1949:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1956:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1961:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1952:3:181"},"nodeType":"YulFunctionCall","src":"1952:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1942:6:181"},"nodeType":"YulFunctionCall","src":"1942:31:181"},"nodeType":"YulExpressionStatement","src":"1942:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1989:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1992:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1982:6:181"},"nodeType":"YulFunctionCall","src":"1982:15:181"},"nodeType":"YulExpressionStatement","src":"1982:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2013:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2016:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2006:6:181"},"nodeType":"YulFunctionCall","src":"2006:15:181"},"nodeType":"YulExpressionStatement","src":"2006:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1900:127:181"},{"body":{"nodeType":"YulBlock","src":"2085:666:181","statements":[{"body":{"nodeType":"YulBlock","src":"2134:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2143:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2146:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2136:6:181"},"nodeType":"YulFunctionCall","src":"2136:12:181"},"nodeType":"YulExpressionStatement","src":"2136:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2113:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2121:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2109:3:181"},"nodeType":"YulFunctionCall","src":"2109:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"2128:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2105:3:181"},"nodeType":"YulFunctionCall","src":"2105:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2098:6:181"},"nodeType":"YulFunctionCall","src":"2098:35:181"},"nodeType":"YulIf","src":"2095:55:181"},{"nodeType":"YulVariableDeclaration","src":"2159:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2182:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2169:12:181"},"nodeType":"YulFunctionCall","src":"2169:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2163:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2198:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2208:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2202:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2249:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2251:16:181"},"nodeType":"YulFunctionCall","src":"2251:18:181"},"nodeType":"YulExpressionStatement","src":"2251:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2241:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"2245:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2238:2:181"},"nodeType":"YulFunctionCall","src":"2238:10:181"},"nodeType":"YulIf","src":"2235:36:181"},{"nodeType":"YulVariableDeclaration","src":"2280:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2294:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2290:3:181"},"nodeType":"YulFunctionCall","src":"2290:7:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"2284:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2306:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2326:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2320:5:181"},"nodeType":"YulFunctionCall","src":"2320:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2310:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2338:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2360:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2384:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"2388:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2380:3:181"},"nodeType":"YulFunctionCall","src":"2380:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2395:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2376:3:181"},"nodeType":"YulFunctionCall","src":"2376:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"2400:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2372:3:181"},"nodeType":"YulFunctionCall","src":"2372:31:181"},{"name":"_3","nodeType":"YulIdentifier","src":"2405:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2368:3:181"},"nodeType":"YulFunctionCall","src":"2368:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2356:3:181"},"nodeType":"YulFunctionCall","src":"2356:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2342:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2468:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2470:16:181"},"nodeType":"YulFunctionCall","src":"2470:18:181"},"nodeType":"YulExpressionStatement","src":"2470:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2427:10:181"},{"name":"_2","nodeType":"YulIdentifier","src":"2439:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2424:2:181"},"nodeType":"YulFunctionCall","src":"2424:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2447:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2459:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2444:2:181"},"nodeType":"YulFunctionCall","src":"2444:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2421:2:181"},"nodeType":"YulFunctionCall","src":"2421:46:181"},"nodeType":"YulIf","src":"2418:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2506:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2510:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2499:6:181"},"nodeType":"YulFunctionCall","src":"2499:22:181"},"nodeType":"YulExpressionStatement","src":"2499:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2537:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2545:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2530:6:181"},"nodeType":"YulFunctionCall","src":"2530:18:181"},"nodeType":"YulExpressionStatement","src":"2530:18:181"},{"body":{"nodeType":"YulBlock","src":"2596:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2605:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2608:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2598:6:181"},"nodeType":"YulFunctionCall","src":"2598:12:181"},"nodeType":"YulExpressionStatement","src":"2598:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2571:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2579:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2567:3:181"},"nodeType":"YulFunctionCall","src":"2567:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"2584:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2563:3:181"},"nodeType":"YulFunctionCall","src":"2563:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"2591:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2560:2:181"},"nodeType":"YulFunctionCall","src":"2560:35:181"},"nodeType":"YulIf","src":"2557:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2638:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2646:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2634:3:181"},"nodeType":"YulFunctionCall","src":"2634:17:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2657:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2665:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2653:3:181"},"nodeType":"YulFunctionCall","src":"2653:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2672:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"2621:12:181"},"nodeType":"YulFunctionCall","src":"2621:54:181"},"nodeType":"YulExpressionStatement","src":"2621:54:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2699:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2707:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2695:3:181"},"nodeType":"YulFunctionCall","src":"2695:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"2712:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2691:3:181"},"nodeType":"YulFunctionCall","src":"2691:26:181"},{"kind":"number","nodeType":"YulLiteral","src":"2719:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2684:6:181"},"nodeType":"YulFunctionCall","src":"2684:37:181"},"nodeType":"YulExpressionStatement","src":"2684:37:181"},{"nodeType":"YulAssignment","src":"2730:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"2739:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"2730:5:181"}]}]},"name":"abi_decode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2059:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"2067:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"2075:5:181","type":""}],"src":"2032:719:181"},{"body":{"nodeType":"YulBlock","src":"2863:436:181","statements":[{"body":{"nodeType":"YulBlock","src":"2909:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2918:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2921:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2911:6:181"},"nodeType":"YulFunctionCall","src":"2911:12:181"},"nodeType":"YulExpressionStatement","src":"2911:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2884:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2893:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2880:3:181"},"nodeType":"YulFunctionCall","src":"2880:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2905:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2876:3:181"},"nodeType":"YulFunctionCall","src":"2876:32:181"},"nodeType":"YulIf","src":"2873:52:181"},{"nodeType":"YulVariableDeclaration","src":"2934:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2961:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2948:12:181"},"nodeType":"YulFunctionCall","src":"2948:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2938:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2980:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2990:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2984:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3035:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3044:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3047:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3037:6:181"},"nodeType":"YulFunctionCall","src":"3037:12:181"},"nodeType":"YulExpressionStatement","src":"3037:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3023:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3031:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3020:2:181"},"nodeType":"YulFunctionCall","src":"3020:14:181"},"nodeType":"YulIf","src":"3017:34:181"},{"nodeType":"YulAssignment","src":"3060:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3092:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"3103:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3088:3:181"},"nodeType":"YulFunctionCall","src":"3088:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3112:7:181"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"3070:17:181"},"nodeType":"YulFunctionCall","src":"3070:50:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3060:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3129:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3162:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3173:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3158:3:181"},"nodeType":"YulFunctionCall","src":"3158:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3145:12:181"},"nodeType":"YulFunctionCall","src":"3145:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"3133:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3206:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3215:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3218:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3208:6:181"},"nodeType":"YulFunctionCall","src":"3208:12:181"},"nodeType":"YulExpressionStatement","src":"3208:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"3192:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3202:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3189:2:181"},"nodeType":"YulFunctionCall","src":"3189:16:181"},"nodeType":"YulIf","src":"3186:36:181"},{"nodeType":"YulAssignment","src":"3231:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3263:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"3274:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3259:3:181"},"nodeType":"YulFunctionCall","src":"3259:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3285:7:181"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"3241:17:181"},"nodeType":"YulFunctionCall","src":"3241:52:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3231:6:181"}]}]},"name":"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2821:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2832:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2844:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2852:6:181","type":""}],"src":"2756:543:181"},{"body":{"nodeType":"YulBlock","src":"3374:116:181","statements":[{"body":{"nodeType":"YulBlock","src":"3420:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3429:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3432:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3422:6:181"},"nodeType":"YulFunctionCall","src":"3422:12:181"},"nodeType":"YulExpressionStatement","src":"3422:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3395:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3404:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3391:3:181"},"nodeType":"YulFunctionCall","src":"3391:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3416:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3387:3:181"},"nodeType":"YulFunctionCall","src":"3387:32:181"},"nodeType":"YulIf","src":"3384:52:181"},{"nodeType":"YulAssignment","src":"3445:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3474:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3455:18:181"},"nodeType":"YulFunctionCall","src":"3455:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3445:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3340:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3351:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3363:6:181","type":""}],"src":"3304:186:181"},{"body":{"nodeType":"YulBlock","src":"3596:102:181","statements":[{"nodeType":"YulAssignment","src":"3606:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3618:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3629:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3614:3:181"},"nodeType":"YulFunctionCall","src":"3614:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3606:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3648:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3663:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3679:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3684:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3675:3:181"},"nodeType":"YulFunctionCall","src":"3675:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3688:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3671:3:181"},"nodeType":"YulFunctionCall","src":"3671:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3659:3:181"},"nodeType":"YulFunctionCall","src":"3659:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3641:6:181"},"nodeType":"YulFunctionCall","src":"3641:51:181"},"nodeType":"YulExpressionStatement","src":"3641:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3565:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3576:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3587:4:181","type":""}],"src":"3495:203:181"},{"body":{"nodeType":"YulBlock","src":"3790:173:181","statements":[{"body":{"nodeType":"YulBlock","src":"3836:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3845:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3848:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3838:6:181"},"nodeType":"YulFunctionCall","src":"3838:12:181"},"nodeType":"YulExpressionStatement","src":"3838:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3811:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3820:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3807:3:181"},"nodeType":"YulFunctionCall","src":"3807:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3832:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3803:3:181"},"nodeType":"YulFunctionCall","src":"3803:32:181"},"nodeType":"YulIf","src":"3800:52:181"},{"nodeType":"YulAssignment","src":"3861:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3890:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3871:18:181"},"nodeType":"YulFunctionCall","src":"3871:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3861:6:181"}]},{"nodeType":"YulAssignment","src":"3909:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3942:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3953:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3938:3:181"},"nodeType":"YulFunctionCall","src":"3938:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3919:18:181"},"nodeType":"YulFunctionCall","src":"3919:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3909:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3748:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3759:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3771:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3779:6:181","type":""}],"src":"3703:260:181"},{"body":{"nodeType":"YulBlock","src":"4023:325:181","statements":[{"nodeType":"YulAssignment","src":"4033:22:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4047:1:181","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"4050:4:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"4043:3:181"},"nodeType":"YulFunctionCall","src":"4043:12:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"4033:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"4064:38:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"4094:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"4100:1:181","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4090:3:181"},"nodeType":"YulFunctionCall","src":"4090:12:181"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"4068:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4141:31:181","statements":[{"nodeType":"YulAssignment","src":"4143:27:181","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4157:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4165:4:181","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4153:3:181"},"nodeType":"YulFunctionCall","src":"4153:17:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"4143:6:181"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"4121:18:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4114:6:181"},"nodeType":"YulFunctionCall","src":"4114:26:181"},"nodeType":"YulIf","src":"4111:61:181"},{"body":{"nodeType":"YulBlock","src":"4231:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4252:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4259:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"4264:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4255:3:181"},"nodeType":"YulFunctionCall","src":"4255:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4245:6:181"},"nodeType":"YulFunctionCall","src":"4245:31:181"},"nodeType":"YulExpressionStatement","src":"4245:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4296:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4299:4:181","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4289:6:181"},"nodeType":"YulFunctionCall","src":"4289:15:181"},"nodeType":"YulExpressionStatement","src":"4289:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4324:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4327:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4317:6:181"},"nodeType":"YulFunctionCall","src":"4317:15:181"},"nodeType":"YulExpressionStatement","src":"4317:15:181"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"4187:18:181"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4210:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4218:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4207:2:181"},"nodeType":"YulFunctionCall","src":"4207:14:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4184:2:181"},"nodeType":"YulFunctionCall","src":"4184:38:181"},"nodeType":"YulIf","src":"4181:161:181"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"4003:4:181","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"4012:6:181","type":""}],"src":"3968:380:181"},{"body":{"nodeType":"YulBlock","src":"4401:174:181","statements":[{"nodeType":"YulAssignment","src":"4411:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4422:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"4425:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4418:3:181"},"nodeType":"YulFunctionCall","src":"4418:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"4411:3:181"}]},{"body":{"nodeType":"YulBlock","src":"4458:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4479:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4486:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"4491:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4482:3:181"},"nodeType":"YulFunctionCall","src":"4482:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4472:6:181"},"nodeType":"YulFunctionCall","src":"4472:31:181"},"nodeType":"YulExpressionStatement","src":"4472:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4523:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4526:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4516:6:181"},"nodeType":"YulFunctionCall","src":"4516:15:181"},"nodeType":"YulExpressionStatement","src":"4516:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4551:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4554:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4544:6:181"},"nodeType":"YulFunctionCall","src":"4544:15:181"},"nodeType":"YulExpressionStatement","src":"4544:15:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4442:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"4445:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4439:2:181"},"nodeType":"YulFunctionCall","src":"4439:10:181"},"nodeType":"YulIf","src":"4436:133:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4384:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"4387:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"4393:3:181","type":""}],"src":"4353:222:181"},{"body":{"nodeType":"YulBlock","src":"4754:172:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4771:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4782:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4764:6:181"},"nodeType":"YulFunctionCall","src":"4764:21:181"},"nodeType":"YulExpressionStatement","src":"4764:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4805:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4816:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4801:3:181"},"nodeType":"YulFunctionCall","src":"4801:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4821:2:181","type":"","value":"22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4794:6:181"},"nodeType":"YulFunctionCall","src":"4794:30:181"},"nodeType":"YulExpressionStatement","src":"4794:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4844:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4855:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4840:3:181"},"nodeType":"YulFunctionCall","src":"4840:18:181"},{"hexValue":"4c50546f6b656e3a2063616e6e6f74206d696e742030","kind":"string","nodeType":"YulLiteral","src":"4860:24:181","type":"","value":"LPToken: cannot mint 0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4833:6:181"},"nodeType":"YulFunctionCall","src":"4833:52:181"},"nodeType":"YulExpressionStatement","src":"4833:52:181"},{"nodeType":"YulAssignment","src":"4894:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4906:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4917:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4902:3:181"},"nodeType":"YulFunctionCall","src":"4902:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4894:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ed34f82a9e5f1c19797c90dabe69af55fd60996fe9929040c5fdcf768caac1bc__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4731:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4745:4:181","type":""}],"src":"4580:346:181"},{"body":{"nodeType":"YulBlock","src":"5105:236:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5122:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5133:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5115:6:181"},"nodeType":"YulFunctionCall","src":"5115:21:181"},"nodeType":"YulExpressionStatement","src":"5115:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5156:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5167:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5152:3:181"},"nodeType":"YulFunctionCall","src":"5152:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5172:2:181","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5145:6:181"},"nodeType":"YulFunctionCall","src":"5145:30:181"},"nodeType":"YulExpressionStatement","src":"5145:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5195:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5206:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5191:3:181"},"nodeType":"YulFunctionCall","src":"5191:18:181"},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320616c726561","kind":"string","nodeType":"YulLiteral","src":"5211:34:181","type":"","value":"Initializable: contract is alrea"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5184:6:181"},"nodeType":"YulFunctionCall","src":"5184:62:181"},"nodeType":"YulExpressionStatement","src":"5184:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5266:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5277:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5262:3:181"},"nodeType":"YulFunctionCall","src":"5262:18:181"},{"hexValue":"647920696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"5282:16:181","type":"","value":"dy initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5255:6:181"},"nodeType":"YulFunctionCall","src":"5255:44:181"},"nodeType":"YulExpressionStatement","src":"5255:44:181"},{"nodeType":"YulAssignment","src":"5308:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5320:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5331:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5316:3:181"},"nodeType":"YulFunctionCall","src":"5316:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5308:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5082:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5096:4:181","type":""}],"src":"4931:410:181"},{"body":{"nodeType":"YulBlock","src":"5453:87:181","statements":[{"nodeType":"YulAssignment","src":"5463:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5475:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5486:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5471:3:181"},"nodeType":"YulFunctionCall","src":"5471:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5463:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5505:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5520:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5528:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5516:3:181"},"nodeType":"YulFunctionCall","src":"5516:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5498:6:181"},"nodeType":"YulFunctionCall","src":"5498:36:181"},"nodeType":"YulExpressionStatement","src":"5498:36:181"}]},"name":"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5422:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5433:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5444:4:181","type":""}],"src":"5346:194:181"},{"body":{"nodeType":"YulBlock","src":"5719:172:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5736:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5747:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5729:6:181"},"nodeType":"YulFunctionCall","src":"5729:21:181"},"nodeType":"YulExpressionStatement","src":"5729:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5770:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5781:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5766:3:181"},"nodeType":"YulFunctionCall","src":"5766:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5786:2:181","type":"","value":"22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5759:6:181"},"nodeType":"YulFunctionCall","src":"5759:30:181"},"nodeType":"YulExpressionStatement","src":"5759:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5809:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5820:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5805:3:181"},"nodeType":"YulFunctionCall","src":"5805:18:181"},{"hexValue":"4c50546f6b656e3a2063616e6e6f74206275726e2030","kind":"string","nodeType":"YulLiteral","src":"5825:24:181","type":"","value":"LPToken: cannot burn 0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5798:6:181"},"nodeType":"YulFunctionCall","src":"5798:52:181"},"nodeType":"YulExpressionStatement","src":"5798:52:181"},{"nodeType":"YulAssignment","src":"5859:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5871:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5882:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5867:3:181"},"nodeType":"YulFunctionCall","src":"5867:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5859:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_746dbb314e07631883e9c2af6082a34934cdebb65c5ce78cbe0a4a2355827918__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5696:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5710:4:181","type":""}],"src":"5545:346:181"},{"body":{"nodeType":"YulBlock","src":"6070:227:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6087:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6098:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6080:6:181"},"nodeType":"YulFunctionCall","src":"6080:21:181"},"nodeType":"YulExpressionStatement","src":"6080:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6121:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6132:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6117:3:181"},"nodeType":"YulFunctionCall","src":"6117:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6137:2:181","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6110:6:181"},"nodeType":"YulFunctionCall","src":"6110:30:181"},"nodeType":"YulExpressionStatement","src":"6110:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6160:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6171:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6156:3:181"},"nodeType":"YulFunctionCall","src":"6156:18:181"},{"hexValue":"45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77","kind":"string","nodeType":"YulLiteral","src":"6176:34:181","type":"","value":"ERC20: decreased allowance below"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6149:6:181"},"nodeType":"YulFunctionCall","src":"6149:62:181"},"nodeType":"YulExpressionStatement","src":"6149:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6231:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6242:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6227:3:181"},"nodeType":"YulFunctionCall","src":"6227:18:181"},{"hexValue":"207a65726f","kind":"string","nodeType":"YulLiteral","src":"6247:7:181","type":"","value":" zero"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6220:6:181"},"nodeType":"YulFunctionCall","src":"6220:35:181"},"nodeType":"YulExpressionStatement","src":"6220:35:181"},{"nodeType":"YulAssignment","src":"6264:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6276:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6287:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6272:3:181"},"nodeType":"YulFunctionCall","src":"6272:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6264:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6047:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6061:4:181","type":""}],"src":"5896:401:181"},{"body":{"nodeType":"YulBlock","src":"6476:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6493:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6504:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6486:6:181"},"nodeType":"YulFunctionCall","src":"6486:21:181"},"nodeType":"YulExpressionStatement","src":"6486:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6527:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6538:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6523:3:181"},"nodeType":"YulFunctionCall","src":"6523:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6543:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6516:6:181"},"nodeType":"YulFunctionCall","src":"6516:30:181"},"nodeType":"YulExpressionStatement","src":"6516:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6566:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6577:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6562:3:181"},"nodeType":"YulFunctionCall","src":"6562:18:181"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"6582:34:181","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6555:6:181"},"nodeType":"YulFunctionCall","src":"6555:62:181"},"nodeType":"YulExpressionStatement","src":"6555:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6637:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6648:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6633:3:181"},"nodeType":"YulFunctionCall","src":"6633:18:181"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"6653:8:181","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6626:6:181"},"nodeType":"YulFunctionCall","src":"6626:36:181"},"nodeType":"YulExpressionStatement","src":"6626:36:181"},{"nodeType":"YulAssignment","src":"6671:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6683:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6694:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6679:3:181"},"nodeType":"YulFunctionCall","src":"6679:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6671:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6453:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6467:4:181","type":""}],"src":"6302:402:181"},{"body":{"nodeType":"YulBlock","src":"6883:226:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6900:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6911:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6893:6:181"},"nodeType":"YulFunctionCall","src":"6893:21:181"},"nodeType":"YulExpressionStatement","src":"6893:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6934:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6945:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6930:3:181"},"nodeType":"YulFunctionCall","src":"6930:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6950:2:181","type":"","value":"36"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6923:6:181"},"nodeType":"YulFunctionCall","src":"6923:30:181"},"nodeType":"YulExpressionStatement","src":"6923:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6973:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6984:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6969:3:181"},"nodeType":"YulFunctionCall","src":"6969:18:181"},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f20616464","kind":"string","nodeType":"YulLiteral","src":"6989:34:181","type":"","value":"ERC20: approve from the zero add"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6962:6:181"},"nodeType":"YulFunctionCall","src":"6962:62:181"},"nodeType":"YulExpressionStatement","src":"6962:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7044:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7055:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7040:3:181"},"nodeType":"YulFunctionCall","src":"7040:18:181"},{"hexValue":"72657373","kind":"string","nodeType":"YulLiteral","src":"7060:6:181","type":"","value":"ress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7033:6:181"},"nodeType":"YulFunctionCall","src":"7033:34:181"},"nodeType":"YulExpressionStatement","src":"7033:34:181"},{"nodeType":"YulAssignment","src":"7076:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7088:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7099:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7084:3:181"},"nodeType":"YulFunctionCall","src":"7084:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7076:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6860:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6874:4:181","type":""}],"src":"6709:400:181"},{"body":{"nodeType":"YulBlock","src":"7288:224:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7305:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7316:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7298:6:181"},"nodeType":"YulFunctionCall","src":"7298:21:181"},"nodeType":"YulExpressionStatement","src":"7298:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7339:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7350:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7335:3:181"},"nodeType":"YulFunctionCall","src":"7335:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7355:2:181","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7328:6:181"},"nodeType":"YulFunctionCall","src":"7328:30:181"},"nodeType":"YulExpressionStatement","src":"7328:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7378:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7389:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7374:3:181"},"nodeType":"YulFunctionCall","src":"7374:18:181"},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f206164647265","kind":"string","nodeType":"YulLiteral","src":"7394:34:181","type":"","value":"ERC20: approve to the zero addre"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7367:6:181"},"nodeType":"YulFunctionCall","src":"7367:62:181"},"nodeType":"YulExpressionStatement","src":"7367:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7449:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7460:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7445:3:181"},"nodeType":"YulFunctionCall","src":"7445:18:181"},{"hexValue":"7373","kind":"string","nodeType":"YulLiteral","src":"7465:4:181","type":"","value":"ss"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7438:6:181"},"nodeType":"YulFunctionCall","src":"7438:32:181"},"nodeType":"YulExpressionStatement","src":"7438:32:181"},{"nodeType":"YulAssignment","src":"7479:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7491:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7502:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7487:3:181"},"nodeType":"YulFunctionCall","src":"7487:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7479:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7265:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7279:4:181","type":""}],"src":"7114:398:181"},{"body":{"nodeType":"YulBlock","src":"7691:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7708:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7719:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7701:6:181"},"nodeType":"YulFunctionCall","src":"7701:21:181"},"nodeType":"YulExpressionStatement","src":"7701:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7742:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7753:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7738:3:181"},"nodeType":"YulFunctionCall","src":"7738:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7758:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7731:6:181"},"nodeType":"YulFunctionCall","src":"7731:30:181"},"nodeType":"YulExpressionStatement","src":"7731:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7781:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7792:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7777:3:181"},"nodeType":"YulFunctionCall","src":"7777:18:181"},{"hexValue":"45524332303a20696e73756666696369656e7420616c6c6f77616e6365","kind":"string","nodeType":"YulLiteral","src":"7797:31:181","type":"","value":"ERC20: insufficient allowance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7770:6:181"},"nodeType":"YulFunctionCall","src":"7770:59:181"},"nodeType":"YulExpressionStatement","src":"7770:59:181"},{"nodeType":"YulAssignment","src":"7838:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7850:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7861:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7846:3:181"},"nodeType":"YulFunctionCall","src":"7846:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7838:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7668:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7682:4:181","type":""}],"src":"7517:353:181"},{"body":{"nodeType":"YulBlock","src":"8049:227:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8066:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8077:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8059:6:181"},"nodeType":"YulFunctionCall","src":"8059:21:181"},"nodeType":"YulExpressionStatement","src":"8059:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8100:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8111:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8096:3:181"},"nodeType":"YulFunctionCall","src":"8096:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8116:2:181","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8089:6:181"},"nodeType":"YulFunctionCall","src":"8089:30:181"},"nodeType":"YulExpressionStatement","src":"8089:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8139:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8150:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8135:3:181"},"nodeType":"YulFunctionCall","src":"8135:18:181"},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f206164","kind":"string","nodeType":"YulLiteral","src":"8155:34:181","type":"","value":"ERC20: transfer from the zero ad"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8128:6:181"},"nodeType":"YulFunctionCall","src":"8128:62:181"},"nodeType":"YulExpressionStatement","src":"8128:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8210:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8221:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8206:3:181"},"nodeType":"YulFunctionCall","src":"8206:18:181"},{"hexValue":"6472657373","kind":"string","nodeType":"YulLiteral","src":"8226:7:181","type":"","value":"dress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8199:6:181"},"nodeType":"YulFunctionCall","src":"8199:35:181"},"nodeType":"YulExpressionStatement","src":"8199:35:181"},{"nodeType":"YulAssignment","src":"8243:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8255:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8266:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8251:3:181"},"nodeType":"YulFunctionCall","src":"8251:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8243:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8026:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8040:4:181","type":""}],"src":"7875:401:181"},{"body":{"nodeType":"YulBlock","src":"8455:225:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8472:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8483:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8465:6:181"},"nodeType":"YulFunctionCall","src":"8465:21:181"},"nodeType":"YulExpressionStatement","src":"8465:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8506:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8517:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8502:3:181"},"nodeType":"YulFunctionCall","src":"8502:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8522:2:181","type":"","value":"35"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8495:6:181"},"nodeType":"YulFunctionCall","src":"8495:30:181"},"nodeType":"YulExpressionStatement","src":"8495:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8545:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8556:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8541:3:181"},"nodeType":"YulFunctionCall","src":"8541:18:181"},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472","kind":"string","nodeType":"YulLiteral","src":"8561:34:181","type":"","value":"ERC20: transfer to the zero addr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8534:6:181"},"nodeType":"YulFunctionCall","src":"8534:62:181"},"nodeType":"YulExpressionStatement","src":"8534:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8616:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8627:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8612:3:181"},"nodeType":"YulFunctionCall","src":"8612:18:181"},{"hexValue":"657373","kind":"string","nodeType":"YulLiteral","src":"8632:5:181","type":"","value":"ess"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8605:6:181"},"nodeType":"YulFunctionCall","src":"8605:33:181"},"nodeType":"YulExpressionStatement","src":"8605:33:181"},{"nodeType":"YulAssignment","src":"8647:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8659:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8670:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8655:3:181"},"nodeType":"YulFunctionCall","src":"8655:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8647:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8432:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8446:4:181","type":""}],"src":"8281:399:181"},{"body":{"nodeType":"YulBlock","src":"8859:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8876:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8887:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8869:6:181"},"nodeType":"YulFunctionCall","src":"8869:21:181"},"nodeType":"YulExpressionStatement","src":"8869:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8910:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8921:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8906:3:181"},"nodeType":"YulFunctionCall","src":"8906:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8926:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8899:6:181"},"nodeType":"YulFunctionCall","src":"8899:30:181"},"nodeType":"YulExpressionStatement","src":"8899:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8949:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8960:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8945:3:181"},"nodeType":"YulFunctionCall","src":"8945:18:181"},{"hexValue":"45524332303a207472616e7366657220616d6f756e7420657863656564732062","kind":"string","nodeType":"YulLiteral","src":"8965:34:181","type":"","value":"ERC20: transfer amount exceeds b"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8938:6:181"},"nodeType":"YulFunctionCall","src":"8938:62:181"},"nodeType":"YulExpressionStatement","src":"8938:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9020:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9031:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9016:3:181"},"nodeType":"YulFunctionCall","src":"9016:18:181"},{"hexValue":"616c616e6365","kind":"string","nodeType":"YulLiteral","src":"9036:8:181","type":"","value":"alance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9009:6:181"},"nodeType":"YulFunctionCall","src":"9009:36:181"},"nodeType":"YulExpressionStatement","src":"9009:36:181"},{"nodeType":"YulAssignment","src":"9054:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9066:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9077:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9062:3:181"},"nodeType":"YulFunctionCall","src":"9062:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9054:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8836:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8850:4:181","type":""}],"src":"8685:402:181"},{"body":{"nodeType":"YulBlock","src":"9266:182:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9283:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9294:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9276:6:181"},"nodeType":"YulFunctionCall","src":"9276:21:181"},"nodeType":"YulExpressionStatement","src":"9276:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9317:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9328:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9313:3:181"},"nodeType":"YulFunctionCall","src":"9313:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9333:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9306:6:181"},"nodeType":"YulFunctionCall","src":"9306:30:181"},"nodeType":"YulExpressionStatement","src":"9306:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9356:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9367:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9352:3:181"},"nodeType":"YulFunctionCall","src":"9352:18:181"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"9372:34:181","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9345:6:181"},"nodeType":"YulFunctionCall","src":"9345:62:181"},"nodeType":"YulExpressionStatement","src":"9345:62:181"},{"nodeType":"YulAssignment","src":"9416:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9428:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9439:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9424:3:181"},"nodeType":"YulFunctionCall","src":"9424:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9416:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9243:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9257:4:181","type":""}],"src":"9092:356:181"},{"body":{"nodeType":"YulBlock","src":"9627:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9644:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9655:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9637:6:181"},"nodeType":"YulFunctionCall","src":"9637:21:181"},"nodeType":"YulExpressionStatement","src":"9637:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9678:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9689:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9674:3:181"},"nodeType":"YulFunctionCall","src":"9674:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9694:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9667:6:181"},"nodeType":"YulFunctionCall","src":"9667:30:181"},"nodeType":"YulExpressionStatement","src":"9667:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9717:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9728:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9713:3:181"},"nodeType":"YulFunctionCall","src":"9713:18:181"},{"hexValue":"45524332303a206d696e7420746f20746865207a65726f2061646472657373","kind":"string","nodeType":"YulLiteral","src":"9733:33:181","type":"","value":"ERC20: mint to the zero address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9706:6:181"},"nodeType":"YulFunctionCall","src":"9706:61:181"},"nodeType":"YulExpressionStatement","src":"9706:61:181"},{"nodeType":"YulAssignment","src":"9776:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9788:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9799:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9784:3:181"},"nodeType":"YulFunctionCall","src":"9784:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9776:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9604:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9618:4:181","type":""}],"src":"9453:355:181"},{"body":{"nodeType":"YulBlock","src":"9987:233:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10004:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10015:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9997:6:181"},"nodeType":"YulFunctionCall","src":"9997:21:181"},"nodeType":"YulExpressionStatement","src":"9997:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10038:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10049:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10034:3:181"},"nodeType":"YulFunctionCall","src":"10034:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10054:2:181","type":"","value":"43"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10027:6:181"},"nodeType":"YulFunctionCall","src":"10027:30:181"},"nodeType":"YulExpressionStatement","src":"10027:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10077:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10088:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10073:3:181"},"nodeType":"YulFunctionCall","src":"10073:18:181"},{"hexValue":"496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069","kind":"string","nodeType":"YulLiteral","src":"10093:34:181","type":"","value":"Initializable: contract is not i"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10066:6:181"},"nodeType":"YulFunctionCall","src":"10066:62:181"},"nodeType":"YulExpressionStatement","src":"10066:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10148:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10159:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10144:3:181"},"nodeType":"YulFunctionCall","src":"10144:18:181"},{"hexValue":"6e697469616c697a696e67","kind":"string","nodeType":"YulLiteral","src":"10164:13:181","type":"","value":"nitializing"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10137:6:181"},"nodeType":"YulFunctionCall","src":"10137:41:181"},"nodeType":"YulExpressionStatement","src":"10137:41:181"},{"nodeType":"YulAssignment","src":"10187:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10199:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10210:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10195:3:181"},"nodeType":"YulFunctionCall","src":"10195:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10187:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9964:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9978:4:181","type":""}],"src":"9813:407:181"},{"body":{"nodeType":"YulBlock","src":"10281:65:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10298:1:181","type":"","value":"0"},{"name":"ptr","nodeType":"YulIdentifier","src":"10301:3:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10291:6:181"},"nodeType":"YulFunctionCall","src":"10291:14:181"},"nodeType":"YulExpressionStatement","src":"10291:14:181"},{"nodeType":"YulAssignment","src":"10314:26:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10332:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10335:4:181","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"10322:9:181"},"nodeType":"YulFunctionCall","src":"10322:18:181"},"variableNames":[{"name":"data","nodeType":"YulIdentifier","src":"10314:4:181"}]}]},"name":"array_dataslot_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nodeType":"YulTypedName","src":"10264:3:181","type":""}],"returnVariables":[{"name":"data","nodeType":"YulTypedName","src":"10272:4:181","type":""}],"src":"10225:121:181"},{"body":{"nodeType":"YulBlock","src":"10432:464:181","statements":[{"body":{"nodeType":"YulBlock","src":"10465:425:181","statements":[{"nodeType":"YulVariableDeclaration","src":"10479:11:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10489:1:181","type":"","value":"0"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10483:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"10510:2:181"},{"name":"array","nodeType":"YulIdentifier","src":"10514:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10503:6:181"},"nodeType":"YulFunctionCall","src":"10503:17:181"},"nodeType":"YulExpressionStatement","src":"10503:17:181"},{"nodeType":"YulVariableDeclaration","src":"10533:31:181","value":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"10555:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"10559:4:181","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"10545:9:181"},"nodeType":"YulFunctionCall","src":"10545:19:181"},"variables":[{"name":"data","nodeType":"YulTypedName","src":"10537:4:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10577:57:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"10600:4:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10610:1:181","type":"","value":"5"},{"arguments":[{"name":"startIndex","nodeType":"YulIdentifier","src":"10617:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"10629:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10613:3:181"},"nodeType":"YulFunctionCall","src":"10613:19:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"10606:3:181"},"nodeType":"YulFunctionCall","src":"10606:27:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10596:3:181"},"nodeType":"YulFunctionCall","src":"10596:38:181"},"variables":[{"name":"deleteStart","nodeType":"YulTypedName","src":"10581:11:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10671:23:181","statements":[{"nodeType":"YulAssignment","src":"10673:19:181","value":{"name":"data","nodeType":"YulIdentifier","src":"10688:4:181"},"variableNames":[{"name":"deleteStart","nodeType":"YulIdentifier","src":"10673:11:181"}]}]},"condition":{"arguments":[{"name":"startIndex","nodeType":"YulIdentifier","src":"10653:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"10665:4:181","type":"","value":"0x20"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10650:2:181"},"nodeType":"YulFunctionCall","src":"10650:20:181"},"nodeType":"YulIf","src":"10647:47:181"},{"nodeType":"YulVariableDeclaration","src":"10707:41:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"10721:4:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10731:1:181","type":"","value":"5"},{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"10738:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"10743:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10734:3:181"},"nodeType":"YulFunctionCall","src":"10734:12:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"10727:3:181"},"nodeType":"YulFunctionCall","src":"10727:20:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10717:3:181"},"nodeType":"YulFunctionCall","src":"10717:31:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"10711:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10761:24:181","value":{"name":"deleteStart","nodeType":"YulIdentifier","src":"10774:11:181"},"variables":[{"name":"start","nodeType":"YulTypedName","src":"10765:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10859:21:181","statements":[{"expression":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"10868:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10875:2:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"10861:6:181"},"nodeType":"YulFunctionCall","src":"10861:17:181"},"nodeType":"YulExpressionStatement","src":"10861:17:181"}]},"condition":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"10809:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"10816:2:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10806:2:181"},"nodeType":"YulFunctionCall","src":"10806:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"10820:26:181","statements":[{"nodeType":"YulAssignment","src":"10822:22:181","value":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"10835:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"10842:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10831:3:181"},"nodeType":"YulFunctionCall","src":"10831:13:181"},"variableNames":[{"name":"start","nodeType":"YulIdentifier","src":"10822:5:181"}]}]},"pre":{"nodeType":"YulBlock","src":"10802:3:181","statements":[]},"src":"10798:82:181"}]},"condition":{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"10448:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"10453:2:181","type":"","value":"31"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10445:2:181"},"nodeType":"YulFunctionCall","src":"10445:11:181"},"nodeType":"YulIf","src":"10442:448:181"}]},"name":"clean_up_bytearray_end_slots_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nodeType":"YulTypedName","src":"10404:5:181","type":""},{"name":"len","nodeType":"YulTypedName","src":"10411:3:181","type":""},{"name":"startIndex","nodeType":"YulTypedName","src":"10416:10:181","type":""}],"src":"10351:545:181"},{"body":{"nodeType":"YulBlock","src":"10986:81:181","statements":[{"nodeType":"YulAssignment","src":"10996:65:181","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"11011:4:181"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11029:1:181","type":"","value":"3"},{"name":"len","nodeType":"YulIdentifier","src":"11032:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11025:3:181"},"nodeType":"YulFunctionCall","src":"11025:11:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11042:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11038:3:181"},"nodeType":"YulFunctionCall","src":"11038:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"11021:3:181"},"nodeType":"YulFunctionCall","src":"11021:24:181"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11017:3:181"},"nodeType":"YulFunctionCall","src":"11017:29:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11007:3:181"},"nodeType":"YulFunctionCall","src":"11007:40:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11053:1:181","type":"","value":"1"},{"name":"len","nodeType":"YulIdentifier","src":"11056:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11049:3:181"},"nodeType":"YulFunctionCall","src":"11049:11:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"11004:2:181"},"nodeType":"YulFunctionCall","src":"11004:57:181"},"variableNames":[{"name":"used","nodeType":"YulIdentifier","src":"10996:4:181"}]}]},"name":"extract_used_part_and_set_length_of_short_byte_array","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"10963:4:181","type":""},{"name":"len","nodeType":"YulTypedName","src":"10969:3:181","type":""}],"returnVariables":[{"name":"used","nodeType":"YulTypedName","src":"10977:4:181","type":""}],"src":"10901:166:181"},{"body":{"nodeType":"YulBlock","src":"11168:1256:181","statements":[{"nodeType":"YulVariableDeclaration","src":"11178:24:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"11198:3:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11192:5:181"},"nodeType":"YulFunctionCall","src":"11192:10:181"},"variables":[{"name":"newLen","nodeType":"YulTypedName","src":"11182:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"11245:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"11247:16:181"},"nodeType":"YulFunctionCall","src":"11247:18:181"},"nodeType":"YulExpressionStatement","src":"11247:18:181"}]},"condition":{"arguments":[{"name":"newLen","nodeType":"YulIdentifier","src":"11217:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11225:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11214:2:181"},"nodeType":"YulFunctionCall","src":"11214:30:181"},"nodeType":"YulIf","src":"11211:56:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"11320:4:181"},{"arguments":[{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"11358:4:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"11352:5:181"},"nodeType":"YulFunctionCall","src":"11352:11:181"}],"functionName":{"name":"extract_byte_array_length","nodeType":"YulIdentifier","src":"11326:25:181"},"nodeType":"YulFunctionCall","src":"11326:38:181"},{"name":"newLen","nodeType":"YulIdentifier","src":"11366:6:181"}],"functionName":{"name":"clean_up_bytearray_end_slots_string_storage","nodeType":"YulIdentifier","src":"11276:43:181"},"nodeType":"YulFunctionCall","src":"11276:97:181"},"nodeType":"YulExpressionStatement","src":"11276:97:181"},{"nodeType":"YulVariableDeclaration","src":"11382:18:181","value":{"kind":"number","nodeType":"YulLiteral","src":"11399:1:181","type":"","value":"0"},"variables":[{"name":"srcOffset","nodeType":"YulTypedName","src":"11386:9:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11409:23:181","value":{"kind":"number","nodeType":"YulLiteral","src":"11428:4:181","type":"","value":"0x20"},"variables":[{"name":"srcOffset_1","nodeType":"YulTypedName","src":"11413:11:181","type":""}]},{"nodeType":"YulAssignment","src":"11441:24:181","value":{"name":"srcOffset_1","nodeType":"YulIdentifier","src":"11454:11:181"},"variableNames":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"11441:9:181"}]},{"cases":[{"body":{"nodeType":"YulBlock","src":"11511:656:181","statements":[{"nodeType":"YulVariableDeclaration","src":"11525:35:181","value":{"arguments":[{"name":"newLen","nodeType":"YulIdentifier","src":"11544:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11556:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11552:3:181"},"nodeType":"YulFunctionCall","src":"11552:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11540:3:181"},"nodeType":"YulFunctionCall","src":"11540:20:181"},"variables":[{"name":"loopEnd","nodeType":"YulTypedName","src":"11529:7:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11573:49:181","value":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"11617:4:181"}],"functionName":{"name":"array_dataslot_string_storage","nodeType":"YulIdentifier","src":"11587:29:181"},"nodeType":"YulFunctionCall","src":"11587:35:181"},"variables":[{"name":"dstPtr","nodeType":"YulTypedName","src":"11577:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11635:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"11644:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"11639:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"11722:172:181","statements":[{"expression":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"11747:6:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"11765:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"11770:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11761:3:181"},"nodeType":"YulFunctionCall","src":"11761:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11755:5:181"},"nodeType":"YulFunctionCall","src":"11755:26:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"11740:6:181"},"nodeType":"YulFunctionCall","src":"11740:42:181"},"nodeType":"YulExpressionStatement","src":"11740:42:181"},{"nodeType":"YulAssignment","src":"11799:24:181","value":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"11813:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11821:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11809:3:181"},"nodeType":"YulFunctionCall","src":"11809:14:181"},"variableNames":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"11799:6:181"}]},{"nodeType":"YulAssignment","src":"11840:40:181","value":{"arguments":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"11857:9:181"},{"name":"srcOffset_1","nodeType":"YulIdentifier","src":"11868:11:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11853:3:181"},"nodeType":"YulFunctionCall","src":"11853:27:181"},"variableNames":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"11840:9:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11669:1:181"},{"name":"loopEnd","nodeType":"YulIdentifier","src":"11672:7:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"11666:2:181"},"nodeType":"YulFunctionCall","src":"11666:14:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"11681:28:181","statements":[{"nodeType":"YulAssignment","src":"11683:24:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11692:1:181"},{"name":"srcOffset_1","nodeType":"YulIdentifier","src":"11695:11:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11688:3:181"},"nodeType":"YulFunctionCall","src":"11688:19:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"11683:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"11662:3:181","statements":[]},"src":"11658:236:181"},{"body":{"nodeType":"YulBlock","src":"11942:166:181","statements":[{"nodeType":"YulVariableDeclaration","src":"11960:43:181","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"11987:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"11992:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11983:3:181"},"nodeType":"YulFunctionCall","src":"11983:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11977:5:181"},"nodeType":"YulFunctionCall","src":"11977:26:181"},"variables":[{"name":"lastValue","nodeType":"YulTypedName","src":"11964:9:181","type":""}]},{"expression":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"12027:6:181"},{"arguments":[{"name":"lastValue","nodeType":"YulIdentifier","src":"12039:9:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12066:1:181","type":"","value":"3"},{"name":"newLen","nodeType":"YulIdentifier","src":"12069:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12062:3:181"},"nodeType":"YulFunctionCall","src":"12062:14:181"},{"kind":"number","nodeType":"YulLiteral","src":"12078:3:181","type":"","value":"248"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12058:3:181"},"nodeType":"YulFunctionCall","src":"12058:24:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12088:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"12084:3:181"},"nodeType":"YulFunctionCall","src":"12084:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"12054:3:181"},"nodeType":"YulFunctionCall","src":"12054:37:181"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"12050:3:181"},"nodeType":"YulFunctionCall","src":"12050:42:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12035:3:181"},"nodeType":"YulFunctionCall","src":"12035:58:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"12020:6:181"},"nodeType":"YulFunctionCall","src":"12020:74:181"},"nodeType":"YulExpressionStatement","src":"12020:74:181"}]},"condition":{"arguments":[{"name":"loopEnd","nodeType":"YulIdentifier","src":"11913:7:181"},{"name":"newLen","nodeType":"YulIdentifier","src":"11922:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"11910:2:181"},"nodeType":"YulFunctionCall","src":"11910:19:181"},"nodeType":"YulIf","src":"11907:201:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"12128:4:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12142:1:181","type":"","value":"1"},{"name":"newLen","nodeType":"YulIdentifier","src":"12145:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12138:3:181"},"nodeType":"YulFunctionCall","src":"12138:14:181"},{"kind":"number","nodeType":"YulLiteral","src":"12154:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12134:3:181"},"nodeType":"YulFunctionCall","src":"12134:22:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"12121:6:181"},"nodeType":"YulFunctionCall","src":"12121:36:181"},"nodeType":"YulExpressionStatement","src":"12121:36:181"}]},"nodeType":"YulCase","src":"11504:663:181","value":{"kind":"number","nodeType":"YulLiteral","src":"11509:1:181","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"12184:234:181","statements":[{"nodeType":"YulVariableDeclaration","src":"12198:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12211:1:181","type":"","value":"0"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12202:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"12247:67:181","statements":[{"nodeType":"YulAssignment","src":"12265:35:181","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"12284:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"12289:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12280:3:181"},"nodeType":"YulFunctionCall","src":"12280:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12274:5:181"},"nodeType":"YulFunctionCall","src":"12274:26:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"12265:5:181"}]}]},"condition":{"name":"newLen","nodeType":"YulIdentifier","src":"12228:6:181"},"nodeType":"YulIf","src":"12225:89:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"12334:4:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12393:5:181"},{"name":"newLen","nodeType":"YulIdentifier","src":"12400:6:181"}],"functionName":{"name":"extract_used_part_and_set_length_of_short_byte_array","nodeType":"YulIdentifier","src":"12340:52:181"},"nodeType":"YulFunctionCall","src":"12340:67:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"12327:6:181"},"nodeType":"YulFunctionCall","src":"12327:81:181"},"nodeType":"YulExpressionStatement","src":"12327:81:181"}]},"nodeType":"YulCase","src":"12176:242:181","value":"default"}],"expression":{"arguments":[{"name":"newLen","nodeType":"YulIdentifier","src":"11484:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11492:2:181","type":"","value":"31"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11481:2:181"},"nodeType":"YulFunctionCall","src":"11481:14:181"},"nodeType":"YulSwitch","src":"11474:944:181"}]},"name":"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nodeType":"YulTypedName","src":"11153:4:181","type":""},{"name":"src","nodeType":"YulTypedName","src":"11159:3:181","type":""}],"src":"11072:1352:181"},{"body":{"nodeType":"YulBlock","src":"12603:223:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12620:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12631:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12613:6:181"},"nodeType":"YulFunctionCall","src":"12613:21:181"},"nodeType":"YulExpressionStatement","src":"12613:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12654:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12665:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12650:3:181"},"nodeType":"YulFunctionCall","src":"12650:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12670:2:181","type":"","value":"33"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12643:6:181"},"nodeType":"YulFunctionCall","src":"12643:30:181"},"nodeType":"YulExpressionStatement","src":"12643:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12693:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12704:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12689:3:181"},"nodeType":"YulFunctionCall","src":"12689:18:181"},{"hexValue":"45524332303a206275726e2066726f6d20746865207a65726f20616464726573","kind":"string","nodeType":"YulLiteral","src":"12709:34:181","type":"","value":"ERC20: burn from the zero addres"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12682:6:181"},"nodeType":"YulFunctionCall","src":"12682:62:181"},"nodeType":"YulExpressionStatement","src":"12682:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12764:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12775:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12760:3:181"},"nodeType":"YulFunctionCall","src":"12760:18:181"},{"hexValue":"73","kind":"string","nodeType":"YulLiteral","src":"12780:3:181","type":"","value":"s"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12753:6:181"},"nodeType":"YulFunctionCall","src":"12753:31:181"},"nodeType":"YulExpressionStatement","src":"12753:31:181"},{"nodeType":"YulAssignment","src":"12793:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12805:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12816:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12801:3:181"},"nodeType":"YulFunctionCall","src":"12801:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12793:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12580:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12594:4:181","type":""}],"src":"12429:397:181"},{"body":{"nodeType":"YulBlock","src":"13005:224:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13022:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13033:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13015:6:181"},"nodeType":"YulFunctionCall","src":"13015:21:181"},"nodeType":"YulExpressionStatement","src":"13015:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13056:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13067:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13052:3:181"},"nodeType":"YulFunctionCall","src":"13052:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13072:2:181","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13045:6:181"},"nodeType":"YulFunctionCall","src":"13045:30:181"},"nodeType":"YulExpressionStatement","src":"13045:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13095:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13106:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13091:3:181"},"nodeType":"YulFunctionCall","src":"13091:18:181"},{"hexValue":"45524332303a206275726e20616d6f756e7420657863656564732062616c616e","kind":"string","nodeType":"YulLiteral","src":"13111:34:181","type":"","value":"ERC20: burn amount exceeds balan"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13084:6:181"},"nodeType":"YulFunctionCall","src":"13084:62:181"},"nodeType":"YulExpressionStatement","src":"13084:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13166:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13177:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13162:3:181"},"nodeType":"YulFunctionCall","src":"13162:18:181"},{"hexValue":"6365","kind":"string","nodeType":"YulLiteral","src":"13182:4:181","type":"","value":"ce"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13155:6:181"},"nodeType":"YulFunctionCall","src":"13155:32:181"},"nodeType":"YulExpressionStatement","src":"13155:32:181"},{"nodeType":"YulAssignment","src":"13196:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13208:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13219:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13204:3:181"},"nodeType":"YulFunctionCall","src":"13204:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13196:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12982:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12996:4:181","type":""}],"src":"12831:398:181"},{"body":{"nodeType":"YulBlock","src":"13408:180:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13425:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13436:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13418:6:181"},"nodeType":"YulFunctionCall","src":"13418:21:181"},"nodeType":"YulExpressionStatement","src":"13418:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13459:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13470:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13455:3:181"},"nodeType":"YulFunctionCall","src":"13455:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13475:2:181","type":"","value":"30"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13448:6:181"},"nodeType":"YulFunctionCall","src":"13448:30:181"},"nodeType":"YulExpressionStatement","src":"13448:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13498:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13509:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13494:3:181"},"nodeType":"YulFunctionCall","src":"13494:18:181"},{"hexValue":"4c50546f6b656e3a2063616e6e6f742073656e6420746f20697473656c66","kind":"string","nodeType":"YulLiteral","src":"13514:32:181","type":"","value":"LPToken: cannot send to itself"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13487:6:181"},"nodeType":"YulFunctionCall","src":"13487:60:181"},"nodeType":"YulExpressionStatement","src":"13487:60:181"},{"nodeType":"YulAssignment","src":"13556:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13568:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13579:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13564:3:181"},"nodeType":"YulFunctionCall","src":"13564:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13556:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ef142e1a2846b964b816ff083db6d21006ea5123566a1edd36cdd44bd455377f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13385:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13399:4:181","type":""}],"src":"13234:354:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        mstore(add(add(headStart, length), 64), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_string(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_string(add(headStart, offset_1), dataEnd)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_ed34f82a9e5f1c19797c90dabe69af55fd60996fe9929040c5fdcf768caac1bc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"LPToken: cannot mint 0\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Initializable: contract is alrea\")\n        mstore(add(headStart, 96), \"dy initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_stringliteral_746dbb314e07631883e9c2af6082a34934cdebb65c5ce78cbe0a4a2355827918__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"LPToken: cannot burn 0\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: decreased allowance below\")\n        mstore(add(headStart, 96), \" zero\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"ERC20: approve from the zero add\")\n        mstore(add(headStart, 96), \"ress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: approve to the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"ERC20: insufficient allowance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: transfer from the zero ad\")\n        mstore(add(headStart, 96), \"dress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"ERC20: transfer to the zero addr\")\n        mstore(add(headStart, 96), \"ess\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"ERC20: transfer amount exceeds b\")\n        mstore(add(headStart, 96), \"alance\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ERC20: mint to the zero address\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 43)\n        mstore(add(headStart, 64), \"Initializable: contract is not i\")\n        mstore(add(headStart, 96), \"nitializing\")\n        tail := add(headStart, 128)\n    }\n    function array_dataslot_string_storage(ptr) -> data\n    {\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n    }\n    function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n    {\n        if gt(len, 31)\n        {\n            let _1 := 0\n            mstore(_1, array)\n            let data := keccak256(_1, 0x20)\n            let deleteStart := add(data, shr(5, add(startIndex, 31)))\n            if lt(startIndex, 0x20) { deleteStart := data }\n            let _2 := add(data, shr(5, add(len, 31)))\n            let start := deleteStart\n            for { } lt(start, _2) { start := add(start, 1) }\n            { sstore(start, _1) }\n        }\n    }\n    function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n    {\n        used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n    }\n    function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n    {\n        let newLen := mload(src)\n        if gt(newLen, 0xffffffffffffffff) { panic_error_0x41() }\n        clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n        let srcOffset := 0\n        let srcOffset_1 := 0x20\n        srcOffset := srcOffset_1\n        switch gt(newLen, 31)\n        case 1 {\n            let loopEnd := and(newLen, not(31))\n            let dstPtr := array_dataslot_string_storage(slot)\n            let i := 0\n            for { } lt(i, loopEnd) { i := add(i, srcOffset_1) }\n            {\n                sstore(dstPtr, mload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, srcOffset_1)\n            }\n            if lt(loopEnd, newLen)\n            {\n                let lastValue := mload(add(src, srcOffset))\n                sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n            }\n            sstore(slot, add(shl(1, newLen), 1))\n        }\n        default {\n            let value := 0\n            if newLen\n            {\n                value := mload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"ERC20: burn from the zero addres\")\n        mstore(add(headStart, 96), \"s\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: burn amount exceeds balan\")\n        mstore(add(headStart, 96), \"ce\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_ef142e1a2846b964b816ff083db6d21006ea5123566a1edd36cdd44bd455377f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 30)\n        mstore(add(headStart, 64), \"LPToken: cannot send to itself\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a257806395d89b411161007157806395d89b411461021f578063a457c2d714610227578063a9059cbb1461023a578063dd62ed3e1461024d578063f2fde38b1461026057600080fd5b806370a08231146101c0578063715018a6146101e957806379cc6790146101f15780638da5cb5b1461020457600080fd5b8063313ce567116100de578063313ce56714610176578063395093511461018557806340c10f19146101985780634cd88b76146101ad57600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610163575b600080fd5b610118610273565b6040516101259190610d9d565b60405180910390f35b61014161013c366004610e07565b610305565b6040519015158152602001610125565b6035545b604051908152602001610125565b610141610171366004610e31565b61031f565b60405160128152602001610125565b610141610193366004610e07565b610343565b6101ab6101a6366004610e07565b610365565b005b6101416101bb366004610f10565b6103c9565b6101556101ce366004610f74565b6001600160a01b031660009081526033602052604090205490565b6101ab6104f5565b6101ab6101ff366004610e07565b610509565b6065546040516001600160a01b039091168152602001610125565b610118610564565b610141610235366004610e07565b610573565b610141610248366004610e07565b6105ee565b61015561025b366004610f96565b6105fc565b6101ab61026e366004610f74565b610627565b60606036805461028290610fc9565b80601f01602080910402602001604051908101604052809291908181526020018280546102ae90610fc9565b80156102fb5780601f106102d0576101008083540402835291602001916102fb565b820191906000526020600020905b8154815290600101906020018083116102de57829003601f168201915b5050505050905090565b6000336103138185856106a0565b60019150505b92915050565b60003361032d8582856107c4565b61033885858561083e565b506001949350505050565b60003361031381858561035683836105fc565b6103609190611003565b6106a0565b61036d6109f4565b806000036103bb5760405162461bcd60e51b815260206004820152601660248201527504c50546f6b656e3a2063616e6e6f74206d696e7420360541b60448201526064015b60405180910390fd5b6103c58282610a4e565b5050565b60008054610100900460ff16158080156103ea5750600054600160ff909116105b806104045750303b158015610404575060005460ff166001145b6104675760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103b2565b6000805460ff19166001179055801561048a576000805461ff0019166101001790555b610492610b1b565b61049c8484610b42565b6104a4610b87565b6001915080156104ee576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5092915050565b6104fd6109f4565b6105076000610bb3565b565b6105116109f4565b8060000361055a5760405162461bcd60e51b815260206004820152601660248201527504c50546f6b656e3a2063616e6e6f74206275726e20360541b60448201526064016103b2565b6103c58282610c05565b60606037805461028290610fc9565b6000338161058182866105fc565b9050838110156105e15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103b2565b61033882868684036106a0565b60003361031381858561083e565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b61062f6109f4565b6001600160a01b0381166106945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b2565b61069d81610bb3565b50565b6001600160a01b0383166107025760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103b2565b6001600160a01b0382166107635760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103b2565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006107d084846105fc565b90506000198114610838578181101561082b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103b2565b61083884848484036106a0565b50505050565b6001600160a01b0383166108a25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103b2565b6001600160a01b0382166109045760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103b2565b61090f838383610d45565b6001600160a01b038316600090815260336020526040902054818110156109875760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103b2565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906109e79086815260200190565b60405180910390a3610838565b6065546001600160a01b031633146105075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b2565b6001600160a01b038216610aa45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103b2565b610ab060008383610d45565b8060356000828254610ac29190611003565b90915550506001600160a01b0382166000818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600054610100900460ff166105075760405162461bcd60e51b81526004016103b290611024565b600054610100900460ff16610b695760405162461bcd60e51b81526004016103b290611024565b6036610b7583826110bd565b506037610b8282826110bd565b505050565b600054610100900460ff16610bae5760405162461bcd60e51b81526004016103b290611024565b610507335b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103b2565b610c7182600083610d45565b6001600160a01b03821660009081526033602052604090205481811015610ce55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103b2565b6001600160a01b03831660008181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b306001600160a01b03831603610b825760405162461bcd60e51b815260206004820152601e60248201527f4c50546f6b656e3a2063616e6e6f742073656e6420746f20697473656c66000060448201526064016103b2565b600060208083528351808285015260005b81811015610dca57858101830151858201604001528201610dae565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610e0257600080fd5b919050565b60008060408385031215610e1a57600080fd5b610e2383610deb565b946020939093013593505050565b600080600060608486031215610e4657600080fd5b610e4f84610deb565b9250610e5d60208501610deb565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610e9457600080fd5b813567ffffffffffffffff80821115610eaf57610eaf610e6d565b604051601f8301601f19908116603f01168101908282118183101715610ed757610ed7610e6d565b81604052838152866020858801011115610ef057600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610f2357600080fd5b823567ffffffffffffffff80821115610f3b57600080fd5b610f4786838701610e83565b93506020850135915080821115610f5d57600080fd5b50610f6a85828601610e83565b9150509250929050565b600060208284031215610f8657600080fd5b610f8f82610deb565b9392505050565b60008060408385031215610fa957600080fd5b610fb283610deb565b9150610fc060208401610deb565b90509250929050565b600181811c90821680610fdd57607f821691505b602082108103610ffd57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561031957634e487b7160e01b600052601160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610b8257600081815260208120601f850160051c810160208610156110965750805b601f850160051c820191505b818110156110b5578281556001016110a2565b505050505050565b815167ffffffffffffffff8111156110d7576110d7610e6d565b6110eb816110e58454610fc9565b8461106f565b602080601f83116001811461112057600084156111085750858301515b600019600386901b1c1916600185901b1785556110b5565b600085815260208120601f198616915b8281101561114f57888601518255948401946001909101908401611130565b508582101561116d5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122016715179f47a5579a7f4ffe57608078db5b76af23d867ef61df8000244e74e3b64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x10B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0x95D89B41 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x21F JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x23A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x24D JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x260 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1E9 JUMPI DUP1 PUSH4 0x79CC6790 EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x204 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0x4CD88B76 EQ PUSH2 0x1AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x12E JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x163 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x118 PUSH2 0x273 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x125 SWAP2 SWAP1 PUSH2 0xD9D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x141 PUSH2 0x13C CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x305 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x125 JUMP JUMPDEST PUSH1 0x35 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x125 JUMP JUMPDEST PUSH2 0x141 PUSH2 0x171 CALLDATASIZE PUSH1 0x4 PUSH2 0xE31 JUMP JUMPDEST PUSH2 0x31F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x125 JUMP JUMPDEST PUSH2 0x141 PUSH2 0x193 CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x343 JUMP JUMPDEST PUSH2 0x1AB PUSH2 0x1A6 CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x365 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x141 PUSH2 0x1BB CALLDATASIZE PUSH1 0x4 PUSH2 0xF10 JUMP JUMPDEST PUSH2 0x3C9 JUMP JUMPDEST PUSH2 0x155 PUSH2 0x1CE CALLDATASIZE PUSH1 0x4 PUSH2 0xF74 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1AB PUSH2 0x4F5 JUMP JUMPDEST PUSH2 0x1AB PUSH2 0x1FF CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x509 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x125 JUMP JUMPDEST PUSH2 0x118 PUSH2 0x564 JUMP JUMPDEST PUSH2 0x141 PUSH2 0x235 CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x573 JUMP JUMPDEST PUSH2 0x141 PUSH2 0x248 CALLDATASIZE PUSH1 0x4 PUSH2 0xE07 JUMP JUMPDEST PUSH2 0x5EE JUMP JUMPDEST PUSH2 0x155 PUSH2 0x25B CALLDATASIZE PUSH1 0x4 PUSH2 0xF96 JUMP JUMPDEST PUSH2 0x5FC JUMP JUMPDEST PUSH2 0x1AB PUSH2 0x26E CALLDATASIZE PUSH1 0x4 PUSH2 0xF74 JUMP JUMPDEST PUSH2 0x627 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x36 DUP1 SLOAD PUSH2 0x282 SWAP1 PUSH2 0xFC9 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x2AE SWAP1 PUSH2 0xFC9 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2FB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2D0 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2FB JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2DE JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x313 DUP2 DUP6 DUP6 PUSH2 0x6A0 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x32D DUP6 DUP3 DUP6 PUSH2 0x7C4 JUMP JUMPDEST PUSH2 0x338 DUP6 DUP6 DUP6 PUSH2 0x83E JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x313 DUP2 DUP6 DUP6 PUSH2 0x356 DUP4 DUP4 PUSH2 0x5FC JUMP JUMPDEST PUSH2 0x360 SWAP2 SWAP1 PUSH2 0x1003 JUMP JUMPDEST PUSH2 0x6A0 JUMP JUMPDEST PUSH2 0x36D PUSH2 0x9F4 JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x3BB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x4C50546F6B656E3A2063616E6E6F74206D696E74203 PUSH1 0x54 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3C5 DUP3 DUP3 PUSH2 0xA4E JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x3EA JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x404 JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x404 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x467 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x48A JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x492 PUSH2 0xB1B JUMP JUMPDEST PUSH2 0x49C DUP5 DUP5 PUSH2 0xB42 JUMP JUMPDEST PUSH2 0x4A4 PUSH2 0xB87 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP DUP1 ISZERO PUSH2 0x4EE JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x4FD PUSH2 0x9F4 JUMP JUMPDEST PUSH2 0x507 PUSH1 0x0 PUSH2 0xBB3 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x511 PUSH2 0x9F4 JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x55A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x4C50546F6B656E3A2063616E6E6F74206275726E203 PUSH1 0x54 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0x3C5 DUP3 DUP3 PUSH2 0xC05 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x282 SWAP1 PUSH2 0xFC9 JUMP JUMPDEST PUSH1 0x0 CALLER DUP2 PUSH2 0x581 DUP3 DUP7 PUSH2 0x5FC JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x5E1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0x338 DUP3 DUP7 DUP7 DUP5 SUB PUSH2 0x6A0 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x313 DUP2 DUP6 DUP6 PUSH2 0x83E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x62F PUSH2 0x9F4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x694 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0x69D DUP2 PUSH2 0xBB3 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x702 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x763 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7D0 DUP5 DUP5 PUSH2 0x5FC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x838 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x82B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0x838 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x6A0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x8A2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x904 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0x90F DUP4 DUP4 DUP4 PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x987 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE SWAP3 DUP7 AND DUP1 DUP3 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE SWAP2 MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x9E7 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x838 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x507 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xAA4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0xAB0 PUSH1 0x0 DUP4 DUP4 PUSH2 0xD45 JUMP JUMPDEST DUP1 PUSH1 0x35 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0xAC2 SWAP2 SWAP1 PUSH2 0x1003 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE MLOAD DUP5 DUP2 MSTORE PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x507 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3B2 SWAP1 PUSH2 0x1024 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xB69 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3B2 SWAP1 PUSH2 0x1024 JUMP JUMPDEST PUSH1 0x36 PUSH2 0xB75 DUP4 DUP3 PUSH2 0x10BD JUMP JUMPDEST POP PUSH1 0x37 PUSH2 0xB82 DUP3 DUP3 PUSH2 0x10BD JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xBAE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3B2 SWAP1 PUSH2 0x1024 JUMP JUMPDEST PUSH2 0x507 CALLER JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xC65 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E2066726F6D20746865207A65726F20616464726573 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x73 PUSH1 0xF8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0xC71 DUP3 PUSH1 0x0 DUP4 PUSH2 0xD45 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0xCE5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E20616D6F756E7420657863656564732062616C616E PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x33 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE PUSH1 0x35 DUP1 SLOAD DUP8 SWAP1 SUB SWAP1 SSTORE MLOAD DUP6 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SUB PUSH2 0xB82 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C50546F6B656E3A2063616E6E6F742073656E6420746F20697473656C660000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDCA JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xDAE JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xE02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE23 DUP4 PUSH2 0xDEB JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xE46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE4F DUP5 PUSH2 0xDEB JUMP JUMPDEST SWAP3 POP PUSH2 0xE5D PUSH1 0x20 DUP6 ADD PUSH2 0xDEB JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xE94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xEAF JUMPI PUSH2 0xEAF PUSH2 0xE6D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xED7 JUMPI PUSH2 0xED7 PUSH2 0xE6D JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0xEF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xF23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xF3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF47 DUP7 DUP4 DUP8 ADD PUSH2 0xE83 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xF5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF6A DUP6 DUP3 DUP7 ADD PUSH2 0xE83 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF8F DUP3 PUSH2 0xDEB JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xFA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFB2 DUP4 PUSH2 0xDEB JUMP JUMPDEST SWAP2 POP PUSH2 0xFC0 PUSH1 0x20 DUP5 ADD PUSH2 0xDEB JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xFDD JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0xFFD JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x319 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2B SWAP1 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 PUSH1 0x40 DUP3 ADD MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0xB82 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH2 0x1096 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x10B5 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x10A2 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x10D7 JUMPI PUSH2 0x10D7 PUSH2 0xE6D JUMP JUMPDEST PUSH2 0x10EB DUP2 PUSH2 0x10E5 DUP5 SLOAD PUSH2 0xFC9 JUMP JUMPDEST DUP5 PUSH2 0x106F JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x1120 JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x1108 JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH2 0x10B5 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x114F JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH2 0x1130 JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH2 0x116D JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 AND PUSH18 0x5179F47A5579A7F4FFE57608078DB5B76AF2 RETURNDATASIZE DUP7 PUSH31 0xF61DF8000244E74E3B64736F6C634300081100330000000000000000000000 ","sourceMap":"588:2182:85:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2491:98:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4768:197;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:181;;1162:22;1144:41;;1132:2;1117:18;4768:197:32;1004:187:181;3579:106:32;3666:12;;3579:106;;;1342:25:181;;;1330:2;1315:18;3579:106:32;1196:177:181;5527:286:32;;;;;;:::i;:::-;;:::i;3428:91::-;;;3510:2;1853:36:181;;1841:2;1826:18;3428:91:32;1711:184:181;6208:234:32;;;;;;:::i;:::-;;:::i;1541:155:85:-;;;;;;:::i;:::-;;:::i;:::-;;1027:226;;;;;;:::i;:::-;;:::i;3743:125:32:-;;;;;;:::i;:::-;-1:-1:-1;;;;;3843:18:32;3817:7;3843:18;;;:9;:18;;;;;;;3743:125;2071:101:28;;;:::i;1938:155:85:-;;;;;;:::i;:::-;;:::i;1441:85:28:-;1513:6;;1441:85;;-1:-1:-1;;;;;1513:6:28;;;3641:51:181;;3629:2;3614:18;1441:85:28;3495:203:181;2702:102:32;;;:::i;6929:427::-;;;;;;:::i;:::-;;:::i;4064:189::-;;;;;;:::i;:::-;;:::i;4311:149::-;;;;;;:::i;:::-;;:::i;2321:198:28:-;;;;;;:::i;:::-;;:::i;2491:98:32:-;2545:13;2577:5;2570:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2491:98;:::o;4768:197::-;4851:4;929:10:37;4905:32:32;929:10:37;4921:7:32;4930:6;4905:8;:32::i;:::-;4954:4;4947:11;;;4768:197;;;;;:::o;5527:286::-;5654:4;929:10:37;5710:38:32;5726:4;929:10:37;5741:6:32;5710:15;:38::i;:::-;5758:27;5768:4;5774:2;5778:6;5758:9;:27::i;:::-;-1:-1:-1;5802:4:32;;5527:286;-1:-1:-1;;;;5527:286:32:o;6208:234::-;6296:4;929:10:37;6350:64:32;929:10:37;6366:7:32;6403:10;6375:25;929:10:37;6366:7:32;6375:9;:25::i;:::-;:38;;;;:::i;:::-;6350:8;:64::i;1541:155:85:-;1334:13:28;:11;:13::i;:::-;1623:6:85::1;1633:1;1623:11:::0;1615:46:::1;;;::::0;-1:-1:-1;;;1615:46:85;;4782:2:181;1615:46:85::1;::::0;::::1;4764:21:181::0;4821:2;4801:18;;;4794:30;-1:-1:-1;;;4840:18:181;;;4833:52;4902:18;;1615:46:85::1;;;;;;;;;1667:24;1673:9;1684:6;1667:5;:24::i;:::-;1541:155:::0;;:::o;1027:226::-;1119:4;3291:13:29;;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:29;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:29;1476:19:36;:23;;;3376:66:29;;-1:-1:-1;3425:12:29;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:29;;5133:2:181;3314:201:29;;;5115:21:181;5172:2;5152:18;;;5145:30;5211:34;5191:18;;;5184:62;-1:-1:-1;;;5262:18:181;;;5255:44;5316:19;;3314:201:29;4931:410:181;3314:201:29;3525:12;:16;;-1:-1:-1;;3525:16:29;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:29;;;;;3551:65;1131:26:85::1;:24;:26::i;:::-;1163:36;1186:4;1192:6;1163:22;:36::i;:::-;1205:26;:24;:26::i;:::-;1244:4;1237:11;;3640:14:29::0;3636:99;;;3686:5;3670:21;;-1:-1:-1;;3670:21:29;;;3710:14;;-1:-1:-1;1853:36:181;;3710:14:29;;1841:2:181;1826:18;3710:14:29;;;;;;;3636:99;3258:483;1027:226:85;;;;:::o;2071:101:28:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;1938:155:85:-;1334:13:28;:11;:13::i;:::-;2022:6:85::1;2032:1;2022:11:::0;2014:46:::1;;;::::0;-1:-1:-1;;;2014:46:85;;5747:2:181;2014:46:85::1;::::0;::::1;5729:21:181::0;5786:2;5766:18;;;5759:30;-1:-1:-1;;;5805:18:181;;;5798:52;5867:18;;2014:46:85::1;5545:346:181::0;2014:46:85::1;2066:22;2072:7;2081:6;2066:5;:22::i;2702:102:32:-:0;2758:13;2790:7;2783:14;;;;;:::i;6929:427::-;7022:4;929:10:37;7022:4:32;7103:25;929:10:37;7120:7:32;7103:9;:25::i;:::-;7076:52;;7166:15;7146:16;:35;;7138:85;;;;-1:-1:-1;;;7138:85:32;;6098:2:181;7138:85:32;;;6080:21:181;6137:2;6117:18;;;6110:30;6176:34;6156:18;;;6149:62;-1:-1:-1;;;6227:18:181;;;6220:35;6272:19;;7138:85:32;5896:401:181;7138:85:32;7257:60;7266:5;7273:7;7301:15;7282:16;:34;7257:8;:60::i;4064:189::-;4143:4;929:10:37;4197:28:32;929:10:37;4214:2:32;4218:6;4197:9;:28::i;4311:149::-;-1:-1:-1;;;;;4426:18:32;;;4400:7;4426:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4311:149::o;2321:198:28:-;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:28;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:28;;6504:2:181;2401:73:28::1;::::0;::::1;6486:21:181::0;6543:2;6523:18;;;6516:30;6582:34;6562:18;;;6555:62;-1:-1:-1;;;6633:18:181;;;6626:36;6679:19;;2401:73:28::1;6302:402:181::0;2401:73:28::1;2484:28;2503:8;2484:18;:28::i;:::-;2321:198:::0;:::o;10841:370:32:-;-1:-1:-1;;;;;10972:19:32;;10964:68;;;;-1:-1:-1;;;10964:68:32;;6911:2:181;10964:68:32;;;6893:21:181;6950:2;6930:18;;;6923:30;6989:34;6969:18;;;6962:62;-1:-1:-1;;;7040:18:181;;;7033:34;7084:19;;10964:68:32;6709:400:181;10964:68:32;-1:-1:-1;;;;;11050:21:32;;11042:68;;;;-1:-1:-1;;;11042:68:32;;7316:2:181;11042:68:32;;;7298:21:181;7355:2;7335:18;;;7328:30;7394:34;7374:18;;;7367:62;-1:-1:-1;;;7445:18:181;;;7438:32;7487:19;;11042:68:32;7114:398:181;11042:68:32;-1:-1:-1;;;;;11121:18:32;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11172:32;;1342:25:181;;;11172:32:32;;1315:18:181;11172:32:32;;;;;;;10841:370;;;:::o;11492:441::-;11622:24;11649:25;11659:5;11666:7;11649:9;:25::i;:::-;11622:52;;-1:-1:-1;;11688:16:32;:37;11684:243;;11769:6;11749:16;:26;;11741:68;;;;-1:-1:-1;;;11741:68:32;;7719:2:181;11741:68:32;;;7701:21:181;7758:2;7738:18;;;7731:30;7797:31;7777:18;;;7770:59;7846:18;;11741:68:32;7517:353:181;11741:68:32;11851:51;11860:5;11867:7;11895:6;11876:16;:25;11851:8;:51::i;:::-;11612:321;11492:441;;;:::o;7810:818::-;-1:-1:-1;;;;;7936:18:32;;7928:68;;;;-1:-1:-1;;;7928:68:32;;8077:2:181;7928:68:32;;;8059:21:181;8116:2;8096:18;;;8089:30;8155:34;8135:18;;;8128:62;-1:-1:-1;;;8206:18:181;;;8199:35;8251:19;;7928:68:32;7875:401:181;7928:68:32;-1:-1:-1;;;;;8014:16:32;;8006:64;;;;-1:-1:-1;;;8006:64:32;;8483:2:181;8006:64:32;;;8465:21:181;8522:2;8502:18;;;8495:30;8561:34;8541:18;;;8534:62;-1:-1:-1;;;8612:18:181;;;8605:33;8655:19;;8006:64:32;8281:399:181;8006:64:32;8081:38;8102:4;8108:2;8112:6;8081:20;:38::i;:::-;-1:-1:-1;;;;;8152:15:32;;8130:19;8152:15;;;:9;:15;;;;;;8185:21;;;;8177:72;;;;-1:-1:-1;;;8177:72:32;;8887:2:181;8177:72:32;;;8869:21:181;8926:2;8906:18;;;8899:30;8965:34;8945:18;;;8938:62;-1:-1:-1;;;9016:18:181;;;9009:36;9062:19;;8177:72:32;8685:402:181;8177:72:32;-1:-1:-1;;;;;8283:15:32;;;;;;;:9;:15;;;;;;8301:20;;;8283:38;;8498:13;;;;;;;;;;:23;;;;;;8547:26;;;;;;8315:6;1342:25:181;;1330:2;1315:18;;1196:177;8547:26:32;;;;;;;;8584:37;2267:159;1599:130:28;1513:6;;-1:-1:-1;;;;;1513:6:28;929:10:37;1662:23:28;1654:68;;;;-1:-1:-1;;;1654:68:28;;9294:2:181;1654:68:28;;;9276:21:181;;;9313:18;;;9306:30;9372:34;9352:18;;;9345:62;9424:18;;1654:68:28;9092:356:181;8904:535:32;-1:-1:-1;;;;;8987:21:32;;8979:65;;;;-1:-1:-1;;;8979:65:32;;9655:2:181;8979:65:32;;;9637:21:181;9694:2;9674:18;;;9667:30;9733:33;9713:18;;;9706:61;9784:18;;8979:65:32;9453:355:181;8979:65:32;9055:49;9084:1;9088:7;9097:6;9055:20;:49::i;:::-;9131:6;9115:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;9283:18:32;;;;;;:9;:18;;;;;;;;:28;;;;;;9336:37;1342:25:181;;;9336:37:32;;1315:18:181;9336:37:32;;;;;;;1541:155:85;;:::o;776:69:37:-;5363:13:29;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:29;;;;;;;:::i;2267:159:32:-;5363:13:29;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:29;;;;;;;:::i;:::-;2379:5:32::1;:13;2387:5:::0;2379;:13:::1;:::i;:::-;-1:-1:-1::0;2402:7:32::1;:17;2412:7:::0;2402;:17:::1;:::i;:::-;;2267:159:::0;;:::o;1104:111:28:-;5363:13:29;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:29;;;;;;;:::i;:::-;1176:32:28::1;929:10:37::0;1195:12:28::1;2765:6:::0;;;-1:-1:-1;;;;;2781:17:28;;;-1:-1:-1;;;;;;2781:17:28;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;9759:659:32:-;-1:-1:-1;;;;;9842:21:32;;9834:67;;;;-1:-1:-1;;;9834:67:32;;12631:2:181;9834:67:32;;;12613:21:181;12670:2;12650:18;;;12643:30;12709:34;12689:18;;;12682:62;-1:-1:-1;;;12760:18:181;;;12753:31;12801:19;;9834:67:32;12429:397:181;9834:67:32;9912:49;9933:7;9950:1;9954:6;9912:20;:49::i;:::-;-1:-1:-1;;;;;9997:18:32;;9972:22;9997:18;;;:9;:18;;;;;;10033:24;;;;10025:71;;;;-1:-1:-1;;;10025:71:32;;13033:2:181;10025:71:32;;;13015:21:181;13072:2;13052:18;;;13045:30;13111:34;13091:18;;;13084:62;-1:-1:-1;;;13162:18:181;;;13155:32;13204:19;;10025:71:32;12831:398:181;10025:71:32;-1:-1:-1;;;;;10130:18:32;;;;;;:9;:18;;;;;;;;10151:23;;;10130:44;;10267:12;:22;;;;;;;10315:37;1342:25:181;;;10130:18:32;;;10315:37;;1315:18:181;10315:37:32;;;;;;;2402:17:::1;2267:159:::0;;:::o;2414:255:85:-;2624:4;-1:-1:-1;;;;;2610:19:85;;;2602:62;;;;-1:-1:-1;;;2602:62:85;;13436:2:181;2602:62:85;;;13418:21:181;13475:2;13455:18;;;13448:30;13514:32;13494:18;;;13487:60;13564:18;;2602:62:85;13234:354:181;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:181;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:181:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;1900:127::-;1961:10;1956:3;1952:20;1949:1;1942:31;1992:4;1989:1;1982:15;2016:4;2013:1;2006:15;2032:719;2075:5;2128:3;2121:4;2113:6;2109:17;2105:27;2095:55;;2146:1;2143;2136:12;2095:55;2182:6;2169:20;2208:18;2245:2;2241;2238:10;2235:36;;;2251:18;;:::i;:::-;2326:2;2320:9;2294:2;2380:13;;-1:-1:-1;;2376:22:181;;;2400:2;2372:31;2368:40;2356:53;;;2424:18;;;2444:22;;;2421:46;2418:72;;;2470:18;;:::i;:::-;2510:10;2506:2;2499:22;2545:2;2537:6;2530:18;2591:3;2584:4;2579:2;2571:6;2567:15;2563:26;2560:35;2557:55;;;2608:1;2605;2598:12;2557:55;2672:2;2665:4;2657:6;2653:17;2646:4;2638:6;2634:17;2621:54;2719:1;2712:4;2707:2;2699:6;2695:15;2691:26;2684:37;2739:6;2730:15;;;;;;2032:719;;;;:::o;2756:543::-;2844:6;2852;2905:2;2893:9;2884:7;2880:23;2876:32;2873:52;;;2921:1;2918;2911:12;2873:52;2961:9;2948:23;2990:18;3031:2;3023:6;3020:14;3017:34;;;3047:1;3044;3037:12;3017:34;3070:50;3112:7;3103:6;3092:9;3088:22;3070:50;:::i;:::-;3060:60;;3173:2;3162:9;3158:18;3145:32;3129:48;;3202:2;3192:8;3189:16;3186:36;;;3218:1;3215;3208:12;3186:36;;3241:52;3285:7;3274:8;3263:9;3259:24;3241:52;:::i;:::-;3231:62;;;2756:543;;;;;:::o;3304:186::-;3363:6;3416:2;3404:9;3395:7;3391:23;3387:32;3384:52;;;3432:1;3429;3422:12;3384:52;3455:29;3474:9;3455:29;:::i;:::-;3445:39;3304:186;-1:-1:-1;;;3304:186:181:o;3703:260::-;3771:6;3779;3832:2;3820:9;3811:7;3807:23;3803:32;3800:52;;;3848:1;3845;3838:12;3800:52;3871:29;3890:9;3871:29;:::i;:::-;3861:39;;3919:38;3953:2;3942:9;3938:18;3919:38;:::i;:::-;3909:48;;3703:260;;;;;:::o;3968:380::-;4047:1;4043:12;;;;4090;;;4111:61;;4165:4;4157:6;4153:17;4143:27;;4111:61;4218:2;4210:6;4207:14;4187:18;4184:38;4181:161;;4264:10;4259:3;4255:20;4252:1;4245:31;4299:4;4296:1;4289:15;4327:4;4324:1;4317:15;4181:161;;3968:380;;;:::o;4353:222::-;4418:9;;;4439:10;;;4436:133;;;4491:10;4486:3;4482:20;4479:1;4472:31;4526:4;4523:1;4516:15;4554:4;4551:1;4544:15;9813:407;10015:2;9997:21;;;10054:2;10034:18;;;10027:30;10093:34;10088:2;10073:18;;10066:62;-1:-1:-1;;;10159:2:181;10144:18;;10137:41;10210:3;10195:19;;9813:407::o;10351:545::-;10453:2;10448:3;10445:11;10442:448;;;10489:1;10514:5;10510:2;10503:17;10559:4;10555:2;10545:19;10629:2;10617:10;10613:19;10610:1;10606:27;10600:4;10596:38;10665:4;10653:10;10650:20;10647:47;;;-1:-1:-1;10688:4:181;10647:47;10743:2;10738:3;10734:12;10731:1;10727:20;10721:4;10717:31;10707:41;;10798:82;10816:2;10809:5;10806:13;10798:82;;;10861:17;;;10842:1;10831:13;10798:82;;;10802:3;;;10351:545;;;:::o;11072:1352::-;11198:3;11192:10;11225:18;11217:6;11214:30;11211:56;;;11247:18;;:::i;:::-;11276:97;11366:6;11326:38;11358:4;11352:11;11326:38;:::i;:::-;11320:4;11276:97;:::i;:::-;11428:4;;11492:2;11481:14;;11509:1;11504:663;;;;12211:1;12228:6;12225:89;;;-1:-1:-1;12280:19:181;;;12274:26;12225:89;-1:-1:-1;;11029:1:181;11025:11;;;11021:24;11017:29;11007:40;11053:1;11049:11;;;11004:57;12327:81;;11474:944;;11504:663;10298:1;10291:14;;;10335:4;10322:18;;-1:-1:-1;;11540:20:181;;;11658:236;11672:7;11669:1;11666:14;11658:236;;;11761:19;;;11755:26;11740:42;;11853:27;;;;11821:1;11809:14;;;;11688:19;;11658:236;;;11662:3;11922:6;11913:7;11910:19;11907:201;;;11983:19;;;11977:26;-1:-1:-1;;12066:1:181;12062:14;;;12078:3;12058:24;12054:37;12050:42;12035:58;12020:74;;11907:201;-1:-1:-1;;;;;12154:1:181;12138:14;;;12134:22;12121:36;;-1:-1:-1;11072:1352:181:o"},"gasEstimates":{"creation":{"codeDepositCost":"906200","executionCost":"942","totalCost":"907142"},"external":{"allowance(address,address)":"infinite","approve(address,uint256)":"24651","balanceOf(address)":"2560","burnFrom(address,uint256)":"53186","decimals()":"200","decreaseAllowance(address,uint256)":"26994","increaseAllowance(address,uint256)":"infinite","initialize(string,string)":"infinite","mint(address,uint256)":"53141","name()":"infinite","owner()":"2390","renounceOwnership()":"infinite","symbol()":"infinite","totalSupply()":"2349","transfer(address,uint256)":"51204","transferFrom(address,address,uint256)":"infinite","transferOwnership(address)":"28446"},"internal":{"_beforeTokenTransfer(address,address,uint256)":"infinite"}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burnFrom(address,uint256)":"79cc6790","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","increaseAllowance(address,uint256)":"39509351","initialize(string,string)":"4cd88b76","mint(address,uint256)":"40c10f19","name()":"06fdde03","owner()":"8da5cb5b","renounceOwnership()":"715018a6","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Only Swap contracts should initialize and own LPToken contracts.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burnFrom(address,uint256)\":{\"details\":\"only owner can call this burn function\",\"params\":{\"account\":\"address of account from which to burn token\",\"amount\":\"amount of tokens to mint\"}},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"initialize(string,string)\":{\"details\":\"The caller of this function will become the owner. A Swap contract should call this in its initializer function.\",\"params\":{\"name\":\"name of this token\",\"symbol\":\"symbol of this token\"}},\"mint(address,uint256)\":{\"details\":\"only owner can call this mint function\",\"params\":{\"amount\":\"amount of tokens to mint\",\"recipient\":\"address of account to receive the tokens\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"Liquidity Provider Token\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"burnFrom(address,uint256)\":{\"notice\":\"Burns the given amount of LPToken from provided account\"},\"initialize(string,string)\":{\"notice\":\"Initializes this LPToken contract with the given name and symbol\"},\"mint(address,uint256)\":{\"notice\":\"Mints the given amount of LPToken to the recipient.\"}},\"notice\":\"This token is an ERC20 detailed token with added capability to be minted by the owner. It is used to represent user's shares when providing liquidity to swap contracts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/helpers/LPToken.sol\":\"LPToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8076,"contract":"contracts/core/connext/helpers/LPToken.sol:LPToken","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":8079,"contract":"contracts/core/connext/helpers/LPToken.sol:LPToken","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":9542,"contract":"contracts/core/connext/helpers/LPToken.sol:LPToken","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":8457,"contract":"contracts/core/connext/helpers/LPToken.sol:LPToken","label":"_balances","offset":0,"slot":"51","type":"t_mapping(t_address,t_uint256)"},{"astId":8463,"contract":"contracts/core/connext/helpers/LPToken.sol:LPToken","label":"_allowances","offset":0,"slot":"52","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":8465,"contract":"contracts/core/connext/helpers/LPToken.sol:LPToken","label":"_totalSupply","offset":0,"slot":"53","type":"t_uint256"},{"astId":8467,"contract":"contracts/core/connext/helpers/LPToken.sol:LPToken","label":"_name","offset":0,"slot":"54","type":"t_string_storage"},{"astId":8469,"contract":"contracts/core/connext/helpers/LPToken.sol:LPToken","label":"_symbol","offset":0,"slot":"55","type":"t_string_storage"},{"astId":9049,"contract":"contracts/core/connext/helpers/LPToken.sol:LPToken","label":"__gap","offset":0,"slot":"56","type":"t_array(t_uint256)45_storage"},{"astId":7948,"contract":"contracts/core/connext/helpers/LPToken.sol:LPToken","label":"_owner","offset":0,"slot":"101","type":"t_address"},{"astId":8068,"contract":"contracts/core/connext/helpers/LPToken.sol:LPToken","label":"__gap","offset":0,"slot":"102","type":"t_array(t_uint256)49_storage"},{"astId":23178,"contract":"contracts/core/connext/helpers/LPToken.sol:LPToken","label":"__GAP","offset":0,"slot":"151","type":"t_array(t_uint256)50_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)45_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[45]","numberOfBytes":"1440"},"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"burnFrom(address,uint256)":{"notice":"Burns the given amount of LPToken from provided account"},"initialize(string,string)":{"notice":"Initializes this LPToken contract with the given name and symbol"},"mint(address,uint256)":{"notice":"Mints the given amount of LPToken to the recipient."}},"notice":"This token is an ERC20 detailed token with added capability to be minted by the owner. It is used to represent user's shares when providing liquidity to swap contracts.","version":1}}},"contracts/core/connext/helpers/OZERC20.sol":{"ERC20":{"abi":[{"inputs":[{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"version_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Implementation of the {IERC20} interface. Implements ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin guidelines: functions revert instead of returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.Cannot use default ERC20/ERC20Permit implementation as there is no way to update the name (set to private). Cannot use default EIP712 implementation as the _HASHED_NAME may change. These functions use the same implementation, with easier storage access.","kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"See {IERC20Permit-DOMAIN_SEPARATOR}. This is ALWAYS calculated at runtime because the token name is mutable, not constant."},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"constructor":{"details":"Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `\"1\"`. It's a good idea to use the same `name` that is defined as the ERC20 token name."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"decreaseAllowance(address,uint256)":{"details":"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address. - `_spender` must have allowance for the caller of at least `_subtractedValue`."},"increaseAllowance(address,uint256)":{"details":"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address."},"name()":{"details":"Returns the name of the token."},"nonces(address)":{"details":"See {IERC20Permit-nonces}."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"See {IERC20Permit-permit}.","params":{"_deadline":"The timestamp before which the signature must be submitted","_owner":"The account setting approval & signing the message","_r":"ECDSA signature r","_s":"ECDSA signature s","_spender":"The account receiving approval to spend owner's tokens","_v":"ECDSA signature v","_value":"The amount to set approval for"}},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `_sender` and `recipient` cannot be the zero address. - `_sender` must have a balance of at least `amount`. - the caller must have allowance for ``_sender``'s tokens of at least `amount`."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_23312":{"entryPoint":null,"id":23312,"parameterSlots":4,"returnSlots":0},"@_buildDomainSeparator_24022":{"entryPoint":null,"id":24022,"parameterSlots":3,"returnSlots":1},"abi_decode_string_fromMemory":{"entryPoint":263,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8t_string_memory_ptrt_string_memory_ptrt_string_memory_ptr_fromMemory":{"entryPoint":438,"id":null,"parameterSlots":2,"returnSlots":4},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"array_dataslot_string_storage":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"clean_up_bytearray_end_slots_string_storage":{"entryPoint":670,"id":null,"parameterSlots":3,"returnSlots":0},"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage":{"entryPoint":753,"id":null,"parameterSlots":2,"returnSlots":0},"extract_byte_array_length":{"entryPoint":610,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x41":{"entryPoint":241,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4993:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:181"},"nodeType":"YulFunctionCall","src":"66:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:181"},"nodeType":"YulFunctionCall","src":"56:31:181"},"nodeType":"YulExpressionStatement","src":"56:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:181"},"nodeType":"YulFunctionCall","src":"96:15:181"},"nodeType":"YulExpressionStatement","src":"96:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:181"},"nodeType":"YulFunctionCall","src":"120:15:181"},"nodeType":"YulExpressionStatement","src":"120:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:181"},{"body":{"nodeType":"YulBlock","src":"210:776:181","statements":[{"body":{"nodeType":"YulBlock","src":"259:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"268:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"271:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"261:6:181"},"nodeType":"YulFunctionCall","src":"261:12:181"},"nodeType":"YulExpressionStatement","src":"261:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"238:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"246:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"234:3:181"},"nodeType":"YulFunctionCall","src":"234:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"253:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"230:3:181"},"nodeType":"YulFunctionCall","src":"230:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"223:6:181"},"nodeType":"YulFunctionCall","src":"223:35:181"},"nodeType":"YulIf","src":"220:55:181"},{"nodeType":"YulVariableDeclaration","src":"284:23:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"300:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"294:5:181"},"nodeType":"YulFunctionCall","src":"294:13:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"288:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"316:28:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"334:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"338:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"330:3:181"},"nodeType":"YulFunctionCall","src":"330:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"342:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"326:3:181"},"nodeType":"YulFunctionCall","src":"326:18:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"320:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"367:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"369:16:181"},"nodeType":"YulFunctionCall","src":"369:18:181"},"nodeType":"YulExpressionStatement","src":"369:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"359:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"363:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"356:2:181"},"nodeType":"YulFunctionCall","src":"356:10:181"},"nodeType":"YulIf","src":"353:36:181"},{"nodeType":"YulVariableDeclaration","src":"398:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"412:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"408:3:181"},"nodeType":"YulFunctionCall","src":"408:7:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"402:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"424:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"444:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"438:5:181"},"nodeType":"YulFunctionCall","src":"438:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"428:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"456:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"478:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"502:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"506:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"498:3:181"},"nodeType":"YulFunctionCall","src":"498:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"513:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"494:3:181"},"nodeType":"YulFunctionCall","src":"494:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"518:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"490:3:181"},"nodeType":"YulFunctionCall","src":"490:31:181"},{"name":"_3","nodeType":"YulIdentifier","src":"523:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"486:3:181"},"nodeType":"YulFunctionCall","src":"486:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"474:3:181"},"nodeType":"YulFunctionCall","src":"474:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"460:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"586:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"588:16:181"},"nodeType":"YulFunctionCall","src":"588:18:181"},"nodeType":"YulExpressionStatement","src":"588:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"545:10:181"},{"name":"_2","nodeType":"YulIdentifier","src":"557:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"542:2:181"},"nodeType":"YulFunctionCall","src":"542:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"565:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"577:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"562:2:181"},"nodeType":"YulFunctionCall","src":"562:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"539:2:181"},"nodeType":"YulFunctionCall","src":"539:46:181"},"nodeType":"YulIf","src":"536:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"624:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"628:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"617:6:181"},"nodeType":"YulFunctionCall","src":"617:22:181"},"nodeType":"YulExpressionStatement","src":"617:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"655:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"663:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"648:6:181"},"nodeType":"YulFunctionCall","src":"648:18:181"},"nodeType":"YulExpressionStatement","src":"648:18:181"},{"nodeType":"YulVariableDeclaration","src":"675:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"685:4:181","type":"","value":"0x20"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"679:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"735:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"744:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"747:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"737:6:181"},"nodeType":"YulFunctionCall","src":"737:12:181"},"nodeType":"YulExpressionStatement","src":"737:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"712:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"720:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"708:3:181"},"nodeType":"YulFunctionCall","src":"708:15:181"},{"name":"_4","nodeType":"YulIdentifier","src":"725:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"704:3:181"},"nodeType":"YulFunctionCall","src":"704:24:181"},{"name":"end","nodeType":"YulIdentifier","src":"730:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"701:2:181"},"nodeType":"YulFunctionCall","src":"701:33:181"},"nodeType":"YulIf","src":"698:53:181"},{"nodeType":"YulVariableDeclaration","src":"760:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"769:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"764:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"825:87:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"854:6:181"},{"name":"i","nodeType":"YulIdentifier","src":"862:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"850:3:181"},"nodeType":"YulFunctionCall","src":"850:14:181"},{"name":"_4","nodeType":"YulIdentifier","src":"866:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"846:3:181"},"nodeType":"YulFunctionCall","src":"846:23:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"885:6:181"},{"name":"i","nodeType":"YulIdentifier","src":"893:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"881:3:181"},"nodeType":"YulFunctionCall","src":"881:14:181"},{"name":"_4","nodeType":"YulIdentifier","src":"897:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"877:3:181"},"nodeType":"YulFunctionCall","src":"877:23:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"871:5:181"},"nodeType":"YulFunctionCall","src":"871:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"839:6:181"},"nodeType":"YulFunctionCall","src":"839:63:181"},"nodeType":"YulExpressionStatement","src":"839:63:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"790:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"793:2:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"787:2:181"},"nodeType":"YulFunctionCall","src":"787:9:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"797:19:181","statements":[{"nodeType":"YulAssignment","src":"799:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"808:1:181"},{"name":"_4","nodeType":"YulIdentifier","src":"811:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"804:3:181"},"nodeType":"YulFunctionCall","src":"804:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"799:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"783:3:181","statements":[]},"src":"779:133:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"936:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"944:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"932:3:181"},"nodeType":"YulFunctionCall","src":"932:15:181"},{"name":"_4","nodeType":"YulIdentifier","src":"949:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"928:3:181"},"nodeType":"YulFunctionCall","src":"928:24:181"},{"kind":"number","nodeType":"YulLiteral","src":"954:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"921:6:181"},"nodeType":"YulFunctionCall","src":"921:35:181"},"nodeType":"YulExpressionStatement","src":"921:35:181"},{"nodeType":"YulAssignment","src":"965:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"974:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"965:5:181"}]}]},"name":"abi_decode_string_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"184:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"192:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"200:5:181","type":""}],"src":"146:840:181"},{"body":{"nodeType":"YulBlock","src":"1151:757:181","statements":[{"body":{"nodeType":"YulBlock","src":"1198:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1207:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1210:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1200:6:181"},"nodeType":"YulFunctionCall","src":"1200:12:181"},"nodeType":"YulExpressionStatement","src":"1200:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1172:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1181:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1168:3:181"},"nodeType":"YulFunctionCall","src":"1168:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1193:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1164:3:181"},"nodeType":"YulFunctionCall","src":"1164:33:181"},"nodeType":"YulIf","src":"1161:53:181"},{"nodeType":"YulVariableDeclaration","src":"1223:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1242:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1236:5:181"},"nodeType":"YulFunctionCall","src":"1236:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1227:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1300:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1309:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1312:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1302:6:181"},"nodeType":"YulFunctionCall","src":"1302:12:181"},"nodeType":"YulExpressionStatement","src":"1302:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1274:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1285:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"1292:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1281:3:181"},"nodeType":"YulFunctionCall","src":"1281:16:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1271:2:181"},"nodeType":"YulFunctionCall","src":"1271:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1264:6:181"},"nodeType":"YulFunctionCall","src":"1264:35:181"},"nodeType":"YulIf","src":"1261:55:181"},{"nodeType":"YulAssignment","src":"1325:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1335:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1325:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1349:39:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1373:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1384:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1369:3:181"},"nodeType":"YulFunctionCall","src":"1369:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1363:5:181"},"nodeType":"YulFunctionCall","src":"1363:25:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1353:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1397:28:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1415:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"1419:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1411:3:181"},"nodeType":"YulFunctionCall","src":"1411:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"1423:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1407:3:181"},"nodeType":"YulFunctionCall","src":"1407:18:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1401:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1452:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1461:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1464:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1454:6:181"},"nodeType":"YulFunctionCall","src":"1454:12:181"},"nodeType":"YulExpressionStatement","src":"1454:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1440:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1448:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1437:2:181"},"nodeType":"YulFunctionCall","src":"1437:14:181"},"nodeType":"YulIf","src":"1434:34:181"},{"nodeType":"YulAssignment","src":"1477:71:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1520:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1531:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1516:3:181"},"nodeType":"YulFunctionCall","src":"1516:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1540:7:181"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1487:28:181"},"nodeType":"YulFunctionCall","src":"1487:61:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1477:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1557:41:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1583:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1594:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1579:3:181"},"nodeType":"YulFunctionCall","src":"1579:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1573:5:181"},"nodeType":"YulFunctionCall","src":"1573:25:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"1561:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1627:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1636:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1639:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1629:6:181"},"nodeType":"YulFunctionCall","src":"1629:12:181"},"nodeType":"YulExpressionStatement","src":"1629:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"1613:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1623:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1610:2:181"},"nodeType":"YulFunctionCall","src":"1610:16:181"},"nodeType":"YulIf","src":"1607:36:181"},{"nodeType":"YulAssignment","src":"1652:73:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1695:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"1706:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1691:3:181"},"nodeType":"YulFunctionCall","src":"1691:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1717:7:181"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1662:28:181"},"nodeType":"YulFunctionCall","src":"1662:63:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1652:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1734:41:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1760:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1771:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1756:3:181"},"nodeType":"YulFunctionCall","src":"1756:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1750:5:181"},"nodeType":"YulFunctionCall","src":"1750:25:181"},"variables":[{"name":"offset_2","nodeType":"YulTypedName","src":"1738:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1804:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1813:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1816:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1806:6:181"},"nodeType":"YulFunctionCall","src":"1806:12:181"},"nodeType":"YulExpressionStatement","src":"1806:12:181"}]},"condition":{"arguments":[{"name":"offset_2","nodeType":"YulIdentifier","src":"1790:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1800:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1787:2:181"},"nodeType":"YulFunctionCall","src":"1787:16:181"},"nodeType":"YulIf","src":"1784:36:181"},{"nodeType":"YulAssignment","src":"1829:73:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1872:9:181"},{"name":"offset_2","nodeType":"YulIdentifier","src":"1883:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1868:3:181"},"nodeType":"YulFunctionCall","src":"1868:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1894:7:181"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1839:28:181"},"nodeType":"YulFunctionCall","src":"1839:63:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1829:6:181"}]}]},"name":"abi_decode_tuple_t_uint8t_string_memory_ptrt_string_memory_ptrt_string_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1093:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1104:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1116:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1124:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1132:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1140:6:181","type":""}],"src":"991:917:181"},{"body":{"nodeType":"YulBlock","src":"1968:325:181","statements":[{"nodeType":"YulAssignment","src":"1978:22:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1992:1:181","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"1995:4:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1988:3:181"},"nodeType":"YulFunctionCall","src":"1988:12:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1978:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2009:38:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"2039:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"2045:1:181","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2035:3:181"},"nodeType":"YulFunctionCall","src":"2035:12:181"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"2013:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2086:31:181","statements":[{"nodeType":"YulAssignment","src":"2088:27:181","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2102:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2110:4:181","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2098:3:181"},"nodeType":"YulFunctionCall","src":"2098:17:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2088:6:181"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"2066:18:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2059:6:181"},"nodeType":"YulFunctionCall","src":"2059:26:181"},"nodeType":"YulIf","src":"2056:61:181"},{"body":{"nodeType":"YulBlock","src":"2176:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2197:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2204:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2209:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2200:3:181"},"nodeType":"YulFunctionCall","src":"2200:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2190:6:181"},"nodeType":"YulFunctionCall","src":"2190:31:181"},"nodeType":"YulExpressionStatement","src":"2190:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2241:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2244:4:181","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2234:6:181"},"nodeType":"YulFunctionCall","src":"2234:15:181"},"nodeType":"YulExpressionStatement","src":"2234:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2269:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2272:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2262:6:181"},"nodeType":"YulFunctionCall","src":"2262:15:181"},"nodeType":"YulExpressionStatement","src":"2262:15:181"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"2132:18:181"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2155:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2163:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2152:2:181"},"nodeType":"YulFunctionCall","src":"2152:14:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2129:2:181"},"nodeType":"YulFunctionCall","src":"2129:38:181"},"nodeType":"YulIf","src":"2126:161:181"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"1948:4:181","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"1957:6:181","type":""}],"src":"1913:380:181"},{"body":{"nodeType":"YulBlock","src":"2354:65:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2371:1:181","type":"","value":"0"},{"name":"ptr","nodeType":"YulIdentifier","src":"2374:3:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2364:6:181"},"nodeType":"YulFunctionCall","src":"2364:14:181"},"nodeType":"YulExpressionStatement","src":"2364:14:181"},{"nodeType":"YulAssignment","src":"2387:26:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2405:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2408:4:181","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"2395:9:181"},"nodeType":"YulFunctionCall","src":"2395:18:181"},"variableNames":[{"name":"data","nodeType":"YulIdentifier","src":"2387:4:181"}]}]},"name":"array_dataslot_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nodeType":"YulTypedName","src":"2337:3:181","type":""}],"returnVariables":[{"name":"data","nodeType":"YulTypedName","src":"2345:4:181","type":""}],"src":"2298:121:181"},{"body":{"nodeType":"YulBlock","src":"2505:464:181","statements":[{"body":{"nodeType":"YulBlock","src":"2538:425:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2552:11:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2562:1:181","type":"","value":"0"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2556:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2583:2:181"},{"name":"array","nodeType":"YulIdentifier","src":"2587:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2576:6:181"},"nodeType":"YulFunctionCall","src":"2576:17:181"},"nodeType":"YulExpressionStatement","src":"2576:17:181"},{"nodeType":"YulVariableDeclaration","src":"2606:31:181","value":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2628:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"2632:4:181","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"2618:9:181"},"nodeType":"YulFunctionCall","src":"2618:19:181"},"variables":[{"name":"data","nodeType":"YulTypedName","src":"2610:4:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2650:57:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"2673:4:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2683:1:181","type":"","value":"5"},{"arguments":[{"name":"startIndex","nodeType":"YulIdentifier","src":"2690:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"2702:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2686:3:181"},"nodeType":"YulFunctionCall","src":"2686:19:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2679:3:181"},"nodeType":"YulFunctionCall","src":"2679:27:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2669:3:181"},"nodeType":"YulFunctionCall","src":"2669:38:181"},"variables":[{"name":"deleteStart","nodeType":"YulTypedName","src":"2654:11:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2744:23:181","statements":[{"nodeType":"YulAssignment","src":"2746:19:181","value":{"name":"data","nodeType":"YulIdentifier","src":"2761:4:181"},"variableNames":[{"name":"deleteStart","nodeType":"YulIdentifier","src":"2746:11:181"}]}]},"condition":{"arguments":[{"name":"startIndex","nodeType":"YulIdentifier","src":"2726:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"2738:4:181","type":"","value":"0x20"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2723:2:181"},"nodeType":"YulFunctionCall","src":"2723:20:181"},"nodeType":"YulIf","src":"2720:47:181"},{"nodeType":"YulVariableDeclaration","src":"2780:41:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"2794:4:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2804:1:181","type":"","value":"5"},{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"2811:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"2816:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2807:3:181"},"nodeType":"YulFunctionCall","src":"2807:12:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2800:3:181"},"nodeType":"YulFunctionCall","src":"2800:20:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2790:3:181"},"nodeType":"YulFunctionCall","src":"2790:31:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2784:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2834:24:181","value":{"name":"deleteStart","nodeType":"YulIdentifier","src":"2847:11:181"},"variables":[{"name":"start","nodeType":"YulTypedName","src":"2838:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2932:21:181","statements":[{"expression":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"2941:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2948:2:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"2934:6:181"},"nodeType":"YulFunctionCall","src":"2934:17:181"},"nodeType":"YulExpressionStatement","src":"2934:17:181"}]},"condition":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"2882:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"2889:2:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2879:2:181"},"nodeType":"YulFunctionCall","src":"2879:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2893:26:181","statements":[{"nodeType":"YulAssignment","src":"2895:22:181","value":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"2908:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"2915:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2904:3:181"},"nodeType":"YulFunctionCall","src":"2904:13:181"},"variableNames":[{"name":"start","nodeType":"YulIdentifier","src":"2895:5:181"}]}]},"pre":{"nodeType":"YulBlock","src":"2875:3:181","statements":[]},"src":"2871:82:181"}]},"condition":{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"2521:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"2526:2:181","type":"","value":"31"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2518:2:181"},"nodeType":"YulFunctionCall","src":"2518:11:181"},"nodeType":"YulIf","src":"2515:448:181"}]},"name":"clean_up_bytearray_end_slots_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nodeType":"YulTypedName","src":"2477:5:181","type":""},{"name":"len","nodeType":"YulTypedName","src":"2484:3:181","type":""},{"name":"startIndex","nodeType":"YulTypedName","src":"2489:10:181","type":""}],"src":"2424:545:181"},{"body":{"nodeType":"YulBlock","src":"3059:81:181","statements":[{"nodeType":"YulAssignment","src":"3069:65:181","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"3084:4:181"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3102:1:181","type":"","value":"3"},{"name":"len","nodeType":"YulIdentifier","src":"3105:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3098:3:181"},"nodeType":"YulFunctionCall","src":"3098:11:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3115:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3111:3:181"},"nodeType":"YulFunctionCall","src":"3111:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3094:3:181"},"nodeType":"YulFunctionCall","src":"3094:24:181"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3090:3:181"},"nodeType":"YulFunctionCall","src":"3090:29:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3080:3:181"},"nodeType":"YulFunctionCall","src":"3080:40:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3126:1:181","type":"","value":"1"},{"name":"len","nodeType":"YulIdentifier","src":"3129:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3122:3:181"},"nodeType":"YulFunctionCall","src":"3122:11:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"3077:2:181"},"nodeType":"YulFunctionCall","src":"3077:57:181"},"variableNames":[{"name":"used","nodeType":"YulIdentifier","src":"3069:4:181"}]}]},"name":"extract_used_part_and_set_length_of_short_byte_array","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"3036:4:181","type":""},{"name":"len","nodeType":"YulTypedName","src":"3042:3:181","type":""}],"returnVariables":[{"name":"used","nodeType":"YulTypedName","src":"3050:4:181","type":""}],"src":"2974:166:181"},{"body":{"nodeType":"YulBlock","src":"3241:1256:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3251:24:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3271:3:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3265:5:181"},"nodeType":"YulFunctionCall","src":"3265:10:181"},"variables":[{"name":"newLen","nodeType":"YulTypedName","src":"3255:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3318:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"3320:16:181"},"nodeType":"YulFunctionCall","src":"3320:18:181"},"nodeType":"YulExpressionStatement","src":"3320:18:181"}]},"condition":{"arguments":[{"name":"newLen","nodeType":"YulIdentifier","src":"3290:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3306:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"3310:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3302:3:181"},"nodeType":"YulFunctionCall","src":"3302:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"3314:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3298:3:181"},"nodeType":"YulFunctionCall","src":"3298:18:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3287:2:181"},"nodeType":"YulFunctionCall","src":"3287:30:181"},"nodeType":"YulIf","src":"3284:56:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"3393:4:181"},{"arguments":[{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"3431:4:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"3425:5:181"},"nodeType":"YulFunctionCall","src":"3425:11:181"}],"functionName":{"name":"extract_byte_array_length","nodeType":"YulIdentifier","src":"3399:25:181"},"nodeType":"YulFunctionCall","src":"3399:38:181"},{"name":"newLen","nodeType":"YulIdentifier","src":"3439:6:181"}],"functionName":{"name":"clean_up_bytearray_end_slots_string_storage","nodeType":"YulIdentifier","src":"3349:43:181"},"nodeType":"YulFunctionCall","src":"3349:97:181"},"nodeType":"YulExpressionStatement","src":"3349:97:181"},{"nodeType":"YulVariableDeclaration","src":"3455:18:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3472:1:181","type":"","value":"0"},"variables":[{"name":"srcOffset","nodeType":"YulTypedName","src":"3459:9:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3482:23:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3501:4:181","type":"","value":"0x20"},"variables":[{"name":"srcOffset_1","nodeType":"YulTypedName","src":"3486:11:181","type":""}]},{"nodeType":"YulAssignment","src":"3514:24:181","value":{"name":"srcOffset_1","nodeType":"YulIdentifier","src":"3527:11:181"},"variableNames":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"3514:9:181"}]},{"cases":[{"body":{"nodeType":"YulBlock","src":"3584:656:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3598:35:181","value":{"arguments":[{"name":"newLen","nodeType":"YulIdentifier","src":"3617:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3629:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3625:3:181"},"nodeType":"YulFunctionCall","src":"3625:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3613:3:181"},"nodeType":"YulFunctionCall","src":"3613:20:181"},"variables":[{"name":"loopEnd","nodeType":"YulTypedName","src":"3602:7:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3646:49:181","value":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"3690:4:181"}],"functionName":{"name":"array_dataslot_string_storage","nodeType":"YulIdentifier","src":"3660:29:181"},"nodeType":"YulFunctionCall","src":"3660:35:181"},"variables":[{"name":"dstPtr","nodeType":"YulTypedName","src":"3650:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3708:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3717:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"3712:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3795:172:181","statements":[{"expression":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"3820:6:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3838:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"3843:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3834:3:181"},"nodeType":"YulFunctionCall","src":"3834:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3828:5:181"},"nodeType":"YulFunctionCall","src":"3828:26:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"3813:6:181"},"nodeType":"YulFunctionCall","src":"3813:42:181"},"nodeType":"YulExpressionStatement","src":"3813:42:181"},{"nodeType":"YulAssignment","src":"3872:24:181","value":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"3886:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3894:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3882:3:181"},"nodeType":"YulFunctionCall","src":"3882:14:181"},"variableNames":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"3872:6:181"}]},{"nodeType":"YulAssignment","src":"3913:40:181","value":{"arguments":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"3930:9:181"},{"name":"srcOffset_1","nodeType":"YulIdentifier","src":"3941:11:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3926:3:181"},"nodeType":"YulFunctionCall","src":"3926:27:181"},"variableNames":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"3913:9:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3742:1:181"},{"name":"loopEnd","nodeType":"YulIdentifier","src":"3745:7:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3739:2:181"},"nodeType":"YulFunctionCall","src":"3739:14:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3754:28:181","statements":[{"nodeType":"YulAssignment","src":"3756:24:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3765:1:181"},{"name":"srcOffset_1","nodeType":"YulIdentifier","src":"3768:11:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3761:3:181"},"nodeType":"YulFunctionCall","src":"3761:19:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"3756:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"3735:3:181","statements":[]},"src":"3731:236:181"},{"body":{"nodeType":"YulBlock","src":"4015:166:181","statements":[{"nodeType":"YulVariableDeclaration","src":"4033:43:181","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4060:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"4065:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4056:3:181"},"nodeType":"YulFunctionCall","src":"4056:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4050:5:181"},"nodeType":"YulFunctionCall","src":"4050:26:181"},"variables":[{"name":"lastValue","nodeType":"YulTypedName","src":"4037:9:181","type":""}]},{"expression":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"4100:6:181"},{"arguments":[{"name":"lastValue","nodeType":"YulIdentifier","src":"4112:9:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4139:1:181","type":"","value":"3"},{"name":"newLen","nodeType":"YulIdentifier","src":"4142:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4135:3:181"},"nodeType":"YulFunctionCall","src":"4135:14:181"},{"kind":"number","nodeType":"YulLiteral","src":"4151:3:181","type":"","value":"248"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4131:3:181"},"nodeType":"YulFunctionCall","src":"4131:24:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4161:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4157:3:181"},"nodeType":"YulFunctionCall","src":"4157:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"4127:3:181"},"nodeType":"YulFunctionCall","src":"4127:37:181"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4123:3:181"},"nodeType":"YulFunctionCall","src":"4123:42:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4108:3:181"},"nodeType":"YulFunctionCall","src":"4108:58:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"4093:6:181"},"nodeType":"YulFunctionCall","src":"4093:74:181"},"nodeType":"YulExpressionStatement","src":"4093:74:181"}]},"condition":{"arguments":[{"name":"loopEnd","nodeType":"YulIdentifier","src":"3986:7:181"},{"name":"newLen","nodeType":"YulIdentifier","src":"3995:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3983:2:181"},"nodeType":"YulFunctionCall","src":"3983:19:181"},"nodeType":"YulIf","src":"3980:201:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"4201:4:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4215:1:181","type":"","value":"1"},{"name":"newLen","nodeType":"YulIdentifier","src":"4218:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4211:3:181"},"nodeType":"YulFunctionCall","src":"4211:14:181"},{"kind":"number","nodeType":"YulLiteral","src":"4227:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4207:3:181"},"nodeType":"YulFunctionCall","src":"4207:22:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"4194:6:181"},"nodeType":"YulFunctionCall","src":"4194:36:181"},"nodeType":"YulExpressionStatement","src":"4194:36:181"}]},"nodeType":"YulCase","src":"3577:663:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3582:1:181","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"4257:234:181","statements":[{"nodeType":"YulVariableDeclaration","src":"4271:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4284:1:181","type":"","value":"0"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4275:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4320:67:181","statements":[{"nodeType":"YulAssignment","src":"4338:35:181","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4357:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"4362:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4353:3:181"},"nodeType":"YulFunctionCall","src":"4353:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4347:5:181"},"nodeType":"YulFunctionCall","src":"4347:26:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"4338:5:181"}]}]},"condition":{"name":"newLen","nodeType":"YulIdentifier","src":"4301:6:181"},"nodeType":"YulIf","src":"4298:89:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"4407:4:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4466:5:181"},{"name":"newLen","nodeType":"YulIdentifier","src":"4473:6:181"}],"functionName":{"name":"extract_used_part_and_set_length_of_short_byte_array","nodeType":"YulIdentifier","src":"4413:52:181"},"nodeType":"YulFunctionCall","src":"4413:67:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"4400:6:181"},"nodeType":"YulFunctionCall","src":"4400:81:181"},"nodeType":"YulExpressionStatement","src":"4400:81:181"}]},"nodeType":"YulCase","src":"4249:242:181","value":"default"}],"expression":{"arguments":[{"name":"newLen","nodeType":"YulIdentifier","src":"3557:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3565:2:181","type":"","value":"31"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3554:2:181"},"nodeType":"YulFunctionCall","src":"3554:14:181"},"nodeType":"YulSwitch","src":"3547:944:181"}]},"name":"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nodeType":"YulTypedName","src":"3226:4:181","type":""},{"name":"src","nodeType":"YulTypedName","src":"3232:3:181","type":""}],"src":"3145:1352:181"},{"body":{"nodeType":"YulBlock","src":"4715:276:181","statements":[{"nodeType":"YulAssignment","src":"4725:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4737:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4748:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4733:3:181"},"nodeType":"YulFunctionCall","src":"4733:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4725:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4768:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"4779:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4761:6:181"},"nodeType":"YulFunctionCall","src":"4761:25:181"},"nodeType":"YulExpressionStatement","src":"4761:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4806:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4817:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4802:3:181"},"nodeType":"YulFunctionCall","src":"4802:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"4822:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4795:6:181"},"nodeType":"YulFunctionCall","src":"4795:34:181"},"nodeType":"YulExpressionStatement","src":"4795:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4849:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4860:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4845:3:181"},"nodeType":"YulFunctionCall","src":"4845:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"4865:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4838:6:181"},"nodeType":"YulFunctionCall","src":"4838:34:181"},"nodeType":"YulExpressionStatement","src":"4838:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4892:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4903:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4888:3:181"},"nodeType":"YulFunctionCall","src":"4888:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"4908:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4881:6:181"},"nodeType":"YulFunctionCall","src":"4881:34:181"},"nodeType":"YulExpressionStatement","src":"4881:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4935:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4946:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4931:3:181"},"nodeType":"YulFunctionCall","src":"4931:19:181"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"4956:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4972:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4977:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4968:3:181"},"nodeType":"YulFunctionCall","src":"4968:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4981:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4964:3:181"},"nodeType":"YulFunctionCall","src":"4964:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4952:3:181"},"nodeType":"YulFunctionCall","src":"4952:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4924:6:181"},"nodeType":"YulFunctionCall","src":"4924:61:181"},"nodeType":"YulExpressionStatement","src":"4924:61:181"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4652:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"4663:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4671:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4679:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4687:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4695:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4706:4:181","type":""}],"src":"4502:489:181"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := sub(shl(64, 1), 1)\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        let _4 := 0x20\n        if gt(add(add(offset, _1), _4), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _1) { i := add(i, _4) }\n        {\n            mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n        }\n        mstore(add(add(memPtr, _1), _4), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_uint8t_string_memory_ptrt_string_memory_ptrt_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value0 := value\n        let offset := mload(add(headStart, 32))\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value1 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 64))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value2 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n        let offset_2 := mload(add(headStart, 96))\n        if gt(offset_2, _1) { revert(0, 0) }\n        value3 := abi_decode_string_fromMemory(add(headStart, offset_2), dataEnd)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function array_dataslot_string_storage(ptr) -> data\n    {\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n    }\n    function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n    {\n        if gt(len, 31)\n        {\n            let _1 := 0\n            mstore(_1, array)\n            let data := keccak256(_1, 0x20)\n            let deleteStart := add(data, shr(5, add(startIndex, 31)))\n            if lt(startIndex, 0x20) { deleteStart := data }\n            let _2 := add(data, shr(5, add(len, 31)))\n            let start := deleteStart\n            for { } lt(start, _2) { start := add(start, 1) }\n            { sstore(start, _1) }\n        }\n    }\n    function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n    {\n        used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n    }\n    function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n    {\n        let newLen := mload(src)\n        if gt(newLen, sub(shl(64, 1), 1)) { panic_error_0x41() }\n        clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n        let srcOffset := 0\n        let srcOffset_1 := 0x20\n        srcOffset := srcOffset_1\n        switch gt(newLen, 31)\n        case 1 {\n            let loopEnd := and(newLen, not(31))\n            let dstPtr := array_dataslot_string_storage(slot)\n            let i := 0\n            for { } lt(i, loopEnd) { i := add(i, srcOffset_1) }\n            {\n                sstore(dstPtr, mload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, srcOffset_1)\n            }\n            if lt(loopEnd, newLen)\n            {\n                let lastValue := mload(add(src, srcOffset))\n                sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n            }\n            sstore(slot, add(shl(1, newLen), 1))\n        }\n        default {\n            let value := 0\n            if newLen\n            {\n                value := mload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n        }\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e06040523480156200001157600080fd5b506040516200127a3803806200127a8339810160408190526200003491620001b6565b6003620000428482620002f1565b506004620000518382620002f1565b506005805460ff191660ff9590951694909417909355508051602091820120825192820192909220600883905560c0818152466080818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801528082019790975260608701949094528501523060a0808601829052835180870382018152959092019092528351939092019290922060075552620003bd565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200011957600080fd5b81516001600160401b0380821115620001365762000136620000f1565b604051601f8301601f19908116603f01168101908282118183101715620001615762000161620000f1565b816040528381526020925086838588010111156200017e57600080fd5b600091505b83821015620001a2578582018301518183018401529082019062000183565b600093810190920192909252949350505050565b60008060008060808587031215620001cd57600080fd5b845160ff81168114620001df57600080fd5b60208601519094506001600160401b0380821115620001fd57600080fd5b6200020b8883890162000107565b945060408701519150808211156200022257600080fd5b620002308883890162000107565b935060608701519150808211156200024757600080fd5b50620002568782880162000107565b91505092959194509250565b600181811c908216806200027757607f821691505b6020821081036200029857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002ec57600081815260208120601f850160051c81016020861015620002c75750805b601f850160051c820191505b81811015620002e857828155600101620002d3565b5050505b505050565b81516001600160401b038111156200030d576200030d620000f1565b62000325816200031e845462000262565b846200029e565b602080601f8311600181146200035d5760008415620003445750858301515b600019600386901b1c1916600185901b178555620002e8565b600085815260208120601f198616915b828110156200038e578886015182559484019460019091019084016200036d565b5085821015620003ad5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c051610e8d620003ed6000396000610957015260006108c4015260006108ee0152610e8d6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063a457c2d711610066578063a457c2d7146101c9578063a9059cbb146101dc578063d505accf146101ef578063dd62ed3e1461020457600080fd5b806370a08231146101855780637ecebe00146101ae57806395d89b41146101c157600080fd5b806323b872dd116100c857806323b872dd14610142578063313ce567146101555780633644e5151461016a578063395093511461017257600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd14610130575b600080fd5b6100f7610217565b6040516101049190610c54565b60405180910390f35b61012061011b366004610cbe565b6102a9565b6040519015158152602001610104565b6002545b604051908152602001610104565b610120610150366004610ce8565b6102c0565b60055460405160ff9091168152602001610104565b6101346102e2565b610120610180366004610cbe565b6102f1565b610134610193366004610d24565b6001600160a01b031660009081526020819052604090205490565b6101346101bc366004610d24565b61032d565b6100f761034b565b6101206101d7366004610cbe565b61035a565b6101206101ea366004610cbe565b6103d9565b6102026101fd366004610d46565b6103e6565b005b610134610212366004610db9565b61054a565b60606003805461022690610dec565b80601f016020809104026020016040519081016040528092919081815260200182805461025290610dec565b801561029f5780601f106102745761010080835404028352916020019161029f565b820191906000526020600020905b81548152906001019060200180831161028257829003601f168201915b5050505050905090565b60006102b6338484610575565b5060015b92915050565b60006102cd843384610699565b6102d8848484610713565b5060019392505050565b60006102ec6108b7565b905090565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916102b6918590610328908690610e20565b610575565b6001600160a01b0381166000908152600660205260408120546102ba565b60606004805461022690610dec565b600080610367338561054a565b9050828110156103cc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102d83385858403610575565b60006102b6338484610713565b834211156104365760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016103c3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104658c6109a5565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006104c0826109cd565b905060006104d082878787610a1b565b9050896001600160a01b0316816001600160a01b0316146105335760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016103c3565b61053e8a8a8a610575565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166105d75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103c3565b6001600160a01b0382166106385760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103c3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006106a5848461054a565b9050600019811461070d57818110156107005760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103c3565b61070d8484848403610575565b50505050565b6001600160a01b0383166107775760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103c3565b6001600160a01b0382166107d95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103c3565b6001600160a01b038316600090815260208190526040902054818110156108515760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103c3565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361070d565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561091057507f000000000000000000000000000000000000000000000000000000000000000046145b1561091c575060075490565b50600854604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a0808301919091528251808303909101815260c0909101909152805191012090565b6001600160a01b03811660009081526006602052604090208054600181018255905b50919050565b60006102ba6109da6108b7565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610a2c87878787610a43565b91509150610a3981610b07565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610a7a5750600090506003610afe565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610ace573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610af757600060019250925050610afe565b9150600090505b94509492505050565b6000816004811115610b1b57610b1b610e41565b03610b235750565b6001816004811115610b3757610b37610e41565b03610b845760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103c3565b6002816004811115610b9857610b98610e41565b03610be55760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103c3565b6003816004811115610bf957610bf9610e41565b03610c515760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103c3565b50565b600060208083528351808285015260005b81811015610c8157858101830151858201604001528201610c65565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610cb957600080fd5b919050565b60008060408385031215610cd157600080fd5b610cda83610ca2565b946020939093013593505050565b600080600060608486031215610cfd57600080fd5b610d0684610ca2565b9250610d1460208501610ca2565b9150604084013590509250925092565b600060208284031215610d3657600080fd5b610d3f82610ca2565b9392505050565b600080600080600080600060e0888a031215610d6157600080fd5b610d6a88610ca2565b9650610d7860208901610ca2565b95506040880135945060608801359350608088013560ff81168114610d9c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610dcc57600080fd5b610dd583610ca2565b9150610de360208401610ca2565b90509250929050565b600181811c90821680610e0057607f821691505b6020821081036109c757634e487b7160e01b600052602260045260246000fd5b808201808211156102ba57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea2646970667358221220416d5a4e976ab8e7f6ba5cbb9e3f03ee9430c01a799d4978a9e1b8002624577264736f6c63430008110033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x127A CODESIZE SUB DUP1 PUSH3 0x127A DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x1B6 JUMP JUMPDEST PUSH1 0x3 PUSH3 0x42 DUP5 DUP3 PUSH3 0x2F1 JUMP JUMPDEST POP PUSH1 0x4 PUSH3 0x51 DUP4 DUP3 PUSH3 0x2F1 JUMP JUMPDEST POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP6 SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE POP DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 DUP3 MLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 KECCAK256 PUSH1 0x8 DUP4 SWAP1 SSTORE PUSH1 0xC0 DUP2 DUP2 MSTORE CHAINID PUSH1 0x80 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP2 DUP9 ADD MSTORE DUP1 DUP3 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x60 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP6 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP8 SUB DUP3 ADD DUP2 MSTORE SWAP6 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP4 MLOAD SWAP4 SWAP1 SWAP3 ADD SWAP3 SWAP1 SWAP3 KECCAK256 PUSH1 0x7 SSTORE MSTORE PUSH3 0x3BD JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x119 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x136 JUMPI PUSH3 0x136 PUSH3 0xF1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x161 JUMPI PUSH3 0x161 PUSH3 0xF1 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x17E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x1A2 JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x183 JUMP JUMPDEST PUSH1 0x0 SWAP4 DUP2 ADD SWAP1 SWAP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x1CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH3 0x1DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP1 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x20B DUP9 DUP4 DUP10 ADD PUSH3 0x107 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x222 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x230 DUP9 DUP4 DUP10 ADD PUSH3 0x107 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x256 DUP8 DUP3 DUP9 ADD PUSH3 0x107 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x277 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH3 0x298 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH3 0x2EC JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH3 0x2C7 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x2E8 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x2D3 JUMP JUMPDEST POP POP POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH3 0x30D JUMPI PUSH3 0x30D PUSH3 0xF1 JUMP JUMPDEST PUSH3 0x325 DUP2 PUSH3 0x31E DUP5 SLOAD PUSH3 0x262 JUMP JUMPDEST DUP5 PUSH3 0x29E JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH3 0x35D JUMPI PUSH1 0x0 DUP5 ISZERO PUSH3 0x344 JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH3 0x2E8 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH3 0x38E JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH3 0x36D JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH3 0x3AD JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0xE8D PUSH3 0x3ED PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x957 ADD MSTORE PUSH1 0x0 PUSH2 0x8C4 ADD MSTORE PUSH1 0x0 PUSH2 0x8EE ADD MSTORE PUSH2 0xE8D PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x1C9 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1DC JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x1EF JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x204 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x142 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x16A JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x172 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x130 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x217 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x104 SWAP2 SWAP1 PUSH2 0xC54 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x120 PUSH2 0x11B CALLDATASIZE PUSH1 0x4 PUSH2 0xCBE JUMP JUMPDEST PUSH2 0x2A9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x150 CALLDATASIZE PUSH1 0x4 PUSH2 0xCE8 JUMP JUMPDEST PUSH2 0x2C0 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH2 0x134 PUSH2 0x2E2 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x180 CALLDATASIZE PUSH1 0x4 PUSH2 0xCBE JUMP JUMPDEST PUSH2 0x2F1 JUMP JUMPDEST PUSH2 0x134 PUSH2 0x193 CALLDATASIZE PUSH1 0x4 PUSH2 0xD24 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x134 PUSH2 0x1BC CALLDATASIZE PUSH1 0x4 PUSH2 0xD24 JUMP JUMPDEST PUSH2 0x32D JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x34B JUMP JUMPDEST PUSH2 0x120 PUSH2 0x1D7 CALLDATASIZE PUSH1 0x4 PUSH2 0xCBE JUMP JUMPDEST PUSH2 0x35A JUMP JUMPDEST PUSH2 0x120 PUSH2 0x1EA CALLDATASIZE PUSH1 0x4 PUSH2 0xCBE JUMP JUMPDEST PUSH2 0x3D9 JUMP JUMPDEST PUSH2 0x202 PUSH2 0x1FD CALLDATASIZE PUSH1 0x4 PUSH2 0xD46 JUMP JUMPDEST PUSH2 0x3E6 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x134 PUSH2 0x212 CALLDATASIZE PUSH1 0x4 PUSH2 0xDB9 JUMP JUMPDEST PUSH2 0x54A JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x226 SWAP1 PUSH2 0xDEC JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x252 SWAP1 PUSH2 0xDEC JUMP JUMPDEST DUP1 ISZERO PUSH2 0x29F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x274 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x29F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x282 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2B6 CALLER DUP5 DUP5 PUSH2 0x575 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CD DUP5 CALLER DUP5 PUSH2 0x699 JUMP JUMPDEST PUSH2 0x2D8 DUP5 DUP5 DUP5 PUSH2 0x713 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EC PUSH2 0x8B7 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x2B6 SWAP2 DUP6 SWAP1 PUSH2 0x328 SWAP1 DUP7 SWAP1 PUSH2 0xE20 JUMP JUMPDEST PUSH2 0x575 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x2BA JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x226 SWAP1 PUSH2 0xDEC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x367 CALLER DUP6 PUSH2 0x54A JUMP JUMPDEST SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0x3CC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2D8 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x575 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2B6 CALLER DUP5 DUP5 PUSH2 0x713 JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x436 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x465 DUP13 PUSH2 0x9A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP1 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x4C0 DUP3 PUSH2 0x9CD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4D0 DUP3 DUP8 DUP8 DUP8 PUSH2 0xA1B JUMP JUMPDEST SWAP1 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x533 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH2 0x53E DUP11 DUP11 DUP11 PUSH2 0x575 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x5D7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x638 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6A5 DUP5 DUP5 PUSH2 0x54A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x70D JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x700 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH2 0x70D DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x575 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x777 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x7D9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x851 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP8 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE SWAP3 MLOAD DUP6 DUP2 MSTORE SWAP1 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x70D JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ DUP1 ISZERO PUSH2 0x910 JUMPI POP PUSH32 0x0 CHAINID EQ JUMPDEST ISZERO PUSH2 0x91C JUMPI POP PUSH1 0x7 SLOAD SWAP1 JUMP JUMPDEST POP PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP1 JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BA PUSH2 0x9DA PUSH2 0x8B7 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH2 0x1901 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x22 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x42 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x62 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xA2C DUP8 DUP8 DUP8 DUP8 PUSH2 0xA43 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xA39 DUP2 PUSH2 0xB07 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP4 GT ISZERO PUSH2 0xA7A JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x3 PUSH2 0xAFE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xACE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xAF7 JUMPI PUSH1 0x0 PUSH1 0x1 SWAP3 POP SWAP3 POP POP PUSH2 0xAFE JUMP JUMPDEST SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xB1B JUMPI PUSH2 0xB1B PUSH2 0xE41 JUMP JUMPDEST SUB PUSH2 0xB23 JUMPI POP JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xB37 JUMPI PUSH2 0xB37 PUSH2 0xE41 JUMP JUMPDEST SUB PUSH2 0xB84 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xB98 JUMPI PUSH2 0xB98 PUSH2 0xE41 JUMP JUMPDEST SUB PUSH2 0xBE5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xBF9 JUMPI PUSH2 0xBF9 PUSH2 0xE41 JUMP JUMPDEST SUB PUSH2 0xC51 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC81 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xC65 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xCB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xCD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCDA DUP4 PUSH2 0xCA2 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xCFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD06 DUP5 PUSH2 0xCA2 JUMP JUMPDEST SWAP3 POP PUSH2 0xD14 PUSH1 0x20 DUP6 ADD PUSH2 0xCA2 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD3F DUP3 PUSH2 0xCA2 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0xD61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6A DUP9 PUSH2 0xCA2 JUMP JUMPDEST SWAP7 POP PUSH2 0xD78 PUSH1 0x20 DUP10 ADD PUSH2 0xCA2 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xD9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xDCC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDD5 DUP4 PUSH2 0xCA2 JUMP JUMPDEST SWAP2 POP PUSH2 0xDE3 PUSH1 0x20 DUP5 ADD PUSH2 0xCA2 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xE00 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x9C7 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x2BA JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 COINBASE PUSH14 0x5A4E976AB8E7F6BA5CBB9E3F03EE SWAP5 ADDRESS 0xC0 BYTE PUSH26 0x9D4978A9E1B8002624577264736F6C6343000811003300000000 ","sourceMap":"2566:15890:86:-:0;;;4234:558;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4370:5;:13;4378:5;4370;:13;:::i;:::-;-1:-1:-1;4389:7:86;:17;4399:7;4389;:17;:::i;:::-;-1:-1:-1;4412:9:86;:21;;-1:-1:-1;;4412:21:86;;;;;;;;;;;;;-1:-1:-1;4475:23:86;;;;;;;4528:26;;;;;;;;;4560:12;:25;;;4591:31;;;;4647:13;4628:32;;;;-1:-1:-1;17623:73:86;;3392:95;17623:73;;;4761:25:181;4802:18;;;4795:34;;;;4845:18;;;4838:34;;;;4888:18;;4881:34;17690:4:86;4931:19:181;;;;4924:61;;;17623:73:86;;;;;;;;;4733:19:181;;;;17623:73:86;;;17613:84;;;;;;;;;;4666:24;:87;4759:28;2566:15890;;14:127:181;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:840;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:181;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:181;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;730:3;725:2;720;712:6;708:15;704:24;701:33;698:53;;;747:1;744;737:12;698:53;769:1;760:10;;779:133;793:2;790:1;787:9;779:133;;;881:14;;;877:23;;871:30;850:14;;;846:23;;839:63;804:10;;;;779:133;;;954:1;932:15;;;928:24;;;921:35;;;;936:6;146:840;-1:-1:-1;;;;146:840:181:o;991:917::-;1116:6;1124;1132;1140;1193:3;1181:9;1172:7;1168:23;1164:33;1161:53;;;1210:1;1207;1200:12;1161:53;1242:9;1236:16;1292:4;1285:5;1281:16;1274:5;1271:27;1261:55;;1312:1;1309;1302:12;1261:55;1384:2;1369:18;;1363:25;1335:5;;-1:-1:-1;;;;;;1437:14:181;;;1434:34;;;1464:1;1461;1454:12;1434:34;1487:61;1540:7;1531:6;1520:9;1516:22;1487:61;:::i;:::-;1477:71;;1594:2;1583:9;1579:18;1573:25;1557:41;;1623:2;1613:8;1610:16;1607:36;;;1639:1;1636;1629:12;1607:36;1662:63;1717:7;1706:8;1695:9;1691:24;1662:63;:::i;:::-;1652:73;;1771:2;1760:9;1756:18;1750:25;1734:41;;1800:2;1790:8;1787:16;1784:36;;;1816:1;1813;1806:12;1784:36;;1839:63;1894:7;1883:8;1872:9;1868:24;1839:63;:::i;:::-;1829:73;;;991:917;;;;;;;:::o;1913:380::-;1992:1;1988:12;;;;2035;;;2056:61;;2110:4;2102:6;2098:17;2088:27;;2056:61;2163:2;2155:6;2152:14;2132:18;2129:38;2126:161;;2209:10;2204:3;2200:20;2197:1;2190:31;2244:4;2241:1;2234:15;2272:4;2269:1;2262:15;2126:161;;1913:380;;;:::o;2424:545::-;2526:2;2521:3;2518:11;2515:448;;;2562:1;2587:5;2583:2;2576:17;2632:4;2628:2;2618:19;2702:2;2690:10;2686:19;2683:1;2679:27;2673:4;2669:38;2738:4;2726:10;2723:20;2720:47;;;-1:-1:-1;2761:4:181;2720:47;2816:2;2811:3;2807:12;2804:1;2800:20;2794:4;2790:31;2780:41;;2871:82;2889:2;2882:5;2879:13;2871:82;;;2934:17;;;2915:1;2904:13;2871:82;;;2875:3;;;2515:448;2424:545;;;:::o;3145:1352::-;3265:10;;-1:-1:-1;;;;;3287:30:181;;3284:56;;;3320:18;;:::i;:::-;3349:97;3439:6;3399:38;3431:4;3425:11;3399:38;:::i;:::-;3393:4;3349:97;:::i;:::-;3501:4;;3565:2;3554:14;;3582:1;3577:663;;;;4284:1;4301:6;4298:89;;;-1:-1:-1;4353:19:181;;;4347:26;4298:89;-1:-1:-1;;3102:1:181;3098:11;;;3094:24;3090:29;3080:40;3126:1;3122:11;;;3077:57;4400:81;;3547:944;;3577:663;2371:1;2364:14;;;2408:4;2395:18;;-1:-1:-1;;3613:20:181;;;3731:236;3745:7;3742:1;3739:14;3731:236;;;3834:19;;;3828:26;3813:42;;3926:27;;;;3894:1;3882:14;;;;3761:19;;3731:236;;;3735:3;3995:6;3986:7;3983:19;3980:201;;;4056:19;;;4050:26;-1:-1:-1;;4139:1:181;4135:14;;;4151:3;4131:24;4127:37;4123:42;4108:58;4093:74;;3980:201;-1:-1:-1;;;;;4227:1:181;4211:14;;;4207:22;4194:36;;-1:-1:-1;3145:1352:181:o;4502:489::-;2566:15890:86;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DOMAIN_SEPARATOR_23936":{"entryPoint":738,"id":23936,"parameterSlots":0,"returnSlots":1},"@_afterTokenTransfer_23836":{"entryPoint":null,"id":23836,"parameterSlots":3,"returnSlots":0},"@_approve_23771":{"entryPoint":1397,"id":23771,"parameterSlots":3,"returnSlots":0},"@_beforeTokenTransfer_23825":{"entryPoint":null,"id":23825,"parameterSlots":3,"returnSlots":0},"@_buildDomainSeparator_24022":{"entryPoint":null,"id":24022,"parameterSlots":3,"returnSlots":1},"@_domainSeparatorV4_23994":{"entryPoint":2231,"id":23994,"parameterSlots":0,"returnSlots":1},"@_hashTypedDataV4_24038":{"entryPoint":2509,"id":24038,"parameterSlots":1,"returnSlots":1},"@_spendAllowance_23814":{"entryPoint":1689,"id":23814,"parameterSlots":3,"returnSlots":0},"@_throwError_11869":{"entryPoint":2823,"id":11869,"parameterSlots":1,"returnSlots":0},"@_transfer_23597":{"entryPoint":1811,"id":23597,"parameterSlots":3,"returnSlots":0},"@_useNonce_23965":{"entryPoint":2469,"id":23965,"parameterSlots":1,"returnSlots":1},"@allowance_23405":{"entryPoint":1354,"id":23405,"parameterSlots":2,"returnSlots":1},"@approve_23426":{"entryPoint":681,"id":23426,"parameterSlots":2,"returnSlots":1},"@balanceOf_23366":{"entryPoint":null,"id":23366,"parameterSlots":1,"returnSlots":1},"@current_11524":{"entryPoint":null,"id":11524,"parameterSlots":1,"returnSlots":1},"@decimals_23342":{"entryPoint":null,"id":23342,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_23520":{"entryPoint":858,"id":23520,"parameterSlots":2,"returnSlots":1},"@increaseAllowance_23482":{"entryPoint":753,"id":23482,"parameterSlots":2,"returnSlots":1},"@increment_11538":{"entryPoint":null,"id":11538,"parameterSlots":1,"returnSlots":0},"@name_23322":{"entryPoint":535,"id":23322,"parameterSlots":0,"returnSlots":1},"@nonces_23925":{"entryPoint":813,"id":23925,"parameterSlots":1,"returnSlots":1},"@permit_23909":{"entryPoint":998,"id":23909,"parameterSlots":7,"returnSlots":0},"@recover_12116":{"entryPoint":2587,"id":12116,"parameterSlots":4,"returnSlots":1},"@symbol_23332":{"entryPoint":843,"id":23332,"parameterSlots":0,"returnSlots":1},"@toTypedDataHash_12175":{"entryPoint":null,"id":12175,"parameterSlots":2,"returnSlots":1},"@totalSupply_23352":{"entryPoint":null,"id":23352,"parameterSlots":0,"returnSlots":1},"@transferFrom_23455":{"entryPoint":704,"id":23455,"parameterSlots":3,"returnSlots":1},"@transfer_23387":{"entryPoint":985,"id":23387,"parameterSlots":2,"returnSlots":1},"@tryRecover_12083":{"entryPoint":2627,"id":12083,"parameterSlots":4,"returnSlots":2},"abi_decode_address":{"entryPoint":3234,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":3364,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":3513,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":3304,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":3398,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":3262,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":3156,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3e89525a63fb9c966b61cf8f5305156de8420bc773a2b60828a2f32c3c5797bd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_94ca1ab58dfda790a1782ffbb0c0a140ec51d4148dbeecc6c39e37b25ff4b124__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":3616,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":3564,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x21":{"entryPoint":3649,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:10489:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:427:181","statements":[{"nodeType":"YulVariableDeclaration","src":"145:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"155:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"149:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"173:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"184:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"166:6:181"},"nodeType":"YulFunctionCall","src":"166:21:181"},"nodeType":"YulExpressionStatement","src":"166:21:181"},{"nodeType":"YulVariableDeclaration","src":"196:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"216:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:181"},"nodeType":"YulFunctionCall","src":"210:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"200:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"243:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"254:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"239:3:181"},"nodeType":"YulFunctionCall","src":"239:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"259:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:181"},"nodeType":"YulFunctionCall","src":"232:34:181"},"nodeType":"YulExpressionStatement","src":"232:34:181"},{"nodeType":"YulVariableDeclaration","src":"275:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"284:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"279:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"344:90:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"373:9:181"},{"name":"i","nodeType":"YulIdentifier","src":"384:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"369:3:181"},"nodeType":"YulFunctionCall","src":"369:17:181"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:181"},"nodeType":"YulFunctionCall","src":"365:26:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"407:6:181"},{"name":"i","nodeType":"YulIdentifier","src":"415:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"403:3:181"},"nodeType":"YulFunctionCall","src":"403:14:181"},{"name":"_1","nodeType":"YulIdentifier","src":"419:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:181"},"nodeType":"YulFunctionCall","src":"399:23:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"393:5:181"},"nodeType":"YulFunctionCall","src":"393:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:181"},"nodeType":"YulFunctionCall","src":"358:66:181"},"nodeType":"YulExpressionStatement","src":"358:66:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"305:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"308:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"302:2:181"},"nodeType":"YulFunctionCall","src":"302:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"316:19:181","statements":[{"nodeType":"YulAssignment","src":"318:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"327:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"330:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:181"},"nodeType":"YulFunctionCall","src":"323:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"318:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"298:3:181","statements":[]},"src":"294:140:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"458:9:181"},{"name":"length","nodeType":"YulIdentifier","src":"469:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"454:3:181"},"nodeType":"YulFunctionCall","src":"454:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"478:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"450:3:181"},"nodeType":"YulFunctionCall","src":"450:31:181"},{"kind":"number","nodeType":"YulLiteral","src":"483:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"443:6:181"},"nodeType":"YulFunctionCall","src":"443:42:181"},"nodeType":"YulExpressionStatement","src":"443:42:181"},{"nodeType":"YulAssignment","src":"494:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"510:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"529:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"537:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"525:3:181"},"nodeType":"YulFunctionCall","src":"525:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"546:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"542:3:181"},"nodeType":"YulFunctionCall","src":"542:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"521:3:181"},"nodeType":"YulFunctionCall","src":"521:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"506:3:181"},"nodeType":"YulFunctionCall","src":"506:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"553:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"502:3:181"},"nodeType":"YulFunctionCall","src":"502:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"494:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"115:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"126:4:181","type":""}],"src":"14:548:181"},{"body":{"nodeType":"YulBlock","src":"616:124:181","statements":[{"nodeType":"YulAssignment","src":"626:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"648:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"635:12:181"},"nodeType":"YulFunctionCall","src":"635:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"626:5:181"}]},{"body":{"nodeType":"YulBlock","src":"718:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"727:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"730:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"720:6:181"},"nodeType":"YulFunctionCall","src":"720:12:181"},"nodeType":"YulExpressionStatement","src":"720:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"677:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"688:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"703:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"708:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"699:3:181"},"nodeType":"YulFunctionCall","src":"699:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"712:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"695:3:181"},"nodeType":"YulFunctionCall","src":"695:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"684:3:181"},"nodeType":"YulFunctionCall","src":"684:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"674:2:181"},"nodeType":"YulFunctionCall","src":"674:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"667:6:181"},"nodeType":"YulFunctionCall","src":"667:50:181"},"nodeType":"YulIf","src":"664:70:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"595:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"606:5:181","type":""}],"src":"567:173:181"},{"body":{"nodeType":"YulBlock","src":"832:167:181","statements":[{"body":{"nodeType":"YulBlock","src":"878:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"887:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"890:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"880:6:181"},"nodeType":"YulFunctionCall","src":"880:12:181"},"nodeType":"YulExpressionStatement","src":"880:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"853:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"862:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"849:3:181"},"nodeType":"YulFunctionCall","src":"849:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"874:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"845:3:181"},"nodeType":"YulFunctionCall","src":"845:32:181"},"nodeType":"YulIf","src":"842:52:181"},{"nodeType":"YulAssignment","src":"903:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"932:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"913:18:181"},"nodeType":"YulFunctionCall","src":"913:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"903:6:181"}]},{"nodeType":"YulAssignment","src":"951:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"978:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"989:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"974:3:181"},"nodeType":"YulFunctionCall","src":"974:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"961:12:181"},"nodeType":"YulFunctionCall","src":"961:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"951:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"790:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"801:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"813:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"821:6:181","type":""}],"src":"745:254:181"},{"body":{"nodeType":"YulBlock","src":"1099:92:181","statements":[{"nodeType":"YulAssignment","src":"1109:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1121:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1132:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1117:3:181"},"nodeType":"YulFunctionCall","src":"1117:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1109:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1151:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1176:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1169:6:181"},"nodeType":"YulFunctionCall","src":"1169:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1162:6:181"},"nodeType":"YulFunctionCall","src":"1162:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1144:6:181"},"nodeType":"YulFunctionCall","src":"1144:41:181"},"nodeType":"YulExpressionStatement","src":"1144:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1068:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1079:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1090:4:181","type":""}],"src":"1004:187:181"},{"body":{"nodeType":"YulBlock","src":"1297:76:181","statements":[{"nodeType":"YulAssignment","src":"1307:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1319:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1330:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1315:3:181"},"nodeType":"YulFunctionCall","src":"1315:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1307:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1349:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"1360:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1342:6:181"},"nodeType":"YulFunctionCall","src":"1342:25:181"},"nodeType":"YulExpressionStatement","src":"1342:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1266:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1277:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1288:4:181","type":""}],"src":"1196:177:181"},{"body":{"nodeType":"YulBlock","src":"1482:224:181","statements":[{"body":{"nodeType":"YulBlock","src":"1528:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1537:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1540:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1530:6:181"},"nodeType":"YulFunctionCall","src":"1530:12:181"},"nodeType":"YulExpressionStatement","src":"1530:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1503:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1512:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1499:3:181"},"nodeType":"YulFunctionCall","src":"1499:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1524:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1495:3:181"},"nodeType":"YulFunctionCall","src":"1495:32:181"},"nodeType":"YulIf","src":"1492:52:181"},{"nodeType":"YulAssignment","src":"1553:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1582:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1563:18:181"},"nodeType":"YulFunctionCall","src":"1563:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1553:6:181"}]},{"nodeType":"YulAssignment","src":"1601:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1634:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1645:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1630:3:181"},"nodeType":"YulFunctionCall","src":"1630:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1611:18:181"},"nodeType":"YulFunctionCall","src":"1611:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1601:6:181"}]},{"nodeType":"YulAssignment","src":"1658:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1685:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1696:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1681:3:181"},"nodeType":"YulFunctionCall","src":"1681:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1668:12:181"},"nodeType":"YulFunctionCall","src":"1668:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1658:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1432:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1443:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1455:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1463:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1471:6:181","type":""}],"src":"1378:328:181"},{"body":{"nodeType":"YulBlock","src":"1808:87:181","statements":[{"nodeType":"YulAssignment","src":"1818:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1830:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1841:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1826:3:181"},"nodeType":"YulFunctionCall","src":"1826:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1818:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1860:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1875:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1883:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1871:3:181"},"nodeType":"YulFunctionCall","src":"1871:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1853:6:181"},"nodeType":"YulFunctionCall","src":"1853:36:181"},"nodeType":"YulExpressionStatement","src":"1853:36:181"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1777:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1788:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1799:4:181","type":""}],"src":"1711:184:181"},{"body":{"nodeType":"YulBlock","src":"2001:76:181","statements":[{"nodeType":"YulAssignment","src":"2011:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2023:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2034:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2019:3:181"},"nodeType":"YulFunctionCall","src":"2019:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2011:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2053:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"2064:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2046:6:181"},"nodeType":"YulFunctionCall","src":"2046:25:181"},"nodeType":"YulExpressionStatement","src":"2046:25:181"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1970:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1981:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1992:4:181","type":""}],"src":"1900:177:181"},{"body":{"nodeType":"YulBlock","src":"2152:116:181","statements":[{"body":{"nodeType":"YulBlock","src":"2198:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2207:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2210:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2200:6:181"},"nodeType":"YulFunctionCall","src":"2200:12:181"},"nodeType":"YulExpressionStatement","src":"2200:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2173:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2182:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2169:3:181"},"nodeType":"YulFunctionCall","src":"2169:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2194:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2165:3:181"},"nodeType":"YulFunctionCall","src":"2165:32:181"},"nodeType":"YulIf","src":"2162:52:181"},{"nodeType":"YulAssignment","src":"2223:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2252:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2233:18:181"},"nodeType":"YulFunctionCall","src":"2233:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2223:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2118:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2129:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2141:6:181","type":""}],"src":"2082:186:181"},{"body":{"nodeType":"YulBlock","src":"2443:523:181","statements":[{"body":{"nodeType":"YulBlock","src":"2490:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2499:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2502:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2492:6:181"},"nodeType":"YulFunctionCall","src":"2492:12:181"},"nodeType":"YulExpressionStatement","src":"2492:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2464:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2473:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2460:3:181"},"nodeType":"YulFunctionCall","src":"2460:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2485:3:181","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2456:3:181"},"nodeType":"YulFunctionCall","src":"2456:33:181"},"nodeType":"YulIf","src":"2453:53:181"},{"nodeType":"YulAssignment","src":"2515:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2544:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2525:18:181"},"nodeType":"YulFunctionCall","src":"2525:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2515:6:181"}]},{"nodeType":"YulAssignment","src":"2563:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2596:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2607:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2592:3:181"},"nodeType":"YulFunctionCall","src":"2592:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2573:18:181"},"nodeType":"YulFunctionCall","src":"2573:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2563:6:181"}]},{"nodeType":"YulAssignment","src":"2620:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2647:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2658:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2643:3:181"},"nodeType":"YulFunctionCall","src":"2643:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2630:12:181"},"nodeType":"YulFunctionCall","src":"2630:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2620:6:181"}]},{"nodeType":"YulAssignment","src":"2671:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2698:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2709:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2694:3:181"},"nodeType":"YulFunctionCall","src":"2694:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2681:12:181"},"nodeType":"YulFunctionCall","src":"2681:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2671:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2722:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2752:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2763:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2748:3:181"},"nodeType":"YulFunctionCall","src":"2748:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2735:12:181"},"nodeType":"YulFunctionCall","src":"2735:33:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2726:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2816:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2825:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2828:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2818:6:181"},"nodeType":"YulFunctionCall","src":"2818:12:181"},"nodeType":"YulExpressionStatement","src":"2818:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2790:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2801:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"2808:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2797:3:181"},"nodeType":"YulFunctionCall","src":"2797:16:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2787:2:181"},"nodeType":"YulFunctionCall","src":"2787:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2780:6:181"},"nodeType":"YulFunctionCall","src":"2780:35:181"},"nodeType":"YulIf","src":"2777:55:181"},{"nodeType":"YulAssignment","src":"2841:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"2851:5:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2841:6:181"}]},{"nodeType":"YulAssignment","src":"2865:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2892:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2903:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2888:3:181"},"nodeType":"YulFunctionCall","src":"2888:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2875:12:181"},"nodeType":"YulFunctionCall","src":"2875:33:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2865:6:181"}]},{"nodeType":"YulAssignment","src":"2917:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2944:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2955:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2940:3:181"},"nodeType":"YulFunctionCall","src":"2940:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2927:12:181"},"nodeType":"YulFunctionCall","src":"2927:33:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"2917:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2361:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2372:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2384:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2392:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2400:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2408:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2416:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"2424:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"2432:6:181","type":""}],"src":"2273:693:181"},{"body":{"nodeType":"YulBlock","src":"3058:173:181","statements":[{"body":{"nodeType":"YulBlock","src":"3104:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3113:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3116:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3106:6:181"},"nodeType":"YulFunctionCall","src":"3106:12:181"},"nodeType":"YulExpressionStatement","src":"3106:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3079:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3088:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3075:3:181"},"nodeType":"YulFunctionCall","src":"3075:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3100:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3071:3:181"},"nodeType":"YulFunctionCall","src":"3071:32:181"},"nodeType":"YulIf","src":"3068:52:181"},{"nodeType":"YulAssignment","src":"3129:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3158:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3139:18:181"},"nodeType":"YulFunctionCall","src":"3139:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3129:6:181"}]},{"nodeType":"YulAssignment","src":"3177:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3210:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3221:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3206:3:181"},"nodeType":"YulFunctionCall","src":"3206:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3187:18:181"},"nodeType":"YulFunctionCall","src":"3187:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3177:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3016:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3027:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3039:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3047:6:181","type":""}],"src":"2971:260:181"},{"body":{"nodeType":"YulBlock","src":"3291:325:181","statements":[{"nodeType":"YulAssignment","src":"3301:22:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3315:1:181","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"3318:4:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3311:3:181"},"nodeType":"YulFunctionCall","src":"3311:12:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3301:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3332:38:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"3362:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"3368:1:181","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3358:3:181"},"nodeType":"YulFunctionCall","src":"3358:12:181"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"3336:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3409:31:181","statements":[{"nodeType":"YulAssignment","src":"3411:27:181","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3425:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3433:4:181","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3421:3:181"},"nodeType":"YulFunctionCall","src":"3421:17:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3411:6:181"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3389:18:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3382:6:181"},"nodeType":"YulFunctionCall","src":"3382:26:181"},"nodeType":"YulIf","src":"3379:61:181"},{"body":{"nodeType":"YulBlock","src":"3499:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3520:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3527:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"3532:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3523:3:181"},"nodeType":"YulFunctionCall","src":"3523:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3513:6:181"},"nodeType":"YulFunctionCall","src":"3513:31:181"},"nodeType":"YulExpressionStatement","src":"3513:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3564:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3567:4:181","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3557:6:181"},"nodeType":"YulFunctionCall","src":"3557:15:181"},"nodeType":"YulExpressionStatement","src":"3557:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3592:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3595:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3585:6:181"},"nodeType":"YulFunctionCall","src":"3585:15:181"},"nodeType":"YulExpressionStatement","src":"3585:15:181"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3455:18:181"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3478:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3486:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3475:2:181"},"nodeType":"YulFunctionCall","src":"3475:14:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3452:2:181"},"nodeType":"YulFunctionCall","src":"3452:38:181"},"nodeType":"YulIf","src":"3449:161:181"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"3271:4:181","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"3280:6:181","type":""}],"src":"3236:380:181"},{"body":{"nodeType":"YulBlock","src":"3669:174:181","statements":[{"nodeType":"YulAssignment","src":"3679:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3690:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"3693:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3686:3:181"},"nodeType":"YulFunctionCall","src":"3686:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"3679:3:181"}]},{"body":{"nodeType":"YulBlock","src":"3726:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3747:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3754:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"3759:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3750:3:181"},"nodeType":"YulFunctionCall","src":"3750:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3740:6:181"},"nodeType":"YulFunctionCall","src":"3740:31:181"},"nodeType":"YulExpressionStatement","src":"3740:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3791:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3794:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3784:6:181"},"nodeType":"YulFunctionCall","src":"3784:15:181"},"nodeType":"YulExpressionStatement","src":"3784:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3819:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3822:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3812:6:181"},"nodeType":"YulFunctionCall","src":"3812:15:181"},"nodeType":"YulExpressionStatement","src":"3812:15:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3710:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"3713:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3707:2:181"},"nodeType":"YulFunctionCall","src":"3707:10:181"},"nodeType":"YulIf","src":"3704:133:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3652:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"3655:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"3661:3:181","type":""}],"src":"3621:222:181"},{"body":{"nodeType":"YulBlock","src":"4022:227:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4039:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4050:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4032:6:181"},"nodeType":"YulFunctionCall","src":"4032:21:181"},"nodeType":"YulExpressionStatement","src":"4032:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4073:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4084:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4069:3:181"},"nodeType":"YulFunctionCall","src":"4069:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4089:2:181","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4062:6:181"},"nodeType":"YulFunctionCall","src":"4062:30:181"},"nodeType":"YulExpressionStatement","src":"4062:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4112:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4123:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4108:3:181"},"nodeType":"YulFunctionCall","src":"4108:18:181"},{"hexValue":"45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77","kind":"string","nodeType":"YulLiteral","src":"4128:34:181","type":"","value":"ERC20: decreased allowance below"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4101:6:181"},"nodeType":"YulFunctionCall","src":"4101:62:181"},"nodeType":"YulExpressionStatement","src":"4101:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4183:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4194:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4179:3:181"},"nodeType":"YulFunctionCall","src":"4179:18:181"},{"hexValue":"207a65726f","kind":"string","nodeType":"YulLiteral","src":"4199:7:181","type":"","value":" zero"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4172:6:181"},"nodeType":"YulFunctionCall","src":"4172:35:181"},"nodeType":"YulExpressionStatement","src":"4172:35:181"},{"nodeType":"YulAssignment","src":"4216:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4228:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4239:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4224:3:181"},"nodeType":"YulFunctionCall","src":"4224:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4216:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3999:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4013:4:181","type":""}],"src":"3848:401:181"},{"body":{"nodeType":"YulBlock","src":"4428:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4445:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4456:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4438:6:181"},"nodeType":"YulFunctionCall","src":"4438:21:181"},"nodeType":"YulExpressionStatement","src":"4438:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4479:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4490:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4475:3:181"},"nodeType":"YulFunctionCall","src":"4475:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4495:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4468:6:181"},"nodeType":"YulFunctionCall","src":"4468:30:181"},"nodeType":"YulExpressionStatement","src":"4468:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4518:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4529:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4514:3:181"},"nodeType":"YulFunctionCall","src":"4514:18:181"},{"hexValue":"45524332305065726d69743a206578706972656420646561646c696e65","kind":"string","nodeType":"YulLiteral","src":"4534:31:181","type":"","value":"ERC20Permit: expired deadline"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4507:6:181"},"nodeType":"YulFunctionCall","src":"4507:59:181"},"nodeType":"YulExpressionStatement","src":"4507:59:181"},{"nodeType":"YulAssignment","src":"4575:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4587:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4598:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4583:3:181"},"nodeType":"YulFunctionCall","src":"4583:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4575:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_3e89525a63fb9c966b61cf8f5305156de8420bc773a2b60828a2f32c3c5797bd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4405:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4419:4:181","type":""}],"src":"4254:353:181"},{"body":{"nodeType":"YulBlock","src":"4853:350:181","statements":[{"nodeType":"YulAssignment","src":"4863:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4875:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4886:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4871:3:181"},"nodeType":"YulFunctionCall","src":"4871:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4863:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4906:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"4917:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4899:6:181"},"nodeType":"YulFunctionCall","src":"4899:25:181"},"nodeType":"YulExpressionStatement","src":"4899:25:181"},{"nodeType":"YulVariableDeclaration","src":"4933:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4951:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4956:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4947:3:181"},"nodeType":"YulFunctionCall","src":"4947:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4960:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4943:3:181"},"nodeType":"YulFunctionCall","src":"4943:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4937:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4982:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4993:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4978:3:181"},"nodeType":"YulFunctionCall","src":"4978:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"5002:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5010:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4998:3:181"},"nodeType":"YulFunctionCall","src":"4998:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4971:6:181"},"nodeType":"YulFunctionCall","src":"4971:43:181"},"nodeType":"YulExpressionStatement","src":"4971:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5034:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5045:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5030:3:181"},"nodeType":"YulFunctionCall","src":"5030:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"5054:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5062:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5050:3:181"},"nodeType":"YulFunctionCall","src":"5050:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5023:6:181"},"nodeType":"YulFunctionCall","src":"5023:43:181"},"nodeType":"YulExpressionStatement","src":"5023:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5086:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5097:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5082:3:181"},"nodeType":"YulFunctionCall","src":"5082:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"5102:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5075:6:181"},"nodeType":"YulFunctionCall","src":"5075:34:181"},"nodeType":"YulExpressionStatement","src":"5075:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5129:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5140:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5125:3:181"},"nodeType":"YulFunctionCall","src":"5125:19:181"},{"name":"value4","nodeType":"YulIdentifier","src":"5146:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5118:6:181"},"nodeType":"YulFunctionCall","src":"5118:35:181"},"nodeType":"YulExpressionStatement","src":"5118:35:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5173:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5184:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5169:3:181"},"nodeType":"YulFunctionCall","src":"5169:19:181"},{"name":"value5","nodeType":"YulIdentifier","src":"5190:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5162:6:181"},"nodeType":"YulFunctionCall","src":"5162:35:181"},"nodeType":"YulExpressionStatement","src":"5162:35:181"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4782:9:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"4793:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"4801:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4809:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4817:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4825:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4833:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4844:4:181","type":""}],"src":"4612:591:181"},{"body":{"nodeType":"YulBlock","src":"5382:180:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5399:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5410:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5392:6:181"},"nodeType":"YulFunctionCall","src":"5392:21:181"},"nodeType":"YulExpressionStatement","src":"5392:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5433:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5444:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5429:3:181"},"nodeType":"YulFunctionCall","src":"5429:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5449:2:181","type":"","value":"30"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5422:6:181"},"nodeType":"YulFunctionCall","src":"5422:30:181"},"nodeType":"YulExpressionStatement","src":"5422:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5472:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5483:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5468:3:181"},"nodeType":"YulFunctionCall","src":"5468:18:181"},{"hexValue":"45524332305065726d69743a20696e76616c6964207369676e6174757265","kind":"string","nodeType":"YulLiteral","src":"5488:32:181","type":"","value":"ERC20Permit: invalid signature"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5461:6:181"},"nodeType":"YulFunctionCall","src":"5461:60:181"},"nodeType":"YulExpressionStatement","src":"5461:60:181"},{"nodeType":"YulAssignment","src":"5530:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5542:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5553:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5538:3:181"},"nodeType":"YulFunctionCall","src":"5538:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5530:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_94ca1ab58dfda790a1782ffbb0c0a140ec51d4148dbeecc6c39e37b25ff4b124__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5359:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5373:4:181","type":""}],"src":"5208:354:181"},{"body":{"nodeType":"YulBlock","src":"5741:226:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5758:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5769:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5751:6:181"},"nodeType":"YulFunctionCall","src":"5751:21:181"},"nodeType":"YulExpressionStatement","src":"5751:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5792:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5803:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5788:3:181"},"nodeType":"YulFunctionCall","src":"5788:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5808:2:181","type":"","value":"36"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5781:6:181"},"nodeType":"YulFunctionCall","src":"5781:30:181"},"nodeType":"YulExpressionStatement","src":"5781:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5831:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5842:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5827:3:181"},"nodeType":"YulFunctionCall","src":"5827:18:181"},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f20616464","kind":"string","nodeType":"YulLiteral","src":"5847:34:181","type":"","value":"ERC20: approve from the zero add"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5820:6:181"},"nodeType":"YulFunctionCall","src":"5820:62:181"},"nodeType":"YulExpressionStatement","src":"5820:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5902:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5913:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5898:3:181"},"nodeType":"YulFunctionCall","src":"5898:18:181"},{"hexValue":"72657373","kind":"string","nodeType":"YulLiteral","src":"5918:6:181","type":"","value":"ress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5891:6:181"},"nodeType":"YulFunctionCall","src":"5891:34:181"},"nodeType":"YulExpressionStatement","src":"5891:34:181"},{"nodeType":"YulAssignment","src":"5934:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5946:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5957:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5942:3:181"},"nodeType":"YulFunctionCall","src":"5942:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5934:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5718:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5732:4:181","type":""}],"src":"5567:400:181"},{"body":{"nodeType":"YulBlock","src":"6146:224:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6163:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6174:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6156:6:181"},"nodeType":"YulFunctionCall","src":"6156:21:181"},"nodeType":"YulExpressionStatement","src":"6156:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6197:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6208:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6193:3:181"},"nodeType":"YulFunctionCall","src":"6193:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6213:2:181","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6186:6:181"},"nodeType":"YulFunctionCall","src":"6186:30:181"},"nodeType":"YulExpressionStatement","src":"6186:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6236:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6247:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6232:3:181"},"nodeType":"YulFunctionCall","src":"6232:18:181"},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f206164647265","kind":"string","nodeType":"YulLiteral","src":"6252:34:181","type":"","value":"ERC20: approve to the zero addre"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6225:6:181"},"nodeType":"YulFunctionCall","src":"6225:62:181"},"nodeType":"YulExpressionStatement","src":"6225:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6307:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6318:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6303:3:181"},"nodeType":"YulFunctionCall","src":"6303:18:181"},{"hexValue":"7373","kind":"string","nodeType":"YulLiteral","src":"6323:4:181","type":"","value":"ss"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6296:6:181"},"nodeType":"YulFunctionCall","src":"6296:32:181"},"nodeType":"YulExpressionStatement","src":"6296:32:181"},{"nodeType":"YulAssignment","src":"6337:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6349:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6360:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6345:3:181"},"nodeType":"YulFunctionCall","src":"6345:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6337:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6123:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6137:4:181","type":""}],"src":"5972:398:181"},{"body":{"nodeType":"YulBlock","src":"6549:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6566:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6577:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6559:6:181"},"nodeType":"YulFunctionCall","src":"6559:21:181"},"nodeType":"YulExpressionStatement","src":"6559:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6600:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6611:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6596:3:181"},"nodeType":"YulFunctionCall","src":"6596:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6616:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6589:6:181"},"nodeType":"YulFunctionCall","src":"6589:30:181"},"nodeType":"YulExpressionStatement","src":"6589:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6639:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6650:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6635:3:181"},"nodeType":"YulFunctionCall","src":"6635:18:181"},{"hexValue":"45524332303a20696e73756666696369656e7420616c6c6f77616e6365","kind":"string","nodeType":"YulLiteral","src":"6655:31:181","type":"","value":"ERC20: insufficient allowance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6628:6:181"},"nodeType":"YulFunctionCall","src":"6628:59:181"},"nodeType":"YulExpressionStatement","src":"6628:59:181"},{"nodeType":"YulAssignment","src":"6696:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6708:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6719:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6704:3:181"},"nodeType":"YulFunctionCall","src":"6704:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6696:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6526:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6540:4:181","type":""}],"src":"6375:353:181"},{"body":{"nodeType":"YulBlock","src":"6907:227:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6924:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6935:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6917:6:181"},"nodeType":"YulFunctionCall","src":"6917:21:181"},"nodeType":"YulExpressionStatement","src":"6917:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6958:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6969:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6954:3:181"},"nodeType":"YulFunctionCall","src":"6954:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6974:2:181","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6947:6:181"},"nodeType":"YulFunctionCall","src":"6947:30:181"},"nodeType":"YulExpressionStatement","src":"6947:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6997:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7008:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6993:3:181"},"nodeType":"YulFunctionCall","src":"6993:18:181"},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f206164","kind":"string","nodeType":"YulLiteral","src":"7013:34:181","type":"","value":"ERC20: transfer from the zero ad"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6986:6:181"},"nodeType":"YulFunctionCall","src":"6986:62:181"},"nodeType":"YulExpressionStatement","src":"6986:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7068:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7079:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7064:3:181"},"nodeType":"YulFunctionCall","src":"7064:18:181"},{"hexValue":"6472657373","kind":"string","nodeType":"YulLiteral","src":"7084:7:181","type":"","value":"dress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7057:6:181"},"nodeType":"YulFunctionCall","src":"7057:35:181"},"nodeType":"YulExpressionStatement","src":"7057:35:181"},{"nodeType":"YulAssignment","src":"7101:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7113:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7124:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7109:3:181"},"nodeType":"YulFunctionCall","src":"7109:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7101:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6884:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6898:4:181","type":""}],"src":"6733:401:181"},{"body":{"nodeType":"YulBlock","src":"7313:225:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7330:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7341:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7323:6:181"},"nodeType":"YulFunctionCall","src":"7323:21:181"},"nodeType":"YulExpressionStatement","src":"7323:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7364:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7375:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7360:3:181"},"nodeType":"YulFunctionCall","src":"7360:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7380:2:181","type":"","value":"35"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7353:6:181"},"nodeType":"YulFunctionCall","src":"7353:30:181"},"nodeType":"YulExpressionStatement","src":"7353:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7403:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7414:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7399:3:181"},"nodeType":"YulFunctionCall","src":"7399:18:181"},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472","kind":"string","nodeType":"YulLiteral","src":"7419:34:181","type":"","value":"ERC20: transfer to the zero addr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7392:6:181"},"nodeType":"YulFunctionCall","src":"7392:62:181"},"nodeType":"YulExpressionStatement","src":"7392:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7474:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7485:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7470:3:181"},"nodeType":"YulFunctionCall","src":"7470:18:181"},{"hexValue":"657373","kind":"string","nodeType":"YulLiteral","src":"7490:5:181","type":"","value":"ess"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7463:6:181"},"nodeType":"YulFunctionCall","src":"7463:33:181"},"nodeType":"YulExpressionStatement","src":"7463:33:181"},{"nodeType":"YulAssignment","src":"7505:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7517:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7528:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7513:3:181"},"nodeType":"YulFunctionCall","src":"7513:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7505:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7290:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7304:4:181","type":""}],"src":"7139:399:181"},{"body":{"nodeType":"YulBlock","src":"7717:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7734:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7745:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7727:6:181"},"nodeType":"YulFunctionCall","src":"7727:21:181"},"nodeType":"YulExpressionStatement","src":"7727:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7768:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7779:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7764:3:181"},"nodeType":"YulFunctionCall","src":"7764:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7784:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7757:6:181"},"nodeType":"YulFunctionCall","src":"7757:30:181"},"nodeType":"YulExpressionStatement","src":"7757:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7807:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7818:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7803:3:181"},"nodeType":"YulFunctionCall","src":"7803:18:181"},{"hexValue":"45524332303a207472616e7366657220616d6f756e7420657863656564732062","kind":"string","nodeType":"YulLiteral","src":"7823:34:181","type":"","value":"ERC20: transfer amount exceeds b"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7796:6:181"},"nodeType":"YulFunctionCall","src":"7796:62:181"},"nodeType":"YulExpressionStatement","src":"7796:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7878:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7889:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7874:3:181"},"nodeType":"YulFunctionCall","src":"7874:18:181"},{"hexValue":"616c616e6365","kind":"string","nodeType":"YulLiteral","src":"7894:8:181","type":"","value":"alance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7867:6:181"},"nodeType":"YulFunctionCall","src":"7867:36:181"},"nodeType":"YulExpressionStatement","src":"7867:36:181"},{"nodeType":"YulAssignment","src":"7912:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7924:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7935:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7920:3:181"},"nodeType":"YulFunctionCall","src":"7920:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7912:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7694:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7708:4:181","type":""}],"src":"7543:402:181"},{"body":{"nodeType":"YulBlock","src":"8163:276:181","statements":[{"nodeType":"YulAssignment","src":"8173:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8185:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8196:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8181:3:181"},"nodeType":"YulFunctionCall","src":"8181:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8173:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8216:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"8227:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8209:6:181"},"nodeType":"YulFunctionCall","src":"8209:25:181"},"nodeType":"YulExpressionStatement","src":"8209:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8254:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8265:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8250:3:181"},"nodeType":"YulFunctionCall","src":"8250:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"8270:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8243:6:181"},"nodeType":"YulFunctionCall","src":"8243:34:181"},"nodeType":"YulExpressionStatement","src":"8243:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8297:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8308:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8293:3:181"},"nodeType":"YulFunctionCall","src":"8293:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"8313:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8286:6:181"},"nodeType":"YulFunctionCall","src":"8286:34:181"},"nodeType":"YulExpressionStatement","src":"8286:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8340:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8351:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8336:3:181"},"nodeType":"YulFunctionCall","src":"8336:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"8356:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8329:6:181"},"nodeType":"YulFunctionCall","src":"8329:34:181"},"nodeType":"YulExpressionStatement","src":"8329:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8383:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8394:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8379:3:181"},"nodeType":"YulFunctionCall","src":"8379:19:181"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"8404:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8420:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"8425:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8416:3:181"},"nodeType":"YulFunctionCall","src":"8416:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"8429:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8412:3:181"},"nodeType":"YulFunctionCall","src":"8412:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8400:3:181"},"nodeType":"YulFunctionCall","src":"8400:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8372:6:181"},"nodeType":"YulFunctionCall","src":"8372:61:181"},"nodeType":"YulExpressionStatement","src":"8372:61:181"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8100:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"8111:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"8119:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8127:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8135:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8143:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8154:4:181","type":""}],"src":"7950:489:181"},{"body":{"nodeType":"YulBlock","src":"8692:144:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8709:3:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8718:3:181","type":"","value":"240"},{"kind":"number","nodeType":"YulLiteral","src":"8723:4:181","type":"","value":"6401"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8714:3:181"},"nodeType":"YulFunctionCall","src":"8714:14:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8702:6:181"},"nodeType":"YulFunctionCall","src":"8702:27:181"},"nodeType":"YulExpressionStatement","src":"8702:27:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8749:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"8754:1:181","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8745:3:181"},"nodeType":"YulFunctionCall","src":"8745:11:181"},{"name":"value0","nodeType":"YulIdentifier","src":"8758:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8738:6:181"},"nodeType":"YulFunctionCall","src":"8738:27:181"},"nodeType":"YulExpressionStatement","src":"8738:27:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8785:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"8790:2:181","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8781:3:181"},"nodeType":"YulFunctionCall","src":"8781:12:181"},{"name":"value1","nodeType":"YulIdentifier","src":"8795:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8774:6:181"},"nodeType":"YulFunctionCall","src":"8774:28:181"},"nodeType":"YulExpressionStatement","src":"8774:28:181"},{"nodeType":"YulAssignment","src":"8811:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8822:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"8827:2:181","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8818:3:181"},"nodeType":"YulFunctionCall","src":"8818:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"8811:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"8660:3:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8665:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8673:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"8684:3:181","type":""}],"src":"8444:392:181"},{"body":{"nodeType":"YulBlock","src":"9022:217:181","statements":[{"nodeType":"YulAssignment","src":"9032:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9044:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9055:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9040:3:181"},"nodeType":"YulFunctionCall","src":"9040:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9032:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9075:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"9086:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9068:6:181"},"nodeType":"YulFunctionCall","src":"9068:25:181"},"nodeType":"YulExpressionStatement","src":"9068:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9113:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9124:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9109:3:181"},"nodeType":"YulFunctionCall","src":"9109:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9133:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"9141:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9129:3:181"},"nodeType":"YulFunctionCall","src":"9129:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9102:6:181"},"nodeType":"YulFunctionCall","src":"9102:45:181"},"nodeType":"YulExpressionStatement","src":"9102:45:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9167:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9178:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9163:3:181"},"nodeType":"YulFunctionCall","src":"9163:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"9183:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9156:6:181"},"nodeType":"YulFunctionCall","src":"9156:34:181"},"nodeType":"YulExpressionStatement","src":"9156:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9210:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9221:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9206:3:181"},"nodeType":"YulFunctionCall","src":"9206:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"9226:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9199:6:181"},"nodeType":"YulFunctionCall","src":"9199:34:181"},"nodeType":"YulExpressionStatement","src":"9199:34:181"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8967:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"8978:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8986:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8994:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9002:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9013:4:181","type":""}],"src":"8841:398:181"},{"body":{"nodeType":"YulBlock","src":"9276:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9293:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9300:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"9305:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9296:3:181"},"nodeType":"YulFunctionCall","src":"9296:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9286:6:181"},"nodeType":"YulFunctionCall","src":"9286:31:181"},"nodeType":"YulExpressionStatement","src":"9286:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9333:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"9336:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9326:6:181"},"nodeType":"YulFunctionCall","src":"9326:15:181"},"nodeType":"YulExpressionStatement","src":"9326:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9357:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9360:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9350:6:181"},"nodeType":"YulFunctionCall","src":"9350:15:181"},"nodeType":"YulExpressionStatement","src":"9350:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"9244:127:181"},{"body":{"nodeType":"YulBlock","src":"9550:174:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9567:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9578:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9560:6:181"},"nodeType":"YulFunctionCall","src":"9560:21:181"},"nodeType":"YulExpressionStatement","src":"9560:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9601:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9612:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9597:3:181"},"nodeType":"YulFunctionCall","src":"9597:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9617:2:181","type":"","value":"24"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9590:6:181"},"nodeType":"YulFunctionCall","src":"9590:30:181"},"nodeType":"YulExpressionStatement","src":"9590:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9640:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9651:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9636:3:181"},"nodeType":"YulFunctionCall","src":"9636:18:181"},{"hexValue":"45434453413a20696e76616c6964207369676e6174757265","kind":"string","nodeType":"YulLiteral","src":"9656:26:181","type":"","value":"ECDSA: invalid signature"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9629:6:181"},"nodeType":"YulFunctionCall","src":"9629:54:181"},"nodeType":"YulExpressionStatement","src":"9629:54:181"},{"nodeType":"YulAssignment","src":"9692:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9704:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9715:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9700:3:181"},"nodeType":"YulFunctionCall","src":"9700:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9692:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9527:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9541:4:181","type":""}],"src":"9376:348:181"},{"body":{"nodeType":"YulBlock","src":"9903:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9920:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9931:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9913:6:181"},"nodeType":"YulFunctionCall","src":"9913:21:181"},"nodeType":"YulExpressionStatement","src":"9913:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9954:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9965:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9950:3:181"},"nodeType":"YulFunctionCall","src":"9950:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9970:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9943:6:181"},"nodeType":"YulFunctionCall","src":"9943:30:181"},"nodeType":"YulExpressionStatement","src":"9943:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9993:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10004:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9989:3:181"},"nodeType":"YulFunctionCall","src":"9989:18:181"},{"hexValue":"45434453413a20696e76616c6964207369676e6174757265206c656e677468","kind":"string","nodeType":"YulLiteral","src":"10009:33:181","type":"","value":"ECDSA: invalid signature length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9982:6:181"},"nodeType":"YulFunctionCall","src":"9982:61:181"},"nodeType":"YulExpressionStatement","src":"9982:61:181"},{"nodeType":"YulAssignment","src":"10052:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10064:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10075:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10060:3:181"},"nodeType":"YulFunctionCall","src":"10060:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10052:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9880:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9894:4:181","type":""}],"src":"9729:355:181"},{"body":{"nodeType":"YulBlock","src":"10263:224:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10280:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10291:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10273:6:181"},"nodeType":"YulFunctionCall","src":"10273:21:181"},"nodeType":"YulExpressionStatement","src":"10273:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10314:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10325:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10310:3:181"},"nodeType":"YulFunctionCall","src":"10310:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10330:2:181","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10303:6:181"},"nodeType":"YulFunctionCall","src":"10303:30:181"},"nodeType":"YulExpressionStatement","src":"10303:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10353:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10364:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10349:3:181"},"nodeType":"YulFunctionCall","src":"10349:18:181"},{"hexValue":"45434453413a20696e76616c6964207369676e6174757265202773272076616c","kind":"string","nodeType":"YulLiteral","src":"10369:34:181","type":"","value":"ECDSA: invalid signature 's' val"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10342:6:181"},"nodeType":"YulFunctionCall","src":"10342:62:181"},"nodeType":"YulExpressionStatement","src":"10342:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10424:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10435:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10420:3:181"},"nodeType":"YulFunctionCall","src":"10420:18:181"},{"hexValue":"7565","kind":"string","nodeType":"YulLiteral","src":"10440:4:181","type":"","value":"ue"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10413:6:181"},"nodeType":"YulFunctionCall","src":"10413:32:181"},"nodeType":"YulExpressionStatement","src":"10413:32:181"},{"nodeType":"YulAssignment","src":"10454:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10466:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10477:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10462:3:181"},"nodeType":"YulFunctionCall","src":"10462:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10454:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10240:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10254:4:181","type":""}],"src":"10089:398:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        mstore(add(add(headStart, length), 64), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let value := calldataload(add(headStart, 128))\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value4 := value\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: decreased allowance below\")\n        mstore(add(headStart, 96), \" zero\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_3e89525a63fb9c966b61cf8f5305156de8420bc773a2b60828a2f32c3c5797bd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"ERC20Permit: expired deadline\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_t_stringliteral_94ca1ab58dfda790a1782ffbb0c0a140ec51d4148dbeecc6c39e37b25ff4b124__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 30)\n        mstore(add(headStart, 64), \"ERC20Permit: invalid signature\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"ERC20: approve from the zero add\")\n        mstore(add(headStart, 96), \"ress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: approve to the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"ERC20: insufficient allowance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: transfer from the zero ad\")\n        mstore(add(headStart, 96), \"dress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"ERC20: transfer to the zero addr\")\n        mstore(add(headStart, 96), \"ess\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"ERC20: transfer amount exceeds b\")\n        mstore(add(headStart, 96), \"alance\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, shl(240, 6401))\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature 's' val\")\n        mstore(add(headStart, 96), \"ue\")\n        tail := add(headStart, 128)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"23235":[{"length":32,"start":2286}],"23237":[{"length":32,"start":2244}],"23241":[{"length":32,"start":2391}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063a457c2d711610066578063a457c2d7146101c9578063a9059cbb146101dc578063d505accf146101ef578063dd62ed3e1461020457600080fd5b806370a08231146101855780637ecebe00146101ae57806395d89b41146101c157600080fd5b806323b872dd116100c857806323b872dd14610142578063313ce567146101555780633644e5151461016a578063395093511461017257600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd14610130575b600080fd5b6100f7610217565b6040516101049190610c54565b60405180910390f35b61012061011b366004610cbe565b6102a9565b6040519015158152602001610104565b6002545b604051908152602001610104565b610120610150366004610ce8565b6102c0565b60055460405160ff9091168152602001610104565b6101346102e2565b610120610180366004610cbe565b6102f1565b610134610193366004610d24565b6001600160a01b031660009081526020819052604090205490565b6101346101bc366004610d24565b61032d565b6100f761034b565b6101206101d7366004610cbe565b61035a565b6101206101ea366004610cbe565b6103d9565b6102026101fd366004610d46565b6103e6565b005b610134610212366004610db9565b61054a565b60606003805461022690610dec565b80601f016020809104026020016040519081016040528092919081815260200182805461025290610dec565b801561029f5780601f106102745761010080835404028352916020019161029f565b820191906000526020600020905b81548152906001019060200180831161028257829003601f168201915b5050505050905090565b60006102b6338484610575565b5060015b92915050565b60006102cd843384610699565b6102d8848484610713565b5060019392505050565b60006102ec6108b7565b905090565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916102b6918590610328908690610e20565b610575565b6001600160a01b0381166000908152600660205260408120546102ba565b60606004805461022690610dec565b600080610367338561054a565b9050828110156103cc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102d83385858403610575565b60006102b6338484610713565b834211156104365760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016103c3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104658c6109a5565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006104c0826109cd565b905060006104d082878787610a1b565b9050896001600160a01b0316816001600160a01b0316146105335760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016103c3565b61053e8a8a8a610575565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166105d75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103c3565b6001600160a01b0382166106385760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103c3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006106a5848461054a565b9050600019811461070d57818110156107005760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103c3565b61070d8484848403610575565b50505050565b6001600160a01b0383166107775760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103c3565b6001600160a01b0382166107d95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103c3565b6001600160a01b038316600090815260208190526040902054818110156108515760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103c3565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361070d565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561091057507f000000000000000000000000000000000000000000000000000000000000000046145b1561091c575060075490565b50600854604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a0808301919091528251808303909101815260c0909101909152805191012090565b6001600160a01b03811660009081526006602052604090208054600181018255905b50919050565b60006102ba6109da6108b7565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610a2c87878787610a43565b91509150610a3981610b07565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610a7a5750600090506003610afe565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610ace573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610af757600060019250925050610afe565b9150600090505b94509492505050565b6000816004811115610b1b57610b1b610e41565b03610b235750565b6001816004811115610b3757610b37610e41565b03610b845760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103c3565b6002816004811115610b9857610b98610e41565b03610be55760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103c3565b6003816004811115610bf957610bf9610e41565b03610c515760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103c3565b50565b600060208083528351808285015260005b81811015610c8157858101830151858201604001528201610c65565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610cb957600080fd5b919050565b60008060408385031215610cd157600080fd5b610cda83610ca2565b946020939093013593505050565b600080600060608486031215610cfd57600080fd5b610d0684610ca2565b9250610d1460208501610ca2565b9150604084013590509250925092565b600060208284031215610d3657600080fd5b610d3f82610ca2565b9392505050565b600080600080600080600060e0888a031215610d6157600080fd5b610d6a88610ca2565b9650610d7860208901610ca2565b95506040880135945060608801359350608088013560ff81168114610d9c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610dcc57600080fd5b610dd583610ca2565b9150610de360208401610ca2565b90509250929050565b600181811c90821680610e0057607f821691505b6020821081036109c757634e487b7160e01b600052602260045260246000fd5b808201808211156102ba57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea2646970667358221220416d5a4e976ab8e7f6ba5cbb9e3f03ee9430c01a799d4978a9e1b8002624577264736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x1C9 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1DC JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x1EF JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x204 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x142 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x16A JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x172 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x130 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x217 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x104 SWAP2 SWAP1 PUSH2 0xC54 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x120 PUSH2 0x11B CALLDATASIZE PUSH1 0x4 PUSH2 0xCBE JUMP JUMPDEST PUSH2 0x2A9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x150 CALLDATASIZE PUSH1 0x4 PUSH2 0xCE8 JUMP JUMPDEST PUSH2 0x2C0 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH2 0x134 PUSH2 0x2E2 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x180 CALLDATASIZE PUSH1 0x4 PUSH2 0xCBE JUMP JUMPDEST PUSH2 0x2F1 JUMP JUMPDEST PUSH2 0x134 PUSH2 0x193 CALLDATASIZE PUSH1 0x4 PUSH2 0xD24 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x134 PUSH2 0x1BC CALLDATASIZE PUSH1 0x4 PUSH2 0xD24 JUMP JUMPDEST PUSH2 0x32D JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x34B JUMP JUMPDEST PUSH2 0x120 PUSH2 0x1D7 CALLDATASIZE PUSH1 0x4 PUSH2 0xCBE JUMP JUMPDEST PUSH2 0x35A JUMP JUMPDEST PUSH2 0x120 PUSH2 0x1EA CALLDATASIZE PUSH1 0x4 PUSH2 0xCBE JUMP JUMPDEST PUSH2 0x3D9 JUMP JUMPDEST PUSH2 0x202 PUSH2 0x1FD CALLDATASIZE PUSH1 0x4 PUSH2 0xD46 JUMP JUMPDEST PUSH2 0x3E6 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x134 PUSH2 0x212 CALLDATASIZE PUSH1 0x4 PUSH2 0xDB9 JUMP JUMPDEST PUSH2 0x54A JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x226 SWAP1 PUSH2 0xDEC JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x252 SWAP1 PUSH2 0xDEC JUMP JUMPDEST DUP1 ISZERO PUSH2 0x29F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x274 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x29F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x282 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2B6 CALLER DUP5 DUP5 PUSH2 0x575 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CD DUP5 CALLER DUP5 PUSH2 0x699 JUMP JUMPDEST PUSH2 0x2D8 DUP5 DUP5 DUP5 PUSH2 0x713 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EC PUSH2 0x8B7 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x2B6 SWAP2 DUP6 SWAP1 PUSH2 0x328 SWAP1 DUP7 SWAP1 PUSH2 0xE20 JUMP JUMPDEST PUSH2 0x575 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x2BA JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x226 SWAP1 PUSH2 0xDEC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x367 CALLER DUP6 PUSH2 0x54A JUMP JUMPDEST SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0x3CC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2D8 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x575 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2B6 CALLER DUP5 DUP5 PUSH2 0x713 JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x436 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x465 DUP13 PUSH2 0x9A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP1 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x4C0 DUP3 PUSH2 0x9CD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4D0 DUP3 DUP8 DUP8 DUP8 PUSH2 0xA1B JUMP JUMPDEST SWAP1 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x533 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH2 0x53E DUP11 DUP11 DUP11 PUSH2 0x575 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x5D7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x638 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6A5 DUP5 DUP5 PUSH2 0x54A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x70D JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x700 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH2 0x70D DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x575 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x777 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x7D9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x851 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP8 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE SWAP3 MLOAD DUP6 DUP2 MSTORE SWAP1 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x70D JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ DUP1 ISZERO PUSH2 0x910 JUMPI POP PUSH32 0x0 CHAINID EQ JUMPDEST ISZERO PUSH2 0x91C JUMPI POP PUSH1 0x7 SLOAD SWAP1 JUMP JUMPDEST POP PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP1 JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BA PUSH2 0x9DA PUSH2 0x8B7 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH2 0x1901 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x22 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x42 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x62 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xA2C DUP8 DUP8 DUP8 DUP8 PUSH2 0xA43 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xA39 DUP2 PUSH2 0xB07 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP4 GT ISZERO PUSH2 0xA7A JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x3 PUSH2 0xAFE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xACE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xAF7 JUMPI PUSH1 0x0 PUSH1 0x1 SWAP3 POP SWAP3 POP POP PUSH2 0xAFE JUMP JUMPDEST SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xB1B JUMPI PUSH2 0xB1B PUSH2 0xE41 JUMP JUMPDEST SUB PUSH2 0xB23 JUMPI POP JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xB37 JUMPI PUSH2 0xB37 PUSH2 0xE41 JUMP JUMPDEST SUB PUSH2 0xB84 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xB98 JUMPI PUSH2 0xB98 PUSH2 0xE41 JUMP JUMPDEST SUB PUSH2 0xBE5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xBF9 JUMPI PUSH2 0xBF9 PUSH2 0xE41 JUMP JUMPDEST SUB PUSH2 0xC51 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC81 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xC65 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xCB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xCD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCDA DUP4 PUSH2 0xCA2 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xCFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD06 DUP5 PUSH2 0xCA2 JUMP JUMPDEST SWAP3 POP PUSH2 0xD14 PUSH1 0x20 DUP6 ADD PUSH2 0xCA2 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD3F DUP3 PUSH2 0xCA2 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0xD61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6A DUP9 PUSH2 0xCA2 JUMP JUMPDEST SWAP7 POP PUSH2 0xD78 PUSH1 0x20 DUP10 ADD PUSH2 0xCA2 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xD9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xDCC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDD5 DUP4 PUSH2 0xCA2 JUMP JUMPDEST SWAP2 POP PUSH2 0xDE3 PUSH1 0x20 DUP5 ADD PUSH2 0xCA2 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xE00 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x9C7 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x2BA JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 COINBASE PUSH14 0x5A4E976AB8E7F6BA5CBB9E3F03EE SWAP5 ADDRESS 0xC0 BYTE PUSH26 0x9D4978A9E1B8002624577264736F6C6343000811003300000000 ","sourceMap":"2566:15890:86:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4849:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6956:154;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:181;;1162:22;1144:41;;1132:2;1117:18;6956:154:86;1004:187:181;5880:100:86;5963:12;;5880:100;;;1342:25:181;;;1330:2;1315:18;5880:100:86;1196:177:181;7552:249:86;;;;;;:::i;:::-;;:::i;5736:92::-;5814:9;;5736:92;;5814:9;;;;1853:36:181;;1841:2;1826:18;5736:92:86;1711:184:181;16523:107:86;;;:::i;8171:203::-;;;;;;:::i;:::-;;:::i;6030:119::-;;;;;;:::i;:::-;-1:-1:-1;;;;;6126:18:86;6104:7;6126:18;;;;;;;;;;;;6030:119;16247:122;;;;;;:::i;:::-;;:::i;5044:96::-;;;:::i;8834:377::-;;;;;;:::i;:::-;;:::i;6327:146::-;;;;;;:::i;:::-;;:::i;15586:608::-;;;;;;:::i;:::-;;:::i;:::-;;6523:147;;;;;;:::i;:::-;;:::i;4849:92::-;4903:13;4931:5;4924:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4849:92;:::o;6956:154::-;7039:4;7051:37;7060:10;7072:7;7081:6;7051:8;:37::i;:::-;-1:-1:-1;7101:4:86;6956:154;;;;;:::o;7552:249::-;7677:4;7689:45;7705:7;7714:10;7726:7;7689:15;:45::i;:::-;7740:39;7750:7;7759:10;7771:7;7740:9;:39::i;:::-;-1:-1:-1;7792:4:86;7552:249;;;;;:::o;16523:107::-;16583:7;16605:20;:18;:20::i;:::-;16598:27;;16523:107;:::o;8171:203::-;8282:10;8261:4;8304:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;8304:33:86;;;;;;;;;;8261:4;;8273:79;;8294:8;;8304:47;;8340:11;;8304:47;:::i;:::-;8273:8;:79::i;16247:122::-;-1:-1:-1;;;;;16339:15:86;;16317:7;16339:15;;;:7;:15;;;;;918:14:59;16339:25:86;827:112:59;5044:96:86;5100:13;5128:7;5121:14;;;;;:::i;8834:377::-;8929:4;8941:24;8968:31;8978:10;8990:8;8968:9;:31::i;:::-;8941:58;;9033:16;9013;:36;;9005:86;;;;-1:-1:-1;;;9005:86:86;;4050:2:181;9005:86:86;;;4032:21:181;4089:2;4069:18;;;4062:30;4128:34;4108:18;;;4101:62;-1:-1:-1;;;4179:18:181;;;4172:35;4224:19;;9005:86:86;;;;;;;;;9115:67;9124:10;9136:8;9165:16;9146;:35;9115:8;:67::i;6327:146::-;6406:4;6418:33;6428:10;6440:2;6444:6;6418:9;:33::i;15586:608::-;15794:9;15775:15;:28;;15767:70;;;;-1:-1:-1;;;15767:70:86;;4456:2:181;15767:70:86;;;4438:21:181;4495:2;4475:18;;;4468:30;4534:31;4514:18;;;4507:59;4583:18;;15767:70:86;4254:353:181;15767:70:86;15844:19;3250:95;15912:6;15920:8;15930:6;15938:17;15948:6;15938:9;:17::i;:::-;15883:84;;;;;;4899:25:181;;;;-1:-1:-1;;;;;4998:15:181;;;4978:18;;;4971:43;5050:15;;;;5030:18;;;5023:43;5082:18;;;5075:34;5125:19;;;5118:35;5169:19;;;5162:35;;;4871:19;;15883:84:86;;;;;;;;;;;;15866:107;;;;;;15844:129;;15980:13;15996:29;16013:11;15996:16;:29::i;:::-;15980:45;;16032:15;16050:32;16064:5;16071:2;16075;16079;16050:13;:32::i;:::-;16032:50;;16107:6;-1:-1:-1;;;;;16096:17:86;:7;-1:-1:-1;;;;;16096:17:86;;16088:60;;;;-1:-1:-1;;;16088:60:86;;5410:2:181;16088:60:86;;;5392:21:181;5449:2;5429:18;;;5422:30;5488:32;5468:18;;;5461:60;5538:18;;16088:60:86;5208:354:181;16088:60:86;16155:34;16164:6;16172:8;16182:6;16155:8;:34::i;:::-;15761:433;;;15586:608;;;;;;;:::o;6523:147::-;-1:-1:-1;;;;;6636:19:86;;;6614:7;6636:19;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;6523:147::o;12557:349::-;-1:-1:-1;;;;;12673:20:86;;12665:69;;;;-1:-1:-1;;;12665:69:86;;5769:2:181;12665:69:86;;;5751:21:181;5808:2;5788:18;;;5781:30;5847:34;5827:18;;;5820:62;-1:-1:-1;;;5898:18:181;;;5891:34;5942:19;;12665:69:86;5567:400:181;12665:69:86;-1:-1:-1;;;;;12748:22:86;;12740:69;;;;-1:-1:-1;;;12740:69:86;;6174:2:181;12740:69:86;;;6156:21:181;6213:2;6193:18;;;6186:30;6252:34;6232:18;;;6225:62;-1:-1:-1;;;6303:18:181;;;6296:32;6345:19;;12740:69:86;5972:398:181;12740:69:86;-1:-1:-1;;;;;12816:19:86;;;;;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;:39;;;12866:35;;1342:25:181;;;12866:35:86;;1315:18:181;12866:35:86;;;;;;;12557:349;;;:::o;13172:396::-;13287:24;13314:27;13324:6;13332:8;13314:9;:27::i;:::-;13287:54;;-1:-1:-1;;13351:16:86;:37;13347:217;;13426:7;13406:16;:27;;13398:69;;;;-1:-1:-1;;;13398:69:86;;6577:2:181;13398:69:86;;;6559:21:181;6616:2;6596:18;;;6589:30;6655:31;6635:18;;;6628:59;6704:18;;13398:69:86;6375:353:181;13398:69:86;13495:54;13504:6;13512:8;13541:7;13522:16;:26;13495:8;:54::i;:::-;13281:287;13172:396;;;:::o;9660:818::-;-1:-1:-1;;;;;9780:21:86;;9772:71;;;;-1:-1:-1;;;9772:71:86;;6935:2:181;9772:71:86;;;6917:21:181;6974:2;6954:18;;;6947:30;7013:34;6993:18;;;6986:62;-1:-1:-1;;;7064:18:181;;;7057:35;7109:19;;9772:71:86;6733:401:181;9772:71:86;-1:-1:-1;;;;;9857:24:86;;9849:72;;;;-1:-1:-1;;;9849:72:86;;7341:2:181;9849:72:86;;;7323:21:181;7380:2;7360:18;;;7353:30;7419:34;7399:18;;;7392:62;-1:-1:-1;;;7470:18:181;;;7463:33;7513:19;;9849:72:86;7139:399:181;9849:72:86;-1:-1:-1;;;;;10007:18:86;;9985:19;10007:18;;;;;;;;;;;10039:22;;;;10031:73;;;;-1:-1:-1;;;10031:73:86;;7745:2:181;10031:73:86;;;7727:21:181;7784:2;7764:18;;;7757:30;7823:34;7803:18;;;7796:62;-1:-1:-1;;;7874:18:181;;;7867:36;7920:19;;10031:73:86;7543:402:181;10031:73:86;-1:-1:-1;;;;;10128:18:86;;;:9;:18;;;;;;;;;;;10149:21;;;10128:42;;10329:21;;;;;;;;;;:32;;;;;;10379:38;;1342:25:181;;;10329:21:86;;10379:38;;1315:18:181;10379:38:86;;;;;;;10424:49;14138:110;17074:282;17127:7;17154:4;-1:-1:-1;;;;;17163:12:86;17146:29;;:66;;;;;17196:16;17179:13;:33;17146:66;17142:210;;;-1:-1:-1;17229:24:86;;;17074:282::o;17142:210::-;-1:-1:-1;17315:12:86;;17623:73;;;3392:95;17623:73;;;;8209:25:181;;;;8250:18;;;8243:34;;;;17329:15:86;8293:18:181;;;8286:34;17667:13:86;8336:18:181;;;8329:34;17690:4:86;8379:19:181;;;;8372:61;;;;17623:73:86;;;;;;;;;;8181:19:181;;;;17623:73:86;;;17613:84;;;;;;16523:107::o;16760:191::-;-1:-1:-1;;;;;16877:15:86;;16821;16877;;;:7;:15;;;;;918:14:59;;1050:1;1032:19;;;;918:14;16929:17:86;16838:113;16760:191;;;:::o;18295:159::-;18372:7;18394:55;18416:20;:18;:20::i;:::-;18438:10;8470:57:62;;-1:-1:-1;;;8470:57:62;;;8702:27:181;8745:11;;;8738:27;;;8781:12;;;8774:28;;;8434:7:62;;8818:12:181;;8470:57:62;;;;;;;;;;;;8460:68;;;;;;8453:75;;8341:194;;;;;6696:270;6819:7;6839:17;6858:18;6880:25;6891:4;6897:1;6900;6903;6880:10;:25::i;:::-;6838:67;;;;6915:18;6927:5;6915:11;:18::i;:::-;-1:-1:-1;6950:9:62;6696:270;-1:-1:-1;;;;;6696:270:62:o;5069:1494::-;5195:7;;6119:66;6106:79;;6102:161;;;-1:-1:-1;6217:1:62;;-1:-1:-1;6221:30:62;6201:51;;6102:161;6374:24;;;6357:14;6374:24;;;;;;;;;9068:25:181;;;9141:4;9129:17;;9109:18;;;9102:45;;;;9163:18;;;9156:34;;;9206:18;;;9199:34;;;6374:24:62;;9040:19:181;;6374:24:62;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6374:24:62;;-1:-1:-1;;6374:24:62;;;-1:-1:-1;;;;;;;6412:20:62;;6408:101;;6464:1;6468:29;6448:50;;;;;;;6408:101;6527:6;-1:-1:-1;6535:20:62;;-1:-1:-1;5069:1494:62;;;;;;;;:::o;570:511::-;647:20;638:5;:29;;;;;;;;:::i;:::-;;634:441;;570:511;:::o;634:441::-;743:29;734:5;:38;;;;;;;;:::i;:::-;;730:345;;788:34;;-1:-1:-1;;;788:34:62;;9578:2:181;788:34:62;;;9560:21:181;9617:2;9597:18;;;9590:30;9656:26;9636:18;;;9629:54;9700:18;;788:34:62;9376:348:181;730:345:62;852:35;843:5;:44;;;;;;;;:::i;:::-;;839:236;;903:41;;-1:-1:-1;;;903:41:62;;9931:2:181;903:41:62;;;9913:21:181;9970:2;9950:18;;;9943:30;10009:33;9989:18;;;9982:61;10060:18;;903:41:62;9729:355:181;839:236:62;974:30;965:5;:39;;;;;;;;:::i;:::-;;961:114;;1020:44;;-1:-1:-1;;;1020:44:62;;10291:2:181;1020:44:62;;;10273:21:181;10330:2;10310:18;;;10303:30;10369:34;10349:18;;;10342:62;-1:-1:-1;;;10420:18:181;;;10413:32;10462:19;;1020:44:62;10089:398:181;961:114:62;570:511;:::o;14:548:181:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:181;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:181:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;2082:186::-;2141:6;2194:2;2182:9;2173:7;2169:23;2165:32;2162:52;;;2210:1;2207;2200:12;2162:52;2233:29;2252:9;2233:29;:::i;:::-;2223:39;2082:186;-1:-1:-1;;;2082:186:181:o;2273:693::-;2384:6;2392;2400;2408;2416;2424;2432;2485:3;2473:9;2464:7;2460:23;2456:33;2453:53;;;2502:1;2499;2492:12;2453:53;2525:29;2544:9;2525:29;:::i;:::-;2515:39;;2573:38;2607:2;2596:9;2592:18;2573:38;:::i;:::-;2563:48;;2658:2;2647:9;2643:18;2630:32;2620:42;;2709:2;2698:9;2694:18;2681:32;2671:42;;2763:3;2752:9;2748:19;2735:33;2808:4;2801:5;2797:16;2790:5;2787:27;2777:55;;2828:1;2825;2818:12;2777:55;2273:693;;;;-1:-1:-1;2273:693:181;;;;2851:5;2903:3;2888:19;;2875:33;;-1:-1:-1;2955:3:181;2940:19;;;2927:33;;2273:693;-1:-1:-1;;2273:693:181:o;2971:260::-;3039:6;3047;3100:2;3088:9;3079:7;3075:23;3071:32;3068:52;;;3116:1;3113;3106:12;3068:52;3139:29;3158:9;3139:29;:::i;:::-;3129:39;;3187:38;3221:2;3210:9;3206:18;3187:38;:::i;:::-;3177:48;;2971:260;;;;;:::o;3236:380::-;3315:1;3311:12;;;;3358;;;3379:61;;3433:4;3425:6;3421:17;3411:27;;3379:61;3486:2;3478:6;3475:14;3455:18;3452:38;3449:161;;3532:10;3527:3;3523:20;3520:1;3513:31;3567:4;3564:1;3557:15;3595:4;3592:1;3585:15;3621:222;3686:9;;;3707:10;;;3704:133;;;3759:10;3754:3;3750:20;3747:1;3740:31;3794:4;3791:1;3784:15;3822:4;3819:1;3812:15;9244:127;9305:10;9300:3;9296:20;9293:1;9286:31;9336:4;9333:1;9326:15;9360:4;9357:1;9350:15"},"gasEstimates":{"creation":{"codeDepositCost":"745000","executionCost":"infinite","totalCost":"infinite"},"external":{"DOMAIN_SEPARATOR()":"infinite","allowance(address,address)":"infinite","approve(address,uint256)":"24643","balanceOf(address)":"2563","decimals()":"2334","decreaseAllowance(address,uint256)":"26966","increaseAllowance(address,uint256)":"infinite","name()":"infinite","nonces(address)":"2616","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","symbol()":"infinite","totalSupply()":"2349","transfer(address,uint256)":"51086","transferFrom(address,address,uint256)":"infinite"},"internal":{"_afterTokenTransfer(address,address,uint256)":"infinite","_approve(address,address,uint256)":"infinite","_beforeTokenTransfer(address,address,uint256)":"infinite","_buildDomainSeparator(bytes32,bytes32,bytes32)":"infinite","_burn(address,uint256)":"infinite","_domainSeparatorV4()":"infinite","_hashTypedDataV4(bytes32)":"infinite","_mint(address,uint256)":"infinite","_spendAllowance(address,address,uint256)":"infinite","_transfer(address,address,uint256)":"infinite","_useNonce(address)":"24334"}},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","increaseAllowance(address,uint256)":"39509351","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC20} interface. Implements ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin guidelines: functions revert instead of returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.Cannot use default ERC20/ERC20Permit implementation as there is no way to update the name (set to private). Cannot use default EIP712 implementation as the _HASHED_NAME may change. These functions use the same implementation, with easier storage access.\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}. This is ALWAYS calculated at runtime because the token name is mutable, not constant.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `\\\"1\\\"`. It's a good idea to use the same `name` that is defined as the ERC20 token name.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address. - `_spender` must have allowance for the caller of at least `_subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\",\"params\":{\"_deadline\":\"The timestamp before which the signature must be submitted\",\"_owner\":\"The account setting approval & signing the message\",\"_r\":\"ECDSA signature r\",\"_s\":\"ECDSA signature s\",\"_spender\":\"The account receiving approval to spend owner's tokens\",\"_v\":\"ECDSA signature v\",\"_value\":\"The amount to set approval for\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `_sender` and `recipient` cannot be the zero address. - `_sender` must have a balance of at least `amount`. - the caller must have allowance for ``_sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Sets approval from owner to spender to value as long as deadline has not passed by submitting a valid signature from owner Uses EIP 712 structured data hashing & signing https://eips.ethereum.org/EIPS/eip-712\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/helpers/OZERC20.sol\":\"ERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Counters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Counters\\n * @author Matt Condon (@shrugs)\\n * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\\n * of elements in a mapping, issuing ERC721 ids, or counting request ids.\\n *\\n * Include with `using Counters for Counters.Counter;`\\n */\\nlibrary Counters {\\n    struct Counter {\\n        // This variable should never be directly accessed by users of the library: interactions must be restricted to\\n        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add\\n        // this feature: see https://github.com/ethereum/solidity/issues/4637\\n        uint256 _value; // default: 0\\n    }\\n\\n    function current(Counter storage counter) internal view returns (uint256) {\\n        return counter._value;\\n    }\\n\\n    function increment(Counter storage counter) internal {\\n        unchecked {\\n            counter._value += 1;\\n        }\\n    }\\n\\n    function decrement(Counter storage counter) internal {\\n        uint256 value = counter._value;\\n        require(value > 0, \\\"Counter: decrement overflow\\\");\\n        unchecked {\\n            counter._value = value - 1;\\n        }\\n    }\\n\\n    function reset(Counter storage counter) internal {\\n        counter._value = 0;\\n    }\\n}\\n\",\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        bytes32 r,\\n        bytes32 vs\\n    ) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(\\n        bytes32 hash,\\n        bytes32 r,\\n        bytes32 vs\\n    ) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n    }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n    /* solhint-disable var-name-mixedcase */\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n    // invalidate the cached domain separator if the chain id changes.\\n    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n    uint256 private immutable _CACHED_CHAIN_ID;\\n    address private immutable _CACHED_THIS;\\n\\n    bytes32 private immutable _HASHED_NAME;\\n    bytes32 private immutable _HASHED_VERSION;\\n    bytes32 private immutable _TYPE_HASH;\\n\\n    /* solhint-enable var-name-mixedcase */\\n\\n    /**\\n     * @dev Initializes the domain separator and parameter caches.\\n     *\\n     * The meaning of `name` and `version` is specified in\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n     *\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n     * - `version`: the current major version of the signing domain.\\n     *\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n     * contract upgrade].\\n     */\\n    constructor(string memory name, string memory version) {\\n        bytes32 hashedName = keccak256(bytes(name));\\n        bytes32 hashedVersion = keccak256(bytes(version));\\n        bytes32 typeHash = keccak256(\\n            \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n        );\\n        _HASHED_NAME = hashedName;\\n        _HASHED_VERSION = hashedVersion;\\n        _CACHED_CHAIN_ID = block.chainid;\\n        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n        _CACHED_THIS = address(this);\\n        _TYPE_HASH = typeHash;\\n    }\\n\\n    /**\\n     * @dev Returns the domain separator for the current chain.\\n     */\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\n        if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n            return _CACHED_DOMAIN_SEPARATOR;\\n        } else {\\n            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n        }\\n    }\\n\\n    function _buildDomainSeparator(\\n        bytes32 typeHash,\\n        bytes32 nameHash,\\n        bytes32 versionHash\\n    ) private view returns (bytes32) {\\n        return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n    }\\n\\n    /**\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\n     *\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n     *\\n     * ```solidity\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n     *     keccak256(\\\"Mail(address to,string contents)\\\"),\\n     *     mailTo,\\n     *     keccak256(bytes(mailContents))\\n     * )));\\n     * address signer = ECDSA.recover(digest, signature);\\n     * ```\\n     */\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n    }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator\\n    ) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1);\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator,\\n        Rounding rounding\\n    ) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10**64) {\\n                value /= 10**64;\\n                result += 64;\\n            }\\n            if (value >= 10**32) {\\n                value /= 10**32;\\n                result += 32;\\n            }\\n            if (value >= 10**16) {\\n                value /= 10**16;\\n                result += 16;\\n            }\\n            if (value >= 10**8) {\\n                value /= 10**8;\\n                result += 8;\\n            }\\n            if (value >= 10**4) {\\n                value /= 10**4;\\n                result += 4;\\n            }\\n            if (value >= 10**2) {\\n                value /= 10**2;\\n                result += 2;\\n            }\\n            if (value >= 10**1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/OZERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n// This is modified from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\"\\n// Modifications were made to allow the name, hashed name, and cached\\n// domain separator to be internal\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\\\";\\nimport {EIP712} from \\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\";\\nimport {ECDSA} from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Counters.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * Implements ERC20 Permit extension allowing approvals to be made via\\n * signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20\\n * allowance (see {IERC20-allowance}) by presenting a message signed by the\\n * account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin guidelines: functions revert instead\\n * of returning `false` on failure. This behavior is nonetheless conventional\\n * and does not conflict with the expectations of ERC20 applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n *\\n * @dev Cannot use default ERC20/ERC20Permit implementation as there is no way to update\\n * the name (set to private).\\n *\\n * Cannot use default EIP712 implementation as the _HASHED_NAME may change.\\n * These functions use the same implementation, with easier storage access.\\n */\\ncontract ERC20 is IERC20Metadata, IERC20Permit {\\n  // See ERC20\\n  mapping(address => uint256) private _balances;\\n\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 private _totalSupply;\\n\\n  string internal _name; // made internal, need access\\n  string internal _symbol; // made internal, need access\\n  uint8 internal _decimals; // made internal, need access\\n\\n  // See ERC20Permit\\n  using Counters for Counters.Counter;\\n\\n  mapping(address => Counters.Counter) private _nonces;\\n\\n  // See EIP712\\n  // Immutables used in EIP 712 structured data hashing & signing\\n  // https://eips.ethereum.org/EIPS/eip-712\\n  bytes32 private constant _PERMIT_TYPEHASH =\\n    keccak256(\\\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\\\");\\n  bytes32 internal constant _TYPE_HASH =\\n    keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n  // made internal, need access\\n\\n  // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n  // invalidate the cached domain separator if the chain id changes.\\n  bytes32 internal _CACHED_DOMAIN_SEPARATOR; // made internal, may change\\n  uint256 private immutable _CACHED_CHAIN_ID;\\n  address private immutable _CACHED_THIS;\\n\\n  bytes32 internal _HASHED_NAME; // made internal, may change\\n  bytes32 internal immutable _HASHED_VERSION; // made internal, need access\\n\\n  /**\\n   * @dev Initializes the {EIP712} domain separator using the `name` parameter,\\n   * and setting `version` to `\\\"1\\\"`.\\n   *\\n   * It's a good idea to use the same `name` that is defined as the ERC20 token name.\\n   */\\n  constructor(\\n    uint8 decimals_,\\n    string memory name_,\\n    string memory symbol_,\\n    string memory version_\\n  ) {\\n    // ERC20\\n    _name = name_;\\n    _symbol = symbol_;\\n    _decimals = decimals_;\\n\\n    // EIP712\\n    bytes32 hashedName = keccak256(bytes(name_));\\n    bytes32 hashedVersion = keccak256(bytes(version_));\\n    _HASHED_NAME = hashedName;\\n    _HASHED_VERSION = hashedVersion;\\n    _CACHED_CHAIN_ID = block.chainid;\\n    _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, hashedName, hashedVersion);\\n    _CACHED_THIS = address(this);\\n  }\\n\\n  /**\\n   * @dev Returns the name of the token.\\n   */\\n  function name() public view virtual override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /**\\n   * @dev Returns the symbol of the token, usually a shorter version of the\\n   * name.\\n   */\\n  function symbol() public view virtual override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /**\\n   * @dev Returns the number of decimals used to get its user representation.\\n   * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n   * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n   *\\n   * Tokens usually opt for a value of 18, imitating the relationship between\\n   * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n   * overridden;\\n   *\\n   * NOTE: This information is only used for _display_ purposes: it in\\n   * no way affects any of the arithmetic of the contract, including\\n   * {IERC20-balanceOf} and {IERC20-transfer}.\\n   */\\n  function decimals() public view virtual override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-totalSupply}.\\n   */\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-balanceOf}.\\n   */\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _balances[account];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transfer}.\\n   *\\n   * Requirements:\\n   *\\n   * - `to` cannot be the zero address.\\n   * - the caller must have a balance of at least `amount`.\\n   */\\n  function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n    _transfer(msg.sender, to, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-allowance}.\\n   */\\n  function allowance(address _owner, address _spender) public view virtual override returns (uint256) {\\n    return _allowances[_owner][_spender];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-approve}.\\n   *\\n   * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n   * `transferFrom`. This is semantically equivalent to an infinite approval.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   */\\n  function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n    _approve(msg.sender, spender, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transferFrom}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance. This is not\\n   * required by the EIP. See the note at the beginning of {ERC20}.\\n   *\\n   * Requirements:\\n   *\\n   * - `_sender` and `recipient` cannot be the zero address.\\n   * - `_sender` must have a balance of at least `amount`.\\n   * - the caller must have allowance for ``_sender``'s tokens of at least\\n   * `amount`.\\n   */\\n  function transferFrom(\\n    address _sender,\\n    address _recipient,\\n    uint256 _amount\\n  ) public virtual override returns (bool) {\\n    _spendAllowance(_sender, msg.sender, _amount);\\n    _transfer(_sender, _recipient, _amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically increases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `_spender` cannot be the zero address.\\n   */\\n  function increaseAllowance(address _spender, uint256 _addedValue) public virtual returns (bool) {\\n    _approve(msg.sender, _spender, _allowances[msg.sender][_spender] + _addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `_spender` cannot be the zero address.\\n   * - `_spender` must have allowance for the caller of at least\\n   * `_subtractedValue`.\\n   */\\n  function decreaseAllowance(address _spender, uint256 _subtractedValue) public virtual returns (bool) {\\n    uint256 currentAllowance = allowance(msg.sender, _spender);\\n    require(currentAllowance >= _subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n    unchecked {\\n      _approve(msg.sender, _spender, currentAllowance - _subtractedValue);\\n    }\\n\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Moves tokens `amount` from `_sender` to `_recipient`.\\n   *\\n   * This is internal function is equivalent to {transfer}, and can be used to\\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\\n   *\\n   * Emits a {Transfer} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `_sender` cannot be the zero address.\\n   * - `_recipient` cannot be the zero address.\\n   * - `_sender` must have a balance of at least `amount`.\\n   */\\n  function _transfer(\\n    address _sender,\\n    address _recipient,\\n    uint256 _amount\\n  ) internal virtual {\\n    require(_sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n    require(_recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n    _beforeTokenTransfer(_sender, _recipient, _amount);\\n\\n    uint256 fromBalance = _balances[_sender];\\n    require(fromBalance >= _amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n    unchecked {\\n      _balances[_sender] = fromBalance - _amount;\\n      // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n      // decrementing then incrementing.\\n      _balances[_recipient] += _amount;\\n    }\\n\\n    emit Transfer(_sender, _recipient, _amount);\\n\\n    _afterTokenTransfer(_sender, _recipient, _amount);\\n  }\\n\\n  /** @dev Creates `_amount` tokens and assigns them to `_account`, increasing\\n   * the total supply.\\n   *\\n   * Emits a {Transfer} event with `from` set to the zero address.\\n   *\\n   * Requirements:\\n   *\\n   * - `to` cannot be the zero address.\\n   */\\n  function _mint(address _account, uint256 _amount) internal virtual {\\n    require(_account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n    _beforeTokenTransfer(address(0), _account, _amount);\\n\\n    _totalSupply += _amount;\\n    unchecked {\\n      // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n      _balances[_account] += _amount;\\n    }\\n    emit Transfer(address(0), _account, _amount);\\n\\n    _afterTokenTransfer(address(0), _account, _amount);\\n  }\\n\\n  /**\\n   * @dev Destroys `_amount` tokens from `_account`, reducing the\\n   * total supply.\\n   *\\n   * Emits a {Transfer} event with `to` set to the zero address.\\n   *\\n   * Requirements:\\n   *\\n   * - `_account` cannot be the zero address.\\n   * - `_account` must have at least `_amount` tokens.\\n   */\\n  function _burn(address _account, uint256 _amount) internal virtual {\\n    require(_account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n    _beforeTokenTransfer(_account, address(0), _amount);\\n\\n    uint256 accountBalance = _balances[_account];\\n    require(accountBalance >= _amount, \\\"ERC20: burn amount exceeds balance\\\");\\n    unchecked {\\n      _balances[_account] = accountBalance - _amount;\\n      // Overflow not possible: amount <= accountBalance <= totalSupply\\n      _totalSupply -= _amount;\\n    }\\n\\n    emit Transfer(_account, address(0), _amount);\\n\\n    _afterTokenTransfer(_account, address(0), _amount);\\n  }\\n\\n  /**\\n   * @dev Sets `_amount` as the allowance of `_spender` over the `_owner` s tokens.\\n   *\\n   * This internal function is equivalent to `approve`, and can be used to\\n   * e.g. set automatic allowances for certain subsystems, etc.\\n   *\\n   * Emits an {Approval} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `_owner` cannot be the zero address.\\n   * - `_spender` cannot be the zero address.\\n   */\\n  function _approve(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount\\n  ) internal virtual {\\n    require(_owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n    require(_spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n    _allowances[_owner][_spender] = _amount;\\n    emit Approval(_owner, _spender, _amount);\\n  }\\n\\n  /**\\n   * @dev Updates `_owner` s allowance for `_spender` based on spent `_amount`.\\n   *\\n   * Does not update the allowance amount in case of infinite allowance.\\n   * Revert if not enough allowance is available.\\n   *\\n   * Might emit an {Approval} event.\\n   */\\n  function _spendAllowance(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount\\n  ) internal virtual {\\n    uint256 currentAllowance = allowance(_owner, _spender);\\n    if (currentAllowance != type(uint256).max) {\\n      require(currentAllowance >= _amount, \\\"ERC20: insufficient allowance\\\");\\n      unchecked {\\n        _approve(_owner, _spender, currentAllowance - _amount);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Hook that is called before any transfer of tokens. This includes\\n   * minting and burning.\\n   *\\n   * Calling conditions:\\n   *\\n   * - when `_from` and `_to` are both non-zero, `_amount` of ``_from``'s tokens\\n   * will be to transferred to `_to`.\\n   * - when `_from` is zero, `_amount` tokens will be minted for `_to`.\\n   * - when `_to` is zero, `_amount` of ``_from``'s tokens will be burned.\\n   * - `_from` and `_to` are never both zero.\\n   *\\n   * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n   */\\n  function _beforeTokenTransfer(\\n    address _from,\\n    address _to,\\n    uint256 _amount\\n  ) internal virtual {}\\n\\n  /**\\n   * @dev Hook that is called after any transfer of tokens. This includes\\n   * minting and burning.\\n   *\\n   * Calling conditions:\\n   *\\n   * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n   * has been transferred to `to`.\\n   * - when `from` is zero, `amount` tokens have been minted for `to`.\\n   * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n   * - `from` and `to` are never both zero.\\n   *\\n   * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n   */\\n  function _afterTokenTransfer(\\n    address _from,\\n    address _to,\\n    uint256 _amount\\n  ) internal virtual {}\\n\\n  /**\\n   * @dev See {IERC20Permit-permit}.\\n   * @notice Sets approval from owner to spender to value\\n   * as long as deadline has not passed\\n   * by submitting a valid signature from owner\\n   * Uses EIP 712 structured data hashing & signing\\n   * https://eips.ethereum.org/EIPS/eip-712\\n   * @param _owner The account setting approval & signing the message\\n   * @param _spender The account receiving approval to spend owner's tokens\\n   * @param _value The amount to set approval for\\n   * @param _deadline The timestamp before which the signature must be submitted\\n   * @param _v ECDSA signature v\\n   * @param _r ECDSA signature r\\n   * @param _s ECDSA signature s\\n   */\\n  function permit(\\n    address _owner,\\n    address _spender,\\n    uint256 _value,\\n    uint256 _deadline,\\n    uint8 _v,\\n    bytes32 _r,\\n    bytes32 _s\\n  ) public virtual override {\\n    require(block.timestamp <= _deadline, \\\"ERC20Permit: expired deadline\\\");\\n\\n    bytes32 _structHash = keccak256(\\n      abi.encode(_PERMIT_TYPEHASH, _owner, _spender, _value, _useNonce(_owner), _deadline)\\n    );\\n\\n    bytes32 _hash = _hashTypedDataV4(_structHash);\\n\\n    address _signer = ECDSA.recover(_hash, _v, _r, _s);\\n    require(_signer == _owner, \\\"ERC20Permit: invalid signature\\\");\\n\\n    _approve(_owner, _spender, _value);\\n  }\\n\\n  /**\\n   * @dev See {IERC20Permit-nonces}.\\n   */\\n  function nonces(address _owner) public view virtual override returns (uint256) {\\n    return _nonces[_owner].current();\\n  }\\n\\n  /**\\n   * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.\\n   * This is ALWAYS calculated at runtime because the token name is mutable, not constant.\\n   */\\n  function DOMAIN_SEPARATOR() external view override returns (bytes32) {\\n    return _domainSeparatorV4();\\n  }\\n\\n  /**\\n   * @dev \\\"Consume a nonce\\\": return the current value and increment.\\n   * @dev See {EIP712._buildDomainSeparator}\\n   */\\n  function _useNonce(address _owner) internal virtual returns (uint256 current) {\\n    Counters.Counter storage nonce = _nonces[_owner];\\n    current = nonce.current();\\n    nonce.increment();\\n  }\\n\\n  /**\\n   * @dev Returns the domain separator for the current chain.\\n   * @dev See {EIP712._buildDomainSeparator}\\n   */\\n  function _domainSeparatorV4() internal view returns (bytes32) {\\n    if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n      return _CACHED_DOMAIN_SEPARATOR;\\n    } else {\\n      return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n    }\\n  }\\n\\n  /**\\n   * @dev See {EIP712._buildDomainSeparator}. Made internal to allow usage in parent class.\\n   */\\n  function _buildDomainSeparator(\\n    bytes32 typeHash,\\n    bytes32 nameHash,\\n    bytes32 versionHash\\n  ) internal view returns (bytes32) {\\n    return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n  }\\n\\n  /**\\n   * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n   * function returns the hash of the fully encoded EIP712 message for this domain.\\n   *\\n   * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n   *\\n   * ```solidity\\n   * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n   *     keccak256(\\\"Mail(address to,string contents)\\\"),\\n   *     mailTo,\\n   *     keccak256(bytes(mailContents))\\n   * )));\\n   * address signer = ECDSA.recover(digest, signature);\\n   * ```\\n   */\\n  function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n    return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n  }\\n}\\n\",\"keccak256\":\"0x7219667c651b2cbcbd1866667c5aa5fa1b1120a2fc111f24290c5ece3b3bba52\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":23198,"contract":"contracts/core/connext/helpers/OZERC20.sol:ERC20","label":"_balances","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":23204,"contract":"contracts/core/connext/helpers/OZERC20.sol:ERC20","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":23206,"contract":"contracts/core/connext/helpers/OZERC20.sol:ERC20","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":23208,"contract":"contracts/core/connext/helpers/OZERC20.sol:ERC20","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":23210,"contract":"contracts/core/connext/helpers/OZERC20.sol:ERC20","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"},{"astId":23212,"contract":"contracts/core/connext/helpers/OZERC20.sol:ERC20","label":"_decimals","offset":0,"slot":"5","type":"t_uint8"},{"astId":23221,"contract":"contracts/core/connext/helpers/OZERC20.sol:ERC20","label":"_nonces","offset":0,"slot":"6","type":"t_mapping(t_address,t_struct(Counter)11512_storage)"},{"astId":23233,"contract":"contracts/core/connext/helpers/OZERC20.sol:ERC20","label":"_CACHED_DOMAIN_SEPARATOR","offset":0,"slot":"7","type":"t_bytes32"},{"astId":23239,"contract":"contracts/core/connext/helpers/OZERC20.sol:ERC20","label":"_HASHED_NAME","offset":0,"slot":"8","type":"t_bytes32"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(Counter)11512_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct Counters.Counter)","numberOfBytes":"32","value":"t_struct(Counter)11512_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(Counter)11512_storage":{"encoding":"inplace","label":"struct Counters.Counter","members":[{"astId":11511,"contract":"contracts/core/connext/helpers/OZERC20.sol:ERC20","label":"_value","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Sets approval from owner to spender to value as long as deadline has not passed by submitting a valid signature from owner Uses EIP 712 structured data hashing & signing https://eips.ethereum.org/EIPS/eip-712"}},"version":1}}},"contracts/core/connext/helpers/OwnerPausableUpgradeable.sol":{"OwnerPausableUpgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Only methods using the provided modifiers will be paused.","kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"title":"OwnerPausable","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","unpause()":"3f4ba83a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Only methods using the provided modifiers will be paused.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OwnerPausable\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"pause()\":{\"notice\":\"Pause the contract. Revert if already paused.\"},\"unpause()\":{\"notice\":\"Unpause the contract. Revert if already unpaused.\"}},\"notice\":\"An ownable contract allows the owner to pause and unpause the contract without a delay.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/helpers/OwnerPausableUpgradeable.sol\":\"OwnerPausableUpgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract PausableUpgradeable is Initializable, ContextUpgradeable {\\n    /**\\n     * @dev Emitted when the pause is triggered by `account`.\\n     */\\n    event Paused(address account);\\n\\n    /**\\n     * @dev Emitted when the pause is lifted by `account`.\\n     */\\n    event Unpaused(address account);\\n\\n    bool private _paused;\\n\\n    /**\\n     * @dev Initializes the contract in unpaused state.\\n     */\\n    function __Pausable_init() internal onlyInitializing {\\n        __Pausable_init_unchained();\\n    }\\n\\n    function __Pausable_init_unchained() internal onlyInitializing {\\n        _paused = false;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    modifier whenNotPaused() {\\n        _requireNotPaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    modifier whenPaused() {\\n        _requirePaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the contract is paused, and false otherwise.\\n     */\\n    function paused() public view virtual returns (bool) {\\n        return _paused;\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is paused.\\n     */\\n    function _requireNotPaused() internal view virtual {\\n        require(!paused(), \\\"Pausable: paused\\\");\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is not paused.\\n     */\\n    function _requirePaused() internal view virtual {\\n        require(paused(), \\\"Pausable: not paused\\\");\\n    }\\n\\n    /**\\n     * @dev Triggers stopped state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    function _pause() internal virtual whenNotPaused {\\n        _paused = true;\\n        emit Paused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Returns to normal state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    function _unpause() internal virtual whenPaused {\\n        _paused = false;\\n        emit Unpaused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x40c636b4572ff5f1dc50cf22097e93c0723ee14eff87e99ac2b02636eeca1250\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/OwnerPausableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport {PausableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol\\\";\\n\\n/**\\n * @title OwnerPausable\\n * @notice An ownable contract allows the owner to pause and unpause the\\n * contract without a delay.\\n * @dev Only methods using the provided modifiers will be paused.\\n */\\nabstract contract OwnerPausableUpgradeable is OwnableUpgradeable, PausableUpgradeable {\\n  // ============ Initializer ============\\n\\n  function __OwnerPausable_init() internal onlyInitializing {\\n    __Context_init_unchained();\\n    __Ownable_init_unchained();\\n    __Pausable_init_unchained();\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Pause the contract. Revert if already paused.\\n   */\\n  function pause() external onlyOwner {\\n    PausableUpgradeable._pause();\\n  }\\n\\n  /**\\n   * @notice Unpause the contract. Revert if already unpaused.\\n   */\\n  function unpause() external onlyOwner {\\n    PausableUpgradeable._unpause();\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x2ceb8251bb92bc8b070c9732a0131a0a9b36aa4c37793d0bf5959fe41a751f92\",\"license\":\"UNLICENSED\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8076,"contract":"contracts/core/connext/helpers/OwnerPausableUpgradeable.sol:OwnerPausableUpgradeable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":8079,"contract":"contracts/core/connext/helpers/OwnerPausableUpgradeable.sol:OwnerPausableUpgradeable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":9542,"contract":"contracts/core/connext/helpers/OwnerPausableUpgradeable.sol:OwnerPausableUpgradeable","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":7948,"contract":"contracts/core/connext/helpers/OwnerPausableUpgradeable.sol:OwnerPausableUpgradeable","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":8068,"contract":"contracts/core/connext/helpers/OwnerPausableUpgradeable.sol:OwnerPausableUpgradeable","label":"__gap","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"},{"astId":8259,"contract":"contracts/core/connext/helpers/OwnerPausableUpgradeable.sol:OwnerPausableUpgradeable","label":"_paused","offset":0,"slot":"101","type":"t_bool"},{"astId":8364,"contract":"contracts/core/connext/helpers/OwnerPausableUpgradeable.sol:OwnerPausableUpgradeable","label":"__gap","offset":0,"slot":"102","type":"t_array(t_uint256)49_storage"},{"astId":24093,"contract":"contracts/core/connext/helpers/OwnerPausableUpgradeable.sol:OwnerPausableUpgradeable","label":"__GAP","offset":0,"slot":"151","type":"t_array(t_uint256)50_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"pause()":{"notice":"Pause the contract. Revert if already paused."},"unpause()":{"notice":"Unpause the contract. Revert if already unpaused."}},"notice":"An ownable contract allows the owner to pause and unpause the contract without a delay.","version":1}}},"contracts/core/connext/helpers/PriceOracle.sol":{"PriceOracle":{"abi":[{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPriceOracle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"getTokenPrice(address)":{"params":{"token":"The token to get the price of"},"returns":{"_0":"The asset price mantissa (scaled by 1e18).  Zero means the price is unavailable.","_1":"The source of the price. enum (NA, DIRECT, CHAINLINK, DEX, V1_ORACLE)"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getTokenPrice(address)":"d02641a0","isPriceOracle()":"66331bba"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPriceOracle\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getTokenPrice(address)\":{\"params\":{\"token\":\"The token to get the price of\"},\"returns\":{\"_0\":\"The asset price mantissa (scaled by 1e18).  Zero means the price is unavailable.\",\"_1\":\"The source of the price. enum (NA, DIRECT, CHAINLINK, DEX, V1_ORACLE)\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getTokenPrice(address)\":{\"notice\":\"Get the price of a token\"},\"isPriceOracle()\":{\"notice\":\"Indicator that this is a PriceOracle contract (for inspection)\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/helpers/PriceOracle.sol\":\"PriceOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/connext/helpers/PriceOracle.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nabstract contract PriceOracle {\\n  /// @notice Indicator that this is a PriceOracle contract (for inspection)\\n  bool public constant isPriceOracle = true;\\n\\n  /**\\n   * @notice Get the price of a token\\n   * @param token The token to get the price of\\n   * @return The asset price mantissa (scaled by 1e18).\\n   *  Zero means the price is unavailable.\\n   * @return The source of the price. enum (NA, DIRECT, CHAINLINK, DEX, V1_ORACLE)\\n   */\\n  function getTokenPrice(address token) external view virtual returns (uint256, uint256);\\n}\\n\",\"keccak256\":\"0x45f7d3bc9454208745a68af35ff5d75592d633d7cd07a6aa13333f694af54d20\",\"license\":\"UNLICENSED\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"getTokenPrice(address)":{"notice":"Get the price of a token"},"isPriceOracle()":{"notice":"Indicator that this is a PriceOracle contract (for inspection)"}},"version":1}}},"contracts/core/connext/helpers/RelayerProxy.sol":{"ISpokeConnector":{"abi":[{"inputs":[{"components":[{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32[32]","name":"path","type":"bytes32[32]"},{"internalType":"uint256","name":"index","type":"uint256"}],"internalType":"struct ISpokeConnector.Proof[]","name":"_proofs","type":"tuple[]"},{"internalType":"bytes32","name":"_aggregateRoot","type":"bytes32"},{"internalType":"bytes32[32]","name":"_aggregatePath","type":"bytes32[32]"},{"internalType":"uint256","name":"_aggregateIndex","type":"uint256"}],"name":"proveAndProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_encodedData","type":"bytes"}],"name":"send","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":"508a109b","send(bytes)":"2bb1ae7c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"path\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct ISpokeConnector.Proof[]\",\"name\":\"_proofs\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"_aggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[32]\",\"name\":\"_aggregatePath\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"_aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"proveAndProcess\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/helpers/RelayerProxy.sol\":\"ISpokeConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.1;\\n\\nimport {GelatoRelayBase} from \\\"./base/GelatoRelayBase.sol\\\";\\n\\nuint256 constant _FEE_COLLECTOR_START = 20;\\n\\n// WARNING: Do not use this free fn by itself, always inherit GelatoRelayFeeCollector\\n// solhint-disable-next-line func-visibility, private-vars-leading-underscore\\nfunction __getFeeCollector() pure returns (address feeCollector) {\\n    assembly {\\n        feeCollector := shr(\\n            96,\\n            calldataload(sub(calldatasize(), _FEE_COLLECTOR_START))\\n        )\\n    }\\n}\\n\\n/**\\n * @dev Context variant with only feeCollector appended to msg.data\\n * Expects calldata encoding:\\n *   abi.encodePacked(bytes data, address feeCollectorAddress)\\n * Therefore, we're expecting 20bytes to be appended to normal msgData\\n * 20bytes start offsets from calldatasize:\\n *    feeCollector: -20\\n */\\n/// @dev Do not use with GelatoRelayContext - pick only one\\nabstract contract GelatoRelayFeeCollector is GelatoRelayBase {\\n    function _getMsgData() internal view returns (bytes calldata) {\\n        return\\n            _isGelatoRelay(msg.sender)\\n                ? msg.data[:msg.data.length - _FEE_COLLECTOR_START]\\n                : msg.data;\\n    }\\n\\n    // Only use with GelatoRelayBase onlyGelatoRelay or `_isGelatoRelay` checks\\n    function _getFeeCollector() internal pure returns (address) {\\n        return __getFeeCollector();\\n    }\\n}\\n\",\"keccak256\":\"0x24d0c82254158c5d7cbb88bfafdab8197dbafc8be6e03d6dd13a3479bf7fc18d\",\"license\":\"MIT\"},\"@gelatonetwork/relay-context/contracts/base/GelatoRelayBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.1;\\n\\nimport {GELATO_RELAY} from \\\"../constants/GelatoRelay.sol\\\";\\n\\nabstract contract GelatoRelayBase {\\n    modifier onlyGelatoRelay() {\\n        require(_isGelatoRelay(msg.sender), \\\"onlyGelatoRelay\\\");\\n        _;\\n    }\\n\\n    function _isGelatoRelay(address _forwarder) internal pure returns (bool) {\\n        return _forwarder == GELATO_RELAY;\\n    }\\n}\\n\",\"keccak256\":\"0x8b8ca04a1b6dce1b14b0b5f59783defe5562f876f0d6127aefa3e251b7631ba1\",\"license\":\"MIT\"},\"@gelatonetwork/relay-context/contracts/constants/GelatoRelay.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.1;\\n\\naddress constant GELATO_RELAY = 0xaBcC9b596420A9E9172FD5938620E265a0f9Df92;\\naddress constant GELATO_RELAY_ERC2771 = 0xBf175FCC7086b4f9bd59d5EAE8eA67b8f940DE0d;\\n\",\"keccak256\":\"0xa3f9966896db1bfafbcb1b58d1d76b44d1cd1660986e675d57398d5a9a74d242\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/RelayerProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\nimport {ReentrancyGuard} from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport {GelatoRelayFeeCollector} from \\\"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../../../shared/ProposedOwnable.sol\\\";\\nimport {IConnext, ExecuteArgs} from \\\"../interfaces/IConnext.sol\\\";\\n\\ninterface ISpokeConnector {\\n  struct Proof {\\n    bytes message;\\n    bytes32[32] path;\\n    uint256 index;\\n  }\\n\\n  function proveAndProcess(\\n    Proof[] calldata _proofs,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) external;\\n\\n  function send(bytes memory _encodedData) external payable;\\n}\\n\\n/**\\n * @title RelayerProxy\\n * @author Connext Labs, Inc.\\n * @notice This is a temporary contract that wraps fast path functions in the Connext interface so that they can be called by\\n * Gelato's legacy relayer network. The contract stores native assets and pays them to the relayer on function call.\\n */\\ncontract RelayerProxy is ProposedOwnable, ReentrancyGuard, GelatoRelayFeeCollector {\\n  // ============ Properties ============\\n  address public gelatoRelayer;\\n  address public feeCollector;\\n  IConnext public connext;\\n  ISpokeConnector public spokeConnector;\\n\\n  mapping(address => bool) public allowedRelayer;\\n\\n  // ============ Modifier ============\\n\\n  modifier onlyRelayer() {\\n    require(allowedRelayer[msg.sender], \\\"!relayer\\\");\\n    _;\\n  }\\n\\n  modifier definedAddress(address _input) {\\n    require(_input != address(0), \\\"empty\\\");\\n    _;\\n  }\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted when funds added to the contract\\n   * @param amount The amount added\\n   * @param balance The updated balance of the contract\\n   */\\n  event FundsReceived(uint256 amount, uint256 balance);\\n\\n  /**\\n   * @notice Emitted when funds removed from the contract by admin\\n   * @param amount The amount removed\\n   * @param balance The updated balance of the contract\\n   */\\n  event FundsDeducted(uint256 amount, uint256 balance);\\n\\n  /**\\n   * @notice Emitted when a new relayer is allowlisted by admin\\n   * @param relayer Address of the added relayer\\n   */\\n  event RelayerAdded(address relayer);\\n\\n  /**\\n   * @notice Emitted when a relayer is removed from allowlist by admin\\n   * @param relayer Address of the removed relayer\\n   */\\n  event RelayerRemoved(address relayer);\\n\\n  /**\\n   * @notice Emitted when Connext contract address is updated by admin\\n   * @param updated New Connext address in the contract\\n   * @param previous Old Connext address in the contract\\n   */\\n  event ConnextChanged(address updated, address previous);\\n\\n  /**\\n   * @notice Emitted when SpokeConnector contract address is updated by admin\\n   * @param updated New SpokeConnector address in the contract\\n   * @param previous Old SpokeConnector address in the contract\\n   */\\n  event SpokeConnectorChanged(address updated, address previous);\\n\\n  /**\\n   * @notice Emitted when GelatoRelayer address is updated by admin\\n   * @param updated New GelatoRelayer address in the contract\\n   * @param previous Old Gelatorelayer address in the contract\\n   */\\n  event GelatoRelayerChanged(address updated, address previous);\\n\\n  /**\\n   * @notice Emitted when FeeCollectorChanged address is updated by admin\\n   * @param updated New FeeCollectorChanged address in the contract\\n   * @param previous Old FeeCollectorChanged address in the contract\\n   */\\n  event FeeCollectorChanged(address updated, address previous);\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new RelayerProxy instance.\\n   * @param _connext The address of the Connext on this domain.\\n   * @param _spokeConnector The address of the SpokeConnector on this domain.\\n   * @param _gelatoRelayer The address of the Gelato relayer on this domain.\\n   * @param _feeCollector The address of the Gelato Fee Collector on this domain.\\n   */\\n  constructor(\\n    address _connext,\\n    address _spokeConnector,\\n    address _gelatoRelayer,\\n    address _feeCollector\\n  ) ProposedOwnable() {\\n    _setOwner(msg.sender);\\n    _setConnext(_connext);\\n    _setSpokeConnector(_spokeConnector);\\n    _setGelatoRelayer(_gelatoRelayer);\\n    _setFeeCollector(_feeCollector);\\n\\n    _addRelayer(_gelatoRelayer);\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Adds a relayer address to the allowed relayers mapping.\\n   *\\n   * @param _relayer - Relayer address to add.\\n   */\\n  function addRelayer(address _relayer) external onlyOwner definedAddress(_relayer) {\\n    _addRelayer(_relayer);\\n  }\\n\\n  /**\\n   * @notice Removes a relayer address from the allowed relayers mapping.\\n   *\\n   * @param _relayer - Relayer address to remove.\\n   */\\n  function removeRelayer(address _relayer) external onlyOwner definedAddress(_relayer) {\\n    _removeRelayer(_relayer);\\n  }\\n\\n  /**\\n   * @notice Updates the Connext address on this contract.\\n   *\\n   * @param _connext - New Connext address.\\n   */\\n  function setConnext(address _connext) external onlyOwner definedAddress(_connext) {\\n    _setConnext(_connext);\\n  }\\n\\n  /**\\n   * @notice Updates the SpokeConnector address on this contract.\\n   *\\n   * @param _spokeConnector - New SpokeConnector address.\\n   */\\n  function setSpokeConnector(address _spokeConnector) external onlyOwner definedAddress(_spokeConnector) {\\n    _setSpokeConnector(_spokeConnector);\\n  }\\n\\n  /**\\n   * @notice Updates the Gelato relayer address on this contract.\\n   *\\n   * @param _gelatoRelayer - New Gelato relayer address.\\n   */\\n  function setGelatoRelayer(address _gelatoRelayer) external onlyOwner definedAddress(_gelatoRelayer) {\\n    _setGelatoRelayer(_gelatoRelayer);\\n  }\\n\\n  /**\\n   * @notice Updates the Gelato Fee Collector address on this contract.\\n   *\\n   * @param _feeCollector - New Gelato Fee Collector address.\\n   */\\n  function setFeeCollector(address _feeCollector) external onlyOwner definedAddress(_feeCollector) {\\n    _setFeeCollector(_feeCollector);\\n  }\\n\\n  /**\\n   * @notice Withdraws all funds stored on this contract to msg.sender.\\n   */\\n  function withdraw() external onlyOwner nonReentrant {\\n    uint256 balance = address(this).balance;\\n    Address.sendValue(payable(msg.sender), balance);\\n    emit FundsDeducted(balance, address(this).balance);\\n  }\\n\\n  // ============ External Functions ============\\n\\n  /**\\n   * @notice Wraps the call to execute() on Connext and pays either the caller or hardcoded relayer from this\\n   * contract's balance for completing the transaction.\\n   *\\n   * @param _args - ExecuteArgs arguments.\\n   * @param _fee - Fee to be paid to relayer.\\n   * @return transferId - The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for\\n   * reconciliation to occur.\\n   */\\n  function execute(ExecuteArgs calldata _args, uint256 _fee)\\n    external\\n    onlyRelayer\\n    nonReentrant\\n    returns (bytes32 transferId)\\n  {\\n    transferId = connext.execute(_args);\\n    transferRelayerFee(_fee);\\n  }\\n\\n  /**\\n   * @notice Wraps the call to proveAndProcess() on SpokeConnector and pays either the caller or hardcoded relayer\\n   * from this contract's balance for completing the transaction.\\n   *\\n   * @param _proofs Batch of Proofs containing messages for proving/processing.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   * @param _fee - Fee to be paid to relayer.\\n   */\\n  function proveAndProcess(\\n    ISpokeConnector.Proof[] calldata _proofs,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex,\\n    uint256 _fee\\n  ) external onlyRelayer nonReentrant {\\n    spokeConnector.proveAndProcess(_proofs, _aggregateRoot, _aggregatePath, _aggregateIndex);\\n    transferRelayerFee(_fee);\\n  }\\n\\n  /**\\n   * @notice Wraps the call to send() on SpokeConnector and pays either the caller or hardcoded relayer from this\\n   * contract's balance for completing the transaction.\\n   *\\n   * @param _encodedData - Data to be sent to Connext SpokeConnector\\n   * @param _messageFee - Fee to be paid to the SpokeConnector for connected AMBs that require fees.\\n   * @param _relayerFee - Fee to be paid to relayer.\\n   */\\n  function send(\\n    bytes memory _encodedData,\\n    uint256 _messageFee,\\n    uint256 _relayerFee\\n  ) external onlyRelayer nonReentrant {\\n    spokeConnector.send{value: _messageFee}(_encodedData);\\n    emit FundsDeducted(_messageFee, address(this).balance);\\n    transferRelayerFee(_relayerFee);\\n  }\\n\\n  receive() external payable {\\n    emit FundsReceived(msg.value, address(this).balance);\\n  }\\n\\n  // ============ Internal Functions ============\\n\\n  /**\\n   * @notice helper function to transfer fees to either Gelato relayer via Fee Collector or to our\\n   * backup relayer (msg.sender).\\n   *\\n   * @param _fee - Fee to be paid to relayer.\\n   */\\n  function transferRelayerFee(uint256 _fee) internal {\\n    if (msg.sender == gelatoRelayer) {\\n      Address.sendValue(payable(feeCollector), _fee);\\n    } else {\\n      Address.sendValue(payable(msg.sender), _fee);\\n    }\\n    emit FundsDeducted(_fee, address(this).balance);\\n  }\\n\\n  function _addRelayer(address _relayer) internal {\\n    require(!allowedRelayer[_relayer], \\\"added\\\");\\n\\n    allowedRelayer[_relayer] = true;\\n    emit RelayerAdded(_relayer);\\n  }\\n\\n  function _removeRelayer(address _relayer) internal {\\n    require(allowedRelayer[_relayer], \\\"!added\\\");\\n\\n    allowedRelayer[_relayer] = false;\\n    emit RelayerRemoved(_relayer);\\n  }\\n\\n  function _setConnext(address _connext) internal {\\n    emit ConnextChanged(_connext, address(connext));\\n    connext = IConnext(_connext);\\n  }\\n\\n  function _setSpokeConnector(address _spokeConnector) internal {\\n    emit SpokeConnectorChanged(_spokeConnector, address(spokeConnector));\\n    spokeConnector = ISpokeConnector(_spokeConnector);\\n  }\\n\\n  function _setGelatoRelayer(address _gelatoRelayer) internal {\\n    emit GelatoRelayerChanged(_gelatoRelayer, address(gelatoRelayer));\\n    gelatoRelayer = _gelatoRelayer;\\n  }\\n\\n  function _setFeeCollector(address _feeCollector) internal {\\n    emit FeeCollectorChanged(_feeCollector, address(feeCollector));\\n    feeCollector = _feeCollector;\\n  }\\n}\\n\",\"keccak256\":\"0x46de461bc7394acde5c3302beb98744f0887e23d0109fc1147bd3cfbd50fbcc3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/interfaces/IConnext.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {ExecuteArgs, TransferInfo, DestinationTransferStatus} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {SwapUtils} from \\\"../libraries/SwapUtils.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\n\\nimport {IStableSwap} from \\\"./IStableSwap.sol\\\";\\n\\nimport {IDiamondCut} from \\\"./IDiamondCut.sol\\\";\\nimport {IDiamondLoupe} from \\\"./IDiamondLoupe.sol\\\";\\n\\ninterface IConnext is IDiamondLoupe, IDiamondCut {\\n  // TokenFacet\\n  function canonicalToAdopted(bytes32 _key) external view returns (address);\\n\\n  function canonicalToAdopted(TokenId calldata _canonical) external view returns (address);\\n\\n  function adoptedToCanonical(address _adopted) external view returns (TokenId memory);\\n\\n  function canonicalToRepresentation(bytes32 _key) external view returns (address);\\n\\n  function canonicalToRepresentation(TokenId calldata _canonical) external view returns (address);\\n\\n  function representationToCanonical(address _adopted) external view returns (TokenId memory);\\n\\n  function getLocalAndAdoptedToken(bytes32 _id, uint32 _domain) external view returns (address, address);\\n\\n  function approvedAssets(bytes32 _key) external view returns (bool);\\n\\n  function approvedAssets(TokenId calldata _canonical) external view returns (bool);\\n\\n  function adoptedToLocalExternalPools(bytes32 _key) external view returns (IStableSwap);\\n\\n  function adoptedToLocalExternalPools(TokenId calldata _canonical) external view returns (IStableSwap);\\n\\n  function getTokenId(address _candidate) external view returns (TokenId memory);\\n\\n  function getCustodiedAmount(bytes32 _key) external view returns (uint256);\\n\\n  function setupAsset(\\n    TokenId calldata _canonical,\\n    uint8 _canonicalDecimals,\\n    string memory _representationName,\\n    string memory _representationSymbol,\\n    address _adoptedAssetId,\\n    address _stableSwapPool,\\n    uint256 _cap\\n  ) external returns (address);\\n\\n  function setupAssetWithDeployedRepresentation(\\n    TokenId calldata _canonical,\\n    address _representation,\\n    address _adoptedAssetId,\\n    address _stableSwapPool\\n  ) external returns (address);\\n\\n  function addStableSwapPool(TokenId calldata _canonical, address _stableSwapPool) external;\\n\\n  function updateLiquidityCap(TokenId calldata _canonical, uint256 _updated) external;\\n\\n  function removeAssetId(\\n    bytes32 _key,\\n    address _adoptedAssetId,\\n    address _representation\\n  ) external;\\n\\n  function removeAssetId(\\n    TokenId calldata _canonical,\\n    address _adoptedAssetId,\\n    address _representation\\n  ) external;\\n\\n  function updateDetails(\\n    TokenId calldata _canonical,\\n    string memory _name,\\n    string memory _symbol\\n  ) external;\\n\\n  // BaseConnextFacet\\n\\n  // BridgeFacet\\n  function routedTransfers(bytes32 _transferId) external view returns (address[] memory);\\n\\n  function transferStatus(bytes32 _transferId) external view returns (DestinationTransferStatus);\\n\\n  function remote(uint32 _domain) external view returns (address);\\n\\n  function domain() external view returns (uint256);\\n\\n  function nonce() external view returns (uint256);\\n\\n  function approvedSequencers(address _sequencer) external view returns (bool);\\n\\n  function xAppConnectionManager() external view returns (address);\\n\\n  function addConnextion(uint32 _domain, address _connext) external;\\n\\n  function addSequencer(address _sequencer) external;\\n\\n  function removeSequencer(address _sequencer) external;\\n\\n  function xcall(\\n    uint32 _destination,\\n    address _to,\\n    address _asset,\\n    address _delegate,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    bytes calldata _callData\\n  ) external payable returns (bytes32);\\n\\n  function xcallIntoLocal(\\n    uint32 _destination,\\n    address _to,\\n    address _asset,\\n    address _delegate,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    bytes calldata _callData\\n  ) external payable returns (bytes32);\\n\\n  function execute(ExecuteArgs calldata _args) external returns (bytes32 transferId);\\n\\n  function forceUpdateSlippage(TransferInfo calldata _params, uint256 _slippage) external;\\n\\n  function forceReceiveLocal(TransferInfo calldata _params) external;\\n\\n  function bumpTransfer(bytes32 _transferId) external payable;\\n\\n  function setXAppConnectionManager(address _xAppConnectionManager) external;\\n\\n  function enrollRemoteRouter(uint32 _domain, bytes32 _router) external;\\n\\n  function enrollCustom(\\n    uint32 _domain,\\n    bytes32 _id,\\n    address _custom\\n  ) external;\\n\\n  // InboxFacet\\n\\n  function handle(\\n    uint32 _origin,\\n    uint32 _nonce,\\n    bytes32 _sender,\\n    bytes memory _message\\n  ) external;\\n\\n  // ProposedOwnableFacet\\n\\n  function owner() external view returns (address);\\n\\n  function routerAllowlistRemoved() external view returns (bool);\\n\\n  function proposed() external view returns (address);\\n\\n  function proposedTimestamp() external view returns (uint256);\\n\\n  function routerAllowlistTimestamp() external view returns (uint256);\\n\\n  function delay() external view returns (uint256);\\n\\n  function paused() external view returns (bool);\\n\\n  function proposeRouterAllowlistRemoval() external;\\n\\n  function removeRouterAllowlist() external;\\n\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  function acceptProposedOwner() external;\\n\\n  function pause() external;\\n\\n  function unpause() external;\\n\\n  // RelayerFacet\\n  function approvedRelayers(address _relayer) external view returns (bool);\\n\\n  function relayerFeeVault() external view returns (address);\\n\\n  function setRelayerFeeVault(address _relayerFeeVault) external;\\n\\n  function addRelayer(address _relayer) external;\\n\\n  function removeRelayer(address _relayer) external;\\n\\n  // RoutersFacet\\n  function LIQUIDITY_FEE_NUMERATOR() external view returns (uint256);\\n\\n  function LIQUIDITY_FEE_DENOMINATOR() external view returns (uint256);\\n\\n  function getRouterApproval(address _router) external view returns (bool);\\n\\n  function getRouterRecipient(address _router) external view returns (address);\\n\\n  function getRouterOwner(address _router) external view returns (address);\\n\\n  function getProposedRouterOwner(address _router) external view returns (address);\\n\\n  function getProposedRouterOwnerTimestamp(address _router) external view returns (uint256);\\n\\n  function maxRoutersPerTransfer() external view returns (uint256);\\n\\n  function routerBalances(address _router, address _asset) external view returns (uint256);\\n\\n  function getRouterApprovalForPortal(address _router) external view returns (bool);\\n\\n  function approveRouter(address router) external;\\n\\n  function initializeRouter(address owner, address recipient) external;\\n\\n  function unapproveRouter(address router) external;\\n\\n  function setMaxRoutersPerTransfer(uint256 _newMaxRouters) external;\\n\\n  function setLiquidityFeeNumerator(uint256 _numerator) external;\\n\\n  function approveRouterForPortal(address _router) external;\\n\\n  function unapproveRouterForPortal(address _router) external;\\n\\n  function setRouterRecipient(address router, address recipient) external;\\n\\n  function proposeRouterOwner(address router, address proposed) external;\\n\\n  function acceptProposedRouterOwner(address router) external;\\n\\n  function addRouterLiquidityFor(\\n    uint256 _amount,\\n    address _local,\\n    address _router\\n  ) external payable;\\n\\n  function addRouterLiquidity(uint256 _amount, address _local) external payable;\\n\\n  function removeRouterLiquidityFor(\\n    uint256 _amount,\\n    address _local,\\n    address payable _to,\\n    address _router\\n  ) external;\\n\\n  function removeRouterLiquidity(\\n    uint256 _amount,\\n    address _local,\\n    address payable _to\\n  ) external;\\n\\n  // PortalFacet\\n  function getAavePortalDebt(bytes32 _transferId) external view returns (uint256);\\n\\n  function getAavePortalFeeDebt(bytes32 _transferId) external view returns (uint256);\\n\\n  function aavePool() external view returns (address);\\n\\n  function aavePortalFee() external view returns (uint256);\\n\\n  function setAavePool(address _aavePool) external;\\n\\n  function setAavePortalFee(uint256 _aavePortalFeeNumerator) external;\\n\\n  function repayAavePortal(\\n    TransferInfo calldata _params,\\n    uint256 _backingAmount,\\n    uint256 _feeAmount,\\n    uint256 _maxIn\\n  ) external;\\n\\n  function repayAavePortalFor(\\n    TransferInfo calldata _params,\\n    uint256 _backingAmount,\\n    uint256 _feeAmount\\n  ) external;\\n\\n  // StableSwapFacet\\n  function getSwapStorage(bytes32 canonicalId) external view returns (SwapUtils.Swap memory);\\n\\n  function getSwapLPToken(bytes32 canonicalId) external view returns (address);\\n\\n  function getSwapA(bytes32 canonicalId) external view returns (uint256);\\n\\n  function getSwapAPrecise(bytes32 canonicalId) external view returns (uint256);\\n\\n  function getSwapToken(bytes32 canonicalId, uint8 index) external view returns (IERC20);\\n\\n  function getSwapTokenIndex(bytes32 canonicalId, address tokenAddress) external view returns (uint8);\\n\\n  function getSwapTokenBalance(bytes32 canonicalId, uint8 index) external view returns (uint256);\\n\\n  function getSwapVirtualPrice(bytes32 canonicalId) external view returns (uint256);\\n\\n  function calculateSwap(\\n    bytes32 canonicalId,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapTokenAmount(\\n    bytes32 canonicalId,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) external view returns (uint256);\\n\\n  function calculateRemoveSwapLiquidity(bytes32 canonicalId, uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveSwapLiquidityOneToken(\\n    bytes32 canonicalId,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) external view returns (uint256);\\n\\n  function getSwapAdminBalance(bytes32 canonicalId, uint256 index) external view returns (uint256);\\n\\n  function swap(\\n    bytes32 canonicalId,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    bytes32 canonicalId,\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    bytes32 canonicalId,\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function addSwapLiquidity(\\n    bytes32 canonicalId,\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeSwapLiquidity(\\n    bytes32 canonicalId,\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeSwapLiquidityOneToken(\\n    bytes32 canonicalId,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeSwapLiquidityImbalance(\\n    bytes32 canonicalId,\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  // SwapAdminFacet\\n\\n  function initializeSwap(\\n    bytes32 _canonicalId,\\n    IERC20[] memory _pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 _a,\\n    uint256 _fee,\\n    uint256 _adminFee\\n  ) external;\\n\\n  function withdrawSwapAdminFees(bytes32 canonicalId) external;\\n\\n  function setSwapAdminFee(bytes32 canonicalId, uint256 newAdminFee) external;\\n\\n  function setSwapFee(bytes32 canonicalId, uint256 newSwapFee) external;\\n\\n  function rampA(\\n    bytes32 canonicalId,\\n    uint256 futureA,\\n    uint256 futureTime\\n  ) external;\\n\\n  function stopRampA(bytes32 canonicalId) external;\\n\\n  function lpTokenTargetAddress() external view returns (address);\\n\\n  function updateLpTokenTarget(address newAddress) external;\\n}\\n\",\"keccak256\":\"0x1b21b65dce0f84a5f3d82ae358960f03d40e0bbb9da4d4ad69fc44a8eb12a488\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IDiamondLoupe.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n  /// These functions are expected to be called frequently\\n  /// by tools.\\n\\n  struct Facet {\\n    address facetAddress;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Gets all facet addresses and their four byte function selectors.\\n  /// @return facets_ Facet\\n  function facets() external view returns (Facet[] memory facets_);\\n\\n  /// @notice Gets all the function selectors supported by a specific facet.\\n  /// @param _facet The facet address.\\n  /// @return facetFunctionSelectors_\\n  function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n  /// @notice Get all the facet addresses used by a diamond.\\n  /// @return facetAddresses_\\n  function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n  /// @notice Gets the facet that supports the given selector.\\n  /// @dev If facet is not found return address(0).\\n  /// @param _functionSelector The function selector.\\n  /// @return facetAddress_ The facet address.\\n  function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\",\"keccak256\":\"0xc408c13dc42d9526b1f292bad3f3915efa15c2133f509d90a45422b5f6cf829c\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"RelayerProxy":{"abi":[{"inputs":[{"internalType":"address","name":"_connext","type":"address"},{"internalType":"address","name":"_spokeConnector","type":"address"},{"internalType":"address","name":"_gelatoRelayer","type":"address"},{"internalType":"address","name":"_feeCollector","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updated","type":"address"},{"indexed":false,"internalType":"address","name":"previous","type":"address"}],"name":"ConnextChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updated","type":"address"},{"indexed":false,"internalType":"address","name":"previous","type":"address"}],"name":"FeeCollectorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"FundsDeducted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"FundsReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updated","type":"address"},{"indexed":false,"internalType":"address","name":"previous","type":"address"}],"name":"GelatoRelayerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"relayer","type":"address"}],"name":"RelayerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"relayer","type":"address"}],"name":"RelayerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updated","type":"address"},{"indexed":false,"internalType":"address","name":"previous","type":"address"}],"name":"SpokeConnectorChanged","type":"event"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_relayer","type":"address"}],"name":"addRelayer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedRelayer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"connext","outputs":[{"internalType":"contract IConnext","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"uint32","name":"originDomain","type":"uint32"},{"internalType":"uint32","name":"destinationDomain","type":"uint32"},{"internalType":"uint32","name":"canonicalDomain","type":"uint32"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"delegate","type":"address"},{"internalType":"bool","name":"receiveLocal","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"slippage","type":"uint256"},{"internalType":"address","name":"originSender","type":"address"},{"internalType":"uint256","name":"bridgedAmt","type":"uint256"},{"internalType":"uint256","name":"normalizedIn","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"internalType":"struct TransferInfo","name":"params","type":"tuple"},{"internalType":"address[]","name":"routers","type":"address[]"},{"internalType":"bytes[]","name":"routerSignatures","type":"bytes[]"},{"internalType":"address","name":"sequencer","type":"address"},{"internalType":"bytes","name":"sequencerSignature","type":"bytes"}],"internalType":"struct ExecuteArgs","name":"_args","type":"tuple"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"execute","outputs":[{"internalType":"bytes32","name":"transferId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gelatoRelayer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32[32]","name":"path","type":"bytes32[32]"},{"internalType":"uint256","name":"index","type":"uint256"}],"internalType":"struct ISpokeConnector.Proof[]","name":"_proofs","type":"tuple[]"},{"internalType":"bytes32","name":"_aggregateRoot","type":"bytes32"},{"internalType":"bytes32[32]","name":"_aggregatePath","type":"bytes32[32]"},{"internalType":"uint256","name":"_aggregateIndex","type":"uint256"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"proveAndProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_relayer","type":"address"}],"name":"removeRelayer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_encodedData","type":"bytes"},{"internalType":"uint256","name":"_messageFee","type":"uint256"},{"internalType":"uint256","name":"_relayerFee","type":"uint256"}],"name":"send","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_connext","type":"address"}],"name":"setConnext","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeCollector","type":"address"}],"name":"setFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gelatoRelayer","type":"address"}],"name":"setGelatoRelayer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spokeConnector","type":"address"}],"name":"setSpokeConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"spokeConnector","outputs":[{"internalType":"contract ISpokeConnector","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"author":"Connext Labs, Inc.","events":{"ConnextChanged(address,address)":{"params":{"previous":"Old Connext address in the contract","updated":"New Connext address in the contract"}},"FeeCollectorChanged(address,address)":{"params":{"previous":"Old FeeCollectorChanged address in the contract","updated":"New FeeCollectorChanged address in the contract"}},"FundsDeducted(uint256,uint256)":{"params":{"amount":"The amount removed","balance":"The updated balance of the contract"}},"FundsReceived(uint256,uint256)":{"params":{"amount":"The amount added","balance":"The updated balance of the contract"}},"GelatoRelayerChanged(address,address)":{"params":{"previous":"Old Gelatorelayer address in the contract","updated":"New GelatoRelayer address in the contract"}},"RelayerAdded(address)":{"params":{"relayer":"Address of the added relayer"}},"RelayerRemoved(address)":{"params":{"relayer":"Address of the removed relayer"}},"SpokeConnectorChanged(address,address)":{"params":{"previous":"Old SpokeConnector address in the contract","updated":"New SpokeConnector address in the contract"}}},"kind":"dev","methods":{"addRelayer(address)":{"params":{"_relayer":"- Relayer address to add."}},"constructor":{"params":{"_connext":"The address of the Connext on this domain.","_feeCollector":"The address of the Gelato Fee Collector on this domain.","_gelatoRelayer":"The address of the Gelato relayer on this domain.","_spokeConnector":"The address of the SpokeConnector on this domain."}},"execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),uint256)":{"params":{"_args":"- ExecuteArgs arguments.","_fee":"- Fee to be paid to relayer."},"returns":{"transferId":"- The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for reconciliation to occur."}},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256,uint256)":{"params":{"_aggregateIndex":"Index of the inbound root in the aggregator's merkle tree in the hub.","_aggregatePath":"Merkle path of inclusion for the inbound root.","_aggregateRoot":"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.","_fee":"- Fee to be paid to relayer.","_proofs":"Batch of Proofs containing messages for proving/processing."}},"removeRelayer(address)":{"params":{"_relayer":"- Relayer address to remove."}},"send(bytes,uint256,uint256)":{"params":{"_encodedData":"- Data to be sent to Connext SpokeConnector","_messageFee":"- Fee to be paid to the SpokeConnector for connected AMBs that require fees.","_relayerFee":"- Fee to be paid to relayer."}},"setConnext(address)":{"params":{"_connext":"- New Connext address."}},"setFeeCollector(address)":{"params":{"_feeCollector":"- New Gelato Fee Collector address."}},"setGelatoRelayer(address)":{"params":{"_gelatoRelayer":"- New Gelato relayer address."}},"setSpokeConnector(address)":{"params":{"_spokeConnector":"- New SpokeConnector address."}}},"title":"RelayerProxy","version":1},"evm":{"bytecode":{"functionDebugData":{"@_10699":{"entryPoint":null,"id":10699,"parameterSlots":0,"returnSlots":0},"@_24295":{"entryPoint":null,"id":24295,"parameterSlots":4,"returnSlots":0},"@_addRelayer_24609":{"entryPoint":654,"id":24609,"parameterSlots":1,"returnSlots":0},"@_setConnext_24652":{"entryPoint":234,"id":24652,"parameterSlots":1,"returnSlots":0},"@_setFeeCollector_24708":{"entryPoint":549,"id":24708,"parameterSlots":1,"returnSlots":0},"@_setGelatoRelayer_24690":{"entryPoint":444,"id":24690,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":133,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setSpokeConnector_24672":{"entryPoint":339,"id":24672,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":830,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory":{"entryPoint":859,"id":null,"parameterSlots":2,"returnSlots":4},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_dedd704501704f7991a32fb105552a4ab47a52c46817293082f14fd934f9f8cc__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1512:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"74:117:181","statements":[{"nodeType":"YulAssignment","src":"84:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"99:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"93:5:181"},"nodeType":"YulFunctionCall","src":"93:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"84:5:181"}]},{"body":{"nodeType":"YulBlock","src":"169:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"178:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"181:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"171:6:181"},"nodeType":"YulFunctionCall","src":"171:12:181"},"nodeType":"YulExpressionStatement","src":"171:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"128:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"139:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"154:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"150:3:181"},"nodeType":"YulFunctionCall","src":"150:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"163:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"146:3:181"},"nodeType":"YulFunctionCall","src":"146:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"135:3:181"},"nodeType":"YulFunctionCall","src":"135:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"125:2:181"},"nodeType":"YulFunctionCall","src":"125:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"118:6:181"},"nodeType":"YulFunctionCall","src":"118:50:181"},"nodeType":"YulIf","src":"115:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"53:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"64:5:181","type":""}],"src":"14:177:181"},{"body":{"nodeType":"YulBlock","src":"328:332:181","statements":[{"body":{"nodeType":"YulBlock","src":"375:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"384:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"387:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"377:6:181"},"nodeType":"YulFunctionCall","src":"377:12:181"},"nodeType":"YulExpressionStatement","src":"377:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"349:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"358:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"345:3:181"},"nodeType":"YulFunctionCall","src":"345:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"370:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"341:3:181"},"nodeType":"YulFunctionCall","src":"341:33:181"},"nodeType":"YulIf","src":"338:53:181"},{"nodeType":"YulAssignment","src":"400:50:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"440:9:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"410:29:181"},"nodeType":"YulFunctionCall","src":"410:40:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"400:6:181"}]},{"nodeType":"YulAssignment","src":"459:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"503:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"514:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"499:3:181"},"nodeType":"YulFunctionCall","src":"499:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"469:29:181"},"nodeType":"YulFunctionCall","src":"469:49:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"459:6:181"}]},{"nodeType":"YulAssignment","src":"527:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"571:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"582:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"567:3:181"},"nodeType":"YulFunctionCall","src":"567:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"537:29:181"},"nodeType":"YulFunctionCall","src":"537:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"527:6:181"}]},{"nodeType":"YulAssignment","src":"595:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"639:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"650:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"635:3:181"},"nodeType":"YulFunctionCall","src":"635:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"605:29:181"},"nodeType":"YulFunctionCall","src":"605:49:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"595:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"270:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"281:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"293:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"301:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"309:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"317:6:181","type":""}],"src":"196:464:181"},{"body":{"nodeType":"YulBlock","src":"794:175:181","statements":[{"nodeType":"YulAssignment","src":"804:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"816:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"827:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"812:3:181"},"nodeType":"YulFunctionCall","src":"812:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"804:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"839:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"857:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"862:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"853:3:181"},"nodeType":"YulFunctionCall","src":"853:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"866:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"849:3:181"},"nodeType":"YulFunctionCall","src":"849:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"843:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"884:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"899:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"907:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"895:3:181"},"nodeType":"YulFunctionCall","src":"895:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"877:6:181"},"nodeType":"YulFunctionCall","src":"877:34:181"},"nodeType":"YulExpressionStatement","src":"877:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"931:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"942:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"927:3:181"},"nodeType":"YulFunctionCall","src":"927:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"951:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"959:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"947:3:181"},"nodeType":"YulFunctionCall","src":"947:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"920:6:181"},"nodeType":"YulFunctionCall","src":"920:43:181"},"nodeType":"YulExpressionStatement","src":"920:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"755:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"766:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"774:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"785:4:181","type":""}],"src":"665:304:181"},{"body":{"nodeType":"YulBlock","src":"1148:154:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1165:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1176:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1158:6:181"},"nodeType":"YulFunctionCall","src":"1158:21:181"},"nodeType":"YulExpressionStatement","src":"1158:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1199:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1210:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1195:3:181"},"nodeType":"YulFunctionCall","src":"1195:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1215:1:181","type":"","value":"5"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1188:6:181"},"nodeType":"YulFunctionCall","src":"1188:29:181"},"nodeType":"YulExpressionStatement","src":"1188:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1237:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1248:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1233:3:181"},"nodeType":"YulFunctionCall","src":"1233:18:181"},{"hexValue":"6164646564","kind":"string","nodeType":"YulLiteral","src":"1253:7:181","type":"","value":"added"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1226:6:181"},"nodeType":"YulFunctionCall","src":"1226:35:181"},"nodeType":"YulExpressionStatement","src":"1226:35:181"},{"nodeType":"YulAssignment","src":"1270:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1282:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1293:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1278:3:181"},"nodeType":"YulFunctionCall","src":"1278:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1270:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_dedd704501704f7991a32fb105552a4ab47a52c46817293082f14fd934f9f8cc__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1125:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1139:4:181","type":""}],"src":"974:328:181"},{"body":{"nodeType":"YulBlock","src":"1408:102:181","statements":[{"nodeType":"YulAssignment","src":"1418:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1430:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1441:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1426:3:181"},"nodeType":"YulFunctionCall","src":"1426:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1418:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1460:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1475:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1491:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1496:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1487:3:181"},"nodeType":"YulFunctionCall","src":"1487:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1500:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1483:3:181"},"nodeType":"YulFunctionCall","src":"1483:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1471:3:181"},"nodeType":"YulFunctionCall","src":"1471:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1453:6:181"},"nodeType":"YulFunctionCall","src":"1453:51:181"},"nodeType":"YulExpressionStatement","src":"1453:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1377:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1388:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1399:4:181","type":""}],"src":"1307:203:181"}]},"contents":"{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_dedd704501704f7991a32fb105552a4ab47a52c46817293082f14fd934f9f8cc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 5)\n        mstore(add(headStart, 64), \"added\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040523480156200001157600080fd5b5060405162001c0438038062001c0483398101604081905262000034916200035b565b6001600355620000443362000085565b6200004f84620000ea565b6200005a8362000153565b6200006582620001bc565b620000708162000225565b6200007b826200028e565b50505050620003b8565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600654604080516001600160a01b03808516825290921660208301527f87539ad41983c0ecff8f321db8edf4dd9e830593562770bdacdda085b83e3bb2910160405180910390a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b600754604080516001600160a01b03808516825290921660208301527f66948d99d8431a8416af2202bc301823b7cdd87beb9bddaa274aedac0611a5fd910160405180910390a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b600454604080516001600160a01b03808516825290921660208301527f5db4a067a1f787c3269642464a2a1560868b50b0873e7dec83939ae2359f6128910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b600554604080516001600160a01b03808516825290921660208301527f649c5e3d0ed183894196148e193af316452b0037e77d2ff0fef23b7dc722bed0910160405180910390a1600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526008602052604090205460ff1615620002e45760405162461bcd60e51b8152602060048201526005602482015264185919195960da1b604482015260640160405180910390fd5b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f03580ee9f53a62b7cb409a2cb56f9be87747dd15017afc5cef6eef321e4fb2c5910160405180910390a150565b80516001600160a01b03811681146200035657600080fd5b919050565b600080600080608085870312156200037257600080fd5b6200037d856200033e565b93506200038d602086016200033e565b92506200039d604086016200033e565b9150620003ad606086016200033e565b905092959194509250565b61183c80620003c86000396000f3fe6080604052600436106101445760003560e01c80639cadce00116100b6578063d1851c921161006f578063d1851c92146103b9578063d232c220146103d7578063d9ef0bee146103f6578063dd39f00d14610416578063de4b054814610436578063e79457f11461045657600080fd5b80639cadce00146103045780639f645a0314610324578063a42dce8014610344578063b1f8100d14610364578063c415b95c14610384578063c5b350df146103a457600080fd5b806360f0a5ac1161010857806360f0a5ac146102435780636a42b8f8146102635780636eba787f14610279578063715018a6146102b15780638da5cb5b146102c65780638efed127146102e457600080fd5b80632f55b98d146101885780633ccfd60b146101cd5780633cf52ffb146101e45780634d6f2013146102035780635e21966a1461022357600080fd5b3661018357604080513481524760208201527f063d07ee72a7483b8e07ca09054bb686775c5c030f945dde3823a5257a0a93eb910160405180910390a1005b600080fd5b34801561019457600080fd5b506101b86101a33660046110fd565b60086020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101d957600080fd5b506101e2610476565b005b3480156101f057600080fd5b506002545b6040519081526020016101c4565b34801561020f57600080fd5b506101e261021e3660046110fd565b6104f9565b34801561022f57600080fd5b506101e261023e3660046110fd565b610561565b34801561024f57600080fd5b506101e261025e3660046110fd565b6105bc565b34801561026f57600080fd5b5062093a806101f5565b34801561028557600080fd5b50600454610299906001600160a01b031681565b6040516001600160a01b0390911681526020016101c4565b3480156102bd57600080fd5b506101e2610617565b3480156102d257600080fd5b506000546001600160a01b0316610299565b3480156102f057600080fd5b506101f56102ff36600461111f565b6106c9565b34801561031057600080fd5b50600754610299906001600160a01b031681565b34801561033057600080fd5b506101e261033f3660046110fd565b61078e565b34801561035057600080fd5b506101e261035f3660046110fd565b6107e9565b34801561037057600080fd5b506101e261037f3660046110fd565b610844565b34801561039057600080fd5b50600554610299906001600160a01b031681565b3480156103b057600080fd5b506101e26108e5565b3480156103c557600080fd5b506001546001600160a01b0316610299565b3480156103e357600080fd5b506000546001600160a01b0316156101b8565b34801561040257600080fd5b506101e261041136600461117f565b610955565b34801561042257600080fd5b506101e26104313660046110fd565b610a47565b34801561044257600080fd5b50600654610299906001600160a01b031681565b34801561046257600080fd5b506101e2610471366004611255565b610aa2565b6000546001600160a01b031633146104a1576040516311a8a1bb60e31b815260040160405180910390fd5b6104a9610b5e565b476104b43382610bb7565b604080518281524760208201527f9826a73d0fd7186bda6a15195ac17571869cab151bfe9a8fed3f9407fffe5b18910160405180910390a1506104f76001600355565b565b6000546001600160a01b03163314610524576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166105545760405162461bcd60e51b815260040161054b906112f7565b60405180910390fd5b61055d82610cd0565b5050565b6000546001600160a01b0316331461058c576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166105b35760405162461bcd60e51b815260040161054b906112f7565b61055d82610d39565b6000546001600160a01b031633146105e7576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b03811661060e5760405162461bcd60e51b815260040161054b906112f7565b61055d82610da2565b6000546001600160a01b03163314610642576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426106549190611316565b11610672576040516324e0285f60e21b815260040160405180910390fd5b60025460000361069557604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b0316156106bf576040516323295ef960e01b815260040160405180910390fd5b6104f76000610e4b565b3360009081526008602052604081205460ff166106f85760405162461bcd60e51b815260040161054b90611337565b610700610b5e565b6006546040516331f1f3e960e11b81526001600160a01b03909116906363e3e7d2906107309086906004016114e0565b6020604051808303816000875af115801561074f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077391906116d3565b905061077e82610eb0565b6107886001600355565b92915050565b6000546001600160a01b031633146107b9576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166107e05760405162461bcd60e51b815260040161054b906112f7565b61055d82610f1c565b6000546001600160a01b03163314610814576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b03811661083b5760405162461bcd60e51b815260040161054b906112f7565b61055d82610f85565b6000546001600160a01b0316331461086f576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b03828116911614801561088d575060025415155b156108ab576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036108d957604051634a2fb73f60e11b815260040160405180910390fd5b6108e281610fee565b50565b6001546001600160a01b03163314610910576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426109229190611316565b11610940576040516324e0285f60e21b815260040160405180910390fd5b6001546104f7906001600160a01b0316610e4b565b3360009081526008602052604090205460ff166109845760405162461bcd60e51b815260040161054b90611337565b61098c610b5e565b600754604051630aec6b9f60e21b81526001600160a01b0390911690632bb1ae7c9084906109be9087906004016116ec565b6000604051808303818588803b1580156109d757600080fd5b505af11580156109eb573d6000803e3d6000fd5b5050604080518681524760208201527f9826a73d0fd7186bda6a15195ac17571869cab151bfe9a8fed3f9407fffe5b189450019150610a279050565b60405180910390a1610a3881610eb0565b610a426001600355565b505050565b6000546001600160a01b03163314610a72576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b038116610a995760405162461bcd60e51b815260040161054b906112f7565b61055d8261103c565b3360009081526008602052604090205460ff16610ad15760405162461bcd60e51b815260040161054b90611337565b610ad9610b5e565b60075460405163508a109b60e01b81526001600160a01b039091169063508a109b90610b119089908990899089908990600401611744565b600060405180830381600087803b158015610b2b57600080fd5b505af1158015610b3f573d6000803e3d6000fd5b50505050610b4c81610eb0565b610b566001600355565b505050505050565b600260035403610bb05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161054b565b6002600355565b80471015610c075760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161054b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c54576040519150601f19603f3d011682016040523d82523d6000602084013e610c59565b606091505b5050905080610a425760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161054b565b600654604080516001600160a01b03808516825290921660208301527f87539ad41983c0ecff8f321db8edf4dd9e830593562770bdacdda085b83e3bb2910160405180910390a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b600454604080516001600160a01b03808516825290921660208301527f5db4a067a1f787c3269642464a2a1560868b50b0873e7dec83939ae2359f6128910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526008602052604090205460ff16610df35760405162461bcd60e51b815260206004820152600660248201526508585919195960d21b604482015260640161054b565b6001600160a01b038116600081815260086020908152604091829020805460ff1916905590519182527f10e1f7ce9fd7d1b90a66d13a2ab3cb8dd7f29f3f8d520b143b063ccfbab6906b91015b60405180910390a150565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b6004546001600160a01b03163303610edd57600554610ed8906001600160a01b031682610bb7565b610ee7565b610ee73382610bb7565b604080518281524760208201527f9826a73d0fd7186bda6a15195ac17571869cab151bfe9a8fed3f9407fffe5b189101610e40565b600754604080516001600160a01b03808516825290921660208301527f66948d99d8431a8416af2202bc301823b7cdd87beb9bddaa274aedac0611a5fd910160405180910390a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b600554604080516001600160a01b03808516825290921660208301527f649c5e3d0ed183894196148e193af316452b0037e77d2ff0fef23b7dc722bed0910160405180910390a1600580546001600160a01b0319166001600160a01b0392909216919091179055565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b6001600160a01b03811660009081526008602052604090205460ff161561108d5760405162461bcd60e51b8152602060048201526005602482015264185919195960da1b604482015260640161054b565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f03580ee9f53a62b7cb409a2cb56f9be87747dd15017afc5cef6eef321e4fb2c59101610e40565b80356001600160a01b03811681146110f857600080fd5b919050565b60006020828403121561110f57600080fd5b611118826110e1565b9392505050565b6000806040838503121561113257600080fd5b823567ffffffffffffffff81111561114957600080fd5b830160a0818603121561115b57600080fd5b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561119457600080fd5b833567ffffffffffffffff808211156111ac57600080fd5b818601915086601f8301126111c057600080fd5b8135818111156111d2576111d2611169565b604051601f8201601f19908116603f011681019083821181831017156111fa576111fa611169565b8160405282815289602084870101111561121357600080fd5b82602086016020830137600060208483010152809750505050505060208401359150604084013590509250925092565b80610400810183101561078857600080fd5b600080600080600080610480878903121561126f57600080fd5b863567ffffffffffffffff8082111561128757600080fd5b818901915089601f83011261129b57600080fd5b8135818111156112aa57600080fd5b8a60208260051b85010111156112bf57600080fd5b6020928301985096505087013593506112db8860408901611243565b9250610440870135915061046087013590509295509295509295565b602080825260059082015264656d70747960d81b604082015260600190565b8181038181111561078857634e487b7160e01b600052601160045260246000fd5b60208082526008908201526710b932b630bcb2b960c11b604082015260600190565b803563ffffffff811681146110f857600080fd5b803580151581146110f857600080fd5b6000808335601e1984360301811261139457600080fd5b830160208101925035905067ffffffffffffffff8111156113b457600080fd5b8036038213156113c357600080fd5b9250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e1984360301811261140a57600080fd5b830160208101925035905067ffffffffffffffff81111561142a57600080fd5b8060051b36038213156113c357600080fd5b8183526000602080850194508260005b85811015611478576001600160a01b03611465836110e1565b168752958201959082019060010161144c565b509495945050505050565b81835260006020808501808196508560051b810191508460005b878110156114d35782840389526114b4828861137d565b6114bf8682846113ca565b9a87019a955050509084019060010161149d565b5091979650505050505050565b602081526000823561019e198436030181126114fb57600080fd5b60a06020840152830161151e60c0840161151483611359565b63ffffffff169052565b61152a60208201611359565b63ffffffff1660e084015261154160408201611359565b6101006115558186018363ffffffff169052565b611561606084016110e1565b915061012061157a818701846001600160a01b03169052565b611586608085016110e1565b925061014061159f818801856001600160a01b03169052565b6115ab60a0860161136d565b93506101606115bd8189018615159052565b6115ca60c087018761137d565b95506101a061018081818c01526115e66102608c0189856113ca565b975060e0890135828c01526115fc878a016110e1565b6001600160a01b03166101c08c0152948801356101e08b01525050908501356102008801528401356102208701528301356102408601525061164160208601866113f3565b9250601f198086840301604087015261165b83858461143c565b935061166a60408801886113f3565b9350915080868503016060870152611683848484611483565b9350611691606088016110e1565b6001600160a01b038116608088015292506116af608088018861137d565b93509150808685030160a0870152506116c98383836113ca565b9695505050505050565b6000602082840312156116e557600080fd5b5051919050565b600060208083528351808285015260005b81811015611719578581018301518582016040015282016116fd565b506000604082860101526040601f19601f8301168501019250505092915050565b6104008183375050565b6104608082528101859052600061048080830190600588901b8401018883805b8a8110156117da5786840361047f190185528235368d900361043e1901811261178b578283fd5b8c0161044061179a828061137d565b8288526117aa83890182846113ca565b92505050602061040081840182890137610420928301359690920195909552948501949290920191600101611764565b50505080925050508460208301526117f5604083018561173a565b82610440830152969550505050505056fea26469706673582212205e227196f16a701f18bb16516738258b6161fbb11536119e140f4931aa29b29f64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1C04 CODESIZE SUB DUP1 PUSH3 0x1C04 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x35B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x3 SSTORE PUSH3 0x44 CALLER PUSH3 0x85 JUMP JUMPDEST PUSH3 0x4F DUP5 PUSH3 0xEA JUMP JUMPDEST PUSH3 0x5A DUP4 PUSH3 0x153 JUMP JUMPDEST PUSH3 0x65 DUP3 PUSH3 0x1BC JUMP JUMPDEST PUSH3 0x70 DUP2 PUSH3 0x225 JUMP JUMPDEST PUSH3 0x7B DUP3 PUSH3 0x28E JUMP JUMPDEST POP POP POP POP PUSH3 0x3B8 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x87539AD41983C0ECFF8F321DB8EDF4DD9E830593562770BDACDDA085B83E3BB2 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x66948D99D8431A8416AF2202BC301823B7CDD87BEB9BDDAA274AEDAC0611A5FD SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x5DB4A067A1F787C3269642464A2A1560868B50B0873E7DEC83939AE2359F6128 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x649C5E3D0ED183894196148E193AF316452B0037E77D2FF0FEF23B7DC722BED0 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH3 0x2E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x5 PUSH1 0x24 DUP3 ADD MSTORE PUSH5 0x1859191959 PUSH1 0xDA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x3580EE9F53A62B7CB409A2CB56F9BE87747DD15017AFC5CEF6EEF321E4FB2C5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x356 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x372 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x37D DUP6 PUSH3 0x33E JUMP JUMPDEST SWAP4 POP PUSH3 0x38D PUSH1 0x20 DUP7 ADD PUSH3 0x33E JUMP JUMPDEST SWAP3 POP PUSH3 0x39D PUSH1 0x40 DUP7 ADD PUSH3 0x33E JUMP JUMPDEST SWAP2 POP PUSH3 0x3AD PUSH1 0x60 DUP7 ADD PUSH3 0x33E JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0x183C DUP1 PUSH3 0x3C8 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x144 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9CADCE00 GT PUSH2 0xB6 JUMPI DUP1 PUSH4 0xD1851C92 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x3B9 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x3D7 JUMPI DUP1 PUSH4 0xD9EF0BEE EQ PUSH2 0x3F6 JUMPI DUP1 PUSH4 0xDD39F00D EQ PUSH2 0x416 JUMPI DUP1 PUSH4 0xDE4B0548 EQ PUSH2 0x436 JUMPI DUP1 PUSH4 0xE79457F1 EQ PUSH2 0x456 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9CADCE00 EQ PUSH2 0x304 JUMPI DUP1 PUSH4 0x9F645A03 EQ PUSH2 0x324 JUMPI DUP1 PUSH4 0xA42DCE80 EQ PUSH2 0x344 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x364 JUMPI DUP1 PUSH4 0xC415B95C EQ PUSH2 0x384 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x3A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x60F0A5AC GT PUSH2 0x108 JUMPI DUP1 PUSH4 0x60F0A5AC EQ PUSH2 0x243 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x263 JUMPI DUP1 PUSH4 0x6EBA787F EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x2B1 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2C6 JUMPI DUP1 PUSH4 0x8EFED127 EQ PUSH2 0x2E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F55B98D EQ PUSH2 0x188 JUMPI DUP1 PUSH4 0x3CCFD60B EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x1E4 JUMPI DUP1 PUSH4 0x4D6F2013 EQ PUSH2 0x203 JUMPI DUP1 PUSH4 0x5E21966A EQ PUSH2 0x223 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x183 JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SELFBALANCE PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x63D07EE72A7483B8E07CA09054BB686775C5C030F945DDE3823A5257A0A93EB SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B8 PUSH2 0x1A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x10FD JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x476 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1C4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x20F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x21E CALLDATASIZE PUSH1 0x4 PUSH2 0x10FD JUMP JUMPDEST PUSH2 0x4F9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x23E CALLDATASIZE PUSH1 0x4 PUSH2 0x10FD JUMP JUMPDEST PUSH2 0x561 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x25E CALLDATASIZE PUSH1 0x4 PUSH2 0x10FD JUMP JUMPDEST PUSH2 0x5BC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x1F5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x299 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1C4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x617 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x299 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F5 PUSH2 0x2FF CALLDATASIZE PUSH1 0x4 PUSH2 0x111F JUMP JUMPDEST PUSH2 0x6C9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x310 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x7 SLOAD PUSH2 0x299 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x330 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x33F CALLDATASIZE PUSH1 0x4 PUSH2 0x10FD JUMP JUMPDEST PUSH2 0x78E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x350 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x35F CALLDATASIZE PUSH1 0x4 PUSH2 0x10FD JUMP JUMPDEST PUSH2 0x7E9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x370 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x37F CALLDATASIZE PUSH1 0x4 PUSH2 0x10FD JUMP JUMPDEST PUSH2 0x844 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x390 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x5 SLOAD PUSH2 0x299 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x8E5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x299 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x1B8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x402 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x411 CALLDATASIZE PUSH1 0x4 PUSH2 0x117F JUMP JUMPDEST PUSH2 0x955 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x422 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x431 CALLDATASIZE PUSH1 0x4 PUSH2 0x10FD JUMP JUMPDEST PUSH2 0xA47 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x442 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x6 SLOAD PUSH2 0x299 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x462 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x471 CALLDATASIZE PUSH1 0x4 PUSH2 0x1255 JUMP JUMPDEST PUSH2 0xAA2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4A1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4A9 PUSH2 0xB5E JUMP JUMPDEST SELFBALANCE PUSH2 0x4B4 CALLER DUP3 PUSH2 0xBB7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SELFBALANCE PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x9826A73D0FD7186BDA6A15195AC17571869CAB151BFE9A8FED3F9407FFFE5B18 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH2 0x4F7 PUSH1 0x1 PUSH1 0x3 SSTORE JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x524 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x554 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54B SWAP1 PUSH2 0x12F7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x55D DUP3 PUSH2 0xCD0 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x58C JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x5B3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54B SWAP1 PUSH2 0x12F7 JUMP JUMPDEST PUSH2 0x55D DUP3 PUSH2 0xD39 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x60E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54B SWAP1 PUSH2 0x12F7 JUMP JUMPDEST PUSH2 0x55D DUP3 PUSH2 0xDA2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x642 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x654 SWAP2 SWAP1 PUSH2 0x1316 JUMP JUMPDEST GT PUSH2 0x672 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x695 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x6BF JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4F7 PUSH1 0x0 PUSH2 0xE4B JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x6F8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54B SWAP1 PUSH2 0x1337 JUMP JUMPDEST PUSH2 0x700 PUSH2 0xB5E JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x31F1F3E9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x63E3E7D2 SWAP1 PUSH2 0x730 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x14E0 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x74F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x773 SWAP2 SWAP1 PUSH2 0x16D3 JUMP JUMPDEST SWAP1 POP PUSH2 0x77E DUP3 PUSH2 0xEB0 JUMP JUMPDEST PUSH2 0x788 PUSH1 0x1 PUSH1 0x3 SSTORE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x7B9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54B SWAP1 PUSH2 0x12F7 JUMP JUMPDEST PUSH2 0x55D DUP3 PUSH2 0xF1C JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x814 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x83B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54B SWAP1 PUSH2 0x12F7 JUMP JUMPDEST PUSH2 0x55D DUP3 PUSH2 0xF85 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x86F JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x88D JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x8AB JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x8D9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x8E2 DUP2 PUSH2 0xFEE JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x910 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x922 SWAP2 SWAP1 PUSH2 0x1316 JUMP JUMPDEST GT PUSH2 0x940 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x4F7 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xE4B JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x984 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54B SWAP1 PUSH2 0x1337 JUMP JUMPDEST PUSH2 0x98C PUSH2 0xB5E JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0xAEC6B9F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x2BB1AE7C SWAP1 DUP5 SWAP1 PUSH2 0x9BE SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x16EC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP7 DUP2 MSTORE SELFBALANCE PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x9826A73D0FD7186BDA6A15195AC17571869CAB151BFE9A8FED3F9407FFFE5B18 SWAP5 POP ADD SWAP2 POP PUSH2 0xA27 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0xA38 DUP2 PUSH2 0xEB0 JUMP JUMPDEST PUSH2 0xA42 PUSH1 0x1 PUSH1 0x3 SSTORE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA72 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xA99 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54B SWAP1 PUSH2 0x12F7 JUMP JUMPDEST PUSH2 0x55D DUP3 PUSH2 0x103C JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xAD1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54B SWAP1 PUSH2 0x1337 JUMP JUMPDEST PUSH2 0xAD9 PUSH2 0xB5E JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x508A109B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x508A109B SWAP1 PUSH2 0xB11 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x1744 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB3F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0xB4C DUP2 PUSH2 0xEB0 JUMP JUMPDEST PUSH2 0xB56 PUSH1 0x1 PUSH1 0x3 SSTORE JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x3 SLOAD SUB PUSH2 0xBB0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54B JUMP JUMPDEST PUSH1 0x2 PUSH1 0x3 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0xC07 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54B JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xC54 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xC59 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0xA42 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x54B JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x87539AD41983C0ECFF8F321DB8EDF4DD9E830593562770BDACDDA085B83E3BB2 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x5DB4A067A1F787C3269642464A2A1560868B50B0873E7DEC83939AE2359F6128 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xDF3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x85859191959 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x10E1F7CE9FD7D1B90A66D13A2AB3CB8DD7F29F3F8D520B143B063CCFBAB6906B SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0xEDD JUMPI PUSH1 0x5 SLOAD PUSH2 0xED8 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH2 0xBB7 JUMP JUMPDEST PUSH2 0xEE7 JUMP JUMPDEST PUSH2 0xEE7 CALLER DUP3 PUSH2 0xBB7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SELFBALANCE PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x9826A73D0FD7186BDA6A15195AC17571869CAB151BFE9A8FED3F9407FFFE5B18 SWAP2 ADD PUSH2 0xE40 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x66948D99D8431A8416AF2202BC301823B7CDD87BEB9BDDAA274AEDAC0611A5FD SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x649C5E3D0ED183894196148E193AF316452B0037E77D2FF0FEF23B7DC722BED0 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x108D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x5 PUSH1 0x24 DUP3 ADD MSTORE PUSH5 0x1859191959 PUSH1 0xDA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x3580EE9F53A62B7CB409A2CB56F9BE87747DD15017AFC5CEF6EEF321E4FB2C5 SWAP2 ADD PUSH2 0xE40 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x10F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x110F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1118 DUP3 PUSH2 0x10E1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1132 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1149 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0xA0 DUP2 DUP7 SUB SLT ISZERO PUSH2 0x115B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x11AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x11C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x11D2 JUMPI PUSH2 0x11D2 PUSH2 0x1169 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x11FA JUMPI PUSH2 0x11FA PUSH2 0x1169 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x1213 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP8 POP POP POP POP POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP1 PUSH2 0x400 DUP2 ADD DUP4 LT ISZERO PUSH2 0x788 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x480 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x126F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1287 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP10 ADD SWAP2 POP DUP10 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x129B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x12AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP11 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x12BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 DUP4 ADD SWAP9 POP SWAP7 POP POP DUP8 ADD CALLDATALOAD SWAP4 POP PUSH2 0x12DB DUP9 PUSH1 0x40 DUP10 ADD PUSH2 0x1243 JUMP JUMPDEST SWAP3 POP PUSH2 0x440 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH2 0x460 DUP8 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x5 SWAP1 DUP3 ADD MSTORE PUSH5 0x656D707479 PUSH1 0xD8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x788 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x8 SWAP1 DUP3 ADD MSTORE PUSH8 0x10B932B630BCB2B9 PUSH1 0xC1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x10F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x10F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x1394 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x13B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x13C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 DUP3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x140A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x142A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x5 SHL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x13C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x1478 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1465 DUP4 PUSH2 0x10E1 JUMP JUMPDEST AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x144C JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP6 ADD DUP1 DUP2 SWAP7 POP DUP6 PUSH1 0x5 SHL DUP2 ADD SWAP2 POP DUP5 PUSH1 0x0 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0x14D3 JUMPI DUP3 DUP5 SUB DUP10 MSTORE PUSH2 0x14B4 DUP3 DUP9 PUSH2 0x137D JUMP JUMPDEST PUSH2 0x14BF DUP7 DUP3 DUP5 PUSH2 0x13CA JUMP JUMPDEST SWAP11 DUP8 ADD SWAP11 SWAP6 POP POP POP SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x149D JUMP JUMPDEST POP SWAP2 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x19E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x14FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xA0 PUSH1 0x20 DUP5 ADD MSTORE DUP4 ADD PUSH2 0x151E PUSH1 0xC0 DUP5 ADD PUSH2 0x1514 DUP4 PUSH2 0x1359 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x152A PUSH1 0x20 DUP3 ADD PUSH2 0x1359 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x1541 PUSH1 0x40 DUP3 ADD PUSH2 0x1359 JUMP JUMPDEST PUSH2 0x100 PUSH2 0x1555 DUP2 DUP7 ADD DUP4 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x1561 PUSH1 0x60 DUP5 ADD PUSH2 0x10E1 JUMP JUMPDEST SWAP2 POP PUSH2 0x120 PUSH2 0x157A DUP2 DUP8 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x1586 PUSH1 0x80 DUP6 ADD PUSH2 0x10E1 JUMP JUMPDEST SWAP3 POP PUSH2 0x140 PUSH2 0x159F DUP2 DUP9 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x15AB PUSH1 0xA0 DUP7 ADD PUSH2 0x136D JUMP JUMPDEST SWAP4 POP PUSH2 0x160 PUSH2 0x15BD DUP2 DUP10 ADD DUP7 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x15CA PUSH1 0xC0 DUP8 ADD DUP8 PUSH2 0x137D JUMP JUMPDEST SWAP6 POP PUSH2 0x1A0 PUSH2 0x180 DUP2 DUP2 DUP13 ADD MSTORE PUSH2 0x15E6 PUSH2 0x260 DUP13 ADD DUP10 DUP6 PUSH2 0x13CA JUMP JUMPDEST SWAP8 POP PUSH1 0xE0 DUP10 ADD CALLDATALOAD DUP3 DUP13 ADD MSTORE PUSH2 0x15FC DUP8 DUP11 ADD PUSH2 0x10E1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1C0 DUP13 ADD MSTORE SWAP5 DUP9 ADD CALLDATALOAD PUSH2 0x1E0 DUP12 ADD MSTORE POP POP SWAP1 DUP6 ADD CALLDATALOAD PUSH2 0x200 DUP9 ADD MSTORE DUP5 ADD CALLDATALOAD PUSH2 0x220 DUP8 ADD MSTORE DUP4 ADD CALLDATALOAD PUSH2 0x240 DUP7 ADD MSTORE POP PUSH2 0x1641 PUSH1 0x20 DUP7 ADD DUP7 PUSH2 0x13F3 JUMP JUMPDEST SWAP3 POP PUSH1 0x1F NOT DUP1 DUP7 DUP5 SUB ADD PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x165B DUP4 DUP6 DUP5 PUSH2 0x143C JUMP JUMPDEST SWAP4 POP PUSH2 0x166A PUSH1 0x40 DUP9 ADD DUP9 PUSH2 0x13F3 JUMP JUMPDEST SWAP4 POP SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x1683 DUP5 DUP5 DUP5 PUSH2 0x1483 JUMP JUMPDEST SWAP4 POP PUSH2 0x1691 PUSH1 0x60 DUP9 ADD PUSH2 0x10E1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x80 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x16AF PUSH1 0x80 DUP9 ADD DUP9 PUSH2 0x137D JUMP JUMPDEST SWAP4 POP SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH1 0xA0 DUP8 ADD MSTORE POP PUSH2 0x16C9 DUP4 DUP4 DUP4 PUSH2 0x13CA JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x16E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1719 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x16FD JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x400 DUP2 DUP4 CALLDATACOPY POP POP JUMP JUMPDEST PUSH2 0x460 DUP1 DUP3 MSTORE DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x0 PUSH2 0x480 DUP1 DUP4 ADD SWAP1 PUSH1 0x5 DUP9 SWAP1 SHL DUP5 ADD ADD DUP9 DUP4 DUP1 JUMPDEST DUP11 DUP2 LT ISZERO PUSH2 0x17DA JUMPI DUP7 DUP5 SUB PUSH2 0x47F NOT ADD DUP6 MSTORE DUP3 CALLDATALOAD CALLDATASIZE DUP14 SWAP1 SUB PUSH2 0x43E NOT ADD DUP2 SLT PUSH2 0x178B JUMPI DUP3 DUP4 REVERT JUMPDEST DUP13 ADD PUSH2 0x440 PUSH2 0x179A DUP3 DUP1 PUSH2 0x137D JUMP JUMPDEST DUP3 DUP9 MSTORE PUSH2 0x17AA DUP4 DUP10 ADD DUP3 DUP5 PUSH2 0x13CA JUMP JUMPDEST SWAP3 POP POP POP PUSH1 0x20 PUSH2 0x400 DUP2 DUP5 ADD DUP3 DUP10 ADD CALLDATACOPY PUSH2 0x420 SWAP3 DUP4 ADD CALLDATALOAD SWAP7 SWAP1 SWAP3 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP5 DUP6 ADD SWAP5 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1764 JUMP JUMPDEST POP POP POP DUP1 SWAP3 POP POP POP DUP5 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x17F5 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x173A JUMP JUMPDEST DUP3 PUSH2 0x440 DUP4 ADD MSTORE SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5E 0x22 PUSH18 0x96F16A701F18BB16516738258B6161FBB115 CALLDATASIZE GT SWAP15 EQ 0xF 0x49 BALANCE 0xAA 0x29 0xB2 SWAP16 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"1117:9330:89:-:0;;;3993:350;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1716:1:52;1821:7;:22;4139:21:89::1;4149:10;4139:9;:21::i;:::-;4166;4178:8:::0;4166:11:::1;:21::i;:::-;4193:35;4212:15:::0;4193:18:::1;:35::i;:::-;4234:33;4252:14:::0;4234:17:::1;:33::i;:::-;4273:31;4290:13:::0;4273:16:::1;:31::i;:::-;4311:27;4323:14:::0;4311:11:::1;:27::i;:::-;3993:350:::0;;;;1117:9330;;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;9760:140:89:-;9852:7;;9819:42;;;-1:-1:-1;;;;;895:15:181;;;877:34;;9852:7:89;;;942:2:181;927:18;;920:43;9819:42:89;;812:18:181;9819:42:89;;;;;;;9867:7;:28;;-1:-1:-1;;;;;;9867:28:89;-1:-1:-1;;;;;9867:28:89;;;;;;;;;;9760:140::o;9904:196::-;10024:14;;9977:63;;;-1:-1:-1;;;;;895:15:181;;;877:34;;10024:14:89;;;942:2:181;927:18;;920:43;9977:63:89;;812:18:181;9977:63:89;;;;;;;10046:14;:49;;-1:-1:-1;;;;;;10046:49:89;-1:-1:-1;;;;;10046:49:89;;;;;;;;;;9904:196::o;10104:172::-;10220:13;;10175:60;;;-1:-1:-1;;;;;895:15:181;;;877:34;;10220:13:89;;;942:2:181;927:18;;920:43;10175:60:89;;812:18:181;10175:60:89;;;;;;;10241:13;:30;;-1:-1:-1;;;;;;10241:30:89;-1:-1:-1;;;;;10241:30:89;;;;;;;;;;10104:172::o;10280:165::-;10392:12;;10349:57;;;-1:-1:-1;;;;;895:15:181;;;877:34;;10392:12:89;;;942:2:181;927:18;;920:43;10349:57:89;;812:18:181;10349:57:89;;;;;;;10412:12;:28;;-1:-1:-1;;;;;;10412:28:89;-1:-1:-1;;;;;10412:28:89;;;;;;;;;;10280:165::o;9400:173::-;-1:-1:-1;;;;;9463:24:89;;;;;;:14;:24;;;;;;;;9462:25;9454:43;;;;-1:-1:-1;;;9454:43:89;;1176:2:181;9454:43:89;;;1158:21:181;1215:1;1195:18;;;1188:29;-1:-1:-1;;;1233:18:181;;;1226:35;1278:18;;9454:43:89;;;;;;;;-1:-1:-1;;;;;9504:24:89;;;;;;:14;:24;;;;;;;;;:31;;-1:-1:-1;;9504:31:89;9531:4;9504:31;;;9546:22;;1453:51:181;;;9546:22:89;;1426:18:181;9546:22:89;;;;;;;9400:173;:::o;14:177:181:-;93:13;;-1:-1:-1;;;;;135:31:181;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:464::-;293:6;301;309;317;370:3;358:9;349:7;345:23;341:33;338:53;;;387:1;384;377:12;338:53;410:40;440:9;410:40;:::i;:::-;400:50;;469:49;514:2;503:9;499:18;469:49;:::i;:::-;459:59;;537:49;582:2;571:9;567:18;537:49;:::i;:::-;527:59;;605:49;650:2;639:9;635:18;605:49;:::i;:::-;595:59;;196:464;;;;;;;:::o;1307:203::-;1117:9330:89;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_24541":{"entryPoint":null,"id":24541,"parameterSlots":0,"returnSlots":0},"@_addRelayer_24609":{"entryPoint":4156,"id":24609,"parameterSlots":1,"returnSlots":0},"@_nonReentrantAfter_10733":{"entryPoint":null,"id":10733,"parameterSlots":0,"returnSlots":0},"@_nonReentrantBefore_10725":{"entryPoint":2910,"id":10725,"parameterSlots":0,"returnSlots":0},"@_removeRelayer_24632":{"entryPoint":3490,"id":24632,"parameterSlots":1,"returnSlots":0},"@_setConnext_24652":{"entryPoint":3280,"id":24652,"parameterSlots":1,"returnSlots":0},"@_setFeeCollector_24708":{"entryPoint":3973,"id":24708,"parameterSlots":1,"returnSlots":0},"@_setGelatoRelayer_24690":{"entryPoint":3385,"id":24690,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":3659,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":4078,"id":49927,"parameterSlots":1,"returnSlots":0},"@_setSpokeConnector_24672":{"entryPoint":3868,"id":24672,"parameterSlots":1,"returnSlots":0},"@acceptProposedOwner_49887":{"entryPoint":2277,"id":49887,"parameterSlots":0,"returnSlots":0},"@addRelayer_24311":{"entryPoint":2631,"id":24311,"parameterSlots":1,"returnSlots":0},"@allowedRelayer_24175":{"entryPoint":null,"id":24175,"parameterSlots":0,"returnSlots":0},"@connext_24168":{"entryPoint":null,"id":24168,"parameterSlots":0,"returnSlots":0},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@execute_24455":{"entryPoint":1737,"id":24455,"parameterSlots":2,"returnSlots":1},"@feeCollector_24165":{"entryPoint":null,"id":24165,"parameterSlots":0,"returnSlots":0},"@gelatoRelayer_24163":{"entryPoint":null,"id":24163,"parameterSlots":0,"returnSlots":0},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@proposeNewOwner_49841":{"entryPoint":2116,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@proveAndProcess_24491":{"entryPoint":2722,"id":24491,"parameterSlots":6,"returnSlots":0},"@removeRelayer_24327":{"entryPoint":1468,"id":24327,"parameterSlots":1,"returnSlots":0},"@renounceOwnership_49874":{"entryPoint":1559,"id":49874,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@sendValue_11206":{"entryPoint":2999,"id":11206,"parameterSlots":2,"returnSlots":0},"@send_24527":{"entryPoint":2389,"id":24527,"parameterSlots":3,"returnSlots":0},"@setConnext_24343":{"entryPoint":1273,"id":24343,"parameterSlots":1,"returnSlots":0},"@setFeeCollector_24391":{"entryPoint":2025,"id":24391,"parameterSlots":1,"returnSlots":0},"@setGelatoRelayer_24375":{"entryPoint":1377,"id":24375,"parameterSlots":1,"returnSlots":0},"@setSpokeConnector_24359":{"entryPoint":1934,"id":24359,"parameterSlots":1,"returnSlots":0},"@spokeConnector_24171":{"entryPoint":null,"id":24171,"parameterSlots":0,"returnSlots":0},"@transferRelayerFee_24585":{"entryPoint":3760,"id":24585,"parameterSlots":1,"returnSlots":0},"@withdraw_24428":{"entryPoint":1142,"id":24428,"parameterSlots":0,"returnSlots":0},"abi_decode_address":{"entryPoint":4321,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_bytes32_calldata":{"entryPoint":4675,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool":{"entryPoint":4973,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":4349,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_struct$_Proof_$24133_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256t_uint256":{"entryPoint":4693,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_bytes32_fromMemory":{"entryPoint":5843,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes_memory_ptrt_uint256t_uint256":{"entryPoint":4479,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_struct$_ExecuteArgs_$29365_calldata_ptrt_uint256":{"entryPoint":4383,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint32":{"entryPoint":4953,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_address_dyn_calldata":{"entryPoint":5180,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_bytes32_calldata":{"entryPoint":5946,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_bytes_calldata_dyn_calldata":{"entryPoint":5251,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_bytes_calldata":{"entryPoint":5066,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_array$_t_struct$_Proof_$24133_calldata_ptr_$dyn_calldata_ptr_t_bytes32_t_array$_t_bytes32_$32_calldata_ptr_t_uint256__to_t_array$_t_struct$_Proof_$24133_memory_ptr_$dyn_memory_ptr_t_bytes32_t_array$_t_bytes32_$32_memory_ptr_t_uint256__fromStack_reversed":{"entryPoint":5956,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":5868,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IConnext_$26846__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_ISpokeConnector_$24154__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_61fc3f77ebc090777f567969ad9823cf6334ab888acb385ca72668ec5adbde80__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":4855,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8e7e8fcd400a5d12d3bcb2f74ef1d253cc1ee9f80325b4481ab4dffdf753068f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":4919,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_dedd704501704f7991a32fb105552a4ab47a52c46817293082f14fd934f9f8cc__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e11eb83f9b11acb18ab039411915a354a75afc390de576b7a0065bfcb50b4e9b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_ExecuteArgs_$29365_calldata_ptr__to_t_struct$_ExecuteArgs_$29365_memory_ptr__fromStack_reversed":{"entryPoint":5344,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_uint32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"calldata_access_array_address_dyn_calldata":{"entryPoint":5107,"id":null,"parameterSlots":2,"returnSlots":2},"calldata_access_bytes_calldata":{"entryPoint":4989,"id":null,"parameterSlots":2,"returnSlots":2},"checked_sub_t_uint256":{"entryPoint":4886,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x41":{"entryPoint":4457,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:16639:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"143:119:181","statements":[{"nodeType":"YulAssignment","src":"153:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"165:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"176:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"161:3:181"},"nodeType":"YulFunctionCall","src":"161:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"153:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"195:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"206:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"188:6:181"},"nodeType":"YulFunctionCall","src":"188:25:181"},"nodeType":"YulExpressionStatement","src":"188:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"233:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"244:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"229:3:181"},"nodeType":"YulFunctionCall","src":"229:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"249:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"222:6:181"},"nodeType":"YulFunctionCall","src":"222:34:181"},"nodeType":"YulExpressionStatement","src":"222:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"115:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"123:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"134:4:181","type":""}],"src":"14:248:181"},{"body":{"nodeType":"YulBlock","src":"316:124:181","statements":[{"nodeType":"YulAssignment","src":"326:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"348:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"335:12:181"},"nodeType":"YulFunctionCall","src":"335:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"326:5:181"}]},{"body":{"nodeType":"YulBlock","src":"418:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"427:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"430:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"420:6:181"},"nodeType":"YulFunctionCall","src":"420:12:181"},"nodeType":"YulExpressionStatement","src":"420:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"377:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"388:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"403:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"408:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"399:3:181"},"nodeType":"YulFunctionCall","src":"399:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"412:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"395:3:181"},"nodeType":"YulFunctionCall","src":"395:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"384:3:181"},"nodeType":"YulFunctionCall","src":"384:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"374:2:181"},"nodeType":"YulFunctionCall","src":"374:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"367:6:181"},"nodeType":"YulFunctionCall","src":"367:50:181"},"nodeType":"YulIf","src":"364:70:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"295:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"306:5:181","type":""}],"src":"267:173:181"},{"body":{"nodeType":"YulBlock","src":"515:116:181","statements":[{"body":{"nodeType":"YulBlock","src":"561:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"570:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"573:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"563:6:181"},"nodeType":"YulFunctionCall","src":"563:12:181"},"nodeType":"YulExpressionStatement","src":"563:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"536:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"545:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"532:3:181"},"nodeType":"YulFunctionCall","src":"532:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"557:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"528:3:181"},"nodeType":"YulFunctionCall","src":"528:32:181"},"nodeType":"YulIf","src":"525:52:181"},{"nodeType":"YulAssignment","src":"586:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"615:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"596:18:181"},"nodeType":"YulFunctionCall","src":"596:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"586:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"481:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"492:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"504:6:181","type":""}],"src":"445:186:181"},{"body":{"nodeType":"YulBlock","src":"677:50:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"694:3:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"713:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"706:6:181"},"nodeType":"YulFunctionCall","src":"706:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"699:6:181"},"nodeType":"YulFunctionCall","src":"699:21:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"687:6:181"},"nodeType":"YulFunctionCall","src":"687:34:181"},"nodeType":"YulExpressionStatement","src":"687:34:181"}]},"name":"abi_encode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"661:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"668:3:181","type":""}],"src":"636:91:181"},{"body":{"nodeType":"YulBlock","src":"827:92:181","statements":[{"nodeType":"YulAssignment","src":"837:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"849:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"860:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"845:3:181"},"nodeType":"YulFunctionCall","src":"845:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"837:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"879:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"904:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"897:6:181"},"nodeType":"YulFunctionCall","src":"897:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"890:6:181"},"nodeType":"YulFunctionCall","src":"890:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"872:6:181"},"nodeType":"YulFunctionCall","src":"872:41:181"},"nodeType":"YulExpressionStatement","src":"872:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"796:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"807:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"818:4:181","type":""}],"src":"732:187:181"},{"body":{"nodeType":"YulBlock","src":"1025:76:181","statements":[{"nodeType":"YulAssignment","src":"1035:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1047:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1058:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1043:3:181"},"nodeType":"YulFunctionCall","src":"1043:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1035:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1077:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"1088:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1070:6:181"},"nodeType":"YulFunctionCall","src":"1070:25:181"},"nodeType":"YulExpressionStatement","src":"1070:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"994:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1005:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1016:4:181","type":""}],"src":"924:177:181"},{"body":{"nodeType":"YulBlock","src":"1150:60:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1167:3:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1176:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1191:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1196:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1187:3:181"},"nodeType":"YulFunctionCall","src":"1187:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1200:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1183:3:181"},"nodeType":"YulFunctionCall","src":"1183:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1172:3:181"},"nodeType":"YulFunctionCall","src":"1172:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1160:6:181"},"nodeType":"YulFunctionCall","src":"1160:44:181"},"nodeType":"YulExpressionStatement","src":"1160:44:181"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1134:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"1141:3:181","type":""}],"src":"1106:104:181"},{"body":{"nodeType":"YulBlock","src":"1316:102:181","statements":[{"nodeType":"YulAssignment","src":"1326:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1338:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1349:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1334:3:181"},"nodeType":"YulFunctionCall","src":"1334:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1326:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1368:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1383:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1399:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1404:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1395:3:181"},"nodeType":"YulFunctionCall","src":"1395:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1408:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1391:3:181"},"nodeType":"YulFunctionCall","src":"1391:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1379:3:181"},"nodeType":"YulFunctionCall","src":"1379:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1361:6:181"},"nodeType":"YulFunctionCall","src":"1361:51:181"},"nodeType":"YulExpressionStatement","src":"1361:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1285:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1296:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1307:4:181","type":""}],"src":"1215:203:181"},{"body":{"nodeType":"YulBlock","src":"1542:341:181","statements":[{"body":{"nodeType":"YulBlock","src":"1588:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1597:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1600:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1590:6:181"},"nodeType":"YulFunctionCall","src":"1590:12:181"},"nodeType":"YulExpressionStatement","src":"1590:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1563:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1572:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1559:3:181"},"nodeType":"YulFunctionCall","src":"1559:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1584:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1555:3:181"},"nodeType":"YulFunctionCall","src":"1555:32:181"},"nodeType":"YulIf","src":"1552:52:181"},{"nodeType":"YulVariableDeclaration","src":"1613:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1640:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1627:12:181"},"nodeType":"YulFunctionCall","src":"1627:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1617:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1693:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1702:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1705:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1695:6:181"},"nodeType":"YulFunctionCall","src":"1695:12:181"},"nodeType":"YulExpressionStatement","src":"1695:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1665:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1673:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1662:2:181"},"nodeType":"YulFunctionCall","src":"1662:30:181"},"nodeType":"YulIf","src":"1659:50:181"},{"nodeType":"YulVariableDeclaration","src":"1718:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1732:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1743:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1728:3:181"},"nodeType":"YulFunctionCall","src":"1728:22:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1722:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1789:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1798:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1801:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1791:6:181"},"nodeType":"YulFunctionCall","src":"1791:12:181"},"nodeType":"YulExpressionStatement","src":"1791:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1770:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1779:2:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1766:3:181"},"nodeType":"YulFunctionCall","src":"1766:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"1784:3:181","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1762:3:181"},"nodeType":"YulFunctionCall","src":"1762:26:181"},"nodeType":"YulIf","src":"1759:46:181"},{"nodeType":"YulAssignment","src":"1814:12:181","value":{"name":"_1","nodeType":"YulIdentifier","src":"1824:2:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1814:6:181"}]},{"nodeType":"YulAssignment","src":"1835:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1862:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1873:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1858:3:181"},"nodeType":"YulFunctionCall","src":"1858:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1845:12:181"},"nodeType":"YulFunctionCall","src":"1845:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1835:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_ExecuteArgs_$29365_calldata_ptrt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1500:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1511:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1523:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1531:6:181","type":""}],"src":"1423:460:181"},{"body":{"nodeType":"YulBlock","src":"1989:76:181","statements":[{"nodeType":"YulAssignment","src":"1999:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2011:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2022:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2007:3:181"},"nodeType":"YulFunctionCall","src":"2007:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1999:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2041:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"2052:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2034:6:181"},"nodeType":"YulFunctionCall","src":"2034:25:181"},"nodeType":"YulExpressionStatement","src":"2034:25:181"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1958:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1969:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1980:4:181","type":""}],"src":"1888:177:181"},{"body":{"nodeType":"YulBlock","src":"2196:102:181","statements":[{"nodeType":"YulAssignment","src":"2206:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2218:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2229:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2214:3:181"},"nodeType":"YulFunctionCall","src":"2214:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2206:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2248:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2263:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2279:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2284:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2275:3:181"},"nodeType":"YulFunctionCall","src":"2275:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2288:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2271:3:181"},"nodeType":"YulFunctionCall","src":"2271:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2259:3:181"},"nodeType":"YulFunctionCall","src":"2259:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2241:6:181"},"nodeType":"YulFunctionCall","src":"2241:51:181"},"nodeType":"YulExpressionStatement","src":"2241:51:181"}]},"name":"abi_encode_tuple_t_contract$_ISpokeConnector_$24154__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2165:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2176:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2187:4:181","type":""}],"src":"2070:228:181"},{"body":{"nodeType":"YulBlock","src":"2335:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2352:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2359:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2364:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2355:3:181"},"nodeType":"YulFunctionCall","src":"2355:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2345:6:181"},"nodeType":"YulFunctionCall","src":"2345:31:181"},"nodeType":"YulExpressionStatement","src":"2345:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2392:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2395:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2385:6:181"},"nodeType":"YulFunctionCall","src":"2385:15:181"},"nodeType":"YulExpressionStatement","src":"2385:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2416:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2419:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2409:6:181"},"nodeType":"YulFunctionCall","src":"2409:15:181"},"nodeType":"YulExpressionStatement","src":"2409:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"2303:127:181"},{"body":{"nodeType":"YulBlock","src":"2548:954:181","statements":[{"body":{"nodeType":"YulBlock","src":"2594:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2603:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2606:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2596:6:181"},"nodeType":"YulFunctionCall","src":"2596:12:181"},"nodeType":"YulExpressionStatement","src":"2596:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2569:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2578:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2565:3:181"},"nodeType":"YulFunctionCall","src":"2565:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2590:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2561:3:181"},"nodeType":"YulFunctionCall","src":"2561:32:181"},"nodeType":"YulIf","src":"2558:52:181"},{"nodeType":"YulVariableDeclaration","src":"2619:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2646:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2633:12:181"},"nodeType":"YulFunctionCall","src":"2633:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2623:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2665:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2675:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2669:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2720:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2729:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2732:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2722:6:181"},"nodeType":"YulFunctionCall","src":"2722:12:181"},"nodeType":"YulExpressionStatement","src":"2722:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2708:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2716:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2705:2:181"},"nodeType":"YulFunctionCall","src":"2705:14:181"},"nodeType":"YulIf","src":"2702:34:181"},{"nodeType":"YulVariableDeclaration","src":"2745:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2759:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"2770:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2755:3:181"},"nodeType":"YulFunctionCall","src":"2755:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2749:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2825:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2834:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2837:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2827:6:181"},"nodeType":"YulFunctionCall","src":"2827:12:181"},"nodeType":"YulExpressionStatement","src":"2827:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2804:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"2808:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2800:3:181"},"nodeType":"YulFunctionCall","src":"2800:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2815:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2796:3:181"},"nodeType":"YulFunctionCall","src":"2796:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2789:6:181"},"nodeType":"YulFunctionCall","src":"2789:35:181"},"nodeType":"YulIf","src":"2786:55:181"},{"nodeType":"YulVariableDeclaration","src":"2850:26:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2873:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2860:12:181"},"nodeType":"YulFunctionCall","src":"2860:16:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"2854:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2899:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2901:16:181"},"nodeType":"YulFunctionCall","src":"2901:18:181"},"nodeType":"YulExpressionStatement","src":"2901:18:181"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2891:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2895:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2888:2:181"},"nodeType":"YulFunctionCall","src":"2888:10:181"},"nodeType":"YulIf","src":"2885:36:181"},{"nodeType":"YulVariableDeclaration","src":"2930:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2944:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2940:3:181"},"nodeType":"YulFunctionCall","src":"2940:7:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"2934:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2956:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2976:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2970:5:181"},"nodeType":"YulFunctionCall","src":"2970:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2960:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2988:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3010:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3034:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3038:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3030:3:181"},"nodeType":"YulFunctionCall","src":"3030:13:181"},{"name":"_4","nodeType":"YulIdentifier","src":"3045:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3026:3:181"},"nodeType":"YulFunctionCall","src":"3026:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"3050:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3022:3:181"},"nodeType":"YulFunctionCall","src":"3022:31:181"},{"name":"_4","nodeType":"YulIdentifier","src":"3055:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3018:3:181"},"nodeType":"YulFunctionCall","src":"3018:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3006:3:181"},"nodeType":"YulFunctionCall","src":"3006:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2992:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3118:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"3120:16:181"},"nodeType":"YulFunctionCall","src":"3120:18:181"},"nodeType":"YulExpressionStatement","src":"3120:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3077:10:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3089:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3074:2:181"},"nodeType":"YulFunctionCall","src":"3074:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3097:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"3109:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3094:2:181"},"nodeType":"YulFunctionCall","src":"3094:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"3071:2:181"},"nodeType":"YulFunctionCall","src":"3071:46:181"},"nodeType":"YulIf","src":"3068:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3156:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3160:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3149:6:181"},"nodeType":"YulFunctionCall","src":"3149:22:181"},"nodeType":"YulExpressionStatement","src":"3149:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3187:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3195:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3180:6:181"},"nodeType":"YulFunctionCall","src":"3180:18:181"},"nodeType":"YulExpressionStatement","src":"3180:18:181"},{"body":{"nodeType":"YulBlock","src":"3246:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3255:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3258:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3248:6:181"},"nodeType":"YulFunctionCall","src":"3248:12:181"},"nodeType":"YulExpressionStatement","src":"3248:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3221:2:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3225:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3217:3:181"},"nodeType":"YulFunctionCall","src":"3217:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3230:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3213:3:181"},"nodeType":"YulFunctionCall","src":"3213:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3237:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3210:2:181"},"nodeType":"YulFunctionCall","src":"3210:35:181"},"nodeType":"YulIf","src":"3207:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3288:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3296:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3284:3:181"},"nodeType":"YulFunctionCall","src":"3284:17:181"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3307:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3311:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3303:3:181"},"nodeType":"YulFunctionCall","src":"3303:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3318:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3271:12:181"},"nodeType":"YulFunctionCall","src":"3271:50:181"},"nodeType":"YulExpressionStatement","src":"3271:50:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3345:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3353:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3341:3:181"},"nodeType":"YulFunctionCall","src":"3341:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"3358:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3337:3:181"},"nodeType":"YulFunctionCall","src":"3337:26:181"},{"kind":"number","nodeType":"YulLiteral","src":"3365:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3330:6:181"},"nodeType":"YulFunctionCall","src":"3330:37:181"},"nodeType":"YulExpressionStatement","src":"3330:37:181"},{"nodeType":"YulAssignment","src":"3376:16:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"3386:6:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3376:6:181"}]},{"nodeType":"YulAssignment","src":"3401:44:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3428:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3439:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3424:3:181"},"nodeType":"YulFunctionCall","src":"3424:20:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3411:12:181"},"nodeType":"YulFunctionCall","src":"3411:34:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3401:6:181"}]},{"nodeType":"YulAssignment","src":"3454:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3481:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3492:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3477:3:181"},"nodeType":"YulFunctionCall","src":"3477:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3464:12:181"},"nodeType":"YulFunctionCall","src":"3464:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3454:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptrt_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2498:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2509:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2521:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2529:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2537:6:181","type":""}],"src":"2435:1067:181"},{"body":{"nodeType":"YulBlock","src":"3626:102:181","statements":[{"nodeType":"YulAssignment","src":"3636:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3648:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3659:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3644:3:181"},"nodeType":"YulFunctionCall","src":"3644:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3636:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3678:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3693:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3709:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3714:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3705:3:181"},"nodeType":"YulFunctionCall","src":"3705:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3718:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3701:3:181"},"nodeType":"YulFunctionCall","src":"3701:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3689:3:181"},"nodeType":"YulFunctionCall","src":"3689:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3671:6:181"},"nodeType":"YulFunctionCall","src":"3671:51:181"},"nodeType":"YulExpressionStatement","src":"3671:51:181"}]},"name":"abi_encode_tuple_t_contract$_IConnext_$26846__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3595:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3606:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3617:4:181","type":""}],"src":"3507:221:181"},{"body":{"nodeType":"YulBlock","src":"3805:89:181","statements":[{"nodeType":"YulAssignment","src":"3815:18:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"3827:6:181"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"3815:8:181"}]},{"body":{"nodeType":"YulBlock","src":"3872:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3881:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3884:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3874:6:181"},"nodeType":"YulFunctionCall","src":"3874:12:181"},"nodeType":"YulExpressionStatement","src":"3874:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3852:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3860:4:181","type":"","value":"1024"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3848:3:181"},"nodeType":"YulFunctionCall","src":"3848:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"3867:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3845:2:181"},"nodeType":"YulFunctionCall","src":"3845:26:181"},"nodeType":"YulIf","src":"3842:46:181"}]},"name":"abi_decode_array_bytes32_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3776:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"3784:3:181","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"3792:8:181","type":""}],"src":"3733:161:181"},{"body":{"nodeType":"YulBlock","src":"4124:756:181","statements":[{"body":{"nodeType":"YulBlock","src":"4172:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4181:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4184:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4174:6:181"},"nodeType":"YulFunctionCall","src":"4174:12:181"},"nodeType":"YulExpressionStatement","src":"4174:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4145:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"4154:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4141:3:181"},"nodeType":"YulFunctionCall","src":"4141:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"4166:4:181","type":"","value":"1152"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4137:3:181"},"nodeType":"YulFunctionCall","src":"4137:34:181"},"nodeType":"YulIf","src":"4134:54:181"},{"nodeType":"YulVariableDeclaration","src":"4197:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4224:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4211:12:181"},"nodeType":"YulFunctionCall","src":"4211:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"4201:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4243:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4253:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4247:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4298:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4307:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4310:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4300:6:181"},"nodeType":"YulFunctionCall","src":"4300:12:181"},"nodeType":"YulExpressionStatement","src":"4300:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4286:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4294:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4283:2:181"},"nodeType":"YulFunctionCall","src":"4283:14:181"},"nodeType":"YulIf","src":"4280:34:181"},{"nodeType":"YulVariableDeclaration","src":"4323:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4337:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"4348:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4333:3:181"},"nodeType":"YulFunctionCall","src":"4333:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"4327:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4403:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4412:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4415:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4405:6:181"},"nodeType":"YulFunctionCall","src":"4405:12:181"},"nodeType":"YulExpressionStatement","src":"4405:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4382:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4386:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4378:3:181"},"nodeType":"YulFunctionCall","src":"4378:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4393:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4374:3:181"},"nodeType":"YulFunctionCall","src":"4374:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4367:6:181"},"nodeType":"YulFunctionCall","src":"4367:35:181"},"nodeType":"YulIf","src":"4364:55:181"},{"nodeType":"YulVariableDeclaration","src":"4428:30:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4455:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4442:12:181"},"nodeType":"YulFunctionCall","src":"4442:16:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"4432:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4485:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4494:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4497:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4487:6:181"},"nodeType":"YulFunctionCall","src":"4487:12:181"},"nodeType":"YulExpressionStatement","src":"4487:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4473:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4481:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4470:2:181"},"nodeType":"YulFunctionCall","src":"4470:14:181"},"nodeType":"YulIf","src":"4467:34:181"},{"body":{"nodeType":"YulBlock","src":"4561:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4570:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4573:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4563:6:181"},"nodeType":"YulFunctionCall","src":"4563:12:181"},"nodeType":"YulExpressionStatement","src":"4563:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4524:2:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4532:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"4535:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4528:3:181"},"nodeType":"YulFunctionCall","src":"4528:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4520:3:181"},"nodeType":"YulFunctionCall","src":"4520:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"4545:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4516:3:181"},"nodeType":"YulFunctionCall","src":"4516:34:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4552:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4513:2:181"},"nodeType":"YulFunctionCall","src":"4513:47:181"},"nodeType":"YulIf","src":"4510:67:181"},{"nodeType":"YulAssignment","src":"4586:23:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4600:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4604:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4596:3:181"},"nodeType":"YulFunctionCall","src":"4596:13:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4586:6:181"}]},{"nodeType":"YulAssignment","src":"4618:16:181","value":{"name":"length","nodeType":"YulIdentifier","src":"4628:6:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4618:6:181"}]},{"nodeType":"YulAssignment","src":"4643:44:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4670:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4681:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4666:3:181"},"nodeType":"YulFunctionCall","src":"4666:20:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4653:12:181"},"nodeType":"YulFunctionCall","src":"4653:34:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4643:6:181"}]},{"nodeType":"YulAssignment","src":"4696:72:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4744:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4755:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4740:3:181"},"nodeType":"YulFunctionCall","src":"4740:18:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4760:7:181"}],"functionName":{"name":"abi_decode_array_bytes32_calldata","nodeType":"YulIdentifier","src":"4706:33:181"},"nodeType":"YulFunctionCall","src":"4706:62:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4696:6:181"}]},{"nodeType":"YulAssignment","src":"4777:44:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4804:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4815:4:181","type":"","value":"1088"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4800:3:181"},"nodeType":"YulFunctionCall","src":"4800:20:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4787:12:181"},"nodeType":"YulFunctionCall","src":"4787:34:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"4777:6:181"}]},{"nodeType":"YulAssignment","src":"4830:44:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4857:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4868:4:181","type":"","value":"1120"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4853:3:181"},"nodeType":"YulFunctionCall","src":"4853:20:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4840:12:181"},"nodeType":"YulFunctionCall","src":"4840:34:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"4830:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_struct$_Proof_$24133_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4050:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4061:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4073:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4081:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4089:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4097:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"4105:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"4113:6:181","type":""}],"src":"3899:981:181"},{"body":{"nodeType":"YulBlock","src":"5059:154:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5076:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5087:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5069:6:181"},"nodeType":"YulFunctionCall","src":"5069:21:181"},"nodeType":"YulExpressionStatement","src":"5069:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5110:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5121:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5106:3:181"},"nodeType":"YulFunctionCall","src":"5106:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5126:1:181","type":"","value":"5"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5099:6:181"},"nodeType":"YulFunctionCall","src":"5099:29:181"},"nodeType":"YulExpressionStatement","src":"5099:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5148:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5159:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5144:3:181"},"nodeType":"YulFunctionCall","src":"5144:18:181"},{"hexValue":"656d707479","kind":"string","nodeType":"YulLiteral","src":"5164:7:181","type":"","value":"empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5137:6:181"},"nodeType":"YulFunctionCall","src":"5137:35:181"},"nodeType":"YulExpressionStatement","src":"5137:35:181"},{"nodeType":"YulAssignment","src":"5181:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5193:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5204:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5189:3:181"},"nodeType":"YulFunctionCall","src":"5189:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5181:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_61fc3f77ebc090777f567969ad9823cf6334ab888acb385ca72668ec5adbde80__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5036:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5050:4:181","type":""}],"src":"4885:328:181"},{"body":{"nodeType":"YulBlock","src":"5267:176:181","statements":[{"nodeType":"YulAssignment","src":"5277:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5289:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"5292:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5285:3:181"},"nodeType":"YulFunctionCall","src":"5285:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"5277:4:181"}]},{"body":{"nodeType":"YulBlock","src":"5326:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5347:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5354:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"5359:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5350:3:181"},"nodeType":"YulFunctionCall","src":"5350:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5340:6:181"},"nodeType":"YulFunctionCall","src":"5340:31:181"},"nodeType":"YulExpressionStatement","src":"5340:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5391:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5394:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5384:6:181"},"nodeType":"YulFunctionCall","src":"5384:15:181"},"nodeType":"YulExpressionStatement","src":"5384:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5419:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5422:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5412:6:181"},"nodeType":"YulFunctionCall","src":"5412:15:181"},"nodeType":"YulExpressionStatement","src":"5412:15:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"5309:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"5315:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5306:2:181"},"nodeType":"YulFunctionCall","src":"5306:11:181"},"nodeType":"YulIf","src":"5303:134:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"5249:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"5252:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"5258:4:181","type":""}],"src":"5218:225:181"},{"body":{"nodeType":"YulBlock","src":"5622:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5639:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5650:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5632:6:181"},"nodeType":"YulFunctionCall","src":"5632:21:181"},"nodeType":"YulExpressionStatement","src":"5632:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5673:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5684:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5669:3:181"},"nodeType":"YulFunctionCall","src":"5669:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5689:1:181","type":"","value":"8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5662:6:181"},"nodeType":"YulFunctionCall","src":"5662:29:181"},"nodeType":"YulExpressionStatement","src":"5662:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5711:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5722:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5707:3:181"},"nodeType":"YulFunctionCall","src":"5707:18:181"},{"hexValue":"2172656c61796572","kind":"string","nodeType":"YulLiteral","src":"5727:10:181","type":"","value":"!relayer"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5700:6:181"},"nodeType":"YulFunctionCall","src":"5700:38:181"},"nodeType":"YulExpressionStatement","src":"5700:38:181"},{"nodeType":"YulAssignment","src":"5747:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5759:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5770:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5755:3:181"},"nodeType":"YulFunctionCall","src":"5755:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5747:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8e7e8fcd400a5d12d3bcb2f74ef1d253cc1ee9f80325b4481ab4dffdf753068f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5599:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5613:4:181","type":""}],"src":"5448:331:181"},{"body":{"nodeType":"YulBlock","src":"5832:115:181","statements":[{"nodeType":"YulAssignment","src":"5842:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5864:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5851:12:181"},"nodeType":"YulFunctionCall","src":"5851:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"5842:5:181"}]},{"body":{"nodeType":"YulBlock","src":"5925:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5934:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5937:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5927:6:181"},"nodeType":"YulFunctionCall","src":"5927:12:181"},"nodeType":"YulExpressionStatement","src":"5927:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5893:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5904:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5911:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5900:3:181"},"nodeType":"YulFunctionCall","src":"5900:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5890:2:181"},"nodeType":"YulFunctionCall","src":"5890:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5883:6:181"},"nodeType":"YulFunctionCall","src":"5883:41:181"},"nodeType":"YulIf","src":"5880:61:181"}]},"name":"abi_decode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"5811:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"5822:5:181","type":""}],"src":"5784:163:181"},{"body":{"nodeType":"YulBlock","src":"5995:51:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6012:3:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6021:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"6028:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6017:3:181"},"nodeType":"YulFunctionCall","src":"6017:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6005:6:181"},"nodeType":"YulFunctionCall","src":"6005:35:181"},"nodeType":"YulExpressionStatement","src":"6005:35:181"}]},"name":"abi_encode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5979:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5986:3:181","type":""}],"src":"5952:94:181"},{"body":{"nodeType":"YulBlock","src":"6097:114:181","statements":[{"nodeType":"YulAssignment","src":"6107:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6129:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6116:12:181"},"nodeType":"YulFunctionCall","src":"6116:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"6107:5:181"}]},{"body":{"nodeType":"YulBlock","src":"6189:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6198:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6201:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6191:6:181"},"nodeType":"YulFunctionCall","src":"6191:12:181"},"nodeType":"YulExpressionStatement","src":"6191:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6158:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6179:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6172:6:181"},"nodeType":"YulFunctionCall","src":"6172:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6165:6:181"},"nodeType":"YulFunctionCall","src":"6165:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"6155:2:181"},"nodeType":"YulFunctionCall","src":"6155:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6148:6:181"},"nodeType":"YulFunctionCall","src":"6148:40:181"},"nodeType":"YulIf","src":"6145:60:181"}]},"name":"abi_decode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"6076:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"6087:5:181","type":""}],"src":"6051:160:181"},{"body":{"nodeType":"YulBlock","src":"6292:424:181","statements":[{"nodeType":"YulVariableDeclaration","src":"6302:43:181","value":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"6341:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6328:12:181"},"nodeType":"YulFunctionCall","src":"6328:17:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"6306:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6434:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6443:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6446:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6436:6:181"},"nodeType":"YulFunctionCall","src":"6436:12:181"},"nodeType":"YulExpressionStatement","src":"6436:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"6368:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"6396:12:181"},"nodeType":"YulFunctionCall","src":"6396:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"6412:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6392:3:181"},"nodeType":"YulFunctionCall","src":"6392:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6427:2:181","type":"","value":"30"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6423:3:181"},"nodeType":"YulFunctionCall","src":"6423:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6388:3:181"},"nodeType":"YulFunctionCall","src":"6388:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6364:3:181"},"nodeType":"YulFunctionCall","src":"6364:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6357:6:181"},"nodeType":"YulFunctionCall","src":"6357:76:181"},"nodeType":"YulIf","src":"6354:96:181"},{"nodeType":"YulVariableDeclaration","src":"6459:48:181","value":{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"6478:18:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"6498:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6474:3:181"},"nodeType":"YulFunctionCall","src":"6474:33:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"6463:7:181","type":""}]},{"nodeType":"YulAssignment","src":"6516:31:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6539:7:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6526:12:181"},"nodeType":"YulFunctionCall","src":"6526:21:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"6516:6:181"}]},{"nodeType":"YulAssignment","src":"6556:27:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6569:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"6578:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6565:3:181"},"nodeType":"YulFunctionCall","src":"6565:18:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"6556:5:181"}]},{"body":{"nodeType":"YulBlock","src":"6626:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6635:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6638:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6628:6:181"},"nodeType":"YulFunctionCall","src":"6628:12:181"},"nodeType":"YulExpressionStatement","src":"6628:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6598:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6606:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6595:2:181"},"nodeType":"YulFunctionCall","src":"6595:30:181"},"nodeType":"YulIf","src":"6592:50:181"},{"body":{"nodeType":"YulBlock","src":"6694:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6703:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6706:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6696:6:181"},"nodeType":"YulFunctionCall","src":"6696:12:181"},"nodeType":"YulExpressionStatement","src":"6696:12:181"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6658:5:181"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"6669:12:181"},"nodeType":"YulFunctionCall","src":"6669:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"6685:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6665:3:181"},"nodeType":"YulFunctionCall","src":"6665:27:181"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"6654:3:181"},"nodeType":"YulFunctionCall","src":"6654:39:181"},"nodeType":"YulIf","src":"6651:59:181"}]},"name":"calldata_access_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"6256:8:181","type":""},{"name":"ptr","nodeType":"YulTypedName","src":"6266:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"6274:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"6281:6:181","type":""}],"src":"6216:500:181"},{"body":{"nodeType":"YulBlock","src":"6787:200:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6804:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"6809:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6797:6:181"},"nodeType":"YulFunctionCall","src":"6797:19:181"},"nodeType":"YulExpressionStatement","src":"6797:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6842:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"6847:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6838:3:181"},"nodeType":"YulFunctionCall","src":"6838:14:181"},{"name":"start","nodeType":"YulIdentifier","src":"6854:5:181"},{"name":"length","nodeType":"YulIdentifier","src":"6861:6:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"6825:12:181"},"nodeType":"YulFunctionCall","src":"6825:43:181"},"nodeType":"YulExpressionStatement","src":"6825:43:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6892:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"6897:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6888:3:181"},"nodeType":"YulFunctionCall","src":"6888:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"6906:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6884:3:181"},"nodeType":"YulFunctionCall","src":"6884:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"6913:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6877:6:181"},"nodeType":"YulFunctionCall","src":"6877:38:181"},"nodeType":"YulExpressionStatement","src":"6877:38:181"},{"nodeType":"YulAssignment","src":"6924:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6939:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6952:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6960:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6948:3:181"},"nodeType":"YulFunctionCall","src":"6948:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6969:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6965:3:181"},"nodeType":"YulFunctionCall","src":"6965:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6944:3:181"},"nodeType":"YulFunctionCall","src":"6944:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6935:3:181"},"nodeType":"YulFunctionCall","src":"6935:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"6976:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6931:3:181"},"nodeType":"YulFunctionCall","src":"6931:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"6924:3:181"}]}]},"name":"abi_encode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"6756:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"6763:6:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"6771:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"6779:3:181","type":""}],"src":"6721:266:181"},{"body":{"nodeType":"YulBlock","src":"7080:432:181","statements":[{"nodeType":"YulVariableDeclaration","src":"7090:43:181","value":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"7129:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7116:12:181"},"nodeType":"YulFunctionCall","src":"7116:17:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"7094:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7222:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7231:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7234:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7224:6:181"},"nodeType":"YulFunctionCall","src":"7224:12:181"},"nodeType":"YulExpressionStatement","src":"7224:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"7156:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"7184:12:181"},"nodeType":"YulFunctionCall","src":"7184:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"7200:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7180:3:181"},"nodeType":"YulFunctionCall","src":"7180:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7215:2:181","type":"","value":"30"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7211:3:181"},"nodeType":"YulFunctionCall","src":"7211:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7176:3:181"},"nodeType":"YulFunctionCall","src":"7176:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7152:3:181"},"nodeType":"YulFunctionCall","src":"7152:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7145:6:181"},"nodeType":"YulFunctionCall","src":"7145:76:181"},"nodeType":"YulIf","src":"7142:96:181"},{"nodeType":"YulVariableDeclaration","src":"7247:48:181","value":{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"7266:18:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"7286:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7262:3:181"},"nodeType":"YulFunctionCall","src":"7262:33:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7251:7:181","type":""}]},{"nodeType":"YulAssignment","src":"7304:31:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7327:7:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7314:12:181"},"nodeType":"YulFunctionCall","src":"7314:21:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"7304:6:181"}]},{"nodeType":"YulAssignment","src":"7344:27:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7357:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"7366:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7353:3:181"},"nodeType":"YulFunctionCall","src":"7353:18:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"7344:5:181"}]},{"body":{"nodeType":"YulBlock","src":"7414:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7423:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7426:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7416:6:181"},"nodeType":"YulFunctionCall","src":"7416:12:181"},"nodeType":"YulExpressionStatement","src":"7416:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"7386:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"7394:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7383:2:181"},"nodeType":"YulFunctionCall","src":"7383:30:181"},"nodeType":"YulIf","src":"7380:50:181"},{"body":{"nodeType":"YulBlock","src":"7490:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7499:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7502:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7492:6:181"},"nodeType":"YulFunctionCall","src":"7492:12:181"},"nodeType":"YulExpressionStatement","src":"7492:12:181"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7446:5:181"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"7457:12:181"},"nodeType":"YulFunctionCall","src":"7457:14:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7477:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"7480:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7473:3:181"},"nodeType":"YulFunctionCall","src":"7473:14:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7453:3:181"},"nodeType":"YulFunctionCall","src":"7453:35:181"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"7442:3:181"},"nodeType":"YulFunctionCall","src":"7442:47:181"},"nodeType":"YulIf","src":"7439:67:181"}]},"name":"calldata_access_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"7044:8:181","type":""},{"name":"ptr","nodeType":"YulTypedName","src":"7054:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"7062:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"7069:6:181","type":""}],"src":"6992:520:181"},{"body":{"nodeType":"YulBlock","src":"7595:369:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7612:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"7617:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7605:6:181"},"nodeType":"YulFunctionCall","src":"7605:19:181"},"nodeType":"YulExpressionStatement","src":"7605:19:181"},{"nodeType":"YulVariableDeclaration","src":"7633:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7643:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7637:2:181","type":""}]},{"nodeType":"YulAssignment","src":"7656:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7667:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7672:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7663:3:181"},"nodeType":"YulFunctionCall","src":"7663:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"7656:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"7684:19:181","value":{"name":"value","nodeType":"YulIdentifier","src":"7698:5:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"7688:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7712:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7721:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"7716:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7780:159:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7801:3:181"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"7829:6:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"7810:18:181"},"nodeType":"YulFunctionCall","src":"7810:26:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7846:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"7851:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7842:3:181"},"nodeType":"YulFunctionCall","src":"7842:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"7855:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7838:3:181"},"nodeType":"YulFunctionCall","src":"7838:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7806:3:181"},"nodeType":"YulFunctionCall","src":"7806:52:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7794:6:181"},"nodeType":"YulFunctionCall","src":"7794:65:181"},"nodeType":"YulExpressionStatement","src":"7794:65:181"},{"nodeType":"YulAssignment","src":"7872:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7883:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7888:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7879:3:181"},"nodeType":"YulFunctionCall","src":"7879:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"7872:3:181"}]},{"nodeType":"YulAssignment","src":"7904:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"7918:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7926:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7914:3:181"},"nodeType":"YulFunctionCall","src":"7914:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"7904:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"7742:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"7745:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7739:2:181"},"nodeType":"YulFunctionCall","src":"7739:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"7753:18:181","statements":[{"nodeType":"YulAssignment","src":"7755:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"7764:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"7767:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7760:3:181"},"nodeType":"YulFunctionCall","src":"7760:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"7755:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"7735:3:181","statements":[]},"src":"7731:208:181"},{"nodeType":"YulAssignment","src":"7948:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"7955:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"7948:3:181"}]}]},"name":"abi_encode_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"7564:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"7571:6:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"7579:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"7587:3:181","type":""}],"src":"7517:447:181"},{"body":{"nodeType":"YulBlock","src":"8054:629:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8071:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"8076:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8064:6:181"},"nodeType":"YulFunctionCall","src":"8064:19:181"},"nodeType":"YulExpressionStatement","src":"8064:19:181"},{"nodeType":"YulVariableDeclaration","src":"8092:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8102:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8096:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8115:31:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8138:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8143:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8134:3:181"},"nodeType":"YulFunctionCall","src":"8134:12:181"},"variables":[{"name":"updated_pos","nodeType":"YulTypedName","src":"8119:11:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8155:24:181","value":{"name":"updated_pos","nodeType":"YulIdentifier","src":"8168:11:181"},"variables":[{"name":"pos_1","nodeType":"YulTypedName","src":"8159:5:181","type":""}]},{"nodeType":"YulAssignment","src":"8188:18:181","value":{"name":"updated_pos","nodeType":"YulIdentifier","src":"8195:11:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"8188:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"8215:38:181","value":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"8231:5:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8242:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"8245:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8238:3:181"},"nodeType":"YulFunctionCall","src":"8238:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8227:3:181"},"nodeType":"YulFunctionCall","src":"8227:26:181"},"variables":[{"name":"tail","nodeType":"YulTypedName","src":"8219:4:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8262:19:181","value":{"name":"value","nodeType":"YulIdentifier","src":"8276:5:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"8266:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8290:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8299:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"8294:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8358:299:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8379:3:181"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"8388:4:181"},{"name":"pos_1","nodeType":"YulIdentifier","src":"8394:5:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8384:3:181"},"nodeType":"YulFunctionCall","src":"8384:16:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8372:6:181"},"nodeType":"YulFunctionCall","src":"8372:29:181"},"nodeType":"YulExpressionStatement","src":"8372:29:181"},{"nodeType":"YulVariableDeclaration","src":"8414:81:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8481:5:181"},{"name":"srcPtr","nodeType":"YulIdentifier","src":"8488:6:181"}],"functionName":{"name":"calldata_access_bytes_calldata","nodeType":"YulIdentifier","src":"8450:30:181"},"nodeType":"YulFunctionCall","src":"8450:45:181"},"variables":[{"name":"elementValue0","nodeType":"YulTypedName","src":"8418:13:181","type":""},{"name":"elementValue1","nodeType":"YulTypedName","src":"8433:13:181","type":""}]},{"nodeType":"YulAssignment","src":"8508:69:181","value":{"arguments":[{"name":"elementValue0","nodeType":"YulIdentifier","src":"8542:13:181"},{"name":"elementValue1","nodeType":"YulIdentifier","src":"8557:13:181"},{"name":"tail","nodeType":"YulIdentifier","src":"8572:4:181"}],"functionName":{"name":"abi_encode_bytes_calldata","nodeType":"YulIdentifier","src":"8516:25:181"},"nodeType":"YulFunctionCall","src":"8516:61:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8508:4:181"}]},{"nodeType":"YulAssignment","src":"8590:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"8604:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8612:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8600:3:181"},"nodeType":"YulFunctionCall","src":"8600:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"8590:6:181"}]},{"nodeType":"YulAssignment","src":"8628:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8639:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8644:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8635:3:181"},"nodeType":"YulFunctionCall","src":"8635:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"8628:3:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"8320:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"8323:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8317:2:181"},"nodeType":"YulFunctionCall","src":"8317:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"8331:18:181","statements":[{"nodeType":"YulAssignment","src":"8333:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"8342:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"8345:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8338:3:181"},"nodeType":"YulFunctionCall","src":"8338:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"8333:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"8313:3:181","statements":[]},"src":"8309:348:181"},{"nodeType":"YulAssignment","src":"8666:11:181","value":{"name":"tail","nodeType":"YulIdentifier","src":"8673:4:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"8666:3:181"}]}]},"name":"abi_encode_array_bytes_calldata_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8023:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"8030:6:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"8038:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"8046:3:181","type":""}],"src":"7969:714:181"},{"body":{"nodeType":"YulBlock","src":"8851:2823:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8868:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8879:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8861:6:181"},"nodeType":"YulFunctionCall","src":"8861:21:181"},"nodeType":"YulExpressionStatement","src":"8861:21:181"},{"nodeType":"YulVariableDeclaration","src":"8891:46:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8930:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8917:12:181"},"nodeType":"YulFunctionCall","src":"8917:20:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"8895:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9025:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9034:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9037:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9027:6:181"},"nodeType":"YulFunctionCall","src":"9027:12:181"},"nodeType":"YulExpressionStatement","src":"9027:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"8960:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"8988:12:181"},"nodeType":"YulFunctionCall","src":"8988:14:181"},{"name":"value0","nodeType":"YulIdentifier","src":"9004:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8984:3:181"},"nodeType":"YulFunctionCall","src":"8984:27:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9017:3:181","type":"","value":"414"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"9013:3:181"},"nodeType":"YulFunctionCall","src":"9013:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8980:3:181"},"nodeType":"YulFunctionCall","src":"8980:42:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8956:3:181"},"nodeType":"YulFunctionCall","src":"8956:67:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8949:6:181"},"nodeType":"YulFunctionCall","src":"8949:75:181"},"nodeType":"YulIf","src":"8946:95:181"},{"nodeType":"YulVariableDeclaration","src":"9050:44:181","value":{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"9067:18:181"},{"name":"value0","nodeType":"YulIdentifier","src":"9087:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9063:3:181"},"nodeType":"YulFunctionCall","src":"9063:31:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9054:5:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9114:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9125:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9110:3:181"},"nodeType":"YulFunctionCall","src":"9110:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9130:4:181","type":"","value":"0xa0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9103:6:181"},"nodeType":"YulFunctionCall","src":"9103:32:181"},"nodeType":"YulExpressionStatement","src":"9103:32:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9180:5:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"9162:17:181"},"nodeType":"YulFunctionCall","src":"9162:24:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9192:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9203:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9188:3:181"},"nodeType":"YulFunctionCall","src":"9188:19:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"9144:17:181"},"nodeType":"YulFunctionCall","src":"9144:64:181"},"nodeType":"YulExpressionStatement","src":"9144:64:181"},{"nodeType":"YulVariableDeclaration","src":"9217:53:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9259:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9266:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9255:3:181"},"nodeType":"YulFunctionCall","src":"9255:14:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"9237:17:181"},"nodeType":"YulFunctionCall","src":"9237:33:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"9221:12:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"9297:12:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9315:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9326:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9311:3:181"},"nodeType":"YulFunctionCall","src":"9311:19:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"9279:17:181"},"nodeType":"YulFunctionCall","src":"9279:52:181"},"nodeType":"YulExpressionStatement","src":"9279:52:181"},{"nodeType":"YulVariableDeclaration","src":"9340:57:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9384:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9391:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9380:3:181"},"nodeType":"YulFunctionCall","src":"9380:16:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"9362:17:181"},"nodeType":"YulFunctionCall","src":"9362:35:181"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"9344:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9406:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"9416:3:181","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9410:2:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"9446:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9466:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9477:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9462:3:181"},"nodeType":"YulFunctionCall","src":"9462:18:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"9428:17:181"},"nodeType":"YulFunctionCall","src":"9428:53:181"},"nodeType":"YulExpressionStatement","src":"9428:53:181"},{"nodeType":"YulVariableDeclaration","src":"9490:58:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9535:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9542:4:181","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9531:3:181"},"nodeType":"YulFunctionCall","src":"9531:16:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"9512:18:181"},"nodeType":"YulFunctionCall","src":"9512:36:181"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"9494:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9557:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"9567:3:181","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"9561:2:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"9598:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9618:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"9629:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9614:3:181"},"nodeType":"YulFunctionCall","src":"9614:18:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"9579:18:181"},"nodeType":"YulFunctionCall","src":"9579:54:181"},"nodeType":"YulExpressionStatement","src":"9579:54:181"},{"nodeType":"YulVariableDeclaration","src":"9642:58:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9687:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9694:4:181","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9683:3:181"},"nodeType":"YulFunctionCall","src":"9683:16:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"9664:18:181"},"nodeType":"YulFunctionCall","src":"9664:36:181"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"9646:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9709:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"9719:3:181","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"9713:2:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"9750:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9770:9:181"},{"name":"_3","nodeType":"YulIdentifier","src":"9781:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9766:3:181"},"nodeType":"YulFunctionCall","src":"9766:18:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"9731:18:181"},"nodeType":"YulFunctionCall","src":"9731:54:181"},"nodeType":"YulExpressionStatement","src":"9731:54:181"},{"nodeType":"YulVariableDeclaration","src":"9794:55:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9836:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9843:4:181","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9832:3:181"},"nodeType":"YulFunctionCall","src":"9832:16:181"}],"functionName":{"name":"abi_decode_bool","nodeType":"YulIdentifier","src":"9816:15:181"},"nodeType":"YulFunctionCall","src":"9816:33:181"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"9798:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9858:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"9868:3:181","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"9862:2:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"9896:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9916:9:181"},{"name":"_4","nodeType":"YulIdentifier","src":"9927:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9912:3:181"},"nodeType":"YulFunctionCall","src":"9912:18:181"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"9880:15:181"},"nodeType":"YulFunctionCall","src":"9880:51:181"},"nodeType":"YulExpressionStatement","src":"9880:51:181"},{"nodeType":"YulVariableDeclaration","src":"9940:90:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10007:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10018:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"10025:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10014:3:181"},"nodeType":"YulFunctionCall","src":"10014:15:181"}],"functionName":{"name":"calldata_access_bytes_calldata","nodeType":"YulIdentifier","src":"9976:30:181"},"nodeType":"YulFunctionCall","src":"9976:54:181"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"9944:14:181","type":""},{"name":"memberValue1","nodeType":"YulTypedName","src":"9960:12:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10039:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10049:6:181","type":"","value":"0x01a0"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"10043:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10064:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10074:3:181","type":"","value":"384"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"10068:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10097:9:181"},{"name":"_6","nodeType":"YulIdentifier","src":"10108:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10093:3:181"},"nodeType":"YulFunctionCall","src":"10093:18:181"},{"name":"_5","nodeType":"YulIdentifier","src":"10113:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10086:6:181"},"nodeType":"YulFunctionCall","src":"10086:30:181"},"nodeType":"YulExpressionStatement","src":"10086:30:181"},{"nodeType":"YulVariableDeclaration","src":"10125:90:181","value":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"10165:14:181"},{"name":"memberValue1","nodeType":"YulIdentifier","src":"10181:12:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10199:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10210:3:181","type":"","value":"608"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10195:3:181"},"nodeType":"YulFunctionCall","src":"10195:19:181"}],"functionName":{"name":"abi_encode_bytes_calldata","nodeType":"YulIdentifier","src":"10139:25:181"},"nodeType":"YulFunctionCall","src":"10139:76:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"10129:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10235:9:181"},{"name":"_5","nodeType":"YulIdentifier","src":"10246:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10231:3:181"},"nodeType":"YulFunctionCall","src":"10231:18:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10268:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"10275:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10264:3:181"},"nodeType":"YulFunctionCall","src":"10264:15:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10251:12:181"},"nodeType":"YulFunctionCall","src":"10251:29:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10224:6:181"},"nodeType":"YulFunctionCall","src":"10224:57:181"},"nodeType":"YulExpressionStatement","src":"10224:57:181"},{"nodeType":"YulVariableDeclaration","src":"10290:56:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10335:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10342:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10331:3:181"},"nodeType":"YulFunctionCall","src":"10331:14:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"10312:18:181"},"nodeType":"YulFunctionCall","src":"10312:34:181"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"10294:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"10374:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10394:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10405:3:181","type":"","value":"448"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10390:3:181"},"nodeType":"YulFunctionCall","src":"10390:19:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"10355:18:181"},"nodeType":"YulFunctionCall","src":"10355:55:181"},"nodeType":"YulExpressionStatement","src":"10355:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10430:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10441:3:181","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10426:3:181"},"nodeType":"YulFunctionCall","src":"10426:19:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10464:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"10471:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10460:3:181"},"nodeType":"YulFunctionCall","src":"10460:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10447:12:181"},"nodeType":"YulFunctionCall","src":"10447:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10419:6:181"},"nodeType":"YulFunctionCall","src":"10419:57:181"},"nodeType":"YulExpressionStatement","src":"10419:57:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10496:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10507:3:181","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10492:3:181"},"nodeType":"YulFunctionCall","src":"10492:19:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10530:5:181"},{"name":"_3","nodeType":"YulIdentifier","src":"10537:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10526:3:181"},"nodeType":"YulFunctionCall","src":"10526:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10513:12:181"},"nodeType":"YulFunctionCall","src":"10513:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10485:6:181"},"nodeType":"YulFunctionCall","src":"10485:57:181"},"nodeType":"YulExpressionStatement","src":"10485:57:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10562:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10573:3:181","type":"","value":"544"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10558:3:181"},"nodeType":"YulFunctionCall","src":"10558:19:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10596:5:181"},{"name":"_4","nodeType":"YulIdentifier","src":"10603:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10592:3:181"},"nodeType":"YulFunctionCall","src":"10592:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10579:12:181"},"nodeType":"YulFunctionCall","src":"10579:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10551:6:181"},"nodeType":"YulFunctionCall","src":"10551:57:181"},"nodeType":"YulExpressionStatement","src":"10551:57:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10628:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10639:3:181","type":"","value":"576"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10624:3:181"},"nodeType":"YulFunctionCall","src":"10624:19:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10662:5:181"},{"name":"_6","nodeType":"YulIdentifier","src":"10669:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10658:3:181"},"nodeType":"YulFunctionCall","src":"10658:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10645:12:181"},"nodeType":"YulFunctionCall","src":"10645:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10617:6:181"},"nodeType":"YulFunctionCall","src":"10617:57:181"},"nodeType":"YulExpressionStatement","src":"10617:57:181"},{"nodeType":"YulVariableDeclaration","src":"10683:105:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10764:6:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10776:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10784:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10772:3:181"},"nodeType":"YulFunctionCall","src":"10772:15:181"}],"functionName":{"name":"calldata_access_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"10721:42:181"},"nodeType":"YulFunctionCall","src":"10721:67:181"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"10687:14:181","type":""},{"name":"memberValue1_1","nodeType":"YulTypedName","src":"10703:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10797:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10811:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10807:3:181"},"nodeType":"YulFunctionCall","src":"10807:7:181"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"10801:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10834:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10845:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10830:3:181"},"nodeType":"YulFunctionCall","src":"10830:20:181"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"10860:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"10868:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10856:3:181"},"nodeType":"YulFunctionCall","src":"10856:22:181"},{"name":"_7","nodeType":"YulIdentifier","src":"10880:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10852:3:181"},"nodeType":"YulFunctionCall","src":"10852:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10823:6:181"},"nodeType":"YulFunctionCall","src":"10823:61:181"},"nodeType":"YulExpressionStatement","src":"10823:61:181"},{"nodeType":"YulVariableDeclaration","src":"10893:91:181","value":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"10945:14:181"},{"name":"memberValue1_1","nodeType":"YulIdentifier","src":"10961:14:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"10977:6:181"}],"functionName":{"name":"abi_encode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"10907:37:181"},"nodeType":"YulFunctionCall","src":"10907:77:181"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"10897:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10993:107:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11074:6:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11086:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11094:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11082:3:181"},"nodeType":"YulFunctionCall","src":"11082:17:181"}],"functionName":{"name":"calldata_access_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"11031:42:181"},"nodeType":"YulFunctionCall","src":"11031:69:181"},"variables":[{"name":"memberValue0_8","nodeType":"YulTypedName","src":"10997:14:181","type":""},{"name":"memberValue1_2","nodeType":"YulTypedName","src":"11013:14:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11120:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11131:4:181","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11116:3:181"},"nodeType":"YulFunctionCall","src":"11116:20:181"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"11146:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"11154:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11142:3:181"},"nodeType":"YulFunctionCall","src":"11142:22:181"},{"name":"_7","nodeType":"YulIdentifier","src":"11166:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11138:3:181"},"nodeType":"YulFunctionCall","src":"11138:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11109:6:181"},"nodeType":"YulFunctionCall","src":"11109:61:181"},"nodeType":"YulExpressionStatement","src":"11109:61:181"},{"nodeType":"YulVariableDeclaration","src":"11179:98:181","value":{"arguments":[{"name":"memberValue0_8","nodeType":"YulIdentifier","src":"11238:14:181"},{"name":"memberValue1_2","nodeType":"YulIdentifier","src":"11254:14:181"},{"name":"tail_2","nodeType":"YulIdentifier","src":"11270:6:181"}],"functionName":{"name":"abi_encode_array_bytes_calldata_dyn_calldata","nodeType":"YulIdentifier","src":"11193:44:181"},"nodeType":"YulFunctionCall","src":"11193:84:181"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"11183:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11286:59:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11331:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11339:4:181","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11327:3:181"},"nodeType":"YulFunctionCall","src":"11327:17:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"11308:18:181"},"nodeType":"YulFunctionCall","src":"11308:37:181"},"variables":[{"name":"memberValue0_9","nodeType":"YulTypedName","src":"11290:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_9","nodeType":"YulIdentifier","src":"11373:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11393:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11404:4:181","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11389:3:181"},"nodeType":"YulFunctionCall","src":"11389:20:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"11354:18:181"},"nodeType":"YulFunctionCall","src":"11354:56:181"},"nodeType":"YulExpressionStatement","src":"11354:56:181"},{"nodeType":"YulVariableDeclaration","src":"11419:96:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11489:6:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11501:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11509:4:181","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11497:3:181"},"nodeType":"YulFunctionCall","src":"11497:17:181"}],"functionName":{"name":"calldata_access_bytes_calldata","nodeType":"YulIdentifier","src":"11458:30:181"},"nodeType":"YulFunctionCall","src":"11458:57:181"},"variables":[{"name":"memberValue0_10","nodeType":"YulTypedName","src":"11423:15:181","type":""},{"name":"memberValue1_3","nodeType":"YulTypedName","src":"11440:14:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11535:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11546:4:181","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11531:3:181"},"nodeType":"YulFunctionCall","src":"11531:20:181"},{"arguments":[{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"11561:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"11569:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11557:3:181"},"nodeType":"YulFunctionCall","src":"11557:22:181"},{"name":"_7","nodeType":"YulIdentifier","src":"11581:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11553:3:181"},"nodeType":"YulFunctionCall","src":"11553:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11524:6:181"},"nodeType":"YulFunctionCall","src":"11524:61:181"},"nodeType":"YulExpressionStatement","src":"11524:61:181"},{"nodeType":"YulAssignment","src":"11594:74:181","value":{"arguments":[{"name":"memberValue0_10","nodeType":"YulIdentifier","src":"11628:15:181"},{"name":"memberValue1_3","nodeType":"YulIdentifier","src":"11645:14:181"},{"name":"tail_3","nodeType":"YulIdentifier","src":"11661:6:181"}],"functionName":{"name":"abi_encode_bytes_calldata","nodeType":"YulIdentifier","src":"11602:25:181"},"nodeType":"YulFunctionCall","src":"11602:66:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11594:4:181"}]}]},"name":"abi_encode_tuple_t_struct$_ExecuteArgs_$29365_calldata_ptr__to_t_struct$_ExecuteArgs_$29365_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8820:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8831:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8842:4:181","type":""}],"src":"8688:2986:181"},{"body":{"nodeType":"YulBlock","src":"11760:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"11806:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11815:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11818:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11808:6:181"},"nodeType":"YulFunctionCall","src":"11808:12:181"},"nodeType":"YulExpressionStatement","src":"11808:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11781:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"11790:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11777:3:181"},"nodeType":"YulFunctionCall","src":"11777:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"11802:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11773:3:181"},"nodeType":"YulFunctionCall","src":"11773:32:181"},"nodeType":"YulIf","src":"11770:52:181"},{"nodeType":"YulAssignment","src":"11831:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11847:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11841:5:181"},"nodeType":"YulFunctionCall","src":"11841:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11831:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11726:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11737:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11749:6:181","type":""}],"src":"11679:184:181"},{"body":{"nodeType":"YulBlock","src":"11987:427:181","statements":[{"nodeType":"YulVariableDeclaration","src":"11997:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12007:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12001:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12025:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12036:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12018:6:181"},"nodeType":"YulFunctionCall","src":"12018:21:181"},"nodeType":"YulExpressionStatement","src":"12018:21:181"},{"nodeType":"YulVariableDeclaration","src":"12048:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12068:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12062:5:181"},"nodeType":"YulFunctionCall","src":"12062:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"12052:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12095:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12106:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12091:3:181"},"nodeType":"YulFunctionCall","src":"12091:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"12111:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12084:6:181"},"nodeType":"YulFunctionCall","src":"12084:34:181"},"nodeType":"YulExpressionStatement","src":"12084:34:181"},{"nodeType":"YulVariableDeclaration","src":"12127:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12136:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"12131:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"12196:90:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12225:9:181"},{"name":"i","nodeType":"YulIdentifier","src":"12236:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12221:3:181"},"nodeType":"YulFunctionCall","src":"12221:17:181"},{"kind":"number","nodeType":"YulLiteral","src":"12240:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12217:3:181"},"nodeType":"YulFunctionCall","src":"12217:26:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12259:6:181"},{"name":"i","nodeType":"YulIdentifier","src":"12267:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12255:3:181"},"nodeType":"YulFunctionCall","src":"12255:14:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12271:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12251:3:181"},"nodeType":"YulFunctionCall","src":"12251:23:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12245:5:181"},"nodeType":"YulFunctionCall","src":"12245:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12210:6:181"},"nodeType":"YulFunctionCall","src":"12210:66:181"},"nodeType":"YulExpressionStatement","src":"12210:66:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"12157:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"12160:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12154:2:181"},"nodeType":"YulFunctionCall","src":"12154:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"12168:19:181","statements":[{"nodeType":"YulAssignment","src":"12170:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"12179:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12182:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12175:3:181"},"nodeType":"YulFunctionCall","src":"12175:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"12170:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"12150:3:181","statements":[]},"src":"12146:140:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12310:9:181"},{"name":"length","nodeType":"YulIdentifier","src":"12321:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12306:3:181"},"nodeType":"YulFunctionCall","src":"12306:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"12330:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12302:3:181"},"nodeType":"YulFunctionCall","src":"12302:31:181"},{"kind":"number","nodeType":"YulLiteral","src":"12335:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12295:6:181"},"nodeType":"YulFunctionCall","src":"12295:42:181"},"nodeType":"YulExpressionStatement","src":"12295:42:181"},{"nodeType":"YulAssignment","src":"12346:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12362:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"12381:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"12389:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12377:3:181"},"nodeType":"YulFunctionCall","src":"12377:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12398:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"12394:3:181"},"nodeType":"YulFunctionCall","src":"12394:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12373:3:181"},"nodeType":"YulFunctionCall","src":"12373:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12358:3:181"},"nodeType":"YulFunctionCall","src":"12358:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"12405:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12354:3:181"},"nodeType":"YulFunctionCall","src":"12354:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12346:4:181"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11956:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11967:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11978:4:181","type":""}],"src":"11868:546:181"},{"body":{"nodeType":"YulBlock","src":"12478:48:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12501:3:181"},{"name":"start","nodeType":"YulIdentifier","src":"12506:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"12513:6:181","type":"","value":"0x0400"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"12488:12:181"},"nodeType":"YulFunctionCall","src":"12488:32:181"},"nodeType":"YulExpressionStatement","src":"12488:32:181"}]},"name":"abi_encode_array_bytes32_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"12462:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"12469:3:181","type":""}],"src":"12419:107:181"},{"body":{"nodeType":"YulBlock","src":"12876:1430:181","statements":[{"nodeType":"YulVariableDeclaration","src":"12886:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12896:4:181","type":"","value":"1120"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12890:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12909:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12927:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12938:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12923:3:181"},"nodeType":"YulFunctionCall","src":"12923:18:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"12913:6:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12957:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12968:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12950:6:181"},"nodeType":"YulFunctionCall","src":"12950:21:181"},"nodeType":"YulExpressionStatement","src":"12950:21:181"},{"nodeType":"YulVariableDeclaration","src":"12980:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"12991:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"12984:3:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"13013:6:181"},{"name":"value1","nodeType":"YulIdentifier","src":"13021:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13006:6:181"},"nodeType":"YulFunctionCall","src":"13006:22:181"},"nodeType":"YulExpressionStatement","src":"13006:22:181"},{"nodeType":"YulVariableDeclaration","src":"13037:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13047:4:181","type":"","value":"1152"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"13041:2:181","type":""}]},{"nodeType":"YulAssignment","src":"13060:25:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13071:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"13082:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13067:3:181"},"nodeType":"YulFunctionCall","src":"13067:18:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"13060:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"13094:53:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13116:9:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13131:1:181","type":"","value":"5"},{"name":"value1","nodeType":"YulIdentifier","src":"13134:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13127:3:181"},"nodeType":"YulFunctionCall","src":"13127:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13112:3:181"},"nodeType":"YulFunctionCall","src":"13112:30:181"},{"name":"_2","nodeType":"YulIdentifier","src":"13144:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13108:3:181"},"nodeType":"YulFunctionCall","src":"13108:39:181"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"13098:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13156:20:181","value":{"name":"value0","nodeType":"YulIdentifier","src":"13170:6:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"13160:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13185:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13194:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"13189:1:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13204:12:181","value":{"name":"i","nodeType":"YulIdentifier","src":"13215:1:181"},"variables":[{"name":"i_1","nodeType":"YulTypedName","src":"13208:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"13280:835:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13301:3:181"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"13314:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"13322:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13310:3:181"},"nodeType":"YulFunctionCall","src":"13310:22:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13338:4:181","type":"","value":"1151"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"13334:3:181"},"nodeType":"YulFunctionCall","src":"13334:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13306:3:181"},"nodeType":"YulFunctionCall","src":"13306:38:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13294:6:181"},"nodeType":"YulFunctionCall","src":"13294:51:181"},"nodeType":"YulExpressionStatement","src":"13294:51:181"},{"nodeType":"YulVariableDeclaration","src":"13358:46:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"13397:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13384:12:181"},"nodeType":"YulFunctionCall","src":"13384:20:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"13362:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"13497:16:181","statements":[{"expression":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"13506:1:181"},{"name":"i","nodeType":"YulIdentifier","src":"13509:1:181"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13499:6:181"},"nodeType":"YulFunctionCall","src":"13499:12:181"},"nodeType":"YulExpressionStatement","src":"13499:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"13431:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"13459:12:181"},"nodeType":"YulFunctionCall","src":"13459:14:181"},{"name":"value0","nodeType":"YulIdentifier","src":"13475:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13455:3:181"},"nodeType":"YulFunctionCall","src":"13455:27:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13488:4:181","type":"","value":"1086"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"13484:3:181"},"nodeType":"YulFunctionCall","src":"13484:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13451:3:181"},"nodeType":"YulFunctionCall","src":"13451:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13427:3:181"},"nodeType":"YulFunctionCall","src":"13427:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13420:6:181"},"nodeType":"YulFunctionCall","src":"13420:76:181"},"nodeType":"YulIf","src":"13417:96:181"},{"nodeType":"YulVariableDeclaration","src":"13526:44:181","value":{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"13543:18:181"},{"name":"value0","nodeType":"YulIdentifier","src":"13563:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13539:3:181"},"nodeType":"YulFunctionCall","src":"13539:31:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13530:5:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13583:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13593:6:181","type":"","value":"0x0440"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"13587:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13612:78:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13677:5:181"},{"name":"value","nodeType":"YulIdentifier","src":"13684:5:181"}],"functionName":{"name":"calldata_access_bytes_calldata","nodeType":"YulIdentifier","src":"13646:30:181"},"nodeType":"YulFunctionCall","src":"13646:44:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"13616:12:181","type":""},{"name":"memberValue1","nodeType":"YulTypedName","src":"13630:12:181","type":""}]},{"expression":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"13710:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"13718:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13703:6:181"},"nodeType":"YulFunctionCall","src":"13703:18:181"},"nodeType":"YulExpressionStatement","src":"13703:18:181"},{"nodeType":"YulVariableDeclaration","src":"13734:84:181","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"13774:12:181"},{"name":"memberValue1","nodeType":"YulIdentifier","src":"13788:12:181"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"13806:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"13814:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13802:3:181"},"nodeType":"YulFunctionCall","src":"13802:15:181"}],"functionName":{"name":"abi_encode_bytes_calldata","nodeType":"YulIdentifier","src":"13748:25:181"},"nodeType":"YulFunctionCall","src":"13748:70:181"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"13738:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13831:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13841:4:181","type":"","value":"0x20"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"13835:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"13875:6:181"},{"name":"_4","nodeType":"YulIdentifier","src":"13883:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13871:3:181"},"nodeType":"YulFunctionCall","src":"13871:15:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13892:5:181"},{"name":"_4","nodeType":"YulIdentifier","src":"13899:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13888:3:181"},"nodeType":"YulFunctionCall","src":"13888:14:181"},{"kind":"number","nodeType":"YulLiteral","src":"13904:6:181","type":"","value":"0x0400"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"13858:12:181"},"nodeType":"YulFunctionCall","src":"13858:53:181"},"nodeType":"YulExpressionStatement","src":"13858:53:181"},{"nodeType":"YulVariableDeclaration","src":"13924:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13934:6:181","type":"","value":"0x0420"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"13928:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"13964:6:181"},{"name":"_5","nodeType":"YulIdentifier","src":"13972:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13960:3:181"},"nodeType":"YulFunctionCall","src":"13960:15:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13994:5:181"},{"name":"_5","nodeType":"YulIdentifier","src":"14001:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13990:3:181"},"nodeType":"YulFunctionCall","src":"13990:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13977:12:181"},"nodeType":"YulFunctionCall","src":"13977:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13953:6:181"},"nodeType":"YulFunctionCall","src":"13953:53:181"},"nodeType":"YulExpressionStatement","src":"13953:53:181"},{"nodeType":"YulAssignment","src":"14019:16:181","value":{"name":"tail_3","nodeType":"YulIdentifier","src":"14029:6:181"},"variableNames":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14019:6:181"}]},{"nodeType":"YulAssignment","src":"14048:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"14062:6:181"},{"name":"_4","nodeType":"YulIdentifier","src":"14070:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14058:3:181"},"nodeType":"YulFunctionCall","src":"14058:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"14048:6:181"}]},{"nodeType":"YulAssignment","src":"14086:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14097:3:181"},{"name":"_4","nodeType":"YulIdentifier","src":"14102:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14093:3:181"},"nodeType":"YulFunctionCall","src":"14093:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"14086:3:181"}]}]},"condition":{"arguments":[{"name":"i_1","nodeType":"YulIdentifier","src":"13236:3:181"},{"name":"value1","nodeType":"YulIdentifier","src":"13241:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"13233:2:181"},"nodeType":"YulFunctionCall","src":"13233:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"13249:22:181","statements":[{"nodeType":"YulAssignment","src":"13251:18:181","value":{"arguments":[{"name":"i_1","nodeType":"YulIdentifier","src":"13262:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"13267:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13258:3:181"},"nodeType":"YulFunctionCall","src":"13258:11:181"},"variableNames":[{"name":"i_1","nodeType":"YulIdentifier","src":"13251:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"13229:3:181","statements":[]},"src":"13225:890:181"},{"nodeType":"YulAssignment","src":"14124:14:181","value":{"name":"tail_2","nodeType":"YulIdentifier","src":"14132:6:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14124:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14158:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14169:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14154:3:181"},"nodeType":"YulFunctionCall","src":"14154:20:181"},{"name":"value2","nodeType":"YulIdentifier","src":"14176:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14147:6:181"},"nodeType":"YulFunctionCall","src":"14147:36:181"},"nodeType":"YulExpressionStatement","src":"14147:36:181"},{"expression":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"14226:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14238:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14249:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14234:3:181"},"nodeType":"YulFunctionCall","src":"14234:18:181"}],"functionName":{"name":"abi_encode_array_bytes32_calldata","nodeType":"YulIdentifier","src":"14192:33:181"},"nodeType":"YulFunctionCall","src":"14192:61:181"},"nodeType":"YulExpressionStatement","src":"14192:61:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14273:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14284:6:181","type":"","value":"0x0440"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14269:3:181"},"nodeType":"YulFunctionCall","src":"14269:22:181"},{"name":"value4","nodeType":"YulIdentifier","src":"14293:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14262:6:181"},"nodeType":"YulFunctionCall","src":"14262:38:181"},"nodeType":"YulExpressionStatement","src":"14262:38:181"}]},"name":"abi_encode_tuple_t_array$_t_struct$_Proof_$24133_calldata_ptr_$dyn_calldata_ptr_t_bytes32_t_array$_t_bytes32_$32_calldata_ptr_t_uint256__to_t_array$_t_struct$_Proof_$24133_memory_ptr_$dyn_memory_ptr_t_bytes32_t_array$_t_bytes32_$32_memory_ptr_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12813:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12824:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12832:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12840:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12848:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12856:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12867:4:181","type":""}],"src":"12531:1775:181"},{"body":{"nodeType":"YulBlock","src":"14485:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14502:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14513:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14495:6:181"},"nodeType":"YulFunctionCall","src":"14495:21:181"},"nodeType":"YulExpressionStatement","src":"14495:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14536:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14547:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14532:3:181"},"nodeType":"YulFunctionCall","src":"14532:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14552:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14525:6:181"},"nodeType":"YulFunctionCall","src":"14525:30:181"},"nodeType":"YulExpressionStatement","src":"14525:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14575:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14586:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14571:3:181"},"nodeType":"YulFunctionCall","src":"14571:18:181"},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","kind":"string","nodeType":"YulLiteral","src":"14591:33:181","type":"","value":"ReentrancyGuard: reentrant call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14564:6:181"},"nodeType":"YulFunctionCall","src":"14564:61:181"},"nodeType":"YulExpressionStatement","src":"14564:61:181"},{"nodeType":"YulAssignment","src":"14634:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14646:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14657:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14642:3:181"},"nodeType":"YulFunctionCall","src":"14642:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14634:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14462:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14476:4:181","type":""}],"src":"14311:355:181"},{"body":{"nodeType":"YulBlock","src":"14845:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14862:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14873:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14855:6:181"},"nodeType":"YulFunctionCall","src":"14855:21:181"},"nodeType":"YulExpressionStatement","src":"14855:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14896:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14907:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14892:3:181"},"nodeType":"YulFunctionCall","src":"14892:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14912:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14885:6:181"},"nodeType":"YulFunctionCall","src":"14885:30:181"},"nodeType":"YulExpressionStatement","src":"14885:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14935:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14946:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14931:3:181"},"nodeType":"YulFunctionCall","src":"14931:18:181"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","kind":"string","nodeType":"YulLiteral","src":"14951:31:181","type":"","value":"Address: insufficient balance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14924:6:181"},"nodeType":"YulFunctionCall","src":"14924:59:181"},"nodeType":"YulExpressionStatement","src":"14924:59:181"},{"nodeType":"YulAssignment","src":"14992:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15004:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15015:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15000:3:181"},"nodeType":"YulFunctionCall","src":"15000:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14992:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14822:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14836:4:181","type":""}],"src":"14671:353:181"},{"body":{"nodeType":"YulBlock","src":"15220:14:181","statements":[{"nodeType":"YulAssignment","src":"15222:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"15229:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"15222:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"15204:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"15212:3:181","type":""}],"src":"15029:205:181"},{"body":{"nodeType":"YulBlock","src":"15413:248:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15430:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15441:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15423:6:181"},"nodeType":"YulFunctionCall","src":"15423:21:181"},"nodeType":"YulExpressionStatement","src":"15423:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15464:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15475:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15460:3:181"},"nodeType":"YulFunctionCall","src":"15460:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15480:2:181","type":"","value":"58"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15453:6:181"},"nodeType":"YulFunctionCall","src":"15453:30:181"},"nodeType":"YulExpressionStatement","src":"15453:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15503:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15514:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15499:3:181"},"nodeType":"YulFunctionCall","src":"15499:18:181"},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c2072","kind":"string","nodeType":"YulLiteral","src":"15519:34:181","type":"","value":"Address: unable to send value, r"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15492:6:181"},"nodeType":"YulFunctionCall","src":"15492:62:181"},"nodeType":"YulExpressionStatement","src":"15492:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15574:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15585:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15570:3:181"},"nodeType":"YulFunctionCall","src":"15570:18:181"},{"hexValue":"6563697069656e74206d61792068617665207265766572746564","kind":"string","nodeType":"YulLiteral","src":"15590:28:181","type":"","value":"ecipient may have reverted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15563:6:181"},"nodeType":"YulFunctionCall","src":"15563:56:181"},"nodeType":"YulExpressionStatement","src":"15563:56:181"},{"nodeType":"YulAssignment","src":"15628:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15640:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15651:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15636:3:181"},"nodeType":"YulFunctionCall","src":"15636:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15628:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15390:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15404:4:181","type":""}],"src":"15239:422:181"},{"body":{"nodeType":"YulBlock","src":"15795:175:181","statements":[{"nodeType":"YulAssignment","src":"15805:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15817:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15828:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15813:3:181"},"nodeType":"YulFunctionCall","src":"15813:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15805:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"15840:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15858:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"15863:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"15854:3:181"},"nodeType":"YulFunctionCall","src":"15854:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"15867:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15850:3:181"},"nodeType":"YulFunctionCall","src":"15850:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15844:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15885:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15900:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"15908:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15896:3:181"},"nodeType":"YulFunctionCall","src":"15896:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15878:6:181"},"nodeType":"YulFunctionCall","src":"15878:34:181"},"nodeType":"YulExpressionStatement","src":"15878:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15932:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15943:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15928:3:181"},"nodeType":"YulFunctionCall","src":"15928:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"15952:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"15960:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15948:3:181"},"nodeType":"YulFunctionCall","src":"15948:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15921:6:181"},"nodeType":"YulFunctionCall","src":"15921:43:181"},"nodeType":"YulExpressionStatement","src":"15921:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15756:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15767:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15775:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15786:4:181","type":""}],"src":"15666:304:181"},{"body":{"nodeType":"YulBlock","src":"16149:155:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16166:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16177:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16159:6:181"},"nodeType":"YulFunctionCall","src":"16159:21:181"},"nodeType":"YulExpressionStatement","src":"16159:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16200:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16211:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16196:3:181"},"nodeType":"YulFunctionCall","src":"16196:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16216:1:181","type":"","value":"6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16189:6:181"},"nodeType":"YulFunctionCall","src":"16189:29:181"},"nodeType":"YulExpressionStatement","src":"16189:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16238:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16249:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16234:3:181"},"nodeType":"YulFunctionCall","src":"16234:18:181"},{"hexValue":"216164646564","kind":"string","nodeType":"YulLiteral","src":"16254:8:181","type":"","value":"!added"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16227:6:181"},"nodeType":"YulFunctionCall","src":"16227:36:181"},"nodeType":"YulExpressionStatement","src":"16227:36:181"},{"nodeType":"YulAssignment","src":"16272:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16284:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16295:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16280:3:181"},"nodeType":"YulFunctionCall","src":"16280:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16272:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e11eb83f9b11acb18ab039411915a354a75afc390de576b7a0065bfcb50b4e9b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16126:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16140:4:181","type":""}],"src":"15975:329:181"},{"body":{"nodeType":"YulBlock","src":"16483:154:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16500:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16511:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16493:6:181"},"nodeType":"YulFunctionCall","src":"16493:21:181"},"nodeType":"YulExpressionStatement","src":"16493:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16534:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16545:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16530:3:181"},"nodeType":"YulFunctionCall","src":"16530:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16550:1:181","type":"","value":"5"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16523:6:181"},"nodeType":"YulFunctionCall","src":"16523:29:181"},"nodeType":"YulExpressionStatement","src":"16523:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16572:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16583:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16568:3:181"},"nodeType":"YulFunctionCall","src":"16568:18:181"},{"hexValue":"6164646564","kind":"string","nodeType":"YulLiteral","src":"16588:7:181","type":"","value":"added"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16561:6:181"},"nodeType":"YulFunctionCall","src":"16561:35:181"},"nodeType":"YulExpressionStatement","src":"16561:35:181"},{"nodeType":"YulAssignment","src":"16605:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16617:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16628:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16613:3:181"},"nodeType":"YulFunctionCall","src":"16613:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16605:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_dedd704501704f7991a32fb105552a4ab47a52c46817293082f14fd934f9f8cc__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16460:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16474:4:181","type":""}],"src":"16309:328:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_bool(value, pos)\n    {\n        mstore(pos, iszero(iszero(value)))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_struct$_ExecuteArgs_$29365_calldata_ptrt_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if slt(sub(dataEnd, _1), 160) { revert(0, 0) }\n        value0 := _1\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_contract$_ISpokeConnector_$24154__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 0x20), dataEnd) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(_2, 0x20), _3)\n        mstore(add(add(memPtr, _3), 0x20), 0)\n        value0 := memPtr\n        value1 := calldataload(add(headStart, 0x20))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_contract$_IConnext_$26846__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_array_bytes32_calldata(offset, end) -> arrayPos\n    {\n        arrayPos := offset\n        if gt(add(offset, 1024), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_struct$_Proof_$24133_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 1152) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, shl(5, length)), 0x20), dataEnd) { revert(0, 0) }\n        value0 := add(_2, 0x20)\n        value1 := length\n        value2 := calldataload(add(headStart, 0x20))\n        value3 := abi_decode_array_bytes32_calldata(add(headStart, 64), dataEnd)\n        value4 := calldataload(add(headStart, 1088))\n        value5 := calldataload(add(headStart, 1120))\n    }\n    function abi_encode_tuple_t_stringliteral_61fc3f77ebc090777f567969ad9823cf6334ab888acb385ca72668ec5adbde80__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 5)\n        mstore(add(headStart, 64), \"empty\")\n        tail := add(headStart, 96)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_8e7e8fcd400a5d12d3bcb2f74ef1d253cc1ee9f80325b4481ab4dffdf753068f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 8)\n        mstore(add(headStart, 64), \"!relayer\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_encode_uint32(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffff))\n    }\n    function abi_decode_bool(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function calldata_access_bytes_calldata(base_ref, ptr) -> value, length\n    {\n        let rel_offset_of_tail := calldataload(ptr)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n        let value_1 := add(rel_offset_of_tail, base_ref)\n        length := calldataload(value_1)\n        value := add(value_1, 0x20)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        if sgt(value, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function abi_encode_bytes_calldata(start, length, pos) -> end\n    {\n        mstore(pos, length)\n        calldatacopy(add(pos, 0x20), start, length)\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function calldata_access_array_address_dyn_calldata(base_ref, ptr) -> value, length\n    {\n        let rel_offset_of_tail := calldataload(ptr)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n        let value_1 := add(rel_offset_of_tail, base_ref)\n        length := calldataload(value_1)\n        value := add(value_1, 0x20)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        if sgt(value, sub(calldatasize(), shl(5, length))) { revert(0, 0) }\n    }\n    function abi_encode_array_address_dyn_calldata(value, length, pos) -> end\n    {\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := value\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(abi_decode_address(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_array_bytes_calldata_dyn_calldata(value, length, pos) -> end\n    {\n        mstore(pos, length)\n        let _1 := 0x20\n        let updated_pos := add(pos, _1)\n        let pos_1 := updated_pos\n        pos := updated_pos\n        let tail := add(pos_1, shl(5, length))\n        let srcPtr := value\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, sub(tail, pos_1))\n            let elementValue0, elementValue1 := calldata_access_bytes_calldata(value, srcPtr)\n            tail := abi_encode_bytes_calldata(elementValue0, elementValue1, tail)\n            srcPtr := add(srcPtr, _1)\n            pos := add(pos, _1)\n        }\n        end := tail\n    }\n    function abi_encode_tuple_t_struct$_ExecuteArgs_$29365_calldata_ptr__to_t_struct$_ExecuteArgs_$29365_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let rel_offset_of_tail := calldataload(value0)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), value0), not(414)))) { revert(0, 0) }\n        let value := add(rel_offset_of_tail, value0)\n        mstore(add(headStart, 32), 0xa0)\n        abi_encode_uint32(abi_decode_uint32(value), add(headStart, 192))\n        let memberValue0 := abi_decode_uint32(add(value, 32))\n        abi_encode_uint32(memberValue0, add(headStart, 224))\n        let memberValue0_1 := abi_decode_uint32(add(value, 0x40))\n        let _1 := 256\n        abi_encode_uint32(memberValue0_1, add(headStart, _1))\n        let memberValue0_2 := abi_decode_address(add(value, 0x60))\n        let _2 := 288\n        abi_encode_address(memberValue0_2, add(headStart, _2))\n        let memberValue0_3 := abi_decode_address(add(value, 0x80))\n        let _3 := 320\n        abi_encode_address(memberValue0_3, add(headStart, _3))\n        let memberValue0_4 := abi_decode_bool(add(value, 0xa0))\n        let _4 := 352\n        abi_encode_bool(memberValue0_4, add(headStart, _4))\n        let memberValue0_5, memberValue1 := calldata_access_bytes_calldata(value, add(value, 192))\n        let _5 := 0x01a0\n        let _6 := 384\n        mstore(add(headStart, _6), _5)\n        let tail_1 := abi_encode_bytes_calldata(memberValue0_5, memberValue1, add(headStart, 608))\n        mstore(add(headStart, _5), calldataload(add(value, 224)))\n        let memberValue0_6 := abi_decode_address(add(value, _1))\n        abi_encode_address(memberValue0_6, add(headStart, 448))\n        mstore(add(headStart, 480), calldataload(add(value, _2)))\n        mstore(add(headStart, 512), calldataload(add(value, _3)))\n        mstore(add(headStart, 544), calldataload(add(value, _4)))\n        mstore(add(headStart, 576), calldataload(add(value, _6)))\n        let memberValue0_7, memberValue1_1 := calldata_access_array_address_dyn_calldata(value0, add(value0, 32))\n        let _7 := not(31)\n        mstore(add(headStart, 0x40), add(sub(tail_1, headStart), _7))\n        let tail_2 := abi_encode_array_address_dyn_calldata(memberValue0_7, memberValue1_1, tail_1)\n        let memberValue0_8, memberValue1_2 := calldata_access_array_address_dyn_calldata(value0, add(value0, 0x40))\n        mstore(add(headStart, 0x60), add(sub(tail_2, headStart), _7))\n        let tail_3 := abi_encode_array_bytes_calldata_dyn_calldata(memberValue0_8, memberValue1_2, tail_2)\n        let memberValue0_9 := abi_decode_address(add(value0, 0x60))\n        abi_encode_address(memberValue0_9, add(headStart, 0x80))\n        let memberValue0_10, memberValue1_3 := calldata_access_bytes_calldata(value0, add(value0, 0x80))\n        mstore(add(headStart, 0xa0), add(sub(tail_3, headStart), _7))\n        tail := abi_encode_bytes_calldata(memberValue0_10, memberValue1_3, tail_3)\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        mstore(add(add(headStart, length), 64), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_array_bytes32_calldata(start, pos)\n    {\n        calldatacopy(pos, start, 0x0400)\n    }\n    function abi_encode_tuple_t_array$_t_struct$_Proof_$24133_calldata_ptr_$dyn_calldata_ptr_t_bytes32_t_array$_t_bytes32_$32_calldata_ptr_t_uint256__to_t_array$_t_struct$_Proof_$24133_memory_ptr_$dyn_memory_ptr_t_bytes32_t_array$_t_bytes32_$32_memory_ptr_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 1120\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        mstore(tail_1, value1)\n        let _2 := 1152\n        pos := add(headStart, _2)\n        let tail_2 := add(add(headStart, shl(5, value1)), _2)\n        let srcPtr := value0\n        let i := 0\n        let i_1 := i\n        for { } lt(i_1, value1) { i_1 := add(i_1, 1) }\n        {\n            mstore(pos, add(sub(tail_2, headStart), not(1151)))\n            let rel_offset_of_tail := calldataload(srcPtr)\n            if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), value0), not(1086)))) { revert(i, i) }\n            let value := add(rel_offset_of_tail, value0)\n            let _3 := 0x0440\n            let memberValue0, memberValue1 := calldata_access_bytes_calldata(value, value)\n            mstore(tail_2, _3)\n            let tail_3 := abi_encode_bytes_calldata(memberValue0, memberValue1, add(tail_2, _3))\n            let _4 := 0x20\n            calldatacopy(add(tail_2, _4), add(value, _4), 0x0400)\n            let _5 := 0x0420\n            mstore(add(tail_2, _5), calldataload(add(value, _5)))\n            tail_2 := tail_3\n            srcPtr := add(srcPtr, _4)\n            pos := add(pos, _4)\n        }\n        tail := tail_2\n        mstore(add(headStart, 0x20), value2)\n        abi_encode_array_bytes32_calldata(value3, add(headStart, 64))\n        mstore(add(headStart, 0x0440), value4)\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: insufficient balance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    { end := pos }\n    function abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 58)\n        mstore(add(headStart, 64), \"Address: unable to send value, r\")\n        mstore(add(headStart, 96), \"ecipient may have reverted\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_e11eb83f9b11acb18ab039411915a354a75afc390de576b7a0065bfcb50b4e9b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 6)\n        mstore(add(headStart, 64), \"!added\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_dedd704501704f7991a32fb105552a4ab47a52c46817293082f14fd934f9f8cc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 5)\n        mstore(add(headStart, 64), \"added\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052600436106101445760003560e01c80639cadce00116100b6578063d1851c921161006f578063d1851c92146103b9578063d232c220146103d7578063d9ef0bee146103f6578063dd39f00d14610416578063de4b054814610436578063e79457f11461045657600080fd5b80639cadce00146103045780639f645a0314610324578063a42dce8014610344578063b1f8100d14610364578063c415b95c14610384578063c5b350df146103a457600080fd5b806360f0a5ac1161010857806360f0a5ac146102435780636a42b8f8146102635780636eba787f14610279578063715018a6146102b15780638da5cb5b146102c65780638efed127146102e457600080fd5b80632f55b98d146101885780633ccfd60b146101cd5780633cf52ffb146101e45780634d6f2013146102035780635e21966a1461022357600080fd5b3661018357604080513481524760208201527f063d07ee72a7483b8e07ca09054bb686775c5c030f945dde3823a5257a0a93eb910160405180910390a1005b600080fd5b34801561019457600080fd5b506101b86101a33660046110fd565b60086020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101d957600080fd5b506101e2610476565b005b3480156101f057600080fd5b506002545b6040519081526020016101c4565b34801561020f57600080fd5b506101e261021e3660046110fd565b6104f9565b34801561022f57600080fd5b506101e261023e3660046110fd565b610561565b34801561024f57600080fd5b506101e261025e3660046110fd565b6105bc565b34801561026f57600080fd5b5062093a806101f5565b34801561028557600080fd5b50600454610299906001600160a01b031681565b6040516001600160a01b0390911681526020016101c4565b3480156102bd57600080fd5b506101e2610617565b3480156102d257600080fd5b506000546001600160a01b0316610299565b3480156102f057600080fd5b506101f56102ff36600461111f565b6106c9565b34801561031057600080fd5b50600754610299906001600160a01b031681565b34801561033057600080fd5b506101e261033f3660046110fd565b61078e565b34801561035057600080fd5b506101e261035f3660046110fd565b6107e9565b34801561037057600080fd5b506101e261037f3660046110fd565b610844565b34801561039057600080fd5b50600554610299906001600160a01b031681565b3480156103b057600080fd5b506101e26108e5565b3480156103c557600080fd5b506001546001600160a01b0316610299565b3480156103e357600080fd5b506000546001600160a01b0316156101b8565b34801561040257600080fd5b506101e261041136600461117f565b610955565b34801561042257600080fd5b506101e26104313660046110fd565b610a47565b34801561044257600080fd5b50600654610299906001600160a01b031681565b34801561046257600080fd5b506101e2610471366004611255565b610aa2565b6000546001600160a01b031633146104a1576040516311a8a1bb60e31b815260040160405180910390fd5b6104a9610b5e565b476104b43382610bb7565b604080518281524760208201527f9826a73d0fd7186bda6a15195ac17571869cab151bfe9a8fed3f9407fffe5b18910160405180910390a1506104f76001600355565b565b6000546001600160a01b03163314610524576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166105545760405162461bcd60e51b815260040161054b906112f7565b60405180910390fd5b61055d82610cd0565b5050565b6000546001600160a01b0316331461058c576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166105b35760405162461bcd60e51b815260040161054b906112f7565b61055d82610d39565b6000546001600160a01b031633146105e7576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b03811661060e5760405162461bcd60e51b815260040161054b906112f7565b61055d82610da2565b6000546001600160a01b03163314610642576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426106549190611316565b11610672576040516324e0285f60e21b815260040160405180910390fd5b60025460000361069557604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b0316156106bf576040516323295ef960e01b815260040160405180910390fd5b6104f76000610e4b565b3360009081526008602052604081205460ff166106f85760405162461bcd60e51b815260040161054b90611337565b610700610b5e565b6006546040516331f1f3e960e11b81526001600160a01b03909116906363e3e7d2906107309086906004016114e0565b6020604051808303816000875af115801561074f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077391906116d3565b905061077e82610eb0565b6107886001600355565b92915050565b6000546001600160a01b031633146107b9576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166107e05760405162461bcd60e51b815260040161054b906112f7565b61055d82610f1c565b6000546001600160a01b03163314610814576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b03811661083b5760405162461bcd60e51b815260040161054b906112f7565b61055d82610f85565b6000546001600160a01b0316331461086f576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b03828116911614801561088d575060025415155b156108ab576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036108d957604051634a2fb73f60e11b815260040160405180910390fd5b6108e281610fee565b50565b6001546001600160a01b03163314610910576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426109229190611316565b11610940576040516324e0285f60e21b815260040160405180910390fd5b6001546104f7906001600160a01b0316610e4b565b3360009081526008602052604090205460ff166109845760405162461bcd60e51b815260040161054b90611337565b61098c610b5e565b600754604051630aec6b9f60e21b81526001600160a01b0390911690632bb1ae7c9084906109be9087906004016116ec565b6000604051808303818588803b1580156109d757600080fd5b505af11580156109eb573d6000803e3d6000fd5b5050604080518681524760208201527f9826a73d0fd7186bda6a15195ac17571869cab151bfe9a8fed3f9407fffe5b189450019150610a279050565b60405180910390a1610a3881610eb0565b610a426001600355565b505050565b6000546001600160a01b03163314610a72576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b038116610a995760405162461bcd60e51b815260040161054b906112f7565b61055d8261103c565b3360009081526008602052604090205460ff16610ad15760405162461bcd60e51b815260040161054b90611337565b610ad9610b5e565b60075460405163508a109b60e01b81526001600160a01b039091169063508a109b90610b119089908990899089908990600401611744565b600060405180830381600087803b158015610b2b57600080fd5b505af1158015610b3f573d6000803e3d6000fd5b50505050610b4c81610eb0565b610b566001600355565b505050505050565b600260035403610bb05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161054b565b6002600355565b80471015610c075760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161054b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c54576040519150601f19603f3d011682016040523d82523d6000602084013e610c59565b606091505b5050905080610a425760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161054b565b600654604080516001600160a01b03808516825290921660208301527f87539ad41983c0ecff8f321db8edf4dd9e830593562770bdacdda085b83e3bb2910160405180910390a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b600454604080516001600160a01b03808516825290921660208301527f5db4a067a1f787c3269642464a2a1560868b50b0873e7dec83939ae2359f6128910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526008602052604090205460ff16610df35760405162461bcd60e51b815260206004820152600660248201526508585919195960d21b604482015260640161054b565b6001600160a01b038116600081815260086020908152604091829020805460ff1916905590519182527f10e1f7ce9fd7d1b90a66d13a2ab3cb8dd7f29f3f8d520b143b063ccfbab6906b91015b60405180910390a150565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b6004546001600160a01b03163303610edd57600554610ed8906001600160a01b031682610bb7565b610ee7565b610ee73382610bb7565b604080518281524760208201527f9826a73d0fd7186bda6a15195ac17571869cab151bfe9a8fed3f9407fffe5b189101610e40565b600754604080516001600160a01b03808516825290921660208301527f66948d99d8431a8416af2202bc301823b7cdd87beb9bddaa274aedac0611a5fd910160405180910390a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b600554604080516001600160a01b03808516825290921660208301527f649c5e3d0ed183894196148e193af316452b0037e77d2ff0fef23b7dc722bed0910160405180910390a1600580546001600160a01b0319166001600160a01b0392909216919091179055565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b6001600160a01b03811660009081526008602052604090205460ff161561108d5760405162461bcd60e51b8152602060048201526005602482015264185919195960da1b604482015260640161054b565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f03580ee9f53a62b7cb409a2cb56f9be87747dd15017afc5cef6eef321e4fb2c59101610e40565b80356001600160a01b03811681146110f857600080fd5b919050565b60006020828403121561110f57600080fd5b611118826110e1565b9392505050565b6000806040838503121561113257600080fd5b823567ffffffffffffffff81111561114957600080fd5b830160a0818603121561115b57600080fd5b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561119457600080fd5b833567ffffffffffffffff808211156111ac57600080fd5b818601915086601f8301126111c057600080fd5b8135818111156111d2576111d2611169565b604051601f8201601f19908116603f011681019083821181831017156111fa576111fa611169565b8160405282815289602084870101111561121357600080fd5b82602086016020830137600060208483010152809750505050505060208401359150604084013590509250925092565b80610400810183101561078857600080fd5b600080600080600080610480878903121561126f57600080fd5b863567ffffffffffffffff8082111561128757600080fd5b818901915089601f83011261129b57600080fd5b8135818111156112aa57600080fd5b8a60208260051b85010111156112bf57600080fd5b6020928301985096505087013593506112db8860408901611243565b9250610440870135915061046087013590509295509295509295565b602080825260059082015264656d70747960d81b604082015260600190565b8181038181111561078857634e487b7160e01b600052601160045260246000fd5b60208082526008908201526710b932b630bcb2b960c11b604082015260600190565b803563ffffffff811681146110f857600080fd5b803580151581146110f857600080fd5b6000808335601e1984360301811261139457600080fd5b830160208101925035905067ffffffffffffffff8111156113b457600080fd5b8036038213156113c357600080fd5b9250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e1984360301811261140a57600080fd5b830160208101925035905067ffffffffffffffff81111561142a57600080fd5b8060051b36038213156113c357600080fd5b8183526000602080850194508260005b85811015611478576001600160a01b03611465836110e1565b168752958201959082019060010161144c565b509495945050505050565b81835260006020808501808196508560051b810191508460005b878110156114d35782840389526114b4828861137d565b6114bf8682846113ca565b9a87019a955050509084019060010161149d565b5091979650505050505050565b602081526000823561019e198436030181126114fb57600080fd5b60a06020840152830161151e60c0840161151483611359565b63ffffffff169052565b61152a60208201611359565b63ffffffff1660e084015261154160408201611359565b6101006115558186018363ffffffff169052565b611561606084016110e1565b915061012061157a818701846001600160a01b03169052565b611586608085016110e1565b925061014061159f818801856001600160a01b03169052565b6115ab60a0860161136d565b93506101606115bd8189018615159052565b6115ca60c087018761137d565b95506101a061018081818c01526115e66102608c0189856113ca565b975060e0890135828c01526115fc878a016110e1565b6001600160a01b03166101c08c0152948801356101e08b01525050908501356102008801528401356102208701528301356102408601525061164160208601866113f3565b9250601f198086840301604087015261165b83858461143c565b935061166a60408801886113f3565b9350915080868503016060870152611683848484611483565b9350611691606088016110e1565b6001600160a01b038116608088015292506116af608088018861137d565b93509150808685030160a0870152506116c98383836113ca565b9695505050505050565b6000602082840312156116e557600080fd5b5051919050565b600060208083528351808285015260005b81811015611719578581018301518582016040015282016116fd565b506000604082860101526040601f19601f8301168501019250505092915050565b6104008183375050565b6104608082528101859052600061048080830190600588901b8401018883805b8a8110156117da5786840361047f190185528235368d900361043e1901811261178b578283fd5b8c0161044061179a828061137d565b8288526117aa83890182846113ca565b92505050602061040081840182890137610420928301359690920195909552948501949290920191600101611764565b50505080925050508460208301526117f5604083018561173a565b82610440830152969550505050505056fea26469706673582212205e227196f16a701f18bb16516738258b6161fbb11536119e140f4931aa29b29f64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x144 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9CADCE00 GT PUSH2 0xB6 JUMPI DUP1 PUSH4 0xD1851C92 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x3B9 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x3D7 JUMPI DUP1 PUSH4 0xD9EF0BEE EQ PUSH2 0x3F6 JUMPI DUP1 PUSH4 0xDD39F00D EQ PUSH2 0x416 JUMPI DUP1 PUSH4 0xDE4B0548 EQ PUSH2 0x436 JUMPI DUP1 PUSH4 0xE79457F1 EQ PUSH2 0x456 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9CADCE00 EQ PUSH2 0x304 JUMPI DUP1 PUSH4 0x9F645A03 EQ PUSH2 0x324 JUMPI DUP1 PUSH4 0xA42DCE80 EQ PUSH2 0x344 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x364 JUMPI DUP1 PUSH4 0xC415B95C EQ PUSH2 0x384 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x3A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x60F0A5AC GT PUSH2 0x108 JUMPI DUP1 PUSH4 0x60F0A5AC EQ PUSH2 0x243 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x263 JUMPI DUP1 PUSH4 0x6EBA787F EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x2B1 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2C6 JUMPI DUP1 PUSH4 0x8EFED127 EQ PUSH2 0x2E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F55B98D EQ PUSH2 0x188 JUMPI DUP1 PUSH4 0x3CCFD60B EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x1E4 JUMPI DUP1 PUSH4 0x4D6F2013 EQ PUSH2 0x203 JUMPI DUP1 PUSH4 0x5E21966A EQ PUSH2 0x223 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x183 JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SELFBALANCE PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x63D07EE72A7483B8E07CA09054BB686775C5C030F945DDE3823A5257A0A93EB SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B8 PUSH2 0x1A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x10FD JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x476 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1C4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x20F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x21E CALLDATASIZE PUSH1 0x4 PUSH2 0x10FD JUMP JUMPDEST PUSH2 0x4F9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x23E CALLDATASIZE PUSH1 0x4 PUSH2 0x10FD JUMP JUMPDEST PUSH2 0x561 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x25E CALLDATASIZE PUSH1 0x4 PUSH2 0x10FD JUMP JUMPDEST PUSH2 0x5BC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x1F5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x299 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1C4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x617 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x299 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F5 PUSH2 0x2FF CALLDATASIZE PUSH1 0x4 PUSH2 0x111F JUMP JUMPDEST PUSH2 0x6C9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x310 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x7 SLOAD PUSH2 0x299 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x330 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x33F CALLDATASIZE PUSH1 0x4 PUSH2 0x10FD JUMP JUMPDEST PUSH2 0x78E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x350 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x35F CALLDATASIZE PUSH1 0x4 PUSH2 0x10FD JUMP JUMPDEST PUSH2 0x7E9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x370 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x37F CALLDATASIZE PUSH1 0x4 PUSH2 0x10FD JUMP JUMPDEST PUSH2 0x844 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x390 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x5 SLOAD PUSH2 0x299 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x8E5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x299 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x1B8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x402 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x411 CALLDATASIZE PUSH1 0x4 PUSH2 0x117F JUMP JUMPDEST PUSH2 0x955 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x422 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x431 CALLDATASIZE PUSH1 0x4 PUSH2 0x10FD JUMP JUMPDEST PUSH2 0xA47 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x442 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x6 SLOAD PUSH2 0x299 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x462 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E2 PUSH2 0x471 CALLDATASIZE PUSH1 0x4 PUSH2 0x1255 JUMP JUMPDEST PUSH2 0xAA2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4A1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4A9 PUSH2 0xB5E JUMP JUMPDEST SELFBALANCE PUSH2 0x4B4 CALLER DUP3 PUSH2 0xBB7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SELFBALANCE PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x9826A73D0FD7186BDA6A15195AC17571869CAB151BFE9A8FED3F9407FFFE5B18 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH2 0x4F7 PUSH1 0x1 PUSH1 0x3 SSTORE JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x524 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x554 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54B SWAP1 PUSH2 0x12F7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x55D DUP3 PUSH2 0xCD0 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x58C JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x5B3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54B SWAP1 PUSH2 0x12F7 JUMP JUMPDEST PUSH2 0x55D DUP3 PUSH2 0xD39 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x60E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54B SWAP1 PUSH2 0x12F7 JUMP JUMPDEST PUSH2 0x55D DUP3 PUSH2 0xDA2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x642 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x654 SWAP2 SWAP1 PUSH2 0x1316 JUMP JUMPDEST GT PUSH2 0x672 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x695 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x6BF JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4F7 PUSH1 0x0 PUSH2 0xE4B JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x6F8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54B SWAP1 PUSH2 0x1337 JUMP JUMPDEST PUSH2 0x700 PUSH2 0xB5E JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x31F1F3E9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x63E3E7D2 SWAP1 PUSH2 0x730 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x14E0 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x74F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x773 SWAP2 SWAP1 PUSH2 0x16D3 JUMP JUMPDEST SWAP1 POP PUSH2 0x77E DUP3 PUSH2 0xEB0 JUMP JUMPDEST PUSH2 0x788 PUSH1 0x1 PUSH1 0x3 SSTORE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x7B9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x7E0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54B SWAP1 PUSH2 0x12F7 JUMP JUMPDEST PUSH2 0x55D DUP3 PUSH2 0xF1C JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x814 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x83B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54B SWAP1 PUSH2 0x12F7 JUMP JUMPDEST PUSH2 0x55D DUP3 PUSH2 0xF85 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x86F JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x88D JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x8AB JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x8D9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x8E2 DUP2 PUSH2 0xFEE JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x910 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x922 SWAP2 SWAP1 PUSH2 0x1316 JUMP JUMPDEST GT PUSH2 0x940 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x4F7 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xE4B JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x984 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54B SWAP1 PUSH2 0x1337 JUMP JUMPDEST PUSH2 0x98C PUSH2 0xB5E JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0xAEC6B9F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x2BB1AE7C SWAP1 DUP5 SWAP1 PUSH2 0x9BE SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x16EC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP7 DUP2 MSTORE SELFBALANCE PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x9826A73D0FD7186BDA6A15195AC17571869CAB151BFE9A8FED3F9407FFFE5B18 SWAP5 POP ADD SWAP2 POP PUSH2 0xA27 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0xA38 DUP2 PUSH2 0xEB0 JUMP JUMPDEST PUSH2 0xA42 PUSH1 0x1 PUSH1 0x3 SSTORE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA72 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xA99 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54B SWAP1 PUSH2 0x12F7 JUMP JUMPDEST PUSH2 0x55D DUP3 PUSH2 0x103C JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xAD1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54B SWAP1 PUSH2 0x1337 JUMP JUMPDEST PUSH2 0xAD9 PUSH2 0xB5E JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x508A109B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x508A109B SWAP1 PUSH2 0xB11 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x1744 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB3F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0xB4C DUP2 PUSH2 0xEB0 JUMP JUMPDEST PUSH2 0xB56 PUSH1 0x1 PUSH1 0x3 SSTORE JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x3 SLOAD SUB PUSH2 0xBB0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54B JUMP JUMPDEST PUSH1 0x2 PUSH1 0x3 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0xC07 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54B JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xC54 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xC59 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0xA42 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x54B JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x87539AD41983C0ECFF8F321DB8EDF4DD9E830593562770BDACDDA085B83E3BB2 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x5DB4A067A1F787C3269642464A2A1560868B50B0873E7DEC83939AE2359F6128 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xDF3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x85859191959 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x10E1F7CE9FD7D1B90A66D13A2AB3CB8DD7F29F3F8D520B143B063CCFBAB6906B SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0xEDD JUMPI PUSH1 0x5 SLOAD PUSH2 0xED8 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH2 0xBB7 JUMP JUMPDEST PUSH2 0xEE7 JUMP JUMPDEST PUSH2 0xEE7 CALLER DUP3 PUSH2 0xBB7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SELFBALANCE PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x9826A73D0FD7186BDA6A15195AC17571869CAB151BFE9A8FED3F9407FFFE5B18 SWAP2 ADD PUSH2 0xE40 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x66948D99D8431A8416AF2202BC301823B7CDD87BEB9BDDAA274AEDAC0611A5FD SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x649C5E3D0ED183894196148E193AF316452B0037E77D2FF0FEF23B7DC722BED0 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x108D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x5 PUSH1 0x24 DUP3 ADD MSTORE PUSH5 0x1859191959 PUSH1 0xDA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x3580EE9F53A62B7CB409A2CB56F9BE87747DD15017AFC5CEF6EEF321E4FB2C5 SWAP2 ADD PUSH2 0xE40 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x10F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x110F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1118 DUP3 PUSH2 0x10E1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1132 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1149 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0xA0 DUP2 DUP7 SUB SLT ISZERO PUSH2 0x115B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x11AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x11C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x11D2 JUMPI PUSH2 0x11D2 PUSH2 0x1169 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x11FA JUMPI PUSH2 0x11FA PUSH2 0x1169 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x1213 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP8 POP POP POP POP POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP1 PUSH2 0x400 DUP2 ADD DUP4 LT ISZERO PUSH2 0x788 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x480 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x126F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1287 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP10 ADD SWAP2 POP DUP10 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x129B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x12AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP11 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x12BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 DUP4 ADD SWAP9 POP SWAP7 POP POP DUP8 ADD CALLDATALOAD SWAP4 POP PUSH2 0x12DB DUP9 PUSH1 0x40 DUP10 ADD PUSH2 0x1243 JUMP JUMPDEST SWAP3 POP PUSH2 0x440 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH2 0x460 DUP8 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x5 SWAP1 DUP3 ADD MSTORE PUSH5 0x656D707479 PUSH1 0xD8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x788 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x8 SWAP1 DUP3 ADD MSTORE PUSH8 0x10B932B630BCB2B9 PUSH1 0xC1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x10F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x10F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x1394 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x13B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x13C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 DUP3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x140A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x142A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x5 SHL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x13C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x1478 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1465 DUP4 PUSH2 0x10E1 JUMP JUMPDEST AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x144C JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP6 ADD DUP1 DUP2 SWAP7 POP DUP6 PUSH1 0x5 SHL DUP2 ADD SWAP2 POP DUP5 PUSH1 0x0 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0x14D3 JUMPI DUP3 DUP5 SUB DUP10 MSTORE PUSH2 0x14B4 DUP3 DUP9 PUSH2 0x137D JUMP JUMPDEST PUSH2 0x14BF DUP7 DUP3 DUP5 PUSH2 0x13CA JUMP JUMPDEST SWAP11 DUP8 ADD SWAP11 SWAP6 POP POP POP SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x149D JUMP JUMPDEST POP SWAP2 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x19E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x14FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xA0 PUSH1 0x20 DUP5 ADD MSTORE DUP4 ADD PUSH2 0x151E PUSH1 0xC0 DUP5 ADD PUSH2 0x1514 DUP4 PUSH2 0x1359 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x152A PUSH1 0x20 DUP3 ADD PUSH2 0x1359 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x1541 PUSH1 0x40 DUP3 ADD PUSH2 0x1359 JUMP JUMPDEST PUSH2 0x100 PUSH2 0x1555 DUP2 DUP7 ADD DUP4 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x1561 PUSH1 0x60 DUP5 ADD PUSH2 0x10E1 JUMP JUMPDEST SWAP2 POP PUSH2 0x120 PUSH2 0x157A DUP2 DUP8 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x1586 PUSH1 0x80 DUP6 ADD PUSH2 0x10E1 JUMP JUMPDEST SWAP3 POP PUSH2 0x140 PUSH2 0x159F DUP2 DUP9 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x15AB PUSH1 0xA0 DUP7 ADD PUSH2 0x136D JUMP JUMPDEST SWAP4 POP PUSH2 0x160 PUSH2 0x15BD DUP2 DUP10 ADD DUP7 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x15CA PUSH1 0xC0 DUP8 ADD DUP8 PUSH2 0x137D JUMP JUMPDEST SWAP6 POP PUSH2 0x1A0 PUSH2 0x180 DUP2 DUP2 DUP13 ADD MSTORE PUSH2 0x15E6 PUSH2 0x260 DUP13 ADD DUP10 DUP6 PUSH2 0x13CA JUMP JUMPDEST SWAP8 POP PUSH1 0xE0 DUP10 ADD CALLDATALOAD DUP3 DUP13 ADD MSTORE PUSH2 0x15FC DUP8 DUP11 ADD PUSH2 0x10E1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1C0 DUP13 ADD MSTORE SWAP5 DUP9 ADD CALLDATALOAD PUSH2 0x1E0 DUP12 ADD MSTORE POP POP SWAP1 DUP6 ADD CALLDATALOAD PUSH2 0x200 DUP9 ADD MSTORE DUP5 ADD CALLDATALOAD PUSH2 0x220 DUP8 ADD MSTORE DUP4 ADD CALLDATALOAD PUSH2 0x240 DUP7 ADD MSTORE POP PUSH2 0x1641 PUSH1 0x20 DUP7 ADD DUP7 PUSH2 0x13F3 JUMP JUMPDEST SWAP3 POP PUSH1 0x1F NOT DUP1 DUP7 DUP5 SUB ADD PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x165B DUP4 DUP6 DUP5 PUSH2 0x143C JUMP JUMPDEST SWAP4 POP PUSH2 0x166A PUSH1 0x40 DUP9 ADD DUP9 PUSH2 0x13F3 JUMP JUMPDEST SWAP4 POP SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x1683 DUP5 DUP5 DUP5 PUSH2 0x1483 JUMP JUMPDEST SWAP4 POP PUSH2 0x1691 PUSH1 0x60 DUP9 ADD PUSH2 0x10E1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x80 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x16AF PUSH1 0x80 DUP9 ADD DUP9 PUSH2 0x137D JUMP JUMPDEST SWAP4 POP SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH1 0xA0 DUP8 ADD MSTORE POP PUSH2 0x16C9 DUP4 DUP4 DUP4 PUSH2 0x13CA JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x16E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1719 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x16FD JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x400 DUP2 DUP4 CALLDATACOPY POP POP JUMP JUMPDEST PUSH2 0x460 DUP1 DUP3 MSTORE DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x0 PUSH2 0x480 DUP1 DUP4 ADD SWAP1 PUSH1 0x5 DUP9 SWAP1 SHL DUP5 ADD ADD DUP9 DUP4 DUP1 JUMPDEST DUP11 DUP2 LT ISZERO PUSH2 0x17DA JUMPI DUP7 DUP5 SUB PUSH2 0x47F NOT ADD DUP6 MSTORE DUP3 CALLDATALOAD CALLDATASIZE DUP14 SWAP1 SUB PUSH2 0x43E NOT ADD DUP2 SLT PUSH2 0x178B JUMPI DUP3 DUP4 REVERT JUMPDEST DUP13 ADD PUSH2 0x440 PUSH2 0x179A DUP3 DUP1 PUSH2 0x137D JUMP JUMPDEST DUP3 DUP9 MSTORE PUSH2 0x17AA DUP4 DUP10 ADD DUP3 DUP5 PUSH2 0x13CA JUMP JUMPDEST SWAP3 POP POP POP PUSH1 0x20 PUSH2 0x400 DUP2 DUP5 ADD DUP3 DUP10 ADD CALLDATACOPY PUSH2 0x420 SWAP3 DUP4 ADD CALLDATALOAD SWAP7 SWAP1 SWAP3 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP5 DUP6 ADD SWAP5 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1764 JUMP JUMPDEST POP POP POP DUP1 SWAP3 POP POP POP DUP5 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x17F5 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x173A JUMP JUMPDEST DUP3 PUSH2 0x440 DUP4 ADD MSTORE SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5E 0x22 PUSH18 0x96F16A701F18BB16516738258B6161FBB115 CALLDATASIZE GT SWAP15 EQ 0xF 0x49 BALANCE 0xAA 0x29 0xB2 SWAP16 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"1117:9330:89:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8820:47;;;8834:9;188:25:181;;8845:21:89;244:2:181;229:18;;222:34;8820:47:89;;161:18:181;8820:47:89;;;;;;;1117:9330;;;;;1378:46;;;;;;;;;;-1:-1:-1;1378:46:89;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;897:14:181;;890:22;872:41;;860:2;845:18;1378:46:89;;;;;;;;6109:211;;;;;;;;;;;;;:::i;:::-;;1949:112:168;;;;;;;;;;-1:-1:-1;2029:27:168;;1949:112;;;1070:25:181;;;1058:2;1043:18;1949:112:168;924:177:181;5031:114:89;;;;;;;;;;-1:-1:-1;5031:114:89;;;;;:::i;:::-;;:::i;5583:144::-;;;;;;;;;;-1:-1:-1;5583:144:89;;;;;:::i;:::-;;:::i;4787:120::-;;;;;;;;;;-1:-1:-1;4787:120:89;;;;;:::i;:::-;;:::i;2151:79:168:-;;;;;;;;;;-1:-1:-1;1530:6:168;2151:79;;1246:28:89;;;;;;;;;;-1:-1:-1;1246:28:89;;;;-1:-1:-1;;;;;1246:28:89;;;;;;-1:-1:-1;;;;;1379:32:181;;;1361:51;;1349:2;1334:18;1246:28:89;1215:203:181;3820:442:168;;;;;;;;;;;;;:::i;1641:79::-;;;;;;;;;;-1:-1:-1;1687:7:168;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;6797:216:89;;;;;;;;;;-1:-1:-1;6797:216:89;;;;;:::i;:::-;;:::i;1336:37::-;;;;;;;;;;-1:-1:-1;1336:37:89;;;;-1:-1:-1;;;;;1336:37:89;;;5290:149;;;;;;;;;;-1:-1:-1;5290:149:89;;;;;:::i;:::-;;:::i;5882:139::-;;;;;;;;;;-1:-1:-1;5882:139:89;;;;;:::i;:::-;;:::i;3321:420:168:-;;;;;;;;;;-1:-1:-1;3321:420:168;;;;;:::i;:::-;;:::i;1278:27:89:-;;;;;;;;;;-1:-1:-1;1278:27:89;;;;-1:-1:-1;;;;;1278:27:89;;;4404:539:168;;;;;;;;;;;;;:::i;1792:85::-;;;;;;;;;;-1:-1:-1;1863:9:168;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;;;;;;;;;;-1:-1:-1;3097:4:168;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;8484:294:89;;;;;;;;;;-1:-1:-1;8484:294:89;;;;;:::i;:::-;;:::i;4528:114::-;;;;;;;;;;-1:-1:-1;4528:114:89;;;;;:::i;:::-;;:::i;1309:23::-;;;;;;;;;;-1:-1:-1;1309:23:89;;;;-1:-1:-1;;;;;1309:23:89;;;7716:354;;;;;;;;;;-1:-1:-1;7716:354:89;;;;;:::i;:::-;;:::i;6109:211::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;2261:21:52::1;:19;:21::i;:::-;6185::89::2;6212:47;6238:10;6185:21:::0;6212:17:::2;:47::i;:::-;6270:45;::::0;;188:25:181;;;6293:21:89::2;244:2:181::0;229:18;;222:34;6270:45:89::2;::::0;161:18:181;6270:45:89::2;;;;;;;6161:159;2303:20:52::1;1716:1:::0;2809:7;:22;2629:209;2303:20:::1;6109:211:89:o:0;5031:114::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;5103:8:89;-1:-1:-1;;;;;1616:20:89;::::1;1608:38;;;;-1:-1:-1::0;;;1608:38:89::1;;;;;;;:::i;:::-;;;;;;;;;5119:21:::2;5131:8;5119:11;:21::i;:::-;2416:1:168::1;5031:114:89::0;:::o;5583:144::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;5667:14:89;-1:-1:-1;;;;;1616:20:89;::::1;1608:38;;;;-1:-1:-1::0;;;1608:38:89::1;;;;;;;:::i;:::-;5689:33:::2;5707:14;5689:17;:33::i;4787:120::-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4862:8:89;-1:-1:-1;;;;;1616:20:89;::::1;1608:38;;;;-1:-1:-1::0;;;1608:38:89::1;;;;;;;:::i;:::-;4878:24:::2;4893:8;4878:14;:24::i;3820:442:168:-:0;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;3960:27:::2;;3991:1;3960:32:::0;3956:92:::2;;4001:47;;-1:-1:-1::0;;;4001:47:168::2;;;;;;;;;;;3956:92;4095:9;::::0;-1:-1:-1;;;;;4095:9:168::2;:23:::0;4091:88:::2;;4127:52;;-1:-1:-1::0;;;4127:52:168::2;;;;;;;;;;;4091:88;4236:21;4254:1;4236:9;:21::i;6797:216:89:-:0;1522:10;6915:18;1507:26;;;:14;:26;;;;;;;;1499:47;;;;-1:-1:-1;;;1499:47:89;;;;;;;:::i;:::-;2261:21:52::1;:19;:21::i;:::-;6956:7:89::2;::::0;:22:::2;::::0;-1:-1:-1;;;6956:22:89;;-1:-1:-1;;;;;6956:7:89;;::::2;::::0;:15:::2;::::0;:22:::2;::::0;6972:5;;6956:22:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6943:35;;6984:24;7003:4;6984:18;:24::i;:::-;2303:20:52::1;1716:1:::0;2809:7;:22;2629:209;2303:20:::1;6797:216:89::0;;;;:::o;5290:149::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;5376:15:89;-1:-1:-1;;;;;1616:20:89;::::1;1608:38;;;;-1:-1:-1::0;;;1608:38:89::1;;;;;;;:::i;:::-;5399:35:::2;5418:15;5399:18;:35::i;5882:139::-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;5964:13:89;-1:-1:-1;;;;;1616:20:89;::::1;1608:38;;;;-1:-1:-1::0;;;1608:38:89::1;;;;;;;:::i;:::-;5985:31:::2;6002:13;5985:16;:31::i;3321:420:168:-:0;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;:::-;3321:420:::0;:::o;4404:539::-;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;8484:294:89:-:0;1522:10;1507:26;;;;:14;:26;;;;;;;;1499:47;;;;-1:-1:-1;;;1499:47:89;;;;;;;:::i;:::-;2261:21:52::1;:19;:21::i;:::-;8623:14:89::2;::::0;:53:::2;::::0;-1:-1:-1;;;8623:53:89;;-1:-1:-1;;;;;8623:14:89;;::::2;::::0;:19:::2;::::0;8650:11;;8623:53:::2;::::0;8663:12;;8623:53:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;8687:49:89::2;::::0;;188:25:181;;;8714:21:89::2;244:2:181::0;229:18;;222:34;8687:49:89::2;::::0;-1:-1:-1;161:18:181;;-1:-1:-1;8687:49:89::2;::::0;-1:-1:-1;14:248:181;8687:49:89::2;;;;;;;;8742:31;8761:11;8742:18;:31::i;:::-;2303:20:52::1;1716:1:::0;2809:7;:22;2629:209;2303:20:::1;8484:294:89::0;;;:::o;4528:114::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4600:8:89;-1:-1:-1;;;;;1616:20:89;::::1;1608:38;;;;-1:-1:-1::0;;;1608:38:89::1;;;;;;;:::i;:::-;4616:21:::2;4628:8;4616:11;:21::i;7716:354::-:0;1522:10;1507:26;;;;:14;:26;;;;;;;;1499:47;;;;-1:-1:-1;;;1499:47:89;;;;;;;:::i;:::-;2261:21:52::1;:19;:21::i;:::-;7947:14:89::2;::::0;:88:::2;::::0;-1:-1:-1;;;7947:88:89;;-1:-1:-1;;;;;7947:14:89;;::::2;::::0;:30:::2;::::0;:88:::2;::::0;7978:7;;;;7987:14;;8003;;8019:15;;7947:88:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;8041:24;8060:4;8041:18;:24::i;:::-;2303:20:52::1;1716:1:::0;2809:7;:22;2629:209;2303:20:::1;7716:354:89::0;;;;;;:::o;2336:287:52:-;1759:1;2468:7;;:19;2460:63;;;;-1:-1:-1;;;2460:63:52;;14513:2:181;2460:63:52;;;14495:21:181;14552:2;14532:18;;;14525:30;14591:33;14571:18;;;14564:61;14642:18;;2460:63:52;14311:355:181;2460:63:52;1759:1;2598:7;:18;2336:287::o;2412:312:57:-;2526:6;2501:21;:31;;2493:73;;;;-1:-1:-1;;;2493:73:57;;14873:2:181;2493:73:57;;;14855:21:181;14912:2;14892:18;;;14885:30;14951:31;14931:18;;;14924:59;15000:18;;2493:73:57;14671:353:181;2493:73:57;2578:12;2596:9;-1:-1:-1;;;;;2596:14:57;2618:6;2596:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:52;;;2647:7;2639:78;;;;-1:-1:-1;;;2639:78:57;;15441:2:181;2639:78:57;;;15423:21:181;15480:2;15460:18;;;15453:30;15519:34;15499:18;;;15492:62;15590:28;15570:18;;;15563:56;15636:19;;2639:78:57;15239:422:181;9760:140:89;9852:7;;9819:42;;;-1:-1:-1;;;;;15896:15:181;;;15878:34;;9852:7:89;;;15943:2:181;15928:18;;15921:43;9819:42:89;;15813:18:181;9819:42:89;;;;;;;9867:7;:28;;-1:-1:-1;;;;;;9867:28:89;-1:-1:-1;;;;;9867:28:89;;;;;;;;;;9760:140::o;10104:172::-;10220:13;;10175:60;;;-1:-1:-1;;;;;15896:15:181;;;15878:34;;10220:13:89;;;15943:2:181;15928:18;;15921:43;10175:60:89;;15813:18:181;10175:60:89;;;;;;;10241:13;:30;;-1:-1:-1;;;;;;10241:30:89;-1:-1:-1;;;;;10241:30:89;;;;;;;;;;10104:172::o;9577:179::-;-1:-1:-1;;;;;9642:24:89;;;;;;:14;:24;;;;;;;;9634:43;;;;-1:-1:-1;;;9634:43:89;;16177:2:181;9634:43:89;;;16159:21:181;16216:1;16196:18;;;16189:29;-1:-1:-1;;;16234:18:181;;;16227:36;16280:18;;9634:43:89;15975:329:181;9634:43:89;-1:-1:-1;;;;;9684:24:89;;9711:5;9684:24;;;:14;:24;;;;;;;;;:32;;-1:-1:-1;;9684:32:89;;;9727:24;;1361:51:181;;;9727:24:89;;1334:18:181;9727:24:89;;;;;;;;9577:179;:::o;4981:185:168:-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;9123:273:89:-;9198:13;;-1:-1:-1;;;;;9198:13:89;9184:10;:27;9180:159;;9247:12;;9221:46;;-1:-1:-1;;;;;9247:12:89;9262:4;9221:17;:46::i;:::-;9180:159;;;9288:44;9314:10;9327:4;9288:17;:44::i;:::-;9349:42;;;188:25:181;;;9369:21:89;244:2:181;229:18;;222:34;9349:42:89;;161:18:181;9349:42:89;14:248:181;9904:196:89;10024:14;;9977:63;;;-1:-1:-1;;;;;15896:15:181;;;15878:34;;10024:14:89;;;15943:2:181;15928:18;;15921:43;9977:63:89;;15813:18:181;9977:63:89;;;;;;;10046:14;:49;;-1:-1:-1;;;;;;10046:49:89;-1:-1:-1;;;;;10046:49:89;;;;;;;;;;9904:196::o;10280:165::-;10392:12;;10349:57;;;-1:-1:-1;;;;;15896:15:181;;;15878:34;;10392:12:89;;;15943:2:181;15928:18;;15921:43;10349:57:89;;15813:18:181;10349:57:89;;;;;;;10412:12;:28;;-1:-1:-1;;;;;;10412:28:89;-1:-1:-1;;;;;10412:28:89;;;;;;;;;;10280:165::o;5170:183:168:-;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;9400:173:89:-;-1:-1:-1;;;;;9463:24:89;;;;;;:14;:24;;;;;;;;9462:25;9454:43;;;;-1:-1:-1;;;9454:43:89;;16511:2:181;9454:43:89;;;16493:21:181;16550:1;16530:18;;;16523:29;-1:-1:-1;;;16568:18:181;;;16561:35;16613:18;;9454:43:89;16309:328:181;9454:43:89;-1:-1:-1;;;;;9504:24:89;;;;;;:14;:24;;;;;;;;;:31;;-1:-1:-1;;9504:31:89;9531:4;9504:31;;;9546:22;;1361:51:181;;;9546:22:89;;1334:18:181;9546:22:89;1215:203:181;267:173;335:20;;-1:-1:-1;;;;;384:31:181;;374:42;;364:70;;430:1;427;420:12;364:70;267:173;;;:::o;445:186::-;504:6;557:2;545:9;536:7;532:23;528:32;525:52;;;573:1;570;563:12;525:52;596:29;615:9;596:29;:::i;:::-;586:39;445:186;-1:-1:-1;;;445:186:181:o;1423:460::-;1523:6;1531;1584:2;1572:9;1563:7;1559:23;1555:32;1552:52;;;1600:1;1597;1590:12;1552:52;1640:9;1627:23;1673:18;1665:6;1662:30;1659:50;;;1705:1;1702;1695:12;1659:50;1728:22;;1784:3;1766:16;;;1762:26;1759:46;;;1801:1;1798;1791:12;1759:46;1824:2;1873;1858:18;;;;1845:32;;-1:-1:-1;;;1423:460:181:o;2303:127::-;2364:10;2359:3;2355:20;2352:1;2345:31;2395:4;2392:1;2385:15;2419:4;2416:1;2409:15;2435:1067;2521:6;2529;2537;2590:2;2578:9;2569:7;2565:23;2561:32;2558:52;;;2606:1;2603;2596:12;2558:52;2646:9;2633:23;2675:18;2716:2;2708:6;2705:14;2702:34;;;2732:1;2729;2722:12;2702:34;2770:6;2759:9;2755:22;2745:32;;2815:7;2808:4;2804:2;2800:13;2796:27;2786:55;;2837:1;2834;2827:12;2786:55;2873:2;2860:16;2895:2;2891;2888:10;2885:36;;;2901:18;;:::i;:::-;2976:2;2970:9;2944:2;3030:13;;-1:-1:-1;;3026:22:181;;;3050:2;3022:31;3018:40;3006:53;;;3074:18;;;3094:22;;;3071:46;3068:72;;;3120:18;;:::i;:::-;3160:10;3156:2;3149:22;3195:2;3187:6;3180:18;3237:7;3230:4;3225:2;3221;3217:11;3213:22;3210:35;3207:55;;;3258:1;3255;3248:12;3207:55;3318:2;3311:4;3307:2;3303:13;3296:4;3288:6;3284:17;3271:50;3365:1;3358:4;3353:2;3345:6;3341:15;3337:26;3330:37;3386:6;3376:16;;;;;;;3439:4;3428:9;3424:20;3411:34;3401:44;;3492:2;3481:9;3477:18;3464:32;3454:42;;2435:1067;;;;;:::o;3733:161::-;3827:6;3860:4;3848:17;;3845:26;-1:-1:-1;3842:46:181;;;3884:1;3881;3874:12;3899:981;4073:6;4081;4089;4097;4105;4113;4166:4;4154:9;4145:7;4141:23;4137:34;4134:54;;;4184:1;4181;4174:12;4134:54;4224:9;4211:23;4253:18;4294:2;4286:6;4283:14;4280:34;;;4310:1;4307;4300:12;4280:34;4348:6;4337:9;4333:22;4323:32;;4393:7;4386:4;4382:2;4378:13;4374:27;4364:55;;4415:1;4412;4405:12;4364:55;4455:2;4442:16;4481:2;4473:6;4470:14;4467:34;;;4497:1;4494;4487:12;4467:34;4552:7;4545:4;4535:6;4532:1;4528:14;4524:2;4520:23;4516:34;4513:47;4510:67;;;4573:1;4570;4563:12;4510:67;4604:4;4596:13;;;;-1:-1:-1;4628:6:181;-1:-1:-1;;4666:20:181;;4653:34;;-1:-1:-1;4706:62:181;4760:7;4755:2;4740:18;;4706:62;:::i;:::-;4696:72;;4815:4;4804:9;4800:20;4787:34;4777:44;;4868:4;4857:9;4853:20;4840:34;4830:44;;3899:981;;;;;;;;:::o;4885:328::-;5087:2;5069:21;;;5126:1;5106:18;;;5099:29;-1:-1:-1;;;5159:2:181;5144:18;;5137:35;5204:2;5189:18;;4885:328::o;5218:225::-;5285:9;;;5306:11;;;5303:134;;;5359:10;5354:3;5350:20;5347:1;5340:31;5394:4;5391:1;5384:15;5422:4;5419:1;5412:15;5448:331;5650:2;5632:21;;;5689:1;5669:18;;;5662:29;-1:-1:-1;;;5722:2:181;5707:18;;5700:38;5770:2;5755:18;;5448:331::o;5784:163::-;5851:20;;5911:10;5900:22;;5890:33;;5880:61;;5937:1;5934;5927:12;6051:160;6116:20;;6172:13;;6165:21;6155:32;;6145:60;;6201:1;6198;6191:12;6216:500;6274:5;6281:6;6341:3;6328:17;6427:2;6423:7;6412:8;6396:14;6392:29;6388:43;6368:18;6364:68;6354:96;;6446:1;6443;6436:12;6354:96;6474:33;;6578:4;6565:18;;;-1:-1:-1;6526:21:181;;-1:-1:-1;6606:18:181;6595:30;;6592:50;;;6638:1;6635;6628:12;6592:50;6685:6;6669:14;6665:27;6658:5;6654:39;6651:59;;;6706:1;6703;6696:12;6651:59;6216:500;;;;;:::o;6721:266::-;6809:6;6804:3;6797:19;6861:6;6854:5;6847:4;6842:3;6838:14;6825:43;-1:-1:-1;6913:1:181;6888:16;;;6906:4;6884:27;;;6877:38;;;;6969:2;6948:15;;;-1:-1:-1;;6944:29:181;6935:39;;;6931:50;;6721:266::o;6992:520::-;7062:5;7069:6;7129:3;7116:17;7215:2;7211:7;7200:8;7184:14;7180:29;7176:43;7156:18;7152:68;7142:96;;7234:1;7231;7224:12;7142:96;7262:33;;7366:4;7353:18;;;-1:-1:-1;7314:21:181;;-1:-1:-1;7394:18:181;7383:30;;7380:50;;;7426:1;7423;7416:12;7380:50;7480:6;7477:1;7473:14;7457;7453:35;7446:5;7442:47;7439:67;;;7502:1;7499;7492:12;7517:447;7617:6;7612:3;7605:19;7587:3;7643:4;7672:2;7667:3;7663:12;7656:19;;7698:5;7721:1;7731:208;7745:6;7742:1;7739:13;7731:208;;;-1:-1:-1;;;;;7810:26:181;7829:6;7810:26;:::i;:::-;7806:52;7794:65;;7879:12;;;;7914:15;;;;7767:1;7760:9;7731:208;;;-1:-1:-1;7955:3:181;;7517:447;-1:-1:-1;;;;;7517:447:181:o;7969:714::-;8076:6;8071:3;8064:19;8046:3;8102:4;8143:2;8138:3;8134:12;8168:11;8195;8188:18;;8245:6;8242:1;8238:14;8231:5;8227:26;8215:38;;8276:5;8299:1;8309:348;8323:6;8320:1;8317:13;8309:348;;;8394:5;8388:4;8384:16;8379:3;8372:29;8450:45;8488:6;8481:5;8450:45;:::i;:::-;8516:61;8572:4;8557:13;8542;8516:61;:::i;:::-;8635:12;;;;8508:69;-1:-1:-1;;;8600:15:181;;;;8345:1;8338:9;8309:348;;;-1:-1:-1;8673:4:181;;7969:714;-1:-1:-1;;;;;;;7969:714:181:o;8688:2986::-;8879:2;8868:9;8861:21;8842:4;8930:6;8917:20;9017:3;9013:8;9004:6;8988:14;8984:27;8980:42;8960:18;8956:67;8946:95;;9037:1;9034;9027:12;8946:95;9130:4;9125:2;9110:18;;9103:32;9063:31;;9144:64;9203:3;9188:19;;9162:24;9063:31;9162:24;:::i;:::-;6028:10;6017:22;6005:35;;5952:94;9144:64;9237:33;9266:2;9259:5;9255:14;9237:33;:::i;:::-;6028:10;6017:22;9326:3;9311:19;;6005:35;9362;9391:4;9380:16;;9362:35;:::i;:::-;9416:3;9428:53;9477:2;9466:9;9462:18;9446:14;6028:10;6017:22;6005:35;;5952:94;9428:53;9512:36;9542:4;9535:5;9531:16;9512:36;:::i;:::-;9490:58;;9567:3;9579:54;9629:2;9618:9;9614:18;9598:14;-1:-1:-1;;;;;1172:31:181;1160:44;;1106:104;9579:54;9664:36;9694:4;9687:5;9683:16;9664:36;:::i;:::-;9642:58;;9719:3;9731:54;9781:2;9770:9;9766:18;9750:14;-1:-1:-1;;;;;1172:31:181;1160:44;;1106:104;9731:54;9816:33;9843:4;9836:5;9832:16;9816:33;:::i;:::-;9794:55;;9868:3;9880:51;9927:2;9916:9;9912:18;9896:14;706:13;699:21;687:34;;636:91;9880:51;9976:54;10025:3;10018:5;10014:15;10007:5;9976:54;:::i;:::-;9940:90;;10049:6;10074:3;10113:2;10108;10097:9;10093:18;10086:30;10139:76;10210:3;10199:9;10195:19;10181:12;10165:14;10139:76;:::i;:::-;10125:90;;10275:3;10268:5;10264:15;10251:29;10246:2;10235:9;10231:18;10224:57;10312:34;10342:2;10335:5;10331:14;10312:34;:::i;:::-;-1:-1:-1;;;;;1172:31:181;10405:3;10390:19;;1160:44;10460:14;;;10447:28;10441:3;10426:19;;10419:57;-1:-1:-1;;10526:14:181;;;10513:28;10507:3;10492:19;;10485:57;10592:14;;10579:28;10573:3;10558:19;;10551:57;10658:14;;10645:28;10639:3;10624:19;;10617:57;-1:-1:-1;10721:67:181;10784:2;10772:15;;;10721:67;:::i;:::-;10683:105;;10811:2;10807:7;10880:2;10868:9;10860:6;10856:22;10852:31;10845:4;10834:9;10830:20;10823:61;10907:77;10977:6;10961:14;10945;10907:77;:::i;:::-;10893:91;;11031:69;11094:4;11086:6;11082:17;11074:6;11031:69;:::i;:::-;10993:107;;;;11166:2;11154:9;11146:6;11142:22;11138:31;11131:4;11120:9;11116:20;11109:61;11193:84;11270:6;11254:14;11238;11193:84;:::i;:::-;11179:98;;11308:37;11339:4;11331:6;11327:17;11308:37;:::i;:::-;-1:-1:-1;;;;;1172:31:181;;11404:4;11389:20;;1160:44;11286:59;-1:-1:-1;11458:57:181;11509:4;11501:6;11497:17;11489:6;11458:57;:::i;:::-;11419:96;;;;11581:2;11569:9;11561:6;11557:22;11553:31;11546:4;11535:9;11531:20;11524:61;;11602:66;11661:6;11645:14;11628:15;11602:66;:::i;:::-;11594:74;8688:2986;-1:-1:-1;;;;;;8688:2986:181:o;11679:184::-;11749:6;11802:2;11790:9;11781:7;11777:23;11773:32;11770:52;;;11818:1;11815;11808:12;11770:52;-1:-1:-1;11841:16:181;;11679:184;-1:-1:-1;11679:184:181:o;11868:546::-;11978:4;12007:2;12036;12025:9;12018:21;12068:6;12062:13;12111:6;12106:2;12095:9;12091:18;12084:34;12136:1;12146:140;12160:6;12157:1;12154:13;12146:140;;;12255:14;;;12251:23;;12245:30;12221:17;;;12240:2;12217:26;12210:66;12175:10;;12146:140;;;12150:3;12335:1;12330:2;12321:6;12310:9;12306:22;12302:31;12295:42;12405:2;12398;12394:7;12389:2;12381:6;12377:15;12373:29;12362:9;12358:45;12354:54;12346:62;;;;11868:546;;;;:::o;12419:107::-;12513:6;12506:5;12501:3;12488:32;;;12419:107::o;12531:1775::-;12896:4;12950:21;;;12923:18;;13006:22;;;12867:4;13047;13067:18;;;;13131:1;13127:14;;;13112:30;;13108:39;13170:6;12867:4;;13225:890;13241:6;13236:3;13233:15;13225:890;;;13310:22;;;-1:-1:-1;;13306:38:181;13294:51;;13384:20;;13459:14;13455:27;;;-1:-1:-1;;13451:43:181;13427:68;;13417:96;;13509:1;13506;13499:12;13417:96;13539:31;;13593:6;13646:44;13539:31;;13646:44;:::i;:::-;13718:2;13710:6;13703:18;13748:70;13814:2;13806:6;13802:15;13788:12;13774;13748:70;:::i;:::-;13734:84;;;;13841:4;13904:6;13899:2;13892:5;13888:14;13883:2;13875:6;13871:15;13858:53;13934:6;13990:14;;;13977:28;13960:15;;;;13953:53;;;;14093:12;;;;14058:15;;;;;13267:1;13258:11;13225:890;;;13229:3;;;14132:6;14124:14;;;;14176:6;14169:4;14158:9;14154:20;14147:36;14192:61;14249:2;14238:9;14234:18;14226:6;14192:61;:::i;:::-;14293:6;14284;14273:9;14269:22;14262:38;12531:1775;;;;;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"1240800","executionCost":"infinite","totalCost":"infinite"},"external":{"acceptProposedOwner()":"63903","addRelayer(address)":"30203","allowedRelayer(address)":"2544","connext()":"2447","delay()":"237","execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),uint256)":"infinite","feeCollector()":"2448","gelatoRelayer()":"2404","owner()":"2442","proposeNewOwner(address)":"56507","proposed()":"2353","proposedTimestamp()":"2349","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256,uint256)":"infinite","removeRelayer(address)":"30118","renounceOwnership()":"65999","renounced()":"2352","send(bytes,uint256,uint256)":"infinite","setConnext(address)":"30331","setFeeCollector(address)":"30308","setGelatoRelayer(address)":"30353","setSpokeConnector(address)":"30286","spokeConnector()":"2360","withdraw()":"infinite"},"internal":{"_addRelayer(address)":"infinite","_removeRelayer(address)":"infinite","_setConnext(address)":"infinite","_setFeeCollector(address)":"infinite","_setGelatoRelayer(address)":"infinite","_setSpokeConnector(address)":"infinite","transferRelayerFee(uint256)":"infinite"}},"methodIdentifiers":{"acceptProposedOwner()":"c5b350df","addRelayer(address)":"dd39f00d","allowedRelayer(address)":"2f55b98d","connext()":"de4b0548","delay()":"6a42b8f8","execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),uint256)":"8efed127","feeCollector()":"c415b95c","gelatoRelayer()":"6eba787f","owner()":"8da5cb5b","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256,uint256)":"e79457f1","removeRelayer(address)":"60f0a5ac","renounceOwnership()":"715018a6","renounced()":"d232c220","send(bytes,uint256,uint256)":"d9ef0bee","setConnext(address)":"4d6f2013","setFeeCollector(address)":"a42dce80","setGelatoRelayer(address)":"5e21966a","setSpokeConnector(address)":"9f645a03","spokeConnector()":"9cadce00","withdraw()":"3ccfd60b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_connext\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spokeConnector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_gelatoRelayer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_feeCollector\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"}],\"name\":\"ConnextChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"}],\"name\":\"FeeCollectorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"name\":\"FundsDeducted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"name\":\"FundsReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"}],\"name\":\"GelatoRelayerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"}],\"name\":\"RelayerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"}],\"name\":\"RelayerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"}],\"name\":\"SpokeConnectorChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayer\",\"type\":\"address\"}],\"name\":\"addRelayer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowedRelayer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"connext\",\"outputs\":[{\"internalType\":\"contract IConnext\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"routers\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"routerSignatures\",\"type\":\"bytes[]\"},{\"internalType\":\"address\",\"name\":\"sequencer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSignature\",\"type\":\"bytes\"}],\"internalType\":\"struct ExecuteArgs\",\"name\":\"_args\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeCollector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gelatoRelayer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"path\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct ISpokeConnector.Proof[]\",\"name\":\"_proofs\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"_aggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[32]\",\"name\":\"_aggregatePath\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"_aggregateIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"proveAndProcess\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayer\",\"type\":\"address\"}],\"name\":\"removeRelayer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_messageFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_relayerFee\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_connext\",\"type\":\"address\"}],\"name\":\"setConnext\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_feeCollector\",\"type\":\"address\"}],\"name\":\"setFeeCollector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gelatoRelayer\",\"type\":\"address\"}],\"name\":\"setGelatoRelayer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spokeConnector\",\"type\":\"address\"}],\"name\":\"setSpokeConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"spokeConnector\",\"outputs\":[{\"internalType\":\"contract ISpokeConnector\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Connext Labs, Inc.\",\"events\":{\"ConnextChanged(address,address)\":{\"params\":{\"previous\":\"Old Connext address in the contract\",\"updated\":\"New Connext address in the contract\"}},\"FeeCollectorChanged(address,address)\":{\"params\":{\"previous\":\"Old FeeCollectorChanged address in the contract\",\"updated\":\"New FeeCollectorChanged address in the contract\"}},\"FundsDeducted(uint256,uint256)\":{\"params\":{\"amount\":\"The amount removed\",\"balance\":\"The updated balance of the contract\"}},\"FundsReceived(uint256,uint256)\":{\"params\":{\"amount\":\"The amount added\",\"balance\":\"The updated balance of the contract\"}},\"GelatoRelayerChanged(address,address)\":{\"params\":{\"previous\":\"Old Gelatorelayer address in the contract\",\"updated\":\"New GelatoRelayer address in the contract\"}},\"RelayerAdded(address)\":{\"params\":{\"relayer\":\"Address of the added relayer\"}},\"RelayerRemoved(address)\":{\"params\":{\"relayer\":\"Address of the removed relayer\"}},\"SpokeConnectorChanged(address,address)\":{\"params\":{\"previous\":\"Old SpokeConnector address in the contract\",\"updated\":\"New SpokeConnector address in the contract\"}}},\"kind\":\"dev\",\"methods\":{\"addRelayer(address)\":{\"params\":{\"_relayer\":\"- Relayer address to add.\"}},\"constructor\":{\"params\":{\"_connext\":\"The address of the Connext on this domain.\",\"_feeCollector\":\"The address of the Gelato Fee Collector on this domain.\",\"_gelatoRelayer\":\"The address of the Gelato relayer on this domain.\",\"_spokeConnector\":\"The address of the SpokeConnector on this domain.\"}},\"execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),uint256)\":{\"params\":{\"_args\":\"- ExecuteArgs arguments.\",\"_fee\":\"- Fee to be paid to relayer.\"},\"returns\":{\"transferId\":\"- The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for reconciliation to occur.\"}},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256,uint256)\":{\"params\":{\"_aggregateIndex\":\"Index of the inbound root in the aggregator's merkle tree in the hub.\",\"_aggregatePath\":\"Merkle path of inclusion for the inbound root.\",\"_aggregateRoot\":\"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.\",\"_fee\":\"- Fee to be paid to relayer.\",\"_proofs\":\"Batch of Proofs containing messages for proving/processing.\"}},\"removeRelayer(address)\":{\"params\":{\"_relayer\":\"- Relayer address to remove.\"}},\"send(bytes,uint256,uint256)\":{\"params\":{\"_encodedData\":\"- Data to be sent to Connext SpokeConnector\",\"_messageFee\":\"- Fee to be paid to the SpokeConnector for connected AMBs that require fees.\",\"_relayerFee\":\"- Fee to be paid to relayer.\"}},\"setConnext(address)\":{\"params\":{\"_connext\":\"- New Connext address.\"}},\"setFeeCollector(address)\":{\"params\":{\"_feeCollector\":\"- New Gelato Fee Collector address.\"}},\"setGelatoRelayer(address)\":{\"params\":{\"_gelatoRelayer\":\"- New Gelato relayer address.\"}},\"setSpokeConnector(address)\":{\"params\":{\"_spokeConnector\":\"- New SpokeConnector address.\"}}},\"title\":\"RelayerProxy\",\"version\":1},\"userdoc\":{\"events\":{\"ConnextChanged(address,address)\":{\"notice\":\"Emitted when Connext contract address is updated by admin\"},\"FeeCollectorChanged(address,address)\":{\"notice\":\"Emitted when FeeCollectorChanged address is updated by admin\"},\"FundsDeducted(uint256,uint256)\":{\"notice\":\"Emitted when funds removed from the contract by admin\"},\"FundsReceived(uint256,uint256)\":{\"notice\":\"Emitted when funds added to the contract\"},\"GelatoRelayerChanged(address,address)\":{\"notice\":\"Emitted when GelatoRelayer address is updated by admin\"},\"RelayerAdded(address)\":{\"notice\":\"Emitted when a new relayer is allowlisted by admin\"},\"RelayerRemoved(address)\":{\"notice\":\"Emitted when a relayer is removed from allowlist by admin\"},\"SpokeConnectorChanged(address,address)\":{\"notice\":\"Emitted when SpokeConnector contract address is updated by admin\"}},\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"addRelayer(address)\":{\"notice\":\"Adds a relayer address to the allowed relayers mapping.\"},\"constructor\":{\"notice\":\"Creates a new RelayerProxy instance.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),uint256)\":{\"notice\":\"Wraps the call to execute() on Connext and pays either the caller or hardcoded relayer from this contract's balance for completing the transaction.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256,uint256)\":{\"notice\":\"Wraps the call to proveAndProcess() on SpokeConnector and pays either the caller or hardcoded relayer from this contract's balance for completing the transaction.\"},\"removeRelayer(address)\":{\"notice\":\"Removes a relayer address from the allowed relayers mapping.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"send(bytes,uint256,uint256)\":{\"notice\":\"Wraps the call to send() on SpokeConnector and pays either the caller or hardcoded relayer from this contract's balance for completing the transaction.\"},\"setConnext(address)\":{\"notice\":\"Updates the Connext address on this contract.\"},\"setFeeCollector(address)\":{\"notice\":\"Updates the Gelato Fee Collector address on this contract.\"},\"setGelatoRelayer(address)\":{\"notice\":\"Updates the Gelato relayer address on this contract.\"},\"setSpokeConnector(address)\":{\"notice\":\"Updates the SpokeConnector address on this contract.\"},\"withdraw()\":{\"notice\":\"Withdraws all funds stored on this contract to msg.sender.\"}},\"notice\":\"This is a temporary contract that wraps fast path functions in the Connext interface so that they can be called by Gelato's legacy relayer network. The contract stores native assets and pays them to the relayer on function call.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/helpers/RelayerProxy.sol\":\"RelayerProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.1;\\n\\nimport {GelatoRelayBase} from \\\"./base/GelatoRelayBase.sol\\\";\\n\\nuint256 constant _FEE_COLLECTOR_START = 20;\\n\\n// WARNING: Do not use this free fn by itself, always inherit GelatoRelayFeeCollector\\n// solhint-disable-next-line func-visibility, private-vars-leading-underscore\\nfunction __getFeeCollector() pure returns (address feeCollector) {\\n    assembly {\\n        feeCollector := shr(\\n            96,\\n            calldataload(sub(calldatasize(), _FEE_COLLECTOR_START))\\n        )\\n    }\\n}\\n\\n/**\\n * @dev Context variant with only feeCollector appended to msg.data\\n * Expects calldata encoding:\\n *   abi.encodePacked(bytes data, address feeCollectorAddress)\\n * Therefore, we're expecting 20bytes to be appended to normal msgData\\n * 20bytes start offsets from calldatasize:\\n *    feeCollector: -20\\n */\\n/// @dev Do not use with GelatoRelayContext - pick only one\\nabstract contract GelatoRelayFeeCollector is GelatoRelayBase {\\n    function _getMsgData() internal view returns (bytes calldata) {\\n        return\\n            _isGelatoRelay(msg.sender)\\n                ? msg.data[:msg.data.length - _FEE_COLLECTOR_START]\\n                : msg.data;\\n    }\\n\\n    // Only use with GelatoRelayBase onlyGelatoRelay or `_isGelatoRelay` checks\\n    function _getFeeCollector() internal pure returns (address) {\\n        return __getFeeCollector();\\n    }\\n}\\n\",\"keccak256\":\"0x24d0c82254158c5d7cbb88bfafdab8197dbafc8be6e03d6dd13a3479bf7fc18d\",\"license\":\"MIT\"},\"@gelatonetwork/relay-context/contracts/base/GelatoRelayBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.1;\\n\\nimport {GELATO_RELAY} from \\\"../constants/GelatoRelay.sol\\\";\\n\\nabstract contract GelatoRelayBase {\\n    modifier onlyGelatoRelay() {\\n        require(_isGelatoRelay(msg.sender), \\\"onlyGelatoRelay\\\");\\n        _;\\n    }\\n\\n    function _isGelatoRelay(address _forwarder) internal pure returns (bool) {\\n        return _forwarder == GELATO_RELAY;\\n    }\\n}\\n\",\"keccak256\":\"0x8b8ca04a1b6dce1b14b0b5f59783defe5562f876f0d6127aefa3e251b7631ba1\",\"license\":\"MIT\"},\"@gelatonetwork/relay-context/contracts/constants/GelatoRelay.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.1;\\n\\naddress constant GELATO_RELAY = 0xaBcC9b596420A9E9172FD5938620E265a0f9Df92;\\naddress constant GELATO_RELAY_ERC2771 = 0xBf175FCC7086b4f9bd59d5EAE8eA67b8f940DE0d;\\n\",\"keccak256\":\"0xa3f9966896db1bfafbcb1b58d1d76b44d1cd1660986e675d57398d5a9a74d242\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/RelayerProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\nimport {ReentrancyGuard} from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport {GelatoRelayFeeCollector} from \\\"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../../../shared/ProposedOwnable.sol\\\";\\nimport {IConnext, ExecuteArgs} from \\\"../interfaces/IConnext.sol\\\";\\n\\ninterface ISpokeConnector {\\n  struct Proof {\\n    bytes message;\\n    bytes32[32] path;\\n    uint256 index;\\n  }\\n\\n  function proveAndProcess(\\n    Proof[] calldata _proofs,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) external;\\n\\n  function send(bytes memory _encodedData) external payable;\\n}\\n\\n/**\\n * @title RelayerProxy\\n * @author Connext Labs, Inc.\\n * @notice This is a temporary contract that wraps fast path functions in the Connext interface so that they can be called by\\n * Gelato's legacy relayer network. The contract stores native assets and pays them to the relayer on function call.\\n */\\ncontract RelayerProxy is ProposedOwnable, ReentrancyGuard, GelatoRelayFeeCollector {\\n  // ============ Properties ============\\n  address public gelatoRelayer;\\n  address public feeCollector;\\n  IConnext public connext;\\n  ISpokeConnector public spokeConnector;\\n\\n  mapping(address => bool) public allowedRelayer;\\n\\n  // ============ Modifier ============\\n\\n  modifier onlyRelayer() {\\n    require(allowedRelayer[msg.sender], \\\"!relayer\\\");\\n    _;\\n  }\\n\\n  modifier definedAddress(address _input) {\\n    require(_input != address(0), \\\"empty\\\");\\n    _;\\n  }\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted when funds added to the contract\\n   * @param amount The amount added\\n   * @param balance The updated balance of the contract\\n   */\\n  event FundsReceived(uint256 amount, uint256 balance);\\n\\n  /**\\n   * @notice Emitted when funds removed from the contract by admin\\n   * @param amount The amount removed\\n   * @param balance The updated balance of the contract\\n   */\\n  event FundsDeducted(uint256 amount, uint256 balance);\\n\\n  /**\\n   * @notice Emitted when a new relayer is allowlisted by admin\\n   * @param relayer Address of the added relayer\\n   */\\n  event RelayerAdded(address relayer);\\n\\n  /**\\n   * @notice Emitted when a relayer is removed from allowlist by admin\\n   * @param relayer Address of the removed relayer\\n   */\\n  event RelayerRemoved(address relayer);\\n\\n  /**\\n   * @notice Emitted when Connext contract address is updated by admin\\n   * @param updated New Connext address in the contract\\n   * @param previous Old Connext address in the contract\\n   */\\n  event ConnextChanged(address updated, address previous);\\n\\n  /**\\n   * @notice Emitted when SpokeConnector contract address is updated by admin\\n   * @param updated New SpokeConnector address in the contract\\n   * @param previous Old SpokeConnector address in the contract\\n   */\\n  event SpokeConnectorChanged(address updated, address previous);\\n\\n  /**\\n   * @notice Emitted when GelatoRelayer address is updated by admin\\n   * @param updated New GelatoRelayer address in the contract\\n   * @param previous Old Gelatorelayer address in the contract\\n   */\\n  event GelatoRelayerChanged(address updated, address previous);\\n\\n  /**\\n   * @notice Emitted when FeeCollectorChanged address is updated by admin\\n   * @param updated New FeeCollectorChanged address in the contract\\n   * @param previous Old FeeCollectorChanged address in the contract\\n   */\\n  event FeeCollectorChanged(address updated, address previous);\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new RelayerProxy instance.\\n   * @param _connext The address of the Connext on this domain.\\n   * @param _spokeConnector The address of the SpokeConnector on this domain.\\n   * @param _gelatoRelayer The address of the Gelato relayer on this domain.\\n   * @param _feeCollector The address of the Gelato Fee Collector on this domain.\\n   */\\n  constructor(\\n    address _connext,\\n    address _spokeConnector,\\n    address _gelatoRelayer,\\n    address _feeCollector\\n  ) ProposedOwnable() {\\n    _setOwner(msg.sender);\\n    _setConnext(_connext);\\n    _setSpokeConnector(_spokeConnector);\\n    _setGelatoRelayer(_gelatoRelayer);\\n    _setFeeCollector(_feeCollector);\\n\\n    _addRelayer(_gelatoRelayer);\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Adds a relayer address to the allowed relayers mapping.\\n   *\\n   * @param _relayer - Relayer address to add.\\n   */\\n  function addRelayer(address _relayer) external onlyOwner definedAddress(_relayer) {\\n    _addRelayer(_relayer);\\n  }\\n\\n  /**\\n   * @notice Removes a relayer address from the allowed relayers mapping.\\n   *\\n   * @param _relayer - Relayer address to remove.\\n   */\\n  function removeRelayer(address _relayer) external onlyOwner definedAddress(_relayer) {\\n    _removeRelayer(_relayer);\\n  }\\n\\n  /**\\n   * @notice Updates the Connext address on this contract.\\n   *\\n   * @param _connext - New Connext address.\\n   */\\n  function setConnext(address _connext) external onlyOwner definedAddress(_connext) {\\n    _setConnext(_connext);\\n  }\\n\\n  /**\\n   * @notice Updates the SpokeConnector address on this contract.\\n   *\\n   * @param _spokeConnector - New SpokeConnector address.\\n   */\\n  function setSpokeConnector(address _spokeConnector) external onlyOwner definedAddress(_spokeConnector) {\\n    _setSpokeConnector(_spokeConnector);\\n  }\\n\\n  /**\\n   * @notice Updates the Gelato relayer address on this contract.\\n   *\\n   * @param _gelatoRelayer - New Gelato relayer address.\\n   */\\n  function setGelatoRelayer(address _gelatoRelayer) external onlyOwner definedAddress(_gelatoRelayer) {\\n    _setGelatoRelayer(_gelatoRelayer);\\n  }\\n\\n  /**\\n   * @notice Updates the Gelato Fee Collector address on this contract.\\n   *\\n   * @param _feeCollector - New Gelato Fee Collector address.\\n   */\\n  function setFeeCollector(address _feeCollector) external onlyOwner definedAddress(_feeCollector) {\\n    _setFeeCollector(_feeCollector);\\n  }\\n\\n  /**\\n   * @notice Withdraws all funds stored on this contract to msg.sender.\\n   */\\n  function withdraw() external onlyOwner nonReentrant {\\n    uint256 balance = address(this).balance;\\n    Address.sendValue(payable(msg.sender), balance);\\n    emit FundsDeducted(balance, address(this).balance);\\n  }\\n\\n  // ============ External Functions ============\\n\\n  /**\\n   * @notice Wraps the call to execute() on Connext and pays either the caller or hardcoded relayer from this\\n   * contract's balance for completing the transaction.\\n   *\\n   * @param _args - ExecuteArgs arguments.\\n   * @param _fee - Fee to be paid to relayer.\\n   * @return transferId - The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for\\n   * reconciliation to occur.\\n   */\\n  function execute(ExecuteArgs calldata _args, uint256 _fee)\\n    external\\n    onlyRelayer\\n    nonReentrant\\n    returns (bytes32 transferId)\\n  {\\n    transferId = connext.execute(_args);\\n    transferRelayerFee(_fee);\\n  }\\n\\n  /**\\n   * @notice Wraps the call to proveAndProcess() on SpokeConnector and pays either the caller or hardcoded relayer\\n   * from this contract's balance for completing the transaction.\\n   *\\n   * @param _proofs Batch of Proofs containing messages for proving/processing.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   * @param _fee - Fee to be paid to relayer.\\n   */\\n  function proveAndProcess(\\n    ISpokeConnector.Proof[] calldata _proofs,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex,\\n    uint256 _fee\\n  ) external onlyRelayer nonReentrant {\\n    spokeConnector.proveAndProcess(_proofs, _aggregateRoot, _aggregatePath, _aggregateIndex);\\n    transferRelayerFee(_fee);\\n  }\\n\\n  /**\\n   * @notice Wraps the call to send() on SpokeConnector and pays either the caller or hardcoded relayer from this\\n   * contract's balance for completing the transaction.\\n   *\\n   * @param _encodedData - Data to be sent to Connext SpokeConnector\\n   * @param _messageFee - Fee to be paid to the SpokeConnector for connected AMBs that require fees.\\n   * @param _relayerFee - Fee to be paid to relayer.\\n   */\\n  function send(\\n    bytes memory _encodedData,\\n    uint256 _messageFee,\\n    uint256 _relayerFee\\n  ) external onlyRelayer nonReentrant {\\n    spokeConnector.send{value: _messageFee}(_encodedData);\\n    emit FundsDeducted(_messageFee, address(this).balance);\\n    transferRelayerFee(_relayerFee);\\n  }\\n\\n  receive() external payable {\\n    emit FundsReceived(msg.value, address(this).balance);\\n  }\\n\\n  // ============ Internal Functions ============\\n\\n  /**\\n   * @notice helper function to transfer fees to either Gelato relayer via Fee Collector or to our\\n   * backup relayer (msg.sender).\\n   *\\n   * @param _fee - Fee to be paid to relayer.\\n   */\\n  function transferRelayerFee(uint256 _fee) internal {\\n    if (msg.sender == gelatoRelayer) {\\n      Address.sendValue(payable(feeCollector), _fee);\\n    } else {\\n      Address.sendValue(payable(msg.sender), _fee);\\n    }\\n    emit FundsDeducted(_fee, address(this).balance);\\n  }\\n\\n  function _addRelayer(address _relayer) internal {\\n    require(!allowedRelayer[_relayer], \\\"added\\\");\\n\\n    allowedRelayer[_relayer] = true;\\n    emit RelayerAdded(_relayer);\\n  }\\n\\n  function _removeRelayer(address _relayer) internal {\\n    require(allowedRelayer[_relayer], \\\"!added\\\");\\n\\n    allowedRelayer[_relayer] = false;\\n    emit RelayerRemoved(_relayer);\\n  }\\n\\n  function _setConnext(address _connext) internal {\\n    emit ConnextChanged(_connext, address(connext));\\n    connext = IConnext(_connext);\\n  }\\n\\n  function _setSpokeConnector(address _spokeConnector) internal {\\n    emit SpokeConnectorChanged(_spokeConnector, address(spokeConnector));\\n    spokeConnector = ISpokeConnector(_spokeConnector);\\n  }\\n\\n  function _setGelatoRelayer(address _gelatoRelayer) internal {\\n    emit GelatoRelayerChanged(_gelatoRelayer, address(gelatoRelayer));\\n    gelatoRelayer = _gelatoRelayer;\\n  }\\n\\n  function _setFeeCollector(address _feeCollector) internal {\\n    emit FeeCollectorChanged(_feeCollector, address(feeCollector));\\n    feeCollector = _feeCollector;\\n  }\\n}\\n\",\"keccak256\":\"0x46de461bc7394acde5c3302beb98744f0887e23d0109fc1147bd3cfbd50fbcc3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/interfaces/IConnext.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {ExecuteArgs, TransferInfo, DestinationTransferStatus} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {SwapUtils} from \\\"../libraries/SwapUtils.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\n\\nimport {IStableSwap} from \\\"./IStableSwap.sol\\\";\\n\\nimport {IDiamondCut} from \\\"./IDiamondCut.sol\\\";\\nimport {IDiamondLoupe} from \\\"./IDiamondLoupe.sol\\\";\\n\\ninterface IConnext is IDiamondLoupe, IDiamondCut {\\n  // TokenFacet\\n  function canonicalToAdopted(bytes32 _key) external view returns (address);\\n\\n  function canonicalToAdopted(TokenId calldata _canonical) external view returns (address);\\n\\n  function adoptedToCanonical(address _adopted) external view returns (TokenId memory);\\n\\n  function canonicalToRepresentation(bytes32 _key) external view returns (address);\\n\\n  function canonicalToRepresentation(TokenId calldata _canonical) external view returns (address);\\n\\n  function representationToCanonical(address _adopted) external view returns (TokenId memory);\\n\\n  function getLocalAndAdoptedToken(bytes32 _id, uint32 _domain) external view returns (address, address);\\n\\n  function approvedAssets(bytes32 _key) external view returns (bool);\\n\\n  function approvedAssets(TokenId calldata _canonical) external view returns (bool);\\n\\n  function adoptedToLocalExternalPools(bytes32 _key) external view returns (IStableSwap);\\n\\n  function adoptedToLocalExternalPools(TokenId calldata _canonical) external view returns (IStableSwap);\\n\\n  function getTokenId(address _candidate) external view returns (TokenId memory);\\n\\n  function getCustodiedAmount(bytes32 _key) external view returns (uint256);\\n\\n  function setupAsset(\\n    TokenId calldata _canonical,\\n    uint8 _canonicalDecimals,\\n    string memory _representationName,\\n    string memory _representationSymbol,\\n    address _adoptedAssetId,\\n    address _stableSwapPool,\\n    uint256 _cap\\n  ) external returns (address);\\n\\n  function setupAssetWithDeployedRepresentation(\\n    TokenId calldata _canonical,\\n    address _representation,\\n    address _adoptedAssetId,\\n    address _stableSwapPool\\n  ) external returns (address);\\n\\n  function addStableSwapPool(TokenId calldata _canonical, address _stableSwapPool) external;\\n\\n  function updateLiquidityCap(TokenId calldata _canonical, uint256 _updated) external;\\n\\n  function removeAssetId(\\n    bytes32 _key,\\n    address _adoptedAssetId,\\n    address _representation\\n  ) external;\\n\\n  function removeAssetId(\\n    TokenId calldata _canonical,\\n    address _adoptedAssetId,\\n    address _representation\\n  ) external;\\n\\n  function updateDetails(\\n    TokenId calldata _canonical,\\n    string memory _name,\\n    string memory _symbol\\n  ) external;\\n\\n  // BaseConnextFacet\\n\\n  // BridgeFacet\\n  function routedTransfers(bytes32 _transferId) external view returns (address[] memory);\\n\\n  function transferStatus(bytes32 _transferId) external view returns (DestinationTransferStatus);\\n\\n  function remote(uint32 _domain) external view returns (address);\\n\\n  function domain() external view returns (uint256);\\n\\n  function nonce() external view returns (uint256);\\n\\n  function approvedSequencers(address _sequencer) external view returns (bool);\\n\\n  function xAppConnectionManager() external view returns (address);\\n\\n  function addConnextion(uint32 _domain, address _connext) external;\\n\\n  function addSequencer(address _sequencer) external;\\n\\n  function removeSequencer(address _sequencer) external;\\n\\n  function xcall(\\n    uint32 _destination,\\n    address _to,\\n    address _asset,\\n    address _delegate,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    bytes calldata _callData\\n  ) external payable returns (bytes32);\\n\\n  function xcallIntoLocal(\\n    uint32 _destination,\\n    address _to,\\n    address _asset,\\n    address _delegate,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    bytes calldata _callData\\n  ) external payable returns (bytes32);\\n\\n  function execute(ExecuteArgs calldata _args) external returns (bytes32 transferId);\\n\\n  function forceUpdateSlippage(TransferInfo calldata _params, uint256 _slippage) external;\\n\\n  function forceReceiveLocal(TransferInfo calldata _params) external;\\n\\n  function bumpTransfer(bytes32 _transferId) external payable;\\n\\n  function setXAppConnectionManager(address _xAppConnectionManager) external;\\n\\n  function enrollRemoteRouter(uint32 _domain, bytes32 _router) external;\\n\\n  function enrollCustom(\\n    uint32 _domain,\\n    bytes32 _id,\\n    address _custom\\n  ) external;\\n\\n  // InboxFacet\\n\\n  function handle(\\n    uint32 _origin,\\n    uint32 _nonce,\\n    bytes32 _sender,\\n    bytes memory _message\\n  ) external;\\n\\n  // ProposedOwnableFacet\\n\\n  function owner() external view returns (address);\\n\\n  function routerAllowlistRemoved() external view returns (bool);\\n\\n  function proposed() external view returns (address);\\n\\n  function proposedTimestamp() external view returns (uint256);\\n\\n  function routerAllowlistTimestamp() external view returns (uint256);\\n\\n  function delay() external view returns (uint256);\\n\\n  function paused() external view returns (bool);\\n\\n  function proposeRouterAllowlistRemoval() external;\\n\\n  function removeRouterAllowlist() external;\\n\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  function acceptProposedOwner() external;\\n\\n  function pause() external;\\n\\n  function unpause() external;\\n\\n  // RelayerFacet\\n  function approvedRelayers(address _relayer) external view returns (bool);\\n\\n  function relayerFeeVault() external view returns (address);\\n\\n  function setRelayerFeeVault(address _relayerFeeVault) external;\\n\\n  function addRelayer(address _relayer) external;\\n\\n  function removeRelayer(address _relayer) external;\\n\\n  // RoutersFacet\\n  function LIQUIDITY_FEE_NUMERATOR() external view returns (uint256);\\n\\n  function LIQUIDITY_FEE_DENOMINATOR() external view returns (uint256);\\n\\n  function getRouterApproval(address _router) external view returns (bool);\\n\\n  function getRouterRecipient(address _router) external view returns (address);\\n\\n  function getRouterOwner(address _router) external view returns (address);\\n\\n  function getProposedRouterOwner(address _router) external view returns (address);\\n\\n  function getProposedRouterOwnerTimestamp(address _router) external view returns (uint256);\\n\\n  function maxRoutersPerTransfer() external view returns (uint256);\\n\\n  function routerBalances(address _router, address _asset) external view returns (uint256);\\n\\n  function getRouterApprovalForPortal(address _router) external view returns (bool);\\n\\n  function approveRouter(address router) external;\\n\\n  function initializeRouter(address owner, address recipient) external;\\n\\n  function unapproveRouter(address router) external;\\n\\n  function setMaxRoutersPerTransfer(uint256 _newMaxRouters) external;\\n\\n  function setLiquidityFeeNumerator(uint256 _numerator) external;\\n\\n  function approveRouterForPortal(address _router) external;\\n\\n  function unapproveRouterForPortal(address _router) external;\\n\\n  function setRouterRecipient(address router, address recipient) external;\\n\\n  function proposeRouterOwner(address router, address proposed) external;\\n\\n  function acceptProposedRouterOwner(address router) external;\\n\\n  function addRouterLiquidityFor(\\n    uint256 _amount,\\n    address _local,\\n    address _router\\n  ) external payable;\\n\\n  function addRouterLiquidity(uint256 _amount, address _local) external payable;\\n\\n  function removeRouterLiquidityFor(\\n    uint256 _amount,\\n    address _local,\\n    address payable _to,\\n    address _router\\n  ) external;\\n\\n  function removeRouterLiquidity(\\n    uint256 _amount,\\n    address _local,\\n    address payable _to\\n  ) external;\\n\\n  // PortalFacet\\n  function getAavePortalDebt(bytes32 _transferId) external view returns (uint256);\\n\\n  function getAavePortalFeeDebt(bytes32 _transferId) external view returns (uint256);\\n\\n  function aavePool() external view returns (address);\\n\\n  function aavePortalFee() external view returns (uint256);\\n\\n  function setAavePool(address _aavePool) external;\\n\\n  function setAavePortalFee(uint256 _aavePortalFeeNumerator) external;\\n\\n  function repayAavePortal(\\n    TransferInfo calldata _params,\\n    uint256 _backingAmount,\\n    uint256 _feeAmount,\\n    uint256 _maxIn\\n  ) external;\\n\\n  function repayAavePortalFor(\\n    TransferInfo calldata _params,\\n    uint256 _backingAmount,\\n    uint256 _feeAmount\\n  ) external;\\n\\n  // StableSwapFacet\\n  function getSwapStorage(bytes32 canonicalId) external view returns (SwapUtils.Swap memory);\\n\\n  function getSwapLPToken(bytes32 canonicalId) external view returns (address);\\n\\n  function getSwapA(bytes32 canonicalId) external view returns (uint256);\\n\\n  function getSwapAPrecise(bytes32 canonicalId) external view returns (uint256);\\n\\n  function getSwapToken(bytes32 canonicalId, uint8 index) external view returns (IERC20);\\n\\n  function getSwapTokenIndex(bytes32 canonicalId, address tokenAddress) external view returns (uint8);\\n\\n  function getSwapTokenBalance(bytes32 canonicalId, uint8 index) external view returns (uint256);\\n\\n  function getSwapVirtualPrice(bytes32 canonicalId) external view returns (uint256);\\n\\n  function calculateSwap(\\n    bytes32 canonicalId,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapTokenAmount(\\n    bytes32 canonicalId,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) external view returns (uint256);\\n\\n  function calculateRemoveSwapLiquidity(bytes32 canonicalId, uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveSwapLiquidityOneToken(\\n    bytes32 canonicalId,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) external view returns (uint256);\\n\\n  function getSwapAdminBalance(bytes32 canonicalId, uint256 index) external view returns (uint256);\\n\\n  function swap(\\n    bytes32 canonicalId,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    bytes32 canonicalId,\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    bytes32 canonicalId,\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function addSwapLiquidity(\\n    bytes32 canonicalId,\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeSwapLiquidity(\\n    bytes32 canonicalId,\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeSwapLiquidityOneToken(\\n    bytes32 canonicalId,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeSwapLiquidityImbalance(\\n    bytes32 canonicalId,\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  // SwapAdminFacet\\n\\n  function initializeSwap(\\n    bytes32 _canonicalId,\\n    IERC20[] memory _pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 _a,\\n    uint256 _fee,\\n    uint256 _adminFee\\n  ) external;\\n\\n  function withdrawSwapAdminFees(bytes32 canonicalId) external;\\n\\n  function setSwapAdminFee(bytes32 canonicalId, uint256 newAdminFee) external;\\n\\n  function setSwapFee(bytes32 canonicalId, uint256 newSwapFee) external;\\n\\n  function rampA(\\n    bytes32 canonicalId,\\n    uint256 futureA,\\n    uint256 futureTime\\n  ) external;\\n\\n  function stopRampA(bytes32 canonicalId) external;\\n\\n  function lpTokenTargetAddress() external view returns (address);\\n\\n  function updateLpTokenTarget(address newAddress) external;\\n}\\n\",\"keccak256\":\"0x1b21b65dce0f84a5f3d82ae358960f03d40e0bbb9da4d4ad69fc44a8eb12a488\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IDiamondLoupe.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n  /// These functions are expected to be called frequently\\n  /// by tools.\\n\\n  struct Facet {\\n    address facetAddress;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Gets all facet addresses and their four byte function selectors.\\n  /// @return facets_ Facet\\n  function facets() external view returns (Facet[] memory facets_);\\n\\n  /// @notice Gets all the function selectors supported by a specific facet.\\n  /// @param _facet The facet address.\\n  /// @return facetFunctionSelectors_\\n  function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n  /// @notice Get all the facet addresses used by a diamond.\\n  /// @return facetAddresses_\\n  function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n  /// @notice Gets the facet that supports the given selector.\\n  /// @dev If facet is not found return address(0).\\n  /// @param _functionSelector The function selector.\\n  /// @return facetAddress_ The facet address.\\n  function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\",\"keccak256\":\"0xc408c13dc42d9526b1f292bad3f3915efa15c2133f509d90a45422b5f6cf829c\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/core/connext/helpers/RelayerProxy.sol:RelayerProxy","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/core/connext/helpers/RelayerProxy.sol:RelayerProxy","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/core/connext/helpers/RelayerProxy.sol:RelayerProxy","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":10691,"contract":"contracts/core/connext/helpers/RelayerProxy.sol:RelayerProxy","label":"_status","offset":0,"slot":"3","type":"t_uint256"},{"astId":24163,"contract":"contracts/core/connext/helpers/RelayerProxy.sol:RelayerProxy","label":"gelatoRelayer","offset":0,"slot":"4","type":"t_address"},{"astId":24165,"contract":"contracts/core/connext/helpers/RelayerProxy.sol:RelayerProxy","label":"feeCollector","offset":0,"slot":"5","type":"t_address"},{"astId":24168,"contract":"contracts/core/connext/helpers/RelayerProxy.sol:RelayerProxy","label":"connext","offset":0,"slot":"6","type":"t_contract(IConnext)26846"},{"astId":24171,"contract":"contracts/core/connext/helpers/RelayerProxy.sol:RelayerProxy","label":"spokeConnector","offset":0,"slot":"7","type":"t_contract(ISpokeConnector)24154"},{"astId":24175,"contract":"contracts/core/connext/helpers/RelayerProxy.sol:RelayerProxy","label":"allowedRelayer","offset":0,"slot":"8","type":"t_mapping(t_address,t_bool)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(IConnext)26846":{"encoding":"inplace","label":"contract IConnext","numberOfBytes":"20"},"t_contract(ISpokeConnector)24154":{"encoding":"inplace","label":"contract ISpokeConnector","numberOfBytes":"20"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"ConnextChanged(address,address)":{"notice":"Emitted when Connext contract address is updated by admin"},"FeeCollectorChanged(address,address)":{"notice":"Emitted when FeeCollectorChanged address is updated by admin"},"FundsDeducted(uint256,uint256)":{"notice":"Emitted when funds removed from the contract by admin"},"FundsReceived(uint256,uint256)":{"notice":"Emitted when funds added to the contract"},"GelatoRelayerChanged(address,address)":{"notice":"Emitted when GelatoRelayer address is updated by admin"},"RelayerAdded(address)":{"notice":"Emitted when a new relayer is allowlisted by admin"},"RelayerRemoved(address)":{"notice":"Emitted when a relayer is removed from allowlist by admin"},"SpokeConnectorChanged(address,address)":{"notice":"Emitted when SpokeConnector contract address is updated by admin"}},"kind":"user","methods":{"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"addRelayer(address)":{"notice":"Adds a relayer address to the allowed relayers mapping."},"constructor":{"notice":"Creates a new RelayerProxy instance."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),uint256)":{"notice":"Wraps the call to execute() on Connext and pays either the caller or hardcoded relayer from this contract's balance for completing the transaction."},"owner()":{"notice":"Returns the address of the current owner."},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256,uint256)":{"notice":"Wraps the call to proveAndProcess() on SpokeConnector and pays either the caller or hardcoded relayer from this contract's balance for completing the transaction."},"removeRelayer(address)":{"notice":"Removes a relayer address from the allowed relayers mapping."},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"send(bytes,uint256,uint256)":{"notice":"Wraps the call to send() on SpokeConnector and pays either the caller or hardcoded relayer from this contract's balance for completing the transaction."},"setConnext(address)":{"notice":"Updates the Connext address on this contract."},"setFeeCollector(address)":{"notice":"Updates the Gelato Fee Collector address on this contract."},"setGelatoRelayer(address)":{"notice":"Updates the Gelato relayer address on this contract."},"setSpokeConnector(address)":{"notice":"Updates the SpokeConnector address on this contract."},"withdraw()":{"notice":"Withdraws all funds stored on this contract to msg.sender."}},"notice":"This is a temporary contract that wraps fast path functions in the Connext interface so that they can be called by Gelato's legacy relayer network. The contract stores native assets and pays them to the relayer on function call.","version":1}}},"contracts/core/connext/helpers/RelayerProxyHub.sol":{"RelayerProxyHub":{"abi":[{"inputs":[{"internalType":"address","name":"_connext","type":"address"},{"internalType":"address","name":"_spokeConnector","type":"address"},{"internalType":"address","name":"_gelatoRelayer","type":"address"},{"internalType":"address","name":"_feeCollector","type":"address"},{"internalType":"address","name":"_rootManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updated","type":"address"},{"indexed":false,"internalType":"address","name":"previous","type":"address"}],"name":"ConnextChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updated","type":"address"},{"indexed":false,"internalType":"address","name":"previous","type":"address"}],"name":"FeeCollectorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"FundsDeducted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"FundsReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updated","type":"address"},{"indexed":false,"internalType":"address","name":"previous","type":"address"}],"name":"GelatoRelayerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"relayer","type":"address"}],"name":"RelayerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"relayer","type":"address"}],"name":"RelayerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"rootManager","type":"address"},{"indexed":false,"internalType":"address","name":"oldRootManager","type":"address"}],"name":"RootManagerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updated","type":"address"},{"indexed":false,"internalType":"address","name":"previous","type":"address"}],"name":"SpokeConnectorChanged","type":"event"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_relayer","type":"address"}],"name":"addRelayer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedRelayer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"connext","outputs":[{"internalType":"contract IConnext","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"uint32","name":"originDomain","type":"uint32"},{"internalType":"uint32","name":"destinationDomain","type":"uint32"},{"internalType":"uint32","name":"canonicalDomain","type":"uint32"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"delegate","type":"address"},{"internalType":"bool","name":"receiveLocal","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"slippage","type":"uint256"},{"internalType":"address","name":"originSender","type":"address"},{"internalType":"uint256","name":"bridgedAmt","type":"uint256"},{"internalType":"uint256","name":"normalizedIn","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"internalType":"struct TransferInfo","name":"params","type":"tuple"},{"internalType":"address[]","name":"routers","type":"address[]"},{"internalType":"bytes[]","name":"routerSignatures","type":"bytes[]"},{"internalType":"address","name":"sequencer","type":"address"},{"internalType":"bytes","name":"sequencerSignature","type":"bytes"}],"internalType":"struct ExecuteArgs","name":"_args","type":"tuple"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"execute","outputs":[{"internalType":"bytes32","name":"transferId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gelatoRelayer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_connectors","type":"address[]"},{"internalType":"uint256[]","name":"_messageFees","type":"uint256[]"},{"internalType":"bytes[]","name":"_encodedData","type":"bytes[]"},{"internalType":"uint256","name":"_relayerFee","type":"uint256"}],"name":"propagate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32[32]","name":"path","type":"bytes32[32]"},{"internalType":"uint256","name":"index","type":"uint256"}],"internalType":"struct ISpokeConnector.Proof[]","name":"_proofs","type":"tuple[]"},{"internalType":"bytes32","name":"_aggregateRoot","type":"bytes32"},{"internalType":"bytes32[32]","name":"_aggregatePath","type":"bytes32[32]"},{"internalType":"uint256","name":"_aggregateIndex","type":"uint256"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"proveAndProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_relayer","type":"address"}],"name":"removeRelayer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rootManager","outputs":[{"internalType":"contract IRootManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_encodedData","type":"bytes"},{"internalType":"uint256","name":"_messageFee","type":"uint256"},{"internalType":"uint256","name":"_relayerFee","type":"uint256"}],"name":"send","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_connext","type":"address"}],"name":"setConnext","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeCollector","type":"address"}],"name":"setFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gelatoRelayer","type":"address"}],"name":"setGelatoRelayer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rootManager","type":"address"}],"name":"setRootManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spokeConnector","type":"address"}],"name":"setSpokeConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"spokeConnector","outputs":[{"internalType":"contract ISpokeConnector","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"author":"Connext Labs, Inc.","kind":"dev","methods":{"addRelayer(address)":{"params":{"_relayer":"- Relayer address to add."}},"constructor":{"params":{"_connext":"The address of the Connext on this domain.","_feeCollector":"The address of the Gelato Fee Collector on this domain.","_gelatoRelayer":"The address of the Gelato relayer on this domain.","_rootManager":"The address of the Root Manager on this domain.","_spokeConnector":"The address of the SpokeConnector on this domain."}},"execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),uint256)":{"params":{"_args":"- ExecuteArgs arguments.","_fee":"- Fee to be paid to relayer."},"returns":{"transferId":"- The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for reconciliation to occur."}},"propagate(address[],uint256[],bytes[],uint256)":{"params":{"_connectors":"Array of connectors: should match exactly the array of `connectors` in storage; used here to reduce gas costs, and keep them static regardless of number of supported domains.","_encodedData":"Array of encodedData: extra params for each AMB if required","_messageFees":"Array of fees in native token for an AMB if required","_relayerFee":"Fee to be paid to relayer"}},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256,uint256)":{"params":{"_aggregateIndex":"Index of the inbound root in the aggregator's merkle tree in the hub.","_aggregatePath":"Merkle path of inclusion for the inbound root.","_aggregateRoot":"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.","_fee":"- Fee to be paid to relayer.","_proofs":"Batch of Proofs containing messages for proving/processing."}},"removeRelayer(address)":{"params":{"_relayer":"- Relayer address to remove."}},"send(bytes,uint256,uint256)":{"params":{"_encodedData":"- Data to be sent to Connext SpokeConnector","_messageFee":"- Fee to be paid to the SpokeConnector for connected AMBs that require fees.","_relayerFee":"- Fee to be paid to relayer."}},"setConnext(address)":{"params":{"_connext":"- New Connext address."}},"setFeeCollector(address)":{"params":{"_feeCollector":"- New Gelato Fee Collector address."}},"setGelatoRelayer(address)":{"params":{"_gelatoRelayer":"- New Gelato relayer address."}},"setRootManager(address)":{"params":{"_rootManager":"The address of the new RootManager on this domain."}},"setSpokeConnector(address)":{"params":{"_spokeConnector":"- New SpokeConnector address."}}},"title":"RelayerProxyHub","version":1},"evm":{"bytecode":{"functionDebugData":{"@_10699":{"entryPoint":null,"id":10699,"parameterSlots":0,"returnSlots":0},"@_24295":{"entryPoint":null,"id":24295,"parameterSlots":4,"returnSlots":0},"@_24760":{"entryPoint":null,"id":24760,"parameterSlots":5,"returnSlots":0},"@_addRelayer_24609":{"entryPoint":680,"id":24609,"parameterSlots":1,"returnSlots":0},"@_setConnext_24652":{"entryPoint":260,"id":24652,"parameterSlots":1,"returnSlots":0},"@_setFeeCollector_24708":{"entryPoint":575,"id":24708,"parameterSlots":1,"returnSlots":0},"@_setGelatoRelayer_24690":{"entryPoint":470,"id":24690,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":159,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setRootManager_24866":{"entryPoint":856,"id":24866,"parameterSlots":1,"returnSlots":0},"@_setSpokeConnector_24672":{"entryPoint":365,"id":24672,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":961,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_addresst_addresst_address_fromMemory":{"entryPoint":990,"id":null,"parameterSlots":2,"returnSlots":5},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_dedd704501704f7991a32fb105552a4ab47a52c46817293082f14fd934f9f8cc__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1598:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"74:117:181","statements":[{"nodeType":"YulAssignment","src":"84:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"99:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"93:5:181"},"nodeType":"YulFunctionCall","src":"93:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"84:5:181"}]},{"body":{"nodeType":"YulBlock","src":"169:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"178:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"181:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"171:6:181"},"nodeType":"YulFunctionCall","src":"171:12:181"},"nodeType":"YulExpressionStatement","src":"171:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"128:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"139:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"154:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"150:3:181"},"nodeType":"YulFunctionCall","src":"150:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"163:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"146:3:181"},"nodeType":"YulFunctionCall","src":"146:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"135:3:181"},"nodeType":"YulFunctionCall","src":"135:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"125:2:181"},"nodeType":"YulFunctionCall","src":"125:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"118:6:181"},"nodeType":"YulFunctionCall","src":"118:50:181"},"nodeType":"YulIf","src":"115:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"53:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"64:5:181","type":""}],"src":"14:177:181"},{"body":{"nodeType":"YulBlock","src":"345:401:181","statements":[{"body":{"nodeType":"YulBlock","src":"392:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"401:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"404:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"394:6:181"},"nodeType":"YulFunctionCall","src":"394:12:181"},"nodeType":"YulExpressionStatement","src":"394:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"366:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"375:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"362:3:181"},"nodeType":"YulFunctionCall","src":"362:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"387:3:181","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"358:3:181"},"nodeType":"YulFunctionCall","src":"358:33:181"},"nodeType":"YulIf","src":"355:53:181"},{"nodeType":"YulAssignment","src":"417:50:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"457:9:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"427:29:181"},"nodeType":"YulFunctionCall","src":"427:40:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"417:6:181"}]},{"nodeType":"YulAssignment","src":"476:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"520:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"531:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"516:3:181"},"nodeType":"YulFunctionCall","src":"516:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"486:29:181"},"nodeType":"YulFunctionCall","src":"486:49:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"476:6:181"}]},{"nodeType":"YulAssignment","src":"544:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"588:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"599:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"584:3:181"},"nodeType":"YulFunctionCall","src":"584:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"554:29:181"},"nodeType":"YulFunctionCall","src":"554:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"544:6:181"}]},{"nodeType":"YulAssignment","src":"612:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"656:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"667:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"652:3:181"},"nodeType":"YulFunctionCall","src":"652:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"622:29:181"},"nodeType":"YulFunctionCall","src":"622:49:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"612:6:181"}]},{"nodeType":"YulAssignment","src":"680:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"724:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"735:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"720:3:181"},"nodeType":"YulFunctionCall","src":"720:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"690:29:181"},"nodeType":"YulFunctionCall","src":"690:50:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"680:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_addresst_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"279:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"290:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"302:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"310:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"318:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"326:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"334:6:181","type":""}],"src":"196:550:181"},{"body":{"nodeType":"YulBlock","src":"880:175:181","statements":[{"nodeType":"YulAssignment","src":"890:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"902:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"913:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"898:3:181"},"nodeType":"YulFunctionCall","src":"898:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"890:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"925:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"943:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"948:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"939:3:181"},"nodeType":"YulFunctionCall","src":"939:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"952:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"935:3:181"},"nodeType":"YulFunctionCall","src":"935:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"929:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"970:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"985:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"993:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"981:3:181"},"nodeType":"YulFunctionCall","src":"981:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"963:6:181"},"nodeType":"YulFunctionCall","src":"963:34:181"},"nodeType":"YulExpressionStatement","src":"963:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1017:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1028:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1013:3:181"},"nodeType":"YulFunctionCall","src":"1013:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"1037:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1045:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1033:3:181"},"nodeType":"YulFunctionCall","src":"1033:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1006:6:181"},"nodeType":"YulFunctionCall","src":"1006:43:181"},"nodeType":"YulExpressionStatement","src":"1006:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"841:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"852:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"860:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"871:4:181","type":""}],"src":"751:304:181"},{"body":{"nodeType":"YulBlock","src":"1234:154:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1251:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1262:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1244:6:181"},"nodeType":"YulFunctionCall","src":"1244:21:181"},"nodeType":"YulExpressionStatement","src":"1244:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1285:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1296:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1281:3:181"},"nodeType":"YulFunctionCall","src":"1281:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1301:1:181","type":"","value":"5"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1274:6:181"},"nodeType":"YulFunctionCall","src":"1274:29:181"},"nodeType":"YulExpressionStatement","src":"1274:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1323:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1334:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1319:3:181"},"nodeType":"YulFunctionCall","src":"1319:18:181"},{"hexValue":"6164646564","kind":"string","nodeType":"YulLiteral","src":"1339:7:181","type":"","value":"added"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1312:6:181"},"nodeType":"YulFunctionCall","src":"1312:35:181"},"nodeType":"YulExpressionStatement","src":"1312:35:181"},{"nodeType":"YulAssignment","src":"1356:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1368:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1379:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1364:3:181"},"nodeType":"YulFunctionCall","src":"1364:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1356:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_dedd704501704f7991a32fb105552a4ab47a52c46817293082f14fd934f9f8cc__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1211:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1225:4:181","type":""}],"src":"1060:328:181"},{"body":{"nodeType":"YulBlock","src":"1494:102:181","statements":[{"nodeType":"YulAssignment","src":"1504:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1516:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1527:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1512:3:181"},"nodeType":"YulFunctionCall","src":"1512:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1504:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1546:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1561:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1577:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1582:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1573:3:181"},"nodeType":"YulFunctionCall","src":"1573:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1586:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1569:3:181"},"nodeType":"YulFunctionCall","src":"1569:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1557:3:181"},"nodeType":"YulFunctionCall","src":"1557:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1539:6:181"},"nodeType":"YulFunctionCall","src":"1539:51:181"},"nodeType":"YulExpressionStatement","src":"1539:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1463:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1474:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1485:4:181","type":""}],"src":"1393:203:181"}]},"contents":"{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n        value4 := abi_decode_address_fromMemory(add(headStart, 128))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_dedd704501704f7991a32fb105552a4ab47a52c46817293082f14fd934f9f8cc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 5)\n        mstore(add(headStart, 64), \"added\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040523480156200001157600080fd5b506040516200217c3803806200217c8339810160408190526200003491620003de565b60016003558484848462000048336200009f565b620000538462000104565b6200005e836200016d565b6200006982620001d6565b62000074816200023f565b6200007f82620002a8565b5050505062000094816200035860201b60201c565b50505050506200044e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600654604080516001600160a01b03808516825290921660208301527f87539ad41983c0ecff8f321db8edf4dd9e830593562770bdacdda085b83e3bb2910160405180910390a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b600754604080516001600160a01b03808516825290921660208301527f66948d99d8431a8416af2202bc301823b7cdd87beb9bddaa274aedac0611a5fd910160405180910390a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b600454604080516001600160a01b03808516825290921660208301527f5db4a067a1f787c3269642464a2a1560868b50b0873e7dec83939ae2359f6128910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b600554604080516001600160a01b03808516825290921660208301527f649c5e3d0ed183894196148e193af316452b0037e77d2ff0fef23b7dc722bed0910160405180910390a1600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526008602052604090205460ff1615620002fe5760405162461bcd60e51b8152602060048201526005602482015264185919195960da1b604482015260640160405180910390fd5b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f03580ee9f53a62b7cb409a2cb56f9be87747dd15017afc5cef6eef321e4fb2c5910160405180910390a150565b600954604080516001600160a01b03808516825290921660208301527f3124eaf4f16c6ddd81951200c6d8f65d5800753bef06584bd672c8b22c76b487910160405180910390a1600980546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b0381168114620003d957600080fd5b919050565b600080600080600060a08688031215620003f757600080fd5b6200040286620003c1565b94506200041260208701620003c1565b93506200042260408701620003c1565b92506200043260608701620003c1565b91506200044260808701620003c1565b90509295509295909350565b611d1e806200045e6000396000f3fe6080604052600436106101855760003560e01c80639f645a03116100d1578063d232c2201161008a578063dd39f00d11610064578063dd39f00d14610497578063de4b0548146104b7578063e79457f1146104d7578063f0a67eba146104f757600080fd5b8063d232c22014610438578063d9ef0bee14610457578063db2056351461047757600080fd5b80639f645a0314610385578063a42dce80146103a5578063b1f8100d146103c5578063c415b95c146103e5578063c5b350df14610405578063d1851c921461041a57600080fd5b80636a42b8f81161013e5780638da5cb5b116101185780638da5cb5b146103075780638efed127146103255780639a2652db146103455780639cadce001461036557600080fd5b80636a42b8f8146102a45780636eba787f146102ba578063715018a6146102f257600080fd5b80632f55b98d146101c95780633ccfd60b1461020e5780633cf52ffb146102255780634d6f2013146102445780635e21966a1461026457806360f0a5ac1461028457600080fd5b366101c457604080513481524760208201527f063d07ee72a7483b8e07ca09054bb686775c5c030f945dde3823a5257a0a93eb910160405180910390a1005b600080fd5b3480156101d557600080fd5b506101f96101e4366004611359565b60086020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561021a57600080fd5b50610223610517565b005b34801561023157600080fd5b506002545b604051908152602001610205565b34801561025057600080fd5b5061022361025f366004611359565b610588565b34801561027057600080fd5b5061022361027f366004611359565b6105f0565b34801561029057600080fd5b5061022361029f366004611359565b61064b565b3480156102b057600080fd5b5062093a80610236565b3480156102c657600080fd5b506004546102da906001600160a01b031681565b6040516001600160a01b039091168152602001610205565b3480156102fe57600080fd5b506102236106a6565b34801561031357600080fd5b506000546001600160a01b03166102da565b34801561033157600080fd5b5061023661034036600461137b565b610758565b34801561035157600080fd5b506102236103603660046114c8565b61081d565b34801561037157600080fd5b506007546102da906001600160a01b031681565b34801561039157600080fd5b506102236103a0366004611359565b610952565b3480156103b157600080fd5b506102236103c0366004611359565b6109ad565b3480156103d157600080fd5b506102236103e0366004611359565b610a08565b3480156103f157600080fd5b506005546102da906001600160a01b031681565b34801561041157600080fd5b50610223610aa9565b34801561042657600080fd5b506001546001600160a01b03166102da565b34801561044457600080fd5b506000546001600160a01b0316156101f9565b34801561046357600080fd5b506102236104723660046115e2565b610b19565b34801561048357600080fd5b506009546102da906001600160a01b031681565b3480156104a357600080fd5b506102236104b2366004611359565b610bf9565b3480156104c357600080fd5b506006546102da906001600160a01b031681565b3480156104e357600080fd5b506102236104f2366004611630565b610c54565b34801561050357600080fd5b50610223610512366004611359565b610d08565b6000546001600160a01b03163314610542576040516311a8a1bb60e31b815260040160405180910390fd5b61054a610d63565b476105553382610dbc565b60408051828152476020820152600080516020611cc9833981519152910160405180910390a1506105866001600355565b565b6000546001600160a01b031633146105b3576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166105e35760405162461bcd60e51b81526004016105da906116a8565b60405180910390fd5b6105ec82610ed5565b5050565b6000546001600160a01b0316331461061b576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166106425760405162461bcd60e51b81526004016105da906116a8565b6105ec82610f3e565b6000546001600160a01b03163314610676576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b03811661069d5760405162461bcd60e51b81526004016105da906116a8565b6105ec82610fa7565b6000546001600160a01b031633146106d1576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426106e391906116dd565b11610701576040516324e0285f60e21b815260040160405180910390fd5b60025460000361072457604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b03161561074e576040516323295ef960e01b815260040160405180910390fd5b6105866000611050565b3360009081526008602052604081205460ff166107875760405162461bcd60e51b81526004016105da906116f0565b61078f610d63565b6006546040516331f1f3e960e11b81526001600160a01b03909116906363e3e7d2906107bf908690600401611892565b6020604051808303816000875af11580156107de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108029190611a85565b905061080d826110b5565b6108176001600355565b92915050565b3360009081526008602052604090205460ff1661084c5760405162461bcd60e51b81526004016105da906116f0565b610854610d63565b600085815b818163ffffffff16101561089b5786868263ffffffff1681811061087f5761087f611a9e565b90506020020135836108919190611ab4565b9250600101610859565b5060095460405163412e12db60e01b81526001600160a01b039091169063412e12db9084906108d6908c908c908c908c908c90600401611b55565b6000604051808303818588803b1580156108ef57600080fd5b505af1158015610903573d6000803e3d6000fd5b505060408051868152476020820152600080516020611cc9833981519152945001915061092d9050565b60405180910390a161093e836110b5565b505061094a6001600355565b505050505050565b6000546001600160a01b0316331461097d576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166109a45760405162461bcd60e51b81526004016105da906116a8565b6105ec8261110f565b6000546001600160a01b031633146109d8576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166109ff5760405162461bcd60e51b81526004016105da906116a8565b6105ec82611178565b6000546001600160a01b03163314610a33576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610a51575060025415155b15610a6f576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b03808316911603610a9d57604051634a2fb73f60e11b815260040160405180910390fd5b610aa6816111e1565b50565b6001546001600160a01b03163314610ad4576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442610ae691906116dd565b11610b04576040516324e0285f60e21b815260040160405180910390fd5b600154610586906001600160a01b0316611050565b3360009081526008602052604090205460ff16610b485760405162461bcd60e51b81526004016105da906116f0565b610b50610d63565b600754604051630aec6b9f60e21b81526001600160a01b0390911690632bb1ae7c908490610b82908790600401611be9565b6000604051808303818588803b158015610b9b57600080fd5b505af1158015610baf573d6000803e3d6000fd5b505060408051868152476020820152600080516020611cc98339815191529450019150610bd99050565b60405180910390a1610bea816110b5565b610bf46001600355565b505050565b6000546001600160a01b03163314610c24576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b038116610c4b5760405162461bcd60e51b81526004016105da906116a8565b6105ec8261122f565b3360009081526008602052604090205460ff16610c835760405162461bcd60e51b81526004016105da906116f0565b610c8b610d63565b60075460405163508a109b60e01b81526001600160a01b039091169063508a109b90610cc39089908990899089908990600401611c06565b600060405180830381600087803b158015610cdd57600080fd5b505af1158015610cf1573d6000803e3d6000fd5b50505050610cfe816110b5565b61094a6001600355565b6000546001600160a01b03163314610d33576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b038116610d5a5760405162461bcd60e51b81526004016105da906116a8565b6105ec826112d4565b600260035403610db55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105da565b6002600355565b80471015610e0c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016105da565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610e59576040519150601f19603f3d011682016040523d82523d6000602084013e610e5e565b606091505b5050905080610bf45760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016105da565b600654604080516001600160a01b03808516825290921660208301527f87539ad41983c0ecff8f321db8edf4dd9e830593562770bdacdda085b83e3bb2910160405180910390a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b600454604080516001600160a01b03808516825290921660208301527f5db4a067a1f787c3269642464a2a1560868b50b0873e7dec83939ae2359f6128910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526008602052604090205460ff16610ff85760405162461bcd60e51b815260206004820152600660248201526508585919195960d21b60448201526064016105da565b6001600160a01b038116600081815260086020908152604091829020805460ff1916905590519182527f10e1f7ce9fd7d1b90a66d13a2ab3cb8dd7f29f3f8d520b143b063ccfbab6906b91015b60405180910390a150565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b6004546001600160a01b031633036110e2576005546110dd906001600160a01b031682610dbc565b6110ec565b6110ec3382610dbc565b60408051828152476020820152600080516020611cc98339815191529101611045565b600754604080516001600160a01b03808516825290921660208301527f66948d99d8431a8416af2202bc301823b7cdd87beb9bddaa274aedac0611a5fd910160405180910390a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b600554604080516001600160a01b03808516825290921660208301527f649c5e3d0ed183894196148e193af316452b0037e77d2ff0fef23b7dc722bed0910160405180910390a1600580546001600160a01b0319166001600160a01b0392909216919091179055565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b6001600160a01b03811660009081526008602052604090205460ff16156112805760405162461bcd60e51b8152602060048201526005602482015264185919195960da1b60448201526064016105da565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f03580ee9f53a62b7cb409a2cb56f9be87747dd15017afc5cef6eef321e4fb2c59101611045565b600954604080516001600160a01b03808516825290921660208301527f3124eaf4f16c6ddd81951200c6d8f65d5800753bef06584bd672c8b22c76b487910160405180910390a1600980546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461135457600080fd5b919050565b60006020828403121561136b57600080fd5b6113748261133d565b9392505050565b6000806040838503121561138e57600080fd5b823567ffffffffffffffff8111156113a557600080fd5b830160a081860312156113b757600080fd5b946020939093013593505050565b60008083601f8401126113d757600080fd5b50813567ffffffffffffffff8111156113ef57600080fd5b6020830191508360208260051b850101111561140a57600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561145057611450611411565b604052919050565b600082601f83011261146957600080fd5b813567ffffffffffffffff81111561148357611483611411565b611496601f8201601f1916602001611427565b8181528460208386010111156114ab57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080608087890312156114e157600080fd5b67ffffffffffffffff80883511156114f857600080fd5b6115058989358a016113c5565b90975095506020888101358281111561151d57600080fd5b6115298b828c016113c5565b90975095505060408901358281111561154157600080fd5b8901601f81018b1361155257600080fd5b80358381111561156457611564611411565b8060051b611573848201611427565b918252828101840191848101908e84111561158d57600080fd5b85850192505b838310156115c75786833511156115a957600080fd5b6115b88f878535880101611458565b82529185019190850190611593565b80985050505050505050606087013590509295509295509295565b6000806000606084860312156115f757600080fd5b833567ffffffffffffffff81111561160e57600080fd5b61161a86828701611458565b9660208601359650604090950135949350505050565b600080600080600080610480878903121561164a57600080fd5b863567ffffffffffffffff81111561166157600080fd5b61166d89828a016113c5565b9097509550506020870135935061044087018881111561168c57600080fd5b9598949750929560408101953594610460909101359350915050565b602080825260059082015264656d70747960d81b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610817576108176116c7565b60208082526008908201526710b932b630bcb2b960c11b604082015260600190565b803563ffffffff8116811461135457600080fd5b8035801515811461135457600080fd5b6000808335601e1984360301811261174d57600080fd5b830160208101925035905067ffffffffffffffff81111561176d57600080fd5b80360382131561140a57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e198436030181126117bc57600080fd5b830160208101925035905067ffffffffffffffff8111156117dc57600080fd5b8060051b360382131561140a57600080fd5b8183526000602080850194508260005b8581101561182a576001600160a01b036118178361133d565b16875295820195908201906001016117fe565b509495945050505050565b81835260006020808501808196508560051b810191508460005b878110156118855782840389526118668288611736565b61187186828461177c565b9a87019a955050509084019060010161184f565b5091979650505050505050565b602081526000823561019e198436030181126118ad57600080fd5b60a0602084015283016118d060c084016118c683611712565b63ffffffff169052565b6118dc60208201611712565b63ffffffff1660e08401526118f360408201611712565b6101006119078186018363ffffffff169052565b6119136060840161133d565b915061012061192c818701846001600160a01b03169052565b6119386080850161133d565b9250610140611951818801856001600160a01b03169052565b61195d60a08601611726565b935061016061196f8189018615159052565b61197c60c0870187611736565b95506101a061018081818c01526119986102608c01898561177c565b975060e0890135828c01526119ae878a0161133d565b6001600160a01b03166101c08c0152948801356101e08b0152505090850135610200880152840135610220870152830135610240860152506119f360208601866117a5565b9250601f1980868403016040870152611a0d8385846117ee565b9350611a1c60408801886117a5565b9350915080868503016060870152611a35848484611835565b9350611a436060880161133d565b6001600160a01b03811660808801529250611a616080880188611736565b93509150808685030160a087015250611a7b83838361177c565b9695505050505050565b600060208284031215611a9757600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b80820180821115610817576108176116c7565b6000815180845260005b81811015611aed57602081850181015186830182015201611ad1565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501808196508360051b8101915082860160005b85811015611885578284038952611b43848351611ac7565b98850198935090840190600101611b2b565b6060808252810185905260008660808301825b88811015611b96576001600160a01b03611b818461133d565b16825260209283019290910190600101611b68565b5083810360208501528581526001600160fb1b03861115611bb657600080fd5b8560051b9150818760208301370182810360209081016040850152611bdd90820185611b0d565b98975050505050505050565b6020815260006113746020830184611ac7565b6104008183375050565b6104608082528101859052600061048080830190600588901b8401018883805b8a811015611c9c5786840361047f190185528235368d900361043e19018112611c4d578283fd5b8c01610440611c5c8280611736565b828852611c6c838901828461177c565b92505050602061040081840182890137610420928301359690920195909552948501949290920191600101611c26565b5050508092505050846020830152611cb76040830185611bfc565b82610440830152969550505050505056fe9826a73d0fd7186bda6a15195ac17571869cab151bfe9a8fed3f9407fffe5b18a264697066735822122014f71e96141f67772d3ba2104742e471ad55639e79fa6fd5cad0bc2b6637fd8c64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x217C CODESIZE SUB DUP1 PUSH3 0x217C DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x3DE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x3 SSTORE DUP5 DUP5 DUP5 DUP5 PUSH3 0x48 CALLER PUSH3 0x9F JUMP JUMPDEST PUSH3 0x53 DUP5 PUSH3 0x104 JUMP JUMPDEST PUSH3 0x5E DUP4 PUSH3 0x16D JUMP JUMPDEST PUSH3 0x69 DUP3 PUSH3 0x1D6 JUMP JUMPDEST PUSH3 0x74 DUP2 PUSH3 0x23F JUMP JUMPDEST PUSH3 0x7F DUP3 PUSH3 0x2A8 JUMP JUMPDEST POP POP POP POP PUSH3 0x94 DUP2 PUSH3 0x358 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP POP POP POP POP PUSH3 0x44E JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x87539AD41983C0ECFF8F321DB8EDF4DD9E830593562770BDACDDA085B83E3BB2 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x66948D99D8431A8416AF2202BC301823B7CDD87BEB9BDDAA274AEDAC0611A5FD SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x5DB4A067A1F787C3269642464A2A1560868B50B0873E7DEC83939AE2359F6128 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x649C5E3D0ED183894196148E193AF316452B0037E77D2FF0FEF23B7DC722BED0 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH3 0x2FE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x5 PUSH1 0x24 DUP3 ADD MSTORE PUSH5 0x1859191959 PUSH1 0xDA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x3580EE9F53A62B7CB409A2CB56F9BE87747DD15017AFC5CEF6EEF321E4FB2C5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x3124EAF4F16C6DDD81951200C6D8F65D5800753BEF06584BD672C8B22C76B487 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x3D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH3 0x3F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x402 DUP7 PUSH3 0x3C1 JUMP JUMPDEST SWAP5 POP PUSH3 0x412 PUSH1 0x20 DUP8 ADD PUSH3 0x3C1 JUMP JUMPDEST SWAP4 POP PUSH3 0x422 PUSH1 0x40 DUP8 ADD PUSH3 0x3C1 JUMP JUMPDEST SWAP3 POP PUSH3 0x432 PUSH1 0x60 DUP8 ADD PUSH3 0x3C1 JUMP JUMPDEST SWAP2 POP PUSH3 0x442 PUSH1 0x80 DUP8 ADD PUSH3 0x3C1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH2 0x1D1E DUP1 PUSH3 0x45E PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x185 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9F645A03 GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0xD232C220 GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xDD39F00D GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xDD39F00D EQ PUSH2 0x497 JUMPI DUP1 PUSH4 0xDE4B0548 EQ PUSH2 0x4B7 JUMPI DUP1 PUSH4 0xE79457F1 EQ PUSH2 0x4D7 JUMPI DUP1 PUSH4 0xF0A67EBA EQ PUSH2 0x4F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD232C220 EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0xD9EF0BEE EQ PUSH2 0x457 JUMPI DUP1 PUSH4 0xDB205635 EQ PUSH2 0x477 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9F645A03 EQ PUSH2 0x385 JUMPI DUP1 PUSH4 0xA42DCE80 EQ PUSH2 0x3A5 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0xC415B95C EQ PUSH2 0x3E5 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x405 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x41A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6A42B8F8 GT PUSH2 0x13E JUMPI DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x118 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x307 JUMPI DUP1 PUSH4 0x8EFED127 EQ PUSH2 0x325 JUMPI DUP1 PUSH4 0x9A2652DB EQ PUSH2 0x345 JUMPI DUP1 PUSH4 0x9CADCE00 EQ PUSH2 0x365 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x2A4 JUMPI DUP1 PUSH4 0x6EBA787F EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x2F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F55B98D EQ PUSH2 0x1C9 JUMPI DUP1 PUSH4 0x3CCFD60B EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x225 JUMPI DUP1 PUSH4 0x4D6F2013 EQ PUSH2 0x244 JUMPI DUP1 PUSH4 0x5E21966A EQ PUSH2 0x264 JUMPI DUP1 PUSH4 0x60F0A5AC EQ PUSH2 0x284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x1C4 JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SELFBALANCE PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x63D07EE72A7483B8E07CA09054BB686775C5C030F945DDE3823A5257A0A93EB SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F9 PUSH2 0x1E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x1359 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x517 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x205 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x250 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x25F CALLDATASIZE PUSH1 0x4 PUSH2 0x1359 JUMP JUMPDEST PUSH2 0x588 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x270 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x27F CALLDATASIZE PUSH1 0x4 PUSH2 0x1359 JUMP JUMPDEST PUSH2 0x5F0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x290 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x29F CALLDATASIZE PUSH1 0x4 PUSH2 0x1359 JUMP JUMPDEST PUSH2 0x64B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x236 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x2DA SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x205 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x6A6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x331 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x236 PUSH2 0x340 CALLDATASIZE PUSH1 0x4 PUSH2 0x137B JUMP JUMPDEST PUSH2 0x758 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x360 CALLDATASIZE PUSH1 0x4 PUSH2 0x14C8 JUMP JUMPDEST PUSH2 0x81D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x371 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x7 SLOAD PUSH2 0x2DA SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x3A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1359 JUMP JUMPDEST PUSH2 0x952 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x3C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1359 JUMP JUMPDEST PUSH2 0x9AD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x3E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1359 JUMP JUMPDEST PUSH2 0xA08 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x5 SLOAD PUSH2 0x2DA SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x411 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0xAA9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x426 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x444 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x1F9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x463 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x472 CALLDATASIZE PUSH1 0x4 PUSH2 0x15E2 JUMP JUMPDEST PUSH2 0xB19 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x483 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x9 SLOAD PUSH2 0x2DA SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x4B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x1359 JUMP JUMPDEST PUSH2 0xBF9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x6 SLOAD PUSH2 0x2DA SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x4F2 CALLDATASIZE PUSH1 0x4 PUSH2 0x1630 JUMP JUMPDEST PUSH2 0xC54 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x503 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x512 CALLDATASIZE PUSH1 0x4 PUSH2 0x1359 JUMP JUMPDEST PUSH2 0xD08 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x542 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x54A PUSH2 0xD63 JUMP JUMPDEST SELFBALANCE PUSH2 0x555 CALLER DUP3 PUSH2 0xDBC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SELFBALANCE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1CC9 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH2 0x586 PUSH1 0x1 PUSH1 0x3 SSTORE JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5B3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x5E3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16A8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5EC DUP3 PUSH2 0xED5 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x61B JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x642 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16A8 JUMP JUMPDEST PUSH2 0x5EC DUP3 PUSH2 0xF3E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x676 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x69D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16A8 JUMP JUMPDEST PUSH2 0x5EC DUP3 PUSH2 0xFA7 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x6D1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x6E3 SWAP2 SWAP1 PUSH2 0x16DD JUMP JUMPDEST GT PUSH2 0x701 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x724 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x74E JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x586 PUSH1 0x0 PUSH2 0x1050 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x787 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16F0 JUMP JUMPDEST PUSH2 0x78F PUSH2 0xD63 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x31F1F3E9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x63E3E7D2 SWAP1 PUSH2 0x7BF SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x1892 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7DE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x802 SWAP2 SWAP1 PUSH2 0x1A85 JUMP JUMPDEST SWAP1 POP PUSH2 0x80D DUP3 PUSH2 0x10B5 JUMP JUMPDEST PUSH2 0x817 PUSH1 0x1 PUSH1 0x3 SSTORE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x84C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16F0 JUMP JUMPDEST PUSH2 0x854 PUSH2 0xD63 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0x89B JUMPI DUP7 DUP7 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0x87F JUMPI PUSH2 0x87F PUSH2 0x1A9E JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP4 PUSH2 0x891 SWAP2 SWAP1 PUSH2 0x1AB4 JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x859 JUMP JUMPDEST POP PUSH1 0x9 SLOAD PUSH1 0x40 MLOAD PUSH4 0x412E12DB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x412E12DB SWAP1 DUP5 SWAP1 PUSH2 0x8D6 SWAP1 DUP13 SWAP1 DUP13 SWAP1 DUP13 SWAP1 DUP13 SWAP1 DUP13 SWAP1 PUSH1 0x4 ADD PUSH2 0x1B55 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x903 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP7 DUP2 MSTORE SELFBALANCE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1CC9 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP5 POP ADD SWAP2 POP PUSH2 0x92D SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x93E DUP4 PUSH2 0x10B5 JUMP JUMPDEST POP POP PUSH2 0x94A PUSH1 0x1 PUSH1 0x3 SSTORE JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x97D JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x9A4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16A8 JUMP JUMPDEST PUSH2 0x5EC DUP3 PUSH2 0x110F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9D8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x9FF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16A8 JUMP JUMPDEST PUSH2 0x5EC DUP3 PUSH2 0x1178 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA33 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0xA51 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xA6F JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0xA9D JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xAA6 DUP2 PUSH2 0x11E1 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xAD4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0xAE6 SWAP2 SWAP1 PUSH2 0x16DD JUMP JUMPDEST GT PUSH2 0xB04 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x586 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1050 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xB48 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16F0 JUMP JUMPDEST PUSH2 0xB50 PUSH2 0xD63 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0xAEC6B9F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x2BB1AE7C SWAP1 DUP5 SWAP1 PUSH2 0xB82 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x1BE9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xBAF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP7 DUP2 MSTORE SELFBALANCE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1CC9 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP5 POP ADD SWAP2 POP PUSH2 0xBD9 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0xBEA DUP2 PUSH2 0x10B5 JUMP JUMPDEST PUSH2 0xBF4 PUSH1 0x1 PUSH1 0x3 SSTORE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC24 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xC4B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16A8 JUMP JUMPDEST PUSH2 0x5EC DUP3 PUSH2 0x122F JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xC83 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16F0 JUMP JUMPDEST PUSH2 0xC8B PUSH2 0xD63 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x508A109B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x508A109B SWAP1 PUSH2 0xCC3 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xCF1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0xCFE DUP2 PUSH2 0x10B5 JUMP JUMPDEST PUSH2 0x94A PUSH1 0x1 PUSH1 0x3 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD33 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xD5A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16A8 JUMP JUMPDEST PUSH2 0x5EC DUP3 PUSH2 0x12D4 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x3 SLOAD SUB PUSH2 0xDB5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5DA JUMP JUMPDEST PUSH1 0x2 PUSH1 0x3 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0xE0C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5DA JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xE59 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xE5E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0xBF4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x5DA JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x87539AD41983C0ECFF8F321DB8EDF4DD9E830593562770BDACDDA085B83E3BB2 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x5DB4A067A1F787C3269642464A2A1560868B50B0873E7DEC83939AE2359F6128 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xFF8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x85859191959 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5DA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x10E1F7CE9FD7D1B90A66D13A2AB3CB8DD7F29F3F8D520B143B063CCFBAB6906B SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x10E2 JUMPI PUSH1 0x5 SLOAD PUSH2 0x10DD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH2 0xDBC JUMP JUMPDEST PUSH2 0x10EC JUMP JUMPDEST PUSH2 0x10EC CALLER DUP3 PUSH2 0xDBC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SELFBALANCE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1CC9 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 ADD PUSH2 0x1045 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x66948D99D8431A8416AF2202BC301823B7CDD87BEB9BDDAA274AEDAC0611A5FD SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x649C5E3D0ED183894196148E193AF316452B0037E77D2FF0FEF23B7DC722BED0 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1280 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x5 PUSH1 0x24 DUP3 ADD MSTORE PUSH5 0x1859191959 PUSH1 0xDA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5DA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x3580EE9F53A62B7CB409A2CB56F9BE87747DD15017AFC5CEF6EEF321E4FB2C5 SWAP2 ADD PUSH2 0x1045 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x3124EAF4F16C6DDD81951200C6D8F65D5800753BEF06584BD672C8B22C76B487 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1354 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x136B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1374 DUP3 PUSH2 0x133D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x138E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x13A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0xA0 DUP2 DUP7 SUB SLT ISZERO PUSH2 0x13B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x13D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x13EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x140A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1450 JUMPI PUSH2 0x1450 PUSH2 0x1411 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1469 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1483 JUMPI PUSH2 0x1483 PUSH2 0x1411 JUMP JUMPDEST PUSH2 0x1496 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x1427 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x14AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x14E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP9 CALLDATALOAD GT ISZERO PUSH2 0x14F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1505 DUP10 DUP10 CALLDATALOAD DUP11 ADD PUSH2 0x13C5 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0x20 DUP9 DUP2 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x151D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1529 DUP12 DUP3 DUP13 ADD PUSH2 0x13C5 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP POP PUSH1 0x40 DUP10 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x1541 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 ADD PUSH1 0x1F DUP2 ADD DUP12 SGT PUSH2 0x1552 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD DUP4 DUP2 GT ISZERO PUSH2 0x1564 JUMPI PUSH2 0x1564 PUSH2 0x1411 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL PUSH2 0x1573 DUP5 DUP3 ADD PUSH2 0x1427 JUMP JUMPDEST SWAP2 DUP3 MSTORE DUP3 DUP2 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP15 DUP5 GT ISZERO PUSH2 0x158D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 DUP6 ADD SWAP3 POP JUMPDEST DUP4 DUP4 LT ISZERO PUSH2 0x15C7 JUMPI DUP7 DUP4 CALLDATALOAD GT ISZERO PUSH2 0x15A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x15B8 DUP16 DUP8 DUP6 CALLDATALOAD DUP9 ADD ADD PUSH2 0x1458 JUMP JUMPDEST DUP3 MSTORE SWAP2 DUP6 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 PUSH2 0x1593 JUMP JUMPDEST DUP1 SWAP9 POP POP POP POP POP POP POP POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x15F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x160E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x161A DUP7 DUP3 DUP8 ADD PUSH2 0x1458 JUMP JUMPDEST SWAP7 PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 SWAP1 SWAP6 ADD CALLDATALOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x480 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x164A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1661 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x166D DUP10 DUP3 DUP11 ADD PUSH2 0x13C5 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH2 0x440 DUP8 ADD DUP9 DUP2 GT ISZERO PUSH2 0x168C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 PUSH1 0x40 DUP2 ADD SWAP6 CALLDATALOAD SWAP5 PUSH2 0x460 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x5 SWAP1 DUP3 ADD MSTORE PUSH5 0x656D707479 PUSH1 0xD8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x817 JUMPI PUSH2 0x817 PUSH2 0x16C7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x8 SWAP1 DUP3 ADD MSTORE PUSH8 0x10B932B630BCB2B9 PUSH1 0xC1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1354 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1354 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x174D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x176D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x140A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 DUP3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x17BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x17DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x5 SHL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x140A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x182A JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1817 DUP4 PUSH2 0x133D JUMP JUMPDEST AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x17FE JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP6 ADD DUP1 DUP2 SWAP7 POP DUP6 PUSH1 0x5 SHL DUP2 ADD SWAP2 POP DUP5 PUSH1 0x0 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0x1885 JUMPI DUP3 DUP5 SUB DUP10 MSTORE PUSH2 0x1866 DUP3 DUP9 PUSH2 0x1736 JUMP JUMPDEST PUSH2 0x1871 DUP7 DUP3 DUP5 PUSH2 0x177C JUMP JUMPDEST SWAP11 DUP8 ADD SWAP11 SWAP6 POP POP POP SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x184F JUMP JUMPDEST POP SWAP2 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x19E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x18AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xA0 PUSH1 0x20 DUP5 ADD MSTORE DUP4 ADD PUSH2 0x18D0 PUSH1 0xC0 DUP5 ADD PUSH2 0x18C6 DUP4 PUSH2 0x1712 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x18DC PUSH1 0x20 DUP3 ADD PUSH2 0x1712 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x18F3 PUSH1 0x40 DUP3 ADD PUSH2 0x1712 JUMP JUMPDEST PUSH2 0x100 PUSH2 0x1907 DUP2 DUP7 ADD DUP4 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x1913 PUSH1 0x60 DUP5 ADD PUSH2 0x133D JUMP JUMPDEST SWAP2 POP PUSH2 0x120 PUSH2 0x192C DUP2 DUP8 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x1938 PUSH1 0x80 DUP6 ADD PUSH2 0x133D JUMP JUMPDEST SWAP3 POP PUSH2 0x140 PUSH2 0x1951 DUP2 DUP9 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x195D PUSH1 0xA0 DUP7 ADD PUSH2 0x1726 JUMP JUMPDEST SWAP4 POP PUSH2 0x160 PUSH2 0x196F DUP2 DUP10 ADD DUP7 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x197C PUSH1 0xC0 DUP8 ADD DUP8 PUSH2 0x1736 JUMP JUMPDEST SWAP6 POP PUSH2 0x1A0 PUSH2 0x180 DUP2 DUP2 DUP13 ADD MSTORE PUSH2 0x1998 PUSH2 0x260 DUP13 ADD DUP10 DUP6 PUSH2 0x177C JUMP JUMPDEST SWAP8 POP PUSH1 0xE0 DUP10 ADD CALLDATALOAD DUP3 DUP13 ADD MSTORE PUSH2 0x19AE DUP8 DUP11 ADD PUSH2 0x133D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1C0 DUP13 ADD MSTORE SWAP5 DUP9 ADD CALLDATALOAD PUSH2 0x1E0 DUP12 ADD MSTORE POP POP SWAP1 DUP6 ADD CALLDATALOAD PUSH2 0x200 DUP9 ADD MSTORE DUP5 ADD CALLDATALOAD PUSH2 0x220 DUP8 ADD MSTORE DUP4 ADD CALLDATALOAD PUSH2 0x240 DUP7 ADD MSTORE POP PUSH2 0x19F3 PUSH1 0x20 DUP7 ADD DUP7 PUSH2 0x17A5 JUMP JUMPDEST SWAP3 POP PUSH1 0x1F NOT DUP1 DUP7 DUP5 SUB ADD PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x1A0D DUP4 DUP6 DUP5 PUSH2 0x17EE JUMP JUMPDEST SWAP4 POP PUSH2 0x1A1C PUSH1 0x40 DUP9 ADD DUP9 PUSH2 0x17A5 JUMP JUMPDEST SWAP4 POP SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x1A35 DUP5 DUP5 DUP5 PUSH2 0x1835 JUMP JUMPDEST SWAP4 POP PUSH2 0x1A43 PUSH1 0x60 DUP9 ADD PUSH2 0x133D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x80 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x1A61 PUSH1 0x80 DUP9 ADD DUP9 PUSH2 0x1736 JUMP JUMPDEST SWAP4 POP SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH1 0xA0 DUP8 ADD MSTORE POP PUSH2 0x1A7B DUP4 DUP4 DUP4 PUSH2 0x177C JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1A97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x817 JUMPI PUSH2 0x817 PUSH2 0x16C7 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1AED JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x1AD1 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD DUP1 DUP2 SWAP7 POP DUP4 PUSH1 0x5 SHL DUP2 ADD SWAP2 POP DUP3 DUP7 ADD PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x1885 JUMPI DUP3 DUP5 SUB DUP10 MSTORE PUSH2 0x1B43 DUP5 DUP4 MLOAD PUSH2 0x1AC7 JUMP JUMPDEST SWAP9 DUP6 ADD SWAP9 SWAP4 POP SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1B2B JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x0 DUP7 PUSH1 0x80 DUP4 ADD DUP3 JUMPDEST DUP9 DUP2 LT ISZERO PUSH2 0x1B96 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1B81 DUP5 PUSH2 0x133D JUMP JUMPDEST AND DUP3 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1B68 JUMP JUMPDEST POP DUP4 DUP2 SUB PUSH1 0x20 DUP6 ADD MSTORE DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xFB SHL SUB DUP7 GT ISZERO PUSH2 0x1BB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x5 SHL SWAP2 POP DUP2 DUP8 PUSH1 0x20 DUP4 ADD CALLDATACOPY ADD DUP3 DUP2 SUB PUSH1 0x20 SWAP1 DUP2 ADD PUSH1 0x40 DUP6 ADD MSTORE PUSH2 0x1BDD SWAP1 DUP3 ADD DUP6 PUSH2 0x1B0D JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1374 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1AC7 JUMP JUMPDEST PUSH2 0x400 DUP2 DUP4 CALLDATACOPY POP POP JUMP JUMPDEST PUSH2 0x460 DUP1 DUP3 MSTORE DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x0 PUSH2 0x480 DUP1 DUP4 ADD SWAP1 PUSH1 0x5 DUP9 SWAP1 SHL DUP5 ADD ADD DUP9 DUP4 DUP1 JUMPDEST DUP11 DUP2 LT ISZERO PUSH2 0x1C9C JUMPI DUP7 DUP5 SUB PUSH2 0x47F NOT ADD DUP6 MSTORE DUP3 CALLDATALOAD CALLDATASIZE DUP14 SWAP1 SUB PUSH2 0x43E NOT ADD DUP2 SLT PUSH2 0x1C4D JUMPI DUP3 DUP4 REVERT JUMPDEST DUP13 ADD PUSH2 0x440 PUSH2 0x1C5C DUP3 DUP1 PUSH2 0x1736 JUMP JUMPDEST DUP3 DUP9 MSTORE PUSH2 0x1C6C DUP4 DUP10 ADD DUP3 DUP5 PUSH2 0x177C JUMP JUMPDEST SWAP3 POP POP POP PUSH1 0x20 PUSH2 0x400 DUP2 DUP5 ADD DUP3 DUP10 ADD CALLDATACOPY PUSH2 0x420 SWAP3 DUP4 ADD CALLDATALOAD SWAP7 SWAP1 SWAP3 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP5 DUP6 ADD SWAP5 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1C26 JUMP JUMPDEST POP POP POP DUP1 SWAP3 POP POP POP DUP5 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x1CB7 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x1BFC JUMP JUMPDEST DUP3 PUSH2 0x440 DUP4 ADD MSTORE SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID SWAP9 0x26 0xA7 RETURNDATASIZE 0xF 0xD7 XOR PUSH12 0xDA6A15195AC17571869CAB15 SHL INVALID SWAP11 DUP16 0xED EXTCODEHASH SWAP5 SMOD SELFDESTRUCT INVALID JUMPDEST XOR LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EQ 0xF7 0x1E SWAP7 EQ 0x1F PUSH8 0x772D3BA2104742E4 PUSH18 0xAD55639E79FA6FD5CAD0BC2B6637FD8C6473 PUSH16 0x6C634300081100330000000000000000 ","sourceMap":"836:2722:90:-:0;;;1555:259;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1716:1:52;1821:7;:22;1716:8:90;1726:15;1743:14;1759:13;4139:21:89::1;4149:10;4139:9;:21::i;:::-;4166;4178:8:::0;4166:11:::1;:21::i;:::-;4193:35;4212:15:::0;4193:18:::1;:35::i;:::-;4234:33;4252:14:::0;4234:17:::1;:33::i;:::-;4273:31;4290:13:::0;4273:16:::1;:31::i;:::-;4311:27;4323:14:::0;4311:11:::1;:27::i;:::-;3993:350:::0;;;;1780:29:90::1;1796:12;1780:15;;;:29;;:::i;:::-;1555:259:::0;;;;;836:2722;;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;9760:140:89:-;9852:7;;9819:42;;;-1:-1:-1;;;;;981:15:181;;;963:34;;9852:7:89;;;1028:2:181;1013:18;;1006:43;9819:42:89;;898:18:181;9819:42:89;;;;;;;9867:7;:28;;-1:-1:-1;;;;;;9867:28:89;-1:-1:-1;;;;;9867:28:89;;;;;;;;;;9760:140::o;9904:196::-;10024:14;;9977:63;;;-1:-1:-1;;;;;981:15:181;;;963:34;;10024:14:89;;;1028:2:181;1013:18;;1006:43;9977:63:89;;898:18:181;9977:63:89;;;;;;;10046:14;:49;;-1:-1:-1;;;;;;10046:49:89;-1:-1:-1;;;;;10046:49:89;;;;;;;;;;9904:196::o;10104:172::-;10220:13;;10175:60;;;-1:-1:-1;;;;;981:15:181;;;963:34;;10220:13:89;;;1028:2:181;1013:18;;1006:43;10175:60:89;;898:18:181;10175:60:89;;;;;;;10241:13;:30;;-1:-1:-1;;;;;;10241:30:89;-1:-1:-1;;;;;10241:30:89;;;;;;;;;;10104:172::o;10280:165::-;10392:12;;10349:57;;;-1:-1:-1;;;;;981:15:181;;;963:34;;10392:12:89;;;1028:2:181;1013:18;;1006:43;10349:57:89;;898:18:181;10349:57:89;;;;;;;10412:12;:28;;-1:-1:-1;;;;;;10412:28:89;-1:-1:-1;;;;;10412:28:89;;;;;;;;;;10280:165::o;9400:173::-;-1:-1:-1;;;;;9463:24:89;;;;;;:14;:24;;;;;;;;9462:25;9454:43;;;;-1:-1:-1;;;9454:43:89;;1262:2:181;9454:43:89;;;1244:21:181;1301:1;1281:18;;;1274:29;-1:-1:-1;;;1319:18:181;;;1312:35;1364:18;;9454:43:89;;;;;;;;-1:-1:-1;;;;;9504:24:89;;;;;;:14;:24;;;;;;;;;:31;;-1:-1:-1;;9504:31:89;9531:4;9504:31;;;9546:22;;1539:51:181;;;9546:22:89;;1512:18:181;9546:22:89;;;;;;;9400:173;:::o;3384:172:90:-;3492:11;;3451:54;;;-1:-1:-1;;;;;981:15:181;;;963:34;;3492:11:90;;;1028:2:181;1013:18;;1006:43;3451:54:90;;898:18:181;3451:54:90;;;;;;;3511:11;:40;;-1:-1:-1;;;;;;3511:40:90;-1:-1:-1;;;;;3511:40:90;;;;;;;;;;3384:172::o;14:177:181:-;93:13;;-1:-1:-1;;;;;135:31:181;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:550::-;302:6;310;318;326;334;387:3;375:9;366:7;362:23;358:33;355:53;;;404:1;401;394:12;355:53;427:40;457:9;427:40;:::i;:::-;417:50;;486:49;531:2;520:9;516:18;486:49;:::i;:::-;476:59;;554:49;599:2;588:9;584:18;554:49;:::i;:::-;544:59;;622:49;667:2;656:9;652:18;622:49;:::i;:::-;612:59;;690:50;735:3;724:9;720:19;690:50;:::i;:::-;680:60;;196:550;;;;;;;;:::o;1393:203::-;836:2722:90;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_24541":{"entryPoint":null,"id":24541,"parameterSlots":0,"returnSlots":0},"@_addRelayer_24609":{"entryPoint":4655,"id":24609,"parameterSlots":1,"returnSlots":0},"@_nonReentrantAfter_10733":{"entryPoint":null,"id":10733,"parameterSlots":0,"returnSlots":0},"@_nonReentrantBefore_10725":{"entryPoint":3427,"id":10725,"parameterSlots":0,"returnSlots":0},"@_removeRelayer_24632":{"entryPoint":4007,"id":24632,"parameterSlots":1,"returnSlots":0},"@_setConnext_24652":{"entryPoint":3797,"id":24652,"parameterSlots":1,"returnSlots":0},"@_setFeeCollector_24708":{"entryPoint":4472,"id":24708,"parameterSlots":1,"returnSlots":0},"@_setGelatoRelayer_24690":{"entryPoint":3902,"id":24690,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":4176,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":4577,"id":49927,"parameterSlots":1,"returnSlots":0},"@_setRootManager_24866":{"entryPoint":4820,"id":24866,"parameterSlots":1,"returnSlots":0},"@_setSpokeConnector_24672":{"entryPoint":4367,"id":24672,"parameterSlots":1,"returnSlots":0},"@acceptProposedOwner_49887":{"entryPoint":2729,"id":49887,"parameterSlots":0,"returnSlots":0},"@addRelayer_24311":{"entryPoint":3065,"id":24311,"parameterSlots":1,"returnSlots":0},"@allowedRelayer_24175":{"entryPoint":null,"id":24175,"parameterSlots":0,"returnSlots":0},"@connext_24168":{"entryPoint":null,"id":24168,"parameterSlots":0,"returnSlots":0},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@execute_24455":{"entryPoint":1880,"id":24455,"parameterSlots":2,"returnSlots":1},"@feeCollector_24165":{"entryPoint":null,"id":24165,"parameterSlots":0,"returnSlots":0},"@gelatoRelayer_24163":{"entryPoint":null,"id":24163,"parameterSlots":0,"returnSlots":0},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@propagate_24846":{"entryPoint":2077,"id":24846,"parameterSlots":6,"returnSlots":0},"@proposeNewOwner_49841":{"entryPoint":2568,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@proveAndProcess_24491":{"entryPoint":3156,"id":24491,"parameterSlots":6,"returnSlots":0},"@removeRelayer_24327":{"entryPoint":1611,"id":24327,"parameterSlots":1,"returnSlots":0},"@renounceOwnership_49874":{"entryPoint":1702,"id":49874,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@rootManager_24729":{"entryPoint":null,"id":24729,"parameterSlots":0,"returnSlots":0},"@sendValue_11206":{"entryPoint":3516,"id":11206,"parameterSlots":2,"returnSlots":0},"@send_24527":{"entryPoint":2841,"id":24527,"parameterSlots":3,"returnSlots":0},"@setConnext_24343":{"entryPoint":1416,"id":24343,"parameterSlots":1,"returnSlots":0},"@setFeeCollector_24391":{"entryPoint":2477,"id":24391,"parameterSlots":1,"returnSlots":0},"@setGelatoRelayer_24375":{"entryPoint":1520,"id":24375,"parameterSlots":1,"returnSlots":0},"@setRootManager_24776":{"entryPoint":3336,"id":24776,"parameterSlots":1,"returnSlots":0},"@setSpokeConnector_24359":{"entryPoint":2386,"id":24359,"parameterSlots":1,"returnSlots":0},"@spokeConnector_24171":{"entryPoint":null,"id":24171,"parameterSlots":0,"returnSlots":0},"@transferRelayerFee_24585":{"entryPoint":4277,"id":24585,"parameterSlots":1,"returnSlots":0},"@withdraw_24428":{"entryPoint":1303,"id":24428,"parameterSlots":0,"returnSlots":0},"abi_decode_address":{"entryPoint":4925,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn_calldata":{"entryPoint":5061,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bool":{"entryPoint":5926,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes":{"entryPoint":5208,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":4953,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_bytes_memory_ptr_$dyn_memory_ptrt_uint256":{"entryPoint":5320,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_array$_t_struct$_Proof_$24133_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256t_uint256":{"entryPoint":5680,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_bytes32_fromMemory":{"entryPoint":6789,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes_memory_ptrt_uint256t_uint256":{"entryPoint":5602,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_struct$_ExecuteArgs_$29365_calldata_ptrt_uint256":{"entryPoint":4987,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint32":{"entryPoint":5906,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_address_dyn_calldata":{"entryPoint":6126,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_bytes32_calldata":{"entryPoint":7164,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_bytes_calldata_dyn_calldata":{"entryPoint":6197,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_bytes_dyn":{"entryPoint":6925,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_bytes":{"entryPoint":6855,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes_calldata":{"entryPoint":6012,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_calldata_ptr_t_array$_t_uint256_$dyn_calldata_ptr_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":6997,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_array$_t_struct$_Proof_$24133_calldata_ptr_$dyn_calldata_ptr_t_bytes32_t_array$_t_bytes32_$32_calldata_ptr_t_uint256__to_t_array$_t_struct$_Proof_$24133_memory_ptr_$dyn_memory_ptr_t_bytes32_t_array$_t_bytes32_$32_memory_ptr_t_uint256__fromStack_reversed":{"entryPoint":7174,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":7145,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IConnext_$26846__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IRootManager_$47888__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_ISpokeConnector_$24154__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_61fc3f77ebc090777f567969ad9823cf6334ab888acb385ca72668ec5adbde80__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":5800,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8e7e8fcd400a5d12d3bcb2f74ef1d253cc1ee9f80325b4481ab4dffdf753068f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":5872,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_dedd704501704f7991a32fb105552a4ab47a52c46817293082f14fd934f9f8cc__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e11eb83f9b11acb18ab039411915a354a75afc390de576b7a0065bfcb50b4e9b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_ExecuteArgs_$29365_calldata_ptr__to_t_struct$_ExecuteArgs_$29365_memory_ptr__fromStack_reversed":{"entryPoint":6290,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_uint32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_memory":{"entryPoint":5159,"id":null,"parameterSlots":1,"returnSlots":1},"calldata_access_array_address_dyn_calldata":{"entryPoint":6053,"id":null,"parameterSlots":2,"returnSlots":2},"calldata_access_bytes_calldata":{"entryPoint":5942,"id":null,"parameterSlots":2,"returnSlots":2},"checked_add_t_uint256":{"entryPoint":6836,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":5853,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":5831,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":6814,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":5137,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:21089:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"143:119:181","statements":[{"nodeType":"YulAssignment","src":"153:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"165:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"176:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"161:3:181"},"nodeType":"YulFunctionCall","src":"161:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"153:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"195:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"206:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"188:6:181"},"nodeType":"YulFunctionCall","src":"188:25:181"},"nodeType":"YulExpressionStatement","src":"188:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"233:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"244:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"229:3:181"},"nodeType":"YulFunctionCall","src":"229:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"249:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"222:6:181"},"nodeType":"YulFunctionCall","src":"222:34:181"},"nodeType":"YulExpressionStatement","src":"222:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"115:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"123:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"134:4:181","type":""}],"src":"14:248:181"},{"body":{"nodeType":"YulBlock","src":"316:124:181","statements":[{"nodeType":"YulAssignment","src":"326:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"348:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"335:12:181"},"nodeType":"YulFunctionCall","src":"335:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"326:5:181"}]},{"body":{"nodeType":"YulBlock","src":"418:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"427:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"430:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"420:6:181"},"nodeType":"YulFunctionCall","src":"420:12:181"},"nodeType":"YulExpressionStatement","src":"420:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"377:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"388:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"403:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"408:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"399:3:181"},"nodeType":"YulFunctionCall","src":"399:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"412:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"395:3:181"},"nodeType":"YulFunctionCall","src":"395:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"384:3:181"},"nodeType":"YulFunctionCall","src":"384:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"374:2:181"},"nodeType":"YulFunctionCall","src":"374:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"367:6:181"},"nodeType":"YulFunctionCall","src":"367:50:181"},"nodeType":"YulIf","src":"364:70:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"295:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"306:5:181","type":""}],"src":"267:173:181"},{"body":{"nodeType":"YulBlock","src":"515:116:181","statements":[{"body":{"nodeType":"YulBlock","src":"561:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"570:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"573:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"563:6:181"},"nodeType":"YulFunctionCall","src":"563:12:181"},"nodeType":"YulExpressionStatement","src":"563:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"536:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"545:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"532:3:181"},"nodeType":"YulFunctionCall","src":"532:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"557:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"528:3:181"},"nodeType":"YulFunctionCall","src":"528:32:181"},"nodeType":"YulIf","src":"525:52:181"},{"nodeType":"YulAssignment","src":"586:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"615:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"596:18:181"},"nodeType":"YulFunctionCall","src":"596:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"586:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"481:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"492:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"504:6:181","type":""}],"src":"445:186:181"},{"body":{"nodeType":"YulBlock","src":"677:50:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"694:3:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"713:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"706:6:181"},"nodeType":"YulFunctionCall","src":"706:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"699:6:181"},"nodeType":"YulFunctionCall","src":"699:21:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"687:6:181"},"nodeType":"YulFunctionCall","src":"687:34:181"},"nodeType":"YulExpressionStatement","src":"687:34:181"}]},"name":"abi_encode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"661:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"668:3:181","type":""}],"src":"636:91:181"},{"body":{"nodeType":"YulBlock","src":"827:92:181","statements":[{"nodeType":"YulAssignment","src":"837:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"849:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"860:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"845:3:181"},"nodeType":"YulFunctionCall","src":"845:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"837:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"879:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"904:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"897:6:181"},"nodeType":"YulFunctionCall","src":"897:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"890:6:181"},"nodeType":"YulFunctionCall","src":"890:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"872:6:181"},"nodeType":"YulFunctionCall","src":"872:41:181"},"nodeType":"YulExpressionStatement","src":"872:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"796:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"807:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"818:4:181","type":""}],"src":"732:187:181"},{"body":{"nodeType":"YulBlock","src":"1025:76:181","statements":[{"nodeType":"YulAssignment","src":"1035:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1047:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1058:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1043:3:181"},"nodeType":"YulFunctionCall","src":"1043:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1035:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1077:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"1088:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1070:6:181"},"nodeType":"YulFunctionCall","src":"1070:25:181"},"nodeType":"YulExpressionStatement","src":"1070:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"994:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1005:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1016:4:181","type":""}],"src":"924:177:181"},{"body":{"nodeType":"YulBlock","src":"1150:60:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1167:3:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1176:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1191:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1196:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1187:3:181"},"nodeType":"YulFunctionCall","src":"1187:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1200:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1183:3:181"},"nodeType":"YulFunctionCall","src":"1183:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1172:3:181"},"nodeType":"YulFunctionCall","src":"1172:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1160:6:181"},"nodeType":"YulFunctionCall","src":"1160:44:181"},"nodeType":"YulExpressionStatement","src":"1160:44:181"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1134:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"1141:3:181","type":""}],"src":"1106:104:181"},{"body":{"nodeType":"YulBlock","src":"1316:102:181","statements":[{"nodeType":"YulAssignment","src":"1326:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1338:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1349:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1334:3:181"},"nodeType":"YulFunctionCall","src":"1334:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1326:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1368:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1383:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1399:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1404:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1395:3:181"},"nodeType":"YulFunctionCall","src":"1395:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1408:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1391:3:181"},"nodeType":"YulFunctionCall","src":"1391:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1379:3:181"},"nodeType":"YulFunctionCall","src":"1379:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1361:6:181"},"nodeType":"YulFunctionCall","src":"1361:51:181"},"nodeType":"YulExpressionStatement","src":"1361:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1285:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1296:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1307:4:181","type":""}],"src":"1215:203:181"},{"body":{"nodeType":"YulBlock","src":"1542:341:181","statements":[{"body":{"nodeType":"YulBlock","src":"1588:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1597:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1600:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1590:6:181"},"nodeType":"YulFunctionCall","src":"1590:12:181"},"nodeType":"YulExpressionStatement","src":"1590:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1563:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1572:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1559:3:181"},"nodeType":"YulFunctionCall","src":"1559:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1584:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1555:3:181"},"nodeType":"YulFunctionCall","src":"1555:32:181"},"nodeType":"YulIf","src":"1552:52:181"},{"nodeType":"YulVariableDeclaration","src":"1613:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1640:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1627:12:181"},"nodeType":"YulFunctionCall","src":"1627:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1617:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1693:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1702:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1705:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1695:6:181"},"nodeType":"YulFunctionCall","src":"1695:12:181"},"nodeType":"YulExpressionStatement","src":"1695:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1665:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1673:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1662:2:181"},"nodeType":"YulFunctionCall","src":"1662:30:181"},"nodeType":"YulIf","src":"1659:50:181"},{"nodeType":"YulVariableDeclaration","src":"1718:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1732:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1743:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1728:3:181"},"nodeType":"YulFunctionCall","src":"1728:22:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1722:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1789:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1798:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1801:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1791:6:181"},"nodeType":"YulFunctionCall","src":"1791:12:181"},"nodeType":"YulExpressionStatement","src":"1791:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1770:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1779:2:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1766:3:181"},"nodeType":"YulFunctionCall","src":"1766:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"1784:3:181","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1762:3:181"},"nodeType":"YulFunctionCall","src":"1762:26:181"},"nodeType":"YulIf","src":"1759:46:181"},{"nodeType":"YulAssignment","src":"1814:12:181","value":{"name":"_1","nodeType":"YulIdentifier","src":"1824:2:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1814:6:181"}]},{"nodeType":"YulAssignment","src":"1835:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1862:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1873:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1858:3:181"},"nodeType":"YulFunctionCall","src":"1858:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1845:12:181"},"nodeType":"YulFunctionCall","src":"1845:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1835:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_ExecuteArgs_$29365_calldata_ptrt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1500:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1511:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1523:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1531:6:181","type":""}],"src":"1423:460:181"},{"body":{"nodeType":"YulBlock","src":"1989:76:181","statements":[{"nodeType":"YulAssignment","src":"1999:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2011:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2022:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2007:3:181"},"nodeType":"YulFunctionCall","src":"2007:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1999:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2041:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"2052:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2034:6:181"},"nodeType":"YulFunctionCall","src":"2034:25:181"},"nodeType":"YulExpressionStatement","src":"2034:25:181"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1958:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1969:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1980:4:181","type":""}],"src":"1888:177:181"},{"body":{"nodeType":"YulBlock","src":"2154:283:181","statements":[{"body":{"nodeType":"YulBlock","src":"2203:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2212:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2215:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2205:6:181"},"nodeType":"YulFunctionCall","src":"2205:12:181"},"nodeType":"YulExpressionStatement","src":"2205:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2182:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2190:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2178:3:181"},"nodeType":"YulFunctionCall","src":"2178:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"2197:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2174:3:181"},"nodeType":"YulFunctionCall","src":"2174:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2167:6:181"},"nodeType":"YulFunctionCall","src":"2167:35:181"},"nodeType":"YulIf","src":"2164:55:181"},{"nodeType":"YulAssignment","src":"2228:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2251:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2238:12:181"},"nodeType":"YulFunctionCall","src":"2238:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2228:6:181"}]},{"body":{"nodeType":"YulBlock","src":"2301:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2310:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2313:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2303:6:181"},"nodeType":"YulFunctionCall","src":"2303:12:181"},"nodeType":"YulExpressionStatement","src":"2303:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2273:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2281:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2270:2:181"},"nodeType":"YulFunctionCall","src":"2270:30:181"},"nodeType":"YulIf","src":"2267:50:181"},{"nodeType":"YulAssignment","src":"2326:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2342:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2350:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2338:3:181"},"nodeType":"YulFunctionCall","src":"2338:17:181"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"2326:8:181"}]},{"body":{"nodeType":"YulBlock","src":"2415:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2424:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2427:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2417:6:181"},"nodeType":"YulFunctionCall","src":"2417:12:181"},"nodeType":"YulExpressionStatement","src":"2417:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2378:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2390:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"2393:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2386:3:181"},"nodeType":"YulFunctionCall","src":"2386:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2374:3:181"},"nodeType":"YulFunctionCall","src":"2374:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"2403:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2370:3:181"},"nodeType":"YulFunctionCall","src":"2370:38:181"},{"name":"end","nodeType":"YulIdentifier","src":"2410:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2367:2:181"},"nodeType":"YulFunctionCall","src":"2367:47:181"},"nodeType":"YulIf","src":"2364:67:181"}]},"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2117:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"2125:3:181","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"2133:8:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"2143:6:181","type":""}],"src":"2070:367:181"},{"body":{"nodeType":"YulBlock","src":"2474:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2491:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2498:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2503:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2494:3:181"},"nodeType":"YulFunctionCall","src":"2494:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2484:6:181"},"nodeType":"YulFunctionCall","src":"2484:31:181"},"nodeType":"YulExpressionStatement","src":"2484:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2531:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2534:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2524:6:181"},"nodeType":"YulFunctionCall","src":"2524:15:181"},"nodeType":"YulExpressionStatement","src":"2524:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2555:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2558:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2548:6:181"},"nodeType":"YulFunctionCall","src":"2548:15:181"},"nodeType":"YulExpressionStatement","src":"2548:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"2442:127:181"},{"body":{"nodeType":"YulBlock","src":"2619:230:181","statements":[{"nodeType":"YulAssignment","src":"2629:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2645:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2639:5:181"},"nodeType":"YulFunctionCall","src":"2639:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2629:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2657:58:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2679:6:181"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"2695:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"2701:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2691:3:181"},"nodeType":"YulFunctionCall","src":"2691:13:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2710:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2706:3:181"},"nodeType":"YulFunctionCall","src":"2706:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2687:3:181"},"nodeType":"YulFunctionCall","src":"2687:27:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2675:3:181"},"nodeType":"YulFunctionCall","src":"2675:40:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2661:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2790:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2792:16:181"},"nodeType":"YulFunctionCall","src":"2792:18:181"},"nodeType":"YulExpressionStatement","src":"2792:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2733:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"2745:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2730:2:181"},"nodeType":"YulFunctionCall","src":"2730:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2769:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2781:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2766:2:181"},"nodeType":"YulFunctionCall","src":"2766:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2727:2:181"},"nodeType":"YulFunctionCall","src":"2727:62:181"},"nodeType":"YulIf","src":"2724:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2828:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2832:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2821:6:181"},"nodeType":"YulFunctionCall","src":"2821:22:181"},"nodeType":"YulExpressionStatement","src":"2821:22:181"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"2599:4:181","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2608:6:181","type":""}],"src":"2574:275:181"},{"body":{"nodeType":"YulBlock","src":"2906:478:181","statements":[{"body":{"nodeType":"YulBlock","src":"2955:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2964:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2967:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2957:6:181"},"nodeType":"YulFunctionCall","src":"2957:12:181"},"nodeType":"YulExpressionStatement","src":"2957:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2934:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2942:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2930:3:181"},"nodeType":"YulFunctionCall","src":"2930:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"2949:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2926:3:181"},"nodeType":"YulFunctionCall","src":"2926:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2919:6:181"},"nodeType":"YulFunctionCall","src":"2919:35:181"},"nodeType":"YulIf","src":"2916:55:181"},{"nodeType":"YulVariableDeclaration","src":"2980:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3003:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2990:12:181"},"nodeType":"YulFunctionCall","src":"2990:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2984:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3049:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"3051:16:181"},"nodeType":"YulFunctionCall","src":"3051:18:181"},"nodeType":"YulExpressionStatement","src":"3051:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3025:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3029:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3022:2:181"},"nodeType":"YulFunctionCall","src":"3022:26:181"},"nodeType":"YulIf","src":"3019:52:181"},{"nodeType":"YulVariableDeclaration","src":"3080:70:181","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3123:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3127:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3119:3:181"},"nodeType":"YulFunctionCall","src":"3119:13:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3138:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3134:3:181"},"nodeType":"YulFunctionCall","src":"3134:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3115:3:181"},"nodeType":"YulFunctionCall","src":"3115:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"3144:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3111:3:181"},"nodeType":"YulFunctionCall","src":"3111:38:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"3095:15:181"},"nodeType":"YulFunctionCall","src":"3095:55:181"},"variables":[{"name":"array_1","nodeType":"YulTypedName","src":"3084:7:181","type":""}]},{"expression":{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"3166:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3175:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3159:6:181"},"nodeType":"YulFunctionCall","src":"3159:19:181"},"nodeType":"YulExpressionStatement","src":"3159:19:181"},{"body":{"nodeType":"YulBlock","src":"3226:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3235:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3238:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3228:6:181"},"nodeType":"YulFunctionCall","src":"3228:12:181"},"nodeType":"YulExpressionStatement","src":"3228:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3201:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3209:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3197:3:181"},"nodeType":"YulFunctionCall","src":"3197:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"3214:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3193:3:181"},"nodeType":"YulFunctionCall","src":"3193:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"3221:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3190:2:181"},"nodeType":"YulFunctionCall","src":"3190:35:181"},"nodeType":"YulIf","src":"3187:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"3268:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"3277:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3264:3:181"},"nodeType":"YulFunctionCall","src":"3264:18:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3288:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3296:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3284:3:181"},"nodeType":"YulFunctionCall","src":"3284:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3303:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3251:12:181"},"nodeType":"YulFunctionCall","src":"3251:55:181"},"nodeType":"YulExpressionStatement","src":"3251:55:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"3330:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3339:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3326:3:181"},"nodeType":"YulFunctionCall","src":"3326:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"3344:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3322:3:181"},"nodeType":"YulFunctionCall","src":"3322:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"3351:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3315:6:181"},"nodeType":"YulFunctionCall","src":"3315:38:181"},"nodeType":"YulExpressionStatement","src":"3315:38:181"},{"nodeType":"YulAssignment","src":"3362:16:181","value":{"name":"array_1","nodeType":"YulIdentifier","src":"3371:7:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"3362:5:181"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2880:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"2888:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"2896:5:181","type":""}],"src":"2854:530:181"},{"body":{"nodeType":"YulBlock","src":"3614:1514:181","statements":[{"body":{"nodeType":"YulBlock","src":"3661:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3670:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3673:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3663:6:181"},"nodeType":"YulFunctionCall","src":"3663:12:181"},"nodeType":"YulExpressionStatement","src":"3663:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3635:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3644:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3631:3:181"},"nodeType":"YulFunctionCall","src":"3631:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3656:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3627:3:181"},"nodeType":"YulFunctionCall","src":"3627:33:181"},"nodeType":"YulIf","src":"3624:53:181"},{"nodeType":"YulVariableDeclaration","src":"3686:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3696:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3690:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3758:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3767:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3770:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3760:6:181"},"nodeType":"YulFunctionCall","src":"3760:12:181"},"nodeType":"YulExpressionStatement","src":"3760:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3742:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3729:12:181"},"nodeType":"YulFunctionCall","src":"3729:23:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3754:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3726:2:181"},"nodeType":"YulFunctionCall","src":"3726:31:181"},"nodeType":"YulIf","src":"3723:51:181"},{"nodeType":"YulVariableDeclaration","src":"3783:113:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3851:9:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3875:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3862:12:181"},"nodeType":"YulFunctionCall","src":"3862:23:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3847:3:181"},"nodeType":"YulFunctionCall","src":"3847:39:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3888:7:181"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"3809:37:181"},"nodeType":"YulFunctionCall","src":"3809:87:181"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"3787:8:181","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"3797:8:181","type":""}]},{"nodeType":"YulAssignment","src":"3905:18:181","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"3915:8:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3905:6:181"}]},{"nodeType":"YulAssignment","src":"3932:18:181","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"3942:8:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3932:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3959:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3969:2:181","type":"","value":"32"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"3963:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3980:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4011:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"4022:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4007:3:181"},"nodeType":"YulFunctionCall","src":"4007:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3994:12:181"},"nodeType":"YulFunctionCall","src":"3994:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3984:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4053:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4062:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4065:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4055:6:181"},"nodeType":"YulFunctionCall","src":"4055:12:181"},"nodeType":"YulExpressionStatement","src":"4055:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4041:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4049:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4038:2:181"},"nodeType":"YulFunctionCall","src":"4038:14:181"},"nodeType":"YulIf","src":"4035:34:181"},{"nodeType":"YulVariableDeclaration","src":"4078:96:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4146:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"4157:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4142:3:181"},"nodeType":"YulFunctionCall","src":"4142:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4166:7:181"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"4104:37:181"},"nodeType":"YulFunctionCall","src":"4104:70:181"},"variables":[{"name":"value2_1","nodeType":"YulTypedName","src":"4082:8:181","type":""},{"name":"value3_1","nodeType":"YulTypedName","src":"4092:8:181","type":""}]},{"nodeType":"YulAssignment","src":"4183:18:181","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"4193:8:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4183:6:181"}]},{"nodeType":"YulAssignment","src":"4210:18:181","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"4220:8:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4210:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"4237:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4270:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4281:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4266:3:181"},"nodeType":"YulFunctionCall","src":"4266:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4253:12:181"},"nodeType":"YulFunctionCall","src":"4253:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"4241:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4314:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4323:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4326:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4316:6:181"},"nodeType":"YulFunctionCall","src":"4316:12:181"},"nodeType":"YulExpressionStatement","src":"4316:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"4300:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4310:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4297:2:181"},"nodeType":"YulFunctionCall","src":"4297:16:181"},"nodeType":"YulIf","src":"4294:36:181"},{"nodeType":"YulVariableDeclaration","src":"4339:34:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4353:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"4364:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4349:3:181"},"nodeType":"YulFunctionCall","src":"4349:24:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"4343:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4421:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4430:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4433:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4423:6:181"},"nodeType":"YulFunctionCall","src":"4423:12:181"},"nodeType":"YulExpressionStatement","src":"4423:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"4400:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4404:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4396:3:181"},"nodeType":"YulFunctionCall","src":"4396:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4411:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4392:3:181"},"nodeType":"YulFunctionCall","src":"4392:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4385:6:181"},"nodeType":"YulFunctionCall","src":"4385:35:181"},"nodeType":"YulIf","src":"4382:55:181"},{"nodeType":"YulVariableDeclaration","src":"4446:26:181","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"4469:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4456:12:181"},"nodeType":"YulFunctionCall","src":"4456:16:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"4450:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4495:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"4497:16:181"},"nodeType":"YulFunctionCall","src":"4497:18:181"},"nodeType":"YulExpressionStatement","src":"4497:18:181"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"4487:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4491:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4484:2:181"},"nodeType":"YulFunctionCall","src":"4484:10:181"},"nodeType":"YulIf","src":"4481:36:181"},{"nodeType":"YulVariableDeclaration","src":"4526:20:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4540:1:181","type":"","value":"5"},{"name":"_4","nodeType":"YulIdentifier","src":"4543:2:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4536:3:181"},"nodeType":"YulFunctionCall","src":"4536:10:181"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"4530:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4555:39:181","value":{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"4586:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"4590:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4582:3:181"},"nodeType":"YulFunctionCall","src":"4582:11:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"4566:15:181"},"nodeType":"YulFunctionCall","src":"4566:28:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"4559:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4603:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"4616:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"4607:5:181","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4635:3:181"},{"name":"_4","nodeType":"YulIdentifier","src":"4640:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4628:6:181"},"nodeType":"YulFunctionCall","src":"4628:15:181"},"nodeType":"YulExpressionStatement","src":"4628:15:181"},{"nodeType":"YulAssignment","src":"4652:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4663:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"4668:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4659:3:181"},"nodeType":"YulFunctionCall","src":"4659:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"4652:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"4680:34:181","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"4702:2:181"},{"name":"_5","nodeType":"YulIdentifier","src":"4706:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4698:3:181"},"nodeType":"YulFunctionCall","src":"4698:11:181"},{"name":"_2","nodeType":"YulIdentifier","src":"4711:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4694:3:181"},"nodeType":"YulFunctionCall","src":"4694:20:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"4684:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4746:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4755:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4758:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4748:6:181"},"nodeType":"YulFunctionCall","src":"4748:12:181"},"nodeType":"YulExpressionStatement","src":"4748:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"4729:6:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4737:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4726:2:181"},"nodeType":"YulFunctionCall","src":"4726:19:181"},"nodeType":"YulIf","src":"4723:39:181"},{"nodeType":"YulVariableDeclaration","src":"4771:22:181","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"4786:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"4790:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4782:3:181"},"nodeType":"YulFunctionCall","src":"4782:11:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"4775:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4858:189:181","statements":[{"body":{"nodeType":"YulBlock","src":"4901:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4910:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4913:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4903:6:181"},"nodeType":"YulFunctionCall","src":"4903:12:181"},"nodeType":"YulExpressionStatement","src":"4903:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4891:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4878:12:181"},"nodeType":"YulFunctionCall","src":"4878:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4897:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4875:2:181"},"nodeType":"YulFunctionCall","src":"4875:25:181"},"nodeType":"YulIf","src":"4872:45:181"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4937:3:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"4967:2:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4984:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4971:12:181"},"nodeType":"YulFunctionCall","src":"4971:17:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4963:3:181"},"nodeType":"YulFunctionCall","src":"4963:26:181"},{"name":"_2","nodeType":"YulIdentifier","src":"4991:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4959:3:181"},"nodeType":"YulFunctionCall","src":"4959:35:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4996:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"4942:16:181"},"nodeType":"YulFunctionCall","src":"4942:62:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4930:6:181"},"nodeType":"YulFunctionCall","src":"4930:75:181"},"nodeType":"YulExpressionStatement","src":"4930:75:181"},{"nodeType":"YulAssignment","src":"5018:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5029:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"5034:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5025:3:181"},"nodeType":"YulFunctionCall","src":"5025:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"5018:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4813:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"4818:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4810:2:181"},"nodeType":"YulFunctionCall","src":"4810:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4826:23:181","statements":[{"nodeType":"YulAssignment","src":"4828:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4839:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"4844:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4835:3:181"},"nodeType":"YulFunctionCall","src":"4835:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"4828:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"4806:3:181","statements":[]},"src":"4802:245:181"},{"nodeType":"YulAssignment","src":"5056:15:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"5066:5:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"5056:6:181"}]},{"nodeType":"YulAssignment","src":"5080:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5107:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5118:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5103:3:181"},"nodeType":"YulFunctionCall","src":"5103:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5090:12:181"},"nodeType":"YulFunctionCall","src":"5090:32:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"5080:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_bytes_memory_ptr_$dyn_memory_ptrt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3540:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3551:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3563:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3571:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3579:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3587:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3595:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3603:6:181","type":""}],"src":"3389:1739:181"},{"body":{"nodeType":"YulBlock","src":"5259:102:181","statements":[{"nodeType":"YulAssignment","src":"5269:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5281:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5292:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5277:3:181"},"nodeType":"YulFunctionCall","src":"5277:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5269:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5311:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5326:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5342:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5347:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5338:3:181"},"nodeType":"YulFunctionCall","src":"5338:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5351:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5334:3:181"},"nodeType":"YulFunctionCall","src":"5334:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5322:3:181"},"nodeType":"YulFunctionCall","src":"5322:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5304:6:181"},"nodeType":"YulFunctionCall","src":"5304:51:181"},"nodeType":"YulExpressionStatement","src":"5304:51:181"}]},"name":"abi_encode_tuple_t_contract$_ISpokeConnector_$24154__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5228:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5239:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5250:4:181","type":""}],"src":"5133:228:181"},{"body":{"nodeType":"YulBlock","src":"5479:343:181","statements":[{"body":{"nodeType":"YulBlock","src":"5525:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5534:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5537:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5527:6:181"},"nodeType":"YulFunctionCall","src":"5527:12:181"},"nodeType":"YulExpressionStatement","src":"5527:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5500:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5509:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5496:3:181"},"nodeType":"YulFunctionCall","src":"5496:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5521:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5492:3:181"},"nodeType":"YulFunctionCall","src":"5492:32:181"},"nodeType":"YulIf","src":"5489:52:181"},{"nodeType":"YulVariableDeclaration","src":"5550:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5577:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5564:12:181"},"nodeType":"YulFunctionCall","src":"5564:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"5554:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5630:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5639:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5642:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5632:6:181"},"nodeType":"YulFunctionCall","src":"5632:12:181"},"nodeType":"YulExpressionStatement","src":"5632:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5602:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5610:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5599:2:181"},"nodeType":"YulFunctionCall","src":"5599:30:181"},"nodeType":"YulIf","src":"5596:50:181"},{"nodeType":"YulAssignment","src":"5655:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5686:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"5697:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5682:3:181"},"nodeType":"YulFunctionCall","src":"5682:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5706:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"5665:16:181"},"nodeType":"YulFunctionCall","src":"5665:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5655:6:181"}]},{"nodeType":"YulAssignment","src":"5723:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5750:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5761:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5746:3:181"},"nodeType":"YulFunctionCall","src":"5746:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5733:12:181"},"nodeType":"YulFunctionCall","src":"5733:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5723:6:181"}]},{"nodeType":"YulAssignment","src":"5774:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5801:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5812:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5797:3:181"},"nodeType":"YulFunctionCall","src":"5797:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5784:12:181"},"nodeType":"YulFunctionCall","src":"5784:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5774:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptrt_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5429:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5440:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5452:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5460:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5468:6:181","type":""}],"src":"5366:456:181"},{"body":{"nodeType":"YulBlock","src":"5950:102:181","statements":[{"nodeType":"YulAssignment","src":"5960:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5972:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5983:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5968:3:181"},"nodeType":"YulFunctionCall","src":"5968:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5960:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6002:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6017:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6033:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6038:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6029:3:181"},"nodeType":"YulFunctionCall","src":"6029:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"6042:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6025:3:181"},"nodeType":"YulFunctionCall","src":"6025:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6013:3:181"},"nodeType":"YulFunctionCall","src":"6013:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5995:6:181"},"nodeType":"YulFunctionCall","src":"5995:51:181"},"nodeType":"YulExpressionStatement","src":"5995:51:181"}]},"name":"abi_encode_tuple_t_contract$_IRootManager_$47888__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5919:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5930:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5941:4:181","type":""}],"src":"5827:225:181"},{"body":{"nodeType":"YulBlock","src":"6176:102:181","statements":[{"nodeType":"YulAssignment","src":"6186:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6198:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6209:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6194:3:181"},"nodeType":"YulFunctionCall","src":"6194:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6186:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6228:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6243:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6259:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6264:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6255:3:181"},"nodeType":"YulFunctionCall","src":"6255:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"6268:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6251:3:181"},"nodeType":"YulFunctionCall","src":"6251:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6239:3:181"},"nodeType":"YulFunctionCall","src":"6239:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6221:6:181"},"nodeType":"YulFunctionCall","src":"6221:51:181"},"nodeType":"YulExpressionStatement","src":"6221:51:181"}]},"name":"abi_encode_tuple_t_contract$_IConnext_$26846__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6145:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6156:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6167:4:181","type":""}],"src":"6057:221:181"},{"body":{"nodeType":"YulBlock","src":"6508:593:181","statements":[{"body":{"nodeType":"YulBlock","src":"6556:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6565:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6568:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6558:6:181"},"nodeType":"YulFunctionCall","src":"6558:12:181"},"nodeType":"YulExpressionStatement","src":"6558:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6529:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6538:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6525:3:181"},"nodeType":"YulFunctionCall","src":"6525:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"6550:4:181","type":"","value":"1152"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6521:3:181"},"nodeType":"YulFunctionCall","src":"6521:34:181"},"nodeType":"YulIf","src":"6518:54:181"},{"nodeType":"YulVariableDeclaration","src":"6581:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6608:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6595:12:181"},"nodeType":"YulFunctionCall","src":"6595:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"6585:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6661:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6670:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6673:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6663:6:181"},"nodeType":"YulFunctionCall","src":"6663:12:181"},"nodeType":"YulExpressionStatement","src":"6663:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6633:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6641:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6630:2:181"},"nodeType":"YulFunctionCall","src":"6630:30:181"},"nodeType":"YulIf","src":"6627:50:181"},{"nodeType":"YulVariableDeclaration","src":"6686:96:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6754:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"6765:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6750:3:181"},"nodeType":"YulFunctionCall","src":"6750:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6774:7:181"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"6712:37:181"},"nodeType":"YulFunctionCall","src":"6712:70:181"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"6690:8:181","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"6700:8:181","type":""}]},{"nodeType":"YulAssignment","src":"6791:18:181","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"6801:8:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6791:6:181"}]},{"nodeType":"YulAssignment","src":"6818:18:181","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"6828:8:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6818:6:181"}]},{"nodeType":"YulAssignment","src":"6845:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6872:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6883:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6868:3:181"},"nodeType":"YulFunctionCall","src":"6868:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6855:12:181"},"nodeType":"YulFunctionCall","src":"6855:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6845:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"6896:30:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6910:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6921:4:181","type":"","value":"1088"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6906:3:181"},"nodeType":"YulFunctionCall","src":"6906:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6900:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6954:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6963:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6966:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6956:6:181"},"nodeType":"YulFunctionCall","src":"6956:12:181"},"nodeType":"YulExpressionStatement","src":"6956:12:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"6941:2:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6945:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6938:2:181"},"nodeType":"YulFunctionCall","src":"6938:15:181"},"nodeType":"YulIf","src":"6935:35:181"},{"nodeType":"YulAssignment","src":"6979:28:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6993:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7004:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6989:3:181"},"nodeType":"YulFunctionCall","src":"6989:18:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"6979:6:181"}]},{"nodeType":"YulAssignment","src":"7016:26:181","value":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"7039:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7026:12:181"},"nodeType":"YulFunctionCall","src":"7026:16:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"7016:6:181"}]},{"nodeType":"YulAssignment","src":"7051:44:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7078:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7089:4:181","type":"","value":"1120"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7074:3:181"},"nodeType":"YulFunctionCall","src":"7074:20:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7061:12:181"},"nodeType":"YulFunctionCall","src":"7061:34:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"7051:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_struct$_Proof_$24133_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6434:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6445:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6457:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6465:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6473:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6481:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"6489:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"6497:6:181","type":""}],"src":"6283:818:181"},{"body":{"nodeType":"YulBlock","src":"7280:154:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7297:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7308:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7290:6:181"},"nodeType":"YulFunctionCall","src":"7290:21:181"},"nodeType":"YulExpressionStatement","src":"7290:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7331:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7342:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7327:3:181"},"nodeType":"YulFunctionCall","src":"7327:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7347:1:181","type":"","value":"5"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7320:6:181"},"nodeType":"YulFunctionCall","src":"7320:29:181"},"nodeType":"YulExpressionStatement","src":"7320:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7369:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7380:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7365:3:181"},"nodeType":"YulFunctionCall","src":"7365:18:181"},{"hexValue":"656d707479","kind":"string","nodeType":"YulLiteral","src":"7385:7:181","type":"","value":"empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7358:6:181"},"nodeType":"YulFunctionCall","src":"7358:35:181"},"nodeType":"YulExpressionStatement","src":"7358:35:181"},{"nodeType":"YulAssignment","src":"7402:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7414:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7425:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7410:3:181"},"nodeType":"YulFunctionCall","src":"7410:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7402:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_61fc3f77ebc090777f567969ad9823cf6334ab888acb385ca72668ec5adbde80__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7257:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7271:4:181","type":""}],"src":"7106:328:181"},{"body":{"nodeType":"YulBlock","src":"7471:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7488:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7495:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"7500:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7491:3:181"},"nodeType":"YulFunctionCall","src":"7491:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7481:6:181"},"nodeType":"YulFunctionCall","src":"7481:31:181"},"nodeType":"YulExpressionStatement","src":"7481:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7528:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7531:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7521:6:181"},"nodeType":"YulFunctionCall","src":"7521:15:181"},"nodeType":"YulExpressionStatement","src":"7521:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7552:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7555:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7545:6:181"},"nodeType":"YulFunctionCall","src":"7545:15:181"},"nodeType":"YulExpressionStatement","src":"7545:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"7439:127:181"},{"body":{"nodeType":"YulBlock","src":"7620:79:181","statements":[{"nodeType":"YulAssignment","src":"7630:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7642:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"7645:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7638:3:181"},"nodeType":"YulFunctionCall","src":"7638:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"7630:4:181"}]},{"body":{"nodeType":"YulBlock","src":"7671:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7673:16:181"},"nodeType":"YulFunctionCall","src":"7673:18:181"},"nodeType":"YulExpressionStatement","src":"7673:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"7662:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"7668:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7659:2:181"},"nodeType":"YulFunctionCall","src":"7659:11:181"},"nodeType":"YulIf","src":"7656:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"7602:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"7605:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"7611:4:181","type":""}],"src":"7571:128:181"},{"body":{"nodeType":"YulBlock","src":"7878:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7895:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7906:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7888:6:181"},"nodeType":"YulFunctionCall","src":"7888:21:181"},"nodeType":"YulExpressionStatement","src":"7888:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7929:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7940:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7925:3:181"},"nodeType":"YulFunctionCall","src":"7925:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7945:1:181","type":"","value":"8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7918:6:181"},"nodeType":"YulFunctionCall","src":"7918:29:181"},"nodeType":"YulExpressionStatement","src":"7918:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7967:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7978:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7963:3:181"},"nodeType":"YulFunctionCall","src":"7963:18:181"},{"hexValue":"2172656c61796572","kind":"string","nodeType":"YulLiteral","src":"7983:10:181","type":"","value":"!relayer"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7956:6:181"},"nodeType":"YulFunctionCall","src":"7956:38:181"},"nodeType":"YulExpressionStatement","src":"7956:38:181"},{"nodeType":"YulAssignment","src":"8003:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8015:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8026:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8011:3:181"},"nodeType":"YulFunctionCall","src":"8011:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8003:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8e7e8fcd400a5d12d3bcb2f74ef1d253cc1ee9f80325b4481ab4dffdf753068f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7855:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7869:4:181","type":""}],"src":"7704:331:181"},{"body":{"nodeType":"YulBlock","src":"8088:115:181","statements":[{"nodeType":"YulAssignment","src":"8098:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8120:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8107:12:181"},"nodeType":"YulFunctionCall","src":"8107:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"8098:5:181"}]},{"body":{"nodeType":"YulBlock","src":"8181:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8190:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8193:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8183:6:181"},"nodeType":"YulFunctionCall","src":"8183:12:181"},"nodeType":"YulExpressionStatement","src":"8183:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8149:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8160:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"8167:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8156:3:181"},"nodeType":"YulFunctionCall","src":"8156:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8146:2:181"},"nodeType":"YulFunctionCall","src":"8146:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8139:6:181"},"nodeType":"YulFunctionCall","src":"8139:41:181"},"nodeType":"YulIf","src":"8136:61:181"}]},"name":"abi_decode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"8067:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"8078:5:181","type":""}],"src":"8040:163:181"},{"body":{"nodeType":"YulBlock","src":"8251:51:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8268:3:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8277:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"8284:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8273:3:181"},"nodeType":"YulFunctionCall","src":"8273:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8261:6:181"},"nodeType":"YulFunctionCall","src":"8261:35:181"},"nodeType":"YulExpressionStatement","src":"8261:35:181"}]},"name":"abi_encode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8235:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"8242:3:181","type":""}],"src":"8208:94:181"},{"body":{"nodeType":"YulBlock","src":"8353:114:181","statements":[{"nodeType":"YulAssignment","src":"8363:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8385:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8372:12:181"},"nodeType":"YulFunctionCall","src":"8372:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"8363:5:181"}]},{"body":{"nodeType":"YulBlock","src":"8445:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8454:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8457:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8447:6:181"},"nodeType":"YulFunctionCall","src":"8447:12:181"},"nodeType":"YulExpressionStatement","src":"8447:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8414:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8435:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8428:6:181"},"nodeType":"YulFunctionCall","src":"8428:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8421:6:181"},"nodeType":"YulFunctionCall","src":"8421:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8411:2:181"},"nodeType":"YulFunctionCall","src":"8411:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8404:6:181"},"nodeType":"YulFunctionCall","src":"8404:40:181"},"nodeType":"YulIf","src":"8401:60:181"}]},"name":"abi_decode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"8332:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"8343:5:181","type":""}],"src":"8307:160:181"},{"body":{"nodeType":"YulBlock","src":"8548:424:181","statements":[{"nodeType":"YulVariableDeclaration","src":"8558:43:181","value":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"8597:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8584:12:181"},"nodeType":"YulFunctionCall","src":"8584:17:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"8562:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8690:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8699:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8702:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8692:6:181"},"nodeType":"YulFunctionCall","src":"8692:12:181"},"nodeType":"YulExpressionStatement","src":"8692:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"8624:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"8652:12:181"},"nodeType":"YulFunctionCall","src":"8652:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"8668:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8648:3:181"},"nodeType":"YulFunctionCall","src":"8648:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8683:2:181","type":"","value":"30"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"8679:3:181"},"nodeType":"YulFunctionCall","src":"8679:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8644:3:181"},"nodeType":"YulFunctionCall","src":"8644:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8620:3:181"},"nodeType":"YulFunctionCall","src":"8620:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8613:6:181"},"nodeType":"YulFunctionCall","src":"8613:76:181"},"nodeType":"YulIf","src":"8610:96:181"},{"nodeType":"YulVariableDeclaration","src":"8715:48:181","value":{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"8734:18:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"8754:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8730:3:181"},"nodeType":"YulFunctionCall","src":"8730:33:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"8719:7:181","type":""}]},{"nodeType":"YulAssignment","src":"8772:31:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8795:7:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8782:12:181"},"nodeType":"YulFunctionCall","src":"8782:21:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"8772:6:181"}]},{"nodeType":"YulAssignment","src":"8812:27:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8825:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"8834:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8821:3:181"},"nodeType":"YulFunctionCall","src":"8821:18:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"8812:5:181"}]},{"body":{"nodeType":"YulBlock","src":"8882:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8891:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8894:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8884:6:181"},"nodeType":"YulFunctionCall","src":"8884:12:181"},"nodeType":"YulExpressionStatement","src":"8884:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8854:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8862:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8851:2:181"},"nodeType":"YulFunctionCall","src":"8851:30:181"},"nodeType":"YulIf","src":"8848:50:181"},{"body":{"nodeType":"YulBlock","src":"8950:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8959:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8962:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8952:6:181"},"nodeType":"YulFunctionCall","src":"8952:12:181"},"nodeType":"YulExpressionStatement","src":"8952:12:181"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8914:5:181"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"8925:12:181"},"nodeType":"YulFunctionCall","src":"8925:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"8941:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8921:3:181"},"nodeType":"YulFunctionCall","src":"8921:27:181"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"8910:3:181"},"nodeType":"YulFunctionCall","src":"8910:39:181"},"nodeType":"YulIf","src":"8907:59:181"}]},"name":"calldata_access_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"8512:8:181","type":""},{"name":"ptr","nodeType":"YulTypedName","src":"8522:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"8530:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"8537:6:181","type":""}],"src":"8472:500:181"},{"body":{"nodeType":"YulBlock","src":"9043:200:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9060:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"9065:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9053:6:181"},"nodeType":"YulFunctionCall","src":"9053:19:181"},"nodeType":"YulExpressionStatement","src":"9053:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9098:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"9103:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9094:3:181"},"nodeType":"YulFunctionCall","src":"9094:14:181"},{"name":"start","nodeType":"YulIdentifier","src":"9110:5:181"},{"name":"length","nodeType":"YulIdentifier","src":"9117:6:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"9081:12:181"},"nodeType":"YulFunctionCall","src":"9081:43:181"},"nodeType":"YulExpressionStatement","src":"9081:43:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9148:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"9153:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9144:3:181"},"nodeType":"YulFunctionCall","src":"9144:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"9162:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9140:3:181"},"nodeType":"YulFunctionCall","src":"9140:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"9169:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9133:6:181"},"nodeType":"YulFunctionCall","src":"9133:38:181"},"nodeType":"YulExpressionStatement","src":"9133:38:181"},{"nodeType":"YulAssignment","src":"9180:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9195:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9208:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"9216:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9204:3:181"},"nodeType":"YulFunctionCall","src":"9204:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9225:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"9221:3:181"},"nodeType":"YulFunctionCall","src":"9221:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9200:3:181"},"nodeType":"YulFunctionCall","src":"9200:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9191:3:181"},"nodeType":"YulFunctionCall","src":"9191:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"9232:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9187:3:181"},"nodeType":"YulFunctionCall","src":"9187:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"9180:3:181"}]}]},"name":"abi_encode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"9012:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"9019:6:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"9027:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"9035:3:181","type":""}],"src":"8977:266:181"},{"body":{"nodeType":"YulBlock","src":"9336:432:181","statements":[{"nodeType":"YulVariableDeclaration","src":"9346:43:181","value":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"9385:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9372:12:181"},"nodeType":"YulFunctionCall","src":"9372:17:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"9350:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9478:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9487:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9490:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9480:6:181"},"nodeType":"YulFunctionCall","src":"9480:12:181"},"nodeType":"YulExpressionStatement","src":"9480:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"9412:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"9440:12:181"},"nodeType":"YulFunctionCall","src":"9440:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"9456:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9436:3:181"},"nodeType":"YulFunctionCall","src":"9436:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9471:2:181","type":"","value":"30"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"9467:3:181"},"nodeType":"YulFunctionCall","src":"9467:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9432:3:181"},"nodeType":"YulFunctionCall","src":"9432:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9408:3:181"},"nodeType":"YulFunctionCall","src":"9408:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9401:6:181"},"nodeType":"YulFunctionCall","src":"9401:76:181"},"nodeType":"YulIf","src":"9398:96:181"},{"nodeType":"YulVariableDeclaration","src":"9503:48:181","value":{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"9522:18:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"9542:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9518:3:181"},"nodeType":"YulFunctionCall","src":"9518:33:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"9507:7:181","type":""}]},{"nodeType":"YulAssignment","src":"9560:31:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9583:7:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9570:12:181"},"nodeType":"YulFunctionCall","src":"9570:21:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"9560:6:181"}]},{"nodeType":"YulAssignment","src":"9600:27:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9613:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"9622:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9609:3:181"},"nodeType":"YulFunctionCall","src":"9609:18:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"9600:5:181"}]},{"body":{"nodeType":"YulBlock","src":"9670:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9679:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9682:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9672:6:181"},"nodeType":"YulFunctionCall","src":"9672:12:181"},"nodeType":"YulExpressionStatement","src":"9672:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9642:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"9650:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9639:2:181"},"nodeType":"YulFunctionCall","src":"9639:30:181"},"nodeType":"YulIf","src":"9636:50:181"},{"body":{"nodeType":"YulBlock","src":"9746:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9755:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9758:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9748:6:181"},"nodeType":"YulFunctionCall","src":"9748:12:181"},"nodeType":"YulExpressionStatement","src":"9748:12:181"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9702:5:181"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"9713:12:181"},"nodeType":"YulFunctionCall","src":"9713:14:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9733:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"9736:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9729:3:181"},"nodeType":"YulFunctionCall","src":"9729:14:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9709:3:181"},"nodeType":"YulFunctionCall","src":"9709:35:181"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"9698:3:181"},"nodeType":"YulFunctionCall","src":"9698:47:181"},"nodeType":"YulIf","src":"9695:67:181"}]},"name":"calldata_access_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"9300:8:181","type":""},{"name":"ptr","nodeType":"YulTypedName","src":"9310:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"9318:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"9325:6:181","type":""}],"src":"9248:520:181"},{"body":{"nodeType":"YulBlock","src":"9851:369:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9868:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"9873:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9861:6:181"},"nodeType":"YulFunctionCall","src":"9861:19:181"},"nodeType":"YulExpressionStatement","src":"9861:19:181"},{"nodeType":"YulVariableDeclaration","src":"9889:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"9899:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9893:2:181","type":""}]},{"nodeType":"YulAssignment","src":"9912:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9923:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9928:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9919:3:181"},"nodeType":"YulFunctionCall","src":"9919:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"9912:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"9940:19:181","value":{"name":"value","nodeType":"YulIdentifier","src":"9954:5:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"9944:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9968:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"9977:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"9972:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10036:159:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10057:3:181"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"10085:6:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"10066:18:181"},"nodeType":"YulFunctionCall","src":"10066:26:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10102:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"10107:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10098:3:181"},"nodeType":"YulFunctionCall","src":"10098:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"10111:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10094:3:181"},"nodeType":"YulFunctionCall","src":"10094:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10062:3:181"},"nodeType":"YulFunctionCall","src":"10062:52:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10050:6:181"},"nodeType":"YulFunctionCall","src":"10050:65:181"},"nodeType":"YulExpressionStatement","src":"10050:65:181"},{"nodeType":"YulAssignment","src":"10128:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10139:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10144:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10135:3:181"},"nodeType":"YulFunctionCall","src":"10135:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"10128:3:181"}]},{"nodeType":"YulAssignment","src":"10160:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"10174:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10182:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10170:3:181"},"nodeType":"YulFunctionCall","src":"10170:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"10160:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9998:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"10001:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9995:2:181"},"nodeType":"YulFunctionCall","src":"9995:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"10009:18:181","statements":[{"nodeType":"YulAssignment","src":"10011:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"10020:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"10023:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10016:3:181"},"nodeType":"YulFunctionCall","src":"10016:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"10011:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"9991:3:181","statements":[]},"src":"9987:208:181"},{"nodeType":"YulAssignment","src":"10204:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"10211:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"10204:3:181"}]}]},"name":"abi_encode_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"9820:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"9827:6:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"9835:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"9843:3:181","type":""}],"src":"9773:447:181"},{"body":{"nodeType":"YulBlock","src":"10310:629:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10327:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"10332:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10320:6:181"},"nodeType":"YulFunctionCall","src":"10320:19:181"},"nodeType":"YulExpressionStatement","src":"10320:19:181"},{"nodeType":"YulVariableDeclaration","src":"10348:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10358:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10352:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10371:31:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10394:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10399:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10390:3:181"},"nodeType":"YulFunctionCall","src":"10390:12:181"},"variables":[{"name":"updated_pos","nodeType":"YulTypedName","src":"10375:11:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10411:24:181","value":{"name":"updated_pos","nodeType":"YulIdentifier","src":"10424:11:181"},"variables":[{"name":"pos_1","nodeType":"YulTypedName","src":"10415:5:181","type":""}]},{"nodeType":"YulAssignment","src":"10444:18:181","value":{"name":"updated_pos","nodeType":"YulIdentifier","src":"10451:11:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"10444:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"10471:38:181","value":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"10487:5:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10498:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"10501:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10494:3:181"},"nodeType":"YulFunctionCall","src":"10494:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10483:3:181"},"nodeType":"YulFunctionCall","src":"10483:26:181"},"variables":[{"name":"tail","nodeType":"YulTypedName","src":"10475:4:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10518:19:181","value":{"name":"value","nodeType":"YulIdentifier","src":"10532:5:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"10522:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10546:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10555:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"10550:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10614:299:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10635:3:181"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"10644:4:181"},{"name":"pos_1","nodeType":"YulIdentifier","src":"10650:5:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10640:3:181"},"nodeType":"YulFunctionCall","src":"10640:16:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10628:6:181"},"nodeType":"YulFunctionCall","src":"10628:29:181"},"nodeType":"YulExpressionStatement","src":"10628:29:181"},{"nodeType":"YulVariableDeclaration","src":"10670:81:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10737:5:181"},{"name":"srcPtr","nodeType":"YulIdentifier","src":"10744:6:181"}],"functionName":{"name":"calldata_access_bytes_calldata","nodeType":"YulIdentifier","src":"10706:30:181"},"nodeType":"YulFunctionCall","src":"10706:45:181"},"variables":[{"name":"elementValue0","nodeType":"YulTypedName","src":"10674:13:181","type":""},{"name":"elementValue1","nodeType":"YulTypedName","src":"10689:13:181","type":""}]},{"nodeType":"YulAssignment","src":"10764:69:181","value":{"arguments":[{"name":"elementValue0","nodeType":"YulIdentifier","src":"10798:13:181"},{"name":"elementValue1","nodeType":"YulIdentifier","src":"10813:13:181"},{"name":"tail","nodeType":"YulIdentifier","src":"10828:4:181"}],"functionName":{"name":"abi_encode_bytes_calldata","nodeType":"YulIdentifier","src":"10772:25:181"},"nodeType":"YulFunctionCall","src":"10772:61:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10764:4:181"}]},{"nodeType":"YulAssignment","src":"10846:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"10860:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10868:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10856:3:181"},"nodeType":"YulFunctionCall","src":"10856:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"10846:6:181"}]},{"nodeType":"YulAssignment","src":"10884:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10895:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10900:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10891:3:181"},"nodeType":"YulFunctionCall","src":"10891:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"10884:3:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"10576:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"10579:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10573:2:181"},"nodeType":"YulFunctionCall","src":"10573:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"10587:18:181","statements":[{"nodeType":"YulAssignment","src":"10589:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"10598:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"10601:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10594:3:181"},"nodeType":"YulFunctionCall","src":"10594:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"10589:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"10569:3:181","statements":[]},"src":"10565:348:181"},{"nodeType":"YulAssignment","src":"10922:11:181","value":{"name":"tail","nodeType":"YulIdentifier","src":"10929:4:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"10922:3:181"}]}]},"name":"abi_encode_array_bytes_calldata_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"10279:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"10286:6:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"10294:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10302:3:181","type":""}],"src":"10225:714:181"},{"body":{"nodeType":"YulBlock","src":"11107:2823:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11124:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11135:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11117:6:181"},"nodeType":"YulFunctionCall","src":"11117:21:181"},"nodeType":"YulExpressionStatement","src":"11117:21:181"},{"nodeType":"YulVariableDeclaration","src":"11147:46:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11186:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11173:12:181"},"nodeType":"YulFunctionCall","src":"11173:20:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"11151:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"11281:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11290:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11293:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11283:6:181"},"nodeType":"YulFunctionCall","src":"11283:12:181"},"nodeType":"YulExpressionStatement","src":"11283:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"11216:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"11244:12:181"},"nodeType":"YulFunctionCall","src":"11244:14:181"},{"name":"value0","nodeType":"YulIdentifier","src":"11260:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11240:3:181"},"nodeType":"YulFunctionCall","src":"11240:27:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11273:3:181","type":"","value":"414"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11269:3:181"},"nodeType":"YulFunctionCall","src":"11269:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11236:3:181"},"nodeType":"YulFunctionCall","src":"11236:42:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11212:3:181"},"nodeType":"YulFunctionCall","src":"11212:67:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11205:6:181"},"nodeType":"YulFunctionCall","src":"11205:75:181"},"nodeType":"YulIf","src":"11202:95:181"},{"nodeType":"YulVariableDeclaration","src":"11306:44:181","value":{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"11323:18:181"},{"name":"value0","nodeType":"YulIdentifier","src":"11343:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11319:3:181"},"nodeType":"YulFunctionCall","src":"11319:31:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11310:5:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11370:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11381:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11366:3:181"},"nodeType":"YulFunctionCall","src":"11366:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11386:4:181","type":"","value":"0xa0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11359:6:181"},"nodeType":"YulFunctionCall","src":"11359:32:181"},"nodeType":"YulExpressionStatement","src":"11359:32:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11436:5:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"11418:17:181"},"nodeType":"YulFunctionCall","src":"11418:24:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11448:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11459:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11444:3:181"},"nodeType":"YulFunctionCall","src":"11444:19:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"11400:17:181"},"nodeType":"YulFunctionCall","src":"11400:64:181"},"nodeType":"YulExpressionStatement","src":"11400:64:181"},{"nodeType":"YulVariableDeclaration","src":"11473:53:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11515:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11522:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11511:3:181"},"nodeType":"YulFunctionCall","src":"11511:14:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"11493:17:181"},"nodeType":"YulFunctionCall","src":"11493:33:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"11477:12:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"11553:12:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11571:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11582:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11567:3:181"},"nodeType":"YulFunctionCall","src":"11567:19:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"11535:17:181"},"nodeType":"YulFunctionCall","src":"11535:52:181"},"nodeType":"YulExpressionStatement","src":"11535:52:181"},{"nodeType":"YulVariableDeclaration","src":"11596:57:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11640:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11647:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11636:3:181"},"nodeType":"YulFunctionCall","src":"11636:16:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"11618:17:181"},"nodeType":"YulFunctionCall","src":"11618:35:181"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"11600:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11662:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"11672:3:181","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11666:2:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"11702:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11722:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"11733:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11718:3:181"},"nodeType":"YulFunctionCall","src":"11718:18:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"11684:17:181"},"nodeType":"YulFunctionCall","src":"11684:53:181"},"nodeType":"YulExpressionStatement","src":"11684:53:181"},{"nodeType":"YulVariableDeclaration","src":"11746:58:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11791:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11798:4:181","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11787:3:181"},"nodeType":"YulFunctionCall","src":"11787:16:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"11768:18:181"},"nodeType":"YulFunctionCall","src":"11768:36:181"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"11750:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11813:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"11823:3:181","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"11817:2:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"11854:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11874:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"11885:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11870:3:181"},"nodeType":"YulFunctionCall","src":"11870:18:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"11835:18:181"},"nodeType":"YulFunctionCall","src":"11835:54:181"},"nodeType":"YulExpressionStatement","src":"11835:54:181"},{"nodeType":"YulVariableDeclaration","src":"11898:58:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11943:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11950:4:181","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11939:3:181"},"nodeType":"YulFunctionCall","src":"11939:16:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"11920:18:181"},"nodeType":"YulFunctionCall","src":"11920:36:181"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"11902:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11965:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"11975:3:181","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"11969:2:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"12006:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12026:9:181"},{"name":"_3","nodeType":"YulIdentifier","src":"12037:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12022:3:181"},"nodeType":"YulFunctionCall","src":"12022:18:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"11987:18:181"},"nodeType":"YulFunctionCall","src":"11987:54:181"},"nodeType":"YulExpressionStatement","src":"11987:54:181"},{"nodeType":"YulVariableDeclaration","src":"12050:55:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12092:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"12099:4:181","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12088:3:181"},"nodeType":"YulFunctionCall","src":"12088:16:181"}],"functionName":{"name":"abi_decode_bool","nodeType":"YulIdentifier","src":"12072:15:181"},"nodeType":"YulFunctionCall","src":"12072:33:181"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"12054:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12114:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12124:3:181","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"12118:2:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"12152:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12172:9:181"},{"name":"_4","nodeType":"YulIdentifier","src":"12183:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12168:3:181"},"nodeType":"YulFunctionCall","src":"12168:18:181"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"12136:15:181"},"nodeType":"YulFunctionCall","src":"12136:51:181"},"nodeType":"YulExpressionStatement","src":"12136:51:181"},{"nodeType":"YulVariableDeclaration","src":"12196:90:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12263:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12274:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"12281:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12270:3:181"},"nodeType":"YulFunctionCall","src":"12270:15:181"}],"functionName":{"name":"calldata_access_bytes_calldata","nodeType":"YulIdentifier","src":"12232:30:181"},"nodeType":"YulFunctionCall","src":"12232:54:181"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"12200:14:181","type":""},{"name":"memberValue1","nodeType":"YulTypedName","src":"12216:12:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12295:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12305:6:181","type":"","value":"0x01a0"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"12299:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12320:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12330:3:181","type":"","value":"384"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"12324:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12353:9:181"},{"name":"_6","nodeType":"YulIdentifier","src":"12364:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12349:3:181"},"nodeType":"YulFunctionCall","src":"12349:18:181"},{"name":"_5","nodeType":"YulIdentifier","src":"12369:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12342:6:181"},"nodeType":"YulFunctionCall","src":"12342:30:181"},"nodeType":"YulExpressionStatement","src":"12342:30:181"},{"nodeType":"YulVariableDeclaration","src":"12381:90:181","value":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"12421:14:181"},{"name":"memberValue1","nodeType":"YulIdentifier","src":"12437:12:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12455:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12466:3:181","type":"","value":"608"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12451:3:181"},"nodeType":"YulFunctionCall","src":"12451:19:181"}],"functionName":{"name":"abi_encode_bytes_calldata","nodeType":"YulIdentifier","src":"12395:25:181"},"nodeType":"YulFunctionCall","src":"12395:76:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"12385:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12491:9:181"},{"name":"_5","nodeType":"YulIdentifier","src":"12502:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12487:3:181"},"nodeType":"YulFunctionCall","src":"12487:18:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12524:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"12531:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12520:3:181"},"nodeType":"YulFunctionCall","src":"12520:15:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12507:12:181"},"nodeType":"YulFunctionCall","src":"12507:29:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12480:6:181"},"nodeType":"YulFunctionCall","src":"12480:57:181"},"nodeType":"YulExpressionStatement","src":"12480:57:181"},{"nodeType":"YulVariableDeclaration","src":"12546:56:181","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12591:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12598:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12587:3:181"},"nodeType":"YulFunctionCall","src":"12587:14:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"12568:18:181"},"nodeType":"YulFunctionCall","src":"12568:34:181"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"12550:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"12630:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12650:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12661:3:181","type":"","value":"448"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12646:3:181"},"nodeType":"YulFunctionCall","src":"12646:19:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"12611:18:181"},"nodeType":"YulFunctionCall","src":"12611:55:181"},"nodeType":"YulExpressionStatement","src":"12611:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12686:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12697:3:181","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12682:3:181"},"nodeType":"YulFunctionCall","src":"12682:19:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12720:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"12727:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12716:3:181"},"nodeType":"YulFunctionCall","src":"12716:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12703:12:181"},"nodeType":"YulFunctionCall","src":"12703:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12675:6:181"},"nodeType":"YulFunctionCall","src":"12675:57:181"},"nodeType":"YulExpressionStatement","src":"12675:57:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12752:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12763:3:181","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12748:3:181"},"nodeType":"YulFunctionCall","src":"12748:19:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12786:5:181"},{"name":"_3","nodeType":"YulIdentifier","src":"12793:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12782:3:181"},"nodeType":"YulFunctionCall","src":"12782:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12769:12:181"},"nodeType":"YulFunctionCall","src":"12769:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12741:6:181"},"nodeType":"YulFunctionCall","src":"12741:57:181"},"nodeType":"YulExpressionStatement","src":"12741:57:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12818:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12829:3:181","type":"","value":"544"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12814:3:181"},"nodeType":"YulFunctionCall","src":"12814:19:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12852:5:181"},{"name":"_4","nodeType":"YulIdentifier","src":"12859:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12848:3:181"},"nodeType":"YulFunctionCall","src":"12848:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12835:12:181"},"nodeType":"YulFunctionCall","src":"12835:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12807:6:181"},"nodeType":"YulFunctionCall","src":"12807:57:181"},"nodeType":"YulExpressionStatement","src":"12807:57:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12884:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12895:3:181","type":"","value":"576"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12880:3:181"},"nodeType":"YulFunctionCall","src":"12880:19:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12918:5:181"},{"name":"_6","nodeType":"YulIdentifier","src":"12925:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12914:3:181"},"nodeType":"YulFunctionCall","src":"12914:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12901:12:181"},"nodeType":"YulFunctionCall","src":"12901:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12873:6:181"},"nodeType":"YulFunctionCall","src":"12873:57:181"},"nodeType":"YulExpressionStatement","src":"12873:57:181"},{"nodeType":"YulVariableDeclaration","src":"12939:105:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13020:6:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13032:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"13040:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13028:3:181"},"nodeType":"YulFunctionCall","src":"13028:15:181"}],"functionName":{"name":"calldata_access_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"12977:42:181"},"nodeType":"YulFunctionCall","src":"12977:67:181"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"12943:14:181","type":""},{"name":"memberValue1_1","nodeType":"YulTypedName","src":"12959:14:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13053:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13067:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"13063:3:181"},"nodeType":"YulFunctionCall","src":"13063:7:181"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"13057:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13090:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13101:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13086:3:181"},"nodeType":"YulFunctionCall","src":"13086:20:181"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"13116:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"13124:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13112:3:181"},"nodeType":"YulFunctionCall","src":"13112:22:181"},{"name":"_7","nodeType":"YulIdentifier","src":"13136:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13108:3:181"},"nodeType":"YulFunctionCall","src":"13108:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13079:6:181"},"nodeType":"YulFunctionCall","src":"13079:61:181"},"nodeType":"YulExpressionStatement","src":"13079:61:181"},{"nodeType":"YulVariableDeclaration","src":"13149:91:181","value":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"13201:14:181"},{"name":"memberValue1_1","nodeType":"YulIdentifier","src":"13217:14:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"13233:6:181"}],"functionName":{"name":"abi_encode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"13163:37:181"},"nodeType":"YulFunctionCall","src":"13163:77:181"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"13153:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13249:107:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13330:6:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13342:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"13350:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13338:3:181"},"nodeType":"YulFunctionCall","src":"13338:17:181"}],"functionName":{"name":"calldata_access_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"13287:42:181"},"nodeType":"YulFunctionCall","src":"13287:69:181"},"variables":[{"name":"memberValue0_8","nodeType":"YulTypedName","src":"13253:14:181","type":""},{"name":"memberValue1_2","nodeType":"YulTypedName","src":"13269:14:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13376:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13387:4:181","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13372:3:181"},"nodeType":"YulFunctionCall","src":"13372:20:181"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"13402:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"13410:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13398:3:181"},"nodeType":"YulFunctionCall","src":"13398:22:181"},{"name":"_7","nodeType":"YulIdentifier","src":"13422:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13394:3:181"},"nodeType":"YulFunctionCall","src":"13394:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13365:6:181"},"nodeType":"YulFunctionCall","src":"13365:61:181"},"nodeType":"YulExpressionStatement","src":"13365:61:181"},{"nodeType":"YulVariableDeclaration","src":"13435:98:181","value":{"arguments":[{"name":"memberValue0_8","nodeType":"YulIdentifier","src":"13494:14:181"},{"name":"memberValue1_2","nodeType":"YulIdentifier","src":"13510:14:181"},{"name":"tail_2","nodeType":"YulIdentifier","src":"13526:6:181"}],"functionName":{"name":"abi_encode_array_bytes_calldata_dyn_calldata","nodeType":"YulIdentifier","src":"13449:44:181"},"nodeType":"YulFunctionCall","src":"13449:84:181"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"13439:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13542:59:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13587:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"13595:4:181","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13583:3:181"},"nodeType":"YulFunctionCall","src":"13583:17:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"13564:18:181"},"nodeType":"YulFunctionCall","src":"13564:37:181"},"variables":[{"name":"memberValue0_9","nodeType":"YulTypedName","src":"13546:14:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_9","nodeType":"YulIdentifier","src":"13629:14:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13649:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13660:4:181","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13645:3:181"},"nodeType":"YulFunctionCall","src":"13645:20:181"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"13610:18:181"},"nodeType":"YulFunctionCall","src":"13610:56:181"},"nodeType":"YulExpressionStatement","src":"13610:56:181"},{"nodeType":"YulVariableDeclaration","src":"13675:96:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13745:6:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13757:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"13765:4:181","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13753:3:181"},"nodeType":"YulFunctionCall","src":"13753:17:181"}],"functionName":{"name":"calldata_access_bytes_calldata","nodeType":"YulIdentifier","src":"13714:30:181"},"nodeType":"YulFunctionCall","src":"13714:57:181"},"variables":[{"name":"memberValue0_10","nodeType":"YulTypedName","src":"13679:15:181","type":""},{"name":"memberValue1_3","nodeType":"YulTypedName","src":"13696:14:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13791:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13802:4:181","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13787:3:181"},"nodeType":"YulFunctionCall","src":"13787:20:181"},{"arguments":[{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"13817:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"13825:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13813:3:181"},"nodeType":"YulFunctionCall","src":"13813:22:181"},{"name":"_7","nodeType":"YulIdentifier","src":"13837:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13809:3:181"},"nodeType":"YulFunctionCall","src":"13809:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13780:6:181"},"nodeType":"YulFunctionCall","src":"13780:61:181"},"nodeType":"YulExpressionStatement","src":"13780:61:181"},{"nodeType":"YulAssignment","src":"13850:74:181","value":{"arguments":[{"name":"memberValue0_10","nodeType":"YulIdentifier","src":"13884:15:181"},{"name":"memberValue1_3","nodeType":"YulIdentifier","src":"13901:14:181"},{"name":"tail_3","nodeType":"YulIdentifier","src":"13917:6:181"}],"functionName":{"name":"abi_encode_bytes_calldata","nodeType":"YulIdentifier","src":"13858:25:181"},"nodeType":"YulFunctionCall","src":"13858:66:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13850:4:181"}]}]},"name":"abi_encode_tuple_t_struct$_ExecuteArgs_$29365_calldata_ptr__to_t_struct$_ExecuteArgs_$29365_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11076:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11087:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11098:4:181","type":""}],"src":"10944:2986:181"},{"body":{"nodeType":"YulBlock","src":"14016:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"14062:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14071:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14074:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14064:6:181"},"nodeType":"YulFunctionCall","src":"14064:12:181"},"nodeType":"YulExpressionStatement","src":"14064:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14037:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"14046:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14033:3:181"},"nodeType":"YulFunctionCall","src":"14033:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"14058:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14029:3:181"},"nodeType":"YulFunctionCall","src":"14029:32:181"},"nodeType":"YulIf","src":"14026:52:181"},{"nodeType":"YulAssignment","src":"14087:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14103:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14097:5:181"},"nodeType":"YulFunctionCall","src":"14097:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14087:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13982:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13993:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14005:6:181","type":""}],"src":"13935:184:181"},{"body":{"nodeType":"YulBlock","src":"14156:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14173:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14180:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"14185:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14176:3:181"},"nodeType":"YulFunctionCall","src":"14176:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14166:6:181"},"nodeType":"YulFunctionCall","src":"14166:31:181"},"nodeType":"YulExpressionStatement","src":"14166:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14213:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"14216:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14206:6:181"},"nodeType":"YulFunctionCall","src":"14206:15:181"},"nodeType":"YulExpressionStatement","src":"14206:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14237:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14240:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14230:6:181"},"nodeType":"YulFunctionCall","src":"14230:15:181"},"nodeType":"YulExpressionStatement","src":"14230:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"14124:127:181"},{"body":{"nodeType":"YulBlock","src":"14304:77:181","statements":[{"nodeType":"YulAssignment","src":"14314:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14325:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"14328:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14321:3:181"},"nodeType":"YulFunctionCall","src":"14321:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"14314:3:181"}]},{"body":{"nodeType":"YulBlock","src":"14353:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14355:16:181"},"nodeType":"YulFunctionCall","src":"14355:18:181"},"nodeType":"YulExpressionStatement","src":"14355:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14345:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"14348:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14342:2:181"},"nodeType":"YulFunctionCall","src":"14342:10:181"},"nodeType":"YulIf","src":"14339:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"14287:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"14290:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"14296:3:181","type":""}],"src":"14256:125:181"},{"body":{"nodeType":"YulBlock","src":"14435:373:181","statements":[{"nodeType":"YulVariableDeclaration","src":"14445:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14465:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14459:5:181"},"nodeType":"YulFunctionCall","src":"14459:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"14449:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14487:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"14492:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14480:6:181"},"nodeType":"YulFunctionCall","src":"14480:19:181"},"nodeType":"YulExpressionStatement","src":"14480:19:181"},{"nodeType":"YulVariableDeclaration","src":"14508:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14517:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"14512:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"14579:110:181","statements":[{"nodeType":"YulVariableDeclaration","src":"14593:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14603:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14597:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14635:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"14640:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14631:3:181"},"nodeType":"YulFunctionCall","src":"14631:11:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14644:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14627:3:181"},"nodeType":"YulFunctionCall","src":"14627:20:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14663:5:181"},{"name":"i","nodeType":"YulIdentifier","src":"14670:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14659:3:181"},"nodeType":"YulFunctionCall","src":"14659:13:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14674:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14655:3:181"},"nodeType":"YulFunctionCall","src":"14655:22:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14649:5:181"},"nodeType":"YulFunctionCall","src":"14649:29:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14620:6:181"},"nodeType":"YulFunctionCall","src":"14620:59:181"},"nodeType":"YulExpressionStatement","src":"14620:59:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"14538:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"14541:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14535:2:181"},"nodeType":"YulFunctionCall","src":"14535:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"14549:21:181","statements":[{"nodeType":"YulAssignment","src":"14551:17:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"14560:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"14563:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14556:3:181"},"nodeType":"YulFunctionCall","src":"14556:12:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"14551:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"14531:3:181","statements":[]},"src":"14527:162:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14713:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"14718:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14709:3:181"},"nodeType":"YulFunctionCall","src":"14709:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"14727:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14705:3:181"},"nodeType":"YulFunctionCall","src":"14705:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"14734:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14698:6:181"},"nodeType":"YulFunctionCall","src":"14698:38:181"},"nodeType":"YulExpressionStatement","src":"14698:38:181"},{"nodeType":"YulAssignment","src":"14745:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14760:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"14773:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"14781:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14769:3:181"},"nodeType":"YulFunctionCall","src":"14769:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14790:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"14786:3:181"},"nodeType":"YulFunctionCall","src":"14786:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14765:3:181"},"nodeType":"YulFunctionCall","src":"14765:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14756:3:181"},"nodeType":"YulFunctionCall","src":"14756:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"14797:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14752:3:181"},"nodeType":"YulFunctionCall","src":"14752:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"14745:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"14412:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"14419:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"14427:3:181","type":""}],"src":"14386:422:181"},{"body":{"nodeType":"YulBlock","src":"14872:555:181","statements":[{"nodeType":"YulVariableDeclaration","src":"14882:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14902:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14896:5:181"},"nodeType":"YulFunctionCall","src":"14896:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"14886:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14924:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"14929:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14917:6:181"},"nodeType":"YulFunctionCall","src":"14917:19:181"},"nodeType":"YulExpressionStatement","src":"14917:19:181"},{"nodeType":"YulVariableDeclaration","src":"14945:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14955:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14949:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"14968:31:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14991:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14996:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14987:3:181"},"nodeType":"YulFunctionCall","src":"14987:12:181"},"variables":[{"name":"updated_pos","nodeType":"YulTypedName","src":"14972:11:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15008:24:181","value":{"name":"updated_pos","nodeType":"YulIdentifier","src":"15021:11:181"},"variables":[{"name":"pos_1","nodeType":"YulTypedName","src":"15012:5:181","type":""}]},{"nodeType":"YulAssignment","src":"15041:18:181","value":{"name":"updated_pos","nodeType":"YulIdentifier","src":"15048:11:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"15041:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"15068:38:181","value":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"15084:5:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15095:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"15098:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"15091:3:181"},"nodeType":"YulFunctionCall","src":"15091:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15080:3:181"},"nodeType":"YulFunctionCall","src":"15080:26:181"},"variables":[{"name":"tail","nodeType":"YulTypedName","src":"15072:4:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15115:28:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15133:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"15140:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15129:3:181"},"nodeType":"YulFunctionCall","src":"15129:14:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"15119:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15152:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"15161:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"15156:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"15220:181:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"15241:3:181"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"15250:4:181"},{"name":"pos_1","nodeType":"YulIdentifier","src":"15256:5:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15246:3:181"},"nodeType":"YulFunctionCall","src":"15246:16:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15234:6:181"},"nodeType":"YulFunctionCall","src":"15234:29:181"},"nodeType":"YulExpressionStatement","src":"15234:29:181"},{"nodeType":"YulAssignment","src":"15276:45:181","value":{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"15307:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15301:5:181"},"nodeType":"YulFunctionCall","src":"15301:13:181"},{"name":"tail","nodeType":"YulIdentifier","src":"15316:4:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"15284:16:181"},"nodeType":"YulFunctionCall","src":"15284:37:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15276:4:181"}]},{"nodeType":"YulAssignment","src":"15334:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"15348:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"15356:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15344:3:181"},"nodeType":"YulFunctionCall","src":"15344:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"15334:6:181"}]},{"nodeType":"YulAssignment","src":"15372:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"15383:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"15388:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15379:3:181"},"nodeType":"YulFunctionCall","src":"15379:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"15372:3:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"15182:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"15185:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15179:2:181"},"nodeType":"YulFunctionCall","src":"15179:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"15193:18:181","statements":[{"nodeType":"YulAssignment","src":"15195:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"15204:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"15207:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15200:3:181"},"nodeType":"YulFunctionCall","src":"15200:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"15195:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"15175:3:181","statements":[]},"src":"15171:230:181"},{"nodeType":"YulAssignment","src":"15410:11:181","value":{"name":"tail","nodeType":"YulIdentifier","src":"15417:4:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"15410:3:181"}]}]},"name":"abi_encode_array_bytes_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"14849:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"14856:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"14864:3:181","type":""}],"src":"14813:614:181"},{"body":{"nodeType":"YulBlock","src":"15777:865:181","statements":[{"nodeType":"YulVariableDeclaration","src":"15787:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15805:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15816:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15801:3:181"},"nodeType":"YulFunctionCall","src":"15801:18:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"15791:6:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15835:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15846:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15828:6:181"},"nodeType":"YulFunctionCall","src":"15828:21:181"},"nodeType":"YulExpressionStatement","src":"15828:21:181"},{"nodeType":"YulVariableDeclaration","src":"15858:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"15869:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"15862:3:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"15891:6:181"},{"name":"value1","nodeType":"YulIdentifier","src":"15899:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15884:6:181"},"nodeType":"YulFunctionCall","src":"15884:22:181"},"nodeType":"YulExpressionStatement","src":"15884:22:181"},{"nodeType":"YulAssignment","src":"15915:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15926:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15937:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15922:3:181"},"nodeType":"YulFunctionCall","src":"15922:19:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"15915:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"15950:20:181","value":{"name":"value0","nodeType":"YulIdentifier","src":"15964:6:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"15954:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15979:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"15988:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"15983:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"16047:186:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16068:3:181"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"16096:6:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"16077:18:181"},"nodeType":"YulFunctionCall","src":"16077:26:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16113:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"16118:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16109:3:181"},"nodeType":"YulFunctionCall","src":"16109:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"16122:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16105:3:181"},"nodeType":"YulFunctionCall","src":"16105:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16073:3:181"},"nodeType":"YulFunctionCall","src":"16073:52:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16061:6:181"},"nodeType":"YulFunctionCall","src":"16061:65:181"},"nodeType":"YulExpressionStatement","src":"16061:65:181"},{"nodeType":"YulVariableDeclaration","src":"16139:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"16149:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"16143:2:181","type":""}]},{"nodeType":"YulAssignment","src":"16166:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16177:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"16182:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16173:3:181"},"nodeType":"YulFunctionCall","src":"16173:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"16166:3:181"}]},{"nodeType":"YulAssignment","src":"16198:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"16212:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"16220:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16208:3:181"},"nodeType":"YulFunctionCall","src":"16208:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"16198:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"16009:1:181"},{"name":"value1","nodeType":"YulIdentifier","src":"16012:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16006:2:181"},"nodeType":"YulFunctionCall","src":"16006:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"16020:18:181","statements":[{"nodeType":"YulAssignment","src":"16022:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"16031:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"16034:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16027:3:181"},"nodeType":"YulFunctionCall","src":"16027:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"16022:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"16002:3:181","statements":[]},"src":"15998:235:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16253:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16264:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16249:3:181"},"nodeType":"YulFunctionCall","src":"16249:20:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16275:3:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"16280:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16271:3:181"},"nodeType":"YulFunctionCall","src":"16271:19:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16242:6:181"},"nodeType":"YulFunctionCall","src":"16242:49:181"},"nodeType":"YulExpressionStatement","src":"16242:49:181"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16307:3:181"},{"name":"value3","nodeType":"YulIdentifier","src":"16312:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16300:6:181"},"nodeType":"YulFunctionCall","src":"16300:19:181"},"nodeType":"YulExpressionStatement","src":"16300:19:181"},{"body":{"nodeType":"YulBlock","src":"16363:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16372:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16375:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16365:6:181"},"nodeType":"YulFunctionCall","src":"16365:12:181"},"nodeType":"YulExpressionStatement","src":"16365:12:181"}]},"condition":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"16334:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16350:3:181","type":"","value":"251"},{"kind":"number","nodeType":"YulLiteral","src":"16355:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16346:3:181"},"nodeType":"YulFunctionCall","src":"16346:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"16359:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16342:3:181"},"nodeType":"YulFunctionCall","src":"16342:19:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"16331:2:181"},"nodeType":"YulFunctionCall","src":"16331:31:181"},"nodeType":"YulIf","src":"16328:51:181"},{"nodeType":"YulVariableDeclaration","src":"16388:28:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16406:1:181","type":"","value":"5"},{"name":"value3","nodeType":"YulIdentifier","src":"16409:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16402:3:181"},"nodeType":"YulFunctionCall","src":"16402:14:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"16392:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16442:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"16447:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16438:3:181"},"nodeType":"YulFunctionCall","src":"16438:14:181"},{"name":"value2","nodeType":"YulIdentifier","src":"16454:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"16462:6:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"16425:12:181"},"nodeType":"YulFunctionCall","src":"16425:44:181"},"nodeType":"YulExpressionStatement","src":"16425:44:181"},{"nodeType":"YulVariableDeclaration","src":"16478:26:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16492:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"16497:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16488:3:181"},"nodeType":"YulFunctionCall","src":"16488:16:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"16482:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16524:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16535:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16520:3:181"},"nodeType":"YulFunctionCall","src":"16520:18:181"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"16548:2:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"16552:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16544:3:181"},"nodeType":"YulFunctionCall","src":"16544:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16564:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16540:3:181"},"nodeType":"YulFunctionCall","src":"16540:29:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16513:6:181"},"nodeType":"YulFunctionCall","src":"16513:57:181"},"nodeType":"YulExpressionStatement","src":"16513:57:181"},{"nodeType":"YulAssignment","src":"16579:57:181","value":{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"16614:6:181"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"16626:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"16630:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16622:3:181"},"nodeType":"YulFunctionCall","src":"16622:13:181"}],"functionName":{"name":"abi_encode_array_bytes_dyn","nodeType":"YulIdentifier","src":"16587:26:181"},"nodeType":"YulFunctionCall","src":"16587:49:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16579:4:181"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_calldata_ptr_t_array$_t_uint256_$dyn_calldata_ptr_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15714:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"15725:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"15733:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15741:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15749:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15757:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15768:4:181","type":""}],"src":"15432:1210:181"},{"body":{"nodeType":"YulBlock","src":"16766:98:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16783:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16794:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16776:6:181"},"nodeType":"YulFunctionCall","src":"16776:21:181"},"nodeType":"YulExpressionStatement","src":"16776:21:181"},{"nodeType":"YulAssignment","src":"16806:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16831:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16843:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16854:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16839:3:181"},"nodeType":"YulFunctionCall","src":"16839:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"16814:16:181"},"nodeType":"YulFunctionCall","src":"16814:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16806:4:181"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16735:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16746:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16757:4:181","type":""}],"src":"16647:217:181"},{"body":{"nodeType":"YulBlock","src":"16928:48:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16951:3:181"},{"name":"start","nodeType":"YulIdentifier","src":"16956:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"16963:6:181","type":"","value":"0x0400"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"16938:12:181"},"nodeType":"YulFunctionCall","src":"16938:32:181"},"nodeType":"YulExpressionStatement","src":"16938:32:181"}]},"name":"abi_encode_array_bytes32_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"16912:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"16919:3:181","type":""}],"src":"16869:107:181"},{"body":{"nodeType":"YulBlock","src":"17326:1430:181","statements":[{"nodeType":"YulVariableDeclaration","src":"17336:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"17346:4:181","type":"","value":"1120"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"17340:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"17359:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17377:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"17388:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17373:3:181"},"nodeType":"YulFunctionCall","src":"17373:18:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"17363:6:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17407:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"17418:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17400:6:181"},"nodeType":"YulFunctionCall","src":"17400:21:181"},"nodeType":"YulExpressionStatement","src":"17400:21:181"},{"nodeType":"YulVariableDeclaration","src":"17430:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"17441:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"17434:3:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"17463:6:181"},{"name":"value1","nodeType":"YulIdentifier","src":"17471:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17456:6:181"},"nodeType":"YulFunctionCall","src":"17456:22:181"},"nodeType":"YulExpressionStatement","src":"17456:22:181"},{"nodeType":"YulVariableDeclaration","src":"17487:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"17497:4:181","type":"","value":"1152"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"17491:2:181","type":""}]},{"nodeType":"YulAssignment","src":"17510:25:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17521:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"17532:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17517:3:181"},"nodeType":"YulFunctionCall","src":"17517:18:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"17510:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"17544:53:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17566:9:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17581:1:181","type":"","value":"5"},{"name":"value1","nodeType":"YulIdentifier","src":"17584:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"17577:3:181"},"nodeType":"YulFunctionCall","src":"17577:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17562:3:181"},"nodeType":"YulFunctionCall","src":"17562:30:181"},{"name":"_2","nodeType":"YulIdentifier","src":"17594:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17558:3:181"},"nodeType":"YulFunctionCall","src":"17558:39:181"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"17548:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"17606:20:181","value":{"name":"value0","nodeType":"YulIdentifier","src":"17620:6:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"17610:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"17635:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"17644:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"17639:1:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"17654:12:181","value":{"name":"i","nodeType":"YulIdentifier","src":"17665:1:181"},"variables":[{"name":"i_1","nodeType":"YulTypedName","src":"17658:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"17730:835:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17751:3:181"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"17764:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"17772:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17760:3:181"},"nodeType":"YulFunctionCall","src":"17760:22:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17788:4:181","type":"","value":"1151"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"17784:3:181"},"nodeType":"YulFunctionCall","src":"17784:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17756:3:181"},"nodeType":"YulFunctionCall","src":"17756:38:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17744:6:181"},"nodeType":"YulFunctionCall","src":"17744:51:181"},"nodeType":"YulExpressionStatement","src":"17744:51:181"},{"nodeType":"YulVariableDeclaration","src":"17808:46:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"17847:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"17834:12:181"},"nodeType":"YulFunctionCall","src":"17834:20:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"17812:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"17947:16:181","statements":[{"expression":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17956:1:181"},{"name":"i","nodeType":"YulIdentifier","src":"17959:1:181"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17949:6:181"},"nodeType":"YulFunctionCall","src":"17949:12:181"},"nodeType":"YulExpressionStatement","src":"17949:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"17881:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"17909:12:181"},"nodeType":"YulFunctionCall","src":"17909:14:181"},{"name":"value0","nodeType":"YulIdentifier","src":"17925:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17905:3:181"},"nodeType":"YulFunctionCall","src":"17905:27:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17938:4:181","type":"","value":"1086"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"17934:3:181"},"nodeType":"YulFunctionCall","src":"17934:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17901:3:181"},"nodeType":"YulFunctionCall","src":"17901:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"17877:3:181"},"nodeType":"YulFunctionCall","src":"17877:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17870:6:181"},"nodeType":"YulFunctionCall","src":"17870:76:181"},"nodeType":"YulIf","src":"17867:96:181"},{"nodeType":"YulVariableDeclaration","src":"17976:44:181","value":{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"17993:18:181"},{"name":"value0","nodeType":"YulIdentifier","src":"18013:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17989:3:181"},"nodeType":"YulFunctionCall","src":"17989:31:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"17980:5:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18033:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"18043:6:181","type":"","value":"0x0440"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"18037:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18062:78:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18127:5:181"},{"name":"value","nodeType":"YulIdentifier","src":"18134:5:181"}],"functionName":{"name":"calldata_access_bytes_calldata","nodeType":"YulIdentifier","src":"18096:30:181"},"nodeType":"YulFunctionCall","src":"18096:44:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"18066:12:181","type":""},{"name":"memberValue1","nodeType":"YulTypedName","src":"18080:12:181","type":""}]},{"expression":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"18160:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"18168:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18153:6:181"},"nodeType":"YulFunctionCall","src":"18153:18:181"},"nodeType":"YulExpressionStatement","src":"18153:18:181"},{"nodeType":"YulVariableDeclaration","src":"18184:84:181","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"18224:12:181"},{"name":"memberValue1","nodeType":"YulIdentifier","src":"18238:12:181"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"18256:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"18264:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18252:3:181"},"nodeType":"YulFunctionCall","src":"18252:15:181"}],"functionName":{"name":"abi_encode_bytes_calldata","nodeType":"YulIdentifier","src":"18198:25:181"},"nodeType":"YulFunctionCall","src":"18198:70:181"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"18188:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18281:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"18291:4:181","type":"","value":"0x20"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"18285:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"18325:6:181"},{"name":"_4","nodeType":"YulIdentifier","src":"18333:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18321:3:181"},"nodeType":"YulFunctionCall","src":"18321:15:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18342:5:181"},{"name":"_4","nodeType":"YulIdentifier","src":"18349:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18338:3:181"},"nodeType":"YulFunctionCall","src":"18338:14:181"},{"kind":"number","nodeType":"YulLiteral","src":"18354:6:181","type":"","value":"0x0400"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"18308:12:181"},"nodeType":"YulFunctionCall","src":"18308:53:181"},"nodeType":"YulExpressionStatement","src":"18308:53:181"},{"nodeType":"YulVariableDeclaration","src":"18374:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"18384:6:181","type":"","value":"0x0420"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"18378:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"18414:6:181"},{"name":"_5","nodeType":"YulIdentifier","src":"18422:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18410:3:181"},"nodeType":"YulFunctionCall","src":"18410:15:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18444:5:181"},{"name":"_5","nodeType":"YulIdentifier","src":"18451:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18440:3:181"},"nodeType":"YulFunctionCall","src":"18440:14:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"18427:12:181"},"nodeType":"YulFunctionCall","src":"18427:28:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18403:6:181"},"nodeType":"YulFunctionCall","src":"18403:53:181"},"nodeType":"YulExpressionStatement","src":"18403:53:181"},{"nodeType":"YulAssignment","src":"18469:16:181","value":{"name":"tail_3","nodeType":"YulIdentifier","src":"18479:6:181"},"variableNames":[{"name":"tail_2","nodeType":"YulIdentifier","src":"18469:6:181"}]},{"nodeType":"YulAssignment","src":"18498:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"18512:6:181"},{"name":"_4","nodeType":"YulIdentifier","src":"18520:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18508:3:181"},"nodeType":"YulFunctionCall","src":"18508:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"18498:6:181"}]},{"nodeType":"YulAssignment","src":"18536:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18547:3:181"},{"name":"_4","nodeType":"YulIdentifier","src":"18552:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18543:3:181"},"nodeType":"YulFunctionCall","src":"18543:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"18536:3:181"}]}]},"condition":{"arguments":[{"name":"i_1","nodeType":"YulIdentifier","src":"17686:3:181"},{"name":"value1","nodeType":"YulIdentifier","src":"17691:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17683:2:181"},"nodeType":"YulFunctionCall","src":"17683:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"17699:22:181","statements":[{"nodeType":"YulAssignment","src":"17701:18:181","value":{"arguments":[{"name":"i_1","nodeType":"YulIdentifier","src":"17712:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"17717:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17708:3:181"},"nodeType":"YulFunctionCall","src":"17708:11:181"},"variableNames":[{"name":"i_1","nodeType":"YulIdentifier","src":"17701:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"17679:3:181","statements":[]},"src":"17675:890:181"},{"nodeType":"YulAssignment","src":"18574:14:181","value":{"name":"tail_2","nodeType":"YulIdentifier","src":"18582:6:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18574:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18608:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18619:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18604:3:181"},"nodeType":"YulFunctionCall","src":"18604:20:181"},{"name":"value2","nodeType":"YulIdentifier","src":"18626:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18597:6:181"},"nodeType":"YulFunctionCall","src":"18597:36:181"},"nodeType":"YulExpressionStatement","src":"18597:36:181"},{"expression":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"18676:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18688:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18699:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18684:3:181"},"nodeType":"YulFunctionCall","src":"18684:18:181"}],"functionName":{"name":"abi_encode_array_bytes32_calldata","nodeType":"YulIdentifier","src":"18642:33:181"},"nodeType":"YulFunctionCall","src":"18642:61:181"},"nodeType":"YulExpressionStatement","src":"18642:61:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18723:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18734:6:181","type":"","value":"0x0440"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18719:3:181"},"nodeType":"YulFunctionCall","src":"18719:22:181"},{"name":"value4","nodeType":"YulIdentifier","src":"18743:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18712:6:181"},"nodeType":"YulFunctionCall","src":"18712:38:181"},"nodeType":"YulExpressionStatement","src":"18712:38:181"}]},"name":"abi_encode_tuple_t_array$_t_struct$_Proof_$24133_calldata_ptr_$dyn_calldata_ptr_t_bytes32_t_array$_t_bytes32_$32_calldata_ptr_t_uint256__to_t_array$_t_struct$_Proof_$24133_memory_ptr_$dyn_memory_ptr_t_bytes32_t_array$_t_bytes32_$32_memory_ptr_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17263:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"17274:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"17282:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"17290:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"17298:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17306:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17317:4:181","type":""}],"src":"16981:1775:181"},{"body":{"nodeType":"YulBlock","src":"18935:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18952:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18963:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18945:6:181"},"nodeType":"YulFunctionCall","src":"18945:21:181"},"nodeType":"YulExpressionStatement","src":"18945:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18986:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18997:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18982:3:181"},"nodeType":"YulFunctionCall","src":"18982:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19002:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18975:6:181"},"nodeType":"YulFunctionCall","src":"18975:30:181"},"nodeType":"YulExpressionStatement","src":"18975:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19025:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19036:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19021:3:181"},"nodeType":"YulFunctionCall","src":"19021:18:181"},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","kind":"string","nodeType":"YulLiteral","src":"19041:33:181","type":"","value":"ReentrancyGuard: reentrant call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19014:6:181"},"nodeType":"YulFunctionCall","src":"19014:61:181"},"nodeType":"YulExpressionStatement","src":"19014:61:181"},{"nodeType":"YulAssignment","src":"19084:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19096:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19107:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19092:3:181"},"nodeType":"YulFunctionCall","src":"19092:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19084:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18912:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18926:4:181","type":""}],"src":"18761:355:181"},{"body":{"nodeType":"YulBlock","src":"19295:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19312:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19323:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19305:6:181"},"nodeType":"YulFunctionCall","src":"19305:21:181"},"nodeType":"YulExpressionStatement","src":"19305:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19346:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19357:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19342:3:181"},"nodeType":"YulFunctionCall","src":"19342:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19362:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19335:6:181"},"nodeType":"YulFunctionCall","src":"19335:30:181"},"nodeType":"YulExpressionStatement","src":"19335:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19385:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19396:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19381:3:181"},"nodeType":"YulFunctionCall","src":"19381:18:181"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","kind":"string","nodeType":"YulLiteral","src":"19401:31:181","type":"","value":"Address: insufficient balance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19374:6:181"},"nodeType":"YulFunctionCall","src":"19374:59:181"},"nodeType":"YulExpressionStatement","src":"19374:59:181"},{"nodeType":"YulAssignment","src":"19442:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19454:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19465:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19450:3:181"},"nodeType":"YulFunctionCall","src":"19450:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19442:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19272:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19286:4:181","type":""}],"src":"19121:353:181"},{"body":{"nodeType":"YulBlock","src":"19670:14:181","statements":[{"nodeType":"YulAssignment","src":"19672:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"19679:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"19672:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"19654:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"19662:3:181","type":""}],"src":"19479:205:181"},{"body":{"nodeType":"YulBlock","src":"19863:248:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19880:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19891:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19873:6:181"},"nodeType":"YulFunctionCall","src":"19873:21:181"},"nodeType":"YulExpressionStatement","src":"19873:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19914:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19925:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19910:3:181"},"nodeType":"YulFunctionCall","src":"19910:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19930:2:181","type":"","value":"58"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19903:6:181"},"nodeType":"YulFunctionCall","src":"19903:30:181"},"nodeType":"YulExpressionStatement","src":"19903:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19953:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19964:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19949:3:181"},"nodeType":"YulFunctionCall","src":"19949:18:181"},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c2072","kind":"string","nodeType":"YulLiteral","src":"19969:34:181","type":"","value":"Address: unable to send value, r"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19942:6:181"},"nodeType":"YulFunctionCall","src":"19942:62:181"},"nodeType":"YulExpressionStatement","src":"19942:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20024:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20035:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20020:3:181"},"nodeType":"YulFunctionCall","src":"20020:18:181"},{"hexValue":"6563697069656e74206d61792068617665207265766572746564","kind":"string","nodeType":"YulLiteral","src":"20040:28:181","type":"","value":"ecipient may have reverted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20013:6:181"},"nodeType":"YulFunctionCall","src":"20013:56:181"},"nodeType":"YulExpressionStatement","src":"20013:56:181"},{"nodeType":"YulAssignment","src":"20078:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20090:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20101:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20086:3:181"},"nodeType":"YulFunctionCall","src":"20086:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20078:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19840:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19854:4:181","type":""}],"src":"19689:422:181"},{"body":{"nodeType":"YulBlock","src":"20245:175:181","statements":[{"nodeType":"YulAssignment","src":"20255:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20267:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20278:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20263:3:181"},"nodeType":"YulFunctionCall","src":"20263:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20255:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"20290:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20308:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"20313:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"20304:3:181"},"nodeType":"YulFunctionCall","src":"20304:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"20317:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20300:3:181"},"nodeType":"YulFunctionCall","src":"20300:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"20294:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20335:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"20350:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"20358:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20346:3:181"},"nodeType":"YulFunctionCall","src":"20346:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20328:6:181"},"nodeType":"YulFunctionCall","src":"20328:34:181"},"nodeType":"YulExpressionStatement","src":"20328:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20382:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20393:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20378:3:181"},"nodeType":"YulFunctionCall","src":"20378:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20402:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"20410:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20398:3:181"},"nodeType":"YulFunctionCall","src":"20398:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20371:6:181"},"nodeType":"YulFunctionCall","src":"20371:43:181"},"nodeType":"YulExpressionStatement","src":"20371:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20206:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"20217:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"20225:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20236:4:181","type":""}],"src":"20116:304:181"},{"body":{"nodeType":"YulBlock","src":"20599:155:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20616:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20627:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20609:6:181"},"nodeType":"YulFunctionCall","src":"20609:21:181"},"nodeType":"YulExpressionStatement","src":"20609:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20650:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20661:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20646:3:181"},"nodeType":"YulFunctionCall","src":"20646:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20666:1:181","type":"","value":"6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20639:6:181"},"nodeType":"YulFunctionCall","src":"20639:29:181"},"nodeType":"YulExpressionStatement","src":"20639:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20688:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20699:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20684:3:181"},"nodeType":"YulFunctionCall","src":"20684:18:181"},{"hexValue":"216164646564","kind":"string","nodeType":"YulLiteral","src":"20704:8:181","type":"","value":"!added"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20677:6:181"},"nodeType":"YulFunctionCall","src":"20677:36:181"},"nodeType":"YulExpressionStatement","src":"20677:36:181"},{"nodeType":"YulAssignment","src":"20722:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20734:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20745:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20730:3:181"},"nodeType":"YulFunctionCall","src":"20730:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20722:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e11eb83f9b11acb18ab039411915a354a75afc390de576b7a0065bfcb50b4e9b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20576:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20590:4:181","type":""}],"src":"20425:329:181"},{"body":{"nodeType":"YulBlock","src":"20933:154:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20950:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20961:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20943:6:181"},"nodeType":"YulFunctionCall","src":"20943:21:181"},"nodeType":"YulExpressionStatement","src":"20943:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20984:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20995:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20980:3:181"},"nodeType":"YulFunctionCall","src":"20980:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"21000:1:181","type":"","value":"5"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20973:6:181"},"nodeType":"YulFunctionCall","src":"20973:29:181"},"nodeType":"YulExpressionStatement","src":"20973:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21022:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21033:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21018:3:181"},"nodeType":"YulFunctionCall","src":"21018:18:181"},{"hexValue":"6164646564","kind":"string","nodeType":"YulLiteral","src":"21038:7:181","type":"","value":"added"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21011:6:181"},"nodeType":"YulFunctionCall","src":"21011:35:181"},"nodeType":"YulExpressionStatement","src":"21011:35:181"},{"nodeType":"YulAssignment","src":"21055:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21067:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21078:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21063:3:181"},"nodeType":"YulFunctionCall","src":"21063:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21055:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_dedd704501704f7991a32fb105552a4ab47a52c46817293082f14fd934f9f8cc__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20910:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20924:4:181","type":""}],"src":"20759:328:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_bool(value, pos)\n    {\n        mstore(pos, iszero(iszero(value)))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_struct$_ExecuteArgs_$29365_calldata_ptrt_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if slt(sub(dataEnd, _1), 160) { revert(0, 0) }\n        value0 := _1\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_array_address_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        if gt(_1, 0xffffffffffffffff) { panic_error_0x41() }\n        let array_1 := allocate_memory(add(and(add(_1, 0x1f), not(31)), 0x20))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(array_1, _1), 0x20), 0)\n        array := array_1\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_bytes_memory_ptr_$dyn_memory_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let _1 := 0xffffffffffffffff\n        if gt(calldataload(headStart), _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(headStart)), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let _2 := 32\n        let offset := calldataload(add(headStart, _2))\n        if gt(offset, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let _3 := add(headStart, offset_1)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := calldataload(_3)\n        if gt(_4, _1) { panic_error_0x41() }\n        let _5 := shl(5, _4)\n        let dst := allocate_memory(add(_5, _2))\n        let dst_1 := dst\n        mstore(dst, _4)\n        dst := add(dst, _2)\n        let srcEnd := add(add(_3, _5), _2)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_3, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            if gt(calldataload(src), _1) { revert(0, 0) }\n            mstore(dst, abi_decode_bytes(add(add(_3, calldataload(src)), _2), dataEnd))\n            dst := add(dst, _2)\n        }\n        value4 := dst_1\n        value5 := calldataload(add(headStart, 96))\n    }\n    function abi_encode_tuple_t_contract$_ISpokeConnector_$24154__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_contract$_IRootManager_$47888__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_IConnext_$26846__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_array$_t_struct$_Proof_$24133_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 1152) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        value2 := calldataload(add(headStart, 32))\n        let _1 := add(headStart, 1088)\n        if gt(_1, dataEnd) { revert(0, 0) }\n        value3 := add(headStart, 64)\n        value4 := calldataload(_1)\n        value5 := calldataload(add(headStart, 1120))\n    }\n    function abi_encode_tuple_t_stringliteral_61fc3f77ebc090777f567969ad9823cf6334ab888acb385ca72668ec5adbde80__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 5)\n        mstore(add(headStart, 64), \"empty\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_8e7e8fcd400a5d12d3bcb2f74ef1d253cc1ee9f80325b4481ab4dffdf753068f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 8)\n        mstore(add(headStart, 64), \"!relayer\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_encode_uint32(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffff))\n    }\n    function abi_decode_bool(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function calldata_access_bytes_calldata(base_ref, ptr) -> value, length\n    {\n        let rel_offset_of_tail := calldataload(ptr)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n        let value_1 := add(rel_offset_of_tail, base_ref)\n        length := calldataload(value_1)\n        value := add(value_1, 0x20)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        if sgt(value, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function abi_encode_bytes_calldata(start, length, pos) -> end\n    {\n        mstore(pos, length)\n        calldatacopy(add(pos, 0x20), start, length)\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function calldata_access_array_address_dyn_calldata(base_ref, ptr) -> value, length\n    {\n        let rel_offset_of_tail := calldataload(ptr)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n        let value_1 := add(rel_offset_of_tail, base_ref)\n        length := calldataload(value_1)\n        value := add(value_1, 0x20)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        if sgt(value, sub(calldatasize(), shl(5, length))) { revert(0, 0) }\n    }\n    function abi_encode_array_address_dyn_calldata(value, length, pos) -> end\n    {\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := value\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(abi_decode_address(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_array_bytes_calldata_dyn_calldata(value, length, pos) -> end\n    {\n        mstore(pos, length)\n        let _1 := 0x20\n        let updated_pos := add(pos, _1)\n        let pos_1 := updated_pos\n        pos := updated_pos\n        let tail := add(pos_1, shl(5, length))\n        let srcPtr := value\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, sub(tail, pos_1))\n            let elementValue0, elementValue1 := calldata_access_bytes_calldata(value, srcPtr)\n            tail := abi_encode_bytes_calldata(elementValue0, elementValue1, tail)\n            srcPtr := add(srcPtr, _1)\n            pos := add(pos, _1)\n        }\n        end := tail\n    }\n    function abi_encode_tuple_t_struct$_ExecuteArgs_$29365_calldata_ptr__to_t_struct$_ExecuteArgs_$29365_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let rel_offset_of_tail := calldataload(value0)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), value0), not(414)))) { revert(0, 0) }\n        let value := add(rel_offset_of_tail, value0)\n        mstore(add(headStart, 32), 0xa0)\n        abi_encode_uint32(abi_decode_uint32(value), add(headStart, 192))\n        let memberValue0 := abi_decode_uint32(add(value, 32))\n        abi_encode_uint32(memberValue0, add(headStart, 224))\n        let memberValue0_1 := abi_decode_uint32(add(value, 0x40))\n        let _1 := 256\n        abi_encode_uint32(memberValue0_1, add(headStart, _1))\n        let memberValue0_2 := abi_decode_address(add(value, 0x60))\n        let _2 := 288\n        abi_encode_address(memberValue0_2, add(headStart, _2))\n        let memberValue0_3 := abi_decode_address(add(value, 0x80))\n        let _3 := 320\n        abi_encode_address(memberValue0_3, add(headStart, _3))\n        let memberValue0_4 := abi_decode_bool(add(value, 0xa0))\n        let _4 := 352\n        abi_encode_bool(memberValue0_4, add(headStart, _4))\n        let memberValue0_5, memberValue1 := calldata_access_bytes_calldata(value, add(value, 192))\n        let _5 := 0x01a0\n        let _6 := 384\n        mstore(add(headStart, _6), _5)\n        let tail_1 := abi_encode_bytes_calldata(memberValue0_5, memberValue1, add(headStart, 608))\n        mstore(add(headStart, _5), calldataload(add(value, 224)))\n        let memberValue0_6 := abi_decode_address(add(value, _1))\n        abi_encode_address(memberValue0_6, add(headStart, 448))\n        mstore(add(headStart, 480), calldataload(add(value, _2)))\n        mstore(add(headStart, 512), calldataload(add(value, _3)))\n        mstore(add(headStart, 544), calldataload(add(value, _4)))\n        mstore(add(headStart, 576), calldataload(add(value, _6)))\n        let memberValue0_7, memberValue1_1 := calldata_access_array_address_dyn_calldata(value0, add(value0, 32))\n        let _7 := not(31)\n        mstore(add(headStart, 0x40), add(sub(tail_1, headStart), _7))\n        let tail_2 := abi_encode_array_address_dyn_calldata(memberValue0_7, memberValue1_1, tail_1)\n        let memberValue0_8, memberValue1_2 := calldata_access_array_address_dyn_calldata(value0, add(value0, 0x40))\n        mstore(add(headStart, 0x60), add(sub(tail_2, headStart), _7))\n        let tail_3 := abi_encode_array_bytes_calldata_dyn_calldata(memberValue0_8, memberValue1_2, tail_2)\n        let memberValue0_9 := abi_decode_address(add(value0, 0x60))\n        abi_encode_address(memberValue0_9, add(headStart, 0x80))\n        let memberValue0_10, memberValue1_3 := calldata_access_bytes_calldata(value0, add(value0, 0x80))\n        mstore(add(headStart, 0xa0), add(sub(tail_3, headStart), _7))\n        tail := abi_encode_bytes_calldata(memberValue0_10, memberValue1_3, tail_3)\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_array_bytes_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        let updated_pos := add(pos, _1)\n        let pos_1 := updated_pos\n        pos := updated_pos\n        let tail := add(pos_1, shl(5, length))\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, sub(tail, pos_1))\n            tail := abi_encode_bytes(mload(srcPtr), tail)\n            srcPtr := add(srcPtr, _1)\n            pos := add(pos, _1)\n        }\n        end := tail\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_calldata_ptr_t_array$_t_uint256_$dyn_calldata_ptr_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 96)\n        mstore(headStart, 96)\n        let pos := tail_1\n        mstore(tail_1, value1)\n        pos := add(headStart, 128)\n        let srcPtr := value0\n        let i := 0\n        for { } lt(i, value1) { i := add(i, 1) }\n        {\n            mstore(pos, and(abi_decode_address(srcPtr), sub(shl(160, 1), 1)))\n            let _1 := 0x20\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        mstore(add(headStart, 0x20), sub(pos, headStart))\n        mstore(pos, value3)\n        if gt(value3, sub(shl(251, 1), 1)) { revert(0, 0) }\n        let length := shl(5, value3)\n        calldatacopy(add(pos, 0x20), value2, length)\n        let _2 := add(pos, length)\n        mstore(add(headStart, 64), add(sub(_2, headStart), 0x20))\n        tail := abi_encode_array_bytes_dyn(value4, add(_2, 0x20))\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_array_bytes32_calldata(start, pos)\n    {\n        calldatacopy(pos, start, 0x0400)\n    }\n    function abi_encode_tuple_t_array$_t_struct$_Proof_$24133_calldata_ptr_$dyn_calldata_ptr_t_bytes32_t_array$_t_bytes32_$32_calldata_ptr_t_uint256__to_t_array$_t_struct$_Proof_$24133_memory_ptr_$dyn_memory_ptr_t_bytes32_t_array$_t_bytes32_$32_memory_ptr_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 1120\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        mstore(tail_1, value1)\n        let _2 := 1152\n        pos := add(headStart, _2)\n        let tail_2 := add(add(headStart, shl(5, value1)), _2)\n        let srcPtr := value0\n        let i := 0\n        let i_1 := i\n        for { } lt(i_1, value1) { i_1 := add(i_1, 1) }\n        {\n            mstore(pos, add(sub(tail_2, headStart), not(1151)))\n            let rel_offset_of_tail := calldataload(srcPtr)\n            if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), value0), not(1086)))) { revert(i, i) }\n            let value := add(rel_offset_of_tail, value0)\n            let _3 := 0x0440\n            let memberValue0, memberValue1 := calldata_access_bytes_calldata(value, value)\n            mstore(tail_2, _3)\n            let tail_3 := abi_encode_bytes_calldata(memberValue0, memberValue1, add(tail_2, _3))\n            let _4 := 0x20\n            calldatacopy(add(tail_2, _4), add(value, _4), 0x0400)\n            let _5 := 0x0420\n            mstore(add(tail_2, _5), calldataload(add(value, _5)))\n            tail_2 := tail_3\n            srcPtr := add(srcPtr, _4)\n            pos := add(pos, _4)\n        }\n        tail := tail_2\n        mstore(add(headStart, 0x20), value2)\n        abi_encode_array_bytes32_calldata(value3, add(headStart, 64))\n        mstore(add(headStart, 0x0440), value4)\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: insufficient balance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    { end := pos }\n    function abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 58)\n        mstore(add(headStart, 64), \"Address: unable to send value, r\")\n        mstore(add(headStart, 96), \"ecipient may have reverted\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_e11eb83f9b11acb18ab039411915a354a75afc390de576b7a0065bfcb50b4e9b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 6)\n        mstore(add(headStart, 64), \"!added\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_dedd704501704f7991a32fb105552a4ab47a52c46817293082f14fd934f9f8cc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 5)\n        mstore(add(headStart, 64), \"added\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052600436106101855760003560e01c80639f645a03116100d1578063d232c2201161008a578063dd39f00d11610064578063dd39f00d14610497578063de4b0548146104b7578063e79457f1146104d7578063f0a67eba146104f757600080fd5b8063d232c22014610438578063d9ef0bee14610457578063db2056351461047757600080fd5b80639f645a0314610385578063a42dce80146103a5578063b1f8100d146103c5578063c415b95c146103e5578063c5b350df14610405578063d1851c921461041a57600080fd5b80636a42b8f81161013e5780638da5cb5b116101185780638da5cb5b146103075780638efed127146103255780639a2652db146103455780639cadce001461036557600080fd5b80636a42b8f8146102a45780636eba787f146102ba578063715018a6146102f257600080fd5b80632f55b98d146101c95780633ccfd60b1461020e5780633cf52ffb146102255780634d6f2013146102445780635e21966a1461026457806360f0a5ac1461028457600080fd5b366101c457604080513481524760208201527f063d07ee72a7483b8e07ca09054bb686775c5c030f945dde3823a5257a0a93eb910160405180910390a1005b600080fd5b3480156101d557600080fd5b506101f96101e4366004611359565b60086020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561021a57600080fd5b50610223610517565b005b34801561023157600080fd5b506002545b604051908152602001610205565b34801561025057600080fd5b5061022361025f366004611359565b610588565b34801561027057600080fd5b5061022361027f366004611359565b6105f0565b34801561029057600080fd5b5061022361029f366004611359565b61064b565b3480156102b057600080fd5b5062093a80610236565b3480156102c657600080fd5b506004546102da906001600160a01b031681565b6040516001600160a01b039091168152602001610205565b3480156102fe57600080fd5b506102236106a6565b34801561031357600080fd5b506000546001600160a01b03166102da565b34801561033157600080fd5b5061023661034036600461137b565b610758565b34801561035157600080fd5b506102236103603660046114c8565b61081d565b34801561037157600080fd5b506007546102da906001600160a01b031681565b34801561039157600080fd5b506102236103a0366004611359565b610952565b3480156103b157600080fd5b506102236103c0366004611359565b6109ad565b3480156103d157600080fd5b506102236103e0366004611359565b610a08565b3480156103f157600080fd5b506005546102da906001600160a01b031681565b34801561041157600080fd5b50610223610aa9565b34801561042657600080fd5b506001546001600160a01b03166102da565b34801561044457600080fd5b506000546001600160a01b0316156101f9565b34801561046357600080fd5b506102236104723660046115e2565b610b19565b34801561048357600080fd5b506009546102da906001600160a01b031681565b3480156104a357600080fd5b506102236104b2366004611359565b610bf9565b3480156104c357600080fd5b506006546102da906001600160a01b031681565b3480156104e357600080fd5b506102236104f2366004611630565b610c54565b34801561050357600080fd5b50610223610512366004611359565b610d08565b6000546001600160a01b03163314610542576040516311a8a1bb60e31b815260040160405180910390fd5b61054a610d63565b476105553382610dbc565b60408051828152476020820152600080516020611cc9833981519152910160405180910390a1506105866001600355565b565b6000546001600160a01b031633146105b3576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166105e35760405162461bcd60e51b81526004016105da906116a8565b60405180910390fd5b6105ec82610ed5565b5050565b6000546001600160a01b0316331461061b576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166106425760405162461bcd60e51b81526004016105da906116a8565b6105ec82610f3e565b6000546001600160a01b03163314610676576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b03811661069d5760405162461bcd60e51b81526004016105da906116a8565b6105ec82610fa7565b6000546001600160a01b031633146106d1576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426106e391906116dd565b11610701576040516324e0285f60e21b815260040160405180910390fd5b60025460000361072457604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b03161561074e576040516323295ef960e01b815260040160405180910390fd5b6105866000611050565b3360009081526008602052604081205460ff166107875760405162461bcd60e51b81526004016105da906116f0565b61078f610d63565b6006546040516331f1f3e960e11b81526001600160a01b03909116906363e3e7d2906107bf908690600401611892565b6020604051808303816000875af11580156107de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108029190611a85565b905061080d826110b5565b6108176001600355565b92915050565b3360009081526008602052604090205460ff1661084c5760405162461bcd60e51b81526004016105da906116f0565b610854610d63565b600085815b818163ffffffff16101561089b5786868263ffffffff1681811061087f5761087f611a9e565b90506020020135836108919190611ab4565b9250600101610859565b5060095460405163412e12db60e01b81526001600160a01b039091169063412e12db9084906108d6908c908c908c908c908c90600401611b55565b6000604051808303818588803b1580156108ef57600080fd5b505af1158015610903573d6000803e3d6000fd5b505060408051868152476020820152600080516020611cc9833981519152945001915061092d9050565b60405180910390a161093e836110b5565b505061094a6001600355565b505050505050565b6000546001600160a01b0316331461097d576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166109a45760405162461bcd60e51b81526004016105da906116a8565b6105ec8261110f565b6000546001600160a01b031633146109d8576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166109ff5760405162461bcd60e51b81526004016105da906116a8565b6105ec82611178565b6000546001600160a01b03163314610a33576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610a51575060025415155b15610a6f576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b03808316911603610a9d57604051634a2fb73f60e11b815260040160405180910390fd5b610aa6816111e1565b50565b6001546001600160a01b03163314610ad4576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442610ae691906116dd565b11610b04576040516324e0285f60e21b815260040160405180910390fd5b600154610586906001600160a01b0316611050565b3360009081526008602052604090205460ff16610b485760405162461bcd60e51b81526004016105da906116f0565b610b50610d63565b600754604051630aec6b9f60e21b81526001600160a01b0390911690632bb1ae7c908490610b82908790600401611be9565b6000604051808303818588803b158015610b9b57600080fd5b505af1158015610baf573d6000803e3d6000fd5b505060408051868152476020820152600080516020611cc98339815191529450019150610bd99050565b60405180910390a1610bea816110b5565b610bf46001600355565b505050565b6000546001600160a01b03163314610c24576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b038116610c4b5760405162461bcd60e51b81526004016105da906116a8565b6105ec8261122f565b3360009081526008602052604090205460ff16610c835760405162461bcd60e51b81526004016105da906116f0565b610c8b610d63565b60075460405163508a109b60e01b81526001600160a01b039091169063508a109b90610cc39089908990899089908990600401611c06565b600060405180830381600087803b158015610cdd57600080fd5b505af1158015610cf1573d6000803e3d6000fd5b50505050610cfe816110b5565b61094a6001600355565b6000546001600160a01b03163314610d33576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b038116610d5a5760405162461bcd60e51b81526004016105da906116a8565b6105ec826112d4565b600260035403610db55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105da565b6002600355565b80471015610e0c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016105da565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610e59576040519150601f19603f3d011682016040523d82523d6000602084013e610e5e565b606091505b5050905080610bf45760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016105da565b600654604080516001600160a01b03808516825290921660208301527f87539ad41983c0ecff8f321db8edf4dd9e830593562770bdacdda085b83e3bb2910160405180910390a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b600454604080516001600160a01b03808516825290921660208301527f5db4a067a1f787c3269642464a2a1560868b50b0873e7dec83939ae2359f6128910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526008602052604090205460ff16610ff85760405162461bcd60e51b815260206004820152600660248201526508585919195960d21b60448201526064016105da565b6001600160a01b038116600081815260086020908152604091829020805460ff1916905590519182527f10e1f7ce9fd7d1b90a66d13a2ab3cb8dd7f29f3f8d520b143b063ccfbab6906b91015b60405180910390a150565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b6004546001600160a01b031633036110e2576005546110dd906001600160a01b031682610dbc565b6110ec565b6110ec3382610dbc565b60408051828152476020820152600080516020611cc98339815191529101611045565b600754604080516001600160a01b03808516825290921660208301527f66948d99d8431a8416af2202bc301823b7cdd87beb9bddaa274aedac0611a5fd910160405180910390a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b600554604080516001600160a01b03808516825290921660208301527f649c5e3d0ed183894196148e193af316452b0037e77d2ff0fef23b7dc722bed0910160405180910390a1600580546001600160a01b0319166001600160a01b0392909216919091179055565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b6001600160a01b03811660009081526008602052604090205460ff16156112805760405162461bcd60e51b8152602060048201526005602482015264185919195960da1b60448201526064016105da565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f03580ee9f53a62b7cb409a2cb56f9be87747dd15017afc5cef6eef321e4fb2c59101611045565b600954604080516001600160a01b03808516825290921660208301527f3124eaf4f16c6ddd81951200c6d8f65d5800753bef06584bd672c8b22c76b487910160405180910390a1600980546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461135457600080fd5b919050565b60006020828403121561136b57600080fd5b6113748261133d565b9392505050565b6000806040838503121561138e57600080fd5b823567ffffffffffffffff8111156113a557600080fd5b830160a081860312156113b757600080fd5b946020939093013593505050565b60008083601f8401126113d757600080fd5b50813567ffffffffffffffff8111156113ef57600080fd5b6020830191508360208260051b850101111561140a57600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561145057611450611411565b604052919050565b600082601f83011261146957600080fd5b813567ffffffffffffffff81111561148357611483611411565b611496601f8201601f1916602001611427565b8181528460208386010111156114ab57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080608087890312156114e157600080fd5b67ffffffffffffffff80883511156114f857600080fd5b6115058989358a016113c5565b90975095506020888101358281111561151d57600080fd5b6115298b828c016113c5565b90975095505060408901358281111561154157600080fd5b8901601f81018b1361155257600080fd5b80358381111561156457611564611411565b8060051b611573848201611427565b918252828101840191848101908e84111561158d57600080fd5b85850192505b838310156115c75786833511156115a957600080fd5b6115b88f878535880101611458565b82529185019190850190611593565b80985050505050505050606087013590509295509295509295565b6000806000606084860312156115f757600080fd5b833567ffffffffffffffff81111561160e57600080fd5b61161a86828701611458565b9660208601359650604090950135949350505050565b600080600080600080610480878903121561164a57600080fd5b863567ffffffffffffffff81111561166157600080fd5b61166d89828a016113c5565b9097509550506020870135935061044087018881111561168c57600080fd5b9598949750929560408101953594610460909101359350915050565b602080825260059082015264656d70747960d81b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610817576108176116c7565b60208082526008908201526710b932b630bcb2b960c11b604082015260600190565b803563ffffffff8116811461135457600080fd5b8035801515811461135457600080fd5b6000808335601e1984360301811261174d57600080fd5b830160208101925035905067ffffffffffffffff81111561176d57600080fd5b80360382131561140a57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e198436030181126117bc57600080fd5b830160208101925035905067ffffffffffffffff8111156117dc57600080fd5b8060051b360382131561140a57600080fd5b8183526000602080850194508260005b8581101561182a576001600160a01b036118178361133d565b16875295820195908201906001016117fe565b509495945050505050565b81835260006020808501808196508560051b810191508460005b878110156118855782840389526118668288611736565b61187186828461177c565b9a87019a955050509084019060010161184f565b5091979650505050505050565b602081526000823561019e198436030181126118ad57600080fd5b60a0602084015283016118d060c084016118c683611712565b63ffffffff169052565b6118dc60208201611712565b63ffffffff1660e08401526118f360408201611712565b6101006119078186018363ffffffff169052565b6119136060840161133d565b915061012061192c818701846001600160a01b03169052565b6119386080850161133d565b9250610140611951818801856001600160a01b03169052565b61195d60a08601611726565b935061016061196f8189018615159052565b61197c60c0870187611736565b95506101a061018081818c01526119986102608c01898561177c565b975060e0890135828c01526119ae878a0161133d565b6001600160a01b03166101c08c0152948801356101e08b0152505090850135610200880152840135610220870152830135610240860152506119f360208601866117a5565b9250601f1980868403016040870152611a0d8385846117ee565b9350611a1c60408801886117a5565b9350915080868503016060870152611a35848484611835565b9350611a436060880161133d565b6001600160a01b03811660808801529250611a616080880188611736565b93509150808685030160a087015250611a7b83838361177c565b9695505050505050565b600060208284031215611a9757600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b80820180821115610817576108176116c7565b6000815180845260005b81811015611aed57602081850181015186830182015201611ad1565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501808196508360051b8101915082860160005b85811015611885578284038952611b43848351611ac7565b98850198935090840190600101611b2b565b6060808252810185905260008660808301825b88811015611b96576001600160a01b03611b818461133d565b16825260209283019290910190600101611b68565b5083810360208501528581526001600160fb1b03861115611bb657600080fd5b8560051b9150818760208301370182810360209081016040850152611bdd90820185611b0d565b98975050505050505050565b6020815260006113746020830184611ac7565b6104008183375050565b6104608082528101859052600061048080830190600588901b8401018883805b8a811015611c9c5786840361047f190185528235368d900361043e19018112611c4d578283fd5b8c01610440611c5c8280611736565b828852611c6c838901828461177c565b92505050602061040081840182890137610420928301359690920195909552948501949290920191600101611c26565b5050508092505050846020830152611cb76040830185611bfc565b82610440830152969550505050505056fe9826a73d0fd7186bda6a15195ac17571869cab151bfe9a8fed3f9407fffe5b18a264697066735822122014f71e96141f67772d3ba2104742e471ad55639e79fa6fd5cad0bc2b6637fd8c64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x185 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9F645A03 GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0xD232C220 GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xDD39F00D GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xDD39F00D EQ PUSH2 0x497 JUMPI DUP1 PUSH4 0xDE4B0548 EQ PUSH2 0x4B7 JUMPI DUP1 PUSH4 0xE79457F1 EQ PUSH2 0x4D7 JUMPI DUP1 PUSH4 0xF0A67EBA EQ PUSH2 0x4F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD232C220 EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0xD9EF0BEE EQ PUSH2 0x457 JUMPI DUP1 PUSH4 0xDB205635 EQ PUSH2 0x477 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9F645A03 EQ PUSH2 0x385 JUMPI DUP1 PUSH4 0xA42DCE80 EQ PUSH2 0x3A5 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0xC415B95C EQ PUSH2 0x3E5 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x405 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x41A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6A42B8F8 GT PUSH2 0x13E JUMPI DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x118 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x307 JUMPI DUP1 PUSH4 0x8EFED127 EQ PUSH2 0x325 JUMPI DUP1 PUSH4 0x9A2652DB EQ PUSH2 0x345 JUMPI DUP1 PUSH4 0x9CADCE00 EQ PUSH2 0x365 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x2A4 JUMPI DUP1 PUSH4 0x6EBA787F EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x2F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F55B98D EQ PUSH2 0x1C9 JUMPI DUP1 PUSH4 0x3CCFD60B EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x225 JUMPI DUP1 PUSH4 0x4D6F2013 EQ PUSH2 0x244 JUMPI DUP1 PUSH4 0x5E21966A EQ PUSH2 0x264 JUMPI DUP1 PUSH4 0x60F0A5AC EQ PUSH2 0x284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x1C4 JUMPI PUSH1 0x40 DUP1 MLOAD CALLVALUE DUP2 MSTORE SELFBALANCE PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x63D07EE72A7483B8E07CA09054BB686775C5C030F945DDE3823A5257A0A93EB SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F9 PUSH2 0x1E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x1359 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x517 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x205 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x250 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x25F CALLDATASIZE PUSH1 0x4 PUSH2 0x1359 JUMP JUMPDEST PUSH2 0x588 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x270 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x27F CALLDATASIZE PUSH1 0x4 PUSH2 0x1359 JUMP JUMPDEST PUSH2 0x5F0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x290 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x29F CALLDATASIZE PUSH1 0x4 PUSH2 0x1359 JUMP JUMPDEST PUSH2 0x64B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x236 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x2DA SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x205 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x6A6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x331 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x236 PUSH2 0x340 CALLDATASIZE PUSH1 0x4 PUSH2 0x137B JUMP JUMPDEST PUSH2 0x758 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x360 CALLDATASIZE PUSH1 0x4 PUSH2 0x14C8 JUMP JUMPDEST PUSH2 0x81D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x371 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x7 SLOAD PUSH2 0x2DA SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x3A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1359 JUMP JUMPDEST PUSH2 0x952 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x3C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1359 JUMP JUMPDEST PUSH2 0x9AD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x3E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1359 JUMP JUMPDEST PUSH2 0xA08 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x5 SLOAD PUSH2 0x2DA SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x411 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0xAA9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x426 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x444 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x1F9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x463 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x472 CALLDATASIZE PUSH1 0x4 PUSH2 0x15E2 JUMP JUMPDEST PUSH2 0xB19 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x483 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x9 SLOAD PUSH2 0x2DA SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x4B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x1359 JUMP JUMPDEST PUSH2 0xBF9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x6 SLOAD PUSH2 0x2DA SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x4F2 CALLDATASIZE PUSH1 0x4 PUSH2 0x1630 JUMP JUMPDEST PUSH2 0xC54 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x503 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x512 CALLDATASIZE PUSH1 0x4 PUSH2 0x1359 JUMP JUMPDEST PUSH2 0xD08 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x542 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x54A PUSH2 0xD63 JUMP JUMPDEST SELFBALANCE PUSH2 0x555 CALLER DUP3 PUSH2 0xDBC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SELFBALANCE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1CC9 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH2 0x586 PUSH1 0x1 PUSH1 0x3 SSTORE JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5B3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x5E3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16A8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5EC DUP3 PUSH2 0xED5 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x61B JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x642 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16A8 JUMP JUMPDEST PUSH2 0x5EC DUP3 PUSH2 0xF3E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x676 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x69D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16A8 JUMP JUMPDEST PUSH2 0x5EC DUP3 PUSH2 0xFA7 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x6D1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x6E3 SWAP2 SWAP1 PUSH2 0x16DD JUMP JUMPDEST GT PUSH2 0x701 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x724 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x74E JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x586 PUSH1 0x0 PUSH2 0x1050 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x787 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16F0 JUMP JUMPDEST PUSH2 0x78F PUSH2 0xD63 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH4 0x31F1F3E9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x63E3E7D2 SWAP1 PUSH2 0x7BF SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x1892 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7DE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x802 SWAP2 SWAP1 PUSH2 0x1A85 JUMP JUMPDEST SWAP1 POP PUSH2 0x80D DUP3 PUSH2 0x10B5 JUMP JUMPDEST PUSH2 0x817 PUSH1 0x1 PUSH1 0x3 SSTORE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x84C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16F0 JUMP JUMPDEST PUSH2 0x854 PUSH2 0xD63 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0x89B JUMPI DUP7 DUP7 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0x87F JUMPI PUSH2 0x87F PUSH2 0x1A9E JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP4 PUSH2 0x891 SWAP2 SWAP1 PUSH2 0x1AB4 JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x859 JUMP JUMPDEST POP PUSH1 0x9 SLOAD PUSH1 0x40 MLOAD PUSH4 0x412E12DB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x412E12DB SWAP1 DUP5 SWAP1 PUSH2 0x8D6 SWAP1 DUP13 SWAP1 DUP13 SWAP1 DUP13 SWAP1 DUP13 SWAP1 DUP13 SWAP1 PUSH1 0x4 ADD PUSH2 0x1B55 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x903 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP7 DUP2 MSTORE SELFBALANCE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1CC9 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP5 POP ADD SWAP2 POP PUSH2 0x92D SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x93E DUP4 PUSH2 0x10B5 JUMP JUMPDEST POP POP PUSH2 0x94A PUSH1 0x1 PUSH1 0x3 SSTORE JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x97D JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x9A4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16A8 JUMP JUMPDEST PUSH2 0x5EC DUP3 PUSH2 0x110F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9D8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x9FF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16A8 JUMP JUMPDEST PUSH2 0x5EC DUP3 PUSH2 0x1178 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA33 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0xA51 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xA6F JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0xA9D JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xAA6 DUP2 PUSH2 0x11E1 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xAD4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0xAE6 SWAP2 SWAP1 PUSH2 0x16DD JUMP JUMPDEST GT PUSH2 0xB04 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x586 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1050 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xB48 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16F0 JUMP JUMPDEST PUSH2 0xB50 PUSH2 0xD63 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0xAEC6B9F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x2BB1AE7C SWAP1 DUP5 SWAP1 PUSH2 0xB82 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x1BE9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xBAF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP7 DUP2 MSTORE SELFBALANCE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1CC9 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP5 POP ADD SWAP2 POP PUSH2 0xBD9 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0xBEA DUP2 PUSH2 0x10B5 JUMP JUMPDEST PUSH2 0xBF4 PUSH1 0x1 PUSH1 0x3 SSTORE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC24 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xC4B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16A8 JUMP JUMPDEST PUSH2 0x5EC DUP3 PUSH2 0x122F JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xC83 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16F0 JUMP JUMPDEST PUSH2 0xC8B PUSH2 0xD63 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD PUSH4 0x508A109B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x508A109B SWAP1 PUSH2 0xCC3 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x1C06 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xCF1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0xCFE DUP2 PUSH2 0x10B5 JUMP JUMPDEST PUSH2 0x94A PUSH1 0x1 PUSH1 0x3 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xD33 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xD5A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5DA SWAP1 PUSH2 0x16A8 JUMP JUMPDEST PUSH2 0x5EC DUP3 PUSH2 0x12D4 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x3 SLOAD SUB PUSH2 0xDB5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5DA JUMP JUMPDEST PUSH1 0x2 PUSH1 0x3 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0xE0C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5DA JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xE59 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xE5E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0xBF4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x5DA JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x87539AD41983C0ECFF8F321DB8EDF4DD9E830593562770BDACDDA085B83E3BB2 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x5DB4A067A1F787C3269642464A2A1560868B50B0873E7DEC83939AE2359F6128 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xFF8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x85859191959 PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5DA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x10E1F7CE9FD7D1B90A66D13A2AB3CB8DD7F29F3F8D520B143B063CCFBAB6906B SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0x10E2 JUMPI PUSH1 0x5 SLOAD PUSH2 0x10DD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH2 0xDBC JUMP JUMPDEST PUSH2 0x10EC JUMP JUMPDEST PUSH2 0x10EC CALLER DUP3 PUSH2 0xDBC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SELFBALANCE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x1CC9 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 ADD PUSH2 0x1045 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x66948D99D8431A8416AF2202BC301823B7CDD87BEB9BDDAA274AEDAC0611A5FD SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x649C5E3D0ED183894196148E193AF316452B0037E77D2FF0FEF23B7DC722BED0 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1280 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x5 PUSH1 0x24 DUP3 ADD MSTORE PUSH5 0x1859191959 PUSH1 0xDA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5DA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x3580EE9F53A62B7CB409A2CB56F9BE87747DD15017AFC5CEF6EEF321E4FB2C5 SWAP2 ADD PUSH2 0x1045 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND DUP3 MSTORE SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x3124EAF4F16C6DDD81951200C6D8F65D5800753BEF06584BD672C8B22C76B487 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1354 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x136B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1374 DUP3 PUSH2 0x133D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x138E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x13A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0xA0 DUP2 DUP7 SUB SLT ISZERO PUSH2 0x13B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x13D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x13EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x140A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1450 JUMPI PUSH2 0x1450 PUSH2 0x1411 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1469 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1483 JUMPI PUSH2 0x1483 PUSH2 0x1411 JUMP JUMPDEST PUSH2 0x1496 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x1427 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x14AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x14E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP9 CALLDATALOAD GT ISZERO PUSH2 0x14F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1505 DUP10 DUP10 CALLDATALOAD DUP11 ADD PUSH2 0x13C5 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0x20 DUP9 DUP2 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x151D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1529 DUP12 DUP3 DUP13 ADD PUSH2 0x13C5 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP POP PUSH1 0x40 DUP10 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x1541 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 ADD PUSH1 0x1F DUP2 ADD DUP12 SGT PUSH2 0x1552 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD DUP4 DUP2 GT ISZERO PUSH2 0x1564 JUMPI PUSH2 0x1564 PUSH2 0x1411 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL PUSH2 0x1573 DUP5 DUP3 ADD PUSH2 0x1427 JUMP JUMPDEST SWAP2 DUP3 MSTORE DUP3 DUP2 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP15 DUP5 GT ISZERO PUSH2 0x158D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 DUP6 ADD SWAP3 POP JUMPDEST DUP4 DUP4 LT ISZERO PUSH2 0x15C7 JUMPI DUP7 DUP4 CALLDATALOAD GT ISZERO PUSH2 0x15A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x15B8 DUP16 DUP8 DUP6 CALLDATALOAD DUP9 ADD ADD PUSH2 0x1458 JUMP JUMPDEST DUP3 MSTORE SWAP2 DUP6 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 PUSH2 0x1593 JUMP JUMPDEST DUP1 SWAP9 POP POP POP POP POP POP POP POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x15F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x160E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x161A DUP7 DUP3 DUP8 ADD PUSH2 0x1458 JUMP JUMPDEST SWAP7 PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 SWAP1 SWAP6 ADD CALLDATALOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x480 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x164A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1661 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x166D DUP10 DUP3 DUP11 ADD PUSH2 0x13C5 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH2 0x440 DUP8 ADD DUP9 DUP2 GT ISZERO PUSH2 0x168C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 PUSH1 0x40 DUP2 ADD SWAP6 CALLDATALOAD SWAP5 PUSH2 0x460 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x5 SWAP1 DUP3 ADD MSTORE PUSH5 0x656D707479 PUSH1 0xD8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x817 JUMPI PUSH2 0x817 PUSH2 0x16C7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x8 SWAP1 DUP3 ADD MSTORE PUSH8 0x10B932B630BCB2B9 PUSH1 0xC1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1354 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1354 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x174D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x176D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x140A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 DUP3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x17BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x17DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x5 SHL CALLDATASIZE SUB DUP3 SGT ISZERO PUSH2 0x140A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP3 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x182A JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1817 DUP4 PUSH2 0x133D JUMP JUMPDEST AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x17FE JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP6 ADD DUP1 DUP2 SWAP7 POP DUP6 PUSH1 0x5 SHL DUP2 ADD SWAP2 POP DUP5 PUSH1 0x0 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0x1885 JUMPI DUP3 DUP5 SUB DUP10 MSTORE PUSH2 0x1866 DUP3 DUP9 PUSH2 0x1736 JUMP JUMPDEST PUSH2 0x1871 DUP7 DUP3 DUP5 PUSH2 0x177C JUMP JUMPDEST SWAP11 DUP8 ADD SWAP11 SWAP6 POP POP POP SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x184F JUMP JUMPDEST POP SWAP2 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x19E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x18AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xA0 PUSH1 0x20 DUP5 ADD MSTORE DUP4 ADD PUSH2 0x18D0 PUSH1 0xC0 DUP5 ADD PUSH2 0x18C6 DUP4 PUSH2 0x1712 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x18DC PUSH1 0x20 DUP3 ADD PUSH2 0x1712 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x18F3 PUSH1 0x40 DUP3 ADD PUSH2 0x1712 JUMP JUMPDEST PUSH2 0x100 PUSH2 0x1907 DUP2 DUP7 ADD DUP4 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x1913 PUSH1 0x60 DUP5 ADD PUSH2 0x133D JUMP JUMPDEST SWAP2 POP PUSH2 0x120 PUSH2 0x192C DUP2 DUP8 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x1938 PUSH1 0x80 DUP6 ADD PUSH2 0x133D JUMP JUMPDEST SWAP3 POP PUSH2 0x140 PUSH2 0x1951 DUP2 DUP9 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x195D PUSH1 0xA0 DUP7 ADD PUSH2 0x1726 JUMP JUMPDEST SWAP4 POP PUSH2 0x160 PUSH2 0x196F DUP2 DUP10 ADD DUP7 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x197C PUSH1 0xC0 DUP8 ADD DUP8 PUSH2 0x1736 JUMP JUMPDEST SWAP6 POP PUSH2 0x1A0 PUSH2 0x180 DUP2 DUP2 DUP13 ADD MSTORE PUSH2 0x1998 PUSH2 0x260 DUP13 ADD DUP10 DUP6 PUSH2 0x177C JUMP JUMPDEST SWAP8 POP PUSH1 0xE0 DUP10 ADD CALLDATALOAD DUP3 DUP13 ADD MSTORE PUSH2 0x19AE DUP8 DUP11 ADD PUSH2 0x133D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1C0 DUP13 ADD MSTORE SWAP5 DUP9 ADD CALLDATALOAD PUSH2 0x1E0 DUP12 ADD MSTORE POP POP SWAP1 DUP6 ADD CALLDATALOAD PUSH2 0x200 DUP9 ADD MSTORE DUP5 ADD CALLDATALOAD PUSH2 0x220 DUP8 ADD MSTORE DUP4 ADD CALLDATALOAD PUSH2 0x240 DUP7 ADD MSTORE POP PUSH2 0x19F3 PUSH1 0x20 DUP7 ADD DUP7 PUSH2 0x17A5 JUMP JUMPDEST SWAP3 POP PUSH1 0x1F NOT DUP1 DUP7 DUP5 SUB ADD PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x1A0D DUP4 DUP6 DUP5 PUSH2 0x17EE JUMP JUMPDEST SWAP4 POP PUSH2 0x1A1C PUSH1 0x40 DUP9 ADD DUP9 PUSH2 0x17A5 JUMP JUMPDEST SWAP4 POP SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x1A35 DUP5 DUP5 DUP5 PUSH2 0x1835 JUMP JUMPDEST SWAP4 POP PUSH2 0x1A43 PUSH1 0x60 DUP9 ADD PUSH2 0x133D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x80 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x1A61 PUSH1 0x80 DUP9 ADD DUP9 PUSH2 0x1736 JUMP JUMPDEST SWAP4 POP SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH1 0xA0 DUP8 ADD MSTORE POP PUSH2 0x1A7B DUP4 DUP4 DUP4 PUSH2 0x177C JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1A97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x817 JUMPI PUSH2 0x817 PUSH2 0x16C7 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1AED JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x1AD1 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD DUP1 DUP2 SWAP7 POP DUP4 PUSH1 0x5 SHL DUP2 ADD SWAP2 POP DUP3 DUP7 ADD PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x1885 JUMPI DUP3 DUP5 SUB DUP10 MSTORE PUSH2 0x1B43 DUP5 DUP4 MLOAD PUSH2 0x1AC7 JUMP JUMPDEST SWAP9 DUP6 ADD SWAP9 SWAP4 POP SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1B2B JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x0 DUP7 PUSH1 0x80 DUP4 ADD DUP3 JUMPDEST DUP9 DUP2 LT ISZERO PUSH2 0x1B96 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1B81 DUP5 PUSH2 0x133D JUMP JUMPDEST AND DUP3 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1B68 JUMP JUMPDEST POP DUP4 DUP2 SUB PUSH1 0x20 DUP6 ADD MSTORE DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xFB SHL SUB DUP7 GT ISZERO PUSH2 0x1BB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x5 SHL SWAP2 POP DUP2 DUP8 PUSH1 0x20 DUP4 ADD CALLDATACOPY ADD DUP3 DUP2 SUB PUSH1 0x20 SWAP1 DUP2 ADD PUSH1 0x40 DUP6 ADD MSTORE PUSH2 0x1BDD SWAP1 DUP3 ADD DUP6 PUSH2 0x1B0D JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1374 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1AC7 JUMP JUMPDEST PUSH2 0x400 DUP2 DUP4 CALLDATACOPY POP POP JUMP JUMPDEST PUSH2 0x460 DUP1 DUP3 MSTORE DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x0 PUSH2 0x480 DUP1 DUP4 ADD SWAP1 PUSH1 0x5 DUP9 SWAP1 SHL DUP5 ADD ADD DUP9 DUP4 DUP1 JUMPDEST DUP11 DUP2 LT ISZERO PUSH2 0x1C9C JUMPI DUP7 DUP5 SUB PUSH2 0x47F NOT ADD DUP6 MSTORE DUP3 CALLDATALOAD CALLDATASIZE DUP14 SWAP1 SUB PUSH2 0x43E NOT ADD DUP2 SLT PUSH2 0x1C4D JUMPI DUP3 DUP4 REVERT JUMPDEST DUP13 ADD PUSH2 0x440 PUSH2 0x1C5C DUP3 DUP1 PUSH2 0x1736 JUMP JUMPDEST DUP3 DUP9 MSTORE PUSH2 0x1C6C DUP4 DUP10 ADD DUP3 DUP5 PUSH2 0x177C JUMP JUMPDEST SWAP3 POP POP POP PUSH1 0x20 PUSH2 0x400 DUP2 DUP5 ADD DUP3 DUP10 ADD CALLDATACOPY PUSH2 0x420 SWAP3 DUP4 ADD CALLDATALOAD SWAP7 SWAP1 SWAP3 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP5 DUP6 ADD SWAP5 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1C26 JUMP JUMPDEST POP POP POP DUP1 SWAP3 POP POP POP DUP5 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x1CB7 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x1BFC JUMP JUMPDEST DUP3 PUSH2 0x440 DUP4 ADD MSTORE SWAP7 SWAP6 POP POP POP POP POP POP JUMP INVALID SWAP9 0x26 0xA7 RETURNDATASIZE 0xF 0xD7 XOR PUSH12 0xDA6A15195AC17571869CAB15 SHL INVALID SWAP11 DUP16 0xED EXTCODEHASH SWAP5 SMOD SELFDESTRUCT INVALID JUMPDEST XOR LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EQ 0xF7 0x1E SWAP7 EQ 0x1F PUSH8 0x772D3BA2104742E4 PUSH18 0xAD55639E79FA6FD5CAD0BC2B6637FD8C6473 PUSH16 0x6C634300081100330000000000000000 ","sourceMap":"836:2722:90:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8820:47:89;;;8834:9;188:25:181;;8845:21:89;244:2:181;229:18;;222:34;8820:47:89;;161:18:181;8820:47:89;;;;;;;836:2722:90;;;;;1378:46:89;;;;;;;;;;-1:-1:-1;1378:46:89;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;897:14:181;;890:22;872:41;;860:2;845:18;1378:46:89;;;;;;;;6109:211;;;;;;;;;;;;;:::i;:::-;;1949:112:168;;;;;;;;;;-1:-1:-1;2029:27:168;;1949:112;;;1070:25:181;;;1058:2;1043:18;1949:112:168;924:177:181;5031:114:89;;;;;;;;;;-1:-1:-1;5031:114:89;;;;;:::i;:::-;;:::i;5583:144::-;;;;;;;;;;-1:-1:-1;5583:144:89;;;;;:::i;:::-;;:::i;4787:120::-;;;;;;;;;;-1:-1:-1;4787:120:89;;;;;:::i;:::-;;:::i;2151:79:168:-;;;;;;;;;;-1:-1:-1;1530:6:168;2151:79;;1246:28:89;;;;;;;;;;-1:-1:-1;1246:28:89;;;;-1:-1:-1;;;;;1246:28:89;;;;;;-1:-1:-1;;;;;1379:32:181;;;1361:51;;1349:2;1334:18;1246:28:89;1215:203:181;3820:442:168;;;;;;;;;;;;;:::i;1641:79::-;;;;;;;;;;-1:-1:-1;1687:7:168;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;6797:216:89;;;;;;;;;;-1:-1:-1;6797:216:89;;;;;:::i;:::-;;:::i;2795:535:90:-;;;;;;;;;;-1:-1:-1;2795:535:90;;;;;:::i;:::-;;:::i;1336:37:89:-;;;;;;;;;;-1:-1:-1;1336:37:89;;;;-1:-1:-1;;;;;1336:37:89;;;5290:149;;;;;;;;;;-1:-1:-1;5290:149:89;;;;;:::i;:::-;;:::i;5882:139::-;;;;;;;;;;-1:-1:-1;5882:139:89;;;;;:::i;:::-;;:::i;3321:420:168:-;;;;;;;;;;-1:-1:-1;3321:420:168;;;;;:::i;:::-;;:::i;1278:27:89:-;;;;;;;;;;-1:-1:-1;1278:27:89;;;;-1:-1:-1;;;;;1278:27:89;;;4404:539:168;;;;;;;;;;;;;:::i;1792:85::-;;;;;;;;;;-1:-1:-1;1863:9:168;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;;;;;;;;;;-1:-1:-1;3097:4:168;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;8484:294:89;;;;;;;;;;-1:-1:-1;8484:294:89;;;;;:::i;:::-;;:::i;924:31:90:-;;;;;;;;;;-1:-1:-1;924:31:90;;;;-1:-1:-1;;;;;924:31:90;;;4528:114:89;;;;;;;;;;-1:-1:-1;4528:114:89;;;;;:::i;:::-;;:::i;1309:23::-;;;;;;;;;;-1:-1:-1;1309:23:89;;;;-1:-1:-1;;;;;1309:23:89;;;7716:354;;;;;;;;;;-1:-1:-1;7716:354:89;;;;;:::i;:::-;;:::i;2000:134:90:-;;;;;;;;;;-1:-1:-1;2000:134:90;;;;;:::i;:::-;;:::i;6109:211:89:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;2261:21:52::1;:19;:21::i;:::-;6185::89::2;6212:47;6238:10;6185:21:::0;6212:17:::2;:47::i;:::-;6270:45;::::0;;188:25:181;;;6293:21:89::2;244:2:181::0;229:18;;222:34;-1:-1:-1;;;;;;;;;;;6270:45:89;161:18:181;6270:45:89::2;;;;;;;6161:159;2303:20:52::1;1716:1:::0;2809:7;:22;2629:209;2303:20:::1;6109:211:89:o:0;5031:114::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;5103:8:89;-1:-1:-1;;;;;1616:20:89;::::1;1608:38;;;;-1:-1:-1::0;;;1608:38:89::1;;;;;;;:::i;:::-;;;;;;;;;5119:21:::2;5131:8;5119:11;:21::i;:::-;2416:1:168::1;5031:114:89::0;:::o;5583:144::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;5667:14:89;-1:-1:-1;;;;;1616:20:89;::::1;1608:38;;;;-1:-1:-1::0;;;1608:38:89::1;;;;;;;:::i;:::-;5689:33:::2;5707:14;5689:17;:33::i;4787:120::-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4862:8:89;-1:-1:-1;;;;;1616:20:89;::::1;1608:38;;;;-1:-1:-1::0;;;1608:38:89::1;;;;;;;:::i;:::-;4878:24:::2;4893:8;4878:14;:24::i;3820:442:168:-:0;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;3960:27:::2;;3991:1;3960:32:::0;3956:92:::2;;4001:47;;-1:-1:-1::0;;;4001:47:168::2;;;;;;;;;;;3956:92;4095:9;::::0;-1:-1:-1;;;;;4095:9:168::2;:23:::0;4091:88:::2;;4127:52;;-1:-1:-1::0;;;4127:52:168::2;;;;;;;;;;;4091:88;4236:21;4254:1;4236:9;:21::i;6797:216:89:-:0;1522:10;6915:18;1507:26;;;:14;:26;;;;;;;;1499:47;;;;-1:-1:-1;;;1499:47:89;;;;;;;:::i;:::-;2261:21:52::1;:19;:21::i;:::-;6956:7:89::2;::::0;:22:::2;::::0;-1:-1:-1;;;6956:22:89;;-1:-1:-1;;;;;6956:7:89;;::::2;::::0;:15:::2;::::0;:22:::2;::::0;6972:5;;6956:22:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6943:35;;6984:24;7003:4;6984:18;:24::i;:::-;2303:20:52::1;1716:1:::0;2809:7;:22;2629:209;2303:20:::1;6797:216:89::0;;;;:::o;2795:535:90:-;1522:10:89;1507:26;;;;:14;:26;;;;;;;;1499:47;;;;-1:-1:-1;;;1499:47:89;;;;;;;:::i;:::-;2261:21:52::1;:19;:21::i;:::-;2989:11:90::2;3027::::0;2989;3051:105:::2;3070:6;3066:1;:10;;;3051:105;;;3095:12;;3108:1;3095:15;;;;;;;;;:::i;:::-;;;;;;;3088:22;;;;;:::i;:::-;::::0;-1:-1:-1;3138:3:90::2;;3051:105;;;-1:-1:-1::0;3162:11:90::2;::::0;:74:::2;::::0;-1:-1:-1;;;3162:74:90;;-1:-1:-1;;;;;3162:11:90;;::::2;::::0;:21:::2;::::0;3191:3;;3162:74:::2;::::0;3196:11;;;;3209:12;;;;3223;;3162:74:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;3247:41:90::2;::::0;;188:25:181;;;3266:21:90::2;244:2:181::0;229:18;;222:34;-1:-1:-1;;;;;;;;;;;3247:41:90;-1:-1:-1;161:18:181;;-1:-1:-1;3247:41:90::2;::::0;-1:-1:-1;14:248:181;3247:41:90::2;;;;;;;;3294:31;3313:11;3294:18;:31::i;:::-;2983:347;;2303:20:52::1;1716:1:::0;2809:7;:22;2629:209;2303:20:::1;2795:535:90::0;;;;;;:::o;5290:149:89:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;5376:15:89;-1:-1:-1;;;;;1616:20:89;::::1;1608:38;;;;-1:-1:-1::0;;;1608:38:89::1;;;;;;;:::i;:::-;5399:35:::2;5418:15;5399:18;:35::i;5882:139::-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;5964:13:89;-1:-1:-1;;;;;1616:20:89;::::1;1608:38;;;;-1:-1:-1::0;;;1608:38:89::1;;;;;;;:::i;:::-;5985:31:::2;6002:13;5985:16;:31::i;3321:420:168:-:0;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;:::-;3321:420:::0;:::o;4404:539::-;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;8484:294:89:-:0;1522:10;1507:26;;;;:14;:26;;;;;;;;1499:47;;;;-1:-1:-1;;;1499:47:89;;;;;;;:::i;:::-;2261:21:52::1;:19;:21::i;:::-;8623:14:89::2;::::0;:53:::2;::::0;-1:-1:-1;;;8623:53:89;;-1:-1:-1;;;;;8623:14:89;;::::2;::::0;:19:::2;::::0;8650:11;;8623:53:::2;::::0;8663:12;;8623:53:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;8687:49:89::2;::::0;;188:25:181;;;8714:21:89::2;244:2:181::0;229:18;;222:34;-1:-1:-1;;;;;;;;;;;8687:49:89;-1:-1:-1;161:18:181;;-1:-1:-1;8687:49:89::2;::::0;-1:-1:-1;14:248:181;8687:49:89::2;;;;;;;;8742:31;8761:11;8742:18;:31::i;:::-;2303:20:52::1;1716:1:::0;2809:7;:22;2629:209;2303:20:::1;8484:294:89::0;;;:::o;4528:114::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4600:8:89;-1:-1:-1;;;;;1616:20:89;::::1;1608:38;;;;-1:-1:-1::0;;;1608:38:89::1;;;;;;;:::i;:::-;4616:21:::2;4628:8;4616:11;:21::i;7716:354::-:0;1522:10;1507:26;;;;:14;:26;;;;;;;;1499:47;;;;-1:-1:-1;;;1499:47:89;;;;;;;:::i;:::-;2261:21:52::1;:19;:21::i;:::-;7947:14:89::2;::::0;:88:::2;::::0;-1:-1:-1;;;7947:88:89;;-1:-1:-1;;;;;7947:14:89;;::::2;::::0;:30:::2;::::0;:88:::2;::::0;7978:7;;;;7987:14;;8003;;8019:15;;7947:88:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;8041:24;8060:4;8041:18;:24::i;:::-;2303:20:52::1;1716:1:::0;2809:7;:22;2629:209;2000:134:90;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;2080:12:90;-1:-1:-1;;;;;1616:20:89;::::1;1608:38;;;;-1:-1:-1::0;;;1608:38:89::1;;;;;;;:::i;:::-;2100:29:90::2;2116:12;2100:15;:29::i;2336:287:52:-:0;1759:1;2468:7;;:19;2460:63;;;;-1:-1:-1;;;2460:63:52;;18963:2:181;2460:63:52;;;18945:21:181;19002:2;18982:18;;;18975:30;19041:33;19021:18;;;19014:61;19092:18;;2460:63:52;18761:355:181;2460:63:52;1759:1;2598:7;:18;2336:287::o;2412:312:57:-;2526:6;2501:21;:31;;2493:73;;;;-1:-1:-1;;;2493:73:57;;19323:2:181;2493:73:57;;;19305:21:181;19362:2;19342:18;;;19335:30;19401:31;19381:18;;;19374:59;19450:18;;2493:73:57;19121:353:181;2493:73:57;2578:12;2596:9;-1:-1:-1;;;;;2596:14:57;2618:6;2596:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:52;;;2647:7;2639:78;;;;-1:-1:-1;;;2639:78:57;;19891:2:181;2639:78:57;;;19873:21:181;19930:2;19910:18;;;19903:30;19969:34;19949:18;;;19942:62;20040:28;20020:18;;;20013:56;20086:19;;2639:78:57;19689:422:181;9760:140:89;9852:7;;9819:42;;;-1:-1:-1;;;;;20346:15:181;;;20328:34;;9852:7:89;;;20393:2:181;20378:18;;20371:43;9819:42:89;;20263:18:181;9819:42:89;;;;;;;9867:7;:28;;-1:-1:-1;;;;;;9867:28:89;-1:-1:-1;;;;;9867:28:89;;;;;;;;;;9760:140::o;10104:172::-;10220:13;;10175:60;;;-1:-1:-1;;;;;20346:15:181;;;20328:34;;10220:13:89;;;20393:2:181;20378:18;;20371:43;10175:60:89;;20263:18:181;10175:60:89;;;;;;;10241:13;:30;;-1:-1:-1;;;;;;10241:30:89;-1:-1:-1;;;;;10241:30:89;;;;;;;;;;10104:172::o;9577:179::-;-1:-1:-1;;;;;9642:24:89;;;;;;:14;:24;;;;;;;;9634:43;;;;-1:-1:-1;;;9634:43:89;;20627:2:181;9634:43:89;;;20609:21:181;20666:1;20646:18;;;20639:29;-1:-1:-1;;;20684:18:181;;;20677:36;20730:18;;9634:43:89;20425:329:181;9634:43:89;-1:-1:-1;;;;;9684:24:89;;9711:5;9684:24;;;:14;:24;;;;;;;;;:32;;-1:-1:-1;;9684:32:89;;;9727:24;;1361:51:181;;;9727:24:89;;1334:18:181;9727:24:89;;;;;;;;9577:179;:::o;4981:185:168:-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;9123:273:89:-;9198:13;;-1:-1:-1;;;;;9198:13:89;9184:10;:27;9180:159;;9247:12;;9221:46;;-1:-1:-1;;;;;9247:12:89;9262:4;9221:17;:46::i;:::-;9180:159;;;9288:44;9314:10;9327:4;9288:17;:44::i;:::-;9349:42;;;188:25:181;;;9369:21:89;244:2:181;229:18;;222:34;-1:-1:-1;;;;;;;;;;;9349:42:89;161:18:181;9349:42:89;14:248:181;9904:196:89;10024:14;;9977:63;;;-1:-1:-1;;;;;20346:15:181;;;20328:34;;10024:14:89;;;20393:2:181;20378:18;;20371:43;9977:63:89;;20263:18:181;9977:63:89;;;;;;;10046:14;:49;;-1:-1:-1;;;;;;10046:49:89;-1:-1:-1;;;;;10046:49:89;;;;;;;;;;9904:196::o;10280:165::-;10392:12;;10349:57;;;-1:-1:-1;;;;;20346:15:181;;;20328:34;;10392:12:89;;;20393:2:181;20378:18;;20371:43;10349:57:89;;20263:18:181;10349:57:89;;;;;;;10412:12;:28;;-1:-1:-1;;;;;;10412:28:89;-1:-1:-1;;;;;10412:28:89;;;;;;;;;;10280:165::o;5170:183:168:-;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;9400:173:89:-;-1:-1:-1;;;;;9463:24:89;;;;;;:14;:24;;;;;;;;9462:25;9454:43;;;;-1:-1:-1;;;9454:43:89;;20961:2:181;9454:43:89;;;20943:21:181;21000:1;20980:18;;;20973:29;-1:-1:-1;;;21018:18:181;;;21011:35;21063:18;;9454:43:89;20759:328:181;9454:43:89;-1:-1:-1;;;;;9504:24:89;;;;;;:14;:24;;;;;;;;;:31;;-1:-1:-1;;9504:31:89;9531:4;9504:31;;;9546:22;;1361:51:181;;;9546:22:89;;1334:18:181;9546:22:89;1215:203:181;3384:172:90;3492:11;;3451:54;;;-1:-1:-1;;;;;20346:15:181;;;20328:34;;3492:11:90;;;20393:2:181;20378:18;;20371:43;3451:54:90;;20263:18:181;3451:54:90;;;;;;;3511:11;:40;;-1:-1:-1;;;;;;3511:40:90;-1:-1:-1;;;;;3511:40:90;;;;;;;;;;3384:172::o;267:173:181:-;335:20;;-1:-1:-1;;;;;384:31:181;;374:42;;364:70;;430:1;427;420:12;364:70;267:173;;;:::o;445:186::-;504:6;557:2;545:9;536:7;532:23;528:32;525:52;;;573:1;570;563:12;525:52;596:29;615:9;596:29;:::i;:::-;586:39;445:186;-1:-1:-1;;;445:186:181:o;1423:460::-;1523:6;1531;1584:2;1572:9;1563:7;1559:23;1555:32;1552:52;;;1600:1;1597;1590:12;1552:52;1640:9;1627:23;1673:18;1665:6;1662:30;1659:50;;;1705:1;1702;1695:12;1659:50;1728:22;;1784:3;1766:16;;;1762:26;1759:46;;;1801:1;1798;1791:12;1759:46;1824:2;1873;1858:18;;;;1845:32;;-1:-1:-1;;;1423:460:181:o;2070:367::-;2133:8;2143:6;2197:3;2190:4;2182:6;2178:17;2174:27;2164:55;;2215:1;2212;2205:12;2164:55;-1:-1:-1;2238:20:181;;2281:18;2270:30;;2267:50;;;2313:1;2310;2303:12;2267:50;2350:4;2342:6;2338:17;2326:29;;2410:3;2403:4;2393:6;2390:1;2386:14;2378:6;2374:27;2370:38;2367:47;2364:67;;;2427:1;2424;2417:12;2364:67;2070:367;;;;;:::o;2442:127::-;2503:10;2498:3;2494:20;2491:1;2484:31;2534:4;2531:1;2524:15;2558:4;2555:1;2548:15;2574:275;2645:2;2639:9;2710:2;2691:13;;-1:-1:-1;;2687:27:181;2675:40;;2745:18;2730:34;;2766:22;;;2727:62;2724:88;;;2792:18;;:::i;:::-;2828:2;2821:22;2574:275;;-1:-1:-1;2574:275:181:o;2854:530::-;2896:5;2949:3;2942:4;2934:6;2930:17;2926:27;2916:55;;2967:1;2964;2957:12;2916:55;3003:6;2990:20;3029:18;3025:2;3022:26;3019:52;;;3051:18;;:::i;:::-;3095:55;3138:2;3119:13;;-1:-1:-1;;3115:27:181;3144:4;3111:38;3095:55;:::i;:::-;3175:2;3166:7;3159:19;3221:3;3214:4;3209:2;3201:6;3197:15;3193:26;3190:35;3187:55;;;3238:1;3235;3228:12;3187:55;3303:2;3296:4;3288:6;3284:17;3277:4;3268:7;3264:18;3251:55;3351:1;3326:16;;;3344:4;3322:27;3315:38;;;;3330:7;2854:530;-1:-1:-1;;;2854:530:181:o;3389:1739::-;3563:6;3571;3579;3587;3595;3603;3656:3;3644:9;3635:7;3631:23;3627:33;3624:53;;;3673:1;3670;3663:12;3624:53;3696:18;3754:2;3742:9;3729:23;3726:31;3723:51;;;3770:1;3767;3760:12;3723:51;3809:87;3888:7;3875:9;3862:23;3851:9;3847:39;3809:87;:::i;:::-;3915:8;;-1:-1:-1;3942:8:181;-1:-1:-1;3969:2:181;4007:18;;;3994:32;4038:14;;;4035:34;;;4065:1;4062;4055:12;4035:34;4104:70;4166:7;4157:6;4146:9;4142:22;4104:70;:::i;:::-;4193:8;;-1:-1:-1;4078:96:181;-1:-1:-1;;4281:2:181;4266:18;;4253:32;4297:16;;;4294:36;;;4326:1;4323;4316:12;4294:36;4349:24;;4404:4;4396:13;;4392:27;-1:-1:-1;4382:55:181;;4433:1;4430;4423:12;4382:55;4469:2;4456:16;4491:2;4487;4484:10;4481:36;;;4497:18;;:::i;:::-;4543:2;4540:1;4536:10;4566:28;4590:2;4586;4582:11;4566:28;:::i;:::-;4628:15;;;4698:11;;;4694:20;;;4659:12;;;;4726:19;;;4723:39;;;4758:1;4755;4748:12;4723:39;4790:2;4786;4782:11;4771:22;;4802:245;4818:6;4813:3;4810:15;4802:245;;;4897:2;4891:3;4878:17;4875:25;4872:45;;;4913:1;4910;4903:12;4872:45;4942:62;4996:7;4991:2;4984:3;4971:17;4967:2;4963:26;4959:35;4942:62;:::i;:::-;4930:75;;4835:12;;;;5025;;;;4802:245;;;5066:5;5056:15;;;;;;;;;5118:2;5107:9;5103:18;5090:32;5080:42;;3389:1739;;;;;;;;:::o;5366:456::-;5452:6;5460;5468;5521:2;5509:9;5500:7;5496:23;5492:32;5489:52;;;5537:1;5534;5527:12;5489:52;5577:9;5564:23;5610:18;5602:6;5599:30;5596:50;;;5642:1;5639;5632:12;5596:50;5665:49;5706:7;5697:6;5686:9;5682:22;5665:49;:::i;:::-;5655:59;5761:2;5746:18;;5733:32;;-1:-1:-1;5812:2:181;5797:18;;;5784:32;;5366:456;-1:-1:-1;;;;5366:456:181:o;6283:818::-;6457:6;6465;6473;6481;6489;6497;6550:4;6538:9;6529:7;6525:23;6521:34;6518:54;;;6568:1;6565;6558:12;6518:54;6608:9;6595:23;6641:18;6633:6;6630:30;6627:50;;;6673:1;6670;6663:12;6627:50;6712:70;6774:7;6765:6;6754:9;6750:22;6712:70;:::i;:::-;6801:8;;-1:-1:-1;6686:96:181;-1:-1:-1;;6883:2:181;6868:18;;6855:32;;-1:-1:-1;6921:4:181;6906:20;;6938:15;;;6935:35;;;6966:1;6963;6956:12;6935:35;6283:818;;;;-1:-1:-1;6283:818:181;;7004:2;6989:18;;;7026:16;;7089:4;7074:20;;;7061:34;;-1:-1:-1;6283:818:181;-1:-1:-1;;6283:818:181:o;7106:328::-;7308:2;7290:21;;;7347:1;7327:18;;;7320:29;-1:-1:-1;;;7380:2:181;7365:18;;7358:35;7425:2;7410:18;;7106:328::o;7439:127::-;7500:10;7495:3;7491:20;7488:1;7481:31;7531:4;7528:1;7521:15;7555:4;7552:1;7545:15;7571:128;7638:9;;;7659:11;;;7656:37;;;7673:18;;:::i;7704:331::-;7906:2;7888:21;;;7945:1;7925:18;;;7918:29;-1:-1:-1;;;7978:2:181;7963:18;;7956:38;8026:2;8011:18;;7704:331::o;8040:163::-;8107:20;;8167:10;8156:22;;8146:33;;8136:61;;8193:1;8190;8183:12;8307:160;8372:20;;8428:13;;8421:21;8411:32;;8401:60;;8457:1;8454;8447:12;8472:500;8530:5;8537:6;8597:3;8584:17;8683:2;8679:7;8668:8;8652:14;8648:29;8644:43;8624:18;8620:68;8610:96;;8702:1;8699;8692:12;8610:96;8730:33;;8834:4;8821:18;;;-1:-1:-1;8782:21:181;;-1:-1:-1;8862:18:181;8851:30;;8848:50;;;8894:1;8891;8884:12;8848:50;8941:6;8925:14;8921:27;8914:5;8910:39;8907:59;;;8962:1;8959;8952:12;8977:266;9065:6;9060:3;9053:19;9117:6;9110:5;9103:4;9098:3;9094:14;9081:43;-1:-1:-1;9169:1:181;9144:16;;;9162:4;9140:27;;;9133:38;;;;9225:2;9204:15;;;-1:-1:-1;;9200:29:181;9191:39;;;9187:50;;8977:266::o;9248:520::-;9318:5;9325:6;9385:3;9372:17;9471:2;9467:7;9456:8;9440:14;9436:29;9432:43;9412:18;9408:68;9398:96;;9490:1;9487;9480:12;9398:96;9518:33;;9622:4;9609:18;;;-1:-1:-1;9570:21:181;;-1:-1:-1;9650:18:181;9639:30;;9636:50;;;9682:1;9679;9672:12;9636:50;9736:6;9733:1;9729:14;9713;9709:35;9702:5;9698:47;9695:67;;;9758:1;9755;9748:12;9773:447;9873:6;9868:3;9861:19;9843:3;9899:4;9928:2;9923:3;9919:12;9912:19;;9954:5;9977:1;9987:208;10001:6;9998:1;9995:13;9987:208;;;-1:-1:-1;;;;;10066:26:181;10085:6;10066:26;:::i;:::-;10062:52;10050:65;;10135:12;;;;10170:15;;;;10023:1;10016:9;9987:208;;;-1:-1:-1;10211:3:181;;9773:447;-1:-1:-1;;;;;9773:447:181:o;10225:714::-;10332:6;10327:3;10320:19;10302:3;10358:4;10399:2;10394:3;10390:12;10424:11;10451;10444:18;;10501:6;10498:1;10494:14;10487:5;10483:26;10471:38;;10532:5;10555:1;10565:348;10579:6;10576:1;10573:13;10565:348;;;10650:5;10644:4;10640:16;10635:3;10628:29;10706:45;10744:6;10737:5;10706:45;:::i;:::-;10772:61;10828:4;10813:13;10798;10772:61;:::i;:::-;10891:12;;;;10764:69;-1:-1:-1;;;10856:15:181;;;;10601:1;10594:9;10565:348;;;-1:-1:-1;10929:4:181;;10225:714;-1:-1:-1;;;;;;;10225:714:181:o;10944:2986::-;11135:2;11124:9;11117:21;11098:4;11186:6;11173:20;11273:3;11269:8;11260:6;11244:14;11240:27;11236:42;11216:18;11212:67;11202:95;;11293:1;11290;11283:12;11202:95;11386:4;11381:2;11366:18;;11359:32;11319:31;;11400:64;11459:3;11444:19;;11418:24;11319:31;11418:24;:::i;:::-;8284:10;8273:22;8261:35;;8208:94;11400:64;11493:33;11522:2;11515:5;11511:14;11493:33;:::i;:::-;8284:10;8273:22;11582:3;11567:19;;8261:35;11618;11647:4;11636:16;;11618:35;:::i;:::-;11672:3;11684:53;11733:2;11722:9;11718:18;11702:14;8284:10;8273:22;8261:35;;8208:94;11684:53;11768:36;11798:4;11791:5;11787:16;11768:36;:::i;:::-;11746:58;;11823:3;11835:54;11885:2;11874:9;11870:18;11854:14;-1:-1:-1;;;;;1172:31:181;1160:44;;1106:104;11835:54;11920:36;11950:4;11943:5;11939:16;11920:36;:::i;:::-;11898:58;;11975:3;11987:54;12037:2;12026:9;12022:18;12006:14;-1:-1:-1;;;;;1172:31:181;1160:44;;1106:104;11987:54;12072:33;12099:4;12092:5;12088:16;12072:33;:::i;:::-;12050:55;;12124:3;12136:51;12183:2;12172:9;12168:18;12152:14;706:13;699:21;687:34;;636:91;12136:51;12232:54;12281:3;12274:5;12270:15;12263:5;12232:54;:::i;:::-;12196:90;;12305:6;12330:3;12369:2;12364;12353:9;12349:18;12342:30;12395:76;12466:3;12455:9;12451:19;12437:12;12421:14;12395:76;:::i;:::-;12381:90;;12531:3;12524:5;12520:15;12507:29;12502:2;12491:9;12487:18;12480:57;12568:34;12598:2;12591:5;12587:14;12568:34;:::i;:::-;-1:-1:-1;;;;;1172:31:181;12661:3;12646:19;;1160:44;12716:14;;;12703:28;12697:3;12682:19;;12675:57;-1:-1:-1;;12782:14:181;;;12769:28;12763:3;12748:19;;12741:57;12848:14;;12835:28;12829:3;12814:19;;12807:57;12914:14;;12901:28;12895:3;12880:19;;12873:57;-1:-1:-1;12977:67:181;13040:2;13028:15;;;12977:67;:::i;:::-;12939:105;;13067:2;13063:7;13136:2;13124:9;13116:6;13112:22;13108:31;13101:4;13090:9;13086:20;13079:61;13163:77;13233:6;13217:14;13201;13163:77;:::i;:::-;13149:91;;13287:69;13350:4;13342:6;13338:17;13330:6;13287:69;:::i;:::-;13249:107;;;;13422:2;13410:9;13402:6;13398:22;13394:31;13387:4;13376:9;13372:20;13365:61;13449:84;13526:6;13510:14;13494;13449:84;:::i;:::-;13435:98;;13564:37;13595:4;13587:6;13583:17;13564:37;:::i;:::-;-1:-1:-1;;;;;1172:31:181;;13660:4;13645:20;;1160:44;13542:59;-1:-1:-1;13714:57:181;13765:4;13757:6;13753:17;13745:6;13714:57;:::i;:::-;13675:96;;;;13837:2;13825:9;13817:6;13813:22;13809:31;13802:4;13791:9;13787:20;13780:61;;13858:66;13917:6;13901:14;13884:15;13858:66;:::i;:::-;13850:74;10944:2986;-1:-1:-1;;;;;;10944:2986:181:o;13935:184::-;14005:6;14058:2;14046:9;14037:7;14033:23;14029:32;14026:52;;;14074:1;14071;14064:12;14026:52;-1:-1:-1;14097:16:181;;13935:184;-1:-1:-1;13935:184:181:o;14124:127::-;14185:10;14180:3;14176:20;14173:1;14166:31;14216:4;14213:1;14206:15;14240:4;14237:1;14230:15;14256:125;14321:9;;;14342:10;;;14339:36;;;14355:18;;:::i;14386:422::-;14427:3;14465:5;14459:12;14492:6;14487:3;14480:19;14517:1;14527:162;14541:6;14538:1;14535:13;14527:162;;;14603:4;14659:13;;;14655:22;;14649:29;14631:11;;;14627:20;;14620:59;14556:12;14527:162;;;14531:3;14734:1;14727:4;14718:6;14713:3;14709:16;14705:27;14698:38;14797:4;14790:2;14786:7;14781:2;14773:6;14769:15;14765:29;14760:3;14756:39;14752:50;14745:57;;;14386:422;;;;:::o;14813:614::-;14864:3;14902:5;14896:12;14929:6;14924:3;14917:19;14955:4;14996:2;14991:3;14987:12;15021:11;15048;15041:18;;15098:6;15095:1;15091:14;15084:5;15080:26;15068:38;;15140:2;15133:5;15129:14;15161:1;15171:230;15185:6;15182:1;15179:13;15171:230;;;15256:5;15250:4;15246:16;15241:3;15234:29;15284:37;15316:4;15307:6;15301:13;15284:37;:::i;:::-;15379:12;;;;15276:45;-1:-1:-1;15344:15:181;;;;15207:1;15200:9;15171:230;;15432:1210;15816:2;15828:21;;;15801:18;;15884:22;;;15768:4;15964:6;15937:3;15922:19;;15768:4;15998:235;16012:6;16009:1;16006:13;15998:235;;;-1:-1:-1;;;;;16077:26:181;16096:6;16077:26;:::i;:::-;16073:52;16061:65;;16149:4;16208:15;;;;16173:12;;;;16034:1;16027:9;15998:235;;;-1:-1:-1;16271:19:181;;;16264:4;16249:20;;16242:49;16300:19;;;-1:-1:-1;;;;;16331:31:181;;16328:51;;;16375:1;16372;16365:12;16328:51;16409:6;16406:1;16402:14;16388:28;;16462:6;16454;16447:4;16442:3;16438:14;16425:44;16488:16;16544:18;;;16564:4;16540:29;;;16535:2;16520:18;;16513:57;16587:49;;16622:13;;16614:6;16587:49;:::i;:::-;16579:57;15432:1210;-1:-1:-1;;;;;;;;15432:1210:181:o;16647:217::-;16794:2;16783:9;16776:21;16757:4;16814:44;16854:2;16843:9;16839:18;16831:6;16814:44;:::i;16869:107::-;16963:6;16956:5;16951:3;16938:32;;;16869:107::o;16981:1775::-;17346:4;17400:21;;;17373:18;;17456:22;;;17317:4;17497;17517:18;;;;17581:1;17577:14;;;17562:30;;17558:39;17620:6;17317:4;;17675:890;17691:6;17686:3;17683:15;17675:890;;;17760:22;;;-1:-1:-1;;17756:38:181;17744:51;;17834:20;;17909:14;17905:27;;;-1:-1:-1;;17901:43:181;17877:68;;17867:96;;17959:1;17956;17949:12;17867:96;17989:31;;18043:6;18096:44;17989:31;;18096:44;:::i;:::-;18168:2;18160:6;18153:18;18198:70;18264:2;18256:6;18252:15;18238:12;18224;18198:70;:::i;:::-;18184:84;;;;18291:4;18354:6;18349:2;18342:5;18338:14;18333:2;18325:6;18321:15;18308:53;18384:6;18440:14;;;18427:28;18410:15;;;;18403:53;;;;18543:12;;;;18508:15;;;;;17717:1;17708:11;17675:890;;;17679:3;;;18582:6;18574:14;;;;18626:6;18619:4;18608:9;18604:20;18597:36;18642:61;18699:2;18688:9;18684:18;18676:6;18642:61;:::i;:::-;18743:6;18734;18723:9;18719:22;18712:38;16981:1775;;;;;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"1490800","executionCost":"infinite","totalCost":"infinite"},"external":{"acceptProposedOwner()":"63881","addRelayer(address)":"30159","allowedRelayer(address)":"2544","connext()":"2403","delay()":"238","execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),uint256)":"infinite","feeCollector()":"2426","gelatoRelayer()":"2405","owner()":"2376","propagate(address[],uint256[],bytes[],uint256)":"infinite","proposeNewOwner(address)":"56485","proposed()":"2464","proposedTimestamp()":"2349","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256,uint256)":"infinite","removeRelayer(address)":"30229","renounceOwnership()":"66000","renounced()":"2353","rootManager()":"2426","send(bytes,uint256,uint256)":"infinite","setConnext(address)":"30331","setFeeCollector(address)":"30286","setGelatoRelayer(address)":"30353","setRootManager(address)":"30351","setSpokeConnector(address)":"30264","spokeConnector()":"2448","withdraw()":"infinite"},"internal":{"_setRootManager(address)":"infinite"}},"methodIdentifiers":{"acceptProposedOwner()":"c5b350df","addRelayer(address)":"dd39f00d","allowedRelayer(address)":"2f55b98d","connext()":"de4b0548","delay()":"6a42b8f8","execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),uint256)":"8efed127","feeCollector()":"c415b95c","gelatoRelayer()":"6eba787f","owner()":"8da5cb5b","propagate(address[],uint256[],bytes[],uint256)":"9a2652db","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256,uint256)":"e79457f1","removeRelayer(address)":"60f0a5ac","renounceOwnership()":"715018a6","renounced()":"d232c220","rootManager()":"db205635","send(bytes,uint256,uint256)":"d9ef0bee","setConnext(address)":"4d6f2013","setFeeCollector(address)":"a42dce80","setGelatoRelayer(address)":"5e21966a","setRootManager(address)":"f0a67eba","setSpokeConnector(address)":"9f645a03","spokeConnector()":"9cadce00","withdraw()":"3ccfd60b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_connext\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spokeConnector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_gelatoRelayer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_feeCollector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rootManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"}],\"name\":\"ConnextChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"}],\"name\":\"FeeCollectorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"name\":\"FundsDeducted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"name\":\"FundsReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"}],\"name\":\"GelatoRelayerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"}],\"name\":\"RelayerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"}],\"name\":\"RelayerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRootManager\",\"type\":\"address\"}],\"name\":\"RootManagerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"}],\"name\":\"SpokeConnectorChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayer\",\"type\":\"address\"}],\"name\":\"addRelayer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowedRelayer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"connext\",\"outputs\":[{\"internalType\":\"contract IConnext\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"routers\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"routerSignatures\",\"type\":\"bytes[]\"},{\"internalType\":\"address\",\"name\":\"sequencer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSignature\",\"type\":\"bytes\"}],\"internalType\":\"struct ExecuteArgs\",\"name\":\"_args\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeCollector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gelatoRelayer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_connectors\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_messageFees\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_encodedData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"_relayerFee\",\"type\":\"uint256\"}],\"name\":\"propagate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"path\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct ISpokeConnector.Proof[]\",\"name\":\"_proofs\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"_aggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[32]\",\"name\":\"_aggregatePath\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"_aggregateIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"proveAndProcess\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayer\",\"type\":\"address\"}],\"name\":\"removeRelayer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rootManager\",\"outputs\":[{\"internalType\":\"contract IRootManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_messageFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_relayerFee\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_connext\",\"type\":\"address\"}],\"name\":\"setConnext\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_feeCollector\",\"type\":\"address\"}],\"name\":\"setFeeCollector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gelatoRelayer\",\"type\":\"address\"}],\"name\":\"setGelatoRelayer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rootManager\",\"type\":\"address\"}],\"name\":\"setRootManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spokeConnector\",\"type\":\"address\"}],\"name\":\"setSpokeConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"spokeConnector\",\"outputs\":[{\"internalType\":\"contract ISpokeConnector\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Connext Labs, Inc.\",\"kind\":\"dev\",\"methods\":{\"addRelayer(address)\":{\"params\":{\"_relayer\":\"- Relayer address to add.\"}},\"constructor\":{\"params\":{\"_connext\":\"The address of the Connext on this domain.\",\"_feeCollector\":\"The address of the Gelato Fee Collector on this domain.\",\"_gelatoRelayer\":\"The address of the Gelato relayer on this domain.\",\"_rootManager\":\"The address of the Root Manager on this domain.\",\"_spokeConnector\":\"The address of the SpokeConnector on this domain.\"}},\"execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),uint256)\":{\"params\":{\"_args\":\"- ExecuteArgs arguments.\",\"_fee\":\"- Fee to be paid to relayer.\"},\"returns\":{\"transferId\":\"- The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for reconciliation to occur.\"}},\"propagate(address[],uint256[],bytes[],uint256)\":{\"params\":{\"_connectors\":\"Array of connectors: should match exactly the array of `connectors` in storage; used here to reduce gas costs, and keep them static regardless of number of supported domains.\",\"_encodedData\":\"Array of encodedData: extra params for each AMB if required\",\"_messageFees\":\"Array of fees in native token for an AMB if required\",\"_relayerFee\":\"Fee to be paid to relayer\"}},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256,uint256)\":{\"params\":{\"_aggregateIndex\":\"Index of the inbound root in the aggregator's merkle tree in the hub.\",\"_aggregatePath\":\"Merkle path of inclusion for the inbound root.\",\"_aggregateRoot\":\"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.\",\"_fee\":\"- Fee to be paid to relayer.\",\"_proofs\":\"Batch of Proofs containing messages for proving/processing.\"}},\"removeRelayer(address)\":{\"params\":{\"_relayer\":\"- Relayer address to remove.\"}},\"send(bytes,uint256,uint256)\":{\"params\":{\"_encodedData\":\"- Data to be sent to Connext SpokeConnector\",\"_messageFee\":\"- Fee to be paid to the SpokeConnector for connected AMBs that require fees.\",\"_relayerFee\":\"- Fee to be paid to relayer.\"}},\"setConnext(address)\":{\"params\":{\"_connext\":\"- New Connext address.\"}},\"setFeeCollector(address)\":{\"params\":{\"_feeCollector\":\"- New Gelato Fee Collector address.\"}},\"setGelatoRelayer(address)\":{\"params\":{\"_gelatoRelayer\":\"- New Gelato relayer address.\"}},\"setRootManager(address)\":{\"params\":{\"_rootManager\":\"The address of the new RootManager on this domain.\"}},\"setSpokeConnector(address)\":{\"params\":{\"_spokeConnector\":\"- New SpokeConnector address.\"}}},\"title\":\"RelayerProxyHub\",\"version\":1},\"userdoc\":{\"events\":{\"ConnextChanged(address,address)\":{\"notice\":\"Emitted when Connext contract address is updated by admin\"},\"FeeCollectorChanged(address,address)\":{\"notice\":\"Emitted when FeeCollectorChanged address is updated by admin\"},\"FundsDeducted(uint256,uint256)\":{\"notice\":\"Emitted when funds removed from the contract by admin\"},\"FundsReceived(uint256,uint256)\":{\"notice\":\"Emitted when funds added to the contract\"},\"GelatoRelayerChanged(address,address)\":{\"notice\":\"Emitted when GelatoRelayer address is updated by admin\"},\"RelayerAdded(address)\":{\"notice\":\"Emitted when a new relayer is allowlisted by admin\"},\"RelayerRemoved(address)\":{\"notice\":\"Emitted when a relayer is removed from allowlist by admin\"},\"SpokeConnectorChanged(address,address)\":{\"notice\":\"Emitted when SpokeConnector contract address is updated by admin\"}},\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"addRelayer(address)\":{\"notice\":\"Adds a relayer address to the allowed relayers mapping.\"},\"constructor\":{\"notice\":\"Creates a new RelayerProxyHub instance.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),uint256)\":{\"notice\":\"Wraps the call to execute() on Connext and pays either the caller or hardcoded relayer from this contract's balance for completing the transaction.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"propagate(address[],uint256[],bytes[],uint256)\":{\"notice\":\"Wraps the call to propagate() on RootManager and pays either the caller or hardcoded relayer from this contract's balance for completing the transaction.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256,uint256)\":{\"notice\":\"Wraps the call to proveAndProcess() on SpokeConnector and pays either the caller or hardcoded relayer from this contract's balance for completing the transaction.\"},\"removeRelayer(address)\":{\"notice\":\"Removes a relayer address from the allowed relayers mapping.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"send(bytes,uint256,uint256)\":{\"notice\":\"Wraps the call to send() on SpokeConnector and pays either the caller or hardcoded relayer from this contract's balance for completing the transaction.\"},\"setConnext(address)\":{\"notice\":\"Updates the Connext address on this contract.\"},\"setFeeCollector(address)\":{\"notice\":\"Updates the Gelato Fee Collector address on this contract.\"},\"setGelatoRelayer(address)\":{\"notice\":\"Updates the Gelato relayer address on this contract.\"},\"setRootManager(address)\":{\"notice\":\"Updates the RootManager address.\"},\"setSpokeConnector(address)\":{\"notice\":\"Updates the SpokeConnector address on this contract.\"},\"withdraw()\":{\"notice\":\"Withdraws all funds stored on this contract to msg.sender.\"}},\"notice\":\"This is a temporary contract that wraps the Connext RootManager's propagate() function so that it can be called by Gelato's legacy relayer network. The contract stores native assets and pays them to the relayer on function call.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/helpers/RelayerProxyHub.sol\":\"RelayerProxyHub\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.1;\\n\\nimport {GelatoRelayBase} from \\\"./base/GelatoRelayBase.sol\\\";\\n\\nuint256 constant _FEE_COLLECTOR_START = 20;\\n\\n// WARNING: Do not use this free fn by itself, always inherit GelatoRelayFeeCollector\\n// solhint-disable-next-line func-visibility, private-vars-leading-underscore\\nfunction __getFeeCollector() pure returns (address feeCollector) {\\n    assembly {\\n        feeCollector := shr(\\n            96,\\n            calldataload(sub(calldatasize(), _FEE_COLLECTOR_START))\\n        )\\n    }\\n}\\n\\n/**\\n * @dev Context variant with only feeCollector appended to msg.data\\n * Expects calldata encoding:\\n *   abi.encodePacked(bytes data, address feeCollectorAddress)\\n * Therefore, we're expecting 20bytes to be appended to normal msgData\\n * 20bytes start offsets from calldatasize:\\n *    feeCollector: -20\\n */\\n/// @dev Do not use with GelatoRelayContext - pick only one\\nabstract contract GelatoRelayFeeCollector is GelatoRelayBase {\\n    function _getMsgData() internal view returns (bytes calldata) {\\n        return\\n            _isGelatoRelay(msg.sender)\\n                ? msg.data[:msg.data.length - _FEE_COLLECTOR_START]\\n                : msg.data;\\n    }\\n\\n    // Only use with GelatoRelayBase onlyGelatoRelay or `_isGelatoRelay` checks\\n    function _getFeeCollector() internal pure returns (address) {\\n        return __getFeeCollector();\\n    }\\n}\\n\",\"keccak256\":\"0x24d0c82254158c5d7cbb88bfafdab8197dbafc8be6e03d6dd13a3479bf7fc18d\",\"license\":\"MIT\"},\"@gelatonetwork/relay-context/contracts/base/GelatoRelayBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.1;\\n\\nimport {GELATO_RELAY} from \\\"../constants/GelatoRelay.sol\\\";\\n\\nabstract contract GelatoRelayBase {\\n    modifier onlyGelatoRelay() {\\n        require(_isGelatoRelay(msg.sender), \\\"onlyGelatoRelay\\\");\\n        _;\\n    }\\n\\n    function _isGelatoRelay(address _forwarder) internal pure returns (bool) {\\n        return _forwarder == GELATO_RELAY;\\n    }\\n}\\n\",\"keccak256\":\"0x8b8ca04a1b6dce1b14b0b5f59783defe5562f876f0d6127aefa3e251b7631ba1\",\"license\":\"MIT\"},\"@gelatonetwork/relay-context/contracts/constants/GelatoRelay.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.1;\\n\\naddress constant GELATO_RELAY = 0xaBcC9b596420A9E9172FD5938620E265a0f9Df92;\\naddress constant GELATO_RELAY_ERC2771 = 0xBf175FCC7086b4f9bd59d5EAE8eA67b8f940DE0d;\\n\",\"keccak256\":\"0xa3f9966896db1bfafbcb1b58d1d76b44d1cd1660986e675d57398d5a9a74d242\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/RelayerProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\nimport {ReentrancyGuard} from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport {GelatoRelayFeeCollector} from \\\"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../../../shared/ProposedOwnable.sol\\\";\\nimport {IConnext, ExecuteArgs} from \\\"../interfaces/IConnext.sol\\\";\\n\\ninterface ISpokeConnector {\\n  struct Proof {\\n    bytes message;\\n    bytes32[32] path;\\n    uint256 index;\\n  }\\n\\n  function proveAndProcess(\\n    Proof[] calldata _proofs,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) external;\\n\\n  function send(bytes memory _encodedData) external payable;\\n}\\n\\n/**\\n * @title RelayerProxy\\n * @author Connext Labs, Inc.\\n * @notice This is a temporary contract that wraps fast path functions in the Connext interface so that they can be called by\\n * Gelato's legacy relayer network. The contract stores native assets and pays them to the relayer on function call.\\n */\\ncontract RelayerProxy is ProposedOwnable, ReentrancyGuard, GelatoRelayFeeCollector {\\n  // ============ Properties ============\\n  address public gelatoRelayer;\\n  address public feeCollector;\\n  IConnext public connext;\\n  ISpokeConnector public spokeConnector;\\n\\n  mapping(address => bool) public allowedRelayer;\\n\\n  // ============ Modifier ============\\n\\n  modifier onlyRelayer() {\\n    require(allowedRelayer[msg.sender], \\\"!relayer\\\");\\n    _;\\n  }\\n\\n  modifier definedAddress(address _input) {\\n    require(_input != address(0), \\\"empty\\\");\\n    _;\\n  }\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted when funds added to the contract\\n   * @param amount The amount added\\n   * @param balance The updated balance of the contract\\n   */\\n  event FundsReceived(uint256 amount, uint256 balance);\\n\\n  /**\\n   * @notice Emitted when funds removed from the contract by admin\\n   * @param amount The amount removed\\n   * @param balance The updated balance of the contract\\n   */\\n  event FundsDeducted(uint256 amount, uint256 balance);\\n\\n  /**\\n   * @notice Emitted when a new relayer is allowlisted by admin\\n   * @param relayer Address of the added relayer\\n   */\\n  event RelayerAdded(address relayer);\\n\\n  /**\\n   * @notice Emitted when a relayer is removed from allowlist by admin\\n   * @param relayer Address of the removed relayer\\n   */\\n  event RelayerRemoved(address relayer);\\n\\n  /**\\n   * @notice Emitted when Connext contract address is updated by admin\\n   * @param updated New Connext address in the contract\\n   * @param previous Old Connext address in the contract\\n   */\\n  event ConnextChanged(address updated, address previous);\\n\\n  /**\\n   * @notice Emitted when SpokeConnector contract address is updated by admin\\n   * @param updated New SpokeConnector address in the contract\\n   * @param previous Old SpokeConnector address in the contract\\n   */\\n  event SpokeConnectorChanged(address updated, address previous);\\n\\n  /**\\n   * @notice Emitted when GelatoRelayer address is updated by admin\\n   * @param updated New GelatoRelayer address in the contract\\n   * @param previous Old Gelatorelayer address in the contract\\n   */\\n  event GelatoRelayerChanged(address updated, address previous);\\n\\n  /**\\n   * @notice Emitted when FeeCollectorChanged address is updated by admin\\n   * @param updated New FeeCollectorChanged address in the contract\\n   * @param previous Old FeeCollectorChanged address in the contract\\n   */\\n  event FeeCollectorChanged(address updated, address previous);\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new RelayerProxy instance.\\n   * @param _connext The address of the Connext on this domain.\\n   * @param _spokeConnector The address of the SpokeConnector on this domain.\\n   * @param _gelatoRelayer The address of the Gelato relayer on this domain.\\n   * @param _feeCollector The address of the Gelato Fee Collector on this domain.\\n   */\\n  constructor(\\n    address _connext,\\n    address _spokeConnector,\\n    address _gelatoRelayer,\\n    address _feeCollector\\n  ) ProposedOwnable() {\\n    _setOwner(msg.sender);\\n    _setConnext(_connext);\\n    _setSpokeConnector(_spokeConnector);\\n    _setGelatoRelayer(_gelatoRelayer);\\n    _setFeeCollector(_feeCollector);\\n\\n    _addRelayer(_gelatoRelayer);\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Adds a relayer address to the allowed relayers mapping.\\n   *\\n   * @param _relayer - Relayer address to add.\\n   */\\n  function addRelayer(address _relayer) external onlyOwner definedAddress(_relayer) {\\n    _addRelayer(_relayer);\\n  }\\n\\n  /**\\n   * @notice Removes a relayer address from the allowed relayers mapping.\\n   *\\n   * @param _relayer - Relayer address to remove.\\n   */\\n  function removeRelayer(address _relayer) external onlyOwner definedAddress(_relayer) {\\n    _removeRelayer(_relayer);\\n  }\\n\\n  /**\\n   * @notice Updates the Connext address on this contract.\\n   *\\n   * @param _connext - New Connext address.\\n   */\\n  function setConnext(address _connext) external onlyOwner definedAddress(_connext) {\\n    _setConnext(_connext);\\n  }\\n\\n  /**\\n   * @notice Updates the SpokeConnector address on this contract.\\n   *\\n   * @param _spokeConnector - New SpokeConnector address.\\n   */\\n  function setSpokeConnector(address _spokeConnector) external onlyOwner definedAddress(_spokeConnector) {\\n    _setSpokeConnector(_spokeConnector);\\n  }\\n\\n  /**\\n   * @notice Updates the Gelato relayer address on this contract.\\n   *\\n   * @param _gelatoRelayer - New Gelato relayer address.\\n   */\\n  function setGelatoRelayer(address _gelatoRelayer) external onlyOwner definedAddress(_gelatoRelayer) {\\n    _setGelatoRelayer(_gelatoRelayer);\\n  }\\n\\n  /**\\n   * @notice Updates the Gelato Fee Collector address on this contract.\\n   *\\n   * @param _feeCollector - New Gelato Fee Collector address.\\n   */\\n  function setFeeCollector(address _feeCollector) external onlyOwner definedAddress(_feeCollector) {\\n    _setFeeCollector(_feeCollector);\\n  }\\n\\n  /**\\n   * @notice Withdraws all funds stored on this contract to msg.sender.\\n   */\\n  function withdraw() external onlyOwner nonReentrant {\\n    uint256 balance = address(this).balance;\\n    Address.sendValue(payable(msg.sender), balance);\\n    emit FundsDeducted(balance, address(this).balance);\\n  }\\n\\n  // ============ External Functions ============\\n\\n  /**\\n   * @notice Wraps the call to execute() on Connext and pays either the caller or hardcoded relayer from this\\n   * contract's balance for completing the transaction.\\n   *\\n   * @param _args - ExecuteArgs arguments.\\n   * @param _fee - Fee to be paid to relayer.\\n   * @return transferId - The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for\\n   * reconciliation to occur.\\n   */\\n  function execute(ExecuteArgs calldata _args, uint256 _fee)\\n    external\\n    onlyRelayer\\n    nonReentrant\\n    returns (bytes32 transferId)\\n  {\\n    transferId = connext.execute(_args);\\n    transferRelayerFee(_fee);\\n  }\\n\\n  /**\\n   * @notice Wraps the call to proveAndProcess() on SpokeConnector and pays either the caller or hardcoded relayer\\n   * from this contract's balance for completing the transaction.\\n   *\\n   * @param _proofs Batch of Proofs containing messages for proving/processing.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   * @param _fee - Fee to be paid to relayer.\\n   */\\n  function proveAndProcess(\\n    ISpokeConnector.Proof[] calldata _proofs,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex,\\n    uint256 _fee\\n  ) external onlyRelayer nonReentrant {\\n    spokeConnector.proveAndProcess(_proofs, _aggregateRoot, _aggregatePath, _aggregateIndex);\\n    transferRelayerFee(_fee);\\n  }\\n\\n  /**\\n   * @notice Wraps the call to send() on SpokeConnector and pays either the caller or hardcoded relayer from this\\n   * contract's balance for completing the transaction.\\n   *\\n   * @param _encodedData - Data to be sent to Connext SpokeConnector\\n   * @param _messageFee - Fee to be paid to the SpokeConnector for connected AMBs that require fees.\\n   * @param _relayerFee - Fee to be paid to relayer.\\n   */\\n  function send(\\n    bytes memory _encodedData,\\n    uint256 _messageFee,\\n    uint256 _relayerFee\\n  ) external onlyRelayer nonReentrant {\\n    spokeConnector.send{value: _messageFee}(_encodedData);\\n    emit FundsDeducted(_messageFee, address(this).balance);\\n    transferRelayerFee(_relayerFee);\\n  }\\n\\n  receive() external payable {\\n    emit FundsReceived(msg.value, address(this).balance);\\n  }\\n\\n  // ============ Internal Functions ============\\n\\n  /**\\n   * @notice helper function to transfer fees to either Gelato relayer via Fee Collector or to our\\n   * backup relayer (msg.sender).\\n   *\\n   * @param _fee - Fee to be paid to relayer.\\n   */\\n  function transferRelayerFee(uint256 _fee) internal {\\n    if (msg.sender == gelatoRelayer) {\\n      Address.sendValue(payable(feeCollector), _fee);\\n    } else {\\n      Address.sendValue(payable(msg.sender), _fee);\\n    }\\n    emit FundsDeducted(_fee, address(this).balance);\\n  }\\n\\n  function _addRelayer(address _relayer) internal {\\n    require(!allowedRelayer[_relayer], \\\"added\\\");\\n\\n    allowedRelayer[_relayer] = true;\\n    emit RelayerAdded(_relayer);\\n  }\\n\\n  function _removeRelayer(address _relayer) internal {\\n    require(allowedRelayer[_relayer], \\\"!added\\\");\\n\\n    allowedRelayer[_relayer] = false;\\n    emit RelayerRemoved(_relayer);\\n  }\\n\\n  function _setConnext(address _connext) internal {\\n    emit ConnextChanged(_connext, address(connext));\\n    connext = IConnext(_connext);\\n  }\\n\\n  function _setSpokeConnector(address _spokeConnector) internal {\\n    emit SpokeConnectorChanged(_spokeConnector, address(spokeConnector));\\n    spokeConnector = ISpokeConnector(_spokeConnector);\\n  }\\n\\n  function _setGelatoRelayer(address _gelatoRelayer) internal {\\n    emit GelatoRelayerChanged(_gelatoRelayer, address(gelatoRelayer));\\n    gelatoRelayer = _gelatoRelayer;\\n  }\\n\\n  function _setFeeCollector(address _feeCollector) internal {\\n    emit FeeCollectorChanged(_feeCollector, address(feeCollector));\\n    feeCollector = _feeCollector;\\n  }\\n}\\n\",\"keccak256\":\"0x46de461bc7394acde5c3302beb98744f0887e23d0109fc1147bd3cfbd50fbcc3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/helpers/RelayerProxyHub.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\nimport {ReentrancyGuard} from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport {GelatoRelayFeeCollector} from \\\"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../../../shared/ProposedOwnable.sol\\\";\\nimport {IRootManager} from \\\"../../../messaging/interfaces/IRootManager.sol\\\";\\nimport {RelayerProxy} from \\\"./RelayerProxy.sol\\\";\\n\\n/**\\n * @title RelayerProxyHub\\n * @author Connext Labs, Inc.\\n * @notice This is a temporary contract that wraps the Connext RootManager's propagate() function so that it can be called by\\n * Gelato's legacy relayer network. The contract stores native assets and pays them to the relayer on function call.\\n */\\ncontract RelayerProxyHub is RelayerProxy {\\n  // ============ Properties ============\\n\\n  IRootManager public rootManager;\\n\\n  // ============ Events ============\\n  event RootManagerChanged(address rootManager, address oldRootManager);\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new RelayerProxyHub instance.\\n   * @param _connext The address of the Connext on this domain.\\n   * @param _spokeConnector The address of the SpokeConnector on this domain.\\n   * @param _gelatoRelayer The address of the Gelato relayer on this domain.\\n   * @param _feeCollector The address of the Gelato Fee Collector on this domain.\\n   * @param _rootManager The address of the Root Manager on this domain.\\n   */\\n  constructor(\\n    address _connext,\\n    address _spokeConnector,\\n    address _gelatoRelayer,\\n    address _feeCollector,\\n    address _rootManager\\n  ) RelayerProxy(_connext, _spokeConnector, _gelatoRelayer, _feeCollector) {\\n    _setRootManager(_rootManager);\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Updates the RootManager address.\\n   * @param _rootManager The address of the new RootManager on this domain.\\n   */\\n  function setRootManager(address _rootManager) external onlyOwner definedAddress(_rootManager) {\\n    _setRootManager(_rootManager);\\n  }\\n\\n  // ============ External Functions ============\\n\\n  /**\\n   * @notice Wraps the call to propagate() on RootManager and pays either the caller or hardcoded relayer\\n   * from this contract's balance for completing the transaction.\\n   *\\n   * @param _connectors Array of connectors: should match exactly the array of `connectors` in storage;\\n   * used here to reduce gas costs, and keep them static regardless of number of supported domains.\\n   * @param _messageFees Array of fees in native token for an AMB if required\\n   * @param _encodedData Array of encodedData: extra params for each AMB if required\\n   * @param _relayerFee Fee to be paid to relayer\\n   */\\n  function propagate(\\n    address[] calldata _connectors,\\n    uint256[] calldata _messageFees,\\n    bytes[] memory _encodedData,\\n    uint256 _relayerFee\\n  ) external onlyRelayer nonReentrant {\\n    uint256 sum = 0;\\n    uint256 length = _connectors.length;\\n    for (uint32 i; i < length; ) {\\n      sum += _messageFees[i];\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    rootManager.propagate{value: sum}(_connectors, _messageFees, _encodedData);\\n    emit FundsDeducted(sum, address(this).balance);\\n    transferRelayerFee(_relayerFee);\\n  }\\n\\n  // ============ Internal Functions ============\\n  function _setRootManager(address _rootManager) internal {\\n    emit RootManagerChanged(_rootManager, address(rootManager));\\n    rootManager = IRootManager(_rootManager);\\n  }\\n}\\n\",\"keccak256\":\"0xebe46e3c1d59d364bed7f1fb84885e046366c637aab0895405d2afb1adc534b5\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/interfaces/IConnext.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {ExecuteArgs, TransferInfo, DestinationTransferStatus} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {SwapUtils} from \\\"../libraries/SwapUtils.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\n\\nimport {IStableSwap} from \\\"./IStableSwap.sol\\\";\\n\\nimport {IDiamondCut} from \\\"./IDiamondCut.sol\\\";\\nimport {IDiamondLoupe} from \\\"./IDiamondLoupe.sol\\\";\\n\\ninterface IConnext is IDiamondLoupe, IDiamondCut {\\n  // TokenFacet\\n  function canonicalToAdopted(bytes32 _key) external view returns (address);\\n\\n  function canonicalToAdopted(TokenId calldata _canonical) external view returns (address);\\n\\n  function adoptedToCanonical(address _adopted) external view returns (TokenId memory);\\n\\n  function canonicalToRepresentation(bytes32 _key) external view returns (address);\\n\\n  function canonicalToRepresentation(TokenId calldata _canonical) external view returns (address);\\n\\n  function representationToCanonical(address _adopted) external view returns (TokenId memory);\\n\\n  function getLocalAndAdoptedToken(bytes32 _id, uint32 _domain) external view returns (address, address);\\n\\n  function approvedAssets(bytes32 _key) external view returns (bool);\\n\\n  function approvedAssets(TokenId calldata _canonical) external view returns (bool);\\n\\n  function adoptedToLocalExternalPools(bytes32 _key) external view returns (IStableSwap);\\n\\n  function adoptedToLocalExternalPools(TokenId calldata _canonical) external view returns (IStableSwap);\\n\\n  function getTokenId(address _candidate) external view returns (TokenId memory);\\n\\n  function getCustodiedAmount(bytes32 _key) external view returns (uint256);\\n\\n  function setupAsset(\\n    TokenId calldata _canonical,\\n    uint8 _canonicalDecimals,\\n    string memory _representationName,\\n    string memory _representationSymbol,\\n    address _adoptedAssetId,\\n    address _stableSwapPool,\\n    uint256 _cap\\n  ) external returns (address);\\n\\n  function setupAssetWithDeployedRepresentation(\\n    TokenId calldata _canonical,\\n    address _representation,\\n    address _adoptedAssetId,\\n    address _stableSwapPool\\n  ) external returns (address);\\n\\n  function addStableSwapPool(TokenId calldata _canonical, address _stableSwapPool) external;\\n\\n  function updateLiquidityCap(TokenId calldata _canonical, uint256 _updated) external;\\n\\n  function removeAssetId(\\n    bytes32 _key,\\n    address _adoptedAssetId,\\n    address _representation\\n  ) external;\\n\\n  function removeAssetId(\\n    TokenId calldata _canonical,\\n    address _adoptedAssetId,\\n    address _representation\\n  ) external;\\n\\n  function updateDetails(\\n    TokenId calldata _canonical,\\n    string memory _name,\\n    string memory _symbol\\n  ) external;\\n\\n  // BaseConnextFacet\\n\\n  // BridgeFacet\\n  function routedTransfers(bytes32 _transferId) external view returns (address[] memory);\\n\\n  function transferStatus(bytes32 _transferId) external view returns (DestinationTransferStatus);\\n\\n  function remote(uint32 _domain) external view returns (address);\\n\\n  function domain() external view returns (uint256);\\n\\n  function nonce() external view returns (uint256);\\n\\n  function approvedSequencers(address _sequencer) external view returns (bool);\\n\\n  function xAppConnectionManager() external view returns (address);\\n\\n  function addConnextion(uint32 _domain, address _connext) external;\\n\\n  function addSequencer(address _sequencer) external;\\n\\n  function removeSequencer(address _sequencer) external;\\n\\n  function xcall(\\n    uint32 _destination,\\n    address _to,\\n    address _asset,\\n    address _delegate,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    bytes calldata _callData\\n  ) external payable returns (bytes32);\\n\\n  function xcallIntoLocal(\\n    uint32 _destination,\\n    address _to,\\n    address _asset,\\n    address _delegate,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    bytes calldata _callData\\n  ) external payable returns (bytes32);\\n\\n  function execute(ExecuteArgs calldata _args) external returns (bytes32 transferId);\\n\\n  function forceUpdateSlippage(TransferInfo calldata _params, uint256 _slippage) external;\\n\\n  function forceReceiveLocal(TransferInfo calldata _params) external;\\n\\n  function bumpTransfer(bytes32 _transferId) external payable;\\n\\n  function setXAppConnectionManager(address _xAppConnectionManager) external;\\n\\n  function enrollRemoteRouter(uint32 _domain, bytes32 _router) external;\\n\\n  function enrollCustom(\\n    uint32 _domain,\\n    bytes32 _id,\\n    address _custom\\n  ) external;\\n\\n  // InboxFacet\\n\\n  function handle(\\n    uint32 _origin,\\n    uint32 _nonce,\\n    bytes32 _sender,\\n    bytes memory _message\\n  ) external;\\n\\n  // ProposedOwnableFacet\\n\\n  function owner() external view returns (address);\\n\\n  function routerAllowlistRemoved() external view returns (bool);\\n\\n  function proposed() external view returns (address);\\n\\n  function proposedTimestamp() external view returns (uint256);\\n\\n  function routerAllowlistTimestamp() external view returns (uint256);\\n\\n  function delay() external view returns (uint256);\\n\\n  function paused() external view returns (bool);\\n\\n  function proposeRouterAllowlistRemoval() external;\\n\\n  function removeRouterAllowlist() external;\\n\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  function acceptProposedOwner() external;\\n\\n  function pause() external;\\n\\n  function unpause() external;\\n\\n  // RelayerFacet\\n  function approvedRelayers(address _relayer) external view returns (bool);\\n\\n  function relayerFeeVault() external view returns (address);\\n\\n  function setRelayerFeeVault(address _relayerFeeVault) external;\\n\\n  function addRelayer(address _relayer) external;\\n\\n  function removeRelayer(address _relayer) external;\\n\\n  // RoutersFacet\\n  function LIQUIDITY_FEE_NUMERATOR() external view returns (uint256);\\n\\n  function LIQUIDITY_FEE_DENOMINATOR() external view returns (uint256);\\n\\n  function getRouterApproval(address _router) external view returns (bool);\\n\\n  function getRouterRecipient(address _router) external view returns (address);\\n\\n  function getRouterOwner(address _router) external view returns (address);\\n\\n  function getProposedRouterOwner(address _router) external view returns (address);\\n\\n  function getProposedRouterOwnerTimestamp(address _router) external view returns (uint256);\\n\\n  function maxRoutersPerTransfer() external view returns (uint256);\\n\\n  function routerBalances(address _router, address _asset) external view returns (uint256);\\n\\n  function getRouterApprovalForPortal(address _router) external view returns (bool);\\n\\n  function approveRouter(address router) external;\\n\\n  function initializeRouter(address owner, address recipient) external;\\n\\n  function unapproveRouter(address router) external;\\n\\n  function setMaxRoutersPerTransfer(uint256 _newMaxRouters) external;\\n\\n  function setLiquidityFeeNumerator(uint256 _numerator) external;\\n\\n  function approveRouterForPortal(address _router) external;\\n\\n  function unapproveRouterForPortal(address _router) external;\\n\\n  function setRouterRecipient(address router, address recipient) external;\\n\\n  function proposeRouterOwner(address router, address proposed) external;\\n\\n  function acceptProposedRouterOwner(address router) external;\\n\\n  function addRouterLiquidityFor(\\n    uint256 _amount,\\n    address _local,\\n    address _router\\n  ) external payable;\\n\\n  function addRouterLiquidity(uint256 _amount, address _local) external payable;\\n\\n  function removeRouterLiquidityFor(\\n    uint256 _amount,\\n    address _local,\\n    address payable _to,\\n    address _router\\n  ) external;\\n\\n  function removeRouterLiquidity(\\n    uint256 _amount,\\n    address _local,\\n    address payable _to\\n  ) external;\\n\\n  // PortalFacet\\n  function getAavePortalDebt(bytes32 _transferId) external view returns (uint256);\\n\\n  function getAavePortalFeeDebt(bytes32 _transferId) external view returns (uint256);\\n\\n  function aavePool() external view returns (address);\\n\\n  function aavePortalFee() external view returns (uint256);\\n\\n  function setAavePool(address _aavePool) external;\\n\\n  function setAavePortalFee(uint256 _aavePortalFeeNumerator) external;\\n\\n  function repayAavePortal(\\n    TransferInfo calldata _params,\\n    uint256 _backingAmount,\\n    uint256 _feeAmount,\\n    uint256 _maxIn\\n  ) external;\\n\\n  function repayAavePortalFor(\\n    TransferInfo calldata _params,\\n    uint256 _backingAmount,\\n    uint256 _feeAmount\\n  ) external;\\n\\n  // StableSwapFacet\\n  function getSwapStorage(bytes32 canonicalId) external view returns (SwapUtils.Swap memory);\\n\\n  function getSwapLPToken(bytes32 canonicalId) external view returns (address);\\n\\n  function getSwapA(bytes32 canonicalId) external view returns (uint256);\\n\\n  function getSwapAPrecise(bytes32 canonicalId) external view returns (uint256);\\n\\n  function getSwapToken(bytes32 canonicalId, uint8 index) external view returns (IERC20);\\n\\n  function getSwapTokenIndex(bytes32 canonicalId, address tokenAddress) external view returns (uint8);\\n\\n  function getSwapTokenBalance(bytes32 canonicalId, uint8 index) external view returns (uint256);\\n\\n  function getSwapVirtualPrice(bytes32 canonicalId) external view returns (uint256);\\n\\n  function calculateSwap(\\n    bytes32 canonicalId,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapTokenAmount(\\n    bytes32 canonicalId,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) external view returns (uint256);\\n\\n  function calculateRemoveSwapLiquidity(bytes32 canonicalId, uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveSwapLiquidityOneToken(\\n    bytes32 canonicalId,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) external view returns (uint256);\\n\\n  function getSwapAdminBalance(bytes32 canonicalId, uint256 index) external view returns (uint256);\\n\\n  function swap(\\n    bytes32 canonicalId,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    bytes32 canonicalId,\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    bytes32 canonicalId,\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function addSwapLiquidity(\\n    bytes32 canonicalId,\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeSwapLiquidity(\\n    bytes32 canonicalId,\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeSwapLiquidityOneToken(\\n    bytes32 canonicalId,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeSwapLiquidityImbalance(\\n    bytes32 canonicalId,\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  // SwapAdminFacet\\n\\n  function initializeSwap(\\n    bytes32 _canonicalId,\\n    IERC20[] memory _pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 _a,\\n    uint256 _fee,\\n    uint256 _adminFee\\n  ) external;\\n\\n  function withdrawSwapAdminFees(bytes32 canonicalId) external;\\n\\n  function setSwapAdminFee(bytes32 canonicalId, uint256 newAdminFee) external;\\n\\n  function setSwapFee(bytes32 canonicalId, uint256 newSwapFee) external;\\n\\n  function rampA(\\n    bytes32 canonicalId,\\n    uint256 futureA,\\n    uint256 futureTime\\n  ) external;\\n\\n  function stopRampA(bytes32 canonicalId) external;\\n\\n  function lpTokenTargetAddress() external view returns (address);\\n\\n  function updateLpTokenTarget(address newAddress) external;\\n}\\n\",\"keccak256\":\"0x1b21b65dce0f84a5f3d82ae358960f03d40e0bbb9da4d4ad69fc44a8eb12a488\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IDiamondLoupe.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n  /// These functions are expected to be called frequently\\n  /// by tools.\\n\\n  struct Facet {\\n    address facetAddress;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Gets all facet addresses and their four byte function selectors.\\n  /// @return facets_ Facet\\n  function facets() external view returns (Facet[] memory facets_);\\n\\n  /// @notice Gets all the function selectors supported by a specific facet.\\n  /// @param _facet The facet address.\\n  /// @return facetFunctionSelectors_\\n  function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n  /// @notice Get all the facet addresses used by a diamond.\\n  /// @return facetAddresses_\\n  function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n  /// @notice Gets the facet that supports the given selector.\\n  /// @dev If facet is not found return address(0).\\n  /// @param _functionSelector The function selector.\\n  /// @return facetAddress_ The facet address.\\n  function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\",\"keccak256\":\"0xc408c13dc42d9526b1f292bad3f3915efa15c2133f509d90a45422b5f6cf829c\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IRootManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\ninterface IRootManager {\\n  /**\\n   * @notice This is called by relayers to generate + send the mixed root from mainnet via AMB to\\n   * spoke domains.\\n   * @dev This must read information for the root from the registered AMBs.\\n   */\\n  function propagate(\\n    address[] calldata _connectors,\\n    uint256[] calldata _fees,\\n    bytes[] memory _encodedData\\n  ) external payable;\\n\\n  /**\\n   * @notice Called by the connectors for various domains on the hub to aggregate their latest\\n   * inbound root.\\n   * @dev This must read information for the root from the registered AMBs\\n   */\\n  function aggregate(uint32 _domain, bytes32 _outbound) external;\\n}\\n\",\"keccak256\":\"0xa895dfaa4baad37a636e7e7e7da72a0a4badfd2d3d8256f975e5101cd5a98236\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":10691,"contract":"contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub","label":"_status","offset":0,"slot":"3","type":"t_uint256"},{"astId":24163,"contract":"contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub","label":"gelatoRelayer","offset":0,"slot":"4","type":"t_address"},{"astId":24165,"contract":"contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub","label":"feeCollector","offset":0,"slot":"5","type":"t_address"},{"astId":24168,"contract":"contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub","label":"connext","offset":0,"slot":"6","type":"t_contract(IConnext)26846"},{"astId":24171,"contract":"contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub","label":"spokeConnector","offset":0,"slot":"7","type":"t_contract(ISpokeConnector)24154"},{"astId":24175,"contract":"contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub","label":"allowedRelayer","offset":0,"slot":"8","type":"t_mapping(t_address,t_bool)"},{"astId":24729,"contract":"contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub","label":"rootManager","offset":0,"slot":"9","type":"t_contract(IRootManager)47888"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(IConnext)26846":{"encoding":"inplace","label":"contract IConnext","numberOfBytes":"20"},"t_contract(IRootManager)47888":{"encoding":"inplace","label":"contract IRootManager","numberOfBytes":"20"},"t_contract(ISpokeConnector)24154":{"encoding":"inplace","label":"contract ISpokeConnector","numberOfBytes":"20"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"ConnextChanged(address,address)":{"notice":"Emitted when Connext contract address is updated by admin"},"FeeCollectorChanged(address,address)":{"notice":"Emitted when FeeCollectorChanged address is updated by admin"},"FundsDeducted(uint256,uint256)":{"notice":"Emitted when funds removed from the contract by admin"},"FundsReceived(uint256,uint256)":{"notice":"Emitted when funds added to the contract"},"GelatoRelayerChanged(address,address)":{"notice":"Emitted when GelatoRelayer address is updated by admin"},"RelayerAdded(address)":{"notice":"Emitted when a new relayer is allowlisted by admin"},"RelayerRemoved(address)":{"notice":"Emitted when a relayer is removed from allowlist by admin"},"SpokeConnectorChanged(address,address)":{"notice":"Emitted when SpokeConnector contract address is updated by admin"}},"kind":"user","methods":{"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"addRelayer(address)":{"notice":"Adds a relayer address to the allowed relayers mapping."},"constructor":{"notice":"Creates a new RelayerProxyHub instance."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),uint256)":{"notice":"Wraps the call to execute() on Connext and pays either the caller or hardcoded relayer from this contract's balance for completing the transaction."},"owner()":{"notice":"Returns the address of the current owner."},"propagate(address[],uint256[],bytes[],uint256)":{"notice":"Wraps the call to propagate() on RootManager and pays either the caller or hardcoded relayer from this contract's balance for completing the transaction."},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256,uint256)":{"notice":"Wraps the call to proveAndProcess() on SpokeConnector and pays either the caller or hardcoded relayer from this contract's balance for completing the transaction."},"removeRelayer(address)":{"notice":"Removes a relayer address from the allowed relayers mapping."},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"send(bytes,uint256,uint256)":{"notice":"Wraps the call to send() on SpokeConnector and pays either the caller or hardcoded relayer from this contract's balance for completing the transaction."},"setConnext(address)":{"notice":"Updates the Connext address on this contract."},"setFeeCollector(address)":{"notice":"Updates the Gelato Fee Collector address on this contract."},"setGelatoRelayer(address)":{"notice":"Updates the Gelato relayer address on this contract."},"setRootManager(address)":{"notice":"Updates the RootManager address."},"setSpokeConnector(address)":{"notice":"Updates the SpokeConnector address on this contract."},"withdraw()":{"notice":"Withdraws all funds stored on this contract to msg.sender."}},"notice":"This is a temporary contract that wraps the Connext RootManager's propagate() function so that it can be called by Gelato's legacy relayer network. The contract stores native assets and pays them to the relayer on function call.","version":1}}},"contracts/core/connext/helpers/StableSwap.sol":{"StableSwap":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"fees","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"invariant","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAdminFee","type":"uint256"}],"name":"NewAdminFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newSwapFee","type":"uint256"}],"name":"NewSwapFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newWithdrawFee","type":"uint256"}],"name":"NewWithdrawFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"initialTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"futureTime","type":"uint256"}],"name":"RampA","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"}],"name":"RemoveLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"fees","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"invariant","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"}],"name":"RemoveLiquidityImbalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"lpTokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"boughtId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensBought","type":"uint256"}],"name":"RemoveLiquidityOne","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"currentA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"StopRampA","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"initialA","type":"uint256"},{"internalType":"uint256","name":"futureA","type":"uint256"},{"internalType":"uint256","name":"initialATime","type":"uint256"},{"internalType":"uint256","name":"futureATime","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"uint256","name":"adminFee","type":"uint256"},{"internalType":"contract LPToken","name":"lpToken","type":"address"},{"internalType":"contract IERC20[]","name":"pooledTokens","type":"address[]"},{"internalType":"uint256[]","name":"tokenPrecisionMultipliers","type":"uint256[]"},{"internalType":"uint256[]","name":"balances","type":"uint256[]"},{"internalType":"uint256[]","name":"adminFees","type":"uint256[]"}],"indexed":false,"internalType":"struct SwapUtilsExternal.Swap","name":"swap","type":"tuple"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"SwapInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensSold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":false,"internalType":"uint128","name":"soldId","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"boughtId","type":"uint128"}],"name":"TokenSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256","name":"minToMint","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"calculateRemoveLiquidity","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint8","name":"tokenIndex","type":"uint8"}],"name":"calculateRemoveLiquidityOneToken","outputs":[{"internalType":"uint256","name":"availableTokenAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"tokenIndexFrom","type":"uint8"},{"internalType":"uint8","name":"tokenIndexTo","type":"uint8"},{"internalType":"uint256","name":"dx","type":"uint256"}],"name":"calculateSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"assetIn","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"calculateSwapFromAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"tokenIndexFrom","type":"uint8"},{"internalType":"uint8","name":"tokenIndexTo","type":"uint8"},{"internalType":"uint256","name":"dy","type":"uint256"}],"name":"calculateSwapOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"assetIn","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"calculateSwapOutFromAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bool","name":"deposit","type":"bool"}],"name":"calculateTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAPrecise","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAdminBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"index","type":"uint8"}],"name":"getToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"index","type":"uint8"}],"name":"getTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getTokenIndex","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVirtualPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"_pooledTokens","type":"address[]"},{"internalType":"uint8[]","name":"decimals","type":"uint8[]"},{"internalType":"string","name":"lpTokenName","type":"string"},{"internalType":"string","name":"lpTokenSymbol","type":"string"},{"internalType":"uint256","name":"_a","type":"uint256"},{"internalType":"uint256","name":"_fee","type":"uint256"},{"internalType":"uint256","name":"_adminFee","type":"uint256"},{"internalType":"address","name":"lpTokenTargetAddress","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"futureA","type":"uint256"},{"internalType":"uint256","name":"futureTime","type":"uint256"}],"name":"rampA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256[]","name":"minAmounts","type":"uint256[]"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256","name":"maxBurnAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityImbalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint8","name":"tokenIndex","type":"uint8"},{"internalType":"uint256","name":"minAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityOneToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAdminFee","type":"uint256"}],"name":"setAdminFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapFee","type":"uint256"}],"name":"setSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopRampA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"tokenIndexFrom","type":"uint8"},{"internalType":"uint8","name":"tokenIndexTo","type":"uint8"},{"internalType":"uint256","name":"dx","type":"uint256"},{"internalType":"uint256","name":"minDy","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"assetIn","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address","name":"assetIn","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"swapStorage","outputs":[{"internalType":"uint256","name":"initialA","type":"uint256"},{"internalType":"uint256","name":"futureA","type":"uint256"},{"internalType":"uint256","name":"initialATime","type":"uint256"},{"internalType":"uint256","name":"futureATime","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"uint256","name":"adminFee","type":"uint256"},{"internalType":"contract LPToken","name":"lpToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAdminFees","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Most of the logic is stored as a library `SwapUtils` for the sake of reducing contract's deployment size.","kind":"dev","methods":{"addLiquidity(uint256[],uint256,uint256)":{"params":{"amounts":"the amounts of each token to add, in their native precision","deadline":"latest timestamp to accept this transaction","minToMint":"the minimum LP tokens adding this amount of liquidity should mint, otherwise revert. Handy for front-running mitigation"},"returns":{"_0":"amount of LP token user minted and received"}},"calculateRemoveLiquidity(uint256)":{"params":{"amount":"the amount of LP tokens that would be burned on withdrawal"},"returns":{"_0":"array of token balances that the user will receive"}},"calculateRemoveLiquidityOneToken(uint256,uint8)":{"params":{"tokenAmount":"the amount of LP token to burn","tokenIndex":"index of which token will be withdrawn"},"returns":{"availableTokenAmount":"calculated amount of underlying token available to withdraw"}},"calculateSwap(uint8,uint8,uint256)":{"params":{"dx":"the amount of tokens the user wants to sell. If the token charges a fee on transfers, use the amount that gets transferred after the fee.","tokenIndexFrom":"the token the user wants to sell","tokenIndexTo":"the token the user wants to buy"},"returns":{"_0":"amount of tokens the user will receive"}},"calculateSwapFromAddress(address,address,uint256)":{"params":{"amountIn":"the amount of tokens the user wants to swap from","assetIn":"the token the user wants to swap from","assetOut":"the token the user wants to swap to"},"returns":{"_0":"amount of tokens the user will receive"}},"calculateSwapOut(uint8,uint8,uint256)":{"params":{"dy":"the amount of tokens the user wants to buy","tokenIndexFrom":"the token the user wants to sell","tokenIndexTo":"the token the user wants to buy"},"returns":{"_0":"amount of tokens the user have to transfer"}},"calculateSwapOutFromAddress(address,address,uint256)":{"params":{"amountOut":"the amount of tokens the user wants to swap to","assetIn":"the token the user wants to swap from","assetOut":"the token the user wants to swap to"},"returns":{"_0":"amount of tokens the user will receive"}},"calculateTokenAmount(uint256[],bool)":{"details":"This shouldn't be used outside frontends for user estimates.","params":{"amounts":"an array of token amounts to deposit or withdrawal, corresponding to pooledTokens. The amount should be in each pooled token's native precision. If a token charges a fee on transfers, use the amount that gets transferred after the fee.","deposit":"whether this is a deposit or a withdrawal"},"returns":{"_0":"token amount the user will receive"}},"getA()":{"details":"See the StableSwap paper for details","returns":{"_0":"A parameter"}},"getAPrecise()":{"details":"See the StableSwap paper for details","returns":{"_0":"A parameter in its raw precision form"}},"getAdminBalance(uint256)":{"params":{"index":"Index of the pooled token"},"returns":{"_0":"admin's token balance in the token's precision"}},"getToken(uint8)":{"params":{"index":"the index of the token"},"returns":{"_0":"address of the token at given index"}},"getTokenBalance(uint8)":{"params":{"index":"the index of the token"},"returns":{"_0":"current balance of the pooled token at given index with token's native precision"}},"getTokenIndex(address)":{"params":{"tokenAddress":"address of the token"},"returns":{"_0":"the index of the given token address"}},"getVirtualPrice()":{"returns":{"_0":"the virtual price, scaled to the POOL_PRECISION_DECIMALS"}},"initialize(address[],uint8[],string,string,uint256,uint256,uint256,address)":{"params":{"_a":"the amplification coefficient * n ** (n - 1). See the StableSwap paper for details","_adminFee":"default adminFee to be initialized with","_fee":"default swap fee to be initialized with","_pooledTokens":"an array of ERC20s this pool will accept","decimals":"the decimals to use for each pooled token, eg 8 for WBTC. Cannot be larger than POOL_PRECISION_DECIMALS","lpTokenName":"the long-form name of the token to be deployed","lpTokenSymbol":"the short symbol for the token to be deployed","lpTokenTargetAddress":"the address of an existing LPToken contract to use as a target"}},"owner()":{"details":"Returns the address of the current owner."},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"rampA(uint256,uint256)":{"params":{"futureA":"the new A to ramp towards","futureTime":"timestamp when the new A should be reached"}},"removeLiquidity(uint256,uint256[],uint256)":{"details":"Liquidity can always be removed, even when the pool is paused.","params":{"amount":"the amount of LP tokens to burn","deadline":"latest timestamp to accept this transaction","minAmounts":"the minimum amounts of each token in the pool        acceptable for this burn. Useful as a front-running mitigation"},"returns":{"_0":"amounts of tokens user received"}},"removeLiquidityImbalance(uint256[],uint256,uint256)":{"params":{"amounts":"how much of each token to withdraw","deadline":"latest timestamp to accept this transaction","maxBurnAmount":"the max LP token provider is willing to pay to remove liquidity. Useful as a front-running mitigation."},"returns":{"_0":"amount of LP tokens burned"}},"removeLiquidityOneToken(uint256,uint8,uint256,uint256)":{"params":{"deadline":"latest timestamp to accept this transaction","minAmount":"the minimum amount to withdraw, otherwise revert","tokenAmount":"the amount of the token you want to receive","tokenIndex":"the index of the token you want to receive"},"returns":{"_0":"amount of chosen token user received"}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setAdminFee(uint256)":{"params":{"newAdminFee":"new admin fee to be applied on future transactions"}},"setSwapFee(uint256)":{"params":{"newSwapFee":"new swap fee to be applied on future transactions"}},"swap(uint8,uint8,uint256,uint256,uint256)":{"params":{"deadline":"latest timestamp to accept this transaction","dx":"the amount of tokens the user wants to swap from","minDy":"the min amount the user would like to receive, or revert.","tokenIndexFrom":"the token the user wants to swap from","tokenIndexTo":"the token the user wants to swap to"}},"swapExact(uint256,address,address,uint256,uint256)":{"params":{"amountIn":"the amount of tokens the user wants to swap from","assetIn":"the token the user wants to swap from","assetOut":"the token the user wants to swap to","minAmountOut":"the min amount of tokens the user wants to swap to"}},"swapExactOut(uint256,address,address,uint256,uint256)":{"params":{"amountOut":"the amount of tokens the user wants to swap to","assetIn":"the token the user wants to swap from","assetOut":"the token the user wants to swap to","maxAmountIn":"the max amount of tokens the user wants to swap from"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"title":"Swap - A StableSwap implementation in solidity.","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{"contracts/core/connext/libraries/SwapUtilsExternal.sol":{"SwapUtilsExternal":[{"length":20,"start":1699},{"length":20,"start":1873},{"length":20,"start":2048},{"length":20,"start":2226},{"length":20,"start":2366},{"length":20,"start":2543},{"length":20,"start":2720},{"length":20,"start":2898},{"length":20,"start":3061},{"length":20,"start":3311},{"length":20,"start":3508},{"length":20,"start":3817},{"length":20,"start":3901},{"length":20,"start":4039},{"length":20,"start":4314},{"length":20,"start":6428},{"length":20,"start":6638},{"length":20,"start":6697},{"length":20,"start":6756},{"length":20,"start":6808},{"length":20,"start":6887},{"length":20,"start":7013},{"length":20,"start":7306}]}},"object":"608060405234801561001057600080fd5b50612ce5806100206000396000f3fe6080604052600436106101f95760003560e01c80638456cb591161010d578063c4db7fa0116100a0578063e6ab28061161006f578063e6ab2806146105d1578063ef0a712f146105f1578063f2fad2b614610611578063f2fde38b14610631578063f9a15fb91461065157600080fd5b8063c4db7fa01461057f578063d460f0a214610594578063d46300fd146105a7578063e25aa5fa146105bc57600080fd5b806391695586116100dc57806391695586146104ff57806391ceb3eb1461051f578063a95b089f1461053f578063b28cb6dc1461055f57600080fd5b80638456cb591461048c57806384cdd9bc146104a15780638beb60b6146104c15780638da5cb5b146104e157600080fd5b80635428c1171161019057806366c0bd241161015f57806366c0bd24146103cd5780636b1dc08b146103ff578063715018a61461041f5780637f41e7ef1461043457806382b866001461045457600080fd5b80635428c117146102ff578063593d132c146103125780635c975abb146103325780635fd65f0f1461035557600080fd5b806334e19907116101cc57806334e199071461028a5780633e3a1560146102aa5780633f4ba83a146102ca5780634d49e87d146102df57600080fd5b80630419b45a146101fe5780630ba819591461021557806331cd52b01461023d578063342a87a11461026a575b600080fd5b34801561020a57600080fd5b50610213610671565b005b34801561022157600080fd5b5061022a610718565b6040519081526020015b60405180910390f35b34801561024957600080fd5b5061025d610258366004612170565b610795565b60405161023491906121c3565b34801561027657600080fd5b5061022a610285366004612218565b610869565b34801561029657600080fd5b506102136102a5366004612244565b6108f9565b3480156102b657600080fd5b5061022a6102c536600461225d565b61096f565b3480156102d657600080fd5b50610213610a2e565b3480156102eb57600080fd5b5061022a6102fa366004612298565b610a3e565b61022a61030d366004612309565b610aaf565b34801561031e57600080fd5b5061021361032d36600461235b565b610ba9565b34801561033e57600080fd5b5060655460ff166040519015158152602001610234565b34801561036157600080fd5b5060fb5460fc5460fd5460fe5460ff54610100546101015461038f969594939291906001600160a01b031687565b604080519788526020880196909652948601939093526060850191909152608084015260a08301526001600160a01b031660c082015260e001610234565b3480156103d957600080fd5b506103ed6103e836600461237d565b610c26565b60405160ff9091168152602001610234565b34801561040b57600080fd5b5061022a61041a36600461239a565b610c9e565b34801561042b57600080fd5b50610213610d38565b34801561044057600080fd5b5061022a61044f3660046123d6565b610d4a565b34801561046057600080fd5b5061047461046f366004612417565b610dfd565b6040516001600160a01b039091168152602001610234565b34801561049857600080fd5b50610213610e77565b3480156104ad57600080fd5b5061022a6104bc366004612298565b610e87565b3480156104cd57600080fd5b506102136104dc366004612244565b610ef8565b3480156104ed57600080fd5b506033546001600160a01b0316610474565b34801561050b57600080fd5b5061022a61051a366004612432565b610f3f565b34801561052b57600080fd5b5061022a61053a366004612417565b611012565b34801561054b57600080fd5b5061022a61055a36600461239a565b611089565b34801561056b57600080fd5b5061021361057a366004612630565b6110dc565b34801561058b57600080fd5b506102136118de565b61022a6105a2366004612309565b61194b565b3480156105b357600080fd5b5061022a6119f0565b3480156105c857600080fd5b5061022a611a2b565b3480156105dd57600080fd5b5061022a6105ec366004612719565b611a66565b3480156105fd57600080fd5b5061022a61060c366004612244565b611aa7565b34801561061d57600080fd5b5061025d61062c366004612244565b611b25565b34801561063d57600080fd5b5061021361064c36600461237d565b611ba7565b34801561065d57600080fd5b5061022a61066c3660046123d6565b611c20565b610679611c8c565b610681611ce5565b73__$0399e8fdab399fb8f200f3895472e3787c$__639cbd240660fb6106af6033546001600160a01b031690565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b1580156106f457600080fd5b505af4158015610708573d6000803e3d6000fd5b50505050610716600160c955565b565b60405163f43dee5360e01b815260fb600482015260009073__$0399e8fdab399fb8f200f3895472e3787c$__9063f43dee53906024015b602060405180830381865af415801561076c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107909190612770565b905090565b606061079f611c8c565b6107a7611d46565b81804211156107d15760405162461bcd60e51b81526004016107c890612789565b60405180910390fd5b604051631beec94360e21b815273__$0399e8fdab399fb8f200f3895472e3787c$__90636fbb250c9061080f9060fb908a908a908a906004016127e5565b600060405180830381865af415801561082c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108549190810190612805565b915050610861600160c955565b949350505050565b6040516384eeef2760e01b815260fb60048201526024810183905260ff8216604482015260009073__$0399e8fdab399fb8f200f3895472e3787c$__906384eeef2790606401602060405180830381865af41580156108cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f09190612770565b90505b92915050565b610901611ce5565b604051632cecccb560e11b815260fb60048201526024810182905273__$0399e8fdab399fb8f200f3895472e3787c$__906359d9996a906044015b60006040518083038186803b15801561095457600080fd5b505af4158015610968573d6000803e3d6000fd5b5050505050565b6000610979611c8c565b610981611d46565b81804211156109a25760405162461bcd60e51b81526004016107c890612789565b604051632b8ffbb760e21b815260fb60048201526024810187905260ff861660448201526064810185905273__$0399e8fdab399fb8f200f3895472e3787c$__9063ae3feedc906084015b602060405180830381865af4158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108549190612770565b610a36611ce5565b610716611d8c565b6000610a48611c8c565b610a50611d46565b8180421115610a715760405162461bcd60e51b81526004016107c890612789565b6040516333a43f9560e11b815273__$0399e8fdab399fb8f200f3895472e3787c$__906367487f2a906109ed9060fb908a908a908a90600401612896565b6000610ab9611c8c565b610ac1611d46565b8180421115610ae25760405162461bcd60e51b81526004016107c890612789565b6000610aed87610c26565b90506000610afa87610c26565b60405163703c02d560e11b815260fb600482015260ff808516602483015282166044820152606481018b90526084810188905290915073__$0399e8fdab399fb8f200f3895472e3787c$__9063e07805aa9060a4015b602060405180830381865af4158015610b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b919190612770565b9350505050610ba0600160c955565b95945050505050565b610bb1611ce5565b604051633f1e106160e21b815260fb6004820152602481018390526044810182905273__$0399e8fdab399fb8f200f3895472e3787c$__9063fc7841849060640160006040518083038186803b158015610c0a57600080fd5b505af4158015610c1e573d6000803e3d6000fd5b505050505050565b6001600160a01b03811660008181526101066020526040812054909160ff90911690610c5182610dfd565b6001600160a01b0316146108f35760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b60448201526064016107c8565b604051632e4be8d760e21b815260fb600482015260ff8085166024830152831660448201526064810182905260009073__$0399e8fdab399fb8f200f3895472e3787c$__9063b92fa35c906084015b602060405180830381865af4158015610d0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2e9190612770565b90505b9392505050565b610d40611ce5565b6107166000611dde565b600080610d5685610c26565b90506000610d6385610c26565b604051632f4998ad60e01b815260fb600482015260ff8085166024830152821660448201526064810186905290915073__$0399e8fdab399fb8f200f3895472e3787c$__90632f4998ad906084015b602060405180830381865af4158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df39190612770565b9695505050505050565b6101025460009060ff831610610e445760405162461bcd60e51b815260206004820152600c60248201526b4f7574206f662072616e676560a01b60448201526064016107c8565b610102805460ff8416908110610e5c57610e5c6128c1565b6000918252602090912001546001600160a01b031692915050565b610e7f611ce5565b610716611e30565b6000610e91611c8c565b610e99611d46565b8180421115610eba5760405162461bcd60e51b81526004016107c890612789565b60405163077b83d360e41b815273__$0399e8fdab399fb8f200f3895472e3787c$__906377b83d30906109ed9060fb908a908a908a90600401612896565b610f00611ce5565b6040516308bbaa2360e01b815260fb60048201526024810182905273__$0399e8fdab399fb8f200f3895472e3787c$__906308bbaa239060440161093c565b6000610f49611c8c565b610f51611d46565b8180421115610f725760405162461bcd60e51b81526004016107c890612789565b60405163f204293960e01b815260fb600482015260ff808916602483015287166044820152606481018690526084810185905273__$0399e8fdab399fb8f200f3895472e3787c$__9063f20429399060a401602060405180830381865af4158015610fe1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110059190612770565b915050610ba0600160c955565b6101025460009060ff83161061105f5760405162461bcd60e51b8152602060048201526012602482015271496e646578206f7574206f662072616e676560701b60448201526064016107c8565b610104805460ff8416908110611077576110776128c1565b90600052602060002001549050919050565b604051632f4998ad60e01b815260fb600482015260ff8085166024830152831660448201526064810182905260009073__$0399e8fdab399fb8f200f3895472e3787c$__90632f4998ad90608401610ced565b600054610100900460ff16158080156110fc5750600054600160ff909116105b806111165750303b158015611116575060005460ff166001145b6111795760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107c8565b6000805460ff19166001179055801561119c576000805461ff0019166101001790555b6111a4611e6d565b6111ac611eac565b88516111ba600160026128ed565b81116112125760405162461bcd60e51b815260206004820152602160248201527f5f706f6f6c6564546f6b656e732e6c656e67746820696e73756666696369656e6044820152601d60fa1b60648201526084016107c8565b61121e60106001612900565b811061126c5760405162461bcd60e51b815260206004820152601e60248201527f5f706f6f6c6564546f6b656e732e6c656e67746820746f6f206c61726765000060448201526064016107c8565b885181146112bc5760405162461bcd60e51b815260206004820152601f60248201527f5f706f6f6c6564546f6b656e7320646563696d616c73206d69736d617463680060448201526064016107c8565b6000895167ffffffffffffffff8111156112d8576112d861247f565b604051908082528060200260200182016040528015611301578160200160208202803683370190505b50905060005b8281101561157f5780156113e45761010660008d838151811061132c5761132c6128c1565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161580156113a557508b818151811061136d5761136d6128c1565b60200260200101516001600160a01b03168c600081518110611391576113916128c1565b60200260200101516001600160a01b031614155b6113e45760405162461bcd60e51b815260206004820152601060248201526f4475706c696361746520746f6b656e7360801b60448201526064016107c8565b60006001600160a01b03168c8281518110611401576114016128c1565b60200260200101516001600160a01b03160361145f5760405162461bcd60e51b815260206004820152601d60248201527f546865203020616464726573732069736e277420616e204552432d323000000060448201526064016107c8565b61146b60126001612913565b60ff168b8281518110611480576114806128c1565b602002602001015160ff16106114d85760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e20646563696d616c732065786365656473206d617800000000000060448201526064016107c8565b8a81815181106114ea576114ea6128c1565b602002602001015160126114fe919061292c565b61150c9060ff16600a612a29565b82828151811061151e5761151e6128c1565b6020026020010181815250508061010660008e8481518110611542576115426128c1565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191660ff92909216919091179055600101611307565b50620f424087106115c75760405162461bcd60e51b81526020600482015260126024820152715f612065786365656473206d6178696d756d60701b60448201526064016107c8565b6305f5e10086106116115760405162461bcd60e51b81526020600482015260146024820152735f6665652065786365656473206d6178696d756d60601b60448201526064016107c8565b6402540be40085106116655760405162461bcd60e51b815260206004820152601960248201527f5f61646d696e4665652065786365656473206d6178696d756d0000000000000060448201526064016107c8565b600061167085611edb565b60405163266c45bb60e11b81529091506001600160a01b03821690634cd88b76906116a1908d908d90600401612a7b565b6020604051808303816000875af11580156116c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e49190612aa0565b6117305760405162461bcd60e51b815260206004820152601c60248201527f636f756c64206e6f7420696e6974206c70546f6b656e20636c6f6e650000000060448201526064016107c8565b61010180546001600160a01b0319166001600160a01b0383161790558b51611760906101029060208f019061206f565b508151611775906101039060208501906120d4565b508267ffffffffffffffff81111561178f5761178f61247f565b6040519080825280602002602001820160405280156117b8578160200160208202803683370190505b5080516117ce91610104916020909101906120d4565b508267ffffffffffffffff8111156117e8576117e861247f565b604051908082528060200260200182016040528015611811578160200160208202803683370190505b50805161182791610105916020909101906120d4565b50611833606489612abd565b60fb55611841606489612abd565b60fc5560ff8790556101008690556040517f8ba0c15f86c46b5773beb451b4d8d5744f7642ab1004c0a7e59e215710fb3aba906118829060fb903390612b52565b60405180910390a150505080156118d3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6118e6611ce5565b60405163e5b994c560e01b815260fb600482015273__$0399e8fdab399fb8f200f3895472e3787c$__9063e5b994c59060240160006040518083038186803b15801561193157600080fd5b505af4158015611945573d6000803e3d6000fd5b50505050565b6000611955611c8c565b61195d611d46565b818042111561197e5760405162461bcd60e51b81526004016107c890612789565b600061198987610c26565b9050600061199687610c26565b60405163f204293960e01b815260fb600482015260ff808516602483015282166044820152606481018b90526084810188905290915073__$0399e8fdab399fb8f200f3895472e3787c$__9063f20429399060a401610b50565b604051631158dafb60e11b815260fb600482015260009073__$0399e8fdab399fb8f200f3895472e3787c$__906322b1b5f69060240161074f565b604051638be1e52360e01b815260fb600482015260009073__$0399e8fdab399fb8f200f3895472e3787c$__90638be1e5239060240161074f565b6040516322b2b60760e01b815260009073__$0399e8fdab399fb8f200f3895472e3787c$__906322b2b60790610ced9060fb90889088908890600401612c37565b604051631ce9046f60e01b815260fb60048201526024810182905260009073__$0399e8fdab399fb8f200f3895472e3787c$__90631ce9046f90604401602060405180830381865af4158015611b01573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f39190612770565b604051638cc122bb60e01b815260fb60048201526024810182905260609073__$0399e8fdab399fb8f200f3895472e3787c$__90638cc122bb90604401600060405180830381865af4158015611b7f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108f39190810190612805565b611baf611ce5565b6001600160a01b038116611c145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107c8565b611c1d81611dde565b50565b600080611c2c85610c26565b90506000611c3985610c26565b604051632e4be8d760e21b815260fb600482015260ff8085166024830152821660448201526064810186905290915073__$0399e8fdab399fb8f200f3895472e3787c$__9063b92fa35c90608401610db2565b600260c95403611cde5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107c8565b600260c955565b6033546001600160a01b031633146107165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107c8565b600160c955565b60655460ff16156107165760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107c8565b611d94611f75565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611e38611d46565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611dc13390565b600054610100900460ff16611e945760405162461bcd60e51b81526004016107c890612c64565b611e9c611fbe565b611ea4611fe5565b610716612015565b600054610100900460ff16611ed35760405162461bcd60e51b81526004016107c890612c64565b610716612048565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116611f705760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b60448201526064016107c8565b919050565b60655460ff166107165760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107c8565b600054610100900460ff166107165760405162461bcd60e51b81526004016107c890612c64565b600054610100900460ff1661200c5760405162461bcd60e51b81526004016107c890612c64565b61071633611dde565b600054610100900460ff1661203c5760405162461bcd60e51b81526004016107c890612c64565b6065805460ff19169055565b600054610100900460ff16611d3f5760405162461bcd60e51b81526004016107c890612c64565b8280548282559060005260206000209081019282156120c4579160200282015b828111156120c457825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061208f565b506120d092915061210f565b5090565b8280548282559060005260206000209081019282156120c4579160200282015b828111156120c45782518255916020019190600101906120f4565b5b808211156120d05760008155600101612110565b60008083601f84011261213657600080fd5b50813567ffffffffffffffff81111561214e57600080fd5b6020830191508360208260051b850101111561216957600080fd5b9250929050565b6000806000806060858703121561218657600080fd5b84359350602085013567ffffffffffffffff8111156121a457600080fd5b6121b087828801612124565b9598909750949560400135949350505050565b6020808252825182820181905260009190848201906040850190845b818110156121fb578351835292840192918401916001016121df565b50909695505050505050565b803560ff81168114611f7057600080fd5b6000806040838503121561222b57600080fd5b8235915061223b60208401612207565b90509250929050565b60006020828403121561225657600080fd5b5035919050565b6000806000806080858703121561227357600080fd5b8435935061228360208601612207565b93969395505050506040820135916060013590565b600080600080606085870312156122ae57600080fd5b843567ffffffffffffffff8111156122c557600080fd5b6122d187828801612124565b90989097506020870135966040013595509350505050565b6001600160a01b0381168114611c1d57600080fd5b8035611f70816122e9565b600080600080600060a0868803121561232157600080fd5b853594506020860135612333816122e9565b93506040860135612343816122e9565b94979396509394606081013594506080013592915050565b6000806040838503121561236e57600080fd5b50508035926020909101359150565b60006020828403121561238f57600080fd5b8135610d31816122e9565b6000806000606084860312156123af57600080fd5b6123b884612207565b92506123c660208501612207565b9150604084013590509250925092565b6000806000606084860312156123eb57600080fd5b83356123f6816122e9565b92506020840135612406816122e9565b929592945050506040919091013590565b60006020828403121561242957600080fd5b6108f082612207565b600080600080600060a0868803121561244a57600080fd5b61245386612207565b945061246160208701612207565b94979496505050506040830135926060810135926080909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156124be576124be61247f565b604052919050565b600067ffffffffffffffff8211156124e0576124e061247f565b5060051b60200190565b600082601f8301126124fb57600080fd5b8135602061251061250b836124c6565b612495565b82815260059290921b8401810191818101908684111561252f57600080fd5b8286015b84811015612553578035612546816122e9565b8352918301918301612533565b509695505050505050565b600082601f83011261256f57600080fd5b8135602061257f61250b836124c6565b82815260059290921b8401810191818101908684111561259e57600080fd5b8286015b84811015612553576125b381612207565b83529183019183016125a2565b600082601f8301126125d157600080fd5b813567ffffffffffffffff8111156125eb576125eb61247f565b6125fe601f8201601f1916602001612495565b81815284602083860101111561261357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b03121561264d57600080fd5b883567ffffffffffffffff8082111561266557600080fd5b6126718c838d016124ea565b995060208b013591508082111561268757600080fd5b6126938c838d0161255e565b985060408b01359150808211156126a957600080fd5b6126b58c838d016125c0565b975060608b01359150808211156126cb57600080fd5b506126d88b828c016125c0565b9550506080890135935060a0890135925060c089013591506126fc60e08a016122fe565b90509295985092959890939650565b8015158114611c1d57600080fd5b60008060006040848603121561272e57600080fd5b833567ffffffffffffffff81111561274557600080fd5b61275186828701612124565b90945092505060208401356127658161270b565b809150509250925092565b60006020828403121561278257600080fd5b5051919050565b60208082526010908201526f111958591b1a5b99481b9bdd081b595d60821b604082015260600190565b81835260006001600160fb1b038311156127cc57600080fd5b8260051b80836020870137939093016020019392505050565b848152836020820152606060408201526000610df36060830184866127b3565b6000602080838503121561281857600080fd5b825167ffffffffffffffff81111561282f57600080fd5b8301601f8101851361284057600080fd5b805161284e61250b826124c6565b81815260059190911b8201830190838101908783111561286d57600080fd5b928401925b8284101561288b57835182529284019290840190612872565b979650505050505050565b8481526060602082015260006128b06060830185876127b3565b905082604083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156108f3576108f36128d7565b808201808211156108f3576108f36128d7565b60ff81811683821601908111156108f3576108f36128d7565b60ff82811682821603908111156108f3576108f36128d7565b600181815b80851115612980578160001904821115612966576129666128d7565b8085161561297357918102915b93841c939080029061294a565b509250929050565b600082612997575060016108f3565b816129a4575060006108f3565b81600181146129ba57600281146129c4576129e0565b60019150506108f3565b60ff8411156129d5576129d56128d7565b50506001821b6108f3565b5060208310610133831016604e8410600b8410161715612a03575081810a6108f3565b612a0d8383612945565b8060001904821115612a2157612a216128d7565b029392505050565b60006108f08383612988565b6000815180845260005b81811015612a5b57602081850181015186830182015201612a3f565b506000602082860101526020601f19601f83011685010191505092915050565b604081526000612a8e6040830185612a35565b8281036020840152610ba08185612a35565b600060208284031215612ab257600080fd5b8151610d318161270b565b80820281158282048414176108f3576108f36128d7565b6000815480845260208085019450836000528060002060005b83811015612b125781546001600160a01b031687529582019560019182019101612aed565b509495945050505050565b6000815480845260208085019450836000528060002060005b83811015612b1257815487529582019560019182019101612b36565b60408152825460408201526001830154606082015260028301546080820152600383015460a0820152600483015460c0820152600583015460e08201526000612ba560068501546001600160a01b031690565b6001600160a01b03166101008301526101606101208301819052612bd06101a0840160078701612ad4565b603f198085830301610140860152612beb8260088901612b1d565b9150808583030183860152612c038260098901612b1d565b925080858403016101808601525050612c1f81600a8701612b1d565b915050610d3160208301846001600160a01b03169052565b848152606060208201526000612c516060830185876127b3565b9050821515604083015295945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea2646970667358221220bc494f753dff61ed97f2aa1ef656c8389762531ff5e49618a4f52097d147716064736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2CE5 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1F9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x10D JUMPI DUP1 PUSH4 0xC4DB7FA0 GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xE6AB2806 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xE6AB2806 EQ PUSH2 0x5D1 JUMPI DUP1 PUSH4 0xEF0A712F EQ PUSH2 0x5F1 JUMPI DUP1 PUSH4 0xF2FAD2B6 EQ PUSH2 0x611 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x631 JUMPI DUP1 PUSH4 0xF9A15FB9 EQ PUSH2 0x651 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC4DB7FA0 EQ PUSH2 0x57F JUMPI DUP1 PUSH4 0xD460F0A2 EQ PUSH2 0x594 JUMPI DUP1 PUSH4 0xD46300FD EQ PUSH2 0x5A7 JUMPI DUP1 PUSH4 0xE25AA5FA EQ PUSH2 0x5BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x91695586 GT PUSH2 0xDC JUMPI DUP1 PUSH4 0x91695586 EQ PUSH2 0x4FF JUMPI DUP1 PUSH4 0x91CEB3EB EQ PUSH2 0x51F JUMPI DUP1 PUSH4 0xA95B089F EQ PUSH2 0x53F JUMPI DUP1 PUSH4 0xB28CB6DC EQ PUSH2 0x55F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x48C JUMPI DUP1 PUSH4 0x84CDD9BC EQ PUSH2 0x4A1 JUMPI DUP1 PUSH4 0x8BEB60B6 EQ PUSH2 0x4C1 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x4E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5428C117 GT PUSH2 0x190 JUMPI DUP1 PUSH4 0x66C0BD24 GT PUSH2 0x15F JUMPI DUP1 PUSH4 0x66C0BD24 EQ PUSH2 0x3CD JUMPI DUP1 PUSH4 0x6B1DC08B EQ PUSH2 0x3FF JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x41F JUMPI DUP1 PUSH4 0x7F41E7EF EQ PUSH2 0x434 JUMPI DUP1 PUSH4 0x82B86600 EQ PUSH2 0x454 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5428C117 EQ PUSH2 0x2FF JUMPI DUP1 PUSH4 0x593D132C EQ PUSH2 0x312 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x332 JUMPI DUP1 PUSH4 0x5FD65F0F EQ PUSH2 0x355 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34E19907 GT PUSH2 0x1CC JUMPI DUP1 PUSH4 0x34E19907 EQ PUSH2 0x28A JUMPI DUP1 PUSH4 0x3E3A1560 EQ PUSH2 0x2AA JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x2CA JUMPI DUP1 PUSH4 0x4D49E87D EQ PUSH2 0x2DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x419B45A EQ PUSH2 0x1FE JUMPI DUP1 PUSH4 0xBA81959 EQ PUSH2 0x215 JUMPI DUP1 PUSH4 0x31CD52B0 EQ PUSH2 0x23D JUMPI DUP1 PUSH4 0x342A87A1 EQ PUSH2 0x26A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x20A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x671 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x718 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x258 CALLDATASIZE PUSH1 0x4 PUSH2 0x2170 JUMP JUMPDEST PUSH2 0x795 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x234 SWAP2 SWAP1 PUSH2 0x21C3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x276 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x285 CALLDATASIZE PUSH1 0x4 PUSH2 0x2218 JUMP JUMPDEST PUSH2 0x869 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x296 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x2A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x2244 JUMP JUMPDEST PUSH2 0x8F9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x2C5 CALLDATASIZE PUSH1 0x4 PUSH2 0x225D JUMP JUMPDEST PUSH2 0x96F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0xA2E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x2FA CALLDATASIZE PUSH1 0x4 PUSH2 0x2298 JUMP JUMPDEST PUSH2 0xA3E JUMP JUMPDEST PUSH2 0x22A PUSH2 0x30D CALLDATASIZE PUSH1 0x4 PUSH2 0x2309 JUMP JUMPDEST PUSH2 0xAAF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x31E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x32D CALLDATASIZE PUSH1 0x4 PUSH2 0x235B JUMP JUMPDEST PUSH2 0xBA9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x65 SLOAD PUSH1 0xFF AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x361 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xFB SLOAD PUSH1 0xFC SLOAD PUSH1 0xFD SLOAD PUSH1 0xFE SLOAD PUSH1 0xFF SLOAD PUSH2 0x100 SLOAD PUSH2 0x101 SLOAD PUSH2 0x38F SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP8 DUP9 MSTORE PUSH1 0x20 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x60 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3ED PUSH2 0x3E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x237D JUMP JUMPDEST PUSH2 0xC26 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x40B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x41A CALLDATASIZE PUSH1 0x4 PUSH2 0x239A JUMP JUMPDEST PUSH2 0xC9E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0xD38 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x44F CALLDATASIZE PUSH1 0x4 PUSH2 0x23D6 JUMP JUMPDEST PUSH2 0xD4A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x474 PUSH2 0x46F CALLDATASIZE PUSH1 0x4 PUSH2 0x2417 JUMP JUMPDEST PUSH2 0xDFD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x498 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0xE77 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x4BC CALLDATASIZE PUSH1 0x4 PUSH2 0x2298 JUMP JUMPDEST PUSH2 0xE87 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x4DC CALLDATASIZE PUSH1 0x4 PUSH2 0x2244 JUMP JUMPDEST PUSH2 0xEF8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x474 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x50B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x51A CALLDATASIZE PUSH1 0x4 PUSH2 0x2432 JUMP JUMPDEST PUSH2 0xF3F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x53A CALLDATASIZE PUSH1 0x4 PUSH2 0x2417 JUMP JUMPDEST PUSH2 0x1012 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x54B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x55A CALLDATASIZE PUSH1 0x4 PUSH2 0x239A JUMP JUMPDEST PUSH2 0x1089 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x56B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x57A CALLDATASIZE PUSH1 0x4 PUSH2 0x2630 JUMP JUMPDEST PUSH2 0x10DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x18DE JUMP JUMPDEST PUSH2 0x22A PUSH2 0x5A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x2309 JUMP JUMPDEST PUSH2 0x194B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x19F0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x1A2B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x5EC CALLDATASIZE PUSH1 0x4 PUSH2 0x2719 JUMP JUMPDEST PUSH2 0x1A66 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x60C CALLDATASIZE PUSH1 0x4 PUSH2 0x2244 JUMP JUMPDEST PUSH2 0x1AA7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x61D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x62C CALLDATASIZE PUSH1 0x4 PUSH2 0x2244 JUMP JUMPDEST PUSH2 0x1B25 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x64C CALLDATASIZE PUSH1 0x4 PUSH2 0x237D JUMP JUMPDEST PUSH2 0x1BA7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x65D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x66C CALLDATASIZE PUSH1 0x4 PUSH2 0x23D6 JUMP JUMPDEST PUSH2 0x1C20 JUMP JUMPDEST PUSH2 0x679 PUSH2 0x1C8C JUMP JUMPDEST PUSH2 0x681 PUSH2 0x1CE5 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x9CBD2406 PUSH1 0xFB PUSH2 0x6AF PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x708 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x716 PUSH1 0x1 PUSH1 0xC9 SSTORE JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xF43DEE53 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0x0 SWAP1 PUSH4 0xF43DEE53 SWAP1 PUSH1 0x24 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x76C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x790 SWAP2 SWAP1 PUSH2 0x2770 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x79F PUSH2 0x1C8C JUMP JUMPDEST PUSH2 0x7A7 PUSH2 0x1D46 JUMP JUMPDEST DUP2 DUP1 TIMESTAMP GT ISZERO PUSH2 0x7D1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2789 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1BEEC943 PUSH1 0xE2 SHL DUP2 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x6FBB250C SWAP1 PUSH2 0x80F SWAP1 PUSH1 0xFB SWAP1 DUP11 SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x27E5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x82C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x854 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2805 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x861 PUSH1 0x1 PUSH1 0xC9 SSTORE JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x84EEEF27 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xFF DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0x0 SWAP1 PUSH4 0x84EEEF27 SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x8CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8F0 SWAP2 SWAP1 PUSH2 0x2770 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x901 PUSH2 0x1CE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2CECCCB5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x59D9996A SWAP1 PUSH1 0x44 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x954 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x968 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x979 PUSH2 0x1C8C JUMP JUMPDEST PUSH2 0x981 PUSH2 0x1D46 JUMP JUMPDEST DUP2 DUP1 TIMESTAMP GT ISZERO PUSH2 0x9A2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2789 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2B8FFBB7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0xFF DUP7 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0xAE3FEEDC SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xA0A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x854 SWAP2 SWAP1 PUSH2 0x2770 JUMP JUMPDEST PUSH2 0xA36 PUSH2 0x1CE5 JUMP JUMPDEST PUSH2 0x716 PUSH2 0x1D8C JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA48 PUSH2 0x1C8C JUMP JUMPDEST PUSH2 0xA50 PUSH2 0x1D46 JUMP JUMPDEST DUP2 DUP1 TIMESTAMP GT ISZERO PUSH2 0xA71 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2789 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33A43F95 PUSH1 0xE1 SHL DUP2 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x67487F2A SWAP1 PUSH2 0x9ED SWAP1 PUSH1 0xFB SWAP1 DUP11 SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x2896 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAB9 PUSH2 0x1C8C JUMP JUMPDEST PUSH2 0xAC1 PUSH2 0x1D46 JUMP JUMPDEST DUP2 DUP1 TIMESTAMP GT ISZERO PUSH2 0xAE2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2789 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAED DUP8 PUSH2 0xC26 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xAFA DUP8 PUSH2 0xC26 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x703C02D5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xFF DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0x84 DUP2 ADD DUP9 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH20 0x0 SWAP1 PUSH4 0xE07805AA SWAP1 PUSH1 0xA4 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xB6D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB91 SWAP2 SWAP1 PUSH2 0x2770 JUMP JUMPDEST SWAP4 POP POP POP POP PUSH2 0xBA0 PUSH1 0x1 PUSH1 0xC9 SSTORE JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xBB1 PUSH2 0x1CE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3F1E1061 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0xFC784184 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xC1E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH2 0x106 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 PUSH2 0xC51 DUP3 PUSH2 0xDFD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x8F3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x151BDAD95B88191BD95CC81B9BDD08195E1A5CDD PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2E4BE8D7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xFF DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH20 0x0 SWAP1 PUSH4 0xB92FA35C SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xD0A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD2E SWAP2 SWAP1 PUSH2 0x2770 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD40 PUSH2 0x1CE5 JUMP JUMPDEST PUSH2 0x716 PUSH1 0x0 PUSH2 0x1DDE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xD56 DUP6 PUSH2 0xC26 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xD63 DUP6 PUSH2 0xC26 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F4998AD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xFF DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH20 0x0 SWAP1 PUSH4 0x2F4998AD SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xDCF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDF3 SWAP2 SWAP1 PUSH2 0x2770 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x102 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF DUP4 AND LT PUSH2 0xE44 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x4F7574206F662072616E6765 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH2 0x102 DUP1 SLOAD PUSH1 0xFF DUP5 AND SWAP1 DUP2 LT PUSH2 0xE5C JUMPI PUSH2 0xE5C PUSH2 0x28C1 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xE7F PUSH2 0x1CE5 JUMP JUMPDEST PUSH2 0x716 PUSH2 0x1E30 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE91 PUSH2 0x1C8C JUMP JUMPDEST PUSH2 0xE99 PUSH2 0x1D46 JUMP JUMPDEST DUP2 DUP1 TIMESTAMP GT ISZERO PUSH2 0xEBA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2789 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x77B83D3 PUSH1 0xE4 SHL DUP2 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x77B83D30 SWAP1 PUSH2 0x9ED SWAP1 PUSH1 0xFB SWAP1 DUP11 SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x2896 JUMP JUMPDEST PUSH2 0xF00 PUSH2 0x1CE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8BBAA23 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x8BBAA23 SWAP1 PUSH1 0x44 ADD PUSH2 0x93C JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF49 PUSH2 0x1C8C JUMP JUMPDEST PUSH2 0xF51 PUSH2 0x1D46 JUMP JUMPDEST DUP2 DUP1 TIMESTAMP GT ISZERO PUSH2 0xF72 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2789 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xF2042939 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xFF DUP1 DUP10 AND PUSH1 0x24 DUP4 ADD MSTORE DUP8 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x84 DUP2 ADD DUP6 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0xF2042939 SWAP1 PUSH1 0xA4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xFE1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1005 SWAP2 SWAP1 PUSH2 0x2770 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xBA0 PUSH1 0x1 PUSH1 0xC9 SSTORE JUMP JUMPDEST PUSH2 0x102 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF DUP4 AND LT PUSH2 0x105F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x496E646578206F7574206F662072616E6765 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH2 0x104 DUP1 SLOAD PUSH1 0xFF DUP5 AND SWAP1 DUP2 LT PUSH2 0x1077 JUMPI PUSH2 0x1077 PUSH2 0x28C1 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F4998AD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xFF DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH20 0x0 SWAP1 PUSH4 0x2F4998AD SWAP1 PUSH1 0x84 ADD PUSH2 0xCED JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x10FC JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x1116 JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1116 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x1179 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x119C JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x11A4 PUSH2 0x1E6D JUMP JUMPDEST PUSH2 0x11AC PUSH2 0x1EAC JUMP JUMPDEST DUP9 MLOAD PUSH2 0x11BA PUSH1 0x1 PUSH1 0x2 PUSH2 0x28ED JUMP JUMPDEST DUP2 GT PUSH2 0x1212 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5F706F6F6C6564546F6B656E732E6C656E67746820696E73756666696369656E PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0xFA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH2 0x121E PUSH1 0x10 PUSH1 0x1 PUSH2 0x2900 JUMP JUMPDEST DUP2 LT PUSH2 0x126C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5F706F6F6C6564546F6B656E732E6C656E67746820746F6F206C617267650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST DUP9 MLOAD DUP2 EQ PUSH2 0x12BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5F706F6F6C6564546F6B656E7320646563696D616C73206D69736D6174636800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x0 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x12D8 JUMPI PUSH2 0x12D8 PUSH2 0x247F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1301 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x157F JUMPI DUP1 ISZERO PUSH2 0x13E4 JUMPI PUSH2 0x106 PUSH1 0x0 DUP14 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x132C JUMPI PUSH2 0x132C PUSH2 0x28C1 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x13A5 JUMPI POP DUP12 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x136D JUMPI PUSH2 0x136D PUSH2 0x28C1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP13 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1391 JUMPI PUSH2 0x1391 PUSH2 0x28C1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x13E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x4475706C696361746520746F6B656E73 PUSH1 0x80 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP13 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1401 JUMPI PUSH2 0x1401 PUSH2 0x28C1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x145F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546865203020616464726573732069736E277420616E204552432D3230000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH2 0x146B PUSH1 0x12 PUSH1 0x1 PUSH2 0x2913 JUMP JUMPDEST PUSH1 0xFF AND DUP12 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1480 JUMPI PUSH2 0x1480 PUSH2 0x28C1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xFF AND LT PUSH2 0x14D8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E20646563696D616C732065786365656473206D6178000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST DUP11 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x14EA JUMPI PUSH2 0x14EA PUSH2 0x28C1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x12 PUSH2 0x14FE SWAP2 SWAP1 PUSH2 0x292C JUMP JUMPDEST PUSH2 0x150C SWAP1 PUSH1 0xFF AND PUSH1 0xA PUSH2 0x2A29 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x151E JUMPI PUSH2 0x151E PUSH2 0x28C1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x106 PUSH1 0x0 DUP15 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1542 JUMPI PUSH2 0x1542 PUSH2 0x28C1 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 ADD PUSH2 0x1307 JUMP JUMPDEST POP PUSH3 0xF4240 DUP8 LT PUSH2 0x15C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x5F612065786365656473206D6178696D756D PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH4 0x5F5E100 DUP7 LT PUSH2 0x1611 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x5F6665652065786365656473206D6178696D756D PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH5 0x2540BE400 DUP6 LT PUSH2 0x1665 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5F61646D696E4665652065786365656473206D6178696D756D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1670 DUP6 PUSH2 0x1EDB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x266C45BB PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x4CD88B76 SWAP1 PUSH2 0x16A1 SWAP1 DUP14 SWAP1 DUP14 SWAP1 PUSH1 0x4 ADD PUSH2 0x2A7B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16E4 SWAP2 SWAP1 PUSH2 0x2AA0 JUMP JUMPDEST PUSH2 0x1730 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x636F756C64206E6F7420696E6974206C70546F6B656E20636C6F6E6500000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH2 0x101 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE DUP12 MLOAD PUSH2 0x1760 SWAP1 PUSH2 0x102 SWAP1 PUSH1 0x20 DUP16 ADD SWAP1 PUSH2 0x206F JUMP JUMPDEST POP DUP2 MLOAD PUSH2 0x1775 SWAP1 PUSH2 0x103 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH2 0x20D4 JUMP JUMPDEST POP DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x178F JUMPI PUSH2 0x178F PUSH2 0x247F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x17B8 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP DUP1 MLOAD PUSH2 0x17CE SWAP2 PUSH2 0x104 SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x20D4 JUMP JUMPDEST POP DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x17E8 JUMPI PUSH2 0x17E8 PUSH2 0x247F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1811 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP DUP1 MLOAD PUSH2 0x1827 SWAP2 PUSH2 0x105 SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x20D4 JUMP JUMPDEST POP PUSH2 0x1833 PUSH1 0x64 DUP10 PUSH2 0x2ABD JUMP JUMPDEST PUSH1 0xFB SSTORE PUSH2 0x1841 PUSH1 0x64 DUP10 PUSH2 0x2ABD JUMP JUMPDEST PUSH1 0xFC SSTORE PUSH1 0xFF DUP8 SWAP1 SSTORE PUSH2 0x100 DUP7 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x8BA0C15F86C46B5773BEB451B4D8D5744F7642AB1004C0A7E59E215710FB3ABA SWAP1 PUSH2 0x1882 SWAP1 PUSH1 0xFB SWAP1 CALLER SWAP1 PUSH2 0x2B52 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP DUP1 ISZERO PUSH2 0x18D3 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x18E6 PUSH2 0x1CE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE5B994C5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0xE5B994C5 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1931 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1945 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1955 PUSH2 0x1C8C JUMP JUMPDEST PUSH2 0x195D PUSH2 0x1D46 JUMP JUMPDEST DUP2 DUP1 TIMESTAMP GT ISZERO PUSH2 0x197E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2789 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1989 DUP8 PUSH2 0xC26 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1996 DUP8 PUSH2 0xC26 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xF2042939 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xFF DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0x84 DUP2 ADD DUP9 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH20 0x0 SWAP1 PUSH4 0xF2042939 SWAP1 PUSH1 0xA4 ADD PUSH2 0xB50 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1158DAFB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0x0 SWAP1 PUSH4 0x22B1B5F6 SWAP1 PUSH1 0x24 ADD PUSH2 0x74F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8BE1E523 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0x0 SWAP1 PUSH4 0x8BE1E523 SWAP1 PUSH1 0x24 ADD PUSH2 0x74F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x22B2B607 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0x0 SWAP1 PUSH4 0x22B2B607 SWAP1 PUSH2 0xCED SWAP1 PUSH1 0xFB SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x2C37 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1CE9046F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH20 0x0 SWAP1 PUSH4 0x1CE9046F SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1B01 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8F3 SWAP2 SWAP1 PUSH2 0x2770 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8CC122BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 SWAP1 PUSH20 0x0 SWAP1 PUSH4 0x8CC122BB SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1B7F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x8F3 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2805 JUMP JUMPDEST PUSH2 0x1BAF PUSH2 0x1CE5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1C14 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH2 0x1C1D DUP2 PUSH2 0x1DDE JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1C2C DUP6 PUSH2 0xC26 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1C39 DUP6 PUSH2 0xC26 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2E4BE8D7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xFF DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH20 0x0 SWAP1 PUSH4 0xB92FA35C SWAP1 PUSH1 0x84 ADD PUSH2 0xDB2 JUMP JUMPDEST PUSH1 0x2 PUSH1 0xC9 SLOAD SUB PUSH2 0x1CDE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x2 PUSH1 0xC9 SSTORE JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x716 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xC9 SSTORE JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x716 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH2 0x1D94 PUSH2 0x1F75 JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x1E38 PUSH2 0x1D46 JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1DC1 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1E94 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2C64 JUMP JUMPDEST PUSH2 0x1E9C PUSH2 0x1FBE JUMP JUMPDEST PUSH2 0x1EA4 PUSH2 0x1FE5 JUMP JUMPDEST PUSH2 0x716 PUSH2 0x2015 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1ED3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2C64 JUMP JUMPDEST PUSH2 0x716 PUSH2 0x2048 JUMP JUMPDEST PUSH1 0x0 PUSH23 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000 DUP3 PUSH1 0x60 SHL PUSH1 0xE8 SHR OR PUSH1 0x0 MSTORE PUSH15 0x5AF43D82803E903D91602B57FD5BF3 DUP3 PUSH1 0x78 SHL OR PUSH1 0x20 MSTORE PUSH1 0x37 PUSH1 0x9 PUSH1 0x0 CREATE SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1F70 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x115490CC4C4D8DCE8818DC99585D194819985A5B1959 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0xFF AND PUSH2 0x716 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x716 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2C64 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x200C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2C64 JUMP JUMPDEST PUSH2 0x716 CALLER PUSH2 0x1DDE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x203C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2C64 JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1D3F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2C64 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x20C4 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x20C4 JUMPI DUP3 MLOAD DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x208F JUMP JUMPDEST POP PUSH2 0x20D0 SWAP3 SWAP2 POP PUSH2 0x210F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x20C4 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x20C4 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x20F4 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x20D0 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2110 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x214E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x2169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x21A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x21B0 DUP8 DUP3 DUP9 ADD PUSH2 0x2124 JUMP JUMPDEST SWAP6 SWAP9 SWAP1 SWAP8 POP SWAP5 SWAP6 PUSH1 0x40 ADD CALLDATALOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x21FB JUMPI DUP4 MLOAD DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x21DF JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1F70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x222B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x223B PUSH1 0x20 DUP5 ADD PUSH2 0x2207 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2273 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH2 0x2283 PUSH1 0x20 DUP7 ADD PUSH2 0x2207 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x22AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x22C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22D1 DUP8 DUP3 DUP9 ADD PUSH2 0x2124 JUMP JUMPDEST SWAP1 SWAP9 SWAP1 SWAP8 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP7 PUSH1 0x40 ADD CALLDATALOAD SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1C1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1F70 DUP2 PUSH2 0x22E9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2321 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x2333 DUP2 PUSH2 0x22E9 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x2343 DUP2 PUSH2 0x22E9 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP4 SWAP5 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP5 POP PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x236E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x238F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xD31 DUP2 PUSH2 0x22E9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x23AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x23B8 DUP5 PUSH2 0x2207 JUMP JUMPDEST SWAP3 POP PUSH2 0x23C6 PUSH1 0x20 DUP6 ADD PUSH2 0x2207 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x23EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x23F6 DUP2 PUSH2 0x22E9 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2406 DUP2 PUSH2 0x22E9 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2429 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8F0 DUP3 PUSH2 0x2207 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x244A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2453 DUP7 PUSH2 0x2207 JUMP JUMPDEST SWAP5 POP PUSH2 0x2461 PUSH1 0x20 DUP8 ADD PUSH2 0x2207 JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x24BE JUMPI PUSH2 0x24BE PUSH2 0x247F JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x24E0 JUMPI PUSH2 0x24E0 PUSH2 0x247F JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x24FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x2510 PUSH2 0x250B DUP4 PUSH2 0x24C6 JUMP JUMPDEST PUSH2 0x2495 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x252F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2553 JUMPI DUP1 CALLDATALOAD PUSH2 0x2546 DUP2 PUSH2 0x22E9 JUMP JUMPDEST DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x2533 JUMP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x256F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x257F PUSH2 0x250B DUP4 PUSH2 0x24C6 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x259E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2553 JUMPI PUSH2 0x25B3 DUP2 PUSH2 0x2207 JUMP JUMPDEST DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x25A2 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x25D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x25EB JUMPI PUSH2 0x25EB PUSH2 0x247F JUMP JUMPDEST PUSH2 0x25FE PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x2495 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x2613 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x264D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2665 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2671 DUP13 DUP4 DUP14 ADD PUSH2 0x24EA JUMP JUMPDEST SWAP10 POP PUSH1 0x20 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2687 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2693 DUP13 DUP4 DUP14 ADD PUSH2 0x255E JUMP JUMPDEST SWAP9 POP PUSH1 0x40 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26B5 DUP13 DUP4 DUP14 ADD PUSH2 0x25C0 JUMP JUMPDEST SWAP8 POP PUSH1 0x60 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26D8 DUP12 DUP3 DUP13 ADD PUSH2 0x25C0 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x80 DUP10 ADD CALLDATALOAD SWAP4 POP PUSH1 0xA0 DUP10 ADD CALLDATALOAD SWAP3 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD SWAP2 POP PUSH2 0x26FC PUSH1 0xE0 DUP11 ADD PUSH2 0x22FE JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1C1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x272E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2745 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2751 DUP7 DUP3 DUP8 ADD PUSH2 0x2124 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2765 DUP2 PUSH2 0x270B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2782 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH16 0x111958591B1A5B99481B9BDD081B595D PUSH1 0x82 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xFB SHL SUB DUP4 GT ISZERO PUSH2 0x27CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x5 SHL DUP1 DUP4 PUSH1 0x20 DUP8 ADD CALLDATACOPY SWAP4 SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xDF3 PUSH1 0x60 DUP4 ADD DUP5 DUP7 PUSH2 0x27B3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2818 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x282F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x1F DUP2 ADD DUP6 SGT PUSH2 0x2840 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x284E PUSH2 0x250B DUP3 PUSH2 0x24C6 JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x5 SWAP2 SWAP1 SWAP2 SHL DUP3 ADD DUP4 ADD SWAP1 DUP4 DUP2 ADD SWAP1 DUP8 DUP4 GT ISZERO PUSH2 0x286D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 DUP5 ADD SWAP3 JUMPDEST DUP3 DUP5 LT ISZERO PUSH2 0x288B JUMPI DUP4 MLOAD DUP3 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH2 0x2872 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x28B0 PUSH1 0x60 DUP4 ADD DUP6 DUP8 PUSH2 0x27B3 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x40 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x8F3 JUMPI PUSH2 0x8F3 PUSH2 0x28D7 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x8F3 JUMPI PUSH2 0x8F3 PUSH2 0x28D7 JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP2 GT ISZERO PUSH2 0x8F3 JUMPI PUSH2 0x8F3 PUSH2 0x28D7 JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x8F3 JUMPI PUSH2 0x8F3 PUSH2 0x28D7 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x2980 JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x2966 JUMPI PUSH2 0x2966 PUSH2 0x28D7 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x2973 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x294A JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2997 JUMPI POP PUSH1 0x1 PUSH2 0x8F3 JUMP JUMPDEST DUP2 PUSH2 0x29A4 JUMPI POP PUSH1 0x0 PUSH2 0x8F3 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x29BA JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x29C4 JUMPI PUSH2 0x29E0 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x8F3 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x29D5 JUMPI PUSH2 0x29D5 PUSH2 0x28D7 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x8F3 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x2A03 JUMPI POP DUP2 DUP2 EXP PUSH2 0x8F3 JUMP JUMPDEST PUSH2 0x2A0D DUP4 DUP4 PUSH2 0x2945 JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x2A21 JUMPI PUSH2 0x2A21 PUSH2 0x28D7 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8F0 DUP4 DUP4 PUSH2 0x2988 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2A5B JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x2A3F JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2A8E PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x2A35 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xBA0 DUP2 DUP6 PUSH2 0x2A35 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2AB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xD31 DUP2 PUSH2 0x270B JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x8F3 JUMPI PUSH2 0x8F3 PUSH2 0x28D7 JUMP JUMPDEST PUSH1 0x0 DUP2 SLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP4 PUSH1 0x0 MSTORE DUP1 PUSH1 0x0 KECCAK256 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2B12 JUMPI DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2AED JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP4 PUSH1 0x0 MSTORE DUP1 PUSH1 0x0 KECCAK256 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2B12 JUMPI DUP2 SLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2B36 JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE DUP3 SLOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x4 DUP4 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x5 DUP4 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2BA5 PUSH1 0x6 DUP6 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x100 DUP4 ADD MSTORE PUSH2 0x160 PUSH2 0x120 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x2BD0 PUSH2 0x1A0 DUP5 ADD PUSH1 0x7 DUP8 ADD PUSH2 0x2AD4 JUMP JUMPDEST PUSH1 0x3F NOT DUP1 DUP6 DUP4 SUB ADD PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x2BEB DUP3 PUSH1 0x8 DUP10 ADD PUSH2 0x2B1D JUMP JUMPDEST SWAP2 POP DUP1 DUP6 DUP4 SUB ADD DUP4 DUP7 ADD MSTORE PUSH2 0x2C03 DUP3 PUSH1 0x9 DUP10 ADD PUSH2 0x2B1D JUMP JUMPDEST SWAP3 POP DUP1 DUP6 DUP5 SUB ADD PUSH2 0x180 DUP7 ADD MSTORE POP POP PUSH2 0x2C1F DUP2 PUSH1 0xA DUP8 ADD PUSH2 0x2B1D JUMP JUMPDEST SWAP2 POP POP PUSH2 0xD31 PUSH1 0x20 DUP4 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2C51 PUSH1 0x60 DUP4 ADD DUP6 DUP8 PUSH2 0x27B3 JUMP JUMPDEST SWAP1 POP DUP3 ISZERO ISZERO PUSH1 0x40 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2B SWAP1 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 PUSH1 0x40 DUP3 ADD MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC 0x49 0x4F PUSH22 0x3DFF61ED97F2AA1EF656C8389762531FF5E49618A4F5 KECCAK256 SWAP8 0xD1 SELFBALANCE PUSH18 0x6064736F6C63430008110033000000000000 ","sourceMap":"1562:18174:91:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@__Context_init_unchained_9519":{"entryPoint":8126,"id":9519,"parameterSlots":0,"returnSlots":0},"@__Ownable_init_unchained_7975":{"entryPoint":8165,"id":7975,"parameterSlots":0,"returnSlots":0},"@__OwnerPausable_init_24065":{"entryPoint":7789,"id":24065,"parameterSlots":0,"returnSlots":0},"@__Pausable_init_unchained_8279":{"entryPoint":8213,"id":8279,"parameterSlots":0,"returnSlots":0},"@__ReentrancyGuard_init_8388":{"entryPoint":7852,"id":8388,"parameterSlots":0,"returnSlots":0},"@__ReentrancyGuard_init_unchained_8398":{"entryPoint":8264,"id":8398,"parameterSlots":0,"returnSlots":0},"@_checkOwner_8006":{"entryPoint":7397,"id":8006,"parameterSlots":0,"returnSlots":0},"@_msgSender_9528":{"entryPoint":null,"id":9528,"parameterSlots":0,"returnSlots":1},"@_nonReentrantAfter_8432":{"entryPoint":7487,"id":8432,"parameterSlots":0,"returnSlots":0},"@_nonReentrantBefore_8424":{"entryPoint":7308,"id":8424,"parameterSlots":0,"returnSlots":0},"@_pause_8343":{"entryPoint":7728,"id":8343,"parameterSlots":0,"returnSlots":0},"@_requireNotPaused_8316":{"entryPoint":7494,"id":8316,"parameterSlots":0,"returnSlots":0},"@_requirePaused_8327":{"entryPoint":8053,"id":8327,"parameterSlots":0,"returnSlots":0},"@_transferOwnership_8063":{"entryPoint":7646,"id":8063,"parameterSlots":1,"returnSlots":0},"@_unpause_8359":{"entryPoint":7564,"id":8359,"parameterSlots":0,"returnSlots":0},"@addLiquidity_25657":{"entryPoint":2622,"id":25657,"parameterSlots":4,"returnSlots":1},"@calculateRemoveLiquidityOneToken_25492":{"entryPoint":2153,"id":25492,"parameterSlots":2,"returnSlots":1},"@calculateRemoveLiquidity_25474":{"entryPoint":6949,"id":25474,"parameterSlots":1,"returnSlots":1},"@calculateSwapFromAddress_25406":{"entryPoint":3402,"id":25406,"parameterSlots":3,"returnSlots":1},"@calculateSwapOutFromAddress_25439":{"entryPoint":7200,"id":25439,"parameterSlots":3,"returnSlots":1},"@calculateSwapOut_25373":{"entryPoint":3230,"id":25373,"parameterSlots":3,"returnSlots":1},"@calculateSwap_25352":{"entryPoint":4233,"id":25352,"parameterSlots":3,"returnSlots":1},"@calculateTokenAmount_25458":{"entryPoint":6758,"id":25458,"parameterSlots":3,"returnSlots":1},"@clone_9814":{"entryPoint":7899,"id":9814,"parameterSlots":1,"returnSlots":1},"@getAPrecise_25240":{"entryPoint":1816,"id":25240,"parameterSlots":0,"returnSlots":1},"@getA_25229":{"entryPoint":6640,"id":25229,"parameterSlots":0,"returnSlots":1},"@getAdminBalance_25506":{"entryPoint":6823,"id":25506,"parameterSlots":1,"returnSlots":1},"@getTokenBalance_25319":{"entryPoint":4114,"id":25319,"parameterSlots":1,"returnSlots":1},"@getTokenIndex_25295":{"entryPoint":3110,"id":25295,"parameterSlots":1,"returnSlots":1},"@getToken_25265":{"entryPoint":3581,"id":25265,"parameterSlots":1,"returnSlots":1},"@getVirtualPrice_25331":{"entryPoint":6699,"id":25331,"parameterSlots":0,"returnSlots":1},"@initialize_25202":{"entryPoint":4316,"id":25202,"parameterSlots":8,"returnSlots":0},"@isContract_9235":{"entryPoint":null,"id":9235,"parameterSlots":1,"returnSlots":1},"@owner_7992":{"entryPoint":null,"id":7992,"parameterSlots":0,"returnSlots":1},"@pause_24077":{"entryPoint":3703,"id":24077,"parameterSlots":0,"returnSlots":0},"@paused_8304":{"entryPoint":null,"id":8304,"parameterSlots":0,"returnSlots":1},"@rampA_25808":{"entryPoint":2985,"id":25808,"parameterSlots":2,"returnSlots":0},"@removeLiquidityImbalance_25744":{"entryPoint":3719,"id":25744,"parameterSlots":4,"returnSlots":1},"@removeLiquidityOneToken_25716":{"entryPoint":2415,"id":25716,"parameterSlots":4,"returnSlots":1},"@removeLiquidity_25686":{"entryPoint":1941,"id":25686,"parameterSlots":4,"returnSlots":1},"@renounceOwnership_8020":{"entryPoint":3384,"id":8020,"parameterSlots":0,"returnSlots":0},"@setAdminFee_25775":{"entryPoint":3832,"id":25775,"parameterSlots":1,"returnSlots":0},"@setSwapFee_25790":{"entryPoint":2297,"id":25790,"parameterSlots":1,"returnSlots":0},"@stopRampA_25820":{"entryPoint":6366,"id":25820,"parameterSlots":0,"returnSlots":0},"@swapExactOut_25629":{"entryPoint":2735,"id":25629,"parameterSlots":5,"returnSlots":1},"@swapExact_25584":{"entryPoint":6475,"id":25584,"parameterSlots":5,"returnSlots":1},"@swapStorage_24906":{"entryPoint":null,"id":24906,"parameterSlots":0,"returnSlots":0},"@swap_25539":{"entryPoint":3903,"id":25539,"parameterSlots":5,"returnSlots":1},"@transferOwnership_8043":{"entryPoint":7079,"id":8043,"parameterSlots":1,"returnSlots":0},"@unpause_24089":{"entryPoint":2606,"id":24089,"parameterSlots":0,"returnSlots":0},"@withdrawAdminFees_25760":{"entryPoint":1649,"id":25760,"parameterSlots":0,"returnSlots":0},"abi_decode_address":{"entryPoint":8958,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_contract_IERC20_dyn":{"entryPoint":9450,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_calldata":{"entryPoint":8484,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_array_uint8_dyn":{"entryPoint":9566,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_string":{"entryPoint":9664,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":9085,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":9174,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptrt_array$_t_uint8_$dyn_memory_ptrt_string_memory_ptrt_string_memory_ptrt_uint256t_uint256t_uint256t_address":{"entryPoint":9776,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_array$_t_uint256_$dyn_calldata_ptrt_bool":{"entryPoint":10009,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_array$_t_uint256_$dyn_calldata_ptrt_uint256t_uint256":{"entryPoint":8856,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptr_fromMemory":{"entryPoint":10245,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":10912,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":8772,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":10096,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_addresst_addresst_uint256t_uint256":{"entryPoint":8969,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_uint256t_array$_t_uint256_$dyn_calldata_ptrt_uint256":{"entryPoint":8560,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_uint256t_uint256":{"entryPoint":9051,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256t_uint8":{"entryPoint":8728,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256t_uint8t_uint256t_uint256":{"entryPoint":8797,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_uint8":{"entryPoint":9239,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8t_uint8t_uint256":{"entryPoint":9114,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint8t_uint8t_uint256t_uint256t_uint256":{"entryPoint":9266,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_uint8":{"entryPoint":8711,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_array_contract_IERC20_dyn_storage":{"entryPoint":10964,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_calldata":{"entryPoint":10163,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_uint256_dyn_storage":{"entryPoint":11037,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_contract_LPToken":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_string":{"entryPoint":10805,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":8643,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IERC20_$10812__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed":{"entryPoint":10875,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3659d4e5f95ff79d6b4bfc4ef30ecea959c6574585372b1f2b55fd5d9b45e4f4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_468e0bfcb3e3ab0378a7d7aca9480e7f3c9394926fb120f85a78a58c132177eb__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_547be7f5ed2d17cca91d35e8212265e350385ed13daeee07722cf3e686dd6726__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5e9995c4674de2ad727ffbe3c3110784ecdbab72c3e1a2bdc6129e561bb0f370__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_6d10d9193d6dae542704df3b3ab8bcf0eeb6847d3d136ed4b04aee07a7f72dfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_920ab7aea64abf6f625f3ec866769a336d71d85943ea085dcc6d4f83565e10e2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a167df2a4d2ab6c5ee865e91ee543461cb54682b898fb54f9c2d17424e75a781__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":10121,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a7a86fffacc19e5c55f7740c49d3c43b8158ebebe8d693c955c37638cd63750e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b906ee6e71cd5815b0e043fe7cf4686b9eba5c13a6e0a21a7bb55e8a6681b39d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c2ec1c8b95f7fdd82a9cd723ab25579d58e30b4630228130b1c03ae94813d95b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c8de02deba8e639087754d5067b8a43e5887b03be7353558822d412acbff2048__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c9580fd05844cb84bf0a747c48ec42a21f1dca0bc044d3619707fb319eddae0d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":11364,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d942505f5a21659daedb4f74215666300f325ec8e6deb29a6240331f6ece39d6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ef06697a0ef9ea911497bdcdba4dca4da1254e21c81d969c12b4cc8c2147f5f7__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr__to_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_address__to_t_uint256_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_array$_t_uint256_$dyn_calldata_ptr_t_bool__to_t_uint256_t_array$_t_uint256_$dyn_memory_ptr_t_bool__fromStack_library_reversed":{"entryPoint":11319,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_array$_t_uint256_$dyn_calldata_ptr_t_uint256__to_t_uint256_t_array$_t_uint256_$dyn_memory_ptr_t_uint256__fromStack_library_reversed":{"entryPoint":10390,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint256__to_t_uint256_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint256_t_array$_t_uint256_$dyn_calldata_ptr__to_t_uint256_t_uint256_t_array$_t_uint256_$dyn_memory_ptr__fromStack_library_reversed":{"entryPoint":10213,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint256_t_uint8__to_t_uint256_t_uint256_t_uint8__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint256_t_uint8_t_uint256__to_t_uint256_t_uint256_t_uint8_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint8_t_uint8_t_uint256__to_t_uint256_t_uint8_t_uint8_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint8_t_uint8_t_uint256_t_uint256__to_t_uint256_t_uint8_t_uint8_t_uint256_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_struct$_Swap_$34379_storage_t_address__to_t_struct$_Swap_$34379_memory_ptr_t_address__fromStack_reversed":{"entryPoint":11090,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_contract$_LPToken_$23179__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":9365,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_contract_IERC20_dyn":{"entryPoint":9414,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":10496,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint8":{"entryPoint":10515,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":10565,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":10793,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":10632,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":10941,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":10477,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint8":{"entryPoint":10540,"id":null,"parameterSlots":2,"returnSlots":1},"extract_from_storage_value_offsett_contract_LPToken":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":10455,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":10433,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":9343,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":8937,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":9995,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:32280:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:76:181","statements":[{"nodeType":"YulAssignment","src":"125:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:181"},"nodeType":"YulFunctionCall","src":"133:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"178:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:181"},"nodeType":"YulFunctionCall","src":"160:25:181"},"nodeType":"YulExpressionStatement","src":"160:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:181","type":""}],"src":"14:177:181"},{"body":{"nodeType":"YulBlock","src":"280:283:181","statements":[{"body":{"nodeType":"YulBlock","src":"329:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"338:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"341:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"331:6:181"},"nodeType":"YulFunctionCall","src":"331:12:181"},"nodeType":"YulExpressionStatement","src":"331:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"308:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"316:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"304:3:181"},"nodeType":"YulFunctionCall","src":"304:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"323:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"300:3:181"},"nodeType":"YulFunctionCall","src":"300:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"293:6:181"},"nodeType":"YulFunctionCall","src":"293:35:181"},"nodeType":"YulIf","src":"290:55:181"},{"nodeType":"YulAssignment","src":"354:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"377:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"364:12:181"},"nodeType":"YulFunctionCall","src":"364:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"354:6:181"}]},{"body":{"nodeType":"YulBlock","src":"427:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"436:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"439:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"429:6:181"},"nodeType":"YulFunctionCall","src":"429:12:181"},"nodeType":"YulExpressionStatement","src":"429:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"399:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"407:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"396:2:181"},"nodeType":"YulFunctionCall","src":"396:30:181"},"nodeType":"YulIf","src":"393:50:181"},{"nodeType":"YulAssignment","src":"452:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"468:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"476:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"464:3:181"},"nodeType":"YulFunctionCall","src":"464:17:181"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"452:8:181"}]},{"body":{"nodeType":"YulBlock","src":"541:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"550:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"553:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"543:6:181"},"nodeType":"YulFunctionCall","src":"543:12:181"},"nodeType":"YulExpressionStatement","src":"543:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"504:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"516:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"519:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"512:3:181"},"nodeType":"YulFunctionCall","src":"512:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"500:3:181"},"nodeType":"YulFunctionCall","src":"500:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"529:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"496:3:181"},"nodeType":"YulFunctionCall","src":"496:38:181"},{"name":"end","nodeType":"YulIdentifier","src":"536:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"493:2:181"},"nodeType":"YulFunctionCall","src":"493:47:181"},"nodeType":"YulIf","src":"490:67:181"}]},"name":"abi_decode_array_uint256_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"243:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"251:3:181","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"259:8:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"269:6:181","type":""}],"src":"196:367:181"},{"body":{"nodeType":"YulBlock","src":"707:434:181","statements":[{"body":{"nodeType":"YulBlock","src":"753:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"762:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"765:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"755:6:181"},"nodeType":"YulFunctionCall","src":"755:12:181"},"nodeType":"YulExpressionStatement","src":"755:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"728:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"737:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"724:3:181"},"nodeType":"YulFunctionCall","src":"724:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"749:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"720:3:181"},"nodeType":"YulFunctionCall","src":"720:32:181"},"nodeType":"YulIf","src":"717:52:181"},{"nodeType":"YulAssignment","src":"778:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"801:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"788:12:181"},"nodeType":"YulFunctionCall","src":"788:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"778:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"820:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"851:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"862:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"847:3:181"},"nodeType":"YulFunctionCall","src":"847:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"834:12:181"},"nodeType":"YulFunctionCall","src":"834:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"824:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"909:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"918:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"921:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"911:6:181"},"nodeType":"YulFunctionCall","src":"911:12:181"},"nodeType":"YulExpressionStatement","src":"911:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"881:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"889:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"878:2:181"},"nodeType":"YulFunctionCall","src":"878:30:181"},"nodeType":"YulIf","src":"875:50:181"},{"nodeType":"YulVariableDeclaration","src":"934:96:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1002:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1013:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"998:3:181"},"nodeType":"YulFunctionCall","src":"998:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1022:7:181"}],"functionName":{"name":"abi_decode_array_uint256_dyn_calldata","nodeType":"YulIdentifier","src":"960:37:181"},"nodeType":"YulFunctionCall","src":"960:70:181"},"variables":[{"name":"value1_1","nodeType":"YulTypedName","src":"938:8:181","type":""},{"name":"value2_1","nodeType":"YulTypedName","src":"948:8:181","type":""}]},{"nodeType":"YulAssignment","src":"1039:18:181","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"1049:8:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1039:6:181"}]},{"nodeType":"YulAssignment","src":"1066:18:181","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"1076:8:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1066:6:181"}]},{"nodeType":"YulAssignment","src":"1093:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1120:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1131:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1116:3:181"},"nodeType":"YulFunctionCall","src":"1116:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1103:12:181"},"nodeType":"YulFunctionCall","src":"1103:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1093:6:181"}]}]},"name":"abi_decode_tuple_t_uint256t_array$_t_uint256_$dyn_calldata_ptrt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"649:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"660:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"672:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"680:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"688:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"696:6:181","type":""}],"src":"568:573:181"},{"body":{"nodeType":"YulBlock","src":"1297:481:181","statements":[{"nodeType":"YulVariableDeclaration","src":"1307:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1317:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1311:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1328:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1346:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1357:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1342:3:181"},"nodeType":"YulFunctionCall","src":"1342:18:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"1332:6:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1376:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1387:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1369:6:181"},"nodeType":"YulFunctionCall","src":"1369:21:181"},"nodeType":"YulExpressionStatement","src":"1369:21:181"},{"nodeType":"YulVariableDeclaration","src":"1399:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"1410:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"1403:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1425:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1445:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1439:5:181"},"nodeType":"YulFunctionCall","src":"1439:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1429:6:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"1468:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"1476:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1461:6:181"},"nodeType":"YulFunctionCall","src":"1461:22:181"},"nodeType":"YulExpressionStatement","src":"1461:22:181"},{"nodeType":"YulAssignment","src":"1492:25:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1503:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1514:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1499:3:181"},"nodeType":"YulFunctionCall","src":"1499:18:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"1492:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"1526:29:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1544:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1552:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1540:3:181"},"nodeType":"YulFunctionCall","src":"1540:15:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"1530:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1564:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1573:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"1568:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1632:120:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1653:3:181"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"1664:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1658:5:181"},"nodeType":"YulFunctionCall","src":"1658:13:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1646:6:181"},"nodeType":"YulFunctionCall","src":"1646:26:181"},"nodeType":"YulExpressionStatement","src":"1646:26:181"},{"nodeType":"YulAssignment","src":"1685:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1696:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1701:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1692:3:181"},"nodeType":"YulFunctionCall","src":"1692:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"1685:3:181"}]},{"nodeType":"YulAssignment","src":"1717:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"1731:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1739:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1727:3:181"},"nodeType":"YulFunctionCall","src":"1727:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"1717:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1594:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"1597:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1591:2:181"},"nodeType":"YulFunctionCall","src":"1591:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1605:18:181","statements":[{"nodeType":"YulAssignment","src":"1607:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1616:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"1619:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1612:3:181"},"nodeType":"YulFunctionCall","src":"1612:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"1607:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"1587:3:181","statements":[]},"src":"1583:169:181"},{"nodeType":"YulAssignment","src":"1761:11:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"1769:3:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1761:4:181"}]}]},"name":"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1266:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1277:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1288:4:181","type":""}],"src":"1146:632:181"},{"body":{"nodeType":"YulBlock","src":"1830:109:181","statements":[{"nodeType":"YulAssignment","src":"1840:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1862:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1849:12:181"},"nodeType":"YulFunctionCall","src":"1849:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1840:5:181"}]},{"body":{"nodeType":"YulBlock","src":"1917:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1926:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1929:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1919:6:181"},"nodeType":"YulFunctionCall","src":"1919:12:181"},"nodeType":"YulExpressionStatement","src":"1919:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1891:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1902:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"1909:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1898:3:181"},"nodeType":"YulFunctionCall","src":"1898:16:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1888:2:181"},"nodeType":"YulFunctionCall","src":"1888:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1881:6:181"},"nodeType":"YulFunctionCall","src":"1881:35:181"},"nodeType":"YulIf","src":"1878:55:181"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1809:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1820:5:181","type":""}],"src":"1783:156:181"},{"body":{"nodeType":"YulBlock","src":"2029:165:181","statements":[{"body":{"nodeType":"YulBlock","src":"2075:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2084:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2087:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2077:6:181"},"nodeType":"YulFunctionCall","src":"2077:12:181"},"nodeType":"YulExpressionStatement","src":"2077:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2050:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2059:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2046:3:181"},"nodeType":"YulFunctionCall","src":"2046:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2071:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2042:3:181"},"nodeType":"YulFunctionCall","src":"2042:32:181"},"nodeType":"YulIf","src":"2039:52:181"},{"nodeType":"YulAssignment","src":"2100:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2123:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2110:12:181"},"nodeType":"YulFunctionCall","src":"2110:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2100:6:181"}]},{"nodeType":"YulAssignment","src":"2142:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2173:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2184:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2169:3:181"},"nodeType":"YulFunctionCall","src":"2169:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2152:16:181"},"nodeType":"YulFunctionCall","src":"2152:36:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2142:6:181"}]}]},"name":"abi_decode_tuple_t_uint256t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1987:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1998:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2010:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2018:6:181","type":""}],"src":"1944:250:181"},{"body":{"nodeType":"YulBlock","src":"2269:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"2315:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2324:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2327:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2317:6:181"},"nodeType":"YulFunctionCall","src":"2317:12:181"},"nodeType":"YulExpressionStatement","src":"2317:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2290:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2299:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2286:3:181"},"nodeType":"YulFunctionCall","src":"2286:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2311:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2282:3:181"},"nodeType":"YulFunctionCall","src":"2282:32:181"},"nodeType":"YulIf","src":"2279:52:181"},{"nodeType":"YulAssignment","src":"2340:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2363:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2350:12:181"},"nodeType":"YulFunctionCall","src":"2350:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2340:6:181"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2235:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2246:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2258:6:181","type":""}],"src":"2199:180:181"},{"body":{"nodeType":"YulBlock","src":"2503:268:181","statements":[{"body":{"nodeType":"YulBlock","src":"2550:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2559:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2562:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2552:6:181"},"nodeType":"YulFunctionCall","src":"2552:12:181"},"nodeType":"YulExpressionStatement","src":"2552:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2524:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2533:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2520:3:181"},"nodeType":"YulFunctionCall","src":"2520:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2545:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2516:3:181"},"nodeType":"YulFunctionCall","src":"2516:33:181"},"nodeType":"YulIf","src":"2513:53:181"},{"nodeType":"YulAssignment","src":"2575:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2598:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2585:12:181"},"nodeType":"YulFunctionCall","src":"2585:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2575:6:181"}]},{"nodeType":"YulAssignment","src":"2617:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2648:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2659:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2644:3:181"},"nodeType":"YulFunctionCall","src":"2644:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2627:16:181"},"nodeType":"YulFunctionCall","src":"2627:36:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2617:6:181"}]},{"nodeType":"YulAssignment","src":"2672:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2699:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2710:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2695:3:181"},"nodeType":"YulFunctionCall","src":"2695:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2682:12:181"},"nodeType":"YulFunctionCall","src":"2682:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2672:6:181"}]},{"nodeType":"YulAssignment","src":"2723:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2750:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2761:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2746:3:181"},"nodeType":"YulFunctionCall","src":"2746:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2733:12:181"},"nodeType":"YulFunctionCall","src":"2733:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2723:6:181"}]}]},"name":"abi_decode_tuple_t_uint256t_uint8t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2445:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2456:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2468:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2476:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2484:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2492:6:181","type":""}],"src":"2384:387:181"},{"body":{"nodeType":"YulBlock","src":"2915:434:181","statements":[{"body":{"nodeType":"YulBlock","src":"2961:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2970:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2973:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2963:6:181"},"nodeType":"YulFunctionCall","src":"2963:12:181"},"nodeType":"YulExpressionStatement","src":"2963:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2936:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2945:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2932:3:181"},"nodeType":"YulFunctionCall","src":"2932:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2957:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2928:3:181"},"nodeType":"YulFunctionCall","src":"2928:32:181"},"nodeType":"YulIf","src":"2925:52:181"},{"nodeType":"YulVariableDeclaration","src":"2986:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3013:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3000:12:181"},"nodeType":"YulFunctionCall","src":"3000:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2990:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3066:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3075:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3078:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3068:6:181"},"nodeType":"YulFunctionCall","src":"3068:12:181"},"nodeType":"YulExpressionStatement","src":"3068:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3038:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3046:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3035:2:181"},"nodeType":"YulFunctionCall","src":"3035:30:181"},"nodeType":"YulIf","src":"3032:50:181"},{"nodeType":"YulVariableDeclaration","src":"3091:96:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3159:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"3170:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3155:3:181"},"nodeType":"YulFunctionCall","src":"3155:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3179:7:181"}],"functionName":{"name":"abi_decode_array_uint256_dyn_calldata","nodeType":"YulIdentifier","src":"3117:37:181"},"nodeType":"YulFunctionCall","src":"3117:70:181"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"3095:8:181","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"3105:8:181","type":""}]},{"nodeType":"YulAssignment","src":"3196:18:181","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"3206:8:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3196:6:181"}]},{"nodeType":"YulAssignment","src":"3223:18:181","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"3233:8:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3223:6:181"}]},{"nodeType":"YulAssignment","src":"3250:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3277:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3288:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3273:3:181"},"nodeType":"YulFunctionCall","src":"3273:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3260:12:181"},"nodeType":"YulFunctionCall","src":"3260:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3250:6:181"}]},{"nodeType":"YulAssignment","src":"3301:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3328:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3339:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3324:3:181"},"nodeType":"YulFunctionCall","src":"3324:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3311:12:181"},"nodeType":"YulFunctionCall","src":"3311:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3301:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_uint256_$dyn_calldata_ptrt_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2857:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2868:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2880:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2888:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2896:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2904:6:181","type":""}],"src":"2776:573:181"},{"body":{"nodeType":"YulBlock","src":"3399:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"3463:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3472:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3475:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3465:6:181"},"nodeType":"YulFunctionCall","src":"3465:12:181"},"nodeType":"YulExpressionStatement","src":"3465:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3422:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3433:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3448:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3453:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3444:3:181"},"nodeType":"YulFunctionCall","src":"3444:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3457:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3440:3:181"},"nodeType":"YulFunctionCall","src":"3440:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3429:3:181"},"nodeType":"YulFunctionCall","src":"3429:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3419:2:181"},"nodeType":"YulFunctionCall","src":"3419:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3412:6:181"},"nodeType":"YulFunctionCall","src":"3412:50:181"},"nodeType":"YulIf","src":"3409:70:181"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3388:5:181","type":""}],"src":"3354:131:181"},{"body":{"nodeType":"YulBlock","src":"3539:85:181","statements":[{"nodeType":"YulAssignment","src":"3549:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3571:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3558:12:181"},"nodeType":"YulFunctionCall","src":"3558:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3549:5:181"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3612:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3587:24:181"},"nodeType":"YulFunctionCall","src":"3587:31:181"},"nodeType":"YulExpressionStatement","src":"3587:31:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3518:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3529:5:181","type":""}],"src":"3490:134:181"},{"body":{"nodeType":"YulBlock","src":"3767:456:181","statements":[{"body":{"nodeType":"YulBlock","src":"3814:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3823:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3826:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3816:6:181"},"nodeType":"YulFunctionCall","src":"3816:12:181"},"nodeType":"YulExpressionStatement","src":"3816:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3788:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3797:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3784:3:181"},"nodeType":"YulFunctionCall","src":"3784:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3809:3:181","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3780:3:181"},"nodeType":"YulFunctionCall","src":"3780:33:181"},"nodeType":"YulIf","src":"3777:53:181"},{"nodeType":"YulAssignment","src":"3839:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3862:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3849:12:181"},"nodeType":"YulFunctionCall","src":"3849:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3839:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3881:45:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3911:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3922:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3907:3:181"},"nodeType":"YulFunctionCall","src":"3907:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3894:12:181"},"nodeType":"YulFunctionCall","src":"3894:32:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3885:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3960:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3935:24:181"},"nodeType":"YulFunctionCall","src":"3935:31:181"},"nodeType":"YulExpressionStatement","src":"3935:31:181"},{"nodeType":"YulAssignment","src":"3975:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"3985:5:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3975:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3999:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4031:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4042:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4027:3:181"},"nodeType":"YulFunctionCall","src":"4027:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4014:12:181"},"nodeType":"YulFunctionCall","src":"4014:32:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4003:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4080:7:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4055:24:181"},"nodeType":"YulFunctionCall","src":"4055:33:181"},"nodeType":"YulExpressionStatement","src":"4055:33:181"},{"nodeType":"YulAssignment","src":"4097:17:181","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4107:7:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4097:6:181"}]},{"nodeType":"YulAssignment","src":"4123:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4150:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4161:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4146:3:181"},"nodeType":"YulFunctionCall","src":"4146:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4133:12:181"},"nodeType":"YulFunctionCall","src":"4133:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4123:6:181"}]},{"nodeType":"YulAssignment","src":"4174:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4201:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4212:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4197:3:181"},"nodeType":"YulFunctionCall","src":"4197:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4184:12:181"},"nodeType":"YulFunctionCall","src":"4184:33:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"4174:6:181"}]}]},"name":"abi_decode_tuple_t_uint256t_addresst_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3701:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3712:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3724:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3732:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3740:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3748:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3756:6:181","type":""}],"src":"3629:594:181"},{"body":{"nodeType":"YulBlock","src":"4315:161:181","statements":[{"body":{"nodeType":"YulBlock","src":"4361:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4370:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4373:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4363:6:181"},"nodeType":"YulFunctionCall","src":"4363:12:181"},"nodeType":"YulExpressionStatement","src":"4363:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4336:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"4345:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4332:3:181"},"nodeType":"YulFunctionCall","src":"4332:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"4357:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4328:3:181"},"nodeType":"YulFunctionCall","src":"4328:32:181"},"nodeType":"YulIf","src":"4325:52:181"},{"nodeType":"YulAssignment","src":"4386:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4409:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4396:12:181"},"nodeType":"YulFunctionCall","src":"4396:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4386:6:181"}]},{"nodeType":"YulAssignment","src":"4428:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4455:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4466:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4451:3:181"},"nodeType":"YulFunctionCall","src":"4451:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4438:12:181"},"nodeType":"YulFunctionCall","src":"4438:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4428:6:181"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4273:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4284:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4296:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4304:6:181","type":""}],"src":"4228:248:181"},{"body":{"nodeType":"YulBlock","src":"4576:92:181","statements":[{"nodeType":"YulAssignment","src":"4586:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4598:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4609:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4594:3:181"},"nodeType":"YulFunctionCall","src":"4594:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4586:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4628:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4653:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4646:6:181"},"nodeType":"YulFunctionCall","src":"4646:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4639:6:181"},"nodeType":"YulFunctionCall","src":"4639:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4621:6:181"},"nodeType":"YulFunctionCall","src":"4621:41:181"},"nodeType":"YulExpressionStatement","src":"4621:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4545:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4556:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4567:4:181","type":""}],"src":"4481:187:181"},{"body":{"nodeType":"YulBlock","src":"4726:60:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4743:3:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4752:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4767:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4772:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4763:3:181"},"nodeType":"YulFunctionCall","src":"4763:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4776:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4759:3:181"},"nodeType":"YulFunctionCall","src":"4759:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4748:3:181"},"nodeType":"YulFunctionCall","src":"4748:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4736:6:181"},"nodeType":"YulFunctionCall","src":"4736:44:181"},"nodeType":"YulExpressionStatement","src":"4736:44:181"}]},"name":"abi_encode_contract_LPToken","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4710:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4717:3:181","type":""}],"src":"4673:113:181"},{"body":{"nodeType":"YulBlock","src":"5077:364:181","statements":[{"nodeType":"YulAssignment","src":"5087:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5099:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5110:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5095:3:181"},"nodeType":"YulFunctionCall","src":"5095:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5087:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5130:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"5141:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5123:6:181"},"nodeType":"YulFunctionCall","src":"5123:25:181"},"nodeType":"YulExpressionStatement","src":"5123:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5168:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5179:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5164:3:181"},"nodeType":"YulFunctionCall","src":"5164:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"5184:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5157:6:181"},"nodeType":"YulFunctionCall","src":"5157:34:181"},"nodeType":"YulExpressionStatement","src":"5157:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5211:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5222:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5207:3:181"},"nodeType":"YulFunctionCall","src":"5207:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"5227:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5200:6:181"},"nodeType":"YulFunctionCall","src":"5200:34:181"},"nodeType":"YulExpressionStatement","src":"5200:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5254:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5265:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5250:3:181"},"nodeType":"YulFunctionCall","src":"5250:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"5270:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5243:6:181"},"nodeType":"YulFunctionCall","src":"5243:34:181"},"nodeType":"YulExpressionStatement","src":"5243:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5297:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5308:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5293:3:181"},"nodeType":"YulFunctionCall","src":"5293:19:181"},{"name":"value4","nodeType":"YulIdentifier","src":"5314:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5286:6:181"},"nodeType":"YulFunctionCall","src":"5286:35:181"},"nodeType":"YulExpressionStatement","src":"5286:35:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5341:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5352:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5337:3:181"},"nodeType":"YulFunctionCall","src":"5337:19:181"},{"name":"value5","nodeType":"YulIdentifier","src":"5358:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5330:6:181"},"nodeType":"YulFunctionCall","src":"5330:35:181"},"nodeType":"YulExpressionStatement","src":"5330:35:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5385:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5396:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5381:3:181"},"nodeType":"YulFunctionCall","src":"5381:19:181"},{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"5406:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5422:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5427:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5418:3:181"},"nodeType":"YulFunctionCall","src":"5418:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5431:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5414:3:181"},"nodeType":"YulFunctionCall","src":"5414:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5402:3:181"},"nodeType":"YulFunctionCall","src":"5402:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5374:6:181"},"nodeType":"YulFunctionCall","src":"5374:61:181"},"nodeType":"YulExpressionStatement","src":"5374:61:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_contract$_LPToken_$23179__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4998:9:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"5009:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"5017:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"5025:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5033:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5041:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5049:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5057:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5068:4:181","type":""}],"src":"4791:650:181"},{"body":{"nodeType":"YulBlock","src":"5516:177:181","statements":[{"body":{"nodeType":"YulBlock","src":"5562:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5571:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5574:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5564:6:181"},"nodeType":"YulFunctionCall","src":"5564:12:181"},"nodeType":"YulExpressionStatement","src":"5564:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5537:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5546:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5533:3:181"},"nodeType":"YulFunctionCall","src":"5533:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5558:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5529:3:181"},"nodeType":"YulFunctionCall","src":"5529:32:181"},"nodeType":"YulIf","src":"5526:52:181"},{"nodeType":"YulVariableDeclaration","src":"5587:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5613:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5600:12:181"},"nodeType":"YulFunctionCall","src":"5600:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5591:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5657:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5632:24:181"},"nodeType":"YulFunctionCall","src":"5632:31:181"},"nodeType":"YulExpressionStatement","src":"5632:31:181"},{"nodeType":"YulAssignment","src":"5672:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"5682:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5672:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5482:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5493:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5505:6:181","type":""}],"src":"5446:247:181"},{"body":{"nodeType":"YulBlock","src":"5795:87:181","statements":[{"nodeType":"YulAssignment","src":"5805:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5817:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5828:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5813:3:181"},"nodeType":"YulFunctionCall","src":"5813:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5805:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5847:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5862:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5870:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5858:3:181"},"nodeType":"YulFunctionCall","src":"5858:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5840:6:181"},"nodeType":"YulFunctionCall","src":"5840:36:181"},"nodeType":"YulExpressionStatement","src":"5840:36:181"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5764:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5775:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5786:4:181","type":""}],"src":"5698:184:181"},{"body":{"nodeType":"YulBlock","src":"5987:220:181","statements":[{"body":{"nodeType":"YulBlock","src":"6033:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6042:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6045:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6035:6:181"},"nodeType":"YulFunctionCall","src":"6035:12:181"},"nodeType":"YulExpressionStatement","src":"6035:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6008:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6017:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6004:3:181"},"nodeType":"YulFunctionCall","src":"6004:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"6029:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6000:3:181"},"nodeType":"YulFunctionCall","src":"6000:32:181"},"nodeType":"YulIf","src":"5997:52:181"},{"nodeType":"YulAssignment","src":"6058:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6085:9:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"6068:16:181"},"nodeType":"YulFunctionCall","src":"6068:27:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6058:6:181"}]},{"nodeType":"YulAssignment","src":"6104:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6135:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6146:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6131:3:181"},"nodeType":"YulFunctionCall","src":"6131:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"6114:16:181"},"nodeType":"YulFunctionCall","src":"6114:36:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6104:6:181"}]},{"nodeType":"YulAssignment","src":"6159:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6186:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6197:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6182:3:181"},"nodeType":"YulFunctionCall","src":"6182:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6169:12:181"},"nodeType":"YulFunctionCall","src":"6169:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6159:6:181"}]}]},"name":"abi_decode_tuple_t_uint8t_uint8t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5937:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5948:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5960:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5968:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5976:6:181","type":""}],"src":"5887:320:181"},{"body":{"nodeType":"YulBlock","src":"6316:352:181","statements":[{"body":{"nodeType":"YulBlock","src":"6362:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6371:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6374:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6364:6:181"},"nodeType":"YulFunctionCall","src":"6364:12:181"},"nodeType":"YulExpressionStatement","src":"6364:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6337:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6346:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6333:3:181"},"nodeType":"YulFunctionCall","src":"6333:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"6358:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6329:3:181"},"nodeType":"YulFunctionCall","src":"6329:32:181"},"nodeType":"YulIf","src":"6326:52:181"},{"nodeType":"YulVariableDeclaration","src":"6387:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6413:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6400:12:181"},"nodeType":"YulFunctionCall","src":"6400:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6391:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6457:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6432:24:181"},"nodeType":"YulFunctionCall","src":"6432:31:181"},"nodeType":"YulExpressionStatement","src":"6432:31:181"},{"nodeType":"YulAssignment","src":"6472:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"6482:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6472:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"6496:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6528:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6539:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6524:3:181"},"nodeType":"YulFunctionCall","src":"6524:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6511:12:181"},"nodeType":"YulFunctionCall","src":"6511:32:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"6500:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6577:7:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6552:24:181"},"nodeType":"YulFunctionCall","src":"6552:33:181"},"nodeType":"YulExpressionStatement","src":"6552:33:181"},{"nodeType":"YulAssignment","src":"6594:17:181","value":{"name":"value_1","nodeType":"YulIdentifier","src":"6604:7:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6594:6:181"}]},{"nodeType":"YulAssignment","src":"6620:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6647:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6658:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6643:3:181"},"nodeType":"YulFunctionCall","src":"6643:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6630:12:181"},"nodeType":"YulFunctionCall","src":"6630:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6620:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6266:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6277:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6289:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6297:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6305:6:181","type":""}],"src":"6212:456:181"},{"body":{"nodeType":"YulBlock","src":"6741:114:181","statements":[{"body":{"nodeType":"YulBlock","src":"6787:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6796:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6799:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6789:6:181"},"nodeType":"YulFunctionCall","src":"6789:12:181"},"nodeType":"YulExpressionStatement","src":"6789:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6762:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6771:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6758:3:181"},"nodeType":"YulFunctionCall","src":"6758:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"6783:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6754:3:181"},"nodeType":"YulFunctionCall","src":"6754:32:181"},"nodeType":"YulIf","src":"6751:52:181"},{"nodeType":"YulAssignment","src":"6812:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6839:9:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"6822:16:181"},"nodeType":"YulFunctionCall","src":"6822:27:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6812:6:181"}]}]},"name":"abi_decode_tuple_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6707:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6718:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6730:6:181","type":""}],"src":"6673:182:181"},{"body":{"nodeType":"YulBlock","src":"6977:102:181","statements":[{"nodeType":"YulAssignment","src":"6987:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6999:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7010:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6995:3:181"},"nodeType":"YulFunctionCall","src":"6995:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6987:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7029:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7044:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7060:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"7065:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7056:3:181"},"nodeType":"YulFunctionCall","src":"7056:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"7069:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7052:3:181"},"nodeType":"YulFunctionCall","src":"7052:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7040:3:181"},"nodeType":"YulFunctionCall","src":"7040:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7022:6:181"},"nodeType":"YulFunctionCall","src":"7022:51:181"},"nodeType":"YulExpressionStatement","src":"7022:51:181"}]},"name":"abi_encode_tuple_t_contract$_IERC20_$10812__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6946:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6957:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6968:4:181","type":""}],"src":"6860:219:181"},{"body":{"nodeType":"YulBlock","src":"7185:102:181","statements":[{"nodeType":"YulAssignment","src":"7195:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7207:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7218:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7203:3:181"},"nodeType":"YulFunctionCall","src":"7203:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7195:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7237:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7252:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7268:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"7273:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7264:3:181"},"nodeType":"YulFunctionCall","src":"7264:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"7277:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7260:3:181"},"nodeType":"YulFunctionCall","src":"7260:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7248:3:181"},"nodeType":"YulFunctionCall","src":"7248:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7230:6:181"},"nodeType":"YulFunctionCall","src":"7230:51:181"},"nodeType":"YulExpressionStatement","src":"7230:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7154:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7165:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7176:4:181","type":""}],"src":"7084:203:181"},{"body":{"nodeType":"YulBlock","src":"7426:324:181","statements":[{"body":{"nodeType":"YulBlock","src":"7473:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7482:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7485:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7475:6:181"},"nodeType":"YulFunctionCall","src":"7475:12:181"},"nodeType":"YulExpressionStatement","src":"7475:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7447:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7456:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7443:3:181"},"nodeType":"YulFunctionCall","src":"7443:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7468:3:181","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7439:3:181"},"nodeType":"YulFunctionCall","src":"7439:33:181"},"nodeType":"YulIf","src":"7436:53:181"},{"nodeType":"YulAssignment","src":"7498:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7525:9:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"7508:16:181"},"nodeType":"YulFunctionCall","src":"7508:27:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7498:6:181"}]},{"nodeType":"YulAssignment","src":"7544:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7575:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7586:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7571:3:181"},"nodeType":"YulFunctionCall","src":"7571:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"7554:16:181"},"nodeType":"YulFunctionCall","src":"7554:36:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7544:6:181"}]},{"nodeType":"YulAssignment","src":"7599:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7626:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7637:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7622:3:181"},"nodeType":"YulFunctionCall","src":"7622:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7609:12:181"},"nodeType":"YulFunctionCall","src":"7609:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7599:6:181"}]},{"nodeType":"YulAssignment","src":"7650:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7677:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7688:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7673:3:181"},"nodeType":"YulFunctionCall","src":"7673:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7660:12:181"},"nodeType":"YulFunctionCall","src":"7660:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"7650:6:181"}]},{"nodeType":"YulAssignment","src":"7701:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7728:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7739:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7724:3:181"},"nodeType":"YulFunctionCall","src":"7724:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7711:12:181"},"nodeType":"YulFunctionCall","src":"7711:33:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"7701:6:181"}]}]},"name":"abi_decode_tuple_t_uint8t_uint8t_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7360:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7371:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7383:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7391:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7399:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7407:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"7415:6:181","type":""}],"src":"7292:458:181"},{"body":{"nodeType":"YulBlock","src":"7787:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7804:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7811:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"7816:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7807:3:181"},"nodeType":"YulFunctionCall","src":"7807:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7797:6:181"},"nodeType":"YulFunctionCall","src":"7797:31:181"},"nodeType":"YulExpressionStatement","src":"7797:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7844:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7847:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7837:6:181"},"nodeType":"YulFunctionCall","src":"7837:15:181"},"nodeType":"YulExpressionStatement","src":"7837:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7868:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7871:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7861:6:181"},"nodeType":"YulFunctionCall","src":"7861:15:181"},"nodeType":"YulExpressionStatement","src":"7861:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"7755:127:181"},{"body":{"nodeType":"YulBlock","src":"7932:230:181","statements":[{"nodeType":"YulAssignment","src":"7942:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7958:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7952:5:181"},"nodeType":"YulFunctionCall","src":"7952:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7942:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"7970:58:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7992:6:181"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"8008:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"8014:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8004:3:181"},"nodeType":"YulFunctionCall","src":"8004:13:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8023:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"8019:3:181"},"nodeType":"YulFunctionCall","src":"8019:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8000:3:181"},"nodeType":"YulFunctionCall","src":"8000:27:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7988:3:181"},"nodeType":"YulFunctionCall","src":"7988:40:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"7974:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8103:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"8105:16:181"},"nodeType":"YulFunctionCall","src":"8105:18:181"},"nodeType":"YulExpressionStatement","src":"8105:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"8046:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"8058:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8043:2:181"},"nodeType":"YulFunctionCall","src":"8043:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"8082:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"8094:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8079:2:181"},"nodeType":"YulFunctionCall","src":"8079:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"8040:2:181"},"nodeType":"YulFunctionCall","src":"8040:62:181"},"nodeType":"YulIf","src":"8037:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8141:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"8145:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8134:6:181"},"nodeType":"YulFunctionCall","src":"8134:22:181"},"nodeType":"YulExpressionStatement","src":"8134:22:181"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"7912:4:181","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"7921:6:181","type":""}],"src":"7887:275:181"},{"body":{"nodeType":"YulBlock","src":"8244:114:181","statements":[{"body":{"nodeType":"YulBlock","src":"8288:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"8290:16:181"},"nodeType":"YulFunctionCall","src":"8290:18:181"},"nodeType":"YulExpressionStatement","src":"8290:18:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8260:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8268:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8257:2:181"},"nodeType":"YulFunctionCall","src":"8257:30:181"},"nodeType":"YulIf","src":"8254:56:181"},{"nodeType":"YulAssignment","src":"8319:33:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8335:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"8338:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8331:3:181"},"nodeType":"YulFunctionCall","src":"8331:14:181"},{"kind":"number","nodeType":"YulLiteral","src":"8347:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8327:3:181"},"nodeType":"YulFunctionCall","src":"8327:25:181"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"8319:4:181"}]}]},"name":"array_allocation_size_array_contract_IERC20_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nodeType":"YulTypedName","src":"8224:6:181","type":""}],"returnVariables":[{"name":"size","nodeType":"YulTypedName","src":"8235:4:181","type":""}],"src":"8167:191:181"},{"body":{"nodeType":"YulBlock","src":"8435:681:181","statements":[{"body":{"nodeType":"YulBlock","src":"8484:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8493:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8496:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8486:6:181"},"nodeType":"YulFunctionCall","src":"8486:12:181"},"nodeType":"YulExpressionStatement","src":"8486:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8463:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8471:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8459:3:181"},"nodeType":"YulFunctionCall","src":"8459:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"8478:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8455:3:181"},"nodeType":"YulFunctionCall","src":"8455:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8448:6:181"},"nodeType":"YulFunctionCall","src":"8448:35:181"},"nodeType":"YulIf","src":"8445:55:181"},{"nodeType":"YulVariableDeclaration","src":"8509:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8532:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8519:12:181"},"nodeType":"YulFunctionCall","src":"8519:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8513:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8548:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8558:4:181","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"8552:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8571:79:181","value":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"8646:2:181"}],"functionName":{"name":"array_allocation_size_array_contract_IERC20_dyn","nodeType":"YulIdentifier","src":"8598:47:181"},"nodeType":"YulFunctionCall","src":"8598:51:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"8582:15:181"},"nodeType":"YulFunctionCall","src":"8582:68:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"8575:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8659:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"8672:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"8663:5:181","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"8691:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8696:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8684:6:181"},"nodeType":"YulFunctionCall","src":"8684:15:181"},"nodeType":"YulExpressionStatement","src":"8684:15:181"},{"nodeType":"YulAssignment","src":"8708:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"8719:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"8724:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8715:3:181"},"nodeType":"YulFunctionCall","src":"8715:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"8708:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"8736:46:181","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8758:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8770:1:181","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"8773:2:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8766:3:181"},"nodeType":"YulFunctionCall","src":"8766:10:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8754:3:181"},"nodeType":"YulFunctionCall","src":"8754:23:181"},{"name":"_2","nodeType":"YulIdentifier","src":"8779:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8750:3:181"},"nodeType":"YulFunctionCall","src":"8750:32:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"8740:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8810:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8819:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8822:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8812:6:181"},"nodeType":"YulFunctionCall","src":"8812:12:181"},"nodeType":"YulExpressionStatement","src":"8812:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"8797:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"8805:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8794:2:181"},"nodeType":"YulFunctionCall","src":"8794:15:181"},"nodeType":"YulIf","src":"8791:35:181"},{"nodeType":"YulVariableDeclaration","src":"8835:26:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8850:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"8858:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8846:3:181"},"nodeType":"YulFunctionCall","src":"8846:15:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"8839:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8926:161:181","statements":[{"nodeType":"YulVariableDeclaration","src":"8940:30:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"8966:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8953:12:181"},"nodeType":"YulFunctionCall","src":"8953:17:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8944:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9008:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"8983:24:181"},"nodeType":"YulFunctionCall","src":"8983:31:181"},"nodeType":"YulExpressionStatement","src":"8983:31:181"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"9034:3:181"},{"name":"value","nodeType":"YulIdentifier","src":"9039:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9027:6:181"},"nodeType":"YulFunctionCall","src":"9027:18:181"},"nodeType":"YulExpressionStatement","src":"9027:18:181"},{"nodeType":"YulAssignment","src":"9058:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"9069:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"9074:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9065:3:181"},"nodeType":"YulFunctionCall","src":"9065:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"9058:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"8881:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"8886:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8878:2:181"},"nodeType":"YulFunctionCall","src":"8878:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"8894:23:181","statements":[{"nodeType":"YulAssignment","src":"8896:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"8907:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"8912:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8903:3:181"},"nodeType":"YulFunctionCall","src":"8903:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"8896:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"8874:3:181","statements":[]},"src":"8870:217:181"},{"nodeType":"YulAssignment","src":"9096:14:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"9105:5:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"9096:5:181"}]}]},"name":"abi_decode_array_contract_IERC20_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"8409:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"8417:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"8425:5:181","type":""}],"src":"8363:753:181"},{"body":{"nodeType":"YulBlock","src":"9183:610:181","statements":[{"body":{"nodeType":"YulBlock","src":"9232:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9241:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9244:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9234:6:181"},"nodeType":"YulFunctionCall","src":"9234:12:181"},"nodeType":"YulExpressionStatement","src":"9234:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9211:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"9219:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9207:3:181"},"nodeType":"YulFunctionCall","src":"9207:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"9226:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9203:3:181"},"nodeType":"YulFunctionCall","src":"9203:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9196:6:181"},"nodeType":"YulFunctionCall","src":"9196:35:181"},"nodeType":"YulIf","src":"9193:55:181"},{"nodeType":"YulVariableDeclaration","src":"9257:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9280:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9267:12:181"},"nodeType":"YulFunctionCall","src":"9267:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9261:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9296:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"9306:4:181","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"9300:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9319:79:181","value":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"9394:2:181"}],"functionName":{"name":"array_allocation_size_array_contract_IERC20_dyn","nodeType":"YulIdentifier","src":"9346:47:181"},"nodeType":"YulFunctionCall","src":"9346:51:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"9330:15:181"},"nodeType":"YulFunctionCall","src":"9330:68:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"9323:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9407:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"9420:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"9411:5:181","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"9439:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9444:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9432:6:181"},"nodeType":"YulFunctionCall","src":"9432:15:181"},"nodeType":"YulExpressionStatement","src":"9432:15:181"},{"nodeType":"YulAssignment","src":"9456:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"9467:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"9472:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9463:3:181"},"nodeType":"YulFunctionCall","src":"9463:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"9456:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"9484:46:181","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9506:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9518:1:181","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"9521:2:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9514:3:181"},"nodeType":"YulFunctionCall","src":"9514:10:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9502:3:181"},"nodeType":"YulFunctionCall","src":"9502:23:181"},{"name":"_2","nodeType":"YulIdentifier","src":"9527:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9498:3:181"},"nodeType":"YulFunctionCall","src":"9498:32:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"9488:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9558:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9567:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9570:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9560:6:181"},"nodeType":"YulFunctionCall","src":"9560:12:181"},"nodeType":"YulExpressionStatement","src":"9560:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"9545:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"9553:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9542:2:181"},"nodeType":"YulFunctionCall","src":"9542:15:181"},"nodeType":"YulIf","src":"9539:35:181"},{"nodeType":"YulVariableDeclaration","src":"9583:26:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9598:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"9606:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9594:3:181"},"nodeType":"YulFunctionCall","src":"9594:15:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"9587:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9674:90:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"9695:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"9717:3:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"9700:16:181"},"nodeType":"YulFunctionCall","src":"9700:21:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9688:6:181"},"nodeType":"YulFunctionCall","src":"9688:34:181"},"nodeType":"YulExpressionStatement","src":"9688:34:181"},{"nodeType":"YulAssignment","src":"9735:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"9746:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"9751:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9742:3:181"},"nodeType":"YulFunctionCall","src":"9742:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"9735:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"9629:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"9634:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9626:2:181"},"nodeType":"YulFunctionCall","src":"9626:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"9642:23:181","statements":[{"nodeType":"YulAssignment","src":"9644:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"9655:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"9660:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9651:3:181"},"nodeType":"YulFunctionCall","src":"9651:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"9644:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"9622:3:181","statements":[]},"src":"9618:146:181"},{"nodeType":"YulAssignment","src":"9773:14:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"9782:5:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"9773:5:181"}]}]},"name":"abi_decode_array_uint8_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"9157:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"9165:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"9173:5:181","type":""}],"src":"9121:672:181"},{"body":{"nodeType":"YulBlock","src":"9851:478:181","statements":[{"body":{"nodeType":"YulBlock","src":"9900:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9909:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9912:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9902:6:181"},"nodeType":"YulFunctionCall","src":"9902:12:181"},"nodeType":"YulExpressionStatement","src":"9902:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9879:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"9887:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9875:3:181"},"nodeType":"YulFunctionCall","src":"9875:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"9894:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9871:3:181"},"nodeType":"YulFunctionCall","src":"9871:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9864:6:181"},"nodeType":"YulFunctionCall","src":"9864:35:181"},"nodeType":"YulIf","src":"9861:55:181"},{"nodeType":"YulVariableDeclaration","src":"9925:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9948:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9935:12:181"},"nodeType":"YulFunctionCall","src":"9935:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9929:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9994:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"9996:16:181"},"nodeType":"YulFunctionCall","src":"9996:18:181"},"nodeType":"YulExpressionStatement","src":"9996:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"9970:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"9974:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9967:2:181"},"nodeType":"YulFunctionCall","src":"9967:26:181"},"nodeType":"YulIf","src":"9964:52:181"},{"nodeType":"YulVariableDeclaration","src":"10025:70:181","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"10068:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"10072:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10064:3:181"},"nodeType":"YulFunctionCall","src":"10064:13:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10083:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10079:3:181"},"nodeType":"YulFunctionCall","src":"10079:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10060:3:181"},"nodeType":"YulFunctionCall","src":"10060:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"10089:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10056:3:181"},"nodeType":"YulFunctionCall","src":"10056:38:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"10040:15:181"},"nodeType":"YulFunctionCall","src":"10040:55:181"},"variables":[{"name":"array_1","nodeType":"YulTypedName","src":"10029:7:181","type":""}]},{"expression":{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"10111:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10120:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10104:6:181"},"nodeType":"YulFunctionCall","src":"10104:19:181"},"nodeType":"YulExpressionStatement","src":"10104:19:181"},{"body":{"nodeType":"YulBlock","src":"10171:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10180:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10183:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10173:6:181"},"nodeType":"YulFunctionCall","src":"10173:12:181"},"nodeType":"YulExpressionStatement","src":"10173:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"10146:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10154:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10142:3:181"},"nodeType":"YulFunctionCall","src":"10142:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"10159:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10138:3:181"},"nodeType":"YulFunctionCall","src":"10138:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"10166:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10135:2:181"},"nodeType":"YulFunctionCall","src":"10135:35:181"},"nodeType":"YulIf","src":"10132:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"10213:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"10222:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10209:3:181"},"nodeType":"YulFunctionCall","src":"10209:18:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"10233:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10241:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10229:3:181"},"nodeType":"YulFunctionCall","src":"10229:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10248:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"10196:12:181"},"nodeType":"YulFunctionCall","src":"10196:55:181"},"nodeType":"YulExpressionStatement","src":"10196:55:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"10275:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10284:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10271:3:181"},"nodeType":"YulFunctionCall","src":"10271:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"10289:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10267:3:181"},"nodeType":"YulFunctionCall","src":"10267:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"10296:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10260:6:181"},"nodeType":"YulFunctionCall","src":"10260:38:181"},"nodeType":"YulExpressionStatement","src":"10260:38:181"},{"nodeType":"YulAssignment","src":"10307:16:181","value":{"name":"array_1","nodeType":"YulIdentifier","src":"10316:7:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"10307:5:181"}]}]},"name":"abi_decode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"9825:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"9833:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"9841:5:181","type":""}],"src":"9798:531:181"},{"body":{"nodeType":"YulBlock","src":"10607:1025:181","statements":[{"body":{"nodeType":"YulBlock","src":"10654:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10663:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10666:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10656:6:181"},"nodeType":"YulFunctionCall","src":"10656:12:181"},"nodeType":"YulExpressionStatement","src":"10656:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10628:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"10637:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10624:3:181"},"nodeType":"YulFunctionCall","src":"10624:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"10649:3:181","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10620:3:181"},"nodeType":"YulFunctionCall","src":"10620:33:181"},"nodeType":"YulIf","src":"10617:53:181"},{"nodeType":"YulVariableDeclaration","src":"10679:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10706:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10693:12:181"},"nodeType":"YulFunctionCall","src":"10693:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"10683:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10725:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10735:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10729:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10780:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10789:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10792:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10782:6:181"},"nodeType":"YulFunctionCall","src":"10782:12:181"},"nodeType":"YulExpressionStatement","src":"10782:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"10768:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10776:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10765:2:181"},"nodeType":"YulFunctionCall","src":"10765:14:181"},"nodeType":"YulIf","src":"10762:34:181"},{"nodeType":"YulAssignment","src":"10805:79:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10856:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"10867:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10852:3:181"},"nodeType":"YulFunctionCall","src":"10852:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"10876:7:181"}],"functionName":{"name":"abi_decode_array_contract_IERC20_dyn","nodeType":"YulIdentifier","src":"10815:36:181"},"nodeType":"YulFunctionCall","src":"10815:69:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10805:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"10893:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10926:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10937:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10922:3:181"},"nodeType":"YulFunctionCall","src":"10922:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10909:12:181"},"nodeType":"YulFunctionCall","src":"10909:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"10897:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10970:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10979:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10982:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10972:6:181"},"nodeType":"YulFunctionCall","src":"10972:12:181"},"nodeType":"YulExpressionStatement","src":"10972:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"10956:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10966:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10953:2:181"},"nodeType":"YulFunctionCall","src":"10953:16:181"},"nodeType":"YulIf","src":"10950:36:181"},{"nodeType":"YulAssignment","src":"10995:71:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11036:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"11047:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11032:3:181"},"nodeType":"YulFunctionCall","src":"11032:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"11058:7:181"}],"functionName":{"name":"abi_decode_array_uint8_dyn","nodeType":"YulIdentifier","src":"11005:26:181"},"nodeType":"YulFunctionCall","src":"11005:61:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"10995:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"11075:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11108:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11119:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11104:3:181"},"nodeType":"YulFunctionCall","src":"11104:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11091:12:181"},"nodeType":"YulFunctionCall","src":"11091:32:181"},"variables":[{"name":"offset_2","nodeType":"YulTypedName","src":"11079:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"11152:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11161:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11164:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11154:6:181"},"nodeType":"YulFunctionCall","src":"11154:12:181"},"nodeType":"YulExpressionStatement","src":"11154:12:181"}]},"condition":{"arguments":[{"name":"offset_2","nodeType":"YulIdentifier","src":"11138:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"11148:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11135:2:181"},"nodeType":"YulFunctionCall","src":"11135:16:181"},"nodeType":"YulIf","src":"11132:36:181"},{"nodeType":"YulAssignment","src":"11177:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11209:9:181"},{"name":"offset_2","nodeType":"YulIdentifier","src":"11220:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11205:3:181"},"nodeType":"YulFunctionCall","src":"11205:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"11231:7:181"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"11187:17:181"},"nodeType":"YulFunctionCall","src":"11187:52:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"11177:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"11248:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11281:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11292:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11277:3:181"},"nodeType":"YulFunctionCall","src":"11277:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11264:12:181"},"nodeType":"YulFunctionCall","src":"11264:32:181"},"variables":[{"name":"offset_3","nodeType":"YulTypedName","src":"11252:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"11325:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11334:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11337:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11327:6:181"},"nodeType":"YulFunctionCall","src":"11327:12:181"},"nodeType":"YulExpressionStatement","src":"11327:12:181"}]},"condition":{"arguments":[{"name":"offset_3","nodeType":"YulIdentifier","src":"11311:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"11321:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11308:2:181"},"nodeType":"YulFunctionCall","src":"11308:16:181"},"nodeType":"YulIf","src":"11305:36:181"},{"nodeType":"YulAssignment","src":"11350:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11382:9:181"},{"name":"offset_3","nodeType":"YulIdentifier","src":"11393:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11378:3:181"},"nodeType":"YulFunctionCall","src":"11378:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"11404:7:181"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"11360:17:181"},"nodeType":"YulFunctionCall","src":"11360:52:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"11350:6:181"}]},{"nodeType":"YulAssignment","src":"11421:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11448:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11459:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11444:3:181"},"nodeType":"YulFunctionCall","src":"11444:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11431:12:181"},"nodeType":"YulFunctionCall","src":"11431:33:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"11421:6:181"}]},{"nodeType":"YulAssignment","src":"11473:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11500:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11511:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11496:3:181"},"nodeType":"YulFunctionCall","src":"11496:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11483:12:181"},"nodeType":"YulFunctionCall","src":"11483:33:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"11473:6:181"}]},{"nodeType":"YulAssignment","src":"11525:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11552:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11563:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11548:3:181"},"nodeType":"YulFunctionCall","src":"11548:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11535:12:181"},"nodeType":"YulFunctionCall","src":"11535:33:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"11525:6:181"}]},{"nodeType":"YulAssignment","src":"11577:49:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11610:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11621:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11606:3:181"},"nodeType":"YulFunctionCall","src":"11606:19:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"11587:18:181"},"nodeType":"YulFunctionCall","src":"11587:39:181"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"11577:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptrt_array$_t_uint8_$dyn_memory_ptrt_string_memory_ptrt_string_memory_ptrt_uint256t_uint256t_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10517:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10528:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10540:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10548:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10556:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10564:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"10572:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"10580:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"10588:6:181","type":""},{"name":"value7","nodeType":"YulTypedName","src":"10596:6:181","type":""}],"src":"10334:1298:181"},{"body":{"nodeType":"YulBlock","src":"11679:76:181","statements":[{"body":{"nodeType":"YulBlock","src":"11733:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11742:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11745:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11735:6:181"},"nodeType":"YulFunctionCall","src":"11735:12:181"},"nodeType":"YulExpressionStatement","src":"11735:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11702:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11723:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11716:6:181"},"nodeType":"YulFunctionCall","src":"11716:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11709:6:181"},"nodeType":"YulFunctionCall","src":"11709:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"11699:2:181"},"nodeType":"YulFunctionCall","src":"11699:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11692:6:181"},"nodeType":"YulFunctionCall","src":"11692:40:181"},"nodeType":"YulIf","src":"11689:60:181"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"11668:5:181","type":""}],"src":"11637:118:181"},{"body":{"nodeType":"YulBlock","src":"11879:447:181","statements":[{"body":{"nodeType":"YulBlock","src":"11925:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11934:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11937:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11927:6:181"},"nodeType":"YulFunctionCall","src":"11927:12:181"},"nodeType":"YulExpressionStatement","src":"11927:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11900:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"11909:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11896:3:181"},"nodeType":"YulFunctionCall","src":"11896:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"11921:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11892:3:181"},"nodeType":"YulFunctionCall","src":"11892:32:181"},"nodeType":"YulIf","src":"11889:52:181"},{"nodeType":"YulVariableDeclaration","src":"11950:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11977:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11964:12:181"},"nodeType":"YulFunctionCall","src":"11964:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"11954:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"12030:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12039:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12042:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12032:6:181"},"nodeType":"YulFunctionCall","src":"12032:12:181"},"nodeType":"YulExpressionStatement","src":"12032:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"12002:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"12010:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11999:2:181"},"nodeType":"YulFunctionCall","src":"11999:30:181"},"nodeType":"YulIf","src":"11996:50:181"},{"nodeType":"YulVariableDeclaration","src":"12055:96:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12123:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"12134:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12119:3:181"},"nodeType":"YulFunctionCall","src":"12119:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"12143:7:181"}],"functionName":{"name":"abi_decode_array_uint256_dyn_calldata","nodeType":"YulIdentifier","src":"12081:37:181"},"nodeType":"YulFunctionCall","src":"12081:70:181"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"12059:8:181","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"12069:8:181","type":""}]},{"nodeType":"YulAssignment","src":"12160:18:181","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"12170:8:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"12160:6:181"}]},{"nodeType":"YulAssignment","src":"12187:18:181","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"12197:8:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"12187:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"12214:45:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12244:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12255:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12240:3:181"},"nodeType":"YulFunctionCall","src":"12240:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12227:12:181"},"nodeType":"YulFunctionCall","src":"12227:32:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12218:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12290:5:181"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"12268:21:181"},"nodeType":"YulFunctionCall","src":"12268:28:181"},"nodeType":"YulExpressionStatement","src":"12268:28:181"},{"nodeType":"YulAssignment","src":"12305:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"12315:5:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"12305:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_uint256_$dyn_calldata_ptrt_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11829:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11840:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11852:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11860:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11868:6:181","type":""}],"src":"11760:566:181"},{"body":{"nodeType":"YulBlock","src":"12492:145:181","statements":[{"nodeType":"YulAssignment","src":"12502:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12514:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12525:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12510:3:181"},"nodeType":"YulFunctionCall","src":"12510:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12502:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12544:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"12555:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12537:6:181"},"nodeType":"YulFunctionCall","src":"12537:25:181"},"nodeType":"YulExpressionStatement","src":"12537:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12582:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12593:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12578:3:181"},"nodeType":"YulFunctionCall","src":"12578:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12602:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12618:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"12623:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12614:3:181"},"nodeType":"YulFunctionCall","src":"12614:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"12627:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12610:3:181"},"nodeType":"YulFunctionCall","src":"12610:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12598:3:181"},"nodeType":"YulFunctionCall","src":"12598:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12571:6:181"},"nodeType":"YulFunctionCall","src":"12571:60:181"},"nodeType":"YulExpressionStatement","src":"12571:60:181"}]},"name":"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_address__to_t_uint256_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12453:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12464:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12472:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12483:4:181","type":""}],"src":"12331:306:181"},{"body":{"nodeType":"YulBlock","src":"12775:76:181","statements":[{"nodeType":"YulAssignment","src":"12785:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12797:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12808:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12793:3:181"},"nodeType":"YulFunctionCall","src":"12793:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12785:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12827:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"12838:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12820:6:181"},"nodeType":"YulFunctionCall","src":"12820:25:181"},"nodeType":"YulExpressionStatement","src":"12820:25:181"}]},"name":"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr__to_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12744:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12755:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12766:4:181","type":""}],"src":"12642:209:181"},{"body":{"nodeType":"YulBlock","src":"12937:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"12983:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12992:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12995:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12985:6:181"},"nodeType":"YulFunctionCall","src":"12985:12:181"},"nodeType":"YulExpressionStatement","src":"12985:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12958:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"12967:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12954:3:181"},"nodeType":"YulFunctionCall","src":"12954:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"12979:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12950:3:181"},"nodeType":"YulFunctionCall","src":"12950:32:181"},"nodeType":"YulIf","src":"12947:52:181"},{"nodeType":"YulAssignment","src":"13008:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13024:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13018:5:181"},"nodeType":"YulFunctionCall","src":"13018:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13008:6:181"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12903:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12914:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12926:6:181","type":""}],"src":"12856:184:181"},{"body":{"nodeType":"YulBlock","src":"13219:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13236:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13247:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13229:6:181"},"nodeType":"YulFunctionCall","src":"13229:21:181"},"nodeType":"YulExpressionStatement","src":"13229:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13270:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13281:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13266:3:181"},"nodeType":"YulFunctionCall","src":"13266:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13286:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13259:6:181"},"nodeType":"YulFunctionCall","src":"13259:30:181"},"nodeType":"YulExpressionStatement","src":"13259:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13309:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13320:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13305:3:181"},"nodeType":"YulFunctionCall","src":"13305:18:181"},{"hexValue":"446561646c696e65206e6f74206d6574","kind":"string","nodeType":"YulLiteral","src":"13325:18:181","type":"","value":"Deadline not met"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13298:6:181"},"nodeType":"YulFunctionCall","src":"13298:46:181"},"nodeType":"YulExpressionStatement","src":"13298:46:181"},{"nodeType":"YulAssignment","src":"13353:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13365:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13376:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13361:3:181"},"nodeType":"YulFunctionCall","src":"13361:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13353:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a167df2a4d2ab6c5ee865e91ee543461cb54682b898fb54f9c2d17424e75a781__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13196:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13210:4:181","type":""}],"src":"13045:340:181"},{"body":{"nodeType":"YulBlock","src":"13468:233:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13485:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"13490:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13478:6:181"},"nodeType":"YulFunctionCall","src":"13478:19:181"},"nodeType":"YulExpressionStatement","src":"13478:19:181"},{"body":{"nodeType":"YulBlock","src":"13541:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13550:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13553:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13543:6:181"},"nodeType":"YulFunctionCall","src":"13543:12:181"},"nodeType":"YulExpressionStatement","src":"13543:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"13512:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13528:3:181","type":"","value":"251"},{"kind":"number","nodeType":"YulLiteral","src":"13533:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13524:3:181"},"nodeType":"YulFunctionCall","src":"13524:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"13537:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13520:3:181"},"nodeType":"YulFunctionCall","src":"13520:19:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13509:2:181"},"nodeType":"YulFunctionCall","src":"13509:31:181"},"nodeType":"YulIf","src":"13506:51:181"},{"nodeType":"YulVariableDeclaration","src":"13566:30:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13586:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"13589:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13582:3:181"},"nodeType":"YulFunctionCall","src":"13582:14:181"},"variables":[{"name":"length_1","nodeType":"YulTypedName","src":"13570:8:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13622:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"13627:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13618:3:181"},"nodeType":"YulFunctionCall","src":"13618:14:181"},{"name":"start","nodeType":"YulIdentifier","src":"13634:5:181"},{"name":"length_1","nodeType":"YulIdentifier","src":"13641:8:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"13605:12:181"},"nodeType":"YulFunctionCall","src":"13605:45:181"},"nodeType":"YulExpressionStatement","src":"13605:45:181"},{"nodeType":"YulAssignment","src":"13659:36:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13674:3:181"},{"name":"length_1","nodeType":"YulIdentifier","src":"13679:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13670:3:181"},"nodeType":"YulFunctionCall","src":"13670:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13690:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13666:3:181"},"nodeType":"YulFunctionCall","src":"13666:29:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"13659:3:181"}]}]},"name":"abi_encode_array_uint256_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"13437:5:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"13444:6:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"13452:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"13460:3:181","type":""}],"src":"13390:311:181"},{"body":{"nodeType":"YulBlock","src":"13955:213:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13972:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"13983:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13965:6:181"},"nodeType":"YulFunctionCall","src":"13965:25:181"},"nodeType":"YulExpressionStatement","src":"13965:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14010:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14021:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14006:3:181"},"nodeType":"YulFunctionCall","src":"14006:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"14026:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13999:6:181"},"nodeType":"YulFunctionCall","src":"13999:34:181"},"nodeType":"YulExpressionStatement","src":"13999:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14053:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14064:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14049:3:181"},"nodeType":"YulFunctionCall","src":"14049:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14069:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14042:6:181"},"nodeType":"YulFunctionCall","src":"14042:30:181"},"nodeType":"YulExpressionStatement","src":"14042:30:181"},{"nodeType":"YulAssignment","src":"14081:81:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"14127:6:181"},{"name":"value3","nodeType":"YulIdentifier","src":"14135:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14147:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14158:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14143:3:181"},"nodeType":"YulFunctionCall","src":"14143:18:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn_calldata","nodeType":"YulIdentifier","src":"14089:37:181"},"nodeType":"YulFunctionCall","src":"14089:73:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14081:4:181"}]}]},"name":"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint256_t_array$_t_uint256_$dyn_calldata_ptr__to_t_uint256_t_uint256_t_array$_t_uint256_$dyn_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13900:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13911:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13919:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13927:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13935:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13946:4:181","type":""}],"src":"13706:462:181"},{"body":{"nodeType":"YulBlock","src":"14279:783:181","statements":[{"nodeType":"YulVariableDeclaration","src":"14289:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14299:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14293:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"14346:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14355:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14358:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14348:6:181"},"nodeType":"YulFunctionCall","src":"14348:12:181"},"nodeType":"YulExpressionStatement","src":"14348:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14321:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"14330:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14317:3:181"},"nodeType":"YulFunctionCall","src":"14317:23:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14342:2:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14313:3:181"},"nodeType":"YulFunctionCall","src":"14313:32:181"},"nodeType":"YulIf","src":"14310:52:181"},{"nodeType":"YulVariableDeclaration","src":"14371:30:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14391:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14385:5:181"},"nodeType":"YulFunctionCall","src":"14385:16:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"14375:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"14444:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14453:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14456:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14446:6:181"},"nodeType":"YulFunctionCall","src":"14446:12:181"},"nodeType":"YulExpressionStatement","src":"14446:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"14416:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"14424:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14413:2:181"},"nodeType":"YulFunctionCall","src":"14413:30:181"},"nodeType":"YulIf","src":"14410:50:181"},{"nodeType":"YulVariableDeclaration","src":"14469:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14483:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"14494:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14479:3:181"},"nodeType":"YulFunctionCall","src":"14479:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"14473:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"14549:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14558:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14561:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14551:6:181"},"nodeType":"YulFunctionCall","src":"14551:12:181"},"nodeType":"YulExpressionStatement","src":"14551:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"14528:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"14532:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14524:3:181"},"nodeType":"YulFunctionCall","src":"14524:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"14539:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14520:3:181"},"nodeType":"YulFunctionCall","src":"14520:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14513:6:181"},"nodeType":"YulFunctionCall","src":"14513:35:181"},"nodeType":"YulIf","src":"14510:55:181"},{"nodeType":"YulVariableDeclaration","src":"14574:19:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"14590:2:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14584:5:181"},"nodeType":"YulFunctionCall","src":"14584:9:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"14578:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"14602:79:181","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"14677:2:181"}],"functionName":{"name":"array_allocation_size_array_contract_IERC20_dyn","nodeType":"YulIdentifier","src":"14629:47:181"},"nodeType":"YulFunctionCall","src":"14629:51:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"14613:15:181"},"nodeType":"YulFunctionCall","src":"14613:68:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"14606:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"14690:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"14703:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"14694:5:181","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"14722:3:181"},{"name":"_3","nodeType":"YulIdentifier","src":"14727:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14715:6:181"},"nodeType":"YulFunctionCall","src":"14715:15:181"},"nodeType":"YulExpressionStatement","src":"14715:15:181"},{"nodeType":"YulAssignment","src":"14739:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"14750:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14755:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14746:3:181"},"nodeType":"YulFunctionCall","src":"14746:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"14739:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"14767:42:181","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"14789:2:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14797:1:181","type":"","value":"5"},{"name":"_3","nodeType":"YulIdentifier","src":"14800:2:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14793:3:181"},"nodeType":"YulFunctionCall","src":"14793:10:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14785:3:181"},"nodeType":"YulFunctionCall","src":"14785:19:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14806:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14781:3:181"},"nodeType":"YulFunctionCall","src":"14781:28:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"14771:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"14841:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14850:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14853:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14843:6:181"},"nodeType":"YulFunctionCall","src":"14843:12:181"},"nodeType":"YulExpressionStatement","src":"14843:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"14824:6:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"14832:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14821:2:181"},"nodeType":"YulFunctionCall","src":"14821:19:181"},"nodeType":"YulIf","src":"14818:39:181"},{"nodeType":"YulVariableDeclaration","src":"14866:22:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"14881:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14885:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14877:3:181"},"nodeType":"YulFunctionCall","src":"14877:11:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"14870:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"14953:79:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"14974:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"14985:3:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14979:5:181"},"nodeType":"YulFunctionCall","src":"14979:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14967:6:181"},"nodeType":"YulFunctionCall","src":"14967:23:181"},"nodeType":"YulExpressionStatement","src":"14967:23:181"},{"nodeType":"YulAssignment","src":"15003:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"15014:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"15019:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15010:3:181"},"nodeType":"YulFunctionCall","src":"15010:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"15003:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"14908:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"14913:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14905:2:181"},"nodeType":"YulFunctionCall","src":"14905:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"14921:23:181","statements":[{"nodeType":"YulAssignment","src":"14923:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"14934:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14939:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14930:3:181"},"nodeType":"YulFunctionCall","src":"14930:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"14923:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"14901:3:181","statements":[]},"src":"14897:135:181"},{"nodeType":"YulAssignment","src":"15041:15:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"15051:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"15041:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14245:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14256:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14268:6:181","type":""}],"src":"14173:889:181"},{"body":{"nodeType":"YulBlock","src":"15252:173:181","statements":[{"nodeType":"YulAssignment","src":"15262:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15274:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15285:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15270:3:181"},"nodeType":"YulFunctionCall","src":"15270:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15262:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15304:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"15315:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15297:6:181"},"nodeType":"YulFunctionCall","src":"15297:25:181"},"nodeType":"YulExpressionStatement","src":"15297:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15342:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15353:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15338:3:181"},"nodeType":"YulFunctionCall","src":"15338:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"15358:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15331:6:181"},"nodeType":"YulFunctionCall","src":"15331:34:181"},"nodeType":"YulExpressionStatement","src":"15331:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15385:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15396:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15381:3:181"},"nodeType":"YulFunctionCall","src":"15381:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15405:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"15413:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15401:3:181"},"nodeType":"YulFunctionCall","src":"15401:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15374:6:181"},"nodeType":"YulFunctionCall","src":"15374:45:181"},"nodeType":"YulExpressionStatement","src":"15374:45:181"}]},"name":"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint256_t_uint8__to_t_uint256_t_uint256_t_uint8__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15205:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15216:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15224:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15232:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15243:4:181","type":""}],"src":"15067:358:181"},{"body":{"nodeType":"YulBlock","src":"15591:119:181","statements":[{"nodeType":"YulAssignment","src":"15601:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15613:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15624:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15609:3:181"},"nodeType":"YulFunctionCall","src":"15609:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15601:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15643:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"15654:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15636:6:181"},"nodeType":"YulFunctionCall","src":"15636:25:181"},"nodeType":"YulExpressionStatement","src":"15636:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15681:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15692:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15677:3:181"},"nodeType":"YulFunctionCall","src":"15677:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"15697:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15670:6:181"},"nodeType":"YulFunctionCall","src":"15670:34:181"},"nodeType":"YulExpressionStatement","src":"15670:34:181"}]},"name":"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint256__to_t_uint256_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15552:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15563:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15571:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15582:4:181","type":""}],"src":"15430:280:181"},{"body":{"nodeType":"YulBlock","src":"15928:217:181","statements":[{"nodeType":"YulAssignment","src":"15938:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15950:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15961:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15946:3:181"},"nodeType":"YulFunctionCall","src":"15946:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15938:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15981:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"15992:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15974:6:181"},"nodeType":"YulFunctionCall","src":"15974:25:181"},"nodeType":"YulExpressionStatement","src":"15974:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16019:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16030:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16015:3:181"},"nodeType":"YulFunctionCall","src":"16015:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"16035:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16008:6:181"},"nodeType":"YulFunctionCall","src":"16008:34:181"},"nodeType":"YulExpressionStatement","src":"16008:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16062:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16073:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16058:3:181"},"nodeType":"YulFunctionCall","src":"16058:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"16082:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"16090:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16078:3:181"},"nodeType":"YulFunctionCall","src":"16078:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16051:6:181"},"nodeType":"YulFunctionCall","src":"16051:45:181"},"nodeType":"YulExpressionStatement","src":"16051:45:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16116:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16127:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16112:3:181"},"nodeType":"YulFunctionCall","src":"16112:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"16132:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16105:6:181"},"nodeType":"YulFunctionCall","src":"16105:34:181"},"nodeType":"YulExpressionStatement","src":"16105:34:181"}]},"name":"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint256_t_uint8_t_uint256__to_t_uint256_t_uint256_t_uint8_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15873:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"15884:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15892:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15900:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15908:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15919:4:181","type":""}],"src":"15715:430:181"},{"body":{"nodeType":"YulBlock","src":"16399:213:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16416:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"16427:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16409:6:181"},"nodeType":"YulFunctionCall","src":"16409:25:181"},"nodeType":"YulExpressionStatement","src":"16409:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16454:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16465:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16450:3:181"},"nodeType":"YulFunctionCall","src":"16450:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16470:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16443:6:181"},"nodeType":"YulFunctionCall","src":"16443:30:181"},"nodeType":"YulExpressionStatement","src":"16443:30:181"},{"nodeType":"YulAssignment","src":"16482:81:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"16528:6:181"},{"name":"value2","nodeType":"YulIdentifier","src":"16536:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16548:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16559:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16544:3:181"},"nodeType":"YulFunctionCall","src":"16544:18:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn_calldata","nodeType":"YulIdentifier","src":"16490:37:181"},"nodeType":"YulFunctionCall","src":"16490:73:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16482:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16583:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16594:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16579:3:181"},"nodeType":"YulFunctionCall","src":"16579:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"16599:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16572:6:181"},"nodeType":"YulFunctionCall","src":"16572:34:181"},"nodeType":"YulExpressionStatement","src":"16572:34:181"}]},"name":"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_array$_t_uint256_$dyn_calldata_ptr_t_uint256__to_t_uint256_t_array$_t_uint256_$dyn_memory_ptr_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16344:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"16355:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16363:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16371:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16379:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16390:4:181","type":""}],"src":"16150:462:181"},{"body":{"nodeType":"YulBlock","src":"16854:272:181","statements":[{"nodeType":"YulAssignment","src":"16864:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16876:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16887:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16872:3:181"},"nodeType":"YulFunctionCall","src":"16872:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16864:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16907:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"16918:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16900:6:181"},"nodeType":"YulFunctionCall","src":"16900:25:181"},"nodeType":"YulExpressionStatement","src":"16900:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16945:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16956:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16941:3:181"},"nodeType":"YulFunctionCall","src":"16941:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"16965:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"16973:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16961:3:181"},"nodeType":"YulFunctionCall","src":"16961:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16934:6:181"},"nodeType":"YulFunctionCall","src":"16934:45:181"},"nodeType":"YulExpressionStatement","src":"16934:45:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16999:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17010:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16995:3:181"},"nodeType":"YulFunctionCall","src":"16995:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"17019:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"17027:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17015:3:181"},"nodeType":"YulFunctionCall","src":"17015:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16988:6:181"},"nodeType":"YulFunctionCall","src":"16988:45:181"},"nodeType":"YulExpressionStatement","src":"16988:45:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17053:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17064:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17049:3:181"},"nodeType":"YulFunctionCall","src":"17049:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"17069:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17042:6:181"},"nodeType":"YulFunctionCall","src":"17042:34:181"},"nodeType":"YulExpressionStatement","src":"17042:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17096:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17107:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17092:3:181"},"nodeType":"YulFunctionCall","src":"17092:19:181"},{"name":"value4","nodeType":"YulIdentifier","src":"17113:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17085:6:181"},"nodeType":"YulFunctionCall","src":"17085:35:181"},"nodeType":"YulExpressionStatement","src":"17085:35:181"}]},"name":"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint8_t_uint8_t_uint256_t_uint256__to_t_uint256_t_uint8_t_uint8_t_uint256_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16791:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"16802:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"16810:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16818:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16826:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16834:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16845:4:181","type":""}],"src":"16617:509:181"},{"body":{"nodeType":"YulBlock","src":"17320:162:181","statements":[{"nodeType":"YulAssignment","src":"17330:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17342:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17353:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17338:3:181"},"nodeType":"YulFunctionCall","src":"17338:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17330:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17372:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"17383:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17365:6:181"},"nodeType":"YulFunctionCall","src":"17365:25:181"},"nodeType":"YulExpressionStatement","src":"17365:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17410:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17421:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17406:3:181"},"nodeType":"YulFunctionCall","src":"17406:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"17426:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17399:6:181"},"nodeType":"YulFunctionCall","src":"17399:34:181"},"nodeType":"YulExpressionStatement","src":"17399:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17453:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17464:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17449:3:181"},"nodeType":"YulFunctionCall","src":"17449:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"17469:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17442:6:181"},"nodeType":"YulFunctionCall","src":"17442:34:181"},"nodeType":"YulExpressionStatement","src":"17442:34:181"}]},"name":"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17273:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"17284:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"17292:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17300:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17311:4:181","type":""}],"src":"17131:351:181"},{"body":{"nodeType":"YulBlock","src":"17661:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17678:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17689:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17671:6:181"},"nodeType":"YulFunctionCall","src":"17671:21:181"},"nodeType":"YulExpressionStatement","src":"17671:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17712:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17723:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17708:3:181"},"nodeType":"YulFunctionCall","src":"17708:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17728:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17701:6:181"},"nodeType":"YulFunctionCall","src":"17701:30:181"},"nodeType":"YulExpressionStatement","src":"17701:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17751:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17762:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17747:3:181"},"nodeType":"YulFunctionCall","src":"17747:18:181"},{"hexValue":"546f6b656e20646f6573206e6f74206578697374","kind":"string","nodeType":"YulLiteral","src":"17767:22:181","type":"","value":"Token does not exist"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17740:6:181"},"nodeType":"YulFunctionCall","src":"17740:50:181"},"nodeType":"YulExpressionStatement","src":"17740:50:181"},{"nodeType":"YulAssignment","src":"17799:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17811:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17822:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17807:3:181"},"nodeType":"YulFunctionCall","src":"17807:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17799:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_547be7f5ed2d17cca91d35e8212265e350385ed13daeee07722cf3e686dd6726__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17638:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17652:4:181","type":""}],"src":"17487:344:181"},{"body":{"nodeType":"YulBlock","src":"18045:228:181","statements":[{"nodeType":"YulAssignment","src":"18055:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18067:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18078:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18063:3:181"},"nodeType":"YulFunctionCall","src":"18063:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18055:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18098:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"18109:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18091:6:181"},"nodeType":"YulFunctionCall","src":"18091:25:181"},"nodeType":"YulExpressionStatement","src":"18091:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18136:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18147:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18132:3:181"},"nodeType":"YulFunctionCall","src":"18132:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"18156:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"18164:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18152:3:181"},"nodeType":"YulFunctionCall","src":"18152:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18125:6:181"},"nodeType":"YulFunctionCall","src":"18125:45:181"},"nodeType":"YulExpressionStatement","src":"18125:45:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18190:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18201:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18186:3:181"},"nodeType":"YulFunctionCall","src":"18186:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"18210:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"18218:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18206:3:181"},"nodeType":"YulFunctionCall","src":"18206:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18179:6:181"},"nodeType":"YulFunctionCall","src":"18179:45:181"},"nodeType":"YulExpressionStatement","src":"18179:45:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18244:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18255:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18240:3:181"},"nodeType":"YulFunctionCall","src":"18240:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"18260:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18233:6:181"},"nodeType":"YulFunctionCall","src":"18233:34:181"},"nodeType":"YulExpressionStatement","src":"18233:34:181"}]},"name":"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint8_t_uint8_t_uint256__to_t_uint256_t_uint8_t_uint8_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17990:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"18001:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"18009:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18017:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18025:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18036:4:181","type":""}],"src":"17836:437:181"},{"body":{"nodeType":"YulBlock","src":"18452:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18469:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18480:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18462:6:181"},"nodeType":"YulFunctionCall","src":"18462:21:181"},"nodeType":"YulExpressionStatement","src":"18462:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18503:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18514:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18499:3:181"},"nodeType":"YulFunctionCall","src":"18499:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18519:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18492:6:181"},"nodeType":"YulFunctionCall","src":"18492:30:181"},"nodeType":"YulExpressionStatement","src":"18492:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18542:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18553:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18538:3:181"},"nodeType":"YulFunctionCall","src":"18538:18:181"},{"hexValue":"4f7574206f662072616e6765","kind":"string","nodeType":"YulLiteral","src":"18558:14:181","type":"","value":"Out of range"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18531:6:181"},"nodeType":"YulFunctionCall","src":"18531:42:181"},"nodeType":"YulExpressionStatement","src":"18531:42:181"},{"nodeType":"YulAssignment","src":"18582:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18594:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18605:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18590:3:181"},"nodeType":"YulFunctionCall","src":"18590:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18582:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c8de02deba8e639087754d5067b8a43e5887b03be7353558822d412acbff2048__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18429:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18443:4:181","type":""}],"src":"18278:336:181"},{"body":{"nodeType":"YulBlock","src":"18651:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18668:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18675:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"18680:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"18671:3:181"},"nodeType":"YulFunctionCall","src":"18671:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18661:6:181"},"nodeType":"YulFunctionCall","src":"18661:31:181"},"nodeType":"YulExpressionStatement","src":"18661:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18708:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"18711:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18701:6:181"},"nodeType":"YulFunctionCall","src":"18701:15:181"},"nodeType":"YulExpressionStatement","src":"18701:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18732:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18735:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"18725:6:181"},"nodeType":"YulFunctionCall","src":"18725:15:181"},"nodeType":"YulExpressionStatement","src":"18725:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"18619:127:181"},{"body":{"nodeType":"YulBlock","src":"18925:168:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18942:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18953:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18935:6:181"},"nodeType":"YulFunctionCall","src":"18935:21:181"},"nodeType":"YulExpressionStatement","src":"18935:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18976:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18987:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18972:3:181"},"nodeType":"YulFunctionCall","src":"18972:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18992:2:181","type":"","value":"18"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18965:6:181"},"nodeType":"YulFunctionCall","src":"18965:30:181"},"nodeType":"YulExpressionStatement","src":"18965:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19015:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19026:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19011:3:181"},"nodeType":"YulFunctionCall","src":"19011:18:181"},{"hexValue":"496e646578206f7574206f662072616e6765","kind":"string","nodeType":"YulLiteral","src":"19031:20:181","type":"","value":"Index out of range"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19004:6:181"},"nodeType":"YulFunctionCall","src":"19004:48:181"},"nodeType":"YulExpressionStatement","src":"19004:48:181"},{"nodeType":"YulAssignment","src":"19061:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19073:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19084:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19069:3:181"},"nodeType":"YulFunctionCall","src":"19069:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19061:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c9580fd05844cb84bf0a747c48ec42a21f1dca0bc044d3619707fb319eddae0d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18902:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18916:4:181","type":""}],"src":"18751:342:181"},{"body":{"nodeType":"YulBlock","src":"19272:236:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19289:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19300:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19282:6:181"},"nodeType":"YulFunctionCall","src":"19282:21:181"},"nodeType":"YulExpressionStatement","src":"19282:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19323:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19334:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19319:3:181"},"nodeType":"YulFunctionCall","src":"19319:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19339:2:181","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19312:6:181"},"nodeType":"YulFunctionCall","src":"19312:30:181"},"nodeType":"YulExpressionStatement","src":"19312:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19362:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19373:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19358:3:181"},"nodeType":"YulFunctionCall","src":"19358:18:181"},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320616c726561","kind":"string","nodeType":"YulLiteral","src":"19378:34:181","type":"","value":"Initializable: contract is alrea"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19351:6:181"},"nodeType":"YulFunctionCall","src":"19351:62:181"},"nodeType":"YulExpressionStatement","src":"19351:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19433:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19444:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19429:3:181"},"nodeType":"YulFunctionCall","src":"19429:18:181"},{"hexValue":"647920696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"19449:16:181","type":"","value":"dy initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19422:6:181"},"nodeType":"YulFunctionCall","src":"19422:44:181"},"nodeType":"YulExpressionStatement","src":"19422:44:181"},{"nodeType":"YulAssignment","src":"19475:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19487:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19498:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19483:3:181"},"nodeType":"YulFunctionCall","src":"19483:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19475:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19249:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19263:4:181","type":""}],"src":"19098:410:181"},{"body":{"nodeType":"YulBlock","src":"19545:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19562:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19569:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"19574:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"19565:3:181"},"nodeType":"YulFunctionCall","src":"19565:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19555:6:181"},"nodeType":"YulFunctionCall","src":"19555:31:181"},"nodeType":"YulExpressionStatement","src":"19555:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19602:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"19605:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19595:6:181"},"nodeType":"YulFunctionCall","src":"19595:15:181"},"nodeType":"YulExpressionStatement","src":"19595:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19626:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19629:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19619:6:181"},"nodeType":"YulFunctionCall","src":"19619:15:181"},"nodeType":"YulExpressionStatement","src":"19619:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"19513:127:181"},{"body":{"nodeType":"YulBlock","src":"19694:79:181","statements":[{"nodeType":"YulAssignment","src":"19704:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"19716:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"19719:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19712:3:181"},"nodeType":"YulFunctionCall","src":"19712:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"19704:4:181"}]},{"body":{"nodeType":"YulBlock","src":"19745:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"19747:16:181"},"nodeType":"YulFunctionCall","src":"19747:18:181"},"nodeType":"YulExpressionStatement","src":"19747:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"19736:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"19742:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"19733:2:181"},"nodeType":"YulFunctionCall","src":"19733:11:181"},"nodeType":"YulIf","src":"19730:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"19676:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"19679:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"19685:4:181","type":""}],"src":"19645:128:181"},{"body":{"nodeType":"YulBlock","src":"19952:223:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19969:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19980:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19962:6:181"},"nodeType":"YulFunctionCall","src":"19962:21:181"},"nodeType":"YulExpressionStatement","src":"19962:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20003:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20014:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19999:3:181"},"nodeType":"YulFunctionCall","src":"19999:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20019:2:181","type":"","value":"33"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19992:6:181"},"nodeType":"YulFunctionCall","src":"19992:30:181"},"nodeType":"YulExpressionStatement","src":"19992:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20042:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20053:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20038:3:181"},"nodeType":"YulFunctionCall","src":"20038:18:181"},{"hexValue":"5f706f6f6c6564546f6b656e732e6c656e67746820696e73756666696369656e","kind":"string","nodeType":"YulLiteral","src":"20058:34:181","type":"","value":"_pooledTokens.length insufficien"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20031:6:181"},"nodeType":"YulFunctionCall","src":"20031:62:181"},"nodeType":"YulExpressionStatement","src":"20031:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20113:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20124:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20109:3:181"},"nodeType":"YulFunctionCall","src":"20109:18:181"},{"hexValue":"74","kind":"string","nodeType":"YulLiteral","src":"20129:3:181","type":"","value":"t"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20102:6:181"},"nodeType":"YulFunctionCall","src":"20102:31:181"},"nodeType":"YulExpressionStatement","src":"20102:31:181"},{"nodeType":"YulAssignment","src":"20142:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20154:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20165:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20150:3:181"},"nodeType":"YulFunctionCall","src":"20150:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20142:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d942505f5a21659daedb4f74215666300f325ec8e6deb29a6240331f6ece39d6__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19929:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19943:4:181","type":""}],"src":"19778:397:181"},{"body":{"nodeType":"YulBlock","src":"20228:77:181","statements":[{"nodeType":"YulAssignment","src":"20238:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"20249:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"20252:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20245:3:181"},"nodeType":"YulFunctionCall","src":"20245:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"20238:3:181"}]},{"body":{"nodeType":"YulBlock","src":"20277:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"20279:16:181"},"nodeType":"YulFunctionCall","src":"20279:18:181"},"nodeType":"YulExpressionStatement","src":"20279:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"20269:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"20272:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20266:2:181"},"nodeType":"YulFunctionCall","src":"20266:10:181"},"nodeType":"YulIf","src":"20263:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"20211:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"20214:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"20220:3:181","type":""}],"src":"20180:125:181"},{"body":{"nodeType":"YulBlock","src":"20484:180:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20501:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20512:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20494:6:181"},"nodeType":"YulFunctionCall","src":"20494:21:181"},"nodeType":"YulExpressionStatement","src":"20494:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20535:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20546:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20531:3:181"},"nodeType":"YulFunctionCall","src":"20531:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20551:2:181","type":"","value":"30"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20524:6:181"},"nodeType":"YulFunctionCall","src":"20524:30:181"},"nodeType":"YulExpressionStatement","src":"20524:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20574:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20585:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20570:3:181"},"nodeType":"YulFunctionCall","src":"20570:18:181"},{"hexValue":"5f706f6f6c6564546f6b656e732e6c656e67746820746f6f206c61726765","kind":"string","nodeType":"YulLiteral","src":"20590:32:181","type":"","value":"_pooledTokens.length too large"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20563:6:181"},"nodeType":"YulFunctionCall","src":"20563:60:181"},"nodeType":"YulExpressionStatement","src":"20563:60:181"},{"nodeType":"YulAssignment","src":"20632:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20644:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20655:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20640:3:181"},"nodeType":"YulFunctionCall","src":"20640:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20632:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a7a86fffacc19e5c55f7740c49d3c43b8158ebebe8d693c955c37638cd63750e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20461:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20475:4:181","type":""}],"src":"20310:354:181"},{"body":{"nodeType":"YulBlock","src":"20843:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20860:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20871:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20853:6:181"},"nodeType":"YulFunctionCall","src":"20853:21:181"},"nodeType":"YulExpressionStatement","src":"20853:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20894:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20905:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20890:3:181"},"nodeType":"YulFunctionCall","src":"20890:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20910:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20883:6:181"},"nodeType":"YulFunctionCall","src":"20883:30:181"},"nodeType":"YulExpressionStatement","src":"20883:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20933:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20944:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20929:3:181"},"nodeType":"YulFunctionCall","src":"20929:18:181"},{"hexValue":"5f706f6f6c6564546f6b656e7320646563696d616c73206d69736d61746368","kind":"string","nodeType":"YulLiteral","src":"20949:33:181","type":"","value":"_pooledTokens decimals mismatch"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20922:6:181"},"nodeType":"YulFunctionCall","src":"20922:61:181"},"nodeType":"YulExpressionStatement","src":"20922:61:181"},{"nodeType":"YulAssignment","src":"20992:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21004:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21015:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21000:3:181"},"nodeType":"YulFunctionCall","src":"21000:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20992:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_920ab7aea64abf6f625f3ec866769a336d71d85943ea085dcc6d4f83565e10e2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20820:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20834:4:181","type":""}],"src":"20669:355:181"},{"body":{"nodeType":"YulBlock","src":"21203:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21220:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21231:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21213:6:181"},"nodeType":"YulFunctionCall","src":"21213:21:181"},"nodeType":"YulExpressionStatement","src":"21213:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21254:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21265:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21250:3:181"},"nodeType":"YulFunctionCall","src":"21250:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"21270:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21243:6:181"},"nodeType":"YulFunctionCall","src":"21243:30:181"},"nodeType":"YulExpressionStatement","src":"21243:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21293:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21304:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21289:3:181"},"nodeType":"YulFunctionCall","src":"21289:18:181"},{"hexValue":"4475706c696361746520746f6b656e73","kind":"string","nodeType":"YulLiteral","src":"21309:18:181","type":"","value":"Duplicate tokens"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21282:6:181"},"nodeType":"YulFunctionCall","src":"21282:46:181"},"nodeType":"YulExpressionStatement","src":"21282:46:181"},{"nodeType":"YulAssignment","src":"21337:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21349:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21360:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21345:3:181"},"nodeType":"YulFunctionCall","src":"21345:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21337:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_468e0bfcb3e3ab0378a7d7aca9480e7f3c9394926fb120f85a78a58c132177eb__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21180:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21194:4:181","type":""}],"src":"21029:340:181"},{"body":{"nodeType":"YulBlock","src":"21548:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21565:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21576:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21558:6:181"},"nodeType":"YulFunctionCall","src":"21558:21:181"},"nodeType":"YulExpressionStatement","src":"21558:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21599:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21610:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21595:3:181"},"nodeType":"YulFunctionCall","src":"21595:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"21615:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21588:6:181"},"nodeType":"YulFunctionCall","src":"21588:30:181"},"nodeType":"YulExpressionStatement","src":"21588:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21638:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21649:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21634:3:181"},"nodeType":"YulFunctionCall","src":"21634:18:181"},{"hexValue":"546865203020616464726573732069736e277420616e204552432d3230","kind":"string","nodeType":"YulLiteral","src":"21654:31:181","type":"","value":"The 0 address isn't an ERC-20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21627:6:181"},"nodeType":"YulFunctionCall","src":"21627:59:181"},"nodeType":"YulExpressionStatement","src":"21627:59:181"},{"nodeType":"YulAssignment","src":"21695:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21707:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21718:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21703:3:181"},"nodeType":"YulFunctionCall","src":"21703:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21695:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b906ee6e71cd5815b0e043fe7cf4686b9eba5c13a6e0a21a7bb55e8a6681b39d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21525:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21539:4:181","type":""}],"src":"21374:353:181"},{"body":{"nodeType":"YulBlock","src":"21778:102:181","statements":[{"nodeType":"YulAssignment","src":"21788:38:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"21803:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"21806:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21799:3:181"},"nodeType":"YulFunctionCall","src":"21799:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"21817:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"21820:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21813:3:181"},"nodeType":"YulFunctionCall","src":"21813:12:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21795:3:181"},"nodeType":"YulFunctionCall","src":"21795:31:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"21788:3:181"}]},{"body":{"nodeType":"YulBlock","src":"21852:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"21854:16:181"},"nodeType":"YulFunctionCall","src":"21854:18:181"},"nodeType":"YulExpressionStatement","src":"21854:18:181"}]},"condition":{"arguments":[{"name":"sum","nodeType":"YulIdentifier","src":"21841:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21846:4:181","type":"","value":"0xff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21838:2:181"},"nodeType":"YulFunctionCall","src":"21838:13:181"},"nodeType":"YulIf","src":"21835:39:181"}]},"name":"checked_add_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"21761:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"21764:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"21770:3:181","type":""}],"src":"21732:148:181"},{"body":{"nodeType":"YulBlock","src":"22059:176:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22076:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22087:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22069:6:181"},"nodeType":"YulFunctionCall","src":"22069:21:181"},"nodeType":"YulExpressionStatement","src":"22069:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22110:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22121:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22106:3:181"},"nodeType":"YulFunctionCall","src":"22106:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22126:2:181","type":"","value":"26"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22099:6:181"},"nodeType":"YulFunctionCall","src":"22099:30:181"},"nodeType":"YulExpressionStatement","src":"22099:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22149:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22160:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22145:3:181"},"nodeType":"YulFunctionCall","src":"22145:18:181"},{"hexValue":"546f6b656e20646563696d616c732065786365656473206d6178","kind":"string","nodeType":"YulLiteral","src":"22165:28:181","type":"","value":"Token decimals exceeds max"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22138:6:181"},"nodeType":"YulFunctionCall","src":"22138:56:181"},"nodeType":"YulExpressionStatement","src":"22138:56:181"},{"nodeType":"YulAssignment","src":"22203:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22215:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22226:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22211:3:181"},"nodeType":"YulFunctionCall","src":"22211:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22203:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_3659d4e5f95ff79d6b4bfc4ef30ecea959c6574585372b1f2b55fd5d9b45e4f4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22036:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22050:4:181","type":""}],"src":"21885:350:181"},{"body":{"nodeType":"YulBlock","src":"22287:104:181","statements":[{"nodeType":"YulAssignment","src":"22297:39:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"22313:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"22316:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22309:3:181"},"nodeType":"YulFunctionCall","src":"22309:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"22327:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"22330:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22323:3:181"},"nodeType":"YulFunctionCall","src":"22323:12:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22305:3:181"},"nodeType":"YulFunctionCall","src":"22305:31:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"22297:4:181"}]},{"body":{"nodeType":"YulBlock","src":"22363:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"22365:16:181"},"nodeType":"YulFunctionCall","src":"22365:18:181"},"nodeType":"YulExpressionStatement","src":"22365:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"22351:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"22357:4:181","type":"","value":"0xff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"22348:2:181"},"nodeType":"YulFunctionCall","src":"22348:14:181"},"nodeType":"YulIf","src":"22345:40:181"}]},"name":"checked_sub_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"22269:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"22272:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"22278:4:181","type":""}],"src":"22240:151:181"},{"body":{"nodeType":"YulBlock","src":"22460:358:181","statements":[{"nodeType":"YulVariableDeclaration","src":"22470:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"22485:1:181","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"22474:7:181","type":""}]},{"nodeType":"YulAssignment","src":"22495:16:181","value":{"name":"power_1","nodeType":"YulIdentifier","src":"22504:7:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"22495:5:181"}]},{"nodeType":"YulAssignment","src":"22520:13:181","value":{"name":"_base","nodeType":"YulIdentifier","src":"22528:5:181"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"22520:4:181"}]},{"body":{"nodeType":"YulBlock","src":"22584:228:181","statements":[{"body":{"nodeType":"YulBlock","src":"22629:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"22631:16:181"},"nodeType":"YulFunctionCall","src":"22631:18:181"},"nodeType":"YulExpressionStatement","src":"22631:18:181"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"22604:4:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22618:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"22614:3:181"},"nodeType":"YulFunctionCall","src":"22614:6:181"},{"name":"base","nodeType":"YulIdentifier","src":"22622:4:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"22610:3:181"},"nodeType":"YulFunctionCall","src":"22610:17:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"22601:2:181"},"nodeType":"YulFunctionCall","src":"22601:27:181"},"nodeType":"YulIf","src":"22598:53:181"},{"body":{"nodeType":"YulBlock","src":"22690:29:181","statements":[{"nodeType":"YulAssignment","src":"22692:25:181","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"22705:5:181"},{"name":"base","nodeType":"YulIdentifier","src":"22712:4:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"22701:3:181"},"nodeType":"YulFunctionCall","src":"22701:16:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"22692:5:181"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"22671:8:181"},{"name":"power_1","nodeType":"YulIdentifier","src":"22681:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22667:3:181"},"nodeType":"YulFunctionCall","src":"22667:22:181"},"nodeType":"YulIf","src":"22664:55:181"},{"nodeType":"YulAssignment","src":"22732:23:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"22744:4:181"},{"name":"base","nodeType":"YulIdentifier","src":"22750:4:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"22740:3:181"},"nodeType":"YulFunctionCall","src":"22740:15:181"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"22732:4:181"}]},{"nodeType":"YulAssignment","src":"22768:34:181","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"22784:7:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"22793:8:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"22780:3:181"},"nodeType":"YulFunctionCall","src":"22780:22:181"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"22768:8:181"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"22553:8:181"},{"name":"power_1","nodeType":"YulIdentifier","src":"22563:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"22550:2:181"},"nodeType":"YulFunctionCall","src":"22550:21:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"22572:3:181","statements":[]},"pre":{"nodeType":"YulBlock","src":"22546:3:181","statements":[]},"src":"22542:270:181"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"22424:5:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"22431:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"22444:5:181","type":""},{"name":"base","nodeType":"YulTypedName","src":"22451:4:181","type":""}],"src":"22396:422:181"},{"body":{"nodeType":"YulBlock","src":"22882:747:181","statements":[{"body":{"nodeType":"YulBlock","src":"22920:52:181","statements":[{"nodeType":"YulAssignment","src":"22934:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"22943:1:181","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"22934:5:181"}]},{"nodeType":"YulLeave","src":"22957:5:181"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"22902:8:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"22895:6:181"},"nodeType":"YulFunctionCall","src":"22895:16:181"},"nodeType":"YulIf","src":"22892:80:181"},{"body":{"nodeType":"YulBlock","src":"23005:52:181","statements":[{"nodeType":"YulAssignment","src":"23019:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"23028:1:181","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"23019:5:181"}]},{"nodeType":"YulLeave","src":"23042:5:181"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"22991:4:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"22984:6:181"},"nodeType":"YulFunctionCall","src":"22984:12:181"},"nodeType":"YulIf","src":"22981:76:181"},{"cases":[{"body":{"nodeType":"YulBlock","src":"23093:52:181","statements":[{"nodeType":"YulAssignment","src":"23107:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"23116:1:181","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"23107:5:181"}]},{"nodeType":"YulLeave","src":"23130:5:181"}]},"nodeType":"YulCase","src":"23086:59:181","value":{"kind":"number","nodeType":"YulLiteral","src":"23091:1:181","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"23161:123:181","statements":[{"body":{"nodeType":"YulBlock","src":"23196:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"23198:16:181"},"nodeType":"YulFunctionCall","src":"23198:18:181"},"nodeType":"YulExpressionStatement","src":"23198:18:181"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"23181:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"23191:3:181","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"23178:2:181"},"nodeType":"YulFunctionCall","src":"23178:17:181"},"nodeType":"YulIf","src":"23175:43:181"},{"nodeType":"YulAssignment","src":"23231:25:181","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"23244:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"23254:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"23240:3:181"},"nodeType":"YulFunctionCall","src":"23240:16:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"23231:5:181"}]},{"nodeType":"YulLeave","src":"23269:5:181"}]},"nodeType":"YulCase","src":"23154:130:181","value":{"kind":"number","nodeType":"YulLiteral","src":"23159:1:181","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"23073:4:181"},"nodeType":"YulSwitch","src":"23066:218:181"},{"body":{"nodeType":"YulBlock","src":"23382:70:181","statements":[{"nodeType":"YulAssignment","src":"23396:28:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"23409:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"23415:8:181"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"23405:3:181"},"nodeType":"YulFunctionCall","src":"23405:19:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"23396:5:181"}]},{"nodeType":"YulLeave","src":"23437:5:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"23306:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"23312:2:181","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"23303:2:181"},"nodeType":"YulFunctionCall","src":"23303:12:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"23320:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"23330:2:181","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"23317:2:181"},"nodeType":"YulFunctionCall","src":"23317:16:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23299:3:181"},"nodeType":"YulFunctionCall","src":"23299:35:181"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"23343:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"23349:3:181","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"23340:2:181"},"nodeType":"YulFunctionCall","src":"23340:13:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"23358:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"23368:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"23355:2:181"},"nodeType":"YulFunctionCall","src":"23355:16:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23336:3:181"},"nodeType":"YulFunctionCall","src":"23336:36:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"23296:2:181"},"nodeType":"YulFunctionCall","src":"23296:77:181"},"nodeType":"YulIf","src":"23293:159:181"},{"nodeType":"YulVariableDeclaration","src":"23461:57:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"23503:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"23509:8:181"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"23484:18:181"},"nodeType":"YulFunctionCall","src":"23484:34:181"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"23465:7:181","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"23474:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"23563:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"23565:16:181"},"nodeType":"YulFunctionCall","src":"23565:18:181"},"nodeType":"YulExpressionStatement","src":"23565:18:181"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"23533:7:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23550:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"23546:3:181"},"nodeType":"YulFunctionCall","src":"23546:6:181"},{"name":"base_1","nodeType":"YulIdentifier","src":"23554:6:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"23542:3:181"},"nodeType":"YulFunctionCall","src":"23542:19:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"23530:2:181"},"nodeType":"YulFunctionCall","src":"23530:32:181"},"nodeType":"YulIf","src":"23527:58:181"},{"nodeType":"YulAssignment","src":"23594:29:181","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"23607:7:181"},{"name":"base_1","nodeType":"YulIdentifier","src":"23616:6:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"23603:3:181"},"nodeType":"YulFunctionCall","src":"23603:20:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"23594:5:181"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"22853:4:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"22859:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"22872:5:181","type":""}],"src":"22823:806:181"},{"body":{"nodeType":"YulBlock","src":"23704:61:181","statements":[{"nodeType":"YulAssignment","src":"23714:45:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"23744:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"23750:8:181"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"23723:20:181"},"nodeType":"YulFunctionCall","src":"23723:36:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"23714:5:181"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"23675:4:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"23681:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"23694:5:181","type":""}],"src":"23634:131:181"},{"body":{"nodeType":"YulBlock","src":"23944:168:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23961:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23972:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23954:6:181"},"nodeType":"YulFunctionCall","src":"23954:21:181"},"nodeType":"YulExpressionStatement","src":"23954:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23995:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24006:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23991:3:181"},"nodeType":"YulFunctionCall","src":"23991:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24011:2:181","type":"","value":"18"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23984:6:181"},"nodeType":"YulFunctionCall","src":"23984:30:181"},"nodeType":"YulExpressionStatement","src":"23984:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24034:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24045:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24030:3:181"},"nodeType":"YulFunctionCall","src":"24030:18:181"},{"hexValue":"5f612065786365656473206d6178696d756d","kind":"string","nodeType":"YulLiteral","src":"24050:20:181","type":"","value":"_a exceeds maximum"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24023:6:181"},"nodeType":"YulFunctionCall","src":"24023:48:181"},"nodeType":"YulExpressionStatement","src":"24023:48:181"},{"nodeType":"YulAssignment","src":"24080:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24092:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24103:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24088:3:181"},"nodeType":"YulFunctionCall","src":"24088:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24080:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_6d10d9193d6dae542704df3b3ab8bcf0eeb6847d3d136ed4b04aee07a7f72dfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23921:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23935:4:181","type":""}],"src":"23770:342:181"},{"body":{"nodeType":"YulBlock","src":"24291:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24308:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24319:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24301:6:181"},"nodeType":"YulFunctionCall","src":"24301:21:181"},"nodeType":"YulExpressionStatement","src":"24301:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24342:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24353:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24338:3:181"},"nodeType":"YulFunctionCall","src":"24338:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24358:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24331:6:181"},"nodeType":"YulFunctionCall","src":"24331:30:181"},"nodeType":"YulExpressionStatement","src":"24331:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24381:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24392:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24377:3:181"},"nodeType":"YulFunctionCall","src":"24377:18:181"},{"hexValue":"5f6665652065786365656473206d6178696d756d","kind":"string","nodeType":"YulLiteral","src":"24397:22:181","type":"","value":"_fee exceeds maximum"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24370:6:181"},"nodeType":"YulFunctionCall","src":"24370:50:181"},"nodeType":"YulExpressionStatement","src":"24370:50:181"},{"nodeType":"YulAssignment","src":"24429:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24441:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24452:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24437:3:181"},"nodeType":"YulFunctionCall","src":"24437:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24429:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c2ec1c8b95f7fdd82a9cd723ab25579d58e30b4630228130b1c03ae94813d95b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24268:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24282:4:181","type":""}],"src":"24117:344:181"},{"body":{"nodeType":"YulBlock","src":"24640:175:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24657:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24668:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24650:6:181"},"nodeType":"YulFunctionCall","src":"24650:21:181"},"nodeType":"YulExpressionStatement","src":"24650:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24691:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24702:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24687:3:181"},"nodeType":"YulFunctionCall","src":"24687:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24707:2:181","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24680:6:181"},"nodeType":"YulFunctionCall","src":"24680:30:181"},"nodeType":"YulExpressionStatement","src":"24680:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24730:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24741:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24726:3:181"},"nodeType":"YulFunctionCall","src":"24726:18:181"},{"hexValue":"5f61646d696e4665652065786365656473206d6178696d756d","kind":"string","nodeType":"YulLiteral","src":"24746:27:181","type":"","value":"_adminFee exceeds maximum"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24719:6:181"},"nodeType":"YulFunctionCall","src":"24719:55:181"},"nodeType":"YulExpressionStatement","src":"24719:55:181"},{"nodeType":"YulAssignment","src":"24783:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24795:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24806:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24791:3:181"},"nodeType":"YulFunctionCall","src":"24791:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24783:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5e9995c4674de2ad727ffbe3c3110784ecdbab72c3e1a2bdc6129e561bb0f370__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24617:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24631:4:181","type":""}],"src":"24466:349:181"},{"body":{"nodeType":"YulBlock","src":"24870:373:181","statements":[{"nodeType":"YulVariableDeclaration","src":"24880:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"24900:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24894:5:181"},"nodeType":"YulFunctionCall","src":"24894:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"24884:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"24922:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"24927:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24915:6:181"},"nodeType":"YulFunctionCall","src":"24915:19:181"},"nodeType":"YulExpressionStatement","src":"24915:19:181"},{"nodeType":"YulVariableDeclaration","src":"24943:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"24952:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"24947:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"25014:110:181","statements":[{"nodeType":"YulVariableDeclaration","src":"25028:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"25038:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"25032:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"25070:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"25075:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25066:3:181"},"nodeType":"YulFunctionCall","src":"25066:11:181"},{"name":"_1","nodeType":"YulIdentifier","src":"25079:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25062:3:181"},"nodeType":"YulFunctionCall","src":"25062:20:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"25098:5:181"},{"name":"i","nodeType":"YulIdentifier","src":"25105:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25094:3:181"},"nodeType":"YulFunctionCall","src":"25094:13:181"},{"name":"_1","nodeType":"YulIdentifier","src":"25109:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25090:3:181"},"nodeType":"YulFunctionCall","src":"25090:22:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25084:5:181"},"nodeType":"YulFunctionCall","src":"25084:29:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25055:6:181"},"nodeType":"YulFunctionCall","src":"25055:59:181"},"nodeType":"YulExpressionStatement","src":"25055:59:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"24973:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"24976:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"24970:2:181"},"nodeType":"YulFunctionCall","src":"24970:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"24984:21:181","statements":[{"nodeType":"YulAssignment","src":"24986:17:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"24995:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"24998:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24991:3:181"},"nodeType":"YulFunctionCall","src":"24991:12:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"24986:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"24966:3:181","statements":[]},"src":"24962:162:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"25148:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"25153:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25144:3:181"},"nodeType":"YulFunctionCall","src":"25144:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"25162:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25140:3:181"},"nodeType":"YulFunctionCall","src":"25140:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"25169:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25133:6:181"},"nodeType":"YulFunctionCall","src":"25133:38:181"},"nodeType":"YulExpressionStatement","src":"25133:38:181"},{"nodeType":"YulAssignment","src":"25180:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"25195:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"25208:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"25216:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25204:3:181"},"nodeType":"YulFunctionCall","src":"25204:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25225:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"25221:3:181"},"nodeType":"YulFunctionCall","src":"25221:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25200:3:181"},"nodeType":"YulFunctionCall","src":"25200:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25191:3:181"},"nodeType":"YulFunctionCall","src":"25191:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"25232:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25187:3:181"},"nodeType":"YulFunctionCall","src":"25187:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"25180:3:181"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"24847:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"24854:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"24862:3:181","type":""}],"src":"24820:423:181"},{"body":{"nodeType":"YulBlock","src":"25417:214:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25434:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25445:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25427:6:181"},"nodeType":"YulFunctionCall","src":"25427:21:181"},"nodeType":"YulExpressionStatement","src":"25427:21:181"},{"nodeType":"YulVariableDeclaration","src":"25457:59:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"25489:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25501:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25512:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25497:3:181"},"nodeType":"YulFunctionCall","src":"25497:18:181"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"25471:17:181"},"nodeType":"YulFunctionCall","src":"25471:45:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"25461:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25536:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25547:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25532:3:181"},"nodeType":"YulFunctionCall","src":"25532:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"25556:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"25564:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25552:3:181"},"nodeType":"YulFunctionCall","src":"25552:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25525:6:181"},"nodeType":"YulFunctionCall","src":"25525:50:181"},"nodeType":"YulExpressionStatement","src":"25525:50:181"},{"nodeType":"YulAssignment","src":"25584:41:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25610:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"25618:6:181"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"25592:17:181"},"nodeType":"YulFunctionCall","src":"25592:33:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25584:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25378:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"25389:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"25397:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25408:4:181","type":""}],"src":"25248:383:181"},{"body":{"nodeType":"YulBlock","src":"25714:167:181","statements":[{"body":{"nodeType":"YulBlock","src":"25760:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25769:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"25772:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"25762:6:181"},"nodeType":"YulFunctionCall","src":"25762:12:181"},"nodeType":"YulExpressionStatement","src":"25762:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"25735:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"25744:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25731:3:181"},"nodeType":"YulFunctionCall","src":"25731:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"25756:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"25727:3:181"},"nodeType":"YulFunctionCall","src":"25727:32:181"},"nodeType":"YulIf","src":"25724:52:181"},{"nodeType":"YulVariableDeclaration","src":"25785:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25804:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25798:5:181"},"nodeType":"YulFunctionCall","src":"25798:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"25789:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"25845:5:181"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"25823:21:181"},"nodeType":"YulFunctionCall","src":"25823:28:181"},"nodeType":"YulExpressionStatement","src":"25823:28:181"},{"nodeType":"YulAssignment","src":"25860:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"25870:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"25860:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25680:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"25691:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"25703:6:181","type":""}],"src":"25636:245:181"},{"body":{"nodeType":"YulBlock","src":"26060:178:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26077:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26088:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26070:6:181"},"nodeType":"YulFunctionCall","src":"26070:21:181"},"nodeType":"YulExpressionStatement","src":"26070:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26111:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26122:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26107:3:181"},"nodeType":"YulFunctionCall","src":"26107:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"26127:2:181","type":"","value":"28"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26100:6:181"},"nodeType":"YulFunctionCall","src":"26100:30:181"},"nodeType":"YulExpressionStatement","src":"26100:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26150:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26161:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26146:3:181"},"nodeType":"YulFunctionCall","src":"26146:18:181"},{"hexValue":"636f756c64206e6f7420696e6974206c70546f6b656e20636c6f6e65","kind":"string","nodeType":"YulLiteral","src":"26166:30:181","type":"","value":"could not init lpToken clone"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26139:6:181"},"nodeType":"YulFunctionCall","src":"26139:58:181"},"nodeType":"YulExpressionStatement","src":"26139:58:181"},{"nodeType":"YulAssignment","src":"26206:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26218:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26229:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26214:3:181"},"nodeType":"YulFunctionCall","src":"26214:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26206:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ef06697a0ef9ea911497bdcdba4dca4da1254e21c81d969c12b4cc8c2147f5f7__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26037:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26051:4:181","type":""}],"src":"25886:352:181"},{"body":{"nodeType":"YulBlock","src":"26295:116:181","statements":[{"nodeType":"YulAssignment","src":"26305:20:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"26320:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"26323:1:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"26316:3:181"},"nodeType":"YulFunctionCall","src":"26316:9:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"26305:7:181"}]},{"body":{"nodeType":"YulBlock","src":"26383:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"26385:16:181"},"nodeType":"YulFunctionCall","src":"26385:18:181"},"nodeType":"YulExpressionStatement","src":"26385:18:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"26354:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"26347:6:181"},"nodeType":"YulFunctionCall","src":"26347:9:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"26361:1:181"},{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"26368:7:181"},{"name":"x","nodeType":"YulIdentifier","src":"26377:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"26364:3:181"},"nodeType":"YulFunctionCall","src":"26364:15:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"26358:2:181"},"nodeType":"YulFunctionCall","src":"26358:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"26344:2:181"},"nodeType":"YulFunctionCall","src":"26344:37:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"26337:6:181"},"nodeType":"YulFunctionCall","src":"26337:45:181"},"nodeType":"YulIf","src":"26334:71:181"}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"26274:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"26277:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"26283:7:181","type":""}],"src":"26243:168:181"},{"body":{"nodeType":"YulBlock","src":"26502:61:181","statements":[{"nodeType":"YulAssignment","src":"26512:45:181","value":{"arguments":[{"name":"slot_value","nodeType":"YulIdentifier","src":"26525:10:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26545:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"26550:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26541:3:181"},"nodeType":"YulFunctionCall","src":"26541:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"26554:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"26537:3:181"},"nodeType":"YulFunctionCall","src":"26537:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26521:3:181"},"nodeType":"YulFunctionCall","src":"26521:36:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"26512:5:181"}]}]},"name":"extract_from_storage_value_offsett_contract_LPToken","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot_value","nodeType":"YulTypedName","src":"26477:10:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"26492:5:181","type":""}],"src":"26416:147:181"},{"body":{"nodeType":"YulBlock","src":"26645:426:181","statements":[{"nodeType":"YulVariableDeclaration","src":"26655:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"26675:5:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"26669:5:181"},"nodeType":"YulFunctionCall","src":"26669:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"26659:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"26697:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"26702:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26690:6:181"},"nodeType":"YulFunctionCall","src":"26690:19:181"},"nodeType":"YulExpressionStatement","src":"26690:19:181"},{"nodeType":"YulVariableDeclaration","src":"26718:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"26728:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"26722:2:181","type":""}]},{"nodeType":"YulAssignment","src":"26741:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"26752:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"26757:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26748:3:181"},"nodeType":"YulFunctionCall","src":"26748:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"26741:3:181"}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26776:1:181","type":"","value":"0"},{"name":"value","nodeType":"YulIdentifier","src":"26779:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26769:6:181"},"nodeType":"YulFunctionCall","src":"26769:16:181"},"nodeType":"YulExpressionStatement","src":"26769:16:181"},{"nodeType":"YulVariableDeclaration","src":"26794:30:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26818:1:181","type":"","value":"0"},{"name":"_1","nodeType":"YulIdentifier","src":"26821:2:181"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"26808:9:181"},"nodeType":"YulFunctionCall","src":"26808:16:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"26798:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"26833:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"26842:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"26837:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"26901:145:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"26922:3:181"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"26937:6:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"26931:5:181"},"nodeType":"YulFunctionCall","src":"26931:13:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26954:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"26959:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26950:3:181"},"nodeType":"YulFunctionCall","src":"26950:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"26963:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"26946:3:181"},"nodeType":"YulFunctionCall","src":"26946:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26927:3:181"},"nodeType":"YulFunctionCall","src":"26927:39:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26915:6:181"},"nodeType":"YulFunctionCall","src":"26915:52:181"},"nodeType":"YulExpressionStatement","src":"26915:52:181"},{"nodeType":"YulAssignment","src":"26980:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"26991:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"26996:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26987:3:181"},"nodeType":"YulFunctionCall","src":"26987:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"26980:3:181"}]},{"nodeType":"YulAssignment","src":"27012:24:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"27026:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"27034:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27022:3:181"},"nodeType":"YulFunctionCall","src":"27022:14:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"27012:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"26863:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"26866:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"26860:2:181"},"nodeType":"YulFunctionCall","src":"26860:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"26874:18:181","statements":[{"nodeType":"YulAssignment","src":"26876:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"26885:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"26888:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26881:3:181"},"nodeType":"YulFunctionCall","src":"26881:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"26876:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"26856:3:181","statements":[]},"src":"26852:194:181"},{"nodeType":"YulAssignment","src":"27055:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"27062:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"27055:3:181"}]}]},"name":"abi_encode_array_contract_IERC20_dyn_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"26622:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"26629:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"26637:3:181","type":""}],"src":"26568:503:181"},{"body":{"nodeType":"YulBlock","src":"27145:400:181","statements":[{"nodeType":"YulVariableDeclaration","src":"27155:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"27175:5:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"27169:5:181"},"nodeType":"YulFunctionCall","src":"27169:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"27159:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"27197:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"27202:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27190:6:181"},"nodeType":"YulFunctionCall","src":"27190:19:181"},"nodeType":"YulExpressionStatement","src":"27190:19:181"},{"nodeType":"YulVariableDeclaration","src":"27218:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"27228:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"27222:2:181","type":""}]},{"nodeType":"YulAssignment","src":"27241:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"27252:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"27257:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27248:3:181"},"nodeType":"YulFunctionCall","src":"27248:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"27241:3:181"}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27276:1:181","type":"","value":"0"},{"name":"value","nodeType":"YulIdentifier","src":"27279:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27269:6:181"},"nodeType":"YulFunctionCall","src":"27269:16:181"},"nodeType":"YulExpressionStatement","src":"27269:16:181"},{"nodeType":"YulVariableDeclaration","src":"27294:30:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27318:1:181","type":"","value":"0"},{"name":"_1","nodeType":"YulIdentifier","src":"27321:2:181"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"27308:9:181"},"nodeType":"YulFunctionCall","src":"27308:16:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"27298:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"27333:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"27342:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"27337:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"27401:119:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"27422:3:181"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"27433:6:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"27427:5:181"},"nodeType":"YulFunctionCall","src":"27427:13:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27415:6:181"},"nodeType":"YulFunctionCall","src":"27415:26:181"},"nodeType":"YulExpressionStatement","src":"27415:26:181"},{"nodeType":"YulAssignment","src":"27454:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"27465:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"27470:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27461:3:181"},"nodeType":"YulFunctionCall","src":"27461:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"27454:3:181"}]},{"nodeType":"YulAssignment","src":"27486:24:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"27500:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"27508:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27496:3:181"},"nodeType":"YulFunctionCall","src":"27496:14:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"27486:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"27363:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"27366:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"27360:2:181"},"nodeType":"YulFunctionCall","src":"27360:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"27374:18:181","statements":[{"nodeType":"YulAssignment","src":"27376:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"27385:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"27388:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27381:3:181"},"nodeType":"YulFunctionCall","src":"27381:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"27376:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"27356:3:181","statements":[]},"src":"27352:168:181"},{"nodeType":"YulAssignment","src":"27529:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"27536:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"27529:3:181"}]}]},"name":"abi_encode_array_uint256_dyn_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"27122:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"27129:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"27137:3:181","type":""}],"src":"27076:469:181"},{"body":{"nodeType":"YulBlock","src":"27722:1295:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27739:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27750:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27732:6:181"},"nodeType":"YulFunctionCall","src":"27732:21:181"},"nodeType":"YulExpressionStatement","src":"27732:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27773:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27784:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27769:3:181"},"nodeType":"YulFunctionCall","src":"27769:18:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"27795:6:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"27789:5:181"},"nodeType":"YulFunctionCall","src":"27789:13:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27762:6:181"},"nodeType":"YulFunctionCall","src":"27762:41:181"},"nodeType":"YulExpressionStatement","src":"27762:41:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27823:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27834:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27819:3:181"},"nodeType":"YulFunctionCall","src":"27819:18:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"27849:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"27857:4:181","type":"","value":"0x01"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27845:3:181"},"nodeType":"YulFunctionCall","src":"27845:17:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"27839:5:181"},"nodeType":"YulFunctionCall","src":"27839:24:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27812:6:181"},"nodeType":"YulFunctionCall","src":"27812:52:181"},"nodeType":"YulExpressionStatement","src":"27812:52:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27884:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27895:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27880:3:181"},"nodeType":"YulFunctionCall","src":"27880:19:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"27911:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"27919:4:181","type":"","value":"0x02"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27907:3:181"},"nodeType":"YulFunctionCall","src":"27907:17:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"27901:5:181"},"nodeType":"YulFunctionCall","src":"27901:24:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27873:6:181"},"nodeType":"YulFunctionCall","src":"27873:53:181"},"nodeType":"YulExpressionStatement","src":"27873:53:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27946:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27957:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27942:3:181"},"nodeType":"YulFunctionCall","src":"27942:19:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"27973:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"27981:4:181","type":"","value":"0x03"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27969:3:181"},"nodeType":"YulFunctionCall","src":"27969:17:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"27963:5:181"},"nodeType":"YulFunctionCall","src":"27963:24:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27935:6:181"},"nodeType":"YulFunctionCall","src":"27935:53:181"},"nodeType":"YulExpressionStatement","src":"27935:53:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28008:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"28019:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28004:3:181"},"nodeType":"YulFunctionCall","src":"28004:19:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"28035:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"28043:4:181","type":"","value":"0x04"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28031:3:181"},"nodeType":"YulFunctionCall","src":"28031:17:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"28025:5:181"},"nodeType":"YulFunctionCall","src":"28025:24:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27997:6:181"},"nodeType":"YulFunctionCall","src":"27997:53:181"},"nodeType":"YulExpressionStatement","src":"27997:53:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28070:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"28081:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28066:3:181"},"nodeType":"YulFunctionCall","src":"28066:19:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"28097:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"28105:4:181","type":"","value":"0x05"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28093:3:181"},"nodeType":"YulFunctionCall","src":"28093:17:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"28087:5:181"},"nodeType":"YulFunctionCall","src":"28087:24:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28059:6:181"},"nodeType":"YulFunctionCall","src":"28059:53:181"},"nodeType":"YulExpressionStatement","src":"28059:53:181"},{"nodeType":"YulVariableDeclaration","src":"28121:97:181","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"28203:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"28211:4:181","type":"","value":"0x06"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28199:3:181"},"nodeType":"YulFunctionCall","src":"28199:17:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"28193:5:181"},"nodeType":"YulFunctionCall","src":"28193:24:181"}],"functionName":{"name":"extract_from_storage_value_offsett_contract_LPToken","nodeType":"YulIdentifier","src":"28141:51:181"},"nodeType":"YulFunctionCall","src":"28141:77:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"28125:12:181","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"28255:12:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28273:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"28284:3:181","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28269:3:181"},"nodeType":"YulFunctionCall","src":"28269:19:181"}],"functionName":{"name":"abi_encode_contract_LPToken","nodeType":"YulIdentifier","src":"28227:27:181"},"nodeType":"YulFunctionCall","src":"28227:62:181"},"nodeType":"YulExpressionStatement","src":"28227:62:181"},{"nodeType":"YulVariableDeclaration","src":"28298:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"28308:6:181","type":"","value":"0x0160"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"28302:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28334:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"28345:3:181","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28330:3:181"},"nodeType":"YulFunctionCall","src":"28330:19:181"},{"name":"_1","nodeType":"YulIdentifier","src":"28351:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28323:6:181"},"nodeType":"YulFunctionCall","src":"28323:31:181"},"nodeType":"YulExpressionStatement","src":"28323:31:181"},{"nodeType":"YulVariableDeclaration","src":"28363:98:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"28426:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"28434:4:181","type":"","value":"0x07"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28422:3:181"},"nodeType":"YulFunctionCall","src":"28422:17:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28445:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"28456:3:181","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28441:3:181"},"nodeType":"YulFunctionCall","src":"28441:19:181"}],"functionName":{"name":"abi_encode_array_contract_IERC20_dyn_storage","nodeType":"YulIdentifier","src":"28377:44:181"},"nodeType":"YulFunctionCall","src":"28377:84:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"28367:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"28470:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28484:2:181","type":"","value":"63"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"28480:3:181"},"nodeType":"YulFunctionCall","src":"28480:7:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"28474:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28507:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"28518:3:181","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28503:3:181"},"nodeType":"YulFunctionCall","src":"28503:19:181"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"28532:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"28540:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"28528:3:181"},"nodeType":"YulFunctionCall","src":"28528:22:181"},{"name":"_2","nodeType":"YulIdentifier","src":"28552:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28524:3:181"},"nodeType":"YulFunctionCall","src":"28524:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28496:6:181"},"nodeType":"YulFunctionCall","src":"28496:60:181"},"nodeType":"YulExpressionStatement","src":"28496:60:181"},{"nodeType":"YulVariableDeclaration","src":"28565:77:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"28620:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"28628:4:181","type":"","value":"0x08"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28616:3:181"},"nodeType":"YulFunctionCall","src":"28616:17:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"28635:6:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn_storage","nodeType":"YulIdentifier","src":"28579:36:181"},"nodeType":"YulFunctionCall","src":"28579:63:181"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"28569:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28662:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"28673:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28658:3:181"},"nodeType":"YulFunctionCall","src":"28658:18:181"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"28686:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"28694:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"28682:3:181"},"nodeType":"YulFunctionCall","src":"28682:22:181"},{"name":"_2","nodeType":"YulIdentifier","src":"28706:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28678:3:181"},"nodeType":"YulFunctionCall","src":"28678:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28651:6:181"},"nodeType":"YulFunctionCall","src":"28651:59:181"},"nodeType":"YulExpressionStatement","src":"28651:59:181"},{"nodeType":"YulVariableDeclaration","src":"28719:77:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"28774:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"28782:4:181","type":"","value":"0x09"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28770:3:181"},"nodeType":"YulFunctionCall","src":"28770:17:181"},{"name":"tail_2","nodeType":"YulIdentifier","src":"28789:6:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn_storage","nodeType":"YulIdentifier","src":"28733:36:181"},"nodeType":"YulFunctionCall","src":"28733:63:181"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"28723:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28816:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"28827:3:181","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28812:3:181"},"nodeType":"YulFunctionCall","src":"28812:19:181"},{"arguments":[{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"28841:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"28849:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"28837:3:181"},"nodeType":"YulFunctionCall","src":"28837:22:181"},{"name":"_2","nodeType":"YulIdentifier","src":"28861:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28833:3:181"},"nodeType":"YulFunctionCall","src":"28833:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28805:6:181"},"nodeType":"YulFunctionCall","src":"28805:60:181"},"nodeType":"YulExpressionStatement","src":"28805:60:181"},{"nodeType":"YulAssignment","src":"28874:71:181","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"28923:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"28931:4:181","type":"","value":"0x0a"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28919:3:181"},"nodeType":"YulFunctionCall","src":"28919:17:181"},{"name":"tail_3","nodeType":"YulIdentifier","src":"28938:6:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn_storage","nodeType":"YulIdentifier","src":"28882:36:181"},"nodeType":"YulFunctionCall","src":"28882:63:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"28874:4:181"}]},{"expression":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"28982:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28994:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"29005:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28990:3:181"},"nodeType":"YulFunctionCall","src":"28990:20:181"}],"functionName":{"name":"abi_encode_contract_LPToken","nodeType":"YulIdentifier","src":"28954:27:181"},"nodeType":"YulFunctionCall","src":"28954:57:181"},"nodeType":"YulExpressionStatement","src":"28954:57:181"}]},"name":"abi_encode_tuple_t_struct$_Swap_$34379_storage_t_address__to_t_struct$_Swap_$34379_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27683:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"27694:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"27702:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"27713:4:181","type":""}],"src":"27550:1467:181"},{"body":{"nodeType":"YulBlock","src":"29129:87:181","statements":[{"nodeType":"YulAssignment","src":"29139:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29151:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"29162:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29147:3:181"},"nodeType":"YulFunctionCall","src":"29147:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"29139:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29181:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"29196:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"29204:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29192:3:181"},"nodeType":"YulFunctionCall","src":"29192:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29174:6:181"},"nodeType":"YulFunctionCall","src":"29174:36:181"},"nodeType":"YulExpressionStatement","src":"29174:36:181"}]},"name":"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29098:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"29109:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"29120:4:181","type":""}],"src":"29022:194:181"},{"body":{"nodeType":"YulBlock","src":"29464:229:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29481:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"29492:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29474:6:181"},"nodeType":"YulFunctionCall","src":"29474:25:181"},"nodeType":"YulExpressionStatement","src":"29474:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29519:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"29530:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29515:3:181"},"nodeType":"YulFunctionCall","src":"29515:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"29535:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29508:6:181"},"nodeType":"YulFunctionCall","src":"29508:30:181"},"nodeType":"YulExpressionStatement","src":"29508:30:181"},{"nodeType":"YulAssignment","src":"29547:81:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"29593:6:181"},{"name":"value2","nodeType":"YulIdentifier","src":"29601:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29613:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"29624:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29609:3:181"},"nodeType":"YulFunctionCall","src":"29609:18:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn_calldata","nodeType":"YulIdentifier","src":"29555:37:181"},"nodeType":"YulFunctionCall","src":"29555:73:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"29547:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29648:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"29659:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29644:3:181"},"nodeType":"YulFunctionCall","src":"29644:18:181"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29678:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29671:6:181"},"nodeType":"YulFunctionCall","src":"29671:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29664:6:181"},"nodeType":"YulFunctionCall","src":"29664:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29637:6:181"},"nodeType":"YulFunctionCall","src":"29637:50:181"},"nodeType":"YulExpressionStatement","src":"29637:50:181"}]},"name":"abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_array$_t_uint256_$dyn_calldata_ptr_t_bool__to_t_uint256_t_array$_t_uint256_$dyn_memory_ptr_t_bool__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29409:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"29420:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"29428:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"29436:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"29444:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"29455:4:181","type":""}],"src":"29221:472:181"},{"body":{"nodeType":"YulBlock","src":"29872:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29889:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"29900:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29882:6:181"},"nodeType":"YulFunctionCall","src":"29882:21:181"},"nodeType":"YulExpressionStatement","src":"29882:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29923:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"29934:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29919:3:181"},"nodeType":"YulFunctionCall","src":"29919:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"29939:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29912:6:181"},"nodeType":"YulFunctionCall","src":"29912:30:181"},"nodeType":"YulExpressionStatement","src":"29912:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29962:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"29973:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29958:3:181"},"nodeType":"YulFunctionCall","src":"29958:18:181"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"29978:34:181","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29951:6:181"},"nodeType":"YulFunctionCall","src":"29951:62:181"},"nodeType":"YulExpressionStatement","src":"29951:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30033:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"30044:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30029:3:181"},"nodeType":"YulFunctionCall","src":"30029:18:181"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"30049:8:181","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30022:6:181"},"nodeType":"YulFunctionCall","src":"30022:36:181"},"nodeType":"YulExpressionStatement","src":"30022:36:181"},{"nodeType":"YulAssignment","src":"30067:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30079:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"30090:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30075:3:181"},"nodeType":"YulFunctionCall","src":"30075:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"30067:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29849:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"29863:4:181","type":""}],"src":"29698:402:181"},{"body":{"nodeType":"YulBlock","src":"30279:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30296:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"30307:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30289:6:181"},"nodeType":"YulFunctionCall","src":"30289:21:181"},"nodeType":"YulExpressionStatement","src":"30289:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30330:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"30341:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30326:3:181"},"nodeType":"YulFunctionCall","src":"30326:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"30346:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30319:6:181"},"nodeType":"YulFunctionCall","src":"30319:30:181"},"nodeType":"YulExpressionStatement","src":"30319:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30369:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"30380:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30365:3:181"},"nodeType":"YulFunctionCall","src":"30365:18:181"},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","kind":"string","nodeType":"YulLiteral","src":"30385:33:181","type":"","value":"ReentrancyGuard: reentrant call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30358:6:181"},"nodeType":"YulFunctionCall","src":"30358:61:181"},"nodeType":"YulExpressionStatement","src":"30358:61:181"},{"nodeType":"YulAssignment","src":"30428:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30440:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"30451:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30436:3:181"},"nodeType":"YulFunctionCall","src":"30436:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"30428:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"30256:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"30270:4:181","type":""}],"src":"30105:355:181"},{"body":{"nodeType":"YulBlock","src":"30639:182:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30656:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"30667:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30649:6:181"},"nodeType":"YulFunctionCall","src":"30649:21:181"},"nodeType":"YulExpressionStatement","src":"30649:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30690:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"30701:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30686:3:181"},"nodeType":"YulFunctionCall","src":"30686:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"30706:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30679:6:181"},"nodeType":"YulFunctionCall","src":"30679:30:181"},"nodeType":"YulExpressionStatement","src":"30679:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30729:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"30740:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30725:3:181"},"nodeType":"YulFunctionCall","src":"30725:18:181"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"30745:34:181","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30718:6:181"},"nodeType":"YulFunctionCall","src":"30718:62:181"},"nodeType":"YulExpressionStatement","src":"30718:62:181"},{"nodeType":"YulAssignment","src":"30789:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30801:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"30812:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30797:3:181"},"nodeType":"YulFunctionCall","src":"30797:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"30789:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"30616:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"30630:4:181","type":""}],"src":"30465:356:181"},{"body":{"nodeType":"YulBlock","src":"31000:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31017:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"31028:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31010:6:181"},"nodeType":"YulFunctionCall","src":"31010:21:181"},"nodeType":"YulExpressionStatement","src":"31010:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31051:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"31062:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31047:3:181"},"nodeType":"YulFunctionCall","src":"31047:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"31067:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31040:6:181"},"nodeType":"YulFunctionCall","src":"31040:30:181"},"nodeType":"YulExpressionStatement","src":"31040:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31090:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"31101:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31086:3:181"},"nodeType":"YulFunctionCall","src":"31086:18:181"},{"hexValue":"5061757361626c653a20706175736564","kind":"string","nodeType":"YulLiteral","src":"31106:18:181","type":"","value":"Pausable: paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31079:6:181"},"nodeType":"YulFunctionCall","src":"31079:46:181"},"nodeType":"YulExpressionStatement","src":"31079:46:181"},{"nodeType":"YulAssignment","src":"31134:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31146:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"31157:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31142:3:181"},"nodeType":"YulFunctionCall","src":"31142:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"31134:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"30977:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"30991:4:181","type":""}],"src":"30826:340:181"},{"body":{"nodeType":"YulBlock","src":"31345:233:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31362:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"31373:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31355:6:181"},"nodeType":"YulFunctionCall","src":"31355:21:181"},"nodeType":"YulExpressionStatement","src":"31355:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31396:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"31407:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31392:3:181"},"nodeType":"YulFunctionCall","src":"31392:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"31412:2:181","type":"","value":"43"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31385:6:181"},"nodeType":"YulFunctionCall","src":"31385:30:181"},"nodeType":"YulExpressionStatement","src":"31385:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31435:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"31446:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31431:3:181"},"nodeType":"YulFunctionCall","src":"31431:18:181"},{"hexValue":"496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069","kind":"string","nodeType":"YulLiteral","src":"31451:34:181","type":"","value":"Initializable: contract is not i"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31424:6:181"},"nodeType":"YulFunctionCall","src":"31424:62:181"},"nodeType":"YulExpressionStatement","src":"31424:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31506:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"31517:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31502:3:181"},"nodeType":"YulFunctionCall","src":"31502:18:181"},{"hexValue":"6e697469616c697a696e67","kind":"string","nodeType":"YulLiteral","src":"31522:13:181","type":"","value":"nitializing"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31495:6:181"},"nodeType":"YulFunctionCall","src":"31495:41:181"},"nodeType":"YulExpressionStatement","src":"31495:41:181"},{"nodeType":"YulAssignment","src":"31545:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31557:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"31568:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31553:3:181"},"nodeType":"YulFunctionCall","src":"31553:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"31545:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"31322:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"31336:4:181","type":""}],"src":"31171:407:181"},{"body":{"nodeType":"YulBlock","src":"31757:172:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31774:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"31785:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31767:6:181"},"nodeType":"YulFunctionCall","src":"31767:21:181"},"nodeType":"YulExpressionStatement","src":"31767:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31808:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"31819:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31804:3:181"},"nodeType":"YulFunctionCall","src":"31804:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"31824:2:181","type":"","value":"22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31797:6:181"},"nodeType":"YulFunctionCall","src":"31797:30:181"},"nodeType":"YulExpressionStatement","src":"31797:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31847:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"31858:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31843:3:181"},"nodeType":"YulFunctionCall","src":"31843:18:181"},{"hexValue":"455243313136373a20637265617465206661696c6564","kind":"string","nodeType":"YulLiteral","src":"31863:24:181","type":"","value":"ERC1167: create failed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31836:6:181"},"nodeType":"YulFunctionCall","src":"31836:52:181"},"nodeType":"YulExpressionStatement","src":"31836:52:181"},{"nodeType":"YulAssignment","src":"31897:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31909:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"31920:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31905:3:181"},"nodeType":"YulFunctionCall","src":"31905:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"31897:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"31734:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"31748:4:181","type":""}],"src":"31583:346:181"},{"body":{"nodeType":"YulBlock","src":"32108:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32125:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"32136:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32118:6:181"},"nodeType":"YulFunctionCall","src":"32118:21:181"},"nodeType":"YulExpressionStatement","src":"32118:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32159:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"32170:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32155:3:181"},"nodeType":"YulFunctionCall","src":"32155:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"32175:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32148:6:181"},"nodeType":"YulFunctionCall","src":"32148:30:181"},"nodeType":"YulExpressionStatement","src":"32148:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32198:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"32209:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32194:3:181"},"nodeType":"YulFunctionCall","src":"32194:18:181"},{"hexValue":"5061757361626c653a206e6f7420706175736564","kind":"string","nodeType":"YulLiteral","src":"32214:22:181","type":"","value":"Pausable: not paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32187:6:181"},"nodeType":"YulFunctionCall","src":"32187:50:181"},"nodeType":"YulExpressionStatement","src":"32187:50:181"},{"nodeType":"YulAssignment","src":"32246:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32258:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"32269:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32254:3:181"},"nodeType":"YulFunctionCall","src":"32254:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"32246:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"32085:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"32099:4:181","type":""}],"src":"31934:344:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_array_uint256_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint256t_array$_t_uint256_$dyn_calldata_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_array_uint256_dyn_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n        value3 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint256t_uint8(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_uint8(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint256t_uint8t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_uint8(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_array$_t_uint256_$dyn_calldata_ptrt_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_uint256_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        value2 := calldataload(add(headStart, 32))\n        value3 := calldataload(add(headStart, 64))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_uint256t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value1 := value\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n    }\n    function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_contract_LPToken(value, pos)\n    {\n        mstore(pos, and(value, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_contract$_LPToken_$23179__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_address__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n        mstore(add(headStart, 192), and(value6, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_uint8t_uint8t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n        value1 := abi_decode_uint8(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint8(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n    }\n    function abi_encode_tuple_t_contract$_IERC20_$10812__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_uint8t_uint8t_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n        value1 := abi_decode_uint8(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_array_contract_IERC20_dyn(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(shl(5, length), 0x20)\n    }\n    function abi_decode_array_contract_IERC20_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_contract_IERC20_dyn(_1))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let srcEnd := add(add(offset, shl(5, _1)), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            let value := calldataload(src)\n            validator_revert_address(value)\n            mstore(dst, value)\n            dst := add(dst, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_array_uint8_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_contract_IERC20_dyn(_1))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let srcEnd := add(add(offset, shl(5, _1)), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            mstore(dst, abi_decode_uint8(src))\n            dst := add(dst, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_string(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        if gt(_1, 0xffffffffffffffff) { panic_error_0x41() }\n        let array_1 := allocate_memory(add(and(add(_1, 0x1f), not(31)), 0x20))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(array_1, _1), 0x20), 0)\n        array := array_1\n    }\n    function abi_decode_tuple_t_array$_t_contract$_IERC20_$10812_$dyn_memory_ptrt_array$_t_uint8_$dyn_memory_ptrt_string_memory_ptrt_string_memory_ptrt_uint256t_uint256t_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_array_contract_IERC20_dyn(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_array_uint8_dyn(add(headStart, offset_1), dataEnd)\n        let offset_2 := calldataload(add(headStart, 64))\n        if gt(offset_2, _1) { revert(0, 0) }\n        value2 := abi_decode_string(add(headStart, offset_2), dataEnd)\n        let offset_3 := calldataload(add(headStart, 96))\n        if gt(offset_3, _1) { revert(0, 0) }\n        value3 := abi_decode_string(add(headStart, offset_3), dataEnd)\n        value4 := calldataload(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n        value7 := abi_decode_address(add(headStart, 224))\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_uint256_$dyn_calldata_ptrt_bool(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_uint256_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let value := calldataload(add(headStart, 32))\n        validator_revert_bool(value)\n        value2 := value\n    }\n    function abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_address__to_t_uint256_t_address__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr__to_t_uint256__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_a167df2a4d2ab6c5ee865e91ee543461cb54682b898fb54f9c2d17424e75a781__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Deadline not met\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_array_uint256_dyn_calldata(start, length, pos) -> end\n    {\n        mstore(pos, length)\n        if gt(length, sub(shl(251, 1), 1)) { revert(0, 0) }\n        let length_1 := shl(5, length)\n        calldatacopy(add(pos, 0x20), start, length_1)\n        end := add(add(pos, length_1), 0x20)\n    }\n    function abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint256_t_array$_t_uint256_$dyn_calldata_ptr__to_t_uint256_t_uint256_t_array$_t_uint256_$dyn_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), 96)\n        tail := abi_encode_array_uint256_dyn_calldata(value2, value3, add(headStart, 96))\n    }\n    function abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        let _1 := 32\n        if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n        let offset := mload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        let dst := allocate_memory(array_allocation_size_array_contract_IERC20_dyn(_3))\n        let dst_1 := dst\n        mstore(dst, _3)\n        dst := add(dst, _1)\n        let srcEnd := add(add(_2, shl(5, _3)), _1)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_2, _1)\n        for { } lt(src, srcEnd) { src := add(src, _1) }\n        {\n            mstore(dst, mload(src))\n            dst := add(dst, _1)\n        }\n        value0 := dst_1\n    }\n    function abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint256_t_uint8__to_t_uint256_t_uint256_t_uint8__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xff))\n    }\n    function abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint256__to_t_uint256_t_uint256__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint256_t_uint8_t_uint256__to_t_uint256_t_uint256_t_uint8_t_uint256__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_array$_t_uint256_$dyn_calldata_ptr_t_uint256__to_t_uint256_t_array$_t_uint256_$dyn_memory_ptr_t_uint256__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 96)\n        tail := abi_encode_array_uint256_dyn_calldata(value1, value2, add(headStart, 96))\n        mstore(add(headStart, 64), value3)\n    }\n    function abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint8_t_uint8_t_uint256_t_uint256__to_t_uint256_t_uint8_t_uint8_t_uint256_t_uint256__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_stringliteral_547be7f5ed2d17cca91d35e8212265e350385ed13daeee07722cf3e686dd6726__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"Token does not exist\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_uint8_t_uint8_t_uint256__to_t_uint256_t_uint8_t_uint8_t_uint256__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_c8de02deba8e639087754d5067b8a43e5887b03be7353558822d412acbff2048__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"Out of range\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_c9580fd05844cb84bf0a747c48ec42a21f1dca0bc044d3619707fb319eddae0d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"Index out of range\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Initializable: contract is alrea\")\n        mstore(add(headStart, 96), \"dy initialized\")\n        tail := add(headStart, 128)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_d942505f5a21659daedb4f74215666300f325ec8e6deb29a6240331f6ece39d6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"_pooledTokens.length insufficien\")\n        mstore(add(headStart, 96), \"t\")\n        tail := add(headStart, 128)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_a7a86fffacc19e5c55f7740c49d3c43b8158ebebe8d693c955c37638cd63750e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 30)\n        mstore(add(headStart, 64), \"_pooledTokens.length too large\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_920ab7aea64abf6f625f3ec866769a336d71d85943ea085dcc6d4f83565e10e2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"_pooledTokens decimals mismatch\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_468e0bfcb3e3ab0378a7d7aca9480e7f3c9394926fb120f85a78a58c132177eb__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Duplicate tokens\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_b906ee6e71cd5815b0e043fe7cf4686b9eba5c13a6e0a21a7bb55e8a6681b39d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"The 0 address isn't an ERC-20\")\n        tail := add(headStart, 96)\n    }\n    function checked_add_t_uint8(x, y) -> sum\n    {\n        sum := add(and(x, 0xff), and(y, 0xff))\n        if gt(sum, 0xff) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_3659d4e5f95ff79d6b4bfc4ef30ecea959c6574585372b1f2b55fd5d9b45e4f4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 26)\n        mstore(add(headStart, 64), \"Token decimals exceeds max\")\n        tail := add(headStart, 96)\n    }\n    function checked_sub_t_uint8(x, y) -> diff\n    {\n        diff := sub(and(x, 0xff), and(y, 0xff))\n        if gt(diff, 0xff) { panic_error_0x11() }\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(not(0), base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(not(0), base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function abi_encode_tuple_t_stringliteral_6d10d9193d6dae542704df3b3ab8bcf0eeb6847d3d136ed4b04aee07a7f72dfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"_a exceeds maximum\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c2ec1c8b95f7fdd82a9cd723ab25579d58e30b4630228130b1c03ae94813d95b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"_fee exceeds maximum\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_5e9995c4674de2ad727ffbe3c3110784ecdbab72c3e1a2bdc6129e561bb0f370__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"_adminFee exceeds maximum\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        let tail_1 := abi_encode_string(value0, add(headStart, 64))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_string(value1, tail_1)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_ef06697a0ef9ea911497bdcdba4dca4da1254e21c81d969c12b4cc8c2147f5f7__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 28)\n        mstore(add(headStart, 64), \"could not init lpToken clone\")\n        tail := add(headStart, 96)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        product := mul(x, y)\n        if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n    }\n    function extract_from_storage_value_offsett_contract_LPToken(slot_value) -> value\n    {\n        value := and(slot_value, sub(shl(160, 1), 1))\n    }\n    function abi_encode_array_contract_IERC20_dyn_storage(value, pos) -> end\n    {\n        let length := sload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        mstore(0, value)\n        let srcPtr := keccak256(0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(sload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, 1)\n        }\n        end := pos\n    }\n    function abi_encode_array_uint256_dyn_storage(value, pos) -> end\n    {\n        let length := sload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        mstore(0, value)\n        let srcPtr := keccak256(0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, sload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, 1)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_struct$_Swap_$34379_storage_t_address__to_t_struct$_Swap_$34379_memory_ptr_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        mstore(add(headStart, 64), sload(value0))\n        mstore(add(headStart, 96), sload(add(value0, 0x01)))\n        mstore(add(headStart, 128), sload(add(value0, 0x02)))\n        mstore(add(headStart, 160), sload(add(value0, 0x03)))\n        mstore(add(headStart, 192), sload(add(value0, 0x04)))\n        mstore(add(headStart, 224), sload(add(value0, 0x05)))\n        let memberValue0 := extract_from_storage_value_offsett_contract_LPToken(sload(add(value0, 0x06)))\n        abi_encode_contract_LPToken(memberValue0, add(headStart, 256))\n        let _1 := 0x0160\n        mstore(add(headStart, 288), _1)\n        let tail_1 := abi_encode_array_contract_IERC20_dyn_storage(add(value0, 0x07), add(headStart, 416))\n        let _2 := not(63)\n        mstore(add(headStart, 320), add(sub(tail_1, headStart), _2))\n        let tail_2 := abi_encode_array_uint256_dyn_storage(add(value0, 0x08), tail_1)\n        mstore(add(headStart, _1), add(sub(tail_2, headStart), _2))\n        let tail_3 := abi_encode_array_uint256_dyn_storage(add(value0, 0x09), tail_2)\n        mstore(add(headStart, 384), add(sub(tail_3, headStart), _2))\n        tail := abi_encode_array_uint256_dyn_storage(add(value0, 0x0a), tail_3)\n        abi_encode_contract_LPToken(value1, add(headStart, 0x20))\n    }\n    function abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_struct$_Swap_$34379_storage_ptr_t_array$_t_uint256_$dyn_calldata_ptr_t_bool__to_t_uint256_t_array$_t_uint256_$dyn_memory_ptr_t_bool__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 96)\n        tail := abi_encode_array_uint256_dyn_calldata(value1, value2, add(headStart, 96))\n        mstore(add(headStart, 64), iszero(iszero(value3)))\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Pausable: paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 43)\n        mstore(add(headStart, 64), \"Initializable: contract is not i\")\n        mstore(add(headStart, 96), \"nitializing\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"ERC1167: create failed\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"Pausable: not paused\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{"contracts/core/connext/libraries/SwapUtilsExternal.sol":{"SwapUtilsExternal":[{"length":20,"start":1667},{"length":20,"start":1841},{"length":20,"start":2016},{"length":20,"start":2194},{"length":20,"start":2334},{"length":20,"start":2511},{"length":20,"start":2688},{"length":20,"start":2866},{"length":20,"start":3029},{"length":20,"start":3279},{"length":20,"start":3476},{"length":20,"start":3785},{"length":20,"start":3869},{"length":20,"start":4007},{"length":20,"start":4282},{"length":20,"start":6396},{"length":20,"start":6606},{"length":20,"start":6665},{"length":20,"start":6724},{"length":20,"start":6776},{"length":20,"start":6855},{"length":20,"start":6981},{"length":20,"start":7274}]}},"object":"6080604052600436106101f95760003560e01c80638456cb591161010d578063c4db7fa0116100a0578063e6ab28061161006f578063e6ab2806146105d1578063ef0a712f146105f1578063f2fad2b614610611578063f2fde38b14610631578063f9a15fb91461065157600080fd5b8063c4db7fa01461057f578063d460f0a214610594578063d46300fd146105a7578063e25aa5fa146105bc57600080fd5b806391695586116100dc57806391695586146104ff57806391ceb3eb1461051f578063a95b089f1461053f578063b28cb6dc1461055f57600080fd5b80638456cb591461048c57806384cdd9bc146104a15780638beb60b6146104c15780638da5cb5b146104e157600080fd5b80635428c1171161019057806366c0bd241161015f57806366c0bd24146103cd5780636b1dc08b146103ff578063715018a61461041f5780637f41e7ef1461043457806382b866001461045457600080fd5b80635428c117146102ff578063593d132c146103125780635c975abb146103325780635fd65f0f1461035557600080fd5b806334e19907116101cc57806334e199071461028a5780633e3a1560146102aa5780633f4ba83a146102ca5780634d49e87d146102df57600080fd5b80630419b45a146101fe5780630ba819591461021557806331cd52b01461023d578063342a87a11461026a575b600080fd5b34801561020a57600080fd5b50610213610671565b005b34801561022157600080fd5b5061022a610718565b6040519081526020015b60405180910390f35b34801561024957600080fd5b5061025d610258366004612170565b610795565b60405161023491906121c3565b34801561027657600080fd5b5061022a610285366004612218565b610869565b34801561029657600080fd5b506102136102a5366004612244565b6108f9565b3480156102b657600080fd5b5061022a6102c536600461225d565b61096f565b3480156102d657600080fd5b50610213610a2e565b3480156102eb57600080fd5b5061022a6102fa366004612298565b610a3e565b61022a61030d366004612309565b610aaf565b34801561031e57600080fd5b5061021361032d36600461235b565b610ba9565b34801561033e57600080fd5b5060655460ff166040519015158152602001610234565b34801561036157600080fd5b5060fb5460fc5460fd5460fe5460ff54610100546101015461038f969594939291906001600160a01b031687565b604080519788526020880196909652948601939093526060850191909152608084015260a08301526001600160a01b031660c082015260e001610234565b3480156103d957600080fd5b506103ed6103e836600461237d565b610c26565b60405160ff9091168152602001610234565b34801561040b57600080fd5b5061022a61041a36600461239a565b610c9e565b34801561042b57600080fd5b50610213610d38565b34801561044057600080fd5b5061022a61044f3660046123d6565b610d4a565b34801561046057600080fd5b5061047461046f366004612417565b610dfd565b6040516001600160a01b039091168152602001610234565b34801561049857600080fd5b50610213610e77565b3480156104ad57600080fd5b5061022a6104bc366004612298565b610e87565b3480156104cd57600080fd5b506102136104dc366004612244565b610ef8565b3480156104ed57600080fd5b506033546001600160a01b0316610474565b34801561050b57600080fd5b5061022a61051a366004612432565b610f3f565b34801561052b57600080fd5b5061022a61053a366004612417565b611012565b34801561054b57600080fd5b5061022a61055a36600461239a565b611089565b34801561056b57600080fd5b5061021361057a366004612630565b6110dc565b34801561058b57600080fd5b506102136118de565b61022a6105a2366004612309565b61194b565b3480156105b357600080fd5b5061022a6119f0565b3480156105c857600080fd5b5061022a611a2b565b3480156105dd57600080fd5b5061022a6105ec366004612719565b611a66565b3480156105fd57600080fd5b5061022a61060c366004612244565b611aa7565b34801561061d57600080fd5b5061025d61062c366004612244565b611b25565b34801561063d57600080fd5b5061021361064c36600461237d565b611ba7565b34801561065d57600080fd5b5061022a61066c3660046123d6565b611c20565b610679611c8c565b610681611ce5565b73__$0399e8fdab399fb8f200f3895472e3787c$__639cbd240660fb6106af6033546001600160a01b031690565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b1580156106f457600080fd5b505af4158015610708573d6000803e3d6000fd5b50505050610716600160c955565b565b60405163f43dee5360e01b815260fb600482015260009073__$0399e8fdab399fb8f200f3895472e3787c$__9063f43dee53906024015b602060405180830381865af415801561076c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107909190612770565b905090565b606061079f611c8c565b6107a7611d46565b81804211156107d15760405162461bcd60e51b81526004016107c890612789565b60405180910390fd5b604051631beec94360e21b815273__$0399e8fdab399fb8f200f3895472e3787c$__90636fbb250c9061080f9060fb908a908a908a906004016127e5565b600060405180830381865af415801561082c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108549190810190612805565b915050610861600160c955565b949350505050565b6040516384eeef2760e01b815260fb60048201526024810183905260ff8216604482015260009073__$0399e8fdab399fb8f200f3895472e3787c$__906384eeef2790606401602060405180830381865af41580156108cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f09190612770565b90505b92915050565b610901611ce5565b604051632cecccb560e11b815260fb60048201526024810182905273__$0399e8fdab399fb8f200f3895472e3787c$__906359d9996a906044015b60006040518083038186803b15801561095457600080fd5b505af4158015610968573d6000803e3d6000fd5b5050505050565b6000610979611c8c565b610981611d46565b81804211156109a25760405162461bcd60e51b81526004016107c890612789565b604051632b8ffbb760e21b815260fb60048201526024810187905260ff861660448201526064810185905273__$0399e8fdab399fb8f200f3895472e3787c$__9063ae3feedc906084015b602060405180830381865af4158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108549190612770565b610a36611ce5565b610716611d8c565b6000610a48611c8c565b610a50611d46565b8180421115610a715760405162461bcd60e51b81526004016107c890612789565b6040516333a43f9560e11b815273__$0399e8fdab399fb8f200f3895472e3787c$__906367487f2a906109ed9060fb908a908a908a90600401612896565b6000610ab9611c8c565b610ac1611d46565b8180421115610ae25760405162461bcd60e51b81526004016107c890612789565b6000610aed87610c26565b90506000610afa87610c26565b60405163703c02d560e11b815260fb600482015260ff808516602483015282166044820152606481018b90526084810188905290915073__$0399e8fdab399fb8f200f3895472e3787c$__9063e07805aa9060a4015b602060405180830381865af4158015610b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b919190612770565b9350505050610ba0600160c955565b95945050505050565b610bb1611ce5565b604051633f1e106160e21b815260fb6004820152602481018390526044810182905273__$0399e8fdab399fb8f200f3895472e3787c$__9063fc7841849060640160006040518083038186803b158015610c0a57600080fd5b505af4158015610c1e573d6000803e3d6000fd5b505050505050565b6001600160a01b03811660008181526101066020526040812054909160ff90911690610c5182610dfd565b6001600160a01b0316146108f35760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b60448201526064016107c8565b604051632e4be8d760e21b815260fb600482015260ff8085166024830152831660448201526064810182905260009073__$0399e8fdab399fb8f200f3895472e3787c$__9063b92fa35c906084015b602060405180830381865af4158015610d0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2e9190612770565b90505b9392505050565b610d40611ce5565b6107166000611dde565b600080610d5685610c26565b90506000610d6385610c26565b604051632f4998ad60e01b815260fb600482015260ff8085166024830152821660448201526064810186905290915073__$0399e8fdab399fb8f200f3895472e3787c$__90632f4998ad906084015b602060405180830381865af4158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df39190612770565b9695505050505050565b6101025460009060ff831610610e445760405162461bcd60e51b815260206004820152600c60248201526b4f7574206f662072616e676560a01b60448201526064016107c8565b610102805460ff8416908110610e5c57610e5c6128c1565b6000918252602090912001546001600160a01b031692915050565b610e7f611ce5565b610716611e30565b6000610e91611c8c565b610e99611d46565b8180421115610eba5760405162461bcd60e51b81526004016107c890612789565b60405163077b83d360e41b815273__$0399e8fdab399fb8f200f3895472e3787c$__906377b83d30906109ed9060fb908a908a908a90600401612896565b610f00611ce5565b6040516308bbaa2360e01b815260fb60048201526024810182905273__$0399e8fdab399fb8f200f3895472e3787c$__906308bbaa239060440161093c565b6000610f49611c8c565b610f51611d46565b8180421115610f725760405162461bcd60e51b81526004016107c890612789565b60405163f204293960e01b815260fb600482015260ff808916602483015287166044820152606481018690526084810185905273__$0399e8fdab399fb8f200f3895472e3787c$__9063f20429399060a401602060405180830381865af4158015610fe1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110059190612770565b915050610ba0600160c955565b6101025460009060ff83161061105f5760405162461bcd60e51b8152602060048201526012602482015271496e646578206f7574206f662072616e676560701b60448201526064016107c8565b610104805460ff8416908110611077576110776128c1565b90600052602060002001549050919050565b604051632f4998ad60e01b815260fb600482015260ff8085166024830152831660448201526064810182905260009073__$0399e8fdab399fb8f200f3895472e3787c$__90632f4998ad90608401610ced565b600054610100900460ff16158080156110fc5750600054600160ff909116105b806111165750303b158015611116575060005460ff166001145b6111795760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107c8565b6000805460ff19166001179055801561119c576000805461ff0019166101001790555b6111a4611e6d565b6111ac611eac565b88516111ba600160026128ed565b81116112125760405162461bcd60e51b815260206004820152602160248201527f5f706f6f6c6564546f6b656e732e6c656e67746820696e73756666696369656e6044820152601d60fa1b60648201526084016107c8565b61121e60106001612900565b811061126c5760405162461bcd60e51b815260206004820152601e60248201527f5f706f6f6c6564546f6b656e732e6c656e67746820746f6f206c61726765000060448201526064016107c8565b885181146112bc5760405162461bcd60e51b815260206004820152601f60248201527f5f706f6f6c6564546f6b656e7320646563696d616c73206d69736d617463680060448201526064016107c8565b6000895167ffffffffffffffff8111156112d8576112d861247f565b604051908082528060200260200182016040528015611301578160200160208202803683370190505b50905060005b8281101561157f5780156113e45761010660008d838151811061132c5761132c6128c1565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161580156113a557508b818151811061136d5761136d6128c1565b60200260200101516001600160a01b03168c600081518110611391576113916128c1565b60200260200101516001600160a01b031614155b6113e45760405162461bcd60e51b815260206004820152601060248201526f4475706c696361746520746f6b656e7360801b60448201526064016107c8565b60006001600160a01b03168c8281518110611401576114016128c1565b60200260200101516001600160a01b03160361145f5760405162461bcd60e51b815260206004820152601d60248201527f546865203020616464726573732069736e277420616e204552432d323000000060448201526064016107c8565b61146b60126001612913565b60ff168b8281518110611480576114806128c1565b602002602001015160ff16106114d85760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e20646563696d616c732065786365656473206d617800000000000060448201526064016107c8565b8a81815181106114ea576114ea6128c1565b602002602001015160126114fe919061292c565b61150c9060ff16600a612a29565b82828151811061151e5761151e6128c1565b6020026020010181815250508061010660008e8481518110611542576115426128c1565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191660ff92909216919091179055600101611307565b50620f424087106115c75760405162461bcd60e51b81526020600482015260126024820152715f612065786365656473206d6178696d756d60701b60448201526064016107c8565b6305f5e10086106116115760405162461bcd60e51b81526020600482015260146024820152735f6665652065786365656473206d6178696d756d60601b60448201526064016107c8565b6402540be40085106116655760405162461bcd60e51b815260206004820152601960248201527f5f61646d696e4665652065786365656473206d6178696d756d0000000000000060448201526064016107c8565b600061167085611edb565b60405163266c45bb60e11b81529091506001600160a01b03821690634cd88b76906116a1908d908d90600401612a7b565b6020604051808303816000875af11580156116c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e49190612aa0565b6117305760405162461bcd60e51b815260206004820152601c60248201527f636f756c64206e6f7420696e6974206c70546f6b656e20636c6f6e650000000060448201526064016107c8565b61010180546001600160a01b0319166001600160a01b0383161790558b51611760906101029060208f019061206f565b508151611775906101039060208501906120d4565b508267ffffffffffffffff81111561178f5761178f61247f565b6040519080825280602002602001820160405280156117b8578160200160208202803683370190505b5080516117ce91610104916020909101906120d4565b508267ffffffffffffffff8111156117e8576117e861247f565b604051908082528060200260200182016040528015611811578160200160208202803683370190505b50805161182791610105916020909101906120d4565b50611833606489612abd565b60fb55611841606489612abd565b60fc5560ff8790556101008690556040517f8ba0c15f86c46b5773beb451b4d8d5744f7642ab1004c0a7e59e215710fb3aba906118829060fb903390612b52565b60405180910390a150505080156118d3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6118e6611ce5565b60405163e5b994c560e01b815260fb600482015273__$0399e8fdab399fb8f200f3895472e3787c$__9063e5b994c59060240160006040518083038186803b15801561193157600080fd5b505af4158015611945573d6000803e3d6000fd5b50505050565b6000611955611c8c565b61195d611d46565b818042111561197e5760405162461bcd60e51b81526004016107c890612789565b600061198987610c26565b9050600061199687610c26565b60405163f204293960e01b815260fb600482015260ff808516602483015282166044820152606481018b90526084810188905290915073__$0399e8fdab399fb8f200f3895472e3787c$__9063f20429399060a401610b50565b604051631158dafb60e11b815260fb600482015260009073__$0399e8fdab399fb8f200f3895472e3787c$__906322b1b5f69060240161074f565b604051638be1e52360e01b815260fb600482015260009073__$0399e8fdab399fb8f200f3895472e3787c$__90638be1e5239060240161074f565b6040516322b2b60760e01b815260009073__$0399e8fdab399fb8f200f3895472e3787c$__906322b2b60790610ced9060fb90889088908890600401612c37565b604051631ce9046f60e01b815260fb60048201526024810182905260009073__$0399e8fdab399fb8f200f3895472e3787c$__90631ce9046f90604401602060405180830381865af4158015611b01573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f39190612770565b604051638cc122bb60e01b815260fb60048201526024810182905260609073__$0399e8fdab399fb8f200f3895472e3787c$__90638cc122bb90604401600060405180830381865af4158015611b7f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108f39190810190612805565b611baf611ce5565b6001600160a01b038116611c145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107c8565b611c1d81611dde565b50565b600080611c2c85610c26565b90506000611c3985610c26565b604051632e4be8d760e21b815260fb600482015260ff8085166024830152821660448201526064810186905290915073__$0399e8fdab399fb8f200f3895472e3787c$__9063b92fa35c90608401610db2565b600260c95403611cde5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107c8565b600260c955565b6033546001600160a01b031633146107165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107c8565b600160c955565b60655460ff16156107165760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107c8565b611d94611f75565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611e38611d46565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611dc13390565b600054610100900460ff16611e945760405162461bcd60e51b81526004016107c890612c64565b611e9c611fbe565b611ea4611fe5565b610716612015565b600054610100900460ff16611ed35760405162461bcd60e51b81526004016107c890612c64565b610716612048565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116611f705760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b60448201526064016107c8565b919050565b60655460ff166107165760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107c8565b600054610100900460ff166107165760405162461bcd60e51b81526004016107c890612c64565b600054610100900460ff1661200c5760405162461bcd60e51b81526004016107c890612c64565b61071633611dde565b600054610100900460ff1661203c5760405162461bcd60e51b81526004016107c890612c64565b6065805460ff19169055565b600054610100900460ff16611d3f5760405162461bcd60e51b81526004016107c890612c64565b8280548282559060005260206000209081019282156120c4579160200282015b828111156120c457825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061208f565b506120d092915061210f565b5090565b8280548282559060005260206000209081019282156120c4579160200282015b828111156120c45782518255916020019190600101906120f4565b5b808211156120d05760008155600101612110565b60008083601f84011261213657600080fd5b50813567ffffffffffffffff81111561214e57600080fd5b6020830191508360208260051b850101111561216957600080fd5b9250929050565b6000806000806060858703121561218657600080fd5b84359350602085013567ffffffffffffffff8111156121a457600080fd5b6121b087828801612124565b9598909750949560400135949350505050565b6020808252825182820181905260009190848201906040850190845b818110156121fb578351835292840192918401916001016121df565b50909695505050505050565b803560ff81168114611f7057600080fd5b6000806040838503121561222b57600080fd5b8235915061223b60208401612207565b90509250929050565b60006020828403121561225657600080fd5b5035919050565b6000806000806080858703121561227357600080fd5b8435935061228360208601612207565b93969395505050506040820135916060013590565b600080600080606085870312156122ae57600080fd5b843567ffffffffffffffff8111156122c557600080fd5b6122d187828801612124565b90989097506020870135966040013595509350505050565b6001600160a01b0381168114611c1d57600080fd5b8035611f70816122e9565b600080600080600060a0868803121561232157600080fd5b853594506020860135612333816122e9565b93506040860135612343816122e9565b94979396509394606081013594506080013592915050565b6000806040838503121561236e57600080fd5b50508035926020909101359150565b60006020828403121561238f57600080fd5b8135610d31816122e9565b6000806000606084860312156123af57600080fd5b6123b884612207565b92506123c660208501612207565b9150604084013590509250925092565b6000806000606084860312156123eb57600080fd5b83356123f6816122e9565b92506020840135612406816122e9565b929592945050506040919091013590565b60006020828403121561242957600080fd5b6108f082612207565b600080600080600060a0868803121561244a57600080fd5b61245386612207565b945061246160208701612207565b94979496505050506040830135926060810135926080909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156124be576124be61247f565b604052919050565b600067ffffffffffffffff8211156124e0576124e061247f565b5060051b60200190565b600082601f8301126124fb57600080fd5b8135602061251061250b836124c6565b612495565b82815260059290921b8401810191818101908684111561252f57600080fd5b8286015b84811015612553578035612546816122e9565b8352918301918301612533565b509695505050505050565b600082601f83011261256f57600080fd5b8135602061257f61250b836124c6565b82815260059290921b8401810191818101908684111561259e57600080fd5b8286015b84811015612553576125b381612207565b83529183019183016125a2565b600082601f8301126125d157600080fd5b813567ffffffffffffffff8111156125eb576125eb61247f565b6125fe601f8201601f1916602001612495565b81815284602083860101111561261357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b03121561264d57600080fd5b883567ffffffffffffffff8082111561266557600080fd5b6126718c838d016124ea565b995060208b013591508082111561268757600080fd5b6126938c838d0161255e565b985060408b01359150808211156126a957600080fd5b6126b58c838d016125c0565b975060608b01359150808211156126cb57600080fd5b506126d88b828c016125c0565b9550506080890135935060a0890135925060c089013591506126fc60e08a016122fe565b90509295985092959890939650565b8015158114611c1d57600080fd5b60008060006040848603121561272e57600080fd5b833567ffffffffffffffff81111561274557600080fd5b61275186828701612124565b90945092505060208401356127658161270b565b809150509250925092565b60006020828403121561278257600080fd5b5051919050565b60208082526010908201526f111958591b1a5b99481b9bdd081b595d60821b604082015260600190565b81835260006001600160fb1b038311156127cc57600080fd5b8260051b80836020870137939093016020019392505050565b848152836020820152606060408201526000610df36060830184866127b3565b6000602080838503121561281857600080fd5b825167ffffffffffffffff81111561282f57600080fd5b8301601f8101851361284057600080fd5b805161284e61250b826124c6565b81815260059190911b8201830190838101908783111561286d57600080fd5b928401925b8284101561288b57835182529284019290840190612872565b979650505050505050565b8481526060602082015260006128b06060830185876127b3565b905082604083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156108f3576108f36128d7565b808201808211156108f3576108f36128d7565b60ff81811683821601908111156108f3576108f36128d7565b60ff82811682821603908111156108f3576108f36128d7565b600181815b80851115612980578160001904821115612966576129666128d7565b8085161561297357918102915b93841c939080029061294a565b509250929050565b600082612997575060016108f3565b816129a4575060006108f3565b81600181146129ba57600281146129c4576129e0565b60019150506108f3565b60ff8411156129d5576129d56128d7565b50506001821b6108f3565b5060208310610133831016604e8410600b8410161715612a03575081810a6108f3565b612a0d8383612945565b8060001904821115612a2157612a216128d7565b029392505050565b60006108f08383612988565b6000815180845260005b81811015612a5b57602081850181015186830182015201612a3f565b506000602082860101526020601f19601f83011685010191505092915050565b604081526000612a8e6040830185612a35565b8281036020840152610ba08185612a35565b600060208284031215612ab257600080fd5b8151610d318161270b565b80820281158282048414176108f3576108f36128d7565b6000815480845260208085019450836000528060002060005b83811015612b125781546001600160a01b031687529582019560019182019101612aed565b509495945050505050565b6000815480845260208085019450836000528060002060005b83811015612b1257815487529582019560019182019101612b36565b60408152825460408201526001830154606082015260028301546080820152600383015460a0820152600483015460c0820152600583015460e08201526000612ba560068501546001600160a01b031690565b6001600160a01b03166101008301526101606101208301819052612bd06101a0840160078701612ad4565b603f198085830301610140860152612beb8260088901612b1d565b9150808583030183860152612c038260098901612b1d565b925080858403016101808601525050612c1f81600a8701612b1d565b915050610d3160208301846001600160a01b03169052565b848152606060208201526000612c516060830185876127b3565b9050821515604083015295945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea2646970667358221220bc494f753dff61ed97f2aa1ef656c8389762531ff5e49618a4f52097d147716064736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1F9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x10D JUMPI DUP1 PUSH4 0xC4DB7FA0 GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xE6AB2806 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xE6AB2806 EQ PUSH2 0x5D1 JUMPI DUP1 PUSH4 0xEF0A712F EQ PUSH2 0x5F1 JUMPI DUP1 PUSH4 0xF2FAD2B6 EQ PUSH2 0x611 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x631 JUMPI DUP1 PUSH4 0xF9A15FB9 EQ PUSH2 0x651 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC4DB7FA0 EQ PUSH2 0x57F JUMPI DUP1 PUSH4 0xD460F0A2 EQ PUSH2 0x594 JUMPI DUP1 PUSH4 0xD46300FD EQ PUSH2 0x5A7 JUMPI DUP1 PUSH4 0xE25AA5FA EQ PUSH2 0x5BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x91695586 GT PUSH2 0xDC JUMPI DUP1 PUSH4 0x91695586 EQ PUSH2 0x4FF JUMPI DUP1 PUSH4 0x91CEB3EB EQ PUSH2 0x51F JUMPI DUP1 PUSH4 0xA95B089F EQ PUSH2 0x53F JUMPI DUP1 PUSH4 0xB28CB6DC EQ PUSH2 0x55F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x48C JUMPI DUP1 PUSH4 0x84CDD9BC EQ PUSH2 0x4A1 JUMPI DUP1 PUSH4 0x8BEB60B6 EQ PUSH2 0x4C1 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x4E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5428C117 GT PUSH2 0x190 JUMPI DUP1 PUSH4 0x66C0BD24 GT PUSH2 0x15F JUMPI DUP1 PUSH4 0x66C0BD24 EQ PUSH2 0x3CD JUMPI DUP1 PUSH4 0x6B1DC08B EQ PUSH2 0x3FF JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x41F JUMPI DUP1 PUSH4 0x7F41E7EF EQ PUSH2 0x434 JUMPI DUP1 PUSH4 0x82B86600 EQ PUSH2 0x454 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5428C117 EQ PUSH2 0x2FF JUMPI DUP1 PUSH4 0x593D132C EQ PUSH2 0x312 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x332 JUMPI DUP1 PUSH4 0x5FD65F0F EQ PUSH2 0x355 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34E19907 GT PUSH2 0x1CC JUMPI DUP1 PUSH4 0x34E19907 EQ PUSH2 0x28A JUMPI DUP1 PUSH4 0x3E3A1560 EQ PUSH2 0x2AA JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x2CA JUMPI DUP1 PUSH4 0x4D49E87D EQ PUSH2 0x2DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x419B45A EQ PUSH2 0x1FE JUMPI DUP1 PUSH4 0xBA81959 EQ PUSH2 0x215 JUMPI DUP1 PUSH4 0x31CD52B0 EQ PUSH2 0x23D JUMPI DUP1 PUSH4 0x342A87A1 EQ PUSH2 0x26A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x20A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x671 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x718 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x258 CALLDATASIZE PUSH1 0x4 PUSH2 0x2170 JUMP JUMPDEST PUSH2 0x795 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x234 SWAP2 SWAP1 PUSH2 0x21C3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x276 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x285 CALLDATASIZE PUSH1 0x4 PUSH2 0x2218 JUMP JUMPDEST PUSH2 0x869 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x296 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x2A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x2244 JUMP JUMPDEST PUSH2 0x8F9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x2C5 CALLDATASIZE PUSH1 0x4 PUSH2 0x225D JUMP JUMPDEST PUSH2 0x96F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0xA2E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x2FA CALLDATASIZE PUSH1 0x4 PUSH2 0x2298 JUMP JUMPDEST PUSH2 0xA3E JUMP JUMPDEST PUSH2 0x22A PUSH2 0x30D CALLDATASIZE PUSH1 0x4 PUSH2 0x2309 JUMP JUMPDEST PUSH2 0xAAF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x31E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x32D CALLDATASIZE PUSH1 0x4 PUSH2 0x235B JUMP JUMPDEST PUSH2 0xBA9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x65 SLOAD PUSH1 0xFF AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x361 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xFB SLOAD PUSH1 0xFC SLOAD PUSH1 0xFD SLOAD PUSH1 0xFE SLOAD PUSH1 0xFF SLOAD PUSH2 0x100 SLOAD PUSH2 0x101 SLOAD PUSH2 0x38F SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP8 DUP9 MSTORE PUSH1 0x20 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x60 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3ED PUSH2 0x3E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x237D JUMP JUMPDEST PUSH2 0xC26 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x40B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x41A CALLDATASIZE PUSH1 0x4 PUSH2 0x239A JUMP JUMPDEST PUSH2 0xC9E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0xD38 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x44F CALLDATASIZE PUSH1 0x4 PUSH2 0x23D6 JUMP JUMPDEST PUSH2 0xD4A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x474 PUSH2 0x46F CALLDATASIZE PUSH1 0x4 PUSH2 0x2417 JUMP JUMPDEST PUSH2 0xDFD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x498 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0xE77 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x4BC CALLDATASIZE PUSH1 0x4 PUSH2 0x2298 JUMP JUMPDEST PUSH2 0xE87 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x4DC CALLDATASIZE PUSH1 0x4 PUSH2 0x2244 JUMP JUMPDEST PUSH2 0xEF8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x474 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x50B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x51A CALLDATASIZE PUSH1 0x4 PUSH2 0x2432 JUMP JUMPDEST PUSH2 0xF3F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x53A CALLDATASIZE PUSH1 0x4 PUSH2 0x2417 JUMP JUMPDEST PUSH2 0x1012 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x54B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x55A CALLDATASIZE PUSH1 0x4 PUSH2 0x239A JUMP JUMPDEST PUSH2 0x1089 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x56B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x57A CALLDATASIZE PUSH1 0x4 PUSH2 0x2630 JUMP JUMPDEST PUSH2 0x10DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x18DE JUMP JUMPDEST PUSH2 0x22A PUSH2 0x5A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x2309 JUMP JUMPDEST PUSH2 0x194B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x19F0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x1A2B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x5EC CALLDATASIZE PUSH1 0x4 PUSH2 0x2719 JUMP JUMPDEST PUSH2 0x1A66 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x60C CALLDATASIZE PUSH1 0x4 PUSH2 0x2244 JUMP JUMPDEST PUSH2 0x1AA7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x61D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x62C CALLDATASIZE PUSH1 0x4 PUSH2 0x2244 JUMP JUMPDEST PUSH2 0x1B25 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x213 PUSH2 0x64C CALLDATASIZE PUSH1 0x4 PUSH2 0x237D JUMP JUMPDEST PUSH2 0x1BA7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x65D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x66C CALLDATASIZE PUSH1 0x4 PUSH2 0x23D6 JUMP JUMPDEST PUSH2 0x1C20 JUMP JUMPDEST PUSH2 0x679 PUSH2 0x1C8C JUMP JUMPDEST PUSH2 0x681 PUSH2 0x1CE5 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x9CBD2406 PUSH1 0xFB PUSH2 0x6AF PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x708 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x716 PUSH1 0x1 PUSH1 0xC9 SSTORE JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xF43DEE53 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0x0 SWAP1 PUSH4 0xF43DEE53 SWAP1 PUSH1 0x24 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x76C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x790 SWAP2 SWAP1 PUSH2 0x2770 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x79F PUSH2 0x1C8C JUMP JUMPDEST PUSH2 0x7A7 PUSH2 0x1D46 JUMP JUMPDEST DUP2 DUP1 TIMESTAMP GT ISZERO PUSH2 0x7D1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2789 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1BEEC943 PUSH1 0xE2 SHL DUP2 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x6FBB250C SWAP1 PUSH2 0x80F SWAP1 PUSH1 0xFB SWAP1 DUP11 SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x27E5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x82C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x854 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2805 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x861 PUSH1 0x1 PUSH1 0xC9 SSTORE JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x84EEEF27 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xFF DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0x0 SWAP1 PUSH4 0x84EEEF27 SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x8CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8F0 SWAP2 SWAP1 PUSH2 0x2770 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x901 PUSH2 0x1CE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2CECCCB5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x59D9996A SWAP1 PUSH1 0x44 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x954 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x968 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x979 PUSH2 0x1C8C JUMP JUMPDEST PUSH2 0x981 PUSH2 0x1D46 JUMP JUMPDEST DUP2 DUP1 TIMESTAMP GT ISZERO PUSH2 0x9A2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2789 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2B8FFBB7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0xFF DUP7 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0xAE3FEEDC SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xA0A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x854 SWAP2 SWAP1 PUSH2 0x2770 JUMP JUMPDEST PUSH2 0xA36 PUSH2 0x1CE5 JUMP JUMPDEST PUSH2 0x716 PUSH2 0x1D8C JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA48 PUSH2 0x1C8C JUMP JUMPDEST PUSH2 0xA50 PUSH2 0x1D46 JUMP JUMPDEST DUP2 DUP1 TIMESTAMP GT ISZERO PUSH2 0xA71 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2789 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33A43F95 PUSH1 0xE1 SHL DUP2 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x67487F2A SWAP1 PUSH2 0x9ED SWAP1 PUSH1 0xFB SWAP1 DUP11 SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x2896 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAB9 PUSH2 0x1C8C JUMP JUMPDEST PUSH2 0xAC1 PUSH2 0x1D46 JUMP JUMPDEST DUP2 DUP1 TIMESTAMP GT ISZERO PUSH2 0xAE2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2789 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAED DUP8 PUSH2 0xC26 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xAFA DUP8 PUSH2 0xC26 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x703C02D5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xFF DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0x84 DUP2 ADD DUP9 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH20 0x0 SWAP1 PUSH4 0xE07805AA SWAP1 PUSH1 0xA4 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xB6D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB91 SWAP2 SWAP1 PUSH2 0x2770 JUMP JUMPDEST SWAP4 POP POP POP POP PUSH2 0xBA0 PUSH1 0x1 PUSH1 0xC9 SSTORE JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xBB1 PUSH2 0x1CE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3F1E1061 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0xFC784184 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xC1E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH2 0x106 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH1 0xFF SWAP1 SWAP2 AND SWAP1 PUSH2 0xC51 DUP3 PUSH2 0xDFD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x8F3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x151BDAD95B88191BD95CC81B9BDD08195E1A5CDD PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2E4BE8D7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xFF DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH20 0x0 SWAP1 PUSH4 0xB92FA35C SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xD0A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD2E SWAP2 SWAP1 PUSH2 0x2770 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD40 PUSH2 0x1CE5 JUMP JUMPDEST PUSH2 0x716 PUSH1 0x0 PUSH2 0x1DDE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xD56 DUP6 PUSH2 0xC26 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xD63 DUP6 PUSH2 0xC26 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F4998AD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xFF DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH20 0x0 SWAP1 PUSH4 0x2F4998AD SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xDCF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDF3 SWAP2 SWAP1 PUSH2 0x2770 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x102 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF DUP4 AND LT PUSH2 0xE44 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x4F7574206F662072616E6765 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH2 0x102 DUP1 SLOAD PUSH1 0xFF DUP5 AND SWAP1 DUP2 LT PUSH2 0xE5C JUMPI PUSH2 0xE5C PUSH2 0x28C1 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xE7F PUSH2 0x1CE5 JUMP JUMPDEST PUSH2 0x716 PUSH2 0x1E30 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE91 PUSH2 0x1C8C JUMP JUMPDEST PUSH2 0xE99 PUSH2 0x1D46 JUMP JUMPDEST DUP2 DUP1 TIMESTAMP GT ISZERO PUSH2 0xEBA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2789 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x77B83D3 PUSH1 0xE4 SHL DUP2 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x77B83D30 SWAP1 PUSH2 0x9ED SWAP1 PUSH1 0xFB SWAP1 DUP11 SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x2896 JUMP JUMPDEST PUSH2 0xF00 PUSH2 0x1CE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8BBAA23 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x8BBAA23 SWAP1 PUSH1 0x44 ADD PUSH2 0x93C JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF49 PUSH2 0x1C8C JUMP JUMPDEST PUSH2 0xF51 PUSH2 0x1D46 JUMP JUMPDEST DUP2 DUP1 TIMESTAMP GT ISZERO PUSH2 0xF72 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2789 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xF2042939 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xFF DUP1 DUP10 AND PUSH1 0x24 DUP4 ADD MSTORE DUP8 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x84 DUP2 ADD DUP6 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0xF2042939 SWAP1 PUSH1 0xA4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xFE1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1005 SWAP2 SWAP1 PUSH2 0x2770 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xBA0 PUSH1 0x1 PUSH1 0xC9 SSTORE JUMP JUMPDEST PUSH2 0x102 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF DUP4 AND LT PUSH2 0x105F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x496E646578206F7574206F662072616E6765 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH2 0x104 DUP1 SLOAD PUSH1 0xFF DUP5 AND SWAP1 DUP2 LT PUSH2 0x1077 JUMPI PUSH2 0x1077 PUSH2 0x28C1 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F4998AD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xFF DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH20 0x0 SWAP1 PUSH4 0x2F4998AD SWAP1 PUSH1 0x84 ADD PUSH2 0xCED JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x10FC JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x1116 JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1116 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x1179 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x119C JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x11A4 PUSH2 0x1E6D JUMP JUMPDEST PUSH2 0x11AC PUSH2 0x1EAC JUMP JUMPDEST DUP9 MLOAD PUSH2 0x11BA PUSH1 0x1 PUSH1 0x2 PUSH2 0x28ED JUMP JUMPDEST DUP2 GT PUSH2 0x1212 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5F706F6F6C6564546F6B656E732E6C656E67746820696E73756666696369656E PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0xFA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH2 0x121E PUSH1 0x10 PUSH1 0x1 PUSH2 0x2900 JUMP JUMPDEST DUP2 LT PUSH2 0x126C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5F706F6F6C6564546F6B656E732E6C656E67746820746F6F206C617267650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST DUP9 MLOAD DUP2 EQ PUSH2 0x12BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5F706F6F6C6564546F6B656E7320646563696D616C73206D69736D6174636800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x0 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x12D8 JUMPI PUSH2 0x12D8 PUSH2 0x247F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1301 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x157F JUMPI DUP1 ISZERO PUSH2 0x13E4 JUMPI PUSH2 0x106 PUSH1 0x0 DUP14 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x132C JUMPI PUSH2 0x132C PUSH2 0x28C1 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x13A5 JUMPI POP DUP12 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x136D JUMPI PUSH2 0x136D PUSH2 0x28C1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP13 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1391 JUMPI PUSH2 0x1391 PUSH2 0x28C1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH2 0x13E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x4475706C696361746520746F6B656E73 PUSH1 0x80 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP13 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1401 JUMPI PUSH2 0x1401 PUSH2 0x28C1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x145F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546865203020616464726573732069736E277420616E204552432D3230000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH2 0x146B PUSH1 0x12 PUSH1 0x1 PUSH2 0x2913 JUMP JUMPDEST PUSH1 0xFF AND DUP12 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1480 JUMPI PUSH2 0x1480 PUSH2 0x28C1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xFF AND LT PUSH2 0x14D8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E20646563696D616C732065786365656473206D6178000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST DUP11 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x14EA JUMPI PUSH2 0x14EA PUSH2 0x28C1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x12 PUSH2 0x14FE SWAP2 SWAP1 PUSH2 0x292C JUMP JUMPDEST PUSH2 0x150C SWAP1 PUSH1 0xFF AND PUSH1 0xA PUSH2 0x2A29 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x151E JUMPI PUSH2 0x151E PUSH2 0x28C1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x106 PUSH1 0x0 DUP15 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1542 JUMPI PUSH2 0x1542 PUSH2 0x28C1 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 ADD PUSH2 0x1307 JUMP JUMPDEST POP PUSH3 0xF4240 DUP8 LT PUSH2 0x15C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x5F612065786365656473206D6178696D756D PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH4 0x5F5E100 DUP7 LT PUSH2 0x1611 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x5F6665652065786365656473206D6178696D756D PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH5 0x2540BE400 DUP6 LT PUSH2 0x1665 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5F61646D696E4665652065786365656473206D6178696D756D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1670 DUP6 PUSH2 0x1EDB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x266C45BB PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x4CD88B76 SWAP1 PUSH2 0x16A1 SWAP1 DUP14 SWAP1 DUP14 SWAP1 PUSH1 0x4 ADD PUSH2 0x2A7B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16E4 SWAP2 SWAP1 PUSH2 0x2AA0 JUMP JUMPDEST PUSH2 0x1730 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x636F756C64206E6F7420696E6974206C70546F6B656E20636C6F6E6500000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH2 0x101 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE DUP12 MLOAD PUSH2 0x1760 SWAP1 PUSH2 0x102 SWAP1 PUSH1 0x20 DUP16 ADD SWAP1 PUSH2 0x206F JUMP JUMPDEST POP DUP2 MLOAD PUSH2 0x1775 SWAP1 PUSH2 0x103 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH2 0x20D4 JUMP JUMPDEST POP DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x178F JUMPI PUSH2 0x178F PUSH2 0x247F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x17B8 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP DUP1 MLOAD PUSH2 0x17CE SWAP2 PUSH2 0x104 SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x20D4 JUMP JUMPDEST POP DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x17E8 JUMPI PUSH2 0x17E8 PUSH2 0x247F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1811 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP DUP1 MLOAD PUSH2 0x1827 SWAP2 PUSH2 0x105 SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x20D4 JUMP JUMPDEST POP PUSH2 0x1833 PUSH1 0x64 DUP10 PUSH2 0x2ABD JUMP JUMPDEST PUSH1 0xFB SSTORE PUSH2 0x1841 PUSH1 0x64 DUP10 PUSH2 0x2ABD JUMP JUMPDEST PUSH1 0xFC SSTORE PUSH1 0xFF DUP8 SWAP1 SSTORE PUSH2 0x100 DUP7 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x8BA0C15F86C46B5773BEB451B4D8D5744F7642AB1004C0A7E59E215710FB3ABA SWAP1 PUSH2 0x1882 SWAP1 PUSH1 0xFB SWAP1 CALLER SWAP1 PUSH2 0x2B52 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP DUP1 ISZERO PUSH2 0x18D3 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x18E6 PUSH2 0x1CE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE5B994C5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0xE5B994C5 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1931 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1945 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1955 PUSH2 0x1C8C JUMP JUMPDEST PUSH2 0x195D PUSH2 0x1D46 JUMP JUMPDEST DUP2 DUP1 TIMESTAMP GT ISZERO PUSH2 0x197E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2789 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1989 DUP8 PUSH2 0xC26 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1996 DUP8 PUSH2 0xC26 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xF2042939 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xFF DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0x84 DUP2 ADD DUP9 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH20 0x0 SWAP1 PUSH4 0xF2042939 SWAP1 PUSH1 0xA4 ADD PUSH2 0xB50 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1158DAFB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0x0 SWAP1 PUSH4 0x22B1B5F6 SWAP1 PUSH1 0x24 ADD PUSH2 0x74F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8BE1E523 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0x0 SWAP1 PUSH4 0x8BE1E523 SWAP1 PUSH1 0x24 ADD PUSH2 0x74F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x22B2B607 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0x0 SWAP1 PUSH4 0x22B2B607 SWAP1 PUSH2 0xCED SWAP1 PUSH1 0xFB SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x2C37 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1CE9046F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH20 0x0 SWAP1 PUSH4 0x1CE9046F SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1B01 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8F3 SWAP2 SWAP1 PUSH2 0x2770 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8CC122BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 SWAP1 PUSH20 0x0 SWAP1 PUSH4 0x8CC122BB SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1B7F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x8F3 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2805 JUMP JUMPDEST PUSH2 0x1BAF PUSH2 0x1CE5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1C14 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH2 0x1C1D DUP2 PUSH2 0x1DDE JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1C2C DUP6 PUSH2 0xC26 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1C39 DUP6 PUSH2 0xC26 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2E4BE8D7 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0xFB PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xFF DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH20 0x0 SWAP1 PUSH4 0xB92FA35C SWAP1 PUSH1 0x84 ADD PUSH2 0xDB2 JUMP JUMPDEST PUSH1 0x2 PUSH1 0xC9 SLOAD SUB PUSH2 0x1CDE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x2 PUSH1 0xC9 SSTORE JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x716 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xC9 SSTORE JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x716 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH2 0x1D94 PUSH2 0x1F75 JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x1E38 PUSH2 0x1D46 JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1DC1 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1E94 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2C64 JUMP JUMPDEST PUSH2 0x1E9C PUSH2 0x1FBE JUMP JUMPDEST PUSH2 0x1EA4 PUSH2 0x1FE5 JUMP JUMPDEST PUSH2 0x716 PUSH2 0x2015 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1ED3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2C64 JUMP JUMPDEST PUSH2 0x716 PUSH2 0x2048 JUMP JUMPDEST PUSH1 0x0 PUSH23 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000 DUP3 PUSH1 0x60 SHL PUSH1 0xE8 SHR OR PUSH1 0x0 MSTORE PUSH15 0x5AF43D82803E903D91602B57FD5BF3 DUP3 PUSH1 0x78 SHL OR PUSH1 0x20 MSTORE PUSH1 0x37 PUSH1 0x9 PUSH1 0x0 CREATE SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1F70 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x115490CC4C4D8DCE8818DC99585D194819985A5B1959 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0xFF AND PUSH2 0x716 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x716 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2C64 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x200C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2C64 JUMP JUMPDEST PUSH2 0x716 CALLER PUSH2 0x1DDE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x203C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2C64 JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1D3F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C8 SWAP1 PUSH2 0x2C64 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x20C4 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x20C4 JUMPI DUP3 MLOAD DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x208F JUMP JUMPDEST POP PUSH2 0x20D0 SWAP3 SWAP2 POP PUSH2 0x210F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x20C4 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x20C4 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x20F4 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x20D0 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2110 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x214E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x2169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x21A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x21B0 DUP8 DUP3 DUP9 ADD PUSH2 0x2124 JUMP JUMPDEST SWAP6 SWAP9 SWAP1 SWAP8 POP SWAP5 SWAP6 PUSH1 0x40 ADD CALLDATALOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x21FB JUMPI DUP4 MLOAD DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x21DF JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1F70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x222B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x223B PUSH1 0x20 DUP5 ADD PUSH2 0x2207 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2273 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH2 0x2283 PUSH1 0x20 DUP7 ADD PUSH2 0x2207 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x22AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x22C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22D1 DUP8 DUP3 DUP9 ADD PUSH2 0x2124 JUMP JUMPDEST SWAP1 SWAP9 SWAP1 SWAP8 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP7 PUSH1 0x40 ADD CALLDATALOAD SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1C1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1F70 DUP2 PUSH2 0x22E9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2321 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x2333 DUP2 PUSH2 0x22E9 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x2343 DUP2 PUSH2 0x22E9 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP4 SWAP5 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP5 POP PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x236E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x238F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xD31 DUP2 PUSH2 0x22E9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x23AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x23B8 DUP5 PUSH2 0x2207 JUMP JUMPDEST SWAP3 POP PUSH2 0x23C6 PUSH1 0x20 DUP6 ADD PUSH2 0x2207 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x23EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x23F6 DUP2 PUSH2 0x22E9 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2406 DUP2 PUSH2 0x22E9 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2429 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8F0 DUP3 PUSH2 0x2207 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x244A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2453 DUP7 PUSH2 0x2207 JUMP JUMPDEST SWAP5 POP PUSH2 0x2461 PUSH1 0x20 DUP8 ADD PUSH2 0x2207 JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x24BE JUMPI PUSH2 0x24BE PUSH2 0x247F JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x24E0 JUMPI PUSH2 0x24E0 PUSH2 0x247F JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x24FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x2510 PUSH2 0x250B DUP4 PUSH2 0x24C6 JUMP JUMPDEST PUSH2 0x2495 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x252F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2553 JUMPI DUP1 CALLDATALOAD PUSH2 0x2546 DUP2 PUSH2 0x22E9 JUMP JUMPDEST DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x2533 JUMP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x256F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x257F PUSH2 0x250B DUP4 PUSH2 0x24C6 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x259E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2553 JUMPI PUSH2 0x25B3 DUP2 PUSH2 0x2207 JUMP JUMPDEST DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x25A2 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x25D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x25EB JUMPI PUSH2 0x25EB PUSH2 0x247F JUMP JUMPDEST PUSH2 0x25FE PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x2495 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x2613 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x264D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2665 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2671 DUP13 DUP4 DUP14 ADD PUSH2 0x24EA JUMP JUMPDEST SWAP10 POP PUSH1 0x20 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2687 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2693 DUP13 DUP4 DUP14 ADD PUSH2 0x255E JUMP JUMPDEST SWAP9 POP PUSH1 0x40 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26B5 DUP13 DUP4 DUP14 ADD PUSH2 0x25C0 JUMP JUMPDEST SWAP8 POP PUSH1 0x60 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26D8 DUP12 DUP3 DUP13 ADD PUSH2 0x25C0 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x80 DUP10 ADD CALLDATALOAD SWAP4 POP PUSH1 0xA0 DUP10 ADD CALLDATALOAD SWAP3 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD SWAP2 POP PUSH2 0x26FC PUSH1 0xE0 DUP11 ADD PUSH2 0x22FE JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1C1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x272E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2745 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2751 DUP7 DUP3 DUP8 ADD PUSH2 0x2124 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2765 DUP2 PUSH2 0x270B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2782 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH16 0x111958591B1A5B99481B9BDD081B595D PUSH1 0x82 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xFB SHL SUB DUP4 GT ISZERO PUSH2 0x27CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x5 SHL DUP1 DUP4 PUSH1 0x20 DUP8 ADD CALLDATACOPY SWAP4 SWAP1 SWAP4 ADD PUSH1 0x20 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xDF3 PUSH1 0x60 DUP4 ADD DUP5 DUP7 PUSH2 0x27B3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2818 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x282F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x1F DUP2 ADD DUP6 SGT PUSH2 0x2840 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x284E PUSH2 0x250B DUP3 PUSH2 0x24C6 JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x5 SWAP2 SWAP1 SWAP2 SHL DUP3 ADD DUP4 ADD SWAP1 DUP4 DUP2 ADD SWAP1 DUP8 DUP4 GT ISZERO PUSH2 0x286D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 DUP5 ADD SWAP3 JUMPDEST DUP3 DUP5 LT ISZERO PUSH2 0x288B JUMPI DUP4 MLOAD DUP3 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH2 0x2872 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x28B0 PUSH1 0x60 DUP4 ADD DUP6 DUP8 PUSH2 0x27B3 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x40 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x8F3 JUMPI PUSH2 0x8F3 PUSH2 0x28D7 JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x8F3 JUMPI PUSH2 0x8F3 PUSH2 0x28D7 JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP2 GT ISZERO PUSH2 0x8F3 JUMPI PUSH2 0x8F3 PUSH2 0x28D7 JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x8F3 JUMPI PUSH2 0x8F3 PUSH2 0x28D7 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x2980 JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x2966 JUMPI PUSH2 0x2966 PUSH2 0x28D7 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x2973 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x294A JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2997 JUMPI POP PUSH1 0x1 PUSH2 0x8F3 JUMP JUMPDEST DUP2 PUSH2 0x29A4 JUMPI POP PUSH1 0x0 PUSH2 0x8F3 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x29BA JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x29C4 JUMPI PUSH2 0x29E0 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x8F3 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x29D5 JUMPI PUSH2 0x29D5 PUSH2 0x28D7 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x8F3 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x2A03 JUMPI POP DUP2 DUP2 EXP PUSH2 0x8F3 JUMP JUMPDEST PUSH2 0x2A0D DUP4 DUP4 PUSH2 0x2945 JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x2A21 JUMPI PUSH2 0x2A21 PUSH2 0x28D7 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8F0 DUP4 DUP4 PUSH2 0x2988 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2A5B JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x2A3F JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2A8E PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x2A35 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xBA0 DUP2 DUP6 PUSH2 0x2A35 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2AB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xD31 DUP2 PUSH2 0x270B JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x8F3 JUMPI PUSH2 0x8F3 PUSH2 0x28D7 JUMP JUMPDEST PUSH1 0x0 DUP2 SLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP4 PUSH1 0x0 MSTORE DUP1 PUSH1 0x0 KECCAK256 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2B12 JUMPI DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2AED JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP4 PUSH1 0x0 MSTORE DUP1 PUSH1 0x0 KECCAK256 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2B12 JUMPI DUP2 SLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2B36 JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE DUP3 SLOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x4 DUP4 ADD SLOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x5 DUP4 ADD SLOAD PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2BA5 PUSH1 0x6 DUP6 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x100 DUP4 ADD MSTORE PUSH2 0x160 PUSH2 0x120 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x2BD0 PUSH2 0x1A0 DUP5 ADD PUSH1 0x7 DUP8 ADD PUSH2 0x2AD4 JUMP JUMPDEST PUSH1 0x3F NOT DUP1 DUP6 DUP4 SUB ADD PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x2BEB DUP3 PUSH1 0x8 DUP10 ADD PUSH2 0x2B1D JUMP JUMPDEST SWAP2 POP DUP1 DUP6 DUP4 SUB ADD DUP4 DUP7 ADD MSTORE PUSH2 0x2C03 DUP3 PUSH1 0x9 DUP10 ADD PUSH2 0x2B1D JUMP JUMPDEST SWAP3 POP DUP1 DUP6 DUP5 SUB ADD PUSH2 0x180 DUP7 ADD MSTORE POP POP PUSH2 0x2C1F DUP2 PUSH1 0xA DUP8 ADD PUSH2 0x2B1D JUMP JUMPDEST SWAP2 POP POP PUSH2 0xD31 PUSH1 0x20 DUP4 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2C51 PUSH1 0x60 DUP4 ADD DUP6 DUP8 PUSH2 0x27B3 JUMP JUMPDEST SWAP1 POP DUP3 ISZERO ISZERO PUSH1 0x40 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2B SWAP1 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 PUSH1 0x40 DUP3 ADD MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC 0x49 0x4F PUSH22 0x3DFF61ED97F2AA1EF656C8389762531FF5E49618A4F5 KECCAK256 SWAP8 0xD1 SELFBALANCE PUSH18 0x6064736F6C63430008110033000000000000 ","sourceMap":"1562:18174:91:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18382:110;;;;;;;;;;;;;:::i;:::-;;6616:98;;;;;;;;;;;;;:::i;:::-;;;160:25:181;;;148:2;133:18;6616:98:91;;;;;;;;16404:267;;;;;;;;;;-1:-1:-1;16404:267:91;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12360:241::-;;;;;;;;;;-1:-1:-1;12360:241:91;;;;;:::i;:::-;;:::i;18912:104::-;;;;;;;;;;-1:-1:-1;18912:104:91;;;;;:::i;:::-;;:::i;17162:305::-;;;;;;;;;;-1:-1:-1;17162:305:91;;;;;:::i;:::-;;:::i;1047:79:87:-;;;;;;;;;;;;;:::i;15602:252:91:-;;;;;;;;;;-1:-1:-1;15602:252:91;;;;;:::i;:::-;;:::i;14739:426::-;;;;;;:::i;:::-;;:::i;19346:120::-;;;;;;;;;;-1:-1:-1;19346:120:91;;;;;:::i;:::-;;:::i;1858:84:30:-;;;;;;;;;;-1:-1:-1;1928:7:30;;;;1858:84;;4646:14:181;;4639:22;4621:41;;4609:2;4594:18;1858:84:30;4481:187:181;2025:33:91;;;;;;;;;;-1:-1:-1;2025:33:91;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2025:33:91;;;;;;;5123:25:181;;;5179:2;5164:18;;5157:34;;;;5207:18;;;5200:34;;;;5265:2;5250:18;;5243:34;;;;5308:3;5293:19;;5286:35;5352:3;5337:19;;5330:35;-1:-1:-1;;;;;5402:32:181;5396:3;5381:19;;5374:61;5110:3;5095:19;2025:33:91;4791:650:181;7325:230:91;;;;;;;;;;-1:-1:-1;7325:230:91;;;;;:::i;:::-;;:::i;:::-;;;5870:4:181;5858:17;;;5840:36;;5828:2;5813:18;7325:230:91;5698:184:181;9160:217:91;;;;;;;;;;-1:-1:-1;9160:217:91;;;;;:::i;:::-;;:::i;2071:101:28:-;;;;;;;;;;;;;:::i;9690:328:91:-;;;;;;;;;;-1:-1:-1;9690:328:91;;;;;:::i;:::-;;:::i;6923:188::-;;;;;;;;;;-1:-1:-1;6923:188:91;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7040:32:181;;;7022:51;;7010:2;6995:18;6923:188:91;6860:219:181;893:75:87;;;;;;;;;;;;;:::i;17975:284:91:-;;;;;;;;;;-1:-1:-1;17975:284:91;;;;;:::i;:::-;;:::i;18659:108::-;;;;;;;;;;-1:-1:-1;18659:108:91;;;;;:::i;:::-;;:::i;1441:85:28:-;;;;;;;;;;-1:-1:-1;1513:6:28;;-1:-1:-1;;;;;1513:6:28;1441:85;;13388:287:91;;;;;;;;;;-1:-1:-1;13388:287:91;;;;;:::i;:::-;;:::i;7777:200::-;;;;;;;;;;-1:-1:-1;7777:200:91;;;;;:::i;:::-;;:::i;8642:211::-;;;;;;;;;;-1:-1:-1;8642:211:91;;;;;:::i;:::-;;:::i;3281:2573::-;;;;;;;;;;-1:-1:-1;3281:2573:91;;;;;:::i;:::-;;:::i;19561:74::-;;;;;;;;;;;;;:::i;13997:420::-;;;;;;:::i;:::-;;:::i;6361:93::-;;;;;;;;;;;;;:::i;8124:115::-;;;;;;;;;;;;;:::i;11371:181::-;;;;;;;;;;-1:-1:-1;11371:181:91;;;;;:::i;:::-;;:::i;12821:124::-;;;;;;;;;;-1:-1:-1;12821:124:91;;;;;:::i;:::-;;:::i;11846:162::-;;;;;;;;;;-1:-1:-1;11846:162:91;;;;;:::i;:::-;;:::i;2321:198:28:-;;;;;;;;;;-1:-1:-1;2321:198:28;;;;;:::i;:::-;;:::i;10330:336:91:-;;;;;;;;;;-1:-1:-1;10330:336:91;;;;;:::i;:::-;;:::i;18382:110::-;2505:21:31;:19;:21::i;:::-;1334:13:28::1;:11;:13::i;:::-;18449:29:91::2;;:11;18479:7;1513:6:28::0;;-1:-1:-1;;;;;1513:6:28;;1441:85;18479:7:91::2;18449:38;::::0;-1:-1:-1;;;;;;18449:38:91::2;::::0;;;;;;::::2;::::0;::::2;12537:25:181::0;;;;-1:-1:-1;;;;;12598:32:181;12578:18;;;12571:60;12510:18;;18449:38:91::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;2547:20:31::0;1787:1;3053:7;:22;2873:209;2547:20;18382:110:91:o;6616:98::-;6684:25;;-1:-1:-1;;;6684:25:91;;:11;:25;;;160::181;6662:7:91;;6684:23;;;;133:18:181;;6684:25:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6677:32;;6616:98;:::o;16404:267::-;16588:16;2505:21:31;:19;:21::i;:::-;1482:19:30::1;:17;:19::i;:::-;16569:8:91::2;6117;6098:15;:27;;6090:56;;;;-1:-1:-1::0;;;6090:56:91::2;;;;;;;:::i;:::-;;;;;;;;;16619:47:::3;::::0;-1:-1:-1;;;16619:47:91;;:27:::3;::::0;::::3;::::0;:47:::3;::::0;:11:::3;::::0;16647:6;;16655:10;;;;16619:47:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;::::0;;::::3;-1:-1:-1::0;;16619:47:91::3;::::0;::::3;;::::0;::::3;::::0;;;::::3;::::0;::::3;:::i;:::-;16612:54;;1511:1:30::2;2547:20:31::0;1787:1;3053:7;:22;2873:209;2547:20;16404:267:91;;;;;;:::o;12360:241::-;12534:62;;-1:-1:-1;;;12534:62:91;;:11;:62;;;15297:25:181;15338:18;;;15331:34;;;15413:4;15401:17;;15381:18;;;15374:45;12489:28:91;;12534:37;;;;15270:18:181;;12534:62:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12527:69;;12360:241;;;;;:::o;18912:104::-;1334:13:28;:11;:13::i;:::-;18977:34:91::1;::::0;-1:-1:-1;;;18977:34:91;;:11:::1;:34;::::0;::::1;15636:25:181::0;15677:18;;;15670:34;;;18977:22:91::1;::::0;::::1;::::0;15609:18:181;;18977:34:91::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18912:104:::0;:::o;17162:305::-;17369:7;2505:21:31;:19;:21::i;:::-;1482:19:30::1;:17;:19::i;:::-;17350:8:91::2;6117;6098:15;:27;;6090:56;;;;-1:-1:-1::0;;;6090:56:91::2;;;;;;;:::i;:::-;17391:71:::3;::::0;-1:-1:-1;;;17391:71:91;;:11:::3;:71;::::0;::::3;15974:25:181::0;16015:18;;;16008:34;;;16090:4;16078:17;;16058:18;;;16051:45;16112:18;;;16105:34;;;17391:35:91::3;::::0;::::3;::::0;15946:19:181;;17391:71:91::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1047:79:87:-:0;1334:13:28;:11;:13::i;:::-;1091:30:87::1;:28;:30::i;15602:252:91:-:0;15783:7;2505:21:31;:19;:21::i;:::-;1482:19:30::1;:17;:19::i;:::-;15764:8:91::2;6117;6098:15;:27;;6090:56;;;;-1:-1:-1::0;;;6090:56:91::2;;;;;;;:::i;:::-;15805:44:::3;::::0;-1:-1:-1;;;15805:44:91;;:24:::3;::::0;::::3;::::0;:44:::3;::::0;:11:::3;::::0;15830:7;;;;15839:9;;15805:44:::3;;;:::i;14739:426::-:0;14964:7;2505:21:31;:19;:21::i;:::-;1482:19:30::1;:17;:19::i;:::-;14945:8:91::2;6117;6098:15;:27;;6090:56;;;;-1:-1:-1::0;;;6090:56:91::2;;;;;;;:::i;:::-;14979:20:::3;15002:22;15016:7;15002:13;:22::i;:::-;14979:45;;15030:18;15051:23;15065:8;15051:13;:23::i;:::-;15087:73;::::0;-1:-1:-1;;;15087:73:91;;:11:::3;:73;::::0;::::3;16900:25:181::0;16973:4;16961:17;;;16941:18;;;16934:45;17015:17;;16995:18;;;16988:45;17049:18;;;17042:34;;;17092:19;;;17085:35;;;15030:44:91;;-1:-1:-1;15087:19:91::3;::::0;::::3;::::0;16872::181;;15087:73:91::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15080:80;;;;1511:1:30::2;2547:20:31::0;1787:1;3053:7;:22;2873:209;2547:20;14739:426:91;;;;;;;:::o;19346:120::-;1334:13:28;:11;:13::i;:::-;19423:38:91::1;::::0;-1:-1:-1;;;19423:38:91;;:11:::1;:38;::::0;::::1;17365:25:181::0;17406:18;;;17399:34;;;17449:18;;;17442:34;;;19423:17:91::1;::::0;::::1;::::0;17338:18:181;;19423:38:91::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19346:120:::0;;:::o;7325:230::-;-1:-1:-1;;;;;7427:26:91;;7400:5;7427:26;;;:12;:26;;;;;;7400:5;;7427:26;;;;;7475:15;7427:26;7475:8;:15::i;:::-;-1:-1:-1;;;;;7467:40:91;;7459:73;;;;-1:-1:-1;;;7459:73:91;;17689:2:181;7459:73:91;;;17671:21:181;17728:2;17708:18;;;17701:30;-1:-1:-1;;;17747:18:181;;;17740:50;17807:18;;7459:73:91;17487:344:181;9160:217:91;9310:62;;-1:-1:-1;;;9310:62:91;;:11;:62;;;18091:25:181;18164:4;18152:17;;;18132:18;;;18125:45;18206:17;;18186:18;;;18179:45;18240:18;;;18233:34;;;9288:7:91;;9310:28;;;;18063:19:181;;9310:62:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9303:69;;9160:217;;;;;;:::o;2071:101:28:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;9690:328:91:-:0;9825:7;9840:20;9863:22;9877:7;9863:13;:22::i;:::-;9840:45;;9891:18;9912:23;9926:8;9912:13;:23::i;:::-;9948:65;;-1:-1:-1;;;9948:65:91;;:11;:65;;;18091:25:181;18164:4;18152:17;;;18132:18;;;18125:45;18206:17;;18186:18;;;18179:45;18240:18;;;18233:34;;;9891:44:91;;-1:-1:-1;9948:25:91;;;;18063:19:181;;9948:65:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9941:72;9690:328;-1:-1:-1;;;;;;9690:328:91:o;6923:188::-;7014:24;:31;6984:6;;7006:39;;;;6998:64;;;;-1:-1:-1;;;6998:64:91;;18480:2:181;6998:64:91;;;18462:21:181;18519:2;18499:18;;;18492:30;-1:-1:-1;;;18538:18:181;;;18531:42;18590:18;;6998:64:91;18278:336:181;6998:64:91;7075:24;:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;7075:31:91;;6923:188;-1:-1:-1;;6923:188:91:o;893:75:87:-;1334:13:28;:11;:13::i;:::-;935:28:87::1;:26;:28::i;17975:284:91:-:0;18172:7;2505:21:31;:19;:21::i;:::-;1482:19:30::1;:17;:19::i;:::-;18153:8:91::2;6117;6098:15;:27;;6090:56;;;;-1:-1:-1::0;;;6090:56:91::2;;;;;;;:::i;:::-;18194:60:::3;::::0;-1:-1:-1;;;18194:60:91;;:36:::3;::::0;::::3;::::0;:60:::3;::::0;:11:::3;::::0;18231:7;;;;18240:13;;18194:60:::3;;;:::i;18659:108::-:0;1334:13:28;:11;:13::i;:::-;18726:36:91::1;::::0;-1:-1:-1;;;18726:36:91;;:11:::1;:36;::::0;::::1;15636:25:181::0;15677:18;;;15670:34;;;18726:23:91::1;::::0;::::1;::::0;15609:18:181;;18726:36:91::1;15430:280:181::0;13388:287:91;13591:7;2505:21:31;:19;:21::i;:::-;1482:19:30::1;:17;:19::i;:::-;13572:8:91::2;6117;6098:15;:27;;6090:56;;;;-1:-1:-1::0;;;6090:56:91::2;;;;;;;:::i;:::-;13613:57:::3;::::0;-1:-1:-1;;;13613:57:91;;:11:::3;:57;::::0;::::3;16900:25:181::0;16973:4;16961:17;;;16941:18;;;16934:45;17015:17;;16995:18;;;16988:45;17049:18;;;17042:34;;;17092:19;;;17085:35;;;13613:16:91::3;::::0;::::3;::::0;16872:19:181;;13613:57:91::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13606:64;;1511:1:30::2;2547:20:31::0;1787:1;3053:7;:22;2873:209;7777:200:91;7878:24;:31;7847:7;;7870:39;;;;7862:70;;;;-1:-1:-1;;;7862:70:91;;18953:2:181;7862:70:91;;;18935:21:181;18992:2;18972:18;;;18965:30;-1:-1:-1;;;19011:18:181;;;19004:48;19069:18;;7862:70:91;18751:342:181;7862:70:91;7945:20;:27;;;;;;;;;;;;:::i;:::-;;;;;;;;;7938:34;;7777:200;;;:::o;8642:211::-;8789:59;;-1:-1:-1;;;8789:59:91;;:11;:59;;;18091:25:181;18164:4;18152:17;;;18132:18;;;18125:45;18206:17;;18186:18;;;18179:45;18240:18;;;18233:34;;;8767:7:91;;8789:25;;;;18063:19:181;;8789:59:91;17836:437:181;3281:2573:91;3268:19:29;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:29;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:29;1476:19:36;:23;;;3376:66:29;;-1:-1:-1;3425:12:29;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:29;;19300:2:181;3314:201:29;;;19282:21:181;19339:2;19319:18;;;19312:30;19378:34;19358:18;;;19351:62;-1:-1:-1;;;19429:18:181;;;19422:44;19483:19;;3314:201:29;19098:410:181;3314:201:29;3525:12;:16;;-1:-1:-1;;3525:16:29;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:29;;;;;3551:65;3558:22:91::1;:20;:22::i;:::-;3586:24;:22;:24::i;:::-;3643:20:::0;;3748:35:::1;3782:1;2859::104;3748:35:91;:::i;:::-;3730:15;:53;3722:99;;;::::0;-1:-1:-1;;;3722:99:91;;19980:2:181;3722:99:91::1;::::0;::::1;19962:21:181::0;20019:2;19999:18;;;19992:30;20058:34;20038:18;;;20031:62;-1:-1:-1;;;20109:18:181;;;20102:31;20150:19;;3722:99:91::1;19778:397:181::0;3722:99:91::1;3853:35;2912:2:104;3887:1:91;3853:35;:::i;:::-;3835:15;:53;3827:96;;;::::0;-1:-1:-1;;;3827:96:91;;20512:2:181;3827:96:91::1;::::0;::::1;20494:21:181::0;20551:2;20531:18;;;20524:30;20590:32;20570:18;;;20563:60;20640:18;;3827:96:91::1;20310:354:181::0;3827:96:91::1;3956:8;:15;3937;:34;3929:78;;;::::0;-1:-1:-1;;;3929:78:91;;20871:2:181;3929:78:91::1;::::0;::::1;20853:21:181::0;20910:2;20890:18;;;20883:30;20949:33;20929:18;;;20922:61;21000:18;;3929:78:91::1;20669:355:181::0;3929:78:91::1;4014:37;4068:8;:15;4054:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;4054:30:91::1;;4014:70;;4096:9;4091:690;4115:15;4111:1;:19;4091:690;;;4146:6:::0;;4142:254:::1;;4263:12;:39;4284:13;4298:1;4284:16;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;4263:39:91::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;4263:39:91;;::::1;;:44:::0;:84;::::1;;;;4331:13;4345:1;4331:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;4311:36:91::1;:13;4325:1;4311:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;4311:36:91::1;;;4263:84;4244:143;;;::::0;-1:-1:-1;;;4244:143:91;;21231:2:181;4244:143:91::1;::::0;::::1;21213:21:181::0;21270:2;21250:18;;;21243:30;-1:-1:-1;;;21289:18:181;;;21282:46;21345:18;;4244:143:91::1;21029:340:181::0;4244:143:91::1;4448:1;-1:-1:-1::0;;;;;4411:39:91::1;4419:13;4433:1;4419:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;4411:39:91::1;::::0;4403:81:::1;;;::::0;-1:-1:-1;;;4403:81:91;;21576:2:181;4403:81:91::1;::::0;::::1;21558:21:181::0;21615:2;21595:18;;;21588:30;21654:31;21634:18;;;21627:59;21703:18;;4403:81:91::1;21374:353:181::0;4403:81:91::1;4514:37;3133:2:104;4550:1:91;4514:37;:::i;:::-;4500:51;;:8;4509:1;4500:11;;;;;;;;:::i;:::-;;;;;;;:51;;;4492:90;;;::::0;-1:-1:-1;;;4492:90:91;;22087:2:181;4492:90:91::1;::::0;::::1;22069:21:181::0;22126:2;22106:18;;;22099:30;22165:28;22145:18;;;22138:56;22211:18;;4492:90:91::1;21885:350:181::0;4492:90:91::1;4664:8;4673:1;4664:11;;;;;;;;:::i;:::-;;;;;;;3133:2:104;4628:47:91;;;;:::i;:::-;4616:60;::::0;4620:56:::1;;4616:2;:60;:::i;:::-;4590:20;4611:1;4590:23;;;;;;;;:::i;:::-;;;;;;:86;;;::::0;::::1;4732:1;4684:12;:39;4705:13;4719:1;4705:16;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;4684:39:91::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;4684:39:91;:50;;-1:-1:-1;;4684:50:91::1;;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;4763:3:91::1;4091:690;;;;4605:5:104;4853:2:91;:20;4845:51;;;::::0;-1:-1:-1;;;4845:51:91;;23972:2:181;4845:51:91::1;::::0;::::1;23954:21:181::0;24011:2;23991:18;;;23984:30;-1:-1:-1;;;24030:18:181;;;24023:48;24088:18;;4845:51:91::1;23770:342:181::0;4845:51:91::1;3647:3:104;4910:4:91;:29;4902:62;;;::::0;-1:-1:-1;;;4902:62:91;;24319:2:181;4902:62:91::1;::::0;::::1;24301:21:181::0;24358:2;24338:18;;;24331:30;-1:-1:-1;;;24377:18:181;;;24370:50;24437:18;;4902:62:91::1;24117:344:181::0;4902:62:91::1;4029:4:104;4978:9:91;:35;4970:73;;;::::0;-1:-1:-1;;;4970:73:91;;24668:2:181;4970:73:91::1;::::0;::::1;24650:21:181::0;24707:2;24687:18;;;24680:30;24746:27;24726:18;;;24719:55;24791:18;;4970:73:91::1;24466:349:181::0;4970:73:91::1;5087:15;5113:34;5126:20;5113:12;:34::i;:::-;5162:46;::::0;-1:-1:-1;;;5162:46:91;;5087:61;;-1:-1:-1;;;;;;5162:18:91;::::1;::::0;::::1;::::0;:46:::1;::::0;5181:11;;5194:13;;5162:46:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5154:87;;;::::0;-1:-1:-1;;;5154:87:91;;26088:2:181;5154:87:91::1;::::0;::::1;26070:21:181::0;26127:2;26107:18;;;26100:30;26166;26146:18;;;26139:58;26214:18;;5154:87:91::1;25886:352:181::0;5154:87:91::1;5285:19:::0;:29;;-1:-1:-1;;;;;;5285:29:91::1;-1:-1:-1::0;;;;;5285:29:91;::::1;;::::0;;5320:40;;::::1;::::0;:24;;:40:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;5366:60:91;;::::1;::::0;:37;;:60:::1;::::0;::::1;::::0;::::1;:::i;:::-;;5469:15;5455:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;5455:30:91::1;-1:-1:-1::0;5432:53:91;;::::1;::::0;:20;;:53:::1;::::0;;::::1;::::0;::::1;:::i;:::-;;5529:15;5515:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;5515:30:91::1;-1:-1:-1::0;5491:54:91;;::::1;::::0;:21;;:54:::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;5574:26:91::1;4566:3:104;5574:2:91::0;:26:::1;:::i;:::-;5551:11;:49:::0;5628:26:::1;4566:3:104;5628:2:91::0;:26:::1;:::i;:::-;5606:19:::0;:48;5733:19;:26;;;5765:20;:32;;;5809:40:::1;::::0;::::1;::::0;::::1;::::0;5606:11:::1;::::0;5838:10:::1;::::0;5809:40:::1;:::i;:::-;;;;;;;;3552:2302;;;3640:14:29::0;3636:99;;;3686:5;3670:21;;-1:-1:-1;;3670:21:29;;;3710:14;;-1:-1:-1;5840:36:181;;3710:14:29;;5828:2:181;5813:18;3710:14:29;;;;;;;3636:99;3258:483;3281:2573:91;;;;;;;;:::o;19561:74::-;1334:13:28;:11;:13::i;:::-;19607:23:91::1;::::0;-1:-1:-1;;;19607:23:91;;:11:::1;:23;::::0;::::1;160:25:181::0;19607:21:91::1;::::0;::::1;::::0;133:18:181;;19607:23:91::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19561:74::o:0;13997:420::-;14219:7;2505:21:31;:19;:21::i;:::-;1482:19:30::1;:17;:19::i;:::-;14200:8:91::2;6117;6098:15;:27;;6090:56;;;;-1:-1:-1::0;;;6090:56:91::2;;;;;;;:::i;:::-;14234:20:::3;14257:22;14271:7;14257:13;:22::i;:::-;14234:45;;14285:18;14306:23;14320:8;14306:13;:23::i;:::-;14342:70;::::0;-1:-1:-1;;;14342:70:91;;:11:::3;:70;::::0;::::3;16900:25:181::0;16973:4;16961:17;;;16941:18;;;16934:45;17015:17;;16995:18;;;16988:45;17049:18;;;17042:34;;;17092:19;;;17085:35;;;14285:44:91;;-1:-1:-1;14342:16:91::3;::::0;::::3;::::0;16872:19:181;;14342:70:91::3;16617:509:181::0;6361:93:91;6431:18;;-1:-1:-1;;;6431:18:91;;:11;:18;;;160:25:181;6409:7:91;;6431:16;;;;133:18:181;;6431::91;14:177:181;8124:115:91;8205:29;;-1:-1:-1;;;8205:29:91;;:11;:29;;;160:25:181;8183:7:91;;8205:27;;;;133:18:181;;8205:29:91;14:177:181;11371:181:91;11497:50;;-1:-1:-1;;;11497:50:91;;11475:7;;11497:32;;;;:50;;:11;;11530:7;;;;11539;;11497:50;;;:::i;12821:124::-;12906:34;;-1:-1:-1;;;12906:34:91;;:11;:34;;;15636:25:181;15677:18;;;15670:34;;;12884:7:91;;12906:27;;;;15609:18:181;;12906:34:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11846:162::-;11959:44;;-1:-1:-1;;;11959:44:91;;:11;:44;;;15636:25:181;15677:18;;;15670:34;;;11928:16:91;;11959:36;;;;15609:18:181;;11959:44:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11959:44:91;;;;;;;;;;;;:::i;2321:198:28:-;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:28;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:28;;29900:2:181;2401:73:28::1;::::0;::::1;29882:21:181::0;29939:2;29919:18;;;29912:30;29978:34;29958:18;;;29951:62;-1:-1:-1;;;30029:18:181;;;30022:36;30075:19;;2401:73:28::1;29698:402:181::0;2401:73:28::1;2484:28;2503:8;2484:18;:28::i;:::-;2321:198:::0;:::o;10330:336:91:-;10469:7;10484:20;10507:22;10521:7;10507:13;:22::i;:::-;10484:45;;10535:18;10556:23;10570:8;10556:13;:23::i;:::-;10592:69;;-1:-1:-1;;;10592:69:91;;:11;:69;;;18091:25:181;18164:4;18152:17;;;18132:18;;;18125:45;18206:17;;18186:18;;;18179:45;18240:18;;;18233:34;;;10535:44:91;;-1:-1:-1;10592:28:91;;;;18063:19:181;;10592:69:91;17836:437:181;2580:287:31;1830:1;2712:7;;:19;2704:63;;;;-1:-1:-1;;;2704:63:31;;30307:2:181;2704:63:31;;;30289:21:181;30346:2;30326:18;;;30319:30;30385:33;30365:18;;;30358:61;30436:18;;2704:63:31;30105:355:181;2704:63:31;1830:1;2842:7;:18;2580:287::o;1599:130:28:-;1513:6;;-1:-1:-1;;;;;1513:6:28;929:10:37;1662:23:28;1654:68;;;;-1:-1:-1;;;1654:68:28;;30667:2:181;1654:68:28;;;30649:21:181;;;30686:18;;;30679:30;30745:34;30725:18;;;30718:62;30797:18;;1654:68:28;30465:356:181;2873:209:31;1787:1;3053:7;:22;2873:209::o;2010:106:30:-;1928:7;;;;2079:9;2071:38;;;;-1:-1:-1;;;2071:38:30;;31028:2:181;2071:38:30;;;31010:21:181;31067:2;31047:18;;;31040:30;-1:-1:-1;;;31086:18:181;;;31079:46;31142:18;;2071:38:30;30826:340:181;2676:117:30;1729:16;:14;:16::i;:::-;2734:7:::1;:15:::0;;-1:-1:-1;;2734:15:30::1;::::0;;2764:22:::1;929:10:37::0;2773:12:30::1;2764:22;::::0;-1:-1:-1;;;;;7040:32:181;;;7022:51;;7010:2;6995:18;2764:22:30::1;;;;;;;2676:117::o:0;2673:187:28:-;2765:6;;;-1:-1:-1;;;;;2781:17:28;;;-1:-1:-1;;;;;;2781:17:28;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;2429:115:30:-;1482:19;:17;:19::i;:::-;2488:7:::1;:14:::0;;-1:-1:-1;;2488:14:30::1;2498:4;2488:14;::::0;;2517:20:::1;2524:12;929:10:37::0;;850:96;607:160:87;5363:13:29;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:29;;;;;;;:::i;:::-;671:26:87::1;:24;:26::i;:::-;703;:24;:26::i;:::-;735:27;:25;:27::i;1868:111:31:-:0;5363:13:29;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:29;;;;;;;:::i;:::-;1938:34:31::1;:32;:34::i;973:759:44:-:0;1030:16;1362:48;1344:14;1338:4;1334:25;1328:4;1324:36;1321:90;1315:4;1308:104;1569:32;1552:14;1546:4;1542:25;1539:63;1533:4;1526:77;1644:4;1638;1635:1;1628:21;1616:33;-1:-1:-1;;;;;;1676:22:44;;1668:57;;;;-1:-1:-1;;;1668:57:44;;31785:2:181;1668:57:44;;;31767:21:181;31824:2;31804:18;;;31797:30;-1:-1:-1;;;31843:18:181;;;31836:52;31905:18;;1668:57:44;31583:346:181;1668:57:44;973:759;;;:::o;2188:106:30:-;1928:7;;;;2246:41;;;;-1:-1:-1;;;2246:41:30;;32136:2:181;2246:41:30;;;32118:21:181;32175:2;32155:18;;;32148:30;-1:-1:-1;;;32194:18:181;;;32187:50;32254:18;;2246:41:30;31934:344:181;776:69:37;5363:13:29;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:29;;;;;;;:::i;1104:111:28:-;5363:13:29;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:29;;;;;;;:::i;:::-;1176:32:28::1;929:10:37::0;1176:18:28::1;:32::i;1166:95:30:-:0;5363:13:29;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:29;;;;;;;:::i;:::-;1239:7:30::1;:15:::0;;-1:-1:-1;;1239:15:30::1;::::0;;1166:95::o;1985:109:31:-;5363:13:29;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:29;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;196:367:181;259:8;269:6;323:3;316:4;308:6;304:17;300:27;290:55;;341:1;338;331:12;290:55;-1:-1:-1;364:20:181;;407:18;396:30;;393:50;;;439:1;436;429:12;393:50;476:4;468:6;464:17;452:29;;536:3;529:4;519:6;516:1;512:14;504:6;500:27;496:38;493:47;490:67;;;553:1;550;543:12;490:67;196:367;;;;;:::o;568:573::-;672:6;680;688;696;749:2;737:9;728:7;724:23;720:32;717:52;;;765:1;762;755:12;717:52;801:9;788:23;778:33;;862:2;851:9;847:18;834:32;889:18;881:6;878:30;875:50;;;921:1;918;911:12;875:50;960:70;1022:7;1013:6;1002:9;998:22;960:70;:::i;:::-;568:573;;1049:8;;-1:-1:-1;934:96:181;;1131:2;1116:18;1103:32;;568:573;-1:-1:-1;;;;568:573:181:o;1146:632::-;1317:2;1369:21;;;1439:13;;1342:18;;;1461:22;;;1288:4;;1317:2;1540:15;;;;1514:2;1499:18;;;1288:4;1583:169;1597:6;1594:1;1591:13;1583:169;;;1658:13;;1646:26;;1727:15;;;;1692:12;;;;1619:1;1612:9;1583:169;;;-1:-1:-1;1769:3:181;;1146:632;-1:-1:-1;;;;;;1146:632:181:o;1783:156::-;1849:20;;1909:4;1898:16;;1888:27;;1878:55;;1929:1;1926;1919:12;1944:250;2010:6;2018;2071:2;2059:9;2050:7;2046:23;2042:32;2039:52;;;2087:1;2084;2077:12;2039:52;2123:9;2110:23;2100:33;;2152:36;2184:2;2173:9;2169:18;2152:36;:::i;:::-;2142:46;;1944:250;;;;;:::o;2199:180::-;2258:6;2311:2;2299:9;2290:7;2286:23;2282:32;2279:52;;;2327:1;2324;2317:12;2279:52;-1:-1:-1;2350:23:181;;2199:180;-1:-1:-1;2199:180:181:o;2384:387::-;2468:6;2476;2484;2492;2545:3;2533:9;2524:7;2520:23;2516:33;2513:53;;;2562:1;2559;2552:12;2513:53;2598:9;2585:23;2575:33;;2627:36;2659:2;2648:9;2644:18;2627:36;:::i;:::-;2384:387;;2617:46;;-1:-1:-1;;;;2710:2:181;2695:18;;2682:32;;2761:2;2746:18;2733:32;;2384:387::o;2776:573::-;2880:6;2888;2896;2904;2957:2;2945:9;2936:7;2932:23;2928:32;2925:52;;;2973:1;2970;2963:12;2925:52;3013:9;3000:23;3046:18;3038:6;3035:30;3032:50;;;3078:1;3075;3068:12;3032:50;3117:70;3179:7;3170:6;3159:9;3155:22;3117:70;:::i;:::-;3206:8;;3091:96;;-1:-1:-1;3288:2:181;3273:18;;3260:32;;3339:2;3324:18;3311:32;;-1:-1:-1;2776:573:181;-1:-1:-1;;;;2776:573:181:o;3354:131::-;-1:-1:-1;;;;;3429:31:181;;3419:42;;3409:70;;3475:1;3472;3465:12;3490:134;3558:20;;3587:31;3558:20;3587:31;:::i;3629:594::-;3724:6;3732;3740;3748;3756;3809:3;3797:9;3788:7;3784:23;3780:33;3777:53;;;3826:1;3823;3816:12;3777:53;3862:9;3849:23;3839:33;;3922:2;3911:9;3907:18;3894:32;3935:31;3960:5;3935:31;:::i;:::-;3985:5;-1:-1:-1;4042:2:181;4027:18;;4014:32;4055:33;4014:32;4055:33;:::i;:::-;3629:594;;;;-1:-1:-1;4107:7:181;;4161:2;4146:18;;4133:32;;-1:-1:-1;4212:3:181;4197:19;4184:33;;3629:594;-1:-1:-1;;3629:594:181:o;4228:248::-;4296:6;4304;4357:2;4345:9;4336:7;4332:23;4328:32;4325:52;;;4373:1;4370;4363:12;4325:52;-1:-1:-1;;4396:23:181;;;4466:2;4451:18;;;4438:32;;-1:-1:-1;4228:248:181:o;5446:247::-;5505:6;5558:2;5546:9;5537:7;5533:23;5529:32;5526:52;;;5574:1;5571;5564:12;5526:52;5613:9;5600:23;5632:31;5657:5;5632:31;:::i;5887:320::-;5960:6;5968;5976;6029:2;6017:9;6008:7;6004:23;6000:32;5997:52;;;6045:1;6042;6035:12;5997:52;6068:27;6085:9;6068:27;:::i;:::-;6058:37;;6114:36;6146:2;6135:9;6131:18;6114:36;:::i;:::-;6104:46;;6197:2;6186:9;6182:18;6169:32;6159:42;;5887:320;;;;;:::o;6212:456::-;6289:6;6297;6305;6358:2;6346:9;6337:7;6333:23;6329:32;6326:52;;;6374:1;6371;6364:12;6326:52;6413:9;6400:23;6432:31;6457:5;6432:31;:::i;:::-;6482:5;-1:-1:-1;6539:2:181;6524:18;;6511:32;6552:33;6511:32;6552:33;:::i;:::-;6212:456;;6604:7;;-1:-1:-1;;;6658:2:181;6643:18;;;;6630:32;;6212:456::o;6673:182::-;6730:6;6783:2;6771:9;6762:7;6758:23;6754:32;6751:52;;;6799:1;6796;6789:12;6751:52;6822:27;6839:9;6822:27;:::i;7292:458::-;7383:6;7391;7399;7407;7415;7468:3;7456:9;7447:7;7443:23;7439:33;7436:53;;;7485:1;7482;7475:12;7436:53;7508:27;7525:9;7508:27;:::i;:::-;7498:37;;7554:36;7586:2;7575:9;7571:18;7554:36;:::i;:::-;7292:458;;7544:46;;-1:-1:-1;;;;7637:2:181;7622:18;;7609:32;;7688:2;7673:18;;7660:32;;7739:3;7724:19;;;7711:33;;-1:-1:-1;7292:458:181:o;7755:127::-;7816:10;7811:3;7807:20;7804:1;7797:31;7847:4;7844:1;7837:15;7871:4;7868:1;7861:15;7887:275;7958:2;7952:9;8023:2;8004:13;;-1:-1:-1;;8000:27:181;7988:40;;8058:18;8043:34;;8079:22;;;8040:62;8037:88;;;8105:18;;:::i;:::-;8141:2;8134:22;7887:275;;-1:-1:-1;7887:275:181:o;8167:191::-;8235:4;8268:18;8260:6;8257:30;8254:56;;;8290:18;;:::i;:::-;-1:-1:-1;8335:1:181;8331:14;8347:4;8327:25;;8167:191::o;8363:753::-;8425:5;8478:3;8471:4;8463:6;8459:17;8455:27;8445:55;;8496:1;8493;8486:12;8445:55;8532:6;8519:20;8558:4;8582:68;8598:51;8646:2;8598:51;:::i;:::-;8582:68;:::i;:::-;8684:15;;;8770:1;8766:10;;;;8754:23;;8750:32;;;8715:12;;;;8794:15;;;8791:35;;;8822:1;8819;8812:12;8791:35;8858:2;8850:6;8846:15;8870:217;8886:6;8881:3;8878:15;8870:217;;;8966:3;8953:17;8983:31;9008:5;8983:31;:::i;:::-;9027:18;;9065:12;;;;8903;;8870:217;;;-1:-1:-1;9105:5:181;8363:753;-1:-1:-1;;;;;;8363:753:181:o;9121:672::-;9173:5;9226:3;9219:4;9211:6;9207:17;9203:27;9193:55;;9244:1;9241;9234:12;9193:55;9280:6;9267:20;9306:4;9330:68;9346:51;9394:2;9346:51;:::i;9330:68::-;9432:15;;;9518:1;9514:10;;;;9502:23;;9498:32;;;9463:12;;;;9542:15;;;9539:35;;;9570:1;9567;9560:12;9539:35;9606:2;9598:6;9594:15;9618:146;9634:6;9629:3;9626:15;9618:146;;;9700:21;9717:3;9700:21;:::i;:::-;9688:34;;9742:12;;;;9651;;9618:146;;9798:531;9841:5;9894:3;9887:4;9879:6;9875:17;9871:27;9861:55;;9912:1;9909;9902:12;9861:55;9948:6;9935:20;9974:18;9970:2;9967:26;9964:52;;;9996:18;;:::i;:::-;10040:55;10083:2;10064:13;;-1:-1:-1;;10060:27:181;10089:4;10056:38;10040:55;:::i;:::-;10120:2;10111:7;10104:19;10166:3;10159:4;10154:2;10146:6;10142:15;10138:26;10135:35;10132:55;;;10183:1;10180;10173:12;10132:55;10248:2;10241:4;10233:6;10229:17;10222:4;10213:7;10209:18;10196:55;10296:1;10271:16;;;10289:4;10267:27;10260:38;;;;10275:7;9798:531;-1:-1:-1;;;9798:531:181:o;10334:1298::-;10540:6;10548;10556;10564;10572;10580;10588;10596;10649:3;10637:9;10628:7;10624:23;10620:33;10617:53;;;10666:1;10663;10656:12;10617:53;10706:9;10693:23;10735:18;10776:2;10768:6;10765:14;10762:34;;;10792:1;10789;10782:12;10762:34;10815:69;10876:7;10867:6;10856:9;10852:22;10815:69;:::i;:::-;10805:79;;10937:2;10926:9;10922:18;10909:32;10893:48;;10966:2;10956:8;10953:16;10950:36;;;10982:1;10979;10972:12;10950:36;11005:61;11058:7;11047:8;11036:9;11032:24;11005:61;:::i;:::-;10995:71;;11119:2;11108:9;11104:18;11091:32;11075:48;;11148:2;11138:8;11135:16;11132:36;;;11164:1;11161;11154:12;11132:36;11187:52;11231:7;11220:8;11209:9;11205:24;11187:52;:::i;:::-;11177:62;;11292:2;11281:9;11277:18;11264:32;11248:48;;11321:2;11311:8;11308:16;11305:36;;;11337:1;11334;11327:12;11305:36;;11360:52;11404:7;11393:8;11382:9;11378:24;11360:52;:::i;:::-;11350:62;;;11459:3;11448:9;11444:19;11431:33;11421:43;;11511:3;11500:9;11496:19;11483:33;11473:43;;11563:3;11552:9;11548:19;11535:33;11525:43;;11587:39;11621:3;11610:9;11606:19;11587:39;:::i;:::-;11577:49;;10334:1298;;;;;;;;;;;:::o;11637:118::-;11723:5;11716:13;11709:21;11702:5;11699:32;11689:60;;11745:1;11742;11735:12;11760:566;11852:6;11860;11868;11921:2;11909:9;11900:7;11896:23;11892:32;11889:52;;;11937:1;11934;11927:12;11889:52;11977:9;11964:23;12010:18;12002:6;11999:30;11996:50;;;12042:1;12039;12032:12;11996:50;12081:70;12143:7;12134:6;12123:9;12119:22;12081:70;:::i;:::-;12170:8;;-1:-1:-1;12055:96:181;-1:-1:-1;;12255:2:181;12240:18;;12227:32;12268:28;12227:32;12268:28;:::i;:::-;12315:5;12305:15;;;11760:566;;;;;:::o;12856:184::-;12926:6;12979:2;12967:9;12958:7;12954:23;12950:32;12947:52;;;12995:1;12992;12985:12;12947:52;-1:-1:-1;13018:16:181;;12856:184;-1:-1:-1;12856:184:181:o;13045:340::-;13247:2;13229:21;;;13286:2;13266:18;;;13259:30;-1:-1:-1;;;13320:2:181;13305:18;;13298:46;13376:2;13361:18;;13045:340::o;13390:311::-;13478:19;;;13460:3;-1:-1:-1;;;;;13509:31:181;;13506:51;;;13553:1;13550;13543:12;13506:51;13589:6;13586:1;13582:14;13641:8;13634:5;13627:4;13622:3;13618:14;13605:45;13670:18;;;;13690:4;13666:29;;13390:311;-1:-1:-1;;;13390:311:181:o;13706:462::-;13983:6;13972:9;13965:25;14026:6;14021:2;14010:9;14006:18;13999:34;14069:2;14064;14053:9;14049:18;14042:30;13946:4;14089:73;14158:2;14147:9;14143:18;14135:6;14127;14089:73;:::i;14173:889::-;14268:6;14299:2;14342;14330:9;14321:7;14317:23;14313:32;14310:52;;;14358:1;14355;14348:12;14310:52;14391:9;14385:16;14424:18;14416:6;14413:30;14410:50;;;14456:1;14453;14446:12;14410:50;14479:22;;14532:4;14524:13;;14520:27;-1:-1:-1;14510:55:181;;14561:1;14558;14551:12;14510:55;14590:2;14584:9;14613:68;14629:51;14677:2;14629:51;:::i;14613:68::-;14715:15;;;14797:1;14793:10;;;;14785:19;;14781:28;;;14746:12;;;;14821:19;;;14818:39;;;14853:1;14850;14843:12;14818:39;14877:11;;;;14897:135;14913:6;14908:3;14905:15;14897:135;;;14979:10;;14967:23;;14930:12;;;;15010;;;;14897:135;;;15051:5;14173:889;-1:-1:-1;;;;;;;14173:889:181:o;16150:462::-;16427:6;16416:9;16409:25;16470:2;16465;16454:9;16450:18;16443:30;16390:4;16490:73;16559:2;16548:9;16544:18;16536:6;16528;16490:73;:::i;:::-;16482:81;;16599:6;16594:2;16583:9;16579:18;16572:34;16150:462;;;;;;;:::o;18619:127::-;18680:10;18675:3;18671:20;18668:1;18661:31;18711:4;18708:1;18701:15;18735:4;18732:1;18725:15;19513:127;19574:10;19569:3;19565:20;19562:1;19555:31;19605:4;19602:1;19595:15;19629:4;19626:1;19619:15;19645:128;19712:9;;;19733:11;;;19730:37;;;19747:18;;:::i;20180:125::-;20245:9;;;20266:10;;;20263:36;;;20279:18;;:::i;21732:148::-;21820:4;21799:12;;;21813;;;21795:31;;21838:13;;21835:39;;;21854:18;;:::i;22240:151::-;22330:4;22323:12;;;22309;;;22305:31;;22348:14;;22345:40;;;22365:18;;:::i;22396:422::-;22485:1;22528:5;22485:1;22542:270;22563:7;22553:8;22550:21;22542:270;;;22622:4;22618:1;22614:6;22610:17;22604:4;22601:27;22598:53;;;22631:18;;:::i;:::-;22681:7;22671:8;22667:22;22664:55;;;22701:16;;;;22664:55;22780:22;;;;22740:15;;;;22542:270;;;22546:3;22396:422;;;;;:::o;22823:806::-;22872:5;22902:8;22892:80;;-1:-1:-1;22943:1:181;22957:5;;22892:80;22991:4;22981:76;;-1:-1:-1;23028:1:181;23042:5;;22981:76;23073:4;23091:1;23086:59;;;;23159:1;23154:130;;;;23066:218;;23086:59;23116:1;23107:10;;23130:5;;;23154:130;23191:3;23181:8;23178:17;23175:43;;;23198:18;;:::i;:::-;-1:-1:-1;;23254:1:181;23240:16;;23269:5;;23066:218;;23368:2;23358:8;23355:16;23349:3;23343:4;23340:13;23336:36;23330:2;23320:8;23317:16;23312:2;23306:4;23303:12;23299:35;23296:77;23293:159;;;-1:-1:-1;23405:19:181;;;23437:5;;23293:159;23484:34;23509:8;23503:4;23484:34;:::i;:::-;23554:6;23550:1;23546:6;23542:19;23533:7;23530:32;23527:58;;;23565:18;;:::i;:::-;23603:20;;22823:806;-1:-1:-1;;;22823:806:181:o;23634:131::-;23694:5;23723:36;23750:8;23744:4;23723:36;:::i;24820:423::-;24862:3;24900:5;24894:12;24927:6;24922:3;24915:19;24952:1;24962:162;24976:6;24973:1;24970:13;24962:162;;;25038:4;25094:13;;;25090:22;;25084:29;25066:11;;;25062:20;;25055:59;24991:12;24962:162;;;24966:3;25169:1;25162:4;25153:6;25148:3;25144:16;25140:27;25133:38;25232:4;25225:2;25221:7;25216:2;25208:6;25204:15;25200:29;25195:3;25191:39;25187:50;25180:57;;;24820:423;;;;:::o;25248:383::-;25445:2;25434:9;25427:21;25408:4;25471:45;25512:2;25501:9;25497:18;25489:6;25471:45;:::i;:::-;25564:9;25556:6;25552:22;25547:2;25536:9;25532:18;25525:50;25592:33;25618:6;25610;25592:33;:::i;25636:245::-;25703:6;25756:2;25744:9;25735:7;25731:23;25727:32;25724:52;;;25772:1;25769;25762:12;25724:52;25804:9;25798:16;25823:28;25845:5;25823:28;:::i;26243:168::-;26316:9;;;26347;;26364:15;;;26358:22;;26344:37;26334:71;;26385:18;;:::i;26568:503::-;26637:3;26675:5;26669:12;26702:6;26697:3;26690:19;26728:4;26757:2;26752:3;26748:12;26741:19;;26779:5;26776:1;26769:16;26821:2;26818:1;26808:16;26842:1;26852:194;26866:6;26863:1;26860:13;26852:194;;;26931:13;;-1:-1:-1;;;;;26927:39:181;26915:52;;26987:12;;;;26963:1;27022:14;;;;26881:9;26852:194;;;-1:-1:-1;27062:3:181;;26568:503;-1:-1:-1;;;;;26568:503:181:o;27076:469::-;27137:3;27175:5;27169:12;27202:6;27197:3;27190:19;27228:4;27257:2;27252:3;27248:12;27241:19;;27279:5;27276:1;27269:16;27321:2;27318:1;27308:16;27342:1;27352:168;27366:6;27363:1;27360:13;27352:168;;;27427:13;;27415:26;;27461:12;;;;27508:1;27496:14;;;;27381:9;27352:168;;27550:1467;27750:2;27739:9;27732:21;27795:6;27789:13;27784:2;27773:9;27769:18;27762:41;27857:4;27849:6;27845:17;27839:24;27834:2;27823:9;27819:18;27812:52;27919:4;27911:6;27907:17;27901:24;27895:3;27884:9;27880:19;27873:53;27981:4;27973:6;27969:17;27963:24;27957:3;27946:9;27942:19;27935:53;28043:4;28035:6;28031:17;28025:24;28019:3;28008:9;28004:19;27997:53;28105:4;28097:6;28093:17;28087:24;28081:3;28070:9;28066:19;28059:53;27713:4;28141:77;28211:4;28203:6;28199:17;28193:24;-1:-1:-1;;;;;26521:36:181;;26416:147;28141:77;-1:-1:-1;;;;;4748:31:181;28284:3;28269:19;;4736:44;28308:6;28345:3;28330:19;;28323:31;;;28377:84;28456:3;28441:19;;28434:4;28422:17;;28377:84;:::i;:::-;28484:2;28480:7;28552:2;28540:9;28532:6;28528:22;28524:31;28518:3;28507:9;28503:19;28496:60;28579:63;28635:6;28628:4;28620:6;28616:17;28579:63;:::i;:::-;28565:77;;28706:2;28694:9;28686:6;28682:22;28678:31;28673:2;28662:9;28658:18;28651:59;28733:63;28789:6;28782:4;28774:6;28770:17;28733:63;:::i;:::-;28719:77;;28861:2;28849:9;28841:6;28837:22;28833:31;28827:3;28816:9;28812:19;28805:60;;;28882:63;28938:6;28931:4;28923:6;28919:17;28882:63;:::i;:::-;28874:71;;;28954:57;29005:4;28994:9;28990:20;28982:6;-1:-1:-1;;;;;4748:31:181;4736:44;;4673:113;29221:472;29492:6;29481:9;29474:25;29535:2;29530;29519:9;29515:18;29508:30;29455:4;29555:73;29624:2;29613:9;29609:18;29601:6;29593;29555:73;:::i;:::-;29547:81;;29678:6;29671:14;29664:22;29659:2;29648:9;29644:18;29637:50;29221:472;;;;;;;:::o;31171:407::-;31373:2;31355:21;;;31412:2;31392:18;;;31385:30;31451:34;31446:2;31431:18;;31424:62;-1:-1:-1;;;31517:2:181;31502:18;;31495:41;31568:3;31553:19;;31171:407::o"},"gasEstimates":{"creation":{"codeDepositCost":"2298600","executionCost":"2464","totalCost":"2301064"},"external":{"addLiquidity(uint256[],uint256,uint256)":"infinite","calculateRemoveLiquidity(uint256)":"infinite","calculateRemoveLiquidityOneToken(uint256,uint8)":"infinite","calculateSwap(uint8,uint8,uint256)":"infinite","calculateSwapFromAddress(address,address,uint256)":"infinite","calculateSwapOut(uint8,uint8,uint256)":"infinite","calculateSwapOutFromAddress(address,address,uint256)":"infinite","calculateTokenAmount(uint256[],bool)":"infinite","getA()":"infinite","getAPrecise()":"infinite","getAdminBalance(uint256)":"infinite","getToken(uint8)":"6966","getTokenBalance(uint8)":"6847","getTokenIndex(address)":"9188","getVirtualPrice()":"infinite","initialize(address[],uint8[],string,string,uint256,uint256,uint256,address)":"infinite","owner()":"2443","pause()":"infinite","paused()":"2382","rampA(uint256,uint256)":"infinite","removeLiquidity(uint256,uint256[],uint256)":"infinite","removeLiquidityImbalance(uint256[],uint256,uint256)":"infinite","removeLiquidityOneToken(uint256,uint8,uint256,uint256)":"infinite","renounceOwnership()":"infinite","setAdminFee(uint256)":"infinite","setSwapFee(uint256)":"infinite","stopRampA()":"infinite","swap(uint8,uint8,uint256,uint256,uint256)":"infinite","swapExact(uint256,address,address,uint256,uint256)":"infinite","swapExactOut(uint256,address,address,uint256,uint256)":"infinite","swapStorage()":"15202","transferOwnership(address)":"infinite","unpause()":"infinite","withdrawAdminFees()":"infinite"}},"methodIdentifiers":{"addLiquidity(uint256[],uint256,uint256)":"4d49e87d","calculateRemoveLiquidity(uint256)":"f2fad2b6","calculateRemoveLiquidityOneToken(uint256,uint8)":"342a87a1","calculateSwap(uint8,uint8,uint256)":"a95b089f","calculateSwapFromAddress(address,address,uint256)":"7f41e7ef","calculateSwapOut(uint8,uint8,uint256)":"6b1dc08b","calculateSwapOutFromAddress(address,address,uint256)":"f9a15fb9","calculateTokenAmount(uint256[],bool)":"e6ab2806","getA()":"d46300fd","getAPrecise()":"0ba81959","getAdminBalance(uint256)":"ef0a712f","getToken(uint8)":"82b86600","getTokenBalance(uint8)":"91ceb3eb","getTokenIndex(address)":"66c0bd24","getVirtualPrice()":"e25aa5fa","initialize(address[],uint8[],string,string,uint256,uint256,uint256,address)":"b28cb6dc","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","rampA(uint256,uint256)":"593d132c","removeLiquidity(uint256,uint256[],uint256)":"31cd52b0","removeLiquidityImbalance(uint256[],uint256,uint256)":"84cdd9bc","removeLiquidityOneToken(uint256,uint8,uint256,uint256)":"3e3a1560","renounceOwnership()":"715018a6","setAdminFee(uint256)":"8beb60b6","setSwapFee(uint256)":"34e19907","stopRampA()":"c4db7fa0","swap(uint8,uint8,uint256,uint256,uint256)":"91695586","swapExact(uint256,address,address,uint256,uint256)":"d460f0a2","swapExactOut(uint256,address,address,uint256,uint256)":"5428c117","swapStorage()":"5fd65f0f","transferOwnership(address)":"f2fde38b","unpause()":"3f4ba83a","withdrawAdminFees()":"0419b45a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"fees\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"}],\"name\":\"AddLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newAdminFee\",\"type\":\"uint256\"}],\"name\":\"NewAdminFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSwapFee\",\"type\":\"uint256\"}],\"name\":\"NewSwapFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWithdrawFee\",\"type\":\"uint256\"}],\"name\":\"NewWithdrawFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"futureTime\",\"type\":\"uint256\"}],\"name\":\"RampA\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"fees\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidityImbalance\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"boughtId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensBought\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidityOne\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"StopRampA\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"initialA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialATime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureATime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"adminFee\",\"type\":\"uint256\"},{\"internalType\":\"contract LPToken\",\"name\":\"lpToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"pooledTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenPrecisionMultipliers\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"adminFees\",\"type\":\"uint256[]\"}],\"indexed\":false,\"internalType\":\"struct SwapUtilsExternal.Swap\",\"name\":\"swap\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SwapInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensSold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensBought\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"soldId\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"boughtId\",\"type\":\"uint128\"}],\"name\":\"TokenSwap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minToMint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"calculateRemoveLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndex\",\"type\":\"uint8\"}],\"name\":\"calculateRemoveLiquidityOneToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"availableTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"tokenIndexFrom\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexTo\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"dx\",\"type\":\"uint256\"}],\"name\":\"calculateSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"name\":\"calculateSwapFromAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"tokenIndexFrom\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexTo\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"dy\",\"type\":\"uint256\"}],\"name\":\"calculateSwapOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"name\":\"calculateSwapOutFromAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"deposit\",\"type\":\"bool\"}],\"name\":\"calculateTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getA\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAPrecise\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getAdminBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"getTokenBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"getTokenIndex\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVirtualPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"_pooledTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint8[]\",\"name\":\"decimals\",\"type\":\"uint8[]\"},{\"internalType\":\"string\",\"name\":\"lpTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"lpTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_adminFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"lpTokenTargetAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"futureA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureTime\",\"type\":\"uint256\"}],\"name\":\"rampA\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"maxBurnAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndex\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityOneToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newAdminFee\",\"type\":\"uint256\"}],\"name\":\"setAdminFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newSwapFee\",\"type\":\"uint256\"}],\"name\":\"setSwapFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopRampA\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"tokenIndexFrom\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexTo\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"dx\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minDy\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"assetIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExact\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"assetIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"swapStorage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"initialA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialATime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureATime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"adminFee\",\"type\":\"uint256\"},{\"internalType\":\"contract LPToken\",\"name\":\"lpToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawAdminFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Most of the logic is stored as a library `SwapUtils` for the sake of reducing contract's deployment size.\",\"kind\":\"dev\",\"methods\":{\"addLiquidity(uint256[],uint256,uint256)\":{\"params\":{\"amounts\":\"the amounts of each token to add, in their native precision\",\"deadline\":\"latest timestamp to accept this transaction\",\"minToMint\":\"the minimum LP tokens adding this amount of liquidity should mint, otherwise revert. Handy for front-running mitigation\"},\"returns\":{\"_0\":\"amount of LP token user minted and received\"}},\"calculateRemoveLiquidity(uint256)\":{\"params\":{\"amount\":\"the amount of LP tokens that would be burned on withdrawal\"},\"returns\":{\"_0\":\"array of token balances that the user will receive\"}},\"calculateRemoveLiquidityOneToken(uint256,uint8)\":{\"params\":{\"tokenAmount\":\"the amount of LP token to burn\",\"tokenIndex\":\"index of which token will be withdrawn\"},\"returns\":{\"availableTokenAmount\":\"calculated amount of underlying token available to withdraw\"}},\"calculateSwap(uint8,uint8,uint256)\":{\"params\":{\"dx\":\"the amount of tokens the user wants to sell. If the token charges a fee on transfers, use the amount that gets transferred after the fee.\",\"tokenIndexFrom\":\"the token the user wants to sell\",\"tokenIndexTo\":\"the token the user wants to buy\"},\"returns\":{\"_0\":\"amount of tokens the user will receive\"}},\"calculateSwapFromAddress(address,address,uint256)\":{\"params\":{\"amountIn\":\"the amount of tokens the user wants to swap from\",\"assetIn\":\"the token the user wants to swap from\",\"assetOut\":\"the token the user wants to swap to\"},\"returns\":{\"_0\":\"amount of tokens the user will receive\"}},\"calculateSwapOut(uint8,uint8,uint256)\":{\"params\":{\"dy\":\"the amount of tokens the user wants to buy\",\"tokenIndexFrom\":\"the token the user wants to sell\",\"tokenIndexTo\":\"the token the user wants to buy\"},\"returns\":{\"_0\":\"amount of tokens the user have to transfer\"}},\"calculateSwapOutFromAddress(address,address,uint256)\":{\"params\":{\"amountOut\":\"the amount of tokens the user wants to swap to\",\"assetIn\":\"the token the user wants to swap from\",\"assetOut\":\"the token the user wants to swap to\"},\"returns\":{\"_0\":\"amount of tokens the user will receive\"}},\"calculateTokenAmount(uint256[],bool)\":{\"details\":\"This shouldn't be used outside frontends for user estimates.\",\"params\":{\"amounts\":\"an array of token amounts to deposit or withdrawal, corresponding to pooledTokens. The amount should be in each pooled token's native precision. If a token charges a fee on transfers, use the amount that gets transferred after the fee.\",\"deposit\":\"whether this is a deposit or a withdrawal\"},\"returns\":{\"_0\":\"token amount the user will receive\"}},\"getA()\":{\"details\":\"See the StableSwap paper for details\",\"returns\":{\"_0\":\"A parameter\"}},\"getAPrecise()\":{\"details\":\"See the StableSwap paper for details\",\"returns\":{\"_0\":\"A parameter in its raw precision form\"}},\"getAdminBalance(uint256)\":{\"params\":{\"index\":\"Index of the pooled token\"},\"returns\":{\"_0\":\"admin's token balance in the token's precision\"}},\"getToken(uint8)\":{\"params\":{\"index\":\"the index of the token\"},\"returns\":{\"_0\":\"address of the token at given index\"}},\"getTokenBalance(uint8)\":{\"params\":{\"index\":\"the index of the token\"},\"returns\":{\"_0\":\"current balance of the pooled token at given index with token's native precision\"}},\"getTokenIndex(address)\":{\"params\":{\"tokenAddress\":\"address of the token\"},\"returns\":{\"_0\":\"the index of the given token address\"}},\"getVirtualPrice()\":{\"returns\":{\"_0\":\"the virtual price, scaled to the POOL_PRECISION_DECIMALS\"}},\"initialize(address[],uint8[],string,string,uint256,uint256,uint256,address)\":{\"params\":{\"_a\":\"the amplification coefficient * n ** (n - 1). See the StableSwap paper for details\",\"_adminFee\":\"default adminFee to be initialized with\",\"_fee\":\"default swap fee to be initialized with\",\"_pooledTokens\":\"an array of ERC20s this pool will accept\",\"decimals\":\"the decimals to use for each pooled token, eg 8 for WBTC. Cannot be larger than POOL_PRECISION_DECIMALS\",\"lpTokenName\":\"the long-form name of the token to be deployed\",\"lpTokenSymbol\":\"the short symbol for the token to be deployed\",\"lpTokenTargetAddress\":\"the address of an existing LPToken contract to use as a target\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"rampA(uint256,uint256)\":{\"params\":{\"futureA\":\"the new A to ramp towards\",\"futureTime\":\"timestamp when the new A should be reached\"}},\"removeLiquidity(uint256,uint256[],uint256)\":{\"details\":\"Liquidity can always be removed, even when the pool is paused.\",\"params\":{\"amount\":\"the amount of LP tokens to burn\",\"deadline\":\"latest timestamp to accept this transaction\",\"minAmounts\":\"the minimum amounts of each token in the pool        acceptable for this burn. Useful as a front-running mitigation\"},\"returns\":{\"_0\":\"amounts of tokens user received\"}},\"removeLiquidityImbalance(uint256[],uint256,uint256)\":{\"params\":{\"amounts\":\"how much of each token to withdraw\",\"deadline\":\"latest timestamp to accept this transaction\",\"maxBurnAmount\":\"the max LP token provider is willing to pay to remove liquidity. Useful as a front-running mitigation.\"},\"returns\":{\"_0\":\"amount of LP tokens burned\"}},\"removeLiquidityOneToken(uint256,uint8,uint256,uint256)\":{\"params\":{\"deadline\":\"latest timestamp to accept this transaction\",\"minAmount\":\"the minimum amount to withdraw, otherwise revert\",\"tokenAmount\":\"the amount of the token you want to receive\",\"tokenIndex\":\"the index of the token you want to receive\"},\"returns\":{\"_0\":\"amount of chosen token user received\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setAdminFee(uint256)\":{\"params\":{\"newAdminFee\":\"new admin fee to be applied on future transactions\"}},\"setSwapFee(uint256)\":{\"params\":{\"newSwapFee\":\"new swap fee to be applied on future transactions\"}},\"swap(uint8,uint8,uint256,uint256,uint256)\":{\"params\":{\"deadline\":\"latest timestamp to accept this transaction\",\"dx\":\"the amount of tokens the user wants to swap from\",\"minDy\":\"the min amount the user would like to receive, or revert.\",\"tokenIndexFrom\":\"the token the user wants to swap from\",\"tokenIndexTo\":\"the token the user wants to swap to\"}},\"swapExact(uint256,address,address,uint256,uint256)\":{\"params\":{\"amountIn\":\"the amount of tokens the user wants to swap from\",\"assetIn\":\"the token the user wants to swap from\",\"assetOut\":\"the token the user wants to swap to\",\"minAmountOut\":\"the min amount of tokens the user wants to swap to\"}},\"swapExactOut(uint256,address,address,uint256,uint256)\":{\"params\":{\"amountOut\":\"the amount of tokens the user wants to swap to\",\"assetIn\":\"the token the user wants to swap from\",\"assetOut\":\"the token the user wants to swap to\",\"maxAmountIn\":\"the max amount of tokens the user wants to swap from\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"Swap - A StableSwap implementation in solidity.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidity(uint256[],uint256,uint256)\":{\"notice\":\"Add liquidity to the pool with the given amounts of tokens\"},\"calculateRemoveLiquidity(uint256)\":{\"notice\":\"A simple method to calculate amount of each underlying tokens that is returned upon burning given amount of LP tokens\"},\"calculateRemoveLiquidityOneToken(uint256,uint8)\":{\"notice\":\"Calculate the amount of underlying token available to withdraw when withdrawing via only single token\"},\"calculateSwap(uint8,uint8,uint256)\":{\"notice\":\"Calculate amount of tokens you receive on swap\"},\"calculateSwapFromAddress(address,address,uint256)\":{\"notice\":\"Calculate amount of tokens you receive on swap\"},\"calculateSwapOut(uint8,uint8,uint256)\":{\"notice\":\"Calculate amount of tokens you receive on swap\"},\"calculateSwapOutFromAddress(address,address,uint256)\":{\"notice\":\"Calculate amount of tokens you receive on swap\"},\"calculateTokenAmount(uint256[],bool)\":{\"notice\":\"A simple method to calculate prices from deposits or withdrawals, excluding fees but including slippage. This is helpful as an input into the various \\\"min\\\" parameters on calls to fight front-running\"},\"getA()\":{\"notice\":\"Return A, the amplification coefficient * n ** (n - 1)\"},\"getAPrecise()\":{\"notice\":\"Return A in its raw precision form\"},\"getAdminBalance(uint256)\":{\"notice\":\"This function reads the accumulated amount of admin fees of the token with given index\"},\"getToken(uint8)\":{\"notice\":\"Return address of the pooled token at given index. Reverts if tokenIndex is out of range.\"},\"getTokenBalance(uint8)\":{\"notice\":\"Return current balance of the pooled token at given index\"},\"getTokenIndex(address)\":{\"notice\":\"Return the index of the given token address. Reverts if no matching token is found.\"},\"getVirtualPrice()\":{\"notice\":\"Get the virtual price, to help calculate profit\"},\"initialize(address[],uint8[],string,string,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes this Swap contract with the given parameters. This will also clone a LPToken contract that represents users' LP positions. The owner of LPToken will be this contract - which means only this contract is allowed to mint/burn tokens.\"},\"pause()\":{\"notice\":\"Pause the contract. Revert if already paused.\"},\"rampA(uint256,uint256)\":{\"notice\":\"Start ramping up or down A parameter towards given futureA and futureTime Checks if the change is too rapid, and commits the new A value only when it falls under the limit range.\"},\"removeLiquidity(uint256,uint256[],uint256)\":{\"notice\":\"Burn LP tokens to remove liquidity from the pool. Withdraw fee that decays linearly over period of 4 weeks since last deposit will apply.\"},\"removeLiquidityImbalance(uint256[],uint256,uint256)\":{\"notice\":\"Remove liquidity from the pool, weighted differently than the pool's current balances. Withdraw fee that decays linearly over period of 4 weeks since last deposit will apply.\"},\"removeLiquidityOneToken(uint256,uint8,uint256,uint256)\":{\"notice\":\"Remove liquidity from the pool all in one token. Withdraw fee that decays linearly over period of 4 weeks since last deposit will apply.\"},\"setAdminFee(uint256)\":{\"notice\":\"Update the admin fee. Admin fee takes portion of the swap fee.\"},\"setSwapFee(uint256)\":{\"notice\":\"Update the swap fee to be applied on swaps\"},\"stopRampA()\":{\"notice\":\"Stop ramping A immediately. Reverts if ramp A is already stopped.\"},\"swap(uint8,uint8,uint256,uint256,uint256)\":{\"notice\":\"Swap two tokens using this pool\"},\"swapExact(uint256,address,address,uint256,uint256)\":{\"notice\":\"Swap two tokens using this pool\"},\"swapExactOut(uint256,address,address,uint256,uint256)\":{\"notice\":\"Swap two tokens using this pool\"},\"unpause()\":{\"notice\":\"Unpause the contract. Revert if already unpaused.\"},\"withdrawAdminFees()\":{\"notice\":\"Withdraw all admin fees to the contract owner\"}},\"notice\":\"This contract is responsible for custody of closely pegged assets (eg. group of stablecoins) and automatic market making system. Users become an LP (Liquidity Provider) by depositing their tokens in desired ratios for an exchange of the pool token that represents their share of the pool. Users can burn pool tokens and withdraw their share of token(s). Each time a swap between the pooled tokens happens, a set fee incurs which effectively gets distributed to the LPs. In case of emergencies, admin can pause additional deposits, swaps, or single-asset withdraws - which stops the ratio of the tokens in the pool from changing. Users can always withdraw their tokens via multi-asset withdraws.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/helpers/StableSwap.sol\":\"StableSwap\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract PausableUpgradeable is Initializable, ContextUpgradeable {\\n    /**\\n     * @dev Emitted when the pause is triggered by `account`.\\n     */\\n    event Paused(address account);\\n\\n    /**\\n     * @dev Emitted when the pause is lifted by `account`.\\n     */\\n    event Unpaused(address account);\\n\\n    bool private _paused;\\n\\n    /**\\n     * @dev Initializes the contract in unpaused state.\\n     */\\n    function __Pausable_init() internal onlyInitializing {\\n        __Pausable_init_unchained();\\n    }\\n\\n    function __Pausable_init_unchained() internal onlyInitializing {\\n        _paused = false;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    modifier whenNotPaused() {\\n        _requireNotPaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    modifier whenPaused() {\\n        _requirePaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the contract is paused, and false otherwise.\\n     */\\n    function paused() public view virtual returns (bool) {\\n        return _paused;\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is paused.\\n     */\\n    function _requireNotPaused() internal view virtual {\\n        require(!paused(), \\\"Pausable: paused\\\");\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is not paused.\\n     */\\n    function _requirePaused() internal view virtual {\\n        require(paused(), \\\"Pausable: not paused\\\");\\n    }\\n\\n    /**\\n     * @dev Triggers stopped state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    function _pause() internal virtual whenNotPaused {\\n        _paused = true;\\n        emit Paused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Returns to normal state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    function _unpause() internal virtual whenPaused {\\n        _paused = false;\\n        emit Unpaused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x40c636b4572ff5f1dc50cf22097e93c0723ee14eff87e99ac2b02636eeca1250\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuardUpgradeable is Initializable {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    function __ReentrancyGuard_init() internal onlyInitializing {\\n        __ReentrancyGuard_init_unchained();\\n    }\\n\\n    function __ReentrancyGuard_init_unchained() internal onlyInitializing {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2b3005a0064cfc558bdf64b2bae94b565f4574a536aadd61c13838d4f2157790\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Clones.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n    /**\\n     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n     *\\n     * This function uses the create opcode, which should never revert.\\n     */\\n    function clone(address implementation) internal returns (address instance) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes\\n            // of the `implementation` address with the bytecode before the address.\\n            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))\\n            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.\\n            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))\\n            instance := create(0, 0x09, 0x37)\\n        }\\n        require(instance != address(0), \\\"ERC1167: create failed\\\");\\n    }\\n\\n    /**\\n     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n     *\\n     * This function uses the create2 opcode and a `salt` to deterministically deploy\\n     * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n     * the clones cannot be deployed twice at the same address.\\n     */\\n    function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes\\n            // of the `implementation` address with the bytecode before the address.\\n            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))\\n            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.\\n            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))\\n            instance := create2(0, 0x09, 0x37, salt)\\n        }\\n        require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n    }\\n\\n    /**\\n     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n     */\\n    function predictDeterministicAddress(\\n        address implementation,\\n        bytes32 salt,\\n        address deployer\\n    ) internal pure returns (address predicted) {\\n        /// @solidity memory-safe-assembly\\n        assembly {\\n            let ptr := mload(0x40)\\n            mstore(add(ptr, 0x38), deployer)\\n            mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff)\\n            mstore(add(ptr, 0x14), implementation)\\n            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73)\\n            mstore(add(ptr, 0x58), salt)\\n            mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37))\\n            predicted := keccak256(add(ptr, 0x43), 0x55)\\n        }\\n    }\\n\\n    /**\\n     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n     */\\n    function predictDeterministicAddress(address implementation, bytes32 salt)\\n        internal\\n        view\\n        returns (address predicted)\\n    {\\n        return predictDeterministicAddress(implementation, salt, address(this));\\n    }\\n}\\n\",\"keccak256\":\"0x888d64d221d52c31d015b76e50ca1af5ef8ff076550810b49cea6b01d8267a10\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/OwnerPausableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport {PausableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol\\\";\\n\\n/**\\n * @title OwnerPausable\\n * @notice An ownable contract allows the owner to pause and unpause the\\n * contract without a delay.\\n * @dev Only methods using the provided modifiers will be paused.\\n */\\nabstract contract OwnerPausableUpgradeable is OwnableUpgradeable, PausableUpgradeable {\\n  // ============ Initializer ============\\n\\n  function __OwnerPausable_init() internal onlyInitializing {\\n    __Context_init_unchained();\\n    __Ownable_init_unchained();\\n    __Pausable_init_unchained();\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Pause the contract. Revert if already paused.\\n   */\\n  function pause() external onlyOwner {\\n    PausableUpgradeable._pause();\\n  }\\n\\n  /**\\n   * @notice Unpause the contract. Revert if already unpaused.\\n   */\\n  function unpause() external onlyOwner {\\n    PausableUpgradeable._unpause();\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x2ceb8251bb92bc8b070c9732a0131a0a9b36aa4c37793d0bf5959fe41a751f92\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/StableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {Clones} from \\\"@openzeppelin/contracts/proxy/Clones.sol\\\";\\nimport {ReentrancyGuardUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {SwapUtilsExternal as SwapUtils} from \\\"../libraries/SwapUtilsExternal.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\nimport {OwnerPausableUpgradeable} from \\\"./OwnerPausableUpgradeable.sol\\\";\\nimport {LPToken} from \\\"./LPToken.sol\\\";\\n\\n/**\\n * @title Swap - A StableSwap implementation in solidity.\\n * @notice This contract is responsible for custody of closely pegged assets (eg. group of stablecoins)\\n * and automatic market making system. Users become an LP (Liquidity Provider) by depositing their tokens\\n * in desired ratios for an exchange of the pool token that represents their share of the pool.\\n * Users can burn pool tokens and withdraw their share of token(s).\\n *\\n * Each time a swap between the pooled tokens happens, a set fee incurs which effectively gets\\n * distributed to the LPs.\\n *\\n * In case of emergencies, admin can pause additional deposits, swaps, or single-asset withdraws - which\\n * stops the ratio of the tokens in the pool from changing.\\n * Users can always withdraw their tokens via multi-asset withdraws.\\n *\\n * @dev Most of the logic is stored as a library `SwapUtils` for the sake of reducing contract's\\n * deployment size.\\n */\\ncontract StableSwap is IStableSwap, OwnerPausableUpgradeable, ReentrancyGuardUpgradeable {\\n  using SwapUtils for SwapUtils.Swap;\\n\\n  // ============ Events ============\\n  event SwapInitialized(SwapUtils.Swap swap, address caller);\\n\\n  // ============ Storage ============\\n\\n  // Struct storing data responsible for automatic market maker functionalities. In order to\\n  // access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol\\n  SwapUtils.Swap public swapStorage;\\n\\n  // Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n  // getTokenIndex function also relies on this mapping to retrieve token index.\\n  mapping(address => uint8) private tokenIndexes;\\n\\n  // ============ Initializers ============\\n\\n  /**\\n   * @notice Initializes this Swap contract with the given parameters.\\n   * This will also clone a LPToken contract that represents users'\\n   * LP positions. The owner of LPToken will be this contract - which means\\n   * only this contract is allowed to mint/burn tokens.\\n   *\\n   * @param _pooledTokens an array of ERC20s this pool will accept\\n   * @param decimals the decimals to use for each pooled token,\\n   * eg 8 for WBTC. Cannot be larger than POOL_PRECISION_DECIMALS\\n   * @param lpTokenName the long-form name of the token to be deployed\\n   * @param lpTokenSymbol the short symbol for the token to be deployed\\n   * @param _a the amplification coefficient * n ** (n - 1). See the\\n   * StableSwap paper for details\\n   * @param _fee default swap fee to be initialized with\\n   * @param _adminFee default adminFee to be initialized with\\n   * @param lpTokenTargetAddress the address of an existing LPToken contract to use as a target\\n   */\\n  function initialize(\\n    IERC20[] memory _pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 _a,\\n    uint256 _fee,\\n    uint256 _adminFee,\\n    address lpTokenTargetAddress\\n  ) public override initializer {\\n    __OwnerPausable_init();\\n    __ReentrancyGuard_init();\\n\\n    uint256 numPooledTokens = _pooledTokens.length;\\n\\n    // Check _pooledTokens and precisions parameter\\n    require(numPooledTokens > Constants.MINIMUM_POOLED_TOKENS - 1, \\\"_pooledTokens.length insufficient\\\");\\n    require(numPooledTokens < Constants.MAXIMUM_POOLED_TOKENS + 1, \\\"_pooledTokens.length too large\\\");\\n    require(numPooledTokens == decimals.length, \\\"_pooledTokens decimals mismatch\\\");\\n\\n    uint256[] memory precisionMultipliers = new uint256[](decimals.length);\\n\\n    for (uint256 i = 0; i < numPooledTokens; ) {\\n      if (i != 0) {\\n        // Check if index is already used. Check if 0th element is a duplicate.\\n        require(\\n          tokenIndexes[address(_pooledTokens[i])] == 0 && _pooledTokens[0] != _pooledTokens[i],\\n          \\\"Duplicate tokens\\\"\\n        );\\n      }\\n      require(address(_pooledTokens[i]) != address(0), \\\"The 0 address isn't an ERC-20\\\");\\n      require(decimals[i] < Constants.POOL_PRECISION_DECIMALS + 1, \\\"Token decimals exceeds max\\\");\\n      precisionMultipliers[i] = 10**uint256(Constants.POOL_PRECISION_DECIMALS - decimals[i]);\\n      tokenIndexes[address(_pooledTokens[i])] = uint8(i);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Check _a, _fee, _adminFee, _withdrawFee parameters\\n    require(_a < Constants.MAX_A, \\\"_a exceeds maximum\\\");\\n    require(_fee < Constants.MAX_SWAP_FEE, \\\"_fee exceeds maximum\\\");\\n    require(_adminFee < Constants.MAX_ADMIN_FEE, \\\"_adminFee exceeds maximum\\\");\\n\\n    // Initialize a LPToken contract\\n    LPToken lpToken = LPToken(Clones.clone(lpTokenTargetAddress));\\n    require(lpToken.initialize(lpTokenName, lpTokenSymbol), \\\"could not init lpToken clone\\\");\\n\\n    // Initialize swapStorage struct\\n    swapStorage.lpToken = lpToken;\\n    swapStorage.pooledTokens = _pooledTokens;\\n    swapStorage.tokenPrecisionMultipliers = precisionMultipliers;\\n    swapStorage.balances = new uint256[](numPooledTokens);\\n    swapStorage.adminFees = new uint256[](numPooledTokens);\\n    swapStorage.initialA = _a * Constants.A_PRECISION;\\n    swapStorage.futureA = _a * Constants.A_PRECISION;\\n    // swapStorage.initialATime = 0;\\n    // swapStorage.futureATime = 0;\\n    swapStorage.swapFee = _fee;\\n    swapStorage.adminFee = _adminFee;\\n\\n    emit SwapInitialized(swapStorage, msg.sender);\\n  }\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Modifier to check deadline against current timestamp\\n   * @param deadline latest timestamp to accept this transaction\\n   */\\n  modifier deadlineCheck(uint256 deadline) {\\n    require(block.timestamp <= deadline, \\\"Deadline not met\\\");\\n    _;\\n  }\\n\\n  // ============ View functions ============\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @return A parameter\\n   */\\n  function getA() external view override returns (uint256) {\\n    return swapStorage.getA();\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision form\\n   * @dev See the StableSwap paper for details\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise() external view returns (uint256) {\\n    return swapStorage.getAPrecise();\\n  }\\n\\n  /**\\n   * @notice Return address of the pooled token at given index. Reverts if tokenIndex is out of range.\\n   * @param index the index of the token\\n   * @return address of the token at given index\\n   */\\n  function getToken(uint8 index) public view override returns (IERC20) {\\n    require(index < swapStorage.pooledTokens.length, \\\"Out of range\\\");\\n    return swapStorage.pooledTokens[index];\\n  }\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndex(address tokenAddress) public view override returns (uint8) {\\n    uint8 index = tokenIndexes[tokenAddress];\\n    require(address(getToken(index)) == tokenAddress, \\\"Token does not exist\\\");\\n    return index;\\n  }\\n\\n  /**\\n   * @notice Return current balance of the pooled token at given index\\n   * @param index the index of the token\\n   * @return current balance of the pooled token at given index with token's native precision\\n   */\\n  function getTokenBalance(uint8 index) external view override returns (uint256) {\\n    require(index < swapStorage.pooledTokens.length, \\\"Index out of range\\\");\\n    return swapStorage.balances[index];\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @return the virtual price, scaled to the POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice() external view override returns (uint256) {\\n    return swapStorage.getVirtualPrice();\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on swap\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell. If the token charges\\n   * a fee on transfers, use the amount that gets transferred after the fee.\\n   * @return amount of tokens the user will receive\\n   */\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view override returns (uint256) {\\n    return swapStorage.calculateSwap(tokenIndexFrom, tokenIndexTo, dx);\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on swap\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @return amount of tokens the user have to transfer\\n   */\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view override returns (uint256) {\\n    return swapStorage.calculateSwapInv(tokenIndexFrom, tokenIndexTo, dy);\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on swap\\n   * @param assetIn the token the user wants to swap from\\n   * @param assetOut the token the user wants to swap to\\n   * @param amountIn the amount of tokens the user wants to swap from\\n   * @return amount of tokens the user will receive\\n   */\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view override returns (uint256) {\\n    uint8 tokenIndexFrom = getTokenIndex(assetIn);\\n    uint8 tokenIndexTo = getTokenIndex(assetOut);\\n    return swapStorage.calculateSwap(tokenIndexFrom, tokenIndexTo, amountIn);\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on swap\\n   * @param assetIn the token the user wants to swap from\\n   * @param assetOut the token the user wants to swap to\\n   * @param amountOut the amount of tokens the user wants to swap to\\n   * @return amount of tokens the user will receive\\n   */\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view override returns (uint256) {\\n    uint8 tokenIndexFrom = getTokenIndex(assetIn);\\n    uint8 tokenIndexTo = getTokenIndex(assetOut);\\n    return swapStorage.calculateSwapInv(tokenIndexFrom, tokenIndexTo, amountOut);\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return token amount the user will receive\\n   */\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view override returns (uint256) {\\n    return swapStorage.calculateTokenAmount(amounts, deposit);\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of LP tokens\\n   * @param amount the amount of LP tokens that would be burned on withdrawal\\n   * @return array of token balances that the user will receive\\n   */\\n  function calculateRemoveLiquidity(uint256 amount) external view override returns (uint256[] memory) {\\n    return swapStorage.calculateRemoveLiquidity(amount);\\n  }\\n\\n  /**\\n   * @notice Calculate the amount of underlying token available to withdraw\\n   * when withdrawing via only single token\\n   * @param tokenAmount the amount of LP token to burn\\n   * @param tokenIndex index of which token will be withdrawn\\n   * @return availableTokenAmount calculated amount of underlying token\\n   * available to withdraw\\n   */\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    override\\n    returns (uint256 availableTokenAmount)\\n  {\\n    return swapStorage.calculateWithdrawOneToken(tokenAmount, tokenIndex);\\n  }\\n\\n  /**\\n   * @notice This function reads the accumulated amount of admin fees of the token with given index\\n   * @param index Index of the pooled token\\n   * @return admin's token balance in the token's precision\\n   */\\n  function getAdminBalance(uint256 index) external view returns (uint256) {\\n    return swapStorage.getAdminBalance(index);\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Swap two tokens using this pool\\n   * @param tokenIndexFrom the token the user wants to swap from\\n   * @param tokenIndexTo the token the user wants to swap to\\n   * @param dx the amount of tokens the user wants to swap from\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @param deadline latest timestamp to accept this transaction\\n   */\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external override nonReentrant whenNotPaused deadlineCheck(deadline) returns (uint256) {\\n    return swapStorage.swap(tokenIndexFrom, tokenIndexTo, dx, minDy);\\n  }\\n\\n  /**\\n   * @notice Swap two tokens using this pool\\n   * @param assetIn the token the user wants to swap from\\n   * @param assetOut the token the user wants to swap to\\n   * @param amountIn the amount of tokens the user wants to swap from\\n   * @param minAmountOut the min amount of tokens the user wants to swap to\\n   */\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable override nonReentrant whenNotPaused deadlineCheck(deadline) returns (uint256) {\\n    uint8 tokenIndexFrom = getTokenIndex(assetIn);\\n    uint8 tokenIndexTo = getTokenIndex(assetOut);\\n    return swapStorage.swap(tokenIndexFrom, tokenIndexTo, amountIn, minAmountOut);\\n  }\\n\\n  /**\\n   * @notice Swap two tokens using this pool\\n   * @param assetIn the token the user wants to swap from\\n   * @param assetOut the token the user wants to swap to\\n   * @param amountOut the amount of tokens the user wants to swap to\\n   * @param maxAmountIn the max amount of tokens the user wants to swap from\\n   */\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable override nonReentrant whenNotPaused deadlineCheck(deadline) returns (uint256) {\\n    uint8 tokenIndexFrom = getTokenIndex(assetIn);\\n    uint8 tokenIndexTo = getTokenIndex(assetOut);\\n    return swapStorage.swapOut(tokenIndexFrom, tokenIndexTo, amountOut, maxAmountIn);\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool with the given amounts of tokens\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * @param deadline latest timestamp to accept this transaction\\n   * @return amount of LP token user minted and received\\n   */\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external override nonReentrant whenNotPaused deadlineCheck(deadline) returns (uint256) {\\n    return swapStorage.addLiquidity(amounts, minToMint);\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool. Withdraw fee that decays linearly\\n   * over period of 4 weeks since last deposit will apply.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   *        acceptable for this burn. Useful as a front-running mitigation\\n   * @param deadline latest timestamp to accept this transaction\\n   * @return amounts of tokens user received\\n   */\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external override nonReentrant whenNotPaused deadlineCheck(deadline) returns (uint256[] memory) {\\n    return swapStorage.removeLiquidity(amount, minAmounts);\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token. Withdraw fee that decays linearly\\n   * over period of 4 weeks since last deposit will apply.\\n   * @param tokenAmount the amount of the token you want to receive\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @param deadline latest timestamp to accept this transaction\\n   * @return amount of chosen token user received\\n   */\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external override nonReentrant whenNotPaused deadlineCheck(deadline) returns (uint256) {\\n    return swapStorage.removeLiquidityOneToken(tokenAmount, tokenIndex, minAmount);\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances. Withdraw fee that decays linearly\\n   * over period of 4 weeks since last deposit will apply.\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @param deadline latest timestamp to accept this transaction\\n   * @return amount of LP tokens burned\\n   */\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external override nonReentrant whenNotPaused deadlineCheck(deadline) returns (uint256) {\\n    return swapStorage.removeLiquidityImbalance(amounts, maxBurnAmount);\\n  }\\n\\n  // ============ Admin functions ============\\n\\n  /**\\n   * @notice Withdraw all admin fees to the contract owner\\n   */\\n  function withdrawAdminFees() external nonReentrant onlyOwner {\\n    swapStorage.withdrawAdminFees(owner());\\n  }\\n\\n  /**\\n   * @notice Update the admin fee. Admin fee takes portion of the swap fee.\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(uint256 newAdminFee) external onlyOwner {\\n    swapStorage.setAdminFee(newAdminFee);\\n  }\\n\\n  /**\\n   * @notice Update the swap fee to be applied on swaps\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(uint256 newSwapFee) external onlyOwner {\\n    swapStorage.setSwapFee(newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA and futureTime\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param futureA the new A to ramp towards\\n   * @param futureTime timestamp when the new A should be reached\\n   */\\n  function rampA(uint256 futureA, uint256 futureTime) external onlyOwner {\\n    swapStorage.rampA(futureA, futureTime);\\n  }\\n\\n  /**\\n   * @notice Stop ramping A immediately. Reverts if ramp A is already stopped.\\n   */\\n  function stopRampA() external onlyOwner {\\n    swapStorage.stopRampA();\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[48] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x4085e619efdbb904990ed8a964f640e9d3b81b0c8fa20c09b2d9d8f060d4b573\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtilsExternal.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtilsExternal library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtilsExternal {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(Swap storage self) external view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(Swap storage self) external view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) external view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    public\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) public pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in Constants.A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) public pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) external view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) public pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = x - xp[tokenIndexFrom] + 1;\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) external view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) external view returns (uint256) {\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory balances = self.balances;\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 numBalances = balances.length;\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) external view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) external returns (uint256) {\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) external returns (uint256) {\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) external returns (uint256) {\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts if fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) external returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) external returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) external returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) external {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) external {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) external {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) external {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < Constants.MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(Swap storage self) external {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x084e75c997347aeb3cb7f1be28737089b4c79e708b7eaf0f7fa3b16df1135ae2\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8076,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":8079,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":9542,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":7948,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":8068,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"__gap","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"},{"astId":8259,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"_paused","offset":0,"slot":"101","type":"t_bool"},{"astId":8364,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"__gap","offset":0,"slot":"102","type":"t_array(t_uint256)49_storage"},{"astId":24093,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"__GAP","offset":0,"slot":"151","type":"t_array(t_uint256)50_storage"},{"astId":8379,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"_status","offset":0,"slot":"201","type":"t_uint256"},{"astId":8437,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"__gap","offset":0,"slot":"202","type":"t_array(t_uint256)49_storage"},{"astId":24906,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"swapStorage","offset":0,"slot":"251","type":"t_struct(Swap)34379_storage"},{"astId":24910,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"tokenIndexes","offset":0,"slot":"262","type":"t_mapping(t_address,t_uint8)"},{"astId":25824,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"__GAP","offset":0,"slot":"263","type":"t_array(t_uint256)48_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_contract(IERC20)10812)dyn_storage":{"base":"t_contract(IERC20)10812","encoding":"dynamic_array","label":"contract IERC20[]","numberOfBytes":"32"},"t_array(t_uint256)48_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[48]","numberOfBytes":"1536"},"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(IERC20)10812":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_contract(LPToken)23179":{"encoding":"inplace","label":"contract LPToken","numberOfBytes":"20"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_struct(Swap)34379_storage":{"encoding":"inplace","label":"struct SwapUtilsExternal.Swap","members":[{"astId":34352,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"initialA","offset":0,"slot":"0","type":"t_uint256"},{"astId":34354,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"futureA","offset":0,"slot":"1","type":"t_uint256"},{"astId":34356,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"initialATime","offset":0,"slot":"2","type":"t_uint256"},{"astId":34358,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"futureATime","offset":0,"slot":"3","type":"t_uint256"},{"astId":34360,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"swapFee","offset":0,"slot":"4","type":"t_uint256"},{"astId":34362,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"adminFee","offset":0,"slot":"5","type":"t_uint256"},{"astId":34365,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"lpToken","offset":0,"slot":"6","type":"t_contract(LPToken)23179"},{"astId":34369,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"pooledTokens","offset":0,"slot":"7","type":"t_array(t_contract(IERC20)10812)dyn_storage"},{"astId":34372,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"tokenPrecisionMultipliers","offset":0,"slot":"8","type":"t_array(t_uint256)dyn_storage"},{"astId":34375,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"balances","offset":0,"slot":"9","type":"t_array(t_uint256)dyn_storage"},{"astId":34378,"contract":"contracts/core/connext/helpers/StableSwap.sol:StableSwap","label":"adminFees","offset":0,"slot":"10","type":"t_array(t_uint256)dyn_storage"}],"numberOfBytes":"352"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"addLiquidity(uint256[],uint256,uint256)":{"notice":"Add liquidity to the pool with the given amounts of tokens"},"calculateRemoveLiquidity(uint256)":{"notice":"A simple method to calculate amount of each underlying tokens that is returned upon burning given amount of LP tokens"},"calculateRemoveLiquidityOneToken(uint256,uint8)":{"notice":"Calculate the amount of underlying token available to withdraw when withdrawing via only single token"},"calculateSwap(uint8,uint8,uint256)":{"notice":"Calculate amount of tokens you receive on swap"},"calculateSwapFromAddress(address,address,uint256)":{"notice":"Calculate amount of tokens you receive on swap"},"calculateSwapOut(uint8,uint8,uint256)":{"notice":"Calculate amount of tokens you receive on swap"},"calculateSwapOutFromAddress(address,address,uint256)":{"notice":"Calculate amount of tokens you receive on swap"},"calculateTokenAmount(uint256[],bool)":{"notice":"A simple method to calculate prices from deposits or withdrawals, excluding fees but including slippage. This is helpful as an input into the various \"min\" parameters on calls to fight front-running"},"getA()":{"notice":"Return A, the amplification coefficient * n ** (n - 1)"},"getAPrecise()":{"notice":"Return A in its raw precision form"},"getAdminBalance(uint256)":{"notice":"This function reads the accumulated amount of admin fees of the token with given index"},"getToken(uint8)":{"notice":"Return address of the pooled token at given index. Reverts if tokenIndex is out of range."},"getTokenBalance(uint8)":{"notice":"Return current balance of the pooled token at given index"},"getTokenIndex(address)":{"notice":"Return the index of the given token address. Reverts if no matching token is found."},"getVirtualPrice()":{"notice":"Get the virtual price, to help calculate profit"},"initialize(address[],uint8[],string,string,uint256,uint256,uint256,address)":{"notice":"Initializes this Swap contract with the given parameters. This will also clone a LPToken contract that represents users' LP positions. The owner of LPToken will be this contract - which means only this contract is allowed to mint/burn tokens."},"pause()":{"notice":"Pause the contract. Revert if already paused."},"rampA(uint256,uint256)":{"notice":"Start ramping up or down A parameter towards given futureA and futureTime Checks if the change is too rapid, and commits the new A value only when it falls under the limit range."},"removeLiquidity(uint256,uint256[],uint256)":{"notice":"Burn LP tokens to remove liquidity from the pool. Withdraw fee that decays linearly over period of 4 weeks since last deposit will apply."},"removeLiquidityImbalance(uint256[],uint256,uint256)":{"notice":"Remove liquidity from the pool, weighted differently than the pool's current balances. Withdraw fee that decays linearly over period of 4 weeks since last deposit will apply."},"removeLiquidityOneToken(uint256,uint8,uint256,uint256)":{"notice":"Remove liquidity from the pool all in one token. Withdraw fee that decays linearly over period of 4 weeks since last deposit will apply."},"setAdminFee(uint256)":{"notice":"Update the admin fee. Admin fee takes portion of the swap fee."},"setSwapFee(uint256)":{"notice":"Update the swap fee to be applied on swaps"},"stopRampA()":{"notice":"Stop ramping A immediately. Reverts if ramp A is already stopped."},"swap(uint8,uint8,uint256,uint256,uint256)":{"notice":"Swap two tokens using this pool"},"swapExact(uint256,address,address,uint256,uint256)":{"notice":"Swap two tokens using this pool"},"swapExactOut(uint256,address,address,uint256,uint256)":{"notice":"Swap two tokens using this pool"},"unpause()":{"notice":"Unpause the contract. Revert if already unpaused."},"withdrawAdminFees()":{"notice":"Withdraw all admin fees to the contract owner"}},"notice":"This contract is responsible for custody of closely pegged assets (eg. group of stablecoins) and automatic market making system. Users become an LP (Liquidity Provider) by depositing their tokens in desired ratios for an exchange of the pool token that represents their share of the pool. Users can burn pool tokens and withdraw their share of token(s). Each time a swap between the pooled tokens happens, a set fee incurs which effectively gets distributed to the LPs. In case of emergencies, admin can pause additional deposits, swaps, or single-asset withdraws - which stops the ratio of the tokens in the pool from changing. Users can always withdraw their tokens via multi-asset withdraws.","version":1}}},"contracts/core/connext/interfaces/IAavePool.sol":{"IAavePool":{"abi":[{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"backUnbacked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"mintUnbacked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"backUnbacked(address,uint256,uint256)":{"details":"Back the current unbacked underlying with `amount` and pay `fee`.","params":{"amount":"The amount to back","asset":"The address of the underlying asset to back","fee":"The amount paid in fees*"}},"mintUnbacked(address,uint256,address,uint16)":{"details":"Mints an `amount` of aTokens to the `onBehalfOf`","params":{"amount":"The amount to mint","asset":"The address of the underlying asset to mint","onBehalfOf":"The address that will receive the aTokens","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man*"}},"withdraw(address,uint256,address)":{"params":{"amount":"The underlying amount to be withdrawn   - Send the value type(uint256).max in order to withdraw the whole aToken balance","asset":"The address of the underlying asset to withdraw","to":"The address that will receive the underlying, same as msg.sender if the user   wants to receive it on his own wallet, or a different address if the beneficiary is a   different wallet"},"returns":{"_0":"The final amount withdrawn*"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"backUnbacked(address,uint256,uint256)":"d65dc7a1","mintUnbacked(address,uint256,address,uint16)":"69a933a5","withdraw(address,uint256,address)":"69328dec"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"backUnbacked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"mintUnbacked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"backUnbacked(address,uint256,uint256)\":{\"details\":\"Back the current unbacked underlying with `amount` and pay `fee`.\",\"params\":{\"amount\":\"The amount to back\",\"asset\":\"The address of the underlying asset to back\",\"fee\":\"The amount paid in fees*\"}},\"mintUnbacked(address,uint256,address,uint16)\":{\"details\":\"Mints an `amount` of aTokens to the `onBehalfOf`\",\"params\":{\"amount\":\"The amount to mint\",\"asset\":\"The address of the underlying asset to mint\",\"onBehalfOf\":\"The address that will receive the aTokens\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man*\"}},\"withdraw(address,uint256,address)\":{\"params\":{\"amount\":\"The underlying amount to be withdrawn   - Send the value type(uint256).max in order to withdraw the whole aToken balance\",\"asset\":\"The address of the underlying asset to withdraw\",\"to\":\"The address that will receive the underlying, same as msg.sender if the user   wants to receive it on his own wallet, or a different address if the beneficiary is a   different wallet\"},\"returns\":{\"_0\":\"The final amount withdrawn*\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"withdraw(address,uint256,address)\":{\"notice\":\"Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/interfaces/IAavePool.sol\":\"IAavePool\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/connext/interfaces/IAavePool.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\ninterface IAavePool {\\n  /**\\n   * @dev Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   **/\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @dev Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   **/\\n  function backUnbacked(\\n    address asset,\\n    uint256 amount,\\n    uint256 fee\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   **/\\n  function withdraw(\\n    address asset,\\n    uint256 amount,\\n    address to\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xd196cc8605b8ecfa5991614f6c234f2bc5d1a605cdb53778e91a93822dfb752f\",\"license\":\"UNLICENSED\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"withdraw(address,uint256,address)":{"notice":"Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC"}},"version":1}}},"contracts/core/connext/interfaces/IBridgeToken.sol":{"IBridgeToken":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amnt","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amnt","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"setDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."},"approve(address,uint256)":{"details":"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"decimals()":{"details":"Returns the decimals places of the token."},"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token."},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(address,uint256)":"9dc29fac","decimals()":"313ce567","mint(address,uint256)":"40c10f19","name()":"06fdde03","setDetails(string,string)":"b7b090ee","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amnt\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amnt\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"setDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/interfaces/IBridgeToken.sol\":\"IBridgeToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IBridgeToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\ninterface IBridgeToken is IERC20Metadata {\\n  function burn(address _from, uint256 _amnt) external;\\n\\n  function mint(address _to, uint256 _amnt) external;\\n\\n  function setDetails(string calldata _name, string calldata _symbol) external;\\n}\\n\",\"keccak256\":\"0x93b2adcc4b953ecd2d3e738d797f5fbde2ccb3726df10bc7acde9c1b4775b019\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/core/connext/interfaces/IConnext.sol":{"IConnext":{"abi":[{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"DiamondCut","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"DiamondCutProposed","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"DiamondCutRescinded","type":"event"},{"inputs":[],"name":"LIQUIDITY_FEE_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIQUIDITY_FEE_NUMERATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aavePool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aavePortalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"acceptProposedRouterOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"address","name":"_connext","type":"address"}],"name":"addConnextion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_relayer","type":"address"}],"name":"addRelayer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_local","type":"address"}],"name":"addRouterLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_local","type":"address"},{"internalType":"address","name":"_router","type":"address"}],"name":"addRouterLiquidityFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_sequencer","type":"address"}],"name":"addSequencer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"},{"internalType":"address","name":"_stableSwapPool","type":"address"}],"name":"addStableSwapPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256","name":"minToMint","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addSwapLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adopted","type":"address"}],"name":"adoptedToCanonical","outputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"}],"name":"adoptedToLocalExternalPools","outputs":[{"internalType":"contract IStableSwap","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"adoptedToLocalExternalPools","outputs":[{"internalType":"contract IStableSwap","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"approveRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"approveRouterForPortal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"approvedAssets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"}],"name":"approvedAssets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_relayer","type":"address"}],"name":"approvedRelayers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sequencer","type":"address"}],"name":"approvedSequencers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transferId","type":"bytes32"}],"name":"bumpTransfer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"calculateRemoveSwapLiquidity","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint8","name":"tokenIndex","type":"uint8"}],"name":"calculateRemoveSwapLiquidityOneToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"internalType":"uint8","name":"tokenIndexFrom","type":"uint8"},{"internalType":"uint8","name":"tokenIndexTo","type":"uint8"},{"internalType":"uint256","name":"dx","type":"uint256"}],"name":"calculateSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bool","name":"deposit","type":"bool"}],"name":"calculateSwapTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"canonicalToAdopted","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"}],"name":"canonicalToAdopted","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"canonicalToRepresentation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"}],"name":"canonicalToRepresentation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"internalType":"address","name":"_init","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"diamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"domain","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"bytes32","name":"_id","type":"bytes32"},{"internalType":"address","name":"_custom","type":"address"}],"name":"enrollCustom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"bytes32","name":"_router","type":"bytes32"}],"name":"enrollRemoteRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"uint32","name":"originDomain","type":"uint32"},{"internalType":"uint32","name":"destinationDomain","type":"uint32"},{"internalType":"uint32","name":"canonicalDomain","type":"uint32"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"delegate","type":"address"},{"internalType":"bool","name":"receiveLocal","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"slippage","type":"uint256"},{"internalType":"address","name":"originSender","type":"address"},{"internalType":"uint256","name":"bridgedAmt","type":"uint256"},{"internalType":"uint256","name":"normalizedIn","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"internalType":"struct TransferInfo","name":"params","type":"tuple"},{"internalType":"address[]","name":"routers","type":"address[]"},{"internalType":"bytes[]","name":"routerSignatures","type":"bytes[]"},{"internalType":"address","name":"sequencer","type":"address"},{"internalType":"bytes","name":"sequencerSignature","type":"bytes"}],"internalType":"struct ExecuteArgs","name":"_args","type":"tuple"}],"name":"execute","outputs":[{"internalType":"bytes32","name":"transferId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_functionSelector","type":"bytes4"}],"name":"facetAddress","outputs":[{"internalType":"address","name":"facetAddress_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facetAddresses","outputs":[{"internalType":"address[]","name":"facetAddresses_","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_facet","type":"address"}],"name":"facetFunctionSelectors","outputs":[{"internalType":"bytes4[]","name":"facetFunctionSelectors_","type":"bytes4[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facets","outputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondLoupe.Facet[]","name":"facets_","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"originDomain","type":"uint32"},{"internalType":"uint32","name":"destinationDomain","type":"uint32"},{"internalType":"uint32","name":"canonicalDomain","type":"uint32"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"delegate","type":"address"},{"internalType":"bool","name":"receiveLocal","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"slippage","type":"uint256"},{"internalType":"address","name":"originSender","type":"address"},{"internalType":"uint256","name":"bridgedAmt","type":"uint256"},{"internalType":"uint256","name":"normalizedIn","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"internalType":"struct TransferInfo","name":"_params","type":"tuple"}],"name":"forceReceiveLocal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"originDomain","type":"uint32"},{"internalType":"uint32","name":"destinationDomain","type":"uint32"},{"internalType":"uint32","name":"canonicalDomain","type":"uint32"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"delegate","type":"address"},{"internalType":"bool","name":"receiveLocal","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"slippage","type":"uint256"},{"internalType":"address","name":"originSender","type":"address"},{"internalType":"uint256","name":"bridgedAmt","type":"uint256"},{"internalType":"uint256","name":"normalizedIn","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"internalType":"struct TransferInfo","name":"_params","type":"tuple"},{"internalType":"uint256","name":"_slippage","type":"uint256"}],"name":"forceUpdateSlippage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transferId","type":"bytes32"}],"name":"getAavePortalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transferId","type":"bytes32"}],"name":"getAavePortalFeeDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"internalType":"address","name":"_init","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"getAcceptanceTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"getCustodiedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"},{"internalType":"uint32","name":"_domain","type":"uint32"}],"name":"getLocalAndAdoptedToken","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"getProposedRouterOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"getProposedRouterOwnerTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"getRouterApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"getRouterApprovalForPortal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"getRouterOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"getRouterRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"name":"getSwapA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"name":"getSwapAPrecise","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getSwapAdminBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"name":"getSwapLPToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"name":"getSwapStorage","outputs":[{"components":[{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"uint256","name":"initialA","type":"uint256"},{"internalType":"uint256","name":"futureA","type":"uint256"},{"internalType":"uint256","name":"initialATime","type":"uint256"},{"internalType":"uint256","name":"futureATime","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"uint256","name":"adminFee","type":"uint256"},{"internalType":"contract LPToken","name":"lpToken","type":"address"},{"internalType":"contract IERC20[]","name":"pooledTokens","type":"address[]"},{"internalType":"uint256[]","name":"tokenPrecisionMultipliers","type":"uint256[]"},{"internalType":"uint256[]","name":"balances","type":"uint256[]"},{"internalType":"uint256[]","name":"adminFees","type":"uint256[]"},{"internalType":"bool","name":"disabled","type":"bool"},{"internalType":"uint256","name":"removeTime","type":"uint256"}],"internalType":"struct SwapUtils.Swap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"internalType":"uint8","name":"index","type":"uint8"}],"name":"getSwapToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"internalType":"uint8","name":"index","type":"uint8"}],"name":"getSwapTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getSwapTokenIndex","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"name":"getSwapVirtualPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_candidate","type":"address"}],"name":"getTokenId","outputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_origin","type":"uint32"},{"internalType":"uint32","name":"_nonce","type":"uint32"},{"internalType":"bytes32","name":"_sender","type":"bytes32"},{"internalType":"bytes","name":"_message","type":"bytes"}],"name":"handle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"initializeRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_canonicalId","type":"bytes32"},{"internalType":"contract IERC20[]","name":"_pooledTokens","type":"address[]"},{"internalType":"uint8[]","name":"decimals","type":"uint8[]"},{"internalType":"string","name":"lpTokenName","type":"string"},{"internalType":"string","name":"lpTokenSymbol","type":"string"},{"internalType":"uint256","name":"_a","type":"uint256"},{"internalType":"uint256","name":"_fee","type":"uint256"},{"internalType":"uint256","name":"_adminFee","type":"uint256"}],"name":"initializeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpTokenTargetAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRoutersPerTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"internalType":"address","name":"_init","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"proposeDiamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposeRouterAllowlistRemoval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"proposed","type":"address"}],"name":"proposeRouterOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"internalType":"uint256","name":"futureA","type":"uint256"},{"internalType":"uint256","name":"futureTime","type":"uint256"}],"name":"rampA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"relayerFeeVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"}],"name":"remote","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"},{"internalType":"address","name":"_adoptedAssetId","type":"address"},{"internalType":"address","name":"_representation","type":"address"}],"name":"removeAssetId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"},{"internalType":"address","name":"_adoptedAssetId","type":"address"},{"internalType":"address","name":"_representation","type":"address"}],"name":"removeAssetId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_relayer","type":"address"}],"name":"removeRelayer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeRouterAllowlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_local","type":"address"},{"internalType":"address payable","name":"_to","type":"address"}],"name":"removeRouterLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_local","type":"address"},{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"address","name":"_router","type":"address"}],"name":"removeRouterLiquidityFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sequencer","type":"address"}],"name":"removeSequencer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256[]","name":"minAmounts","type":"uint256[]"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeSwapLiquidity","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256","name":"maxBurnAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeSwapLiquidityImbalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint8","name":"tokenIndex","type":"uint8"},{"internalType":"uint256","name":"minAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeSwapLiquidityOneToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"originDomain","type":"uint32"},{"internalType":"uint32","name":"destinationDomain","type":"uint32"},{"internalType":"uint32","name":"canonicalDomain","type":"uint32"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"delegate","type":"address"},{"internalType":"bool","name":"receiveLocal","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"slippage","type":"uint256"},{"internalType":"address","name":"originSender","type":"address"},{"internalType":"uint256","name":"bridgedAmt","type":"uint256"},{"internalType":"uint256","name":"normalizedIn","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"internalType":"struct TransferInfo","name":"_params","type":"tuple"},{"internalType":"uint256","name":"_backingAmount","type":"uint256"},{"internalType":"uint256","name":"_feeAmount","type":"uint256"},{"internalType":"uint256","name":"_maxIn","type":"uint256"}],"name":"repayAavePortal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"originDomain","type":"uint32"},{"internalType":"uint32","name":"destinationDomain","type":"uint32"},{"internalType":"uint32","name":"canonicalDomain","type":"uint32"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"delegate","type":"address"},{"internalType":"bool","name":"receiveLocal","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"slippage","type":"uint256"},{"internalType":"address","name":"originSender","type":"address"},{"internalType":"uint256","name":"bridgedAmt","type":"uint256"},{"internalType":"uint256","name":"normalizedIn","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"internalType":"struct TransferInfo","name":"_params","type":"tuple"},{"internalType":"uint256","name":"_backingAmount","type":"uint256"},{"internalType":"uint256","name":"_feeAmount","type":"uint256"}],"name":"repayAavePortalFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adopted","type":"address"}],"name":"representationToCanonical","outputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"internalType":"address","name":"_init","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"rescindDiamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transferId","type":"bytes32"}],"name":"routedTransfers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routerAllowlistRemoved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routerAllowlistTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_asset","type":"address"}],"name":"routerBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_aavePool","type":"address"}],"name":"setAavePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_aavePortalFeeNumerator","type":"uint256"}],"name":"setAavePortalFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numerator","type":"uint256"}],"name":"setLiquidityFeeNumerator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxRouters","type":"uint256"}],"name":"setMaxRoutersPerTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_relayerFeeVault","type":"address"}],"name":"setRelayerFeeVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"setRouterRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"internalType":"uint256","name":"newAdminFee","type":"uint256"}],"name":"setSwapAdminFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"internalType":"uint256","name":"newSwapFee","type":"uint256"}],"name":"setSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_xAppConnectionManager","type":"address"}],"name":"setXAppConnectionManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"},{"internalType":"uint8","name":"_canonicalDecimals","type":"uint8"},{"internalType":"string","name":"_representationName","type":"string"},{"internalType":"string","name":"_representationSymbol","type":"string"},{"internalType":"address","name":"_adoptedAssetId","type":"address"},{"internalType":"address","name":"_stableSwapPool","type":"address"},{"internalType":"uint256","name":"_cap","type":"uint256"}],"name":"setupAsset","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"},{"internalType":"address","name":"_representation","type":"address"},{"internalType":"address","name":"_adoptedAssetId","type":"address"},{"internalType":"address","name":"_stableSwapPool","type":"address"}],"name":"setupAssetWithDeployedRepresentation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"name":"stopRampA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"internalType":"uint8","name":"tokenIndexFrom","type":"uint8"},{"internalType":"uint8","name":"tokenIndexTo","type":"uint8"},{"internalType":"uint256","name":"dx","type":"uint256"},{"internalType":"uint256","name":"minDy","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"assetIn","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address","name":"assetIn","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transferId","type":"bytes32"}],"name":"transferStatus","outputs":[{"internalType":"enum DestinationTransferStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"unapproveRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"unapproveRouterForPortal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"updateDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"domain","type":"uint32"},{"internalType":"bytes32","name":"id","type":"bytes32"}],"internalType":"struct TokenId","name":"_canonical","type":"tuple"},{"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"updateLiquidityCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateLpTokenTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"canonicalId","type":"bytes32"}],"name":"withdrawSwapAdminFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"xAppConnectionManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_destination","type":"uint32"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_asset","type":"address"},{"internalType":"address","name":"_delegate","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_slippage","type":"uint256"},{"internalType":"bytes","name":"_callData","type":"bytes"}],"name":"xcall","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_destination","type":"uint32"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_asset","type":"address"},{"internalType":"address","name":"_delegate","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_slippage","type":"uint256"},{"internalType":"bytes","name":"_callData","type":"bytes"}],"name":"xcallIntoLocal","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"payable","type":"function"}],"devdoc":{"kind":"dev","methods":{"diamondCut((address,uint8,bytes4[])[],address,bytes)":{"params":{"_calldata":"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init","_diamondCut":"Contains the facet addresses and function selectors","_init":"The address of the contract or facet to execute _calldata"}},"facetAddress(bytes4)":{"details":"If facet is not found return address(0).","params":{"_functionSelector":"The function selector."},"returns":{"facetAddress_":"The facet address."}},"facetAddresses()":{"returns":{"facetAddresses_":"facetAddresses_"}},"facetFunctionSelectors(address)":{"params":{"_facet":"The facet address."},"returns":{"facetFunctionSelectors_":"facetFunctionSelectors_"}},"facets()":{"returns":{"facets_":"Facet"}},"getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)":{"params":{"_calldata":"A function call, including function selector and arguments _calldata is executed with delegatecall on _init","_diamondCut":"Contains the facet addresses and function selectors","_init":"The address of the contract or facet to execute _calldata"}},"proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)":{"params":{"_calldata":"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init","_diamondCut":"Contains the facet addresses and function selectors","_init":"The address of the contract or facet to execute _calldata"}},"rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)":{"params":{"_calldata":"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init","_diamondCut":"Contains the facet addresses and function selectors","_init":"The address of the contract or facet to execute _calldata"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"LIQUIDITY_FEE_DENOMINATOR()":"4b72c5da","LIQUIDITY_FEE_NUMERATOR()":"0951d6d8","aavePool()":"a03e4bc3","aavePortalFee()":"ef1eb0c1","acceptProposedOwner()":"c5b350df","acceptProposedRouterOwner(address)":"09935b8f","addConnextion(uint32,address)":"b4b483ff","addRelayer(address)":"dd39f00d","addRouterLiquidity(uint256,address)":"54064594","addRouterLiquidityFor(uint256,address,address)":"2d3f9ef6","addSequencer(address)":"8a336231","addStableSwapPool((uint32,bytes32),address)":"1506e463","addSwapLiquidity(bytes32,uint256[],uint256,uint256)":"8d365457","adoptedToCanonical(address)":"60062091","adoptedToLocalExternalPools((uint32,bytes32))":"80dc2248","adoptedToLocalExternalPools(bytes32)":"9b598519","approveRouter(address)":"f259cd27","approveRouterForPortal(address)":"da3a892f","approvedAssets((uint32,bytes32))":"ae8bc0de","approvedAssets(bytes32)":"57bd0a32","approvedRelayers(address)":"8cba8b6a","approvedSequencers(address)":"159e041f","bumpTransfer(bytes32)":"2424401f","calculateRemoveSwapLiquidity(bytes32,uint256)":"a02288f4","calculateRemoveSwapLiquidityOneToken(bytes32,uint256,uint8)":"29d99b10","calculateSwap(bytes32,uint8,uint8,uint256)":"8f11d27f","calculateSwapTokenAmount(bytes32,uint256[],bool)":"76ca2e52","canonicalToAdopted((uint32,bytes32))":"bd8671a7","canonicalToAdopted(bytes32)":"2c1999d0","canonicalToRepresentation((uint32,bytes32))":"ad4c7771","canonicalToRepresentation(bytes32)":"1ecf6f9f","delay()":"6a42b8f8","diamondCut((address,uint8,bytes4[])[],address,bytes)":"1f931c1c","domain()":"c2fb26a6","enrollCustom(uint32,bytes32,address)":"28b1aea0","enrollRemoteRouter(uint32,bytes32)":"b49c53a7","execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes))":"63e3e7d2","facetAddress(bytes4)":"cdffacc6","facetAddresses()":"52ef6b2c","facetFunctionSelectors(address)":"adfca15e","facets()":"7a0ed627","forceReceiveLocal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32))":"cb8058ba","forceUpdateSlippage((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256)":"54126711","getAavePortalDebt(bytes32)":"09d7ba54","getAavePortalFeeDebt(bytes32)":"d1e5f31c","getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)":"56a8ea48","getCustodiedAmount(bytes32)":"949de969","getLocalAndAdoptedToken(bytes32,uint32)":"07a38d7b","getProposedRouterOwner(address)":"3b688da6","getProposedRouterOwnerTimestamp(address)":"12d57170","getRouterApproval(address)":"1407093b","getRouterApprovalForPortal(address)":"8770e682","getRouterOwner(address)":"e9160f3e","getRouterRecipient(address)":"c6bf691d","getSwapA(bytes32)":"d251dc35","getSwapAPrecise(bytes32)":"7652f59d","getSwapAdminBalance(bytes32,uint256)":"1301caa2","getSwapLPToken(bytes32)":"8b480b12","getSwapStorage(bytes32)":"2d91a515","getSwapToken(bytes32,uint8)":"b3a4eab4","getSwapTokenBalance(bytes32,uint8)":"bb0577eb","getSwapTokenIndex(bytes32,address)":"ad94911b","getSwapVirtualPrice(bytes32)":"f495e807","getTokenId(address)":"f1537686","handle(uint32,uint32,bytes32,bytes)":"ab2dc3f5","initializeRouter(address,address)":"b214c901","initializeSwap(bytes32,address[],uint8[],string,string,uint256,uint256,uint256)":"e5f6220f","lpTokenTargetAddress()":"2bf63bcc","maxRoutersPerTransfer()":"9bf6d875","nonce()":"affed0e0","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)":"bbf2358e","proposeNewOwner(address)":"b1f8100d","proposeRouterAllowlistRemoval()":"c56ce358","proposeRouterOwner(address,address)":"22a3c007","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","rampA(bytes32,uint256,uint256)":"1963e426","relayerFeeVault()":"65bc8582","remote(uint32)":"121cca31","removeAssetId((uint32,bytes32),address,address)":"5a2164e5","removeAssetId(bytes32,address,address)":"a1b19301","removeRelayer(address)":"60f0a5ac","removeRouterAllowlist()":"23986f7d","removeRouterLiquidity(uint256,address,address)":"899962a1","removeRouterLiquidityFor(uint256,address,address,address)":"197c139d","removeSequencer(address)":"6989ca7c","removeSwapLiquidity(bytes32,uint256,uint256[],uint256)":"4bbcba8e","removeSwapLiquidityImbalance(bytes32,uint256[],uint256,uint256)":"241ca57a","removeSwapLiquidityOneToken(bytes32,uint256,uint8,uint256,uint256)":"b6618dff","repayAavePortal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256,uint256,uint256)":"b3f62fcb","repayAavePortalFor((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256,uint256)":"6a39b95d","representationToCanonical(address)":"03e418c2","rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)":"2c67849c","routedTransfers(bytes32)":"1a8bc0e1","routerAllowlistRemoved()":"6be55785","routerAllowlistTimestamp()":"12232937","routerBalances(address,address)":"41258b5c","setAavePool(address)":"349f937c","setAavePortalFee(uint256)":"3bd30d34","setLiquidityFeeNumerator(uint256)":"582c78d2","setMaxRoutersPerTransfer(uint256)":"82904716","setRelayerFeeVault(address)":"f01b3e01","setRouterRecipient(address,address)":"ffaf3f1a","setSwapAdminFee(bytes32,uint256)":"9c8eab97","setSwapFee(bytes32,uint256)":"43be5eaf","setXAppConnectionManager(address)":"41bdc8b5","setupAsset((uint32,bytes32),uint8,string,string,address,address,uint256)":"b64a5e07","setupAssetWithDeployedRepresentation((uint32,bytes32),address,address,address)":"e1cb3958","stopRampA(bytes32)":"72a30e08","swap(bytes32,uint8,uint8,uint256,uint256,uint256)":"ff126de9","swapExact(bytes32,uint256,address,address,uint256,uint256)":"80b297e8","swapExactOut(bytes32,uint256,address,address,uint256,uint256)":"74c6b89b","transferStatus(bytes32)":"bfd79030","unapproveRouter(address)":"911b8ee2","unapproveRouterForPortal(address)":"04376ff4","unpause()":"3f4ba83a","updateDetails((uint32,bytes32),string,string)":"c4058429","updateLiquidityCap((uint32,bytes32),uint256)":"e9d7bcec","updateLpTokenTarget(address)":"8dc51484","withdrawSwapAdminFees(bytes32)":"a1a23c29","xAppConnectionManager()":"3339df96","xcall(uint32,address,address,address,uint256,uint256,bytes)":"8aac16ba","xcallIntoLocal(uint32,address,address,address,uint256,uint256,bytes)":"91f5de79"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCut\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"DiamondCutProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCutRescinded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LIQUIDITY_FEE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LIQUIDITY_FEE_NUMERATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"aavePool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"aavePortalFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"acceptProposedRouterOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_connext\",\"type\":\"address\"}],\"name\":\"addConnextion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayer\",\"type\":\"address\"}],\"name\":\"addRelayer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_local\",\"type\":\"address\"}],\"name\":\"addRouterLiquidity\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_local\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"addRouterLiquidityFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"}],\"name\":\"addSequencer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_stableSwapPool\",\"type\":\"address\"}],\"name\":\"addStableSwapPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minToMint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"addSwapLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_adopted\",\"type\":\"address\"}],\"name\":\"adoptedToCanonical\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"}],\"name\":\"adoptedToLocalExternalPools\",\"outputs\":[{\"internalType\":\"contract IStableSwap\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"adoptedToLocalExternalPools\",\"outputs\":[{\"internalType\":\"contract IStableSwap\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"approveRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"approveRouterForPortal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"approvedAssets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"}],\"name\":\"approvedAssets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayer\",\"type\":\"address\"}],\"name\":\"approvedRelayers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"}],\"name\":\"approvedSequencers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferId\",\"type\":\"bytes32\"}],\"name\":\"bumpTransfer\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"calculateRemoveSwapLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndex\",\"type\":\"uint8\"}],\"name\":\"calculateRemoveSwapLiquidityOneToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexFrom\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexTo\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"dx\",\"type\":\"uint256\"}],\"name\":\"calculateSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"deposit\",\"type\":\"bool\"}],\"name\":\"calculateSwapTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"canonicalToAdopted\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"}],\"name\":\"canonicalToAdopted\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"canonicalToRepresentation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"}],\"name\":\"canonicalToRepresentation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"diamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_custom\",\"type\":\"address\"}],\"name\":\"enrollCustom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_router\",\"type\":\"bytes32\"}],\"name\":\"enrollRemoteRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"routers\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"routerSignatures\",\"type\":\"bytes[]\"},{\"internalType\":\"address\",\"name\":\"sequencer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSignature\",\"type\":\"bytes\"}],\"internalType\":\"struct ExecuteArgs\",\"name\":\"_args\",\"type\":\"tuple\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_functionSelector\",\"type\":\"bytes4\"}],\"name\":\"facetAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"facetAddress_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facetAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"facetAddresses_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_facet\",\"type\":\"address\"}],\"name\":\"facetFunctionSelectors\",\"outputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"facetFunctionSelectors_\",\"type\":\"bytes4[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facets\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondLoupe.Facet[]\",\"name\":\"facets_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"_params\",\"type\":\"tuple\"}],\"name\":\"forceReceiveLocal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"_params\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_slippage\",\"type\":\"uint256\"}],\"name\":\"forceUpdateSlippage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferId\",\"type\":\"bytes32\"}],\"name\":\"getAavePortalDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferId\",\"type\":\"bytes32\"}],\"name\":\"getAavePortalFeeDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"getAcceptanceTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"getCustodiedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_id\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"}],\"name\":\"getLocalAndAdoptedToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"getProposedRouterOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"getProposedRouterOwnerTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"getRouterApproval\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"getRouterApprovalForPortal\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"getRouterOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"getRouterRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"name\":\"getSwapA\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"name\":\"getSwapAPrecise\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getSwapAdminBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"name\":\"getSwapLPToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"name\":\"getSwapStorage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"initialA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialATime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureATime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"adminFee\",\"type\":\"uint256\"},{\"internalType\":\"contract LPToken\",\"name\":\"lpToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"pooledTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenPrecisionMultipliers\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"adminFees\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"disabled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"removeTime\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapUtils.Swap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"getSwapToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"getSwapTokenBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"getSwapTokenIndex\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"name\":\"getSwapVirtualPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getTokenId\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_origin\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_nonce\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"handle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"initializeRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"_pooledTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint8[]\",\"name\":\"decimals\",\"type\":\"uint8[]\"},{\"internalType\":\"string\",\"name\":\"lpTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"lpTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_adminFee\",\"type\":\"uint256\"}],\"name\":\"initializeSwap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lpTokenTargetAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxRoutersPerTransfer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"proposeDiamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposeRouterAllowlistRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"proposed\",\"type\":\"address\"}],\"name\":\"proposeRouterOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"futureA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureTime\",\"type\":\"uint256\"}],\"name\":\"rampA\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"relayerFeeVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"}],\"name\":\"remote\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_adoptedAssetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_representation\",\"type\":\"address\"}],\"name\":\"removeAssetId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_adoptedAssetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_representation\",\"type\":\"address\"}],\"name\":\"removeAssetId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayer\",\"type\":\"address\"}],\"name\":\"removeRelayer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeRouterAllowlist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_local\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"removeRouterLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_local\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"removeRouterLiquidityFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"}],\"name\":\"removeSequencer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeSwapLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"maxBurnAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeSwapLiquidityImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndex\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeSwapLiquidityOneToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"_params\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_backingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxIn\",\"type\":\"uint256\"}],\"name\":\"repayAavePortal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"_params\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_backingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeAmount\",\"type\":\"uint256\"}],\"name\":\"repayAavePortalFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_adopted\",\"type\":\"address\"}],\"name\":\"representationToCanonical\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"rescindDiamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferId\",\"type\":\"bytes32\"}],\"name\":\"routedTransfers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"routerAllowlistRemoved\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"routerAllowlistTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"routerBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_aavePool\",\"type\":\"address\"}],\"name\":\"setAavePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_aavePortalFeeNumerator\",\"type\":\"uint256\"}],\"name\":\"setAavePortalFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_numerator\",\"type\":\"uint256\"}],\"name\":\"setLiquidityFeeNumerator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newMaxRouters\",\"type\":\"uint256\"}],\"name\":\"setMaxRoutersPerTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayerFeeVault\",\"type\":\"address\"}],\"name\":\"setRelayerFeeVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"setRouterRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newAdminFee\",\"type\":\"uint256\"}],\"name\":\"setSwapAdminFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newSwapFee\",\"type\":\"uint256\"}],\"name\":\"setSwapFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_xAppConnectionManager\",\"type\":\"address\"}],\"name\":\"setXAppConnectionManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"uint8\",\"name\":\"_canonicalDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"_representationName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_representationSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_adoptedAssetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_stableSwapPool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"setupAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_representation\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_adoptedAssetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_stableSwapPool\",\"type\":\"address\"}],\"name\":\"setupAssetWithDeployedRepresentation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"name\":\"stopRampA\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexFrom\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexTo\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"dx\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minDy\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"assetIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExact\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"assetIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferId\",\"type\":\"bytes32\"}],\"name\":\"transferStatus\",\"outputs\":[{\"internalType\":\"enum DestinationTransferStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"unapproveRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"unapproveRouterForPortal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"updateDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"updateLiquidityCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"updateLpTokenTarget\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"name\":\"withdrawSwapAdminFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xAppConnectionManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destination\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_slippage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_callData\",\"type\":\"bytes\"}],\"name\":\"xcall\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destination\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_slippage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_callData\",\"type\":\"bytes\"}],\"name\":\"xcallIntoLocal\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}},\"facetAddress(bytes4)\":{\"details\":\"If facet is not found return address(0).\",\"params\":{\"_functionSelector\":\"The function selector.\"},\"returns\":{\"facetAddress_\":\"The facet address.\"}},\"facetAddresses()\":{\"returns\":{\"facetAddresses_\":\"facetAddresses_\"}},\"facetFunctionSelectors(address)\":{\"params\":{\"_facet\":\"The facet address.\"},\"returns\":{\"facetFunctionSelectors_\":\"facetFunctionSelectors_\"}},\"facets()\":{\"returns\":{\"facets_\":\"Facet\"}},\"getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}},\"proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}},\"rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Add/replace/remove any number of functions and optionally execute         a function with delegatecall\"},\"facetAddress(bytes4)\":{\"notice\":\"Gets the facet that supports the given selector.\"},\"facetAddresses()\":{\"notice\":\"Get all the facet addresses used by a diamond.\"},\"facetFunctionSelectors(address)\":{\"notice\":\"Gets all the function selectors supported by a specific facet.\"},\"facets()\":{\"notice\":\"Gets all facet addresses and their four byte function selectors.\"},\"getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Returns the acceptance time for a given proposal\"},\"proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Propose to add/replace/remove any number of functions and optionally execute         a function with delegatecall\"},\"rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Propose to add/replace/remove any number of functions and optionally execute         a function with delegatecall\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/interfaces/IConnext.sol\":\"IConnext\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IConnext.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {ExecuteArgs, TransferInfo, DestinationTransferStatus} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {SwapUtils} from \\\"../libraries/SwapUtils.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\n\\nimport {IStableSwap} from \\\"./IStableSwap.sol\\\";\\n\\nimport {IDiamondCut} from \\\"./IDiamondCut.sol\\\";\\nimport {IDiamondLoupe} from \\\"./IDiamondLoupe.sol\\\";\\n\\ninterface IConnext is IDiamondLoupe, IDiamondCut {\\n  // TokenFacet\\n  function canonicalToAdopted(bytes32 _key) external view returns (address);\\n\\n  function canonicalToAdopted(TokenId calldata _canonical) external view returns (address);\\n\\n  function adoptedToCanonical(address _adopted) external view returns (TokenId memory);\\n\\n  function canonicalToRepresentation(bytes32 _key) external view returns (address);\\n\\n  function canonicalToRepresentation(TokenId calldata _canonical) external view returns (address);\\n\\n  function representationToCanonical(address _adopted) external view returns (TokenId memory);\\n\\n  function getLocalAndAdoptedToken(bytes32 _id, uint32 _domain) external view returns (address, address);\\n\\n  function approvedAssets(bytes32 _key) external view returns (bool);\\n\\n  function approvedAssets(TokenId calldata _canonical) external view returns (bool);\\n\\n  function adoptedToLocalExternalPools(bytes32 _key) external view returns (IStableSwap);\\n\\n  function adoptedToLocalExternalPools(TokenId calldata _canonical) external view returns (IStableSwap);\\n\\n  function getTokenId(address _candidate) external view returns (TokenId memory);\\n\\n  function getCustodiedAmount(bytes32 _key) external view returns (uint256);\\n\\n  function setupAsset(\\n    TokenId calldata _canonical,\\n    uint8 _canonicalDecimals,\\n    string memory _representationName,\\n    string memory _representationSymbol,\\n    address _adoptedAssetId,\\n    address _stableSwapPool,\\n    uint256 _cap\\n  ) external returns (address);\\n\\n  function setupAssetWithDeployedRepresentation(\\n    TokenId calldata _canonical,\\n    address _representation,\\n    address _adoptedAssetId,\\n    address _stableSwapPool\\n  ) external returns (address);\\n\\n  function addStableSwapPool(TokenId calldata _canonical, address _stableSwapPool) external;\\n\\n  function updateLiquidityCap(TokenId calldata _canonical, uint256 _updated) external;\\n\\n  function removeAssetId(\\n    bytes32 _key,\\n    address _adoptedAssetId,\\n    address _representation\\n  ) external;\\n\\n  function removeAssetId(\\n    TokenId calldata _canonical,\\n    address _adoptedAssetId,\\n    address _representation\\n  ) external;\\n\\n  function updateDetails(\\n    TokenId calldata _canonical,\\n    string memory _name,\\n    string memory _symbol\\n  ) external;\\n\\n  // BaseConnextFacet\\n\\n  // BridgeFacet\\n  function routedTransfers(bytes32 _transferId) external view returns (address[] memory);\\n\\n  function transferStatus(bytes32 _transferId) external view returns (DestinationTransferStatus);\\n\\n  function remote(uint32 _domain) external view returns (address);\\n\\n  function domain() external view returns (uint256);\\n\\n  function nonce() external view returns (uint256);\\n\\n  function approvedSequencers(address _sequencer) external view returns (bool);\\n\\n  function xAppConnectionManager() external view returns (address);\\n\\n  function addConnextion(uint32 _domain, address _connext) external;\\n\\n  function addSequencer(address _sequencer) external;\\n\\n  function removeSequencer(address _sequencer) external;\\n\\n  function xcall(\\n    uint32 _destination,\\n    address _to,\\n    address _asset,\\n    address _delegate,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    bytes calldata _callData\\n  ) external payable returns (bytes32);\\n\\n  function xcallIntoLocal(\\n    uint32 _destination,\\n    address _to,\\n    address _asset,\\n    address _delegate,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    bytes calldata _callData\\n  ) external payable returns (bytes32);\\n\\n  function execute(ExecuteArgs calldata _args) external returns (bytes32 transferId);\\n\\n  function forceUpdateSlippage(TransferInfo calldata _params, uint256 _slippage) external;\\n\\n  function forceReceiveLocal(TransferInfo calldata _params) external;\\n\\n  function bumpTransfer(bytes32 _transferId) external payable;\\n\\n  function setXAppConnectionManager(address _xAppConnectionManager) external;\\n\\n  function enrollRemoteRouter(uint32 _domain, bytes32 _router) external;\\n\\n  function enrollCustom(\\n    uint32 _domain,\\n    bytes32 _id,\\n    address _custom\\n  ) external;\\n\\n  // InboxFacet\\n\\n  function handle(\\n    uint32 _origin,\\n    uint32 _nonce,\\n    bytes32 _sender,\\n    bytes memory _message\\n  ) external;\\n\\n  // ProposedOwnableFacet\\n\\n  function owner() external view returns (address);\\n\\n  function routerAllowlistRemoved() external view returns (bool);\\n\\n  function proposed() external view returns (address);\\n\\n  function proposedTimestamp() external view returns (uint256);\\n\\n  function routerAllowlistTimestamp() external view returns (uint256);\\n\\n  function delay() external view returns (uint256);\\n\\n  function paused() external view returns (bool);\\n\\n  function proposeRouterAllowlistRemoval() external;\\n\\n  function removeRouterAllowlist() external;\\n\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  function acceptProposedOwner() external;\\n\\n  function pause() external;\\n\\n  function unpause() external;\\n\\n  // RelayerFacet\\n  function approvedRelayers(address _relayer) external view returns (bool);\\n\\n  function relayerFeeVault() external view returns (address);\\n\\n  function setRelayerFeeVault(address _relayerFeeVault) external;\\n\\n  function addRelayer(address _relayer) external;\\n\\n  function removeRelayer(address _relayer) external;\\n\\n  // RoutersFacet\\n  function LIQUIDITY_FEE_NUMERATOR() external view returns (uint256);\\n\\n  function LIQUIDITY_FEE_DENOMINATOR() external view returns (uint256);\\n\\n  function getRouterApproval(address _router) external view returns (bool);\\n\\n  function getRouterRecipient(address _router) external view returns (address);\\n\\n  function getRouterOwner(address _router) external view returns (address);\\n\\n  function getProposedRouterOwner(address _router) external view returns (address);\\n\\n  function getProposedRouterOwnerTimestamp(address _router) external view returns (uint256);\\n\\n  function maxRoutersPerTransfer() external view returns (uint256);\\n\\n  function routerBalances(address _router, address _asset) external view returns (uint256);\\n\\n  function getRouterApprovalForPortal(address _router) external view returns (bool);\\n\\n  function approveRouter(address router) external;\\n\\n  function initializeRouter(address owner, address recipient) external;\\n\\n  function unapproveRouter(address router) external;\\n\\n  function setMaxRoutersPerTransfer(uint256 _newMaxRouters) external;\\n\\n  function setLiquidityFeeNumerator(uint256 _numerator) external;\\n\\n  function approveRouterForPortal(address _router) external;\\n\\n  function unapproveRouterForPortal(address _router) external;\\n\\n  function setRouterRecipient(address router, address recipient) external;\\n\\n  function proposeRouterOwner(address router, address proposed) external;\\n\\n  function acceptProposedRouterOwner(address router) external;\\n\\n  function addRouterLiquidityFor(\\n    uint256 _amount,\\n    address _local,\\n    address _router\\n  ) external payable;\\n\\n  function addRouterLiquidity(uint256 _amount, address _local) external payable;\\n\\n  function removeRouterLiquidityFor(\\n    uint256 _amount,\\n    address _local,\\n    address payable _to,\\n    address _router\\n  ) external;\\n\\n  function removeRouterLiquidity(\\n    uint256 _amount,\\n    address _local,\\n    address payable _to\\n  ) external;\\n\\n  // PortalFacet\\n  function getAavePortalDebt(bytes32 _transferId) external view returns (uint256);\\n\\n  function getAavePortalFeeDebt(bytes32 _transferId) external view returns (uint256);\\n\\n  function aavePool() external view returns (address);\\n\\n  function aavePortalFee() external view returns (uint256);\\n\\n  function setAavePool(address _aavePool) external;\\n\\n  function setAavePortalFee(uint256 _aavePortalFeeNumerator) external;\\n\\n  function repayAavePortal(\\n    TransferInfo calldata _params,\\n    uint256 _backingAmount,\\n    uint256 _feeAmount,\\n    uint256 _maxIn\\n  ) external;\\n\\n  function repayAavePortalFor(\\n    TransferInfo calldata _params,\\n    uint256 _backingAmount,\\n    uint256 _feeAmount\\n  ) external;\\n\\n  // StableSwapFacet\\n  function getSwapStorage(bytes32 canonicalId) external view returns (SwapUtils.Swap memory);\\n\\n  function getSwapLPToken(bytes32 canonicalId) external view returns (address);\\n\\n  function getSwapA(bytes32 canonicalId) external view returns (uint256);\\n\\n  function getSwapAPrecise(bytes32 canonicalId) external view returns (uint256);\\n\\n  function getSwapToken(bytes32 canonicalId, uint8 index) external view returns (IERC20);\\n\\n  function getSwapTokenIndex(bytes32 canonicalId, address tokenAddress) external view returns (uint8);\\n\\n  function getSwapTokenBalance(bytes32 canonicalId, uint8 index) external view returns (uint256);\\n\\n  function getSwapVirtualPrice(bytes32 canonicalId) external view returns (uint256);\\n\\n  function calculateSwap(\\n    bytes32 canonicalId,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapTokenAmount(\\n    bytes32 canonicalId,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) external view returns (uint256);\\n\\n  function calculateRemoveSwapLiquidity(bytes32 canonicalId, uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveSwapLiquidityOneToken(\\n    bytes32 canonicalId,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) external view returns (uint256);\\n\\n  function getSwapAdminBalance(bytes32 canonicalId, uint256 index) external view returns (uint256);\\n\\n  function swap(\\n    bytes32 canonicalId,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    bytes32 canonicalId,\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    bytes32 canonicalId,\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function addSwapLiquidity(\\n    bytes32 canonicalId,\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeSwapLiquidity(\\n    bytes32 canonicalId,\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeSwapLiquidityOneToken(\\n    bytes32 canonicalId,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeSwapLiquidityImbalance(\\n    bytes32 canonicalId,\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  // SwapAdminFacet\\n\\n  function initializeSwap(\\n    bytes32 _canonicalId,\\n    IERC20[] memory _pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 _a,\\n    uint256 _fee,\\n    uint256 _adminFee\\n  ) external;\\n\\n  function withdrawSwapAdminFees(bytes32 canonicalId) external;\\n\\n  function setSwapAdminFee(bytes32 canonicalId, uint256 newAdminFee) external;\\n\\n  function setSwapFee(bytes32 canonicalId, uint256 newSwapFee) external;\\n\\n  function rampA(\\n    bytes32 canonicalId,\\n    uint256 futureA,\\n    uint256 futureTime\\n  ) external;\\n\\n  function stopRampA(bytes32 canonicalId) external;\\n\\n  function lpTokenTargetAddress() external view returns (address);\\n\\n  function updateLpTokenTarget(address newAddress) external;\\n}\\n\",\"keccak256\":\"0x1b21b65dce0f84a5f3d82ae358960f03d40e0bbb9da4d4ad69fc44a8eb12a488\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IDiamondLoupe.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n  /// These functions are expected to be called frequently\\n  /// by tools.\\n\\n  struct Facet {\\n    address facetAddress;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Gets all facet addresses and their four byte function selectors.\\n  /// @return facets_ Facet\\n  function facets() external view returns (Facet[] memory facets_);\\n\\n  /// @notice Gets all the function selectors supported by a specific facet.\\n  /// @param _facet The facet address.\\n  /// @return facetFunctionSelectors_\\n  function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n  /// @notice Get all the facet addresses used by a diamond.\\n  /// @return facetAddresses_\\n  function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n  /// @notice Gets the facet that supports the given selector.\\n  /// @dev If facet is not found return address(0).\\n  /// @param _functionSelector The function selector.\\n  /// @return facetAddress_ The facet address.\\n  function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\",\"keccak256\":\"0xc408c13dc42d9526b1f292bad3f3915efa15c2133f509d90a45422b5f6cf829c\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"diamondCut((address,uint8,bytes4[])[],address,bytes)":{"notice":"Add/replace/remove any number of functions and optionally execute         a function with delegatecall"},"facetAddress(bytes4)":{"notice":"Gets the facet that supports the given selector."},"facetAddresses()":{"notice":"Get all the facet addresses used by a diamond."},"facetFunctionSelectors(address)":{"notice":"Gets all the function selectors supported by a specific facet."},"facets()":{"notice":"Gets all facet addresses and their four byte function selectors."},"getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)":{"notice":"Returns the acceptance time for a given proposal"},"proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)":{"notice":"Propose to add/replace/remove any number of functions and optionally execute         a function with delegatecall"},"rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)":{"notice":"Propose to add/replace/remove any number of functions and optionally execute         a function with delegatecall"}},"version":1}}},"contracts/core/connext/interfaces/IDiamondCut.sol":{"IDiamondCut":{"abi":[{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"DiamondCut","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"DiamondCutProposed","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"DiamondCutRescinded","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"internalType":"address","name":"_init","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"diamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"internalType":"address","name":"_init","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"getAcceptanceTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"internalType":"address","name":"_init","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"proposeDiamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"internalType":"address","name":"_init","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"rescindDiamondCut","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"diamondCut((address,uint8,bytes4[])[],address,bytes)":{"params":{"_calldata":"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init","_diamondCut":"Contains the facet addresses and function selectors","_init":"The address of the contract or facet to execute _calldata"}},"getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)":{"params":{"_calldata":"A function call, including function selector and arguments _calldata is executed with delegatecall on _init","_diamondCut":"Contains the facet addresses and function selectors","_init":"The address of the contract or facet to execute _calldata"}},"proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)":{"params":{"_calldata":"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init","_diamondCut":"Contains the facet addresses and function selectors","_init":"The address of the contract or facet to execute _calldata"}},"rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)":{"params":{"_calldata":"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init","_diamondCut":"Contains the facet addresses and function selectors","_init":"The address of the contract or facet to execute _calldata"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"diamondCut((address,uint8,bytes4[])[],address,bytes)":"1f931c1c","getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)":"56a8ea48","proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)":"bbf2358e","rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)":"2c67849c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCut\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"DiamondCutProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCutRescinded\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"diamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"getAcceptanceTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"proposeDiamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"rescindDiamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}},\"getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}},\"proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}},\"rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Add/replace/remove any number of functions and optionally execute         a function with delegatecall\"},\"getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Returns the acceptance time for a given proposal\"},\"proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Propose to add/replace/remove any number of functions and optionally execute         a function with delegatecall\"},\"rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Propose to add/replace/remove any number of functions and optionally execute         a function with delegatecall\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/interfaces/IDiamondCut.sol\":\"IDiamondCut\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"diamondCut((address,uint8,bytes4[])[],address,bytes)":{"notice":"Add/replace/remove any number of functions and optionally execute         a function with delegatecall"},"getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)":{"notice":"Returns the acceptance time for a given proposal"},"proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)":{"notice":"Propose to add/replace/remove any number of functions and optionally execute         a function with delegatecall"},"rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)":{"notice":"Propose to add/replace/remove any number of functions and optionally execute         a function with delegatecall"}},"version":1}}},"contracts/core/connext/interfaces/IDiamondLoupe.sol":{"IDiamondLoupe":{"abi":[{"inputs":[{"internalType":"bytes4","name":"_functionSelector","type":"bytes4"}],"name":"facetAddress","outputs":[{"internalType":"address","name":"facetAddress_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facetAddresses","outputs":[{"internalType":"address[]","name":"facetAddresses_","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_facet","type":"address"}],"name":"facetFunctionSelectors","outputs":[{"internalType":"bytes4[]","name":"facetFunctionSelectors_","type":"bytes4[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facets","outputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondLoupe.Facet[]","name":"facets_","type":"tuple[]"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"facetAddress(bytes4)":{"details":"If facet is not found return address(0).","params":{"_functionSelector":"The function selector."},"returns":{"facetAddress_":"The facet address."}},"facetAddresses()":{"returns":{"facetAddresses_":"facetAddresses_"}},"facetFunctionSelectors(address)":{"params":{"_facet":"The facet address."},"returns":{"facetFunctionSelectors_":"facetFunctionSelectors_"}},"facets()":{"returns":{"facets_":"Facet"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"facetAddress(bytes4)":"cdffacc6","facetAddresses()":"52ef6b2c","facetFunctionSelectors(address)":"adfca15e","facets()":"7a0ed627"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_functionSelector\",\"type\":\"bytes4\"}],\"name\":\"facetAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"facetAddress_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facetAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"facetAddresses_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_facet\",\"type\":\"address\"}],\"name\":\"facetFunctionSelectors\",\"outputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"facetFunctionSelectors_\",\"type\":\"bytes4[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facets\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondLoupe.Facet[]\",\"name\":\"facets_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"facetAddress(bytes4)\":{\"details\":\"If facet is not found return address(0).\",\"params\":{\"_functionSelector\":\"The function selector.\"},\"returns\":{\"facetAddress_\":\"The facet address.\"}},\"facetAddresses()\":{\"returns\":{\"facetAddresses_\":\"facetAddresses_\"}},\"facetFunctionSelectors(address)\":{\"params\":{\"_facet\":\"The facet address.\"},\"returns\":{\"facetFunctionSelectors_\":\"facetFunctionSelectors_\"}},\"facets()\":{\"returns\":{\"facets_\":\"Facet\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"facetAddress(bytes4)\":{\"notice\":\"Gets the facet that supports the given selector.\"},\"facetAddresses()\":{\"notice\":\"Get all the facet addresses used by a diamond.\"},\"facetFunctionSelectors(address)\":{\"notice\":\"Gets all the function selectors supported by a specific facet.\"},\"facets()\":{\"notice\":\"Gets all facet addresses and their four byte function selectors.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/interfaces/IDiamondLoupe.sol\":\"IDiamondLoupe\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/connext/interfaces/IDiamondLoupe.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n  /// These functions are expected to be called frequently\\n  /// by tools.\\n\\n  struct Facet {\\n    address facetAddress;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Gets all facet addresses and their four byte function selectors.\\n  /// @return facets_ Facet\\n  function facets() external view returns (Facet[] memory facets_);\\n\\n  /// @notice Gets all the function selectors supported by a specific facet.\\n  /// @param _facet The facet address.\\n  /// @return facetFunctionSelectors_\\n  function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n  /// @notice Get all the facet addresses used by a diamond.\\n  /// @return facetAddresses_\\n  function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n  /// @notice Gets the facet that supports the given selector.\\n  /// @dev If facet is not found return address(0).\\n  /// @param _functionSelector The function selector.\\n  /// @return facetAddress_ The facet address.\\n  function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\",\"keccak256\":\"0xc408c13dc42d9526b1f292bad3f3915efa15c2133f509d90a45422b5f6cf829c\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"facetAddress(bytes4)":{"notice":"Gets the facet that supports the given selector."},"facetAddresses()":{"notice":"Get all the facet addresses used by a diamond."},"facetFunctionSelectors(address)":{"notice":"Gets all the function selectors supported by a specific facet."},"facets()":{"notice":"Gets all facet addresses and their four byte function selectors."}},"version":1}}},"contracts/core/connext/interfaces/IERC165.sol":{"IERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"supportsInterface(bytes4)":{"details":"Interface identification is specified in ERC-165. This function  uses less than 30,000 gas.","params":{"interfaceId":"The interface identifier, as specified in ERC-165"},"returns":{"_0":"`true` if the contract implements `interfaceID` and  `interfaceID` is not 0xffffffff, `false` otherwise"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Interface identification is specified in ERC-165. This function  uses less than 30,000 gas.\",\"params\":{\"interfaceId\":\"The interface identifier, as specified in ERC-165\"},\"returns\":{\"_0\":\"`true` if the contract implements `interfaceID` and  `interfaceID` is not 0xffffffff, `false` otherwise\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"supportsInterface(bytes4)\":{\"notice\":\"Query if a contract implements an interface\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/interfaces/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/connext/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\ninterface IERC165 {\\n  /// @notice Query if a contract implements an interface\\n  /// @param interfaceId The interface identifier, as specified in ERC-165\\n  /// @dev Interface identification is specified in ERC-165. This function\\n  ///  uses less than 30,000 gas.\\n  /// @return `true` if the contract implements `interfaceID` and\\n  ///  `interfaceID` is not 0xffffffff, `false` otherwise\\n  function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xc92e38025a8eff9eafa17be136dd134e8b95060b7a258f840713d2a7d4b7fa85\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"supportsInterface(bytes4)":{"notice":"Query if a contract implements an interface"}},"version":1}}},"contracts/core/connext/interfaces/IPriceOracle.sol":{"IPriceOracle":{"abi":[{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getPriceFromChainlink","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"getPriceFromChainlink(address)":{"params":{"token":"The token to get the price of"},"returns":{"_0":"The asset price mantissa (scaled by 1e18).  Zero means the price is unavailable."}},"getTokenPrice(address)":{"params":{"token":"The token to get the price of"},"returns":{"_0":"The asset price mantissa (scaled by 1e18).  Zero means the price is unavailable."}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getPriceFromChainlink(address)":"856d562d","getTokenPrice(address)":"d02641a0"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPriceFromChainlink\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getPriceFromChainlink(address)\":{\"params\":{\"token\":\"The token to get the price of\"},\"returns\":{\"_0\":\"The asset price mantissa (scaled by 1e18).  Zero means the price is unavailable.\"}},\"getTokenPrice(address)\":{\"params\":{\"token\":\"The token to get the price of\"},\"returns\":{\"_0\":\"The asset price mantissa (scaled by 1e18).  Zero means the price is unavailable.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getPriceFromChainlink(address)\":{\"notice\":\"Get the price of a token from ChainLink\"},\"getTokenPrice(address)\":{\"notice\":\"Get the price of a token\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/interfaces/IPriceOracle.sol\":\"IPriceOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/connext/interfaces/IPriceOracle.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\ninterface IPriceOracle {\\n  /**\\n   * @notice Get the price of a token\\n   * @param token The token to get the price of\\n   * @return The asset price mantissa (scaled by 1e18).\\n   *  Zero means the price is unavailable.\\n   */\\n  function getTokenPrice(address token) external view returns (uint256);\\n\\n  /**\\n   * @notice Get the price of a token from ChainLink\\n   * @param token The token to get the price of\\n   * @return The asset price mantissa (scaled by 1e18).\\n   *  Zero means the price is unavailable.\\n   */\\n  function getPriceFromChainlink(address token) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x7bbaa4b9a32da8fd3dfd468ce4882545182221548744ce06604e1205cb8a2ecb\",\"license\":\"UNLICENSED\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"getPriceFromChainlink(address)":{"notice":"Get the price of a token from ChainLink"},"getTokenPrice(address)":{"notice":"Get the price of a token"}},"version":1}}},"contracts/core/connext/interfaces/IStableSwap.sol":{"IStableSwap":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"fees","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"invariant","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAdminFee","type":"uint256"}],"name":"NewAdminFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newSwapFee","type":"uint256"}],"name":"NewSwapFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newWithdrawFee","type":"uint256"}],"name":"NewWithdrawFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"initialTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"futureTime","type":"uint256"}],"name":"RampA","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"}],"name":"RemoveLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"fees","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"invariant","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"}],"name":"RemoveLiquidityImbalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"lpTokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"boughtId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensBought","type":"uint256"}],"name":"RemoveLiquidityOne","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"currentA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"StopRampA","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensSold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":false,"internalType":"uint128","name":"soldId","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"boughtId","type":"uint128"}],"name":"TokenSwap","type":"event"},{"inputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256","name":"minToMint","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"calculateRemoveLiquidity","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint8","name":"tokenIndex","type":"uint8"}],"name":"calculateRemoveLiquidityOneToken","outputs":[{"internalType":"uint256","name":"availableTokenAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"tokenIndexFrom","type":"uint8"},{"internalType":"uint8","name":"tokenIndexTo","type":"uint8"},{"internalType":"uint256","name":"dx","type":"uint256"}],"name":"calculateSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"assetIn","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"calculateSwapFromAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"tokenIndexFrom","type":"uint8"},{"internalType":"uint8","name":"tokenIndexTo","type":"uint8"},{"internalType":"uint256","name":"dy","type":"uint256"}],"name":"calculateSwapOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"assetIn","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"calculateSwapOutFromAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bool","name":"deposit","type":"bool"}],"name":"calculateTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"index","type":"uint8"}],"name":"getToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"index","type":"uint8"}],"name":"getTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getTokenIndex","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVirtualPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"pooledTokens","type":"address[]"},{"internalType":"uint8[]","name":"decimals","type":"uint8[]"},{"internalType":"string","name":"lpTokenName","type":"string"},{"internalType":"string","name":"lpTokenSymbol","type":"string"},{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"adminFee","type":"uint256"},{"internalType":"address","name":"lpTokenTargetAddress","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256[]","name":"minAmounts","type":"uint256[]"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256","name":"maxBurnAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityImbalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint8","name":"tokenIndex","type":"uint8"},{"internalType":"uint256","name":"minAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityOneToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"tokenIndexFrom","type":"uint8"},{"internalType":"uint8","name":"tokenIndexTo","type":"uint8"},{"internalType":"uint256","name":"dx","type":"uint256"},{"internalType":"uint256","name":"minDy","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"assetIn","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address","name":"assetIn","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"addLiquidity(uint256[],uint256,uint256)":"4d49e87d","calculateRemoveLiquidity(uint256)":"f2fad2b6","calculateRemoveLiquidityOneToken(uint256,uint8)":"342a87a1","calculateSwap(uint8,uint8,uint256)":"a95b089f","calculateSwapFromAddress(address,address,uint256)":"7f41e7ef","calculateSwapOut(uint8,uint8,uint256)":"6b1dc08b","calculateSwapOutFromAddress(address,address,uint256)":"f9a15fb9","calculateTokenAmount(uint256[],bool)":"e6ab2806","getA()":"d46300fd","getToken(uint8)":"82b86600","getTokenBalance(uint8)":"91ceb3eb","getTokenIndex(address)":"66c0bd24","getVirtualPrice()":"e25aa5fa","initialize(address[],uint8[],string,string,uint256,uint256,uint256,address)":"b28cb6dc","removeLiquidity(uint256,uint256[],uint256)":"31cd52b0","removeLiquidityImbalance(uint256[],uint256,uint256)":"84cdd9bc","removeLiquidityOneToken(uint256,uint8,uint256,uint256)":"3e3a1560","swap(uint8,uint8,uint256,uint256,uint256)":"91695586","swapExact(uint256,address,address,uint256,uint256)":"d460f0a2","swapExactOut(uint256,address,address,uint256,uint256)":"5428c117"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"fees\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"}],\"name\":\"AddLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newAdminFee\",\"type\":\"uint256\"}],\"name\":\"NewAdminFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSwapFee\",\"type\":\"uint256\"}],\"name\":\"NewSwapFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWithdrawFee\",\"type\":\"uint256\"}],\"name\":\"NewWithdrawFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"futureTime\",\"type\":\"uint256\"}],\"name\":\"RampA\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"fees\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidityImbalance\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"boughtId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensBought\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidityOne\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"StopRampA\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensSold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensBought\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"soldId\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"boughtId\",\"type\":\"uint128\"}],\"name\":\"TokenSwap\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minToMint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"calculateRemoveLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndex\",\"type\":\"uint8\"}],\"name\":\"calculateRemoveLiquidityOneToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"availableTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"tokenIndexFrom\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexTo\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"dx\",\"type\":\"uint256\"}],\"name\":\"calculateSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"name\":\"calculateSwapFromAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"tokenIndexFrom\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexTo\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"dy\",\"type\":\"uint256\"}],\"name\":\"calculateSwapOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"name\":\"calculateSwapOutFromAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"deposit\",\"type\":\"bool\"}],\"name\":\"calculateTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getA\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"getTokenBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"getTokenIndex\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVirtualPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"pooledTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint8[]\",\"name\":\"decimals\",\"type\":\"uint8[]\"},{\"internalType\":\"string\",\"name\":\"lpTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"lpTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"adminFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"lpTokenTargetAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"maxBurnAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndex\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityOneToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"tokenIndexFrom\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexTo\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"dx\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minDy\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"assetIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExact\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"assetIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/interfaces/IStableSwap.sol\":\"IStableSwap\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/core/connext/interfaces/IXReceiver.sol":{"IXReceiver":{"abi":[{"inputs":[{"internalType":"bytes32","name":"_transferId","type":"bytes32"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_asset","type":"address"},{"internalType":"address","name":"_originSender","type":"address"},{"internalType":"uint32","name":"_origin","type":"uint32"},{"internalType":"bytes","name":"_callData","type":"bytes"}],"name":"xReceive","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"xReceive(bytes32,uint256,address,address,uint32,bytes)":"fd614f41"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_originSender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_origin\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_callData\",\"type\":\"bytes\"}],\"name\":\"xReceive\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/interfaces/IXReceiver.sol\":\"IXReceiver\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/connext/interfaces/IXReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\ninterface IXReceiver {\\n  function xReceive(\\n    bytes32 _transferId,\\n    uint256 _amount,\\n    address _asset,\\n    address _originSender,\\n    uint32 _origin,\\n    bytes memory _callData\\n  ) external returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x02ae47cb6441eb876b47ff35687ddd9f78eae75399af98815ada1ae618a3945c\",\"license\":\"UNLICENSED\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/core/connext/libraries/AmplificationUtils.sol":{"AmplificationUtils":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"initialTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"futureTime","type":"uint256"}],"name":"RampA","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"currentA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"StopRampA","type":"event"}],"devdoc":{"kind":"dev","methods":{},"title":"AmplificationUtils library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ec4057eb594ac83934440b1ae7402ce57806f039c477e35681a22992e173414464736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEC BLOCKHASH JUMPI 0xEB MSIZE 0x4A 0xC8 CODECOPY CALLVALUE DIFFICULTY SIGNEXTEND BYTE 0xE7 BLOCKHASH 0x2C 0xE5 PUSH25 0x6F039C477E35681A22992E173414464736F6C634300081100 CALLER ","sourceMap":"346:3593:101:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;346:3593:101;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ec4057eb594ac83934440b1ae7402ce57806f039c477e35681a22992e173414464736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEC BLOCKHASH JUMPI 0xEB MSIZE 0x4A 0xC8 CODECOPY CALLVALUE DIFFICULTY SIGNEXTEND BYTE 0xE7 BLOCKHASH 0x2C 0xE5 PUSH25 0x6F039C477E35681A22992E173414464736F6C634300081100 CALLER ","sourceMap":"346:3593:101:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_getAPrecise(struct SwapUtils.Swap storage pointer)":"infinite","getA(struct SwapUtils.Swap storage pointer)":"infinite","getAPrecise(struct SwapUtils.Swap storage pointer)":"infinite","rampA(struct SwapUtils.Swap storage pointer,uint256,uint256)":"infinite","stopRampA(struct SwapUtils.Swap storage pointer)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"futureTime\",\"type\":\"uint256\"}],\"name\":\"RampA\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"StopRampA\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"AmplificationUtils library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct. This library assumes the struct is fully validated.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/libraries/AmplificationUtils.sol\":\"AmplificationUtils\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct. This library assumes the struct is fully validated.","version":1}}},"contracts/core/connext/libraries/AssetLogic.sol":{"AssetLogic":{"abi":[{"inputs":[],"name":"AssetLogic__getConfig_notRegistered","type":"error"},{"inputs":[],"name":"AssetLogic__getTokenIndexFromStableSwapPool_notExist","type":"error"},{"inputs":[],"name":"AssetLogic__handleIncomingAsset_feeOnTransferNotSupported","type":"error"},{"inputs":[],"name":"AssetLogic__handleIncomingAsset_nativeAssetNotSupported","type":"error"},{"inputs":[],"name":"AssetLogic__handleOutgoingAsset_notNative","type":"error"},{"inputs":[],"name":"AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist","type":"error"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209e978a0cdf3084c52c4fd1673e22aa7a086ea102387ff29a97d49c1dc0e3865164736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 SWAP8 DUP11 0xC 0xDF ADDRESS DUP5 0xC5 0x2C 0x4F 0xD1 PUSH8 0x3E22AA7A086EA102 CODESIZE PUSH32 0xF29A97D49C1DC0E3865164736F6C634300081100330000000000000000000000 ","sourceMap":"584:20563:102:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;584:20563:102;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209e978a0cdf3084c52c4fd1673e22aa7a086ea102387ff29a97d49c1dc0e3865164736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 SWAP8 DUP11 0xC 0xDF ADDRESS DUP5 0xC5 0x2C 0x4F 0xD1 PUSH8 0x3E22AA7A086EA102 CODESIZE PUSH32 0xF29A97D49C1DC0E3865164736F6C634300081100330000000000000000000000 ","sourceMap":"584:20563:102:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_swapAsset(bytes32,address,address,uint256,uint256)":"infinite","_swapAssetOut(bytes32,address,address,uint256,uint256)":"infinite","calculateCanonicalHash(bytes32,uint32)":"infinite","calculateSlippageBoundary(uint8,uint8,uint256,uint256)":"infinite","calculateSwapFromLocalAssetIfNeeded(bytes32,address,uint256)":"infinite","calculateSwapToLocalAssetIfNeeded(bytes32,address,address,uint256)":"infinite","getCanonicalTokenId(address,struct AppStorage storage pointer)":"infinite","getConfig(bytes32)":"infinite","getLocalAsset(bytes32,bytes32,uint32,struct AppStorage storage pointer)":"infinite","getTokenIndexFromStableSwapPool(bytes32,address)":"infinite","handleIncomingAsset(address,uint256)":"infinite","handleOutgoingAsset(address,address,uint256)":"infinite","isLocalOrigin(address,struct AppStorage storage pointer)":"infinite","normalizeDecimals(uint8,uint8,uint256)":"infinite","swapFromLocalAssetIfNeeded(bytes32,address,uint256,uint256,uint256)":"infinite","swapFromLocalAssetIfNeededForExactOut(bytes32,address,uint256,uint256)":"infinite","swapToLocalAssetIfNeeded(bytes32,address,address,uint256,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AssetLogic__getConfig_notRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__getTokenIndexFromStableSwapPool_notExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_feeOnTransferNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_nativeAssetNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleOutgoingAsset_notNative\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/libraries/AssetLogic.sol\":\"AssetLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/core/connext/libraries/BridgeMessage.sol":{"BridgeMessage":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122096d8599429db30975908b71f8acc983431828f03eeaa1ceaeab5d8d8ca026cd164736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP7 0xD8 MSIZE SWAP5 0x29 0xDB ADDRESS SWAP8 MSIZE ADDMOD 0xB7 0x1F DUP11 0xCC SWAP9 CALLVALUE BALANCE DUP3 DUP16 SUB 0xEE 0xAA SHR 0xEA 0xEA 0xB5 0xD8 0xD8 0xCA MUL PUSH13 0xD164736F6C6343000811003300 ","sourceMap":"230:7940:103:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;230:7940:103;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122096d8599429db30975908b71f8acc983431828f03eeaa1ceaeab5d8d8ca026cd164736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP7 0xD8 MSIZE SWAP5 0x29 0xDB ADDRESS SWAP8 MSIZE ADDMOD 0xB7 0x1F DUP11 0xCC SWAP9 CALLVALUE BALANCE DUP3 DUP16 SUB 0xEE 0xAA SHR 0xEA 0xEA 0xB5 0xD8 0xD8 0xCA MUL PUSH13 0xD164736F6C6343000811003300 ","sourceMap":"230:7940:103:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"action(bytes29)":"infinite","actionType(bytes29)":"infinite","amnt(bytes29)":"infinite","domain(bytes29)":"infinite","evmId(bytes29)":"infinite","formatMessage(bytes29,bytes29)":"infinite","formatTokenId(struct TokenId memory)":"infinite","formatTokenId(uint32,bytes32)":"infinite","formatTransfer(uint256,bytes32)":"infinite","id(bytes29)":"infinite","isTransfer(bytes29)":"infinite","isType(bytes29,enum BridgeMessage.Types)":"infinite","isValidAction(bytes29)":"infinite","isValidMessageLength(bytes29)":"infinite","messageType(bytes29)":"infinite","msgType(bytes29)":"infinite","mustBeMessage(bytes29)":"infinite","tokenId(bytes29)":"infinite","transferId(bytes29)":"infinite","tryAsMessage(bytes29)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/libraries/BridgeMessage.sol\":\"BridgeMessage\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/connext/libraries/BridgeMessage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============ External Imports ============\\nimport {TypedMemView} from \\\"../../../shared/libraries/TypedMemView.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary BridgeMessage {\\n  // ============ Libraries ============\\n\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // ============ Enums ============\\n\\n  // WARNING: do NOT re-write the numbers / order\\n  // of message types in an upgrade;\\n  // will cause in-flight messages to be mis-interpreted\\n  // The Types enum it defines the types of `views` that we use in BridgeMessage. A view\\n  // points to a specific part of the memory and can slice bytes out of it. When we give a `type` to a view,\\n  // we define the structure of the data it points to, so that we can do easy runtime assertions without\\n  // having to fetch the whole data from memory and check for ourselves. In BridgeMessage.sol\\n  // the types of `data` we can have are defined in this enum and may belong to different taxonomies.\\n  // For example, a `Message` includes a `TokenId` and an Action (a `Transfer`).\\n  // The Message is a different TYPE of data than a TokenId or Transfer, as TokenId and Transfer live inside\\n  // the message. For that reason, we define them as different data types and we add them to the same enum\\n  // for ease of use.\\n  enum Types {\\n    Invalid, // 0\\n    TokenId, // 1\\n    Message, // 2\\n    Transfer // 3\\n  }\\n\\n  // ============ Constants ============\\n\\n  uint256 private constant TOKEN_ID_LEN = 36; // 4 bytes domain + 32 bytes id\\n  uint256 private constant IDENTIFIER_LEN = 1;\\n  uint256 private constant TRANSFER_LEN = 65; // 1 byte identifier + 32 bytes amount + 32 bytes transfer id\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Asserts a message is of type `_t`\\n   * @param _view The message\\n   * @param _t The expected type\\n   */\\n  modifier typeAssert(bytes29 _view, Types _t) {\\n    _view.assertType(uint40(_t));\\n    _;\\n  }\\n\\n  // ============ Internal Functions ============\\n\\n  /**\\n   * @notice Checks that Action is valid type\\n   * @param _action The action\\n   * @return TRUE if action is valid\\n   */\\n  function isValidAction(bytes29 _action) internal pure returns (bool) {\\n    return isTransfer(_action);\\n  }\\n\\n  /**\\n   * @notice Checks that view is a valid message length\\n   * @param _view The bytes string\\n   * @return TRUE if message is valid\\n   */\\n  function isValidMessageLength(bytes29 _view) internal pure returns (bool) {\\n    uint256 _len = _view.len();\\n    return _len == TOKEN_ID_LEN + TRANSFER_LEN;\\n  }\\n\\n  /**\\n   * @notice Formats an action message\\n   * @param _tokenId The token ID\\n   * @param _action The action\\n   * @return The formatted message\\n   */\\n  function formatMessage(bytes29 _tokenId, bytes29 _action)\\n    internal\\n    view\\n    typeAssert(_tokenId, Types.TokenId)\\n    returns (bytes memory)\\n  {\\n    require(isValidAction(_action), \\\"!action\\\");\\n    bytes29[] memory _views = new bytes29[](2);\\n    _views[0] = _tokenId;\\n    _views[1] = _action;\\n    return TypedMemView.join(_views);\\n  }\\n\\n  /**\\n   * @notice Returns the type of the message\\n   * @param _view The message\\n   * @return The type of the message\\n   */\\n  function messageType(bytes29 _view) internal pure returns (Types) {\\n    return Types(uint8(_view.typeOf()));\\n  }\\n\\n  /**\\n   * @notice Checks that the message is of the specified type\\n   * @param _type the type to check for\\n   * @param _action The message\\n   * @return True if the message is of the specified type\\n   */\\n  function isType(bytes29 _action, Types _type) internal pure returns (bool) {\\n    return actionType(_action) == uint8(_type) && messageType(_action) == _type;\\n  }\\n\\n  /**\\n   * @notice Checks that the message is of type Transfer\\n   * @param _action The message\\n   * @return True if the message is of type Transfer\\n   */\\n  function isTransfer(bytes29 _action) internal pure returns (bool) {\\n    return isType(_action, Types.Transfer);\\n  }\\n\\n  /**\\n   * @notice Formats Transfer\\n   * @param _amnt The transfer amount\\n   * @param _transferId The unique identifier of the transfer\\n   * @return\\n   */\\n  function formatTransfer(uint256 _amnt, bytes32 _transferId) internal pure returns (bytes29) {\\n    return abi.encodePacked(Types.Transfer, _amnt, _transferId).ref(uint40(Types.Transfer));\\n  }\\n\\n  /**\\n   * @notice Serializes a Token ID struct\\n   * @param _tokenId The token id struct\\n   * @return The formatted Token ID\\n   */\\n  function formatTokenId(TokenId memory _tokenId) internal pure returns (bytes29) {\\n    return formatTokenId(_tokenId.domain, _tokenId.id);\\n  }\\n\\n  /**\\n   * @notice Creates a serialized Token ID from components\\n   * @param _domain The domain\\n   * @param _id The ID\\n   * @return The formatted Token ID\\n   */\\n  function formatTokenId(uint32 _domain, bytes32 _id) internal pure returns (bytes29) {\\n    return abi.encodePacked(_domain, _id).ref(uint40(Types.TokenId));\\n  }\\n\\n  /**\\n   * @notice Retrieves the domain from a TokenID\\n   * @param _tokenId The message\\n   * @return The domain\\n   */\\n  function domain(bytes29 _tokenId) internal pure typeAssert(_tokenId, Types.TokenId) returns (uint32) {\\n    return uint32(_tokenId.indexUint(0, 4));\\n  }\\n\\n  /**\\n   * @notice Retrieves the ID from a TokenID\\n   * @param _tokenId The message\\n   * @return The ID\\n   */\\n  function id(bytes29 _tokenId) internal pure typeAssert(_tokenId, Types.TokenId) returns (bytes32) {\\n    // before = 4 bytes domain\\n    return _tokenId.index(4, 32);\\n  }\\n\\n  /**\\n   * @notice Retrieves the EVM ID\\n   * @param _tokenId The message\\n   * @return The EVM ID\\n   */\\n  function evmId(bytes29 _tokenId) internal pure typeAssert(_tokenId, Types.TokenId) returns (address) {\\n    // before = 4 bytes domain + 12 bytes empty to trim for address\\n    return _tokenId.indexAddress(16);\\n  }\\n\\n  /**\\n   * @notice Retrieves the action identifier from message\\n   * @param _message The action\\n   * @return The message type\\n   */\\n  function msgType(bytes29 _message) internal pure returns (uint8) {\\n    return uint8(_message.indexUint(TOKEN_ID_LEN, 1));\\n  }\\n\\n  /**\\n   * @notice Retrieves the identifier from action\\n   * @param _action The action\\n   * @return The action type\\n   */\\n  function actionType(bytes29 _action) internal pure returns (uint8) {\\n    return uint8(_action.indexUint(0, 1));\\n  }\\n\\n  /**\\n   * @notice Retrieves the amount from a Transfer\\n   * @param _transferAction The message\\n   * @return The amount\\n   */\\n  function amnt(bytes29 _transferAction) internal pure returns (uint256) {\\n    // before = 1 byte identifier = 1 bytes\\n    return _transferAction.indexUint(1, 32);\\n  }\\n\\n  /**\\n   * @notice Retrieves the transfer id from a Transfer\\n   * @param _transferAction The message\\n   * @return The id\\n   */\\n  function transferId(bytes29 _transferAction) internal pure returns (bytes32) {\\n    // before = 1 byte identifier + 32 bytes amount = 33 bytes\\n    return _transferAction.index(33, 32);\\n  }\\n\\n  /**\\n   * @notice Retrieves the token ID from a Message\\n   * @param _message The message\\n   * @return The ID\\n   */\\n  function tokenId(bytes29 _message) internal pure typeAssert(_message, Types.Message) returns (bytes29) {\\n    return _message.slice(0, TOKEN_ID_LEN, uint40(Types.TokenId));\\n  }\\n\\n  /**\\n   * @notice Retrieves the action data from a Message\\n   * @param _message The message\\n   * @return The action\\n   */\\n  function action(bytes29 _message) internal pure typeAssert(_message, Types.Message) returns (bytes29) {\\n    uint256 _actionLen = _message.len() - TOKEN_ID_LEN;\\n    uint40 _type = uint40(msgType(_message));\\n    return _message.slice(TOKEN_ID_LEN, _actionLen, _type);\\n  }\\n\\n  /**\\n   * @notice Converts to a Message\\n   * @param _message The message\\n   * @return The newly typed message\\n   */\\n  function tryAsMessage(bytes29 _message) internal pure returns (bytes29) {\\n    if (isValidMessageLength(_message)) {\\n      return _message.castTo(uint40(Types.Message));\\n    }\\n    return TypedMemView.nullView();\\n  }\\n\\n  /**\\n   * @notice Asserts that the message is of type Message\\n   * @param _view The message\\n   * @return The message\\n   */\\n  function mustBeMessage(bytes29 _view) internal pure returns (bytes29) {\\n    return tryAsMessage(_view).assertValid();\\n  }\\n}\\n\",\"keccak256\":\"0x18f34053f524fbed1c307c08e863d015b96dade86249276eb05fbd5b8ac86a6b\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/core/connext/libraries/Constants.sol":{"Constants":{"abi":[{"inputs":[],"name":"AAVE_REFERRAL_CODE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"A_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BPS_FEE_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_COPY_BYTES","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_DEADLINE_EXTENSION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_NORMALIZED_DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXECUTE_CALLDATA_RESERVE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FUTURE_TIME_BUFFER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOVERNANCE_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_AAVE_REFERRAL_CODE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_LIQUIDITY_FEE_NUMERATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_MAX_ROUTERS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_POOLED_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_A","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ADMIN_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_A_CHANGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_LOOP_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SWAP_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_POOLED_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_RAMP_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_RAMP_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ORACLE_VALID_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_PRECISION_DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"stateVariables":{"A_PRECISION":{"details":"stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`"},"FEE_DENOMINATOR":{"details":"stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`"},"MAX_ADMIN_FEE":{"details":"stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`"},"MAX_LOOP_LIMIT":{"details":"stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`"},"MAX_SWAP_FEE":{"details":"stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`"},"MINIMUM_POOLED_TOKENS":{"details":"stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal` The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While we do not have pools supporting this number of token, allowing a larger value leaves the possibility open to pool multiple stable local/adopted pairs, garnering greater capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the default of 32 and what we will realistically host in pools."},"POOL_PRECISION_DECIMALS":{"details":"stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"61028161003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106101625760003560e01c806360e26bb4116100cd578063c8d5d89e11610086578063c8d5d89e1461022e578063d011f91814610237578063d73792a91461023f578063dab597ea14610167578063f1828d5614610186578063f3de03621461023f57600080fd5b806360e26bb4146101c3578063834f3b7014610207578063ab3d854414610210578063ab5ac061146101cc578063b0b548951461021b578063c86a23ee1461022557600080fd5b8063396984151161011f57806339698415146101d457806343bbce58146101de578063443841ef146101e657806351a7b98f146101ee57806359f491c8146101f65780636037af42146101ff57600080fd5b80630296ab501461016757806305a363de1461018657806306e9481c146101a157806319b693e9146101b957806328c8d10e146101c357806330d356c4146101cc575b600080fd5b61016f601281565b60405160ff90911681526020015b60405180910390f35b61018e600081565b60405161ffff909116815260200161017d565b6101ab6212750081565b60405190815260200161017d565b6101ab6201518081565b6101ab61271081565b6101ab600281565b6101ab620f424081565b6101ab600381565b6101ab603c81565b6101ab600581565b6101ab610e1081565b6101ab601081565b6101ab61270b81565b6101ab6305f5e10081565b6101ab62093a8081565b6101ab61010081565b61018e61010081565b6101ab606481565b6101ab6402540be4008156fea264697066735822122015e61c0d5f38579fb9befd5ab85ef95a4f0208b000af9183255c9fd533f581ec64736f6c63430008110033","opcodes":"PUSH2 0x281 PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x162 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x60E26BB4 GT PUSH2 0xCD JUMPI DUP1 PUSH4 0xC8D5D89E GT PUSH2 0x86 JUMPI DUP1 PUSH4 0xC8D5D89E EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xD011F918 EQ PUSH2 0x237 JUMPI DUP1 PUSH4 0xD73792A9 EQ PUSH2 0x23F JUMPI DUP1 PUSH4 0xDAB597EA EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0xF1828D56 EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0xF3DE0362 EQ PUSH2 0x23F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x60E26BB4 EQ PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x834F3B70 EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0xAB3D8544 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0xAB5AC061 EQ PUSH2 0x1CC JUMPI DUP1 PUSH4 0xB0B54895 EQ PUSH2 0x21B JUMPI DUP1 PUSH4 0xC86A23EE EQ PUSH2 0x225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x39698415 GT PUSH2 0x11F JUMPI DUP1 PUSH4 0x39698415 EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x43BBCE58 EQ PUSH2 0x1DE JUMPI DUP1 PUSH4 0x443841EF EQ PUSH2 0x1E6 JUMPI DUP1 PUSH4 0x51A7B98F EQ PUSH2 0x1EE JUMPI DUP1 PUSH4 0x59F491C8 EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0x6037AF42 EQ PUSH2 0x1FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x296AB50 EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0x5A363DE EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0x6E9481C EQ PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x19B693E9 EQ PUSH2 0x1B9 JUMPI DUP1 PUSH4 0x28C8D10E EQ PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x30D356C4 EQ PUSH2 0x1CC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x16F PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x18E PUSH1 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17D JUMP JUMPDEST PUSH2 0x1AB PUSH3 0x127500 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17D JUMP JUMPDEST PUSH2 0x1AB PUSH3 0x15180 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH2 0x2710 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH3 0xF4240 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH1 0x3 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH1 0x3C DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH1 0x5 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH2 0xE10 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH1 0x10 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH2 0x270B DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH4 0x5F5E100 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH3 0x93A80 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH2 0x100 DUP2 JUMP JUMPDEST PUSH2 0x18E PUSH2 0x100 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH1 0x64 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH5 0x2540BE400 DUP2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ISZERO 0xE6 SHR 0xD 0x5F CODESIZE JUMPI SWAP16 0xB9 0xBE REVERT GAS 0xB8 0x5E 0xF9 GAS 0x4F MUL ADDMOD 0xB0 STOP 0xAF SWAP2 DUP4 0x25 0x5C SWAP16 0xD5 CALLER CREATE2 DUP2 0xEC PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"71:4688:104:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;71:4688:104;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@AAVE_REFERRAL_CODE_29232":{"entryPoint":null,"id":29232,"parameterSlots":0,"returnSlots":0},"@A_PRECISION_29289":{"entryPoint":null,"id":29289,"parameterSlots":0,"returnSlots":0},"@BPS_FEE_DENOMINATOR_29220":{"entryPoint":null,"id":29220,"parameterSlots":0,"returnSlots":0},"@DEFAULT_COPY_BYTES_29251":{"entryPoint":null,"id":29251,"parameterSlots":0,"returnSlots":0},"@DEFAULT_DEADLINE_EXTENSION_29255":{"entryPoint":null,"id":29255,"parameterSlots":0,"returnSlots":0},"@DEFAULT_NORMALIZED_DECIMALS_29247":{"entryPoint":null,"id":29247,"parameterSlots":0,"returnSlots":0},"@EXECUTE_CALLDATA_RESERVE_GAS_29228":{"entryPoint":null,"id":29228,"parameterSlots":0,"returnSlots":0},"@FEE_DENOMINATOR_29270":{"entryPoint":null,"id":29270,"parameterSlots":0,"returnSlots":0},"@FUTURE_TIME_BUFFER_29240":{"entryPoint":null,"id":29240,"parameterSlots":0,"returnSlots":0},"@GOVERNANCE_DELAY_29224":{"entryPoint":null,"id":29224,"parameterSlots":0,"returnSlots":0},"@INITIAL_AAVE_REFERRAL_CODE_29202":{"entryPoint":null,"id":29202,"parameterSlots":0,"returnSlots":0},"@INITIAL_LIQUIDITY_FEE_NUMERATOR_29194":{"entryPoint":null,"id":29194,"parameterSlots":0,"returnSlots":0},"@INITIAL_MAX_ROUTERS_29198":{"entryPoint":null,"id":29198,"parameterSlots":0,"returnSlots":0},"@MAXIMUM_POOLED_TOKENS_29262":{"entryPoint":null,"id":29262,"parameterSlots":0,"returnSlots":0},"@MAX_ADMIN_FEE_29278":{"entryPoint":null,"id":29278,"parameterSlots":0,"returnSlots":0},"@MAX_A_29294":{"entryPoint":null,"id":29294,"parameterSlots":0,"returnSlots":0},"@MAX_A_CHANGE_29297":{"entryPoint":null,"id":29297,"parameterSlots":0,"returnSlots":0},"@MAX_LOOP_LIMIT_29282":{"entryPoint":null,"id":29282,"parameterSlots":0,"returnSlots":0},"@MAX_SWAP_FEE_29274":{"entryPoint":null,"id":29274,"parameterSlots":0,"returnSlots":0},"@MINIMUM_POOLED_TOKENS_29259":{"entryPoint":null,"id":29259,"parameterSlots":0,"returnSlots":0},"@MIN_RAMP_DELAY_29303":{"entryPoint":null,"id":29303,"parameterSlots":0,"returnSlots":0},"@MIN_RAMP_TIME_29300":{"entryPoint":null,"id":29300,"parameterSlots":0,"returnSlots":0},"@ORACLE_VALID_PERIOD_29236":{"entryPoint":null,"id":29236,"parameterSlots":0,"returnSlots":0},"@POOL_PRECISION_DECIMALS_29266":{"entryPoint":null,"id":29266,"parameterSlots":0,"returnSlots":0},"abi_encode_tuple_t_uint16__to_t_uint16__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:599:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"119:87:181","statements":[{"nodeType":"YulAssignment","src":"129:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"141:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"152:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"137:3:181"},"nodeType":"YulFunctionCall","src":"137:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"129:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"171:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"186:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"194:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"182:3:181"},"nodeType":"YulFunctionCall","src":"182:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"164:6:181"},"nodeType":"YulFunctionCall","src":"164:36:181"},"nodeType":"YulExpressionStatement","src":"164:36:181"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"88:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"99:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"110:4:181","type":""}],"src":"14:192:181"},{"body":{"nodeType":"YulBlock","src":"318:89:181","statements":[{"nodeType":"YulAssignment","src":"328:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"340:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"351:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"336:3:181"},"nodeType":"YulFunctionCall","src":"336:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"328:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"370:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"385:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"393:6:181","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"381:3:181"},"nodeType":"YulFunctionCall","src":"381:19:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"363:6:181"},"nodeType":"YulFunctionCall","src":"363:38:181"},"nodeType":"YulExpressionStatement","src":"363:38:181"}]},"name":"abi_encode_tuple_t_uint16__to_t_uint16__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"287:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"298:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"309:4:181","type":""}],"src":"211:196:181"},{"body":{"nodeType":"YulBlock","src":"521:76:181","statements":[{"nodeType":"YulAssignment","src":"531:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"543:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"554:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"539:3:181"},"nodeType":"YulFunctionCall","src":"539:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"531:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"573:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"584:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"566:6:181"},"nodeType":"YulFunctionCall","src":"566:25:181"},"nodeType":"YulExpressionStatement","src":"566:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"490:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"501:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"512:4:181","type":""}],"src":"412:185:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_uint16__to_t_uint16__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600436106101625760003560e01c806360e26bb4116100cd578063c8d5d89e11610086578063c8d5d89e1461022e578063d011f91814610237578063d73792a91461023f578063dab597ea14610167578063f1828d5614610186578063f3de03621461023f57600080fd5b806360e26bb4146101c3578063834f3b7014610207578063ab3d854414610210578063ab5ac061146101cc578063b0b548951461021b578063c86a23ee1461022557600080fd5b8063396984151161011f57806339698415146101d457806343bbce58146101de578063443841ef146101e657806351a7b98f146101ee57806359f491c8146101f65780636037af42146101ff57600080fd5b80630296ab501461016757806305a363de1461018657806306e9481c146101a157806319b693e9146101b957806328c8d10e146101c357806330d356c4146101cc575b600080fd5b61016f601281565b60405160ff90911681526020015b60405180910390f35b61018e600081565b60405161ffff909116815260200161017d565b6101ab6212750081565b60405190815260200161017d565b6101ab6201518081565b6101ab61271081565b6101ab600281565b6101ab620f424081565b6101ab600381565b6101ab603c81565b6101ab600581565b6101ab610e1081565b6101ab601081565b6101ab61270b81565b6101ab6305f5e10081565b6101ab62093a8081565b6101ab61010081565b61018e61010081565b6101ab606481565b6101ab6402540be4008156fea264697066735822122015e61c0d5f38579fb9befd5ab85ef95a4f0208b000af9183255c9fd533f581ec64736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x162 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x60E26BB4 GT PUSH2 0xCD JUMPI DUP1 PUSH4 0xC8D5D89E GT PUSH2 0x86 JUMPI DUP1 PUSH4 0xC8D5D89E EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xD011F918 EQ PUSH2 0x237 JUMPI DUP1 PUSH4 0xD73792A9 EQ PUSH2 0x23F JUMPI DUP1 PUSH4 0xDAB597EA EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0xF1828D56 EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0xF3DE0362 EQ PUSH2 0x23F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x60E26BB4 EQ PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x834F3B70 EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0xAB3D8544 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0xAB5AC061 EQ PUSH2 0x1CC JUMPI DUP1 PUSH4 0xB0B54895 EQ PUSH2 0x21B JUMPI DUP1 PUSH4 0xC86A23EE EQ PUSH2 0x225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x39698415 GT PUSH2 0x11F JUMPI DUP1 PUSH4 0x39698415 EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x43BBCE58 EQ PUSH2 0x1DE JUMPI DUP1 PUSH4 0x443841EF EQ PUSH2 0x1E6 JUMPI DUP1 PUSH4 0x51A7B98F EQ PUSH2 0x1EE JUMPI DUP1 PUSH4 0x59F491C8 EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0x6037AF42 EQ PUSH2 0x1FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x296AB50 EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0x5A363DE EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0x6E9481C EQ PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x19B693E9 EQ PUSH2 0x1B9 JUMPI DUP1 PUSH4 0x28C8D10E EQ PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x30D356C4 EQ PUSH2 0x1CC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x16F PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x18E PUSH1 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17D JUMP JUMPDEST PUSH2 0x1AB PUSH3 0x127500 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x17D JUMP JUMPDEST PUSH2 0x1AB PUSH3 0x15180 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH2 0x2710 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH3 0xF4240 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH1 0x3 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH1 0x3C DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH1 0x5 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH2 0xE10 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH1 0x10 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH2 0x270B DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH4 0x5F5E100 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH3 0x93A80 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH2 0x100 DUP2 JUMP JUMPDEST PUSH2 0x18E PUSH2 0x100 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH1 0x64 DUP2 JUMP JUMPDEST PUSH2 0x1AB PUSH5 0x2540BE400 DUP2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ISZERO 0xE6 SHR 0xD 0x5F CODESIZE JUMPI SWAP16 0xB9 0xBE REVERT GAS 0xB8 0x5E 0xF9 GAS 0x4F MUL ADDMOD 0xB0 STOP 0xAF SWAP2 DUP4 0x25 0x5C SWAP16 0xD5 CALLER CREATE2 DUP2 0xEC PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"71:4688:104:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3085:50;;3133:2;3085:50;;;;;194:4:181;182:17;;;164:36;;152:2;137:18;3085:50:104;;;;;;;;1409:45;;1453:1;1409:45;;;;;393:6:181;381:19;;;363:38;;351:2;336:18;1409:45:104;211:196:181;4658:47:104;;4698:7;4658:47;;;;;566:25:181;;;554:2;539:18;4658:47:104;412:185:181;4709:47:104;;4750:6;4709:47;;1297:61;;1352:6;1297:61;;2811:49;;2859:1;2811:49;;4573:37;;4605:5;4573:37;;1732:46;;1777:1;1732:46;;1577:55;;1623:9;1577:55;;335:47;;381:1;335:47;;2133:57;;2186:4;2133:57;;2864:50;;2912:2;2864:50;;200:63;;258:5;200:63;;3608:42;;3647:3;3608:42;;1094:49;;1137:6;1094:49;;4190:44;;4231:3;4190:44;;2006:47;;2050:3;2006:47;;4528:41;;4566:3;4528:41;;3401:46;;3443:4;3401:46;"},"gasEstimates":{"creation":{"codeDepositCost":"128200","executionCost":"208","totalCost":"128408"},"external":{"AAVE_REFERRAL_CODE()":"234","A_PRECISION()":"223","BPS_FEE_DENOMINATOR()":"202","DEFAULT_COPY_BYTES()":"210","DEFAULT_DEADLINE_EXTENSION()":"290","DEFAULT_NORMALIZED_DECIMALS()":"265","EXECUTE_CALLDATA_RESERVE_GAS()":"291","FEE_DENOMINATOR()":"245","FUTURE_TIME_BUFFER()":"224","GOVERNANCE_DELAY()":"290","INITIAL_AAVE_REFERRAL_CODE()":"298","INITIAL_LIQUIDITY_FEE_NUMERATOR()":"224","INITIAL_MAX_ROUTERS()":"268","MAXIMUM_POOLED_TOKENS()":"312","MAX_A()":"202","MAX_ADMIN_FEE()":"311","MAX_A_CHANGE()":"268","MAX_LOOP_LIMIT()":"312","MAX_SWAP_FEE()":"246","MINIMUM_POOLED_TOKENS()":"313","MIN_RAMP_DELAY()":"269","MIN_RAMP_TIME()":"247","ORACLE_VALID_PERIOD()":"246","POOL_PRECISION_DECIMALS()":"201"}},"methodIdentifiers":{"AAVE_REFERRAL_CODE()":"05a363de","A_PRECISION()":"d011f918","BPS_FEE_DENOMINATOR()":"60e26bb4","DEFAULT_COPY_BYTES()":"c8d5d89e","DEFAULT_DEADLINE_EXTENSION()":"59f491c8","DEFAULT_NORMALIZED_DECIMALS()":"dab597ea","EXECUTE_CALLDATA_RESERVE_GAS()":"28c8d10e","FEE_DENOMINATOR()":"d73792a9","FUTURE_TIME_BUFFER()":"43bbce58","GOVERNANCE_DELAY()":"b0b54895","INITIAL_AAVE_REFERRAL_CODE()":"f1828d56","INITIAL_LIQUIDITY_FEE_NUMERATOR()":"834f3b70","INITIAL_MAX_ROUTERS()":"51a7b98f","MAXIMUM_POOLED_TOKENS()":"6037af42","MAX_A()":"39698415","MAX_ADMIN_FEE()":"f3de0362","MAX_A_CHANGE()":"ab5ac061","MAX_LOOP_LIMIT()":"c86a23ee","MAX_SWAP_FEE()":"ab3d8544","MINIMUM_POOLED_TOKENS()":"30d356c4","MIN_RAMP_DELAY()":"19b693e9","MIN_RAMP_TIME()":"06e9481c","ORACLE_VALID_PERIOD()":"443841ef","POOL_PRECISION_DECIMALS()":"0296ab50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AAVE_REFERRAL_CODE\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"A_PRECISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BPS_FEE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_COPY_BYTES\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_DEADLINE_EXTENSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_NORMALIZED_DECIMALS\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EXECUTE_CALLDATA_RESERVE_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FUTURE_TIME_BUFFER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GOVERNANCE_DELAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_AAVE_REFERRAL_CODE\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_LIQUIDITY_FEE_NUMERATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_MAX_ROUTERS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_POOLED_TOKENS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_A\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_ADMIN_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_A_CHANGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_LOOP_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_SWAP_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINIMUM_POOLED_TOKENS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_RAMP_DELAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_RAMP_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ORACLE_VALID_PERIOD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_PRECISION_DECIMALS\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"A_PRECISION\":{\"details\":\"stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\"},\"FEE_DENOMINATOR\":{\"details\":\"stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\"},\"MAX_ADMIN_FEE\":{\"details\":\"stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\"},\"MAX_LOOP_LIMIT\":{\"details\":\"stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\"},\"MAX_SWAP_FEE\":{\"details\":\"stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\"},\"MINIMUM_POOLED_TOKENS\":{\"details\":\"stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal` The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While we do not have pools supporting this number of token, allowing a larger value leaves the possibility open to pool multiple stable local/adopted pairs, garnering greater capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the default of 32 and what we will realistically host in pools.\"},\"POOL_PRECISION_DECIMALS\":{\"details\":\"stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"AAVE_REFERRAL_CODE()\":{\"notice\":\"Portal referral code\"},\"A_PRECISION()\":{\"notice\":\"constant values used in ramping A calculations\"},\"BPS_FEE_DENOMINATOR()\":{\"notice\":\"Denominator for BPS values\"},\"DEFAULT_COPY_BYTES()\":{\"notice\":\"Bytes of return data copied back when using `excessivelySafeCall`\"},\"DEFAULT_DEADLINE_EXTENSION()\":{\"notice\":\"Valid deadline extension used when swapping (1hr)\"},\"DEFAULT_NORMALIZED_DECIMALS()\":{\"notice\":\"Defalt decimals values are normalized to\"},\"EXECUTE_CALLDATA_RESERVE_GAS()\":{\"notice\":\"Required gas amount to be leftover after passing in `gasleft` when executing calldata (see `_executeCalldata` method).\"},\"FEE_DENOMINATOR()\":{\"notice\":\"the denominator used to calculate admin and LP fees. For example, an LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\"},\"FUTURE_TIME_BUFFER()\":{\"notice\":\"Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\"},\"GOVERNANCE_DELAY()\":{\"notice\":\"Value for delay used on governance\"},\"INITIAL_AAVE_REFERRAL_CODE()\":{\"notice\":\"Sets the initial max routers per transfer\"},\"INITIAL_LIQUIDITY_FEE_NUMERATOR()\":{\"notice\":\"Sets the initial lp fee at 5 bps\"},\"INITIAL_MAX_ROUTERS()\":{\"notice\":\"Sets the initial max routers per transfer\"},\"MAX_ADMIN_FEE()\":{\"notice\":\"Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee. Instead it takes a certain % of the swapFee. Therefore it has no impact on the users but only on the earnings of LPs\"},\"MAX_LOOP_LIMIT()\":{\"notice\":\"constant value used as max loop limit\"},\"MAX_SWAP_FEE()\":{\"notice\":\"Max swap fee is 1% or 100bps of each swap\"},\"MINIMUM_POOLED_TOKENS()\":{\"notice\":\"the precision all pools tokens will be converted to\"},\"ORACLE_VALID_PERIOD()\":{\"notice\":\"Valid period for a price delivered by the price oracle\"},\"POOL_PRECISION_DECIMALS()\":{\"notice\":\"the precision all pools tokens will be converted to\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/libraries/Constants.sol\":\"Constants\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"AAVE_REFERRAL_CODE()":{"notice":"Portal referral code"},"A_PRECISION()":{"notice":"constant values used in ramping A calculations"},"BPS_FEE_DENOMINATOR()":{"notice":"Denominator for BPS values"},"DEFAULT_COPY_BYTES()":{"notice":"Bytes of return data copied back when using `excessivelySafeCall`"},"DEFAULT_DEADLINE_EXTENSION()":{"notice":"Valid deadline extension used when swapping (1hr)"},"DEFAULT_NORMALIZED_DECIMALS()":{"notice":"Defalt decimals values are normalized to"},"EXECUTE_CALLDATA_RESERVE_GAS()":{"notice":"Required gas amount to be leftover after passing in `gasleft` when executing calldata (see `_executeCalldata` method)."},"FEE_DENOMINATOR()":{"notice":"the denominator used to calculate admin and LP fees. For example, an LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)"},"FUTURE_TIME_BUFFER()":{"notice":"Valid wiggle room for future timestamps (3s) used by `setDirectPrice`"},"GOVERNANCE_DELAY()":{"notice":"Value for delay used on governance"},"INITIAL_AAVE_REFERRAL_CODE()":{"notice":"Sets the initial max routers per transfer"},"INITIAL_LIQUIDITY_FEE_NUMERATOR()":{"notice":"Sets the initial lp fee at 5 bps"},"INITIAL_MAX_ROUTERS()":{"notice":"Sets the initial max routers per transfer"},"MAX_ADMIN_FEE()":{"notice":"Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee. Instead it takes a certain % of the swapFee. Therefore it has no impact on the users but only on the earnings of LPs"},"MAX_LOOP_LIMIT()":{"notice":"constant value used as max loop limit"},"MAX_SWAP_FEE()":{"notice":"Max swap fee is 1% or 100bps of each swap"},"MINIMUM_POOLED_TOKENS()":{"notice":"the precision all pools tokens will be converted to"},"ORACLE_VALID_PERIOD()":{"notice":"Valid period for a price delivered by the price oracle"},"POOL_PRECISION_DECIMALS()":{"notice":"the precision all pools tokens will be converted to"}},"version":1}}},"contracts/core/connext/libraries/LibConnextStorage.sol":{"LibConnextStorage":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200d4538db206d3681dfe656dde82a33161fc10e8d84f4d6707475f10b2f6f1b9064736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD GASLIMIT CODESIZE 0xDB KECCAK256 PUSH14 0x3681DFE656DDE82A33161FC10E8D DUP5 DELEGATECALL 0xD6 PUSH17 0x7475F10B2F6F1B9064736F6C6343000811 STOP CALLER ","sourceMap":"10570:149:105:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;10570:149:105;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200d4538db206d3681dfe656dde82a33161fc10e8d84f4d6707475f10b2f6f1b9064736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD GASLIMIT CODESIZE 0xDB KECCAK256 PUSH14 0x3681DFE656DDE82A33161FC10E8D DUP5 DELEGATECALL 0xD6 PUSH17 0x7475F10B2F6F1B9064736F6C6343000811 STOP CALLER ","sourceMap":"10570:149:105:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"connextStorage()":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/libraries/LibConnextStorage.sol\":\"LibConnextStorage\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/core/connext/libraries/LibDiamond.sol":{"LibDiamond":{"abi":[{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"DiamondCut","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"DiamondCutProposed","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamondCut.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamondCut.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"indexed":false,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"DiamondCutRescinded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212204f1dd335da37187770ddb0b9f7f0572268086a1c04026aa70a6dc73203876e4f64736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4F SAR 0xD3 CALLDATALOAD 0xDA CALLDATACOPY XOR PUSH24 0x70DDB0B9F7F0572268086A1C04026AA70A6DC73203876E4F PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"569:12667:106:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;569:12667:106;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212204f1dd335da37187770ddb0b9f7f0572268086a1c04026aa70a6dc73203876e4f64736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4F SAR 0xD3 CALLDATALOAD 0xDA CALLDATACOPY XOR PUSH24 0x70DDB0B9F7F0572268086A1C04026AA70A6DC73203876E4F PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"569:12667:106:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"acceptanceDelay()":"infinite","acceptanceTime(bytes32)":"infinite","addFacet(struct LibDiamond.DiamondStorage storage pointer,address)":"infinite","addFunction(struct LibDiamond.DiamondStorage storage pointer,bytes4,uint96,address)":"infinite","addFunctions(address,bytes4[] memory)":"infinite","contractOwner()":"infinite","diamondCut(struct IDiamondCut.FacetCut memory[] memory,address,bytes memory)":"infinite","diamondStorage()":"infinite","enforceHasContractCode(address,string memory)":"infinite","enforceIsContractOwner()":"infinite","initializeDiamondCut(address,bytes memory)":"infinite","proposeDiamondCut(struct IDiamondCut.FacetCut memory[] memory,address,bytes memory)":"infinite","removeFunction(struct LibDiamond.DiamondStorage storage pointer,address,bytes4)":"infinite","removeFunctions(address,bytes4[] memory)":"infinite","replaceFunctions(address,bytes4[] memory)":"infinite","rescindDiamondCut(struct IDiamondCut.FacetCut memory[] memory,address,bytes memory)":"infinite","setContractOwner(address)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCut\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"DiamondCutProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCutRescinded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/libraries/LibDiamond.sol\":\"LibDiamond\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n  enum FacetCutAction {\\n    Add,\\n    Replace,\\n    Remove\\n  }\\n  // Add=0, Replace=1, Remove=2\\n\\n  struct FacetCut {\\n    address facetAddress;\\n    FacetCutAction action;\\n    bytes4[] functionSelectors;\\n  }\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function proposeDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  /// @notice Add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function diamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n  ///         a function with delegatecall\\n  /// @param _diamondCut Contains the facet addresses and function selectors\\n  /// @param _init The address of the contract or facet to execute _calldata\\n  /// @param _calldata A function call, including function selector and arguments\\n  ///                  _calldata is executed with delegatecall on _init\\n  function rescindDiamondCut(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external;\\n\\n  /**\\n   * @notice Returns the acceptance time for a given proposal\\n   * @param _diamondCut Contains the facet addresses and function selectors\\n   * @param _init The address of the contract or facet to execute _calldata\\n   * @param _calldata A function call, including function selector and arguments _calldata is\\n   * executed with delegatecall on _init\\n   */\\n  function getAcceptanceTime(\\n    FacetCut[] calldata _diamondCut,\\n    address _init,\\n    bytes calldata _calldata\\n  ) external returns (uint256);\\n\\n  event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n  bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n  struct FacetAddressAndPosition {\\n    address facetAddress;\\n    uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n  }\\n\\n  struct FacetFunctionSelectors {\\n    bytes4[] functionSelectors;\\n    uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n  }\\n\\n  struct DiamondStorage {\\n    // maps function selector to the facet address and\\n    // the position of the selector in the facetFunctionSelectors.selectors array\\n    mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n    // maps facet addresses to function selectors\\n    mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n    // facet addresses\\n    address[] facetAddresses;\\n    // Used to query if a contract implements an interface.\\n    // Used to implement ERC-165.\\n    mapping(bytes4 => bool) supportedInterfaces;\\n    // owner of the contract\\n    address contractOwner;\\n    // hash of proposed facets => acceptance time\\n    mapping(bytes32 => uint256) acceptanceTimes;\\n    // acceptance delay for upgrading facets\\n    uint256 acceptanceDelay;\\n  }\\n\\n  function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n    bytes32 position = DIAMOND_STORAGE_POSITION;\\n    assembly {\\n      ds.slot := position\\n    }\\n  }\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  function setContractOwner(address _newOwner) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n    ds.contractOwner = _newOwner;\\n  }\\n\\n  function contractOwner() internal view returns (address contractOwner_) {\\n    contractOwner_ = diamondStorage().contractOwner;\\n  }\\n\\n  function acceptanceDelay() internal view returns (uint256) {\\n    return diamondStorage().acceptanceDelay;\\n  }\\n\\n  function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n    return diamondStorage().acceptanceTimes[_key];\\n  }\\n\\n  function enforceIsContractOwner() internal view {\\n    require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n  }\\n\\n  event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n  function proposeDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n    // included is performed in `diamondCut`, where there is already a loop over facets.\\n    // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n    DiamondStorage storage ds = diamondStorage();\\n    uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n    ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n    emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n  }\\n\\n  event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  function rescindDiamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n    // period or befor the delay elpases\\n    delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n    emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n  }\\n\\n  event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n  // Internal function version of diamondCut\\n  function diamondCut(\\n    IDiamondCut.FacetCut[] memory _diamondCut,\\n    address _init,\\n    bytes memory _calldata\\n  ) internal {\\n    DiamondStorage storage ds = diamondStorage();\\n    bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n    if (ds.facetAddresses.length != 0) {\\n      uint256 time = ds.acceptanceTimes[key];\\n      require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n      // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n      // without going through a proposal window\\n\\n      // NOTE: the only time this will not be set to 0 is when there are no\\n      // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n      // for example).\\n      // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n      // there is no way to update the facet selector mapping to call `diamondCut`.\\n      // Avoiding setting the empty value will save gas on the initial deployment.\\n      delete ds.acceptanceTimes[key];\\n    } // Otherwise, this is the first instance of deployment and it can be set automatically\\n    uint256 len = _diamondCut.length;\\n    for (uint256 facetIndex; facetIndex < len; ) {\\n      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n      if (action == IDiamondCut.FacetCutAction.Add) {\\n        addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n        replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n        removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n      } else {\\n        revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n      }\\n\\n      unchecked {\\n        ++facetIndex;\\n      }\\n    }\\n    emit DiamondCut(_diamondCut, _init, _calldata);\\n    initializeDiamondCut(_init, _calldata);\\n  }\\n\\n  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    uint256 len = _functionSelectors.length;\\n    require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n    uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n    // add new facet address if it does not exist\\n    if (selectorPosition == 0) {\\n      addFacet(ds, _facetAddress);\\n    }\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n      removeFunction(ds, oldFacetAddress, selector);\\n      addFunction(ds, selector, selectorPosition, _facetAddress);\\n      selectorPosition++;\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n    require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n    DiamondStorage storage ds = diamondStorage();\\n    // get the propose and cut selectors -- can never remove these\\n    bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n    bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n    // if function does not exist then do nothing and return\\n    require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n    uint256 len = _functionSelectors.length;\\n    for (uint256 selectorIndex; selectorIndex < len; ) {\\n      bytes4 selector = _functionSelectors[selectorIndex];\\n      require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n      address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n      removeFunction(ds, oldFacetAddress, selector);\\n\\n      unchecked {\\n        ++selectorIndex;\\n      }\\n    }\\n  }\\n\\n  function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n    enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n    ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n    ds.facetAddresses.push(_facetAddress);\\n  }\\n\\n  function addFunction(\\n    DiamondStorage storage ds,\\n    bytes4 _selector,\\n    uint96 _selectorPosition,\\n    address _facetAddress\\n  ) internal {\\n    ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n    ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n  }\\n\\n  function removeFunction(\\n    DiamondStorage storage ds,\\n    address _facetAddress,\\n    bytes4 _selector\\n  ) internal {\\n    require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n    // an immutable function is a function defined directly in a diamond\\n    require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n    // replace selector with last selector, then delete last selector\\n    uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n    uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n    // if not the same then replace _selector with lastSelector\\n    if (selectorPosition != lastSelectorPosition) {\\n      bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n      ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n      ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n    }\\n    // delete the last selector\\n    ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n    delete ds.selectorToFacetAndPosition[_selector];\\n\\n    // if no more selectors for facet address then delete the facet address\\n    if (lastSelectorPosition == 0) {\\n      // replace facet address with last facet address and delete last facet address\\n      uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n      uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n      if (facetAddressPosition != lastFacetAddressPosition) {\\n        address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n        ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n        ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n      }\\n      ds.facetAddresses.pop();\\n      delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n    }\\n  }\\n\\n  function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n    if (_init == address(0)) {\\n      require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n    } else {\\n      require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n      if (_init != address(this)) {\\n        enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n      }\\n      (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n      if (!success) {\\n        if (error.length != 0) {\\n          // bubble up the error\\n          revert(string(error));\\n        } else {\\n          revert(\\\"LibDiamondCut: _init function reverted\\\");\\n        }\\n      }\\n    }\\n  }\\n\\n  function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n    require(_contract.code.length != 0, _errorMessage);\\n  }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/core/connext/libraries/MathUtils.sol":{"MathUtils":{"abi":[],"devdoc":{"kind":"dev","methods":{},"title":"MathUtils library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122036b942d987be0895a163ef1ea8eaf6b48ce57362cb48de527f3548f3525f015d64736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLDATASIZE 0xB9 TIMESTAMP 0xD9 DUP8 0xBE ADDMOD SWAP6 LOG1 PUSH4 0xEF1EA8EA 0xF6 0xB4 DUP13 0xE5 PUSH20 0x62CB48DE527F3548F3525F015D64736F6C634300 ADDMOD GT STOP CALLER ","sourceMap":"233:820:107:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;233:820:107;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122036b942d987be0895a163ef1ea8eaf6b48ce57362cb48de527f3548f3525f015d64736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLDATASIZE 0xB9 TIMESTAMP 0xD9 DUP8 0xBE ADDMOD SWAP6 LOG1 PUSH4 0xEF1EA8EA 0xF6 0xB4 DUP13 0xE5 PUSH20 0x62CB48DE527F3548F3525F015D64736F6C634300 ADDMOD GT STOP CALLER ","sourceMap":"233:820:107:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"difference(uint256,uint256)":"infinite","within1(uint256,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"MathUtils library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"A library to be used in conjunction with SafeMath. Contains functions for calculating differences between two uint256.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/libraries/MathUtils.sol\":\"MathUtils\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"A library to be used in conjunction with SafeMath. Contains functions for calculating differences between two uint256.","version":1}}},"contracts/core/connext/libraries/SwapUtils.sol":{"SwapUtils":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"fees","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"invariant","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"newAdminFee","type":"uint256"}],"name":"NewAdminFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"newSwapFee","type":"uint256"}],"name":"NewSwapFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"}],"name":"RemoveLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"fees","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"invariant","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"}],"name":"RemoveLiquidityImbalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"lpTokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"boughtId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensBought","type":"uint256"}],"name":"RemoveLiquidityOne","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensSold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":false,"internalType":"uint128","name":"soldId","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"boughtId","type":"uint128"}],"name":"TokenSwap","type":"event"}],"devdoc":{"details":"Contracts relying on this library must initialize SwapUtils.Swap struct then use this library for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins. Admin functions should be protected within contracts using this library.","kind":"dev","methods":{},"title":"SwapUtils library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122083623a210a728793aae75f8c25ee877775bac55b93bad9a894823f487142466f64736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP4 PUSH3 0x3A210A PUSH19 0x8793AAE75F8C25EE877775BAC55B93BAD9A894 DUP3 EXTCODEHASH BASEFEE PUSH18 0x42466F64736F6C6343000811003300000000 ","sourceMap":"834:38539:108:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;834:38539:108;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122083623a210a728793aae75f8c25ee877775bac55b93bad9a894823f487142466f64736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP4 PUSH3 0x3A210A PUSH19 0x8793AAE75F8C25EE877775BAC55B93BAD9A894 DUP3 EXTCODEHASH BASEFEE PUSH18 0x42466F64736F6C6343000811003300000000 ","sourceMap":"834:38539:108:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_calculateRemoveLiquidity(uint256[] memory,uint256,uint256)":"infinite","_calculateSwap(struct SwapUtils.Swap storage pointer,uint8,uint8,uint256,uint256[] memory)":"infinite","_calculateSwapInv(struct SwapUtils.Swap storage pointer,uint8,uint8,uint256,uint256[] memory)":"infinite","_calculateWithdrawOneToken(struct SwapUtils.Swap storage pointer,uint256,uint8,uint256)":"infinite","_feePerToken(uint256,uint256)":"infinite","_getAPrecise(struct SwapUtils.Swap storage pointer)":"infinite","_xp(struct SwapUtils.Swap storage pointer)":"infinite","_xp(uint256[] memory,uint256[] memory)":"infinite","addLiquidity(struct SwapUtils.Swap storage pointer,uint256[] memory,uint256)":"infinite","calculateRemoveLiquidity(struct SwapUtils.Swap storage pointer,uint256)":"infinite","calculateSwap(struct SwapUtils.Swap storage pointer,uint8,uint8,uint256)":"infinite","calculateSwapInv(struct SwapUtils.Swap storage pointer,uint8,uint8,uint256)":"infinite","calculateTokenAmount(struct SwapUtils.Swap storage pointer,uint256[] calldata,bool)":"infinite","calculateWithdrawOneToken(struct SwapUtils.Swap storage pointer,uint256,uint8)":"infinite","calculateWithdrawOneTokenDY(struct SwapUtils.Swap storage pointer,uint8,uint256,uint256)":"infinite","exists(struct SwapUtils.Swap storage pointer)":"infinite","getAdminBalance(struct SwapUtils.Swap storage pointer,uint256)":"infinite","getD(uint256[] memory,uint256)":"infinite","getVirtualPrice(struct SwapUtils.Swap storage pointer)":"infinite","getY(uint256,uint8,uint8,uint256,uint256[] memory)":"infinite","getYD(uint256,uint8,uint256[] memory,uint256)":"infinite","removeLiquidity(struct SwapUtils.Swap storage pointer,uint256,uint256[] calldata)":"infinite","removeLiquidityImbalance(struct SwapUtils.Swap storage pointer,uint256[] memory,uint256)":"infinite","removeLiquidityOneToken(struct SwapUtils.Swap storage pointer,uint256,uint8,uint256)":"infinite","setAdminFee(struct SwapUtils.Swap storage pointer,uint256)":"infinite","setSwapFee(struct SwapUtils.Swap storage pointer,uint256)":"infinite","swap(struct SwapUtils.Swap storage pointer,uint8,uint8,uint256,uint256)":"infinite","swapInternal(struct SwapUtils.Swap storage pointer,uint8,uint8,uint256,uint256)":"infinite","swapInternalOut(struct SwapUtils.Swap storage pointer,uint8,uint8,uint256,uint256)":"infinite","swapOut(struct SwapUtils.Swap storage pointer,uint8,uint8,uint256,uint256)":"infinite","withdrawAdminFees(struct SwapUtils.Swap storage pointer,address)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"fees\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"}],\"name\":\"AddLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newAdminFee\",\"type\":\"uint256\"}],\"name\":\"NewAdminFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSwapFee\",\"type\":\"uint256\"}],\"name\":\"NewSwapFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"fees\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidityImbalance\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"boughtId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensBought\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidityOne\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensSold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensBought\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"soldId\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"boughtId\",\"type\":\"uint128\"}],\"name\":\"TokenSwap\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Contracts relying on this library must initialize SwapUtils.Swap struct then use this library for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins. Admin functions should be protected within contracts using this library.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"SwapUtils library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/libraries/SwapUtils.sol\":\"SwapUtils\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.","version":1}}},"contracts/core/connext/libraries/SwapUtilsExternal.sol":{"SwapUtilsExternal":{"abi":[{"inputs":[],"name":"AssetLogic__handleIncomingAsset_feeOnTransferNotSupported","type":"error"},{"inputs":[],"name":"AssetLogic__handleIncomingAsset_nativeAssetNotSupported","type":"error"},{"inputs":[],"name":"AssetLogic__handleOutgoingAsset_notNative","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"fees","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"invariant","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAdminFee","type":"uint256"}],"name":"NewAdminFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newSwapFee","type":"uint256"}],"name":"NewSwapFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"initialTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"futureTime","type":"uint256"}],"name":"RampA","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"}],"name":"RemoveLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"fees","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"invariant","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"}],"name":"RemoveLiquidityImbalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"lpTokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpTokenSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"boughtId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensBought","type":"uint256"}],"name":"RemoveLiquidityOne","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"currentA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"StopRampA","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensSold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":false,"internalType":"uint128","name":"soldId","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"boughtId","type":"uint128"}],"name":"TokenSwap","type":"event"},{"inputs":[{"internalType":"uint256[]","name":"xp","type":"uint256[]"},{"internalType":"uint256","name":"a","type":"uint256"}],"name":"getD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"preciseA","type":"uint256"},{"internalType":"uint8","name":"tokenIndexFrom","type":"uint8"},{"internalType":"uint8","name":"tokenIndexTo","type":"uint8"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256[]","name":"xp","type":"uint256[]"}],"name":"getY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint8","name":"tokenIndex","type":"uint8"},{"internalType":"uint256[]","name":"xp","type":"uint256[]"},{"internalType":"uint256","name":"d","type":"uint256"}],"name":"getYD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}],"devdoc":{"details":"Contracts relying on this library must initialize SwapUtils.Swap struct then use this library for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins. Admin functions should be protected within contracts using this library.","kind":"dev","methods":{"addLiquidity(SwapUtilsExternal.Swap storage,uint256[],uint256)":{"params":{"amounts":"the amounts of each token to add, in their native precision","minToMint":"the minimum LP tokens adding this amount of liquidity should mint, otherwise revert. Handy for front-running mitigation allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.","self":"Swap struct to read from and write to"},"returns":{"_0":"amount of LP token user received"}},"calculateRemoveLiquidity(SwapUtilsExternal.Swap storage,uint256)":{"params":{"amount":"the amount of LP tokens that would to be burned on withdrawal"},"returns":{"_0":"array of amounts of tokens user will receive"}},"calculateSwap(SwapUtilsExternal.Swap storage,uint8,uint8,uint256)":{"params":{"dx":"the number of tokens to sell. If the token charges a fee on transfers, use the amount that gets transferred after the fee.","self":"Swap struct to read from","tokenIndexFrom":"the token to sell","tokenIndexTo":"the token to buy"},"returns":{"dy":"the number of tokens the user will get"}},"calculateSwapInv(SwapUtilsExternal.Swap storage,uint8,uint8,uint256)":{"params":{"dy":"the number of tokens to buy.","self":"Swap struct to read from","tokenIndexFrom":"the token to sell","tokenIndexTo":"the token to buy"},"returns":{"dx":"the number of tokens the user have to transfer + fee"}},"calculateTokenAmount(SwapUtilsExternal.Swap storage,uint256[],bool)":{"details":"This shouldn't be used outside frontends for user estimates.","params":{"amounts":"an array of token amounts to deposit or withdrawal, corresponding to pooledTokens. The amount should be in each pooled token's native precision. If a token charges a fee on transfers, use the amount that gets transferred after the fee.","deposit":"whether this is a deposit or a withdrawal","self":"Swap struct to read from"},"returns":{"_0":"if deposit was true, total amount of lp token that will be minted and if deposit was false, total amount of lp token that will be burned"}},"calculateWithdrawOneToken(SwapUtilsExternal.Swap storage,uint256,uint8)":{"params":{"self":"Swap struct to read from","tokenAmount":"the amount to withdraw in the pool's precision","tokenIndex":"which token will be withdrawn"},"returns":{"_0":"the amount of token user will receive"}},"calculateWithdrawOneTokenDY(SwapUtilsExternal.Swap storage,uint8,uint256,uint256)":{"params":{"self":"Swap struct to read from","tokenAmount":"the amount to withdraw in the pools precision","tokenIndex":"which token will be withdrawn"},"returns":{"_0":"the d and the new y after withdrawing one token"}},"getA(SwapUtilsExternal.Swap storage)":{"details":"See the StableSwap paper for details","params":{"self":"Swap struct to read from"},"returns":{"_0":"A parameter"}},"getAPrecise(SwapUtilsExternal.Swap storage)":{"details":"See the StableSwap paper for details","params":{"self":"Swap struct to read from"},"returns":{"_0":"A parameter in its raw precision form"}},"getAdminBalance(SwapUtilsExternal.Swap storage,uint256)":{"params":{"index":"Index of the pooled token","self":"Swap struct to read from"},"returns":{"_0":"admin balance in the token's precision"}},"getD(uint256[],uint256)":{"params":{"a":"the amplification coefficient * n ** (n - 1) in Constants.A_PRECISION. See the StableSwap paper for details","xp":"a precision-adjusted set of pool balances. Array should be the same cardinality as the pool."},"returns":{"_0":"the invariant, at the precision of the pool"}},"getVirtualPrice(SwapUtilsExternal.Swap storage)":{"params":{"self":"Swap struct to read from"},"returns":{"_0":"the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS"}},"getY(uint256,uint8,uint8,uint256,uint256[])":{"params":{"preciseA":"precise form of amplification coefficient","tokenIndexFrom":"index of FROM token","tokenIndexTo":"index of TO token","x":"the new total amount of FROM token","xp":"balances of the tokens in the pool"},"returns":{"_0":"the amount of TO token that should remain in the pool"}},"getYD(uint256,uint8,uint256[],uint256)":{"details":"This is accomplished via solving the invariant iteratively. See the StableSwap paper and Curve.fi implementation for further details. x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A) x_1**2 + b*x_1 = c x_1 = (x_1**2 + c) / (2*x_1 + b)","params":{"a":"the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.","d":"the stableswap invariant","tokenIndex":"Index of token we are calculating for.","xp":"a precision-adjusted set of pool balances. Array should be the same cardinality as the pool."},"returns":{"_0":"the price of the token, in the same precision as in xp"}},"rampA(SwapUtilsExternal.Swap storage,uint256,uint256)":{"params":{"futureA_":"the new A to ramp towards","futureTime_":"timestamp when the new A should be reached","self":"Swap struct to update"}},"removeLiquidity(SwapUtilsExternal.Swap storage,uint256,uint256[])":{"details":"Liquidity can always be removed, even when the pool is paused.","params":{"amount":"the amount of LP tokens to burn","minAmounts":"the minimum amounts of each token in the pool acceptable for this burn. Useful as a front-running mitigation","self":"Swap struct to read from and write to"},"returns":{"_0":"amounts of tokens the user received"}},"removeLiquidityImbalance(SwapUtilsExternal.Swap storage,uint256[],uint256)":{"params":{"amounts":"how much of each token to withdraw","maxBurnAmount":"the max LP token provider is willing to pay to remove liquidity. Useful as a front-running mitigation.","self":"Swap struct to read from and write to"},"returns":{"_0":"actual amount of LP tokens burned in the withdrawal"}},"removeLiquidityOneToken(SwapUtilsExternal.Swap storage,uint256,uint8,uint256)":{"params":{"minAmount":"the minimum amount to withdraw, otherwise revert","self":"Swap struct to read from and write to","tokenAmount":"the amount of the lp tokens to burn","tokenIndex":"the index of the token you want to receive"},"returns":{"_0":"amount chosen token that user received"}},"setAdminFee(SwapUtilsExternal.Swap storage,uint256)":{"details":"adminFee cannot be higher than 100% of the swap fee","params":{"newAdminFee":"new admin fee to be applied on future transactions","self":"Swap struct to update"}},"setSwapFee(SwapUtilsExternal.Swap storage,uint256)":{"details":"fee cannot be higher than 1% of each swap","params":{"newSwapFee":"new swap fee to be applied on future transactions","self":"Swap struct to update"}},"stopRampA(SwapUtilsExternal.Swap storage)":{"params":{"self":"Swap struct to update"}},"swap(SwapUtilsExternal.Swap storage,uint8,uint8,uint256,uint256)":{"params":{"dx":"the amount of tokens the user wants to sell","minDy":"the min amount the user would like to receive, or revert.","self":"Swap struct to read from and write to","tokenIndexFrom":"the token the user wants to sell","tokenIndexTo":"the token the user wants to buy"},"returns":{"_0":"amount of token user received on swap"}},"swapOut(SwapUtilsExternal.Swap storage,uint8,uint8,uint256,uint256)":{"params":{"dy":"the amount of tokens the user wants to buy","maxDx":"the max amount the user would like to send.","self":"Swap struct to read from and write to","tokenIndexFrom":"the token the user wants to sell","tokenIndexTo":"the token the user wants to buy"},"returns":{"_0":"amount of token user have to transfer on swap"}},"withdrawAdminFees(SwapUtilsExternal.Swap storage,address)":{"params":{"self":"Swap struct to withdraw fees from","to":"Address to send the fees to"}}},"title":"SwapUtilsExternal library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"614a2661003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106101625760003560e01c806380ba0f2d116100cd578063b92fa35c11610086578063b92fa35c14610355578063e07805aa14610368578063e5b994c514610388578063f2042939146103a8578063f43dee53146103c8578063fc784184146103db57600080fd5b806380ba0f2d146102c957806384eeef27146102dc5780638be1e523146102ef5780638cc122bb146103025780639cbd240614610315578063ae3feedc1461033557600080fd5b806359d9996a1161011f57806359d9996a1461021657806367487f2a146102365780636967280a146102565780636fbb250c1461026957806376a3b67c1461029657806377b83d30146102a957600080fd5b806308bbaa23146101675780631ce9046f1461018957806322b1b5f6146101af57806322b2b607146101c25780632f4998ad146101d557806338e630de146101e8575b600080fd5b81801561017357600080fd5b506101876101823660046141a4565b6103fb565b005b61019c6101973660046141a4565b610488565b6040519081526020015b60405180910390f35b61019c6101bd3660046141c6565b6104d7565b61019c6101d036600461423b565b6104ee565b61019c6101e33660046142af565b610779565b6101fb6101f63660046142f3565b6107e4565b604080519384526020840192909252908201526060016101a6565b81801561022257600080fd5b506101876102313660046141a4565b610af0565b81801561024257600080fd5b5061019c6102513660046143d3565b610b6f565b61019c610264366004614422565b61134e565b81801561027557600080fd5b50610289610284366004614480565b61153d565b6040516101a691906144d2565b61019c6102a4366004614516565b6118e6565b8180156102b557600080fd5b5061019c6102c43660046143d3565b611a93565b61019c6102d736600461455a565b612298565b61019c6102ea3660046145cb565b6124b9565b61019c6102fd3660046141c6565b612540565b6102896103103660046141a4565b61260e565b81801561032157600080fd5b50610187610330366004614600565b6126ec565b81801561034157600080fd5b5061019c61035036600461463c565b612792565b61019c6103633660046142af565b612ae9565b81801561037457600080fd5b5061019c610383366004614669565b612b4a565b81801561039457600080fd5b506101876103a33660046141c6565b612f1d565b8180156103b457600080fd5b5061019c6103c3366004614669565b612fce565b61019c6103d63660046141c6565b613331565b8180156103e757600080fd5b506101876103f63660046146b7565b61333c565b61040b6402540be40060016146f9565b81106104495760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b60448201526064015b60405180910390fd5b600582018190556040518181527fab599d640ca80cde2b09b128a4154a8dfe608cb80f4c9399c8b954b01fd35f38906020015b60405180910390a15050565b600782015460009082106104ae5760405162461bcd60e51b81526004016104409061470c565b82600a0182815481106104c3576104c3614738565b906000526020600020015490505b92915050565b600060646104e483613597565b6104d1919061474e565b6000806104fa86613597565b905060008660090180548060200260200160405190810160405280929190818152602001828054801561054c57602002820191906000526020600020905b815481526020019060010190808311610538575b505050505090506000876008018054806020026020016040519081016040528092919081815260200182805480156105a357602002820191906000526020600020905b81548152602001906001019080831161058f575b5050505050905060008251905060006105c56105bf85856135dd565b866118e6565b905060005b8281101561069c578715610638578989828181106105ea576105ea614738565b9050602002013585828151811061060357610603614738565b602002602001015161061591906146f9565b85828151811061062757610627614738565b602002602001018181525050610694565b89898281811061064a5761064a614738565b9050602002013585828151811061066357610663614738565b60200260200101516106759190614770565b85828151811061068757610687614738565b6020026020010181815250505b6001016105ca565b5060006106b26106ac86866135dd565b876118e6565b905060008b60060160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072f9190614783565b905088156107655782816107438285614770565b61074d919061479c565b610757919061474e565b975050505050505050610771565b82816107438483614770565b949350505050565b60006107da85858585896009018054806020026020016040519081016040528092919081815260200182805480156107d057602002820191906000526020600020905b8154815260200190600101908083116107bc575b50505050506136e7565b5095945050505050565b6000806000806107f388613888565b905080518760ff16106108185760405162461bcd60e51b81526004016104409061470c565b60006040518060a00160405280600081526020016000815260200160008152602001600081526020016000815250905061085189613597565b608082018190526108639083906118e6565b8082528690610872908961479c565b61087c919061474e565b81516108889190614770565b60208201528151829060ff8a169081106108a4576108a4614738565b60200260200101518711156108ef5760405162461bcd60e51b81526020600482015260116024820152706578636565647320617661696c61626c6560781b6044820152606401610440565b61090381608001518984846020015161134e565b604082015281516000906001600160401b038111156109245761092461432e565b60405190808252806020026020018201604052801561094d578160200160208202803683370190505b50905061095f8a600401548451613938565b6060830152825160005b81811015610a3c57600085828151811061098557610985614738565b602002602001015190506402540be40085606001518d60ff1684146109ce57865160208801516109b5908561479c565b6109bf919061474e565b6109c99084614770565b6109f8565b6040870151875160208901516109e4908661479c565b6109ee919061474e565b6109f89190614770565b610a02919061479c565b610a0c919061474e565b610a169082614770565b848381518110610a2857610a28614738565b602090810291909101015250600101610969565b506000610a5384608001518c85876020015161134e565b838c60ff1681518110610a6857610a68614738565b6020026020010151610a7a9190614770565b90508b6008018b60ff1681548110610a9457610a94614738565b9060005260206000200154600182610aac9190614770565b610ab6919061474e565b9050808460400151868d60ff1681518110610ad357610ad3614738565b602002602001015197509750975050505050509450945094915050565b610aff6305f5e10060016146f9565b8110610b385760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401610440565b600482018190556040518181527fd88ea5155021c6f8dafa1a741e173f595cdf77ce7c17d43342131d7f06afdfe59060200161047c565b60078301548251600091908114610bc15760405162461bcd60e51b81526020600482015260166024820152756d69736d6174636820706f6f6c656420746f6b656e7360501b6044820152606401610440565b6000604051806101000160405280600081526020016000815260200160008152602001610bed88613597565b81526020018760060160009054906101000a90046001600160a01b03166001600160a01b031681526020016000815260200187600901805480602002602001604051908101604052809291908181526020018280548015610c6d57602002820191906000526020600020905b815481526020019060010190808311610c59575b5050505050815260200187600801805480602002602001604051908101604052809291908181526020018280548015610cc557602002820191906000526020600020905b815481526020019060010190808311610cb1575b5050505050815250905080608001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d359190614783565b60a0820181905215610d6357610d60610d568260c001518360e001516135dd565b82606001516118e6565b81525b6000826001600160401b03811115610d7d57610d7d61432e565b604051908082528060200260200182016040528015610da6578160200160208202803683370190505b50905060005b83811015610f055760a0830151151580610de05750868181518110610dd357610dd3614738565b6020026020010151600014155b610e215760405162461bcd60e51b815260206004820152601260248201527121737570706c7920616c6c20746f6b656e7360701b6044820152606401610440565b868181518110610e3357610e33614738565b6020026020010151600014610e9e576000886007018281548110610e5957610e59614738565b9060005260206000200160009054906101000a90046001600160a01b03169050610e9c81898481518110610e8f57610e8f614738565b6020026020010151613964565b505b868181518110610eb057610eb0614738565b60200260200101518360c001518281518110610ece57610ece614738565b6020026020010151610ee091906146f9565b828281518110610ef257610ef2614738565b6020908102919091010152600101610dac565b50610f21610f17828460e001516135dd565b83606001516118e6565b60208301819052825110610f6b5760405162461bcd60e51b8152602060048201526011602482015270442073686f756c6420696e63726561736560781b6044820152606401610440565b602082015160408301526000836001600160401b03811115610f8f57610f8f61432e565b604051908082528060200260200182016040528015610fb8578160200160208202803683370190505b5090508260a001516000146111e7576000610fd7896004015486613938565b905060005b858110156111c057600085600001518660c00151838151811061100157611001614738565b60200260200101518760200151611018919061479c565b611022919061474e565b90506402540be40061105686848151811061103f5761103f614738565b602002602001015183613aaf90919063ffffffff16565b611060908561479c565b61106a919061474e565b84838151811061107c5761107c614738565b60200260200101818152505060006402540be4008c600501548685815181106110a7576110a7614738565b60200260200101516110b9919061479c565b6110c3919061474e565b9050808684815181106110d8576110d8614738565b60200260200101516110ea9190614770565b8c60090184815481106110ff576110ff614738565b9060005260206000200181905550808c600a01848154811061112357611123614738565b906000526020600020015461113891906146f9565b8c600a01848154811061114d5761114d614738565b906000526020600020018190555084838151811061116d5761116d614738565b602002602001015186848151811061118757611187614738565b60200260200101516111999190614770565b8684815181106111ab576111ab614738565b60209081029190910101525050600101610fdc565b506111dc6111d2848660e001516135dd565b85606001516118e6565b6040850152506111fe565b81516111fc9060098a01906020850190614144565b505b60008360a0015160000361121757506020830151611245565b835160a0850151604086015161122e908390614770565b611238919061479c565b611242919061474e565b90505b868110156112825760405162461bcd60e51b815260206004820152600a60248201526936b4b73a101e1036b4b760b11b6044820152606401610440565b60808401516040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b1580156112d057600080fd5b505af11580156112e4573d6000803e3d6000fd5b50505050336001600160a01b03167f189c623b666b1b45b83d7178f39b8c087cb09774317ca2f53c2d3c3726f222a289848760200151858960a0015161132a91906146f9565b60405161133a94939291906147ee565b60405180910390a298975050505050505050565b815160009060ff851681116113975760405162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08199bdd5b99608a1b6044820152606401610440565b826000806113a5848a61479c565b905060005b84811015611427578860ff16811461141f578781815181106113ce576113ce614738565b6020026020010151836113e191906146f9565b9250848882815181106113f6576113f6614738565b6020026020010151611408919061479c565b611412888661479c565b61141c919061474e565b93505b6001016113aa565b50611432848261479c565b606461143e888661479c565b611448919061479c565b611452919061474e565b925060008161146260648961479c565b61146c919061474e565b61147690846146f9565b9050600087815b6101008110156114f4578192508984836002611499919061479c565b6114a391906146f9565b6114ad9190614770565b876114b8848061479c565b6114c291906146f9565b6114cc919061474e565b91506114d88284613ad4565b156114ec5750965061077195505050505050565b60010161147d565b5060405162461bcd60e51b815260206004820152601e60248201527f417070726f78696d6174696f6e20646964206e6f7420636f6e766572676500006044820152606401610440565b60068401546040516370a0823160e01b81523360048201526060916001600160a01b03169081906370a0823190602401602060405180830381865afa15801561158a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ae9190614783565b8511156115cd5760405162461bcd60e51b815260040161044090614827565b60078601548381146116175760405162461bcd60e51b81526020600482015260136024820152726d69736d6174636820706f6f6c546f6b656e7360681b6044820152606401610440565b60008760090180548060200260200160405190810160405280929190818152602001828054801561166757602002820191906000526020600020905b815481526020019060010190808311611653575b505050505090506000836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d29190614783565b905060006116e1838a84613aea565b805190915060005b818110156118315789898281811061170357611703614738565b9050602002013583828151811061171c5761171c614738565b602002602001015110156117725760405162461bcd60e51b815260206004820152601a60248201527f616d6f756e74735b695d203c206d696e416d6f756e74735b695d0000000000006044820152606401610440565b82818151811061178457611784614738565b602002602001015185828151811061179e5761179e614738565b60200260200101516117b09190614770565b8c60090182815481106117c5576117c5614738565b90600052602060002001819055506118298c60070182815481106117eb576117eb614738565b9060005260206000200160009054906101000a90046001600160a01b03163385848151811061181c5761181c614738565b6020026020010151613bda565b6001016116e9565b5060405163079cc67960e41b8152336004820152602481018b90526001600160a01b038716906379cc679090604401600060405180830381600087803b15801561187a57600080fd5b505af115801561188e573d6000803e3d6000fd5b503392507f88d38ed598fdd809c2bf01ee49cd24b7fdabf379a83d29567952b60324d58cef91508490506118c28d87614770565b6040516118d092919061484e565b60405180910390a2509998505050505050505050565b815160009081805b828110156119255785818151811061190857611908614738565b60200260200101518261191b91906146f9565b91506001016118ee565b5080600003611939576000925050506104d1565b60008181611947858861479c565b905060005b610100811015611a54578260005b878110156119a557878b828151811061197557611975614738565b6020026020010151611987919061479c565b611991868461479c565b61199b919061474e565b915060010161195a565b50839450808760016119b791906146f9565b6119c1919061479c565b6064856119ce8287614770565b6119d8919061479c565b6119e2919061474e565b6119ec91906146f9565b846119f7898461479c565b6064611a038a8861479c565b611a0d919061474e565b611a1791906146f9565b611a21919061479c565b611a2b919061474e565b9350611a378486613ad4565b15611a4b57839750505050505050506104d1565b5060010161194c565b5060405162461bcd60e51b81526020600482015260136024820152724420646f6573206e6f7420636f6e766572676560681b6044820152606401610440565b600080604051806101000160405280600081526020016000815260200160008152602001611ac087613597565b81526020018660060160009054906101000a90046001600160a01b03166001600160a01b031681526020016000815260200186600901805480602002602001604051908101604052809291908181526020018280548015611b4057602002820191906000526020600020905b815481526020019060010190808311611b2c575b5050505050815260200186600801805480602002602001604051908101604052809291908181526020018280548015611b9857602002820191906000526020600020905b815481526020019060010190808311611b84575b5050505050815250905080608001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c089190614783565b60a082015260078501548451808214611c5a5760405162461bcd60e51b81526020600482015260146024820152736d69736d6174636820706f6f6c20746f6b656e7360601b6044820152606401610440565b60808301516040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc89190614783565b8511158015611cd657508415155b611cf25760405162461bcd60e51b815260040161044090614827565b6000611d02886004015484613938565b90506000836001600160401b03811115611d1e57611d1e61432e565b604051908082528060200260200182016040528015611d47578160200160208202803683370190505b5090506000846001600160401b03811115611d6457611d6461432e565b604051908082528060200260200182016040528015611d8d578160200160208202803683370190505b509050611daf611da58760c001518860e001516135dd565b87606001516118e6565b865260005b85811015611ea057898181518110611dce57611dce614738565b60200260200101518760c001518281518110611dec57611dec614738565b60200260200101511015611e425760405162461bcd60e51b815260206004820152601c60248201527f7769746864726177206d6f7265207468616e20617661696c61626c65000000006044820152606401610440565b898181518110611e5457611e54614738565b60200260200101518760c001518281518110611e7257611e72614738565b602002602001015103828281518110611e8d57611e8d614738565b6020908102919091010152600101611db4565b50611eb2611da5828860e001516135dd565b602087015260005b8581101561208c57600087600001518860c001518381518110611edf57611edf614738565b60200260200101518960200151611ef6919061479c565b611f00919061474e565b90506000611f1984848151811061103f5761103f614738565b90506402540be400611f2b828861479c565b611f35919061474e565b858481518110611f4757611f47614738565b602002602001018181525050505060006402540be4008c60050154858481518110611f7457611f74614738565b6020026020010151611f86919061479c565b611f90919061474e565b905080838381518110611fa557611fa5614738565b6020026020010151611fb79190614770565b8c6009018381548110611fcc57611fcc614738565b9060005260206000200181905550808c600a018381548110611ff057611ff0614738565b906000526020600020015461200591906146f9565b8c600a01838154811061201a5761201a614738565b906000526020600020018190555083828151811061203a5761203a614738565b602002602001015183838151811061205457612054614738565b60200260200101516120669190614770565b83838151811061207857612078614738565b602090810291909101015250600101611eba565b5061209e611da5828860e001516135dd565b60408701819052865160a08801516000935090916120bc9083614770565b6120c6919061479c565b6120d0919061474e565b9050806000036121115760405162461bcd60e51b815260206004820152600c60248201526b085e995c9bc8185b5bdd5b9d60a21b6044820152606401610440565b61211c8160016146f9565b90508781111561216e5760405162461bcd60e51b815260206004820152601b60248201527f746f6b656e416d6f756e74203e206d61784275726e416d6f756e7400000000006044820152606401610440565b608086015160405163079cc67960e41b8152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b1580156121bc57600080fd5b505af11580156121d0573d6000803e3d6000fd5b5050505060005b85811015612230576122288b60070182815481106121f7576121f7614738565b9060005260206000200160009054906101000a90046001600160a01b0316338c848151811061181c5761181c614738565b6001016121d7565b50336001600160a01b03167f3631c28b1f9dd213e0319fb167b554d76b6c283a41143eb400a0d1adb1af17558a848960200151858b60a001516122739190614770565b60405161228394939291906147ee565b60405180910390a29998505050505050505050565b805160009060ff808616908716036122ec5760405162461bcd60e51b815260206004820152601760248201527631b7b6b830b932903a37b5b2b7103a379034ba39b2b63360491b6044820152606401610440565b808660ff161080156123005750808560ff16105b61233e5760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881b9bdd08199bdd5b99608a1b6044820152606401610440565b600061234a84896118e6565b90508060008061235a8b8661479c565b90506000805b868110156123e1578b60ff16810361237a578991506123ad565b8a60ff1681146123a55788818151811061239657612396614738565b602002602001015191506123ad565b600101612360565b6123b782856146f9565b93506123c3878361479c565b6123cd878761479c565b6123d7919061474e565b9450600101612360565b506123ec868361479c565b60646123f8878761479c565b612402919061479c565b61240c919061474e565b935060008261241c60648861479c565b612426919061474e565b61243090856146f9565b9050600086815b6101008110156114f4578192508884836002612453919061479c565b61245d91906146f9565b6124679190614770565b88612472848061479c565b61247c91906146f9565b612486919061474e565b91506124928284613ad4565b156124a8575098506124b0975050505050505050565b600101612437565b95945050505050565b6000806107da8585858860060160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253b9190614783565b613c1e565b60008061255861254f84613888565b6102a485613597565b905060008360060160009054906101000a90046001600160a01b031690506000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125da9190614783565b9050801561260357806125ef6012600a614954565b6125f9908561479c565b6124b0919061474e565b506000949350505050565b60606126e58360090180548060200260200160405190810160405280929190818152602001828054801561266157602002820191906000526020600020905b81548152602001906001019080831161264d575b5050505050838560060160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e09190614783565b613aea565b9392505050565b600782015460005b8181101561278c57600084600701828154811061271357612713614738565b6000918252602082200154600a870180546001600160a01b039092169350908490811061274257612742614738565b90600052602060002001549050806000146127825785600a01838154811061276c5761276c614738565b6000918252602082200155612782828683613bda565b50506001016126f4565b50505050565b60068401546040516370a0823160e01b81523360048201526000916001600160a01b03169081906370a0823190602401602060405180830381865afa1580156127df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128039190614783565b8511156128225760405162461bcd60e51b815260040161044090614827565b600786015460ff851681116128655760405162461bcd60e51b81526020600482015260096024820152681b9bdd08199bdd5b9960ba1b6044820152606401610440565b6000826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c99190614783565b90506000806128da8a8a8a86613c1e565b915091508682101561291f5760405162461bcd60e51b815260206004820152600e60248201526d191e480f081b5a5b905b5bdd5b9d60921b6044820152606401610440565b60006402540be4008b6005015483612937919061479c565b612941919061474e565b905061294d81846146f9565b8b6009018a60ff168154811061296557612965614738565b906000526020600020015461297a9190614770565b8b6009018a60ff168154811061299257612992614738565b60009182526020909120015580156129f757808b600a018a60ff16815481106129bd576129bd614738565b90600052602060002001546129d291906146f9565b8b600a018a60ff16815481106129ea576129ea614738565b6000918252602090912001555b60405163079cc67960e41b8152336004820152602481018b90526001600160a01b038716906379cc679090604401600060405180830381600087803b158015612a3f57600080fd5b505af1158015612a53573d6000803e3d6000fd5b50505050612a8e8b6007018a60ff1681548110612a7257612a72614738565b6000918252602090912001546001600160a01b03163385613bda565b604080518b81526020810186905260ff8b168183015260608101859052905133917f43fb02998f4e03da2e0e6fff53fdbf0c40a9f45f145dc377fc30615d7d7a8a64919081900360800190a250909998505050505050505050565b60006107da8585858589600901805480602002602001604051908101604052809291908181526020018280548015612b4057602002820191906000526020600020905b815481526020019060010190808311612b2c575b5050505050613c95565b6000856009018460ff1681548110612b6457612b64614738565b9060005260206000200154831115612bae5760405162461bcd60e51b815260206004820152600d60248201526c3e706f6f6c2062616c616e636560981b6044820152606401610440565b600080600088600901805480602002602001604051908101604052809291908181526020018280548015612c0157602002820191906000526020600020905b815481526020019060010190808311612bed575b50505050509050612c158989898985613c95565b909350915084831115612c575760405162461bcd60e51b815260206004820152600a6024820152690c8f0407c40dac2f088f60b31b6044820152606401610440565b6000896008018960ff1681548110612c7157612c71614738565b90600052602060002001546402540be4008b6005015485612c92919061479c565b612c9c919061474e565b612ca6919061474e565b90508084838b60ff1681518110612cbf57612cbf614738565b6020026020010151612cd191906146f9565b612cdb9190614770565b8a6009018a60ff1681548110612cf357612cf3614738565b906000526020600020018190555086828960ff1681518110612d1757612d17614738565b6020026020010151612d299190614770565b8a6009018960ff1681548110612d4157612d41614738565b6000918252602090912001558015612da657808a600a018a60ff1681548110612d6c57612d6c614738565b9060005260206000200154612d8191906146f9565b8a600a018a60ff1681548110612d9957612d99614738565b6000918252602090912001555b60008a6007018a60ff1681548110612dc057612dc0614738565b6000918252602090912001546040516370a0823160e01b81523360048201526001600160a01b03909116915081906370a0823190602401602060405180830381865afa158015612e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e389190614783565b851115612e7b5760405162461bcd60e51b815260206004820152601160248201527036b7b932903a3430b7103cb7ba9037bbb760791b6044820152606401610440565b612e858186613964565b50612ebd8a6007018960ff1681548110612ea157612ea1614738565b6000918252602090912001546001600160a01b03163389613bda565b604080518581526020810189905260ff808c1692820192909252908916606082015233907fc6c1e0630dbe9130cc068028486c0d118ddcea348550819defd5cb8c257f8a38906080015b60405180910390a2509198975050505050505050565b42816003015411612f705760405162461bcd60e51b815260206004820152601760248201527f52616d7020697320616c72656164792073746f707065640000000000000000006044820152606401610440565b6000612f7b82613597565b808355600183018190554260028401819055600384018190556040519192507f46e22fb3709ad289f62ce63d469248536dbc78d82b84a3d7e74ad606dc2019389161047c91848252602082015260400190565b600080866007018660ff1681548110612fe957612fe9614738565b6000918252602090912001546040516370a0823160e01b81523360048201526001600160a01b03909116915081906370a0823190602401602060405180830381865afa15801561303d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130619190614783565b8411156130a95760405162461bcd60e51b815260206004820152601660248201527539bbb0b81036b7b932903a3430b7103cb7ba9037bbb760511b6044820152606401610440565b6130b38185613964565b5060008060008860090180548060200260200160405190810160405280929190818152602001828054801561310757602002820191906000526020600020905b8154815260200190600101908083116130f3575b5050505050905061311b89898989856136e7565b90935091508483101561315d5760405162461bcd60e51b815260206004820152600a6024820152696479203c206d696e447960b01b6044820152606401610440565b6000896008018860ff168154811061317757613177614738565b90600052602060002001546402540be4008b6005015485613198919061479c565b6131a2919061474e565b6131ac919061474e565b905086828a60ff16815181106131c4576131c4614738565b60200260200101516131d691906146f9565b8a6009018a60ff16815481106131ee576131ee614738565b90600052602060002001819055508084838a60ff168151811061321357613213614738565b60200260200101516132259190614770565b61322f9190614770565b8a6009018960ff168154811061324757613247614738565b60009182526020909120015580156132ac57808a600a018960ff168154811061327257613272614738565b906000526020600020015461328791906146f9565b8a600a018960ff168154811061329f5761329f614738565b6000918252602090912001555b6132e38a6007018960ff16815481106132c7576132c7614738565b6000918252602090912001546001600160a01b03163386613bda565b604080518881526020810186905260ff808c1692820192909252908916606082015233907fc6c1e0630dbe9130cc068028486c0d118ddcea348550819defd5cb8c257f8a3890608001612f07565b60006104d182613597565b62015180836002015461334f91906146f9565b42101561339e5760405162461bcd60e51b815260206004820152601f60248201527f57616974203120646179206265666f7265207374617274696e672072616d70006044820152606401610440565b6133ab62127500426146f9565b8110156133f35760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e742072616d702074696d6560501b6044820152606401610440565b81158015906134045750620f424082105b6134635760405162461bcd60e51b815260206004820152602a60248201527f667574757265415f206d757374206265203e203020616e64203c20436f6e7374604482015269616e74732e4d41585f4160b01b6064820152608401610440565b600061346e84613597565b9050600061347d60648561479c565b9050818110156134de578161349360028361479c565b10156134d95760405162461bcd60e51b8152602060048201526015602482015274199d5d1d5c995057c81a5cc81d1bdbc81cdb585b1b605a1b6044820152606401610440565b613530565b6134e960028361479c565b8111156135305760405162461bcd60e51b8152602060048201526015602482015274667574757265415f20697320746f6f206c6172676560581b6044820152606401610440565b8185556001850181905542600286018190556003860184905560408051848152602081018490528082019290925260608201859052517fa2b71ec6df949300b59aab36b55e189697b750119dd349fcfa8c0f779e83c2549181900360800190a15050505050565b6003810154600182015482549091908083148015906135b557508142105b156135d6576000846002015490508083038142038502428503840201049350505b5050919050565b8151815160609190811461362a5760405162461bcd60e51b81526020600482015260146024820152736d69736d61746368206d756c7469706c6965727360601b6044820152606401610440565b6000816001600160401b038111156136445761364461432e565b60405190808252806020026020018201604052801561366d578160200160208202803683370190505b50905060005b828110156136de5784818151811061368d5761368d614738565b60200260200101518682815181106136a7576136a7614738565b60200260200101516136b9919061479c565b8282815181106136cb576136cb614738565b6020908102919091010152600101613673565b50949350505050565b60008060008760080180548060200260200160405190810160405280929190818152602001828054801561373a57602002820191906000526020600020905b815481526020019060010190808311613726575b50505050509050600061374d85836135dd565b905080518860ff16108015613765575080518760ff16105b6137815760405162461bcd60e51b81526004016104409061470c565b6000818960ff168151811061379857613798614738565b6020026020010151838a60ff16815181106137b5576137b5614738565b6020026020010151886137c8919061479c565b6137d291906146f9565b905060006137eb6137e28c613597565b8b8b8587612298565b9050600181848b60ff168151811061380557613805614738565b60200260200101516138179190614770565b6138219190614770565b95506402540be4008b6004015487613839919061479c565b613843919061474e565b9450838960ff168151811061385a5761385a614738565b6020026020010151858761386e9190614770565b613878919061474e565b9550505050509550959350505050565b60606104d1826009018054806020026020016040519081016040528092919081815260200182805480156138db57602002820191906000526020600020905b8154815260200190600101908083116138c7575b50505050508360080180548060200260200160405190810160405280929190818152602001828054801561392e57602002820191906000526020600020905b81548152602001906001019080831161391a575b50505050506135dd565b6000613945600183614770565b61395090600461479c565b61395a838561479c565b6126e5919061474e565b80600003613970575050565b6001600160a01b03821661399757604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156139e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a049190614783565b9050613a1b6001600160a01b038316333086613eb4565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa158015613a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a879190614783565b613a919190614770565b1461278c57604051630e40773560e21b815260040160405180910390fd5b600081831115613aca57613ac38284614770565b90506104d1565b6126e58383614770565b60006002613ae28484613aaf565b109392505050565b606081831115613b325760405162461bcd60e51b815260206004820152601360248201527265786365656420746f74616c20737570706c7960681b6044820152606401610440565b83516000816001600160401b03811115613b4e57613b4e61432e565b604051908082528060200260200182016040528015613b77578160200160208202803683370190505b50905060005b828110156107da578486888381518110613b9957613b99614738565b6020026020010151613bab919061479c565b613bb5919061474e565b828281518110613bc757613bc7614738565b6020908102919091010152600101613b7d565b80600003613be757505050565b6001600160a01b038316613c0e57604051633a48ca7b60e11b815260040160405180910390fd5b613c19838383613f1f565b505050565b6000806000806000613c3289888a896107e4565b8093508194508295505050506000838a6008018960ff1681548110613c5957613c59614738565b90600052602060002001548484613c709190614770565b613c7a919061474e565b613c849190614770565b939a93995092975050505050505050565b6000808460ff168660ff1603613ce75760405162461bcd60e51b815260206004820152601760248201527631b7b6b830b932903a37b5b2b7103a379034ba39b2b63360491b6044820152606401610440565b600087600801805480602002602001604051908101604052809291908181526020018280548015613d3757602002820191906000526020600020905b815481526020019060010190808311613d23575b505050505090506000613d4a85836135dd565b905080518860ff16108015613d62575080518760ff16105b613d7e5760405162461bcd60e51b81526004016104409061470c565b6000613d898a613597565b90506000613d9783836118e6565b9050838960ff1681518110613dae57613dae614738565b602002602001015188613dc1919061479c565b838a60ff1681518110613dd657613dd6614738565b6020026020010151613de89190614770565b838a60ff1681518110613dfd57613dfd614738565b6020026020010181815250506000613e17838c868561134e565b9050838b60ff1681518110613e2e57613e2e614738565b602002602001015181613e419190614770565b613e4c9060016146f9565b96506402540be4008c6004015488613e64919061479c565b613e6e919061474e565b9550848b60ff1681518110613e8557613e85614738565b60200260200101518688613e9991906146f9565b613ea3919061474e565b965050505050509550959350505050565b6040516001600160a01b038085166024830152831660448201526064810182905261278c9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613f4f565b6040516001600160a01b038316602482015260448101829052613c1990849063a9059cbb60e01b90606401613ee8565b6000613fa4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166140219092919063ffffffff16565b805190915015613c195780806020019051810190613fc29190614960565b613c195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610440565b6060610771848460008585600080866001600160a01b0316858760405161404891906149a1565b60006040518083038185875af1925050503d8060008114614085576040519150601f19603f3d011682016040523d82523d6000602084013e61408a565b606091505b509150915061409b878383876140a6565b979650505050505050565b6060831561411557825160000361410e576001600160a01b0385163b61410e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610440565b5081610771565b610771838381511561412a5781518083602001fd5b8060405162461bcd60e51b815260040161044091906149bd565b82805482825590600052602060002090810192821561417f579160200282015b8281111561417f578251825591602001919060010190614164565b5061418b92915061418f565b5090565b5b8082111561418b5760008155600101614190565b600080604083850312156141b757600080fd5b50508035926020909101359150565b6000602082840312156141d857600080fd5b5035919050565b60008083601f8401126141f157600080fd5b5081356001600160401b0381111561420857600080fd5b6020830191508360208260051b850101111561422357600080fd5b9250929050565b801515811461423857600080fd5b50565b6000806000806060858703121561425157600080fd5b8435935060208501356001600160401b0381111561426e57600080fd5b61427a878288016141df565b909450925050604085013561428e8161422a565b939692955090935050565b803560ff811681146142aa57600080fd5b919050565b600080600080608085870312156142c557600080fd5b843593506142d560208601614299565b92506142e360408601614299565b9396929550929360600135925050565b6000806000806080858703121561430957600080fd5b8435935061431960208601614299565b93969395505050506040820135916060013590565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261435557600080fd5b813560206001600160401b03808311156143715761437161432e565b8260051b604051601f19603f830116810181811084821117156143965761439661432e565b6040529384528581018301938381019250878511156143b457600080fd5b83870191505b8482101561409b578135835291830191908301906143ba565b6000806000606084860312156143e857600080fd5b8335925060208401356001600160401b0381111561440557600080fd5b61441186828701614344565b925050604084013590509250925092565b6000806000806080858703121561443857600080fd5b8435935061444860208601614299565b925060408501356001600160401b0381111561446357600080fd5b61446f87828801614344565b949793965093946060013593505050565b6000806000806060858703121561449657600080fd5b843593506020850135925060408501356001600160401b038111156144ba57600080fd5b6144c6878288016141df565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b8181101561450a578351835292840192918401916001016144ee565b50909695505050505050565b6000806040838503121561452957600080fd5b82356001600160401b0381111561453f57600080fd5b61454b85828601614344565b95602094909401359450505050565b600080600080600060a0868803121561457257600080fd5b8535945061458260208701614299565b935061459060408701614299565b92506060860135915060808601356001600160401b038111156145b257600080fd5b6145be88828901614344565b9150509295509295909350565b6000806000606084860312156145e057600080fd5b83359250602084013591506145f760408501614299565b90509250925092565b6000806040838503121561461357600080fd5b8235915060208301356001600160a01b038116811461463157600080fd5b809150509250929050565b6000806000806080858703121561465257600080fd5b84359350602085013592506142e360408601614299565b600080600080600060a0868803121561468157600080fd5b8535945061469160208701614299565b935061469f60408701614299565b94979396509394606081013594506080013592915050565b6000806000606084860312156146cc57600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156104d1576104d16146e3565b602080825260129082015271696e646578206f7574206f662072616e676560701b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60008261476b57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156104d1576104d16146e3565b60006020828403121561479557600080fd5b5051919050565b80820281158282048414176104d1576104d16146e3565b600081518084526020808501945080840160005b838110156147e3578151875295820195908201906001016147c7565b509495945050505050565b60808152600061480160808301876147b3565b828103602084015261481381876147b3565b604084019590955250506060015292915050565b6020808252600d908201526c1f2628173130b630b731b2a7b360991b604082015260600190565b60408152600061486160408301856147b3565b90508260208301529392505050565b600181815b808511156148ab578160001904821115614891576148916146e3565b8085161561489e57918102915b93841c9390800290614875565b509250929050565b6000826148c2575060016104d1565b816148cf575060006104d1565b81600181146148e557600281146148ef5761490b565b60019150506104d1565b60ff841115614900576149006146e3565b50506001821b6104d1565b5060208310610133831016604e8410600b841016171561492e575081810a6104d1565b6149388383614870565b806000190482111561494c5761494c6146e3565b029392505050565b60006126e583836148b3565b60006020828403121561497257600080fd5b81516126e58161422a565b60005b83811015614998578181015183820152602001614980565b50506000910152565b600082516149b381846020870161497d565b9190910192915050565b60208152600082518060208401526149dc81604085016020870161497d565b601f01601f1916919091016040019291505056fea2646970667358221220eb126186abde5d2010e570ddc7821132f68a63fb65140e305e12ef439214fa1964736f6c63430008110033","opcodes":"PUSH2 0x4A26 PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x162 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x80BA0F2D GT PUSH2 0xCD JUMPI DUP1 PUSH4 0xB92FA35C GT PUSH2 0x86 JUMPI DUP1 PUSH4 0xB92FA35C EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0xE07805AA EQ PUSH2 0x368 JUMPI DUP1 PUSH4 0xE5B994C5 EQ PUSH2 0x388 JUMPI DUP1 PUSH4 0xF2042939 EQ PUSH2 0x3A8 JUMPI DUP1 PUSH4 0xF43DEE53 EQ PUSH2 0x3C8 JUMPI DUP1 PUSH4 0xFC784184 EQ PUSH2 0x3DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x80BA0F2D EQ PUSH2 0x2C9 JUMPI DUP1 PUSH4 0x84EEEF27 EQ PUSH2 0x2DC JUMPI DUP1 PUSH4 0x8BE1E523 EQ PUSH2 0x2EF JUMPI DUP1 PUSH4 0x8CC122BB EQ PUSH2 0x302 JUMPI DUP1 PUSH4 0x9CBD2406 EQ PUSH2 0x315 JUMPI DUP1 PUSH4 0xAE3FEEDC EQ PUSH2 0x335 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x59D9996A GT PUSH2 0x11F JUMPI DUP1 PUSH4 0x59D9996A EQ PUSH2 0x216 JUMPI DUP1 PUSH4 0x67487F2A EQ PUSH2 0x236 JUMPI DUP1 PUSH4 0x6967280A EQ PUSH2 0x256 JUMPI DUP1 PUSH4 0x6FBB250C EQ PUSH2 0x269 JUMPI DUP1 PUSH4 0x76A3B67C EQ PUSH2 0x296 JUMPI DUP1 PUSH4 0x77B83D30 EQ PUSH2 0x2A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8BBAA23 EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0x1CE9046F EQ PUSH2 0x189 JUMPI DUP1 PUSH4 0x22B1B5F6 EQ PUSH2 0x1AF JUMPI DUP1 PUSH4 0x22B2B607 EQ PUSH2 0x1C2 JUMPI DUP1 PUSH4 0x2F4998AD EQ PUSH2 0x1D5 JUMPI DUP1 PUSH4 0x38E630DE EQ PUSH2 0x1E8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x187 PUSH2 0x182 CALLDATASIZE PUSH1 0x4 PUSH2 0x41A4 JUMP JUMPDEST PUSH2 0x3FB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x19C PUSH2 0x197 CALLDATASIZE PUSH1 0x4 PUSH2 0x41A4 JUMP JUMPDEST PUSH2 0x488 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x19C PUSH2 0x1BD CALLDATASIZE PUSH1 0x4 PUSH2 0x41C6 JUMP JUMPDEST PUSH2 0x4D7 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x1D0 CALLDATASIZE PUSH1 0x4 PUSH2 0x423B JUMP JUMPDEST PUSH2 0x4EE JUMP JUMPDEST PUSH2 0x19C PUSH2 0x1E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x42AF JUMP JUMPDEST PUSH2 0x779 JUMP JUMPDEST PUSH2 0x1FB PUSH2 0x1F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x42F3 JUMP JUMPDEST PUSH2 0x7E4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x1A6 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x222 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x187 PUSH2 0x231 CALLDATASIZE PUSH1 0x4 PUSH2 0x41A4 JUMP JUMPDEST PUSH2 0xAF0 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x242 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH2 0x251 CALLDATASIZE PUSH1 0x4 PUSH2 0x43D3 JUMP JUMPDEST PUSH2 0xB6F JUMP JUMPDEST PUSH2 0x19C PUSH2 0x264 CALLDATASIZE PUSH1 0x4 PUSH2 0x4422 JUMP JUMPDEST PUSH2 0x134E JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x289 PUSH2 0x284 CALLDATASIZE PUSH1 0x4 PUSH2 0x4480 JUMP JUMPDEST PUSH2 0x153D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1A6 SWAP2 SWAP1 PUSH2 0x44D2 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x2A4 CALLDATASIZE PUSH1 0x4 PUSH2 0x4516 JUMP JUMPDEST PUSH2 0x18E6 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x2B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH2 0x2C4 CALLDATASIZE PUSH1 0x4 PUSH2 0x43D3 JUMP JUMPDEST PUSH2 0x1A93 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x2D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x455A JUMP JUMPDEST PUSH2 0x2298 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x2EA CALLDATASIZE PUSH1 0x4 PUSH2 0x45CB JUMP JUMPDEST PUSH2 0x24B9 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x2FD CALLDATASIZE PUSH1 0x4 PUSH2 0x41C6 JUMP JUMPDEST PUSH2 0x2540 JUMP JUMPDEST PUSH2 0x289 PUSH2 0x310 CALLDATASIZE PUSH1 0x4 PUSH2 0x41A4 JUMP JUMPDEST PUSH2 0x260E JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x321 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x187 PUSH2 0x330 CALLDATASIZE PUSH1 0x4 PUSH2 0x4600 JUMP JUMPDEST PUSH2 0x26EC JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x341 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH2 0x350 CALLDATASIZE PUSH1 0x4 PUSH2 0x463C JUMP JUMPDEST PUSH2 0x2792 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x363 CALLDATASIZE PUSH1 0x4 PUSH2 0x42AF JUMP JUMPDEST PUSH2 0x2AE9 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH2 0x383 CALLDATASIZE PUSH1 0x4 PUSH2 0x4669 JUMP JUMPDEST PUSH2 0x2B4A JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x394 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x187 PUSH2 0x3A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x41C6 JUMP JUMPDEST PUSH2 0x2F1D JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x3B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH2 0x3C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x4669 JUMP JUMPDEST PUSH2 0x2FCE JUMP JUMPDEST PUSH2 0x19C PUSH2 0x3D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x41C6 JUMP JUMPDEST PUSH2 0x3331 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x3E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x187 PUSH2 0x3F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x46B7 JUMP JUMPDEST PUSH2 0x333C JUMP JUMPDEST PUSH2 0x40B PUSH5 0x2540BE400 PUSH1 0x1 PUSH2 0x46F9 JUMP JUMPDEST DUP2 LT PUSH2 0x449 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0xE8DEDE40D0D2CED PUSH1 0xC3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP3 ADD DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xAB599D640CA80CDE2B09B128A4154A8DFE608CB80F4C9399C8B954B01FD35F38 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0x0 SWAP1 DUP3 LT PUSH2 0x4AE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x440 SWAP1 PUSH2 0x470C JUMP JUMPDEST DUP3 PUSH1 0xA ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x4C3 JUMPI PUSH2 0x4C3 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x64 PUSH2 0x4E4 DUP4 PUSH2 0x3597 JUMP JUMPDEST PUSH2 0x4D1 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4FA DUP7 PUSH2 0x3597 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP7 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x54C JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x538 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 DUP8 PUSH1 0x8 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x5A3 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x58F JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 DUP3 MLOAD SWAP1 POP PUSH1 0x0 PUSH2 0x5C5 PUSH2 0x5BF DUP6 DUP6 PUSH2 0x35DD JUMP JUMPDEST DUP7 PUSH2 0x18E6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x69C JUMPI DUP8 ISZERO PUSH2 0x638 JUMPI DUP10 DUP10 DUP3 DUP2 DUP2 LT PUSH2 0x5EA JUMPI PUSH2 0x5EA PUSH2 0x4738 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x603 JUMPI PUSH2 0x603 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x615 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x627 JUMPI PUSH2 0x627 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x694 JUMP JUMPDEST DUP10 DUP10 DUP3 DUP2 DUP2 LT PUSH2 0x64A JUMPI PUSH2 0x64A PUSH2 0x4738 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x663 JUMPI PUSH2 0x663 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x675 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x687 JUMPI PUSH2 0x687 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x5CA JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x6B2 PUSH2 0x6AC DUP7 DUP7 PUSH2 0x35DD JUMP JUMPDEST DUP8 PUSH2 0x18E6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP12 PUSH1 0x6 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x70B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x72F SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST SWAP1 POP DUP9 ISZERO PUSH2 0x765 JUMPI DUP3 DUP2 PUSH2 0x743 DUP3 DUP6 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x74D SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x757 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x771 JUMP JUMPDEST DUP3 DUP2 PUSH2 0x743 DUP5 DUP4 PUSH2 0x4770 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7DA DUP6 DUP6 DUP6 DUP6 DUP10 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x7D0 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x7BC JUMPI JUMPDEST POP POP POP POP POP PUSH2 0x36E7 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x7F3 DUP9 PUSH2 0x3888 JUMP JUMPDEST SWAP1 POP DUP1 MLOAD DUP8 PUSH1 0xFF AND LT PUSH2 0x818 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x440 SWAP1 PUSH2 0x470C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 POP PUSH2 0x851 DUP10 PUSH2 0x3597 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x863 SWAP1 DUP4 SWAP1 PUSH2 0x18E6 JUMP JUMPDEST DUP1 DUP3 MSTORE DUP7 SWAP1 PUSH2 0x872 SWAP1 DUP10 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x87C SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST DUP2 MLOAD PUSH2 0x888 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD DUP3 SWAP1 PUSH1 0xFF DUP11 AND SWAP1 DUP2 LT PUSH2 0x8A4 JUMPI PUSH2 0x8A4 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 GT ISZERO PUSH2 0x8EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x6578636565647320617661696C61626C65 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH2 0x903 DUP2 PUSH1 0x80 ADD MLOAD DUP10 DUP5 DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x134E JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x924 JUMPI PUSH2 0x924 PUSH2 0x432E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x94D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH2 0x95F DUP11 PUSH1 0x4 ADD SLOAD DUP5 MLOAD PUSH2 0x3938 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA3C JUMPI PUSH1 0x0 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x985 JUMPI PUSH2 0x985 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH5 0x2540BE400 DUP6 PUSH1 0x60 ADD MLOAD DUP14 PUSH1 0xFF AND DUP5 EQ PUSH2 0x9CE JUMPI DUP7 MLOAD PUSH1 0x20 DUP9 ADD MLOAD PUSH2 0x9B5 SWAP1 DUP6 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x9BF SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0x9C9 SWAP1 DUP5 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD DUP8 MLOAD PUSH1 0x20 DUP10 ADD MLOAD PUSH2 0x9E4 SWAP1 DUP7 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x9EE SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0x9F8 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0xA02 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0xA0C SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0xA16 SWAP1 DUP3 PUSH2 0x4770 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xA28 JUMPI PUSH2 0xA28 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x969 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xA53 DUP5 PUSH1 0x80 ADD MLOAD DUP13 DUP6 DUP8 PUSH1 0x20 ADD MLOAD PUSH2 0x134E JUMP JUMPDEST DUP4 DUP13 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0xA68 JUMPI PUSH2 0xA68 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0xA7A SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST SWAP1 POP DUP12 PUSH1 0x8 ADD DUP12 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0xA94 JUMPI PUSH2 0xA94 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH1 0x1 DUP3 PUSH2 0xAAC SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0xAB6 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP DUP1 DUP5 PUSH1 0x40 ADD MLOAD DUP7 DUP14 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0xAD3 JUMPI PUSH2 0xAD3 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP8 POP SWAP8 POP SWAP8 POP POP POP POP POP POP SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xAFF PUSH4 0x5F5E100 PUSH1 0x1 PUSH2 0x46F9 JUMP JUMPDEST DUP2 LT PUSH2 0xB38 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0xE8DEDE40D0D2CED PUSH1 0xC3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD88EA5155021C6F8DAFA1A741E173F595CDF77CE7C17D43342131D7F06AFDFE5 SWAP1 PUSH1 0x20 ADD PUSH2 0x47C JUMP JUMPDEST PUSH1 0x7 DUP4 ADD SLOAD DUP3 MLOAD PUSH1 0x0 SWAP2 SWAP1 DUP2 EQ PUSH2 0xBC1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x6D69736D6174636820706F6F6C656420746F6B656E73 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xBED DUP9 PUSH2 0x3597 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x6 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xC6D JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xC59 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x8 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xCC5 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xCB1 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE POP SWAP1 POP DUP1 PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD11 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD35 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0xD63 JUMPI PUSH2 0xD60 PUSH2 0xD56 DUP3 PUSH1 0xC0 ADD MLOAD DUP4 PUSH1 0xE0 ADD MLOAD PUSH2 0x35DD JUMP JUMPDEST DUP3 PUSH1 0x60 ADD MLOAD PUSH2 0x18E6 JUMP JUMPDEST DUP2 MSTORE JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0xD7D JUMPI PUSH2 0xD7D PUSH2 0x432E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xDA6 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF05 JUMPI PUSH1 0xA0 DUP4 ADD MLOAD ISZERO ISZERO DUP1 PUSH2 0xDE0 JUMPI POP DUP7 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xDD3 JUMPI PUSH2 0xDD3 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 EQ ISZERO JUMPDEST PUSH2 0xE21 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x21737570706C7920616C6C20746F6B656E73 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST DUP7 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xE33 JUMPI PUSH2 0xE33 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 EQ PUSH2 0xE9E JUMPI PUSH1 0x0 DUP9 PUSH1 0x7 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xE59 JUMPI PUSH2 0xE59 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH2 0xE9C DUP2 DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xE8F JUMPI PUSH2 0xE8F PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3964 JUMP JUMPDEST POP JUMPDEST DUP7 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xEB0 JUMPI PUSH2 0xEB0 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH1 0xC0 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xECE JUMPI PUSH2 0xECE PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0xEE0 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xEF2 JUMPI PUSH2 0xEF2 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0xDAC JUMP JUMPDEST POP PUSH2 0xF21 PUSH2 0xF17 DUP3 DUP5 PUSH1 0xE0 ADD MLOAD PUSH2 0x35DD JUMP JUMPDEST DUP4 PUSH1 0x60 ADD MLOAD PUSH2 0x18E6 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD DUP2 SWAP1 MSTORE DUP3 MLOAD LT PUSH2 0xF6B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x442073686F756C6420696E637265617365 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0xF8F JUMPI PUSH2 0xF8F PUSH2 0x432E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xFB8 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x11E7 JUMPI PUSH1 0x0 PUSH2 0xFD7 DUP10 PUSH1 0x4 ADD SLOAD DUP7 PUSH2 0x3938 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x11C0 JUMPI PUSH1 0x0 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0xC0 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1001 JUMPI PUSH2 0x1001 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD PUSH2 0x1018 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1022 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP PUSH5 0x2540BE400 PUSH2 0x1056 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x103F JUMPI PUSH2 0x103F PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x3AAF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x1060 SWAP1 DUP6 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x106A SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x107C JUMPI PUSH2 0x107C PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH5 0x2540BE400 DUP13 PUSH1 0x5 ADD SLOAD DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x10A7 JUMPI PUSH2 0x10A7 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x10B9 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x10C3 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP DUP1 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x10D8 JUMPI PUSH2 0x10D8 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x10EA SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP13 PUSH1 0x9 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x10FF JUMPI PUSH2 0x10FF PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP1 DUP13 PUSH1 0xA ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1123 JUMPI PUSH2 0x1123 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x1138 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST DUP13 PUSH1 0xA ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x114D JUMPI PUSH2 0x114D PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x116D JUMPI PUSH2 0x116D PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1187 JUMPI PUSH2 0x1187 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1199 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x11AB JUMPI PUSH2 0x11AB PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xFDC JUMP JUMPDEST POP PUSH2 0x11DC PUSH2 0x11D2 DUP5 DUP7 PUSH1 0xE0 ADD MLOAD PUSH2 0x35DD JUMP JUMPDEST DUP6 PUSH1 0x60 ADD MLOAD PUSH2 0x18E6 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE POP PUSH2 0x11FE JUMP JUMPDEST DUP2 MLOAD PUSH2 0x11FC SWAP1 PUSH1 0x9 DUP11 ADD SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH2 0x4144 JUMP JUMPDEST POP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 SUB PUSH2 0x1217 JUMPI POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1245 JUMP JUMPDEST DUP4 MLOAD PUSH1 0xA0 DUP6 ADD MLOAD PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x122E SWAP1 DUP4 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x1238 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1242 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x1282 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x36B4B73A101E1036B4B7 PUSH1 0xB1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x40C10F19 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x40C10F19 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12E4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x189C623B666B1B45B83D7178F39B8C087CB09774317CA2F53C2D3C3726F222A2 DUP10 DUP5 DUP8 PUSH1 0x20 ADD MLOAD DUP6 DUP10 PUSH1 0xA0 ADD MLOAD PUSH2 0x132A SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x133A SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x47EE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF DUP6 AND DUP2 GT PUSH2 0x1397 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x151BDAD95B881B9BDD08199BDD5B99 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST DUP3 PUSH1 0x0 DUP1 PUSH2 0x13A5 DUP5 DUP11 PUSH2 0x479C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1427 JUMPI DUP9 PUSH1 0xFF AND DUP2 EQ PUSH2 0x141F JUMPI DUP8 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x13CE JUMPI PUSH2 0x13CE PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x13E1 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST SWAP3 POP DUP5 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x13F6 JUMPI PUSH2 0x13F6 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1408 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1412 DUP9 DUP7 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x141C SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP4 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x13AA JUMP JUMPDEST POP PUSH2 0x1432 DUP5 DUP3 PUSH2 0x479C JUMP JUMPDEST PUSH1 0x64 PUSH2 0x143E DUP9 DUP7 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1448 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1452 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP3 POP PUSH1 0x0 DUP2 PUSH2 0x1462 PUSH1 0x64 DUP10 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x146C SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0x1476 SWAP1 DUP5 PUSH2 0x46F9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP8 DUP2 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x14F4 JUMPI DUP2 SWAP3 POP DUP10 DUP5 DUP4 PUSH1 0x2 PUSH2 0x1499 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x14A3 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST PUSH2 0x14AD SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP8 PUSH2 0x14B8 DUP5 DUP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x14C2 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST PUSH2 0x14CC SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP2 POP PUSH2 0x14D8 DUP3 DUP5 PUSH2 0x3AD4 JUMP JUMPDEST ISZERO PUSH2 0x14EC JUMPI POP SWAP7 POP PUSH2 0x771 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x147D JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x417070726F78696D6174696F6E20646964206E6F7420636F6E76657267650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x6 DUP5 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x158A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15AE SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST DUP6 GT ISZERO PUSH2 0x15CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x440 SWAP1 PUSH2 0x4827 JUMP JUMPDEST PUSH1 0x7 DUP7 ADD SLOAD DUP4 DUP2 EQ PUSH2 0x1617 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x6D69736D6174636820706F6F6C546F6B656E73 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 DUP8 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1667 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1653 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16AE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16D2 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x16E1 DUP4 DUP11 DUP5 PUSH2 0x3AEA JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1831 JUMPI DUP10 DUP10 DUP3 DUP2 DUP2 LT PUSH2 0x1703 JUMPI PUSH2 0x1703 PUSH2 0x4738 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x171C JUMPI PUSH2 0x171C PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD LT ISZERO PUSH2 0x1772 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616D6F756E74735B695D203C206D696E416D6F756E74735B695D000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1784 JUMPI PUSH2 0x1784 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x179E JUMPI PUSH2 0x179E PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x17B0 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP13 PUSH1 0x9 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x17C5 JUMPI PUSH2 0x17C5 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP PUSH2 0x1829 DUP13 PUSH1 0x7 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x17EB JUMPI PUSH2 0x17EB PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x181C JUMPI PUSH2 0x181C PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3BDA JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x16E9 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0x79CC679 PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0x79CC6790 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x187A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x188E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP CALLER SWAP3 POP PUSH32 0x88D38ED598FDD809C2BF01EE49CD24B7FDABF379A83D29567952B60324D58CEF SWAP2 POP DUP5 SWAP1 POP PUSH2 0x18C2 DUP14 DUP8 PUSH2 0x4770 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x18D0 SWAP3 SWAP2 SWAP1 PUSH2 0x484E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP2 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1925 JUMPI DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1908 JUMPI PUSH2 0x1908 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH2 0x191B SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x18EE JUMP JUMPDEST POP DUP1 PUSH1 0x0 SUB PUSH2 0x1939 JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x4D1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 PUSH2 0x1947 DUP6 DUP9 PUSH2 0x479C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x1A54 JUMPI DUP3 PUSH1 0x0 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0x19A5 JUMPI DUP8 DUP12 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1975 JUMPI PUSH2 0x1975 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1987 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1991 DUP7 DUP5 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x199B SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x195A JUMP JUMPDEST POP DUP4 SWAP5 POP DUP1 DUP8 PUSH1 0x1 PUSH2 0x19B7 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST PUSH2 0x19C1 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH1 0x64 DUP6 PUSH2 0x19CE DUP3 DUP8 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x19D8 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x19E2 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0x19EC SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST DUP5 PUSH2 0x19F7 DUP10 DUP5 PUSH2 0x479C JUMP JUMPDEST PUSH1 0x64 PUSH2 0x1A03 DUP11 DUP9 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1A0D SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0x1A17 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST PUSH2 0x1A21 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1A2B SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP4 POP PUSH2 0x1A37 DUP5 DUP7 PUSH2 0x3AD4 JUMP JUMPDEST ISZERO PUSH2 0x1A4B JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x4D1 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x194C JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x4420646F6573206E6F7420636F6E7665726765 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1AC0 DUP8 PUSH2 0x3597 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x6 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1B40 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1B2C JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x8 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1B98 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1B84 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE POP SWAP1 POP DUP1 PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BE4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C08 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x7 DUP6 ADD SLOAD DUP5 MLOAD DUP1 DUP3 EQ PUSH2 0x1C5A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x6D69736D6174636820706F6F6C20746F6B656E73 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CA4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CC8 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST DUP6 GT ISZERO DUP1 ISZERO PUSH2 0x1CD6 JUMPI POP DUP5 ISZERO ISZERO JUMPDEST PUSH2 0x1CF2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x440 SWAP1 PUSH2 0x4827 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D02 DUP9 PUSH1 0x4 ADD SLOAD DUP5 PUSH2 0x3938 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x1D1E JUMPI PUSH2 0x1D1E PUSH2 0x432E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1D47 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x1D64 JUMPI PUSH2 0x1D64 PUSH2 0x432E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1D8D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH2 0x1DAF PUSH2 0x1DA5 DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD PUSH2 0x35DD JUMP JUMPDEST DUP8 PUSH1 0x60 ADD MLOAD PUSH2 0x18E6 JUMP JUMPDEST DUP7 MSTORE PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x1EA0 JUMPI DUP10 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1DCE JUMPI PUSH2 0x1DCE PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1DEC JUMPI PUSH2 0x1DEC PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD LT ISZERO PUSH2 0x1E42 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x7769746864726177206D6F7265207468616E20617661696C61626C6500000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST DUP10 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1E54 JUMPI PUSH2 0x1E54 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E72 JUMPI PUSH2 0x1E72 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E8D JUMPI PUSH2 0x1E8D PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1DB4 JUMP JUMPDEST POP PUSH2 0x1EB2 PUSH2 0x1DA5 DUP3 DUP9 PUSH1 0xE0 ADD MLOAD PUSH2 0x35DD JUMP JUMPDEST PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x208C JUMPI PUSH1 0x0 DUP8 PUSH1 0x0 ADD MLOAD DUP9 PUSH1 0xC0 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1EDF JUMPI PUSH2 0x1EDF PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x20 ADD MLOAD PUSH2 0x1EF6 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1F00 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1F19 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x103F JUMPI PUSH2 0x103F PUSH2 0x4738 JUMP JUMPDEST SWAP1 POP PUSH5 0x2540BE400 PUSH2 0x1F2B DUP3 DUP9 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1F35 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1F47 JUMPI PUSH2 0x1F47 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP POP POP PUSH1 0x0 PUSH5 0x2540BE400 DUP13 PUSH1 0x5 ADD SLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1F74 JUMPI PUSH2 0x1F74 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1F86 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1F90 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1FA5 JUMPI PUSH2 0x1FA5 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1FB7 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP13 PUSH1 0x9 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x1FCC JUMPI PUSH2 0x1FCC PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP1 DUP13 PUSH1 0xA ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x1FF0 JUMPI PUSH2 0x1FF0 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x2005 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST DUP13 PUSH1 0xA ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x201A JUMPI PUSH2 0x201A PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x203A JUMPI PUSH2 0x203A PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2054 JUMPI PUSH2 0x2054 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2066 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2078 JUMPI PUSH2 0x2078 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x1EBA JUMP JUMPDEST POP PUSH2 0x209E PUSH2 0x1DA5 DUP3 DUP9 PUSH1 0xE0 ADD MLOAD PUSH2 0x35DD JUMP JUMPDEST PUSH1 0x40 DUP8 ADD DUP2 SWAP1 MSTORE DUP7 MLOAD PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0x0 SWAP4 POP SWAP1 SWAP2 PUSH2 0x20BC SWAP1 DUP4 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x20C6 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x20D0 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x2111 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x85E995C9BC8185B5BDD5B9D PUSH1 0xA2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH2 0x211C DUP2 PUSH1 0x1 PUSH2 0x46F9 JUMP JUMPDEST SWAP1 POP DUP8 DUP2 GT ISZERO PUSH2 0x216E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F6B656E416D6F756E74203E206D61784275726E416D6F756E740000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x79CC679 PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x79CC6790 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x21D0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x2230 JUMPI PUSH2 0x2228 DUP12 PUSH1 0x7 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x21F7 JUMPI PUSH2 0x21F7 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x181C JUMPI PUSH2 0x181C PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x21D7 JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x3631C28B1F9DD213E0319FB167B554D76B6C283A41143EB400A0D1ADB1AF1755 DUP11 DUP5 DUP10 PUSH1 0x20 ADD MLOAD DUP6 DUP12 PUSH1 0xA0 ADD MLOAD PUSH2 0x2273 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2283 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x47EE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF DUP1 DUP7 AND SWAP1 DUP8 AND SUB PUSH2 0x22EC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x31B7B6B830B932903A37B5B2B7103A379034BA39B2B633 PUSH1 0x49 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST DUP1 DUP7 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x2300 JUMPI POP DUP1 DUP6 PUSH1 0xFF AND LT JUMPDEST PUSH2 0x233E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1D1BDAD95B881B9BDD08199BDD5B99 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x234A DUP5 DUP10 PUSH2 0x18E6 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 DUP1 PUSH2 0x235A DUP12 DUP7 PUSH2 0x479C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x23E1 JUMPI DUP12 PUSH1 0xFF AND DUP2 SUB PUSH2 0x237A JUMPI DUP10 SWAP2 POP PUSH2 0x23AD JUMP JUMPDEST DUP11 PUSH1 0xFF AND DUP2 EQ PUSH2 0x23A5 JUMPI DUP9 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x2396 JUMPI PUSH2 0x2396 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP2 POP PUSH2 0x23AD JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x2360 JUMP JUMPDEST PUSH2 0x23B7 DUP3 DUP6 PUSH2 0x46F9 JUMP JUMPDEST SWAP4 POP PUSH2 0x23C3 DUP8 DUP4 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x23CD DUP8 DUP8 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x23D7 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP5 POP PUSH1 0x1 ADD PUSH2 0x2360 JUMP JUMPDEST POP PUSH2 0x23EC DUP7 DUP4 PUSH2 0x479C JUMP JUMPDEST PUSH1 0x64 PUSH2 0x23F8 DUP8 DUP8 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x2402 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x240C SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP4 POP PUSH1 0x0 DUP3 PUSH2 0x241C PUSH1 0x64 DUP9 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x2426 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0x2430 SWAP1 DUP6 PUSH2 0x46F9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP7 DUP2 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x14F4 JUMPI DUP2 SWAP3 POP DUP9 DUP5 DUP4 PUSH1 0x2 PUSH2 0x2453 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x245D SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST PUSH2 0x2467 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP9 PUSH2 0x2472 DUP5 DUP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x247C SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST PUSH2 0x2486 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP2 POP PUSH2 0x2492 DUP3 DUP5 PUSH2 0x3AD4 JUMP JUMPDEST ISZERO PUSH2 0x24A8 JUMPI POP SWAP9 POP PUSH2 0x24B0 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x2437 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x7DA DUP6 DUP6 DUP6 DUP9 PUSH1 0x6 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2517 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x253B SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST PUSH2 0x3C1E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2558 PUSH2 0x254F DUP5 PUSH2 0x3888 JUMP JUMPDEST PUSH2 0x2A4 DUP6 PUSH2 0x3597 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x6 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x25B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x25DA SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2603 JUMPI DUP1 PUSH2 0x25EF PUSH1 0x12 PUSH1 0xA PUSH2 0x4954 JUMP JUMPDEST PUSH2 0x25F9 SWAP1 DUP6 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x24B0 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST POP PUSH1 0x0 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x26E5 DUP4 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2661 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x264D JUMPI JUMPDEST POP POP POP POP POP DUP4 DUP6 PUSH1 0x6 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x26E0 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST PUSH2 0x3AEA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x278C JUMPI PUSH1 0x0 DUP5 PUSH1 0x7 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x2713 JUMPI PUSH2 0x2713 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 KECCAK256 ADD SLOAD PUSH1 0xA DUP8 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP4 POP SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x2742 JUMPI PUSH2 0x2742 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ PUSH2 0x2782 JUMPI DUP6 PUSH1 0xA ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x276C JUMPI PUSH2 0x276C PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 KECCAK256 ADD SSTORE PUSH2 0x2782 DUP3 DUP7 DUP4 PUSH2 0x3BDA JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x26F4 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x6 DUP5 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x27DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2803 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST DUP6 GT ISZERO PUSH2 0x2822 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x440 SWAP1 PUSH2 0x4827 JUMP JUMPDEST PUSH1 0x7 DUP7 ADD SLOAD PUSH1 0xFF DUP6 AND DUP2 GT PUSH2 0x2865 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x1B9BDD08199BDD5B99 PUSH1 0xBA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x28A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x28C9 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x28DA DUP11 DUP11 DUP11 DUP7 PUSH2 0x3C1E JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP7 DUP3 LT ISZERO PUSH2 0x291F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x191E480F081B5A5B905B5BDD5B9D PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 PUSH5 0x2540BE400 DUP12 PUSH1 0x5 ADD SLOAD DUP4 PUSH2 0x2937 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x2941 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP PUSH2 0x294D DUP2 DUP5 PUSH2 0x46F9 JUMP JUMPDEST DUP12 PUSH1 0x9 ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2965 JUMPI PUSH2 0x2965 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x297A SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP12 PUSH1 0x9 ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2992 JUMPI PUSH2 0x2992 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE DUP1 ISZERO PUSH2 0x29F7 JUMPI DUP1 DUP12 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x29BD JUMPI PUSH2 0x29BD PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x29D2 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST DUP12 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x29EA JUMPI PUSH2 0x29EA PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x79CC679 PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0x79CC6790 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2A53 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x2A8E DUP12 PUSH1 0x7 ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2A72 JUMPI PUSH2 0x2A72 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP6 PUSH2 0x3BDA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP12 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xFF DUP12 AND DUP2 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x43FB02998F4E03DA2E0E6FFF53FDBF0C40A9F45F145DC377FC30615D7D7A8A64 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG2 POP SWAP1 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7DA DUP6 DUP6 DUP6 DUP6 DUP10 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2B40 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x2B2C JUMPI JUMPDEST POP POP POP POP POP PUSH2 0x3C95 JUMP JUMPDEST PUSH1 0x0 DUP6 PUSH1 0x9 ADD DUP5 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2B64 JUMPI PUSH2 0x2B64 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP4 GT ISZERO PUSH2 0x2BAE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x3E706F6F6C2062616C616E6365 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP9 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2C01 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x2BED JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x2C15 DUP10 DUP10 DUP10 DUP10 DUP6 PUSH2 0x3C95 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP DUP5 DUP4 GT ISZERO PUSH2 0x2C57 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0xC8F0407C40DAC2F088F PUSH1 0xB3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 DUP10 PUSH1 0x8 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2C71 JUMPI PUSH2 0x2C71 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH5 0x2540BE400 DUP12 PUSH1 0x5 ADD SLOAD DUP6 PUSH2 0x2C92 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x2C9C SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0x2CA6 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP DUP1 DUP5 DUP4 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x2CBF JUMPI PUSH2 0x2CBF PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2CD1 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST PUSH2 0x2CDB SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP11 PUSH1 0x9 ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2CF3 JUMPI PUSH2 0x2CF3 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP7 DUP3 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x2D17 JUMPI PUSH2 0x2D17 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2D29 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP11 PUSH1 0x9 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2D41 JUMPI PUSH2 0x2D41 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE DUP1 ISZERO PUSH2 0x2DA6 JUMPI DUP1 DUP11 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2D6C JUMPI PUSH2 0x2D6C PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x2D81 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2D99 JUMPI PUSH2 0x2D99 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE JUMPDEST PUSH1 0x0 DUP11 PUSH1 0x7 ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2DC0 JUMPI PUSH2 0x2DC0 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E14 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E38 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST DUP6 GT ISZERO PUSH2 0x2E7B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x36B7B932903A3430B7103CB7BA9037BBB7 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH2 0x2E85 DUP2 DUP7 PUSH2 0x3964 JUMP JUMPDEST POP PUSH2 0x2EBD DUP11 PUSH1 0x7 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2EA1 JUMPI PUSH2 0x2EA1 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP10 PUSH2 0x3BDA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0xFF DUP1 DUP13 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP10 AND PUSH1 0x60 DUP3 ADD MSTORE CALLER SWAP1 PUSH32 0xC6C1E0630DBE9130CC068028486C0D118DDCEA348550819DEFD5CB8C257F8A38 SWAP1 PUSH1 0x80 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP SWAP2 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST TIMESTAMP DUP2 PUSH1 0x3 ADD SLOAD GT PUSH2 0x2F70 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x52616D7020697320616C72656164792073746F70706564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F7B DUP3 PUSH2 0x3597 JUMP JUMPDEST DUP1 DUP4 SSTORE PUSH1 0x1 DUP4 ADD DUP2 SWAP1 SSTORE TIMESTAMP PUSH1 0x2 DUP5 ADD DUP2 SWAP1 SSTORE PUSH1 0x3 DUP5 ADD DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP3 POP PUSH32 0x46E22FB3709AD289F62CE63D469248536DBC78D82B84A3D7E74AD606DC201938 SWAP2 PUSH2 0x47C SWAP2 DUP5 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x7 ADD DUP7 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2FE9 JUMPI PUSH2 0x2FE9 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x303D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3061 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST DUP5 GT ISZERO PUSH2 0x30A9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39BBB0B81036B7B932903A3430B7103CB7BA9037BBB7 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH2 0x30B3 DUP2 DUP6 PUSH2 0x3964 JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP9 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3107 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x30F3 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x311B DUP10 DUP10 DUP10 DUP10 DUP6 PUSH2 0x36E7 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP DUP5 DUP4 LT ISZERO PUSH2 0x315D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x6479203C206D696E4479 PUSH1 0xB0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 DUP10 PUSH1 0x8 ADD DUP9 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x3177 JUMPI PUSH2 0x3177 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH5 0x2540BE400 DUP12 PUSH1 0x5 ADD SLOAD DUP6 PUSH2 0x3198 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x31A2 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0x31AC SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP DUP7 DUP3 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x31C4 JUMPI PUSH2 0x31C4 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x31D6 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST DUP11 PUSH1 0x9 ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x31EE JUMPI PUSH2 0x31EE PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP1 DUP5 DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3213 JUMPI PUSH2 0x3213 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3225 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x322F SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP11 PUSH1 0x9 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x3247 JUMPI PUSH2 0x3247 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE DUP1 ISZERO PUSH2 0x32AC JUMPI DUP1 DUP11 PUSH1 0xA ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x3272 JUMPI PUSH2 0x3272 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x3287 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x329F JUMPI PUSH2 0x329F PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE JUMPDEST PUSH2 0x32E3 DUP11 PUSH1 0x7 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x32C7 JUMPI PUSH2 0x32C7 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP7 PUSH2 0x3BDA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP9 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xFF DUP1 DUP13 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP10 AND PUSH1 0x60 DUP3 ADD MSTORE CALLER SWAP1 PUSH32 0xC6C1E0630DBE9130CC068028486C0D118DDCEA348550819DEFD5CB8C257F8A38 SWAP1 PUSH1 0x80 ADD PUSH2 0x2F07 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4D1 DUP3 PUSH2 0x3597 JUMP JUMPDEST PUSH3 0x15180 DUP4 PUSH1 0x2 ADD SLOAD PUSH2 0x334F SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST TIMESTAMP LT ISZERO PUSH2 0x339E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x57616974203120646179206265666F7265207374617274696E672072616D7000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH2 0x33AB PUSH3 0x127500 TIMESTAMP PUSH2 0x46F9 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x33F3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x496E73756666696369656E742072616D702074696D65 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3404 JUMPI POP PUSH3 0xF4240 DUP3 LT JUMPDEST PUSH2 0x3463 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x667574757265415F206D757374206265203E203020616E64203C20436F6E7374 PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x616E74732E4D41585F41 PUSH1 0xB0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x346E DUP5 PUSH2 0x3597 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x347D PUSH1 0x64 DUP6 PUSH2 0x479C JUMP JUMPDEST SWAP1 POP DUP2 DUP2 LT ISZERO PUSH2 0x34DE JUMPI DUP2 PUSH2 0x3493 PUSH1 0x2 DUP4 PUSH2 0x479C JUMP JUMPDEST LT ISZERO PUSH2 0x34D9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x199D5D1D5C995057C81A5CC81D1BDBC81CDB585B1B PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH2 0x3530 JUMP JUMPDEST PUSH2 0x34E9 PUSH1 0x2 DUP4 PUSH2 0x479C JUMP JUMPDEST DUP2 GT ISZERO PUSH2 0x3530 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x667574757265415F20697320746F6F206C61726765 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST DUP2 DUP6 SSTORE PUSH1 0x1 DUP6 ADD DUP2 SWAP1 SSTORE TIMESTAMP PUSH1 0x2 DUP7 ADD DUP2 SWAP1 SSTORE PUSH1 0x3 DUP7 ADD DUP5 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP3 ADD DUP6 SWAP1 MSTORE MLOAD PUSH32 0xA2B71EC6DF949300B59AAB36B55E189697B750119DD349FCFA8C0F779E83C254 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x1 DUP3 ADD SLOAD DUP3 SLOAD SWAP1 SWAP2 SWAP1 DUP1 DUP4 EQ DUP1 ISZERO SWAP1 PUSH2 0x35B5 JUMPI POP DUP2 TIMESTAMP LT JUMPDEST ISZERO PUSH2 0x35D6 JUMPI PUSH1 0x0 DUP5 PUSH1 0x2 ADD SLOAD SWAP1 POP DUP1 DUP4 SUB DUP2 TIMESTAMP SUB DUP6 MUL TIMESTAMP DUP6 SUB DUP5 MUL ADD DIV SWAP4 POP POP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH1 0x60 SWAP2 SWAP1 DUP2 EQ PUSH2 0x362A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x6D69736D61746368206D756C7469706C69657273 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3644 JUMPI PUSH2 0x3644 PUSH2 0x432E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x366D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x36DE JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x368D JUMPI PUSH2 0x368D PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x36A7 JUMPI PUSH2 0x36A7 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x36B9 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x36CB JUMPI PUSH2 0x36CB PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3673 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP8 PUSH1 0x8 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x373A JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x3726 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x374D DUP6 DUP4 PUSH2 0x35DD JUMP JUMPDEST SWAP1 POP DUP1 MLOAD DUP9 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x3765 JUMPI POP DUP1 MLOAD DUP8 PUSH1 0xFF AND LT JUMPDEST PUSH2 0x3781 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x440 SWAP1 PUSH2 0x470C JUMP JUMPDEST PUSH1 0x0 DUP2 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3798 JUMPI PUSH2 0x3798 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x37B5 JUMPI PUSH2 0x37B5 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH2 0x37C8 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x37D2 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x37EB PUSH2 0x37E2 DUP13 PUSH2 0x3597 JUMP JUMPDEST DUP12 DUP12 DUP6 DUP8 PUSH2 0x2298 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 DUP5 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3805 JUMPI PUSH2 0x3805 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3817 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x3821 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST SWAP6 POP PUSH5 0x2540BE400 DUP12 PUSH1 0x4 ADD SLOAD DUP8 PUSH2 0x3839 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x3843 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP5 POP DUP4 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x385A JUMPI PUSH2 0x385A PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP8 PUSH2 0x386E SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x3878 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP6 POP POP POP POP POP SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x4D1 DUP3 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x38DB JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x38C7 JUMPI JUMPDEST POP POP POP POP POP DUP4 PUSH1 0x8 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x392E JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x391A JUMPI JUMPDEST POP POP POP POP POP PUSH2 0x35DD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3945 PUSH1 0x1 DUP4 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x3950 SWAP1 PUSH1 0x4 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x395A DUP4 DUP6 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x26E5 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x3970 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3997 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2A38B133 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP3 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x39E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3A04 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST SWAP1 POP PUSH2 0x3A1B PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP7 PUSH2 0x3EB4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP4 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3A63 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3A87 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST PUSH2 0x3A91 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST EQ PUSH2 0x278C JUMPI PUSH1 0x40 MLOAD PUSH4 0xE407735 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP4 GT ISZERO PUSH2 0x3ACA JUMPI PUSH2 0x3AC3 DUP3 DUP5 PUSH2 0x4770 JUMP JUMPDEST SWAP1 POP PUSH2 0x4D1 JUMP JUMPDEST PUSH2 0x26E5 DUP4 DUP4 PUSH2 0x4770 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH2 0x3AE2 DUP5 DUP5 PUSH2 0x3AAF JUMP JUMPDEST LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 DUP4 GT ISZERO PUSH2 0x3B32 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x65786365656420746F74616C20737570706C79 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3B4E JUMPI PUSH2 0x3B4E PUSH2 0x432E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3B77 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x7DA JUMPI DUP5 DUP7 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3B99 JUMPI PUSH2 0x3B99 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3BAB SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x3BB5 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3BC7 JUMPI PUSH2 0x3BC7 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3B7D JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x3BE7 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x3C0E JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A48CA7B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3C19 DUP4 DUP4 DUP4 PUSH2 0x3F1F JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3C32 DUP10 DUP9 DUP11 DUP10 PUSH2 0x7E4 JUMP JUMPDEST DUP1 SWAP4 POP DUP2 SWAP5 POP DUP3 SWAP6 POP POP POP POP PUSH1 0x0 DUP4 DUP11 PUSH1 0x8 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x3C59 JUMPI PUSH2 0x3C59 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP5 DUP5 PUSH2 0x3C70 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x3C7A SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0x3C84 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST SWAP4 SWAP11 SWAP4 SWAP10 POP SWAP3 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0xFF AND DUP7 PUSH1 0xFF AND SUB PUSH2 0x3CE7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x31B7B6B830B932903A37B5B2B7103A379034BA39B2B633 PUSH1 0x49 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 DUP8 PUSH1 0x8 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3D37 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x3D23 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x3D4A DUP6 DUP4 PUSH2 0x35DD JUMP JUMPDEST SWAP1 POP DUP1 MLOAD DUP9 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x3D62 JUMPI POP DUP1 MLOAD DUP8 PUSH1 0xFF AND LT JUMPDEST PUSH2 0x3D7E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x440 SWAP1 PUSH2 0x470C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3D89 DUP11 PUSH2 0x3597 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3D97 DUP4 DUP4 PUSH2 0x18E6 JUMP JUMPDEST SWAP1 POP DUP4 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3DAE JUMPI PUSH2 0x3DAE PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH2 0x3DC1 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3DD6 JUMPI PUSH2 0x3DD6 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3DE8 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3DFD JUMPI PUSH2 0x3DFD PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x3E17 DUP4 DUP13 DUP7 DUP6 PUSH2 0x134E JUMP JUMPDEST SWAP1 POP DUP4 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3E2E JUMPI PUSH2 0x3E2E PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH2 0x3E41 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x3E4C SWAP1 PUSH1 0x1 PUSH2 0x46F9 JUMP JUMPDEST SWAP7 POP PUSH5 0x2540BE400 DUP13 PUSH1 0x4 ADD SLOAD DUP9 PUSH2 0x3E64 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x3E6E SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP6 POP DUP5 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3E85 JUMPI PUSH2 0x3E85 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP9 PUSH2 0x3E99 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST PUSH2 0x3EA3 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP7 POP POP POP POP POP POP SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x278C SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x3F4F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x3C19 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x3EE8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FA4 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4021 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x3C19 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x3FC2 SWAP2 SWAP1 PUSH2 0x4960 JUMP JUMPDEST PUSH2 0x3C19 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x771 DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x4048 SWAP2 SWAP1 PUSH2 0x49A1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x4085 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x408A JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x409B DUP8 DUP4 DUP4 DUP8 PUSH2 0x40A6 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x4115 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x410E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x410E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST POP DUP2 PUSH2 0x771 JUMP JUMPDEST PUSH2 0x771 DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x412A JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x440 SWAP2 SWAP1 PUSH2 0x49BD JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x417F JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x417F JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x4164 JUMP JUMPDEST POP PUSH2 0x418B SWAP3 SWAP2 POP PUSH2 0x418F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x418B JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x4190 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x41B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x41D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x41F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4208 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x4223 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x4238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x426E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x427A DUP8 DUP3 DUP9 ADD PUSH2 0x41DF JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x428E DUP2 PUSH2 0x422A JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x42AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x42C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH2 0x42D5 PUSH1 0x20 DUP7 ADD PUSH2 0x4299 JUMP JUMPDEST SWAP3 POP PUSH2 0x42E3 PUSH1 0x40 DUP7 ADD PUSH2 0x4299 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4309 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH2 0x4319 PUSH1 0x20 DUP7 ADD PUSH2 0x4299 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4355 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP4 GT ISZERO PUSH2 0x4371 JUMPI PUSH2 0x4371 PUSH2 0x432E JUMP JUMPDEST DUP3 PUSH1 0x5 SHL PUSH1 0x40 MLOAD PUSH1 0x1F NOT PUSH1 0x3F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT DUP5 DUP3 GT OR ISZERO PUSH2 0x4396 JUMPI PUSH2 0x4396 PUSH2 0x432E JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP4 DUP5 MSTORE DUP6 DUP2 ADD DUP4 ADD SWAP4 DUP4 DUP2 ADD SWAP3 POP DUP8 DUP6 GT ISZERO PUSH2 0x43B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP8 ADD SWAP2 POP JUMPDEST DUP5 DUP3 LT ISZERO PUSH2 0x409B JUMPI DUP2 CALLDATALOAD DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH2 0x43BA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x43E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4405 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4411 DUP7 DUP3 DUP8 ADD PUSH2 0x4344 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4438 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH2 0x4448 PUSH1 0x20 DUP7 ADD PUSH2 0x4299 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4463 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x446F DUP8 DUP3 DUP9 ADD PUSH2 0x4344 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP4 SWAP5 PUSH1 0x60 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4496 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x44BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x44C6 DUP8 DUP3 DUP9 ADD PUSH2 0x41DF JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x450A JUMPI DUP4 MLOAD DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x44EE JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4529 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x453F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x454B DUP6 DUP3 DUP7 ADD PUSH2 0x4344 JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4572 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH2 0x4582 PUSH1 0x20 DUP8 ADD PUSH2 0x4299 JUMP JUMPDEST SWAP4 POP PUSH2 0x4590 PUSH1 0x40 DUP8 ADD PUSH2 0x4299 JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x45B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x45BE DUP9 DUP3 DUP10 ADD PUSH2 0x4344 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x45E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x45F7 PUSH1 0x40 DUP6 ADD PUSH2 0x4299 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4613 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x4631 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4652 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH2 0x42E3 PUSH1 0x40 DUP7 ADD PUSH2 0x4299 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4681 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH2 0x4691 PUSH1 0x20 DUP8 ADD PUSH2 0x4299 JUMP JUMPDEST SWAP4 POP PUSH2 0x469F PUSH1 0x40 DUP8 ADD PUSH2 0x4299 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP4 SWAP5 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP5 POP PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x46CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP2 CALLDATALOAD SWAP4 PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 SWAP1 SWAP3 ADD CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x4D1 JUMPI PUSH2 0x4D1 PUSH2 0x46E3 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x12 SWAP1 DUP3 ADD MSTORE PUSH18 0x696E646578206F7574206F662072616E6765 PUSH1 0x70 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x476B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x4D1 JUMPI PUSH2 0x4D1 PUSH2 0x46E3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4795 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x4D1 JUMPI PUSH2 0x4D1 PUSH2 0x46E3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x47E3 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x47C7 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 MSTORE PUSH1 0x0 PUSH2 0x4801 PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0x47B3 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x4813 DUP2 DUP8 PUSH2 0x47B3 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD SWAP6 SWAP1 SWAP6 MSTORE POP POP PUSH1 0x60 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xD SWAP1 DUP3 ADD MSTORE PUSH13 0x1F2628173130B630B731B2A7B3 PUSH1 0x99 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x4861 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x47B3 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x48AB JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x4891 JUMPI PUSH2 0x4891 PUSH2 0x46E3 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x489E JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x4875 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x48C2 JUMPI POP PUSH1 0x1 PUSH2 0x4D1 JUMP JUMPDEST DUP2 PUSH2 0x48CF JUMPI POP PUSH1 0x0 PUSH2 0x4D1 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x48E5 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x48EF JUMPI PUSH2 0x490B JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x4D1 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x4900 JUMPI PUSH2 0x4900 PUSH2 0x46E3 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x4D1 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x492E JUMPI POP DUP2 DUP2 EXP PUSH2 0x4D1 JUMP JUMPDEST PUSH2 0x4938 DUP4 DUP4 PUSH2 0x4870 JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x494C JUMPI PUSH2 0x494C PUSH2 0x46E3 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x26E5 DUP4 DUP4 PUSH2 0x48B3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4972 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x26E5 DUP2 PUSH2 0x422A JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4998 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4980 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x49B3 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x497D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x49DC DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x497D JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEB SLT PUSH2 0x86AB 0xDE 0x5D KECCAK256 LT 0xE5 PUSH17 0xDDC7821132F68A63FB65140E305E12EF43 SWAP3 EQ STATICCALL NOT PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"781:38067:109:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;781:38067:109;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_calculateRemoveLiquidity_35831":{"entryPoint":15082,"id":35831,"parameterSlots":3,"returnSlots":1},"@_calculateSwapInv_35744":{"entryPoint":15509,"id":35744,"parameterSlots":5,"returnSlots":2},"@_calculateSwap_35616":{"entryPoint":14055,"id":35616,"parameterSlots":5,"returnSlots":2},"@_calculateWithdrawOneToken_34566":{"entryPoint":15390,"id":34566,"parameterSlots":4,"returnSlots":2},"@_callOptionalReturn_11153":{"entryPoint":16207,"id":11153,"parameterSlots":2,"returnSlots":0},"@_feePerToken_36014":{"entryPoint":14648,"id":36014,"parameterSlots":2,"returnSlots":1},"@_getAPrecise_34482":{"entryPoint":13719,"id":34482,"parameterSlots":1,"returnSlots":1},"@_revert_11483":{"entryPoint":null,"id":11483,"parameterSlots":2,"returnSlots":0},"@_xp_35178":{"entryPoint":13789,"id":35178,"parameterSlots":2,"returnSlots":1},"@_xp_35196":{"entryPoint":14472,"id":35196,"parameterSlots":1,"returnSlots":1},"@addLiquidity_36746":{"entryPoint":2927,"id":36746,"parameterSlots":3,"returnSlots":1},"@calculateRemoveLiquidity_35767":{"entryPoint":9742,"id":35767,"parameterSlots":2,"returnSlots":1},"@calculateSwapInv_35508":{"entryPoint":10985,"id":35508,"parameterSlots":4,"returnSlots":1},"@calculateSwap_35480":{"entryPoint":1913,"id":35480,"parameterSlots":4,"returnSlots":1},"@calculateTokenAmount_35964":{"entryPoint":1262,"id":35964,"parameterSlots":4,"returnSlots":1},"@calculateWithdrawOneTokenDY_34796":{"entryPoint":2020,"id":34796,"parameterSlots":4,"returnSlots":3},"@calculateWithdrawOneToken_34510":{"entryPoint":9401,"id":34510,"parameterSlots":3,"returnSlots":1},"@difference_30644":{"entryPoint":15023,"id":30644,"parameterSlots":2,"returnSlots":1},"@functionCallWithValue_11308":{"entryPoint":null,"id":11308,"parameterSlots":4,"returnSlots":1},"@functionCall_11244":{"entryPoint":16417,"id":11244,"parameterSlots":3,"returnSlots":1},"@getAPrecise_34441":{"entryPoint":13105,"id":34441,"parameterSlots":1,"returnSlots":1},"@getA_34427":{"entryPoint":1239,"id":34427,"parameterSlots":1,"returnSlots":1},"@getAdminBalance_35990":{"entryPoint":1160,"id":35990,"parameterSlots":2,"returnSlots":1},"@getD_35114":{"entryPoint":6374,"id":35114,"parameterSlots":2,"returnSlots":1},"@getVirtualPrice_35250":{"entryPoint":9536,"id":35250,"parameterSlots":1,"returnSlots":1},"@getYD_34958":{"entryPoint":4942,"id":34958,"parameterSlots":4,"returnSlots":1},"@getY_35452":{"entryPoint":8856,"id":35452,"parameterSlots":5,"returnSlots":1},"@handleIncomingAsset_27772":{"entryPoint":14692,"id":27772,"parameterSlots":2,"returnSlots":0},"@handleOutgoingAsset_27809":{"entryPoint":15322,"id":27809,"parameterSlots":3,"returnSlots":0},"@isContract_11172":{"entryPoint":null,"id":11172,"parameterSlots":1,"returnSlots":1},"@rampA_37665":{"entryPoint":13116,"id":37665,"parameterSlots":3,"returnSlots":0},"@removeLiquidityImbalance_37421":{"entryPoint":6803,"id":37421,"parameterSlots":3,"returnSlots":1},"@removeLiquidityOneToken_37045":{"entryPoint":10130,"id":37045,"parameterSlots":4,"returnSlots":1},"@removeLiquidity_36896":{"entryPoint":5437,"id":36896,"parameterSlots":4,"returnSlots":1},"@safeTransferFrom_10931":{"entryPoint":16052,"id":10931,"parameterSlots":4,"returnSlots":0},"@safeTransfer_10905":{"entryPoint":16159,"id":10905,"parameterSlots":3,"returnSlots":0},"@setAdminFee_37516":{"entryPoint":1019,"id":37516,"parameterSlots":2,"returnSlots":0},"@setSwapFee_37546":{"entryPoint":2800,"id":37546,"parameterSlots":2,"returnSlots":0},"@stopRampA_37720":{"entryPoint":12061,"id":37720,"parameterSlots":1,"returnSlots":0},"@swapOut_36358":{"entryPoint":11082,"id":36358,"parameterSlots":5,"returnSlots":1},"@swap_36181":{"entryPoint":12238,"id":36181,"parameterSlots":5,"returnSlots":1},"@verifyCallResultFromTarget_11439":{"entryPoint":16550,"id":11439,"parameterSlots":4,"returnSlots":1},"@withdrawAdminFees_37486":{"entryPoint":9964,"id":37486,"parameterSlots":2,"returnSlots":0},"@within1_30620":{"entryPoint":15060,"id":30620,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn":{"entryPoint":17220,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_calldata":{"entryPoint":16863,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptrt_uint256":{"entryPoint":17686,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":18784,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptr":{"entryPoint":16838,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_address":{"entryPoint":17920,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_array$_t_uint256_$dyn_calldata_ptrt_bool":{"entryPoint":16955,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_array$_t_uint256_$dyn_memory_ptrt_uint256":{"entryPoint":17363,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint256":{"entryPoint":16804,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint256t_array$_t_uint256_$dyn_calldata_ptr":{"entryPoint":17536,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint256t_uint256":{"entryPoint":18103,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint256t_uint8":{"entryPoint":17867,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint256t_uint8t_uint256":{"entryPoint":17980,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint8t_uint256t_uint256":{"entryPoint":17139,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint8t_uint8t_uint256":{"entryPoint":17071,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint8t_uint8t_uint256t_uint256":{"entryPoint":18025,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":18307,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint8t_array$_t_uint256_$dyn_memory_ptrt_uint256":{"entryPoint":17442,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_uint256t_uint8t_uint8t_uint256t_array$_t_uint256_$dyn_memory_ptr":{"entryPoint":17754,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_uint8":{"entryPoint":17049,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":18355,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":18849,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_library_reversed":{"entryPoint":17618,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_uint256_t_uint256__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":18414,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_uint256__to_t_array$_t_uint256_$dyn_memory_ptr_t_uint256__fromStack_reversed":{"entryPoint":18510,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":18877,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_16c70a682a636bc60694f91b894e08a15c0bb032c076db7a2d2d265f7f743409__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1a473326c7eab86a4c1915be8a93321772f3ce5660b51eb1a81d3ac6b9907aa3__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1b3f2c393a520e73eb7bdb3fda675794175327c242b37d24eefae133e4d40778__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1b53e581d849d126253991f586658292489ca99b95601d0e9a46e8a40560683c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2ee4dedb99ff885c57b93a92e7fecc104d42f54e9af51e109d9629ee80d199e9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2f637b5966c86516cd0e8631a2a2dbb5ced6ddd78c0dceb24f758a9d4073aab8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3569a113599fc30dddee53f7bfa525ade1d72800ee559c1f223157ef9a1e0da6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3dce4b63d19b87f59f00e1c83d4e9014c5f915f724b6e06015f43e433d5a13b8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_407c82c74f364e90cf3f20876b92912fd15eeb935ea71a01446be03014fed388__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4406c1e208c572ab95085aa92d385cddaa474035df8163bb5a0a2c403800484d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4798a1cccb10622ad3eddce5aec990d3b316e4246900ba5afea19b6d9d371948__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_487af3faa279cd1df07c0d1897feb1b8a94d7a439a5fcca3a8f816912eee96c2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_49b5230bcef6bb857dbf12a192f051cfc648d5c34767bdb2c1c4044373c29ca8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4ad81e79192646de58c05c664c8c46273241020a112976d2773155fc181b7641__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4c79bf4677fbadf48dfed0cfd80497295366e965c13f89299485a45d83898b6a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_6ddd7f5b4f156ad60913b3898ca8aedad82b4753c6391199bcbb48583e596887__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_6e40b987a1bdbab1b9eb0952052a8ed8be99e503ecda84e0b9bc15992dc05932__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_70ef023479c1247bc56a8110e918ad65744efc349b9118a585df0f3c4ddea941__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":18188,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8649b1e5b06e4f5968b2a3f0fa64e06710ce221cf73d9057a24a3fccd677b635__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9696d201946a7b6efbea55f1e57c9bbecf77447f35c86ca3cfdc292daa9e8b3d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9b887cfddc434e3cf41b666954131afc611b880c7637aac66ca1f629f8984c5b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a5d69ce6c1af4155857291c80267a8fe45eaf0a8a37d5e7aef002f4e00be6446__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a7a312f14c5778159227ed2c11234cdc582e54216594239df89b5aac8a9fbfd9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ad3743fd30ada6469788b58d66f88c735cea919feecd588df3ad8b7d9a2a3507__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b19f02778fe2ebdf3ae6da8b526e4f3fcfda929b6d006b58be5eb0b43957bde5__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bb9053a0213fd7b0c31f2850e8d9176b933be82fddca9a3800fc76e83e2e796c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cfeed71d91768718346c2ea3c2ab2e22b6f1283f91f1be8620ac590423d0fe0f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d9b2e328f4209b3735eca19488e3afd57ba32c456d5e1a010a233e595f7b0b47__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_eb80683d13e69e40aa7f57ce3558136d2c8c4c88f682021213f7030fc3d23afd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f6ffe39fc3cc1849a13d51ded78dcf3b5c94216cc465a3b1b92bc78f59ae6cef__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":18471,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f9716ead0cbfa1f0d7e4fb0f8f862f9707576ae17b9c27448547344167a1c211__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint8_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint8_t_uint8__to_t_uint256_t_uint256_t_uint128_t_uint128__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":18169,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":18254,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":18544,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":18772,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":18611,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":18332,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":18288,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":18813,"id":null,"parameterSlots":3,"returnSlots":0},"panic_error_0x11":{"entryPoint":18147,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":18232,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":17198,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_bool":{"entryPoint":16938,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:30203:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"125:161:181","statements":[{"body":{"nodeType":"YulBlock","src":"171:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"180:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"183:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"173:6:181"},"nodeType":"YulFunctionCall","src":"173:12:181"},"nodeType":"YulExpressionStatement","src":"173:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"146:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"155:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"142:3:181"},"nodeType":"YulFunctionCall","src":"142:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"167:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"138:3:181"},"nodeType":"YulFunctionCall","src":"138:32:181"},"nodeType":"YulIf","src":"135:52:181"},{"nodeType":"YulAssignment","src":"196:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"219:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"206:12:181"},"nodeType":"YulFunctionCall","src":"206:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"196:6:181"}]},{"nodeType":"YulAssignment","src":"238:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"265:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"276:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"261:3:181"},"nodeType":"YulFunctionCall","src":"261:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"248:12:181"},"nodeType":"YulFunctionCall","src":"248:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"238:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"83:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"94:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"106:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"114:6:181","type":""}],"src":"14:272:181"},{"body":{"nodeType":"YulBlock","src":"400:76:181","statements":[{"nodeType":"YulAssignment","src":"410:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"422:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"433:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"418:3:181"},"nodeType":"YulFunctionCall","src":"418:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"410:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"452:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"463:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"445:6:181"},"nodeType":"YulFunctionCall","src":"445:25:181"},"nodeType":"YulExpressionStatement","src":"445:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"369:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"380:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"391:4:181","type":""}],"src":"291:185:181"},{"body":{"nodeType":"YulBlock","src":"575:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"621:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"630:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"633:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"623:6:181"},"nodeType":"YulFunctionCall","src":"623:12:181"},"nodeType":"YulExpressionStatement","src":"623:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"596:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"605:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"592:3:181"},"nodeType":"YulFunctionCall","src":"592:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"617:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"588:3:181"},"nodeType":"YulFunctionCall","src":"588:32:181"},"nodeType":"YulIf","src":"585:52:181"},{"nodeType":"YulAssignment","src":"646:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"669:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"656:12:181"},"nodeType":"YulFunctionCall","src":"656:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"646:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"541:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"552:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"564:6:181","type":""}],"src":"481:204:181"},{"body":{"nodeType":"YulBlock","src":"774:283:181","statements":[{"body":{"nodeType":"YulBlock","src":"823:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"832:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"835:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"825:6:181"},"nodeType":"YulFunctionCall","src":"825:12:181"},"nodeType":"YulExpressionStatement","src":"825:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"802:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"810:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"798:3:181"},"nodeType":"YulFunctionCall","src":"798:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"817:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"794:3:181"},"nodeType":"YulFunctionCall","src":"794:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"787:6:181"},"nodeType":"YulFunctionCall","src":"787:35:181"},"nodeType":"YulIf","src":"784:55:181"},{"nodeType":"YulAssignment","src":"848:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"871:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"858:12:181"},"nodeType":"YulFunctionCall","src":"858:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"848:6:181"}]},{"body":{"nodeType":"YulBlock","src":"921:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"930:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"933:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"923:6:181"},"nodeType":"YulFunctionCall","src":"923:12:181"},"nodeType":"YulExpressionStatement","src":"923:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"893:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"901:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"890:2:181"},"nodeType":"YulFunctionCall","src":"890:30:181"},"nodeType":"YulIf","src":"887:50:181"},{"nodeType":"YulAssignment","src":"946:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"962:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"970:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"958:3:181"},"nodeType":"YulFunctionCall","src":"958:17:181"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"946:8:181"}]},{"body":{"nodeType":"YulBlock","src":"1035:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1044:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1047:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1037:6:181"},"nodeType":"YulFunctionCall","src":"1037:12:181"},"nodeType":"YulExpressionStatement","src":"1037:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"998:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1010:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"1013:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1006:3:181"},"nodeType":"YulFunctionCall","src":"1006:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"994:3:181"},"nodeType":"YulFunctionCall","src":"994:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"1023:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"990:3:181"},"nodeType":"YulFunctionCall","src":"990:38:181"},{"name":"end","nodeType":"YulIdentifier","src":"1030:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"987:2:181"},"nodeType":"YulFunctionCall","src":"987:47:181"},"nodeType":"YulIf","src":"984:67:181"}]},"name":"abi_decode_array_uint256_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"737:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"745:3:181","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"753:8:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"763:6:181","type":""}],"src":"690:367:181"},{"body":{"nodeType":"YulBlock","src":"1104:76:181","statements":[{"body":{"nodeType":"YulBlock","src":"1158:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1167:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1170:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1160:6:181"},"nodeType":"YulFunctionCall","src":"1160:12:181"},"nodeType":"YulExpressionStatement","src":"1160:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1127:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1148:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1141:6:181"},"nodeType":"YulFunctionCall","src":"1141:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1134:6:181"},"nodeType":"YulFunctionCall","src":"1134:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1124:2:181"},"nodeType":"YulFunctionCall","src":"1124:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1117:6:181"},"nodeType":"YulFunctionCall","src":"1117:40:181"},"nodeType":"YulIf","src":"1114:60:181"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1093:5:181","type":""}],"src":"1062:118:181"},{"body":{"nodeType":"YulBlock","src":"1345:498:181","statements":[{"body":{"nodeType":"YulBlock","src":"1391:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1400:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1403:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1393:6:181"},"nodeType":"YulFunctionCall","src":"1393:12:181"},"nodeType":"YulExpressionStatement","src":"1393:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1366:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1375:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1362:3:181"},"nodeType":"YulFunctionCall","src":"1362:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1387:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1358:3:181"},"nodeType":"YulFunctionCall","src":"1358:32:181"},"nodeType":"YulIf","src":"1355:52:181"},{"nodeType":"YulAssignment","src":"1416:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1439:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1426:12:181"},"nodeType":"YulFunctionCall","src":"1426:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1416:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1458:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1489:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1500:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1485:3:181"},"nodeType":"YulFunctionCall","src":"1485:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1472:12:181"},"nodeType":"YulFunctionCall","src":"1472:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1462:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1547:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1556:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1559:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1549:6:181"},"nodeType":"YulFunctionCall","src":"1549:12:181"},"nodeType":"YulExpressionStatement","src":"1549:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1519:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1527:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1516:2:181"},"nodeType":"YulFunctionCall","src":"1516:30:181"},"nodeType":"YulIf","src":"1513:50:181"},{"nodeType":"YulVariableDeclaration","src":"1572:96:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1640:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1651:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1636:3:181"},"nodeType":"YulFunctionCall","src":"1636:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1660:7:181"}],"functionName":{"name":"abi_decode_array_uint256_dyn_calldata","nodeType":"YulIdentifier","src":"1598:37:181"},"nodeType":"YulFunctionCall","src":"1598:70:181"},"variables":[{"name":"value1_1","nodeType":"YulTypedName","src":"1576:8:181","type":""},{"name":"value2_1","nodeType":"YulTypedName","src":"1586:8:181","type":""}]},{"nodeType":"YulAssignment","src":"1677:18:181","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"1687:8:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1677:6:181"}]},{"nodeType":"YulAssignment","src":"1704:18:181","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"1714:8:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1704:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1731:45:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1761:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1772:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1757:3:181"},"nodeType":"YulFunctionCall","src":"1757:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1744:12:181"},"nodeType":"YulFunctionCall","src":"1744:32:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1735:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1807:5:181"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"1785:21:181"},"nodeType":"YulFunctionCall","src":"1785:28:181"},"nodeType":"YulExpressionStatement","src":"1785:28:181"},{"nodeType":"YulAssignment","src":"1822:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1832:5:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1822:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_array$_t_uint256_$dyn_calldata_ptrt_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1287:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1298:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1310:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1318:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1326:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1334:6:181","type":""}],"src":"1185:658:181"},{"body":{"nodeType":"YulBlock","src":"1895:109:181","statements":[{"nodeType":"YulAssignment","src":"1905:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1927:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1914:12:181"},"nodeType":"YulFunctionCall","src":"1914:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1905:5:181"}]},{"body":{"nodeType":"YulBlock","src":"1982:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1991:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1994:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1984:6:181"},"nodeType":"YulFunctionCall","src":"1984:12:181"},"nodeType":"YulExpressionStatement","src":"1984:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1956:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1967:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"1974:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1963:3:181"},"nodeType":"YulFunctionCall","src":"1963:16:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1953:2:181"},"nodeType":"YulFunctionCall","src":"1953:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1946:6:181"},"nodeType":"YulFunctionCall","src":"1946:35:181"},"nodeType":"YulIf","src":"1943:55:181"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1874:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1885:5:181","type":""}],"src":"1848:156:181"},{"body":{"nodeType":"YulBlock","src":"2150:272:181","statements":[{"body":{"nodeType":"YulBlock","src":"2197:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2206:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2209:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2199:6:181"},"nodeType":"YulFunctionCall","src":"2199:12:181"},"nodeType":"YulExpressionStatement","src":"2199:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2171:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2180:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2167:3:181"},"nodeType":"YulFunctionCall","src":"2167:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2192:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2163:3:181"},"nodeType":"YulFunctionCall","src":"2163:33:181"},"nodeType":"YulIf","src":"2160:53:181"},{"nodeType":"YulAssignment","src":"2222:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2245:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2232:12:181"},"nodeType":"YulFunctionCall","src":"2232:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2222:6:181"}]},{"nodeType":"YulAssignment","src":"2264:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2295:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2306:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2291:3:181"},"nodeType":"YulFunctionCall","src":"2291:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2274:16:181"},"nodeType":"YulFunctionCall","src":"2274:36:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2264:6:181"}]},{"nodeType":"YulAssignment","src":"2319:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2350:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2361:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2346:3:181"},"nodeType":"YulFunctionCall","src":"2346:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2329:16:181"},"nodeType":"YulFunctionCall","src":"2329:36:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2319:6:181"}]},{"nodeType":"YulAssignment","src":"2374:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2401:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2412:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2397:3:181"},"nodeType":"YulFunctionCall","src":"2397:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2384:12:181"},"nodeType":"YulFunctionCall","src":"2384:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2374:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint8t_uint8t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2092:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2103:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2115:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2123:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2131:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2139:6:181","type":""}],"src":"2009:413:181"},{"body":{"nodeType":"YulBlock","src":"2570:268:181","statements":[{"body":{"nodeType":"YulBlock","src":"2617:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2626:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2629:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2619:6:181"},"nodeType":"YulFunctionCall","src":"2619:12:181"},"nodeType":"YulExpressionStatement","src":"2619:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2591:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2600:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2587:3:181"},"nodeType":"YulFunctionCall","src":"2587:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2612:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2583:3:181"},"nodeType":"YulFunctionCall","src":"2583:33:181"},"nodeType":"YulIf","src":"2580:53:181"},{"nodeType":"YulAssignment","src":"2642:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2665:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2652:12:181"},"nodeType":"YulFunctionCall","src":"2652:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2642:6:181"}]},{"nodeType":"YulAssignment","src":"2684:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2715:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2726:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2711:3:181"},"nodeType":"YulFunctionCall","src":"2711:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2694:16:181"},"nodeType":"YulFunctionCall","src":"2694:36:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2684:6:181"}]},{"nodeType":"YulAssignment","src":"2739:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2766:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2777:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2762:3:181"},"nodeType":"YulFunctionCall","src":"2762:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2749:12:181"},"nodeType":"YulFunctionCall","src":"2749:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2739:6:181"}]},{"nodeType":"YulAssignment","src":"2790:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2817:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2828:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2813:3:181"},"nodeType":"YulFunctionCall","src":"2813:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2800:12:181"},"nodeType":"YulFunctionCall","src":"2800:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2790:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint8t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2512:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2523:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2535:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2543:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2551:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2559:6:181","type":""}],"src":"2427:411:181"},{"body":{"nodeType":"YulBlock","src":"3008:162:181","statements":[{"nodeType":"YulAssignment","src":"3018:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3030:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3041:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3026:3:181"},"nodeType":"YulFunctionCall","src":"3026:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3018:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3060:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"3071:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3053:6:181"},"nodeType":"YulFunctionCall","src":"3053:25:181"},"nodeType":"YulExpressionStatement","src":"3053:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3098:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3109:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3094:3:181"},"nodeType":"YulFunctionCall","src":"3094:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"3114:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3087:6:181"},"nodeType":"YulFunctionCall","src":"3087:34:181"},"nodeType":"YulExpressionStatement","src":"3087:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3141:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3152:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3137:3:181"},"nodeType":"YulFunctionCall","src":"3137:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"3157:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3130:6:181"},"nodeType":"YulFunctionCall","src":"3130:34:181"},"nodeType":"YulExpressionStatement","src":"3130:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2961:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2972:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2980:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2988:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2999:4:181","type":""}],"src":"2843:327:181"},{"body":{"nodeType":"YulBlock","src":"3207:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3224:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3231:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"3236:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3227:3:181"},"nodeType":"YulFunctionCall","src":"3227:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3217:6:181"},"nodeType":"YulFunctionCall","src":"3217:31:181"},"nodeType":"YulExpressionStatement","src":"3217:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3264:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3267:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3257:6:181"},"nodeType":"YulFunctionCall","src":"3257:15:181"},"nodeType":"YulExpressionStatement","src":"3257:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3288:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3291:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3281:6:181"},"nodeType":"YulFunctionCall","src":"3281:15:181"},"nodeType":"YulExpressionStatement","src":"3281:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"3175:127:181"},{"body":{"nodeType":"YulBlock","src":"3371:838:181","statements":[{"body":{"nodeType":"YulBlock","src":"3420:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3429:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3432:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3422:6:181"},"nodeType":"YulFunctionCall","src":"3422:12:181"},"nodeType":"YulExpressionStatement","src":"3422:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3399:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3407:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3395:3:181"},"nodeType":"YulFunctionCall","src":"3395:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"3414:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3391:3:181"},"nodeType":"YulFunctionCall","src":"3391:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3384:6:181"},"nodeType":"YulFunctionCall","src":"3384:35:181"},"nodeType":"YulIf","src":"3381:55:181"},{"nodeType":"YulVariableDeclaration","src":"3445:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3468:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3455:12:181"},"nodeType":"YulFunctionCall","src":"3455:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3449:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3484:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3494:4:181","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"3488:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3507:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3517:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"3511:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3558:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"3560:16:181"},"nodeType":"YulFunctionCall","src":"3560:18:181"},"nodeType":"YulExpressionStatement","src":"3560:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3550:2:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3554:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3547:2:181"},"nodeType":"YulFunctionCall","src":"3547:10:181"},"nodeType":"YulIf","src":"3544:36:181"},{"nodeType":"YulVariableDeclaration","src":"3589:20:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3603:1:181","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"3606:2:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3599:3:181"},"nodeType":"YulFunctionCall","src":"3599:10:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"3593:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3618:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3638:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3632:5:181"},"nodeType":"YulFunctionCall","src":"3632:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"3622:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3650:56:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3672:6:181"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"3688:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3692:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3684:3:181"},"nodeType":"YulFunctionCall","src":"3684:11:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3701:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3697:3:181"},"nodeType":"YulFunctionCall","src":"3697:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3680:3:181"},"nodeType":"YulFunctionCall","src":"3680:25:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3668:3:181"},"nodeType":"YulFunctionCall","src":"3668:38:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"3654:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3765:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"3767:16:181"},"nodeType":"YulFunctionCall","src":"3767:18:181"},"nodeType":"YulExpressionStatement","src":"3767:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3724:10:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3736:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3721:2:181"},"nodeType":"YulFunctionCall","src":"3721:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3744:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"3756:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3741:2:181"},"nodeType":"YulFunctionCall","src":"3741:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"3718:2:181"},"nodeType":"YulFunctionCall","src":"3718:46:181"},"nodeType":"YulIf","src":"3715:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3803:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3807:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3796:6:181"},"nodeType":"YulFunctionCall","src":"3796:22:181"},"nodeType":"YulExpressionStatement","src":"3796:22:181"},{"nodeType":"YulVariableDeclaration","src":"3827:17:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"3838:6:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"3831:3:181","type":""}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3860:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3868:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3853:6:181"},"nodeType":"YulFunctionCall","src":"3853:18:181"},"nodeType":"YulExpressionStatement","src":"3853:18:181"},{"nodeType":"YulAssignment","src":"3880:22:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3891:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"3899:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3887:3:181"},"nodeType":"YulFunctionCall","src":"3887:15:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"3880:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"3911:38:181","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3933:6:181"},{"name":"_4","nodeType":"YulIdentifier","src":"3941:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3929:3:181"},"nodeType":"YulFunctionCall","src":"3929:15:181"},{"name":"_2","nodeType":"YulIdentifier","src":"3946:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3925:3:181"},"nodeType":"YulFunctionCall","src":"3925:24:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"3915:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3977:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3986:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3989:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3979:6:181"},"nodeType":"YulFunctionCall","src":"3979:12:181"},"nodeType":"YulExpressionStatement","src":"3979:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"3964:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"3972:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3961:2:181"},"nodeType":"YulFunctionCall","src":"3961:15:181"},"nodeType":"YulIf","src":"3958:35:181"},{"nodeType":"YulVariableDeclaration","src":"4002:26:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4017:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"4025:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4013:3:181"},"nodeType":"YulFunctionCall","src":"4013:15:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"4006:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4093:86:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4114:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4132:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4119:12:181"},"nodeType":"YulFunctionCall","src":"4119:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4107:6:181"},"nodeType":"YulFunctionCall","src":"4107:30:181"},"nodeType":"YulExpressionStatement","src":"4107:30:181"},{"nodeType":"YulAssignment","src":"4150:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4161:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"4166:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4157:3:181"},"nodeType":"YulFunctionCall","src":"4157:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"4150:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4048:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"4053:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4045:2:181"},"nodeType":"YulFunctionCall","src":"4045:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4061:23:181","statements":[{"nodeType":"YulAssignment","src":"4063:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4074:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"4079:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4070:3:181"},"nodeType":"YulFunctionCall","src":"4070:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"4063:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"4041:3:181","statements":[]},"src":"4037:142:181"},{"nodeType":"YulAssignment","src":"4188:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"4197:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"4188:5:181"}]}]},"name":"abi_decode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3345:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"3353:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"3361:5:181","type":""}],"src":"3307:902:181"},{"body":{"nodeType":"YulBlock","src":"4367:355:181","statements":[{"body":{"nodeType":"YulBlock","src":"4413:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4422:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4425:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4415:6:181"},"nodeType":"YulFunctionCall","src":"4415:12:181"},"nodeType":"YulExpressionStatement","src":"4415:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4388:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"4397:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4384:3:181"},"nodeType":"YulFunctionCall","src":"4384:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"4409:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4380:3:181"},"nodeType":"YulFunctionCall","src":"4380:32:181"},"nodeType":"YulIf","src":"4377:52:181"},{"nodeType":"YulAssignment","src":"4438:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4461:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4448:12:181"},"nodeType":"YulFunctionCall","src":"4448:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4438:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"4480:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4511:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4522:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4507:3:181"},"nodeType":"YulFunctionCall","src":"4507:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4494:12:181"},"nodeType":"YulFunctionCall","src":"4494:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"4484:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4569:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4578:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4581:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4571:6:181"},"nodeType":"YulFunctionCall","src":"4571:12:181"},"nodeType":"YulExpressionStatement","src":"4571:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4541:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4549:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4538:2:181"},"nodeType":"YulFunctionCall","src":"4538:30:181"},"nodeType":"YulIf","src":"4535:50:181"},{"nodeType":"YulAssignment","src":"4594:71:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4637:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"4648:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4633:3:181"},"nodeType":"YulFunctionCall","src":"4633:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4657:7:181"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nodeType":"YulIdentifier","src":"4604:28:181"},"nodeType":"YulFunctionCall","src":"4604:61:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4594:6:181"}]},{"nodeType":"YulAssignment","src":"4674:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4701:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4712:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4697:3:181"},"nodeType":"YulFunctionCall","src":"4697:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4684:12:181"},"nodeType":"YulFunctionCall","src":"4684:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4674:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_array$_t_uint256_$dyn_memory_ptrt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4317:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4328:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4340:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4348:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4356:6:181","type":""}],"src":"4214:508:181"},{"body":{"nodeType":"YulBlock","src":"4871:411:181","statements":[{"body":{"nodeType":"YulBlock","src":"4918:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4927:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4930:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4920:6:181"},"nodeType":"YulFunctionCall","src":"4920:12:181"},"nodeType":"YulExpressionStatement","src":"4920:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4892:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"4901:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4888:3:181"},"nodeType":"YulFunctionCall","src":"4888:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"4913:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4884:3:181"},"nodeType":"YulFunctionCall","src":"4884:33:181"},"nodeType":"YulIf","src":"4881:53:181"},{"nodeType":"YulAssignment","src":"4943:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4966:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4953:12:181"},"nodeType":"YulFunctionCall","src":"4953:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4943:6:181"}]},{"nodeType":"YulAssignment","src":"4985:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5016:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5027:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5012:3:181"},"nodeType":"YulFunctionCall","src":"5012:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"4995:16:181"},"nodeType":"YulFunctionCall","src":"4995:36:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4985:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"5040:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5071:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5082:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5067:3:181"},"nodeType":"YulFunctionCall","src":"5067:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5054:12:181"},"nodeType":"YulFunctionCall","src":"5054:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"5044:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5129:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5138:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5141:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5131:6:181"},"nodeType":"YulFunctionCall","src":"5131:12:181"},"nodeType":"YulExpressionStatement","src":"5131:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5101:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5109:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5098:2:181"},"nodeType":"YulFunctionCall","src":"5098:30:181"},"nodeType":"YulIf","src":"5095:50:181"},{"nodeType":"YulAssignment","src":"5154:71:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5197:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"5208:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5193:3:181"},"nodeType":"YulFunctionCall","src":"5193:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5217:7:181"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nodeType":"YulIdentifier","src":"5164:28:181"},"nodeType":"YulFunctionCall","src":"5164:61:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5154:6:181"}]},{"nodeType":"YulAssignment","src":"5234:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5261:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5272:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5257:3:181"},"nodeType":"YulFunctionCall","src":"5257:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5244:12:181"},"nodeType":"YulFunctionCall","src":"5244:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5234:6:181"}]}]},"name":"abi_decode_tuple_t_uint256t_uint8t_array$_t_uint256_$dyn_memory_ptrt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4813:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4824:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4836:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4844:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4852:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4860:6:181","type":""}],"src":"4727:555:181"},{"body":{"nodeType":"YulBlock","src":"5450:434:181","statements":[{"body":{"nodeType":"YulBlock","src":"5496:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5505:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5508:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5498:6:181"},"nodeType":"YulFunctionCall","src":"5498:12:181"},"nodeType":"YulExpressionStatement","src":"5498:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5471:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5480:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5467:3:181"},"nodeType":"YulFunctionCall","src":"5467:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5492:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5463:3:181"},"nodeType":"YulFunctionCall","src":"5463:32:181"},"nodeType":"YulIf","src":"5460:52:181"},{"nodeType":"YulAssignment","src":"5521:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5544:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5531:12:181"},"nodeType":"YulFunctionCall","src":"5531:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5521:6:181"}]},{"nodeType":"YulAssignment","src":"5563:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5590:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5601:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5586:3:181"},"nodeType":"YulFunctionCall","src":"5586:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5573:12:181"},"nodeType":"YulFunctionCall","src":"5573:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5563:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"5614:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5645:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5656:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5641:3:181"},"nodeType":"YulFunctionCall","src":"5641:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5628:12:181"},"nodeType":"YulFunctionCall","src":"5628:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"5618:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5703:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5712:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5715:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5705:6:181"},"nodeType":"YulFunctionCall","src":"5705:12:181"},"nodeType":"YulExpressionStatement","src":"5705:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5675:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5683:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5672:2:181"},"nodeType":"YulFunctionCall","src":"5672:30:181"},"nodeType":"YulIf","src":"5669:50:181"},{"nodeType":"YulVariableDeclaration","src":"5728:96:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5796:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"5807:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5792:3:181"},"nodeType":"YulFunctionCall","src":"5792:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5816:7:181"}],"functionName":{"name":"abi_decode_array_uint256_dyn_calldata","nodeType":"YulIdentifier","src":"5754:37:181"},"nodeType":"YulFunctionCall","src":"5754:70:181"},"variables":[{"name":"value2_1","nodeType":"YulTypedName","src":"5732:8:181","type":""},{"name":"value3_1","nodeType":"YulTypedName","src":"5742:8:181","type":""}]},{"nodeType":"YulAssignment","src":"5833:18:181","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"5843:8:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5833:6:181"}]},{"nodeType":"YulAssignment","src":"5860:18:181","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"5870:8:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5860:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint256t_array$_t_uint256_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5392:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5403:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5415:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5423:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5431:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5439:6:181","type":""}],"src":"5287:597:181"},{"body":{"nodeType":"YulBlock","src":"6048:481:181","statements":[{"nodeType":"YulVariableDeclaration","src":"6058:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6068:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6062:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6079:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6097:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6108:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6093:3:181"},"nodeType":"YulFunctionCall","src":"6093:18:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"6083:6:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6127:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6138:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6120:6:181"},"nodeType":"YulFunctionCall","src":"6120:21:181"},"nodeType":"YulExpressionStatement","src":"6120:21:181"},{"nodeType":"YulVariableDeclaration","src":"6150:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"6161:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"6154:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6176:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6196:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6190:5:181"},"nodeType":"YulFunctionCall","src":"6190:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"6180:6:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"6219:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"6227:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6212:6:181"},"nodeType":"YulFunctionCall","src":"6212:22:181"},"nodeType":"YulExpressionStatement","src":"6212:22:181"},{"nodeType":"YulAssignment","src":"6243:25:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6254:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6265:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6250:3:181"},"nodeType":"YulFunctionCall","src":"6250:18:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"6243:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"6277:29:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6295:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6303:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6291:3:181"},"nodeType":"YulFunctionCall","src":"6291:15:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"6281:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6315:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6324:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"6319:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6383:120:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6404:3:181"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6415:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6409:5:181"},"nodeType":"YulFunctionCall","src":"6409:13:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6397:6:181"},"nodeType":"YulFunctionCall","src":"6397:26:181"},"nodeType":"YulExpressionStatement","src":"6397:26:181"},{"nodeType":"YulAssignment","src":"6436:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6447:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6452:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6443:3:181"},"nodeType":"YulFunctionCall","src":"6443:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"6436:3:181"}]},{"nodeType":"YulAssignment","src":"6468:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6482:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6490:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6478:3:181"},"nodeType":"YulFunctionCall","src":"6478:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6468:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6345:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"6348:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6342:2:181"},"nodeType":"YulFunctionCall","src":"6342:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6356:18:181","statements":[{"nodeType":"YulAssignment","src":"6358:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6367:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"6370:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6363:3:181"},"nodeType":"YulFunctionCall","src":"6363:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"6358:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"6338:3:181","statements":[]},"src":"6334:169:181"},{"nodeType":"YulAssignment","src":"6512:11:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"6520:3:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6512:4:181"}]}]},"name":"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6017:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6028:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6039:4:181","type":""}],"src":"5889:640:181"},{"body":{"nodeType":"YulBlock","src":"6646:304:181","statements":[{"body":{"nodeType":"YulBlock","src":"6692:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6701:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6704:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6694:6:181"},"nodeType":"YulFunctionCall","src":"6694:12:181"},"nodeType":"YulExpressionStatement","src":"6694:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6667:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6676:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6663:3:181"},"nodeType":"YulFunctionCall","src":"6663:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"6688:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6659:3:181"},"nodeType":"YulFunctionCall","src":"6659:32:181"},"nodeType":"YulIf","src":"6656:52:181"},{"nodeType":"YulVariableDeclaration","src":"6717:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6744:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6731:12:181"},"nodeType":"YulFunctionCall","src":"6731:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"6721:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6797:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6806:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6809:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6799:6:181"},"nodeType":"YulFunctionCall","src":"6799:12:181"},"nodeType":"YulExpressionStatement","src":"6799:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6769:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6777:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6766:2:181"},"nodeType":"YulFunctionCall","src":"6766:30:181"},"nodeType":"YulIf","src":"6763:50:181"},{"nodeType":"YulAssignment","src":"6822:71:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6865:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"6876:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6861:3:181"},"nodeType":"YulFunctionCall","src":"6861:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6885:7:181"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nodeType":"YulIdentifier","src":"6832:28:181"},"nodeType":"YulFunctionCall","src":"6832:61:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6822:6:181"}]},{"nodeType":"YulAssignment","src":"6902:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6929:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6940:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6925:3:181"},"nodeType":"YulFunctionCall","src":"6925:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6912:12:181"},"nodeType":"YulFunctionCall","src":"6912:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6902:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptrt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6604:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6615:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6627:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6635:6:181","type":""}],"src":"6534:416:181"},{"body":{"nodeType":"YulBlock","src":"7114:467:181","statements":[{"body":{"nodeType":"YulBlock","src":"7161:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7170:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7173:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7163:6:181"},"nodeType":"YulFunctionCall","src":"7163:12:181"},"nodeType":"YulExpressionStatement","src":"7163:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7135:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7144:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7131:3:181"},"nodeType":"YulFunctionCall","src":"7131:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7156:3:181","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7127:3:181"},"nodeType":"YulFunctionCall","src":"7127:33:181"},"nodeType":"YulIf","src":"7124:53:181"},{"nodeType":"YulAssignment","src":"7186:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7209:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7196:12:181"},"nodeType":"YulFunctionCall","src":"7196:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7186:6:181"}]},{"nodeType":"YulAssignment","src":"7228:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7259:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7270:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7255:3:181"},"nodeType":"YulFunctionCall","src":"7255:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"7238:16:181"},"nodeType":"YulFunctionCall","src":"7238:36:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7228:6:181"}]},{"nodeType":"YulAssignment","src":"7283:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7314:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7325:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7310:3:181"},"nodeType":"YulFunctionCall","src":"7310:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"7293:16:181"},"nodeType":"YulFunctionCall","src":"7293:36:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7283:6:181"}]},{"nodeType":"YulAssignment","src":"7338:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7365:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7376:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7361:3:181"},"nodeType":"YulFunctionCall","src":"7361:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7348:12:181"},"nodeType":"YulFunctionCall","src":"7348:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"7338:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"7389:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7420:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7431:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7416:3:181"},"nodeType":"YulFunctionCall","src":"7416:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7403:12:181"},"nodeType":"YulFunctionCall","src":"7403:33:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"7393:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7479:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7488:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7491:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7481:6:181"},"nodeType":"YulFunctionCall","src":"7481:12:181"},"nodeType":"YulExpressionStatement","src":"7481:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7451:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"7459:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7448:2:181"},"nodeType":"YulFunctionCall","src":"7448:30:181"},"nodeType":"YulIf","src":"7445:50:181"},{"nodeType":"YulAssignment","src":"7504:71:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7547:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"7558:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7543:3:181"},"nodeType":"YulFunctionCall","src":"7543:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"7567:7:181"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nodeType":"YulIdentifier","src":"7514:28:181"},"nodeType":"YulFunctionCall","src":"7514:61:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"7504:6:181"}]}]},"name":"abi_decode_tuple_t_uint256t_uint8t_uint8t_uint256t_array$_t_uint256_$dyn_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7048:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7059:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7071:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7079:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7087:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7095:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"7103:6:181","type":""}],"src":"6955:626:181"},{"body":{"nodeType":"YulBlock","src":"7712:216:181","statements":[{"body":{"nodeType":"YulBlock","src":"7758:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7767:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7770:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7760:6:181"},"nodeType":"YulFunctionCall","src":"7760:12:181"},"nodeType":"YulExpressionStatement","src":"7760:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7733:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7742:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7729:3:181"},"nodeType":"YulFunctionCall","src":"7729:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7754:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7725:3:181"},"nodeType":"YulFunctionCall","src":"7725:32:181"},"nodeType":"YulIf","src":"7722:52:181"},{"nodeType":"YulAssignment","src":"7783:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7806:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7793:12:181"},"nodeType":"YulFunctionCall","src":"7793:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7783:6:181"}]},{"nodeType":"YulAssignment","src":"7825:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7852:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7863:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7848:3:181"},"nodeType":"YulFunctionCall","src":"7848:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7835:12:181"},"nodeType":"YulFunctionCall","src":"7835:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7825:6:181"}]},{"nodeType":"YulAssignment","src":"7876:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7907:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7918:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7903:3:181"},"nodeType":"YulFunctionCall","src":"7903:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"7886:16:181"},"nodeType":"YulFunctionCall","src":"7886:36:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7876:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint256t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7662:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7673:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7685:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7693:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7701:6:181","type":""}],"src":"7586:342:181"},{"body":{"nodeType":"YulBlock","src":"8044:267:181","statements":[{"body":{"nodeType":"YulBlock","src":"8090:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8099:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8102:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8092:6:181"},"nodeType":"YulFunctionCall","src":"8092:12:181"},"nodeType":"YulExpressionStatement","src":"8092:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8065:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8074:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8061:3:181"},"nodeType":"YulFunctionCall","src":"8061:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"8086:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8057:3:181"},"nodeType":"YulFunctionCall","src":"8057:32:181"},"nodeType":"YulIf","src":"8054:52:181"},{"nodeType":"YulAssignment","src":"8115:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8138:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8125:12:181"},"nodeType":"YulFunctionCall","src":"8125:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8115:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"8157:45:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8187:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8198:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8183:3:181"},"nodeType":"YulFunctionCall","src":"8183:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8170:12:181"},"nodeType":"YulFunctionCall","src":"8170:32:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8161:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8265:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8274:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8277:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8267:6:181"},"nodeType":"YulFunctionCall","src":"8267:12:181"},"nodeType":"YulExpressionStatement","src":"8267:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8224:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8235:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8250:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"8255:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8246:3:181"},"nodeType":"YulFunctionCall","src":"8246:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"8259:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8242:3:181"},"nodeType":"YulFunctionCall","src":"8242:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8231:3:181"},"nodeType":"YulFunctionCall","src":"8231:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8221:2:181"},"nodeType":"YulFunctionCall","src":"8221:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8214:6:181"},"nodeType":"YulFunctionCall","src":"8214:50:181"},"nodeType":"YulIf","src":"8211:70:181"},{"nodeType":"YulAssignment","src":"8290:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"8300:5:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8290:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8002:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8013:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8025:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8033:6:181","type":""}],"src":"7933:378:181"},{"body":{"nodeType":"YulBlock","src":"8459:268:181","statements":[{"body":{"nodeType":"YulBlock","src":"8506:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8515:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8518:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8508:6:181"},"nodeType":"YulFunctionCall","src":"8508:12:181"},"nodeType":"YulExpressionStatement","src":"8508:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8480:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8489:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8476:3:181"},"nodeType":"YulFunctionCall","src":"8476:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"8501:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8472:3:181"},"nodeType":"YulFunctionCall","src":"8472:33:181"},"nodeType":"YulIf","src":"8469:53:181"},{"nodeType":"YulAssignment","src":"8531:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8554:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8541:12:181"},"nodeType":"YulFunctionCall","src":"8541:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8531:6:181"}]},{"nodeType":"YulAssignment","src":"8573:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8600:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8611:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8596:3:181"},"nodeType":"YulFunctionCall","src":"8596:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8583:12:181"},"nodeType":"YulFunctionCall","src":"8583:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8573:6:181"}]},{"nodeType":"YulAssignment","src":"8624:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8655:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8666:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8651:3:181"},"nodeType":"YulFunctionCall","src":"8651:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"8634:16:181"},"nodeType":"YulFunctionCall","src":"8634:36:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"8624:6:181"}]},{"nodeType":"YulAssignment","src":"8679:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8706:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8717:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8702:3:181"},"nodeType":"YulFunctionCall","src":"8702:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8689:12:181"},"nodeType":"YulFunctionCall","src":"8689:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"8679:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint256t_uint8t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8401:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8412:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8424:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8432:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8440:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"8448:6:181","type":""}],"src":"8316:411:181"},{"body":{"nodeType":"YulBlock","src":"8890:324:181","statements":[{"body":{"nodeType":"YulBlock","src":"8937:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8946:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8949:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8939:6:181"},"nodeType":"YulFunctionCall","src":"8939:12:181"},"nodeType":"YulExpressionStatement","src":"8939:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8911:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8920:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8907:3:181"},"nodeType":"YulFunctionCall","src":"8907:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"8932:3:181","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8903:3:181"},"nodeType":"YulFunctionCall","src":"8903:33:181"},"nodeType":"YulIf","src":"8900:53:181"},{"nodeType":"YulAssignment","src":"8962:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8985:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8972:12:181"},"nodeType":"YulFunctionCall","src":"8972:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8962:6:181"}]},{"nodeType":"YulAssignment","src":"9004:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9035:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9046:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9031:3:181"},"nodeType":"YulFunctionCall","src":"9031:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"9014:16:181"},"nodeType":"YulFunctionCall","src":"9014:36:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9004:6:181"}]},{"nodeType":"YulAssignment","src":"9059:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9090:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9101:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9086:3:181"},"nodeType":"YulFunctionCall","src":"9086:18:181"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"9069:16:181"},"nodeType":"YulFunctionCall","src":"9069:36:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"9059:6:181"}]},{"nodeType":"YulAssignment","src":"9114:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9141:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9152:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9137:3:181"},"nodeType":"YulFunctionCall","src":"9137:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9124:12:181"},"nodeType":"YulFunctionCall","src":"9124:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"9114:6:181"}]},{"nodeType":"YulAssignment","src":"9165:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9192:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9203:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9188:3:181"},"nodeType":"YulFunctionCall","src":"9188:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9175:12:181"},"nodeType":"YulFunctionCall","src":"9175:33:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"9165:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint8t_uint8t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8824:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8835:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8847:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8855:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8863:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"8871:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"8879:6:181","type":""}],"src":"8732:482:181"},{"body":{"nodeType":"YulBlock","src":"9347:212:181","statements":[{"body":{"nodeType":"YulBlock","src":"9393:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9402:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9405:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9395:6:181"},"nodeType":"YulFunctionCall","src":"9395:12:181"},"nodeType":"YulExpressionStatement","src":"9395:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9368:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"9377:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9364:3:181"},"nodeType":"YulFunctionCall","src":"9364:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"9389:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9360:3:181"},"nodeType":"YulFunctionCall","src":"9360:32:181"},"nodeType":"YulIf","src":"9357:52:181"},{"nodeType":"YulAssignment","src":"9418:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9441:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9428:12:181"},"nodeType":"YulFunctionCall","src":"9428:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9418:6:181"}]},{"nodeType":"YulAssignment","src":"9460:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9487:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9498:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9483:3:181"},"nodeType":"YulFunctionCall","src":"9483:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9470:12:181"},"nodeType":"YulFunctionCall","src":"9470:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9460:6:181"}]},{"nodeType":"YulAssignment","src":"9511:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9538:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9549:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9534:3:181"},"nodeType":"YulFunctionCall","src":"9534:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9521:12:181"},"nodeType":"YulFunctionCall","src":"9521:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"9511:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9297:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9308:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9320:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9328:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9336:6:181","type":""}],"src":"9219:340:181"},{"body":{"nodeType":"YulBlock","src":"9596:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9613:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9620:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"9625:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9616:3:181"},"nodeType":"YulFunctionCall","src":"9616:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9606:6:181"},"nodeType":"YulFunctionCall","src":"9606:31:181"},"nodeType":"YulExpressionStatement","src":"9606:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9653:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"9656:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9646:6:181"},"nodeType":"YulFunctionCall","src":"9646:15:181"},"nodeType":"YulExpressionStatement","src":"9646:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9677:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9680:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9670:6:181"},"nodeType":"YulFunctionCall","src":"9670:15:181"},"nodeType":"YulExpressionStatement","src":"9670:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"9564:127:181"},{"body":{"nodeType":"YulBlock","src":"9744:77:181","statements":[{"nodeType":"YulAssignment","src":"9754:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9765:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"9768:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9761:3:181"},"nodeType":"YulFunctionCall","src":"9761:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"9754:3:181"}]},{"body":{"nodeType":"YulBlock","src":"9793:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"9795:16:181"},"nodeType":"YulFunctionCall","src":"9795:18:181"},"nodeType":"YulExpressionStatement","src":"9795:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9785:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"9788:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9782:2:181"},"nodeType":"YulFunctionCall","src":"9782:10:181"},"nodeType":"YulIf","src":"9779:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"9727:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"9730:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"9736:3:181","type":""}],"src":"9696:125:181"},{"body":{"nodeType":"YulBlock","src":"10000:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10017:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10028:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10010:6:181"},"nodeType":"YulFunctionCall","src":"10010:21:181"},"nodeType":"YulExpressionStatement","src":"10010:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10051:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10062:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10047:3:181"},"nodeType":"YulFunctionCall","src":"10047:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10067:1:181","type":"","value":"8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10040:6:181"},"nodeType":"YulFunctionCall","src":"10040:29:181"},"nodeType":"YulExpressionStatement","src":"10040:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10089:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10100:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10085:3:181"},"nodeType":"YulFunctionCall","src":"10085:18:181"},{"hexValue":"746f6f2068696768","kind":"string","nodeType":"YulLiteral","src":"10105:10:181","type":"","value":"too high"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10078:6:181"},"nodeType":"YulFunctionCall","src":"10078:38:181"},"nodeType":"YulExpressionStatement","src":"10078:38:181"},{"nodeType":"YulAssignment","src":"10125:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10137:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10148:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10133:3:181"},"nodeType":"YulFunctionCall","src":"10133:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10125:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8649b1e5b06e4f5968b2a3f0fa64e06710ce221cf73d9057a24a3fccd677b635__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9977:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9991:4:181","type":""}],"src":"9826:331:181"},{"body":{"nodeType":"YulBlock","src":"10263:76:181","statements":[{"nodeType":"YulAssignment","src":"10273:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10285:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10296:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10281:3:181"},"nodeType":"YulFunctionCall","src":"10281:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10273:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10315:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"10326:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10308:6:181"},"nodeType":"YulFunctionCall","src":"10308:25:181"},"nodeType":"YulExpressionStatement","src":"10308:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10232:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10243:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10254:4:181","type":""}],"src":"10162:177:181"},{"body":{"nodeType":"YulBlock","src":"10518:168:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10535:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10546:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10528:6:181"},"nodeType":"YulFunctionCall","src":"10528:21:181"},"nodeType":"YulExpressionStatement","src":"10528:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10569:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10580:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10565:3:181"},"nodeType":"YulFunctionCall","src":"10565:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10585:2:181","type":"","value":"18"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10558:6:181"},"nodeType":"YulFunctionCall","src":"10558:30:181"},"nodeType":"YulExpressionStatement","src":"10558:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10608:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10619:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10604:3:181"},"nodeType":"YulFunctionCall","src":"10604:18:181"},{"hexValue":"696e646578206f7574206f662072616e6765","kind":"string","nodeType":"YulLiteral","src":"10624:20:181","type":"","value":"index out of range"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10597:6:181"},"nodeType":"YulFunctionCall","src":"10597:48:181"},"nodeType":"YulExpressionStatement","src":"10597:48:181"},{"nodeType":"YulAssignment","src":"10654:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10666:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10677:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10662:3:181"},"nodeType":"YulFunctionCall","src":"10662:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10654:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10495:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10509:4:181","type":""}],"src":"10344:342:181"},{"body":{"nodeType":"YulBlock","src":"10723:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10740:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10747:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"10752:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10743:3:181"},"nodeType":"YulFunctionCall","src":"10743:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10733:6:181"},"nodeType":"YulFunctionCall","src":"10733:31:181"},"nodeType":"YulExpressionStatement","src":"10733:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10780:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10783:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10773:6:181"},"nodeType":"YulFunctionCall","src":"10773:15:181"},"nodeType":"YulExpressionStatement","src":"10773:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10804:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10807:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10797:6:181"},"nodeType":"YulFunctionCall","src":"10797:15:181"},"nodeType":"YulExpressionStatement","src":"10797:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"10691:127:181"},{"body":{"nodeType":"YulBlock","src":"10869:171:181","statements":[{"body":{"nodeType":"YulBlock","src":"10900:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10921:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10928:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"10933:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10924:3:181"},"nodeType":"YulFunctionCall","src":"10924:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10914:6:181"},"nodeType":"YulFunctionCall","src":"10914:31:181"},"nodeType":"YulExpressionStatement","src":"10914:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10965:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10968:4:181","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10958:6:181"},"nodeType":"YulFunctionCall","src":"10958:15:181"},"nodeType":"YulExpressionStatement","src":"10958:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10993:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10996:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10986:6:181"},"nodeType":"YulFunctionCall","src":"10986:15:181"},"nodeType":"YulExpressionStatement","src":"10986:15:181"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"10889:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10882:6:181"},"nodeType":"YulFunctionCall","src":"10882:9:181"},"nodeType":"YulIf","src":"10879:132:181"},{"nodeType":"YulAssignment","src":"11020:14:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11029:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"11032:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"11025:3:181"},"nodeType":"YulFunctionCall","src":"11025:9:181"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"11020:1:181"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10854:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"10857:1:181","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"10863:1:181","type":""}],"src":"10823:217:181"},{"body":{"nodeType":"YulBlock","src":"11094:79:181","statements":[{"nodeType":"YulAssignment","src":"11104:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11116:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"11119:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11112:3:181"},"nodeType":"YulFunctionCall","src":"11112:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"11104:4:181"}]},{"body":{"nodeType":"YulBlock","src":"11145:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11147:16:181"},"nodeType":"YulFunctionCall","src":"11147:18:181"},"nodeType":"YulExpressionStatement","src":"11147:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"11136:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"11142:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11133:2:181"},"nodeType":"YulFunctionCall","src":"11133:11:181"},"nodeType":"YulIf","src":"11130:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11076:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"11079:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"11085:4:181","type":""}],"src":"11045:128:181"},{"body":{"nodeType":"YulBlock","src":"11259:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"11305:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11314:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11317:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11307:6:181"},"nodeType":"YulFunctionCall","src":"11307:12:181"},"nodeType":"YulExpressionStatement","src":"11307:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11280:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"11289:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11276:3:181"},"nodeType":"YulFunctionCall","src":"11276:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"11301:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11272:3:181"},"nodeType":"YulFunctionCall","src":"11272:32:181"},"nodeType":"YulIf","src":"11269:52:181"},{"nodeType":"YulAssignment","src":"11330:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11346:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11340:5:181"},"nodeType":"YulFunctionCall","src":"11340:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11330:6:181"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11225:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11236:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11248:6:181","type":""}],"src":"11178:184:181"},{"body":{"nodeType":"YulBlock","src":"11419:116:181","statements":[{"nodeType":"YulAssignment","src":"11429:20:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11444:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"11447:1:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"11440:3:181"},"nodeType":"YulFunctionCall","src":"11440:9:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"11429:7:181"}]},{"body":{"nodeType":"YulBlock","src":"11507:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11509:16:181"},"nodeType":"YulFunctionCall","src":"11509:18:181"},"nodeType":"YulExpressionStatement","src":"11509:18:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11478:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11471:6:181"},"nodeType":"YulFunctionCall","src":"11471:9:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11485:1:181"},{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"11492:7:181"},{"name":"x","nodeType":"YulIdentifier","src":"11501:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"11488:3:181"},"nodeType":"YulFunctionCall","src":"11488:15:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"11482:2:181"},"nodeType":"YulFunctionCall","src":"11482:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"11468:2:181"},"nodeType":"YulFunctionCall","src":"11468:37:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11461:6:181"},"nodeType":"YulFunctionCall","src":"11461:45:181"},"nodeType":"YulIf","src":"11458:71:181"}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11398:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"11401:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"11407:7:181","type":""}],"src":"11367:168:181"},{"body":{"nodeType":"YulBlock","src":"11714:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11731:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11742:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11724:6:181"},"nodeType":"YulFunctionCall","src":"11724:21:181"},"nodeType":"YulExpressionStatement","src":"11724:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11765:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11776:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11761:3:181"},"nodeType":"YulFunctionCall","src":"11761:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11781:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11754:6:181"},"nodeType":"YulFunctionCall","src":"11754:30:181"},"nodeType":"YulExpressionStatement","src":"11754:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11804:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11815:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11800:3:181"},"nodeType":"YulFunctionCall","src":"11800:18:181"},{"hexValue":"6578636565647320617661696c61626c65","kind":"string","nodeType":"YulLiteral","src":"11820:19:181","type":"","value":"exceeds available"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11793:6:181"},"nodeType":"YulFunctionCall","src":"11793:47:181"},"nodeType":"YulExpressionStatement","src":"11793:47:181"},{"nodeType":"YulAssignment","src":"11849:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11861:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11872:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11857:3:181"},"nodeType":"YulFunctionCall","src":"11857:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11849:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cfeed71d91768718346c2ea3c2ab2e22b6f1283f91f1be8620ac590423d0fe0f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11691:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11705:4:181","type":""}],"src":"11540:341:181"},{"body":{"nodeType":"YulBlock","src":"12060:172:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12077:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12088:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12070:6:181"},"nodeType":"YulFunctionCall","src":"12070:21:181"},"nodeType":"YulExpressionStatement","src":"12070:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12111:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12122:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12107:3:181"},"nodeType":"YulFunctionCall","src":"12107:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12127:2:181","type":"","value":"22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12100:6:181"},"nodeType":"YulFunctionCall","src":"12100:30:181"},"nodeType":"YulExpressionStatement","src":"12100:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12150:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12161:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12146:3:181"},"nodeType":"YulFunctionCall","src":"12146:18:181"},{"hexValue":"6d69736d6174636820706f6f6c656420746f6b656e73","kind":"string","nodeType":"YulLiteral","src":"12166:24:181","type":"","value":"mismatch pooled tokens"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12139:6:181"},"nodeType":"YulFunctionCall","src":"12139:52:181"},"nodeType":"YulExpressionStatement","src":"12139:52:181"},{"nodeType":"YulAssignment","src":"12200:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12212:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12223:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12208:3:181"},"nodeType":"YulFunctionCall","src":"12208:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12200:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_407c82c74f364e90cf3f20876b92912fd15eeb935ea71a01446be03014fed388__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12037:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12051:4:181","type":""}],"src":"11886:346:181"},{"body":{"nodeType":"YulBlock","src":"12411:168:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12428:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12439:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12421:6:181"},"nodeType":"YulFunctionCall","src":"12421:21:181"},"nodeType":"YulExpressionStatement","src":"12421:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12462:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12473:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12458:3:181"},"nodeType":"YulFunctionCall","src":"12458:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12478:2:181","type":"","value":"18"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12451:6:181"},"nodeType":"YulFunctionCall","src":"12451:30:181"},"nodeType":"YulExpressionStatement","src":"12451:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12501:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12512:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12497:3:181"},"nodeType":"YulFunctionCall","src":"12497:18:181"},{"hexValue":"21737570706c7920616c6c20746f6b656e73","kind":"string","nodeType":"YulLiteral","src":"12517:20:181","type":"","value":"!supply all tokens"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12490:6:181"},"nodeType":"YulFunctionCall","src":"12490:48:181"},"nodeType":"YulExpressionStatement","src":"12490:48:181"},{"nodeType":"YulAssignment","src":"12547:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12559:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12570:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12555:3:181"},"nodeType":"YulFunctionCall","src":"12555:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12547:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_3dce4b63d19b87f59f00e1c83d4e9014c5f915f724b6e06015f43e433d5a13b8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12388:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12402:4:181","type":""}],"src":"12237:342:181"},{"body":{"nodeType":"YulBlock","src":"12758:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12775:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12786:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12768:6:181"},"nodeType":"YulFunctionCall","src":"12768:21:181"},"nodeType":"YulExpressionStatement","src":"12768:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12809:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12820:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12805:3:181"},"nodeType":"YulFunctionCall","src":"12805:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12825:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12798:6:181"},"nodeType":"YulFunctionCall","src":"12798:30:181"},"nodeType":"YulExpressionStatement","src":"12798:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12848:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12859:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12844:3:181"},"nodeType":"YulFunctionCall","src":"12844:18:181"},{"hexValue":"442073686f756c6420696e637265617365","kind":"string","nodeType":"YulLiteral","src":"12864:19:181","type":"","value":"D should increase"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12837:6:181"},"nodeType":"YulFunctionCall","src":"12837:47:181"},"nodeType":"YulExpressionStatement","src":"12837:47:181"},{"nodeType":"YulAssignment","src":"12893:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12905:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12916:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12901:3:181"},"nodeType":"YulFunctionCall","src":"12901:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12893:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_bb9053a0213fd7b0c31f2850e8d9176b933be82fddca9a3800fc76e83e2e796c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12735:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12749:4:181","type":""}],"src":"12584:341:181"},{"body":{"nodeType":"YulBlock","src":"13104:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13121:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13132:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13114:6:181"},"nodeType":"YulFunctionCall","src":"13114:21:181"},"nodeType":"YulExpressionStatement","src":"13114:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13155:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13166:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13151:3:181"},"nodeType":"YulFunctionCall","src":"13151:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13171:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13144:6:181"},"nodeType":"YulFunctionCall","src":"13144:30:181"},"nodeType":"YulExpressionStatement","src":"13144:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13194:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13205:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13190:3:181"},"nodeType":"YulFunctionCall","src":"13190:18:181"},{"hexValue":"6d696e74203c206d696e","kind":"string","nodeType":"YulLiteral","src":"13210:12:181","type":"","value":"mint < min"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13183:6:181"},"nodeType":"YulFunctionCall","src":"13183:40:181"},"nodeType":"YulExpressionStatement","src":"13183:40:181"},{"nodeType":"YulAssignment","src":"13232:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13244:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13255:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13240:3:181"},"nodeType":"YulFunctionCall","src":"13240:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13232:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_6ddd7f5b4f156ad60913b3898ca8aedad82b4753c6391199bcbb48583e596887__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13081:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13095:4:181","type":""}],"src":"12930:334:181"},{"body":{"nodeType":"YulBlock","src":"13398:145:181","statements":[{"nodeType":"YulAssignment","src":"13408:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13420:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13431:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13416:3:181"},"nodeType":"YulFunctionCall","src":"13416:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13408:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13450:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13465:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13481:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"13486:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13477:3:181"},"nodeType":"YulFunctionCall","src":"13477:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"13490:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13473:3:181"},"nodeType":"YulFunctionCall","src":"13473:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13461:3:181"},"nodeType":"YulFunctionCall","src":"13461:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13443:6:181"},"nodeType":"YulFunctionCall","src":"13443:51:181"},"nodeType":"YulExpressionStatement","src":"13443:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13514:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13525:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13510:3:181"},"nodeType":"YulFunctionCall","src":"13510:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"13530:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13503:6:181"},"nodeType":"YulFunctionCall","src":"13503:34:181"},"nodeType":"YulExpressionStatement","src":"13503:34:181"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13359:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13370:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13378:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13389:4:181","type":""}],"src":"13269:274:181"},{"body":{"nodeType":"YulBlock","src":"13609:374:181","statements":[{"nodeType":"YulVariableDeclaration","src":"13619:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13639:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13633:5:181"},"nodeType":"YulFunctionCall","src":"13633:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"13623:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13661:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"13666:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13654:6:181"},"nodeType":"YulFunctionCall","src":"13654:19:181"},"nodeType":"YulExpressionStatement","src":"13654:19:181"},{"nodeType":"YulVariableDeclaration","src":"13682:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13692:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13686:2:181","type":""}]},{"nodeType":"YulAssignment","src":"13705:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13716:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13721:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13712:3:181"},"nodeType":"YulFunctionCall","src":"13712:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"13705:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"13733:28:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13751:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13758:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13747:3:181"},"nodeType":"YulFunctionCall","src":"13747:14:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"13737:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13770:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13779:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"13774:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"13838:120:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13859:3:181"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"13870:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13864:5:181"},"nodeType":"YulFunctionCall","src":"13864:13:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13852:6:181"},"nodeType":"YulFunctionCall","src":"13852:26:181"},"nodeType":"YulExpressionStatement","src":"13852:26:181"},{"nodeType":"YulAssignment","src":"13891:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13902:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13907:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13898:3:181"},"nodeType":"YulFunctionCall","src":"13898:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"13891:3:181"}]},{"nodeType":"YulAssignment","src":"13923:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"13937:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13945:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13933:3:181"},"nodeType":"YulFunctionCall","src":"13933:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"13923:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"13800:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"13803:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"13797:2:181"},"nodeType":"YulFunctionCall","src":"13797:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"13811:18:181","statements":[{"nodeType":"YulAssignment","src":"13813:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"13822:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"13825:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13818:3:181"},"nodeType":"YulFunctionCall","src":"13818:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"13813:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"13793:3:181","statements":[]},"src":"13789:169:181"},{"nodeType":"YulAssignment","src":"13967:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"13974:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"13967:3:181"}]}]},"name":"abi_encode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"13586:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"13593:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"13601:3:181","type":""}],"src":"13548:435:181"},{"body":{"nodeType":"YulBlock","src":"14273:324:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14290:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14301:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14283:6:181"},"nodeType":"YulFunctionCall","src":"14283:22:181"},"nodeType":"YulExpressionStatement","src":"14283:22:181"},{"nodeType":"YulVariableDeclaration","src":"14314:71:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14357:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14369:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14380:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14365:3:181"},"nodeType":"YulFunctionCall","src":"14365:19:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"14328:28:181"},"nodeType":"YulFunctionCall","src":"14328:57:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"14318:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14405:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14416:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14401:3:181"},"nodeType":"YulFunctionCall","src":"14401:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"14425:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"14433:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14421:3:181"},"nodeType":"YulFunctionCall","src":"14421:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14394:6:181"},"nodeType":"YulFunctionCall","src":"14394:50:181"},"nodeType":"YulExpressionStatement","src":"14394:50:181"},{"nodeType":"YulAssignment","src":"14453:52:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14490:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"14498:6:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"14461:28:181"},"nodeType":"YulFunctionCall","src":"14461:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14453:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14525:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14536:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14521:3:181"},"nodeType":"YulFunctionCall","src":"14521:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"14541:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14514:6:181"},"nodeType":"YulFunctionCall","src":"14514:34:181"},"nodeType":"YulExpressionStatement","src":"14514:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14568:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14579:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14564:3:181"},"nodeType":"YulFunctionCall","src":"14564:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"14584:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14557:6:181"},"nodeType":"YulFunctionCall","src":"14557:34:181"},"nodeType":"YulExpressionStatement","src":"14557:34:181"}]},"name":"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_uint256_t_uint256__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14218:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14229:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14237:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14245:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14253:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14264:4:181","type":""}],"src":"13988:609:181"},{"body":{"nodeType":"YulBlock","src":"14776:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14793:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14804:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14786:6:181"},"nodeType":"YulFunctionCall","src":"14786:21:181"},"nodeType":"YulExpressionStatement","src":"14786:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14827:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14838:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14823:3:181"},"nodeType":"YulFunctionCall","src":"14823:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14843:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14816:6:181"},"nodeType":"YulFunctionCall","src":"14816:30:181"},"nodeType":"YulExpressionStatement","src":"14816:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14866:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14877:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14862:3:181"},"nodeType":"YulFunctionCall","src":"14862:18:181"},{"hexValue":"546f6b656e206e6f7420666f756e64","kind":"string","nodeType":"YulLiteral","src":"14882:17:181","type":"","value":"Token not found"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14855:6:181"},"nodeType":"YulFunctionCall","src":"14855:45:181"},"nodeType":"YulExpressionStatement","src":"14855:45:181"},{"nodeType":"YulAssignment","src":"14909:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14921:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14932:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14917:3:181"},"nodeType":"YulFunctionCall","src":"14917:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14909:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_487af3faa279cd1df07c0d1897feb1b8a94d7a439a5fcca3a8f816912eee96c2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14753:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14767:4:181","type":""}],"src":"14602:339:181"},{"body":{"nodeType":"YulBlock","src":"15120:180:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15137:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15148:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15130:6:181"},"nodeType":"YulFunctionCall","src":"15130:21:181"},"nodeType":"YulExpressionStatement","src":"15130:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15171:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15182:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15167:3:181"},"nodeType":"YulFunctionCall","src":"15167:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15187:2:181","type":"","value":"30"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15160:6:181"},"nodeType":"YulFunctionCall","src":"15160:30:181"},"nodeType":"YulExpressionStatement","src":"15160:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15210:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15221:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15206:3:181"},"nodeType":"YulFunctionCall","src":"15206:18:181"},{"hexValue":"417070726f78696d6174696f6e20646964206e6f7420636f6e7665726765","kind":"string","nodeType":"YulLiteral","src":"15226:32:181","type":"","value":"Approximation did not converge"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15199:6:181"},"nodeType":"YulFunctionCall","src":"15199:60:181"},"nodeType":"YulExpressionStatement","src":"15199:60:181"},{"nodeType":"YulAssignment","src":"15268:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15280:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15291:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15276:3:181"},"nodeType":"YulFunctionCall","src":"15276:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15268:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15097:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15111:4:181","type":""}],"src":"14946:354:181"},{"body":{"nodeType":"YulBlock","src":"15406:102:181","statements":[{"nodeType":"YulAssignment","src":"15416:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15428:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15439:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15424:3:181"},"nodeType":"YulFunctionCall","src":"15424:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15416:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15458:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15473:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15489:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"15494:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"15485:3:181"},"nodeType":"YulFunctionCall","src":"15485:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"15498:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15481:3:181"},"nodeType":"YulFunctionCall","src":"15481:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15469:3:181"},"nodeType":"YulFunctionCall","src":"15469:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15451:6:181"},"nodeType":"YulFunctionCall","src":"15451:51:181"},"nodeType":"YulExpressionStatement","src":"15451:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15375:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15386:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15397:4:181","type":""}],"src":"15305:203:181"},{"body":{"nodeType":"YulBlock","src":"15687:163:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15704:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15715:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15697:6:181"},"nodeType":"YulFunctionCall","src":"15697:21:181"},"nodeType":"YulExpressionStatement","src":"15697:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15738:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15749:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15734:3:181"},"nodeType":"YulFunctionCall","src":"15734:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15754:2:181","type":"","value":"13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15727:6:181"},"nodeType":"YulFunctionCall","src":"15727:30:181"},"nodeType":"YulExpressionStatement","src":"15727:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15777:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15788:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15773:3:181"},"nodeType":"YulFunctionCall","src":"15773:18:181"},{"hexValue":"3e4c502e62616c616e63654f66","kind":"string","nodeType":"YulLiteral","src":"15793:15:181","type":"","value":">LP.balanceOf"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15766:6:181"},"nodeType":"YulFunctionCall","src":"15766:43:181"},"nodeType":"YulExpressionStatement","src":"15766:43:181"},{"nodeType":"YulAssignment","src":"15818:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15830:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15841:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15826:3:181"},"nodeType":"YulFunctionCall","src":"15826:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15818:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f6ffe39fc3cc1849a13d51ded78dcf3b5c94216cc465a3b1b92bc78f59ae6cef__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15664:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15678:4:181","type":""}],"src":"15513:337:181"},{"body":{"nodeType":"YulBlock","src":"16029:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16046:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16057:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16039:6:181"},"nodeType":"YulFunctionCall","src":"16039:21:181"},"nodeType":"YulExpressionStatement","src":"16039:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16080:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16091:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16076:3:181"},"nodeType":"YulFunctionCall","src":"16076:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16096:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16069:6:181"},"nodeType":"YulFunctionCall","src":"16069:30:181"},"nodeType":"YulExpressionStatement","src":"16069:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16119:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16130:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16115:3:181"},"nodeType":"YulFunctionCall","src":"16115:18:181"},{"hexValue":"6d69736d6174636820706f6f6c546f6b656e73","kind":"string","nodeType":"YulLiteral","src":"16135:21:181","type":"","value":"mismatch poolTokens"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16108:6:181"},"nodeType":"YulFunctionCall","src":"16108:49:181"},"nodeType":"YulExpressionStatement","src":"16108:49:181"},{"nodeType":"YulAssignment","src":"16166:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16178:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16189:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16174:3:181"},"nodeType":"YulFunctionCall","src":"16174:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16166:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4ad81e79192646de58c05c664c8c46273241020a112976d2773155fc181b7641__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16006:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16020:4:181","type":""}],"src":"15855:343:181"},{"body":{"nodeType":"YulBlock","src":"16377:176:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16394:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16405:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16387:6:181"},"nodeType":"YulFunctionCall","src":"16387:21:181"},"nodeType":"YulExpressionStatement","src":"16387:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16428:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16439:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16424:3:181"},"nodeType":"YulFunctionCall","src":"16424:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16444:2:181","type":"","value":"26"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16417:6:181"},"nodeType":"YulFunctionCall","src":"16417:30:181"},"nodeType":"YulExpressionStatement","src":"16417:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16467:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16478:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16463:3:181"},"nodeType":"YulFunctionCall","src":"16463:18:181"},{"hexValue":"616d6f756e74735b695d203c206d696e416d6f756e74735b695d","kind":"string","nodeType":"YulLiteral","src":"16483:28:181","type":"","value":"amounts[i] < minAmounts[i]"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16456:6:181"},"nodeType":"YulFunctionCall","src":"16456:56:181"},"nodeType":"YulExpressionStatement","src":"16456:56:181"},{"nodeType":"YulAssignment","src":"16521:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16533:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16544:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16529:3:181"},"nodeType":"YulFunctionCall","src":"16529:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16521:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f9716ead0cbfa1f0d7e4fb0f8f862f9707576ae17b9c27448547344167a1c211__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16354:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16368:4:181","type":""}],"src":"16203:350:181"},{"body":{"nodeType":"YulBlock","src":"16737:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16754:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16765:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16747:6:181"},"nodeType":"YulFunctionCall","src":"16747:21:181"},"nodeType":"YulExpressionStatement","src":"16747:21:181"},{"nodeType":"YulAssignment","src":"16777:64:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16814:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16826:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16837:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16822:3:181"},"nodeType":"YulFunctionCall","src":"16822:18:181"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"16785:28:181"},"nodeType":"YulFunctionCall","src":"16785:56:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16777:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16861:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16872:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16857:3:181"},"nodeType":"YulFunctionCall","src":"16857:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"16877:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16850:6:181"},"nodeType":"YulFunctionCall","src":"16850:34:181"},"nodeType":"YulExpressionStatement","src":"16850:34:181"}]},"name":"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_uint256__to_t_array$_t_uint256_$dyn_memory_ptr_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16698:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16709:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16717:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16728:4:181","type":""}],"src":"16558:332:181"},{"body":{"nodeType":"YulBlock","src":"17069:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17086:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17097:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17079:6:181"},"nodeType":"YulFunctionCall","src":"17079:21:181"},"nodeType":"YulExpressionStatement","src":"17079:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17120:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17131:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17116:3:181"},"nodeType":"YulFunctionCall","src":"17116:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17136:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17109:6:181"},"nodeType":"YulFunctionCall","src":"17109:30:181"},"nodeType":"YulExpressionStatement","src":"17109:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17159:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17170:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17155:3:181"},"nodeType":"YulFunctionCall","src":"17155:18:181"},{"hexValue":"4420646f6573206e6f7420636f6e7665726765","kind":"string","nodeType":"YulLiteral","src":"17175:21:181","type":"","value":"D does not converge"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17148:6:181"},"nodeType":"YulFunctionCall","src":"17148:49:181"},"nodeType":"YulExpressionStatement","src":"17148:49:181"},{"nodeType":"YulAssignment","src":"17206:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17218:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17229:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17214:3:181"},"nodeType":"YulFunctionCall","src":"17214:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17206:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_eb80683d13e69e40aa7f57ce3558136d2c8c4c88f682021213f7030fc3d23afd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17046:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17060:4:181","type":""}],"src":"16895:343:181"},{"body":{"nodeType":"YulBlock","src":"17417:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17434:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17445:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17427:6:181"},"nodeType":"YulFunctionCall","src":"17427:21:181"},"nodeType":"YulExpressionStatement","src":"17427:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17468:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17479:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17464:3:181"},"nodeType":"YulFunctionCall","src":"17464:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17484:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17457:6:181"},"nodeType":"YulFunctionCall","src":"17457:30:181"},"nodeType":"YulExpressionStatement","src":"17457:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17507:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17518:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17503:3:181"},"nodeType":"YulFunctionCall","src":"17503:18:181"},{"hexValue":"6d69736d6174636820706f6f6c20746f6b656e73","kind":"string","nodeType":"YulLiteral","src":"17523:22:181","type":"","value":"mismatch pool tokens"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17496:6:181"},"nodeType":"YulFunctionCall","src":"17496:50:181"},"nodeType":"YulExpressionStatement","src":"17496:50:181"},{"nodeType":"YulAssignment","src":"17555:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17567:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17578:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17563:3:181"},"nodeType":"YulFunctionCall","src":"17563:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17555:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2f637b5966c86516cd0e8631a2a2dbb5ced6ddd78c0dceb24f758a9d4073aab8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17394:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17408:4:181","type":""}],"src":"17243:344:181"},{"body":{"nodeType":"YulBlock","src":"17766:178:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17783:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17794:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17776:6:181"},"nodeType":"YulFunctionCall","src":"17776:21:181"},"nodeType":"YulExpressionStatement","src":"17776:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17817:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17828:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17813:3:181"},"nodeType":"YulFunctionCall","src":"17813:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17833:2:181","type":"","value":"28"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17806:6:181"},"nodeType":"YulFunctionCall","src":"17806:30:181"},"nodeType":"YulExpressionStatement","src":"17806:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17856:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17867:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17852:3:181"},"nodeType":"YulFunctionCall","src":"17852:18:181"},{"hexValue":"7769746864726177206d6f7265207468616e20617661696c61626c65","kind":"string","nodeType":"YulLiteral","src":"17872:30:181","type":"","value":"withdraw more than available"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17845:6:181"},"nodeType":"YulFunctionCall","src":"17845:58:181"},"nodeType":"YulExpressionStatement","src":"17845:58:181"},{"nodeType":"YulAssignment","src":"17912:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17924:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17935:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17920:3:181"},"nodeType":"YulFunctionCall","src":"17920:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17912:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a5d69ce6c1af4155857291c80267a8fe45eaf0a8a37d5e7aef002f4e00be6446__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17743:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17757:4:181","type":""}],"src":"17592:352:181"},{"body":{"nodeType":"YulBlock","src":"18123:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18140:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18151:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18133:6:181"},"nodeType":"YulFunctionCall","src":"18133:21:181"},"nodeType":"YulExpressionStatement","src":"18133:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18174:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18185:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18170:3:181"},"nodeType":"YulFunctionCall","src":"18170:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18190:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18163:6:181"},"nodeType":"YulFunctionCall","src":"18163:30:181"},"nodeType":"YulExpressionStatement","src":"18163:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18213:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18224:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18209:3:181"},"nodeType":"YulFunctionCall","src":"18209:18:181"},{"hexValue":"217a65726f20616d6f756e74","kind":"string","nodeType":"YulLiteral","src":"18229:14:181","type":"","value":"!zero amount"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18202:6:181"},"nodeType":"YulFunctionCall","src":"18202:42:181"},"nodeType":"YulExpressionStatement","src":"18202:42:181"},{"nodeType":"YulAssignment","src":"18253:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18265:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18276:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18261:3:181"},"nodeType":"YulFunctionCall","src":"18261:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18253:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ad3743fd30ada6469788b58d66f88c735cea919feecd588df3ad8b7d9a2a3507__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18100:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18114:4:181","type":""}],"src":"17949:336:181"},{"body":{"nodeType":"YulBlock","src":"18464:177:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18481:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18492:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18474:6:181"},"nodeType":"YulFunctionCall","src":"18474:21:181"},"nodeType":"YulExpressionStatement","src":"18474:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18515:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18526:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18511:3:181"},"nodeType":"YulFunctionCall","src":"18511:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18531:2:181","type":"","value":"27"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18504:6:181"},"nodeType":"YulFunctionCall","src":"18504:30:181"},"nodeType":"YulExpressionStatement","src":"18504:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18554:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18565:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18550:3:181"},"nodeType":"YulFunctionCall","src":"18550:18:181"},{"hexValue":"746f6b656e416d6f756e74203e206d61784275726e416d6f756e74","kind":"string","nodeType":"YulLiteral","src":"18570:29:181","type":"","value":"tokenAmount > maxBurnAmount"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18543:6:181"},"nodeType":"YulFunctionCall","src":"18543:57:181"},"nodeType":"YulExpressionStatement","src":"18543:57:181"},{"nodeType":"YulAssignment","src":"18609:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18621:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18632:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18617:3:181"},"nodeType":"YulFunctionCall","src":"18617:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18609:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a7a312f14c5778159227ed2c11234cdc582e54216594239df89b5aac8a9fbfd9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18441:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18455:4:181","type":""}],"src":"18290:351:181"},{"body":{"nodeType":"YulBlock","src":"18820:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18837:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18848:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18830:6:181"},"nodeType":"YulFunctionCall","src":"18830:21:181"},"nodeType":"YulExpressionStatement","src":"18830:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18871:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18882:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18867:3:181"},"nodeType":"YulFunctionCall","src":"18867:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18887:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18860:6:181"},"nodeType":"YulFunctionCall","src":"18860:30:181"},"nodeType":"YulExpressionStatement","src":"18860:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18910:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18921:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18906:3:181"},"nodeType":"YulFunctionCall","src":"18906:18:181"},{"hexValue":"636f6d7061726520746f6b656e20746f20697473656c66","kind":"string","nodeType":"YulLiteral","src":"18926:25:181","type":"","value":"compare token to itself"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18899:6:181"},"nodeType":"YulFunctionCall","src":"18899:53:181"},"nodeType":"YulExpressionStatement","src":"18899:53:181"},{"nodeType":"YulAssignment","src":"18961:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18973:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18984:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18969:3:181"},"nodeType":"YulFunctionCall","src":"18969:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18961:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18797:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18811:4:181","type":""}],"src":"18646:347:181"},{"body":{"nodeType":"YulBlock","src":"19172:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19189:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19200:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19182:6:181"},"nodeType":"YulFunctionCall","src":"19182:21:181"},"nodeType":"YulExpressionStatement","src":"19182:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19223:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19234:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19219:3:181"},"nodeType":"YulFunctionCall","src":"19219:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19239:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19212:6:181"},"nodeType":"YulFunctionCall","src":"19212:30:181"},"nodeType":"YulExpressionStatement","src":"19212:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19262:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19273:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19258:3:181"},"nodeType":"YulFunctionCall","src":"19258:18:181"},{"hexValue":"746f6b656e206e6f7420666f756e64","kind":"string","nodeType":"YulLiteral","src":"19278:17:181","type":"","value":"token not found"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19251:6:181"},"nodeType":"YulFunctionCall","src":"19251:45:181"},"nodeType":"YulExpressionStatement","src":"19251:45:181"},{"nodeType":"YulAssignment","src":"19305:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19317:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19328:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19313:3:181"},"nodeType":"YulFunctionCall","src":"19313:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19305:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9696d201946a7b6efbea55f1e57c9bbecf77447f35c86ca3cfdc292daa9e8b3d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19149:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19163:4:181","type":""}],"src":"18998:339:181"},{"body":{"nodeType":"YulBlock","src":"19406:358:181","statements":[{"nodeType":"YulVariableDeclaration","src":"19416:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"19431:1:181","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"19420:7:181","type":""}]},{"nodeType":"YulAssignment","src":"19441:16:181","value":{"name":"power_1","nodeType":"YulIdentifier","src":"19450:7:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"19441:5:181"}]},{"nodeType":"YulAssignment","src":"19466:13:181","value":{"name":"_base","nodeType":"YulIdentifier","src":"19474:5:181"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"19466:4:181"}]},{"body":{"nodeType":"YulBlock","src":"19530:228:181","statements":[{"body":{"nodeType":"YulBlock","src":"19575:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"19577:16:181"},"nodeType":"YulFunctionCall","src":"19577:18:181"},"nodeType":"YulExpressionStatement","src":"19577:18:181"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"19550:4:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19564:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"19560:3:181"},"nodeType":"YulFunctionCall","src":"19560:6:181"},{"name":"base","nodeType":"YulIdentifier","src":"19568:4:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"19556:3:181"},"nodeType":"YulFunctionCall","src":"19556:17:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"19547:2:181"},"nodeType":"YulFunctionCall","src":"19547:27:181"},"nodeType":"YulIf","src":"19544:53:181"},{"body":{"nodeType":"YulBlock","src":"19636:29:181","statements":[{"nodeType":"YulAssignment","src":"19638:25:181","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"19651:5:181"},{"name":"base","nodeType":"YulIdentifier","src":"19658:4:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"19647:3:181"},"nodeType":"YulFunctionCall","src":"19647:16:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"19638:5:181"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"19617:8:181"},{"name":"power_1","nodeType":"YulIdentifier","src":"19627:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19613:3:181"},"nodeType":"YulFunctionCall","src":"19613:22:181"},"nodeType":"YulIf","src":"19610:55:181"},{"nodeType":"YulAssignment","src":"19678:23:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"19690:4:181"},{"name":"base","nodeType":"YulIdentifier","src":"19696:4:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"19686:3:181"},"nodeType":"YulFunctionCall","src":"19686:15:181"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"19678:4:181"}]},{"nodeType":"YulAssignment","src":"19714:34:181","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"19730:7:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"19739:8:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"19726:3:181"},"nodeType":"YulFunctionCall","src":"19726:22:181"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"19714:8:181"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"19499:8:181"},{"name":"power_1","nodeType":"YulIdentifier","src":"19509:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"19496:2:181"},"nodeType":"YulFunctionCall","src":"19496:21:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"19518:3:181","statements":[]},"pre":{"nodeType":"YulBlock","src":"19492:3:181","statements":[]},"src":"19488:270:181"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"19370:5:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"19377:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"19390:5:181","type":""},{"name":"base","nodeType":"YulTypedName","src":"19397:4:181","type":""}],"src":"19342:422:181"},{"body":{"nodeType":"YulBlock","src":"19828:747:181","statements":[{"body":{"nodeType":"YulBlock","src":"19866:52:181","statements":[{"nodeType":"YulAssignment","src":"19880:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"19889:1:181","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"19880:5:181"}]},{"nodeType":"YulLeave","src":"19903:5:181"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"19848:8:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19841:6:181"},"nodeType":"YulFunctionCall","src":"19841:16:181"},"nodeType":"YulIf","src":"19838:80:181"},{"body":{"nodeType":"YulBlock","src":"19951:52:181","statements":[{"nodeType":"YulAssignment","src":"19965:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"19974:1:181","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"19965:5:181"}]},{"nodeType":"YulLeave","src":"19988:5:181"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"19937:4:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19930:6:181"},"nodeType":"YulFunctionCall","src":"19930:12:181"},"nodeType":"YulIf","src":"19927:76:181"},{"cases":[{"body":{"nodeType":"YulBlock","src":"20039:52:181","statements":[{"nodeType":"YulAssignment","src":"20053:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"20062:1:181","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"20053:5:181"}]},{"nodeType":"YulLeave","src":"20076:5:181"}]},"nodeType":"YulCase","src":"20032:59:181","value":{"kind":"number","nodeType":"YulLiteral","src":"20037:1:181","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"20107:123:181","statements":[{"body":{"nodeType":"YulBlock","src":"20142:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"20144:16:181"},"nodeType":"YulFunctionCall","src":"20144:18:181"},"nodeType":"YulExpressionStatement","src":"20144:18:181"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"20127:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"20137:3:181","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20124:2:181"},"nodeType":"YulFunctionCall","src":"20124:17:181"},"nodeType":"YulIf","src":"20121:43:181"},{"nodeType":"YulAssignment","src":"20177:25:181","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"20190:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"20200:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"20186:3:181"},"nodeType":"YulFunctionCall","src":"20186:16:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"20177:5:181"}]},{"nodeType":"YulLeave","src":"20215:5:181"}]},"nodeType":"YulCase","src":"20100:130:181","value":{"kind":"number","nodeType":"YulLiteral","src":"20105:1:181","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"20019:4:181"},"nodeType":"YulSwitch","src":"20012:218:181"},{"body":{"nodeType":"YulBlock","src":"20328:70:181","statements":[{"nodeType":"YulAssignment","src":"20342:28:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"20355:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"20361:8:181"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"20351:3:181"},"nodeType":"YulFunctionCall","src":"20351:19:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"20342:5:181"}]},{"nodeType":"YulLeave","src":"20383:5:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"20252:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"20258:2:181","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"20249:2:181"},"nodeType":"YulFunctionCall","src":"20249:12:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"20266:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"20276:2:181","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"20263:2:181"},"nodeType":"YulFunctionCall","src":"20263:16:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20245:3:181"},"nodeType":"YulFunctionCall","src":"20245:35:181"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"20289:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"20295:3:181","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"20286:2:181"},"nodeType":"YulFunctionCall","src":"20286:13:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"20304:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"20314:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"20301:2:181"},"nodeType":"YulFunctionCall","src":"20301:16:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20282:3:181"},"nodeType":"YulFunctionCall","src":"20282:36:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"20242:2:181"},"nodeType":"YulFunctionCall","src":"20242:77:181"},"nodeType":"YulIf","src":"20239:159:181"},{"nodeType":"YulVariableDeclaration","src":"20407:57:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"20449:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"20455:8:181"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"20430:18:181"},"nodeType":"YulFunctionCall","src":"20430:34:181"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"20411:7:181","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"20420:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"20509:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"20511:16:181"},"nodeType":"YulFunctionCall","src":"20511:18:181"},"nodeType":"YulExpressionStatement","src":"20511:18:181"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"20479:7:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20496:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"20492:3:181"},"nodeType":"YulFunctionCall","src":"20492:6:181"},{"name":"base_1","nodeType":"YulIdentifier","src":"20500:6:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"20488:3:181"},"nodeType":"YulFunctionCall","src":"20488:19:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20476:2:181"},"nodeType":"YulFunctionCall","src":"20476:32:181"},"nodeType":"YulIf","src":"20473:58:181"},{"nodeType":"YulAssignment","src":"20540:29:181","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"20553:7:181"},{"name":"base_1","nodeType":"YulIdentifier","src":"20562:6:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"20549:3:181"},"nodeType":"YulFunctionCall","src":"20549:20:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"20540:5:181"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"19799:4:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"19805:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"19818:5:181","type":""}],"src":"19769:806:181"},{"body":{"nodeType":"YulBlock","src":"20650:61:181","statements":[{"nodeType":"YulAssignment","src":"20660:45:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"20690:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"20696:8:181"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"20669:20:181"},"nodeType":"YulFunctionCall","src":"20669:36:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"20660:5:181"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"20621:4:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"20627:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"20640:5:181","type":""}],"src":"20580:131:181"},{"body":{"nodeType":"YulBlock","src":"20890:158:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20907:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20918:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20900:6:181"},"nodeType":"YulFunctionCall","src":"20900:21:181"},"nodeType":"YulExpressionStatement","src":"20900:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20941:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20952:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20937:3:181"},"nodeType":"YulFunctionCall","src":"20937:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20957:1:181","type":"","value":"9"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20930:6:181"},"nodeType":"YulFunctionCall","src":"20930:29:181"},"nodeType":"YulExpressionStatement","src":"20930:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20979:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20990:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20975:3:181"},"nodeType":"YulFunctionCall","src":"20975:18:181"},{"hexValue":"6e6f7420666f756e64","kind":"string","nodeType":"YulLiteral","src":"20995:11:181","type":"","value":"not found"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20968:6:181"},"nodeType":"YulFunctionCall","src":"20968:39:181"},"nodeType":"YulExpressionStatement","src":"20968:39:181"},{"nodeType":"YulAssignment","src":"21016:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21028:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21039:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21024:3:181"},"nodeType":"YulFunctionCall","src":"21024:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21016:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9b887cfddc434e3cf41b666954131afc611b880c7637aac66ca1f629f8984c5b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20867:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20881:4:181","type":""}],"src":"20716:332:181"},{"body":{"nodeType":"YulBlock","src":"21227:164:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21244:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21255:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21237:6:181"},"nodeType":"YulFunctionCall","src":"21237:21:181"},"nodeType":"YulExpressionStatement","src":"21237:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21278:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21289:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21274:3:181"},"nodeType":"YulFunctionCall","src":"21274:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"21294:2:181","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21267:6:181"},"nodeType":"YulFunctionCall","src":"21267:30:181"},"nodeType":"YulExpressionStatement","src":"21267:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21317:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21328:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21313:3:181"},"nodeType":"YulFunctionCall","src":"21313:18:181"},{"hexValue":"6479203c206d696e416d6f756e74","kind":"string","nodeType":"YulLiteral","src":"21333:16:181","type":"","value":"dy < minAmount"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21306:6:181"},"nodeType":"YulFunctionCall","src":"21306:44:181"},"nodeType":"YulExpressionStatement","src":"21306:44:181"},{"nodeType":"YulAssignment","src":"21359:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21371:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21382:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21367:3:181"},"nodeType":"YulFunctionCall","src":"21367:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21359:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_3569a113599fc30dddee53f7bfa525ade1d72800ee559c1f223157ef9a1e0da6__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21204:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21218:4:181","type":""}],"src":"21053:338:181"},{"body":{"nodeType":"YulBlock","src":"21579:217:181","statements":[{"nodeType":"YulAssignment","src":"21589:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21601:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21612:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21597:3:181"},"nodeType":"YulFunctionCall","src":"21597:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21589:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21632:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"21643:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21625:6:181"},"nodeType":"YulFunctionCall","src":"21625:25:181"},"nodeType":"YulExpressionStatement","src":"21625:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21670:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21681:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21666:3:181"},"nodeType":"YulFunctionCall","src":"21666:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"21686:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21659:6:181"},"nodeType":"YulFunctionCall","src":"21659:34:181"},"nodeType":"YulExpressionStatement","src":"21659:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21713:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21724:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21709:3:181"},"nodeType":"YulFunctionCall","src":"21709:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"21733:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"21741:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21729:3:181"},"nodeType":"YulFunctionCall","src":"21729:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21702:6:181"},"nodeType":"YulFunctionCall","src":"21702:45:181"},"nodeType":"YulExpressionStatement","src":"21702:45:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21767:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21778:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21763:3:181"},"nodeType":"YulFunctionCall","src":"21763:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"21783:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21756:6:181"},"nodeType":"YulFunctionCall","src":"21756:34:181"},"nodeType":"YulExpressionStatement","src":"21756:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint8_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21524:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"21535:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"21543:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21551:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"21559:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21570:4:181","type":""}],"src":"21396:400:181"},{"body":{"nodeType":"YulBlock","src":"21975:163:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21992:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22003:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21985:6:181"},"nodeType":"YulFunctionCall","src":"21985:21:181"},"nodeType":"YulExpressionStatement","src":"21985:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22026:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22037:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22022:3:181"},"nodeType":"YulFunctionCall","src":"22022:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22042:2:181","type":"","value":"13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22015:6:181"},"nodeType":"YulFunctionCall","src":"22015:30:181"},"nodeType":"YulExpressionStatement","src":"22015:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22065:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22076:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22061:3:181"},"nodeType":"YulFunctionCall","src":"22061:18:181"},{"hexValue":"3e706f6f6c2062616c616e6365","kind":"string","nodeType":"YulLiteral","src":"22081:15:181","type":"","value":">pool balance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22054:6:181"},"nodeType":"YulFunctionCall","src":"22054:43:181"},"nodeType":"YulExpressionStatement","src":"22054:43:181"},{"nodeType":"YulAssignment","src":"22106:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22118:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22129:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22114:3:181"},"nodeType":"YulFunctionCall","src":"22114:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22106:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4798a1cccb10622ad3eddce5aec990d3b316e4246900ba5afea19b6d9d371948__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21952:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21966:4:181","type":""}],"src":"21801:337:181"},{"body":{"nodeType":"YulBlock","src":"22317:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22334:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22345:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22327:6:181"},"nodeType":"YulFunctionCall","src":"22327:21:181"},"nodeType":"YulExpressionStatement","src":"22327:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22368:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22379:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22364:3:181"},"nodeType":"YulFunctionCall","src":"22364:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22384:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22357:6:181"},"nodeType":"YulFunctionCall","src":"22357:30:181"},"nodeType":"YulExpressionStatement","src":"22357:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22407:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22418:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22403:3:181"},"nodeType":"YulFunctionCall","src":"22403:18:181"},{"hexValue":"6478203e206d61784478","kind":"string","nodeType":"YulLiteral","src":"22423:12:181","type":"","value":"dx > maxDx"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22396:6:181"},"nodeType":"YulFunctionCall","src":"22396:40:181"},"nodeType":"YulExpressionStatement","src":"22396:40:181"},{"nodeType":"YulAssignment","src":"22445:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22457:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22468:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22453:3:181"},"nodeType":"YulFunctionCall","src":"22453:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22445:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4406c1e208c572ab95085aa92d385cddaa474035df8163bb5a0a2c403800484d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22294:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22308:4:181","type":""}],"src":"22143:334:181"},{"body":{"nodeType":"YulBlock","src":"22656:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22673:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22684:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22666:6:181"},"nodeType":"YulFunctionCall","src":"22666:21:181"},"nodeType":"YulExpressionStatement","src":"22666:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22707:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22718:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22703:3:181"},"nodeType":"YulFunctionCall","src":"22703:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22723:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22696:6:181"},"nodeType":"YulFunctionCall","src":"22696:30:181"},"nodeType":"YulExpressionStatement","src":"22696:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22746:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22757:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22742:3:181"},"nodeType":"YulFunctionCall","src":"22742:18:181"},{"hexValue":"6d6f7265207468616e20796f75206f776e","kind":"string","nodeType":"YulLiteral","src":"22762:19:181","type":"","value":"more than you own"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22735:6:181"},"nodeType":"YulFunctionCall","src":"22735:47:181"},"nodeType":"YulExpressionStatement","src":"22735:47:181"},{"nodeType":"YulAssignment","src":"22791:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22803:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22814:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22799:3:181"},"nodeType":"YulFunctionCall","src":"22799:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22791:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_49b5230bcef6bb857dbf12a192f051cfc648d5c34767bdb2c1c4044373c29ca8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22633:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22647:4:181","type":""}],"src":"22482:341:181"},{"body":{"nodeType":"YulBlock","src":"23009:228:181","statements":[{"nodeType":"YulAssignment","src":"23019:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23031:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23042:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23027:3:181"},"nodeType":"YulFunctionCall","src":"23027:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23019:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23062:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"23073:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23055:6:181"},"nodeType":"YulFunctionCall","src":"23055:25:181"},"nodeType":"YulExpressionStatement","src":"23055:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23100:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23111:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23096:3:181"},"nodeType":"YulFunctionCall","src":"23096:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"23116:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23089:6:181"},"nodeType":"YulFunctionCall","src":"23089:34:181"},"nodeType":"YulExpressionStatement","src":"23089:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23143:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23154:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23139:3:181"},"nodeType":"YulFunctionCall","src":"23139:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"23163:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"23171:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23159:3:181"},"nodeType":"YulFunctionCall","src":"23159:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23132:6:181"},"nodeType":"YulFunctionCall","src":"23132:45:181"},"nodeType":"YulExpressionStatement","src":"23132:45:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23197:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23208:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23193:3:181"},"nodeType":"YulFunctionCall","src":"23193:18:181"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"23217:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"23225:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23213:3:181"},"nodeType":"YulFunctionCall","src":"23213:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23186:6:181"},"nodeType":"YulFunctionCall","src":"23186:45:181"},"nodeType":"YulExpressionStatement","src":"23186:45:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint8_t_uint8__to_t_uint256_t_uint256_t_uint128_t_uint128__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22954:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"22965:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"22973:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22981:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"22989:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23000:4:181","type":""}],"src":"22828:409:181"},{"body":{"nodeType":"YulBlock","src":"23416:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23433:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23444:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23426:6:181"},"nodeType":"YulFunctionCall","src":"23426:21:181"},"nodeType":"YulExpressionStatement","src":"23426:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23467:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23478:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23463:3:181"},"nodeType":"YulFunctionCall","src":"23463:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23483:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23456:6:181"},"nodeType":"YulFunctionCall","src":"23456:30:181"},"nodeType":"YulExpressionStatement","src":"23456:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23506:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23517:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23502:3:181"},"nodeType":"YulFunctionCall","src":"23502:18:181"},{"hexValue":"52616d7020697320616c72656164792073746f70706564","kind":"string","nodeType":"YulLiteral","src":"23522:25:181","type":"","value":"Ramp is already stopped"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23495:6:181"},"nodeType":"YulFunctionCall","src":"23495:53:181"},"nodeType":"YulExpressionStatement","src":"23495:53:181"},{"nodeType":"YulAssignment","src":"23557:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23569:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23580:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23565:3:181"},"nodeType":"YulFunctionCall","src":"23565:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23557:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1a473326c7eab86a4c1915be8a93321772f3ce5660b51eb1a81d3ac6b9907aa3__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23393:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23407:4:181","type":""}],"src":"23242:347:181"},{"body":{"nodeType":"YulBlock","src":"23723:119:181","statements":[{"nodeType":"YulAssignment","src":"23733:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23745:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23756:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23741:3:181"},"nodeType":"YulFunctionCall","src":"23741:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23733:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23775:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"23786:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23768:6:181"},"nodeType":"YulFunctionCall","src":"23768:25:181"},"nodeType":"YulExpressionStatement","src":"23768:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23813:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23824:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23809:3:181"},"nodeType":"YulFunctionCall","src":"23809:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"23829:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23802:6:181"},"nodeType":"YulFunctionCall","src":"23802:34:181"},"nodeType":"YulExpressionStatement","src":"23802:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23684:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"23695:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"23703:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23714:4:181","type":""}],"src":"23594:248:181"},{"body":{"nodeType":"YulBlock","src":"24021:172:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24038:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24049:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24031:6:181"},"nodeType":"YulFunctionCall","src":"24031:21:181"},"nodeType":"YulExpressionStatement","src":"24031:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24072:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24083:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24068:3:181"},"nodeType":"YulFunctionCall","src":"24068:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24088:2:181","type":"","value":"22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24061:6:181"},"nodeType":"YulFunctionCall","src":"24061:30:181"},"nodeType":"YulExpressionStatement","src":"24061:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24111:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24122:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24107:3:181"},"nodeType":"YulFunctionCall","src":"24107:18:181"},{"hexValue":"73776170206d6f7265207468616e20796f75206f776e","kind":"string","nodeType":"YulLiteral","src":"24127:24:181","type":"","value":"swap more than you own"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24100:6:181"},"nodeType":"YulFunctionCall","src":"24100:52:181"},"nodeType":"YulExpressionStatement","src":"24100:52:181"},{"nodeType":"YulAssignment","src":"24161:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24173:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24184:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24169:3:181"},"nodeType":"YulFunctionCall","src":"24169:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24161:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1b3f2c393a520e73eb7bdb3fda675794175327c242b37d24eefae133e4d40778__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23998:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24012:4:181","type":""}],"src":"23847:346:181"},{"body":{"nodeType":"YulBlock","src":"24372:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24389:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24400:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24382:6:181"},"nodeType":"YulFunctionCall","src":"24382:21:181"},"nodeType":"YulExpressionStatement","src":"24382:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24423:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24434:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24419:3:181"},"nodeType":"YulFunctionCall","src":"24419:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24439:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24412:6:181"},"nodeType":"YulFunctionCall","src":"24412:30:181"},"nodeType":"YulExpressionStatement","src":"24412:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24462:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24473:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24458:3:181"},"nodeType":"YulFunctionCall","src":"24458:18:181"},{"hexValue":"6479203c206d696e4479","kind":"string","nodeType":"YulLiteral","src":"24478:12:181","type":"","value":"dy < minDy"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24451:6:181"},"nodeType":"YulFunctionCall","src":"24451:40:181"},"nodeType":"YulExpressionStatement","src":"24451:40:181"},{"nodeType":"YulAssignment","src":"24500:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24512:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24523:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24508:3:181"},"nodeType":"YulFunctionCall","src":"24508:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24500:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_6e40b987a1bdbab1b9eb0952052a8ed8be99e503ecda84e0b9bc15992dc05932__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24349:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24363:4:181","type":""}],"src":"24198:334:181"},{"body":{"nodeType":"YulBlock","src":"24711:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24728:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24739:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24721:6:181"},"nodeType":"YulFunctionCall","src":"24721:21:181"},"nodeType":"YulExpressionStatement","src":"24721:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24762:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24773:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24758:3:181"},"nodeType":"YulFunctionCall","src":"24758:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24778:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24751:6:181"},"nodeType":"YulFunctionCall","src":"24751:30:181"},"nodeType":"YulExpressionStatement","src":"24751:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24801:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24812:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24797:3:181"},"nodeType":"YulFunctionCall","src":"24797:18:181"},{"hexValue":"57616974203120646179206265666f7265207374617274696e672072616d70","kind":"string","nodeType":"YulLiteral","src":"24817:33:181","type":"","value":"Wait 1 day before starting ramp"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24790:6:181"},"nodeType":"YulFunctionCall","src":"24790:61:181"},"nodeType":"YulExpressionStatement","src":"24790:61:181"},{"nodeType":"YulAssignment","src":"24860:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24872:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24883:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24868:3:181"},"nodeType":"YulFunctionCall","src":"24868:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24860:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1b53e581d849d126253991f586658292489ca99b95601d0e9a46e8a40560683c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24688:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24702:4:181","type":""}],"src":"24537:355:181"},{"body":{"nodeType":"YulBlock","src":"25071:172:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25088:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25099:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25081:6:181"},"nodeType":"YulFunctionCall","src":"25081:21:181"},"nodeType":"YulExpressionStatement","src":"25081:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25122:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25133:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25118:3:181"},"nodeType":"YulFunctionCall","src":"25118:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"25138:2:181","type":"","value":"22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25111:6:181"},"nodeType":"YulFunctionCall","src":"25111:30:181"},"nodeType":"YulExpressionStatement","src":"25111:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25161:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25172:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25157:3:181"},"nodeType":"YulFunctionCall","src":"25157:18:181"},{"hexValue":"496e73756666696369656e742072616d702074696d65","kind":"string","nodeType":"YulLiteral","src":"25177:24:181","type":"","value":"Insufficient ramp time"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25150:6:181"},"nodeType":"YulFunctionCall","src":"25150:52:181"},"nodeType":"YulExpressionStatement","src":"25150:52:181"},{"nodeType":"YulAssignment","src":"25211:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25223:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25234:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25219:3:181"},"nodeType":"YulFunctionCall","src":"25219:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25211:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4c79bf4677fbadf48dfed0cfd80497295366e965c13f89299485a45d83898b6a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25048:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25062:4:181","type":""}],"src":"24897:346:181"},{"body":{"nodeType":"YulBlock","src":"25422:232:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25439:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25450:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25432:6:181"},"nodeType":"YulFunctionCall","src":"25432:21:181"},"nodeType":"YulExpressionStatement","src":"25432:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25473:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25484:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25469:3:181"},"nodeType":"YulFunctionCall","src":"25469:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"25489:2:181","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25462:6:181"},"nodeType":"YulFunctionCall","src":"25462:30:181"},"nodeType":"YulExpressionStatement","src":"25462:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25512:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25523:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25508:3:181"},"nodeType":"YulFunctionCall","src":"25508:18:181"},{"hexValue":"667574757265415f206d757374206265203e203020616e64203c20436f6e7374","kind":"string","nodeType":"YulLiteral","src":"25528:34:181","type":"","value":"futureA_ must be > 0 and < Const"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25501:6:181"},"nodeType":"YulFunctionCall","src":"25501:62:181"},"nodeType":"YulExpressionStatement","src":"25501:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25583:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25594:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25579:3:181"},"nodeType":"YulFunctionCall","src":"25579:18:181"},{"hexValue":"616e74732e4d41585f41","kind":"string","nodeType":"YulLiteral","src":"25599:12:181","type":"","value":"ants.MAX_A"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25572:6:181"},"nodeType":"YulFunctionCall","src":"25572:40:181"},"nodeType":"YulExpressionStatement","src":"25572:40:181"},{"nodeType":"YulAssignment","src":"25621:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25633:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25644:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25629:3:181"},"nodeType":"YulFunctionCall","src":"25629:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25621:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_16c70a682a636bc60694f91b894e08a15c0bb032c076db7a2d2d265f7f743409__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25399:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25413:4:181","type":""}],"src":"25248:406:181"},{"body":{"nodeType":"YulBlock","src":"25833:171:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25850:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25861:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25843:6:181"},"nodeType":"YulFunctionCall","src":"25843:21:181"},"nodeType":"YulExpressionStatement","src":"25843:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25884:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25895:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25880:3:181"},"nodeType":"YulFunctionCall","src":"25880:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"25900:2:181","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25873:6:181"},"nodeType":"YulFunctionCall","src":"25873:30:181"},"nodeType":"YulExpressionStatement","src":"25873:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25923:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25934:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25919:3:181"},"nodeType":"YulFunctionCall","src":"25919:18:181"},{"hexValue":"667574757265415f20697320746f6f20736d616c6c","kind":"string","nodeType":"YulLiteral","src":"25939:23:181","type":"","value":"futureA_ is too small"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25912:6:181"},"nodeType":"YulFunctionCall","src":"25912:51:181"},"nodeType":"YulExpressionStatement","src":"25912:51:181"},{"nodeType":"YulAssignment","src":"25972:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25984:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25995:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25980:3:181"},"nodeType":"YulFunctionCall","src":"25980:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25972:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_70ef023479c1247bc56a8110e918ad65744efc349b9118a585df0f3c4ddea941__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25810:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25824:4:181","type":""}],"src":"25659:345:181"},{"body":{"nodeType":"YulBlock","src":"26183:171:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26200:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26211:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26193:6:181"},"nodeType":"YulFunctionCall","src":"26193:21:181"},"nodeType":"YulExpressionStatement","src":"26193:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26234:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26245:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26230:3:181"},"nodeType":"YulFunctionCall","src":"26230:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"26250:2:181","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26223:6:181"},"nodeType":"YulFunctionCall","src":"26223:30:181"},"nodeType":"YulExpressionStatement","src":"26223:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26273:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26284:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26269:3:181"},"nodeType":"YulFunctionCall","src":"26269:18:181"},{"hexValue":"667574757265415f20697320746f6f206c61726765","kind":"string","nodeType":"YulLiteral","src":"26289:23:181","type":"","value":"futureA_ is too large"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26262:6:181"},"nodeType":"YulFunctionCall","src":"26262:51:181"},"nodeType":"YulExpressionStatement","src":"26262:51:181"},{"nodeType":"YulAssignment","src":"26322:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26334:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26345:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26330:3:181"},"nodeType":"YulFunctionCall","src":"26330:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26322:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2ee4dedb99ff885c57b93a92e7fecc104d42f54e9af51e109d9629ee80d199e9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26160:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26174:4:181","type":""}],"src":"26009:345:181"},{"body":{"nodeType":"YulBlock","src":"26544:206:181","statements":[{"nodeType":"YulAssignment","src":"26554:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26566:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26577:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26562:3:181"},"nodeType":"YulFunctionCall","src":"26562:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26554:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26597:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"26608:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26590:6:181"},"nodeType":"YulFunctionCall","src":"26590:25:181"},"nodeType":"YulExpressionStatement","src":"26590:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26635:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26646:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26631:3:181"},"nodeType":"YulFunctionCall","src":"26631:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"26651:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26624:6:181"},"nodeType":"YulFunctionCall","src":"26624:34:181"},"nodeType":"YulExpressionStatement","src":"26624:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26678:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26689:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26674:3:181"},"nodeType":"YulFunctionCall","src":"26674:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"26694:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26667:6:181"},"nodeType":"YulFunctionCall","src":"26667:34:181"},"nodeType":"YulExpressionStatement","src":"26667:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26721:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26732:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26717:3:181"},"nodeType":"YulFunctionCall","src":"26717:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"26737:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26710:6:181"},"nodeType":"YulFunctionCall","src":"26710:34:181"},"nodeType":"YulExpressionStatement","src":"26710:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26489:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"26500:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"26508:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"26516:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"26524:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26535:4:181","type":""}],"src":"26359:391:181"},{"body":{"nodeType":"YulBlock","src":"26929:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26946:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26957:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26939:6:181"},"nodeType":"YulFunctionCall","src":"26939:21:181"},"nodeType":"YulExpressionStatement","src":"26939:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26980:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26991:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26976:3:181"},"nodeType":"YulFunctionCall","src":"26976:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"26996:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26969:6:181"},"nodeType":"YulFunctionCall","src":"26969:30:181"},"nodeType":"YulExpressionStatement","src":"26969:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27019:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27030:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27015:3:181"},"nodeType":"YulFunctionCall","src":"27015:18:181"},{"hexValue":"6d69736d61746368206d756c7469706c69657273","kind":"string","nodeType":"YulLiteral","src":"27035:22:181","type":"","value":"mismatch multipliers"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27008:6:181"},"nodeType":"YulFunctionCall","src":"27008:50:181"},"nodeType":"YulExpressionStatement","src":"27008:50:181"},{"nodeType":"YulAssignment","src":"27067:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27079:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27090:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27075:3:181"},"nodeType":"YulFunctionCall","src":"27075:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"27067:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d9b2e328f4209b3735eca19488e3afd57ba32c456d5e1a010a233e595f7b0b47__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26906:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26920:4:181","type":""}],"src":"26755:344:181"},{"body":{"nodeType":"YulBlock","src":"27278:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27295:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27306:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27288:6:181"},"nodeType":"YulFunctionCall","src":"27288:21:181"},"nodeType":"YulExpressionStatement","src":"27288:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27329:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27340:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27325:3:181"},"nodeType":"YulFunctionCall","src":"27325:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"27345:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27318:6:181"},"nodeType":"YulFunctionCall","src":"27318:30:181"},"nodeType":"YulExpressionStatement","src":"27318:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27368:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27379:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27364:3:181"},"nodeType":"YulFunctionCall","src":"27364:18:181"},{"hexValue":"65786365656420746f74616c20737570706c79","kind":"string","nodeType":"YulLiteral","src":"27384:21:181","type":"","value":"exceed total supply"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27357:6:181"},"nodeType":"YulFunctionCall","src":"27357:49:181"},"nodeType":"YulExpressionStatement","src":"27357:49:181"},{"nodeType":"YulAssignment","src":"27415:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27427:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27438:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27423:3:181"},"nodeType":"YulFunctionCall","src":"27423:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"27415:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b19f02778fe2ebdf3ae6da8b526e4f3fcfda929b6d006b58be5eb0b43957bde5__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27255:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"27269:4:181","type":""}],"src":"27104:343:181"},{"body":{"nodeType":"YulBlock","src":"27609:218:181","statements":[{"nodeType":"YulAssignment","src":"27619:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27631:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27642:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27627:3:181"},"nodeType":"YulFunctionCall","src":"27627:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"27619:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"27654:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27672:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"27677:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"27668:3:181"},"nodeType":"YulFunctionCall","src":"27668:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"27681:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"27664:3:181"},"nodeType":"YulFunctionCall","src":"27664:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"27658:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27699:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"27714:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"27722:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27710:3:181"},"nodeType":"YulFunctionCall","src":"27710:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27692:6:181"},"nodeType":"YulFunctionCall","src":"27692:34:181"},"nodeType":"YulExpressionStatement","src":"27692:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27746:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27757:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27742:3:181"},"nodeType":"YulFunctionCall","src":"27742:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"27766:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"27774:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27762:3:181"},"nodeType":"YulFunctionCall","src":"27762:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27735:6:181"},"nodeType":"YulFunctionCall","src":"27735:43:181"},"nodeType":"YulExpressionStatement","src":"27735:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27798:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27809:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27794:3:181"},"nodeType":"YulFunctionCall","src":"27794:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"27814:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27787:6:181"},"nodeType":"YulFunctionCall","src":"27787:34:181"},"nodeType":"YulExpressionStatement","src":"27787:34:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27562:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"27573:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"27581:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"27589:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"27600:4:181","type":""}],"src":"27452:375:181"},{"body":{"nodeType":"YulBlock","src":"27910:167:181","statements":[{"body":{"nodeType":"YulBlock","src":"27956:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27965:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"27968:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"27958:6:181"},"nodeType":"YulFunctionCall","src":"27958:12:181"},"nodeType":"YulExpressionStatement","src":"27958:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"27931:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"27940:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"27927:3:181"},"nodeType":"YulFunctionCall","src":"27927:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"27952:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"27923:3:181"},"nodeType":"YulFunctionCall","src":"27923:32:181"},"nodeType":"YulIf","src":"27920:52:181"},{"nodeType":"YulVariableDeclaration","src":"27981:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28000:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27994:5:181"},"nodeType":"YulFunctionCall","src":"27994:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"27985:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"28041:5:181"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"28019:21:181"},"nodeType":"YulFunctionCall","src":"28019:28:181"},"nodeType":"YulExpressionStatement","src":"28019:28:181"},{"nodeType":"YulAssignment","src":"28056:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"28066:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"28056:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27876:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"27887:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"27899:6:181","type":""}],"src":"27832:245:181"},{"body":{"nodeType":"YulBlock","src":"28256:232:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28273:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"28284:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28266:6:181"},"nodeType":"YulFunctionCall","src":"28266:21:181"},"nodeType":"YulExpressionStatement","src":"28266:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28307:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"28318:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28303:3:181"},"nodeType":"YulFunctionCall","src":"28303:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"28323:2:181","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28296:6:181"},"nodeType":"YulFunctionCall","src":"28296:30:181"},"nodeType":"YulExpressionStatement","src":"28296:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28346:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"28357:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28342:3:181"},"nodeType":"YulFunctionCall","src":"28342:18:181"},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e","kind":"string","nodeType":"YulLiteral","src":"28362:34:181","type":"","value":"SafeERC20: ERC20 operation did n"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28335:6:181"},"nodeType":"YulFunctionCall","src":"28335:62:181"},"nodeType":"YulExpressionStatement","src":"28335:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28417:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"28428:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28413:3:181"},"nodeType":"YulFunctionCall","src":"28413:18:181"},{"hexValue":"6f742073756363656564","kind":"string","nodeType":"YulLiteral","src":"28433:12:181","type":"","value":"ot succeed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28406:6:181"},"nodeType":"YulFunctionCall","src":"28406:40:181"},"nodeType":"YulExpressionStatement","src":"28406:40:181"},{"nodeType":"YulAssignment","src":"28455:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28467:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"28478:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28463:3:181"},"nodeType":"YulFunctionCall","src":"28463:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"28455:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"28233:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"28247:4:181","type":""}],"src":"28082:406:181"},{"body":{"nodeType":"YulBlock","src":"28667:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28684:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"28695:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28677:6:181"},"nodeType":"YulFunctionCall","src":"28677:21:181"},"nodeType":"YulExpressionStatement","src":"28677:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28718:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"28729:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28714:3:181"},"nodeType":"YulFunctionCall","src":"28714:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"28734:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28707:6:181"},"nodeType":"YulFunctionCall","src":"28707:30:181"},"nodeType":"YulExpressionStatement","src":"28707:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28757:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"28768:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28753:3:181"},"nodeType":"YulFunctionCall","src":"28753:18:181"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f","kind":"string","nodeType":"YulLiteral","src":"28773:34:181","type":"","value":"Address: insufficient balance fo"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28746:6:181"},"nodeType":"YulFunctionCall","src":"28746:62:181"},"nodeType":"YulExpressionStatement","src":"28746:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28828:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"28839:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28824:3:181"},"nodeType":"YulFunctionCall","src":"28824:18:181"},{"hexValue":"722063616c6c","kind":"string","nodeType":"YulLiteral","src":"28844:8:181","type":"","value":"r call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28817:6:181"},"nodeType":"YulFunctionCall","src":"28817:36:181"},"nodeType":"YulExpressionStatement","src":"28817:36:181"},{"nodeType":"YulAssignment","src":"28862:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28874:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"28885:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28870:3:181"},"nodeType":"YulFunctionCall","src":"28870:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"28862:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"28644:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"28658:4:181","type":""}],"src":"28493:402:181"},{"body":{"nodeType":"YulBlock","src":"28966:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"28976:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"28985:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"28980:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"29045:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"29070:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"29075:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29066:3:181"},"nodeType":"YulFunctionCall","src":"29066:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"29089:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"29094:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29085:3:181"},"nodeType":"YulFunctionCall","src":"29085:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29079:5:181"},"nodeType":"YulFunctionCall","src":"29079:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29059:6:181"},"nodeType":"YulFunctionCall","src":"29059:39:181"},"nodeType":"YulExpressionStatement","src":"29059:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"29006:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"29009:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"29003:2:181"},"nodeType":"YulFunctionCall","src":"29003:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"29017:19:181","statements":[{"nodeType":"YulAssignment","src":"29019:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"29028:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"29031:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29024:3:181"},"nodeType":"YulFunctionCall","src":"29024:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"29019:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"28999:3:181","statements":[]},"src":"28995:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"29128:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"29133:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29124:3:181"},"nodeType":"YulFunctionCall","src":"29124:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"29142:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29117:6:181"},"nodeType":"YulFunctionCall","src":"29117:27:181"},"nodeType":"YulExpressionStatement","src":"29117:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"28944:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"28949:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"28954:6:181","type":""}],"src":"28900:250:181"},{"body":{"nodeType":"YulBlock","src":"29292:150:181","statements":[{"nodeType":"YulVariableDeclaration","src":"29302:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"29322:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29316:5:181"},"nodeType":"YulFunctionCall","src":"29316:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"29306:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"29377:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"29385:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29373:3:181"},"nodeType":"YulFunctionCall","src":"29373:17:181"},{"name":"pos","nodeType":"YulIdentifier","src":"29392:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"29397:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"29338:34:181"},"nodeType":"YulFunctionCall","src":"29338:66:181"},"nodeType":"YulExpressionStatement","src":"29338:66:181"},{"nodeType":"YulAssignment","src":"29413:23:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"29424:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"29429:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29420:3:181"},"nodeType":"YulFunctionCall","src":"29420:16:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"29413:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"29268:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"29273:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"29284:3:181","type":""}],"src":"29155:287:181"},{"body":{"nodeType":"YulBlock","src":"29621:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29638:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"29649:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29631:6:181"},"nodeType":"YulFunctionCall","src":"29631:21:181"},"nodeType":"YulExpressionStatement","src":"29631:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29672:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"29683:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29668:3:181"},"nodeType":"YulFunctionCall","src":"29668:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"29688:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29661:6:181"},"nodeType":"YulFunctionCall","src":"29661:30:181"},"nodeType":"YulExpressionStatement","src":"29661:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29711:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"29722:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29707:3:181"},"nodeType":"YulFunctionCall","src":"29707:18:181"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"29727:31:181","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29700:6:181"},"nodeType":"YulFunctionCall","src":"29700:59:181"},"nodeType":"YulExpressionStatement","src":"29700:59:181"},{"nodeType":"YulAssignment","src":"29768:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29780:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"29791:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29776:3:181"},"nodeType":"YulFunctionCall","src":"29776:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"29768:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29598:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"29612:4:181","type":""}],"src":"29447:353:181"},{"body":{"nodeType":"YulBlock","src":"29926:275:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29943:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"29954:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29936:6:181"},"nodeType":"YulFunctionCall","src":"29936:21:181"},"nodeType":"YulExpressionStatement","src":"29936:21:181"},{"nodeType":"YulVariableDeclaration","src":"29966:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"29986:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29980:5:181"},"nodeType":"YulFunctionCall","src":"29980:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"29970:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30013:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"30024:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30009:3:181"},"nodeType":"YulFunctionCall","src":"30009:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"30029:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30002:6:181"},"nodeType":"YulFunctionCall","src":"30002:34:181"},"nodeType":"YulExpressionStatement","src":"30002:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"30084:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"30092:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30080:3:181"},"nodeType":"YulFunctionCall","src":"30080:15:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30101:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"30112:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30097:3:181"},"nodeType":"YulFunctionCall","src":"30097:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"30117:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"30045:34:181"},"nodeType":"YulFunctionCall","src":"30045:79:181"},"nodeType":"YulExpressionStatement","src":"30045:79:181"},{"nodeType":"YulAssignment","src":"30133:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30149:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"30168:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"30176:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30164:3:181"},"nodeType":"YulFunctionCall","src":"30164:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"30185:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"30181:3:181"},"nodeType":"YulFunctionCall","src":"30181:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30160:3:181"},"nodeType":"YulFunctionCall","src":"30160:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30145:3:181"},"nodeType":"YulFunctionCall","src":"30145:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"30192:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30141:3:181"},"nodeType":"YulFunctionCall","src":"30141:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"30133:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29895:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"29906:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"29917:4:181","type":""}],"src":"29805:396:181"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_struct$_Swap_$34379_storage_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_array_uint256_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_array$_t_uint256_$dyn_calldata_ptrt_bool(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_array_uint256_dyn_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n        let value := calldataload(add(headStart, 64))\n        validator_revert_bool(value)\n        value3 := value\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint8t_uint8t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_uint8(add(headStart, 32))\n        value2 := abi_decode_uint8(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint8t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_uint8(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_array_uint256_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        let _3 := 0xffffffffffffffff\n        if gt(_1, _3) { panic_error_0x41() }\n        let _4 := shl(5, _1)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(_4, 63), not(31)))\n        if or(gt(newFreePtr, _3), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        let dst := memPtr\n        mstore(memPtr, _1)\n        dst := add(memPtr, _2)\n        let srcEnd := add(add(offset, _4), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            mstore(dst, calldataload(src))\n            dst := add(dst, _2)\n        }\n        array := memPtr\n    }\n    function abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_array$_t_uint256_$dyn_memory_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value1 := abi_decode_array_uint256_dyn(add(headStart, offset), dataEnd)\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256t_uint8t_array$_t_uint256_$dyn_memory_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_uint8(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value2 := abi_decode_array_uint256_dyn(add(headStart, offset), dataEnd)\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint256t_array$_t_uint256_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_uint256_dyn_calldata(add(headStart, offset), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n    }\n    function abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptrt_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_array_uint256_dyn(add(headStart, offset), dataEnd)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint256t_uint8t_uint8t_uint256t_array$_t_uint256_$dyn_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_uint8(add(headStart, 32))\n        value2 := abi_decode_uint8(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let offset := calldataload(add(headStart, 128))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value4 := abi_decode_array_uint256_dyn(add(headStart, offset), dataEnd)\n    }\n    function abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint256t_uint8(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := abi_decode_uint8(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value1 := value\n    }\n    function abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint256t_uint8t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := abi_decode_uint8(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint8t_uint8t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_uint8(add(headStart, 32))\n        value2 := abi_decode_uint8(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n    }\n    function abi_decode_tuple_t_struct$_Swap_$34379_storage_ptrt_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_8649b1e5b06e4f5968b2a3f0fa64e06710ce221cf73d9057a24a3fccd677b635__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 8)\n        mstore(add(headStart, 64), \"too high\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_stringliteral_724a1a52159ca2ba80a0176a83b5dd7273d23b0484847d7480bf867e72e8022d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"index out of range\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        product := mul(x, y)\n        if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_cfeed71d91768718346c2ea3c2ab2e22b6f1283f91f1be8620ac590423d0fe0f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"exceeds available\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_407c82c74f364e90cf3f20876b92912fd15eeb935ea71a01446be03014fed388__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"mismatch pooled tokens\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_3dce4b63d19b87f59f00e1c83d4e9014c5f915f724b6e06015f43e433d5a13b8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"!supply all tokens\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_bb9053a0213fd7b0c31f2850e8d9176b933be82fddca9a3800fc76e83e2e796c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"D should increase\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_6ddd7f5b4f156ad60913b3898ca8aedad82b4753c6391199bcbb48583e596887__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"mint < min\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_array_uint256_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_uint256_t_uint256__to_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 128)\n        let tail_1 := abi_encode_array_uint256_dyn(value0, add(headStart, 128))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_array_uint256_dyn(value1, tail_1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_487af3faa279cd1df07c0d1897feb1b8a94d7a439a5fcca3a8f816912eee96c2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"Token not found\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_cc521cc6a238ffe1765ef3df47848767360ba7f9b9d10d9ff4421accd82c7c05__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 30)\n        mstore(add(headStart, 64), \"Approximation did not converge\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_f6ffe39fc3cc1849a13d51ded78dcf3b5c94216cc465a3b1b92bc78f59ae6cef__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 13)\n        mstore(add(headStart, 64), \">LP.balanceOf\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4ad81e79192646de58c05c664c8c46273241020a112976d2773155fc181b7641__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"mismatch poolTokens\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_f9716ead0cbfa1f0d7e4fb0f8f862f9707576ae17b9c27448547344167a1c211__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 26)\n        mstore(add(headStart, 64), \"amounts[i] < minAmounts[i]\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr_t_uint256__to_t_array$_t_uint256_$dyn_memory_ptr_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        tail := abi_encode_array_uint256_dyn(value0, add(headStart, 64))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_eb80683d13e69e40aa7f57ce3558136d2c8c4c88f682021213f7030fc3d23afd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"D does not converge\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_2f637b5966c86516cd0e8631a2a2dbb5ced6ddd78c0dceb24f758a9d4073aab8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"mismatch pool tokens\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_a5d69ce6c1af4155857291c80267a8fe45eaf0a8a37d5e7aef002f4e00be6446__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 28)\n        mstore(add(headStart, 64), \"withdraw more than available\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_ad3743fd30ada6469788b58d66f88c735cea919feecd588df3ad8b7d9a2a3507__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!zero amount\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_a7a312f14c5778159227ed2c11234cdc582e54216594239df89b5aac8a9fbfd9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"tokenAmount > maxBurnAmount\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_d73b1ca2c795a74fe874b03d78a509612b51c40039be263abae7905c379d2941__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"compare token to itself\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_9696d201946a7b6efbea55f1e57c9bbecf77447f35c86ca3cfdc292daa9e8b3d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"token not found\")\n        tail := add(headStart, 96)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(not(0), base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(not(0), base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function abi_encode_tuple_t_stringliteral_9b887cfddc434e3cf41b666954131afc611b880c7637aac66ca1f629f8984c5b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 9)\n        mstore(add(headStart, 64), \"not found\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_3569a113599fc30dddee53f7bfa525ade1d72800ee559c1f223157ef9a1e0da6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"dy < minAmount\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint8_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_4798a1cccb10622ad3eddce5aec990d3b316e4246900ba5afea19b6d9d371948__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 13)\n        mstore(add(headStart, 64), \">pool balance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4406c1e208c572ab95085aa92d385cddaa474035df8163bb5a0a2c403800484d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"dx > maxDx\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_49b5230bcef6bb857dbf12a192f051cfc648d5c34767bdb2c1c4044373c29ca8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"more than you own\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint8_t_uint8__to_t_uint256_t_uint256_t_uint128_t_uint128__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), and(value3, 0xff))\n    }\n    function abi_encode_tuple_t_stringliteral_1a473326c7eab86a4c1915be8a93321772f3ce5660b51eb1a81d3ac6b9907aa3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"Ramp is already stopped\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_1b3f2c393a520e73eb7bdb3fda675794175327c242b37d24eefae133e4d40778__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"swap more than you own\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_6e40b987a1bdbab1b9eb0952052a8ed8be99e503ecda84e0b9bc15992dc05932__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"dy < minDy\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1b53e581d849d126253991f586658292489ca99b95601d0e9a46e8a40560683c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"Wait 1 day before starting ramp\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4c79bf4677fbadf48dfed0cfd80497295366e965c13f89299485a45d83898b6a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"Insufficient ramp time\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_16c70a682a636bc60694f91b894e08a15c0bb032c076db7a2d2d265f7f743409__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"futureA_ must be > 0 and < Const\")\n        mstore(add(headStart, 96), \"ants.MAX_A\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_70ef023479c1247bc56a8110e918ad65744efc349b9118a585df0f3c4ddea941__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"futureA_ is too small\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_2ee4dedb99ff885c57b93a92e7fecc104d42f54e9af51e109d9629ee80d199e9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"futureA_ is too large\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_d9b2e328f4209b3735eca19488e3afd57ba32c456d5e1a010a233e595f7b0b47__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"mismatch multipliers\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_b19f02778fe2ebdf3ae6da8b526e4f3fcfda929b6d006b58be5eb0b43957bde5__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"exceed total supply\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory_with_cleanup(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600436106101625760003560e01c806380ba0f2d116100cd578063b92fa35c11610086578063b92fa35c14610355578063e07805aa14610368578063e5b994c514610388578063f2042939146103a8578063f43dee53146103c8578063fc784184146103db57600080fd5b806380ba0f2d146102c957806384eeef27146102dc5780638be1e523146102ef5780638cc122bb146103025780639cbd240614610315578063ae3feedc1461033557600080fd5b806359d9996a1161011f57806359d9996a1461021657806367487f2a146102365780636967280a146102565780636fbb250c1461026957806376a3b67c1461029657806377b83d30146102a957600080fd5b806308bbaa23146101675780631ce9046f1461018957806322b1b5f6146101af57806322b2b607146101c25780632f4998ad146101d557806338e630de146101e8575b600080fd5b81801561017357600080fd5b506101876101823660046141a4565b6103fb565b005b61019c6101973660046141a4565b610488565b6040519081526020015b60405180910390f35b61019c6101bd3660046141c6565b6104d7565b61019c6101d036600461423b565b6104ee565b61019c6101e33660046142af565b610779565b6101fb6101f63660046142f3565b6107e4565b604080519384526020840192909252908201526060016101a6565b81801561022257600080fd5b506101876102313660046141a4565b610af0565b81801561024257600080fd5b5061019c6102513660046143d3565b610b6f565b61019c610264366004614422565b61134e565b81801561027557600080fd5b50610289610284366004614480565b61153d565b6040516101a691906144d2565b61019c6102a4366004614516565b6118e6565b8180156102b557600080fd5b5061019c6102c43660046143d3565b611a93565b61019c6102d736600461455a565b612298565b61019c6102ea3660046145cb565b6124b9565b61019c6102fd3660046141c6565b612540565b6102896103103660046141a4565b61260e565b81801561032157600080fd5b50610187610330366004614600565b6126ec565b81801561034157600080fd5b5061019c61035036600461463c565b612792565b61019c6103633660046142af565b612ae9565b81801561037457600080fd5b5061019c610383366004614669565b612b4a565b81801561039457600080fd5b506101876103a33660046141c6565b612f1d565b8180156103b457600080fd5b5061019c6103c3366004614669565b612fce565b61019c6103d63660046141c6565b613331565b8180156103e757600080fd5b506101876103f63660046146b7565b61333c565b61040b6402540be40060016146f9565b81106104495760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b60448201526064015b60405180910390fd5b600582018190556040518181527fab599d640ca80cde2b09b128a4154a8dfe608cb80f4c9399c8b954b01fd35f38906020015b60405180910390a15050565b600782015460009082106104ae5760405162461bcd60e51b81526004016104409061470c565b82600a0182815481106104c3576104c3614738565b906000526020600020015490505b92915050565b600060646104e483613597565b6104d1919061474e565b6000806104fa86613597565b905060008660090180548060200260200160405190810160405280929190818152602001828054801561054c57602002820191906000526020600020905b815481526020019060010190808311610538575b505050505090506000876008018054806020026020016040519081016040528092919081815260200182805480156105a357602002820191906000526020600020905b81548152602001906001019080831161058f575b5050505050905060008251905060006105c56105bf85856135dd565b866118e6565b905060005b8281101561069c578715610638578989828181106105ea576105ea614738565b9050602002013585828151811061060357610603614738565b602002602001015161061591906146f9565b85828151811061062757610627614738565b602002602001018181525050610694565b89898281811061064a5761064a614738565b9050602002013585828151811061066357610663614738565b60200260200101516106759190614770565b85828151811061068757610687614738565b6020026020010181815250505b6001016105ca565b5060006106b26106ac86866135dd565b876118e6565b905060008b60060160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072f9190614783565b905088156107655782816107438285614770565b61074d919061479c565b610757919061474e565b975050505050505050610771565b82816107438483614770565b949350505050565b60006107da85858585896009018054806020026020016040519081016040528092919081815260200182805480156107d057602002820191906000526020600020905b8154815260200190600101908083116107bc575b50505050506136e7565b5095945050505050565b6000806000806107f388613888565b905080518760ff16106108185760405162461bcd60e51b81526004016104409061470c565b60006040518060a00160405280600081526020016000815260200160008152602001600081526020016000815250905061085189613597565b608082018190526108639083906118e6565b8082528690610872908961479c565b61087c919061474e565b81516108889190614770565b60208201528151829060ff8a169081106108a4576108a4614738565b60200260200101518711156108ef5760405162461bcd60e51b81526020600482015260116024820152706578636565647320617661696c61626c6560781b6044820152606401610440565b61090381608001518984846020015161134e565b604082015281516000906001600160401b038111156109245761092461432e565b60405190808252806020026020018201604052801561094d578160200160208202803683370190505b50905061095f8a600401548451613938565b6060830152825160005b81811015610a3c57600085828151811061098557610985614738565b602002602001015190506402540be40085606001518d60ff1684146109ce57865160208801516109b5908561479c565b6109bf919061474e565b6109c99084614770565b6109f8565b6040870151875160208901516109e4908661479c565b6109ee919061474e565b6109f89190614770565b610a02919061479c565b610a0c919061474e565b610a169082614770565b848381518110610a2857610a28614738565b602090810291909101015250600101610969565b506000610a5384608001518c85876020015161134e565b838c60ff1681518110610a6857610a68614738565b6020026020010151610a7a9190614770565b90508b6008018b60ff1681548110610a9457610a94614738565b9060005260206000200154600182610aac9190614770565b610ab6919061474e565b9050808460400151868d60ff1681518110610ad357610ad3614738565b602002602001015197509750975050505050509450945094915050565b610aff6305f5e10060016146f9565b8110610b385760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401610440565b600482018190556040518181527fd88ea5155021c6f8dafa1a741e173f595cdf77ce7c17d43342131d7f06afdfe59060200161047c565b60078301548251600091908114610bc15760405162461bcd60e51b81526020600482015260166024820152756d69736d6174636820706f6f6c656420746f6b656e7360501b6044820152606401610440565b6000604051806101000160405280600081526020016000815260200160008152602001610bed88613597565b81526020018760060160009054906101000a90046001600160a01b03166001600160a01b031681526020016000815260200187600901805480602002602001604051908101604052809291908181526020018280548015610c6d57602002820191906000526020600020905b815481526020019060010190808311610c59575b5050505050815260200187600801805480602002602001604051908101604052809291908181526020018280548015610cc557602002820191906000526020600020905b815481526020019060010190808311610cb1575b5050505050815250905080608001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d359190614783565b60a0820181905215610d6357610d60610d568260c001518360e001516135dd565b82606001516118e6565b81525b6000826001600160401b03811115610d7d57610d7d61432e565b604051908082528060200260200182016040528015610da6578160200160208202803683370190505b50905060005b83811015610f055760a0830151151580610de05750868181518110610dd357610dd3614738565b6020026020010151600014155b610e215760405162461bcd60e51b815260206004820152601260248201527121737570706c7920616c6c20746f6b656e7360701b6044820152606401610440565b868181518110610e3357610e33614738565b6020026020010151600014610e9e576000886007018281548110610e5957610e59614738565b9060005260206000200160009054906101000a90046001600160a01b03169050610e9c81898481518110610e8f57610e8f614738565b6020026020010151613964565b505b868181518110610eb057610eb0614738565b60200260200101518360c001518281518110610ece57610ece614738565b6020026020010151610ee091906146f9565b828281518110610ef257610ef2614738565b6020908102919091010152600101610dac565b50610f21610f17828460e001516135dd565b83606001516118e6565b60208301819052825110610f6b5760405162461bcd60e51b8152602060048201526011602482015270442073686f756c6420696e63726561736560781b6044820152606401610440565b602082015160408301526000836001600160401b03811115610f8f57610f8f61432e565b604051908082528060200260200182016040528015610fb8578160200160208202803683370190505b5090508260a001516000146111e7576000610fd7896004015486613938565b905060005b858110156111c057600085600001518660c00151838151811061100157611001614738565b60200260200101518760200151611018919061479c565b611022919061474e565b90506402540be40061105686848151811061103f5761103f614738565b602002602001015183613aaf90919063ffffffff16565b611060908561479c565b61106a919061474e565b84838151811061107c5761107c614738565b60200260200101818152505060006402540be4008c600501548685815181106110a7576110a7614738565b60200260200101516110b9919061479c565b6110c3919061474e565b9050808684815181106110d8576110d8614738565b60200260200101516110ea9190614770565b8c60090184815481106110ff576110ff614738565b9060005260206000200181905550808c600a01848154811061112357611123614738565b906000526020600020015461113891906146f9565b8c600a01848154811061114d5761114d614738565b906000526020600020018190555084838151811061116d5761116d614738565b602002602001015186848151811061118757611187614738565b60200260200101516111999190614770565b8684815181106111ab576111ab614738565b60209081029190910101525050600101610fdc565b506111dc6111d2848660e001516135dd565b85606001516118e6565b6040850152506111fe565b81516111fc9060098a01906020850190614144565b505b60008360a0015160000361121757506020830151611245565b835160a0850151604086015161122e908390614770565b611238919061479c565b611242919061474e565b90505b868110156112825760405162461bcd60e51b815260206004820152600a60248201526936b4b73a101e1036b4b760b11b6044820152606401610440565b60808401516040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b1580156112d057600080fd5b505af11580156112e4573d6000803e3d6000fd5b50505050336001600160a01b03167f189c623b666b1b45b83d7178f39b8c087cb09774317ca2f53c2d3c3726f222a289848760200151858960a0015161132a91906146f9565b60405161133a94939291906147ee565b60405180910390a298975050505050505050565b815160009060ff851681116113975760405162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08199bdd5b99608a1b6044820152606401610440565b826000806113a5848a61479c565b905060005b84811015611427578860ff16811461141f578781815181106113ce576113ce614738565b6020026020010151836113e191906146f9565b9250848882815181106113f6576113f6614738565b6020026020010151611408919061479c565b611412888661479c565b61141c919061474e565b93505b6001016113aa565b50611432848261479c565b606461143e888661479c565b611448919061479c565b611452919061474e565b925060008161146260648961479c565b61146c919061474e565b61147690846146f9565b9050600087815b6101008110156114f4578192508984836002611499919061479c565b6114a391906146f9565b6114ad9190614770565b876114b8848061479c565b6114c291906146f9565b6114cc919061474e565b91506114d88284613ad4565b156114ec5750965061077195505050505050565b60010161147d565b5060405162461bcd60e51b815260206004820152601e60248201527f417070726f78696d6174696f6e20646964206e6f7420636f6e766572676500006044820152606401610440565b60068401546040516370a0823160e01b81523360048201526060916001600160a01b03169081906370a0823190602401602060405180830381865afa15801561158a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ae9190614783565b8511156115cd5760405162461bcd60e51b815260040161044090614827565b60078601548381146116175760405162461bcd60e51b81526020600482015260136024820152726d69736d6174636820706f6f6c546f6b656e7360681b6044820152606401610440565b60008760090180548060200260200160405190810160405280929190818152602001828054801561166757602002820191906000526020600020905b815481526020019060010190808311611653575b505050505090506000836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d29190614783565b905060006116e1838a84613aea565b805190915060005b818110156118315789898281811061170357611703614738565b9050602002013583828151811061171c5761171c614738565b602002602001015110156117725760405162461bcd60e51b815260206004820152601a60248201527f616d6f756e74735b695d203c206d696e416d6f756e74735b695d0000000000006044820152606401610440565b82818151811061178457611784614738565b602002602001015185828151811061179e5761179e614738565b60200260200101516117b09190614770565b8c60090182815481106117c5576117c5614738565b90600052602060002001819055506118298c60070182815481106117eb576117eb614738565b9060005260206000200160009054906101000a90046001600160a01b03163385848151811061181c5761181c614738565b6020026020010151613bda565b6001016116e9565b5060405163079cc67960e41b8152336004820152602481018b90526001600160a01b038716906379cc679090604401600060405180830381600087803b15801561187a57600080fd5b505af115801561188e573d6000803e3d6000fd5b503392507f88d38ed598fdd809c2bf01ee49cd24b7fdabf379a83d29567952b60324d58cef91508490506118c28d87614770565b6040516118d092919061484e565b60405180910390a2509998505050505050505050565b815160009081805b828110156119255785818151811061190857611908614738565b60200260200101518261191b91906146f9565b91506001016118ee565b5080600003611939576000925050506104d1565b60008181611947858861479c565b905060005b610100811015611a54578260005b878110156119a557878b828151811061197557611975614738565b6020026020010151611987919061479c565b611991868461479c565b61199b919061474e565b915060010161195a565b50839450808760016119b791906146f9565b6119c1919061479c565b6064856119ce8287614770565b6119d8919061479c565b6119e2919061474e565b6119ec91906146f9565b846119f7898461479c565b6064611a038a8861479c565b611a0d919061474e565b611a1791906146f9565b611a21919061479c565b611a2b919061474e565b9350611a378486613ad4565b15611a4b57839750505050505050506104d1565b5060010161194c565b5060405162461bcd60e51b81526020600482015260136024820152724420646f6573206e6f7420636f6e766572676560681b6044820152606401610440565b600080604051806101000160405280600081526020016000815260200160008152602001611ac087613597565b81526020018660060160009054906101000a90046001600160a01b03166001600160a01b031681526020016000815260200186600901805480602002602001604051908101604052809291908181526020018280548015611b4057602002820191906000526020600020905b815481526020019060010190808311611b2c575b5050505050815260200186600801805480602002602001604051908101604052809291908181526020018280548015611b9857602002820191906000526020600020905b815481526020019060010190808311611b84575b5050505050815250905080608001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c089190614783565b60a082015260078501548451808214611c5a5760405162461bcd60e51b81526020600482015260146024820152736d69736d6174636820706f6f6c20746f6b656e7360601b6044820152606401610440565b60808301516040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc89190614783565b8511158015611cd657508415155b611cf25760405162461bcd60e51b815260040161044090614827565b6000611d02886004015484613938565b90506000836001600160401b03811115611d1e57611d1e61432e565b604051908082528060200260200182016040528015611d47578160200160208202803683370190505b5090506000846001600160401b03811115611d6457611d6461432e565b604051908082528060200260200182016040528015611d8d578160200160208202803683370190505b509050611daf611da58760c001518860e001516135dd565b87606001516118e6565b865260005b85811015611ea057898181518110611dce57611dce614738565b60200260200101518760c001518281518110611dec57611dec614738565b60200260200101511015611e425760405162461bcd60e51b815260206004820152601c60248201527f7769746864726177206d6f7265207468616e20617661696c61626c65000000006044820152606401610440565b898181518110611e5457611e54614738565b60200260200101518760c001518281518110611e7257611e72614738565b602002602001015103828281518110611e8d57611e8d614738565b6020908102919091010152600101611db4565b50611eb2611da5828860e001516135dd565b602087015260005b8581101561208c57600087600001518860c001518381518110611edf57611edf614738565b60200260200101518960200151611ef6919061479c565b611f00919061474e565b90506000611f1984848151811061103f5761103f614738565b90506402540be400611f2b828861479c565b611f35919061474e565b858481518110611f4757611f47614738565b602002602001018181525050505060006402540be4008c60050154858481518110611f7457611f74614738565b6020026020010151611f86919061479c565b611f90919061474e565b905080838381518110611fa557611fa5614738565b6020026020010151611fb79190614770565b8c6009018381548110611fcc57611fcc614738565b9060005260206000200181905550808c600a018381548110611ff057611ff0614738565b906000526020600020015461200591906146f9565b8c600a01838154811061201a5761201a614738565b906000526020600020018190555083828151811061203a5761203a614738565b602002602001015183838151811061205457612054614738565b60200260200101516120669190614770565b83838151811061207857612078614738565b602090810291909101015250600101611eba565b5061209e611da5828860e001516135dd565b60408701819052865160a08801516000935090916120bc9083614770565b6120c6919061479c565b6120d0919061474e565b9050806000036121115760405162461bcd60e51b815260206004820152600c60248201526b085e995c9bc8185b5bdd5b9d60a21b6044820152606401610440565b61211c8160016146f9565b90508781111561216e5760405162461bcd60e51b815260206004820152601b60248201527f746f6b656e416d6f756e74203e206d61784275726e416d6f756e7400000000006044820152606401610440565b608086015160405163079cc67960e41b8152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b1580156121bc57600080fd5b505af11580156121d0573d6000803e3d6000fd5b5050505060005b85811015612230576122288b60070182815481106121f7576121f7614738565b9060005260206000200160009054906101000a90046001600160a01b0316338c848151811061181c5761181c614738565b6001016121d7565b50336001600160a01b03167f3631c28b1f9dd213e0319fb167b554d76b6c283a41143eb400a0d1adb1af17558a848960200151858b60a001516122739190614770565b60405161228394939291906147ee565b60405180910390a29998505050505050505050565b805160009060ff808616908716036122ec5760405162461bcd60e51b815260206004820152601760248201527631b7b6b830b932903a37b5b2b7103a379034ba39b2b63360491b6044820152606401610440565b808660ff161080156123005750808560ff16105b61233e5760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881b9bdd08199bdd5b99608a1b6044820152606401610440565b600061234a84896118e6565b90508060008061235a8b8661479c565b90506000805b868110156123e1578b60ff16810361237a578991506123ad565b8a60ff1681146123a55788818151811061239657612396614738565b602002602001015191506123ad565b600101612360565b6123b782856146f9565b93506123c3878361479c565b6123cd878761479c565b6123d7919061474e565b9450600101612360565b506123ec868361479c565b60646123f8878761479c565b612402919061479c565b61240c919061474e565b935060008261241c60648861479c565b612426919061474e565b61243090856146f9565b9050600086815b6101008110156114f4578192508884836002612453919061479c565b61245d91906146f9565b6124679190614770565b88612472848061479c565b61247c91906146f9565b612486919061474e565b91506124928284613ad4565b156124a8575098506124b0975050505050505050565b600101612437565b95945050505050565b6000806107da8585858860060160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253b9190614783565b613c1e565b60008061255861254f84613888565b6102a485613597565b905060008360060160009054906101000a90046001600160a01b031690506000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125da9190614783565b9050801561260357806125ef6012600a614954565b6125f9908561479c565b6124b0919061474e565b506000949350505050565b60606126e58360090180548060200260200160405190810160405280929190818152602001828054801561266157602002820191906000526020600020905b81548152602001906001019080831161264d575b5050505050838560060160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e09190614783565b613aea565b9392505050565b600782015460005b8181101561278c57600084600701828154811061271357612713614738565b6000918252602082200154600a870180546001600160a01b039092169350908490811061274257612742614738565b90600052602060002001549050806000146127825785600a01838154811061276c5761276c614738565b6000918252602082200155612782828683613bda565b50506001016126f4565b50505050565b60068401546040516370a0823160e01b81523360048201526000916001600160a01b03169081906370a0823190602401602060405180830381865afa1580156127df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128039190614783565b8511156128225760405162461bcd60e51b815260040161044090614827565b600786015460ff851681116128655760405162461bcd60e51b81526020600482015260096024820152681b9bdd08199bdd5b9960ba1b6044820152606401610440565b6000826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c99190614783565b90506000806128da8a8a8a86613c1e565b915091508682101561291f5760405162461bcd60e51b815260206004820152600e60248201526d191e480f081b5a5b905b5bdd5b9d60921b6044820152606401610440565b60006402540be4008b6005015483612937919061479c565b612941919061474e565b905061294d81846146f9565b8b6009018a60ff168154811061296557612965614738565b906000526020600020015461297a9190614770565b8b6009018a60ff168154811061299257612992614738565b60009182526020909120015580156129f757808b600a018a60ff16815481106129bd576129bd614738565b90600052602060002001546129d291906146f9565b8b600a018a60ff16815481106129ea576129ea614738565b6000918252602090912001555b60405163079cc67960e41b8152336004820152602481018b90526001600160a01b038716906379cc679090604401600060405180830381600087803b158015612a3f57600080fd5b505af1158015612a53573d6000803e3d6000fd5b50505050612a8e8b6007018a60ff1681548110612a7257612a72614738565b6000918252602090912001546001600160a01b03163385613bda565b604080518b81526020810186905260ff8b168183015260608101859052905133917f43fb02998f4e03da2e0e6fff53fdbf0c40a9f45f145dc377fc30615d7d7a8a64919081900360800190a250909998505050505050505050565b60006107da8585858589600901805480602002602001604051908101604052809291908181526020018280548015612b4057602002820191906000526020600020905b815481526020019060010190808311612b2c575b5050505050613c95565b6000856009018460ff1681548110612b6457612b64614738565b9060005260206000200154831115612bae5760405162461bcd60e51b815260206004820152600d60248201526c3e706f6f6c2062616c616e636560981b6044820152606401610440565b600080600088600901805480602002602001604051908101604052809291908181526020018280548015612c0157602002820191906000526020600020905b815481526020019060010190808311612bed575b50505050509050612c158989898985613c95565b909350915084831115612c575760405162461bcd60e51b815260206004820152600a6024820152690c8f0407c40dac2f088f60b31b6044820152606401610440565b6000896008018960ff1681548110612c7157612c71614738565b90600052602060002001546402540be4008b6005015485612c92919061479c565b612c9c919061474e565b612ca6919061474e565b90508084838b60ff1681518110612cbf57612cbf614738565b6020026020010151612cd191906146f9565b612cdb9190614770565b8a6009018a60ff1681548110612cf357612cf3614738565b906000526020600020018190555086828960ff1681518110612d1757612d17614738565b6020026020010151612d299190614770565b8a6009018960ff1681548110612d4157612d41614738565b6000918252602090912001558015612da657808a600a018a60ff1681548110612d6c57612d6c614738565b9060005260206000200154612d8191906146f9565b8a600a018a60ff1681548110612d9957612d99614738565b6000918252602090912001555b60008a6007018a60ff1681548110612dc057612dc0614738565b6000918252602090912001546040516370a0823160e01b81523360048201526001600160a01b03909116915081906370a0823190602401602060405180830381865afa158015612e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e389190614783565b851115612e7b5760405162461bcd60e51b815260206004820152601160248201527036b7b932903a3430b7103cb7ba9037bbb760791b6044820152606401610440565b612e858186613964565b50612ebd8a6007018960ff1681548110612ea157612ea1614738565b6000918252602090912001546001600160a01b03163389613bda565b604080518581526020810189905260ff808c1692820192909252908916606082015233907fc6c1e0630dbe9130cc068028486c0d118ddcea348550819defd5cb8c257f8a38906080015b60405180910390a2509198975050505050505050565b42816003015411612f705760405162461bcd60e51b815260206004820152601760248201527f52616d7020697320616c72656164792073746f707065640000000000000000006044820152606401610440565b6000612f7b82613597565b808355600183018190554260028401819055600384018190556040519192507f46e22fb3709ad289f62ce63d469248536dbc78d82b84a3d7e74ad606dc2019389161047c91848252602082015260400190565b600080866007018660ff1681548110612fe957612fe9614738565b6000918252602090912001546040516370a0823160e01b81523360048201526001600160a01b03909116915081906370a0823190602401602060405180830381865afa15801561303d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130619190614783565b8411156130a95760405162461bcd60e51b815260206004820152601660248201527539bbb0b81036b7b932903a3430b7103cb7ba9037bbb760511b6044820152606401610440565b6130b38185613964565b5060008060008860090180548060200260200160405190810160405280929190818152602001828054801561310757602002820191906000526020600020905b8154815260200190600101908083116130f3575b5050505050905061311b89898989856136e7565b90935091508483101561315d5760405162461bcd60e51b815260206004820152600a6024820152696479203c206d696e447960b01b6044820152606401610440565b6000896008018860ff168154811061317757613177614738565b90600052602060002001546402540be4008b6005015485613198919061479c565b6131a2919061474e565b6131ac919061474e565b905086828a60ff16815181106131c4576131c4614738565b60200260200101516131d691906146f9565b8a6009018a60ff16815481106131ee576131ee614738565b90600052602060002001819055508084838a60ff168151811061321357613213614738565b60200260200101516132259190614770565b61322f9190614770565b8a6009018960ff168154811061324757613247614738565b60009182526020909120015580156132ac57808a600a018960ff168154811061327257613272614738565b906000526020600020015461328791906146f9565b8a600a018960ff168154811061329f5761329f614738565b6000918252602090912001555b6132e38a6007018960ff16815481106132c7576132c7614738565b6000918252602090912001546001600160a01b03163386613bda565b604080518881526020810186905260ff808c1692820192909252908916606082015233907fc6c1e0630dbe9130cc068028486c0d118ddcea348550819defd5cb8c257f8a3890608001612f07565b60006104d182613597565b62015180836002015461334f91906146f9565b42101561339e5760405162461bcd60e51b815260206004820152601f60248201527f57616974203120646179206265666f7265207374617274696e672072616d70006044820152606401610440565b6133ab62127500426146f9565b8110156133f35760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e742072616d702074696d6560501b6044820152606401610440565b81158015906134045750620f424082105b6134635760405162461bcd60e51b815260206004820152602a60248201527f667574757265415f206d757374206265203e203020616e64203c20436f6e7374604482015269616e74732e4d41585f4160b01b6064820152608401610440565b600061346e84613597565b9050600061347d60648561479c565b9050818110156134de578161349360028361479c565b10156134d95760405162461bcd60e51b8152602060048201526015602482015274199d5d1d5c995057c81a5cc81d1bdbc81cdb585b1b605a1b6044820152606401610440565b613530565b6134e960028361479c565b8111156135305760405162461bcd60e51b8152602060048201526015602482015274667574757265415f20697320746f6f206c6172676560581b6044820152606401610440565b8185556001850181905542600286018190556003860184905560408051848152602081018490528082019290925260608201859052517fa2b71ec6df949300b59aab36b55e189697b750119dd349fcfa8c0f779e83c2549181900360800190a15050505050565b6003810154600182015482549091908083148015906135b557508142105b156135d6576000846002015490508083038142038502428503840201049350505b5050919050565b8151815160609190811461362a5760405162461bcd60e51b81526020600482015260146024820152736d69736d61746368206d756c7469706c6965727360601b6044820152606401610440565b6000816001600160401b038111156136445761364461432e565b60405190808252806020026020018201604052801561366d578160200160208202803683370190505b50905060005b828110156136de5784818151811061368d5761368d614738565b60200260200101518682815181106136a7576136a7614738565b60200260200101516136b9919061479c565b8282815181106136cb576136cb614738565b6020908102919091010152600101613673565b50949350505050565b60008060008760080180548060200260200160405190810160405280929190818152602001828054801561373a57602002820191906000526020600020905b815481526020019060010190808311613726575b50505050509050600061374d85836135dd565b905080518860ff16108015613765575080518760ff16105b6137815760405162461bcd60e51b81526004016104409061470c565b6000818960ff168151811061379857613798614738565b6020026020010151838a60ff16815181106137b5576137b5614738565b6020026020010151886137c8919061479c565b6137d291906146f9565b905060006137eb6137e28c613597565b8b8b8587612298565b9050600181848b60ff168151811061380557613805614738565b60200260200101516138179190614770565b6138219190614770565b95506402540be4008b6004015487613839919061479c565b613843919061474e565b9450838960ff168151811061385a5761385a614738565b6020026020010151858761386e9190614770565b613878919061474e565b9550505050509550959350505050565b60606104d1826009018054806020026020016040519081016040528092919081815260200182805480156138db57602002820191906000526020600020905b8154815260200190600101908083116138c7575b50505050508360080180548060200260200160405190810160405280929190818152602001828054801561392e57602002820191906000526020600020905b81548152602001906001019080831161391a575b50505050506135dd565b6000613945600183614770565b61395090600461479c565b61395a838561479c565b6126e5919061474e565b80600003613970575050565b6001600160a01b03821661399757604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156139e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a049190614783565b9050613a1b6001600160a01b038316333086613eb4565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa158015613a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a879190614783565b613a919190614770565b1461278c57604051630e40773560e21b815260040160405180910390fd5b600081831115613aca57613ac38284614770565b90506104d1565b6126e58383614770565b60006002613ae28484613aaf565b109392505050565b606081831115613b325760405162461bcd60e51b815260206004820152601360248201527265786365656420746f74616c20737570706c7960681b6044820152606401610440565b83516000816001600160401b03811115613b4e57613b4e61432e565b604051908082528060200260200182016040528015613b77578160200160208202803683370190505b50905060005b828110156107da578486888381518110613b9957613b99614738565b6020026020010151613bab919061479c565b613bb5919061474e565b828281518110613bc757613bc7614738565b6020908102919091010152600101613b7d565b80600003613be757505050565b6001600160a01b038316613c0e57604051633a48ca7b60e11b815260040160405180910390fd5b613c19838383613f1f565b505050565b6000806000806000613c3289888a896107e4565b8093508194508295505050506000838a6008018960ff1681548110613c5957613c59614738565b90600052602060002001548484613c709190614770565b613c7a919061474e565b613c849190614770565b939a93995092975050505050505050565b6000808460ff168660ff1603613ce75760405162461bcd60e51b815260206004820152601760248201527631b7b6b830b932903a37b5b2b7103a379034ba39b2b63360491b6044820152606401610440565b600087600801805480602002602001604051908101604052809291908181526020018280548015613d3757602002820191906000526020600020905b815481526020019060010190808311613d23575b505050505090506000613d4a85836135dd565b905080518860ff16108015613d62575080518760ff16105b613d7e5760405162461bcd60e51b81526004016104409061470c565b6000613d898a613597565b90506000613d9783836118e6565b9050838960ff1681518110613dae57613dae614738565b602002602001015188613dc1919061479c565b838a60ff1681518110613dd657613dd6614738565b6020026020010151613de89190614770565b838a60ff1681518110613dfd57613dfd614738565b6020026020010181815250506000613e17838c868561134e565b9050838b60ff1681518110613e2e57613e2e614738565b602002602001015181613e419190614770565b613e4c9060016146f9565b96506402540be4008c6004015488613e64919061479c565b613e6e919061474e565b9550848b60ff1681518110613e8557613e85614738565b60200260200101518688613e9991906146f9565b613ea3919061474e565b965050505050509550959350505050565b6040516001600160a01b038085166024830152831660448201526064810182905261278c9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613f4f565b6040516001600160a01b038316602482015260448101829052613c1990849063a9059cbb60e01b90606401613ee8565b6000613fa4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166140219092919063ffffffff16565b805190915015613c195780806020019051810190613fc29190614960565b613c195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610440565b6060610771848460008585600080866001600160a01b0316858760405161404891906149a1565b60006040518083038185875af1925050503d8060008114614085576040519150601f19603f3d011682016040523d82523d6000602084013e61408a565b606091505b509150915061409b878383876140a6565b979650505050505050565b6060831561411557825160000361410e576001600160a01b0385163b61410e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610440565b5081610771565b610771838381511561412a5781518083602001fd5b8060405162461bcd60e51b815260040161044091906149bd565b82805482825590600052602060002090810192821561417f579160200282015b8281111561417f578251825591602001919060010190614164565b5061418b92915061418f565b5090565b5b8082111561418b5760008155600101614190565b600080604083850312156141b757600080fd5b50508035926020909101359150565b6000602082840312156141d857600080fd5b5035919050565b60008083601f8401126141f157600080fd5b5081356001600160401b0381111561420857600080fd5b6020830191508360208260051b850101111561422357600080fd5b9250929050565b801515811461423857600080fd5b50565b6000806000806060858703121561425157600080fd5b8435935060208501356001600160401b0381111561426e57600080fd5b61427a878288016141df565b909450925050604085013561428e8161422a565b939692955090935050565b803560ff811681146142aa57600080fd5b919050565b600080600080608085870312156142c557600080fd5b843593506142d560208601614299565b92506142e360408601614299565b9396929550929360600135925050565b6000806000806080858703121561430957600080fd5b8435935061431960208601614299565b93969395505050506040820135916060013590565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261435557600080fd5b813560206001600160401b03808311156143715761437161432e565b8260051b604051601f19603f830116810181811084821117156143965761439661432e565b6040529384528581018301938381019250878511156143b457600080fd5b83870191505b8482101561409b578135835291830191908301906143ba565b6000806000606084860312156143e857600080fd5b8335925060208401356001600160401b0381111561440557600080fd5b61441186828701614344565b925050604084013590509250925092565b6000806000806080858703121561443857600080fd5b8435935061444860208601614299565b925060408501356001600160401b0381111561446357600080fd5b61446f87828801614344565b949793965093946060013593505050565b6000806000806060858703121561449657600080fd5b843593506020850135925060408501356001600160401b038111156144ba57600080fd5b6144c6878288016141df565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b8181101561450a578351835292840192918401916001016144ee565b50909695505050505050565b6000806040838503121561452957600080fd5b82356001600160401b0381111561453f57600080fd5b61454b85828601614344565b95602094909401359450505050565b600080600080600060a0868803121561457257600080fd5b8535945061458260208701614299565b935061459060408701614299565b92506060860135915060808601356001600160401b038111156145b257600080fd5b6145be88828901614344565b9150509295509295909350565b6000806000606084860312156145e057600080fd5b83359250602084013591506145f760408501614299565b90509250925092565b6000806040838503121561461357600080fd5b8235915060208301356001600160a01b038116811461463157600080fd5b809150509250929050565b6000806000806080858703121561465257600080fd5b84359350602085013592506142e360408601614299565b600080600080600060a0868803121561468157600080fd5b8535945061469160208701614299565b935061469f60408701614299565b94979396509394606081013594506080013592915050565b6000806000606084860312156146cc57600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156104d1576104d16146e3565b602080825260129082015271696e646578206f7574206f662072616e676560701b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60008261476b57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156104d1576104d16146e3565b60006020828403121561479557600080fd5b5051919050565b80820281158282048414176104d1576104d16146e3565b600081518084526020808501945080840160005b838110156147e3578151875295820195908201906001016147c7565b509495945050505050565b60808152600061480160808301876147b3565b828103602084015261481381876147b3565b604084019590955250506060015292915050565b6020808252600d908201526c1f2628173130b630b731b2a7b360991b604082015260600190565b60408152600061486160408301856147b3565b90508260208301529392505050565b600181815b808511156148ab578160001904821115614891576148916146e3565b8085161561489e57918102915b93841c9390800290614875565b509250929050565b6000826148c2575060016104d1565b816148cf575060006104d1565b81600181146148e557600281146148ef5761490b565b60019150506104d1565b60ff841115614900576149006146e3565b50506001821b6104d1565b5060208310610133831016604e8410600b841016171561492e575081810a6104d1565b6149388383614870565b806000190482111561494c5761494c6146e3565b029392505050565b60006126e583836148b3565b60006020828403121561497257600080fd5b81516126e58161422a565b60005b83811015614998578181015183820152602001614980565b50506000910152565b600082516149b381846020870161497d565b9190910192915050565b60208152600082518060208401526149dc81604085016020870161497d565b601f01601f1916919091016040019291505056fea2646970667358221220eb126186abde5d2010e570ddc7821132f68a63fb65140e305e12ef439214fa1964736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x162 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x80BA0F2D GT PUSH2 0xCD JUMPI DUP1 PUSH4 0xB92FA35C GT PUSH2 0x86 JUMPI DUP1 PUSH4 0xB92FA35C EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0xE07805AA EQ PUSH2 0x368 JUMPI DUP1 PUSH4 0xE5B994C5 EQ PUSH2 0x388 JUMPI DUP1 PUSH4 0xF2042939 EQ PUSH2 0x3A8 JUMPI DUP1 PUSH4 0xF43DEE53 EQ PUSH2 0x3C8 JUMPI DUP1 PUSH4 0xFC784184 EQ PUSH2 0x3DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x80BA0F2D EQ PUSH2 0x2C9 JUMPI DUP1 PUSH4 0x84EEEF27 EQ PUSH2 0x2DC JUMPI DUP1 PUSH4 0x8BE1E523 EQ PUSH2 0x2EF JUMPI DUP1 PUSH4 0x8CC122BB EQ PUSH2 0x302 JUMPI DUP1 PUSH4 0x9CBD2406 EQ PUSH2 0x315 JUMPI DUP1 PUSH4 0xAE3FEEDC EQ PUSH2 0x335 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x59D9996A GT PUSH2 0x11F JUMPI DUP1 PUSH4 0x59D9996A EQ PUSH2 0x216 JUMPI DUP1 PUSH4 0x67487F2A EQ PUSH2 0x236 JUMPI DUP1 PUSH4 0x6967280A EQ PUSH2 0x256 JUMPI DUP1 PUSH4 0x6FBB250C EQ PUSH2 0x269 JUMPI DUP1 PUSH4 0x76A3B67C EQ PUSH2 0x296 JUMPI DUP1 PUSH4 0x77B83D30 EQ PUSH2 0x2A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8BBAA23 EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0x1CE9046F EQ PUSH2 0x189 JUMPI DUP1 PUSH4 0x22B1B5F6 EQ PUSH2 0x1AF JUMPI DUP1 PUSH4 0x22B2B607 EQ PUSH2 0x1C2 JUMPI DUP1 PUSH4 0x2F4998AD EQ PUSH2 0x1D5 JUMPI DUP1 PUSH4 0x38E630DE EQ PUSH2 0x1E8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x187 PUSH2 0x182 CALLDATASIZE PUSH1 0x4 PUSH2 0x41A4 JUMP JUMPDEST PUSH2 0x3FB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x19C PUSH2 0x197 CALLDATASIZE PUSH1 0x4 PUSH2 0x41A4 JUMP JUMPDEST PUSH2 0x488 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x19C PUSH2 0x1BD CALLDATASIZE PUSH1 0x4 PUSH2 0x41C6 JUMP JUMPDEST PUSH2 0x4D7 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x1D0 CALLDATASIZE PUSH1 0x4 PUSH2 0x423B JUMP JUMPDEST PUSH2 0x4EE JUMP JUMPDEST PUSH2 0x19C PUSH2 0x1E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x42AF JUMP JUMPDEST PUSH2 0x779 JUMP JUMPDEST PUSH2 0x1FB PUSH2 0x1F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x42F3 JUMP JUMPDEST PUSH2 0x7E4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x1A6 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x222 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x187 PUSH2 0x231 CALLDATASIZE PUSH1 0x4 PUSH2 0x41A4 JUMP JUMPDEST PUSH2 0xAF0 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x242 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH2 0x251 CALLDATASIZE PUSH1 0x4 PUSH2 0x43D3 JUMP JUMPDEST PUSH2 0xB6F JUMP JUMPDEST PUSH2 0x19C PUSH2 0x264 CALLDATASIZE PUSH1 0x4 PUSH2 0x4422 JUMP JUMPDEST PUSH2 0x134E JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x289 PUSH2 0x284 CALLDATASIZE PUSH1 0x4 PUSH2 0x4480 JUMP JUMPDEST PUSH2 0x153D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1A6 SWAP2 SWAP1 PUSH2 0x44D2 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x2A4 CALLDATASIZE PUSH1 0x4 PUSH2 0x4516 JUMP JUMPDEST PUSH2 0x18E6 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x2B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH2 0x2C4 CALLDATASIZE PUSH1 0x4 PUSH2 0x43D3 JUMP JUMPDEST PUSH2 0x1A93 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x2D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x455A JUMP JUMPDEST PUSH2 0x2298 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x2EA CALLDATASIZE PUSH1 0x4 PUSH2 0x45CB JUMP JUMPDEST PUSH2 0x24B9 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x2FD CALLDATASIZE PUSH1 0x4 PUSH2 0x41C6 JUMP JUMPDEST PUSH2 0x2540 JUMP JUMPDEST PUSH2 0x289 PUSH2 0x310 CALLDATASIZE PUSH1 0x4 PUSH2 0x41A4 JUMP JUMPDEST PUSH2 0x260E JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x321 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x187 PUSH2 0x330 CALLDATASIZE PUSH1 0x4 PUSH2 0x4600 JUMP JUMPDEST PUSH2 0x26EC JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x341 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH2 0x350 CALLDATASIZE PUSH1 0x4 PUSH2 0x463C JUMP JUMPDEST PUSH2 0x2792 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x363 CALLDATASIZE PUSH1 0x4 PUSH2 0x42AF JUMP JUMPDEST PUSH2 0x2AE9 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH2 0x383 CALLDATASIZE PUSH1 0x4 PUSH2 0x4669 JUMP JUMPDEST PUSH2 0x2B4A JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x394 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x187 PUSH2 0x3A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x41C6 JUMP JUMPDEST PUSH2 0x2F1D JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x3B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19C PUSH2 0x3C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x4669 JUMP JUMPDEST PUSH2 0x2FCE JUMP JUMPDEST PUSH2 0x19C PUSH2 0x3D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x41C6 JUMP JUMPDEST PUSH2 0x3331 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x3E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x187 PUSH2 0x3F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x46B7 JUMP JUMPDEST PUSH2 0x333C JUMP JUMPDEST PUSH2 0x40B PUSH5 0x2540BE400 PUSH1 0x1 PUSH2 0x46F9 JUMP JUMPDEST DUP2 LT PUSH2 0x449 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0xE8DEDE40D0D2CED PUSH1 0xC3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP3 ADD DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xAB599D640CA80CDE2B09B128A4154A8DFE608CB80F4C9399C8B954B01FD35F38 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0x0 SWAP1 DUP3 LT PUSH2 0x4AE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x440 SWAP1 PUSH2 0x470C JUMP JUMPDEST DUP3 PUSH1 0xA ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x4C3 JUMPI PUSH2 0x4C3 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x64 PUSH2 0x4E4 DUP4 PUSH2 0x3597 JUMP JUMPDEST PUSH2 0x4D1 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4FA DUP7 PUSH2 0x3597 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP7 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x54C JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x538 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 DUP8 PUSH1 0x8 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x5A3 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x58F JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 DUP3 MLOAD SWAP1 POP PUSH1 0x0 PUSH2 0x5C5 PUSH2 0x5BF DUP6 DUP6 PUSH2 0x35DD JUMP JUMPDEST DUP7 PUSH2 0x18E6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x69C JUMPI DUP8 ISZERO PUSH2 0x638 JUMPI DUP10 DUP10 DUP3 DUP2 DUP2 LT PUSH2 0x5EA JUMPI PUSH2 0x5EA PUSH2 0x4738 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x603 JUMPI PUSH2 0x603 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x615 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x627 JUMPI PUSH2 0x627 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x694 JUMP JUMPDEST DUP10 DUP10 DUP3 DUP2 DUP2 LT PUSH2 0x64A JUMPI PUSH2 0x64A PUSH2 0x4738 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x663 JUMPI PUSH2 0x663 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x675 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x687 JUMPI PUSH2 0x687 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x5CA JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x6B2 PUSH2 0x6AC DUP7 DUP7 PUSH2 0x35DD JUMP JUMPDEST DUP8 PUSH2 0x18E6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP12 PUSH1 0x6 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x70B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x72F SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST SWAP1 POP DUP9 ISZERO PUSH2 0x765 JUMPI DUP3 DUP2 PUSH2 0x743 DUP3 DUP6 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x74D SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x757 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x771 JUMP JUMPDEST DUP3 DUP2 PUSH2 0x743 DUP5 DUP4 PUSH2 0x4770 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7DA DUP6 DUP6 DUP6 DUP6 DUP10 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x7D0 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x7BC JUMPI JUMPDEST POP POP POP POP POP PUSH2 0x36E7 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x7F3 DUP9 PUSH2 0x3888 JUMP JUMPDEST SWAP1 POP DUP1 MLOAD DUP8 PUSH1 0xFF AND LT PUSH2 0x818 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x440 SWAP1 PUSH2 0x470C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 POP PUSH2 0x851 DUP10 PUSH2 0x3597 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x863 SWAP1 DUP4 SWAP1 PUSH2 0x18E6 JUMP JUMPDEST DUP1 DUP3 MSTORE DUP7 SWAP1 PUSH2 0x872 SWAP1 DUP10 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x87C SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST DUP2 MLOAD PUSH2 0x888 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD DUP3 SWAP1 PUSH1 0xFF DUP11 AND SWAP1 DUP2 LT PUSH2 0x8A4 JUMPI PUSH2 0x8A4 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 GT ISZERO PUSH2 0x8EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x6578636565647320617661696C61626C65 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH2 0x903 DUP2 PUSH1 0x80 ADD MLOAD DUP10 DUP5 DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x134E JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x924 JUMPI PUSH2 0x924 PUSH2 0x432E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x94D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH2 0x95F DUP11 PUSH1 0x4 ADD SLOAD DUP5 MLOAD PUSH2 0x3938 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA3C JUMPI PUSH1 0x0 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x985 JUMPI PUSH2 0x985 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH5 0x2540BE400 DUP6 PUSH1 0x60 ADD MLOAD DUP14 PUSH1 0xFF AND DUP5 EQ PUSH2 0x9CE JUMPI DUP7 MLOAD PUSH1 0x20 DUP9 ADD MLOAD PUSH2 0x9B5 SWAP1 DUP6 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x9BF SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0x9C9 SWAP1 DUP5 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD DUP8 MLOAD PUSH1 0x20 DUP10 ADD MLOAD PUSH2 0x9E4 SWAP1 DUP7 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x9EE SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0x9F8 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0xA02 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0xA0C SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0xA16 SWAP1 DUP3 PUSH2 0x4770 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xA28 JUMPI PUSH2 0xA28 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x969 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xA53 DUP5 PUSH1 0x80 ADD MLOAD DUP13 DUP6 DUP8 PUSH1 0x20 ADD MLOAD PUSH2 0x134E JUMP JUMPDEST DUP4 DUP13 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0xA68 JUMPI PUSH2 0xA68 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0xA7A SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST SWAP1 POP DUP12 PUSH1 0x8 ADD DUP12 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0xA94 JUMPI PUSH2 0xA94 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH1 0x1 DUP3 PUSH2 0xAAC SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0xAB6 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP DUP1 DUP5 PUSH1 0x40 ADD MLOAD DUP7 DUP14 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0xAD3 JUMPI PUSH2 0xAD3 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP8 POP SWAP8 POP SWAP8 POP POP POP POP POP POP SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xAFF PUSH4 0x5F5E100 PUSH1 0x1 PUSH2 0x46F9 JUMP JUMPDEST DUP2 LT PUSH2 0xB38 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0xE8DEDE40D0D2CED PUSH1 0xC3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD88EA5155021C6F8DAFA1A741E173F595CDF77CE7C17D43342131D7F06AFDFE5 SWAP1 PUSH1 0x20 ADD PUSH2 0x47C JUMP JUMPDEST PUSH1 0x7 DUP4 ADD SLOAD DUP3 MLOAD PUSH1 0x0 SWAP2 SWAP1 DUP2 EQ PUSH2 0xBC1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x6D69736D6174636820706F6F6C656420746F6B656E73 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xBED DUP9 PUSH2 0x3597 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x6 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xC6D JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xC59 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x8 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xCC5 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xCB1 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE POP SWAP1 POP DUP1 PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD11 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD35 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0xD63 JUMPI PUSH2 0xD60 PUSH2 0xD56 DUP3 PUSH1 0xC0 ADD MLOAD DUP4 PUSH1 0xE0 ADD MLOAD PUSH2 0x35DD JUMP JUMPDEST DUP3 PUSH1 0x60 ADD MLOAD PUSH2 0x18E6 JUMP JUMPDEST DUP2 MSTORE JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0xD7D JUMPI PUSH2 0xD7D PUSH2 0x432E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xDA6 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF05 JUMPI PUSH1 0xA0 DUP4 ADD MLOAD ISZERO ISZERO DUP1 PUSH2 0xDE0 JUMPI POP DUP7 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xDD3 JUMPI PUSH2 0xDD3 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 EQ ISZERO JUMPDEST PUSH2 0xE21 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x21737570706C7920616C6C20746F6B656E73 PUSH1 0x70 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST DUP7 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xE33 JUMPI PUSH2 0xE33 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 EQ PUSH2 0xE9E JUMPI PUSH1 0x0 DUP9 PUSH1 0x7 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xE59 JUMPI PUSH2 0xE59 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH2 0xE9C DUP2 DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xE8F JUMPI PUSH2 0xE8F PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3964 JUMP JUMPDEST POP JUMPDEST DUP7 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xEB0 JUMPI PUSH2 0xEB0 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH1 0xC0 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xECE JUMPI PUSH2 0xECE PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0xEE0 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xEF2 JUMPI PUSH2 0xEF2 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0xDAC JUMP JUMPDEST POP PUSH2 0xF21 PUSH2 0xF17 DUP3 DUP5 PUSH1 0xE0 ADD MLOAD PUSH2 0x35DD JUMP JUMPDEST DUP4 PUSH1 0x60 ADD MLOAD PUSH2 0x18E6 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD DUP2 SWAP1 MSTORE DUP3 MLOAD LT PUSH2 0xF6B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x442073686F756C6420696E637265617365 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0xF8F JUMPI PUSH2 0xF8F PUSH2 0x432E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xFB8 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x11E7 JUMPI PUSH1 0x0 PUSH2 0xFD7 DUP10 PUSH1 0x4 ADD SLOAD DUP7 PUSH2 0x3938 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x11C0 JUMPI PUSH1 0x0 DUP6 PUSH1 0x0 ADD MLOAD DUP7 PUSH1 0xC0 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1001 JUMPI PUSH2 0x1001 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD PUSH2 0x1018 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1022 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP PUSH5 0x2540BE400 PUSH2 0x1056 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x103F JUMPI PUSH2 0x103F PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x3AAF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x1060 SWAP1 DUP6 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x106A SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x107C JUMPI PUSH2 0x107C PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH5 0x2540BE400 DUP13 PUSH1 0x5 ADD SLOAD DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x10A7 JUMPI PUSH2 0x10A7 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x10B9 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x10C3 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP DUP1 DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x10D8 JUMPI PUSH2 0x10D8 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x10EA SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP13 PUSH1 0x9 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x10FF JUMPI PUSH2 0x10FF PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP1 DUP13 PUSH1 0xA ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1123 JUMPI PUSH2 0x1123 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x1138 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST DUP13 PUSH1 0xA ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x114D JUMPI PUSH2 0x114D PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x116D JUMPI PUSH2 0x116D PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1187 JUMPI PUSH2 0x1187 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1199 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x11AB JUMPI PUSH2 0x11AB PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xFDC JUMP JUMPDEST POP PUSH2 0x11DC PUSH2 0x11D2 DUP5 DUP7 PUSH1 0xE0 ADD MLOAD PUSH2 0x35DD JUMP JUMPDEST DUP6 PUSH1 0x60 ADD MLOAD PUSH2 0x18E6 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE POP PUSH2 0x11FE JUMP JUMPDEST DUP2 MLOAD PUSH2 0x11FC SWAP1 PUSH1 0x9 DUP11 ADD SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH2 0x4144 JUMP JUMPDEST POP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0xA0 ADD MLOAD PUSH1 0x0 SUB PUSH2 0x1217 JUMPI POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1245 JUMP JUMPDEST DUP4 MLOAD PUSH1 0xA0 DUP6 ADD MLOAD PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x122E SWAP1 DUP4 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x1238 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1242 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x1282 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x36B4B73A101E1036B4B7 PUSH1 0xB1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x40C10F19 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x40C10F19 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12E4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x189C623B666B1B45B83D7178F39B8C087CB09774317CA2F53C2D3C3726F222A2 DUP10 DUP5 DUP8 PUSH1 0x20 ADD MLOAD DUP6 DUP10 PUSH1 0xA0 ADD MLOAD PUSH2 0x132A SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x133A SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x47EE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF DUP6 AND DUP2 GT PUSH2 0x1397 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x151BDAD95B881B9BDD08199BDD5B99 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST DUP3 PUSH1 0x0 DUP1 PUSH2 0x13A5 DUP5 DUP11 PUSH2 0x479C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1427 JUMPI DUP9 PUSH1 0xFF AND DUP2 EQ PUSH2 0x141F JUMPI DUP8 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x13CE JUMPI PUSH2 0x13CE PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x13E1 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST SWAP3 POP DUP5 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x13F6 JUMPI PUSH2 0x13F6 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1408 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1412 DUP9 DUP7 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x141C SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP4 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x13AA JUMP JUMPDEST POP PUSH2 0x1432 DUP5 DUP3 PUSH2 0x479C JUMP JUMPDEST PUSH1 0x64 PUSH2 0x143E DUP9 DUP7 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1448 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1452 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP3 POP PUSH1 0x0 DUP2 PUSH2 0x1462 PUSH1 0x64 DUP10 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x146C SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0x1476 SWAP1 DUP5 PUSH2 0x46F9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP8 DUP2 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x14F4 JUMPI DUP2 SWAP3 POP DUP10 DUP5 DUP4 PUSH1 0x2 PUSH2 0x1499 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x14A3 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST PUSH2 0x14AD SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP8 PUSH2 0x14B8 DUP5 DUP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x14C2 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST PUSH2 0x14CC SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP2 POP PUSH2 0x14D8 DUP3 DUP5 PUSH2 0x3AD4 JUMP JUMPDEST ISZERO PUSH2 0x14EC JUMPI POP SWAP7 POP PUSH2 0x771 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x147D JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x417070726F78696D6174696F6E20646964206E6F7420636F6E76657267650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x6 DUP5 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x158A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15AE SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST DUP6 GT ISZERO PUSH2 0x15CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x440 SWAP1 PUSH2 0x4827 JUMP JUMPDEST PUSH1 0x7 DUP7 ADD SLOAD DUP4 DUP2 EQ PUSH2 0x1617 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x6D69736D6174636820706F6F6C546F6B656E73 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 DUP8 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1667 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1653 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16AE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16D2 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x16E1 DUP4 DUP11 DUP5 PUSH2 0x3AEA JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1831 JUMPI DUP10 DUP10 DUP3 DUP2 DUP2 LT PUSH2 0x1703 JUMPI PUSH2 0x1703 PUSH2 0x4738 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x171C JUMPI PUSH2 0x171C PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD LT ISZERO PUSH2 0x1772 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616D6F756E74735B695D203C206D696E416D6F756E74735B695D000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1784 JUMPI PUSH2 0x1784 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x179E JUMPI PUSH2 0x179E PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x17B0 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP13 PUSH1 0x9 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x17C5 JUMPI PUSH2 0x17C5 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP PUSH2 0x1829 DUP13 PUSH1 0x7 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x17EB JUMPI PUSH2 0x17EB PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x181C JUMPI PUSH2 0x181C PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3BDA JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x16E9 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0x79CC679 PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0x79CC6790 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x187A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x188E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP CALLER SWAP3 POP PUSH32 0x88D38ED598FDD809C2BF01EE49CD24B7FDABF379A83D29567952B60324D58CEF SWAP2 POP DUP5 SWAP1 POP PUSH2 0x18C2 DUP14 DUP8 PUSH2 0x4770 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x18D0 SWAP3 SWAP2 SWAP1 PUSH2 0x484E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP2 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1925 JUMPI DUP6 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1908 JUMPI PUSH2 0x1908 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH2 0x191B SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x18EE JUMP JUMPDEST POP DUP1 PUSH1 0x0 SUB PUSH2 0x1939 JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x4D1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 PUSH2 0x1947 DUP6 DUP9 PUSH2 0x479C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x1A54 JUMPI DUP3 PUSH1 0x0 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0x19A5 JUMPI DUP8 DUP12 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1975 JUMPI PUSH2 0x1975 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1987 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1991 DUP7 DUP5 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x199B SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x195A JUMP JUMPDEST POP DUP4 SWAP5 POP DUP1 DUP8 PUSH1 0x1 PUSH2 0x19B7 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST PUSH2 0x19C1 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH1 0x64 DUP6 PUSH2 0x19CE DUP3 DUP8 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x19D8 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x19E2 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0x19EC SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST DUP5 PUSH2 0x19F7 DUP10 DUP5 PUSH2 0x479C JUMP JUMPDEST PUSH1 0x64 PUSH2 0x1A03 DUP11 DUP9 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1A0D SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0x1A17 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST PUSH2 0x1A21 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1A2B SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP4 POP PUSH2 0x1A37 DUP5 DUP7 PUSH2 0x3AD4 JUMP JUMPDEST ISZERO PUSH2 0x1A4B JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x4D1 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x194C JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x4420646F6573206E6F7420636F6E7665726765 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH2 0x100 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1AC0 DUP8 PUSH2 0x3597 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x6 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1B40 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1B2C JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x8 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1B98 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x1B84 JUMPI JUMPDEST POP POP POP POP POP DUP2 MSTORE POP SWAP1 POP DUP1 PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BE4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C08 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x7 DUP6 ADD SLOAD DUP5 MLOAD DUP1 DUP3 EQ PUSH2 0x1C5A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x6D69736D6174636820706F6F6C20746F6B656E73 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CA4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CC8 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST DUP6 GT ISZERO DUP1 ISZERO PUSH2 0x1CD6 JUMPI POP DUP5 ISZERO ISZERO JUMPDEST PUSH2 0x1CF2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x440 SWAP1 PUSH2 0x4827 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D02 DUP9 PUSH1 0x4 ADD SLOAD DUP5 PUSH2 0x3938 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x1D1E JUMPI PUSH2 0x1D1E PUSH2 0x432E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1D47 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x1D64 JUMPI PUSH2 0x1D64 PUSH2 0x432E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1D8D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH2 0x1DAF PUSH2 0x1DA5 DUP8 PUSH1 0xC0 ADD MLOAD DUP9 PUSH1 0xE0 ADD MLOAD PUSH2 0x35DD JUMP JUMPDEST DUP8 PUSH1 0x60 ADD MLOAD PUSH2 0x18E6 JUMP JUMPDEST DUP7 MSTORE PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x1EA0 JUMPI DUP10 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1DCE JUMPI PUSH2 0x1DCE PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1DEC JUMPI PUSH2 0x1DEC PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD LT ISZERO PUSH2 0x1E42 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x7769746864726177206D6F7265207468616E20617661696C61626C6500000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST DUP10 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1E54 JUMPI PUSH2 0x1E54 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP8 PUSH1 0xC0 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E72 JUMPI PUSH2 0x1E72 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E8D JUMPI PUSH2 0x1E8D PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1DB4 JUMP JUMPDEST POP PUSH2 0x1EB2 PUSH2 0x1DA5 DUP3 DUP9 PUSH1 0xE0 ADD MLOAD PUSH2 0x35DD JUMP JUMPDEST PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x208C JUMPI PUSH1 0x0 DUP8 PUSH1 0x0 ADD MLOAD DUP9 PUSH1 0xC0 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1EDF JUMPI PUSH2 0x1EDF PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP10 PUSH1 0x20 ADD MLOAD PUSH2 0x1EF6 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1F00 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1F19 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x103F JUMPI PUSH2 0x103F PUSH2 0x4738 JUMP JUMPDEST SWAP1 POP PUSH5 0x2540BE400 PUSH2 0x1F2B DUP3 DUP9 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1F35 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1F47 JUMPI PUSH2 0x1F47 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP POP POP PUSH1 0x0 PUSH5 0x2540BE400 DUP13 PUSH1 0x5 ADD SLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1F74 JUMPI PUSH2 0x1F74 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1F86 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x1F90 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1FA5 JUMPI PUSH2 0x1FA5 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1FB7 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP13 PUSH1 0x9 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x1FCC JUMPI PUSH2 0x1FCC PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP1 DUP13 PUSH1 0xA ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x1FF0 JUMPI PUSH2 0x1FF0 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x2005 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST DUP13 PUSH1 0xA ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x201A JUMPI PUSH2 0x201A PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x203A JUMPI PUSH2 0x203A PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2054 JUMPI PUSH2 0x2054 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2066 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2078 JUMPI PUSH2 0x2078 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x1EBA JUMP JUMPDEST POP PUSH2 0x209E PUSH2 0x1DA5 DUP3 DUP9 PUSH1 0xE0 ADD MLOAD PUSH2 0x35DD JUMP JUMPDEST PUSH1 0x40 DUP8 ADD DUP2 SWAP1 MSTORE DUP7 MLOAD PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0x0 SWAP4 POP SWAP1 SWAP2 PUSH2 0x20BC SWAP1 DUP4 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x20C6 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x20D0 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x2111 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x85E995C9BC8185B5BDD5B9D PUSH1 0xA2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH2 0x211C DUP2 PUSH1 0x1 PUSH2 0x46F9 JUMP JUMPDEST SWAP1 POP DUP8 DUP2 GT ISZERO PUSH2 0x216E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x746F6B656E416D6F756E74203E206D61784275726E416D6F756E740000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x79CC679 PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x79CC6790 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x21D0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x2230 JUMPI PUSH2 0x2228 DUP12 PUSH1 0x7 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x21F7 JUMPI PUSH2 0x21F7 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x181C JUMPI PUSH2 0x181C PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x21D7 JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x3631C28B1F9DD213E0319FB167B554D76B6C283A41143EB400A0D1ADB1AF1755 DUP11 DUP5 DUP10 PUSH1 0x20 ADD MLOAD DUP6 DUP12 PUSH1 0xA0 ADD MLOAD PUSH2 0x2273 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2283 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x47EE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF DUP1 DUP7 AND SWAP1 DUP8 AND SUB PUSH2 0x22EC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x31B7B6B830B932903A37B5B2B7103A379034BA39B2B633 PUSH1 0x49 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST DUP1 DUP7 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x2300 JUMPI POP DUP1 DUP6 PUSH1 0xFF AND LT JUMPDEST PUSH2 0x233E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1D1BDAD95B881B9BDD08199BDD5B99 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x234A DUP5 DUP10 PUSH2 0x18E6 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 DUP1 PUSH2 0x235A DUP12 DUP7 PUSH2 0x479C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x23E1 JUMPI DUP12 PUSH1 0xFF AND DUP2 SUB PUSH2 0x237A JUMPI DUP10 SWAP2 POP PUSH2 0x23AD JUMP JUMPDEST DUP11 PUSH1 0xFF AND DUP2 EQ PUSH2 0x23A5 JUMPI DUP9 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x2396 JUMPI PUSH2 0x2396 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP2 POP PUSH2 0x23AD JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x2360 JUMP JUMPDEST PUSH2 0x23B7 DUP3 DUP6 PUSH2 0x46F9 JUMP JUMPDEST SWAP4 POP PUSH2 0x23C3 DUP8 DUP4 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x23CD DUP8 DUP8 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x23D7 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP5 POP PUSH1 0x1 ADD PUSH2 0x2360 JUMP JUMPDEST POP PUSH2 0x23EC DUP7 DUP4 PUSH2 0x479C JUMP JUMPDEST PUSH1 0x64 PUSH2 0x23F8 DUP8 DUP8 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x2402 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x240C SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP4 POP PUSH1 0x0 DUP3 PUSH2 0x241C PUSH1 0x64 DUP9 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x2426 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0x2430 SWAP1 DUP6 PUSH2 0x46F9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP7 DUP2 JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x14F4 JUMPI DUP2 SWAP3 POP DUP9 DUP5 DUP4 PUSH1 0x2 PUSH2 0x2453 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x245D SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST PUSH2 0x2467 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP9 PUSH2 0x2472 DUP5 DUP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x247C SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST PUSH2 0x2486 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP2 POP PUSH2 0x2492 DUP3 DUP5 PUSH2 0x3AD4 JUMP JUMPDEST ISZERO PUSH2 0x24A8 JUMPI POP SWAP9 POP PUSH2 0x24B0 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x2437 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x7DA DUP6 DUP6 DUP6 DUP9 PUSH1 0x6 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2517 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x253B SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST PUSH2 0x3C1E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2558 PUSH2 0x254F DUP5 PUSH2 0x3888 JUMP JUMPDEST PUSH2 0x2A4 DUP6 PUSH2 0x3597 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x6 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x25B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x25DA SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2603 JUMPI DUP1 PUSH2 0x25EF PUSH1 0x12 PUSH1 0xA PUSH2 0x4954 JUMP JUMPDEST PUSH2 0x25F9 SWAP1 DUP6 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x24B0 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST POP PUSH1 0x0 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x26E5 DUP4 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2661 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x264D JUMPI JUMPDEST POP POP POP POP POP DUP4 DUP6 PUSH1 0x6 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x26E0 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST PUSH2 0x3AEA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x278C JUMPI PUSH1 0x0 DUP5 PUSH1 0x7 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x2713 JUMPI PUSH2 0x2713 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 KECCAK256 ADD SLOAD PUSH1 0xA DUP8 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP4 POP SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x2742 JUMPI PUSH2 0x2742 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 PUSH1 0x0 EQ PUSH2 0x2782 JUMPI DUP6 PUSH1 0xA ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x276C JUMPI PUSH2 0x276C PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 KECCAK256 ADD SSTORE PUSH2 0x2782 DUP3 DUP7 DUP4 PUSH2 0x3BDA JUMP JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x26F4 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x6 DUP5 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x27DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2803 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST DUP6 GT ISZERO PUSH2 0x2822 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x440 SWAP1 PUSH2 0x4827 JUMP JUMPDEST PUSH1 0x7 DUP7 ADD SLOAD PUSH1 0xFF DUP6 AND DUP2 GT PUSH2 0x2865 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x1B9BDD08199BDD5B99 PUSH1 0xBA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x28A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x28C9 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x28DA DUP11 DUP11 DUP11 DUP7 PUSH2 0x3C1E JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP7 DUP3 LT ISZERO PUSH2 0x291F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x191E480F081B5A5B905B5BDD5B9D PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 PUSH5 0x2540BE400 DUP12 PUSH1 0x5 ADD SLOAD DUP4 PUSH2 0x2937 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x2941 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP PUSH2 0x294D DUP2 DUP5 PUSH2 0x46F9 JUMP JUMPDEST DUP12 PUSH1 0x9 ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2965 JUMPI PUSH2 0x2965 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x297A SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP12 PUSH1 0x9 ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2992 JUMPI PUSH2 0x2992 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE DUP1 ISZERO PUSH2 0x29F7 JUMPI DUP1 DUP12 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x29BD JUMPI PUSH2 0x29BD PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x29D2 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST DUP12 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x29EA JUMPI PUSH2 0x29EA PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x79CC679 PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0x79CC6790 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2A53 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x2A8E DUP12 PUSH1 0x7 ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2A72 JUMPI PUSH2 0x2A72 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP6 PUSH2 0x3BDA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP12 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xFF DUP12 AND DUP2 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x43FB02998F4E03DA2E0E6FFF53FDBF0C40A9F45F145DC377FC30615D7D7A8A64 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG2 POP SWAP1 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7DA DUP6 DUP6 DUP6 DUP6 DUP10 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2B40 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x2B2C JUMPI JUMPDEST POP POP POP POP POP PUSH2 0x3C95 JUMP JUMPDEST PUSH1 0x0 DUP6 PUSH1 0x9 ADD DUP5 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2B64 JUMPI PUSH2 0x2B64 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP4 GT ISZERO PUSH2 0x2BAE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x3E706F6F6C2062616C616E6365 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP9 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x2C01 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x2BED JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x2C15 DUP10 DUP10 DUP10 DUP10 DUP6 PUSH2 0x3C95 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP DUP5 DUP4 GT ISZERO PUSH2 0x2C57 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0xC8F0407C40DAC2F088F PUSH1 0xB3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 DUP10 PUSH1 0x8 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2C71 JUMPI PUSH2 0x2C71 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH5 0x2540BE400 DUP12 PUSH1 0x5 ADD SLOAD DUP6 PUSH2 0x2C92 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x2C9C SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0x2CA6 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP DUP1 DUP5 DUP4 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x2CBF JUMPI PUSH2 0x2CBF PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2CD1 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST PUSH2 0x2CDB SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP11 PUSH1 0x9 ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2CF3 JUMPI PUSH2 0x2CF3 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP7 DUP3 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x2D17 JUMPI PUSH2 0x2D17 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2D29 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP11 PUSH1 0x9 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2D41 JUMPI PUSH2 0x2D41 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE DUP1 ISZERO PUSH2 0x2DA6 JUMPI DUP1 DUP11 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2D6C JUMPI PUSH2 0x2D6C PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x2D81 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2D99 JUMPI PUSH2 0x2D99 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE JUMPDEST PUSH1 0x0 DUP11 PUSH1 0x7 ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2DC0 JUMPI PUSH2 0x2DC0 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E14 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E38 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST DUP6 GT ISZERO PUSH2 0x2E7B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x36B7B932903A3430B7103CB7BA9037BBB7 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH2 0x2E85 DUP2 DUP7 PUSH2 0x3964 JUMP JUMPDEST POP PUSH2 0x2EBD DUP11 PUSH1 0x7 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2EA1 JUMPI PUSH2 0x2EA1 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP10 PUSH2 0x3BDA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0xFF DUP1 DUP13 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP10 AND PUSH1 0x60 DUP3 ADD MSTORE CALLER SWAP1 PUSH32 0xC6C1E0630DBE9130CC068028486C0D118DDCEA348550819DEFD5CB8C257F8A38 SWAP1 PUSH1 0x80 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP SWAP2 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST TIMESTAMP DUP2 PUSH1 0x3 ADD SLOAD GT PUSH2 0x2F70 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x52616D7020697320616C72656164792073746F70706564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F7B DUP3 PUSH2 0x3597 JUMP JUMPDEST DUP1 DUP4 SSTORE PUSH1 0x1 DUP4 ADD DUP2 SWAP1 SSTORE TIMESTAMP PUSH1 0x2 DUP5 ADD DUP2 SWAP1 SSTORE PUSH1 0x3 DUP5 ADD DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP3 POP PUSH32 0x46E22FB3709AD289F62CE63D469248536DBC78D82B84A3D7E74AD606DC201938 SWAP2 PUSH2 0x47C SWAP2 DUP5 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x7 ADD DUP7 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x2FE9 JUMPI PUSH2 0x2FE9 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP2 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x303D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3061 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST DUP5 GT ISZERO PUSH2 0x30A9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x39BBB0B81036B7B932903A3430B7103CB7BA9037BBB7 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH2 0x30B3 DUP2 DUP6 PUSH2 0x3964 JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP9 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3107 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x30F3 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x311B DUP10 DUP10 DUP10 DUP10 DUP6 PUSH2 0x36E7 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP DUP5 DUP4 LT ISZERO PUSH2 0x315D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x6479203C206D696E4479 PUSH1 0xB0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 DUP10 PUSH1 0x8 ADD DUP9 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x3177 JUMPI PUSH2 0x3177 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH5 0x2540BE400 DUP12 PUSH1 0x5 ADD SLOAD DUP6 PUSH2 0x3198 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x31A2 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0x31AC SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP1 POP DUP7 DUP3 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x31C4 JUMPI PUSH2 0x31C4 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x31D6 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST DUP11 PUSH1 0x9 ADD DUP11 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x31EE JUMPI PUSH2 0x31EE PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP1 DUP5 DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3213 JUMPI PUSH2 0x3213 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3225 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x322F SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP11 PUSH1 0x9 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x3247 JUMPI PUSH2 0x3247 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE DUP1 ISZERO PUSH2 0x32AC JUMPI DUP1 DUP11 PUSH1 0xA ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x3272 JUMPI PUSH2 0x3272 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD PUSH2 0x3287 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST DUP11 PUSH1 0xA ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x329F JUMPI PUSH2 0x329F PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SSTORE JUMPDEST PUSH2 0x32E3 DUP11 PUSH1 0x7 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x32C7 JUMPI PUSH2 0x32C7 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP7 PUSH2 0x3BDA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP9 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xFF DUP1 DUP13 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP10 AND PUSH1 0x60 DUP3 ADD MSTORE CALLER SWAP1 PUSH32 0xC6C1E0630DBE9130CC068028486C0D118DDCEA348550819DEFD5CB8C257F8A38 SWAP1 PUSH1 0x80 ADD PUSH2 0x2F07 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4D1 DUP3 PUSH2 0x3597 JUMP JUMPDEST PUSH3 0x15180 DUP4 PUSH1 0x2 ADD SLOAD PUSH2 0x334F SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST TIMESTAMP LT ISZERO PUSH2 0x339E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x57616974203120646179206265666F7265207374617274696E672072616D7000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH2 0x33AB PUSH3 0x127500 TIMESTAMP PUSH2 0x46F9 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x33F3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x496E73756666696369656E742072616D702074696D65 PUSH1 0x50 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST DUP2 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3404 JUMPI POP PUSH3 0xF4240 DUP3 LT JUMPDEST PUSH2 0x3463 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x667574757265415F206D757374206265203E203020616E64203C20436F6E7374 PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x616E74732E4D41585F41 PUSH1 0xB0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x346E DUP5 PUSH2 0x3597 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x347D PUSH1 0x64 DUP6 PUSH2 0x479C JUMP JUMPDEST SWAP1 POP DUP2 DUP2 LT ISZERO PUSH2 0x34DE JUMPI DUP2 PUSH2 0x3493 PUSH1 0x2 DUP4 PUSH2 0x479C JUMP JUMPDEST LT ISZERO PUSH2 0x34D9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x199D5D1D5C995057C81A5CC81D1BDBC81CDB585B1B PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH2 0x3530 JUMP JUMPDEST PUSH2 0x34E9 PUSH1 0x2 DUP4 PUSH2 0x479C JUMP JUMPDEST DUP2 GT ISZERO PUSH2 0x3530 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x667574757265415F20697320746F6F206C61726765 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST DUP2 DUP6 SSTORE PUSH1 0x1 DUP6 ADD DUP2 SWAP1 SSTORE TIMESTAMP PUSH1 0x2 DUP7 ADD DUP2 SWAP1 SSTORE PUSH1 0x3 DUP7 ADD DUP5 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP3 ADD DUP6 SWAP1 MSTORE MLOAD PUSH32 0xA2B71EC6DF949300B59AAB36B55E189697B750119DD349FCFA8C0F779E83C254 SWAP2 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x1 DUP3 ADD SLOAD DUP3 SLOAD SWAP1 SWAP2 SWAP1 DUP1 DUP4 EQ DUP1 ISZERO SWAP1 PUSH2 0x35B5 JUMPI POP DUP2 TIMESTAMP LT JUMPDEST ISZERO PUSH2 0x35D6 JUMPI PUSH1 0x0 DUP5 PUSH1 0x2 ADD SLOAD SWAP1 POP DUP1 DUP4 SUB DUP2 TIMESTAMP SUB DUP6 MUL TIMESTAMP DUP6 SUB DUP5 MUL ADD DIV SWAP4 POP POP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH1 0x60 SWAP2 SWAP1 DUP2 EQ PUSH2 0x362A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x6D69736D61746368206D756C7469706C69657273 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3644 JUMPI PUSH2 0x3644 PUSH2 0x432E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x366D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x36DE JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x368D JUMPI PUSH2 0x368D PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x36A7 JUMPI PUSH2 0x36A7 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x36B9 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x36CB JUMPI PUSH2 0x36CB PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3673 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP8 PUSH1 0x8 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x373A JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x3726 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x374D DUP6 DUP4 PUSH2 0x35DD JUMP JUMPDEST SWAP1 POP DUP1 MLOAD DUP9 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x3765 JUMPI POP DUP1 MLOAD DUP8 PUSH1 0xFF AND LT JUMPDEST PUSH2 0x3781 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x440 SWAP1 PUSH2 0x470C JUMP JUMPDEST PUSH1 0x0 DUP2 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3798 JUMPI PUSH2 0x3798 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x37B5 JUMPI PUSH2 0x37B5 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH2 0x37C8 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x37D2 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x37EB PUSH2 0x37E2 DUP13 PUSH2 0x3597 JUMP JUMPDEST DUP12 DUP12 DUP6 DUP8 PUSH2 0x2298 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 DUP5 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3805 JUMPI PUSH2 0x3805 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3817 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x3821 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST SWAP6 POP PUSH5 0x2540BE400 DUP12 PUSH1 0x4 ADD SLOAD DUP8 PUSH2 0x3839 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x3843 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP5 POP DUP4 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x385A JUMPI PUSH2 0x385A PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP8 PUSH2 0x386E SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x3878 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP6 POP POP POP POP POP SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x4D1 DUP3 PUSH1 0x9 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x38DB JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x38C7 JUMPI JUMPDEST POP POP POP POP POP DUP4 PUSH1 0x8 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x392E JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x391A JUMPI JUMPDEST POP POP POP POP POP PUSH2 0x35DD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3945 PUSH1 0x1 DUP4 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x3950 SWAP1 PUSH1 0x4 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x395A DUP4 DUP6 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x26E5 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x3970 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x3997 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2A38B133 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP3 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x39E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3A04 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST SWAP1 POP PUSH2 0x3A1B PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP7 PUSH2 0x3EB4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP4 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3A63 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3A87 SWAP2 SWAP1 PUSH2 0x4783 JUMP JUMPDEST PUSH2 0x3A91 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST EQ PUSH2 0x278C JUMPI PUSH1 0x40 MLOAD PUSH4 0xE407735 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP4 GT ISZERO PUSH2 0x3ACA JUMPI PUSH2 0x3AC3 DUP3 DUP5 PUSH2 0x4770 JUMP JUMPDEST SWAP1 POP PUSH2 0x4D1 JUMP JUMPDEST PUSH2 0x26E5 DUP4 DUP4 PUSH2 0x4770 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH2 0x3AE2 DUP5 DUP5 PUSH2 0x3AAF JUMP JUMPDEST LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 DUP4 GT ISZERO PUSH2 0x3B32 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x65786365656420746F74616C20737570706C79 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3B4E JUMPI PUSH2 0x3B4E PUSH2 0x432E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3B77 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x7DA JUMPI DUP5 DUP7 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3B99 JUMPI PUSH2 0x3B99 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3BAB SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x3BB5 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3BC7 JUMPI PUSH2 0x3BC7 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3B7D JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x3BE7 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x3C0E JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A48CA7B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3C19 DUP4 DUP4 DUP4 PUSH2 0x3F1F JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3C32 DUP10 DUP9 DUP11 DUP10 PUSH2 0x7E4 JUMP JUMPDEST DUP1 SWAP4 POP DUP2 SWAP5 POP DUP3 SWAP6 POP POP POP POP PUSH1 0x0 DUP4 DUP11 PUSH1 0x8 ADD DUP10 PUSH1 0xFF AND DUP2 SLOAD DUP2 LT PUSH2 0x3C59 JUMPI PUSH2 0x3C59 PUSH2 0x4738 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP5 DUP5 PUSH2 0x3C70 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x3C7A SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST PUSH2 0x3C84 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST SWAP4 SWAP11 SWAP4 SWAP10 POP SWAP3 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 PUSH1 0xFF AND DUP7 PUSH1 0xFF AND SUB PUSH2 0x3CE7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH23 0x31B7B6B830B932903A37B5B2B7103A379034BA39B2B633 PUSH1 0x49 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x0 DUP8 PUSH1 0x8 ADD DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3D37 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x3D23 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x3D4A DUP6 DUP4 PUSH2 0x35DD JUMP JUMPDEST SWAP1 POP DUP1 MLOAD DUP9 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x3D62 JUMPI POP DUP1 MLOAD DUP8 PUSH1 0xFF AND LT JUMPDEST PUSH2 0x3D7E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x440 SWAP1 PUSH2 0x470C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3D89 DUP11 PUSH2 0x3597 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3D97 DUP4 DUP4 PUSH2 0x18E6 JUMP JUMPDEST SWAP1 POP DUP4 DUP10 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3DAE JUMPI PUSH2 0x3DAE PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH2 0x3DC1 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3DD6 JUMPI PUSH2 0x3DD6 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3DE8 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST DUP4 DUP11 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3DFD JUMPI PUSH2 0x3DFD PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x3E17 DUP4 DUP13 DUP7 DUP6 PUSH2 0x134E JUMP JUMPDEST SWAP1 POP DUP4 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3E2E JUMPI PUSH2 0x3E2E PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH2 0x3E41 SWAP2 SWAP1 PUSH2 0x4770 JUMP JUMPDEST PUSH2 0x3E4C SWAP1 PUSH1 0x1 PUSH2 0x46F9 JUMP JUMPDEST SWAP7 POP PUSH5 0x2540BE400 DUP13 PUSH1 0x4 ADD SLOAD DUP9 PUSH2 0x3E64 SWAP2 SWAP1 PUSH2 0x479C JUMP JUMPDEST PUSH2 0x3E6E SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP6 POP DUP5 DUP12 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x3E85 JUMPI PUSH2 0x3E85 PUSH2 0x4738 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP7 DUP9 PUSH2 0x3E99 SWAP2 SWAP1 PUSH2 0x46F9 JUMP JUMPDEST PUSH2 0x3EA3 SWAP2 SWAP1 PUSH2 0x474E JUMP JUMPDEST SWAP7 POP POP POP POP POP POP SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x278C SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x3F4F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x3C19 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x3EE8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FA4 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4021 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x3C19 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x3FC2 SWAP2 SWAP1 PUSH2 0x4960 JUMP JUMPDEST PUSH2 0x3C19 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x440 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x771 DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x4048 SWAP2 SWAP1 PUSH2 0x49A1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x4085 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x408A JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x409B DUP8 DUP4 DUP4 DUP8 PUSH2 0x40A6 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x4115 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x410E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x410E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x440 JUMP JUMPDEST POP DUP2 PUSH2 0x771 JUMP JUMPDEST PUSH2 0x771 DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x412A JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x440 SWAP2 SWAP1 PUSH2 0x49BD JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x417F JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x417F JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x4164 JUMP JUMPDEST POP PUSH2 0x418B SWAP3 SWAP2 POP PUSH2 0x418F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x418B JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x4190 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x41B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x41D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x41F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4208 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x4223 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x4238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x426E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x427A DUP8 DUP3 DUP9 ADD PUSH2 0x41DF JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x428E DUP2 PUSH2 0x422A JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x42AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x42C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH2 0x42D5 PUSH1 0x20 DUP7 ADD PUSH2 0x4299 JUMP JUMPDEST SWAP3 POP PUSH2 0x42E3 PUSH1 0x40 DUP7 ADD PUSH2 0x4299 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4309 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH2 0x4319 PUSH1 0x20 DUP7 ADD PUSH2 0x4299 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4355 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP4 GT ISZERO PUSH2 0x4371 JUMPI PUSH2 0x4371 PUSH2 0x432E JUMP JUMPDEST DUP3 PUSH1 0x5 SHL PUSH1 0x40 MLOAD PUSH1 0x1F NOT PUSH1 0x3F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT DUP5 DUP3 GT OR ISZERO PUSH2 0x4396 JUMPI PUSH2 0x4396 PUSH2 0x432E JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP4 DUP5 MSTORE DUP6 DUP2 ADD DUP4 ADD SWAP4 DUP4 DUP2 ADD SWAP3 POP DUP8 DUP6 GT ISZERO PUSH2 0x43B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP8 ADD SWAP2 POP JUMPDEST DUP5 DUP3 LT ISZERO PUSH2 0x409B JUMPI DUP2 CALLDATALOAD DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH2 0x43BA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x43E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4405 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4411 DUP7 DUP3 DUP8 ADD PUSH2 0x4344 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4438 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH2 0x4448 PUSH1 0x20 DUP7 ADD PUSH2 0x4299 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4463 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x446F DUP8 DUP3 DUP9 ADD PUSH2 0x4344 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP4 SWAP5 PUSH1 0x60 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4496 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x44BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x44C6 DUP8 DUP3 DUP9 ADD PUSH2 0x41DF JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x450A JUMPI DUP4 MLOAD DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x44EE JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4529 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x453F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x454B DUP6 DUP3 DUP7 ADD PUSH2 0x4344 JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4572 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH2 0x4582 PUSH1 0x20 DUP8 ADD PUSH2 0x4299 JUMP JUMPDEST SWAP4 POP PUSH2 0x4590 PUSH1 0x40 DUP8 ADD PUSH2 0x4299 JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x45B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x45BE DUP9 DUP3 DUP10 ADD PUSH2 0x4344 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x45E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x45F7 PUSH1 0x40 DUP6 ADD PUSH2 0x4299 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4613 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x4631 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4652 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH2 0x42E3 PUSH1 0x40 DUP7 ADD PUSH2 0x4299 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4681 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH2 0x4691 PUSH1 0x20 DUP8 ADD PUSH2 0x4299 JUMP JUMPDEST SWAP4 POP PUSH2 0x469F PUSH1 0x40 DUP8 ADD PUSH2 0x4299 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP4 SWAP5 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP5 POP PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x46CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP2 CALLDATALOAD SWAP4 PUSH1 0x20 DUP4 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 SWAP1 SWAP3 ADD CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x4D1 JUMPI PUSH2 0x4D1 PUSH2 0x46E3 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x12 SWAP1 DUP3 ADD MSTORE PUSH18 0x696E646578206F7574206F662072616E6765 PUSH1 0x70 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x476B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x4D1 JUMPI PUSH2 0x4D1 PUSH2 0x46E3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4795 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x4D1 JUMPI PUSH2 0x4D1 PUSH2 0x46E3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x47E3 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x47C7 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 MSTORE PUSH1 0x0 PUSH2 0x4801 PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0x47B3 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x4813 DUP2 DUP8 PUSH2 0x47B3 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD SWAP6 SWAP1 SWAP6 MSTORE POP POP PUSH1 0x60 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xD SWAP1 DUP3 ADD MSTORE PUSH13 0x1F2628173130B630B731B2A7B3 PUSH1 0x99 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x4861 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x47B3 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x48AB JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x4891 JUMPI PUSH2 0x4891 PUSH2 0x46E3 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x489E JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x4875 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x48C2 JUMPI POP PUSH1 0x1 PUSH2 0x4D1 JUMP JUMPDEST DUP2 PUSH2 0x48CF JUMPI POP PUSH1 0x0 PUSH2 0x4D1 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x48E5 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x48EF JUMPI PUSH2 0x490B JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x4D1 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x4900 JUMPI PUSH2 0x4900 PUSH2 0x46E3 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x4D1 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x492E JUMPI POP DUP2 DUP2 EXP PUSH2 0x4D1 JUMP JUMPDEST PUSH2 0x4938 DUP4 DUP4 PUSH2 0x4870 JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x494C JUMPI PUSH2 0x494C PUSH2 0x46E3 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x26E5 DUP4 DUP4 PUSH2 0x48B3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4972 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x26E5 DUP2 PUSH2 0x422A JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4998 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4980 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x49B3 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x497D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x49DC DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x497D JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEB SLT PUSH2 0x86AB 0xDE 0x5D KECCAK256 LT 0xE5 PUSH17 0xDDC7821132F68A63FB65140E305E12EF43 SWAP3 EQ STATICCALL NOT PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"781:38067:109:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36281:212;;;;;;;;;;-1:-1:-1;36281:212:109;;;;;:::i;:::-;;:::i;:::-;;22726:199;;;;;;:::i;:::-;;:::i;:::-;;;445:25:181;;;433:2;418:18;22726:199:109;;;;;;;;3604:125;;;;;;:::i;:::-;;:::i;21633:856::-;;;;;;:::i;:::-;;:::i;16098:240::-;;;;;;:::i;:::-;;:::i;6300:1587::-;;;;;;:::i;:::-;;:::i;:::-;;;;3053:25:181;;;3109:2;3094:18;;3087:34;;;;3137:18;;;3130:34;3041:2;3026:18;6300:1587:109;2843:327:181;36706:204:109;;;;;;;;;;-1:-1:-1;36706:204:109;;;;;:::i;:::-;;:::i;27103:2576::-;;;;;;;;;;-1:-1:-1;27103:2576:109;;;;;:::i;:::-;;:::i;8731:1133::-;;;;;;:::i;:::-;;:::i;30123:1040::-;;;;;;;;;;-1:-1:-1;30123:1040:109;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;10270:1374::-;;;;;;:::i;:::-;;:::i;33059:2402::-;;;;;;;;;;-1:-1:-1;33059:2402:109;;;;;:::i;:::-;;:::i;14192:1501::-;;;;;;:::i;:::-;;:::i;5152:335::-;;;;;;:::i;:::-;;:::i;13243:::-;;;;;;:::i;:::-;;:::i;20083:204::-;;;;;;:::i;:::-;;:::i;35627:430::-;;;;;;;;;;-1:-1:-1;35627:430:109;;;;;:::i;:::-;;:::i;31545:1079::-;;;;;;;;;;-1:-1:-1;31545:1079:109;;;;;:::i;:::-;;:::i;16658:246::-;;;;;;:::i;:::-;;:::i;25350:1266::-;;;;;;;;;;-1:-1:-1;25350:1266:109;;;;;:::i;:::-;;:::i;38486:360::-;;;;;;;;;;-1:-1:-1;38486:360:109;;;;;:::i;:::-;;:::i;23749:1193::-;;;;;;;;;;-1:-1:-1;23749:1193:109;;;;;:::i;:::-;;:::i;3928:108::-;;;;;;:::i;:::-;;:::i;37283:1025::-;;;;;;;;;;-1:-1:-1;37283:1025:109;;;;;:::i;:::-;;:::i;36281:212::-;36379:27;4029:4:104;36405:1:109;36379:27;:::i;:::-;36365:11;:41;36357:62;;;;-1:-1:-1;;;36357:62:109;;10028:2:181;36357:62:109;;;10010:21:181;10067:1;10047:18;;;10040:29;-1:-1:-1;;;10085:18:181;;;10078:38;10133:18;;36357:62:109;;;;;;;;;36425:13;;;:27;;;36464:24;;445:25:181;;;36464:24:109;;433:2:181;418:18;36464:24:109;;;;;;;;36281:212;;:::o;22726:199::-;22839:17;;;:24;22808:7;;22831:32;;22823:63;;;;-1:-1:-1;;;22823:63:109;;;;;;;:::i;:::-;22899:4;:14;;22914:5;22899:21;;;;;;;;:::i;:::-;;;;;;;;;22892:28;;22726:199;;;;;:::o;3604:125::-;3660:7;4566:3:104;3682:18:109;3695:4;3682:12;:18::i;:::-;:42;;;;:::i;21633:856::-;21763:7;21778:9;21790:18;21803:4;21790:12;:18::i;:::-;21778:30;;21814:25;21842:4;:13;;21814:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21861:28;21892:4;:30;;21861:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21929:19;21951:8;:15;21929:37;;21972:10;21985:35;21990:26;21994:8;22004:11;21990:3;:26::i;:::-;22018:1;21985:4;:35::i;:::-;21972:48;;22031:9;22026:222;22046:11;22042:1;:15;22026:222;;;22073:7;22069:133;;;22120:7;;22128:1;22120:10;;;;;;;:::i;:::-;;;;;;;22106:8;22115:1;22106:11;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;22092:8;22101:1;22092:11;;;;;;;;:::i;:::-;;;;;;:38;;;;;22069:133;;;22183:7;;22191:1;22183:10;;;;;;;:::i;:::-;;;;;;;22169:8;22178:1;22169:11;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;22155:8;22164:1;22155:11;;;;;;;;:::i;:::-;;;;;;:38;;;;;22069:133;22230:3;;22026:222;;;;22253:10;22266:35;22271:26;22275:8;22285:11;22271:3;:26::i;:::-;22299:1;22266:4;:35::i;:::-;22253:48;;22307:19;22329:4;:12;;;;;;;;;;-1:-1:-1;;;;;22329:12:109;-1:-1:-1;;;;;22329:24:109;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22307:48;;22366:7;22362:123;;;22418:2;22403:11;22392:7;22418:2;22392;:7;:::i;:::-;22391:23;;;;:::i;:::-;22390:30;;;;:::i;:::-;22383:37;;;;;;;;;;;22362:123;22476:2;22461:11;22450:7;22455:2;22476;22450:7;:::i;21633:856::-;;;;;;;:::o;16098:240::-;16237:10;16264:69;16279:4;16285:14;16301:12;16315:2;16319:4;:13;;16264:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:14;:69::i;:::-;-1:-1:-1;16255:78:109;16098:240;-1:-1:-1;;;;;16098:240:109:o;6300:1587::-;6476:7;6491;6506;6621:19;6643:9;6647:4;6643:3;:9::i;:::-;6621:31;;6680:2;:9;6667:10;:22;;;6659:53;;;;-1:-1:-1;;;6659:53:109;;;;;;;:::i;:::-;6719:40;6762:46;;;;;;;;6794:1;6762:46;;;;6797:1;6762:46;;;;6800:1;6762:46;;;;6803:1;6762:46;;;;6806:1;6762:46;;;6719:89;;6827:18;6840:4;6827:12;:18::i;:::-;6814:10;;;:31;;;6858:20;;6863:2;;6858:4;:20::i;:::-;6851:27;;;6922:11;;6900:18;;:11;:18;:::i;:::-;6899:34;;;;:::i;:::-;6891:4;;:43;;;;:::i;:::-;6884:4;;;:50;6964:14;;:2;;:14;;;;;;;;;;:::i;:::-;;;;;;;6949:11;:29;;6941:59;;;;-1:-1:-1;;;6941:59:109;;11742:2:181;6941:59:109;;;11724:21:181;11781:2;11761:18;;;11754:30;-1:-1:-1;;;11800:18:181;;;11793:47;11857:18;;6941:59:109;11540:341:181;6941:59:109;7016:39;7022:1;:10;;;7034;7046:2;7050:1;:4;;;7016:5;:39::i;:::-;7007:6;;;:48;7105:9;;7062:26;;-1:-1:-1;;;;;7091:24:109;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7091:24:109;;7062:53;;7138:37;7151:4;:12;;;7165:2;:9;7138:12;:37::i;:::-;7122:13;;;:53;7196:9;;7182:11;7211:474;7231:3;7227:1;:7;7211:474;;;7246:11;7260:2;7263:1;7260:5;;;;;;;;:::i;:::-;;;;;;;7246:19;;3443:4:104;7585:1:109;:13;;;7507:10;7502:15;;:1;:15;7501:80;;7576:4;;7568;;;;7562:10;;:3;:10;:::i;:::-;7561:19;;;;:::i;:::-;7555:25;;:3;:25;:::i;:::-;7501:80;;;7544:6;;;;7537:4;;7529;;;;7523:10;;:3;:10;:::i;:::-;7522:19;;;;:::i;:::-;:28;;;;:::i;:::-;7500:98;;;;:::i;:::-;7499:138;;;;:::i;:::-;7484:154;;:3;:154;:::i;:::-;7461:9;7471:1;7461:12;;;;;;;;:::i;:::-;;;;;;;;;;:177;-1:-1:-1;7667:3:109;;7211:474;;;;7691:10;7728:46;7734:1;:10;;;7746;7758:9;7769:1;:4;;;7728:5;:46::i;:::-;7704:9;7714:10;7704:21;;;;;;;;;;:::i;:::-;;;;;;;:70;;;;:::i;:::-;7691:83;;7797:4;:30;;7828:10;7797:42;;;;;;;;;;:::i;:::-;;;;;;;;;7791:1;7786:2;:6;;;;:::i;:::-;7785:55;;;;:::i;:::-;7780:60;;7855:2;7859:1;:6;;;7867:2;7870:10;7867:14;;;;;;;;;;:::i;:::-;;;;;;;7847:35;;;;;;;;;;;6300:1587;;;;;;;;:::o;36706:204::-;36801:26;3647:3:104;36826:1:109;36801:26;:::i;:::-;36788:10;:39;36780:60;;;;-1:-1:-1;;;36780:60:109;;10028:2:181;36780:60:109;;;10010:21:181;10067:1;10047:18;;;10040:29;-1:-1:-1;;;10085:18:181;;;10078:38;10133:18;;36780:60:109;9826:331:181;36780:60:109;36846:12;;;:25;;;36883:22;;445:25:181;;;36883:22:109;;433:2:181;418:18;36883:22:109;291:185:181;27103:2576:109;27258:17;;;:24;27296:14;;27223:7;;27258:24;27296:27;;27288:62;;;;-1:-1:-1;;;27288:62:109;;12088:2:181;27288:62:109;;;12070:21:181;12127:2;12107:18;;;12100:30;-1:-1:-1;;;12146:18:181;;;12139:52;12208:18;;27288:62:109;11886:346:181;27288:62:109;27378:28;27409:166;;;;;;;;27436:1;27409:166;;;;27445:1;27409:166;;;;27454:1;27409:166;;;;27463:18;27476:4;27463:12;:18::i;:::-;27409:166;;;;27489:4;:12;;;;;;;;;;-1:-1:-1;;;;;27489:12:109;-1:-1:-1;;;;;27409:166:109;;;;;27509:1;27409:166;;;;27518:4;:13;;27409:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27539:4;:30;;27409:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27378:197;;27597:1;:9;;;-1:-1:-1;;;;;27597:21:109;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27581:13;;;:39;;;27630:18;27626:94;;27665:48;27670:30;27674:1;:10;;;27686:1;:13;;;27670:3;:30::i;:::-;27702:1;:10;;;27665:4;:48::i;:::-;27658:55;;27626:94;27726:28;27771:9;-1:-1:-1;;;;;27757:24:109;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27757:24:109;;27726:55;;27793:9;27788:468;27808:9;27804:1;:13;27788:468;;;27837:13;;;;:18;;;:37;;;27859:7;27867:1;27859:10;;;;;;;;:::i;:::-;;;;;;;27873:1;27859:15;;27837:37;27829:68;;;;-1:-1:-1;;;27829:68:109;;12439:2:181;27829:68:109;;;12421:21:181;12478:2;12458:18;;;12451:30;-1:-1:-1;;;12497:18:181;;;12490:48;12555:18;;27829:68:109;12237:342:181;27829:68:109;27981:7;27989:1;27981:10;;;;;;;;:::i;:::-;;;;;;;27995:1;27981:15;27977:181;;28008:12;28023:4;:17;;28041:1;28023:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28023:20:109;28008:35;;28091:58;28130:5;28138:7;28146:1;28138:10;;;;;;;;:::i;:::-;;;;;;;28091:30;:58::i;:::-;27998:160;27977:181;28199:7;28207:1;28199:10;;;;;;;;:::i;:::-;;;;;;;28183:1;:10;;;28194:1;28183:13;;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;28166:11;28178:1;28166:14;;;;;;;;:::i;:::-;;;;;;;;;;:43;28238:3;;27788:468;;;;28299:49;28304:31;28308:11;28321:1;:13;;;28304:3;:31::i;:::-;28337:1;:10;;;28299:4;:49::i;:::-;28292:4;;;:56;;;28369:4;;-1:-1:-1;28354:41:109;;;;-1:-1:-1;;;28354:41:109;;12786:2:181;28354:41:109;;;12768:21:181;12825:2;12805:18;;;12798:30;-1:-1:-1;;;12844:18:181;;;12837:47;12901:18;;28354:41:109;12584:341:181;28354:41:109;28475:4;;;;28468;;;:11;-1:-1:-1;28523:9:109;-1:-1:-1;;;;;28509:24:109;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28509:24:109;;28485:48;;28544:1;:13;;;28561:1;28544:18;28540:765;;28572:19;28594:37;28607:4;:12;;;28621:9;28594:12;:37::i;:::-;28572:59;;28644:9;28639:500;28659:9;28655:1;:13;28639:500;;;28682:20;28730:1;:4;;;28713:1;:10;;;28724:1;28713:13;;;;;;;;:::i;:::-;;;;;;;28706:1;:4;;;:20;;;;:::i;:::-;28705:29;;;;:::i;:::-;28682:52;;3443:4:104;28770:39:109;28794:11;28806:1;28794:14;;;;;;;;:::i;:::-;;;;;;;28770:12;:23;;:39;;;;:::i;:::-;28755:55;;:11;:55;:::i;:::-;28754:85;;;;:::i;:::-;28744:4;28749:1;28744:7;;;;;;;;:::i;:::-;;;;;;:95;;;;;28849:16;3443:4:104;28879::109;:13;;;28869:4;28874:1;28869:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;:::i;:::-;28868:53;;;;:::i;:::-;28849:72;;28967:8;28950:11;28962:1;28950:14;;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;28931:4;:13;;28945:1;28931:16;;;;;;;;:::i;:::-;;;;;;;;:44;;;;29025:8;29005:4;:14;;29020:1;29005:17;;;;;;;;:::i;:::-;;;;;;;;;:28;;;;:::i;:::-;28985:4;:14;;29000:1;28985:17;;;;;;;;:::i;:::-;;;;;;;;:48;;;;29077:4;29082:1;29077:7;;;;;;;;:::i;:::-;;;;;;;29060:11;29072:1;29060:14;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;29043:11;29055:1;29043:14;;;;;;;;:::i;:::-;;;;;;;;;;:41;-1:-1:-1;;29117:3:109;;28639:500;;;;29153:49;29158:31;29162:11;29175:1;:13;;;29158:3;:31::i;:::-;29191:1;:10;;;29153:4;:49::i;:::-;29146:4;;;:56;-1:-1:-1;28540:765:109;;;29271:27;;;;:13;;;;:27;;;;;:::i;:::-;;28540:765;29311:14;29335:1;:13;;;29352:1;29335:18;29331:120;;-1:-1:-1;29372:4:109;;;;29331:120;;;29440:4;;29423:13;;;;29408:4;;;;:11;;29440:4;;29408:11;:::i;:::-;29407:29;;;;:::i;:::-;29406:38;;;;:::i;:::-;29397:47;;29331:120;29475:9;29465:6;:19;;29457:42;;;;-1:-1:-1;;;29457:42:109;;13132:2:181;29457:42:109;;;13114:21:181;13171:2;13151:18;;;13144:30;-1:-1:-1;;;13190:18:181;;;13183:40;13240:18;;29457:42:109;12930:334:181;29457:42:109;29539:9;;;;:34;;-1:-1:-1;;;29539:34:109;;29554:10;29539:34;;;13443:51:181;13510:18;;;13503:34;;;-1:-1:-1;;;;;29539:14:109;;;;;;13416:18:181;;29539:34:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29598:10;-1:-1:-1;;;;;29585:69:109;;29610:7;29619:4;29625:1;:4;;;29647:6;29631:1;:13;;;:22;;;;:::i;:::-;29585:69;;;;;;;;;:::i;:::-;;;;;;;;29668:6;27103:2576;-1:-1:-1;;;;;;;;27103:2576:109:o;8731:1133::-;8883:9;;8848:7;;8906:22;;;;-1:-1:-1;8898:50:109;;;;-1:-1:-1;;;8898:50:109;;14804:2:181;8898:50:109;;;14786:21:181;14843:2;14823:18;;;14816:30;-1:-1:-1;;;14862:18:181;;;14855:45;14917:18;;8898:50:109;14602:339:181;8898:50:109;8967:1;8955:9;;9002:13;9006:9;9002:1;:13;:::i;:::-;8989:26;;9027:9;9022:419;9042:9;9038:1;:13;9022:419;;;9072:10;9067:15;;:1;:15;9063:332;;9099:2;9102:1;9099:5;;;;;;;;:::i;:::-;;;;;;;9094:10;;;;;:::i;:::-;;;9137:9;9129:2;9132:1;9129:5;;;;;;;;:::i;:::-;;;;;;;:17;;;;:::i;:::-;9119:5;9123:1;9119;:5;:::i;:::-;9118:29;;;;:::i;:::-;9114:33;;9063:332;9423:3;;9022:419;;;-1:-1:-1;9485:14:109;9490:9;9485:2;:14;:::i;:::-;4566:3:104;9451:5:109;9455:1;9451;:5;:::i;:::-;:29;;;;:::i;:::-;9450:50;;;;:::i;:::-;9446:54;-1:-1:-1;9507:9:109;9554:2;9525:25;4566:3:104;9525:1:109;:25;:::i;:::-;9524:32;;;;:::i;:::-;9519:38;;:1;:38;:::i;:::-;9507:50;-1:-1:-1;9563:13:109;9594:1;9563:13;9601:213;4231:3:104;9617:1:109;:28;9601:213;;;9665:1;9657:9;;9709:1;9705;9696;9700;9696:5;;;;:::i;:::-;9695:11;;;;:::i;:::-;:15;;;;:::i;:::-;9689:1;9680:5;9684:1;;9680:5;:::i;:::-;9679:11;;;;:::i;:::-;9678:33;;;;:::i;:::-;9674:37;-1:-1:-1;9723:16:109;9674:37;9733:5;9723:9;:16::i;:::-;9719:49;;;-1:-1:-1;9758:1:109;-1:-1:-1;9751:8:109;;-1:-1:-1;;;;;;9751:8:109;9719:49;9796:3;;9601:213;;;-1:-1:-1;9819:40:109;;-1:-1:-1;;;9819:40:109;;15148:2:181;9819:40:109;;;15130:21:181;15187:2;15167:18;;;15160:30;15226:32;15206:18;;;15199:60;15276:18;;9819:40:109;14946:354:181;30123:1040:109;30290:12;;;;30326:29;;-1:-1:-1;;;30326:29:109;;30344:10;30326:29;;;15451:51:181;30248:16:109;;-1:-1:-1;;;;;30290:12:109;;;;30326:17;;15424:18:181;;30326:29:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30316:6;:39;;30308:65;;;;-1:-1:-1;;;30308:65:109;;;;;;;:::i;:::-;30399:17;;;:24;30437:30;;;30429:62;;;;-1:-1:-1;;;30429:62:109;;16057:2:181;30429:62:109;;;16039:21:181;16096:2;16076:18;;;16069:30;-1:-1:-1;;;16115:18:181;;;16108:49;16174:18;;30429:62:109;15855:343:181;30429:62:109;30498:25;30526:4;:13;;30498:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30545:19;30567:7;-1:-1:-1;;;;;30567:19:109;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30545:43;;30595:24;30622:56;30648:8;30658:6;30666:11;30622:25;:56::i;:::-;30706:14;;30595:83;;-1:-1:-1;30685:18:109;30726:299;30746:10;30742:1;:14;30726:299;;;30790:10;;30801:1;30790:13;;;;;;;:::i;:::-;;;;;;;30776:7;30784:1;30776:10;;;;;;;;:::i;:::-;;;;;;;:27;;30768:66;;;;-1:-1:-1;;;30768:66:109;;16405:2:181;30768:66:109;;;16387:21:181;16444:2;16424:18;;;16417:30;16483:28;16463:18;;;16456:56;16529:18;;30768:66:109;16203:350:181;30768:66:109;30875:7;30883:1;30875:10;;;;;;;;:::i;:::-;;;;;;;30861:8;30870:1;30861:11;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;30842:4;:13;;30856:1;30842:16;;;;;;;;:::i;:::-;;;;;;;;:43;;;;30893:85;30932:4;:17;;30950:1;30932:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30932:20:109;30955:10;30967:7;30975:1;30967:10;;;;;;;;:::i;:::-;;;;;;;30893:30;:85::i;:::-;31007:3;;30726:299;;;-1:-1:-1;31031:36:109;;-1:-1:-1;;;31031:36:109;;31048:10;31031:36;;;13443:51:181;13510:18;;;13503:34;;;-1:-1:-1;;;;;31031:16:109;;;;;13416:18:181;;31031:36:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31095:10:109;;-1:-1:-1;31079:58:109;;-1:-1:-1;31107:7:109;;-1:-1:-1;31116:20:109;31130:6;31116:11;:20;:::i;:::-;31079:58;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;31151:7:109;30123:1040;-1:-1:-1;;;;;;;;;30123:1040:109:o;10270:1374::-;10372:9;;10337:7;;;;10402:98;10422:9;10418:1;:13;10402:98;;;10448:2;10451:1;10448:5;;;;;;;;:::i;:::-;;;;;;;10443:10;;;;;:::i;:::-;;-1:-1:-1;10482:3:109;;10402:98;;;;10509:1;10514;10509:6;10505:35;;10532:1;10525:8;;;;;;10505:35;10546:13;10577:1;10546:13;10597;10601:9;10597:1;:13;:::i;:::-;10584:26;;10622:9;10617:744;4231:3:104;10633:1:109;:28;10617:744;;;10686:1;10673:10;10695:374;10715:9;10711:1;:13;10695:374;;;10763:9;10755:2;10758:1;10755:5;;;;;;;;:::i;:::-;;;;;;;:17;;;;:::i;:::-;10744:6;10749:1;10744:2;:6;:::i;:::-;10743:30;;;;:::i;:::-;10738:35;-1:-1:-1;11047:3:109;;10695:374;;;;11084:1;11076:9;;11254:2;11237:9;11249:1;11237:13;;;;:::i;:::-;11236:20;;;;:::i;:::-;4566:3:104;11207:1:109;11177:26;4566:3:104;11177:2:109;:26;:::i;:::-;11176:32;;;;:::i;:::-;11175:58;;;;:::i;:::-;:81;;;;:::i;:::-;11160:1;11142:14;11147:9;11142:2;:14;:::i;:::-;4566:3:104;11108:6:109;11113:1;11108:2;:6;:::i;:::-;11107:32;;;;:::i;:::-;:49;;;;:::i;:::-;11106:55;;;;:::i;:::-;11105:153;;;;:::i;:::-;11093:165;-1:-1:-1;11270:16:109;11093:165;11280:5;11270:9;:16::i;:::-;11266:49;;;11305:1;11298:8;;;;;;;;;;;11266:49;-1:-1:-1;11343:3:109;;10617:744;;;-1:-1:-1;11610:29:109;;-1:-1:-1;;;11610:29:109;;17097:2:181;11610:29:109;;;17079:21:181;17136:2;17116:18;;;17109:30;-1:-1:-1;;;17155:18:181;;;17148:49;17214:18;;11610:29:109;16895:343:181;33059:2402:109;33195:7;33210:28;33241:166;;;;;;;;33268:1;33241:166;;;;33277:1;33241:166;;;;33286:1;33241:166;;;;33295:18;33308:4;33295:12;:18::i;:::-;33241:166;;;;33321:4;:12;;;;;;;;;;-1:-1:-1;;;;;33321:12:109;-1:-1:-1;;;;;33241:166:109;;;;;33341:1;33241:166;;;;33350:4;:13;;33241:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33371:4;:30;;33241:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33210:197;;33429:1;:9;;;-1:-1:-1;;;;;33429:21:109;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33413:13;;;:39;33479:17;;;:24;33530:14;;33558:23;;;33550:56;;;;-1:-1:-1;;;33550:56:109;;17445:2:181;33550:56:109;;;17427:21:181;17484:2;17464:18;;;17457:30;-1:-1:-1;;;17503:18:181;;;17496:50;17563:18;;33550:56:109;17243:344:181;33550:56:109;33638:9;;;;:31;;-1:-1:-1;;;33638:31:109;;33658:10;33638:31;;;15451:51:181;-1:-1:-1;;;;;33638:19:109;;;;;;15424:18:181;;33638:31:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33621:13;:48;;:70;;;;-1:-1:-1;33673:18:109;;;33621:70;33613:96;;;;-1:-1:-1;;;33613:96:109;;;;;;;:::i;:::-;33716:19;33738:37;33751:4;:12;;;33765:9;33738:12;:37::i;:::-;33716:59;;33781:21;33819:9;-1:-1:-1;;;;;33805:24:109;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33805:24:109;;33781:48;;33843:26;33886:9;-1:-1:-1;;;;;33872:24:109;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33872:24:109;;33843:53;;33911:48;33916:30;33920:1;:10;;;33932:1;:13;;;33916:3;:30::i;:::-;33948:1;:10;;;33911:4;:48::i;:::-;33904:55;;:4;33967:219;33987:9;33983:1;:13;33967:219;;;34035:7;34043:1;34035:10;;;;;;;;:::i;:::-;;;;;;;34018:1;:10;;;34029:1;34018:13;;;;;;;;:::i;:::-;;;;;;;:27;;34010:68;;;;-1:-1:-1;;;34010:68:109;;17794:2:181;34010:68:109;;;17776:21:181;17833:2;17813:18;;;17806:30;17872;17852:18;;;17845:58;17920:18;;34010:68:109;17592:352:181;34010:68:109;34142:7;34150:1;34142:10;;;;;;;;:::i;:::-;;;;;;;34126:1;:10;;;34137:1;34126:13;;;;;;;;:::i;:::-;;;;;;;:26;34111:9;34121:1;34111:12;;;;;;;;:::i;:::-;;;;;;;;;;:41;34164:3;;33967:219;;;;34200:47;34205:29;34209:9;34220:1;:13;;;34205:3;:29::i;34200:47::-;34193:4;;;:54;34261:9;34256:557;34276:9;34272:1;:13;34256:557;;;34311:20;34359:1;:4;;;34342:1;:10;;;34353:1;34342:13;;;;;;;;:::i;:::-;;;;;;;34335:1;:4;;;:20;;;;:::i;:::-;34334:29;;;;:::i;:::-;34311:52;;34375:18;34396:37;34420:9;34430:1;34420:12;;;;;;;;:::i;34396:37::-;34375:58;-1:-1:-1;3443:4:104;34456:24:109;34375:58;34456:11;:24;:::i;:::-;34455:54;;;;:::i;:::-;34445:4;34450:1;34445:7;;;;;;;;:::i;:::-;;;;;;:64;;;;;34299:221;;34529:16;3443:4:104;34559::109;:13;;;34549:4;34554:1;34549:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;:::i;:::-;34548:53;;;;:::i;:::-;34529:72;;34645:8;34630:9;34640:1;34630:12;;;;;;;;:::i;:::-;;;;;;;:23;;;;:::i;:::-;34611:4;:13;;34625:1;34611:16;;;;;;;;:::i;:::-;;;;;;;;:42;;;;34703:8;34683:4;:14;;34698:1;34683:17;;;;;;;;:::i;:::-;;;;;;;;;:28;;;;:::i;:::-;34663:4;:14;;34678:1;34663:17;;;;;;;;:::i;:::-;;;;;;;;:48;;;;34751:4;34756:1;34751:7;;;;;;;;:::i;:::-;;;;;;;34736:9;34746:1;34736:12;;;;;;;;:::i;:::-;;;;;;;:22;;;;:::i;:::-;34721:9;34731:1;34721:12;;;;;;;;:::i;:::-;;;;;;;;;;:37;-1:-1:-1;34791:3:109;;34256:557;;;;34828:47;34833:29;34837:9;34848:1;:13;;;34833:3;:29::i;34828:47::-;34821:4;;;:54;;;34943:4;;34926:13;;;;34887:19;;-1:-1:-1;34943:4:109;;34911:11;;34943:4;34911:11;:::i;:::-;34910:29;;;;:::i;:::-;34909:38;;;;:::i;:::-;34887:60;;34961:11;34976:1;34961:16;34953:41;;;;-1:-1:-1;;;34953:41:109;;18151:2:181;34953:41:109;;;18133:21:181;18190:2;18170:18;;;18163:30;-1:-1:-1;;;18209:18:181;;;18202:42;18261:18;;34953:41:109;17949:336:181;34953:41:109;35014:15;:11;35028:1;35014:15;:::i;:::-;35000:29;;35059:13;35044:11;:28;;35036:68;;;;-1:-1:-1;;;35036:68:109;;18492:2:181;35036:68:109;;;18474:21:181;18531:2;18511:18;;;18504:30;18570:29;18550:18;;;18543:57;18617:18;;35036:68:109;18290:351:181;35036:68:109;35111:9;;;;:43;;-1:-1:-1;;;35111:43:109;;35130:10;35111:43;;;13443:51:181;13510:18;;;13503:34;;;-1:-1:-1;;;;;35111:18:109;;;;;;13416::181;;35111:43:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35166:9;35161:173;35181:9;35177:1;:13;35161:173;;;35202:85;35241:4;:17;;35259:1;35241:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35241:20:109;35264:10;35276:7;35284:1;35276:10;;;;;;;;:::i;35202:85::-;35316:3;;35161:173;;;;35370:10;-1:-1:-1;;;;;35345:86:109;;35382:7;35391:4;35397:1;:4;;;35419:11;35403:1;:13;;;:27;;;;:::i;:::-;35345:86;;;;;;;;;:::i;:::-;;;;;;;;35445:11;33059:2402;-1:-1:-1;;;;;;;;;33059:2402:109:o;14192:1501::-;14378:9;;14343:7;;14401:30;;;;;;;;14393:66;;;;-1:-1:-1;;;14393:66:109;;18848:2:181;14393:66:109;;;18830:21:181;18887:2;18867:18;;;18860:30;-1:-1:-1;;;18906:18:181;;;18899:53;18969:18;;14393:66:109;18646:347:181;14393:66:109;14490:9;14473:14;:26;;;:54;;;;;14518:9;14503:12;:24;;;14473:54;14465:82;;;;-1:-1:-1;;;14465:82:109;;19200:2:181;14465:82:109;;;19182:21:181;19239:2;19219:18;;;19212:30;-1:-1:-1;;;19258:18:181;;;19251:45;19313:18;;14465:82:109;18998:339:181;14465:82:109;14554:9;14566:18;14571:2;14575:8;14566:4;:18::i;:::-;14554:30;-1:-1:-1;14554:30:109;14590:9;;14637:20;14649:8;14637:9;:20;:::i;:::-;14624:33;;14664:10;14685:9;14680:559;14700:9;14696:1;:13;14680:559;;;14730:14;14725:19;;:1;:19;14721:186;;14761:1;14756:6;;14721:186;;;14786:12;14781:17;;:1;:17;14777:130;;14815:2;14818:1;14815:5;;;;;;;;:::i;:::-;;;;;;;14810:10;;14777:130;;;14867:3;;14680:559;;14777:130;14914:7;14919:2;14914:7;;:::i;:::-;;-1:-1:-1;14944:14:109;14949:9;14944:2;:14;:::i;:::-;14934:5;14938:1;14934;:5;:::i;:::-;14933:26;;;;:::i;:::-;14929:30;-1:-1:-1;15221:3:109;;14680:559;;;-1:-1:-1;15283:14:109;15288:9;15283:2;:14;:::i;:::-;4566:3:104;15249:5:109;15253:1;15249;:5;:::i;:::-;:29;;;;:::i;:::-;15248:50;;;;:::i;:::-;15244:54;-1:-1:-1;15304:9:109;15351:2;15322:25;4566:3:104;15322:1:109;:25;:::i;:::-;15321:32;;;;:::i;:::-;15316:38;;:1;:38;:::i;:::-;15304:50;-1:-1:-1;15360:13:109;15391:1;15360:13;15430:213;4231:3:104;15446:1:109;:28;15430:213;;;15494:1;15486:9;;15538:1;15534;15525;15529;15525:5;;;;:::i;:::-;15524:11;;;;:::i;:::-;:15;;;;:::i;:::-;15518:1;15509:5;15513:1;;15509:5;:::i;:::-;15508:11;;;;:::i;:::-;15507:33;;;;:::i;:::-;15503:37;-1:-1:-1;15552:16:109;15503:37;15562:5;15552:9;:16::i;:::-;15548:49;;;-1:-1:-1;15587:1:109;-1:-1:-1;15580:8:109;;-1:-1:-1;;;;;;;;15580:8:109;15548:49;15625:3;;15430:213;;14192:1501;;;;;;;;:::o;5152:335::-;5284:7;5300:28;5334:115;5368:4;5380:11;5399:10;5417:4;:12;;;;;;;;;;-1:-1:-1;;;;;5417:12:109;-1:-1:-1;;;;;5417:24:109;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5334;:115::i;13243:335::-;13310:7;13325:9;13337:35;13342:9;13346:4;13342:3;:9::i;:::-;13353:18;13366:4;13353:12;:18::i;13337:35::-;13325:47;;13378:15;13396:4;:12;;;;;;;;;;-1:-1:-1;;;;;13396:12:109;13378:30;;13414:14;13431:7;-1:-1:-1;;;;;13431:19:109;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13414:38;-1:-1:-1;13462:11:109;;13458:102;;13547:6;13496:46;3133:2:104;13496::109;:46;:::i;:::-;13491:52;;:1;:52;:::i;:::-;13490:63;;;;:::i;13458:102::-;-1:-1:-1;13572:1:109;;13243:335;-1:-1:-1;;;;13243:335:109:o;20083:204::-;20175:16;20206:76;20232:4;:13;;20206:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20247:6;20255:4;:12;;;;;;;;;;-1:-1:-1;;;;;20255:12:109;-1:-1:-1;;;;;20255:24:109;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20206:25;:76::i;:::-;20199:83;20083:204;-1:-1:-1;;;20083:204:109:o;35627:430::-;35720:17;;;:24;35700:17;35750:303;35770:9;35766:1;:13;35750:303;;;35791:12;35806:4;:17;;35824:1;35806:20;;;;;;;;:::i;:::-;;;;;;;;;;35852:14;;;:17;;-1:-1:-1;;;;;35806:20:109;;;;-1:-1:-1;35852:14:109;35867:1;;35852:17;;;;;;:::i;:::-;;;;;;;;;35834:35;;35881:7;35892:1;35881:12;35877:130;;35912:4;:14;;35927:1;35912:17;;;;;;;;:::i;:::-;;;;;;;;;35905:24;35939:59;35978:5;35986:2;35990:7;35939:30;:59::i;:::-;-1:-1:-1;;36035:3:109;;35750:303;;;;35694:363;35627:430;;:::o;31545:1079::-;31726:12;;;;31768:29;;-1:-1:-1;;;31768:29:109;;31786:10;31768:29;;;15451:51:181;31693:7:109;;-1:-1:-1;;;;;31726:12:109;;;;31768:17;;15424:18:181;;31768:29:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31753:11;:44;;31745:70;;;;-1:-1:-1;;;31745:70:109;;;;;;;:::i;:::-;31841:17;;;:24;31879:22;;;;-1:-1:-1;31871:44:109;;;;-1:-1:-1;;;31871:44:109;;20918:2:181;31871:44:109;;;20900:21:181;20957:1;20937:18;;;20930:29;-1:-1:-1;;;20975:18:181;;;20968:39;21024:18;;31871:44:109;20716:332:181;31871:44:109;31922:19;31944:7;-1:-1:-1;;;;;31944:19:109;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31922:43;;31973:10;31985:13;32002:70;32029:4;32035:11;32048:10;32060:11;32002:26;:70::i;:::-;31972:100;;;;32093:9;32087:2;:15;;32079:42;;;;-1:-1:-1;;;32079:42:109;;21255:2:181;32079:42:109;;;21237:21:181;21294:2;21274:18;;;21267:30;-1:-1:-1;;;21313:18:181;;;21306:44;21367:18;;32079:42:109;21053:338:181;32079:42:109;32128:16;3443:4:104;32156::109;:13;;;32148:5;:21;;;;:::i;:::-;32147:51;;;;:::i;:::-;32128:70;-1:-1:-1;32261:13:109;32128:70;32261:2;:13;:::i;:::-;32232:4;:13;;32246:10;32232:25;;;;;;;;;;:::i;:::-;;;;;;;;;:43;;;;:::i;:::-;32204:4;:13;;32218:10;32204:25;;;;;;;;;;:::i;:::-;;;;;;;;;;:71;32285:13;;32281:100;;32366:8;32337:4;:14;;32352:10;32337:26;;;;;;;;;;:::i;:::-;;;;;;;;;:37;;;;:::i;:::-;32308:4;:14;;32323:10;32308:26;;;;;;;;;;:::i;:::-;;;;;;;;;;:66;32281:100;32386:41;;-1:-1:-1;;;32386:41:109;;32403:10;32386:41;;;13443:51:181;13510:18;;;13503:34;;;-1:-1:-1;;;;;32386:16:109;;;;;13416:18:181;;32386:41:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32433:86;32472:4;:17;;32490:10;32472:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;32472:29:109;32504:10;32516:2;32433:30;:86::i;:::-;32531:72;;;21625:25:181;;;21681:2;21666:18;;21659:34;;;21741:4;21729:17;;21709:18;;;21702:45;21778:2;21763:18;;21756:34;;;32531:72:109;;32550:10;;32531:72;;;;;;21612:3:181;32531:72:109;;;-1:-1:-1;32617:2:109;;31545:1079;-1:-1:-1;;;;;;;;;31545:1079:109:o;16658:246::-;16800:10;16827:72;16845:4;16851:14;16867:12;16881:2;16885:4;:13;;16827:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:72::i;25350:1266::-;25497:7;25526:4;:13;;25540:12;25526:27;;;;;;;;;;:::i;:::-;;;;;;;;;25520:2;:33;;25512:59;;;;-1:-1:-1;;;25512:59:109;;22003:2:181;25512:59:109;;;21985:21:181;22042:2;22022:18;;;22015:30;-1:-1:-1;;;22061:18:181;;;22054:43;22114:18;;25512:59:109;21801:337:181;25512:59:109;25578:10;25594:13;25613:25;25641:4;:13;;25613:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25674:67;25692:4;25698:14;25714:12;25728:2;25732:8;25674:17;:67::i;:::-;25660:81;;-1:-1:-1;25660:81:109;-1:-1:-1;25755:11:109;;;;25747:34;;;;-1:-1:-1;;;25747:34:109;;22345:2:181;25747:34:109;;;22327:21:181;22384:2;22364:18;;;22357:30;-1:-1:-1;;;22403:18:181;;;22396:40;22453:18;;25747:34:109;22143:334:181;25747:34:109;25788:18;25875:4;:30;;25906:14;25875:46;;;;;;;;;;:::i;:::-;;;;;;;;;3443:4:104;25818::109;:13;;;25810:5;:21;;;;:::i;:::-;25809:57;;;;:::i;:::-;:112;;;;:::i;:::-;25788:133;;25992:10;25987:2;25960:8;25969:14;25960:24;;;;;;;;;;:::i;:::-;;;;;;;:29;;;;:::i;:::-;:42;;;;:::i;:::-;25928:4;:13;;25942:14;25928:29;;;;;;;;;;:::i;:::-;;;;;;;;:74;;;;26063:2;26038:8;26047:12;26038:22;;;;;;;;;;:::i;:::-;;;;;;;:27;;;;:::i;:::-;26008:4;:13;;26022:12;26008:27;;;;;;;;;;:::i;:::-;;;;;;;;;;:57;26075:15;;26071:112;;26166:10;26133:4;:14;;26148;26133:30;;;;;;;;;;:::i;:::-;;;;;;;;;:43;;;;:::i;:::-;26100:4;:14;;26115;26100:30;;;;;;;;;;:::i;:::-;;;;;;;;;;:76;26071:112;26197:16;26216:4;:17;;26234:14;26216:33;;;;;;;;;;:::i;:::-;;;;;;;;;;;26271:31;;-1:-1:-1;;;26271:31:109;;26291:10;26271:31;;;15451:51:181;-1:-1:-1;;;;;26216:33:109;;;;-1:-1:-1;26216:33:109;;26271:19;;15424:18:181;;26271:31:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26265:2;:37;;26257:67;;;;-1:-1:-1;;;26257:67:109;;22684:2:181;26257:67:109;;;22666:21:181;22723:2;22703:18;;;22696:30;-1:-1:-1;;;22742:18:181;;;22735:47;22799:18;;26257:67:109;22482:341:181;26257:67:109;26369:54;26408:9;26420:2;26369:30;:54::i;:::-;26189:241;26436:88;26475:4;:17;;26493:12;26475:31;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;26475:31:109;26509:10;26521:2;26436:30;:88::i;:::-;26536:59;;;23055:25:181;;;23111:2;23096:18;;23089:34;;;23171:4;23159:17;;;23139:18;;;23132:45;;;;23213:17;;;23208:2;23193:18;;23186:45;26546:10:109;;26536:59;;23042:3:181;23027:19;26536:59:109;;;;;;;;-1:-1:-1;26609:2:109;;25350:1266;-1:-1:-1;;;;;;;;25350:1266:109:o;38486:360::-;38566:15;38547:4;:16;;;:34;38539:70;;;;-1:-1:-1;;;38539:70:109;;23444:2:181;38539:70:109;;;23426:21:181;23483:2;23463:18;;;23456:30;23522:25;23502:18;;;23495:53;23565:18;;38539:70:109;23242:347:181;38539:70:109;38616:16;38635:18;38648:4;38635:12;:18::i;:::-;38659:24;;;38689:12;;;:23;;;38738:15;38718:17;;;:35;;;38759:16;;;:34;;;38805:36;;38616:37;;-1:-1:-1;38805:36:109;;;;38616:37;23768:25:181;;23824:2;23809:18;;23802:34;23756:2;23741:18;;23594:248;23749:1193:109;23893:7;23916:16;23935:4;:17;;23953:14;23935:33;;;;;;;;;;:::i;:::-;;;;;;;;;;;23990:31;;-1:-1:-1;;;23990:31:109;;24010:10;23990:31;;;15451:51:181;-1:-1:-1;;;;;23935:33:109;;;;-1:-1:-1;23935:33:109;;23990:19;;15424:18:181;;23990:31:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23984:2;:37;;23976:72;;;;-1:-1:-1;;;23976:72:109;;24049:2:181;23976:72:109;;;24031:21:181;24088:2;24068:18;;;24061:30;-1:-1:-1;;;24107:18:181;;;24100:52;24169:18;;23976:72:109;23847:346:181;23976:72:109;24093:54;24132:9;24144:2;24093:30;:54::i;:::-;23908:246;24160:10;24176:13;24195:25;24223:4;:13;;24195:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24256:64;24271:4;24277:14;24293:12;24307:2;24311:8;24256:14;:64::i;:::-;24242:78;;-1:-1:-1;24242:78:109;-1:-1:-1;24334:11:109;;;;24326:34;;;;-1:-1:-1;;;24326:34:109;;24400:2:181;24326:34:109;;;24382:21:181;24439:2;24419:18;;;24412:30;-1:-1:-1;;;24458:18:181;;;24451:40;24508:18;;24326:34:109;24198:334:181;24326:34:109;24367:18;24454:4;:30;;24485:12;24454:44;;;;;;;;;;:::i;:::-;;;;;;;;;3443:4:104;24397::109;:13;;;24389:5;:21;;;;:::i;:::-;24388:57;;;;:::i;:::-;:110;;;;:::i;:::-;24367:131;;24564:2;24537:8;24546:14;24537:24;;;;;;;;;;:::i;:::-;;;;;;;:29;;;;:::i;:::-;24505:4;:13;;24519:14;24505:29;;;;;;;;;;:::i;:::-;;;;;;;;:61;;;;24632:10;24627:2;24602:8;24611:12;24602:22;;;;;;;;;;:::i;:::-;;;;;;;:27;;;;:::i;:::-;:40;;;;:::i;:::-;24572:4;:13;;24586:12;24572:27;;;;;;;;;;:::i;:::-;;;;;;;;;;:70;24652:15;;24648:108;;24739:10;24708:4;:14;;24723:12;24708:28;;;;;;;;;;:::i;:::-;;;;;;;;;:41;;;;:::i;:::-;24677:4;:14;;24692:12;24677:28;;;;;;;;;;:::i;:::-;;;;;;;;;;:72;24648:108;24762:88;24801:4;:17;;24819:12;24801:31;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;24801:31:109;24835:10;24847:2;24762:30;:88::i;:::-;24862:59;;;23055:25:181;;;23111:2;23096:18;;23089:34;;;23171:4;23159:17;;;23139:18;;;23132:45;;;;23213:17;;;23208:2;23193:18;;23186:45;24872:10:109;;24862:59;;23042:3:181;23027:19;24862:59:109;22828:409:181;3928:108:109;3991:7;4013:18;4026:4;4013:12;:18::i;37283:1025::-;4750:6:104;37414:4:109;:17;;;:44;;;;:::i;:::-;37395:15;:63;;37387:107;;;;-1:-1:-1;;;37387:107:109;;24739:2:181;37387:107:109;;;24721:21:181;24778:2;24758:18;;;24751:30;24817:33;24797:18;;;24790:61;24868:18;;37387:107:109;24537:355:181;37387:107:109;37523:41;4698:7:104;37523:15:109;:41;:::i;:::-;37508:11;:56;;37500:91;;;;-1:-1:-1;;;37500:91:109;;25099:2:181;37500:91:109;;;25081:21:181;25138:2;25118:18;;;25111:30;-1:-1:-1;;;25157:18:181;;;25150:52;25219:18;;37500:91:109;24897:346:181;37500:91:109;37605:13;;;;;:43;;;4605:5:104;37622:8:109;:26;37605:43;37597:98;;;;-1:-1:-1;;;37597:98:109;;25450:2:181;37597:98:109;;;25432:21:181;25489:2;25469:18;;;25462:30;25528:34;25508:18;;;25501:62;-1:-1:-1;;;25579:18:181;;;25572:40;25629:19;;37597:98:109;25248:406:181;37597:98:109;37702:23;37728:18;37741:4;37728:12;:18::i;:::-;37702:44;-1:-1:-1;37752:22:109;37777:32;4566:3:104;37777:8:109;:32;:::i;:::-;37752:57;;37837:15;37820:14;:32;37816:258;;;37913:15;37870:39;4653:1:104;37870:14:109;:39;:::i;:::-;:58;;37862:92;;;;-1:-1:-1;;;37862:92:109;;25861:2:181;37862:92:109;;;25843:21:181;25900:2;25880:18;;;25873:30;-1:-1:-1;;;25919:18:181;;;25912:51;25980:18;;37862:92:109;25659:345:181;37862:92:109;37816:258;;;38001:40;4653:1:104;38001:15:109;:40;:::i;:::-;37983:14;:58;;37975:92;;;;-1:-1:-1;;;37975:92:109;;26211:2:181;37975:92:109;;;26193:21:181;26250:2;26230:18;;;26223:30;-1:-1:-1;;;26269:18:181;;;26262:51;26330:18;;37975:92:109;26009:345:181;37975:92:109;38080:31;;;38117:12;;;:29;;;38172:15;38152:17;;;:35;;;38193:16;;;:30;;;38235:68;;;26590:25:181;;;26646:2;26631:18;;26624:34;;;26674:18;;;26667:34;;;;26732:2;26717:18;;26710:34;;;38235:68:109;;;;;;26577:3:181;38235:68:109;;;37381:927;;37283:1025;;;:::o;4244:551::-;4345:16;;;;4408:12;;;;4478:13;;4408:12;;4345:16;4542:14;;;;;;:38;;;4578:2;4560:15;:20;4542:38;4538:253;;;4590:10;4603:4;:17;;;4590:30;;4773:2;4769;4765:11;4758:2;4745:11;4741:20;4731:8;4727:35;4712:11;4708:2;4704:20;4700:2;4696:29;4692:71;4688:89;4676:101;;4666:119;4538:253;4326:469;;4244:551;;;:::o;12182:464::-;12342:15;;12384:27;;12296:16;;12342:15;12371:40;;12363:73;;;;-1:-1:-1;;;12363:73:109;;26957:2:181;12363:73:109;;;26939:21:181;26996:2;26976:18;;;26969:30;-1:-1:-1;;;27015:18:181;;;27008:50;27075:18;;12363:73:109;26755:344:181;12363:73:109;12442:19;12478:9;-1:-1:-1;;;;;12464:24:109;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12464:24:109;;12442:46;;12499:9;12494:133;12514:9;12510:1;:13;12494:133;;;12557:20;12578:1;12557:23;;;;;;;;:::i;:::-;;;;;;;12543:8;12552:1;12543:11;;;;;;;;:::i;:::-;;;;;;;:37;;;;:::i;:::-;12535:2;12538:1;12535:5;;;;;;;;:::i;:::-;;;;;;;;;;:45;12609:3;;12494:133;;;-1:-1:-1;12639:2:109;12182:464;-1:-1:-1;;;;12182:464:109:o;17564:712::-;17735:10;17747:13;17768:28;17799:4;:30;;17768:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17835:19;17857:26;17861:8;17871:11;17857:3;:26::i;:::-;17835:48;;17914:2;:9;17897:14;:26;;;:54;;;;;17942:2;:9;17927:12;:24;;;17897:54;17889:85;;;;-1:-1:-1;;;17889:85:109;;;;;;;:::i;:::-;17980:9;18027:2;18030:14;18027:18;;;;;;;;;;:::i;:::-;;;;;;;17997:11;18009:14;17997:27;;;;;;;;;;:::i;:::-;;;;;;;17992:2;:32;;;;:::i;:::-;:53;;;;:::i;:::-;17980:65;;18051:9;18063:61;18068:18;18081:4;18068:12;:18::i;:::-;18088:14;18104:12;18118:1;18121:2;18063:4;:61::i;:::-;18051:73;;18158:1;18154;18135:2;18138:12;18135:16;;;;;;;;;;:::i;:::-;;;;;;;:20;;;;:::i;:::-;:24;;;;:::i;:::-;18130:29;;3443:4:104;18179::109;:12;;;18174:2;:17;;;;:::i;:::-;18173:47;;;;:::i;:::-;18165:55;;18246:11;18258:12;18246:25;;;;;;;;;;:::i;:::-;;;;;;;18237:5;18232:2;:10;;;;:::i;:::-;18231:40;;;;:::i;:::-;18226:45;;17762:514;;;;17564:712;;;;;;;;:::o;12894:141::-;12949:16;12980:50;12984:4;:13;;12980:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12999:4;:30;;12980:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:3;:50::i;23142:153::-;23223:7;23271:13;23283:1;23271:9;:13;:::i;:::-;23270:19;;23288:1;23270:19;:::i;:::-;23246;23256:9;23246:7;:19;:::i;:::-;23245:45;;;;:::i;2052:843:102:-;2182:7;2193:1;2182:12;2178:39;;2052:843;;:::o;2178:39::-;-1:-1:-1;;;;;2274:20:102;;2270:105;;2311:57;;-1:-1:-1;;;2311:57:102;;;;;;;;;;;2270:105;2525:30;;-1:-1:-1;;;2525:30:102;;2549:4;2525:30;;;15451:51:181;2419:6:102;;2381:20;;-1:-1:-1;;;;;2525:15:102;;;;;15424:18:181;;2525:30:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2506:49;-1:-1:-1;2597:58:102;-1:-1:-1;;;;;2597:22:102;;2620:10;2640:4;2647:7;2597:22;:58::i;:::-;2756:30;;-1:-1:-1;;;2756:30:102;;2780:4;2756:30;;;15451:51:181;2801:7:102;;2789:8;;-1:-1:-1;;;;;2756:15:102;;;;;15424:18:181;;2756:30:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;;;:::i;:::-;:52;2752:139;;2825:59;;-1:-1:-1;;;2825:59:102;;;;;;;;;;;911:140:107;976:7;999:1;995;:5;991:38;;;1017:5;1021:1;1017;:5;:::i;:::-;1010:12;;;;991:38;1041:5;1045:1;1041;:5;:::i;589:130::-;651:4;690:5;671:16;682:1;685;671:10;:16::i;:::-;:24;;589:130;-1:-1:-1;;;589:130:107:o;20291:488:109:-;20429:16;20471:11;20461:6;:21;;20453:53;;;;-1:-1:-1;;;20453:53:109;;27306:2:181;20453:53:109;;;27288:21:181;27345:2;27325:18;;;27318:30;-1:-1:-1;;;27364:18:181;;;27357:49;27423:18;;20453:53:109;27104:343:181;20453:53:109;20535:15;;20513:19;20535:15;-1:-1:-1;;;;;20583:26:109;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20583:26:109;;20556:53;;20621:9;20616:139;20636:11;20632:1;:15;20616:139;;;20697:11;20687:6;20673:8;20682:1;20673:11;;;;;;;;:::i;:::-;;;;;;;:20;;;;:::i;:::-;20672:36;;;;:::i;:::-;20659:7;20667:1;20659:10;;;;;;;;:::i;:::-;;;;;;;;;;:49;20737:3;;20616:139;;3194:444:102;3353:7;3364:1;3353:12;3349:39;;3194:444;;;:::o;3349:39::-;-1:-1:-1;;;;;3445:20:102;;3441:76;;3474:43;;-1:-1:-1;;;3474:43:102;;;;;;;;;;;3441:76;3573:60;3611:6;3620:3;3625:7;3573:22;:60::i;:::-;3194:444;;;:::o;5491:509:109:-;5648:7;5657;5672:10;5688:12;5706:16;5752:71;5780:4;5786:10;5798:11;5811;5752:27;:71::i;:::-;5729:94;;;;;;;;;;;;5879:17;5964:2;5919:4;:30;;5950:10;5919:42;;;;;;;;;;:::i;:::-;;;;;;;;;5911:4;5900:8;:15;;;;:::i;:::-;5899:62;;;;:::i;:::-;:67;;;;:::i;:::-;5981:2;;;;-1:-1:-1;5491:509:109;;-1:-1:-1;;;;;;;;5491:509:109:o;18942:835::-;19116:10;19128:13;19175:12;19157:30;;:14;:30;;;19149:66;;;;-1:-1:-1;;;19149:66:109;;18848:2:181;19149:66:109;;;18830:21:181;18887:2;18867:18;;;18860:30;-1:-1:-1;;;18906:18:181;;;18899:53;18969:18;;19149:66:109;18646:347:181;19149:66:109;19221:28;19252:4;:30;;19221:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19288:19;19310:26;19314:8;19324:11;19310:3;:26::i;:::-;19288:48;;19367:2;:9;19350:14;:26;;;:54;;;;;19395:2;:9;19380:12;:24;;;19350:54;19342:85;;;;-1:-1:-1;;;19342:85:109;;;;;;;:::i;:::-;19434:9;19446:18;19459:4;19446:12;:18::i;:::-;19434:30;;19470:10;19483:11;19488:2;19492:1;19483:4;:11::i;:::-;19470:24;;19545:11;19557:12;19545:25;;;;;;;;;;:::i;:::-;;;;;;;19540:2;:30;;;;:::i;:::-;19520:2;19523:12;19520:16;;;;;;;;;;:::i;:::-;;;;;;;:51;;;;:::i;:::-;19501:2;19504:12;19501:16;;;;;;;;;;:::i;:::-;;;;;;:70;;;;;19577:9;19589:32;19595:1;19598:14;19614:2;19618;19589:5;:32::i;:::-;19577:44;;19636:2;19639:14;19636:18;;;;;;;;;;:::i;:::-;;;;;;;19632:1;:22;;;;:::i;:::-;:26;;19657:1;19632:26;:::i;:::-;19627:31;;3443:4:104;19678::109;:12;;;19673:2;:17;;;;:::i;:::-;19672:47;;;;:::i;:::-;19664:55;;19745:11;19757:14;19745:27;;;;;;;;;;:::i;:::-;;;;;;;19736:5;19731:2;:10;;;;:::i;:::-;19730:42;;;;:::i;:::-;19725:47;;19143:634;;;;;18942:835;;;;;;;;:::o;974:241:56:-;1139:68;;-1:-1:-1;;;;;27710:15:181;;;1139:68:56;;;27692:34:181;27762:15;;27742:18;;;27735:43;27794:18;;;27787:34;;;1112:96:56;;1132:5;;-1:-1:-1;;;1162:27:56;27627:18:181;;1139:68:56;;;;-1:-1:-1;;1139:68:56;;;;;;;;;;;;;;-1:-1:-1;;;;;1139:68:56;-1:-1:-1;;;;;;1139:68:56;;;;;;;;;;1112:19;:96::i;763:205::-;902:58;;-1:-1:-1;;;;;13461:32:181;;902:58:56;;;13443:51:181;13510:18;;;13503:34;;;875:86:56;;895:5;;-1:-1:-1;;;925:23:56;13416:18:181;;902:58:56;13269:274:181;3747:706:56;4166:23;4192:69;4220:4;4192:69;;;;;;;;;;;;;;;;;4200:5;-1:-1:-1;;;;;4192:27:56;;;:69;;;;;:::i;:::-;4275:17;;4166:95;;-1:-1:-1;4275:21:56;4271:176;;4370:10;4359:30;;;;;;;;;;;;:::i;:::-;4351:85;;;;-1:-1:-1;;;4351:85:56;;28284:2:181;4351:85:56;;;28266:21:181;28323:2;28303:18;;;28296:30;28362:34;28342:18;;;28335:62;-1:-1:-1;;;28413:18:181;;;28406:40;28463:19;;4351:85:56;28082:406:181;3873:223:57;4006:12;4037:52;4059:6;4067:4;4073:1;4076:12;4006;5241;5255:23;5282:6;-1:-1:-1;;;;;5282:11:57;5301:5;5308:4;5282:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5240:73;;;;5330:69;5357:6;5365:7;5374:10;5386:12;5330:26;:69::i;:::-;5323:76;4960:446;-1:-1:-1;;;;;;;4960:446:57:o;7466:628::-;7646:12;7674:7;7670:418;;;7701:10;:17;7722:1;7701:22;7697:286;;-1:-1:-1;;;;;1465:19:57;;;7908:60;;;;-1:-1:-1;;;7908:60:57;;29649:2:181;7908:60:57;;;29631:21:181;29688:2;29668:18;;;29661:30;29727:31;29707:18;;;29700:59;29776:18;;7908:60:57;29447:353:181;7908:60:57;-1:-1:-1;8003:10:57;7996:17;;7670:418;8044:33;8052:10;8064:12;8775:17;;:21;8771:379;;9003:10;8997:17;9059:15;9046:10;9042:2;9038:19;9031:44;8771:379;9126:12;9119:20;;-1:-1:-1;;;9119:20:57;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:272:181;106:6;114;167:2;155:9;146:7;142:23;138:32;135:52;;;183:1;180;173:12;135:52;-1:-1:-1;;206:23:181;;;276:2;261:18;;;248:32;;-1:-1:-1;14:272:181:o;481:204::-;564:6;617:2;605:9;596:7;592:23;588:32;585:52;;;633:1;630;623:12;585:52;-1:-1:-1;656:23:181;;481:204;-1:-1:-1;481:204:181:o;690:367::-;753:8;763:6;817:3;810:4;802:6;798:17;794:27;784:55;;835:1;832;825:12;784:55;-1:-1:-1;858:20:181;;-1:-1:-1;;;;;890:30:181;;887:50;;;933:1;930;923:12;887:50;970:4;962:6;958:17;946:29;;1030:3;1023:4;1013:6;1010:1;1006:14;998:6;994:27;990:38;987:47;984:67;;;1047:1;1044;1037:12;984:67;690:367;;;;;:::o;1062:118::-;1148:5;1141:13;1134:21;1127:5;1124:32;1114:60;;1170:1;1167;1160:12;1114:60;1062:118;:::o;1185:658::-;1310:6;1318;1326;1334;1387:2;1375:9;1366:7;1362:23;1358:32;1355:52;;;1403:1;1400;1393:12;1355:52;1439:9;1426:23;1416:33;;1500:2;1489:9;1485:18;1472:32;-1:-1:-1;;;;;1519:6:181;1516:30;1513:50;;;1559:1;1556;1549:12;1513:50;1598:70;1660:7;1651:6;1640:9;1636:22;1598:70;:::i;:::-;1687:8;;-1:-1:-1;1572:96:181;-1:-1:-1;;1772:2:181;1757:18;;1744:32;1785:28;1744:32;1785:28;:::i;:::-;1185:658;;;;-1:-1:-1;1185:658:181;;-1:-1:-1;;1185:658:181:o;1848:156::-;1914:20;;1974:4;1963:16;;1953:27;;1943:55;;1994:1;1991;1984:12;1943:55;1848:156;;;:::o;2009:413::-;2115:6;2123;2131;2139;2192:3;2180:9;2171:7;2167:23;2163:33;2160:53;;;2209:1;2206;2199:12;2160:53;2245:9;2232:23;2222:33;;2274:36;2306:2;2295:9;2291:18;2274:36;:::i;:::-;2264:46;;2329:36;2361:2;2350:9;2346:18;2329:36;:::i;:::-;2009:413;;;;-1:-1:-1;2319:46:181;;2412:2;2397:18;2384:32;;-1:-1:-1;;2009:413:181:o;2427:411::-;2535:6;2543;2551;2559;2612:3;2600:9;2591:7;2587:23;2583:33;2580:53;;;2629:1;2626;2619:12;2580:53;2665:9;2652:23;2642:33;;2694:36;2726:2;2715:9;2711:18;2694:36;:::i;:::-;2427:411;;2684:46;;-1:-1:-1;;;;2777:2:181;2762:18;;2749:32;;2828:2;2813:18;2800:32;;2427:411::o;3175:127::-;3236:10;3231:3;3227:20;3224:1;3217:31;3267:4;3264:1;3257:15;3291:4;3288:1;3281:15;3307:902;3361:5;3414:3;3407:4;3399:6;3395:17;3391:27;3381:55;;3432:1;3429;3422:12;3381:55;3468:6;3455:20;3494:4;-1:-1:-1;;;;;3554:2:181;3550;3547:10;3544:36;;;3560:18;;:::i;:::-;3606:2;3603:1;3599:10;3638:2;3632:9;3701:2;3697:7;3692:2;3688;3684:11;3680:25;3672:6;3668:38;3756:6;3744:10;3741:22;3736:2;3724:10;3721:18;3718:46;3715:72;;;3767:18;;:::i;:::-;3803:2;3796:22;3853:18;;;3929:15;;;3925:24;;;3887:15;;;;-1:-1:-1;3961:15:181;;;3958:35;;;3989:1;3986;3979:12;3958:35;4025:2;4017:6;4013:15;4002:26;;4037:142;4053:6;4048:3;4045:15;4037:142;;;4119:17;;4107:30;;4157:12;;;;4070;;;;4037:142;;4214:508;4340:6;4348;4356;4409:2;4397:9;4388:7;4384:23;4380:32;4377:52;;;4425:1;4422;4415:12;4377:52;4461:9;4448:23;4438:33;;4522:2;4511:9;4507:18;4494:32;-1:-1:-1;;;;;4541:6:181;4538:30;4535:50;;;4581:1;4578;4571:12;4535:50;4604:61;4657:7;4648:6;4637:9;4633:22;4604:61;:::i;:::-;4594:71;;;4712:2;4701:9;4697:18;4684:32;4674:42;;4214:508;;;;;:::o;4727:555::-;4836:6;4844;4852;4860;4913:3;4901:9;4892:7;4888:23;4884:33;4881:53;;;4930:1;4927;4920:12;4881:53;4966:9;4953:23;4943:33;;4995:36;5027:2;5016:9;5012:18;4995:36;:::i;:::-;4985:46;;5082:2;5071:9;5067:18;5054:32;-1:-1:-1;;;;;5101:6:181;5098:30;5095:50;;;5141:1;5138;5131:12;5095:50;5164:61;5217:7;5208:6;5197:9;5193:22;5164:61;:::i;:::-;4727:555;;;;-1:-1:-1;5154:71:181;;5272:2;5257:18;5244:32;;-1:-1:-1;;;4727:555:181:o;5287:597::-;5415:6;5423;5431;5439;5492:2;5480:9;5471:7;5467:23;5463:32;5460:52;;;5508:1;5505;5498:12;5460:52;5544:9;5531:23;5521:33;;5601:2;5590:9;5586:18;5573:32;5563:42;;5656:2;5645:9;5641:18;5628:32;-1:-1:-1;;;;;5675:6:181;5672:30;5669:50;;;5715:1;5712;5705:12;5669:50;5754:70;5816:7;5807:6;5796:9;5792:22;5754:70;:::i;:::-;5287:597;;;;-1:-1:-1;5843:8:181;-1:-1:-1;;;;5287:597:181:o;5889:640::-;6068:2;6120:21;;;6190:13;;6093:18;;;6212:22;;;6039:4;;6068:2;6291:15;;;;6265:2;6250:18;;;6039:4;6334:169;6348:6;6345:1;6342:13;6334:169;;;6409:13;;6397:26;;6478:15;;;;6443:12;;;;6370:1;6363:9;6334:169;;;-1:-1:-1;6520:3:181;;5889:640;-1:-1:-1;;;;;;5889:640:181:o;6534:416::-;6627:6;6635;6688:2;6676:9;6667:7;6663:23;6659:32;6656:52;;;6704:1;6701;6694:12;6656:52;6744:9;6731:23;-1:-1:-1;;;;;6769:6:181;6766:30;6763:50;;;6809:1;6806;6799:12;6763:50;6832:61;6885:7;6876:6;6865:9;6861:22;6832:61;:::i;:::-;6822:71;6940:2;6925:18;;;;6912:32;;-1:-1:-1;;;;6534:416:181:o;6955:626::-;7071:6;7079;7087;7095;7103;7156:3;7144:9;7135:7;7131:23;7127:33;7124:53;;;7173:1;7170;7163:12;7124:53;7209:9;7196:23;7186:33;;7238:36;7270:2;7259:9;7255:18;7238:36;:::i;:::-;7228:46;;7293:36;7325:2;7314:9;7310:18;7293:36;:::i;:::-;7283:46;;7376:2;7365:9;7361:18;7348:32;7338:42;;7431:3;7420:9;7416:19;7403:33;-1:-1:-1;;;;;7451:6:181;7448:30;7445:50;;;7491:1;7488;7481:12;7445:50;7514:61;7567:7;7558:6;7547:9;7543:22;7514:61;:::i;:::-;7504:71;;;6955:626;;;;;;;;:::o;7586:342::-;7685:6;7693;7701;7754:2;7742:9;7733:7;7729:23;7725:32;7722:52;;;7770:1;7767;7760:12;7722:52;7806:9;7793:23;7783:33;;7863:2;7852:9;7848:18;7835:32;7825:42;;7886:36;7918:2;7907:9;7903:18;7886:36;:::i;:::-;7876:46;;7586:342;;;;;:::o;7933:378::-;8025:6;8033;8086:2;8074:9;8065:7;8061:23;8057:32;8054:52;;;8102:1;8099;8092:12;8054:52;8125:23;;;-1:-1:-1;8198:2:181;8183:18;;8170:32;-1:-1:-1;;;;;8231:31:181;;8221:42;;8211:70;;8277:1;8274;8267:12;8211:70;8300:5;8290:15;;;7933:378;;;;;:::o;8316:411::-;8424:6;8432;8440;8448;8501:3;8489:9;8480:7;8476:23;8472:33;8469:53;;;8518:1;8515;8508:12;8469:53;8554:9;8541:23;8531:33;;8611:2;8600:9;8596:18;8583:32;8573:42;;8634:36;8666:2;8655:9;8651:18;8634:36;:::i;8732:482::-;8847:6;8855;8863;8871;8879;8932:3;8920:9;8911:7;8907:23;8903:33;8900:53;;;8949:1;8946;8939:12;8900:53;8985:9;8972:23;8962:33;;9014:36;9046:2;9035:9;9031:18;9014:36;:::i;:::-;9004:46;;9069:36;9101:2;9090:9;9086:18;9069:36;:::i;:::-;8732:482;;;;-1:-1:-1;9059:46:181;;9152:2;9137:18;;9124:32;;-1:-1:-1;9203:3:181;9188:19;9175:33;;8732:482;-1:-1:-1;;8732:482:181:o;9219:340::-;9320:6;9328;9336;9389:2;9377:9;9368:7;9364:23;9360:32;9357:52;;;9405:1;9402;9395:12;9357:52;-1:-1:-1;;9428:23:181;;;9498:2;9483:18;;9470:32;;-1:-1:-1;9549:2:181;9534:18;;;9521:32;;9219:340;-1:-1:-1;9219:340:181:o;9564:127::-;9625:10;9620:3;9616:20;9613:1;9606:31;9656:4;9653:1;9646:15;9680:4;9677:1;9670:15;9696:125;9761:9;;;9782:10;;;9779:36;;;9795:18;;:::i;10344:342::-;10546:2;10528:21;;;10585:2;10565:18;;;10558:30;-1:-1:-1;;;10619:2:181;10604:18;;10597:48;10677:2;10662:18;;10344:342::o;10691:127::-;10752:10;10747:3;10743:20;10740:1;10733:31;10783:4;10780:1;10773:15;10807:4;10804:1;10797:15;10823:217;10863:1;10889;10879:132;;10933:10;10928:3;10924:20;10921:1;10914:31;10968:4;10965:1;10958:15;10996:4;10993:1;10986:15;10879:132;-1:-1:-1;11025:9:181;;10823:217::o;11045:128::-;11112:9;;;11133:11;;;11130:37;;;11147:18;;:::i;11178:184::-;11248:6;11301:2;11289:9;11280:7;11276:23;11272:32;11269:52;;;11317:1;11314;11307:12;11269:52;-1:-1:-1;11340:16:181;;11178:184;-1:-1:-1;11178:184:181:o;11367:168::-;11440:9;;;11471;;11488:15;;;11482:22;;11468:37;11458:71;;11509:18;;:::i;13548:435::-;13601:3;13639:5;13633:12;13666:6;13661:3;13654:19;13692:4;13721:2;13716:3;13712:12;13705:19;;13758:2;13751:5;13747:14;13779:1;13789:169;13803:6;13800:1;13797:13;13789:169;;;13864:13;;13852:26;;13898:12;;;;13933:15;;;;13825:1;13818:9;13789:169;;;-1:-1:-1;13974:3:181;;13548:435;-1:-1:-1;;;;;13548:435:181:o;13988:609::-;14301:3;14290:9;14283:22;14264:4;14328:57;14380:3;14369:9;14365:19;14357:6;14328:57;:::i;:::-;14433:9;14425:6;14421:22;14416:2;14405:9;14401:18;14394:50;14461:44;14498:6;14490;14461:44;:::i;:::-;14536:2;14521:18;;14514:34;;;;-1:-1:-1;;14579:2:181;14564:18;14557:34;14453:52;13988:609;-1:-1:-1;;13988:609:181:o;15513:337::-;15715:2;15697:21;;;15754:2;15734:18;;;15727:30;-1:-1:-1;;;15788:2:181;15773:18;;15766:43;15841:2;15826:18;;15513:337::o;16558:332::-;16765:2;16754:9;16747:21;16728:4;16785:56;16837:2;16826:9;16822:18;16814:6;16785:56;:::i;:::-;16777:64;;16877:6;16872:2;16861:9;16857:18;16850:34;16558:332;;;;;:::o;19342:422::-;19431:1;19474:5;19431:1;19488:270;19509:7;19499:8;19496:21;19488:270;;;19568:4;19564:1;19560:6;19556:17;19550:4;19547:27;19544:53;;;19577:18;;:::i;:::-;19627:7;19617:8;19613:22;19610:55;;;19647:16;;;;19610:55;19726:22;;;;19686:15;;;;19488:270;;;19492:3;19342:422;;;;;:::o;19769:806::-;19818:5;19848:8;19838:80;;-1:-1:-1;19889:1:181;19903:5;;19838:80;19937:4;19927:76;;-1:-1:-1;19974:1:181;19988:5;;19927:76;20019:4;20037:1;20032:59;;;;20105:1;20100:130;;;;20012:218;;20032:59;20062:1;20053:10;;20076:5;;;20100:130;20137:3;20127:8;20124:17;20121:43;;;20144:18;;:::i;:::-;-1:-1:-1;;20200:1:181;20186:16;;20215:5;;20012:218;;20314:2;20304:8;20301:16;20295:3;20289:4;20286:13;20282:36;20276:2;20266:8;20263:16;20258:2;20252:4;20249:12;20245:35;20242:77;20239:159;;;-1:-1:-1;20351:19:181;;;20383:5;;20239:159;20430:34;20455:8;20449:4;20430:34;:::i;:::-;20500:6;20496:1;20492:6;20488:19;20479:7;20476:32;20473:58;;;20511:18;;:::i;:::-;20549:20;;19769:806;-1:-1:-1;;;19769:806:181:o;20580:131::-;20640:5;20669:36;20696:8;20690:4;20669:36;:::i;27832:245::-;27899:6;27952:2;27940:9;27931:7;27927:23;27923:32;27920:52;;;27968:1;27965;27958:12;27920:52;28000:9;27994:16;28019:28;28041:5;28019:28;:::i;28900:250::-;28985:1;28995:113;29009:6;29006:1;29003:13;28995:113;;;29085:11;;;29079:18;29066:11;;;29059:39;29031:2;29024:10;28995:113;;;-1:-1:-1;;29142:1:181;29124:16;;29117:27;28900:250::o;29155:287::-;29284:3;29322:6;29316:13;29338:66;29397:6;29392:3;29385:4;29377:6;29373:17;29338:66;:::i;:::-;29420:16;;;;;29155:287;-1:-1:-1;;29155:287:181:o;29805:396::-;29954:2;29943:9;29936:21;29917:4;29986:6;29980:13;30029:6;30024:2;30013:9;30009:18;30002:34;30045:79;30117:6;30112:2;30101:9;30097:18;30092:2;30084:6;30080:15;30045:79;:::i;:::-;30185:2;30164:15;-1:-1:-1;;30160:29:181;30145:45;;;;30192:2;30141:54;;29805:396;-1:-1:-1;;29805:396:181:o"},"gasEstimates":{"creation":{"codeDepositCost":"3796400","executionCost":"4335","totalCost":"3800735"},"external":{"addLiquidity(SwapUtilsExternal.Swap storage,uint256[],uint256)":"infinite","calculateRemoveLiquidity(SwapUtilsExternal.Swap storage,uint256)":"infinite","calculateSwap(SwapUtilsExternal.Swap storage,uint8,uint8,uint256)":"infinite","calculateSwapInv(SwapUtilsExternal.Swap storage,uint8,uint8,uint256)":"infinite","calculateTokenAmount(SwapUtilsExternal.Swap storage,uint256[],bool)":"infinite","calculateWithdrawOneToken(SwapUtilsExternal.Swap storage,uint256,uint8)":"infinite","calculateWithdrawOneTokenDY(SwapUtilsExternal.Swap storage,uint8,uint256,uint256)":"infinite","getA(SwapUtilsExternal.Swap storage)":"8996","getAPrecise(SwapUtilsExternal.Swap storage)":"8975","getAdminBalance(SwapUtilsExternal.Swap storage,uint256)":"6760","getD(uint256[],uint256)":"infinite","getVirtualPrice(SwapUtilsExternal.Swap storage)":"infinite","getY(uint256,uint8,uint8,uint256,uint256[])":"infinite","getYD(uint256,uint8,uint256[],uint256)":"infinite","rampA(SwapUtilsExternal.Swap storage,uint256,uint256)":"infinite","removeLiquidity(SwapUtilsExternal.Swap storage,uint256,uint256[])":"infinite","removeLiquidityImbalance(SwapUtilsExternal.Swap storage,uint256[],uint256)":"infinite","removeLiquidityOneToken(SwapUtilsExternal.Swap storage,uint256,uint8,uint256)":"infinite","setAdminFee(SwapUtilsExternal.Swap storage,uint256)":"23549","setSwapFee(SwapUtilsExternal.Swap storage,uint256)":"23559","stopRampA(SwapUtilsExternal.Swap storage)":"100839","swap(SwapUtilsExternal.Swap storage,uint8,uint8,uint256,uint256)":"infinite","swapOut(SwapUtilsExternal.Swap storage,uint8,uint8,uint256,uint256)":"infinite","withdrawAdminFees(SwapUtilsExternal.Swap storage,address)":"infinite"},"internal":{"_calculateRemoveLiquidity(uint256[] memory,uint256,uint256)":"infinite","_calculateSwap(struct SwapUtilsExternal.Swap storage pointer,uint8,uint8,uint256,uint256[] memory)":"infinite","_calculateSwapInv(struct SwapUtilsExternal.Swap storage pointer,uint8,uint8,uint256,uint256[] memory)":"infinite","_calculateWithdrawOneToken(struct SwapUtilsExternal.Swap storage pointer,uint256,uint8,uint256)":"infinite","_feePerToken(uint256,uint256)":"infinite","_getAPrecise(struct SwapUtilsExternal.Swap storage pointer)":"8583","_xp(struct SwapUtilsExternal.Swap storage pointer)":"infinite","_xp(uint256[] memory,uint256[] memory)":"infinite"}},"methodIdentifiers":{"addLiquidity(SwapUtilsExternal.Swap storage,uint256[],uint256)":"67487f2a","calculateRemoveLiquidity(SwapUtilsExternal.Swap storage,uint256)":"8cc122bb","calculateSwap(SwapUtilsExternal.Swap storage,uint8,uint8,uint256)":"2f4998ad","calculateSwapInv(SwapUtilsExternal.Swap storage,uint8,uint8,uint256)":"b92fa35c","calculateTokenAmount(SwapUtilsExternal.Swap storage,uint256[],bool)":"22b2b607","calculateWithdrawOneToken(SwapUtilsExternal.Swap storage,uint256,uint8)":"84eeef27","calculateWithdrawOneTokenDY(SwapUtilsExternal.Swap storage,uint8,uint256,uint256)":"38e630de","getA(SwapUtilsExternal.Swap storage)":"22b1b5f6","getAPrecise(SwapUtilsExternal.Swap storage)":"f43dee53","getAdminBalance(SwapUtilsExternal.Swap storage,uint256)":"1ce9046f","getD(uint256[],uint256)":"76a3b67c","getVirtualPrice(SwapUtilsExternal.Swap storage)":"8be1e523","getY(uint256,uint8,uint8,uint256,uint256[])":"80ba0f2d","getYD(uint256,uint8,uint256[],uint256)":"6967280a","rampA(SwapUtilsExternal.Swap storage,uint256,uint256)":"fc784184","removeLiquidity(SwapUtilsExternal.Swap storage,uint256,uint256[])":"6fbb250c","removeLiquidityImbalance(SwapUtilsExternal.Swap storage,uint256[],uint256)":"77b83d30","removeLiquidityOneToken(SwapUtilsExternal.Swap storage,uint256,uint8,uint256)":"ae3feedc","setAdminFee(SwapUtilsExternal.Swap storage,uint256)":"08bbaa23","setSwapFee(SwapUtilsExternal.Swap storage,uint256)":"59d9996a","stopRampA(SwapUtilsExternal.Swap storage)":"e5b994c5","swap(SwapUtilsExternal.Swap storage,uint8,uint8,uint256,uint256)":"f2042939","swapOut(SwapUtilsExternal.Swap storage,uint8,uint8,uint256,uint256)":"e07805aa","withdrawAdminFees(SwapUtilsExternal.Swap storage,address)":"9cbd2406"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_feeOnTransferNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_nativeAssetNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleOutgoingAsset_notNative\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"fees\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"}],\"name\":\"AddLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newAdminFee\",\"type\":\"uint256\"}],\"name\":\"NewAdminFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSwapFee\",\"type\":\"uint256\"}],\"name\":\"NewSwapFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"futureTime\",\"type\":\"uint256\"}],\"name\":\"RampA\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"fees\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidityImbalance\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"boughtId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensBought\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidityOne\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"StopRampA\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensSold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensBought\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"soldId\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"boughtId\",\"type\":\"uint128\"}],\"name\":\"TokenSwap\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"xp\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"getD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"preciseA\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexFrom\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexTo\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"xp\",\"type\":\"uint256[]\"}],\"name\":\"getY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndex\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"xp\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"name\":\"getYD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contracts relying on this library must initialize SwapUtils.Swap struct then use this library for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins. Admin functions should be protected within contracts using this library.\",\"kind\":\"dev\",\"methods\":{\"addLiquidity(SwapUtilsExternal.Swap storage,uint256[],uint256)\":{\"params\":{\"amounts\":\"the amounts of each token to add, in their native precision\",\"minToMint\":\"the minimum LP tokens adding this amount of liquidity should mint, otherwise revert. Handy for front-running mitigation allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\",\"self\":\"Swap struct to read from and write to\"},\"returns\":{\"_0\":\"amount of LP token user received\"}},\"calculateRemoveLiquidity(SwapUtilsExternal.Swap storage,uint256)\":{\"params\":{\"amount\":\"the amount of LP tokens that would to be burned on withdrawal\"},\"returns\":{\"_0\":\"array of amounts of tokens user will receive\"}},\"calculateSwap(SwapUtilsExternal.Swap storage,uint8,uint8,uint256)\":{\"params\":{\"dx\":\"the number of tokens to sell. If the token charges a fee on transfers, use the amount that gets transferred after the fee.\",\"self\":\"Swap struct to read from\",\"tokenIndexFrom\":\"the token to sell\",\"tokenIndexTo\":\"the token to buy\"},\"returns\":{\"dy\":\"the number of tokens the user will get\"}},\"calculateSwapInv(SwapUtilsExternal.Swap storage,uint8,uint8,uint256)\":{\"params\":{\"dy\":\"the number of tokens to buy.\",\"self\":\"Swap struct to read from\",\"tokenIndexFrom\":\"the token to sell\",\"tokenIndexTo\":\"the token to buy\"},\"returns\":{\"dx\":\"the number of tokens the user have to transfer + fee\"}},\"calculateTokenAmount(SwapUtilsExternal.Swap storage,uint256[],bool)\":{\"details\":\"This shouldn't be used outside frontends for user estimates.\",\"params\":{\"amounts\":\"an array of token amounts to deposit or withdrawal, corresponding to pooledTokens. The amount should be in each pooled token's native precision. If a token charges a fee on transfers, use the amount that gets transferred after the fee.\",\"deposit\":\"whether this is a deposit or a withdrawal\",\"self\":\"Swap struct to read from\"},\"returns\":{\"_0\":\"if deposit was true, total amount of lp token that will be minted and if deposit was false, total amount of lp token that will be burned\"}},\"calculateWithdrawOneToken(SwapUtilsExternal.Swap storage,uint256,uint8)\":{\"params\":{\"self\":\"Swap struct to read from\",\"tokenAmount\":\"the amount to withdraw in the pool's precision\",\"tokenIndex\":\"which token will be withdrawn\"},\"returns\":{\"_0\":\"the amount of token user will receive\"}},\"calculateWithdrawOneTokenDY(SwapUtilsExternal.Swap storage,uint8,uint256,uint256)\":{\"params\":{\"self\":\"Swap struct to read from\",\"tokenAmount\":\"the amount to withdraw in the pools precision\",\"tokenIndex\":\"which token will be withdrawn\"},\"returns\":{\"_0\":\"the d and the new y after withdrawing one token\"}},\"getA(SwapUtilsExternal.Swap storage)\":{\"details\":\"See the StableSwap paper for details\",\"params\":{\"self\":\"Swap struct to read from\"},\"returns\":{\"_0\":\"A parameter\"}},\"getAPrecise(SwapUtilsExternal.Swap storage)\":{\"details\":\"See the StableSwap paper for details\",\"params\":{\"self\":\"Swap struct to read from\"},\"returns\":{\"_0\":\"A parameter in its raw precision form\"}},\"getAdminBalance(SwapUtilsExternal.Swap storage,uint256)\":{\"params\":{\"index\":\"Index of the pooled token\",\"self\":\"Swap struct to read from\"},\"returns\":{\"_0\":\"admin balance in the token's precision\"}},\"getD(uint256[],uint256)\":{\"params\":{\"a\":\"the amplification coefficient * n ** (n - 1) in Constants.A_PRECISION. See the StableSwap paper for details\",\"xp\":\"a precision-adjusted set of pool balances. Array should be the same cardinality as the pool.\"},\"returns\":{\"_0\":\"the invariant, at the precision of the pool\"}},\"getVirtualPrice(SwapUtilsExternal.Swap storage)\":{\"params\":{\"self\":\"Swap struct to read from\"},\"returns\":{\"_0\":\"the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\"}},\"getY(uint256,uint8,uint8,uint256,uint256[])\":{\"params\":{\"preciseA\":\"precise form of amplification coefficient\",\"tokenIndexFrom\":\"index of FROM token\",\"tokenIndexTo\":\"index of TO token\",\"x\":\"the new total amount of FROM token\",\"xp\":\"balances of the tokens in the pool\"},\"returns\":{\"_0\":\"the amount of TO token that should remain in the pool\"}},\"getYD(uint256,uint8,uint256[],uint256)\":{\"details\":\"This is accomplished via solving the invariant iteratively. See the StableSwap paper and Curve.fi implementation for further details. x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A) x_1**2 + b*x_1 = c x_1 = (x_1**2 + c) / (2*x_1 + b)\",\"params\":{\"a\":\"the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\",\"d\":\"the stableswap invariant\",\"tokenIndex\":\"Index of token we are calculating for.\",\"xp\":\"a precision-adjusted set of pool balances. Array should be the same cardinality as the pool.\"},\"returns\":{\"_0\":\"the price of the token, in the same precision as in xp\"}},\"rampA(SwapUtilsExternal.Swap storage,uint256,uint256)\":{\"params\":{\"futureA_\":\"the new A to ramp towards\",\"futureTime_\":\"timestamp when the new A should be reached\",\"self\":\"Swap struct to update\"}},\"removeLiquidity(SwapUtilsExternal.Swap storage,uint256,uint256[])\":{\"details\":\"Liquidity can always be removed, even when the pool is paused.\",\"params\":{\"amount\":\"the amount of LP tokens to burn\",\"minAmounts\":\"the minimum amounts of each token in the pool acceptable for this burn. Useful as a front-running mitigation\",\"self\":\"Swap struct to read from and write to\"},\"returns\":{\"_0\":\"amounts of tokens the user received\"}},\"removeLiquidityImbalance(SwapUtilsExternal.Swap storage,uint256[],uint256)\":{\"params\":{\"amounts\":\"how much of each token to withdraw\",\"maxBurnAmount\":\"the max LP token provider is willing to pay to remove liquidity. Useful as a front-running mitigation.\",\"self\":\"Swap struct to read from and write to\"},\"returns\":{\"_0\":\"actual amount of LP tokens burned in the withdrawal\"}},\"removeLiquidityOneToken(SwapUtilsExternal.Swap storage,uint256,uint8,uint256)\":{\"params\":{\"minAmount\":\"the minimum amount to withdraw, otherwise revert\",\"self\":\"Swap struct to read from and write to\",\"tokenAmount\":\"the amount of the lp tokens to burn\",\"tokenIndex\":\"the index of the token you want to receive\"},\"returns\":{\"_0\":\"amount chosen token that user received\"}},\"setAdminFee(SwapUtilsExternal.Swap storage,uint256)\":{\"details\":\"adminFee cannot be higher than 100% of the swap fee\",\"params\":{\"newAdminFee\":\"new admin fee to be applied on future transactions\",\"self\":\"Swap struct to update\"}},\"setSwapFee(SwapUtilsExternal.Swap storage,uint256)\":{\"details\":\"fee cannot be higher than 1% of each swap\",\"params\":{\"newSwapFee\":\"new swap fee to be applied on future transactions\",\"self\":\"Swap struct to update\"}},\"stopRampA(SwapUtilsExternal.Swap storage)\":{\"params\":{\"self\":\"Swap struct to update\"}},\"swap(SwapUtilsExternal.Swap storage,uint8,uint8,uint256,uint256)\":{\"params\":{\"dx\":\"the amount of tokens the user wants to sell\",\"minDy\":\"the min amount the user would like to receive, or revert.\",\"self\":\"Swap struct to read from and write to\",\"tokenIndexFrom\":\"the token the user wants to sell\",\"tokenIndexTo\":\"the token the user wants to buy\"},\"returns\":{\"_0\":\"amount of token user received on swap\"}},\"swapOut(SwapUtilsExternal.Swap storage,uint8,uint8,uint256,uint256)\":{\"params\":{\"dy\":\"the amount of tokens the user wants to buy\",\"maxDx\":\"the max amount the user would like to send.\",\"self\":\"Swap struct to read from and write to\",\"tokenIndexFrom\":\"the token the user wants to sell\",\"tokenIndexTo\":\"the token the user wants to buy\"},\"returns\":{\"_0\":\"amount of token user have to transfer on swap\"}},\"withdrawAdminFees(SwapUtilsExternal.Swap storage,address)\":{\"params\":{\"self\":\"Swap struct to withdraw fees from\",\"to\":\"Address to send the fees to\"}}},\"title\":\"SwapUtilsExternal library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidity(SwapUtilsExternal.Swap storage,uint256[],uint256)\":{\"notice\":\"Add liquidity to the pool\"},\"calculateRemoveLiquidity(SwapUtilsExternal.Swap storage,uint256)\":{\"notice\":\"A simple method to calculate amount of each underlying tokens that is returned upon burning given amount of LP tokens\"},\"calculateSwap(SwapUtilsExternal.Swap storage,uint8,uint8,uint256)\":{\"notice\":\"Externally calculates a swap between two tokens.\"},\"calculateSwapInv(SwapUtilsExternal.Swap storage,uint8,uint8,uint256)\":{\"notice\":\"Externally calculates a swap between two tokens.\"},\"calculateTokenAmount(SwapUtilsExternal.Swap storage,uint256[],bool)\":{\"notice\":\"A simple method to calculate prices from deposits or withdrawals, excluding fees but including slippage. This is helpful as an input into the various \\\"min\\\" parameters on calls to fight front-running\"},\"calculateWithdrawOneToken(SwapUtilsExternal.Swap storage,uint256,uint8)\":{\"notice\":\"Calculate the dy, the amount of selected token that user receives and the fee of withdrawing in one token\"},\"calculateWithdrawOneTokenDY(SwapUtilsExternal.Swap storage,uint8,uint256,uint256)\":{\"notice\":\"Calculate the dy of withdrawing in one token\"},\"getA(SwapUtilsExternal.Swap storage)\":{\"notice\":\"Return A, the amplification coefficient * n ** (n - 1)\"},\"getAPrecise(SwapUtilsExternal.Swap storage)\":{\"notice\":\"Return A in its raw precision\"},\"getAdminBalance(SwapUtilsExternal.Swap storage,uint256)\":{\"notice\":\"return accumulated amount of admin fees of the token with given index\"},\"getD(uint256[],uint256)\":{\"notice\":\"Get D, the StableSwap invariant, based on a set of balances and a particular A.\"},\"getVirtualPrice(SwapUtilsExternal.Swap storage)\":{\"notice\":\"Get the virtual price, to help calculate profit\"},\"getY(uint256,uint8,uint8,uint256,uint256[])\":{\"notice\":\"Calculate the new balances of the tokens given the indexes of the token that is swapped from (FROM) and the token that is swapped to (TO). This function is used as a helper function to calculate how much TO token the user should receive on swap.\"},\"getYD(uint256,uint8,uint256[],uint256)\":{\"notice\":\"Calculate the price of a token in the pool with given precision-adjusted balances and a particular D.\"},\"rampA(SwapUtilsExternal.Swap storage,uint256,uint256)\":{\"notice\":\"Start ramping up or down A parameter towards given futureA_ and futureTime_ Checks if the change is too rapid, and commits the new A value only when it falls under the limit range.\"},\"removeLiquidity(SwapUtilsExternal.Swap storage,uint256,uint256[])\":{\"notice\":\"Burn LP tokens to remove liquidity from the pool.\"},\"removeLiquidityImbalance(SwapUtilsExternal.Swap storage,uint256[],uint256)\":{\"notice\":\"Remove liquidity from the pool, weighted differently than the pool's current balances.\"},\"removeLiquidityOneToken(SwapUtilsExternal.Swap storage,uint256,uint8,uint256)\":{\"notice\":\"Remove liquidity from the pool all in one token.\"},\"setAdminFee(SwapUtilsExternal.Swap storage,uint256)\":{\"notice\":\"Sets the admin fee\"},\"setSwapFee(SwapUtilsExternal.Swap storage,uint256)\":{\"notice\":\"update the swap fee\"},\"stopRampA(SwapUtilsExternal.Swap storage)\":{\"notice\":\"Stops ramping A immediately. Once this function is called, rampA() cannot be called for another 24 hours\"},\"swap(SwapUtilsExternal.Swap storage,uint8,uint8,uint256,uint256)\":{\"notice\":\"swap two tokens in the pool\"},\"swapOut(SwapUtilsExternal.Swap storage,uint8,uint8,uint256,uint256)\":{\"notice\":\"swap two tokens in the pool\"},\"withdrawAdminFees(SwapUtilsExternal.Swap storage,address)\":{\"notice\":\"withdraw all admin fees to a given address\"}},\"notice\":\"A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/libraries/SwapUtilsExternal.sol\":\"SwapUtilsExternal\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    function __Ownable_init() internal onlyInitializing {\\n        __Ownable_init_unchained();\\n    }\\n\\n    function __Ownable_init_unchained() internal onlyInitializing {\\n        _transferOwnership(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n    mapping(address => uint256) private _balances;\\n\\n    mapping(address => mapping(address => uint256)) private _allowances;\\n\\n    uint256 private _totalSupply;\\n\\n    string private _name;\\n    string private _symbol;\\n\\n    /**\\n     * @dev Sets the values for {name} and {symbol}.\\n     *\\n     * The default value of {decimals} is 18. To select a different value for\\n     * {decimals} you should overload it.\\n     *\\n     * All two of these values are immutable: they can only be set once during\\n     * construction.\\n     */\\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n        __ERC20_init_unchained(name_, symbol_);\\n    }\\n\\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n        _name = name_;\\n        _symbol = symbol_;\\n    }\\n\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() public view virtual override returns (string memory) {\\n        return _name;\\n    }\\n\\n    /**\\n     * @dev Returns the symbol of the token, usually a shorter version of the\\n     * name.\\n     */\\n    function symbol() public view virtual override returns (string memory) {\\n        return _symbol;\\n    }\\n\\n    /**\\n     * @dev Returns the number of decimals used to get its user representation.\\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n     *\\n     * Tokens usually opt for a value of 18, imitating the relationship between\\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n     * overridden;\\n     *\\n     * NOTE: This information is only used for _display_ purposes: it in\\n     * no way affects any of the arithmetic of the contract, including\\n     * {IERC20-balanceOf} and {IERC20-transfer}.\\n     */\\n    function decimals() public view virtual override returns (uint8) {\\n        return 18;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-totalSupply}.\\n     */\\n    function totalSupply() public view virtual override returns (uint256) {\\n        return _totalSupply;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-balanceOf}.\\n     */\\n    function balanceOf(address account) public view virtual override returns (uint256) {\\n        return _balances[account];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transfer}.\\n     *\\n     * Requirements:\\n     *\\n     * - `to` cannot be the zero address.\\n     * - the caller must have a balance of at least `amount`.\\n     */\\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _transfer(owner, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-allowance}.\\n     */\\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n        return _allowances[owner][spender];\\n    }\\n\\n    /**\\n     * @dev See {IERC20-approve}.\\n     *\\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev See {IERC20-transferFrom}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance. This is not\\n     * required by the EIP. See the note at the beginning of {ERC20}.\\n     *\\n     * NOTE: Does not update the allowance if the current allowance\\n     * is the maximum `uint256`.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` and `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     * - the caller must have allowance for ``from``'s tokens of at least\\n     * `amount`.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) public virtual override returns (bool) {\\n        address spender = _msgSender();\\n        _spendAllowance(from, spender, amount);\\n        _transfer(from, to, amount);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     */\\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n     *\\n     * This is an alternative to {approve} that can be used as a mitigation for\\n     * problems described in {IERC20-approve}.\\n     *\\n     * Emits an {Approval} event indicating the updated allowance.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `spender` must have allowance for the caller of at least\\n     * `subtractedValue`.\\n     */\\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n        address owner = _msgSender();\\n        uint256 currentAllowance = allowance(owner, spender);\\n        require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n        unchecked {\\n            _approve(owner, spender, currentAllowance - subtractedValue);\\n        }\\n\\n        return true;\\n    }\\n\\n    /**\\n     * @dev Moves `amount` of tokens from `from` to `to`.\\n     *\\n     * This internal function is equivalent to {transfer}, and can be used to\\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\\n     *\\n     * Emits a {Transfer} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `from` cannot be the zero address.\\n     * - `to` cannot be the zero address.\\n     * - `from` must have a balance of at least `amount`.\\n     */\\n    function _transfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {\\n        require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n        require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n        _beforeTokenTransfer(from, to, amount);\\n\\n        uint256 fromBalance = _balances[from];\\n        require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n        unchecked {\\n            _balances[from] = fromBalance - amount;\\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n            // decrementing then incrementing.\\n            _balances[to] += amount;\\n        }\\n\\n        emit Transfer(from, to, amount);\\n\\n        _afterTokenTransfer(from, to, amount);\\n    }\\n\\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n     * the total supply.\\n     *\\n     * Emits a {Transfer} event with `from` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     */\\n    function _mint(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n        _beforeTokenTransfer(address(0), account, amount);\\n\\n        _totalSupply += amount;\\n        unchecked {\\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n            _balances[account] += amount;\\n        }\\n        emit Transfer(address(0), account, amount);\\n\\n        _afterTokenTransfer(address(0), account, amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, reducing the\\n     * total supply.\\n     *\\n     * Emits a {Transfer} event with `to` set to the zero address.\\n     *\\n     * Requirements:\\n     *\\n     * - `account` cannot be the zero address.\\n     * - `account` must have at least `amount` tokens.\\n     */\\n    function _burn(address account, uint256 amount) internal virtual {\\n        require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n        _beforeTokenTransfer(account, address(0), amount);\\n\\n        uint256 accountBalance = _balances[account];\\n        require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n        unchecked {\\n            _balances[account] = accountBalance - amount;\\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\\n            _totalSupply -= amount;\\n        }\\n\\n        emit Transfer(account, address(0), amount);\\n\\n        _afterTokenTransfer(account, address(0), amount);\\n    }\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n     *\\n     * This internal function is equivalent to `approve`, and can be used to\\n     * e.g. set automatic allowances for certain subsystems, etc.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `owner` cannot be the zero address.\\n     * - `spender` cannot be the zero address.\\n     */\\n    function _approve(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n        require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n        _allowances[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    /**\\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n     *\\n     * Does not update the allowance amount in case of infinite allowance.\\n     * Revert if not enough allowance is available.\\n     *\\n     * Might emit an {Approval} event.\\n     */\\n    function _spendAllowance(\\n        address owner,\\n        address spender,\\n        uint256 amount\\n    ) internal virtual {\\n        uint256 currentAllowance = allowance(owner, spender);\\n        if (currentAllowance != type(uint256).max) {\\n            require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n            unchecked {\\n                _approve(owner, spender, currentAllowance - amount);\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Hook that is called before any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * will be transferred to `to`.\\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _beforeTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev Hook that is called after any transfer of tokens. This includes\\n     * minting and burning.\\n     *\\n     * Calling conditions:\\n     *\\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n     * has been transferred to `to`.\\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n     * - `from` and `to` are never both zero.\\n     *\\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n     */\\n    function _afterTokenTransfer(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) internal virtual {}\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n    function __ERC20Burnable_init() internal onlyInitializing {\\n    }\\n\\n    function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n    }\\n    /**\\n     * @dev Destroys `amount` tokens from the caller.\\n     *\\n     * See {ERC20-_burn}.\\n     */\\n    function burn(uint256 amount) public virtual {\\n        _burn(_msgSender(), amount);\\n    }\\n\\n    /**\\n     * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n     * allowance.\\n     *\\n     * See {ERC20-_burn} and {ERC20-allowance}.\\n     *\\n     * Requirements:\\n     *\\n     * - the caller must have allowance for ``accounts``'s tokens of at least\\n     * `amount`.\\n     */\\n    function burnFrom(address account, uint256 amount) public virtual {\\n        _spendAllowance(account, _msgSender(), amount);\\n        _burn(account, amount);\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n    function __Context_init() internal onlyInitializing {\\n    }\\n\\n    function __Context_init_unchained() internal onlyInitializing {\\n    }\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    /**\\n     * @dev This empty reserved space is put in place to allow future versions to add new\\n     * variables without shifting down storage in the inheritance chain.\\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n     */\\n    uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n  // ============ Storage ============\\n\\n  // ============ Initializer ============\\n\\n  /**\\n   * @notice Initializes this LPToken contract with the given name and symbol\\n   * @dev The caller of this function will become the owner. A Swap contract should call this\\n   * in its initializer function.\\n   * @param name name of this token\\n   * @param symbol symbol of this token\\n   */\\n  function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n    __Context_init_unchained();\\n    __ERC20_init_unchained(name, symbol);\\n    __Ownable_init_unchained();\\n    return true;\\n  }\\n\\n  // ============ External functions ============\\n\\n  /**\\n   * @notice Mints the given amount of LPToken to the recipient.\\n   * @dev only owner can call this mint function\\n   * @param recipient address of account to receive the tokens\\n   * @param amount amount of tokens to mint\\n   */\\n  function mint(address recipient, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n    _mint(recipient, amount);\\n  }\\n\\n  /**\\n   * @notice Burns the given amount of LPToken from provided account\\n   * @dev only owner can call this burn function\\n   * @param account address of account from which to burn token\\n   * @param amount amount of tokens to mint\\n   */\\n  function burnFrom(address account, uint256 amount) external onlyOwner {\\n    require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n    _burn(account, amount);\\n  }\\n\\n  // ============ Internal functions ============\\n\\n  /**\\n   * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n   * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n   * This assumes the owner is set to a Swap contract's address.\\n   */\\n  function _beforeTokenTransfer(\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) internal virtual override(ERC20Upgradeable) {\\n    super._beforeTokenTransfer(from, to, amount);\\n    require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n  /*** EVENTS ***/\\n\\n  // events replicated from SwapUtils to make the ABI easier for dumb\\n  // clients\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n  event NewWithdrawFee(uint256 newWithdrawFee);\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  function swap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function swapExact(\\n    uint256 amountIn,\\n    address assetIn,\\n    address assetOut,\\n    uint256 minAmountOut,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function swapExactOut(\\n    uint256 amountOut,\\n    address assetIn,\\n    address assetOut,\\n    uint256 maxAmountIn,\\n    uint256 deadline\\n  ) external payable returns (uint256);\\n\\n  function getA() external view returns (uint256);\\n\\n  function getToken(uint8 index) external view returns (IERC20);\\n\\n  function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n  function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n  function getVirtualPrice() external view returns (uint256);\\n\\n  // min return calculation functions\\n  function calculateSwap(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOut(\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256);\\n\\n  function calculateSwapFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountIn\\n  ) external view returns (uint256);\\n\\n  function calculateSwapOutFromAddress(\\n    address assetIn,\\n    address assetOut,\\n    uint256 amountOut\\n  ) external view returns (uint256);\\n\\n  function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n  function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n  function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n    external\\n    view\\n    returns (uint256 availableTokenAmount);\\n\\n  // state modifying functions\\n  function initialize(\\n    IERC20[] memory pooledTokens,\\n    uint8[] memory decimals,\\n    string memory lpTokenName,\\n    string memory lpTokenSymbol,\\n    uint256 a,\\n    uint256 fee,\\n    uint256 adminFee,\\n    address lpTokenTargetAddress\\n  ) external;\\n\\n  function addLiquidity(\\n    uint256[] calldata amounts,\\n    uint256 minToMint,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidity(\\n    uint256 amount,\\n    uint256[] calldata minAmounts,\\n    uint256 deadline\\n  ) external returns (uint256[] memory);\\n\\n  function removeLiquidityOneToken(\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n\\n  function removeLiquidityImbalance(\\n    uint256[] calldata amounts,\\n    uint256 maxBurnAmount,\\n    uint256 deadline\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    SwapUtils.Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) internal {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n    require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(SwapUtils.Swap storage self) internal {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n  // ============ Libraries ============\\n\\n  using SwapUtils for SwapUtils.Swap;\\n  using SafeERC20 for IERC20Metadata;\\n\\n  // ============ Errors ============\\n\\n  error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n  error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n  error AssetLogic__handleOutgoingAsset_notNative();\\n  error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n  error AssetLogic__getConfig_notRegistered();\\n  error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n  // ============ Internal: Handle Transfer ============\\n\\n  function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    TokenConfig storage config = s.tokenConfigs[_key];\\n\\n    // Sanity check: not empty\\n    // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n    // for the asset). The same is not true for the representation assets, which\\n    // will always have 0 decimals on the canonical domain\\n    if (config.adoptedDecimals < 1) {\\n      revert AssetLogic__getConfig_notRegistered();\\n    }\\n\\n    return config;\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from msg.sender to the Connext contract.\\n   * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n   *\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _amount - The specified amount to transfer.\\n   */\\n  function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) {\\n      revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n    }\\n\\n    IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n    // Record starting amount to validate correct amount is transferred.\\n    uint256 starting = asset.balanceOf(address(this));\\n\\n    // Transfer asset to contract.\\n    asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n    // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n    if (asset.balanceOf(address(this)) - starting != _amount) {\\n      revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n    }\\n  }\\n\\n  /**\\n   * @notice Handles transferring funds from the Connext contract to a specified address\\n   * @param _asset - The address of the ERC20 token to transfer.\\n   * @param _to - The recipient address that will receive the funds.\\n   * @param _amount - The amount to withdraw from contract.\\n   */\\n  function handleOutgoingAsset(\\n    address _asset,\\n    address _to,\\n    uint256 _amount\\n  ) internal {\\n    // Sanity check: if amount is 0, do nothing.\\n    if (_amount == 0) {\\n      return;\\n    }\\n    // Sanity check: asset address is not zero.\\n    if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n    // Transfer ERC20 asset to target recipient.\\n    SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n  }\\n\\n  // ============ Internal: StableSwap Pools ============\\n\\n  /**\\n   * @notice Return the index of the given token address. Reverts if no matching\\n   * token is found.\\n   * @param key the hash of the canonical id and domain\\n   * @param tokenAddress address of the token\\n   * @return the index of the given token address\\n   */\\n  function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n    uint8 index = s.tokenIndexes[key][tokenAddress];\\n    if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n      revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n    return index;\\n  }\\n\\n  // ============ Internal: Handle Swap ============\\n\\n  /**\\n   * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n   * @dev Will not swap if the asset passed in is the local asset.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _asset - The address of the adopted asset to swap into the local asset.\\n   * @param _amount - The amount of the adopted asset to swap.\\n   * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n   * @return uint256 The amount of local asset received from swap.\\n   */\\n  function swapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount,\\n    uint256 _slippage\\n  ) internal returns (uint256) {\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return 0;\\n    }\\n\\n    // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n    if (_local == _asset) {\\n      return _amount;\\n    }\\n\\n    // Get the configs.\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // Swap the asset to the proper local asset.\\n    (uint256 out, ) = _swapAsset(\\n      _key,\\n      _asset,\\n      _local,\\n      _amount,\\n      calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n    );\\n    return out;\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n   * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n   * by convention\\n   * @return The amount of adopted asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _slippage,\\n    uint256 _normalizedIn\\n  ) internal returns (uint256, address) {\\n    // Get the token config.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    // If there's no amount, no need to swap.\\n    if (_amount == 0) {\\n      return (_amount, adopted);\\n    }\\n\\n    // Swap the asset to the proper local asset\\n    return\\n      _swapAsset(\\n        _key,\\n        _asset,\\n        adopted,\\n        _amount,\\n        // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n        // normalized amount in (at 18 decimals by convention), then convert that amount\\n        // to the proper decimals of adopted.\\n        calculateSlippageBoundary(\\n          Constants.DEFAULT_NORMALIZED_DECIMALS,\\n          config.adoptedDecimals,\\n          _normalizedIn,\\n          _slippage\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key the hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the adopted asset\\n   * @param _amount - The exact amount to receive out of the swap\\n   * @param _maxIn - The most you will supply to the swap\\n   * @return The amount of local asset put into  swap\\n   * @return The address of asset received post-swap\\n   */\\n  function swapFromLocalAssetIfNeededForExactOut(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    TokenConfig storage config = getConfig(_key);\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @dev Will not swap if the asset passed in is the adopted asset\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _assetIn - The address of the from asset\\n   * @param _assetOut - The address of the to asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n   * @return The amount of asset received\\n   * @return The address of asset received\\n   */\\n  function _swapAsset(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amount,\\n    uint256 _minOut\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternal(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amount,\\n          _minOut\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(address(pool), 0);\\n      assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n      // NOTE: If pool is not registered here, then this call will revert.\\n      return (\\n        pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n        _assetOut\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n   * @param _key - The hash of the canonical id and domain.\\n   * @param _assetIn - The address of the from asset.\\n   * @param _assetOut - The address of the to asset.\\n   * @param _amountOut - The amount of the _assetOut to swap.\\n   * @param _maxIn - The most you will supply to the swap.\\n   * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n   * too high).\\n   * @return assetOut The address of asset received.\\n   */\\n  function _swapAssetOut(\\n    bytes32 _key,\\n    address _assetIn,\\n    address _assetOut,\\n    uint256 _amountOut,\\n    uint256 _maxIn\\n  ) internal returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n    // external stableswap below.\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Swap the asset to the proper local asset.\\n    // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n    if (ipool.exists()) {\\n      // Swap via the internal pool.\\n      return (\\n        ipool.swapInternalOut(\\n          getTokenIndexFromStableSwapPool(_key, _assetIn),\\n          getTokenIndexFromStableSwapPool(_key, _assetOut),\\n          _amountOut,\\n          _maxIn\\n        ),\\n        _assetOut\\n      );\\n    } else {\\n      // Otherwise, swap via external stableswap pool.\\n      // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n      address poolAddress = address(pool);\\n\\n      // Perform the swap.\\n      // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n      // there could be a remaining allowance if not the whole amount is pulled by aave.\\n      // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n      // is not 0, it has to be set to 0 first.\\n      // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n      IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n      assetIn.safeApprove(poolAddress, 0);\\n      assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n      uint256 out = pool.swapExactOut(\\n        _amountOut,\\n        _assetIn,\\n        _assetOut,\\n        _maxIn,\\n        block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n      );\\n\\n      // Reset allowance\\n      assetIn.safeApprove(poolAddress, 0);\\n      return (out, _assetOut);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _key - The hash of the canonical id and domain\\n   * @param _asset - The address of the local asset to swap into the local asset\\n   * @param _amount - The amount of the local asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapFromLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the adopted asset is the local asset, no need to swap.\\n    TokenConfig storage config = getConfig(_key);\\n    address adopted = config.adopted;\\n    if (adopted == _asset) {\\n      return (_amount, adopted);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // Calculate with internal swap pool.\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n    } else {\\n      // Otherwise, try to calculate with external pool.\\n      IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n      // NOTE: This call will revert if no external pool exists.\\n      return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n   * using the stored stable swap\\n   * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n   * @param _asset - The address of the asset to swap into the local asset\\n   * @param _amount - The amount of the asset to swap\\n   * @return The amount of local asset received from swap\\n   * @return The address of asset received post-swap\\n   */\\n  function calculateSwapToLocalAssetIfNeeded(\\n    bytes32 _key,\\n    address _asset,\\n    address _local,\\n    uint256 _amount\\n  ) internal view returns (uint256, address) {\\n    AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n    // If the asset is the local asset, no swap needed\\n    if (_asset == _local) {\\n      return (_amount, _local);\\n    }\\n\\n    SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n    // Calculate the swap using the appropriate pool.\\n    if (ipool.exists()) {\\n      // if internal swap pool exists\\n      uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n      uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n      return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n    } else {\\n      IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n      return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n    }\\n  }\\n\\n  // ============ Internal: Token ID Helpers ============\\n\\n  /**\\n   * @notice Gets the canonical information for a given candidate.\\n   * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n   * adopted asset, then calculates the local address.\\n   * @return TokenId The canonical token ID information for the given candidate.\\n   */\\n  function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n    TokenId memory _canonical;\\n    // If candidate is address(0), return an empty `_canonical`.\\n    if (_candidate == address(0)) {\\n      return _canonical;\\n    }\\n\\n    // Check to see if candidate is an adopted asset.\\n    _canonical = s.adoptedToCanonical[_candidate];\\n    if (_canonical.domain != 0) {\\n      // Candidate is an adopted asset, return canonical info.\\n      return _canonical;\\n    }\\n\\n    // Candidate was not adopted; it could be the local address.\\n    // IFF this domain is the canonical domain, then the local == canonical.\\n    // Otherwise, it will be the representation asset.\\n    if (isLocalOrigin(_candidate, s)) {\\n      // The token originates on this domain, canonical information is the information\\n      // of the candidate\\n      _canonical.domain = s.domain;\\n      _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n    } else {\\n      // on a remote domain, return the representation\\n      _canonical = s.representationToCanonical[_candidate];\\n    }\\n    return _canonical;\\n  }\\n\\n  /**\\n   * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n   * and NOT a token deployed by the bridge).\\n   * @param s AppStorage instance.\\n   * @return bool true if token is locally originating, false otherwise.\\n   */\\n  function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n    // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n    // If so, the token is NOT of local origin.\\n    if (s.representationToCanonical[_token].domain != 0) {\\n      return false;\\n    }\\n    // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n    // IS of local origin. Returns true if code exists at `_addr`.\\n    return _token.code.length != 0;\\n  }\\n\\n  /**\\n   * @notice Get the local asset address for a given canonical key, id, and domain.\\n   * @param _key - The hash of canonical id and domain.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @param s AppStorage instance.\\n   * @return address of the the local asset.\\n   */\\n  function getLocalAsset(\\n    bytes32 _key,\\n    bytes32 _id,\\n    uint32 _domain,\\n    AppStorage storage s\\n  ) internal view returns (address) {\\n    if (_domain == s.domain) {\\n      // Token is of local origin\\n      return TypeCasts.bytes32ToAddress(_id);\\n    } else {\\n      // Token is a representation of a token of remote origin\\n      return getConfig(_key).representation;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the hash of canonical ID and domain.\\n   * @dev This hash is used as the key for many asset-related mappings.\\n   * @param _id Canonical ID.\\n   * @param _domain Canonical domain.\\n   * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n   */\\n  function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n    return keccak256(abi.encode(_id, _domain));\\n  }\\n\\n  // ============ Internal: Math ============\\n\\n  /**\\n   * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n   * That to the `_out` decimals.\\n   *\\n   * @dev This *ONLY* works for 1:1 assets\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amountIn The starting amount for the swap\\n   * @param _slippage The slippage allowed for the swap, in BPS\\n   * @return uint256 The minimum amount out for the swap\\n   */\\n  function calculateSlippageBoundary(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amountIn,\\n    uint256 _slippage\\n  ) internal pure returns (uint256) {\\n    if (_amountIn == 0) {\\n      return 0;\\n    }\\n    // Get the min recieved (in same decimals as _amountIn)\\n    uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n    return normalizeDecimals(_in, _out, min);\\n  }\\n\\n  /**\\n   * @notice This function translates the _amount in _in decimals\\n   * to _out decimals\\n   *\\n   * @param _in The decimals of the asset in / amount in\\n   * @param _out The decimals of the target asset\\n   * @param _amount The value to normalize to the `_out` decimals\\n   * @return uint256 Normalized decimals.\\n   */\\n  function normalizeDecimals(\\n    uint8 _in,\\n    uint8 _out,\\n    uint256 _amount\\n  ) internal pure returns (uint256) {\\n    if (_in == _out) {\\n      return _amount;\\n    }\\n    // Convert this value to the same decimals as _out\\n    uint256 normalized;\\n    if (_in < _out) {\\n      normalized = _amount * (10**(_out - _in));\\n    } else {\\n      normalized = _amount / (10**(_in - _out));\\n    }\\n    return normalized;\\n  }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n  // ============= Initial Values =============\\n\\n  /**\\n   * @notice Sets the initial lp fee at 5 bps\\n   */\\n  uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n  /**\\n   * @notice Sets the initial max routers per transfer\\n   */\\n  uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n  // =============\\n\\n  // ============= Unchangeable Values =============\\n  // ============= Facets\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant NOT_ENTERED = 1;\\n\\n  /**\\n   * @notice Reentrancy modifier for diamond\\n   */\\n  uint256 internal constant ENTERED = 2;\\n\\n  /**\\n   * @notice Contains hash of empty bytes\\n   */\\n  bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n  /**\\n   * @notice Denominator for BPS values\\n   */\\n  uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n  /**\\n   * @notice Value for delay used on governance\\n   */\\n  uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n  /**\\n   * @notice Required gas amount to be leftover after passing in `gasleft` when\\n   * executing calldata (see `_executeCalldata` method).\\n   */\\n  uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n  /**\\n   * @notice Portal referral code\\n   */\\n  uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n  // ============= ConnextPriceOracle\\n  /**\\n   * @notice Valid period for a price delivered by the price oracle\\n   */\\n  uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n  /**\\n   * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n   */\\n  uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n  /**\\n   * @notice Defalt decimals values are normalized to\\n   */\\n  uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n  /**\\n   * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n   */\\n  uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n  /**\\n   * @notice Valid deadline extension used when swapping (1hr)\\n   */\\n  uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n  // ============= Swaps\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   *\\n   * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n   * we do not have pools supporting this number of token, allowing a larger value leaves\\n   * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n   * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n   * default of 32 and what we will realistically host in pools.\\n   */\\n  uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n  uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n  /**\\n   * @notice the precision all pools tokens will be converted to\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n  /**\\n   * @notice the denominator used to calculate admin and LP fees. For example, an\\n   * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n  /**\\n   * @notice Max swap fee is 1% or 100bps of each swap\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n  /**\\n   * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n   * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n   * users but only on the earnings of LPs\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n  /**\\n   * @notice constant value used as max loop limit\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n  // Constant value used as max delay time for removing swap after disabled\\n  uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n  /**\\n   * @notice constant values used in ramping A calculations\\n   * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n   */\\n  uint256 public constant A_PRECISION = 100;\\n  uint256 public constant MAX_A = 10**6;\\n  uint256 public constant MAX_A_CHANGE = 2;\\n  uint256 public constant MIN_RAMP_TIME = 14 days;\\n  uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None     - 0\\n// Router   - 1\\n// Watcher  - 2\\n// Admin    - 3\\nenum Role {\\n  None,\\n  RouterAdmin,\\n  Watcher,\\n  Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n  None, // 0\\n  Reconciled, // 1\\n  Executed, // 2\\n  Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n  uint32 originDomain;\\n  uint32 destinationDomain;\\n  uint32 canonicalDomain;\\n  address to;\\n  address delegate;\\n  bool receiveLocal;\\n  bytes callData;\\n  uint256 slippage;\\n  address originSender;\\n  uint256 bridgedAmt;\\n  uint256 normalizedIn;\\n  uint256 nonce;\\n  bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n  TransferInfo params;\\n  address[] routers;\\n  bytes[] routerSignatures;\\n  address sequencer;\\n  bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n  bool approved;\\n  bool portalApproved;\\n  address owner;\\n  address recipient;\\n  address proposed;\\n  uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n  address representation;\\n  uint8 representationDecimals;\\n  address adopted;\\n  uint8 adoptedDecimals;\\n  address adoptedToLocalExternalPools;\\n  bool approval;\\n  uint256 cap;\\n  uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n  //\\n  // 0\\n  bool initialized;\\n  //\\n  // Connext\\n  //\\n  // 1\\n  uint256 LIQUIDITY_FEE_NUMERATOR;\\n  /**\\n   * @notice The local address that is custodying relayer fees\\n   */\\n  // 2\\n  address relayerFeeVault;\\n  /**\\n   * @notice Nonce for the contract, used to keep unique transfer ids.\\n   * @dev Assigned at first interaction (xcall on origin domain).\\n   */\\n  // 3\\n  uint256 nonce;\\n  /**\\n   * @notice The domain this contract exists on.\\n   * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n   */\\n  // 4\\n  uint32 domain;\\n  /**\\n   * @notice Mapping of adopted to canonical asset information.\\n   */\\n  // 5\\n  mapping(address => TokenId) adoptedToCanonical;\\n  /**\\n   * @notice Mapping of representation to canonical asset information.\\n   */\\n  // 6\\n  mapping(address => TokenId) representationToCanonical;\\n  /**\\n   * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n   */\\n  // 7\\n  mapping(bytes32 => TokenConfig) tokenConfigs;\\n  /**\\n   * @notice Mapping to track transfer status on destination domain\\n   */\\n  // 8\\n  mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n  /**\\n   * @notice Mapping holding router address that provided fast liquidity.\\n   */\\n  // 9\\n  mapping(bytes32 => address[]) routedTransfers;\\n  /**\\n   * @notice Mapping of router to available balance of an asset.\\n   * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n   * this domain (the local asset).\\n   */\\n  // 10\\n  mapping(address => mapping(address => uint256)) routerBalances;\\n  /**\\n   * @notice Mapping of approved relayers\\n   * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n   */\\n  // 11\\n  mapping(address => bool) approvedRelayers;\\n  /**\\n   * @notice The max amount of routers a payment can be routed through.\\n   */\\n  // 12\\n  uint256 maxRoutersPerTransfer;\\n  /**\\n   * @notice Stores a mapping of transfer id to slippage overrides.\\n   */\\n  // 13\\n  mapping(bytes32 => uint256) slippage;\\n  /**\\n   * @notice Stores a mapping of transfer id to receive local overrides.\\n   */\\n  // 14\\n  mapping(bytes32 => bool) receiveLocalOverride;\\n  /**\\n   * @notice Stores a mapping of remote routers keyed on domains.\\n   * @dev Addresses are cast to bytes32.\\n   * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n   * the remotes interface.\\n   */\\n  // 15\\n  mapping(uint32 => bytes32) remotes;\\n  //\\n  // ProposedOwnable\\n  //\\n  // 17\\n  address _proposed;\\n  // 18\\n  uint256 _proposedOwnershipTimestamp;\\n  // 19\\n  bool _routerAllowlistRemoved;\\n  // 20\\n  uint256 _routerAllowlistTimestamp;\\n  /**\\n   * @notice Stores a mapping of address to Roles\\n   * @dev returns uint representing the enum Role value\\n   */\\n  // 21\\n  mapping(address => Role) roles;\\n  //\\n  // RouterFacet\\n  //\\n  // 22\\n  mapping(address => RouterConfig) routerConfigs;\\n  //\\n  // ReentrancyGuard\\n  //\\n  // 23\\n  uint256 _status;\\n  // 24\\n  uint256 _xcallStatus;\\n  //\\n  // StableSwap\\n  //\\n  /**\\n   * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n   * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n   * Struct storing data responsible for automatic market maker functionalities. In order to\\n   * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n   */\\n  // 25\\n  mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n  /**\\n   * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n   * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n   */\\n  // 26\\n  mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n  /**\\n   * The address of an existing LPToken contract to use as a target\\n   * this target must be the address which connext deployed on this chain.\\n   */\\n  // 27\\n  address lpTokenTargetAddress;\\n  /**\\n   * @notice Stores whether or not bribing, AMMs, have been paused.\\n   */\\n  // 28\\n  bool _paused;\\n  //\\n  // AavePortals\\n  //\\n  /**\\n   * @notice Address of Aave Pool contract.\\n   */\\n  // 29\\n  address aavePool;\\n  /**\\n   * @notice Fee percentage numerator for using Portal liquidity.\\n   * @dev Assumes the same basis points as the liquidity fee.\\n   */\\n  // 30\\n  uint256 aavePortalFeeNumerator;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 31\\n  mapping(bytes32 => uint256) portalDebt;\\n  /**\\n   * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n   */\\n  // 32\\n  mapping(bytes32 => uint256) portalFeeDebt;\\n  /**\\n   * @notice Mapping of approved sequencers\\n   * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n   * for the fast liquidity route.\\n   */\\n  // 33\\n  mapping(address => bool) approvedSequencers;\\n  /**\\n   * @notice Remote connection manager for xapp.\\n   */\\n  // 34\\n  IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n  function connextStorage() internal pure returns (AppStorage storage ds) {\\n    assembly {\\n      ds.slot := 0\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n  /**\\n   * @notice Compares a and b and returns true if the difference between a and b\\n   *         is less than 1 or equal to each other.\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return True if the difference between a and b is less than 1 or equal,\\n   *         otherwise return false\\n   */\\n  function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n    return (difference(a, b) < 1 + 1); // instead of <=1\\n  }\\n\\n  /**\\n   * @notice Calculates absolute difference between a and b\\n   * @param a uint256 to compare with\\n   * @param b uint256 to compare with\\n   * @return Difference between a and b\\n   */\\n  function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n    if (a > b) {\\n      return a - b;\\n    }\\n    return b - a;\\n  }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(\\n    bytes32 indexed key,\\n    address indexed buyer,\\n    uint256 tokensSold,\\n    uint256 tokensBought,\\n    uint128 soldId,\\n    uint128 boughtId\\n  );\\n  event AddLiquidity(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    bytes32 indexed key,\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n  event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    bytes32 key;\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n    // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n    bool disabled;\\n    // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n    uint256 removeTime;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n\\n  function _getAPrecise(Swap storage self) private view returns (uint256) {\\n    return AmplificationUtils._getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) internal view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    internal\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n    // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    // Select d as the starting point of the Newton method. Because y < D\\n    // D is the best option as the starting point in case the pool is very imbalanced.\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) internal pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) internal view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) internal view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = (x + 1) - xp[tokenIndexFrom];\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) internal view returns (uint256) {\\n    uint256[] memory balances = self.balances;\\n    uint256 numBalances = balances.length;\\n    require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool internally\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swapInternal(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Should get exact amount out of AMM for asset put in\\n   */\\n  function swapInternalOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n    require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) internal returns (uint256) {\\n    require(!self.disabled, \\\"disabled pool\\\");\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts for fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) internal returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) internal returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) internal returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) internal {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(self.key, newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(self.key, newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n   * initialized and tokens have been added).\\n   * @return bool true if this stableswap pool is valid, false if not.\\n   */\\n  function exists(Swap storage self) internal view returns (bool) {\\n    return !self.disabled && self.pooledTokens.length != 0;\\n  }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtilsExternal.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtilsExternal library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtilsExternal {\\n  using SafeERC20 for IERC20;\\n  using MathUtils for uint256;\\n\\n  /*** EVENTS ***/\\n\\n  event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n  event AddLiquidity(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n  event RemoveLiquidityOne(\\n    address indexed provider,\\n    uint256 lpTokenAmount,\\n    uint256 lpTokenSupply,\\n    uint256 boughtId,\\n    uint256 tokensBought\\n  );\\n  event RemoveLiquidityImbalance(\\n    address indexed provider,\\n    uint256[] tokenAmounts,\\n    uint256[] fees,\\n    uint256 invariant,\\n    uint256 lpTokenSupply\\n  );\\n  event NewAdminFee(uint256 newAdminFee);\\n  event NewSwapFee(uint256 newSwapFee);\\n\\n  event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n  event StopRampA(uint256 currentA, uint256 time);\\n\\n  struct Swap {\\n    // variables around the ramp management of A,\\n    // the amplification coefficient * n ** (n - 1)\\n    // see Curve stableswap paper for details\\n    uint256 initialA;\\n    uint256 futureA;\\n    uint256 initialATime;\\n    uint256 futureATime;\\n    // fee calculation\\n    uint256 swapFee;\\n    uint256 adminFee;\\n    LPToken lpToken;\\n    // contract references for all tokens being pooled\\n    IERC20[] pooledTokens;\\n    // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n    // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n    // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n    uint256[] tokenPrecisionMultipliers;\\n    // the pool balance of each token, in the token's precision\\n    // the contract's actual token balance might differ\\n    uint256[] balances;\\n    // the admin fee balance of each token, in the token's precision\\n    uint256[] adminFees;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n  struct CalculateWithdrawOneTokenDYInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 newY;\\n    uint256 feePerToken;\\n    uint256 preciseA;\\n  }\\n\\n  // Struct storing variables used in calculations in the\\n  // {add,remove}Liquidity functions to avoid stack too deep errors\\n  struct ManageLiquidityInfo {\\n    uint256 d0;\\n    uint256 d1;\\n    uint256 d2;\\n    uint256 preciseA;\\n    LPToken lpToken;\\n    uint256 totalSupply;\\n    uint256[] balances;\\n    uint256[] multipliers;\\n  }\\n\\n  /*** VIEW & PURE FUNCTIONS ***/\\n  /**\\n   * @notice Return A, the amplification coefficient * n ** (n - 1)\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter\\n   */\\n  function getA(Swap storage self) external view returns (uint256) {\\n    return _getAPrecise(self) / Constants.A_PRECISION;\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return A parameter in its raw precision form\\n   */\\n  function getAPrecise(Swap storage self) external view returns (uint256) {\\n    return _getAPrecise(self);\\n  }\\n\\n  /**\\n   * @notice Return A in its raw precision\\n   * @dev See the StableSwap paper for details\\n   * @param self Swap struct to read from\\n   * @return currentA A parameter in its raw precision form\\n   */\\n  function _getAPrecise(Swap storage self) internal view returns (uint256 currentA) {\\n    uint256 t1 = self.futureATime; // time when ramp is finished\\n    currentA = self.futureA; // final A value when ramp is finished\\n    uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n    if (a0 != currentA && block.timestamp < t1) {\\n      uint256 t0 = self.initialATime; // time when ramp is started\\n      assembly {\\n        currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculate the dy, the amount of selected token that user receives and\\n   * the fee of withdrawing in one token\\n   * @param tokenAmount the amount to withdraw in the pool's precision\\n   * @param tokenIndex which token will be withdrawn\\n   * @param self Swap struct to read from\\n   * @return the amount of token user will receive\\n   */\\n  function calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex\\n  ) external view returns (uint256) {\\n    (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n      self,\\n      tokenAmount,\\n      tokenIndex,\\n      self.lpToken.totalSupply()\\n    );\\n    return availableTokenAmount;\\n  }\\n\\n  function _calculateWithdrawOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 totalSupply\\n  ) private view returns (uint256, uint256) {\\n    uint256 dy;\\n    uint256 newY;\\n    uint256 currentY;\\n\\n    (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n    // dy_0 (without fees)\\n    // dy, dy_0 - dy\\n\\n    uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n    return (dy, dySwapFee);\\n  }\\n\\n  /**\\n   * @notice Calculate the dy of withdrawing in one token\\n   * @param self Swap struct to read from\\n   * @param tokenIndex which token will be withdrawn\\n   * @param tokenAmount the amount to withdraw in the pools precision\\n   * @return the d and the new y after withdrawing one token\\n   */\\n  function calculateWithdrawOneTokenDY(\\n    Swap storage self,\\n    uint8 tokenIndex,\\n    uint256 tokenAmount,\\n    uint256 totalSupply\\n  )\\n    public\\n    view\\n    returns (\\n      uint256,\\n      uint256,\\n      uint256\\n    )\\n  {\\n    // Get the current D, then solve the stableswap invariant\\n    // y_i for D - tokenAmount\\n    uint256[] memory xp = _xp(self);\\n\\n    require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n    CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n    v.preciseA = _getAPrecise(self);\\n    v.d0 = getD(xp, v.preciseA);\\n    v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n    require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n    v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n    uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n    v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n\\n    uint256 len = xp.length;\\n    for (uint256 i; i < len; ) {\\n      uint256 xpi = xp[i];\\n      // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n      // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n      // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n      xpReduced[i] =\\n        xpi -\\n        ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n          Constants.FEE_DENOMINATOR);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n    dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n    return (dy, v.newY, xp[tokenIndex]);\\n  }\\n\\n  /**\\n   * @notice Calculate the price of a token in the pool with given\\n   * precision-adjusted balances and a particular D.\\n   *\\n   * @dev This is accomplished via solving the invariant iteratively.\\n   * See the StableSwap paper and Curve.fi implementation for further details.\\n   *\\n   * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n   * x_1**2 + b*x_1 = c\\n   * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n   *\\n   * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n   * @param tokenIndex Index of token we are calculating for.\\n   * @param xp a precision-adjusted set of pool balances. Array should be\\n   * the same cardinality as the pool.\\n   * @param d the stableswap invariant\\n   * @return the price of the token, in the same precision as in xp\\n   */\\n  function getYD(\\n    uint256 a,\\n    uint8 tokenIndex,\\n    uint256[] memory xp,\\n    uint256 d\\n  ) public pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < numTokens; ) {\\n      if (i != tokenIndex) {\\n        s += xp[i];\\n        c = (c * d) / (xp[i] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // c = c * D * D * D * ... overflow!\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n   * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n   * as the pool.\\n   * @param a the amplification coefficient * n ** (n - 1) in Constants.A_PRECISION.\\n   * See the StableSwap paper for details\\n   * @return the invariant, at the precision of the pool\\n   */\\n  function getD(uint256[] memory xp, uint256 a) public pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    uint256 s;\\n    for (uint256 i; i < numTokens; ) {\\n      s += xp[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    if (s == 0) {\\n      return 0;\\n    }\\n\\n    uint256 prevD;\\n    uint256 d = s;\\n    uint256 nA = a * numTokens;\\n\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      uint256 dP = d;\\n      for (uint256 j; j < numTokens; ) {\\n        dP = (dP * d) / (xp[j] * numTokens);\\n        // If we were to protect the division loss we would have to keep the denominator separate\\n        // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n        // dP = dP * D * D * D * ... overflow!\\n\\n        unchecked {\\n          ++j;\\n        }\\n      }\\n      prevD = d;\\n      d =\\n        (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n        ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n      if (d.within1(prevD)) {\\n        return d;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n    // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n    // function which does not rely on D.\\n    revert(\\\"D does not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Given a set of balances and precision multipliers, return the\\n   * precision-adjusted balances.\\n   *\\n   * @param balances an array of token balances, in their native precisions.\\n   * These should generally correspond with pooled tokens.\\n   *\\n   * @param precisionMultipliers an array of multipliers, corresponding to\\n   * the amounts in the balances array. When multiplied together they\\n   * should yield amounts at the pool's precision.\\n   *\\n   * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n   */\\n  function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n    internal\\n    pure\\n    returns (uint256[] memory)\\n  {\\n    uint256 numTokens = balances.length;\\n    require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n    uint256[] memory xp = new uint256[](numTokens);\\n    for (uint256 i; i < numTokens; ) {\\n      xp[i] = balances[i] * precisionMultipliers[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return xp;\\n  }\\n\\n  /**\\n   * @notice Return the precision-adjusted balances of all tokens in the pool\\n   * @param self Swap struct to read from\\n   * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n   * them to be more easily compared.\\n   */\\n  function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n    return _xp(self.balances, self.tokenPrecisionMultipliers);\\n  }\\n\\n  /**\\n   * @notice Get the virtual price, to help calculate profit\\n   * @param self Swap struct to read from\\n   * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n   */\\n  function getVirtualPrice(Swap storage self) external view returns (uint256) {\\n    uint256 d = getD(_xp(self), _getAPrecise(self));\\n    LPToken lpToken = self.lpToken;\\n    uint256 supply = lpToken.totalSupply();\\n    if (supply != 0) {\\n      return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * @notice Calculate the new balances of the tokens given the indexes of the token\\n   * that is swapped from (FROM) and the token that is swapped to (TO).\\n   * This function is used as a helper function to calculate how much TO token\\n   * the user should receive on swap.\\n   *\\n   * @param preciseA precise form of amplification coefficient\\n   * @param tokenIndexFrom index of FROM token\\n   * @param tokenIndexTo index of TO token\\n   * @param x the new total amount of FROM token\\n   * @param xp balances of the tokens in the pool\\n   * @return the amount of TO token that should remain in the pool\\n   */\\n  function getY(\\n    uint256 preciseA,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 x,\\n    uint256[] memory xp\\n  ) public pure returns (uint256) {\\n    uint256 numTokens = xp.length;\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n    uint256 d = getD(xp, preciseA);\\n    uint256 c = d;\\n    uint256 s;\\n    uint256 nA = numTokens * preciseA;\\n\\n    uint256 _x;\\n    for (uint256 i; i < numTokens; ) {\\n      if (i == tokenIndexFrom) {\\n        _x = x;\\n      } else if (i != tokenIndexTo) {\\n        _x = xp[i];\\n      } else {\\n        unchecked {\\n          ++i;\\n        }\\n        continue;\\n      }\\n      s += _x;\\n      c = (c * d) / (_x * numTokens);\\n      // If we were to protect the division loss we would have to keep the denominator separate\\n      // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n      // c = c * D * D * D * ... overflow!\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n    uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n    uint256 yPrev;\\n    uint256 y = d;\\n\\n    // iterative approximation\\n    for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n      yPrev = y;\\n      y = ((y * y) + c) / ((y * 2) + b - d);\\n      if (y.within1(yPrev)) {\\n        return y;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    revert(\\\"Approximation did not converge\\\");\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get\\n   */\\n  function calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx\\n  ) external view returns (uint256 dy) {\\n    (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n  }\\n\\n  /**\\n   * @notice Externally calculates a swap between two tokens.\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy.\\n   * @return dx the number of tokens the user have to transfer + fee\\n   */\\n  function calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy\\n  ) external view returns (uint256 dx) {\\n    (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n   * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dy, uint256 dyFee) {\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n    uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n    uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n    dy = xp[tokenIndexTo] - y - 1;\\n    dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n  }\\n\\n  /**\\n   * @notice Internally calculates a swap between two tokens.\\n   *\\n   * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n   * using the token contracts.\\n   *\\n   * @param self Swap struct to read from\\n   * @param tokenIndexFrom the token to sell\\n   * @param tokenIndexTo the token to buy\\n   * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n   * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n   */\\n  function _calculateSwapInv(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256[] memory balances\\n  ) internal view returns (uint256 dx, uint256 dxFee) {\\n    require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n    uint256[] memory xp = _xp(balances, multipliers);\\n    require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n    uint256 a = _getAPrecise(self);\\n    uint256 d0 = getD(xp, a);\\n\\n    xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n    uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n    dx = x - xp[tokenIndexFrom] + 1;\\n    dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n    dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate amount of each underlying\\n   * tokens that is returned upon burning given amount of\\n   * LP tokens\\n   *\\n   * @param amount the amount of LP tokens that would to be burned on\\n   * withdrawal\\n   * @return array of amounts of tokens user will receive\\n   */\\n  function calculateRemoveLiquidity(Swap storage self, uint256 amount) external view returns (uint256[] memory) {\\n    return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n  }\\n\\n  function _calculateRemoveLiquidity(\\n    uint256[] memory balances,\\n    uint256 amount,\\n    uint256 totalSupply\\n  ) internal pure returns (uint256[] memory) {\\n    require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n    uint256 numBalances = balances.length;\\n    uint256[] memory amounts = new uint256[](numBalances);\\n\\n    for (uint256 i; i < numBalances; ) {\\n      amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice A simple method to calculate prices from deposits or\\n   * withdrawals, excluding fees but including slippage. This is\\n   * helpful as an input into the various \\\"min\\\" parameters on calls\\n   * to fight front-running\\n   *\\n   * @dev This shouldn't be used outside frontends for user estimates.\\n   *\\n   * @param self Swap struct to read from\\n   * @param amounts an array of token amounts to deposit or withdrawal,\\n   * corresponding to pooledTokens. The amount should be in each\\n   * pooled token's native precision. If a token charges a fee on transfers,\\n   * use the amount that gets transferred after the fee.\\n   * @param deposit whether this is a deposit or a withdrawal\\n   * @return if deposit was true, total amount of lp token that will be minted and if\\n   * deposit was false, total amount of lp token that will be burned\\n   */\\n  function calculateTokenAmount(\\n    Swap storage self,\\n    uint256[] calldata amounts,\\n    bool deposit\\n  ) external view returns (uint256) {\\n    uint256 a = _getAPrecise(self);\\n    uint256[] memory balances = self.balances;\\n    uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n    uint256 numBalances = balances.length;\\n    uint256 d0 = getD(_xp(balances, multipliers), a);\\n    for (uint256 i; i < numBalances; ) {\\n      if (deposit) {\\n        balances[i] = balances[i] + amounts[i];\\n      } else {\\n        balances[i] = balances[i] - amounts[i];\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    uint256 d1 = getD(_xp(balances, multipliers), a);\\n    uint256 totalSupply = self.lpToken.totalSupply();\\n\\n    if (deposit) {\\n      return ((d1 - d0) * totalSupply) / d0;\\n    } else {\\n      return ((d0 - d1) * totalSupply) / d0;\\n    }\\n  }\\n\\n  /**\\n   * @notice return accumulated amount of admin fees of the token with given index\\n   * @param self Swap struct to read from\\n   * @param index Index of the pooled token\\n   * @return admin balance in the token's precision\\n   */\\n  function getAdminBalance(Swap storage self, uint256 index) external view returns (uint256) {\\n    require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n    return self.adminFees[index];\\n  }\\n\\n  /**\\n   * @notice internal helper function to calculate fee per token multiplier used in\\n   * swap fee calculations\\n   * @param swapFee swap fee for the tokens\\n   * @param numTokens number of tokens pooled\\n   */\\n  function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n    return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n  }\\n\\n  /*** STATE MODIFYING FUNCTIONS ***/\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dx the amount of tokens the user wants to sell\\n   * @param minDy the min amount the user would like to receive, or revert.\\n   * @return amount of token user received on swap\\n   */\\n  function swap(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dx,\\n    uint256 minDy\\n  ) external returns (uint256) {\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    uint256 dy;\\n    uint256 dyFee;\\n    uint256[] memory balances = self.balances;\\n    (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n    require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n    uint256 dyAdminFee = (dyFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n    if (dyAdminFee != 0) {\\n      self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice swap two tokens in the pool\\n   * @param self Swap struct to read from and write to\\n   * @param tokenIndexFrom the token the user wants to sell\\n   * @param tokenIndexTo the token the user wants to buy\\n   * @param dy the amount of tokens the user wants to buy\\n   * @param maxDx the max amount the user would like to send.\\n   * @return amount of token user have to transfer on swap\\n   */\\n  function swapOut(\\n    Swap storage self,\\n    uint8 tokenIndexFrom,\\n    uint8 tokenIndexTo,\\n    uint256 dy,\\n    uint256 maxDx\\n  ) external returns (uint256) {\\n    require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n    uint256 dx;\\n    uint256 dxFee;\\n    uint256[] memory balances = self.balances;\\n    (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n    require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n    uint256 dxAdminFee = (dxFee * self.adminFee) /\\n      Constants.FEE_DENOMINATOR /\\n      self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n    self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n    self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n    if (dxAdminFee != 0) {\\n      self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n    }\\n\\n    {\\n      IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n      require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n      // Reverts for fee on transfer\\n      AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n    }\\n\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n    emit TokenSwap(msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n    return dx;\\n  }\\n\\n  /**\\n   * @notice Add liquidity to the pool\\n   * @param self Swap struct to read from and write to\\n   * @param amounts the amounts of each token to add, in their native precision\\n   * @param minToMint the minimum LP tokens adding this amount of liquidity\\n   * should mint, otherwise revert. Handy for front-running mitigation\\n   * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n   * @return amount of LP token user received\\n   */\\n  function addLiquidity(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 minToMint\\n  ) external returns (uint256) {\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n    // current state\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n    if (v.totalSupply != 0) {\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n    }\\n\\n    uint256[] memory newBalances = new uint256[](numTokens);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n      // Transfer tokens first to see if a fee was charged on transfer\\n      if (amounts[i] != 0) {\\n        IERC20 token = self.pooledTokens[i];\\n        // Reverts if fee on transfer\\n        AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n      }\\n\\n      newBalances[i] = v.balances[i] + amounts[i];\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // invariant after change\\n    v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n    // updated to reflect fees and calculate the user's LP tokens\\n    v.d2 = v.d1;\\n    uint256[] memory fees = new uint256[](numTokens);\\n\\n    if (v.totalSupply != 0) {\\n      uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n      for (uint256 i; i < numTokens; ) {\\n        uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n        fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = newBalances[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        newBalances[i] = newBalances[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n    } else {\\n      // the initial depositor doesn't pay fees\\n      self.balances = newBalances;\\n    }\\n\\n    uint256 toMint;\\n    if (v.totalSupply == 0) {\\n      toMint = v.d1;\\n    } else {\\n      toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n    }\\n\\n    require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n    // mint the user's LP tokens\\n    v.lpToken.mint(msg.sender, toMint);\\n\\n    emit AddLiquidity(msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n    return toMint;\\n  }\\n\\n  /**\\n   * @notice Burn LP tokens to remove liquidity from the pool.\\n   * @dev Liquidity can always be removed, even when the pool is paused.\\n   * @param self Swap struct to read from and write to\\n   * @param amount the amount of LP tokens to burn\\n   * @param minAmounts the minimum amounts of each token in the pool\\n   * acceptable for this burn. Useful as a front-running mitigation\\n   * @return amounts of tokens the user received\\n   */\\n  function removeLiquidity(\\n    Swap storage self,\\n    uint256 amount,\\n    uint256[] calldata minAmounts\\n  ) external returns (uint256[] memory) {\\n    LPToken lpToken = self.lpToken;\\n    require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n    uint256[] memory balances = self.balances;\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n    uint256 numAmounts = amounts.length;\\n    for (uint256 i; i < numAmounts; ) {\\n      require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n      self.balances[i] = balances[i] - amounts[i];\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    lpToken.burnFrom(msg.sender, amount);\\n\\n    emit RemoveLiquidity(msg.sender, amounts, totalSupply - amount);\\n\\n    return amounts;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool all in one token.\\n   * @param self Swap struct to read from and write to\\n   * @param tokenAmount the amount of the lp tokens to burn\\n   * @param tokenIndex the index of the token you want to receive\\n   * @param minAmount the minimum amount to withdraw, otherwise revert\\n   * @return amount chosen token that user received\\n   */\\n  function removeLiquidityOneToken(\\n    Swap storage self,\\n    uint256 tokenAmount,\\n    uint8 tokenIndex,\\n    uint256 minAmount\\n  ) external returns (uint256) {\\n    LPToken lpToken = self.lpToken;\\n\\n    require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n    uint256 numTokens = self.pooledTokens.length;\\n    require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n    uint256 totalSupply = lpToken.totalSupply();\\n\\n    (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n    require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n    uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n    self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n    if (adminFee != 0) {\\n      self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n    }\\n    lpToken.burnFrom(msg.sender, tokenAmount);\\n    AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n    emit RemoveLiquidityOne(msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n    return dy;\\n  }\\n\\n  /**\\n   * @notice Remove liquidity from the pool, weighted differently than the\\n   * pool's current balances.\\n   *\\n   * @param self Swap struct to read from and write to\\n   * @param amounts how much of each token to withdraw\\n   * @param maxBurnAmount the max LP token provider is willing to pay to\\n   * remove liquidity. Useful as a front-running mitigation.\\n   * @return actual amount of LP tokens burned in the withdrawal\\n   */\\n  function removeLiquidityImbalance(\\n    Swap storage self,\\n    uint256[] memory amounts,\\n    uint256 maxBurnAmount\\n  ) external returns (uint256) {\\n    ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n      0,\\n      0,\\n      0,\\n      _getAPrecise(self),\\n      self.lpToken,\\n      0,\\n      self.balances,\\n      self.tokenPrecisionMultipliers\\n    );\\n    v.totalSupply = v.lpToken.totalSupply();\\n\\n    uint256 numTokens = self.pooledTokens.length;\\n    uint256 numAmounts = amounts.length;\\n    require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n    require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n    uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n    uint256[] memory fees = new uint256[](numTokens);\\n    {\\n      uint256[] memory balances1 = new uint256[](numTokens);\\n      v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n      for (uint256 i; i < numTokens; ) {\\n        require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n        unchecked {\\n          balances1[i] = v.balances[i] - amounts[i];\\n          ++i;\\n        }\\n      }\\n      v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n      for (uint256 i; i < numTokens; ) {\\n        {\\n          uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n          uint256 difference = idealBalance.difference(balances1[i]);\\n          fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n        }\\n        uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n        self.balances[i] = balances1[i] - adminFee;\\n        self.adminFees[i] = self.adminFees[i] + adminFee;\\n        balances1[i] = balances1[i] - fees[i];\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n\\n      v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n    }\\n    uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n    require(tokenAmount != 0, \\\"!zero amount\\\");\\n    tokenAmount = tokenAmount + 1;\\n\\n    require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n    v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n    for (uint256 i; i < numTokens; ) {\\n      AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RemoveLiquidityImbalance(msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n    return tokenAmount;\\n  }\\n\\n  /**\\n   * @notice withdraw all admin fees to a given address\\n   * @param self Swap struct to withdraw fees from\\n   * @param to Address to send the fees to\\n   */\\n  function withdrawAdminFees(Swap storage self, address to) external {\\n    uint256 numTokens = self.pooledTokens.length;\\n    for (uint256 i; i < numTokens; ) {\\n      IERC20 token = self.pooledTokens[i];\\n      uint256 balance = self.adminFees[i];\\n      if (balance != 0) {\\n        delete self.adminFees[i];\\n        AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets the admin fee\\n   * @dev adminFee cannot be higher than 100% of the swap fee\\n   * @param self Swap struct to update\\n   * @param newAdminFee new admin fee to be applied on future transactions\\n   */\\n  function setAdminFee(Swap storage self, uint256 newAdminFee) external {\\n    require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n    self.adminFee = newAdminFee;\\n\\n    emit NewAdminFee(newAdminFee);\\n  }\\n\\n  /**\\n   * @notice update the swap fee\\n   * @dev fee cannot be higher than 1% of each swap\\n   * @param self Swap struct to update\\n   * @param newSwapFee new swap fee to be applied on future transactions\\n   */\\n  function setSwapFee(Swap storage self, uint256 newSwapFee) external {\\n    require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n    self.swapFee = newSwapFee;\\n\\n    emit NewSwapFee(newSwapFee);\\n  }\\n\\n  /**\\n   * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n   * Checks if the change is too rapid, and commits the new A value only when it falls under\\n   * the limit range.\\n   * @param self Swap struct to update\\n   * @param futureA_ the new A to ramp towards\\n   * @param futureTime_ timestamp when the new A should be reached\\n   */\\n  function rampA(\\n    Swap storage self,\\n    uint256 futureA_,\\n    uint256 futureTime_\\n  ) external {\\n    require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n    require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n    require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < Constants.MAX_A\\\");\\n\\n    uint256 initialAPrecise = _getAPrecise(self);\\n    uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n\\n    if (futureAPrecise < initialAPrecise) {\\n      require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n    } else {\\n      require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n    }\\n\\n    self.initialA = initialAPrecise;\\n    self.futureA = futureAPrecise;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = futureTime_;\\n\\n    emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n  }\\n\\n  /**\\n   * @notice Stops ramping A immediately. Once this function is called, rampA()\\n   * cannot be called for another 24 hours\\n   * @param self Swap struct to update\\n   */\\n  function stopRampA(Swap storage self) external {\\n    require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n    uint256 currentA = _getAPrecise(self);\\n    self.initialA = currentA;\\n    self.futureA = currentA;\\n    self.initialATime = block.timestamp;\\n    self.futureATime = block.timestamp;\\n\\n    emit StopRampA(currentA, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x084e75c997347aeb3cb7f1be28737089b4c79e708b7eaf0f7fa3b16df1135ae2\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n  uint32 domain;\\n  bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"addLiquidity(SwapUtilsExternal.Swap storage,uint256[],uint256)":{"notice":"Add liquidity to the pool"},"calculateRemoveLiquidity(SwapUtilsExternal.Swap storage,uint256)":{"notice":"A simple method to calculate amount of each underlying tokens that is returned upon burning given amount of LP tokens"},"calculateSwap(SwapUtilsExternal.Swap storage,uint8,uint8,uint256)":{"notice":"Externally calculates a swap between two tokens."},"calculateSwapInv(SwapUtilsExternal.Swap storage,uint8,uint8,uint256)":{"notice":"Externally calculates a swap between two tokens."},"calculateTokenAmount(SwapUtilsExternal.Swap storage,uint256[],bool)":{"notice":"A simple method to calculate prices from deposits or withdrawals, excluding fees but including slippage. This is helpful as an input into the various \"min\" parameters on calls to fight front-running"},"calculateWithdrawOneToken(SwapUtilsExternal.Swap storage,uint256,uint8)":{"notice":"Calculate the dy, the amount of selected token that user receives and the fee of withdrawing in one token"},"calculateWithdrawOneTokenDY(SwapUtilsExternal.Swap storage,uint8,uint256,uint256)":{"notice":"Calculate the dy of withdrawing in one token"},"getA(SwapUtilsExternal.Swap storage)":{"notice":"Return A, the amplification coefficient * n ** (n - 1)"},"getAPrecise(SwapUtilsExternal.Swap storage)":{"notice":"Return A in its raw precision"},"getAdminBalance(SwapUtilsExternal.Swap storage,uint256)":{"notice":"return accumulated amount of admin fees of the token with given index"},"getD(uint256[],uint256)":{"notice":"Get D, the StableSwap invariant, based on a set of balances and a particular A."},"getVirtualPrice(SwapUtilsExternal.Swap storage)":{"notice":"Get the virtual price, to help calculate profit"},"getY(uint256,uint8,uint8,uint256,uint256[])":{"notice":"Calculate the new balances of the tokens given the indexes of the token that is swapped from (FROM) and the token that is swapped to (TO). This function is used as a helper function to calculate how much TO token the user should receive on swap."},"getYD(uint256,uint8,uint256[],uint256)":{"notice":"Calculate the price of a token in the pool with given precision-adjusted balances and a particular D."},"rampA(SwapUtilsExternal.Swap storage,uint256,uint256)":{"notice":"Start ramping up or down A parameter towards given futureA_ and futureTime_ Checks if the change is too rapid, and commits the new A value only when it falls under the limit range."},"removeLiquidity(SwapUtilsExternal.Swap storage,uint256,uint256[])":{"notice":"Burn LP tokens to remove liquidity from the pool."},"removeLiquidityImbalance(SwapUtilsExternal.Swap storage,uint256[],uint256)":{"notice":"Remove liquidity from the pool, weighted differently than the pool's current balances."},"removeLiquidityOneToken(SwapUtilsExternal.Swap storage,uint256,uint8,uint256)":{"notice":"Remove liquidity from the pool all in one token."},"setAdminFee(SwapUtilsExternal.Swap storage,uint256)":{"notice":"Sets the admin fee"},"setSwapFee(SwapUtilsExternal.Swap storage,uint256)":{"notice":"update the swap fee"},"stopRampA(SwapUtilsExternal.Swap storage)":{"notice":"Stops ramping A immediately. Once this function is called, rampA() cannot be called for another 24 hours"},"swap(SwapUtilsExternal.Swap storage,uint8,uint8,uint256,uint256)":{"notice":"swap two tokens in the pool"},"swapOut(SwapUtilsExternal.Swap storage,uint8,uint8,uint256,uint256)":{"notice":"swap two tokens in the pool"},"withdrawAdminFees(SwapUtilsExternal.Swap storage,address)":{"notice":"withdraw all admin fees to a given address"}},"notice":"A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.","version":1}}},"contracts/core/xreceivers/Unwrapper.sol":{"IWrapper":{"abi":[{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"transfer(address,uint256)":"a9059cbb","withdraw(uint256)":"2e1a7d4d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/xreceivers/Unwrapper.sol\":\"IWrapper\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IXReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\ninterface IXReceiver {\\n  function xReceive(\\n    bytes32 _transferId,\\n    uint256 _amount,\\n    address _asset,\\n    address _originSender,\\n    uint32 _origin,\\n    bytes memory _callData\\n  ) external returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x02ae47cb6441eb876b47ff35687ddd9f78eae75399af98815ada1ae618a3945c\",\"license\":\"UNLICENSED\"},\"contracts/core/xreceivers/Unwrapper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IXReceiver} from \\\"../connext/interfaces/IXReceiver.sol\\\";\\n\\ninterface IWrapper {\\n  function withdraw(uint256 wad) external;\\n\\n  function transfer(address dst, uint256 wad) external returns (bool);\\n}\\n\\n/**\\n * @notice A utility contract for unwrapping native tokens at the destination.\\n *\\n * @dev The `xreceive` function of contract may fail in the following ways:\\n * - unwrapping fails\\n * - the wrong asset is delivered, and transferring that fails\\n * - sending the native asset fails\\n * - the caller is not connext\\n * - the amount is zero\\n * - balance of the contract != amount\\n *\\n * In the event of these failures, funds for the crosschain transfer will be sent\\n * to this contract and will be held here. To rescue them, the owner of this contract\\n * can call `sweep` or `unwrapAndSweep` to transfer assets from this contract to a\\n * specified address.\\n *\\n * It is unlikely failures of these types will occur, so ownership of this contract\\n * should be renounced after a suitable trial period on mainnet.\\n *\\n * @dev Ownership of this contract is governed using the same ProposedOwnable setup\\n * that is prevalent throughout the system.\\n */\\ncontract Unwrapper is ProposedOwnable, IXReceiver {\\n  // ============ Libraries ============\\n\\n  using SafeERC20 for IERC20;\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted if the wrong wrapper asset is sent.\\n   * @param recipient - The target recipient address.\\n   * @param asset - The asset sent.\\n   */\\n  event WrongAsset(address recipient, address asset);\\n\\n  /**\\n   * @notice Emitted when funds are sent from this contract\\n   * @param recipient - The target recipient address.\\n   * @param asset - The asset sent.\\n   * @param amount - The amount of the asset sent\\n   */\\n  event FundsDelivered(address recipient, address asset, uint256 amount);\\n\\n  // ============ Properties ============\\n\\n  /**\\n   * @notice Connext (diamond proxy) address, the only address permissioned to call `xReceive`.\\n   */\\n  address public immutable CONNEXT;\\n\\n  /**\\n   * @notice The wrapper contract that this contract will always use for unwrapping native token.\\n   */\\n  IWrapper public immutable WRAPPER;\\n\\n  // ============= Modifiers ==============\\n\\n  /**\\n   * @notice Ensure caller is only the designated CONNEXT bridge address.\\n   */\\n  modifier onlyConnext() {\\n    require(msg.sender == CONNEXT, \\\"unwrap: !connext\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @dev The initial owner is set to the `msg.sender` of the contract.\\n   */\\n  constructor(address connext, address wrapper) ProposedOwnable() {\\n    _setOwner(msg.sender);\\n    WRAPPER = IWrapper(wrapper);\\n    CONNEXT = connext;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Sweeps the provided token from this address to a designated recipient.\\n   * @dev Only the owner of this contract can call this function.\\n   *\\n   * @dev Funds will end up on this contract IFF the external call on the Connext contract\\n   * fails and the transfer is reconciled. The `xreceive` function can fail in the following\\n   * cases:\\n   * - unwrapping fails\\n   * - transferring the asset fails\\n   * - `connext` is not the caller (should not sweep in this case)\\n   * - amount is zero (should not sweep in this case).\\n   *\\n   * It is left to the admin to determine the proper amounts to sweep.\\n   *\\n   * @param recipient The address to send the funds to\\n   * @param asset The asset to send from the contract to recipient\\n   * @param amount Amount of asset to sweep from contract\\n   */\\n  function sweep(\\n    address recipient,\\n    address asset,\\n    uint256 amount\\n  ) public onlyOwner {\\n    // Sanity check: amount is non-zero (otherwise, what are we unwrapping?).\\n    require(amount != 0, \\\"sweep: !amount\\\");\\n\\n    // Send funds to recipient\\n    _sweep(recipient, asset, amount);\\n  }\\n\\n  /**\\n   * @notice Unwraps and sweeps the provided token from this address to a designated recipient.\\n   * @dev Only the owner of this contract can call this function.\\n   *\\n   * @dev Funds will end up on this contract IFF the external call on the Connext contract\\n   * fails and the transfer is reconciled. The `xreceive` function can fail in the following\\n   * cases:\\n   * - unwrapping fails\\n   * - transferring the asset fails\\n   * - `connext` is not the caller (should not sweep in this case)\\n   * - amount is zero (should not sweep in this case).\\n   *\\n   * It is left to the admin to determine the proper amounts to sweep.\\n   *\\n   * @param recipient The address to send the funds to\\n   * @param amount Amount of asset to sweep from contract\\n   */\\n  function unwrapAndSweep(address recipient, uint256 amount) public onlyOwner {\\n    // Sanity check: amount is non-zero (otherwise, what are we unwrapping?).\\n    require(amount != 0, \\\"unwrapAndSweep: !amount\\\");\\n\\n    // Withdraw from wrapper\\n    WRAPPER.withdraw(amount);\\n\\n    // Send funds to recipient\\n    _sweep(recipient, address(0), amount);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice xReceive implementation for receiving cross-chain calls from Connext.\\n   * @dev We mostly ignore `originSender` argument: this could be a contract or EOA, but our\\n   * recipient should be specified in our `callData`! We only fallback to using `originSender` IFF\\n   * recipient argument is missing.\\n   * @dev If unwrapping (i.e. `withdraw`) fails, will emit UnwrappingFailed event! We will attempt\\n   * to transfer the wrapped tokens to the\\n   *\\n   * @param amount - The amount to transfer. Should NOT be 0, or this call will revert.\\n   * @param asset - This *should be* the wrapper contract address, an ERC20 token approved by the\\n   * Connext bridge. IFF this does NOT match the WRAPPER contract address stored in this contract,\\n   * we'll try to `IERC20.transfer` the assets to the intended recipient.\\n   * @param callData - Should be a tuple of just `(address)`. The address is the intended\\n   * recipient of the unwrapped native tokens. Whether it's ether or wether (i.e. whether it's\\n   * wrapped native tokens or native tokens) depends on whether we succeeded in the unwrapping\\n   * process.\\n   */\\n  function xReceive(\\n    bytes32, // transferId\\n    uint256 amount,\\n    address asset,\\n    address, // originSender\\n    uint32, // origin domain\\n    bytes memory callData\\n  ) external onlyConnext returns (bytes memory) {\\n    // Sanity check: amount is non-zero (otherwise, what are we unwrapping?).\\n    require(amount != 0, \\\"unwrap: !amount\\\");\\n\\n    // Get the target recipient, which should be in the callData.\\n    // NOTE: If recipient is the zero address, funds will be burned!\\n    address recipient = abi.decode(callData, (address));\\n\\n    // Sanity check: asset we've received matches our target wrapper.\\n    if (asset != address(WRAPPER)) {\\n      emit WrongAsset(recipient, asset);\\n      // If the delivered asset does not match our target wrapper, we try sending it anyway.\\n      _sweep(recipient, asset, amount);\\n      return bytes(\\\"\\\");\\n    }\\n\\n    // We've received wrapped native tokens; withdraw native tokens from the wrapper contract.\\n    WRAPPER.withdraw(amount);\\n\\n    // Send to recipient\\n    _sweep(recipient, address(0), amount);\\n  }\\n\\n  /**\\n   * @notice Fallback function so this contract can receive the funds from WETH\\n   */\\n  receive() external payable {}\\n\\n  // ============ Internal Functions ============\\n\\n  /**\\n   * @notice Sweeps the provided token from this address to a designated recipient.\\n   * @dev Emits the `FundsDelivered` event\\n   *\\n   * @param recipient The address to send the funds to\\n   * @param asset The asset (or address(0) for native) to send from the contract to recipient\\n   * @param amount Amount of asset to sweep from contract\\n   */\\n  function _sweep(\\n    address recipient,\\n    address asset,\\n    uint256 amount\\n  ) internal {\\n    if (asset == address(0)) {\\n      Address.sendValue(payable(recipient), amount);\\n    } else {\\n      IERC20(asset).transfer(recipient, amount);\\n    }\\n    emit FundsDelivered(recipient, asset, amount);\\n  }\\n}\\n\",\"keccak256\":\"0x371665aa8145fbc9d4784f0da97046058a30983480c69fd58d0dc719b37323c5\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}},"Unwrapper":{"abi":[{"inputs":[{"internalType":"address","name":"connext","type":"address"},{"internalType":"address","name":"wrapper","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsDelivered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"address","name":"asset","type":"address"}],"name":"WrongAsset","type":"event"},{"inputs":[],"name":"CONNEXT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WRAPPER","outputs":[{"internalType":"contract IWrapper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unwrapAndSweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"bytes","name":"callData","type":"bytes"}],"name":"xReceive","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"details":"The `xreceive` function of contract may fail in the following ways: - unwrapping fails - the wrong asset is delivered, and transferring that fails - sending the native asset fails - the caller is not connext - the amount is zero - balance of the contract != amount In the event of these failures, funds for the crosschain transfer will be sent to this contract and will be held here. To rescue them, the owner of this contract can call `sweep` or `unwrapAndSweep` to transfer assets from this contract to a specified address. It is unlikely failures of these types will occur, so ownership of this contract should be renounced after a suitable trial period on mainnet.Ownership of this contract is governed using the same ProposedOwnable setup that is prevalent throughout the system.","events":{"FundsDelivered(address,address,uint256)":{"params":{"amount":"- The amount of the asset sent","asset":"- The asset sent.","recipient":"- The target recipient address."}},"WrongAsset(address,address)":{"params":{"asset":"- The asset sent.","recipient":"- The target recipient address."}}},"kind":"dev","methods":{"constructor":{"details":"The initial owner is set to the `msg.sender` of the contract."},"sweep(address,address,uint256)":{"details":"Only the owner of this contract can call this function.Funds will end up on this contract IFF the external call on the Connext contract fails and the transfer is reconciled. The `xreceive` function can fail in the following cases: - unwrapping fails - transferring the asset fails - `connext` is not the caller (should not sweep in this case) - amount is zero (should not sweep in this case). It is left to the admin to determine the proper amounts to sweep.","params":{"amount":"Amount of asset to sweep from contract","asset":"The asset to send from the contract to recipient","recipient":"The address to send the funds to"}},"unwrapAndSweep(address,uint256)":{"details":"Only the owner of this contract can call this function.Funds will end up on this contract IFF the external call on the Connext contract fails and the transfer is reconciled. The `xreceive` function can fail in the following cases: - unwrapping fails - transferring the asset fails - `connext` is not the caller (should not sweep in this case) - amount is zero (should not sweep in this case). It is left to the admin to determine the proper amounts to sweep.","params":{"amount":"Amount of asset to sweep from contract","recipient":"The address to send the funds to"}},"xReceive(bytes32,uint256,address,address,uint32,bytes)":{"details":"We mostly ignore `originSender` argument: this could be a contract or EOA, but our recipient should be specified in our `callData`! We only fallback to using `originSender` IFF recipient argument is missing.If unwrapping (i.e. `withdraw`) fails, will emit UnwrappingFailed event! We will attempt to transfer the wrapped tokens to the","params":{"amount":"- The amount to transfer. Should NOT be 0, or this call will revert.","asset":"- This *should be* the wrapper contract address, an ERC20 token approved by the Connext bridge. IFF this does NOT match the WRAPPER contract address stored in this contract, we'll try to `IERC20.transfer` the assets to the intended recipient.","callData":"- Should be a tuple of just `(address)`. The address is the intended recipient of the unwrapped native tokens. Whether it's ether or wether (i.e. whether it's wrapped native tokens or native tokens) depends on whether we succeeded in the unwrapping process."}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_37826":{"entryPoint":null,"id":37826,"parameterSlots":2,"returnSlots":0},"@_setOwner_49908":{"entryPoint":79,"id":49908,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":180,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_address_fromMemory":{"entryPoint":208,"id":null,"parameterSlots":2,"returnSlots":2}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:491:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"74:117:181","statements":[{"nodeType":"YulAssignment","src":"84:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"99:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"93:5:181"},"nodeType":"YulFunctionCall","src":"93:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"84:5:181"}]},{"body":{"nodeType":"YulBlock","src":"169:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"178:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"181:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"171:6:181"},"nodeType":"YulFunctionCall","src":"171:12:181"},"nodeType":"YulExpressionStatement","src":"171:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"128:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"139:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"154:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"150:3:181"},"nodeType":"YulFunctionCall","src":"150:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"163:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"146:3:181"},"nodeType":"YulFunctionCall","src":"146:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"135:3:181"},"nodeType":"YulFunctionCall","src":"135:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"125:2:181"},"nodeType":"YulFunctionCall","src":"125:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"118:6:181"},"nodeType":"YulFunctionCall","src":"118:50:181"},"nodeType":"YulIf","src":"115:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"53:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"64:5:181","type":""}],"src":"14:177:181"},{"body":{"nodeType":"YulBlock","src":"294:195:181","statements":[{"body":{"nodeType":"YulBlock","src":"340:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"349:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"352:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"342:6:181"},"nodeType":"YulFunctionCall","src":"342:12:181"},"nodeType":"YulExpressionStatement","src":"342:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"315:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"324:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"311:3:181"},"nodeType":"YulFunctionCall","src":"311:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"336:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"307:3:181"},"nodeType":"YulFunctionCall","src":"307:32:181"},"nodeType":"YulIf","src":"304:52:181"},{"nodeType":"YulAssignment","src":"365:50:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"405:9:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"375:29:181"},"nodeType":"YulFunctionCall","src":"375:40:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"365:6:181"}]},{"nodeType":"YulAssignment","src":"424:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"468:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"479:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"464:3:181"},"nodeType":"YulFunctionCall","src":"464:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"434:29:181"},"nodeType":"YulFunctionCall","src":"434:49:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"424:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"252:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"263:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"275:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"283:6:181","type":""}],"src":"196:293:181"}]},"contents":"{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60c060405234801561001057600080fd5b50604051610e83380380610e8383398101604081905261002f916100d0565b6100383361004f565b6001600160a01b0390811660a05216608052610103565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b80516001600160a01b03811681146100cb57600080fd5b919050565b600080604083850312156100e357600080fd5b6100ec836100b4565b91506100fa602084016100b4565b90509250929050565b60805160a051610d3f610144600039600081816102570152818161057d015281816106ba015261076b01526000818161018701526105fe0152610d3f6000f3fe6080604052600436106100c65760003560e01c8063b1f8100d1161007f578063d232c22011610059578063d232c220146101fc578063e03720c014610225578063e1eb13c114610245578063fd614f411461027957600080fd5b8063b1f8100d146101a9578063c5b350df146101c9578063d1851c92146101de57600080fd5b80633cf52ffb146100d257806362c06767146100f65780636a42b8f814610118578063715018a61461012e5780638da5cb5b1461014357806392f75cb21461017557600080fd5b366100cd57005b600080fd5b3480156100de57600080fd5b506002545b6040519081526020015b60405180910390f35b34801561010257600080fd5b50610116610111366004610aaa565b6102a6565b005b34801561012457600080fd5b5062093a806100e3565b34801561013a57600080fd5b50610116610327565b34801561014f57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016100ed565b34801561018157600080fd5b5061015d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101b557600080fd5b506101166101c4366004610aeb565b6103db565b3480156101d557600080fd5b5061011661047c565b3480156101ea57600080fd5b506001546001600160a01b031661015d565b34801561020857600080fd5b506000546040516001600160a01b039091161581526020016100ed565b34801561023157600080fd5b50610116610240366004610b0f565b6104ec565b34801561025157600080fd5b5061015d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561028557600080fd5b50610299610294366004610b51565b6105f1565b6040516100ed9190610c55565b6000546001600160a01b031633146102d1576040516311a8a1bb60e31b815260040160405180910390fd5b806000036103175760405162461bcd60e51b815260206004820152600e60248201526d1cddd9595c0e8808585b5bdd5b9d60921b60448201526064015b60405180910390fd5b6103228383836107e7565b505050565b6000546001600160a01b03163314610352576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426103649190610ca3565b11610382576040516324e0285f60e21b815260040160405180910390fd5b6002546000036103a557604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b0316156103cf576040516323295ef960e01b815260040160405180910390fd5b6103d960006108c9565b565b6000546001600160a01b03163314610406576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610424575060025415155b15610442576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361047057604051634a2fb73f60e11b815260040160405180910390fd5b6104798161092e565b50565b6001546001600160a01b031633146104a7576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426104b99190610ca3565b116104d7576040516324e0285f60e21b815260040160405180910390fd5b6001546103d9906001600160a01b03166108c9565b6000546001600160a01b03163314610517576040516311a8a1bb60e31b815260040160405180910390fd5b806000036105675760405162461bcd60e51b815260206004820152601760248201527f756e77726170416e6453776565703a2021616d6f756e74000000000000000000604482015260640161030e565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156105c957600080fd5b505af11580156105dd573d6000803e3d6000fd5b505050506105ed826000836107e7565b5050565b6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461065e5760405162461bcd60e51b815260206004820152601060248201526f1d5b9ddc985c0e880858dbdb9b995e1d60821b604482015260640161030e565b856000036106a05760405162461bcd60e51b815260206004820152600f60248201526e1d5b9ddc985c0e8808585b5bdd5b9d608a1b604482015260640161030e565b6000828060200190518101906106b69190610cca565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161461075557604080516001600160a01b038084168252881660208201527f9f79eedfea1da16b88bd43866c5385861173a9895ac74e1628662f7f2192962e910160405180910390a161073f8187896107e7565b50506040805160208101909152600081526107dd565b604051632e1a7d4d60e01b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156107b757600080fd5b505af11580156107cb573d6000803e3d6000fd5b505050506107db816000896107e7565b505b9695505050505050565b6001600160a01b038216610804576107ff838261097c565b610879565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820183905283169063a9059cbb906044016020604051808303816000875af1158015610853573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108779190610ce7565b505b604080516001600160a01b038086168252841660208201529081018290527f91ebf95f2932ae1bb84918555319ba9cf24fd2359b03932337af5599f2553fa99060600160405180910390a1505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b804710156109cc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161030e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610a19576040519150601f19603f3d011682016040523d82523d6000602084013e610a1e565b606091505b50509050806103225760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161030e565b6001600160a01b038116811461047957600080fd5b600080600060608486031215610abf57600080fd5b8335610aca81610a95565b92506020840135610ada81610a95565b929592945050506040919091013590565b600060208284031215610afd57600080fd5b8135610b0881610a95565b9392505050565b60008060408385031215610b2257600080fd5b8235610b2d81610a95565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215610b6a57600080fd5b86359550602087013594506040870135610b8381610a95565b93506060870135610b9381610a95565b9250608087013563ffffffff81168114610bac57600080fd5b915060a087013567ffffffffffffffff80821115610bc957600080fd5b818901915089601f830112610bdd57600080fd5b813581811115610bef57610bef610b3b565b604051601f8201601f19908116603f01168101908382118183101715610c1757610c17610b3b565b816040528281528c6020848701011115610c3057600080fd5b8260208601602083013760006020848301015280955050505050509295509295509295565b600060208083528351808285015260005b81811015610c8257858101830151858201604001528201610c66565b506000604082860101526040601f19601f8301168501019250505092915050565b81810381811115610cc457634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610cdc57600080fd5b8151610b0881610a95565b600060208284031215610cf957600080fd5b81518015158114610b0857600080fdfea2646970667358221220f6b28a7547d9416268a270b6b949192890b994c51b055287f898d24006f507bb64736f6c63430008110033","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xE83 CODESIZE SUB DUP1 PUSH2 0xE83 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0xD0 JUMP JUMPDEST PUSH2 0x38 CALLER PUSH2 0x4F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0xA0 MSTORE AND PUSH1 0x80 MSTORE PUSH2 0x103 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xEC DUP4 PUSH2 0xB4 JUMP JUMPDEST SWAP2 POP PUSH2 0xFA PUSH1 0x20 DUP5 ADD PUSH2 0xB4 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0xD3F PUSH2 0x144 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x257 ADD MSTORE DUP2 DUP2 PUSH2 0x57D ADD MSTORE DUP2 DUP2 PUSH2 0x6BA ADD MSTORE PUSH2 0x76B ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x187 ADD MSTORE PUSH2 0x5FE ADD MSTORE PUSH2 0xD3F PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC6 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB1F8100D GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xD232C220 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x1FC JUMPI DUP1 PUSH4 0xE03720C0 EQ PUSH2 0x225 JUMPI DUP1 PUSH4 0xE1EB13C1 EQ PUSH2 0x245 JUMPI DUP1 PUSH4 0xFD614F41 EQ PUSH2 0x279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x1A9 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x1C9 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x1DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0xD2 JUMPI DUP1 PUSH4 0x62C06767 EQ PUSH2 0xF6 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x118 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x12E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x143 JUMPI DUP1 PUSH4 0x92F75CB2 EQ PUSH2 0x175 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0xCD JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x102 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x116 PUSH2 0x111 CALLDATASIZE PUSH1 0x4 PUSH2 0xAAA JUMP JUMPDEST PUSH2 0x2A6 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x124 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0xE3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x116 PUSH2 0x327 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x181 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15D PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x116 PUSH2 0x1C4 CALLDATASIZE PUSH1 0x4 PUSH2 0xAEB JUMP JUMPDEST PUSH2 0x3DB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x116 PUSH2 0x47C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x15D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x208 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x116 PUSH2 0x240 CALLDATASIZE PUSH1 0x4 PUSH2 0xB0F JUMP JUMPDEST PUSH2 0x4EC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15D PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x299 PUSH2 0x294 CALLDATASIZE PUSH1 0x4 PUSH2 0xB51 JUMP JUMPDEST PUSH2 0x5F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xED SWAP2 SWAP1 PUSH2 0xC55 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2D1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x317 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x1CDDD9595C0E8808585B5BDD5B9D PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x322 DUP4 DUP4 DUP4 PUSH2 0x7E7 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x352 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x364 SWAP2 SWAP1 PUSH2 0xCA3 JUMP JUMPDEST GT PUSH2 0x382 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x3A5 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x3CF JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3D9 PUSH1 0x0 PUSH2 0x8C9 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x406 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x424 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x442 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x470 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x479 DUP2 PUSH2 0x92E JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4A7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x4B9 SWAP2 SWAP1 PUSH2 0xCA3 JUMP JUMPDEST GT PUSH2 0x4D7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x3D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x8C9 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x517 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x567 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x756E77726170416E6453776565703A2021616D6F756E74000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x30E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2E1A7D4D SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5DD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x5ED DUP3 PUSH1 0x0 DUP4 PUSH2 0x7E7 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x60 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x65E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x1D5B9DDC985C0E880858DBDB9B995E1D PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x30E JUMP JUMPDEST DUP6 PUSH1 0x0 SUB PUSH2 0x6A0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1D5B9DDC985C0E8808585B5BDD5B9D PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x30E JUMP JUMPDEST PUSH1 0x0 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x6B6 SWAP2 SWAP1 PUSH2 0xCCA JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x755 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND DUP3 MSTORE DUP9 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x9F79EEDFEA1DA16B88BD43866C5385861173A9895AC74E1628662F7F2192962E SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x73F DUP2 DUP8 DUP10 PUSH2 0x7E7 JUMP JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH2 0x7DD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2E1A7D4D SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x7DB DUP2 PUSH1 0x0 DUP10 PUSH2 0x7E7 JUMP JUMPDEST POP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x804 JUMPI PUSH2 0x7FF DUP4 DUP3 PUSH2 0x97C JUMP JUMPDEST PUSH2 0x879 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE DUP4 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x853 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x877 SWAP2 SWAP1 PUSH2 0xCE7 JUMP JUMPDEST POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0x91EBF95F2932AE1BB84918555319BA9CF24FD2359B03932337AF5599F2553FA9 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x9CC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x30E JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xA19 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xA1E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x322 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x479 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0xACA DUP2 PUSH2 0xA95 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0xADA DUP2 PUSH2 0xA95 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xB08 DUP2 PUSH2 0xA95 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xB22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0xB2D DUP2 PUSH2 0xA95 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0xB6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0xB83 DUP2 PUSH2 0xA95 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0xB93 DUP2 PUSH2 0xA95 JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xBAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH1 0xA0 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xBC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP10 ADD SWAP2 POP DUP10 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xBDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xBEF JUMPI PUSH2 0xBEF PUSH2 0xB3B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xC17 JUMPI PUSH2 0xC17 PUSH2 0xB3B JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP13 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0xC30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC82 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xC66 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xCC4 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xB08 DUP2 PUSH2 0xA95 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xB08 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF6 0xB2 DUP11 PUSH22 0x47D9416268A270B6B949192890B994C51B055287F898 0xD2 BLOCKHASH MOD CREATE2 SMOD 0xBB PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"1504:6817:111:-:0;;;2861:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2931:21:::1;2941:10;2931:9;:21::i;:::-;-1:-1:-1::0;;;;;2958:27:111;;::::1;;::::0;2991:17:::1;;::::0;1504:6817;;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;14:177:181:-;93:13;;-1:-1:-1;;;;;135:31:181;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;:::-;1504:6817:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@CONNEXT_37783":{"entryPoint":null,"id":37783,"parameterSlots":0,"returnSlots":0},"@WRAPPER_37787":{"entryPoint":null,"id":37787,"parameterSlots":0,"returnSlots":0},"@_37967":{"entryPoint":null,"id":37967,"parameterSlots":0,"returnSlots":0},"@_setOwner_49908":{"entryPoint":2249,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":2350,"id":49927,"parameterSlots":1,"returnSlots":0},"@_sweep_38011":{"entryPoint":2023,"id":38011,"parameterSlots":3,"returnSlots":0},"@acceptProposedOwner_49887":{"entryPoint":1148,"id":49887,"parameterSlots":0,"returnSlots":0},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@proposeNewOwner_49841":{"entryPoint":987,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_49874":{"entryPoint":807,"id":49874,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@sendValue_11206":{"entryPoint":2428,"id":11206,"parameterSlots":2,"returnSlots":0},"@sweep_37852":{"entryPoint":678,"id":37852,"parameterSlots":3,"returnSlots":0},"@unwrapAndSweep_37885":{"entryPoint":1260,"id":37885,"parameterSlots":2,"returnSlots":0},"@xReceive_37962":{"entryPoint":1521,"id":37962,"parameterSlots":6,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":2795,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_payable_fromMemory":{"entryPoint":3274,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":2730,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":2831,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":3303,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_uint256t_addresst_addresst_uint32t_bytes_memory_ptr":{"entryPoint":2897,"id":null,"parameterSlots":2,"returnSlots":6},"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":3157,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IWrapper_$37755__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_563eccbd29ff954ff175621bfcdb95dc0390d7ad04bfb287ad7ab7da8b297fb5__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_85be980d4507f0657beebd307f4d94376373ccb3a8c00b1d7f4054754d3deb94__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cdadfa8ff838c2b763346808853241e42c0873538a85ca34705f70db22f5030b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fb99164e55f7b3308ec747cacc565501aaa56f31de542fdcfd357ae2932ce29e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":3235,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x41":{"entryPoint":2875,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":2709,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:8307:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:76:181","statements":[{"nodeType":"YulAssignment","src":"125:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:181"},"nodeType":"YulFunctionCall","src":"133:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"178:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:181"},"nodeType":"YulFunctionCall","src":"160:25:181"},"nodeType":"YulExpressionStatement","src":"160:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:181","type":""}],"src":"14:177:181"},{"body":{"nodeType":"YulBlock","src":"241:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"305:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"314:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"317:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"307:6:181"},"nodeType":"YulFunctionCall","src":"307:12:181"},"nodeType":"YulExpressionStatement","src":"307:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"264:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"275:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"290:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"295:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"286:3:181"},"nodeType":"YulFunctionCall","src":"286:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"299:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"282:3:181"},"nodeType":"YulFunctionCall","src":"282:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"271:3:181"},"nodeType":"YulFunctionCall","src":"271:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"261:2:181"},"nodeType":"YulFunctionCall","src":"261:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"254:6:181"},"nodeType":"YulFunctionCall","src":"254:50:181"},"nodeType":"YulIf","src":"251:70:181"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"230:5:181","type":""}],"src":"196:131:181"},{"body":{"nodeType":"YulBlock","src":"436:352:181","statements":[{"body":{"nodeType":"YulBlock","src":"482:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"491:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"494:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"484:6:181"},"nodeType":"YulFunctionCall","src":"484:12:181"},"nodeType":"YulExpressionStatement","src":"484:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"457:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"466:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"453:3:181"},"nodeType":"YulFunctionCall","src":"453:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"478:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"449:3:181"},"nodeType":"YulFunctionCall","src":"449:32:181"},"nodeType":"YulIf","src":"446:52:181"},{"nodeType":"YulVariableDeclaration","src":"507:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"533:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"520:12:181"},"nodeType":"YulFunctionCall","src":"520:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"511:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"577:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"552:24:181"},"nodeType":"YulFunctionCall","src":"552:31:181"},"nodeType":"YulExpressionStatement","src":"552:31:181"},{"nodeType":"YulAssignment","src":"592:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"602:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"592:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"616:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"648:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"659:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"644:3:181"},"nodeType":"YulFunctionCall","src":"644:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"631:12:181"},"nodeType":"YulFunctionCall","src":"631:32:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"620:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"697:7:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"672:24:181"},"nodeType":"YulFunctionCall","src":"672:33:181"},"nodeType":"YulExpressionStatement","src":"672:33:181"},{"nodeType":"YulAssignment","src":"714:17:181","value":{"name":"value_1","nodeType":"YulIdentifier","src":"724:7:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"714:6:181"}]},{"nodeType":"YulAssignment","src":"740:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"767:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"778:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"763:3:181"},"nodeType":"YulFunctionCall","src":"763:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"750:12:181"},"nodeType":"YulFunctionCall","src":"750:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"740:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"386:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"397:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"409:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"417:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"425:6:181","type":""}],"src":"332:456:181"},{"body":{"nodeType":"YulBlock","src":"894:102:181","statements":[{"nodeType":"YulAssignment","src":"904:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"916:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"927:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"912:3:181"},"nodeType":"YulFunctionCall","src":"912:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"904:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"946:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"961:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"977:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"982:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"973:3:181"},"nodeType":"YulFunctionCall","src":"973:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"986:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"969:3:181"},"nodeType":"YulFunctionCall","src":"969:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"957:3:181"},"nodeType":"YulFunctionCall","src":"957:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"939:6:181"},"nodeType":"YulFunctionCall","src":"939:51:181"},"nodeType":"YulExpressionStatement","src":"939:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"863:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"874:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"885:4:181","type":""}],"src":"793:203:181"},{"body":{"nodeType":"YulBlock","src":"1071:177:181","statements":[{"body":{"nodeType":"YulBlock","src":"1117:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1126:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1129:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1119:6:181"},"nodeType":"YulFunctionCall","src":"1119:12:181"},"nodeType":"YulExpressionStatement","src":"1119:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1092:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1101:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1088:3:181"},"nodeType":"YulFunctionCall","src":"1088:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1113:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1084:3:181"},"nodeType":"YulFunctionCall","src":"1084:32:181"},"nodeType":"YulIf","src":"1081:52:181"},{"nodeType":"YulVariableDeclaration","src":"1142:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1168:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1155:12:181"},"nodeType":"YulFunctionCall","src":"1155:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1146:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1212:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1187:24:181"},"nodeType":"YulFunctionCall","src":"1187:31:181"},"nodeType":"YulExpressionStatement","src":"1187:31:181"},{"nodeType":"YulAssignment","src":"1227:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1237:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1227:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1037:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1048:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1060:6:181","type":""}],"src":"1001:247:181"},{"body":{"nodeType":"YulBlock","src":"1348:92:181","statements":[{"nodeType":"YulAssignment","src":"1358:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1370:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1381:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1366:3:181"},"nodeType":"YulFunctionCall","src":"1366:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1358:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1400:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1425:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1418:6:181"},"nodeType":"YulFunctionCall","src":"1418:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1411:6:181"},"nodeType":"YulFunctionCall","src":"1411:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1393:6:181"},"nodeType":"YulFunctionCall","src":"1393:41:181"},"nodeType":"YulExpressionStatement","src":"1393:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1317:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1328:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1339:4:181","type":""}],"src":"1253:187:181"},{"body":{"nodeType":"YulBlock","src":"1532:228:181","statements":[{"body":{"nodeType":"YulBlock","src":"1578:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1587:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1590:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1580:6:181"},"nodeType":"YulFunctionCall","src":"1580:12:181"},"nodeType":"YulExpressionStatement","src":"1580:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1553:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1562:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1549:3:181"},"nodeType":"YulFunctionCall","src":"1549:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1574:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1545:3:181"},"nodeType":"YulFunctionCall","src":"1545:32:181"},"nodeType":"YulIf","src":"1542:52:181"},{"nodeType":"YulVariableDeclaration","src":"1603:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1629:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1616:12:181"},"nodeType":"YulFunctionCall","src":"1616:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1607:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1673:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1648:24:181"},"nodeType":"YulFunctionCall","src":"1648:31:181"},"nodeType":"YulExpressionStatement","src":"1648:31:181"},{"nodeType":"YulAssignment","src":"1688:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1698:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1688:6:181"}]},{"nodeType":"YulAssignment","src":"1712:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1739:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1750:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1735:3:181"},"nodeType":"YulFunctionCall","src":"1735:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1722:12:181"},"nodeType":"YulFunctionCall","src":"1722:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1712:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1490:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1501:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1513:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1521:6:181","type":""}],"src":"1445:315:181"},{"body":{"nodeType":"YulBlock","src":"1884:102:181","statements":[{"nodeType":"YulAssignment","src":"1894:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1906:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1917:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1902:3:181"},"nodeType":"YulFunctionCall","src":"1902:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1894:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1936:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1951:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1967:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1972:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1963:3:181"},"nodeType":"YulFunctionCall","src":"1963:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1976:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1959:3:181"},"nodeType":"YulFunctionCall","src":"1959:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1947:3:181"},"nodeType":"YulFunctionCall","src":"1947:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1929:6:181"},"nodeType":"YulFunctionCall","src":"1929:51:181"},"nodeType":"YulExpressionStatement","src":"1929:51:181"}]},"name":"abi_encode_tuple_t_contract$_IWrapper_$37755__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1853:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1864:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1875:4:181","type":""}],"src":"1765:221:181"},{"body":{"nodeType":"YulBlock","src":"2023:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2040:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2047:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2052:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2043:3:181"},"nodeType":"YulFunctionCall","src":"2043:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2033:6:181"},"nodeType":"YulFunctionCall","src":"2033:31:181"},"nodeType":"YulExpressionStatement","src":"2033:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2080:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2083:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2073:6:181"},"nodeType":"YulFunctionCall","src":"2073:15:181"},"nodeType":"YulExpressionStatement","src":"2073:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2104:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2107:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2097:6:181"},"nodeType":"YulFunctionCall","src":"2097:15:181"},"nodeType":"YulExpressionStatement","src":"2097:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1991:127:181"},{"body":{"nodeType":"YulBlock","src":"2286:1345:181","statements":[{"body":{"nodeType":"YulBlock","src":"2333:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2342:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2345:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2335:6:181"},"nodeType":"YulFunctionCall","src":"2335:12:181"},"nodeType":"YulExpressionStatement","src":"2335:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2307:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2316:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2303:3:181"},"nodeType":"YulFunctionCall","src":"2303:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2328:3:181","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2299:3:181"},"nodeType":"YulFunctionCall","src":"2299:33:181"},"nodeType":"YulIf","src":"2296:53:181"},{"nodeType":"YulAssignment","src":"2358:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2381:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2368:12:181"},"nodeType":"YulFunctionCall","src":"2368:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2358:6:181"}]},{"nodeType":"YulAssignment","src":"2400:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2427:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2438:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2423:3:181"},"nodeType":"YulFunctionCall","src":"2423:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2410:12:181"},"nodeType":"YulFunctionCall","src":"2410:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2400:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2451:45:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2481:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2492:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2477:3:181"},"nodeType":"YulFunctionCall","src":"2477:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2464:12:181"},"nodeType":"YulFunctionCall","src":"2464:32:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2455:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2530:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2505:24:181"},"nodeType":"YulFunctionCall","src":"2505:31:181"},"nodeType":"YulExpressionStatement","src":"2505:31:181"},{"nodeType":"YulAssignment","src":"2545:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"2555:5:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2545:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2569:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2601:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2612:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2597:3:181"},"nodeType":"YulFunctionCall","src":"2597:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2584:12:181"},"nodeType":"YulFunctionCall","src":"2584:32:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2573:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2650:7:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2625:24:181"},"nodeType":"YulFunctionCall","src":"2625:33:181"},"nodeType":"YulExpressionStatement","src":"2625:33:181"},{"nodeType":"YulAssignment","src":"2667:17:181","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2677:7:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2667:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2693:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2725:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2736:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2721:3:181"},"nodeType":"YulFunctionCall","src":"2721:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2708:12:181"},"nodeType":"YulFunctionCall","src":"2708:33:181"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"2697:7:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2799:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2808:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2811:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2801:6:181"},"nodeType":"YulFunctionCall","src":"2801:12:181"},"nodeType":"YulExpressionStatement","src":"2801:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"2763:7:181"},{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"2776:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"2785:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2772:3:181"},"nodeType":"YulFunctionCall","src":"2772:24:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2760:2:181"},"nodeType":"YulFunctionCall","src":"2760:37:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2753:6:181"},"nodeType":"YulFunctionCall","src":"2753:45:181"},"nodeType":"YulIf","src":"2750:65:181"},{"nodeType":"YulAssignment","src":"2824:17:181","value":{"name":"value_2","nodeType":"YulIdentifier","src":"2834:7:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2824:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2850:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2881:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2892:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2877:3:181"},"nodeType":"YulFunctionCall","src":"2877:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2864:12:181"},"nodeType":"YulFunctionCall","src":"2864:33:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2854:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2906:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2916:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2910:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2961:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2970:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2973:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2963:6:181"},"nodeType":"YulFunctionCall","src":"2963:12:181"},"nodeType":"YulExpressionStatement","src":"2963:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2949:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2957:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2946:2:181"},"nodeType":"YulFunctionCall","src":"2946:14:181"},"nodeType":"YulIf","src":"2943:34:181"},{"nodeType":"YulVariableDeclaration","src":"2986:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3000:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"3011:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2996:3:181"},"nodeType":"YulFunctionCall","src":"2996:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2990:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3066:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3075:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3078:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3068:6:181"},"nodeType":"YulFunctionCall","src":"3068:12:181"},"nodeType":"YulExpressionStatement","src":"3068:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3045:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3049:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3041:3:181"},"nodeType":"YulFunctionCall","src":"3041:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3056:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3037:3:181"},"nodeType":"YulFunctionCall","src":"3037:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3030:6:181"},"nodeType":"YulFunctionCall","src":"3030:35:181"},"nodeType":"YulIf","src":"3027:55:181"},{"nodeType":"YulVariableDeclaration","src":"3091:26:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3114:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3101:12:181"},"nodeType":"YulFunctionCall","src":"3101:16:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"3095:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3140:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"3142:16:181"},"nodeType":"YulFunctionCall","src":"3142:18:181"},"nodeType":"YulExpressionStatement","src":"3142:18:181"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3132:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3136:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3129:2:181"},"nodeType":"YulFunctionCall","src":"3129:10:181"},"nodeType":"YulIf","src":"3126:36:181"},{"nodeType":"YulVariableDeclaration","src":"3171:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3185:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3181:3:181"},"nodeType":"YulFunctionCall","src":"3181:7:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"3175:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3197:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3217:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3211:5:181"},"nodeType":"YulFunctionCall","src":"3211:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"3201:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3229:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3251:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3275:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3279:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3271:3:181"},"nodeType":"YulFunctionCall","src":"3271:13:181"},{"name":"_4","nodeType":"YulIdentifier","src":"3286:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3267:3:181"},"nodeType":"YulFunctionCall","src":"3267:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"3291:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3263:3:181"},"nodeType":"YulFunctionCall","src":"3263:31:181"},{"name":"_4","nodeType":"YulIdentifier","src":"3296:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3259:3:181"},"nodeType":"YulFunctionCall","src":"3259:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3247:3:181"},"nodeType":"YulFunctionCall","src":"3247:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"3233:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3359:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"3361:16:181"},"nodeType":"YulFunctionCall","src":"3361:18:181"},"nodeType":"YulExpressionStatement","src":"3361:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3318:10:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3330:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3315:2:181"},"nodeType":"YulFunctionCall","src":"3315:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3338:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"3350:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3335:2:181"},"nodeType":"YulFunctionCall","src":"3335:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"3312:2:181"},"nodeType":"YulFunctionCall","src":"3312:46:181"},"nodeType":"YulIf","src":"3309:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3397:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3401:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3390:6:181"},"nodeType":"YulFunctionCall","src":"3390:22:181"},"nodeType":"YulExpressionStatement","src":"3390:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3428:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3436:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3421:6:181"},"nodeType":"YulFunctionCall","src":"3421:18:181"},"nodeType":"YulExpressionStatement","src":"3421:18:181"},{"body":{"nodeType":"YulBlock","src":"3485:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3494:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3497:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3487:6:181"},"nodeType":"YulFunctionCall","src":"3487:12:181"},"nodeType":"YulExpressionStatement","src":"3487:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3462:2:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3466:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3458:3:181"},"nodeType":"YulFunctionCall","src":"3458:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3471:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3454:3:181"},"nodeType":"YulFunctionCall","src":"3454:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3476:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3451:2:181"},"nodeType":"YulFunctionCall","src":"3451:33:181"},"nodeType":"YulIf","src":"3448:53:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3527:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3535:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3523:3:181"},"nodeType":"YulFunctionCall","src":"3523:15:181"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3544:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3548:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3540:3:181"},"nodeType":"YulFunctionCall","src":"3540:11:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3553:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3510:12:181"},"nodeType":"YulFunctionCall","src":"3510:46:181"},"nodeType":"YulExpressionStatement","src":"3510:46:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3580:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3588:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3576:3:181"},"nodeType":"YulFunctionCall","src":"3576:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"3593:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3572:3:181"},"nodeType":"YulFunctionCall","src":"3572:24:181"},{"kind":"number","nodeType":"YulLiteral","src":"3598:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3565:6:181"},"nodeType":"YulFunctionCall","src":"3565:35:181"},"nodeType":"YulExpressionStatement","src":"3565:35:181"},{"nodeType":"YulAssignment","src":"3609:16:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"3619:6:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"3609:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint256t_addresst_addresst_uint32t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2212:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2223:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2235:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2243:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2251:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2259:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2267:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"2275:6:181","type":""}],"src":"2123:1508:181"},{"body":{"nodeType":"YulBlock","src":"3755:427:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3765:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3775:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3769:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3793:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3804:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3786:6:181"},"nodeType":"YulFunctionCall","src":"3786:21:181"},"nodeType":"YulExpressionStatement","src":"3786:21:181"},{"nodeType":"YulVariableDeclaration","src":"3816:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3836:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3830:5:181"},"nodeType":"YulFunctionCall","src":"3830:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3820:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3863:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3874:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3859:3:181"},"nodeType":"YulFunctionCall","src":"3859:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"3879:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3852:6:181"},"nodeType":"YulFunctionCall","src":"3852:34:181"},"nodeType":"YulExpressionStatement","src":"3852:34:181"},{"nodeType":"YulVariableDeclaration","src":"3895:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3904:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"3899:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3964:90:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3993:9:181"},{"name":"i","nodeType":"YulIdentifier","src":"4004:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3989:3:181"},"nodeType":"YulFunctionCall","src":"3989:17:181"},{"kind":"number","nodeType":"YulLiteral","src":"4008:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3985:3:181"},"nodeType":"YulFunctionCall","src":"3985:26:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4027:6:181"},{"name":"i","nodeType":"YulIdentifier","src":"4035:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4023:3:181"},"nodeType":"YulFunctionCall","src":"4023:14:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4039:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4019:3:181"},"nodeType":"YulFunctionCall","src":"4019:23:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4013:5:181"},"nodeType":"YulFunctionCall","src":"4013:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3978:6:181"},"nodeType":"YulFunctionCall","src":"3978:66:181"},"nodeType":"YulExpressionStatement","src":"3978:66:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3925:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"3928:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3922:2:181"},"nodeType":"YulFunctionCall","src":"3922:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3936:19:181","statements":[{"nodeType":"YulAssignment","src":"3938:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3947:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3950:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3943:3:181"},"nodeType":"YulFunctionCall","src":"3943:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"3938:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"3918:3:181","statements":[]},"src":"3914:140:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4078:9:181"},{"name":"length","nodeType":"YulIdentifier","src":"4089:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4074:3:181"},"nodeType":"YulFunctionCall","src":"4074:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"4098:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4070:3:181"},"nodeType":"YulFunctionCall","src":"4070:31:181"},{"kind":"number","nodeType":"YulLiteral","src":"4103:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4063:6:181"},"nodeType":"YulFunctionCall","src":"4063:42:181"},"nodeType":"YulExpressionStatement","src":"4063:42:181"},{"nodeType":"YulAssignment","src":"4114:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4130:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4149:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4157:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4145:3:181"},"nodeType":"YulFunctionCall","src":"4145:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4166:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4162:3:181"},"nodeType":"YulFunctionCall","src":"4162:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4141:3:181"},"nodeType":"YulFunctionCall","src":"4141:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4126:3:181"},"nodeType":"YulFunctionCall","src":"4126:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"4173:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4122:3:181"},"nodeType":"YulFunctionCall","src":"4122:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4114:4:181"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3724:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3735:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3746:4:181","type":""}],"src":"3636:546:181"},{"body":{"nodeType":"YulBlock","src":"4361:164:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4378:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4389:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4371:6:181"},"nodeType":"YulFunctionCall","src":"4371:21:181"},"nodeType":"YulExpressionStatement","src":"4371:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4412:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4423:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4408:3:181"},"nodeType":"YulFunctionCall","src":"4408:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4428:2:181","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4401:6:181"},"nodeType":"YulFunctionCall","src":"4401:30:181"},"nodeType":"YulExpressionStatement","src":"4401:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4451:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4462:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4447:3:181"},"nodeType":"YulFunctionCall","src":"4447:18:181"},{"hexValue":"73776565703a2021616d6f756e74","kind":"string","nodeType":"YulLiteral","src":"4467:16:181","type":"","value":"sweep: !amount"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4440:6:181"},"nodeType":"YulFunctionCall","src":"4440:44:181"},"nodeType":"YulExpressionStatement","src":"4440:44:181"},{"nodeType":"YulAssignment","src":"4493:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4505:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4516:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4501:3:181"},"nodeType":"YulFunctionCall","src":"4501:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4493:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_fb99164e55f7b3308ec747cacc565501aaa56f31de542fdcfd357ae2932ce29e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4338:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4352:4:181","type":""}],"src":"4187:338:181"},{"body":{"nodeType":"YulBlock","src":"4579:176:181","statements":[{"nodeType":"YulAssignment","src":"4589:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4601:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"4604:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4597:3:181"},"nodeType":"YulFunctionCall","src":"4597:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"4589:4:181"}]},{"body":{"nodeType":"YulBlock","src":"4638:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4659:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4666:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"4671:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4662:3:181"},"nodeType":"YulFunctionCall","src":"4662:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4652:6:181"},"nodeType":"YulFunctionCall","src":"4652:31:181"},"nodeType":"YulExpressionStatement","src":"4652:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4703:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4706:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4696:6:181"},"nodeType":"YulFunctionCall","src":"4696:15:181"},"nodeType":"YulExpressionStatement","src":"4696:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4731:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4734:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4724:6:181"},"nodeType":"YulFunctionCall","src":"4724:15:181"},"nodeType":"YulExpressionStatement","src":"4724:15:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"4621:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"4627:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4618:2:181"},"nodeType":"YulFunctionCall","src":"4618:11:181"},"nodeType":"YulIf","src":"4615:134:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4561:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"4564:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"4570:4:181","type":""}],"src":"4530:225:181"},{"body":{"nodeType":"YulBlock","src":"4934:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4951:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4962:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4944:6:181"},"nodeType":"YulFunctionCall","src":"4944:21:181"},"nodeType":"YulExpressionStatement","src":"4944:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4985:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4996:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4981:3:181"},"nodeType":"YulFunctionCall","src":"4981:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5001:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4974:6:181"},"nodeType":"YulFunctionCall","src":"4974:30:181"},"nodeType":"YulExpressionStatement","src":"4974:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5024:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5035:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5020:3:181"},"nodeType":"YulFunctionCall","src":"5020:18:181"},{"hexValue":"756e77726170416e6453776565703a2021616d6f756e74","kind":"string","nodeType":"YulLiteral","src":"5040:25:181","type":"","value":"unwrapAndSweep: !amount"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5013:6:181"},"nodeType":"YulFunctionCall","src":"5013:53:181"},"nodeType":"YulExpressionStatement","src":"5013:53:181"},{"nodeType":"YulAssignment","src":"5075:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5087:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5098:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5083:3:181"},"nodeType":"YulFunctionCall","src":"5083:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5075:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_563eccbd29ff954ff175621bfcdb95dc0390d7ad04bfb287ad7ab7da8b297fb5__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4911:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4925:4:181","type":""}],"src":"4760:347:181"},{"body":{"nodeType":"YulBlock","src":"5286:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5303:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5314:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5296:6:181"},"nodeType":"YulFunctionCall","src":"5296:21:181"},"nodeType":"YulExpressionStatement","src":"5296:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5337:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5348:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5333:3:181"},"nodeType":"YulFunctionCall","src":"5333:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5353:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5326:6:181"},"nodeType":"YulFunctionCall","src":"5326:30:181"},"nodeType":"YulExpressionStatement","src":"5326:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5376:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5387:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5372:3:181"},"nodeType":"YulFunctionCall","src":"5372:18:181"},{"hexValue":"756e777261703a2021636f6e6e657874","kind":"string","nodeType":"YulLiteral","src":"5392:18:181","type":"","value":"unwrap: !connext"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5365:6:181"},"nodeType":"YulFunctionCall","src":"5365:46:181"},"nodeType":"YulExpressionStatement","src":"5365:46:181"},{"nodeType":"YulAssignment","src":"5420:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5432:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5443:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5428:3:181"},"nodeType":"YulFunctionCall","src":"5428:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5420:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_85be980d4507f0657beebd307f4d94376373ccb3a8c00b1d7f4054754d3deb94__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5263:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5277:4:181","type":""}],"src":"5112:340:181"},{"body":{"nodeType":"YulBlock","src":"5631:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5648:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5659:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5641:6:181"},"nodeType":"YulFunctionCall","src":"5641:21:181"},"nodeType":"YulExpressionStatement","src":"5641:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5682:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5693:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5678:3:181"},"nodeType":"YulFunctionCall","src":"5678:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5698:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5671:6:181"},"nodeType":"YulFunctionCall","src":"5671:30:181"},"nodeType":"YulExpressionStatement","src":"5671:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5721:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5732:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5717:3:181"},"nodeType":"YulFunctionCall","src":"5717:18:181"},{"hexValue":"756e777261703a2021616d6f756e74","kind":"string","nodeType":"YulLiteral","src":"5737:17:181","type":"","value":"unwrap: !amount"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5710:6:181"},"nodeType":"YulFunctionCall","src":"5710:45:181"},"nodeType":"YulExpressionStatement","src":"5710:45:181"},{"nodeType":"YulAssignment","src":"5764:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5776:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5787:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5772:3:181"},"nodeType":"YulFunctionCall","src":"5772:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5764:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cdadfa8ff838c2b763346808853241e42c0873538a85ca34705f70db22f5030b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5608:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5622:4:181","type":""}],"src":"5457:339:181"},{"body":{"nodeType":"YulBlock","src":"5890:170:181","statements":[{"body":{"nodeType":"YulBlock","src":"5936:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5945:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5948:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5938:6:181"},"nodeType":"YulFunctionCall","src":"5938:12:181"},"nodeType":"YulExpressionStatement","src":"5938:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5911:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5920:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5907:3:181"},"nodeType":"YulFunctionCall","src":"5907:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5932:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5903:3:181"},"nodeType":"YulFunctionCall","src":"5903:32:181"},"nodeType":"YulIf","src":"5900:52:181"},{"nodeType":"YulVariableDeclaration","src":"5961:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5980:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5974:5:181"},"nodeType":"YulFunctionCall","src":"5974:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5965:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6024:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5999:24:181"},"nodeType":"YulFunctionCall","src":"5999:31:181"},"nodeType":"YulExpressionStatement","src":"5999:31:181"},{"nodeType":"YulAssignment","src":"6039:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"6049:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6039:6:181"}]}]},"name":"abi_decode_tuple_t_address_payable_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5856:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5867:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5879:6:181","type":""}],"src":"5801:259:181"},{"body":{"nodeType":"YulBlock","src":"6194:175:181","statements":[{"nodeType":"YulAssignment","src":"6204:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6216:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6227:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6212:3:181"},"nodeType":"YulFunctionCall","src":"6212:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6204:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"6239:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6257:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6262:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6253:3:181"},"nodeType":"YulFunctionCall","src":"6253:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"6266:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6249:3:181"},"nodeType":"YulFunctionCall","src":"6249:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6243:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6284:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6299:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6307:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6295:3:181"},"nodeType":"YulFunctionCall","src":"6295:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6277:6:181"},"nodeType":"YulFunctionCall","src":"6277:34:181"},"nodeType":"YulExpressionStatement","src":"6277:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6331:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6342:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6327:3:181"},"nodeType":"YulFunctionCall","src":"6327:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6351:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6359:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6347:3:181"},"nodeType":"YulFunctionCall","src":"6347:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6320:6:181"},"nodeType":"YulFunctionCall","src":"6320:43:181"},"nodeType":"YulExpressionStatement","src":"6320:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6155:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6166:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6174:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6185:4:181","type":""}],"src":"6065:304:181"},{"body":{"nodeType":"YulBlock","src":"6503:145:181","statements":[{"nodeType":"YulAssignment","src":"6513:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6525:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6536:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6521:3:181"},"nodeType":"YulFunctionCall","src":"6521:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6513:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6555:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6570:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6586:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6591:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6582:3:181"},"nodeType":"YulFunctionCall","src":"6582:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"6595:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6578:3:181"},"nodeType":"YulFunctionCall","src":"6578:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6566:3:181"},"nodeType":"YulFunctionCall","src":"6566:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6548:6:181"},"nodeType":"YulFunctionCall","src":"6548:51:181"},"nodeType":"YulExpressionStatement","src":"6548:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6619:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6630:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6615:3:181"},"nodeType":"YulFunctionCall","src":"6615:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"6635:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6608:6:181"},"nodeType":"YulFunctionCall","src":"6608:34:181"},"nodeType":"YulExpressionStatement","src":"6608:34:181"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6464:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6475:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6483:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6494:4:181","type":""}],"src":"6374:274:181"},{"body":{"nodeType":"YulBlock","src":"6731:199:181","statements":[{"body":{"nodeType":"YulBlock","src":"6777:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6786:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6789:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6779:6:181"},"nodeType":"YulFunctionCall","src":"6779:12:181"},"nodeType":"YulExpressionStatement","src":"6779:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6752:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6761:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6748:3:181"},"nodeType":"YulFunctionCall","src":"6748:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"6773:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6744:3:181"},"nodeType":"YulFunctionCall","src":"6744:32:181"},"nodeType":"YulIf","src":"6741:52:181"},{"nodeType":"YulVariableDeclaration","src":"6802:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6821:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6815:5:181"},"nodeType":"YulFunctionCall","src":"6815:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6806:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6884:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6893:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6896:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6886:6:181"},"nodeType":"YulFunctionCall","src":"6886:12:181"},"nodeType":"YulExpressionStatement","src":"6886:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6853:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6874:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6867:6:181"},"nodeType":"YulFunctionCall","src":"6867:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6860:6:181"},"nodeType":"YulFunctionCall","src":"6860:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"6850:2:181"},"nodeType":"YulFunctionCall","src":"6850:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6843:6:181"},"nodeType":"YulFunctionCall","src":"6843:40:181"},"nodeType":"YulIf","src":"6840:60:181"},{"nodeType":"YulAssignment","src":"6909:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"6919:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6909:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6697:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6708:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6720:6:181","type":""}],"src":"6653:277:181"},{"body":{"nodeType":"YulBlock","src":"7092:218:181","statements":[{"nodeType":"YulAssignment","src":"7102:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7114:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7125:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7110:3:181"},"nodeType":"YulFunctionCall","src":"7110:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7102:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"7137:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7155:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"7160:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7151:3:181"},"nodeType":"YulFunctionCall","src":"7151:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"7164:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7147:3:181"},"nodeType":"YulFunctionCall","src":"7147:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7141:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7182:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7197:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7205:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7193:3:181"},"nodeType":"YulFunctionCall","src":"7193:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7175:6:181"},"nodeType":"YulFunctionCall","src":"7175:34:181"},"nodeType":"YulExpressionStatement","src":"7175:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7229:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7240:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7225:3:181"},"nodeType":"YulFunctionCall","src":"7225:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"7249:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7257:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7245:3:181"},"nodeType":"YulFunctionCall","src":"7245:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7218:6:181"},"nodeType":"YulFunctionCall","src":"7218:43:181"},"nodeType":"YulExpressionStatement","src":"7218:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7281:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7292:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7277:3:181"},"nodeType":"YulFunctionCall","src":"7277:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"7297:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7270:6:181"},"nodeType":"YulFunctionCall","src":"7270:34:181"},"nodeType":"YulExpressionStatement","src":"7270:34:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7045:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7056:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7064:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7072:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7083:4:181","type":""}],"src":"6935:375:181"},{"body":{"nodeType":"YulBlock","src":"7489:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7506:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7517:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7499:6:181"},"nodeType":"YulFunctionCall","src":"7499:21:181"},"nodeType":"YulExpressionStatement","src":"7499:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7540:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7551:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7536:3:181"},"nodeType":"YulFunctionCall","src":"7536:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7556:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7529:6:181"},"nodeType":"YulFunctionCall","src":"7529:30:181"},"nodeType":"YulExpressionStatement","src":"7529:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7579:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7590:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7575:3:181"},"nodeType":"YulFunctionCall","src":"7575:18:181"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","kind":"string","nodeType":"YulLiteral","src":"7595:31:181","type":"","value":"Address: insufficient balance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7568:6:181"},"nodeType":"YulFunctionCall","src":"7568:59:181"},"nodeType":"YulExpressionStatement","src":"7568:59:181"},{"nodeType":"YulAssignment","src":"7636:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7648:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7659:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7644:3:181"},"nodeType":"YulFunctionCall","src":"7644:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7636:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7466:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7480:4:181","type":""}],"src":"7315:353:181"},{"body":{"nodeType":"YulBlock","src":"7864:14:181","statements":[{"nodeType":"YulAssignment","src":"7866:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"7873:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"7866:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"7848:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"7856:3:181","type":""}],"src":"7673:205:181"},{"body":{"nodeType":"YulBlock","src":"8057:248:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8074:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8085:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8067:6:181"},"nodeType":"YulFunctionCall","src":"8067:21:181"},"nodeType":"YulExpressionStatement","src":"8067:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8108:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8119:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8104:3:181"},"nodeType":"YulFunctionCall","src":"8104:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8124:2:181","type":"","value":"58"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8097:6:181"},"nodeType":"YulFunctionCall","src":"8097:30:181"},"nodeType":"YulExpressionStatement","src":"8097:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8147:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8158:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8143:3:181"},"nodeType":"YulFunctionCall","src":"8143:18:181"},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c2072","kind":"string","nodeType":"YulLiteral","src":"8163:34:181","type":"","value":"Address: unable to send value, r"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8136:6:181"},"nodeType":"YulFunctionCall","src":"8136:62:181"},"nodeType":"YulExpressionStatement","src":"8136:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8218:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8229:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8214:3:181"},"nodeType":"YulFunctionCall","src":"8214:18:181"},{"hexValue":"6563697069656e74206d61792068617665207265766572746564","kind":"string","nodeType":"YulLiteral","src":"8234:28:181","type":"","value":"ecipient may have reverted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8207:6:181"},"nodeType":"YulFunctionCall","src":"8207:56:181"},"nodeType":"YulExpressionStatement","src":"8207:56:181"},{"nodeType":"YulAssignment","src":"8272:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8284:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8295:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8280:3:181"},"nodeType":"YulFunctionCall","src":"8280:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8272:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8034:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8048:4:181","type":""}],"src":"7883:422:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_contract$_IWrapper_$37755__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_bytes32t_uint256t_addresst_addresst_uint32t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let value := calldataload(add(headStart, 64))\n        validator_revert_address(value)\n        value2 := value\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value3 := value_1\n        let value_2 := calldataload(add(headStart, 128))\n        if iszero(eq(value_2, and(value_2, 0xffffffff))) { revert(0, 0) }\n        value4 := value_2\n        let offset := calldataload(add(headStart, 160))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), 0)\n        value5 := memPtr\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        mstore(add(add(headStart, length), 64), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_fb99164e55f7b3308ec747cacc565501aaa56f31de542fdcfd357ae2932ce29e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"sweep: !amount\")\n        tail := add(headStart, 96)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_563eccbd29ff954ff175621bfcdb95dc0390d7ad04bfb287ad7ab7da8b297fb5__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"unwrapAndSweep: !amount\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_85be980d4507f0657beebd307f4d94376373ccb3a8c00b1d7f4054754d3deb94__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"unwrap: !connext\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_cdadfa8ff838c2b763346808853241e42c0873538a85ca34705f70db22f5030b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"unwrap: !amount\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_address_payable_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: insufficient balance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    { end := pos }\n    function abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 58)\n        mstore(add(headStart, 64), \"Address: unable to send value, r\")\n        mstore(add(headStart, 96), \"ecipient may have reverted\")\n        tail := add(headStart, 128)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"37783":[{"length":32,"start":391},{"length":32,"start":1534}],"37787":[{"length":32,"start":599},{"length":32,"start":1405},{"length":32,"start":1722},{"length":32,"start":1899}]},"linkReferences":{},"object":"6080604052600436106100c65760003560e01c8063b1f8100d1161007f578063d232c22011610059578063d232c220146101fc578063e03720c014610225578063e1eb13c114610245578063fd614f411461027957600080fd5b8063b1f8100d146101a9578063c5b350df146101c9578063d1851c92146101de57600080fd5b80633cf52ffb146100d257806362c06767146100f65780636a42b8f814610118578063715018a61461012e5780638da5cb5b1461014357806392f75cb21461017557600080fd5b366100cd57005b600080fd5b3480156100de57600080fd5b506002545b6040519081526020015b60405180910390f35b34801561010257600080fd5b50610116610111366004610aaa565b6102a6565b005b34801561012457600080fd5b5062093a806100e3565b34801561013a57600080fd5b50610116610327565b34801561014f57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016100ed565b34801561018157600080fd5b5061015d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101b557600080fd5b506101166101c4366004610aeb565b6103db565b3480156101d557600080fd5b5061011661047c565b3480156101ea57600080fd5b506001546001600160a01b031661015d565b34801561020857600080fd5b506000546040516001600160a01b039091161581526020016100ed565b34801561023157600080fd5b50610116610240366004610b0f565b6104ec565b34801561025157600080fd5b5061015d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561028557600080fd5b50610299610294366004610b51565b6105f1565b6040516100ed9190610c55565b6000546001600160a01b031633146102d1576040516311a8a1bb60e31b815260040160405180910390fd5b806000036103175760405162461bcd60e51b815260206004820152600e60248201526d1cddd9595c0e8808585b5bdd5b9d60921b60448201526064015b60405180910390fd5b6103228383836107e7565b505050565b6000546001600160a01b03163314610352576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426103649190610ca3565b11610382576040516324e0285f60e21b815260040160405180910390fd5b6002546000036103a557604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b0316156103cf576040516323295ef960e01b815260040160405180910390fd5b6103d960006108c9565b565b6000546001600160a01b03163314610406576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610424575060025415155b15610442576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361047057604051634a2fb73f60e11b815260040160405180910390fd5b6104798161092e565b50565b6001546001600160a01b031633146104a7576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426104b99190610ca3565b116104d7576040516324e0285f60e21b815260040160405180910390fd5b6001546103d9906001600160a01b03166108c9565b6000546001600160a01b03163314610517576040516311a8a1bb60e31b815260040160405180910390fd5b806000036105675760405162461bcd60e51b815260206004820152601760248201527f756e77726170416e6453776565703a2021616d6f756e74000000000000000000604482015260640161030e565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156105c957600080fd5b505af11580156105dd573d6000803e3d6000fd5b505050506105ed826000836107e7565b5050565b6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461065e5760405162461bcd60e51b815260206004820152601060248201526f1d5b9ddc985c0e880858dbdb9b995e1d60821b604482015260640161030e565b856000036106a05760405162461bcd60e51b815260206004820152600f60248201526e1d5b9ddc985c0e8808585b5bdd5b9d608a1b604482015260640161030e565b6000828060200190518101906106b69190610cca565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161461075557604080516001600160a01b038084168252881660208201527f9f79eedfea1da16b88bd43866c5385861173a9895ac74e1628662f7f2192962e910160405180910390a161073f8187896107e7565b50506040805160208101909152600081526107dd565b604051632e1a7d4d60e01b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156107b757600080fd5b505af11580156107cb573d6000803e3d6000fd5b505050506107db816000896107e7565b505b9695505050505050565b6001600160a01b038216610804576107ff838261097c565b610879565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820183905283169063a9059cbb906044016020604051808303816000875af1158015610853573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108779190610ce7565b505b604080516001600160a01b038086168252841660208201529081018290527f91ebf95f2932ae1bb84918555319ba9cf24fd2359b03932337af5599f2553fa99060600160405180910390a1505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b804710156109cc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161030e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610a19576040519150601f19603f3d011682016040523d82523d6000602084013e610a1e565b606091505b50509050806103225760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161030e565b6001600160a01b038116811461047957600080fd5b600080600060608486031215610abf57600080fd5b8335610aca81610a95565b92506020840135610ada81610a95565b929592945050506040919091013590565b600060208284031215610afd57600080fd5b8135610b0881610a95565b9392505050565b60008060408385031215610b2257600080fd5b8235610b2d81610a95565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215610b6a57600080fd5b86359550602087013594506040870135610b8381610a95565b93506060870135610b9381610a95565b9250608087013563ffffffff81168114610bac57600080fd5b915060a087013567ffffffffffffffff80821115610bc957600080fd5b818901915089601f830112610bdd57600080fd5b813581811115610bef57610bef610b3b565b604051601f8201601f19908116603f01168101908382118183101715610c1757610c17610b3b565b816040528281528c6020848701011115610c3057600080fd5b8260208601602083013760006020848301015280955050505050509295509295509295565b600060208083528351808285015260005b81811015610c8257858101830151858201604001528201610c66565b506000604082860101526040601f19601f8301168501019250505092915050565b81810381811115610cc457634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610cdc57600080fd5b8151610b0881610a95565b600060208284031215610cf957600080fd5b81518015158114610b0857600080fdfea2646970667358221220f6b28a7547d9416268a270b6b949192890b994c51b055287f898d24006f507bb64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC6 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB1F8100D GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xD232C220 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x1FC JUMPI DUP1 PUSH4 0xE03720C0 EQ PUSH2 0x225 JUMPI DUP1 PUSH4 0xE1EB13C1 EQ PUSH2 0x245 JUMPI DUP1 PUSH4 0xFD614F41 EQ PUSH2 0x279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x1A9 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x1C9 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x1DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0xD2 JUMPI DUP1 PUSH4 0x62C06767 EQ PUSH2 0xF6 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x118 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x12E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x143 JUMPI DUP1 PUSH4 0x92F75CB2 EQ PUSH2 0x175 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0xCD JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x102 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x116 PUSH2 0x111 CALLDATASIZE PUSH1 0x4 PUSH2 0xAAA JUMP JUMPDEST PUSH2 0x2A6 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x124 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0xE3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x116 PUSH2 0x327 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x181 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15D PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x116 PUSH2 0x1C4 CALLDATASIZE PUSH1 0x4 PUSH2 0xAEB JUMP JUMPDEST PUSH2 0x3DB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x116 PUSH2 0x47C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x15D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x208 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x116 PUSH2 0x240 CALLDATASIZE PUSH1 0x4 PUSH2 0xB0F JUMP JUMPDEST PUSH2 0x4EC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15D PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x299 PUSH2 0x294 CALLDATASIZE PUSH1 0x4 PUSH2 0xB51 JUMP JUMPDEST PUSH2 0x5F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xED SWAP2 SWAP1 PUSH2 0xC55 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2D1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x317 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x1CDDD9595C0E8808585B5BDD5B9D PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x322 DUP4 DUP4 DUP4 PUSH2 0x7E7 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x352 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x364 SWAP2 SWAP1 PUSH2 0xCA3 JUMP JUMPDEST GT PUSH2 0x382 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x3A5 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x3CF JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3D9 PUSH1 0x0 PUSH2 0x8C9 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x406 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x424 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x442 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x470 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x479 DUP2 PUSH2 0x92E JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4A7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x4B9 SWAP2 SWAP1 PUSH2 0xCA3 JUMP JUMPDEST GT PUSH2 0x4D7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x3D9 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x8C9 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x517 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x567 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x756E77726170416E6453776565703A2021616D6F756E74000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x30E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2E1A7D4D SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5DD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x5ED DUP3 PUSH1 0x0 DUP4 PUSH2 0x7E7 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x60 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x65E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x1D5B9DDC985C0E880858DBDB9B995E1D PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x30E JUMP JUMPDEST DUP6 PUSH1 0x0 SUB PUSH2 0x6A0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x1D5B9DDC985C0E8808585B5BDD5B9D PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x30E JUMP JUMPDEST PUSH1 0x0 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x6B6 SWAP2 SWAP1 PUSH2 0xCCA JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x755 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND DUP3 MSTORE DUP9 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x9F79EEDFEA1DA16B88BD43866C5385861173A9895AC74E1628662F7F2192962E SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x73F DUP2 DUP8 DUP10 PUSH2 0x7E7 JUMP JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH2 0x7DD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2E1A7D4D SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x7DB DUP2 PUSH1 0x0 DUP10 PUSH2 0x7E7 JUMP JUMPDEST POP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x804 JUMPI PUSH2 0x7FF DUP4 DUP3 PUSH2 0x97C JUMP JUMPDEST PUSH2 0x879 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE DUP4 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x853 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x877 SWAP2 SWAP1 PUSH2 0xCE7 JUMP JUMPDEST POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0x91EBF95F2932AE1BB84918555319BA9CF24FD2359B03932337AF5599F2553FA9 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x9CC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x30E JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xA19 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xA1E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x322 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x479 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0xACA DUP2 PUSH2 0xA95 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0xADA DUP2 PUSH2 0xA95 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xB08 DUP2 PUSH2 0xA95 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xB22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0xB2D DUP2 PUSH2 0xA95 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0xB6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0xB83 DUP2 PUSH2 0xA95 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0xB93 DUP2 PUSH2 0xA95 JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xBAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH1 0xA0 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xBC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP10 ADD SWAP2 POP DUP10 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xBDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xBEF JUMPI PUSH2 0xBEF PUSH2 0xB3B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xC17 JUMPI PUSH2 0xC17 PUSH2 0xB3B JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP13 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0xC30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC82 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xC66 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xCC4 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xB08 DUP2 PUSH2 0xA95 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xB08 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF6 0xB2 DUP11 PUSH22 0x47D9416268A270B6B949192890B994C51B055287F898 0xD2 BLOCKHASH MOD CREATE2 SMOD 0xBB PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"1504:6817:111:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1949:112:168;;;;;;;;;;-1:-1:-1;2029:27:168;;1949:112;;;160:25:181;;;148:2;133:18;1949:112:168;;;;;;;;3871:295:111;;;;;;;;;;-1:-1:-1;3871:295:111;;;;;:::i;:::-;;:::i;:::-;;2151:79:168;;;;;;;;;;-1:-1:-1;1530:6:168;2151:79;;3820:442;;;;;;;;;;;;;:::i;1641:79::-;;;;;;;;;;-1:-1:-1;1687:7:168;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;;-1:-1:-1;;;;;957:32:181;;;939:51;;927:2;912:18;1641:79:168;793:203:181;2322:32:111;;;;;;;;;;;;;;;3321:420:168;;;;;;;;;;-1:-1:-1;3321:420:168;;;;;:::i;:::-;;:::i;4404:539::-;;;;;;;;;;;;;:::i;1792:85::-;;;;;;;;;;-1:-1:-1;1863:9:168;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;;;;;;;;;;-1:-1:-1;3097:4:168;3116:6;3055:86;;-1:-1:-1;;;;;3116:6:168;;;:20;1393:41:181;;1381:2;1366:18;3055:86:168;1253:187:181;4921:347:111;;;;;;;;;;-1:-1:-1;4921:347:111;;;;;:::i;:::-;;:::i;2469:33::-;;;;;;;;;;;;;;;6444:1045;;;;;;;;;;-1:-1:-1;6444:1045:111;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3871:295::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4061:6:111::1;4071:1;4061:11:::0;4053:38:::1;;;::::0;-1:-1:-1;;;4053:38:111;;4389:2:181;4053:38:111::1;::::0;::::1;4371:21:181::0;4428:2;4408:18;;;4401:30;-1:-1:-1;;;4447:18:181;;;4440:44;4501:18;;4053:38:111::1;;;;;;;;;4129:32;4136:9;4147:5;4154:6;4129;:32::i;:::-;3871:295:::0;;;:::o;3820:442:168:-;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;3960:27:::2;;3991:1;3960:32:::0;3956:92:::2;;4001:47;;-1:-1:-1::0;;;4001:47:168::2;;;;;;;;;;;3956:92;4095:9;::::0;-1:-1:-1;;;;;4095:9:168::2;:23:::0;4091:88:::2;;4127:52;;-1:-1:-1::0;;;4127:52:168::2;;;;;;;;;;;4091:88;4236:21;4254:1;4236:9;:21::i;:::-;3820:442::o:0;3321:420::-;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;:::-;3321:420:::0;:::o;4404:539::-;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;4921:347:111:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;5089:6:111::1;5099:1;5089:11:::0;5081:47:::1;;;::::0;-1:-1:-1;;;5081:47:111;;4962:2:181;5081:47:111::1;::::0;::::1;4944:21:181::0;5001:2;4981:18;;;4974:30;5040:25;5020:18;;;5013:53;5083:18;;5081:47:111::1;4760:347:181::0;5081:47:111::1;5164:24;::::0;-1:-1:-1;;;5164:24:111;;::::1;::::0;::::1;160:25:181::0;;;5164:7:111::1;-1:-1:-1::0;;;;;5164:16:111::1;::::0;::::1;::::0;133:18:181;;5164:24:111::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;5226:37;5233:9;5252:1;5256:6;5226;:37::i;:::-;4921:347:::0;;:::o;6444:1045::-;6647:12;2675:10;-1:-1:-1;;;;;2689:7:111;2675:21;;2667:50;;;;-1:-1:-1;;;2667:50:111;;5314:2:181;2667:50:111;;;5296:21:181;5353:2;5333:18;;;5326:30;-1:-1:-1;;;5372:18:181;;;5365:46;5428:18;;2667:50:111;5112:340:181;2667:50:111;6753:6:::1;6763:1;6753:11:::0;6745:39:::1;;;::::0;-1:-1:-1;;;6745:39:111;;5659:2:181;6745:39:111::1;::::0;::::1;5641:21:181::0;5698:2;5678:18;;;5671:30;-1:-1:-1;;;5717:18:181;;;5710:45;5772:18;;6745:39:111::1;5457:339:181::0;6745:39:111::1;6926:17;6957:8;6946:31;;;;;;;;;;;;:::i;:::-;6926:51;;7075:7;-1:-1:-1::0;;;;;7058:25:111::1;:5;-1:-1:-1::0;;;;;7058:25:111::1;;7054:236;;7098:28;::::0;;-1:-1:-1;;;;;6295:15:181;;;6277:34;;6347:15;;6342:2;6327:18;;6320:43;7098:28:111::1;::::0;6212:18:181;7098:28:111::1;;;;;;;7227:32;7234:9;7245:5;7252:6;7227;:32::i;:::-;-1:-1:-1::0;;7274:9:111::1;::::0;;::::1;::::0;::::1;::::0;;;-1:-1:-1;7274:9:111;;7267:16:::1;;7054:236;7391:24;::::0;-1:-1:-1;;;7391:24:111;;::::1;::::0;::::1;160:25:181::0;;;7391:7:111::1;-1:-1:-1::0;;;;;7391:16:111::1;::::0;::::1;::::0;133:18:181;;7391:24:111::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7447:37;7454:9;7473:1;7477:6;7447;:37::i;:::-;6661:828;2723:1;6444:1045:::0;;;;;;;;:::o;8020:299::-;-1:-1:-1;;;;;8121:19:111;;8117:147;;8150:45;8176:9;8188:6;8150:17;:45::i;:::-;8117:147;;;8216:41;;-1:-1:-1;;;8216:41:111;;-1:-1:-1;;;;;6566:32:181;;;8216:41:111;;;6548:51:181;6615:18;;;6608:34;;;8216:22:111;;;;;6521:18:181;;8216:41:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8117:147;8274:40;;;-1:-1:-1;;;;;7193:15:181;;;7175:34;;7245:15;;7240:2;7225:18;;7218:43;7277:18;;;7270:34;;;8274:40:111;;7125:2:181;7110:18;8274:40:111;;;;;;;8020:299;;;:::o;4981:185:168:-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;5170:183::-;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;2412:312:57:-;2526:6;2501:21;:31;;2493:73;;;;-1:-1:-1;;;2493:73:57;;7517:2:181;2493:73:57;;;7499:21:181;7556:2;7536:18;;;7529:30;7595:31;7575:18;;;7568:59;7644:18;;2493:73:57;7315:353:181;2493:73:57;2578:12;2596:9;-1:-1:-1;;;;;2596:14:57;2618:6;2596:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:52;;;2647:7;2639:78;;;;-1:-1:-1;;;2639:78:57;;8085:2:181;2639:78:57;;;8067:21:181;8124:2;8104:18;;;8097:30;8163:34;8143:18;;;8136:62;8234:28;8214:18;;;8207:56;8280:19;;2639:78:57;7883:422:181;196:131;-1:-1:-1;;;;;271:31:181;;261:42;;251:70;;317:1;314;307:12;332:456;409:6;417;425;478:2;466:9;457:7;453:23;449:32;446:52;;;494:1;491;484:12;446:52;533:9;520:23;552:31;577:5;552:31;:::i;:::-;602:5;-1:-1:-1;659:2:181;644:18;;631:32;672:33;631:32;672:33;:::i;:::-;332:456;;724:7;;-1:-1:-1;;;778:2:181;763:18;;;;750:32;;332:456::o;1001:247::-;1060:6;1113:2;1101:9;1092:7;1088:23;1084:32;1081:52;;;1129:1;1126;1119:12;1081:52;1168:9;1155:23;1187:31;1212:5;1187:31;:::i;:::-;1237:5;1001:247;-1:-1:-1;;;1001:247:181:o;1445:315::-;1513:6;1521;1574:2;1562:9;1553:7;1549:23;1545:32;1542:52;;;1590:1;1587;1580:12;1542:52;1629:9;1616:23;1648:31;1673:5;1648:31;:::i;:::-;1698:5;1750:2;1735:18;;;;1722:32;;-1:-1:-1;;;1445:315:181:o;1991:127::-;2052:10;2047:3;2043:20;2040:1;2033:31;2083:4;2080:1;2073:15;2107:4;2104:1;2097:15;2123:1508;2235:6;2243;2251;2259;2267;2275;2328:3;2316:9;2307:7;2303:23;2299:33;2296:53;;;2345:1;2342;2335:12;2296:53;2381:9;2368:23;2358:33;;2438:2;2427:9;2423:18;2410:32;2400:42;;2492:2;2481:9;2477:18;2464:32;2505:31;2530:5;2505:31;:::i;:::-;2555:5;-1:-1:-1;2612:2:181;2597:18;;2584:32;2625:33;2584:32;2625:33;:::i;:::-;2677:7;-1:-1:-1;2736:3:181;2721:19;;2708:33;2785:10;2772:24;;2760:37;;2750:65;;2811:1;2808;2801:12;2750:65;2834:7;-1:-1:-1;2892:3:181;2877:19;;2864:33;2916:18;2946:14;;;2943:34;;;2973:1;2970;2963:12;2943:34;3011:6;3000:9;2996:22;2986:32;;3056:7;3049:4;3045:2;3041:13;3037:27;3027:55;;3078:1;3075;3068:12;3027:55;3114:2;3101:16;3136:2;3132;3129:10;3126:36;;;3142:18;;:::i;:::-;3217:2;3211:9;3185:2;3271:13;;-1:-1:-1;;3267:22:181;;;3291:2;3263:31;3259:40;3247:53;;;3315:18;;;3335:22;;;3312:46;3309:72;;;3361:18;;:::i;:::-;3401:10;3397:2;3390:22;3436:2;3428:6;3421:18;3476:7;3471:2;3466;3462;3458:11;3454:20;3451:33;3448:53;;;3497:1;3494;3487:12;3448:53;3553:2;3548;3544;3540:11;3535:2;3527:6;3523:15;3510:46;3598:1;3593:2;3588;3580:6;3576:15;3572:24;3565:35;3619:6;3609:16;;;;;;;2123:1508;;;;;;;;:::o;3636:546::-;3746:4;3775:2;3804;3793:9;3786:21;3836:6;3830:13;3879:6;3874:2;3863:9;3859:18;3852:34;3904:1;3914:140;3928:6;3925:1;3922:13;3914:140;;;4023:14;;;4019:23;;4013:30;3989:17;;;4008:2;3985:26;3978:66;3943:10;;3914:140;;;3918:3;4103:1;4098:2;4089:6;4078:9;4074:22;4070:31;4063:42;4173:2;4166;4162:7;4157:2;4149:6;4145:15;4141:29;4130:9;4126:45;4122:54;4114:62;;;;3636:546;;;;:::o;4530:225::-;4597:9;;;4618:11;;;4615:134;;;4671:10;4666:3;4662:20;4659:1;4652:31;4706:4;4703:1;4696:15;4734:4;4731:1;4724:15;4615:134;4530:225;;;;:::o;5801:259::-;5879:6;5932:2;5920:9;5911:7;5907:23;5903:32;5900:52;;;5948:1;5945;5938:12;5900:52;5980:9;5974:16;5999:31;6024:5;5999:31;:::i;6653:277::-;6720:6;6773:2;6761:9;6752:7;6748:23;6744:32;6741:52;;;6789:1;6786;6779:12;6741:52;6821:9;6815:16;6874:5;6867:13;6860:21;6853:5;6850:32;6840:60;;6896:1;6893;6886:12"},"gasEstimates":{"creation":{"codeDepositCost":"678200","executionCost":"infinite","totalCost":"infinite"},"external":{"CONNEXT()":"infinite","WRAPPER()":"infinite","acceptProposedOwner()":"63815","delay()":"226","owner()":"2409","proposeNewOwner(address)":"infinite","proposed()":"2398","proposedTimestamp()":"2271","renounceOwnership()":"65977","renounced()":"2326","sweep(address,address,uint256)":"infinite","unwrapAndSweep(address,uint256)":"infinite","xReceive(bytes32,uint256,address,address,uint32,bytes)":"infinite"},"internal":{"_sweep(address,address,uint256)":"infinite"}},"methodIdentifiers":{"CONNEXT()":"92f75cb2","WRAPPER()":"e1eb13c1","acceptProposedOwner()":"c5b350df","delay()":"6a42b8f8","owner()":"8da5cb5b","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","renounceOwnership()":"715018a6","renounced()":"d232c220","sweep(address,address,uint256)":"62c06767","unwrapAndSweep(address,uint256)":"e03720c0","xReceive(bytes32,uint256,address,address,uint32,bytes)":"fd614f41"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"connext\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"wrapper\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FundsDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"WrongAsset\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CONNEXT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WRAPPER\",\"outputs\":[{\"internalType\":\"contract IWrapper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sweep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"unwrapAndSweep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"xReceive\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"The `xreceive` function of contract may fail in the following ways: - unwrapping fails - the wrong asset is delivered, and transferring that fails - sending the native asset fails - the caller is not connext - the amount is zero - balance of the contract != amount In the event of these failures, funds for the crosschain transfer will be sent to this contract and will be held here. To rescue them, the owner of this contract can call `sweep` or `unwrapAndSweep` to transfer assets from this contract to a specified address. It is unlikely failures of these types will occur, so ownership of this contract should be renounced after a suitable trial period on mainnet.Ownership of this contract is governed using the same ProposedOwnable setup that is prevalent throughout the system.\",\"events\":{\"FundsDelivered(address,address,uint256)\":{\"params\":{\"amount\":\"- The amount of the asset sent\",\"asset\":\"- The asset sent.\",\"recipient\":\"- The target recipient address.\"}},\"WrongAsset(address,address)\":{\"params\":{\"asset\":\"- The asset sent.\",\"recipient\":\"- The target recipient address.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The initial owner is set to the `msg.sender` of the contract.\"},\"sweep(address,address,uint256)\":{\"details\":\"Only the owner of this contract can call this function.Funds will end up on this contract IFF the external call on the Connext contract fails and the transfer is reconciled. The `xreceive` function can fail in the following cases: - unwrapping fails - transferring the asset fails - `connext` is not the caller (should not sweep in this case) - amount is zero (should not sweep in this case). It is left to the admin to determine the proper amounts to sweep.\",\"params\":{\"amount\":\"Amount of asset to sweep from contract\",\"asset\":\"The asset to send from the contract to recipient\",\"recipient\":\"The address to send the funds to\"}},\"unwrapAndSweep(address,uint256)\":{\"details\":\"Only the owner of this contract can call this function.Funds will end up on this contract IFF the external call on the Connext contract fails and the transfer is reconciled. The `xreceive` function can fail in the following cases: - unwrapping fails - transferring the asset fails - `connext` is not the caller (should not sweep in this case) - amount is zero (should not sweep in this case). It is left to the admin to determine the proper amounts to sweep.\",\"params\":{\"amount\":\"Amount of asset to sweep from contract\",\"recipient\":\"The address to send the funds to\"}},\"xReceive(bytes32,uint256,address,address,uint32,bytes)\":{\"details\":\"We mostly ignore `originSender` argument: this could be a contract or EOA, but our recipient should be specified in our `callData`! We only fallback to using `originSender` IFF recipient argument is missing.If unwrapping (i.e. `withdraw`) fails, will emit UnwrappingFailed event! We will attempt to transfer the wrapped tokens to the\",\"params\":{\"amount\":\"- The amount to transfer. Should NOT be 0, or this call will revert.\",\"asset\":\"- This *should be* the wrapper contract address, an ERC20 token approved by the Connext bridge. IFF this does NOT match the WRAPPER contract address stored in this contract, we'll try to `IERC20.transfer` the assets to the intended recipient.\",\"callData\":\"- Should be a tuple of just `(address)`. The address is the intended recipient of the unwrapped native tokens. Whether it's ether or wether (i.e. whether it's wrapped native tokens or native tokens) depends on whether we succeeded in the unwrapping process.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"FundsDelivered(address,address,uint256)\":{\"notice\":\"Emitted when funds are sent from this contract\"},\"WrongAsset(address,address)\":{\"notice\":\"Emitted if the wrong wrapper asset is sent.\"}},\"kind\":\"user\",\"methods\":{\"CONNEXT()\":{\"notice\":\"Connext (diamond proxy) address, the only address permissioned to call `xReceive`.\"},\"WRAPPER()\":{\"notice\":\"The wrapper contract that this contract will always use for unwrapping native token.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"sweep(address,address,uint256)\":{\"notice\":\"Sweeps the provided token from this address to a designated recipient.\"},\"unwrapAndSweep(address,uint256)\":{\"notice\":\"Unwraps and sweeps the provided token from this address to a designated recipient.\"},\"xReceive(bytes32,uint256,address,address,uint32,bytes)\":{\"notice\":\"xReceive implementation for receiving cross-chain calls from Connext.\"}},\"notice\":\"A utility contract for unwrapping native tokens at the destination.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/xreceivers/Unwrapper.sol\":\"Unwrapper\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n    using Address for address;\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        address to,\\n        uint256 value\\n    ) internal {\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    /**\\n     * @dev Deprecated. This function has issues similar to the ones found in\\n     * {IERC20-approve}, and its usage is discouraged.\\n     *\\n     * Whenever possible, use {safeIncreaseAllowance} and\\n     * {safeDecreaseAllowance} instead.\\n     */\\n    function safeApprove(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(\\n        IERC20 token,\\n        address spender,\\n        uint256 value\\n    ) internal {\\n        unchecked {\\n            uint256 oldAllowance = token.allowance(address(this), spender);\\n            require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n            uint256 newAllowance = oldAllowance - value;\\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n        }\\n    }\\n\\n    function safePermit(\\n        IERC20Permit token,\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal {\\n        uint256 nonceBefore = token.nonces(owner);\\n        token.permit(owner, spender, value, deadline, v, r, s);\\n        uint256 nonceAfter = token.nonces(owner);\\n        require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n        // the target address contains contract code and also asserts for success in the low-level call.\\n\\n        bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IXReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\ninterface IXReceiver {\\n  function xReceive(\\n    bytes32 _transferId,\\n    uint256 _amount,\\n    address _asset,\\n    address _originSender,\\n    uint32 _origin,\\n    bytes memory _callData\\n  ) external returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x02ae47cb6441eb876b47ff35687ddd9f78eae75399af98815ada1ae618a3945c\",\"license\":\"UNLICENSED\"},\"contracts/core/xreceivers/Unwrapper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IXReceiver} from \\\"../connext/interfaces/IXReceiver.sol\\\";\\n\\ninterface IWrapper {\\n  function withdraw(uint256 wad) external;\\n\\n  function transfer(address dst, uint256 wad) external returns (bool);\\n}\\n\\n/**\\n * @notice A utility contract for unwrapping native tokens at the destination.\\n *\\n * @dev The `xreceive` function of contract may fail in the following ways:\\n * - unwrapping fails\\n * - the wrong asset is delivered, and transferring that fails\\n * - sending the native asset fails\\n * - the caller is not connext\\n * - the amount is zero\\n * - balance of the contract != amount\\n *\\n * In the event of these failures, funds for the crosschain transfer will be sent\\n * to this contract and will be held here. To rescue them, the owner of this contract\\n * can call `sweep` or `unwrapAndSweep` to transfer assets from this contract to a\\n * specified address.\\n *\\n * It is unlikely failures of these types will occur, so ownership of this contract\\n * should be renounced after a suitable trial period on mainnet.\\n *\\n * @dev Ownership of this contract is governed using the same ProposedOwnable setup\\n * that is prevalent throughout the system.\\n */\\ncontract Unwrapper is ProposedOwnable, IXReceiver {\\n  // ============ Libraries ============\\n\\n  using SafeERC20 for IERC20;\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted if the wrong wrapper asset is sent.\\n   * @param recipient - The target recipient address.\\n   * @param asset - The asset sent.\\n   */\\n  event WrongAsset(address recipient, address asset);\\n\\n  /**\\n   * @notice Emitted when funds are sent from this contract\\n   * @param recipient - The target recipient address.\\n   * @param asset - The asset sent.\\n   * @param amount - The amount of the asset sent\\n   */\\n  event FundsDelivered(address recipient, address asset, uint256 amount);\\n\\n  // ============ Properties ============\\n\\n  /**\\n   * @notice Connext (diamond proxy) address, the only address permissioned to call `xReceive`.\\n   */\\n  address public immutable CONNEXT;\\n\\n  /**\\n   * @notice The wrapper contract that this contract will always use for unwrapping native token.\\n   */\\n  IWrapper public immutable WRAPPER;\\n\\n  // ============= Modifiers ==============\\n\\n  /**\\n   * @notice Ensure caller is only the designated CONNEXT bridge address.\\n   */\\n  modifier onlyConnext() {\\n    require(msg.sender == CONNEXT, \\\"unwrap: !connext\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @dev The initial owner is set to the `msg.sender` of the contract.\\n   */\\n  constructor(address connext, address wrapper) ProposedOwnable() {\\n    _setOwner(msg.sender);\\n    WRAPPER = IWrapper(wrapper);\\n    CONNEXT = connext;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Sweeps the provided token from this address to a designated recipient.\\n   * @dev Only the owner of this contract can call this function.\\n   *\\n   * @dev Funds will end up on this contract IFF the external call on the Connext contract\\n   * fails and the transfer is reconciled. The `xreceive` function can fail in the following\\n   * cases:\\n   * - unwrapping fails\\n   * - transferring the asset fails\\n   * - `connext` is not the caller (should not sweep in this case)\\n   * - amount is zero (should not sweep in this case).\\n   *\\n   * It is left to the admin to determine the proper amounts to sweep.\\n   *\\n   * @param recipient The address to send the funds to\\n   * @param asset The asset to send from the contract to recipient\\n   * @param amount Amount of asset to sweep from contract\\n   */\\n  function sweep(\\n    address recipient,\\n    address asset,\\n    uint256 amount\\n  ) public onlyOwner {\\n    // Sanity check: amount is non-zero (otherwise, what are we unwrapping?).\\n    require(amount != 0, \\\"sweep: !amount\\\");\\n\\n    // Send funds to recipient\\n    _sweep(recipient, asset, amount);\\n  }\\n\\n  /**\\n   * @notice Unwraps and sweeps the provided token from this address to a designated recipient.\\n   * @dev Only the owner of this contract can call this function.\\n   *\\n   * @dev Funds will end up on this contract IFF the external call on the Connext contract\\n   * fails and the transfer is reconciled. The `xreceive` function can fail in the following\\n   * cases:\\n   * - unwrapping fails\\n   * - transferring the asset fails\\n   * - `connext` is not the caller (should not sweep in this case)\\n   * - amount is zero (should not sweep in this case).\\n   *\\n   * It is left to the admin to determine the proper amounts to sweep.\\n   *\\n   * @param recipient The address to send the funds to\\n   * @param amount Amount of asset to sweep from contract\\n   */\\n  function unwrapAndSweep(address recipient, uint256 amount) public onlyOwner {\\n    // Sanity check: amount is non-zero (otherwise, what are we unwrapping?).\\n    require(amount != 0, \\\"unwrapAndSweep: !amount\\\");\\n\\n    // Withdraw from wrapper\\n    WRAPPER.withdraw(amount);\\n\\n    // Send funds to recipient\\n    _sweep(recipient, address(0), amount);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice xReceive implementation for receiving cross-chain calls from Connext.\\n   * @dev We mostly ignore `originSender` argument: this could be a contract or EOA, but our\\n   * recipient should be specified in our `callData`! We only fallback to using `originSender` IFF\\n   * recipient argument is missing.\\n   * @dev If unwrapping (i.e. `withdraw`) fails, will emit UnwrappingFailed event! We will attempt\\n   * to transfer the wrapped tokens to the\\n   *\\n   * @param amount - The amount to transfer. Should NOT be 0, or this call will revert.\\n   * @param asset - This *should be* the wrapper contract address, an ERC20 token approved by the\\n   * Connext bridge. IFF this does NOT match the WRAPPER contract address stored in this contract,\\n   * we'll try to `IERC20.transfer` the assets to the intended recipient.\\n   * @param callData - Should be a tuple of just `(address)`. The address is the intended\\n   * recipient of the unwrapped native tokens. Whether it's ether or wether (i.e. whether it's\\n   * wrapped native tokens or native tokens) depends on whether we succeeded in the unwrapping\\n   * process.\\n   */\\n  function xReceive(\\n    bytes32, // transferId\\n    uint256 amount,\\n    address asset,\\n    address, // originSender\\n    uint32, // origin domain\\n    bytes memory callData\\n  ) external onlyConnext returns (bytes memory) {\\n    // Sanity check: amount is non-zero (otherwise, what are we unwrapping?).\\n    require(amount != 0, \\\"unwrap: !amount\\\");\\n\\n    // Get the target recipient, which should be in the callData.\\n    // NOTE: If recipient is the zero address, funds will be burned!\\n    address recipient = abi.decode(callData, (address));\\n\\n    // Sanity check: asset we've received matches our target wrapper.\\n    if (asset != address(WRAPPER)) {\\n      emit WrongAsset(recipient, asset);\\n      // If the delivered asset does not match our target wrapper, we try sending it anyway.\\n      _sweep(recipient, asset, amount);\\n      return bytes(\\\"\\\");\\n    }\\n\\n    // We've received wrapped native tokens; withdraw native tokens from the wrapper contract.\\n    WRAPPER.withdraw(amount);\\n\\n    // Send to recipient\\n    _sweep(recipient, address(0), amount);\\n  }\\n\\n  /**\\n   * @notice Fallback function so this contract can receive the funds from WETH\\n   */\\n  receive() external payable {}\\n\\n  // ============ Internal Functions ============\\n\\n  /**\\n   * @notice Sweeps the provided token from this address to a designated recipient.\\n   * @dev Emits the `FundsDelivered` event\\n   *\\n   * @param recipient The address to send the funds to\\n   * @param asset The asset (or address(0) for native) to send from the contract to recipient\\n   * @param amount Amount of asset to sweep from contract\\n   */\\n  function _sweep(\\n    address recipient,\\n    address asset,\\n    uint256 amount\\n  ) internal {\\n    if (asset == address(0)) {\\n      Address.sendValue(payable(recipient), amount);\\n    } else {\\n      IERC20(asset).transfer(recipient, amount);\\n    }\\n    emit FundsDelivered(recipient, asset, amount);\\n  }\\n}\\n\",\"keccak256\":\"0x371665aa8145fbc9d4784f0da97046058a30983480c69fd58d0dc719b37323c5\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/core/xreceivers/Unwrapper.sol:Unwrapper","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/core/xreceivers/Unwrapper.sol:Unwrapper","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/core/xreceivers/Unwrapper.sol:Unwrapper","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"FundsDelivered(address,address,uint256)":{"notice":"Emitted when funds are sent from this contract"},"WrongAsset(address,address)":{"notice":"Emitted if the wrong wrapper asset is sent."}},"kind":"user","methods":{"CONNEXT()":{"notice":"Connext (diamond proxy) address, the only address permissioned to call `xReceive`."},"WRAPPER()":{"notice":"The wrapper contract that this contract will always use for unwrapping native token."},"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"owner()":{"notice":"Returns the address of the current owner."},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"sweep(address,address,uint256)":{"notice":"Sweeps the provided token from this address to a designated recipient."},"unwrapAndSweep(address,uint256)":{"notice":"Unwraps and sweeps the provided token from this address to a designated recipient."},"xReceive(bytes32,uint256,address,address,uint32,bytes)":{"notice":"xReceive implementation for receiving cross-chain calls from Connext."}},"notice":"A utility contract for unwrapping native tokens at the destination.","version":1}}},"contracts/messaging/MerkleTreeManager.sol":{"MerkleTreeManager":{"abi":[{"inputs":[],"name":"MerkleLib__insert_treeIsFull","type":"error"},{"inputs":[],"name":"MerkleTreeManager__setArborist_alreadyArborist","type":"error"},{"inputs":[],"name":"MerkleTreeManager__setArborist_zeroAddress","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"updated","type":"address"}],"name":"ArboristUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"leaf","type":"bytes32"}],"name":"LeafInserted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"},{"indexed":false,"internalType":"bytes32[]","name":"leaves","type":"bytes32[]"}],"name":"LeavesInserted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"arborist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"branch","outputs":[{"internalType":"bytes32[32]","name":"","type":"bytes32[32]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_arborist","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"leaf","type":"bytes32"}],"name":"insert","outputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"},{"internalType":"uint256","name":"_count","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"leaves","type":"bytes32[]"}],"name":"insert","outputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"},{"internalType":"uint256","name":"_count","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"root","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rootAndCount","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newArborist","type":"address"}],"name":"setArborist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tree","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector.","kind":"dev","methods":{"insert(bytes32)":{"params":{"leaf":"The leaf to be inserted into the tree."},"returns":{"_count":"Current node count (i.e. number of indices) AFTER the insertion of the new leaf, provided for convenience.","_root":"Current root for convenience."}},"insert(bytes32[])":{"params":{"leaves":"The leaves to be inserted into the tree."},"returns":{"_count":"Current node count (i.e. number of indices) AFTER the insertion of the new leaf, provided for convenience.","_root":"Current root for convenience."}},"renounceOwnership()":{"details":"Renounce ownership should be impossible as long as there is a possibility the arborist may change."},"setArborist(address)":{"params":{"newArborist":"The new address to set as the current arborist."}}},"stateVariables":{"arborist":{"details":"This could be the root manager contract or a spoke connector contract, for example."}},"title":"MerkleTreeManager","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506122f2806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063c9b0a6de11610071578063c9b0a6de14610220578063d1851c9214610228578063d232c22014610239578063ebf0c71714610262578063fd54b2281461026a57600080fd5b80638da5cb5b146101db578063b1f8100d146101f2578063c4d66de814610205578063c5b350df1461021857600080fd5b806334a55ee6116100e957806334a55ee61461019a5780633cf52ffb146101ad5780634b72d0d4146101b55780636a42b8f8146101ca578063715018a6146101d357600080fd5b806306661abd1461011b5780631b373a98146101325780632d287e431461014757806331d0913c1461016f575b600080fd5b6052545b6040519081526020015b60405180910390f35b610145610140366004611f81565b610274565b005b61015a610155366004611fb1565b610362565b60408051928352602083019190915201610129565b605354610182906001600160a01b031681565b6040516001600160a01b039091168152602001610129565b61015a6101a8366004611fe0565b610473565b60025461011f565b6101bd6105ba565b604051610129919061209e565b62093a8061011f565b6101456105f6565b6000546201000090046001600160a01b0316610182565b610145610200366004611f81565b610629565b610145610213366004611f81565b6106d6565b6101456107f1565b61015a610861565b6001546001600160a01b0316610182565b6102526000546201000090046001600160a01b03161590565b6040519015158152602001610129565b61011f61087a565b60525461011f9081565b6000546201000090046001600160a01b031633146102a5576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166102cc57604051630c11a52d60e11b815260040160405180910390fd5b6053546001600160a01b0390811690821681036102fc5760405163606e957b60e11b815260040160405180910390fd5b604080516001600160a01b038084168252841660208201527ff2fa31e21376edb31995720340ba00a41a12a7c8744a9bde552660121f4b7771910160405180910390a150605380546001600160a01b0319166001600160a01b0392909216919091179055565b60535460009081906001600160a01b031633146103b25760405162461bcd60e51b815260206004820152600960248201526808585c989bdc9a5cdd60ba1b60448201526064015b60405180910390fd5b60408051610440810180835261040092869291603291839190820190839060209082845b8154815260200190600101908083116103d65750505091835250506020918201549101529061088b565b80516032906104129082906020611eef565b506020918201519101555060525461042a6032610997565b60408051828152602081018490529081018590529092507fd50e83984b64a106ac2ee6314d689ec4d2a656d5ece6d94c585796944b52240c9060600160405180910390a1915091565b60535460009081906001600160a01b031633146104be5760405162461bcd60e51b815260206004820152600960248201526808585c989bdc9a5cdd60ba1b60448201526064016103a9565b6040805161044081018083526000926032918391820190839060209082845b8154815260200190600101908083116104dd575050509183525050602091820154910152845190915060005b818110156105475761053d868281518110610526576105266120d4565b60200260200101518461088b90919063ffffffff16565b9250600101610509565b508151829060329061055c9082906020611eef565b506020918201519082015582015192506105766032610997565b93507f3ef8438c07c6b4b67e70eace906a07e9b294c2f0066803f58e705567e1aa4f1b8484876040516105ab939291906120ea565b60405180910390a15050915091565b6105c2611f2d565b604080516104008101918290529060329060209082845b8154815260200190600101908083116105d9575050505050905090565b6000546201000090046001600160a01b03163314610627576040516311a8a1bb60e31b815260040160405180910390fd5b565b6000546201000090046001600160a01b0316331461065a576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610678575060025415155b15610696576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083166201000090920416036106ca57604051634a2fb73f60e11b815260040160405180910390fd5b6106d381611d4d565b50565b600054610100900460ff16158080156106f65750600054600160ff909116105b806107105750303b158015610710575060005460ff166001145b6107735760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103a9565b6000805460ff191660011790558015610796576000805461ff0019166101001790555b61079f82611d9b565b6107a7611dcb565b80156107ed576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001546001600160a01b0316331461081c576040516311a7f27160e11b815260040160405180910390fd5b62093a806002544261082e9190612155565b1161084c576040516324e0285f60e21b815260040160405180910390fd5b600154610627906001600160a01b0316611dfa565b60008061086e6032610997565b60525490939092509050565b60006108866032610997565b905090565b610893611f4c565b60008360200180516108a490612168565b90819052905060016108b860206002612265565b6108c29190612155565b8111156108e257604051638eab04bb60e01b815260040160405180910390fd5b60005b6020811015610977578160011660010361091e5784518490826020811061090e5761090e6120d4565b6020020152508391506109919050565b84518160208110610931576109316120d4565b602002015184604051602001610951929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209350600191821c91016108e5565b50604051638eab04bb60e01b815260040160405180910390fd5b92915050565b60208101546000908082036109ce57507f27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d75792915050565b60008360018316156109f05780546000526000602052604060002093506112a3565b6002831615610a355760018101546000527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb560205260406000209350600191506112a3565b6004831615610a7a5760028101546000527fb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3060205260406000209350600291506112a3565b6008831615610abf5760038101546000527f21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba8560205260406000209350600391506112a3565b6010831615610b045760048101546000527fe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a1934460205260406000209350600491506112a3565b6020831615610b495760058101546000527f0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d60205260406000209350600591506112a3565b6040831615610b8e5760068101546000527f887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a196860205260406000209350600691506112a3565b6080831615610bd35760078101546000527fffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f8360205260406000209350600791506112a3565b610100831615610c195760088101546000527f9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af60205260406000209350600891506112a3565b610200831615610c5f5760098101546000527fcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e060205260406000209350600991506112a3565b610400831615610ca557600a8101546000527ff9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a560205260406000209350600a91506112a3565b610800831615610ceb57600b8101546000527ff8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf89260205260406000209350600b91506112a3565b611000831615610d3157600c8101546000527f3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c60205260406000209350600c91506112a3565b612000831615610d7757600d8101546000527fc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb60205260406000209350600d91506112a3565b614000831615610dbd57600e8101546000527f5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc60205260406000209350600e91506112a3565b618000831615610e0357600f8101546000527fda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d260205260406000209350600f91506112a3565b62010000831615610e4a5760108101546000527f2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f60205260406000209350601091506112a3565b62020000831615610e915760118101546000527fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a60205260406000209350601191506112a3565b62040000831615610ed85760128101546000527f5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a060205260406000209350601291506112a3565b62080000831615610f1f5760138101546000527fb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa060205260406000209350601391506112a3565b62100000831615610f665760148101546000527fc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e260205260406000209350601491506112a3565b62200000831615610fad5760158101546000527ff4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd960205260406000209350601591506112a3565b62400000831615610ff45760168101546000527f5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e37760205260406000209350601691506112a3565b6280000083161561103b5760178101546000527f4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee65260205260406000209350601791506112a3565b63010000008316156110835760188101546000527fcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef60205260406000209350601891506112a3565b63020000008316156110cb5760198101546000527f0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d60205260406000209350601991506112a3565b630400000083161561111357601a8101546000527fb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d060205260406000209350601a91506112a3565b630800000083161561115b57601b8101546000527f838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e60205260406000209350601b91506112a3565b63100000008316156111a357601c8101546000527f662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e60205260406000209350601c91506112a3565b63200000008316156111eb57601d8101546000527f388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea32260205260406000209350601d91506112a3565b634000000083161561123357601e8101546000527f93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d73560205260406000209350601e91506112a3565b638000000083161561127b57601f8101546000527f8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a960205260406000209350601f91506112a3565b7f27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d7579350602091505b601e8211611d45576001821015611301576002831680156112cf576001820154600052846020526112f8565b846000527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb56020525b50604060002093505b6002821015611357576004831680156113255760028201546000528460205261134e565b846000527fb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d306020525b50604060002093505b60038210156113ad5760088316801561137b576003820154600052846020526113a4565b846000527f21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba856020525b50604060002093505b6004821015611403576010831680156113d1576004820154600052846020526113fa565b846000527fe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a193446020525b50604060002093505b60058210156114595760208316801561142757600582015460005284602052611450565b846000527f0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d6020525b50604060002093505b60068210156114af5760408316801561147d576006820154600052846020526114a6565b846000527f887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a19686020525b50604060002093505b6007821015611505576080831680156114d3576007820154600052846020526114fc565b846000527fffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f836020525b50604060002093505b600882101561155c576101008316801561152a57600882015460005284602052611553565b846000527f9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af6020525b50604060002093505b60098210156115b35761020083168015611581576009820154600052846020526115aa565b846000527fcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e06020525b50604060002093505b600a82101561160a57610400831680156115d857600a82015460005284602052611601565b846000527ff9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a56020525b50604060002093505b600b821015611661576108008316801561162f57600b82015460005284602052611658565b846000527ff8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8926020525b50604060002093505b600c8210156116b8576110008316801561168657600c820154600052846020526116af565b846000527f3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c6020525b50604060002093505b600d82101561170f57612000831680156116dd57600d82015460005284602052611706565b846000527fc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb6020525b50604060002093505b600e821015611766576140008316801561173457600e8201546000528460205261175d565b846000527f5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc6020525b50604060002093505b600f8210156117bd576180008316801561178b57600f820154600052846020526117b4565b846000527fda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d26020525b50604060002093505b60108210156118155762010000831680156117e35760108201546000528460205261180c565b846000527f2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f6020525b50604060002093505b601182101561186d57620200008316801561183b57601182015460005284602052611864565b846000527fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a6020525b50604060002093505b60128210156118c5576204000083168015611893576012820154600052846020526118bc565b846000527f5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a06020525b50604060002093505b601382101561191d5762080000831680156118eb57601382015460005284602052611914565b846000527fb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa06020525b50604060002093505b60148210156119755762100000831680156119435760148201546000528460205261196c565b846000527fc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e26020525b50604060002093505b60158210156119cd57622000008316801561199b576015820154600052846020526119c4565b846000527ff4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd96020525b50604060002093505b6016821015611a255762400000831680156119f357601682015460005284602052611a1c565b846000527f5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3776020525b50604060002093505b6017821015611a7d576280000083168015611a4b57601782015460005284602052611a74565b846000527f4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee6526020525b50604060002093505b6018821015611ad657630100000083168015611aa457601882015460005284602052611acd565b846000527fcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef6020525b50604060002093505b6019821015611b2f57630200000083168015611afd57601982015460005284602052611b26565b846000527f0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d6020525b50604060002093505b601a821015611b8857630400000083168015611b5657601a82015460005284602052611b7f565b846000527fb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d06020525b50604060002093505b601b821015611be157630800000083168015611baf57601b82015460005284602052611bd8565b846000527f838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e6020525b50604060002093505b601c821015611c3a57631000000083168015611c0857601c82015460005284602052611c31565b846000527f662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e6020525b50604060002093505b601d821015611c9357632000000083168015611c6157601d82015460005284602052611c8a565b846000527f388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea3226020525b50604060002093505b601e821015611cec57634000000083168015611cba57601e82015460005284602052611ce3565b846000527f93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7356020525b50604060002093505b601f821015611d4557638000000083168015611d1357601f82015460005284602052611d3c565b846000527f8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a96020525b50604060002093505b505050919050565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600054610100900460ff16611dc25760405162461bcd60e51b81526004016103a990612271565b6106d381611e76565b600054610100900460ff16611df25760405162461bcd60e51b81526004016103a990612271565b610627611ebf565b600080546040516001600160a01b03808516936201000090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03909216620100000262010000600160b01b0319909216919091178155600255600180546001600160a01b0319169055565b600054610100900460ff16611e9d5760405162461bcd60e51b81526004016103a990612271565b605380546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16611ee65760405162461bcd60e51b81526004016103a990612271565b61062733611dfa565b8260208101928215611f1d579160200282015b82811115611f1d578251825591602001919060010190611f02565b50611f29929150611f6c565b5090565b6040518061040001604052806020906020820280368337509192915050565b6040518060400160405280611f5f611f2d565b8152602001600081525090565b5b80821115611f295760008155600101611f6d565b600060208284031215611f9357600080fd5b81356001600160a01b0381168114611faa57600080fd5b9392505050565b600060208284031215611fc357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215611ff357600080fd5b823567ffffffffffffffff8082111561200b57600080fd5b818501915085601f83011261201f57600080fd5b81358181111561203157612031611fca565b8060051b604051601f19603f8301168101818110858211171561205657612056611fca565b60405291825284820192508381018501918883111561207457600080fd5b938501935b8285101561209257843584529385019392850192612079565b98975050505050505050565b6104008101818360005b60208082106120b757506120cb565b8251845292830192909101906001016120a8565b50505092915050565b634e487b7160e01b600052603260045260246000fd5b6000606082018583526020858185015260606040850152818551808452608086019150828701935060005b8181101561213157845183529383019391830191600101612115565b509098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156109915761099161213f565b60006001820161217a5761217a61213f565b5060010190565b600181815b808511156121bc5781600019048211156121a2576121a261213f565b808516156121af57918102915b93841c9390800290612186565b509250929050565b6000826121d357506001610991565b816121e057506000610991565b81600181146121f657600281146122005761221c565b6001915050610991565b60ff8411156122115761221161213f565b50506001821b610991565b5060208310610133831016604e8410600b841016171561223f575081810a610991565b6122498383612181565b806000190482111561225d5761225d61213f565b029392505050565b6000611faa83836121c4565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea2646970667358221220692efb4fde2ef60f8a670bcf66710807eef1fc4f3543297bb32ad63f5a4f336564736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22F2 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x116 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xC9B0A6DE GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xC9B0A6DE EQ PUSH2 0x220 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x228 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x239 JUMPI DUP1 PUSH4 0xEBF0C717 EQ PUSH2 0x262 JUMPI DUP1 PUSH4 0xFD54B228 EQ PUSH2 0x26A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x1F2 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x218 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34A55EE6 GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0x34A55EE6 EQ PUSH2 0x19A JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x1AD JUMPI DUP1 PUSH4 0x4B72D0D4 EQ PUSH2 0x1B5 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x1CA JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6661ABD EQ PUSH2 0x11B JUMPI DUP1 PUSH4 0x1B373A98 EQ PUSH2 0x132 JUMPI DUP1 PUSH4 0x2D287E43 EQ PUSH2 0x147 JUMPI DUP1 PUSH4 0x31D0913C EQ PUSH2 0x16F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x52 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x145 PUSH2 0x140 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F81 JUMP JUMPDEST PUSH2 0x274 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x15A PUSH2 0x155 CALLDATASIZE PUSH1 0x4 PUSH2 0x1FB1 JUMP JUMPDEST PUSH2 0x362 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x129 JUMP JUMPDEST PUSH1 0x53 SLOAD PUSH2 0x182 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129 JUMP JUMPDEST PUSH2 0x15A PUSH2 0x1A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1FE0 JUMP JUMPDEST PUSH2 0x473 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x11F JUMP JUMPDEST PUSH2 0x1BD PUSH2 0x5BA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x129 SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST PUSH3 0x93A80 PUSH2 0x11F JUMP JUMPDEST PUSH2 0x145 PUSH2 0x5F6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x182 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x200 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F81 JUMP JUMPDEST PUSH2 0x629 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x213 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F81 JUMP JUMPDEST PUSH2 0x6D6 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x7F1 JUMP JUMPDEST PUSH2 0x15A PUSH2 0x861 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x182 JUMP JUMPDEST PUSH2 0x252 PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129 JUMP JUMPDEST PUSH2 0x11F PUSH2 0x87A JUMP JUMPDEST PUSH1 0x52 SLOAD PUSH2 0x11F SWAP1 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2A5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2CC JUMPI PUSH1 0x40 MLOAD PUSH4 0xC11A52D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x53 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP3 AND DUP2 SUB PUSH2 0x2FC JUMPI PUSH1 0x40 MLOAD PUSH4 0x606E957B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xF2FA31E21376EDB31995720340BA00A41A12A7C8744A9BDE552660121F4B7771 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x53 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x53 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3B2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x8585C989BDC9A5CDD PUSH1 0xBA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x440 DUP2 ADD DUP1 DUP4 MSTORE PUSH2 0x400 SWAP3 DUP7 SWAP3 SWAP2 PUSH1 0x32 SWAP2 DUP4 SWAP2 SWAP1 DUP3 ADD SWAP1 DUP4 SWAP1 PUSH1 0x20 SWAP1 DUP3 DUP5 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x3D6 JUMPI POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x20 SWAP2 DUP3 ADD SLOAD SWAP2 ADD MSTORE SWAP1 PUSH2 0x88B JUMP JUMPDEST DUP1 MLOAD PUSH1 0x32 SWAP1 PUSH2 0x412 SWAP1 DUP3 SWAP1 PUSH1 0x20 PUSH2 0x1EEF JUMP JUMPDEST POP PUSH1 0x20 SWAP2 DUP3 ADD MLOAD SWAP2 ADD SSTORE POP PUSH1 0x52 SLOAD PUSH2 0x42A PUSH1 0x32 PUSH2 0x997 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP3 POP PUSH32 0xD50E83984B64A106AC2EE6314D689EC4D2A656D5ECE6D94C585796944B52240C SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x53 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4BE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x8585C989BDC9A5CDD PUSH1 0xBA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3A9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x440 DUP2 ADD DUP1 DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x32 SWAP2 DUP4 SWAP2 DUP3 ADD SWAP1 DUP4 SWAP1 PUSH1 0x20 SWAP1 DUP3 DUP5 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x4DD JUMPI POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x20 SWAP2 DUP3 ADD SLOAD SWAP2 ADD MSTORE DUP5 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x547 JUMPI PUSH2 0x53D DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x526 JUMPI PUSH2 0x526 PUSH2 0x20D4 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0x88B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x509 JUMP JUMPDEST POP DUP2 MLOAD DUP3 SWAP1 PUSH1 0x32 SWAP1 PUSH2 0x55C SWAP1 DUP3 SWAP1 PUSH1 0x20 PUSH2 0x1EEF JUMP JUMPDEST POP PUSH1 0x20 SWAP2 DUP3 ADD MLOAD SWAP1 DUP3 ADD SSTORE DUP3 ADD MLOAD SWAP3 POP PUSH2 0x576 PUSH1 0x32 PUSH2 0x997 JUMP JUMPDEST SWAP4 POP PUSH32 0x3EF8438C07C6B4B67E70EACE906A07E9B294C2F0066803F58E705567E1AA4F1B DUP5 DUP5 DUP8 PUSH1 0x40 MLOAD PUSH2 0x5AB SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x20EA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH2 0x5C2 PUSH2 0x1F2D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x400 DUP2 ADD SWAP2 DUP3 SWAP1 MSTORE SWAP1 PUSH1 0x32 SWAP1 PUSH1 0x20 SWAP1 DUP3 DUP5 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x5D9 JUMPI POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x627 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x65A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x678 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x696 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH3 0x10000 SWAP1 SWAP3 DIV AND SUB PUSH2 0x6CA JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6D3 DUP2 PUSH2 0x1D4D JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x6F6 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x710 JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x710 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x773 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3A9 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x796 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x79F DUP3 PUSH2 0x1D9B JUMP JUMPDEST PUSH2 0x7A7 PUSH2 0x1DCB JUMP JUMPDEST DUP1 ISZERO PUSH2 0x7ED JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x81C JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x82E SWAP2 SWAP1 PUSH2 0x2155 JUMP JUMPDEST GT PUSH2 0x84C JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x627 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1DFA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x86E PUSH1 0x32 PUSH2 0x997 JUMP JUMPDEST PUSH1 0x52 SLOAD SWAP1 SWAP4 SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x886 PUSH1 0x32 PUSH2 0x997 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x893 PUSH2 0x1F4C JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x20 ADD DUP1 MLOAD PUSH2 0x8A4 SWAP1 PUSH2 0x2168 JUMP JUMPDEST SWAP1 DUP2 SWAP1 MSTORE SWAP1 POP PUSH1 0x1 PUSH2 0x8B8 PUSH1 0x20 PUSH1 0x2 PUSH2 0x2265 JUMP JUMPDEST PUSH2 0x8C2 SWAP2 SWAP1 PUSH2 0x2155 JUMP JUMPDEST DUP2 GT ISZERO PUSH2 0x8E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8EAB04BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x977 JUMPI DUP2 PUSH1 0x1 AND PUSH1 0x1 SUB PUSH2 0x91E JUMPI DUP5 MLOAD DUP5 SWAP1 DUP3 PUSH1 0x20 DUP2 LT PUSH2 0x90E JUMPI PUSH2 0x90E PUSH2 0x20D4 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE POP DUP4 SWAP2 POP PUSH2 0x991 SWAP1 POP JUMP JUMPDEST DUP5 MLOAD DUP2 PUSH1 0x20 DUP2 LT PUSH2 0x931 JUMPI PUSH2 0x931 PUSH2 0x20D4 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x951 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP4 POP PUSH1 0x1 SWAP2 DUP3 SHR SWAP2 ADD PUSH2 0x8E5 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0x8EAB04BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 DUP1 DUP3 SUB PUSH2 0x9CE JUMPI POP PUSH32 0x27AE5BA08D7291C96C8CBDDCC148BF48A6D68C7974B94356F53754EF6171D757 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 DUP4 AND ISZERO PUSH2 0x9F0 JUMPI DUP1 SLOAD PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH1 0x2 DUP4 AND ISZERO PUSH2 0xA35 JUMPI PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xAD3228B676F7D3CD4284A5443F17F1962B36E491B30A40B2405849E597BA5FB5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x1 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH1 0x4 DUP4 AND ISZERO PUSH2 0xA7A JUMPI PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xB4C11951957C6F8F642C4AF61CD6B24640FEC6DC7FC607EE8206A99E92410D30 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x2 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH1 0x8 DUP4 AND ISZERO PUSH2 0xABF JUMPI PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x21DDB9A356815C3FAC1026B6DEC5DF3124AFBADB485C9BA5A3E3398A04B7BA85 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x3 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH1 0x10 DUP4 AND ISZERO PUSH2 0xB04 JUMPI PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xE58769B32A1BEAF1EA27375A44095A0D1FB664CE2DD358E7FCBFB78C26A19344 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x4 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH1 0x20 DUP4 AND ISZERO PUSH2 0xB49 JUMPI PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xEB01EBFC9ED27500CD4DFC979272D1F0913CC9F66540D7E8005811109E1CF2D PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x5 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH1 0x40 DUP4 AND ISZERO PUSH2 0xB8E JUMPI PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x887C22BD8750D34016AC3C66B5FF102DACDD73F6B014E710B51E8022AF9A1968 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x6 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH1 0x80 DUP4 AND ISZERO PUSH2 0xBD3 JUMPI PUSH1 0x7 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xFFD70157E48063FC33C97A050F7F640233BF646CC98D9524C6B92BCF3AB56F83 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x7 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH2 0x100 DUP4 AND ISZERO PUSH2 0xC19 JUMPI PUSH1 0x8 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x9867CC5F7F196B93BAE1E27E6320742445D290F2263827498B54FEC539F756AF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x8 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH2 0x200 DUP4 AND ISZERO PUSH2 0xC5F JUMPI PUSH1 0x9 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xCEFAD4E508C098B9A7E1D8FEB19955FB02BA9675585078710969D3440F5054E0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x9 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH2 0x400 DUP4 AND ISZERO PUSH2 0xCA5 JUMPI PUSH1 0xA DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xF9DC3E7FE016E050EFF260334F18A5D4FE391D82092319F5964F2E2EB7C1C3A5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0xA SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH2 0x800 DUP4 AND ISZERO PUSH2 0xCEB JUMPI PUSH1 0xB DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xF8B13A49E282F609C317A833FB8D976D11517C571D1221A265D25AF778ECF892 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0xB SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH2 0x1000 DUP4 AND ISZERO PUSH2 0xD31 JUMPI PUSH1 0xC DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x3490C6CEEB450AECDC82E28293031D10C7D73BF85E57BF041A97360AA2C5D99C PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0xC SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH2 0x2000 DUP4 AND ISZERO PUSH2 0xD77 JUMPI PUSH1 0xD DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xC1DF82D9C4B87413EAE2EF048F94B4D3554CEA73D92B0F7AF96E0271C691E2BB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0xD SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH2 0x4000 DUP4 AND ISZERO PUSH2 0xDBD JUMPI PUSH1 0xE DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x5C67ADD7C6CAF302256ADEDF7AB114DA0ACFE870D449A3A489F781D659E8BECC PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0xE SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH2 0x8000 DUP4 AND ISZERO PUSH2 0xE03 JUMPI PUSH1 0xF DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xDA7BCE9F4E8618B6BD2F4132CE798CDC7A60E7E1460A7299E3C6342A579626D2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0xF SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH3 0x10000 DUP4 AND ISZERO PUSH2 0xE4A JUMPI PUSH1 0x10 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x2733E50F526EC2FA19A22B31E8ED50F23CD1FDF94C9154ED3A7609A2F1FF981F PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x10 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH3 0x20000 DUP4 AND ISZERO PUSH2 0xE91 JUMPI PUSH1 0x11 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xE1D3B5C807B281E4683CC6D6315CF95B9ADE8641DEFCB32372F1C126E398EF7A PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x11 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH3 0x40000 DUP4 AND ISZERO PUSH2 0xED8 JUMPI PUSH1 0x12 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x5A2DCE0A8A7F68BB74560F8F71837C2C2EBBCBF7FFFB42AE1896F13F7C7479A0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x12 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH3 0x80000 DUP4 AND ISZERO PUSH2 0xF1F JUMPI PUSH1 0x13 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xB46A28B6F55540F89444F63DE0378E3D121BE09E06CC9DED1C20E65876D36AA0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x13 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH3 0x100000 DUP4 AND ISZERO PUSH2 0xF66 JUMPI PUSH1 0x14 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xC65E9645644786B620E2DD2AD648DDFCBF4A7E5B1A3A4ECFE7F64667A3F0B7E2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x14 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH3 0x200000 DUP4 AND ISZERO PUSH2 0xFAD JUMPI PUSH1 0x15 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xF4418588ED35A2458CFFEB39B93D26F18D2AB13BDCE6AEE58E7B99359EC2DFD9 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x15 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH3 0x400000 DUP4 AND ISZERO PUSH2 0xFF4 JUMPI PUSH1 0x16 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x5A9C16DC00D6EF18B7933A6F8DC65CCB55667138776F7DEA101070DC8796E377 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x16 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH3 0x800000 DUP4 AND ISZERO PUSH2 0x103B JUMPI PUSH1 0x17 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x4DF84F40AE0C8229D0D6069E5C8F39A7C299677A09D367FC7B05E3BC380EE652 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x17 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH4 0x1000000 DUP4 AND ISZERO PUSH2 0x1083 JUMPI PUSH1 0x18 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xCDC72595F74C7B1043D0E1FFBAB734648C838DFB0527D971B602BC216C9619EF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x18 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH4 0x2000000 DUP4 AND ISZERO PUSH2 0x10CB JUMPI PUSH1 0x19 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xABF5AC974A1ED57F4050AA510DD9C74F508277B39D7973BB2DFCCC5EEB0618D PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x19 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH4 0x4000000 DUP4 AND ISZERO PUSH2 0x1113 JUMPI PUSH1 0x1A DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xB8CD74046FF337F0A7BF2C8E03E10F642C1886798D71806AB1E888D9E5EE87D0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x1A SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH4 0x8000000 DUP4 AND ISZERO PUSH2 0x115B JUMPI PUSH1 0x1B DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x838C5655CB21C6CB83313B5A631175DFF4963772CCE9108188B34AC87C81C41E PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x1B SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH4 0x10000000 DUP4 AND ISZERO PUSH2 0x11A3 JUMPI PUSH1 0x1C DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x662EE4DD2DD7B2BC707961B1E646C4047669DCB6584F0D8D770DAF5D7E7DEB2E PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x1C SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH4 0x20000000 DUP4 AND ISZERO PUSH2 0x11EB JUMPI PUSH1 0x1D DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x388AB20E2573D171A88108E79D820E98F26C0B84AA8B2F4AA4968DBB818EA322 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x1D SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH4 0x40000000 DUP4 AND ISZERO PUSH2 0x1233 JUMPI PUSH1 0x1E DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x93237C50BA75EE485F4C22ADF2F741400BDF8D6A9CC7DF7ECAE576221665D735 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x1E SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH4 0x80000000 DUP4 AND ISZERO PUSH2 0x127B JUMPI PUSH1 0x1F DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x8448818BB4AE4562849E949E17AC16E0BE16688E156B5CF15E098C627C0056A9 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x1F SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH32 0x27AE5BA08D7291C96C8CBDDCC148BF48A6D68C7974B94356F53754EF6171D757 SWAP4 POP PUSH1 0x20 SWAP2 POP JUMPDEST PUSH1 0x1E DUP3 GT PUSH2 0x1D45 JUMPI PUSH1 0x1 DUP3 LT ISZERO PUSH2 0x1301 JUMPI PUSH1 0x2 DUP4 AND DUP1 ISZERO PUSH2 0x12CF JUMPI PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x12F8 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xAD3228B676F7D3CD4284A5443F17F1962B36E491B30A40B2405849E597BA5FB5 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x1357 JUMPI PUSH1 0x4 DUP4 AND DUP1 ISZERO PUSH2 0x1325 JUMPI PUSH1 0x2 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x134E JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xB4C11951957C6F8F642C4AF61CD6B24640FEC6DC7FC607EE8206A99E92410D30 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x3 DUP3 LT ISZERO PUSH2 0x13AD JUMPI PUSH1 0x8 DUP4 AND DUP1 ISZERO PUSH2 0x137B JUMPI PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x13A4 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x21DDB9A356815C3FAC1026B6DEC5DF3124AFBADB485C9BA5A3E3398A04B7BA85 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x1403 JUMPI PUSH1 0x10 DUP4 AND DUP1 ISZERO PUSH2 0x13D1 JUMPI PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x13FA JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xE58769B32A1BEAF1EA27375A44095A0D1FB664CE2DD358E7FCBFB78C26A19344 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x1459 JUMPI PUSH1 0x20 DUP4 AND DUP1 ISZERO PUSH2 0x1427 JUMPI PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1450 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xEB01EBFC9ED27500CD4DFC979272D1F0913CC9F66540D7E8005811109E1CF2D PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x6 DUP3 LT ISZERO PUSH2 0x14AF JUMPI PUSH1 0x40 DUP4 AND DUP1 ISZERO PUSH2 0x147D JUMPI PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x14A6 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x887C22BD8750D34016AC3C66B5FF102DACDD73F6B014E710B51E8022AF9A1968 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x7 DUP3 LT ISZERO PUSH2 0x1505 JUMPI PUSH1 0x80 DUP4 AND DUP1 ISZERO PUSH2 0x14D3 JUMPI PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x14FC JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xFFD70157E48063FC33C97A050F7F640233BF646CC98D9524C6B92BCF3AB56F83 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x8 DUP3 LT ISZERO PUSH2 0x155C JUMPI PUSH2 0x100 DUP4 AND DUP1 ISZERO PUSH2 0x152A JUMPI PUSH1 0x8 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1553 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x9867CC5F7F196B93BAE1E27E6320742445D290F2263827498B54FEC539F756AF PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x9 DUP3 LT ISZERO PUSH2 0x15B3 JUMPI PUSH2 0x200 DUP4 AND DUP1 ISZERO PUSH2 0x1581 JUMPI PUSH1 0x9 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x15AA JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xCEFAD4E508C098B9A7E1D8FEB19955FB02BA9675585078710969D3440F5054E0 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0xA DUP3 LT ISZERO PUSH2 0x160A JUMPI PUSH2 0x400 DUP4 AND DUP1 ISZERO PUSH2 0x15D8 JUMPI PUSH1 0xA DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1601 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xF9DC3E7FE016E050EFF260334F18A5D4FE391D82092319F5964F2E2EB7C1C3A5 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0xB DUP3 LT ISZERO PUSH2 0x1661 JUMPI PUSH2 0x800 DUP4 AND DUP1 ISZERO PUSH2 0x162F JUMPI PUSH1 0xB DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1658 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xF8B13A49E282F609C317A833FB8D976D11517C571D1221A265D25AF778ECF892 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0xC DUP3 LT ISZERO PUSH2 0x16B8 JUMPI PUSH2 0x1000 DUP4 AND DUP1 ISZERO PUSH2 0x1686 JUMPI PUSH1 0xC DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x16AF JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x3490C6CEEB450AECDC82E28293031D10C7D73BF85E57BF041A97360AA2C5D99C PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0xD DUP3 LT ISZERO PUSH2 0x170F JUMPI PUSH2 0x2000 DUP4 AND DUP1 ISZERO PUSH2 0x16DD JUMPI PUSH1 0xD DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1706 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xC1DF82D9C4B87413EAE2EF048F94B4D3554CEA73D92B0F7AF96E0271C691E2BB PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0xE DUP3 LT ISZERO PUSH2 0x1766 JUMPI PUSH2 0x4000 DUP4 AND DUP1 ISZERO PUSH2 0x1734 JUMPI PUSH1 0xE DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x175D JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x5C67ADD7C6CAF302256ADEDF7AB114DA0ACFE870D449A3A489F781D659E8BECC PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0xF DUP3 LT ISZERO PUSH2 0x17BD JUMPI PUSH2 0x8000 DUP4 AND DUP1 ISZERO PUSH2 0x178B JUMPI PUSH1 0xF DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x17B4 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xDA7BCE9F4E8618B6BD2F4132CE798CDC7A60E7E1460A7299E3C6342A579626D2 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x10 DUP3 LT ISZERO PUSH2 0x1815 JUMPI PUSH3 0x10000 DUP4 AND DUP1 ISZERO PUSH2 0x17E3 JUMPI PUSH1 0x10 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x180C JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x2733E50F526EC2FA19A22B31E8ED50F23CD1FDF94C9154ED3A7609A2F1FF981F PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x11 DUP3 LT ISZERO PUSH2 0x186D JUMPI PUSH3 0x20000 DUP4 AND DUP1 ISZERO PUSH2 0x183B JUMPI PUSH1 0x11 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1864 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xE1D3B5C807B281E4683CC6D6315CF95B9ADE8641DEFCB32372F1C126E398EF7A PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x12 DUP3 LT ISZERO PUSH2 0x18C5 JUMPI PUSH3 0x40000 DUP4 AND DUP1 ISZERO PUSH2 0x1893 JUMPI PUSH1 0x12 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x18BC JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x5A2DCE0A8A7F68BB74560F8F71837C2C2EBBCBF7FFFB42AE1896F13F7C7479A0 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x13 DUP3 LT ISZERO PUSH2 0x191D JUMPI PUSH3 0x80000 DUP4 AND DUP1 ISZERO PUSH2 0x18EB JUMPI PUSH1 0x13 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1914 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xB46A28B6F55540F89444F63DE0378E3D121BE09E06CC9DED1C20E65876D36AA0 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x14 DUP3 LT ISZERO PUSH2 0x1975 JUMPI PUSH3 0x100000 DUP4 AND DUP1 ISZERO PUSH2 0x1943 JUMPI PUSH1 0x14 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x196C JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xC65E9645644786B620E2DD2AD648DDFCBF4A7E5B1A3A4ECFE7F64667A3F0B7E2 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x15 DUP3 LT ISZERO PUSH2 0x19CD JUMPI PUSH3 0x200000 DUP4 AND DUP1 ISZERO PUSH2 0x199B JUMPI PUSH1 0x15 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x19C4 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xF4418588ED35A2458CFFEB39B93D26F18D2AB13BDCE6AEE58E7B99359EC2DFD9 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x16 DUP3 LT ISZERO PUSH2 0x1A25 JUMPI PUSH3 0x400000 DUP4 AND DUP1 ISZERO PUSH2 0x19F3 JUMPI PUSH1 0x16 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1A1C JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x5A9C16DC00D6EF18B7933A6F8DC65CCB55667138776F7DEA101070DC8796E377 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x17 DUP3 LT ISZERO PUSH2 0x1A7D JUMPI PUSH3 0x800000 DUP4 AND DUP1 ISZERO PUSH2 0x1A4B JUMPI PUSH1 0x17 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1A74 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x4DF84F40AE0C8229D0D6069E5C8F39A7C299677A09D367FC7B05E3BC380EE652 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x18 DUP3 LT ISZERO PUSH2 0x1AD6 JUMPI PUSH4 0x1000000 DUP4 AND DUP1 ISZERO PUSH2 0x1AA4 JUMPI PUSH1 0x18 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1ACD JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xCDC72595F74C7B1043D0E1FFBAB734648C838DFB0527D971B602BC216C9619EF PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x19 DUP3 LT ISZERO PUSH2 0x1B2F JUMPI PUSH4 0x2000000 DUP4 AND DUP1 ISZERO PUSH2 0x1AFD JUMPI PUSH1 0x19 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1B26 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xABF5AC974A1ED57F4050AA510DD9C74F508277B39D7973BB2DFCCC5EEB0618D PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x1A DUP3 LT ISZERO PUSH2 0x1B88 JUMPI PUSH4 0x4000000 DUP4 AND DUP1 ISZERO PUSH2 0x1B56 JUMPI PUSH1 0x1A DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1B7F JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xB8CD74046FF337F0A7BF2C8E03E10F642C1886798D71806AB1E888D9E5EE87D0 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x1B DUP3 LT ISZERO PUSH2 0x1BE1 JUMPI PUSH4 0x8000000 DUP4 AND DUP1 ISZERO PUSH2 0x1BAF JUMPI PUSH1 0x1B DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1BD8 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x838C5655CB21C6CB83313B5A631175DFF4963772CCE9108188B34AC87C81C41E PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x1C DUP3 LT ISZERO PUSH2 0x1C3A JUMPI PUSH4 0x10000000 DUP4 AND DUP1 ISZERO PUSH2 0x1C08 JUMPI PUSH1 0x1C DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1C31 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x662EE4DD2DD7B2BC707961B1E646C4047669DCB6584F0D8D770DAF5D7E7DEB2E PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x1D DUP3 LT ISZERO PUSH2 0x1C93 JUMPI PUSH4 0x20000000 DUP4 AND DUP1 ISZERO PUSH2 0x1C61 JUMPI PUSH1 0x1D DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1C8A JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x388AB20E2573D171A88108E79D820E98F26C0B84AA8B2F4AA4968DBB818EA322 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x1E DUP3 LT ISZERO PUSH2 0x1CEC JUMPI PUSH4 0x40000000 DUP4 AND DUP1 ISZERO PUSH2 0x1CBA JUMPI PUSH1 0x1E DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1CE3 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x93237C50BA75EE485F4C22ADF2F741400BDF8D6A9CC7DF7ECAE576221665D735 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x1F DUP3 LT ISZERO PUSH2 0x1D45 JUMPI PUSH4 0x80000000 DUP4 AND DUP1 ISZERO PUSH2 0x1D13 JUMPI PUSH1 0x1F DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1D3C JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x8448818BB4AE4562849E949E17AC16E0BE16688E156B5CF15E098C627C0056A9 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1DC2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A9 SWAP1 PUSH2 0x2271 JUMP JUMPDEST PUSH2 0x6D3 DUP2 PUSH2 0x1E76 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1DF2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A9 SWAP1 PUSH2 0x2271 JUMP JUMPDEST PUSH2 0x627 PUSH2 0x1EBF JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 PUSH3 0x10000 SWAP1 SWAP4 DIV AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH3 0x10000 MUL PUSH3 0x10000 PUSH1 0x1 PUSH1 0xB0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1E9D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A9 SWAP1 PUSH2 0x2271 JUMP JUMPDEST PUSH1 0x53 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1EE6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A9 SWAP1 PUSH2 0x2271 JUMP JUMPDEST PUSH2 0x627 CALLER PUSH2 0x1DFA JUMP JUMPDEST DUP3 PUSH1 0x20 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x1F1D JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1F1D JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1F02 JUMP JUMPDEST POP PUSH2 0x1F29 SWAP3 SWAP2 POP PUSH2 0x1F6C JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x400 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x1F5F PUSH2 0x1F2D JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1F29 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1F6D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F93 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1FAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1FC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1FF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x200B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x201F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x2031 JUMPI PUSH2 0x2031 PUSH2 0x1FCA JUMP JUMPDEST DUP1 PUSH1 0x5 SHL PUSH1 0x40 MLOAD PUSH1 0x1F NOT PUSH1 0x3F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT DUP6 DUP3 GT OR ISZERO PUSH2 0x2056 JUMPI PUSH2 0x2056 PUSH2 0x1FCA JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 DUP3 MSTORE DUP5 DUP3 ADD SWAP3 POP DUP4 DUP2 ADD DUP6 ADD SWAP2 DUP9 DUP4 GT ISZERO PUSH2 0x2074 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP3 DUP6 LT ISZERO PUSH2 0x2092 JUMPI DUP5 CALLDATALOAD DUP5 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP3 DUP6 ADD SWAP3 PUSH2 0x2079 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x400 DUP2 ADD DUP2 DUP4 PUSH1 0x0 JUMPDEST PUSH1 0x20 DUP1 DUP3 LT PUSH2 0x20B7 JUMPI POP PUSH2 0x20CB JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x20A8 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD DUP6 DUP4 MSTORE PUSH1 0x20 DUP6 DUP2 DUP6 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP6 ADD MSTORE DUP2 DUP6 MLOAD DUP1 DUP5 MSTORE PUSH1 0x80 DUP7 ADD SWAP2 POP DUP3 DUP8 ADD SWAP4 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2131 JUMPI DUP5 MLOAD DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2115 JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x991 JUMPI PUSH2 0x991 PUSH2 0x213F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x217A JUMPI PUSH2 0x217A PUSH2 0x213F JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x21BC JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x21A2 JUMPI PUSH2 0x21A2 PUSH2 0x213F JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x21AF JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x2186 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x21D3 JUMPI POP PUSH1 0x1 PUSH2 0x991 JUMP JUMPDEST DUP2 PUSH2 0x21E0 JUMPI POP PUSH1 0x0 PUSH2 0x991 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x21F6 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x2200 JUMPI PUSH2 0x221C JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x991 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x2211 JUMPI PUSH2 0x2211 PUSH2 0x213F JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x991 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x223F JUMPI POP DUP2 DUP2 EXP PUSH2 0x991 JUMP JUMPDEST PUSH2 0x2249 DUP4 DUP4 PUSH2 0x2181 JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x225D JUMPI PUSH2 0x225D PUSH2 0x213F JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1FAA DUP4 DUP4 PUSH2 0x21C4 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2B SWAP1 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 PUSH1 0x40 DUP3 ADD MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH10 0x2EFB4FDE2EF60F8A670B 0xCF PUSH7 0x710807EEF1FC4F CALLDATALOAD NUMBER 0x29 PUSH28 0xB32AD63F5A4F336564736F6C63430008110033000000000000000000 ","sourceMap":"460:5029:112:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@__MerkleTreeManager_init_38148":{"entryPoint":7579,"id":38148,"parameterSlots":1,"returnSlots":0},"@__MerkleTreeManager_init_unchained_38160":{"entryPoint":7798,"id":38160,"parameterSlots":1,"returnSlots":0},"@__ProposedOwnable_init_49948":{"entryPoint":7627,"id":49948,"parameterSlots":0,"returnSlots":0},"@__ProposedOwnable_init_unchained_49959":{"entryPoint":7871,"id":49959,"parameterSlots":0,"returnSlots":0},"@_setOwner_49908":{"entryPoint":7674,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":7501,"id":49927,"parameterSlots":1,"returnSlots":0},"@acceptProposedOwner_49887":{"entryPoint":2033,"id":49887,"parameterSlots":0,"returnSlots":0},"@arborist_38059":{"entryPoint":null,"id":38059,"parameterSlots":0,"returnSlots":0},"@branch_38083":{"entryPoint":1466,"id":38083,"parameterSlots":0,"returnSlots":1},"@count_38104":{"entryPoint":null,"id":38104,"parameterSlots":0,"returnSlots":1},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@initialize_38135":{"entryPoint":1750,"id":38135,"parameterSlots":1,"returnSlots":0},"@insert_38275":{"entryPoint":1139,"id":38275,"parameterSlots":1,"returnSlots":2},"@insert_38312":{"entryPoint":866,"id":38312,"parameterSlots":1,"returnSlots":2},"@insert_48956":{"entryPoint":2187,"id":48956,"parameterSlots":2,"returnSlots":1},"@isContract_9235":{"entryPoint":null,"id":9235,"parameterSlots":1,"returnSlots":1},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@proposeNewOwner_49841":{"entryPoint":1577,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_38207":{"entryPoint":1526,"id":38207,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@rootAndCount_38120":{"entryPoint":2145,"id":38120,"parameterSlots":0,"returnSlots":2},"@root_38094":{"entryPoint":2170,"id":38094,"parameterSlots":0,"returnSlots":1},"@root_48982":{"entryPoint":2455,"id":48982,"parameterSlots":1,"returnSlots":1},"@setArborist_38199":{"entryPoint":628,"id":38199,"parameterSlots":1,"returnSlots":0},"@tree_38056":{"entryPoint":null,"id":38056,"parameterSlots":0,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":8065,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_bytes32_$dyn_memory_ptr":{"entryPoint":8160,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":8113,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_array$_t_bytes32_$32_memory_ptr__to_t_array$_t_bytes32_$32_memory_ptr__fromStack_reversed":{"entryPoint":8350,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint256__to_t_bytes32_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint256_t_array$_t_bytes32_$dyn_memory_ptr__to_t_bytes32_t_uint256_t_array$_t_bytes32_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":8426,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint256_t_bytes32__to_t_bytes32_t_uint256_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_144b471da8d21e2e7d9e3c76d3f72ab61efa53056eb4b5716c6251d10014587c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":8817,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":8577,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":8805,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":8644,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":8533,"id":null,"parameterSlots":2,"returnSlots":1},"increment_t_uint256":{"entryPoint":8552,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":8511,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":8404,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":8138,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:8234:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:76:181","statements":[{"nodeType":"YulAssignment","src":"125:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:181"},"nodeType":"YulFunctionCall","src":"133:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"178:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:181"},"nodeType":"YulFunctionCall","src":"160:25:181"},"nodeType":"YulExpressionStatement","src":"160:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:181","type":""}],"src":"14:177:181"},{"body":{"nodeType":"YulBlock","src":"266:216:181","statements":[{"body":{"nodeType":"YulBlock","src":"312:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"321:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"324:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"314:6:181"},"nodeType":"YulFunctionCall","src":"314:12:181"},"nodeType":"YulExpressionStatement","src":"314:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"287:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"296:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"283:3:181"},"nodeType":"YulFunctionCall","src":"283:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"308:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"279:3:181"},"nodeType":"YulFunctionCall","src":"279:32:181"},"nodeType":"YulIf","src":"276:52:181"},{"nodeType":"YulVariableDeclaration","src":"337:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"363:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"350:12:181"},"nodeType":"YulFunctionCall","src":"350:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"341:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"436:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"445:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"448:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"438:6:181"},"nodeType":"YulFunctionCall","src":"438:12:181"},"nodeType":"YulExpressionStatement","src":"438:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"395:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"406:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"421:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"426:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"417:3:181"},"nodeType":"YulFunctionCall","src":"417:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"430:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"413:3:181"},"nodeType":"YulFunctionCall","src":"413:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"402:3:181"},"nodeType":"YulFunctionCall","src":"402:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"392:2:181"},"nodeType":"YulFunctionCall","src":"392:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"385:6:181"},"nodeType":"YulFunctionCall","src":"385:50:181"},"nodeType":"YulIf","src":"382:70:181"},{"nodeType":"YulAssignment","src":"461:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"471:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"461:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"232:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"243:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"255:6:181","type":""}],"src":"196:286:181"},{"body":{"nodeType":"YulBlock","src":"557:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"603:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"612:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"615:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"605:6:181"},"nodeType":"YulFunctionCall","src":"605:12:181"},"nodeType":"YulExpressionStatement","src":"605:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"578:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"587:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"574:3:181"},"nodeType":"YulFunctionCall","src":"574:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"599:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"570:3:181"},"nodeType":"YulFunctionCall","src":"570:32:181"},"nodeType":"YulIf","src":"567:52:181"},{"nodeType":"YulAssignment","src":"628:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"651:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"638:12:181"},"nodeType":"YulFunctionCall","src":"638:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"628:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"523:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"534:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"546:6:181","type":""}],"src":"487:180:181"},{"body":{"nodeType":"YulBlock","src":"801:119:181","statements":[{"nodeType":"YulAssignment","src":"811:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"823:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"834:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"819:3:181"},"nodeType":"YulFunctionCall","src":"819:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"811:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"853:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"864:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"846:6:181"},"nodeType":"YulFunctionCall","src":"846:25:181"},"nodeType":"YulExpressionStatement","src":"846:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"891:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"902:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"887:3:181"},"nodeType":"YulFunctionCall","src":"887:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"907:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"880:6:181"},"nodeType":"YulFunctionCall","src":"880:34:181"},"nodeType":"YulExpressionStatement","src":"880:34:181"}]},"name":"abi_encode_tuple_t_bytes32_t_uint256__to_t_bytes32_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"762:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"773:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"781:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"792:4:181","type":""}],"src":"672:248:181"},{"body":{"nodeType":"YulBlock","src":"1026:102:181","statements":[{"nodeType":"YulAssignment","src":"1036:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1048:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1059:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1044:3:181"},"nodeType":"YulFunctionCall","src":"1044:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1036:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1078:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1093:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1109:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1114:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1105:3:181"},"nodeType":"YulFunctionCall","src":"1105:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1118:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1101:3:181"},"nodeType":"YulFunctionCall","src":"1101:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1089:3:181"},"nodeType":"YulFunctionCall","src":"1089:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1071:6:181"},"nodeType":"YulFunctionCall","src":"1071:51:181"},"nodeType":"YulExpressionStatement","src":"1071:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"995:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1006:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1017:4:181","type":""}],"src":"925:203:181"},{"body":{"nodeType":"YulBlock","src":"1165:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1182:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1189:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1194:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1185:3:181"},"nodeType":"YulFunctionCall","src":"1185:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1175:6:181"},"nodeType":"YulFunctionCall","src":"1175:31:181"},"nodeType":"YulExpressionStatement","src":"1175:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1222:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1225:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1215:6:181"},"nodeType":"YulFunctionCall","src":"1215:15:181"},"nodeType":"YulExpressionStatement","src":"1215:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1246:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1249:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1239:6:181"},"nodeType":"YulFunctionCall","src":"1239:15:181"},"nodeType":"YulExpressionStatement","src":"1239:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1133:127:181"},{"body":{"nodeType":"YulBlock","src":"1360:1020:181","statements":[{"nodeType":"YulVariableDeclaration","src":"1370:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1380:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1374:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1427:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1436:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1439:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1429:6:181"},"nodeType":"YulFunctionCall","src":"1429:12:181"},"nodeType":"YulExpressionStatement","src":"1429:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1402:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1411:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1398:3:181"},"nodeType":"YulFunctionCall","src":"1398:23:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1423:2:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1394:3:181"},"nodeType":"YulFunctionCall","src":"1394:32:181"},"nodeType":"YulIf","src":"1391:52:181"},{"nodeType":"YulVariableDeclaration","src":"1452:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1479:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1466:12:181"},"nodeType":"YulFunctionCall","src":"1466:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1456:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1498:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1508:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1502:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1553:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1562:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1565:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1555:6:181"},"nodeType":"YulFunctionCall","src":"1555:12:181"},"nodeType":"YulExpressionStatement","src":"1555:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1541:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"1549:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1538:2:181"},"nodeType":"YulFunctionCall","src":"1538:14:181"},"nodeType":"YulIf","src":"1535:34:181"},{"nodeType":"YulVariableDeclaration","src":"1578:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1592:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1603:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1588:3:181"},"nodeType":"YulFunctionCall","src":"1588:22:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"1582:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1658:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1667:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1670:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1660:6:181"},"nodeType":"YulFunctionCall","src":"1660:12:181"},"nodeType":"YulExpressionStatement","src":"1660:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1637:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1641:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1633:3:181"},"nodeType":"YulFunctionCall","src":"1633:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1648:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1629:3:181"},"nodeType":"YulFunctionCall","src":"1629:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1622:6:181"},"nodeType":"YulFunctionCall","src":"1622:35:181"},"nodeType":"YulIf","src":"1619:55:181"},{"nodeType":"YulVariableDeclaration","src":"1683:26:181","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1706:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1693:12:181"},"nodeType":"YulFunctionCall","src":"1693:16:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"1687:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1732:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1734:16:181"},"nodeType":"YulFunctionCall","src":"1734:18:181"},"nodeType":"YulExpressionStatement","src":"1734:18:181"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"1724:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"1728:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1721:2:181"},"nodeType":"YulFunctionCall","src":"1721:10:181"},"nodeType":"YulIf","src":"1718:36:181"},{"nodeType":"YulVariableDeclaration","src":"1763:20:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1777:1:181","type":"","value":"5"},{"name":"_4","nodeType":"YulIdentifier","src":"1780:2:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1773:3:181"},"nodeType":"YulFunctionCall","src":"1773:10:181"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"1767:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1792:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1812:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1806:5:181"},"nodeType":"YulFunctionCall","src":"1806:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1796:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1824:56:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1846:6:181"},{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"1862:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1866:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1858:3:181"},"nodeType":"YulFunctionCall","src":"1858:11:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1875:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1871:3:181"},"nodeType":"YulFunctionCall","src":"1871:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1854:3:181"},"nodeType":"YulFunctionCall","src":"1854:25:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1842:3:181"},"nodeType":"YulFunctionCall","src":"1842:38:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1828:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1939:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1941:16:181"},"nodeType":"YulFunctionCall","src":"1941:18:181"},"nodeType":"YulExpressionStatement","src":"1941:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1898:10:181"},{"name":"_2","nodeType":"YulIdentifier","src":"1910:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1895:2:181"},"nodeType":"YulFunctionCall","src":"1895:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1918:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1930:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1915:2:181"},"nodeType":"YulFunctionCall","src":"1915:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1892:2:181"},"nodeType":"YulFunctionCall","src":"1892:46:181"},"nodeType":"YulIf","src":"1889:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1977:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1981:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1970:6:181"},"nodeType":"YulFunctionCall","src":"1970:22:181"},"nodeType":"YulExpressionStatement","src":"1970:22:181"},{"nodeType":"YulVariableDeclaration","src":"2001:17:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"2012:6:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"2005:3:181","type":""}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2034:6:181"},{"name":"_4","nodeType":"YulIdentifier","src":"2042:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2027:6:181"},"nodeType":"YulFunctionCall","src":"2027:18:181"},"nodeType":"YulExpressionStatement","src":"2027:18:181"},{"nodeType":"YulAssignment","src":"2054:22:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2065:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2073:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2061:3:181"},"nodeType":"YulFunctionCall","src":"2061:15:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2054:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"2085:34:181","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2107:2:181"},{"name":"_5","nodeType":"YulIdentifier","src":"2111:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2103:3:181"},"nodeType":"YulFunctionCall","src":"2103:11:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2116:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2099:3:181"},"nodeType":"YulFunctionCall","src":"2099:20:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"2089:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2151:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2160:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2163:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2153:6:181"},"nodeType":"YulFunctionCall","src":"2153:12:181"},"nodeType":"YulExpressionStatement","src":"2153:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"2134:6:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2142:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2131:2:181"},"nodeType":"YulFunctionCall","src":"2131:19:181"},"nodeType":"YulIf","src":"2128:39:181"},{"nodeType":"YulVariableDeclaration","src":"2176:22:181","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2191:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2195:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2187:3:181"},"nodeType":"YulFunctionCall","src":"2187:11:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"2180:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2263:86:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2284:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2302:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2289:12:181"},"nodeType":"YulFunctionCall","src":"2289:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2277:6:181"},"nodeType":"YulFunctionCall","src":"2277:30:181"},"nodeType":"YulExpressionStatement","src":"2277:30:181"},{"nodeType":"YulAssignment","src":"2320:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2331:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2336:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2327:3:181"},"nodeType":"YulFunctionCall","src":"2327:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2320:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2218:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"2223:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2215:2:181"},"nodeType":"YulFunctionCall","src":"2215:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2231:23:181","statements":[{"nodeType":"YulAssignment","src":"2233:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2244:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2249:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2240:3:181"},"nodeType":"YulFunctionCall","src":"2240:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"2233:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"2211:3:181","statements":[]},"src":"2207:142:181"},{"nodeType":"YulAssignment","src":"2358:16:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"2368:6:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2358:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_bytes32_$dyn_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1326:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1337:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1349:6:181","type":""}],"src":"1265:1115:181"},{"body":{"nodeType":"YulBlock","src":"2534:385:181","statements":[{"nodeType":"YulAssignment","src":"2544:28:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2556:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2567:4:181","type":"","value":"1024"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2552:3:181"},"nodeType":"YulFunctionCall","src":"2552:20:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2544:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"2581:20:181","value":{"name":"headStart","nodeType":"YulIdentifier","src":"2592:9:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"2585:3:181","type":""}]},{"nodeType":"YulAssignment","src":"2610:16:181","value":{"name":"headStart","nodeType":"YulIdentifier","src":"2617:9:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"2610:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"2635:20:181","value":{"name":"value0","nodeType":"YulIdentifier","src":"2649:6:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"2639:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2664:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2673:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2668:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2723:190:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2737:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2747:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2741:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2785:9:181","statements":[{"nodeType":"YulBreak","src":"2787:5:181"}]},"condition":{"arguments":[{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2777:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2780:2:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2774:2:181"},"nodeType":"YulFunctionCall","src":"2774:9:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2767:6:181"},"nodeType":"YulFunctionCall","src":"2767:17:181"},"nodeType":"YulIf","src":"2764:30:181"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2814:3:181"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2825:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2819:5:181"},"nodeType":"YulFunctionCall","src":"2819:13:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2807:6:181"},"nodeType":"YulFunctionCall","src":"2807:26:181"},"nodeType":"YulExpressionStatement","src":"2807:26:181"},{"nodeType":"YulAssignment","src":"2846:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2857:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2862:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2853:3:181"},"nodeType":"YulFunctionCall","src":"2853:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"2846:3:181"}]},{"nodeType":"YulAssignment","src":"2878:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2892:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2900:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2888:3:181"},"nodeType":"YulFunctionCall","src":"2888:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2878:6:181"}]}]},"condition":{"kind":"bool","nodeType":"YulLiteral","src":"2691:4:181","type":"","value":"true"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2696:18:181","statements":[{"nodeType":"YulAssignment","src":"2698:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2707:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"2710:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2703:3:181"},"nodeType":"YulFunctionCall","src":"2703:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2698:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"2687:3:181","statements":[]},"src":"2683:230:181"}]},"name":"abi_encode_tuple_t_array$_t_bytes32_$32_memory_ptr__to_t_array$_t_bytes32_$32_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2503:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2514:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2525:4:181","type":""}],"src":"2385:534:181"},{"body":{"nodeType":"YulBlock","src":"3019:92:181","statements":[{"nodeType":"YulAssignment","src":"3029:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3041:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3052:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3037:3:181"},"nodeType":"YulFunctionCall","src":"3037:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3029:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3071:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3096:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3089:6:181"},"nodeType":"YulFunctionCall","src":"3089:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3082:6:181"},"nodeType":"YulFunctionCall","src":"3082:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3064:6:181"},"nodeType":"YulFunctionCall","src":"3064:41:181"},"nodeType":"YulExpressionStatement","src":"3064:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2988:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2999:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3010:4:181","type":""}],"src":"2924:187:181"},{"body":{"nodeType":"YulBlock","src":"3217:76:181","statements":[{"nodeType":"YulAssignment","src":"3227:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3239:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3250:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3235:3:181"},"nodeType":"YulFunctionCall","src":"3235:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3227:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3269:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"3280:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3262:6:181"},"nodeType":"YulFunctionCall","src":"3262:25:181"},"nodeType":"YulExpressionStatement","src":"3262:25:181"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3186:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3197:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3208:4:181","type":""}],"src":"3116:177:181"},{"body":{"nodeType":"YulBlock","src":"3427:175:181","statements":[{"nodeType":"YulAssignment","src":"3437:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3449:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3460:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3445:3:181"},"nodeType":"YulFunctionCall","src":"3445:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3437:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"3472:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3490:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3495:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3486:3:181"},"nodeType":"YulFunctionCall","src":"3486:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3499:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3482:3:181"},"nodeType":"YulFunctionCall","src":"3482:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3476:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3517:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3532:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3540:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3528:3:181"},"nodeType":"YulFunctionCall","src":"3528:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3510:6:181"},"nodeType":"YulFunctionCall","src":"3510:34:181"},"nodeType":"YulExpressionStatement","src":"3510:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3564:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3575:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3560:3:181"},"nodeType":"YulFunctionCall","src":"3560:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3584:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3592:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3580:3:181"},"nodeType":"YulFunctionCall","src":"3580:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3553:6:181"},"nodeType":"YulFunctionCall","src":"3553:43:181"},"nodeType":"YulExpressionStatement","src":"3553:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3388:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3399:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3407:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3418:4:181","type":""}],"src":"3298:304:181"},{"body":{"nodeType":"YulBlock","src":"3781:158:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3798:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3809:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3791:6:181"},"nodeType":"YulFunctionCall","src":"3791:21:181"},"nodeType":"YulExpressionStatement","src":"3791:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3832:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3843:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3828:3:181"},"nodeType":"YulFunctionCall","src":"3828:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3848:1:181","type":"","value":"9"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3821:6:181"},"nodeType":"YulFunctionCall","src":"3821:29:181"},"nodeType":"YulExpressionStatement","src":"3821:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3870:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3881:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3866:3:181"},"nodeType":"YulFunctionCall","src":"3866:18:181"},{"hexValue":"216172626f72697374","kind":"string","nodeType":"YulLiteral","src":"3886:11:181","type":"","value":"!arborist"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3859:6:181"},"nodeType":"YulFunctionCall","src":"3859:39:181"},"nodeType":"YulExpressionStatement","src":"3859:39:181"},{"nodeType":"YulAssignment","src":"3907:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3919:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3930:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3915:3:181"},"nodeType":"YulFunctionCall","src":"3915:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3907:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_144b471da8d21e2e7d9e3c76d3f72ab61efa53056eb4b5716c6251d10014587c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3758:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3772:4:181","type":""}],"src":"3607:332:181"},{"body":{"nodeType":"YulBlock","src":"4101:162:181","statements":[{"nodeType":"YulAssignment","src":"4111:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4123:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4134:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4119:3:181"},"nodeType":"YulFunctionCall","src":"4119:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4111:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4153:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"4164:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4146:6:181"},"nodeType":"YulFunctionCall","src":"4146:25:181"},"nodeType":"YulExpressionStatement","src":"4146:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4191:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4202:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4187:3:181"},"nodeType":"YulFunctionCall","src":"4187:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"4207:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4180:6:181"},"nodeType":"YulFunctionCall","src":"4180:34:181"},"nodeType":"YulExpressionStatement","src":"4180:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4234:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4245:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4230:3:181"},"nodeType":"YulFunctionCall","src":"4230:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"4250:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4223:6:181"},"nodeType":"YulFunctionCall","src":"4223:34:181"},"nodeType":"YulExpressionStatement","src":"4223:34:181"}]},"name":"abi_encode_tuple_t_bytes32_t_uint256_t_bytes32__to_t_bytes32_t_uint256_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4054:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4065:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4073:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4081:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4092:4:181","type":""}],"src":"3944:319:181"},{"body":{"nodeType":"YulBlock","src":"4300:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4317:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4324:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"4329:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4320:3:181"},"nodeType":"YulFunctionCall","src":"4320:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4310:6:181"},"nodeType":"YulFunctionCall","src":"4310:31:181"},"nodeType":"YulExpressionStatement","src":"4310:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4357:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4360:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4350:6:181"},"nodeType":"YulFunctionCall","src":"4350:15:181"},"nodeType":"YulExpressionStatement","src":"4350:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4381:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4384:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4374:6:181"},"nodeType":"YulFunctionCall","src":"4374:15:181"},"nodeType":"YulExpressionStatement","src":"4374:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"4268:127:181"},{"body":{"nodeType":"YulBlock","src":"4607:568:181","statements":[{"nodeType":"YulVariableDeclaration","src":"4617:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4635:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4646:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4631:3:181"},"nodeType":"YulFunctionCall","src":"4631:18:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"4621:6:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4665:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"4676:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4658:6:181"},"nodeType":"YulFunctionCall","src":"4658:25:181"},"nodeType":"YulExpressionStatement","src":"4658:25:181"},{"nodeType":"YulVariableDeclaration","src":"4692:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4702:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4696:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4724:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4735:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4720:3:181"},"nodeType":"YulFunctionCall","src":"4720:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"4740:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4713:6:181"},"nodeType":"YulFunctionCall","src":"4713:34:181"},"nodeType":"YulExpressionStatement","src":"4713:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4767:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4778:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4763:3:181"},"nodeType":"YulFunctionCall","src":"4763:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4783:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4756:6:181"},"nodeType":"YulFunctionCall","src":"4756:30:181"},"nodeType":"YulExpressionStatement","src":"4756:30:181"},{"nodeType":"YulVariableDeclaration","src":"4795:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"4806:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"4799:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4821:27:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"4841:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4835:5:181"},"nodeType":"YulFunctionCall","src":"4835:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"4825:6:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"4864:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"4872:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4857:6:181"},"nodeType":"YulFunctionCall","src":"4857:22:181"},"nodeType":"YulExpressionStatement","src":"4857:22:181"},{"nodeType":"YulAssignment","src":"4888:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4899:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4910:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4895:3:181"},"nodeType":"YulFunctionCall","src":"4895:19:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"4888:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"4923:29:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"4941:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4949:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4937:3:181"},"nodeType":"YulFunctionCall","src":"4937:15:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"4927:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4961:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4970:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"4965:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5029:120:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5050:3:181"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"5061:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5055:5:181"},"nodeType":"YulFunctionCall","src":"5055:13:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5043:6:181"},"nodeType":"YulFunctionCall","src":"5043:26:181"},"nodeType":"YulExpressionStatement","src":"5043:26:181"},{"nodeType":"YulAssignment","src":"5082:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5093:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5098:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5089:3:181"},"nodeType":"YulFunctionCall","src":"5089:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"5082:3:181"}]},{"nodeType":"YulAssignment","src":"5114:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"5128:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5136:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5124:3:181"},"nodeType":"YulFunctionCall","src":"5124:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"5114:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4991:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"4994:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4988:2:181"},"nodeType":"YulFunctionCall","src":"4988:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5002:18:181","statements":[{"nodeType":"YulAssignment","src":"5004:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5013:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"5016:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5009:3:181"},"nodeType":"YulFunctionCall","src":"5009:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"5004:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"4984:3:181","statements":[]},"src":"4980:169:181"},{"nodeType":"YulAssignment","src":"5158:11:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"5166:3:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5158:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_uint256_t_array$_t_bytes32_$dyn_memory_ptr__to_t_bytes32_t_uint256_t_array$_t_bytes32_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4560:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4571:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4579:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4587:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4598:4:181","type":""}],"src":"4400:775:181"},{"body":{"nodeType":"YulBlock","src":"5354:236:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5371:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5382:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5364:6:181"},"nodeType":"YulFunctionCall","src":"5364:21:181"},"nodeType":"YulExpressionStatement","src":"5364:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5405:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5416:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5401:3:181"},"nodeType":"YulFunctionCall","src":"5401:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5421:2:181","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5394:6:181"},"nodeType":"YulFunctionCall","src":"5394:30:181"},"nodeType":"YulExpressionStatement","src":"5394:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5444:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5455:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5440:3:181"},"nodeType":"YulFunctionCall","src":"5440:18:181"},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320616c726561","kind":"string","nodeType":"YulLiteral","src":"5460:34:181","type":"","value":"Initializable: contract is alrea"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5433:6:181"},"nodeType":"YulFunctionCall","src":"5433:62:181"},"nodeType":"YulExpressionStatement","src":"5433:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5515:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5526:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5511:3:181"},"nodeType":"YulFunctionCall","src":"5511:18:181"},{"hexValue":"647920696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"5531:16:181","type":"","value":"dy initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5504:6:181"},"nodeType":"YulFunctionCall","src":"5504:44:181"},"nodeType":"YulExpressionStatement","src":"5504:44:181"},{"nodeType":"YulAssignment","src":"5557:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5569:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5580:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5565:3:181"},"nodeType":"YulFunctionCall","src":"5565:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5557:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5331:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5345:4:181","type":""}],"src":"5180:410:181"},{"body":{"nodeType":"YulBlock","src":"5702:87:181","statements":[{"nodeType":"YulAssignment","src":"5712:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5724:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5735:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5720:3:181"},"nodeType":"YulFunctionCall","src":"5720:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5712:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5754:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5769:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5777:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5765:3:181"},"nodeType":"YulFunctionCall","src":"5765:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5747:6:181"},"nodeType":"YulFunctionCall","src":"5747:36:181"},"nodeType":"YulExpressionStatement","src":"5747:36:181"}]},"name":"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5671:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5682:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5693:4:181","type":""}],"src":"5595:194:181"},{"body":{"nodeType":"YulBlock","src":"5826:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5843:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5850:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"5855:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5846:3:181"},"nodeType":"YulFunctionCall","src":"5846:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5836:6:181"},"nodeType":"YulFunctionCall","src":"5836:31:181"},"nodeType":"YulExpressionStatement","src":"5836:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5883:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5886:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5876:6:181"},"nodeType":"YulFunctionCall","src":"5876:15:181"},"nodeType":"YulExpressionStatement","src":"5876:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5907:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5910:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5900:6:181"},"nodeType":"YulFunctionCall","src":"5900:15:181"},"nodeType":"YulExpressionStatement","src":"5900:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"5794:127:181"},{"body":{"nodeType":"YulBlock","src":"5975:79:181","statements":[{"nodeType":"YulAssignment","src":"5985:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5997:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"6000:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5993:3:181"},"nodeType":"YulFunctionCall","src":"5993:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"5985:4:181"}]},{"body":{"nodeType":"YulBlock","src":"6026:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6028:16:181"},"nodeType":"YulFunctionCall","src":"6028:18:181"},"nodeType":"YulExpressionStatement","src":"6028:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"6017:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"6023:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6014:2:181"},"nodeType":"YulFunctionCall","src":"6014:11:181"},"nodeType":"YulIf","src":"6011:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"5957:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"5960:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"5966:4:181","type":""}],"src":"5926:128:181"},{"body":{"nodeType":"YulBlock","src":"6106:88:181","statements":[{"body":{"nodeType":"YulBlock","src":"6137:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6139:16:181"},"nodeType":"YulFunctionCall","src":"6139:18:181"},"nodeType":"YulExpressionStatement","src":"6139:18:181"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6122:5:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6133:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6129:3:181"},"nodeType":"YulFunctionCall","src":"6129:6:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"6119:2:181"},"nodeType":"YulFunctionCall","src":"6119:17:181"},"nodeType":"YulIf","src":"6116:43:181"},{"nodeType":"YulAssignment","src":"6168:20:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6179:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"6186:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6175:3:181"},"nodeType":"YulFunctionCall","src":"6175:13:181"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"6168:3:181"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"6088:5:181","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"6098:3:181","type":""}],"src":"6059:135:181"},{"body":{"nodeType":"YulBlock","src":"6263:358:181","statements":[{"nodeType":"YulVariableDeclaration","src":"6273:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6288:1:181","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"6277:7:181","type":""}]},{"nodeType":"YulAssignment","src":"6298:16:181","value":{"name":"power_1","nodeType":"YulIdentifier","src":"6307:7:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"6298:5:181"}]},{"nodeType":"YulAssignment","src":"6323:13:181","value":{"name":"_base","nodeType":"YulIdentifier","src":"6331:5:181"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"6323:4:181"}]},{"body":{"nodeType":"YulBlock","src":"6387:228:181","statements":[{"body":{"nodeType":"YulBlock","src":"6432:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6434:16:181"},"nodeType":"YulFunctionCall","src":"6434:18:181"},"nodeType":"YulExpressionStatement","src":"6434:18:181"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"6407:4:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6421:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6417:3:181"},"nodeType":"YulFunctionCall","src":"6417:6:181"},{"name":"base","nodeType":"YulIdentifier","src":"6425:4:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"6413:3:181"},"nodeType":"YulFunctionCall","src":"6413:17:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6404:2:181"},"nodeType":"YulFunctionCall","src":"6404:27:181"},"nodeType":"YulIf","src":"6401:53:181"},{"body":{"nodeType":"YulBlock","src":"6493:29:181","statements":[{"nodeType":"YulAssignment","src":"6495:25:181","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"6508:5:181"},{"name":"base","nodeType":"YulIdentifier","src":"6515:4:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"6504:3:181"},"nodeType":"YulFunctionCall","src":"6504:16:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"6495:5:181"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"6474:8:181"},{"name":"power_1","nodeType":"YulIdentifier","src":"6484:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6470:3:181"},"nodeType":"YulFunctionCall","src":"6470:22:181"},"nodeType":"YulIf","src":"6467:55:181"},{"nodeType":"YulAssignment","src":"6535:23:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"6547:4:181"},{"name":"base","nodeType":"YulIdentifier","src":"6553:4:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"6543:3:181"},"nodeType":"YulFunctionCall","src":"6543:15:181"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"6535:4:181"}]},{"nodeType":"YulAssignment","src":"6571:34:181","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"6587:7:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"6596:8:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"6583:3:181"},"nodeType":"YulFunctionCall","src":"6583:22:181"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"6571:8:181"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"6356:8:181"},{"name":"power_1","nodeType":"YulIdentifier","src":"6366:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6353:2:181"},"nodeType":"YulFunctionCall","src":"6353:21:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6375:3:181","statements":[]},"pre":{"nodeType":"YulBlock","src":"6349:3:181","statements":[]},"src":"6345:270:181"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"6227:5:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"6234:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"6247:5:181","type":""},{"name":"base","nodeType":"YulTypedName","src":"6254:4:181","type":""}],"src":"6199:422:181"},{"body":{"nodeType":"YulBlock","src":"6685:747:181","statements":[{"body":{"nodeType":"YulBlock","src":"6723:52:181","statements":[{"nodeType":"YulAssignment","src":"6737:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6746:1:181","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"6737:5:181"}]},{"nodeType":"YulLeave","src":"6760:5:181"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"6705:8:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6698:6:181"},"nodeType":"YulFunctionCall","src":"6698:16:181"},"nodeType":"YulIf","src":"6695:80:181"},{"body":{"nodeType":"YulBlock","src":"6808:52:181","statements":[{"nodeType":"YulAssignment","src":"6822:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6831:1:181","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"6822:5:181"}]},{"nodeType":"YulLeave","src":"6845:5:181"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"6794:4:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6787:6:181"},"nodeType":"YulFunctionCall","src":"6787:12:181"},"nodeType":"YulIf","src":"6784:76:181"},{"cases":[{"body":{"nodeType":"YulBlock","src":"6896:52:181","statements":[{"nodeType":"YulAssignment","src":"6910:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6919:1:181","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"6910:5:181"}]},{"nodeType":"YulLeave","src":"6933:5:181"}]},"nodeType":"YulCase","src":"6889:59:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6894:1:181","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"6964:123:181","statements":[{"body":{"nodeType":"YulBlock","src":"6999:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7001:16:181"},"nodeType":"YulFunctionCall","src":"7001:18:181"},"nodeType":"YulExpressionStatement","src":"7001:18:181"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"6984:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"6994:3:181","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6981:2:181"},"nodeType":"YulFunctionCall","src":"6981:17:181"},"nodeType":"YulIf","src":"6978:43:181"},{"nodeType":"YulAssignment","src":"7034:25:181","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"7047:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"7057:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7043:3:181"},"nodeType":"YulFunctionCall","src":"7043:16:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"7034:5:181"}]},{"nodeType":"YulLeave","src":"7072:5:181"}]},"nodeType":"YulCase","src":"6957:130:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6962:1:181","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"6876:4:181"},"nodeType":"YulSwitch","src":"6869:218:181"},{"body":{"nodeType":"YulBlock","src":"7185:70:181","statements":[{"nodeType":"YulAssignment","src":"7199:28:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"7212:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"7218:8:181"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"7208:3:181"},"nodeType":"YulFunctionCall","src":"7208:19:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"7199:5:181"}]},{"nodeType":"YulLeave","src":"7240:5:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"7109:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"7115:2:181","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7106:2:181"},"nodeType":"YulFunctionCall","src":"7106:12:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"7123:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"7133:2:181","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7120:2:181"},"nodeType":"YulFunctionCall","src":"7120:16:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7102:3:181"},"nodeType":"YulFunctionCall","src":"7102:35:181"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"7146:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"7152:3:181","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7143:2:181"},"nodeType":"YulFunctionCall","src":"7143:13:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"7161:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"7171:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7158:2:181"},"nodeType":"YulFunctionCall","src":"7158:16:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7139:3:181"},"nodeType":"YulFunctionCall","src":"7139:36:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7099:2:181"},"nodeType":"YulFunctionCall","src":"7099:77:181"},"nodeType":"YulIf","src":"7096:159:181"},{"nodeType":"YulVariableDeclaration","src":"7264:57:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"7306:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"7312:8:181"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"7287:18:181"},"nodeType":"YulFunctionCall","src":"7287:34:181"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"7268:7:181","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"7277:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7366:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7368:16:181"},"nodeType":"YulFunctionCall","src":"7368:18:181"},"nodeType":"YulExpressionStatement","src":"7368:18:181"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"7336:7:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7353:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7349:3:181"},"nodeType":"YulFunctionCall","src":"7349:6:181"},{"name":"base_1","nodeType":"YulIdentifier","src":"7357:6:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"7345:3:181"},"nodeType":"YulFunctionCall","src":"7345:19:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7333:2:181"},"nodeType":"YulFunctionCall","src":"7333:32:181"},"nodeType":"YulIf","src":"7330:58:181"},{"nodeType":"YulAssignment","src":"7397:29:181","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"7410:7:181"},{"name":"base_1","nodeType":"YulIdentifier","src":"7419:6:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"7406:3:181"},"nodeType":"YulFunctionCall","src":"7406:20:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"7397:5:181"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"6656:4:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"6662:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"6675:5:181","type":""}],"src":"6626:806:181"},{"body":{"nodeType":"YulBlock","src":"7507:61:181","statements":[{"nodeType":"YulAssignment","src":"7517:45:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"7547:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"7553:8:181"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"7526:20:181"},"nodeType":"YulFunctionCall","src":"7526:36:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"7517:5:181"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"7478:4:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"7484:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"7497:5:181","type":""}],"src":"7437:131:181"},{"body":{"nodeType":"YulBlock","src":"7720:100:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7737:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"7742:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7730:6:181"},"nodeType":"YulFunctionCall","src":"7730:19:181"},"nodeType":"YulExpressionStatement","src":"7730:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7769:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"7774:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7765:3:181"},"nodeType":"YulFunctionCall","src":"7765:12:181"},{"name":"value1","nodeType":"YulIdentifier","src":"7779:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7758:6:181"},"nodeType":"YulFunctionCall","src":"7758:28:181"},"nodeType":"YulExpressionStatement","src":"7758:28:181"},{"nodeType":"YulAssignment","src":"7795:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7806:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"7811:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7802:3:181"},"nodeType":"YulFunctionCall","src":"7802:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"7795:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"7688:3:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7693:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7701:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"7712:3:181","type":""}],"src":"7573:247:181"},{"body":{"nodeType":"YulBlock","src":"7999:233:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8016:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8027:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8009:6:181"},"nodeType":"YulFunctionCall","src":"8009:21:181"},"nodeType":"YulExpressionStatement","src":"8009:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8050:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8061:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8046:3:181"},"nodeType":"YulFunctionCall","src":"8046:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8066:2:181","type":"","value":"43"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8039:6:181"},"nodeType":"YulFunctionCall","src":"8039:30:181"},"nodeType":"YulExpressionStatement","src":"8039:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8089:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8100:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8085:3:181"},"nodeType":"YulFunctionCall","src":"8085:18:181"},{"hexValue":"496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069","kind":"string","nodeType":"YulLiteral","src":"8105:34:181","type":"","value":"Initializable: contract is not i"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8078:6:181"},"nodeType":"YulFunctionCall","src":"8078:62:181"},"nodeType":"YulExpressionStatement","src":"8078:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8160:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8171:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8156:3:181"},"nodeType":"YulFunctionCall","src":"8156:18:181"},{"hexValue":"6e697469616c697a696e67","kind":"string","nodeType":"YulLiteral","src":"8176:13:181","type":"","value":"nitializing"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8149:6:181"},"nodeType":"YulFunctionCall","src":"8149:41:181"},"nodeType":"YulExpressionStatement","src":"8149:41:181"},{"nodeType":"YulAssignment","src":"8199:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8211:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8222:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8207:3:181"},"nodeType":"YulFunctionCall","src":"8207:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8199:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7976:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7990:4:181","type":""}],"src":"7825:407:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint256__to_t_bytes32_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_array$_t_bytes32_$dyn_memory_ptr(headStart, dataEnd) -> value0\n    {\n        let _1 := 32\n        if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := calldataload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let _5 := shl(5, _4)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(_5, 63), not(31)))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        let dst := memPtr\n        mstore(memPtr, _4)\n        dst := add(memPtr, _1)\n        let srcEnd := add(add(_3, _5), _1)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_3, _1)\n        for { } lt(src, srcEnd) { src := add(src, _1) }\n        {\n            mstore(dst, calldataload(src))\n            dst := add(dst, _1)\n        }\n        value0 := memPtr\n    }\n    function abi_encode_tuple_t_array$_t_bytes32_$32_memory_ptr__to_t_array$_t_bytes32_$32_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 1024)\n        let pos := headStart\n        pos := headStart\n        let srcPtr := value0\n        let i := 0\n        for { } true { i := add(i, 1) }\n        {\n            let _1 := 0x20\n            if iszero(lt(i, _1)) { break }\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_144b471da8d21e2e7d9e3c76d3f72ab61efa53056eb4b5716c6251d10014587c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 9)\n        mstore(add(headStart, 64), \"!arborist\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint256_t_bytes32__to_t_bytes32_t_uint256_t_bytes32__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint256_t_array$_t_bytes32_$dyn_memory_ptr__to_t_bytes32_t_uint256_t_array$_t_bytes32_$dyn_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 96)\n        mstore(headStart, value0)\n        let _1 := 32\n        mstore(add(headStart, _1), value1)\n        mstore(add(headStart, 64), 96)\n        let pos := tail_1\n        let length := mload(value2)\n        mstore(tail_1, length)\n        pos := add(headStart, 128)\n        let srcPtr := add(value2, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Initializable: contract is alrea\")\n        mstore(add(headStart, 96), \"dy initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(not(0), base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(not(0), base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function abi_encode_tuple_packed_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, value0)\n        mstore(add(pos, 32), value1)\n        end := add(pos, 64)\n    }\n    function abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 43)\n        mstore(add(headStart, 64), \"Initializable: contract is not i\")\n        mstore(add(headStart, 96), \"nitializing\")\n        tail := add(headStart, 128)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063c9b0a6de11610071578063c9b0a6de14610220578063d1851c9214610228578063d232c22014610239578063ebf0c71714610262578063fd54b2281461026a57600080fd5b80638da5cb5b146101db578063b1f8100d146101f2578063c4d66de814610205578063c5b350df1461021857600080fd5b806334a55ee6116100e957806334a55ee61461019a5780633cf52ffb146101ad5780634b72d0d4146101b55780636a42b8f8146101ca578063715018a6146101d357600080fd5b806306661abd1461011b5780631b373a98146101325780632d287e431461014757806331d0913c1461016f575b600080fd5b6052545b6040519081526020015b60405180910390f35b610145610140366004611f81565b610274565b005b61015a610155366004611fb1565b610362565b60408051928352602083019190915201610129565b605354610182906001600160a01b031681565b6040516001600160a01b039091168152602001610129565b61015a6101a8366004611fe0565b610473565b60025461011f565b6101bd6105ba565b604051610129919061209e565b62093a8061011f565b6101456105f6565b6000546201000090046001600160a01b0316610182565b610145610200366004611f81565b610629565b610145610213366004611f81565b6106d6565b6101456107f1565b61015a610861565b6001546001600160a01b0316610182565b6102526000546201000090046001600160a01b03161590565b6040519015158152602001610129565b61011f61087a565b60525461011f9081565b6000546201000090046001600160a01b031633146102a5576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166102cc57604051630c11a52d60e11b815260040160405180910390fd5b6053546001600160a01b0390811690821681036102fc5760405163606e957b60e11b815260040160405180910390fd5b604080516001600160a01b038084168252841660208201527ff2fa31e21376edb31995720340ba00a41a12a7c8744a9bde552660121f4b7771910160405180910390a150605380546001600160a01b0319166001600160a01b0392909216919091179055565b60535460009081906001600160a01b031633146103b25760405162461bcd60e51b815260206004820152600960248201526808585c989bdc9a5cdd60ba1b60448201526064015b60405180910390fd5b60408051610440810180835261040092869291603291839190820190839060209082845b8154815260200190600101908083116103d65750505091835250506020918201549101529061088b565b80516032906104129082906020611eef565b506020918201519101555060525461042a6032610997565b60408051828152602081018490529081018590529092507fd50e83984b64a106ac2ee6314d689ec4d2a656d5ece6d94c585796944b52240c9060600160405180910390a1915091565b60535460009081906001600160a01b031633146104be5760405162461bcd60e51b815260206004820152600960248201526808585c989bdc9a5cdd60ba1b60448201526064016103a9565b6040805161044081018083526000926032918391820190839060209082845b8154815260200190600101908083116104dd575050509183525050602091820154910152845190915060005b818110156105475761053d868281518110610526576105266120d4565b60200260200101518461088b90919063ffffffff16565b9250600101610509565b508151829060329061055c9082906020611eef565b506020918201519082015582015192506105766032610997565b93507f3ef8438c07c6b4b67e70eace906a07e9b294c2f0066803f58e705567e1aa4f1b8484876040516105ab939291906120ea565b60405180910390a15050915091565b6105c2611f2d565b604080516104008101918290529060329060209082845b8154815260200190600101908083116105d9575050505050905090565b6000546201000090046001600160a01b03163314610627576040516311a8a1bb60e31b815260040160405180910390fd5b565b6000546201000090046001600160a01b0316331461065a576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610678575060025415155b15610696576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083166201000090920416036106ca57604051634a2fb73f60e11b815260040160405180910390fd5b6106d381611d4d565b50565b600054610100900460ff16158080156106f65750600054600160ff909116105b806107105750303b158015610710575060005460ff166001145b6107735760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103a9565b6000805460ff191660011790558015610796576000805461ff0019166101001790555b61079f82611d9b565b6107a7611dcb565b80156107ed576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001546001600160a01b0316331461081c576040516311a7f27160e11b815260040160405180910390fd5b62093a806002544261082e9190612155565b1161084c576040516324e0285f60e21b815260040160405180910390fd5b600154610627906001600160a01b0316611dfa565b60008061086e6032610997565b60525490939092509050565b60006108866032610997565b905090565b610893611f4c565b60008360200180516108a490612168565b90819052905060016108b860206002612265565b6108c29190612155565b8111156108e257604051638eab04bb60e01b815260040160405180910390fd5b60005b6020811015610977578160011660010361091e5784518490826020811061090e5761090e6120d4565b6020020152508391506109919050565b84518160208110610931576109316120d4565b602002015184604051602001610951929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209350600191821c91016108e5565b50604051638eab04bb60e01b815260040160405180910390fd5b92915050565b60208101546000908082036109ce57507f27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d75792915050565b60008360018316156109f05780546000526000602052604060002093506112a3565b6002831615610a355760018101546000527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb560205260406000209350600191506112a3565b6004831615610a7a5760028101546000527fb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3060205260406000209350600291506112a3565b6008831615610abf5760038101546000527f21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba8560205260406000209350600391506112a3565b6010831615610b045760048101546000527fe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a1934460205260406000209350600491506112a3565b6020831615610b495760058101546000527f0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d60205260406000209350600591506112a3565b6040831615610b8e5760068101546000527f887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a196860205260406000209350600691506112a3565b6080831615610bd35760078101546000527fffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f8360205260406000209350600791506112a3565b610100831615610c195760088101546000527f9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af60205260406000209350600891506112a3565b610200831615610c5f5760098101546000527fcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e060205260406000209350600991506112a3565b610400831615610ca557600a8101546000527ff9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a560205260406000209350600a91506112a3565b610800831615610ceb57600b8101546000527ff8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf89260205260406000209350600b91506112a3565b611000831615610d3157600c8101546000527f3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c60205260406000209350600c91506112a3565b612000831615610d7757600d8101546000527fc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb60205260406000209350600d91506112a3565b614000831615610dbd57600e8101546000527f5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc60205260406000209350600e91506112a3565b618000831615610e0357600f8101546000527fda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d260205260406000209350600f91506112a3565b62010000831615610e4a5760108101546000527f2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f60205260406000209350601091506112a3565b62020000831615610e915760118101546000527fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a60205260406000209350601191506112a3565b62040000831615610ed85760128101546000527f5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a060205260406000209350601291506112a3565b62080000831615610f1f5760138101546000527fb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa060205260406000209350601391506112a3565b62100000831615610f665760148101546000527fc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e260205260406000209350601491506112a3565b62200000831615610fad5760158101546000527ff4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd960205260406000209350601591506112a3565b62400000831615610ff45760168101546000527f5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e37760205260406000209350601691506112a3565b6280000083161561103b5760178101546000527f4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee65260205260406000209350601791506112a3565b63010000008316156110835760188101546000527fcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef60205260406000209350601891506112a3565b63020000008316156110cb5760198101546000527f0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d60205260406000209350601991506112a3565b630400000083161561111357601a8101546000527fb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d060205260406000209350601a91506112a3565b630800000083161561115b57601b8101546000527f838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e60205260406000209350601b91506112a3565b63100000008316156111a357601c8101546000527f662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e60205260406000209350601c91506112a3565b63200000008316156111eb57601d8101546000527f388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea32260205260406000209350601d91506112a3565b634000000083161561123357601e8101546000527f93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d73560205260406000209350601e91506112a3565b638000000083161561127b57601f8101546000527f8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a960205260406000209350601f91506112a3565b7f27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d7579350602091505b601e8211611d45576001821015611301576002831680156112cf576001820154600052846020526112f8565b846000527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb56020525b50604060002093505b6002821015611357576004831680156113255760028201546000528460205261134e565b846000527fb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d306020525b50604060002093505b60038210156113ad5760088316801561137b576003820154600052846020526113a4565b846000527f21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba856020525b50604060002093505b6004821015611403576010831680156113d1576004820154600052846020526113fa565b846000527fe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a193446020525b50604060002093505b60058210156114595760208316801561142757600582015460005284602052611450565b846000527f0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d6020525b50604060002093505b60068210156114af5760408316801561147d576006820154600052846020526114a6565b846000527f887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a19686020525b50604060002093505b6007821015611505576080831680156114d3576007820154600052846020526114fc565b846000527fffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f836020525b50604060002093505b600882101561155c576101008316801561152a57600882015460005284602052611553565b846000527f9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af6020525b50604060002093505b60098210156115b35761020083168015611581576009820154600052846020526115aa565b846000527fcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e06020525b50604060002093505b600a82101561160a57610400831680156115d857600a82015460005284602052611601565b846000527ff9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a56020525b50604060002093505b600b821015611661576108008316801561162f57600b82015460005284602052611658565b846000527ff8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8926020525b50604060002093505b600c8210156116b8576110008316801561168657600c820154600052846020526116af565b846000527f3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c6020525b50604060002093505b600d82101561170f57612000831680156116dd57600d82015460005284602052611706565b846000527fc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb6020525b50604060002093505b600e821015611766576140008316801561173457600e8201546000528460205261175d565b846000527f5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc6020525b50604060002093505b600f8210156117bd576180008316801561178b57600f820154600052846020526117b4565b846000527fda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d26020525b50604060002093505b60108210156118155762010000831680156117e35760108201546000528460205261180c565b846000527f2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f6020525b50604060002093505b601182101561186d57620200008316801561183b57601182015460005284602052611864565b846000527fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a6020525b50604060002093505b60128210156118c5576204000083168015611893576012820154600052846020526118bc565b846000527f5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a06020525b50604060002093505b601382101561191d5762080000831680156118eb57601382015460005284602052611914565b846000527fb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa06020525b50604060002093505b60148210156119755762100000831680156119435760148201546000528460205261196c565b846000527fc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e26020525b50604060002093505b60158210156119cd57622000008316801561199b576015820154600052846020526119c4565b846000527ff4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd96020525b50604060002093505b6016821015611a255762400000831680156119f357601682015460005284602052611a1c565b846000527f5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3776020525b50604060002093505b6017821015611a7d576280000083168015611a4b57601782015460005284602052611a74565b846000527f4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee6526020525b50604060002093505b6018821015611ad657630100000083168015611aa457601882015460005284602052611acd565b846000527fcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef6020525b50604060002093505b6019821015611b2f57630200000083168015611afd57601982015460005284602052611b26565b846000527f0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d6020525b50604060002093505b601a821015611b8857630400000083168015611b5657601a82015460005284602052611b7f565b846000527fb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d06020525b50604060002093505b601b821015611be157630800000083168015611baf57601b82015460005284602052611bd8565b846000527f838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e6020525b50604060002093505b601c821015611c3a57631000000083168015611c0857601c82015460005284602052611c31565b846000527f662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e6020525b50604060002093505b601d821015611c9357632000000083168015611c6157601d82015460005284602052611c8a565b846000527f388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea3226020525b50604060002093505b601e821015611cec57634000000083168015611cba57601e82015460005284602052611ce3565b846000527f93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7356020525b50604060002093505b601f821015611d4557638000000083168015611d1357601f82015460005284602052611d3c565b846000527f8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a96020525b50604060002093505b505050919050565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600054610100900460ff16611dc25760405162461bcd60e51b81526004016103a990612271565b6106d381611e76565b600054610100900460ff16611df25760405162461bcd60e51b81526004016103a990612271565b610627611ebf565b600080546040516001600160a01b03808516936201000090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03909216620100000262010000600160b01b0319909216919091178155600255600180546001600160a01b0319169055565b600054610100900460ff16611e9d5760405162461bcd60e51b81526004016103a990612271565b605380546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16611ee65760405162461bcd60e51b81526004016103a990612271565b61062733611dfa565b8260208101928215611f1d579160200282015b82811115611f1d578251825591602001919060010190611f02565b50611f29929150611f6c565b5090565b6040518061040001604052806020906020820280368337509192915050565b6040518060400160405280611f5f611f2d565b8152602001600081525090565b5b80821115611f295760008155600101611f6d565b600060208284031215611f9357600080fd5b81356001600160a01b0381168114611faa57600080fd5b9392505050565b600060208284031215611fc357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215611ff357600080fd5b823567ffffffffffffffff8082111561200b57600080fd5b818501915085601f83011261201f57600080fd5b81358181111561203157612031611fca565b8060051b604051601f19603f8301168101818110858211171561205657612056611fca565b60405291825284820192508381018501918883111561207457600080fd5b938501935b8285101561209257843584529385019392850192612079565b98975050505050505050565b6104008101818360005b60208082106120b757506120cb565b8251845292830192909101906001016120a8565b50505092915050565b634e487b7160e01b600052603260045260246000fd5b6000606082018583526020858185015260606040850152818551808452608086019150828701935060005b8181101561213157845183529383019391830191600101612115565b509098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156109915761099161213f565b60006001820161217a5761217a61213f565b5060010190565b600181815b808511156121bc5781600019048211156121a2576121a261213f565b808516156121af57918102915b93841c9390800290612186565b509250929050565b6000826121d357506001610991565b816121e057506000610991565b81600181146121f657600281146122005761221c565b6001915050610991565b60ff8411156122115761221161213f565b50506001821b610991565b5060208310610133831016604e8410600b841016171561223f575081810a610991565b6122498383612181565b806000190482111561225d5761225d61213f565b029392505050565b6000611faa83836121c4565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea2646970667358221220692efb4fde2ef60f8a670bcf66710807eef1fc4f3543297bb32ad63f5a4f336564736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x116 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xC9B0A6DE GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xC9B0A6DE EQ PUSH2 0x220 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x228 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x239 JUMPI DUP1 PUSH4 0xEBF0C717 EQ PUSH2 0x262 JUMPI DUP1 PUSH4 0xFD54B228 EQ PUSH2 0x26A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x1F2 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x218 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34A55EE6 GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0x34A55EE6 EQ PUSH2 0x19A JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x1AD JUMPI DUP1 PUSH4 0x4B72D0D4 EQ PUSH2 0x1B5 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x1CA JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6661ABD EQ PUSH2 0x11B JUMPI DUP1 PUSH4 0x1B373A98 EQ PUSH2 0x132 JUMPI DUP1 PUSH4 0x2D287E43 EQ PUSH2 0x147 JUMPI DUP1 PUSH4 0x31D0913C EQ PUSH2 0x16F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x52 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x145 PUSH2 0x140 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F81 JUMP JUMPDEST PUSH2 0x274 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x15A PUSH2 0x155 CALLDATASIZE PUSH1 0x4 PUSH2 0x1FB1 JUMP JUMPDEST PUSH2 0x362 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x129 JUMP JUMPDEST PUSH1 0x53 SLOAD PUSH2 0x182 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129 JUMP JUMPDEST PUSH2 0x15A PUSH2 0x1A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1FE0 JUMP JUMPDEST PUSH2 0x473 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x11F JUMP JUMPDEST PUSH2 0x1BD PUSH2 0x5BA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x129 SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST PUSH3 0x93A80 PUSH2 0x11F JUMP JUMPDEST PUSH2 0x145 PUSH2 0x5F6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x182 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x200 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F81 JUMP JUMPDEST PUSH2 0x629 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x213 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F81 JUMP JUMPDEST PUSH2 0x6D6 JUMP JUMPDEST PUSH2 0x145 PUSH2 0x7F1 JUMP JUMPDEST PUSH2 0x15A PUSH2 0x861 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x182 JUMP JUMPDEST PUSH2 0x252 PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129 JUMP JUMPDEST PUSH2 0x11F PUSH2 0x87A JUMP JUMPDEST PUSH1 0x52 SLOAD PUSH2 0x11F SWAP1 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2A5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2CC JUMPI PUSH1 0x40 MLOAD PUSH4 0xC11A52D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x53 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP3 AND DUP2 SUB PUSH2 0x2FC JUMPI PUSH1 0x40 MLOAD PUSH4 0x606E957B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xF2FA31E21376EDB31995720340BA00A41A12A7C8744A9BDE552660121F4B7771 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x53 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x53 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3B2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x8585C989BDC9A5CDD PUSH1 0xBA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x440 DUP2 ADD DUP1 DUP4 MSTORE PUSH2 0x400 SWAP3 DUP7 SWAP3 SWAP2 PUSH1 0x32 SWAP2 DUP4 SWAP2 SWAP1 DUP3 ADD SWAP1 DUP4 SWAP1 PUSH1 0x20 SWAP1 DUP3 DUP5 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x3D6 JUMPI POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x20 SWAP2 DUP3 ADD SLOAD SWAP2 ADD MSTORE SWAP1 PUSH2 0x88B JUMP JUMPDEST DUP1 MLOAD PUSH1 0x32 SWAP1 PUSH2 0x412 SWAP1 DUP3 SWAP1 PUSH1 0x20 PUSH2 0x1EEF JUMP JUMPDEST POP PUSH1 0x20 SWAP2 DUP3 ADD MLOAD SWAP2 ADD SSTORE POP PUSH1 0x52 SLOAD PUSH2 0x42A PUSH1 0x32 PUSH2 0x997 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP3 POP PUSH32 0xD50E83984B64A106AC2EE6314D689EC4D2A656D5ECE6D94C585796944B52240C SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x53 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4BE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x8585C989BDC9A5CDD PUSH1 0xBA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3A9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x440 DUP2 ADD DUP1 DUP4 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x32 SWAP2 DUP4 SWAP2 DUP3 ADD SWAP1 DUP4 SWAP1 PUSH1 0x20 SWAP1 DUP3 DUP5 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x4DD JUMPI POP POP POP SWAP2 DUP4 MSTORE POP POP PUSH1 0x20 SWAP2 DUP3 ADD SLOAD SWAP2 ADD MSTORE DUP5 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x547 JUMPI PUSH2 0x53D DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x526 JUMPI PUSH2 0x526 PUSH2 0x20D4 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0x88B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x509 JUMP JUMPDEST POP DUP2 MLOAD DUP3 SWAP1 PUSH1 0x32 SWAP1 PUSH2 0x55C SWAP1 DUP3 SWAP1 PUSH1 0x20 PUSH2 0x1EEF JUMP JUMPDEST POP PUSH1 0x20 SWAP2 DUP3 ADD MLOAD SWAP1 DUP3 ADD SSTORE DUP3 ADD MLOAD SWAP3 POP PUSH2 0x576 PUSH1 0x32 PUSH2 0x997 JUMP JUMPDEST SWAP4 POP PUSH32 0x3EF8438C07C6B4B67E70EACE906A07E9B294C2F0066803F58E705567E1AA4F1B DUP5 DUP5 DUP8 PUSH1 0x40 MLOAD PUSH2 0x5AB SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x20EA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH2 0x5C2 PUSH2 0x1F2D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x400 DUP2 ADD SWAP2 DUP3 SWAP1 MSTORE SWAP1 PUSH1 0x32 SWAP1 PUSH1 0x20 SWAP1 DUP3 DUP5 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0x5D9 JUMPI POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x627 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x65A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x678 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x696 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH3 0x10000 SWAP1 SWAP3 DIV AND SUB PUSH2 0x6CA JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6D3 DUP2 PUSH2 0x1D4D JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x6F6 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x710 JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x710 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x773 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3A9 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x796 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x79F DUP3 PUSH2 0x1D9B JUMP JUMPDEST PUSH2 0x7A7 PUSH2 0x1DCB JUMP JUMPDEST DUP1 ISZERO PUSH2 0x7ED JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x81C JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x82E SWAP2 SWAP1 PUSH2 0x2155 JUMP JUMPDEST GT PUSH2 0x84C JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x627 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1DFA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x86E PUSH1 0x32 PUSH2 0x997 JUMP JUMPDEST PUSH1 0x52 SLOAD SWAP1 SWAP4 SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x886 PUSH1 0x32 PUSH2 0x997 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x893 PUSH2 0x1F4C JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x20 ADD DUP1 MLOAD PUSH2 0x8A4 SWAP1 PUSH2 0x2168 JUMP JUMPDEST SWAP1 DUP2 SWAP1 MSTORE SWAP1 POP PUSH1 0x1 PUSH2 0x8B8 PUSH1 0x20 PUSH1 0x2 PUSH2 0x2265 JUMP JUMPDEST PUSH2 0x8C2 SWAP2 SWAP1 PUSH2 0x2155 JUMP JUMPDEST DUP2 GT ISZERO PUSH2 0x8E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8EAB04BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x977 JUMPI DUP2 PUSH1 0x1 AND PUSH1 0x1 SUB PUSH2 0x91E JUMPI DUP5 MLOAD DUP5 SWAP1 DUP3 PUSH1 0x20 DUP2 LT PUSH2 0x90E JUMPI PUSH2 0x90E PUSH2 0x20D4 JUMP JUMPDEST PUSH1 0x20 MUL ADD MSTORE POP DUP4 SWAP2 POP PUSH2 0x991 SWAP1 POP JUMP JUMPDEST DUP5 MLOAD DUP2 PUSH1 0x20 DUP2 LT PUSH2 0x931 JUMPI PUSH2 0x931 PUSH2 0x20D4 JUMP JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x951 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 SWAP4 POP PUSH1 0x1 SWAP2 DUP3 SHR SWAP2 ADD PUSH2 0x8E5 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0x8EAB04BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 DUP1 DUP3 SUB PUSH2 0x9CE JUMPI POP PUSH32 0x27AE5BA08D7291C96C8CBDDCC148BF48A6D68C7974B94356F53754EF6171D757 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 DUP4 AND ISZERO PUSH2 0x9F0 JUMPI DUP1 SLOAD PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH1 0x2 DUP4 AND ISZERO PUSH2 0xA35 JUMPI PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xAD3228B676F7D3CD4284A5443F17F1962B36E491B30A40B2405849E597BA5FB5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x1 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH1 0x4 DUP4 AND ISZERO PUSH2 0xA7A JUMPI PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xB4C11951957C6F8F642C4AF61CD6B24640FEC6DC7FC607EE8206A99E92410D30 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x2 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH1 0x8 DUP4 AND ISZERO PUSH2 0xABF JUMPI PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x21DDB9A356815C3FAC1026B6DEC5DF3124AFBADB485C9BA5A3E3398A04B7BA85 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x3 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH1 0x10 DUP4 AND ISZERO PUSH2 0xB04 JUMPI PUSH1 0x4 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xE58769B32A1BEAF1EA27375A44095A0D1FB664CE2DD358E7FCBFB78C26A19344 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x4 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH1 0x20 DUP4 AND ISZERO PUSH2 0xB49 JUMPI PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xEB01EBFC9ED27500CD4DFC979272D1F0913CC9F66540D7E8005811109E1CF2D PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x5 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH1 0x40 DUP4 AND ISZERO PUSH2 0xB8E JUMPI PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x887C22BD8750D34016AC3C66B5FF102DACDD73F6B014E710B51E8022AF9A1968 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x6 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH1 0x80 DUP4 AND ISZERO PUSH2 0xBD3 JUMPI PUSH1 0x7 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xFFD70157E48063FC33C97A050F7F640233BF646CC98D9524C6B92BCF3AB56F83 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x7 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH2 0x100 DUP4 AND ISZERO PUSH2 0xC19 JUMPI PUSH1 0x8 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x9867CC5F7F196B93BAE1E27E6320742445D290F2263827498B54FEC539F756AF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x8 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH2 0x200 DUP4 AND ISZERO PUSH2 0xC5F JUMPI PUSH1 0x9 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xCEFAD4E508C098B9A7E1D8FEB19955FB02BA9675585078710969D3440F5054E0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x9 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH2 0x400 DUP4 AND ISZERO PUSH2 0xCA5 JUMPI PUSH1 0xA DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xF9DC3E7FE016E050EFF260334F18A5D4FE391D82092319F5964F2E2EB7C1C3A5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0xA SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH2 0x800 DUP4 AND ISZERO PUSH2 0xCEB JUMPI PUSH1 0xB DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xF8B13A49E282F609C317A833FB8D976D11517C571D1221A265D25AF778ECF892 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0xB SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH2 0x1000 DUP4 AND ISZERO PUSH2 0xD31 JUMPI PUSH1 0xC DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x3490C6CEEB450AECDC82E28293031D10C7D73BF85E57BF041A97360AA2C5D99C PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0xC SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH2 0x2000 DUP4 AND ISZERO PUSH2 0xD77 JUMPI PUSH1 0xD DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xC1DF82D9C4B87413EAE2EF048F94B4D3554CEA73D92B0F7AF96E0271C691E2BB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0xD SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH2 0x4000 DUP4 AND ISZERO PUSH2 0xDBD JUMPI PUSH1 0xE DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x5C67ADD7C6CAF302256ADEDF7AB114DA0ACFE870D449A3A489F781D659E8BECC PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0xE SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH2 0x8000 DUP4 AND ISZERO PUSH2 0xE03 JUMPI PUSH1 0xF DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xDA7BCE9F4E8618B6BD2F4132CE798CDC7A60E7E1460A7299E3C6342A579626D2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0xF SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH3 0x10000 DUP4 AND ISZERO PUSH2 0xE4A JUMPI PUSH1 0x10 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x2733E50F526EC2FA19A22B31E8ED50F23CD1FDF94C9154ED3A7609A2F1FF981F PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x10 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH3 0x20000 DUP4 AND ISZERO PUSH2 0xE91 JUMPI PUSH1 0x11 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xE1D3B5C807B281E4683CC6D6315CF95B9ADE8641DEFCB32372F1C126E398EF7A PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x11 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH3 0x40000 DUP4 AND ISZERO PUSH2 0xED8 JUMPI PUSH1 0x12 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x5A2DCE0A8A7F68BB74560F8F71837C2C2EBBCBF7FFFB42AE1896F13F7C7479A0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x12 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH3 0x80000 DUP4 AND ISZERO PUSH2 0xF1F JUMPI PUSH1 0x13 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xB46A28B6F55540F89444F63DE0378E3D121BE09E06CC9DED1C20E65876D36AA0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x13 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH3 0x100000 DUP4 AND ISZERO PUSH2 0xF66 JUMPI PUSH1 0x14 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xC65E9645644786B620E2DD2AD648DDFCBF4A7E5B1A3A4ECFE7F64667A3F0B7E2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x14 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH3 0x200000 DUP4 AND ISZERO PUSH2 0xFAD JUMPI PUSH1 0x15 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xF4418588ED35A2458CFFEB39B93D26F18D2AB13BDCE6AEE58E7B99359EC2DFD9 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x15 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH3 0x400000 DUP4 AND ISZERO PUSH2 0xFF4 JUMPI PUSH1 0x16 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x5A9C16DC00D6EF18B7933A6F8DC65CCB55667138776F7DEA101070DC8796E377 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x16 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH3 0x800000 DUP4 AND ISZERO PUSH2 0x103B JUMPI PUSH1 0x17 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x4DF84F40AE0C8229D0D6069E5C8F39A7C299677A09D367FC7B05E3BC380EE652 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x17 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH4 0x1000000 DUP4 AND ISZERO PUSH2 0x1083 JUMPI PUSH1 0x18 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xCDC72595F74C7B1043D0E1FFBAB734648C838DFB0527D971B602BC216C9619EF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x18 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH4 0x2000000 DUP4 AND ISZERO PUSH2 0x10CB JUMPI PUSH1 0x19 DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xABF5AC974A1ED57F4050AA510DD9C74F508277B39D7973BB2DFCCC5EEB0618D PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x19 SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH4 0x4000000 DUP4 AND ISZERO PUSH2 0x1113 JUMPI PUSH1 0x1A DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0xB8CD74046FF337F0A7BF2C8E03E10F642C1886798D71806AB1E888D9E5EE87D0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x1A SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH4 0x8000000 DUP4 AND ISZERO PUSH2 0x115B JUMPI PUSH1 0x1B DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x838C5655CB21C6CB83313B5A631175DFF4963772CCE9108188B34AC87C81C41E PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x1B SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH4 0x10000000 DUP4 AND ISZERO PUSH2 0x11A3 JUMPI PUSH1 0x1C DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x662EE4DD2DD7B2BC707961B1E646C4047669DCB6584F0D8D770DAF5D7E7DEB2E PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x1C SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH4 0x20000000 DUP4 AND ISZERO PUSH2 0x11EB JUMPI PUSH1 0x1D DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x388AB20E2573D171A88108E79D820E98F26C0B84AA8B2F4AA4968DBB818EA322 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x1D SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH4 0x40000000 DUP4 AND ISZERO PUSH2 0x1233 JUMPI PUSH1 0x1E DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x93237C50BA75EE485F4C22ADF2F741400BDF8D6A9CC7DF7ECAE576221665D735 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x1E SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH4 0x80000000 DUP4 AND ISZERO PUSH2 0x127B JUMPI PUSH1 0x1F DUP2 ADD SLOAD PUSH1 0x0 MSTORE PUSH32 0x8448818BB4AE4562849E949E17AC16E0BE16688E156B5CF15E098C627C0056A9 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP PUSH1 0x1F SWAP2 POP PUSH2 0x12A3 JUMP JUMPDEST PUSH32 0x27AE5BA08D7291C96C8CBDDCC148BF48A6D68C7974B94356F53754EF6171D757 SWAP4 POP PUSH1 0x20 SWAP2 POP JUMPDEST PUSH1 0x1E DUP3 GT PUSH2 0x1D45 JUMPI PUSH1 0x1 DUP3 LT ISZERO PUSH2 0x1301 JUMPI PUSH1 0x2 DUP4 AND DUP1 ISZERO PUSH2 0x12CF JUMPI PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x12F8 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xAD3228B676F7D3CD4284A5443F17F1962B36E491B30A40B2405849E597BA5FB5 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x1357 JUMPI PUSH1 0x4 DUP4 AND DUP1 ISZERO PUSH2 0x1325 JUMPI PUSH1 0x2 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x134E JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xB4C11951957C6F8F642C4AF61CD6B24640FEC6DC7FC607EE8206A99E92410D30 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x3 DUP3 LT ISZERO PUSH2 0x13AD JUMPI PUSH1 0x8 DUP4 AND DUP1 ISZERO PUSH2 0x137B JUMPI PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x13A4 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x21DDB9A356815C3FAC1026B6DEC5DF3124AFBADB485C9BA5A3E3398A04B7BA85 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x1403 JUMPI PUSH1 0x10 DUP4 AND DUP1 ISZERO PUSH2 0x13D1 JUMPI PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x13FA JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xE58769B32A1BEAF1EA27375A44095A0D1FB664CE2DD358E7FCBFB78C26A19344 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x1459 JUMPI PUSH1 0x20 DUP4 AND DUP1 ISZERO PUSH2 0x1427 JUMPI PUSH1 0x5 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1450 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xEB01EBFC9ED27500CD4DFC979272D1F0913CC9F66540D7E8005811109E1CF2D PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x6 DUP3 LT ISZERO PUSH2 0x14AF JUMPI PUSH1 0x40 DUP4 AND DUP1 ISZERO PUSH2 0x147D JUMPI PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x14A6 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x887C22BD8750D34016AC3C66B5FF102DACDD73F6B014E710B51E8022AF9A1968 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x7 DUP3 LT ISZERO PUSH2 0x1505 JUMPI PUSH1 0x80 DUP4 AND DUP1 ISZERO PUSH2 0x14D3 JUMPI PUSH1 0x7 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x14FC JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xFFD70157E48063FC33C97A050F7F640233BF646CC98D9524C6B92BCF3AB56F83 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x8 DUP3 LT ISZERO PUSH2 0x155C JUMPI PUSH2 0x100 DUP4 AND DUP1 ISZERO PUSH2 0x152A JUMPI PUSH1 0x8 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1553 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x9867CC5F7F196B93BAE1E27E6320742445D290F2263827498B54FEC539F756AF PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x9 DUP3 LT ISZERO PUSH2 0x15B3 JUMPI PUSH2 0x200 DUP4 AND DUP1 ISZERO PUSH2 0x1581 JUMPI PUSH1 0x9 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x15AA JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xCEFAD4E508C098B9A7E1D8FEB19955FB02BA9675585078710969D3440F5054E0 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0xA DUP3 LT ISZERO PUSH2 0x160A JUMPI PUSH2 0x400 DUP4 AND DUP1 ISZERO PUSH2 0x15D8 JUMPI PUSH1 0xA DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1601 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xF9DC3E7FE016E050EFF260334F18A5D4FE391D82092319F5964F2E2EB7C1C3A5 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0xB DUP3 LT ISZERO PUSH2 0x1661 JUMPI PUSH2 0x800 DUP4 AND DUP1 ISZERO PUSH2 0x162F JUMPI PUSH1 0xB DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1658 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xF8B13A49E282F609C317A833FB8D976D11517C571D1221A265D25AF778ECF892 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0xC DUP3 LT ISZERO PUSH2 0x16B8 JUMPI PUSH2 0x1000 DUP4 AND DUP1 ISZERO PUSH2 0x1686 JUMPI PUSH1 0xC DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x16AF JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x3490C6CEEB450AECDC82E28293031D10C7D73BF85E57BF041A97360AA2C5D99C PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0xD DUP3 LT ISZERO PUSH2 0x170F JUMPI PUSH2 0x2000 DUP4 AND DUP1 ISZERO PUSH2 0x16DD JUMPI PUSH1 0xD DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1706 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xC1DF82D9C4B87413EAE2EF048F94B4D3554CEA73D92B0F7AF96E0271C691E2BB PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0xE DUP3 LT ISZERO PUSH2 0x1766 JUMPI PUSH2 0x4000 DUP4 AND DUP1 ISZERO PUSH2 0x1734 JUMPI PUSH1 0xE DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x175D JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x5C67ADD7C6CAF302256ADEDF7AB114DA0ACFE870D449A3A489F781D659E8BECC PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0xF DUP3 LT ISZERO PUSH2 0x17BD JUMPI PUSH2 0x8000 DUP4 AND DUP1 ISZERO PUSH2 0x178B JUMPI PUSH1 0xF DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x17B4 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xDA7BCE9F4E8618B6BD2F4132CE798CDC7A60E7E1460A7299E3C6342A579626D2 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x10 DUP3 LT ISZERO PUSH2 0x1815 JUMPI PUSH3 0x10000 DUP4 AND DUP1 ISZERO PUSH2 0x17E3 JUMPI PUSH1 0x10 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x180C JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x2733E50F526EC2FA19A22B31E8ED50F23CD1FDF94C9154ED3A7609A2F1FF981F PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x11 DUP3 LT ISZERO PUSH2 0x186D JUMPI PUSH3 0x20000 DUP4 AND DUP1 ISZERO PUSH2 0x183B JUMPI PUSH1 0x11 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1864 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xE1D3B5C807B281E4683CC6D6315CF95B9ADE8641DEFCB32372F1C126E398EF7A PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x12 DUP3 LT ISZERO PUSH2 0x18C5 JUMPI PUSH3 0x40000 DUP4 AND DUP1 ISZERO PUSH2 0x1893 JUMPI PUSH1 0x12 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x18BC JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x5A2DCE0A8A7F68BB74560F8F71837C2C2EBBCBF7FFFB42AE1896F13F7C7479A0 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x13 DUP3 LT ISZERO PUSH2 0x191D JUMPI PUSH3 0x80000 DUP4 AND DUP1 ISZERO PUSH2 0x18EB JUMPI PUSH1 0x13 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1914 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xB46A28B6F55540F89444F63DE0378E3D121BE09E06CC9DED1C20E65876D36AA0 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x14 DUP3 LT ISZERO PUSH2 0x1975 JUMPI PUSH3 0x100000 DUP4 AND DUP1 ISZERO PUSH2 0x1943 JUMPI PUSH1 0x14 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x196C JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xC65E9645644786B620E2DD2AD648DDFCBF4A7E5B1A3A4ECFE7F64667A3F0B7E2 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x15 DUP3 LT ISZERO PUSH2 0x19CD JUMPI PUSH3 0x200000 DUP4 AND DUP1 ISZERO PUSH2 0x199B JUMPI PUSH1 0x15 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x19C4 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xF4418588ED35A2458CFFEB39B93D26F18D2AB13BDCE6AEE58E7B99359EC2DFD9 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x16 DUP3 LT ISZERO PUSH2 0x1A25 JUMPI PUSH3 0x400000 DUP4 AND DUP1 ISZERO PUSH2 0x19F3 JUMPI PUSH1 0x16 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1A1C JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x5A9C16DC00D6EF18B7933A6F8DC65CCB55667138776F7DEA101070DC8796E377 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x17 DUP3 LT ISZERO PUSH2 0x1A7D JUMPI PUSH3 0x800000 DUP4 AND DUP1 ISZERO PUSH2 0x1A4B JUMPI PUSH1 0x17 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1A74 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x4DF84F40AE0C8229D0D6069E5C8F39A7C299677A09D367FC7B05E3BC380EE652 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x18 DUP3 LT ISZERO PUSH2 0x1AD6 JUMPI PUSH4 0x1000000 DUP4 AND DUP1 ISZERO PUSH2 0x1AA4 JUMPI PUSH1 0x18 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1ACD JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xCDC72595F74C7B1043D0E1FFBAB734648C838DFB0527D971B602BC216C9619EF PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x19 DUP3 LT ISZERO PUSH2 0x1B2F JUMPI PUSH4 0x2000000 DUP4 AND DUP1 ISZERO PUSH2 0x1AFD JUMPI PUSH1 0x19 DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1B26 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xABF5AC974A1ED57F4050AA510DD9C74F508277B39D7973BB2DFCCC5EEB0618D PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x1A DUP3 LT ISZERO PUSH2 0x1B88 JUMPI PUSH4 0x4000000 DUP4 AND DUP1 ISZERO PUSH2 0x1B56 JUMPI PUSH1 0x1A DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1B7F JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0xB8CD74046FF337F0A7BF2C8E03E10F642C1886798D71806AB1E888D9E5EE87D0 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x1B DUP3 LT ISZERO PUSH2 0x1BE1 JUMPI PUSH4 0x8000000 DUP4 AND DUP1 ISZERO PUSH2 0x1BAF JUMPI PUSH1 0x1B DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1BD8 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x838C5655CB21C6CB83313B5A631175DFF4963772CCE9108188B34AC87C81C41E PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x1C DUP3 LT ISZERO PUSH2 0x1C3A JUMPI PUSH4 0x10000000 DUP4 AND DUP1 ISZERO PUSH2 0x1C08 JUMPI PUSH1 0x1C DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1C31 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x662EE4DD2DD7B2BC707961B1E646C4047669DCB6584F0D8D770DAF5D7E7DEB2E PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x1D DUP3 LT ISZERO PUSH2 0x1C93 JUMPI PUSH4 0x20000000 DUP4 AND DUP1 ISZERO PUSH2 0x1C61 JUMPI PUSH1 0x1D DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1C8A JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x388AB20E2573D171A88108E79D820E98F26C0B84AA8B2F4AA4968DBB818EA322 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x1E DUP3 LT ISZERO PUSH2 0x1CEC JUMPI PUSH4 0x40000000 DUP4 AND DUP1 ISZERO PUSH2 0x1CBA JUMPI PUSH1 0x1E DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1CE3 JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x93237C50BA75EE485F4C22ADF2F741400BDF8D6A9CC7DF7ECAE576221665D735 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST PUSH1 0x1F DUP3 LT ISZERO PUSH2 0x1D45 JUMPI PUSH4 0x80000000 DUP4 AND DUP1 ISZERO PUSH2 0x1D13 JUMPI PUSH1 0x1F DUP3 ADD SLOAD PUSH1 0x0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH2 0x1D3C JUMP JUMPDEST DUP5 PUSH1 0x0 MSTORE PUSH32 0x8448818BB4AE4562849E949E17AC16E0BE16688E156B5CF15E098C627C0056A9 PUSH1 0x20 MSTORE JUMPDEST POP PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP4 POP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1DC2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A9 SWAP1 PUSH2 0x2271 JUMP JUMPDEST PUSH2 0x6D3 DUP2 PUSH2 0x1E76 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1DF2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A9 SWAP1 PUSH2 0x2271 JUMP JUMPDEST PUSH2 0x627 PUSH2 0x1EBF JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 PUSH3 0x10000 SWAP1 SWAP4 DIV AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH3 0x10000 MUL PUSH3 0x10000 PUSH1 0x1 PUSH1 0xB0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1E9D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A9 SWAP1 PUSH2 0x2271 JUMP JUMPDEST PUSH1 0x53 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1EE6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A9 SWAP1 PUSH2 0x2271 JUMP JUMPDEST PUSH2 0x627 CALLER PUSH2 0x1DFA JUMP JUMPDEST DUP3 PUSH1 0x20 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x1F1D JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1F1D JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1F02 JUMP JUMPDEST POP PUSH2 0x1F29 SWAP3 SWAP2 POP PUSH2 0x1F6C JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x400 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x1F5F PUSH2 0x1F2D JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1F29 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1F6D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F93 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1FAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1FC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1FF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x200B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x201F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x2031 JUMPI PUSH2 0x2031 PUSH2 0x1FCA JUMP JUMPDEST DUP1 PUSH1 0x5 SHL PUSH1 0x40 MLOAD PUSH1 0x1F NOT PUSH1 0x3F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT DUP6 DUP3 GT OR ISZERO PUSH2 0x2056 JUMPI PUSH2 0x2056 PUSH2 0x1FCA JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 DUP3 MSTORE DUP5 DUP3 ADD SWAP3 POP DUP4 DUP2 ADD DUP6 ADD SWAP2 DUP9 DUP4 GT ISZERO PUSH2 0x2074 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP3 DUP6 LT ISZERO PUSH2 0x2092 JUMPI DUP5 CALLDATALOAD DUP5 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP3 DUP6 ADD SWAP3 PUSH2 0x2079 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x400 DUP2 ADD DUP2 DUP4 PUSH1 0x0 JUMPDEST PUSH1 0x20 DUP1 DUP3 LT PUSH2 0x20B7 JUMPI POP PUSH2 0x20CB JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x20A8 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD DUP6 DUP4 MSTORE PUSH1 0x20 DUP6 DUP2 DUP6 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP6 ADD MSTORE DUP2 DUP6 MLOAD DUP1 DUP5 MSTORE PUSH1 0x80 DUP7 ADD SWAP2 POP DUP3 DUP8 ADD SWAP4 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2131 JUMPI DUP5 MLOAD DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2115 JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x991 JUMPI PUSH2 0x991 PUSH2 0x213F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x217A JUMPI PUSH2 0x217A PUSH2 0x213F JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x21BC JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x21A2 JUMPI PUSH2 0x21A2 PUSH2 0x213F JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x21AF JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x2186 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x21D3 JUMPI POP PUSH1 0x1 PUSH2 0x991 JUMP JUMPDEST DUP2 PUSH2 0x21E0 JUMPI POP PUSH1 0x0 PUSH2 0x991 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x21F6 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x2200 JUMPI PUSH2 0x221C JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x991 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x2211 JUMPI PUSH2 0x2211 PUSH2 0x213F JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x991 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x223F JUMPI POP DUP2 DUP2 EXP PUSH2 0x991 JUMP JUMPDEST PUSH2 0x2249 DUP4 DUP4 PUSH2 0x2181 JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x225D JUMPI PUSH2 0x225D PUSH2 0x213F JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1FAA DUP4 DUP4 PUSH2 0x21C4 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x2B SWAP1 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 PUSH1 0x40 DUP3 ADD MSTORE PUSH11 0x6E697469616C697A696E67 PUSH1 0xA8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH10 0x2EFB4FDE2EF60F8A670B 0xCF PUSH7 0x710807EEF1FC4F CALLDATALOAD NUMBER 0x29 PUSH28 0xB32AD63F5A4F336564736F6C63430008110033000000000000000000 ","sourceMap":"460:5029:112:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1989:75;2049:10;;1989:75;;;160:25:181;;;148:2;133:18;1989:75:112;;;;;;;;3025:379;;;;;;:::i;:::-;;:::i;:::-;;5140:248;;;;;;:::i;:::-;;:::i;:::-;;;;846:25:181;;;902:2;887:18;;880:34;;;;819:18;5140:248:112;672::181;1407:23:112;;;;;-1:-1:-1;;;;;1407:23:112;;;;;;-1:-1:-1;;;;;1089:32:181;;;1071:51;;1059:2;1044:18;1407:23:112;925:203:181;4002:834:112;;;;;;:::i;:::-;;:::i;1949:112:168:-;2029:27;;1949:112;;1660:88:112;;;:::i;:::-;;;;;;;:::i;2151:79:168:-;1530:6;2151:79;;3584:65:112;;;:::i;1641:79:168:-;1687:7;1709:6;;;;-1:-1:-1;;;;;1709:6:168;1641:79;;3321:420;;;;;;:::i;:::-;;:::i;2288:134:112:-;;;;;;:::i;:::-;;:::i;4404:539:168:-;;;:::i;2141:106:112:-;;;:::i;1792:85:168:-;1863:9;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;;3097:4;3116:6;;;;-1:-1:-1;;;;;3116:6:168;:20;;3055:86;;;;3089:14:181;;3082:22;3064:41;;3052:2;3037:18;3055:86:168;2924:187:181;1818:75:112;;;:::i;1192:26::-;;;;;;;3025:379;2344:6:168;;;;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;-1:-1:-1;;;;;3096:25:112;::::1;3092:82;;3130:44;;-1:-1:-1::0;;;3130:44:112::1;;;;;;;;;;;3092:82;3198:8;::::0;-1:-1:-1;;;;;3198:8:112;;::::1;::::0;3216:22;::::1;::::0;;3212:83:::1;;3247:48;;-1:-1:-1::0;;;3247:48:112::1;;;;;;;;;;;3212:83;3333:37;::::0;;-1:-1:-1;;;;;3528:15:181;;;3510:34;;3580:15;;3575:2;3560:18;;3553:43;3333:37:112::1;::::0;3445:18:181;3333:37:112::1;;;;;;;-1:-1:-1::0;3377:8:112::1;:22:::0;;-1:-1:-1;;;;;;3377:22:112::1;-1:-1:-1::0;;;;;3377:22:112;;;::::1;::::0;;;::::1;::::0;;3025:379::o;5140:248::-;1515:8;;5199:13;;;;-1:-1:-1;;;;;1515:8:112;1527:10;1515:22;1507:44;;;;-1:-1:-1;;;1507:44:112;;3809:2:181;1507:44:112;;;3791:21:181;3848:1;3828:18;;;3821:29;-1:-1:-1;;;3866:18:181;;;3859:39;3915:18;;1507:44:112;;;;;;;;;5271:11:::1;::::0;;;;;;;;:17:::1;::::0;5283:4;;5271:11;:4:::1;::::0;:11;;;;::::1;::::0;:4;;:11:::1;::::0;:4;:11;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;;;5271:11:112;;;-1:-1:-1;;5271:11:112::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;:17::i;:::-;5264:24:::0;;:4:::1;::::0;:24:::1;::::0;:4;;:24:::1;;:::i;:::-;-1:-1:-1::0;5264:24:112::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;5303:10:112;;5327:11:::1;5303:4;5327:9;:11::i;:::-;5350:33;::::0;;4146:25:181;;;4202:2;4187:18;;4180:34;;;4230:18;;;4223:34;;;5319:19:112;;-1:-1:-1;5350:33:112::1;::::0;4134:2:181;4119:18;5350:33:112::1;;;;;;;5140:248:::0;;;:::o;4002:834::-;1515:8;;4072:13;;;;-1:-1:-1;;;;;1515:8:112;1527:10;1515:22;1507:44;;;;-1:-1:-1;;;1507:44:112;;3809:2:181;1507:44:112;;;3791:21:181;3848:1;3828:18;;;3821:29;-1:-1:-1;;;3866:18:181;;;3859:39;3915:18;;1507:44:112;3607:332:181;1507:44:112;4297:34:::1;::::0;;;;;;;;-1:-1:-1;;4327:4:112::1;::::0;4297:34;;;::::1;::::0;4327:4;;4297:34:::1;::::0;4327:4;4297:34;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;;;4297:34:112;;;-1:-1:-1;;4297:34:112::1;::::0;;::::1;::::0;;::::1;::::0;4358:13;;4297:34;;-1:-1:-1;;4377:173:112::1;4397:9;4393:1;:13;4377:173;;;4481:23;4494:6;4501:1;4494:9;;;;;;;;:::i;:::-;;;;;;;4481:5;:12;;:23;;;;:::i;:::-;4473:31:::0;-1:-1:-1;4532:3:112::1;;4377:173;;;-1:-1:-1::0;4603:12:112;;4610:5;;4603:4:::1;::::0;:12:::1;::::0;:4;;:12:::1;;:::i;:::-;-1:-1:-1::0;4603:12:112::1;::::0;;::::1;::::0;;;::::1;::::0;4674:11;::::1;::::0;;-1:-1:-1;4771:11:112::1;:4;:9;:11::i;:::-;4763:19;;4794:37;4809:5;4816:6;4824;4794:37;;;;;;;;:::i;:::-;;;;;;;;4103:733;;4002:834:::0;;;:::o;1660:88::-;1699:18;;:::i;:::-;1725;;;;;;;;;;;1732:4;;1725:18;;1732:4;1725:18;;;;;;;;;;;;;;;;;;;;;;;;1660:88;:::o;3584:65::-;2344:6:168;;;;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3584:65:112:o;3321:420:168:-;2344:6;;;;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;;;::::1;;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;:::-;3321:420:::0;:::o;2288:134:112:-;3268:19:29;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:29;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:29;1476:19:36;:23;;;3376:66:29;;-1:-1:-1;3425:12:29;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:29;;5382:2:181;3314:201:29;;;5364:21:181;5421:2;5401:18;;;5394:30;5460:34;5440:18;;;5433:62;-1:-1:-1;;;5511:18:181;;;5504:44;5565:19;;3314:201:29;5180:410:181;3314:201:29;3525:12;:16;;-1:-1:-1;;3525:16:29;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:29;;;;;3551:65;2352:35:112::1;2377:9;2352:24;:35::i;:::-;2393:24;:22;:24::i;:::-;3640:14:29::0;3636:99;;;3686:5;3670:21;;-1:-1:-1;;3670:21:29;;;3710:14;;-1:-1:-1;5747:36:181;;3710:14:29;;5735:2:181;5720:18;3710:14:29;;;;;;;3636:99;3258:483;2288:134:112;:::o;4404:539:168:-;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;2141:106:112:-:0;2186:7;2195;2218:11;:4;:9;:11::i;:::-;2231:10;;2210:32;;2231:10;;-1:-1:-1;2141:106:112;-1:-1:-1;2141:106:112:o;1818:75::-;1855:7;1877:11;:4;:9;:11::i;:::-;1870:18;;1818:75;:::o;4898:1333:164:-;4969:11;;:::i;:::-;5085:12;5102:4;:10;;5100:12;;;;;:::i;:::-;;;;;;-1:-1:-1;458:1:164;442:13;397:2;442:1;:13;:::i;:::-;:17;;;;:::i;:::-;5122:4;:17;5118:60;;;5148:30;;-1:-1:-1;;;5148:30:164;;;;;;;;;;;5118:60;5412:9;5407:627;397:2;5423:1;:14;5407:627;;;5552:4;5559:1;5552:8;5565:1;5551:15;5547:202;;5698:11;;5715:4;;5710:1;5698:14;;;;;;;:::i;:::-;;;;:21;-1:-1:-1;5736:4:164;;-1:-1:-1;5729:11:164;;-1:-1:-1;5729:11:164;5547:202;5887:11;;5899:1;5887:14;;;;;;;:::i;:::-;;;;;5903:4;5870:38;;;;;;;;7730:19:181;;;7774:2;7765:12;;7758:28;7811:2;7802:12;;7573:247;5870:38:164;;;;-1:-1:-1;;5870:38:164;;;;;;;;;5860:49;;5870:38;5860:49;;;;;-1:-1:-1;5926:1:164;5917:10;;;;6016:3;5407:627;;;;6196:30;;-1:-1:-1;;;6196:30:164;;;;;;;;;;;4898:1333;;;;;:::o;6380:18066::-;6477:10;;;;6436:16;;6498:11;;;6494:43;;-1:-1:-1;6526:4:164;;6380:18066;-1:-1:-1;;6380:18066:164:o;6494:43::-;6543:9;6592;6712:1;6704:6;6700:14;6697:162;;;6745:9;6739:16;6736:1;6729:27;6782:3;6776:4;6769:17;6824:4;6821:1;6811:18;6799:30;;6842:5;;6697:162;6886:9;6874:22;;6871:197;;;6942:1;6931:9;6927:17;6921:24;6918:1;6911:35;6972:3;6966:4;6959:17;7014:4;7011:1;7001:18;6989:30;;7037:1;7032:6;;7051:5;;6871:197;7095:9;7083:22;;7080:197;;;7151:1;7140:9;7136:17;7130:24;7127:1;7120:35;7181:3;7175:4;7168:17;7223:4;7220:1;7210:18;7198:30;;7246:1;7241:6;;7260:5;;7080:197;7304:9;7292:22;;7289:197;;;7360:1;7349:9;7345:17;7339:24;7336:1;7329:35;7390:3;7384:4;7377:17;7432:4;7429:1;7419:18;7407:30;;7455:1;7450:6;;7469:5;;7289:197;7513:9;7501:22;;7498:197;;;7569:1;7558:9;7554:17;7548:24;7545:1;7538:35;7599:3;7593:4;7586:17;7641:4;7638:1;7628:18;7616:30;;7664:1;7659:6;;7678:5;;7498:197;7722:9;7710:22;;7707:197;;;7778:1;7767:9;7763:17;7757:24;7754:1;7747:35;7808:3;7802:4;7795:17;7850:4;7847:1;7837:18;7825:30;;7873:1;7868:6;;7887:5;;7707:197;7931:9;7919:22;;7916:197;;;7987:1;7976:9;7972:17;7966:24;7963:1;7956:35;8017:3;8011:4;8004:17;8059:4;8056:1;8046:18;8034:30;;8082:1;8077:6;;8096:5;;7916:197;8140:9;8128:22;;8125:197;;;8196:1;8185:9;8181:17;8175:24;8172:1;8165:35;8226:3;8220:4;8213:17;8268:4;8265:1;8255:18;8243:30;;8291:1;8286:6;;8305:5;;8125:197;8349:9;8337:22;;8334:197;;;8405:1;8394:9;8390:17;8384:24;8381:1;8374:35;8435:3;8429:4;8422:17;8477:4;8474:1;8464:18;8452:30;;8500:1;8495:6;;8514:5;;8334:197;8558:9;8546:22;;8543:197;;;8614:1;8603:9;8599:17;8593:24;8590:1;8583:35;8644:3;8638:4;8631:17;8686:4;8683:1;8673:18;8661:30;;8709:1;8704:6;;8723:5;;8543:197;8767:10;8755:23;;8752:201;;;8824:2;8813:9;8809:18;8803:25;8800:1;8793:36;8855:4;8849;8842:18;8898:4;8895:1;8885:18;8873:30;;8921:2;8916:7;;8936:5;;8752:201;8980:10;8968:23;;8965:201;;;9037:2;9026:9;9022:18;9016:25;9013:1;9006:36;9068:4;9062;9055:18;9111:4;9108:1;9098:18;9086:30;;9134:2;9129:7;;9149:5;;8965:201;9193:10;9181:23;;9178:201;;;9250:2;9239:9;9235:18;9229:25;9226:1;9219:36;9281:4;9275;9268:18;9324:4;9321:1;9311:18;9299:30;;9347:2;9342:7;;9362:5;;9178:201;9406:10;9394:23;;9391:201;;;9463:2;9452:9;9448:18;9442:25;9439:1;9432:36;9494:4;9488;9481:18;9537:4;9534:1;9524:18;9512:30;;9560:2;9555:7;;9575:5;;9391:201;9619:10;9607:23;;9604:201;;;9676:2;9665:9;9661:18;9655:25;9652:1;9645:36;9707:4;9701;9694:18;9750:4;9747:1;9737:18;9725:30;;9773:2;9768:7;;9788:5;;9604:201;9832:10;9820:23;;9817:201;;;9889:2;9878:9;9874:18;9868:25;9865:1;9858:36;9920:4;9914;9907:18;9963:4;9960:1;9950:18;9938:30;;9986:2;9981:7;;10001:5;;9817:201;10045:10;10033:23;;10030:201;;;10102:2;10091:9;10087:18;10081:25;10078:1;10071:36;10133:4;10127;10120:18;10176:4;10173:1;10163:18;10151:30;;10199:2;10194:7;;10214:5;;10030:201;10258:10;10246:23;;10243:201;;;10315:2;10304:9;10300:18;10294:25;10291:1;10284:36;10346:4;10340;10333:18;10389:4;10386:1;10376:18;10364:30;;10412:2;10407:7;;10427:5;;10243:201;10471:10;10459:23;;10456:201;;;10528:2;10517:9;10513:18;10507:25;10504:1;10497:36;10559:4;10553;10546:18;10602:4;10599:1;10589:18;10577:30;;10625:2;10620:7;;10640:5;;10456:201;10684:10;10672:23;;10669:201;;;10741:2;10730:9;10726:18;10720:25;10717:1;10710:36;10772:4;10766;10759:18;10815:4;10812:1;10802:18;10790:30;;10838:2;10833:7;;10853:5;;10669:201;10897:10;10885:23;;10882:201;;;10954:2;10943:9;10939:18;10933:25;10930:1;10923:36;10985:4;10979;10972:18;11028:4;11025:1;11015:18;11003:30;;11051:2;11046:7;;11066:5;;10882:201;11110:10;11098:23;;11095:201;;;11167:2;11156:9;11152:18;11146:25;11143:1;11136:36;11198:4;11192;11185:18;11241:4;11238:1;11228:18;11216:30;;11264:2;11259:7;;11279:5;;11095:201;11323:10;11311:23;;11308:201;;;11380:2;11369:9;11365:18;11359:25;11356:1;11349:36;11411:4;11405;11398:18;11454:4;11451:1;11441:18;11429:30;;11477:2;11472:7;;11492:5;;11308:201;11536:10;11524:23;;11521:201;;;11593:2;11582:9;11578:18;11572:25;11569:1;11562:36;11624:4;11618;11611:18;11667:4;11664:1;11654:18;11642:30;;11690:2;11685:7;;11705:5;;11521:201;11749:10;11737:23;;11734:201;;;11806:2;11795:9;11791:18;11785:25;11782:1;11775:36;11837:4;11831;11824:18;11880:4;11877:1;11867:18;11855:30;;11903:2;11898:7;;11918:5;;11734:201;11962:10;11950:23;;11947:201;;;12019:2;12008:9;12004:18;11998:25;11995:1;11988:36;12050:4;12044;12037:18;12093:4;12090:1;12080:18;12068:30;;12116:2;12111:7;;12131:5;;11947:201;12175:10;12163:23;;12160:201;;;12232:2;12221:9;12217:18;12211:25;12208:1;12201:36;12263:4;12257;12250:18;12306:4;12303:1;12293:18;12281:30;;12329:2;12324:7;;12344:5;;12160:201;12388:10;12376:23;;12373:201;;;12445:2;12434:9;12430:18;12424:25;12421:1;12414:36;12476:4;12470;12463:18;12519:4;12516:1;12506:18;12494:30;;12542:2;12537:7;;12557:5;;12373:201;12601:10;12589:23;;12586:201;;;12658:2;12647:9;12643:18;12637:25;12634:1;12627:36;12689:4;12683;12676:18;12732:4;12729:1;12719:18;12707:30;;12755:2;12750:7;;12770:5;;12586:201;12814:10;12802:23;;12799:201;;;12871:2;12860:9;12856:18;12850:25;12847:1;12840:36;12902:4;12896;12889:18;12945:4;12942:1;12932:18;12920:30;;12968:2;12963:7;;12983:5;;12799:201;13027:10;13015:23;;13012:201;;;13084:2;13073:9;13069:18;13063:25;13060:1;13053:36;13115:4;13109;13102:18;13158:4;13155:1;13145:18;13133:30;;13181:2;13176:7;;13196:5;;13012:201;13240:10;13228:23;;13225:201;;;13297:2;13286:9;13282:18;13276:25;13273:1;13266:36;13328:4;13322;13315:18;13371:4;13368:1;13358:18;13346:30;;13394:2;13389:7;;13409:5;;13225:201;13450:4;13438:16;;13470:2;13465:7;;6650:6848;13517:2;13514:1;13511:9;13533:5;13508:40;13579:1;13576;13573:8;13570:335;;;13615:9;13603:22;;13638:88;;;;13794:1;13783:9;13779:17;13773:24;13770:1;13763:35;13826:8;13820:4;13813:22;13596:253;;13638:88;13671:8;13668:1;13661:19;13708:3;13702:4;13695:17;13596:253;;13888:4;13885:1;13875:18;13863:30;;13570:335;13926:1;13923;13920:8;13917:335;;;13962:9;13950:22;;13985:88;;;;14141:1;14130:9;14126:17;14120:24;14117:1;14110:35;14173:8;14167:4;14160:22;13943:253;;13985:88;14018:8;14015:1;14008:19;14055:3;14049:4;14042:17;13943:253;;14235:4;14232:1;14222:18;14210:30;;13917:335;14273:1;14270;14267:8;14264:335;;;14309:9;14297:22;;14332:88;;;;14488:1;14477:9;14473:17;14467:24;14464:1;14457:35;14520:8;14514:4;14507:22;14290:253;;14332:88;14365:8;14362:1;14355:19;14402:3;14396:4;14389:17;14290:253;;14582:4;14579:1;14569:18;14557:30;;14264:335;14620:1;14617;14614:8;14611:335;;;14656:9;14644:22;;14679:88;;;;14835:1;14824:9;14820:17;14814:24;14811:1;14804:35;14867:8;14861:4;14854:22;14637:253;;14679:88;14712:8;14709:1;14702:19;14749:3;14743:4;14736:17;14637:253;;14929:4;14926:1;14916:18;14904:30;;14611:335;14967:1;14964;14961:8;14958:335;;;15003:9;14991:22;;15026:88;;;;15182:1;15171:9;15167:17;15161:24;15158:1;15151:35;15214:8;15208:4;15201:22;14984:253;;15026:88;15059:8;15056:1;15049:19;15096:3;15090:4;15083:17;14984:253;;15276:4;15273:1;15263:18;15251:30;;14958:335;15314:1;15311;15308:8;15305:335;;;15350:9;15338:22;;15373:88;;;;15529:1;15518:9;15514:17;15508:24;15505:1;15498:35;15561:8;15555:4;15548:22;15331:253;;15373:88;15406:8;15403:1;15396:19;15443:3;15437:4;15430:17;15331:253;;15623:4;15620:1;15610:18;15598:30;;15305:335;15661:1;15658;15655:8;15652:335;;;15697:9;15685:22;;15720:88;;;;15876:1;15865:9;15861:17;15855:24;15852:1;15845:35;15908:8;15902:4;15895:22;15678:253;;15720:88;15753:8;15750:1;15743:19;15790:3;15784:4;15777:17;15678:253;;15970:4;15967:1;15957:18;15945:30;;15652:335;16008:1;16005;16002:8;15999:335;;;16044:9;16032:22;;16067:88;;;;16223:1;16212:9;16208:17;16202:24;16199:1;16192:35;16255:8;16249:4;16242:22;16025:253;;16067:88;16100:8;16097:1;16090:19;16137:3;16131:4;16124:17;16025:253;;16317:4;16314:1;16304:18;16292:30;;15999:335;16355:1;16352;16349:8;16346:335;;;16391:9;16379:22;;16414:88;;;;16570:1;16559:9;16555:17;16549:24;16546:1;16539:35;16602:8;16596:4;16589:22;16372:253;;16414:88;16447:8;16444:1;16437:19;16484:3;16478:4;16471:17;16372:253;;16664:4;16661:1;16651:18;16639:30;;16346:335;16702:2;16699:1;16696:9;16693:339;;;16739:10;16727:23;;16763:89;;;;16920:2;16909:9;16905:18;16899:25;16896:1;16889:36;16953:8;16947:4;16940:22;16720:256;;16763:89;16796:8;16793:1;16786:19;16833:4;16827;16820:18;16720:256;;17015:4;17012:1;17002:18;16990:30;;16693:339;17053:2;17050:1;17047:9;17044:339;;;17090:10;17078:23;;17114:89;;;;17271:2;17260:9;17256:18;17250:25;17247:1;17240:36;17304:8;17298:4;17291:22;17071:256;;17114:89;17147:8;17144:1;17137:19;17184:4;17178;17171:18;17071:256;;17366:4;17363:1;17353:18;17341:30;;17044:339;17404:2;17401:1;17398:9;17395:339;;;17441:10;17429:23;;17465:89;;;;17622:2;17611:9;17607:18;17601:25;17598:1;17591:36;17655:8;17649:4;17642:22;17422:256;;17465:89;17498:8;17495:1;17488:19;17535:4;17529;17522:18;17422:256;;17717:4;17714:1;17704:18;17692:30;;17395:339;17755:2;17752:1;17749:9;17746:339;;;17792:10;17780:23;;17816:89;;;;17973:2;17962:9;17958:18;17952:25;17949:1;17942:36;18006:8;18000:4;17993:22;17773:256;;17816:89;17849:8;17846:1;17839:19;17886:4;17880;17873:18;17773:256;;18068:4;18065:1;18055:18;18043:30;;17746:339;18106:2;18103:1;18100:9;18097:339;;;18143:10;18131:23;;18167:89;;;;18324:2;18313:9;18309:18;18303:25;18300:1;18293:36;18357:8;18351:4;18344:22;18124:256;;18167:89;18200:8;18197:1;18190:19;18237:4;18231;18224:18;18124:256;;18419:4;18416:1;18406:18;18394:30;;18097:339;18457:2;18454:1;18451:9;18448:339;;;18494:10;18482:23;;18518:89;;;;18675:2;18664:9;18660:18;18654:25;18651:1;18644:36;18708:8;18702:4;18695:22;18475:256;;18518:89;18551:8;18548:1;18541:19;18588:4;18582;18575:18;18475:256;;18770:4;18767:1;18757:18;18745:30;;18448:339;18808:2;18805:1;18802:9;18799:339;;;18845:10;18833:23;;18869:89;;;;19026:2;19015:9;19011:18;19005:25;19002:1;18995:36;19059:8;19053:4;19046:22;18826:256;;18869:89;18902:8;18899:1;18892:19;18939:4;18933;18926:18;18826:256;;19121:4;19118:1;19108:18;19096:30;;18799:339;19159:2;19156:1;19153:9;19150:339;;;19196:10;19184:23;;19220:89;;;;19377:2;19366:9;19362:18;19356:25;19353:1;19346:36;19410:8;19404:4;19397:22;19177:256;;19220:89;19253:8;19250:1;19243:19;19290:4;19284;19277:18;19177:256;;19472:4;19469:1;19459:18;19447:30;;19150:339;19510:2;19507:1;19504:9;19501:339;;;19547:10;19535:23;;19571:89;;;;19728:2;19717:9;19713:18;19707:25;19704:1;19697:36;19761:8;19755:4;19748:22;19528:256;;19571:89;19604:8;19601:1;19594:19;19641:4;19635;19628:18;19528:256;;19823:4;19820:1;19810:18;19798:30;;19501:339;19861:2;19858:1;19855:9;19852:339;;;19898:10;19886:23;;19922:89;;;;20079:2;20068:9;20064:18;20058:25;20055:1;20048:36;20112:8;20106:4;20099:22;19879:256;;19922:89;19955:8;19952:1;19945:19;19992:4;19986;19979:18;19879:256;;20174:4;20171:1;20161:18;20149:30;;19852:339;20212:2;20209:1;20206:9;20203:339;;;20249:10;20237:23;;20273:89;;;;20430:2;20419:9;20415:18;20409:25;20406:1;20399:36;20463:8;20457:4;20450:22;20230:256;;20273:89;20306:8;20303:1;20296:19;20343:4;20337;20330:18;20230:256;;20525:4;20522:1;20512:18;20500:30;;20203:339;20563:2;20560:1;20557:9;20554:339;;;20600:10;20588:23;;20624:89;;;;20781:2;20770:9;20766:18;20760:25;20757:1;20750:36;20814:8;20808:4;20801:22;20581:256;;20624:89;20657:8;20654:1;20647:19;20694:4;20688;20681:18;20581:256;;20876:4;20873:1;20863:18;20851:30;;20554:339;20914:2;20911:1;20908:9;20905:339;;;20951:10;20939:23;;20975:89;;;;21132:2;21121:9;21117:18;21111:25;21108:1;21101:36;21165:8;21159:4;21152:22;20932:256;;20975:89;21008:8;21005:1;20998:19;21045:4;21039;21032:18;20932:256;;21227:4;21224:1;21214:18;21202:30;;20905:339;21265:2;21262:1;21259:9;21256:339;;;21302:10;21290:23;;21326:89;;;;21483:2;21472:9;21468:18;21462:25;21459:1;21452:36;21516:8;21510:4;21503:22;21283:256;;21326:89;21359:8;21356:1;21349:19;21396:4;21390;21383:18;21283:256;;21578:4;21575:1;21565:18;21553:30;;21256:339;21616:2;21613:1;21610:9;21607:339;;;21653:10;21641:23;;21677:89;;;;21834:2;21823:9;21819:18;21813:25;21810:1;21803:36;21867:8;21861:4;21854:22;21634:256;;21677:89;21710:8;21707:1;21700:19;21747:4;21741;21734:18;21634:256;;21929:4;21926:1;21916:18;21904:30;;21607:339;21967:2;21964:1;21961:9;21958:339;;;22004:10;21992:23;;22028:89;;;;22185:2;22174:9;22170:18;22164:25;22161:1;22154:36;22218:8;22212:4;22205:22;21985:256;;22028:89;22061:8;22058:1;22051:19;22098:4;22092;22085:18;21985:256;;22280:4;22277:1;22267:18;22255:30;;21958:339;22318:2;22315:1;22312:9;22309:339;;;22355:10;22343:23;;22379:89;;;;22536:2;22525:9;22521:18;22515:25;22512:1;22505:36;22569:8;22563:4;22556:22;22336:256;;22379:89;22412:8;22409:1;22402:19;22449:4;22443;22436:18;22336:256;;22631:4;22628:1;22618:18;22606:30;;22309:339;22669:2;22666:1;22663:9;22660:339;;;22706:10;22694:23;;22730:89;;;;22887:2;22876:9;22872:18;22866:25;22863:1;22856:36;22920:8;22914:4;22907:22;22687:256;;22730:89;22763:8;22760:1;22753:19;22800:4;22794;22787:18;22687:256;;22982:4;22979:1;22969:18;22957:30;;22660:339;23020:2;23017:1;23014:9;23011:339;;;23057:10;23045:23;;23081:89;;;;23238:2;23227:9;23223:18;23217:25;23214:1;23207:36;23271:8;23265:4;23258:22;23038:256;;23081:89;23114:8;23111:1;23104:19;23151:4;23145;23138:18;23038:256;;23333:4;23330:1;23320:18;23308:30;;23011:339;23371:2;23368:1;23365:9;23362:339;;;23408:10;23396:23;;23432:89;;;;23589:2;23578:9;23574:18;23568:25;23565:1;23558:36;23622:8;23616:4;23609:22;23389:256;;23432:89;23465:8;23462:1;23455:19;23502:4;23496;23489:18;23389:256;;23684:4;23681:1;23671:18;23659:30;;23362:339;23722:2;23719:1;23716:9;23713:339;;;23759:10;23747:23;;23783:89;;;;23940:2;23929:9;23925:18;23919:25;23916:1;23909:36;23973:8;23967:4;23960:22;23740:256;;23783:89;23816:8;23813:1;23806:19;23853:4;23847;23840:18;23740:256;;24035:4;24032:1;24022:18;24010:30;;23713:339;24073:2;24070:1;24067:9;24064:339;;;24110:10;24098:23;;24134:89;;;;24291:2;24280:9;24276:18;24270:25;24267:1;24260:36;24324:8;24318:4;24311:22;24091:256;;24134:89;24167:8;24164:1;24157:19;24204:4;24198;24191:18;24091:256;;24386:4;24383:1;24373:18;24361:30;;24064:339;6613:10;6567:17875;;6380:18066;;;:::o;5170:183:168:-;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;2536:135:112:-;5363:13:29;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:29;;;;;;;:::i;:::-;2621:45:112::1;2656:9;2621:34;:45::i;384:105:169:-:0;5363:13:29;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:29;;;;;;;:::i;:::-;450:34:169::1;:32;:34::i;4981:185:168:-:0;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;;;-1:-1:-1;;;;;;5082:17:168;;;;;;;;;:6;5105:34;-1:-1:-1;5145:16:168;;-1:-1:-1;;;;;;5145:16:168;;;4981:185::o;2675:120:112:-;5363:13:29;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:29;;;;;;;:::i;:::-;2770:8:112::1;:20:::0;;-1:-1:-1;;;;;;2770:20:112::1;-1:-1:-1::0;;;;;2770:20:112;;;::::1;::::0;;;::::1;::::0;;2675:120::o;493:102:169:-;5363:13:29;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:29;;;;;;;:::i;:::-;569:21:169::1;579:10;569:9;:21::i;-1:-1:-1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;196:286:181;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;350:23;;-1:-1:-1;;;;;402:31:181;;392:42;;382:70;;448:1;445;438:12;382:70;471:5;196:286;-1:-1:-1;;;196:286:181:o;487:180::-;546:6;599:2;587:9;578:7;574:23;570:32;567:52;;;615:1;612;605:12;567:52;-1:-1:-1;638:23:181;;487:180;-1:-1:-1;487:180:181:o;1133:127::-;1194:10;1189:3;1185:20;1182:1;1175:31;1225:4;1222:1;1215:15;1249:4;1246:1;1239:15;1265:1115;1349:6;1380:2;1423;1411:9;1402:7;1398:23;1394:32;1391:52;;;1439:1;1436;1429:12;1391:52;1479:9;1466:23;1508:18;1549:2;1541:6;1538:14;1535:34;;;1565:1;1562;1555:12;1535:34;1603:6;1592:9;1588:22;1578:32;;1648:7;1641:4;1637:2;1633:13;1629:27;1619:55;;1670:1;1667;1660:12;1619:55;1706:2;1693:16;1728:2;1724;1721:10;1718:36;;;1734:18;;:::i;:::-;1780:2;1777:1;1773:10;1812:2;1806:9;1875:2;1871:7;1866:2;1862;1858:11;1854:25;1846:6;1842:38;1930:6;1918:10;1915:22;1910:2;1898:10;1895:18;1892:46;1889:72;;;1941:18;;:::i;:::-;1977:2;1970:22;2027:18;;;2061:15;;;;-1:-1:-1;2103:11:181;;;2099:20;;;2131:19;;;2128:39;;;2163:1;2160;2153:12;2128:39;2187:11;;;;2207:142;2223:6;2218:3;2215:15;2207:142;;;2289:17;;2277:30;;2240:12;;;;2327;;;;2207:142;;;2368:6;1265:1115;-1:-1:-1;;;;;;;;1265:1115:181:o;2385:534::-;2567:4;2552:20;;2556:9;2649:6;2525:4;2683:230;2747:4;2780:2;2777:1;2774:9;2764:30;;2787:5;;;2764:30;2819:13;;2807:26;;2853:12;;;;2888:15;;;;2710:1;2703:9;2683:230;;;2687:3;;;2385:534;;;;:::o;4268:127::-;4329:10;4324:3;4320:20;4317:1;4310:31;4360:4;4357:1;4350:15;4384:4;4381:1;4374:15;4400:775;4598:4;4646:2;4635:9;4631:18;4676:6;4665:9;4658:25;4702:2;4740:6;4735:2;4724:9;4720:18;4713:34;4783:2;4778;4767:9;4763:18;4756:30;4806:6;4841;4835:13;4872:6;4864;4857:22;4910:3;4899:9;4895:19;4888:26;;4949:2;4941:6;4937:15;4923:29;;4970:1;4980:169;4994:6;4991:1;4988:13;4980:169;;;5055:13;;5043:26;;5124:15;;;;5089:12;;;;5016:1;5009:9;4980:169;;;-1:-1:-1;5166:3:181;;4400:775;-1:-1:-1;;;;;;;;4400:775:181:o;5794:127::-;5855:10;5850:3;5846:20;5843:1;5836:31;5886:4;5883:1;5876:15;5910:4;5907:1;5900:15;5926:128;5993:9;;;6014:11;;;6011:37;;;6028:18;;:::i;6059:135::-;6098:3;6119:17;;;6116:43;;6139:18;;:::i;:::-;-1:-1:-1;6186:1:181;6175:13;;6059:135::o;6199:422::-;6288:1;6331:5;6288:1;6345:270;6366:7;6356:8;6353:21;6345:270;;;6425:4;6421:1;6417:6;6413:17;6407:4;6404:27;6401:53;;;6434:18;;:::i;:::-;6484:7;6474:8;6470:22;6467:55;;;6504:16;;;;6467:55;6583:22;;;;6543:15;;;;6345:270;;;6349:3;6199:422;;;;;:::o;6626:806::-;6675:5;6705:8;6695:80;;-1:-1:-1;6746:1:181;6760:5;;6695:80;6794:4;6784:76;;-1:-1:-1;6831:1:181;6845:5;;6784:76;6876:4;6894:1;6889:59;;;;6962:1;6957:130;;;;6869:218;;6889:59;6919:1;6910:10;;6933:5;;;6957:130;6994:3;6984:8;6981:17;6978:43;;;7001:18;;:::i;:::-;-1:-1:-1;;7057:1:181;7043:16;;7072:5;;6869:218;;7171:2;7161:8;7158:16;7152:3;7146:4;7143:13;7139:36;7133:2;7123:8;7120:16;7115:2;7109:4;7106:12;7102:35;7099:77;7096:159;;;-1:-1:-1;7208:19:181;;;7240:5;;7096:159;7287:34;7312:8;7306:4;7287:34;:::i;:::-;7357:6;7353:1;7349:6;7345:19;7336:7;7333:32;7330:58;;;7368:18;;:::i;:::-;7406:20;;6626:806;-1:-1:-1;;;6626:806:181:o;7437:131::-;7497:5;7526:36;7553:8;7547:4;7526:36;:::i;7825:407::-;8027:2;8009:21;;;8066:2;8046:18;;;8039:30;8105:34;8100:2;8085:18;;8078:62;-1:-1:-1;;;8171:2:181;8156:18;;8149:41;8222:3;8207:19;;7825:407::o"},"gasEstimates":{"creation":{"codeDepositCost":"1789200","executionCost":"1884","totalCost":"1791084"},"external":{"acceptProposedOwner()":"63899","arborist()":"2427","branch()":"infinite","count()":"2294","delay()":"270","initialize(address)":"infinite","insert(bytes32)":"infinite","insert(bytes32[])":"infinite","owner()":"2365","proposeNewOwner(address)":"56450","proposed()":"2375","proposedTimestamp()":"2326","renounceOwnership()":"2447","renounced()":"2399","root()":"74299","rootAndCount()":"76385","setArborist(address)":"30281","tree()":"2397"},"internal":{"__MerkleTreeManager_init(address)":"infinite","__MerkleTreeManager_init_unchained(address)":"infinite"}},"methodIdentifiers":{"acceptProposedOwner()":"c5b350df","arborist()":"31d0913c","branch()":"4b72d0d4","count()":"06661abd","delay()":"6a42b8f8","initialize(address)":"c4d66de8","insert(bytes32)":"2d287e43","insert(bytes32[])":"34a55ee6","owner()":"8da5cb5b","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","renounceOwnership()":"715018a6","renounced()":"d232c220","root()":"ebf0c717","rootAndCount()":"c9b0a6de","setArborist(address)":"1b373a98","tree()":"fd54b228"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"MerkleLib__insert_treeIsFull\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MerkleTreeManager__setArborist_alreadyArborist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MerkleTreeManager__setArborist_zeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"}],\"name\":\"ArboristUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"}],\"name\":\"LeafInserted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"leaves\",\"type\":\"bytes32[]\"}],\"name\":\"LeavesInserted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arborist\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"branch\",\"outputs\":[{\"internalType\":\"bytes32[32]\",\"name\":\"\",\"type\":\"bytes32[32]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_arborist\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"}],\"name\":\"insert\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"_root\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"leaves\",\"type\":\"bytes32[]\"}],\"name\":\"insert\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"_root\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"root\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rootAndCount\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newArborist\",\"type\":\"address\"}],\"name\":\"setArborist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tree\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector.\",\"kind\":\"dev\",\"methods\":{\"insert(bytes32)\":{\"params\":{\"leaf\":\"The leaf to be inserted into the tree.\"},\"returns\":{\"_count\":\"Current node count (i.e. number of indices) AFTER the insertion of the new leaf, provided for convenience.\",\"_root\":\"Current root for convenience.\"}},\"insert(bytes32[])\":{\"params\":{\"leaves\":\"The leaves to be inserted into the tree.\"},\"returns\":{\"_count\":\"Current node count (i.e. number of indices) AFTER the insertion of the new leaf, provided for convenience.\",\"_root\":\"Current root for convenience.\"}},\"renounceOwnership()\":{\"details\":\"Renounce ownership should be impossible as long as there is a possibility the arborist may change.\"},\"setArborist(address)\":{\"params\":{\"newArborist\":\"The new address to set as the current arborist.\"}}},\"stateVariables\":{\"arborist\":{\"details\":\"This could be the root manager contract or a spoke connector contract, for example.\"}},\"title\":\"MerkleTreeManager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"arborist()\":{\"notice\":\"The arborist contract that has permission to write to this tree.\"},\"branch()\":{\"notice\":\"Returns the current branch.\"},\"count()\":{\"notice\":\"Returns the number of inserted leaves in the tree (current index).\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"insert(bytes32)\":{\"notice\":\"Inserts the given leaf into the tree.\"},\"insert(bytes32[])\":{\"notice\":\"Inserts the given leaves into the tree.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Remove ability to renounce ownership\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"root()\":{\"notice\":\"Calculates and returns the current root.\"},\"rootAndCount()\":{\"notice\":\"Convenience getter: returns the root and count.\"},\"setArborist(address)\":{\"notice\":\"Method for the current arborist to assign write permissions to a new arborist.\"},\"tree()\":{\"notice\":\"Core data structure with which this contract is tasked with keeping custody. Writable only by the designated arborist.\"}},\"notice\":\"Contains a Merkle tree instance and exposes read/write functions for the tree.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/MerkleTreeManager.sol\":\"MerkleTreeManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"contracts/messaging/MerkleTreeManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnableUpgradeable} from \\\"../shared/ProposedOwnableUpgradeable.sol\\\";\\nimport {MerkleLib} from \\\"./libraries/MerkleLib.sol\\\";\\n\\n/**\\n * @title MerkleTreeManager\\n * @notice Contains a Merkle tree instance and exposes read/write functions for the tree.\\n * @dev On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector.\\n */\\ncontract MerkleTreeManager is ProposedOwnableUpgradeable {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleTreeManager__setArborist_zeroAddress();\\n  error MerkleTreeManager__setArborist_alreadyArborist();\\n\\n  // ============ Events ============\\n\\n  event ArboristUpdated(address previous, address updated);\\n\\n  event LeafInserted(bytes32 root, uint256 count, bytes32 leaf);\\n\\n  event LeavesInserted(bytes32 root, uint256 count, bytes32[] leaves);\\n\\n  // ============ Libraries ============\\n\\n  using MerkleLib for MerkleLib.Tree;\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Core data structure with which this contract is tasked with keeping custody.\\n   * Writable only by the designated arborist.\\n   */\\n  MerkleLib.Tree public tree;\\n\\n  /**\\n   * @notice The arborist contract that has permission to write to this tree.\\n   * @dev This could be the root manager contract or a spoke connector contract, for example.\\n   */\\n  address public arborist;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyArborist() {\\n    require(arborist == msg.sender, \\\"!arborist\\\");\\n    _;\\n  }\\n\\n  // ============ Getters ============\\n\\n  /**\\n   * @notice Returns the current branch.\\n   */\\n  function branch() public view returns (bytes32[32] memory) {\\n    return tree.branch;\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the current root.\\n   */\\n  function root() public view returns (bytes32) {\\n    return tree.root();\\n  }\\n\\n  /**\\n   * @notice Returns the number of inserted leaves in the tree (current index).\\n   */\\n  function count() public view returns (uint256) {\\n    return tree.count;\\n  }\\n\\n  /**\\n   * @notice Convenience getter: returns the root and count.\\n   */\\n  function rootAndCount() public view returns (bytes32, uint256) {\\n    return (tree.root(), tree.count);\\n  }\\n\\n  // ======== Initializer =========\\n\\n  function initialize(address _arborist) public initializer {\\n    __MerkleTreeManager_init(_arborist);\\n    __ProposedOwnable_init();\\n  }\\n\\n  /**\\n   * @dev Initializes MerkleTreeManager instance. Sets the msg.sender as the initial permissioned\\n   */\\n  function __MerkleTreeManager_init(address _arborist) internal onlyInitializing {\\n    __MerkleTreeManager_init_unchained(_arborist);\\n  }\\n\\n  function __MerkleTreeManager_init_unchained(address _arborist) internal onlyInitializing {\\n    arborist = _arborist;\\n  }\\n\\n  // ============ Admin Functions ==============\\n\\n  /**\\n   * @notice Method for the current arborist to assign write permissions to a new arborist.\\n   * @param newArborist The new address to set as the current arborist.\\n   */\\n  function setArborist(address newArborist) external onlyOwner {\\n    if (newArborist == address(0)) revert MerkleTreeManager__setArborist_zeroAddress();\\n    address current = arborist;\\n    if (current == newArborist) revert MerkleTreeManager__setArborist_alreadyArborist();\\n\\n    // Emit updated event\\n    emit ArboristUpdated(current, newArborist);\\n\\n    arborist = newArborist;\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as there is a possibility the\\n   * arborist may change.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ========= Public Functions =========\\n\\n  /**\\n   * @notice Inserts the given leaves into the tree.\\n   * @param leaves The leaves to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32[] memory leaves) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // For > 1 leaf, considerably more efficient to put this tree into memory, conduct operations,\\n    // then re-assign it to storage - *especially* if we have multiple leaves to insert.\\n    MerkleLib.Tree memory _tree = tree;\\n\\n    uint256 leafCount = leaves.length;\\n    for (uint256 i; i < leafCount; ) {\\n      // Insert the new node (using in-memory method).\\n      _tree = _tree.insert(leaves[i]);\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // Write the newly updated tree to storage.\\n    tree = _tree;\\n\\n    // Get return details for convenience.\\n    _count = _tree.count;\\n    // NOTE: Root calculation method currently reads from storage only.\\n    _root = tree.root();\\n\\n    emit LeavesInserted(_root, _count, leaves);\\n  }\\n\\n  /**\\n   * @notice Inserts the given leaf into the tree.\\n   * @param leaf The leaf to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32 leaf) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // Insert the new node.\\n    tree = tree.insert(leaf);\\n    _count = tree.count;\\n    _root = tree.root();\\n\\n    emit LeafInserted(_root, _count, leaf);\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[48] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x6eb338843435d4e859de1c71b9ad458c41aeba79002eaa58a463ef86effda89a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/MerkleLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MerkleLib\\n * @author Illusory Systems Inc.\\n * @notice An incremental merkle tree modeled on the eth2 deposit contract.\\n **/\\nlibrary MerkleLib {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleLib__insert_treeIsFull();\\n\\n  // ============ Constants =============\\n\\n  uint256 internal constant TREE_DEPTH = 32;\\n  uint256 internal constant MAX_LEAVES = 2**TREE_DEPTH - 1;\\n\\n  /**\\n   * @dev Z_i represent the hash values at different heights for a binary tree with leaf values equal to `0`.\\n   * (e.g. Z_1 is the keccak256 hash of (0x0, 0x0), Z_2 is the keccak256 hash of (Z_1, Z_1), etc...)\\n   * Z_0 is the bottom of the 33-layer tree, Z_32 is the top (i.e. root).\\n   * Used to shortcut calculation in root calculation methods below.\\n   */\\n  bytes32 internal constant Z_0 = hex\\\"0000000000000000000000000000000000000000000000000000000000000000\\\";\\n  bytes32 internal constant Z_1 = hex\\\"ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5\\\";\\n  bytes32 internal constant Z_2 = hex\\\"b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30\\\";\\n  bytes32 internal constant Z_3 = hex\\\"21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85\\\";\\n  bytes32 internal constant Z_4 = hex\\\"e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344\\\";\\n  bytes32 internal constant Z_5 = hex\\\"0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d\\\";\\n  bytes32 internal constant Z_6 = hex\\\"887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968\\\";\\n  bytes32 internal constant Z_7 = hex\\\"ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83\\\";\\n  bytes32 internal constant Z_8 = hex\\\"9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af\\\";\\n  bytes32 internal constant Z_9 = hex\\\"cefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0\\\";\\n  bytes32 internal constant Z_10 = hex\\\"f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5\\\";\\n  bytes32 internal constant Z_11 = hex\\\"f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892\\\";\\n  bytes32 internal constant Z_12 = hex\\\"3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c\\\";\\n  bytes32 internal constant Z_13 = hex\\\"c1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb\\\";\\n  bytes32 internal constant Z_14 = hex\\\"5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc\\\";\\n  bytes32 internal constant Z_15 = hex\\\"da7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2\\\";\\n  bytes32 internal constant Z_16 = hex\\\"2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f\\\";\\n  bytes32 internal constant Z_17 = hex\\\"e1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a\\\";\\n  bytes32 internal constant Z_18 = hex\\\"5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0\\\";\\n  bytes32 internal constant Z_19 = hex\\\"b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0\\\";\\n  bytes32 internal constant Z_20 = hex\\\"c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2\\\";\\n  bytes32 internal constant Z_21 = hex\\\"f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9\\\";\\n  bytes32 internal constant Z_22 = hex\\\"5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377\\\";\\n  bytes32 internal constant Z_23 = hex\\\"4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652\\\";\\n  bytes32 internal constant Z_24 = hex\\\"cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef\\\";\\n  bytes32 internal constant Z_25 = hex\\\"0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d\\\";\\n  bytes32 internal constant Z_26 = hex\\\"b8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0\\\";\\n  bytes32 internal constant Z_27 = hex\\\"838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e\\\";\\n  bytes32 internal constant Z_28 = hex\\\"662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e\\\";\\n  bytes32 internal constant Z_29 = hex\\\"388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322\\\";\\n  bytes32 internal constant Z_30 = hex\\\"93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735\\\";\\n  bytes32 internal constant Z_31 = hex\\\"8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9\\\";\\n  bytes32 internal constant Z_32 = hex\\\"27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757\\\";\\n\\n  // ============= Structs ==============\\n\\n  /**\\n   * @notice Struct representing incremental merkle tree. Contains current\\n   * branch and the number of inserted leaves in the tree.\\n   **/\\n  struct Tree {\\n    bytes32[TREE_DEPTH] branch;\\n    uint256 count;\\n  }\\n\\n  // ========= Write Methods =========\\n\\n  /**\\n   * @notice Inserts a given node (leaf) into merkle tree. Operates on an in-memory tree and\\n   * returns an updated version of that tree.\\n   * @dev Reverts if the tree is already full.\\n   * @param node Element to insert into tree.\\n   * @return Tree Updated tree.\\n   **/\\n  function insert(Tree memory tree, bytes32 node) internal pure returns (Tree memory) {\\n    // Update tree.count to increase the current count by 1 since we'll be including a new node.\\n    uint256 size = ++tree.count;\\n    if (size > MAX_LEAVES) revert MerkleLib__insert_treeIsFull();\\n\\n    // Loop starting at 0, ending when we've finished inserting the node (i.e. hashing it) into\\n    // the active branch. Each loop we cut size in half, hashing the inserted node up the active\\n    // branch along the way.\\n    for (uint256 i; i < TREE_DEPTH; ) {\\n      // Check if the current size is odd; if so, we set this index in the branch to be the node.\\n      if ((size & 1) == 1) {\\n        // If i > 0, then this node will be a hash of the original node with every layer up\\n        // until layer `i`.\\n        tree.branch[i] = node;\\n        return tree;\\n      }\\n      // If the size is not yet odd, we hash the current index in the tree branch with the node.\\n      node = keccak256(abi.encodePacked(tree.branch[i], node));\\n      size >>= 1; // Cut size in half (statement equivalent to: `size /= 2`).\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // As the loop should always end prematurely with the `return` statement, this code should\\n    // be unreachable. We revert here just to be safe.\\n    revert MerkleLib__insert_treeIsFull();\\n  }\\n\\n  // ========= Read Methods =========\\n\\n  /**\\n   * @notice Calculates and returns tree's current root.\\n   * @return _current bytes32 root.\\n   **/\\n  function root(Tree storage tree) internal view returns (bytes32 _current) {\\n    uint256 _index = tree.count;\\n\\n    if (_index == 0) {\\n      return Z_32;\\n    }\\n\\n    uint256 i;\\n    assembly {\\n      let TREE_SLOT := tree.slot\\n\\n      for {\\n\\n      } true {\\n\\n      } {\\n        for {\\n\\n        } true {\\n\\n        } {\\n          if and(_index, 1) {\\n            mstore(0, sload(TREE_SLOT))\\n            mstore(0x20, Z_0)\\n            _current := keccak256(0, 0x40)\\n            break\\n          }\\n\\n          if and(_index, shl(1, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 1)))\\n            mstore(0x20, Z_1)\\n            _current := keccak256(0, 0x40)\\n            i := 1\\n            break\\n          }\\n\\n          if and(_index, shl(2, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 2)))\\n            mstore(0x20, Z_2)\\n            _current := keccak256(0, 0x40)\\n            i := 2\\n            break\\n          }\\n\\n          if and(_index, shl(3, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 3)))\\n            mstore(0x20, Z_3)\\n            _current := keccak256(0, 0x40)\\n            i := 3\\n            break\\n          }\\n\\n          if and(_index, shl(4, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 4)))\\n            mstore(0x20, Z_4)\\n            _current := keccak256(0, 0x40)\\n            i := 4\\n            break\\n          }\\n\\n          if and(_index, shl(5, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 5)))\\n            mstore(0x20, Z_5)\\n            _current := keccak256(0, 0x40)\\n            i := 5\\n            break\\n          }\\n\\n          if and(_index, shl(6, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 6)))\\n            mstore(0x20, Z_6)\\n            _current := keccak256(0, 0x40)\\n            i := 6\\n            break\\n          }\\n\\n          if and(_index, shl(7, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 7)))\\n            mstore(0x20, Z_7)\\n            _current := keccak256(0, 0x40)\\n            i := 7\\n            break\\n          }\\n\\n          if and(_index, shl(8, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 8)))\\n            mstore(0x20, Z_8)\\n            _current := keccak256(0, 0x40)\\n            i := 8\\n            break\\n          }\\n\\n          if and(_index, shl(9, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 9)))\\n            mstore(0x20, Z_9)\\n            _current := keccak256(0, 0x40)\\n            i := 9\\n            break\\n          }\\n\\n          if and(_index, shl(10, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 10)))\\n            mstore(0x20, Z_10)\\n            _current := keccak256(0, 0x40)\\n            i := 10\\n            break\\n          }\\n\\n          if and(_index, shl(11, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 11)))\\n            mstore(0x20, Z_11)\\n            _current := keccak256(0, 0x40)\\n            i := 11\\n            break\\n          }\\n\\n          if and(_index, shl(12, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 12)))\\n            mstore(0x20, Z_12)\\n            _current := keccak256(0, 0x40)\\n            i := 12\\n            break\\n          }\\n\\n          if and(_index, shl(13, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 13)))\\n            mstore(0x20, Z_13)\\n            _current := keccak256(0, 0x40)\\n            i := 13\\n            break\\n          }\\n\\n          if and(_index, shl(14, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 14)))\\n            mstore(0x20, Z_14)\\n            _current := keccak256(0, 0x40)\\n            i := 14\\n            break\\n          }\\n\\n          if and(_index, shl(15, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 15)))\\n            mstore(0x20, Z_15)\\n            _current := keccak256(0, 0x40)\\n            i := 15\\n            break\\n          }\\n\\n          if and(_index, shl(16, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 16)))\\n            mstore(0x20, Z_16)\\n            _current := keccak256(0, 0x40)\\n            i := 16\\n            break\\n          }\\n\\n          if and(_index, shl(17, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 17)))\\n            mstore(0x20, Z_17)\\n            _current := keccak256(0, 0x40)\\n            i := 17\\n            break\\n          }\\n\\n          if and(_index, shl(18, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 18)))\\n            mstore(0x20, Z_18)\\n            _current := keccak256(0, 0x40)\\n            i := 18\\n            break\\n          }\\n\\n          if and(_index, shl(19, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 19)))\\n            mstore(0x20, Z_19)\\n            _current := keccak256(0, 0x40)\\n            i := 19\\n            break\\n          }\\n\\n          if and(_index, shl(20, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 20)))\\n            mstore(0x20, Z_20)\\n            _current := keccak256(0, 0x40)\\n            i := 20\\n            break\\n          }\\n\\n          if and(_index, shl(21, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 21)))\\n            mstore(0x20, Z_21)\\n            _current := keccak256(0, 0x40)\\n            i := 21\\n            break\\n          }\\n\\n          if and(_index, shl(22, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 22)))\\n            mstore(0x20, Z_22)\\n            _current := keccak256(0, 0x40)\\n            i := 22\\n            break\\n          }\\n\\n          if and(_index, shl(23, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 23)))\\n            mstore(0x20, Z_23)\\n            _current := keccak256(0, 0x40)\\n            i := 23\\n            break\\n          }\\n\\n          if and(_index, shl(24, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 24)))\\n            mstore(0x20, Z_24)\\n            _current := keccak256(0, 0x40)\\n            i := 24\\n            break\\n          }\\n\\n          if and(_index, shl(25, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 25)))\\n            mstore(0x20, Z_25)\\n            _current := keccak256(0, 0x40)\\n            i := 25\\n            break\\n          }\\n\\n          if and(_index, shl(26, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 26)))\\n            mstore(0x20, Z_26)\\n            _current := keccak256(0, 0x40)\\n            i := 26\\n            break\\n          }\\n\\n          if and(_index, shl(27, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 27)))\\n            mstore(0x20, Z_27)\\n            _current := keccak256(0, 0x40)\\n            i := 27\\n            break\\n          }\\n\\n          if and(_index, shl(28, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 28)))\\n            mstore(0x20, Z_28)\\n            _current := keccak256(0, 0x40)\\n            i := 28\\n            break\\n          }\\n\\n          if and(_index, shl(29, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 29)))\\n            mstore(0x20, Z_29)\\n            _current := keccak256(0, 0x40)\\n            i := 29\\n            break\\n          }\\n\\n          if and(_index, shl(30, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 30)))\\n            mstore(0x20, Z_30)\\n            _current := keccak256(0, 0x40)\\n            i := 30\\n            break\\n          }\\n\\n          if and(_index, shl(31, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 31)))\\n            mstore(0x20, Z_31)\\n            _current := keccak256(0, 0x40)\\n            i := 31\\n            break\\n          }\\n\\n          _current := Z_32\\n          i := 32\\n          break\\n        }\\n\\n        if gt(i, 30) {\\n          break\\n        }\\n\\n        {\\n          if lt(i, 1) {\\n            switch and(_index, shl(1, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_1)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 1)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 2) {\\n            switch and(_index, shl(2, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_2)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 2)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 3) {\\n            switch and(_index, shl(3, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_3)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 3)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 4) {\\n            switch and(_index, shl(4, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_4)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 4)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 5) {\\n            switch and(_index, shl(5, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_5)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 5)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 6) {\\n            switch and(_index, shl(6, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_6)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 6)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 7) {\\n            switch and(_index, shl(7, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_7)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 7)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 8) {\\n            switch and(_index, shl(8, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_8)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 8)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 9) {\\n            switch and(_index, shl(9, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_9)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 9)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 10) {\\n            switch and(_index, shl(10, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_10)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 10)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 11) {\\n            switch and(_index, shl(11, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_11)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 11)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 12) {\\n            switch and(_index, shl(12, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_12)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 12)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 13) {\\n            switch and(_index, shl(13, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_13)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 13)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 14) {\\n            switch and(_index, shl(14, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_14)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 14)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 15) {\\n            switch and(_index, shl(15, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_15)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 15)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 16) {\\n            switch and(_index, shl(16, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_16)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 16)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 17) {\\n            switch and(_index, shl(17, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_17)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 17)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 18) {\\n            switch and(_index, shl(18, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_18)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 18)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 19) {\\n            switch and(_index, shl(19, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_19)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 19)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 20) {\\n            switch and(_index, shl(20, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_20)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 20)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 21) {\\n            switch and(_index, shl(21, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_21)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 21)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 22) {\\n            switch and(_index, shl(22, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_22)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 22)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 23) {\\n            switch and(_index, shl(23, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_23)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 23)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 24) {\\n            switch and(_index, shl(24, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_24)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 24)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 25) {\\n            switch and(_index, shl(25, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_25)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 25)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 26) {\\n            switch and(_index, shl(26, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_26)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 26)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 27) {\\n            switch and(_index, shl(27, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_27)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 27)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 28) {\\n            switch and(_index, shl(28, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_28)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 28)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 29) {\\n            switch and(_index, shl(29, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_29)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 29)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 30) {\\n            switch and(_index, shl(30, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_30)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 30)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 31) {\\n            switch and(_index, shl(31, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_31)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 31)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n        }\\n\\n        break\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the merkle root for the given leaf `_item`,\\n   * a merkle branch, and the index of `_item` in the tree.\\n   * @param _item Merkle leaf\\n   * @param _branch Merkle proof\\n   * @param _index Index of `_item` in tree\\n   * @return _current Calculated merkle root\\n   **/\\n  function branchRoot(\\n    bytes32 _item,\\n    bytes32[TREE_DEPTH] memory _branch,\\n    uint256 _index\\n  ) internal pure returns (bytes32 _current) {\\n    assembly {\\n      _current := _item\\n      let BRANCH_DATA_OFFSET := _branch\\n      let f\\n\\n      f := shl(5, and(_index, 1))\\n      mstore(f, _current)\\n      mstore(sub(0x20, f), mload(BRANCH_DATA_OFFSET))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(1, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 1))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(2, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 2))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(3, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 3))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(4, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 4))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(5, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 5))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(6, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 6))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(7, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 7))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(8, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 8))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(9, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 9))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(10, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 10))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(11, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 11))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(12, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 12))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(13, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 13))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(14, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 14))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(15, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 15))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(16, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 16))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(17, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 17))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(18, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 18))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(19, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 19))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(20, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 20))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(21, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 21))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(22, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 22))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(23, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 23))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(24, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 24))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(25, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 25))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(26, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 26))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(27, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 27))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(28, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 28))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(29, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 29))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(30, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 30))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(31, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 31))))\\n      _current := keccak256(0, 0x40)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08c791dbeef6253813d74e2145183501fe7631c13d5ac9d768036f47b66b693e\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/ProposedOwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {Initializable} from \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"./ProposedOwnable.sol\\\";\\n\\nabstract contract ProposedOwnableUpgradeable is Initializable, ProposedOwnable {\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial\\n   */\\n  function __ProposedOwnable_init() internal onlyInitializing {\\n    __ProposedOwnable_init_unchained();\\n  }\\n\\n  function __ProposedOwnable_init_unchained() internal onlyInitializing {\\n    _setOwner(msg.sender);\\n  }\\n\\n  /**\\n   * @dev This empty reserved space is put in place to allow future versions to add new\\n   * variables without shifting down storage in the inheritance chain.\\n   * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n   */\\n  uint256[47] private __GAP;\\n}\\n\",\"keccak256\":\"0x2b064b03a25915e93749905ef3aae516ffaac86b8ba9f126b614425b623bf477\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8076,"contract":"contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":8079,"contract":"contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":49711,"contract":"contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager","label":"_owner","offset":2,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":49964,"contract":"contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager","label":"__GAP","offset":0,"slot":"3","type":"t_array(t_uint256)47_storage"},{"astId":38056,"contract":"contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager","label":"tree","offset":0,"slot":"50","type":"t_struct(Tree)48880_storage"},{"astId":38059,"contract":"contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager","label":"arborist","offset":0,"slot":"83","type":"t_address"},{"astId":38316,"contract":"contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager","label":"__GAP","offset":0,"slot":"84","type":"t_array(t_uint256)48_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_bytes32)32_storage":{"base":"t_bytes32","encoding":"inplace","label":"bytes32[32]","numberOfBytes":"1024"},"t_array(t_uint256)47_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[47]","numberOfBytes":"1504"},"t_array(t_uint256)48_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[48]","numberOfBytes":"1536"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_struct(Tree)48880_storage":{"encoding":"inplace","label":"struct MerkleLib.Tree","members":[{"astId":48877,"contract":"contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager","label":"branch","offset":0,"slot":"0","type":"t_array(t_bytes32)32_storage"},{"astId":48879,"contract":"contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager","label":"count","offset":0,"slot":"32","type":"t_uint256"}],"numberOfBytes":"1056"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"arborist()":{"notice":"The arborist contract that has permission to write to this tree."},"branch()":{"notice":"Returns the current branch."},"count()":{"notice":"Returns the number of inserted leaves in the tree (current index)."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"insert(bytes32)":{"notice":"Inserts the given leaf into the tree."},"insert(bytes32[])":{"notice":"Inserts the given leaves into the tree."},"owner()":{"notice":"Returns the address of the current owner."},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Remove ability to renounce ownership"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"root()":{"notice":"Calculates and returns the current root."},"rootAndCount()":{"notice":"Convenience getter: returns the root and count."},"setArborist(address)":{"notice":"Method for the current arborist to assign write permissions to a new arborist."},"tree()":{"notice":"Core data structure with which this contract is tasked with keeping custody. Writable only by the designated arborist."}},"notice":"Contains a Merkle tree instance and exposes read/write functions for the tree.","version":1}}},"contracts/messaging/RootManager.sol":{"RootManager":{"abi":[{"inputs":[{"internalType":"uint256","name":"_delayBlocks","type":"uint256"},{"internalType":"address","name":"_merkle","type":"address"},{"internalType":"address","name":"_watcherManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":false,"internalType":"address","name":"connector","type":"address"},{"indexed":false,"internalType":"uint32[]","name":"domains","type":"uint32[]"},{"indexed":false,"internalType":"address[]","name":"connectors","type":"address[]"}],"name":"ConnectorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":false,"internalType":"address","name":"connector","type":"address"},{"indexed":false,"internalType":"uint32[]","name":"domains","type":"uint32[]"},{"indexed":false,"internalType":"address[]","name":"connectors","type":"address[]"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"ConnectorRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"updated","type":"uint256"}],"name":"DelayBlocksUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":false,"internalType":"address","name":"connector","type":"address"}],"name":"DomainAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"domain","type":"uint32"}],"name":"DomainRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":false,"internalType":"address","name":"connector","type":"address"}],"name":"PropagateFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"fraudulentRoot","type":"bytes32"}],"name":"RootDiscarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"aggregateRoot","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"domainsHash","type":"bytes32"}],"name":"RootPropagated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":false,"internalType":"bytes32","name":"receivedRoot","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"queueIndex","type":"uint256"}],"name":"RootReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"aggregateRoot","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"},{"indexed":false,"internalType":"bytes32[]","name":"aggregatedMessageRoots","type":"bytes32[]"}],"name":"RootsAggregated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"watcherManager","type":"address"}],"name":"WatcherManagerChanged","type":"event"},{"inputs":[],"name":"DEQUEUE_MAX","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_DOMAINS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MERKLE","outputs":[{"internalType":"contract MerkleTreeManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"address","name":"_connector","type":"address"}],"name":"addConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"bytes32","name":"_inbound","type":"bytes32"}],"name":"aggregate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"connectors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"connectorsHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dequeue","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"discardRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"domains","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"domainsHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"}],"name":"getConnectorForDomain","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"}],"name":"getDomainIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingInboundRootsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"}],"name":"isDomainSupported","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPropagatedRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingInboundRoots","outputs":[{"internalType":"uint128","name":"first","type":"uint128"},{"internalType":"uint128","name":"last","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_connectors","type":"address[]"},{"internalType":"uint256[]","name":"_fees","type":"uint256[]"},{"internalType":"bytes[]","name":"_encodedData","type":"bytes[]"}],"name":"propagate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"}],"name":"removeConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_delayBlocks","type":"uint256"}],"name":"setDelayBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_watcherManager","type":"address"}],"name":"setWatcherManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_connectors","type":"address[]"}],"name":"validateConnectors","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_domains","type":"uint32[]"},{"internalType":"address[]","name":"_connectors","type":"address[]"}],"name":"validateDomains","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"watcherManager","outputs":[{"internalType":"contract WatcherManager","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"addConnector(uint32,address)":{"details":"Only owner can add a new connector. Address should be the connector on L1.Cannot add address(0) to avoid duplicated domain in array and reduce gas fee while propagating.","params":{"_connector":"Address of the hub connector.","_domain":"The target spoke domain of the given connector."}},"aggregate(uint32,bytes32)":{"details":"The aggregate tree's root, which will include this inbound root, will be propagated to all spoke domains (via `propagate`) on a regular basis assuming the verification period is surpassed without dispute.","params":{"_domain":"The source domain of the given root.","_inbound":"The inbound root coming from the given domain."}},"constructor":{"params":{"_delayBlocks":"The delay for the validation period for incoming messages in blocks.","_merkle":"The address of the MerkleTreeManager on this domain.","_watcherManager":"The address of the WatcherManager on this domain."}},"dequeue()":{"details":"Will dequeue a fixed maximum amount of roots to prevent out of gas errors. As such, this method is public and separate from `propagate` so we can curtail an overloaded queue as needed.Reverts if no verified inbound roots are found.","returns":{"_0":"bytes32 The new aggregate root.","_1":"uint256 The updated count (number of leaves)."}},"discardRoot(bytes32)":{"details":"The given root does NOT have to currently be in the queue. It isn't removed from the queue directly, but instead is filtered out when dequeuing is done for the sake of aggregation.Can only be called by the owner when the protocol is paused.","params":{"_root":"The root to be discarded."}},"getConnectorForDomain(uint32)":{"details":"Inefficient, should only be used by caller if they have no index reference.","params":{"_domain":"The domain for which to get the hub connector address."}},"getDomainIndex(uint32)":{"details":"Reverts if domain is not supported.","params":{"_domain":"The domain for which to get the index value."}},"isDomainSupported(uint32)":{"params":{"_domain":"Domain to check."}},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"propagate(address[],uint256[],bytes[])":{"details":"Should be called by relayers at a regular interval.","params":{"_connectors":"Array of connectors: should match exactly the array of `connectors` in storage; used here to reduce gas costs, and keep them static regardless of number of supported domains.","_encodedData":"Array of encodedData: extra params for each AMB if required","_fees":"Array of fees in native token for an AMB if required"}},"removeConnector(uint32)":{"details":"Only watcher can remove a connector. TODO: Could add a metatx-able `removeConnectorWithSig` if we want to use relayers?","params":{"_domain":"The spoke domain of the target connector we want to remove."}},"renounceOwnership()":{"details":"Renounce ownership should be impossible as long as watchers can freely remove connectors and only the owner can add them back"},"validateConnectors(address[])":{"details":"Reverts if domains or connectors do not match, including ordering.","params":{"_connectors":"The given connectors array to check."}},"validateDomains(uint32[],address[])":{"details":"Reverts if domains or connectors do not match, including ordering.","params":{"_connectors":"The given connectors array to check.","_domains":"The given domains array to check."}}},"stateVariables":{"pendingInboundRoots":{"details":"Watchers should be able to watch this queue for fraudulent messages and pause this contract if fraud is detected."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_10599":{"entryPoint":null,"id":10599,"parameterSlots":0,"returnSlots":0},"@_38493":{"entryPoint":null,"id":38493,"parameterSlots":3,"returnSlots":0},"@_38838":{"entryPoint":null,"id":38838,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":219,"id":49908,"parameterSlots":1,"returnSlots":0},"@initialize_49259":{"entryPoint":320,"id":49259,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":326,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_uint256t_addresst_address_fromMemory":{"entryPoint":355,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:893:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"74:117:181","statements":[{"nodeType":"YulAssignment","src":"84:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"99:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"93:5:181"},"nodeType":"YulFunctionCall","src":"93:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"84:5:181"}]},{"body":{"nodeType":"YulBlock","src":"169:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"178:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"181:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"171:6:181"},"nodeType":"YulFunctionCall","src":"171:12:181"},"nodeType":"YulExpressionStatement","src":"171:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"128:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"139:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"154:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"150:3:181"},"nodeType":"YulFunctionCall","src":"150:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"163:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"146:3:181"},"nodeType":"YulFunctionCall","src":"146:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"135:3:181"},"nodeType":"YulFunctionCall","src":"135:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"125:2:181"},"nodeType":"YulFunctionCall","src":"125:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"118:6:181"},"nodeType":"YulFunctionCall","src":"118:50:181"},"nodeType":"YulIf","src":"115:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"53:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"64:5:181","type":""}],"src":"14:177:181"},{"body":{"nodeType":"YulBlock","src":"311:239:181","statements":[{"body":{"nodeType":"YulBlock","src":"357:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"366:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"369:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"359:6:181"},"nodeType":"YulFunctionCall","src":"359:12:181"},"nodeType":"YulExpressionStatement","src":"359:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"332:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"341:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"328:3:181"},"nodeType":"YulFunctionCall","src":"328:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"353:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"324:3:181"},"nodeType":"YulFunctionCall","src":"324:32:181"},"nodeType":"YulIf","src":"321:52:181"},{"nodeType":"YulAssignment","src":"382:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"398:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"392:5:181"},"nodeType":"YulFunctionCall","src":"392:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"382:6:181"}]},{"nodeType":"YulAssignment","src":"417:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"461:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"472:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"457:3:181"},"nodeType":"YulFunctionCall","src":"457:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"427:29:181"},"nodeType":"YulFunctionCall","src":"427:49:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"417:6:181"}]},{"nodeType":"YulAssignment","src":"485:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"529:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"540:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"525:3:181"},"nodeType":"YulFunctionCall","src":"525:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"495:29:181"},"nodeType":"YulFunctionCall","src":"495:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"485:6:181"}]}]},"name":"abi_decode_tuple_t_uint256t_addresst_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"261:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"272:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"284:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"292:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"300:6:181","type":""}],"src":"196:354:181"},{"body":{"nodeType":"YulBlock","src":"729:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"746:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"757:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"739:6:181"},"nodeType":"YulFunctionCall","src":"739:21:181"},"nodeType":"YulExpressionStatement","src":"739:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"780:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"791:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"776:3:181"},"nodeType":"YulFunctionCall","src":"776:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"796:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"769:6:181"},"nodeType":"YulFunctionCall","src":"769:30:181"},"nodeType":"YulExpressionStatement","src":"769:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"819:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"830:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"815:3:181"},"nodeType":"YulFunctionCall","src":"815:18:181"},{"hexValue":"217a65726f206d65726b6c65","kind":"string","nodeType":"YulLiteral","src":"835:14:181","type":"","value":"!zero merkle"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"808:6:181"},"nodeType":"YulFunctionCall","src":"808:42:181"},"nodeType":"YulExpressionStatement","src":"808:42:181"},{"nodeType":"YulAssignment","src":"859:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"871:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"882:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"867:3:181"},"nodeType":"YulFunctionCall","src":"867:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"859:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"706:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"720:4:181","type":""}],"src":"555:336:181"}]},"contents":"{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint256t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!zero merkle\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a06040523480156200001157600080fd5b5060405162002b5c38038062002b5c833981016040819052620000349162000163565b600380546001600160a81b0319166101006001600160a01b038416021790556200005e33620000db565b6001600160a01b038216620000a85760405162461bcd60e51b815260206004820152600c60248201526b217a65726f206d65726b6c6560a01b604482015260640160405180910390fd5b6001600160a01b0382166080526009839055620000d2600a62000140602090811b6200142317901c565b505050620001a4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60019055565b80516001600160a01b03811681146200015e57600080fd5b919050565b6000806000606084860312156200017957600080fd5b835192506200018b6020850162000146565b91506200019b6040850162000146565b90509250925092565b60805161298e620001ce6000396000818161052c01528181610e540152610ee1015261298e6000f3fe60806040526004361061020f5760003560e01c80638456cb5911610118578063b1f8100d116100a0578063d1851c921161006f578063d1851c9214610621578063d232c2201461063f578063d2a3cc711461065e578063db0f01691461067e578063e6f1208d1461069e57600080fd5b8063b1f8100d146105b6578063b904670f146105d6578063c5b350df146105f6578063c8ef89de1461060b57600080fd5b8063957908d1116100e7578063957908d1146104f0578063a01892a51461051a578063a792c29b1461054e578063aa0d60a314610573578063ad9c0c2e146105a057600080fd5b80638456cb59146104885780638da5cb5b1461049d5780638e7d93fa146104bb578063909907cb146104db57600080fd5b8063412e12db1161019b5780636a42b8f81161016a5780636a42b8f8146103dc578063715018a6146103f25780637bc24d99146104075780637d434e911461041d5780637d5343081461043d57600080fd5b8063412e12db14610366578063498c2c2e146103795780635c975abb1461038f57806366cf8fab146103a757600080fd5b806324ec5d05116101e257806324ec5d05146102b757806327186c6a146102fc5780633c4baaf81461031c5780633cf52ffb1461033c5780633f4ba83a1461035157600080fd5b80630165bc81146102145780630f8ef4ee1461023d57806313ede1a11461025f5780631eeaabea14610297575b600080fd5b34801561022057600080fd5b5061022a600e5481565b6040519081526020015b60405180910390f35b34801561024957600080fd5b5061025d61025836600461204e565b6106be565b005b34801561026b57600080fd5b5061027f61027a36600461204e565b610733565b6040516001600160a01b039091168152602001610234565b3480156102a357600080fd5b5061025d6102b236600461204e565b61075d565b3480156102c357600080fd5b506102ec6102d2366004612080565b63ffffffff16600090815260086020526040902054151590565b6040519015158152602001610234565b34801561030857600080fd5b5061025d6103173660046120e7565b61080f565b34801561032857600080fd5b5061022a610337366004612080565b61087a565b34801561034857600080fd5b5060025461022a565b34801561035d57600080fd5b5061025d6108de565b61025d610374366004612170565b61091b565b34801561038557600080fd5b5061022a60075481565b34801561039b57600080fd5b5060035460ff166102ec565b3480156103b357600080fd5b506103c76103c236600461204e565b610c08565b60405163ffffffff9091168152602001610234565b3480156103e857600080fd5b5062093a8061022a565b3480156103fe57600080fd5b5061025d610c42565b34801561041357600080fd5b5061022a60055481565b34801561042957600080fd5b5061027f610438366004612080565b610c6d565b34801561044957600080fd5b50600a54610468906001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610234565b34801561049457600080fd5b5061025d610ca5565b3480156104a957600080fd5b506000546001600160a01b031661027f565b3480156104c757600080fd5b5061025d6104d63660046122e3565b610d5c565b3480156104e757600080fd5b5061022a610e17565b3480156104fc57600080fd5b50610505610e28565b60408051928352602083019190915201610234565b34801561052657600080fd5b5061027f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561055a57600080fd5b5060035461027f9061010090046001600160a01b031681565b34801561057f57600080fd5b50610588606481565b6040516001600160801b039091168152602001610234565b3480156105ac57600080fd5b5061022a60095481565b3480156105c257600080fd5b5061025d6105d1366004612324565b610fb6565b3480156105e257600080fd5b5061025d6105f136600461233f565b611057565b34801561060257600080fd5b5061025d6110cf565b34801561061757600080fd5b5061022a6101f481565b34801561062d57600080fd5b506001546001600160a01b031661027f565b34801561064b57600080fd5b506000546001600160a01b0316156102ec565b34801561066a57600080fd5b5061025d610679366004612324565b61113f565b34801561068a57600080fd5b5061025d610699366004612372565b611223565b3480156106aa57600080fd5b5061025d6106b9366004612080565b611336565b6000546001600160a01b031633146106e9576040516311a8a1bb60e31b815260040160405180910390fd5b6106f1611429565b6106fc600a82611472565b6040518181527fd2a17a10ab346c94fae909b2fbfa0fedaf30d08983e74dcc0a92be2c40c437f9906020015b60405180910390a150565b6006818154811061074357600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610788576040516311a8a1bb60e31b815260040160405180910390fd5b60095481036107cd5760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b6009546040805183815260208101929092527fef322fd61cb3d8514326f0b28140a92a29cd10996ad80d0671e43d2483464c1d910160405180910390a1600955565b60075482826040516020016108259291906123de565b60405160208183030381529060405280519060200120146108765760405162461bcd60e51b815260206004820152600b60248201526a21636f6e6e6563746f727360a81b60448201526064016107c4565b5050565b63ffffffff81166000908152600860205260408120548082036108cc5760405162461bcd60e51b815260206004820152600a602482015269085cdd5c1c1bdc9d195960b21b60448201526064016107c4565b6108d7600182612440565b9392505050565b6000546001600160a01b03163314610909576040516311a8a1bb60e31b815260040160405180910390fd5b610911611429565b6109196114e3565b565b610923611535565b61092d858561080f565b83828114801561093d5750808251145b61097b5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206c656e6774687360881b60448201526064016107c4565b600080610986610e28565b91509150600e5482036109cc5760405162461bcd60e51b815260206004820152600e60248201526d1c99591d5b99185b9d081c9bdbdd60921b60448201526064016107c4565b600e8290553460005b848163ffffffff161015610bb95789898263ffffffff168181106109fb576109fb612453565b9050602002016020810190610a109190612324565b6001600160a01b03166348e6fa2389898463ffffffff16818110610a3657610a36612453565b9050602002013586604051602001610a5091815260200190565b604051602081830303815290604052898563ffffffff1681518110610a7757610a77612453565b60200260200101516040518463ffffffff1660e01b8152600401610a9c9291906124af565b6000604051808303818588803b158015610ab557600080fd5b505af193505050508015610ac7575060015b610b84577f51f2ef0ced5ef0ec14268d79d48589f9ccff35b2b0baf5059a90166caffea7a760048263ffffffff1681548110610b0557610b05612453565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff168b8b8463ffffffff16818110610b4357610b43612453565b9050602002016020810190610b589190612324565b6040805163ffffffff90931683526001600160a01b0390911660208301520160405180910390a1610bb1565b87878263ffffffff16818110610b9c57610b9c612453565b9050602002013582610bae9190612440565b91505b6001016109d5565b50600554604080518581526020810185905280820192909252517f3fcedb4669de80ca7de6e18b7b25cc8e4f6861796f1db0f2409fcdf0d6901f569181900360600190a1505050505050505050565b60048181548110610c1857600080fd5b9060005260206000209060089182820401919006600402915054906101000a900463ffffffff1681565b6000546001600160a01b03163314610919576040516311a8a1bb60e31b815260040160405180910390fd5b60006006610c7a8361087a565b81548110610c8a57610c8a612453565b6000918252602090912001546001600160a01b031692915050565b6003546040516384785ecd60e01b81523360048201526101009091046001600160a01b0316906384785ecd90602401602060405180830381865afa158015610cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1591906124dd565b610d4c5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b60448201526064016107c4565b610d54611535565b61091961157b565b610d64611535565b8133610d6f82610c6d565b6001600160a01b031614610db25760405162461bcd60e51b815260206004820152600a60248201526910b1b7b73732b1ba37b960b11b60448201526064016107c4565b6000610dbf600a846115b8565b6040805163ffffffff87168152602081018690526001600160801b0383168183015290519192507f1daad24ee1bf0bcc72ab681d29df86ec2794361b223da31f148b9f826cd135a8919081900360600190a150505050565b6000610e23600a61162a565b905090565b600080610e33611535565b600954600090610e4790600a906064611654565b90508051600003610edc577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9b0a6de6040518163ffffffff1660e01b81526004016040805180830381865afa158015610eaf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed391906124ff565b92509250509091565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166334a55ee6846040518263ffffffff1660e01b8152600401610f2b919061255e565b60408051808303816000875af1158015610f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6d91906124ff565b915091507f41b13c36968d02a1fd71e0f5db55ba2fb043c215a4d1e17633293ff273a77cd4828285604051610fa493929190612571565b60405180910390a19093509150509091565b6000546001600160a01b03163314610fe1576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610fff575060025415155b1561101d576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361104b57604051634a2fb73f60e11b815260040160405180910390fd5b611054816119d6565b50565b6000546001600160a01b03163314611082576040516311a8a1bb60e31b815260040160405180910390fd5b61108c8282611a24565b7f95ef69787290b89c35a092c89db1b283b43724d01263e683cfb560c758cdbe708282600460066040516110c39493929190612756565b60405180910390a15050565b6001546001600160a01b031633146110fa576040516311a7f27160e11b815260040160405180910390fd5b62093a806002544261110c9190612440565b1161112a576040516324e0285f60e21b815260040160405180910390fd5b600154610919906001600160a01b0316611c10565b6000546001600160a01b0316331461116a576040516311a8a1bb60e31b815260040160405180910390fd5b6003546001600160a01b036101009091048116908216036111cd5760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e6167657200000000000000000060448201526064016107c4565b60038054610100600160a81b0319166101006001600160a01b038416908102919091179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610728565b8281146112655760405162461bcd60e51b815260206004820152601060248201526f042dac2e8c6d0d2dcce40d8cadccee8d60831b60448201526064016107c4565b600554848460405160200161127b9291906127a3565b60405160208183030381529060405280519060200120146112c95760405162461bcd60e51b815260206004820152600860248201526721646f6d61696e7360c01b60448201526064016107c4565b60075482826040516020016112df9291906123de565b60405160208183030381529060405280519060200120146113305760405162461bcd60e51b815260206004820152600b60248201526a21636f6e6e6563746f727360a81b60448201526064016107c4565b50505050565b6003546040516384785ecd60e01b81523360048201526101009091046001600160a01b0316906384785ecd90602401602060405180830381865afa158015611382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a691906124dd565b6113dd5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b60448201526064016107c4565b60006113e882611c75565b90507f6a1097f391a37dc63e0860e64ec34442971eeed2fda4d1a90141fa9ce25eb7eb828260046006336040516110c39594939291906127e1565b60019055565b60035460ff166109195760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107c4565b600081815260038301602052604090205460ff16156114c55760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c995b5bdd9959608a1b60448201526064016107c4565b6000908152600390910160205260409020805460ff19166001179055565b6114eb611429565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60035460ff16156109195760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107c4565b611583611535565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586115183390565b8154600090439084906010906115dd90600160801b90046001600160801b0316612837565b82546001600160801b038083166101009490940a84810291021990911617909255600090815260018601602090815260408083209690965560029096019095529290932092909255919050565b80546000906001600160801b03600160801b82048116911661164c8282611eec565b949350505050565b82546060906001600160801b0380821691600160801b9004168181101561168d57505060408051600081526020810190915290506108d7565b816001600160801b03166000036116d65760405162461bcd60e51b815260206004820152600d60248201526c1c5d595d5948085a5b9a5d09d9609a1b60448201526064016107c4565b6000846001600160801b0316116117215760405162461bcd60e51b815260206004820152600f60248201526e042c2c6c6cae0e8c2c4d8ca40dac2f608b1b60448201526064016107c4565b6000600161172f868561285d565b6117399190612884565b9050806001600160801b0316826001600160801b03161115611759578091505b5060006117668643612440565b905060005b826001600160801b0316846001600160801b0316116117bd576001600160801b03831660009081526002890160205260409020548281116117b05760019150506117bd565b506000199092019161176b565b806117dd57505060408051600081526020810190915292506108d7915050565b6000846117eb85600161285d565b6117f59190612884565b6001600160801b031667ffffffffffffffff81111561181657611816612129565b60405190808252806020026020018201604052801561183f578160200160208202803683370190505b5090506000805b856001600160801b0316876001600160801b0316116118fb576001600160801b038716600090815260018c01602090815260408083205480845260038f019092529091205460ff166118bc57808484815181106118a5576118a5612453565b6020026020010181815250508260010192506118c3565b8160010191505b506001600160801b038716600090815260018c81016020908152604080842084905560028f0190915282209190915590960195611846565b8a546fffffffffffffffffffffffffffffffff19166001600160801b038816178b55600081900361193557829750505050505050506108d7565b60008267ffffffffffffffff81111561195057611950612129565b604051908082528060200260200182016040528015611979578160200160208202803683370190505b50905060005b838110156119c65784818151811061199957611999612453565b60200260200101518282815181106119b3576119b3612453565b602090810291909101015260010161197f565b5097506108d79650505050505050565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b63ffffffff821660009081526008602052604090205415611a775760405162461bcd60e51b815260206004820152600d60248201526c646f6d61696e2065786973747360981b60448201526064016107c4565b6001600160a01b038116611aba5760405162461bcd60e51b815260206004820152600a60248201526910b1b7b73732b1ba37b960b11b60448201526064016107c4565b6004546101f411611b0d5760405162461bcd60e51b815260206004820152601960248201527f446f6d61696e496e64657865722061742063617061636974790000000000000060448201526064016107c4565b600480546001818101835560088083047f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01805463ffffffff808916600790961687026101000a8681029102199091161790556006805492830190557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180546001600160a01b0386166001600160a01b03199091161790559154600091825260209290925260409020819055611bc4611f16565b6040805163ffffffff851681526001600160a01b03841660208201527f4fc27362d8ab3086efd93b7880e99ac02e906d0ba9b71ca90239ade53090f703910160405180910390a1505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600080611c818361087a565b9050600060068281548110611c9857611c98612453565b6000918252602090912001546001600160a01b0316905080611cf05760405162461bcd60e51b8152602060048201526011602482015270636f6e6e6563746f72202165786973747360781b60448201526064016107c4565b600454600090611d0290600190612440565b905080831015611e1b57600060048281548110611d2157611d21612453565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1690508060048581548110611d5d57611d5d612453565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555060068281548110611da357611da3612453565b600091825260209091200154600680546001600160a01b039092169186908110611dcf57611dcf612453565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055611e038460016128a4565b63ffffffff9091166000908152600860205260409020555b6004805480611e2c57611e2c6128b7565b600082815260209020600860001990920191820401805463ffffffff600460078516026101000a021916905590556006805480611e6b57611e6b6128b7565b60008281526020808220830160001990810180546001600160a01b031916905590920190925563ffffffff87168252600890526040812055611eab611f16565b60405163ffffffff861681527f7e560b48a4bba1688eb45afd6712a11fa42b9abbb48a8e14e2f15e467ab420e49060200160405180910390a1509392505050565b600081611efa84600161285d565b611f049190612884565b6001600160801b031690505b92915050565b60006004805480602002602001604051908101604052809291908181526020018280548015611f9057602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611f535790505b5050505050905060006006805480602002602001604051908101604052809291908181526020018280548015611fef57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611fd1575b505050505090508160405160200161200791906128cd565b60408051601f1981840301815290829052805160209182012060055561202f91839101612917565b60408051601f1981840301815291905280516020909101206007555050565b60006020828403121561206057600080fd5b5035919050565b803563ffffffff8116811461207b57600080fd5b919050565b60006020828403121561209257600080fd5b6108d782612067565b60008083601f8401126120ad57600080fd5b50813567ffffffffffffffff8111156120c557600080fd5b6020830191508360208260051b85010111156120e057600080fd5b9250929050565b600080602083850312156120fa57600080fd5b823567ffffffffffffffff81111561211157600080fd5b61211d8582860161209b565b90969095509350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561216857612168612129565b604052919050565b60008060008060006060868803121561218857600080fd5b67ffffffffffffffff808735111561219f57600080fd5b6121ac888835890161209b565b90965094506020870135818111156121c357600080fd5b6121cf89828a0161209b565b9095509350506040870135818111156121e757600080fd5b8701601f810189136121f857600080fd5b80358281111561220a5761220a612129565b61221960208260051b0161213f565b8082825260208201915060208360051b85010192508b83111561223b57600080fd5b602084015b838110156122d057858135111561225657600080fd5b803585018d603f82011261226957600080fd5b60208101358781111561227e5761227e612129565b612291601f8201601f191660200161213f565b8181528f60408385010111156122a657600080fd5b81604084016020830137600060208383010152808652505050602083019250602081019050612240565b5080955050505050509295509295909350565b600080604083850312156122f657600080fd5b6122ff83612067565b946020939093013593505050565b80356001600160a01b038116811461207b57600080fd5b60006020828403121561233657600080fd5b6108d78261230d565b6000806040838503121561235257600080fd5b61235b83612067565b91506123696020840161230d565b90509250929050565b6000806000806040858703121561238857600080fd5b843567ffffffffffffffff808211156123a057600080fd5b6123ac8883890161209b565b909650945060208701359150808211156123c557600080fd5b506123d28782880161209b565b95989497509550505050565b60208082528181018390526000908460408401835b8681101561241f576001600160a01b0361240c8461230d565b16825291830191908301906001016123f3565b509695505050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611f1057611f1061242a565b634e487b7160e01b600052603260045260246000fd5b6000815180845260005b8181101561248f57602081850181015186830182015201612473565b506000602082860101526020601f19601f83011685010191505092915050565b6040815260006124c26040830185612469565b82810360208401526124d48185612469565b95945050505050565b6000602082840312156124ef57600080fd5b815180151581146108d757600080fd5b6000806040838503121561251257600080fd5b505080516020909101519092909150565b600081518084526020808501945080840160005b8381101561255357815187529582019590820190600101612537565b509495945050505050565b6020815260006108d76020830184612523565b8381528260208201526060604082015260006124d46060830184612523565b805480835260008281526020808220940193909190825b8260078201101561261f57815463ffffffff8082168852602082811c821690890152604082811c821690890152606082811c821690890152608082811c82169089015260a082811c82169089015260c082811c9091169088015260e090811c90870152610100909501946001909101906008016125a7565b9054908281101561263d5763ffffffff821686526020909501946001015b8281101561265d57602082901c63ffffffff168652602095909501946001015b8281101561267c5763ffffffff604083901c1686526020909501946001015b8281101561269b5763ffffffff606083901c1686526020909501946001015b828110156126ba5763ffffffff608083901c1686526020909501946001015b828110156126d95763ffffffff60a083901c1686526020909501946001015b828110156126f85763ffffffff60c083901c1686526020909501946001015b8281101561270e5760e082901c86526020860195505b5093949350505050565b6000815480845260208085019450836000528060002060005b838110156125535781546001600160a01b031687529582019560019182019101612731565b63ffffffff851681526001600160a01b038416602082015260806040820181905260009061278690830185612590565b82810360608401526127988185612718565b979650505050505050565b60208082528181018390526000908460408401835b8681101561241f5763ffffffff6127ce84612067565b16825291830191908301906001016127b8565b63ffffffff86168152600060018060a01b03808716602084015260a0604084015261280f60a0840187612590565b83810360608501526128218187612718565b9250508084166080840152509695505050505050565b60006001600160801b038083168181036128535761285361242a565b6001019392505050565b6001600160801b0381811683821601908082111561287d5761287d61242a565b5092915050565b6001600160801b0382811682821603908082111561287d5761287d61242a565b80820180821115611f1057611f1061242a565b634e487b7160e01b600052603160045260246000fd5b6020808252825182820181905260009190848201906040850190845b8181101561290b57835163ffffffff16835292840192918401916001016128e9565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561290b5783516001600160a01b03168352928401929184019160010161293356fea2646970667358221220a8c58850922a44dbb0897daa160e573a2789f40adfc549f9fa8345ff5c1ba6e864736f6c63430008110033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2B5C CODESIZE SUB DUP1 PUSH3 0x2B5C DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x163 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND PUSH2 0x100 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND MUL OR SWAP1 SSTORE PUSH3 0x5E CALLER PUSH3 0xDB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xA8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x217A65726F206D65726B6C65 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x80 MSTORE PUSH1 0x9 DUP4 SWAP1 SSTORE PUSH3 0xD2 PUSH1 0xA PUSH3 0x140 PUSH1 0x20 SWAP1 DUP2 SHL PUSH3 0x1423 OR SWAP1 SHR JUMP JUMPDEST POP POP POP PUSH3 0x1A4 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 SWAP1 SSTORE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x15E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x179 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH3 0x18B PUSH1 0x20 DUP6 ADD PUSH3 0x146 JUMP JUMPDEST SWAP2 POP PUSH3 0x19B PUSH1 0x40 DUP6 ADD PUSH3 0x146 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x298E PUSH3 0x1CE PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x52C ADD MSTORE DUP2 DUP2 PUSH2 0xE54 ADD MSTORE PUSH2 0xEE1 ADD MSTORE PUSH2 0x298E PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x20F JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x118 JUMPI DUP1 PUSH4 0xB1F8100D GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xD1851C92 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x621 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x63F JUMPI DUP1 PUSH4 0xD2A3CC71 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0xDB0F0169 EQ PUSH2 0x67E JUMPI DUP1 PUSH4 0xE6F1208D EQ PUSH2 0x69E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x5B6 JUMPI DUP1 PUSH4 0xB904670F EQ PUSH2 0x5D6 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x5F6 JUMPI DUP1 PUSH4 0xC8EF89DE EQ PUSH2 0x60B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x957908D1 GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0x957908D1 EQ PUSH2 0x4F0 JUMPI DUP1 PUSH4 0xA01892A5 EQ PUSH2 0x51A JUMPI DUP1 PUSH4 0xA792C29B EQ PUSH2 0x54E JUMPI DUP1 PUSH4 0xAA0D60A3 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xAD9C0C2E EQ PUSH2 0x5A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x488 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x49D JUMPI DUP1 PUSH4 0x8E7D93FA EQ PUSH2 0x4BB JUMPI DUP1 PUSH4 0x909907CB EQ PUSH2 0x4DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x412E12DB GT PUSH2 0x19B JUMPI DUP1 PUSH4 0x6A42B8F8 GT PUSH2 0x16A JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x3DC JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x3F2 JUMPI DUP1 PUSH4 0x7BC24D99 EQ PUSH2 0x407 JUMPI DUP1 PUSH4 0x7D434E91 EQ PUSH2 0x41D JUMPI DUP1 PUSH4 0x7D534308 EQ PUSH2 0x43D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x412E12DB EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0x498C2C2E EQ PUSH2 0x379 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x38F JUMPI DUP1 PUSH4 0x66CF8FAB EQ PUSH2 0x3A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x24EC5D05 GT PUSH2 0x1E2 JUMPI DUP1 PUSH4 0x24EC5D05 EQ PUSH2 0x2B7 JUMPI DUP1 PUSH4 0x27186C6A EQ PUSH2 0x2FC JUMPI DUP1 PUSH4 0x3C4BAAF8 EQ PUSH2 0x31C JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x33C JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x165BC81 EQ PUSH2 0x214 JUMPI DUP1 PUSH4 0xF8EF4EE EQ PUSH2 0x23D JUMPI DUP1 PUSH4 0x13EDE1A1 EQ PUSH2 0x25F JUMPI DUP1 PUSH4 0x1EEAABEA EQ PUSH2 0x297 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH1 0xE SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x258 CALLDATASIZE PUSH1 0x4 PUSH2 0x204E JUMP JUMPDEST PUSH2 0x6BE JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27F PUSH2 0x27A CALLDATASIZE PUSH1 0x4 PUSH2 0x204E JUMP JUMPDEST PUSH2 0x733 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x2B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x204E JUMP JUMPDEST PUSH2 0x75D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EC PUSH2 0x2D2 CALLDATASIZE PUSH1 0x4 PUSH2 0x2080 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x308 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x317 CALLDATASIZE PUSH1 0x4 PUSH2 0x20E7 JUMP JUMPDEST PUSH2 0x80F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x328 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x337 CALLDATASIZE PUSH1 0x4 PUSH2 0x2080 JUMP JUMPDEST PUSH2 0x87A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x22A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x8DE JUMP JUMPDEST PUSH2 0x25D PUSH2 0x374 CALLDATASIZE PUSH1 0x4 PUSH2 0x2170 JUMP JUMPDEST PUSH2 0x91B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x385 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x39B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0x2EC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3C7 PUSH2 0x3C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x204E JUMP JUMPDEST PUSH2 0xC08 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x22A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0xC42 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x413 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x429 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27F PUSH2 0x438 CALLDATASIZE PUSH1 0x4 PUSH2 0x2080 JUMP JUMPDEST PUSH2 0xC6D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x449 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xA SLOAD PUSH2 0x468 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV AND DUP3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0xCA5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x27F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x4D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x22E3 JUMP JUMPDEST PUSH2 0xD5C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0xE17 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x505 PUSH2 0xE28 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x526 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27F PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x55A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x27F SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x57F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x588 PUSH1 0x64 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x5D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x2324 JUMP JUMPDEST PUSH2 0xFB6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x5F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x233F JUMP JUMPDEST PUSH2 0x1057 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x602 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x10CF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x617 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x1F4 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x62D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x27F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x64B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x2EC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x66A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x679 CALLDATASIZE PUSH1 0x4 PUSH2 0x2324 JUMP JUMPDEST PUSH2 0x113F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x68A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x699 CALLDATASIZE PUSH1 0x4 PUSH2 0x2372 JUMP JUMPDEST PUSH2 0x1223 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x6B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x2080 JUMP JUMPDEST PUSH2 0x1336 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x6E9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6F1 PUSH2 0x1429 JUMP JUMPDEST PUSH2 0x6FC PUSH1 0xA DUP3 PUSH2 0x1472 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD2A17A10AB346C94FAE909B2FBFA0FEDAF30D08983E74DCC0A92BE2C40C437F9 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x6 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x743 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x788 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x9 SLOAD DUP2 SUB PUSH2 0x7CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2164656C6179426C6F636B73 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH32 0xEF322FD61CB3D8514326F0B28140A92A29CD10996AD80D0671E43D2483464C1D SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x9 SSTORE JUMP JUMPDEST PUSH1 0x7 SLOAD DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x825 SWAP3 SWAP2 SWAP1 PUSH2 0x23DE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ PUSH2 0x876 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x21636F6E6E6563746F7273 PUSH1 0xA8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 DUP3 SUB PUSH2 0x8CC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85CDD5C1C1BDC9D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH2 0x8D7 PUSH1 0x1 DUP3 PUSH2 0x2440 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x909 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x911 PUSH2 0x1429 JUMP JUMPDEST PUSH2 0x919 PUSH2 0x14E3 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x923 PUSH2 0x1535 JUMP JUMPDEST PUSH2 0x92D DUP6 DUP6 PUSH2 0x80F JUMP JUMPDEST DUP4 DUP3 DUP2 EQ DUP1 ISZERO PUSH2 0x93D JUMPI POP DUP1 DUP3 MLOAD EQ JUMPDEST PUSH2 0x97B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x696E76616C6964206C656E67746873 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x986 PUSH2 0xE28 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0xE SLOAD DUP3 SUB PUSH2 0x9CC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x1C99591D5B99185B9D081C9BDBDD PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0xE DUP3 SWAP1 SSTORE CALLVALUE PUSH1 0x0 JUMPDEST DUP5 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xBB9 JUMPI DUP10 DUP10 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0x9FB JUMPI PUSH2 0x9FB PUSH2 0x2453 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xA10 SWAP2 SWAP1 PUSH2 0x2324 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x48E6FA23 DUP10 DUP10 DUP5 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xA36 JUMPI PUSH2 0xA36 PUSH2 0x2453 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xA50 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP10 DUP6 PUSH4 0xFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0xA77 JUMPI PUSH2 0xA77 PUSH2 0x2453 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA9C SWAP3 SWAP2 SWAP1 PUSH2 0x24AF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP4 POP POP POP POP DUP1 ISZERO PUSH2 0xAC7 JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0xB84 JUMPI PUSH32 0x51F2EF0CED5EF0EC14268D79D48589F9CCFF35B2B0BAF5059A90166CAFFEA7A7 PUSH1 0x4 DUP3 PUSH4 0xFFFFFFFF AND DUP2 SLOAD DUP2 LT PUSH2 0xB05 JUMPI PUSH2 0xB05 PUSH2 0x2453 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x8 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH1 0x4 MUL SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP12 DUP12 DUP5 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xB43 JUMPI PUSH2 0xB43 PUSH2 0x2453 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB58 SWAP2 SWAP1 PUSH2 0x2324 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0xBB1 JUMP JUMPDEST DUP8 DUP8 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xB9C JUMPI PUSH2 0xB9C PUSH2 0x2453 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP3 PUSH2 0xBAE SWAP2 SWAP1 PUSH2 0x2440 JUMP JUMPDEST SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x9D5 JUMP JUMPDEST POP PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE MLOAD PUSH32 0x3FCEDB4669DE80CA7DE6E18B7B25CC8E4F6861796F1DB0F2409FCDF0D6901F56 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x4 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0xC18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x8 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH1 0x4 MUL SWAP2 POP SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x919 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x6 PUSH2 0xC7A DUP4 PUSH2 0x87A JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0xC8A JUMPI PUSH2 0xC8A PUSH2 0x2453 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x100 SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCF1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD15 SWAP2 SWAP1 PUSH2 0x24DD JUMP JUMPDEST PUSH2 0xD4C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH2 0xD54 PUSH2 0x1535 JUMP JUMPDEST PUSH2 0x919 PUSH2 0x157B JUMP JUMPDEST PUSH2 0xD64 PUSH2 0x1535 JUMP JUMPDEST DUP2 CALLER PUSH2 0xD6F DUP3 PUSH2 0xC6D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xDB2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x10B1B7B73732B1BA37B9 PUSH1 0xB1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDBF PUSH1 0xA DUP5 PUSH2 0x15B8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH32 0x1DAAD24EE1BF0BCC72AB681D29DF86EC2794361B223DA31F148B9F826CD135A8 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE23 PUSH1 0xA PUSH2 0x162A JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xE33 PUSH2 0x1535 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x0 SWAP1 PUSH2 0xE47 SWAP1 PUSH1 0xA SWAP1 PUSH1 0x64 PUSH2 0x1654 JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0xEDC JUMPI PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC9B0A6DE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEAF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xED3 SWAP2 SWAP1 PUSH2 0x24FF JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x34A55EE6 DUP5 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF2B SWAP2 SWAP1 PUSH2 0x255E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF49 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF6D SWAP2 SWAP1 PUSH2 0x24FF JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH32 0x41B13C36968D02A1FD71E0F5DB55BA2FB043C215A4D1E17633293FF273A77CD4 DUP3 DUP3 DUP6 PUSH1 0x40 MLOAD PUSH2 0xFA4 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2571 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 SWAP1 SWAP4 POP SWAP2 POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xFE1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0xFFF JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x101D JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x104B JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1054 DUP2 PUSH2 0x19D6 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1082 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x108C DUP3 DUP3 PUSH2 0x1A24 JUMP JUMPDEST PUSH32 0x95EF69787290B89C35A092C89DB1B283B43724D01263E683CFB560C758CDBE70 DUP3 DUP3 PUSH1 0x4 PUSH1 0x6 PUSH1 0x40 MLOAD PUSH2 0x10C3 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2756 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10FA JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x110C SWAP2 SWAP1 PUSH2 0x2440 JUMP JUMPDEST GT PUSH2 0x112A JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x919 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1C10 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x116A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x100 SWAP1 SWAP2 DIV DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0x11CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616C72656164792077617463686572206D616E61676572000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND PUSH2 0x100 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC16D059E43D7F8E29CCB4E001A2F249D3C59E274925D6A6BC3912943441D9F6C SWAP1 PUSH1 0x20 ADD PUSH2 0x728 JUMP JUMPDEST DUP3 DUP2 EQ PUSH2 0x1265 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x42DAC2E8C6D0D2DCCE40D8CADCCEE8D PUSH1 0x83 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x127B SWAP3 SWAP2 SWAP1 PUSH2 0x27A3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ PUSH2 0x12C9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x21646F6D61696E73 PUSH1 0xC0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x12DF SWAP3 SWAP2 SWAP1 PUSH2 0x23DE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ PUSH2 0x1330 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x21636F6E6E6563746F7273 PUSH1 0xA8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x100 SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1382 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13A6 SWAP2 SWAP1 PUSH2 0x24DD JUMP JUMPDEST PUSH2 0x13DD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13E8 DUP3 PUSH2 0x1C75 JUMP JUMPDEST SWAP1 POP PUSH32 0x6A1097F391A37DC63E0860E64EC34442971EEED2FDA4D1A90141FA9CE25EB7EB DUP3 DUP3 PUSH1 0x4 PUSH1 0x6 CALLER PUSH1 0x40 MLOAD PUSH2 0x10C3 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x27E1 JUMP JUMPDEST PUSH1 0x1 SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0x919 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x14C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x185B1C9958591E481C995B5BDD9959 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x14EB PUSH2 0x1429 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x919 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH2 0x1583 PUSH2 0x1535 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1518 CALLER SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 NUMBER SWAP1 DUP5 SWAP1 PUSH1 0x10 SWAP1 PUSH2 0x15DD SWAP1 PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x2837 JUMP JUMPDEST DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP4 AND PUSH2 0x100 SWAP5 SWAP1 SWAP5 EXP DUP5 DUP2 MUL SWAP2 MUL NOT SWAP1 SWAP2 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP7 SWAP1 SWAP7 SSTORE PUSH1 0x2 SWAP1 SWAP7 ADD SWAP1 SWAP6 MSTORE SWAP3 SWAP1 SWAP4 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x1 PUSH1 0x80 SHL DUP3 DIV DUP2 AND SWAP2 AND PUSH2 0x164C DUP3 DUP3 PUSH2 0x1EEC JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 SLOAD PUSH1 0x60 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV AND DUP2 DUP2 LT ISZERO PUSH2 0x168D JUMPI POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE SWAP1 POP PUSH2 0x8D7 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH1 0x0 SUB PUSH2 0x16D6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x1C5D595D5948085A5B9A5D09D9 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND GT PUSH2 0x1721 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x42C2C6C6CAE0E8C2C4D8CA40DAC2F PUSH1 0x8B SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH2 0x172F DUP7 DUP6 PUSH2 0x285D JUMP JUMPDEST PUSH2 0x1739 SWAP2 SWAP1 PUSH2 0x2884 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND GT ISZERO PUSH2 0x1759 JUMPI DUP1 SWAP2 POP JUMPDEST POP PUSH1 0x0 PUSH2 0x1766 DUP7 NUMBER PUSH2 0x2440 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND GT PUSH2 0x17BD JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 DUP10 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 DUP2 GT PUSH2 0x17B0 JUMPI PUSH1 0x1 SWAP2 POP POP PUSH2 0x17BD JUMP JUMPDEST POP PUSH1 0x0 NOT SWAP1 SWAP3 ADD SWAP2 PUSH2 0x176B JUMP JUMPDEST DUP1 PUSH2 0x17DD JUMPI POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE SWAP3 POP PUSH2 0x8D7 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH2 0x17EB DUP6 PUSH1 0x1 PUSH2 0x285D JUMP JUMPDEST PUSH2 0x17F5 SWAP2 SWAP1 PUSH2 0x2884 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1816 JUMPI PUSH2 0x1816 PUSH2 0x2129 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x183F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND GT PUSH2 0x18FB JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP13 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD DUP1 DUP5 MSTORE PUSH1 0x3 DUP16 ADD SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x18BC JUMPI DUP1 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x18A5 JUMPI PUSH2 0x18A5 PUSH2 0x2453 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP3 PUSH1 0x1 ADD SWAP3 POP PUSH2 0x18C3 JUMP JUMPDEST DUP2 PUSH1 0x1 ADD SWAP2 POP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP13 DUP2 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP5 SWAP1 SSTORE PUSH1 0x2 DUP16 ADD SWAP1 SWAP2 MSTORE DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP1 SWAP7 ADD SWAP6 PUSH2 0x1846 JUMP JUMPDEST DUP11 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP9 AND OR DUP12 SSTORE PUSH1 0x0 DUP2 SWAP1 SUB PUSH2 0x1935 JUMPI DUP3 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x8D7 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1950 JUMPI PUSH2 0x1950 PUSH2 0x2129 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1979 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x19C6 JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1999 JUMPI PUSH2 0x1999 PUSH2 0x2453 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x19B3 JUMPI PUSH2 0x19B3 PUSH2 0x2453 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x197F JUMP JUMPDEST POP SWAP8 POP PUSH2 0x8D7 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x1A77 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x646F6D61696E20657869737473 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1ABA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x10B1B7B73732B1BA37B9 PUSH1 0xB1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x1F4 GT PUSH2 0x1B0D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446F6D61696E496E646578657220617420636170616369747900000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP4 SSTORE PUSH1 0x8 DUP1 DUP4 DIV PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B ADD DUP1 SLOAD PUSH4 0xFFFFFFFF DUP1 DUP10 AND PUSH1 0x7 SWAP1 SWAP7 AND DUP8 MUL PUSH2 0x100 EXP DUP7 DUP2 MUL SWAP2 MUL NOT SWAP1 SWAP2 AND OR SWAP1 SSTORE PUSH1 0x6 DUP1 SLOAD SWAP3 DUP4 ADD SWAP1 SSTORE PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D3F SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND OR SWAP1 SSTORE SWAP2 SLOAD PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP2 SWAP1 SSTORE PUSH2 0x1BC4 PUSH2 0x1F16 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF DUP6 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x4FC27362D8AB3086EFD93B7880E99AC02E906D0BA9B71CA90239ADE53090F703 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1C81 DUP4 PUSH2 0x87A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x6 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1C98 JUMPI PUSH2 0x1C98 PUSH2 0x2453 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 PUSH2 0x1CF0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x636F6E6E6563746F722021657869737473 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x1D02 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x2440 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 LT ISZERO PUSH2 0x1E1B JUMPI PUSH1 0x0 PUSH1 0x4 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1D21 JUMPI PUSH2 0x1D21 PUSH2 0x2453 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x8 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH1 0x4 MUL SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND SWAP1 POP DUP1 PUSH1 0x4 DUP6 DUP2 SLOAD DUP2 LT PUSH2 0x1D5D JUMPI PUSH2 0x1D5D PUSH2 0x2453 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x8 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH1 0x4 MUL PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH4 0xFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x6 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1DA3 JUMPI PUSH2 0x1DA3 PUSH2 0x2453 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP7 SWAP1 DUP2 LT PUSH2 0x1DCF JUMPI PUSH2 0x1DCF PUSH2 0x2453 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1E03 DUP5 PUSH1 0x1 PUSH2 0x28A4 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMPDEST PUSH1 0x4 DUP1 SLOAD DUP1 PUSH2 0x1E2C JUMPI PUSH2 0x1E2C PUSH2 0x28B7 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH1 0x8 PUSH1 0x0 NOT SWAP1 SWAP3 ADD SWAP2 DUP3 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x4 PUSH1 0x7 DUP6 AND MUL PUSH2 0x100 EXP MUL NOT AND SWAP1 SSTORE SWAP1 SSTORE PUSH1 0x6 DUP1 SLOAD DUP1 PUSH2 0x1E6B JUMPI PUSH2 0x1E6B PUSH2 0x28B7 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH1 0x0 NOT SWAP1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH4 0xFFFFFFFF DUP8 AND DUP3 MSTORE PUSH1 0x8 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x1EAB PUSH2 0x1F16 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF DUP7 AND DUP2 MSTORE PUSH32 0x7E560B48A4BBA1688EB45AFD6712A11FA42B9ABBB48A8E14E2F15E467AB420E4 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1EFA DUP5 PUSH1 0x1 PUSH2 0x285D JUMP JUMPDEST PUSH2 0x1F04 SWAP2 SWAP1 PUSH2 0x2884 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1F90 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x1F53 JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH1 0x6 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1FEF JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1FD1 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2007 SWAP2 SWAP1 PUSH2 0x28CD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x5 SSTORE PUSH2 0x202F SWAP2 DUP4 SWAP2 ADD PUSH2 0x2917 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 PUSH1 0x7 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2060 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x207B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2092 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8D7 DUP3 PUSH2 0x2067 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x20AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x20C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x20E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x20FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2111 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x211D DUP6 DUP3 DUP7 ADD PUSH2 0x209B JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2168 JUMPI PUSH2 0x2168 PUSH2 0x2129 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP8 CALLDATALOAD GT ISZERO PUSH2 0x219F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x21AC DUP9 DUP9 CALLDATALOAD DUP10 ADD PUSH2 0x209B JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x21C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x21CF DUP10 DUP3 DUP11 ADD PUSH2 0x209B JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x21E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 ADD PUSH1 0x1F DUP2 ADD DUP10 SGT PUSH2 0x21F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x220A JUMPI PUSH2 0x220A PUSH2 0x2129 JUMP JUMPDEST PUSH2 0x2219 PUSH1 0x20 DUP3 PUSH1 0x5 SHL ADD PUSH2 0x213F JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP12 DUP4 GT ISZERO PUSH2 0x223B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP5 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x22D0 JUMPI DUP6 DUP2 CALLDATALOAD GT ISZERO PUSH2 0x2256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD DUP6 ADD DUP14 PUSH1 0x3F DUP3 ADD SLT PUSH2 0x2269 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP8 DUP2 GT ISZERO PUSH2 0x227E JUMPI PUSH2 0x227E PUSH2 0x2129 JUMP JUMPDEST PUSH2 0x2291 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x213F JUMP JUMPDEST DUP2 DUP2 MSTORE DUP16 PUSH1 0x40 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x22A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x40 DUP5 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP4 DUP4 ADD ADD MSTORE DUP1 DUP7 MSTORE POP POP POP PUSH1 0x20 DUP4 ADD SWAP3 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x2240 JUMP JUMPDEST POP DUP1 SWAP6 POP POP POP POP POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x22F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22FF DUP4 PUSH2 0x2067 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x207B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2336 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8D7 DUP3 PUSH2 0x230D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2352 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x235B DUP4 PUSH2 0x2067 JUMP JUMPDEST SWAP2 POP PUSH2 0x2369 PUSH1 0x20 DUP5 ADD PUSH2 0x230D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x23A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x23AC DUP9 DUP4 DUP10 ADD PUSH2 0x209B JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x23C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23D2 DUP8 DUP3 DUP9 ADD PUSH2 0x209B JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP5 PUSH1 0x40 DUP5 ADD DUP4 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x241F JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x240C DUP5 PUSH2 0x230D JUMP JUMPDEST AND DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x23F3 JUMP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x1F10 JUMPI PUSH2 0x1F10 PUSH2 0x242A JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x248F JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x2473 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x24C2 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x2469 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x24D4 DUP2 DUP6 PUSH2 0x2469 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x24EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x8D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2512 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2553 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2537 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x8D7 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2523 JUMP JUMPDEST DUP4 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x24D4 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x2523 JUMP JUMPDEST DUP1 SLOAD DUP1 DUP4 MSTORE PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP5 ADD SWAP4 SWAP1 SWAP2 SWAP1 DUP3 JUMPDEST DUP3 PUSH1 0x7 DUP3 ADD LT ISZERO PUSH2 0x261F JUMPI DUP2 SLOAD PUSH4 0xFFFFFFFF DUP1 DUP3 AND DUP9 MSTORE PUSH1 0x20 DUP3 DUP2 SHR DUP3 AND SWAP1 DUP10 ADD MSTORE PUSH1 0x40 DUP3 DUP2 SHR DUP3 AND SWAP1 DUP10 ADD MSTORE PUSH1 0x60 DUP3 DUP2 SHR DUP3 AND SWAP1 DUP10 ADD MSTORE PUSH1 0x80 DUP3 DUP2 SHR DUP3 AND SWAP1 DUP10 ADD MSTORE PUSH1 0xA0 DUP3 DUP2 SHR DUP3 AND SWAP1 DUP10 ADD MSTORE PUSH1 0xC0 DUP3 DUP2 SHR SWAP1 SWAP2 AND SWAP1 DUP9 ADD MSTORE PUSH1 0xE0 SWAP1 DUP2 SHR SWAP1 DUP8 ADD MSTORE PUSH2 0x100 SWAP1 SWAP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x8 ADD PUSH2 0x25A7 JUMP JUMPDEST SWAP1 SLOAD SWAP1 DUP3 DUP2 LT ISZERO PUSH2 0x263D JUMPI PUSH4 0xFFFFFFFF DUP3 AND DUP7 MSTORE PUSH1 0x20 SWAP1 SWAP6 ADD SWAP5 PUSH1 0x1 ADD JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x265D JUMPI PUSH1 0x20 DUP3 SWAP1 SHR PUSH4 0xFFFFFFFF AND DUP7 MSTORE PUSH1 0x20 SWAP6 SWAP1 SWAP6 ADD SWAP5 PUSH1 0x1 ADD JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x267C JUMPI PUSH4 0xFFFFFFFF PUSH1 0x40 DUP4 SWAP1 SHR AND DUP7 MSTORE PUSH1 0x20 SWAP1 SWAP6 ADD SWAP5 PUSH1 0x1 ADD JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x269B JUMPI PUSH4 0xFFFFFFFF PUSH1 0x60 DUP4 SWAP1 SHR AND DUP7 MSTORE PUSH1 0x20 SWAP1 SWAP6 ADD SWAP5 PUSH1 0x1 ADD JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x26BA JUMPI PUSH4 0xFFFFFFFF PUSH1 0x80 DUP4 SWAP1 SHR AND DUP7 MSTORE PUSH1 0x20 SWAP1 SWAP6 ADD SWAP5 PUSH1 0x1 ADD JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x26D9 JUMPI PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP4 SWAP1 SHR AND DUP7 MSTORE PUSH1 0x20 SWAP1 SWAP6 ADD SWAP5 PUSH1 0x1 ADD JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x26F8 JUMPI PUSH4 0xFFFFFFFF PUSH1 0xC0 DUP4 SWAP1 SHR AND DUP7 MSTORE PUSH1 0x20 SWAP1 SWAP6 ADD SWAP5 PUSH1 0x1 ADD JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x270E JUMPI PUSH1 0xE0 DUP3 SWAP1 SHR DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP6 POP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP4 PUSH1 0x0 MSTORE DUP1 PUSH1 0x0 KECCAK256 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2553 JUMPI DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2731 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP6 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x2786 SWAP1 DUP4 ADD DUP6 PUSH2 0x2590 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x2798 DUP2 DUP6 PUSH2 0x2718 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP5 PUSH1 0x40 DUP5 ADD DUP4 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x241F JUMPI PUSH4 0xFFFFFFFF PUSH2 0x27CE DUP5 PUSH2 0x2067 JUMP JUMPDEST AND DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x27B8 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP7 AND DUP2 MSTORE PUSH1 0x0 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x280F PUSH1 0xA0 DUP5 ADD DUP8 PUSH2 0x2590 JUMP JUMPDEST DUP4 DUP2 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x2821 DUP2 DUP8 PUSH2 0x2718 JUMP JUMPDEST SWAP3 POP POP DUP1 DUP5 AND PUSH1 0x80 DUP5 ADD MSTORE POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x2853 JUMPI PUSH2 0x2853 PUSH2 0x242A JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x287D JUMPI PUSH2 0x287D PUSH2 0x242A JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x287D JUMPI PUSH2 0x287D PUSH2 0x242A JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x1F10 JUMPI PUSH2 0x1F10 PUSH2 0x242A JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x290B JUMPI DUP4 MLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x28E9 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x290B JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2933 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 0xC5 DUP9 POP SWAP3 0x2A DIFFICULTY 0xDB 0xB0 DUP10 PUSH30 0xAA160E573A2789F40ADFC549F9FA8345FF5C1BA6E864736F6C6343000811 STOP CALLER ","sourceMap":"715:9912:113:-:0;;;3383:385;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;996:7:51;:15;;-1:-1:-1;;;;;;1056:48:114;996:15:51;-1:-1:-1;;;;;1056:48:114;::::1;;;::::0;;3530:21:113::2;3540:10;3530:9;:21::i;:::-;-1:-1:-1::0;;;;;3566:21:113;::::2;3558:46;;;::::0;-1:-1:-1;;;3558:46:113;;757:2:181;3558:46:113::2;::::0;::::2;739:21:181::0;796:2;776:18;;;769:30;-1:-1:-1;;;815:18:181;;;808:42;867:18;;3558:46:113::2;;;;;;;;-1:-1:-1::0;;;;;3610:35:113;::::2;;::::0;3652:11:::2;:26:::0;;;3731:32:::2;:19;:30;;::::0;;::::2;;;:32:::0;::::2;:::i;:::-;3383:385:::0;;;715:9912;;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;1202:99:166:-;1272:1;1279:17;;1202:99::o;14:177:181:-;93:13;;-1:-1:-1;;;;;135:31:181;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:354::-;284:6;292;300;353:2;341:9;332:7;328:23;324:32;321:52;;;369:1;366;359:12;321:52;398:9;392:16;382:26;;427:49;472:2;461:9;457:18;427:49;:::i;:::-;417:59;;495:49;540:2;529:9;525:18;495:49;:::i;:::-;485:59;;196:354;;;;;:::o;555:336::-;715:9912:113;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DEQUEUE_MAX_38417":{"entryPoint":null,"id":38417,"parameterSlots":0,"returnSlots":0},"@MAX_DOMAINS_48420":{"entryPoint":null,"id":48420,"parameterSlots":0,"returnSlots":0},"@MERKLE_38431":{"entryPoint":null,"id":38431,"parameterSlots":0,"returnSlots":0},"@_length_49624":{"entryPoint":7916,"id":49624,"parameterSlots":2,"returnSlots":1},"@_msgSender_11496":{"entryPoint":null,"id":11496,"parameterSlots":0,"returnSlots":1},"@_pause_10663":{"entryPoint":5499,"id":10663,"parameterSlots":0,"returnSlots":0},"@_requireNotPaused_10636":{"entryPoint":5429,"id":10636,"parameterSlots":0,"returnSlots":0},"@_requirePaused_10647":{"entryPoint":5161,"id":10647,"parameterSlots":0,"returnSlots":0},"@_setOwner_49908":{"entryPoint":7184,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":6614,"id":49927,"parameterSlots":1,"returnSlots":0},"@_unpause_10679":{"entryPoint":5347,"id":10679,"parameterSlots":0,"returnSlots":0},"@acceptProposedOwner_49887":{"entryPoint":4303,"id":49887,"parameterSlots":0,"returnSlots":0},"@addConnector_38551":{"entryPoint":4183,"id":38551,"parameterSlots":2,"returnSlots":0},"@addDomain_48625":{"entryPoint":6692,"id":48625,"parameterSlots":2,"returnSlots":0},"@aggregate_38750":{"entryPoint":3420,"id":38750,"parameterSlots":2,"returnSlots":0},"@connectorsHash_48434":{"entryPoint":null,"id":48434,"parameterSlots":0,"returnSlots":0},"@connectors_48431":{"entryPoint":1843,"id":48431,"parameterSlots":0,"returnSlots":0},"@delayBlocks_38420":{"entryPoint":null,"id":38420,"parameterSlots":0,"returnSlots":0},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@dequeueVerified_49536":{"entryPoint":5716,"id":49536,"parameterSlots":3,"returnSlots":1},"@dequeue_38801":{"entryPoint":3624,"id":38801,"parameterSlots":0,"returnSlots":2},"@discardRoot_38596":{"entryPoint":1726,"id":38596,"parameterSlots":1,"returnSlots":0},"@domainsHash_48427":{"entryPoint":null,"id":48427,"parameterSlots":0,"returnSlots":0},"@domains_48424":{"entryPoint":3080,"id":48424,"parameterSlots":0,"returnSlots":0},"@enqueue_49298":{"entryPoint":5560,"id":49298,"parameterSlots":2,"returnSlots":1},"@getConnectorForDomain_48495":{"entryPoint":3181,"id":48495,"parameterSlots":1,"returnSlots":1},"@getDomainIndex_48480":{"entryPoint":2170,"id":48480,"parameterSlots":1,"returnSlots":1},"@getPendingInboundRootsCount_38503":{"entryPoint":3607,"id":38503,"parameterSlots":0,"returnSlots":1},"@initialize_49259":{"entryPoint":5155,"id":49259,"parameterSlots":1,"returnSlots":0},"@isDomainSupported_48454":{"entryPoint":null,"id":48454,"parameterSlots":1,"returnSlots":1},"@lastPropagatedRoot_38427":{"entryPoint":null,"id":38427,"parameterSlots":0,"returnSlots":0},"@length_49604":{"entryPoint":5674,"id":49604,"parameterSlots":1,"returnSlots":1},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@pause_38913":{"entryPoint":3237,"id":38913,"parameterSlots":0,"returnSlots":0},"@paused_10624":{"entryPoint":null,"id":10624,"parameterSlots":0,"returnSlots":1},"@pendingInboundRoots_38424":{"entryPoint":null,"id":38424,"parameterSlots":0,"returnSlots":0},"@propagate_38723":{"entryPoint":2331,"id":38723,"parameterSlots":5,"returnSlots":0},"@proposeNewOwner_49841":{"entryPoint":4022,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@removeConnector_38575":{"entryPoint":4918,"id":38575,"parameterSlots":1,"returnSlots":0},"@removeDomain_48720":{"entryPoint":7285,"id":48720,"parameterSlots":1,"returnSlots":1},"@remove_49563":{"entryPoint":5234,"id":49563,"parameterSlots":2,"returnSlots":0},"@renounceOwnership_38606":{"entryPoint":3138,"id":38606,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@setDelayBlocks_38528":{"entryPoint":1885,"id":38528,"parameterSlots":1,"returnSlots":0},"@setWatcherManager_38881":{"entryPoint":4415,"id":38881,"parameterSlots":1,"returnSlots":0},"@unpause_38893":{"entryPoint":2270,"id":38893,"parameterSlots":0,"returnSlots":0},"@updateHashes_48757":{"entryPoint":7958,"id":48757,"parameterSlots":0,"returnSlots":0},"@validateConnectors_48559":{"entryPoint":2063,"id":48559,"parameterSlots":2,"returnSlots":0},"@validateDomains_48539":{"entryPoint":4643,"id":48539,"parameterSlots":4,"returnSlots":0},"@watcherManager_38824":{"entryPoint":null,"id":38824,"parameterSlots":0,"returnSlots":0},"abi_decode_address":{"entryPoint":8973,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn_calldata":{"entryPoint":8347,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":8996,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr":{"entryPoint":8423,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_bytes_memory_ptr_$dyn_memory_ptr":{"entryPoint":8560,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_array$_t_uint32_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptr":{"entryPoint":9074,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":9437,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":8270,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_uint256_fromMemory":{"entryPoint":9471,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32":{"entryPoint":8320,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32t_address":{"entryPoint":9023,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint32t_bytes32":{"entryPoint":8931,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint32":{"entryPoint":8295,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_array_address_dyn_storage":{"entryPoint":10008,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_bytes32_dyn":{"entryPoint":9507,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint32_dyn_storage":{"entryPoint":9616,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes":{"entryPoint":9321,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_calldata_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":9182,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":10519,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_bytes32_$dyn_memory_ptr__to_t_array$_t_bytes32_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":9566,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_uint32_$dyn_calldata_ptr__to_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":10147,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_array$_t_uint32_$dyn_memory_ptr__to_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":10445,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint256__to_t_bytes32_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint256_t_array$_t_bytes32_$dyn_memory_ptr__to_t_bytes32_t_uint256_t_array$_t_bytes32_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":9585,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint256_t_bytes32__to_t_bytes32_t_uint256_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":9391,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_069b0c751baa033a978be3583d0de58dbb093dd8290b507a8911c35f2d486c99__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1b3dad4847886d431ff5d32a756e774697e6b3066b8c2075a79c1c0724122a74__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2d87153ecfbf898378d31617525dca29b55718c58d32c8c1caea6770b56c7d98__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_79659e2a9d2f01c1bf48982e1eb3a21b05a6255fb73515db14625380c6699c98__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_858f5e5a76bb3dc38377e7f81e3338b01e1328003db4ac23cd71e280fddde026__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9308cd27a729cf7a07f3d8b44d2c21a947a78dd47c28e8fba8bd6a0d96c10ccd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a119ebcb269307a76882c3ab3433e191b381689141f8fce583b20a0c51f09799__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a8a92d31cbc8779211c13437809c468e10617644bdb6370cfbd56808dd627715__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c974277859dbe5199cac4a5dad47692593995fbef88ea0805b1b8f52600e925d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d0dafca8381883f95defc09b28a81ebd60e1499d273f6a1ea9c522dc0a7ecdb1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e18affcae4aea5951cc6c3a501fd639ac8a06ed7c7513fba47119a1500ba1b8d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_eead9a749bb70fe1ce8febf2e6a2513dd4a5ce75eba52d12379ec95d317c3d3f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f07da7b975140f505677e7936eeabdf78b829042e2b339dd9ec88a01bc429624__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint128_t_uint128__to_t_uint128_t_uint128__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32_t_address__to_t_uint32_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint32_t_address_t_array$_t_uint32_$dyn_storage_t_array$_t_address_$dyn_storage__to_t_uint32_t_address_t_array$_t_uint32_$dyn_memory_ptr_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":10070,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint32_t_address_t_array$_t_uint32_$dyn_storage_t_array$_t_address_$dyn_storage_t_address__to_t_uint32_t_address_t_array$_t_uint32_$dyn_memory_ptr_t_array$_t_address_$dyn_memory_ptr_t_address__fromStack_reversed":{"entryPoint":10209,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_uint32_t_bytes32_t_uint128__to_t_uint32_t_bytes32_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_uint32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_memory":{"entryPoint":8511,"id":null,"parameterSlots":1,"returnSlots":1},"array_dataslot_array_uint32_dyn_storage":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"array_storeLengthForEncoding_string":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":10333,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":10404,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":10372,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":9280,"id":null,"parameterSlots":2,"returnSlots":1},"increment_t_uint128":{"entryPoint":10295,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":9258,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x31":{"entryPoint":10423,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":9299,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":8489,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:27093:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:76:181","statements":[{"nodeType":"YulAssignment","src":"125:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:181"},"nodeType":"YulFunctionCall","src":"133:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"178:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:181"},"nodeType":"YulFunctionCall","src":"160:25:181"},"nodeType":"YulExpressionStatement","src":"160:25:181"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:181","type":""}],"src":"14:177:181"},{"body":{"nodeType":"YulBlock","src":"266:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"312:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"321:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"324:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"314:6:181"},"nodeType":"YulFunctionCall","src":"314:12:181"},"nodeType":"YulExpressionStatement","src":"314:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"287:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"296:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"283:3:181"},"nodeType":"YulFunctionCall","src":"283:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"308:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"279:3:181"},"nodeType":"YulFunctionCall","src":"279:32:181"},"nodeType":"YulIf","src":"276:52:181"},{"nodeType":"YulAssignment","src":"337:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"360:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"347:12:181"},"nodeType":"YulFunctionCall","src":"347:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"337:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"232:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"243:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"255:6:181","type":""}],"src":"196:180:181"},{"body":{"nodeType":"YulBlock","src":"451:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"497:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"506:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"509:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"499:6:181"},"nodeType":"YulFunctionCall","src":"499:12:181"},"nodeType":"YulExpressionStatement","src":"499:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"472:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"481:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"468:3:181"},"nodeType":"YulFunctionCall","src":"468:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"493:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"464:3:181"},"nodeType":"YulFunctionCall","src":"464:32:181"},"nodeType":"YulIf","src":"461:52:181"},{"nodeType":"YulAssignment","src":"522:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"545:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"532:12:181"},"nodeType":"YulFunctionCall","src":"532:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"522:6:181"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"417:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"428:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"440:6:181","type":""}],"src":"381:180:181"},{"body":{"nodeType":"YulBlock","src":"667:102:181","statements":[{"nodeType":"YulAssignment","src":"677:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"689:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"700:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"685:3:181"},"nodeType":"YulFunctionCall","src":"685:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"677:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"719:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"734:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"750:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"755:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"746:3:181"},"nodeType":"YulFunctionCall","src":"746:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"759:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"742:3:181"},"nodeType":"YulFunctionCall","src":"742:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"730:3:181"},"nodeType":"YulFunctionCall","src":"730:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"712:6:181"},"nodeType":"YulFunctionCall","src":"712:51:181"},"nodeType":"YulExpressionStatement","src":"712:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"636:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"647:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"658:4:181","type":""}],"src":"566:203:181"},{"body":{"nodeType":"YulBlock","src":"822:115:181","statements":[{"nodeType":"YulAssignment","src":"832:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"854:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"841:12:181"},"nodeType":"YulFunctionCall","src":"841:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"832:5:181"}]},{"body":{"nodeType":"YulBlock","src":"915:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"924:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"927:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"917:6:181"},"nodeType":"YulFunctionCall","src":"917:12:181"},"nodeType":"YulExpressionStatement","src":"917:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"883:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"894:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"901:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"890:3:181"},"nodeType":"YulFunctionCall","src":"890:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"880:2:181"},"nodeType":"YulFunctionCall","src":"880:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"873:6:181"},"nodeType":"YulFunctionCall","src":"873:41:181"},"nodeType":"YulIf","src":"870:61:181"}]},"name":"abi_decode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"801:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"812:5:181","type":""}],"src":"774:163:181"},{"body":{"nodeType":"YulBlock","src":"1011:115:181","statements":[{"body":{"nodeType":"YulBlock","src":"1057:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1066:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1069:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1059:6:181"},"nodeType":"YulFunctionCall","src":"1059:12:181"},"nodeType":"YulExpressionStatement","src":"1059:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1032:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1041:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1028:3:181"},"nodeType":"YulFunctionCall","src":"1028:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1053:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1024:3:181"},"nodeType":"YulFunctionCall","src":"1024:32:181"},"nodeType":"YulIf","src":"1021:52:181"},{"nodeType":"YulAssignment","src":"1082:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1110:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"1092:17:181"},"nodeType":"YulFunctionCall","src":"1092:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1082:6:181"}]}]},"name":"abi_decode_tuple_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"977:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"988:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1000:6:181","type":""}],"src":"942:184:181"},{"body":{"nodeType":"YulBlock","src":"1226:92:181","statements":[{"nodeType":"YulAssignment","src":"1236:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1248:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1259:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1244:3:181"},"nodeType":"YulFunctionCall","src":"1244:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1236:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1278:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1303:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1296:6:181"},"nodeType":"YulFunctionCall","src":"1296:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1289:6:181"},"nodeType":"YulFunctionCall","src":"1289:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1271:6:181"},"nodeType":"YulFunctionCall","src":"1271:41:181"},"nodeType":"YulExpressionStatement","src":"1271:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1195:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1206:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1217:4:181","type":""}],"src":"1131:187:181"},{"body":{"nodeType":"YulBlock","src":"1407:283:181","statements":[{"body":{"nodeType":"YulBlock","src":"1456:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1465:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1468:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1458:6:181"},"nodeType":"YulFunctionCall","src":"1458:12:181"},"nodeType":"YulExpressionStatement","src":"1458:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1435:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1443:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1431:3:181"},"nodeType":"YulFunctionCall","src":"1431:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"1450:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1427:3:181"},"nodeType":"YulFunctionCall","src":"1427:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1420:6:181"},"nodeType":"YulFunctionCall","src":"1420:35:181"},"nodeType":"YulIf","src":"1417:55:181"},{"nodeType":"YulAssignment","src":"1481:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1504:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1491:12:181"},"nodeType":"YulFunctionCall","src":"1491:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1481:6:181"}]},{"body":{"nodeType":"YulBlock","src":"1554:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1563:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1566:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1556:6:181"},"nodeType":"YulFunctionCall","src":"1556:12:181"},"nodeType":"YulExpressionStatement","src":"1556:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1526:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1534:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1523:2:181"},"nodeType":"YulFunctionCall","src":"1523:30:181"},"nodeType":"YulIf","src":"1520:50:181"},{"nodeType":"YulAssignment","src":"1579:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1595:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1603:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1591:3:181"},"nodeType":"YulFunctionCall","src":"1591:17:181"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"1579:8:181"}]},{"body":{"nodeType":"YulBlock","src":"1668:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1677:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1680:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1670:6:181"},"nodeType":"YulFunctionCall","src":"1670:12:181"},"nodeType":"YulExpressionStatement","src":"1670:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1631:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1643:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"1646:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1639:3:181"},"nodeType":"YulFunctionCall","src":"1639:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1627:3:181"},"nodeType":"YulFunctionCall","src":"1627:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"1656:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1623:3:181"},"nodeType":"YulFunctionCall","src":"1623:38:181"},{"name":"end","nodeType":"YulIdentifier","src":"1663:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1620:2:181"},"nodeType":"YulFunctionCall","src":"1620:47:181"},"nodeType":"YulIf","src":"1617:67:181"}]},"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1370:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"1378:3:181","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"1386:8:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"1396:6:181","type":""}],"src":"1323:367:181"},{"body":{"nodeType":"YulBlock","src":"1800:332:181","statements":[{"body":{"nodeType":"YulBlock","src":"1846:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1855:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1858:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1848:6:181"},"nodeType":"YulFunctionCall","src":"1848:12:181"},"nodeType":"YulExpressionStatement","src":"1848:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1821:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1830:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1817:3:181"},"nodeType":"YulFunctionCall","src":"1817:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1842:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1813:3:181"},"nodeType":"YulFunctionCall","src":"1813:32:181"},"nodeType":"YulIf","src":"1810:52:181"},{"nodeType":"YulVariableDeclaration","src":"1871:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1898:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1885:12:181"},"nodeType":"YulFunctionCall","src":"1885:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1875:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1951:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1960:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1963:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1953:6:181"},"nodeType":"YulFunctionCall","src":"1953:12:181"},"nodeType":"YulExpressionStatement","src":"1953:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1923:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1931:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1920:2:181"},"nodeType":"YulFunctionCall","src":"1920:30:181"},"nodeType":"YulIf","src":"1917:50:181"},{"nodeType":"YulVariableDeclaration","src":"1976:96:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2044:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"2055:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2040:3:181"},"nodeType":"YulFunctionCall","src":"2040:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2064:7:181"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"2002:37:181"},"nodeType":"YulFunctionCall","src":"2002:70:181"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"1980:8:181","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"1990:8:181","type":""}]},{"nodeType":"YulAssignment","src":"2081:18:181","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"2091:8:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2081:6:181"}]},{"nodeType":"YulAssignment","src":"2108:18:181","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"2118:8:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2108:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1758:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1769:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1781:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1789:6:181","type":""}],"src":"1695:437:181"},{"body":{"nodeType":"YulBlock","src":"2238:76:181","statements":[{"nodeType":"YulAssignment","src":"2248:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2260:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2271:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2256:3:181"},"nodeType":"YulFunctionCall","src":"2256:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2248:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2290:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"2301:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2283:6:181"},"nodeType":"YulFunctionCall","src":"2283:25:181"},"nodeType":"YulExpressionStatement","src":"2283:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2207:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2218:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2229:4:181","type":""}],"src":"2137:177:181"},{"body":{"nodeType":"YulBlock","src":"2351:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2368:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2375:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2380:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2371:3:181"},"nodeType":"YulFunctionCall","src":"2371:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2361:6:181"},"nodeType":"YulFunctionCall","src":"2361:31:181"},"nodeType":"YulExpressionStatement","src":"2361:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2408:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2411:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2401:6:181"},"nodeType":"YulFunctionCall","src":"2401:15:181"},"nodeType":"YulExpressionStatement","src":"2401:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2432:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2435:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2425:6:181"},"nodeType":"YulFunctionCall","src":"2425:15:181"},"nodeType":"YulExpressionStatement","src":"2425:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"2319:127:181"},{"body":{"nodeType":"YulBlock","src":"2496:230:181","statements":[{"nodeType":"YulAssignment","src":"2506:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2522:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2516:5:181"},"nodeType":"YulFunctionCall","src":"2516:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2506:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2534:58:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2556:6:181"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"2572:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"2578:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2568:3:181"},"nodeType":"YulFunctionCall","src":"2568:13:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2587:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2583:3:181"},"nodeType":"YulFunctionCall","src":"2583:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2564:3:181"},"nodeType":"YulFunctionCall","src":"2564:27:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2552:3:181"},"nodeType":"YulFunctionCall","src":"2552:40:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2538:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2667:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2669:16:181"},"nodeType":"YulFunctionCall","src":"2669:18:181"},"nodeType":"YulExpressionStatement","src":"2669:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2610:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"2622:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2607:2:181"},"nodeType":"YulFunctionCall","src":"2607:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2646:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2658:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2643:2:181"},"nodeType":"YulFunctionCall","src":"2643:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2604:2:181"},"nodeType":"YulFunctionCall","src":"2604:62:181"},"nodeType":"YulIf","src":"2601:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2705:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2709:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2698:6:181"},"nodeType":"YulFunctionCall","src":"2698:22:181"},"nodeType":"YulExpressionStatement","src":"2698:22:181"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"2476:4:181","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2485:6:181","type":""}],"src":"2451:275:181"},{"body":{"nodeType":"YulBlock","src":"2939:1863:181","statements":[{"body":{"nodeType":"YulBlock","src":"2985:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2994:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2997:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2987:6:181"},"nodeType":"YulFunctionCall","src":"2987:12:181"},"nodeType":"YulExpressionStatement","src":"2987:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2960:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2969:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2956:3:181"},"nodeType":"YulFunctionCall","src":"2956:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2981:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2952:3:181"},"nodeType":"YulFunctionCall","src":"2952:32:181"},"nodeType":"YulIf","src":"2949:52:181"},{"nodeType":"YulVariableDeclaration","src":"3010:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3020:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3014:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3082:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3091:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3094:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3084:6:181"},"nodeType":"YulFunctionCall","src":"3084:12:181"},"nodeType":"YulExpressionStatement","src":"3084:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3066:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3053:12:181"},"nodeType":"YulFunctionCall","src":"3053:23:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3078:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3050:2:181"},"nodeType":"YulFunctionCall","src":"3050:31:181"},"nodeType":"YulIf","src":"3047:51:181"},{"nodeType":"YulVariableDeclaration","src":"3107:113:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3175:9:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3199:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3186:12:181"},"nodeType":"YulFunctionCall","src":"3186:23:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3171:3:181"},"nodeType":"YulFunctionCall","src":"3171:39:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3212:7:181"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"3133:37:181"},"nodeType":"YulFunctionCall","src":"3133:87:181"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"3111:8:181","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"3121:8:181","type":""}]},{"nodeType":"YulAssignment","src":"3229:18:181","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"3239:8:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3229:6:181"}]},{"nodeType":"YulAssignment","src":"3256:18:181","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"3266:8:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3256:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3283:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3314:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3325:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3310:3:181"},"nodeType":"YulFunctionCall","src":"3310:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3297:12:181"},"nodeType":"YulFunctionCall","src":"3297:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3287:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3356:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3365:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3368:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3358:6:181"},"nodeType":"YulFunctionCall","src":"3358:12:181"},"nodeType":"YulExpressionStatement","src":"3358:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3344:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3352:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3341:2:181"},"nodeType":"YulFunctionCall","src":"3341:14:181"},"nodeType":"YulIf","src":"3338:34:181"},{"nodeType":"YulVariableDeclaration","src":"3381:96:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3449:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"3460:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3445:3:181"},"nodeType":"YulFunctionCall","src":"3445:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3469:7:181"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"3407:37:181"},"nodeType":"YulFunctionCall","src":"3407:70:181"},"variables":[{"name":"value2_1","nodeType":"YulTypedName","src":"3385:8:181","type":""},{"name":"value3_1","nodeType":"YulTypedName","src":"3395:8:181","type":""}]},{"nodeType":"YulAssignment","src":"3486:18:181","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"3496:8:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3486:6:181"}]},{"nodeType":"YulAssignment","src":"3513:18:181","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"3523:8:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3513:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3540:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3573:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3584:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3569:3:181"},"nodeType":"YulFunctionCall","src":"3569:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3556:12:181"},"nodeType":"YulFunctionCall","src":"3556:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"3544:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3617:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3626:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3629:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3619:6:181"},"nodeType":"YulFunctionCall","src":"3619:12:181"},"nodeType":"YulExpressionStatement","src":"3619:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"3603:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3613:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3600:2:181"},"nodeType":"YulFunctionCall","src":"3600:16:181"},"nodeType":"YulIf","src":"3597:36:181"},{"nodeType":"YulVariableDeclaration","src":"3642:34:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3656:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"3667:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3652:3:181"},"nodeType":"YulFunctionCall","src":"3652:24:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"3646:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3724:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3733:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3736:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3726:6:181"},"nodeType":"YulFunctionCall","src":"3726:12:181"},"nodeType":"YulExpressionStatement","src":"3726:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3703:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3707:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3699:3:181"},"nodeType":"YulFunctionCall","src":"3699:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3714:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3695:3:181"},"nodeType":"YulFunctionCall","src":"3695:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3688:6:181"},"nodeType":"YulFunctionCall","src":"3688:35:181"},"nodeType":"YulIf","src":"3685:55:181"},{"nodeType":"YulVariableDeclaration","src":"3749:26:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3772:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3759:12:181"},"nodeType":"YulFunctionCall","src":"3759:16:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"3753:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3798:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"3800:16:181"},"nodeType":"YulFunctionCall","src":"3800:18:181"},"nodeType":"YulExpressionStatement","src":"3800:18:181"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3790:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3794:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3787:2:181"},"nodeType":"YulFunctionCall","src":"3787:10:181"},"nodeType":"YulIf","src":"3784:36:181"},{"nodeType":"YulVariableDeclaration","src":"3829:47:181","value":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3864:1:181","type":"","value":"5"},{"name":"_3","nodeType":"YulIdentifier","src":"3867:2:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3860:3:181"},"nodeType":"YulFunctionCall","src":"3860:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"3872:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3856:3:181"},"nodeType":"YulFunctionCall","src":"3856:19:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"3840:15:181"},"nodeType":"YulFunctionCall","src":"3840:36:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"3833:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3885:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"3898:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"3889:5:181","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"3917:3:181"},{"name":"_3","nodeType":"YulIdentifier","src":"3922:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3910:6:181"},"nodeType":"YulFunctionCall","src":"3910:15:181"},"nodeType":"YulExpressionStatement","src":"3910:15:181"},{"nodeType":"YulAssignment","src":"3934:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"3945:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"3950:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3941:3:181"},"nodeType":"YulFunctionCall","src":"3941:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"3934:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"3962:42:181","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3984:2:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3992:1:181","type":"","value":"5"},{"name":"_3","nodeType":"YulIdentifier","src":"3995:2:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3988:3:181"},"nodeType":"YulFunctionCall","src":"3988:10:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3980:3:181"},"nodeType":"YulFunctionCall","src":"3980:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"4001:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3976:3:181"},"nodeType":"YulFunctionCall","src":"3976:28:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"3966:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4036:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4045:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4048:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4038:6:181"},"nodeType":"YulFunctionCall","src":"4038:12:181"},"nodeType":"YulExpressionStatement","src":"4038:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"4019:6:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4027:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4016:2:181"},"nodeType":"YulFunctionCall","src":"4016:19:181"},"nodeType":"YulIf","src":"4013:39:181"},{"nodeType":"YulVariableDeclaration","src":"4061:22:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4076:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4080:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4072:3:181"},"nodeType":"YulFunctionCall","src":"4072:11:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"4065:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4148:624:181","statements":[{"body":{"nodeType":"YulBlock","src":"4191:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4200:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4203:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4193:6:181"},"nodeType":"YulFunctionCall","src":"4193:12:181"},"nodeType":"YulExpressionStatement","src":"4193:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4181:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4168:12:181"},"nodeType":"YulFunctionCall","src":"4168:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4187:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4165:2:181"},"nodeType":"YulFunctionCall","src":"4165:25:181"},"nodeType":"YulIf","src":"4162:45:181"},{"nodeType":"YulVariableDeclaration","src":"4220:36:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4234:2:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4251:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4238:12:181"},"nodeType":"YulFunctionCall","src":"4238:17:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4230:3:181"},"nodeType":"YulFunctionCall","src":"4230:26:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"4224:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4306:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4315:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4318:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4308:6:181"},"nodeType":"YulFunctionCall","src":"4308:12:181"},"nodeType":"YulExpressionStatement","src":"4308:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"4287:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4291:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4283:3:181"},"nodeType":"YulFunctionCall","src":"4283:11:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4296:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4279:3:181"},"nodeType":"YulFunctionCall","src":"4279:25:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4272:6:181"},"nodeType":"YulFunctionCall","src":"4272:33:181"},"nodeType":"YulIf","src":"4269:53:181"},{"nodeType":"YulVariableDeclaration","src":"4335:35:181","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"4362:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4366:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4358:3:181"},"nodeType":"YulFunctionCall","src":"4358:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4345:12:181"},"nodeType":"YulFunctionCall","src":"4345:25:181"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"4339:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4397:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"4399:16:181"},"nodeType":"YulFunctionCall","src":"4399:18:181"},"nodeType":"YulExpressionStatement","src":"4399:18:181"}]},"condition":{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"4389:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4393:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4386:2:181"},"nodeType":"YulFunctionCall","src":"4386:10:181"},"nodeType":"YulIf","src":"4383:36:181"},{"nodeType":"YulVariableDeclaration","src":"4432:66:181","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"4473:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4477:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4469:3:181"},"nodeType":"YulFunctionCall","src":"4469:13:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4488:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4484:3:181"},"nodeType":"YulFunctionCall","src":"4484:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4465:3:181"},"nodeType":"YulFunctionCall","src":"4465:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"4494:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4461:3:181"},"nodeType":"YulFunctionCall","src":"4461:36:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"4445:15:181"},"nodeType":"YulFunctionCall","src":"4445:53:181"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"4436:5:181","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"4518:5:181"},{"name":"_5","nodeType":"YulIdentifier","src":"4525:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4511:6:181"},"nodeType":"YulFunctionCall","src":"4511:17:181"},"nodeType":"YulExpressionStatement","src":"4511:17:181"},{"body":{"nodeType":"YulBlock","src":"4578:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4587:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4590:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4580:6:181"},"nodeType":"YulFunctionCall","src":"4580:12:181"},"nodeType":"YulExpressionStatement","src":"4580:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"4555:2:181"},{"name":"_5","nodeType":"YulIdentifier","src":"4559:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4551:3:181"},"nodeType":"YulFunctionCall","src":"4551:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4564:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4547:3:181"},"nodeType":"YulFunctionCall","src":"4547:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4569:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4544:2:181"},"nodeType":"YulFunctionCall","src":"4544:33:181"},"nodeType":"YulIf","src":"4541:53:181"},{"expression":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"4624:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"4631:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4620:3:181"},"nodeType":"YulFunctionCall","src":"4620:14:181"},{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"4640:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4644:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4636:3:181"},"nodeType":"YulFunctionCall","src":"4636:11:181"},{"name":"_5","nodeType":"YulIdentifier","src":"4649:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"4607:12:181"},"nodeType":"YulFunctionCall","src":"4607:45:181"},"nodeType":"YulExpressionStatement","src":"4607:45:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"4680:5:181"},{"name":"_5","nodeType":"YulIdentifier","src":"4687:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4676:3:181"},"nodeType":"YulFunctionCall","src":"4676:14:181"},{"kind":"number","nodeType":"YulLiteral","src":"4692:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4672:3:181"},"nodeType":"YulFunctionCall","src":"4672:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"4697:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4665:6:181"},"nodeType":"YulFunctionCall","src":"4665:34:181"},"nodeType":"YulExpressionStatement","src":"4665:34:181"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4719:3:181"},{"name":"array","nodeType":"YulIdentifier","src":"4724:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4712:6:181"},"nodeType":"YulFunctionCall","src":"4712:18:181"},"nodeType":"YulExpressionStatement","src":"4712:18:181"},{"nodeType":"YulAssignment","src":"4743:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4754:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"4759:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4750:3:181"},"nodeType":"YulFunctionCall","src":"4750:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"4743:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4103:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"4108:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4100:2:181"},"nodeType":"YulFunctionCall","src":"4100:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4116:23:181","statements":[{"nodeType":"YulAssignment","src":"4118:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4129:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"4134:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4125:3:181"},"nodeType":"YulFunctionCall","src":"4125:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"4118:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"4096:3:181","statements":[]},"src":"4092:680:181"},{"nodeType":"YulAssignment","src":"4781:15:181","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"4791:5:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"4781:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_bytes_memory_ptr_$dyn_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2873:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2884:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2896:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2904:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2912:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2920:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2928:6:181","type":""}],"src":"2731:2071:181"},{"body":{"nodeType":"YulBlock","src":"4850:51:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4867:3:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4876:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"4883:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4872:3:181"},"nodeType":"YulFunctionCall","src":"4872:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4860:6:181"},"nodeType":"YulFunctionCall","src":"4860:35:181"},"nodeType":"YulExpressionStatement","src":"4860:35:181"}]},"name":"abi_encode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4834:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4841:3:181","type":""}],"src":"4807:94:181"},{"body":{"nodeType":"YulBlock","src":"5005:93:181","statements":[{"nodeType":"YulAssignment","src":"5015:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5027:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5038:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5023:3:181"},"nodeType":"YulFunctionCall","src":"5023:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5015:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5057:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5072:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5080:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5068:3:181"},"nodeType":"YulFunctionCall","src":"5068:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5050:6:181"},"nodeType":"YulFunctionCall","src":"5050:42:181"},"nodeType":"YulExpressionStatement","src":"5050:42:181"}]},"name":"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4974:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4985:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4996:4:181","type":""}],"src":"4906:192:181"},{"body":{"nodeType":"YulBlock","src":"5232:190:181","statements":[{"nodeType":"YulAssignment","src":"5242:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5254:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5265:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5250:3:181"},"nodeType":"YulFunctionCall","src":"5250:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5242:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"5277:44:181","value":{"kind":"number","nodeType":"YulLiteral","src":"5287:34:181","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5281:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5337:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5352:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5360:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5348:3:181"},"nodeType":"YulFunctionCall","src":"5348:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5330:6:181"},"nodeType":"YulFunctionCall","src":"5330:34:181"},"nodeType":"YulExpressionStatement","src":"5330:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5384:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5395:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5380:3:181"},"nodeType":"YulFunctionCall","src":"5380:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"5404:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5412:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5400:3:181"},"nodeType":"YulFunctionCall","src":"5400:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5373:6:181"},"nodeType":"YulFunctionCall","src":"5373:43:181"},"nodeType":"YulExpressionStatement","src":"5373:43:181"}]},"name":"abi_encode_tuple_t_uint128_t_uint128__to_t_uint128_t_uint128__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5193:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5204:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5212:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5223:4:181","type":""}],"src":"5103:319:181"},{"body":{"nodeType":"YulBlock","src":"5513:166:181","statements":[{"body":{"nodeType":"YulBlock","src":"5559:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5568:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5571:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5561:6:181"},"nodeType":"YulFunctionCall","src":"5561:12:181"},"nodeType":"YulExpressionStatement","src":"5561:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5534:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5543:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5530:3:181"},"nodeType":"YulFunctionCall","src":"5530:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5555:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5526:3:181"},"nodeType":"YulFunctionCall","src":"5526:32:181"},"nodeType":"YulIf","src":"5523:52:181"},{"nodeType":"YulAssignment","src":"5584:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5612:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"5594:17:181"},"nodeType":"YulFunctionCall","src":"5594:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5584:6:181"}]},{"nodeType":"YulAssignment","src":"5631:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5658:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5669:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5654:3:181"},"nodeType":"YulFunctionCall","src":"5654:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5641:12:181"},"nodeType":"YulFunctionCall","src":"5641:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5631:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5471:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5482:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5494:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5502:6:181","type":""}],"src":"5427:252:181"},{"body":{"nodeType":"YulBlock","src":"5813:119:181","statements":[{"nodeType":"YulAssignment","src":"5823:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5835:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5846:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5831:3:181"},"nodeType":"YulFunctionCall","src":"5831:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5823:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5865:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"5876:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5858:6:181"},"nodeType":"YulFunctionCall","src":"5858:25:181"},"nodeType":"YulExpressionStatement","src":"5858:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5903:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5914:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5899:3:181"},"nodeType":"YulFunctionCall","src":"5899:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"5919:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5892:6:181"},"nodeType":"YulFunctionCall","src":"5892:34:181"},"nodeType":"YulExpressionStatement","src":"5892:34:181"}]},"name":"abi_encode_tuple_t_bytes32_t_uint256__to_t_bytes32_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5774:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5785:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5793:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5804:4:181","type":""}],"src":"5684:248:181"},{"body":{"nodeType":"YulBlock","src":"6065:102:181","statements":[{"nodeType":"YulAssignment","src":"6075:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6087:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6098:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6083:3:181"},"nodeType":"YulFunctionCall","src":"6083:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6075:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6117:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6132:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6148:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6153:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6144:3:181"},"nodeType":"YulFunctionCall","src":"6144:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"6157:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6140:3:181"},"nodeType":"YulFunctionCall","src":"6140:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6128:3:181"},"nodeType":"YulFunctionCall","src":"6128:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6110:6:181"},"nodeType":"YulFunctionCall","src":"6110:51:181"},"nodeType":"YulExpressionStatement","src":"6110:51:181"}]},"name":"abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6034:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6045:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6056:4:181","type":""}],"src":"5937:230:181"},{"body":{"nodeType":"YulBlock","src":"6297:102:181","statements":[{"nodeType":"YulAssignment","src":"6307:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6319:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6330:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6315:3:181"},"nodeType":"YulFunctionCall","src":"6315:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6307:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6349:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6364:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6380:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6385:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6376:3:181"},"nodeType":"YulFunctionCall","src":"6376:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"6389:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6372:3:181"},"nodeType":"YulFunctionCall","src":"6372:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6360:3:181"},"nodeType":"YulFunctionCall","src":"6360:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6342:6:181"},"nodeType":"YulFunctionCall","src":"6342:51:181"},"nodeType":"YulExpressionStatement","src":"6342:51:181"}]},"name":"abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6266:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6277:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6288:4:181","type":""}],"src":"6172:227:181"},{"body":{"nodeType":"YulBlock","src":"6505:117:181","statements":[{"nodeType":"YulAssignment","src":"6515:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6527:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6538:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6523:3:181"},"nodeType":"YulFunctionCall","src":"6523:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6515:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6557:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6572:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6580:34:181","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6568:3:181"},"nodeType":"YulFunctionCall","src":"6568:47:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6550:6:181"},"nodeType":"YulFunctionCall","src":"6550:66:181"},"nodeType":"YulExpressionStatement","src":"6550:66:181"}]},"name":"abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6474:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6485:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6496:4:181","type":""}],"src":"6404:218:181"},{"body":{"nodeType":"YulBlock","src":"6676:124:181","statements":[{"nodeType":"YulAssignment","src":"6686:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6708:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6695:12:181"},"nodeType":"YulFunctionCall","src":"6695:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"6686:5:181"}]},{"body":{"nodeType":"YulBlock","src":"6778:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6787:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6790:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6780:6:181"},"nodeType":"YulFunctionCall","src":"6780:12:181"},"nodeType":"YulExpressionStatement","src":"6780:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6737:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6748:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6763:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6768:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6759:3:181"},"nodeType":"YulFunctionCall","src":"6759:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"6772:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6755:3:181"},"nodeType":"YulFunctionCall","src":"6755:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6744:3:181"},"nodeType":"YulFunctionCall","src":"6744:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"6734:2:181"},"nodeType":"YulFunctionCall","src":"6734:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6727:6:181"},"nodeType":"YulFunctionCall","src":"6727:50:181"},"nodeType":"YulIf","src":"6724:70:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"6655:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"6666:5:181","type":""}],"src":"6627:173:181"},{"body":{"nodeType":"YulBlock","src":"6875:116:181","statements":[{"body":{"nodeType":"YulBlock","src":"6921:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6930:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6933:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6923:6:181"},"nodeType":"YulFunctionCall","src":"6923:12:181"},"nodeType":"YulExpressionStatement","src":"6923:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6896:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6905:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6892:3:181"},"nodeType":"YulFunctionCall","src":"6892:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"6917:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6888:3:181"},"nodeType":"YulFunctionCall","src":"6888:32:181"},"nodeType":"YulIf","src":"6885:52:181"},{"nodeType":"YulAssignment","src":"6946:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6975:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"6956:18:181"},"nodeType":"YulFunctionCall","src":"6956:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6946:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6841:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6852:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6864:6:181","type":""}],"src":"6805:186:181"},{"body":{"nodeType":"YulBlock","src":"7082:172:181","statements":[{"body":{"nodeType":"YulBlock","src":"7128:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7137:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7140:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7130:6:181"},"nodeType":"YulFunctionCall","src":"7130:12:181"},"nodeType":"YulExpressionStatement","src":"7130:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7103:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7112:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7099:3:181"},"nodeType":"YulFunctionCall","src":"7099:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7124:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7095:3:181"},"nodeType":"YulFunctionCall","src":"7095:32:181"},"nodeType":"YulIf","src":"7092:52:181"},{"nodeType":"YulAssignment","src":"7153:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7181:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"7163:17:181"},"nodeType":"YulFunctionCall","src":"7163:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7153:6:181"}]},{"nodeType":"YulAssignment","src":"7200:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7233:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7244:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7229:3:181"},"nodeType":"YulFunctionCall","src":"7229:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"7210:18:181"},"nodeType":"YulFunctionCall","src":"7210:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7200:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7040:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7051:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7063:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7071:6:181","type":""}],"src":"6996:258:181"},{"body":{"nodeType":"YulBlock","src":"7415:616:181","statements":[{"body":{"nodeType":"YulBlock","src":"7461:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7470:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7473:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7463:6:181"},"nodeType":"YulFunctionCall","src":"7463:12:181"},"nodeType":"YulExpressionStatement","src":"7463:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7436:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7445:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7432:3:181"},"nodeType":"YulFunctionCall","src":"7432:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7457:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7428:3:181"},"nodeType":"YulFunctionCall","src":"7428:32:181"},"nodeType":"YulIf","src":"7425:52:181"},{"nodeType":"YulVariableDeclaration","src":"7486:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7513:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7500:12:181"},"nodeType":"YulFunctionCall","src":"7500:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"7490:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7532:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7542:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7536:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7587:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7596:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7599:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7589:6:181"},"nodeType":"YulFunctionCall","src":"7589:12:181"},"nodeType":"YulExpressionStatement","src":"7589:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7575:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7583:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7572:2:181"},"nodeType":"YulFunctionCall","src":"7572:14:181"},"nodeType":"YulIf","src":"7569:34:181"},{"nodeType":"YulVariableDeclaration","src":"7612:96:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7680:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"7691:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7676:3:181"},"nodeType":"YulFunctionCall","src":"7676:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"7700:7:181"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"7638:37:181"},"nodeType":"YulFunctionCall","src":"7638:70:181"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"7616:8:181","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"7626:8:181","type":""}]},{"nodeType":"YulAssignment","src":"7717:18:181","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"7727:8:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7717:6:181"}]},{"nodeType":"YulAssignment","src":"7744:18:181","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"7754:8:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7744:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"7771:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7804:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7815:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7800:3:181"},"nodeType":"YulFunctionCall","src":"7800:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7787:12:181"},"nodeType":"YulFunctionCall","src":"7787:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"7775:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7848:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7857:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7860:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7850:6:181"},"nodeType":"YulFunctionCall","src":"7850:12:181"},"nodeType":"YulExpressionStatement","src":"7850:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"7834:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7844:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7831:2:181"},"nodeType":"YulFunctionCall","src":"7831:16:181"},"nodeType":"YulIf","src":"7828:36:181"},{"nodeType":"YulVariableDeclaration","src":"7873:98:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7941:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"7952:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7937:3:181"},"nodeType":"YulFunctionCall","src":"7937:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"7963:7:181"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"7899:37:181"},"nodeType":"YulFunctionCall","src":"7899:72:181"},"variables":[{"name":"value2_1","nodeType":"YulTypedName","src":"7877:8:181","type":""},{"name":"value3_1","nodeType":"YulTypedName","src":"7887:8:181","type":""}]},{"nodeType":"YulAssignment","src":"7980:18:181","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"7990:8:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7980:6:181"}]},{"nodeType":"YulAssignment","src":"8007:18:181","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"8017:8:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"8007:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_uint32_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7357:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7368:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7380:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7388:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7396:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7404:6:181","type":""}],"src":"7259:772:181"},{"body":{"nodeType":"YulBlock","src":"8113:73:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8130:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"8135:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8123:6:181"},"nodeType":"YulFunctionCall","src":"8123:19:181"},"nodeType":"YulExpressionStatement","src":"8123:19:181"},{"nodeType":"YulAssignment","src":"8151:29:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8170:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"8175:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8166:3:181"},"nodeType":"YulFunctionCall","src":"8166:14:181"},"variableNames":[{"name":"updated_pos","nodeType":"YulIdentifier","src":"8151:11:181"}]}]},"name":"array_storeLengthForEncoding_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"8081:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"8086:6:181","type":""}],"returnVariables":[{"name":"updated_pos","nodeType":"YulTypedName","src":"8097:11:181","type":""}],"src":"8036:150:181"},{"body":{"nodeType":"YulBlock","src":"8365:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8382:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8393:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8375:6:181"},"nodeType":"YulFunctionCall","src":"8375:21:181"},"nodeType":"YulExpressionStatement","src":"8375:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8416:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8427:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8412:3:181"},"nodeType":"YulFunctionCall","src":"8412:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8432:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8405:6:181"},"nodeType":"YulFunctionCall","src":"8405:30:181"},"nodeType":"YulExpressionStatement","src":"8405:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8455:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8466:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8451:3:181"},"nodeType":"YulFunctionCall","src":"8451:18:181"},{"hexValue":"2164656c6179426c6f636b73","kind":"string","nodeType":"YulLiteral","src":"8471:14:181","type":"","value":"!delayBlocks"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8444:6:181"},"nodeType":"YulFunctionCall","src":"8444:42:181"},"nodeType":"YulExpressionStatement","src":"8444:42:181"},{"nodeType":"YulAssignment","src":"8495:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8507:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8518:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8503:3:181"},"nodeType":"YulFunctionCall","src":"8503:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8495:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8342:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8356:4:181","type":""}],"src":"8191:336:181"},{"body":{"nodeType":"YulBlock","src":"8661:119:181","statements":[{"nodeType":"YulAssignment","src":"8671:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8683:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8694:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8679:3:181"},"nodeType":"YulFunctionCall","src":"8679:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8671:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8713:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"8724:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8706:6:181"},"nodeType":"YulFunctionCall","src":"8706:25:181"},"nodeType":"YulExpressionStatement","src":"8706:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8751:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8762:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8747:3:181"},"nodeType":"YulFunctionCall","src":"8747:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"8767:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8740:6:181"},"nodeType":"YulFunctionCall","src":"8740:34:181"},"nodeType":"YulExpressionStatement","src":"8740:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8622:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8633:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8641:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8652:4:181","type":""}],"src":"8532:248:181"},{"body":{"nodeType":"YulBlock","src":"8946:475:181","statements":[{"nodeType":"YulVariableDeclaration","src":"8956:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8966:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8960:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8977:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8995:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9006:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8991:3:181"},"nodeType":"YulFunctionCall","src":"8991:18:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"8981:6:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9025:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9036:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9018:6:181"},"nodeType":"YulFunctionCall","src":"9018:21:181"},"nodeType":"YulExpressionStatement","src":"9018:21:181"},{"nodeType":"YulVariableDeclaration","src":"9048:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"9059:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"9052:3:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"9081:6:181"},{"name":"value1","nodeType":"YulIdentifier","src":"9089:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9074:6:181"},"nodeType":"YulFunctionCall","src":"9074:22:181"},"nodeType":"YulExpressionStatement","src":"9074:22:181"},{"nodeType":"YulAssignment","src":"9105:25:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9116:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9127:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9112:3:181"},"nodeType":"YulFunctionCall","src":"9112:18:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"9105:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"9139:20:181","value":{"name":"value0","nodeType":"YulIdentifier","src":"9153:6:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"9143:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9168:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"9177:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"9172:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9236:159:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9257:3:181"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"9285:6:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"9266:18:181"},"nodeType":"YulFunctionCall","src":"9266:26:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9302:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"9307:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9298:3:181"},"nodeType":"YulFunctionCall","src":"9298:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"9311:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9294:3:181"},"nodeType":"YulFunctionCall","src":"9294:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9262:3:181"},"nodeType":"YulFunctionCall","src":"9262:52:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9250:6:181"},"nodeType":"YulFunctionCall","src":"9250:65:181"},"nodeType":"YulExpressionStatement","src":"9250:65:181"},{"nodeType":"YulAssignment","src":"9328:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9339:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9344:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9335:3:181"},"nodeType":"YulFunctionCall","src":"9335:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"9328:3:181"}]},{"nodeType":"YulAssignment","src":"9360:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"9374:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9382:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9370:3:181"},"nodeType":"YulFunctionCall","src":"9370:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"9360:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9198:1:181"},{"name":"value1","nodeType":"YulIdentifier","src":"9201:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9195:2:181"},"nodeType":"YulFunctionCall","src":"9195:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"9209:18:181","statements":[{"nodeType":"YulAssignment","src":"9211:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9220:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"9223:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9216:3:181"},"nodeType":"YulFunctionCall","src":"9216:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"9211:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"9191:3:181","statements":[]},"src":"9187:208:181"},{"nodeType":"YulAssignment","src":"9404:11:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"9412:3:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9404:4:181"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_calldata_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8907:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8918:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8926:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8937:4:181","type":""}],"src":"8785:636:181"},{"body":{"nodeType":"YulBlock","src":"9600:161:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9617:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9628:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9610:6:181"},"nodeType":"YulFunctionCall","src":"9610:21:181"},"nodeType":"YulExpressionStatement","src":"9610:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9651:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9662:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9647:3:181"},"nodeType":"YulFunctionCall","src":"9647:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9667:2:181","type":"","value":"11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9640:6:181"},"nodeType":"YulFunctionCall","src":"9640:30:181"},"nodeType":"YulExpressionStatement","src":"9640:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9690:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9701:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9686:3:181"},"nodeType":"YulFunctionCall","src":"9686:18:181"},{"hexValue":"21636f6e6e6563746f7273","kind":"string","nodeType":"YulLiteral","src":"9706:13:181","type":"","value":"!connectors"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9679:6:181"},"nodeType":"YulFunctionCall","src":"9679:41:181"},"nodeType":"YulExpressionStatement","src":"9679:41:181"},{"nodeType":"YulAssignment","src":"9729:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9741:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9752:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9737:3:181"},"nodeType":"YulFunctionCall","src":"9737:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9729:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2d87153ecfbf898378d31617525dca29b55718c58d32c8c1caea6770b56c7d98__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9577:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9591:4:181","type":""}],"src":"9426:335:181"},{"body":{"nodeType":"YulBlock","src":"9940:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9957:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9968:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9950:6:181"},"nodeType":"YulFunctionCall","src":"9950:21:181"},"nodeType":"YulExpressionStatement","src":"9950:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9991:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10002:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9987:3:181"},"nodeType":"YulFunctionCall","src":"9987:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10007:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9980:6:181"},"nodeType":"YulFunctionCall","src":"9980:30:181"},"nodeType":"YulExpressionStatement","src":"9980:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10030:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10041:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10026:3:181"},"nodeType":"YulFunctionCall","src":"10026:18:181"},{"hexValue":"21737570706f72746564","kind":"string","nodeType":"YulLiteral","src":"10046:12:181","type":"","value":"!supported"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10019:6:181"},"nodeType":"YulFunctionCall","src":"10019:40:181"},"nodeType":"YulExpressionStatement","src":"10019:40:181"},{"nodeType":"YulAssignment","src":"10068:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10080:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10091:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10076:3:181"},"nodeType":"YulFunctionCall","src":"10076:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10068:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_eead9a749bb70fe1ce8febf2e6a2513dd4a5ce75eba52d12379ec95d317c3d3f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9917:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9931:4:181","type":""}],"src":"9766:334:181"},{"body":{"nodeType":"YulBlock","src":"10137:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10154:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10161:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"10166:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10157:3:181"},"nodeType":"YulFunctionCall","src":"10157:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10147:6:181"},"nodeType":"YulFunctionCall","src":"10147:31:181"},"nodeType":"YulExpressionStatement","src":"10147:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10194:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10197:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10187:6:181"},"nodeType":"YulFunctionCall","src":"10187:15:181"},"nodeType":"YulExpressionStatement","src":"10187:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10218:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10221:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10211:6:181"},"nodeType":"YulFunctionCall","src":"10211:15:181"},"nodeType":"YulExpressionStatement","src":"10211:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"10105:127:181"},{"body":{"nodeType":"YulBlock","src":"10286:79:181","statements":[{"nodeType":"YulAssignment","src":"10296:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10308:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"10311:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10304:3:181"},"nodeType":"YulFunctionCall","src":"10304:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"10296:4:181"}]},{"body":{"nodeType":"YulBlock","src":"10337:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10339:16:181"},"nodeType":"YulFunctionCall","src":"10339:18:181"},"nodeType":"YulExpressionStatement","src":"10339:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"10328:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"10334:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10325:2:181"},"nodeType":"YulFunctionCall","src":"10325:11:181"},"nodeType":"YulIf","src":"10322:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10268:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"10271:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"10277:4:181","type":""}],"src":"10237:128:181"},{"body":{"nodeType":"YulBlock","src":"10544:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10561:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10572:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10554:6:181"},"nodeType":"YulFunctionCall","src":"10554:21:181"},"nodeType":"YulExpressionStatement","src":"10554:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10595:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10606:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10591:3:181"},"nodeType":"YulFunctionCall","src":"10591:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10611:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10584:6:181"},"nodeType":"YulFunctionCall","src":"10584:30:181"},"nodeType":"YulExpressionStatement","src":"10584:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10634:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10645:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10630:3:181"},"nodeType":"YulFunctionCall","src":"10630:18:181"},{"hexValue":"696e76616c6964206c656e67746873","kind":"string","nodeType":"YulLiteral","src":"10650:17:181","type":"","value":"invalid lengths"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10623:6:181"},"nodeType":"YulFunctionCall","src":"10623:45:181"},"nodeType":"YulExpressionStatement","src":"10623:45:181"},{"nodeType":"YulAssignment","src":"10677:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10689:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10700:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10685:3:181"},"nodeType":"YulFunctionCall","src":"10685:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10677:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_79659e2a9d2f01c1bf48982e1eb3a21b05a6255fb73515db14625380c6699c98__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10521:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10535:4:181","type":""}],"src":"10370:339:181"},{"body":{"nodeType":"YulBlock","src":"10888:164:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10905:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10916:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10898:6:181"},"nodeType":"YulFunctionCall","src":"10898:21:181"},"nodeType":"YulExpressionStatement","src":"10898:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10939:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10950:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10935:3:181"},"nodeType":"YulFunctionCall","src":"10935:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10955:2:181","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10928:6:181"},"nodeType":"YulFunctionCall","src":"10928:30:181"},"nodeType":"YulExpressionStatement","src":"10928:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10978:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10989:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10974:3:181"},"nodeType":"YulFunctionCall","src":"10974:18:181"},{"hexValue":"726564756e64616e7420726f6f74","kind":"string","nodeType":"YulLiteral","src":"10994:16:181","type":"","value":"redundant root"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10967:6:181"},"nodeType":"YulFunctionCall","src":"10967:44:181"},"nodeType":"YulExpressionStatement","src":"10967:44:181"},{"nodeType":"YulAssignment","src":"11020:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11032:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11043:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11028:3:181"},"nodeType":"YulFunctionCall","src":"11028:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11020:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e18affcae4aea5951cc6c3a501fd639ac8a06ed7c7513fba47119a1500ba1b8d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10865:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10879:4:181","type":""}],"src":"10714:338:181"},{"body":{"nodeType":"YulBlock","src":"11089:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11106:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11113:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"11118:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11109:3:181"},"nodeType":"YulFunctionCall","src":"11109:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11099:6:181"},"nodeType":"YulFunctionCall","src":"11099:31:181"},"nodeType":"YulExpressionStatement","src":"11099:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11146:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"11149:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11139:6:181"},"nodeType":"YulFunctionCall","src":"11139:15:181"},"nodeType":"YulExpressionStatement","src":"11139:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11170:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11173:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11163:6:181"},"nodeType":"YulFunctionCall","src":"11163:15:181"},"nodeType":"YulExpressionStatement","src":"11163:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"11057:127:181"},{"body":{"nodeType":"YulBlock","src":"11308:63:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11325:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"11330:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11318:6:181"},"nodeType":"YulFunctionCall","src":"11318:19:181"},"nodeType":"YulExpressionStatement","src":"11318:19:181"},{"nodeType":"YulAssignment","src":"11346:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11357:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"11362:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11353:3:181"},"nodeType":"YulFunctionCall","src":"11353:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"11346:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"11284:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11289:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"11300:3:181","type":""}],"src":"11189:182:181"},{"body":{"nodeType":"YulBlock","src":"11425:373:181","statements":[{"nodeType":"YulVariableDeclaration","src":"11435:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11455:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11449:5:181"},"nodeType":"YulFunctionCall","src":"11449:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"11439:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11477:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"11482:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11470:6:181"},"nodeType":"YulFunctionCall","src":"11470:19:181"},"nodeType":"YulExpressionStatement","src":"11470:19:181"},{"nodeType":"YulVariableDeclaration","src":"11498:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"11507:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"11502:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"11569:110:181","statements":[{"nodeType":"YulVariableDeclaration","src":"11583:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"11593:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11587:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11625:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"11630:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11621:3:181"},"nodeType":"YulFunctionCall","src":"11621:11:181"},{"name":"_1","nodeType":"YulIdentifier","src":"11634:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11617:3:181"},"nodeType":"YulFunctionCall","src":"11617:20:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11653:5:181"},{"name":"i","nodeType":"YulIdentifier","src":"11660:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11649:3:181"},"nodeType":"YulFunctionCall","src":"11649:13:181"},{"name":"_1","nodeType":"YulIdentifier","src":"11664:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11645:3:181"},"nodeType":"YulFunctionCall","src":"11645:22:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11639:5:181"},"nodeType":"YulFunctionCall","src":"11639:29:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11610:6:181"},"nodeType":"YulFunctionCall","src":"11610:59:181"},"nodeType":"YulExpressionStatement","src":"11610:59:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11528:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"11531:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"11525:2:181"},"nodeType":"YulFunctionCall","src":"11525:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"11539:21:181","statements":[{"nodeType":"YulAssignment","src":"11541:17:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11550:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"11553:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11546:3:181"},"nodeType":"YulFunctionCall","src":"11546:12:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"11541:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"11521:3:181","statements":[]},"src":"11517:162:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11703:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"11708:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11699:3:181"},"nodeType":"YulFunctionCall","src":"11699:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"11717:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11695:3:181"},"nodeType":"YulFunctionCall","src":"11695:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"11724:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11688:6:181"},"nodeType":"YulFunctionCall","src":"11688:38:181"},"nodeType":"YulExpressionStatement","src":"11688:38:181"},{"nodeType":"YulAssignment","src":"11735:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11750:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"11763:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11771:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11759:3:181"},"nodeType":"YulFunctionCall","src":"11759:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11780:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11776:3:181"},"nodeType":"YulFunctionCall","src":"11776:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11755:3:181"},"nodeType":"YulFunctionCall","src":"11755:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11746:3:181"},"nodeType":"YulFunctionCall","src":"11746:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"11787:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11742:3:181"},"nodeType":"YulFunctionCall","src":"11742:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"11735:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"11402:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"11409:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"11417:3:181","type":""}],"src":"11376:422:181"},{"body":{"nodeType":"YulBlock","src":"11968:212:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11985:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11996:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11978:6:181"},"nodeType":"YulFunctionCall","src":"11978:21:181"},"nodeType":"YulExpressionStatement","src":"11978:21:181"},{"nodeType":"YulVariableDeclaration","src":"12008:58:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12039:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12051:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12062:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12047:3:181"},"nodeType":"YulFunctionCall","src":"12047:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"12022:16:181"},"nodeType":"YulFunctionCall","src":"12022:44:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"12012:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12086:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12097:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12082:3:181"},"nodeType":"YulFunctionCall","src":"12082:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"12106:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"12114:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12102:3:181"},"nodeType":"YulFunctionCall","src":"12102:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12075:6:181"},"nodeType":"YulFunctionCall","src":"12075:50:181"},"nodeType":"YulExpressionStatement","src":"12075:50:181"},{"nodeType":"YulAssignment","src":"12134:40:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12159:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"12167:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"12142:16:181"},"nodeType":"YulFunctionCall","src":"12142:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12134:4:181"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11929:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11940:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11948:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11959:4:181","type":""}],"src":"11803:377:181"},{"body":{"nodeType":"YulBlock","src":"12312:162:181","statements":[{"nodeType":"YulAssignment","src":"12322:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12334:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12345:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12330:3:181"},"nodeType":"YulFunctionCall","src":"12330:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12322:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12364:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12379:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"12387:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12375:3:181"},"nodeType":"YulFunctionCall","src":"12375:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12357:6:181"},"nodeType":"YulFunctionCall","src":"12357:42:181"},"nodeType":"YulExpressionStatement","src":"12357:42:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12419:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12430:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12415:3:181"},"nodeType":"YulFunctionCall","src":"12415:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12439:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12455:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"12460:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12451:3:181"},"nodeType":"YulFunctionCall","src":"12451:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"12464:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12447:3:181"},"nodeType":"YulFunctionCall","src":"12447:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12435:3:181"},"nodeType":"YulFunctionCall","src":"12435:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12408:6:181"},"nodeType":"YulFunctionCall","src":"12408:60:181"},"nodeType":"YulExpressionStatement","src":"12408:60:181"}]},"name":"abi_encode_tuple_t_uint32_t_address__to_t_uint32_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12273:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12284:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12292:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12303:4:181","type":""}],"src":"12185:289:181"},{"body":{"nodeType":"YulBlock","src":"12636:162:181","statements":[{"nodeType":"YulAssignment","src":"12646:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12658:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12669:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12654:3:181"},"nodeType":"YulFunctionCall","src":"12654:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12646:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12688:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"12699:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12681:6:181"},"nodeType":"YulFunctionCall","src":"12681:25:181"},"nodeType":"YulExpressionStatement","src":"12681:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12726:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12737:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12722:3:181"},"nodeType":"YulFunctionCall","src":"12722:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"12742:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12715:6:181"},"nodeType":"YulFunctionCall","src":"12715:34:181"},"nodeType":"YulExpressionStatement","src":"12715:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12769:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12780:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12765:3:181"},"nodeType":"YulFunctionCall","src":"12765:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"12785:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12758:6:181"},"nodeType":"YulFunctionCall","src":"12758:34:181"},"nodeType":"YulExpressionStatement","src":"12758:34:181"}]},"name":"abi_encode_tuple_t_bytes32_t_uint256_t_bytes32__to_t_bytes32_t_uint256_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12589:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12600:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12608:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12616:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12627:4:181","type":""}],"src":"12479:319:181"},{"body":{"nodeType":"YulBlock","src":"12881:199:181","statements":[{"body":{"nodeType":"YulBlock","src":"12927:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12936:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12939:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12929:6:181"},"nodeType":"YulFunctionCall","src":"12929:12:181"},"nodeType":"YulExpressionStatement","src":"12929:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12902:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"12911:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12898:3:181"},"nodeType":"YulFunctionCall","src":"12898:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"12923:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12894:3:181"},"nodeType":"YulFunctionCall","src":"12894:32:181"},"nodeType":"YulIf","src":"12891:52:181"},{"nodeType":"YulVariableDeclaration","src":"12952:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12971:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12965:5:181"},"nodeType":"YulFunctionCall","src":"12965:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12956:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"13034:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13043:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13046:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13036:6:181"},"nodeType":"YulFunctionCall","src":"13036:12:181"},"nodeType":"YulExpressionStatement","src":"13036:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13003:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13024:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13017:6:181"},"nodeType":"YulFunctionCall","src":"13017:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13010:6:181"},"nodeType":"YulFunctionCall","src":"13010:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"13000:2:181"},"nodeType":"YulFunctionCall","src":"13000:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12993:6:181"},"nodeType":"YulFunctionCall","src":"12993:40:181"},"nodeType":"YulIf","src":"12990:60:181"},{"nodeType":"YulAssignment","src":"13059:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"13069:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13059:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12847:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12858:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12870:6:181","type":""}],"src":"12803:277:181"},{"body":{"nodeType":"YulBlock","src":"13259:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13276:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13287:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13269:6:181"},"nodeType":"YulFunctionCall","src":"13269:21:181"},"nodeType":"YulExpressionStatement","src":"13269:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13310:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13321:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13306:3:181"},"nodeType":"YulFunctionCall","src":"13306:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13326:1:181","type":"","value":"8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13299:6:181"},"nodeType":"YulFunctionCall","src":"13299:29:181"},"nodeType":"YulExpressionStatement","src":"13299:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13348:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13359:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13344:3:181"},"nodeType":"YulFunctionCall","src":"13344:18:181"},{"hexValue":"2177617463686572","kind":"string","nodeType":"YulLiteral","src":"13364:10:181","type":"","value":"!watcher"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13337:6:181"},"nodeType":"YulFunctionCall","src":"13337:38:181"},"nodeType":"YulExpressionStatement","src":"13337:38:181"},{"nodeType":"YulAssignment","src":"13384:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13396:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13407:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13392:3:181"},"nodeType":"YulFunctionCall","src":"13392:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13384:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13236:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13250:4:181","type":""}],"src":"13085:331:181"},{"body":{"nodeType":"YulBlock","src":"13595:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13612:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13623:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13605:6:181"},"nodeType":"YulFunctionCall","src":"13605:21:181"},"nodeType":"YulExpressionStatement","src":"13605:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13646:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13657:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13642:3:181"},"nodeType":"YulFunctionCall","src":"13642:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13662:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13635:6:181"},"nodeType":"YulFunctionCall","src":"13635:30:181"},"nodeType":"YulExpressionStatement","src":"13635:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13685:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13696:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13681:3:181"},"nodeType":"YulFunctionCall","src":"13681:18:181"},{"hexValue":"21636f6e6e6563746f72","kind":"string","nodeType":"YulLiteral","src":"13701:12:181","type":"","value":"!connector"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13674:6:181"},"nodeType":"YulFunctionCall","src":"13674:40:181"},"nodeType":"YulExpressionStatement","src":"13674:40:181"},{"nodeType":"YulAssignment","src":"13723:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13735:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13746:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13731:3:181"},"nodeType":"YulFunctionCall","src":"13731:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13723:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f07da7b975140f505677e7936eeabdf78b829042e2b339dd9ec88a01bc429624__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13572:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13586:4:181","type":""}],"src":"13421:334:181"},{"body":{"nodeType":"YulBlock","src":"13915:220:181","statements":[{"nodeType":"YulAssignment","src":"13925:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13937:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13948:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13933:3:181"},"nodeType":"YulFunctionCall","src":"13933:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13925:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13967:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13982:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"13990:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13978:3:181"},"nodeType":"YulFunctionCall","src":"13978:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13960:6:181"},"nodeType":"YulFunctionCall","src":"13960:42:181"},"nodeType":"YulExpressionStatement","src":"13960:42:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14022:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14033:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14018:3:181"},"nodeType":"YulFunctionCall","src":"14018:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"14038:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14011:6:181"},"nodeType":"YulFunctionCall","src":"14011:34:181"},"nodeType":"YulExpressionStatement","src":"14011:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14065:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14076:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14061:3:181"},"nodeType":"YulFunctionCall","src":"14061:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"14085:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"14093:34:181","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14081:3:181"},"nodeType":"YulFunctionCall","src":"14081:47:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14054:6:181"},"nodeType":"YulFunctionCall","src":"14054:75:181"},"nodeType":"YulExpressionStatement","src":"14054:75:181"}]},"name":"abi_encode_tuple_t_uint32_t_bytes32_t_uint128__to_t_uint32_t_bytes32_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13868:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13879:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13887:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13895:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13906:4:181","type":""}],"src":"13760:375:181"},{"body":{"nodeType":"YulBlock","src":"14238:147:181","statements":[{"body":{"nodeType":"YulBlock","src":"14284:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14293:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14296:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14286:6:181"},"nodeType":"YulFunctionCall","src":"14286:12:181"},"nodeType":"YulExpressionStatement","src":"14286:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14259:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"14268:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14255:3:181"},"nodeType":"YulFunctionCall","src":"14255:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"14280:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14251:3:181"},"nodeType":"YulFunctionCall","src":"14251:32:181"},"nodeType":"YulIf","src":"14248:52:181"},{"nodeType":"YulAssignment","src":"14309:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14325:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14319:5:181"},"nodeType":"YulFunctionCall","src":"14319:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14309:6:181"}]},{"nodeType":"YulAssignment","src":"14344:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14364:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14375:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14360:3:181"},"nodeType":"YulFunctionCall","src":"14360:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14354:5:181"},"nodeType":"YulFunctionCall","src":"14354:25:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"14344:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14196:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14207:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14219:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14227:6:181","type":""}],"src":"14140:245:181"},{"body":{"nodeType":"YulBlock","src":"14451:374:181","statements":[{"nodeType":"YulVariableDeclaration","src":"14461:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14481:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14475:5:181"},"nodeType":"YulFunctionCall","src":"14475:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"14465:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14503:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"14508:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14496:6:181"},"nodeType":"YulFunctionCall","src":"14496:19:181"},"nodeType":"YulExpressionStatement","src":"14496:19:181"},{"nodeType":"YulVariableDeclaration","src":"14524:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14534:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14528:2:181","type":""}]},{"nodeType":"YulAssignment","src":"14547:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14558:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14563:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14554:3:181"},"nodeType":"YulFunctionCall","src":"14554:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"14547:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"14575:28:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14593:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14600:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14589:3:181"},"nodeType":"YulFunctionCall","src":"14589:14:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"14579:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"14612:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14621:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"14616:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"14680:120:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14701:3:181"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"14712:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14706:5:181"},"nodeType":"YulFunctionCall","src":"14706:13:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14694:6:181"},"nodeType":"YulFunctionCall","src":"14694:26:181"},"nodeType":"YulExpressionStatement","src":"14694:26:181"},{"nodeType":"YulAssignment","src":"14733:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14744:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14749:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14740:3:181"},"nodeType":"YulFunctionCall","src":"14740:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"14733:3:181"}]},{"nodeType":"YulAssignment","src":"14765:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"14779:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14787:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14775:3:181"},"nodeType":"YulFunctionCall","src":"14775:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"14765:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"14642:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"14645:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14639:2:181"},"nodeType":"YulFunctionCall","src":"14639:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"14653:18:181","statements":[{"nodeType":"YulAssignment","src":"14655:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"14664:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"14667:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14660:3:181"},"nodeType":"YulFunctionCall","src":"14660:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"14655:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"14635:3:181","statements":[]},"src":"14631:169:181"},{"nodeType":"YulAssignment","src":"14809:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"14816:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"14809:3:181"}]}]},"name":"abi_encode_array_bytes32_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"14428:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"14435:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"14443:3:181","type":""}],"src":"14390:435:181"},{"body":{"nodeType":"YulBlock","src":"14981:110:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14998:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15009:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14991:6:181"},"nodeType":"YulFunctionCall","src":"14991:21:181"},"nodeType":"YulExpressionStatement","src":"14991:21:181"},{"nodeType":"YulAssignment","src":"15021:64:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15058:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15070:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15081:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15066:3:181"},"nodeType":"YulFunctionCall","src":"15066:18:181"}],"functionName":{"name":"abi_encode_array_bytes32_dyn","nodeType":"YulIdentifier","src":"15029:28:181"},"nodeType":"YulFunctionCall","src":"15029:56:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15021:4:181"}]}]},"name":"abi_encode_tuple_t_array$_t_bytes32_$dyn_memory_ptr__to_t_array$_t_bytes32_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14950:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14961:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14972:4:181","type":""}],"src":"14830:261:181"},{"body":{"nodeType":"YulBlock","src":"15303:196:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15320:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"15331:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15313:6:181"},"nodeType":"YulFunctionCall","src":"15313:25:181"},"nodeType":"YulExpressionStatement","src":"15313:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15358:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15369:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15354:3:181"},"nodeType":"YulFunctionCall","src":"15354:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"15374:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15347:6:181"},"nodeType":"YulFunctionCall","src":"15347:34:181"},"nodeType":"YulExpressionStatement","src":"15347:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15401:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15412:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15397:3:181"},"nodeType":"YulFunctionCall","src":"15397:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15417:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15390:6:181"},"nodeType":"YulFunctionCall","src":"15390:30:181"},"nodeType":"YulExpressionStatement","src":"15390:30:181"},{"nodeType":"YulAssignment","src":"15429:64:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15466:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15478:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15489:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15474:3:181"},"nodeType":"YulFunctionCall","src":"15474:18:181"}],"functionName":{"name":"abi_encode_array_bytes32_dyn","nodeType":"YulIdentifier","src":"15437:28:181"},"nodeType":"YulFunctionCall","src":"15437:56:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15429:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_uint256_t_array$_t_bytes32_$dyn_memory_ptr__to_t_bytes32_t_uint256_t_array$_t_bytes32_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15256:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15267:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15275:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15283:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15294:4:181","type":""}],"src":"15096:403:181"},{"body":{"nodeType":"YulBlock","src":"15570:65:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15587:1:181","type":"","value":"0"},{"name":"ptr","nodeType":"YulIdentifier","src":"15590:3:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15580:6:181"},"nodeType":"YulFunctionCall","src":"15580:14:181"},"nodeType":"YulExpressionStatement","src":"15580:14:181"},{"nodeType":"YulAssignment","src":"15603:26:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15621:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15624:4:181","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"15611:9:181"},"nodeType":"YulFunctionCall","src":"15611:18:181"},"variableNames":[{"name":"data","nodeType":"YulIdentifier","src":"15603:4:181"}]}]},"name":"array_dataslot_array_uint32_dyn_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nodeType":"YulTypedName","src":"15553:3:181","type":""}],"returnVariables":[{"name":"data","nodeType":"YulTypedName","src":"15561:4:181","type":""}],"src":"15504:131:181"},{"body":{"nodeType":"YulBlock","src":"15708:2814:181","statements":[{"nodeType":"YulVariableDeclaration","src":"15718:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15738:5:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"15732:5:181"},"nodeType":"YulFunctionCall","src":"15732:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"15722:6:181","type":""}]},{"nodeType":"YulAssignment","src":"15753:55:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"15796:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"15801:6:181"}],"functionName":{"name":"array_storeLengthForEncoding_string","nodeType":"YulIdentifier","src":"15760:35:181"},"nodeType":"YulFunctionCall","src":"15760:48:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"15753:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"15817:60:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15871:5:181"}],"functionName":{"name":"array_dataslot_array_uint32_dyn_storage","nodeType":"YulIdentifier","src":"15831:39:181"},"nodeType":"YulFunctionCall","src":"15831:46:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"15821:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15886:20:181","value":{"kind":"number","nodeType":"YulLiteral","src":"15905:1:181","type":"","value":"0"},"variables":[{"name":"itemCounter","nodeType":"YulTypedName","src":"15890:11:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"16038:850:181","statements":[{"nodeType":"YulVariableDeclaration","src":"16052:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"16070:6:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"16064:5:181"},"nodeType":"YulFunctionCall","src":"16064:13:181"},"variables":[{"name":"data","nodeType":"YulTypedName","src":"16056:4:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16090:20:181","value":{"kind":"number","nodeType":"YulLiteral","src":"16100:10:181","type":"","value":"0xffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"16094:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"16145:4:181"},{"name":"_1","nodeType":"YulIdentifier","src":"16151:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16141:3:181"},"nodeType":"YulFunctionCall","src":"16141:13:181"},{"name":"pos","nodeType":"YulIdentifier","src":"16156:3:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"16123:17:181"},"nodeType":"YulFunctionCall","src":"16123:37:181"},"nodeType":"YulExpressionStatement","src":"16123:37:181"},{"nodeType":"YulVariableDeclaration","src":"16173:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"16183:4:181","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"16177:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"16226:2:181"},{"name":"data","nodeType":"YulIdentifier","src":"16230:4:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"16222:3:181"},"nodeType":"YulFunctionCall","src":"16222:13:181"},{"name":"_1","nodeType":"YulIdentifier","src":"16237:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16218:3:181"},"nodeType":"YulFunctionCall","src":"16218:22:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16246:3:181"},{"name":"_2","nodeType":"YulIdentifier","src":"16251:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16242:3:181"},"nodeType":"YulFunctionCall","src":"16242:12:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"16200:17:181"},"nodeType":"YulFunctionCall","src":"16200:55:181"},"nodeType":"YulExpressionStatement","src":"16200:55:181"},{"nodeType":"YulVariableDeclaration","src":"16268:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"16278:2:181","type":"","value":"64"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"16272:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"16319:2:181"},{"name":"data","nodeType":"YulIdentifier","src":"16323:4:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"16315:3:181"},"nodeType":"YulFunctionCall","src":"16315:13:181"},{"name":"_1","nodeType":"YulIdentifier","src":"16330:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16311:3:181"},"nodeType":"YulFunctionCall","src":"16311:22:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16339:3:181"},{"name":"_3","nodeType":"YulIdentifier","src":"16344:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16335:3:181"},"nodeType":"YulFunctionCall","src":"16335:12:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"16293:17:181"},"nodeType":"YulFunctionCall","src":"16293:55:181"},"nodeType":"YulExpressionStatement","src":"16293:55:181"},{"nodeType":"YulVariableDeclaration","src":"16361:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"16371:2:181","type":"","value":"96"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"16365:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"16412:2:181"},{"name":"data","nodeType":"YulIdentifier","src":"16416:4:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"16408:3:181"},"nodeType":"YulFunctionCall","src":"16408:13:181"},{"name":"_1","nodeType":"YulIdentifier","src":"16423:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16404:3:181"},"nodeType":"YulFunctionCall","src":"16404:22:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16432:3:181"},{"name":"_4","nodeType":"YulIdentifier","src":"16437:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16428:3:181"},"nodeType":"YulFunctionCall","src":"16428:12:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"16386:17:181"},"nodeType":"YulFunctionCall","src":"16386:55:181"},"nodeType":"YulExpressionStatement","src":"16386:55:181"},{"nodeType":"YulVariableDeclaration","src":"16454:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"16464:3:181","type":"","value":"128"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"16458:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"16506:2:181"},{"name":"data","nodeType":"YulIdentifier","src":"16510:4:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"16502:3:181"},"nodeType":"YulFunctionCall","src":"16502:13:181"},{"name":"_1","nodeType":"YulIdentifier","src":"16517:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16498:3:181"},"nodeType":"YulFunctionCall","src":"16498:22:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16526:3:181"},{"name":"_5","nodeType":"YulIdentifier","src":"16531:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16522:3:181"},"nodeType":"YulFunctionCall","src":"16522:12:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"16480:17:181"},"nodeType":"YulFunctionCall","src":"16480:55:181"},"nodeType":"YulExpressionStatement","src":"16480:55:181"},{"nodeType":"YulVariableDeclaration","src":"16548:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"16558:3:181","type":"","value":"160"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"16552:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"16600:2:181"},{"name":"data","nodeType":"YulIdentifier","src":"16604:4:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"16596:3:181"},"nodeType":"YulFunctionCall","src":"16596:13:181"},{"name":"_1","nodeType":"YulIdentifier","src":"16611:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16592:3:181"},"nodeType":"YulFunctionCall","src":"16592:22:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16620:3:181"},{"name":"_6","nodeType":"YulIdentifier","src":"16625:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16616:3:181"},"nodeType":"YulFunctionCall","src":"16616:12:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"16574:17:181"},"nodeType":"YulFunctionCall","src":"16574:55:181"},"nodeType":"YulExpressionStatement","src":"16574:55:181"},{"nodeType":"YulVariableDeclaration","src":"16642:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"16652:3:181","type":"","value":"192"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"16646:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"_7","nodeType":"YulIdentifier","src":"16694:2:181"},{"name":"data","nodeType":"YulIdentifier","src":"16698:4:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"16690:3:181"},"nodeType":"YulFunctionCall","src":"16690:13:181"},{"name":"_1","nodeType":"YulIdentifier","src":"16705:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16686:3:181"},"nodeType":"YulFunctionCall","src":"16686:22:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16714:3:181"},{"name":"_7","nodeType":"YulIdentifier","src":"16719:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16710:3:181"},"nodeType":"YulFunctionCall","src":"16710:12:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"16668:17:181"},"nodeType":"YulFunctionCall","src":"16668:55:181"},"nodeType":"YulExpressionStatement","src":"16668:55:181"},{"nodeType":"YulVariableDeclaration","src":"16736:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"16746:3:181","type":"","value":"224"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"16740:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"_8","nodeType":"YulIdentifier","src":"16784:2:181"},{"name":"data","nodeType":"YulIdentifier","src":"16788:4:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"16780:3:181"},"nodeType":"YulFunctionCall","src":"16780:13:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16799:3:181"},{"name":"_8","nodeType":"YulIdentifier","src":"16804:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16795:3:181"},"nodeType":"YulFunctionCall","src":"16795:12:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"16762:17:181"},"nodeType":"YulFunctionCall","src":"16762:46:181"},"nodeType":"YulExpressionStatement","src":"16762:46:181"},{"nodeType":"YulAssignment","src":"16821:20:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16832:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"16837:3:181","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16828:3:181"},"nodeType":"YulFunctionCall","src":"16828:13:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"16821:3:181"}]},{"nodeType":"YulAssignment","src":"16854:24:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"16868:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"16876:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16864:3:181"},"nodeType":"YulFunctionCall","src":"16864:14:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"16854:6:181"}]}]},"condition":{"arguments":[{"arguments":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"15938:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"15951:1:181","type":"","value":"7"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15934:3:181"},"nodeType":"YulFunctionCall","src":"15934:19:181"},{"name":"length","nodeType":"YulIdentifier","src":"15955:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15931:2:181"},"nodeType":"YulFunctionCall","src":"15931:31:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"15971:58:181","statements":[{"nodeType":"YulAssignment","src":"15985:34:181","value":{"arguments":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"16004:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"16017:1:181","type":"","value":"8"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16000:3:181"},"nodeType":"YulFunctionCall","src":"16000:19:181"},"variableNames":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"15985:11:181"}]}]},"pre":{"nodeType":"YulBlock","src":"15919:3:181","statements":[]},"src":"15915:973:181"},{"nodeType":"YulVariableDeclaration","src":"16897:27:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"16917:6:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"16911:5:181"},"nodeType":"YulFunctionCall","src":"16911:13:181"},"variables":[{"name":"data_1","nodeType":"YulTypedName","src":"16901:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"16968:152:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"data_1","nodeType":"YulIdentifier","src":"17004:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"17012:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17000:3:181"},"nodeType":"YulFunctionCall","src":"17000:23:181"},{"name":"pos","nodeType":"YulIdentifier","src":"17025:3:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"16982:17:181"},"nodeType":"YulFunctionCall","src":"16982:47:181"},"nodeType":"YulExpressionStatement","src":"16982:47:181"},{"nodeType":"YulAssignment","src":"17042:21:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17053:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"17058:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17049:3:181"},"nodeType":"YulFunctionCall","src":"17049:14:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"17042:3:181"}]},{"nodeType":"YulAssignment","src":"17076:34:181","value":{"arguments":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"17095:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"17108:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17091:3:181"},"nodeType":"YulFunctionCall","src":"17091:19:181"},"variableNames":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"17076:11:181"}]}]},"condition":{"arguments":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"16939:11:181"},{"name":"length","nodeType":"YulIdentifier","src":"16952:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16936:2:181"},"nodeType":"YulFunctionCall","src":"16936:23:181"},"nodeType":"YulIf","src":"16933:187:181"},{"body":{"nodeType":"YulBlock","src":"17164:163:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17204:4:181","type":"","value":"0x20"},{"name":"data_1","nodeType":"YulIdentifier","src":"17210:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"17200:3:181"},"nodeType":"YulFunctionCall","src":"17200:17:181"},{"kind":"number","nodeType":"YulLiteral","src":"17219:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17196:3:181"},"nodeType":"YulFunctionCall","src":"17196:34:181"},{"name":"pos","nodeType":"YulIdentifier","src":"17232:3:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"17178:17:181"},"nodeType":"YulFunctionCall","src":"17178:58:181"},"nodeType":"YulExpressionStatement","src":"17178:58:181"},{"nodeType":"YulAssignment","src":"17249:21:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17260:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"17265:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17256:3:181"},"nodeType":"YulFunctionCall","src":"17256:14:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"17249:3:181"}]},{"nodeType":"YulAssignment","src":"17283:34:181","value":{"arguments":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"17302:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"17315:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17298:3:181"},"nodeType":"YulFunctionCall","src":"17298:19:181"},"variableNames":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"17283:11:181"}]}]},"condition":{"arguments":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"17135:11:181"},{"name":"length","nodeType":"YulIdentifier","src":"17148:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17132:2:181"},"nodeType":"YulFunctionCall","src":"17132:23:181"},"nodeType":"YulIf","src":"17129:198:181"},{"body":{"nodeType":"YulBlock","src":"17371:161:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17411:2:181","type":"","value":"64"},{"name":"data_1","nodeType":"YulIdentifier","src":"17415:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"17407:3:181"},"nodeType":"YulFunctionCall","src":"17407:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"17424:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17403:3:181"},"nodeType":"YulFunctionCall","src":"17403:32:181"},{"name":"pos","nodeType":"YulIdentifier","src":"17437:3:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"17385:17:181"},"nodeType":"YulFunctionCall","src":"17385:56:181"},"nodeType":"YulExpressionStatement","src":"17385:56:181"},{"nodeType":"YulAssignment","src":"17454:21:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17465:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"17470:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17461:3:181"},"nodeType":"YulFunctionCall","src":"17461:14:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"17454:3:181"}]},{"nodeType":"YulAssignment","src":"17488:34:181","value":{"arguments":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"17507:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"17520:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17503:3:181"},"nodeType":"YulFunctionCall","src":"17503:19:181"},"variableNames":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"17488:11:181"}]}]},"condition":{"arguments":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"17342:11:181"},{"name":"length","nodeType":"YulIdentifier","src":"17355:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17339:2:181"},"nodeType":"YulFunctionCall","src":"17339:23:181"},"nodeType":"YulIf","src":"17336:196:181"},{"body":{"nodeType":"YulBlock","src":"17576:161:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17616:2:181","type":"","value":"96"},{"name":"data_1","nodeType":"YulIdentifier","src":"17620:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"17612:3:181"},"nodeType":"YulFunctionCall","src":"17612:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"17629:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17608:3:181"},"nodeType":"YulFunctionCall","src":"17608:32:181"},{"name":"pos","nodeType":"YulIdentifier","src":"17642:3:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"17590:17:181"},"nodeType":"YulFunctionCall","src":"17590:56:181"},"nodeType":"YulExpressionStatement","src":"17590:56:181"},{"nodeType":"YulAssignment","src":"17659:21:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17670:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"17675:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17666:3:181"},"nodeType":"YulFunctionCall","src":"17666:14:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"17659:3:181"}]},{"nodeType":"YulAssignment","src":"17693:34:181","value":{"arguments":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"17712:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"17725:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17708:3:181"},"nodeType":"YulFunctionCall","src":"17708:19:181"},"variableNames":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"17693:11:181"}]}]},"condition":{"arguments":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"17547:11:181"},{"name":"length","nodeType":"YulIdentifier","src":"17560:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17544:2:181"},"nodeType":"YulFunctionCall","src":"17544:23:181"},"nodeType":"YulIf","src":"17541:196:181"},{"body":{"nodeType":"YulBlock","src":"17781:162:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17821:3:181","type":"","value":"128"},{"name":"data_1","nodeType":"YulIdentifier","src":"17826:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"17817:3:181"},"nodeType":"YulFunctionCall","src":"17817:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"17835:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17813:3:181"},"nodeType":"YulFunctionCall","src":"17813:33:181"},{"name":"pos","nodeType":"YulIdentifier","src":"17848:3:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"17795:17:181"},"nodeType":"YulFunctionCall","src":"17795:57:181"},"nodeType":"YulExpressionStatement","src":"17795:57:181"},{"nodeType":"YulAssignment","src":"17865:21:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17876:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"17881:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17872:3:181"},"nodeType":"YulFunctionCall","src":"17872:14:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"17865:3:181"}]},{"nodeType":"YulAssignment","src":"17899:34:181","value":{"arguments":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"17918:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"17931:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17914:3:181"},"nodeType":"YulFunctionCall","src":"17914:19:181"},"variableNames":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"17899:11:181"}]}]},"condition":{"arguments":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"17752:11:181"},{"name":"length","nodeType":"YulIdentifier","src":"17765:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17749:2:181"},"nodeType":"YulFunctionCall","src":"17749:23:181"},"nodeType":"YulIf","src":"17746:197:181"},{"body":{"nodeType":"YulBlock","src":"17987:162:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18027:3:181","type":"","value":"160"},{"name":"data_1","nodeType":"YulIdentifier","src":"18032:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"18023:3:181"},"nodeType":"YulFunctionCall","src":"18023:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"18041:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18019:3:181"},"nodeType":"YulFunctionCall","src":"18019:33:181"},{"name":"pos","nodeType":"YulIdentifier","src":"18054:3:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"18001:17:181"},"nodeType":"YulFunctionCall","src":"18001:57:181"},"nodeType":"YulExpressionStatement","src":"18001:57:181"},{"nodeType":"YulAssignment","src":"18071:21:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18082:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"18087:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18078:3:181"},"nodeType":"YulFunctionCall","src":"18078:14:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"18071:3:181"}]},{"nodeType":"YulAssignment","src":"18105:34:181","value":{"arguments":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"18124:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"18137:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18120:3:181"},"nodeType":"YulFunctionCall","src":"18120:19:181"},"variableNames":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"18105:11:181"}]}]},"condition":{"arguments":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"17958:11:181"},{"name":"length","nodeType":"YulIdentifier","src":"17971:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17955:2:181"},"nodeType":"YulFunctionCall","src":"17955:23:181"},"nodeType":"YulIf","src":"17952:197:181"},{"body":{"nodeType":"YulBlock","src":"18193:162:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18233:3:181","type":"","value":"192"},{"name":"data_1","nodeType":"YulIdentifier","src":"18238:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"18229:3:181"},"nodeType":"YulFunctionCall","src":"18229:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"18247:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18225:3:181"},"nodeType":"YulFunctionCall","src":"18225:33:181"},{"name":"pos","nodeType":"YulIdentifier","src":"18260:3:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"18207:17:181"},"nodeType":"YulFunctionCall","src":"18207:57:181"},"nodeType":"YulExpressionStatement","src":"18207:57:181"},{"nodeType":"YulAssignment","src":"18277:21:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18288:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"18293:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18284:3:181"},"nodeType":"YulFunctionCall","src":"18284:14:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"18277:3:181"}]},{"nodeType":"YulAssignment","src":"18311:34:181","value":{"arguments":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"18330:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"18343:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18326:3:181"},"nodeType":"YulFunctionCall","src":"18326:19:181"},"variableNames":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"18311:11:181"}]}]},"condition":{"arguments":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"18164:11:181"},{"name":"length","nodeType":"YulIdentifier","src":"18177:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"18161:2:181"},"nodeType":"YulFunctionCall","src":"18161:23:181"},"nodeType":"YulIf","src":"18158:197:181"},{"body":{"nodeType":"YulBlock","src":"18399:98:181","statements":[{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18435:3:181","type":"","value":"224"},{"name":"data_1","nodeType":"YulIdentifier","src":"18440:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"18431:3:181"},"nodeType":"YulFunctionCall","src":"18431:16:181"},{"name":"pos","nodeType":"YulIdentifier","src":"18449:3:181"}],"functionName":{"name":"abi_encode_uint32","nodeType":"YulIdentifier","src":"18413:17:181"},"nodeType":"YulFunctionCall","src":"18413:40:181"},"nodeType":"YulExpressionStatement","src":"18413:40:181"},{"nodeType":"YulAssignment","src":"18466:21:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18477:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"18482:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18473:3:181"},"nodeType":"YulFunctionCall","src":"18473:14:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"18466:3:181"}]}]},"condition":{"arguments":[{"name":"itemCounter","nodeType":"YulIdentifier","src":"18370:11:181"},{"name":"length","nodeType":"YulIdentifier","src":"18383:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"18367:2:181"},"nodeType":"YulFunctionCall","src":"18367:23:181"},"nodeType":"YulIf","src":"18364:133:181"},{"nodeType":"YulAssignment","src":"18506:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"18513:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"18506:3:181"}]}]},"name":"abi_encode_array_uint32_dyn_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"15685:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"15692:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"15700:3:181","type":""}],"src":"15640:2882:181"},{"body":{"nodeType":"YulBlock","src":"18596:426:181","statements":[{"nodeType":"YulVariableDeclaration","src":"18606:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18626:5:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"18620:5:181"},"nodeType":"YulFunctionCall","src":"18620:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"18610:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18648:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"18653:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18641:6:181"},"nodeType":"YulFunctionCall","src":"18641:19:181"},"nodeType":"YulExpressionStatement","src":"18641:19:181"},{"nodeType":"YulVariableDeclaration","src":"18669:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"18679:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18673:2:181","type":""}]},{"nodeType":"YulAssignment","src":"18692:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18703:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"18708:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18699:3:181"},"nodeType":"YulFunctionCall","src":"18699:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"18692:3:181"}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18727:1:181","type":"","value":"0"},{"name":"value","nodeType":"YulIdentifier","src":"18730:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18720:6:181"},"nodeType":"YulFunctionCall","src":"18720:16:181"},"nodeType":"YulExpressionStatement","src":"18720:16:181"},{"nodeType":"YulVariableDeclaration","src":"18745:30:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18769:1:181","type":"","value":"0"},{"name":"_1","nodeType":"YulIdentifier","src":"18772:2:181"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"18759:9:181"},"nodeType":"YulFunctionCall","src":"18759:16:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"18749:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18784:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"18793:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"18788:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"18852:145:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18873:3:181"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"18888:6:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"18882:5:181"},"nodeType":"YulFunctionCall","src":"18882:13:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18905:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"18910:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"18901:3:181"},"nodeType":"YulFunctionCall","src":"18901:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"18914:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"18897:3:181"},"nodeType":"YulFunctionCall","src":"18897:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18878:3:181"},"nodeType":"YulFunctionCall","src":"18878:39:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18866:6:181"},"nodeType":"YulFunctionCall","src":"18866:52:181"},"nodeType":"YulExpressionStatement","src":"18866:52:181"},{"nodeType":"YulAssignment","src":"18931:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18942:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"18947:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18938:3:181"},"nodeType":"YulFunctionCall","src":"18938:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"18931:3:181"}]},{"nodeType":"YulAssignment","src":"18963:24:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"18977:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"18985:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18973:3:181"},"nodeType":"YulFunctionCall","src":"18973:14:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"18963:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"18814:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"18817:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"18811:2:181"},"nodeType":"YulFunctionCall","src":"18811:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"18825:18:181","statements":[{"nodeType":"YulAssignment","src":"18827:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"18836:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"18839:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18832:3:181"},"nodeType":"YulFunctionCall","src":"18832:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"18827:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"18807:3:181","statements":[]},"src":"18803:194:181"},{"nodeType":"YulAssignment","src":"19006:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"19013:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"19006:3:181"}]}]},"name":"abi_encode_array_address_dyn_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"18573:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"18580:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"18588:3:181","type":""}],"src":"18527:495:181"},{"body":{"nodeType":"YulBlock","src":"19302:382:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19319:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19334:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"19342:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19330:3:181"},"nodeType":"YulFunctionCall","src":"19330:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19312:6:181"},"nodeType":"YulFunctionCall","src":"19312:42:181"},"nodeType":"YulExpressionStatement","src":"19312:42:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19374:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19385:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19370:3:181"},"nodeType":"YulFunctionCall","src":"19370:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"19394:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19410:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"19415:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"19406:3:181"},"nodeType":"YulFunctionCall","src":"19406:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"19419:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19402:3:181"},"nodeType":"YulFunctionCall","src":"19402:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19390:3:181"},"nodeType":"YulFunctionCall","src":"19390:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19363:6:181"},"nodeType":"YulFunctionCall","src":"19363:60:181"},"nodeType":"YulExpressionStatement","src":"19363:60:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19443:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19454:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19439:3:181"},"nodeType":"YulFunctionCall","src":"19439:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19459:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19432:6:181"},"nodeType":"YulFunctionCall","src":"19432:31:181"},"nodeType":"YulExpressionStatement","src":"19432:31:181"},{"nodeType":"YulVariableDeclaration","src":"19472:78:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"19522:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19534:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19545:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19530:3:181"},"nodeType":"YulFunctionCall","src":"19530:19:181"}],"functionName":{"name":"abi_encode_array_uint32_dyn_storage","nodeType":"YulIdentifier","src":"19486:35:181"},"nodeType":"YulFunctionCall","src":"19486:64:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"19476:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19570:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19581:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19566:3:181"},"nodeType":"YulFunctionCall","src":"19566:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"19590:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"19598:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19586:3:181"},"nodeType":"YulFunctionCall","src":"19586:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19559:6:181"},"nodeType":"YulFunctionCall","src":"19559:50:181"},"nodeType":"YulExpressionStatement","src":"19559:50:181"},{"nodeType":"YulAssignment","src":"19618:60:181","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"19663:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"19671:6:181"}],"functionName":{"name":"abi_encode_array_address_dyn_storage","nodeType":"YulIdentifier","src":"19626:36:181"},"nodeType":"YulFunctionCall","src":"19626:52:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19618:4:181"}]}]},"name":"abi_encode_tuple_t_uint32_t_address_t_array$_t_uint32_$dyn_storage_t_array$_t_address_$dyn_storage__to_t_uint32_t_address_t_array$_t_uint32_$dyn_memory_ptr_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19247:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"19258:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"19266:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19274:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19282:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19293:4:181","type":""}],"src":"19027:657:181"},{"body":{"nodeType":"YulBlock","src":"19863:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19880:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19891:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19873:6:181"},"nodeType":"YulFunctionCall","src":"19873:21:181"},"nodeType":"YulExpressionStatement","src":"19873:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19914:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19925:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19910:3:181"},"nodeType":"YulFunctionCall","src":"19910:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19930:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19903:6:181"},"nodeType":"YulFunctionCall","src":"19903:30:181"},"nodeType":"YulExpressionStatement","src":"19903:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19953:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19964:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19949:3:181"},"nodeType":"YulFunctionCall","src":"19949:18:181"},{"hexValue":"616c72656164792077617463686572206d616e61676572","kind":"string","nodeType":"YulLiteral","src":"19969:25:181","type":"","value":"already watcher manager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19942:6:181"},"nodeType":"YulFunctionCall","src":"19942:53:181"},"nodeType":"YulExpressionStatement","src":"19942:53:181"},{"nodeType":"YulAssignment","src":"20004:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20016:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20027:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20012:3:181"},"nodeType":"YulFunctionCall","src":"20012:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20004:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19840:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19854:4:181","type":""}],"src":"19689:347:181"},{"body":{"nodeType":"YulBlock","src":"20215:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20232:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20243:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20225:6:181"},"nodeType":"YulFunctionCall","src":"20225:21:181"},"nodeType":"YulExpressionStatement","src":"20225:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20266:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20277:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20262:3:181"},"nodeType":"YulFunctionCall","src":"20262:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20282:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20255:6:181"},"nodeType":"YulFunctionCall","src":"20255:30:181"},"nodeType":"YulExpressionStatement","src":"20255:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20305:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20316:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20301:3:181"},"nodeType":"YulFunctionCall","src":"20301:18:181"},{"hexValue":"216d61746368696e67206c656e677468","kind":"string","nodeType":"YulLiteral","src":"20321:18:181","type":"","value":"!matching length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20294:6:181"},"nodeType":"YulFunctionCall","src":"20294:46:181"},"nodeType":"YulExpressionStatement","src":"20294:46:181"},{"nodeType":"YulAssignment","src":"20349:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20361:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20372:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20357:3:181"},"nodeType":"YulFunctionCall","src":"20357:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20349:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1b3dad4847886d431ff5d32a756e774697e6b3066b8c2075a79c1c0724122a74__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20192:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20206:4:181","type":""}],"src":"20041:340:181"},{"body":{"nodeType":"YulBlock","src":"20545:465:181","statements":[{"nodeType":"YulVariableDeclaration","src":"20555:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"20565:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"20559:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"20576:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20594:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"20605:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20590:3:181"},"nodeType":"YulFunctionCall","src":"20590:18:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"20580:6:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20624:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"20635:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20617:6:181"},"nodeType":"YulFunctionCall","src":"20617:21:181"},"nodeType":"YulExpressionStatement","src":"20617:21:181"},{"nodeType":"YulVariableDeclaration","src":"20647:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"20658:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"20651:3:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"20680:6:181"},{"name":"value1","nodeType":"YulIdentifier","src":"20688:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20673:6:181"},"nodeType":"YulFunctionCall","src":"20673:22:181"},"nodeType":"YulExpressionStatement","src":"20673:22:181"},{"nodeType":"YulAssignment","src":"20704:25:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20715:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20726:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20711:3:181"},"nodeType":"YulFunctionCall","src":"20711:18:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"20704:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"20738:20:181","value":{"name":"value0","nodeType":"YulIdentifier","src":"20752:6:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"20742:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"20767:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"20776:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"20771:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"20835:149:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"20856:3:181"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"20883:6:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"20865:17:181"},"nodeType":"YulFunctionCall","src":"20865:25:181"},{"kind":"number","nodeType":"YulLiteral","src":"20892:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20861:3:181"},"nodeType":"YulFunctionCall","src":"20861:42:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20849:6:181"},"nodeType":"YulFunctionCall","src":"20849:55:181"},"nodeType":"YulExpressionStatement","src":"20849:55:181"},{"nodeType":"YulAssignment","src":"20917:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"20928:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"20933:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20924:3:181"},"nodeType":"YulFunctionCall","src":"20924:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"20917:3:181"}]},{"nodeType":"YulAssignment","src":"20949:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"20963:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"20971:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20959:3:181"},"nodeType":"YulFunctionCall","src":"20959:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"20949:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"20797:1:181"},{"name":"value1","nodeType":"YulIdentifier","src":"20800:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"20794:2:181"},"nodeType":"YulFunctionCall","src":"20794:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"20808:18:181","statements":[{"nodeType":"YulAssignment","src":"20810:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"20819:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"20822:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20815:3:181"},"nodeType":"YulFunctionCall","src":"20815:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"20810:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"20790:3:181","statements":[]},"src":"20786:198:181"},{"nodeType":"YulAssignment","src":"20993:11:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"21001:3:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20993:4:181"}]}]},"name":"abi_encode_tuple_t_array$_t_uint32_$dyn_calldata_ptr__to_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20506:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"20517:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"20525:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20536:4:181","type":""}],"src":"20386:624:181"},{"body":{"nodeType":"YulBlock","src":"21189:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21206:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21217:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21199:6:181"},"nodeType":"YulFunctionCall","src":"21199:21:181"},"nodeType":"YulExpressionStatement","src":"21199:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21240:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21251:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21236:3:181"},"nodeType":"YulFunctionCall","src":"21236:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"21256:1:181","type":"","value":"8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21229:6:181"},"nodeType":"YulFunctionCall","src":"21229:29:181"},"nodeType":"YulExpressionStatement","src":"21229:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21278:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21289:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21274:3:181"},"nodeType":"YulFunctionCall","src":"21274:18:181"},{"hexValue":"21646f6d61696e73","kind":"string","nodeType":"YulLiteral","src":"21294:10:181","type":"","value":"!domains"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21267:6:181"},"nodeType":"YulFunctionCall","src":"21267:38:181"},"nodeType":"YulExpressionStatement","src":"21267:38:181"},{"nodeType":"YulAssignment","src":"21314:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21326:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21337:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21322:3:181"},"nodeType":"YulFunctionCall","src":"21322:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21314:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_069b0c751baa033a978be3583d0de58dbb093dd8290b507a8911c35f2d486c99__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21166:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21180:4:181","type":""}],"src":"21015:331:181"},{"body":{"nodeType":"YulBlock","src":"21654:456:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21671:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"21686:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"21694:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21682:3:181"},"nodeType":"YulFunctionCall","src":"21682:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21664:6:181"},"nodeType":"YulFunctionCall","src":"21664:42:181"},"nodeType":"YulExpressionStatement","src":"21664:42:181"},{"nodeType":"YulVariableDeclaration","src":"21715:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21733:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"21738:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21729:3:181"},"nodeType":"YulFunctionCall","src":"21729:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"21742:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21725:3:181"},"nodeType":"YulFunctionCall","src":"21725:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"21719:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21764:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21775:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21760:3:181"},"nodeType":"YulFunctionCall","src":"21760:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"21784:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21792:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21780:3:181"},"nodeType":"YulFunctionCall","src":"21780:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21753:6:181"},"nodeType":"YulFunctionCall","src":"21753:43:181"},"nodeType":"YulExpressionStatement","src":"21753:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21816:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21827:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21812:3:181"},"nodeType":"YulFunctionCall","src":"21812:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"21832:3:181","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21805:6:181"},"nodeType":"YulFunctionCall","src":"21805:31:181"},"nodeType":"YulExpressionStatement","src":"21805:31:181"},{"nodeType":"YulVariableDeclaration","src":"21845:78:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"21895:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21907:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21918:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21903:3:181"},"nodeType":"YulFunctionCall","src":"21903:19:181"}],"functionName":{"name":"abi_encode_array_uint32_dyn_storage","nodeType":"YulIdentifier","src":"21859:35:181"},"nodeType":"YulFunctionCall","src":"21859:64:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"21849:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21943:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21954:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21939:3:181"},"nodeType":"YulFunctionCall","src":"21939:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"21963:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"21971:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21959:3:181"},"nodeType":"YulFunctionCall","src":"21959:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21932:6:181"},"nodeType":"YulFunctionCall","src":"21932:50:181"},"nodeType":"YulExpressionStatement","src":"21932:50:181"},{"nodeType":"YulAssignment","src":"21991:60:181","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"22036:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"22044:6:181"}],"functionName":{"name":"abi_encode_array_address_dyn_storage","nodeType":"YulIdentifier","src":"21999:36:181"},"nodeType":"YulFunctionCall","src":"21999:52:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21991:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22071:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22082:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22067:3:181"},"nodeType":"YulFunctionCall","src":"22067:19:181"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"22092:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"22100:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22088:3:181"},"nodeType":"YulFunctionCall","src":"22088:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22060:6:181"},"nodeType":"YulFunctionCall","src":"22060:44:181"},"nodeType":"YulExpressionStatement","src":"22060:44:181"}]},"name":"abi_encode_tuple_t_uint32_t_address_t_array$_t_uint32_$dyn_storage_t_array$_t_address_$dyn_storage_t_address__to_t_uint32_t_address_t_array$_t_uint32_$dyn_memory_ptr_t_array$_t_address_$dyn_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21591:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"21602:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"21610:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"21618:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21626:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"21634:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21645:4:181","type":""}],"src":"21351:759:181"},{"body":{"nodeType":"YulBlock","src":"22289:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22306:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22317:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22299:6:181"},"nodeType":"YulFunctionCall","src":"22299:21:181"},"nodeType":"YulExpressionStatement","src":"22299:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22340:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22351:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22336:3:181"},"nodeType":"YulFunctionCall","src":"22336:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22356:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22329:6:181"},"nodeType":"YulFunctionCall","src":"22329:30:181"},"nodeType":"YulExpressionStatement","src":"22329:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22379:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22390:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22375:3:181"},"nodeType":"YulFunctionCall","src":"22375:18:181"},{"hexValue":"5061757361626c653a206e6f7420706175736564","kind":"string","nodeType":"YulLiteral","src":"22395:22:181","type":"","value":"Pausable: not paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22368:6:181"},"nodeType":"YulFunctionCall","src":"22368:50:181"},"nodeType":"YulExpressionStatement","src":"22368:50:181"},{"nodeType":"YulAssignment","src":"22427:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22439:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22450:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22435:3:181"},"nodeType":"YulFunctionCall","src":"22435:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22427:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22266:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22280:4:181","type":""}],"src":"22115:344:181"},{"body":{"nodeType":"YulBlock","src":"22638:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22655:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22666:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22648:6:181"},"nodeType":"YulFunctionCall","src":"22648:21:181"},"nodeType":"YulExpressionStatement","src":"22648:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22689:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22700:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22685:3:181"},"nodeType":"YulFunctionCall","src":"22685:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22705:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22678:6:181"},"nodeType":"YulFunctionCall","src":"22678:30:181"},"nodeType":"YulExpressionStatement","src":"22678:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22728:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22739:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22724:3:181"},"nodeType":"YulFunctionCall","src":"22724:18:181"},{"hexValue":"616c72656164792072656d6f766564","kind":"string","nodeType":"YulLiteral","src":"22744:17:181","type":"","value":"already removed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22717:6:181"},"nodeType":"YulFunctionCall","src":"22717:45:181"},"nodeType":"YulExpressionStatement","src":"22717:45:181"},{"nodeType":"YulAssignment","src":"22771:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22783:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22794:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22779:3:181"},"nodeType":"YulFunctionCall","src":"22779:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22771:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c974277859dbe5199cac4a5dad47692593995fbef88ea0805b1b8f52600e925d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22615:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22629:4:181","type":""}],"src":"22464:339:181"},{"body":{"nodeType":"YulBlock","src":"22982:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22999:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23010:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22992:6:181"},"nodeType":"YulFunctionCall","src":"22992:21:181"},"nodeType":"YulExpressionStatement","src":"22992:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23033:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23044:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23029:3:181"},"nodeType":"YulFunctionCall","src":"23029:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23049:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23022:6:181"},"nodeType":"YulFunctionCall","src":"23022:30:181"},"nodeType":"YulExpressionStatement","src":"23022:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23072:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23083:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23068:3:181"},"nodeType":"YulFunctionCall","src":"23068:18:181"},{"hexValue":"5061757361626c653a20706175736564","kind":"string","nodeType":"YulLiteral","src":"23088:18:181","type":"","value":"Pausable: paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23061:6:181"},"nodeType":"YulFunctionCall","src":"23061:46:181"},"nodeType":"YulExpressionStatement","src":"23061:46:181"},{"nodeType":"YulAssignment","src":"23116:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23128:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23139:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23124:3:181"},"nodeType":"YulFunctionCall","src":"23124:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23116:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22959:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22973:4:181","type":""}],"src":"22808:340:181"},{"body":{"nodeType":"YulBlock","src":"23200:179:181","statements":[{"nodeType":"YulVariableDeclaration","src":"23210:44:181","value":{"kind":"number","nodeType":"YulLiteral","src":"23220:34:181","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"23214:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"23263:29:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23282:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"23289:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23278:3:181"},"nodeType":"YulFunctionCall","src":"23278:14:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"23267:7:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"23320:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"23322:16:181"},"nodeType":"YulFunctionCall","src":"23322:18:181"},"nodeType":"YulExpressionStatement","src":"23322:18:181"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"23307:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"23316:2:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"23304:2:181"},"nodeType":"YulFunctionCall","src":"23304:15:181"},"nodeType":"YulIf","src":"23301:41:181"},{"nodeType":"YulAssignment","src":"23351:22:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"23362:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"23371:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23358:3:181"},"nodeType":"YulFunctionCall","src":"23358:15:181"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"23351:3:181"}]}]},"name":"increment_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"23182:5:181","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"23192:3:181","type":""}],"src":"23153:226:181"},{"body":{"nodeType":"YulBlock","src":"23558:163:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23575:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23586:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23568:6:181"},"nodeType":"YulFunctionCall","src":"23568:21:181"},"nodeType":"YulExpressionStatement","src":"23568:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23609:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23620:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23605:3:181"},"nodeType":"YulFunctionCall","src":"23605:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23625:2:181","type":"","value":"13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23598:6:181"},"nodeType":"YulFunctionCall","src":"23598:30:181"},"nodeType":"YulExpressionStatement","src":"23598:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23648:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23659:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23644:3:181"},"nodeType":"YulFunctionCall","src":"23644:18:181"},{"hexValue":"71756575652021696e69742764","kind":"string","nodeType":"YulLiteral","src":"23664:15:181","type":"","value":"queue !init'd"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23637:6:181"},"nodeType":"YulFunctionCall","src":"23637:43:181"},"nodeType":"YulExpressionStatement","src":"23637:43:181"},{"nodeType":"YulAssignment","src":"23689:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23701:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23712:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23697:3:181"},"nodeType":"YulFunctionCall","src":"23697:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23689:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_858f5e5a76bb3dc38377e7f81e3338b01e1328003db4ac23cd71e280fddde026__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23535:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23549:4:181","type":""}],"src":"23384:337:181"},{"body":{"nodeType":"YulBlock","src":"23900:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23917:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23928:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23910:6:181"},"nodeType":"YulFunctionCall","src":"23910:21:181"},"nodeType":"YulExpressionStatement","src":"23910:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23951:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23962:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23947:3:181"},"nodeType":"YulFunctionCall","src":"23947:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23967:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23940:6:181"},"nodeType":"YulFunctionCall","src":"23940:30:181"},"nodeType":"YulExpressionStatement","src":"23940:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23990:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24001:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23986:3:181"},"nodeType":"YulFunctionCall","src":"23986:18:181"},{"hexValue":"2161636365707461626c65206d6178","kind":"string","nodeType":"YulLiteral","src":"24006:17:181","type":"","value":"!acceptable max"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23979:6:181"},"nodeType":"YulFunctionCall","src":"23979:45:181"},"nodeType":"YulExpressionStatement","src":"23979:45:181"},{"nodeType":"YulAssignment","src":"24033:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24045:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24056:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24041:3:181"},"nodeType":"YulFunctionCall","src":"24041:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24033:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a8a92d31cbc8779211c13437809c468e10617644bdb6370cfbd56808dd627715__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23877:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23891:4:181","type":""}],"src":"23726:339:181"},{"body":{"nodeType":"YulBlock","src":"24118:149:181","statements":[{"nodeType":"YulVariableDeclaration","src":"24128:44:181","value":{"kind":"number","nodeType":"YulLiteral","src":"24138:34:181","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"24132:2:181","type":""}]},{"nodeType":"YulAssignment","src":"24181:34:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"24196:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"24199:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24192:3:181"},"nodeType":"YulFunctionCall","src":"24192:10:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"24208:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"24211:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24204:3:181"},"nodeType":"YulFunctionCall","src":"24204:10:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24188:3:181"},"nodeType":"YulFunctionCall","src":"24188:27:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"24181:3:181"}]},{"body":{"nodeType":"YulBlock","src":"24239:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"24241:16:181"},"nodeType":"YulFunctionCall","src":"24241:18:181"},"nodeType":"YulExpressionStatement","src":"24241:18:181"}]},"condition":{"arguments":[{"name":"sum","nodeType":"YulIdentifier","src":"24230:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"24235:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"24227:2:181"},"nodeType":"YulFunctionCall","src":"24227:11:181"},"nodeType":"YulIf","src":"24224:37:181"}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"24101:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"24104:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"24110:3:181","type":""}],"src":"24070:197:181"},{"body":{"nodeType":"YulBlock","src":"24321:151:181","statements":[{"nodeType":"YulVariableDeclaration","src":"24331:44:181","value":{"kind":"number","nodeType":"YulLiteral","src":"24341:34:181","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"24335:2:181","type":""}]},{"nodeType":"YulAssignment","src":"24384:35:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"24400:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"24403:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24396:3:181"},"nodeType":"YulFunctionCall","src":"24396:10:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"24412:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"24415:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24408:3:181"},"nodeType":"YulFunctionCall","src":"24408:10:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"24392:3:181"},"nodeType":"YulFunctionCall","src":"24392:27:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"24384:4:181"}]},{"body":{"nodeType":"YulBlock","src":"24444:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"24446:16:181"},"nodeType":"YulFunctionCall","src":"24446:18:181"},"nodeType":"YulExpressionStatement","src":"24446:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"24434:4:181"},{"name":"_1","nodeType":"YulIdentifier","src":"24440:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"24431:2:181"},"nodeType":"YulFunctionCall","src":"24431:12:181"},"nodeType":"YulIf","src":"24428:38:181"}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"24303:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"24306:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"24312:4:181","type":""}],"src":"24272:200:181"},{"body":{"nodeType":"YulBlock","src":"24651:163:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24668:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24679:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24661:6:181"},"nodeType":"YulFunctionCall","src":"24661:21:181"},"nodeType":"YulExpressionStatement","src":"24661:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24702:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24713:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24698:3:181"},"nodeType":"YulFunctionCall","src":"24698:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24718:2:181","type":"","value":"13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24691:6:181"},"nodeType":"YulFunctionCall","src":"24691:30:181"},"nodeType":"YulExpressionStatement","src":"24691:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24741:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24752:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24737:3:181"},"nodeType":"YulFunctionCall","src":"24737:18:181"},{"hexValue":"646f6d61696e20657869737473","kind":"string","nodeType":"YulLiteral","src":"24757:15:181","type":"","value":"domain exists"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24730:6:181"},"nodeType":"YulFunctionCall","src":"24730:43:181"},"nodeType":"YulExpressionStatement","src":"24730:43:181"},{"nodeType":"YulAssignment","src":"24782:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24794:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24805:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24790:3:181"},"nodeType":"YulFunctionCall","src":"24790:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24782:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a119ebcb269307a76882c3ab3433e191b381689141f8fce583b20a0c51f09799__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24628:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24642:4:181","type":""}],"src":"24477:337:181"},{"body":{"nodeType":"YulBlock","src":"24993:175:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25010:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25021:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25003:6:181"},"nodeType":"YulFunctionCall","src":"25003:21:181"},"nodeType":"YulExpressionStatement","src":"25003:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25044:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25055:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25040:3:181"},"nodeType":"YulFunctionCall","src":"25040:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"25060:2:181","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25033:6:181"},"nodeType":"YulFunctionCall","src":"25033:30:181"},"nodeType":"YulExpressionStatement","src":"25033:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25083:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25094:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25079:3:181"},"nodeType":"YulFunctionCall","src":"25079:18:181"},{"hexValue":"446f6d61696e496e6465786572206174206361706163697479","kind":"string","nodeType":"YulLiteral","src":"25099:27:181","type":"","value":"DomainIndexer at capacity"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25072:6:181"},"nodeType":"YulFunctionCall","src":"25072:55:181"},"nodeType":"YulExpressionStatement","src":"25072:55:181"},{"nodeType":"YulAssignment","src":"25136:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25148:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25159:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25144:3:181"},"nodeType":"YulFunctionCall","src":"25144:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25136:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9308cd27a729cf7a07f3d8b44d2c21a947a78dd47c28e8fba8bd6a0d96c10ccd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24970:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24984:4:181","type":""}],"src":"24819:349:181"},{"body":{"nodeType":"YulBlock","src":"25347:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25364:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25375:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25357:6:181"},"nodeType":"YulFunctionCall","src":"25357:21:181"},"nodeType":"YulExpressionStatement","src":"25357:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25398:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25409:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25394:3:181"},"nodeType":"YulFunctionCall","src":"25394:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"25414:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25387:6:181"},"nodeType":"YulFunctionCall","src":"25387:30:181"},"nodeType":"YulExpressionStatement","src":"25387:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25437:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25448:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25433:3:181"},"nodeType":"YulFunctionCall","src":"25433:18:181"},{"hexValue":"636f6e6e6563746f722021657869737473","kind":"string","nodeType":"YulLiteral","src":"25453:19:181","type":"","value":"connector !exists"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25426:6:181"},"nodeType":"YulFunctionCall","src":"25426:47:181"},"nodeType":"YulExpressionStatement","src":"25426:47:181"},{"nodeType":"YulAssignment","src":"25482:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25494:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25505:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25490:3:181"},"nodeType":"YulFunctionCall","src":"25490:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25482:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d0dafca8381883f95defc09b28a81ebd60e1499d273f6a1ea9c522dc0a7ecdb1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25324:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25338:4:181","type":""}],"src":"25173:341:181"},{"body":{"nodeType":"YulBlock","src":"25567:77:181","statements":[{"nodeType":"YulAssignment","src":"25577:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"25588:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"25591:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25584:3:181"},"nodeType":"YulFunctionCall","src":"25584:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"25577:3:181"}]},{"body":{"nodeType":"YulBlock","src":"25616:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"25618:16:181"},"nodeType":"YulFunctionCall","src":"25618:18:181"},"nodeType":"YulExpressionStatement","src":"25618:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"25608:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"25611:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"25605:2:181"},"nodeType":"YulFunctionCall","src":"25605:10:181"},"nodeType":"YulIf","src":"25602:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"25550:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"25553:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"25559:3:181","type":""}],"src":"25519:125:181"},{"body":{"nodeType":"YulBlock","src":"25681:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25698:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25705:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"25710:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"25701:3:181"},"nodeType":"YulFunctionCall","src":"25701:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25691:6:181"},"nodeType":"YulFunctionCall","src":"25691:31:181"},"nodeType":"YulExpressionStatement","src":"25691:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25738:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"25741:4:181","type":"","value":"0x31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25731:6:181"},"nodeType":"YulFunctionCall","src":"25731:15:181"},"nodeType":"YulExpressionStatement","src":"25731:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25762:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"25765:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"25755:6:181"},"nodeType":"YulFunctionCall","src":"25755:15:181"},"nodeType":"YulExpressionStatement","src":"25755:15:181"}]},"name":"panic_error_0x31","nodeType":"YulFunctionDefinition","src":"25649:127:181"},{"body":{"nodeType":"YulBlock","src":"25930:498:181","statements":[{"nodeType":"YulVariableDeclaration","src":"25940:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"25950:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"25944:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"25961:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25979:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"25990:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25975:3:181"},"nodeType":"YulFunctionCall","src":"25975:18:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"25965:6:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26009:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"26020:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26002:6:181"},"nodeType":"YulFunctionCall","src":"26002:21:181"},"nodeType":"YulExpressionStatement","src":"26002:21:181"},{"nodeType":"YulVariableDeclaration","src":"26032:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"26043:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"26036:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"26058:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"26078:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26072:5:181"},"nodeType":"YulFunctionCall","src":"26072:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"26062:6:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"26101:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"26109:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26094:6:181"},"nodeType":"YulFunctionCall","src":"26094:22:181"},"nodeType":"YulExpressionStatement","src":"26094:22:181"},{"nodeType":"YulAssignment","src":"26125:25:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26136:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26147:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26132:3:181"},"nodeType":"YulFunctionCall","src":"26132:18:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"26125:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"26159:29:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"26177:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"26185:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26173:3:181"},"nodeType":"YulFunctionCall","src":"26173:15:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"26163:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"26197:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"26206:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"26201:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"26265:137:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"26286:3:181"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"26301:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26295:5:181"},"nodeType":"YulFunctionCall","src":"26295:13:181"},{"kind":"number","nodeType":"YulLiteral","src":"26310:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26291:3:181"},"nodeType":"YulFunctionCall","src":"26291:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26279:6:181"},"nodeType":"YulFunctionCall","src":"26279:43:181"},"nodeType":"YulExpressionStatement","src":"26279:43:181"},{"nodeType":"YulAssignment","src":"26335:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"26346:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"26351:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26342:3:181"},"nodeType":"YulFunctionCall","src":"26342:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"26335:3:181"}]},{"nodeType":"YulAssignment","src":"26367:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"26381:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"26389:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26377:3:181"},"nodeType":"YulFunctionCall","src":"26377:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"26367:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"26227:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"26230:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"26224:2:181"},"nodeType":"YulFunctionCall","src":"26224:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"26238:18:181","statements":[{"nodeType":"YulAssignment","src":"26240:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"26249:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"26252:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26245:3:181"},"nodeType":"YulFunctionCall","src":"26245:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"26240:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"26220:3:181","statements":[]},"src":"26216:186:181"},{"nodeType":"YulAssignment","src":"26411:11:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"26419:3:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26411:4:181"}]}]},"name":"abi_encode_tuple_t_array$_t_uint32_$dyn_memory_ptr__to_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25899:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"25910:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25921:4:181","type":""}],"src":"25781:647:181"},{"body":{"nodeType":"YulBlock","src":"26584:507:181","statements":[{"nodeType":"YulVariableDeclaration","src":"26594:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"26604:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"26598:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"26615:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26633:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"26644:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26629:3:181"},"nodeType":"YulFunctionCall","src":"26629:18:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"26619:6:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26663:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"26674:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26656:6:181"},"nodeType":"YulFunctionCall","src":"26656:21:181"},"nodeType":"YulExpressionStatement","src":"26656:21:181"},{"nodeType":"YulVariableDeclaration","src":"26686:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"26697:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"26690:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"26712:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"26732:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26726:5:181"},"nodeType":"YulFunctionCall","src":"26726:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"26716:6:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"26755:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"26763:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26748:6:181"},"nodeType":"YulFunctionCall","src":"26748:22:181"},"nodeType":"YulExpressionStatement","src":"26748:22:181"},{"nodeType":"YulAssignment","src":"26779:25:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26790:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26801:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26786:3:181"},"nodeType":"YulFunctionCall","src":"26786:18:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"26779:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"26813:29:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"26831:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"26839:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26827:3:181"},"nodeType":"YulFunctionCall","src":"26827:15:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"26817:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"26851:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"26860:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"26855:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"26919:146:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"26940:3:181"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"26955:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26949:5:181"},"nodeType":"YulFunctionCall","src":"26949:13:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26972:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"26977:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"26968:3:181"},"nodeType":"YulFunctionCall","src":"26968:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"26981:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"26964:3:181"},"nodeType":"YulFunctionCall","src":"26964:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26945:3:181"},"nodeType":"YulFunctionCall","src":"26945:39:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26933:6:181"},"nodeType":"YulFunctionCall","src":"26933:52:181"},"nodeType":"YulExpressionStatement","src":"26933:52:181"},{"nodeType":"YulAssignment","src":"26998:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"27009:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"27014:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27005:3:181"},"nodeType":"YulFunctionCall","src":"27005:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"26998:3:181"}]},{"nodeType":"YulAssignment","src":"27030:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"27044:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"27052:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27040:3:181"},"nodeType":"YulFunctionCall","src":"27040:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"27030:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"26881:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"26884:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"26878:2:181"},"nodeType":"YulFunctionCall","src":"26878:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"26892:18:181","statements":[{"nodeType":"YulAssignment","src":"26894:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"26903:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"26906:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26899:3:181"},"nodeType":"YulFunctionCall","src":"26899:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"26894:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"26874:3:181","statements":[]},"src":"26870:195:181"},{"nodeType":"YulAssignment","src":"27074:11:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"27082:3:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"27074:4:181"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26553:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"26564:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26575:4:181","type":""}],"src":"26433:658:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_array_address_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_bytes_memory_ptr_$dyn_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let _1 := 0xffffffffffffffff\n        if gt(calldataload(headStart), _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(headStart)), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset_1)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let dst := allocate_memory(add(shl(5, _3), 32))\n        let dst_1 := dst\n        mstore(dst, _3)\n        dst := add(dst, 32)\n        let srcEnd := add(add(_2, shl(5, _3)), 32)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_2, 32)\n        for { } lt(src, srcEnd) { src := add(src, 32) }\n        {\n            if gt(calldataload(src), _1) { revert(0, 0) }\n            let _4 := add(_2, calldataload(src))\n            if iszero(slt(add(_4, 63), dataEnd)) { revert(0, 0) }\n            let _5 := calldataload(add(_4, 32))\n            if gt(_5, _1) { panic_error_0x41() }\n            let array := allocate_memory(add(and(add(_5, 0x1f), not(31)), 32))\n            mstore(array, _5)\n            if gt(add(add(_4, _5), 64), dataEnd) { revert(0, 0) }\n            calldatacopy(add(array, 32), add(_4, 64), _5)\n            mstore(add(add(array, _5), 32), 0)\n            mstore(dst, array)\n            dst := add(dst, 32)\n        }\n        value4 := dst_1\n    }\n    function abi_encode_uint32(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffff))\n    }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function abi_encode_tuple_t_uint128_t_uint128__to_t_uint128_t_uint128__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_decode_tuple_t_uint32t_bytes32(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bytes32_t_uint256__to_t_bytes32_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_uint32t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_array$_t_uint32_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n    }\n    function array_storeLengthForEncoding_string(pos, length) -> updated_pos\n    {\n        mstore(pos, length)\n        updated_pos := add(pos, 0x20)\n    }\n    function abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!delayBlocks\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_calldata_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        mstore(tail_1, value1)\n        pos := add(headStart, 64)\n        let srcPtr := value0\n        let i := 0\n        for { } lt(i, value1) { i := add(i, 1) }\n        {\n            mstore(pos, and(abi_decode_address(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_stringliteral_2d87153ecfbf898378d31617525dca29b55718c58d32c8c1caea6770b56c7d98__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 11)\n        mstore(add(headStart, 64), \"!connectors\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_eead9a749bb70fe1ce8febf2e6a2513dd4a5ce75eba52d12379ec95d317c3d3f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"!supported\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_79659e2a9d2f01c1bf48982e1eb3a21b05a6255fb73515db14625380c6699c98__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"invalid lengths\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e18affcae4aea5951cc6c3a501fd639ac8a06ed7c7513fba47119a1500ba1b8d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"redundant root\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, value0)\n        end := add(pos, 32)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        let tail_1 := abi_encode_bytes(value0, add(headStart, 64))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value1, tail_1)\n    }\n    function abi_encode_tuple_t_uint32_t_address__to_t_uint32_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffff))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_bytes32_t_uint256_t_bytes32__to_t_bytes32_t_uint256_t_bytes32__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 8)\n        mstore(add(headStart, 64), \"!watcher\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_f07da7b975140f505677e7936eeabdf78b829042e2b339dd9ec88a01bc429624__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"!connector\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint32_t_bytes32_t_uint128__to_t_uint32_t_bytes32_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_bytes32t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_encode_array_bytes32_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_array$_t_bytes32_$dyn_memory_ptr__to_t_array$_t_bytes32_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_array_bytes32_dyn(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bytes32_t_uint256_t_array$_t_bytes32_$dyn_memory_ptr__to_t_bytes32_t_uint256_t_array$_t_bytes32_$dyn_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), 96)\n        tail := abi_encode_array_bytes32_dyn(value2, add(headStart, 96))\n    }\n    function array_dataslot_array_uint32_dyn_storage(ptr) -> data\n    {\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n    }\n    function abi_encode_array_uint32_dyn_storage(value, pos) -> end\n    {\n        let length := sload(value)\n        pos := array_storeLengthForEncoding_string(pos, length)\n        let srcPtr := array_dataslot_array_uint32_dyn_storage(value)\n        let itemCounter := 0\n        for { }\n        lt(add(itemCounter, 7), length)\n        {\n            itemCounter := add(itemCounter, 8)\n        }\n        {\n            let data := sload(srcPtr)\n            let _1 := 0xffffffff\n            abi_encode_uint32(and(data, _1), pos)\n            let _2 := 0x20\n            abi_encode_uint32(and(shr(_2, data), _1), add(pos, _2))\n            let _3 := 64\n            abi_encode_uint32(and(shr(_3, data), _1), add(pos, _3))\n            let _4 := 96\n            abi_encode_uint32(and(shr(_4, data), _1), add(pos, _4))\n            let _5 := 128\n            abi_encode_uint32(and(shr(_5, data), _1), add(pos, _5))\n            let _6 := 160\n            abi_encode_uint32(and(shr(_6, data), _1), add(pos, _6))\n            let _7 := 192\n            abi_encode_uint32(and(shr(_7, data), _1), add(pos, _7))\n            let _8 := 224\n            abi_encode_uint32(shr(_8, data), add(pos, _8))\n            pos := add(pos, 256)\n            srcPtr := add(srcPtr, 1)\n        }\n        let data_1 := sload(srcPtr)\n        if lt(itemCounter, length)\n        {\n            abi_encode_uint32(and(data_1, 0xffffffff), pos)\n            pos := add(pos, 0x20)\n            itemCounter := add(itemCounter, 1)\n        }\n        if lt(itemCounter, length)\n        {\n            abi_encode_uint32(and(shr(0x20, data_1), 0xffffffff), pos)\n            pos := add(pos, 0x20)\n            itemCounter := add(itemCounter, 1)\n        }\n        if lt(itemCounter, length)\n        {\n            abi_encode_uint32(and(shr(64, data_1), 0xffffffff), pos)\n            pos := add(pos, 0x20)\n            itemCounter := add(itemCounter, 1)\n        }\n        if lt(itemCounter, length)\n        {\n            abi_encode_uint32(and(shr(96, data_1), 0xffffffff), pos)\n            pos := add(pos, 0x20)\n            itemCounter := add(itemCounter, 1)\n        }\n        if lt(itemCounter, length)\n        {\n            abi_encode_uint32(and(shr(128, data_1), 0xffffffff), pos)\n            pos := add(pos, 0x20)\n            itemCounter := add(itemCounter, 1)\n        }\n        if lt(itemCounter, length)\n        {\n            abi_encode_uint32(and(shr(160, data_1), 0xffffffff), pos)\n            pos := add(pos, 0x20)\n            itemCounter := add(itemCounter, 1)\n        }\n        if lt(itemCounter, length)\n        {\n            abi_encode_uint32(and(shr(192, data_1), 0xffffffff), pos)\n            pos := add(pos, 0x20)\n            itemCounter := add(itemCounter, 1)\n        }\n        if lt(itemCounter, length)\n        {\n            abi_encode_uint32(shr(224, data_1), pos)\n            pos := add(pos, 0x20)\n        }\n        end := pos\n    }\n    function abi_encode_array_address_dyn_storage(value, pos) -> end\n    {\n        let length := sload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        mstore(0, value)\n        let srcPtr := keccak256(0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(sload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, 1)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_uint32_t_address_t_array$_t_uint32_$dyn_storage_t_array$_t_address_$dyn_storage__to_t_uint32_t_address_t_array$_t_uint32_$dyn_memory_ptr_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffff))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 64), 128)\n        let tail_1 := abi_encode_array_uint32_dyn_storage(value2, add(headStart, 128))\n        mstore(add(headStart, 96), sub(tail_1, headStart))\n        tail := abi_encode_array_address_dyn_storage(value3, tail_1)\n    }\n    function abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"already watcher manager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1b3dad4847886d431ff5d32a756e774697e6b3066b8c2075a79c1c0724122a74__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"!matching length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_array$_t_uint32_$dyn_calldata_ptr__to_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        mstore(tail_1, value1)\n        pos := add(headStart, 64)\n        let srcPtr := value0\n        let i := 0\n        for { } lt(i, value1) { i := add(i, 1) }\n        {\n            mstore(pos, and(abi_decode_uint32(srcPtr), 0xffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_stringliteral_069b0c751baa033a978be3583d0de58dbb093dd8290b507a8911c35f2d486c99__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 8)\n        mstore(add(headStart, 64), \"!domains\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint32_t_address_t_array$_t_uint32_$dyn_storage_t_array$_t_address_$dyn_storage_t_address__to_t_uint32_t_address_t_array$_t_uint32_$dyn_memory_ptr_t_array$_t_address_$dyn_memory_ptr_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffff))\n        let _1 := sub(shl(160, 1), 1)\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), 160)\n        let tail_1 := abi_encode_array_uint32_dyn_storage(value2, add(headStart, 160))\n        mstore(add(headStart, 96), sub(tail_1, headStart))\n        tail := abi_encode_array_address_dyn_storage(value3, tail_1)\n        mstore(add(headStart, 128), and(value4, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"Pausable: not paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c974277859dbe5199cac4a5dad47692593995fbef88ea0805b1b8f52600e925d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"already removed\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Pausable: paused\")\n        tail := add(headStart, 96)\n    }\n    function increment_t_uint128(value) -> ret\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_encode_tuple_t_stringliteral_858f5e5a76bb3dc38377e7f81e3338b01e1328003db4ac23cd71e280fddde026__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 13)\n        mstore(add(headStart, 64), \"queue !init'd\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_a8a92d31cbc8779211c13437809c468e10617644bdb6370cfbd56808dd627715__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"!acceptable max\")\n        tail := add(headStart, 96)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        sum := add(and(x, _1), and(y, _1))\n        if gt(sum, _1) { panic_error_0x11() }\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        diff := sub(and(x, _1), and(y, _1))\n        if gt(diff, _1) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_a119ebcb269307a76882c3ab3433e191b381689141f8fce583b20a0c51f09799__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 13)\n        mstore(add(headStart, 64), \"domain exists\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_9308cd27a729cf7a07f3d8b44d2c21a947a78dd47c28e8fba8bd6a0d96c10ccd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"DomainIndexer at capacity\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_d0dafca8381883f95defc09b28a81ebd60e1499d273f6a1ea9c522dc0a7ecdb1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"connector !exists\")\n        tail := add(headStart, 96)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_array$_t_uint32_$dyn_memory_ptr__to_t_array$_t_uint32_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"38431":[{"length":32,"start":1324},{"length":32,"start":3668},{"length":32,"start":3809}]},"linkReferences":{},"object":"60806040526004361061020f5760003560e01c80638456cb5911610118578063b1f8100d116100a0578063d1851c921161006f578063d1851c9214610621578063d232c2201461063f578063d2a3cc711461065e578063db0f01691461067e578063e6f1208d1461069e57600080fd5b8063b1f8100d146105b6578063b904670f146105d6578063c5b350df146105f6578063c8ef89de1461060b57600080fd5b8063957908d1116100e7578063957908d1146104f0578063a01892a51461051a578063a792c29b1461054e578063aa0d60a314610573578063ad9c0c2e146105a057600080fd5b80638456cb59146104885780638da5cb5b1461049d5780638e7d93fa146104bb578063909907cb146104db57600080fd5b8063412e12db1161019b5780636a42b8f81161016a5780636a42b8f8146103dc578063715018a6146103f25780637bc24d99146104075780637d434e911461041d5780637d5343081461043d57600080fd5b8063412e12db14610366578063498c2c2e146103795780635c975abb1461038f57806366cf8fab146103a757600080fd5b806324ec5d05116101e257806324ec5d05146102b757806327186c6a146102fc5780633c4baaf81461031c5780633cf52ffb1461033c5780633f4ba83a1461035157600080fd5b80630165bc81146102145780630f8ef4ee1461023d57806313ede1a11461025f5780631eeaabea14610297575b600080fd5b34801561022057600080fd5b5061022a600e5481565b6040519081526020015b60405180910390f35b34801561024957600080fd5b5061025d61025836600461204e565b6106be565b005b34801561026b57600080fd5b5061027f61027a36600461204e565b610733565b6040516001600160a01b039091168152602001610234565b3480156102a357600080fd5b5061025d6102b236600461204e565b61075d565b3480156102c357600080fd5b506102ec6102d2366004612080565b63ffffffff16600090815260086020526040902054151590565b6040519015158152602001610234565b34801561030857600080fd5b5061025d6103173660046120e7565b61080f565b34801561032857600080fd5b5061022a610337366004612080565b61087a565b34801561034857600080fd5b5060025461022a565b34801561035d57600080fd5b5061025d6108de565b61025d610374366004612170565b61091b565b34801561038557600080fd5b5061022a60075481565b34801561039b57600080fd5b5060035460ff166102ec565b3480156103b357600080fd5b506103c76103c236600461204e565b610c08565b60405163ffffffff9091168152602001610234565b3480156103e857600080fd5b5062093a8061022a565b3480156103fe57600080fd5b5061025d610c42565b34801561041357600080fd5b5061022a60055481565b34801561042957600080fd5b5061027f610438366004612080565b610c6d565b34801561044957600080fd5b50600a54610468906001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610234565b34801561049457600080fd5b5061025d610ca5565b3480156104a957600080fd5b506000546001600160a01b031661027f565b3480156104c757600080fd5b5061025d6104d63660046122e3565b610d5c565b3480156104e757600080fd5b5061022a610e17565b3480156104fc57600080fd5b50610505610e28565b60408051928352602083019190915201610234565b34801561052657600080fd5b5061027f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561055a57600080fd5b5060035461027f9061010090046001600160a01b031681565b34801561057f57600080fd5b50610588606481565b6040516001600160801b039091168152602001610234565b3480156105ac57600080fd5b5061022a60095481565b3480156105c257600080fd5b5061025d6105d1366004612324565b610fb6565b3480156105e257600080fd5b5061025d6105f136600461233f565b611057565b34801561060257600080fd5b5061025d6110cf565b34801561061757600080fd5b5061022a6101f481565b34801561062d57600080fd5b506001546001600160a01b031661027f565b34801561064b57600080fd5b506000546001600160a01b0316156102ec565b34801561066a57600080fd5b5061025d610679366004612324565b61113f565b34801561068a57600080fd5b5061025d610699366004612372565b611223565b3480156106aa57600080fd5b5061025d6106b9366004612080565b611336565b6000546001600160a01b031633146106e9576040516311a8a1bb60e31b815260040160405180910390fd5b6106f1611429565b6106fc600a82611472565b6040518181527fd2a17a10ab346c94fae909b2fbfa0fedaf30d08983e74dcc0a92be2c40c437f9906020015b60405180910390a150565b6006818154811061074357600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610788576040516311a8a1bb60e31b815260040160405180910390fd5b60095481036107cd5760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b6009546040805183815260208101929092527fef322fd61cb3d8514326f0b28140a92a29cd10996ad80d0671e43d2483464c1d910160405180910390a1600955565b60075482826040516020016108259291906123de565b60405160208183030381529060405280519060200120146108765760405162461bcd60e51b815260206004820152600b60248201526a21636f6e6e6563746f727360a81b60448201526064016107c4565b5050565b63ffffffff81166000908152600860205260408120548082036108cc5760405162461bcd60e51b815260206004820152600a602482015269085cdd5c1c1bdc9d195960b21b60448201526064016107c4565b6108d7600182612440565b9392505050565b6000546001600160a01b03163314610909576040516311a8a1bb60e31b815260040160405180910390fd5b610911611429565b6109196114e3565b565b610923611535565b61092d858561080f565b83828114801561093d5750808251145b61097b5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206c656e6774687360881b60448201526064016107c4565b600080610986610e28565b91509150600e5482036109cc5760405162461bcd60e51b815260206004820152600e60248201526d1c99591d5b99185b9d081c9bdbdd60921b60448201526064016107c4565b600e8290553460005b848163ffffffff161015610bb95789898263ffffffff168181106109fb576109fb612453565b9050602002016020810190610a109190612324565b6001600160a01b03166348e6fa2389898463ffffffff16818110610a3657610a36612453565b9050602002013586604051602001610a5091815260200190565b604051602081830303815290604052898563ffffffff1681518110610a7757610a77612453565b60200260200101516040518463ffffffff1660e01b8152600401610a9c9291906124af565b6000604051808303818588803b158015610ab557600080fd5b505af193505050508015610ac7575060015b610b84577f51f2ef0ced5ef0ec14268d79d48589f9ccff35b2b0baf5059a90166caffea7a760048263ffffffff1681548110610b0557610b05612453565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff168b8b8463ffffffff16818110610b4357610b43612453565b9050602002016020810190610b589190612324565b6040805163ffffffff90931683526001600160a01b0390911660208301520160405180910390a1610bb1565b87878263ffffffff16818110610b9c57610b9c612453565b9050602002013582610bae9190612440565b91505b6001016109d5565b50600554604080518581526020810185905280820192909252517f3fcedb4669de80ca7de6e18b7b25cc8e4f6861796f1db0f2409fcdf0d6901f569181900360600190a1505050505050505050565b60048181548110610c1857600080fd5b9060005260206000209060089182820401919006600402915054906101000a900463ffffffff1681565b6000546001600160a01b03163314610919576040516311a8a1bb60e31b815260040160405180910390fd5b60006006610c7a8361087a565b81548110610c8a57610c8a612453565b6000918252602090912001546001600160a01b031692915050565b6003546040516384785ecd60e01b81523360048201526101009091046001600160a01b0316906384785ecd90602401602060405180830381865afa158015610cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1591906124dd565b610d4c5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b60448201526064016107c4565b610d54611535565b61091961157b565b610d64611535565b8133610d6f82610c6d565b6001600160a01b031614610db25760405162461bcd60e51b815260206004820152600a60248201526910b1b7b73732b1ba37b960b11b60448201526064016107c4565b6000610dbf600a846115b8565b6040805163ffffffff87168152602081018690526001600160801b0383168183015290519192507f1daad24ee1bf0bcc72ab681d29df86ec2794361b223da31f148b9f826cd135a8919081900360600190a150505050565b6000610e23600a61162a565b905090565b600080610e33611535565b600954600090610e4790600a906064611654565b90508051600003610edc577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9b0a6de6040518163ffffffff1660e01b81526004016040805180830381865afa158015610eaf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed391906124ff565b92509250509091565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166334a55ee6846040518263ffffffff1660e01b8152600401610f2b919061255e565b60408051808303816000875af1158015610f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6d91906124ff565b915091507f41b13c36968d02a1fd71e0f5db55ba2fb043c215a4d1e17633293ff273a77cd4828285604051610fa493929190612571565b60405180910390a19093509150509091565b6000546001600160a01b03163314610fe1576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610fff575060025415155b1561101d576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361104b57604051634a2fb73f60e11b815260040160405180910390fd5b611054816119d6565b50565b6000546001600160a01b03163314611082576040516311a8a1bb60e31b815260040160405180910390fd5b61108c8282611a24565b7f95ef69787290b89c35a092c89db1b283b43724d01263e683cfb560c758cdbe708282600460066040516110c39493929190612756565b60405180910390a15050565b6001546001600160a01b031633146110fa576040516311a7f27160e11b815260040160405180910390fd5b62093a806002544261110c9190612440565b1161112a576040516324e0285f60e21b815260040160405180910390fd5b600154610919906001600160a01b0316611c10565b6000546001600160a01b0316331461116a576040516311a8a1bb60e31b815260040160405180910390fd5b6003546001600160a01b036101009091048116908216036111cd5760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e6167657200000000000000000060448201526064016107c4565b60038054610100600160a81b0319166101006001600160a01b038416908102919091179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610728565b8281146112655760405162461bcd60e51b815260206004820152601060248201526f042dac2e8c6d0d2dcce40d8cadccee8d60831b60448201526064016107c4565b600554848460405160200161127b9291906127a3565b60405160208183030381529060405280519060200120146112c95760405162461bcd60e51b815260206004820152600860248201526721646f6d61696e7360c01b60448201526064016107c4565b60075482826040516020016112df9291906123de565b60405160208183030381529060405280519060200120146113305760405162461bcd60e51b815260206004820152600b60248201526a21636f6e6e6563746f727360a81b60448201526064016107c4565b50505050565b6003546040516384785ecd60e01b81523360048201526101009091046001600160a01b0316906384785ecd90602401602060405180830381865afa158015611382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a691906124dd565b6113dd5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b60448201526064016107c4565b60006113e882611c75565b90507f6a1097f391a37dc63e0860e64ec34442971eeed2fda4d1a90141fa9ce25eb7eb828260046006336040516110c39594939291906127e1565b60019055565b60035460ff166109195760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107c4565b600081815260038301602052604090205460ff16156114c55760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c995b5bdd9959608a1b60448201526064016107c4565b6000908152600390910160205260409020805460ff19166001179055565b6114eb611429565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60035460ff16156109195760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107c4565b611583611535565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586115183390565b8154600090439084906010906115dd90600160801b90046001600160801b0316612837565b82546001600160801b038083166101009490940a84810291021990911617909255600090815260018601602090815260408083209690965560029096019095529290932092909255919050565b80546000906001600160801b03600160801b82048116911661164c8282611eec565b949350505050565b82546060906001600160801b0380821691600160801b9004168181101561168d57505060408051600081526020810190915290506108d7565b816001600160801b03166000036116d65760405162461bcd60e51b815260206004820152600d60248201526c1c5d595d5948085a5b9a5d09d9609a1b60448201526064016107c4565b6000846001600160801b0316116117215760405162461bcd60e51b815260206004820152600f60248201526e042c2c6c6cae0e8c2c4d8ca40dac2f608b1b60448201526064016107c4565b6000600161172f868561285d565b6117399190612884565b9050806001600160801b0316826001600160801b03161115611759578091505b5060006117668643612440565b905060005b826001600160801b0316846001600160801b0316116117bd576001600160801b03831660009081526002890160205260409020548281116117b05760019150506117bd565b506000199092019161176b565b806117dd57505060408051600081526020810190915292506108d7915050565b6000846117eb85600161285d565b6117f59190612884565b6001600160801b031667ffffffffffffffff81111561181657611816612129565b60405190808252806020026020018201604052801561183f578160200160208202803683370190505b5090506000805b856001600160801b0316876001600160801b0316116118fb576001600160801b038716600090815260018c01602090815260408083205480845260038f019092529091205460ff166118bc57808484815181106118a5576118a5612453565b6020026020010181815250508260010192506118c3565b8160010191505b506001600160801b038716600090815260018c81016020908152604080842084905560028f0190915282209190915590960195611846565b8a546fffffffffffffffffffffffffffffffff19166001600160801b038816178b55600081900361193557829750505050505050506108d7565b60008267ffffffffffffffff81111561195057611950612129565b604051908082528060200260200182016040528015611979578160200160208202803683370190505b50905060005b838110156119c65784818151811061199957611999612453565b60200260200101518282815181106119b3576119b3612453565b602090810291909101015260010161197f565b5097506108d79650505050505050565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b63ffffffff821660009081526008602052604090205415611a775760405162461bcd60e51b815260206004820152600d60248201526c646f6d61696e2065786973747360981b60448201526064016107c4565b6001600160a01b038116611aba5760405162461bcd60e51b815260206004820152600a60248201526910b1b7b73732b1ba37b960b11b60448201526064016107c4565b6004546101f411611b0d5760405162461bcd60e51b815260206004820152601960248201527f446f6d61696e496e64657865722061742063617061636974790000000000000060448201526064016107c4565b600480546001818101835560088083047f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01805463ffffffff808916600790961687026101000a8681029102199091161790556006805492830190557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180546001600160a01b0386166001600160a01b03199091161790559154600091825260209290925260409020819055611bc4611f16565b6040805163ffffffff851681526001600160a01b03841660208201527f4fc27362d8ab3086efd93b7880e99ac02e906d0ba9b71ca90239ade53090f703910160405180910390a1505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600080611c818361087a565b9050600060068281548110611c9857611c98612453565b6000918252602090912001546001600160a01b0316905080611cf05760405162461bcd60e51b8152602060048201526011602482015270636f6e6e6563746f72202165786973747360781b60448201526064016107c4565b600454600090611d0290600190612440565b905080831015611e1b57600060048281548110611d2157611d21612453565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1690508060048581548110611d5d57611d5d612453565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555060068281548110611da357611da3612453565b600091825260209091200154600680546001600160a01b039092169186908110611dcf57611dcf612453565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055611e038460016128a4565b63ffffffff9091166000908152600860205260409020555b6004805480611e2c57611e2c6128b7565b600082815260209020600860001990920191820401805463ffffffff600460078516026101000a021916905590556006805480611e6b57611e6b6128b7565b60008281526020808220830160001990810180546001600160a01b031916905590920190925563ffffffff87168252600890526040812055611eab611f16565b60405163ffffffff861681527f7e560b48a4bba1688eb45afd6712a11fa42b9abbb48a8e14e2f15e467ab420e49060200160405180910390a1509392505050565b600081611efa84600161285d565b611f049190612884565b6001600160801b031690505b92915050565b60006004805480602002602001604051908101604052809291908181526020018280548015611f9057602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611f535790505b5050505050905060006006805480602002602001604051908101604052809291908181526020018280548015611fef57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611fd1575b505050505090508160405160200161200791906128cd565b60408051601f1981840301815290829052805160209182012060055561202f91839101612917565b60408051601f1981840301815291905280516020909101206007555050565b60006020828403121561206057600080fd5b5035919050565b803563ffffffff8116811461207b57600080fd5b919050565b60006020828403121561209257600080fd5b6108d782612067565b60008083601f8401126120ad57600080fd5b50813567ffffffffffffffff8111156120c557600080fd5b6020830191508360208260051b85010111156120e057600080fd5b9250929050565b600080602083850312156120fa57600080fd5b823567ffffffffffffffff81111561211157600080fd5b61211d8582860161209b565b90969095509350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561216857612168612129565b604052919050565b60008060008060006060868803121561218857600080fd5b67ffffffffffffffff808735111561219f57600080fd5b6121ac888835890161209b565b90965094506020870135818111156121c357600080fd5b6121cf89828a0161209b565b9095509350506040870135818111156121e757600080fd5b8701601f810189136121f857600080fd5b80358281111561220a5761220a612129565b61221960208260051b0161213f565b8082825260208201915060208360051b85010192508b83111561223b57600080fd5b602084015b838110156122d057858135111561225657600080fd5b803585018d603f82011261226957600080fd5b60208101358781111561227e5761227e612129565b612291601f8201601f191660200161213f565b8181528f60408385010111156122a657600080fd5b81604084016020830137600060208383010152808652505050602083019250602081019050612240565b5080955050505050509295509295909350565b600080604083850312156122f657600080fd5b6122ff83612067565b946020939093013593505050565b80356001600160a01b038116811461207b57600080fd5b60006020828403121561233657600080fd5b6108d78261230d565b6000806040838503121561235257600080fd5b61235b83612067565b91506123696020840161230d565b90509250929050565b6000806000806040858703121561238857600080fd5b843567ffffffffffffffff808211156123a057600080fd5b6123ac8883890161209b565b909650945060208701359150808211156123c557600080fd5b506123d28782880161209b565b95989497509550505050565b60208082528181018390526000908460408401835b8681101561241f576001600160a01b0361240c8461230d565b16825291830191908301906001016123f3565b509695505050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611f1057611f1061242a565b634e487b7160e01b600052603260045260246000fd5b6000815180845260005b8181101561248f57602081850181015186830182015201612473565b506000602082860101526020601f19601f83011685010191505092915050565b6040815260006124c26040830185612469565b82810360208401526124d48185612469565b95945050505050565b6000602082840312156124ef57600080fd5b815180151581146108d757600080fd5b6000806040838503121561251257600080fd5b505080516020909101519092909150565b600081518084526020808501945080840160005b8381101561255357815187529582019590820190600101612537565b509495945050505050565b6020815260006108d76020830184612523565b8381528260208201526060604082015260006124d46060830184612523565b805480835260008281526020808220940193909190825b8260078201101561261f57815463ffffffff8082168852602082811c821690890152604082811c821690890152606082811c821690890152608082811c82169089015260a082811c82169089015260c082811c9091169088015260e090811c90870152610100909501946001909101906008016125a7565b9054908281101561263d5763ffffffff821686526020909501946001015b8281101561265d57602082901c63ffffffff168652602095909501946001015b8281101561267c5763ffffffff604083901c1686526020909501946001015b8281101561269b5763ffffffff606083901c1686526020909501946001015b828110156126ba5763ffffffff608083901c1686526020909501946001015b828110156126d95763ffffffff60a083901c1686526020909501946001015b828110156126f85763ffffffff60c083901c1686526020909501946001015b8281101561270e5760e082901c86526020860195505b5093949350505050565b6000815480845260208085019450836000528060002060005b838110156125535781546001600160a01b031687529582019560019182019101612731565b63ffffffff851681526001600160a01b038416602082015260806040820181905260009061278690830185612590565b82810360608401526127988185612718565b979650505050505050565b60208082528181018390526000908460408401835b8681101561241f5763ffffffff6127ce84612067565b16825291830191908301906001016127b8565b63ffffffff86168152600060018060a01b03808716602084015260a0604084015261280f60a0840187612590565b83810360608501526128218187612718565b9250508084166080840152509695505050505050565b60006001600160801b038083168181036128535761285361242a565b6001019392505050565b6001600160801b0381811683821601908082111561287d5761287d61242a565b5092915050565b6001600160801b0382811682821603908082111561287d5761287d61242a565b80820180821115611f1057611f1061242a565b634e487b7160e01b600052603160045260246000fd5b6020808252825182820181905260009190848201906040850190845b8181101561290b57835163ffffffff16835292840192918401916001016128e9565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561290b5783516001600160a01b03168352928401929184019160010161293356fea2646970667358221220a8c58850922a44dbb0897daa160e573a2789f40adfc549f9fa8345ff5c1ba6e864736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x20F JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x118 JUMPI DUP1 PUSH4 0xB1F8100D GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xD1851C92 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x621 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x63F JUMPI DUP1 PUSH4 0xD2A3CC71 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0xDB0F0169 EQ PUSH2 0x67E JUMPI DUP1 PUSH4 0xE6F1208D EQ PUSH2 0x69E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x5B6 JUMPI DUP1 PUSH4 0xB904670F EQ PUSH2 0x5D6 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x5F6 JUMPI DUP1 PUSH4 0xC8EF89DE EQ PUSH2 0x60B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x957908D1 GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0x957908D1 EQ PUSH2 0x4F0 JUMPI DUP1 PUSH4 0xA01892A5 EQ PUSH2 0x51A JUMPI DUP1 PUSH4 0xA792C29B EQ PUSH2 0x54E JUMPI DUP1 PUSH4 0xAA0D60A3 EQ PUSH2 0x573 JUMPI DUP1 PUSH4 0xAD9C0C2E EQ PUSH2 0x5A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x488 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x49D JUMPI DUP1 PUSH4 0x8E7D93FA EQ PUSH2 0x4BB JUMPI DUP1 PUSH4 0x909907CB EQ PUSH2 0x4DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x412E12DB GT PUSH2 0x19B JUMPI DUP1 PUSH4 0x6A42B8F8 GT PUSH2 0x16A JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x3DC JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x3F2 JUMPI DUP1 PUSH4 0x7BC24D99 EQ PUSH2 0x407 JUMPI DUP1 PUSH4 0x7D434E91 EQ PUSH2 0x41D JUMPI DUP1 PUSH4 0x7D534308 EQ PUSH2 0x43D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x412E12DB EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0x498C2C2E EQ PUSH2 0x379 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x38F JUMPI DUP1 PUSH4 0x66CF8FAB EQ PUSH2 0x3A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x24EC5D05 GT PUSH2 0x1E2 JUMPI DUP1 PUSH4 0x24EC5D05 EQ PUSH2 0x2B7 JUMPI DUP1 PUSH4 0x27186C6A EQ PUSH2 0x2FC JUMPI DUP1 PUSH4 0x3C4BAAF8 EQ PUSH2 0x31C JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x33C JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x165BC81 EQ PUSH2 0x214 JUMPI DUP1 PUSH4 0xF8EF4EE EQ PUSH2 0x23D JUMPI DUP1 PUSH4 0x13EDE1A1 EQ PUSH2 0x25F JUMPI DUP1 PUSH4 0x1EEAABEA EQ PUSH2 0x297 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH1 0xE SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x258 CALLDATASIZE PUSH1 0x4 PUSH2 0x204E JUMP JUMPDEST PUSH2 0x6BE JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27F PUSH2 0x27A CALLDATASIZE PUSH1 0x4 PUSH2 0x204E JUMP JUMPDEST PUSH2 0x733 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x2B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x204E JUMP JUMPDEST PUSH2 0x75D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EC PUSH2 0x2D2 CALLDATASIZE PUSH1 0x4 PUSH2 0x2080 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x308 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x317 CALLDATASIZE PUSH1 0x4 PUSH2 0x20E7 JUMP JUMPDEST PUSH2 0x80F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x328 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x337 CALLDATASIZE PUSH1 0x4 PUSH2 0x2080 JUMP JUMPDEST PUSH2 0x87A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x22A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x8DE JUMP JUMPDEST PUSH2 0x25D PUSH2 0x374 CALLDATASIZE PUSH1 0x4 PUSH2 0x2170 JUMP JUMPDEST PUSH2 0x91B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x385 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x39B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0x2EC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3C7 PUSH2 0x3C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x204E JUMP JUMPDEST PUSH2 0xC08 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x22A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0xC42 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x413 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x429 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27F PUSH2 0x438 CALLDATASIZE PUSH1 0x4 PUSH2 0x2080 JUMP JUMPDEST PUSH2 0xC6D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x449 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xA SLOAD PUSH2 0x468 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV AND DUP3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0xCA5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x27F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x4D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x22E3 JUMP JUMPDEST PUSH2 0xD5C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0xE17 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x505 PUSH2 0xE28 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x526 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27F PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x55A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x27F SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x57F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x588 PUSH1 0x64 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x234 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x5D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x2324 JUMP JUMPDEST PUSH2 0xFB6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x5F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x233F JUMP JUMPDEST PUSH2 0x1057 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x602 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x10CF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x617 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x22A PUSH2 0x1F4 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x62D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x27F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x64B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x2EC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x66A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x679 CALLDATASIZE PUSH1 0x4 PUSH2 0x2324 JUMP JUMPDEST PUSH2 0x113F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x68A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x699 CALLDATASIZE PUSH1 0x4 PUSH2 0x2372 JUMP JUMPDEST PUSH2 0x1223 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25D PUSH2 0x6B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x2080 JUMP JUMPDEST PUSH2 0x1336 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x6E9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6F1 PUSH2 0x1429 JUMP JUMPDEST PUSH2 0x6FC PUSH1 0xA DUP3 PUSH2 0x1472 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0xD2A17A10AB346C94FAE909B2FBFA0FEDAF30D08983E74DCC0A92BE2C40C437F9 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x6 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x743 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x788 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x9 SLOAD DUP2 SUB PUSH2 0x7CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2164656C6179426C6F636B73 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH32 0xEF322FD61CB3D8514326F0B28140A92A29CD10996AD80D0671E43D2483464C1D SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x9 SSTORE JUMP JUMPDEST PUSH1 0x7 SLOAD DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x825 SWAP3 SWAP2 SWAP1 PUSH2 0x23DE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ PUSH2 0x876 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x21636F6E6E6563746F7273 PUSH1 0xA8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 DUP3 SUB PUSH2 0x8CC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85CDD5C1C1BDC9D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH2 0x8D7 PUSH1 0x1 DUP3 PUSH2 0x2440 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x909 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x911 PUSH2 0x1429 JUMP JUMPDEST PUSH2 0x919 PUSH2 0x14E3 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x923 PUSH2 0x1535 JUMP JUMPDEST PUSH2 0x92D DUP6 DUP6 PUSH2 0x80F JUMP JUMPDEST DUP4 DUP3 DUP2 EQ DUP1 ISZERO PUSH2 0x93D JUMPI POP DUP1 DUP3 MLOAD EQ JUMPDEST PUSH2 0x97B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x696E76616C6964206C656E67746873 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x986 PUSH2 0xE28 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0xE SLOAD DUP3 SUB PUSH2 0x9CC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x1C99591D5B99185B9D081C9BDBDD PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0xE DUP3 SWAP1 SSTORE CALLVALUE PUSH1 0x0 JUMPDEST DUP5 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xBB9 JUMPI DUP10 DUP10 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0x9FB JUMPI PUSH2 0x9FB PUSH2 0x2453 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xA10 SWAP2 SWAP1 PUSH2 0x2324 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x48E6FA23 DUP10 DUP10 DUP5 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xA36 JUMPI PUSH2 0xA36 PUSH2 0x2453 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xA50 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP10 DUP6 PUSH4 0xFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0xA77 JUMPI PUSH2 0xA77 PUSH2 0x2453 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA9C SWAP3 SWAP2 SWAP1 PUSH2 0x24AF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP4 POP POP POP POP DUP1 ISZERO PUSH2 0xAC7 JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0xB84 JUMPI PUSH32 0x51F2EF0CED5EF0EC14268D79D48589F9CCFF35B2B0BAF5059A90166CAFFEA7A7 PUSH1 0x4 DUP3 PUSH4 0xFFFFFFFF AND DUP2 SLOAD DUP2 LT PUSH2 0xB05 JUMPI PUSH2 0xB05 PUSH2 0x2453 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x8 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH1 0x4 MUL SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP12 DUP12 DUP5 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xB43 JUMPI PUSH2 0xB43 PUSH2 0x2453 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xB58 SWAP2 SWAP1 PUSH2 0x2324 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0xBB1 JUMP JUMPDEST DUP8 DUP8 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xB9C JUMPI PUSH2 0xB9C PUSH2 0x2453 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD DUP3 PUSH2 0xBAE SWAP2 SWAP1 PUSH2 0x2440 JUMP JUMPDEST SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x9D5 JUMP JUMPDEST POP PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE MLOAD PUSH32 0x3FCEDB4669DE80CA7DE6E18B7B25CC8E4F6861796F1DB0F2409FCDF0D6901F56 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x4 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0xC18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x8 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH1 0x4 MUL SWAP2 POP SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x919 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x6 PUSH2 0xC7A DUP4 PUSH2 0x87A JUMP JUMPDEST DUP2 SLOAD DUP2 LT PUSH2 0xC8A JUMPI PUSH2 0xC8A PUSH2 0x2453 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x100 SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCF1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD15 SWAP2 SWAP1 PUSH2 0x24DD JUMP JUMPDEST PUSH2 0xD4C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH2 0xD54 PUSH2 0x1535 JUMP JUMPDEST PUSH2 0x919 PUSH2 0x157B JUMP JUMPDEST PUSH2 0xD64 PUSH2 0x1535 JUMP JUMPDEST DUP2 CALLER PUSH2 0xD6F DUP3 PUSH2 0xC6D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xDB2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x10B1B7B73732B1BA37B9 PUSH1 0xB1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDBF PUSH1 0xA DUP5 PUSH2 0x15B8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH32 0x1DAAD24EE1BF0BCC72AB681D29DF86EC2794361B223DA31F148B9F826CD135A8 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE23 PUSH1 0xA PUSH2 0x162A JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xE33 PUSH2 0x1535 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x0 SWAP1 PUSH2 0xE47 SWAP1 PUSH1 0xA SWAP1 PUSH1 0x64 PUSH2 0x1654 JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0xEDC JUMPI PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC9B0A6DE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEAF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xED3 SWAP2 SWAP1 PUSH2 0x24FF JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x34A55EE6 DUP5 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF2B SWAP2 SWAP1 PUSH2 0x255E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF49 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF6D SWAP2 SWAP1 PUSH2 0x24FF JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH32 0x41B13C36968D02A1FD71E0F5DB55BA2FB043C215A4D1E17633293FF273A77CD4 DUP3 DUP3 DUP6 PUSH1 0x40 MLOAD PUSH2 0xFA4 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2571 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 SWAP1 SWAP4 POP SWAP2 POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xFE1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0xFFF JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x101D JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x104B JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1054 DUP2 PUSH2 0x19D6 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1082 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x108C DUP3 DUP3 PUSH2 0x1A24 JUMP JUMPDEST PUSH32 0x95EF69787290B89C35A092C89DB1B283B43724D01263E683CFB560C758CDBE70 DUP3 DUP3 PUSH1 0x4 PUSH1 0x6 PUSH1 0x40 MLOAD PUSH2 0x10C3 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2756 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10FA JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x110C SWAP2 SWAP1 PUSH2 0x2440 JUMP JUMPDEST GT PUSH2 0x112A JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x919 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1C10 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x116A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x100 SWAP1 SWAP2 DIV DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0x11CD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616C72656164792077617463686572206D616E61676572000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND PUSH2 0x100 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC16D059E43D7F8E29CCB4E001A2F249D3C59E274925D6A6BC3912943441D9F6C SWAP1 PUSH1 0x20 ADD PUSH2 0x728 JUMP JUMPDEST DUP3 DUP2 EQ PUSH2 0x1265 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x42DAC2E8C6D0D2DCCE40D8CADCCEE8D PUSH1 0x83 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x127B SWAP3 SWAP2 SWAP1 PUSH2 0x27A3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ PUSH2 0x12C9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x21646F6D61696E73 PUSH1 0xC0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x12DF SWAP3 SWAP2 SWAP1 PUSH2 0x23DE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ PUSH2 0x1330 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x21636F6E6E6563746F7273 PUSH1 0xA8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x100 SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1382 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13A6 SWAP2 SWAP1 PUSH2 0x24DD JUMP JUMPDEST PUSH2 0x13DD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13E8 DUP3 PUSH2 0x1C75 JUMP JUMPDEST SWAP1 POP PUSH32 0x6A1097F391A37DC63E0860E64EC34442971EEED2FDA4D1A90141FA9CE25EB7EB DUP3 DUP3 PUSH1 0x4 PUSH1 0x6 CALLER PUSH1 0x40 MLOAD PUSH2 0x10C3 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x27E1 JUMP JUMPDEST PUSH1 0x1 SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0x919 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x14C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x185B1C9958591E481C995B5BDD9959 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 SWAP1 SWAP2 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x14EB PUSH2 0x1429 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x919 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH2 0x1583 PUSH2 0x1535 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1518 CALLER SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 NUMBER SWAP1 DUP5 SWAP1 PUSH1 0x10 SWAP1 PUSH2 0x15DD SWAP1 PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x2837 JUMP JUMPDEST DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP4 AND PUSH2 0x100 SWAP5 SWAP1 SWAP5 EXP DUP5 DUP2 MUL SWAP2 MUL NOT SWAP1 SWAP2 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP7 SWAP1 SWAP7 SSTORE PUSH1 0x2 SWAP1 SWAP7 ADD SWAP1 SWAP6 MSTORE SWAP3 SWAP1 SWAP4 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x1 PUSH1 0x80 SHL DUP3 DIV DUP2 AND SWAP2 AND PUSH2 0x164C DUP3 DUP3 PUSH2 0x1EEC JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 SLOAD PUSH1 0x60 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV AND DUP2 DUP2 LT ISZERO PUSH2 0x168D JUMPI POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE SWAP1 POP PUSH2 0x8D7 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH1 0x0 SUB PUSH2 0x16D6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x1C5D595D5948085A5B9A5D09D9 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND GT PUSH2 0x1721 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x42C2C6C6CAE0E8C2C4D8CA40DAC2F PUSH1 0x8B SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH2 0x172F DUP7 DUP6 PUSH2 0x285D JUMP JUMPDEST PUSH2 0x1739 SWAP2 SWAP1 PUSH2 0x2884 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND GT ISZERO PUSH2 0x1759 JUMPI DUP1 SWAP2 POP JUMPDEST POP PUSH1 0x0 PUSH2 0x1766 DUP7 NUMBER PUSH2 0x2440 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND GT PUSH2 0x17BD JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 DUP10 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 DUP2 GT PUSH2 0x17B0 JUMPI PUSH1 0x1 SWAP2 POP POP PUSH2 0x17BD JUMP JUMPDEST POP PUSH1 0x0 NOT SWAP1 SWAP3 ADD SWAP2 PUSH2 0x176B JUMP JUMPDEST DUP1 PUSH2 0x17DD JUMPI POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE SWAP3 POP PUSH2 0x8D7 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH2 0x17EB DUP6 PUSH1 0x1 PUSH2 0x285D JUMP JUMPDEST PUSH2 0x17F5 SWAP2 SWAP1 PUSH2 0x2884 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1816 JUMPI PUSH2 0x1816 PUSH2 0x2129 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x183F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND GT PUSH2 0x18FB JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP13 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD DUP1 DUP5 MSTORE PUSH1 0x3 DUP16 ADD SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x18BC JUMPI DUP1 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x18A5 JUMPI PUSH2 0x18A5 PUSH2 0x2453 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP3 PUSH1 0x1 ADD SWAP3 POP PUSH2 0x18C3 JUMP JUMPDEST DUP2 PUSH1 0x1 ADD SWAP2 POP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP13 DUP2 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP5 SWAP1 SSTORE PUSH1 0x2 DUP16 ADD SWAP1 SWAP2 MSTORE DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE SWAP1 SWAP7 ADD SWAP6 PUSH2 0x1846 JUMP JUMPDEST DUP11 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP9 AND OR DUP12 SSTORE PUSH1 0x0 DUP2 SWAP1 SUB PUSH2 0x1935 JUMPI DUP3 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x8D7 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1950 JUMPI PUSH2 0x1950 PUSH2 0x2129 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1979 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x19C6 JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1999 JUMPI PUSH2 0x1999 PUSH2 0x2453 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x19B3 JUMPI PUSH2 0x19B3 PUSH2 0x2453 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x197F JUMP JUMPDEST POP SWAP8 POP PUSH2 0x8D7 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x1A77 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x646F6D61696E20657869737473 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1ABA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x10B1B7B73732B1BA37B9 PUSH1 0xB1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x1F4 GT PUSH2 0x1B0D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446F6D61696E496E646578657220617420636170616369747900000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP4 SSTORE PUSH1 0x8 DUP1 DUP4 DIV PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B ADD DUP1 SLOAD PUSH4 0xFFFFFFFF DUP1 DUP10 AND PUSH1 0x7 SWAP1 SWAP7 AND DUP8 MUL PUSH2 0x100 EXP DUP7 DUP2 MUL SWAP2 MUL NOT SWAP1 SWAP2 AND OR SWAP1 SSTORE PUSH1 0x6 DUP1 SLOAD SWAP3 DUP4 ADD SWAP1 SSTORE PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D3F SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND OR SWAP1 SSTORE SWAP2 SLOAD PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP2 SWAP1 SSTORE PUSH2 0x1BC4 PUSH2 0x1F16 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF DUP6 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x4FC27362D8AB3086EFD93B7880E99AC02E906D0BA9B71CA90239ADE53090F703 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1C81 DUP4 PUSH2 0x87A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x6 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1C98 JUMPI PUSH2 0x1C98 PUSH2 0x2453 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 PUSH2 0x1CF0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x636F6E6E6563746F722021657869737473 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x7C4 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x1D02 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x2440 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 LT ISZERO PUSH2 0x1E1B JUMPI PUSH1 0x0 PUSH1 0x4 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1D21 JUMPI PUSH2 0x1D21 PUSH2 0x2453 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x8 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH1 0x4 MUL SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND SWAP1 POP DUP1 PUSH1 0x4 DUP6 DUP2 SLOAD DUP2 LT PUSH2 0x1D5D JUMPI PUSH2 0x1D5D PUSH2 0x2453 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x8 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH1 0x4 MUL PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH4 0xFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x6 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1DA3 JUMPI PUSH2 0x1DA3 PUSH2 0x2453 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP7 SWAP1 DUP2 LT PUSH2 0x1DCF JUMPI PUSH2 0x1DCF PUSH2 0x2453 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1E03 DUP5 PUSH1 0x1 PUSH2 0x28A4 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMPDEST PUSH1 0x4 DUP1 SLOAD DUP1 PUSH2 0x1E2C JUMPI PUSH2 0x1E2C PUSH2 0x28B7 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH1 0x8 PUSH1 0x0 NOT SWAP1 SWAP3 ADD SWAP2 DUP3 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x4 PUSH1 0x7 DUP6 AND MUL PUSH2 0x100 EXP MUL NOT AND SWAP1 SSTORE SWAP1 SSTORE PUSH1 0x6 DUP1 SLOAD DUP1 PUSH2 0x1E6B JUMPI PUSH2 0x1E6B PUSH2 0x28B7 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH1 0x0 NOT SWAP1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH4 0xFFFFFFFF DUP8 AND DUP3 MSTORE PUSH1 0x8 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x1EAB PUSH2 0x1F16 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF DUP7 AND DUP2 MSTORE PUSH32 0x7E560B48A4BBA1688EB45AFD6712A11FA42B9ABBB48A8E14E2F15E467AB420E4 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1EFA DUP5 PUSH1 0x1 PUSH2 0x285D JUMP JUMPDEST PUSH2 0x1F04 SWAP2 SWAP1 PUSH2 0x2884 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1F90 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x1F53 JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP SWAP1 POP PUSH1 0x0 PUSH1 0x6 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x1FEF JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1FD1 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2007 SWAP2 SWAP1 PUSH2 0x28CD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x5 SSTORE PUSH2 0x202F SWAP2 DUP4 SWAP2 ADD PUSH2 0x2917 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 PUSH1 0x7 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2060 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x207B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2092 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8D7 DUP3 PUSH2 0x2067 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x20AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x20C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x20E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x20FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2111 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x211D DUP6 DUP3 DUP7 ADD PUSH2 0x209B JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2168 JUMPI PUSH2 0x2168 PUSH2 0x2129 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP8 CALLDATALOAD GT ISZERO PUSH2 0x219F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x21AC DUP9 DUP9 CALLDATALOAD DUP10 ADD PUSH2 0x209B JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x21C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x21CF DUP10 DUP3 DUP11 ADD PUSH2 0x209B JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x21E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 ADD PUSH1 0x1F DUP2 ADD DUP10 SGT PUSH2 0x21F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x220A JUMPI PUSH2 0x220A PUSH2 0x2129 JUMP JUMPDEST PUSH2 0x2219 PUSH1 0x20 DUP3 PUSH1 0x5 SHL ADD PUSH2 0x213F JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP12 DUP4 GT ISZERO PUSH2 0x223B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP5 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x22D0 JUMPI DUP6 DUP2 CALLDATALOAD GT ISZERO PUSH2 0x2256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD DUP6 ADD DUP14 PUSH1 0x3F DUP3 ADD SLT PUSH2 0x2269 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP8 DUP2 GT ISZERO PUSH2 0x227E JUMPI PUSH2 0x227E PUSH2 0x2129 JUMP JUMPDEST PUSH2 0x2291 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x213F JUMP JUMPDEST DUP2 DUP2 MSTORE DUP16 PUSH1 0x40 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x22A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x40 DUP5 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP4 DUP4 ADD ADD MSTORE DUP1 DUP7 MSTORE POP POP POP PUSH1 0x20 DUP4 ADD SWAP3 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x2240 JUMP JUMPDEST POP DUP1 SWAP6 POP POP POP POP POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x22F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22FF DUP4 PUSH2 0x2067 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x207B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2336 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8D7 DUP3 PUSH2 0x230D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2352 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x235B DUP4 PUSH2 0x2067 JUMP JUMPDEST SWAP2 POP PUSH2 0x2369 PUSH1 0x20 DUP5 ADD PUSH2 0x230D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x23A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x23AC DUP9 DUP4 DUP10 ADD PUSH2 0x209B JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x23C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x23D2 DUP8 DUP3 DUP9 ADD PUSH2 0x209B JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP5 PUSH1 0x40 DUP5 ADD DUP4 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x241F JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x240C DUP5 PUSH2 0x230D JUMP JUMPDEST AND DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x23F3 JUMP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x1F10 JUMPI PUSH2 0x1F10 PUSH2 0x242A JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x248F JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x2473 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x24C2 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x2469 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x24D4 DUP2 DUP6 PUSH2 0x2469 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x24EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x8D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2512 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2553 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2537 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x8D7 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2523 JUMP JUMPDEST DUP4 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x24D4 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x2523 JUMP JUMPDEST DUP1 SLOAD DUP1 DUP4 MSTORE PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP5 ADD SWAP4 SWAP1 SWAP2 SWAP1 DUP3 JUMPDEST DUP3 PUSH1 0x7 DUP3 ADD LT ISZERO PUSH2 0x261F JUMPI DUP2 SLOAD PUSH4 0xFFFFFFFF DUP1 DUP3 AND DUP9 MSTORE PUSH1 0x20 DUP3 DUP2 SHR DUP3 AND SWAP1 DUP10 ADD MSTORE PUSH1 0x40 DUP3 DUP2 SHR DUP3 AND SWAP1 DUP10 ADD MSTORE PUSH1 0x60 DUP3 DUP2 SHR DUP3 AND SWAP1 DUP10 ADD MSTORE PUSH1 0x80 DUP3 DUP2 SHR DUP3 AND SWAP1 DUP10 ADD MSTORE PUSH1 0xA0 DUP3 DUP2 SHR DUP3 AND SWAP1 DUP10 ADD MSTORE PUSH1 0xC0 DUP3 DUP2 SHR SWAP1 SWAP2 AND SWAP1 DUP9 ADD MSTORE PUSH1 0xE0 SWAP1 DUP2 SHR SWAP1 DUP8 ADD MSTORE PUSH2 0x100 SWAP1 SWAP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x8 ADD PUSH2 0x25A7 JUMP JUMPDEST SWAP1 SLOAD SWAP1 DUP3 DUP2 LT ISZERO PUSH2 0x263D JUMPI PUSH4 0xFFFFFFFF DUP3 AND DUP7 MSTORE PUSH1 0x20 SWAP1 SWAP6 ADD SWAP5 PUSH1 0x1 ADD JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x265D JUMPI PUSH1 0x20 DUP3 SWAP1 SHR PUSH4 0xFFFFFFFF AND DUP7 MSTORE PUSH1 0x20 SWAP6 SWAP1 SWAP6 ADD SWAP5 PUSH1 0x1 ADD JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x267C JUMPI PUSH4 0xFFFFFFFF PUSH1 0x40 DUP4 SWAP1 SHR AND DUP7 MSTORE PUSH1 0x20 SWAP1 SWAP6 ADD SWAP5 PUSH1 0x1 ADD JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x269B JUMPI PUSH4 0xFFFFFFFF PUSH1 0x60 DUP4 SWAP1 SHR AND DUP7 MSTORE PUSH1 0x20 SWAP1 SWAP6 ADD SWAP5 PUSH1 0x1 ADD JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x26BA JUMPI PUSH4 0xFFFFFFFF PUSH1 0x80 DUP4 SWAP1 SHR AND DUP7 MSTORE PUSH1 0x20 SWAP1 SWAP6 ADD SWAP5 PUSH1 0x1 ADD JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x26D9 JUMPI PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP4 SWAP1 SHR AND DUP7 MSTORE PUSH1 0x20 SWAP1 SWAP6 ADD SWAP5 PUSH1 0x1 ADD JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x26F8 JUMPI PUSH4 0xFFFFFFFF PUSH1 0xC0 DUP4 SWAP1 SHR AND DUP7 MSTORE PUSH1 0x20 SWAP1 SWAP6 ADD SWAP5 PUSH1 0x1 ADD JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x270E JUMPI PUSH1 0xE0 DUP3 SWAP1 SHR DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP6 POP JUMPDEST POP SWAP4 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP4 PUSH1 0x0 MSTORE DUP1 PUSH1 0x0 KECCAK256 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2553 JUMPI DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x2731 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP6 AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x2786 SWAP1 DUP4 ADD DUP6 PUSH2 0x2590 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x2798 DUP2 DUP6 PUSH2 0x2718 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP5 PUSH1 0x40 DUP5 ADD DUP4 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x241F JUMPI PUSH4 0xFFFFFFFF PUSH2 0x27CE DUP5 PUSH2 0x2067 JUMP JUMPDEST AND DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x27B8 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP7 AND DUP2 MSTORE PUSH1 0x0 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x280F PUSH1 0xA0 DUP5 ADD DUP8 PUSH2 0x2590 JUMP JUMPDEST DUP4 DUP2 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x2821 DUP2 DUP8 PUSH2 0x2718 JUMP JUMPDEST SWAP3 POP POP DUP1 DUP5 AND PUSH1 0x80 DUP5 ADD MSTORE POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x2853 JUMPI PUSH2 0x2853 PUSH2 0x242A JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x287D JUMPI PUSH2 0x287D PUSH2 0x242A JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x287D JUMPI PUSH2 0x287D PUSH2 0x242A JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x1F10 JUMPI PUSH2 0x1F10 PUSH2 0x242A JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x290B JUMPI DUP4 MLOAD PUSH4 0xFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x28E9 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x290B JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2933 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 0xC5 DUP9 POP SWAP3 0x2A DIFFICULTY 0xDB 0xB0 DUP10 PUSH30 0xAA160E573A2789F40ADFC549F9FA8345FF5C1BA6E864736F6C6343000811 STOP CALLER ","sourceMap":"715:9912:113:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2582:33;;;;;;;;;;;;;;;;;;;160:25:181;;;148:2;133:18;2582:33:113;;;;;;;;6025:139;;;;;;;;;;-1:-1:-1;6025:139:113;;;;;:::i;:::-;;:::i;:::-;;2345:27:163;;;;;;;;;;-1:-1:-1;2345:27:163;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;730:32:181;;;712:51;;700:2;685:18;2345:27:163;566:203:181;4105:214:113;;;;;;;;;;-1:-1:-1;4105:214:113;;;;;:::i;:::-;;:::i;3172:122:163:-;;;;;;;;;;-1:-1:-1;3172:122:163;;;;;:::i;:::-;3255:29;;3236:4;3255:29;;;:20;:29;;;;;;:34;;;3172:122;;;;1296:14:181;;1289:22;1271:41;;1259:2;1244:18;3172:122:163;1131:187:181;5213:233:163;;;;;;;;;;-1:-1:-1;5213:233:163;;;;;:::i;:::-;;:::i;3505:187::-;;;;;;;;;;-1:-1:-1;3505:187:163;;;;;:::i;:::-;;:::i;1949:112:168:-;;;;;;;;;;-1:-1:-1;2029:27:168;;1949:112;;1810:70:114;;;;;;;;;;;;;:::i;7122:1546:113:-;;;;;;:::i;:::-;;:::i;2641:29:163:-;;;;;;;;;;;;;;;;1615:84:51;;;;;;;;;;-1:-1:-1;1685:7:51;;;;1615:84;;1686:23:163;;;;;;;;;;-1:-1:-1;1686:23:163;;;;;:::i;:::-;;:::i;:::-;;;5080:10:181;5068:23;;;5050:42;;5038:2;5023:18;1686:23:163;4906:192:181;2151:79:168;;;;;;;;;;-1:-1:-1;1530:6:168;2151:79;;6371:97:113;;;;;;;;;;;;;:::i;1972:26:163:-;;;;;;;;;;;;;;;;3953:130;;;;;;;;;;-1:-1:-1;3953:130:163;;;;;:::i;:::-;;:::i;2385:41:113:-;;;;;;;;;;-1:-1:-1;2385:41:113;;;;-1:-1:-1;;;;;2385:41:113;;;;-1:-1:-1;;;2385:41:113;;;;;;;;;-1:-1:-1;;;;;5348:15:181;;;5330:34;;5400:15;;;;5395:2;5380:18;;5373:43;5250:18;2385:41:113;5103:319:181;2321:71:114;;;;;;;;;;;;;:::i;1641:79:168:-;;;;;;;;;;-1:-1:-1;1687:7:168;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;9214:220:113;;;;;;;;;;-1:-1:-1;9214:220:113;;;;;:::i;:::-;;:::i;3820:115::-;;;;;;;;;;;;;:::i;9903:722::-;;;;;;;;;;;;;:::i;:::-;;;;5858:25:181;;;5914:2;5899:18;;5892:34;;;;5831:18;9903:722:113;5684:248:181;2817:41:113;;;;;;;;;;;;;;;911:36:114;;;;;;;;;;-1:-1:-1;911:36:114;;;;;;;-1:-1:-1;;;;;911:36:114;;;1781:41:113;;;;;;;;;;;;1819:3;1781:41;;;;;-1:-1:-1;;;;;6568:47:181;;;6550:66;;6538:2;6523:18;1781:41:113;6404:218:181;1980:26:113;;;;;;;;;;;;;;;;3321:420:168;;;;;;;;;;-1:-1:-1;3321:420:168;;;;;:::i;:::-;;:::i;4804:185:113:-;;;;;;;;;;-1:-1:-1;4804:185:113;;;;;:::i;:::-;;:::i;4404:539:168:-;;;;;;;;;;;;;:::i;1350:41:163:-;;;;;;;;;;;;1388:3;1350:41;;1792:85:168;;;;;;;;;;-1:-1:-1;1863:9:168;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;;;;;;;;;;-1:-1:-1;3097:4:168;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;1457:263:114;;;;;;;;;;-1:-1:-1;1457:263:114;;;;;:::i;:::-;;:::i;4422:522:163:-;;;;;;;;;;-1:-1:-1;4422:522:163;;;;;:::i;:::-;;:::i;5381:194:113:-;;;;;;;;;;-1:-1:-1;5381:194:113;;;;;:::i;:::-;;:::i;6025:139::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1486:16:51::1;:14;:16::i;:::-;6095:33:113::2;:19;6122:5:::0;6095:26:::2;:33::i;:::-;6139:20;::::0;160:25:181;;;6139:20:113::2;::::0;148:2:181;133:18;6139:20:113::2;;;;;;;;6025:139:::0;:::o;2345:27:163:-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2345:27:163;;-1:-1:-1;2345:27:163;:::o;4105:214:113:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4198:11:113::1;;4182:12;:27:::0;4174:52:::1;;;::::0;-1:-1:-1;;;4174:52:113;;8393:2:181;4174:52:113::1;::::0;::::1;8375:21:181::0;8432:2;8412:18;;;8405:30;-1:-1:-1;;;8451:18:181;;;8444:42;8503:18;;4174:52:113::1;;;;;;;;;4270:11;::::0;4237:45:::1;::::0;;5858:25:181;;;5914:2;5899:18;;5892:34;;;;4237:45:113::1;::::0;5831:18:181;4237:45:113::1;;;;;;;4288:11;:26:::0;4105:214::o;5213:233:163:-;5411:14;;5394:11;;5383:23;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5373:34;;;;;;:52;5365:76;;;;-1:-1:-1;;;5365:76:163;;9628:2:181;5365:76:163;;;9610:21:181;9667:2;9647:18;;;9640:30;-1:-1:-1;;;9686:18:181;;;9679:41;9737:18;;5365:76:163;9426:335:181;5365:76:163;5213:233;;:::o;3505:187::-;3597:29;;;3566:7;3597:29;;;:20;:29;;;;;;3640:10;;;3632:33;;;;-1:-1:-1;;;3632:33:163;;9968:2:181;3632:33:163;;;9950:21:181;10007:2;9987:18;;;9980:30;-1:-1:-1;;;10026:18:181;;;10019:40;10076:18;;3632:33:163;9766:334:181;3632:33:163;3678:9;3686:1;3678:5;:9;:::i;:::-;3671:16;3505:187;-1:-1:-1;;;3505:187:163:o;1810:70:114:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1486:16:51::1;:14;:16::i;:::-;1865:10:114::2;:8;:10::i;:::-;1810:70::o:0;7122:1546:113:-;1239:19:51;:17;:19::i;:::-;7281:31:113::1;7300:11;;7281:18;:31::i;:::-;7341:11:::0;7450:27;;::::1;:65:::0;::::1;;;;7504:11;7481:12;:19;:34;7450:65;7442:93;;;::::0;-1:-1:-1;;;7442:93:113;;10572:2:181;7442:93:113::1;::::0;::::1;10554:21:181::0;10611:2;10591:18;;;10584:30;-1:-1:-1;;;10630:18:181;;;10623:45;10685:18;;7442:93:113::1;10370:339:181::0;7442:93:113::1;7614:22;7638:14:::0;7656:9:::1;:7;:9::i;:::-;7613:52;;;;7780:18;;7762:14;:36:::0;7754:63:::1;;;::::0;-1:-1:-1;;;7754:63:113;;10916:2:181;7754:63:113::1;::::0;::::1;10898:21:181::0;10955:2;10935:18;;;10928:30;-1:-1:-1;;;10974:18:181;;;10967:44;11028:18;;7754:63:113::1;10714:338:181::0;7754:63:113::1;7823:18;:35:::0;;;7879:9:::1;7865:11;7894:707;7913:11;7909:1;:15;;;7894:707;;;8081:11;;8093:1;8081:14;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8067:41:113::1;;8116:5;;8122:1;8116:8;;;;;;;;;:::i;:::-;;;;;;;8143:14;8126:32;;;;;;8123:19:181::0;;8175:4;8166:14;;8036:150;8126:32:113::1;;;;;;;;;;;;;8160:12;8173:1;8160:15;;;;;;;;;;:::i;:::-;;;;;;;8067:109;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;8055:500;;8503:43;8519:7;8527:1;8519:10;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;8531:11;;8543:1;8531:14;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;8503:43;::::0;;12387:10:181;12375:23;;;12357:42;;-1:-1:-1;;;;;12435:32:181;;;12430:2;12415:18;;12408:60;12330:18;8503:43:113::1;;;;;;;8055:500;;;8464:5;;8470:1;8464:8;;;;;;;;;:::i;:::-;;;;;;;8457:15;;;;;:::i;:::-;;;8055:500;8583:3;;7894:707;;;-1:-1:-1::0;8651:11:113::1;::::0;8612:51:::1;::::0;;12681:25:181;;;12737:2;12722:18;;12715:34;;;12765:18;;;12758:34;;;;8612:51:113;::::1;::::0;;;;12669:2:181;8612:51:113;;::::1;7275:1393;;;;7122:1546:::0;;;;;:::o;1686:23:163:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6371:97:113:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;3953:130:163;4021:7;4043:10;4054:23;4069:7;4054:14;:23::i;:::-;4043:35;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;4043:35:163;;3953:130;-1:-1:-1;;3953:130:163:o;2321:71:114:-;1251:14;;:36;;-1:-1:-1;;;1251:36:114;;1276:10;1251:36;;;712:51:181;1251:14:114;;;;-1:-1:-1;;;;;1251:14:114;;:24;;685:18:181;;1251:36:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1243:57;;;;-1:-1:-1;;;1243:57:114;;13287:2:181;1243:57:114;;;13269:21:181;13326:1;13306:18;;;13299:29;-1:-1:-1;;;13344:18:181;;;13337:38;13392:18;;1243:57:114;13085:331:181;1243:57:114;1239:19:51::1;:17;:19::i;:::-;2379:8:114::2;:6;:8::i;9214:220:113:-:0;1239:19:51;:17;:19::i;:::-;9304:7:113;2992:10:::1;2958:30;9304:7:::0;2958:21:::1;:30::i;:::-;-1:-1:-1::0;;;;;2958:44:113::1;;2950:67;;;::::0;-1:-1:-1;;;2950:67:113;;13623:2:181;2950:67:113::1;::::0;::::1;13605:21:181::0;13662:2;13642:18;;;13635:30;-1:-1:-1;;;13681:18:181;;;13674:40;13731:18;;2950:67:113::1;13421:334:181::0;2950:67:113::1;9319:17:::2;9339:37;:19;9367:8:::0;9339:27:::2;:37::i;:::-;9387:42;::::0;;13990:10:181;13978:23;;13960:42;;14033:2;14018:18;;14011:34;;;-1:-1:-1;;;;;14081:47:181;;14061:18;;;14054:75;9387:42:113;;14081:47:181;;-1:-1:-1;9387:42:113::2;::::0;;;;;13948:2:181;9387:42:113;;::::2;9313:121;1268:1:51::1;9214:220:113::0;;:::o;3820:115::-;3880:7;3902:28;:19;:26;:28::i;:::-;3895:35;;3820:115;:::o;9903:722::-;9952:7;9961;1239:19:51;:17;:19::i;:::-;10106:11:113::1;::::0;10029:38:::1;::::0;10070:61:::1;::::0;:19:::1;::::0;1819:3:::1;10070:35;:61::i;:::-;10029:102;;10210:21;:28;10242:1;10210:33:::0;10206:82:::1;;10260:6;-1:-1:-1::0;;;;;10260:19:113::1;;:21;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10253:28;;;;;9903:722:::0;;:::o;10206:82::-:1;10430:22;10454:14:::0;10472:6:::1;-1:-1:-1::0;;;;;10472:13:113::1;;10486:21;10472:36;;;;;;;;;;;;;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10429:79;;;;10520:62;10536:14;10552:6;10560:21;10520:62;;;;;;;;:::i;:::-;;;;;;;;10597:14:::0;;-1:-1:-1;10613:6:113;-1:-1:-1;;9903:722:113;;:::o;3321:420:168:-;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;:::-;3321:420:::0;:::o;4804:185:113:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4887:30:113::1;4897:7;4906:10;4887:9;:30::i;:::-;4928:56;4943:7;4952:10;4964:7;4973:10;4928:56;;;;;;;;;:::i;:::-;;;;;;;;4804:185:::0;;:::o;4404:539:168:-;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;1457:263:114:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1569:14:114::1;::::0;-1:-1:-1;;;;;1569:14:114::1;::::0;;::::1;::::0;::::1;1542:42:::0;;::::1;::::0;1534:78:::1;;;::::0;-1:-1:-1;;;1534:78:114;;19891:2:181;1534:78:114::1;::::0;::::1;19873:21:181::0;19930:2;19910:18;;;19903:30;19969:25;19949:18;;;19942:53;20012:18;;1534:78:114::1;19689:347:181::0;1534:78:114::1;1618:14;:48:::0;;-1:-1:-1;;;;;;1618:48:114::1;;-1:-1:-1::0;;;;;1618:48:114;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;1677:38:::1;::::0;712:51:181;;;1677:38:114::1;::::0;700:2:181;685:18;1677:38:114::1;566:203:181::0;4422:522:163;4581:37;;;4573:66;;;;-1:-1:-1;;;4573:66:163;;20243:2:181;4573:66:163;;;20225:21:181;20282:2;20262:18;;;20255:30;-1:-1:-1;;;20301:18:181;;;20294:46;20357:18;;4573:66:163;20041:340:181;4573:66:163;4759:11;;4745:8;;4734:20;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4724:31;;;;;;:46;4716:67;;;;-1:-1:-1;;;4716:67:163;;21217:2:181;4716:67:163;;;21199:21:181;21256:1;21236:18;;;21229:29;-1:-1:-1;;;21274:18:181;;;21267:38;21322:18;;4716:67:163;21015:331:181;4716:67:163;4909:14;;4892:11;;4881:23;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4871:34;;;;;;:52;4863:76;;;;-1:-1:-1;;;4863:76:163;;9628:2:181;4863:76:163;;;9610:21:181;9667:2;9647:18;;;9640:30;-1:-1:-1;;;9686:18:181;;;9679:41;9737:18;;4863:76:163;9426:335:181;4863:76:163;4422:522;;;;:::o;5381:194:113:-;1251:14:114;;:36;;-1:-1:-1;;;1251:36:114;;1276:10;1251:36;;;712:51:181;1251:14:114;;;;-1:-1:-1;;;;;1251:14:114;;:24;;685:18:181;;1251:36:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1243:57;;;;-1:-1:-1;;;1243:57:114;;13287:2:181;1243:57:114;;;13269:21:181;13326:1;13306:18;;;13299:29;-1:-1:-1;;;13344:18:181;;;13337:38;13392:18;;1243:57:114;13085:331:181;1243:57:114;5447:18:113::1;5468:21;5481:7;5468:12;:21::i;:::-;5447:42;;5500:70;5517:7;5526:10;5538:7;5547:10;5559;5500:70;;;;;;;;;;:::i;1202:99:166:-:0;1272:1;1279:17;;1202:99::o;1945:106:51:-;1685:7;;;;2003:41;;;;-1:-1:-1;;;2003:41:51;;22317:2:181;2003:41:51;;;22299:21:181;22356:2;22336:18;;;22329:30;-1:-1:-1;;;22375:18:181;;;22368:50;22435:18;;2003:41:51;22115:344:181;6149:151:166;6224:19;;;;:13;;;:19;;;;;;;;6223:20;6215:48;;;;-1:-1:-1;;;6215:48:166;;22666:2:181;6215:48:166;;;22648:21:181;22705:2;22685:18;;;22678:30;-1:-1:-1;;;22724:18:181;;;22717:45;22779:18;;6215:48:166;22464:339:181;6215:48:166;6269:19;;;;:13;;;;:19;;;;;:26;;-1:-1:-1;;6269:26:166;6291:4;6269:26;;;6149:151::o;2433:117:51:-;1486:16;:14;:16::i;:::-;2491:7:::1;:15:::0;;-1:-1:-1;;2491:15:51::1;::::0;;2521:22:::1;719:10:58::0;2530:12:51::1;2521:22;::::0;-1:-1:-1;;;;;730:32:181;;;712:51;;700:2;685:18;2521:22:51::1;;;;;;;2433:117::o:0;1767:106::-;1685:7;;;;1836:9;1828:38;;;;-1:-1:-1;;;1828:38:51;;23010:2:181;1828:38:51;;;22992:21:181;23049:2;23029:18;;;23022:30;-1:-1:-1;;;23068:18:181;;;23061:46;23124:18;;1828:38:51;22808:340:181;2186:115:51;1239:19;:17;:19::i;:::-;2245:7:::1;:14:::0;;-1:-1:-1;;2245:14:51::1;2255:4;2245:14;::::0;;2274:20:::1;2281:12;719:10:58::0;;640:96;1536:380:166;1782:12;;1606;;1723;;1782;;1784:10;;1782:12;;-1:-1:-1;;;1782:12:166;;-1:-1:-1;;;;;1782:12:166;;:::i;:::-;;;-1:-1:-1;;;;;1782:12:166;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1845:16:166;;;-1:-1:-1;1845:10:166;;:16;;;;;;;;:23;;;;1874:17;;;;:23;;;;;;;:37;;;;1782:12;1536:380;-1:-1:-1;1536:380:166:o;6709:222::-;6799:10;;6769:7;;-1:-1:-1;;;;;;;;6799:10:166;;;;;6831:11;6906:20;6799:10;6831:11;6906:7;:20::i;:::-;6899:27;6709:222;-1:-1:-1;;;;6709:222:166:o;2455:3604::-;2603:11;;2563:16;;-1:-1:-1;;;;;2603:11:166;;;;-1:-1:-1;;;2635:10:166;;;2702:12;;;2698:56;;;-1:-1:-1;;2731:16:166;;;2745:1;2731:16;;;;;;;;;-1:-1:-1;2724:23:166;;2698:56;2796:5;-1:-1:-1;;;;;2796:10:166;2805:1;2796:10;2788:36;;;;-1:-1:-1;;;2788:36:166;;23586:2:181;2788:36:166;;;23568:21:181;23625:2;23605:18;;;23598:30;-1:-1:-1;;;23644:18:181;;;23637:43;23697:18;;2788:36:166;23384:337:181;2788:36:166;2844:1;2838:3;-1:-1:-1;;;;;2838:7:166;;2830:35;;;;-1:-1:-1;;;2830:35:166;;23928:2:181;2830:35:166;;;23910:21:181;23967:2;23947:18;;;23940:30;-1:-1:-1;;;23986:18:181;;;23979:45;24041:18;;2830:35:166;23726:339:181;2830:35:166;3089:22;3128:1;3114:11;3122:3;3114:5;:11;:::i;:::-;:15;;;;:::i;:::-;3089:40;;3148:14;-1:-1:-1;;;;;3141:21:166;:4;-1:-1:-1;;;;;3141:21:166;;3137:67;;;3181:14;3174:21;;3137:67;-1:-1:-1;3389:36:166;3428:20;3443:5;3428:12;:20;:::i;:::-;3389:59;;3722:21;3843:311;3860:4;-1:-1:-1;;;;;3852:12:166;:5;-1:-1:-1;;;;;3852:12:166;;3843:311;;-1:-1:-1;;;;;3897:23:166;;3875:19;3897:23;;;:17;;;:23;;;;;;4004:42;;;3998:108;;4078:4;4059:23;;4092:5;;;3998:108;-1:-1:-1;;;4133:6:166;;;;3843:311;;;4240:16;4235:61;;-1:-1:-1;;4273:16:166;;;4287:1;4273:16;;;;;;;;;-1:-1:-1;4266:23:166;;-1:-1:-1;;4266:23:166;4235:61;4302:22;4352:5;4341:8;:4;4348:1;4341:8;:::i;:::-;:16;;;;:::i;:::-;-1:-1:-1;;;;;4327:31:166;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4327:31:166;;4302:56;;4364:13;4428:20;4604:809;4621:4;-1:-1:-1;;;;;4613:12:166;:5;-1:-1:-1;;;;;4613:12:166;;4604:809;;-1:-1:-1;;;;;4651:17:166;;4636:12;4651:17;;;:10;;;:17;;;;;;;;;4766:19;;;:13;;;:19;;;;;;;;;4761:279;;4812:4;4797:5;4803;4797:12;;;;;;;;:::i;:::-;;;;;;:19;;;;;4848:7;;;;;4761:279;;;5007:14;;;;;4761:279;-1:-1:-1;;;;;;5306:17:166;;;;;;:10;;;;:17;;;;;;;;5299:24;;;5338:17;;;:24;;;;;5331:31;;;;5391:7;;;;4604:809;;;5518:19;;-1:-1:-1;;5518:19:166;-1:-1:-1;;;;;5518:19:166;;;;;-1:-1:-1;5548:17:166;;;5544:511;;5582:5;5575:12;;;;;;;;;;;5544:511;5804:29;5850:5;5836:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5836:20:166;;5804:52;;5908:9;5903:119;5923:5;5919:1;:9;5903:119;;;5960:5;5966:1;5960:8;;;;;;;;:::i;:::-;;;;;;;5942:12;5955:1;5942:15;;;;;;;;:::i;:::-;;;;;;;;;;:26;6000:3;;5903:119;;;-1:-1:-1;6036:12:166;-1:-1:-1;6029:19:166;;-1:-1:-1;;;;;;;6029:19:166;5170:183:168;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;5727:737:163:-;3255:29;;;3236:4;3255:29;;;:20;:29;;;;;;:34;5849:53;;;;-1:-1:-1;;;5849:53:163;;24679:2:181;5849:53:163;;;24661:21:181;24718:2;24698:18;;;24691:30;-1:-1:-1;;;24737:18:181;;;24730:43;24790:18;;5849:53:163;24477:337:181;5849:53:163;-1:-1:-1;;;;;5962:24:163;;5954:47;;;;-1:-1:-1;;;5954:47:163;;13623:2:181;5954:47:163;;;13605:21:181;13662:2;13642:18;;;13635:30;-1:-1:-1;;;13681:18:181;;;13674:40;13731:18;;5954:47:163;13421:334:181;5954:47:163;6051:7;:14;1388:3;-1:-1:-1;6043:66:163;;;;-1:-1:-1;;;6043:66:163;;25021:2:181;6043:66:163;;;25003:21:181;25060:2;25040:18;;;25033:30;25099:27;25079:18;;;25072:55;25144:18;;6043:66:163;24819:349:181;6043:66:163;6171:7;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6198:10;:27;;;;;;;;;;;;;-1:-1:-1;;;;;6198:27:163;;-1:-1:-1;;;;;;6198:27:163;;;;;;6282:14;;-1:-1:-1;6302:29:163;;;6171:21;6302:29;;;;;;;:45;;;6401:14;:12;:14::i;:::-;6427:32;;;12387:10:181;12375:23;;12357:42;;-1:-1:-1;;;;;12435:32:181;;12430:2;12415:18;;12408:60;6427:32:163;;12330:18:181;6427:32:163;;;;;;;5791:673;5727:737;;:::o;4981:185:168:-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;6665:1332:163:-;6721:7;6736:14;6753:23;6768:7;6753:14;:23::i;:::-;6736:40;;6827:18;6848:10;6859:6;6848:18;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;6848:18:163;;-1:-1:-1;6848:18:163;6911:54;;;;-1:-1:-1;;;6911:54:163;;25375:2:181;6911:54:163;;;25357:21:181;25414:2;25394:18;;;25387:30;-1:-1:-1;;;25433:18:181;;;25426:47;25490:18;;6911:54:163;25173:341:181;6911:54:163;7157:7;:14;7136:18;;7157;;7174:1;;7157:18;:::i;:::-;7136:39;;7194:10;7185:6;:19;7181:533;;;7403:19;7425:7;7433:10;7425:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;7403:41;;7470:12;7452:7;7460:6;7452:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;7511:10;7522;7511:22;;;;;;;;:::i;:::-;;;;;;;;;;;7490:10;:18;;-1:-1:-1;;;;;7511:22:163;;;;7501:6;;7490:18;;;;;;:::i;:::-;;;;;;;;;;:43;;-1:-1:-1;;;;;;7490:43:163;-1:-1:-1;;;;;7490:43:163;;;;;;;;;;7645:10;:6;-1:-1:-1;7645:10:163;:::i;:::-;7608:34;;;;;;;;:20;:34;;;;;:47;7181:533;7760:7;:13;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;7760:13:163;;;;;;;;;;;;;;;;;;;;;;;;7779:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;7779:16:163;;;;;-1:-1:-1;;;;;;7779:16:163;;;;;;;;;7837:29;;;;;:20;:29;;;;;7830:36;7920:14;:12;:14::i;:::-;7946:22;;5080:10:181;5068:23;;5050:42;;7946:22:163;;5038:2:181;5023:18;7946:22:163;;;;;;;-1:-1:-1;7982:10:163;6665:1332;-1:-1:-1;;;6665:1332:163:o;7117:121:166:-;7186:7;7227:5;7216:8;:4;7223:1;7216:8;:::i;:::-;:16;;;;:::i;:::-;-1:-1:-1;;;;;7208:25:166;7201:32;;7117:121;;;;;:::o;8199:233:163:-;8238:24;8265:7;8238:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8278:28;8309:10;8278:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8278:41:163;;;;;;;;;;;;;;;;;;;;;;;8360:8;8349:20;;;;;;;;:::i;:::-;;;;-1:-1:-1;;8349:20:163;;;;;;;;;;8339:31;;8349:20;8339:31;;;;8325:11;:45;8403:23;;8414:11;;8403:23;;:::i;:::-;;;;-1:-1:-1;;8403:23:163;;;;;;;;;8393:34;;8403:23;8393:34;;;;8376:14;:51;-1:-1:-1;;8199:233:163:o;196:180:181:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:181;;196:180;-1:-1:-1;196:180:181:o;774:163::-;841:20;;901:10;890:22;;880:33;;870:61;;927:1;924;917:12;870:61;774:163;;;:::o;942:184::-;1000:6;1053:2;1041:9;1032:7;1028:23;1024:32;1021:52;;;1069:1;1066;1059:12;1021:52;1092:28;1110:9;1092:28;:::i;1323:367::-;1386:8;1396:6;1450:3;1443:4;1435:6;1431:17;1427:27;1417:55;;1468:1;1465;1458:12;1417:55;-1:-1:-1;1491:20:181;;1534:18;1523:30;;1520:50;;;1566:1;1563;1556:12;1520:50;1603:4;1595:6;1591:17;1579:29;;1663:3;1656:4;1646:6;1643:1;1639:14;1631:6;1627:27;1623:38;1620:47;1617:67;;;1680:1;1677;1670:12;1617:67;1323:367;;;;;:::o;1695:437::-;1781:6;1789;1842:2;1830:9;1821:7;1817:23;1813:32;1810:52;;;1858:1;1855;1848:12;1810:52;1898:9;1885:23;1931:18;1923:6;1920:30;1917:50;;;1963:1;1960;1953:12;1917:50;2002:70;2064:7;2055:6;2044:9;2040:22;2002:70;:::i;:::-;2091:8;;1976:96;;-1:-1:-1;1695:437:181;-1:-1:-1;;;;1695:437:181:o;2319:127::-;2380:10;2375:3;2371:20;2368:1;2361:31;2411:4;2408:1;2401:15;2435:4;2432:1;2425:15;2451:275;2522:2;2516:9;2587:2;2568:13;;-1:-1:-1;;2564:27:181;2552:40;;2622:18;2607:34;;2643:22;;;2604:62;2601:88;;;2669:18;;:::i;:::-;2705:2;2698:22;2451:275;;-1:-1:-1;2451:275:181:o;2731:2071::-;2896:6;2904;2912;2920;2928;2981:2;2969:9;2960:7;2956:23;2952:32;2949:52;;;2997:1;2994;2987:12;2949:52;3020:18;3078:2;3066:9;3053:23;3050:31;3047:51;;;3094:1;3091;3084:12;3047:51;3133:87;3212:7;3199:9;3186:23;3175:9;3171:39;3133:87;:::i;:::-;3239:8;;-1:-1:-1;3266:8:181;-1:-1:-1;3325:2:181;3310:18;;3297:32;3341:14;;;3338:34;;;3368:1;3365;3358:12;3338:34;3407:70;3469:7;3460:6;3449:9;3445:22;3407:70;:::i;:::-;3496:8;;-1:-1:-1;3381:96:181;-1:-1:-1;;3584:2:181;3569:18;;3556:32;3600:16;;;3597:36;;;3629:1;3626;3619:12;3597:36;3652:24;;3707:4;3699:13;;3695:27;-1:-1:-1;3685:55:181;;3736:1;3733;3726:12;3685:55;3772:2;3759:16;3794:2;3790;3787:10;3784:36;;;3800:18;;:::i;:::-;3840:36;3872:2;3867;3864:1;3860:10;3856:19;3840:36;:::i;:::-;3898:3;3922:2;3917:3;3910:15;3950:2;3945:3;3941:12;3934:19;;4001:2;3995;3992:1;3988:10;3984:2;3980:19;3976:28;3962:42;;4027:7;4019:6;4016:19;4013:39;;;4048:1;4045;4038:12;4013:39;4080:2;4076;4072:11;4092:680;4108:6;4103:3;4100:15;4092:680;;;4187:2;4181:3;4168:17;4165:25;4162:45;;;4203:1;4200;4193:12;4162:45;4251:3;4238:17;4234:2;4230:26;4296:7;4291:2;4287;4283:11;4279:25;4269:53;;4318:1;4315;4308:12;4269:53;4366:2;4362;4358:11;4345:25;4393:2;4389;4386:10;4383:36;;;4399:18;;:::i;:::-;4445:53;4488:2;4469:13;;-1:-1:-1;;4465:27:181;4494:2;4461:36;4445:53;:::i;:::-;4525:2;4518:5;4511:17;4569:7;4564:2;4559;4555;4551:11;4547:20;4544:33;4541:53;;;4590:1;4587;4580:12;4541:53;4649:2;4644;4640;4636:11;4631:2;4624:5;4620:14;4607:45;4697:1;4692:2;4687;4680:5;4676:14;4672:23;4665:34;4724:5;4719:3;4712:18;;;;4759:2;4754:3;4750:12;4743:19;;4134:2;4129:3;4125:12;4118:19;;4092:680;;;4096:3;4791:5;4781:15;;;;;;;2731:2071;;;;;;;;:::o;5427:252::-;5494:6;5502;5555:2;5543:9;5534:7;5530:23;5526:32;5523:52;;;5571:1;5568;5561:12;5523:52;5594:28;5612:9;5594:28;:::i;:::-;5584:38;5669:2;5654:18;;;;5641:32;;-1:-1:-1;;;5427:252:181:o;6627:173::-;6695:20;;-1:-1:-1;;;;;6744:31:181;;6734:42;;6724:70;;6790:1;6787;6780:12;6805:186;6864:6;6917:2;6905:9;6896:7;6892:23;6888:32;6885:52;;;6933:1;6930;6923:12;6885:52;6956:29;6975:9;6956:29;:::i;6996:258::-;7063:6;7071;7124:2;7112:9;7103:7;7099:23;7095:32;7092:52;;;7140:1;7137;7130:12;7092:52;7163:28;7181:9;7163:28;:::i;:::-;7153:38;;7210;7244:2;7233:9;7229:18;7210:38;:::i;:::-;7200:48;;6996:258;;;;;:::o;7259:772::-;7380:6;7388;7396;7404;7457:2;7445:9;7436:7;7432:23;7428:32;7425:52;;;7473:1;7470;7463:12;7425:52;7513:9;7500:23;7542:18;7583:2;7575:6;7572:14;7569:34;;;7599:1;7596;7589:12;7569:34;7638:70;7700:7;7691:6;7680:9;7676:22;7638:70;:::i;:::-;7727:8;;-1:-1:-1;7612:96:181;-1:-1:-1;7815:2:181;7800:18;;7787:32;;-1:-1:-1;7831:16:181;;;7828:36;;;7860:1;7857;7850:12;7828:36;;7899:72;7963:7;7952:8;7941:9;7937:24;7899:72;:::i;:::-;7259:772;;;;-1:-1:-1;7990:8:181;-1:-1:-1;;;;7259:772:181:o;8785:636::-;8966:2;9018:21;;;8991:18;;;9074:22;;;8937:4;;9153:6;9127:2;9112:18;;8937:4;9187:208;9201:6;9198:1;9195:13;9187:208;;;-1:-1:-1;;;;;9266:26:181;9285:6;9266:26;:::i;:::-;9262:52;9250:65;;9370:15;;;;9335:12;;;;9223:1;9216:9;9187:208;;;-1:-1:-1;9412:3:181;8785:636;-1:-1:-1;;;;;;8785:636:181:o;10105:127::-;10166:10;10161:3;10157:20;10154:1;10147:31;10197:4;10194:1;10187:15;10221:4;10218:1;10211:15;10237:128;10304:9;;;10325:11;;;10322:37;;;10339:18;;:::i;11057:127::-;11118:10;11113:3;11109:20;11106:1;11099:31;11149:4;11146:1;11139:15;11173:4;11170:1;11163:15;11376:422;11417:3;11455:5;11449:12;11482:6;11477:3;11470:19;11507:1;11517:162;11531:6;11528:1;11525:13;11517:162;;;11593:4;11649:13;;;11645:22;;11639:29;11621:11;;;11617:20;;11610:59;11546:12;11517:162;;;11521:3;11724:1;11717:4;11708:6;11703:3;11699:16;11695:27;11688:38;11787:4;11780:2;11776:7;11771:2;11763:6;11759:15;11755:29;11750:3;11746:39;11742:50;11735:57;;;11376:422;;;;:::o;11803:377::-;11996:2;11985:9;11978:21;11959:4;12022:44;12062:2;12051:9;12047:18;12039:6;12022:44;:::i;:::-;12114:9;12106:6;12102:22;12097:2;12086:9;12082:18;12075:50;12142:32;12167:6;12159;12142:32;:::i;:::-;12134:40;11803:377;-1:-1:-1;;;;;11803:377:181:o;12803:277::-;12870:6;12923:2;12911:9;12902:7;12898:23;12894:32;12891:52;;;12939:1;12936;12929:12;12891:52;12971:9;12965:16;13024:5;13017:13;13010:21;13003:5;13000:32;12990:60;;13046:1;13043;13036:12;14140:245;14219:6;14227;14280:2;14268:9;14259:7;14255:23;14251:32;14248:52;;;14296:1;14293;14286:12;14248:52;-1:-1:-1;;14319:16:181;;14375:2;14360:18;;;14354:25;14319:16;;14354:25;;-1:-1:-1;14140:245:181:o;14390:435::-;14443:3;14481:5;14475:12;14508:6;14503:3;14496:19;14534:4;14563:2;14558:3;14554:12;14547:19;;14600:2;14593:5;14589:14;14621:1;14631:169;14645:6;14642:1;14639:13;14631:169;;;14706:13;;14694:26;;14740:12;;;;14775:15;;;;14667:1;14660:9;14631:169;;;-1:-1:-1;14816:3:181;;14390:435;-1:-1:-1;;;;;14390:435:181:o;14830:261::-;15009:2;14998:9;14991:21;14972:4;15029:56;15081:2;15070:9;15066:18;15058:6;15029:56;:::i;15096:403::-;15331:6;15320:9;15313:25;15374:6;15369:2;15358:9;15354:18;15347:34;15417:2;15412;15401:9;15397:18;15390:30;15294:4;15437:56;15489:2;15478:9;15474:18;15466:6;15437:56;:::i;15640:2882::-;15732:12;;8123:19;;;15700:3;15580:14;;;8175:4;15611:18;;;8166:14;;;15700:3;;15732:12;15700:3;15915:973;15955:6;15951:1;15938:11;15934:19;15931:31;15915:973;;;16064:13;;16100:10;16141:13;;;4860:35;;16183:4;16222:13;;;16218:22;;16242:12;;;4860:35;16278:2;16315:13;;;16311:22;;16335:12;;;4860:35;16371:2;16408:13;;;16404:22;;16428:12;;;4860:35;16464:3;16502:13;;;16498:22;;16522:12;;;4860:35;16558:3;16596:13;;;16592:22;;16616:12;;;4860:35;16652:3;16690:13;;;16686:22;;;16710:12;;;4860:35;16746:3;16780:13;;;16795:12;;;4860:35;16837:3;16828:13;;;;16876:1;16864:14;;;;16017:1;16000:19;15915:973;;;16911:13;;;16936:23;;;16933:187;;;17012:10;17000:23;;4860:35;;17058:4;17049:14;;;;17108:1;17091:19;16933:187;17148:6;17135:11;17132:23;17129:198;;;17204:4;17200:17;;;17219:10;17196:34;4860:35;;17265:4;17256:14;;;;;17315:1;17298:19;17129:198;17355:6;17342:11;17339:23;17336:196;;;17424:10;17411:2;17407:15;;;17403:32;4860:35;;17470:4;17461:14;;;;17520:1;17503:19;17336:196;17560:6;17547:11;17544:23;17541:196;;;17629:10;17616:2;17612:15;;;17608:32;4860:35;;17675:4;17666:14;;;;17725:1;17708:19;17541:196;17765:6;17752:11;17749:23;17746:197;;;17835:10;17821:3;17817:16;;;17813:33;4860:35;;17881:4;17872:14;;;;17931:1;17914:19;17746:197;17971:6;17958:11;17955:23;17952:197;;;18041:10;18027:3;18023:16;;;18019:33;4860:35;;18087:4;18078:14;;;;18137:1;18120:19;17952:197;18177:6;18164:11;18161:23;18158:197;;;18247:10;18233:3;18229:16;;;18225:33;4860:35;;18293:4;18284:14;;;;18343:1;18326:19;18158:197;18383:6;18370:11;18367:23;18364:133;;;18435:3;18431:16;;;4860:35;;18482:4;18477:3;18473:14;18466:21;;18364:133;-1:-1:-1;18513:3:181;;15640:2882;-1:-1:-1;;;;15640:2882:181:o;18527:495::-;18588:3;18626:5;18620:12;18653:6;18648:3;18641:19;18679:4;18708:2;18703:3;18699:12;18692:19;;18730:5;18727:1;18720:16;18772:2;18769:1;18759:16;18793:1;18803:194;18817:6;18814:1;18811:13;18803:194;;;18882:13;;-1:-1:-1;;;;;18878:39:181;18866:52;;18938:12;;;;18914:1;18973:14;;;;18832:9;18803:194;;19027:657;19342:10;19330:23;;19312:42;;-1:-1:-1;;;;;19390:32:181;;19385:2;19370:18;;19363:60;19459:3;19454:2;19439:18;;19432:31;;;-1:-1:-1;;19486:64:181;;19530:19;;19522:6;19486:64;:::i;:::-;19598:9;19590:6;19586:22;19581:2;19570:9;19566:18;19559:50;19626:52;19671:6;19663;19626:52;:::i;:::-;19618:60;19027:657;-1:-1:-1;;;;;;;19027:657:181:o;20386:624::-;20565:2;20617:21;;;20590:18;;;20673:22;;;20536:4;;20752:6;20726:2;20711:18;;20536:4;20786:198;20800:6;20797:1;20794:13;20786:198;;;20892:10;20865:25;20883:6;20865:25;:::i;:::-;20861:42;20849:55;;20959:15;;;;20924:12;;;;20822:1;20815:9;20786:198;;21351:759;21694:10;21686:6;21682:23;21671:9;21664:42;21645:4;21742:1;21738;21733:3;21729:11;21725:19;21792:2;21784:6;21780:15;21775:2;21764:9;21760:18;21753:43;21832:3;21827:2;21816:9;21812:18;21805:31;21859:64;21918:3;21907:9;21903:19;21895:6;21859:64;:::i;:::-;21971:9;21963:6;21959:22;21954:2;21943:9;21939:18;21932:50;21999:52;22044:6;22036;21999:52;:::i;:::-;21991:60;;;22100:2;22092:6;22088:15;22082:3;22071:9;22067:19;22060:44;;21351:759;;;;;;;;:::o;23153:226::-;23192:3;-1:-1:-1;;;;;23289:2:181;23282:5;23278:14;23316:2;23307:7;23304:15;23301:41;;23322:18;;:::i;:::-;23371:1;23358:15;;23153:226;-1:-1:-1;;;23153:226:181:o;24070:197::-;-1:-1:-1;;;;;24192:10:181;;;24204;;;24188:27;;24227:11;;;24224:37;;;24241:18;;:::i;:::-;24224:37;24070:197;;;;:::o;24272:200::-;-1:-1:-1;;;;;24408:10:181;;;24396;;;24392:27;;24431:12;;;24428:38;;;24446:18;;:::i;25519:125::-;25584:9;;;25605:10;;;25602:36;;;25618:18;;:::i;25649:127::-;25710:10;25705:3;25701:20;25698:1;25691:31;25741:4;25738:1;25731:15;25765:4;25762:1;25755:15;25781:647;25950:2;26002:21;;;26072:13;;25975:18;;;26094:22;;;25921:4;;25950:2;26173:15;;;;26147:2;26132:18;;;25921:4;26216:186;26230:6;26227:1;26224:13;26216:186;;;26295:13;;26310:10;26291:30;26279:43;;26377:15;;;;26342:12;;;;26252:1;26245:9;26216:186;;;-1:-1:-1;26419:3:181;;25781:647;-1:-1:-1;;;;;;25781:647:181:o;26433:658::-;26604:2;26656:21;;;26726:13;;26629:18;;;26748:22;;;26575:4;;26604:2;26827:15;;;;26801:2;26786:18;;;26575:4;26870:195;26884:6;26881:1;26878:13;26870:195;;;26949:13;;-1:-1:-1;;;;;26945:39:181;26933:52;;27040:15;;;;27005:12;;;;26981:1;26899:9;26870:195;"},"gasEstimates":{"creation":{"codeDepositCost":"2127600","executionCost":"infinite","totalCost":"infinite"},"external":{"DEQUEUE_MAX()":"327","MAX_DOMAINS()":"295","MERKLE()":"infinite","acceptProposedOwner()":"63859","addConnector(uint32,address)":"infinite","aggregate(uint32,bytes32)":"81914","connectors(uint256)":"4705","connectorsHash()":"2352","delay()":"226","delayBlocks()":"2417","dequeue()":"infinite","discardRoot(bytes32)":"32164","domains(uint256)":"6359","domainsHash()":"2373","getConnectorForDomain(uint32)":"infinite","getDomainIndex(uint32)":"infinite","getPendingInboundRootsCount()":"infinite","isDomainSupported(uint32)":"2571","lastPropagatedRoot()":"2331","owner()":"2399","pause()":"infinite","paused()":"2394","pendingInboundRoots()":"2526","propagate(address[],uint256[],bytes[])":"infinite","proposeNewOwner(address)":"56463","proposed()":"2375","proposedTimestamp()":"2393","removeConnector(uint32)":"infinite","renounceOwnership()":"2392","renounced()":"2385","setDelayBlocks(uint256)":"30140","setWatcherManager(address)":"30045","unpause()":"infinite","validateConnectors(address[])":"infinite","validateDomains(uint32[],address[])":"infinite","watcherManager()":"2437"}},"methodIdentifiers":{"DEQUEUE_MAX()":"aa0d60a3","MAX_DOMAINS()":"c8ef89de","MERKLE()":"a01892a5","acceptProposedOwner()":"c5b350df","addConnector(uint32,address)":"b904670f","aggregate(uint32,bytes32)":"8e7d93fa","connectors(uint256)":"13ede1a1","connectorsHash()":"498c2c2e","delay()":"6a42b8f8","delayBlocks()":"ad9c0c2e","dequeue()":"957908d1","discardRoot(bytes32)":"0f8ef4ee","domains(uint256)":"66cf8fab","domainsHash()":"7bc24d99","getConnectorForDomain(uint32)":"7d434e91","getDomainIndex(uint32)":"3c4baaf8","getPendingInboundRootsCount()":"909907cb","isDomainSupported(uint32)":"24ec5d05","lastPropagatedRoot()":"0165bc81","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","pendingInboundRoots()":"7d534308","propagate(address[],uint256[],bytes[])":"412e12db","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","removeConnector(uint32)":"e6f1208d","renounceOwnership()":"715018a6","renounced()":"d232c220","setDelayBlocks(uint256)":"1eeaabea","setWatcherManager(address)":"d2a3cc71","unpause()":"3f4ba83a","validateConnectors(address[])":"27186c6a","validateDomains(uint32[],address[])":"db0f0169","watcherManager()":"a792c29b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_merkle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"connector\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32[]\",\"name\":\"domains\",\"type\":\"uint32[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"connectors\",\"type\":\"address[]\"}],\"name\":\"ConnectorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"connector\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32[]\",\"name\":\"domains\",\"type\":\"uint32[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"connectors\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"ConnectorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previous\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"updated\",\"type\":\"uint256\"}],\"name\":\"DelayBlocksUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"connector\",\"type\":\"address\"}],\"name\":\"DomainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"}],\"name\":\"DomainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"connector\",\"type\":\"address\"}],\"name\":\"PropagateFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"fraudulentRoot\",\"type\":\"bytes32\"}],\"name\":\"RootDiscarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"aggregateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"domainsHash\",\"type\":\"bytes32\"}],\"name\":\"RootPropagated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"receivedRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"queueIndex\",\"type\":\"uint256\"}],\"name\":\"RootReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"aggregateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"aggregatedMessageRoots\",\"type\":\"bytes32[]\"}],\"name\":\"RootsAggregated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"watcherManager\",\"type\":\"address\"}],\"name\":\"WatcherManagerChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEQUEUE_MAX\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_DOMAINS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MERKLE\",\"outputs\":[{\"internalType\":\"contract MerkleTreeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_connector\",\"type\":\"address\"}],\"name\":\"addConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_inbound\",\"type\":\"bytes32\"}],\"name\":\"aggregate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"connectors\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"connectorsHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dequeue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_root\",\"type\":\"bytes32\"}],\"name\":\"discardRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"domains\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainsHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"}],\"name\":\"getConnectorForDomain\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"}],\"name\":\"getDomainIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPendingInboundRootsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"}],\"name\":\"isDomainSupported\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastPropagatedRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingInboundRoots\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"first\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"last\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_connectors\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_fees\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_encodedData\",\"type\":\"bytes[]\"}],\"name\":\"propagate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"}],\"name\":\"removeConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_delayBlocks\",\"type\":\"uint256\"}],\"name\":\"setDelayBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"}],\"name\":\"setWatcherManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_connectors\",\"type\":\"address[]\"}],\"name\":\"validateConnectors\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"_domains\",\"type\":\"uint32[]\"},{\"internalType\":\"address[]\",\"name\":\"_connectors\",\"type\":\"address[]\"}],\"name\":\"validateDomains\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"watcherManager\",\"outputs\":[{\"internalType\":\"contract WatcherManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addConnector(uint32,address)\":{\"details\":\"Only owner can add a new connector. Address should be the connector on L1.Cannot add address(0) to avoid duplicated domain in array and reduce gas fee while propagating.\",\"params\":{\"_connector\":\"Address of the hub connector.\",\"_domain\":\"The target spoke domain of the given connector.\"}},\"aggregate(uint32,bytes32)\":{\"details\":\"The aggregate tree's root, which will include this inbound root, will be propagated to all spoke domains (via `propagate`) on a regular basis assuming the verification period is surpassed without dispute.\",\"params\":{\"_domain\":\"The source domain of the given root.\",\"_inbound\":\"The inbound root coming from the given domain.\"}},\"constructor\":{\"params\":{\"_delayBlocks\":\"The delay for the validation period for incoming messages in blocks.\",\"_merkle\":\"The address of the MerkleTreeManager on this domain.\",\"_watcherManager\":\"The address of the WatcherManager on this domain.\"}},\"dequeue()\":{\"details\":\"Will dequeue a fixed maximum amount of roots to prevent out of gas errors. As such, this method is public and separate from `propagate` so we can curtail an overloaded queue as needed.Reverts if no verified inbound roots are found.\",\"returns\":{\"_0\":\"bytes32 The new aggregate root.\",\"_1\":\"uint256 The updated count (number of leaves).\"}},\"discardRoot(bytes32)\":{\"details\":\"The given root does NOT have to currently be in the queue. It isn't removed from the queue directly, but instead is filtered out when dequeuing is done for the sake of aggregation.Can only be called by the owner when the protocol is paused.\",\"params\":{\"_root\":\"The root to be discarded.\"}},\"getConnectorForDomain(uint32)\":{\"details\":\"Inefficient, should only be used by caller if they have no index reference.\",\"params\":{\"_domain\":\"The domain for which to get the hub connector address.\"}},\"getDomainIndex(uint32)\":{\"details\":\"Reverts if domain is not supported.\",\"params\":{\"_domain\":\"The domain for which to get the index value.\"}},\"isDomainSupported(uint32)\":{\"params\":{\"_domain\":\"Domain to check.\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"propagate(address[],uint256[],bytes[])\":{\"details\":\"Should be called by relayers at a regular interval.\",\"params\":{\"_connectors\":\"Array of connectors: should match exactly the array of `connectors` in storage; used here to reduce gas costs, and keep them static regardless of number of supported domains.\",\"_encodedData\":\"Array of encodedData: extra params for each AMB if required\",\"_fees\":\"Array of fees in native token for an AMB if required\"}},\"removeConnector(uint32)\":{\"details\":\"Only watcher can remove a connector. TODO: Could add a metatx-able `removeConnectorWithSig` if we want to use relayers?\",\"params\":{\"_domain\":\"The spoke domain of the target connector we want to remove.\"}},\"renounceOwnership()\":{\"details\":\"Renounce ownership should be impossible as long as watchers can freely remove connectors and only the owner can add them back\"},\"validateConnectors(address[])\":{\"details\":\"Reverts if domains or connectors do not match, including ordering.\",\"params\":{\"_connectors\":\"The given connectors array to check.\"}},\"validateDomains(uint32[],address[])\":{\"details\":\"Reverts if domains or connectors do not match, including ordering.\",\"params\":{\"_connectors\":\"The given connectors array to check.\",\"_domains\":\"The given domains array to check.\"}}},\"stateVariables\":{\"pendingInboundRoots\":{\"details\":\"Watchers should be able to watch this queue for fraudulent messages and pause this contract if fraud is detected.\"}},\"version\":1},\"userdoc\":{\"events\":{\"WatcherManagerChanged(address)\":{\"notice\":\"Emitted when the manager address changes\"}},\"kind\":\"user\",\"methods\":{\"DEQUEUE_MAX()\":{\"notice\":\"Maximum number of values to dequeue from the queue in one sitting (one call of `propagate` or `dequeue`). Used to cap gas requirements.\"},\"MAX_DOMAINS()\":{\"notice\":\"The absolute maximum number of domains that we should support. Domain and connector arrays are naturally unbounded, but the gas cost of reading these arrays in `updateHashes()` is bounded by the block's gas limit. If we want to set a hard ceiling for gas costs for the `updateHashes()` method at approx. 500K gas, with an average SLOAD cost of 900 gas per domain (1 uint32, 1 address):       500K / 900 = ~555 domains Realistically, the cap on the number of domains will likely exist in other places, but we cap it here as a last resort.\"},\"MERKLE()\":{\"notice\":\"MerkleTreeManager contract instance. Will hold the active tree of aggregated inbound roots. The root of this tree will be distributed crosschain to all spoke domains.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"addConnector(uint32,address)\":{\"notice\":\"Add a new supported domain and corresponding hub connector to the system. This new domain will receive the propagated aggregate root.\"},\"aggregate(uint32,bytes32)\":{\"notice\":\"Accept an inbound root coming from a given domain's hub connector, enqueuing this incoming root into the current queue as it awaits the verification period.\"},\"connectors(uint256)\":{\"notice\":\"Tracks the addresses of the hub connector contracts corresponding to subscribed spoke domains. The index of any given connector in this array should match the index of that connector's target spoke domain in the `domains` array above.\"},\"connectorsHash()\":{\"notice\":\"A \\\"quick reference\\\" hash used in the `propagate` method below to validate that the provided array of connectors matches the one we have in storage.\"},\"constructor\":{\"notice\":\"Creates a new RootManager instance.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"delayBlocks()\":{\"notice\":\"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary.\"},\"dequeue()\":{\"notice\":\"Dequeue verified inbound roots and insert them into the aggregator tree.\"},\"discardRoot(bytes32)\":{\"notice\":\"Removes (effectively blocklists) a given (fraudulent) root from the queue of pending inbound roots.\"},\"domains(uint256)\":{\"notice\":\"Domains array tracks currently subscribed domains to this hub aggregator. We should distribute the aggregate root to all of these domains in the `propagate` method.\"},\"domainsHash()\":{\"notice\":\"A \\\"quick reference\\\" hash used in the `propagate` method below to validate that the provided array of domains matches the one we have in storage.\"},\"getConnectorForDomain(uint32)\":{\"notice\":\"Gets the corresponding hub connector address for a given spoke domain.\"},\"getDomainIndex(uint32)\":{\"notice\":\"Gets the index of a given domain in the domains and connectors arrays.\"},\"isDomainSupported(uint32)\":{\"notice\":\"Convenience shortcut for supported domains. Used to sanity check adding new domains.\"},\"lastPropagatedRoot()\":{\"notice\":\"The last aggregate root we propagated to spoke chains. Used to prevent sending redundant aggregate roots in `propagate`.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"pause()\":{\"notice\":\"Watchers can pause contracts if fraud is detected\"},\"pendingInboundRoots()\":{\"notice\":\"Queue used for management of verification for inbound roots from spoke chains. Once the verification period elapses, the inbound messages can be aggregated into the merkle tree for propagation to spoke chains.\"},\"propagate(address[],uint256[],bytes[])\":{\"notice\":\"This is called by relayers to take the current aggregate tree root and propagate it to all spoke domains (via their respective hub connectors).\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"removeConnector(uint32)\":{\"notice\":\"Remove support for a connector and respective domain. That connector/domain will no longer receive updates for the latest aggregate root.\"},\"renounceOwnership()\":{\"notice\":\"Remove ability to renounce ownership\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"setDelayBlocks(uint256)\":{\"notice\":\"Set the `delayBlocks`, the period in blocks over which an incoming message is verified.\"},\"setWatcherManager(address)\":{\"notice\":\"Owner can enroll a watcher (abilities are defined by inheriting contracts)\"},\"unpause()\":{\"notice\":\"Owner can unpause contracts if fraud is detected by watchers\"},\"validateConnectors(address[])\":{\"notice\":\"Validate given connectors array is correct (i.e. it mirrors what is currently saved in storage).\"},\"validateDomains(uint32[],address[])\":{\"notice\":\"Validate given domains and connectors arrays are correct (i.e. they mirror what is currently saved in storage).\"},\"watcherManager()\":{\"notice\":\"The `WatcherManager` contract governs the watcher allowlist.\"}},\"notice\":\"This contract exists at cluster hubs, and aggregates all transfer roots from messaging spokes into a single merkle tree. Regularly broadcasts the root of the aggregator tree back out to all the messaging spokes.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/RootManager.sol\":\"RootManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n    /**\\n     * @dev Emitted when the pause is triggered by `account`.\\n     */\\n    event Paused(address account);\\n\\n    /**\\n     * @dev Emitted when the pause is lifted by `account`.\\n     */\\n    event Unpaused(address account);\\n\\n    bool private _paused;\\n\\n    /**\\n     * @dev Initializes the contract in unpaused state.\\n     */\\n    constructor() {\\n        _paused = false;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    modifier whenNotPaused() {\\n        _requireNotPaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    modifier whenPaused() {\\n        _requirePaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the contract is paused, and false otherwise.\\n     */\\n    function paused() public view virtual returns (bool) {\\n        return _paused;\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is paused.\\n     */\\n    function _requireNotPaused() internal view virtual {\\n        require(!paused(), \\\"Pausable: paused\\\");\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is not paused.\\n     */\\n    function _requirePaused() internal view virtual {\\n        require(paused(), \\\"Pausable: not paused\\\");\\n    }\\n\\n    /**\\n     * @dev Triggers stopped state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    function _pause() internal virtual whenNotPaused {\\n        _paused = true;\\n        emit Paused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Returns to normal state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    function _unpause() internal virtual whenPaused {\\n        _paused = false;\\n        emit Unpaused(_msgSender());\\n    }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"contracts/messaging/MerkleTreeManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnableUpgradeable} from \\\"../shared/ProposedOwnableUpgradeable.sol\\\";\\nimport {MerkleLib} from \\\"./libraries/MerkleLib.sol\\\";\\n\\n/**\\n * @title MerkleTreeManager\\n * @notice Contains a Merkle tree instance and exposes read/write functions for the tree.\\n * @dev On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector.\\n */\\ncontract MerkleTreeManager is ProposedOwnableUpgradeable {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleTreeManager__setArborist_zeroAddress();\\n  error MerkleTreeManager__setArborist_alreadyArborist();\\n\\n  // ============ Events ============\\n\\n  event ArboristUpdated(address previous, address updated);\\n\\n  event LeafInserted(bytes32 root, uint256 count, bytes32 leaf);\\n\\n  event LeavesInserted(bytes32 root, uint256 count, bytes32[] leaves);\\n\\n  // ============ Libraries ============\\n\\n  using MerkleLib for MerkleLib.Tree;\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Core data structure with which this contract is tasked with keeping custody.\\n   * Writable only by the designated arborist.\\n   */\\n  MerkleLib.Tree public tree;\\n\\n  /**\\n   * @notice The arborist contract that has permission to write to this tree.\\n   * @dev This could be the root manager contract or a spoke connector contract, for example.\\n   */\\n  address public arborist;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyArborist() {\\n    require(arborist == msg.sender, \\\"!arborist\\\");\\n    _;\\n  }\\n\\n  // ============ Getters ============\\n\\n  /**\\n   * @notice Returns the current branch.\\n   */\\n  function branch() public view returns (bytes32[32] memory) {\\n    return tree.branch;\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the current root.\\n   */\\n  function root() public view returns (bytes32) {\\n    return tree.root();\\n  }\\n\\n  /**\\n   * @notice Returns the number of inserted leaves in the tree (current index).\\n   */\\n  function count() public view returns (uint256) {\\n    return tree.count;\\n  }\\n\\n  /**\\n   * @notice Convenience getter: returns the root and count.\\n   */\\n  function rootAndCount() public view returns (bytes32, uint256) {\\n    return (tree.root(), tree.count);\\n  }\\n\\n  // ======== Initializer =========\\n\\n  function initialize(address _arborist) public initializer {\\n    __MerkleTreeManager_init(_arborist);\\n    __ProposedOwnable_init();\\n  }\\n\\n  /**\\n   * @dev Initializes MerkleTreeManager instance. Sets the msg.sender as the initial permissioned\\n   */\\n  function __MerkleTreeManager_init(address _arborist) internal onlyInitializing {\\n    __MerkleTreeManager_init_unchained(_arborist);\\n  }\\n\\n  function __MerkleTreeManager_init_unchained(address _arborist) internal onlyInitializing {\\n    arborist = _arborist;\\n  }\\n\\n  // ============ Admin Functions ==============\\n\\n  /**\\n   * @notice Method for the current arborist to assign write permissions to a new arborist.\\n   * @param newArborist The new address to set as the current arborist.\\n   */\\n  function setArborist(address newArborist) external onlyOwner {\\n    if (newArborist == address(0)) revert MerkleTreeManager__setArborist_zeroAddress();\\n    address current = arborist;\\n    if (current == newArborist) revert MerkleTreeManager__setArborist_alreadyArborist();\\n\\n    // Emit updated event\\n    emit ArboristUpdated(current, newArborist);\\n\\n    arborist = newArborist;\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as there is a possibility the\\n   * arborist may change.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ========= Public Functions =========\\n\\n  /**\\n   * @notice Inserts the given leaves into the tree.\\n   * @param leaves The leaves to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32[] memory leaves) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // For > 1 leaf, considerably more efficient to put this tree into memory, conduct operations,\\n    // then re-assign it to storage - *especially* if we have multiple leaves to insert.\\n    MerkleLib.Tree memory _tree = tree;\\n\\n    uint256 leafCount = leaves.length;\\n    for (uint256 i; i < leafCount; ) {\\n      // Insert the new node (using in-memory method).\\n      _tree = _tree.insert(leaves[i]);\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // Write the newly updated tree to storage.\\n    tree = _tree;\\n\\n    // Get return details for convenience.\\n    _count = _tree.count;\\n    // NOTE: Root calculation method currently reads from storage only.\\n    _root = tree.root();\\n\\n    emit LeavesInserted(_root, _count, leaves);\\n  }\\n\\n  /**\\n   * @notice Inserts the given leaf into the tree.\\n   * @param leaf The leaf to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32 leaf) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // Insert the new node.\\n    tree = tree.insert(leaf);\\n    _count = tree.count;\\n    _root = tree.root();\\n\\n    emit LeafInserted(_root, _count, leaf);\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[48] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x6eb338843435d4e859de1c71b9ad458c41aeba79002eaa58a463ef86effda89a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/RootManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\n\\nimport {IRootManager} from \\\"./interfaces/IRootManager.sol\\\";\\nimport {IHubConnector} from \\\"./interfaces/IHubConnector.sol\\\";\\nimport {QueueLib} from \\\"./libraries/Queue.sol\\\";\\nimport {DomainIndexer} from \\\"./libraries/DomainIndexer.sol\\\";\\n\\nimport {MerkleTreeManager} from \\\"./MerkleTreeManager.sol\\\";\\nimport {WatcherClient} from \\\"./WatcherClient.sol\\\";\\n\\n/**\\n * @notice This contract exists at cluster hubs, and aggregates all transfer roots from messaging\\n * spokes into a single merkle tree. Regularly broadcasts the root of the aggregator tree back out\\n * to all the messaging spokes.\\n */\\ncontract RootManager is ProposedOwnable, IRootManager, WatcherClient, DomainIndexer {\\n  // ============ Libraries ============\\n\\n  using QueueLib for QueueLib.Queue;\\n\\n  // ============ Events ============\\n\\n  event DelayBlocksUpdated(uint256 previous, uint256 updated);\\n\\n  event RootReceived(uint32 domain, bytes32 receivedRoot, uint256 queueIndex);\\n\\n  event RootsAggregated(bytes32 aggregateRoot, uint256 count, bytes32[] aggregatedMessageRoots);\\n\\n  event RootPropagated(bytes32 aggregateRoot, uint256 count, bytes32 domainsHash);\\n\\n  event RootDiscarded(bytes32 fraudulentRoot);\\n\\n  event ConnectorAdded(uint32 domain, address connector, uint32[] domains, address[] connectors);\\n\\n  event ConnectorRemoved(uint32 domain, address connector, uint32[] domains, address[] connectors, address caller);\\n\\n  event PropagateFailed(uint32 domain, address connector);\\n\\n  // ============ Properties ============\\n\\n  /**\\n   * @notice Maximum number of values to dequeue from the queue in one sitting (one call of `propagate`\\n   * or `dequeue`). Used to cap gas requirements.\\n   */\\n  uint128 public constant DEQUEUE_MAX = 100;\\n\\n  /**\\n   * @notice Number of blocks to delay the processing of a message to allow for watchers to verify\\n   * the validity and pause if necessary.\\n   */\\n  uint256 public delayBlocks;\\n\\n  /**\\n   * @notice Queue used for management of verification for inbound roots from spoke chains. Once\\n   * the verification period elapses, the inbound messages can be aggregated into the merkle tree\\n   * for propagation to spoke chains.\\n   * @dev Watchers should be able to watch this queue for fraudulent messages and pause this contract\\n   * if fraud is detected.\\n   */\\n  QueueLib.Queue public pendingInboundRoots;\\n\\n  /**\\n   * @notice The last aggregate root we propagated to spoke chains. Used to prevent sending redundant\\n   * aggregate roots in `propagate`.\\n   */\\n  bytes32 public lastPropagatedRoot;\\n\\n  /**\\n   * @notice MerkleTreeManager contract instance. Will hold the active tree of aggregated inbound roots.\\n   * The root of this tree will be distributed crosschain to all spoke domains.\\n   */\\n  MerkleTreeManager public immutable MERKLE;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyConnector(uint32 _domain) {\\n    require(getConnectorForDomain(_domain) == msg.sender, \\\"!connector\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new RootManager instance.\\n   * @param _delayBlocks The delay for the validation period for incoming messages in blocks.\\n   * @param _merkle The address of the MerkleTreeManager on this domain.\\n   * @param _watcherManager The address of the WatcherManager on this domain.\\n   */\\n  constructor(\\n    uint256 _delayBlocks,\\n    address _merkle,\\n    address _watcherManager\\n  ) ProposedOwnable() WatcherClient(_watcherManager) {\\n    _setOwner(msg.sender);\\n\\n    require(_merkle != address(0), \\\"!zero merkle\\\");\\n    MERKLE = MerkleTreeManager(_merkle);\\n\\n    delayBlocks = _delayBlocks;\\n\\n    // Initialize pending inbound root queue.\\n    pendingInboundRoots.initialize();\\n  }\\n\\n  // ================ Getters ================\\n\\n  function getPendingInboundRootsCount() public view returns (uint256) {\\n    return pendingInboundRoots.length();\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Set the `delayBlocks`, the period in blocks over which an incoming message\\n   * is verified.\\n   */\\n  function setDelayBlocks(uint256 _delayBlocks) public onlyOwner {\\n    require(_delayBlocks != delayBlocks, \\\"!delayBlocks\\\");\\n    emit DelayBlocksUpdated(_delayBlocks, delayBlocks);\\n    delayBlocks = _delayBlocks;\\n  }\\n\\n  /**\\n   * @notice Add a new supported domain and corresponding hub connector to the system. This new domain\\n   * will receive the propagated aggregate root.\\n   * @dev Only owner can add a new connector. Address should be the connector on L1.\\n   * @dev Cannot add address(0) to avoid duplicated domain in array and reduce gas fee while propagating.\\n   *\\n   * @param _domain The target spoke domain of the given connector.\\n   * @param _connector Address of the hub connector.\\n   */\\n  function addConnector(uint32 _domain, address _connector) external onlyOwner {\\n    addDomain(_domain, _connector);\\n    emit ConnectorAdded(_domain, _connector, domains, connectors);\\n  }\\n\\n  /**\\n   * @notice Remove support for a connector and respective domain. That connector/domain will no longer\\n   * receive updates for the latest aggregate root.\\n   * @dev Only watcher can remove a connector.\\n   * TODO: Could add a metatx-able `removeConnectorWithSig` if we want to use relayers?\\n   *\\n   * @param _domain The spoke domain of the target connector we want to remove.\\n   */\\n  function removeConnector(uint32 _domain) public onlyWatcher {\\n    address _connector = removeDomain(_domain);\\n    emit ConnectorRemoved(_domain, _connector, domains, connectors, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Removes (effectively blocklists) a given (fraudulent) root from the queue of pending\\n   * inbound roots.\\n   * @dev The given root does NOT have to currently be in the queue. It isn't removed from the queue\\n   * directly, but instead is filtered out when dequeuing is done for the sake of aggregation.\\n   * @dev Can only be called by the owner when the protocol is paused.\\n   *\\n   * @param _root The root to be discarded.\\n   */\\n  function discardRoot(bytes32 _root) public onlyOwner whenPaused {\\n    pendingInboundRoots.remove(_root);\\n    emit RootDiscarded(_root);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as watchers can freely remove connectors\\n   * and only the owner can add them back\\n   */\\n  function renounceOwnership() public virtual override(ProposedOwnable, WatcherClient) onlyOwner {}\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice This is called by relayers to take the current aggregate tree root and propagate it to all\\n   * spoke domains (via their respective hub connectors).\\n   * @dev Should be called by relayers at a regular interval.\\n   *\\n   * @param _connectors Array of connectors: should match exactly the array of `connectors` in storage;\\n   * used here to reduce gas costs, and keep them static regardless of number of supported domains.\\n   * @param _fees Array of fees in native token for an AMB if required\\n   * @param _encodedData Array of encodedData: extra params for each AMB if required\\n   */\\n  function propagate(\\n    address[] calldata _connectors,\\n    uint256[] calldata _fees,\\n    bytes[] memory _encodedData\\n  ) external payable whenNotPaused {\\n    validateConnectors(_connectors);\\n\\n    uint256 _numDomains = _connectors.length;\\n    // Sanity check: fees and encodedData lengths matches connectors length.\\n    require(_fees.length == _numDomains && _encodedData.length == _numDomains, \\\"invalid lengths\\\");\\n\\n    // Dequeue verified roots from the queue and insert into the tree.\\n    (bytes32 _aggregateRoot, uint256 _count) = dequeue();\\n\\n    // Sanity check: make sure we are not propagating a redundant aggregate root.\\n    require(_aggregateRoot != lastPropagatedRoot, \\\"redundant root\\\");\\n    lastPropagatedRoot = _aggregateRoot;\\n\\n    uint256 sum = msg.value;\\n    for (uint32 i; i < _numDomains; ) {\\n      // Try to send the message with appropriate encoded data and fees\\n      // Continue on revert, but emit an event\\n      try\\n        IHubConnector(_connectors[i]).sendMessage{value: _fees[i]}(abi.encodePacked(_aggregateRoot), _encodedData[i])\\n      {\\n        // NOTE: This will ensure there is sufficient msg.value for all fees before calling `sendMessage`\\n        // This will revert as soon as there are insufficient fees for call i, even if call n > i has\\n        // sufficient budget, this function will revert\\n        sum -= _fees[i];\\n      } catch {\\n        emit PropagateFailed(domains[i], _connectors[i]);\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    emit RootPropagated(_aggregateRoot, _count, domainsHash);\\n  }\\n\\n  /**\\n   * @notice Accept an inbound root coming from a given domain's hub connector, enqueuing this incoming\\n   * root into the current queue as it awaits the verification period.\\n   * @dev The aggregate tree's root, which will include this inbound root, will be propagated to all spoke\\n   * domains (via `propagate`) on a regular basis assuming the verification period is surpassed without\\n   * dispute.\\n   *\\n   * @param _domain The source domain of the given root.\\n   * @param _inbound The inbound root coming from the given domain.\\n   */\\n  function aggregate(uint32 _domain, bytes32 _inbound) external whenNotPaused onlyConnector(_domain) {\\n    uint128 lastIndex = pendingInboundRoots.enqueue(_inbound);\\n    emit RootReceived(_domain, _inbound, lastIndex);\\n  }\\n\\n  /**\\n   * @notice Dequeue verified inbound roots and insert them into the aggregator tree.\\n   * @dev Will dequeue a fixed maximum amount of roots to prevent out of gas errors. As such, this\\n   * method is public and separate from `propagate` so we can curtail an overloaded queue as needed.\\n   * @dev Reverts if no verified inbound roots are found.\\n   *\\n   * @return bytes32 The new aggregate root.\\n   * @return uint256 The updated count (number of leaves).\\n   */\\n  function dequeue() public whenNotPaused returns (bytes32, uint256) {\\n    // Get all of the verified roots from the queue.\\n    bytes32[] memory _verifiedInboundRoots = pendingInboundRoots.dequeueVerified(delayBlocks, DEQUEUE_MAX);\\n\\n    // If there's nothing dequeued, just return the root and count.\\n    if (_verifiedInboundRoots.length == 0) {\\n      return MERKLE.rootAndCount();\\n    }\\n\\n    // Insert the leaves into the aggregator tree (method will also calculate and return the current\\n    // aggregate root and count).\\n    (bytes32 _aggregateRoot, uint256 _count) = MERKLE.insert(_verifiedInboundRoots);\\n\\n    emit RootsAggregated(_aggregateRoot, _count, _verifiedInboundRoots);\\n\\n    return (_aggregateRoot, _count);\\n  }\\n}\\n\",\"keccak256\":\"0x69b657f6053ed952525cfa47fbf61dad49777b9872743a247ea577fb83be91df\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherClient.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Pausable} from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\nimport {WatcherManager} from \\\"./WatcherManager.sol\\\";\\n\\n/**\\n * @notice This contract abstracts the functionality of the watcher manager.\\n * Contracts can inherit this contract to be able to use the watcher manager's shared watcher set.\\n */\\n\\ncontract WatcherClient is ProposedOwnable, Pausable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted when the manager address changes\\n   * @param watcherManager The updated manager\\n   */\\n  event WatcherManagerChanged(address watcherManager);\\n\\n  // ============ Properties ============\\n  /**\\n   * @notice The `WatcherManager` contract governs the watcher allowlist.\\n   * @dev Multiple clients can share a watcher set using the same manager\\n   */\\n  WatcherManager public watcherManager;\\n\\n  // ============ Constructor ============\\n  constructor(address _watcherManager) ProposedOwnable() {\\n    watcherManager = WatcherManager(_watcherManager);\\n  }\\n\\n  // ============ Modifiers ============\\n  /**\\n   * @notice Enforces the sender is the watcher\\n   */\\n  modifier onlyWatcher() {\\n    require(watcherManager.isWatcher(msg.sender), \\\"!watcher\\\");\\n    _;\\n  }\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @notice Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function setWatcherManager(address _watcherManager) external onlyOwner {\\n    require(_watcherManager != address(watcherManager), \\\"already watcher manager\\\");\\n    watcherManager = WatcherManager(_watcherManager);\\n    emit WatcherManagerChanged(_watcherManager);\\n  }\\n\\n  /**\\n   * @notice Owner can unpause contracts if fraud is detected by watchers\\n   */\\n  function unpause() external onlyOwner whenPaused {\\n    _unpause();\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as only the owner\\n   * is able to unpause the contracts. You can still propose `address(0)`,\\n   * but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ============ Watcher fns ============\\n\\n  /**\\n   * @notice Watchers can pause contracts if fraud is detected\\n   */\\n  function pause() external onlyWatcher whenNotPaused {\\n    _pause();\\n  }\\n}\\n\",\"keccak256\":\"0x97b0da2c0317359ef2980d1f3c5fcdd7df2bdacbedf216dcbda521b96124444a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can\\n * inherit to make use of the same watcher set.\\n */\\n\\ncontract WatcherManager is ProposedOwnable {\\n  // ============ Events ============\\n  event WatcherAdded(address watcher);\\n\\n  event WatcherRemoved(address watcher);\\n\\n  // ============ Properties ============\\n  mapping(address => bool) public isWatcher;\\n\\n  // ============ Constructor ============\\n  constructor() ProposedOwnable() {\\n    _setOwner(msg.sender);\\n  }\\n\\n  // ============ Modifiers ============\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @dev Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function addWatcher(address _watcher) external onlyOwner {\\n    require(!isWatcher[_watcher], \\\"already watcher\\\");\\n    isWatcher[_watcher] = true;\\n    emit WatcherAdded(_watcher);\\n  }\\n\\n  /**\\n   * @dev Owner can unenroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function removeWatcher(address _watcher) external onlyOwner {\\n    require(isWatcher[_watcher], \\\"!exist\\\");\\n    delete isWatcher[_watcher];\\n    emit WatcherRemoved(_watcher);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as the watcher griefing\\n   * vector exists. You can still propose `address(0)`, but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n}\\n\",\"keccak256\":\"0x94d9db4cd19453c9047164f697011163a42a6e12f9b2e1d7fbcfb35a7d021318\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IHubConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IConnector} from \\\"./IConnector.sol\\\";\\n\\ninterface IHubConnector is IConnector {\\n  function sendMessage(bytes memory _data, bytes memory _encodedData) external payable;\\n}\\n\",\"keccak256\":\"0x9c3b0b9f1ab326d6283e404818b8c2c55c4fc1ee9919830a1d04ebc3f4a022cd\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IRootManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\ninterface IRootManager {\\n  /**\\n   * @notice This is called by relayers to generate + send the mixed root from mainnet via AMB to\\n   * spoke domains.\\n   * @dev This must read information for the root from the registered AMBs.\\n   */\\n  function propagate(\\n    address[] calldata _connectors,\\n    uint256[] calldata _fees,\\n    bytes[] memory _encodedData\\n  ) external payable;\\n\\n  /**\\n   * @notice Called by the connectors for various domains on the hub to aggregate their latest\\n   * inbound root.\\n   * @dev This must read information for the root from the registered AMBs\\n   */\\n  function aggregate(uint32 _domain, bytes32 _outbound) external;\\n}\\n\",\"keccak256\":\"0xa895dfaa4baad37a636e7e7e7da72a0a4badfd2d3d8256f975e5101cd5a98236\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/DomainIndexer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice This abstract contract was written to ensure domain and connector mutex is scalable for the\\n * purposes of messaging layer operations. In particular, it aims to reduce gas costs to be relatively\\n * static regardless of the number of domains kept in storage by enabling callers of `RootManager.propagate`\\n * to supply the `domains` and `connectors` arrays as params, and check the hashes of those params against\\n * those we keep in storage.\\n */\\nabstract contract DomainIndexer {\\n  // ============ Events ============\\n\\n  event DomainAdded(uint32 domain, address connector);\\n  event DomainRemoved(uint32 domain);\\n\\n  // ============ Properties ============\\n\\n  /**\\n   * @notice The absolute maximum number of domains that we should support. Domain and connector arrays\\n   * are naturally unbounded, but the gas cost of reading these arrays in `updateHashes()` is bounded by\\n   * the block's gas limit.\\n   *\\n   * If we want to set a hard ceiling for gas costs for the `updateHashes()` method at approx. 500K gas,\\n   * with an average SLOAD cost of 900 gas per domain (1 uint32, 1 address):\\n   *       500K / 900 = ~555 domains\\n   *\\n   * Realistically, the cap on the number of domains will likely exist in other places, but we cap it\\n   * here as a last resort.\\n   */\\n  uint256 public constant MAX_DOMAINS = 500;\\n\\n  /**\\n   * @notice Domains array tracks currently subscribed domains to this hub aggregator.\\n   * We should distribute the aggregate root to all of these domains in the `propagate` method.\\n   * @dev Whenever this domains array is updated, the connectors array should also be updated.\\n   */\\n  uint32[] public domains;\\n\\n  /**\\n   * @notice A \\\"quick reference\\\" hash used in the `propagate` method below to validate that the provided\\n   * array of domains matches the one we have in storage.\\n   * @dev This hash should be re-calculated whenever the domains array is updated.\\n   */\\n  bytes32 public domainsHash;\\n\\n  /**\\n   * @notice Tracks the addresses of the hub connector contracts corresponding to subscribed spoke domains.\\n   * The index of any given connector in this array should match the index of that connector's target spoke\\n   * domain in the `domains` array above.\\n   * @dev This should be updated whenever the domains array is updated.\\n   */\\n  address[] public connectors;\\n\\n  /**\\n   * @notice A \\\"quick reference\\\" hash used in the `propagate` method below to validate that the provided\\n   * array of connectors matches the one we have in storage.\\n   * @dev This hash should be re-calculated whenever the connectors array is updated.\\n   */\\n  bytes32 public connectorsHash;\\n\\n  /**\\n   * @notice Shortcut to reverse lookup the index by domain. We index starting at one so the zero value can\\n   * be considered invalid (see fn: `isDomainSupported`).\\n   * @dev This should be updated whenever the domains array is updated.\\n   */\\n  mapping(uint32 => uint256) private domainToIndexPlusOne;\\n\\n  // ============ Getters ============\\n\\n  /**\\n   * @notice Convenience shortcut for supported domains. Used to sanity check adding new domains.\\n   * @param _domain Domain to check.\\n   */\\n  function isDomainSupported(uint32 _domain) public view returns (bool) {\\n    return domainToIndexPlusOne[_domain] != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the index of a given domain in the domains and connectors arrays.\\n   * @dev Reverts if domain is not supported.\\n   * @param _domain The domain for which to get the index value.\\n   */\\n  function getDomainIndex(uint32 _domain) public view returns (uint256) {\\n    uint256 index = domainToIndexPlusOne[_domain];\\n    require(index != 0, \\\"!supported\\\");\\n    return index - 1;\\n  }\\n\\n  /**\\n   * @notice Gets the corresponding hub connector address for a given spoke domain.\\n   * @dev Inefficient, should only be used by caller if they have no index reference.\\n   * @param _domain The domain for which to get the hub connector address.\\n   */\\n  function getConnectorForDomain(uint32 _domain) public view returns (address) {\\n    return connectors[getDomainIndex(_domain)];\\n  }\\n\\n  /**\\n   * @notice Validate given domains and connectors arrays are correct (i.e. they mirror what is\\n   * currently saved in storage).\\n   * @dev Reverts if domains or connectors do not match, including ordering.\\n   * @param _domains The given domains array to check.\\n   * @param _connectors The given connectors array to check.\\n   */\\n  function validateDomains(uint32[] calldata _domains, address[] calldata _connectors) public view {\\n    // Sanity check: arguments are same length.\\n    require(_domains.length == _connectors.length, \\\"!matching length\\\");\\n    // Validate that given domains match the current array in storage.\\n    require(keccak256(abi.encode(_domains)) == domainsHash, \\\"!domains\\\");\\n    // Validate that given connectors match the current array in storage.\\n    require(keccak256(abi.encode(_connectors)) == connectorsHash, \\\"!connectors\\\");\\n  }\\n\\n  /**\\n   * @notice Validate given connectors array is correct (i.e. it mirrors what is\\n   * currently saved in storage).\\n   * @dev Reverts if domains or connectors do not match, including ordering.\\n   * @param _connectors The given connectors array to check.\\n   */\\n  function validateConnectors(address[] calldata _connectors) public view {\\n    // Validate that given connectors match the current array in storage.\\n    require(keccak256(abi.encode(_connectors)) == connectorsHash, \\\"!connectors\\\");\\n  }\\n\\n  // ============ Helper Functions ============\\n\\n  /**\\n   * @notice Handles all mutex for adding support for a given domain.\\n   * @param _domain Domain for which we are adding support.\\n   * @param _connector Corresponding hub connector address belonging to given domain.\\n   */\\n  function addDomain(uint32 _domain, address _connector) internal {\\n    // Sanity check: domain does not already exist.\\n    require(!isDomainSupported(_domain), \\\"domain exists\\\");\\n    // Sanity check: connector is reasonable.\\n    require(_connector != address(0), \\\"!connector\\\");\\n    // Sanity check: Under maximum.\\n    require(domains.length < MAX_DOMAINS, \\\"DomainIndexer at capacity\\\");\\n\\n    // Push domain and connector to respective arrays.\\n    domains.push(_domain);\\n    connectors.push(_connector);\\n    // Set reverse lookup.\\n    uint256 _indexPlusOne = domains.length;\\n    domainToIndexPlusOne[_domain] = _indexPlusOne;\\n\\n    // Update the hashes for the given arrays.\\n    updateHashes();\\n\\n    emit DomainAdded(_domain, _connector);\\n  }\\n\\n  /**\\n   * @notice Handles all mutex for removing support for a given domain.\\n   * @param _domain Domain we are removing.\\n   * @return address of the hub connector for the domain we removed.\\n   */\\n  function removeDomain(uint32 _domain) internal returns (address) {\\n    uint256 _index = getDomainIndex(_domain);\\n    // Get the connector at the given index.\\n    address _connector = connectors[_index];\\n    // Sanity check: connector exists.\\n    require(_connector != address(0), \\\"connector !exists\\\");\\n\\n    // Shortcut: is the index the last index in the domains/connectors arrays?\\n    // IFF not, we'll need to swap the target with the current last so we can pop().\\n    uint256 _lastIndex = domains.length - 1;\\n    if (_index < _lastIndex) {\\n      // If the target index for removal is not the last index, we copy over the domain at the last\\n      // index to overwrite the target's index so we can conveniently pop the last item.\\n      uint32 copiedDomain = domains[_lastIndex];\\n      domains[_index] = copiedDomain;\\n      connectors[_index] = connectors[_lastIndex];\\n      // Update the domain to index mapping for the copied domain.\\n      domainToIndexPlusOne[copiedDomain] = _index + 1; // NOTE: Naturally adding 1 here; see mapping name.\\n    }\\n\\n    // Pop the last item in the arrays.\\n    domains.pop();\\n    connectors.pop();\\n    // Erase reverse lookup.\\n    delete domainToIndexPlusOne[_domain];\\n\\n    // Update the hashes for the given arrays.\\n    updateHashes();\\n\\n    emit DomainRemoved(_domain);\\n\\n    return _connector;\\n  }\\n\\n  /**\\n   * @notice Calculate the new hashes for the domains and connectors arrays and update storage refs.\\n   * @dev Used for the Connector update functions `addConnector`, `removeConnector`.\\n   */\\n  function updateHashes() internal {\\n    uint32[] memory _domains = domains;\\n    address[] memory _connectors = connectors;\\n    domainsHash = keccak256(abi.encode(_domains));\\n    connectorsHash = keccak256(abi.encode(_connectors));\\n  }\\n}\\n\",\"keccak256\":\"0x2f0f477581793a2d846d3525d6def40067a946dd1a68d700eec55a97febbc2f6\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/MerkleLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MerkleLib\\n * @author Illusory Systems Inc.\\n * @notice An incremental merkle tree modeled on the eth2 deposit contract.\\n **/\\nlibrary MerkleLib {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleLib__insert_treeIsFull();\\n\\n  // ============ Constants =============\\n\\n  uint256 internal constant TREE_DEPTH = 32;\\n  uint256 internal constant MAX_LEAVES = 2**TREE_DEPTH - 1;\\n\\n  /**\\n   * @dev Z_i represent the hash values at different heights for a binary tree with leaf values equal to `0`.\\n   * (e.g. Z_1 is the keccak256 hash of (0x0, 0x0), Z_2 is the keccak256 hash of (Z_1, Z_1), etc...)\\n   * Z_0 is the bottom of the 33-layer tree, Z_32 is the top (i.e. root).\\n   * Used to shortcut calculation in root calculation methods below.\\n   */\\n  bytes32 internal constant Z_0 = hex\\\"0000000000000000000000000000000000000000000000000000000000000000\\\";\\n  bytes32 internal constant Z_1 = hex\\\"ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5\\\";\\n  bytes32 internal constant Z_2 = hex\\\"b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30\\\";\\n  bytes32 internal constant Z_3 = hex\\\"21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85\\\";\\n  bytes32 internal constant Z_4 = hex\\\"e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344\\\";\\n  bytes32 internal constant Z_5 = hex\\\"0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d\\\";\\n  bytes32 internal constant Z_6 = hex\\\"887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968\\\";\\n  bytes32 internal constant Z_7 = hex\\\"ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83\\\";\\n  bytes32 internal constant Z_8 = hex\\\"9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af\\\";\\n  bytes32 internal constant Z_9 = hex\\\"cefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0\\\";\\n  bytes32 internal constant Z_10 = hex\\\"f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5\\\";\\n  bytes32 internal constant Z_11 = hex\\\"f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892\\\";\\n  bytes32 internal constant Z_12 = hex\\\"3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c\\\";\\n  bytes32 internal constant Z_13 = hex\\\"c1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb\\\";\\n  bytes32 internal constant Z_14 = hex\\\"5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc\\\";\\n  bytes32 internal constant Z_15 = hex\\\"da7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2\\\";\\n  bytes32 internal constant Z_16 = hex\\\"2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f\\\";\\n  bytes32 internal constant Z_17 = hex\\\"e1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a\\\";\\n  bytes32 internal constant Z_18 = hex\\\"5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0\\\";\\n  bytes32 internal constant Z_19 = hex\\\"b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0\\\";\\n  bytes32 internal constant Z_20 = hex\\\"c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2\\\";\\n  bytes32 internal constant Z_21 = hex\\\"f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9\\\";\\n  bytes32 internal constant Z_22 = hex\\\"5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377\\\";\\n  bytes32 internal constant Z_23 = hex\\\"4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652\\\";\\n  bytes32 internal constant Z_24 = hex\\\"cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef\\\";\\n  bytes32 internal constant Z_25 = hex\\\"0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d\\\";\\n  bytes32 internal constant Z_26 = hex\\\"b8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0\\\";\\n  bytes32 internal constant Z_27 = hex\\\"838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e\\\";\\n  bytes32 internal constant Z_28 = hex\\\"662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e\\\";\\n  bytes32 internal constant Z_29 = hex\\\"388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322\\\";\\n  bytes32 internal constant Z_30 = hex\\\"93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735\\\";\\n  bytes32 internal constant Z_31 = hex\\\"8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9\\\";\\n  bytes32 internal constant Z_32 = hex\\\"27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757\\\";\\n\\n  // ============= Structs ==============\\n\\n  /**\\n   * @notice Struct representing incremental merkle tree. Contains current\\n   * branch and the number of inserted leaves in the tree.\\n   **/\\n  struct Tree {\\n    bytes32[TREE_DEPTH] branch;\\n    uint256 count;\\n  }\\n\\n  // ========= Write Methods =========\\n\\n  /**\\n   * @notice Inserts a given node (leaf) into merkle tree. Operates on an in-memory tree and\\n   * returns an updated version of that tree.\\n   * @dev Reverts if the tree is already full.\\n   * @param node Element to insert into tree.\\n   * @return Tree Updated tree.\\n   **/\\n  function insert(Tree memory tree, bytes32 node) internal pure returns (Tree memory) {\\n    // Update tree.count to increase the current count by 1 since we'll be including a new node.\\n    uint256 size = ++tree.count;\\n    if (size > MAX_LEAVES) revert MerkleLib__insert_treeIsFull();\\n\\n    // Loop starting at 0, ending when we've finished inserting the node (i.e. hashing it) into\\n    // the active branch. Each loop we cut size in half, hashing the inserted node up the active\\n    // branch along the way.\\n    for (uint256 i; i < TREE_DEPTH; ) {\\n      // Check if the current size is odd; if so, we set this index in the branch to be the node.\\n      if ((size & 1) == 1) {\\n        // If i > 0, then this node will be a hash of the original node with every layer up\\n        // until layer `i`.\\n        tree.branch[i] = node;\\n        return tree;\\n      }\\n      // If the size is not yet odd, we hash the current index in the tree branch with the node.\\n      node = keccak256(abi.encodePacked(tree.branch[i], node));\\n      size >>= 1; // Cut size in half (statement equivalent to: `size /= 2`).\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // As the loop should always end prematurely with the `return` statement, this code should\\n    // be unreachable. We revert here just to be safe.\\n    revert MerkleLib__insert_treeIsFull();\\n  }\\n\\n  // ========= Read Methods =========\\n\\n  /**\\n   * @notice Calculates and returns tree's current root.\\n   * @return _current bytes32 root.\\n   **/\\n  function root(Tree storage tree) internal view returns (bytes32 _current) {\\n    uint256 _index = tree.count;\\n\\n    if (_index == 0) {\\n      return Z_32;\\n    }\\n\\n    uint256 i;\\n    assembly {\\n      let TREE_SLOT := tree.slot\\n\\n      for {\\n\\n      } true {\\n\\n      } {\\n        for {\\n\\n        } true {\\n\\n        } {\\n          if and(_index, 1) {\\n            mstore(0, sload(TREE_SLOT))\\n            mstore(0x20, Z_0)\\n            _current := keccak256(0, 0x40)\\n            break\\n          }\\n\\n          if and(_index, shl(1, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 1)))\\n            mstore(0x20, Z_1)\\n            _current := keccak256(0, 0x40)\\n            i := 1\\n            break\\n          }\\n\\n          if and(_index, shl(2, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 2)))\\n            mstore(0x20, Z_2)\\n            _current := keccak256(0, 0x40)\\n            i := 2\\n            break\\n          }\\n\\n          if and(_index, shl(3, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 3)))\\n            mstore(0x20, Z_3)\\n            _current := keccak256(0, 0x40)\\n            i := 3\\n            break\\n          }\\n\\n          if and(_index, shl(4, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 4)))\\n            mstore(0x20, Z_4)\\n            _current := keccak256(0, 0x40)\\n            i := 4\\n            break\\n          }\\n\\n          if and(_index, shl(5, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 5)))\\n            mstore(0x20, Z_5)\\n            _current := keccak256(0, 0x40)\\n            i := 5\\n            break\\n          }\\n\\n          if and(_index, shl(6, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 6)))\\n            mstore(0x20, Z_6)\\n            _current := keccak256(0, 0x40)\\n            i := 6\\n            break\\n          }\\n\\n          if and(_index, shl(7, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 7)))\\n            mstore(0x20, Z_7)\\n            _current := keccak256(0, 0x40)\\n            i := 7\\n            break\\n          }\\n\\n          if and(_index, shl(8, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 8)))\\n            mstore(0x20, Z_8)\\n            _current := keccak256(0, 0x40)\\n            i := 8\\n            break\\n          }\\n\\n          if and(_index, shl(9, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 9)))\\n            mstore(0x20, Z_9)\\n            _current := keccak256(0, 0x40)\\n            i := 9\\n            break\\n          }\\n\\n          if and(_index, shl(10, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 10)))\\n            mstore(0x20, Z_10)\\n            _current := keccak256(0, 0x40)\\n            i := 10\\n            break\\n          }\\n\\n          if and(_index, shl(11, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 11)))\\n            mstore(0x20, Z_11)\\n            _current := keccak256(0, 0x40)\\n            i := 11\\n            break\\n          }\\n\\n          if and(_index, shl(12, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 12)))\\n            mstore(0x20, Z_12)\\n            _current := keccak256(0, 0x40)\\n            i := 12\\n            break\\n          }\\n\\n          if and(_index, shl(13, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 13)))\\n            mstore(0x20, Z_13)\\n            _current := keccak256(0, 0x40)\\n            i := 13\\n            break\\n          }\\n\\n          if and(_index, shl(14, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 14)))\\n            mstore(0x20, Z_14)\\n            _current := keccak256(0, 0x40)\\n            i := 14\\n            break\\n          }\\n\\n          if and(_index, shl(15, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 15)))\\n            mstore(0x20, Z_15)\\n            _current := keccak256(0, 0x40)\\n            i := 15\\n            break\\n          }\\n\\n          if and(_index, shl(16, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 16)))\\n            mstore(0x20, Z_16)\\n            _current := keccak256(0, 0x40)\\n            i := 16\\n            break\\n          }\\n\\n          if and(_index, shl(17, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 17)))\\n            mstore(0x20, Z_17)\\n            _current := keccak256(0, 0x40)\\n            i := 17\\n            break\\n          }\\n\\n          if and(_index, shl(18, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 18)))\\n            mstore(0x20, Z_18)\\n            _current := keccak256(0, 0x40)\\n            i := 18\\n            break\\n          }\\n\\n          if and(_index, shl(19, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 19)))\\n            mstore(0x20, Z_19)\\n            _current := keccak256(0, 0x40)\\n            i := 19\\n            break\\n          }\\n\\n          if and(_index, shl(20, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 20)))\\n            mstore(0x20, Z_20)\\n            _current := keccak256(0, 0x40)\\n            i := 20\\n            break\\n          }\\n\\n          if and(_index, shl(21, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 21)))\\n            mstore(0x20, Z_21)\\n            _current := keccak256(0, 0x40)\\n            i := 21\\n            break\\n          }\\n\\n          if and(_index, shl(22, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 22)))\\n            mstore(0x20, Z_22)\\n            _current := keccak256(0, 0x40)\\n            i := 22\\n            break\\n          }\\n\\n          if and(_index, shl(23, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 23)))\\n            mstore(0x20, Z_23)\\n            _current := keccak256(0, 0x40)\\n            i := 23\\n            break\\n          }\\n\\n          if and(_index, shl(24, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 24)))\\n            mstore(0x20, Z_24)\\n            _current := keccak256(0, 0x40)\\n            i := 24\\n            break\\n          }\\n\\n          if and(_index, shl(25, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 25)))\\n            mstore(0x20, Z_25)\\n            _current := keccak256(0, 0x40)\\n            i := 25\\n            break\\n          }\\n\\n          if and(_index, shl(26, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 26)))\\n            mstore(0x20, Z_26)\\n            _current := keccak256(0, 0x40)\\n            i := 26\\n            break\\n          }\\n\\n          if and(_index, shl(27, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 27)))\\n            mstore(0x20, Z_27)\\n            _current := keccak256(0, 0x40)\\n            i := 27\\n            break\\n          }\\n\\n          if and(_index, shl(28, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 28)))\\n            mstore(0x20, Z_28)\\n            _current := keccak256(0, 0x40)\\n            i := 28\\n            break\\n          }\\n\\n          if and(_index, shl(29, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 29)))\\n            mstore(0x20, Z_29)\\n            _current := keccak256(0, 0x40)\\n            i := 29\\n            break\\n          }\\n\\n          if and(_index, shl(30, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 30)))\\n            mstore(0x20, Z_30)\\n            _current := keccak256(0, 0x40)\\n            i := 30\\n            break\\n          }\\n\\n          if and(_index, shl(31, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 31)))\\n            mstore(0x20, Z_31)\\n            _current := keccak256(0, 0x40)\\n            i := 31\\n            break\\n          }\\n\\n          _current := Z_32\\n          i := 32\\n          break\\n        }\\n\\n        if gt(i, 30) {\\n          break\\n        }\\n\\n        {\\n          if lt(i, 1) {\\n            switch and(_index, shl(1, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_1)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 1)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 2) {\\n            switch and(_index, shl(2, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_2)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 2)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 3) {\\n            switch and(_index, shl(3, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_3)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 3)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 4) {\\n            switch and(_index, shl(4, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_4)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 4)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 5) {\\n            switch and(_index, shl(5, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_5)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 5)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 6) {\\n            switch and(_index, shl(6, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_6)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 6)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 7) {\\n            switch and(_index, shl(7, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_7)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 7)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 8) {\\n            switch and(_index, shl(8, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_8)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 8)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 9) {\\n            switch and(_index, shl(9, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_9)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 9)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 10) {\\n            switch and(_index, shl(10, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_10)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 10)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 11) {\\n            switch and(_index, shl(11, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_11)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 11)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 12) {\\n            switch and(_index, shl(12, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_12)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 12)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 13) {\\n            switch and(_index, shl(13, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_13)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 13)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 14) {\\n            switch and(_index, shl(14, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_14)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 14)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 15) {\\n            switch and(_index, shl(15, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_15)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 15)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 16) {\\n            switch and(_index, shl(16, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_16)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 16)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 17) {\\n            switch and(_index, shl(17, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_17)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 17)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 18) {\\n            switch and(_index, shl(18, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_18)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 18)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 19) {\\n            switch and(_index, shl(19, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_19)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 19)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 20) {\\n            switch and(_index, shl(20, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_20)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 20)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 21) {\\n            switch and(_index, shl(21, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_21)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 21)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 22) {\\n            switch and(_index, shl(22, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_22)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 22)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 23) {\\n            switch and(_index, shl(23, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_23)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 23)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 24) {\\n            switch and(_index, shl(24, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_24)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 24)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 25) {\\n            switch and(_index, shl(25, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_25)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 25)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 26) {\\n            switch and(_index, shl(26, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_26)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 26)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 27) {\\n            switch and(_index, shl(27, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_27)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 27)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 28) {\\n            switch and(_index, shl(28, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_28)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 28)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 29) {\\n            switch and(_index, shl(29, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_29)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 29)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 30) {\\n            switch and(_index, shl(30, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_30)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 30)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 31) {\\n            switch and(_index, shl(31, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_31)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 31)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n        }\\n\\n        break\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the merkle root for the given leaf `_item`,\\n   * a merkle branch, and the index of `_item` in the tree.\\n   * @param _item Merkle leaf\\n   * @param _branch Merkle proof\\n   * @param _index Index of `_item` in tree\\n   * @return _current Calculated merkle root\\n   **/\\n  function branchRoot(\\n    bytes32 _item,\\n    bytes32[TREE_DEPTH] memory _branch,\\n    uint256 _index\\n  ) internal pure returns (bytes32 _current) {\\n    assembly {\\n      _current := _item\\n      let BRANCH_DATA_OFFSET := _branch\\n      let f\\n\\n      f := shl(5, and(_index, 1))\\n      mstore(f, _current)\\n      mstore(sub(0x20, f), mload(BRANCH_DATA_OFFSET))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(1, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 1))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(2, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 2))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(3, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 3))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(4, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 4))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(5, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 5))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(6, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 6))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(7, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 7))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(8, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 8))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(9, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 9))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(10, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 10))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(11, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 11))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(12, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 12))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(13, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 13))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(14, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 14))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(15, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 15))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(16, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 16))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(17, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 17))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(18, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 18))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(19, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 19))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(20, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 20))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(21, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 21))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(22, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 22))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(23, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 23))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(24, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 24))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(25, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 25))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(26, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 26))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(27, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 27))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(28, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 28))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(29, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 29))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(30, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 30))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(31, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 31))))\\n      _current := keccak256(0, 0x40)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08c791dbeef6253813d74e2145183501fe7631c13d5ac9d768036f47b66b693e\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/Queue.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title QueueLib\\n * @notice Library containing queue struct and operations for queue used by RootManager and SpokeConnector\\n * for handling the verification period. Tracks both message data itself and the block that the message was\\n * committed to the queue.\\n **/\\nlibrary QueueLib {\\n  /**\\n   * @notice Queue struct\\n   * @dev Internally keeps track of the `first` and `last` elements through\\n   * indices and a mapping of indices to enqueued elements.\\n   **/\\n  struct Queue {\\n    uint128 first;\\n    uint128 last;\\n    // Message data (roots) that have been received.\\n    mapping(uint256 => bytes32) data;\\n    // The block that the message data was committed.\\n    mapping(uint256 => uint256) commitBlock;\\n    // A reverse mapping of all entries that have been \\\"removed\\\" by value; behaves like a blocklist.\\n    // NOTE: Removed values can still be pushed to the queue, but will be ignored/skipped when dequeuing.\\n    mapping(bytes32 => bool) removed;\\n  }\\n\\n  /**\\n   * @notice Initializes the queue\\n   * @dev Empty state denoted by queue.first > queue.last. Queue initialized with\\n   * queue.first = 1 and queue.last = 0.\\n   **/\\n  function initialize(Queue storage queue) internal {\\n    queue.first = 1;\\n    delete queue.last;\\n  }\\n\\n  /**\\n   * @notice Enqueues a single new element and records block number that the item was enqueued\\n   * (i.e. current block).\\n   * @param item New element to be enqueued.\\n   * @return last Index of newly enqueued element.\\n   **/\\n  function enqueue(Queue storage queue, bytes32 item) internal returns (uint128 last) {\\n    // Commit block is the block we are committing this item to the queue.\\n    uint256 commitBlock = block.number;\\n    // Increment `last` position.\\n    last = ++queue.last;\\n    // Add the item and record block number.\\n    queue.data[last] = item;\\n    queue.commitBlock[last] = commitBlock;\\n  }\\n\\n  /**\\n   * @notice Dequeues element at front of queue if it exists AND it's surpassed the given\\n   * verification period (i.e. has been sitting in the queue for enough blocks).\\n   * @param queue QueueStorage struct from contract.\\n   * @param delay The required delay that must have been surpassed in order to merit dequeuing\\n   * the element.\\n   * @param max The maximum number of elements we are allowed to dequeue in this call.\\n   * @return item Dequeued element IFF delay period has been surpassed; otherwise, empty bytes32.\\n   **/\\n  function dequeueVerified(\\n    Queue storage queue,\\n    uint256 delay,\\n    uint128 max\\n  ) internal returns (bytes32[] memory) {\\n    uint128 first = queue.first;\\n    uint128 last = queue.last;\\n\\n    // If queue is empty, short-circuit here.\\n    if (last < first) {\\n      return new bytes32[](0);\\n    }\\n\\n    // Input sanity checks.\\n    require(first != 0, \\\"queue !init'd\\\");\\n    require(max > 0, \\\"!acceptable max\\\");\\n\\n    {\\n      // If we would otherwise be searching beyond the maximum amount we are allowed to dequeue in this\\n      // call, reduce `last` to artificially shrink the available queue within the scope of this method.\\n      uint128 highestAllowed = first + max - 1;\\n      if (last > highestAllowed) {\\n        last = highestAllowed;\\n      }\\n    }\\n\\n    // Commit block must be below this block to be considered verified.\\n    // NOTE: It's assumed that block number is a higher value than delay (i.e. delay is reasonable).\\n    uint256 highestAcceptableCommitBlock = block.number - delay;\\n\\n    // To determine the last item index in the queue we want to return, iterate backwards until we\\n    // find a `commitBlock` that has surpassed the delay period.\\n    // TODO: The most efficient way to determine the split index here should be using a binary search.\\n    bool containsVerified;\\n    // NOTE: `first <= last` rephrased here to `!(first > last)` as it's a cheaper condition.\\n    while (!(first > last)) {\\n      uint256 commitBlock = queue.commitBlock[last];\\n      // NOTE: Same as `commitBlock <= highestAcceptableCommitBlock`.\\n      if (!(commitBlock > highestAcceptableCommitBlock)) {\\n        containsVerified = true;\\n        break;\\n      }\\n      unchecked {\\n        --last;\\n      }\\n    }\\n    // IFF no verified items were found, then we can return an empty array.\\n    if (!containsVerified) {\\n      return new bytes32[](0);\\n    }\\n\\n    bytes32[] memory items = new bytes32[](last + 1 - first);\\n    uint256 index; // Cursor for index in the batch of `items`.\\n    uint256 removedCount; // If any items have been removed, we filter them here.\\n    // NOTE: `first <= last` rephrased here to `!(first > last)` as it's a cheaper condition.\\n    while (!(first > last)) {\\n      bytes32 item = queue.data[first];\\n      // Check to see if the item has been removed before appending it to the array.\\n      if (!queue.removed[item]) {\\n        items[index] = item;\\n        unchecked {\\n          ++index;\\n        }\\n      } else {\\n        // The item was removed. We do NOT increment the index (we will re-use this position).\\n        unchecked {\\n          ++removedCount;\\n        }\\n      }\\n\\n      // Delete the item and the commitBlock.\\n      // NOTE: We do NOT delete the entry from `queue.removed`, as it's a reverse lookup and we want to\\n      // block that value permanently (e.g. if there's multiple of the same bad value in the queue).\\n      delete queue.data[first];\\n      delete queue.commitBlock[first];\\n\\n      unchecked {\\n        ++first;\\n      }\\n    }\\n\\n    // Update the value for `first` in our queue object since we've dequeued a number of elements.\\n    queue.first = first;\\n\\n    if (removedCount == 0) {\\n      return items;\\n    } else {\\n      // If some items were removed, there will be a number of trailing 0 values we need to truncate\\n      // from the array. Create a new array with all of the items up until these empty values.\\n      bytes32[] memory amendedItems = new bytes32[](index); // The last `index` is the new length.\\n      for (uint256 i; i < index; ) {\\n        amendedItems[i] = items[i];\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      return amendedItems;\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets a certain value to be ignored (skipped) when dequeuing.\\n   */\\n  function remove(Queue storage queue, bytes32 item) internal {\\n    require(!queue.removed[item], \\\"already removed\\\");\\n    queue.removed[item] = true;\\n  }\\n\\n  /**\\n   * @notice Check whether the queue is empty.\\n   * @param queue QueueStorage struct from contract.\\n   * @return bool True if queue is empty and false if otherwise.\\n   */\\n  function isEmpty(Queue storage queue) internal view returns (bool) {\\n    return queue.last < queue.first;\\n  }\\n\\n  /**\\n   * @notice Returns number of elements in queue.\\n   * @param queue QueueStorage struct from contract.\\n   */\\n  function length(Queue storage queue) internal view returns (uint256) {\\n    uint128 last = queue.last;\\n    uint128 first = queue.first;\\n    // Cannot underflow unless state is corrupted.\\n    return _length(last, first);\\n  }\\n\\n  /**\\n   * @notice Returns number of elements between `last` and `first` (used internally).\\n   * @param last The last element index.\\n   * @param first The first element index.\\n   */\\n  function _length(uint128 last, uint128 first) internal pure returns (uint256) {\\n    return uint256(last + 1 - first);\\n  }\\n}\\n\",\"keccak256\":\"0x47ae879e3ebe82490961c318aed0918a3a13d97584418cd0b43ceff0baa29bc7\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/ProposedOwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {Initializable} from \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"./ProposedOwnable.sol\\\";\\n\\nabstract contract ProposedOwnableUpgradeable is Initializable, ProposedOwnable {\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial\\n   */\\n  function __ProposedOwnable_init() internal onlyInitializing {\\n    __ProposedOwnable_init_unchained();\\n  }\\n\\n  function __ProposedOwnable_init_unchained() internal onlyInitializing {\\n    _setOwner(msg.sender);\\n  }\\n\\n  /**\\n   * @dev This empty reserved space is put in place to allow future versions to add new\\n   * variables without shifting down storage in the inheritance chain.\\n   * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n   */\\n  uint256[47] private __GAP;\\n}\\n\",\"keccak256\":\"0x2b064b03a25915e93749905ef3aae516ffaac86b8ba9f126b614425b623bf477\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/RootManager.sol:RootManager","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/RootManager.sol:RootManager","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/RootManager.sol:RootManager","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":10590,"contract":"contracts/messaging/RootManager.sol:RootManager","label":"_paused","offset":0,"slot":"3","type":"t_bool"},{"astId":38824,"contract":"contracts/messaging/RootManager.sol:RootManager","label":"watcherManager","offset":1,"slot":"3","type":"t_contract(WatcherManager)39005"},{"astId":48424,"contract":"contracts/messaging/RootManager.sol:RootManager","label":"domains","offset":0,"slot":"4","type":"t_array(t_uint32)dyn_storage"},{"astId":48427,"contract":"contracts/messaging/RootManager.sol:RootManager","label":"domainsHash","offset":0,"slot":"5","type":"t_bytes32"},{"astId":48431,"contract":"contracts/messaging/RootManager.sol:RootManager","label":"connectors","offset":0,"slot":"6","type":"t_array(t_address)dyn_storage"},{"astId":48434,"contract":"contracts/messaging/RootManager.sol:RootManager","label":"connectorsHash","offset":0,"slot":"7","type":"t_bytes32"},{"astId":48439,"contract":"contracts/messaging/RootManager.sol:RootManager","label":"domainToIndexPlusOne","offset":0,"slot":"8","type":"t_mapping(t_uint32,t_uint256)"},{"astId":38420,"contract":"contracts/messaging/RootManager.sol:RootManager","label":"delayBlocks","offset":0,"slot":"9","type":"t_uint256"},{"astId":38424,"contract":"contracts/messaging/RootManager.sol:RootManager","label":"pendingInboundRoots","offset":0,"slot":"10","type":"t_struct(Queue)49241_storage"},{"astId":38427,"contract":"contracts/messaging/RootManager.sol:RootManager","label":"lastPropagatedRoot","offset":0,"slot":"14","type":"t_bytes32"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_uint32)dyn_storage":{"base":"t_uint32","encoding":"dynamic_array","label":"uint32[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(WatcherManager)39005":{"encoding":"inplace","label":"contract WatcherManager","numberOfBytes":"20"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_uint256,t_bytes32)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => bytes32)","numberOfBytes":"32","value":"t_bytes32"},"t_mapping(t_uint256,t_uint256)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_uint256)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_struct(Queue)49241_storage":{"encoding":"inplace","label":"struct QueueLib.Queue","members":[{"astId":49226,"contract":"contracts/messaging/RootManager.sol:RootManager","label":"first","offset":0,"slot":"0","type":"t_uint128"},{"astId":49228,"contract":"contracts/messaging/RootManager.sol:RootManager","label":"last","offset":16,"slot":"0","type":"t_uint128"},{"astId":49232,"contract":"contracts/messaging/RootManager.sol:RootManager","label":"data","offset":0,"slot":"1","type":"t_mapping(t_uint256,t_bytes32)"},{"astId":49236,"contract":"contracts/messaging/RootManager.sol:RootManager","label":"commitBlock","offset":0,"slot":"2","type":"t_mapping(t_uint256,t_uint256)"},{"astId":49240,"contract":"contracts/messaging/RootManager.sol:RootManager","label":"removed","offset":0,"slot":"3","type":"t_mapping(t_bytes32,t_bool)"}],"numberOfBytes":"128"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"}}},"userdoc":{"events":{"WatcherManagerChanged(address)":{"notice":"Emitted when the manager address changes"}},"kind":"user","methods":{"DEQUEUE_MAX()":{"notice":"Maximum number of values to dequeue from the queue in one sitting (one call of `propagate` or `dequeue`). Used to cap gas requirements."},"MAX_DOMAINS()":{"notice":"The absolute maximum number of domains that we should support. Domain and connector arrays are naturally unbounded, but the gas cost of reading these arrays in `updateHashes()` is bounded by the block's gas limit. If we want to set a hard ceiling for gas costs for the `updateHashes()` method at approx. 500K gas, with an average SLOAD cost of 900 gas per domain (1 uint32, 1 address):       500K / 900 = ~555 domains Realistically, the cap on the number of domains will likely exist in other places, but we cap it here as a last resort."},"MERKLE()":{"notice":"MerkleTreeManager contract instance. Will hold the active tree of aggregated inbound roots. The root of this tree will be distributed crosschain to all spoke domains."},"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"addConnector(uint32,address)":{"notice":"Add a new supported domain and corresponding hub connector to the system. This new domain will receive the propagated aggregate root."},"aggregate(uint32,bytes32)":{"notice":"Accept an inbound root coming from a given domain's hub connector, enqueuing this incoming root into the current queue as it awaits the verification period."},"connectors(uint256)":{"notice":"Tracks the addresses of the hub connector contracts corresponding to subscribed spoke domains. The index of any given connector in this array should match the index of that connector's target spoke domain in the `domains` array above."},"connectorsHash()":{"notice":"A \"quick reference\" hash used in the `propagate` method below to validate that the provided array of connectors matches the one we have in storage."},"constructor":{"notice":"Creates a new RootManager instance."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"delayBlocks()":{"notice":"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary."},"dequeue()":{"notice":"Dequeue verified inbound roots and insert them into the aggregator tree."},"discardRoot(bytes32)":{"notice":"Removes (effectively blocklists) a given (fraudulent) root from the queue of pending inbound roots."},"domains(uint256)":{"notice":"Domains array tracks currently subscribed domains to this hub aggregator. We should distribute the aggregate root to all of these domains in the `propagate` method."},"domainsHash()":{"notice":"A \"quick reference\" hash used in the `propagate` method below to validate that the provided array of domains matches the one we have in storage."},"getConnectorForDomain(uint32)":{"notice":"Gets the corresponding hub connector address for a given spoke domain."},"getDomainIndex(uint32)":{"notice":"Gets the index of a given domain in the domains and connectors arrays."},"isDomainSupported(uint32)":{"notice":"Convenience shortcut for supported domains. Used to sanity check adding new domains."},"lastPropagatedRoot()":{"notice":"The last aggregate root we propagated to spoke chains. Used to prevent sending redundant aggregate roots in `propagate`."},"owner()":{"notice":"Returns the address of the current owner."},"pause()":{"notice":"Watchers can pause contracts if fraud is detected"},"pendingInboundRoots()":{"notice":"Queue used for management of verification for inbound roots from spoke chains. Once the verification period elapses, the inbound messages can be aggregated into the merkle tree for propagation to spoke chains."},"propagate(address[],uint256[],bytes[])":{"notice":"This is called by relayers to take the current aggregate tree root and propagate it to all spoke domains (via their respective hub connectors)."},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"removeConnector(uint32)":{"notice":"Remove support for a connector and respective domain. That connector/domain will no longer receive updates for the latest aggregate root."},"renounceOwnership()":{"notice":"Remove ability to renounce ownership"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"setDelayBlocks(uint256)":{"notice":"Set the `delayBlocks`, the period in blocks over which an incoming message is verified."},"setWatcherManager(address)":{"notice":"Owner can enroll a watcher (abilities are defined by inheriting contracts)"},"unpause()":{"notice":"Owner can unpause contracts if fraud is detected by watchers"},"validateConnectors(address[])":{"notice":"Validate given connectors array is correct (i.e. it mirrors what is currently saved in storage)."},"validateDomains(uint32[],address[])":{"notice":"Validate given domains and connectors arrays are correct (i.e. they mirror what is currently saved in storage)."},"watcherManager()":{"notice":"The `WatcherManager` contract governs the watcher allowlist."}},"notice":"This contract exists at cluster hubs, and aggregates all transfer roots from messaging spokes into a single merkle tree. Regularly broadcasts the root of the aggregator tree back out to all the messaging spokes.","version":1}}},"contracts/messaging/WatcherClient.sol":{"WatcherClient":{"abi":[{"inputs":[{"internalType":"address","name":"_watcherManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"watcherManager","type":"address"}],"name":"WatcherManagerChanged","type":"event"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_watcherManager","type":"address"}],"name":"setWatcherManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"watcherManager","outputs":[{"internalType":"contract WatcherManager","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"events":{"WatcherManagerChanged(address)":{"params":{"watcherManager":"The updated manager"}}},"kind":"dev","methods":{"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"renounceOwnership()":{"details":"Renounce ownership should be impossible as long as only the owner is able to unpause the contracts. You can still propose `address(0)`, but it will never be accepted."}},"stateVariables":{"watcherManager":{"details":"Multiple clients can share a watcher set using the same manager"}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_10599":{"entryPoint":null,"id":10599,"parameterSlots":0,"returnSlots":0},"@_38838":{"entryPoint":null,"id":38838,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":89,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:306:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:209:181","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:181"},"nodeType":"YulFunctionCall","src":"143:12:181"},"nodeType":"YulExpressionStatement","src":"143:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:181"},"nodeType":"YulFunctionCall","src":"112:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:181"},"nodeType":"YulFunctionCall","src":"108:32:181"},"nodeType":"YulIf","src":"105:52:181"},{"nodeType":"YulVariableDeclaration","src":"166:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"185:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"179:5:181"},"nodeType":"YulFunctionCall","src":"179:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"170:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"258:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"267:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"270:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"260:6:181"},"nodeType":"YulFunctionCall","src":"260:12:181"},"nodeType":"YulExpressionStatement","src":"260:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"217:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"228:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"243:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"239:3:181"},"nodeType":"YulFunctionCall","src":"239:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"252:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:181"},"nodeType":"YulFunctionCall","src":"235:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"224:3:181"},"nodeType":"YulFunctionCall","src":"224:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"214:2:181"},"nodeType":"YulFunctionCall","src":"214:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"207:6:181"},"nodeType":"YulFunctionCall","src":"207:50:181"},"nodeType":"YulIf","src":"204:70:181"},{"nodeType":"YulAssignment","src":"283:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"293:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"283:6:181"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:181","type":""}],"src":"14:290:181"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b506040516107ea3803806107ea83398101604081905261002f91610059565b600380546001600160a01b03909216610100026001600160a81b0319909216919091179055610089565b60006020828403121561006b57600080fd5b81516001600160a01b038116811461008257600080fd5b9392505050565b610752806100986000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80638da5cb5b1161008c578063c5b350df11610066578063c5b350df14610175578063d1851c921461017d578063d232c2201461018e578063d2a3cc71146101a057600080fd5b80638da5cb5b14610125578063a792c29b1461014a578063b1f8100d1461016257600080fd5b80633cf52ffb146100d45780633f4ba83a146100eb5780635c975abb146100f55780636a42b8f81461010c578063715018a6146101155780638456cb591461011d575b600080fd5b6002545b6040519081526020015b60405180910390f35b6100f36101b3565b005b60035460ff165b60405190151581526020016100e2565b62093a806100d8565b6100f36101f0565b6100f361021b565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100e2565b6003546101329061010090046001600160a01b031681565b6100f36101703660046106a3565b6102d7565b6100f3610378565b6001546001600160a01b0316610132565b6000546001600160a01b0316156100fc565b6100f36101ae3660046106a3565b6103e8565b6000546001600160a01b031633146101de576040516311a8a1bb60e31b815260040160405180910390fd5b6101e66104d2565b6101ee61051b565b565b6000546001600160a01b031633146101ee576040516311a8a1bb60e31b815260040160405180910390fd5b6003546040516384785ecd60e01b81523360048201526101009091046001600160a01b0316906384785ecd90602401602060405180830381865afa158015610267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028b91906106d3565b6102c75760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b60448201526064015b60405180910390fd5b6102cf61056d565b6101ee6105b3565b6000546001600160a01b03163314610302576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610320575060025415155b1561033e576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361036c57604051634a2fb73f60e11b815260040160405180910390fd5b610375816105f0565b50565b6001546001600160a01b031633146103a3576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426103b591906106f5565b116103d3576040516324e0285f60e21b815260040160405180910390fd5b6001546101ee906001600160a01b031661063e565b6000546001600160a01b03163314610413576040516311a8a1bb60e31b815260040160405180910390fd5b6003546001600160a01b036101009091048116908216036104765760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e6167657200000000000000000060448201526064016102be565b60038054610100600160a81b0319166101006001600160a01b038416908102919091179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c9060200160405180910390a150565b60035460ff166101ee5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016102be565b6105236104d2565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60035460ff16156101ee5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016102be565b6105bb61056d565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586105503390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b6000602082840312156106b557600080fd5b81356001600160a01b03811681146106cc57600080fd5b9392505050565b6000602082840312156106e557600080fd5b815180151581146106cc57600080fd5b8181038181111561071657634e487b7160e01b600052601160045260246000fd5b9291505056fea26469706673582212205dad7e55590d5c9f6bd14327180ecc8a887f81e769ffce4c1aa5a1ecabd21bce64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x7EA CODESIZE SUB DUP1 PUSH2 0x7EA DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x59 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x89 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x752 DUP1 PUSH2 0x98 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xC5B350DF GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x175 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x17D JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x18E JUMPI DUP1 PUSH4 0xD2A3CC71 EQ PUSH2 0x1A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x125 JUMPI DUP1 PUSH4 0xA792C29B EQ PUSH2 0x14A JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x162 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0xEB JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0xF5 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x10C JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x11D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF3 PUSH2 0x1B3 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE2 JUMP JUMPDEST PUSH3 0x93A80 PUSH2 0xD8 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x1F0 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x21B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x132 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x170 CALLDATASIZE PUSH1 0x4 PUSH2 0x6A3 JUMP JUMPDEST PUSH2 0x2D7 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x378 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x132 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0xFC JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x1AE CALLDATASIZE PUSH1 0x4 PUSH2 0x6A3 JUMP JUMPDEST PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1DE JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1E6 PUSH2 0x4D2 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x51B JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1EE JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x100 SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x267 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x28B SWAP2 SWAP1 PUSH2 0x6D3 JUMP JUMPDEST PUSH2 0x2C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2CF PUSH2 0x56D JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x5B3 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x302 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x320 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x33E JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x36C JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x375 DUP2 PUSH2 0x5F0 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3A3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x3B5 SWAP2 SWAP1 PUSH2 0x6F5 JUMP JUMPDEST GT PUSH2 0x3D3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x1EE SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x63E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x413 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x100 SWAP1 SWAP2 DIV DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0x476 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616C72656164792077617463686572206D616E61676572000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2BE JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND PUSH2 0x100 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC16D059E43D7F8E29CCB4E001A2F249D3C59E274925D6A6BC3912943441D9F6C SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0x1EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2BE JUMP JUMPDEST PUSH2 0x523 PUSH2 0x4D2 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2BE JUMP JUMPDEST PUSH2 0x5BB PUSH2 0x56D JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x550 CALLER SWAP1 JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x6CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x6CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x716 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5D 0xAD PUSH31 0x55590D5C9F6BD14327180ECC8A887F81E769FFCE4C1AA5A1ECABD21BCE6473 PUSH16 0x6C634300081100330000000000000000 ","sourceMap":"446:1948:114:-:0;;;995:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;996:7:51;:15;;-1:-1:-1;;;;;1056:48:114;;::::1;996:15:51::0;1056:48:114::1;-1:-1:-1::0;;;;;;1056:48:114;;;;;;::::1;::::0;;446:1948;;14:290:181;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:181;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:181:o;:::-;446:1948:114;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_msgSender_11496":{"entryPoint":null,"id":11496,"parameterSlots":0,"returnSlots":1},"@_pause_10663":{"entryPoint":1459,"id":10663,"parameterSlots":0,"returnSlots":0},"@_requireNotPaused_10636":{"entryPoint":1389,"id":10636,"parameterSlots":0,"returnSlots":0},"@_requirePaused_10647":{"entryPoint":1234,"id":10647,"parameterSlots":0,"returnSlots":0},"@_setOwner_49908":{"entryPoint":1598,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":1520,"id":49927,"parameterSlots":1,"returnSlots":0},"@_unpause_10679":{"entryPoint":1307,"id":10679,"parameterSlots":0,"returnSlots":0},"@acceptProposedOwner_49887":{"entryPoint":888,"id":49887,"parameterSlots":0,"returnSlots":0},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@pause_38913":{"entryPoint":539,"id":38913,"parameterSlots":0,"returnSlots":0},"@paused_10624":{"entryPoint":null,"id":10624,"parameterSlots":0,"returnSlots":1},"@proposeNewOwner_49841":{"entryPoint":727,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_38901":{"entryPoint":496,"id":38901,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@setWatcherManager_38881":{"entryPoint":1000,"id":38881,"parameterSlots":1,"returnSlots":0},"@unpause_38893":{"entryPoint":435,"id":38893,"parameterSlots":0,"returnSlots":0},"@watcherManager_38824":{"entryPoint":null,"id":38824,"parameterSlots":0,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":1699,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":1747,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":1781,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3010:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:76:181","statements":[{"nodeType":"YulAssignment","src":"125:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:181"},"nodeType":"YulFunctionCall","src":"133:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"178:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:181"},"nodeType":"YulFunctionCall","src":"160:25:181"},"nodeType":"YulExpressionStatement","src":"160:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:181","type":""}],"src":"14:177:181"},{"body":{"nodeType":"YulBlock","src":"291:92:181","statements":[{"nodeType":"YulAssignment","src":"301:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"313:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"324:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"309:3:181"},"nodeType":"YulFunctionCall","src":"309:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"301:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"343:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"368:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"361:6:181"},"nodeType":"YulFunctionCall","src":"361:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"354:6:181"},"nodeType":"YulFunctionCall","src":"354:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"336:6:181"},"nodeType":"YulFunctionCall","src":"336:41:181"},"nodeType":"YulExpressionStatement","src":"336:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"260:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"271:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"282:4:181","type":""}],"src":"196:187:181"},{"body":{"nodeType":"YulBlock","src":"489:102:181","statements":[{"nodeType":"YulAssignment","src":"499:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"511:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"522:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"507:3:181"},"nodeType":"YulFunctionCall","src":"507:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"499:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"541:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"556:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"572:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"577:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"568:3:181"},"nodeType":"YulFunctionCall","src":"568:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"581:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"564:3:181"},"nodeType":"YulFunctionCall","src":"564:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"552:3:181"},"nodeType":"YulFunctionCall","src":"552:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"534:6:181"},"nodeType":"YulFunctionCall","src":"534:51:181"},"nodeType":"YulExpressionStatement","src":"534:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"458:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"469:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"480:4:181","type":""}],"src":"388:203:181"},{"body":{"nodeType":"YulBlock","src":"721:102:181","statements":[{"nodeType":"YulAssignment","src":"731:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"743:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"754:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"739:3:181"},"nodeType":"YulFunctionCall","src":"739:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"731:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"773:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"788:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"804:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"809:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"800:3:181"},"nodeType":"YulFunctionCall","src":"800:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"813:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"796:3:181"},"nodeType":"YulFunctionCall","src":"796:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"784:3:181"},"nodeType":"YulFunctionCall","src":"784:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"766:6:181"},"nodeType":"YulFunctionCall","src":"766:51:181"},"nodeType":"YulExpressionStatement","src":"766:51:181"}]},"name":"abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"690:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"701:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"712:4:181","type":""}],"src":"596:227:181"},{"body":{"nodeType":"YulBlock","src":"898:216:181","statements":[{"body":{"nodeType":"YulBlock","src":"944:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"953:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"956:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"946:6:181"},"nodeType":"YulFunctionCall","src":"946:12:181"},"nodeType":"YulExpressionStatement","src":"946:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"919:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"928:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"915:3:181"},"nodeType":"YulFunctionCall","src":"915:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"940:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"911:3:181"},"nodeType":"YulFunctionCall","src":"911:32:181"},"nodeType":"YulIf","src":"908:52:181"},{"nodeType":"YulVariableDeclaration","src":"969:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"995:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"982:12:181"},"nodeType":"YulFunctionCall","src":"982:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"973:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1068:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1077:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1080:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1070:6:181"},"nodeType":"YulFunctionCall","src":"1070:12:181"},"nodeType":"YulExpressionStatement","src":"1070:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1027:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1038:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1053:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1058:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1049:3:181"},"nodeType":"YulFunctionCall","src":"1049:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1062:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1045:3:181"},"nodeType":"YulFunctionCall","src":"1045:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1034:3:181"},"nodeType":"YulFunctionCall","src":"1034:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1024:2:181"},"nodeType":"YulFunctionCall","src":"1024:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1017:6:181"},"nodeType":"YulFunctionCall","src":"1017:50:181"},"nodeType":"YulIf","src":"1014:70:181"},{"nodeType":"YulAssignment","src":"1093:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1103:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1093:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"864:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"875:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"887:6:181","type":""}],"src":"828:286:181"},{"body":{"nodeType":"YulBlock","src":"1197:199:181","statements":[{"body":{"nodeType":"YulBlock","src":"1243:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1252:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1255:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1245:6:181"},"nodeType":"YulFunctionCall","src":"1245:12:181"},"nodeType":"YulExpressionStatement","src":"1245:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1218:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1227:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1214:3:181"},"nodeType":"YulFunctionCall","src":"1214:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1239:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1210:3:181"},"nodeType":"YulFunctionCall","src":"1210:32:181"},"nodeType":"YulIf","src":"1207:52:181"},{"nodeType":"YulVariableDeclaration","src":"1268:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1287:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1281:5:181"},"nodeType":"YulFunctionCall","src":"1281:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1272:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1350:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1359:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1362:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1352:6:181"},"nodeType":"YulFunctionCall","src":"1352:12:181"},"nodeType":"YulExpressionStatement","src":"1352:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1319:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1340:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1333:6:181"},"nodeType":"YulFunctionCall","src":"1333:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1326:6:181"},"nodeType":"YulFunctionCall","src":"1326:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1316:2:181"},"nodeType":"YulFunctionCall","src":"1316:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1309:6:181"},"nodeType":"YulFunctionCall","src":"1309:40:181"},"nodeType":"YulIf","src":"1306:60:181"},{"nodeType":"YulAssignment","src":"1375:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1385:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1375:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1163:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1174:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1186:6:181","type":""}],"src":"1119:277:181"},{"body":{"nodeType":"YulBlock","src":"1575:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1592:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1603:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1585:6:181"},"nodeType":"YulFunctionCall","src":"1585:21:181"},"nodeType":"YulExpressionStatement","src":"1585:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1626:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1637:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1622:3:181"},"nodeType":"YulFunctionCall","src":"1622:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1642:1:181","type":"","value":"8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1615:6:181"},"nodeType":"YulFunctionCall","src":"1615:29:181"},"nodeType":"YulExpressionStatement","src":"1615:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1664:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1675:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1660:3:181"},"nodeType":"YulFunctionCall","src":"1660:18:181"},{"hexValue":"2177617463686572","kind":"string","nodeType":"YulLiteral","src":"1680:10:181","type":"","value":"!watcher"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1653:6:181"},"nodeType":"YulFunctionCall","src":"1653:38:181"},"nodeType":"YulExpressionStatement","src":"1653:38:181"},{"nodeType":"YulAssignment","src":"1700:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1712:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1723:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1708:3:181"},"nodeType":"YulFunctionCall","src":"1708:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1700:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1552:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1566:4:181","type":""}],"src":"1401:331:181"},{"body":{"nodeType":"YulBlock","src":"1786:176:181","statements":[{"nodeType":"YulAssignment","src":"1796:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1808:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"1811:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1804:3:181"},"nodeType":"YulFunctionCall","src":"1804:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"1796:4:181"}]},{"body":{"nodeType":"YulBlock","src":"1845:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1866:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1873:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1878:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1869:3:181"},"nodeType":"YulFunctionCall","src":"1869:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1859:6:181"},"nodeType":"YulFunctionCall","src":"1859:31:181"},"nodeType":"YulExpressionStatement","src":"1859:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1910:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1913:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1903:6:181"},"nodeType":"YulFunctionCall","src":"1903:15:181"},"nodeType":"YulExpressionStatement","src":"1903:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1938:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1941:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1931:6:181"},"nodeType":"YulFunctionCall","src":"1931:15:181"},"nodeType":"YulExpressionStatement","src":"1931:15:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"1828:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"1834:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1825:2:181"},"nodeType":"YulFunctionCall","src":"1825:11:181"},"nodeType":"YulIf","src":"1822:134:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"1768:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"1771:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"1777:4:181","type":""}],"src":"1737:225:181"},{"body":{"nodeType":"YulBlock","src":"2141:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2158:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2169:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2151:6:181"},"nodeType":"YulFunctionCall","src":"2151:21:181"},"nodeType":"YulExpressionStatement","src":"2151:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2192:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2203:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2188:3:181"},"nodeType":"YulFunctionCall","src":"2188:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2208:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2181:6:181"},"nodeType":"YulFunctionCall","src":"2181:30:181"},"nodeType":"YulExpressionStatement","src":"2181:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2231:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2242:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2227:3:181"},"nodeType":"YulFunctionCall","src":"2227:18:181"},{"hexValue":"616c72656164792077617463686572206d616e61676572","kind":"string","nodeType":"YulLiteral","src":"2247:25:181","type":"","value":"already watcher manager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2220:6:181"},"nodeType":"YulFunctionCall","src":"2220:53:181"},"nodeType":"YulExpressionStatement","src":"2220:53:181"},{"nodeType":"YulAssignment","src":"2282:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2294:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2305:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2290:3:181"},"nodeType":"YulFunctionCall","src":"2290:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2282:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2118:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2132:4:181","type":""}],"src":"1967:347:181"},{"body":{"nodeType":"YulBlock","src":"2493:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2510:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2521:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2503:6:181"},"nodeType":"YulFunctionCall","src":"2503:21:181"},"nodeType":"YulExpressionStatement","src":"2503:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2544:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2555:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2540:3:181"},"nodeType":"YulFunctionCall","src":"2540:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2560:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2533:6:181"},"nodeType":"YulFunctionCall","src":"2533:30:181"},"nodeType":"YulExpressionStatement","src":"2533:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2583:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2594:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2579:3:181"},"nodeType":"YulFunctionCall","src":"2579:18:181"},{"hexValue":"5061757361626c653a206e6f7420706175736564","kind":"string","nodeType":"YulLiteral","src":"2599:22:181","type":"","value":"Pausable: not paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2572:6:181"},"nodeType":"YulFunctionCall","src":"2572:50:181"},"nodeType":"YulExpressionStatement","src":"2572:50:181"},{"nodeType":"YulAssignment","src":"2631:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2643:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2654:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2639:3:181"},"nodeType":"YulFunctionCall","src":"2639:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2631:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2470:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2484:4:181","type":""}],"src":"2319:344:181"},{"body":{"nodeType":"YulBlock","src":"2842:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2859:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2870:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2852:6:181"},"nodeType":"YulFunctionCall","src":"2852:21:181"},"nodeType":"YulExpressionStatement","src":"2852:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2893:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2904:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2889:3:181"},"nodeType":"YulFunctionCall","src":"2889:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2909:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2882:6:181"},"nodeType":"YulFunctionCall","src":"2882:30:181"},"nodeType":"YulExpressionStatement","src":"2882:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2932:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2943:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2928:3:181"},"nodeType":"YulFunctionCall","src":"2928:18:181"},{"hexValue":"5061757361626c653a20706175736564","kind":"string","nodeType":"YulLiteral","src":"2948:18:181","type":"","value":"Pausable: paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2921:6:181"},"nodeType":"YulFunctionCall","src":"2921:46:181"},"nodeType":"YulExpressionStatement","src":"2921:46:181"},{"nodeType":"YulAssignment","src":"2976:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2988:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2999:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2984:3:181"},"nodeType":"YulFunctionCall","src":"2984:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2976:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2819:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2833:4:181","type":""}],"src":"2668:340:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 8)\n        mstore(add(headStart, 64), \"!watcher\")\n        tail := add(headStart, 96)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"already watcher manager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"Pausable: not paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Pausable: paused\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100cf5760003560e01c80638da5cb5b1161008c578063c5b350df11610066578063c5b350df14610175578063d1851c921461017d578063d232c2201461018e578063d2a3cc71146101a057600080fd5b80638da5cb5b14610125578063a792c29b1461014a578063b1f8100d1461016257600080fd5b80633cf52ffb146100d45780633f4ba83a146100eb5780635c975abb146100f55780636a42b8f81461010c578063715018a6146101155780638456cb591461011d575b600080fd5b6002545b6040519081526020015b60405180910390f35b6100f36101b3565b005b60035460ff165b60405190151581526020016100e2565b62093a806100d8565b6100f36101f0565b6100f361021b565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100e2565b6003546101329061010090046001600160a01b031681565b6100f36101703660046106a3565b6102d7565b6100f3610378565b6001546001600160a01b0316610132565b6000546001600160a01b0316156100fc565b6100f36101ae3660046106a3565b6103e8565b6000546001600160a01b031633146101de576040516311a8a1bb60e31b815260040160405180910390fd5b6101e66104d2565b6101ee61051b565b565b6000546001600160a01b031633146101ee576040516311a8a1bb60e31b815260040160405180910390fd5b6003546040516384785ecd60e01b81523360048201526101009091046001600160a01b0316906384785ecd90602401602060405180830381865afa158015610267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061028b91906106d3565b6102c75760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b60448201526064015b60405180910390fd5b6102cf61056d565b6101ee6105b3565b6000546001600160a01b03163314610302576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610320575060025415155b1561033e576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361036c57604051634a2fb73f60e11b815260040160405180910390fd5b610375816105f0565b50565b6001546001600160a01b031633146103a3576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426103b591906106f5565b116103d3576040516324e0285f60e21b815260040160405180910390fd5b6001546101ee906001600160a01b031661063e565b6000546001600160a01b03163314610413576040516311a8a1bb60e31b815260040160405180910390fd5b6003546001600160a01b036101009091048116908216036104765760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e6167657200000000000000000060448201526064016102be565b60038054610100600160a81b0319166101006001600160a01b038416908102919091179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c9060200160405180910390a150565b60035460ff166101ee5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016102be565b6105236104d2565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60035460ff16156101ee5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016102be565b6105bb61056d565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586105503390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b6000602082840312156106b557600080fd5b81356001600160a01b03811681146106cc57600080fd5b9392505050565b6000602082840312156106e557600080fd5b815180151581146106cc57600080fd5b8181038181111561071657634e487b7160e01b600052601160045260246000fd5b9291505056fea26469706673582212205dad7e55590d5c9f6bd14327180ecc8a887f81e769ffce4c1aa5a1ecabd21bce64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xC5B350DF GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x175 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x17D JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x18E JUMPI DUP1 PUSH4 0xD2A3CC71 EQ PUSH2 0x1A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x125 JUMPI DUP1 PUSH4 0xA792C29B EQ PUSH2 0x14A JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x162 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0xEB JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0xF5 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x10C JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x11D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF3 PUSH2 0x1B3 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE2 JUMP JUMPDEST PUSH3 0x93A80 PUSH2 0xD8 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x1F0 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x21B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x132 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x170 CALLDATASIZE PUSH1 0x4 PUSH2 0x6A3 JUMP JUMPDEST PUSH2 0x2D7 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x378 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x132 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0xFC JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x1AE CALLDATASIZE PUSH1 0x4 PUSH2 0x6A3 JUMP JUMPDEST PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1DE JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1E6 PUSH2 0x4D2 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x51B JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1EE JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x100 SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x267 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x28B SWAP2 SWAP1 PUSH2 0x6D3 JUMP JUMPDEST PUSH2 0x2C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2CF PUSH2 0x56D JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x5B3 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x302 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x320 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x33E JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x36C JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x375 DUP2 PUSH2 0x5F0 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3A3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x3B5 SWAP2 SWAP1 PUSH2 0x6F5 JUMP JUMPDEST GT PUSH2 0x3D3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x1EE SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x63E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x413 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x100 SWAP1 SWAP2 DIV DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0x476 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616C72656164792077617463686572206D616E61676572000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2BE JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND PUSH2 0x100 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC16D059E43D7F8E29CCB4E001A2F249D3C59E274925D6A6BC3912943441D9F6C SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0x1EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2BE JUMP JUMPDEST PUSH2 0x523 PUSH2 0x4D2 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2BE JUMP JUMPDEST PUSH2 0x5BB PUSH2 0x56D JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x550 CALLER SWAP1 JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x6CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x6CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x716 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5D 0xAD PUSH31 0x55590D5C9F6BD14327180ECC8A887F81E769FFCE4C1AA5A1ECABD21BCE6473 PUSH16 0x6C634300081100330000000000000000 ","sourceMap":"446:1948:114:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1949:112:168;2029:27;;1949:112;;;160:25:181;;;148:2;133:18;1949:112:168;;;;;;;;1810:70:114;;;:::i;:::-;;1615:84:51;1685:7;;;;1615:84;;;361:14:181;;354:22;336:41;;324:2;309:18;1615:84:51;196:187:181;2151:79:168;1530:6;2151:79;;2133:65:114;;;:::i;2321:71::-;;;:::i;1641:79:168:-;1687:7;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;;-1:-1:-1;;;;;552:32:181;;;534:51;;522:2;507:18;1641:79:168;388:203:181;911:36:114;;;;;;;;-1:-1:-1;;;;;911:36:114;;;3321:420:168;;;;;;:::i;:::-;;:::i;4404:539::-;;;:::i;1792:85::-;1863:9;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;3097:4;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;1457:263:114;;;;;;:::i;:::-;;:::i;1810:70::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1486:16:51::1;:14;:16::i;:::-;1865:10:114::2;:8;:10::i;:::-;1810:70::o:0;2133:65::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2321:71:114;1251:14;;:36;;-1:-1:-1;;;1251:36:114;;1276:10;1251:36;;;534:51:181;1251:14:114;;;;-1:-1:-1;;;;;1251:14:114;;:24;;507:18:181;;1251:36:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1243:57;;;;-1:-1:-1;;;1243:57:114;;1603:2:181;1243:57:114;;;1585:21:181;1642:1;1622:18;;;1615:29;-1:-1:-1;;;1660:18:181;;;1653:38;1708:18;;1243:57:114;;;;;;;;;1239:19:51::1;:17;:19::i;:::-;2379:8:114::2;:6;:8::i;3321:420:168:-:0;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;:::-;3321:420:::0;:::o;4404:539::-;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;1457:263:114:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1569:14:114::1;::::0;-1:-1:-1;;;;;1569:14:114::1;::::0;;::::1;::::0;::::1;1542:42:::0;;::::1;::::0;1534:78:::1;;;::::0;-1:-1:-1;;;1534:78:114;;2169:2:181;1534:78:114::1;::::0;::::1;2151:21:181::0;2208:2;2188:18;;;2181:30;2247:25;2227:18;;;2220:53;2290:18;;1534:78:114::1;1967:347:181::0;1534:78:114::1;1618:14;:48:::0;;-1:-1:-1;;;;;;1618:48:114::1;;-1:-1:-1::0;;;;;1618:48:114;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;1677:38:::1;::::0;534:51:181;;;1677:38:114::1;::::0;522:2:181;507:18;1677:38:114::1;;;;;;;1457:263:::0;:::o;1945:106:51:-;1685:7;;;;2003:41;;;;-1:-1:-1;;;2003:41:51;;2521:2:181;2003:41:51;;;2503:21:181;2560:2;2540:18;;;2533:30;-1:-1:-1;;;2579:18:181;;;2572:50;2639:18;;2003:41:51;2319:344:181;2433:117:51;1486:16;:14;:16::i;:::-;2491:7:::1;:15:::0;;-1:-1:-1;;2491:15:51::1;::::0;;2521:22:::1;719:10:58::0;2530:12:51::1;2521:22;::::0;-1:-1:-1;;;;;552:32:181;;;534:51;;522:2;507:18;2521:22:51::1;;;;;;;2433:117::o:0;1767:106::-;1685:7;;;;1836:9;1828:38;;;;-1:-1:-1;;;1828:38:51;;2870:2:181;1828:38:51;;;2852:21:181;2909:2;2889:18;;;2882:30;-1:-1:-1;;;2928:18:181;;;2921:46;2984:18;;1828:38:51;2668:340:181;2186:115:51;1239:19;:17;:19::i;:::-;2245:7:::1;:14:::0;;-1:-1:-1;;2245:14:51::1;2255:4;2245:14;::::0;;2274:20:::1;2281:12;719:10:58::0;;640:96;5170:183:168;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;4981:185::-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;828:286:181:-;887:6;940:2;928:9;919:7;915:23;911:32;908:52;;;956:1;953;946:12;908:52;982:23;;-1:-1:-1;;;;;1034:31:181;;1024:42;;1014:70;;1080:1;1077;1070:12;1014:70;1103:5;828:286;-1:-1:-1;;;828:286:181:o;1119:277::-;1186:6;1239:2;1227:9;1218:7;1214:23;1210:32;1207:52;;;1255:1;1252;1245:12;1207:52;1287:9;1281:16;1340:5;1333:13;1326:21;1319:5;1316:32;1306:60;;1362:1;1359;1352:12;1737:225;1804:9;;;1825:11;;;1822:134;;;1878:10;1873:3;1869:20;1866:1;1859:31;1913:4;1910:1;1903:15;1941:4;1938:1;1931:15;1822:134;1737:225;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"374800","executionCost":"infinite","totalCost":"infinite"},"external":{"acceptProposedOwner()":"63792","delay()":"248","owner()":"2343","pause()":"infinite","paused()":"2338","proposeNewOwner(address)":"56450","proposed()":"2375","proposedTimestamp()":"2271","renounceOwnership()":"2414","renounced()":"2385","setWatcherManager(address)":"29998","unpause()":"infinite","watcherManager()":"2393"}},"methodIdentifiers":{"acceptProposedOwner()":"c5b350df","delay()":"6a42b8f8","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","renounceOwnership()":"715018a6","renounced()":"d232c220","setWatcherManager(address)":"d2a3cc71","unpause()":"3f4ba83a","watcherManager()":"a792c29b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"watcherManager\",\"type\":\"address\"}],\"name\":\"WatcherManagerChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"}],\"name\":\"setWatcherManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"watcherManager\",\"outputs\":[{\"internalType\":\"contract WatcherManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"WatcherManagerChanged(address)\":{\"params\":{\"watcherManager\":\"The updated manager\"}}},\"kind\":\"dev\",\"methods\":{\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"renounceOwnership()\":{\"details\":\"Renounce ownership should be impossible as long as only the owner is able to unpause the contracts. You can still propose `address(0)`, but it will never be accepted.\"}},\"stateVariables\":{\"watcherManager\":{\"details\":\"Multiple clients can share a watcher set using the same manager\"}},\"version\":1},\"userdoc\":{\"events\":{\"WatcherManagerChanged(address)\":{\"notice\":\"Emitted when the manager address changes\"}},\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"pause()\":{\"notice\":\"Watchers can pause contracts if fraud is detected\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Remove ability to renounce ownership\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"setWatcherManager(address)\":{\"notice\":\"Owner can enroll a watcher (abilities are defined by inheriting contracts)\"},\"unpause()\":{\"notice\":\"Owner can unpause contracts if fraud is detected by watchers\"},\"watcherManager()\":{\"notice\":\"The `WatcherManager` contract governs the watcher allowlist.\"}},\"notice\":\"This contract abstracts the functionality of the watcher manager. Contracts can inherit this contract to be able to use the watcher manager's shared watcher set.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/WatcherClient.sol\":\"WatcherClient\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n    /**\\n     * @dev Emitted when the pause is triggered by `account`.\\n     */\\n    event Paused(address account);\\n\\n    /**\\n     * @dev Emitted when the pause is lifted by `account`.\\n     */\\n    event Unpaused(address account);\\n\\n    bool private _paused;\\n\\n    /**\\n     * @dev Initializes the contract in unpaused state.\\n     */\\n    constructor() {\\n        _paused = false;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    modifier whenNotPaused() {\\n        _requireNotPaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    modifier whenPaused() {\\n        _requirePaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the contract is paused, and false otherwise.\\n     */\\n    function paused() public view virtual returns (bool) {\\n        return _paused;\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is paused.\\n     */\\n    function _requireNotPaused() internal view virtual {\\n        require(!paused(), \\\"Pausable: paused\\\");\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is not paused.\\n     */\\n    function _requirePaused() internal view virtual {\\n        require(paused(), \\\"Pausable: not paused\\\");\\n    }\\n\\n    /**\\n     * @dev Triggers stopped state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    function _pause() internal virtual whenNotPaused {\\n        _paused = true;\\n        emit Paused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Returns to normal state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    function _unpause() internal virtual whenPaused {\\n        _paused = false;\\n        emit Unpaused(_msgSender());\\n    }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"contracts/messaging/WatcherClient.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Pausable} from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\nimport {WatcherManager} from \\\"./WatcherManager.sol\\\";\\n\\n/**\\n * @notice This contract abstracts the functionality of the watcher manager.\\n * Contracts can inherit this contract to be able to use the watcher manager's shared watcher set.\\n */\\n\\ncontract WatcherClient is ProposedOwnable, Pausable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted when the manager address changes\\n   * @param watcherManager The updated manager\\n   */\\n  event WatcherManagerChanged(address watcherManager);\\n\\n  // ============ Properties ============\\n  /**\\n   * @notice The `WatcherManager` contract governs the watcher allowlist.\\n   * @dev Multiple clients can share a watcher set using the same manager\\n   */\\n  WatcherManager public watcherManager;\\n\\n  // ============ Constructor ============\\n  constructor(address _watcherManager) ProposedOwnable() {\\n    watcherManager = WatcherManager(_watcherManager);\\n  }\\n\\n  // ============ Modifiers ============\\n  /**\\n   * @notice Enforces the sender is the watcher\\n   */\\n  modifier onlyWatcher() {\\n    require(watcherManager.isWatcher(msg.sender), \\\"!watcher\\\");\\n    _;\\n  }\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @notice Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function setWatcherManager(address _watcherManager) external onlyOwner {\\n    require(_watcherManager != address(watcherManager), \\\"already watcher manager\\\");\\n    watcherManager = WatcherManager(_watcherManager);\\n    emit WatcherManagerChanged(_watcherManager);\\n  }\\n\\n  /**\\n   * @notice Owner can unpause contracts if fraud is detected by watchers\\n   */\\n  function unpause() external onlyOwner whenPaused {\\n    _unpause();\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as only the owner\\n   * is able to unpause the contracts. You can still propose `address(0)`,\\n   * but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ============ Watcher fns ============\\n\\n  /**\\n   * @notice Watchers can pause contracts if fraud is detected\\n   */\\n  function pause() external onlyWatcher whenNotPaused {\\n    _pause();\\n  }\\n}\\n\",\"keccak256\":\"0x97b0da2c0317359ef2980d1f3c5fcdd7df2bdacbedf216dcbda521b96124444a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can\\n * inherit to make use of the same watcher set.\\n */\\n\\ncontract WatcherManager is ProposedOwnable {\\n  // ============ Events ============\\n  event WatcherAdded(address watcher);\\n\\n  event WatcherRemoved(address watcher);\\n\\n  // ============ Properties ============\\n  mapping(address => bool) public isWatcher;\\n\\n  // ============ Constructor ============\\n  constructor() ProposedOwnable() {\\n    _setOwner(msg.sender);\\n  }\\n\\n  // ============ Modifiers ============\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @dev Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function addWatcher(address _watcher) external onlyOwner {\\n    require(!isWatcher[_watcher], \\\"already watcher\\\");\\n    isWatcher[_watcher] = true;\\n    emit WatcherAdded(_watcher);\\n  }\\n\\n  /**\\n   * @dev Owner can unenroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function removeWatcher(address _watcher) external onlyOwner {\\n    require(isWatcher[_watcher], \\\"!exist\\\");\\n    delete isWatcher[_watcher];\\n    emit WatcherRemoved(_watcher);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as the watcher griefing\\n   * vector exists. You can still propose `address(0)`, but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n}\\n\",\"keccak256\":\"0x94d9db4cd19453c9047164f697011163a42a6e12f9b2e1d7fbcfb35a7d021318\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/WatcherClient.sol:WatcherClient","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/WatcherClient.sol:WatcherClient","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/WatcherClient.sol:WatcherClient","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":10590,"contract":"contracts/messaging/WatcherClient.sol:WatcherClient","label":"_paused","offset":0,"slot":"3","type":"t_bool"},{"astId":38824,"contract":"contracts/messaging/WatcherClient.sol:WatcherClient","label":"watcherManager","offset":1,"slot":"3","type":"t_contract(WatcherManager)39005"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(WatcherManager)39005":{"encoding":"inplace","label":"contract WatcherManager","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"WatcherManagerChanged(address)":{"notice":"Emitted when the manager address changes"}},"kind":"user","methods":{"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"owner()":{"notice":"Returns the address of the current owner."},"pause()":{"notice":"Watchers can pause contracts if fraud is detected"},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Remove ability to renounce ownership"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"setWatcherManager(address)":{"notice":"Owner can enroll a watcher (abilities are defined by inheriting contracts)"},"unpause()":{"notice":"Owner can unpause contracts if fraud is detected by watchers"},"watcherManager()":{"notice":"The `WatcherManager` contract governs the watcher allowlist."}},"notice":"This contract abstracts the functionality of the watcher manager. Contracts can inherit this contract to be able to use the watcher manager's shared watcher set.","version":1}}},"contracts/messaging/WatcherManager.sol":{"WatcherManager":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"watcher","type":"address"}],"name":"WatcherAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"watcher","type":"address"}],"name":"WatcherRemoved","type":"event"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_watcher","type":"address"}],"name":"addWatcher","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWatcher","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_watcher","type":"address"}],"name":"removeWatcher","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"addWatcher(address)":{"details":"Owner can enroll a watcher (abilities are defined by inheriting contracts)"},"removeWatcher(address)":{"details":"Owner can unenroll a watcher (abilities are defined by inheriting contracts)"},"renounceOwnership()":{"details":"Renounce ownership should be impossible as long as the watcher griefing vector exists. You can still propose `address(0)`, but it will never be accepted."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_38944":{"entryPoint":null,"id":38944,"parameterSlots":0,"returnSlots":0},"@_setOwner_49908":{"entryPoint":31,"id":49908,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5061001a3361001f565b610084565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b6105c5806100936000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80638da5cb5b116100715780638da5cb5b1461011e578063b1f8100d14610143578063c5b350df14610156578063d1851c921461015e578063d232c2201461016f578063ec2b13451461018157600080fd5b806324bdff8c146100ae5780633cf52ffb146100c35780636a42b8f8146100da578063715018a6146100e357806384785ecd146100eb575b600080fd5b6100c16100bc366004610538565b610194565b005b6002545b6040519081526020015b60405180910390f35b62093a806100c7565b6100c161027a565b61010e6100f9366004610538565b60036020526000908152604090205460ff1681565b60405190151581526020016100d1565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100d1565b6100c1610151366004610538565b6102a7565b6100c1610348565b6001546001600160a01b031661012b565b6000546001600160a01b03161561010e565b6100c161018f366004610538565b6103b8565b6000546001600160a01b031633146101bf576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b03811660009081526003602052604090205460ff161561021f5760405162461bcd60e51b815260206004820152600f60248201526e30b63932b0b23c903bb0ba31b432b960891b60448201526064015b60405180910390fd5b6001600160a01b038116600081815260036020908152604091829020805460ff1916600117905590519182527fbd71030f437353231b6e5bedade573b1e0da5cb6e8bdde37c33c1fea986c29c791015b60405180910390a150565b6000546001600160a01b031633146102a5576040516311a8a1bb60e31b815260040160405180910390fd5b565b6000546001600160a01b031633146102d2576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b0382811691161480156102f0575060025415155b1561030e576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361033c57604051634a2fb73f60e11b815260040160405180910390fd5b61034581610485565b50565b6001546001600160a01b03163314610373576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426103859190610568565b116103a3576040516324e0285f60e21b815260040160405180910390fd5b6001546102a5906001600160a01b03166104d3565b6000546001600160a01b031633146103e3576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b03811660009081526003602052604090205460ff166104345760405162461bcd60e51b815260206004820152600660248201526508595e1a5cdd60d21b6044820152606401610216565b6001600160a01b038116600081815260036020908152604091829020805460ff1916905590519182527ffa8eab6357bec870e7048c2413cbaa813236bb29ebac113541a76fef429e94dc910161026f565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60006020828403121561054a57600080fd5b81356001600160a01b038116811461056157600080fd5b9392505050565b8181038181111561058957634e487b7160e01b600052601160045260246000fd5b9291505056fea2646970667358221220d6fd2c863795124ce39d311825b230d35f5b9268f0c7da0b58adaa553832bcd064736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A CALLER PUSH2 0x1F JUMP JUMPDEST PUSH2 0x84 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x5C5 DUP1 PUSH2 0x93 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x11E JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x143 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x15E JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x16F JUMPI DUP1 PUSH4 0xEC2B1345 EQ PUSH2 0x181 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x24BDFF8C EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0xC3 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0xDA JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xE3 JUMPI DUP1 PUSH4 0x84785ECD EQ PUSH2 0xEB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0xBC CALLDATASIZE PUSH1 0x4 PUSH2 0x538 JUMP JUMPDEST PUSH2 0x194 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH3 0x93A80 PUSH2 0xC7 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x27A JUMP JUMPDEST PUSH2 0x10E PUSH2 0xF9 CALLDATASIZE PUSH1 0x4 PUSH2 0x538 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD1 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x151 CALLDATASIZE PUSH1 0x4 PUSH2 0x538 JUMP JUMPDEST PUSH2 0x2A7 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x348 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x12B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x10E JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x18F CALLDATASIZE PUSH1 0x4 PUSH2 0x538 JUMP JUMPDEST PUSH2 0x3B8 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1BF JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x21F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x30B63932B0B23C903BB0BA31B432B9 PUSH1 0x89 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xBD71030F437353231B6E5BEDADE573B1E0DA5CB6E8BDDE37C33C1FEA986C29C7 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2A5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x2F0 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x30E JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x33C JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x345 DUP2 PUSH2 0x485 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x373 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x385 SWAP2 SWAP1 PUSH2 0x568 JUMP JUMPDEST GT PUSH2 0x3A3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x2A5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4D3 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3E3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x434 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x8595E1A5CDD PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x216 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xFA8EAB6357BEC870E7048C2413CBAA813236BB29EBAC113541A76FEF429E94DC SWAP2 ADD PUSH2 0x26F JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x54A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x561 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x589 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD6 REVERT 0x2C DUP7 CALLDATACOPY SWAP6 SLT 0x4C 0xE3 SWAP14 BALANCE XOR 0x25 0xB2 ADDRESS 0xD3 0x5F JUMPDEST SWAP3 PUSH9 0xF0C7DA0B58ADAA5538 ORIGIN 0xBC 0xD0 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"309:1308:115:-:0;;;607:64;;;;;;;;;-1:-1:-1;645:21:115::1;655:10;645:9;:21::i;:::-;309:1308:::0;;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;309:1308:115:-;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_setOwner_49908":{"entryPoint":1235,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":1157,"id":49927,"parameterSlots":1,"returnSlots":0},"@acceptProposedOwner_49887":{"entryPoint":840,"id":49887,"parameterSlots":0,"returnSlots":0},"@addWatcher_38971":{"entryPoint":404,"id":38971,"parameterSlots":1,"returnSlots":0},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@isWatcher_38933":{"entryPoint":null,"id":38933,"parameterSlots":0,"returnSlots":0},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@proposeNewOwner_49841":{"entryPoint":679,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@removeWatcher_38996":{"entryPoint":952,"id":38996,"parameterSlots":1,"returnSlots":0},"@renounceOwnership_39004":{"entryPoint":634,"id":39004,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":1336,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_141db340a5766d2c35f2bd7e6d00399af66800794e0975c892a58724345fc018__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b907d927c8ab6270bf39fcacf585b097f2d3028ddd9d1d0922580e4793de1b71__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":1384,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1792:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"84:216:181","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:181"},"nodeType":"YulFunctionCall","src":"132:12:181"},"nodeType":"YulExpressionStatement","src":"132:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"105:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"114:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"101:3:181"},"nodeType":"YulFunctionCall","src":"101:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"126:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"97:3:181"},"nodeType":"YulFunctionCall","src":"97:32:181"},"nodeType":"YulIf","src":"94:52:181"},{"nodeType":"YulVariableDeclaration","src":"155:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"181:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"168:12:181"},"nodeType":"YulFunctionCall","src":"168:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"159:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"254:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"263:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"266:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"256:6:181"},"nodeType":"YulFunctionCall","src":"256:12:181"},"nodeType":"YulExpressionStatement","src":"256:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"213:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"224:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"239:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"244:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"235:3:181"},"nodeType":"YulFunctionCall","src":"235:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"231:3:181"},"nodeType":"YulFunctionCall","src":"231:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"220:3:181"},"nodeType":"YulFunctionCall","src":"220:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"210:2:181"},"nodeType":"YulFunctionCall","src":"210:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"203:6:181"},"nodeType":"YulFunctionCall","src":"203:50:181"},"nodeType":"YulIf","src":"200:70:181"},{"nodeType":"YulAssignment","src":"279:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"289:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"279:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"50:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"61:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"73:6:181","type":""}],"src":"14:286:181"},{"body":{"nodeType":"YulBlock","src":"406:76:181","statements":[{"nodeType":"YulAssignment","src":"416:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"428:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"439:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"424:3:181"},"nodeType":"YulFunctionCall","src":"424:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"416:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"458:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"469:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"451:6:181"},"nodeType":"YulFunctionCall","src":"451:25:181"},"nodeType":"YulExpressionStatement","src":"451:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"375:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"386:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"397:4:181","type":""}],"src":"305:177:181"},{"body":{"nodeType":"YulBlock","src":"582:92:181","statements":[{"nodeType":"YulAssignment","src":"592:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"604:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"615:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"600:3:181"},"nodeType":"YulFunctionCall","src":"600:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"592:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"634:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"659:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"652:6:181"},"nodeType":"YulFunctionCall","src":"652:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"645:6:181"},"nodeType":"YulFunctionCall","src":"645:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"627:6:181"},"nodeType":"YulFunctionCall","src":"627:41:181"},"nodeType":"YulExpressionStatement","src":"627:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"551:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"562:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"573:4:181","type":""}],"src":"487:187:181"},{"body":{"nodeType":"YulBlock","src":"780:102:181","statements":[{"nodeType":"YulAssignment","src":"790:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"802:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"813:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"798:3:181"},"nodeType":"YulFunctionCall","src":"798:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"790:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"832:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"847:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"863:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"868:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"859:3:181"},"nodeType":"YulFunctionCall","src":"859:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"872:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"855:3:181"},"nodeType":"YulFunctionCall","src":"855:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"843:3:181"},"nodeType":"YulFunctionCall","src":"843:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"825:6:181"},"nodeType":"YulFunctionCall","src":"825:51:181"},"nodeType":"YulExpressionStatement","src":"825:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"749:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"760:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"771:4:181","type":""}],"src":"679:203:181"},{"body":{"nodeType":"YulBlock","src":"1061:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1078:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1089:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1071:6:181"},"nodeType":"YulFunctionCall","src":"1071:21:181"},"nodeType":"YulExpressionStatement","src":"1071:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1112:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1123:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1108:3:181"},"nodeType":"YulFunctionCall","src":"1108:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1128:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1101:6:181"},"nodeType":"YulFunctionCall","src":"1101:30:181"},"nodeType":"YulExpressionStatement","src":"1101:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1151:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1162:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1147:3:181"},"nodeType":"YulFunctionCall","src":"1147:18:181"},{"hexValue":"616c72656164792077617463686572","kind":"string","nodeType":"YulLiteral","src":"1167:17:181","type":"","value":"already watcher"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1140:6:181"},"nodeType":"YulFunctionCall","src":"1140:45:181"},"nodeType":"YulExpressionStatement","src":"1140:45:181"},{"nodeType":"YulAssignment","src":"1194:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1206:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1217:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1202:3:181"},"nodeType":"YulFunctionCall","src":"1202:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1194:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b907d927c8ab6270bf39fcacf585b097f2d3028ddd9d1d0922580e4793de1b71__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1038:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1052:4:181","type":""}],"src":"887:339:181"},{"body":{"nodeType":"YulBlock","src":"1280:176:181","statements":[{"nodeType":"YulAssignment","src":"1290:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1302:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"1305:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1298:3:181"},"nodeType":"YulFunctionCall","src":"1298:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"1290:4:181"}]},{"body":{"nodeType":"YulBlock","src":"1339:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1360:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1367:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1372:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1363:3:181"},"nodeType":"YulFunctionCall","src":"1363:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1353:6:181"},"nodeType":"YulFunctionCall","src":"1353:31:181"},"nodeType":"YulExpressionStatement","src":"1353:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1404:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1407:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1397:6:181"},"nodeType":"YulFunctionCall","src":"1397:15:181"},"nodeType":"YulExpressionStatement","src":"1397:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1432:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1435:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1425:6:181"},"nodeType":"YulFunctionCall","src":"1425:15:181"},"nodeType":"YulExpressionStatement","src":"1425:15:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"1322:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"1328:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1319:2:181"},"nodeType":"YulFunctionCall","src":"1319:11:181"},"nodeType":"YulIf","src":"1316:134:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"1262:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"1265:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"1271:4:181","type":""}],"src":"1231:225:181"},{"body":{"nodeType":"YulBlock","src":"1635:155:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1652:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1663:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1645:6:181"},"nodeType":"YulFunctionCall","src":"1645:21:181"},"nodeType":"YulExpressionStatement","src":"1645:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1686:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1697:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1682:3:181"},"nodeType":"YulFunctionCall","src":"1682:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1702:1:181","type":"","value":"6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1675:6:181"},"nodeType":"YulFunctionCall","src":"1675:29:181"},"nodeType":"YulExpressionStatement","src":"1675:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1724:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1735:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1720:3:181"},"nodeType":"YulFunctionCall","src":"1720:18:181"},{"hexValue":"216578697374","kind":"string","nodeType":"YulLiteral","src":"1740:8:181","type":"","value":"!exist"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1713:6:181"},"nodeType":"YulFunctionCall","src":"1713:36:181"},"nodeType":"YulExpressionStatement","src":"1713:36:181"},{"nodeType":"YulAssignment","src":"1758:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1770:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1781:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1766:3:181"},"nodeType":"YulFunctionCall","src":"1766:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1758:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_141db340a5766d2c35f2bd7e6d00399af66800794e0975c892a58724345fc018__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1612:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1626:4:181","type":""}],"src":"1461:329:181"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_b907d927c8ab6270bf39fcacf585b097f2d3028ddd9d1d0922580e4793de1b71__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"already watcher\")\n        tail := add(headStart, 96)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_141db340a5766d2c35f2bd7e6d00399af66800794e0975c892a58724345fc018__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 6)\n        mstore(add(headStart, 64), \"!exist\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100a95760003560e01c80638da5cb5b116100715780638da5cb5b1461011e578063b1f8100d14610143578063c5b350df14610156578063d1851c921461015e578063d232c2201461016f578063ec2b13451461018157600080fd5b806324bdff8c146100ae5780633cf52ffb146100c35780636a42b8f8146100da578063715018a6146100e357806384785ecd146100eb575b600080fd5b6100c16100bc366004610538565b610194565b005b6002545b6040519081526020015b60405180910390f35b62093a806100c7565b6100c161027a565b61010e6100f9366004610538565b60036020526000908152604090205460ff1681565b60405190151581526020016100d1565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100d1565b6100c1610151366004610538565b6102a7565b6100c1610348565b6001546001600160a01b031661012b565b6000546001600160a01b03161561010e565b6100c161018f366004610538565b6103b8565b6000546001600160a01b031633146101bf576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b03811660009081526003602052604090205460ff161561021f5760405162461bcd60e51b815260206004820152600f60248201526e30b63932b0b23c903bb0ba31b432b960891b60448201526064015b60405180910390fd5b6001600160a01b038116600081815260036020908152604091829020805460ff1916600117905590519182527fbd71030f437353231b6e5bedade573b1e0da5cb6e8bdde37c33c1fea986c29c791015b60405180910390a150565b6000546001600160a01b031633146102a5576040516311a8a1bb60e31b815260040160405180910390fd5b565b6000546001600160a01b031633146102d2576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b0382811691161480156102f0575060025415155b1561030e576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361033c57604051634a2fb73f60e11b815260040160405180910390fd5b61034581610485565b50565b6001546001600160a01b03163314610373576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426103859190610568565b116103a3576040516324e0285f60e21b815260040160405180910390fd5b6001546102a5906001600160a01b03166104d3565b6000546001600160a01b031633146103e3576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b03811660009081526003602052604090205460ff166104345760405162461bcd60e51b815260206004820152600660248201526508595e1a5cdd60d21b6044820152606401610216565b6001600160a01b038116600081815260036020908152604091829020805460ff1916905590519182527ffa8eab6357bec870e7048c2413cbaa813236bb29ebac113541a76fef429e94dc910161026f565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60006020828403121561054a57600080fd5b81356001600160a01b038116811461056157600080fd5b9392505050565b8181038181111561058957634e487b7160e01b600052601160045260246000fd5b9291505056fea2646970667358221220d6fd2c863795124ce39d311825b230d35f5b9268f0c7da0b58adaa553832bcd064736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x11E JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x143 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x15E JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x16F JUMPI DUP1 PUSH4 0xEC2B1345 EQ PUSH2 0x181 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x24BDFF8C EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0xC3 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0xDA JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xE3 JUMPI DUP1 PUSH4 0x84785ECD EQ PUSH2 0xEB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0xBC CALLDATASIZE PUSH1 0x4 PUSH2 0x538 JUMP JUMPDEST PUSH2 0x194 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH3 0x93A80 PUSH2 0xC7 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x27A JUMP JUMPDEST PUSH2 0x10E PUSH2 0xF9 CALLDATASIZE PUSH1 0x4 PUSH2 0x538 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD1 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x151 CALLDATASIZE PUSH1 0x4 PUSH2 0x538 JUMP JUMPDEST PUSH2 0x2A7 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x348 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x12B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x10E JUMP JUMPDEST PUSH2 0xC1 PUSH2 0x18F CALLDATASIZE PUSH1 0x4 PUSH2 0x538 JUMP JUMPDEST PUSH2 0x3B8 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1BF JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x21F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x30B63932B0B23C903BB0BA31B432B9 PUSH1 0x89 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xBD71030F437353231B6E5BEDADE573B1E0DA5CB6E8BDDE37C33C1FEA986C29C7 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2A5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x2F0 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x30E JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x33C JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x345 DUP2 PUSH2 0x485 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x373 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x385 SWAP2 SWAP1 PUSH2 0x568 JUMP JUMPDEST GT PUSH2 0x3A3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x2A5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4D3 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3E3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x434 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x8595E1A5CDD PUSH1 0xD2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x216 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xFA8EAB6357BEC870E7048C2413CBAA813236BB29EBAC113541A76FEF429E94DC SWAP2 ADD PUSH2 0x26F JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x54A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x561 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x589 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD6 REVERT 0x2C DUP7 CALLDATACOPY SWAP6 SLT 0x4C 0xE3 SWAP14 BALANCE XOR 0x25 0xB2 ADDRESS 0xD3 0x5F JUMPDEST SWAP3 PUSH9 0xF0C7DA0B58ADAA5538 ORIGIN 0xBC 0xD0 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"309:1308:115:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;855:181;;;;;;:::i;:::-;;:::i;:::-;;1949:112:168;2029:27;;1949:112;;;451:25:181;;;439:2;424:18;1949:112:168;;;;;;;;2151:79;1530:6;2151:79;;1550:65:115;;;:::i;518:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;652:14:181;;645:22;627:41;;615:2;600:18;518:41:115;487:187:181;1641:79:168;1687:7;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;;-1:-1:-1;;;;;843:32:181;;;825:51;;813:2;798:18;1641:79:168;679:203:181;3321:420:168;;;;;;:::i;:::-;;:::i;4404:539::-;;;:::i;1792:85::-;1863:9;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;3097:4;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;1139:176:115;;;;;;:::i;:::-;;:::i;855:181::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;-1:-1:-1;;;;;927:19:115;::::1;;::::0;;;:9:::1;:19;::::0;;;;;::::1;;926:20;918:48;;;::::0;-1:-1:-1;;;918:48:115;;1089:2:181;918:48:115::1;::::0;::::1;1071:21:181::0;1128:2;1108:18;;;1101:30;-1:-1:-1;;;1147:18:181;;;1140:45;1202:18;;918:48:115::1;;;;;;;;;-1:-1:-1::0;;;;;972:19:115;::::1;;::::0;;;:9:::1;:19;::::0;;;;;;;;:26;;-1:-1:-1;;972:26:115::1;994:4;972:26;::::0;;1009:22;;825:51:181;;;1009:22:115::1;::::0;798:18:181;1009:22:115::1;;;;;;;;855:181:::0;:::o;1550:65::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1550:65:115:o;3321:420:168:-;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;:::-;3321:420:::0;:::o;4404:539::-;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;1139:176:115:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;-1:-1:-1;;;;;1213:19:115;::::1;;::::0;;;:9:::1;:19;::::0;;;;;::::1;;1205:38;;;::::0;-1:-1:-1;;;1205:38:115;;1663:2:181;1205:38:115::1;::::0;::::1;1645:21:181::0;1702:1;1682:18;;;1675:29;-1:-1:-1;;;1720:18:181;;;1713:36;1766:18;;1205:38:115::1;1461:329:181::0;1205:38:115::1;-1:-1:-1::0;;;;;1256:19:115;::::1;;::::0;;;:9:::1;:19;::::0;;;;;;;;1249:26;;-1:-1:-1;;1249:26:115::1;::::0;;1286:24;;825:51:181;;;1286:24:115::1;::::0;798:18:181;1286:24:115::1;679:203:181::0;5170:183:168;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;4981:185::-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;14:286:181:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;168:23;;-1:-1:-1;;;;;220:31:181;;210:42;;200:70;;266:1;263;256:12;200:70;289:5;14:286;-1:-1:-1;;;14:286:181:o;1231:225::-;1298:9;;;1319:11;;;1316:134;;;1372:10;1367:3;1363:20;1360:1;1353:31;1407:4;1404:1;1397:15;1435:4;1432:1;1425:15;1316:134;1231:225;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"295400","executionCost":"57513","totalCost":"352913"},"external":{"acceptProposedOwner()":"63814","addWatcher(address)":"30001","delay()":"226","isWatcher(address)":"2585","owner()":"2320","proposeNewOwner(address)":"56405","proposed()":"2397","proposedTimestamp()":"2293","removeWatcher(address)":"30112","renounceOwnership()":"2392","renounced()":"2407"}},"methodIdentifiers":{"acceptProposedOwner()":"c5b350df","addWatcher(address)":"24bdff8c","delay()":"6a42b8f8","isWatcher(address)":"84785ecd","owner()":"8da5cb5b","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","removeWatcher(address)":"ec2b1345","renounceOwnership()":"715018a6","renounced()":"d232c220"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"watcher\",\"type\":\"address\"}],\"name\":\"WatcherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"watcher\",\"type\":\"address\"}],\"name\":\"WatcherRemoved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_watcher\",\"type\":\"address\"}],\"name\":\"addWatcher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isWatcher\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_watcher\",\"type\":\"address\"}],\"name\":\"removeWatcher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addWatcher(address)\":{\"details\":\"Owner can enroll a watcher (abilities are defined by inheriting contracts)\"},\"removeWatcher(address)\":{\"details\":\"Owner can unenroll a watcher (abilities are defined by inheriting contracts)\"},\"renounceOwnership()\":{\"details\":\"Renounce ownership should be impossible as long as the watcher griefing vector exists. You can still propose `address(0)`, but it will never be accepted.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Remove ability to renounce ownership\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"}},\"notice\":\"This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can inherit to make use of the same watcher set.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/WatcherManager.sol\":\"WatcherManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/WatcherManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can\\n * inherit to make use of the same watcher set.\\n */\\n\\ncontract WatcherManager is ProposedOwnable {\\n  // ============ Events ============\\n  event WatcherAdded(address watcher);\\n\\n  event WatcherRemoved(address watcher);\\n\\n  // ============ Properties ============\\n  mapping(address => bool) public isWatcher;\\n\\n  // ============ Constructor ============\\n  constructor() ProposedOwnable() {\\n    _setOwner(msg.sender);\\n  }\\n\\n  // ============ Modifiers ============\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @dev Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function addWatcher(address _watcher) external onlyOwner {\\n    require(!isWatcher[_watcher], \\\"already watcher\\\");\\n    isWatcher[_watcher] = true;\\n    emit WatcherAdded(_watcher);\\n  }\\n\\n  /**\\n   * @dev Owner can unenroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function removeWatcher(address _watcher) external onlyOwner {\\n    require(isWatcher[_watcher], \\\"!exist\\\");\\n    delete isWatcher[_watcher];\\n    emit WatcherRemoved(_watcher);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as the watcher griefing\\n   * vector exists. You can still propose `address(0)`, but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n}\\n\",\"keccak256\":\"0x94d9db4cd19453c9047164f697011163a42a6e12f9b2e1d7fbcfb35a7d021318\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/WatcherManager.sol:WatcherManager","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/WatcherManager.sol:WatcherManager","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/WatcherManager.sol:WatcherManager","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":38933,"contract":"contracts/messaging/WatcherManager.sol:WatcherManager","label":"isWatcher","offset":0,"slot":"3","type":"t_mapping(t_address,t_bool)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"owner()":{"notice":"Returns the address of the current owner."},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Remove ability to renounce ownership"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"}},"notice":"This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can inherit to make use of the same watcher set.","version":1}}},"contracts/messaging/connectors/Connector.sol":{"Connector":{"abi":[{"inputs":[],"name":"Connector__processMessage_notUsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"encodedData","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"current","type":"address"}],"name":"MirrorConnectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"mirrorDomain","type":"uint32"},{"indexed":false,"internalType":"address","name":"amb","type":"address"},{"indexed":false,"internalType":"address","name":"rootManager","type":"address"},{"indexed":false,"internalType":"address","name":"mirrorConnector","type":"address"}],"name":"NewConnector","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"AMB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIRROR_DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mirrorConnector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"processMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_mirrorConnector","type":"address"}],"name":"setMirrorConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_expected","type":"address"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"author":"Connext Labs, Inc.","details":"This contract stores information about mirror connectors, but can be used as a base for contracts that do not have a mirror (i.e. the connector handling messaging on mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN` will be emptyIf ownership is renounced, this contract will be unable to update its `mirrorConnector` or `mirrorGas`","kind":"dev","methods":{"constructor":{"details":"The connectors are deployed such that there is one on each side of an AMB (i.e. for optimism, there is one connector on optimism and one connector on mainnet)","params":{"_amb":"The address of the amb on the domain this connector lives on","_domain":"The domain this connector lives on","_mirrorConnector":"The address of the spoke connector","_mirrorDomain":"The spoke domain","_rootManager":"The address of the RootManager on mainnet"}},"processMessage(bytes)":{"details":"This is called by AMBs to process messages originating from mirror connector"}},"title":"Connector","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"AMB()":"d69f9d61","DOMAIN()":"52a9674b","MIRROR_DOMAIN()":"14168416","ROOT_MANAGER()":"5f61e3ec","acceptProposedOwner()":"c5b350df","delay()":"6a42b8f8","mirrorConnector()":"cc394283","owner()":"8da5cb5b","processMessage(bytes)":"4ff746f6","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","renounceOwnership()":"715018a6","renounced()":"d232c220","setMirrorConnector(address)":"5bd11efc","verifySender(address)":"db1b7659"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Connector__processMessage_notUsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"MirrorConnectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"mirrorDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"amb\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mirrorConnector\",\"type\":\"address\"}],\"name\":\"NewConnector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROOT_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"}],\"name\":\"setMirrorConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Connext Labs, Inc.\",\"details\":\"This contract stores information about mirror connectors, but can be used as a base for contracts that do not have a mirror (i.e. the connector handling messaging on mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN` will be emptyIf ownership is renounced, this contract will be unable to update its `mirrorConnector` or `mirrorGas`\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The connectors are deployed such that there is one on each side of an AMB (i.e. for optimism, there is one connector on optimism and one connector on mainnet)\",\"params\":{\"_amb\":\"The address of the amb on the domain this connector lives on\",\"_domain\":\"The domain this connector lives on\",\"_mirrorConnector\":\"The address of the spoke connector\",\"_mirrorDomain\":\"The spoke domain\",\"_rootManager\":\"The address of the RootManager on mainnet\"}},\"processMessage(bytes)\":{\"details\":\"This is called by AMBs to process messages originating from mirror connector\"}},\"title\":\"Connector\",\"version\":1},\"userdoc\":{\"events\":{\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"}},\"kind\":\"user\",\"methods\":{\"AMB()\":{\"notice\":\"Address of the AMB on this domain.\"},\"DOMAIN()\":{\"notice\":\"The domain of this Messaging (i.e. Connector) contract.\"},\"MIRROR_DOMAIN()\":{\"notice\":\"The domain of the corresponding messaging (i.e. Connector) contract.\"},\"ROOT_MANAGER()\":{\"notice\":\"RootManager contract address.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"constructor\":{\"notice\":\"Creates a new HubConnector instance\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"mirrorConnector()\":{\"notice\":\"Connector on L2 for L1 connectors, and vice versa.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"processMessage(bytes)\":{\"notice\":\"Processes a message received by an AMB\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"setMirrorConnector(address)\":{\"notice\":\"Sets the address of the l2Connector for this domain\"},\"verifySender(address)\":{\"notice\":\"Checks the cross domain sender for a given address\"}},\"notice\":\"This contract has the messaging interface functions used by all connectors.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/Connector.sol\":\"Connector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/Connector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IConnector} from \\\"../interfaces/IConnector.sol\\\";\\n\\n/**\\n * @title Connector\\n * @author Connext Labs, Inc.\\n * @notice This contract has the messaging interface functions used by all connectors.\\n *\\n * @dev This contract stores information about mirror connectors, but can be used as a\\n * base for contracts that do not have a mirror (i.e. the connector handling messaging on\\n * mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\\n * will be empty\\n *\\n * @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\\n * or `mirrorGas`\\n */\\nabstract contract Connector is ProposedOwnable, IConnector {\\n  // ========== Custom Errors ===========\\n\\n  error Connector__processMessage_notUsed();\\n\\n  // ============ Events ============\\n\\n  event NewConnector(\\n    uint32 indexed domain,\\n    uint32 indexed mirrorDomain,\\n    address amb,\\n    address rootManager,\\n    address mirrorConnector\\n  );\\n\\n  event MirrorConnectorUpdated(address previous, address current);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The domain of this Messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable DOMAIN;\\n\\n  /**\\n   * @notice Address of the AMB on this domain.\\n   */\\n  address public immutable AMB;\\n\\n  /**\\n   * @notice RootManager contract address.\\n   */\\n  address public immutable ROOT_MANAGER;\\n\\n  /**\\n   * @notice The domain of the corresponding messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable MIRROR_DOMAIN;\\n\\n  /**\\n   * @notice Connector on L2 for L1 connectors, and vice versa.\\n   */\\n  address public mirrorConnector;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered AMB\\n   */\\n  modifier onlyAMB() {\\n    require(msg.sender == AMB, \\\"!AMB\\\");\\n    _;\\n  }\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered ROOT_MANAGER\\n   */\\n  modifier onlyRootManager() {\\n    // NOTE: RootManager will be zero address for spoke connectors.\\n    // Only root manager can dispatch a message to spokes/L2s via the hub connector.\\n    require(msg.sender == ROOT_MANAGER, \\\"!rootManager\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) ProposedOwnable() {\\n    // set the owner\\n    _setOwner(msg.sender);\\n\\n    // sanity checks on values\\n    require(_domain != 0, \\\"empty domain\\\");\\n    require(_rootManager != address(0), \\\"empty rootManager\\\");\\n    // see note at top of contract on why the mirror values are not sanity checked\\n\\n    // set immutables\\n    DOMAIN = _domain;\\n    AMB = _amb;\\n    ROOT_MANAGER = _rootManager;\\n    MIRROR_DOMAIN = _mirrorDomain;\\n    // set mutables if defined\\n    if (_mirrorConnector != address(0)) {\\n      _setMirrorConnector(_mirrorConnector);\\n    }\\n\\n    emit NewConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector);\\n  }\\n\\n  // ============ Receivable ============\\n  /**\\n   * @notice Connectors may need to receive native asset to handle fees when sending a\\n   * message\\n   */\\n  receive() external payable {}\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Sets the address of the l2Connector for this domain\\n   */\\n  function setMirrorConnector(address _mirrorConnector) public onlyOwner {\\n    _setMirrorConnector(_mirrorConnector);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice Processes a message received by an AMB\\n   * @dev This is called by AMBs to process messages originating from mirror connector\\n   */\\n  function processMessage(bytes memory _data) external virtual onlyAMB {\\n    _processMessage(_data);\\n    emit MessageProcessed(_data, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Checks the cross domain sender for a given address\\n   */\\n  function verifySender(address _expected) external returns (bool) {\\n    return _verifySender(_expected);\\n  }\\n\\n  // ============ Virtual Functions ============\\n\\n  /**\\n   * @notice This function is used by the Connext contract on the l2 domain to send a message to the\\n   * l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\\n   * @param _data The contents of the message\\n   * @param _encodedData Data used to send the message; specific to connector\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal virtual;\\n\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(\\n    bytes memory /* _data */\\n  ) internal virtual {\\n    // By default, reverts. This is to ensure the call path is not used unless this function is\\n    // overridden by the inheriting class\\n    revert Connector__processMessage_notUsed();\\n  }\\n\\n  /**\\n   * @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\\n   * is the expected address.\\n   * @dev Should be overridden by the implementing Connector contract.\\n   */\\n  function _verifySender(address _expected) internal virtual returns (bool);\\n\\n  // ============ Private Functions ============\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal virtual {\\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\\n    mirrorConnector = _mirrorConnector;\\n  }\\n}\\n\",\"keccak256\":\"0x08d4077a1b5caf9f46491206064bb24bee467dd741b42fed3d30a608eea83368\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/Connector.sol:Connector","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/Connector.sol:Connector","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/Connector.sol:Connector","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39051,"contract":"contracts/messaging/connectors/Connector.sol:Connector","label":"mirrorConnector","offset":0,"slot":"3","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"MessageProcessed(bytes,address)":{"notice":"Emitted whenever a message is successfully received over an AMB"},"MessageSent(bytes,bytes,address)":{"notice":"Emitted whenever a message is successfully sent over an AMB"}},"kind":"user","methods":{"AMB()":{"notice":"Address of the AMB on this domain."},"DOMAIN()":{"notice":"The domain of this Messaging (i.e. Connector) contract."},"MIRROR_DOMAIN()":{"notice":"The domain of the corresponding messaging (i.e. Connector) contract."},"ROOT_MANAGER()":{"notice":"RootManager contract address."},"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"constructor":{"notice":"Creates a new HubConnector instance"},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"mirrorConnector()":{"notice":"Connector on L2 for L1 connectors, and vice versa."},"owner()":{"notice":"Returns the address of the current owner."},"processMessage(bytes)":{"notice":"Processes a message received by an AMB"},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"setMirrorConnector(address)":{"notice":"Sets the address of the l2Connector for this domain"},"verifySender(address)":{"notice":"Checks the cross domain sender for a given address"}},"notice":"This contract has the messaging interface functions used by all connectors.","version":1}}},"contracts/messaging/connectors/ConnectorManager.sol":{"ConnectorManager":{"abi":[{"inputs":[],"name":"home","outputs":[{"internalType":"contract IOutbox","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_potentialReplica","type":"address"}],"name":"isReplica","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"localDomain","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Each nomad router contract has a `XappConnectionClient`, which references a XappConnectionManager to get the `Home` (outbox) and approved `Replica` (inbox) instances. At any point the client can replace the manager it's pointing to, changing the underlying messaging connection.","kind":"dev","methods":{"home()":{"details":"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad","returns":{"_0":"The local inbox contract"}},"isReplica(address)":{"returns":{"_0":"True if _potentialReplica is an enrolled Replica"}},"localDomain()":{"returns":{"_0":"The local domain"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"home()":"9fa92f9d","isReplica(address)":"5190bc53","localDomain()":"8d3638f4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"home\",\"outputs\":[{\"internalType\":\"contract IOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_potentialReplica\",\"type\":\"address\"}],\"name\":\"isReplica\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localDomain\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Each nomad router contract has a `XappConnectionClient`, which references a XappConnectionManager to get the `Home` (outbox) and approved `Replica` (inbox) instances. At any point the client can replace the manager it's pointing to, changing the underlying messaging connection.\",\"kind\":\"dev\",\"methods\":{\"home()\":{\"details\":\"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad\",\"returns\":{\"_0\":\"The local inbox contract\"}},\"isReplica(address)\":{\"returns\":{\"_0\":\"True if _potentialReplica is an enrolled Replica\"}},\"localDomain()\":{\"returns\":{\"_0\":\"The local domain\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"home()\":{\"notice\":\"Get the local inbox contract from the xAppConnectionManager\"},\"isReplica(address)\":{\"notice\":\"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\"},\"localDomain()\":{\"notice\":\"Get the local domain from the xAppConnectionManager\"}},\"notice\":\"This is an interface to allow the `Messaging` contract to be used as a `XappConnectionManager` on all router contracts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/ConnectorManager.sol\":\"ConnectorManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/ConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IConnectorManager} from \\\"../interfaces/IConnectorManager.sol\\\";\\nimport {IOutbox} from \\\"../interfaces/IOutbox.sol\\\";\\n\\n/**\\n * @notice This is an interface to allow the `Messaging` contract to be used\\n * as a `XappConnectionManager` on all router contracts.\\n *\\n * @dev Each nomad router contract has a `XappConnectionClient`, which references a\\n * XappConnectionManager to get the `Home` (outbox) and approved `Replica` (inbox)\\n * instances. At any point the client can replace the manager it's pointing to,\\n * changing the underlying messaging connection.\\n */\\nabstract contract ConnectorManager is IConnectorManager {\\n  constructor() {}\\n\\n  function home() public view returns (IOutbox) {\\n    return IOutbox(address(this));\\n  }\\n\\n  function isReplica(address _potentialReplica) public view returns (bool) {\\n    return _potentialReplica == address(this);\\n  }\\n\\n  function localDomain() external view virtual returns (uint32);\\n}\\n\",\"keccak256\":\"0x0112a527de062459aadfc2c8aa59a81c379d53c0f646f7869c6250e343ba91be\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"home()":{"notice":"Get the local inbox contract from the xAppConnectionManager"},"isReplica(address)":{"notice":"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager"},"localDomain()":{"notice":"Get the local domain from the xAppConnectionManager"}},"notice":"This is an interface to allow the `Messaging` contract to be used as a `XappConnectionManager` on all router contracts.","version":1}}},"contracts/messaging/connectors/GasCap.sol":{"GasCap":{"abi":[{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"GasCapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gasCap","type":"uint256"}],"name":"setGasCap","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"events":{"GasCapUpdated(uint256,uint256)":{"params":{"_previous":"The starting value","_updated":"The final value"}}},"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"acceptProposedOwner()":"c5b350df","delay()":"6a42b8f8","owner()":"8da5cb5b","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","renounceOwnership()":"715018a6","renounced()":"d232c220","setGasCap(uint256)":"7850b020"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_previous\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"GasCapUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"}],\"name\":\"setGasCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"GasCapUpdated(uint256,uint256)\":{\"params\":{\"_previous\":\"The starting value\",\"_updated\":\"The final value\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"GasCapUpdated(uint256,uint256)\":{\"notice\":\"Emitted when admin updates the gas cap\"}},\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/GasCap.sol\":\"GasCap\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/GasCap.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\n\\nabstract contract GasCap is ProposedOwnable {\\n  // ============ Storage ============\\n  /**\\n   * @notice The gnosis amb requires destination gas to be specified on the origin.\\n   * The gas used will be passed in by the relayer to allow for real-time estimates,\\n   * but will be capped at the admin-set cap.\\n   */\\n  uint256 gasCap;\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted when admin updates the gas cap\\n   * @param _previous The starting value\\n   * @param _updated The final value\\n   */\\n  event GasCapUpdated(uint256 _previous, uint256 _updated);\\n\\n  // ============ Constructor ============\\n  constructor(uint256 _gasCap) {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Admin Fns ============\\n  function setGasCap(uint256 _gasCap) public onlyOwner {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Internal Fns ============\\n\\n  /**\\n   * @notice Used (by admin) to update the gas cap\\n   * @param _gasCap The new value\\n   */\\n  function _setGasCap(uint256 _gasCap) internal {\\n    emit GasCapUpdated(gasCap, _gasCap);\\n    gasCap = _gasCap;\\n  }\\n\\n  /**\\n   * @notice Used to get the gas to use. Will be the original value IFF it\\n   * is less than the cap\\n   * @param _gas The proposed gas value\\n   */\\n  function _getGas(uint256 _gas) internal view returns (uint256) {\\n    if (_gas > gasCap) {\\n      _gas = gasCap;\\n    }\\n    return _gas;\\n  }\\n}\\n\",\"keccak256\":\"0xb8b52a3372f08490c918d1f490ad80764d54bd62d1638e4d17a5b552efe6587d\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/GasCap.sol:GasCap","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/GasCap.sol:GasCap","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/GasCap.sol:GasCap","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39301,"contract":"contracts/messaging/connectors/GasCap.sol:GasCap","label":"gasCap","offset":0,"slot":"3","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"GasCapUpdated(uint256,uint256)":{"notice":"Emitted when admin updates the gas cap"}},"kind":"user","methods":{"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"owner()":{"notice":"Returns the address of the current owner."},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"}},"version":1}}},"contracts/messaging/connectors/HubConnector.sol":{"HubConnector":{"abi":[{"inputs":[],"name":"Connector__processMessage_notUsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"encodedData","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"current","type":"address"}],"name":"MirrorConnectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"mirrorDomain","type":"uint32"},{"indexed":false,"internalType":"address","name":"amb","type":"address"},{"indexed":false,"internalType":"address","name":"rootManager","type":"address"},{"indexed":false,"internalType":"address","name":"mirrorConnector","type":"address"}],"name":"NewConnector","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"AMB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIRROR_DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mirrorConnector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"processMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_encodedData","type":"bytes"}],"name":"sendMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_mirrorConnector","type":"address"}],"name":"setMirrorConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_expected","type":"address"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"author":"Connext Labs, Inc.","details":"This contract should be deployed on the hub-side of an AMB (i.e. on L1), and contracts which extend this should implement the virtual functions defined in the BaseConnector class","kind":"dev","methods":{"constructor":{"details":"The connectors are deployed such that there is one on each side of an AMB (i.e. for optimism, there is one connector on optimism and one connector on mainnet)","params":{"_amb":"The address of the amb on the domain this connector lives on","_domain":"The domain this connector lives on","_mirrorConnector":"The address of the spoke connector","_mirrorDomain":"The spoke domain","_rootManager":"The address of the RootManager on mainnet"}},"processMessage(bytes)":{"details":"This is called by AMBs to process messages originating from mirror connector"},"sendMessage(bytes,bytes)":{"details":"This is called by the root manager *only* on mainnet to propagate the aggregate root"}},"title":"HubConnector","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"AMB()":"d69f9d61","DOMAIN()":"52a9674b","MIRROR_DOMAIN()":"14168416","ROOT_MANAGER()":"5f61e3ec","acceptProposedOwner()":"c5b350df","delay()":"6a42b8f8","mirrorConnector()":"cc394283","owner()":"8da5cb5b","processMessage(bytes)":"4ff746f6","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","renounceOwnership()":"715018a6","renounced()":"d232c220","sendMessage(bytes,bytes)":"48e6fa23","setMirrorConnector(address)":"5bd11efc","verifySender(address)":"db1b7659"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Connector__processMessage_notUsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"MirrorConnectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"mirrorDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"amb\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mirrorConnector\",\"type\":\"address\"}],\"name\":\"NewConnector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROOT_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"}],\"name\":\"setMirrorConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Connext Labs, Inc.\",\"details\":\"This contract should be deployed on the hub-side of an AMB (i.e. on L1), and contracts which extend this should implement the virtual functions defined in the BaseConnector class\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The connectors are deployed such that there is one on each side of an AMB (i.e. for optimism, there is one connector on optimism and one connector on mainnet)\",\"params\":{\"_amb\":\"The address of the amb on the domain this connector lives on\",\"_domain\":\"The domain this connector lives on\",\"_mirrorConnector\":\"The address of the spoke connector\",\"_mirrorDomain\":\"The spoke domain\",\"_rootManager\":\"The address of the RootManager on mainnet\"}},\"processMessage(bytes)\":{\"details\":\"This is called by AMBs to process messages originating from mirror connector\"},\"sendMessage(bytes,bytes)\":{\"details\":\"This is called by the root manager *only* on mainnet to propagate the aggregate root\"}},\"title\":\"HubConnector\",\"version\":1},\"userdoc\":{\"events\":{\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"}},\"kind\":\"user\",\"methods\":{\"AMB()\":{\"notice\":\"Address of the AMB on this domain.\"},\"DOMAIN()\":{\"notice\":\"The domain of this Messaging (i.e. Connector) contract.\"},\"MIRROR_DOMAIN()\":{\"notice\":\"The domain of the corresponding messaging (i.e. Connector) contract.\"},\"ROOT_MANAGER()\":{\"notice\":\"RootManager contract address.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"constructor\":{\"notice\":\"Creates a new HubConnector instance\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"mirrorConnector()\":{\"notice\":\"Connector on L2 for L1 connectors, and vice versa.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"processMessage(bytes)\":{\"notice\":\"Processes a message received by an AMB\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"sendMessage(bytes,bytes)\":{\"notice\":\"Sends a message over the amb\"},\"setMirrorConnector(address)\":{\"notice\":\"Sets the address of the l2Connector for this domain\"},\"verifySender(address)\":{\"notice\":\"Checks the cross domain sender for a given address\"}},\"notice\":\"This contract implements the messaging functions needed on the hub-side of a given AMB. The HubConnector has a limited set of functionality compared to the SpokeConnector, namely that it contains no logic to store or prove messages.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/HubConnector.sol\":\"HubConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/Connector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IConnector} from \\\"../interfaces/IConnector.sol\\\";\\n\\n/**\\n * @title Connector\\n * @author Connext Labs, Inc.\\n * @notice This contract has the messaging interface functions used by all connectors.\\n *\\n * @dev This contract stores information about mirror connectors, but can be used as a\\n * base for contracts that do not have a mirror (i.e. the connector handling messaging on\\n * mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\\n * will be empty\\n *\\n * @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\\n * or `mirrorGas`\\n */\\nabstract contract Connector is ProposedOwnable, IConnector {\\n  // ========== Custom Errors ===========\\n\\n  error Connector__processMessage_notUsed();\\n\\n  // ============ Events ============\\n\\n  event NewConnector(\\n    uint32 indexed domain,\\n    uint32 indexed mirrorDomain,\\n    address amb,\\n    address rootManager,\\n    address mirrorConnector\\n  );\\n\\n  event MirrorConnectorUpdated(address previous, address current);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The domain of this Messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable DOMAIN;\\n\\n  /**\\n   * @notice Address of the AMB on this domain.\\n   */\\n  address public immutable AMB;\\n\\n  /**\\n   * @notice RootManager contract address.\\n   */\\n  address public immutable ROOT_MANAGER;\\n\\n  /**\\n   * @notice The domain of the corresponding messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable MIRROR_DOMAIN;\\n\\n  /**\\n   * @notice Connector on L2 for L1 connectors, and vice versa.\\n   */\\n  address public mirrorConnector;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered AMB\\n   */\\n  modifier onlyAMB() {\\n    require(msg.sender == AMB, \\\"!AMB\\\");\\n    _;\\n  }\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered ROOT_MANAGER\\n   */\\n  modifier onlyRootManager() {\\n    // NOTE: RootManager will be zero address for spoke connectors.\\n    // Only root manager can dispatch a message to spokes/L2s via the hub connector.\\n    require(msg.sender == ROOT_MANAGER, \\\"!rootManager\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) ProposedOwnable() {\\n    // set the owner\\n    _setOwner(msg.sender);\\n\\n    // sanity checks on values\\n    require(_domain != 0, \\\"empty domain\\\");\\n    require(_rootManager != address(0), \\\"empty rootManager\\\");\\n    // see note at top of contract on why the mirror values are not sanity checked\\n\\n    // set immutables\\n    DOMAIN = _domain;\\n    AMB = _amb;\\n    ROOT_MANAGER = _rootManager;\\n    MIRROR_DOMAIN = _mirrorDomain;\\n    // set mutables if defined\\n    if (_mirrorConnector != address(0)) {\\n      _setMirrorConnector(_mirrorConnector);\\n    }\\n\\n    emit NewConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector);\\n  }\\n\\n  // ============ Receivable ============\\n  /**\\n   * @notice Connectors may need to receive native asset to handle fees when sending a\\n   * message\\n   */\\n  receive() external payable {}\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Sets the address of the l2Connector for this domain\\n   */\\n  function setMirrorConnector(address _mirrorConnector) public onlyOwner {\\n    _setMirrorConnector(_mirrorConnector);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice Processes a message received by an AMB\\n   * @dev This is called by AMBs to process messages originating from mirror connector\\n   */\\n  function processMessage(bytes memory _data) external virtual onlyAMB {\\n    _processMessage(_data);\\n    emit MessageProcessed(_data, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Checks the cross domain sender for a given address\\n   */\\n  function verifySender(address _expected) external returns (bool) {\\n    return _verifySender(_expected);\\n  }\\n\\n  // ============ Virtual Functions ============\\n\\n  /**\\n   * @notice This function is used by the Connext contract on the l2 domain to send a message to the\\n   * l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\\n   * @param _data The contents of the message\\n   * @param _encodedData Data used to send the message; specific to connector\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal virtual;\\n\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(\\n    bytes memory /* _data */\\n  ) internal virtual {\\n    // By default, reverts. This is to ensure the call path is not used unless this function is\\n    // overridden by the inheriting class\\n    revert Connector__processMessage_notUsed();\\n  }\\n\\n  /**\\n   * @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\\n   * is the expected address.\\n   * @dev Should be overridden by the implementing Connector contract.\\n   */\\n  function _verifySender(address _expected) internal virtual returns (bool);\\n\\n  // ============ Private Functions ============\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal virtual {\\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\\n    mirrorConnector = _mirrorConnector;\\n  }\\n}\\n\",\"keccak256\":\"0x08d4077a1b5caf9f46491206064bb24bee467dd741b42fed3d30a608eea83368\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/HubConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Connector} from \\\"./Connector.sol\\\";\\n\\n/**\\n * @title HubConnector\\n * @author Connext Labs, Inc.\\n * @notice This contract implements the messaging functions needed on the hub-side of a given AMB.\\n * The HubConnector has a limited set of functionality compared to the SpokeConnector, namely that\\n * it contains no logic to store or prove messages.\\n *\\n * @dev This contract should be deployed on the hub-side of an AMB (i.e. on L1), and contracts\\n * which extend this should implement the virtual functions defined in the BaseConnector class\\n */\\nabstract contract HubConnector is Connector {\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) Connector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector) {}\\n\\n  // ============ Public fns ============\\n  /**\\n   * @notice Sends a message over the amb\\n   * @dev This is called by the root manager *only* on mainnet to propagate the aggregate root\\n   */\\n  function sendMessage(bytes memory _data, bytes memory _encodedData) external payable onlyRootManager {\\n    _sendMessage(_data, _encodedData);\\n    emit MessageSent(_data, _encodedData, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0xc35621419ca872ed0550b0943a577b39942f3d2c9b54de008fee382d5ad290e4\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/HubConnector.sol:HubConnector","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/HubConnector.sol:HubConnector","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/HubConnector.sol:HubConnector","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39051,"contract":"contracts/messaging/connectors/HubConnector.sol:HubConnector","label":"mirrorConnector","offset":0,"slot":"3","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"MessageProcessed(bytes,address)":{"notice":"Emitted whenever a message is successfully received over an AMB"},"MessageSent(bytes,bytes,address)":{"notice":"Emitted whenever a message is successfully sent over an AMB"}},"kind":"user","methods":{"AMB()":{"notice":"Address of the AMB on this domain."},"DOMAIN()":{"notice":"The domain of this Messaging (i.e. Connector) contract."},"MIRROR_DOMAIN()":{"notice":"The domain of the corresponding messaging (i.e. Connector) contract."},"ROOT_MANAGER()":{"notice":"RootManager contract address."},"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"constructor":{"notice":"Creates a new HubConnector instance"},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"mirrorConnector()":{"notice":"Connector on L2 for L1 connectors, and vice versa."},"owner()":{"notice":"Returns the address of the current owner."},"processMessage(bytes)":{"notice":"Processes a message received by an AMB"},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"sendMessage(bytes,bytes)":{"notice":"Sends a message over the amb"},"setMirrorConnector(address)":{"notice":"Sets the address of the l2Connector for this domain"},"verifySender(address)":{"notice":"Checks the cross domain sender for a given address"}},"notice":"This contract implements the messaging functions needed on the hub-side of a given AMB. The HubConnector has a limited set of functionality compared to the SpokeConnector, namely that it contains no logic to store or prove messages.","version":1}}},"contracts/messaging/connectors/SpokeConnector.sol":{"SpokeConnector":{"abi":[{"inputs":[],"name":"Connector__processMessage_notUsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"inputs":[],"name":"RateLimited__rateLimited_messageSendRateExceeded","type":"error"},{"inputs":[],"name":"TypedMemView__index_indexMoreThan32Bytes","type":"error"},{"inputs":[{"internalType":"uint256","name":"loc","type":"uint256"},{"internalType":"uint256","name":"len","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"slice","type":"uint256"}],"name":"TypedMemView__index_overrun","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_identityOOG","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_invalidPointer","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_nullPointer","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootVerified","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"updated","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"DelayBlocksUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"message","type":"bytes"}],"name":"Dispatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"aggregateRoot","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"aggregateIndex","type":"uint256"}],"name":"MessageProven","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"encodedData","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"current","type":"address"}],"name":"MirrorConnectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"mirrorDomain","type":"uint32"},{"indexed":false,"internalType":"address","name":"amb","type":"address"},{"indexed":false,"internalType":"address","name":"rootManager","type":"address"},{"indexed":false,"internalType":"address","name":"mirrorConnector","type":"address"}],"name":"NewConnector","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"returnData","type":"bytes"}],"name":"Process","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updater","type":"address"},{"indexed":false,"internalType":"uint256","name":"newRateLimit","type":"uint256"}],"name":"SendRateLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"SenderAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"SenderRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"watcherManager","type":"address"}],"name":"WatcherManagerChanged","type":"event"},{"inputs":[],"name":"AMB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MERKLE","outputs":[{"internalType":"contract MerkleTreeManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIRROR_DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROCESS_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"addSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlistedSenders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_destinationDomain","type":"uint32"},{"internalType":"bytes32","name":"_recipientAddress","type":"bytes32"},{"internalType":"bytes","name":"_messageBody","type":"bytes"}],"name":"dispatch","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"home","outputs":[{"internalType":"contract IOutbox","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_potentialReplica","type":"address"}],"name":"isReplica","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"localDomain","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"messages","outputs":[{"internalType":"enum SpokeConnector.MessageStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mirrorConnector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"nonces","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"outboundRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"pendingAggregateRoots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"processMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32[32]","name":"path","type":"bytes32[32]"},{"internalType":"uint256","name":"index","type":"uint256"}],"internalType":"struct SpokeConnector.Proof[]","name":"_proofs","type":"tuple[]"},{"internalType":"bytes32","name":"_aggregateRoot","type":"bytes32"},{"internalType":"bytes32[32]","name":"_aggregatePath","type":"bytes32[32]"},{"internalType":"uint256","name":"_aggregateIndex","type":"uint256"}],"name":"proveAndProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"provenAggregateRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"provenMessageRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rateLimitBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_fraudulentRoot","type":"bytes32"}],"name":"removePendingAggregateRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"removeSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_encodedData","type":"bytes"}],"name":"send","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"sentMessageRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_delayBlocks","type":"uint256"}],"name":"setDelayBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mirrorConnector","type":"address"}],"name":"setMirrorConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rateLimit","type":"uint256"}],"name":"setRateLimitBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_watcherManager","type":"address"}],"name":"setWatcherManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_expected","type":"address"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"watcherManager","outputs":[{"internalType":"contract WatcherManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"author":"Connext Labs, Inc.","details":"If you are deploying this contract to mainnet, then the mirror values stored in the HubConnector will be unused","events":{"FundsWithdrawn(address,uint256)":{"details":"See comments in `withdrawFunds`","params":{"amount":"The amount withdrawn","to":"The recipient of the funds"}}},"kind":"dev","methods":{"addSender(address)":{"details":"Only allowlisted routers (senders) can call `dispatch`."},"constructor":{"params":{"_amb":"The address of the AMB on the spoke domain this connector lives on.","_delayBlocks":"The delay for the validation period for incoming messages in blocks.","_domain":"The domain this connector lives on.","_merkle":"The address of the MerkleTreeManager on this spoke domain.","_mirrorConnector":"The address of the spoke connector.","_mirrorDomain":"The hub domain.","_processGas":"The gas costs used in `handle` to ensure meaningful state changes can occur (minimum gas needed to handle transaction).","_reserveGas":"The gas costs reserved when `handle` is called to ensure failures are handled.","_rootManager":"The address of the RootManager on the hub.","_watcherManager":"The address of the WatcherManager to whom this connector is a client."}},"dispatch(uint32,bytes32,bytes)":{"details":"The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \"hub\"), it will be combined into a single aggregate root by RootManager (along with outbound roots from other chains). This aggregate root will be redistributed to all destination chains. NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions"},"home()":{"details":"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad","returns":{"_0":"The local inbox contract"}},"isReplica(address)":{"returns":{"_0":"True if _potentialReplica is an enrolled Replica"}},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"processMessage(bytes)":{"details":"This is called by AMBs to process messages originating from mirror connector"},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":{"details":"Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.Intended to be called by the relayer at specific intervals during runtime.Will record a calculated root as having been proven if we've already proven that it was included in the aggregateRoot.","params":{"_aggregateIndex":"Index of the inbound root in the aggregator's merkle tree in the hub.","_aggregatePath":"Merkle path of inclusion for the inbound root.","_aggregateRoot":"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.","_proofs":"Batch of Proofs containing messages for proving/processing."}},"removePendingAggregateRoot(bytes32)":{"details":"This method is required for handling fraud cases in the current construction.","params":{"_fraudulentRoot":"Target fraudulent root that should be erased from the `pendingAggregateRoots` mapping."}},"removeSender(address)":{"details":"Only allowlisted routers (senders) can call `dispatch`."},"renounceOwnership()":{"details":"Renounce ownership should be impossible as long as it is impossible in the WatcherClient, and as long as only the owner can remove pending roots in case of fraud."},"setRateLimitBlocks(uint256)":{"details":"Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)","params":{"_rateLimit":"The number of blocks require between sending messages. If set to 0, rate limiting for this spoke connector will be disabled."}},"withdrawFunds(address)":{"details":"Withdraws the entire balance of the contract.","params":{"_to":"The recipient of the funds withdrawn"}}},"stateVariables":{"allowlistedSenders":{"details":"This is used for the `onlyAllowlistedSender` modifier, which gates who can send messages using `dispatch`."},"pendingAggregateRoots":{"details":"NOTE: A commit block of 0 should be considered invalid (it is an empty entry in the mapping). We must ALWAYS ensure the value is not 0 before checking whether it has surpassed the verification period."},"provenAggregateRoots":{"details":"This root is the root of the tree that is aggregated on mainnet (composed of all the roots of previous trees)."},"provenMessageRoots":{"details":"Tracking this is an optimization so you dont have to prove inclusion of the same constituent root many times."}},"title":"SpokeConnector","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"AMB()":"d69f9d61","DOMAIN()":"52a9674b","MERKLE()":"a01892a5","MIRROR_DOMAIN()":"14168416","PROCESS_GAS()":"d88beda2","RESERVE_GAS()":"25e3beda","ROOT_MANAGER()":"5f61e3ec","acceptProposedOwner()":"c5b350df","addSender(address)":"b697f531","allowlistedSenders(address)":"6159ada1","delay()":"6a42b8f8","delayBlocks()":"ad9c0c2e","dispatch(uint32,bytes32,bytes)":"fa31de01","home()":"9fa92f9d","isReplica(address)":"5190bc53","lastSentBlock()":"d7d317b3","localDomain()":"8d3638f4","messages(bytes32)":"2bbd59ca","mirrorConnector()":"cc394283","nonces(uint32)":"b95a2001","outboundRoot()":"65eaf11b","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","pendingAggregateRoots(bytes32)":"9d3117c7","processMessage(bytes)":"4ff746f6","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":"508a109b","provenAggregateRoots(bytes32)":"301f07c3","provenMessageRoots(bytes32)":"98c9f2b9","rateLimitBlocks()":"579c1618","removePendingAggregateRoot(bytes32)":"6b04a933","removeSender(address)":"b2f87643","renounceOwnership()":"715018a6","renounced()":"d232c220","send(bytes)":"2bb1ae7c","sentMessageRoots(bytes32)":"572386ca","setDelayBlocks(uint256)":"1eeaabea","setMirrorConnector(address)":"5bd11efc","setRateLimitBlocks(uint256)":"e0fed010","setWatcherManager(address)":"d2a3cc71","unpause()":"3f4ba83a","verifySender(address)":"db1b7659","watcherManager()":"a792c29b","withdrawFunds(address)":"68742da6"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Connector__processMessage_notUsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimited__rateLimited_messageSendRateExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__index_indexMoreThan32Bytes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"len\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slice\",\"type\":\"uint256\"}],\"name\":\"TypedMemView__index_overrun\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_identityOOG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_invalidPointer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_nullPointer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"updated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"DelayBlocksUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Dispatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"aggregateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"MessageProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"MirrorConnectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"mirrorDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"amb\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mirrorConnector\",\"type\":\"address\"}],\"name\":\"NewConnector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"Process\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updater\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRateLimit\",\"type\":\"uint256\"}],\"name\":\"SendRateLimitUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"watcherManager\",\"type\":\"address\"}],\"name\":\"WatcherManagerChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MERKLE\",\"outputs\":[{\"internalType\":\"contract MerkleTreeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROCESS_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROOT_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"addSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowlistedSenders\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_recipientAddress\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_messageBody\",\"type\":\"bytes\"}],\"name\":\"dispatch\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"home\",\"outputs\":[{\"internalType\":\"contract IOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_potentialReplica\",\"type\":\"address\"}],\"name\":\"isReplica\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastSentBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localDomain\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"messages\",\"outputs\":[{\"internalType\":\"enum SpokeConnector.MessageStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outboundRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"pendingAggregateRoots\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"path\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct SpokeConnector.Proof[]\",\"name\":\"_proofs\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"_aggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[32]\",\"name\":\"_aggregatePath\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"_aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"proveAndProcess\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenAggregateRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenMessageRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rateLimitBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_fraudulentRoot\",\"type\":\"bytes32\"}],\"name\":\"removePendingAggregateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"removeSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"sentMessageRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_delayBlocks\",\"type\":\"uint256\"}],\"name\":\"setDelayBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"}],\"name\":\"setMirrorConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rateLimit\",\"type\":\"uint256\"}],\"name\":\"setRateLimitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"}],\"name\":\"setWatcherManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"watcherManager\",\"outputs\":[{\"internalType\":\"contract WatcherManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Connext Labs, Inc.\",\"details\":\"If you are deploying this contract to mainnet, then the mirror values stored in the HubConnector will be unused\",\"events\":{\"FundsWithdrawn(address,uint256)\":{\"details\":\"See comments in `withdrawFunds`\",\"params\":{\"amount\":\"The amount withdrawn\",\"to\":\"The recipient of the funds\"}}},\"kind\":\"dev\",\"methods\":{\"addSender(address)\":{\"details\":\"Only allowlisted routers (senders) can call `dispatch`.\"},\"constructor\":{\"params\":{\"_amb\":\"The address of the AMB on the spoke domain this connector lives on.\",\"_delayBlocks\":\"The delay for the validation period for incoming messages in blocks.\",\"_domain\":\"The domain this connector lives on.\",\"_merkle\":\"The address of the MerkleTreeManager on this spoke domain.\",\"_mirrorConnector\":\"The address of the spoke connector.\",\"_mirrorDomain\":\"The hub domain.\",\"_processGas\":\"The gas costs used in `handle` to ensure meaningful state changes can occur (minimum gas needed to handle transaction).\",\"_reserveGas\":\"The gas costs reserved when `handle` is called to ensure failures are handled.\",\"_rootManager\":\"The address of the RootManager on the hub.\",\"_watcherManager\":\"The address of the WatcherManager to whom this connector is a client.\"}},\"dispatch(uint32,bytes32,bytes)\":{\"details\":\"The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \\\"hub\\\"), it will be combined into a single aggregate root by RootManager (along with outbound roots from other chains). This aggregate root will be redistributed to all destination chains. NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\"},\"home()\":{\"details\":\"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad\",\"returns\":{\"_0\":\"The local inbox contract\"}},\"isReplica(address)\":{\"returns\":{\"_0\":\"True if _potentialReplica is an enrolled Replica\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"processMessage(bytes)\":{\"details\":\"This is called by AMBs to process messages originating from mirror connector\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)\":{\"details\":\"Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.Intended to be called by the relayer at specific intervals during runtime.Will record a calculated root as having been proven if we've already proven that it was included in the aggregateRoot.\",\"params\":{\"_aggregateIndex\":\"Index of the inbound root in the aggregator's merkle tree in the hub.\",\"_aggregatePath\":\"Merkle path of inclusion for the inbound root.\",\"_aggregateRoot\":\"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.\",\"_proofs\":\"Batch of Proofs containing messages for proving/processing.\"}},\"removePendingAggregateRoot(bytes32)\":{\"details\":\"This method is required for handling fraud cases in the current construction.\",\"params\":{\"_fraudulentRoot\":\"Target fraudulent root that should be erased from the `pendingAggregateRoots` mapping.\"}},\"removeSender(address)\":{\"details\":\"Only allowlisted routers (senders) can call `dispatch`.\"},\"renounceOwnership()\":{\"details\":\"Renounce ownership should be impossible as long as it is impossible in the WatcherClient, and as long as only the owner can remove pending roots in case of fraud.\"},\"setRateLimitBlocks(uint256)\":{\"details\":\"Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\",\"params\":{\"_rateLimit\":\"The number of blocks require between sending messages. If set to 0, rate limiting for this spoke connector will be disabled.\"}},\"withdrawFunds(address)\":{\"details\":\"Withdraws the entire balance of the contract.\",\"params\":{\"_to\":\"The recipient of the funds withdrawn\"}}},\"stateVariables\":{\"allowlistedSenders\":{\"details\":\"This is used for the `onlyAllowlistedSender` modifier, which gates who can send messages using `dispatch`.\"},\"pendingAggregateRoots\":{\"details\":\"NOTE: A commit block of 0 should be considered invalid (it is an empty entry in the mapping). We must ALWAYS ensure the value is not 0 before checking whether it has surpassed the verification period.\"},\"provenAggregateRoots\":{\"details\":\"This root is the root of the tree that is aggregated on mainnet (composed of all the roots of previous trees).\"},\"provenMessageRoots\":{\"details\":\"Tracking this is an optimization so you dont have to prove inclusion of the same constituent root many times.\"}},\"title\":\"SpokeConnector\",\"version\":1},\"userdoc\":{\"events\":{\"FundsWithdrawn(address,uint256)\":{\"notice\":\"Emitted when funds are withdrawn by the admin\"},\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"},\"WatcherManagerChanged(address)\":{\"notice\":\"Emitted when the manager address changes\"}},\"kind\":\"user\",\"methods\":{\"AMB()\":{\"notice\":\"Address of the AMB on this domain.\"},\"DOMAIN()\":{\"notice\":\"The domain of this Messaging (i.e. Connector) contract.\"},\"MERKLE()\":{\"notice\":\"MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root will be sent crosschain to the hub for aggregation and redistribution.\"},\"MIRROR_DOMAIN()\":{\"notice\":\"The domain of the corresponding messaging (i.e. Connector) contract.\"},\"PROCESS_GAS()\":{\"notice\":\"Minimum gas for processing a received message (reserved for handle)\"},\"RESERVE_GAS()\":{\"notice\":\"Reserved gas (to ensure tx completes in case message processing runs out)\"},\"ROOT_MANAGER()\":{\"notice\":\"RootManager contract address.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"addSender(address)\":{\"notice\":\"Adds a sender to the allowlist.\"},\"constructor\":{\"notice\":\"Creates a new SpokeConnector instance.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"delayBlocks()\":{\"notice\":\"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary.\"},\"dispatch(uint32,bytes32,bytes)\":{\"notice\":\"This function adds transfers to the outbound transfer merkle tree.\"},\"home()\":{\"notice\":\"Get the local inbox contract from the xAppConnectionManager\"},\"isReplica(address)\":{\"notice\":\"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\"},\"lastSentBlock()\":{\"notice\":\"Tracks the last block that we sent a message.\"},\"localDomain()\":{\"notice\":\"This provides the implementation for what is defined in the ConnectorManager to avoid storing the domain redundantly\"},\"messages(bytes32)\":{\"notice\":\"Mapping of message leaves to MessageStatus, keyed on leaf.\"},\"mirrorConnector()\":{\"notice\":\"Connector on L2 for L1 connectors, and vice versa.\"},\"nonces(uint32)\":{\"notice\":\"domain => next available nonce for the domain.\"},\"outboundRoot()\":{\"notice\":\"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"pause()\":{\"notice\":\"Watchers can pause contracts if fraud is detected\"},\"pendingAggregateRoots(bytes32)\":{\"notice\":\"This will hold the commit block for incoming aggregateRoots from the hub chain. Once they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can be used for proving inclusion of crosschain messages.\"},\"processMessage(bytes)\":{\"notice\":\"Processes a message received by an AMB\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)\":{\"notice\":\"Must be able to call the `handle` function on the BridgeRouter contract. This is called on the destination domain to handle incoming messages. Proving: Calculates the expected inbound root from an origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this calculated inbound root is included in the current aggregateRoot, given its index in the aggregator tree and the proof of inclusion. Processing: After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for execution.\"},\"provenAggregateRoots(bytes32)\":{\"notice\":\"This tracks the roots of the aggregate tree containing outbound roots from all other supported domains. The current version is the one that is known to be past the delayBlocks time period.\"},\"provenMessageRoots(bytes32)\":{\"notice\":\"This tracks whether the root has been proven to exist within the given aggregate root.\"},\"rateLimitBlocks()\":{\"notice\":\"The number of blocks required between message sending events.\"},\"removePendingAggregateRoot(bytes32)\":{\"notice\":\"Manually remove a pending aggregateRoot by owner if the contract is paused.\"},\"removeSender(address)\":{\"notice\":\"Removes a sender from the allowlist.\"},\"renounceOwnership()\":{\"notice\":\"Remove ability to renounce ownership\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"send(bytes)\":{\"notice\":\"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)\"},\"sentMessageRoots(bytes32)\":{\"notice\":\"This mapping records all message roots that have already been sent in order to prevent redundant message roots from being sent to hub.\"},\"setDelayBlocks(uint256)\":{\"notice\":\"Set the `delayBlocks`, the period in blocks over which an incoming message is verified.\"},\"setMirrorConnector(address)\":{\"notice\":\"Sets the address of the l2Connector for this domain\"},\"setRateLimitBlocks(uint256)\":{\"notice\":\"Set the rate limit (number of blocks) at which we can send messages from this contract to the hub chain using the `send` method.\"},\"setWatcherManager(address)\":{\"notice\":\"Owner can enroll a watcher (abilities are defined by inheriting contracts)\"},\"unpause()\":{\"notice\":\"Owner can unpause contracts if fraud is detected by watchers\"},\"verifySender(address)\":{\"notice\":\"Checks the cross domain sender for a given address\"},\"watcherManager()\":{\"notice\":\"The `WatcherManager` contract governs the watcher allowlist.\"},\"withdrawFunds(address)\":{\"notice\":\"This function should be callable by owner, and send funds trapped on a connector to the provided recipient.\"}},\"notice\":\"This contract implements the messaging functions needed on the spoke-side of a given AMB. The SpokeConnector extends the HubConnector functionality by being able to send, store, and prove messages.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/SpokeConnector.sol\":\"SpokeConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n    /**\\n     * @dev Emitted when the pause is triggered by `account`.\\n     */\\n    event Paused(address account);\\n\\n    /**\\n     * @dev Emitted when the pause is lifted by `account`.\\n     */\\n    event Unpaused(address account);\\n\\n    bool private _paused;\\n\\n    /**\\n     * @dev Initializes the contract in unpaused state.\\n     */\\n    constructor() {\\n        _paused = false;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    modifier whenNotPaused() {\\n        _requireNotPaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    modifier whenPaused() {\\n        _requirePaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the contract is paused, and false otherwise.\\n     */\\n    function paused() public view virtual returns (bool) {\\n        return _paused;\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is paused.\\n     */\\n    function _requireNotPaused() internal view virtual {\\n        require(!paused(), \\\"Pausable: paused\\\");\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is not paused.\\n     */\\n    function _requirePaused() internal view virtual {\\n        require(paused(), \\\"Pausable: not paused\\\");\\n    }\\n\\n    /**\\n     * @dev Triggers stopped state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    function _pause() internal virtual whenNotPaused {\\n        _paused = true;\\n        emit Paused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Returns to normal state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    function _unpause() internal virtual whenPaused {\\n        _paused = false;\\n        emit Unpaused(_msgSender());\\n    }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"contracts/messaging/MerkleTreeManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnableUpgradeable} from \\\"../shared/ProposedOwnableUpgradeable.sol\\\";\\nimport {MerkleLib} from \\\"./libraries/MerkleLib.sol\\\";\\n\\n/**\\n * @title MerkleTreeManager\\n * @notice Contains a Merkle tree instance and exposes read/write functions for the tree.\\n * @dev On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector.\\n */\\ncontract MerkleTreeManager is ProposedOwnableUpgradeable {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleTreeManager__setArborist_zeroAddress();\\n  error MerkleTreeManager__setArborist_alreadyArborist();\\n\\n  // ============ Events ============\\n\\n  event ArboristUpdated(address previous, address updated);\\n\\n  event LeafInserted(bytes32 root, uint256 count, bytes32 leaf);\\n\\n  event LeavesInserted(bytes32 root, uint256 count, bytes32[] leaves);\\n\\n  // ============ Libraries ============\\n\\n  using MerkleLib for MerkleLib.Tree;\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Core data structure with which this contract is tasked with keeping custody.\\n   * Writable only by the designated arborist.\\n   */\\n  MerkleLib.Tree public tree;\\n\\n  /**\\n   * @notice The arborist contract that has permission to write to this tree.\\n   * @dev This could be the root manager contract or a spoke connector contract, for example.\\n   */\\n  address public arborist;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyArborist() {\\n    require(arborist == msg.sender, \\\"!arborist\\\");\\n    _;\\n  }\\n\\n  // ============ Getters ============\\n\\n  /**\\n   * @notice Returns the current branch.\\n   */\\n  function branch() public view returns (bytes32[32] memory) {\\n    return tree.branch;\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the current root.\\n   */\\n  function root() public view returns (bytes32) {\\n    return tree.root();\\n  }\\n\\n  /**\\n   * @notice Returns the number of inserted leaves in the tree (current index).\\n   */\\n  function count() public view returns (uint256) {\\n    return tree.count;\\n  }\\n\\n  /**\\n   * @notice Convenience getter: returns the root and count.\\n   */\\n  function rootAndCount() public view returns (bytes32, uint256) {\\n    return (tree.root(), tree.count);\\n  }\\n\\n  // ======== Initializer =========\\n\\n  function initialize(address _arborist) public initializer {\\n    __MerkleTreeManager_init(_arborist);\\n    __ProposedOwnable_init();\\n  }\\n\\n  /**\\n   * @dev Initializes MerkleTreeManager instance. Sets the msg.sender as the initial permissioned\\n   */\\n  function __MerkleTreeManager_init(address _arborist) internal onlyInitializing {\\n    __MerkleTreeManager_init_unchained(_arborist);\\n  }\\n\\n  function __MerkleTreeManager_init_unchained(address _arborist) internal onlyInitializing {\\n    arborist = _arborist;\\n  }\\n\\n  // ============ Admin Functions ==============\\n\\n  /**\\n   * @notice Method for the current arborist to assign write permissions to a new arborist.\\n   * @param newArborist The new address to set as the current arborist.\\n   */\\n  function setArborist(address newArborist) external onlyOwner {\\n    if (newArborist == address(0)) revert MerkleTreeManager__setArborist_zeroAddress();\\n    address current = arborist;\\n    if (current == newArborist) revert MerkleTreeManager__setArborist_alreadyArborist();\\n\\n    // Emit updated event\\n    emit ArboristUpdated(current, newArborist);\\n\\n    arborist = newArborist;\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as there is a possibility the\\n   * arborist may change.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ========= Public Functions =========\\n\\n  /**\\n   * @notice Inserts the given leaves into the tree.\\n   * @param leaves The leaves to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32[] memory leaves) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // For > 1 leaf, considerably more efficient to put this tree into memory, conduct operations,\\n    // then re-assign it to storage - *especially* if we have multiple leaves to insert.\\n    MerkleLib.Tree memory _tree = tree;\\n\\n    uint256 leafCount = leaves.length;\\n    for (uint256 i; i < leafCount; ) {\\n      // Insert the new node (using in-memory method).\\n      _tree = _tree.insert(leaves[i]);\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // Write the newly updated tree to storage.\\n    tree = _tree;\\n\\n    // Get return details for convenience.\\n    _count = _tree.count;\\n    // NOTE: Root calculation method currently reads from storage only.\\n    _root = tree.root();\\n\\n    emit LeavesInserted(_root, _count, leaves);\\n  }\\n\\n  /**\\n   * @notice Inserts the given leaf into the tree.\\n   * @param leaf The leaf to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32 leaf) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // Insert the new node.\\n    tree = tree.insert(leaf);\\n    _count = tree.count;\\n    _root = tree.root();\\n\\n    emit LeafInserted(_root, _count, leaf);\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[48] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x6eb338843435d4e859de1c71b9ad458c41aeba79002eaa58a463ef86effda89a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherClient.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Pausable} from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\nimport {WatcherManager} from \\\"./WatcherManager.sol\\\";\\n\\n/**\\n * @notice This contract abstracts the functionality of the watcher manager.\\n * Contracts can inherit this contract to be able to use the watcher manager's shared watcher set.\\n */\\n\\ncontract WatcherClient is ProposedOwnable, Pausable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted when the manager address changes\\n   * @param watcherManager The updated manager\\n   */\\n  event WatcherManagerChanged(address watcherManager);\\n\\n  // ============ Properties ============\\n  /**\\n   * @notice The `WatcherManager` contract governs the watcher allowlist.\\n   * @dev Multiple clients can share a watcher set using the same manager\\n   */\\n  WatcherManager public watcherManager;\\n\\n  // ============ Constructor ============\\n  constructor(address _watcherManager) ProposedOwnable() {\\n    watcherManager = WatcherManager(_watcherManager);\\n  }\\n\\n  // ============ Modifiers ============\\n  /**\\n   * @notice Enforces the sender is the watcher\\n   */\\n  modifier onlyWatcher() {\\n    require(watcherManager.isWatcher(msg.sender), \\\"!watcher\\\");\\n    _;\\n  }\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @notice Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function setWatcherManager(address _watcherManager) external onlyOwner {\\n    require(_watcherManager != address(watcherManager), \\\"already watcher manager\\\");\\n    watcherManager = WatcherManager(_watcherManager);\\n    emit WatcherManagerChanged(_watcherManager);\\n  }\\n\\n  /**\\n   * @notice Owner can unpause contracts if fraud is detected by watchers\\n   */\\n  function unpause() external onlyOwner whenPaused {\\n    _unpause();\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as only the owner\\n   * is able to unpause the contracts. You can still propose `address(0)`,\\n   * but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ============ Watcher fns ============\\n\\n  /**\\n   * @notice Watchers can pause contracts if fraud is detected\\n   */\\n  function pause() external onlyWatcher whenNotPaused {\\n    _pause();\\n  }\\n}\\n\",\"keccak256\":\"0x97b0da2c0317359ef2980d1f3c5fcdd7df2bdacbedf216dcbda521b96124444a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can\\n * inherit to make use of the same watcher set.\\n */\\n\\ncontract WatcherManager is ProposedOwnable {\\n  // ============ Events ============\\n  event WatcherAdded(address watcher);\\n\\n  event WatcherRemoved(address watcher);\\n\\n  // ============ Properties ============\\n  mapping(address => bool) public isWatcher;\\n\\n  // ============ Constructor ============\\n  constructor() ProposedOwnable() {\\n    _setOwner(msg.sender);\\n  }\\n\\n  // ============ Modifiers ============\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @dev Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function addWatcher(address _watcher) external onlyOwner {\\n    require(!isWatcher[_watcher], \\\"already watcher\\\");\\n    isWatcher[_watcher] = true;\\n    emit WatcherAdded(_watcher);\\n  }\\n\\n  /**\\n   * @dev Owner can unenroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function removeWatcher(address _watcher) external onlyOwner {\\n    require(isWatcher[_watcher], \\\"!exist\\\");\\n    delete isWatcher[_watcher];\\n    emit WatcherRemoved(_watcher);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as the watcher griefing\\n   * vector exists. You can still propose `address(0)`, but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n}\\n\",\"keccak256\":\"0x94d9db4cd19453c9047164f697011163a42a6e12f9b2e1d7fbcfb35a7d021318\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/Connector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IConnector} from \\\"../interfaces/IConnector.sol\\\";\\n\\n/**\\n * @title Connector\\n * @author Connext Labs, Inc.\\n * @notice This contract has the messaging interface functions used by all connectors.\\n *\\n * @dev This contract stores information about mirror connectors, but can be used as a\\n * base for contracts that do not have a mirror (i.e. the connector handling messaging on\\n * mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\\n * will be empty\\n *\\n * @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\\n * or `mirrorGas`\\n */\\nabstract contract Connector is ProposedOwnable, IConnector {\\n  // ========== Custom Errors ===========\\n\\n  error Connector__processMessage_notUsed();\\n\\n  // ============ Events ============\\n\\n  event NewConnector(\\n    uint32 indexed domain,\\n    uint32 indexed mirrorDomain,\\n    address amb,\\n    address rootManager,\\n    address mirrorConnector\\n  );\\n\\n  event MirrorConnectorUpdated(address previous, address current);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The domain of this Messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable DOMAIN;\\n\\n  /**\\n   * @notice Address of the AMB on this domain.\\n   */\\n  address public immutable AMB;\\n\\n  /**\\n   * @notice RootManager contract address.\\n   */\\n  address public immutable ROOT_MANAGER;\\n\\n  /**\\n   * @notice The domain of the corresponding messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable MIRROR_DOMAIN;\\n\\n  /**\\n   * @notice Connector on L2 for L1 connectors, and vice versa.\\n   */\\n  address public mirrorConnector;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered AMB\\n   */\\n  modifier onlyAMB() {\\n    require(msg.sender == AMB, \\\"!AMB\\\");\\n    _;\\n  }\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered ROOT_MANAGER\\n   */\\n  modifier onlyRootManager() {\\n    // NOTE: RootManager will be zero address for spoke connectors.\\n    // Only root manager can dispatch a message to spokes/L2s via the hub connector.\\n    require(msg.sender == ROOT_MANAGER, \\\"!rootManager\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) ProposedOwnable() {\\n    // set the owner\\n    _setOwner(msg.sender);\\n\\n    // sanity checks on values\\n    require(_domain != 0, \\\"empty domain\\\");\\n    require(_rootManager != address(0), \\\"empty rootManager\\\");\\n    // see note at top of contract on why the mirror values are not sanity checked\\n\\n    // set immutables\\n    DOMAIN = _domain;\\n    AMB = _amb;\\n    ROOT_MANAGER = _rootManager;\\n    MIRROR_DOMAIN = _mirrorDomain;\\n    // set mutables if defined\\n    if (_mirrorConnector != address(0)) {\\n      _setMirrorConnector(_mirrorConnector);\\n    }\\n\\n    emit NewConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector);\\n  }\\n\\n  // ============ Receivable ============\\n  /**\\n   * @notice Connectors may need to receive native asset to handle fees when sending a\\n   * message\\n   */\\n  receive() external payable {}\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Sets the address of the l2Connector for this domain\\n   */\\n  function setMirrorConnector(address _mirrorConnector) public onlyOwner {\\n    _setMirrorConnector(_mirrorConnector);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice Processes a message received by an AMB\\n   * @dev This is called by AMBs to process messages originating from mirror connector\\n   */\\n  function processMessage(bytes memory _data) external virtual onlyAMB {\\n    _processMessage(_data);\\n    emit MessageProcessed(_data, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Checks the cross domain sender for a given address\\n   */\\n  function verifySender(address _expected) external returns (bool) {\\n    return _verifySender(_expected);\\n  }\\n\\n  // ============ Virtual Functions ============\\n\\n  /**\\n   * @notice This function is used by the Connext contract on the l2 domain to send a message to the\\n   * l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\\n   * @param _data The contents of the message\\n   * @param _encodedData Data used to send the message; specific to connector\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal virtual;\\n\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(\\n    bytes memory /* _data */\\n  ) internal virtual {\\n    // By default, reverts. This is to ensure the call path is not used unless this function is\\n    // overridden by the inheriting class\\n    revert Connector__processMessage_notUsed();\\n  }\\n\\n  /**\\n   * @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\\n   * is the expected address.\\n   * @dev Should be overridden by the implementing Connector contract.\\n   */\\n  function _verifySender(address _expected) internal virtual returns (bool);\\n\\n  // ============ Private Functions ============\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal virtual {\\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\\n    mirrorConnector = _mirrorConnector;\\n  }\\n}\\n\",\"keccak256\":\"0x08d4077a1b5caf9f46491206064bb24bee467dd741b42fed3d30a608eea83368\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/ConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IConnectorManager} from \\\"../interfaces/IConnectorManager.sol\\\";\\nimport {IOutbox} from \\\"../interfaces/IOutbox.sol\\\";\\n\\n/**\\n * @notice This is an interface to allow the `Messaging` contract to be used\\n * as a `XappConnectionManager` on all router contracts.\\n *\\n * @dev Each nomad router contract has a `XappConnectionClient`, which references a\\n * XappConnectionManager to get the `Home` (outbox) and approved `Replica` (inbox)\\n * instances. At any point the client can replace the manager it's pointing to,\\n * changing the underlying messaging connection.\\n */\\nabstract contract ConnectorManager is IConnectorManager {\\n  constructor() {}\\n\\n  function home() public view returns (IOutbox) {\\n    return IOutbox(address(this));\\n  }\\n\\n  function isReplica(address _potentialReplica) public view returns (bool) {\\n    return _potentialReplica == address(this);\\n  }\\n\\n  function localDomain() external view virtual returns (uint32);\\n}\\n\",\"keccak256\":\"0x0112a527de062459aadfc2c8aa59a81c379d53c0f646f7869c6250e343ba91be\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/SpokeConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ReentrancyGuard} from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {ExcessivelySafeCall} from \\\"../../shared/libraries/ExcessivelySafeCall.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {MerkleLib} from \\\"../libraries/MerkleLib.sol\\\";\\nimport {Message} from \\\"../libraries/Message.sol\\\";\\nimport {RateLimited} from \\\"../libraries/RateLimited.sol\\\";\\n\\nimport {MerkleTreeManager} from \\\"../MerkleTreeManager.sol\\\";\\nimport {WatcherClient} from \\\"../WatcherClient.sol\\\";\\n\\nimport {Connector, ProposedOwnable} from \\\"./Connector.sol\\\";\\nimport {ConnectorManager} from \\\"./ConnectorManager.sol\\\";\\n\\n/**\\n * @title SpokeConnector\\n * @author Connext Labs, Inc.\\n * @notice This contract implements the messaging functions needed on the spoke-side of a given AMB.\\n * The SpokeConnector extends the HubConnector functionality by being able to send, store, and prove\\n * messages.\\n *\\n * @dev If you are deploying this contract to mainnet, then the mirror values stored in the HubConnector\\n * will be unused\\n */\\nabstract contract SpokeConnector is Connector, ConnectorManager, WatcherClient, RateLimited, ReentrancyGuard {\\n  // ============ Libraries ============\\n\\n  using MerkleLib for MerkleLib.Tree;\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n  using Message for bytes29;\\n\\n  // ============ Events ============\\n\\n  event SenderAdded(address sender);\\n\\n  event SenderRemoved(address sender);\\n\\n  event AggregateRootReceived(bytes32 root);\\n\\n  event AggregateRootRemoved(bytes32 root);\\n\\n  event AggregateRootVerified(bytes32 indexed root);\\n\\n  event Dispatch(bytes32 leaf, uint256 index, bytes32 root, bytes message);\\n\\n  event Process(bytes32 leaf, bool success, bytes returnData);\\n\\n  event DelayBlocksUpdated(uint256 indexed updated, address caller);\\n\\n  /**\\n   * @notice Emitted when funds are withdrawn by the admin\\n   * @dev See comments in `withdrawFunds`\\n   * @param to The recipient of the funds\\n   * @param amount The amount withdrawn\\n   */\\n  event FundsWithdrawn(address indexed to, uint256 amount);\\n\\n  event MessageProven(bytes32 indexed leaf, bytes32 indexed aggregateRoot, uint256 aggregateIndex);\\n\\n  // ============ Structs ============\\n\\n  // Status of Message:\\n  //   0 - None - message has not been proven or processed\\n  //   1 - Proven - message inclusion proof has been validated\\n  //   2 - Processed - message has been dispatched to recipient\\n  enum MessageStatus {\\n    None,\\n    Proven,\\n    Processed\\n  }\\n\\n  /**\\n   * Struct for submitting a proof for a given message. Used in `proveAndProcess` below.\\n   * @param message Bytes of message to be processed. The hash of this message is considered the leaf.\\n   * @param proof Merkle proof of inclusion for given leaf.\\n   * @param index Index of leaf in home's merkle tree.\\n   */\\n  struct Proof {\\n    bytes message;\\n    bytes32[32] path;\\n    uint256 index;\\n  }\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Number of blocks to delay the processing of a message to allow for watchers to verify\\n   * the validity and pause if necessary.\\n   */\\n  uint256 public delayBlocks;\\n\\n  /**\\n   * @notice MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root\\n   * will be sent crosschain to the hub for aggregation and redistribution.\\n   */\\n  MerkleTreeManager public immutable MERKLE;\\n\\n  /**\\n   * @notice Minimum gas for processing a received message (reserved for handle)\\n   */\\n  uint256 public immutable PROCESS_GAS;\\n\\n  /**\\n   * @notice Reserved gas (to ensure tx completes in case message processing runs out)\\n   */\\n  uint256 public immutable RESERVE_GAS;\\n\\n  /**\\n   * @notice This will hold the commit block for incoming aggregateRoots from the hub chain. Once\\n   * they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can\\n   * be used for proving inclusion of crosschain messages.\\n   *\\n   * @dev NOTE: A commit block of 0 should be considered invalid (it is an empty entry in the\\n   * mapping). We must ALWAYS ensure the value is not 0 before checking whether it has surpassed the\\n   * verification period.\\n   */\\n  mapping(bytes32 => uint256) public pendingAggregateRoots;\\n\\n  /**\\n   * @notice This tracks the roots of the aggregate tree containing outbound roots from all other\\n   * supported domains. The current version is the one that is known to be past the delayBlocks\\n   * time period.\\n   * @dev This root is the root of the tree that is aggregated on mainnet (composed of all the roots\\n   * of previous trees).\\n   */\\n  mapping(bytes32 => bool) public provenAggregateRoots;\\n\\n  /**\\n   * @notice This tracks whether the root has been proven to exist within the given aggregate root.\\n   * @dev Tracking this is an optimization so you dont have to prove inclusion of the same constituent\\n   * root many times.\\n   */\\n  mapping(bytes32 => bool) public provenMessageRoots;\\n\\n  /**\\n   * @notice This mapping records all message roots that have already been sent in order to prevent\\n   * redundant message roots from being sent to hub.\\n   */\\n  mapping(bytes32 => bool) public sentMessageRoots;\\n\\n  /**\\n   * @dev This is used for the `onlyAllowlistedSender` modifier, which gates who\\n   * can send messages using `dispatch`.\\n   */\\n  mapping(address => bool) public allowlistedSenders;\\n\\n  /**\\n   * @notice domain => next available nonce for the domain.\\n   */\\n  mapping(uint32 => uint32) public nonces;\\n\\n  /**\\n   * @notice Mapping of message leaves to MessageStatus, keyed on leaf.\\n   */\\n  mapping(bytes32 => MessageStatus) public messages;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyAllowlistedSender() {\\n    require(allowlistedSenders[msg.sender], \\\"!allowlisted\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new SpokeConnector instance.\\n   * @param _domain The domain this connector lives on.\\n   * @param _mirrorDomain The hub domain.\\n   * @param _amb The address of the AMB on the spoke domain this connector lives on.\\n   * @param _rootManager The address of the RootManager on the hub.\\n   * @param _mirrorConnector The address of the spoke connector.\\n   * @param _processGas The gas costs used in `handle` to ensure meaningful state changes can occur (minimum gas needed\\n   * to handle transaction).\\n   * @param _reserveGas The gas costs reserved when `handle` is called to ensure failures are handled.\\n   * @param _delayBlocks The delay for the validation period for incoming messages in blocks.\\n   * @param _merkle The address of the MerkleTreeManager on this spoke domain.\\n   * @param _watcherManager The address of the WatcherManager to whom this connector is a client.\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    uint256 _processGas,\\n    uint256 _reserveGas,\\n    uint256 _delayBlocks,\\n    address _merkle,\\n    address _watcherManager\\n  )\\n    ConnectorManager()\\n    Connector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector)\\n    WatcherClient(_watcherManager)\\n  {\\n    // Sanity check: constants are reasonable.\\n    require(_processGas > 850_000 - 1, \\\"!process gas\\\");\\n    require(_reserveGas > 15_000 - 1, \\\"!reserve gas\\\");\\n    PROCESS_GAS = _processGas;\\n    RESERVE_GAS = _reserveGas;\\n\\n    require(_merkle != address(0), \\\"!zero merkle\\\");\\n    MERKLE = MerkleTreeManager(_merkle);\\n\\n    delayBlocks = _delayBlocks;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Adds a sender to the allowlist.\\n   * @dev Only allowlisted routers (senders) can call `dispatch`.\\n   */\\n  function addSender(address _sender) public onlyOwner {\\n    allowlistedSenders[_sender] = true;\\n    emit SenderAdded(_sender);\\n  }\\n\\n  /**\\n   * @notice Removes a sender from the allowlist.\\n   * @dev Only allowlisted routers (senders) can call `dispatch`.\\n   */\\n  function removeSender(address _sender) public onlyOwner {\\n    delete allowlistedSenders[_sender];\\n    emit SenderRemoved(_sender);\\n  }\\n\\n  /**\\n   * @notice Set the `delayBlocks`, the period in blocks over which an incoming message\\n   * is verified.\\n   */\\n  function setDelayBlocks(uint256 _delayBlocks) public onlyOwner {\\n    require(_delayBlocks != delayBlocks, \\\"!delayBlocks\\\");\\n    emit DelayBlocksUpdated(_delayBlocks, msg.sender);\\n    delayBlocks = _delayBlocks;\\n  }\\n\\n  /**\\n   * @notice Set the rate limit (number of blocks) at which we can send messages from\\n   * this contract to the hub chain using the `send` method.\\n   * @dev Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\\n   * @param _rateLimit The number of blocks require between sending messages. If set to\\n   * 0, rate limiting for this spoke connector will be disabled.\\n   */\\n  function setRateLimitBlocks(uint256 _rateLimit) public onlyOwner {\\n    _setRateLimitBlocks(_rateLimit);\\n  }\\n\\n  /**\\n   * @notice Manually remove a pending aggregateRoot by owner if the contract is paused.\\n   * @dev This method is required for handling fraud cases in the current construction.\\n   * @param _fraudulentRoot Target fraudulent root that should be erased from the\\n   * `pendingAggregateRoots` mapping.\\n   */\\n  function removePendingAggregateRoot(bytes32 _fraudulentRoot) public onlyOwner whenPaused {\\n    // Sanity check: pending aggregate root exists.\\n    require(pendingAggregateRoots[_fraudulentRoot] != 0, \\\"aggregateRoot !exists\\\");\\n    delete pendingAggregateRoots[_fraudulentRoot];\\n    emit AggregateRootRemoved(_fraudulentRoot);\\n  }\\n\\n  /**\\n   * @notice This function should be callable by owner, and send funds trapped on\\n   * a connector to the provided recipient.\\n   * @dev Withdraws the entire balance of the contract.\\n   *\\n   * @param _to The recipient of the funds withdrawn\\n   */\\n  function withdrawFunds(address _to) public onlyOwner {\\n    uint256 amount = address(this).balance;\\n    Address.sendValue(payable(_to), amount);\\n    emit FundsWithdrawn(_to, amount);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as it is impossible in the\\n   * WatcherClient, and as long as only the owner can remove pending roots in case of\\n   * fraud.\\n   */\\n  function renounceOwnership() public virtual override(ProposedOwnable, WatcherClient) onlyOwner {}\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice This returns the root of all messages with the origin domain as this domain (i.e.\\n   * all outbound messages)\\n   */\\n  function outboundRoot() external view returns (bytes32) {\\n    return MERKLE.root();\\n  }\\n\\n  /**\\n   * @notice This provides the implementation for what is defined in the ConnectorManager\\n   * to avoid storing the domain redundantly\\n   */\\n  function localDomain() external view override returns (uint32) {\\n    return DOMAIN;\\n  }\\n\\n  /**\\n   * @notice This returns the root of all messages with the origin domain as this domain (i.e.\\n   * all outbound messages)\\n   */\\n  function send(bytes memory _encodedData) external payable whenNotPaused rateLimited {\\n    bytes32 root = MERKLE.root();\\n    require(sentMessageRoots[root] == false, \\\"root already sent\\\");\\n    bytes memory _data = abi.encodePacked(root);\\n    _sendMessage(_data, _encodedData);\\n    sentMessageRoots[root] = true;\\n    emit MessageSent(_data, _encodedData, msg.sender);\\n  }\\n\\n  /**\\n   * @notice This function adds transfers to the outbound transfer merkle tree.\\n   * @dev The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \\\"hub\\\"),\\n   * it will be combined into a single aggregate root by RootManager (along with outbound roots from other\\n   * chains). This aggregate root will be redistributed to all destination chains.\\n   *\\n   * NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external onlyAllowlistedSender returns (bytes32, bytes memory) {\\n    // Get the next nonce for the destination domain, then increment it.\\n    uint32 _nonce = nonces[_destinationDomain]++;\\n\\n    // Format the message into packed bytes.\\n    bytes memory _message = Message.formatMessage(\\n      DOMAIN,\\n      TypeCasts.addressToBytes32(msg.sender),\\n      _nonce,\\n      _destinationDomain,\\n      _recipientAddress,\\n      _messageBody\\n    );\\n\\n    // Insert the hashed message into the Merkle tree.\\n    bytes32 _messageHash = keccak256(_message);\\n\\n    // Returns the root calculated after insertion of message, needed for events for\\n    // watchers\\n    (bytes32 _root, uint256 _count) = MERKLE.insert(_messageHash);\\n\\n    // Emit Dispatch event with message information.\\n    // NOTE: Current leaf index is count - 1 since new leaf has already been inserted.\\n    emit Dispatch(_messageHash, _count - 1, _root, _message);\\n    return (_messageHash, _message);\\n  }\\n\\n  /**\\n   * @notice Must be able to call the `handle` function on the BridgeRouter contract. This is called\\n   * on the destination domain to handle incoming messages.\\n   *\\n   * Proving:\\n   * Calculates the expected inbound root from an origin chain given a leaf (message hash),\\n   * the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this\\n   * calculated inbound root is included in the current aggregateRoot, given its index in the aggregator\\n   * tree and the proof of inclusion.\\n   *\\n   * Processing:\\n   * After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for\\n   * execution.\\n   *\\n   * @dev Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they\\n   * must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.\\n   * @dev Intended to be called by the relayer at specific intervals during runtime.\\n   * @dev Will record a calculated root as having been proven if we've already proven that it was included\\n   * in the aggregateRoot.\\n   *\\n   * @param _proofs Batch of Proofs containing messages for proving/processing.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   */\\n  function proveAndProcess(\\n    Proof[] calldata _proofs,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) external whenNotPaused nonReentrant {\\n    // Sanity check: proofs are included.\\n    require(_proofs.length > 0, \\\"!proofs\\\");\\n\\n    // Optimization: calculate the inbound root for the first message in the batch and validate that\\n    // it's included in the aggregator tree. We can use this as a reference for every calculation\\n    // below to minimize storage access calls.\\n    bytes32 _messageHash = keccak256(_proofs[0].message);\\n    // TODO: Could use an array of sharedRoots so you can submit a message batch of messages with\\n    // different origins.\\n    bytes32 _messageRoot = calculateMessageRoot(_messageHash, _proofs[0].path, _proofs[0].index);\\n\\n    // Handle proving this message root is included in the target aggregate root.\\n    proveMessageRoot(_messageRoot, _aggregateRoot, _aggregatePath, _aggregateIndex);\\n    // Assuming the inbound message root was proven, the first message is now considered proven.\\n    messages[_messageHash] = MessageStatus.Proven;\\n\\n    // Now we handle proving all remaining messages in the batch - they should all share the same\\n    // inbound root!\\n    uint256 len = _proofs.length;\\n    for (uint32 i = 1; i < len; ) {\\n      _messageHash = keccak256(_proofs[i].message);\\n      bytes32 _calculatedRoot = calculateMessageRoot(_messageHash, _proofs[i].path, _proofs[i].index);\\n      // Make sure this root matches the validated inbound root.\\n      require(_calculatedRoot == _messageRoot, \\\"!sharedRoot\\\");\\n      // Message is proven!\\n      messages[_messageHash] = MessageStatus.Proven;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // All messages have been proven. We iterate separately here to process each message in the batch.\\n    // NOTE: Going through the proving phase for all messages in the batch BEFORE processing ensures\\n    // we hit reverts before we consume unbounded gas from `process` calls.\\n    for (uint32 i = 0; i < len; ) {\\n      process(_proofs[i].message);\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  // ============ Private Functions ============\\n\\n  /**\\n   * @notice This is either called by the Connector (AKA `this`) on the spoke (L2) chain after retrieving\\n   * latest `aggregateRoot` from the AMB (sourced from mainnet) OR called by the AMB directly.\\n   * @dev Must check the msg.sender on the origin chain to ensure only the root manager is passing\\n   * these roots.\\n   */\\n  function receiveAggregateRoot(bytes32 _newRoot) internal {\\n    require(_newRoot != bytes32(\\\"\\\"), \\\"new root empty\\\");\\n    require(pendingAggregateRoots[_newRoot] == 0, \\\"root already pending\\\");\\n    require(!provenAggregateRoots[_newRoot], \\\"root already proven\\\");\\n\\n    pendingAggregateRoots[_newRoot] = block.number;\\n    emit AggregateRootReceived(_newRoot);\\n  }\\n\\n  /**\\n   * @notice Checks whether the given aggregate root has surpassed the verification period.\\n   * @dev Reverts if the given aggregate root is invalid (does not exist) OR has not surpassed\\n   * verification period.\\n   * @dev If the target aggregate root is pending and HAS surpassed the verification period, then we will\\n   * move it over to the proven mapping.\\n   * @param _aggregateRoot Target aggregate root to verify.\\n   */\\n  function verifyAggregateRoot(bytes32 _aggregateRoot) internal {\\n    // 0. Sanity check: root is not 0.\\n    require(_aggregateRoot != bytes32(\\\"\\\"), \\\"aggregateRoot empty\\\");\\n\\n    // 1. Check to see if the target *aggregate* root has already been proven.\\n    if (provenAggregateRoots[_aggregateRoot]) {\\n      return; // Short circuit if this root is proven.\\n    }\\n\\n    // 2. The target aggregate root must be pending. Aggregate root commit block entry MUST exist.\\n    uint256 _aggregateRootCommitBlock = pendingAggregateRoots[_aggregateRoot];\\n    require(_aggregateRootCommitBlock != 0, \\\"aggregateRoot !exist\\\");\\n\\n    // 3. Pending aggregate root has surpassed the `delayBlocks` verification period.\\n    require(block.number - _aggregateRootCommitBlock >= delayBlocks, \\\"aggregateRoot !verified\\\");\\n\\n    // 4. The target aggregate root has surpassed verification period, we can move it over to the\\n    // proven mapping.\\n    provenAggregateRoots[_aggregateRoot] = true;\\n    emit AggregateRootVerified(_aggregateRoot);\\n    // May as well delete the pending aggregate root entry for the gas refund: it should no longer\\n    // be needed.\\n    delete pendingAggregateRoots[_aggregateRoot];\\n  }\\n\\n  /**\\n   * @notice Checks whether a given message is valid. If so, calculates the expected inbound root from an\\n   * origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion.\\n   * @dev Reverts if message's MessageStatus != None (i.e. if message was already proven or processed).\\n   *\\n   * @param _messageHash Leaf (message hash) that requires proving.\\n   * @param _messagePath Merkle path of inclusion for the leaf.\\n   * @param _messageIndex Index of leaf in the merkle tree on the origin chain of the message.\\n   * @return bytes32 Calculated root.\\n   **/\\n  function calculateMessageRoot(\\n    bytes32 _messageHash,\\n    bytes32[32] calldata _messagePath,\\n    uint256 _messageIndex\\n  ) internal view returns (bytes32) {\\n    // Ensure that the given message has not already been proven and processed.\\n    require(messages[_messageHash] == MessageStatus.None, \\\"!MessageStatus.None\\\");\\n    // Calculate the expected inbound root from the message origin based on the proof.\\n    // NOTE: Assuming a valid message was submitted with correct path/index, this should be an inbound root\\n    // that the hub has received. If the message were invalid, the root calculated here would not exist in the\\n    // aggregate root.\\n    return MerkleLib.branchRoot(_messageHash, _messagePath, _messageIndex);\\n  }\\n\\n  /**\\n   * @notice Prove an inbound message root from another chain is included in the target aggregateRoot.\\n   * @param _messageRoot The message root we want to verify.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   */\\n  function proveMessageRoot(\\n    bytes32 _messageRoot,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) internal {\\n    // 0. Check to see if the root for this batch has already been proven.\\n    if (provenMessageRoots[_messageRoot]) {\\n      // NOTE: It seems counter-intuitive, but we do NOT need to prove the given `_aggregateRoot` param\\n      // is valid IFF the `_messageRoot` has already been proven; we know that the `_messageRoot` has to\\n      // have been included in *some* proven aggregate root historically.\\n      return;\\n    }\\n\\n    // 1. Ensure aggregate root has been proven.\\n    verifyAggregateRoot(_aggregateRoot);\\n\\n    // 2. Calculate an aggregate root, given this inbound root (as leaf), path (proof), and index.\\n    bytes32 _calculatedAggregateRoot = MerkleLib.branchRoot(_messageRoot, _aggregatePath, _aggregateIndex);\\n\\n    // 3. Check to make sure it matches the current aggregate root we have stored.\\n    require(_calculatedAggregateRoot == _aggregateRoot, \\\"invalid inboundRoot\\\");\\n\\n    // This inbound root has been proven. We should specify that to optimize future calls.\\n    provenMessageRoots[_messageRoot] = true;\\n    emit MessageProven(_messageRoot, _aggregateRoot, _aggregateIndex);\\n  }\\n\\n  /**\\n   * @notice Given formatted message, attempts to dispatch message payload to end recipient.\\n   * @dev Recipient must implement a `handle` method (refer to IMessageRecipient.sol)\\n   * Reverts if formatted message's destination domain is not the Replica's domain,\\n   * if message has not been proven,\\n   * or if not enough gas is provided for the dispatch transaction.\\n   * @param _message Formatted message\\n   * @return _success TRUE iff dispatch transaction succeeded\\n   */\\n  function process(bytes memory _message) internal returns (bool _success) {\\n    bytes29 _m = _message.ref(0);\\n    // ensure message was meant for this domain\\n    require(_m.destination() == DOMAIN, \\\"!destination\\\");\\n    // ensure message has been proven\\n    bytes32 _messageHash = _m.keccak();\\n    require(messages[_messageHash] == MessageStatus.Proven, \\\"!proven\\\");\\n    // check re-entrancy guard\\n    // require(entered == 1, \\\"!reentrant\\\");\\n    // entered = 0;\\n    // update message status as processed\\n    messages[_messageHash] = MessageStatus.Processed;\\n    // A call running out of gas TYPICALLY errors the whole tx. We want to\\n    // a) ensure the call has a sufficient amount of gas to make a\\n    //    meaningful state change.\\n    // b) ensure that if the subcall runs out of gas, that the tx as a whole\\n    //    does not revert (i.e. we still mark the message processed)\\n    // To do this, we require that we have enough gas to process\\n    // and still return. We then delegate only the minimum processing gas.\\n    require(gasleft() > PROCESS_GAS + RESERVE_GAS - 1, \\\"!gas\\\");\\n    // get the message recipient\\n    address _recipient = _m.recipientAddress();\\n    // set up for assembly call\\n    uint256 _gas = PROCESS_GAS;\\n    uint16 _maxCopy = 256;\\n    // allocate memory for returndata\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    bytes memory _calldata = abi.encodeWithSignature(\\n      \\\"handle(uint32,uint32,bytes32,bytes)\\\",\\n      _m.origin(),\\n      _m.nonce(),\\n      _m.sender(),\\n      _m.body().clone()\\n    );\\n\\n    (_success, _returnData) = ExcessivelySafeCall.excessivelySafeCall(_recipient, _gas, 0, _maxCopy, _calldata);\\n\\n    // emit process results\\n    emit Process(_messageHash, _success, _returnData);\\n  }\\n}\\n\",\"keccak256\":\"0xde9ea6f462f33e62618d069fddaeed24268d13cfe03abc9dd388824a5e4e3896\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/MerkleLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MerkleLib\\n * @author Illusory Systems Inc.\\n * @notice An incremental merkle tree modeled on the eth2 deposit contract.\\n **/\\nlibrary MerkleLib {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleLib__insert_treeIsFull();\\n\\n  // ============ Constants =============\\n\\n  uint256 internal constant TREE_DEPTH = 32;\\n  uint256 internal constant MAX_LEAVES = 2**TREE_DEPTH - 1;\\n\\n  /**\\n   * @dev Z_i represent the hash values at different heights for a binary tree with leaf values equal to `0`.\\n   * (e.g. Z_1 is the keccak256 hash of (0x0, 0x0), Z_2 is the keccak256 hash of (Z_1, Z_1), etc...)\\n   * Z_0 is the bottom of the 33-layer tree, Z_32 is the top (i.e. root).\\n   * Used to shortcut calculation in root calculation methods below.\\n   */\\n  bytes32 internal constant Z_0 = hex\\\"0000000000000000000000000000000000000000000000000000000000000000\\\";\\n  bytes32 internal constant Z_1 = hex\\\"ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5\\\";\\n  bytes32 internal constant Z_2 = hex\\\"b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30\\\";\\n  bytes32 internal constant Z_3 = hex\\\"21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85\\\";\\n  bytes32 internal constant Z_4 = hex\\\"e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344\\\";\\n  bytes32 internal constant Z_5 = hex\\\"0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d\\\";\\n  bytes32 internal constant Z_6 = hex\\\"887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968\\\";\\n  bytes32 internal constant Z_7 = hex\\\"ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83\\\";\\n  bytes32 internal constant Z_8 = hex\\\"9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af\\\";\\n  bytes32 internal constant Z_9 = hex\\\"cefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0\\\";\\n  bytes32 internal constant Z_10 = hex\\\"f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5\\\";\\n  bytes32 internal constant Z_11 = hex\\\"f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892\\\";\\n  bytes32 internal constant Z_12 = hex\\\"3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c\\\";\\n  bytes32 internal constant Z_13 = hex\\\"c1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb\\\";\\n  bytes32 internal constant Z_14 = hex\\\"5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc\\\";\\n  bytes32 internal constant Z_15 = hex\\\"da7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2\\\";\\n  bytes32 internal constant Z_16 = hex\\\"2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f\\\";\\n  bytes32 internal constant Z_17 = hex\\\"e1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a\\\";\\n  bytes32 internal constant Z_18 = hex\\\"5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0\\\";\\n  bytes32 internal constant Z_19 = hex\\\"b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0\\\";\\n  bytes32 internal constant Z_20 = hex\\\"c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2\\\";\\n  bytes32 internal constant Z_21 = hex\\\"f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9\\\";\\n  bytes32 internal constant Z_22 = hex\\\"5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377\\\";\\n  bytes32 internal constant Z_23 = hex\\\"4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652\\\";\\n  bytes32 internal constant Z_24 = hex\\\"cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef\\\";\\n  bytes32 internal constant Z_25 = hex\\\"0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d\\\";\\n  bytes32 internal constant Z_26 = hex\\\"b8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0\\\";\\n  bytes32 internal constant Z_27 = hex\\\"838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e\\\";\\n  bytes32 internal constant Z_28 = hex\\\"662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e\\\";\\n  bytes32 internal constant Z_29 = hex\\\"388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322\\\";\\n  bytes32 internal constant Z_30 = hex\\\"93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735\\\";\\n  bytes32 internal constant Z_31 = hex\\\"8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9\\\";\\n  bytes32 internal constant Z_32 = hex\\\"27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757\\\";\\n\\n  // ============= Structs ==============\\n\\n  /**\\n   * @notice Struct representing incremental merkle tree. Contains current\\n   * branch and the number of inserted leaves in the tree.\\n   **/\\n  struct Tree {\\n    bytes32[TREE_DEPTH] branch;\\n    uint256 count;\\n  }\\n\\n  // ========= Write Methods =========\\n\\n  /**\\n   * @notice Inserts a given node (leaf) into merkle tree. Operates on an in-memory tree and\\n   * returns an updated version of that tree.\\n   * @dev Reverts if the tree is already full.\\n   * @param node Element to insert into tree.\\n   * @return Tree Updated tree.\\n   **/\\n  function insert(Tree memory tree, bytes32 node) internal pure returns (Tree memory) {\\n    // Update tree.count to increase the current count by 1 since we'll be including a new node.\\n    uint256 size = ++tree.count;\\n    if (size > MAX_LEAVES) revert MerkleLib__insert_treeIsFull();\\n\\n    // Loop starting at 0, ending when we've finished inserting the node (i.e. hashing it) into\\n    // the active branch. Each loop we cut size in half, hashing the inserted node up the active\\n    // branch along the way.\\n    for (uint256 i; i < TREE_DEPTH; ) {\\n      // Check if the current size is odd; if so, we set this index in the branch to be the node.\\n      if ((size & 1) == 1) {\\n        // If i > 0, then this node will be a hash of the original node with every layer up\\n        // until layer `i`.\\n        tree.branch[i] = node;\\n        return tree;\\n      }\\n      // If the size is not yet odd, we hash the current index in the tree branch with the node.\\n      node = keccak256(abi.encodePacked(tree.branch[i], node));\\n      size >>= 1; // Cut size in half (statement equivalent to: `size /= 2`).\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // As the loop should always end prematurely with the `return` statement, this code should\\n    // be unreachable. We revert here just to be safe.\\n    revert MerkleLib__insert_treeIsFull();\\n  }\\n\\n  // ========= Read Methods =========\\n\\n  /**\\n   * @notice Calculates and returns tree's current root.\\n   * @return _current bytes32 root.\\n   **/\\n  function root(Tree storage tree) internal view returns (bytes32 _current) {\\n    uint256 _index = tree.count;\\n\\n    if (_index == 0) {\\n      return Z_32;\\n    }\\n\\n    uint256 i;\\n    assembly {\\n      let TREE_SLOT := tree.slot\\n\\n      for {\\n\\n      } true {\\n\\n      } {\\n        for {\\n\\n        } true {\\n\\n        } {\\n          if and(_index, 1) {\\n            mstore(0, sload(TREE_SLOT))\\n            mstore(0x20, Z_0)\\n            _current := keccak256(0, 0x40)\\n            break\\n          }\\n\\n          if and(_index, shl(1, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 1)))\\n            mstore(0x20, Z_1)\\n            _current := keccak256(0, 0x40)\\n            i := 1\\n            break\\n          }\\n\\n          if and(_index, shl(2, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 2)))\\n            mstore(0x20, Z_2)\\n            _current := keccak256(0, 0x40)\\n            i := 2\\n            break\\n          }\\n\\n          if and(_index, shl(3, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 3)))\\n            mstore(0x20, Z_3)\\n            _current := keccak256(0, 0x40)\\n            i := 3\\n            break\\n          }\\n\\n          if and(_index, shl(4, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 4)))\\n            mstore(0x20, Z_4)\\n            _current := keccak256(0, 0x40)\\n            i := 4\\n            break\\n          }\\n\\n          if and(_index, shl(5, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 5)))\\n            mstore(0x20, Z_5)\\n            _current := keccak256(0, 0x40)\\n            i := 5\\n            break\\n          }\\n\\n          if and(_index, shl(6, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 6)))\\n            mstore(0x20, Z_6)\\n            _current := keccak256(0, 0x40)\\n            i := 6\\n            break\\n          }\\n\\n          if and(_index, shl(7, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 7)))\\n            mstore(0x20, Z_7)\\n            _current := keccak256(0, 0x40)\\n            i := 7\\n            break\\n          }\\n\\n          if and(_index, shl(8, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 8)))\\n            mstore(0x20, Z_8)\\n            _current := keccak256(0, 0x40)\\n            i := 8\\n            break\\n          }\\n\\n          if and(_index, shl(9, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 9)))\\n            mstore(0x20, Z_9)\\n            _current := keccak256(0, 0x40)\\n            i := 9\\n            break\\n          }\\n\\n          if and(_index, shl(10, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 10)))\\n            mstore(0x20, Z_10)\\n            _current := keccak256(0, 0x40)\\n            i := 10\\n            break\\n          }\\n\\n          if and(_index, shl(11, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 11)))\\n            mstore(0x20, Z_11)\\n            _current := keccak256(0, 0x40)\\n            i := 11\\n            break\\n          }\\n\\n          if and(_index, shl(12, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 12)))\\n            mstore(0x20, Z_12)\\n            _current := keccak256(0, 0x40)\\n            i := 12\\n            break\\n          }\\n\\n          if and(_index, shl(13, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 13)))\\n            mstore(0x20, Z_13)\\n            _current := keccak256(0, 0x40)\\n            i := 13\\n            break\\n          }\\n\\n          if and(_index, shl(14, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 14)))\\n            mstore(0x20, Z_14)\\n            _current := keccak256(0, 0x40)\\n            i := 14\\n            break\\n          }\\n\\n          if and(_index, shl(15, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 15)))\\n            mstore(0x20, Z_15)\\n            _current := keccak256(0, 0x40)\\n            i := 15\\n            break\\n          }\\n\\n          if and(_index, shl(16, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 16)))\\n            mstore(0x20, Z_16)\\n            _current := keccak256(0, 0x40)\\n            i := 16\\n            break\\n          }\\n\\n          if and(_index, shl(17, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 17)))\\n            mstore(0x20, Z_17)\\n            _current := keccak256(0, 0x40)\\n            i := 17\\n            break\\n          }\\n\\n          if and(_index, shl(18, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 18)))\\n            mstore(0x20, Z_18)\\n            _current := keccak256(0, 0x40)\\n            i := 18\\n            break\\n          }\\n\\n          if and(_index, shl(19, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 19)))\\n            mstore(0x20, Z_19)\\n            _current := keccak256(0, 0x40)\\n            i := 19\\n            break\\n          }\\n\\n          if and(_index, shl(20, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 20)))\\n            mstore(0x20, Z_20)\\n            _current := keccak256(0, 0x40)\\n            i := 20\\n            break\\n          }\\n\\n          if and(_index, shl(21, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 21)))\\n            mstore(0x20, Z_21)\\n            _current := keccak256(0, 0x40)\\n            i := 21\\n            break\\n          }\\n\\n          if and(_index, shl(22, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 22)))\\n            mstore(0x20, Z_22)\\n            _current := keccak256(0, 0x40)\\n            i := 22\\n            break\\n          }\\n\\n          if and(_index, shl(23, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 23)))\\n            mstore(0x20, Z_23)\\n            _current := keccak256(0, 0x40)\\n            i := 23\\n            break\\n          }\\n\\n          if and(_index, shl(24, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 24)))\\n            mstore(0x20, Z_24)\\n            _current := keccak256(0, 0x40)\\n            i := 24\\n            break\\n          }\\n\\n          if and(_index, shl(25, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 25)))\\n            mstore(0x20, Z_25)\\n            _current := keccak256(0, 0x40)\\n            i := 25\\n            break\\n          }\\n\\n          if and(_index, shl(26, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 26)))\\n            mstore(0x20, Z_26)\\n            _current := keccak256(0, 0x40)\\n            i := 26\\n            break\\n          }\\n\\n          if and(_index, shl(27, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 27)))\\n            mstore(0x20, Z_27)\\n            _current := keccak256(0, 0x40)\\n            i := 27\\n            break\\n          }\\n\\n          if and(_index, shl(28, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 28)))\\n            mstore(0x20, Z_28)\\n            _current := keccak256(0, 0x40)\\n            i := 28\\n            break\\n          }\\n\\n          if and(_index, shl(29, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 29)))\\n            mstore(0x20, Z_29)\\n            _current := keccak256(0, 0x40)\\n            i := 29\\n            break\\n          }\\n\\n          if and(_index, shl(30, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 30)))\\n            mstore(0x20, Z_30)\\n            _current := keccak256(0, 0x40)\\n            i := 30\\n            break\\n          }\\n\\n          if and(_index, shl(31, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 31)))\\n            mstore(0x20, Z_31)\\n            _current := keccak256(0, 0x40)\\n            i := 31\\n            break\\n          }\\n\\n          _current := Z_32\\n          i := 32\\n          break\\n        }\\n\\n        if gt(i, 30) {\\n          break\\n        }\\n\\n        {\\n          if lt(i, 1) {\\n            switch and(_index, shl(1, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_1)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 1)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 2) {\\n            switch and(_index, shl(2, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_2)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 2)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 3) {\\n            switch and(_index, shl(3, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_3)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 3)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 4) {\\n            switch and(_index, shl(4, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_4)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 4)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 5) {\\n            switch and(_index, shl(5, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_5)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 5)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 6) {\\n            switch and(_index, shl(6, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_6)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 6)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 7) {\\n            switch and(_index, shl(7, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_7)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 7)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 8) {\\n            switch and(_index, shl(8, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_8)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 8)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 9) {\\n            switch and(_index, shl(9, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_9)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 9)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 10) {\\n            switch and(_index, shl(10, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_10)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 10)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 11) {\\n            switch and(_index, shl(11, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_11)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 11)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 12) {\\n            switch and(_index, shl(12, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_12)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 12)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 13) {\\n            switch and(_index, shl(13, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_13)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 13)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 14) {\\n            switch and(_index, shl(14, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_14)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 14)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 15) {\\n            switch and(_index, shl(15, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_15)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 15)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 16) {\\n            switch and(_index, shl(16, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_16)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 16)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 17) {\\n            switch and(_index, shl(17, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_17)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 17)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 18) {\\n            switch and(_index, shl(18, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_18)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 18)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 19) {\\n            switch and(_index, shl(19, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_19)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 19)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 20) {\\n            switch and(_index, shl(20, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_20)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 20)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 21) {\\n            switch and(_index, shl(21, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_21)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 21)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 22) {\\n            switch and(_index, shl(22, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_22)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 22)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 23) {\\n            switch and(_index, shl(23, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_23)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 23)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 24) {\\n            switch and(_index, shl(24, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_24)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 24)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 25) {\\n            switch and(_index, shl(25, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_25)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 25)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 26) {\\n            switch and(_index, shl(26, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_26)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 26)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 27) {\\n            switch and(_index, shl(27, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_27)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 27)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 28) {\\n            switch and(_index, shl(28, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_28)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 28)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 29) {\\n            switch and(_index, shl(29, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_29)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 29)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 30) {\\n            switch and(_index, shl(30, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_30)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 30)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 31) {\\n            switch and(_index, shl(31, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_31)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 31)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n        }\\n\\n        break\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the merkle root for the given leaf `_item`,\\n   * a merkle branch, and the index of `_item` in the tree.\\n   * @param _item Merkle leaf\\n   * @param _branch Merkle proof\\n   * @param _index Index of `_item` in tree\\n   * @return _current Calculated merkle root\\n   **/\\n  function branchRoot(\\n    bytes32 _item,\\n    bytes32[TREE_DEPTH] memory _branch,\\n    uint256 _index\\n  ) internal pure returns (bytes32 _current) {\\n    assembly {\\n      _current := _item\\n      let BRANCH_DATA_OFFSET := _branch\\n      let f\\n\\n      f := shl(5, and(_index, 1))\\n      mstore(f, _current)\\n      mstore(sub(0x20, f), mload(BRANCH_DATA_OFFSET))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(1, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 1))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(2, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 2))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(3, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 3))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(4, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 4))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(5, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 5))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(6, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 6))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(7, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 7))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(8, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 8))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(9, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 9))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(10, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 10))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(11, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 11))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(12, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 12))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(13, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 13))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(14, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 14))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(15, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 15))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(16, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 16))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(17, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 17))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(18, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 18))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(19, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 19))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(20, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 20))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(21, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 21))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(22, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 22))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(23, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 23))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(24, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 24))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(25, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 25))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(26, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 26))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(27, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 27))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(28, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 28))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(29, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 29))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(30, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 30))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(31, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 31))))\\n      _current := keccak256(0, 0x40)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08c791dbeef6253813d74e2145183501fe7631c13d5ac9d768036f47b66b693e\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/Message.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\n/**\\n * @title Message Library\\n * @author Illusory Systems Inc.\\n * @notice Library for formatted messages used by Home and Replica.\\n **/\\nlibrary Message {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // Number of bytes in formatted message before `body` field\\n  uint256 internal constant PREFIX_LENGTH = 76;\\n\\n  /**\\n   * @notice Returns formatted (packed) message with provided fields\\n   * @param _originDomain Domain of home chain\\n   * @param _sender Address of sender as bytes32\\n   * @param _nonce Destination-specific nonce\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipient Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes of message body\\n   * @return Formatted message\\n   **/\\n  function formatMessage(\\n    uint32 _originDomain,\\n    bytes32 _sender,\\n    uint32 _nonce,\\n    uint32 _destinationDomain,\\n    bytes32 _recipient,\\n    bytes memory _messageBody\\n  ) internal pure returns (bytes memory) {\\n    return abi.encodePacked(_originDomain, _sender, _nonce, _destinationDomain, _recipient, _messageBody);\\n  }\\n\\n  /**\\n   * @notice Returns leaf of formatted message with provided fields.\\n   * @param _origin Domain of home chain\\n   * @param _sender Address of sender as bytes32\\n   * @param _nonce Destination-specific nonce number\\n   * @param _destination Domain of destination chain\\n   * @param _recipient Address of recipient on destination chain as bytes32\\n   * @param _body Raw bytes of message body\\n   * @return Leaf (hash) of formatted message\\n   **/\\n  function messageHash(\\n    uint32 _origin,\\n    bytes32 _sender,\\n    uint32 _nonce,\\n    uint32 _destination,\\n    bytes32 _recipient,\\n    bytes memory _body\\n  ) internal pure returns (bytes32) {\\n    return keccak256(formatMessage(_origin, _sender, _nonce, _destination, _recipient, _body));\\n  }\\n\\n  /// @notice Returns message's origin field\\n  function origin(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(0, 4));\\n  }\\n\\n  /// @notice Returns message's sender field\\n  function sender(bytes29 _message) internal pure returns (bytes32) {\\n    return _message.index(4, 32);\\n  }\\n\\n  /// @notice Returns message's nonce field\\n  function nonce(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(36, 4));\\n  }\\n\\n  /// @notice Returns message's destination field\\n  function destination(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(40, 4));\\n  }\\n\\n  /// @notice Returns message's recipient field as bytes32\\n  function recipient(bytes29 _message) internal pure returns (bytes32) {\\n    return _message.index(44, 32);\\n  }\\n\\n  /// @notice Returns message's recipient field as an address\\n  function recipientAddress(bytes29 _message) internal pure returns (address) {\\n    return TypeCasts.bytes32ToAddress(recipient(_message));\\n  }\\n\\n  /// @notice Returns message's body field as bytes29 (refer to TypedMemView library for details on bytes29 type)\\n  function body(bytes29 _message) internal pure returns (bytes29) {\\n    return _message.slice(PREFIX_LENGTH, _message.len() - PREFIX_LENGTH, 0);\\n  }\\n\\n  function leaf(bytes29 _message) internal pure returns (bytes32) {\\n    uint256 loc = _message.loc();\\n    uint256 len = _message.len();\\n    /*\\n    prev:\\n    return\\n      messageHash(\\n        origin(_message),\\n        sender(_message),\\n        nonce(_message),\\n        destination(_message),\\n        recipient(_message),\\n        TypedMemView.clone(body(_message))\\n      );\\n\\n      below added for gas optimization\\n     */\\n    bytes32 hash;\\n    assembly {\\n      hash := keccak256(loc, len)\\n    }\\n    return hash;\\n  }\\n}\\n\",\"keccak256\":\"0xa4212f7b88146588e8e0e24cddbc5dae6269618a722b34f00ea322b33fa1f36a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/RateLimited.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice An abstract contract intended to manage the rate limiting aspect of spoke\\n * connector messaging. Rate limiting the number of messages we can send over a span of\\n * blocks is used to mitigate key DoSing vectors for transporting messages between chains.\\n */\\nabstract contract RateLimited {\\n  // ========== Custom Errors ===========\\n\\n  error RateLimited__rateLimited_messageSendRateExceeded();\\n\\n  // ============ Events ============\\n\\n  event SendRateLimitUpdated(address updater, uint256 newRateLimit);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The number of blocks required between message sending events.\\n   * @dev NOTE: This value is 0 by default, meaning that rate limiting functionality\\n   * will naturally be disabled by default.\\n   */\\n  uint256 public rateLimitBlocks;\\n\\n  /**\\n   * @notice Tracks the last block that we sent a message.\\n   */\\n  uint256 public lastSentBlock;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Checks to see if we can send this block, given the current rate limit\\n   * setting and the last block we sent a message. If rate limit has been surpassed,\\n   * we update the `lastSentBlock` to be the current block.\\n   */\\n  modifier rateLimited() {\\n    // Check to make sure we have surpassed the number of rate limit blocks.\\n    if (lastSentBlock + rateLimitBlocks > block.number) {\\n      revert RateLimited__rateLimited_messageSendRateExceeded();\\n    }\\n    // Update the last block we sent a message to be the current one.\\n    lastSentBlock = block.number;\\n    _;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Update the current rate limit to a new value.\\n   */\\n  function _setRateLimitBlocks(uint256 _newRateLimit) internal {\\n    require(_newRateLimit != rateLimitBlocks, \\\"!new rate limit\\\");\\n    // NOTE: Setting the block rate limit interval to 0 will result in rate limiting\\n    // being disabled.\\n    rateLimitBlocks = _newRateLimit;\\n    emit SendRateLimitUpdated(msg.sender, _newRateLimit);\\n  }\\n}\\n\",\"keccak256\":\"0xcc185ae966c87441490aaa8c0779a7b3085961a7b8512d5973f1c34f641eeae3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/ProposedOwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {Initializable} from \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"./ProposedOwnable.sol\\\";\\n\\nabstract contract ProposedOwnableUpgradeable is Initializable, ProposedOwnable {\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial\\n   */\\n  function __ProposedOwnable_init() internal onlyInitializing {\\n    __ProposedOwnable_init_unchained();\\n  }\\n\\n  function __ProposedOwnable_init_unchained() internal onlyInitializing {\\n    _setOwner(msg.sender);\\n  }\\n\\n  /**\\n   * @dev This empty reserved space is put in place to allow future versions to add new\\n   * variables without shifting down storage in the inheritance chain.\\n   * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n   */\\n  uint256[47] private __GAP;\\n}\\n\",\"keccak256\":\"0x2b064b03a25915e93749905ef3aae516ffaac86b8ba9f126b614425b623bf477\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/ExcessivelySafeCall.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// Taken from: https://github.com/nomad-xyz/ExcessivelySafeCall\\n// NOTE: There is a difference between npm latest and github main versions\\n// where the latest github version allows you to specify an ether value.\\n\\nlibrary ExcessivelySafeCall {\\n  uint256 constant LOW_28_MASK = 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _value The value in wei to send to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeCall(\\n    address _target,\\n    uint256 _gas,\\n    uint256 _value,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := call(\\n        _gas, // gas\\n        _target, // recipient\\n        _value, // ether value\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeStaticCall(\\n    address _target,\\n    uint256 _gas,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal view returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := staticcall(\\n        _gas, // gas\\n        _target, // recipient\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /**\\n   * @notice Swaps function selectors in encoded contract calls\\n   * @dev Allows reuse of encoded calldata for functions with identical\\n   * argument types but different names. It simply swaps out the first 4 bytes\\n   * for the new selector. This function modifies memory in place, and should\\n   * only be used with caution.\\n   * @param _newSelector The new 4-byte selector\\n   * @param _buf The encoded contract args\\n   */\\n  function swapSelector(bytes4 _newSelector, bytes memory _buf) internal pure {\\n    require(_buf.length > 4 - 1);\\n    uint256 _mask = LOW_28_MASK;\\n    assembly {\\n      // load the first word of\\n      let _word := mload(add(_buf, 0x20))\\n      // mask out the top 4 bytes\\n      // /x\\n      _word := and(_word, _mask)\\n      _word := or(_newSelector, _word)\\n      mstore(add(_buf, 0x20), _word)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x5472b56fa56886620b1a8e4e2f12f8925500bb237a4dad38651c79db69f0724c\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/SpokeConnector.sol:SpokeConnector","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/SpokeConnector.sol:SpokeConnector","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/SpokeConnector.sol:SpokeConnector","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39051,"contract":"contracts/messaging/connectors/SpokeConnector.sol:SpokeConnector","label":"mirrorConnector","offset":0,"slot":"3","type":"t_address"},{"astId":10590,"contract":"contracts/messaging/connectors/SpokeConnector.sol:SpokeConnector","label":"_paused","offset":20,"slot":"3","type":"t_bool"},{"astId":38824,"contract":"contracts/messaging/connectors/SpokeConnector.sol:SpokeConnector","label":"watcherManager","offset":0,"slot":"4","type":"t_contract(WatcherManager)39005"},{"astId":49639,"contract":"contracts/messaging/connectors/SpokeConnector.sol:SpokeConnector","label":"rateLimitBlocks","offset":0,"slot":"5","type":"t_uint256"},{"astId":49642,"contract":"contracts/messaging/connectors/SpokeConnector.sol:SpokeConnector","label":"lastSentBlock","offset":0,"slot":"6","type":"t_uint256"},{"astId":10691,"contract":"contracts/messaging/connectors/SpokeConnector.sol:SpokeConnector","label":"_status","offset":0,"slot":"7","type":"t_uint256"},{"astId":39546,"contract":"contracts/messaging/connectors/SpokeConnector.sol:SpokeConnector","label":"delayBlocks","offset":0,"slot":"8","type":"t_uint256"},{"astId":39561,"contract":"contracts/messaging/connectors/SpokeConnector.sol:SpokeConnector","label":"pendingAggregateRoots","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":39566,"contract":"contracts/messaging/connectors/SpokeConnector.sol:SpokeConnector","label":"provenAggregateRoots","offset":0,"slot":"10","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39571,"contract":"contracts/messaging/connectors/SpokeConnector.sol:SpokeConnector","label":"provenMessageRoots","offset":0,"slot":"11","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39576,"contract":"contracts/messaging/connectors/SpokeConnector.sol:SpokeConnector","label":"sentMessageRoots","offset":0,"slot":"12","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39581,"contract":"contracts/messaging/connectors/SpokeConnector.sol:SpokeConnector","label":"allowlistedSenders","offset":0,"slot":"13","type":"t_mapping(t_address,t_bool)"},{"astId":39586,"contract":"contracts/messaging/connectors/SpokeConnector.sol:SpokeConnector","label":"nonces","offset":0,"slot":"14","type":"t_mapping(t_uint32,t_uint32)"},{"astId":39592,"contract":"contracts/messaging/connectors/SpokeConnector.sol:SpokeConnector","label":"messages","offset":0,"slot":"15","type":"t_mapping(t_bytes32,t_enum(MessageStatus)39534)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(WatcherManager)39005":{"encoding":"inplace","label":"contract WatcherManager","numberOfBytes":"20"},"t_enum(MessageStatus)39534":{"encoding":"inplace","label":"enum SpokeConnector.MessageStatus","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(MessageStatus)39534)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum SpokeConnector.MessageStatus)","numberOfBytes":"32","value":"t_enum(MessageStatus)39534"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_uint32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => uint32)","numberOfBytes":"32","value":"t_uint32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"}}},"userdoc":{"events":{"FundsWithdrawn(address,uint256)":{"notice":"Emitted when funds are withdrawn by the admin"},"MessageProcessed(bytes,address)":{"notice":"Emitted whenever a message is successfully received over an AMB"},"MessageSent(bytes,bytes,address)":{"notice":"Emitted whenever a message is successfully sent over an AMB"},"WatcherManagerChanged(address)":{"notice":"Emitted when the manager address changes"}},"kind":"user","methods":{"AMB()":{"notice":"Address of the AMB on this domain."},"DOMAIN()":{"notice":"The domain of this Messaging (i.e. Connector) contract."},"MERKLE()":{"notice":"MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root will be sent crosschain to the hub for aggregation and redistribution."},"MIRROR_DOMAIN()":{"notice":"The domain of the corresponding messaging (i.e. Connector) contract."},"PROCESS_GAS()":{"notice":"Minimum gas for processing a received message (reserved for handle)"},"RESERVE_GAS()":{"notice":"Reserved gas (to ensure tx completes in case message processing runs out)"},"ROOT_MANAGER()":{"notice":"RootManager contract address."},"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"addSender(address)":{"notice":"Adds a sender to the allowlist."},"constructor":{"notice":"Creates a new SpokeConnector instance."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"delayBlocks()":{"notice":"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary."},"dispatch(uint32,bytes32,bytes)":{"notice":"This function adds transfers to the outbound transfer merkle tree."},"home()":{"notice":"Get the local inbox contract from the xAppConnectionManager"},"isReplica(address)":{"notice":"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager"},"lastSentBlock()":{"notice":"Tracks the last block that we sent a message."},"localDomain()":{"notice":"This provides the implementation for what is defined in the ConnectorManager to avoid storing the domain redundantly"},"messages(bytes32)":{"notice":"Mapping of message leaves to MessageStatus, keyed on leaf."},"mirrorConnector()":{"notice":"Connector on L2 for L1 connectors, and vice versa."},"nonces(uint32)":{"notice":"domain => next available nonce for the domain."},"outboundRoot()":{"notice":"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)"},"owner()":{"notice":"Returns the address of the current owner."},"pause()":{"notice":"Watchers can pause contracts if fraud is detected"},"pendingAggregateRoots(bytes32)":{"notice":"This will hold the commit block for incoming aggregateRoots from the hub chain. Once they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can be used for proving inclusion of crosschain messages."},"processMessage(bytes)":{"notice":"Processes a message received by an AMB"},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":{"notice":"Must be able to call the `handle` function on the BridgeRouter contract. This is called on the destination domain to handle incoming messages. Proving: Calculates the expected inbound root from an origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this calculated inbound root is included in the current aggregateRoot, given its index in the aggregator tree and the proof of inclusion. Processing: After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for execution."},"provenAggregateRoots(bytes32)":{"notice":"This tracks the roots of the aggregate tree containing outbound roots from all other supported domains. The current version is the one that is known to be past the delayBlocks time period."},"provenMessageRoots(bytes32)":{"notice":"This tracks whether the root has been proven to exist within the given aggregate root."},"rateLimitBlocks()":{"notice":"The number of blocks required between message sending events."},"removePendingAggregateRoot(bytes32)":{"notice":"Manually remove a pending aggregateRoot by owner if the contract is paused."},"removeSender(address)":{"notice":"Removes a sender from the allowlist."},"renounceOwnership()":{"notice":"Remove ability to renounce ownership"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"send(bytes)":{"notice":"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)"},"sentMessageRoots(bytes32)":{"notice":"This mapping records all message roots that have already been sent in order to prevent redundant message roots from being sent to hub."},"setDelayBlocks(uint256)":{"notice":"Set the `delayBlocks`, the period in blocks over which an incoming message is verified."},"setMirrorConnector(address)":{"notice":"Sets the address of the l2Connector for this domain"},"setRateLimitBlocks(uint256)":{"notice":"Set the rate limit (number of blocks) at which we can send messages from this contract to the hub chain using the `send` method."},"setWatcherManager(address)":{"notice":"Owner can enroll a watcher (abilities are defined by inheriting contracts)"},"unpause()":{"notice":"Owner can unpause contracts if fraud is detected by watchers"},"verifySender(address)":{"notice":"Checks the cross domain sender for a given address"},"watcherManager()":{"notice":"The `WatcherManager` contract governs the watcher allowlist."},"withdrawFunds(address)":{"notice":"This function should be callable by owner, and send funds trapped on a connector to the provided recipient."}},"notice":"This contract implements the messaging functions needed on the spoke-side of a given AMB. The SpokeConnector extends the HubConnector functionality by being able to send, store, and prove messages.","version":1}}},"contracts/messaging/connectors/arbitrum/ArbitrumHubConnector.sol":{"ArbitrumHubConnector":{"abi":[{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"uint32","name":"_mirrorDomain","type":"uint32"},{"internalType":"address","name":"_amb","type":"address"},{"internalType":"address","name":"_rootManager","type":"address"},{"internalType":"address","name":"_mirrorConnector","type":"address"},{"internalType":"address","name":"_outbox","type":"address"},{"internalType":"uint256","name":"_maxSubmissionCostCap","type":"uint256"},{"internalType":"uint256","name":"_maxGasCap","type":"uint256"},{"internalType":"uint256","name":"_gasPriceCap","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Connector__processMessage_notUsed","type":"error"},{"inputs":[],"name":"NotCrossChainCall","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"inputs":[],"name":"TypedMemView__index_indexMoreThan32Bytes","type":"error"},{"inputs":[{"internalType":"uint256","name":"loc","type":"uint256"},{"internalType":"uint256","name":"len","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"slice","type":"uint256"}],"name":"TypedMemView__index_overrun","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"GasPriceCapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"MaxGasCapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"MaxSubmissionCapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"encodedData","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"current","type":"address"}],"name":"MirrorConnectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"mirrorDomain","type":"uint32"},{"indexed":false,"internalType":"address","name":"amb","type":"address"},{"indexed":false,"internalType":"address","name":"rootManager","type":"address"},{"indexed":false,"internalType":"address","name":"mirrorConnector","type":"address"}],"name":"NewConnector","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ticketId","type":"uint256"}],"name":"RetryableTicketCreated","type":"event"},{"inputs":[],"name":"AMB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIRROR_DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasPriceCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxGasCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSubmissionCostCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mirrorConnector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"outbox","outputs":[{"internalType":"contract IArbitrumOutbox","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"processMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_nodeNum","type":"uint64"},{"internalType":"bytes32","name":"_sendRoot","type":"bytes32"},{"internalType":"bytes32","name":"_blockHash","type":"bytes32"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"},{"internalType":"uint256","name":"_index","type":"uint256"},{"components":[{"internalType":"address","name":"l2Sender","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"l2Block","type":"uint256"},{"internalType":"uint256","name":"l1Block","type":"uint256"},{"internalType":"uint256","name":"l2Timestamp","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct L2Message","name":"_message","type":"tuple"}],"name":"processMessageFromRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"processed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rollup","outputs":[{"internalType":"contract IArbitrumRollup","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_encodedData","type":"bytes"}],"name":"sendMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"setGasPriceCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"setMaxGasCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"setMaxSubmissionCostCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mirrorConnector","type":"address"}],"name":"setMirrorConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_expected","type":"address"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"events":{"GasPriceCapUpdated(uint256,uint256)":{"params":{"_previous":"The starting value","_updated":"The final value"}},"MaxGasCapUpdated(uint256,uint256)":{"params":{"_previous":"The starting value","_updated":"The final value"}},"MaxSubmissionCapUpdated(uint256,uint256)":{"params":{"_previous":"The starting value","_updated":"The final value"}}},"kind":"dev","methods":{"processMessage(bytes)":{"details":"This is called by AMBs to process messages originating from mirror connector"},"sendMessage(bytes,bytes)":{"details":"This is called by the root manager *only* on mainnet to propagate the aggregate root"},"setGasPriceCap(uint256)":{"params":{"_updated":"The new value"}},"setMaxGasCap(uint256)":{"params":{"_updated":"The new value"}},"setMaxSubmissionCostCap(uint256)":{"params":{"_updated":"The new value"}}},"stateVariables":{"gasPriceCap":{"details":"The value used in `createRetryableTicket` is the lesser of the cap or a value passed in via `_encodedData` in `_sendMessage`. This value represents L2 gas price bid for immediate L2 execution attempt"},"maxGasCap":{"details":"The value used in `createRetryableTicket` is the lesser of the cap or a value passed in via `_encodedData` in `_sendMessage`. This value represents gas limit for immediate L2 execution attempt"},"maxSubmissionCostCap":{"details":"The value used in `createRetryableTicket` is the lesser of the cap or a value passed in via `_encodedData` in `_sendMessage`. This value represents amount of ETH allocated to pay for the base submission fee"}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_39152":{"entryPoint":null,"id":39152,"parameterSlots":5,"returnSlots":0},"@_39396":{"entryPoint":null,"id":39396,"parameterSlots":5,"returnSlots":0},"@_40570":{"entryPoint":null,"id":40570,"parameterSlots":9,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":666,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":565,"id":49908,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":797,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":981,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_addresst_uint256t_uint256t_uint256_fromMemory":{"entryPoint":821,"id":null,"parameterSlots":2,"returnSlots":9},"abi_decode_uint32_fromMemory":{"entryPoint":771,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2786:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"73:108:181","statements":[{"nodeType":"YulAssignment","src":"83:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"98:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"92:5:181"},"nodeType":"YulFunctionCall","src":"92:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"83:5:181"}]},{"body":{"nodeType":"YulBlock","src":"159:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"168:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"171:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"161:6:181"},"nodeType":"YulFunctionCall","src":"161:12:181"},"nodeType":"YulExpressionStatement","src":"161:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"127:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"138:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"145:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"134:3:181"},"nodeType":"YulFunctionCall","src":"134:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"124:2:181"},"nodeType":"YulFunctionCall","src":"124:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"117:6:181"},"nodeType":"YulFunctionCall","src":"117:41:181"},"nodeType":"YulIf","src":"114:61:181"}]},"name":"abi_decode_uint32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"52:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"63:5:181","type":""}],"src":"14:167:181"},{"body":{"nodeType":"YulBlock","src":"246:117:181","statements":[{"nodeType":"YulAssignment","src":"256:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"271:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"265:5:181"},"nodeType":"YulFunctionCall","src":"265:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"256:5:181"}]},{"body":{"nodeType":"YulBlock","src":"341:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"350:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"353:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"343:6:181"},"nodeType":"YulFunctionCall","src":"343:12:181"},"nodeType":"YulExpressionStatement","src":"343:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"300:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"311:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"326:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"331:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"322:3:181"},"nodeType":"YulFunctionCall","src":"322:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"335:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"318:3:181"},"nodeType":"YulFunctionCall","src":"318:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"307:3:181"},"nodeType":"YulFunctionCall","src":"307:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"297:2:181"},"nodeType":"YulFunctionCall","src":"297:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"290:6:181"},"nodeType":"YulFunctionCall","src":"290:50:181"},"nodeType":"YulIf","src":"287:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"225:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"236:5:181","type":""}],"src":"186:177:181"},{"body":{"nodeType":"YulBlock","src":"583:603:181","statements":[{"body":{"nodeType":"YulBlock","src":"630:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"639:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"642:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"632:6:181"},"nodeType":"YulFunctionCall","src":"632:12:181"},"nodeType":"YulExpressionStatement","src":"632:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"604:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"613:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"600:3:181"},"nodeType":"YulFunctionCall","src":"600:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"625:3:181","type":"","value":"288"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"596:3:181"},"nodeType":"YulFunctionCall","src":"596:33:181"},"nodeType":"YulIf","src":"593:53:181"},{"nodeType":"YulAssignment","src":"655:49:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"694:9:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"665:28:181"},"nodeType":"YulFunctionCall","src":"665:39:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"655:6:181"}]},{"nodeType":"YulAssignment","src":"713:58:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"756:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"767:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"752:3:181"},"nodeType":"YulFunctionCall","src":"752:18:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"723:28:181"},"nodeType":"YulFunctionCall","src":"723:48:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"713:6:181"}]},{"nodeType":"YulAssignment","src":"780:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"824:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"835:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"820:3:181"},"nodeType":"YulFunctionCall","src":"820:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"790:29:181"},"nodeType":"YulFunctionCall","src":"790:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"780:6:181"}]},{"nodeType":"YulAssignment","src":"848:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"892:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"903:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"888:3:181"},"nodeType":"YulFunctionCall","src":"888:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"858:29:181"},"nodeType":"YulFunctionCall","src":"858:49:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"848:6:181"}]},{"nodeType":"YulAssignment","src":"916:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"960:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"971:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"956:3:181"},"nodeType":"YulFunctionCall","src":"956:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"926:29:181"},"nodeType":"YulFunctionCall","src":"926:50:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"916:6:181"}]},{"nodeType":"YulAssignment","src":"985:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1029:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1040:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1025:3:181"},"nodeType":"YulFunctionCall","src":"1025:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"995:29:181"},"nodeType":"YulFunctionCall","src":"995:50:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"985:6:181"}]},{"nodeType":"YulAssignment","src":"1054:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1074:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1085:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1070:3:181"},"nodeType":"YulFunctionCall","src":"1070:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1064:5:181"},"nodeType":"YulFunctionCall","src":"1064:26:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"1054:6:181"}]},{"nodeType":"YulAssignment","src":"1099:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1119:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1130:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1115:3:181"},"nodeType":"YulFunctionCall","src":"1115:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1109:5:181"},"nodeType":"YulFunctionCall","src":"1109:26:181"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"1099:6:181"}]},{"nodeType":"YulAssignment","src":"1144:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1164:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1175:3:181","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1160:3:181"},"nodeType":"YulFunctionCall","src":"1160:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1154:5:181"},"nodeType":"YulFunctionCall","src":"1154:26:181"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"1144:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_addresst_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"485:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"496:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"508:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"516:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"524:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"532:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"540:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"548:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"556:6:181","type":""},{"name":"value7","nodeType":"YulTypedName","src":"564:6:181","type":""},{"name":"value8","nodeType":"YulTypedName","src":"572:6:181","type":""}],"src":"368:818:181"},{"body":{"nodeType":"YulBlock","src":"1365:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1382:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1393:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1375:6:181"},"nodeType":"YulFunctionCall","src":"1375:21:181"},"nodeType":"YulExpressionStatement","src":"1375:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1416:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1427:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1412:3:181"},"nodeType":"YulFunctionCall","src":"1412:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1432:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1405:6:181"},"nodeType":"YulFunctionCall","src":"1405:30:181"},"nodeType":"YulExpressionStatement","src":"1405:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1455:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1466:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1451:3:181"},"nodeType":"YulFunctionCall","src":"1451:18:181"},{"hexValue":"656d70747920646f6d61696e","kind":"string","nodeType":"YulLiteral","src":"1471:14:181","type":"","value":"empty domain"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1444:6:181"},"nodeType":"YulFunctionCall","src":"1444:42:181"},"nodeType":"YulExpressionStatement","src":"1444:42:181"},{"nodeType":"YulAssignment","src":"1495:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1507:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1518:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1503:3:181"},"nodeType":"YulFunctionCall","src":"1503:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1495:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1342:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1356:4:181","type":""}],"src":"1191:336:181"},{"body":{"nodeType":"YulBlock","src":"1706:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1723:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1734:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1716:6:181"},"nodeType":"YulFunctionCall","src":"1716:21:181"},"nodeType":"YulExpressionStatement","src":"1716:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1757:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1768:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1753:3:181"},"nodeType":"YulFunctionCall","src":"1753:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1773:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1746:6:181"},"nodeType":"YulFunctionCall","src":"1746:30:181"},"nodeType":"YulExpressionStatement","src":"1746:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1796:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1807:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1792:3:181"},"nodeType":"YulFunctionCall","src":"1792:18:181"},{"hexValue":"656d70747920726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"1812:19:181","type":"","value":"empty rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1785:6:181"},"nodeType":"YulFunctionCall","src":"1785:47:181"},"nodeType":"YulExpressionStatement","src":"1785:47:181"},{"nodeType":"YulAssignment","src":"1841:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1853:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1864:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1849:3:181"},"nodeType":"YulFunctionCall","src":"1849:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1841:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1683:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1697:4:181","type":""}],"src":"1532:341:181"},{"body":{"nodeType":"YulBlock","src":"2035:227:181","statements":[{"nodeType":"YulAssignment","src":"2045:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2057:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2068:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2053:3:181"},"nodeType":"YulFunctionCall","src":"2053:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2045:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"2080:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2098:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2103:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2094:3:181"},"nodeType":"YulFunctionCall","src":"2094:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2107:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2090:3:181"},"nodeType":"YulFunctionCall","src":"2090:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2084:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2125:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2140:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2148:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2136:3:181"},"nodeType":"YulFunctionCall","src":"2136:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2118:6:181"},"nodeType":"YulFunctionCall","src":"2118:34:181"},"nodeType":"YulExpressionStatement","src":"2118:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2172:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2183:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2168:3:181"},"nodeType":"YulFunctionCall","src":"2168:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2192:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2200:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2188:3:181"},"nodeType":"YulFunctionCall","src":"2188:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2161:6:181"},"nodeType":"YulFunctionCall","src":"2161:43:181"},"nodeType":"YulExpressionStatement","src":"2161:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2224:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2235:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2220:3:181"},"nodeType":"YulFunctionCall","src":"2220:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"2244:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2252:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2240:3:181"},"nodeType":"YulFunctionCall","src":"2240:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2213:6:181"},"nodeType":"YulFunctionCall","src":"2213:43:181"},"nodeType":"YulExpressionStatement","src":"2213:43:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1988:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1999:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2007:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2015:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2026:4:181","type":""}],"src":"1878:384:181"},{"body":{"nodeType":"YulBlock","src":"2348:127:181","statements":[{"body":{"nodeType":"YulBlock","src":"2394:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2403:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2406:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2396:6:181"},"nodeType":"YulFunctionCall","src":"2396:12:181"},"nodeType":"YulExpressionStatement","src":"2396:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2369:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2378:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2365:3:181"},"nodeType":"YulFunctionCall","src":"2365:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2390:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2361:3:181"},"nodeType":"YulFunctionCall","src":"2361:32:181"},"nodeType":"YulIf","src":"2358:52:181"},{"nodeType":"YulAssignment","src":"2419:50:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2459:9:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"2429:29:181"},"nodeType":"YulFunctionCall","src":"2429:40:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2419:6:181"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2314:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2325:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2337:6:181","type":""}],"src":"2267:208:181"},{"body":{"nodeType":"YulBlock","src":"2609:175:181","statements":[{"nodeType":"YulAssignment","src":"2619:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2631:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2642:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2627:3:181"},"nodeType":"YulFunctionCall","src":"2627:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2619:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"2654:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2672:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2677:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2668:3:181"},"nodeType":"YulFunctionCall","src":"2668:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2681:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2664:3:181"},"nodeType":"YulFunctionCall","src":"2664:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2658:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2699:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2714:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2722:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2710:3:181"},"nodeType":"YulFunctionCall","src":"2710:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2692:6:181"},"nodeType":"YulFunctionCall","src":"2692:34:181"},"nodeType":"YulExpressionStatement","src":"2692:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2746:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2757:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2742:3:181"},"nodeType":"YulFunctionCall","src":"2742:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2766:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2774:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2762:3:181"},"nodeType":"YulFunctionCall","src":"2762:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2735:6:181"},"nodeType":"YulFunctionCall","src":"2735:43:181"},"nodeType":"YulExpressionStatement","src":"2735:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2570:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2581:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2589:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2600:4:181","type":""}],"src":"2480:304:181"}]},"contents":"{\n    { }\n    function abi_decode_uint32_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_addresst_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8\n    {\n        if slt(sub(dataEnd, headStart), 288) { revert(0, 0) }\n        value0 := abi_decode_uint32_fromMemory(headStart)\n        value1 := abi_decode_uint32_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n        value4 := abi_decode_address_fromMemory(add(headStart, 128))\n        value5 := abi_decode_address_fromMemory(add(headStart, 160))\n        value6 := mload(add(headStart, 192))\n        value7 := mload(add(headStart, 224))\n        value8 := mload(add(headStart, 256))\n    }\n    function abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"empty domain\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"empty rootManager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"6101006040523480156200001257600080fd5b50604051620021f1380380620021f1833981016040819052620000359162000335565b888888888884848484846200004a3362000235565b8463ffffffff16600003620000955760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620000e15760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b60448201526064016200008c565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e052811615620001195762000119816200029a565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a35050600480546001600160a01b0319166001600160a01b038e1690811782556040805163cb23bcb560e01b81529051919a5063cb23bcb599508083019850602097509095508590030192508391508790505afa158015620001d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fc9190620003d5565b600580546001600160a01b0319166001600160a01b039290921691909117905560069290925560075560085550620003fa945050505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b805163ffffffff811681146200031857600080fd5b919050565b80516001600160a01b03811681146200031857600080fd5b60008060008060008060008060006101208a8c0312156200035557600080fd5b620003608a62000303565b98506200037060208b0162000303565b97506200038060408b016200031d565b96506200039060608b016200031d565b9550620003a060808b016200031d565b9450620003b060a08b016200031d565b935060c08a0151925060e08a015191506101008a015190509295985092959850929598565b600060208284031215620003e857600080fd5b620003f3826200031d565b9392505050565b60805160a05160c05160e051611d936200045e60003960008181610227015261095901526000818161032e015281816105da015261098a0152600081816104eb0152818161068f01528181610cc9015261130b015260006102da0152611d936000f3fe6080604052600436106101a05760003560e01c80639ab0563b116100ec578063ce11e6ab1161008a578063d69f9d6111610064578063d69f9d61146104d9578063db1b76591461050d578063e2ce3c641461052d578063fbd4006b1461054357600080fd5b8063ce11e6ab1461047c578063d1851c921461049c578063d232c220146104ba57600080fd5b8063b64d327e116100c6578063b64d327e14610411578063c5b350df14610427578063cb23bcb51461043c578063cc3942831461045c57600080fd5b80639ab0563b146103b15780639d4373a4146103d1578063b1f8100d146103f157600080fd5b80634ff746f6116101595780635f61e3ec116101335780635f61e3ec1461031c5780636a42b8f814610368578063715018a61461037e5780638da5cb5b1461039357600080fd5b80634ff746f6146102a857806352a9674b146102c85780635bd11efc146102fc57600080fd5b806305a79e06146101ac5780630fca49cd146101f157806314168416146102155780633327998d1461025e5780633cf52ffb1461028057806348e6fa231461029557600080fd5b366101a757005b600080fd5b3480156101b857600080fd5b506101dc6101c736600461170b565b60096020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101fd57600080fd5b5061020760065481565b6040519081526020016101e8565b34801561022157600080fd5b506102497f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101e8565b34801561026a57600080fd5b5061027e61027936600461170b565b610563565b005b34801561028c57600080fd5b50600254610207565b61027e6102a33660046117f1565b6105cf565b3480156102b457600080fd5b5061027e6102c3366004611855565b610684565b3480156102d457600080fd5b506102497f000000000000000000000000000000000000000000000000000000000000000081565b34801561030857600080fd5b5061027e6103173660046118a7565b61072a565b34801561032857600080fd5b506103507f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e8565b34801561037457600080fd5b5062093a80610207565b34801561038a57600080fd5b5061027e610761565b34801561039f57600080fd5b506000546001600160a01b0316610350565b3480156103bd57600080fd5b5061027e6103cc36600461170b565b610815565b3480156103dd57600080fd5b5061027e6103ec3660046118f2565b610881565b3480156103fd57600080fd5b5061027e61040c3660046118a7565b610a50565b34801561041d57600080fd5b5061020760075481565b34801561043357600080fd5b5061027e610aee565b34801561044857600080fd5b50600554610350906001600160a01b031681565b34801561046857600080fd5b50600354610350906001600160a01b031681565b34801561048857600080fd5b50600454610350906001600160a01b031681565b3480156104a857600080fd5b506001546001600160a01b0316610350565b3480156104c657600080fd5b506000546001600160a01b0316156101dc565b3480156104e557600080fd5b506103507f000000000000000000000000000000000000000000000000000000000000000081565b34801561051957600080fd5b506101dc6105283660046118a7565b610b5e565b34801561053957600080fd5b5061020760085481565b34801561054f57600080fd5b5061027e61055e36600461170b565b610b6f565b6000546001600160a01b0316331461058e576040516311a8a1bb60e31b815260040160405180910390fd5b60065460408051918252602082018390527f8826388bbfa56ae5df40ee5607d9d354fa66549d854624242c77b5af2a5e4c3b910160405180910390a1600655565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461063b5760405162461bcd60e51b815260206004820152600c60248201526b10b937b7ba26b0b730b3b2b960a11b60448201526064015b60405180910390fd5b6106458282610bdb565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507782823360405161067893929190611a02565b60405180910390a15050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106e55760405162461bcd60e51b81526004016106329060208082526004908201526310a0a6a160e11b604082015260600190565b6106ee81610de4565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced813360405161071f929190611a40565b60405180910390a150565b6000546001600160a01b03163314610755576040516311a8a1bb60e31b815260040160405180910390fd5b61075e81610dfd565b50565b6000546001600160a01b0316331461078c576040516311a8a1bb60e31b815260040160405180910390fd5b62093a806002544261079e9190611a80565b116107bc576040516324e0285f60e21b815260040160405180910390fd5b6002546000036107df57604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b031615610809576040516323295ef960e01b815260040160405180910390fd5b6108136000610e66565b565b6000546001600160a01b03163314610840576040516311a8a1bb60e31b815260040160405180910390fd5b60075460408051918252602082018390527f57bffb29c4c6b672a2e334fa00ea826dba286d6cb34d61bebc6c667abb579c62910160405180910390a1600755565b61088c878787610ecb565b6108998685858585611020565b6108a660c0820182611a93565b90506064146108e15760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610632565b600061094560446020610938846108fb60c0880188611a93565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506111839050565b62ffffff191691906111a7565b60405163473ec9fd60e11b815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690638e7d93fa90604401600060405180830381600087803b1580156109d657600080fd5b505af11580156109ea573d6000803e3d6000fd5b505050507fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced81604051602001610a2291815260200190565b60408051601f1981840301815290829052610a3e913390611a40565b60405180910390a15050505050505050565b6000546001600160a01b03163314610a7b576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610a99575060025415155b15610ab7576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b03808316911603610ae557604051634a2fb73f60e11b815260040160405180910390fd5b61075e816112b6565b6001546001600160a01b03163314610b19576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442610b2b9190611a80565b11610b49576040516324e0285f60e21b815260040160405180910390fd5b600154610813906001600160a01b0316610e66565b6000610b6982611304565b92915050565b6000546001600160a01b03163314610b9a576040516311a8a1bb60e31b815260040160405180910390fd5b60065460408051918252602082018390527f7f46895145f361561c5e9bbaf45b71269a4399dc3064511f123ebf4c6f04e357910160405180910390a1600855565b8151602014610c165760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610632565b6000634ff746f660e01b83604051602401610c319190611ae1565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091528251909150606014610ca65760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610632565b600080600084806020019051810190610cbf9190611af4565b92509250925060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663679b6ded34600360009054906101000a90046001600160a01b03166000610d1b8960065461134a565b6003546007546001600160a01b03909116908190610d3a908c9061134a565b610d468b60085461134a565b8e6040518a63ffffffff1660e01b8152600401610d6a989796959493929190611b22565b60206040518083038185885af1158015610d88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610dad9190611b7d565b60405190915081907fde92b5b7839f4a2c640f5e3bbb66d415458dadc57a487b0c7fa562ed7c9c896f90600090a250505050505050565b6040516316c2fdb560e21b815260040160405180910390fd5b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b604080516020808201849052818301859052825180830384018152606090920190925280519101206000906005546040516324b204d360e21b815267ffffffffffffffff871660048201529192506000916001600160a01b03909116906392c8134c9060240161018060405180830381865afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f739190611ba6565b905081816040015114610fb75760405162461bcd60e51b815260206004820152600c60248201526b21636f6e6669726d4461746160a01b6044820152606401610632565b60008160c0015167ffffffffffffffff16118015610fe3575060008160e0015167ffffffffffffffff16115b6110195760405162461bcd60e51b8152602060048201526007602482015266085cdd185ad95960ca1b6044820152606401610632565b5050505050565b6003546001600160a01b031661103960208301836118a7565b6001600160a01b0316146110825760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b6044820152606401610632565b6004546000906001600160a01b0316639f0c04bf6110a360208501856118a7565b6110b360408601602087016118a7565b60408601356060870135608088013560a08901356110d460c08b018b611a93565b6040518963ffffffff1660e01b81526004016110f7989796959493929190611c78565b602060405180830381865afa158015611114573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111389190611b7d565b905061117b8585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508792508591508a9050611360565b505050505050565b81516000906020840161119e64ffffffffff851682846114f9565b95945050505050565b60008160ff166000036111bc575060006112af565b6111cf8460181c6001600160601b031690565b6001600160601b03166111e560ff841685611ce0565b111561124d576111fe8460781c6001600160601b031690565b6112118560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610632565b60208260ff1611156112725760405163045df3f960e01b815260040160405180910390fd5b60088202600061128b8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91860151909116925050505b9392505050565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600061132f7f0000000000000000000000000000000000000000000000000000000000000000611536565b6001600160a01b0316826001600160a01b0316149050919050565b600081831061135957816112af565b5090919050565b6101008451106113a15760405162461bcd60e51b815260206004820152600c60248201526b0e0e4dedecc40d8cadccee8d60a31b6044820152606401610632565b835183901c156113e45760405162461bcd60e51b815260206004820152600e60248201526d10b6b4b734b6b0b610383937b7b360911b6044820152606401610632565b60008381526009602052604090205460ff161561142b5760405162461bcd60e51b81526020600482015260056024820152641cdc195b9d60da1b6044820152606401610632565b60048054604051627436d360e01b81526000926001600160a01b0390921691627436d39161145f9189918991899101611cf3565b602060405180830381865afa15801561147c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a09190611b7d565b90508181146114da5760405162461bcd60e51b815260206004820152600660248201526510b83937b7b360d11b6044820152606401610632565b5050506000908152600960205260409020805460ff1916600117905550565b6000806115068385611ce0565b9050604051811115611516575060005b8060000361152b5762ffffff199150506112af565b61119e858585611694565b60006001600160a01b03821633146115615760405163253a6fc960e11b815260040160405180910390fd5b6000826001600160a01b031663ab5d89436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c59190611d40565b6001600160a01b03166380648b026040518163ffffffff1660e01b8152600401602060405180830381865afa158015611602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116269190611d40565b90506001600160a01b038116610b695760405162461bcd60e51b815260206004820152602d60248201527f4c6962417262697472756d4c313a2073797374656d206d65737361676573207760448201526c34ba3437baba1039b2b73232b960991b6064820152608401610632565b60006060601883856001600160601b038216821480156116bc575086816001600160601b0316145b6116f55760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610632565b96831b90961790911b90941790931b9392505050565b60006020828403121561171d57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff8111828210171561175e5761175e611724565b60405290565b600082601f83011261177557600080fd5b813567ffffffffffffffff8082111561179057611790611724565b604051601f8301601f19908116603f011681019082821181831017156117b8576117b8611724565b816040528381528660208588010111156117d157600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561180457600080fd5b823567ffffffffffffffff8082111561181c57600080fd5b61182886838701611764565b9350602085013591508082111561183e57600080fd5b5061184b85828601611764565b9150509250929050565b60006020828403121561186757600080fd5b813567ffffffffffffffff81111561187e57600080fd5b61188a84828501611764565b949350505050565b6001600160a01b038116811461075e57600080fd5b6000602082840312156118b957600080fd5b81356112af81611892565b67ffffffffffffffff8116811461075e57600080fd5b600060e082840312156118ec57600080fd5b50919050565b600080600080600080600060c0888a03121561190d57600080fd5b8735611918816118c4565b96506020880135955060408801359450606088013567ffffffffffffffff8082111561194357600080fd5b818a0191508a601f83011261195757600080fd5b81358181111561196657600080fd5b8b60208260051b850101111561197b57600080fd5b6020830196508095505060808a0135935060a08a01359150808211156119a057600080fd5b506119ad8a828b016118da565b91505092959891949750929550565b6000815180845260005b818110156119e2576020818501810151868301820152016119c6565b506000602082860101526020601f19601f83011685010191505092915050565b606081526000611a1560608301866119bc565b8281036020840152611a2781866119bc565b91505060018060a01b0383166040830152949350505050565b604081526000611a5360408301856119bc565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b6957610b69611a6a565b6000808335601e19843603018112611aaa57600080fd5b83018035915067ffffffffffffffff821115611ac557600080fd5b602001915036819003821315611ada57600080fd5b9250929050565b6020815260006112af60208301846119bc565b600080600060608486031215611b0957600080fd5b8351925060208401519150604084015190509250925092565b600061010060018060a01b03808c1684528a602085015289604085015280891660608501528088166080850152508560a08401528460c08401528060e0840152611b6e818401856119bc565b9b9a5050505050505050505050565b600060208284031215611b8f57600080fd5b5051919050565b8051611ba1816118c4565b919050565b60006101808284031215611bb957600080fd5b611bc161173a565b825181526020830151602082015260408301516040820152611be560608401611b96565b6060820152611bf660808401611b96565b6080820152611c0760a08401611b96565b60a0820152611c1860c08401611b96565b60c0820152611c2960e08401611b96565b60e0820152610100611c3c818501611b96565b90820152610120611c4e848201611b96565b90820152610140611c60848201611b96565b90820152610160928301519281019290925250919050565b600060018060a01b03808b168352808a166020840152508760408301528660608301528560808301528460a083015260e060c08301528260e08301526101008385828501376000838501820152601f909301601f191690910190910198975050505050505050565b80820180821115610b6957610b69611a6a565b606080825284519082018190526000906020906080840190828801845b82811015611d2c57815184529284019290840190600101611d10565b505050908301949094525060400152919050565b600060208284031215611d5257600080fd5b81516112af8161189256fea2646970667358221220019042e2fa1ddf40ad2442b13da589ca89a15ac368f145ebe78777a555b27d1b64736f6c63430008110033","opcodes":"PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x21F1 CODESIZE SUB DUP1 PUSH3 0x21F1 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x335 JUMP JUMPDEST DUP9 DUP9 DUP9 DUP9 DUP9 DUP5 DUP5 DUP5 DUP5 DUP5 PUSH3 0x4A CALLER PUSH3 0x235 JUMP JUMPDEST DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0x0 SUB PUSH3 0x95 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x32B6B83A3C903237B6B0B4B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xE1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x32B6B83A3C903937B7BA26B0B730B3B2B9 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x8C JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0xA0 MSTORE DUP4 DUP2 AND PUSH1 0xC0 MSTORE SWAP1 DUP6 AND PUSH1 0xE0 MSTORE DUP2 AND ISZERO PUSH3 0x119 JUMPI PUSH3 0x119 DUP2 PUSH3 0x29A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH4 0xFFFFFFFF DUP7 DUP2 AND SWAP3 SWAP1 DUP9 AND SWAP2 PUSH32 0x4F9C27C2FE3F84576EA469D367D044DA53C45E951617E8389F2B5ED8DB9D25F0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP15 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xCB23BCB5 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP11 POP PUSH4 0xCB23BCB5 SWAP10 POP DUP1 DUP4 ADD SWAP9 POP PUSH1 0x20 SWAP8 POP SWAP1 SWAP6 POP DUP6 SWAP1 SUB ADD SWAP3 POP DUP4 SWAP2 POP DUP8 SWAP1 POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x1D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x1FC SWAP2 SWAP1 PUSH3 0x3D5 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x6 SWAP3 SWAP1 SWAP3 SSTORE PUSH1 0x7 SSTORE PUSH1 0x8 SSTORE POP PUSH3 0x3FA SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH3 0x318 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x318 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x120 DUP11 DUP13 SUB SLT ISZERO PUSH3 0x355 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x360 DUP11 PUSH3 0x303 JUMP JUMPDEST SWAP9 POP PUSH3 0x370 PUSH1 0x20 DUP12 ADD PUSH3 0x303 JUMP JUMPDEST SWAP8 POP PUSH3 0x380 PUSH1 0x40 DUP12 ADD PUSH3 0x31D JUMP JUMPDEST SWAP7 POP PUSH3 0x390 PUSH1 0x60 DUP12 ADD PUSH3 0x31D JUMP JUMPDEST SWAP6 POP PUSH3 0x3A0 PUSH1 0x80 DUP12 ADD PUSH3 0x31D JUMP JUMPDEST SWAP5 POP PUSH3 0x3B0 PUSH1 0xA0 DUP12 ADD PUSH3 0x31D JUMP JUMPDEST SWAP4 POP PUSH1 0xC0 DUP11 ADD MLOAD SWAP3 POP PUSH1 0xE0 DUP11 ADD MLOAD SWAP2 POP PUSH2 0x100 DUP11 ADD MLOAD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x3F3 DUP3 PUSH3 0x31D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x1D93 PUSH3 0x45E PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x227 ADD MSTORE PUSH2 0x959 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x32E ADD MSTORE DUP2 DUP2 PUSH2 0x5DA ADD MSTORE PUSH2 0x98A ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x4EB ADD MSTORE DUP2 DUP2 PUSH2 0x68F ADD MSTORE DUP2 DUP2 PUSH2 0xCC9 ADD MSTORE PUSH2 0x130B ADD MSTORE PUSH1 0x0 PUSH2 0x2DA ADD MSTORE PUSH2 0x1D93 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1A0 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9AB0563B GT PUSH2 0xEC JUMPI DUP1 PUSH4 0xCE11E6AB GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xD69F9D61 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x4D9 JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0xE2CE3C64 EQ PUSH2 0x52D JUMPI DUP1 PUSH4 0xFBD4006B EQ PUSH2 0x543 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xCE11E6AB EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x49C JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x4BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB64D327E GT PUSH2 0xC6 JUMPI DUP1 PUSH4 0xB64D327E EQ PUSH2 0x411 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x427 JUMPI DUP1 PUSH4 0xCB23BCB5 EQ PUSH2 0x43C JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x45C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9AB0563B EQ PUSH2 0x3B1 JUMPI DUP1 PUSH4 0x9D4373A4 EQ PUSH2 0x3D1 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x3F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4FF746F6 GT PUSH2 0x159 JUMPI DUP1 PUSH4 0x5F61E3EC GT PUSH2 0x133 JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x31C JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x368 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x37E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x393 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x2A8 JUMPI DUP1 PUSH4 0x52A9674B EQ PUSH2 0x2C8 JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x2FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5A79E06 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0xFCA49CD EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0x14168416 EQ PUSH2 0x215 JUMPI DUP1 PUSH4 0x3327998D EQ PUSH2 0x25E JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x280 JUMPI DUP1 PUSH4 0x48E6FA23 EQ PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x1A7 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DC PUSH2 0x1C7 CALLDATASIZE PUSH1 0x4 PUSH2 0x170B JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x207 PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27E PUSH2 0x279 CALLDATASIZE PUSH1 0x4 PUSH2 0x170B JUMP JUMPDEST PUSH2 0x563 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x207 JUMP JUMPDEST PUSH2 0x27E PUSH2 0x2A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x17F1 JUMP JUMPDEST PUSH2 0x5CF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27E PUSH2 0x2C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1855 JUMP JUMPDEST PUSH2 0x684 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x308 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27E PUSH2 0x317 CALLDATASIZE PUSH1 0x4 PUSH2 0x18A7 JUMP JUMPDEST PUSH2 0x72A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x328 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x350 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x207 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x38A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27E PUSH2 0x761 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x39F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x350 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27E PUSH2 0x3CC CALLDATASIZE PUSH1 0x4 PUSH2 0x170B JUMP JUMPDEST PUSH2 0x815 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27E PUSH2 0x3EC CALLDATASIZE PUSH1 0x4 PUSH2 0x18F2 JUMP JUMPDEST PUSH2 0x881 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27E PUSH2 0x40C CALLDATASIZE PUSH1 0x4 PUSH2 0x18A7 JUMP JUMPDEST PUSH2 0xA50 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x41D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x207 PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x433 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27E PUSH2 0xAEE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x448 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x5 SLOAD PUSH2 0x350 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x468 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x350 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x350 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x350 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x1DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x350 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DC PUSH2 0x528 CALLDATASIZE PUSH1 0x4 PUSH2 0x18A7 JUMP JUMPDEST PUSH2 0xB5E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x539 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x207 PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x54F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27E PUSH2 0x55E CALLDATASIZE PUSH1 0x4 PUSH2 0x170B JUMP JUMPDEST PUSH2 0xB6F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x58E JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x8826388BBFA56AE5DF40EE5607D9D354FA66549D854624242C77B5AF2A5E4C3B SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x6 SSTORE JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x63B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B937B7BA26B0B730B3B2B9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x645 DUP3 DUP3 PUSH2 0xBDB JUMP JUMPDEST PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 DUP3 DUP3 CALLER PUSH1 0x40 MLOAD PUSH2 0x678 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1A02 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x6E5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x632 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0x6EE DUP2 PUSH2 0xDE4 JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0x71F SWAP3 SWAP2 SWAP1 PUSH2 0x1A40 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x755 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x75E DUP2 PUSH2 0xDFD JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x78C JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x79E SWAP2 SWAP1 PUSH2 0x1A80 JUMP JUMPDEST GT PUSH2 0x7BC JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x7DF JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x809 JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x813 PUSH1 0x0 PUSH2 0xE66 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x840 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x57BFFB29C4C6B672A2E334FA00EA826DBA286D6CB34D61BEBC6C667ABB579C62 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x7 SSTORE JUMP JUMPDEST PUSH2 0x88C DUP8 DUP8 DUP8 PUSH2 0xECB JUMP JUMPDEST PUSH2 0x899 DUP7 DUP6 DUP6 DUP6 DUP6 PUSH2 0x1020 JUMP JUMPDEST PUSH2 0x8A6 PUSH1 0xC0 DUP3 ADD DUP3 PUSH2 0x1A93 JUMP JUMPDEST SWAP1 POP PUSH1 0x64 EQ PUSH2 0x8E1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x945 PUSH1 0x44 PUSH1 0x20 PUSH2 0x938 DUP5 PUSH2 0x8FB PUSH1 0xC0 DUP9 ADD DUP9 PUSH2 0x1A93 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH2 0x1183 SWAP1 POP JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND SWAP2 SWAP1 PUSH2 0x11A7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x473EC9FD PUSH1 0xE1 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF PUSH32 0x0 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x8E7D93FA SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9EA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xA22 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH2 0xA3E SWAP2 CALLER SWAP1 PUSH2 0x1A40 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA7B JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0xA99 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xAB7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0xAE5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x75E DUP2 PUSH2 0x12B6 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB19 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0xB2B SWAP2 SWAP1 PUSH2 0x1A80 JUMP JUMPDEST GT PUSH2 0xB49 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x813 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xE66 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB69 DUP3 PUSH2 0x1304 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB9A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x7F46895145F361561C5E9BBAF45B71269A4399DC3064511F123EBF4C6F04E357 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x8 SSTORE JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0xC16 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST PUSH1 0x0 PUSH4 0x4FF746F6 PUSH1 0xE0 SHL DUP4 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xC31 SWAP2 SWAP1 PUSH2 0x1AE1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE DUP3 MLOAD SWAP1 SWAP2 POP PUSH1 0x60 EQ PUSH2 0xCA6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xCBF SWAP2 SWAP1 PUSH2 0x1AF4 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x679B6DED CALLVALUE PUSH1 0x3 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 PUSH2 0xD1B DUP10 PUSH1 0x6 SLOAD PUSH2 0x134A JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP2 SWAP1 PUSH2 0xD3A SWAP1 DUP13 SWAP1 PUSH2 0x134A JUMP JUMPDEST PUSH2 0xD46 DUP12 PUSH1 0x8 SLOAD PUSH2 0x134A JUMP JUMPDEST DUP15 PUSH1 0x40 MLOAD DUP11 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD6A SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1B22 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD88 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDAD SWAP2 SWAP1 PUSH2 0x1B7D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 SWAP2 POP DUP2 SWAP1 PUSH32 0xDE92B5B7839F4A2C640F5E3BBB66D415458DADC57A487B0C7FA562ED7C9C896F SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x16C2FDB5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP2 DUP4 ADD DUP6 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB DUP5 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 PUSH1 0x0 SWAP1 PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH4 0x24B204D3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x92C8134C SWAP1 PUSH1 0x24 ADD PUSH2 0x180 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF4F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF73 SWAP2 SWAP1 PUSH2 0x1BA6 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 PUSH1 0x40 ADD MLOAD EQ PUSH2 0xFB7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x21636F6E6669726D44617461 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xC0 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND GT DUP1 ISZERO PUSH2 0xFE3 JUMPI POP PUSH1 0x0 DUP2 PUSH1 0xE0 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND GT JUMPDEST PUSH2 0x1019 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x85CDD185AD959 PUSH1 0xCA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1039 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x18A7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1082 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x10B6B4B93937B921B7B73732B1BA37B9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9F0C04BF PUSH2 0x10A3 PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x18A7 JUMP JUMPDEST PUSH2 0x10B3 PUSH1 0x40 DUP7 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x18A7 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0xA0 DUP10 ADD CALLDATALOAD PUSH2 0x10D4 PUSH1 0xC0 DUP12 ADD DUP12 PUSH2 0x1A93 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP10 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x10F7 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1C78 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1114 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1138 SWAP2 SWAP1 PUSH2 0x1B7D JUMP JUMPDEST SWAP1 POP PUSH2 0x117B DUP6 DUP6 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP8 SWAP3 POP DUP6 SWAP2 POP DUP11 SWAP1 POP PUSH2 0x1360 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0x119E PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x14F9 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0x11BC JUMPI POP PUSH1 0x0 PUSH2 0x12AF JUMP JUMPDEST PUSH2 0x11CF DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x11E5 PUSH1 0xFF DUP5 AND DUP6 PUSH2 0x1CE0 JUMP JUMPDEST GT ISZERO PUSH2 0x124D JUMPI PUSH2 0x11FE DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1211 DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x632 JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x1272 JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0x128B DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT DUP5 ADD SAR SWAP2 DUP7 ADD MLOAD SWAP1 SWAP2 AND SWAP3 POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x132F PUSH32 0x0 PUSH2 0x1536 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1359 JUMPI DUP2 PUSH2 0x12AF JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x100 DUP5 MLOAD LT PUSH2 0x13A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0xE0E4DEDECC40D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST DUP4 MLOAD DUP4 SWAP1 SHR ISZERO PUSH2 0x13E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x10B6B4B734B6B0B610383937B7B3 PUSH1 0x91 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x142B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x5 PUSH1 0x24 DUP3 ADD MSTORE PUSH5 0x1CDC195B9D PUSH1 0xDA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH3 0x7436D3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH3 0x7436D3 SWAP2 PUSH2 0x145F SWAP2 DUP10 SWAP2 DUP10 SWAP2 DUP10 SWAP2 ADD PUSH2 0x1CF3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x147C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14A0 SWAP2 SWAP1 PUSH2 0x1B7D JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0x14DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x10B83937B7B3 PUSH1 0xD1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST POP POP POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1506 DUP4 DUP6 PUSH2 0x1CE0 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x1516 JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x152B JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x12AF JUMP JUMPDEST PUSH2 0x119E DUP6 DUP6 DUP6 PUSH2 0x1694 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND CALLER EQ PUSH2 0x1561 JUMPI PUSH1 0x40 MLOAD PUSH4 0x253A6FC9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAB5D8943 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15C5 SWAP2 SWAP1 PUSH2 0x1D40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x80648B02 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1602 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1626 SWAP2 SWAP1 PUSH2 0x1D40 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xB69 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C6962417262697472756D4C313A2073797374656D206D657373616765732077 PUSH1 0x44 DUP3 ADD MSTORE PUSH13 0x34BA3437BABA1039B2B73232B9 PUSH1 0x99 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x632 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0x16BC JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0x16F5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x171D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x180 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x175E JUMPI PUSH2 0x175E PUSH2 0x1724 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1775 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1790 JUMPI PUSH2 0x1790 PUSH2 0x1724 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x17B8 JUMPI PUSH2 0x17B8 PUSH2 0x1724 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x17D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1804 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x181C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1828 DUP7 DUP4 DUP8 ADD PUSH2 0x1764 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x183E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x184B DUP6 DUP3 DUP7 ADD PUSH2 0x1764 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1867 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x187E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x188A DUP5 DUP3 DUP6 ADD PUSH2 0x1764 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x75E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x18B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x12AF DUP2 PUSH2 0x1892 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x75E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x18EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xC0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x190D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x1918 DUP2 PUSH2 0x18C4 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1943 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP11 ADD SWAP2 POP DUP11 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1957 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x1966 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP12 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x197B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP7 POP DUP1 SWAP6 POP POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x19A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19AD DUP11 DUP3 DUP12 ADD PUSH2 0x18DA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x19E2 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x19C6 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1A15 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x19BC JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1A27 DUP2 DUP7 PUSH2 0x19BC JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1A53 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x19BC JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xB69 JUMPI PUSH2 0xB69 PUSH2 0x1A6A JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x1AAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1AC5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x1ADA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x12AF PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x19BC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1B09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP1 DUP13 AND DUP5 MSTORE DUP11 PUSH1 0x20 DUP6 ADD MSTORE DUP10 PUSH1 0x40 DUP6 ADD MSTORE DUP1 DUP10 AND PUSH1 0x60 DUP6 ADD MSTORE DUP1 DUP9 AND PUSH1 0x80 DUP6 ADD MSTORE POP DUP6 PUSH1 0xA0 DUP5 ADD MSTORE DUP5 PUSH1 0xC0 DUP5 ADD MSTORE DUP1 PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x1B6E DUP2 DUP5 ADD DUP6 PUSH2 0x19BC JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1B8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1BA1 DUP2 PUSH2 0x18C4 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1BB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1BC1 PUSH2 0x173A JUMP JUMPDEST DUP3 MLOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x1BE5 PUSH1 0x60 DUP5 ADD PUSH2 0x1B96 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x1BF6 PUSH1 0x80 DUP5 ADD PUSH2 0x1B96 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x1C07 PUSH1 0xA0 DUP5 ADD PUSH2 0x1B96 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x1C18 PUSH1 0xC0 DUP5 ADD PUSH2 0x1B96 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1C29 PUSH1 0xE0 DUP5 ADD PUSH2 0x1B96 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x1C3C DUP2 DUP6 ADD PUSH2 0x1B96 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x1C4E DUP5 DUP3 ADD PUSH2 0x1B96 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x1C60 DUP5 DUP3 ADD PUSH2 0x1B96 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 SWAP3 DUP4 ADD MLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP1 DUP12 AND DUP4 MSTORE DUP1 DUP11 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP8 PUSH1 0x40 DUP4 ADD MSTORE DUP7 PUSH1 0x60 DUP4 ADD MSTORE DUP6 PUSH1 0x80 DUP4 ADD MSTORE DUP5 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xE0 PUSH1 0xC0 DUP4 ADD MSTORE DUP3 PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP4 DUP6 DUP3 DUP6 ADD CALLDATACOPY PUSH1 0x0 DUP4 DUP6 ADD DUP3 ADD MSTORE PUSH1 0x1F SWAP1 SWAP4 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xB69 JUMPI PUSH2 0xB69 PUSH2 0x1A6A JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP5 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x80 DUP5 ADD SWAP1 DUP3 DUP9 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1D2C JUMPI DUP2 MLOAD DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1D10 JUMP JUMPDEST POP POP POP SWAP1 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE POP PUSH1 0x40 ADD MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x12AF DUP2 PUSH2 0x1892 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADD SWAP1 TIMESTAMP 0xE2 STATICCALL SAR 0xDF BLOCKHASH 0xAD 0x24 TIMESTAMP 0xB1 RETURNDATASIZE 0xA5 DUP10 0xCA DUP10 LOG1 GAS 0xC3 PUSH9 0xF145EBE78777A555B2 PUSH30 0x1B64736F6C63430008110033000000000000000000000000000000000000 ","sourceMap":"807:10121:121:-:0;;;3075:565;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3330:7;3339:13;3354:4;3360:12;3374:16;3330:7;3339:13;3354:4;3360:12;3374:16;3038:21:116::1;3048:10;3038:9;:21::i;:::-;3105:7;:12;;3116:1;3105:12:::0;3097:37:::1;;;::::0;-1:-1:-1;;;3097:37:116;;1393:2:181;3097:37:116::1;::::0;::::1;1375:21:181::0;1432:2;1412:18;;;1405:30;-1:-1:-1;;;1451:18:181;;;1444:42;1503:18;;3097:37:116::1;;;;;;;;;-1:-1:-1::0;;;;;3148:26:116;::::1;3140:56;;;::::0;-1:-1:-1;;;3140:56:116;;1734:2:181;3140:56:116::1;::::0;::::1;1716:21:181::0;1773:2;1753:18;;;1746:30;-1:-1:-1;;;1792:18:181;;;1785:47;1849:18;;3140:56:116::1;1532:341:181::0;3140:56:116::1;3308:16;::::0;;::::1;;::::0;-1:-1:-1;;;;;3330:10:116;;::::1;;::::0;3346:27;;::::1;;::::0;3379:29;;::::1;;::::0;3449:30;::::1;::::0;3445:88:::1;;3489:37;3509:16:::0;3489:19:::1;:37::i;:::-;3544:74;::::0;;-1:-1:-1;;;;;2136:15:181;;;2118:34;;2188:15;;;2183:2;2168:18;;2161:43;2240:15;;2220:18;;;2213:43;3544:74:116;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;2068:2:181;3544:74:116;;::::1;-1:-1:-1::0;;3398:6:121::1;:33:::0;;-1:-1:-1;;;;;;3398:33:121::1;-1:-1:-1::0;;;;;3398:33:121;::::1;::::0;;::::1;::::0;;3462:15:::1;::::0;;-1:-1:-1;;;3462:15:121;;;;3398:33;;-1:-1:-1;3462:13:121::1;::::0;-1:-1:-1;3462:15:121;;::::1;::::0;-1:-1:-1;3462:15:121::1;::::0;-1:-1:-1;3462:15:121;;-1:-1:-1;3462:15:121;;;;;-1:-1:-1;3462:15:121;;-1:-1:-1;3398:33:121;;-1:-1:-1;3462:15:121::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3437:6;:41:::0;;-1:-1:-1;;;;;;3437:41:121::1;-1:-1:-1::0;;;;;3437:41:121;;;::::1;::::0;;;::::1;::::0;;3531:20:::1;:44:::0;;;;3581:9:::1;:22:::0;3609:11:::1;:26:::0;-1:-1:-1;807:10121:121;;-1:-1:-1;;;;;807:10121:121;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;5838::116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;2692:34:181;;2762:15;;;2757:2;2742:18;;2735:43;5921:57:116;;2627:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;14:167:181:-;92:13;;145:10;134:22;;124:33;;114:61;;171:1;168;161:12;114:61;14:167;;;:::o;186:177::-;265:13;;-1:-1:-1;;;;;307:31:181;;297:42;;287:70;;353:1;350;343:12;368:818;508:6;516;524;532;540;548;556;564;572;625:3;613:9;604:7;600:23;596:33;593:53;;;642:1;639;632:12;593:53;665:39;694:9;665:39;:::i;:::-;655:49;;723:48;767:2;756:9;752:18;723:48;:::i;:::-;713:58;;790:49;835:2;824:9;820:18;790:49;:::i;:::-;780:59;;858:49;903:2;892:9;888:18;858:49;:::i;:::-;848:59;;926:50;971:3;960:9;956:19;926:50;:::i;:::-;916:60;;995:50;1040:3;1029:9;1025:19;995:50;:::i;:::-;985:60;;1085:3;1074:9;1070:19;1064:26;1054:36;;1130:3;1119:9;1115:19;1109:26;1099:36;;1175:3;1164:9;1160:19;1154:26;1144:36;;368:818;;;;;;;;;;;:::o;2267:208::-;2337:6;2390:2;2378:9;2369:7;2365:23;2361:32;2358:52;;;2406:1;2403;2396:12;2358:52;2429:40;2459:9;2429:40;:::i;:::-;2419:50;2267:208;-1:-1:-1;;;2267:208:181:o;2480:304::-;807:10121:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@AMB_39042":{"entryPoint":null,"id":39042,"parameterSlots":0,"returnSlots":0},"@DOMAIN_39039":{"entryPoint":null,"id":39039,"parameterSlots":0,"returnSlots":0},"@MIRROR_DOMAIN_39048":{"entryPoint":null,"id":39048,"parameterSlots":0,"returnSlots":0},"@ROOT_MANAGER_39045":{"entryPoint":null,"id":39045,"parameterSlots":0,"returnSlots":0},"@_39157":{"entryPoint":null,"id":39157,"parameterSlots":0,"returnSlots":0},"@_confirmHash_40928":{"entryPoint":null,"id":40928,"parameterSlots":2,"returnSlots":1},"@_lesserOf_40658":{"entryPoint":4938,"id":40658,"parameterSlots":2,"returnSlots":1},"@_processMessage_39220":{"entryPoint":3556,"id":39220,"parameterSlots":1,"returnSlots":0},"@_recordOutputAsSpent_40990":{"entryPoint":4960,"id":40990,"parameterSlots":4,"returnSlots":0},"@_sendMessage_40746":{"entryPoint":3035,"id":40746,"parameterSlots":2,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":3581,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":3686,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":4790,"id":49927,"parameterSlots":1,"returnSlots":0},"@_validateMessage_40910":{"entryPoint":4128,"id":40910,"parameterSlots":5,"returnSlots":0},"@_validateSendRoot_40861":{"entryPoint":3787,"id":40861,"parameterSlots":3,"returnSlots":0},"@_verifySender_40640":{"entryPoint":4868,"id":40640,"parameterSlots":1,"returnSlots":1},"@acceptProposedOwner_49887":{"entryPoint":2798,"id":49887,"parameterSlots":0,"returnSlots":0},"@build_50565":{"entryPoint":5369,"id":50565,"parameterSlots":3,"returnSlots":1},"@crossChainSender_9719":{"entryPoint":5430,"id":9719,"parameterSlots":1,"returnSlots":1},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@gasPriceCap_40485":{"entryPoint":null,"id":40485,"parameterSlots":0,"returnSlots":0},"@index_50852":{"entryPoint":4519,"id":50852,"parameterSlots":3,"returnSlots":1},"@isCrossChain_9678":{"entryPoint":null,"id":9678,"parameterSlots":1,"returnSlots":1},"@leftMask_50342":{"entryPoint":null,"id":50342,"parameterSlots":1,"returnSlots":1},"@len_50665":{"entryPoint":null,"id":50665,"parameterSlots":1,"returnSlots":1},"@loc_50615":{"entryPoint":null,"id":50615,"parameterSlots":1,"returnSlots":1},"@maxGasCap_40482":{"entryPoint":null,"id":40482,"parameterSlots":0,"returnSlots":0},"@maxSubmissionCostCap_40479":{"entryPoint":null,"id":40479,"parameterSlots":0,"returnSlots":0},"@mirrorConnector_39051":{"entryPoint":null,"id":39051,"parameterSlots":0,"returnSlots":0},"@outbox_40473":{"entryPoint":null,"id":40473,"parameterSlots":0,"returnSlots":0},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@processMessageFromRoot_40815":{"entryPoint":2177,"id":40815,"parameterSlots":7,"returnSlots":0},"@processMessage_39189":{"entryPoint":1668,"id":39189,"parameterSlots":1,"returnSlots":0},"@processed_40490":{"entryPoint":null,"id":40490,"parameterSlots":0,"returnSlots":0},"@proposeNewOwner_49841":{"entryPoint":2640,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@ref_50591":{"entryPoint":4483,"id":50591,"parameterSlots":2,"returnSlots":1},"@renounceOwnership_49874":{"entryPoint":1889,"id":49874,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@rollup_40476":{"entryPoint":null,"id":40476,"parameterSlots":0,"returnSlots":0},"@sendMessage_39419":{"entryPoint":1487,"id":39419,"parameterSlots":2,"returnSlots":0},"@setGasPriceCap_40624":{"entryPoint":2927,"id":40624,"parameterSlots":1,"returnSlots":0},"@setMaxGasCap_40606":{"entryPoint":2069,"id":40606,"parameterSlots":1,"returnSlots":0},"@setMaxSubmissionCostCap_40588":{"entryPoint":1379,"id":40588,"parameterSlots":1,"returnSlots":0},"@setMirrorConnector_39170":{"entryPoint":1834,"id":39170,"parameterSlots":1,"returnSlots":0},"@unsafeBuildUnchecked_50530":{"entryPoint":5780,"id":50530,"parameterSlots":3,"returnSlots":1},"@verifySender_39202":{"entryPoint":2910,"id":39202,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes":{"entryPoint":5988,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_L2Message_calldata":{"entryPoint":6362,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":6311,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":7488,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes_memory_ptr":{"entryPoint":6229,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr":{"entryPoint":6129,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_struct$_Node_$48266_memory_ptr_fromMemory":{"entryPoint":7078,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":5899,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":7037,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":6900,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint64t_bytes32t_bytes32t_array$_t_bytes32_$dyn_calldata_ptrt_uint256t_struct$_L2Message_$40462_calldata_ptr":{"entryPoint":6386,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_uint64_fromMemory":{"entryPoint":7062,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_bytes":{"entryPoint":6588,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint256_t_uint256_t_bytes_calldata_ptr__to_t_address_t_address_t_uint256_t_uint256_t_uint256_t_uint256_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":7288,"id":null,"parameterSlots":9,"returnSlots":1},"abi_encode_tuple_t_address_t_rational_0_by_1_t_uint256_t_address_t_address_t_uint256_t_uint256_t_bytes_memory_ptr__to_t_address_t_uint256_t_uint256_t_address_t_address_t_uint256_t_uint256_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":6946,"id":null,"parameterSlots":9,"returnSlots":1},"abi_encode_tuple_t_array$_t_bytes32_$dyn_memory_ptr_t_uint256_t_bytes32__to_t_array$_t_bytes32_$dyn_memory_ptr_t_uint256_t_bytes32__fromStack_reversed":{"entryPoint":7411,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":6881,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":6720,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":6658,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_contract$_IArbitrumOutbox_$48239__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IArbitrumRollup_$48276__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_074c928f9cc6a62a1da1b53ff6e65bf75d16d1a0f00aef506fe7fb31f0fea797__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3ec35b7201b3898115e81df5644e6a328a1ab31166b374a7e0d4467479763910__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4668219ae76e9cb73254550f287325fe9549e37f583b0dbd12da792460a151e1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_6257fa65cb3e2131130f078fa0b2c0b28695aa9be00e6235d4f462589ad75bec__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_80b056f9550ecc47107329535d0b0e6d2c94a4e6fda289320403c71d34aecf05__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_95a88df2976f6e0e24378e2dd0fe64cc4cbcc7e4055ddf10761c8f53ffdd40e6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d658411d0561b99f9fb199be39e8001e28574097edaed4471e2c7d7066c63b9a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"access_calldata_tail_t_bytes_calldata_ptr":{"entryPoint":6803,"id":null,"parameterSlots":2,"returnSlots":2},"allocate_memory":{"entryPoint":5946,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":7392,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":6784,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":6762,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":5924,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":6290,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_uint64":{"entryPoint":6340,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:18856:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"84:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:181"},"nodeType":"YulFunctionCall","src":"132:12:181"},"nodeType":"YulExpressionStatement","src":"132:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"105:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"114:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"101:3:181"},"nodeType":"YulFunctionCall","src":"101:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"126:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"97:3:181"},"nodeType":"YulFunctionCall","src":"97:32:181"},"nodeType":"YulIf","src":"94:52:181"},{"nodeType":"YulAssignment","src":"155:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"178:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"165:12:181"},"nodeType":"YulFunctionCall","src":"165:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"155:6:181"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"50:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"61:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"73:6:181","type":""}],"src":"14:180:181"},{"body":{"nodeType":"YulBlock","src":"294:92:181","statements":[{"nodeType":"YulAssignment","src":"304:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"316:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"327:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"312:3:181"},"nodeType":"YulFunctionCall","src":"312:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"304:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"346:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"371:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"364:6:181"},"nodeType":"YulFunctionCall","src":"364:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"357:6:181"},"nodeType":"YulFunctionCall","src":"357:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"339:6:181"},"nodeType":"YulFunctionCall","src":"339:41:181"},"nodeType":"YulExpressionStatement","src":"339:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"263:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"274:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"285:4:181","type":""}],"src":"199:187:181"},{"body":{"nodeType":"YulBlock","src":"492:76:181","statements":[{"nodeType":"YulAssignment","src":"502:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"514:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"525:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"510:3:181"},"nodeType":"YulFunctionCall","src":"510:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"502:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"544:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"555:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"537:6:181"},"nodeType":"YulFunctionCall","src":"537:25:181"},"nodeType":"YulExpressionStatement","src":"537:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"461:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"472:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"483:4:181","type":""}],"src":"391:177:181"},{"body":{"nodeType":"YulBlock","src":"672:93:181","statements":[{"nodeType":"YulAssignment","src":"682:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"694:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"705:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"690:3:181"},"nodeType":"YulFunctionCall","src":"690:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"682:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"724:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"739:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"747:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"735:3:181"},"nodeType":"YulFunctionCall","src":"735:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"717:6:181"},"nodeType":"YulFunctionCall","src":"717:42:181"},"nodeType":"YulExpressionStatement","src":"717:42:181"}]},"name":"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"641:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"652:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"663:4:181","type":""}],"src":"573:192:181"},{"body":{"nodeType":"YulBlock","src":"802:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"819:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"826:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"831:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"822:3:181"},"nodeType":"YulFunctionCall","src":"822:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"812:6:181"},"nodeType":"YulFunctionCall","src":"812:31:181"},"nodeType":"YulExpressionStatement","src":"812:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"859:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"862:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"852:6:181"},"nodeType":"YulFunctionCall","src":"852:15:181"},"nodeType":"YulExpressionStatement","src":"852:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"883:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"886:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"876:6:181"},"nodeType":"YulFunctionCall","src":"876:15:181"},"nodeType":"YulExpressionStatement","src":"876:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"770:127:181"},{"body":{"nodeType":"YulBlock","src":"943:206:181","statements":[{"nodeType":"YulAssignment","src":"953:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"969:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"963:5:181"},"nodeType":"YulFunctionCall","src":"963:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"953:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"981:34:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1003:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1011:3:181","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"999:3:181"},"nodeType":"YulFunctionCall","src":"999:16:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"985:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1090:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1092:16:181"},"nodeType":"YulFunctionCall","src":"1092:18:181"},"nodeType":"YulExpressionStatement","src":"1092:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1033:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"1045:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1030:2:181"},"nodeType":"YulFunctionCall","src":"1030:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1069:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1081:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1066:2:181"},"nodeType":"YulFunctionCall","src":"1066:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1027:2:181"},"nodeType":"YulFunctionCall","src":"1027:62:181"},"nodeType":"YulIf","src":"1024:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1128:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1132:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1121:6:181"},"nodeType":"YulFunctionCall","src":"1121:22:181"},"nodeType":"YulExpressionStatement","src":"1121:22:181"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"932:6:181","type":""}],"src":"902:247:181"},{"body":{"nodeType":"YulBlock","src":"1206:666:181","statements":[{"body":{"nodeType":"YulBlock","src":"1255:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1264:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1267:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1257:6:181"},"nodeType":"YulFunctionCall","src":"1257:12:181"},"nodeType":"YulExpressionStatement","src":"1257:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1234:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1242:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1230:3:181"},"nodeType":"YulFunctionCall","src":"1230:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"1249:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1226:3:181"},"nodeType":"YulFunctionCall","src":"1226:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1219:6:181"},"nodeType":"YulFunctionCall","src":"1219:35:181"},"nodeType":"YulIf","src":"1216:55:181"},{"nodeType":"YulVariableDeclaration","src":"1280:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1303:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1290:12:181"},"nodeType":"YulFunctionCall","src":"1290:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1284:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1319:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1329:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1323:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1370:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1372:16:181"},"nodeType":"YulFunctionCall","src":"1372:18:181"},"nodeType":"YulExpressionStatement","src":"1372:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1362:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"1366:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1359:2:181"},"nodeType":"YulFunctionCall","src":"1359:10:181"},"nodeType":"YulIf","src":"1356:36:181"},{"nodeType":"YulVariableDeclaration","src":"1401:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1415:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1411:3:181"},"nodeType":"YulFunctionCall","src":"1411:7:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"1405:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1427:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1447:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1441:5:181"},"nodeType":"YulFunctionCall","src":"1441:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1431:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1459:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1481:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1505:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1509:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1501:3:181"},"nodeType":"YulFunctionCall","src":"1501:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1516:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1497:3:181"},"nodeType":"YulFunctionCall","src":"1497:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1493:3:181"},"nodeType":"YulFunctionCall","src":"1493:31:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1526:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1489:3:181"},"nodeType":"YulFunctionCall","src":"1489:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1477:3:181"},"nodeType":"YulFunctionCall","src":"1477:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1463:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1589:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1591:16:181"},"nodeType":"YulFunctionCall","src":"1591:18:181"},"nodeType":"YulExpressionStatement","src":"1591:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1548:10:181"},{"name":"_2","nodeType":"YulIdentifier","src":"1560:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1545:2:181"},"nodeType":"YulFunctionCall","src":"1545:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1568:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1580:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1565:2:181"},"nodeType":"YulFunctionCall","src":"1565:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1542:2:181"},"nodeType":"YulFunctionCall","src":"1542:46:181"},"nodeType":"YulIf","src":"1539:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1627:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1631:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1620:6:181"},"nodeType":"YulFunctionCall","src":"1620:22:181"},"nodeType":"YulExpressionStatement","src":"1620:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1658:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1666:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1651:6:181"},"nodeType":"YulFunctionCall","src":"1651:18:181"},"nodeType":"YulExpressionStatement","src":"1651:18:181"},{"body":{"nodeType":"YulBlock","src":"1717:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1726:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1729:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1719:6:181"},"nodeType":"YulFunctionCall","src":"1719:12:181"},"nodeType":"YulExpressionStatement","src":"1719:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1692:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1700:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1688:3:181"},"nodeType":"YulFunctionCall","src":"1688:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1705:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1684:3:181"},"nodeType":"YulFunctionCall","src":"1684:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"1712:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1681:2:181"},"nodeType":"YulFunctionCall","src":"1681:35:181"},"nodeType":"YulIf","src":"1678:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1759:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1767:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1755:3:181"},"nodeType":"YulFunctionCall","src":"1755:17:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1778:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1786:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1774:3:181"},"nodeType":"YulFunctionCall","src":"1774:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1793:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1742:12:181"},"nodeType":"YulFunctionCall","src":"1742:54:181"},"nodeType":"YulExpressionStatement","src":"1742:54:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1820:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1828:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1816:3:181"},"nodeType":"YulFunctionCall","src":"1816:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1833:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1812:3:181"},"nodeType":"YulFunctionCall","src":"1812:26:181"},{"kind":"number","nodeType":"YulLiteral","src":"1840:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1805:6:181"},"nodeType":"YulFunctionCall","src":"1805:37:181"},"nodeType":"YulExpressionStatement","src":"1805:37:181"},{"nodeType":"YulAssignment","src":"1851:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1860:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1851:5:181"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1180:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"1188:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"1196:5:181","type":""}],"src":"1154:718:181"},{"body":{"nodeType":"YulBlock","src":"1982:434:181","statements":[{"body":{"nodeType":"YulBlock","src":"2028:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2037:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2040:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2030:6:181"},"nodeType":"YulFunctionCall","src":"2030:12:181"},"nodeType":"YulExpressionStatement","src":"2030:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2003:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2012:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1999:3:181"},"nodeType":"YulFunctionCall","src":"1999:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2024:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1995:3:181"},"nodeType":"YulFunctionCall","src":"1995:32:181"},"nodeType":"YulIf","src":"1992:52:181"},{"nodeType":"YulVariableDeclaration","src":"2053:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2080:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2067:12:181"},"nodeType":"YulFunctionCall","src":"2067:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2057:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2099:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2109:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2103:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2154:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2163:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2166:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2156:6:181"},"nodeType":"YulFunctionCall","src":"2156:12:181"},"nodeType":"YulExpressionStatement","src":"2156:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2142:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2150:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2139:2:181"},"nodeType":"YulFunctionCall","src":"2139:14:181"},"nodeType":"YulIf","src":"2136:34:181"},{"nodeType":"YulAssignment","src":"2179:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2210:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"2221:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2206:3:181"},"nodeType":"YulFunctionCall","src":"2206:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2230:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"2189:16:181"},"nodeType":"YulFunctionCall","src":"2189:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2179:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2247:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2280:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2291:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2276:3:181"},"nodeType":"YulFunctionCall","src":"2276:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2263:12:181"},"nodeType":"YulFunctionCall","src":"2263:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"2251:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2324:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2333:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2336:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2326:6:181"},"nodeType":"YulFunctionCall","src":"2326:12:181"},"nodeType":"YulExpressionStatement","src":"2326:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"2310:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2320:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2307:2:181"},"nodeType":"YulFunctionCall","src":"2307:16:181"},"nodeType":"YulIf","src":"2304:36:181"},{"nodeType":"YulAssignment","src":"2349:61:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2380:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"2391:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2376:3:181"},"nodeType":"YulFunctionCall","src":"2376:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2402:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"2359:16:181"},"nodeType":"YulFunctionCall","src":"2359:51:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2349:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1940:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1951:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1963:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1971:6:181","type":""}],"src":"1877:539:181"},{"body":{"nodeType":"YulBlock","src":"2500:241:181","statements":[{"body":{"nodeType":"YulBlock","src":"2546:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2555:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2558:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2548:6:181"},"nodeType":"YulFunctionCall","src":"2548:12:181"},"nodeType":"YulExpressionStatement","src":"2548:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2521:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2530:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2517:3:181"},"nodeType":"YulFunctionCall","src":"2517:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2542:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2513:3:181"},"nodeType":"YulFunctionCall","src":"2513:32:181"},"nodeType":"YulIf","src":"2510:52:181"},{"nodeType":"YulVariableDeclaration","src":"2571:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2598:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2585:12:181"},"nodeType":"YulFunctionCall","src":"2585:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2575:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2651:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2660:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2663:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2653:6:181"},"nodeType":"YulFunctionCall","src":"2653:12:181"},"nodeType":"YulExpressionStatement","src":"2653:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2623:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2631:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2620:2:181"},"nodeType":"YulFunctionCall","src":"2620:30:181"},"nodeType":"YulIf","src":"2617:50:181"},{"nodeType":"YulAssignment","src":"2676:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2707:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"2718:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2703:3:181"},"nodeType":"YulFunctionCall","src":"2703:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2727:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"2686:16:181"},"nodeType":"YulFunctionCall","src":"2686:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2676:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2466:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2477:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2489:6:181","type":""}],"src":"2421:320:181"},{"body":{"nodeType":"YulBlock","src":"2791:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"2855:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2864:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2867:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2857:6:181"},"nodeType":"YulFunctionCall","src":"2857:12:181"},"nodeType":"YulExpressionStatement","src":"2857:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2814:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2825:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2840:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2845:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2836:3:181"},"nodeType":"YulFunctionCall","src":"2836:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2849:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2832:3:181"},"nodeType":"YulFunctionCall","src":"2832:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2821:3:181"},"nodeType":"YulFunctionCall","src":"2821:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2811:2:181"},"nodeType":"YulFunctionCall","src":"2811:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2804:6:181"},"nodeType":"YulFunctionCall","src":"2804:50:181"},"nodeType":"YulIf","src":"2801:70:181"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"2780:5:181","type":""}],"src":"2746:131:181"},{"body":{"nodeType":"YulBlock","src":"2952:177:181","statements":[{"body":{"nodeType":"YulBlock","src":"2998:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3007:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3010:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3000:6:181"},"nodeType":"YulFunctionCall","src":"3000:12:181"},"nodeType":"YulExpressionStatement","src":"3000:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2973:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2982:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2969:3:181"},"nodeType":"YulFunctionCall","src":"2969:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2994:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2965:3:181"},"nodeType":"YulFunctionCall","src":"2965:32:181"},"nodeType":"YulIf","src":"2962:52:181"},{"nodeType":"YulVariableDeclaration","src":"3023:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3049:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3036:12:181"},"nodeType":"YulFunctionCall","src":"3036:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3027:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3093:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3068:24:181"},"nodeType":"YulFunctionCall","src":"3068:31:181"},"nodeType":"YulExpressionStatement","src":"3068:31:181"},{"nodeType":"YulAssignment","src":"3108:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"3118:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3108:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2918:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2929:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2941:6:181","type":""}],"src":"2882:247:181"},{"body":{"nodeType":"YulBlock","src":"3235:102:181","statements":[{"nodeType":"YulAssignment","src":"3245:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3257:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3268:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3253:3:181"},"nodeType":"YulFunctionCall","src":"3253:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3245:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3287:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3302:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3318:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3323:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3314:3:181"},"nodeType":"YulFunctionCall","src":"3314:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3327:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3310:3:181"},"nodeType":"YulFunctionCall","src":"3310:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3298:3:181"},"nodeType":"YulFunctionCall","src":"3298:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3280:6:181"},"nodeType":"YulFunctionCall","src":"3280:51:181"},"nodeType":"YulExpressionStatement","src":"3280:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3204:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3215:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3226:4:181","type":""}],"src":"3134:203:181"},{"body":{"nodeType":"YulBlock","src":"3386:85:181","statements":[{"body":{"nodeType":"YulBlock","src":"3449:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3458:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3461:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3451:6:181"},"nodeType":"YulFunctionCall","src":"3451:12:181"},"nodeType":"YulExpressionStatement","src":"3451:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3409:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3420:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"3427:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3416:3:181"},"nodeType":"YulFunctionCall","src":"3416:30:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3406:2:181"},"nodeType":"YulFunctionCall","src":"3406:41:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3399:6:181"},"nodeType":"YulFunctionCall","src":"3399:49:181"},"nodeType":"YulIf","src":"3396:69:181"}]},"name":"validator_revert_uint64","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3375:5:181","type":""}],"src":"3342:129:181"},{"body":{"nodeType":"YulBlock","src":"3548:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"3588:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3597:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3600:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3590:6:181"},"nodeType":"YulFunctionCall","src":"3590:12:181"},"nodeType":"YulExpressionStatement","src":"3590:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"3569:3:181"},{"name":"offset","nodeType":"YulIdentifier","src":"3574:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3565:3:181"},"nodeType":"YulFunctionCall","src":"3565:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"3583:3:181","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3561:3:181"},"nodeType":"YulFunctionCall","src":"3561:26:181"},"nodeType":"YulIf","src":"3558:46:181"},{"nodeType":"YulAssignment","src":"3613:15:181","value":{"name":"offset","nodeType":"YulIdentifier","src":"3622:6:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3613:5:181"}]}]},"name":"abi_decode_struct_L2Message_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3522:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"3530:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3538:5:181","type":""}],"src":"3476:158:181"},{"body":{"nodeType":"YulBlock","src":"3858:975:181","statements":[{"body":{"nodeType":"YulBlock","src":"3905:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3914:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3917:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3907:6:181"},"nodeType":"YulFunctionCall","src":"3907:12:181"},"nodeType":"YulExpressionStatement","src":"3907:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3879:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3888:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3875:3:181"},"nodeType":"YulFunctionCall","src":"3875:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3900:3:181","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3871:3:181"},"nodeType":"YulFunctionCall","src":"3871:33:181"},"nodeType":"YulIf","src":"3868:53:181"},{"nodeType":"YulVariableDeclaration","src":"3930:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3956:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3943:12:181"},"nodeType":"YulFunctionCall","src":"3943:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3934:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3999:5:181"}],"functionName":{"name":"validator_revert_uint64","nodeType":"YulIdentifier","src":"3975:23:181"},"nodeType":"YulFunctionCall","src":"3975:30:181"},"nodeType":"YulExpressionStatement","src":"3975:30:181"},{"nodeType":"YulAssignment","src":"4014:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"4024:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4014:6:181"}]},{"nodeType":"YulAssignment","src":"4038:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4065:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4076:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4061:3:181"},"nodeType":"YulFunctionCall","src":"4061:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4048:12:181"},"nodeType":"YulFunctionCall","src":"4048:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4038:6:181"}]},{"nodeType":"YulAssignment","src":"4089:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4116:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4127:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4112:3:181"},"nodeType":"YulFunctionCall","src":"4112:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4099:12:181"},"nodeType":"YulFunctionCall","src":"4099:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4089:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"4140:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4171:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4182:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4167:3:181"},"nodeType":"YulFunctionCall","src":"4167:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4154:12:181"},"nodeType":"YulFunctionCall","src":"4154:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"4144:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4195:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4205:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4199:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4250:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4259:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4262:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4252:6:181"},"nodeType":"YulFunctionCall","src":"4252:12:181"},"nodeType":"YulExpressionStatement","src":"4252:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4238:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4246:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4235:2:181"},"nodeType":"YulFunctionCall","src":"4235:14:181"},"nodeType":"YulIf","src":"4232:34:181"},{"nodeType":"YulVariableDeclaration","src":"4275:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4289:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"4300:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4285:3:181"},"nodeType":"YulFunctionCall","src":"4285:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"4279:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4355:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4364:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4367:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4357:6:181"},"nodeType":"YulFunctionCall","src":"4357:12:181"},"nodeType":"YulExpressionStatement","src":"4357:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4334:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4338:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4330:3:181"},"nodeType":"YulFunctionCall","src":"4330:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4345:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4326:3:181"},"nodeType":"YulFunctionCall","src":"4326:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4319:6:181"},"nodeType":"YulFunctionCall","src":"4319:35:181"},"nodeType":"YulIf","src":"4316:55:181"},{"nodeType":"YulVariableDeclaration","src":"4380:30:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4407:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4394:12:181"},"nodeType":"YulFunctionCall","src":"4394:16:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"4384:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4437:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4446:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4449:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4439:6:181"},"nodeType":"YulFunctionCall","src":"4439:12:181"},"nodeType":"YulExpressionStatement","src":"4439:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4425:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4433:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4422:2:181"},"nodeType":"YulFunctionCall","src":"4422:14:181"},"nodeType":"YulIf","src":"4419:34:181"},{"body":{"nodeType":"YulBlock","src":"4511:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4520:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4523:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4513:6:181"},"nodeType":"YulFunctionCall","src":"4513:12:181"},"nodeType":"YulExpressionStatement","src":"4513:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4476:2:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4484:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"4487:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4480:3:181"},"nodeType":"YulFunctionCall","src":"4480:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4472:3:181"},"nodeType":"YulFunctionCall","src":"4472:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"4497:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4468:3:181"},"nodeType":"YulFunctionCall","src":"4468:32:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4502:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4465:2:181"},"nodeType":"YulFunctionCall","src":"4465:45:181"},"nodeType":"YulIf","src":"4462:65:181"},{"nodeType":"YulAssignment","src":"4536:21:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4550:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4554:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4546:3:181"},"nodeType":"YulFunctionCall","src":"4546:11:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4536:6:181"}]},{"nodeType":"YulAssignment","src":"4566:16:181","value":{"name":"length","nodeType":"YulIdentifier","src":"4576:6:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"4566:6:181"}]},{"nodeType":"YulAssignment","src":"4591:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4618:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4629:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4614:3:181"},"nodeType":"YulFunctionCall","src":"4614:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4601:12:181"},"nodeType":"YulFunctionCall","src":"4601:33:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"4591:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"4643:49:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4676:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4687:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4672:3:181"},"nodeType":"YulFunctionCall","src":"4672:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4659:12:181"},"nodeType":"YulFunctionCall","src":"4659:33:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"4647:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4721:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4730:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4733:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4723:6:181"},"nodeType":"YulFunctionCall","src":"4723:12:181"},"nodeType":"YulExpressionStatement","src":"4723:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"4707:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4717:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4704:2:181"},"nodeType":"YulFunctionCall","src":"4704:16:181"},"nodeType":"YulIf","src":"4701:36:181"},{"nodeType":"YulAssignment","src":"4746:81:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4797:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"4808:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4793:3:181"},"nodeType":"YulFunctionCall","src":"4793:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4819:7:181"}],"functionName":{"name":"abi_decode_struct_L2Message_calldata","nodeType":"YulIdentifier","src":"4756:36:181"},"nodeType":"YulFunctionCall","src":"4756:71:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"4746:6:181"}]}]},"name":"abi_decode_tuple_t_uint64t_bytes32t_bytes32t_array$_t_bytes32_$dyn_calldata_ptrt_uint256t_struct$_L2Message_$40462_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3776:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3787:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3799:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3807:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3815:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3823:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3831:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3839:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3847:6:181","type":""}],"src":"3639:1194:181"},{"body":{"nodeType":"YulBlock","src":"4964:102:181","statements":[{"nodeType":"YulAssignment","src":"4974:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4986:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4997:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4982:3:181"},"nodeType":"YulFunctionCall","src":"4982:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4974:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5016:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5031:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5047:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5052:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5043:3:181"},"nodeType":"YulFunctionCall","src":"5043:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5056:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5039:3:181"},"nodeType":"YulFunctionCall","src":"5039:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5027:3:181"},"nodeType":"YulFunctionCall","src":"5027:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5009:6:181"},"nodeType":"YulFunctionCall","src":"5009:51:181"},"nodeType":"YulExpressionStatement","src":"5009:51:181"}]},"name":"abi_encode_tuple_t_contract$_IArbitrumRollup_$48276__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4933:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4944:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4955:4:181","type":""}],"src":"4838:228:181"},{"body":{"nodeType":"YulBlock","src":"5197:102:181","statements":[{"nodeType":"YulAssignment","src":"5207:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5219:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5230:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5215:3:181"},"nodeType":"YulFunctionCall","src":"5215:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5207:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5249:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5264:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5280:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5285:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5276:3:181"},"nodeType":"YulFunctionCall","src":"5276:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5289:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5272:3:181"},"nodeType":"YulFunctionCall","src":"5272:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5260:3:181"},"nodeType":"YulFunctionCall","src":"5260:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5242:6:181"},"nodeType":"YulFunctionCall","src":"5242:51:181"},"nodeType":"YulExpressionStatement","src":"5242:51:181"}]},"name":"abi_encode_tuple_t_contract$_IArbitrumOutbox_$48239__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5166:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5177:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5188:4:181","type":""}],"src":"5071:228:181"},{"body":{"nodeType":"YulBlock","src":"5433:119:181","statements":[{"nodeType":"YulAssignment","src":"5443:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5455:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5466:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5451:3:181"},"nodeType":"YulFunctionCall","src":"5451:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5443:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5485:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"5496:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5478:6:181"},"nodeType":"YulFunctionCall","src":"5478:25:181"},"nodeType":"YulExpressionStatement","src":"5478:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5523:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5534:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5519:3:181"},"nodeType":"YulFunctionCall","src":"5519:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"5539:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5512:6:181"},"nodeType":"YulFunctionCall","src":"5512:34:181"},"nodeType":"YulExpressionStatement","src":"5512:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5394:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5405:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5413:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5424:4:181","type":""}],"src":"5304:248:181"},{"body":{"nodeType":"YulBlock","src":"5731:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5748:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5759:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5741:6:181"},"nodeType":"YulFunctionCall","src":"5741:21:181"},"nodeType":"YulExpressionStatement","src":"5741:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5782:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5793:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5778:3:181"},"nodeType":"YulFunctionCall","src":"5778:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5798:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5771:6:181"},"nodeType":"YulFunctionCall","src":"5771:30:181"},"nodeType":"YulExpressionStatement","src":"5771:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5821:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5832:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5817:3:181"},"nodeType":"YulFunctionCall","src":"5817:18:181"},{"hexValue":"21726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"5837:14:181","type":"","value":"!rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5810:6:181"},"nodeType":"YulFunctionCall","src":"5810:42:181"},"nodeType":"YulExpressionStatement","src":"5810:42:181"},{"nodeType":"YulAssignment","src":"5861:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5873:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5884:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5869:3:181"},"nodeType":"YulFunctionCall","src":"5869:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5861:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5708:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5722:4:181","type":""}],"src":"5557:336:181"},{"body":{"nodeType":"YulBlock","src":"5947:373:181","statements":[{"nodeType":"YulVariableDeclaration","src":"5957:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5977:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5971:5:181"},"nodeType":"YulFunctionCall","src":"5971:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"5961:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5999:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"6004:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5992:6:181"},"nodeType":"YulFunctionCall","src":"5992:19:181"},"nodeType":"YulExpressionStatement","src":"5992:19:181"},{"nodeType":"YulVariableDeclaration","src":"6020:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6029:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"6024:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6091:110:181","statements":[{"nodeType":"YulVariableDeclaration","src":"6105:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6115:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6109:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6147:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"6152:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6143:3:181"},"nodeType":"YulFunctionCall","src":"6143:11:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6156:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6139:3:181"},"nodeType":"YulFunctionCall","src":"6139:20:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6175:5:181"},{"name":"i","nodeType":"YulIdentifier","src":"6182:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6171:3:181"},"nodeType":"YulFunctionCall","src":"6171:13:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6186:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6167:3:181"},"nodeType":"YulFunctionCall","src":"6167:22:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6161:5:181"},"nodeType":"YulFunctionCall","src":"6161:29:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6132:6:181"},"nodeType":"YulFunctionCall","src":"6132:59:181"},"nodeType":"YulExpressionStatement","src":"6132:59:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6050:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"6053:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6047:2:181"},"nodeType":"YulFunctionCall","src":"6047:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6061:21:181","statements":[{"nodeType":"YulAssignment","src":"6063:17:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6072:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"6075:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6068:3:181"},"nodeType":"YulFunctionCall","src":"6068:12:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"6063:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"6043:3:181","statements":[]},"src":"6039:162:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6225:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"6230:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6221:3:181"},"nodeType":"YulFunctionCall","src":"6221:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"6239:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6217:3:181"},"nodeType":"YulFunctionCall","src":"6217:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"6246:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6210:6:181"},"nodeType":"YulFunctionCall","src":"6210:38:181"},"nodeType":"YulExpressionStatement","src":"6210:38:181"},{"nodeType":"YulAssignment","src":"6257:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6272:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6285:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6293:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6281:3:181"},"nodeType":"YulFunctionCall","src":"6281:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6302:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6298:3:181"},"nodeType":"YulFunctionCall","src":"6298:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6277:3:181"},"nodeType":"YulFunctionCall","src":"6277:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6268:3:181"},"nodeType":"YulFunctionCall","src":"6268:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"6309:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6264:3:181"},"nodeType":"YulFunctionCall","src":"6264:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"6257:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5924:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5931:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"5939:3:181","type":""}],"src":"5898:422:181"},{"body":{"nodeType":"YulBlock","src":"6518:281:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6535:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6546:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6528:6:181"},"nodeType":"YulFunctionCall","src":"6528:21:181"},"nodeType":"YulExpressionStatement","src":"6528:21:181"},{"nodeType":"YulVariableDeclaration","src":"6558:58:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6589:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6601:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6612:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6597:3:181"},"nodeType":"YulFunctionCall","src":"6597:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"6572:16:181"},"nodeType":"YulFunctionCall","src":"6572:44:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"6562:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6636:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6647:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6632:3:181"},"nodeType":"YulFunctionCall","src":"6632:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"6656:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6664:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6652:3:181"},"nodeType":"YulFunctionCall","src":"6652:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6625:6:181"},"nodeType":"YulFunctionCall","src":"6625:50:181"},"nodeType":"YulExpressionStatement","src":"6625:50:181"},{"nodeType":"YulAssignment","src":"6684:40:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6709:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"6717:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"6692:16:181"},"nodeType":"YulFunctionCall","src":"6692:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6684:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6744:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6755:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6740:3:181"},"nodeType":"YulFunctionCall","src":"6740:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"6764:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6780:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6785:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6776:3:181"},"nodeType":"YulFunctionCall","src":"6776:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"6789:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6772:3:181"},"nodeType":"YulFunctionCall","src":"6772:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6760:3:181"},"nodeType":"YulFunctionCall","src":"6760:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6733:6:181"},"nodeType":"YulFunctionCall","src":"6733:60:181"},"nodeType":"YulExpressionStatement","src":"6733:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6471:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6482:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6490:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6498:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6509:4:181","type":""}],"src":"6325:474:181"},{"body":{"nodeType":"YulBlock","src":"6978:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6995:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7006:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6988:6:181"},"nodeType":"YulFunctionCall","src":"6988:21:181"},"nodeType":"YulExpressionStatement","src":"6988:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7029:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7040:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7025:3:181"},"nodeType":"YulFunctionCall","src":"7025:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7045:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7018:6:181"},"nodeType":"YulFunctionCall","src":"7018:29:181"},"nodeType":"YulExpressionStatement","src":"7018:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7067:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7078:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7063:3:181"},"nodeType":"YulFunctionCall","src":"7063:18:181"},{"hexValue":"21414d42","kind":"string","nodeType":"YulLiteral","src":"7083:6:181","type":"","value":"!AMB"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7056:6:181"},"nodeType":"YulFunctionCall","src":"7056:34:181"},"nodeType":"YulExpressionStatement","src":"7056:34:181"},{"nodeType":"YulAssignment","src":"7099:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7111:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7122:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7107:3:181"},"nodeType":"YulFunctionCall","src":"7107:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7099:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6955:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6969:4:181","type":""}],"src":"6804:327:181"},{"body":{"nodeType":"YulBlock","src":"7283:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7300:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7311:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7293:6:181"},"nodeType":"YulFunctionCall","src":"7293:21:181"},"nodeType":"YulExpressionStatement","src":"7293:21:181"},{"nodeType":"YulAssignment","src":"7323:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7348:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7360:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7371:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7356:3:181"},"nodeType":"YulFunctionCall","src":"7356:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"7331:16:181"},"nodeType":"YulFunctionCall","src":"7331:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7323:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7395:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7406:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7391:3:181"},"nodeType":"YulFunctionCall","src":"7391:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"7415:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7431:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"7436:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7427:3:181"},"nodeType":"YulFunctionCall","src":"7427:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"7440:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7423:3:181"},"nodeType":"YulFunctionCall","src":"7423:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7411:3:181"},"nodeType":"YulFunctionCall","src":"7411:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7384:6:181"},"nodeType":"YulFunctionCall","src":"7384:60:181"},"nodeType":"YulExpressionStatement","src":"7384:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7244:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7255:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7263:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7274:4:181","type":""}],"src":"7136:314:181"},{"body":{"nodeType":"YulBlock","src":"7487:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7504:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7511:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"7516:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7507:3:181"},"nodeType":"YulFunctionCall","src":"7507:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7497:6:181"},"nodeType":"YulFunctionCall","src":"7497:31:181"},"nodeType":"YulExpressionStatement","src":"7497:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7544:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7547:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7537:6:181"},"nodeType":"YulFunctionCall","src":"7537:15:181"},"nodeType":"YulExpressionStatement","src":"7537:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7568:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7571:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7561:6:181"},"nodeType":"YulFunctionCall","src":"7561:15:181"},"nodeType":"YulExpressionStatement","src":"7561:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"7455:127:181"},{"body":{"nodeType":"YulBlock","src":"7636:79:181","statements":[{"nodeType":"YulAssignment","src":"7646:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7658:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"7661:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7654:3:181"},"nodeType":"YulFunctionCall","src":"7654:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"7646:4:181"}]},{"body":{"nodeType":"YulBlock","src":"7687:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7689:16:181"},"nodeType":"YulFunctionCall","src":"7689:18:181"},"nodeType":"YulExpressionStatement","src":"7689:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"7678:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"7684:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7675:2:181"},"nodeType":"YulFunctionCall","src":"7675:11:181"},"nodeType":"YulIf","src":"7672:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"7618:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"7621:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"7627:4:181","type":""}],"src":"7587:128:181"},{"body":{"nodeType":"YulBlock","src":"7814:427:181","statements":[{"nodeType":"YulVariableDeclaration","src":"7824:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"7863:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7850:12:181"},"nodeType":"YulFunctionCall","src":"7850:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"7828:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7964:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7973:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7976:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7966:6:181"},"nodeType":"YulFunctionCall","src":"7966:12:181"},"nodeType":"YulExpressionStatement","src":"7966:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"7898:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"7926:12:181"},"nodeType":"YulFunctionCall","src":"7926:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"7942:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7922:3:181"},"nodeType":"YulFunctionCall","src":"7922:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7957:2:181","type":"","value":"30"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7953:3:181"},"nodeType":"YulFunctionCall","src":"7953:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7918:3:181"},"nodeType":"YulFunctionCall","src":"7918:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7894:3:181"},"nodeType":"YulFunctionCall","src":"7894:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7887:6:181"},"nodeType":"YulFunctionCall","src":"7887:76:181"},"nodeType":"YulIf","src":"7884:96:181"},{"nodeType":"YulVariableDeclaration","src":"7989:47:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"8007:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"8017:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8003:3:181"},"nodeType":"YulFunctionCall","src":"8003:33:181"},"variables":[{"name":"addr_1","nodeType":"YulTypedName","src":"7993:6:181","type":""}]},{"nodeType":"YulAssignment","src":"8045:30:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"8068:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8055:12:181"},"nodeType":"YulFunctionCall","src":"8055:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"8045:6:181"}]},{"body":{"nodeType":"YulBlock","src":"8118:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8127:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8130:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8120:6:181"},"nodeType":"YulFunctionCall","src":"8120:12:181"},"nodeType":"YulExpressionStatement","src":"8120:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8090:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8098:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8087:2:181"},"nodeType":"YulFunctionCall","src":"8087:30:181"},"nodeType":"YulIf","src":"8084:50:181"},{"nodeType":"YulAssignment","src":"8143:25:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"8155:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8163:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8151:3:181"},"nodeType":"YulFunctionCall","src":"8151:17:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"8143:4:181"}]},{"body":{"nodeType":"YulBlock","src":"8219:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8228:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8231:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8221:6:181"},"nodeType":"YulFunctionCall","src":"8221:12:181"},"nodeType":"YulExpressionStatement","src":"8221:12:181"}]},"condition":{"arguments":[{"name":"addr","nodeType":"YulIdentifier","src":"8184:4:181"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"8194:12:181"},"nodeType":"YulFunctionCall","src":"8194:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"8210:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8190:3:181"},"nodeType":"YulFunctionCall","src":"8190:27:181"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"8180:3:181"},"nodeType":"YulFunctionCall","src":"8180:38:181"},"nodeType":"YulIf","src":"8177:58:181"}]},"name":"access_calldata_tail_t_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"7771:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"7781:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"7797:4:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"7803:6:181","type":""}],"src":"7720:521:181"},{"body":{"nodeType":"YulBlock","src":"8420:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8437:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8448:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8430:6:181"},"nodeType":"YulFunctionCall","src":"8430:21:181"},"nodeType":"YulExpressionStatement","src":"8430:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8471:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8482:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8467:3:181"},"nodeType":"YulFunctionCall","src":"8467:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8487:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8460:6:181"},"nodeType":"YulFunctionCall","src":"8460:29:181"},"nodeType":"YulExpressionStatement","src":"8460:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8509:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8520:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8505:3:181"},"nodeType":"YulFunctionCall","src":"8505:18:181"},{"hexValue":"216c656e677468","kind":"string","nodeType":"YulLiteral","src":"8525:9:181","type":"","value":"!length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8498:6:181"},"nodeType":"YulFunctionCall","src":"8498:37:181"},"nodeType":"YulExpressionStatement","src":"8498:37:181"},{"nodeType":"YulAssignment","src":"8544:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8556:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8567:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8552:3:181"},"nodeType":"YulFunctionCall","src":"8552:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8544:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8397:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8411:4:181","type":""}],"src":"8246:330:181"},{"body":{"nodeType":"YulBlock","src":"8708:136:181","statements":[{"nodeType":"YulAssignment","src":"8718:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8730:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8741:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8726:3:181"},"nodeType":"YulFunctionCall","src":"8726:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8718:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8760:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8775:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8783:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8771:3:181"},"nodeType":"YulFunctionCall","src":"8771:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8753:6:181"},"nodeType":"YulFunctionCall","src":"8753:42:181"},"nodeType":"YulExpressionStatement","src":"8753:42:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8815:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8826:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8811:3:181"},"nodeType":"YulFunctionCall","src":"8811:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"8831:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8804:6:181"},"nodeType":"YulFunctionCall","src":"8804:34:181"},"nodeType":"YulExpressionStatement","src":"8804:34:181"}]},"name":"abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8669:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8680:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8688:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8699:4:181","type":""}],"src":"8581:263:181"},{"body":{"nodeType":"YulBlock","src":"8950:76:181","statements":[{"nodeType":"YulAssignment","src":"8960:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8972:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8983:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8968:3:181"},"nodeType":"YulFunctionCall","src":"8968:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8960:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9002:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"9013:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8995:6:181"},"nodeType":"YulFunctionCall","src":"8995:25:181"},"nodeType":"YulExpressionStatement","src":"8995:25:181"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8919:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8930:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8941:4:181","type":""}],"src":"8849:177:181"},{"body":{"nodeType":"YulBlock","src":"9150:98:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9167:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9178:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9160:6:181"},"nodeType":"YulFunctionCall","src":"9160:21:181"},"nodeType":"YulExpressionStatement","src":"9160:21:181"},{"nodeType":"YulAssignment","src":"9190:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9215:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9227:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9238:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9223:3:181"},"nodeType":"YulFunctionCall","src":"9223:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"9198:16:181"},"nodeType":"YulFunctionCall","src":"9198:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9190:4:181"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9119:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9130:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9141:4:181","type":""}],"src":"9031:217:181"},{"body":{"nodeType":"YulBlock","src":"9427:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9444:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9455:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9437:6:181"},"nodeType":"YulFunctionCall","src":"9437:21:181"},"nodeType":"YulExpressionStatement","src":"9437:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9478:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9489:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9474:3:181"},"nodeType":"YulFunctionCall","src":"9474:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9494:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9467:6:181"},"nodeType":"YulFunctionCall","src":"9467:30:181"},"nodeType":"YulExpressionStatement","src":"9467:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9517:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9528:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9513:3:181"},"nodeType":"YulFunctionCall","src":"9513:18:181"},{"hexValue":"2164617461206c656e677468","kind":"string","nodeType":"YulLiteral","src":"9533:14:181","type":"","value":"!data length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9506:6:181"},"nodeType":"YulFunctionCall","src":"9506:42:181"},"nodeType":"YulExpressionStatement","src":"9506:42:181"},{"nodeType":"YulAssignment","src":"9557:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9569:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9580:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9565:3:181"},"nodeType":"YulFunctionCall","src":"9565:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9557:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9404:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9418:4:181","type":""}],"src":"9253:336:181"},{"body":{"nodeType":"YulBlock","src":"9709:191:181","statements":[{"body":{"nodeType":"YulBlock","src":"9755:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9764:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9767:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9757:6:181"},"nodeType":"YulFunctionCall","src":"9757:12:181"},"nodeType":"YulExpressionStatement","src":"9757:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9730:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"9739:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9726:3:181"},"nodeType":"YulFunctionCall","src":"9726:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"9751:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9722:3:181"},"nodeType":"YulFunctionCall","src":"9722:32:181"},"nodeType":"YulIf","src":"9719:52:181"},{"nodeType":"YulAssignment","src":"9780:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9796:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9790:5:181"},"nodeType":"YulFunctionCall","src":"9790:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9780:6:181"}]},{"nodeType":"YulAssignment","src":"9815:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9835:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9846:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9831:3:181"},"nodeType":"YulFunctionCall","src":"9831:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9825:5:181"},"nodeType":"YulFunctionCall","src":"9825:25:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9815:6:181"}]},{"nodeType":"YulAssignment","src":"9859:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9879:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9890:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9875:3:181"},"nodeType":"YulFunctionCall","src":"9875:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9869:5:181"},"nodeType":"YulFunctionCall","src":"9869:25:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"9859:6:181"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9659:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9670:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9682:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9690:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9698:6:181","type":""}],"src":"9594:306:181"},{"body":{"nodeType":"YulBlock","src":"10228:490:181","statements":[{"nodeType":"YulVariableDeclaration","src":"10238:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10248:3:181","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10242:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10260:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10278:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"10283:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10274:3:181"},"nodeType":"YulFunctionCall","src":"10274:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"10287:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10270:3:181"},"nodeType":"YulFunctionCall","src":"10270:19:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"10264:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10305:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10320:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"10328:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10316:3:181"},"nodeType":"YulFunctionCall","src":"10316:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10298:6:181"},"nodeType":"YulFunctionCall","src":"10298:34:181"},"nodeType":"YulExpressionStatement","src":"10298:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10352:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10363:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10348:3:181"},"nodeType":"YulFunctionCall","src":"10348:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"10368:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10341:6:181"},"nodeType":"YulFunctionCall","src":"10341:34:181"},"nodeType":"YulExpressionStatement","src":"10341:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10395:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10406:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10391:3:181"},"nodeType":"YulFunctionCall","src":"10391:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"10411:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10384:6:181"},"nodeType":"YulFunctionCall","src":"10384:34:181"},"nodeType":"YulExpressionStatement","src":"10384:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10438:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10449:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10434:3:181"},"nodeType":"YulFunctionCall","src":"10434:18:181"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"10458:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"10466:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10454:3:181"},"nodeType":"YulFunctionCall","src":"10454:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10427:6:181"},"nodeType":"YulFunctionCall","src":"10427:43:181"},"nodeType":"YulExpressionStatement","src":"10427:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10490:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10501:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10486:3:181"},"nodeType":"YulFunctionCall","src":"10486:19:181"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"10511:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"10519:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10507:3:181"},"nodeType":"YulFunctionCall","src":"10507:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10479:6:181"},"nodeType":"YulFunctionCall","src":"10479:44:181"},"nodeType":"YulExpressionStatement","src":"10479:44:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10543:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10554:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10539:3:181"},"nodeType":"YulFunctionCall","src":"10539:19:181"},{"name":"value5","nodeType":"YulIdentifier","src":"10560:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10532:6:181"},"nodeType":"YulFunctionCall","src":"10532:35:181"},"nodeType":"YulExpressionStatement","src":"10532:35:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10587:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10598:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10583:3:181"},"nodeType":"YulFunctionCall","src":"10583:19:181"},{"name":"value6","nodeType":"YulIdentifier","src":"10604:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10576:6:181"},"nodeType":"YulFunctionCall","src":"10576:35:181"},"nodeType":"YulExpressionStatement","src":"10576:35:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10631:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10642:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10627:3:181"},"nodeType":"YulFunctionCall","src":"10627:19:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10648:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10620:6:181"},"nodeType":"YulFunctionCall","src":"10620:31:181"},"nodeType":"YulExpressionStatement","src":"10620:31:181"},{"nodeType":"YulAssignment","src":"10660:52:181","value":{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"10685:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10697:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"10708:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10693:3:181"},"nodeType":"YulFunctionCall","src":"10693:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"10668:16:181"},"nodeType":"YulFunctionCall","src":"10668:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10660:4:181"}]}]},"name":"abi_encode_tuple_t_address_t_rational_0_by_1_t_uint256_t_address_t_address_t_uint256_t_uint256_t_bytes_memory_ptr__to_t_address_t_uint256_t_uint256_t_address_t_address_t_uint256_t_uint256_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10141:9:181","type":""},{"name":"value7","nodeType":"YulTypedName","src":"10152:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"10160:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"10168:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"10176:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10184:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10192:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10200:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10208:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10219:4:181","type":""}],"src":"9905:813:181"},{"body":{"nodeType":"YulBlock","src":"10804:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"10850:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10859:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10862:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10852:6:181"},"nodeType":"YulFunctionCall","src":"10852:12:181"},"nodeType":"YulExpressionStatement","src":"10852:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10825:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"10834:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10821:3:181"},"nodeType":"YulFunctionCall","src":"10821:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"10846:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10817:3:181"},"nodeType":"YulFunctionCall","src":"10817:32:181"},"nodeType":"YulIf","src":"10814:52:181"},{"nodeType":"YulAssignment","src":"10875:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10891:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10885:5:181"},"nodeType":"YulFunctionCall","src":"10885:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10875:6:181"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10770:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10781:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10793:6:181","type":""}],"src":"10723:184:181"},{"body":{"nodeType":"YulBlock","src":"11041:175:181","statements":[{"nodeType":"YulAssignment","src":"11051:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11063:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11074:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11059:3:181"},"nodeType":"YulFunctionCall","src":"11059:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11051:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"11086:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11104:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"11109:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11100:3:181"},"nodeType":"YulFunctionCall","src":"11100:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"11113:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11096:3:181"},"nodeType":"YulFunctionCall","src":"11096:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11090:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11131:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11146:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"11154:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11142:3:181"},"nodeType":"YulFunctionCall","src":"11142:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11124:6:181"},"nodeType":"YulFunctionCall","src":"11124:34:181"},"nodeType":"YulExpressionStatement","src":"11124:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11178:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11189:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11174:3:181"},"nodeType":"YulFunctionCall","src":"11174:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11198:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"11206:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11194:3:181"},"nodeType":"YulFunctionCall","src":"11194:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11167:6:181"},"nodeType":"YulFunctionCall","src":"11167:43:181"},"nodeType":"YulExpressionStatement","src":"11167:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11002:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11013:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11021:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11032:4:181","type":""}],"src":"10912:304:181"},{"body":{"nodeType":"YulBlock","src":"11320:101:181","statements":[{"nodeType":"YulAssignment","src":"11330:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11342:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11353:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11338:3:181"},"nodeType":"YulFunctionCall","src":"11338:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11330:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11372:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11387:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11395:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11383:3:181"},"nodeType":"YulFunctionCall","src":"11383:31:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11365:6:181"},"nodeType":"YulFunctionCall","src":"11365:50:181"},"nodeType":"YulExpressionStatement","src":"11365:50:181"}]},"name":"abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11289:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11300:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11311:4:181","type":""}],"src":"11221:200:181"},{"body":{"nodeType":"YulBlock","src":"11485:77:181","statements":[{"nodeType":"YulAssignment","src":"11495:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"11510:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11504:5:181"},"nodeType":"YulFunctionCall","src":"11504:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"11495:5:181"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11550:5:181"}],"functionName":{"name":"validator_revert_uint64","nodeType":"YulIdentifier","src":"11526:23:181"},"nodeType":"YulFunctionCall","src":"11526:30:181"},"nodeType":"YulExpressionStatement","src":"11526:30:181"}]},"name":"abi_decode_uint64_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"11464:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"11475:5:181","type":""}],"src":"11426:136:181"},{"body":{"nodeType":"YulBlock","src":"11671:1090:181","statements":[{"body":{"nodeType":"YulBlock","src":"11718:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11727:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11730:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11720:6:181"},"nodeType":"YulFunctionCall","src":"11720:12:181"},"nodeType":"YulExpressionStatement","src":"11720:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11692:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"11701:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11688:3:181"},"nodeType":"YulFunctionCall","src":"11688:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"11713:3:181","type":"","value":"384"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11684:3:181"},"nodeType":"YulFunctionCall","src":"11684:33:181"},"nodeType":"YulIf","src":"11681:53:181"},{"nodeType":"YulVariableDeclaration","src":"11743:30:181","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"11756:15:181"},"nodeType":"YulFunctionCall","src":"11756:17:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11747:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11789:5:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11802:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11796:5:181"},"nodeType":"YulFunctionCall","src":"11796:16:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11782:6:181"},"nodeType":"YulFunctionCall","src":"11782:31:181"},"nodeType":"YulExpressionStatement","src":"11782:31:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11833:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11840:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11829:3:181"},"nodeType":"YulFunctionCall","src":"11829:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11855:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11866:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11851:3:181"},"nodeType":"YulFunctionCall","src":"11851:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11845:5:181"},"nodeType":"YulFunctionCall","src":"11845:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11822:6:181"},"nodeType":"YulFunctionCall","src":"11822:49:181"},"nodeType":"YulExpressionStatement","src":"11822:49:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11891:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11898:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11887:3:181"},"nodeType":"YulFunctionCall","src":"11887:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11913:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11924:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11909:3:181"},"nodeType":"YulFunctionCall","src":"11909:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11903:5:181"},"nodeType":"YulFunctionCall","src":"11903:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11880:6:181"},"nodeType":"YulFunctionCall","src":"11880:49:181"},"nodeType":"YulExpressionStatement","src":"11880:49:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11949:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"11956:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11945:3:181"},"nodeType":"YulFunctionCall","src":"11945:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11994:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12005:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11990:3:181"},"nodeType":"YulFunctionCall","src":"11990:18:181"}],"functionName":{"name":"abi_decode_uint64_fromMemory","nodeType":"YulIdentifier","src":"11961:28:181"},"nodeType":"YulFunctionCall","src":"11961:48:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11938:6:181"},"nodeType":"YulFunctionCall","src":"11938:72:181"},"nodeType":"YulExpressionStatement","src":"11938:72:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12030:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"12037:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12026:3:181"},"nodeType":"YulFunctionCall","src":"12026:15:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12076:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12087:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12072:3:181"},"nodeType":"YulFunctionCall","src":"12072:19:181"}],"functionName":{"name":"abi_decode_uint64_fromMemory","nodeType":"YulIdentifier","src":"12043:28:181"},"nodeType":"YulFunctionCall","src":"12043:49:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12019:6:181"},"nodeType":"YulFunctionCall","src":"12019:74:181"},"nodeType":"YulExpressionStatement","src":"12019:74:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12113:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"12120:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12109:3:181"},"nodeType":"YulFunctionCall","src":"12109:15:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12159:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12170:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12155:3:181"},"nodeType":"YulFunctionCall","src":"12155:19:181"}],"functionName":{"name":"abi_decode_uint64_fromMemory","nodeType":"YulIdentifier","src":"12126:28:181"},"nodeType":"YulFunctionCall","src":"12126:49:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12102:6:181"},"nodeType":"YulFunctionCall","src":"12102:74:181"},"nodeType":"YulExpressionStatement","src":"12102:74:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12196:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"12203:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12192:3:181"},"nodeType":"YulFunctionCall","src":"12192:15:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12242:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12253:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12238:3:181"},"nodeType":"YulFunctionCall","src":"12238:19:181"}],"functionName":{"name":"abi_decode_uint64_fromMemory","nodeType":"YulIdentifier","src":"12209:28:181"},"nodeType":"YulFunctionCall","src":"12209:49:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12185:6:181"},"nodeType":"YulFunctionCall","src":"12185:74:181"},"nodeType":"YulExpressionStatement","src":"12185:74:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12279:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"12286:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12275:3:181"},"nodeType":"YulFunctionCall","src":"12275:15:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12325:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12336:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12321:3:181"},"nodeType":"YulFunctionCall","src":"12321:19:181"}],"functionName":{"name":"abi_decode_uint64_fromMemory","nodeType":"YulIdentifier","src":"12292:28:181"},"nodeType":"YulFunctionCall","src":"12292:49:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12268:6:181"},"nodeType":"YulFunctionCall","src":"12268:74:181"},"nodeType":"YulExpressionStatement","src":"12268:74:181"},{"nodeType":"YulVariableDeclaration","src":"12351:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12361:3:181","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12355:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12384:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12391:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12380:3:181"},"nodeType":"YulFunctionCall","src":"12380:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12429:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12440:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12425:3:181"},"nodeType":"YulFunctionCall","src":"12425:18:181"}],"functionName":{"name":"abi_decode_uint64_fromMemory","nodeType":"YulIdentifier","src":"12396:28:181"},"nodeType":"YulFunctionCall","src":"12396:48:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12373:6:181"},"nodeType":"YulFunctionCall","src":"12373:72:181"},"nodeType":"YulExpressionStatement","src":"12373:72:181"},{"nodeType":"YulVariableDeclaration","src":"12454:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12464:3:181","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"12458:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12487:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"12494:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12483:3:181"},"nodeType":"YulFunctionCall","src":"12483:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12532:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"12543:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12528:3:181"},"nodeType":"YulFunctionCall","src":"12528:18:181"}],"functionName":{"name":"abi_decode_uint64_fromMemory","nodeType":"YulIdentifier","src":"12499:28:181"},"nodeType":"YulFunctionCall","src":"12499:48:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12476:6:181"},"nodeType":"YulFunctionCall","src":"12476:72:181"},"nodeType":"YulExpressionStatement","src":"12476:72:181"},{"nodeType":"YulVariableDeclaration","src":"12557:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12567:3:181","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"12561:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12590:5:181"},{"name":"_3","nodeType":"YulIdentifier","src":"12597:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12586:3:181"},"nodeType":"YulFunctionCall","src":"12586:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12635:9:181"},{"name":"_3","nodeType":"YulIdentifier","src":"12646:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12631:3:181"},"nodeType":"YulFunctionCall","src":"12631:18:181"}],"functionName":{"name":"abi_decode_uint64_fromMemory","nodeType":"YulIdentifier","src":"12602:28:181"},"nodeType":"YulFunctionCall","src":"12602:48:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12579:6:181"},"nodeType":"YulFunctionCall","src":"12579:72:181"},"nodeType":"YulExpressionStatement","src":"12579:72:181"},{"nodeType":"YulVariableDeclaration","src":"12660:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12670:3:181","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"12664:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12693:5:181"},{"name":"_4","nodeType":"YulIdentifier","src":"12700:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12689:3:181"},"nodeType":"YulFunctionCall","src":"12689:14:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12715:9:181"},{"name":"_4","nodeType":"YulIdentifier","src":"12726:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12711:3:181"},"nodeType":"YulFunctionCall","src":"12711:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12705:5:181"},"nodeType":"YulFunctionCall","src":"12705:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12682:6:181"},"nodeType":"YulFunctionCall","src":"12682:49:181"},"nodeType":"YulExpressionStatement","src":"12682:49:181"},{"nodeType":"YulAssignment","src":"12740:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"12750:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"12740:6:181"}]}]},"name":"abi_decode_tuple_t_struct$_Node_$48266_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11637:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11648:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11660:6:181","type":""}],"src":"11567:1194:181"},{"body":{"nodeType":"YulBlock","src":"12940:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12957:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12968:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12950:6:181"},"nodeType":"YulFunctionCall","src":"12950:21:181"},"nodeType":"YulExpressionStatement","src":"12950:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12991:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13002:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12987:3:181"},"nodeType":"YulFunctionCall","src":"12987:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13007:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12980:6:181"},"nodeType":"YulFunctionCall","src":"12980:30:181"},"nodeType":"YulExpressionStatement","src":"12980:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13030:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13041:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13026:3:181"},"nodeType":"YulFunctionCall","src":"13026:18:181"},{"hexValue":"21636f6e6669726d44617461","kind":"string","nodeType":"YulLiteral","src":"13046:14:181","type":"","value":"!confirmData"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13019:6:181"},"nodeType":"YulFunctionCall","src":"13019:42:181"},"nodeType":"YulExpressionStatement","src":"13019:42:181"},{"nodeType":"YulAssignment","src":"13070:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13082:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13093:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13078:3:181"},"nodeType":"YulFunctionCall","src":"13078:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13070:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_3ec35b7201b3898115e81df5644e6a328a1ab31166b374a7e0d4467479763910__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12917:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12931:4:181","type":""}],"src":"12766:336:181"},{"body":{"nodeType":"YulBlock","src":"13281:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13298:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13309:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13291:6:181"},"nodeType":"YulFunctionCall","src":"13291:21:181"},"nodeType":"YulExpressionStatement","src":"13291:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13332:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13343:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13328:3:181"},"nodeType":"YulFunctionCall","src":"13328:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13348:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13321:6:181"},"nodeType":"YulFunctionCall","src":"13321:29:181"},"nodeType":"YulExpressionStatement","src":"13321:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13370:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13381:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13366:3:181"},"nodeType":"YulFunctionCall","src":"13366:18:181"},{"hexValue":"217374616b6564","kind":"string","nodeType":"YulLiteral","src":"13386:9:181","type":"","value":"!staked"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13359:6:181"},"nodeType":"YulFunctionCall","src":"13359:37:181"},"nodeType":"YulExpressionStatement","src":"13359:37:181"},{"nodeType":"YulAssignment","src":"13405:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13417:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13428:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13413:3:181"},"nodeType":"YulFunctionCall","src":"13413:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13405:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_80b056f9550ecc47107329535d0b0e6d2c94a4e6fda289320403c71d34aecf05__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13258:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13272:4:181","type":""}],"src":"13107:330:181"},{"body":{"nodeType":"YulBlock","src":"13616:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13633:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13644:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13626:6:181"},"nodeType":"YulFunctionCall","src":"13626:21:181"},"nodeType":"YulExpressionStatement","src":"13626:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13667:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13678:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13663:3:181"},"nodeType":"YulFunctionCall","src":"13663:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13683:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13656:6:181"},"nodeType":"YulFunctionCall","src":"13656:30:181"},"nodeType":"YulExpressionStatement","src":"13656:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13706:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13717:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13702:3:181"},"nodeType":"YulFunctionCall","src":"13702:18:181"},{"hexValue":"216d6972726f72436f6e6e6563746f72","kind":"string","nodeType":"YulLiteral","src":"13722:18:181","type":"","value":"!mirrorConnector"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13695:6:181"},"nodeType":"YulFunctionCall","src":"13695:46:181"},"nodeType":"YulExpressionStatement","src":"13695:46:181"},{"nodeType":"YulAssignment","src":"13750:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13762:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13773:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13758:3:181"},"nodeType":"YulFunctionCall","src":"13758:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13750:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13593:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13607:4:181","type":""}],"src":"13442:340:181"},{"body":{"nodeType":"YulBlock","src":"14084:600:181","statements":[{"nodeType":"YulVariableDeclaration","src":"14094:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14112:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"14117:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14108:3:181"},"nodeType":"YulFunctionCall","src":"14108:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"14121:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14104:3:181"},"nodeType":"YulFunctionCall","src":"14104:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14098:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14139:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14154:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14162:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14150:3:181"},"nodeType":"YulFunctionCall","src":"14150:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14132:6:181"},"nodeType":"YulFunctionCall","src":"14132:34:181"},"nodeType":"YulExpressionStatement","src":"14132:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14186:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14197:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14182:3:181"},"nodeType":"YulFunctionCall","src":"14182:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14206:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14214:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14202:3:181"},"nodeType":"YulFunctionCall","src":"14202:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14175:6:181"},"nodeType":"YulFunctionCall","src":"14175:43:181"},"nodeType":"YulExpressionStatement","src":"14175:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14238:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14249:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14234:3:181"},"nodeType":"YulFunctionCall","src":"14234:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"14254:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14227:6:181"},"nodeType":"YulFunctionCall","src":"14227:34:181"},"nodeType":"YulExpressionStatement","src":"14227:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14281:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14292:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14277:3:181"},"nodeType":"YulFunctionCall","src":"14277:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"14297:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14270:6:181"},"nodeType":"YulFunctionCall","src":"14270:34:181"},"nodeType":"YulExpressionStatement","src":"14270:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14324:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14335:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14320:3:181"},"nodeType":"YulFunctionCall","src":"14320:19:181"},{"name":"value4","nodeType":"YulIdentifier","src":"14341:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14313:6:181"},"nodeType":"YulFunctionCall","src":"14313:35:181"},"nodeType":"YulExpressionStatement","src":"14313:35:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14368:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14379:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14364:3:181"},"nodeType":"YulFunctionCall","src":"14364:19:181"},{"name":"value5","nodeType":"YulIdentifier","src":"14385:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14357:6:181"},"nodeType":"YulFunctionCall","src":"14357:35:181"},"nodeType":"YulExpressionStatement","src":"14357:35:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14412:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14423:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14408:3:181"},"nodeType":"YulFunctionCall","src":"14408:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"14429:3:181","type":"","value":"224"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14401:6:181"},"nodeType":"YulFunctionCall","src":"14401:32:181"},"nodeType":"YulExpressionStatement","src":"14401:32:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14453:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14464:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14449:3:181"},"nodeType":"YulFunctionCall","src":"14449:19:181"},{"name":"value7","nodeType":"YulIdentifier","src":"14470:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14442:6:181"},"nodeType":"YulFunctionCall","src":"14442:35:181"},"nodeType":"YulExpressionStatement","src":"14442:35:181"},{"nodeType":"YulVariableDeclaration","src":"14486:13:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14496:3:181","type":"","value":"256"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"14490:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14525:9:181"},{"name":"_2","nodeType":"YulIdentifier","src":"14536:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14521:3:181"},"nodeType":"YulFunctionCall","src":"14521:18:181"},{"name":"value6","nodeType":"YulIdentifier","src":"14541:6:181"},{"name":"value7","nodeType":"YulIdentifier","src":"14549:6:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"14508:12:181"},"nodeType":"YulFunctionCall","src":"14508:48:181"},"nodeType":"YulExpressionStatement","src":"14508:48:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14580:9:181"},{"name":"value7","nodeType":"YulIdentifier","src":"14591:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14576:3:181"},"nodeType":"YulFunctionCall","src":"14576:22:181"},{"name":"_2","nodeType":"YulIdentifier","src":"14600:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14572:3:181"},"nodeType":"YulFunctionCall","src":"14572:31:181"},{"kind":"number","nodeType":"YulLiteral","src":"14605:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14565:6:181"},"nodeType":"YulFunctionCall","src":"14565:42:181"},"nodeType":"YulExpressionStatement","src":"14565:42:181"},{"nodeType":"YulAssignment","src":"14616:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14632:9:181"},{"arguments":[{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"14651:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"14659:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14647:3:181"},"nodeType":"YulFunctionCall","src":"14647:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14668:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"14664:3:181"},"nodeType":"YulFunctionCall","src":"14664:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14643:3:181"},"nodeType":"YulFunctionCall","src":"14643:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14628:3:181"},"nodeType":"YulFunctionCall","src":"14628:45:181"},{"name":"_2","nodeType":"YulIdentifier","src":"14675:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14624:3:181"},"nodeType":"YulFunctionCall","src":"14624:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14616:4:181"}]}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint256_t_uint256_t_bytes_calldata_ptr__to_t_address_t_address_t_uint256_t_uint256_t_uint256_t_uint256_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13997:9:181","type":""},{"name":"value7","nodeType":"YulTypedName","src":"14008:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"14016:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"14024:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14032:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14040:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14048:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14056:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14064:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14075:4:181","type":""}],"src":"13787:897:181"},{"body":{"nodeType":"YulBlock","src":"14770:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"14816:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14825:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14828:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14818:6:181"},"nodeType":"YulFunctionCall","src":"14818:12:181"},"nodeType":"YulExpressionStatement","src":"14818:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14791:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"14800:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14787:3:181"},"nodeType":"YulFunctionCall","src":"14787:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"14812:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14783:3:181"},"nodeType":"YulFunctionCall","src":"14783:32:181"},"nodeType":"YulIf","src":"14780:52:181"},{"nodeType":"YulAssignment","src":"14841:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14857:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14851:5:181"},"nodeType":"YulFunctionCall","src":"14851:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14841:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14736:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14747:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14759:6:181","type":""}],"src":"14689:184:181"},{"body":{"nodeType":"YulBlock","src":"14926:77:181","statements":[{"nodeType":"YulAssignment","src":"14936:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14947:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"14950:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14943:3:181"},"nodeType":"YulFunctionCall","src":"14943:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"14936:3:181"}]},{"body":{"nodeType":"YulBlock","src":"14975:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14977:16:181"},"nodeType":"YulFunctionCall","src":"14977:18:181"},"nodeType":"YulExpressionStatement","src":"14977:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14967:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"14970:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14964:2:181"},"nodeType":"YulFunctionCall","src":"14964:10:181"},"nodeType":"YulIf","src":"14961:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"14909:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"14912:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"14918:3:181","type":""}],"src":"14878:125:181"},{"body":{"nodeType":"YulBlock","src":"15191:269:181","statements":[{"nodeType":"YulAssignment","src":"15201:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15213:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15224:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15209:3:181"},"nodeType":"YulFunctionCall","src":"15209:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15201:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"15237:36:181","value":{"kind":"number","nodeType":"YulLiteral","src":"15247:26:181","type":"","value":"0xffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15241:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15289:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15304:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"15312:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15300:3:181"},"nodeType":"YulFunctionCall","src":"15300:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15282:6:181"},"nodeType":"YulFunctionCall","src":"15282:34:181"},"nodeType":"YulExpressionStatement","src":"15282:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15336:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15347:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15332:3:181"},"nodeType":"YulFunctionCall","src":"15332:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"15356:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"15364:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15352:3:181"},"nodeType":"YulFunctionCall","src":"15352:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15325:6:181"},"nodeType":"YulFunctionCall","src":"15325:43:181"},"nodeType":"YulExpressionStatement","src":"15325:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15388:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15399:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15384:3:181"},"nodeType":"YulFunctionCall","src":"15384:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"15404:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15377:6:181"},"nodeType":"YulFunctionCall","src":"15377:34:181"},"nodeType":"YulExpressionStatement","src":"15377:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15431:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15442:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15427:3:181"},"nodeType":"YulFunctionCall","src":"15427:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"15447:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15420:6:181"},"nodeType":"YulFunctionCall","src":"15420:34:181"},"nodeType":"YulExpressionStatement","src":"15420:34:181"}]},"name":"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15136:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"15147:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15155:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15163:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15171:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15182:4:181","type":""}],"src":"15008:452:181"},{"body":{"nodeType":"YulBlock","src":"15612:100:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"15629:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"15634:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15622:6:181"},"nodeType":"YulFunctionCall","src":"15622:19:181"},"nodeType":"YulExpressionStatement","src":"15622:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"15661:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"15666:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15657:3:181"},"nodeType":"YulFunctionCall","src":"15657:12:181"},{"name":"value1","nodeType":"YulIdentifier","src":"15671:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15650:6:181"},"nodeType":"YulFunctionCall","src":"15650:28:181"},"nodeType":"YulExpressionStatement","src":"15650:28:181"},{"nodeType":"YulAssignment","src":"15687:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"15698:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"15703:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15694:3:181"},"nodeType":"YulFunctionCall","src":"15694:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"15687:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"15580:3:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15585:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15593:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"15604:3:181","type":""}],"src":"15465:247:181"},{"body":{"nodeType":"YulBlock","src":"15891:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15908:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15919:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15901:6:181"},"nodeType":"YulFunctionCall","src":"15901:21:181"},"nodeType":"YulExpressionStatement","src":"15901:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15942:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15953:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15938:3:181"},"nodeType":"YulFunctionCall","src":"15938:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15958:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15931:6:181"},"nodeType":"YulFunctionCall","src":"15931:30:181"},"nodeType":"YulExpressionStatement","src":"15931:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15981:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15992:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15977:3:181"},"nodeType":"YulFunctionCall","src":"15977:18:181"},{"hexValue":"70726f6f66206c656e677468","kind":"string","nodeType":"YulLiteral","src":"15997:14:181","type":"","value":"proof length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15970:6:181"},"nodeType":"YulFunctionCall","src":"15970:42:181"},"nodeType":"YulExpressionStatement","src":"15970:42:181"},{"nodeType":"YulAssignment","src":"16021:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16033:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16044:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16029:3:181"},"nodeType":"YulFunctionCall","src":"16029:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16021:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_074c928f9cc6a62a1da1b53ff6e65bf75d16d1a0f00aef506fe7fb31f0fea797__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15868:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15882:4:181","type":""}],"src":"15717:336:181"},{"body":{"nodeType":"YulBlock","src":"16232:164:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16249:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16260:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16242:6:181"},"nodeType":"YulFunctionCall","src":"16242:21:181"},"nodeType":"YulExpressionStatement","src":"16242:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16283:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16294:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16279:3:181"},"nodeType":"YulFunctionCall","src":"16279:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16299:2:181","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16272:6:181"},"nodeType":"YulFunctionCall","src":"16272:30:181"},"nodeType":"YulExpressionStatement","src":"16272:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16322:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16333:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16318:3:181"},"nodeType":"YulFunctionCall","src":"16318:18:181"},{"hexValue":"216d696e696d616c2070726f6f66","kind":"string","nodeType":"YulLiteral","src":"16338:16:181","type":"","value":"!minimal proof"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16311:6:181"},"nodeType":"YulFunctionCall","src":"16311:44:181"},"nodeType":"YulExpressionStatement","src":"16311:44:181"},{"nodeType":"YulAssignment","src":"16364:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16376:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16387:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16372:3:181"},"nodeType":"YulFunctionCall","src":"16372:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16364:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4668219ae76e9cb73254550f287325fe9549e37f583b0dbd12da792460a151e1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16209:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16223:4:181","type":""}],"src":"16058:338:181"},{"body":{"nodeType":"YulBlock","src":"16575:154:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16592:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16603:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16585:6:181"},"nodeType":"YulFunctionCall","src":"16585:21:181"},"nodeType":"YulExpressionStatement","src":"16585:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16626:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16637:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16622:3:181"},"nodeType":"YulFunctionCall","src":"16622:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16642:1:181","type":"","value":"5"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16615:6:181"},"nodeType":"YulFunctionCall","src":"16615:29:181"},"nodeType":"YulExpressionStatement","src":"16615:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16664:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16675:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16660:3:181"},"nodeType":"YulFunctionCall","src":"16660:18:181"},{"hexValue":"7370656e74","kind":"string","nodeType":"YulLiteral","src":"16680:7:181","type":"","value":"spent"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16653:6:181"},"nodeType":"YulFunctionCall","src":"16653:35:181"},"nodeType":"YulExpressionStatement","src":"16653:35:181"},{"nodeType":"YulAssignment","src":"16697:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16709:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16720:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16705:3:181"},"nodeType":"YulFunctionCall","src":"16705:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16697:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_95a88df2976f6e0e24378e2dd0fe64cc4cbcc7e4055ddf10761c8f53ffdd40e6__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16552:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16566:4:181","type":""}],"src":"16401:328:181"},{"body":{"nodeType":"YulBlock","src":"16941:570:181","statements":[{"nodeType":"YulVariableDeclaration","src":"16951:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16969:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16980:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16965:3:181"},"nodeType":"YulFunctionCall","src":"16965:18:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"16955:6:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16999:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17010:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16992:6:181"},"nodeType":"YulFunctionCall","src":"16992:21:181"},"nodeType":"YulExpressionStatement","src":"16992:21:181"},{"nodeType":"YulVariableDeclaration","src":"17022:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"17033:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"17026:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"17048:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17068:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17062:5:181"},"nodeType":"YulFunctionCall","src":"17062:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"17052:6:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"17091:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"17099:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17084:6:181"},"nodeType":"YulFunctionCall","src":"17084:22:181"},"nodeType":"YulExpressionStatement","src":"17084:22:181"},{"nodeType":"YulAssignment","src":"17115:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17126:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17137:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17122:3:181"},"nodeType":"YulFunctionCall","src":"17122:19:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"17115:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"17150:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"17160:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"17154:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"17173:29:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17191:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"17199:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17187:3:181"},"nodeType":"YulFunctionCall","src":"17187:15:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"17177:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"17211:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"17220:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"17215:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"17279:120:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17300:3:181"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"17311:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17305:5:181"},"nodeType":"YulFunctionCall","src":"17305:13:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17293:6:181"},"nodeType":"YulFunctionCall","src":"17293:26:181"},"nodeType":"YulExpressionStatement","src":"17293:26:181"},{"nodeType":"YulAssignment","src":"17332:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17343:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"17348:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17339:3:181"},"nodeType":"YulFunctionCall","src":"17339:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"17332:3:181"}]},{"nodeType":"YulAssignment","src":"17364:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"17378:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"17386:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17374:3:181"},"nodeType":"YulFunctionCall","src":"17374:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"17364:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17241:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"17244:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17238:2:181"},"nodeType":"YulFunctionCall","src":"17238:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"17252:18:181","statements":[{"nodeType":"YulAssignment","src":"17254:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17263:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"17266:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17259:3:181"},"nodeType":"YulFunctionCall","src":"17259:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"17254:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"17234:3:181","statements":[]},"src":"17230:169:181"},{"nodeType":"YulAssignment","src":"17408:11:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"17416:3:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17408:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17439:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"17450:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17435:3:181"},"nodeType":"YulFunctionCall","src":"17435:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"17455:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17428:6:181"},"nodeType":"YulFunctionCall","src":"17428:34:181"},"nodeType":"YulExpressionStatement","src":"17428:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17482:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17493:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17478:3:181"},"nodeType":"YulFunctionCall","src":"17478:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"17498:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17471:6:181"},"nodeType":"YulFunctionCall","src":"17471:34:181"},"nodeType":"YulExpressionStatement","src":"17471:34:181"}]},"name":"abi_encode_tuple_t_array$_t_bytes32_$dyn_memory_ptr_t_uint256_t_bytes32__to_t_array$_t_bytes32_$dyn_memory_ptr_t_uint256_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16894:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16905:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16913:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16921:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16932:4:181","type":""}],"src":"16734:777:181"},{"body":{"nodeType":"YulBlock","src":"17690:155:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17707:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17718:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17700:6:181"},"nodeType":"YulFunctionCall","src":"17700:21:181"},"nodeType":"YulExpressionStatement","src":"17700:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17741:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17752:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17737:3:181"},"nodeType":"YulFunctionCall","src":"17737:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17757:1:181","type":"","value":"6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17730:6:181"},"nodeType":"YulFunctionCall","src":"17730:29:181"},"nodeType":"YulExpressionStatement","src":"17730:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17779:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17790:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17775:3:181"},"nodeType":"YulFunctionCall","src":"17775:18:181"},{"hexValue":"2170726f6f66","kind":"string","nodeType":"YulLiteral","src":"17795:8:181","type":"","value":"!proof"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17768:6:181"},"nodeType":"YulFunctionCall","src":"17768:36:181"},"nodeType":"YulExpressionStatement","src":"17768:36:181"},{"nodeType":"YulAssignment","src":"17813:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17825:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17836:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17821:3:181"},"nodeType":"YulFunctionCall","src":"17821:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17813:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_6257fa65cb3e2131130f078fa0b2c0b28695aa9be00e6235d4f462589ad75bec__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17667:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17681:4:181","type":""}],"src":"17516:329:181"},{"body":{"nodeType":"YulBlock","src":"17931:170:181","statements":[{"body":{"nodeType":"YulBlock","src":"17977:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17986:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17989:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17979:6:181"},"nodeType":"YulFunctionCall","src":"17979:12:181"},"nodeType":"YulExpressionStatement","src":"17979:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"17952:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"17961:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17948:3:181"},"nodeType":"YulFunctionCall","src":"17948:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"17973:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"17944:3:181"},"nodeType":"YulFunctionCall","src":"17944:32:181"},"nodeType":"YulIf","src":"17941:52:181"},{"nodeType":"YulVariableDeclaration","src":"18002:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18021:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18015:5:181"},"nodeType":"YulFunctionCall","src":"18015:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"18006:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18065:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"18040:24:181"},"nodeType":"YulFunctionCall","src":"18040:31:181"},"nodeType":"YulExpressionStatement","src":"18040:31:181"},{"nodeType":"YulAssignment","src":"18080:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"18090:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"18080:6:181"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17897:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"17908:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"17920:6:181","type":""}],"src":"17850:251:181"},{"body":{"nodeType":"YulBlock","src":"18280:235:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18297:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18308:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18290:6:181"},"nodeType":"YulFunctionCall","src":"18290:21:181"},"nodeType":"YulExpressionStatement","src":"18290:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18331:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18342:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18327:3:181"},"nodeType":"YulFunctionCall","src":"18327:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18347:2:181","type":"","value":"45"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18320:6:181"},"nodeType":"YulFunctionCall","src":"18320:30:181"},"nodeType":"YulExpressionStatement","src":"18320:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18370:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18381:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18366:3:181"},"nodeType":"YulFunctionCall","src":"18366:18:181"},{"hexValue":"4c6962417262697472756d4c313a2073797374656d206d657373616765732077","kind":"string","nodeType":"YulLiteral","src":"18386:34:181","type":"","value":"LibArbitrumL1: system messages w"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18359:6:181"},"nodeType":"YulFunctionCall","src":"18359:62:181"},"nodeType":"YulExpressionStatement","src":"18359:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18441:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18452:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18437:3:181"},"nodeType":"YulFunctionCall","src":"18437:18:181"},{"hexValue":"6974686f75742073656e646572","kind":"string","nodeType":"YulLiteral","src":"18457:15:181","type":"","value":"ithout sender"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18430:6:181"},"nodeType":"YulFunctionCall","src":"18430:43:181"},"nodeType":"YulExpressionStatement","src":"18430:43:181"},{"nodeType":"YulAssignment","src":"18482:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18494:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18505:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18490:3:181"},"nodeType":"YulFunctionCall","src":"18490:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18482:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d658411d0561b99f9fb199be39e8001e28574097edaed4471e2c7d7066c63b9a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18257:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18271:4:181","type":""}],"src":"18106:409:181"},{"body":{"nodeType":"YulBlock","src":"18694:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18711:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18722:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18704:6:181"},"nodeType":"YulFunctionCall","src":"18704:21:181"},"nodeType":"YulExpressionStatement","src":"18704:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18745:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18756:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18741:3:181"},"nodeType":"YulFunctionCall","src":"18741:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18761:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18734:6:181"},"nodeType":"YulFunctionCall","src":"18734:30:181"},"nodeType":"YulExpressionStatement","src":"18734:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18784:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18795:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18780:3:181"},"nodeType":"YulFunctionCall","src":"18780:18:181"},{"hexValue":"217472756e6361746564","kind":"string","nodeType":"YulLiteral","src":"18800:12:181","type":"","value":"!truncated"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18773:6:181"},"nodeType":"YulFunctionCall","src":"18773:40:181"},"nodeType":"YulExpressionStatement","src":"18773:40:181"},{"nodeType":"YulAssignment","src":"18822:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18834:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18845:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18830:3:181"},"nodeType":"YulFunctionCall","src":"18830:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18822:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18671:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18685:4:181","type":""}],"src":"18520:334:181"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 384)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_bytes(add(headStart, offset_1), dataEnd)\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function validator_revert_uint64(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_struct_L2Message_calldata(offset, end) -> value\n    {\n        if slt(sub(end, offset), 224) { revert(0, 0) }\n        value := offset\n    }\n    function abi_decode_tuple_t_uint64t_bytes32t_bytes32t_array$_t_bytes32_$dyn_calldata_ptrt_uint256t_struct$_L2Message_$40462_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_uint64(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, shl(5, length)), 32), dataEnd) { revert(0, 0) }\n        value3 := add(_2, 32)\n        value4 := length\n        value5 := calldataload(add(headStart, 128))\n        let offset_1 := calldataload(add(headStart, 160))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value6 := abi_decode_struct_L2Message_calldata(add(headStart, offset_1), dataEnd)\n    }\n    function abi_encode_tuple_t_contract$_IArbitrumRollup_$48276__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_IArbitrumOutbox_$48239__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!rootManager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        let tail_1 := abi_encode_bytes(value0, add(headStart, 96))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value1, tail_1)\n        mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!AMB\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        tail := abi_encode_bytes(value0, add(headStart, 64))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!data length\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_address_t_rational_0_by_1_t_uint256_t_address_t_address_t_uint256_t_uint256_t_bytes_memory_ptr__to_t_address_t_uint256_t_uint256_t_address_t_address_t_uint256_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 256\n        let _2 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _2))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, _2))\n        mstore(add(headStart, 128), and(value4, _2))\n        mstore(add(headStart, 160), value5)\n        mstore(add(headStart, 192), value6)\n        mstore(add(headStart, 224), _1)\n        tail := abi_encode_bytes(value7, add(headStart, _1))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffff))\n    }\n    function abi_decode_uint64_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_uint64(value)\n    }\n    function abi_decode_tuple_t_struct$_Node_$48266_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 384) { revert(0, 0) }\n        let value := allocate_memory()\n        mstore(value, mload(headStart))\n        mstore(add(value, 32), mload(add(headStart, 32)))\n        mstore(add(value, 64), mload(add(headStart, 64)))\n        mstore(add(value, 96), abi_decode_uint64_fromMemory(add(headStart, 96)))\n        mstore(add(value, 128), abi_decode_uint64_fromMemory(add(headStart, 128)))\n        mstore(add(value, 160), abi_decode_uint64_fromMemory(add(headStart, 160)))\n        mstore(add(value, 192), abi_decode_uint64_fromMemory(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_uint64_fromMemory(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_uint64_fromMemory(add(headStart, _1)))\n        let _2 := 288\n        mstore(add(value, _2), abi_decode_uint64_fromMemory(add(headStart, _2)))\n        let _3 := 320\n        mstore(add(value, _3), abi_decode_uint64_fromMemory(add(headStart, _3)))\n        let _4 := 352\n        mstore(add(value, _4), mload(add(headStart, _4)))\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_3ec35b7201b3898115e81df5644e6a328a1ab31166b374a7e0d4467479763910__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!confirmData\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_80b056f9550ecc47107329535d0b0e6d2c94a4e6fda289320403c71d34aecf05__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!staked\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"!mirrorConnector\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint256_t_uint256_t_bytes_calldata_ptr__to_t_address_t_address_t_uint256_t_uint256_t_uint256_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n        mstore(add(headStart, 192), 224)\n        mstore(add(headStart, 224), value7)\n        let _2 := 256\n        calldatacopy(add(headStart, _2), value6, value7)\n        mstore(add(add(headStart, value7), _2), 0)\n        tail := add(add(headStart, and(add(value7, 31), not(31))), _2)\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_packed_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, value0)\n        mstore(add(pos, 32), value1)\n        end := add(pos, 64)\n    }\n    function abi_encode_tuple_t_stringliteral_074c928f9cc6a62a1da1b53ff6e65bf75d16d1a0f00aef506fe7fb31f0fea797__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"proof length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4668219ae76e9cb73254550f287325fe9549e37f583b0dbd12da792460a151e1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"!minimal proof\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_95a88df2976f6e0e24378e2dd0fe64cc4cbcc7e4055ddf10761c8f53ffdd40e6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 5)\n        mstore(add(headStart, 64), \"spent\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_array$_t_bytes32_$dyn_memory_ptr_t_uint256_t_bytes32__to_t_array$_t_bytes32_$dyn_memory_ptr_t_uint256_t_bytes32__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 96)\n        mstore(headStart, 96)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 128)\n        let _1 := 0x20\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n        mstore(add(headStart, _1), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_stringliteral_6257fa65cb3e2131130f078fa0b2c0b28695aa9be00e6235d4f462589ad75bec__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 6)\n        mstore(add(headStart, 64), \"!proof\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_d658411d0561b99f9fb199be39e8001e28574097edaed4471e2c7d7066c63b9a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 45)\n        mstore(add(headStart, 64), \"LibArbitrumL1: system messages w\")\n        mstore(add(headStart, 96), \"ithout sender\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"!truncated\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"39039":[{"length":32,"start":730}],"39042":[{"length":32,"start":1259},{"length":32,"start":1679},{"length":32,"start":3273},{"length":32,"start":4875}],"39045":[{"length":32,"start":814},{"length":32,"start":1498},{"length":32,"start":2442}],"39048":[{"length":32,"start":551},{"length":32,"start":2393}]},"linkReferences":{},"object":"6080604052600436106101a05760003560e01c80639ab0563b116100ec578063ce11e6ab1161008a578063d69f9d6111610064578063d69f9d61146104d9578063db1b76591461050d578063e2ce3c641461052d578063fbd4006b1461054357600080fd5b8063ce11e6ab1461047c578063d1851c921461049c578063d232c220146104ba57600080fd5b8063b64d327e116100c6578063b64d327e14610411578063c5b350df14610427578063cb23bcb51461043c578063cc3942831461045c57600080fd5b80639ab0563b146103b15780639d4373a4146103d1578063b1f8100d146103f157600080fd5b80634ff746f6116101595780635f61e3ec116101335780635f61e3ec1461031c5780636a42b8f814610368578063715018a61461037e5780638da5cb5b1461039357600080fd5b80634ff746f6146102a857806352a9674b146102c85780635bd11efc146102fc57600080fd5b806305a79e06146101ac5780630fca49cd146101f157806314168416146102155780633327998d1461025e5780633cf52ffb1461028057806348e6fa231461029557600080fd5b366101a757005b600080fd5b3480156101b857600080fd5b506101dc6101c736600461170b565b60096020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101fd57600080fd5b5061020760065481565b6040519081526020016101e8565b34801561022157600080fd5b506102497f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101e8565b34801561026a57600080fd5b5061027e61027936600461170b565b610563565b005b34801561028c57600080fd5b50600254610207565b61027e6102a33660046117f1565b6105cf565b3480156102b457600080fd5b5061027e6102c3366004611855565b610684565b3480156102d457600080fd5b506102497f000000000000000000000000000000000000000000000000000000000000000081565b34801561030857600080fd5b5061027e6103173660046118a7565b61072a565b34801561032857600080fd5b506103507f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e8565b34801561037457600080fd5b5062093a80610207565b34801561038a57600080fd5b5061027e610761565b34801561039f57600080fd5b506000546001600160a01b0316610350565b3480156103bd57600080fd5b5061027e6103cc36600461170b565b610815565b3480156103dd57600080fd5b5061027e6103ec3660046118f2565b610881565b3480156103fd57600080fd5b5061027e61040c3660046118a7565b610a50565b34801561041d57600080fd5b5061020760075481565b34801561043357600080fd5b5061027e610aee565b34801561044857600080fd5b50600554610350906001600160a01b031681565b34801561046857600080fd5b50600354610350906001600160a01b031681565b34801561048857600080fd5b50600454610350906001600160a01b031681565b3480156104a857600080fd5b506001546001600160a01b0316610350565b3480156104c657600080fd5b506000546001600160a01b0316156101dc565b3480156104e557600080fd5b506103507f000000000000000000000000000000000000000000000000000000000000000081565b34801561051957600080fd5b506101dc6105283660046118a7565b610b5e565b34801561053957600080fd5b5061020760085481565b34801561054f57600080fd5b5061027e61055e36600461170b565b610b6f565b6000546001600160a01b0316331461058e576040516311a8a1bb60e31b815260040160405180910390fd5b60065460408051918252602082018390527f8826388bbfa56ae5df40ee5607d9d354fa66549d854624242c77b5af2a5e4c3b910160405180910390a1600655565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461063b5760405162461bcd60e51b815260206004820152600c60248201526b10b937b7ba26b0b730b3b2b960a11b60448201526064015b60405180910390fd5b6106458282610bdb565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507782823360405161067893929190611a02565b60405180910390a15050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106e55760405162461bcd60e51b81526004016106329060208082526004908201526310a0a6a160e11b604082015260600190565b6106ee81610de4565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced813360405161071f929190611a40565b60405180910390a150565b6000546001600160a01b03163314610755576040516311a8a1bb60e31b815260040160405180910390fd5b61075e81610dfd565b50565b6000546001600160a01b0316331461078c576040516311a8a1bb60e31b815260040160405180910390fd5b62093a806002544261079e9190611a80565b116107bc576040516324e0285f60e21b815260040160405180910390fd5b6002546000036107df57604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b031615610809576040516323295ef960e01b815260040160405180910390fd5b6108136000610e66565b565b6000546001600160a01b03163314610840576040516311a8a1bb60e31b815260040160405180910390fd5b60075460408051918252602082018390527f57bffb29c4c6b672a2e334fa00ea826dba286d6cb34d61bebc6c667abb579c62910160405180910390a1600755565b61088c878787610ecb565b6108998685858585611020565b6108a660c0820182611a93565b90506064146108e15760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610632565b600061094560446020610938846108fb60c0880188611a93565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506111839050565b62ffffff191691906111a7565b60405163473ec9fd60e11b815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690638e7d93fa90604401600060405180830381600087803b1580156109d657600080fd5b505af11580156109ea573d6000803e3d6000fd5b505050507fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced81604051602001610a2291815260200190565b60408051601f1981840301815290829052610a3e913390611a40565b60405180910390a15050505050505050565b6000546001600160a01b03163314610a7b576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610a99575060025415155b15610ab7576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b03808316911603610ae557604051634a2fb73f60e11b815260040160405180910390fd5b61075e816112b6565b6001546001600160a01b03163314610b19576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442610b2b9190611a80565b11610b49576040516324e0285f60e21b815260040160405180910390fd5b600154610813906001600160a01b0316610e66565b6000610b6982611304565b92915050565b6000546001600160a01b03163314610b9a576040516311a8a1bb60e31b815260040160405180910390fd5b60065460408051918252602082018390527f7f46895145f361561c5e9bbaf45b71269a4399dc3064511f123ebf4c6f04e357910160405180910390a1600855565b8151602014610c165760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610632565b6000634ff746f660e01b83604051602401610c319190611ae1565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091528251909150606014610ca65760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610632565b600080600084806020019051810190610cbf9190611af4565b92509250925060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663679b6ded34600360009054906101000a90046001600160a01b03166000610d1b8960065461134a565b6003546007546001600160a01b03909116908190610d3a908c9061134a565b610d468b60085461134a565b8e6040518a63ffffffff1660e01b8152600401610d6a989796959493929190611b22565b60206040518083038185885af1158015610d88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610dad9190611b7d565b60405190915081907fde92b5b7839f4a2c640f5e3bbb66d415458dadc57a487b0c7fa562ed7c9c896f90600090a250505050505050565b6040516316c2fdb560e21b815260040160405180910390fd5b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b604080516020808201849052818301859052825180830384018152606090920190925280519101206000906005546040516324b204d360e21b815267ffffffffffffffff871660048201529192506000916001600160a01b03909116906392c8134c9060240161018060405180830381865afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f739190611ba6565b905081816040015114610fb75760405162461bcd60e51b815260206004820152600c60248201526b21636f6e6669726d4461746160a01b6044820152606401610632565b60008160c0015167ffffffffffffffff16118015610fe3575060008160e0015167ffffffffffffffff16115b6110195760405162461bcd60e51b8152602060048201526007602482015266085cdd185ad95960ca1b6044820152606401610632565b5050505050565b6003546001600160a01b031661103960208301836118a7565b6001600160a01b0316146110825760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b6044820152606401610632565b6004546000906001600160a01b0316639f0c04bf6110a360208501856118a7565b6110b360408601602087016118a7565b60408601356060870135608088013560a08901356110d460c08b018b611a93565b6040518963ffffffff1660e01b81526004016110f7989796959493929190611c78565b602060405180830381865afa158015611114573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111389190611b7d565b905061117b8585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508792508591508a9050611360565b505050505050565b81516000906020840161119e64ffffffffff851682846114f9565b95945050505050565b60008160ff166000036111bc575060006112af565b6111cf8460181c6001600160601b031690565b6001600160601b03166111e560ff841685611ce0565b111561124d576111fe8460781c6001600160601b031690565b6112118560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610632565b60208260ff1611156112725760405163045df3f960e01b815260040160405180910390fd5b60088202600061128b8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91860151909116925050505b9392505050565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600061132f7f0000000000000000000000000000000000000000000000000000000000000000611536565b6001600160a01b0316826001600160a01b0316149050919050565b600081831061135957816112af565b5090919050565b6101008451106113a15760405162461bcd60e51b815260206004820152600c60248201526b0e0e4dedecc40d8cadccee8d60a31b6044820152606401610632565b835183901c156113e45760405162461bcd60e51b815260206004820152600e60248201526d10b6b4b734b6b0b610383937b7b360911b6044820152606401610632565b60008381526009602052604090205460ff161561142b5760405162461bcd60e51b81526020600482015260056024820152641cdc195b9d60da1b6044820152606401610632565b60048054604051627436d360e01b81526000926001600160a01b0390921691627436d39161145f9189918991899101611cf3565b602060405180830381865afa15801561147c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a09190611b7d565b90508181146114da5760405162461bcd60e51b815260206004820152600660248201526510b83937b7b360d11b6044820152606401610632565b5050506000908152600960205260409020805460ff1916600117905550565b6000806115068385611ce0565b9050604051811115611516575060005b8060000361152b5762ffffff199150506112af565b61119e858585611694565b60006001600160a01b03821633146115615760405163253a6fc960e11b815260040160405180910390fd5b6000826001600160a01b031663ab5d89436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c59190611d40565b6001600160a01b03166380648b026040518163ffffffff1660e01b8152600401602060405180830381865afa158015611602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116269190611d40565b90506001600160a01b038116610b695760405162461bcd60e51b815260206004820152602d60248201527f4c6962417262697472756d4c313a2073797374656d206d65737361676573207760448201526c34ba3437baba1039b2b73232b960991b6064820152608401610632565b60006060601883856001600160601b038216821480156116bc575086816001600160601b0316145b6116f55760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610632565b96831b90961790911b90941790931b9392505050565b60006020828403121561171d57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff8111828210171561175e5761175e611724565b60405290565b600082601f83011261177557600080fd5b813567ffffffffffffffff8082111561179057611790611724565b604051601f8301601f19908116603f011681019082821181831017156117b8576117b8611724565b816040528381528660208588010111156117d157600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561180457600080fd5b823567ffffffffffffffff8082111561181c57600080fd5b61182886838701611764565b9350602085013591508082111561183e57600080fd5b5061184b85828601611764565b9150509250929050565b60006020828403121561186757600080fd5b813567ffffffffffffffff81111561187e57600080fd5b61188a84828501611764565b949350505050565b6001600160a01b038116811461075e57600080fd5b6000602082840312156118b957600080fd5b81356112af81611892565b67ffffffffffffffff8116811461075e57600080fd5b600060e082840312156118ec57600080fd5b50919050565b600080600080600080600060c0888a03121561190d57600080fd5b8735611918816118c4565b96506020880135955060408801359450606088013567ffffffffffffffff8082111561194357600080fd5b818a0191508a601f83011261195757600080fd5b81358181111561196657600080fd5b8b60208260051b850101111561197b57600080fd5b6020830196508095505060808a0135935060a08a01359150808211156119a057600080fd5b506119ad8a828b016118da565b91505092959891949750929550565b6000815180845260005b818110156119e2576020818501810151868301820152016119c6565b506000602082860101526020601f19601f83011685010191505092915050565b606081526000611a1560608301866119bc565b8281036020840152611a2781866119bc565b91505060018060a01b0383166040830152949350505050565b604081526000611a5360408301856119bc565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b6957610b69611a6a565b6000808335601e19843603018112611aaa57600080fd5b83018035915067ffffffffffffffff821115611ac557600080fd5b602001915036819003821315611ada57600080fd5b9250929050565b6020815260006112af60208301846119bc565b600080600060608486031215611b0957600080fd5b8351925060208401519150604084015190509250925092565b600061010060018060a01b03808c1684528a602085015289604085015280891660608501528088166080850152508560a08401528460c08401528060e0840152611b6e818401856119bc565b9b9a5050505050505050505050565b600060208284031215611b8f57600080fd5b5051919050565b8051611ba1816118c4565b919050565b60006101808284031215611bb957600080fd5b611bc161173a565b825181526020830151602082015260408301516040820152611be560608401611b96565b6060820152611bf660808401611b96565b6080820152611c0760a08401611b96565b60a0820152611c1860c08401611b96565b60c0820152611c2960e08401611b96565b60e0820152610100611c3c818501611b96565b90820152610120611c4e848201611b96565b90820152610140611c60848201611b96565b90820152610160928301519281019290925250919050565b600060018060a01b03808b168352808a166020840152508760408301528660608301528560808301528460a083015260e060c08301528260e08301526101008385828501376000838501820152601f909301601f191690910190910198975050505050505050565b80820180821115610b6957610b69611a6a565b606080825284519082018190526000906020906080840190828801845b82811015611d2c57815184529284019290840190600101611d10565b505050908301949094525060400152919050565b600060208284031215611d5257600080fd5b81516112af8161189256fea2646970667358221220019042e2fa1ddf40ad2442b13da589ca89a15ac368f145ebe78777a555b27d1b64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1A0 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9AB0563B GT PUSH2 0xEC JUMPI DUP1 PUSH4 0xCE11E6AB GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xD69F9D61 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x4D9 JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0xE2CE3C64 EQ PUSH2 0x52D JUMPI DUP1 PUSH4 0xFBD4006B EQ PUSH2 0x543 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xCE11E6AB EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x49C JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x4BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB64D327E GT PUSH2 0xC6 JUMPI DUP1 PUSH4 0xB64D327E EQ PUSH2 0x411 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x427 JUMPI DUP1 PUSH4 0xCB23BCB5 EQ PUSH2 0x43C JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x45C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9AB0563B EQ PUSH2 0x3B1 JUMPI DUP1 PUSH4 0x9D4373A4 EQ PUSH2 0x3D1 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x3F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4FF746F6 GT PUSH2 0x159 JUMPI DUP1 PUSH4 0x5F61E3EC GT PUSH2 0x133 JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x31C JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x368 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x37E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x393 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x2A8 JUMPI DUP1 PUSH4 0x52A9674B EQ PUSH2 0x2C8 JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x2FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5A79E06 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0xFCA49CD EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0x14168416 EQ PUSH2 0x215 JUMPI DUP1 PUSH4 0x3327998D EQ PUSH2 0x25E JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x280 JUMPI DUP1 PUSH4 0x48E6FA23 EQ PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x1A7 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DC PUSH2 0x1C7 CALLDATASIZE PUSH1 0x4 PUSH2 0x170B JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x207 PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27E PUSH2 0x279 CALLDATASIZE PUSH1 0x4 PUSH2 0x170B JUMP JUMPDEST PUSH2 0x563 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x207 JUMP JUMPDEST PUSH2 0x27E PUSH2 0x2A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x17F1 JUMP JUMPDEST PUSH2 0x5CF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27E PUSH2 0x2C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1855 JUMP JUMPDEST PUSH2 0x684 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x308 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27E PUSH2 0x317 CALLDATASIZE PUSH1 0x4 PUSH2 0x18A7 JUMP JUMPDEST PUSH2 0x72A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x328 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x350 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x207 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x38A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27E PUSH2 0x761 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x39F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x350 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27E PUSH2 0x3CC CALLDATASIZE PUSH1 0x4 PUSH2 0x170B JUMP JUMPDEST PUSH2 0x815 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27E PUSH2 0x3EC CALLDATASIZE PUSH1 0x4 PUSH2 0x18F2 JUMP JUMPDEST PUSH2 0x881 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27E PUSH2 0x40C CALLDATASIZE PUSH1 0x4 PUSH2 0x18A7 JUMP JUMPDEST PUSH2 0xA50 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x41D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x207 PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x433 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27E PUSH2 0xAEE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x448 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x5 SLOAD PUSH2 0x350 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x468 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x350 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x350 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x350 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x1DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x350 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1DC PUSH2 0x528 CALLDATASIZE PUSH1 0x4 PUSH2 0x18A7 JUMP JUMPDEST PUSH2 0xB5E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x539 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x207 PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x54F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27E PUSH2 0x55E CALLDATASIZE PUSH1 0x4 PUSH2 0x170B JUMP JUMPDEST PUSH2 0xB6F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x58E JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x8826388BBFA56AE5DF40EE5607D9D354FA66549D854624242C77B5AF2A5E4C3B SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x6 SSTORE JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x63B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B937B7BA26B0B730B3B2B9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x645 DUP3 DUP3 PUSH2 0xBDB JUMP JUMPDEST PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 DUP3 DUP3 CALLER PUSH1 0x40 MLOAD PUSH2 0x678 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1A02 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x6E5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x632 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0x6EE DUP2 PUSH2 0xDE4 JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0x71F SWAP3 SWAP2 SWAP1 PUSH2 0x1A40 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x755 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x75E DUP2 PUSH2 0xDFD JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x78C JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x79E SWAP2 SWAP1 PUSH2 0x1A80 JUMP JUMPDEST GT PUSH2 0x7BC JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x7DF JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x809 JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x813 PUSH1 0x0 PUSH2 0xE66 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x840 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x57BFFB29C4C6B672A2E334FA00EA826DBA286D6CB34D61BEBC6C667ABB579C62 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x7 SSTORE JUMP JUMPDEST PUSH2 0x88C DUP8 DUP8 DUP8 PUSH2 0xECB JUMP JUMPDEST PUSH2 0x899 DUP7 DUP6 DUP6 DUP6 DUP6 PUSH2 0x1020 JUMP JUMPDEST PUSH2 0x8A6 PUSH1 0xC0 DUP3 ADD DUP3 PUSH2 0x1A93 JUMP JUMPDEST SWAP1 POP PUSH1 0x64 EQ PUSH2 0x8E1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x945 PUSH1 0x44 PUSH1 0x20 PUSH2 0x938 DUP5 PUSH2 0x8FB PUSH1 0xC0 DUP9 ADD DUP9 PUSH2 0x1A93 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP4 SWAP3 POP POP PUSH2 0x1183 SWAP1 POP JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND SWAP2 SWAP1 PUSH2 0x11A7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x473EC9FD PUSH1 0xE1 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF PUSH32 0x0 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x8E7D93FA SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9EA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xA22 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH2 0xA3E SWAP2 CALLER SWAP1 PUSH2 0x1A40 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA7B JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0xA99 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xAB7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0xAE5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x75E DUP2 PUSH2 0x12B6 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB19 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0xB2B SWAP2 SWAP1 PUSH2 0x1A80 JUMP JUMPDEST GT PUSH2 0xB49 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x813 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xE66 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB69 DUP3 PUSH2 0x1304 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB9A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x7F46895145F361561C5E9BBAF45B71269A4399DC3064511F123EBF4C6F04E357 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x8 SSTORE JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0xC16 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST PUSH1 0x0 PUSH4 0x4FF746F6 PUSH1 0xE0 SHL DUP4 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xC31 SWAP2 SWAP1 PUSH2 0x1AE1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE DUP3 MLOAD SWAP1 SWAP2 POP PUSH1 0x60 EQ PUSH2 0xCA6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xCBF SWAP2 SWAP1 PUSH2 0x1AF4 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x679B6DED CALLVALUE PUSH1 0x3 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 PUSH2 0xD1B DUP10 PUSH1 0x6 SLOAD PUSH2 0x134A JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP2 SWAP1 PUSH2 0xD3A SWAP1 DUP13 SWAP1 PUSH2 0x134A JUMP JUMPDEST PUSH2 0xD46 DUP12 PUSH1 0x8 SLOAD PUSH2 0x134A JUMP JUMPDEST DUP15 PUSH1 0x40 MLOAD DUP11 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD6A SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1B22 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD88 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDAD SWAP2 SWAP1 PUSH2 0x1B7D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 SWAP2 POP DUP2 SWAP1 PUSH32 0xDE92B5B7839F4A2C640F5E3BBB66D415458DADC57A487B0C7FA562ED7C9C896F SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x16C2FDB5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP2 DUP4 ADD DUP6 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB DUP5 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 PUSH1 0x0 SWAP1 PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH4 0x24B204D3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x92C8134C SWAP1 PUSH1 0x24 ADD PUSH2 0x180 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF4F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF73 SWAP2 SWAP1 PUSH2 0x1BA6 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 PUSH1 0x40 ADD MLOAD EQ PUSH2 0xFB7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x21636F6E6669726D44617461 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xC0 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND GT DUP1 ISZERO PUSH2 0xFE3 JUMPI POP PUSH1 0x0 DUP2 PUSH1 0xE0 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND GT JUMPDEST PUSH2 0x1019 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x85CDD185AD959 PUSH1 0xCA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1039 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x18A7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1082 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x10B6B4B93937B921B7B73732B1BA37B9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9F0C04BF PUSH2 0x10A3 PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x18A7 JUMP JUMPDEST PUSH2 0x10B3 PUSH1 0x40 DUP7 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x18A7 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0xA0 DUP10 ADD CALLDATALOAD PUSH2 0x10D4 PUSH1 0xC0 DUP12 ADD DUP12 PUSH2 0x1A93 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP10 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x10F7 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1C78 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1114 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1138 SWAP2 SWAP1 PUSH2 0x1B7D JUMP JUMPDEST SWAP1 POP PUSH2 0x117B DUP6 DUP6 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP8 SWAP3 POP DUP6 SWAP2 POP DUP11 SWAP1 POP PUSH2 0x1360 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0x119E PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x14F9 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0x11BC JUMPI POP PUSH1 0x0 PUSH2 0x12AF JUMP JUMPDEST PUSH2 0x11CF DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x11E5 PUSH1 0xFF DUP5 AND DUP6 PUSH2 0x1CE0 JUMP JUMPDEST GT ISZERO PUSH2 0x124D JUMPI PUSH2 0x11FE DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1211 DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x632 JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x1272 JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0x128B DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT DUP5 ADD SAR SWAP2 DUP7 ADD MLOAD SWAP1 SWAP2 AND SWAP3 POP POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x132F PUSH32 0x0 PUSH2 0x1536 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1359 JUMPI DUP2 PUSH2 0x12AF JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x100 DUP5 MLOAD LT PUSH2 0x13A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0xE0E4DEDECC40D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST DUP4 MLOAD DUP4 SWAP1 SHR ISZERO PUSH2 0x13E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x10B6B4B734B6B0B610383937B7B3 PUSH1 0x91 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x142B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x5 PUSH1 0x24 DUP3 ADD MSTORE PUSH5 0x1CDC195B9D PUSH1 0xDA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH3 0x7436D3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH3 0x7436D3 SWAP2 PUSH2 0x145F SWAP2 DUP10 SWAP2 DUP10 SWAP2 DUP10 SWAP2 ADD PUSH2 0x1CF3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x147C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14A0 SWAP2 SWAP1 PUSH2 0x1B7D JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0x14DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x10B83937B7B3 PUSH1 0xD1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST POP POP POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1506 DUP4 DUP6 PUSH2 0x1CE0 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x1516 JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x152B JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x12AF JUMP JUMPDEST PUSH2 0x119E DUP6 DUP6 DUP6 PUSH2 0x1694 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND CALLER EQ PUSH2 0x1561 JUMPI PUSH1 0x40 MLOAD PUSH4 0x253A6FC9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAB5D8943 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15C5 SWAP2 SWAP1 PUSH2 0x1D40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x80648B02 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1602 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1626 SWAP2 SWAP1 PUSH2 0x1D40 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xB69 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C6962417262697472756D4C313A2073797374656D206D657373616765732077 PUSH1 0x44 DUP3 ADD MSTORE PUSH13 0x34BA3437BABA1039B2B73232B9 PUSH1 0x99 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x632 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0x16BC JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0x16F5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x632 JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x171D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x180 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x175E JUMPI PUSH2 0x175E PUSH2 0x1724 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1775 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1790 JUMPI PUSH2 0x1790 PUSH2 0x1724 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x17B8 JUMPI PUSH2 0x17B8 PUSH2 0x1724 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x17D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1804 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x181C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1828 DUP7 DUP4 DUP8 ADD PUSH2 0x1764 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x183E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x184B DUP6 DUP3 DUP7 ADD PUSH2 0x1764 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1867 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x187E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x188A DUP5 DUP3 DUP6 ADD PUSH2 0x1764 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x75E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x18B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x12AF DUP2 PUSH2 0x1892 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x75E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x18EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xC0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x190D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x1918 DUP2 PUSH2 0x18C4 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1943 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP11 ADD SWAP2 POP DUP11 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1957 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x1966 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP12 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x197B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP7 POP DUP1 SWAP6 POP POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x19A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19AD DUP11 DUP3 DUP12 ADD PUSH2 0x18DA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x19E2 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x19C6 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1A15 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x19BC JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1A27 DUP2 DUP7 PUSH2 0x19BC JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1A53 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x19BC JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xB69 JUMPI PUSH2 0xB69 PUSH2 0x1A6A JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x1AAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1AC5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x1ADA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x12AF PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x19BC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1B09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP1 DUP13 AND DUP5 MSTORE DUP11 PUSH1 0x20 DUP6 ADD MSTORE DUP10 PUSH1 0x40 DUP6 ADD MSTORE DUP1 DUP10 AND PUSH1 0x60 DUP6 ADD MSTORE DUP1 DUP9 AND PUSH1 0x80 DUP6 ADD MSTORE POP DUP6 PUSH1 0xA0 DUP5 ADD MSTORE DUP5 PUSH1 0xC0 DUP5 ADD MSTORE DUP1 PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x1B6E DUP2 DUP5 ADD DUP6 PUSH2 0x19BC JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1B8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1BA1 DUP2 PUSH2 0x18C4 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x180 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1BB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1BC1 PUSH2 0x173A JUMP JUMPDEST DUP3 MLOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x1BE5 PUSH1 0x60 DUP5 ADD PUSH2 0x1B96 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x1BF6 PUSH1 0x80 DUP5 ADD PUSH2 0x1B96 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x1C07 PUSH1 0xA0 DUP5 ADD PUSH2 0x1B96 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x1C18 PUSH1 0xC0 DUP5 ADD PUSH2 0x1B96 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1C29 PUSH1 0xE0 DUP5 ADD PUSH2 0x1B96 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x1C3C DUP2 DUP6 ADD PUSH2 0x1B96 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x1C4E DUP5 DUP3 ADD PUSH2 0x1B96 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x1C60 DUP5 DUP3 ADD PUSH2 0x1B96 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 SWAP3 DUP4 ADD MLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP1 DUP12 AND DUP4 MSTORE DUP1 DUP11 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP8 PUSH1 0x40 DUP4 ADD MSTORE DUP7 PUSH1 0x60 DUP4 ADD MSTORE DUP6 PUSH1 0x80 DUP4 ADD MSTORE DUP5 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xE0 PUSH1 0xC0 DUP4 ADD MSTORE DUP3 PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP4 DUP6 DUP3 DUP6 ADD CALLDATACOPY PUSH1 0x0 DUP4 DUP6 ADD DUP3 ADD MSTORE PUSH1 0x1F SWAP1 SWAP4 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xB69 JUMPI PUSH2 0xB69 PUSH2 0x1A6A JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP5 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x80 DUP5 ADD SWAP1 DUP3 DUP9 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1D2C JUMPI DUP2 MLOAD DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1D10 JUMP JUMPDEST POP POP POP SWAP1 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE POP PUSH1 0x40 ADD MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x12AF DUP2 PUSH2 0x1892 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADD SWAP1 TIMESTAMP 0xE2 STATICCALL SAR 0xDF BLOCKHASH 0xAD 0x24 TIMESTAMP 0xB1 RETURNDATASIZE 0xA5 DUP10 0xCA DUP10 LOG1 GAS 0xC3 PUSH9 0xF145EBE78777A555B2 PUSH30 0x1B64736F6C63430008110033000000000000000000000000000000000000 ","sourceMap":"807:10121:121:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2167:41;;;;;;;;;;-1:-1:-1;2167:41:121;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;364:14:181;;357:22;339:41;;327:2;312:18;2167:41:121;;;;;;;;1391:35;;;;;;;;;;;;;;;;;;;537:25:181;;;525:2;510:18;1391:35:121;391:177:181;1587:37:116;;;;;;;;;;;;;;;;;;747:10:181;735:23;;;717:42;;705:2;690:18;1587:37:116;573:192:181;3797:176:121;;;;;;;;;;-1:-1:-1;3797:176:121;;;;;:::i;:::-;;:::i;:::-;;1949:112:168;;;;;;;;;;-1:-1:-1;2029:27:168;;1949:112;;1614:200:119;;;;;;:::i;:::-;;:::i;4262:148:116:-;;;;;;;;;;-1:-1:-1;4262:148:116;;;;;:::i;:::-;;:::i;1268:30::-;;;;;;;;;;;;;;;3939:119;;;;;;;;;;-1:-1:-1;3939:119:116;;;;;:::i;:::-;;:::i;1451:37::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3298:32:181;;;3280:51;;3268:2;3253:18;1451:37:116;3134:203:181;2151:79:168;;;;;;;;;;-1:-1:-1;1530:6:168;2151:79;;3820:442;;;;;;;;;;;;;:::i;1641:79::-;;;;;;;;;;-1:-1:-1;1687:7:168;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;4077:136:121;;;;;;;;;;-1:-1:-1;4077:136:121;;;;;:::i;:::-;;:::i;6486:1330::-;;;;;;;;;;-1:-1:-1;6486:1330:121;;;;;:::i;:::-;;:::i;3321:420:168:-;;;;;;;;;;-1:-1:-1;3321:420:168;;;;;:::i;:::-;;:::i;1725:24:121:-;;;;;;;;;;;;;;;;4404:539:168;;;;;;;;;;;;;:::i;1038:29:121:-;;;;;;;;;;-1:-1:-1;1038:29:121;;;;-1:-1:-1;;;;;1038:29:121;;;1705:30:116;;;;;;;;;;-1:-1:-1;1705:30:116;;;;-1:-1:-1;;;;;1705:30:116;;;1005:29:121;;;;;;;;;;-1:-1:-1;1005:29:121;;;;-1:-1:-1;;;;;1005:29:121;;;1792:85:168;;;;;;;;;;-1:-1:-1;1863:9:168;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;;;;;;;;;;-1:-1:-1;3097:4:168;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;1363:28:116;;;;;;;;;;;;;;;4490:107;;;;;;;;;;-1:-1:-1;4490:107:116;;;;;:::i;:::-;;:::i;2057:26:121:-;;;;;;;;;;;;;;;;4319:153;;;;;;;;;;-1:-1:-1;4319:153:121;;;;;:::i;:::-;;:::i;3797:176::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3900:20:121::1;::::0;3876:55:::1;::::0;;5478:25:181;;;5534:2;5519:18;;5512:34;;;3876:55:121::1;::::0;5451:18:181;3876:55:121::1;;;;;;;3937:20;:31:::0;3797:176::o;1614:200:119:-;2212:10:116;-1:-1:-1;;;;;2226:12:116;2212:26;;2204:51;;;;-1:-1:-1;;;2204:51:116;;5759:2:181;2204:51:116;;;5741:21:181;5798:2;5778:18;;;5771:30;-1:-1:-1;;;5817:18:181;;;5810:42;5869:18;;2204:51:116;;;;;;;;;1721:33:119::1;1734:5;1741:12;1721;:33::i;:::-;1765:44;1777:5;1784:12;1798:10;1765:44;;;;;;;;:::i;:::-;;;;;;;;1614:200:::0;;:::o;4262:148:116:-;1891:10;-1:-1:-1;;;;;1905:3:116;1891:17;;1883:34;;;;-1:-1:-1;;;1883:34:116;;;;;;7006:2:181;6988:21;;;7045:1;7025:18;;;7018:29;-1:-1:-1;;;7078:2:181;7063:18;;7056:34;7122:2;7107:18;;6804:327;1883:34:116;4337:22:::1;4353:5;4337:15;:22::i;:::-;4370:35;4387:5;4394:10;4370:35;;;;;;;:::i;:::-;;;;;;;;4262:148:::0;:::o;3939:119::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4016:37:116::1;4036:16;4016:19;:37::i;:::-;3939:119:::0;:::o;3820:442:168:-;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;3960:27:::2;;3991:1;3960:32:::0;3956:92:::2;;4001:47;;-1:-1:-1::0;;;4001:47:168::2;;;;;;;;;;;3956:92;4095:9;::::0;-1:-1:-1;;;;;4095:9:168::2;:23:::0;4091:88:::2;;4127:52;;-1:-1:-1::0;;;4127:52:168::2;;;;;;;;;;;4091:88;4236:21;4254:1;4236:9;:21::i;:::-;3820:442::o:0;4077:136:121:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4162:9:121::1;::::0;4145:37:::1;::::0;;5478:25:181;;;5534:2;5519:18;;5512:34;;;4145:37:121::1;::::0;5451:18:181;4145:37:121::1;;;;;;;4188:9;:20:::0;4077:136::o;6486:1330::-;6769:50;6787:8;6797:9;6808:10;6769:17;:50::i;:::-;6890:53;6907:9;6918:6;;6926;6934:8;6890:16;:53::i;:::-;7353:17;;;;:8;:17;:::i;:::-;:24;;7381:3;7353:31;7345:51;;;;-1:-1:-1;;;7345:51:121;;8448:2:181;7345:51:121;;;8430:21:181;8487:1;8467:18;;;8460:29;-1:-1:-1;;;8505:18:181;;;8498:37;8552:18;;7345:51:121;8246:330:181;7345:51:121;7588:13;7604:38;7635:2;7639;7604:24;7588:13;7604:17;;;;:8;:17;:::i;:::-;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7604:21:121;;:24;-1:-1:-1;;7604:21:121;:24;-1:-1:-1;7604:24:121:i;:::-;-1:-1:-1;;7604:30:121;;:38;:30;:38::i;:::-;7676:58;;-1:-1:-1;;;7676:58:121;;8783:10:181;7713:13:121;8771:23:181;7676:58:121;;;8753:42:181;8811:18;;;8804:34;;;7588:54:121;;-1:-1:-1;7689:12:121;-1:-1:-1;;;;;7676:36:121;;;;8726:18:181;;7676:58:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7764:47;7792:5;7781:17;;;;;;537:25:181;;525:2;510:18;;391:177;7781:17:121;;;;-1:-1:-1;;7781:17:121;;;;;;;;;;7764:47;;7800:10;;7764:47;:::i;:::-;;;;;;;;6683:1133;6486:1330;;;;;;;:::o;3321:420:168:-;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;4404:539::-:0;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;4490:107:116:-:0;4549:4;4568:24;4582:9;4568:13;:24::i;:::-;4561:31;4490:107;-1:-1:-1;;4490:107:116:o;4319:153:121:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4408:20:121::1;::::0;4389:50:::1;::::0;;5478:25:181;;;5534:2;5519:18;;5512:34;;;4389:50:121::1;::::0;5451:18:181;4389:50:121::1;;;;;;;4445:11;:22:::0;4319:153::o;4905:1438::-;5061:5;:12;5077:2;5061:18;5053:38;;;;-1:-1:-1;;;5053:38:121;;8448:2:181;5053:38:121;;;8430:21:181;8487:1;8467:18;;;8460:29;-1:-1:-1;;;8505:18:181;;;8498:37;8552:18;;5053:38:121;8246:330:181;5053:38:121;5121:22;5169:33;;;5204:5;5146:64;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5146:64:121;;;;;;;;;;;;;;-1:-1:-1;;;;;5146:64:121;-1:-1:-1;;;;;;5146:64:121;;;;;;;;;;5268:19;;5146:64;;-1:-1:-1;5292:6:121;5268:31;5260:56;;;;-1:-1:-1;;;5260:56:121;;9455:2:181;5260:56:121;;;9437:21:181;9494:2;9474:18;;;9467:30;-1:-1:-1;;;9513:18:181;;;9506:42;9565:18;;5260:56:121;9253:336:181;5260:56:121;5372:25;5399:14;5415:16;5453:12;5435:71;;;;;;;;;;;;:::i;:::-;5371:135;;;;;;5535:16;5569:3;-1:-1:-1;;;;;5554:41:121;;5603:9;5621:15;;;;;;;;;-1:-1:-1;;;;;5621:15:121;5656:1;5683:50;5693:17;5712:20;;5683:9;:50::i;:::-;5822:15;;6090:9;;-1:-1:-1;;;;;5822:15:121;;;;;;6072:28;;6082:6;;6072:9;:28::i;:::-;6164:32;6174:8;6184:11;;6164:9;:32::i;:::-;6272:9;5554:741;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6306:32;;5535:760;;-1:-1:-1;5535:760:121;;6306:32;;;;;4992:1351;;;;;4905:1438;;:::o;5220:267:116:-;5447:35;;-1:-1:-1;;;5447:35:116;;;;;;;;;;;5838:185;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;11124:34:181;;11194:15;;;11189:2;11174:18;;11167:43;5921:57:116;;11059:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;4981::168:-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;7820:912:121:-;9707:39;;;;;;;15622:19:181;;;15657:12;;;15650:28;;;9707:39:121;;;;;;;;;15694:12:181;;;;9707:39:121;;;9697:50;;;;;8052:19;;8207:6;;:24;;-1:-1:-1;;;8207:24:121;;11395:18:181;11383:31;;8207:24:121;;;11365:50:181;8052:57:121;;-1:-1:-1;8188:16:121;;-1:-1:-1;;;;;8207:6:121;;;;:14;;11338:18:181;;8207:24:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8188:43;;8265:11;8245:4;:16;;;:31;8237:56;;;;-1:-1:-1;;;8237:56:121;;12968:2:181;8237:56:121;;;12950:21:181;13007:2;12987:18;;;12980:30;-1:-1:-1;;;13026:18:181;;;13019:42;13078:18;;8237:56:121;12766:336:181;8237:56:121;8685:1;8666:4;:16;;;:20;;;:49;;;;;8714:1;8690:4;:21;;;:25;;;8666:49;8658:69;;;;-1:-1:-1;;;8658:69:121;;13309:2:181;8658:69:121;;;13291:21:181;13348:1;13328:18;;;13321:29;-1:-1:-1;;;13366:18:181;;;13359:37;13413:18;;8658:69:121;13107:330:181;8658:69:121;7933:799;;7820:912;;;:::o;8795:646::-;9023:15;;-1:-1:-1;;;;;9023:15:121;9006:13;;;;:4;:13;:::i;:::-;-1:-1:-1;;;;;9006:32:121;;8998:61;;;;-1:-1:-1;;;8998:61:121;;13644:2:181;8998:61:121;;;13626:21:181;13683:2;13663:18;;;13656:30;-1:-1:-1;;;13702:18:181;;;13695:46;13758:18;;8998:61:121;13442:340:181;8998:61:121;9155:6;;9138:14;;-1:-1:-1;;;;;9155:6:121;:24;9187:13;;;;:4;:13;:::i;:::-;9208:7;;;;;;;;:::i;:::-;9223:12;;;;9243;;;;9263:16;;;;9287:10;;;;9305:13;;;;9223:4;9305:13;:::i;:::-;9155:169;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9138:186;;9381:55;9402:6;;9381:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9410:6:121;;-1:-1:-1;9418:6:121;;-1:-1:-1;9426:9:121;;-1:-1:-1;9381:20:121;:55::i;:::-;8937:504;8795:646;;;;;:::o;10748:325:174:-;10848:10;;10818:7;;10975:4;10966:14;;11042:26;;;;10966:14;10848:10;11042:5;:26::i;:::-;11035:33;10748:325;-1:-1:-1;;;;;10748:325:174:o;15274:815::-;15375:14;15401:6;:11;;15411:1;15401:11;15397:49;;-1:-1:-1;15437:1:174;15422:17;;15397:49;15473:12;15477:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15473:12;-1:-1:-1;;;;;15455:30:174;:15;;;;:6;:15;:::i;:::-;:30;15451:282;;;15674:12;15678:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15674:12;15688;15692:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15688:12;15646:80;;-1:-1:-1;;;15646:80:174;;-1:-1:-1;;;;;15300:15:181;;;15646:80:174;;;15282:34:181;15352:15;;15332:18;;;15325:43;15384:18;;;15377:34;;;15710:15:174;;;15427:18:181;;;15420:34;15209:19;;15646:80:174;15008:452:181;15451:282:174;15751:2;15742:6;:11;;;15738:66;;;15762:42;;-1:-1:-1;;;15762:42:174;;;;;;;;;;;15738:66;15871:1;15862:10;;15811:15;15899:12;15903:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15899:12;-1:-1:-1;;;;;15884:27:174;;-1:-1:-1;15917:13:174;-1:-1:-1;;;;;5031:12:174;;5027:85;16053:17;;;16047:24;16043:36;;;;-1:-1:-1;;;15274:815:174;;;;;;:::o;5170:183:168:-;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;4520:146:121:-;4594:4;4626:35;4657:3;4626:30;:35::i;:::-;-1:-1:-1;;;;;4613:48:121;:9;-1:-1:-1;;;;;4613:48:121;;4606:55;;4520:146;;;:::o;4791:110::-;4857:7;4884:2;4879;:7;:17;;4894:2;4879:17;;;-1:-1:-1;4889:2:121;;4872:24;-1:-1:-1;4791:110:121:o;9902:1024::-;10066:3;10050:6;:13;:19;10042:44;;;;-1:-1:-1;;;10042:44:121;;15919:2:181;10042:44:121;;;15901:21:181;15958:2;15938:18;;;15931:30;-1:-1:-1;;;15977:18:181;;;15970:42;16029:18;;10042:44:121;15717:336:181;10042:44:121;10111:13;;10101:23;;;10100:30;10092:57;;;;-1:-1:-1;;;10092:57:121;;16260:2:181;10092:57:121;;;16242:21:181;16299:2;16279:18;;;16272:30;-1:-1:-1;;;16318:18:181;;;16311:44;16372:18;;10092:57:121;16058:338:181;10092:57:121;10535:17;;;;:9;:17;;;;;;;;10534:18;10526:36;;;;-1:-1:-1;;;10526:36:121;;16603:2:181;10526:36:121;;;16585:21:181;16642:1;16622:18;;;16615:29;-1:-1:-1;;;16660:18:181;;;16653:35;16705:18;;10526:36:121;16401:328:181;10526:36:121;10614:6;;;:49;;-1:-1:-1;;;10614:49:121;;10595:16;;-1:-1:-1;;;;;10614:6:121;;;;:26;;:49;;10641:6;;10649;;10657:5;;10614:49;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10595:68;;10849:9;10837:8;:21;10829:40;;;;-1:-1:-1;;;10829:40:121;;17718:2:181;10829:40:121;;;17700:21:181;17757:1;17737:18;;;17730:29;-1:-1:-1;;;17775:18:181;;;17768:36;17821:18;;10829:40:121;17516:329:181;10829:40:121;-1:-1:-1;;;10897:17:121;;;;:9;:17;;;;;:24;;-1:-1:-1;;10897:24:121;10917:4;10897:24;;;-1:-1:-1;9902:1024:121:o;9979:390:174:-;10076:15;;10114:11;10121:4;10114;:11;:::i;:::-;10099:26;;10224:4;10218:11;10212:4;10209:21;10206:52;;;-1:-1:-1;10249:1:174;10206:52;10273:4;10281:1;10273:9;10269:41;;-1:-1:-1;;10292:11:174;;;;;10269:41;10325:39;10346:5;10353:4;10359;10325:20;:39::i;1215:358:39:-;1280:7;-1:-1:-1;;;;;824:20:39;;:10;:20;1299:53;;1333:19;;-1:-1:-1;;;1333:19:39;;;;;;;;;;;1299:53;1363:14;1416:6;-1:-1:-1;;;;;1398:38:39;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1380:72:39;;:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1363:91;-1:-1:-1;;;;;;1472:20:39;;1464:78;;;;-1:-1:-1;;;1464:78:39;;18308:2:181;1464:78:39;;;18290:21:181;18347:2;18327:18;;;18320:30;18386:34;18366:18;;;18359:62;-1:-1:-1;;;18437:18:181;;;18430:43;18490:19;;1464:78:39;18106:409:181;8805:657:174;8916:15;8961:2;8990;9076:4;9108;-1:-1:-1;;;;;9127:12:174;;;;:28;;;;;9151:4;9143;-1:-1:-1;;;;;9143:12:174;;9127:28;9119:51;;;;-1:-1:-1;;;9119:51:174;;18722:2:181;9119:51:174;;;18704:21:181;18761:2;18741:18;;;18734:30;-1:-1:-1;;;18780:18:181;;;18773:40;18830:18;;9119:51:174;18520:334:181;9119:51:174;9271:23;;;9344:17;;;9327:35;;;9410:17;;;9394:34;;;;;-1:-1:-1;;;8805:657:174:o;14:180:181:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:181;;14:180;-1:-1:-1;14:180:181:o;770:127::-;831:10;826:3;822:20;819:1;812:31;862:4;859:1;852:15;886:4;883:1;876:15;902:247;969:2;963:9;1011:3;999:16;;1045:18;1030:34;;1066:22;;;1027:62;1024:88;;;1092:18;;:::i;:::-;1128:2;1121:22;902:247;:::o;1154:718::-;1196:5;1249:3;1242:4;1234:6;1230:17;1226:27;1216:55;;1267:1;1264;1257:12;1216:55;1303:6;1290:20;1329:18;1366:2;1362;1359:10;1356:36;;;1372:18;;:::i;:::-;1447:2;1441:9;1415:2;1501:13;;-1:-1:-1;;1497:22:181;;;1521:2;1493:31;1489:40;1477:53;;;1545:18;;;1565:22;;;1542:46;1539:72;;;1591:18;;:::i;:::-;1631:10;1627:2;1620:22;1666:2;1658:6;1651:18;1712:3;1705:4;1700:2;1692:6;1688:15;1684:26;1681:35;1678:55;;;1729:1;1726;1719:12;1678:55;1793:2;1786:4;1778:6;1774:17;1767:4;1759:6;1755:17;1742:54;1840:1;1833:4;1828:2;1820:6;1816:15;1812:26;1805:37;1860:6;1851:15;;;;;;1154:718;;;;:::o;1877:539::-;1963:6;1971;2024:2;2012:9;2003:7;1999:23;1995:32;1992:52;;;2040:1;2037;2030:12;1992:52;2080:9;2067:23;2109:18;2150:2;2142:6;2139:14;2136:34;;;2166:1;2163;2156:12;2136:34;2189:49;2230:7;2221:6;2210:9;2206:22;2189:49;:::i;:::-;2179:59;;2291:2;2280:9;2276:18;2263:32;2247:48;;2320:2;2310:8;2307:16;2304:36;;;2336:1;2333;2326:12;2304:36;;2359:51;2402:7;2391:8;2380:9;2376:24;2359:51;:::i;:::-;2349:61;;;1877:539;;;;;:::o;2421:320::-;2489:6;2542:2;2530:9;2521:7;2517:23;2513:32;2510:52;;;2558:1;2555;2548:12;2510:52;2598:9;2585:23;2631:18;2623:6;2620:30;2617:50;;;2663:1;2660;2653:12;2617:50;2686:49;2727:7;2718:6;2707:9;2703:22;2686:49;:::i;:::-;2676:59;2421:320;-1:-1:-1;;;;2421:320:181:o;2746:131::-;-1:-1:-1;;;;;2821:31:181;;2811:42;;2801:70;;2867:1;2864;2857:12;2882:247;2941:6;2994:2;2982:9;2973:7;2969:23;2965:32;2962:52;;;3010:1;3007;3000:12;2962:52;3049:9;3036:23;3068:31;3093:5;3068:31;:::i;3342:129::-;3427:18;3420:5;3416:30;3409:5;3406:41;3396:69;;3461:1;3458;3451:12;3476:158;3538:5;3583:3;3574:6;3569:3;3565:16;3561:26;3558:46;;;3600:1;3597;3590:12;3558:46;-1:-1:-1;3622:6:181;3476:158;-1:-1:-1;3476:158:181:o;3639:1194::-;3799:6;3807;3815;3823;3831;3839;3847;3900:3;3888:9;3879:7;3875:23;3871:33;3868:53;;;3917:1;3914;3907:12;3868:53;3956:9;3943:23;3975:30;3999:5;3975:30;:::i;:::-;4024:5;-1:-1:-1;4076:2:181;4061:18;;4048:32;;-1:-1:-1;4127:2:181;4112:18;;4099:32;;-1:-1:-1;4182:2:181;4167:18;;4154:32;4205:18;4235:14;;;4232:34;;;4262:1;4259;4252:12;4232:34;4300:6;4289:9;4285:22;4275:32;;4345:7;4338:4;4334:2;4330:13;4326:27;4316:55;;4367:1;4364;4357:12;4316:55;4407:2;4394:16;4433:2;4425:6;4422:14;4419:34;;;4449:1;4446;4439:12;4419:34;4502:7;4497:2;4487:6;4484:1;4480:14;4476:2;4472:23;4468:32;4465:45;4462:65;;;4523:1;4520;4513:12;4462:65;4554:2;4550;4546:11;4536:21;;4576:6;4566:16;;;4629:3;4618:9;4614:19;4601:33;4591:43;;4687:3;4676:9;4672:19;4659:33;4643:49;;4717:2;4707:8;4704:16;4701:36;;;4733:1;4730;4723:12;4701:36;;4756:71;4819:7;4808:8;4797:9;4793:24;4756:71;:::i;:::-;4746:81;;;3639:1194;;;;;;;;;;:::o;5898:422::-;5939:3;5977:5;5971:12;6004:6;5999:3;5992:19;6029:1;6039:162;6053:6;6050:1;6047:13;6039:162;;;6115:4;6171:13;;;6167:22;;6161:29;6143:11;;;6139:20;;6132:59;6068:12;6039:162;;;6043:3;6246:1;6239:4;6230:6;6225:3;6221:16;6217:27;6210:38;6309:4;6302:2;6298:7;6293:2;6285:6;6281:15;6277:29;6272:3;6268:39;6264:50;6257:57;;;5898:422;;;;:::o;6325:474::-;6546:2;6535:9;6528:21;6509:4;6572:44;6612:2;6601:9;6597:18;6589:6;6572:44;:::i;:::-;6664:9;6656:6;6652:22;6647:2;6636:9;6632:18;6625:50;6692:32;6717:6;6709;6692:32;:::i;:::-;6684:40;;;6789:1;6785;6780:3;6776:11;6772:19;6764:6;6760:32;6755:2;6744:9;6740:18;6733:60;6325:474;;;;;;:::o;7136:314::-;7311:2;7300:9;7293:21;7274:4;7331:44;7371:2;7360:9;7356:18;7348:6;7331:44;:::i;:::-;7323:52;;7440:1;7436;7431:3;7427:11;7423:19;7415:6;7411:32;7406:2;7395:9;7391:18;7384:60;7136:314;;;;;:::o;7455:127::-;7516:10;7511:3;7507:20;7504:1;7497:31;7547:4;7544:1;7537:15;7571:4;7568:1;7561:15;7587:128;7654:9;;;7675:11;;;7672:37;;;7689:18;;:::i;7720:521::-;7797:4;7803:6;7863:11;7850:25;7957:2;7953:7;7942:8;7926:14;7922:29;7918:43;7898:18;7894:68;7884:96;;7976:1;7973;7966:12;7884:96;8003:33;;8055:20;;;-1:-1:-1;8098:18:181;8087:30;;8084:50;;;8130:1;8127;8120:12;8084:50;8163:4;8151:17;;-1:-1:-1;8194:14:181;8190:27;;;8180:38;;8177:58;;;8231:1;8228;8221:12;8177:58;7720:521;;;;;:::o;9031:217::-;9178:2;9167:9;9160:21;9141:4;9198:44;9238:2;9227:9;9223:18;9215:6;9198:44;:::i;9594:306::-;9682:6;9690;9698;9751:2;9739:9;9730:7;9726:23;9722:32;9719:52;;;9767:1;9764;9757:12;9719:52;9796:9;9790:16;9780:26;;9846:2;9835:9;9831:18;9825:25;9815:35;;9890:2;9879:9;9875:18;9869:25;9859:35;;9594:306;;;;;:::o;9905:813::-;10219:4;10248:3;10287:1;10283;10278:3;10274:11;10270:19;10328:2;10320:6;10316:15;10305:9;10298:34;10368:6;10363:2;10352:9;10348:18;10341:34;10411:6;10406:2;10395:9;10391:18;10384:34;10466:2;10458:6;10454:15;10449:2;10438:9;10434:18;10427:43;10519:2;10511:6;10507:15;10501:3;10490:9;10486:19;10479:44;;10560:6;10554:3;10543:9;10539:19;10532:35;10604:6;10598:3;10587:9;10583:19;10576:35;10648:2;10642:3;10631:9;10627:19;10620:31;10668:44;10708:2;10697:9;10693:18;10685:6;10668:44;:::i;:::-;10660:52;9905:813;-1:-1:-1;;;;;;;;;;;9905:813:181:o;10723:184::-;10793:6;10846:2;10834:9;10825:7;10821:23;10817:32;10814:52;;;10862:1;10859;10852:12;10814:52;-1:-1:-1;10885:16:181;;10723:184;-1:-1:-1;10723:184:181:o;11426:136::-;11504:13;;11526:30;11504:13;11526:30;:::i;:::-;11426:136;;;:::o;11567:1194::-;11660:6;11713:3;11701:9;11692:7;11688:23;11684:33;11681:53;;;11730:1;11727;11720:12;11681:53;11756:17;;:::i;:::-;11802:9;11796:16;11789:5;11782:31;11866:2;11855:9;11851:18;11845:25;11840:2;11833:5;11829:14;11822:49;11924:2;11913:9;11909:18;11903:25;11898:2;11891:5;11887:14;11880:49;11961:48;12005:2;11994:9;11990:18;11961:48;:::i;:::-;11956:2;11949:5;11945:14;11938:72;12043:49;12087:3;12076:9;12072:19;12043:49;:::i;:::-;12037:3;12030:5;12026:15;12019:74;12126:49;12170:3;12159:9;12155:19;12126:49;:::i;:::-;12120:3;12113:5;12109:15;12102:74;12209:49;12253:3;12242:9;12238:19;12209:49;:::i;:::-;12203:3;12196:5;12192:15;12185:74;12292:49;12336:3;12325:9;12321:19;12292:49;:::i;:::-;12286:3;12279:5;12275:15;12268:74;12361:3;12396:48;12440:2;12429:9;12425:18;12396:48;:::i;:::-;12380:14;;;12373:72;12464:3;12499:48;12528:18;;;12499:48;:::i;:::-;12483:14;;;12476:72;12567:3;12602:48;12631:18;;;12602:48;:::i;:::-;12586:14;;;12579:72;12670:3;12711:18;;;12705:25;12689:14;;;12682:49;;;;-1:-1:-1;12590:5:181;11567:1194;-1:-1:-1;11567:1194:181:o;13787:897::-;14075:4;14121:1;14117;14112:3;14108:11;14104:19;14162:2;14154:6;14150:15;14139:9;14132:34;14214:2;14206:6;14202:15;14197:2;14186:9;14182:18;14175:43;;14254:6;14249:2;14238:9;14234:18;14227:34;14297:6;14292:2;14281:9;14277:18;14270:34;14341:6;14335:3;14324:9;14320:19;14313:35;14385:6;14379:3;14368:9;14364:19;14357:35;14429:3;14423;14412:9;14408:19;14401:32;14470:6;14464:3;14453:9;14449:19;14442:35;14496:3;14549:6;14541;14536:2;14525:9;14521:18;14508:48;14605:1;14576:22;;;14572:31;;14565:42;14668:2;14647:15;;;-1:-1:-1;;14643:29:181;14628:45;;;14624:54;;;;13787:897;-1:-1:-1;;;;;;;;13787:897:181:o;14878:125::-;14943:9;;;14964:10;;;14961:36;;;14977:18;;:::i;16734:777::-;16980:2;16992:21;;;17062:13;;16965:18;;;17084:22;;;16932:4;;17160;;17137:3;17122:19;;;17187:15;;;16932:4;17230:169;17244:6;17241:1;17238:13;17230:169;;;17305:13;;17293:26;;17339:12;;;;17374:15;;;;17266:1;17259:9;17230:169;;;-1:-1:-1;;;17435:18:181;;;17428:34;;;;-1:-1:-1;17493:2:181;17478:18;17471:34;17416:3;16734:777;-1:-1:-1;16734:777:181:o;17850:251::-;17920:6;17973:2;17961:9;17952:7;17948:23;17944:32;17941:52;;;17989:1;17986;17979:12;17941:52;18021:9;18015:16;18040:31;18065:5;18040:31;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"1514200","executionCost":"infinite","totalCost":"infinite"},"external":{"AMB()":"infinite","DOMAIN()":"infinite","MIRROR_DOMAIN()":"infinite","ROOT_MANAGER()":"infinite","acceptProposedOwner()":"63837","delay()":"259","gasPriceCap()":"2383","maxGasCap()":"2340","maxSubmissionCostCap()":"2341","mirrorConnector()":"2448","outbox()":"2382","owner()":"2442","processMessage(bytes)":"infinite","processMessageFromRoot(uint64,bytes32,bytes32,bytes32[],uint256,(address,address,uint256,uint256,uint256,uint256,bytes))":"infinite","processed(uint256)":"2463","proposeNewOwner(address)":"infinite","proposed()":"2398","proposedTimestamp()":"2404","renounceOwnership()":"65999","renounced()":"2397","rollup()":"2426","sendMessage(bytes,bytes)":"infinite","setGasPriceCap(uint256)":"28011","setMaxGasCap(uint256)":"27947","setMaxSubmissionCostCap(uint256)":"27991","setMirrorConnector(address)":"infinite","verifySender(address)":"infinite"},"internal":{"_confirmHash(bytes32,bytes32)":"infinite","_lesserOf(uint256,uint256)":"61","_recordOutputAsSpent(bytes32[] memory,uint256,bytes32,bytes32)":"infinite","_sendMessage(bytes memory,bytes memory)":"infinite","_validateMessage(bytes32,bytes32[] calldata,uint256,struct L2Message calldata)":"infinite","_validateSendRoot(uint64,bytes32,bytes32)":"infinite","_verifySender(address)":"infinite"}},"methodIdentifiers":{"AMB()":"d69f9d61","DOMAIN()":"52a9674b","MIRROR_DOMAIN()":"14168416","ROOT_MANAGER()":"5f61e3ec","acceptProposedOwner()":"c5b350df","delay()":"6a42b8f8","gasPriceCap()":"e2ce3c64","maxGasCap()":"b64d327e","maxSubmissionCostCap()":"0fca49cd","mirrorConnector()":"cc394283","outbox()":"ce11e6ab","owner()":"8da5cb5b","processMessage(bytes)":"4ff746f6","processMessageFromRoot(uint64,bytes32,bytes32,bytes32[],uint256,(address,address,uint256,uint256,uint256,uint256,bytes))":"9d4373a4","processed(uint256)":"05a79e06","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","renounceOwnership()":"715018a6","renounced()":"d232c220","rollup()":"cb23bcb5","sendMessage(bytes,bytes)":"48e6fa23","setGasPriceCap(uint256)":"fbd4006b","setMaxGasCap(uint256)":"9ab0563b","setMaxSubmissionCostCap(uint256)":"3327998d","setMirrorConnector(address)":"5bd11efc","verifySender(address)":"db1b7659"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_mirrorDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_amb\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rootManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_outbox\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxSubmissionCostCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxGasCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasPriceCap\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Connector__processMessage_notUsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotCrossChainCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__index_indexMoreThan32Bytes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"len\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slice\",\"type\":\"uint256\"}],\"name\":\"TypedMemView__index_overrun\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_previous\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"GasPriceCapUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_previous\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"MaxGasCapUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_previous\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"MaxSubmissionCapUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"MirrorConnectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"mirrorDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"amb\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mirrorConnector\",\"type\":\"address\"}],\"name\":\"NewConnector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"ticketId\",\"type\":\"uint256\"}],\"name\":\"RetryableTicketCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROOT_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasPriceCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxGasCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxSubmissionCostCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outbox\",\"outputs\":[{\"internalType\":\"contract IArbitrumOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_nodeNum\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_sendRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"_proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct L2Message\",\"name\":\"_message\",\"type\":\"tuple\"}],\"name\":\"processMessageFromRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"processed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"contract IArbitrumRollup\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"setGasPriceCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"setMaxGasCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"setMaxSubmissionCostCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"}],\"name\":\"setMirrorConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"events\":{\"GasPriceCapUpdated(uint256,uint256)\":{\"params\":{\"_previous\":\"The starting value\",\"_updated\":\"The final value\"}},\"MaxGasCapUpdated(uint256,uint256)\":{\"params\":{\"_previous\":\"The starting value\",\"_updated\":\"The final value\"}},\"MaxSubmissionCapUpdated(uint256,uint256)\":{\"params\":{\"_previous\":\"The starting value\",\"_updated\":\"The final value\"}}},\"kind\":\"dev\",\"methods\":{\"processMessage(bytes)\":{\"details\":\"This is called by AMBs to process messages originating from mirror connector\"},\"sendMessage(bytes,bytes)\":{\"details\":\"This is called by the root manager *only* on mainnet to propagate the aggregate root\"},\"setGasPriceCap(uint256)\":{\"params\":{\"_updated\":\"The new value\"}},\"setMaxGasCap(uint256)\":{\"params\":{\"_updated\":\"The new value\"}},\"setMaxSubmissionCostCap(uint256)\":{\"params\":{\"_updated\":\"The new value\"}}},\"stateVariables\":{\"gasPriceCap\":{\"details\":\"The value used in `createRetryableTicket` is the lesser of the cap or a value passed in via `_encodedData` in `_sendMessage`. This value represents L2 gas price bid for immediate L2 execution attempt\"},\"maxGasCap\":{\"details\":\"The value used in `createRetryableTicket` is the lesser of the cap or a value passed in via `_encodedData` in `_sendMessage`. This value represents gas limit for immediate L2 execution attempt\"},\"maxSubmissionCostCap\":{\"details\":\"The value used in `createRetryableTicket` is the lesser of the cap or a value passed in via `_encodedData` in `_sendMessage`. This value represents amount of ETH allocated to pay for the base submission fee\"}},\"version\":1},\"userdoc\":{\"events\":{\"GasPriceCapUpdated(uint256,uint256)\":{\"notice\":\"Emitted when admin updates the gasPriceCap\"},\"MaxGasCapUpdated(uint256,uint256)\":{\"notice\":\"Emitted when admin updates the maxGasCap\"},\"MaxSubmissionCapUpdated(uint256,uint256)\":{\"notice\":\"Emitted when admin updates the maxSubmissionCap\"},\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"}},\"kind\":\"user\",\"methods\":{\"AMB()\":{\"notice\":\"Address of the AMB on this domain.\"},\"DOMAIN()\":{\"notice\":\"The domain of this Messaging (i.e. Connector) contract.\"},\"MIRROR_DOMAIN()\":{\"notice\":\"The domain of the corresponding messaging (i.e. Connector) contract.\"},\"ROOT_MANAGER()\":{\"notice\":\"RootManager contract address.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"gasPriceCap()\":{\"notice\":\"Sets cap on gasPrice used in `createRetryableTicket`\"},\"maxGasCap()\":{\"notice\":\"Sets cap on maxGas used in `createRetryableTicket`\"},\"maxSubmissionCostCap()\":{\"notice\":\"Sets cap on maxSubmissionCost used in `createRetryableTicket`\"},\"mirrorConnector()\":{\"notice\":\"Connector on L2 for L1 connectors, and vice versa.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"processMessage(bytes)\":{\"notice\":\"Processes a message received by an AMB\"},\"processed(uint256)\":{\"notice\":\"Tracks which messages have been processed from bridge\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"sendMessage(bytes,bytes)\":{\"notice\":\"Sends a message over the amb\"},\"setGasPriceCap(uint256)\":{\"notice\":\"Used (by admin) to update the gasPriceCap\"},\"setMaxGasCap(uint256)\":{\"notice\":\"Used (by admin) to update the maxGasCap\"},\"setMaxSubmissionCostCap(uint256)\":{\"notice\":\"Used (by admin) to update the maxSubmissionCostCap\"},\"setMirrorConnector(address)\":{\"notice\":\"Sets the address of the l2Connector for this domain\"},\"verifySender(address)\":{\"notice\":\"Checks the cross domain sender for a given address\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/arbitrum/ArbitrumHubConnector.sol\":\"ArbitrumHubConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (crosschain/arbitrum/LibArbitrumL1.sol)\\n\\npragma solidity ^0.8.4;\\n\\nimport {IBridge as ArbitrumL1_Bridge} from \\\"../../vendor/arbitrum/IBridge.sol\\\";\\nimport {IOutbox as ArbitrumL1_Outbox} from \\\"../../vendor/arbitrum/IOutbox.sol\\\";\\nimport \\\"../errors.sol\\\";\\n\\n/**\\n * @dev Primitives for cross-chain aware contracts for\\n * https://arbitrum.io/[Arbitrum].\\n *\\n * This version should only be used on L1 to process cross-chain messages\\n * originating from L2. For the other side, use {LibArbitrumL2}.\\n */\\nlibrary LibArbitrumL1 {\\n    /**\\n     * @dev Returns whether the current function call is the result of a\\n     * cross-chain message relayed by the `bridge`.\\n     */\\n    function isCrossChain(address bridge) internal view returns (bool) {\\n        return msg.sender == bridge;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the sender that triggered the current\\n     * cross-chain message through the `bridge`.\\n     *\\n     * NOTE: {isCrossChain} should be checked before trying to recover the\\n     * sender, as it will revert with `NotCrossChainCall` if the current\\n     * function call is not the result of a cross-chain message.\\n     */\\n    function crossChainSender(address bridge) internal view returns (address) {\\n        if (!isCrossChain(bridge)) revert NotCrossChainCall();\\n\\n        address sender = ArbitrumL1_Outbox(ArbitrumL1_Bridge(bridge).activeOutbox()).l2ToL1Sender();\\n        require(sender != address(0), \\\"LibArbitrumL1: system messages without sender\\\");\\n\\n        return sender;\\n    }\\n}\\n\",\"keccak256\":\"0x364ef776375bac74a5f4f2fd1dc1d4a089915ea0fe720249bb71431e7b2f787f\",\"license\":\"MIT\"},\"@openzeppelin/contracts/crosschain/errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (crosschain/errors.sol)\\n\\npragma solidity ^0.8.4;\\n\\nerror NotCrossChainCall();\\nerror InvalidCrossChainSender(address actual, address expected);\\n\",\"keccak256\":\"0xa1e9b651a2427925598b49ef35da5930abc07859cfac5b9dfb1912f063a024b3\",\"license\":\"MIT\"},\"@openzeppelin/contracts/vendor/arbitrum/IBridge.sol\":{\"content\":\"// Copyright 2021-2022, Offchain Labs, Inc.\\n// For license information, see https://github.com/nitro/blob/master/LICENSE\\n// SPDX-License-Identifier: BUSL-1.1\\n// OpenZeppelin Contracts (last updated v4.8.0) (vendor/arbitrum/IBridge.sol)\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.6.9 <0.9.0;\\n\\ninterface IBridge {\\n    event MessageDelivered(\\n        uint256 indexed messageIndex,\\n        bytes32 indexed beforeInboxAcc,\\n        address inbox,\\n        uint8 kind,\\n        address sender,\\n        bytes32 messageDataHash,\\n        uint256 baseFeeL1,\\n        uint64 timestamp\\n    );\\n\\n    event BridgeCallTriggered(address indexed outbox, address indexed to, uint256 value, bytes data);\\n\\n    event InboxToggle(address indexed inbox, bool enabled);\\n\\n    event OutboxToggle(address indexed outbox, bool enabled);\\n\\n    event SequencerInboxUpdated(address newSequencerInbox);\\n\\n    function allowedDelayedInboxList(uint256) external returns (address);\\n\\n    function allowedOutboxList(uint256) external returns (address);\\n\\n    /// @dev Accumulator for delayed inbox messages; tail represents hash of the current state; each element represents the inclusion of a new message.\\n    function delayedInboxAccs(uint256) external view returns (bytes32);\\n\\n    /// @dev Accumulator for sequencer inbox messages; tail represents hash of the current state; each element represents the inclusion of a new message.\\n    function sequencerInboxAccs(uint256) external view returns (bytes32);\\n\\n    // OpenZeppelin: changed return type from IOwnable\\n    function rollup() external view returns (address);\\n\\n    function sequencerInbox() external view returns (address);\\n\\n    function activeOutbox() external view returns (address);\\n\\n    function allowedDelayedInboxes(address inbox) external view returns (bool);\\n\\n    function allowedOutboxes(address outbox) external view returns (bool);\\n\\n    function sequencerReportedSubMessageCount() external view returns (uint256);\\n\\n    /**\\n     * @dev Enqueue a message in the delayed inbox accumulator.\\n     *      These messages are later sequenced in the SequencerInbox, either\\n     *      by the sequencer as part of a normal batch, or by force inclusion.\\n     */\\n    function enqueueDelayedMessage(\\n        uint8 kind,\\n        address sender,\\n        bytes32 messageDataHash\\n    ) external payable returns (uint256);\\n\\n    function executeCall(\\n        address to,\\n        uint256 value,\\n        bytes calldata data\\n    ) external returns (bool success, bytes memory returnData);\\n\\n    function delayedMessageCount() external view returns (uint256);\\n\\n    function sequencerMessageCount() external view returns (uint256);\\n\\n    // ---------- onlySequencerInbox functions ----------\\n\\n    function enqueueSequencerMessage(\\n        bytes32 dataHash,\\n        uint256 afterDelayedMessagesRead,\\n        uint256 prevMessageCount,\\n        uint256 newMessageCount\\n    )\\n        external\\n        returns (\\n            uint256 seqMessageIndex,\\n            bytes32 beforeAcc,\\n            bytes32 delayedAcc,\\n            bytes32 acc\\n        );\\n\\n    /**\\n     * @dev Allows the sequencer inbox to submit a delayed message of the batchPostingReport type\\n     *      This is done through a separate function entrypoint instead of allowing the sequencer inbox\\n     *      to call `enqueueDelayedMessage` to avoid the gas overhead of an extra SLOAD in either\\n     *      every delayed inbox or every sequencer inbox call.\\n     */\\n    function submitBatchSpendingReport(address batchPoster, bytes32 dataHash) external returns (uint256 msgNum);\\n\\n    // ---------- onlyRollupOrOwner functions ----------\\n\\n    function setSequencerInbox(address _sequencerInbox) external;\\n\\n    function setDelayedInbox(address inbox, bool enabled) external;\\n\\n    function setOutbox(address inbox, bool enabled) external;\\n\\n    // ---------- initializer ----------\\n\\n    // OpenZeppelin: changed rollup_ type from IOwnable\\n    function initialize(address rollup_) external;\\n}\\n\",\"keccak256\":\"0xdc8847efc0ca74c9f708d9bbd26592b4d21ccbcece6c1ce547d411891cdfe62d\",\"license\":\"BUSL-1.1\"},\"@openzeppelin/contracts/vendor/arbitrum/IOutbox.sol\":{\"content\":\"// Copyright 2021-2022, Offchain Labs, Inc.\\n// For license information, see https://github.com/nitro/blob/master/LICENSE\\n// SPDX-License-Identifier: BUSL-1.1\\n// OpenZeppelin Contracts (last updated v4.8.0) (vendor/arbitrum/IOutbox.sol)\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.6.9 <0.9.0;\\n\\nimport \\\"./IBridge.sol\\\";\\n\\ninterface IOutbox {\\n    event SendRootUpdated(bytes32 indexed blockHash, bytes32 indexed outputRoot);\\n    event OutBoxTransactionExecuted(\\n        address indexed to,\\n        address indexed l2Sender,\\n        uint256 indexed zero,\\n        uint256 transactionIndex\\n    );\\n\\n    function rollup() external view returns (address); // the rollup contract\\n\\n    function bridge() external view returns (IBridge); // the bridge contract\\n\\n    function spent(uint256) external view returns (bytes32); // packed spent bitmap\\n\\n    function roots(bytes32) external view returns (bytes32); // maps root hashes => L2 block hash\\n\\n    // solhint-disable-next-line func-name-mixedcase\\n    function OUTBOX_VERSION() external view returns (uint128); // the outbox version\\n\\n    function updateSendRoot(bytes32 sendRoot, bytes32 l2BlockHash) external;\\n\\n    /// @notice When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account\\n    ///         When the return value is zero, that means this is a system message\\n    /// @dev the l2ToL1Sender behaves as the tx.origin, the msg.sender should be validated to protect against reentrancies\\n    function l2ToL1Sender() external view returns (address);\\n\\n    /// @return l2Block return L2 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\\n    function l2ToL1Block() external view returns (uint256);\\n\\n    /// @return l1Block return L1 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\\n    function l2ToL1EthBlock() external view returns (uint256);\\n\\n    /// @return timestamp return L2 timestamp when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\\n    function l2ToL1Timestamp() external view returns (uint256);\\n\\n    /// @return outputId returns the unique output identifier of the L2 to L1 tx or 0 if no L2 to L1 transaction is active\\n    function l2ToL1OutputId() external view returns (bytes32);\\n\\n    /**\\n     * @notice Executes a messages in an Outbox entry.\\n     * @dev Reverts if dispute period hasn't expired, since the outbox entry\\n     *      is only created once the rollup confirms the respective assertion.\\n     * @dev it is not possible to execute any L2-to-L1 transaction which contains data\\n     *      to a contract address without any code (as enforced by the Bridge contract).\\n     * @param proof Merkle proof of message inclusion in send root\\n     * @param index Merkle path to message\\n     * @param l2Sender sender if original message (i.e., caller of ArbSys.sendTxToL1)\\n     * @param to destination address for L1 contract call\\n     * @param l2Block l2 block number at which sendTxToL1 call was made\\n     * @param l1Block l1 block number at which sendTxToL1 call was made\\n     * @param l2Timestamp l2 Timestamp at which sendTxToL1 call was made\\n     * @param value wei in L1 message\\n     * @param data abi-encoded L1 message data\\n     */\\n    function executeTransaction(\\n        bytes32[] calldata proof,\\n        uint256 index,\\n        address l2Sender,\\n        address to,\\n        uint256 l2Block,\\n        uint256 l1Block,\\n        uint256 l2Timestamp,\\n        uint256 value,\\n        bytes calldata data\\n    ) external;\\n\\n    /**\\n     *  @dev function used to simulate the result of a particular function call from the outbox\\n     *       it is useful for things such as gas estimates. This function includes all costs except for\\n     *       proof validation (which can be considered offchain as a somewhat of a fixed cost - it's\\n     *       not really a fixed cost, but can be treated as so with a fixed overhead for gas estimation).\\n     *       We can't include the cost of proof validation since this is intended to be used to simulate txs\\n     *       that are included in yet-to-be confirmed merkle roots. The simulation entrypoint could instead pretend\\n     *       to confirm a pending merkle root, but that would be less practical for integrating with tooling.\\n     *       It is only possible to trigger it when the msg sender is address zero, which should be impossible\\n     *       unless under simulation in an eth_call or eth_estimateGas\\n     */\\n    function executeTransactionSimulation(\\n        uint256 index,\\n        address l2Sender,\\n        address to,\\n        uint256 l2Block,\\n        uint256 l1Block,\\n        uint256 l2Timestamp,\\n        uint256 value,\\n        bytes calldata data\\n    ) external;\\n\\n    /**\\n     * @param index Merkle path to message\\n     * @return true if the message has been spent\\n     */\\n    function isSpent(uint256 index) external view returns (bool);\\n\\n    function calculateItemHash(\\n        address l2Sender,\\n        address to,\\n        uint256 l2Block,\\n        uint256 l1Block,\\n        uint256 l2Timestamp,\\n        uint256 value,\\n        bytes calldata data\\n    ) external pure returns (bytes32);\\n\\n    function calculateMerkleRoot(\\n        bytes32[] memory proof,\\n        uint256 path,\\n        bytes32 item\\n    ) external pure returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf11685613c2ca2e87e9ad7e93bff2bd966aa16f11599371878dff047be17d945\",\"license\":\"BUSL-1.1\"},\"contracts/messaging/connectors/Connector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IConnector} from \\\"../interfaces/IConnector.sol\\\";\\n\\n/**\\n * @title Connector\\n * @author Connext Labs, Inc.\\n * @notice This contract has the messaging interface functions used by all connectors.\\n *\\n * @dev This contract stores information about mirror connectors, but can be used as a\\n * base for contracts that do not have a mirror (i.e. the connector handling messaging on\\n * mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\\n * will be empty\\n *\\n * @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\\n * or `mirrorGas`\\n */\\nabstract contract Connector is ProposedOwnable, IConnector {\\n  // ========== Custom Errors ===========\\n\\n  error Connector__processMessage_notUsed();\\n\\n  // ============ Events ============\\n\\n  event NewConnector(\\n    uint32 indexed domain,\\n    uint32 indexed mirrorDomain,\\n    address amb,\\n    address rootManager,\\n    address mirrorConnector\\n  );\\n\\n  event MirrorConnectorUpdated(address previous, address current);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The domain of this Messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable DOMAIN;\\n\\n  /**\\n   * @notice Address of the AMB on this domain.\\n   */\\n  address public immutable AMB;\\n\\n  /**\\n   * @notice RootManager contract address.\\n   */\\n  address public immutable ROOT_MANAGER;\\n\\n  /**\\n   * @notice The domain of the corresponding messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable MIRROR_DOMAIN;\\n\\n  /**\\n   * @notice Connector on L2 for L1 connectors, and vice versa.\\n   */\\n  address public mirrorConnector;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered AMB\\n   */\\n  modifier onlyAMB() {\\n    require(msg.sender == AMB, \\\"!AMB\\\");\\n    _;\\n  }\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered ROOT_MANAGER\\n   */\\n  modifier onlyRootManager() {\\n    // NOTE: RootManager will be zero address for spoke connectors.\\n    // Only root manager can dispatch a message to spokes/L2s via the hub connector.\\n    require(msg.sender == ROOT_MANAGER, \\\"!rootManager\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) ProposedOwnable() {\\n    // set the owner\\n    _setOwner(msg.sender);\\n\\n    // sanity checks on values\\n    require(_domain != 0, \\\"empty domain\\\");\\n    require(_rootManager != address(0), \\\"empty rootManager\\\");\\n    // see note at top of contract on why the mirror values are not sanity checked\\n\\n    // set immutables\\n    DOMAIN = _domain;\\n    AMB = _amb;\\n    ROOT_MANAGER = _rootManager;\\n    MIRROR_DOMAIN = _mirrorDomain;\\n    // set mutables if defined\\n    if (_mirrorConnector != address(0)) {\\n      _setMirrorConnector(_mirrorConnector);\\n    }\\n\\n    emit NewConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector);\\n  }\\n\\n  // ============ Receivable ============\\n  /**\\n   * @notice Connectors may need to receive native asset to handle fees when sending a\\n   * message\\n   */\\n  receive() external payable {}\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Sets the address of the l2Connector for this domain\\n   */\\n  function setMirrorConnector(address _mirrorConnector) public onlyOwner {\\n    _setMirrorConnector(_mirrorConnector);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice Processes a message received by an AMB\\n   * @dev This is called by AMBs to process messages originating from mirror connector\\n   */\\n  function processMessage(bytes memory _data) external virtual onlyAMB {\\n    _processMessage(_data);\\n    emit MessageProcessed(_data, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Checks the cross domain sender for a given address\\n   */\\n  function verifySender(address _expected) external returns (bool) {\\n    return _verifySender(_expected);\\n  }\\n\\n  // ============ Virtual Functions ============\\n\\n  /**\\n   * @notice This function is used by the Connext contract on the l2 domain to send a message to the\\n   * l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\\n   * @param _data The contents of the message\\n   * @param _encodedData Data used to send the message; specific to connector\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal virtual;\\n\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(\\n    bytes memory /* _data */\\n  ) internal virtual {\\n    // By default, reverts. This is to ensure the call path is not used unless this function is\\n    // overridden by the inheriting class\\n    revert Connector__processMessage_notUsed();\\n  }\\n\\n  /**\\n   * @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\\n   * is the expected address.\\n   * @dev Should be overridden by the implementing Connector contract.\\n   */\\n  function _verifySender(address _expected) internal virtual returns (bool);\\n\\n  // ============ Private Functions ============\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal virtual {\\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\\n    mirrorConnector = _mirrorConnector;\\n  }\\n}\\n\",\"keccak256\":\"0x08d4077a1b5caf9f46491206064bb24bee467dd741b42fed3d30a608eea83368\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/HubConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Connector} from \\\"./Connector.sol\\\";\\n\\n/**\\n * @title HubConnector\\n * @author Connext Labs, Inc.\\n * @notice This contract implements the messaging functions needed on the hub-side of a given AMB.\\n * The HubConnector has a limited set of functionality compared to the SpokeConnector, namely that\\n * it contains no logic to store or prove messages.\\n *\\n * @dev This contract should be deployed on the hub-side of an AMB (i.e. on L1), and contracts\\n * which extend this should implement the virtual functions defined in the BaseConnector class\\n */\\nabstract contract HubConnector is Connector {\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) Connector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector) {}\\n\\n  // ============ Public fns ============\\n  /**\\n   * @notice Sends a message over the amb\\n   * @dev This is called by the root manager *only* on mainnet to propagate the aggregate root\\n   */\\n  function sendMessage(bytes memory _data, bytes memory _encodedData) external payable onlyRootManager {\\n    _sendMessage(_data, _encodedData);\\n    emit MessageSent(_data, _encodedData, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0xc35621419ca872ed0550b0943a577b39942f3d2c9b54de008fee382d5ad290e4\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/arbitrum/ArbitrumHubConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {LibArbitrumL1} from \\\"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL1.sol\\\";\\n\\nimport {TypedMemView} from \\\"../../../shared/libraries/TypedMemView.sol\\\";\\n\\nimport {IRootManager} from \\\"../../interfaces/IRootManager.sol\\\";\\nimport {IArbitrumInbox} from \\\"../../interfaces/ambs/arbitrum/IArbitrumInbox.sol\\\";\\nimport {IArbitrumOutbox} from \\\"../../interfaces/ambs/arbitrum/IArbitrumOutbox.sol\\\";\\nimport {IArbitrumRollup, Node} from \\\"../../interfaces/ambs/arbitrum/IArbitrumRollup.sol\\\";\\n\\nimport {HubConnector} from \\\"../HubConnector.sol\\\";\\nimport {Connector} from \\\"../Connector.sol\\\";\\n\\nstruct L2Message {\\n  address l2Sender;\\n  address to;\\n  uint256 l2Block;\\n  uint256 l1Block;\\n  uint256 l2Timestamp;\\n  uint256 value;\\n  bytes callData;\\n}\\n\\ncontract ArbitrumHubConnector is HubConnector {\\n  // ============ Libraries ============\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // ============ Storage ============\\n\\n  IArbitrumOutbox public outbox;\\n  IArbitrumRollup public rollup;\\n\\n  /**\\n   * @notice Sets cap on maxSubmissionCost used in `createRetryableTicket`\\n   * @dev The value used in `createRetryableTicket` is the lesser of the cap or\\n   * a value passed in via `_encodedData` in `_sendMessage`.\\n   *\\n   * This value represents amount of ETH allocated to pay for the base submission fee\\n   */\\n  uint256 public maxSubmissionCostCap;\\n\\n  /**\\n   * @notice Sets cap on maxGas used in `createRetryableTicket`\\n   * @dev The value used in `createRetryableTicket` is the lesser of the cap or\\n   * a value passed in via `_encodedData` in `_sendMessage`.\\n   *\\n   * This value represents gas limit for immediate L2 execution attempt\\n   */\\n  uint256 public maxGasCap;\\n\\n  /**\\n   * @notice Sets cap on gasPrice used in `createRetryableTicket`\\n   * @dev The value used in `createRetryableTicket` is the lesser of the cap or\\n   * a value passed in via `_encodedData` in `_sendMessage`.\\n   *\\n   * This value represents L2 gas price bid for immediate L2 execution attempt\\n   */\\n  uint256 public gasPriceCap;\\n\\n  /**\\n   * @notice Tracks which messages have been processed from bridge\\n   */\\n  mapping(uint256 => bool) public processed;\\n\\n  // ============ Events ============\\n  // TODO: do we need any other information from the ticket to link to message?\\n  event RetryableTicketCreated(uint256 indexed ticketId);\\n\\n  /**\\n   * @notice Emitted when admin updates the maxSubmissionCap\\n   * @param _previous The starting value\\n   * @param _updated The final value\\n   */\\n  event MaxSubmissionCapUpdated(uint256 _previous, uint256 _updated);\\n\\n  /**\\n   * @notice Emitted when admin updates the maxGasCap\\n   * @param _previous The starting value\\n   * @param _updated The final value\\n   */\\n  event MaxGasCapUpdated(uint256 _previous, uint256 _updated);\\n\\n  /**\\n   * @notice Emitted when admin updates the gasPriceCap\\n   * @param _previous The starting value\\n   * @param _updated The final value\\n   */\\n  event GasPriceCapUpdated(uint256 _previous, uint256 _updated);\\n\\n  // ============ Constructor ============\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    address _outbox,\\n    uint256 _maxSubmissionCostCap,\\n    uint256 _maxGasCap,\\n    uint256 _gasPriceCap\\n  ) HubConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector) {\\n    outbox = IArbitrumOutbox(_outbox);\\n    rollup = IArbitrumRollup(outbox.rollup());\\n\\n    // Set initial caps for L1 -> L2 messages\\n    maxSubmissionCostCap = _maxSubmissionCostCap;\\n    maxGasCap = _maxGasCap;\\n    gasPriceCap = _gasPriceCap;\\n  }\\n\\n  // ============ Admin fns ============\\n\\n  /**\\n   * @notice Used (by admin) to update the maxSubmissionCostCap\\n   * @param _updated The new value\\n   */\\n  function setMaxSubmissionCostCap(uint256 _updated) public onlyOwner {\\n    emit MaxSubmissionCapUpdated(maxSubmissionCostCap, _updated);\\n    maxSubmissionCostCap = _updated;\\n  }\\n\\n  /**\\n   * @notice Used (by admin) to update the maxGasCap\\n   * @param _updated The new value\\n   */\\n  function setMaxGasCap(uint256 _updated) public onlyOwner {\\n    emit MaxGasCapUpdated(maxGasCap, _updated);\\n    maxGasCap = _updated;\\n  }\\n\\n  /**\\n   * @notice Used (by admin) to update the gasPriceCap\\n   * @param _updated The new value\\n   */\\n  function setGasPriceCap(uint256 _updated) public onlyOwner {\\n    emit GasPriceCapUpdated(maxSubmissionCostCap, _updated);\\n    gasPriceCap = _updated;\\n  }\\n\\n  // ============ Private fns ============\\n\\n  function _verifySender(address _expected) internal view override returns (bool) {\\n    return _expected == LibArbitrumL1.crossChainSender(AMB);\\n  }\\n\\n  /**\\n   * @notice Helper to return the lesser of two values\\n   * @param _a Some number\\n   * @param _b Some number\\n   */\\n  function _lesserOf(uint256 _a, uint256 _b) internal pure returns (uint256) {\\n    return _a < _b ? _a : _b;\\n  }\\n\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\\n    // Should always be dispatching the aggregate root\\n    require(_data.length == 32, \\\"!length\\\");\\n    // Get the calldata\\n    bytes memory _calldata = abi.encodeWithSelector(Connector.processMessage.selector, _data);\\n\\n    // Should include specialized calldata\\n    require(_encodedData.length == (32 * 3), \\\"!data length\\\");\\n\\n    // Decode all of the gas-related parameters\\n    (uint256 maxSubmissionCost, uint256 maxGas, uint256 gasPrice) = abi.decode(\\n      _encodedData,\\n      (uint256, uint256, uint256)\\n    );\\n\\n    // dispatch to l2\\n    uint256 ticketID = IArbitrumInbox(AMB).createRetryableTicket{value: msg.value}(\\n      mirrorConnector, // destAddr\\n      0, // arbTxCallValue\\n      _lesserOf(maxSubmissionCost, maxSubmissionCostCap), // maxSubmissionCost: Amount of ETH allocated to pay for the base submission fee\\n      mirrorConnector, // submissionRefundAddress: Address to which all excess gas is credited on L2\\n      mirrorConnector, // valueRefundAddress: Address to which CallValue will be credited to on L2 if the retryable ticket times out or is cancelled\\n      _lesserOf(maxGas, maxGasCap), // maxGas: Gas limit for immediate L2 execution attempt\\n      _lesserOf(gasPrice, gasPriceCap), // gasPriceBid: L2 Gas price bid for immediate L2 execution attempt\\n      _calldata // data\\n    );\\n    emit RetryableTicketCreated(ticketID);\\n  }\\n\\n  // DO NOT override _processMessage, should revert from `Connector` class. All messages must use the\\n  // `processMessageFromRoot` flow.\\n\\n  function processMessageFromRoot(\\n    uint64 _nodeNum,\\n    bytes32 _sendRoot,\\n    bytes32 _blockHash,\\n    bytes32[] calldata _proof,\\n    uint256 _index,\\n    L2Message calldata _message\\n  ) external {\\n    // Ensure the send root corresponds to an arbitrum node that exists onchain\\n    _validateSendRoot(_nodeNum, _sendRoot, _blockHash);\\n\\n    // Ensure the given l2 message is included in the send root\\n    _validateMessage(_sendRoot, _proof, _index, _message);\\n\\n    // Message has been proven within the send root, process the message\\n    // data itself. The message data is defined in the spoke connector as:\\n    //\\n    // `abi.encodeWithSelector(Connector.processMessage.selector, _data);`\\n    //\\n    // so to get the root data, we need to decode the _calldata. we can do this\\n    // by dropping the 4-byte selector, then using the rest as the raw _data.\\n    require(_message.callData.length == 100, \\\"!length\\\");\\n\\n    // NOTE: TypedMemView only loads 32-byte chunks onto stack, which is fine in this case\\n    // the calldata is 100 bytes long, the last 32 bytes represent the root to be aggregated.\\n    bytes32 _data = _message.callData.ref(0).index(68, 32);\\n\\n    // Update root manager\\n    IRootManager(ROOT_MANAGER).aggregate(MIRROR_DOMAIN, _data);\\n\\n    // Emit event\\n    emit MessageProcessed(abi.encode(_data), msg.sender);\\n  }\\n\\n  function _validateSendRoot(\\n    uint64 _nodeNum,\\n    bytes32 _sendRoot,\\n    bytes32 _blockHash\\n  ) internal view {\\n    // Get the confirm data to ensure the node has been put on L1 with\\n    // the given block hash and send root\\n    bytes32 confirmData = _confirmHash(_blockHash, _sendRoot);\\n\\n    // Validate inputs by checking against the stored none confirm data\\n    Node memory node = rollup.getNode(_nodeNum);\\n    require(node.confirmData == confirmData, \\\"!confirmData\\\");\\n\\n    // Validate the node is staked / not in dispute\\n    // NOTE: a dispute can happen at any point within the timeout window, so the closest\\n    // we can get is to ensure the staker count > 0 and that there have been stakes on child\\n    // nodes as well, meaning the node is less likely to be staked incorrectly (and thus less\\n    // likely to be disputed)\\n    require(node.stakerCount > 0 && node.childStakerCount > 0, \\\"!staked\\\");\\n  }\\n\\n  // prove the message was included in the given send root\\n  function _validateMessage(\\n    bytes32 _sendRoot,\\n    bytes32[] calldata _proof,\\n    uint256 _index,\\n    L2Message calldata _msg\\n  ) internal {\\n    // Check that the l2sender is the mirror connector\\n    require(_msg.l2Sender == mirrorConnector, \\\"!mirrorConnector\\\");\\n\\n    // Generate the message sent through from L2 (included in sendRoot)\\n    bytes32 userTx = outbox.calculateItemHash(\\n      _msg.l2Sender,\\n      _msg.to,\\n      _msg.l2Block,\\n      _msg.l1Block,\\n      _msg.l2Timestamp,\\n      _msg.value,\\n      _msg.callData\\n    );\\n\\n    // Prove message is included in the send root\\n    _recordOutputAsSpent(_proof, _index, userTx, _sendRoot);\\n  }\\n\\n  // taken from: https://github.com/OffchainLabs/nitro/blob/208d9d50f250e9b4948f867d3795548256583b17/contracts/src/rollup/RollupLib.sol#L128-L130\\n  function _confirmHash(bytes32 _blockHash, bytes32 _sendRoot) internal pure returns (bytes32) {\\n    return keccak256(abi.encodePacked(_blockHash, _sendRoot));\\n  }\\n\\n  // modified from: https://github.com/OffchainLabs/nitro/blob/fbaa96d6d6246b427629be176499e1d5c5013d89/contracts/src/bridge/Outbox.sol#L219-L235\\n  function _recordOutputAsSpent(\\n    bytes32[] memory _proof,\\n    uint256 _index,\\n    bytes32 _item,\\n    bytes32 _sendRoot\\n  ) internal {\\n    require(_proof.length < 256, \\\"proof length\\\");\\n    require((_index >> _proof.length) == 0, \\\"!minimal proof\\\");\\n\\n    // NOTE: in the arbitrum contracts, they check that the message index is not yet spent\\n    // Because the spoke connector calls `processMessage`, which does nothing, it is important\\n    // to check out own internal mapping to ensure the message is not played twice. this forces\\n    // all messages from l2 to be processed using the `processMessageFromRoot` fn path.\\n    require(!processed[_index], \\\"spent\\\");\\n\\n    // Calculate the root\\n    bytes32 calcRoot = outbox.calculateMerkleRoot(_proof, _index, _item);\\n\\n    // Assert the sendRoot is correct\\n    // NOTE: this send root will *not* yet be stored on the `Outbox`\\n    // contract (fraud period has not yet elapsed);\\n    require(calcRoot == _sendRoot, \\\"!proof\\\");\\n\\n    // Mark as spent\\n    processed[_index] = true;\\n  }\\n}\\n\",\"keccak256\":\"0xf9b29dc12f5ed6a99517d1e891e382c46554e930589437f2c79f115145a04606\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IRootManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\ninterface IRootManager {\\n  /**\\n   * @notice This is called by relayers to generate + send the mixed root from mainnet via AMB to\\n   * spoke domains.\\n   * @dev This must read information for the root from the registered AMBs.\\n   */\\n  function propagate(\\n    address[] calldata _connectors,\\n    uint256[] calldata _fees,\\n    bytes[] memory _encodedData\\n  ) external payable;\\n\\n  /**\\n   * @notice Called by the connectors for various domains on the hub to aggregate their latest\\n   * inbound root.\\n   * @dev This must read information for the root from the registered AMBs\\n   */\\n  function aggregate(uint32 _domain, bytes32 _outbound) external;\\n}\\n\",\"keccak256\":\"0xa895dfaa4baad37a636e7e7e7da72a0a4badfd2d3d8256f975e5101cd5a98236\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumInbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for sending L1 -> L2 messagesto Arbitrum.\\n * @dev Arbitrum uses an inbox to aggregate messages going from L1 -> L2, source:\\n * https://github.com/OffchainLabs/nitro/blob/master/contracts/src/bridge/Inbox.sol\\n *\\n */\\ninterface IArbitrumInbox {\\n  function createRetryableTicket(\\n    address destAddr,\\n    uint256 arbTxCallValue,\\n    uint256 maxSubmissionCost,\\n    address submissionRefundAddress,\\n    address valueRefundAddress,\\n    uint256 maxGas,\\n    uint256 gasPriceBid,\\n    bytes calldata data\\n  ) external payable returns (uint256);\\n}\\n\",\"keccak256\":\"0x6d4839148bce5c2e4309817f10bae3e1f7a30f71ee1e37078263b30444da2223\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for sending L1 -> L2 messagesto Arbitrum.\\n * @dev Arbitrum uses an inbox to aggregate messages going from L1 -> L2, source:\\n * https://github.com/OffchainLabs/nitro/blob/master/contracts/src/bridge/Inbox.sol\\n *\\n */\\ninterface IArbitrumOutbox {\\n  event SendRootUpdated(bytes32 indexed blockHash, bytes32 indexed outputRoot);\\n  event OutBoxTransactionExecuted(\\n    address indexed to,\\n    address indexed l2Sender,\\n    uint256 indexed zero,\\n    uint256 transactionIndex\\n  );\\n\\n  function rollup() external view returns (address); // the rollup contract\\n\\n  // function bridge() external view returns (IBridge); // the bridge contract\\n\\n  function spent(uint256) external view returns (bytes32); // packed spent bitmap\\n\\n  function roots(bytes32) external view returns (bytes32); // maps root hashes => L2 block hash\\n\\n  // solhint-disable-next-line func-name-mixedcase\\n  function OUTBOX_VERSION() external view returns (uint128); // the outbox version\\n\\n  function updateSendRoot(bytes32 sendRoot, bytes32 l2BlockHash) external;\\n\\n  /// @notice When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account\\n  ///         When the return value is zero, that means this is a system message\\n  /// @dev the l2ToL1Sender behaves as the tx.origin, the msg.sender should be validated to protect against reentrancies\\n  function l2ToL1Sender() external view returns (address);\\n\\n  /// @return l2Block return L2 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\\n  function l2ToL1Block() external view returns (uint256);\\n\\n  /// @return l1Block return L1 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\\n  function l2ToL1EthBlock() external view returns (uint256);\\n\\n  /// @return timestamp return L2 timestamp when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\\n  function l2ToL1Timestamp() external view returns (uint256);\\n\\n  /// @return outputId returns the unique output identifier of the L2 to L1 tx or 0 if no L2 to L1 transaction is active\\n  function l2ToL1OutputId() external view returns (bytes32);\\n\\n  /**\\n   * @notice Executes a messages in an Outbox entry.\\n   * @dev Reverts if dispute period hasn't expired, since the outbox entry\\n   *      is only created once the rollup confirms the respective assertion.\\n   * @dev it is not possible to execute any L2-to-L1 transaction which contains data\\n   *      to a contract address without any code (as enforced by the Bridge contract).\\n   * @param proof Merkle proof of message inclusion in send root\\n   * @param index Merkle path to message\\n   * @param l2Sender sender if original message (i.e., caller of ArbSys.sendTxToL1)\\n   * @param to destination address for L1 contract call\\n   * @param l2Block l2 block number at which sendTxToL1 call was made\\n   * @param l1Block l1 block number at which sendTxToL1 call was made\\n   * @param l2Timestamp l2 Timestamp at which sendTxToL1 call was made\\n   * @param value wei in L1 message\\n   * @param data abi-encoded L1 message data\\n   */\\n  function executeTransaction(\\n    bytes32[] calldata proof,\\n    uint256 index,\\n    address l2Sender,\\n    address to,\\n    uint256 l2Block,\\n    uint256 l1Block,\\n    uint256 l2Timestamp,\\n    uint256 value,\\n    bytes calldata data\\n  ) external;\\n\\n  /**\\n   *  @dev function used to simulate the result of a particular function call from the outbox\\n   *       it is useful for things such as gas estimates. This function includes all costs except for\\n   *       proof validation (which can be considered offchain as a somewhat of a fixed cost - it's\\n   *       not really a fixed cost, but can be treated as so with a fixed overhead for gas estimation).\\n   *       We can't include the cost of proof validation since this is intended to be used to simulate txs\\n   *       that are included in yet-to-be confirmed merkle roots. The simulation entrypoint could instead pretend\\n   *       to confirm a pending merkle root, but that would be less pratical for integrating with tooling.\\n   *       It is only possible to trigger it when the msg sender is address zero, which should be impossible\\n   *       unless under simulation in an eth_call or eth_estimateGas\\n   */\\n  function executeTransactionSimulation(\\n    uint256 index,\\n    address l2Sender,\\n    address to,\\n    uint256 l2Block,\\n    uint256 l1Block,\\n    uint256 l2Timestamp,\\n    uint256 value,\\n    bytes calldata data\\n  ) external;\\n\\n  /**\\n   * @param index Merkle path to message\\n   * @return true if the message has been spent\\n   */\\n  function isSpent(uint256 index) external view returns (bool);\\n\\n  function calculateItemHash(\\n    address l2Sender,\\n    address to,\\n    uint256 l2Block,\\n    uint256 l1Block,\\n    uint256 l2Timestamp,\\n    uint256 value,\\n    bytes calldata data\\n  ) external pure returns (bytes32);\\n\\n  function calculateMerkleRoot(\\n    bytes32[] memory proof,\\n    uint256 path,\\n    bytes32 item\\n  ) external pure returns (bytes32);\\n}\\n\",\"keccak256\":\"0xd047fddc2c35a59593ba5cc717f5ed8ca1437241ba23762a498f55e51629135c\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumRollup.sol\":{\"content\":\"pragma solidity 0.8.17;\\n\\n// modified from: https://github.com/OffchainLabs/nitro/blob/master/contracts/src/rollup/Node.sol\\nstruct Node {\\n  // Hash of the state of the chain as of this node\\n  bytes32 stateHash;\\n  // Hash of the data that can be challenged\\n  bytes32 challengeHash;\\n  // Hash of the data that will be committed if this node is confirmed\\n  bytes32 confirmData;\\n  // Index of the node previous to this one\\n  uint64 prevNum;\\n  // Deadline at which this node can be confirmed\\n  uint64 deadlineBlock;\\n  // Deadline at which a child of this node can be confirmed\\n  uint64 noChildConfirmedBeforeBlock;\\n  // Number of stakers staked on this node. This includes real stakers and zombies\\n  uint64 stakerCount;\\n  // Number of stakers staked on a child node. This includes real stakers and zombies\\n  uint64 childStakerCount;\\n  // This value starts at zero and is set to a value when the first child is created. After that it is constant until the node is destroyed or the owner destroys pending nodes\\n  uint64 firstChildBlock;\\n  // The number of the latest child of this node to be created\\n  uint64 latestChildNumber;\\n  // The block number when this node was created\\n  uint64 createdAtBlock;\\n  // A hash of all the data needed to determine this node's validity, to protect against reorgs\\n  bytes32 nodeHash;\\n}\\n\\n// modified from: https://github.com/OffchainLabs/nitro/blob/master/contracts/src/rollup/IRollupCore.sol\\ninterface IArbitrumRollup {\\n  /**\\n   * @notice Get the Node for the given index.\\n   */\\n  function getNode(uint64 nodeNum) external view returns (Node memory);\\n}\\n\",\"keccak256\":\"0xb393c714fd6a4592f72fd5ad32732f77f12f6b6399f1033d6d14a7a7b6c98001\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumHubConnector.sol:ArbitrumHubConnector","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumHubConnector.sol:ArbitrumHubConnector","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumHubConnector.sol:ArbitrumHubConnector","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39051,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumHubConnector.sol:ArbitrumHubConnector","label":"mirrorConnector","offset":0,"slot":"3","type":"t_address"},{"astId":40473,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumHubConnector.sol:ArbitrumHubConnector","label":"outbox","offset":0,"slot":"4","type":"t_contract(IArbitrumOutbox)48239"},{"astId":40476,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumHubConnector.sol:ArbitrumHubConnector","label":"rollup","offset":0,"slot":"5","type":"t_contract(IArbitrumRollup)48276"},{"astId":40479,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumHubConnector.sol:ArbitrumHubConnector","label":"maxSubmissionCostCap","offset":0,"slot":"6","type":"t_uint256"},{"astId":40482,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumHubConnector.sol:ArbitrumHubConnector","label":"maxGasCap","offset":0,"slot":"7","type":"t_uint256"},{"astId":40485,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumHubConnector.sol:ArbitrumHubConnector","label":"gasPriceCap","offset":0,"slot":"8","type":"t_uint256"},{"astId":40490,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumHubConnector.sol:ArbitrumHubConnector","label":"processed","offset":0,"slot":"9","type":"t_mapping(t_uint256,t_bool)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(IArbitrumOutbox)48239":{"encoding":"inplace","label":"contract IArbitrumOutbox","numberOfBytes":"20"},"t_contract(IArbitrumRollup)48276":{"encoding":"inplace","label":"contract IArbitrumRollup","numberOfBytes":"20"},"t_mapping(t_uint256,t_bool)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => bool)","numberOfBytes":"32","value":"t_bool"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"GasPriceCapUpdated(uint256,uint256)":{"notice":"Emitted when admin updates the gasPriceCap"},"MaxGasCapUpdated(uint256,uint256)":{"notice":"Emitted when admin updates the maxGasCap"},"MaxSubmissionCapUpdated(uint256,uint256)":{"notice":"Emitted when admin updates the maxSubmissionCap"},"MessageProcessed(bytes,address)":{"notice":"Emitted whenever a message is successfully received over an AMB"},"MessageSent(bytes,bytes,address)":{"notice":"Emitted whenever a message is successfully sent over an AMB"}},"kind":"user","methods":{"AMB()":{"notice":"Address of the AMB on this domain."},"DOMAIN()":{"notice":"The domain of this Messaging (i.e. Connector) contract."},"MIRROR_DOMAIN()":{"notice":"The domain of the corresponding messaging (i.e. Connector) contract."},"ROOT_MANAGER()":{"notice":"RootManager contract address."},"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"gasPriceCap()":{"notice":"Sets cap on gasPrice used in `createRetryableTicket`"},"maxGasCap()":{"notice":"Sets cap on maxGas used in `createRetryableTicket`"},"maxSubmissionCostCap()":{"notice":"Sets cap on maxSubmissionCost used in `createRetryableTicket`"},"mirrorConnector()":{"notice":"Connector on L2 for L1 connectors, and vice versa."},"owner()":{"notice":"Returns the address of the current owner."},"processMessage(bytes)":{"notice":"Processes a message received by an AMB"},"processed(uint256)":{"notice":"Tracks which messages have been processed from bridge"},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"sendMessage(bytes,bytes)":{"notice":"Sends a message over the amb"},"setGasPriceCap(uint256)":{"notice":"Used (by admin) to update the gasPriceCap"},"setMaxGasCap(uint256)":{"notice":"Used (by admin) to update the maxGasCap"},"setMaxSubmissionCostCap(uint256)":{"notice":"Used (by admin) to update the maxSubmissionCostCap"},"setMirrorConnector(address)":{"notice":"Sets the address of the l2Connector for this domain"},"verifySender(address)":{"notice":"Checks the cross domain sender for a given address"}},"version":1}}},"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol":{"ArbitrumSpokeConnector":{"abi":[{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"uint32","name":"_mirrorDomain","type":"uint32"},{"internalType":"address","name":"_amb","type":"address"},{"internalType":"address","name":"_rootManager","type":"address"},{"internalType":"address","name":"_mirrorConnector","type":"address"},{"internalType":"uint256","name":"_processGas","type":"uint256"},{"internalType":"uint256","name":"_reserveGas","type":"uint256"},{"internalType":"uint256","name":"_delayBlocks","type":"uint256"},{"internalType":"address","name":"_merkle","type":"address"},{"internalType":"address","name":"_watcherManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Connector__processMessage_notUsed","type":"error"},{"inputs":[],"name":"NotCrossChainCall","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"inputs":[],"name":"RateLimited__rateLimited_messageSendRateExceeded","type":"error"},{"inputs":[],"name":"TypedMemView__index_indexMoreThan32Bytes","type":"error"},{"inputs":[{"internalType":"uint256","name":"loc","type":"uint256"},{"internalType":"uint256","name":"len","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"slice","type":"uint256"}],"name":"TypedMemView__index_overrun","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_identityOOG","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_invalidPointer","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_nullPointer","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootVerified","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"current","type":"address"}],"name":"AliasedSenderUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"updated","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"DelayBlocksUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"message","type":"bytes"}],"name":"Dispatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"aggregateRoot","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"aggregateIndex","type":"uint256"}],"name":"MessageProven","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"encodedData","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"current","type":"address"}],"name":"MirrorConnectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"mirrorDomain","type":"uint32"},{"indexed":false,"internalType":"address","name":"amb","type":"address"},{"indexed":false,"internalType":"address","name":"rootManager","type":"address"},{"indexed":false,"internalType":"address","name":"mirrorConnector","type":"address"}],"name":"NewConnector","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"returnData","type":"bytes"}],"name":"Process","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updater","type":"address"},{"indexed":false,"internalType":"uint256","name":"newRateLimit","type":"uint256"}],"name":"SendRateLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"SenderAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"SenderRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"watcherManager","type":"address"}],"name":"WatcherManagerChanged","type":"event"},{"inputs":[],"name":"AMB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MERKLE","outputs":[{"internalType":"contract MerkleTreeManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIRROR_DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROCESS_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"addSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"aliasedSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlistedSenders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_destinationDomain","type":"uint32"},{"internalType":"bytes32","name":"_recipientAddress","type":"bytes32"},{"internalType":"bytes","name":"_messageBody","type":"bytes"}],"name":"dispatch","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"home","outputs":[{"internalType":"contract IOutbox","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_potentialReplica","type":"address"}],"name":"isReplica","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"localDomain","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"messages","outputs":[{"internalType":"enum SpokeConnector.MessageStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mirrorConnector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"nonces","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"outboundRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"pendingAggregateRoots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"processMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32[32]","name":"path","type":"bytes32[32]"},{"internalType":"uint256","name":"index","type":"uint256"}],"internalType":"struct SpokeConnector.Proof[]","name":"_proofs","type":"tuple[]"},{"internalType":"bytes32","name":"_aggregateRoot","type":"bytes32"},{"internalType":"bytes32[32]","name":"_aggregatePath","type":"bytes32[32]"},{"internalType":"uint256","name":"_aggregateIndex","type":"uint256"}],"name":"proveAndProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"provenAggregateRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"provenMessageRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rateLimitBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_fraudulentRoot","type":"bytes32"}],"name":"removePendingAggregateRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"removeSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_encodedData","type":"bytes"}],"name":"send","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"sentMessageRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_delayBlocks","type":"uint256"}],"name":"setDelayBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mirrorConnector","type":"address"}],"name":"setMirrorConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rateLimit","type":"uint256"}],"name":"setRateLimitBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_watcherManager","type":"address"}],"name":"setWatcherManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_expected","type":"address"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"watcherManager","outputs":[{"internalType":"contract WatcherManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"addSender(address)":{"details":"Only allowlisted routers (senders) can call `dispatch`."},"dispatch(uint32,bytes32,bytes)":{"details":"The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \"hub\"), it will be combined into a single aggregate root by RootManager (along with outbound roots from other chains). This aggregate root will be redistributed to all destination chains. NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions"},"home()":{"details":"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad","returns":{"_0":"The local inbox contract"}},"isReplica(address)":{"returns":{"_0":"True if _potentialReplica is an enrolled Replica"}},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"processMessage(bytes)":{"details":"This is called by AMBs to process messages originating from mirror connector"},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":{"details":"Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.Intended to be called by the relayer at specific intervals during runtime.Will record a calculated root as having been proven if we've already proven that it was included in the aggregateRoot.","params":{"_aggregateIndex":"Index of the inbound root in the aggregator's merkle tree in the hub.","_aggregatePath":"Merkle path of inclusion for the inbound root.","_aggregateRoot":"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.","_proofs":"Batch of Proofs containing messages for proving/processing."}},"removePendingAggregateRoot(bytes32)":{"details":"This method is required for handling fraud cases in the current construction.","params":{"_fraudulentRoot":"Target fraudulent root that should be erased from the `pendingAggregateRoots` mapping."}},"removeSender(address)":{"details":"Only allowlisted routers (senders) can call `dispatch`."},"renounceOwnership()":{"details":"Renounce ownership should be impossible as long as it is impossible in the WatcherClient, and as long as only the owner can remove pending roots in case of fraud."},"setRateLimitBlocks(uint256)":{"details":"Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)","params":{"_rateLimit":"The number of blocks require between sending messages. If set to 0, rate limiting for this spoke connector will be disabled."}},"withdrawFunds(address)":{"details":"Withdraws the entire balance of the contract.","params":{"_to":"The recipient of the funds withdrawn"}}},"stateVariables":{"aliasedSender":{"details":"See: https://developer.arbitrum.io/arbos/l1-to-l2-messaging#address-aliasing"}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_10599":{"entryPoint":null,"id":10599,"parameterSlots":0,"returnSlots":0},"@_10699":{"entryPoint":null,"id":10699,"parameterSlots":0,"returnSlots":0},"@_38838":{"entryPoint":null,"id":38838,"parameterSlots":1,"returnSlots":0},"@_39152":{"entryPoint":null,"id":39152,"parameterSlots":5,"returnSlots":0},"@_39257":{"entryPoint":null,"id":39257,"parameterSlots":0,"returnSlots":0},"@_39687":{"entryPoint":null,"id":39687,"parameterSlots":10,"returnSlots":0},"@_41067":{"entryPoint":null,"id":41067,"parameterSlots":10,"returnSlots":0},"@_setAliasedSender_41223":{"entryPoint":918,"id":41223,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_41195":{"entryPoint":802,"id":41195,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":701,"id":49908,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":1174,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":1378,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_address_fromMemory":{"entryPoint":1198,"id":null,"parameterSlots":2,"returnSlots":10},"abi_decode_uint32_fromMemory":{"entryPoint":1148,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3895:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"73:108:181","statements":[{"nodeType":"YulAssignment","src":"83:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"98:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"92:5:181"},"nodeType":"YulFunctionCall","src":"92:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"83:5:181"}]},{"body":{"nodeType":"YulBlock","src":"159:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"168:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"171:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"161:6:181"},"nodeType":"YulFunctionCall","src":"161:12:181"},"nodeType":"YulExpressionStatement","src":"161:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"127:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"138:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"145:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"134:3:181"},"nodeType":"YulFunctionCall","src":"134:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"124:2:181"},"nodeType":"YulFunctionCall","src":"124:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"117:6:181"},"nodeType":"YulFunctionCall","src":"117:41:181"},"nodeType":"YulIf","src":"114:61:181"}]},"name":"abi_decode_uint32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"52:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"63:5:181","type":""}],"src":"14:167:181"},{"body":{"nodeType":"YulBlock","src":"246:117:181","statements":[{"nodeType":"YulAssignment","src":"256:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"271:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"265:5:181"},"nodeType":"YulFunctionCall","src":"265:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"256:5:181"}]},{"body":{"nodeType":"YulBlock","src":"341:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"350:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"353:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"343:6:181"},"nodeType":"YulFunctionCall","src":"343:12:181"},"nodeType":"YulExpressionStatement","src":"343:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"300:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"311:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"326:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"331:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"322:3:181"},"nodeType":"YulFunctionCall","src":"322:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"335:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"318:3:181"},"nodeType":"YulFunctionCall","src":"318:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"307:3:181"},"nodeType":"YulFunctionCall","src":"307:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"297:2:181"},"nodeType":"YulFunctionCall","src":"297:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"290:6:181"},"nodeType":"YulFunctionCall","src":"290:50:181"},"nodeType":"YulIf","src":"287:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"225:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"236:5:181","type":""}],"src":"186:177:181"},{"body":{"nodeType":"YulBlock","src":"600:672:181","statements":[{"body":{"nodeType":"YulBlock","src":"647:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"656:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"659:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"649:6:181"},"nodeType":"YulFunctionCall","src":"649:12:181"},"nodeType":"YulExpressionStatement","src":"649:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"621:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"630:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"617:3:181"},"nodeType":"YulFunctionCall","src":"617:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"642:3:181","type":"","value":"320"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"613:3:181"},"nodeType":"YulFunctionCall","src":"613:33:181"},"nodeType":"YulIf","src":"610:53:181"},{"nodeType":"YulAssignment","src":"672:49:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"711:9:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"682:28:181"},"nodeType":"YulFunctionCall","src":"682:39:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"672:6:181"}]},{"nodeType":"YulAssignment","src":"730:58:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"773:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"784:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"769:3:181"},"nodeType":"YulFunctionCall","src":"769:18:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"740:28:181"},"nodeType":"YulFunctionCall","src":"740:48:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"730:6:181"}]},{"nodeType":"YulAssignment","src":"797:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"841:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"852:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"837:3:181"},"nodeType":"YulFunctionCall","src":"837:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"807:29:181"},"nodeType":"YulFunctionCall","src":"807:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"797:6:181"}]},{"nodeType":"YulAssignment","src":"865:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"909:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"920:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"905:3:181"},"nodeType":"YulFunctionCall","src":"905:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"875:29:181"},"nodeType":"YulFunctionCall","src":"875:49:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"865:6:181"}]},{"nodeType":"YulAssignment","src":"933:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"977:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"988:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"973:3:181"},"nodeType":"YulFunctionCall","src":"973:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"943:29:181"},"nodeType":"YulFunctionCall","src":"943:50:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"933:6:181"}]},{"nodeType":"YulAssignment","src":"1002:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1022:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1033:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1018:3:181"},"nodeType":"YulFunctionCall","src":"1018:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1012:5:181"},"nodeType":"YulFunctionCall","src":"1012:26:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"1002:6:181"}]},{"nodeType":"YulAssignment","src":"1047:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1067:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1078:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1063:3:181"},"nodeType":"YulFunctionCall","src":"1063:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1057:5:181"},"nodeType":"YulFunctionCall","src":"1057:26:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"1047:6:181"}]},{"nodeType":"YulAssignment","src":"1092:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1112:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1123:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1108:3:181"},"nodeType":"YulFunctionCall","src":"1108:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1102:5:181"},"nodeType":"YulFunctionCall","src":"1102:26:181"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"1092:6:181"}]},{"nodeType":"YulAssignment","src":"1137:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1181:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1192:3:181","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1177:3:181"},"nodeType":"YulFunctionCall","src":"1177:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"1147:29:181"},"nodeType":"YulFunctionCall","src":"1147:50:181"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"1137:6:181"}]},{"nodeType":"YulAssignment","src":"1206:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1250:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1261:3:181","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1246:3:181"},"nodeType":"YulFunctionCall","src":"1246:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"1216:29:181"},"nodeType":"YulFunctionCall","src":"1216:50:181"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"1206:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"494:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"505:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"517:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"525:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"533:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"541:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"549:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"557:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"565:6:181","type":""},{"name":"value7","nodeType":"YulTypedName","src":"573:6:181","type":""},{"name":"value8","nodeType":"YulTypedName","src":"581:6:181","type":""},{"name":"value9","nodeType":"YulTypedName","src":"589:6:181","type":""}],"src":"368:904:181"},{"body":{"nodeType":"YulBlock","src":"1451:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1468:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1479:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1461:6:181"},"nodeType":"YulFunctionCall","src":"1461:21:181"},"nodeType":"YulExpressionStatement","src":"1461:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1502:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1513:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1498:3:181"},"nodeType":"YulFunctionCall","src":"1498:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1518:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1491:6:181"},"nodeType":"YulFunctionCall","src":"1491:30:181"},"nodeType":"YulExpressionStatement","src":"1491:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1541:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1552:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1537:3:181"},"nodeType":"YulFunctionCall","src":"1537:18:181"},{"hexValue":"656d70747920646f6d61696e","kind":"string","nodeType":"YulLiteral","src":"1557:14:181","type":"","value":"empty domain"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1530:6:181"},"nodeType":"YulFunctionCall","src":"1530:42:181"},"nodeType":"YulExpressionStatement","src":"1530:42:181"},{"nodeType":"YulAssignment","src":"1581:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1593:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1604:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1589:3:181"},"nodeType":"YulFunctionCall","src":"1589:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1581:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1428:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1442:4:181","type":""}],"src":"1277:336:181"},{"body":{"nodeType":"YulBlock","src":"1792:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1809:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1820:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1802:6:181"},"nodeType":"YulFunctionCall","src":"1802:21:181"},"nodeType":"YulExpressionStatement","src":"1802:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1843:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1854:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1839:3:181"},"nodeType":"YulFunctionCall","src":"1839:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1859:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1832:6:181"},"nodeType":"YulFunctionCall","src":"1832:30:181"},"nodeType":"YulExpressionStatement","src":"1832:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1882:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1893:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1878:3:181"},"nodeType":"YulFunctionCall","src":"1878:18:181"},{"hexValue":"656d70747920726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"1898:19:181","type":"","value":"empty rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1871:6:181"},"nodeType":"YulFunctionCall","src":"1871:47:181"},"nodeType":"YulExpressionStatement","src":"1871:47:181"},{"nodeType":"YulAssignment","src":"1927:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1939:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1950:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1935:3:181"},"nodeType":"YulFunctionCall","src":"1935:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1927:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1769:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1783:4:181","type":""}],"src":"1618:341:181"},{"body":{"nodeType":"YulBlock","src":"2121:227:181","statements":[{"nodeType":"YulAssignment","src":"2131:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2143:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2154:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2139:3:181"},"nodeType":"YulFunctionCall","src":"2139:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2131:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"2166:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2184:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2189:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2180:3:181"},"nodeType":"YulFunctionCall","src":"2180:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2193:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2176:3:181"},"nodeType":"YulFunctionCall","src":"2176:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2170:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2211:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2226:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2234:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2222:3:181"},"nodeType":"YulFunctionCall","src":"2222:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2204:6:181"},"nodeType":"YulFunctionCall","src":"2204:34:181"},"nodeType":"YulExpressionStatement","src":"2204:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2258:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2269:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2254:3:181"},"nodeType":"YulFunctionCall","src":"2254:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2278:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2286:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2274:3:181"},"nodeType":"YulFunctionCall","src":"2274:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2247:6:181"},"nodeType":"YulFunctionCall","src":"2247:43:181"},"nodeType":"YulExpressionStatement","src":"2247:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2310:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2321:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2306:3:181"},"nodeType":"YulFunctionCall","src":"2306:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"2330:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2338:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2326:3:181"},"nodeType":"YulFunctionCall","src":"2326:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2299:6:181"},"nodeType":"YulFunctionCall","src":"2299:43:181"},"nodeType":"YulExpressionStatement","src":"2299:43:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2074:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2085:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2093:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2101:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2112:4:181","type":""}],"src":"1964:384:181"},{"body":{"nodeType":"YulBlock","src":"2527:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2544:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2555:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2537:6:181"},"nodeType":"YulFunctionCall","src":"2537:21:181"},"nodeType":"YulExpressionStatement","src":"2537:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2578:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2589:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2574:3:181"},"nodeType":"YulFunctionCall","src":"2574:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2594:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2567:6:181"},"nodeType":"YulFunctionCall","src":"2567:30:181"},"nodeType":"YulExpressionStatement","src":"2567:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2617:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2628:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2613:3:181"},"nodeType":"YulFunctionCall","src":"2613:18:181"},{"hexValue":"2170726f6365737320676173","kind":"string","nodeType":"YulLiteral","src":"2633:14:181","type":"","value":"!process gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2606:6:181"},"nodeType":"YulFunctionCall","src":"2606:42:181"},"nodeType":"YulExpressionStatement","src":"2606:42:181"},{"nodeType":"YulAssignment","src":"2657:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2669:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2680:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2665:3:181"},"nodeType":"YulFunctionCall","src":"2665:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2657:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2504:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2518:4:181","type":""}],"src":"2353:336:181"},{"body":{"nodeType":"YulBlock","src":"2868:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2885:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2896:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2878:6:181"},"nodeType":"YulFunctionCall","src":"2878:21:181"},"nodeType":"YulExpressionStatement","src":"2878:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2919:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2930:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2915:3:181"},"nodeType":"YulFunctionCall","src":"2915:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2935:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2908:6:181"},"nodeType":"YulFunctionCall","src":"2908:30:181"},"nodeType":"YulExpressionStatement","src":"2908:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2958:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2969:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2954:3:181"},"nodeType":"YulFunctionCall","src":"2954:18:181"},{"hexValue":"217265736572766520676173","kind":"string","nodeType":"YulLiteral","src":"2974:14:181","type":"","value":"!reserve gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2947:6:181"},"nodeType":"YulFunctionCall","src":"2947:42:181"},"nodeType":"YulExpressionStatement","src":"2947:42:181"},{"nodeType":"YulAssignment","src":"2998:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3010:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3021:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3006:3:181"},"nodeType":"YulFunctionCall","src":"3006:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2998:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2845:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2859:4:181","type":""}],"src":"2694:336:181"},{"body":{"nodeType":"YulBlock","src":"3209:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3226:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3237:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3219:6:181"},"nodeType":"YulFunctionCall","src":"3219:21:181"},"nodeType":"YulExpressionStatement","src":"3219:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3260:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3271:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3256:3:181"},"nodeType":"YulFunctionCall","src":"3256:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3276:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3249:6:181"},"nodeType":"YulFunctionCall","src":"3249:30:181"},"nodeType":"YulExpressionStatement","src":"3249:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3299:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3310:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3295:3:181"},"nodeType":"YulFunctionCall","src":"3295:18:181"},{"hexValue":"217a65726f206d65726b6c65","kind":"string","nodeType":"YulLiteral","src":"3315:14:181","type":"","value":"!zero merkle"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3288:6:181"},"nodeType":"YulFunctionCall","src":"3288:42:181"},"nodeType":"YulExpressionStatement","src":"3288:42:181"},{"nodeType":"YulAssignment","src":"3339:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3351:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3362:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3347:3:181"},"nodeType":"YulFunctionCall","src":"3347:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3339:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3186:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3200:4:181","type":""}],"src":"3035:336:181"},{"body":{"nodeType":"YulBlock","src":"3505:175:181","statements":[{"nodeType":"YulAssignment","src":"3515:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3527:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3538:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3523:3:181"},"nodeType":"YulFunctionCall","src":"3523:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3515:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"3550:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3568:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3573:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3564:3:181"},"nodeType":"YulFunctionCall","src":"3564:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3577:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3560:3:181"},"nodeType":"YulFunctionCall","src":"3560:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3554:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3595:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3610:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3618:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3606:3:181"},"nodeType":"YulFunctionCall","src":"3606:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3588:6:181"},"nodeType":"YulFunctionCall","src":"3588:34:181"},"nodeType":"YulExpressionStatement","src":"3588:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3642:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3653:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3638:3:181"},"nodeType":"YulFunctionCall","src":"3638:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3662:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3670:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3658:3:181"},"nodeType":"YulFunctionCall","src":"3658:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3631:6:181"},"nodeType":"YulFunctionCall","src":"3631:43:181"},"nodeType":"YulExpressionStatement","src":"3631:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3466:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3477:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3485:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3496:4:181","type":""}],"src":"3376:304:181"},{"body":{"nodeType":"YulBlock","src":"3766:127:181","statements":[{"body":{"nodeType":"YulBlock","src":"3812:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3821:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3824:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3814:6:181"},"nodeType":"YulFunctionCall","src":"3814:12:181"},"nodeType":"YulExpressionStatement","src":"3814:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3787:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3796:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3783:3:181"},"nodeType":"YulFunctionCall","src":"3783:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3808:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3779:3:181"},"nodeType":"YulFunctionCall","src":"3779:32:181"},"nodeType":"YulIf","src":"3776:52:181"},{"nodeType":"YulAssignment","src":"3837:50:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3877:9:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"3847:29:181"},"nodeType":"YulFunctionCall","src":"3847:40:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3837:6:181"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3732:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3743:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3755:6:181","type":""}],"src":"3685:208:181"}]},"contents":"{\n    { }\n    function abi_decode_uint32_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9\n    {\n        if slt(sub(dataEnd, headStart), 320) { revert(0, 0) }\n        value0 := abi_decode_uint32_fromMemory(headStart)\n        value1 := abi_decode_uint32_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n        value4 := abi_decode_address_fromMemory(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n        value6 := mload(add(headStart, 192))\n        value7 := mload(add(headStart, 224))\n        value8 := abi_decode_address_fromMemory(add(headStart, 256))\n        value9 := abi_decode_address_fromMemory(add(headStart, 288))\n    }\n    function abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"empty domain\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"empty rootManager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!process gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!reserve gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!zero merkle\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"6101606040523480156200001257600080fd5b5060405162003cbc38038062003cbc8339810160408190526200003591620004ae565b89898989898989898989808a8a8a8a8a6200005033620002bd565b8463ffffffff166000036200009b5760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620000e75760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b604482015260640162000092565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e0528116156200011f576200011f8162000322565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a350506003805460ff60a01b191690555050600480546001600160a01b0319166001600160a01b039390931692909217909155506001600755620cf84f8511620001f25760405162461bcd60e51b815260206004820152600c60248201526b2170726f636573732067617360a01b604482015260640162000092565b613a978411620002345760405162461bcd60e51b815260206004820152600c60248201526b21726573657276652067617360a01b604482015260640162000092565b6101208590526101408490526001600160a01b038216620002875760405162461bcd60e51b815260206004820152600c60248201526b217a65726f206d65726b6c6560a01b604482015260640162000092565b506001600160a01b03166101005260085550620002ad95508b9450506200039692505050565b5050505050505050505062000587565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b6200032d8162000396565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b60a0516040516326ddea8360e11b81526001600160a01b038381166004830152600060248301819052921690634dbbd50690604401602060405180830381865afa158015620003e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040f919062000562565b601054604080516001600160a01b03928316815291831660208301529192507f138b2e0015ac8e1842fbb73cdefea5574fd42dd33df05e84271a7adc811d6b3d910160405180910390a1601080546001600160a01b0319166001600160a01b039290921691909117905550565b805163ffffffff811681146200049157600080fd5b919050565b80516001600160a01b03811681146200049157600080fd5b6000806000806000806000806000806101408b8d031215620004cf57600080fd5b620004da8b6200047c565b9950620004ea60208c016200047c565b9850620004fa60408c0162000496565b97506200050a60608c0162000496565b96506200051a60808c0162000496565b955060a08b0151945060c08b0151935060e08b01519250620005406101008c0162000496565b9150620005516101208c0162000496565b90509295989b9194979a5092959850565b6000602082840312156200057557600080fd5b620005808262000496565b9392505050565b60805160a05160c05160e05161010051610120516101405161368662000636600039600081816103250152611d4c01526000818161090e01528181611d6d0152611dfa01526000818161073501528181610a8b01528181610fb50152611685015260006102b50152600061057b0152600081816108c401528181611884015281816121a00152612a680152600081816104c201528181610671015281816116270152611c4c01526136866000f3fe6080604052600436106102975760003560e01c80638456cb591161015a578063b95a2001116100c1578063d69f9d611161007a578063d69f9d61146108b2578063d7d317b3146108e6578063d88beda2146108fc578063db1b765914610930578063e0fed01014610950578063fa31de011461097057600080fd5b8063b95a2001146107ed578063c5b350df14610820578063cc39428314610835578063d1851c9214610855578063d232c22014610873578063d2a3cc711461089257600080fd5b8063a01892a511610113578063a01892a514610723578063a792c29b14610757578063ad9c0c2e14610777578063b1f8100d1461078d578063b2f87643146107ad578063b697f531146107cd57600080fd5b80638456cb591461064d5780638d3638f4146106625780638da5cb5b1461069557806398c9f2b9146106b35780639d3117c7146106e35780639fa92f9d1461071057600080fd5b806352a9674b116101fe5780636159ada1116101b75780636159ada11461059d57806365eaf11b146105cd57806368742da6146105e25780636a42b8f8146106025780636b04a93314610618578063715018a61461063857600080fd5b806352a9674b146104b0578063572386ca146104e4578063579c1618146105145780635bd11efc1461052a5780635c975abb1461054a5780635f61e3ec1461056957600080fd5b8063361d88ac11610250578063361d88ac146103e55780633cf52ffb1461041d5780633f4ba83a146104325780634ff746f614610447578063508a109b146104675780635190bc531461048757600080fd5b806314168416146102a35780631eeaabea146102f157806325e3beda146103135780632bb1ae7c146103555780632bbd59ca14610368578063301f07c3146103a557600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b3480156102fd57600080fd5b5061031161030c366004613014565b61099e565b005b34801561031f57600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016102e8565b6103116103633660046130d0565b610a48565b34801561037457600080fd5b50610398610383366004613014565b600f6020526000908152604090205460ff1681565b6040516102e8919061311b565b3480156103b157600080fd5b506103d56103c0366004613014565b600a6020526000908152604090205460ff1681565b60405190151581526020016102e8565b3480156103f157600080fd5b50601054610405906001600160a01b031681565b6040516001600160a01b0390911681526020016102e8565b34801561042957600080fd5b50600254610347565b34801561043e57600080fd5b50610311610beb565b34801561045357600080fd5b506103116104623660046130d0565b610c28565b34801561047357600080fd5b50610311610482366004613143565b610cb8565b34801561049357600080fd5b506103d56104a23660046131f4565b6001600160a01b0316301490565b3480156104bc57600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f057600080fd5b506103d56104ff366004613014565b600c6020526000908152604090205460ff1681565b34801561052057600080fd5b5061034760055481565b34801561053657600080fd5b506103116105453660046131f4565b610f7a565b34801561055657600080fd5b50600354600160a01b900460ff166103d5565b34801561057557600080fd5b506104057f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a957600080fd5b506103d56105b83660046131f4565b600d6020526000908152604090205460ff1681565b3480156105d957600080fd5b50610347610fb1565b3480156105ee57600080fd5b506103116105fd3660046131f4565b61103a565b34801561060e57600080fd5b5062093a80610347565b34801561062457600080fd5b50610311610633366004613014565b6110b7565b34801561064457600080fd5b50610311611182565b34801561065957600080fd5b506103116111ad565b34801561066e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102d7565b3480156106a157600080fd5b506000546001600160a01b0316610405565b3480156106bf57600080fd5b506103d56106ce366004613014565b600b6020526000908152604090205460ff1681565b3480156106ef57600080fd5b506103476106fe366004613014565b60096020526000908152604090205481565b34801561071c57600080fd5b5030610405565b34801561072f57600080fd5b506104057f000000000000000000000000000000000000000000000000000000000000000081565b34801561076357600080fd5b50600454610405906001600160a01b031681565b34801561078357600080fd5b5061034760085481565b34801561079957600080fd5b506103116107a83660046131f4565b611261565b3480156107b957600080fd5b506103116107c83660046131f4565b6112ff565b3480156107d957600080fd5b506103116107e83660046131f4565b61137b565b3480156107f957600080fd5b506102d761080836600461322a565b600e6020526000908152604090205463ffffffff1681565b34801561082c57600080fd5b506103116113fa565b34801561084157600080fd5b50600354610405906001600160a01b031681565b34801561086157600080fd5b506001546001600160a01b0316610405565b34801561087f57600080fd5b506000546001600160a01b0316156103d5565b34801561089e57600080fd5b506103116108ad3660046131f4565b61146a565b3480156108be57600080fd5b506104057f000000000000000000000000000000000000000000000000000000000000000081565b3480156108f257600080fd5b5061034760065481565b34801561090857600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b34801561093c57600080fd5b506103d561094b3660046131f4565b611541565b34801561095c57600080fd5b5061031161096b366004613014565b611552565b34801561097c57600080fd5b5061099061098b366004613245565b611586565b6040516102e89291906132ec565b6000546001600160a01b031633146109c9576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610a0e5760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610a50611755565b43600554600654610a61919061331b565b1115610a80576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0b919061332e565b6000818152600c602052604090205490915060ff1615610b615760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b6044820152606401610a05565b600081604051602001610b7691815260200190565b6040516020818303038152906040529050610b9181846117a2565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610bde90839086903390613347565b60405180910390a1505050565b6000546001600160a01b03163314610c16576040516311a8a1bb60e31b815260040160405180910390fd5b610c1e6118f6565b610c26611946565b565b6010546001600160a01b03163314610c735760405162461bcd60e51b815260206004820152600e60248201526d10b0b634b0b9b2b229b2b73232b960911b6044820152606401610a05565b610c7c8161199b565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610cad929190613385565b60405180910390a150565b610cc0611755565b610cc8611a3b565b83610cff5760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b6044820152606401610a05565b600085856000818110610d1457610d146133af565b9050602002810190610d2691906133c5565b610d3090806133e6565b604051610d3e929190613434565b604051809103902090506000610da58288886000818110610d6157610d616133af565b9050602002810190610d7391906133c5565b60200189896000818110610d8957610d896133af565b9050602002810190610d9b91906133c5565b6104200135611a94565b9050610db381868686611b3b565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610ed95788888263ffffffff16818110610df857610df86133af565b9050602002810190610e0a91906133c5565b610e1490806133e6565b604051610e22929190613434565b604051809103902093506000610e77858b8b8563ffffffff16818110610e4a57610e4a6133af565b9050602002810190610e5c91906133c5565b6020018c8c8663ffffffff16818110610d8957610d896133af565b9050838114610eb65760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b6044820152606401610a05565b506000848152600f60205260409020805460ff1916600190811790915501610dd2565b5060005b818163ffffffff161015610f6557610f5c89898363ffffffff16818110610f0657610f066133af565b9050602002810190610f1891906133c5565b610f2290806133e6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c3692505050565b50600101610edd565b50505050610f736001600755565b5050505050565b6000546001600160a01b03163314610fa5576040516311a8a1bb60e31b815260040160405180910390fd5b610fae81611f13565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611011573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611035919061332e565b905090565b6000546001600160a01b03163314611065576040516311a8a1bb60e31b815260040160405180910390fd5b476110708282611f85565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d826040516110ab91815260200190565b60405180910390a25050565b6000546001600160a01b031633146110e2576040516311a8a1bb60e31b815260040160405180910390fd5b6110ea6118f6565b600081815260096020526040812054900361113f5760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b6044820152606401610a05565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610cad9083815260200190565b6000546001600160a01b03163314610c26576040516311a8a1bb60e31b815260040160405180910390fd5b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa1580156111f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121a9190613444565b6112515760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610a05565b611259611755565b610c266120a3565b6000546001600160a01b0316331461128c576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b0382811691161480156112aa575060025415155b156112c8576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036112f657604051634a2fb73f60e11b815260040160405180910390fd5b610fae816120e6565b6000546001600160a01b0316331461132a576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610cad565b6000546001600160a01b031633146113a6576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610cad565b6001546001600160a01b03163314611425576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426114379190613466565b11611455576040516324e0285f60e21b815260040160405180910390fd5b600154610c26906001600160a01b0316612134565b6000546001600160a01b03163314611495576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b03908116908216036114f35760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e616765720000000000000000006044820152606401610a05565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610cad565b600061154c82612199565b92915050565b6000546001600160a01b0316331461157d576040516311a8a1bb60e31b815260040160405180910390fd5b610fae816121df565b336000908152600d602052604081205460609060ff166115d75760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b6044820152606401610a05565b63ffffffff8086166000908152600e602052604081208054919291909116908261160083613479565b91906101000a81548163ffffffff021916908363ffffffff1602179055509050600061165f7f0000000000000000000000000000000000000000000000000000000000000000611656336001600160a01b031690565b848a8a8a61225d565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af11580156116d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f9919061349c565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f8361172b600184613466565b848760405161173d94939291906134c0565b60405180910390a15090989197509095505050505050565b600354600160a01b900460ff1615610c265760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a05565b81516020146117dd5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a05565b80511561181b5760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a05565b6000634ff746f660e01b8360405160240161183691906134ef565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260035491516349460b4d60e11b81529092506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263928c169a926118bf9291909116908590600401613502565b600060405180830381600087803b1580156118d957600080fd5b505af11580156118ed573d6000803e3d6000fd5b50505050505050565b600354600160a01b900460ff16610c265760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a05565b61194e6118f6565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6003546119b0906001600160a01b0316612199565b6119ef5760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b6044820152606401610a05565b8051602014611a2a5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a05565b610fae611a3682613526565b612295565b600260075403611a8d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a05565b6002600755565b6000806000858152600f602052604090205460ff166002811115611aba57611aba613105565b14611afd5760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b6044820152606401610a05565b611b318484602080602002604051908101604052809291908260208002808284376000920191909152508691506123be9050565b90505b9392505050565b6000848152600b602052604090205460ff16611c3057611b5a8361270c565b6000611b908584602080602002604051908101604052809291908260208002808284376000920191909152508691506123be9050565b9050838114611bd75760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b6044820152606401610a05565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611c269086815260200190565b60405180910390a3505b50505050565b600080611c43838261286c565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611c7b62ffffff198316612890565b63ffffffff1614611cbd5760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b6044820152606401610a05565b6000611cce62ffffff1983166128a5565b905060016000828152600f602052604090205460ff166002811115611cf557611cf5613105565b14611d2c5760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b6044820152606401610a05565b6000818152600f60205260409020805460ff191660021790556001611d917f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061331b565b611d9b9190613466565b5a11611dd25760405162461bcd60e51b8152600401610a05906020808252600490820152632167617360e01b604082015260600190565b6000611de362ffffff1984166128ee565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611e3e62ffffff1988166128ff565b611e4d62ffffff198916612913565b611e5c62ffffff198a16612928565b611e79611e6e62ffffff198c1661293d565b62ffffff191661296b565b604051602401611e8c949392919061354d565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050611ec68585600086856129b4565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890611eff9088908b90869061357c565b60405180910390a150505050505050919050565b611f1c81612a3f565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b80471015611fd55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a05565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612022576040519150601f19603f3d011682016040523d82523d6000602084013e612027565b606091505b505090508061209e5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a05565b505050565b6120ab611755565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861197e3390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60006121c47f0000000000000000000000000000000000000000000000000000000000000000612b42565b6001600160a01b0316826001600160a01b0316149050919050565b60055481036122225760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b6044820152606401610a05565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610cad565b606086868686868660405160200161227a9695949392919061359d565b60405160208183030381529060405290509695505050505050565b806122d35760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b6044820152606401610a05565b600081815260096020526040902054156123265760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b6044820152606401610a05565b6000818152600a602052604090205460ff161561237b5760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b6044820152606401610a05565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610cad9083815260200190565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b8061274f5760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b6044820152606401610a05565b6000818152600a602052604090205460ff16156127695750565b600081815260096020526040812054908190036127bf5760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b6044820152606401610a05565b6008546127cc8243613466565b101561281a5760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f74202176657269666965640000000000000000006044820152606401610a05565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b81516000906020840161288764ffffffffff85168284612bcc565b95945050505050565b600061154c62ffffff19831660286004612c09565b6000806128bb8360781c6001600160601b031690565b6001600160601b0316905060006128db8460181c6001600160601b031690565b6001600160601b03169091209392505050565b600061154c6128fc83612c39565b90565b600061154c62ffffff198316826004612c09565b600061154c62ffffff19831660246004612c09565b600061154c62ffffff19831660046020612c4a565b600061154c604c61295b81601886901c6001600160601b0316613466565b62ffffff19851691906000612d55565b60606000806129838460181c6001600160601b031690565b6001600160601b0316905060405191508192506129a38483602001612dd1565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff8111156129da576129da61302d565b6040519080825280601f01601f191660200182016040528015612a04576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612a25578692505b828152826000602083013e90999098509650505050505050565b6040516326ddea8360e11b81526001600160a01b038281166004830152600060248301819052917f000000000000000000000000000000000000000000000000000000000000000090911690634dbbd50690604401602060405180830381865afa158015612ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad591906135f7565b601054604080516001600160a01b03928316815291831660208301529192507f138b2e0015ac8e1842fbb73cdefea5574fd42dd33df05e84271a7adc811d6b3d910160405180910390a1601080546001600160a01b0319166001600160a01b039290921691909117905550565b6000612b4d82612ec4565b612b6a5760405163253a6fc960e11b815260040160405180910390fd5b816001600160a01b031663d74523b36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154c91906135f7565b600080612bd9838561331b565b9050604051811115612be9575060005b80600003612bfe5762ffffff19915050611b34565b612887858585612f28565b6000612c16826020613614565b612c2190600861362d565b60ff16612c2f858585612c4a565b901c949350505050565b600061154c62ffffff198316602c60205b60008160ff16600003612c5f57506000611b34565b612c728460181c6001600160601b031690565b6001600160601b0316612c8860ff84168561331b565b1115612cf057612ca18460781c6001600160601b031690565b612cb48560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610a05565b60208260ff161115612d155760405163045df3f960e01b815260040160405180910390fd5b600882026000612d2e8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612d6b8660781c6001600160601b031690565b6001600160601b03169050612d7f86612f9f565b84612d8a878461331b565b612d94919061331b565b1115612da75762ffffff19915050612dc9565b612db1858261331b565b9050612dc58364ffffffffff168286612bcc565b9150505b949350505050565b600062ffffff1980841603612df95760405163148d513360e21b815260040160405180910390fd5b612e0283612fd8565b15612e2057604051632ee0949160e11b815260040160405180910390fd5b6000612e358460181c6001600160601b031690565b6001600160601b031690506000612e558560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115612e765760206060fd5b8386858560045afa905080612e9e57604051632af1bd9b60e21b815260040160405180910390fd5b612eb9612eab8860d81c90565b64ffffffffff168786612f28565b979650505050505050565b6000816001600160a01b031663175a260b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f04573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154c9190613444565b60006060601883856001600160601b03821682148015612f50575086816001600160601b0316145b612f895760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610a05565b96831b90961790911b90941790931b9392505050565b6000612fb48260181c6001600160601b031690565b612fc78360781c6001600160601b031690565b016001600160601b03169050919050565b6000612fe48260d81c90565b64ffffffffff1664ffffffffff03612ffe57506001919050565b600061300983612f9f565b604051109392505050565b60006020828403121561302657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261305457600080fd5b813567ffffffffffffffff8082111561306f5761306f61302d565b604051601f8301601f19908116603f011681019082821181831017156130975761309761302d565b816040528381528660208588010111156130b057600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156130e257600080fd5b813567ffffffffffffffff8111156130f957600080fd5b612dc984828501613043565b634e487b7160e01b600052602160045260246000fd5b602081016003831061313d57634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806000610460868803121561315c57600080fd5b853567ffffffffffffffff8082111561317457600080fd5b818801915088601f83011261318857600080fd5b81358181111561319757600080fd5b8960208260051b85010111156131ac57600080fd5b6020928301975095505086013592506104408601878111156131cd57600080fd5b94979396509194604001933592915050565b6001600160a01b0381168114610fae57600080fd5b60006020828403121561320657600080fd5b8135611b34816131df565b803563ffffffff8116811461322557600080fd5b919050565b60006020828403121561323c57600080fd5b611b3482613211565b60008060006060848603121561325a57600080fd5b61326384613211565b925060208401359150604084013567ffffffffffffffff81111561328657600080fd5b61329286828701613043565b9150509250925092565b60005b838110156132b757818101518382015260200161329f565b50506000910152565b600081518084526132d881602086016020860161329c565b601f01601f19169290920160200192915050565b828152604060208201526000611b3160408301846132c0565b634e487b7160e01b600052601160045260246000fd5b8082018082111561154c5761154c613305565b60006020828403121561334057600080fd5b5051919050565b60608152600061335a60608301866132c0565b828103602084015261336c81866132c0565b91505060018060a01b0383166040830152949350505050565b60408152600061339860408301856132c0565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e198336030181126133dc57600080fd5b9190910192915050565b6000808335601e198436030181126133fd57600080fd5b83018035915067ffffffffffffffff82111561341857600080fd5b60200191503681900382131561342d57600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561345657600080fd5b81518015158114611b3457600080fd5b8181038181111561154c5761154c613305565b600063ffffffff80831681810361349257613492613305565b6001019392505050565b600080604083850312156134af57600080fd5b505080516020909101519092909150565b8481528360208201528260408201526080606082015260006134e560808301846132c0565b9695505050505050565b602081526000611b3460208301846132c0565b6001600160a01b0383168152604060208201819052600090611b31908301846132c0565b80516020808301519190811015613547576000198160200360031b1b821691505b50919050565b600063ffffffff8087168352808616602084015250836040830152608060608301526134e560808301846132c0565b838152821515602082015260606040820152600061288760608301846132c0565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c83015282516135e581604c85016020870161329c565b91909101604c01979650505050505050565b60006020828403121561360957600080fd5b8151611b34816131df565b60ff828116828216039081111561154c5761154c613305565b60ff818116838216029081169081811461364957613649613305565b509291505056fea2646970667358221220851eb81b3ec18eca175885bdd1aceac04ca0f0772614793366c7fa3057f1abd864736f6c63430008110033","opcodes":"PUSH2 0x160 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x3CBC CODESIZE SUB DUP1 PUSH3 0x3CBC DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x4AE JUMP JUMPDEST DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP1 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH3 0x50 CALLER PUSH3 0x2BD JUMP JUMPDEST DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0x0 SUB PUSH3 0x9B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x32B6B83A3C903237B6B0B4B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xE7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x32B6B83A3C903937B7BA26B0B730B3B2B9 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x92 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0xA0 MSTORE DUP4 DUP2 AND PUSH1 0xC0 MSTORE SWAP1 DUP6 AND PUSH1 0xE0 MSTORE DUP2 AND ISZERO PUSH3 0x11F JUMPI PUSH3 0x11F DUP2 PUSH3 0x322 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH4 0xFFFFFFFF DUP7 DUP2 AND SWAP3 SWAP1 DUP9 AND SWAP2 PUSH32 0x4F9C27C2FE3F84576EA469D367D044DA53C45E951617E8389F2B5ED8DB9D25F0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE POP PUSH1 0x1 PUSH1 0x7 SSTORE PUSH3 0xCF84F DUP6 GT PUSH3 0x1F2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2170726F6365737320676173 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x92 JUMP JUMPDEST PUSH2 0x3A97 DUP5 GT PUSH3 0x234 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x217265736572766520676173 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x92 JUMP JUMPDEST PUSH2 0x120 DUP6 SWAP1 MSTORE PUSH2 0x140 DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0x287 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x217A65726F206D65726B6C65 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x92 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x100 MSTORE PUSH1 0x8 SSTORE POP PUSH3 0x2AD SWAP6 POP DUP12 SWAP5 POP POP PUSH3 0x396 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP PUSH3 0x587 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH3 0x32D DUP2 PUSH3 0x396 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xA0 MLOAD PUSH1 0x40 MLOAD PUSH4 0x26DDEA83 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP4 ADD DUP2 SWAP1 MSTORE SWAP3 AND SWAP1 PUSH4 0x4DBBD506 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x3E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x40F SWAP2 SWAP1 PUSH3 0x562 JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH32 0x138B2E0015AC8E1842FBB73CDEFEA5574FD42DD33DF05E84271A7ADC811D6B3D SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x10 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST DUP1 MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH3 0x491 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x491 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x140 DUP12 DUP14 SUB SLT ISZERO PUSH3 0x4CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x4DA DUP12 PUSH3 0x47C JUMP JUMPDEST SWAP10 POP PUSH3 0x4EA PUSH1 0x20 DUP13 ADD PUSH3 0x47C JUMP JUMPDEST SWAP9 POP PUSH3 0x4FA PUSH1 0x40 DUP13 ADD PUSH3 0x496 JUMP JUMPDEST SWAP8 POP PUSH3 0x50A PUSH1 0x60 DUP13 ADD PUSH3 0x496 JUMP JUMPDEST SWAP7 POP PUSH3 0x51A PUSH1 0x80 DUP13 ADD PUSH3 0x496 JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD MLOAD SWAP5 POP PUSH1 0xC0 DUP12 ADD MLOAD SWAP4 POP PUSH1 0xE0 DUP12 ADD MLOAD SWAP3 POP PUSH3 0x540 PUSH2 0x100 DUP13 ADD PUSH3 0x496 JUMP JUMPDEST SWAP2 POP PUSH3 0x551 PUSH2 0x120 DUP13 ADD PUSH3 0x496 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP2 SWAP5 SWAP8 SWAP11 POP SWAP3 SWAP6 SWAP9 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x575 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x580 DUP3 PUSH3 0x496 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x3686 PUSH3 0x636 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x325 ADD MSTORE PUSH2 0x1D4C ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x90E ADD MSTORE DUP2 DUP2 PUSH2 0x1D6D ADD MSTORE PUSH2 0x1DFA ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x735 ADD MSTORE DUP2 DUP2 PUSH2 0xA8B ADD MSTORE DUP2 DUP2 PUSH2 0xFB5 ADD MSTORE PUSH2 0x1685 ADD MSTORE PUSH1 0x0 PUSH2 0x2B5 ADD MSTORE PUSH1 0x0 PUSH2 0x57B ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x8C4 ADD MSTORE DUP2 DUP2 PUSH2 0x1884 ADD MSTORE DUP2 DUP2 PUSH2 0x21A0 ADD MSTORE PUSH2 0x2A68 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x4C2 ADD MSTORE DUP2 DUP2 PUSH2 0x671 ADD MSTORE DUP2 DUP2 PUSH2 0x1627 ADD MSTORE PUSH2 0x1C4C ADD MSTORE PUSH2 0x3686 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x297 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x15A JUMPI DUP1 PUSH4 0xB95A2001 GT PUSH2 0xC1 JUMPI DUP1 PUSH4 0xD69F9D61 GT PUSH2 0x7A JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x8B2 JUMPI DUP1 PUSH4 0xD7D317B3 EQ PUSH2 0x8E6 JUMPI DUP1 PUSH4 0xD88BEDA2 EQ PUSH2 0x8FC JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x930 JUMPI DUP1 PUSH4 0xE0FED010 EQ PUSH2 0x950 JUMPI DUP1 PUSH4 0xFA31DE01 EQ PUSH2 0x970 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB95A2001 EQ PUSH2 0x7ED JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x820 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x835 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x855 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x873 JUMPI DUP1 PUSH4 0xD2A3CC71 EQ PUSH2 0x892 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA01892A5 GT PUSH2 0x113 JUMPI DUP1 PUSH4 0xA01892A5 EQ PUSH2 0x723 JUMPI DUP1 PUSH4 0xA792C29B EQ PUSH2 0x757 JUMPI DUP1 PUSH4 0xAD9C0C2E EQ PUSH2 0x777 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x78D JUMPI DUP1 PUSH4 0xB2F87643 EQ PUSH2 0x7AD JUMPI DUP1 PUSH4 0xB697F531 EQ PUSH2 0x7CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x64D JUMPI DUP1 PUSH4 0x8D3638F4 EQ PUSH2 0x662 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x695 JUMPI DUP1 PUSH4 0x98C9F2B9 EQ PUSH2 0x6B3 JUMPI DUP1 PUSH4 0x9D3117C7 EQ PUSH2 0x6E3 JUMPI DUP1 PUSH4 0x9FA92F9D EQ PUSH2 0x710 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B GT PUSH2 0x1FE JUMPI DUP1 PUSH4 0x6159ADA1 GT PUSH2 0x1B7 JUMPI DUP1 PUSH4 0x6159ADA1 EQ PUSH2 0x59D JUMPI DUP1 PUSH4 0x65EAF11B EQ PUSH2 0x5CD JUMPI DUP1 PUSH4 0x68742DA6 EQ PUSH2 0x5E2 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x602 JUMPI DUP1 PUSH4 0x6B04A933 EQ PUSH2 0x618 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x638 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B EQ PUSH2 0x4B0 JUMPI DUP1 PUSH4 0x572386CA EQ PUSH2 0x4E4 JUMPI DUP1 PUSH4 0x579C1618 EQ PUSH2 0x514 JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x52A JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x569 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x361D88AC GT PUSH2 0x250 JUMPI DUP1 PUSH4 0x361D88AC EQ PUSH2 0x3E5 JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x41D JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x432 JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x447 JUMPI DUP1 PUSH4 0x508A109B EQ PUSH2 0x467 JUMPI DUP1 PUSH4 0x5190BC53 EQ PUSH2 0x487 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x2A3 JUMPI DUP1 PUSH4 0x1EEAABEA EQ PUSH2 0x2F1 JUMPI DUP1 PUSH4 0x25E3BEDA EQ PUSH2 0x313 JUMPI DUP1 PUSH4 0x2BB1AE7C EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0x2BBD59CA EQ PUSH2 0x368 JUMPI DUP1 PUSH4 0x301F07C3 EQ PUSH2 0x3A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x29E JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D7 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x30C CALLDATASIZE PUSH1 0x4 PUSH2 0x3014 JUMP JUMPDEST PUSH2 0x99E JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x31F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E8 JUMP JUMPDEST PUSH2 0x311 PUSH2 0x363 CALLDATASIZE PUSH1 0x4 PUSH2 0x30D0 JUMP JUMPDEST PUSH2 0xA48 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x398 PUSH2 0x383 CALLDATASIZE PUSH1 0x4 PUSH2 0x3014 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2E8 SWAP2 SWAP1 PUSH2 0x311B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x3C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3014 JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x10 SLOAD PUSH2 0x405 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x429 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x347 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x43E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0xBEB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x453 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x462 CALLDATASIZE PUSH1 0x4 PUSH2 0x30D0 JUMP JUMPDEST PUSH2 0xC28 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x473 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x482 CALLDATASIZE PUSH1 0x4 PUSH2 0x3143 JUMP JUMPDEST PUSH2 0xCB8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x493 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x4A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x31F4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D7 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x4FF CALLDATASIZE PUSH1 0x4 PUSH2 0x3014 JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x520 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x536 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x545 CALLDATASIZE PUSH1 0x4 PUSH2 0x31F4 JUMP JUMPDEST PUSH2 0xF7A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x556 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3D5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x575 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x405 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x5B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x31F4 JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0xFB1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x5FD CALLDATASIZE PUSH1 0x4 PUSH2 0x31F4 JUMP JUMPDEST PUSH2 0x103A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x60E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x347 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x624 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x633 CALLDATASIZE PUSH1 0x4 PUSH2 0x3014 JUMP JUMPDEST PUSH2 0x10B7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x644 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x1182 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x659 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x11AD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x66E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x0 PUSH2 0x2D7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x405 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x6CE CALLDATASIZE PUSH1 0x4 PUSH2 0x3014 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x6FE CALLDATASIZE PUSH1 0x4 PUSH2 0x3014 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x71C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH2 0x405 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x72F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x405 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x763 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x405 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x783 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x799 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x7A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x31F4 JUMP JUMPDEST PUSH2 0x1261 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x7C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x31F4 JUMP JUMPDEST PUSH2 0x12FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x7E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x31F4 JUMP JUMPDEST PUSH2 0x137B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D7 PUSH2 0x808 CALLDATASIZE PUSH1 0x4 PUSH2 0x322A JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x82C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x13FA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x841 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x405 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x861 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x405 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x87F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x3D5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x89E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x8AD CALLDATASIZE PUSH1 0x4 PUSH2 0x31F4 JUMP JUMPDEST PUSH2 0x146A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x405 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x908 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x93C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x94B CALLDATASIZE PUSH1 0x4 PUSH2 0x31F4 JUMP JUMPDEST PUSH2 0x1541 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x96B CALLDATASIZE PUSH1 0x4 PUSH2 0x3014 JUMP JUMPDEST PUSH2 0x1552 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x97C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x990 PUSH2 0x98B CALLDATASIZE PUSH1 0x4 PUSH2 0x3245 JUMP JUMPDEST PUSH2 0x1586 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2E8 SWAP3 SWAP2 SWAP1 PUSH2 0x32EC JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9C9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD DUP2 SUB PUSH2 0xA0E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2164656C6179426C6F636B73 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLER DUP2 MSTORE DUP2 SWAP1 PUSH32 0x8BD16320F3B60336ED5FD2A770EB7453E7E71CFEF4462ADDFFD7AE9DFE201C8E SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x8 SSTORE JUMP JUMPDEST PUSH2 0xA50 PUSH2 0x1755 JUMP JUMPDEST NUMBER PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD PUSH2 0xA61 SWAP2 SWAP1 PUSH2 0x331B JUMP JUMPDEST GT ISZERO PUSH2 0xA80 JUMPI PUSH1 0x40 MLOAD PUSH4 0x46CF2AF1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST NUMBER PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB0B SWAP2 SWAP1 PUSH2 0x332E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xB61 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1C9BDBDD08185B1C9958591E481CD95B9D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xB76 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH2 0xB91 DUP2 DUP5 PUSH2 0x17A2 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 SWAP1 PUSH2 0xBDE SWAP1 DUP4 SWAP1 DUP7 SWAP1 CALLER SWAP1 PUSH2 0x3347 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC16 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC1E PUSH2 0x18F6 JUMP JUMPDEST PUSH2 0xC26 PUSH2 0x1946 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC73 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x10B0B634B0B9B2B229B2B73232B9 PUSH1 0x91 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0xC7C DUP2 PUSH2 0x199B JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0xCAD SWAP3 SWAP2 SWAP1 PUSH2 0x3385 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xCC0 PUSH2 0x1755 JUMP JUMPDEST PUSH2 0xCC8 PUSH2 0x1A3B JUMP JUMPDEST DUP4 PUSH2 0xCFF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x2170726F6F6673 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD14 JUMPI PUSH2 0xD14 PUSH2 0x33AF JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD26 SWAP2 SWAP1 PUSH2 0x33C5 JUMP JUMPDEST PUSH2 0xD30 SWAP1 DUP1 PUSH2 0x33E6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD3E SWAP3 SWAP2 SWAP1 PUSH2 0x3434 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xDA5 DUP3 DUP9 DUP9 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD61 JUMPI PUSH2 0xD61 PUSH2 0x33AF JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD73 SWAP2 SWAP1 PUSH2 0x33C5 JUMP JUMPDEST PUSH1 0x20 ADD DUP10 DUP10 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD89 JUMPI PUSH2 0xD89 PUSH2 0x33AF JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD9B SWAP2 SWAP1 PUSH2 0x33C5 JUMP JUMPDEST PUSH2 0x420 ADD CALLDATALOAD PUSH2 0x1A94 JUMP JUMPDEST SWAP1 POP PUSH2 0xDB3 DUP2 DUP7 DUP7 DUP7 PUSH2 0x1B3B JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP7 SWAP1 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xED9 JUMPI DUP9 DUP9 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xDF8 JUMPI PUSH2 0xDF8 PUSH2 0x33AF JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE0A SWAP2 SWAP1 PUSH2 0x33C5 JUMP JUMPDEST PUSH2 0xE14 SWAP1 DUP1 PUSH2 0x33E6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE22 SWAP3 SWAP2 SWAP1 PUSH2 0x3434 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP4 POP PUSH1 0x0 PUSH2 0xE77 DUP6 DUP12 DUP12 DUP6 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xE4A JUMPI PUSH2 0xE4A PUSH2 0x33AF JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE5C SWAP2 SWAP1 PUSH2 0x33C5 JUMP JUMPDEST PUSH1 0x20 ADD DUP13 DUP13 DUP7 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xD89 JUMPI PUSH2 0xD89 PUSH2 0x33AF JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0xEB6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x85CDA185C9959149BDBDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE ADD PUSH2 0xDD2 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xF65 JUMPI PUSH2 0xF5C DUP10 DUP10 DUP4 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xF06 JUMPI PUSH2 0xF06 PUSH2 0x33AF JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xF18 SWAP2 SWAP1 PUSH2 0x33C5 JUMP JUMPDEST PUSH2 0xF22 SWAP1 DUP1 PUSH2 0x33E6 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1C36 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xEDD JUMP JUMPDEST POP POP POP POP PUSH2 0xF73 PUSH1 0x1 PUSH1 0x7 SSTORE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xFA5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFAE DUP2 PUSH2 0x1F13 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1011 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1035 SWAP2 SWAP1 PUSH2 0x332E JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1065 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SELFBALANCE PUSH2 0x1070 DUP3 DUP3 PUSH2 0x1F85 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEAFF4B37086828766AD3268786972C0CD24259D4C87A80F9D3963A3C3D999B0D DUP3 PUSH1 0x40 MLOAD PUSH2 0x10AB SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x10EA PUSH2 0x18F6 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SUB PUSH2 0x113F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x616767726567617465526F6F742021657869737473 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xF51534ECF10A58DB36CE4F5180F59DEDDF3B3EB7C5E7454E602C2F80A40CC739 SWAP1 PUSH2 0xCAD SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC26 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x121A SWAP2 SWAP1 PUSH2 0x3444 JUMP JUMPDEST PUSH2 0x1251 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0x1259 PUSH2 0x1755 JUMP JUMPDEST PUSH2 0xC26 PUSH2 0x20A3 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x128C JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x12AA JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x12C8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x12F6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFAE DUP2 PUSH2 0x20E6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x132A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x384859C5EF5FAFAC31E8BC92CE7FB48B1F2C74C4DD5E212EB84EC202FA5D9FAD SWAP2 ADD PUSH2 0xCAD JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x13A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xD65ECA5D561D3A4568C87B9B13CED4AB52A69EDADFDFDB22D76BC595F36D7D87 SWAP2 ADD PUSH2 0xCAD JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1425 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x1437 SWAP2 SWAP1 PUSH2 0x3466 JUMP JUMPDEST GT PUSH2 0x1455 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0xC26 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2134 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1495 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0x14F3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616C72656164792077617463686572206D616E61676572000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC16D059E43D7F8E29CCB4E001A2F249D3C59E274925D6A6BC3912943441D9F6C SWAP1 PUSH1 0x20 ADD PUSH2 0xCAD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x154C DUP3 PUSH2 0x2199 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x157D JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFAE DUP2 PUSH2 0x21DF JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x60 SWAP1 PUSH1 0xFF AND PUSH2 0x15D7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x8585B1B1BDDDB1A5CDD1959 PUSH1 0xA2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP3 PUSH2 0x1600 DUP4 PUSH2 0x3479 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH4 0xFFFFFFFF AND MUL OR SWAP1 SSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0x165F PUSH32 0x0 PUSH2 0x1656 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP5 DUP11 DUP11 DUP11 PUSH2 0x225D JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH4 0x2D287E43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2D287E43 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16D5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16F9 SWAP2 SWAP1 PUSH2 0x349C JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH32 0x40F08EE347FC927AE45902EDC87DEBB024AAB1A311943731968607F603F2152F DUP4 PUSH2 0x172B PUSH1 0x1 DUP5 PUSH2 0x3466 JUMP JUMPDEST DUP5 DUP8 PUSH1 0x40 MLOAD PUSH2 0x173D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x34C0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP SWAP1 SWAP9 SWAP2 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xC26 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x17DD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x181B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 PUSH4 0x4FF746F6 PUSH1 0xE0 SHL DUP4 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1836 SWAP2 SWAP1 PUSH2 0x34EF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x3 SLOAD SWAP2 MLOAD PUSH4 0x49460B4D PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND SWAP3 PUSH4 0x928C169A SWAP3 PUSH2 0x18BF SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x3502 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x18ED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xC26 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0x194E PUSH2 0x18F6 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x19B0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2199 JUMP JUMPDEST PUSH2 0x19EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x10B6B4B93937B921B7B73732B1BA37B9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0x1A2A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0xFAE PUSH2 0x1A36 DUP3 PUSH2 0x3526 JUMP JUMPDEST PUSH2 0x2295 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SLOAD SUB PUSH2 0x1A8D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1ABA JUMPI PUSH2 0x1ABA PUSH2 0x3105 JUMP JUMPDEST EQ PUSH2 0x1AFD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x214D6573736167655374617475732E4E6F6E65 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0x1B31 DUP5 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x23BE SWAP1 POP JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1C30 JUMPI PUSH2 0x1B5A DUP4 PUSH2 0x270C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B90 DUP6 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x23BE SWAP1 POP JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0x1BD7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1A5B9D985B1A59081A5B989BDD5B99149BDBDD PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP5 SWAP1 DUP7 SWAP1 PUSH32 0x7EC1EA51FE3DB53E55ED9D922854BC2156F467FF2F87D74E2086DAE2C84A88A8 SWAP1 PUSH2 0x1C26 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1C43 DUP4 DUP3 PUSH2 0x286C JUMP JUMPDEST SWAP1 POP PUSH4 0xFFFFFFFF PUSH32 0x0 AND PUSH2 0x1C7B PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x2890 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x1CBD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B232B9BA34B730BA34B7B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CCE PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x28A5 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1CF5 JUMPI PUSH2 0x1CF5 PUSH2 0x3105 JUMP JUMPDEST EQ PUSH2 0x1D2C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x10B83937BB32B7 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x2 OR SWAP1 SSTORE PUSH1 0x1 PUSH2 0x1D91 PUSH32 0x0 PUSH32 0x0 PUSH2 0x331B JUMP JUMPDEST PUSH2 0x1D9B SWAP2 SWAP1 PUSH2 0x3466 JUMP JUMPDEST GAS GT PUSH2 0x1DD2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA05 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x21676173 PUSH1 0xE0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DE3 PUSH3 0xFFFFFF NOT DUP5 AND PUSH2 0x28EE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH32 0x0 SWAP2 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x1E3E PUSH3 0xFFFFFF NOT DUP9 AND PUSH2 0x28FF JUMP JUMPDEST PUSH2 0x1E4D PUSH3 0xFFFFFF NOT DUP10 AND PUSH2 0x2913 JUMP JUMPDEST PUSH2 0x1E5C PUSH3 0xFFFFFF NOT DUP11 AND PUSH2 0x2928 JUMP JUMPDEST PUSH2 0x1E79 PUSH2 0x1E6E PUSH3 0xFFFFFF NOT DUP13 AND PUSH2 0x293D JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND PUSH2 0x296B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1E8C SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x354D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xAB2DC3F5 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 POP PUSH2 0x1EC6 DUP6 DUP6 PUSH1 0x0 DUP7 DUP6 PUSH2 0x29B4 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP10 POP SWAP3 POP PUSH32 0xD42DE95A9B26F1BE134C8ECCE389DC4FCFA18753D01661B7B361233569E8FE48 SWAP1 PUSH2 0x1EFF SWAP1 DUP9 SWAP1 DUP12 SWAP1 DUP7 SWAP1 PUSH2 0x357C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1F1C DUP2 PUSH2 0x2A3F JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x1FD5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2022 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2027 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x209E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA05 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x20AB PUSH2 0x1755 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x197E CALLER SWAP1 JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x21C4 PUSH32 0x0 PUSH2 0x2B42 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 SUB PUSH2 0x2222 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x85B995DC81C985D19481B1A5B5A5D PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0x8E7FA5E406CB856AAB05575E45EA011C6748376CC1B5229E3D67B92986406A15 SWAP2 ADD PUSH2 0xCAD JUMP JUMPDEST PUSH1 0x60 DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x227A SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x359D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x22D3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x6E657720726F6F7420656D707479 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x2326 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x726F6F7420616C72656164792070656E64696E67 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x237B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x3937B7BA1030B63932B0B23C90383937BB32B7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 NUMBER SWAP1 SSTORE MLOAD PUSH32 0x84EF18531155AFDB0E64FF905D67044AE3AAC63A6FBA4661CFD9C4C14F289BC8 SWAP1 PUSH2 0xCAD SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x5 DUP3 DUP2 SHL DUP3 AND SWAP5 DUP6 MSTORE DUP4 MLOAD SWAP5 DUP3 SUB SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x40 PUSH1 0x0 DUP2 DUP2 KECCAK256 PUSH1 0x2 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x4 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP3 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x8 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x10 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 DUP5 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 DUP4 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 SWAP1 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xE0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x100 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x200 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x120 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x400 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x140 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x800 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x160 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x1000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x2000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x4000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1C0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x8000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1E0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH3 0x10000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x20000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x220 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x40000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x240 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x80000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x260 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x100000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x280 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x200000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x400000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x800000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2E0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x1000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x300 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x2000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x320 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x4000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x340 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x8000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x360 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x10000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x380 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x20000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x40000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x80000000 SWAP1 SWAP5 AND ISZERO SWAP1 SWAP6 SHL SWAP2 DUP3 SWAP1 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x3E0 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x274F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x616767726567617465526F6F7420656D707479 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2769 JUMPI POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x27BF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x1859D9DC9959D85D19549BDBDD0808595E1A5CDD PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x27CC DUP3 NUMBER PUSH2 0x3466 JUMP JUMPDEST LT ISZERO PUSH2 0x281A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616767726567617465526F6F7420217665726966696564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP4 SWAP2 PUSH32 0x36B314ABA9F663B4D3EF3288AE489341CC5E6A2725A05FA2B72DF7A27E03F42A SWAP2 LOG2 POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0x2887 PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x2BCC JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x154C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x28 PUSH1 0x4 PUSH2 0x2C09 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x28BB DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x28DB DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 SWAP2 KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x154C PUSH2 0x28FC DUP4 PUSH2 0x2C39 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x154C PUSH3 0xFFFFFF NOT DUP4 AND DUP3 PUSH1 0x4 PUSH2 0x2C09 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x154C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x24 PUSH1 0x4 PUSH2 0x2C09 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x154C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x4 PUSH1 0x20 PUSH2 0x2C4A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x154C PUSH1 0x4C PUSH2 0x295B DUP2 PUSH1 0x18 DUP7 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x3466 JUMP JUMPDEST PUSH3 0xFFFFFF NOT DUP6 AND SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2D55 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x2983 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x40 MLOAD SWAP2 POP DUP2 SWAP3 POP PUSH2 0x29A3 DUP5 DUP4 PUSH1 0x20 ADD PUSH2 0x2DD1 JUMP JUMPDEST POP DUP2 DUP2 ADD PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH2 0xFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x29DA JUMPI PUSH2 0x29DA PUSH2 0x302D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2A04 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP8 MLOAD PUSH1 0x20 DUP10 ADD DUP12 DUP15 DUP15 CALL SWAP2 POP RETURNDATASIZE SWAP3 POP DUP7 DUP4 GT ISZERO PUSH2 0x2A25 JUMPI DUP7 SWAP3 POP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x26DDEA83 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP4 ADD DUP2 SWAP1 MSTORE SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x4DBBD506 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2AB1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2AD5 SWAP2 SWAP1 PUSH2 0x35F7 JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH32 0x138B2E0015AC8E1842FBB73CDEFEA5574FD42DD33DF05E84271A7ADC811D6B3D SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x10 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2B4D DUP3 PUSH2 0x2EC4 JUMP JUMPDEST PUSH2 0x2B6A JUMPI PUSH1 0x40 MLOAD PUSH4 0x253A6FC9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD74523B3 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2BA8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x154C SWAP2 SWAP1 PUSH2 0x35F7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2BD9 DUP4 DUP6 PUSH2 0x331B JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x2BE9 JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x2BFE JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x1B34 JUMP JUMPDEST PUSH2 0x2887 DUP6 DUP6 DUP6 PUSH2 0x2F28 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C16 DUP3 PUSH1 0x20 PUSH2 0x3614 JUMP JUMPDEST PUSH2 0x2C21 SWAP1 PUSH1 0x8 PUSH2 0x362D JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x2C2F DUP6 DUP6 DUP6 PUSH2 0x2C4A JUMP JUMPDEST SWAP1 SHR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x154C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x2C PUSH1 0x20 JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0x2C5F JUMPI POP PUSH1 0x0 PUSH2 0x1B34 JUMP JUMPDEST PUSH2 0x2C72 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x2C88 PUSH1 0xFF DUP5 AND DUP6 PUSH2 0x331B JUMP JUMPDEST GT ISZERO PUSH2 0x2CF0 JUMPI PUSH2 0x2CA1 DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2CB4 DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x2D15 JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0x2D2E DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT DUP5 ADD SAR SWAP2 SWAP1 SWAP6 ADD MLOAD AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2D6B DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH2 0x2D7F DUP7 PUSH2 0x2F9F JUMP JUMPDEST DUP5 PUSH2 0x2D8A DUP8 DUP5 PUSH2 0x331B JUMP JUMPDEST PUSH2 0x2D94 SWAP2 SWAP1 PUSH2 0x331B JUMP JUMPDEST GT ISZERO PUSH2 0x2DA7 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x2DC9 JUMP JUMPDEST PUSH2 0x2DB1 DUP6 DUP3 PUSH2 0x331B JUMP JUMPDEST SWAP1 POP PUSH2 0x2DC5 DUP4 PUSH5 0xFFFFFFFFFF AND DUP3 DUP7 PUSH2 0x2BCC JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFFFFFF NOT DUP1 DUP5 AND SUB PUSH2 0x2DF9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x148D5133 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2E02 DUP4 PUSH2 0x2FD8 JUMP JUMPDEST ISZERO PUSH2 0x2E20 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EE09491 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2E35 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2E55 DUP6 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD SWAP2 POP DUP6 DUP3 GT ISZERO PUSH2 0x2E76 JUMPI PUSH1 0x20 PUSH1 0x60 REVERT JUMPDEST DUP4 DUP7 DUP6 DUP6 PUSH1 0x4 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x2E9E JUMPI PUSH1 0x40 MLOAD PUSH4 0x2AF1BD9B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2EB9 PUSH2 0x2EAB DUP9 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND DUP8 DUP7 PUSH2 0x2F28 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x175A260B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x154C SWAP2 SWAP1 PUSH2 0x3444 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0x2F50 JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0x2F89 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2FB4 DUP3 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2FC7 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2FE4 DUP3 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH5 0xFFFFFFFFFF SUB PUSH2 0x2FFE JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3009 DUP4 PUSH2 0x2F9F JUMP JUMPDEST PUSH1 0x40 MLOAD LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3026 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3054 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x306F JUMPI PUSH2 0x306F PUSH2 0x302D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x3097 JUMPI PUSH2 0x3097 PUSH2 0x302D JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x30B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x30F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2DC9 DUP5 DUP3 DUP6 ADD PUSH2 0x3043 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH2 0x313D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x460 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x315C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x3174 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x3197 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x31AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 DUP4 ADD SWAP8 POP SWAP6 POP POP DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x440 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x31CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x40 ADD SWAP4 CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xFAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1B34 DUP2 PUSH2 0x31DF JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x323C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B34 DUP3 PUSH2 0x3211 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x325A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3263 DUP5 PUSH2 0x3211 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3286 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3292 DUP7 DUP3 DUP8 ADD PUSH2 0x3043 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x32B7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x329F JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x32D8 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x329C JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1B31 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x32C0 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x154C JUMPI PUSH2 0x154C PUSH2 0x3305 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3340 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x335A PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x32C0 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x336C DUP2 DUP7 PUSH2 0x32C0 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3398 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x32C0 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x43E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x33DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x33FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x3418 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x342D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3456 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1B34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x154C JUMPI PUSH2 0x154C PUSH2 0x3305 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x3492 JUMPI PUSH2 0x3492 PUSH2 0x3305 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x34AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x34E5 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x32C0 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1B34 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x32C0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x1B31 SWAP1 DUP4 ADD DUP5 PUSH2 0x32C0 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x3547 JUMPI PUSH1 0x0 NOT DUP2 PUSH1 0x20 SUB PUSH1 0x3 SHL SHL DUP3 AND SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x34E5 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x32C0 JUMP JUMPDEST DUP4 DUP2 MSTORE DUP3 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2887 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x32C0 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP1 DUP10 PUSH1 0xE0 SHL AND DUP4 MSTORE DUP8 PUSH1 0x4 DUP5 ADD MSTORE DUP1 DUP8 PUSH1 0xE0 SHL AND PUSH1 0x24 DUP5 ADD MSTORE DUP1 DUP7 PUSH1 0xE0 SHL AND PUSH1 0x28 DUP5 ADD MSTORE POP DUP4 PUSH1 0x2C DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x35E5 DUP2 PUSH1 0x4C DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x329C JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x4C ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3609 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1B34 DUP2 PUSH2 0x31DF JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x154C JUMPI PUSH2 0x154C PUSH2 0x3305 JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND MUL SWAP1 DUP2 AND SWAP1 DUP2 DUP2 EQ PUSH2 0x3649 JUMPI PUSH2 0x3649 PUSH2 0x3305 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP6 0x1E 0xB8 SHL RETURNDATACOPY 0xC1 DUP15 0xCA OR PC DUP6 0xBD 0xD1 0xAC 0xEA 0xC0 0x4C LOG0 CREATE PUSH24 0x2614793366C7FA3057F1ABD864736F6C6343000811003300 ","sourceMap":"422:3270:122:-:0;;;1160:523;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1448:7;1463:13;1484:4;1496:12;1516:16;1540:11;1559;1578:12;1598:7;1613:15;;1448:7;1463:13;1484:4;1496:12;1516:16;3038:21:116::1;3048:10;3038:9;:21::i;:::-;3105:7;:12;;3116:1;3105:12:::0;3097:37:::1;;;::::0;-1:-1:-1;;;3097:37:116;;1479:2:181;3097:37:116::1;::::0;::::1;1461:21:181::0;1518:2;1498:18;;;1491:30;-1:-1:-1;;;1537:18:181;;;1530:42;1589:18;;3097:37:116::1;;;;;;;;;-1:-1:-1::0;;;;;3148:26:116;::::1;3140:56;;;::::0;-1:-1:-1;;;3140:56:116;;1820:2:181;3140:56:116::1;::::0;::::1;1802:21:181::0;1859:2;1839:18;;;1832:30;-1:-1:-1;;;1878:18:181;;;1871:47;1935:18;;3140:56:116::1;1618:341:181::0;3140:56:116::1;3308:16;::::0;;::::1;;::::0;-1:-1:-1;;;;;3330:10:116;;::::1;;::::0;3346:27;;::::1;;::::0;3379:29;;::::1;;::::0;3449:30;::::1;::::0;3445:88:::1;;3489:37;3509:16:::0;3489:19:::1;:37::i;:::-;3544:74;::::0;;-1:-1:-1;;;;;2222:15:181;;;2204:34;;2274:15;;;2269:2;2254:18;;2247:43;2326:15;;2306:18;;;2299:43;3544:74:116;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;2154:2:181;3544:74:116;;::::1;-1:-1:-1::0;;996:7:51;:15;;-1:-1:-1;;;;996:15:51;;;-1:-1:-1;;1056:14:114::1;:48:::0;;-1:-1:-1;;;;;;1056:48:114::1;-1:-1:-1::0;;;;;1056:48:114;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;1821:7:52;:22;7305:11:120::3;7291:25:::0;::::3;7283:50;;;::::0;-1:-1:-1;;;7283:50:120;;2555:2:181;7283:50:120::3;::::0;::::3;2537:21:181::0;2594:2;2574:18;;;2567:30;-1:-1:-1;;;2613:18:181;;;2606:42;2665:18;;7283:50:120::3;2353:336:181::0;7283:50:120::3;7361:10;7347:11;:24;7339:49;;;::::0;-1:-1:-1;;;7339:49:120;;2896:2:181;7339:49:120::3;::::0;::::3;2878:21:181::0;2935:2;2915:18;;;2908:30;-1:-1:-1;;;2954:18:181;;;2947:42;3006:18;;7339:49:120::3;2694:336:181::0;7339:49:120::3;7394:25;::::0;;;7425::::3;::::0;;;-1:-1:-1;;;;;7465:21:120;::::3;7457:46;;;::::0;-1:-1:-1;;;7457:46:120;;3237:2:181;7457:46:120::3;::::0;::::3;3219:21:181::0;3276:2;3256:18;;;3249:30;-1:-1:-1;;;3295:18:181;;;3288:42;3347:18;;7457:46:120::3;3035:336:181::0;7457:46:120::3;-1:-1:-1::0;;;;;;7509:35:120::3;;::::0;7551:11:::3;:26:::0;-1:-1:-1;1643:35:122::1;::::0;-1:-1:-1;1661:16:122;;-1:-1:-1;;1643:17:122::1;:35:::0;-1:-1:-1;;;1643:35:122:i:1;:::-;1160:523:::0;;;;;;;;;;422:3270;;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;3103:227:122:-;3182:35;3200:16;3182:17;:35::i;:::-;3251:15;;3228:57;;;-1:-1:-1;;;;;3251:15:122;;;3588:34:181;;3658:15;;;3653:2;3638:18;;3631:43;3228:57:122;;3523:18:181;3228:57:122;;;;;;;3291:15;:34;;-1:-1:-1;;;;;;3291:34:122;-1:-1:-1;;;;;3291:34:122;;;;;;;;;;3103:227::o;3334:356::-;3463:3;;3455:78;;-1:-1:-1;;;3455:78:122;;-1:-1:-1;;;;;3606:15:181;;;3455:78:122;;;3588:34:181;3438:14:122;3638:18:181;;;3631:43;;;3438:14:122;3455:48;;;;3523:18:181;;3455:78:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3565:13;;3544:43;;;-1:-1:-1;;;;;3565:13:122;;;3588:34:181;;3658:15;;;3653:2;3638:18;;3631:43;3438:95:122;;-1:-1:-1;3544:43:122;;3523:18:181;3544:43:122;;;;;;;3663:13;:22;;-1:-1:-1;;;;;;3663:22:122;-1:-1:-1;;;;;3663:22:122;;;;;;;;;;-1:-1:-1;3334:356:122:o;14:167:181:-;92:13;;145:10;134:22;;124:33;;114:61;;171:1;168;161:12;114:61;14:167;;;:::o;186:177::-;265:13;;-1:-1:-1;;;;;307:31:181;;297:42;;287:70;;353:1;350;343:12;368:904;517:6;525;533;541;549;557;565;573;581;589;642:3;630:9;621:7;617:23;613:33;610:53;;;659:1;656;649:12;610:53;682:39;711:9;682:39;:::i;:::-;672:49;;740:48;784:2;773:9;769:18;740:48;:::i;:::-;730:58;;807:49;852:2;841:9;837:18;807:49;:::i;:::-;797:59;;875:49;920:2;909:9;905:18;875:49;:::i;:::-;865:59;;943:50;988:3;977:9;973:19;943:50;:::i;:::-;933:60;;1033:3;1022:9;1018:19;1012:26;1002:36;;1078:3;1067:9;1063:19;1057:26;1047:36;;1123:3;1112:9;1108:19;1102:26;1092:36;;1147:50;1192:3;1181:9;1177:19;1147:50;:::i;:::-;1137:60;;1216:50;1261:3;1250:9;1246:19;1216:50;:::i;:::-;1206:60;;368:904;;;;;;;;;;;;;:::o;3685:208::-;3755:6;3808:2;3796:9;3787:7;3783:23;3779:32;3776:52;;;3824:1;3821;3814:12;3776:52;3847:40;3877:9;3847:40;:::i;:::-;3837:50;3685:208;-1:-1:-1;;;3685:208:181:o;:::-;422:3270:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@AMB_39042":{"entryPoint":null,"id":39042,"parameterSlots":0,"returnSlots":0},"@DOMAIN_39039":{"entryPoint":null,"id":39039,"parameterSlots":0,"returnSlots":0},"@MERKLE_39550":{"entryPoint":null,"id":39550,"parameterSlots":0,"returnSlots":0},"@MIRROR_DOMAIN_39048":{"entryPoint":null,"id":39048,"parameterSlots":0,"returnSlots":0},"@PROCESS_GAS_39553":{"entryPoint":null,"id":39553,"parameterSlots":0,"returnSlots":0},"@RESERVE_GAS_39556":{"entryPoint":null,"id":39556,"parameterSlots":0,"returnSlots":0},"@ROOT_MANAGER_39045":{"entryPoint":null,"id":39045,"parameterSlots":0,"returnSlots":0},"@_39157":{"entryPoint":null,"id":39157,"parameterSlots":0,"returnSlots":0},"@_msgSender_11496":{"entryPoint":null,"id":11496,"parameterSlots":0,"returnSlots":1},"@_nonReentrantAfter_10733":{"entryPoint":null,"id":10733,"parameterSlots":0,"returnSlots":0},"@_nonReentrantBefore_10725":{"entryPoint":6715,"id":10725,"parameterSlots":0,"returnSlots":0},"@_pause_10663":{"entryPoint":8355,"id":10663,"parameterSlots":0,"returnSlots":0},"@_processMessage_41175":{"entryPoint":6555,"id":41175,"parameterSlots":1,"returnSlots":0},"@_requireNotPaused_10636":{"entryPoint":5973,"id":10636,"parameterSlots":0,"returnSlots":0},"@_requirePaused_10647":{"entryPoint":6390,"id":10647,"parameterSlots":0,"returnSlots":0},"@_sendMessage_41146":{"entryPoint":6050,"id":41146,"parameterSlots":2,"returnSlots":0},"@_setAliasedSender_41223":{"entryPoint":10815,"id":41223,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_41195":{"entryPoint":7955,"id":41195,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":8500,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":8422,"id":49927,"parameterSlots":1,"returnSlots":0},"@_setRateLimitBlocks_49687":{"entryPoint":8671,"id":49687,"parameterSlots":1,"returnSlots":0},"@_unpause_10679":{"entryPoint":6470,"id":10679,"parameterSlots":0,"returnSlots":0},"@_verifySender_41103":{"entryPoint":8601,"id":41103,"parameterSlots":1,"returnSlots":1},"@acceptProposedOwner_49887":{"entryPoint":5114,"id":49887,"parameterSlots":0,"returnSlots":0},"@addSender_39706":{"entryPoint":4987,"id":39706,"parameterSlots":1,"returnSlots":0},"@addressToBytes32_50168":{"entryPoint":null,"id":50168,"parameterSlots":1,"returnSlots":1},"@aliasedSender_41014":{"entryPoint":null,"id":41014,"parameterSlots":0,"returnSlots":0},"@allowlistedSenders_39581":{"entryPoint":null,"id":39581,"parameterSlots":0,"returnSlots":0},"@body_49194":{"entryPoint":10557,"id":49194,"parameterSlots":1,"returnSlots":1},"@branchRoot_48998":{"entryPoint":9150,"id":48998,"parameterSlots":3,"returnSlots":1},"@build_50565":{"entryPoint":11212,"id":50565,"parameterSlots":3,"returnSlots":1},"@bytes32ToAddress_50187":{"entryPoint":null,"id":50187,"parameterSlots":1,"returnSlots":1},"@calculateMessageRoot_40253":{"entryPoint":6804,"id":40253,"parameterSlots":3,"returnSlots":1},"@clone_51141":{"entryPoint":10603,"id":51141,"parameterSlots":1,"returnSlots":1},"@crossChainSender_9767":{"entryPoint":11074,"id":9767,"parameterSlots":1,"returnSlots":1},"@delayBlocks_39546":{"entryPoint":null,"id":39546,"parameterSlots":0,"returnSlots":0},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@destination_49143":{"entryPoint":10384,"id":49143,"parameterSlots":1,"returnSlots":1},"@dispatch_39974":{"entryPoint":5510,"id":39974,"parameterSlots":3,"returnSlots":2},"@end_50683":{"entryPoint":12191,"id":50683,"parameterSlots":1,"returnSlots":1},"@excessivelySafeCall_50045":{"entryPoint":10676,"id":50045,"parameterSlots":5,"returnSlots":2},"@formatMessage_49044":{"entryPoint":8797,"id":49044,"parameterSlots":6,"returnSlots":1},"@home_39271":{"entryPoint":null,"id":39271,"parameterSlots":0,"returnSlots":1},"@indexUint_50882":{"entryPoint":11273,"id":50882,"parameterSlots":3,"returnSlots":1},"@index_50852":{"entryPoint":11338,"id":50852,"parameterSlots":3,"returnSlots":1},"@isCrossChain_9744":{"entryPoint":11972,"id":9744,"parameterSlots":1,"returnSlots":1},"@isNotValid_50403":{"entryPoint":12248,"id":50403,"parameterSlots":1,"returnSlots":1},"@isNull_50364":{"entryPoint":null,"id":50364,"parameterSlots":1,"returnSlots":1},"@isReplica_39286":{"entryPoint":null,"id":39286,"parameterSlots":1,"returnSlots":1},"@keccak_50951":{"entryPoint":10405,"id":50951,"parameterSlots":1,"returnSlots":1},"@lastSentBlock_49642":{"entryPoint":null,"id":49642,"parameterSlots":0,"returnSlots":0},"@leftMask_50342":{"entryPoint":null,"id":50342,"parameterSlots":1,"returnSlots":1},"@len_50665":{"entryPoint":null,"id":50665,"parameterSlots":1,"returnSlots":1},"@loc_50615":{"entryPoint":null,"id":50615,"parameterSlots":1,"returnSlots":1},"@localDomain_39855":{"entryPoint":null,"id":39855,"parameterSlots":0,"returnSlots":1},"@messages_39592":{"entryPoint":null,"id":39592,"parameterSlots":0,"returnSlots":0},"@mirrorConnector_39051":{"entryPoint":null,"id":39051,"parameterSlots":0,"returnSlots":0},"@nonce_49125":{"entryPoint":10515,"id":49125,"parameterSlots":1,"returnSlots":1},"@nonces_39586":{"entryPoint":null,"id":39586,"parameterSlots":0,"returnSlots":0},"@origin_49092":{"entryPoint":10495,"id":49092,"parameterSlots":1,"returnSlots":1},"@outboundRoot_39845":{"entryPoint":4017,"id":39845,"parameterSlots":0,"returnSlots":1},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@pause_38913":{"entryPoint":4525,"id":38913,"parameterSlots":0,"returnSlots":0},"@paused_10624":{"entryPoint":null,"id":10624,"parameterSlots":0,"returnSlots":1},"@pendingAggregateRoots_39561":{"entryPoint":null,"id":39561,"parameterSlots":0,"returnSlots":0},"@processMessage_41087":{"entryPoint":3112,"id":41087,"parameterSlots":1,"returnSlots":0},"@process_40427":{"entryPoint":7222,"id":40427,"parameterSlots":1,"returnSlots":1},"@proposeNewOwner_49841":{"entryPoint":4705,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@proveAndProcess_40115":{"entryPoint":3256,"id":40115,"parameterSlots":5,"returnSlots":0},"@proveMessageRoot_40306":{"entryPoint":6971,"id":40306,"parameterSlots":4,"returnSlots":0},"@provenAggregateRoots_39566":{"entryPoint":null,"id":39566,"parameterSlots":0,"returnSlots":0},"@provenMessageRoots_39571":{"entryPoint":null,"id":39571,"parameterSlots":0,"returnSlots":0},"@rateLimitBlocks_49639":{"entryPoint":null,"id":49639,"parameterSlots":0,"returnSlots":0},"@receiveAggregateRoot_40160":{"entryPoint":8853,"id":40160,"parameterSlots":1,"returnSlots":0},"@recipientAddress_49174":{"entryPoint":10478,"id":49174,"parameterSlots":1,"returnSlots":1},"@recipient_49158":{"entryPoint":11321,"id":49158,"parameterSlots":1,"returnSlots":1},"@ref_50591":{"entryPoint":10348,"id":50591,"parameterSlots":2,"returnSlots":1},"@removePendingAggregateRoot_39792":{"entryPoint":4279,"id":39792,"parameterSlots":1,"returnSlots":0},"@removeSender_39724":{"entryPoint":4863,"id":39724,"parameterSlots":1,"returnSlots":0},"@renounceOwnership_39834":{"entryPoint":4482,"id":39834,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@sendValue_11206":{"entryPoint":8069,"id":11206,"parameterSlots":2,"returnSlots":0},"@send_39906":{"entryPoint":2632,"id":39906,"parameterSlots":1,"returnSlots":0},"@sender_49107":{"entryPoint":10536,"id":49107,"parameterSlots":1,"returnSlots":1},"@sentMessageRoots_39576":{"entryPoint":null,"id":39576,"parameterSlots":0,"returnSlots":0},"@setDelayBlocks_39750":{"entryPoint":2462,"id":39750,"parameterSlots":1,"returnSlots":0},"@setMirrorConnector_39170":{"entryPoint":3962,"id":39170,"parameterSlots":1,"returnSlots":0},"@setRateLimitBlocks_39763":{"entryPoint":5458,"id":39763,"parameterSlots":1,"returnSlots":0},"@setWatcherManager_38881":{"entryPoint":5226,"id":38881,"parameterSlots":1,"returnSlots":0},"@slice_50729":{"entryPoint":11605,"id":50729,"parameterSlots":4,"returnSlots":1},"@typeOf_50601":{"entryPoint":null,"id":50601,"parameterSlots":1,"returnSlots":1},"@unpause_38893":{"entryPoint":3051,"id":38893,"parameterSlots":0,"returnSlots":0},"@unsafeBuildUnchecked_50530":{"entryPoint":12072,"id":50530,"parameterSlots":3,"returnSlots":1},"@unsafeCopyTo_51113":{"entryPoint":11729,"id":51113,"parameterSlots":2,"returnSlots":1},"@verifyAggregateRoot_40221":{"entryPoint":9996,"id":40221,"parameterSlots":1,"returnSlots":0},"@verifySender_39202":{"entryPoint":5441,"id":39202,"parameterSlots":1,"returnSlots":1},"@watcherManager_38824":{"entryPoint":null,"id":38824,"parameterSlots":0,"returnSlots":0},"@withdrawFunds_39824":{"entryPoint":4154,"id":39824,"parameterSlots":1,"returnSlots":0},"abi_decode_bytes":{"entryPoint":12355,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":12788,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":13815,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256":{"entryPoint":12611,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":13380,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32_fromMemory":{"entryPoint":13102,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_uint256_fromMemory":{"entryPoint":13468,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes_memory_ptr":{"entryPoint":12496,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":12308,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32":{"entryPoint":12842,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr":{"entryPoint":12869,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_uint32":{"entryPoint":12817,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_bytes":{"entryPoint":12992,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":13364,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":13725,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13570,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13692,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13036,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13504,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13551,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":13189,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":13127,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed":{"entryPoint":12571,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d61267da0fbec4006445194cefd99ca77e8e2e85eead97f9e0e59557740611c0__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13645,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"access_calldata_tail_t_bytes_calldata_ptr":{"entryPoint":13286,"id":null,"parameterSlots":2,"returnSlots":2},"access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr":{"entryPoint":13253,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":13083,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint8":{"entryPoint":13869,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":13414,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint8":{"entryPoint":13844,"id":null,"parameterSlots":2,"returnSlots":1},"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32":{"entryPoint":13606,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":12956,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint32":{"entryPoint":13433,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":13061,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":12549,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":13231,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":12333,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":12767,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:25405:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"113:93:181","statements":[{"nodeType":"YulAssignment","src":"123:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"135:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"146:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"131:3:181"},"nodeType":"YulFunctionCall","src":"131:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"123:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"165:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"180:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"188:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"176:3:181"},"nodeType":"YulFunctionCall","src":"176:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"158:6:181"},"nodeType":"YulFunctionCall","src":"158:42:181"},"nodeType":"YulExpressionStatement","src":"158:42:181"}]},"name":"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"82:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"93:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"104:4:181","type":""}],"src":"14:192:181"},{"body":{"nodeType":"YulBlock","src":"281:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"327:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"336:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"339:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"329:6:181"},"nodeType":"YulFunctionCall","src":"329:12:181"},"nodeType":"YulExpressionStatement","src":"329:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"302:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"311:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"298:3:181"},"nodeType":"YulFunctionCall","src":"298:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"323:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"294:3:181"},"nodeType":"YulFunctionCall","src":"294:32:181"},"nodeType":"YulIf","src":"291:52:181"},{"nodeType":"YulAssignment","src":"352:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"375:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"362:12:181"},"nodeType":"YulFunctionCall","src":"362:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"352:6:181"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"247:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"258:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"270:6:181","type":""}],"src":"211:180:181"},{"body":{"nodeType":"YulBlock","src":"497:76:181","statements":[{"nodeType":"YulAssignment","src":"507:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"519:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"530:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"515:3:181"},"nodeType":"YulFunctionCall","src":"515:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"507:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"549:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"560:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"542:6:181"},"nodeType":"YulFunctionCall","src":"542:25:181"},"nodeType":"YulExpressionStatement","src":"542:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"466:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"477:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"488:4:181","type":""}],"src":"396:177:181"},{"body":{"nodeType":"YulBlock","src":"610:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"627:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"634:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"639:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"630:3:181"},"nodeType":"YulFunctionCall","src":"630:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"620:6:181"},"nodeType":"YulFunctionCall","src":"620:31:181"},"nodeType":"YulExpressionStatement","src":"620:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"667:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"670:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"660:6:181"},"nodeType":"YulFunctionCall","src":"660:15:181"},"nodeType":"YulExpressionStatement","src":"660:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"691:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"694:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"684:6:181"},"nodeType":"YulFunctionCall","src":"684:15:181"},"nodeType":"YulExpressionStatement","src":"684:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"578:127:181"},{"body":{"nodeType":"YulBlock","src":"762:666:181","statements":[{"body":{"nodeType":"YulBlock","src":"811:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"820:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"823:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"813:6:181"},"nodeType":"YulFunctionCall","src":"813:12:181"},"nodeType":"YulExpressionStatement","src":"813:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"790:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"798:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"786:3:181"},"nodeType":"YulFunctionCall","src":"786:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"805:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"782:3:181"},"nodeType":"YulFunctionCall","src":"782:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"775:6:181"},"nodeType":"YulFunctionCall","src":"775:35:181"},"nodeType":"YulIf","src":"772:55:181"},{"nodeType":"YulVariableDeclaration","src":"836:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"859:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"846:12:181"},"nodeType":"YulFunctionCall","src":"846:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"840:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"875:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"885:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"879:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"926:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"928:16:181"},"nodeType":"YulFunctionCall","src":"928:18:181"},"nodeType":"YulExpressionStatement","src":"928:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"918:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"922:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"915:2:181"},"nodeType":"YulFunctionCall","src":"915:10:181"},"nodeType":"YulIf","src":"912:36:181"},{"nodeType":"YulVariableDeclaration","src":"957:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"971:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"967:3:181"},"nodeType":"YulFunctionCall","src":"967:7:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"961:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"983:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1003:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"997:5:181"},"nodeType":"YulFunctionCall","src":"997:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"987:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1015:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1037:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1061:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1065:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1057:3:181"},"nodeType":"YulFunctionCall","src":"1057:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1072:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1053:3:181"},"nodeType":"YulFunctionCall","src":"1053:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"1077:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1049:3:181"},"nodeType":"YulFunctionCall","src":"1049:31:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1082:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1045:3:181"},"nodeType":"YulFunctionCall","src":"1045:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1033:3:181"},"nodeType":"YulFunctionCall","src":"1033:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1019:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1145:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1147:16:181"},"nodeType":"YulFunctionCall","src":"1147:18:181"},"nodeType":"YulExpressionStatement","src":"1147:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1104:10:181"},{"name":"_2","nodeType":"YulIdentifier","src":"1116:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1101:2:181"},"nodeType":"YulFunctionCall","src":"1101:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1124:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1136:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1121:2:181"},"nodeType":"YulFunctionCall","src":"1121:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1098:2:181"},"nodeType":"YulFunctionCall","src":"1098:46:181"},"nodeType":"YulIf","src":"1095:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1183:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1187:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1176:6:181"},"nodeType":"YulFunctionCall","src":"1176:22:181"},"nodeType":"YulExpressionStatement","src":"1176:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1214:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1222:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1207:6:181"},"nodeType":"YulFunctionCall","src":"1207:18:181"},"nodeType":"YulExpressionStatement","src":"1207:18:181"},{"body":{"nodeType":"YulBlock","src":"1273:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1282:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1285:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1275:6:181"},"nodeType":"YulFunctionCall","src":"1275:12:181"},"nodeType":"YulExpressionStatement","src":"1275:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1248:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1256:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1244:3:181"},"nodeType":"YulFunctionCall","src":"1244:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1261:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1240:3:181"},"nodeType":"YulFunctionCall","src":"1240:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"1268:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1237:2:181"},"nodeType":"YulFunctionCall","src":"1237:35:181"},"nodeType":"YulIf","src":"1234:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1315:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1323:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1311:3:181"},"nodeType":"YulFunctionCall","src":"1311:17:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1334:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1342:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1330:3:181"},"nodeType":"YulFunctionCall","src":"1330:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1349:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1298:12:181"},"nodeType":"YulFunctionCall","src":"1298:54:181"},"nodeType":"YulExpressionStatement","src":"1298:54:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1376:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1384:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1372:3:181"},"nodeType":"YulFunctionCall","src":"1372:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1389:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1368:3:181"},"nodeType":"YulFunctionCall","src":"1368:26:181"},{"kind":"number","nodeType":"YulLiteral","src":"1396:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1361:6:181"},"nodeType":"YulFunctionCall","src":"1361:37:181"},"nodeType":"YulExpressionStatement","src":"1361:37:181"},{"nodeType":"YulAssignment","src":"1407:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1416:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1407:5:181"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"736:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"744:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"752:5:181","type":""}],"src":"710:718:181"},{"body":{"nodeType":"YulBlock","src":"1512:241:181","statements":[{"body":{"nodeType":"YulBlock","src":"1558:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1567:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1570:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1560:6:181"},"nodeType":"YulFunctionCall","src":"1560:12:181"},"nodeType":"YulExpressionStatement","src":"1560:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1533:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1542:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1529:3:181"},"nodeType":"YulFunctionCall","src":"1529:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1554:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1525:3:181"},"nodeType":"YulFunctionCall","src":"1525:32:181"},"nodeType":"YulIf","src":"1522:52:181"},{"nodeType":"YulVariableDeclaration","src":"1583:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1610:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1597:12:181"},"nodeType":"YulFunctionCall","src":"1597:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1587:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1663:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1672:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1675:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1665:6:181"},"nodeType":"YulFunctionCall","src":"1665:12:181"},"nodeType":"YulExpressionStatement","src":"1665:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1635:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1643:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1632:2:181"},"nodeType":"YulFunctionCall","src":"1632:30:181"},"nodeType":"YulIf","src":"1629:50:181"},{"nodeType":"YulAssignment","src":"1688:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1719:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1730:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1715:3:181"},"nodeType":"YulFunctionCall","src":"1715:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1739:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"1698:16:181"},"nodeType":"YulFunctionCall","src":"1698:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1688:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1478:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1489:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1501:6:181","type":""}],"src":"1433:320:181"},{"body":{"nodeType":"YulBlock","src":"1828:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"1874:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1883:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1886:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1876:6:181"},"nodeType":"YulFunctionCall","src":"1876:12:181"},"nodeType":"YulExpressionStatement","src":"1876:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1849:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1858:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1845:3:181"},"nodeType":"YulFunctionCall","src":"1845:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1870:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1841:3:181"},"nodeType":"YulFunctionCall","src":"1841:32:181"},"nodeType":"YulIf","src":"1838:52:181"},{"nodeType":"YulAssignment","src":"1899:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1922:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1909:12:181"},"nodeType":"YulFunctionCall","src":"1909:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1899:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1794:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1805:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1817:6:181","type":""}],"src":"1758:180:181"},{"body":{"nodeType":"YulBlock","src":"1975:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1992:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1999:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2004:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1995:3:181"},"nodeType":"YulFunctionCall","src":"1995:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1985:6:181"},"nodeType":"YulFunctionCall","src":"1985:31:181"},"nodeType":"YulExpressionStatement","src":"1985:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2032:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2035:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2025:6:181"},"nodeType":"YulFunctionCall","src":"2025:15:181"},"nodeType":"YulExpressionStatement","src":"2025:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2056:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2059:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2049:6:181"},"nodeType":"YulFunctionCall","src":"2049:15:181"},"nodeType":"YulExpressionStatement","src":"2049:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"1943:127:181"},{"body":{"nodeType":"YulBlock","src":"2193:229:181","statements":[{"nodeType":"YulAssignment","src":"2203:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2215:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2226:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2211:3:181"},"nodeType":"YulFunctionCall","src":"2211:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2203:4:181"}]},{"body":{"nodeType":"YulBlock","src":"2271:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2292:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2299:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2304:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2295:3:181"},"nodeType":"YulFunctionCall","src":"2295:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2285:6:181"},"nodeType":"YulFunctionCall","src":"2285:31:181"},"nodeType":"YulExpressionStatement","src":"2285:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2336:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2339:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2329:6:181"},"nodeType":"YulFunctionCall","src":"2329:15:181"},"nodeType":"YulExpressionStatement","src":"2329:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2364:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2367:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2357:6:181"},"nodeType":"YulFunctionCall","src":"2357:15:181"},"nodeType":"YulExpressionStatement","src":"2357:15:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2251:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2259:1:181","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2248:2:181"},"nodeType":"YulFunctionCall","src":"2248:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2241:6:181"},"nodeType":"YulFunctionCall","src":"2241:21:181"},"nodeType":"YulIf","src":"2238:144:181"},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2398:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"2409:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2391:6:181"},"nodeType":"YulFunctionCall","src":"2391:25:181"},"nodeType":"YulExpressionStatement","src":"2391:25:181"}]},"name":"abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2162:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2173:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2184:4:181","type":""}],"src":"2075:347:181"},{"body":{"nodeType":"YulBlock","src":"2522:92:181","statements":[{"nodeType":"YulAssignment","src":"2532:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2544:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2555:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2540:3:181"},"nodeType":"YulFunctionCall","src":"2540:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2532:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2574:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2599:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2592:6:181"},"nodeType":"YulFunctionCall","src":"2592:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2585:6:181"},"nodeType":"YulFunctionCall","src":"2585:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2567:6:181"},"nodeType":"YulFunctionCall","src":"2567:41:181"},"nodeType":"YulExpressionStatement","src":"2567:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2491:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2502:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2513:4:181","type":""}],"src":"2427:187:181"},{"body":{"nodeType":"YulBlock","src":"2720:102:181","statements":[{"nodeType":"YulAssignment","src":"2730:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2742:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2753:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2738:3:181"},"nodeType":"YulFunctionCall","src":"2738:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2730:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2772:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2787:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2803:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2808:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2799:3:181"},"nodeType":"YulFunctionCall","src":"2799:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2812:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2795:3:181"},"nodeType":"YulFunctionCall","src":"2795:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2783:3:181"},"nodeType":"YulFunctionCall","src":"2783:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2765:6:181"},"nodeType":"YulFunctionCall","src":"2765:51:181"},"nodeType":"YulExpressionStatement","src":"2765:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2689:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2700:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2711:4:181","type":""}],"src":"2619:203:181"},{"body":{"nodeType":"YulBlock","src":"3035:724:181","statements":[{"body":{"nodeType":"YulBlock","src":"3083:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3092:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3095:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3085:6:181"},"nodeType":"YulFunctionCall","src":"3085:12:181"},"nodeType":"YulExpressionStatement","src":"3085:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3056:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3065:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3052:3:181"},"nodeType":"YulFunctionCall","src":"3052:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3077:4:181","type":"","value":"1120"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3048:3:181"},"nodeType":"YulFunctionCall","src":"3048:34:181"},"nodeType":"YulIf","src":"3045:54:181"},{"nodeType":"YulVariableDeclaration","src":"3108:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3135:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3122:12:181"},"nodeType":"YulFunctionCall","src":"3122:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3112:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3154:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3164:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3158:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3209:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3218:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3221:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3211:6:181"},"nodeType":"YulFunctionCall","src":"3211:12:181"},"nodeType":"YulExpressionStatement","src":"3211:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3197:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3205:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3194:2:181"},"nodeType":"YulFunctionCall","src":"3194:14:181"},"nodeType":"YulIf","src":"3191:34:181"},{"nodeType":"YulVariableDeclaration","src":"3234:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3248:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"3259:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3244:3:181"},"nodeType":"YulFunctionCall","src":"3244:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"3238:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3314:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3323:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3326:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3316:6:181"},"nodeType":"YulFunctionCall","src":"3316:12:181"},"nodeType":"YulExpressionStatement","src":"3316:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3293:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3297:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3289:3:181"},"nodeType":"YulFunctionCall","src":"3289:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3304:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3285:3:181"},"nodeType":"YulFunctionCall","src":"3285:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3278:6:181"},"nodeType":"YulFunctionCall","src":"3278:35:181"},"nodeType":"YulIf","src":"3275:55:181"},{"nodeType":"YulVariableDeclaration","src":"3339:30:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3366:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3353:12:181"},"nodeType":"YulFunctionCall","src":"3353:16:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3343:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3396:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3405:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3408:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3398:6:181"},"nodeType":"YulFunctionCall","src":"3398:12:181"},"nodeType":"YulExpressionStatement","src":"3398:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3384:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3392:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3381:2:181"},"nodeType":"YulFunctionCall","src":"3381:14:181"},"nodeType":"YulIf","src":"3378:34:181"},{"body":{"nodeType":"YulBlock","src":"3472:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3481:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3484:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3474:6:181"},"nodeType":"YulFunctionCall","src":"3474:12:181"},"nodeType":"YulExpressionStatement","src":"3474:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3435:2:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3443:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"3446:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3439:3:181"},"nodeType":"YulFunctionCall","src":"3439:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3431:3:181"},"nodeType":"YulFunctionCall","src":"3431:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3456:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3427:3:181"},"nodeType":"YulFunctionCall","src":"3427:34:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3463:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3424:2:181"},"nodeType":"YulFunctionCall","src":"3424:47:181"},"nodeType":"YulIf","src":"3421:67:181"},{"nodeType":"YulAssignment","src":"3497:23:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3511:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3515:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3507:3:181"},"nodeType":"YulFunctionCall","src":"3507:13:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3497:6:181"}]},{"nodeType":"YulAssignment","src":"3529:16:181","value":{"name":"length","nodeType":"YulIdentifier","src":"3539:6:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3529:6:181"}]},{"nodeType":"YulAssignment","src":"3554:44:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3581:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3592:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3577:3:181"},"nodeType":"YulFunctionCall","src":"3577:20:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3564:12:181"},"nodeType":"YulFunctionCall","src":"3564:34:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3554:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3607:30:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3621:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3632:4:181","type":"","value":"1088"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3617:3:181"},"nodeType":"YulFunctionCall","src":"3617:20:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"3611:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3665:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3674:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3677:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3667:6:181"},"nodeType":"YulFunctionCall","src":"3667:12:181"},"nodeType":"YulExpressionStatement","src":"3667:12:181"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3652:2:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3656:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3649:2:181"},"nodeType":"YulFunctionCall","src":"3649:15:181"},"nodeType":"YulIf","src":"3646:35:181"},{"nodeType":"YulAssignment","src":"3690:28:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3704:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3715:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3700:3:181"},"nodeType":"YulFunctionCall","src":"3700:18:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3690:6:181"}]},{"nodeType":"YulAssignment","src":"3727:26:181","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3750:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3737:12:181"},"nodeType":"YulFunctionCall","src":"3737:16:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3727:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2969:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2980:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2992:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3000:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3008:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3016:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3024:6:181","type":""}],"src":"2827:932:181"},{"body":{"nodeType":"YulBlock","src":"3809:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"3873:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3882:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3885:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3875:6:181"},"nodeType":"YulFunctionCall","src":"3875:12:181"},"nodeType":"YulExpressionStatement","src":"3875:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3832:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3843:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3858:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3863:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3854:3:181"},"nodeType":"YulFunctionCall","src":"3854:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3867:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3850:3:181"},"nodeType":"YulFunctionCall","src":"3850:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3839:3:181"},"nodeType":"YulFunctionCall","src":"3839:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3829:2:181"},"nodeType":"YulFunctionCall","src":"3829:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3822:6:181"},"nodeType":"YulFunctionCall","src":"3822:50:181"},"nodeType":"YulIf","src":"3819:70:181"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3798:5:181","type":""}],"src":"3764:131:181"},{"body":{"nodeType":"YulBlock","src":"3970:177:181","statements":[{"body":{"nodeType":"YulBlock","src":"4016:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4025:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4028:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4018:6:181"},"nodeType":"YulFunctionCall","src":"4018:12:181"},"nodeType":"YulExpressionStatement","src":"4018:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3991:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"4000:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3987:3:181"},"nodeType":"YulFunctionCall","src":"3987:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"4012:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3983:3:181"},"nodeType":"YulFunctionCall","src":"3983:32:181"},"nodeType":"YulIf","src":"3980:52:181"},{"nodeType":"YulVariableDeclaration","src":"4041:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4067:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4054:12:181"},"nodeType":"YulFunctionCall","src":"4054:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4045:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4111:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4086:24:181"},"nodeType":"YulFunctionCall","src":"4086:31:181"},"nodeType":"YulExpressionStatement","src":"4086:31:181"},{"nodeType":"YulAssignment","src":"4126:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"4136:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4126:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3936:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3947:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3959:6:181","type":""}],"src":"3900:247:181"},{"body":{"nodeType":"YulBlock","src":"4253:76:181","statements":[{"nodeType":"YulAssignment","src":"4263:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4275:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4286:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4271:3:181"},"nodeType":"YulFunctionCall","src":"4271:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4263:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4305:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"4316:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4298:6:181"},"nodeType":"YulFunctionCall","src":"4298:25:181"},"nodeType":"YulExpressionStatement","src":"4298:25:181"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4222:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4233:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4244:4:181","type":""}],"src":"4152:177:181"},{"body":{"nodeType":"YulBlock","src":"4452:102:181","statements":[{"nodeType":"YulAssignment","src":"4462:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4474:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4485:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4470:3:181"},"nodeType":"YulFunctionCall","src":"4470:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4462:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4504:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4519:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4535:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4540:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4531:3:181"},"nodeType":"YulFunctionCall","src":"4531:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4544:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4527:3:181"},"nodeType":"YulFunctionCall","src":"4527:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4515:3:181"},"nodeType":"YulFunctionCall","src":"4515:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4497:6:181"},"nodeType":"YulFunctionCall","src":"4497:51:181"},"nodeType":"YulExpressionStatement","src":"4497:51:181"}]},"name":"abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4421:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4432:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4443:4:181","type":""}],"src":"4334:220:181"},{"body":{"nodeType":"YulBlock","src":"4687:102:181","statements":[{"nodeType":"YulAssignment","src":"4697:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4709:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4720:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4705:3:181"},"nodeType":"YulFunctionCall","src":"4705:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4697:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4739:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4754:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4770:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4775:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4766:3:181"},"nodeType":"YulFunctionCall","src":"4766:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4779:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4762:3:181"},"nodeType":"YulFunctionCall","src":"4762:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4750:3:181"},"nodeType":"YulFunctionCall","src":"4750:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4732:6:181"},"nodeType":"YulFunctionCall","src":"4732:51:181"},"nodeType":"YulExpressionStatement","src":"4732:51:181"}]},"name":"abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4656:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4667:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4678:4:181","type":""}],"src":"4559:230:181"},{"body":{"nodeType":"YulBlock","src":"4919:102:181","statements":[{"nodeType":"YulAssignment","src":"4929:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4941:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4952:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4937:3:181"},"nodeType":"YulFunctionCall","src":"4937:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4929:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4971:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4986:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5002:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5007:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4998:3:181"},"nodeType":"YulFunctionCall","src":"4998:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5011:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4994:3:181"},"nodeType":"YulFunctionCall","src":"4994:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4982:3:181"},"nodeType":"YulFunctionCall","src":"4982:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4964:6:181"},"nodeType":"YulFunctionCall","src":"4964:51:181"},"nodeType":"YulExpressionStatement","src":"4964:51:181"}]},"name":"abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4888:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4899:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4910:4:181","type":""}],"src":"4794:227:181"},{"body":{"nodeType":"YulBlock","src":"5074:115:181","statements":[{"nodeType":"YulAssignment","src":"5084:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5106:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5093:12:181"},"nodeType":"YulFunctionCall","src":"5093:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"5084:5:181"}]},{"body":{"nodeType":"YulBlock","src":"5167:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5176:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5179:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5169:6:181"},"nodeType":"YulFunctionCall","src":"5169:12:181"},"nodeType":"YulExpressionStatement","src":"5169:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5135:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5146:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5153:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5142:3:181"},"nodeType":"YulFunctionCall","src":"5142:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5132:2:181"},"nodeType":"YulFunctionCall","src":"5132:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5125:6:181"},"nodeType":"YulFunctionCall","src":"5125:41:181"},"nodeType":"YulIf","src":"5122:61:181"}]},"name":"abi_decode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"5053:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"5064:5:181","type":""}],"src":"5026:163:181"},{"body":{"nodeType":"YulBlock","src":"5263:115:181","statements":[{"body":{"nodeType":"YulBlock","src":"5309:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5318:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5321:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5311:6:181"},"nodeType":"YulFunctionCall","src":"5311:12:181"},"nodeType":"YulExpressionStatement","src":"5311:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5284:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5293:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5280:3:181"},"nodeType":"YulFunctionCall","src":"5280:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5305:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5276:3:181"},"nodeType":"YulFunctionCall","src":"5276:32:181"},"nodeType":"YulIf","src":"5273:52:181"},{"nodeType":"YulAssignment","src":"5334:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5362:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"5344:17:181"},"nodeType":"YulFunctionCall","src":"5344:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5334:6:181"}]}]},"name":"abi_decode_tuple_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5229:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5240:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5252:6:181","type":""}],"src":"5194:184:181"},{"body":{"nodeType":"YulBlock","src":"5495:348:181","statements":[{"body":{"nodeType":"YulBlock","src":"5541:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5550:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5553:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5543:6:181"},"nodeType":"YulFunctionCall","src":"5543:12:181"},"nodeType":"YulExpressionStatement","src":"5543:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5516:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5525:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5512:3:181"},"nodeType":"YulFunctionCall","src":"5512:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5537:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5508:3:181"},"nodeType":"YulFunctionCall","src":"5508:32:181"},"nodeType":"YulIf","src":"5505:52:181"},{"nodeType":"YulAssignment","src":"5566:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5594:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"5576:17:181"},"nodeType":"YulFunctionCall","src":"5576:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5566:6:181"}]},{"nodeType":"YulAssignment","src":"5613:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5640:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5651:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5636:3:181"},"nodeType":"YulFunctionCall","src":"5636:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5623:12:181"},"nodeType":"YulFunctionCall","src":"5623:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5613:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"5664:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5695:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5706:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5691:3:181"},"nodeType":"YulFunctionCall","src":"5691:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5678:12:181"},"nodeType":"YulFunctionCall","src":"5678:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"5668:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5753:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5762:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5765:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5755:6:181"},"nodeType":"YulFunctionCall","src":"5755:12:181"},"nodeType":"YulExpressionStatement","src":"5755:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5725:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5733:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5722:2:181"},"nodeType":"YulFunctionCall","src":"5722:30:181"},"nodeType":"YulIf","src":"5719:50:181"},{"nodeType":"YulAssignment","src":"5778:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5809:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"5820:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5805:3:181"},"nodeType":"YulFunctionCall","src":"5805:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5829:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"5788:16:181"},"nodeType":"YulFunctionCall","src":"5788:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5778:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5445:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5456:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5468:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5476:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5484:6:181","type":""}],"src":"5383:460:181"},{"body":{"nodeType":"YulBlock","src":"5914:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"5924:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"5933:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"5928:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5993:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6018:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"6023:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6014:3:181"},"nodeType":"YulFunctionCall","src":"6014:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"6037:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"6042:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6033:3:181"},"nodeType":"YulFunctionCall","src":"6033:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6027:5:181"},"nodeType":"YulFunctionCall","src":"6027:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6007:6:181"},"nodeType":"YulFunctionCall","src":"6007:39:181"},"nodeType":"YulExpressionStatement","src":"6007:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5954:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"5957:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5951:2:181"},"nodeType":"YulFunctionCall","src":"5951:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5965:19:181","statements":[{"nodeType":"YulAssignment","src":"5967:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5976:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"5979:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5972:3:181"},"nodeType":"YulFunctionCall","src":"5972:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"5967:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"5947:3:181","statements":[]},"src":"5943:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6076:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"6081:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6072:3:181"},"nodeType":"YulFunctionCall","src":"6072:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"6090:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6065:6:181"},"nodeType":"YulFunctionCall","src":"6065:27:181"},"nodeType":"YulExpressionStatement","src":"6065:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"5892:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"5897:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"5902:6:181","type":""}],"src":"5848:250:181"},{"body":{"nodeType":"YulBlock","src":"6152:221:181","statements":[{"nodeType":"YulVariableDeclaration","src":"6162:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6182:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6176:5:181"},"nodeType":"YulFunctionCall","src":"6176:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"6166:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6204:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"6209:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6197:6:181"},"nodeType":"YulFunctionCall","src":"6197:19:181"},"nodeType":"YulExpressionStatement","src":"6197:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6264:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"6271:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6260:3:181"},"nodeType":"YulFunctionCall","src":"6260:16:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6282:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"6287:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6278:3:181"},"nodeType":"YulFunctionCall","src":"6278:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"6294:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"6225:34:181"},"nodeType":"YulFunctionCall","src":"6225:76:181"},"nodeType":"YulExpressionStatement","src":"6225:76:181"},{"nodeType":"YulAssignment","src":"6310:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6325:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6338:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6346:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6334:3:181"},"nodeType":"YulFunctionCall","src":"6334:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6355:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6351:3:181"},"nodeType":"YulFunctionCall","src":"6351:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6330:3:181"},"nodeType":"YulFunctionCall","src":"6330:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6321:3:181"},"nodeType":"YulFunctionCall","src":"6321:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"6362:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6317:3:181"},"nodeType":"YulFunctionCall","src":"6317:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"6310:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"6129:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"6136:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"6144:3:181","type":""}],"src":"6103:270:181"},{"body":{"nodeType":"YulBlock","src":"6525:141:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6542:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"6553:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6535:6:181"},"nodeType":"YulFunctionCall","src":"6535:25:181"},"nodeType":"YulExpressionStatement","src":"6535:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6580:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6591:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6576:3:181"},"nodeType":"YulFunctionCall","src":"6576:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6596:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6569:6:181"},"nodeType":"YulFunctionCall","src":"6569:30:181"},"nodeType":"YulExpressionStatement","src":"6569:30:181"},{"nodeType":"YulAssignment","src":"6608:52:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6633:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6645:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6656:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6641:3:181"},"nodeType":"YulFunctionCall","src":"6641:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"6616:16:181"},"nodeType":"YulFunctionCall","src":"6616:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6608:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6486:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6497:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6505:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6516:4:181","type":""}],"src":"6378:288:181"},{"body":{"nodeType":"YulBlock","src":"6845:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6862:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6873:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6855:6:181"},"nodeType":"YulFunctionCall","src":"6855:21:181"},"nodeType":"YulExpressionStatement","src":"6855:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6896:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6907:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6892:3:181"},"nodeType":"YulFunctionCall","src":"6892:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6912:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6885:6:181"},"nodeType":"YulFunctionCall","src":"6885:30:181"},"nodeType":"YulExpressionStatement","src":"6885:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6935:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6946:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6931:3:181"},"nodeType":"YulFunctionCall","src":"6931:18:181"},{"hexValue":"2164656c6179426c6f636b73","kind":"string","nodeType":"YulLiteral","src":"6951:14:181","type":"","value":"!delayBlocks"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6924:6:181"},"nodeType":"YulFunctionCall","src":"6924:42:181"},"nodeType":"YulExpressionStatement","src":"6924:42:181"},{"nodeType":"YulAssignment","src":"6975:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6987:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6998:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6983:3:181"},"nodeType":"YulFunctionCall","src":"6983:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6975:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6822:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6836:4:181","type":""}],"src":"6671:336:181"},{"body":{"nodeType":"YulBlock","src":"7044:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7061:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7068:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"7073:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7064:3:181"},"nodeType":"YulFunctionCall","src":"7064:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7054:6:181"},"nodeType":"YulFunctionCall","src":"7054:31:181"},"nodeType":"YulExpressionStatement","src":"7054:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7101:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7104:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7094:6:181"},"nodeType":"YulFunctionCall","src":"7094:15:181"},"nodeType":"YulExpressionStatement","src":"7094:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7125:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7128:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7118:6:181"},"nodeType":"YulFunctionCall","src":"7118:15:181"},"nodeType":"YulExpressionStatement","src":"7118:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"7012:127:181"},{"body":{"nodeType":"YulBlock","src":"7192:77:181","statements":[{"nodeType":"YulAssignment","src":"7202:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7213:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"7216:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7209:3:181"},"nodeType":"YulFunctionCall","src":"7209:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"7202:3:181"}]},{"body":{"nodeType":"YulBlock","src":"7241:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7243:16:181"},"nodeType":"YulFunctionCall","src":"7243:18:181"},"nodeType":"YulExpressionStatement","src":"7243:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7233:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"7236:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7230:2:181"},"nodeType":"YulFunctionCall","src":"7230:10:181"},"nodeType":"YulIf","src":"7227:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"7175:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"7178:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"7184:3:181","type":""}],"src":"7144:125:181"},{"body":{"nodeType":"YulBlock","src":"7355:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"7401:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7410:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7413:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7403:6:181"},"nodeType":"YulFunctionCall","src":"7403:12:181"},"nodeType":"YulExpressionStatement","src":"7403:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7376:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7385:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7372:3:181"},"nodeType":"YulFunctionCall","src":"7372:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7397:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7368:3:181"},"nodeType":"YulFunctionCall","src":"7368:32:181"},"nodeType":"YulIf","src":"7365:52:181"},{"nodeType":"YulAssignment","src":"7426:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7442:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7436:5:181"},"nodeType":"YulFunctionCall","src":"7436:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7426:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7321:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7332:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7344:6:181","type":""}],"src":"7274:184:181"},{"body":{"nodeType":"YulBlock","src":"7637:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7654:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7665:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7647:6:181"},"nodeType":"YulFunctionCall","src":"7647:21:181"},"nodeType":"YulExpressionStatement","src":"7647:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7688:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7699:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7684:3:181"},"nodeType":"YulFunctionCall","src":"7684:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7704:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7677:6:181"},"nodeType":"YulFunctionCall","src":"7677:30:181"},"nodeType":"YulExpressionStatement","src":"7677:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7727:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7738:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7723:3:181"},"nodeType":"YulFunctionCall","src":"7723:18:181"},{"hexValue":"726f6f7420616c72656164792073656e74","kind":"string","nodeType":"YulLiteral","src":"7743:19:181","type":"","value":"root already sent"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7716:6:181"},"nodeType":"YulFunctionCall","src":"7716:47:181"},"nodeType":"YulExpressionStatement","src":"7716:47:181"},{"nodeType":"YulAssignment","src":"7772:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7784:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7795:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7780:3:181"},"nodeType":"YulFunctionCall","src":"7780:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7772:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7614:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7628:4:181","type":""}],"src":"7463:341:181"},{"body":{"nodeType":"YulBlock","src":"7928:63:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7945:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"7950:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7938:6:181"},"nodeType":"YulFunctionCall","src":"7938:19:181"},"nodeType":"YulExpressionStatement","src":"7938:19:181"},{"nodeType":"YulAssignment","src":"7966:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7977:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"7982:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7973:3:181"},"nodeType":"YulFunctionCall","src":"7973:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"7966:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"7904:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7909:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"7920:3:181","type":""}],"src":"7809:182:181"},{"body":{"nodeType":"YulBlock","src":"8189:281:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8206:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8217:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8199:6:181"},"nodeType":"YulFunctionCall","src":"8199:21:181"},"nodeType":"YulExpressionStatement","src":"8199:21:181"},{"nodeType":"YulVariableDeclaration","src":"8229:58:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8260:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8272:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8283:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8268:3:181"},"nodeType":"YulFunctionCall","src":"8268:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"8243:16:181"},"nodeType":"YulFunctionCall","src":"8243:44:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"8233:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8307:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8318:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8303:3:181"},"nodeType":"YulFunctionCall","src":"8303:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"8327:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8335:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8323:3:181"},"nodeType":"YulFunctionCall","src":"8323:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8296:6:181"},"nodeType":"YulFunctionCall","src":"8296:50:181"},"nodeType":"YulExpressionStatement","src":"8296:50:181"},{"nodeType":"YulAssignment","src":"8355:40:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"8380:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"8388:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"8363:16:181"},"nodeType":"YulFunctionCall","src":"8363:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8355:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8415:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8426:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8411:3:181"},"nodeType":"YulFunctionCall","src":"8411:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"8435:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8451:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"8456:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8447:3:181"},"nodeType":"YulFunctionCall","src":"8447:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"8460:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8443:3:181"},"nodeType":"YulFunctionCall","src":"8443:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8431:3:181"},"nodeType":"YulFunctionCall","src":"8431:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8404:6:181"},"nodeType":"YulFunctionCall","src":"8404:60:181"},"nodeType":"YulExpressionStatement","src":"8404:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8142:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8153:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8161:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8169:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8180:4:181","type":""}],"src":"7996:474:181"},{"body":{"nodeType":"YulBlock","src":"8649:164:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8666:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8677:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8659:6:181"},"nodeType":"YulFunctionCall","src":"8659:21:181"},"nodeType":"YulExpressionStatement","src":"8659:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8700:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8711:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8696:3:181"},"nodeType":"YulFunctionCall","src":"8696:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8716:2:181","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8689:6:181"},"nodeType":"YulFunctionCall","src":"8689:30:181"},"nodeType":"YulExpressionStatement","src":"8689:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8739:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8750:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8735:3:181"},"nodeType":"YulFunctionCall","src":"8735:18:181"},{"hexValue":"21616c696173656453656e646572","kind":"string","nodeType":"YulLiteral","src":"8755:16:181","type":"","value":"!aliasedSender"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8728:6:181"},"nodeType":"YulFunctionCall","src":"8728:44:181"},"nodeType":"YulExpressionStatement","src":"8728:44:181"},{"nodeType":"YulAssignment","src":"8781:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8793:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8804:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8789:3:181"},"nodeType":"YulFunctionCall","src":"8789:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8781:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d61267da0fbec4006445194cefd99ca77e8e2e85eead97f9e0e59557740611c0__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8626:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8640:4:181","type":""}],"src":"8475:338:181"},{"body":{"nodeType":"YulBlock","src":"8965:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8982:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8993:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8975:6:181"},"nodeType":"YulFunctionCall","src":"8975:21:181"},"nodeType":"YulExpressionStatement","src":"8975:21:181"},{"nodeType":"YulAssignment","src":"9005:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9030:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9042:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9053:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9038:3:181"},"nodeType":"YulFunctionCall","src":"9038:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"9013:16:181"},"nodeType":"YulFunctionCall","src":"9013:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9005:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9077:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9088:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9073:3:181"},"nodeType":"YulFunctionCall","src":"9073:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9097:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9113:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"9118:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9109:3:181"},"nodeType":"YulFunctionCall","src":"9109:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"9122:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9105:3:181"},"nodeType":"YulFunctionCall","src":"9105:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9093:3:181"},"nodeType":"YulFunctionCall","src":"9093:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9066:6:181"},"nodeType":"YulFunctionCall","src":"9066:60:181"},"nodeType":"YulExpressionStatement","src":"9066:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8926:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8937:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8945:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8956:4:181","type":""}],"src":"8818:314:181"},{"body":{"nodeType":"YulBlock","src":"9311:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9328:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9339:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9321:6:181"},"nodeType":"YulFunctionCall","src":"9321:21:181"},"nodeType":"YulExpressionStatement","src":"9321:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9362:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9373:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9358:3:181"},"nodeType":"YulFunctionCall","src":"9358:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9378:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9351:6:181"},"nodeType":"YulFunctionCall","src":"9351:29:181"},"nodeType":"YulExpressionStatement","src":"9351:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9400:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9411:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9396:3:181"},"nodeType":"YulFunctionCall","src":"9396:18:181"},{"hexValue":"2170726f6f6673","kind":"string","nodeType":"YulLiteral","src":"9416:9:181","type":"","value":"!proofs"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9389:6:181"},"nodeType":"YulFunctionCall","src":"9389:37:181"},"nodeType":"YulExpressionStatement","src":"9389:37:181"},{"nodeType":"YulAssignment","src":"9435:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9447:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9458:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9443:3:181"},"nodeType":"YulFunctionCall","src":"9443:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9435:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9288:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9302:4:181","type":""}],"src":"9137:330:181"},{"body":{"nodeType":"YulBlock","src":"9504:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9521:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9528:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"9533:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9524:3:181"},"nodeType":"YulFunctionCall","src":"9524:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9514:6:181"},"nodeType":"YulFunctionCall","src":"9514:31:181"},"nodeType":"YulExpressionStatement","src":"9514:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9561:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"9564:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9554:6:181"},"nodeType":"YulFunctionCall","src":"9554:15:181"},"nodeType":"YulExpressionStatement","src":"9554:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9585:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9588:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9578:6:181"},"nodeType":"YulFunctionCall","src":"9578:15:181"},"nodeType":"YulExpressionStatement","src":"9578:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"9472:127:181"},{"body":{"nodeType":"YulBlock","src":"9705:224:181","statements":[{"nodeType":"YulVariableDeclaration","src":"9715:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"9754:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9741:12:181"},"nodeType":"YulFunctionCall","src":"9741:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"9719:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9857:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9866:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9869:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9859:6:181"},"nodeType":"YulFunctionCall","src":"9859:12:181"},"nodeType":"YulExpressionStatement","src":"9859:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"9789:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"9817:12:181"},"nodeType":"YulFunctionCall","src":"9817:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"9833:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9813:3:181"},"nodeType":"YulFunctionCall","src":"9813:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9848:4:181","type":"","value":"1086"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"9844:3:181"},"nodeType":"YulFunctionCall","src":"9844:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9809:3:181"},"nodeType":"YulFunctionCall","src":"9809:45:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9785:3:181"},"nodeType":"YulFunctionCall","src":"9785:70:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9778:6:181"},"nodeType":"YulFunctionCall","src":"9778:78:181"},"nodeType":"YulIf","src":"9775:98:181"},{"nodeType":"YulAssignment","src":"9882:41:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"9894:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"9904:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9890:3:181"},"nodeType":"YulFunctionCall","src":"9890:33:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"9882:4:181"}]}]},"name":"access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"9670:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"9680:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"9696:4:181","type":""}],"src":"9604:325:181"},{"body":{"nodeType":"YulBlock","src":"10028:427:181","statements":[{"nodeType":"YulVariableDeclaration","src":"10038:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"10077:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10064:12:181"},"nodeType":"YulFunctionCall","src":"10064:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"10042:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10178:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10187:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10190:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10180:6:181"},"nodeType":"YulFunctionCall","src":"10180:12:181"},"nodeType":"YulExpressionStatement","src":"10180:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10112:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"10140:12:181"},"nodeType":"YulFunctionCall","src":"10140:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"10156:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10136:3:181"},"nodeType":"YulFunctionCall","src":"10136:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10171:2:181","type":"","value":"30"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10167:3:181"},"nodeType":"YulFunctionCall","src":"10167:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10132:3:181"},"nodeType":"YulFunctionCall","src":"10132:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10108:3:181"},"nodeType":"YulFunctionCall","src":"10108:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10101:6:181"},"nodeType":"YulFunctionCall","src":"10101:76:181"},"nodeType":"YulIf","src":"10098:96:181"},{"nodeType":"YulVariableDeclaration","src":"10203:47:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"10221:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10231:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10217:3:181"},"nodeType":"YulFunctionCall","src":"10217:33:181"},"variables":[{"name":"addr_1","nodeType":"YulTypedName","src":"10207:6:181","type":""}]},{"nodeType":"YulAssignment","src":"10259:30:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"10282:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10269:12:181"},"nodeType":"YulFunctionCall","src":"10269:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"10259:6:181"}]},{"body":{"nodeType":"YulBlock","src":"10332:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10341:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10344:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10334:6:181"},"nodeType":"YulFunctionCall","src":"10334:12:181"},"nodeType":"YulExpressionStatement","src":"10334:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"10304:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10312:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10301:2:181"},"nodeType":"YulFunctionCall","src":"10301:30:181"},"nodeType":"YulIf","src":"10298:50:181"},{"nodeType":"YulAssignment","src":"10357:25:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"10369:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10377:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10365:3:181"},"nodeType":"YulFunctionCall","src":"10365:17:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"10357:4:181"}]},{"body":{"nodeType":"YulBlock","src":"10433:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10442:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10445:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10435:6:181"},"nodeType":"YulFunctionCall","src":"10435:12:181"},"nodeType":"YulExpressionStatement","src":"10435:12:181"}]},"condition":{"arguments":[{"name":"addr","nodeType":"YulIdentifier","src":"10398:4:181"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"10408:12:181"},"nodeType":"YulFunctionCall","src":"10408:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"10424:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10404:3:181"},"nodeType":"YulFunctionCall","src":"10404:27:181"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"10394:3:181"},"nodeType":"YulFunctionCall","src":"10394:38:181"},"nodeType":"YulIf","src":"10391:58:181"}]},"name":"access_calldata_tail_t_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"9985:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"9995:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"10011:4:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"10017:6:181","type":""}],"src":"9934:521:181"},{"body":{"nodeType":"YulBlock","src":"10607:124:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10630:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"10635:6:181"},{"name":"value1","nodeType":"YulIdentifier","src":"10643:6:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"10617:12:181"},"nodeType":"YulFunctionCall","src":"10617:33:181"},"nodeType":"YulExpressionStatement","src":"10617:33:181"},{"nodeType":"YulVariableDeclaration","src":"10659:26:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10673:3:181"},{"name":"value1","nodeType":"YulIdentifier","src":"10678:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10669:3:181"},"nodeType":"YulFunctionCall","src":"10669:16:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10663:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"10701:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"10705:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10694:6:181"},"nodeType":"YulFunctionCall","src":"10694:13:181"},"nodeType":"YulExpressionStatement","src":"10694:13:181"},{"nodeType":"YulAssignment","src":"10716:9:181","value":{"name":"_1","nodeType":"YulIdentifier","src":"10723:2:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"10716:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"10575:3:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10580:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10588:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10599:3:181","type":""}],"src":"10460:271:181"},{"body":{"nodeType":"YulBlock","src":"10910:161:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10927:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10938:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10920:6:181"},"nodeType":"YulFunctionCall","src":"10920:21:181"},"nodeType":"YulExpressionStatement","src":"10920:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10961:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10972:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10957:3:181"},"nodeType":"YulFunctionCall","src":"10957:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10977:2:181","type":"","value":"11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10950:6:181"},"nodeType":"YulFunctionCall","src":"10950:30:181"},"nodeType":"YulExpressionStatement","src":"10950:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11000:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11011:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10996:3:181"},"nodeType":"YulFunctionCall","src":"10996:18:181"},{"hexValue":"21736861726564526f6f74","kind":"string","nodeType":"YulLiteral","src":"11016:13:181","type":"","value":"!sharedRoot"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10989:6:181"},"nodeType":"YulFunctionCall","src":"10989:41:181"},"nodeType":"YulExpressionStatement","src":"10989:41:181"},{"nodeType":"YulAssignment","src":"11039:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11051:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11062:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11047:3:181"},"nodeType":"YulFunctionCall","src":"11047:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11039:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10887:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10901:4:181","type":""}],"src":"10736:335:181"},{"body":{"nodeType":"YulBlock","src":"11250:171:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11267:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11278:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11260:6:181"},"nodeType":"YulFunctionCall","src":"11260:21:181"},"nodeType":"YulExpressionStatement","src":"11260:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11301:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11312:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11297:3:181"},"nodeType":"YulFunctionCall","src":"11297:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11317:2:181","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11290:6:181"},"nodeType":"YulFunctionCall","src":"11290:30:181"},"nodeType":"YulExpressionStatement","src":"11290:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11340:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11351:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11336:3:181"},"nodeType":"YulFunctionCall","src":"11336:18:181"},{"hexValue":"616767726567617465526f6f742021657869737473","kind":"string","nodeType":"YulLiteral","src":"11356:23:181","type":"","value":"aggregateRoot !exists"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11329:6:181"},"nodeType":"YulFunctionCall","src":"11329:51:181"},"nodeType":"YulExpressionStatement","src":"11329:51:181"},{"nodeType":"YulAssignment","src":"11389:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11401:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11412:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11397:3:181"},"nodeType":"YulFunctionCall","src":"11397:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11389:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11227:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11241:4:181","type":""}],"src":"11076:345:181"},{"body":{"nodeType":"YulBlock","src":"11504:199:181","statements":[{"body":{"nodeType":"YulBlock","src":"11550:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11559:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11562:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11552:6:181"},"nodeType":"YulFunctionCall","src":"11552:12:181"},"nodeType":"YulExpressionStatement","src":"11552:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11525:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"11534:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11521:3:181"},"nodeType":"YulFunctionCall","src":"11521:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"11546:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11517:3:181"},"nodeType":"YulFunctionCall","src":"11517:32:181"},"nodeType":"YulIf","src":"11514:52:181"},{"nodeType":"YulVariableDeclaration","src":"11575:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11594:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11588:5:181"},"nodeType":"YulFunctionCall","src":"11588:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11579:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"11657:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11666:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11669:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11659:6:181"},"nodeType":"YulFunctionCall","src":"11659:12:181"},"nodeType":"YulExpressionStatement","src":"11659:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11626:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11647:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11640:6:181"},"nodeType":"YulFunctionCall","src":"11640:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11633:6:181"},"nodeType":"YulFunctionCall","src":"11633:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"11623:2:181"},"nodeType":"YulFunctionCall","src":"11623:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11616:6:181"},"nodeType":"YulFunctionCall","src":"11616:40:181"},"nodeType":"YulIf","src":"11613:60:181"},{"nodeType":"YulAssignment","src":"11682:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"11692:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11682:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11470:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11481:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11493:6:181","type":""}],"src":"11426:277:181"},{"body":{"nodeType":"YulBlock","src":"11882:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11899:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11910:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11892:6:181"},"nodeType":"YulFunctionCall","src":"11892:21:181"},"nodeType":"YulExpressionStatement","src":"11892:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11933:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11944:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11929:3:181"},"nodeType":"YulFunctionCall","src":"11929:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11949:1:181","type":"","value":"8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11922:6:181"},"nodeType":"YulFunctionCall","src":"11922:29:181"},"nodeType":"YulExpressionStatement","src":"11922:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11971:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11982:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11967:3:181"},"nodeType":"YulFunctionCall","src":"11967:18:181"},{"hexValue":"2177617463686572","kind":"string","nodeType":"YulLiteral","src":"11987:10:181","type":"","value":"!watcher"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11960:6:181"},"nodeType":"YulFunctionCall","src":"11960:38:181"},"nodeType":"YulExpressionStatement","src":"11960:38:181"},{"nodeType":"YulAssignment","src":"12007:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12019:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12030:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12015:3:181"},"nodeType":"YulFunctionCall","src":"12015:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12007:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11859:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11873:4:181","type":""}],"src":"11708:331:181"},{"body":{"nodeType":"YulBlock","src":"12093:79:181","statements":[{"nodeType":"YulAssignment","src":"12103:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"12115:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"12118:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12111:3:181"},"nodeType":"YulFunctionCall","src":"12111:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"12103:4:181"}]},{"body":{"nodeType":"YulBlock","src":"12144:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"12146:16:181"},"nodeType":"YulFunctionCall","src":"12146:18:181"},"nodeType":"YulExpressionStatement","src":"12146:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"12135:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"12141:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12132:2:181"},"nodeType":"YulFunctionCall","src":"12132:11:181"},"nodeType":"YulIf","src":"12129:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"12075:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"12078:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"12084:4:181","type":""}],"src":"12044:128:181"},{"body":{"nodeType":"YulBlock","src":"12351:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12368:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12379:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12361:6:181"},"nodeType":"YulFunctionCall","src":"12361:21:181"},"nodeType":"YulExpressionStatement","src":"12361:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12402:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12413:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12398:3:181"},"nodeType":"YulFunctionCall","src":"12398:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12418:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12391:6:181"},"nodeType":"YulFunctionCall","src":"12391:30:181"},"nodeType":"YulExpressionStatement","src":"12391:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12441:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12452:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12437:3:181"},"nodeType":"YulFunctionCall","src":"12437:18:181"},{"hexValue":"616c72656164792077617463686572206d616e61676572","kind":"string","nodeType":"YulLiteral","src":"12457:25:181","type":"","value":"already watcher manager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12430:6:181"},"nodeType":"YulFunctionCall","src":"12430:53:181"},"nodeType":"YulExpressionStatement","src":"12430:53:181"},{"nodeType":"YulAssignment","src":"12492:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12504:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12515:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12500:3:181"},"nodeType":"YulFunctionCall","src":"12500:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12492:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12328:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12342:4:181","type":""}],"src":"12177:347:181"},{"body":{"nodeType":"YulBlock","src":"12703:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12720:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12731:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12713:6:181"},"nodeType":"YulFunctionCall","src":"12713:21:181"},"nodeType":"YulExpressionStatement","src":"12713:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12754:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12765:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12750:3:181"},"nodeType":"YulFunctionCall","src":"12750:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12770:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12743:6:181"},"nodeType":"YulFunctionCall","src":"12743:30:181"},"nodeType":"YulExpressionStatement","src":"12743:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12793:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12804:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12789:3:181"},"nodeType":"YulFunctionCall","src":"12789:18:181"},{"hexValue":"21616c6c6f776c6973746564","kind":"string","nodeType":"YulLiteral","src":"12809:14:181","type":"","value":"!allowlisted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12782:6:181"},"nodeType":"YulFunctionCall","src":"12782:42:181"},"nodeType":"YulExpressionStatement","src":"12782:42:181"},{"nodeType":"YulAssignment","src":"12833:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12845:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12856:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12841:3:181"},"nodeType":"YulFunctionCall","src":"12841:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12833:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12680:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12694:4:181","type":""}],"src":"12529:336:181"},{"body":{"nodeType":"YulBlock","src":"12916:155:181","statements":[{"nodeType":"YulVariableDeclaration","src":"12926:20:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12936:10:181","type":"","value":"0xffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12930:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12955:29:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12974:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12981:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12970:3:181"},"nodeType":"YulFunctionCall","src":"12970:14:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"12959:7:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"13012:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13014:16:181"},"nodeType":"YulFunctionCall","src":"13014:18:181"},"nodeType":"YulExpressionStatement","src":"13014:18:181"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"12999:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13008:2:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"12996:2:181"},"nodeType":"YulFunctionCall","src":"12996:15:181"},"nodeType":"YulIf","src":"12993:41:181"},{"nodeType":"YulAssignment","src":"13043:22:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"13054:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"13063:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13050:3:181"},"nodeType":"YulFunctionCall","src":"13050:15:181"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"13043:3:181"}]}]},"name":"increment_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"12898:5:181","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"12908:3:181","type":""}],"src":"12870:201:181"},{"body":{"nodeType":"YulBlock","src":"13174:147:181","statements":[{"body":{"nodeType":"YulBlock","src":"13220:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13229:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13232:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13222:6:181"},"nodeType":"YulFunctionCall","src":"13222:12:181"},"nodeType":"YulExpressionStatement","src":"13222:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13195:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"13204:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13191:3:181"},"nodeType":"YulFunctionCall","src":"13191:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"13216:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13187:3:181"},"nodeType":"YulFunctionCall","src":"13187:32:181"},"nodeType":"YulIf","src":"13184:52:181"},{"nodeType":"YulAssignment","src":"13245:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13261:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13255:5:181"},"nodeType":"YulFunctionCall","src":"13255:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13245:6:181"}]},{"nodeType":"YulAssignment","src":"13280:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13300:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13311:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13296:3:181"},"nodeType":"YulFunctionCall","src":"13296:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13290:5:181"},"nodeType":"YulFunctionCall","src":"13290:25:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13280:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13132:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13143:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13155:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13163:6:181","type":""}],"src":"13076:245:181"},{"body":{"nodeType":"YulBlock","src":"13529:229:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13546:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"13557:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13539:6:181"},"nodeType":"YulFunctionCall","src":"13539:25:181"},"nodeType":"YulExpressionStatement","src":"13539:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13584:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13595:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13580:3:181"},"nodeType":"YulFunctionCall","src":"13580:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"13600:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13573:6:181"},"nodeType":"YulFunctionCall","src":"13573:34:181"},"nodeType":"YulExpressionStatement","src":"13573:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13627:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13638:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13623:3:181"},"nodeType":"YulFunctionCall","src":"13623:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"13643:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13616:6:181"},"nodeType":"YulFunctionCall","src":"13616:34:181"},"nodeType":"YulExpressionStatement","src":"13616:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13670:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13681:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13666:3:181"},"nodeType":"YulFunctionCall","src":"13666:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13686:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13659:6:181"},"nodeType":"YulFunctionCall","src":"13659:31:181"},"nodeType":"YulExpressionStatement","src":"13659:31:181"},{"nodeType":"YulAssignment","src":"13699:53:181","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"13724:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13736:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13747:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13732:3:181"},"nodeType":"YulFunctionCall","src":"13732:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"13707:16:181"},"nodeType":"YulFunctionCall","src":"13707:45:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13699:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13474:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13485:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13493:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13501:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13509:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13520:4:181","type":""}],"src":"13326:432:181"},{"body":{"nodeType":"YulBlock","src":"13937:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13954:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13965:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13947:6:181"},"nodeType":"YulFunctionCall","src":"13947:21:181"},"nodeType":"YulExpressionStatement","src":"13947:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13988:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13999:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13984:3:181"},"nodeType":"YulFunctionCall","src":"13984:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14004:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13977:6:181"},"nodeType":"YulFunctionCall","src":"13977:30:181"},"nodeType":"YulExpressionStatement","src":"13977:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14027:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14038:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14023:3:181"},"nodeType":"YulFunctionCall","src":"14023:18:181"},{"hexValue":"5061757361626c653a20706175736564","kind":"string","nodeType":"YulLiteral","src":"14043:18:181","type":"","value":"Pausable: paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14016:6:181"},"nodeType":"YulFunctionCall","src":"14016:46:181"},"nodeType":"YulExpressionStatement","src":"14016:46:181"},{"nodeType":"YulAssignment","src":"14071:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14083:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14094:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14079:3:181"},"nodeType":"YulFunctionCall","src":"14079:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14071:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13914:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13928:4:181","type":""}],"src":"13763:340:181"},{"body":{"nodeType":"YulBlock","src":"14282:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14299:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14310:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14292:6:181"},"nodeType":"YulFunctionCall","src":"14292:21:181"},"nodeType":"YulExpressionStatement","src":"14292:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14333:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14344:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14329:3:181"},"nodeType":"YulFunctionCall","src":"14329:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14349:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14322:6:181"},"nodeType":"YulFunctionCall","src":"14322:29:181"},"nodeType":"YulExpressionStatement","src":"14322:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14371:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14382:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14367:3:181"},"nodeType":"YulFunctionCall","src":"14367:18:181"},{"hexValue":"216c656e677468","kind":"string","nodeType":"YulLiteral","src":"14387:9:181","type":"","value":"!length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14360:6:181"},"nodeType":"YulFunctionCall","src":"14360:37:181"},"nodeType":"YulExpressionStatement","src":"14360:37:181"},{"nodeType":"YulAssignment","src":"14406:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14418:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14429:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14414:3:181"},"nodeType":"YulFunctionCall","src":"14414:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14406:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14259:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14273:4:181","type":""}],"src":"14108:330:181"},{"body":{"nodeType":"YulBlock","src":"14617:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14634:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14645:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14627:6:181"},"nodeType":"YulFunctionCall","src":"14627:21:181"},"nodeType":"YulExpressionStatement","src":"14627:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14668:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14679:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14664:3:181"},"nodeType":"YulFunctionCall","src":"14664:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14684:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14657:6:181"},"nodeType":"YulFunctionCall","src":"14657:30:181"},"nodeType":"YulExpressionStatement","src":"14657:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14707:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14718:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14703:3:181"},"nodeType":"YulFunctionCall","src":"14703:18:181"},{"hexValue":"2164617461206c656e677468","kind":"string","nodeType":"YulLiteral","src":"14723:14:181","type":"","value":"!data length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14696:6:181"},"nodeType":"YulFunctionCall","src":"14696:42:181"},"nodeType":"YulExpressionStatement","src":"14696:42:181"},{"nodeType":"YulAssignment","src":"14747:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14759:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14770:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14755:3:181"},"nodeType":"YulFunctionCall","src":"14755:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14747:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14594:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14608:4:181","type":""}],"src":"14443:336:181"},{"body":{"nodeType":"YulBlock","src":"14903:98:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14920:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14931:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14913:6:181"},"nodeType":"YulFunctionCall","src":"14913:21:181"},"nodeType":"YulExpressionStatement","src":"14913:21:181"},{"nodeType":"YulAssignment","src":"14943:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14968:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14980:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14991:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14976:3:181"},"nodeType":"YulFunctionCall","src":"14976:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"14951:16:181"},"nodeType":"YulFunctionCall","src":"14951:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14943:4:181"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14872:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14883:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14894:4:181","type":""}],"src":"14784:217:181"},{"body":{"nodeType":"YulBlock","src":"15153:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15170:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15185:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15201:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"15206:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"15197:3:181"},"nodeType":"YulFunctionCall","src":"15197:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"15210:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15193:3:181"},"nodeType":"YulFunctionCall","src":"15193:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15181:3:181"},"nodeType":"YulFunctionCall","src":"15181:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15163:6:181"},"nodeType":"YulFunctionCall","src":"15163:51:181"},"nodeType":"YulExpressionStatement","src":"15163:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15234:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15245:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15230:3:181"},"nodeType":"YulFunctionCall","src":"15230:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15250:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15223:6:181"},"nodeType":"YulFunctionCall","src":"15223:30:181"},"nodeType":"YulExpressionStatement","src":"15223:30:181"},{"nodeType":"YulAssignment","src":"15262:52:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"15287:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15299:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15310:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15295:3:181"},"nodeType":"YulFunctionCall","src":"15295:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"15270:16:181"},"nodeType":"YulFunctionCall","src":"15270:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15262:4:181"}]}]},"name":"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15114:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15125:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15133:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15144:4:181","type":""}],"src":"15006:314:181"},{"body":{"nodeType":"YulBlock","src":"15499:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15516:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15527:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15509:6:181"},"nodeType":"YulFunctionCall","src":"15509:21:181"},"nodeType":"YulExpressionStatement","src":"15509:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15550:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15561:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15546:3:181"},"nodeType":"YulFunctionCall","src":"15546:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15566:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15539:6:181"},"nodeType":"YulFunctionCall","src":"15539:30:181"},"nodeType":"YulExpressionStatement","src":"15539:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15589:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15600:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15585:3:181"},"nodeType":"YulFunctionCall","src":"15585:18:181"},{"hexValue":"5061757361626c653a206e6f7420706175736564","kind":"string","nodeType":"YulLiteral","src":"15605:22:181","type":"","value":"Pausable: not paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15578:6:181"},"nodeType":"YulFunctionCall","src":"15578:50:181"},"nodeType":"YulExpressionStatement","src":"15578:50:181"},{"nodeType":"YulAssignment","src":"15637:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15649:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15660:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15645:3:181"},"nodeType":"YulFunctionCall","src":"15645:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15637:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15476:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15490:4:181","type":""}],"src":"15325:344:181"},{"body":{"nodeType":"YulBlock","src":"15848:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15865:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15876:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15858:6:181"},"nodeType":"YulFunctionCall","src":"15858:21:181"},"nodeType":"YulExpressionStatement","src":"15858:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15899:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15910:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15895:3:181"},"nodeType":"YulFunctionCall","src":"15895:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15915:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15888:6:181"},"nodeType":"YulFunctionCall","src":"15888:30:181"},"nodeType":"YulExpressionStatement","src":"15888:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15938:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15949:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15934:3:181"},"nodeType":"YulFunctionCall","src":"15934:18:181"},{"hexValue":"216d6972726f72436f6e6e6563746f72","kind":"string","nodeType":"YulLiteral","src":"15954:18:181","type":"","value":"!mirrorConnector"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15927:6:181"},"nodeType":"YulFunctionCall","src":"15927:46:181"},"nodeType":"YulExpressionStatement","src":"15927:46:181"},{"nodeType":"YulAssignment","src":"15982:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15994:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16005:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15990:3:181"},"nodeType":"YulFunctionCall","src":"15990:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15982:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15825:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15839:4:181","type":""}],"src":"15674:340:181"},{"body":{"nodeType":"YulBlock","src":"16113:203:181","statements":[{"nodeType":"YulVariableDeclaration","src":"16123:26:181","value":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"16143:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16137:5:181"},"nodeType":"YulFunctionCall","src":"16137:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"16127:6:181","type":""}]},{"nodeType":"YulAssignment","src":"16158:32:181","value":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"16177:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"16184:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16173:3:181"},"nodeType":"YulFunctionCall","src":"16173:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16167:5:181"},"nodeType":"YulFunctionCall","src":"16167:23:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"16158:5:181"}]},{"body":{"nodeType":"YulBlock","src":"16227:83:181","statements":[{"nodeType":"YulAssignment","src":"16241:59:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16254:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16269:1:181","type":"","value":"3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16276:4:181","type":"","value":"0x20"},{"name":"length","nodeType":"YulIdentifier","src":"16282:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16272:3:181"},"nodeType":"YulFunctionCall","src":"16272:17:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16265:3:181"},"nodeType":"YulFunctionCall","src":"16265:25:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16296:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"16292:3:181"},"nodeType":"YulFunctionCall","src":"16292:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16261:3:181"},"nodeType":"YulFunctionCall","src":"16261:38:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16250:3:181"},"nodeType":"YulFunctionCall","src":"16250:50:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"16241:5:181"}]}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"16205:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"16213:4:181","type":"","value":"0x20"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16202:2:181"},"nodeType":"YulFunctionCall","src":"16202:16:181"},"nodeType":"YulIf","src":"16199:111:181"}]},"name":"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nodeType":"YulTypedName","src":"16093:5:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"16103:5:181","type":""}],"src":"16019:297:181"},{"body":{"nodeType":"YulBlock","src":"16495:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16512:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16523:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16505:6:181"},"nodeType":"YulFunctionCall","src":"16505:21:181"},"nodeType":"YulExpressionStatement","src":"16505:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16546:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16557:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16542:3:181"},"nodeType":"YulFunctionCall","src":"16542:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16562:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16535:6:181"},"nodeType":"YulFunctionCall","src":"16535:30:181"},"nodeType":"YulExpressionStatement","src":"16535:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16585:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16596:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16581:3:181"},"nodeType":"YulFunctionCall","src":"16581:18:181"},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","kind":"string","nodeType":"YulLiteral","src":"16601:33:181","type":"","value":"ReentrancyGuard: reentrant call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16574:6:181"},"nodeType":"YulFunctionCall","src":"16574:61:181"},"nodeType":"YulExpressionStatement","src":"16574:61:181"},{"nodeType":"YulAssignment","src":"16644:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16656:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16667:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16652:3:181"},"nodeType":"YulFunctionCall","src":"16652:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16644:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16472:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16486:4:181","type":""}],"src":"16321:355:181"},{"body":{"nodeType":"YulBlock","src":"16855:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16872:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16883:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16865:6:181"},"nodeType":"YulFunctionCall","src":"16865:21:181"},"nodeType":"YulExpressionStatement","src":"16865:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16906:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16917:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16902:3:181"},"nodeType":"YulFunctionCall","src":"16902:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16922:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16895:6:181"},"nodeType":"YulFunctionCall","src":"16895:30:181"},"nodeType":"YulExpressionStatement","src":"16895:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16945:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16956:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16941:3:181"},"nodeType":"YulFunctionCall","src":"16941:18:181"},{"hexValue":"214d6573736167655374617475732e4e6f6e65","kind":"string","nodeType":"YulLiteral","src":"16961:21:181","type":"","value":"!MessageStatus.None"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16934:6:181"},"nodeType":"YulFunctionCall","src":"16934:49:181"},"nodeType":"YulExpressionStatement","src":"16934:49:181"},{"nodeType":"YulAssignment","src":"16992:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17004:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17015:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17000:3:181"},"nodeType":"YulFunctionCall","src":"17000:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16992:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16832:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16846:4:181","type":""}],"src":"16681:343:181"},{"body":{"nodeType":"YulBlock","src":"17203:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17220:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17231:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17213:6:181"},"nodeType":"YulFunctionCall","src":"17213:21:181"},"nodeType":"YulExpressionStatement","src":"17213:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17254:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17265:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17250:3:181"},"nodeType":"YulFunctionCall","src":"17250:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17270:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17243:6:181"},"nodeType":"YulFunctionCall","src":"17243:30:181"},"nodeType":"YulExpressionStatement","src":"17243:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17293:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17304:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17289:3:181"},"nodeType":"YulFunctionCall","src":"17289:18:181"},{"hexValue":"696e76616c696420696e626f756e64526f6f74","kind":"string","nodeType":"YulLiteral","src":"17309:21:181","type":"","value":"invalid inboundRoot"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17282:6:181"},"nodeType":"YulFunctionCall","src":"17282:49:181"},"nodeType":"YulExpressionStatement","src":"17282:49:181"},{"nodeType":"YulAssignment","src":"17340:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17352:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17363:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17348:3:181"},"nodeType":"YulFunctionCall","src":"17348:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17340:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17180:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17194:4:181","type":""}],"src":"17029:343:181"},{"body":{"nodeType":"YulBlock","src":"17551:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17568:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17579:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17561:6:181"},"nodeType":"YulFunctionCall","src":"17561:21:181"},"nodeType":"YulExpressionStatement","src":"17561:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17602:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17613:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17598:3:181"},"nodeType":"YulFunctionCall","src":"17598:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17618:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17591:6:181"},"nodeType":"YulFunctionCall","src":"17591:30:181"},"nodeType":"YulExpressionStatement","src":"17591:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17641:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17652:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17637:3:181"},"nodeType":"YulFunctionCall","src":"17637:18:181"},{"hexValue":"2164657374696e6174696f6e","kind":"string","nodeType":"YulLiteral","src":"17657:14:181","type":"","value":"!destination"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17630:6:181"},"nodeType":"YulFunctionCall","src":"17630:42:181"},"nodeType":"YulExpressionStatement","src":"17630:42:181"},{"nodeType":"YulAssignment","src":"17681:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17693:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17704:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17689:3:181"},"nodeType":"YulFunctionCall","src":"17689:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17681:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17528:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17542:4:181","type":""}],"src":"17377:336:181"},{"body":{"nodeType":"YulBlock","src":"17892:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17909:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17920:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17902:6:181"},"nodeType":"YulFunctionCall","src":"17902:21:181"},"nodeType":"YulExpressionStatement","src":"17902:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17943:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17954:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17939:3:181"},"nodeType":"YulFunctionCall","src":"17939:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17959:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17932:6:181"},"nodeType":"YulFunctionCall","src":"17932:29:181"},"nodeType":"YulExpressionStatement","src":"17932:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17981:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17992:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17977:3:181"},"nodeType":"YulFunctionCall","src":"17977:18:181"},{"hexValue":"2170726f76656e","kind":"string","nodeType":"YulLiteral","src":"17997:9:181","type":"","value":"!proven"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17970:6:181"},"nodeType":"YulFunctionCall","src":"17970:37:181"},"nodeType":"YulExpressionStatement","src":"17970:37:181"},{"nodeType":"YulAssignment","src":"18016:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18028:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18039:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18024:3:181"},"nodeType":"YulFunctionCall","src":"18024:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18016:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17869:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17883:4:181","type":""}],"src":"17718:330:181"},{"body":{"nodeType":"YulBlock","src":"18227:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18244:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18255:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18237:6:181"},"nodeType":"YulFunctionCall","src":"18237:21:181"},"nodeType":"YulExpressionStatement","src":"18237:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18278:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18289:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18274:3:181"},"nodeType":"YulFunctionCall","src":"18274:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18294:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18267:6:181"},"nodeType":"YulFunctionCall","src":"18267:29:181"},"nodeType":"YulExpressionStatement","src":"18267:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18316:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18327:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18312:3:181"},"nodeType":"YulFunctionCall","src":"18312:18:181"},{"hexValue":"21676173","kind":"string","nodeType":"YulLiteral","src":"18332:6:181","type":"","value":"!gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18305:6:181"},"nodeType":"YulFunctionCall","src":"18305:34:181"},"nodeType":"YulExpressionStatement","src":"18305:34:181"},{"nodeType":"YulAssignment","src":"18348:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18360:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18371:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18356:3:181"},"nodeType":"YulFunctionCall","src":"18356:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18348:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18204:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18218:4:181","type":""}],"src":"18053:327:181"},{"body":{"nodeType":"YulBlock","src":"18584:276:181","statements":[{"nodeType":"YulVariableDeclaration","src":"18594:20:181","value":{"kind":"number","nodeType":"YulLiteral","src":"18604:10:181","type":"","value":"0xffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18598:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18630:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18645:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"18653:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18641:3:181"},"nodeType":"YulFunctionCall","src":"18641:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18623:6:181"},"nodeType":"YulFunctionCall","src":"18623:34:181"},"nodeType":"YulExpressionStatement","src":"18623:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18677:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18688:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18673:3:181"},"nodeType":"YulFunctionCall","src":"18673:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"18697:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"18705:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18693:3:181"},"nodeType":"YulFunctionCall","src":"18693:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18666:6:181"},"nodeType":"YulFunctionCall","src":"18666:43:181"},"nodeType":"YulExpressionStatement","src":"18666:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18729:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18740:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18725:3:181"},"nodeType":"YulFunctionCall","src":"18725:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"18745:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18718:6:181"},"nodeType":"YulFunctionCall","src":"18718:34:181"},"nodeType":"YulExpressionStatement","src":"18718:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18772:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18783:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18768:3:181"},"nodeType":"YulFunctionCall","src":"18768:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18788:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18761:6:181"},"nodeType":"YulFunctionCall","src":"18761:31:181"},"nodeType":"YulExpressionStatement","src":"18761:31:181"},{"nodeType":"YulAssignment","src":"18801:53:181","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"18826:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18838:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18849:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18834:3:181"},"nodeType":"YulFunctionCall","src":"18834:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"18809:16:181"},"nodeType":"YulFunctionCall","src":"18809:45:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18801:4:181"}]}]},"name":"abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18529:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"18540:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"18548:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18556:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18564:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18575:4:181","type":""}],"src":"18385:475:181"},{"body":{"nodeType":"YulBlock","src":"19034:200:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19051:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"19062:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19044:6:181"},"nodeType":"YulFunctionCall","src":"19044:25:181"},"nodeType":"YulExpressionStatement","src":"19044:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19089:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19100:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19085:3:181"},"nodeType":"YulFunctionCall","src":"19085:18:181"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"19119:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19112:6:181"},"nodeType":"YulFunctionCall","src":"19112:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19105:6:181"},"nodeType":"YulFunctionCall","src":"19105:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19078:6:181"},"nodeType":"YulFunctionCall","src":"19078:50:181"},"nodeType":"YulExpressionStatement","src":"19078:50:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19148:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19159:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19144:3:181"},"nodeType":"YulFunctionCall","src":"19144:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19164:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19137:6:181"},"nodeType":"YulFunctionCall","src":"19137:30:181"},"nodeType":"YulExpressionStatement","src":"19137:30:181"},{"nodeType":"YulAssignment","src":"19176:52:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"19201:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19213:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19224:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19209:3:181"},"nodeType":"YulFunctionCall","src":"19209:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"19184:16:181"},"nodeType":"YulFunctionCall","src":"19184:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19176:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18987:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"18998:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19006:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19014:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19025:4:181","type":""}],"src":"18865:369:181"},{"body":{"nodeType":"YulBlock","src":"19368:175:181","statements":[{"nodeType":"YulAssignment","src":"19378:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19390:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19401:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19386:3:181"},"nodeType":"YulFunctionCall","src":"19386:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19378:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"19413:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19431:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"19436:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"19427:3:181"},"nodeType":"YulFunctionCall","src":"19427:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"19440:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19423:3:181"},"nodeType":"YulFunctionCall","src":"19423:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"19417:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19458:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19473:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"19481:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19469:3:181"},"nodeType":"YulFunctionCall","src":"19469:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19451:6:181"},"nodeType":"YulFunctionCall","src":"19451:34:181"},"nodeType":"YulExpressionStatement","src":"19451:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19505:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19516:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19501:3:181"},"nodeType":"YulFunctionCall","src":"19501:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"19525:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"19533:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19521:3:181"},"nodeType":"YulFunctionCall","src":"19521:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19494:6:181"},"nodeType":"YulFunctionCall","src":"19494:43:181"},"nodeType":"YulExpressionStatement","src":"19494:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19329:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19340:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19348:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19359:4:181","type":""}],"src":"19239:304:181"},{"body":{"nodeType":"YulBlock","src":"19722:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19739:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19750:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19732:6:181"},"nodeType":"YulFunctionCall","src":"19732:21:181"},"nodeType":"YulExpressionStatement","src":"19732:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19773:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19784:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19769:3:181"},"nodeType":"YulFunctionCall","src":"19769:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19789:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19762:6:181"},"nodeType":"YulFunctionCall","src":"19762:30:181"},"nodeType":"YulExpressionStatement","src":"19762:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19812:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19823:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19808:3:181"},"nodeType":"YulFunctionCall","src":"19808:18:181"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","kind":"string","nodeType":"YulLiteral","src":"19828:31:181","type":"","value":"Address: insufficient balance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19801:6:181"},"nodeType":"YulFunctionCall","src":"19801:59:181"},"nodeType":"YulExpressionStatement","src":"19801:59:181"},{"nodeType":"YulAssignment","src":"19869:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19881:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19892:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19877:3:181"},"nodeType":"YulFunctionCall","src":"19877:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19869:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19699:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19713:4:181","type":""}],"src":"19548:353:181"},{"body":{"nodeType":"YulBlock","src":"20097:14:181","statements":[{"nodeType":"YulAssignment","src":"20099:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"20106:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"20099:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"20081:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"20089:3:181","type":""}],"src":"19906:205:181"},{"body":{"nodeType":"YulBlock","src":"20290:248:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20307:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20318:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20300:6:181"},"nodeType":"YulFunctionCall","src":"20300:21:181"},"nodeType":"YulExpressionStatement","src":"20300:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20341:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20352:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20337:3:181"},"nodeType":"YulFunctionCall","src":"20337:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20357:2:181","type":"","value":"58"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20330:6:181"},"nodeType":"YulFunctionCall","src":"20330:30:181"},"nodeType":"YulExpressionStatement","src":"20330:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20380:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20391:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20376:3:181"},"nodeType":"YulFunctionCall","src":"20376:18:181"},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c2072","kind":"string","nodeType":"YulLiteral","src":"20396:34:181","type":"","value":"Address: unable to send value, r"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20369:6:181"},"nodeType":"YulFunctionCall","src":"20369:62:181"},"nodeType":"YulExpressionStatement","src":"20369:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20451:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20462:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20447:3:181"},"nodeType":"YulFunctionCall","src":"20447:18:181"},{"hexValue":"6563697069656e74206d61792068617665207265766572746564","kind":"string","nodeType":"YulLiteral","src":"20467:28:181","type":"","value":"ecipient may have reverted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20440:6:181"},"nodeType":"YulFunctionCall","src":"20440:56:181"},"nodeType":"YulExpressionStatement","src":"20440:56:181"},{"nodeType":"YulAssignment","src":"20505:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20517:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20528:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20513:3:181"},"nodeType":"YulFunctionCall","src":"20513:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20505:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20267:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20281:4:181","type":""}],"src":"20116:422:181"},{"body":{"nodeType":"YulBlock","src":"20717:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20734:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20745:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20727:6:181"},"nodeType":"YulFunctionCall","src":"20727:21:181"},"nodeType":"YulExpressionStatement","src":"20727:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20768:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20779:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20764:3:181"},"nodeType":"YulFunctionCall","src":"20764:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20784:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20757:6:181"},"nodeType":"YulFunctionCall","src":"20757:30:181"},"nodeType":"YulExpressionStatement","src":"20757:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20807:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20818:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20803:3:181"},"nodeType":"YulFunctionCall","src":"20803:18:181"},{"hexValue":"216e65772072617465206c696d6974","kind":"string","nodeType":"YulLiteral","src":"20823:17:181","type":"","value":"!new rate limit"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20796:6:181"},"nodeType":"YulFunctionCall","src":"20796:45:181"},"nodeType":"YulExpressionStatement","src":"20796:45:181"},{"nodeType":"YulAssignment","src":"20850:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20862:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20873:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20858:3:181"},"nodeType":"YulFunctionCall","src":"20858:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20850:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20694:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20708:4:181","type":""}],"src":"20543:339:181"},{"body":{"nodeType":"YulBlock","src":"21016:145:181","statements":[{"nodeType":"YulAssignment","src":"21026:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21038:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21049:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21034:3:181"},"nodeType":"YulFunctionCall","src":"21034:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21026:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21068:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"21083:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21099:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"21104:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21095:3:181"},"nodeType":"YulFunctionCall","src":"21095:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"21108:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21091:3:181"},"nodeType":"YulFunctionCall","src":"21091:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21079:3:181"},"nodeType":"YulFunctionCall","src":"21079:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21061:6:181"},"nodeType":"YulFunctionCall","src":"21061:51:181"},"nodeType":"YulExpressionStatement","src":"21061:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21132:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21143:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21128:3:181"},"nodeType":"YulFunctionCall","src":"21128:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"21148:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21121:6:181"},"nodeType":"YulFunctionCall","src":"21121:34:181"},"nodeType":"YulExpressionStatement","src":"21121:34:181"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20977:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"20988:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"20996:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21007:4:181","type":""}],"src":"20887:274:181"},{"body":{"nodeType":"YulBlock","src":"21437:439:181","statements":[{"nodeType":"YulVariableDeclaration","src":"21447:30:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21461:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"21466:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21457:3:181"},"nodeType":"YulFunctionCall","src":"21457:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"21451:2:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21493:3:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21506:3:181","type":"","value":"224"},{"name":"value0","nodeType":"YulIdentifier","src":"21511:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21502:3:181"},"nodeType":"YulFunctionCall","src":"21502:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21520:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21498:3:181"},"nodeType":"YulFunctionCall","src":"21498:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21486:6:181"},"nodeType":"YulFunctionCall","src":"21486:38:181"},"nodeType":"YulExpressionStatement","src":"21486:38:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21544:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21549:1:181","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21540:3:181"},"nodeType":"YulFunctionCall","src":"21540:11:181"},{"name":"value1","nodeType":"YulIdentifier","src":"21553:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21533:6:181"},"nodeType":"YulFunctionCall","src":"21533:27:181"},"nodeType":"YulExpressionStatement","src":"21533:27:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21580:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21585:2:181","type":"","value":"36"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21576:3:181"},"nodeType":"YulFunctionCall","src":"21576:12:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21598:3:181","type":"","value":"224"},{"name":"value2","nodeType":"YulIdentifier","src":"21603:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21594:3:181"},"nodeType":"YulFunctionCall","src":"21594:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21612:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21590:3:181"},"nodeType":"YulFunctionCall","src":"21590:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21569:6:181"},"nodeType":"YulFunctionCall","src":"21569:47:181"},"nodeType":"YulExpressionStatement","src":"21569:47:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21636:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21641:2:181","type":"","value":"40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21632:3:181"},"nodeType":"YulFunctionCall","src":"21632:12:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21654:3:181","type":"","value":"224"},{"name":"value3","nodeType":"YulIdentifier","src":"21659:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21650:3:181"},"nodeType":"YulFunctionCall","src":"21650:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21668:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21646:3:181"},"nodeType":"YulFunctionCall","src":"21646:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21625:6:181"},"nodeType":"YulFunctionCall","src":"21625:47:181"},"nodeType":"YulExpressionStatement","src":"21625:47:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21692:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21697:2:181","type":"","value":"44"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21688:3:181"},"nodeType":"YulFunctionCall","src":"21688:12:181"},{"name":"value4","nodeType":"YulIdentifier","src":"21702:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21681:6:181"},"nodeType":"YulFunctionCall","src":"21681:28:181"},"nodeType":"YulExpressionStatement","src":"21681:28:181"},{"nodeType":"YulVariableDeclaration","src":"21718:27:181","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"21738:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"21732:5:181"},"nodeType":"YulFunctionCall","src":"21732:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"21722:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"21793:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"21801:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21789:3:181"},"nodeType":"YulFunctionCall","src":"21789:17:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21812:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21817:2:181","type":"","value":"76"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21808:3:181"},"nodeType":"YulFunctionCall","src":"21808:12:181"},{"name":"length","nodeType":"YulIdentifier","src":"21822:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"21754:34:181"},"nodeType":"YulFunctionCall","src":"21754:75:181"},"nodeType":"YulExpressionStatement","src":"21754:75:181"},{"nodeType":"YulAssignment","src":"21838:32:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21853:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"21858:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21849:3:181"},"nodeType":"YulFunctionCall","src":"21849:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"21867:2:181","type":"","value":"76"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21845:3:181"},"nodeType":"YulFunctionCall","src":"21845:25:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"21838:3:181"}]}]},"name":"abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"21373:3:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"21378:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"21386:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"21394:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"21402:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21410:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"21418:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"21429:3:181","type":""}],"src":"21166:710:181"},{"body":{"nodeType":"YulBlock","src":"22055:164:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22072:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22083:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22065:6:181"},"nodeType":"YulFunctionCall","src":"22065:21:181"},"nodeType":"YulExpressionStatement","src":"22065:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22106:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22117:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22102:3:181"},"nodeType":"YulFunctionCall","src":"22102:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22122:2:181","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22095:6:181"},"nodeType":"YulFunctionCall","src":"22095:30:181"},"nodeType":"YulExpressionStatement","src":"22095:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22145:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22156:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22141:3:181"},"nodeType":"YulFunctionCall","src":"22141:18:181"},{"hexValue":"6e657720726f6f7420656d707479","kind":"string","nodeType":"YulLiteral","src":"22161:16:181","type":"","value":"new root empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22134:6:181"},"nodeType":"YulFunctionCall","src":"22134:44:181"},"nodeType":"YulExpressionStatement","src":"22134:44:181"},{"nodeType":"YulAssignment","src":"22187:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22199:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22210:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22195:3:181"},"nodeType":"YulFunctionCall","src":"22195:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22187:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22032:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22046:4:181","type":""}],"src":"21881:338:181"},{"body":{"nodeType":"YulBlock","src":"22398:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22415:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22426:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22408:6:181"},"nodeType":"YulFunctionCall","src":"22408:21:181"},"nodeType":"YulExpressionStatement","src":"22408:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22449:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22460:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22445:3:181"},"nodeType":"YulFunctionCall","src":"22445:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22465:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22438:6:181"},"nodeType":"YulFunctionCall","src":"22438:30:181"},"nodeType":"YulExpressionStatement","src":"22438:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22488:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22499:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22484:3:181"},"nodeType":"YulFunctionCall","src":"22484:18:181"},{"hexValue":"726f6f7420616c72656164792070656e64696e67","kind":"string","nodeType":"YulLiteral","src":"22504:22:181","type":"","value":"root already pending"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22477:6:181"},"nodeType":"YulFunctionCall","src":"22477:50:181"},"nodeType":"YulExpressionStatement","src":"22477:50:181"},{"nodeType":"YulAssignment","src":"22536:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22548:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22559:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22544:3:181"},"nodeType":"YulFunctionCall","src":"22544:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22536:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22375:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22389:4:181","type":""}],"src":"22224:344:181"},{"body":{"nodeType":"YulBlock","src":"22747:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22764:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22775:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22757:6:181"},"nodeType":"YulFunctionCall","src":"22757:21:181"},"nodeType":"YulExpressionStatement","src":"22757:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22798:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22809:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22794:3:181"},"nodeType":"YulFunctionCall","src":"22794:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22814:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22787:6:181"},"nodeType":"YulFunctionCall","src":"22787:30:181"},"nodeType":"YulExpressionStatement","src":"22787:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22837:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22848:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22833:3:181"},"nodeType":"YulFunctionCall","src":"22833:18:181"},{"hexValue":"726f6f7420616c72656164792070726f76656e","kind":"string","nodeType":"YulLiteral","src":"22853:21:181","type":"","value":"root already proven"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22826:6:181"},"nodeType":"YulFunctionCall","src":"22826:49:181"},"nodeType":"YulExpressionStatement","src":"22826:49:181"},{"nodeType":"YulAssignment","src":"22884:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22896:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22907:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22892:3:181"},"nodeType":"YulFunctionCall","src":"22892:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22884:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22724:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22738:4:181","type":""}],"src":"22573:343:181"},{"body":{"nodeType":"YulBlock","src":"23095:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23112:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23123:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23105:6:181"},"nodeType":"YulFunctionCall","src":"23105:21:181"},"nodeType":"YulExpressionStatement","src":"23105:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23146:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23157:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23142:3:181"},"nodeType":"YulFunctionCall","src":"23142:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23162:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23135:6:181"},"nodeType":"YulFunctionCall","src":"23135:30:181"},"nodeType":"YulExpressionStatement","src":"23135:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23185:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23196:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23181:3:181"},"nodeType":"YulFunctionCall","src":"23181:18:181"},{"hexValue":"616767726567617465526f6f7420656d707479","kind":"string","nodeType":"YulLiteral","src":"23201:21:181","type":"","value":"aggregateRoot empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23174:6:181"},"nodeType":"YulFunctionCall","src":"23174:49:181"},"nodeType":"YulExpressionStatement","src":"23174:49:181"},{"nodeType":"YulAssignment","src":"23232:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23244:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23255:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23240:3:181"},"nodeType":"YulFunctionCall","src":"23240:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23232:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23072:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23086:4:181","type":""}],"src":"22921:343:181"},{"body":{"nodeType":"YulBlock","src":"23443:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23460:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23471:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23453:6:181"},"nodeType":"YulFunctionCall","src":"23453:21:181"},"nodeType":"YulExpressionStatement","src":"23453:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23494:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23505:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23490:3:181"},"nodeType":"YulFunctionCall","src":"23490:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23510:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23483:6:181"},"nodeType":"YulFunctionCall","src":"23483:30:181"},"nodeType":"YulExpressionStatement","src":"23483:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23533:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23544:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23529:3:181"},"nodeType":"YulFunctionCall","src":"23529:18:181"},{"hexValue":"616767726567617465526f6f7420216578697374","kind":"string","nodeType":"YulLiteral","src":"23549:22:181","type":"","value":"aggregateRoot !exist"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23522:6:181"},"nodeType":"YulFunctionCall","src":"23522:50:181"},"nodeType":"YulExpressionStatement","src":"23522:50:181"},{"nodeType":"YulAssignment","src":"23581:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23593:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23604:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23589:3:181"},"nodeType":"YulFunctionCall","src":"23589:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23581:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23420:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23434:4:181","type":""}],"src":"23269:344:181"},{"body":{"nodeType":"YulBlock","src":"23792:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23809:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23820:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23802:6:181"},"nodeType":"YulFunctionCall","src":"23802:21:181"},"nodeType":"YulExpressionStatement","src":"23802:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23843:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23854:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23839:3:181"},"nodeType":"YulFunctionCall","src":"23839:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23859:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23832:6:181"},"nodeType":"YulFunctionCall","src":"23832:30:181"},"nodeType":"YulExpressionStatement","src":"23832:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23882:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23893:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23878:3:181"},"nodeType":"YulFunctionCall","src":"23878:18:181"},{"hexValue":"616767726567617465526f6f7420217665726966696564","kind":"string","nodeType":"YulLiteral","src":"23898:25:181","type":"","value":"aggregateRoot !verified"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23871:6:181"},"nodeType":"YulFunctionCall","src":"23871:53:181"},"nodeType":"YulExpressionStatement","src":"23871:53:181"},{"nodeType":"YulAssignment","src":"23933:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23945:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23956:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23941:3:181"},"nodeType":"YulFunctionCall","src":"23941:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23933:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23769:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23783:4:181","type":""}],"src":"23618:347:181"},{"body":{"nodeType":"YulBlock","src":"24051:170:181","statements":[{"body":{"nodeType":"YulBlock","src":"24097:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24106:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"24109:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"24099:6:181"},"nodeType":"YulFunctionCall","src":"24099:12:181"},"nodeType":"YulExpressionStatement","src":"24099:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"24072:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"24081:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"24068:3:181"},"nodeType":"YulFunctionCall","src":"24068:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"24093:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"24064:3:181"},"nodeType":"YulFunctionCall","src":"24064:32:181"},"nodeType":"YulIf","src":"24061:52:181"},{"nodeType":"YulVariableDeclaration","src":"24122:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24141:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24135:5:181"},"nodeType":"YulFunctionCall","src":"24135:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"24126:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"24185:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"24160:24:181"},"nodeType":"YulFunctionCall","src":"24160:31:181"},"nodeType":"YulExpressionStatement","src":"24160:31:181"},{"nodeType":"YulAssignment","src":"24200:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"24210:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"24200:6:181"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24017:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"24028:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"24040:6:181","type":""}],"src":"23970:251:181"},{"body":{"nodeType":"YulBlock","src":"24273:104:181","statements":[{"nodeType":"YulAssignment","src":"24283:39:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"24299:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"24302:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24295:3:181"},"nodeType":"YulFunctionCall","src":"24295:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"24313:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"24316:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24309:3:181"},"nodeType":"YulFunctionCall","src":"24309:12:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"24291:3:181"},"nodeType":"YulFunctionCall","src":"24291:31:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"24283:4:181"}]},{"body":{"nodeType":"YulBlock","src":"24349:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"24351:16:181"},"nodeType":"YulFunctionCall","src":"24351:18:181"},"nodeType":"YulExpressionStatement","src":"24351:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"24337:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"24343:4:181","type":"","value":"0xff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"24334:2:181"},"nodeType":"YulFunctionCall","src":"24334:14:181"},"nodeType":"YulIf","src":"24331:40:181"}]},"name":"checked_sub_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"24255:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"24258:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"24264:4:181","type":""}],"src":"24226:151:181"},{"body":{"nodeType":"YulBlock","src":"24432:175:181","statements":[{"nodeType":"YulVariableDeclaration","src":"24442:50:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"24469:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"24472:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24465:3:181"},"nodeType":"YulFunctionCall","src":"24465:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"24483:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"24486:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24479:3:181"},"nodeType":"YulFunctionCall","src":"24479:12:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"24461:3:181"},"nodeType":"YulFunctionCall","src":"24461:31:181"},"variables":[{"name":"product_raw","nodeType":"YulTypedName","src":"24446:11:181","type":""}]},{"nodeType":"YulAssignment","src":"24501:33:181","value":{"arguments":[{"name":"product_raw","nodeType":"YulIdentifier","src":"24516:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"24529:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24512:3:181"},"nodeType":"YulFunctionCall","src":"24512:22:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"24501:7:181"}]},{"body":{"nodeType":"YulBlock","src":"24579:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"24581:16:181"},"nodeType":"YulFunctionCall","src":"24581:18:181"},"nodeType":"YulExpressionStatement","src":"24581:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"24556:7:181"},{"name":"product_raw","nodeType":"YulIdentifier","src":"24565:11:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"24553:2:181"},"nodeType":"YulFunctionCall","src":"24553:24:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"24546:6:181"},"nodeType":"YulFunctionCall","src":"24546:32:181"},"nodeType":"YulIf","src":"24543:58:181"}]},"name":"checked_mul_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"24411:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"24414:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"24420:7:181","type":""}],"src":"24382:225:181"},{"body":{"nodeType":"YulBlock","src":"24795:269:181","statements":[{"nodeType":"YulAssignment","src":"24805:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24817:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24828:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24813:3:181"},"nodeType":"YulFunctionCall","src":"24813:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24805:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"24841:36:181","value":{"kind":"number","nodeType":"YulLiteral","src":"24851:26:181","type":"","value":"0xffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"24845:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24893:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"24908:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"24916:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24904:3:181"},"nodeType":"YulFunctionCall","src":"24904:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24886:6:181"},"nodeType":"YulFunctionCall","src":"24886:34:181"},"nodeType":"YulExpressionStatement","src":"24886:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24940:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24951:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24936:3:181"},"nodeType":"YulFunctionCall","src":"24936:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"24960:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"24968:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24956:3:181"},"nodeType":"YulFunctionCall","src":"24956:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24929:6:181"},"nodeType":"YulFunctionCall","src":"24929:43:181"},"nodeType":"YulExpressionStatement","src":"24929:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24992:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25003:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24988:3:181"},"nodeType":"YulFunctionCall","src":"24988:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"25008:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24981:6:181"},"nodeType":"YulFunctionCall","src":"24981:34:181"},"nodeType":"YulExpressionStatement","src":"24981:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25035:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25046:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25031:3:181"},"nodeType":"YulFunctionCall","src":"25031:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"25051:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25024:6:181"},"nodeType":"YulFunctionCall","src":"25024:34:181"},"nodeType":"YulExpressionStatement","src":"25024:34:181"}]},"name":"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24740:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"24751:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"24759:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"24767:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"24775:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24786:4:181","type":""}],"src":"24612:452:181"},{"body":{"nodeType":"YulBlock","src":"25243:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25260:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25271:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25253:6:181"},"nodeType":"YulFunctionCall","src":"25253:21:181"},"nodeType":"YulExpressionStatement","src":"25253:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25294:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25305:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25290:3:181"},"nodeType":"YulFunctionCall","src":"25290:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"25310:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25283:6:181"},"nodeType":"YulFunctionCall","src":"25283:30:181"},"nodeType":"YulExpressionStatement","src":"25283:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25333:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25344:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25329:3:181"},"nodeType":"YulFunctionCall","src":"25329:18:181"},{"hexValue":"217472756e6361746564","kind":"string","nodeType":"YulLiteral","src":"25349:12:181","type":"","value":"!truncated"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25322:6:181"},"nodeType":"YulFunctionCall","src":"25322:40:181"},"nodeType":"YulExpressionStatement","src":"25322:40:181"},{"nodeType":"YulAssignment","src":"25371:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25383:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25394:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25379:3:181"},"nodeType":"YulFunctionCall","src":"25379:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25371:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25220:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25234:4:181","type":""}],"src":"25069:334:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        if iszero(lt(value0, 3))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 1120) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, shl(5, length)), 0x20), dataEnd) { revert(0, 0) }\n        value0 := add(_2, 0x20)\n        value1 := length\n        value2 := calldataload(add(headStart, 0x20))\n        let _3 := add(headStart, 1088)\n        if gt(_3, dataEnd) { revert(0, 0) }\n        value3 := add(headStart, 64)\n        value4 := calldataload(_3)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n    }\n    function abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value2 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_bytes(value1, add(headStart, 64))\n    }\n    function abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!delayBlocks\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"root already sent\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, value0)\n        end := add(pos, 32)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        let tail_1 := abi_encode_bytes(value0, add(headStart, 96))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value1, tail_1)\n        mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_d61267da0fbec4006445194cefd99ca77e8e2e85eead97f9e0e59557740611c0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"!aliasedSender\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        tail := abi_encode_bytes(value0, add(headStart, 64))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!proofs\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr(base_ref, ptr_to_tail) -> addr\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(1086)))) { revert(0, 0) }\n        addr := add(base_ref, rel_offset_of_tail)\n    }\n    function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 11)\n        mstore(add(headStart, 64), \"!sharedRoot\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"aggregateRoot !exists\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 8)\n        mstore(add(headStart, 64), \"!watcher\")\n        tail := add(headStart, 96)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"already watcher manager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!allowlisted\")\n        tail := add(headStart, 96)\n    }\n    function increment_t_uint32(value) -> ret\n    {\n        let _1 := 0xffffffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_decode_tuple_t_bytes32t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Pausable: paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!data length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_bytes(value1, add(headStart, 64))\n    }\n    function abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"Pausable: not paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"!mirrorConnector\")\n        tail := add(headStart, 96)\n    }\n    function convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32(array) -> value\n    {\n        let length := mload(array)\n        value := mload(add(array, 0x20))\n        if lt(length, 0x20)\n        {\n            value := and(value, shl(shl(3, sub(0x20, length)), not(0)))\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"!MessageStatus.None\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"invalid inboundRoot\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!destination\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!proven\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n        mstore(add(headStart, 64), 96)\n        tail := abi_encode_bytes(value2, add(headStart, 96))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: insufficient balance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    { end := pos }\n    function abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 58)\n        mstore(add(headStart, 64), \"Address: unable to send value, r\")\n        mstore(add(headStart, 96), \"ecipient may have reverted\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"!new rate limit\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value5, value4, value3, value2, value1, value0) -> end\n    {\n        let _1 := shl(224, 0xffffffff)\n        mstore(pos, and(shl(224, value0), _1))\n        mstore(add(pos, 4), value1)\n        mstore(add(pos, 36), and(shl(224, value2), _1))\n        mstore(add(pos, 40), and(shl(224, value3), _1))\n        mstore(add(pos, 44), value4)\n        let length := mload(value5)\n        copy_memory_to_memory_with_cleanup(add(value5, 0x20), add(pos, 76), length)\n        end := add(add(pos, length), 76)\n    }\n    function abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"new root empty\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"root already pending\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"root already proven\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"aggregateRoot empty\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"aggregateRoot !exist\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"aggregateRoot !verified\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function checked_sub_t_uint8(x, y) -> diff\n    {\n        diff := sub(and(x, 0xff), and(y, 0xff))\n        if gt(diff, 0xff) { panic_error_0x11() }\n    }\n    function checked_mul_t_uint8(x, y) -> product\n    {\n        let product_raw := mul(and(x, 0xff), and(y, 0xff))\n        product := and(product_raw, 0xff)\n        if iszero(eq(product, product_raw)) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"!truncated\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"39039":[{"length":32,"start":1218},{"length":32,"start":1649},{"length":32,"start":5671},{"length":32,"start":7244}],"39042":[{"length":32,"start":2244},{"length":32,"start":6276},{"length":32,"start":8608},{"length":32,"start":10856}],"39045":[{"length":32,"start":1403}],"39048":[{"length":32,"start":693}],"39550":[{"length":32,"start":1845},{"length":32,"start":2699},{"length":32,"start":4021},{"length":32,"start":5765}],"39553":[{"length":32,"start":2318},{"length":32,"start":7533},{"length":32,"start":7674}],"39556":[{"length":32,"start":805},{"length":32,"start":7500}]},"linkReferences":{},"object":"6080604052600436106102975760003560e01c80638456cb591161015a578063b95a2001116100c1578063d69f9d611161007a578063d69f9d61146108b2578063d7d317b3146108e6578063d88beda2146108fc578063db1b765914610930578063e0fed01014610950578063fa31de011461097057600080fd5b8063b95a2001146107ed578063c5b350df14610820578063cc39428314610835578063d1851c9214610855578063d232c22014610873578063d2a3cc711461089257600080fd5b8063a01892a511610113578063a01892a514610723578063a792c29b14610757578063ad9c0c2e14610777578063b1f8100d1461078d578063b2f87643146107ad578063b697f531146107cd57600080fd5b80638456cb591461064d5780638d3638f4146106625780638da5cb5b1461069557806398c9f2b9146106b35780639d3117c7146106e35780639fa92f9d1461071057600080fd5b806352a9674b116101fe5780636159ada1116101b75780636159ada11461059d57806365eaf11b146105cd57806368742da6146105e25780636a42b8f8146106025780636b04a93314610618578063715018a61461063857600080fd5b806352a9674b146104b0578063572386ca146104e4578063579c1618146105145780635bd11efc1461052a5780635c975abb1461054a5780635f61e3ec1461056957600080fd5b8063361d88ac11610250578063361d88ac146103e55780633cf52ffb1461041d5780633f4ba83a146104325780634ff746f614610447578063508a109b146104675780635190bc531461048757600080fd5b806314168416146102a35780631eeaabea146102f157806325e3beda146103135780632bb1ae7c146103555780632bbd59ca14610368578063301f07c3146103a557600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b3480156102fd57600080fd5b5061031161030c366004613014565b61099e565b005b34801561031f57600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016102e8565b6103116103633660046130d0565b610a48565b34801561037457600080fd5b50610398610383366004613014565b600f6020526000908152604090205460ff1681565b6040516102e8919061311b565b3480156103b157600080fd5b506103d56103c0366004613014565b600a6020526000908152604090205460ff1681565b60405190151581526020016102e8565b3480156103f157600080fd5b50601054610405906001600160a01b031681565b6040516001600160a01b0390911681526020016102e8565b34801561042957600080fd5b50600254610347565b34801561043e57600080fd5b50610311610beb565b34801561045357600080fd5b506103116104623660046130d0565b610c28565b34801561047357600080fd5b50610311610482366004613143565b610cb8565b34801561049357600080fd5b506103d56104a23660046131f4565b6001600160a01b0316301490565b3480156104bc57600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f057600080fd5b506103d56104ff366004613014565b600c6020526000908152604090205460ff1681565b34801561052057600080fd5b5061034760055481565b34801561053657600080fd5b506103116105453660046131f4565b610f7a565b34801561055657600080fd5b50600354600160a01b900460ff166103d5565b34801561057557600080fd5b506104057f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a957600080fd5b506103d56105b83660046131f4565b600d6020526000908152604090205460ff1681565b3480156105d957600080fd5b50610347610fb1565b3480156105ee57600080fd5b506103116105fd3660046131f4565b61103a565b34801561060e57600080fd5b5062093a80610347565b34801561062457600080fd5b50610311610633366004613014565b6110b7565b34801561064457600080fd5b50610311611182565b34801561065957600080fd5b506103116111ad565b34801561066e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102d7565b3480156106a157600080fd5b506000546001600160a01b0316610405565b3480156106bf57600080fd5b506103d56106ce366004613014565b600b6020526000908152604090205460ff1681565b3480156106ef57600080fd5b506103476106fe366004613014565b60096020526000908152604090205481565b34801561071c57600080fd5b5030610405565b34801561072f57600080fd5b506104057f000000000000000000000000000000000000000000000000000000000000000081565b34801561076357600080fd5b50600454610405906001600160a01b031681565b34801561078357600080fd5b5061034760085481565b34801561079957600080fd5b506103116107a83660046131f4565b611261565b3480156107b957600080fd5b506103116107c83660046131f4565b6112ff565b3480156107d957600080fd5b506103116107e83660046131f4565b61137b565b3480156107f957600080fd5b506102d761080836600461322a565b600e6020526000908152604090205463ffffffff1681565b34801561082c57600080fd5b506103116113fa565b34801561084157600080fd5b50600354610405906001600160a01b031681565b34801561086157600080fd5b506001546001600160a01b0316610405565b34801561087f57600080fd5b506000546001600160a01b0316156103d5565b34801561089e57600080fd5b506103116108ad3660046131f4565b61146a565b3480156108be57600080fd5b506104057f000000000000000000000000000000000000000000000000000000000000000081565b3480156108f257600080fd5b5061034760065481565b34801561090857600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b34801561093c57600080fd5b506103d561094b3660046131f4565b611541565b34801561095c57600080fd5b5061031161096b366004613014565b611552565b34801561097c57600080fd5b5061099061098b366004613245565b611586565b6040516102e89291906132ec565b6000546001600160a01b031633146109c9576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610a0e5760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610a50611755565b43600554600654610a61919061331b565b1115610a80576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0b919061332e565b6000818152600c602052604090205490915060ff1615610b615760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b6044820152606401610a05565b600081604051602001610b7691815260200190565b6040516020818303038152906040529050610b9181846117a2565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610bde90839086903390613347565b60405180910390a1505050565b6000546001600160a01b03163314610c16576040516311a8a1bb60e31b815260040160405180910390fd5b610c1e6118f6565b610c26611946565b565b6010546001600160a01b03163314610c735760405162461bcd60e51b815260206004820152600e60248201526d10b0b634b0b9b2b229b2b73232b960911b6044820152606401610a05565b610c7c8161199b565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610cad929190613385565b60405180910390a150565b610cc0611755565b610cc8611a3b565b83610cff5760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b6044820152606401610a05565b600085856000818110610d1457610d146133af565b9050602002810190610d2691906133c5565b610d3090806133e6565b604051610d3e929190613434565b604051809103902090506000610da58288886000818110610d6157610d616133af565b9050602002810190610d7391906133c5565b60200189896000818110610d8957610d896133af565b9050602002810190610d9b91906133c5565b6104200135611a94565b9050610db381868686611b3b565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610ed95788888263ffffffff16818110610df857610df86133af565b9050602002810190610e0a91906133c5565b610e1490806133e6565b604051610e22929190613434565b604051809103902093506000610e77858b8b8563ffffffff16818110610e4a57610e4a6133af565b9050602002810190610e5c91906133c5565b6020018c8c8663ffffffff16818110610d8957610d896133af565b9050838114610eb65760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b6044820152606401610a05565b506000848152600f60205260409020805460ff1916600190811790915501610dd2565b5060005b818163ffffffff161015610f6557610f5c89898363ffffffff16818110610f0657610f066133af565b9050602002810190610f1891906133c5565b610f2290806133e6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c3692505050565b50600101610edd565b50505050610f736001600755565b5050505050565b6000546001600160a01b03163314610fa5576040516311a8a1bb60e31b815260040160405180910390fd5b610fae81611f13565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611011573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611035919061332e565b905090565b6000546001600160a01b03163314611065576040516311a8a1bb60e31b815260040160405180910390fd5b476110708282611f85565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d826040516110ab91815260200190565b60405180910390a25050565b6000546001600160a01b031633146110e2576040516311a8a1bb60e31b815260040160405180910390fd5b6110ea6118f6565b600081815260096020526040812054900361113f5760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b6044820152606401610a05565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610cad9083815260200190565b6000546001600160a01b03163314610c26576040516311a8a1bb60e31b815260040160405180910390fd5b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa1580156111f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121a9190613444565b6112515760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610a05565b611259611755565b610c266120a3565b6000546001600160a01b0316331461128c576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b0382811691161480156112aa575060025415155b156112c8576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036112f657604051634a2fb73f60e11b815260040160405180910390fd5b610fae816120e6565b6000546001600160a01b0316331461132a576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610cad565b6000546001600160a01b031633146113a6576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610cad565b6001546001600160a01b03163314611425576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426114379190613466565b11611455576040516324e0285f60e21b815260040160405180910390fd5b600154610c26906001600160a01b0316612134565b6000546001600160a01b03163314611495576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b03908116908216036114f35760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e616765720000000000000000006044820152606401610a05565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610cad565b600061154c82612199565b92915050565b6000546001600160a01b0316331461157d576040516311a8a1bb60e31b815260040160405180910390fd5b610fae816121df565b336000908152600d602052604081205460609060ff166115d75760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b6044820152606401610a05565b63ffffffff8086166000908152600e602052604081208054919291909116908261160083613479565b91906101000a81548163ffffffff021916908363ffffffff1602179055509050600061165f7f0000000000000000000000000000000000000000000000000000000000000000611656336001600160a01b031690565b848a8a8a61225d565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af11580156116d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f9919061349c565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f8361172b600184613466565b848760405161173d94939291906134c0565b60405180910390a15090989197509095505050505050565b600354600160a01b900460ff1615610c265760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a05565b81516020146117dd5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a05565b80511561181b5760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a05565b6000634ff746f660e01b8360405160240161183691906134ef565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260035491516349460b4d60e11b81529092506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263928c169a926118bf9291909116908590600401613502565b600060405180830381600087803b1580156118d957600080fd5b505af11580156118ed573d6000803e3d6000fd5b50505050505050565b600354600160a01b900460ff16610c265760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a05565b61194e6118f6565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6003546119b0906001600160a01b0316612199565b6119ef5760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b6044820152606401610a05565b8051602014611a2a5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a05565b610fae611a3682613526565b612295565b600260075403611a8d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a05565b6002600755565b6000806000858152600f602052604090205460ff166002811115611aba57611aba613105565b14611afd5760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b6044820152606401610a05565b611b318484602080602002604051908101604052809291908260208002808284376000920191909152508691506123be9050565b90505b9392505050565b6000848152600b602052604090205460ff16611c3057611b5a8361270c565b6000611b908584602080602002604051908101604052809291908260208002808284376000920191909152508691506123be9050565b9050838114611bd75760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b6044820152606401610a05565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611c269086815260200190565b60405180910390a3505b50505050565b600080611c43838261286c565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611c7b62ffffff198316612890565b63ffffffff1614611cbd5760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b6044820152606401610a05565b6000611cce62ffffff1983166128a5565b905060016000828152600f602052604090205460ff166002811115611cf557611cf5613105565b14611d2c5760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b6044820152606401610a05565b6000818152600f60205260409020805460ff191660021790556001611d917f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061331b565b611d9b9190613466565b5a11611dd25760405162461bcd60e51b8152600401610a05906020808252600490820152632167617360e01b604082015260600190565b6000611de362ffffff1984166128ee565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611e3e62ffffff1988166128ff565b611e4d62ffffff198916612913565b611e5c62ffffff198a16612928565b611e79611e6e62ffffff198c1661293d565b62ffffff191661296b565b604051602401611e8c949392919061354d565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050611ec68585600086856129b4565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890611eff9088908b90869061357c565b60405180910390a150505050505050919050565b611f1c81612a3f565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b80471015611fd55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a05565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612022576040519150601f19603f3d011682016040523d82523d6000602084013e612027565b606091505b505090508061209e5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a05565b505050565b6120ab611755565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861197e3390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60006121c47f0000000000000000000000000000000000000000000000000000000000000000612b42565b6001600160a01b0316826001600160a01b0316149050919050565b60055481036122225760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b6044820152606401610a05565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610cad565b606086868686868660405160200161227a9695949392919061359d565b60405160208183030381529060405290509695505050505050565b806122d35760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b6044820152606401610a05565b600081815260096020526040902054156123265760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b6044820152606401610a05565b6000818152600a602052604090205460ff161561237b5760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b6044820152606401610a05565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610cad9083815260200190565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b8061274f5760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b6044820152606401610a05565b6000818152600a602052604090205460ff16156127695750565b600081815260096020526040812054908190036127bf5760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b6044820152606401610a05565b6008546127cc8243613466565b101561281a5760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f74202176657269666965640000000000000000006044820152606401610a05565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b81516000906020840161288764ffffffffff85168284612bcc565b95945050505050565b600061154c62ffffff19831660286004612c09565b6000806128bb8360781c6001600160601b031690565b6001600160601b0316905060006128db8460181c6001600160601b031690565b6001600160601b03169091209392505050565b600061154c6128fc83612c39565b90565b600061154c62ffffff198316826004612c09565b600061154c62ffffff19831660246004612c09565b600061154c62ffffff19831660046020612c4a565b600061154c604c61295b81601886901c6001600160601b0316613466565b62ffffff19851691906000612d55565b60606000806129838460181c6001600160601b031690565b6001600160601b0316905060405191508192506129a38483602001612dd1565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff8111156129da576129da61302d565b6040519080825280601f01601f191660200182016040528015612a04576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612a25578692505b828152826000602083013e90999098509650505050505050565b6040516326ddea8360e11b81526001600160a01b038281166004830152600060248301819052917f000000000000000000000000000000000000000000000000000000000000000090911690634dbbd50690604401602060405180830381865afa158015612ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad591906135f7565b601054604080516001600160a01b03928316815291831660208301529192507f138b2e0015ac8e1842fbb73cdefea5574fd42dd33df05e84271a7adc811d6b3d910160405180910390a1601080546001600160a01b0319166001600160a01b039290921691909117905550565b6000612b4d82612ec4565b612b6a5760405163253a6fc960e11b815260040160405180910390fd5b816001600160a01b031663d74523b36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154c91906135f7565b600080612bd9838561331b565b9050604051811115612be9575060005b80600003612bfe5762ffffff19915050611b34565b612887858585612f28565b6000612c16826020613614565b612c2190600861362d565b60ff16612c2f858585612c4a565b901c949350505050565b600061154c62ffffff198316602c60205b60008160ff16600003612c5f57506000611b34565b612c728460181c6001600160601b031690565b6001600160601b0316612c8860ff84168561331b565b1115612cf057612ca18460781c6001600160601b031690565b612cb48560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610a05565b60208260ff161115612d155760405163045df3f960e01b815260040160405180910390fd5b600882026000612d2e8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612d6b8660781c6001600160601b031690565b6001600160601b03169050612d7f86612f9f565b84612d8a878461331b565b612d94919061331b565b1115612da75762ffffff19915050612dc9565b612db1858261331b565b9050612dc58364ffffffffff168286612bcc565b9150505b949350505050565b600062ffffff1980841603612df95760405163148d513360e21b815260040160405180910390fd5b612e0283612fd8565b15612e2057604051632ee0949160e11b815260040160405180910390fd5b6000612e358460181c6001600160601b031690565b6001600160601b031690506000612e558560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115612e765760206060fd5b8386858560045afa905080612e9e57604051632af1bd9b60e21b815260040160405180910390fd5b612eb9612eab8860d81c90565b64ffffffffff168786612f28565b979650505050505050565b6000816001600160a01b031663175a260b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f04573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154c9190613444565b60006060601883856001600160601b03821682148015612f50575086816001600160601b0316145b612f895760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610a05565b96831b90961790911b90941790931b9392505050565b6000612fb48260181c6001600160601b031690565b612fc78360781c6001600160601b031690565b016001600160601b03169050919050565b6000612fe48260d81c90565b64ffffffffff1664ffffffffff03612ffe57506001919050565b600061300983612f9f565b604051109392505050565b60006020828403121561302657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261305457600080fd5b813567ffffffffffffffff8082111561306f5761306f61302d565b604051601f8301601f19908116603f011681019082821181831017156130975761309761302d565b816040528381528660208588010111156130b057600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156130e257600080fd5b813567ffffffffffffffff8111156130f957600080fd5b612dc984828501613043565b634e487b7160e01b600052602160045260246000fd5b602081016003831061313d57634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806000610460868803121561315c57600080fd5b853567ffffffffffffffff8082111561317457600080fd5b818801915088601f83011261318857600080fd5b81358181111561319757600080fd5b8960208260051b85010111156131ac57600080fd5b6020928301975095505086013592506104408601878111156131cd57600080fd5b94979396509194604001933592915050565b6001600160a01b0381168114610fae57600080fd5b60006020828403121561320657600080fd5b8135611b34816131df565b803563ffffffff8116811461322557600080fd5b919050565b60006020828403121561323c57600080fd5b611b3482613211565b60008060006060848603121561325a57600080fd5b61326384613211565b925060208401359150604084013567ffffffffffffffff81111561328657600080fd5b61329286828701613043565b9150509250925092565b60005b838110156132b757818101518382015260200161329f565b50506000910152565b600081518084526132d881602086016020860161329c565b601f01601f19169290920160200192915050565b828152604060208201526000611b3160408301846132c0565b634e487b7160e01b600052601160045260246000fd5b8082018082111561154c5761154c613305565b60006020828403121561334057600080fd5b5051919050565b60608152600061335a60608301866132c0565b828103602084015261336c81866132c0565b91505060018060a01b0383166040830152949350505050565b60408152600061339860408301856132c0565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e198336030181126133dc57600080fd5b9190910192915050565b6000808335601e198436030181126133fd57600080fd5b83018035915067ffffffffffffffff82111561341857600080fd5b60200191503681900382131561342d57600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561345657600080fd5b81518015158114611b3457600080fd5b8181038181111561154c5761154c613305565b600063ffffffff80831681810361349257613492613305565b6001019392505050565b600080604083850312156134af57600080fd5b505080516020909101519092909150565b8481528360208201528260408201526080606082015260006134e560808301846132c0565b9695505050505050565b602081526000611b3460208301846132c0565b6001600160a01b0383168152604060208201819052600090611b31908301846132c0565b80516020808301519190811015613547576000198160200360031b1b821691505b50919050565b600063ffffffff8087168352808616602084015250836040830152608060608301526134e560808301846132c0565b838152821515602082015260606040820152600061288760608301846132c0565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c83015282516135e581604c85016020870161329c565b91909101604c01979650505050505050565b60006020828403121561360957600080fd5b8151611b34816131df565b60ff828116828216039081111561154c5761154c613305565b60ff818116838216029081169081811461364957613649613305565b509291505056fea2646970667358221220851eb81b3ec18eca175885bdd1aceac04ca0f0772614793366c7fa3057f1abd864736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x297 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x15A JUMPI DUP1 PUSH4 0xB95A2001 GT PUSH2 0xC1 JUMPI DUP1 PUSH4 0xD69F9D61 GT PUSH2 0x7A JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x8B2 JUMPI DUP1 PUSH4 0xD7D317B3 EQ PUSH2 0x8E6 JUMPI DUP1 PUSH4 0xD88BEDA2 EQ PUSH2 0x8FC JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x930 JUMPI DUP1 PUSH4 0xE0FED010 EQ PUSH2 0x950 JUMPI DUP1 PUSH4 0xFA31DE01 EQ PUSH2 0x970 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB95A2001 EQ PUSH2 0x7ED JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x820 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x835 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x855 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x873 JUMPI DUP1 PUSH4 0xD2A3CC71 EQ PUSH2 0x892 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA01892A5 GT PUSH2 0x113 JUMPI DUP1 PUSH4 0xA01892A5 EQ PUSH2 0x723 JUMPI DUP1 PUSH4 0xA792C29B EQ PUSH2 0x757 JUMPI DUP1 PUSH4 0xAD9C0C2E EQ PUSH2 0x777 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x78D JUMPI DUP1 PUSH4 0xB2F87643 EQ PUSH2 0x7AD JUMPI DUP1 PUSH4 0xB697F531 EQ PUSH2 0x7CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x64D JUMPI DUP1 PUSH4 0x8D3638F4 EQ PUSH2 0x662 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x695 JUMPI DUP1 PUSH4 0x98C9F2B9 EQ PUSH2 0x6B3 JUMPI DUP1 PUSH4 0x9D3117C7 EQ PUSH2 0x6E3 JUMPI DUP1 PUSH4 0x9FA92F9D EQ PUSH2 0x710 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B GT PUSH2 0x1FE JUMPI DUP1 PUSH4 0x6159ADA1 GT PUSH2 0x1B7 JUMPI DUP1 PUSH4 0x6159ADA1 EQ PUSH2 0x59D JUMPI DUP1 PUSH4 0x65EAF11B EQ PUSH2 0x5CD JUMPI DUP1 PUSH4 0x68742DA6 EQ PUSH2 0x5E2 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x602 JUMPI DUP1 PUSH4 0x6B04A933 EQ PUSH2 0x618 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x638 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B EQ PUSH2 0x4B0 JUMPI DUP1 PUSH4 0x572386CA EQ PUSH2 0x4E4 JUMPI DUP1 PUSH4 0x579C1618 EQ PUSH2 0x514 JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x52A JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x569 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x361D88AC GT PUSH2 0x250 JUMPI DUP1 PUSH4 0x361D88AC EQ PUSH2 0x3E5 JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x41D JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x432 JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x447 JUMPI DUP1 PUSH4 0x508A109B EQ PUSH2 0x467 JUMPI DUP1 PUSH4 0x5190BC53 EQ PUSH2 0x487 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x2A3 JUMPI DUP1 PUSH4 0x1EEAABEA EQ PUSH2 0x2F1 JUMPI DUP1 PUSH4 0x25E3BEDA EQ PUSH2 0x313 JUMPI DUP1 PUSH4 0x2BB1AE7C EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0x2BBD59CA EQ PUSH2 0x368 JUMPI DUP1 PUSH4 0x301F07C3 EQ PUSH2 0x3A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x29E JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D7 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x30C CALLDATASIZE PUSH1 0x4 PUSH2 0x3014 JUMP JUMPDEST PUSH2 0x99E JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x31F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E8 JUMP JUMPDEST PUSH2 0x311 PUSH2 0x363 CALLDATASIZE PUSH1 0x4 PUSH2 0x30D0 JUMP JUMPDEST PUSH2 0xA48 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x398 PUSH2 0x383 CALLDATASIZE PUSH1 0x4 PUSH2 0x3014 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2E8 SWAP2 SWAP1 PUSH2 0x311B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x3C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3014 JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x10 SLOAD PUSH2 0x405 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x429 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x347 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x43E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0xBEB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x453 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x462 CALLDATASIZE PUSH1 0x4 PUSH2 0x30D0 JUMP JUMPDEST PUSH2 0xC28 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x473 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x482 CALLDATASIZE PUSH1 0x4 PUSH2 0x3143 JUMP JUMPDEST PUSH2 0xCB8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x493 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x4A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x31F4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D7 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x4FF CALLDATASIZE PUSH1 0x4 PUSH2 0x3014 JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x520 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x536 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x545 CALLDATASIZE PUSH1 0x4 PUSH2 0x31F4 JUMP JUMPDEST PUSH2 0xF7A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x556 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3D5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x575 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x405 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x5B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x31F4 JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0xFB1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x5FD CALLDATASIZE PUSH1 0x4 PUSH2 0x31F4 JUMP JUMPDEST PUSH2 0x103A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x60E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x347 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x624 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x633 CALLDATASIZE PUSH1 0x4 PUSH2 0x3014 JUMP JUMPDEST PUSH2 0x10B7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x644 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x1182 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x659 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x11AD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x66E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x0 PUSH2 0x2D7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x405 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x6CE CALLDATASIZE PUSH1 0x4 PUSH2 0x3014 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x6FE CALLDATASIZE PUSH1 0x4 PUSH2 0x3014 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x71C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH2 0x405 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x72F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x405 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x763 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x405 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x783 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x799 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x7A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x31F4 JUMP JUMPDEST PUSH2 0x1261 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x7C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x31F4 JUMP JUMPDEST PUSH2 0x12FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x7E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x31F4 JUMP JUMPDEST PUSH2 0x137B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D7 PUSH2 0x808 CALLDATASIZE PUSH1 0x4 PUSH2 0x322A JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x82C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x13FA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x841 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x405 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x861 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x405 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x87F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x3D5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x89E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x8AD CALLDATASIZE PUSH1 0x4 PUSH2 0x31F4 JUMP JUMPDEST PUSH2 0x146A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x405 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x908 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x93C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x94B CALLDATASIZE PUSH1 0x4 PUSH2 0x31F4 JUMP JUMPDEST PUSH2 0x1541 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x96B CALLDATASIZE PUSH1 0x4 PUSH2 0x3014 JUMP JUMPDEST PUSH2 0x1552 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x97C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x990 PUSH2 0x98B CALLDATASIZE PUSH1 0x4 PUSH2 0x3245 JUMP JUMPDEST PUSH2 0x1586 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2E8 SWAP3 SWAP2 SWAP1 PUSH2 0x32EC JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9C9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD DUP2 SUB PUSH2 0xA0E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2164656C6179426C6F636B73 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLER DUP2 MSTORE DUP2 SWAP1 PUSH32 0x8BD16320F3B60336ED5FD2A770EB7453E7E71CFEF4462ADDFFD7AE9DFE201C8E SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x8 SSTORE JUMP JUMPDEST PUSH2 0xA50 PUSH2 0x1755 JUMP JUMPDEST NUMBER PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD PUSH2 0xA61 SWAP2 SWAP1 PUSH2 0x331B JUMP JUMPDEST GT ISZERO PUSH2 0xA80 JUMPI PUSH1 0x40 MLOAD PUSH4 0x46CF2AF1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST NUMBER PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB0B SWAP2 SWAP1 PUSH2 0x332E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xB61 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1C9BDBDD08185B1C9958591E481CD95B9D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xB76 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH2 0xB91 DUP2 DUP5 PUSH2 0x17A2 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 SWAP1 PUSH2 0xBDE SWAP1 DUP4 SWAP1 DUP7 SWAP1 CALLER SWAP1 PUSH2 0x3347 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC16 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC1E PUSH2 0x18F6 JUMP JUMPDEST PUSH2 0xC26 PUSH2 0x1946 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC73 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x10B0B634B0B9B2B229B2B73232B9 PUSH1 0x91 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0xC7C DUP2 PUSH2 0x199B JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0xCAD SWAP3 SWAP2 SWAP1 PUSH2 0x3385 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xCC0 PUSH2 0x1755 JUMP JUMPDEST PUSH2 0xCC8 PUSH2 0x1A3B JUMP JUMPDEST DUP4 PUSH2 0xCFF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x2170726F6F6673 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD14 JUMPI PUSH2 0xD14 PUSH2 0x33AF JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD26 SWAP2 SWAP1 PUSH2 0x33C5 JUMP JUMPDEST PUSH2 0xD30 SWAP1 DUP1 PUSH2 0x33E6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD3E SWAP3 SWAP2 SWAP1 PUSH2 0x3434 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xDA5 DUP3 DUP9 DUP9 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD61 JUMPI PUSH2 0xD61 PUSH2 0x33AF JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD73 SWAP2 SWAP1 PUSH2 0x33C5 JUMP JUMPDEST PUSH1 0x20 ADD DUP10 DUP10 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD89 JUMPI PUSH2 0xD89 PUSH2 0x33AF JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD9B SWAP2 SWAP1 PUSH2 0x33C5 JUMP JUMPDEST PUSH2 0x420 ADD CALLDATALOAD PUSH2 0x1A94 JUMP JUMPDEST SWAP1 POP PUSH2 0xDB3 DUP2 DUP7 DUP7 DUP7 PUSH2 0x1B3B JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP7 SWAP1 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xED9 JUMPI DUP9 DUP9 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xDF8 JUMPI PUSH2 0xDF8 PUSH2 0x33AF JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE0A SWAP2 SWAP1 PUSH2 0x33C5 JUMP JUMPDEST PUSH2 0xE14 SWAP1 DUP1 PUSH2 0x33E6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE22 SWAP3 SWAP2 SWAP1 PUSH2 0x3434 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP4 POP PUSH1 0x0 PUSH2 0xE77 DUP6 DUP12 DUP12 DUP6 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xE4A JUMPI PUSH2 0xE4A PUSH2 0x33AF JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE5C SWAP2 SWAP1 PUSH2 0x33C5 JUMP JUMPDEST PUSH1 0x20 ADD DUP13 DUP13 DUP7 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xD89 JUMPI PUSH2 0xD89 PUSH2 0x33AF JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0xEB6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x85CDA185C9959149BDBDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE ADD PUSH2 0xDD2 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xF65 JUMPI PUSH2 0xF5C DUP10 DUP10 DUP4 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xF06 JUMPI PUSH2 0xF06 PUSH2 0x33AF JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xF18 SWAP2 SWAP1 PUSH2 0x33C5 JUMP JUMPDEST PUSH2 0xF22 SWAP1 DUP1 PUSH2 0x33E6 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1C36 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xEDD JUMP JUMPDEST POP POP POP POP PUSH2 0xF73 PUSH1 0x1 PUSH1 0x7 SSTORE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xFA5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFAE DUP2 PUSH2 0x1F13 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1011 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1035 SWAP2 SWAP1 PUSH2 0x332E JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1065 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SELFBALANCE PUSH2 0x1070 DUP3 DUP3 PUSH2 0x1F85 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEAFF4B37086828766AD3268786972C0CD24259D4C87A80F9D3963A3C3D999B0D DUP3 PUSH1 0x40 MLOAD PUSH2 0x10AB SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x10EA PUSH2 0x18F6 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SUB PUSH2 0x113F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x616767726567617465526F6F742021657869737473 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xF51534ECF10A58DB36CE4F5180F59DEDDF3B3EB7C5E7454E602C2F80A40CC739 SWAP1 PUSH2 0xCAD SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC26 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x121A SWAP2 SWAP1 PUSH2 0x3444 JUMP JUMPDEST PUSH2 0x1251 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0x1259 PUSH2 0x1755 JUMP JUMPDEST PUSH2 0xC26 PUSH2 0x20A3 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x128C JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x12AA JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x12C8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x12F6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFAE DUP2 PUSH2 0x20E6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x132A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x384859C5EF5FAFAC31E8BC92CE7FB48B1F2C74C4DD5E212EB84EC202FA5D9FAD SWAP2 ADD PUSH2 0xCAD JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x13A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xD65ECA5D561D3A4568C87B9B13CED4AB52A69EDADFDFDB22D76BC595F36D7D87 SWAP2 ADD PUSH2 0xCAD JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1425 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x1437 SWAP2 SWAP1 PUSH2 0x3466 JUMP JUMPDEST GT PUSH2 0x1455 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0xC26 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2134 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1495 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0x14F3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616C72656164792077617463686572206D616E61676572000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC16D059E43D7F8E29CCB4E001A2F249D3C59E274925D6A6BC3912943441D9F6C SWAP1 PUSH1 0x20 ADD PUSH2 0xCAD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x154C DUP3 PUSH2 0x2199 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x157D JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFAE DUP2 PUSH2 0x21DF JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x60 SWAP1 PUSH1 0xFF AND PUSH2 0x15D7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x8585B1B1BDDDB1A5CDD1959 PUSH1 0xA2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP3 PUSH2 0x1600 DUP4 PUSH2 0x3479 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH4 0xFFFFFFFF AND MUL OR SWAP1 SSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0x165F PUSH32 0x0 PUSH2 0x1656 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP5 DUP11 DUP11 DUP11 PUSH2 0x225D JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH4 0x2D287E43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2D287E43 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16D5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16F9 SWAP2 SWAP1 PUSH2 0x349C JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH32 0x40F08EE347FC927AE45902EDC87DEBB024AAB1A311943731968607F603F2152F DUP4 PUSH2 0x172B PUSH1 0x1 DUP5 PUSH2 0x3466 JUMP JUMPDEST DUP5 DUP8 PUSH1 0x40 MLOAD PUSH2 0x173D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x34C0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP SWAP1 SWAP9 SWAP2 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xC26 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x17DD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x181B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 PUSH4 0x4FF746F6 PUSH1 0xE0 SHL DUP4 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1836 SWAP2 SWAP1 PUSH2 0x34EF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x3 SLOAD SWAP2 MLOAD PUSH4 0x49460B4D PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND SWAP3 PUSH4 0x928C169A SWAP3 PUSH2 0x18BF SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x3502 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x18ED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xC26 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0x194E PUSH2 0x18F6 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x19B0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2199 JUMP JUMPDEST PUSH2 0x19EF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x10B6B4B93937B921B7B73732B1BA37B9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0x1A2A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0xFAE PUSH2 0x1A36 DUP3 PUSH2 0x3526 JUMP JUMPDEST PUSH2 0x2295 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SLOAD SUB PUSH2 0x1A8D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1ABA JUMPI PUSH2 0x1ABA PUSH2 0x3105 JUMP JUMPDEST EQ PUSH2 0x1AFD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x214D6573736167655374617475732E4E6F6E65 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0x1B31 DUP5 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x23BE SWAP1 POP JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1C30 JUMPI PUSH2 0x1B5A DUP4 PUSH2 0x270C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B90 DUP6 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x23BE SWAP1 POP JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0x1BD7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1A5B9D985B1A59081A5B989BDD5B99149BDBDD PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP5 SWAP1 DUP7 SWAP1 PUSH32 0x7EC1EA51FE3DB53E55ED9D922854BC2156F467FF2F87D74E2086DAE2C84A88A8 SWAP1 PUSH2 0x1C26 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1C43 DUP4 DUP3 PUSH2 0x286C JUMP JUMPDEST SWAP1 POP PUSH4 0xFFFFFFFF PUSH32 0x0 AND PUSH2 0x1C7B PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x2890 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x1CBD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B232B9BA34B730BA34B7B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CCE PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x28A5 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1CF5 JUMPI PUSH2 0x1CF5 PUSH2 0x3105 JUMP JUMPDEST EQ PUSH2 0x1D2C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x10B83937BB32B7 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x2 OR SWAP1 SSTORE PUSH1 0x1 PUSH2 0x1D91 PUSH32 0x0 PUSH32 0x0 PUSH2 0x331B JUMP JUMPDEST PUSH2 0x1D9B SWAP2 SWAP1 PUSH2 0x3466 JUMP JUMPDEST GAS GT PUSH2 0x1DD2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA05 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x21676173 PUSH1 0xE0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DE3 PUSH3 0xFFFFFF NOT DUP5 AND PUSH2 0x28EE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH32 0x0 SWAP2 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x1E3E PUSH3 0xFFFFFF NOT DUP9 AND PUSH2 0x28FF JUMP JUMPDEST PUSH2 0x1E4D PUSH3 0xFFFFFF NOT DUP10 AND PUSH2 0x2913 JUMP JUMPDEST PUSH2 0x1E5C PUSH3 0xFFFFFF NOT DUP11 AND PUSH2 0x2928 JUMP JUMPDEST PUSH2 0x1E79 PUSH2 0x1E6E PUSH3 0xFFFFFF NOT DUP13 AND PUSH2 0x293D JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND PUSH2 0x296B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1E8C SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x354D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xAB2DC3F5 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 POP PUSH2 0x1EC6 DUP6 DUP6 PUSH1 0x0 DUP7 DUP6 PUSH2 0x29B4 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP10 POP SWAP3 POP PUSH32 0xD42DE95A9B26F1BE134C8ECCE389DC4FCFA18753D01661B7B361233569E8FE48 SWAP1 PUSH2 0x1EFF SWAP1 DUP9 SWAP1 DUP12 SWAP1 DUP7 SWAP1 PUSH2 0x357C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1F1C DUP2 PUSH2 0x2A3F JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x1FD5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2022 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2027 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x209E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA05 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x20AB PUSH2 0x1755 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x197E CALLER SWAP1 JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x21C4 PUSH32 0x0 PUSH2 0x2B42 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 SUB PUSH2 0x2222 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x85B995DC81C985D19481B1A5B5A5D PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0x8E7FA5E406CB856AAB05575E45EA011C6748376CC1B5229E3D67B92986406A15 SWAP2 ADD PUSH2 0xCAD JUMP JUMPDEST PUSH1 0x60 DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x227A SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x359D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x22D3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x6E657720726F6F7420656D707479 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x2326 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x726F6F7420616C72656164792070656E64696E67 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x237B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x3937B7BA1030B63932B0B23C90383937BB32B7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 NUMBER SWAP1 SSTORE MLOAD PUSH32 0x84EF18531155AFDB0E64FF905D67044AE3AAC63A6FBA4661CFD9C4C14F289BC8 SWAP1 PUSH2 0xCAD SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x5 DUP3 DUP2 SHL DUP3 AND SWAP5 DUP6 MSTORE DUP4 MLOAD SWAP5 DUP3 SUB SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x40 PUSH1 0x0 DUP2 DUP2 KECCAK256 PUSH1 0x2 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x4 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP3 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x8 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x10 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 DUP5 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 DUP4 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 SWAP1 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xE0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x100 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x200 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x120 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x400 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x140 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x800 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x160 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x1000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x2000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x4000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1C0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x8000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1E0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH3 0x10000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x20000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x220 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x40000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x240 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x80000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x260 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x100000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x280 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x200000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x400000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x800000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2E0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x1000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x300 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x2000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x320 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x4000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x340 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x8000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x360 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x10000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x380 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x20000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x40000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x80000000 SWAP1 SWAP5 AND ISZERO SWAP1 SWAP6 SHL SWAP2 DUP3 SWAP1 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x3E0 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x274F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x616767726567617465526F6F7420656D707479 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2769 JUMPI POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x27BF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x1859D9DC9959D85D19549BDBDD0808595E1A5CDD PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x27CC DUP3 NUMBER PUSH2 0x3466 JUMP JUMPDEST LT ISZERO PUSH2 0x281A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616767726567617465526F6F7420217665726966696564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP4 SWAP2 PUSH32 0x36B314ABA9F663B4D3EF3288AE489341CC5E6A2725A05FA2B72DF7A27E03F42A SWAP2 LOG2 POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0x2887 PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x2BCC JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x154C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x28 PUSH1 0x4 PUSH2 0x2C09 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x28BB DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x28DB DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 SWAP2 KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x154C PUSH2 0x28FC DUP4 PUSH2 0x2C39 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x154C PUSH3 0xFFFFFF NOT DUP4 AND DUP3 PUSH1 0x4 PUSH2 0x2C09 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x154C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x24 PUSH1 0x4 PUSH2 0x2C09 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x154C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x4 PUSH1 0x20 PUSH2 0x2C4A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x154C PUSH1 0x4C PUSH2 0x295B DUP2 PUSH1 0x18 DUP7 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x3466 JUMP JUMPDEST PUSH3 0xFFFFFF NOT DUP6 AND SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2D55 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x2983 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x40 MLOAD SWAP2 POP DUP2 SWAP3 POP PUSH2 0x29A3 DUP5 DUP4 PUSH1 0x20 ADD PUSH2 0x2DD1 JUMP JUMPDEST POP DUP2 DUP2 ADD PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH2 0xFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x29DA JUMPI PUSH2 0x29DA PUSH2 0x302D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2A04 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP8 MLOAD PUSH1 0x20 DUP10 ADD DUP12 DUP15 DUP15 CALL SWAP2 POP RETURNDATASIZE SWAP3 POP DUP7 DUP4 GT ISZERO PUSH2 0x2A25 JUMPI DUP7 SWAP3 POP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x26DDEA83 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP4 ADD DUP2 SWAP1 MSTORE SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x4DBBD506 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2AB1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2AD5 SWAP2 SWAP1 PUSH2 0x35F7 JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH32 0x138B2E0015AC8E1842FBB73CDEFEA5574FD42DD33DF05E84271A7ADC811D6B3D SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x10 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2B4D DUP3 PUSH2 0x2EC4 JUMP JUMPDEST PUSH2 0x2B6A JUMPI PUSH1 0x40 MLOAD PUSH4 0x253A6FC9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD74523B3 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2BA8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x154C SWAP2 SWAP1 PUSH2 0x35F7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2BD9 DUP4 DUP6 PUSH2 0x331B JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x2BE9 JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x2BFE JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x1B34 JUMP JUMPDEST PUSH2 0x2887 DUP6 DUP6 DUP6 PUSH2 0x2F28 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C16 DUP3 PUSH1 0x20 PUSH2 0x3614 JUMP JUMPDEST PUSH2 0x2C21 SWAP1 PUSH1 0x8 PUSH2 0x362D JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x2C2F DUP6 DUP6 DUP6 PUSH2 0x2C4A JUMP JUMPDEST SWAP1 SHR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x154C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x2C PUSH1 0x20 JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0x2C5F JUMPI POP PUSH1 0x0 PUSH2 0x1B34 JUMP JUMPDEST PUSH2 0x2C72 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x2C88 PUSH1 0xFF DUP5 AND DUP6 PUSH2 0x331B JUMP JUMPDEST GT ISZERO PUSH2 0x2CF0 JUMPI PUSH2 0x2CA1 DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2CB4 DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x2D15 JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0x2D2E DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT DUP5 ADD SAR SWAP2 SWAP1 SWAP6 ADD MLOAD AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2D6B DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH2 0x2D7F DUP7 PUSH2 0x2F9F JUMP JUMPDEST DUP5 PUSH2 0x2D8A DUP8 DUP5 PUSH2 0x331B JUMP JUMPDEST PUSH2 0x2D94 SWAP2 SWAP1 PUSH2 0x331B JUMP JUMPDEST GT ISZERO PUSH2 0x2DA7 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x2DC9 JUMP JUMPDEST PUSH2 0x2DB1 DUP6 DUP3 PUSH2 0x331B JUMP JUMPDEST SWAP1 POP PUSH2 0x2DC5 DUP4 PUSH5 0xFFFFFFFFFF AND DUP3 DUP7 PUSH2 0x2BCC JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFFFFFF NOT DUP1 DUP5 AND SUB PUSH2 0x2DF9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x148D5133 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2E02 DUP4 PUSH2 0x2FD8 JUMP JUMPDEST ISZERO PUSH2 0x2E20 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EE09491 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2E35 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2E55 DUP6 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD SWAP2 POP DUP6 DUP3 GT ISZERO PUSH2 0x2E76 JUMPI PUSH1 0x20 PUSH1 0x60 REVERT JUMPDEST DUP4 DUP7 DUP6 DUP6 PUSH1 0x4 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x2E9E JUMPI PUSH1 0x40 MLOAD PUSH4 0x2AF1BD9B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2EB9 PUSH2 0x2EAB DUP9 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND DUP8 DUP7 PUSH2 0x2F28 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x175A260B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x154C SWAP2 SWAP1 PUSH2 0x3444 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0x2F50 JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0x2F89 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2FB4 DUP3 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2FC7 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2FE4 DUP3 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH5 0xFFFFFFFFFF SUB PUSH2 0x2FFE JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3009 DUP4 PUSH2 0x2F9F JUMP JUMPDEST PUSH1 0x40 MLOAD LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3026 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3054 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x306F JUMPI PUSH2 0x306F PUSH2 0x302D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x3097 JUMPI PUSH2 0x3097 PUSH2 0x302D JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x30B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x30F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2DC9 DUP5 DUP3 DUP6 ADD PUSH2 0x3043 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH2 0x313D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x460 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x315C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x3174 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x3197 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x31AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 DUP4 ADD SWAP8 POP SWAP6 POP POP DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x440 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x31CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x40 ADD SWAP4 CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xFAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1B34 DUP2 PUSH2 0x31DF JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x323C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B34 DUP3 PUSH2 0x3211 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x325A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3263 DUP5 PUSH2 0x3211 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3286 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3292 DUP7 DUP3 DUP8 ADD PUSH2 0x3043 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x32B7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x329F JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x32D8 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x329C JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1B31 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x32C0 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x154C JUMPI PUSH2 0x154C PUSH2 0x3305 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3340 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x335A PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x32C0 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x336C DUP2 DUP7 PUSH2 0x32C0 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3398 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x32C0 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x43E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x33DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x33FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x3418 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x342D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3456 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1B34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x154C JUMPI PUSH2 0x154C PUSH2 0x3305 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x3492 JUMPI PUSH2 0x3492 PUSH2 0x3305 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x34AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x34E5 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x32C0 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1B34 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x32C0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x1B31 SWAP1 DUP4 ADD DUP5 PUSH2 0x32C0 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x3547 JUMPI PUSH1 0x0 NOT DUP2 PUSH1 0x20 SUB PUSH1 0x3 SHL SHL DUP3 AND SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x34E5 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x32C0 JUMP JUMPDEST DUP4 DUP2 MSTORE DUP3 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2887 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x32C0 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP1 DUP10 PUSH1 0xE0 SHL AND DUP4 MSTORE DUP8 PUSH1 0x4 DUP5 ADD MSTORE DUP1 DUP8 PUSH1 0xE0 SHL AND PUSH1 0x24 DUP5 ADD MSTORE DUP1 DUP7 PUSH1 0xE0 SHL AND PUSH1 0x28 DUP5 ADD MSTORE POP DUP4 PUSH1 0x2C DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x35E5 DUP2 PUSH1 0x4C DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x329C JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x4C ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3609 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1B34 DUP2 PUSH2 0x31DF JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x154C JUMPI PUSH2 0x154C PUSH2 0x3305 JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND MUL SWAP1 DUP2 AND SWAP1 DUP2 DUP2 EQ PUSH2 0x3649 JUMPI PUSH2 0x3649 PUSH2 0x3305 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP6 0x1E 0xB8 SHL RETURNDATACOPY 0xC1 DUP15 0xCA OR PC DUP6 0xBD 0xD1 0xAC 0xEA 0xC0 0x4C LOG0 CREATE PUSH24 0x2614793366C7FA3057F1ABD864736F6C6343000811003300 ","sourceMap":"422:3270:122:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1587:37:116;;;;;;;;;;;;;;;;;;188:10:181;176:23;;;158:42;;146:2;131:18;1587:37:116;;;;;;;;8274:213:120;;;;;;;;;;-1:-1:-1;8274:213:120;;;;;:::i;:::-;;:::i;:::-;;3780:36;;;;;;;;;;;;;;;;;;542:25:181;;;530:2;515:18;3780:36:120;396:177:181;11079:368:120;;;;;;:::i;:::-;;:::i;5679:49::-;;;;;;;;;;-1:-1:-1;5679:49:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;4723:52::-;;;;;;;;;;-1:-1:-1;4723:52:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2592:14:181;;2585:22;2567:41;;2555:2;2540:18;4723:52:120;2427:187:181;866:28:122;;;;;;;;;;-1:-1:-1;866:28:122;;;;-1:-1:-1;;;;;866:28:122;;;;;;-1:-1:-1;;;;;2783:32:181;;;2765:51;;2753:2;2738:18;866:28:122;2619:203:181;1949:112:168;;;;;;;;;;-1:-1:-1;2029:27:168;;1949:112;;1810:70:114;;;;;;;;;;;;;:::i;1887:153:122:-;;;;;;;;;;-1:-1:-1;1887:153:122;;;;;:::i;:::-;;:::i;14590:2124:120:-;;;;;;;;;;-1:-1:-1;14590:2124:120;;;;;:::i;:::-;;:::i;805:125:117:-;;;;;;;;;;-1:-1:-1;805:125:117;;;;;:::i;:::-;-1:-1:-1;;;;;891:34:117;920:4;891:34;;805:125;1268:30:116;;;;;;;;;;;;;;;5237:48:120;;;;;;;;;;-1:-1:-1;5237:48:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;853:30:167;;;;;;;;;;;;;;;;3939:119:116;;;;;;;;;;-1:-1:-1;3939:119:116;;;;;:::i;:::-;;:::i;1615:84:51:-;;;;;;;;;;-1:-1:-1;1685:7:51;;-1:-1:-1;;;1685:7:51;;;;1615:84;;1451:37:116;;;;;;;;;;;;;;;5424:50:120;;;;;;;;;;-1:-1:-1;5424:50:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;10615:87;;;;;;;;;;;;;:::i;9896:185::-;;;;;;;;;;-1:-1:-1;9896:185:120;;;;;:::i;:::-;;:::i;2151:79:168:-;;;;;;;;;;-1:-1:-1;1530:6:168;2151:79;;9312:328:120;;;;;;;;;;-1:-1:-1;9312:328:120;;;;;:::i;:::-;;:::i;10330:97::-;;;;;;;;;;;;;:::i;2321:71:114:-;;;;;;;;;;;;;:::i;10853:87:120:-;;;;;;;;;;-1:-1:-1;10929:6:120;10853:87;;1641:79:168;;;;;;;;;;-1:-1:-1;1687:7:168;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;5017:50:120;;;;;;;;;;-1:-1:-1;5017:50:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;4312:56;;;;;;;;;;-1:-1:-1;4312:56:120;;;;;:::i;:::-;;;;;;;;;;;;;;715:86:117;;;;;;;;;;-1:-1:-1;790:4:117;715:86;;3501:41:120;;;;;;;;;;;;;;;911:36:114;;;;;;;;;;-1:-1:-1;911:36:114;;;;-1:-1:-1;;;;;911:36:114;;;3276:26:120;;;;;;;;;;;;;;;;3321:420:168;;;;;;;;;;-1:-1:-1;3321:420:168;;;;;:::i;:::-;;:::i;8018:134:120:-;;;;;;;;;;-1:-1:-1;8018:134:120;;;;;:::i;:::-;;:::i;7757:129::-;;;;;;;;;;-1:-1:-1;7757:129:120;;;;;:::i;:::-;;:::i;5551:39::-;;;;;;;;;;-1:-1:-1;5551:39:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;4404:539:168;;;;;;;;;;;;;:::i;1705:30:116:-;;;;;;;;;;-1:-1:-1;1705:30:116;;;;-1:-1:-1;;;;;1705:30:116;;;1792:85:168;;;;;;;;;;-1:-1:-1;1863:9:168;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;;;;;;;;;;-1:-1:-1;3097:4:168;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;1457:263:114;;;;;;;;;;-1:-1:-1;1457:263:114;;;;;:::i;:::-;;:::i;1363:28:116:-;;;;;;;;;;;;;;;959::167;;;;;;;;;;;;;;;;3640:36:120;;;;;;;;;;;;;;;4490:107:116;;;;;;;;;;-1:-1:-1;4490:107:116;;;;;:::i;:::-;;:::i;8892::120:-;;;;;;;;;;-1:-1:-1;8892:107:120;;;;;:::i;:::-;;:::i;11954:1067::-;;;;;;;;;;-1:-1:-1;11954:1067:120;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;8274:213::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;8367:11:120::1;;8351:12;:27:::0;8343:52:::1;;;::::0;-1:-1:-1;;;8343:52:120;;6873:2:181;8343:52:120::1;::::0;::::1;6855:21:181::0;6912:2;6892:18;;;6885:30;-1:-1:-1;;;6931:18:181;;;6924:42;6983:18;;8343:52:120::1;;;;;;;;;8406:44;::::0;8439:10:::1;2765:51:181::0;;8425:12:120;;8406:44:::1;::::0;2753:2:181;2738:18;8406:44:120::1;;;;;;;8456:11;:26:::0;8274:213::o;11079:368::-;1239:19:51;:17;:19::i;:::-;1418:12:167::1;1400:15;;1384:13;;:31;;;;:::i;:::-;:46;1380:124;;;1447:50;;-1:-1:-1::0;;;1447:50:167::1;;;;;;;;;;;1380:124;1595:12;1579:13;:28;;;;11169:12:120::2;11184:6;-1:-1:-1::0;;;;;11184:11:120::2;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11211:22;::::0;;;:16:::2;:22;::::0;;;;;11169:28;;-1:-1:-1;11211:22:120::2;;:31;11203:61;;;::::0;-1:-1:-1;;;11203:61:120;;7665:2:181;11203:61:120::2;::::0;::::2;7647:21:181::0;7704:2;7684:18;;;7677:30;-1:-1:-1;;;7723:18:181;;;7716:47;7780:18;;11203:61:120::2;7463:341:181::0;11203:61:120::2;11270:18;11308:4;11291:22;;;;;;7938:19:181::0;;7982:2;7973:12;;7809:182;11291:22:120::2;;;;;;;;;;;;;11270:43;;11319:33;11332:5;11339:12;11319;:33::i;:::-;11358:22;::::0;;;:16:::2;:22;::::0;;;;;;:29;;-1:-1:-1;;11358:29:120::2;11383:4;11358:29;::::0;;11398:44;::::2;::::0;::::2;::::0;11410:5;;11417:12;;11431:10:::2;::::0;11398:44:::2;:::i;:::-;;;;;;;;11163:284;;11079:368:::0;:::o;1810:70:114:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1486:16:51::1;:14;:16::i;:::-;1865:10:114::2;:8;:10::i;:::-;1810:70::o:0;1887:153:122:-;1068:13;;-1:-1:-1;;;;;1068:13:122;1054:10;:27;1046:54;;;;-1:-1:-1;;;1046:54:122;;8677:2:181;1046:54:122;;;8659:21:181;8716:2;8696:18;;;8689:30;-1:-1:-1;;;8735:18:181;;;8728:44;8789:18;;1046:54:122;8475:338:181;1046:54:122;1967:22:::1;1983:5;1967:15;:22::i;:::-;2000:35;2017:5;2024:10;2000:35;;;;;;;:::i;:::-;;;;;;;;1887:153:::0;:::o;14590:2124:120:-;1239:19:51;:17;:19::i;:::-;2261:21:52::1;:19;:21::i;:::-;14839:18:120::0;14831:38:::2;;;::::0;-1:-1:-1;;;14831:38:120;;9339:2:181;14831:38:120::2;::::0;::::2;9321:21:181::0;9378:1;9358:18;;;9351:29;-1:-1:-1;;;9396:18:181;;;9389:37;9443:18;;14831:38:120::2;9137:330:181::0;14831:38:120::2;15122:20;15155:7;;15163:1;15155:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;15145:29;;;;;;;:::i;:::-;;;;;;;;15122:52;;15304:20;15327:69;15348:12;15362:7;;15370:1;15362:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:15;;15379:7;;15387:1;15379:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:16;;;15327:20;:69::i;:::-;15304:92;;15485:79;15502:12;15516:14;15532;15548:15;15485:16;:79::i;:::-;15667:22;::::0;;;:8:::2;:22;::::0;;;;:45;;-1:-1:-1;;15667:45:120::2;15692:20;15667:45:::0;;::::2;::::0;;;15852:7;;15872:441:::2;15895:3;15891:1;:7;;;15872:441;;;15935:7;;15943:1;15935:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;15925:29;;;;;;;:::i;:::-;;;;;;;;15910:44;;15962:23;15988:69;16009:12;16023:7;;16031:1;16023:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:15;;16040:7;;16048:1;16040:10;;;;;;;;;:::i;15988:69::-;15962:95;;16157:12;16138:15;:31;16130:55;;;::::0;-1:-1:-1;;;16130:55:120;;10938:2:181;16130:55:120::2;::::0;::::2;10920:21:181::0;10977:2;10957:18;;;10950:30;-1:-1:-1;;;10996:18:181;;;10989:41;11047:18;;16130:55:120::2;10736:335:181::0;16130:55:120::2;-1:-1:-1::0;16221:22:120::2;::::0;;;:8:::2;:22;::::0;;;;:45;;-1:-1:-1;;16221:45:120::2;16246:20;16221:45:::0;;::::2;::::0;;;16295:3:::2;15872:441;;;;16604:8;16599:111;16622:3;16618:1;:7;;;16599:111;;;16637:27;16645:7;;16653:1;16645:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;16637:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;16637:7:120::2;::::0;-1:-1:-1;;;16637:27:120:i:2;:::-;-1:-1:-1::0;16692:3:120::2;;16599:111;;;;14783:1931;;;2303:20:52::1;1716:1:::0;2809:7;:22;2629:209;2303:20:::1;14590:2124:120::0;;;;;:::o;3939:119:116:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4016:37:116::1;4036:16;4016:19;:37::i;:::-;3939:119:::0;:::o;10615:87:120:-;10662:7;10684:6;-1:-1:-1;;;;;10684:11:120;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10677:20;;10615:87;:::o;9896:185::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;9972:21:120::1;9999:39;10025:3:::0;9972:21;9999:17:::1;:39::i;:::-;10064:3;-1:-1:-1::0;;;;;10049:27:120::1;;10069:6;10049:27;;;;542:25:181::0;;530:2;515:18;;396:177;10049:27:120::1;;;;;;;;9949:132;9896:185:::0;:::o;9312:328::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1486:16:51::1;:14;:16::i;:::-;9467:38:120::2;::::0;;;:21:::2;:38;::::0;;;;;:43;;9459:77:::2;;;::::0;-1:-1:-1;;;9459:77:120;;11278:2:181;9459:77:120::2;::::0;::::2;11260:21:181::0;11317:2;11297:18;;;11290:30;-1:-1:-1;;;11336:18:181;;;11329:51;11397:18;;9459:77:120::2;11076:345:181::0;9459:77:120::2;9549:38;::::0;;;:21:::2;:38;::::0;;;;;9542:45;;;;9598:37;::::2;::::0;::::2;::::0;9571:15;542:25:181;;530:2;515:18;;396:177;10330:97:120;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2321:71:114;1251:14;;;:36;;-1:-1:-1;;;1251:36:114;;1276:10;1251:36;;;2765:51:181;;;;-1:-1:-1;;;;;1251:14:114;;:24;;2738:18:181;;1251:36:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1243:57;;;;-1:-1:-1;;;1243:57:114;;11910:2:181;1243:57:114;;;11892:21:181;11949:1;11929:18;;;11922:29;-1:-1:-1;;;11967:18:181;;;11960:38;12015:18;;1243:57:114;11708:331:181;1243:57:114;1239:19:51::1;:17;:19::i;:::-;2379:8:114::2;:6;:8::i;3321:420:168:-:0;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;8018:134:120:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;-1:-1:-1;;;;;8087:27:120;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;8080:34;;-1:-1:-1;;8080:34:120::1;::::0;;8125:22;;2765:51:181;;;8125:22:120::1;::::0;2738:18:181;8125:22:120::1;2619:203:181::0;7757:129:120;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;-1:-1:-1;;;;;7816:27:120;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;7816:34:120::1;7846:4;7816:34;::::0;;7861:20;;2765:51:181;;;7861:20:120::1;::::0;2738:18:181;7861:20:120::1;2619:203:181::0;4404:539:168;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;1457:263:114:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1569:14:114::1;::::0;-1:-1:-1;;;;;1569:14:114;;::::1;1542:42:::0;;::::1;::::0;1534:78:::1;;;::::0;-1:-1:-1;;;1534:78:114;;12379:2:181;1534:78:114::1;::::0;::::1;12361:21:181::0;12418:2;12398:18;;;12391:30;12457:25;12437:18;;;12430:53;12500:18;;1534:78:114::1;12177:347:181::0;1534:78:114::1;1618:14;:48:::0;;-1:-1:-1;;;;;;1618:48:114::1;-1:-1:-1::0;;;;;1618:48:114;::::1;::::0;;::::1;::::0;;;1677:38:::1;::::0;2765:51:181;;;1677:38:114::1;::::0;2753:2:181;2738:18;1677:38:114::1;2619:203:181::0;4490:107:116;4549:4;4568:24;4582:9;4568:13;:24::i;:::-;4561:31;4490:107;-1:-1:-1;;4490:107:116:o;8892::120:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;8963:31:120::1;8983:10;8963:19;:31::i;11954:1067::-:0;5841:10;12109:7;5822:30;;;:18;:30;;;;;;12118:12;;5822:30;;5814:55;;;;-1:-1:-1;;;5814:55:120;;12731:2:181;5814:55:120;;;12713:21:181;12770:2;12750:18;;;12743:30;-1:-1:-1;;;12789:18:181;;;12782:42;12841:18;;5814:55:120;12529:336:181;5814:55:120;12227:26:::1;::::0;;::::1;12211:13;12227:26:::0;;;:6:::1;:26;::::0;;;;:28;;12211:13;;12227:28;;;::::1;::::0;12211:13;12227:28:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12211:44;;12307:21;12331:172;12360:6;12374:38;12401:10;-1:-1:-1::0;;;;;335:23:173;;241:123;12374:38:120::1;12420:6;12434:18;12460:17;12485:12;12331:21;:172::i;:::-;12588:19:::0;;::::1;::::0;::::1;::::0;12749:27:::1;::::0;-1:-1:-1;;;12749:27:120;;::::1;::::0;::::1;542:25:181::0;;;12588:19:120;;-1:-1:-1;12588:19:120;12565:20:::1;::::0;;;12749:6:::1;-1:-1:-1::0;;;;;12749:13:120::1;::::0;::::1;::::0;515:18:181;;12749:27:120::1;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12715:61:::0;;-1:-1:-1;12715:61:120;-1:-1:-1;12928:51:120::1;12937:12:::0;12951:10:::1;12960:1;12715:61:::0;12951:10:::1;:::i;:::-;12963:5;12970:8;12928:51;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;12993:12:120;;13007:8;;-1:-1:-1;11954:1067:120;;-1:-1:-1;;;;;;11954:1067:120:o;1767:106:51:-;1685:7;;-1:-1:-1;;;1685:7:51;;;;1836:9;1828:38;;;;-1:-1:-1;;;1828:38:51;;13965:2:181;1828:38:51;;;13947:21:181;14004:2;13984:18;;;13977:30;-1:-1:-1;;;14023:18:181;;;14016:46;14079:18;;1828:38:51;13763:340:181;2244:493:122;2400:5;:12;2416:2;2400:18;2392:38;;;;-1:-1:-1;;;2392:38:122;;14310:2:181;2392:38:122;;;14292:21:181;14349:1;14329:18;;;14322:29;-1:-1:-1;;;14367:18:181;;;14360:37;14414:18;;2392:38:122;14108:330:181;2392:38:122;2491:19;;:24;2483:49;;;;-1:-1:-1;;;2483:49:122;;14645:2:181;2483:49:122;;;14627:21:181;14684:2;14664:18;;;14657:30;-1:-1:-1;;;14703:18:181;;;14696:42;14755:18;;2483:49:122;14443:336:181;2483:49:122;2562:22;2610:33;;;2645:5;2587:64;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2587:64:122;;;;;;;;;;;;;;-1:-1:-1;;;;;2587:64:122;-1:-1:-1;;;;;;2587:64:122;;;;;;;;;;2705:15;;2675:57;;-1:-1:-1;;;2675:57:122;;2587:64;;-1:-1:-1;;;;;;2689:3:122;2675:29;;;;;:57;;2705:15;;;;;2587:64;;2675:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2331:406;2244:493;;:::o;1945:106:51:-;1685:7;;-1:-1:-1;;;1685:7:51;;;;2003:41;;;;-1:-1:-1;;;2003:41:51;;15527:2:181;2003:41:51;;;15509:21:181;15566:2;15546:18;;;15539:30;-1:-1:-1;;;15585:18:181;;;15578:50;15645:18;;2003:41:51;15325:344:181;2433:117:51;1486:16;:14;:16::i;:::-;2491:7:::1;:15:::0;;-1:-1:-1;;;;2491:15:51::1;::::0;;2521:22:::1;719:10:58::0;2530:12:51::1;2521:22;::::0;-1:-1:-1;;;;;2783:32:181;;;2765:51;;2753:2;2738:18;2521:22:51::1;;;;;;;2433:117::o:0;2741:358:122:-;2873:15;;2859:30;;-1:-1:-1;;;;;2873:15:122;2859:13;:30::i;:::-;2851:59;;;;-1:-1:-1;;;2851:59:122;;15876:2:181;2851:59:122;;;15858:21:181;15915:2;15895:18;;;15888:30;-1:-1:-1;;;15934:18:181;;;15927:46;15990:18;;2851:59:122;15674:340:181;2851:59:122;2975:5;:12;2991:2;2975:18;2967:38;;;;-1:-1:-1;;;2967:38:122;;14310:2:181;2967:38:122;;;14292:21:181;14349:1;14329:18;;;14322:29;-1:-1:-1;;;14367:18:181;;;14360:37;14414:18;;2967:38:122;14108:330:181;2967:38:122;3058:36;3079:14;3087:5;3079:14;:::i;:::-;3058:20;:36::i;2336:287:52:-;1759:1;2468:7;;:19;2460:63;;;;-1:-1:-1;;;2460:63:52;;16523:2:181;2460:63:52;;;16505:21:181;16562:2;16542:18;;;16535:30;16601:33;16581:18;;;16574:61;16652:18;;2460:63:52;16321:355:181;2460:63:52;1759:1;2598:7;:18;2336:287::o;19673:730:120:-;19822:7;;19925:22;;;;:8;:22;;;;;;;;:44;;;;;;;;:::i;:::-;;19917:76;;;;-1:-1:-1;;;19917:76:120;;16883:2:181;19917:76:120;;;16865:21:181;16922:2;16902:18;;;16895:30;-1:-1:-1;;;16941:18:181;;;16934:49;17000:18;;19917:76:120;16681:343:181;19917:76:120;20335:63;20356:12;20370;20335:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20384:13:120;;-1:-1:-1;20335:20:120;;-1:-1:-1;20335:63:120:i;:::-;20328:70;;19673:730;;;;;;:::o;20958:1261::-;21206:32;;;;:18;:32;;;;;;;;21531:7;21202:342;21599:35;21619:14;21599:19;:35::i;:::-;21740:32;21775:67;21796:12;21810:14;21775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21826:15:120;;-1:-1:-1;21775:20:120;;-1:-1:-1;21775:67:120:i;:::-;21740:102;;21968:14;21940:24;:42;21932:74;;;;-1:-1:-1;;;21932:74:120;;17231:2:181;21932:74:120;;;17213:21:181;17270:2;17250:18;;;17243:30;-1:-1:-1;;;17289:18:181;;;17282:49;17348:18;;21932:74:120;17029:343:181;21932:74:120;22104:32;;;;:18;:32;;;;;;;:39;;-1:-1:-1;;22104:39:120;22139:4;22104:39;;;22154:60;22182:14;;22123:12;;22154:60;;;;22198:15;542:25:181;;530:2;515:18;;396:177;22154:60:120;;;;;;;;21121:1098;20958:1261;;;;;:::o;22704:1731::-;22762:13;;22796:15;:8;22762:13;22796:12;:15::i;:::-;22783:28;-1:-1:-1;22873:26:120;22893:6;22873:26;:16;-1:-1:-1;;22873:14:120;;;:16::i;:::-;:26;;;22865:51;;;;-1:-1:-1;;;22865:51:120;;17579:2:181;22865:51:120;;;17561:21:181;17618:2;17598:18;;;17591:30;-1:-1:-1;;;17637:18:181;;;17630:42;17689:18;;22865:51:120;17377:336:181;22865:51:120;22960:20;22983:11;-1:-1:-1;;22983:9:120;;;:11::i;:::-;22960:34;-1:-1:-1;23034:20:120;23008:22;;;;:8;:22;;;;;;;;:46;;;;;;;;:::i;:::-;;23000:66;;;;-1:-1:-1;;;23000:66:120;;17920:2:181;23000:66:120;;;17902:21:181;17959:1;17939:18;;;17932:29;-1:-1:-1;;;17977:18:181;;;17970:37;18024:18;;23000:66:120;17718:330:181;23000:66:120;23209:22;;;;:8;:22;;;;;:48;;-1:-1:-1;;23209:48:120;23234:23;23209:48;;;;23746:25;23760:11;23746;:25;:::i;:::-;:29;;;;:::i;:::-;23734:9;:41;23726:58;;;;-1:-1:-1;;;23726:58:120;;;;;;18255:2:181;18237:21;;;18294:1;18274:18;;;18267:29;-1:-1:-1;;;18327:2:181;18312:18;;18305:34;18371:2;18356:18;;18053:327;23726:58:120;23823:18;23844:21;-1:-1:-1;;23844:19:120;;;:21::i;:::-;24027:19;;;23953:3;24027:19;;;;;;;;;23823:42;;-1:-1:-1;23918:11:120;;23903:12;;23953:3;24027:19;;;;;;;;;;-1:-1:-1;;24000:46:120;-1:-1:-1;24052:22:120;24153:11;-1:-1:-1;;24153:9:120;;;:11::i;:::-;24172:10;-1:-1:-1;;24172:8:120;;;:10::i;:::-;24190:11;-1:-1:-1;;24190:9:120;;;:11::i;:::-;24209:17;:9;-1:-1:-1;;24209:7:120;;;:9::i;:::-;-1:-1:-1;;24209:15:120;;:17::i;:::-;24077:155;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;24077:155:120;;;;;;;;;;;;;;-1:-1:-1;;;;;24077:155:120;-1:-1:-1;;;24077:155:120;;;;-1:-1:-1;24265:81:120;24305:10;24317:4;-1:-1:-1;24326:8:120;24077:155;24265:39;:81::i;:::-;24386:44;;24239:107;;-1:-1:-1;24239:107:120;-1:-1:-1;24386:44:120;;;;24394:12;;24239:107;;;;24386:44;:::i;:::-;;;;;;;;22777:1658;;;;;;;22704:1731;;;:::o;3103:227:122:-;3182:35;3200:16;3182:17;:35::i;:::-;3251:15;;3228:57;;;-1:-1:-1;;;;;3251:15:122;;;19451:34:181;;19521:15;;;19516:2;19501:18;;19494:43;3228:57:122;;19386:18:181;3228:57:122;;;;;;;3291:15;:34;;-1:-1:-1;;;;;;3291:34:122;-1:-1:-1;;;;;3291:34:122;;;;;;;;;;3103:227::o;2412:312:57:-;2526:6;2501:21;:31;;2493:73;;;;-1:-1:-1;;;2493:73:57;;19750:2:181;2493:73:57;;;19732:21:181;19789:2;19769:18;;;19762:30;19828:31;19808:18;;;19801:59;19877:18;;2493:73:57;19548:353:181;2493:73:57;2578:12;2596:9;-1:-1:-1;;;;;2596:14:57;2618:6;2596:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:52;;;2647:7;2639:78;;;;-1:-1:-1;;;2639:78:57;;20318:2:181;2639:78:57;;;20300:21:181;20357:2;20337:18;;;20330:30;20396:34;20376:18;;;20369:62;20467:28;20447:18;;;20440:56;20513:19;;2639:78:57;20116:422:181;2639:78:57;2483:241;2412:312;;:::o;2186:115:51:-;1239:19;:17;:19::i;:::-;2245:7:::1;:14:::0;;-1:-1:-1;;;;2245:14:51::1;-1:-1:-1::0;;;2245:14:51::1;::::0;;2274:20:::1;2281:12;719:10:58::0;;640:96;5170:183:168;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;4981:185::-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;2094:146:122:-;2168:4;2200:35;2231:3;2200:30;:35::i;:::-;-1:-1:-1;;;;;2187:48:122;:9;-1:-1:-1;;;;;2187:48:122;;2180:55;;2094:146;;;:::o;1742:335:167:-;1834:15;;1817:13;:32;1809:60;;;;-1:-1:-1;;;1809:60:167;;20745:2:181;1809:60:167;;;20727:21:181;20784:2;20764:18;;;20757:30;-1:-1:-1;;;20803:18:181;;;20796:45;20858:18;;1809:60:167;20543:339:181;1809:60:167;1983:15;:31;;;2025:47;;;2046:10;21061:51:181;;21143:2;21128:18;;21121:34;;;2025:47:167;;21034:18:181;2025:47:167;20887:274:181;981:328:165;1183:12;1227:13;1242:7;1251:6;1259:18;1279:10;1291:12;1210:94;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1203:101;;981:328;;;;;;;;:::o;17098:357:120:-;17169:8;17161:50;;;;-1:-1:-1;;;17161:50:120;;22083:2:181;17161:50:120;;;22065:21:181;22122:2;22102:18;;;22095:30;-1:-1:-1;;;22141:18:181;;;22134:44;22195:18;;17161:50:120;21881:338:181;17161:50:120;17225:31;;;;:21;:31;;;;;;:36;17217:69;;;;-1:-1:-1;;;17217:69:120;;22426:2:181;17217:69:120;;;22408:21:181;22465:2;22445:18;;;22438:30;-1:-1:-1;;;22484:18:181;;;22477:50;22544:18;;17217:69:120;22224:344:181;17217:69:120;17301:30;;;;:20;:30;;;;;;;;17300:31;17292:63;;;;-1:-1:-1;;;17292:63:120;;22775:2:181;17292:63:120;;;22757:21:181;22814:2;22794:18;;;22787:30;-1:-1:-1;;;22833:18:181;;;22826:49;22892:18;;17292:63:120;22573:343:181;17292:63:120;17362:31;;;;:21;:31;;;;;;;17396:12;17362:46;;17419:31;;;;;17384:8;542:25:181;;530:2;515:18;;396:177;24755:6146:164;25004:22;25008:1;25004:22;;;;;25033:19;;;25080:25;;25066:12;;;25059:47;;;;25138:4;24881:16;25125:18;;;25182:9;25170:22;;25163:30;25156:38;;25208:12;;;25201:30;;;;25254:34;;;25248:41;25238:52;;25309:18;;;25366:9;25354:22;;25347:30;25340:38;;25392:12;;;25385:30;;;;25438:34;;;25432:41;25422:52;;25493:18;;;25550:9;25538:22;;25531:30;25524:38;;25576:12;;;25569:30;;;;25646:9;25622:34;;25616:41;25606:52;;25677:18;;;25734:9;25722:22;;25715:30;25708:38;;25760:12;;;25753:30;;;;25830:9;25806:34;;;25800:41;25790:52;;;25861:18;;;25906:22;;;25899:30;25892:38;;25944:12;;;25937:30;;;;26014:9;25990:34;;25984:41;25974:52;;26045:18;;;26090:22;;;26083:30;26076:38;;26128:12;;;26121:30;;;;26198:9;26174:34;;26168:41;26158:52;;26229:18;;;26274:22;;;26267:30;26260:38;;26312:12;;;26305:30;;;;26382:9;26358:34;;26352:41;26342:52;;26413:18;;;26470:9;26458:22;;;26451:30;26444:38;;26496:12;;;26489:30;;;;26542:34;;26536:41;26526:52;;26597:18;;;26654:9;26642:22;;;26635:30;26628:38;;26680:12;;;26673:30;;;;26750:9;26726:34;;26720:41;26710:52;;;26781:18;;;26838:10;26826:23;;26819:31;26812:39;;26865:12;;;26858:30;;;;26935:10;26911:35;;26905:42;26895:53;;26967:18;;;27024:10;27012:23;;27005:31;26998:39;;27051:12;;;27044:30;;;;27121:10;27097:35;;27091:42;27081:53;;27153:18;;;27210:10;27198:23;;27191:31;27184:39;;27237:12;;;27230:30;;;;27307:10;27283:35;;27277:42;27267:53;;27339:18;;;27396:10;27384:23;;27377:31;27370:39;;27423:12;;;27416:30;;;;27493:10;27469:35;;27463:42;27453:53;;27525:18;;;27582:10;27570:23;;27563:31;27556:39;;27609:12;;;27602:30;;;;27679:10;27655:35;;27649:42;27639:53;;27711:18;;;27768:10;27756:23;;27749:31;27742:39;;27795:12;;;27788:30;;;;27865:10;27841:35;;27835:42;27825:53;;27897:18;;;27954:10;27942:23;;27935:31;27928:39;;27981:12;;;27974:30;;;;28027:35;;;28021:42;28011:53;;28083:18;;;28140:10;28128:23;;28121:31;28114:39;;28167:12;;;28160:30;;;;28237:10;28213:35;;28207:42;28197:53;;28269:18;;;28326:10;28314:23;;28307:31;28300:39;;28353:12;;;28346:30;;;;28423:10;28399:35;;28393:42;28383:53;;28455:18;;;28512:10;28500:23;;28493:31;28486:39;;28539:12;;;28532:30;;;;28609:10;28585:35;;28579:42;28569:53;;28641:18;;;28698:10;28686:23;;28679:31;28672:39;;28725:12;;;28718:30;;;;28795:10;28771:35;;28765:42;28755:53;;28827:18;;;28884:10;28872:23;;28865:31;28858:39;;28911:12;;;28904:30;;;;28981:10;28957:35;;28951:42;28941:53;;29013:18;;;29070:10;29058:23;;29051:31;29044:39;;29097:12;;;29090:30;;;;29167:10;29143:35;;29137:42;29127:53;;29199:18;;;29256:10;29244:23;;29237:31;29230:39;;29283:12;;;29276:30;;;;29353:10;29329:35;;29323:42;29313:53;;29385:18;;;29442:10;29430:23;;29423:31;29416:39;;29469:12;;;29462:30;;;;29539:10;29515:35;;29509:42;29499:53;;29571:18;;;29628:10;29616:23;;29609:31;29602:39;;29655:12;;;29648:30;;;;29725:10;29701:35;;29695:42;29685:53;;29757:18;;;29814:10;29802:23;;29795:31;29788:39;;29841:12;;;29834:30;;;;29911:10;29887:35;;29881:42;29871:53;;29943:18;;;30000:10;29988:23;;29981:31;29974:39;;30027:12;;;30020:30;;;;30097:10;30073:35;;30067:42;30057:53;;30129:18;;;30186:10;30174:23;;30167:31;30160:39;;30213:12;;;30206:30;;;;30283:10;30259:35;;30253:42;30243:53;;30315:18;;;30372:10;30360:23;;30353:31;30346:39;;30399:12;;;30392:30;;;;30469:10;30445:35;;30439:42;30429:53;;30501:18;;;30558:10;30546:23;;30539:31;30532:39;;30585:12;;;30578:30;;;;30655:10;30631:35;;30625:42;30615:53;;30687:18;;;30744:10;30732:23;;;30725:31;30718:39;;;30771:12;;;;30764:30;;;;30841:10;30817:35;;;30811:42;30801:53;;;30873:18;;;24755:6146::o;17891:1180:120:-;18006:14;17998:61;;;;-1:-1:-1;;;17998:61:120;;23123:2:181;17998:61:120;;;23105:21:181;23162:2;23142:18;;;23135:30;-1:-1:-1;;;23181:18:181;;;23174:49;23240:18;;17998:61:120;22921:343:181;17998:61:120;18149:36;;;;:20;:36;;;;;;;;18145:104;;;17891:1180;:::o;18145:104::-;18354:33;18390:37;;;:21;:37;;;;;;;18441:30;;;18433:63;;;;-1:-1:-1;;;18433:63:120;;23471:2:181;18433:63:120;;;23453:21:181;23510:2;23490:18;;;23483:30;-1:-1:-1;;;23529:18:181;;;23522:50;23589:18;;18433:63:120;23269:344:181;18433:63:120;18641:11;;18597:40;18612:25;18597:12;:40;:::i;:::-;:55;;18589:91;;;;-1:-1:-1;;;18589:91:120;;23820:2:181;18589:91:120;;;23802:21:181;23859:2;23839:18;;;23832:30;23898:25;23878:18;;;23871:53;23941:18;;18589:91:120;23618:347:181;18589:91:120;18808:36;;;;:20;:36;;;;;;:43;;-1:-1:-1;;18808:43:120;18847:4;18808:43;;;18862:37;18829:14;;18862:37;;;-1:-1:-1;19029:37:120;;;;:21;:37;;;;;19022:44;17891:1180::o;10748:325:174:-;10848:10;;10818:7;;10975:4;10966:14;;11042:26;;;;10966:14;10848:10;11042:5;:26::i;:::-;11035:33;10748:325;-1:-1:-1;;;;;10748:325:174:o;2583:121:165:-;2645:6;2673:25;-1:-1:-1;;2673:18:165;;2692:2;2696:1;2673:18;:25::i;17661:260:174:-;17717:14;17739:12;17754;17758:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;17754:12;-1:-1:-1;;;;;17739:27:174;;;17772:12;17787;17791:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;17787:12;-1:-1:-1;;;;;17772:27:174;17890:21;;;;17661:260;-1:-1:-1;;;17661:260:174:o;2942:141:165:-;3009:7;3031:47;3058:19;3068:8;3058:9;:19::i;:::-;508:4:173;399:121;2097:115:165;2154:6;2182:24;-1:-1:-1;;2182:18:165;;2154:6;2204:1;2182:18;:24::i;2414:115::-;2470:6;2498:25;-1:-1:-1;;2498:18:165;;2517:2;2521:1;2498:18;:25::i;2261:105::-;2318:7;2340:21;-1:-1:-1;;2340:14:165;;2355:1;2358:2;2340:14;:21::i;3201:146::-;3256:7;3278:64;533:2;3308:30;533:2;13008::174;13004:16;;;-1:-1:-1;;;;;13000:28:174;3308:30:165;:::i;:::-;-1:-1:-1;;3278:14:165;;;:64;3340:1;3278:14;:64::i;21380:556:174:-;21435:16;21459:11;21476:12;21491;21495:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;21491:12;-1:-1:-1;;;;;21476:27:174;;;21597:4;21591:11;21584:18;;21646:3;21639:10;;21678:33;21691:7;21700:3;21706:4;21700:10;21678:12;:33::i;:::-;-1:-1:-1;21815:14:174;;;21831:4;21811:25;21805:4;21798:39;21872:17;;21380:556;;-1:-1:-1;21380:556:174:o;1360:1117:171:-;1519:4;1525:12;1577:15;1598:13;1617:24;1654:8;1644:19;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1644:19:171;;1617:46;;2083:1;2062;2033:9;2027:16;2003:4;1992:9;1988:20;1957:6;1927:7;1906:4;1892:210;1880:222;;2157:16;2146:27;;2195:8;2186:7;2183:21;2180:62;;;2226:8;2215:19;;2180:62;2315:7;2302:11;2295:28;2423:7;2420:1;2413:4;2400:11;2396:22;2381:50;2450:8;;;;-1:-1:-1;1360:1117:171;-1:-1:-1;;;;;;;1360:1117:171:o;3334:356:122:-;3455:78;;-1:-1:-1;;;3455:78:122;;-1:-1:-1;;;;;19469:15:181;;;3455:78:122;;;19451:34:181;3438:14:122;19501:18:181;;;19494:43;;;3438:14:122;3463:3;3455:48;;;;;;19386:18:181;;3455:78:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3565:13;;3544:43;;;-1:-1:-1;;;;;3565:13:122;;;19451:34:181;;19521:15;;;19516:2;19501:18;;19494:43;3438:95:122;;-1:-1:-1;3544:43:122;;19386:18:181;3544:43:122;;;;;;;3663:13;:22;;-1:-1:-1;;;;;;3663:22:122;-1:-1:-1;;;;;3663:22:122;;;;;;;;;;-1:-1:-1;3334:356:122:o;1505:221:40:-;1570:7;1594:20;1607:6;1594:12;:20::i;:::-;1589:53;;1623:19;;-1:-1:-1;;;1623:19:40;;;;;;;;;;;1589:53;1678:6;-1:-1:-1;;;;;1660:57:40;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9979:390:174:-;10076:15;;10114:11;10121:4;10114;:11;:::i;:::-;10099:26;;10224:4;10218:11;10212:4;10209:21;10206:52;;;-1:-1:-1;10249:1:174;10206:52;10273:4;10281:1;10273:9;10269:41;;-1:-1:-1;;10292:11:174;;;;;10269:41;10325:39;10346:5;10353:4;10359;10325:20;:39::i;16417:201::-;16522:14;16596:11;16601:6;16596:2;:11;:::i;:::-;16595:17;;16611:1;16595:17;:::i;:::-;16551:62;;16559:30;16565:7;16574:6;16582;16559:5;:30::i;:::-;16551:62;;;16417:201;-1:-1:-1;;;;16417:201:174:o;2767:109:165:-;2827:7;2849:22;-1:-1:-1;;2849:14:165;;2864:2;2868;15274:815:174;15375:14;15401:6;:11;;15411:1;15401:11;15397:49;;-1:-1:-1;15437:1:174;15422:17;;15397:49;15473:12;15477:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15473:12;-1:-1:-1;;;;;15455:30:174;:15;;;;:6;:15;:::i;:::-;:30;15451:282;;;15674:12;15678:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15674:12;15688;15692:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15688:12;15646:80;;-1:-1:-1;;;15646:80:174;;-1:-1:-1;;;;;24904:15:181;;;15646:80:174;;;24886:34:181;24956:15;;24936:18;;;24929:43;24988:18;;;24981:34;;;15710:15:174;;;25031:18:181;;;25024:34;24813:19;;15646:80:174;24612:452:181;15451:282:174;15751:2;15742:6;:11;;;15738:66;;;15762:42;;-1:-1:-1;;;15762:42:174;;;;;;;;;;;15738:66;15871:1;15862:10;;15811:15;15899:12;15903:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15899:12;-1:-1:-1;;;;;15884:27:174;;-1:-1:-1;15917:13:174;-1:-1:-1;;;;;5031:12:174;;5027:85;16053:17;;;;16047:24;16043:36;;;-1:-1:-1;;;;;15274:815:174:o;13593:349::-;13714:7;13729:12;13744;13748:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;13744:12;-1:-1:-1;;;;;13729:27:174;;;13832:12;13836:7;13832:3;:12::i;:::-;13825:4;13809:13;13816:6;13809:4;:13;:::i;:::-;:20;;;;:::i;:::-;:35;13805:67;;;-1:-1:-1;;13854:11:174;;;;;13805:67;13885:13;13892:6;13885:4;:13;:::i;:::-;13878:20;;13911:26;13917:7;13911:26;;13926:4;13932;13911:5;:26::i;:::-;13904:33;;;13593:349;;;;;;;:::o;20133:893::-;20211:15;-1:-1:-1;;5480:15:174;;;;20234:68;;20262:40;;-1:-1:-1;;;20262:40:174;;;;;;;;;;;20234:68;20312:19;20323:7;20312:10;:19::i;:::-;20308:75;;;20340:43;;-1:-1:-1;;;20340:43:174;;;;;;;;;;;20308:75;20390:12;20405;20409:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;20405:12;-1:-1:-1;;;;;20390:27:174;;;20423:15;20441:12;20445:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;20441:12;-1:-1:-1;;;;;20423:30:174;;;20460:11;20477:8;20579:4;20573:11;20566:18;;20654:7;20649:3;20646:16;20643:80;;;20686:4;20680;20673:18;20643:80;20880:4;20871:7;20865:4;20856:7;20853:1;20846:5;20835:50;20828:57;;20901:3;20896:57;;20913:40;;-1:-1:-1;;;20913:40:174;;;;;;;;;;;20896:57;20969:52;20990:15;20997:7;11442:17;11438:31;;11253:254;20990:15;20969:52;;21007:7;21016:4;20969:20;:52::i;:::-;20959:62;20133:893;-1:-1:-1;;;;;;;20133:893:174:o;1000:145:40:-;1061:4;1102:6;-1:-1:-1;;;;;1084:52:40;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8805:657:174:-;8916:15;8961:2;8990;9076:4;9108;-1:-1:-1;;;;;9127:12:174;;;;:28;;;;;9151:4;9143;-1:-1:-1;;;;;9143:12:174;;9127:28;9119:51;;;;-1:-1:-1;;;9119:51:174;;25271:2:181;9119:51:174;;;25253:21:181;25310:2;25290:18;;;25283:30;-1:-1:-1;;;25329:18:181;;;25322:40;25379:18;;9119:51:174;25069:334:181;9119:51:174;9271:23;;;9344:17;;;9327:35;;;9410:17;;;9394:34;;;;;-1:-1:-1;;;8805:657:174:o;13200:131::-;13253:7;13308:12;13312:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;13308:12;13293;13297:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;13293:12;:27;-1:-1:-1;;;;;13286:34:174;;;13200:131;;;:::o;6121:290::-;6181:8;6201:15;6208:7;11442:17;11438:31;;11253:254;6201:15;:31;;6220:12;6201:31;6197:63;;-1:-1:-1;6249:4:174;;6121:290;-1:-1:-1;6121:290:174:o;6197:63::-;6265:12;6280;6284:7;6280:3;:12::i;:::-;6395:4;6389:11;-1:-1:-1;6380:21:174;6121:290;-1:-1:-1;;;6121:290:174:o;211:180:181:-;270:6;323:2;311:9;302:7;298:23;294:32;291:52;;;339:1;336;329:12;291:52;-1:-1:-1;362:23:181;;211:180;-1:-1:-1;211:180:181:o;578:127::-;639:10;634:3;630:20;627:1;620:31;670:4;667:1;660:15;694:4;691:1;684:15;710:718;752:5;805:3;798:4;790:6;786:17;782:27;772:55;;823:1;820;813:12;772:55;859:6;846:20;885:18;922:2;918;915:10;912:36;;;928:18;;:::i;:::-;1003:2;997:9;971:2;1057:13;;-1:-1:-1;;1053:22:181;;;1077:2;1049:31;1045:40;1033:53;;;1101:18;;;1121:22;;;1098:46;1095:72;;;1147:18;;:::i;:::-;1187:10;1183:2;1176:22;1222:2;1214:6;1207:18;1268:3;1261:4;1256:2;1248:6;1244:15;1240:26;1237:35;1234:55;;;1285:1;1282;1275:12;1234:55;1349:2;1342:4;1334:6;1330:17;1323:4;1315:6;1311:17;1298:54;1396:1;1389:4;1384:2;1376:6;1372:15;1368:26;1361:37;1416:6;1407:15;;;;;;710:718;;;;:::o;1433:320::-;1501:6;1554:2;1542:9;1533:7;1529:23;1525:32;1522:52;;;1570:1;1567;1560:12;1522:52;1610:9;1597:23;1643:18;1635:6;1632:30;1629:50;;;1675:1;1672;1665:12;1629:50;1698:49;1739:7;1730:6;1719:9;1715:22;1698:49;:::i;1943:127::-;2004:10;1999:3;1995:20;1992:1;1985:31;2035:4;2032:1;2025:15;2059:4;2056:1;2049:15;2075:347;2226:2;2211:18;;2259:1;2248:13;;2238:144;;2304:10;2299:3;2295:20;2292:1;2285:31;2339:4;2336:1;2329:15;2367:4;2364:1;2357:15;2238:144;2391:25;;;2075:347;:::o;2827:932::-;2992:6;3000;3008;3016;3024;3077:4;3065:9;3056:7;3052:23;3048:34;3045:54;;;3095:1;3092;3085:12;3045:54;3135:9;3122:23;3164:18;3205:2;3197:6;3194:14;3191:34;;;3221:1;3218;3211:12;3191:34;3259:6;3248:9;3244:22;3234:32;;3304:7;3297:4;3293:2;3289:13;3285:27;3275:55;;3326:1;3323;3316:12;3275:55;3366:2;3353:16;3392:2;3384:6;3381:14;3378:34;;;3408:1;3405;3398:12;3378:34;3463:7;3456:4;3446:6;3443:1;3439:14;3435:2;3431:23;3427:34;3424:47;3421:67;;;3484:1;3481;3474:12;3421:67;3515:4;3507:13;;;;-1:-1:-1;3539:6:181;-1:-1:-1;;3577:20:181;;3564:34;;-1:-1:-1;3632:4:181;3617:20;;3649:15;;;3646:35;;;3677:1;3674;3667:12;3646:35;2827:932;;;;-1:-1:-1;2827:932:181;;3715:2;3700:18;;3737:16;;2827:932;-1:-1:-1;;2827:932:181:o;3764:131::-;-1:-1:-1;;;;;3839:31:181;;3829:42;;3819:70;;3885:1;3882;3875:12;3900:247;3959:6;4012:2;4000:9;3991:7;3987:23;3983:32;3980:52;;;4028:1;4025;4018:12;3980:52;4067:9;4054:23;4086:31;4111:5;4086:31;:::i;5026:163::-;5093:20;;5153:10;5142:22;;5132:33;;5122:61;;5179:1;5176;5169:12;5122:61;5026:163;;;:::o;5194:184::-;5252:6;5305:2;5293:9;5284:7;5280:23;5276:32;5273:52;;;5321:1;5318;5311:12;5273:52;5344:28;5362:9;5344:28;:::i;5383:460::-;5468:6;5476;5484;5537:2;5525:9;5516:7;5512:23;5508:32;5505:52;;;5553:1;5550;5543:12;5505:52;5576:28;5594:9;5576:28;:::i;:::-;5566:38;;5651:2;5640:9;5636:18;5623:32;5613:42;;5706:2;5695:9;5691:18;5678:32;5733:18;5725:6;5722:30;5719:50;;;5765:1;5762;5755:12;5719:50;5788:49;5829:7;5820:6;5809:9;5805:22;5788:49;:::i;:::-;5778:59;;;5383:460;;;;;:::o;5848:250::-;5933:1;5943:113;5957:6;5954:1;5951:13;5943:113;;;6033:11;;;6027:18;6014:11;;;6007:39;5979:2;5972:10;5943:113;;;-1:-1:-1;;6090:1:181;6072:16;;6065:27;5848:250::o;6103:270::-;6144:3;6182:5;6176:12;6209:6;6204:3;6197:19;6225:76;6294:6;6287:4;6282:3;6278:14;6271:4;6264:5;6260:16;6225:76;:::i;:::-;6355:2;6334:15;-1:-1:-1;;6330:29:181;6321:39;;;;6362:4;6317:50;;6103:270;-1:-1:-1;;6103:270:181:o;6378:288::-;6553:6;6542:9;6535:25;6596:2;6591;6580:9;6576:18;6569:30;6516:4;6616:44;6656:2;6645:9;6641:18;6633:6;6616:44;:::i;7012:127::-;7073:10;7068:3;7064:20;7061:1;7054:31;7104:4;7101:1;7094:15;7128:4;7125:1;7118:15;7144:125;7209:9;;;7230:10;;;7227:36;;;7243:18;;:::i;7274:184::-;7344:6;7397:2;7385:9;7376:7;7372:23;7368:32;7365:52;;;7413:1;7410;7403:12;7365:52;-1:-1:-1;7436:16:181;;7274:184;-1:-1:-1;7274:184:181:o;7996:474::-;8217:2;8206:9;8199:21;8180:4;8243:44;8283:2;8272:9;8268:18;8260:6;8243:44;:::i;:::-;8335:9;8327:6;8323:22;8318:2;8307:9;8303:18;8296:50;8363:32;8388:6;8380;8363:32;:::i;:::-;8355:40;;;8460:1;8456;8451:3;8447:11;8443:19;8435:6;8431:32;8426:2;8415:9;8411:18;8404:60;7996:474;;;;;;:::o;8818:314::-;8993:2;8982:9;8975:21;8956:4;9013:44;9053:2;9042:9;9038:18;9030:6;9013:44;:::i;:::-;9005:52;;9122:1;9118;9113:3;9109:11;9105:19;9097:6;9093:32;9088:2;9077:9;9073:18;9066:60;8818:314;;;;;:::o;9472:127::-;9533:10;9528:3;9524:20;9521:1;9514:31;9564:4;9561:1;9554:15;9588:4;9585:1;9578:15;9604:325;9696:4;9754:11;9741:25;9848:4;9844:9;9833:8;9817:14;9813:29;9809:45;9789:18;9785:70;9775:98;;9869:1;9866;9859:12;9775:98;9890:33;;;;;9604:325;-1:-1:-1;;9604:325:181:o;9934:521::-;10011:4;10017:6;10077:11;10064:25;10171:2;10167:7;10156:8;10140:14;10136:29;10132:43;10112:18;10108:68;10098:96;;10190:1;10187;10180:12;10098:96;10217:33;;10269:20;;;-1:-1:-1;10312:18:181;10301:30;;10298:50;;;10344:1;10341;10334:12;10298:50;10377:4;10365:17;;-1:-1:-1;10408:14:181;10404:27;;;10394:38;;10391:58;;;10445:1;10442;10435:12;10391:58;9934:521;;;;;:::o;10460:271::-;10643:6;10635;10630:3;10617:33;10599:3;10669:16;;10694:13;;;10669:16;10460:271;-1:-1:-1;10460:271:181:o;11426:277::-;11493:6;11546:2;11534:9;11525:7;11521:23;11517:32;11514:52;;;11562:1;11559;11552:12;11514:52;11594:9;11588:16;11647:5;11640:13;11633:21;11626:5;11623:32;11613:60;;11669:1;11666;11659:12;12044:128;12111:9;;;12132:11;;;12129:37;;;12146:18;;:::i;12870:201::-;12908:3;12936:10;12981:2;12974:5;12970:14;13008:2;12999:7;12996:15;12993:41;;13014:18;;:::i;:::-;13063:1;13050:15;;12870:201;-1:-1:-1;;;12870:201:181:o;13076:245::-;13155:6;13163;13216:2;13204:9;13195:7;13191:23;13187:32;13184:52;;;13232:1;13229;13222:12;13184:52;-1:-1:-1;;13255:16:181;;13311:2;13296:18;;;13290:25;13255:16;;13290:25;;-1:-1:-1;13076:245:181:o;13326:432::-;13557:6;13546:9;13539:25;13600:6;13595:2;13584:9;13580:18;13573:34;13643:6;13638:2;13627:9;13623:18;13616:34;13686:3;13681:2;13670:9;13666:18;13659:31;13520:4;13707:45;13747:3;13736:9;13732:19;13724:6;13707:45;:::i;:::-;13699:53;13326:432;-1:-1:-1;;;;;;13326:432:181:o;14784:217::-;14931:2;14920:9;14913:21;14894:4;14951:44;14991:2;14980:9;14976:18;14968:6;14951:44;:::i;15006:314::-;-1:-1:-1;;;;;15181:32:181;;15163:51;;15250:2;15245;15230:18;;15223:30;;;-1:-1:-1;;15270:44:181;;15295:18;;15287:6;15270:44;:::i;16019:297::-;16137:12;;16184:4;16173:16;;;16167:23;;16137:12;16202:16;;16199:111;;;16296:1;16292:6;16282;16276:4;16272:17;16269:1;16265:25;16261:38;16254:5;16250:50;16241:59;;16199:111;;16019:297;;;:::o;18385:475::-;18575:4;18604:10;18653:2;18645:6;18641:15;18630:9;18623:34;18705:2;18697:6;18693:15;18688:2;18677:9;18673:18;18666:43;;18745:6;18740:2;18729:9;18725:18;18718:34;18788:3;18783:2;18772:9;18768:18;18761:31;18809:45;18849:3;18838:9;18834:19;18826:6;18809:45;:::i;18865:369::-;19062:6;19051:9;19044:25;19119:6;19112:14;19105:22;19100:2;19089:9;19085:18;19078:50;19164:2;19159;19148:9;19144:18;19137:30;19025:4;19184:44;19224:2;19213:9;19209:18;19201:6;19184:44;:::i;21166:710::-;21429:3;21466:10;21461:3;21457:20;21520:2;21511:6;21506:3;21502:16;21498:25;21493:3;21486:38;21553:6;21549:1;21544:3;21540:11;21533:27;21612:2;21603:6;21598:3;21594:16;21590:25;21585:2;21580:3;21576:12;21569:47;21668:2;21659:6;21654:3;21650:16;21646:25;21641:2;21636:3;21632:12;21625:47;;21702:6;21697:2;21692:3;21688:12;21681:28;21738:6;21732:13;21754:75;21822:6;21817:2;21812:3;21808:12;21801:4;21793:6;21789:17;21754:75;:::i;:::-;21849:16;;;;21867:2;21845:25;;21166:710;-1:-1:-1;;;;;;;21166:710:181:o;23970:251::-;24040:6;24093:2;24081:9;24072:7;24068:23;24064:32;24061:52;;;24109:1;24106;24099:12;24061:52;24141:9;24135:16;24160:31;24185:5;24160:31;:::i;24226:151::-;24316:4;24309:12;;;24295;;;24291:31;;24334:14;;24331:40;;;24351:18;;:::i;24382:225::-;24486:4;24465:12;;;24479;;;24461:31;24512:22;;;;24553:24;;;24543:58;;24581:18;;:::i;:::-;24543:58;24382:225;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"2791600","executionCost":"infinite","totalCost":"infinite"},"external":{"AMB()":"infinite","DOMAIN()":"infinite","MERKLE()":"infinite","MIRROR_DOMAIN()":"infinite","PROCESS_GAS()":"infinite","RESERVE_GAS()":"infinite","ROOT_MANAGER()":"infinite","acceptProposedOwner()":"63837","addSender(address)":"27982","aliasedSender()":"2383","allowlistedSenders(address)":"2570","delay()":"303","delayBlocks()":"2384","dispatch(uint32,bytes32,bytes)":"infinite","home()":"368","isReplica(address)":"529","lastSentBlock()":"2361","localDomain()":"infinite","messages(bytes32)":"2626","mirrorConnector()":"2426","nonces(uint32)":"2556","outboundRoot()":"infinite","owner()":"2421","pause()":"infinite","paused()":"2455","pendingAggregateRoots(bytes32)":"2572","processMessage(bytes)":"infinite","proposeNewOwner(address)":"infinite","proposed()":"2442","proposedTimestamp()":"2360","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":"infinite","provenAggregateRoots(bytes32)":"2607","provenMessageRoots(bytes32)":"2562","rateLimitBlocks()":"2385","removePendingAggregateRoot(bytes32)":"13002","removeSender(address)":"27954","renounceOwnership()":"2480","renounced()":"2452","send(bytes)":"infinite","sentMessageRoots(bytes32)":"2518","setDelayBlocks(uint256)":"28093","setMirrorConnector(address)":"infinite","setRateLimitBlocks(uint256)":"28101","setWatcherManager(address)":"30078","unpause()":"infinite","verifySender(address)":"infinite","watcherManager()":"2404","withdrawFunds(address)":"infinite"},"internal":{"_processMessage(bytes memory)":"infinite","_sendMessage(bytes memory,bytes memory)":"infinite","_setAliasedSender(address)":"infinite","_setMirrorConnector(address)":"infinite","_verifySender(address)":"infinite"}},"methodIdentifiers":{"AMB()":"d69f9d61","DOMAIN()":"52a9674b","MERKLE()":"a01892a5","MIRROR_DOMAIN()":"14168416","PROCESS_GAS()":"d88beda2","RESERVE_GAS()":"25e3beda","ROOT_MANAGER()":"5f61e3ec","acceptProposedOwner()":"c5b350df","addSender(address)":"b697f531","aliasedSender()":"361d88ac","allowlistedSenders(address)":"6159ada1","delay()":"6a42b8f8","delayBlocks()":"ad9c0c2e","dispatch(uint32,bytes32,bytes)":"fa31de01","home()":"9fa92f9d","isReplica(address)":"5190bc53","lastSentBlock()":"d7d317b3","localDomain()":"8d3638f4","messages(bytes32)":"2bbd59ca","mirrorConnector()":"cc394283","nonces(uint32)":"b95a2001","outboundRoot()":"65eaf11b","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","pendingAggregateRoots(bytes32)":"9d3117c7","processMessage(bytes)":"4ff746f6","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":"508a109b","provenAggregateRoots(bytes32)":"301f07c3","provenMessageRoots(bytes32)":"98c9f2b9","rateLimitBlocks()":"579c1618","removePendingAggregateRoot(bytes32)":"6b04a933","removeSender(address)":"b2f87643","renounceOwnership()":"715018a6","renounced()":"d232c220","send(bytes)":"2bb1ae7c","sentMessageRoots(bytes32)":"572386ca","setDelayBlocks(uint256)":"1eeaabea","setMirrorConnector(address)":"5bd11efc","setRateLimitBlocks(uint256)":"e0fed010","setWatcherManager(address)":"d2a3cc71","unpause()":"3f4ba83a","verifySender(address)":"db1b7659","watcherManager()":"a792c29b","withdrawFunds(address)":"68742da6"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_mirrorDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_amb\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rootManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_processGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserveGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_merkle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Connector__processMessage_notUsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotCrossChainCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimited__rateLimited_messageSendRateExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__index_indexMoreThan32Bytes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"len\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slice\",\"type\":\"uint256\"}],\"name\":\"TypedMemView__index_overrun\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_identityOOG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_invalidPointer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_nullPointer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"AliasedSenderUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"updated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"DelayBlocksUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Dispatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"aggregateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"MessageProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"MirrorConnectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"mirrorDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"amb\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mirrorConnector\",\"type\":\"address\"}],\"name\":\"NewConnector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"Process\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updater\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRateLimit\",\"type\":\"uint256\"}],\"name\":\"SendRateLimitUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"watcherManager\",\"type\":\"address\"}],\"name\":\"WatcherManagerChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MERKLE\",\"outputs\":[{\"internalType\":\"contract MerkleTreeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROCESS_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROOT_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"addSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"aliasedSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowlistedSenders\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_recipientAddress\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_messageBody\",\"type\":\"bytes\"}],\"name\":\"dispatch\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"home\",\"outputs\":[{\"internalType\":\"contract IOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_potentialReplica\",\"type\":\"address\"}],\"name\":\"isReplica\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastSentBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localDomain\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"messages\",\"outputs\":[{\"internalType\":\"enum SpokeConnector.MessageStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outboundRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"pendingAggregateRoots\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"path\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct SpokeConnector.Proof[]\",\"name\":\"_proofs\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"_aggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[32]\",\"name\":\"_aggregatePath\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"_aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"proveAndProcess\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenAggregateRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenMessageRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rateLimitBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_fraudulentRoot\",\"type\":\"bytes32\"}],\"name\":\"removePendingAggregateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"removeSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"sentMessageRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_delayBlocks\",\"type\":\"uint256\"}],\"name\":\"setDelayBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"}],\"name\":\"setMirrorConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rateLimit\",\"type\":\"uint256\"}],\"name\":\"setRateLimitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"}],\"name\":\"setWatcherManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"watcherManager\",\"outputs\":[{\"internalType\":\"contract WatcherManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addSender(address)\":{\"details\":\"Only allowlisted routers (senders) can call `dispatch`.\"},\"dispatch(uint32,bytes32,bytes)\":{\"details\":\"The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \\\"hub\\\"), it will be combined into a single aggregate root by RootManager (along with outbound roots from other chains). This aggregate root will be redistributed to all destination chains. NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\"},\"home()\":{\"details\":\"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad\",\"returns\":{\"_0\":\"The local inbox contract\"}},\"isReplica(address)\":{\"returns\":{\"_0\":\"True if _potentialReplica is an enrolled Replica\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"processMessage(bytes)\":{\"details\":\"This is called by AMBs to process messages originating from mirror connector\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)\":{\"details\":\"Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.Intended to be called by the relayer at specific intervals during runtime.Will record a calculated root as having been proven if we've already proven that it was included in the aggregateRoot.\",\"params\":{\"_aggregateIndex\":\"Index of the inbound root in the aggregator's merkle tree in the hub.\",\"_aggregatePath\":\"Merkle path of inclusion for the inbound root.\",\"_aggregateRoot\":\"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.\",\"_proofs\":\"Batch of Proofs containing messages for proving/processing.\"}},\"removePendingAggregateRoot(bytes32)\":{\"details\":\"This method is required for handling fraud cases in the current construction.\",\"params\":{\"_fraudulentRoot\":\"Target fraudulent root that should be erased from the `pendingAggregateRoots` mapping.\"}},\"removeSender(address)\":{\"details\":\"Only allowlisted routers (senders) can call `dispatch`.\"},\"renounceOwnership()\":{\"details\":\"Renounce ownership should be impossible as long as it is impossible in the WatcherClient, and as long as only the owner can remove pending roots in case of fraud.\"},\"setRateLimitBlocks(uint256)\":{\"details\":\"Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\",\"params\":{\"_rateLimit\":\"The number of blocks require between sending messages. If set to 0, rate limiting for this spoke connector will be disabled.\"}},\"withdrawFunds(address)\":{\"details\":\"Withdraws the entire balance of the contract.\",\"params\":{\"_to\":\"The recipient of the funds withdrawn\"}}},\"stateVariables\":{\"aliasedSender\":{\"details\":\"See: https://developer.arbitrum.io/arbos/l1-to-l2-messaging#address-aliasing\"}},\"version\":1},\"userdoc\":{\"events\":{\"FundsWithdrawn(address,uint256)\":{\"notice\":\"Emitted when funds are withdrawn by the admin\"},\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"},\"WatcherManagerChanged(address)\":{\"notice\":\"Emitted when the manager address changes\"}},\"kind\":\"user\",\"methods\":{\"AMB()\":{\"notice\":\"Address of the AMB on this domain.\"},\"DOMAIN()\":{\"notice\":\"The domain of this Messaging (i.e. Connector) contract.\"},\"MERKLE()\":{\"notice\":\"MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root will be sent crosschain to the hub for aggregation and redistribution.\"},\"MIRROR_DOMAIN()\":{\"notice\":\"The domain of the corresponding messaging (i.e. Connector) contract.\"},\"PROCESS_GAS()\":{\"notice\":\"Minimum gas for processing a received message (reserved for handle)\"},\"RESERVE_GAS()\":{\"notice\":\"Reserved gas (to ensure tx completes in case message processing runs out)\"},\"ROOT_MANAGER()\":{\"notice\":\"RootManager contract address.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"addSender(address)\":{\"notice\":\"Adds a sender to the allowlist.\"},\"aliasedSender()\":{\"notice\":\"Aliased address of mirror connector. This value should be calculated and set when the `_mirrorConnector` address is set.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"delayBlocks()\":{\"notice\":\"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary.\"},\"dispatch(uint32,bytes32,bytes)\":{\"notice\":\"This function adds transfers to the outbound transfer merkle tree.\"},\"home()\":{\"notice\":\"Get the local inbox contract from the xAppConnectionManager\"},\"isReplica(address)\":{\"notice\":\"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\"},\"lastSentBlock()\":{\"notice\":\"Tracks the last block that we sent a message.\"},\"localDomain()\":{\"notice\":\"This provides the implementation for what is defined in the ConnectorManager to avoid storing the domain redundantly\"},\"messages(bytes32)\":{\"notice\":\"Mapping of message leaves to MessageStatus, keyed on leaf.\"},\"mirrorConnector()\":{\"notice\":\"Connector on L2 for L1 connectors, and vice versa.\"},\"nonces(uint32)\":{\"notice\":\"domain => next available nonce for the domain.\"},\"outboundRoot()\":{\"notice\":\"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"pause()\":{\"notice\":\"Watchers can pause contracts if fraud is detected\"},\"pendingAggregateRoots(bytes32)\":{\"notice\":\"This will hold the commit block for incoming aggregateRoots from the hub chain. Once they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can be used for proving inclusion of crosschain messages.\"},\"processMessage(bytes)\":{\"notice\":\"Processes a message received by an AMB\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)\":{\"notice\":\"Must be able to call the `handle` function on the BridgeRouter contract. This is called on the destination domain to handle incoming messages. Proving: Calculates the expected inbound root from an origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this calculated inbound root is included in the current aggregateRoot, given its index in the aggregator tree and the proof of inclusion. Processing: After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for execution.\"},\"provenAggregateRoots(bytes32)\":{\"notice\":\"This tracks the roots of the aggregate tree containing outbound roots from all other supported domains. The current version is the one that is known to be past the delayBlocks time period.\"},\"provenMessageRoots(bytes32)\":{\"notice\":\"This tracks whether the root has been proven to exist within the given aggregate root.\"},\"rateLimitBlocks()\":{\"notice\":\"The number of blocks required between message sending events.\"},\"removePendingAggregateRoot(bytes32)\":{\"notice\":\"Manually remove a pending aggregateRoot by owner if the contract is paused.\"},\"removeSender(address)\":{\"notice\":\"Removes a sender from the allowlist.\"},\"renounceOwnership()\":{\"notice\":\"Remove ability to renounce ownership\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"send(bytes)\":{\"notice\":\"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)\"},\"sentMessageRoots(bytes32)\":{\"notice\":\"This mapping records all message roots that have already been sent in order to prevent redundant message roots from being sent to hub.\"},\"setDelayBlocks(uint256)\":{\"notice\":\"Set the `delayBlocks`, the period in blocks over which an incoming message is verified.\"},\"setMirrorConnector(address)\":{\"notice\":\"Sets the address of the l2Connector for this domain\"},\"setRateLimitBlocks(uint256)\":{\"notice\":\"Set the rate limit (number of blocks) at which we can send messages from this contract to the hub chain using the `send` method.\"},\"setWatcherManager(address)\":{\"notice\":\"Owner can enroll a watcher (abilities are defined by inheriting contracts)\"},\"unpause()\":{\"notice\":\"Owner can unpause contracts if fraud is detected by watchers\"},\"verifySender(address)\":{\"notice\":\"Checks the cross domain sender for a given address\"},\"watcherManager()\":{\"notice\":\"The `WatcherManager` contract governs the watcher allowlist.\"},\"withdrawFunds(address)\":{\"notice\":\"This function should be callable by owner, and send funds trapped on a connector to the provided recipient.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol\":\"ArbitrumSpokeConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (crosschain/arbitrum/LibArbitrumL2.sol)\\n\\npragma solidity ^0.8.4;\\n\\nimport {IArbSys as ArbitrumL2_Bridge} from \\\"../../vendor/arbitrum/IArbSys.sol\\\";\\nimport \\\"../errors.sol\\\";\\n\\n/**\\n * @dev Primitives for cross-chain aware contracts for\\n * https://arbitrum.io/[Arbitrum].\\n *\\n * This version should only be used on L2 to process cross-chain messages\\n * originating from L1. For the other side, use {LibArbitrumL1}.\\n *\\n * WARNING: There is currently a bug in Arbitrum that causes this contract to\\n * fail to detect cross-chain calls when deployed behind a proxy. This will be\\n * fixed when the network is upgraded to Arbitrum Nitro, currently scheduled for\\n * August 31st 2022.\\n */\\nlibrary LibArbitrumL2 {\\n    /**\\n     * @dev Returns whether the current function call is the result of a\\n     * cross-chain message relayed by `arbsys`.\\n     */\\n    address public constant ARBSYS = 0x0000000000000000000000000000000000000064;\\n\\n    function isCrossChain(address arbsys) internal view returns (bool) {\\n        return ArbitrumL2_Bridge(arbsys).wasMyCallersAddressAliased();\\n    }\\n\\n    /**\\n     * @dev Returns the address of the sender that triggered the current\\n     * cross-chain message through `arbsys`.\\n     *\\n     * NOTE: {isCrossChain} should be checked before trying to recover the\\n     * sender, as it will revert with `NotCrossChainCall` if the current\\n     * function call is not the result of a cross-chain message.\\n     */\\n    function crossChainSender(address arbsys) internal view returns (address) {\\n        if (!isCrossChain(arbsys)) revert NotCrossChainCall();\\n\\n        return ArbitrumL2_Bridge(arbsys).myCallersAddressWithoutAliasing();\\n    }\\n}\\n\",\"keccak256\":\"0xab1259cd9cdb3fccfb8bfae3240954541c3abddcf0f9444b5ebb3393300bb78e\",\"license\":\"MIT\"},\"@openzeppelin/contracts/crosschain/errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (crosschain/errors.sol)\\n\\npragma solidity ^0.8.4;\\n\\nerror NotCrossChainCall();\\nerror InvalidCrossChainSender(address actual, address expected);\\n\",\"keccak256\":\"0xa1e9b651a2427925598b49ef35da5930abc07859cfac5b9dfb1912f063a024b3\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n    /**\\n     * @dev Emitted when the pause is triggered by `account`.\\n     */\\n    event Paused(address account);\\n\\n    /**\\n     * @dev Emitted when the pause is lifted by `account`.\\n     */\\n    event Unpaused(address account);\\n\\n    bool private _paused;\\n\\n    /**\\n     * @dev Initializes the contract in unpaused state.\\n     */\\n    constructor() {\\n        _paused = false;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    modifier whenNotPaused() {\\n        _requireNotPaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    modifier whenPaused() {\\n        _requirePaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the contract is paused, and false otherwise.\\n     */\\n    function paused() public view virtual returns (bool) {\\n        return _paused;\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is paused.\\n     */\\n    function _requireNotPaused() internal view virtual {\\n        require(!paused(), \\\"Pausable: paused\\\");\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is not paused.\\n     */\\n    function _requirePaused() internal view virtual {\\n        require(paused(), \\\"Pausable: not paused\\\");\\n    }\\n\\n    /**\\n     * @dev Triggers stopped state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    function _pause() internal virtual whenNotPaused {\\n        _paused = true;\\n        emit Paused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Returns to normal state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    function _unpause() internal virtual whenPaused {\\n        _paused = false;\\n        emit Unpaused(_msgSender());\\n    }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/vendor/arbitrum/IArbSys.sol\":{\"content\":\"// Copyright 2021-2022, Offchain Labs, Inc.\\n// For license information, see https://github.com/OffchainLabs/nitro/blob/master/LICENSE\\n// SPDX-License-Identifier: BUSL-1.1\\n// OpenZeppelin Contracts (last updated v4.8.0) (vendor/arbitrum/IArbSys.sol)\\n\\npragma solidity >=0.4.21 <0.9.0;\\n\\n/**\\n * @title System level functionality\\n * @notice For use by contracts to interact with core L2-specific functionality.\\n * Precompiled contract that exists in every Arbitrum chain at address(100), 0x0000000000000000000000000000000000000064.\\n */\\ninterface IArbSys {\\n    /**\\n     * @notice Get Arbitrum block number (distinct from L1 block number; Arbitrum genesis block has block number 0)\\n     * @return block number as int\\n     */\\n    function arbBlockNumber() external view returns (uint256);\\n\\n    /**\\n     * @notice Get Arbitrum block hash (reverts unless currentBlockNum-256 <= arbBlockNum < currentBlockNum)\\n     * @return block hash\\n     */\\n    function arbBlockHash(uint256 arbBlockNum) external view returns (bytes32);\\n\\n    /**\\n     * @notice Gets the rollup's unique chain identifier\\n     * @return Chain identifier as int\\n     */\\n    function arbChainID() external view returns (uint256);\\n\\n    /**\\n     * @notice Get internal version number identifying an ArbOS build\\n     * @return version number as int\\n     */\\n    function arbOSVersion() external view returns (uint256);\\n\\n    /**\\n     * @notice Returns 0 since Nitro has no concept of storage gas\\n     * @return uint 0\\n     */\\n    function getStorageGasAvailable() external view returns (uint256);\\n\\n    /**\\n     * @notice (deprecated) check if current call is top level (meaning it was triggered by an EoA or a L1 contract)\\n     * @dev this call has been deprecated and may be removed in a future release\\n     * @return true if current execution frame is not a call by another L2 contract\\n     */\\n    function isTopLevelCall() external view returns (bool);\\n\\n    /**\\n     * @notice map L1 sender contract address to its L2 alias\\n     * @param sender sender address\\n     * @param unused argument no longer used\\n     * @return aliased sender address\\n     */\\n    function mapL1SenderContractAddressToL2Alias(address sender, address unused) external pure returns (address);\\n\\n    /**\\n     * @notice check if the caller (of this caller of this) is an aliased L1 contract address\\n     * @return true iff the caller's address is an alias for an L1 contract address\\n     */\\n    function wasMyCallersAddressAliased() external view returns (bool);\\n\\n    /**\\n     * @notice return the address of the caller (of this caller of this), without applying L1 contract address aliasing\\n     * @return address of the caller's caller, without applying L1 contract address aliasing\\n     */\\n    function myCallersAddressWithoutAliasing() external view returns (address);\\n\\n    /**\\n     * @notice Send given amount of Eth to dest from sender.\\n     * This is a convenience function, which is equivalent to calling sendTxToL1 with empty data.\\n     * @param destination recipient address on L1\\n     * @return unique identifier for this L2-to-L1 transaction.\\n     */\\n    function withdrawEth(address destination) external payable returns (uint256);\\n\\n    /**\\n     * @notice Send a transaction to L1\\n     * @dev it is not possible to execute on the L1 any L2-to-L1 transaction which contains data\\n     * to a contract address without any code (as enforced by the Bridge contract).\\n     * @param destination recipient address on L1\\n     * @param data (optional) calldata for L1 contract call\\n     * @return a unique identifier for this L2-to-L1 transaction.\\n     */\\n    function sendTxToL1(address destination, bytes calldata data) external payable returns (uint256);\\n\\n    /**\\n     * @notice Get send Merkle tree state\\n     * @return size number of sends in the history\\n     * @return root root hash of the send history\\n     * @return partials hashes of partial subtrees in the send history tree\\n     */\\n    function sendMerkleTreeState()\\n        external\\n        view\\n        returns (\\n            uint256 size,\\n            bytes32 root,\\n            bytes32[] memory partials\\n        );\\n\\n    /**\\n     * @notice creates a send txn from L2 to L1\\n     * @param position = (level << 192) + leaf = (0 << 192) + leaf = leaf\\n     */\\n    event L2ToL1Tx(\\n        address caller,\\n        address indexed destination,\\n        uint256 indexed hash,\\n        uint256 indexed position,\\n        uint256 arbBlockNum,\\n        uint256 ethBlockNum,\\n        uint256 timestamp,\\n        uint256 callvalue,\\n        bytes data\\n    );\\n\\n    /// @dev DEPRECATED in favour of the new L2ToL1Tx event above after the nitro upgrade\\n    event L2ToL1Transaction(\\n        address caller,\\n        address indexed destination,\\n        uint256 indexed uniqueId,\\n        uint256 indexed batchNumber,\\n        uint256 indexInBatch,\\n        uint256 arbBlockNum,\\n        uint256 ethBlockNum,\\n        uint256 timestamp,\\n        uint256 callvalue,\\n        bytes data\\n    );\\n\\n    /**\\n     * @notice logs a merkle branch for proof synthesis\\n     * @param reserved an index meant only to align the 4th index with L2ToL1Transaction's 4th event\\n     * @param hash the merkle hash\\n     * @param position = (level << 192) + leaf\\n     */\\n    event SendMerkleUpdate(uint256 indexed reserved, bytes32 indexed hash, uint256 indexed position);\\n}\\n\",\"keccak256\":\"0xed30463b2696afccf589a002901b4b6556b807fe9f8de8bd6f6b665b3634f933\",\"license\":\"BUSL-1.1\"},\"contracts/messaging/MerkleTreeManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnableUpgradeable} from \\\"../shared/ProposedOwnableUpgradeable.sol\\\";\\nimport {MerkleLib} from \\\"./libraries/MerkleLib.sol\\\";\\n\\n/**\\n * @title MerkleTreeManager\\n * @notice Contains a Merkle tree instance and exposes read/write functions for the tree.\\n * @dev On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector.\\n */\\ncontract MerkleTreeManager is ProposedOwnableUpgradeable {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleTreeManager__setArborist_zeroAddress();\\n  error MerkleTreeManager__setArborist_alreadyArborist();\\n\\n  // ============ Events ============\\n\\n  event ArboristUpdated(address previous, address updated);\\n\\n  event LeafInserted(bytes32 root, uint256 count, bytes32 leaf);\\n\\n  event LeavesInserted(bytes32 root, uint256 count, bytes32[] leaves);\\n\\n  // ============ Libraries ============\\n\\n  using MerkleLib for MerkleLib.Tree;\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Core data structure with which this contract is tasked with keeping custody.\\n   * Writable only by the designated arborist.\\n   */\\n  MerkleLib.Tree public tree;\\n\\n  /**\\n   * @notice The arborist contract that has permission to write to this tree.\\n   * @dev This could be the root manager contract or a spoke connector contract, for example.\\n   */\\n  address public arborist;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyArborist() {\\n    require(arborist == msg.sender, \\\"!arborist\\\");\\n    _;\\n  }\\n\\n  // ============ Getters ============\\n\\n  /**\\n   * @notice Returns the current branch.\\n   */\\n  function branch() public view returns (bytes32[32] memory) {\\n    return tree.branch;\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the current root.\\n   */\\n  function root() public view returns (bytes32) {\\n    return tree.root();\\n  }\\n\\n  /**\\n   * @notice Returns the number of inserted leaves in the tree (current index).\\n   */\\n  function count() public view returns (uint256) {\\n    return tree.count;\\n  }\\n\\n  /**\\n   * @notice Convenience getter: returns the root and count.\\n   */\\n  function rootAndCount() public view returns (bytes32, uint256) {\\n    return (tree.root(), tree.count);\\n  }\\n\\n  // ======== Initializer =========\\n\\n  function initialize(address _arborist) public initializer {\\n    __MerkleTreeManager_init(_arborist);\\n    __ProposedOwnable_init();\\n  }\\n\\n  /**\\n   * @dev Initializes MerkleTreeManager instance. Sets the msg.sender as the initial permissioned\\n   */\\n  function __MerkleTreeManager_init(address _arborist) internal onlyInitializing {\\n    __MerkleTreeManager_init_unchained(_arborist);\\n  }\\n\\n  function __MerkleTreeManager_init_unchained(address _arborist) internal onlyInitializing {\\n    arborist = _arborist;\\n  }\\n\\n  // ============ Admin Functions ==============\\n\\n  /**\\n   * @notice Method for the current arborist to assign write permissions to a new arborist.\\n   * @param newArborist The new address to set as the current arborist.\\n   */\\n  function setArborist(address newArborist) external onlyOwner {\\n    if (newArborist == address(0)) revert MerkleTreeManager__setArborist_zeroAddress();\\n    address current = arborist;\\n    if (current == newArborist) revert MerkleTreeManager__setArborist_alreadyArborist();\\n\\n    // Emit updated event\\n    emit ArboristUpdated(current, newArborist);\\n\\n    arborist = newArborist;\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as there is a possibility the\\n   * arborist may change.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ========= Public Functions =========\\n\\n  /**\\n   * @notice Inserts the given leaves into the tree.\\n   * @param leaves The leaves to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32[] memory leaves) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // For > 1 leaf, considerably more efficient to put this tree into memory, conduct operations,\\n    // then re-assign it to storage - *especially* if we have multiple leaves to insert.\\n    MerkleLib.Tree memory _tree = tree;\\n\\n    uint256 leafCount = leaves.length;\\n    for (uint256 i; i < leafCount; ) {\\n      // Insert the new node (using in-memory method).\\n      _tree = _tree.insert(leaves[i]);\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // Write the newly updated tree to storage.\\n    tree = _tree;\\n\\n    // Get return details for convenience.\\n    _count = _tree.count;\\n    // NOTE: Root calculation method currently reads from storage only.\\n    _root = tree.root();\\n\\n    emit LeavesInserted(_root, _count, leaves);\\n  }\\n\\n  /**\\n   * @notice Inserts the given leaf into the tree.\\n   * @param leaf The leaf to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32 leaf) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // Insert the new node.\\n    tree = tree.insert(leaf);\\n    _count = tree.count;\\n    _root = tree.root();\\n\\n    emit LeafInserted(_root, _count, leaf);\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[48] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x6eb338843435d4e859de1c71b9ad458c41aeba79002eaa58a463ef86effda89a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherClient.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Pausable} from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\nimport {WatcherManager} from \\\"./WatcherManager.sol\\\";\\n\\n/**\\n * @notice This contract abstracts the functionality of the watcher manager.\\n * Contracts can inherit this contract to be able to use the watcher manager's shared watcher set.\\n */\\n\\ncontract WatcherClient is ProposedOwnable, Pausable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted when the manager address changes\\n   * @param watcherManager The updated manager\\n   */\\n  event WatcherManagerChanged(address watcherManager);\\n\\n  // ============ Properties ============\\n  /**\\n   * @notice The `WatcherManager` contract governs the watcher allowlist.\\n   * @dev Multiple clients can share a watcher set using the same manager\\n   */\\n  WatcherManager public watcherManager;\\n\\n  // ============ Constructor ============\\n  constructor(address _watcherManager) ProposedOwnable() {\\n    watcherManager = WatcherManager(_watcherManager);\\n  }\\n\\n  // ============ Modifiers ============\\n  /**\\n   * @notice Enforces the sender is the watcher\\n   */\\n  modifier onlyWatcher() {\\n    require(watcherManager.isWatcher(msg.sender), \\\"!watcher\\\");\\n    _;\\n  }\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @notice Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function setWatcherManager(address _watcherManager) external onlyOwner {\\n    require(_watcherManager != address(watcherManager), \\\"already watcher manager\\\");\\n    watcherManager = WatcherManager(_watcherManager);\\n    emit WatcherManagerChanged(_watcherManager);\\n  }\\n\\n  /**\\n   * @notice Owner can unpause contracts if fraud is detected by watchers\\n   */\\n  function unpause() external onlyOwner whenPaused {\\n    _unpause();\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as only the owner\\n   * is able to unpause the contracts. You can still propose `address(0)`,\\n   * but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ============ Watcher fns ============\\n\\n  /**\\n   * @notice Watchers can pause contracts if fraud is detected\\n   */\\n  function pause() external onlyWatcher whenNotPaused {\\n    _pause();\\n  }\\n}\\n\",\"keccak256\":\"0x97b0da2c0317359ef2980d1f3c5fcdd7df2bdacbedf216dcbda521b96124444a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can\\n * inherit to make use of the same watcher set.\\n */\\n\\ncontract WatcherManager is ProposedOwnable {\\n  // ============ Events ============\\n  event WatcherAdded(address watcher);\\n\\n  event WatcherRemoved(address watcher);\\n\\n  // ============ Properties ============\\n  mapping(address => bool) public isWatcher;\\n\\n  // ============ Constructor ============\\n  constructor() ProposedOwnable() {\\n    _setOwner(msg.sender);\\n  }\\n\\n  // ============ Modifiers ============\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @dev Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function addWatcher(address _watcher) external onlyOwner {\\n    require(!isWatcher[_watcher], \\\"already watcher\\\");\\n    isWatcher[_watcher] = true;\\n    emit WatcherAdded(_watcher);\\n  }\\n\\n  /**\\n   * @dev Owner can unenroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function removeWatcher(address _watcher) external onlyOwner {\\n    require(isWatcher[_watcher], \\\"!exist\\\");\\n    delete isWatcher[_watcher];\\n    emit WatcherRemoved(_watcher);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as the watcher griefing\\n   * vector exists. You can still propose `address(0)`, but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n}\\n\",\"keccak256\":\"0x94d9db4cd19453c9047164f697011163a42a6e12f9b2e1d7fbcfb35a7d021318\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/Connector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IConnector} from \\\"../interfaces/IConnector.sol\\\";\\n\\n/**\\n * @title Connector\\n * @author Connext Labs, Inc.\\n * @notice This contract has the messaging interface functions used by all connectors.\\n *\\n * @dev This contract stores information about mirror connectors, but can be used as a\\n * base for contracts that do not have a mirror (i.e. the connector handling messaging on\\n * mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\\n * will be empty\\n *\\n * @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\\n * or `mirrorGas`\\n */\\nabstract contract Connector is ProposedOwnable, IConnector {\\n  // ========== Custom Errors ===========\\n\\n  error Connector__processMessage_notUsed();\\n\\n  // ============ Events ============\\n\\n  event NewConnector(\\n    uint32 indexed domain,\\n    uint32 indexed mirrorDomain,\\n    address amb,\\n    address rootManager,\\n    address mirrorConnector\\n  );\\n\\n  event MirrorConnectorUpdated(address previous, address current);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The domain of this Messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable DOMAIN;\\n\\n  /**\\n   * @notice Address of the AMB on this domain.\\n   */\\n  address public immutable AMB;\\n\\n  /**\\n   * @notice RootManager contract address.\\n   */\\n  address public immutable ROOT_MANAGER;\\n\\n  /**\\n   * @notice The domain of the corresponding messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable MIRROR_DOMAIN;\\n\\n  /**\\n   * @notice Connector on L2 for L1 connectors, and vice versa.\\n   */\\n  address public mirrorConnector;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered AMB\\n   */\\n  modifier onlyAMB() {\\n    require(msg.sender == AMB, \\\"!AMB\\\");\\n    _;\\n  }\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered ROOT_MANAGER\\n   */\\n  modifier onlyRootManager() {\\n    // NOTE: RootManager will be zero address for spoke connectors.\\n    // Only root manager can dispatch a message to spokes/L2s via the hub connector.\\n    require(msg.sender == ROOT_MANAGER, \\\"!rootManager\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) ProposedOwnable() {\\n    // set the owner\\n    _setOwner(msg.sender);\\n\\n    // sanity checks on values\\n    require(_domain != 0, \\\"empty domain\\\");\\n    require(_rootManager != address(0), \\\"empty rootManager\\\");\\n    // see note at top of contract on why the mirror values are not sanity checked\\n\\n    // set immutables\\n    DOMAIN = _domain;\\n    AMB = _amb;\\n    ROOT_MANAGER = _rootManager;\\n    MIRROR_DOMAIN = _mirrorDomain;\\n    // set mutables if defined\\n    if (_mirrorConnector != address(0)) {\\n      _setMirrorConnector(_mirrorConnector);\\n    }\\n\\n    emit NewConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector);\\n  }\\n\\n  // ============ Receivable ============\\n  /**\\n   * @notice Connectors may need to receive native asset to handle fees when sending a\\n   * message\\n   */\\n  receive() external payable {}\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Sets the address of the l2Connector for this domain\\n   */\\n  function setMirrorConnector(address _mirrorConnector) public onlyOwner {\\n    _setMirrorConnector(_mirrorConnector);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice Processes a message received by an AMB\\n   * @dev This is called by AMBs to process messages originating from mirror connector\\n   */\\n  function processMessage(bytes memory _data) external virtual onlyAMB {\\n    _processMessage(_data);\\n    emit MessageProcessed(_data, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Checks the cross domain sender for a given address\\n   */\\n  function verifySender(address _expected) external returns (bool) {\\n    return _verifySender(_expected);\\n  }\\n\\n  // ============ Virtual Functions ============\\n\\n  /**\\n   * @notice This function is used by the Connext contract on the l2 domain to send a message to the\\n   * l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\\n   * @param _data The contents of the message\\n   * @param _encodedData Data used to send the message; specific to connector\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal virtual;\\n\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(\\n    bytes memory /* _data */\\n  ) internal virtual {\\n    // By default, reverts. This is to ensure the call path is not used unless this function is\\n    // overridden by the inheriting class\\n    revert Connector__processMessage_notUsed();\\n  }\\n\\n  /**\\n   * @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\\n   * is the expected address.\\n   * @dev Should be overridden by the implementing Connector contract.\\n   */\\n  function _verifySender(address _expected) internal virtual returns (bool);\\n\\n  // ============ Private Functions ============\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal virtual {\\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\\n    mirrorConnector = _mirrorConnector;\\n  }\\n}\\n\",\"keccak256\":\"0x08d4077a1b5caf9f46491206064bb24bee467dd741b42fed3d30a608eea83368\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/ConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IConnectorManager} from \\\"../interfaces/IConnectorManager.sol\\\";\\nimport {IOutbox} from \\\"../interfaces/IOutbox.sol\\\";\\n\\n/**\\n * @notice This is an interface to allow the `Messaging` contract to be used\\n * as a `XappConnectionManager` on all router contracts.\\n *\\n * @dev Each nomad router contract has a `XappConnectionClient`, which references a\\n * XappConnectionManager to get the `Home` (outbox) and approved `Replica` (inbox)\\n * instances. At any point the client can replace the manager it's pointing to,\\n * changing the underlying messaging connection.\\n */\\nabstract contract ConnectorManager is IConnectorManager {\\n  constructor() {}\\n\\n  function home() public view returns (IOutbox) {\\n    return IOutbox(address(this));\\n  }\\n\\n  function isReplica(address _potentialReplica) public view returns (bool) {\\n    return _potentialReplica == address(this);\\n  }\\n\\n  function localDomain() external view virtual returns (uint32);\\n}\\n\",\"keccak256\":\"0x0112a527de062459aadfc2c8aa59a81c379d53c0f646f7869c6250e343ba91be\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/SpokeConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ReentrancyGuard} from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {ExcessivelySafeCall} from \\\"../../shared/libraries/ExcessivelySafeCall.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {MerkleLib} from \\\"../libraries/MerkleLib.sol\\\";\\nimport {Message} from \\\"../libraries/Message.sol\\\";\\nimport {RateLimited} from \\\"../libraries/RateLimited.sol\\\";\\n\\nimport {MerkleTreeManager} from \\\"../MerkleTreeManager.sol\\\";\\nimport {WatcherClient} from \\\"../WatcherClient.sol\\\";\\n\\nimport {Connector, ProposedOwnable} from \\\"./Connector.sol\\\";\\nimport {ConnectorManager} from \\\"./ConnectorManager.sol\\\";\\n\\n/**\\n * @title SpokeConnector\\n * @author Connext Labs, Inc.\\n * @notice This contract implements the messaging functions needed on the spoke-side of a given AMB.\\n * The SpokeConnector extends the HubConnector functionality by being able to send, store, and prove\\n * messages.\\n *\\n * @dev If you are deploying this contract to mainnet, then the mirror values stored in the HubConnector\\n * will be unused\\n */\\nabstract contract SpokeConnector is Connector, ConnectorManager, WatcherClient, RateLimited, ReentrancyGuard {\\n  // ============ Libraries ============\\n\\n  using MerkleLib for MerkleLib.Tree;\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n  using Message for bytes29;\\n\\n  // ============ Events ============\\n\\n  event SenderAdded(address sender);\\n\\n  event SenderRemoved(address sender);\\n\\n  event AggregateRootReceived(bytes32 root);\\n\\n  event AggregateRootRemoved(bytes32 root);\\n\\n  event AggregateRootVerified(bytes32 indexed root);\\n\\n  event Dispatch(bytes32 leaf, uint256 index, bytes32 root, bytes message);\\n\\n  event Process(bytes32 leaf, bool success, bytes returnData);\\n\\n  event DelayBlocksUpdated(uint256 indexed updated, address caller);\\n\\n  /**\\n   * @notice Emitted when funds are withdrawn by the admin\\n   * @dev See comments in `withdrawFunds`\\n   * @param to The recipient of the funds\\n   * @param amount The amount withdrawn\\n   */\\n  event FundsWithdrawn(address indexed to, uint256 amount);\\n\\n  event MessageProven(bytes32 indexed leaf, bytes32 indexed aggregateRoot, uint256 aggregateIndex);\\n\\n  // ============ Structs ============\\n\\n  // Status of Message:\\n  //   0 - None - message has not been proven or processed\\n  //   1 - Proven - message inclusion proof has been validated\\n  //   2 - Processed - message has been dispatched to recipient\\n  enum MessageStatus {\\n    None,\\n    Proven,\\n    Processed\\n  }\\n\\n  /**\\n   * Struct for submitting a proof for a given message. Used in `proveAndProcess` below.\\n   * @param message Bytes of message to be processed. The hash of this message is considered the leaf.\\n   * @param proof Merkle proof of inclusion for given leaf.\\n   * @param index Index of leaf in home's merkle tree.\\n   */\\n  struct Proof {\\n    bytes message;\\n    bytes32[32] path;\\n    uint256 index;\\n  }\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Number of blocks to delay the processing of a message to allow for watchers to verify\\n   * the validity and pause if necessary.\\n   */\\n  uint256 public delayBlocks;\\n\\n  /**\\n   * @notice MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root\\n   * will be sent crosschain to the hub for aggregation and redistribution.\\n   */\\n  MerkleTreeManager public immutable MERKLE;\\n\\n  /**\\n   * @notice Minimum gas for processing a received message (reserved for handle)\\n   */\\n  uint256 public immutable PROCESS_GAS;\\n\\n  /**\\n   * @notice Reserved gas (to ensure tx completes in case message processing runs out)\\n   */\\n  uint256 public immutable RESERVE_GAS;\\n\\n  /**\\n   * @notice This will hold the commit block for incoming aggregateRoots from the hub chain. Once\\n   * they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can\\n   * be used for proving inclusion of crosschain messages.\\n   *\\n   * @dev NOTE: A commit block of 0 should be considered invalid (it is an empty entry in the\\n   * mapping). We must ALWAYS ensure the value is not 0 before checking whether it has surpassed the\\n   * verification period.\\n   */\\n  mapping(bytes32 => uint256) public pendingAggregateRoots;\\n\\n  /**\\n   * @notice This tracks the roots of the aggregate tree containing outbound roots from all other\\n   * supported domains. The current version is the one that is known to be past the delayBlocks\\n   * time period.\\n   * @dev This root is the root of the tree that is aggregated on mainnet (composed of all the roots\\n   * of previous trees).\\n   */\\n  mapping(bytes32 => bool) public provenAggregateRoots;\\n\\n  /**\\n   * @notice This tracks whether the root has been proven to exist within the given aggregate root.\\n   * @dev Tracking this is an optimization so you dont have to prove inclusion of the same constituent\\n   * root many times.\\n   */\\n  mapping(bytes32 => bool) public provenMessageRoots;\\n\\n  /**\\n   * @notice This mapping records all message roots that have already been sent in order to prevent\\n   * redundant message roots from being sent to hub.\\n   */\\n  mapping(bytes32 => bool) public sentMessageRoots;\\n\\n  /**\\n   * @dev This is used for the `onlyAllowlistedSender` modifier, which gates who\\n   * can send messages using `dispatch`.\\n   */\\n  mapping(address => bool) public allowlistedSenders;\\n\\n  /**\\n   * @notice domain => next available nonce for the domain.\\n   */\\n  mapping(uint32 => uint32) public nonces;\\n\\n  /**\\n   * @notice Mapping of message leaves to MessageStatus, keyed on leaf.\\n   */\\n  mapping(bytes32 => MessageStatus) public messages;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyAllowlistedSender() {\\n    require(allowlistedSenders[msg.sender], \\\"!allowlisted\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new SpokeConnector instance.\\n   * @param _domain The domain this connector lives on.\\n   * @param _mirrorDomain The hub domain.\\n   * @param _amb The address of the AMB on the spoke domain this connector lives on.\\n   * @param _rootManager The address of the RootManager on the hub.\\n   * @param _mirrorConnector The address of the spoke connector.\\n   * @param _processGas The gas costs used in `handle` to ensure meaningful state changes can occur (minimum gas needed\\n   * to handle transaction).\\n   * @param _reserveGas The gas costs reserved when `handle` is called to ensure failures are handled.\\n   * @param _delayBlocks The delay for the validation period for incoming messages in blocks.\\n   * @param _merkle The address of the MerkleTreeManager on this spoke domain.\\n   * @param _watcherManager The address of the WatcherManager to whom this connector is a client.\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    uint256 _processGas,\\n    uint256 _reserveGas,\\n    uint256 _delayBlocks,\\n    address _merkle,\\n    address _watcherManager\\n  )\\n    ConnectorManager()\\n    Connector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector)\\n    WatcherClient(_watcherManager)\\n  {\\n    // Sanity check: constants are reasonable.\\n    require(_processGas > 850_000 - 1, \\\"!process gas\\\");\\n    require(_reserveGas > 15_000 - 1, \\\"!reserve gas\\\");\\n    PROCESS_GAS = _processGas;\\n    RESERVE_GAS = _reserveGas;\\n\\n    require(_merkle != address(0), \\\"!zero merkle\\\");\\n    MERKLE = MerkleTreeManager(_merkle);\\n\\n    delayBlocks = _delayBlocks;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Adds a sender to the allowlist.\\n   * @dev Only allowlisted routers (senders) can call `dispatch`.\\n   */\\n  function addSender(address _sender) public onlyOwner {\\n    allowlistedSenders[_sender] = true;\\n    emit SenderAdded(_sender);\\n  }\\n\\n  /**\\n   * @notice Removes a sender from the allowlist.\\n   * @dev Only allowlisted routers (senders) can call `dispatch`.\\n   */\\n  function removeSender(address _sender) public onlyOwner {\\n    delete allowlistedSenders[_sender];\\n    emit SenderRemoved(_sender);\\n  }\\n\\n  /**\\n   * @notice Set the `delayBlocks`, the period in blocks over which an incoming message\\n   * is verified.\\n   */\\n  function setDelayBlocks(uint256 _delayBlocks) public onlyOwner {\\n    require(_delayBlocks != delayBlocks, \\\"!delayBlocks\\\");\\n    emit DelayBlocksUpdated(_delayBlocks, msg.sender);\\n    delayBlocks = _delayBlocks;\\n  }\\n\\n  /**\\n   * @notice Set the rate limit (number of blocks) at which we can send messages from\\n   * this contract to the hub chain using the `send` method.\\n   * @dev Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\\n   * @param _rateLimit The number of blocks require between sending messages. If set to\\n   * 0, rate limiting for this spoke connector will be disabled.\\n   */\\n  function setRateLimitBlocks(uint256 _rateLimit) public onlyOwner {\\n    _setRateLimitBlocks(_rateLimit);\\n  }\\n\\n  /**\\n   * @notice Manually remove a pending aggregateRoot by owner if the contract is paused.\\n   * @dev This method is required for handling fraud cases in the current construction.\\n   * @param _fraudulentRoot Target fraudulent root that should be erased from the\\n   * `pendingAggregateRoots` mapping.\\n   */\\n  function removePendingAggregateRoot(bytes32 _fraudulentRoot) public onlyOwner whenPaused {\\n    // Sanity check: pending aggregate root exists.\\n    require(pendingAggregateRoots[_fraudulentRoot] != 0, \\\"aggregateRoot !exists\\\");\\n    delete pendingAggregateRoots[_fraudulentRoot];\\n    emit AggregateRootRemoved(_fraudulentRoot);\\n  }\\n\\n  /**\\n   * @notice This function should be callable by owner, and send funds trapped on\\n   * a connector to the provided recipient.\\n   * @dev Withdraws the entire balance of the contract.\\n   *\\n   * @param _to The recipient of the funds withdrawn\\n   */\\n  function withdrawFunds(address _to) public onlyOwner {\\n    uint256 amount = address(this).balance;\\n    Address.sendValue(payable(_to), amount);\\n    emit FundsWithdrawn(_to, amount);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as it is impossible in the\\n   * WatcherClient, and as long as only the owner can remove pending roots in case of\\n   * fraud.\\n   */\\n  function renounceOwnership() public virtual override(ProposedOwnable, WatcherClient) onlyOwner {}\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice This returns the root of all messages with the origin domain as this domain (i.e.\\n   * all outbound messages)\\n   */\\n  function outboundRoot() external view returns (bytes32) {\\n    return MERKLE.root();\\n  }\\n\\n  /**\\n   * @notice This provides the implementation for what is defined in the ConnectorManager\\n   * to avoid storing the domain redundantly\\n   */\\n  function localDomain() external view override returns (uint32) {\\n    return DOMAIN;\\n  }\\n\\n  /**\\n   * @notice This returns the root of all messages with the origin domain as this domain (i.e.\\n   * all outbound messages)\\n   */\\n  function send(bytes memory _encodedData) external payable whenNotPaused rateLimited {\\n    bytes32 root = MERKLE.root();\\n    require(sentMessageRoots[root] == false, \\\"root already sent\\\");\\n    bytes memory _data = abi.encodePacked(root);\\n    _sendMessage(_data, _encodedData);\\n    sentMessageRoots[root] = true;\\n    emit MessageSent(_data, _encodedData, msg.sender);\\n  }\\n\\n  /**\\n   * @notice This function adds transfers to the outbound transfer merkle tree.\\n   * @dev The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \\\"hub\\\"),\\n   * it will be combined into a single aggregate root by RootManager (along with outbound roots from other\\n   * chains). This aggregate root will be redistributed to all destination chains.\\n   *\\n   * NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external onlyAllowlistedSender returns (bytes32, bytes memory) {\\n    // Get the next nonce for the destination domain, then increment it.\\n    uint32 _nonce = nonces[_destinationDomain]++;\\n\\n    // Format the message into packed bytes.\\n    bytes memory _message = Message.formatMessage(\\n      DOMAIN,\\n      TypeCasts.addressToBytes32(msg.sender),\\n      _nonce,\\n      _destinationDomain,\\n      _recipientAddress,\\n      _messageBody\\n    );\\n\\n    // Insert the hashed message into the Merkle tree.\\n    bytes32 _messageHash = keccak256(_message);\\n\\n    // Returns the root calculated after insertion of message, needed for events for\\n    // watchers\\n    (bytes32 _root, uint256 _count) = MERKLE.insert(_messageHash);\\n\\n    // Emit Dispatch event with message information.\\n    // NOTE: Current leaf index is count - 1 since new leaf has already been inserted.\\n    emit Dispatch(_messageHash, _count - 1, _root, _message);\\n    return (_messageHash, _message);\\n  }\\n\\n  /**\\n   * @notice Must be able to call the `handle` function on the BridgeRouter contract. This is called\\n   * on the destination domain to handle incoming messages.\\n   *\\n   * Proving:\\n   * Calculates the expected inbound root from an origin chain given a leaf (message hash),\\n   * the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this\\n   * calculated inbound root is included in the current aggregateRoot, given its index in the aggregator\\n   * tree and the proof of inclusion.\\n   *\\n   * Processing:\\n   * After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for\\n   * execution.\\n   *\\n   * @dev Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they\\n   * must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.\\n   * @dev Intended to be called by the relayer at specific intervals during runtime.\\n   * @dev Will record a calculated root as having been proven if we've already proven that it was included\\n   * in the aggregateRoot.\\n   *\\n   * @param _proofs Batch of Proofs containing messages for proving/processing.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   */\\n  function proveAndProcess(\\n    Proof[] calldata _proofs,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) external whenNotPaused nonReentrant {\\n    // Sanity check: proofs are included.\\n    require(_proofs.length > 0, \\\"!proofs\\\");\\n\\n    // Optimization: calculate the inbound root for the first message in the batch and validate that\\n    // it's included in the aggregator tree. We can use this as a reference for every calculation\\n    // below to minimize storage access calls.\\n    bytes32 _messageHash = keccak256(_proofs[0].message);\\n    // TODO: Could use an array of sharedRoots so you can submit a message batch of messages with\\n    // different origins.\\n    bytes32 _messageRoot = calculateMessageRoot(_messageHash, _proofs[0].path, _proofs[0].index);\\n\\n    // Handle proving this message root is included in the target aggregate root.\\n    proveMessageRoot(_messageRoot, _aggregateRoot, _aggregatePath, _aggregateIndex);\\n    // Assuming the inbound message root was proven, the first message is now considered proven.\\n    messages[_messageHash] = MessageStatus.Proven;\\n\\n    // Now we handle proving all remaining messages in the batch - they should all share the same\\n    // inbound root!\\n    uint256 len = _proofs.length;\\n    for (uint32 i = 1; i < len; ) {\\n      _messageHash = keccak256(_proofs[i].message);\\n      bytes32 _calculatedRoot = calculateMessageRoot(_messageHash, _proofs[i].path, _proofs[i].index);\\n      // Make sure this root matches the validated inbound root.\\n      require(_calculatedRoot == _messageRoot, \\\"!sharedRoot\\\");\\n      // Message is proven!\\n      messages[_messageHash] = MessageStatus.Proven;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // All messages have been proven. We iterate separately here to process each message in the batch.\\n    // NOTE: Going through the proving phase for all messages in the batch BEFORE processing ensures\\n    // we hit reverts before we consume unbounded gas from `process` calls.\\n    for (uint32 i = 0; i < len; ) {\\n      process(_proofs[i].message);\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  // ============ Private Functions ============\\n\\n  /**\\n   * @notice This is either called by the Connector (AKA `this`) on the spoke (L2) chain after retrieving\\n   * latest `aggregateRoot` from the AMB (sourced from mainnet) OR called by the AMB directly.\\n   * @dev Must check the msg.sender on the origin chain to ensure only the root manager is passing\\n   * these roots.\\n   */\\n  function receiveAggregateRoot(bytes32 _newRoot) internal {\\n    require(_newRoot != bytes32(\\\"\\\"), \\\"new root empty\\\");\\n    require(pendingAggregateRoots[_newRoot] == 0, \\\"root already pending\\\");\\n    require(!provenAggregateRoots[_newRoot], \\\"root already proven\\\");\\n\\n    pendingAggregateRoots[_newRoot] = block.number;\\n    emit AggregateRootReceived(_newRoot);\\n  }\\n\\n  /**\\n   * @notice Checks whether the given aggregate root has surpassed the verification period.\\n   * @dev Reverts if the given aggregate root is invalid (does not exist) OR has not surpassed\\n   * verification period.\\n   * @dev If the target aggregate root is pending and HAS surpassed the verification period, then we will\\n   * move it over to the proven mapping.\\n   * @param _aggregateRoot Target aggregate root to verify.\\n   */\\n  function verifyAggregateRoot(bytes32 _aggregateRoot) internal {\\n    // 0. Sanity check: root is not 0.\\n    require(_aggregateRoot != bytes32(\\\"\\\"), \\\"aggregateRoot empty\\\");\\n\\n    // 1. Check to see if the target *aggregate* root has already been proven.\\n    if (provenAggregateRoots[_aggregateRoot]) {\\n      return; // Short circuit if this root is proven.\\n    }\\n\\n    // 2. The target aggregate root must be pending. Aggregate root commit block entry MUST exist.\\n    uint256 _aggregateRootCommitBlock = pendingAggregateRoots[_aggregateRoot];\\n    require(_aggregateRootCommitBlock != 0, \\\"aggregateRoot !exist\\\");\\n\\n    // 3. Pending aggregate root has surpassed the `delayBlocks` verification period.\\n    require(block.number - _aggregateRootCommitBlock >= delayBlocks, \\\"aggregateRoot !verified\\\");\\n\\n    // 4. The target aggregate root has surpassed verification period, we can move it over to the\\n    // proven mapping.\\n    provenAggregateRoots[_aggregateRoot] = true;\\n    emit AggregateRootVerified(_aggregateRoot);\\n    // May as well delete the pending aggregate root entry for the gas refund: it should no longer\\n    // be needed.\\n    delete pendingAggregateRoots[_aggregateRoot];\\n  }\\n\\n  /**\\n   * @notice Checks whether a given message is valid. If so, calculates the expected inbound root from an\\n   * origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion.\\n   * @dev Reverts if message's MessageStatus != None (i.e. if message was already proven or processed).\\n   *\\n   * @param _messageHash Leaf (message hash) that requires proving.\\n   * @param _messagePath Merkle path of inclusion for the leaf.\\n   * @param _messageIndex Index of leaf in the merkle tree on the origin chain of the message.\\n   * @return bytes32 Calculated root.\\n   **/\\n  function calculateMessageRoot(\\n    bytes32 _messageHash,\\n    bytes32[32] calldata _messagePath,\\n    uint256 _messageIndex\\n  ) internal view returns (bytes32) {\\n    // Ensure that the given message has not already been proven and processed.\\n    require(messages[_messageHash] == MessageStatus.None, \\\"!MessageStatus.None\\\");\\n    // Calculate the expected inbound root from the message origin based on the proof.\\n    // NOTE: Assuming a valid message was submitted with correct path/index, this should be an inbound root\\n    // that the hub has received. If the message were invalid, the root calculated here would not exist in the\\n    // aggregate root.\\n    return MerkleLib.branchRoot(_messageHash, _messagePath, _messageIndex);\\n  }\\n\\n  /**\\n   * @notice Prove an inbound message root from another chain is included in the target aggregateRoot.\\n   * @param _messageRoot The message root we want to verify.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   */\\n  function proveMessageRoot(\\n    bytes32 _messageRoot,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) internal {\\n    // 0. Check to see if the root for this batch has already been proven.\\n    if (provenMessageRoots[_messageRoot]) {\\n      // NOTE: It seems counter-intuitive, but we do NOT need to prove the given `_aggregateRoot` param\\n      // is valid IFF the `_messageRoot` has already been proven; we know that the `_messageRoot` has to\\n      // have been included in *some* proven aggregate root historically.\\n      return;\\n    }\\n\\n    // 1. Ensure aggregate root has been proven.\\n    verifyAggregateRoot(_aggregateRoot);\\n\\n    // 2. Calculate an aggregate root, given this inbound root (as leaf), path (proof), and index.\\n    bytes32 _calculatedAggregateRoot = MerkleLib.branchRoot(_messageRoot, _aggregatePath, _aggregateIndex);\\n\\n    // 3. Check to make sure it matches the current aggregate root we have stored.\\n    require(_calculatedAggregateRoot == _aggregateRoot, \\\"invalid inboundRoot\\\");\\n\\n    // This inbound root has been proven. We should specify that to optimize future calls.\\n    provenMessageRoots[_messageRoot] = true;\\n    emit MessageProven(_messageRoot, _aggregateRoot, _aggregateIndex);\\n  }\\n\\n  /**\\n   * @notice Given formatted message, attempts to dispatch message payload to end recipient.\\n   * @dev Recipient must implement a `handle` method (refer to IMessageRecipient.sol)\\n   * Reverts if formatted message's destination domain is not the Replica's domain,\\n   * if message has not been proven,\\n   * or if not enough gas is provided for the dispatch transaction.\\n   * @param _message Formatted message\\n   * @return _success TRUE iff dispatch transaction succeeded\\n   */\\n  function process(bytes memory _message) internal returns (bool _success) {\\n    bytes29 _m = _message.ref(0);\\n    // ensure message was meant for this domain\\n    require(_m.destination() == DOMAIN, \\\"!destination\\\");\\n    // ensure message has been proven\\n    bytes32 _messageHash = _m.keccak();\\n    require(messages[_messageHash] == MessageStatus.Proven, \\\"!proven\\\");\\n    // check re-entrancy guard\\n    // require(entered == 1, \\\"!reentrant\\\");\\n    // entered = 0;\\n    // update message status as processed\\n    messages[_messageHash] = MessageStatus.Processed;\\n    // A call running out of gas TYPICALLY errors the whole tx. We want to\\n    // a) ensure the call has a sufficient amount of gas to make a\\n    //    meaningful state change.\\n    // b) ensure that if the subcall runs out of gas, that the tx as a whole\\n    //    does not revert (i.e. we still mark the message processed)\\n    // To do this, we require that we have enough gas to process\\n    // and still return. We then delegate only the minimum processing gas.\\n    require(gasleft() > PROCESS_GAS + RESERVE_GAS - 1, \\\"!gas\\\");\\n    // get the message recipient\\n    address _recipient = _m.recipientAddress();\\n    // set up for assembly call\\n    uint256 _gas = PROCESS_GAS;\\n    uint16 _maxCopy = 256;\\n    // allocate memory for returndata\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    bytes memory _calldata = abi.encodeWithSignature(\\n      \\\"handle(uint32,uint32,bytes32,bytes)\\\",\\n      _m.origin(),\\n      _m.nonce(),\\n      _m.sender(),\\n      _m.body().clone()\\n    );\\n\\n    (_success, _returnData) = ExcessivelySafeCall.excessivelySafeCall(_recipient, _gas, 0, _maxCopy, _calldata);\\n\\n    // emit process results\\n    emit Process(_messageHash, _success, _returnData);\\n  }\\n}\\n\",\"keccak256\":\"0xde9ea6f462f33e62618d069fddaeed24268d13cfe03abc9dd388824a5e4e3896\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {LibArbitrumL2} from \\\"@openzeppelin/contracts/crosschain/arbitrum/LibArbitrumL2.sol\\\";\\nimport {IArbSys} from \\\"@openzeppelin/contracts/vendor/arbitrum/IArbSys.sol\\\";\\n\\nimport {ArbitrumL2Amb} from \\\"../../interfaces/ambs/arbitrum/ArbitrumL2Amb.sol\\\";\\n\\nimport {SpokeConnector} from \\\"../SpokeConnector.sol\\\";\\nimport {Connector} from \\\"../Connector.sol\\\";\\n\\ncontract ArbitrumSpokeConnector is SpokeConnector {\\n  // ============ Events ============\\n\\n  event AliasedSenderUpdated(address previous, address current);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Aliased address of mirror connector. This value should be calculated and set\\n   * when the `_mirrorConnector` address is set.\\n   * @dev See: https://developer.arbitrum.io/arbos/l1-to-l2-messaging#address-aliasing\\n   */\\n  address public aliasedSender;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the aliased sender\\n   */\\n  modifier onlyAliased() {\\n    require(msg.sender == aliasedSender, \\\"!aliasedSender\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    uint256 _processGas,\\n    uint256 _reserveGas,\\n    uint256 _delayBlocks,\\n    address _merkle,\\n    address _watcherManager\\n  )\\n    SpokeConnector(\\n      _domain,\\n      _mirrorDomain,\\n      _amb,\\n      _rootManager,\\n      _mirrorConnector,\\n      _processGas,\\n      _reserveGas,\\n      _delayBlocks,\\n      _merkle,\\n      _watcherManager\\n    )\\n  {\\n    _setAliasedSender(_mirrorConnector);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice Processes a message received by an AMB\\n   * @dev This is called by AMBs to process messages originating from mirror connector\\n   */\\n  function processMessage(bytes memory _data) external override onlyAliased {\\n    _processMessage(_data);\\n    emit MessageProcessed(_data, msg.sender);\\n  }\\n\\n  // ============ Private Functions ============\\n\\n  function _verifySender(address _expected) internal view override returns (bool) {\\n    return _expected == LibArbitrumL2.crossChainSender(AMB);\\n  }\\n\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\\n    // Should always be dispatching the aggregate root\\n    require(_data.length == 32, \\\"!length\\\");\\n    // Should not include specialized calldata\\n    require(_encodedData.length == 0, \\\"!data length\\\");\\n    // Get the calldata\\n    bytes memory _calldata = abi.encodeWithSelector(Connector.processMessage.selector, _data);\\n    // Send to L1\\n    ArbitrumL2Amb(AMB).sendTxToL1(mirrorConnector, _calldata);\\n  }\\n\\n  function _processMessage(bytes memory _data) internal override {\\n    // only callable by mirror connector\\n    require(_verifySender(mirrorConnector), \\\"!mirrorConnector\\\");\\n    // get the data (should be the aggregate root)\\n    require(_data.length == 32, \\\"!length\\\");\\n    // update the aggregate root on the domain\\n    receiveAggregateRoot(bytes32(_data));\\n  }\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal override {\\n    _setAliasedSender(_mirrorConnector);\\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\\n    mirrorConnector = _mirrorConnector;\\n  }\\n\\n  function _setAliasedSender(address _mirrorConnector) internal {\\n    // Calculate the alias address.\\n    address _alias = IArbSys(AMB).mapL1SenderContractAddressToL2Alias(_mirrorConnector, address(0));\\n    emit AliasedSenderUpdated(aliasedSender, _alias);\\n    // Update our aliased sender (used in `processMessage` override).\\n    aliasedSender = _alias;\\n  }\\n}\\n\",\"keccak256\":\"0x090f2352ba0a92c0a93babd5666ec3ca834abbb0331d7168695e019e5beafbe1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/ambs/arbitrum/ArbitrumL2Amb.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\ninterface ArbitrumL2Amb {\\n  // Send a transaction to L1\\n  function sendTxToL1(address destAddr, bytes calldata calldataForL1) external payable;\\n}\\n\",\"keccak256\":\"0x554d08783abbae962d9917e8a5d17731e82f61ea59bba5f4e8fa7d2d02c92ed3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/MerkleLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MerkleLib\\n * @author Illusory Systems Inc.\\n * @notice An incremental merkle tree modeled on the eth2 deposit contract.\\n **/\\nlibrary MerkleLib {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleLib__insert_treeIsFull();\\n\\n  // ============ Constants =============\\n\\n  uint256 internal constant TREE_DEPTH = 32;\\n  uint256 internal constant MAX_LEAVES = 2**TREE_DEPTH - 1;\\n\\n  /**\\n   * @dev Z_i represent the hash values at different heights for a binary tree with leaf values equal to `0`.\\n   * (e.g. Z_1 is the keccak256 hash of (0x0, 0x0), Z_2 is the keccak256 hash of (Z_1, Z_1), etc...)\\n   * Z_0 is the bottom of the 33-layer tree, Z_32 is the top (i.e. root).\\n   * Used to shortcut calculation in root calculation methods below.\\n   */\\n  bytes32 internal constant Z_0 = hex\\\"0000000000000000000000000000000000000000000000000000000000000000\\\";\\n  bytes32 internal constant Z_1 = hex\\\"ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5\\\";\\n  bytes32 internal constant Z_2 = hex\\\"b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30\\\";\\n  bytes32 internal constant Z_3 = hex\\\"21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85\\\";\\n  bytes32 internal constant Z_4 = hex\\\"e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344\\\";\\n  bytes32 internal constant Z_5 = hex\\\"0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d\\\";\\n  bytes32 internal constant Z_6 = hex\\\"887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968\\\";\\n  bytes32 internal constant Z_7 = hex\\\"ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83\\\";\\n  bytes32 internal constant Z_8 = hex\\\"9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af\\\";\\n  bytes32 internal constant Z_9 = hex\\\"cefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0\\\";\\n  bytes32 internal constant Z_10 = hex\\\"f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5\\\";\\n  bytes32 internal constant Z_11 = hex\\\"f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892\\\";\\n  bytes32 internal constant Z_12 = hex\\\"3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c\\\";\\n  bytes32 internal constant Z_13 = hex\\\"c1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb\\\";\\n  bytes32 internal constant Z_14 = hex\\\"5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc\\\";\\n  bytes32 internal constant Z_15 = hex\\\"da7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2\\\";\\n  bytes32 internal constant Z_16 = hex\\\"2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f\\\";\\n  bytes32 internal constant Z_17 = hex\\\"e1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a\\\";\\n  bytes32 internal constant Z_18 = hex\\\"5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0\\\";\\n  bytes32 internal constant Z_19 = hex\\\"b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0\\\";\\n  bytes32 internal constant Z_20 = hex\\\"c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2\\\";\\n  bytes32 internal constant Z_21 = hex\\\"f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9\\\";\\n  bytes32 internal constant Z_22 = hex\\\"5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377\\\";\\n  bytes32 internal constant Z_23 = hex\\\"4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652\\\";\\n  bytes32 internal constant Z_24 = hex\\\"cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef\\\";\\n  bytes32 internal constant Z_25 = hex\\\"0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d\\\";\\n  bytes32 internal constant Z_26 = hex\\\"b8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0\\\";\\n  bytes32 internal constant Z_27 = hex\\\"838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e\\\";\\n  bytes32 internal constant Z_28 = hex\\\"662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e\\\";\\n  bytes32 internal constant Z_29 = hex\\\"388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322\\\";\\n  bytes32 internal constant Z_30 = hex\\\"93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735\\\";\\n  bytes32 internal constant Z_31 = hex\\\"8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9\\\";\\n  bytes32 internal constant Z_32 = hex\\\"27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757\\\";\\n\\n  // ============= Structs ==============\\n\\n  /**\\n   * @notice Struct representing incremental merkle tree. Contains current\\n   * branch and the number of inserted leaves in the tree.\\n   **/\\n  struct Tree {\\n    bytes32[TREE_DEPTH] branch;\\n    uint256 count;\\n  }\\n\\n  // ========= Write Methods =========\\n\\n  /**\\n   * @notice Inserts a given node (leaf) into merkle tree. Operates on an in-memory tree and\\n   * returns an updated version of that tree.\\n   * @dev Reverts if the tree is already full.\\n   * @param node Element to insert into tree.\\n   * @return Tree Updated tree.\\n   **/\\n  function insert(Tree memory tree, bytes32 node) internal pure returns (Tree memory) {\\n    // Update tree.count to increase the current count by 1 since we'll be including a new node.\\n    uint256 size = ++tree.count;\\n    if (size > MAX_LEAVES) revert MerkleLib__insert_treeIsFull();\\n\\n    // Loop starting at 0, ending when we've finished inserting the node (i.e. hashing it) into\\n    // the active branch. Each loop we cut size in half, hashing the inserted node up the active\\n    // branch along the way.\\n    for (uint256 i; i < TREE_DEPTH; ) {\\n      // Check if the current size is odd; if so, we set this index in the branch to be the node.\\n      if ((size & 1) == 1) {\\n        // If i > 0, then this node will be a hash of the original node with every layer up\\n        // until layer `i`.\\n        tree.branch[i] = node;\\n        return tree;\\n      }\\n      // If the size is not yet odd, we hash the current index in the tree branch with the node.\\n      node = keccak256(abi.encodePacked(tree.branch[i], node));\\n      size >>= 1; // Cut size in half (statement equivalent to: `size /= 2`).\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // As the loop should always end prematurely with the `return` statement, this code should\\n    // be unreachable. We revert here just to be safe.\\n    revert MerkleLib__insert_treeIsFull();\\n  }\\n\\n  // ========= Read Methods =========\\n\\n  /**\\n   * @notice Calculates and returns tree's current root.\\n   * @return _current bytes32 root.\\n   **/\\n  function root(Tree storage tree) internal view returns (bytes32 _current) {\\n    uint256 _index = tree.count;\\n\\n    if (_index == 0) {\\n      return Z_32;\\n    }\\n\\n    uint256 i;\\n    assembly {\\n      let TREE_SLOT := tree.slot\\n\\n      for {\\n\\n      } true {\\n\\n      } {\\n        for {\\n\\n        } true {\\n\\n        } {\\n          if and(_index, 1) {\\n            mstore(0, sload(TREE_SLOT))\\n            mstore(0x20, Z_0)\\n            _current := keccak256(0, 0x40)\\n            break\\n          }\\n\\n          if and(_index, shl(1, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 1)))\\n            mstore(0x20, Z_1)\\n            _current := keccak256(0, 0x40)\\n            i := 1\\n            break\\n          }\\n\\n          if and(_index, shl(2, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 2)))\\n            mstore(0x20, Z_2)\\n            _current := keccak256(0, 0x40)\\n            i := 2\\n            break\\n          }\\n\\n          if and(_index, shl(3, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 3)))\\n            mstore(0x20, Z_3)\\n            _current := keccak256(0, 0x40)\\n            i := 3\\n            break\\n          }\\n\\n          if and(_index, shl(4, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 4)))\\n            mstore(0x20, Z_4)\\n            _current := keccak256(0, 0x40)\\n            i := 4\\n            break\\n          }\\n\\n          if and(_index, shl(5, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 5)))\\n            mstore(0x20, Z_5)\\n            _current := keccak256(0, 0x40)\\n            i := 5\\n            break\\n          }\\n\\n          if and(_index, shl(6, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 6)))\\n            mstore(0x20, Z_6)\\n            _current := keccak256(0, 0x40)\\n            i := 6\\n            break\\n          }\\n\\n          if and(_index, shl(7, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 7)))\\n            mstore(0x20, Z_7)\\n            _current := keccak256(0, 0x40)\\n            i := 7\\n            break\\n          }\\n\\n          if and(_index, shl(8, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 8)))\\n            mstore(0x20, Z_8)\\n            _current := keccak256(0, 0x40)\\n            i := 8\\n            break\\n          }\\n\\n          if and(_index, shl(9, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 9)))\\n            mstore(0x20, Z_9)\\n            _current := keccak256(0, 0x40)\\n            i := 9\\n            break\\n          }\\n\\n          if and(_index, shl(10, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 10)))\\n            mstore(0x20, Z_10)\\n            _current := keccak256(0, 0x40)\\n            i := 10\\n            break\\n          }\\n\\n          if and(_index, shl(11, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 11)))\\n            mstore(0x20, Z_11)\\n            _current := keccak256(0, 0x40)\\n            i := 11\\n            break\\n          }\\n\\n          if and(_index, shl(12, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 12)))\\n            mstore(0x20, Z_12)\\n            _current := keccak256(0, 0x40)\\n            i := 12\\n            break\\n          }\\n\\n          if and(_index, shl(13, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 13)))\\n            mstore(0x20, Z_13)\\n            _current := keccak256(0, 0x40)\\n            i := 13\\n            break\\n          }\\n\\n          if and(_index, shl(14, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 14)))\\n            mstore(0x20, Z_14)\\n            _current := keccak256(0, 0x40)\\n            i := 14\\n            break\\n          }\\n\\n          if and(_index, shl(15, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 15)))\\n            mstore(0x20, Z_15)\\n            _current := keccak256(0, 0x40)\\n            i := 15\\n            break\\n          }\\n\\n          if and(_index, shl(16, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 16)))\\n            mstore(0x20, Z_16)\\n            _current := keccak256(0, 0x40)\\n            i := 16\\n            break\\n          }\\n\\n          if and(_index, shl(17, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 17)))\\n            mstore(0x20, Z_17)\\n            _current := keccak256(0, 0x40)\\n            i := 17\\n            break\\n          }\\n\\n          if and(_index, shl(18, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 18)))\\n            mstore(0x20, Z_18)\\n            _current := keccak256(0, 0x40)\\n            i := 18\\n            break\\n          }\\n\\n          if and(_index, shl(19, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 19)))\\n            mstore(0x20, Z_19)\\n            _current := keccak256(0, 0x40)\\n            i := 19\\n            break\\n          }\\n\\n          if and(_index, shl(20, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 20)))\\n            mstore(0x20, Z_20)\\n            _current := keccak256(0, 0x40)\\n            i := 20\\n            break\\n          }\\n\\n          if and(_index, shl(21, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 21)))\\n            mstore(0x20, Z_21)\\n            _current := keccak256(0, 0x40)\\n            i := 21\\n            break\\n          }\\n\\n          if and(_index, shl(22, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 22)))\\n            mstore(0x20, Z_22)\\n            _current := keccak256(0, 0x40)\\n            i := 22\\n            break\\n          }\\n\\n          if and(_index, shl(23, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 23)))\\n            mstore(0x20, Z_23)\\n            _current := keccak256(0, 0x40)\\n            i := 23\\n            break\\n          }\\n\\n          if and(_index, shl(24, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 24)))\\n            mstore(0x20, Z_24)\\n            _current := keccak256(0, 0x40)\\n            i := 24\\n            break\\n          }\\n\\n          if and(_index, shl(25, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 25)))\\n            mstore(0x20, Z_25)\\n            _current := keccak256(0, 0x40)\\n            i := 25\\n            break\\n          }\\n\\n          if and(_index, shl(26, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 26)))\\n            mstore(0x20, Z_26)\\n            _current := keccak256(0, 0x40)\\n            i := 26\\n            break\\n          }\\n\\n          if and(_index, shl(27, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 27)))\\n            mstore(0x20, Z_27)\\n            _current := keccak256(0, 0x40)\\n            i := 27\\n            break\\n          }\\n\\n          if and(_index, shl(28, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 28)))\\n            mstore(0x20, Z_28)\\n            _current := keccak256(0, 0x40)\\n            i := 28\\n            break\\n          }\\n\\n          if and(_index, shl(29, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 29)))\\n            mstore(0x20, Z_29)\\n            _current := keccak256(0, 0x40)\\n            i := 29\\n            break\\n          }\\n\\n          if and(_index, shl(30, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 30)))\\n            mstore(0x20, Z_30)\\n            _current := keccak256(0, 0x40)\\n            i := 30\\n            break\\n          }\\n\\n          if and(_index, shl(31, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 31)))\\n            mstore(0x20, Z_31)\\n            _current := keccak256(0, 0x40)\\n            i := 31\\n            break\\n          }\\n\\n          _current := Z_32\\n          i := 32\\n          break\\n        }\\n\\n        if gt(i, 30) {\\n          break\\n        }\\n\\n        {\\n          if lt(i, 1) {\\n            switch and(_index, shl(1, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_1)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 1)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 2) {\\n            switch and(_index, shl(2, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_2)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 2)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 3) {\\n            switch and(_index, shl(3, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_3)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 3)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 4) {\\n            switch and(_index, shl(4, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_4)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 4)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 5) {\\n            switch and(_index, shl(5, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_5)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 5)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 6) {\\n            switch and(_index, shl(6, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_6)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 6)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 7) {\\n            switch and(_index, shl(7, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_7)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 7)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 8) {\\n            switch and(_index, shl(8, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_8)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 8)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 9) {\\n            switch and(_index, shl(9, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_9)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 9)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 10) {\\n            switch and(_index, shl(10, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_10)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 10)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 11) {\\n            switch and(_index, shl(11, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_11)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 11)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 12) {\\n            switch and(_index, shl(12, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_12)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 12)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 13) {\\n            switch and(_index, shl(13, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_13)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 13)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 14) {\\n            switch and(_index, shl(14, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_14)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 14)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 15) {\\n            switch and(_index, shl(15, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_15)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 15)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 16) {\\n            switch and(_index, shl(16, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_16)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 16)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 17) {\\n            switch and(_index, shl(17, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_17)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 17)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 18) {\\n            switch and(_index, shl(18, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_18)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 18)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 19) {\\n            switch and(_index, shl(19, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_19)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 19)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 20) {\\n            switch and(_index, shl(20, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_20)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 20)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 21) {\\n            switch and(_index, shl(21, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_21)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 21)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 22) {\\n            switch and(_index, shl(22, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_22)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 22)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 23) {\\n            switch and(_index, shl(23, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_23)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 23)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 24) {\\n            switch and(_index, shl(24, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_24)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 24)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 25) {\\n            switch and(_index, shl(25, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_25)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 25)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 26) {\\n            switch and(_index, shl(26, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_26)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 26)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 27) {\\n            switch and(_index, shl(27, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_27)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 27)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 28) {\\n            switch and(_index, shl(28, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_28)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 28)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 29) {\\n            switch and(_index, shl(29, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_29)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 29)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 30) {\\n            switch and(_index, shl(30, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_30)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 30)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 31) {\\n            switch and(_index, shl(31, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_31)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 31)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n        }\\n\\n        break\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the merkle root for the given leaf `_item`,\\n   * a merkle branch, and the index of `_item` in the tree.\\n   * @param _item Merkle leaf\\n   * @param _branch Merkle proof\\n   * @param _index Index of `_item` in tree\\n   * @return _current Calculated merkle root\\n   **/\\n  function branchRoot(\\n    bytes32 _item,\\n    bytes32[TREE_DEPTH] memory _branch,\\n    uint256 _index\\n  ) internal pure returns (bytes32 _current) {\\n    assembly {\\n      _current := _item\\n      let BRANCH_DATA_OFFSET := _branch\\n      let f\\n\\n      f := shl(5, and(_index, 1))\\n      mstore(f, _current)\\n      mstore(sub(0x20, f), mload(BRANCH_DATA_OFFSET))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(1, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 1))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(2, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 2))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(3, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 3))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(4, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 4))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(5, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 5))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(6, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 6))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(7, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 7))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(8, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 8))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(9, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 9))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(10, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 10))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(11, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 11))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(12, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 12))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(13, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 13))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(14, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 14))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(15, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 15))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(16, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 16))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(17, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 17))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(18, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 18))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(19, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 19))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(20, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 20))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(21, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 21))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(22, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 22))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(23, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 23))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(24, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 24))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(25, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 25))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(26, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 26))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(27, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 27))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(28, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 28))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(29, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 29))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(30, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 30))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(31, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 31))))\\n      _current := keccak256(0, 0x40)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08c791dbeef6253813d74e2145183501fe7631c13d5ac9d768036f47b66b693e\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/Message.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\n/**\\n * @title Message Library\\n * @author Illusory Systems Inc.\\n * @notice Library for formatted messages used by Home and Replica.\\n **/\\nlibrary Message {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // Number of bytes in formatted message before `body` field\\n  uint256 internal constant PREFIX_LENGTH = 76;\\n\\n  /**\\n   * @notice Returns formatted (packed) message with provided fields\\n   * @param _originDomain Domain of home chain\\n   * @param _sender Address of sender as bytes32\\n   * @param _nonce Destination-specific nonce\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipient Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes of message body\\n   * @return Formatted message\\n   **/\\n  function formatMessage(\\n    uint32 _originDomain,\\n    bytes32 _sender,\\n    uint32 _nonce,\\n    uint32 _destinationDomain,\\n    bytes32 _recipient,\\n    bytes memory _messageBody\\n  ) internal pure returns (bytes memory) {\\n    return abi.encodePacked(_originDomain, _sender, _nonce, _destinationDomain, _recipient, _messageBody);\\n  }\\n\\n  /**\\n   * @notice Returns leaf of formatted message with provided fields.\\n   * @param _origin Domain of home chain\\n   * @param _sender Address of sender as bytes32\\n   * @param _nonce Destination-specific nonce number\\n   * @param _destination Domain of destination chain\\n   * @param _recipient Address of recipient on destination chain as bytes32\\n   * @param _body Raw bytes of message body\\n   * @return Leaf (hash) of formatted message\\n   **/\\n  function messageHash(\\n    uint32 _origin,\\n    bytes32 _sender,\\n    uint32 _nonce,\\n    uint32 _destination,\\n    bytes32 _recipient,\\n    bytes memory _body\\n  ) internal pure returns (bytes32) {\\n    return keccak256(formatMessage(_origin, _sender, _nonce, _destination, _recipient, _body));\\n  }\\n\\n  /// @notice Returns message's origin field\\n  function origin(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(0, 4));\\n  }\\n\\n  /// @notice Returns message's sender field\\n  function sender(bytes29 _message) internal pure returns (bytes32) {\\n    return _message.index(4, 32);\\n  }\\n\\n  /// @notice Returns message's nonce field\\n  function nonce(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(36, 4));\\n  }\\n\\n  /// @notice Returns message's destination field\\n  function destination(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(40, 4));\\n  }\\n\\n  /// @notice Returns message's recipient field as bytes32\\n  function recipient(bytes29 _message) internal pure returns (bytes32) {\\n    return _message.index(44, 32);\\n  }\\n\\n  /// @notice Returns message's recipient field as an address\\n  function recipientAddress(bytes29 _message) internal pure returns (address) {\\n    return TypeCasts.bytes32ToAddress(recipient(_message));\\n  }\\n\\n  /// @notice Returns message's body field as bytes29 (refer to TypedMemView library for details on bytes29 type)\\n  function body(bytes29 _message) internal pure returns (bytes29) {\\n    return _message.slice(PREFIX_LENGTH, _message.len() - PREFIX_LENGTH, 0);\\n  }\\n\\n  function leaf(bytes29 _message) internal pure returns (bytes32) {\\n    uint256 loc = _message.loc();\\n    uint256 len = _message.len();\\n    /*\\n    prev:\\n    return\\n      messageHash(\\n        origin(_message),\\n        sender(_message),\\n        nonce(_message),\\n        destination(_message),\\n        recipient(_message),\\n        TypedMemView.clone(body(_message))\\n      );\\n\\n      below added for gas optimization\\n     */\\n    bytes32 hash;\\n    assembly {\\n      hash := keccak256(loc, len)\\n    }\\n    return hash;\\n  }\\n}\\n\",\"keccak256\":\"0xa4212f7b88146588e8e0e24cddbc5dae6269618a722b34f00ea322b33fa1f36a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/RateLimited.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice An abstract contract intended to manage the rate limiting aspect of spoke\\n * connector messaging. Rate limiting the number of messages we can send over a span of\\n * blocks is used to mitigate key DoSing vectors for transporting messages between chains.\\n */\\nabstract contract RateLimited {\\n  // ========== Custom Errors ===========\\n\\n  error RateLimited__rateLimited_messageSendRateExceeded();\\n\\n  // ============ Events ============\\n\\n  event SendRateLimitUpdated(address updater, uint256 newRateLimit);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The number of blocks required between message sending events.\\n   * @dev NOTE: This value is 0 by default, meaning that rate limiting functionality\\n   * will naturally be disabled by default.\\n   */\\n  uint256 public rateLimitBlocks;\\n\\n  /**\\n   * @notice Tracks the last block that we sent a message.\\n   */\\n  uint256 public lastSentBlock;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Checks to see if we can send this block, given the current rate limit\\n   * setting and the last block we sent a message. If rate limit has been surpassed,\\n   * we update the `lastSentBlock` to be the current block.\\n   */\\n  modifier rateLimited() {\\n    // Check to make sure we have surpassed the number of rate limit blocks.\\n    if (lastSentBlock + rateLimitBlocks > block.number) {\\n      revert RateLimited__rateLimited_messageSendRateExceeded();\\n    }\\n    // Update the last block we sent a message to be the current one.\\n    lastSentBlock = block.number;\\n    _;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Update the current rate limit to a new value.\\n   */\\n  function _setRateLimitBlocks(uint256 _newRateLimit) internal {\\n    require(_newRateLimit != rateLimitBlocks, \\\"!new rate limit\\\");\\n    // NOTE: Setting the block rate limit interval to 0 will result in rate limiting\\n    // being disabled.\\n    rateLimitBlocks = _newRateLimit;\\n    emit SendRateLimitUpdated(msg.sender, _newRateLimit);\\n  }\\n}\\n\",\"keccak256\":\"0xcc185ae966c87441490aaa8c0779a7b3085961a7b8512d5973f1c34f641eeae3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/ProposedOwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {Initializable} from \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"./ProposedOwnable.sol\\\";\\n\\nabstract contract ProposedOwnableUpgradeable is Initializable, ProposedOwnable {\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial\\n   */\\n  function __ProposedOwnable_init() internal onlyInitializing {\\n    __ProposedOwnable_init_unchained();\\n  }\\n\\n  function __ProposedOwnable_init_unchained() internal onlyInitializing {\\n    _setOwner(msg.sender);\\n  }\\n\\n  /**\\n   * @dev This empty reserved space is put in place to allow future versions to add new\\n   * variables without shifting down storage in the inheritance chain.\\n   * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n   */\\n  uint256[47] private __GAP;\\n}\\n\",\"keccak256\":\"0x2b064b03a25915e93749905ef3aae516ffaac86b8ba9f126b614425b623bf477\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/ExcessivelySafeCall.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// Taken from: https://github.com/nomad-xyz/ExcessivelySafeCall\\n// NOTE: There is a difference between npm latest and github main versions\\n// where the latest github version allows you to specify an ether value.\\n\\nlibrary ExcessivelySafeCall {\\n  uint256 constant LOW_28_MASK = 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _value The value in wei to send to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeCall(\\n    address _target,\\n    uint256 _gas,\\n    uint256 _value,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := call(\\n        _gas, // gas\\n        _target, // recipient\\n        _value, // ether value\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeStaticCall(\\n    address _target,\\n    uint256 _gas,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal view returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := staticcall(\\n        _gas, // gas\\n        _target, // recipient\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /**\\n   * @notice Swaps function selectors in encoded contract calls\\n   * @dev Allows reuse of encoded calldata for functions with identical\\n   * argument types but different names. It simply swaps out the first 4 bytes\\n   * for the new selector. This function modifies memory in place, and should\\n   * only be used with caution.\\n   * @param _newSelector The new 4-byte selector\\n   * @param _buf The encoded contract args\\n   */\\n  function swapSelector(bytes4 _newSelector, bytes memory _buf) internal pure {\\n    require(_buf.length > 4 - 1);\\n    uint256 _mask = LOW_28_MASK;\\n    assembly {\\n      // load the first word of\\n      let _word := mload(add(_buf, 0x20))\\n      // mask out the top 4 bytes\\n      // /x\\n      _word := and(_word, _mask)\\n      _word := or(_newSelector, _word)\\n      mstore(add(_buf, 0x20), _word)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x5472b56fa56886620b1a8e4e2f12f8925500bb237a4dad38651c79db69f0724c\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol:ArbitrumSpokeConnector","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol:ArbitrumSpokeConnector","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol:ArbitrumSpokeConnector","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39051,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol:ArbitrumSpokeConnector","label":"mirrorConnector","offset":0,"slot":"3","type":"t_address"},{"astId":10590,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol:ArbitrumSpokeConnector","label":"_paused","offset":20,"slot":"3","type":"t_bool"},{"astId":38824,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol:ArbitrumSpokeConnector","label":"watcherManager","offset":0,"slot":"4","type":"t_contract(WatcherManager)39005"},{"astId":49639,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol:ArbitrumSpokeConnector","label":"rateLimitBlocks","offset":0,"slot":"5","type":"t_uint256"},{"astId":49642,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol:ArbitrumSpokeConnector","label":"lastSentBlock","offset":0,"slot":"6","type":"t_uint256"},{"astId":10691,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol:ArbitrumSpokeConnector","label":"_status","offset":0,"slot":"7","type":"t_uint256"},{"astId":39546,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol:ArbitrumSpokeConnector","label":"delayBlocks","offset":0,"slot":"8","type":"t_uint256"},{"astId":39561,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol:ArbitrumSpokeConnector","label":"pendingAggregateRoots","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":39566,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol:ArbitrumSpokeConnector","label":"provenAggregateRoots","offset":0,"slot":"10","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39571,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol:ArbitrumSpokeConnector","label":"provenMessageRoots","offset":0,"slot":"11","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39576,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol:ArbitrumSpokeConnector","label":"sentMessageRoots","offset":0,"slot":"12","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39581,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol:ArbitrumSpokeConnector","label":"allowlistedSenders","offset":0,"slot":"13","type":"t_mapping(t_address,t_bool)"},{"astId":39586,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol:ArbitrumSpokeConnector","label":"nonces","offset":0,"slot":"14","type":"t_mapping(t_uint32,t_uint32)"},{"astId":39592,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol:ArbitrumSpokeConnector","label":"messages","offset":0,"slot":"15","type":"t_mapping(t_bytes32,t_enum(MessageStatus)39534)"},{"astId":41014,"contract":"contracts/messaging/connectors/arbitrum/ArbitrumSpokeConnector.sol:ArbitrumSpokeConnector","label":"aliasedSender","offset":0,"slot":"16","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(WatcherManager)39005":{"encoding":"inplace","label":"contract WatcherManager","numberOfBytes":"20"},"t_enum(MessageStatus)39534":{"encoding":"inplace","label":"enum SpokeConnector.MessageStatus","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(MessageStatus)39534)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum SpokeConnector.MessageStatus)","numberOfBytes":"32","value":"t_enum(MessageStatus)39534"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_uint32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => uint32)","numberOfBytes":"32","value":"t_uint32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"}}},"userdoc":{"events":{"FundsWithdrawn(address,uint256)":{"notice":"Emitted when funds are withdrawn by the admin"},"MessageProcessed(bytes,address)":{"notice":"Emitted whenever a message is successfully received over an AMB"},"MessageSent(bytes,bytes,address)":{"notice":"Emitted whenever a message is successfully sent over an AMB"},"WatcherManagerChanged(address)":{"notice":"Emitted when the manager address changes"}},"kind":"user","methods":{"AMB()":{"notice":"Address of the AMB on this domain."},"DOMAIN()":{"notice":"The domain of this Messaging (i.e. Connector) contract."},"MERKLE()":{"notice":"MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root will be sent crosschain to the hub for aggregation and redistribution."},"MIRROR_DOMAIN()":{"notice":"The domain of the corresponding messaging (i.e. Connector) contract."},"PROCESS_GAS()":{"notice":"Minimum gas for processing a received message (reserved for handle)"},"RESERVE_GAS()":{"notice":"Reserved gas (to ensure tx completes in case message processing runs out)"},"ROOT_MANAGER()":{"notice":"RootManager contract address."},"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"addSender(address)":{"notice":"Adds a sender to the allowlist."},"aliasedSender()":{"notice":"Aliased address of mirror connector. This value should be calculated and set when the `_mirrorConnector` address is set."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"delayBlocks()":{"notice":"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary."},"dispatch(uint32,bytes32,bytes)":{"notice":"This function adds transfers to the outbound transfer merkle tree."},"home()":{"notice":"Get the local inbox contract from the xAppConnectionManager"},"isReplica(address)":{"notice":"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager"},"lastSentBlock()":{"notice":"Tracks the last block that we sent a message."},"localDomain()":{"notice":"This provides the implementation for what is defined in the ConnectorManager to avoid storing the domain redundantly"},"messages(bytes32)":{"notice":"Mapping of message leaves to MessageStatus, keyed on leaf."},"mirrorConnector()":{"notice":"Connector on L2 for L1 connectors, and vice versa."},"nonces(uint32)":{"notice":"domain => next available nonce for the domain."},"outboundRoot()":{"notice":"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)"},"owner()":{"notice":"Returns the address of the current owner."},"pause()":{"notice":"Watchers can pause contracts if fraud is detected"},"pendingAggregateRoots(bytes32)":{"notice":"This will hold the commit block for incoming aggregateRoots from the hub chain. Once they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can be used for proving inclusion of crosschain messages."},"processMessage(bytes)":{"notice":"Processes a message received by an AMB"},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":{"notice":"Must be able to call the `handle` function on the BridgeRouter contract. This is called on the destination domain to handle incoming messages. Proving: Calculates the expected inbound root from an origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this calculated inbound root is included in the current aggregateRoot, given its index in the aggregator tree and the proof of inclusion. Processing: After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for execution."},"provenAggregateRoots(bytes32)":{"notice":"This tracks the roots of the aggregate tree containing outbound roots from all other supported domains. The current version is the one that is known to be past the delayBlocks time period."},"provenMessageRoots(bytes32)":{"notice":"This tracks whether the root has been proven to exist within the given aggregate root."},"rateLimitBlocks()":{"notice":"The number of blocks required between message sending events."},"removePendingAggregateRoot(bytes32)":{"notice":"Manually remove a pending aggregateRoot by owner if the contract is paused."},"removeSender(address)":{"notice":"Removes a sender from the allowlist."},"renounceOwnership()":{"notice":"Remove ability to renounce ownership"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"send(bytes)":{"notice":"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)"},"sentMessageRoots(bytes32)":{"notice":"This mapping records all message roots that have already been sent in order to prevent redundant message roots from being sent to hub."},"setDelayBlocks(uint256)":{"notice":"Set the `delayBlocks`, the period in blocks over which an incoming message is verified."},"setMirrorConnector(address)":{"notice":"Sets the address of the l2Connector for this domain"},"setRateLimitBlocks(uint256)":{"notice":"Set the rate limit (number of blocks) at which we can send messages from this contract to the hub chain using the `send` method."},"setWatcherManager(address)":{"notice":"Owner can enroll a watcher (abilities are defined by inheriting contracts)"},"unpause()":{"notice":"Owner can unpause contracts if fraud is detected by watchers"},"verifySender(address)":{"notice":"Checks the cross domain sender for a given address"},"watcherManager()":{"notice":"The `WatcherManager` contract governs the watcher allowlist."},"withdrawFunds(address)":{"notice":"This function should be callable by owner, and send funds trapped on a connector to the provided recipient."}},"version":1}}},"contracts/messaging/connectors/gnosis/GnosisBase.sol":{"GnosisBase":{"abi":[{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"GasCapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"MIRROR_CHAIN_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gasCap","type":"uint256"}],"name":"setGasCap","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"MIRROR_CHAIN_ID()":"c8a4d690","acceptProposedOwner()":"c5b350df","delay()":"6a42b8f8","owner()":"8da5cb5b","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","renounceOwnership()":"715018a6","renounced()":"d232c220","setGasCap(uint256)":"7850b020"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_previous\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"GasCapUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MIRROR_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"}],\"name\":\"setGasCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"GasCapUpdated(uint256,uint256)\":{\"notice\":\"Emitted when admin updates the gas cap\"}},\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/gnosis/GnosisBase.sol\":\"GnosisBase\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/GasCap.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\n\\nabstract contract GasCap is ProposedOwnable {\\n  // ============ Storage ============\\n  /**\\n   * @notice The gnosis amb requires destination gas to be specified on the origin.\\n   * The gas used will be passed in by the relayer to allow for real-time estimates,\\n   * but will be capped at the admin-set cap.\\n   */\\n  uint256 gasCap;\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted when admin updates the gas cap\\n   * @param _previous The starting value\\n   * @param _updated The final value\\n   */\\n  event GasCapUpdated(uint256 _previous, uint256 _updated);\\n\\n  // ============ Constructor ============\\n  constructor(uint256 _gasCap) {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Admin Fns ============\\n  function setGasCap(uint256 _gasCap) public onlyOwner {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Internal Fns ============\\n\\n  /**\\n   * @notice Used (by admin) to update the gas cap\\n   * @param _gasCap The new value\\n   */\\n  function _setGasCap(uint256 _gasCap) internal {\\n    emit GasCapUpdated(gasCap, _gasCap);\\n    gasCap = _gasCap;\\n  }\\n\\n  /**\\n   * @notice Used to get the gas to use. Will be the original value IFF it\\n   * is less than the cap\\n   * @param _gas The proposed gas value\\n   */\\n  function _getGas(uint256 _gas) internal view returns (uint256) {\\n    if (_gas > gasCap) {\\n      _gas = gasCap;\\n    }\\n    return _gas;\\n  }\\n}\\n\",\"keccak256\":\"0xb8b52a3372f08490c918d1f490ad80764d54bd62d1638e4d17a5b552efe6587d\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/gnosis/GnosisBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {GnosisAmb} from \\\"../../interfaces/ambs/GnosisAmb.sol\\\";\\n\\nimport {GasCap} from \\\"../GasCap.sol\\\";\\n\\nabstract contract GnosisBase is GasCap {\\n  // ============ Storage ============\\n  uint256 public immutable MIRROR_CHAIN_ID;\\n\\n  // ============ Constructor ============\\n  constructor(uint256 _gasCap, uint256 _mirrorChainId) GasCap(_gasCap) {\\n    MIRROR_CHAIN_ID = _mirrorChainId;\\n  }\\n\\n  // ============ Private fns ============\\n\\n  /**\\n   * @dev Asserts the sender of a cross domain message\\n   */\\n  function _verifySender(\\n    address _amb,\\n    address _expected,\\n    uint256 _sourceChain\\n  ) internal view returns (bool) {\\n    require(msg.sender == _amb, \\\"!bridge\\\");\\n    require(_sourceChain == MIRROR_CHAIN_ID, \\\"!source\\\");\\n    return GnosisAmb(_amb).messageSender() == _expected;\\n  }\\n\\n  /**\\n   * @notice Using Gnosis AMB, the gas is provided to `sendMessage` as an encoded uint\\n   */\\n  function _getGasFromEncoded(bytes memory _encodedData) internal view returns (uint256 _gas) {\\n    // Should include gssas info in specialized calldata\\n    require(_encodedData.length == 32, \\\"!data length\\\");\\n\\n    // Get the gas, if it is more than the cap use the cap\\n    _gas = _getGas(abi.decode(_encodedData, (uint256)));\\n  }\\n}\\n\",\"keccak256\":\"0xa7385485ed85be588ec7bcc6de033ecec9b2efa18aa2e810d5edcd1f4fbe4572\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/ambs/GnosisAmb.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// Taken from: https://github.com/omni/tokenbridge-contracts/blob/master/contracts/interfaces/IAMB.sol\\ninterface GnosisAmb {\\n  function messageSender() external view returns (address);\\n\\n  function maxGasPerTx() external view returns (uint256);\\n\\n  function transactionHash() external view returns (bytes32);\\n\\n  function messageId() external view returns (bytes32);\\n\\n  function messageSourceChainId() external view returns (bytes32);\\n\\n  function messageCallStatus(bytes32 _messageId) external view returns (bool);\\n\\n  function failedMessageDataHash(bytes32 _messageId) external view returns (bytes32);\\n\\n  function failedMessageReceiver(bytes32 _messageId) external view returns (address);\\n\\n  function failedMessageSender(bytes32 _messageId) external view returns (address);\\n\\n  function requireToPassMessage(\\n    address _contract,\\n    bytes memory _data,\\n    uint256 _gas\\n  ) external returns (bytes32);\\n\\n  function requireToConfirmMessage(\\n    address _contract,\\n    bytes memory _data,\\n    uint256 _gas\\n  ) external returns (bytes32);\\n\\n  function requireToGetInformation(bytes32 _requestSelector, bytes memory _data) external returns (bytes32);\\n\\n  function sourceChainId() external view returns (uint256);\\n\\n  function destinationChainId() external view returns (uint256);\\n\\n  function executeSignatures(bytes memory _data, bytes memory _signatures) external;\\n\\n  function safeExecuteSignaturesWithAutoGasLimit(bytes memory _data, bytes memory _signatures) external;\\n}\\n\",\"keccak256\":\"0x343a551705ba02bb1aa83553c118135beb42a892ebe78d6f5f575891f6d17d9e\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/gnosis/GnosisBase.sol:GnosisBase","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/gnosis/GnosisBase.sol:GnosisBase","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/gnosis/GnosisBase.sol:GnosisBase","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39301,"contract":"contracts/messaging/connectors/gnosis/GnosisBase.sol:GnosisBase","label":"gasCap","offset":0,"slot":"3","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"GasCapUpdated(uint256,uint256)":{"notice":"Emitted when admin updates the gas cap"}},"kind":"user","methods":{"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"owner()":{"notice":"Returns the address of the current owner."},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"}},"version":1}}},"contracts/messaging/connectors/gnosis/GnosisHubConnector.sol":{"GnosisHubConnector":{"abi":[{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"uint32","name":"_mirrorDomain","type":"uint32"},{"internalType":"address","name":"_amb","type":"address"},{"internalType":"address","name":"_rootManager","type":"address"},{"internalType":"address","name":"_mirrorConnector","type":"address"},{"internalType":"uint256","name":"_gasCap","type":"uint256"},{"internalType":"uint256","name":"_mirrorChainId","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Connector__processMessage_notUsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"GasCapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"encodedData","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"current","type":"address"}],"name":"MirrorConnectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"mirrorDomain","type":"uint32"},{"indexed":false,"internalType":"address","name":"amb","type":"address"},{"indexed":false,"internalType":"address","name":"rootManager","type":"address"},{"indexed":false,"internalType":"address","name":"mirrorConnector","type":"address"}],"name":"NewConnector","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"AMB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIRROR_CHAIN_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIRROR_DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_signatures","type":"bytes"}],"name":"executeSignatures","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mirrorConnector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"processMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_encodedData","type":"bytes"}],"name":"sendMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gasCap","type":"uint256"}],"name":"setGasCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mirrorConnector","type":"address"}],"name":"setMirrorConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_expected","type":"address"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"processMessage(bytes)":{"details":"This is called by AMBs to process messages originating from mirror connector"},"sendMessage(bytes,bytes)":{"details":"This is called by the root manager *only* on mainnet to propagate the aggregate root"}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_39152":{"entryPoint":null,"id":39152,"parameterSlots":5,"returnSlots":0},"@_39318":{"entryPoint":null,"id":39318,"parameterSlots":1,"returnSlots":0},"@_39396":{"entryPoint":null,"id":39396,"parameterSlots":5,"returnSlots":0},"@_41249":{"entryPoint":null,"id":41249,"parameterSlots":2,"returnSlots":0},"@_41360":{"entryPoint":null,"id":41360,"parameterSlots":7,"returnSlots":0},"@_setGasCap_39346":{"entryPoint":625,"id":39346,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":520,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":419,"id":49908,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":716,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256_fromMemory":{"entryPoint":740,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_uint32_fromMemory":{"entryPoint":690,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2678:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"73:108:181","statements":[{"nodeType":"YulAssignment","src":"83:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"98:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"92:5:181"},"nodeType":"YulFunctionCall","src":"92:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"83:5:181"}]},{"body":{"nodeType":"YulBlock","src":"159:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"168:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"171:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"161:6:181"},"nodeType":"YulFunctionCall","src":"161:12:181"},"nodeType":"YulExpressionStatement","src":"161:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"127:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"138:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"145:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"134:3:181"},"nodeType":"YulFunctionCall","src":"134:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"124:2:181"},"nodeType":"YulFunctionCall","src":"124:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"117:6:181"},"nodeType":"YulFunctionCall","src":"117:41:181"},"nodeType":"YulIf","src":"114:61:181"}]},"name":"abi_decode_uint32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"52:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"63:5:181","type":""}],"src":"14:167:181"},{"body":{"nodeType":"YulBlock","src":"246:117:181","statements":[{"nodeType":"YulAssignment","src":"256:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"271:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"265:5:181"},"nodeType":"YulFunctionCall","src":"265:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"256:5:181"}]},{"body":{"nodeType":"YulBlock","src":"341:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"350:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"353:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"343:6:181"},"nodeType":"YulFunctionCall","src":"343:12:181"},"nodeType":"YulExpressionStatement","src":"343:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"300:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"311:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"326:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"331:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"322:3:181"},"nodeType":"YulFunctionCall","src":"322:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"335:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"318:3:181"},"nodeType":"YulFunctionCall","src":"318:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"307:3:181"},"nodeType":"YulFunctionCall","src":"307:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"297:2:181"},"nodeType":"YulFunctionCall","src":"297:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"290:6:181"},"nodeType":"YulFunctionCall","src":"290:50:181"},"nodeType":"YulIf","src":"287:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"225:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"236:5:181","type":""}],"src":"186:177:181"},{"body":{"nodeType":"YulBlock","src":"549:489:181","statements":[{"body":{"nodeType":"YulBlock","src":"596:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"605:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"608:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"598:6:181"},"nodeType":"YulFunctionCall","src":"598:12:181"},"nodeType":"YulExpressionStatement","src":"598:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"570:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"579:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"566:3:181"},"nodeType":"YulFunctionCall","src":"566:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"591:3:181","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"562:3:181"},"nodeType":"YulFunctionCall","src":"562:33:181"},"nodeType":"YulIf","src":"559:53:181"},{"nodeType":"YulAssignment","src":"621:49:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"660:9:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"631:28:181"},"nodeType":"YulFunctionCall","src":"631:39:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"621:6:181"}]},{"nodeType":"YulAssignment","src":"679:58:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"722:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"733:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"718:3:181"},"nodeType":"YulFunctionCall","src":"718:18:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"689:28:181"},"nodeType":"YulFunctionCall","src":"689:48:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"679:6:181"}]},{"nodeType":"YulAssignment","src":"746:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"790:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"801:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"786:3:181"},"nodeType":"YulFunctionCall","src":"786:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"756:29:181"},"nodeType":"YulFunctionCall","src":"756:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"746:6:181"}]},{"nodeType":"YulAssignment","src":"814:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"858:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"869:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"854:3:181"},"nodeType":"YulFunctionCall","src":"854:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"824:29:181"},"nodeType":"YulFunctionCall","src":"824:49:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"814:6:181"}]},{"nodeType":"YulAssignment","src":"882:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"926:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"937:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"922:3:181"},"nodeType":"YulFunctionCall","src":"922:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"892:29:181"},"nodeType":"YulFunctionCall","src":"892:50:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"882:6:181"}]},{"nodeType":"YulAssignment","src":"951:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"971:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"982:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"967:3:181"},"nodeType":"YulFunctionCall","src":"967:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"961:5:181"},"nodeType":"YulFunctionCall","src":"961:26:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"951:6:181"}]},{"nodeType":"YulAssignment","src":"996:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1016:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1027:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1012:3:181"},"nodeType":"YulFunctionCall","src":"1012:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1006:5:181"},"nodeType":"YulFunctionCall","src":"1006:26:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"996:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"467:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"478:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"490:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"498:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"506:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"514:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"522:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"530:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"538:6:181","type":""}],"src":"368:670:181"},{"body":{"nodeType":"YulBlock","src":"1217:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1234:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1245:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1227:6:181"},"nodeType":"YulFunctionCall","src":"1227:21:181"},"nodeType":"YulExpressionStatement","src":"1227:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1268:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1279:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1264:3:181"},"nodeType":"YulFunctionCall","src":"1264:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1284:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1257:6:181"},"nodeType":"YulFunctionCall","src":"1257:30:181"},"nodeType":"YulExpressionStatement","src":"1257:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1307:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1318:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1303:3:181"},"nodeType":"YulFunctionCall","src":"1303:18:181"},{"hexValue":"656d70747920646f6d61696e","kind":"string","nodeType":"YulLiteral","src":"1323:14:181","type":"","value":"empty domain"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1296:6:181"},"nodeType":"YulFunctionCall","src":"1296:42:181"},"nodeType":"YulExpressionStatement","src":"1296:42:181"},{"nodeType":"YulAssignment","src":"1347:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1359:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1370:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1355:3:181"},"nodeType":"YulFunctionCall","src":"1355:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1347:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1194:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1208:4:181","type":""}],"src":"1043:336:181"},{"body":{"nodeType":"YulBlock","src":"1558:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1575:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1586:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1568:6:181"},"nodeType":"YulFunctionCall","src":"1568:21:181"},"nodeType":"YulExpressionStatement","src":"1568:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1609:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1620:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1605:3:181"},"nodeType":"YulFunctionCall","src":"1605:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1625:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1598:6:181"},"nodeType":"YulFunctionCall","src":"1598:30:181"},"nodeType":"YulExpressionStatement","src":"1598:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1648:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1659:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1644:3:181"},"nodeType":"YulFunctionCall","src":"1644:18:181"},{"hexValue":"656d70747920726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"1664:19:181","type":"","value":"empty rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1637:6:181"},"nodeType":"YulFunctionCall","src":"1637:47:181"},"nodeType":"YulExpressionStatement","src":"1637:47:181"},{"nodeType":"YulAssignment","src":"1693:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1705:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1716:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1701:3:181"},"nodeType":"YulFunctionCall","src":"1701:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1693:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1535:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1549:4:181","type":""}],"src":"1384:341:181"},{"body":{"nodeType":"YulBlock","src":"1887:227:181","statements":[{"nodeType":"YulAssignment","src":"1897:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1909:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1920:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1905:3:181"},"nodeType":"YulFunctionCall","src":"1905:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1897:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"1932:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1950:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1955:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1946:3:181"},"nodeType":"YulFunctionCall","src":"1946:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1959:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1942:3:181"},"nodeType":"YulFunctionCall","src":"1942:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1936:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1977:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1992:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2000:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1988:3:181"},"nodeType":"YulFunctionCall","src":"1988:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1970:6:181"},"nodeType":"YulFunctionCall","src":"1970:34:181"},"nodeType":"YulExpressionStatement","src":"1970:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2024:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2035:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2020:3:181"},"nodeType":"YulFunctionCall","src":"2020:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2044:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2052:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2040:3:181"},"nodeType":"YulFunctionCall","src":"2040:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2013:6:181"},"nodeType":"YulFunctionCall","src":"2013:43:181"},"nodeType":"YulExpressionStatement","src":"2013:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2076:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2087:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2072:3:181"},"nodeType":"YulFunctionCall","src":"2072:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"2096:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2104:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2092:3:181"},"nodeType":"YulFunctionCall","src":"2092:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2065:6:181"},"nodeType":"YulFunctionCall","src":"2065:43:181"},"nodeType":"YulExpressionStatement","src":"2065:43:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1840:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1851:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1859:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1867:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1878:4:181","type":""}],"src":"1730:384:181"},{"body":{"nodeType":"YulBlock","src":"2248:175:181","statements":[{"nodeType":"YulAssignment","src":"2258:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2270:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2281:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2266:3:181"},"nodeType":"YulFunctionCall","src":"2266:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2258:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"2293:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2311:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2316:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2307:3:181"},"nodeType":"YulFunctionCall","src":"2307:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2320:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2303:3:181"},"nodeType":"YulFunctionCall","src":"2303:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2297:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2338:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2353:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2361:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2349:3:181"},"nodeType":"YulFunctionCall","src":"2349:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2331:6:181"},"nodeType":"YulFunctionCall","src":"2331:34:181"},"nodeType":"YulExpressionStatement","src":"2331:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2385:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2396:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2381:3:181"},"nodeType":"YulFunctionCall","src":"2381:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2405:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2413:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2401:3:181"},"nodeType":"YulFunctionCall","src":"2401:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2374:6:181"},"nodeType":"YulFunctionCall","src":"2374:43:181"},"nodeType":"YulExpressionStatement","src":"2374:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2209:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2220:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2228:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2239:4:181","type":""}],"src":"2119:304:181"},{"body":{"nodeType":"YulBlock","src":"2557:119:181","statements":[{"nodeType":"YulAssignment","src":"2567:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2579:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2590:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2575:3:181"},"nodeType":"YulFunctionCall","src":"2575:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2567:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2609:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"2620:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2602:6:181"},"nodeType":"YulFunctionCall","src":"2602:25:181"},"nodeType":"YulExpressionStatement","src":"2602:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2647:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2658:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2643:3:181"},"nodeType":"YulFunctionCall","src":"2643:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"2663:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2636:6:181"},"nodeType":"YulFunctionCall","src":"2636:34:181"},"nodeType":"YulExpressionStatement","src":"2636:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2518:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2529:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2537:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2548:4:181","type":""}],"src":"2428:248:181"}]},"contents":"{\n    { }\n    function abi_decode_uint32_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := abi_decode_uint32_fromMemory(headStart)\n        value1 := abi_decode_uint32_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n        value4 := abi_decode_address_fromMemory(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n        value6 := mload(add(headStart, 192))\n    }\n    function abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"empty domain\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"empty rootManager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"6101206040523480156200001257600080fd5b5060405162001666380380620016668339810160408190526200003591620002e4565b818181898989898984848484846200004d33620001a3565b8463ffffffff16600003620000985760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620000e45760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b60448201526064016200008f565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e0528116156200011c576200011c8162000208565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a3505050505050505050506200018f816200027160201b60201c565b506101005250620003679650505050505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b60045460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1600455565b805163ffffffff81168114620002c757600080fd5b919050565b80516001600160a01b0381168114620002c757600080fd5b600080600080600080600060e0888a0312156200030057600080fd5b6200030b88620002b2565b96506200031b60208901620002b2565b95506200032b60408901620002cc565b94506200033b60608901620002cc565b93506200034b60808901620002cc565b925060a0880151915060c0880151905092959891949750929550565b60805160a05160c05160e05161010051611274620003f2600039600081816103410152610e1c0152600081816101410152610ae6015260008181610257015281816104af0152610abf0152600081816103de015281816104370152818161056401528181610888015281816109be01528181610cd10152610cf30152600061020301526112746000f3fe6080604052600436106101235760003560e01c80637850b020116100a0578063cc39428311610064578063cc39428314610363578063d1851c9214610383578063d232c220146103a1578063d69f9d61146103cc578063db1b76591461040057600080fd5b80637850b020146102bc5780638da5cb5b146102dc578063b1f8100d146102fa578063c5b350df1461031a578063c8a4d6901461032f57600080fd5b806352a9674b116100e757806352a9674b146101f15780635bd11efc146102255780635f61e3ec146102455780636a42b8f814610291578063715018a6146102a757600080fd5b8063141684161461012f5780633cf52ffb1461017d5780633f7658fd1461019c57806348e6fa23146101be5780634ff746f6146101d157600080fd5b3661012a57005b600080fd5b34801561013b57600080fd5b506101637f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b34801561018957600080fd5b506002545b604051908152602001610174565b3480156101a857600080fd5b506101bc6101b7366004610faa565b610420565b005b6101bc6101cc366004610faa565b6104a4565b3480156101dd57600080fd5b506101bc6101ec36600461100e565b610559565b3480156101fd57600080fd5b506101637f000000000000000000000000000000000000000000000000000000000000000081565b34801561023157600080fd5b506101bc610240366004611060565b6105ff565b34801561025157600080fd5b506102797f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610174565b34801561029d57600080fd5b5062093a8061018e565b3480156102b357600080fd5b506101bc610636565b3480156102c857600080fd5b506101bc6102d7366004611084565b6106ea565b3480156102e857600080fd5b506000546001600160a01b0316610279565b34801561030657600080fd5b506101bc610315366004611060565b61071e565b34801561032657600080fd5b506101bc6107bc565b34801561033b57600080fd5b5061018e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561036f57600080fd5b50600354610279906001600160a01b031681565b34801561038f57600080fd5b506001546001600160a01b0316610279565b3480156103ad57600080fd5b506000546001600160a01b0316155b6040519015158152602001610174565b3480156103d857600080fd5b506102797f000000000000000000000000000000000000000000000000000000000000000081565b34801561040c57600080fd5b506103bc61041b366004611060565b61082c565b604051633f7658fd60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633f7658fd9061046e90859085906004016110e3565b600060405180830381600087803b15801561048857600080fd5b505af115801561049c573d6000803e3d6000fd5b505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105105760405162461bcd60e51b815260206004820152600c60248201526b10b937b7ba26b0b730b3b2b960a11b60448201526064015b60405180910390fd5b61051a828261083d565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507782823360405161054d93929190611111565b60405180910390a15050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105ba5760405162461bcd60e51b81526004016105079060208082526004908201526310a0a6a160e11b604082015260600190565b6105c38161096b565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced81336040516105f492919061114f565b60405180910390a150565b6000546001600160a01b0316331461062a576040516311a8a1bb60e31b815260040160405180910390fd5b61063381610b6d565b50565b6000546001600160a01b03163314610661576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426106739190611179565b11610691576040516324e0285f60e21b815260040160405180910390fd5b6002546000036106b457604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b0316156106de576040516323295ef960e01b815260040160405180910390fd5b6106e86000610bd6565b565b6000546001600160a01b03163314610715576040516311a8a1bb60e31b815260040160405180910390fd5b61063381610c3b565b6000546001600160a01b03163314610749576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610767575060025415155b15610785576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036107b357604051634a2fb73f60e11b815260040160405180910390fd5b61063381610c7c565b6001546001600160a01b031633146107e7576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426107f99190611179565b11610817576040516324e0285f60e21b815260040160405180910390fd5b6001546106e8906001600160a01b0316610bd6565b600061083782610cca565b92915050565b81516020146108785760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610507565b6003546040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263dc8601b3929116906327fba37b60e11b906108ca90879060240161119a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261090585610d78565b6040518463ffffffff1660e01b8152600401610923939291906111ad565b6020604051808303816000875af1158015610942573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096691906111e1565b505050565b600354610980906001600160a01b0316610cca565b6109bb5760405162461bcd60e51b815260206004820152600c60248201526b10b61921b7b73732b1ba37b960a11b6044820152606401610507565b467f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631544298e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3e91906111e1565b14610a7a5760405162461bcd60e51b815260206004820152600c60248201526b10b9b7bab931b2a1b430b4b760a11b6044820152606401610507565b8051602014610ab55760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610507565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016638e7d93fa7f0000000000000000000000000000000000000000000000000000000000000000610b0e846111fa565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526024820152604401600060405180830381600087803b158015610b5257600080fd5b505af1158015610b66573d6000803e3d6000fd5b5050505050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60045460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1600455565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b60006108377f0000000000000000000000000000000000000000000000000000000000000000837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b07506116040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7391906111e1565b610dd6565b60008151602014610dba5760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610507565b61083782806020019051810190610dd191906111e1565b610ef1565b6000336001600160a01b03851614610e1a5760405162461bcd60e51b81526020600482015260076024820152662162726964676560c81b6044820152606401610507565b7f00000000000000000000000000000000000000000000000000000000000000008214610e735760405162461bcd60e51b815260206004820152600760248201526621736f7572636560c81b6044820152606401610507565b826001600160a01b0316846001600160a01b031663d67bdd256040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edf9190611221565b6001600160a01b031614949350505050565b6000600454821115610f035760045491505b5090565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610f2e57600080fd5b813567ffffffffffffffff80821115610f4957610f49610f07565b604051601f8301601f19908116603f01168101908282118183101715610f7157610f71610f07565b81604052838152866020858801011115610f8a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610fbd57600080fd5b823567ffffffffffffffff80821115610fd557600080fd5b610fe186838701610f1d565b93506020850135915080821115610ff757600080fd5b5061100485828601610f1d565b9150509250929050565b60006020828403121561102057600080fd5b813567ffffffffffffffff81111561103757600080fd5b61104384828501610f1d565b949350505050565b6001600160a01b038116811461063357600080fd5b60006020828403121561107257600080fd5b813561107d8161104b565b9392505050565b60006020828403121561109657600080fd5b5035919050565b6000815180845260005b818110156110c3576020818501810151868301820152016110a7565b506000602082860101526020601f19601f83011685010191505092915050565b6040815260006110f6604083018561109d565b8281036020840152611108818561109d565b95945050505050565b606081526000611124606083018661109d565b8281036020840152611136818661109d565b91505060018060a01b0383166040830152949350505050565b604081526000611162604083018561109d565b905060018060a01b03831660208301529392505050565b8181038181111561083757634e487b7160e01b600052601160045260246000fd5b60208152600061107d602083018461109d565b6001600160a01b03841681526060602082018190526000906111d19083018561109d565b9050826040830152949350505050565b6000602082840312156111f357600080fd5b5051919050565b8051602080830151919081101561121b576000198160200360031b1b821691505b50919050565b60006020828403121561123357600080fd5b815161107d8161104b56fea264697066735822122042ad875cd6070f8f3c16a6c25eab50df8fb0b01f474266ea01dbeb3fc370117b64736f6c63430008110033","opcodes":"PUSH2 0x120 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1666 CODESIZE SUB DUP1 PUSH3 0x1666 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x2E4 JUMP JUMPDEST DUP2 DUP2 DUP2 DUP10 DUP10 DUP10 DUP10 DUP10 DUP5 DUP5 DUP5 DUP5 DUP5 PUSH3 0x4D CALLER PUSH3 0x1A3 JUMP JUMPDEST DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0x0 SUB PUSH3 0x98 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x32B6B83A3C903237B6B0B4B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xE4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x32B6B83A3C903937B7BA26B0B730B3B2B9 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x8F JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0xA0 MSTORE DUP4 DUP2 AND PUSH1 0xC0 MSTORE SWAP1 DUP6 AND PUSH1 0xE0 MSTORE DUP2 AND ISZERO PUSH3 0x11C JUMPI PUSH3 0x11C DUP2 PUSH3 0x208 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH4 0xFFFFFFFF DUP7 DUP2 AND SWAP3 SWAP1 DUP9 AND SWAP2 PUSH32 0x4F9C27C2FE3F84576EA469D367D044DA53C45E951617E8389F2B5ED8DB9D25F0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP PUSH3 0x18F DUP2 PUSH3 0x271 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP PUSH2 0x100 MSTORE POP PUSH3 0x367 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 SSTORE JUMP JUMPDEST DUP1 MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH3 0x2C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x2C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH3 0x300 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x30B DUP9 PUSH3 0x2B2 JUMP JUMPDEST SWAP7 POP PUSH3 0x31B PUSH1 0x20 DUP10 ADD PUSH3 0x2B2 JUMP JUMPDEST SWAP6 POP PUSH3 0x32B PUSH1 0x40 DUP10 ADD PUSH3 0x2CC JUMP JUMPDEST SWAP5 POP PUSH3 0x33B PUSH1 0x60 DUP10 ADD PUSH3 0x2CC JUMP JUMPDEST SWAP4 POP PUSH3 0x34B PUSH1 0x80 DUP10 ADD PUSH3 0x2CC JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD MLOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD MLOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x1274 PUSH3 0x3F2 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x341 ADD MSTORE PUSH2 0xE1C ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x141 ADD MSTORE PUSH2 0xAE6 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x257 ADD MSTORE DUP2 DUP2 PUSH2 0x4AF ADD MSTORE PUSH2 0xABF ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x3DE ADD MSTORE DUP2 DUP2 PUSH2 0x437 ADD MSTORE DUP2 DUP2 PUSH2 0x564 ADD MSTORE DUP2 DUP2 PUSH2 0x888 ADD MSTORE DUP2 DUP2 PUSH2 0x9BE ADD MSTORE DUP2 DUP2 PUSH2 0xCD1 ADD MSTORE PUSH2 0xCF3 ADD MSTORE PUSH1 0x0 PUSH2 0x203 ADD MSTORE PUSH2 0x1274 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x123 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7850B020 GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xCC394283 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x363 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x383 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x3A1 JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x3CC JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x400 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7850B020 EQ PUSH2 0x2BC JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2DC JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x2FA JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x31A JUMPI DUP1 PUSH4 0xC8A4D690 EQ PUSH2 0x32F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0x52A9674B EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x225 JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x245 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x291 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x2A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x12F JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x17D JUMPI DUP1 PUSH4 0x3F7658FD EQ PUSH2 0x19C JUMPI DUP1 PUSH4 0x48E6FA23 EQ PUSH2 0x1BE JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x1D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x12A JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x163 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x189 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x174 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x1B7 CALLDATASIZE PUSH1 0x4 PUSH2 0xFAA JUMP JUMPDEST PUSH2 0x420 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1BC PUSH2 0x1CC CALLDATASIZE PUSH1 0x4 PUSH2 0xFAA JUMP JUMPDEST PUSH2 0x4A4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x1EC CALLDATASIZE PUSH1 0x4 PUSH2 0x100E JUMP JUMPDEST PUSH2 0x559 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x163 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x240 CALLDATASIZE PUSH1 0x4 PUSH2 0x1060 JUMP JUMPDEST PUSH2 0x5FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x279 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x174 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x18E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x636 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x2D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x1084 JUMP JUMPDEST PUSH2 0x6EA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x279 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x306 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x315 CALLDATASIZE PUSH1 0x4 PUSH2 0x1060 JUMP JUMPDEST PUSH2 0x71E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x326 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x7BC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18E PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x36F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x279 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x38F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x279 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x174 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x279 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x40C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BC PUSH2 0x41B CALLDATASIZE PUSH1 0x4 PUSH2 0x1060 JUMP JUMPDEST PUSH2 0x82C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3F7658FD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x3F7658FD SWAP1 PUSH2 0x46E SWAP1 DUP6 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x10E3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x49C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x510 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B937B7BA26B0B730B3B2B9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x51A DUP3 DUP3 PUSH2 0x83D JUMP JUMPDEST PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 DUP3 DUP3 CALLER PUSH1 0x40 MLOAD PUSH2 0x54D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1111 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x5BA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x507 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0x5C3 DUP2 PUSH2 0x96B JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0x5F4 SWAP3 SWAP2 SWAP1 PUSH2 0x114F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x62A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x633 DUP2 PUSH2 0xB6D JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x661 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x673 SWAP2 SWAP1 PUSH2 0x1179 JUMP JUMPDEST GT PUSH2 0x691 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x6B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x6DE JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6E8 PUSH1 0x0 PUSH2 0xBD6 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x715 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x633 DUP2 PUSH2 0xC3B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x749 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x767 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x785 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x7B3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x633 DUP2 PUSH2 0xC7C JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x7E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x7F9 SWAP2 SWAP1 PUSH2 0x1179 JUMP JUMPDEST GT PUSH2 0x817 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x6E8 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xBD6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x837 DUP3 PUSH2 0xCCA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x878 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x507 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND SWAP3 PUSH4 0xDC8601B3 SWAP3 SWAP2 AND SWAP1 PUSH4 0x27FBA37B PUSH1 0xE1 SHL SWAP1 PUSH2 0x8CA SWAP1 DUP8 SWAP1 PUSH1 0x24 ADD PUSH2 0x119A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x905 DUP6 PUSH2 0xD78 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x923 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x11AD JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x942 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x966 SWAP2 SWAP1 PUSH2 0x11E1 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x980 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xCCA JUMP JUMPDEST PUSH2 0x9BB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B61921B7B73732B1BA37B9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x507 JUMP JUMPDEST CHAINID PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1544298E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA1A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA3E SWAP2 SWAP1 PUSH2 0x11E1 JUMP JUMPDEST EQ PUSH2 0xA7A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B9B7BAB931B2A1B430B4B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x507 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0xAB5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x507 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH4 0x8E7D93FA PUSH32 0x0 PUSH2 0xB0E DUP5 PUSH2 0x11FA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB66 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x837 PUSH32 0x0 DUP4 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB0750611 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD4F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD73 SWAP2 SWAP1 PUSH2 0x11E1 JUMP JUMPDEST PUSH2 0xDD6 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0xDBA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x507 JUMP JUMPDEST PUSH2 0x837 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xDD1 SWAP2 SWAP1 PUSH2 0x11E1 JUMP JUMPDEST PUSH2 0xEF1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EQ PUSH2 0xE1A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x21627269646765 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x507 JUMP JUMPDEST PUSH32 0x0 DUP3 EQ PUSH2 0xE73 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x21736F75726365 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x507 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD67BDD25 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEBB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEDF SWAP2 SWAP1 PUSH2 0x1221 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 SLOAD DUP3 GT ISZERO PUSH2 0xF03 JUMPI PUSH1 0x4 SLOAD SWAP2 POP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xF2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xF49 JUMPI PUSH2 0xF49 PUSH2 0xF07 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xF71 JUMPI PUSH2 0xF71 PUSH2 0xF07 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0xF8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xFBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xFD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFE1 DUP7 DUP4 DUP8 ADD PUSH2 0xF1D JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xFF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1004 DUP6 DUP3 DUP7 ADD PUSH2 0xF1D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1020 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1037 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1043 DUP5 DUP3 DUP6 ADD PUSH2 0xF1D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x633 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1072 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x107D DUP2 PUSH2 0x104B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1096 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x10C3 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x10A7 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x10F6 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x109D JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1108 DUP2 DUP6 PUSH2 0x109D JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1124 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x109D JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1136 DUP2 DUP7 PUSH2 0x109D JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1162 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x109D JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x837 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x107D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x109D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x11D1 SWAP1 DUP4 ADD DUP6 PUSH2 0x109D JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x11F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x121B JUMPI PUSH1 0x0 NOT DUP2 PUSH1 0x20 SUB PUSH1 0x3 SHL SHL DUP3 AND SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x107D DUP2 PUSH2 0x104B JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 TIMESTAMP 0xAD DUP8 0x5C 0xD6 SMOD 0xF DUP16 EXTCODECOPY AND 0xA6 0xC2 0x5E 0xAB POP 0xDF DUP16 0xB0 0xB0 0x1F SELFBALANCE TIMESTAMP PUSH7 0xEA01DBEB3FC370 GT PUSH28 0x64736F6C634300081100330000000000000000000000000000000000 ","sourceMap":"340:2039:124:-:0;;;443:298;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;714:7;723:14;714:7;641;650:13;665:4;671:12;685:16;641:7;650:13;665:4;671:12;685:16;3038:21:116::1;3048:10;3038:9;:21::i;:::-;3105:7;:12;;3116:1;3105:12:::0;3097:37:::1;;;::::0;-1:-1:-1;;;3097:37:116;;1245:2:181;3097:37:116::1;::::0;::::1;1227:21:181::0;1284:2;1264:18;;;1257:30;-1:-1:-1;;;1303:18:181;;;1296:42;1355:18;;3097:37:116::1;;;;;;;;;-1:-1:-1::0;;;;;3148:26:116;::::1;3140:56;;;::::0;-1:-1:-1;;;3140:56:116;;1586:2:181;3140:56:116::1;::::0;::::1;1568:21:181::0;1625:2;1605:18;;;1598:30;-1:-1:-1;;;1644:18:181;;;1637:47;1701:18;;3140:56:116::1;1384:341:181::0;3140:56:116::1;3308:16;::::0;;::::1;;::::0;-1:-1:-1;;;;;3330:10:116;;::::1;;::::0;3346:27;;::::1;;::::0;3379:29;;::::1;;::::0;3449:30;::::1;::::0;3445:88:::1;;3489:37;3509:16:::0;3489:19:::1;:37::i;:::-;3544:74;::::0;;-1:-1:-1;;;;;1988:15:181;;;1970:34;;2040:15;;;2035:2;2020:18;;2013:43;2092:15;;2072:18;;;2065:43;3544:74:116;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;1920:2:181;3544:74:116;;::::1;2857:766:::0;;;;;1209:210:119;;;;;791:19:118;802:7;791:10;;;:19;;:::i;:::-;-1:-1:-1;419:32:123::1;::::0;-1:-1:-1;340:2039:124;;-1:-1:-1;;;;;;;340:2039:124;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;5838::116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;2331:34:181;;2401:15;;;2396:2;2381:18;;2374:43;5921:57:116;;2266:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;1089:114:118:-;1160:6;;1146:30;;;2602:25:181;;;2658:2;2643:18;;2636:34;;;1146:30:118;;2575:18:181;1146:30:118;;;;;;;1182:6;:16;1089:114::o;14:167:181:-;92:13;;145:10;134:22;;124:33;;114:61;;171:1;168;161:12;114:61;14:167;;;:::o;186:177::-;265:13;;-1:-1:-1;;;;;307:31:181;;297:42;;287:70;;353:1;350;343:12;368:670;490:6;498;506;514;522;530;538;591:3;579:9;570:7;566:23;562:33;559:53;;;608:1;605;598:12;559:53;631:39;660:9;631:39;:::i;:::-;621:49;;689:48;733:2;722:9;718:18;689:48;:::i;:::-;679:58;;756:49;801:2;790:9;786:18;756:49;:::i;:::-;746:59;;824:49;869:2;858:9;854:18;824:49;:::i;:::-;814:59;;892:50;937:3;926:9;922:19;892:50;:::i;:::-;882:60;;982:3;971:9;967:19;961:26;951:36;;1027:3;1016:9;1012:19;1006:26;996:36;;368:670;;;;;;;;;;:::o;2428:248::-;340:2039:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@AMB_39042":{"entryPoint":null,"id":39042,"parameterSlots":0,"returnSlots":0},"@DOMAIN_39039":{"entryPoint":null,"id":39039,"parameterSlots":0,"returnSlots":0},"@MIRROR_CHAIN_ID_41234":{"entryPoint":null,"id":41234,"parameterSlots":0,"returnSlots":0},"@MIRROR_DOMAIN_39048":{"entryPoint":null,"id":39048,"parameterSlots":0,"returnSlots":0},"@ROOT_MANAGER_39045":{"entryPoint":null,"id":39045,"parameterSlots":0,"returnSlots":0},"@_39157":{"entryPoint":null,"id":39157,"parameterSlots":0,"returnSlots":0},"@_getGasFromEncoded_41314":{"entryPoint":3448,"id":41314,"parameterSlots":1,"returnSlots":1},"@_getGas_39366":{"entryPoint":3825,"id":39366,"parameterSlots":1,"returnSlots":1},"@_processMessage_41477":{"entryPoint":2411,"id":41477,"parameterSlots":1,"returnSlots":0},"@_sendMessage_41431":{"entryPoint":2109,"id":41431,"parameterSlots":2,"returnSlots":0},"@_setGasCap_39346":{"entryPoint":3131,"id":39346,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":2925,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":3030,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":3196,"id":49927,"parameterSlots":1,"returnSlots":0},"@_verifySender_41285":{"entryPoint":3542,"id":41285,"parameterSlots":3,"returnSlots":1},"@_verifySender_41396":{"entryPoint":3274,"id":41396,"parameterSlots":1,"returnSlots":1},"@acceptProposedOwner_49887":{"entryPoint":1980,"id":49887,"parameterSlots":0,"returnSlots":0},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@executeSignatures_41376":{"entryPoint":1056,"id":41376,"parameterSlots":2,"returnSlots":0},"@mirrorConnector_39051":{"entryPoint":null,"id":39051,"parameterSlots":0,"returnSlots":0},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@processMessage_39189":{"entryPoint":1369,"id":39189,"parameterSlots":1,"returnSlots":0},"@proposeNewOwner_49841":{"entryPoint":1822,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_49874":{"entryPoint":1590,"id":49874,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@sendMessage_39419":{"entryPoint":1188,"id":39419,"parameterSlots":2,"returnSlots":0},"@setGasCap_39330":{"entryPoint":1770,"id":39330,"parameterSlots":1,"returnSlots":0},"@setMirrorConnector_39170":{"entryPoint":1535,"id":39170,"parameterSlots":1,"returnSlots":0},"@verifySender_39202":{"entryPoint":2092,"id":39202,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes":{"entryPoint":3869,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":4192,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":4641,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32_fromMemory":{"entryPoint":4577,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes_memory_ptr":{"entryPoint":4110,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr":{"entryPoint":4010,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":4228,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes":{"entryPoint":4253,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_bytes_memory_ptr_t_uint256__to_t_address_t_bytes_memory_ptr_t_uint256__fromStack_reversed":{"entryPoint":4525,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":4506,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":4431,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":4323,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":4369,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0d5605680c5f886aed2495c7e7998d97b3239c9572097b625996bd4acc3f63dd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_599616dc1fbc723d39bc96590d652f93d467afd415e9f46bd106f14abf00049d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5bd20fa0eac50a6892371dae18efeb7d2b1c7a8479150f38626e21052ac8472c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_72c4e0ea3426978b633b2efe37087a856f506ae7eacb1b1e7c169974142d9a69__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":4473,"id":null,"parameterSlots":2,"returnSlots":1},"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32":{"entryPoint":4602,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":3847,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":4171,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:10003:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"113:93:181","statements":[{"nodeType":"YulAssignment","src":"123:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"135:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"146:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"131:3:181"},"nodeType":"YulFunctionCall","src":"131:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"123:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"165:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"180:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"188:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"176:3:181"},"nodeType":"YulFunctionCall","src":"176:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"158:6:181"},"nodeType":"YulFunctionCall","src":"158:42:181"},"nodeType":"YulExpressionStatement","src":"158:42:181"}]},"name":"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"82:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"93:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"104:4:181","type":""}],"src":"14:192:181"},{"body":{"nodeType":"YulBlock","src":"312:76:181","statements":[{"nodeType":"YulAssignment","src":"322:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"334:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"345:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"330:3:181"},"nodeType":"YulFunctionCall","src":"330:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"322:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"364:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"375:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"357:6:181"},"nodeType":"YulFunctionCall","src":"357:25:181"},"nodeType":"YulExpressionStatement","src":"357:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"281:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"292:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"303:4:181","type":""}],"src":"211:177:181"},{"body":{"nodeType":"YulBlock","src":"425:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"442:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"449:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"454:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"445:3:181"},"nodeType":"YulFunctionCall","src":"445:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"435:6:181"},"nodeType":"YulFunctionCall","src":"435:31:181"},"nodeType":"YulExpressionStatement","src":"435:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"482:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"485:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"475:6:181"},"nodeType":"YulFunctionCall","src":"475:15:181"},"nodeType":"YulExpressionStatement","src":"475:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"506:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"509:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"499:6:181"},"nodeType":"YulFunctionCall","src":"499:15:181"},"nodeType":"YulExpressionStatement","src":"499:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"393:127:181"},{"body":{"nodeType":"YulBlock","src":"577:666:181","statements":[{"body":{"nodeType":"YulBlock","src":"626:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"635:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"638:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"628:6:181"},"nodeType":"YulFunctionCall","src":"628:12:181"},"nodeType":"YulExpressionStatement","src":"628:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"605:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"613:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"601:3:181"},"nodeType":"YulFunctionCall","src":"601:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"620:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"597:3:181"},"nodeType":"YulFunctionCall","src":"597:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"590:6:181"},"nodeType":"YulFunctionCall","src":"590:35:181"},"nodeType":"YulIf","src":"587:55:181"},{"nodeType":"YulVariableDeclaration","src":"651:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"674:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"661:12:181"},"nodeType":"YulFunctionCall","src":"661:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"655:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"690:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"700:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"694:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"741:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"743:16:181"},"nodeType":"YulFunctionCall","src":"743:18:181"},"nodeType":"YulExpressionStatement","src":"743:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"733:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"737:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"730:2:181"},"nodeType":"YulFunctionCall","src":"730:10:181"},"nodeType":"YulIf","src":"727:36:181"},{"nodeType":"YulVariableDeclaration","src":"772:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"786:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"782:3:181"},"nodeType":"YulFunctionCall","src":"782:7:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"776:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"798:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"818:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"812:5:181"},"nodeType":"YulFunctionCall","src":"812:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"802:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"830:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"852:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"876:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"880:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"872:3:181"},"nodeType":"YulFunctionCall","src":"872:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"887:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"868:3:181"},"nodeType":"YulFunctionCall","src":"868:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"892:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"864:3:181"},"nodeType":"YulFunctionCall","src":"864:31:181"},{"name":"_3","nodeType":"YulIdentifier","src":"897:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"860:3:181"},"nodeType":"YulFunctionCall","src":"860:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"848:3:181"},"nodeType":"YulFunctionCall","src":"848:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"834:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"960:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"962:16:181"},"nodeType":"YulFunctionCall","src":"962:18:181"},"nodeType":"YulExpressionStatement","src":"962:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"919:10:181"},{"name":"_2","nodeType":"YulIdentifier","src":"931:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"916:2:181"},"nodeType":"YulFunctionCall","src":"916:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"939:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"951:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"936:2:181"},"nodeType":"YulFunctionCall","src":"936:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"913:2:181"},"nodeType":"YulFunctionCall","src":"913:46:181"},"nodeType":"YulIf","src":"910:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"998:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1002:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"991:6:181"},"nodeType":"YulFunctionCall","src":"991:22:181"},"nodeType":"YulExpressionStatement","src":"991:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1029:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1037:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1022:6:181"},"nodeType":"YulFunctionCall","src":"1022:18:181"},"nodeType":"YulExpressionStatement","src":"1022:18:181"},{"body":{"nodeType":"YulBlock","src":"1088:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1097:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1100:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1090:6:181"},"nodeType":"YulFunctionCall","src":"1090:12:181"},"nodeType":"YulExpressionStatement","src":"1090:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1063:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1071:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1059:3:181"},"nodeType":"YulFunctionCall","src":"1059:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1076:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1055:3:181"},"nodeType":"YulFunctionCall","src":"1055:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"1083:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1052:2:181"},"nodeType":"YulFunctionCall","src":"1052:35:181"},"nodeType":"YulIf","src":"1049:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1130:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1138:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1126:3:181"},"nodeType":"YulFunctionCall","src":"1126:17:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1149:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1157:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1145:3:181"},"nodeType":"YulFunctionCall","src":"1145:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1164:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1113:12:181"},"nodeType":"YulFunctionCall","src":"1113:54:181"},"nodeType":"YulExpressionStatement","src":"1113:54:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1191:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1199:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1187:3:181"},"nodeType":"YulFunctionCall","src":"1187:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1204:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1183:3:181"},"nodeType":"YulFunctionCall","src":"1183:26:181"},{"kind":"number","nodeType":"YulLiteral","src":"1211:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1176:6:181"},"nodeType":"YulFunctionCall","src":"1176:37:181"},"nodeType":"YulExpressionStatement","src":"1176:37:181"},{"nodeType":"YulAssignment","src":"1222:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1231:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1222:5:181"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"551:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"559:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"567:5:181","type":""}],"src":"525:718:181"},{"body":{"nodeType":"YulBlock","src":"1353:434:181","statements":[{"body":{"nodeType":"YulBlock","src":"1399:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1408:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1411:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1401:6:181"},"nodeType":"YulFunctionCall","src":"1401:12:181"},"nodeType":"YulExpressionStatement","src":"1401:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1374:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1383:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1370:3:181"},"nodeType":"YulFunctionCall","src":"1370:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1395:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1366:3:181"},"nodeType":"YulFunctionCall","src":"1366:32:181"},"nodeType":"YulIf","src":"1363:52:181"},{"nodeType":"YulVariableDeclaration","src":"1424:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1451:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1438:12:181"},"nodeType":"YulFunctionCall","src":"1438:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1428:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1470:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1480:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1474:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1525:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1534:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1537:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1527:6:181"},"nodeType":"YulFunctionCall","src":"1527:12:181"},"nodeType":"YulExpressionStatement","src":"1527:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1513:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1521:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1510:2:181"},"nodeType":"YulFunctionCall","src":"1510:14:181"},"nodeType":"YulIf","src":"1507:34:181"},{"nodeType":"YulAssignment","src":"1550:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1581:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1592:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1577:3:181"},"nodeType":"YulFunctionCall","src":"1577:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1601:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"1560:16:181"},"nodeType":"YulFunctionCall","src":"1560:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1550:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1618:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1651:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1662:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1647:3:181"},"nodeType":"YulFunctionCall","src":"1647:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1634:12:181"},"nodeType":"YulFunctionCall","src":"1634:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"1622:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1695:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1704:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1707:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1697:6:181"},"nodeType":"YulFunctionCall","src":"1697:12:181"},"nodeType":"YulExpressionStatement","src":"1697:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"1681:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1691:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1678:2:181"},"nodeType":"YulFunctionCall","src":"1678:16:181"},"nodeType":"YulIf","src":"1675:36:181"},{"nodeType":"YulAssignment","src":"1720:61:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1751:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"1762:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1747:3:181"},"nodeType":"YulFunctionCall","src":"1747:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1773:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"1730:16:181"},"nodeType":"YulFunctionCall","src":"1730:51:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1720:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1311:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1322:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1334:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1342:6:181","type":""}],"src":"1248:539:181"},{"body":{"nodeType":"YulBlock","src":"1871:241:181","statements":[{"body":{"nodeType":"YulBlock","src":"1917:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1926:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1929:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1919:6:181"},"nodeType":"YulFunctionCall","src":"1919:12:181"},"nodeType":"YulExpressionStatement","src":"1919:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1892:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1901:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1888:3:181"},"nodeType":"YulFunctionCall","src":"1888:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1913:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1884:3:181"},"nodeType":"YulFunctionCall","src":"1884:32:181"},"nodeType":"YulIf","src":"1881:52:181"},{"nodeType":"YulVariableDeclaration","src":"1942:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1969:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1956:12:181"},"nodeType":"YulFunctionCall","src":"1956:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1946:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2022:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2031:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2034:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2024:6:181"},"nodeType":"YulFunctionCall","src":"2024:12:181"},"nodeType":"YulExpressionStatement","src":"2024:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1994:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2002:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1991:2:181"},"nodeType":"YulFunctionCall","src":"1991:30:181"},"nodeType":"YulIf","src":"1988:50:181"},{"nodeType":"YulAssignment","src":"2047:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2078:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"2089:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2074:3:181"},"nodeType":"YulFunctionCall","src":"2074:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2098:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"2057:16:181"},"nodeType":"YulFunctionCall","src":"2057:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2047:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1837:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1848:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1860:6:181","type":""}],"src":"1792:320:181"},{"body":{"nodeType":"YulBlock","src":"2162:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"2226:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2235:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2238:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2228:6:181"},"nodeType":"YulFunctionCall","src":"2228:12:181"},"nodeType":"YulExpressionStatement","src":"2228:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2185:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2196:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2211:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2216:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2207:3:181"},"nodeType":"YulFunctionCall","src":"2207:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2220:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2203:3:181"},"nodeType":"YulFunctionCall","src":"2203:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2192:3:181"},"nodeType":"YulFunctionCall","src":"2192:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2182:2:181"},"nodeType":"YulFunctionCall","src":"2182:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2175:6:181"},"nodeType":"YulFunctionCall","src":"2175:50:181"},"nodeType":"YulIf","src":"2172:70:181"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"2151:5:181","type":""}],"src":"2117:131:181"},{"body":{"nodeType":"YulBlock","src":"2323:177:181","statements":[{"body":{"nodeType":"YulBlock","src":"2369:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2378:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2381:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2371:6:181"},"nodeType":"YulFunctionCall","src":"2371:12:181"},"nodeType":"YulExpressionStatement","src":"2371:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2344:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2353:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2340:3:181"},"nodeType":"YulFunctionCall","src":"2340:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2365:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2336:3:181"},"nodeType":"YulFunctionCall","src":"2336:32:181"},"nodeType":"YulIf","src":"2333:52:181"},{"nodeType":"YulVariableDeclaration","src":"2394:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2420:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2407:12:181"},"nodeType":"YulFunctionCall","src":"2407:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2398:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2464:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2439:24:181"},"nodeType":"YulFunctionCall","src":"2439:31:181"},"nodeType":"YulExpressionStatement","src":"2439:31:181"},{"nodeType":"YulAssignment","src":"2479:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"2489:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2479:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2289:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2300:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2312:6:181","type":""}],"src":"2253:247:181"},{"body":{"nodeType":"YulBlock","src":"2606:102:181","statements":[{"nodeType":"YulAssignment","src":"2616:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2628:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2639:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2624:3:181"},"nodeType":"YulFunctionCall","src":"2624:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2616:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2658:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2673:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2689:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2694:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2685:3:181"},"nodeType":"YulFunctionCall","src":"2685:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2698:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2681:3:181"},"nodeType":"YulFunctionCall","src":"2681:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2669:3:181"},"nodeType":"YulFunctionCall","src":"2669:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2651:6:181"},"nodeType":"YulFunctionCall","src":"2651:51:181"},"nodeType":"YulExpressionStatement","src":"2651:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2575:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2586:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2597:4:181","type":""}],"src":"2505:203:181"},{"body":{"nodeType":"YulBlock","src":"2783:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"2829:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2838:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2841:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2831:6:181"},"nodeType":"YulFunctionCall","src":"2831:12:181"},"nodeType":"YulExpressionStatement","src":"2831:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2804:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2813:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2800:3:181"},"nodeType":"YulFunctionCall","src":"2800:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2825:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2796:3:181"},"nodeType":"YulFunctionCall","src":"2796:32:181"},"nodeType":"YulIf","src":"2793:52:181"},{"nodeType":"YulAssignment","src":"2854:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2877:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2864:12:181"},"nodeType":"YulFunctionCall","src":"2864:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2854:6:181"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2749:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2760:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2772:6:181","type":""}],"src":"2713:180:181"},{"body":{"nodeType":"YulBlock","src":"2993:92:181","statements":[{"nodeType":"YulAssignment","src":"3003:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3015:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3026:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3011:3:181"},"nodeType":"YulFunctionCall","src":"3011:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3003:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3045:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3070:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3063:6:181"},"nodeType":"YulFunctionCall","src":"3063:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3056:6:181"},"nodeType":"YulFunctionCall","src":"3056:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3038:6:181"},"nodeType":"YulFunctionCall","src":"3038:41:181"},"nodeType":"YulExpressionStatement","src":"3038:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2962:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2973:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2984:4:181","type":""}],"src":"2898:187:181"},{"body":{"nodeType":"YulBlock","src":"3139:373:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3149:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3169:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3163:5:181"},"nodeType":"YulFunctionCall","src":"3163:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3153:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3191:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"3196:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3184:6:181"},"nodeType":"YulFunctionCall","src":"3184:19:181"},"nodeType":"YulExpressionStatement","src":"3184:19:181"},{"nodeType":"YulVariableDeclaration","src":"3212:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3221:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"3216:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3283:110:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3297:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3307:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3301:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3339:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"3344:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3335:3:181"},"nodeType":"YulFunctionCall","src":"3335:11:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3348:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3331:3:181"},"nodeType":"YulFunctionCall","src":"3331:20:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3367:5:181"},{"name":"i","nodeType":"YulIdentifier","src":"3374:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3363:3:181"},"nodeType":"YulFunctionCall","src":"3363:13:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3378:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3359:3:181"},"nodeType":"YulFunctionCall","src":"3359:22:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3353:5:181"},"nodeType":"YulFunctionCall","src":"3353:29:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3324:6:181"},"nodeType":"YulFunctionCall","src":"3324:59:181"},"nodeType":"YulExpressionStatement","src":"3324:59:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3242:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"3245:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3239:2:181"},"nodeType":"YulFunctionCall","src":"3239:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3253:21:181","statements":[{"nodeType":"YulAssignment","src":"3255:17:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3264:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"3267:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3260:3:181"},"nodeType":"YulFunctionCall","src":"3260:12:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"3255:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"3235:3:181","statements":[]},"src":"3231:162:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3417:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"3422:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3413:3:181"},"nodeType":"YulFunctionCall","src":"3413:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"3431:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3409:3:181"},"nodeType":"YulFunctionCall","src":"3409:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"3438:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3402:6:181"},"nodeType":"YulFunctionCall","src":"3402:38:181"},"nodeType":"YulExpressionStatement","src":"3402:38:181"},{"nodeType":"YulAssignment","src":"3449:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3464:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3477:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3485:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3473:3:181"},"nodeType":"YulFunctionCall","src":"3473:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3494:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3490:3:181"},"nodeType":"YulFunctionCall","src":"3490:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3469:3:181"},"nodeType":"YulFunctionCall","src":"3469:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3460:3:181"},"nodeType":"YulFunctionCall","src":"3460:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"3501:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3456:3:181"},"nodeType":"YulFunctionCall","src":"3456:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"3449:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3116:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"3123:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"3131:3:181","type":""}],"src":"3090:422:181"},{"body":{"nodeType":"YulBlock","src":"3682:212:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3699:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3710:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3692:6:181"},"nodeType":"YulFunctionCall","src":"3692:21:181"},"nodeType":"YulExpressionStatement","src":"3692:21:181"},{"nodeType":"YulVariableDeclaration","src":"3722:58:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3753:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3765:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3776:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3761:3:181"},"nodeType":"YulFunctionCall","src":"3761:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"3736:16:181"},"nodeType":"YulFunctionCall","src":"3736:44:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"3726:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3800:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3811:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3796:3:181"},"nodeType":"YulFunctionCall","src":"3796:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"3820:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3828:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3816:3:181"},"nodeType":"YulFunctionCall","src":"3816:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3789:6:181"},"nodeType":"YulFunctionCall","src":"3789:50:181"},"nodeType":"YulExpressionStatement","src":"3789:50:181"},{"nodeType":"YulAssignment","src":"3848:40:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3873:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"3881:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"3856:16:181"},"nodeType":"YulFunctionCall","src":"3856:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3848:4:181"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3643:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3654:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3662:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3673:4:181","type":""}],"src":"3517:377:181"},{"body":{"nodeType":"YulBlock","src":"4073:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4090:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4101:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4083:6:181"},"nodeType":"YulFunctionCall","src":"4083:21:181"},"nodeType":"YulExpressionStatement","src":"4083:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4124:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4135:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4120:3:181"},"nodeType":"YulFunctionCall","src":"4120:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4140:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4113:6:181"},"nodeType":"YulFunctionCall","src":"4113:30:181"},"nodeType":"YulExpressionStatement","src":"4113:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4163:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4174:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4159:3:181"},"nodeType":"YulFunctionCall","src":"4159:18:181"},{"hexValue":"21726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"4179:14:181","type":"","value":"!rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4152:6:181"},"nodeType":"YulFunctionCall","src":"4152:42:181"},"nodeType":"YulExpressionStatement","src":"4152:42:181"},{"nodeType":"YulAssignment","src":"4203:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4215:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4226:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4211:3:181"},"nodeType":"YulFunctionCall","src":"4211:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4203:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4050:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4064:4:181","type":""}],"src":"3899:336:181"},{"body":{"nodeType":"YulBlock","src":"4433:281:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4450:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4461:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4443:6:181"},"nodeType":"YulFunctionCall","src":"4443:21:181"},"nodeType":"YulExpressionStatement","src":"4443:21:181"},{"nodeType":"YulVariableDeclaration","src":"4473:58:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4504:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4516:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4527:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4512:3:181"},"nodeType":"YulFunctionCall","src":"4512:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"4487:16:181"},"nodeType":"YulFunctionCall","src":"4487:44:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"4477:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4551:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4562:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4547:3:181"},"nodeType":"YulFunctionCall","src":"4547:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"4571:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"4579:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4567:3:181"},"nodeType":"YulFunctionCall","src":"4567:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4540:6:181"},"nodeType":"YulFunctionCall","src":"4540:50:181"},"nodeType":"YulExpressionStatement","src":"4540:50:181"},{"nodeType":"YulAssignment","src":"4599:40:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"4624:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"4632:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"4607:16:181"},"nodeType":"YulFunctionCall","src":"4607:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4599:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4659:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4670:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4655:3:181"},"nodeType":"YulFunctionCall","src":"4655:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"4679:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4695:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4700:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4691:3:181"},"nodeType":"YulFunctionCall","src":"4691:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4704:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4687:3:181"},"nodeType":"YulFunctionCall","src":"4687:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4675:3:181"},"nodeType":"YulFunctionCall","src":"4675:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4648:6:181"},"nodeType":"YulFunctionCall","src":"4648:60:181"},"nodeType":"YulExpressionStatement","src":"4648:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4386:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4397:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4405:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4413:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4424:4:181","type":""}],"src":"4240:474:181"},{"body":{"nodeType":"YulBlock","src":"4893:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4910:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4921:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4903:6:181"},"nodeType":"YulFunctionCall","src":"4903:21:181"},"nodeType":"YulExpressionStatement","src":"4903:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4944:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4955:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4940:3:181"},"nodeType":"YulFunctionCall","src":"4940:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4960:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4933:6:181"},"nodeType":"YulFunctionCall","src":"4933:29:181"},"nodeType":"YulExpressionStatement","src":"4933:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4982:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4993:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4978:3:181"},"nodeType":"YulFunctionCall","src":"4978:18:181"},{"hexValue":"21414d42","kind":"string","nodeType":"YulLiteral","src":"4998:6:181","type":"","value":"!AMB"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4971:6:181"},"nodeType":"YulFunctionCall","src":"4971:34:181"},"nodeType":"YulExpressionStatement","src":"4971:34:181"},{"nodeType":"YulAssignment","src":"5014:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5026:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5037:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5022:3:181"},"nodeType":"YulFunctionCall","src":"5022:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5014:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4870:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4884:4:181","type":""}],"src":"4719:327:181"},{"body":{"nodeType":"YulBlock","src":"5198:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5215:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5226:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5208:6:181"},"nodeType":"YulFunctionCall","src":"5208:21:181"},"nodeType":"YulExpressionStatement","src":"5208:21:181"},{"nodeType":"YulAssignment","src":"5238:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5263:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5275:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5286:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5271:3:181"},"nodeType":"YulFunctionCall","src":"5271:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"5246:16:181"},"nodeType":"YulFunctionCall","src":"5246:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5238:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5310:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5321:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5306:3:181"},"nodeType":"YulFunctionCall","src":"5306:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"5330:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5346:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5351:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5342:3:181"},"nodeType":"YulFunctionCall","src":"5342:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5355:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5338:3:181"},"nodeType":"YulFunctionCall","src":"5338:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5326:3:181"},"nodeType":"YulFunctionCall","src":"5326:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5299:6:181"},"nodeType":"YulFunctionCall","src":"5299:60:181"},"nodeType":"YulExpressionStatement","src":"5299:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5159:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5170:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5178:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5189:4:181","type":""}],"src":"5051:314:181"},{"body":{"nodeType":"YulBlock","src":"5419:176:181","statements":[{"nodeType":"YulAssignment","src":"5429:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5441:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"5444:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5437:3:181"},"nodeType":"YulFunctionCall","src":"5437:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"5429:4:181"}]},{"body":{"nodeType":"YulBlock","src":"5478:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5499:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5506:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"5511:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5502:3:181"},"nodeType":"YulFunctionCall","src":"5502:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5492:6:181"},"nodeType":"YulFunctionCall","src":"5492:31:181"},"nodeType":"YulExpressionStatement","src":"5492:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5543:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5546:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5536:6:181"},"nodeType":"YulFunctionCall","src":"5536:15:181"},"nodeType":"YulExpressionStatement","src":"5536:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5571:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5574:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5564:6:181"},"nodeType":"YulFunctionCall","src":"5564:15:181"},"nodeType":"YulExpressionStatement","src":"5564:15:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"5461:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"5467:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5458:2:181"},"nodeType":"YulFunctionCall","src":"5458:11:181"},"nodeType":"YulIf","src":"5455:134:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"5401:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"5404:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"5410:4:181","type":""}],"src":"5370:225:181"},{"body":{"nodeType":"YulBlock","src":"5774:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5791:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5802:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5784:6:181"},"nodeType":"YulFunctionCall","src":"5784:21:181"},"nodeType":"YulExpressionStatement","src":"5784:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5825:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5836:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5821:3:181"},"nodeType":"YulFunctionCall","src":"5821:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5841:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5814:6:181"},"nodeType":"YulFunctionCall","src":"5814:29:181"},"nodeType":"YulExpressionStatement","src":"5814:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5863:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5874:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5859:3:181"},"nodeType":"YulFunctionCall","src":"5859:18:181"},{"hexValue":"216c656e677468","kind":"string","nodeType":"YulLiteral","src":"5879:9:181","type":"","value":"!length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5852:6:181"},"nodeType":"YulFunctionCall","src":"5852:37:181"},"nodeType":"YulExpressionStatement","src":"5852:37:181"},{"nodeType":"YulAssignment","src":"5898:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5910:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5921:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5906:3:181"},"nodeType":"YulFunctionCall","src":"5906:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5898:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5751:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5765:4:181","type":""}],"src":"5600:330:181"},{"body":{"nodeType":"YulBlock","src":"6054:98:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6071:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6082:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6064:6:181"},"nodeType":"YulFunctionCall","src":"6064:21:181"},"nodeType":"YulExpressionStatement","src":"6064:21:181"},{"nodeType":"YulAssignment","src":"6094:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6119:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6131:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6142:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6127:3:181"},"nodeType":"YulFunctionCall","src":"6127:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"6102:16:181"},"nodeType":"YulFunctionCall","src":"6102:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6094:4:181"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6023:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6034:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6045:4:181","type":""}],"src":"5935:217:181"},{"body":{"nodeType":"YulBlock","src":"6332:210:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6349:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6364:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6380:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6385:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6376:3:181"},"nodeType":"YulFunctionCall","src":"6376:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"6389:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6372:3:181"},"nodeType":"YulFunctionCall","src":"6372:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6360:3:181"},"nodeType":"YulFunctionCall","src":"6360:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6342:6:181"},"nodeType":"YulFunctionCall","src":"6342:51:181"},"nodeType":"YulExpressionStatement","src":"6342:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6413:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6424:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6409:3:181"},"nodeType":"YulFunctionCall","src":"6409:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6429:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6402:6:181"},"nodeType":"YulFunctionCall","src":"6402:30:181"},"nodeType":"YulExpressionStatement","src":"6402:30:181"},{"nodeType":"YulAssignment","src":"6441:52:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6466:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6478:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6489:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6474:3:181"},"nodeType":"YulFunctionCall","src":"6474:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"6449:16:181"},"nodeType":"YulFunctionCall","src":"6449:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6441:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6513:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6524:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6509:3:181"},"nodeType":"YulFunctionCall","src":"6509:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"6529:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6502:6:181"},"nodeType":"YulFunctionCall","src":"6502:34:181"},"nodeType":"YulExpressionStatement","src":"6502:34:181"}]},"name":"abi_encode_tuple_t_address_t_bytes_memory_ptr_t_uint256__to_t_address_t_bytes_memory_ptr_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6285:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6296:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6304:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6312:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6323:4:181","type":""}],"src":"6157:385:181"},{"body":{"nodeType":"YulBlock","src":"6628:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"6674:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6683:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6686:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6676:6:181"},"nodeType":"YulFunctionCall","src":"6676:12:181"},"nodeType":"YulExpressionStatement","src":"6676:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6649:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6658:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6645:3:181"},"nodeType":"YulFunctionCall","src":"6645:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"6670:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6641:3:181"},"nodeType":"YulFunctionCall","src":"6641:32:181"},"nodeType":"YulIf","src":"6638:52:181"},{"nodeType":"YulAssignment","src":"6699:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6715:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6709:5:181"},"nodeType":"YulFunctionCall","src":"6709:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6699:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6594:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6605:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6617:6:181","type":""}],"src":"6547:184:181"},{"body":{"nodeType":"YulBlock","src":"6910:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6927:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6938:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6920:6:181"},"nodeType":"YulFunctionCall","src":"6920:21:181"},"nodeType":"YulExpressionStatement","src":"6920:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6961:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6972:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6957:3:181"},"nodeType":"YulFunctionCall","src":"6957:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6977:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6950:6:181"},"nodeType":"YulFunctionCall","src":"6950:30:181"},"nodeType":"YulExpressionStatement","src":"6950:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7000:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7011:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6996:3:181"},"nodeType":"YulFunctionCall","src":"6996:18:181"},{"hexValue":"216c32436f6e6e6563746f72","kind":"string","nodeType":"YulLiteral","src":"7016:14:181","type":"","value":"!l2Connector"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6989:6:181"},"nodeType":"YulFunctionCall","src":"6989:42:181"},"nodeType":"YulExpressionStatement","src":"6989:42:181"},{"nodeType":"YulAssignment","src":"7040:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7052:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7063:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7048:3:181"},"nodeType":"YulFunctionCall","src":"7048:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7040:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_72c4e0ea3426978b633b2efe37087a856f506ae7eacb1b1e7c169974142d9a69__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6887:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6901:4:181","type":""}],"src":"6736:336:181"},{"body":{"nodeType":"YulBlock","src":"7158:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"7204:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7213:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7216:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7206:6:181"},"nodeType":"YulFunctionCall","src":"7206:12:181"},"nodeType":"YulExpressionStatement","src":"7206:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7179:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7188:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7175:3:181"},"nodeType":"YulFunctionCall","src":"7175:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7200:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7171:3:181"},"nodeType":"YulFunctionCall","src":"7171:32:181"},"nodeType":"YulIf","src":"7168:52:181"},{"nodeType":"YulAssignment","src":"7229:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7245:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7239:5:181"},"nodeType":"YulFunctionCall","src":"7239:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7229:6:181"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7124:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7135:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7147:6:181","type":""}],"src":"7077:184:181"},{"body":{"nodeType":"YulBlock","src":"7440:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7457:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7468:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7450:6:181"},"nodeType":"YulFunctionCall","src":"7450:21:181"},"nodeType":"YulExpressionStatement","src":"7450:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7491:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7502:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7487:3:181"},"nodeType":"YulFunctionCall","src":"7487:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7507:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7480:6:181"},"nodeType":"YulFunctionCall","src":"7480:30:181"},"nodeType":"YulExpressionStatement","src":"7480:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7530:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7541:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7526:3:181"},"nodeType":"YulFunctionCall","src":"7526:18:181"},{"hexValue":"21736f75726365436861696e","kind":"string","nodeType":"YulLiteral","src":"7546:14:181","type":"","value":"!sourceChain"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7519:6:181"},"nodeType":"YulFunctionCall","src":"7519:42:181"},"nodeType":"YulExpressionStatement","src":"7519:42:181"},{"nodeType":"YulAssignment","src":"7570:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7582:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7593:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7578:3:181"},"nodeType":"YulFunctionCall","src":"7578:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7570:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0d5605680c5f886aed2495c7e7998d97b3239c9572097b625996bd4acc3f63dd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7417:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7431:4:181","type":""}],"src":"7266:336:181"},{"body":{"nodeType":"YulBlock","src":"7701:203:181","statements":[{"nodeType":"YulVariableDeclaration","src":"7711:26:181","value":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"7731:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7725:5:181"},"nodeType":"YulFunctionCall","src":"7725:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"7715:6:181","type":""}]},{"nodeType":"YulAssignment","src":"7746:32:181","value":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"7765:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"7772:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7761:3:181"},"nodeType":"YulFunctionCall","src":"7761:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7755:5:181"},"nodeType":"YulFunctionCall","src":"7755:23:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"7746:5:181"}]},{"body":{"nodeType":"YulBlock","src":"7815:83:181","statements":[{"nodeType":"YulAssignment","src":"7829:59:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7842:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7857:1:181","type":"","value":"3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7864:4:181","type":"","value":"0x20"},{"name":"length","nodeType":"YulIdentifier","src":"7870:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7860:3:181"},"nodeType":"YulFunctionCall","src":"7860:17:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7853:3:181"},"nodeType":"YulFunctionCall","src":"7853:25:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7884:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7880:3:181"},"nodeType":"YulFunctionCall","src":"7880:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7849:3:181"},"nodeType":"YulFunctionCall","src":"7849:38:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7838:3:181"},"nodeType":"YulFunctionCall","src":"7838:50:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"7829:5:181"}]}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"7793:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"7801:4:181","type":"","value":"0x20"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7790:2:181"},"nodeType":"YulFunctionCall","src":"7790:16:181"},"nodeType":"YulIf","src":"7787:111:181"}]},"name":"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nodeType":"YulTypedName","src":"7681:5:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"7691:5:181","type":""}],"src":"7607:297:181"},{"body":{"nodeType":"YulBlock","src":"8036:136:181","statements":[{"nodeType":"YulAssignment","src":"8046:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8058:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8069:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8054:3:181"},"nodeType":"YulFunctionCall","src":"8054:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8046:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8088:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8103:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8111:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8099:3:181"},"nodeType":"YulFunctionCall","src":"8099:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8081:6:181"},"nodeType":"YulFunctionCall","src":"8081:42:181"},"nodeType":"YulExpressionStatement","src":"8081:42:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8143:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8154:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8139:3:181"},"nodeType":"YulFunctionCall","src":"8139:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"8159:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8132:6:181"},"nodeType":"YulFunctionCall","src":"8132:34:181"},"nodeType":"YulExpressionStatement","src":"8132:34:181"}]},"name":"abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7997:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8008:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8016:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8027:4:181","type":""}],"src":"7909:263:181"},{"body":{"nodeType":"YulBlock","src":"8306:175:181","statements":[{"nodeType":"YulAssignment","src":"8316:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8328:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8339:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8324:3:181"},"nodeType":"YulFunctionCall","src":"8324:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8316:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"8351:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8369:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"8374:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8365:3:181"},"nodeType":"YulFunctionCall","src":"8365:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"8378:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8361:3:181"},"nodeType":"YulFunctionCall","src":"8361:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8355:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8396:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8411:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8419:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8407:3:181"},"nodeType":"YulFunctionCall","src":"8407:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8389:6:181"},"nodeType":"YulFunctionCall","src":"8389:34:181"},"nodeType":"YulExpressionStatement","src":"8389:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8443:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8454:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8439:3:181"},"nodeType":"YulFunctionCall","src":"8439:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"8463:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8471:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8459:3:181"},"nodeType":"YulFunctionCall","src":"8459:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8432:6:181"},"nodeType":"YulFunctionCall","src":"8432:43:181"},"nodeType":"YulExpressionStatement","src":"8432:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8267:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8278:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8286:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8297:4:181","type":""}],"src":"8177:304:181"},{"body":{"nodeType":"YulBlock","src":"8615:119:181","statements":[{"nodeType":"YulAssignment","src":"8625:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8637:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8648:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8633:3:181"},"nodeType":"YulFunctionCall","src":"8633:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8625:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8667:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"8678:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8660:6:181"},"nodeType":"YulFunctionCall","src":"8660:25:181"},"nodeType":"YulExpressionStatement","src":"8660:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8705:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8716:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8701:3:181"},"nodeType":"YulFunctionCall","src":"8701:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"8721:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8694:6:181"},"nodeType":"YulFunctionCall","src":"8694:34:181"},"nodeType":"YulExpressionStatement","src":"8694:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8576:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8587:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8595:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8606:4:181","type":""}],"src":"8486:248:181"},{"body":{"nodeType":"YulBlock","src":"8913:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8930:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8941:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8923:6:181"},"nodeType":"YulFunctionCall","src":"8923:21:181"},"nodeType":"YulExpressionStatement","src":"8923:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8964:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8975:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8960:3:181"},"nodeType":"YulFunctionCall","src":"8960:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8980:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8953:6:181"},"nodeType":"YulFunctionCall","src":"8953:30:181"},"nodeType":"YulExpressionStatement","src":"8953:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9003:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9014:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8999:3:181"},"nodeType":"YulFunctionCall","src":"8999:18:181"},{"hexValue":"2164617461206c656e677468","kind":"string","nodeType":"YulLiteral","src":"9019:14:181","type":"","value":"!data length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8992:6:181"},"nodeType":"YulFunctionCall","src":"8992:42:181"},"nodeType":"YulExpressionStatement","src":"8992:42:181"},{"nodeType":"YulAssignment","src":"9043:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9055:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9066:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9051:3:181"},"nodeType":"YulFunctionCall","src":"9051:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9043:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8890:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8904:4:181","type":""}],"src":"8739:336:181"},{"body":{"nodeType":"YulBlock","src":"9254:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9271:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9282:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9264:6:181"},"nodeType":"YulFunctionCall","src":"9264:21:181"},"nodeType":"YulExpressionStatement","src":"9264:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9305:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9316:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9301:3:181"},"nodeType":"YulFunctionCall","src":"9301:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9321:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9294:6:181"},"nodeType":"YulFunctionCall","src":"9294:29:181"},"nodeType":"YulExpressionStatement","src":"9294:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9343:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9354:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9339:3:181"},"nodeType":"YulFunctionCall","src":"9339:18:181"},{"hexValue":"21627269646765","kind":"string","nodeType":"YulLiteral","src":"9359:9:181","type":"","value":"!bridge"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9332:6:181"},"nodeType":"YulFunctionCall","src":"9332:37:181"},"nodeType":"YulExpressionStatement","src":"9332:37:181"},{"nodeType":"YulAssignment","src":"9378:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9390:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9401:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9386:3:181"},"nodeType":"YulFunctionCall","src":"9386:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9378:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5bd20fa0eac50a6892371dae18efeb7d2b1c7a8479150f38626e21052ac8472c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9231:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9245:4:181","type":""}],"src":"9080:330:181"},{"body":{"nodeType":"YulBlock","src":"9589:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9606:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9617:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9599:6:181"},"nodeType":"YulFunctionCall","src":"9599:21:181"},"nodeType":"YulExpressionStatement","src":"9599:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9640:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9651:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9636:3:181"},"nodeType":"YulFunctionCall","src":"9636:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9656:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9629:6:181"},"nodeType":"YulFunctionCall","src":"9629:29:181"},"nodeType":"YulExpressionStatement","src":"9629:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9678:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9689:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9674:3:181"},"nodeType":"YulFunctionCall","src":"9674:18:181"},{"hexValue":"21736f75726365","kind":"string","nodeType":"YulLiteral","src":"9694:9:181","type":"","value":"!source"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9667:6:181"},"nodeType":"YulFunctionCall","src":"9667:37:181"},"nodeType":"YulExpressionStatement","src":"9667:37:181"},{"nodeType":"YulAssignment","src":"9713:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9725:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9736:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9721:3:181"},"nodeType":"YulFunctionCall","src":"9721:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9713:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_599616dc1fbc723d39bc96590d652f93d467afd415e9f46bd106f14abf00049d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9566:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9580:4:181","type":""}],"src":"9415:330:181"},{"body":{"nodeType":"YulBlock","src":"9831:170:181","statements":[{"body":{"nodeType":"YulBlock","src":"9877:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9886:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9889:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9879:6:181"},"nodeType":"YulFunctionCall","src":"9879:12:181"},"nodeType":"YulExpressionStatement","src":"9879:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9852:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"9861:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9848:3:181"},"nodeType":"YulFunctionCall","src":"9848:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"9873:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9844:3:181"},"nodeType":"YulFunctionCall","src":"9844:32:181"},"nodeType":"YulIf","src":"9841:52:181"},{"nodeType":"YulVariableDeclaration","src":"9902:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9921:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9915:5:181"},"nodeType":"YulFunctionCall","src":"9915:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9906:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9965:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9940:24:181"},"nodeType":"YulFunctionCall","src":"9940:31:181"},"nodeType":"YulExpressionStatement","src":"9940:31:181"},{"nodeType":"YulAssignment","src":"9980:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"9990:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9980:6:181"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9797:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9808:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9820:6:181","type":""}],"src":"9750:251:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_bytes(add(headStart, offset_1), dataEnd)\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        let tail_1 := abi_encode_bytes(value0, add(headStart, 64))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value1, tail_1)\n    }\n    function abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!rootManager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        let tail_1 := abi_encode_bytes(value0, add(headStart, 96))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value1, tail_1)\n        mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!AMB\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        tail := abi_encode_bytes(value0, add(headStart, 64))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr_t_uint256__to_t_address_t_bytes_memory_ptr_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), 96)\n        tail := abi_encode_bytes(value1, add(headStart, 96))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_72c4e0ea3426978b633b2efe37087a856f506ae7eacb1b1e7c169974142d9a69__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!l2Connector\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_0d5605680c5f886aed2495c7e7998d97b3239c9572097b625996bd4acc3f63dd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!sourceChain\")\n        tail := add(headStart, 96)\n    }\n    function convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32(array) -> value\n    {\n        let length := mload(array)\n        value := mload(add(array, 0x20))\n        if lt(length, 0x20)\n        {\n            value := and(value, shl(shl(3, sub(0x20, length)), not(0)))\n        }\n    }\n    function abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!data length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_5bd20fa0eac50a6892371dae18efeb7d2b1c7a8479150f38626e21052ac8472c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!bridge\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_599616dc1fbc723d39bc96590d652f93d467afd415e9f46bd106f14abf00049d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!source\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"39039":[{"length":32,"start":515}],"39042":[{"length":32,"start":990},{"length":32,"start":1079},{"length":32,"start":1380},{"length":32,"start":2184},{"length":32,"start":2494},{"length":32,"start":3281},{"length":32,"start":3315}],"39045":[{"length":32,"start":599},{"length":32,"start":1199},{"length":32,"start":2751}],"39048":[{"length":32,"start":321},{"length":32,"start":2790}],"41234":[{"length":32,"start":833},{"length":32,"start":3612}]},"linkReferences":{},"object":"6080604052600436106101235760003560e01c80637850b020116100a0578063cc39428311610064578063cc39428314610363578063d1851c9214610383578063d232c220146103a1578063d69f9d61146103cc578063db1b76591461040057600080fd5b80637850b020146102bc5780638da5cb5b146102dc578063b1f8100d146102fa578063c5b350df1461031a578063c8a4d6901461032f57600080fd5b806352a9674b116100e757806352a9674b146101f15780635bd11efc146102255780635f61e3ec146102455780636a42b8f814610291578063715018a6146102a757600080fd5b8063141684161461012f5780633cf52ffb1461017d5780633f7658fd1461019c57806348e6fa23146101be5780634ff746f6146101d157600080fd5b3661012a57005b600080fd5b34801561013b57600080fd5b506101637f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b34801561018957600080fd5b506002545b604051908152602001610174565b3480156101a857600080fd5b506101bc6101b7366004610faa565b610420565b005b6101bc6101cc366004610faa565b6104a4565b3480156101dd57600080fd5b506101bc6101ec36600461100e565b610559565b3480156101fd57600080fd5b506101637f000000000000000000000000000000000000000000000000000000000000000081565b34801561023157600080fd5b506101bc610240366004611060565b6105ff565b34801561025157600080fd5b506102797f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610174565b34801561029d57600080fd5b5062093a8061018e565b3480156102b357600080fd5b506101bc610636565b3480156102c857600080fd5b506101bc6102d7366004611084565b6106ea565b3480156102e857600080fd5b506000546001600160a01b0316610279565b34801561030657600080fd5b506101bc610315366004611060565b61071e565b34801561032657600080fd5b506101bc6107bc565b34801561033b57600080fd5b5061018e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561036f57600080fd5b50600354610279906001600160a01b031681565b34801561038f57600080fd5b506001546001600160a01b0316610279565b3480156103ad57600080fd5b506000546001600160a01b0316155b6040519015158152602001610174565b3480156103d857600080fd5b506102797f000000000000000000000000000000000000000000000000000000000000000081565b34801561040c57600080fd5b506103bc61041b366004611060565b61082c565b604051633f7658fd60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633f7658fd9061046e90859085906004016110e3565b600060405180830381600087803b15801561048857600080fd5b505af115801561049c573d6000803e3d6000fd5b505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105105760405162461bcd60e51b815260206004820152600c60248201526b10b937b7ba26b0b730b3b2b960a11b60448201526064015b60405180910390fd5b61051a828261083d565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507782823360405161054d93929190611111565b60405180910390a15050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105ba5760405162461bcd60e51b81526004016105079060208082526004908201526310a0a6a160e11b604082015260600190565b6105c38161096b565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced81336040516105f492919061114f565b60405180910390a150565b6000546001600160a01b0316331461062a576040516311a8a1bb60e31b815260040160405180910390fd5b61063381610b6d565b50565b6000546001600160a01b03163314610661576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426106739190611179565b11610691576040516324e0285f60e21b815260040160405180910390fd5b6002546000036106b457604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b0316156106de576040516323295ef960e01b815260040160405180910390fd5b6106e86000610bd6565b565b6000546001600160a01b03163314610715576040516311a8a1bb60e31b815260040160405180910390fd5b61063381610c3b565b6000546001600160a01b03163314610749576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610767575060025415155b15610785576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036107b357604051634a2fb73f60e11b815260040160405180910390fd5b61063381610c7c565b6001546001600160a01b031633146107e7576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426107f99190611179565b11610817576040516324e0285f60e21b815260040160405180910390fd5b6001546106e8906001600160a01b0316610bd6565b600061083782610cca565b92915050565b81516020146108785760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610507565b6003546040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263dc8601b3929116906327fba37b60e11b906108ca90879060240161119a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261090585610d78565b6040518463ffffffff1660e01b8152600401610923939291906111ad565b6020604051808303816000875af1158015610942573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096691906111e1565b505050565b600354610980906001600160a01b0316610cca565b6109bb5760405162461bcd60e51b815260206004820152600c60248201526b10b61921b7b73732b1ba37b960a11b6044820152606401610507565b467f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631544298e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3e91906111e1565b14610a7a5760405162461bcd60e51b815260206004820152600c60248201526b10b9b7bab931b2a1b430b4b760a11b6044820152606401610507565b8051602014610ab55760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610507565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016638e7d93fa7f0000000000000000000000000000000000000000000000000000000000000000610b0e846111fa565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526024820152604401600060405180830381600087803b158015610b5257600080fd5b505af1158015610b66573d6000803e3d6000fd5b5050505050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60045460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1600455565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b60006108377f0000000000000000000000000000000000000000000000000000000000000000837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b07506116040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7391906111e1565b610dd6565b60008151602014610dba5760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610507565b61083782806020019051810190610dd191906111e1565b610ef1565b6000336001600160a01b03851614610e1a5760405162461bcd60e51b81526020600482015260076024820152662162726964676560c81b6044820152606401610507565b7f00000000000000000000000000000000000000000000000000000000000000008214610e735760405162461bcd60e51b815260206004820152600760248201526621736f7572636560c81b6044820152606401610507565b826001600160a01b0316846001600160a01b031663d67bdd256040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edf9190611221565b6001600160a01b031614949350505050565b6000600454821115610f035760045491505b5090565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610f2e57600080fd5b813567ffffffffffffffff80821115610f4957610f49610f07565b604051601f8301601f19908116603f01168101908282118183101715610f7157610f71610f07565b81604052838152866020858801011115610f8a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610fbd57600080fd5b823567ffffffffffffffff80821115610fd557600080fd5b610fe186838701610f1d565b93506020850135915080821115610ff757600080fd5b5061100485828601610f1d565b9150509250929050565b60006020828403121561102057600080fd5b813567ffffffffffffffff81111561103757600080fd5b61104384828501610f1d565b949350505050565b6001600160a01b038116811461063357600080fd5b60006020828403121561107257600080fd5b813561107d8161104b565b9392505050565b60006020828403121561109657600080fd5b5035919050565b6000815180845260005b818110156110c3576020818501810151868301820152016110a7565b506000602082860101526020601f19601f83011685010191505092915050565b6040815260006110f6604083018561109d565b8281036020840152611108818561109d565b95945050505050565b606081526000611124606083018661109d565b8281036020840152611136818661109d565b91505060018060a01b0383166040830152949350505050565b604081526000611162604083018561109d565b905060018060a01b03831660208301529392505050565b8181038181111561083757634e487b7160e01b600052601160045260246000fd5b60208152600061107d602083018461109d565b6001600160a01b03841681526060602082018190526000906111d19083018561109d565b9050826040830152949350505050565b6000602082840312156111f357600080fd5b5051919050565b8051602080830151919081101561121b576000198160200360031b1b821691505b50919050565b60006020828403121561123357600080fd5b815161107d8161104b56fea264697066735822122042ad875cd6070f8f3c16a6c25eab50df8fb0b01f474266ea01dbeb3fc370117b64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x123 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7850B020 GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xCC394283 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x363 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x383 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x3A1 JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x3CC JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x400 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7850B020 EQ PUSH2 0x2BC JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2DC JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x2FA JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x31A JUMPI DUP1 PUSH4 0xC8A4D690 EQ PUSH2 0x32F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0x52A9674B EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x225 JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x245 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x291 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x2A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x12F JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x17D JUMPI DUP1 PUSH4 0x3F7658FD EQ PUSH2 0x19C JUMPI DUP1 PUSH4 0x48E6FA23 EQ PUSH2 0x1BE JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x1D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x12A JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x163 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x189 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x174 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x1B7 CALLDATASIZE PUSH1 0x4 PUSH2 0xFAA JUMP JUMPDEST PUSH2 0x420 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1BC PUSH2 0x1CC CALLDATASIZE PUSH1 0x4 PUSH2 0xFAA JUMP JUMPDEST PUSH2 0x4A4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x1EC CALLDATASIZE PUSH1 0x4 PUSH2 0x100E JUMP JUMPDEST PUSH2 0x559 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x163 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x240 CALLDATASIZE PUSH1 0x4 PUSH2 0x1060 JUMP JUMPDEST PUSH2 0x5FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x279 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x174 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x18E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x636 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x2D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x1084 JUMP JUMPDEST PUSH2 0x6EA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x279 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x306 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x315 CALLDATASIZE PUSH1 0x4 PUSH2 0x1060 JUMP JUMPDEST PUSH2 0x71E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x326 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BC PUSH2 0x7BC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18E PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x36F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x279 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x38F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x279 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x174 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x279 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x40C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BC PUSH2 0x41B CALLDATASIZE PUSH1 0x4 PUSH2 0x1060 JUMP JUMPDEST PUSH2 0x82C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3F7658FD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x3F7658FD SWAP1 PUSH2 0x46E SWAP1 DUP6 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x10E3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x49C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x510 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B937B7BA26B0B730B3B2B9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x51A DUP3 DUP3 PUSH2 0x83D JUMP JUMPDEST PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 DUP3 DUP3 CALLER PUSH1 0x40 MLOAD PUSH2 0x54D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1111 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x5BA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x507 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0x5C3 DUP2 PUSH2 0x96B JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0x5F4 SWAP3 SWAP2 SWAP1 PUSH2 0x114F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x62A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x633 DUP2 PUSH2 0xB6D JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x661 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x673 SWAP2 SWAP1 PUSH2 0x1179 JUMP JUMPDEST GT PUSH2 0x691 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x6B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x6DE JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6E8 PUSH1 0x0 PUSH2 0xBD6 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x715 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x633 DUP2 PUSH2 0xC3B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x749 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x767 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x785 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x7B3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x633 DUP2 PUSH2 0xC7C JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x7E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x7F9 SWAP2 SWAP1 PUSH2 0x1179 JUMP JUMPDEST GT PUSH2 0x817 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x6E8 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xBD6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x837 DUP3 PUSH2 0xCCA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x878 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x507 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND SWAP3 PUSH4 0xDC8601B3 SWAP3 SWAP2 AND SWAP1 PUSH4 0x27FBA37B PUSH1 0xE1 SHL SWAP1 PUSH2 0x8CA SWAP1 DUP8 SWAP1 PUSH1 0x24 ADD PUSH2 0x119A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x905 DUP6 PUSH2 0xD78 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x923 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x11AD JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x942 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x966 SWAP2 SWAP1 PUSH2 0x11E1 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x980 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xCCA JUMP JUMPDEST PUSH2 0x9BB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B61921B7B73732B1BA37B9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x507 JUMP JUMPDEST CHAINID PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1544298E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA1A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA3E SWAP2 SWAP1 PUSH2 0x11E1 JUMP JUMPDEST EQ PUSH2 0xA7A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B9B7BAB931B2A1B430B4B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x507 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0xAB5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x507 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH4 0x8E7D93FA PUSH32 0x0 PUSH2 0xB0E DUP5 PUSH2 0x11FA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB66 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x837 PUSH32 0x0 DUP4 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB0750611 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD4F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD73 SWAP2 SWAP1 PUSH2 0x11E1 JUMP JUMPDEST PUSH2 0xDD6 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0xDBA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x507 JUMP JUMPDEST PUSH2 0x837 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xDD1 SWAP2 SWAP1 PUSH2 0x11E1 JUMP JUMPDEST PUSH2 0xEF1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EQ PUSH2 0xE1A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x21627269646765 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x507 JUMP JUMPDEST PUSH32 0x0 DUP3 EQ PUSH2 0xE73 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x21736F75726365 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x507 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD67BDD25 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEBB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEDF SWAP2 SWAP1 PUSH2 0x1221 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 SLOAD DUP3 GT ISZERO PUSH2 0xF03 JUMPI PUSH1 0x4 SLOAD SWAP2 POP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xF2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xF49 JUMPI PUSH2 0xF49 PUSH2 0xF07 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xF71 JUMPI PUSH2 0xF71 PUSH2 0xF07 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0xF8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xFBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xFD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFE1 DUP7 DUP4 DUP8 ADD PUSH2 0xF1D JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xFF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1004 DUP6 DUP3 DUP7 ADD PUSH2 0xF1D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1020 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1037 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1043 DUP5 DUP3 DUP6 ADD PUSH2 0xF1D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x633 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1072 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x107D DUP2 PUSH2 0x104B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1096 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x10C3 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x10A7 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x10F6 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x109D JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1108 DUP2 DUP6 PUSH2 0x109D JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1124 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x109D JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1136 DUP2 DUP7 PUSH2 0x109D JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1162 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x109D JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x837 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x107D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x109D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x11D1 SWAP1 DUP4 ADD DUP6 PUSH2 0x109D JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x11F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x121B JUMPI PUSH1 0x0 NOT DUP2 PUSH1 0x20 SUB PUSH1 0x3 SHL SHL DUP3 AND SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x107D DUP2 PUSH2 0x104B JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 TIMESTAMP 0xAD DUP8 0x5C 0xD6 SMOD 0xF DUP16 EXTCODECOPY AND 0xA6 0xC2 0x5E 0xAB POP 0xDF DUP16 0xB0 0xB0 0x1F SELFBALANCE TIMESTAMP PUSH7 0xEA01DBEB3FC370 GT PUSH28 0x64736F6C634300081100330000000000000000000000000000000000 ","sourceMap":"340:2039:124:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1587:37:116;;;;;;;;;;;;;;;;;;188:10:181;176:23;;;158:42;;146:2;131:18;1587:37:116;;;;;;;;1949:112:168;;;;;;;;;;-1:-1:-1;2029:27:168;;1949:112;;;357:25:181;;;345:2;330:18;1949:112:168;211:177:181;807:145:124;;;;;;;;;;-1:-1:-1;807:145:124;;;;;:::i;:::-;;:::i;:::-;;1614:200:119;;;;;;:::i;:::-;;:::i;4262:148:116:-;;;;;;;;;;-1:-1:-1;4262:148:116;;;;;:::i;:::-;;:::i;1268:30::-;;;;;;;;;;;;;;;3939:119;;;;;;;;;;-1:-1:-1;3939:119:116;;;;;:::i;:::-;;:::i;1451:37::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2669:32:181;;;2651:51;;2639:2;2624:18;1451:37:116;2505:203:181;2151:79:168;;;;;;;;;;-1:-1:-1;1530:6:168;2151:79;;3820:442;;;;;;;;;;;;;:::i;860:83:118:-;;;;;;;;;;-1:-1:-1;860:83:118;;;;;:::i;:::-;;:::i;1641:79:168:-;;;;;;;;;;-1:-1:-1;1687:7:168;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;3321:420;;;;;;;;;;-1:-1:-1;3321:420:168;;;;;:::i;:::-;;:::i;4404:539::-;;;;;;;;;;;;;:::i;256:40:123:-;;;;;;;;;;;;;;;1705:30:116;;;;;;;;;;-1:-1:-1;1705:30:116;;;;-1:-1:-1;;;;;1705:30:116;;;1792:85:168;;;;;;;;;;-1:-1:-1;1863:9:168;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;;;;;;;;;;-1:-1:-1;3097:4:168;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;;3063:14:181;;3056:22;3038:41;;3026:2;3011:18;3055:86:168;2898:187:181;1363:28:116;;;;;;;;;;;;;;;4490:107;;;;;;;;;;-1:-1:-1;4490:107:116;;;;;:::i;:::-;;:::i;807:145:124:-;895:52;;-1:-1:-1;;;895:52:124;;-1:-1:-1;;;;;905:3:124;895:32;;;;:52;;928:5;;935:11;;895:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;807:145;;:::o;1614:200:119:-;2212:10:116;-1:-1:-1;;;;;2226:12:116;2212:26;;2204:51;;;;-1:-1:-1;;;2204:51:116;;4101:2:181;2204:51:116;;;4083:21:181;4140:2;4120:18;;;4113:30;-1:-1:-1;;;4159:18:181;;;4152:42;4211:18;;2204:51:116;;;;;;;;;1721:33:119::1;1734:5;1741:12;1721;:33::i;:::-;1765:44;1777:5;1784:12;1798:10;1765:44;;;;;;;;:::i;:::-;;;;;;;;1614:200:::0;;:::o;4262:148:116:-;1891:10;-1:-1:-1;;;;;1905:3:116;1891:17;;1883:34;;;;-1:-1:-1;;;1883:34:116;;;;;;4921:2:181;4903:21;;;4960:1;4940:18;;;4933:29;-1:-1:-1;;;4993:2:181;4978:18;;4971:34;5037:2;5022:18;;4719:327;1883:34:116;4337:22:::1;4353:5;4337:15;:22::i;:::-;4370:35;4387:5;4394:10;4370:35;;;;;;;:::i;:::-;;;;;;;;4262:148:::0;:::o;3939:119::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4016:37:116::1;4036:16;4016:19;:37::i;:::-;3939:119:::0;:::o;3820:442:168:-;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;3960:27:::2;;3991:1;3960:32:::0;3956:92:::2;;4001:47;;-1:-1:-1::0;;;4001:47:168::2;;;;;;;;;;;3956:92;4095:9;::::0;-1:-1:-1;;;;;4095:9:168::2;:23:::0;4091:88:::2;;4127:52;;-1:-1:-1::0;;;4127:52:168::2;;;;;;;;;;;4091:88;4236:21;4254:1;4236:9;:21::i;:::-;3820:442::o:0;860:83:118:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;919:19:118::1;930:7;919:10;:19::i;3321:420:168:-:0;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;4404:539::-:0;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;4490:107:116:-:0;4549:4;4568:24;4582:9;4568:13;:24::i;:::-;4561:31;4490:107;-1:-1:-1;;4490:107:116:o;1312:465:124:-;1468:5;:12;1484:2;1468:18;1460:38;;;;-1:-1:-1;;;1460:38:124;;5802:2:181;1460:38:124;;;5784:21:181;5841:1;5821:18;;;5814:29;-1:-1:-1;;;5859:18:181;;;5852:37;5906:18;;1460:38:124;5600:330:181;1460:38:124;1639:15;;1662:64;;-1:-1:-1;;;;;1606:3:124;1596:35;;;;;1639:15;;;-1:-1:-1;;;1685:33:124;1662:64;;1720:5;;1662:64;;;:::i;:::-;;;;-1:-1:-1;;1662:64:124;;;;;;;;;;;;;;-1:-1:-1;;;;;1662:64:124;-1:-1:-1;;;;;;1662:64:124;;;;;;;;;;1734:32;1753:12;1734:18;:32::i;:::-;1596:176;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1312:465;;:::o;1870:507::-;2009:15;;1995:30;;-1:-1:-1;;;;;2009:15:124;1995:13;:30::i;:::-;1987:55;;;;-1:-1:-1;;;1987:55:124;;6938:2:181;1987:55:124;;;6920:21:181;6977:2;6957:18;;;6950:30;-1:-1:-1;;;6996:18:181;;;6989:42;7048:18;;1987:55:124;6736:336:181;1987:55:124;2132:13;2108:3;-1:-1:-1;;;;;2098:28:124;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;2090:72;;;;-1:-1:-1;;;2090:72:124;;7468:2:181;2090:72:124;;;7450:21:181;7507:2;7487:18;;;7480:30;-1:-1:-1;;;7526:18:181;;;7519:42;7578:18;;2090:72:124;7266:336:181;2090:72:124;2226:5;:12;2242:2;2226:18;2218:38;;;;-1:-1:-1;;;2218:38:124;;5802:2:181;2218:38:124;;;5784:21:181;5841:1;5821:18;;;5814:29;-1:-1:-1;;;5859:18:181;;;5852:37;5906:18;;2218:38:124;5600:330:181;2218:38:124;-1:-1:-1;;;;;2318:12:124;2305:36;;2342:13;2357:14;2365:5;2357:14;:::i;:::-;2305:67;;-1:-1:-1;;;;;;2305:67:124;;;;;;;;8099:23:181;;;;2305:67:124;;;8081:42:181;8139:18;;;8132:34;8054:18;;2305:67:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1870:507;:::o;5838:185:116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;8389:34:181;;8459:15;;;8454:2;8439:18;;8432:43;5921:57:116;;8324:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;4981::168:-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;1089:114:118:-;1160:6;;1146:30;;;8660:25:181;;;8716:2;8701:18;;8694:34;;;1146:30:118;;8633:18:181;1146:30:118;;;;;;;1182:6;:16;1089:114::o;5170:183:168:-;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;1066:164:124:-;1140:4;1159:66;1173:3;1178:9;1199:3;-1:-1:-1;;;;;1189:33:124;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1159:13;:66::i;960:327:123:-;1038:12;1123;:19;1146:2;1123:25;1115:50;;;;-1:-1:-1;;;1115:50:123;;8941:2:181;1115:50:123;;;8923:21:181;8980:2;8960:18;;;8953:30;-1:-1:-1;;;8999:18:181;;;8992:42;9051:18;;1115:50:123;8739:336:181;1115:50:123;1238:44;1257:12;1246:35;;;;;;;;;;;;:::i;:::-;1238:7;:44::i;571:286::-;688:4;708:10;-1:-1:-1;;;;;708:18:123;;;700:38;;;;-1:-1:-1;;;700:38:123;;9282:2:181;700:38:123;;;9264:21:181;9321:1;9301:18;;;9294:29;-1:-1:-1;;;9339:18:181;;;9332:37;9386:18;;700:38:123;9080:330:181;700:38:123;768:15;752:12;:31;744:51;;;;-1:-1:-1;;;744:51:123;;9617:2:181;744:51:123;;;9599:21:181;9656:1;9636:18;;;9629:29;-1:-1:-1;;;9674:18:181;;;9667:37;9721:18;;744:51:123;9415:330:181;744:51:123;843:9;-1:-1:-1;;;;;808:44:123;818:4;-1:-1:-1;;;;;808:29:123;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;808:44:123;;;571:286;-1:-1:-1;;;;571:286:123:o;1360:137:118:-;1414:7;1440:6;;1433:4;:13;1429:47;;;1463:6;;1456:13;;1429:47;-1:-1:-1;1488:4:118;1360:137::o;393:127:181:-;454:10;449:3;445:20;442:1;435:31;485:4;482:1;475:15;509:4;506:1;499:15;525:718;567:5;620:3;613:4;605:6;601:17;597:27;587:55;;638:1;635;628:12;587:55;674:6;661:20;700:18;737:2;733;730:10;727:36;;;743:18;;:::i;:::-;818:2;812:9;786:2;872:13;;-1:-1:-1;;868:22:181;;;892:2;864:31;860:40;848:53;;;916:18;;;936:22;;;913:46;910:72;;;962:18;;:::i;:::-;1002:10;998:2;991:22;1037:2;1029:6;1022:18;1083:3;1076:4;1071:2;1063:6;1059:15;1055:26;1052:35;1049:55;;;1100:1;1097;1090:12;1049:55;1164:2;1157:4;1149:6;1145:17;1138:4;1130:6;1126:17;1113:54;1211:1;1204:4;1199:2;1191:6;1187:15;1183:26;1176:37;1231:6;1222:15;;;;;;525:718;;;;:::o;1248:539::-;1334:6;1342;1395:2;1383:9;1374:7;1370:23;1366:32;1363:52;;;1411:1;1408;1401:12;1363:52;1451:9;1438:23;1480:18;1521:2;1513:6;1510:14;1507:34;;;1537:1;1534;1527:12;1507:34;1560:49;1601:7;1592:6;1581:9;1577:22;1560:49;:::i;:::-;1550:59;;1662:2;1651:9;1647:18;1634:32;1618:48;;1691:2;1681:8;1678:16;1675:36;;;1707:1;1704;1697:12;1675:36;;1730:51;1773:7;1762:8;1751:9;1747:24;1730:51;:::i;:::-;1720:61;;;1248:539;;;;;:::o;1792:320::-;1860:6;1913:2;1901:9;1892:7;1888:23;1884:32;1881:52;;;1929:1;1926;1919:12;1881:52;1969:9;1956:23;2002:18;1994:6;1991:30;1988:50;;;2034:1;2031;2024:12;1988:50;2057:49;2098:7;2089:6;2078:9;2074:22;2057:49;:::i;:::-;2047:59;1792:320;-1:-1:-1;;;;1792:320:181:o;2117:131::-;-1:-1:-1;;;;;2192:31:181;;2182:42;;2172:70;;2238:1;2235;2228:12;2253:247;2312:6;2365:2;2353:9;2344:7;2340:23;2336:32;2333:52;;;2381:1;2378;2371:12;2333:52;2420:9;2407:23;2439:31;2464:5;2439:31;:::i;:::-;2489:5;2253:247;-1:-1:-1;;;2253:247:181:o;2713:180::-;2772:6;2825:2;2813:9;2804:7;2800:23;2796:32;2793:52;;;2841:1;2838;2831:12;2793:52;-1:-1:-1;2864:23:181;;2713:180;-1:-1:-1;2713:180:181:o;3090:422::-;3131:3;3169:5;3163:12;3196:6;3191:3;3184:19;3221:1;3231:162;3245:6;3242:1;3239:13;3231:162;;;3307:4;3363:13;;;3359:22;;3353:29;3335:11;;;3331:20;;3324:59;3260:12;3231:162;;;3235:3;3438:1;3431:4;3422:6;3417:3;3413:16;3409:27;3402:38;3501:4;3494:2;3490:7;3485:2;3477:6;3473:15;3469:29;3464:3;3460:39;3456:50;3449:57;;;3090:422;;;;:::o;3517:377::-;3710:2;3699:9;3692:21;3673:4;3736:44;3776:2;3765:9;3761:18;3753:6;3736:44;:::i;:::-;3828:9;3820:6;3816:22;3811:2;3800:9;3796:18;3789:50;3856:32;3881:6;3873;3856:32;:::i;:::-;3848:40;3517:377;-1:-1:-1;;;;;3517:377:181:o;4240:474::-;4461:2;4450:9;4443:21;4424:4;4487:44;4527:2;4516:9;4512:18;4504:6;4487:44;:::i;:::-;4579:9;4571:6;4567:22;4562:2;4551:9;4547:18;4540:50;4607:32;4632:6;4624;4607:32;:::i;:::-;4599:40;;;4704:1;4700;4695:3;4691:11;4687:19;4679:6;4675:32;4670:2;4659:9;4655:18;4648:60;4240:474;;;;;;:::o;5051:314::-;5226:2;5215:9;5208:21;5189:4;5246:44;5286:2;5275:9;5271:18;5263:6;5246:44;:::i;:::-;5238:52;;5355:1;5351;5346:3;5342:11;5338:19;5330:6;5326:32;5321:2;5310:9;5306:18;5299:60;5051:314;;;;;:::o;5370:225::-;5437:9;;;5458:11;;;5455:134;;;5511:10;5506:3;5502:20;5499:1;5492:31;5546:4;5543:1;5536:15;5574:4;5571:1;5564:15;5935:217;6082:2;6071:9;6064:21;6045:4;6102:44;6142:2;6131:9;6127:18;6119:6;6102:44;:::i;6157:385::-;-1:-1:-1;;;;;6360:32:181;;6342:51;;6429:2;6424;6409:18;;6402:30;;;-1:-1:-1;;6449:44:181;;6474:18;;6466:6;6449:44;:::i;:::-;6441:52;;6529:6;6524:2;6513:9;6509:18;6502:34;6157:385;;;;;;:::o;6547:184::-;6617:6;6670:2;6658:9;6649:7;6645:23;6641:32;6638:52;;;6686:1;6683;6676:12;6638:52;-1:-1:-1;6709:16:181;;6547:184;-1:-1:-1;6547:184:181:o;7607:297::-;7725:12;;7772:4;7761:16;;;7755:23;;7725:12;7790:16;;7787:111;;;7884:1;7880:6;7870;7864:4;7860:17;7857:1;7853:25;7849:38;7842:5;7838:50;7829:59;;7787:111;;7607:297;;;:::o;9750:251::-;9820:6;9873:2;9861:9;9852:7;9848:23;9844:32;9841:52;;;9889:1;9886;9879:12;9841:52;9921:9;9915:16;9940:31;9965:5;9940:31;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"944800","executionCost":"infinite","totalCost":"infinite"},"external":{"AMB()":"infinite","DOMAIN()":"infinite","MIRROR_CHAIN_ID()":"infinite","MIRROR_DOMAIN()":"infinite","ROOT_MANAGER()":"infinite","acceptProposedOwner()":"63859","delay()":"281","executeSignatures(bytes,bytes)":"infinite","mirrorConnector()":"2359","owner()":"2376","processMessage(bytes)":"infinite","proposeNewOwner(address)":"infinite","proposed()":"2375","proposedTimestamp()":"2327","renounceOwnership()":"66021","renounced()":"2374","sendMessage(bytes,bytes)":"infinite","setGasCap(uint256)":"27953","setMirrorConnector(address)":"infinite","verifySender(address)":"infinite"},"internal":{"_processMessage(bytes memory)":"infinite","_sendMessage(bytes memory,bytes memory)":"infinite","_verifySender(address)":"infinite"}},"methodIdentifiers":{"AMB()":"d69f9d61","DOMAIN()":"52a9674b","MIRROR_CHAIN_ID()":"c8a4d690","MIRROR_DOMAIN()":"14168416","ROOT_MANAGER()":"5f61e3ec","acceptProposedOwner()":"c5b350df","delay()":"6a42b8f8","executeSignatures(bytes,bytes)":"3f7658fd","mirrorConnector()":"cc394283","owner()":"8da5cb5b","processMessage(bytes)":"4ff746f6","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","renounceOwnership()":"715018a6","renounced()":"d232c220","sendMessage(bytes,bytes)":"48e6fa23","setGasCap(uint256)":"7850b020","setMirrorConnector(address)":"5bd11efc","verifySender(address)":"db1b7659"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_mirrorDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_amb\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rootManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_mirrorChainId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Connector__processMessage_notUsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_previous\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"GasCapUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"MirrorConnectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"mirrorDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"amb\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mirrorConnector\",\"type\":\"address\"}],\"name\":\"NewConnector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROOT_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"executeSignatures\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"}],\"name\":\"setGasCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"}],\"name\":\"setMirrorConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"processMessage(bytes)\":{\"details\":\"This is called by AMBs to process messages originating from mirror connector\"},\"sendMessage(bytes,bytes)\":{\"details\":\"This is called by the root manager *only* on mainnet to propagate the aggregate root\"}},\"version\":1},\"userdoc\":{\"events\":{\"GasCapUpdated(uint256,uint256)\":{\"notice\":\"Emitted when admin updates the gas cap\"},\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"}},\"kind\":\"user\",\"methods\":{\"AMB()\":{\"notice\":\"Address of the AMB on this domain.\"},\"DOMAIN()\":{\"notice\":\"The domain of this Messaging (i.e. Connector) contract.\"},\"MIRROR_DOMAIN()\":{\"notice\":\"The domain of the corresponding messaging (i.e. Connector) contract.\"},\"ROOT_MANAGER()\":{\"notice\":\"RootManager contract address.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"mirrorConnector()\":{\"notice\":\"Connector on L2 for L1 connectors, and vice versa.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"processMessage(bytes)\":{\"notice\":\"Processes a message received by an AMB\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"sendMessage(bytes,bytes)\":{\"notice\":\"Sends a message over the amb\"},\"setMirrorConnector(address)\":{\"notice\":\"Sets the address of the l2Connector for this domain\"},\"verifySender(address)\":{\"notice\":\"Checks the cross domain sender for a given address\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/gnosis/GnosisHubConnector.sol\":\"GnosisHubConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/Connector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IConnector} from \\\"../interfaces/IConnector.sol\\\";\\n\\n/**\\n * @title Connector\\n * @author Connext Labs, Inc.\\n * @notice This contract has the messaging interface functions used by all connectors.\\n *\\n * @dev This contract stores information about mirror connectors, but can be used as a\\n * base for contracts that do not have a mirror (i.e. the connector handling messaging on\\n * mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\\n * will be empty\\n *\\n * @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\\n * or `mirrorGas`\\n */\\nabstract contract Connector is ProposedOwnable, IConnector {\\n  // ========== Custom Errors ===========\\n\\n  error Connector__processMessage_notUsed();\\n\\n  // ============ Events ============\\n\\n  event NewConnector(\\n    uint32 indexed domain,\\n    uint32 indexed mirrorDomain,\\n    address amb,\\n    address rootManager,\\n    address mirrorConnector\\n  );\\n\\n  event MirrorConnectorUpdated(address previous, address current);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The domain of this Messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable DOMAIN;\\n\\n  /**\\n   * @notice Address of the AMB on this domain.\\n   */\\n  address public immutable AMB;\\n\\n  /**\\n   * @notice RootManager contract address.\\n   */\\n  address public immutable ROOT_MANAGER;\\n\\n  /**\\n   * @notice The domain of the corresponding messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable MIRROR_DOMAIN;\\n\\n  /**\\n   * @notice Connector on L2 for L1 connectors, and vice versa.\\n   */\\n  address public mirrorConnector;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered AMB\\n   */\\n  modifier onlyAMB() {\\n    require(msg.sender == AMB, \\\"!AMB\\\");\\n    _;\\n  }\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered ROOT_MANAGER\\n   */\\n  modifier onlyRootManager() {\\n    // NOTE: RootManager will be zero address for spoke connectors.\\n    // Only root manager can dispatch a message to spokes/L2s via the hub connector.\\n    require(msg.sender == ROOT_MANAGER, \\\"!rootManager\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) ProposedOwnable() {\\n    // set the owner\\n    _setOwner(msg.sender);\\n\\n    // sanity checks on values\\n    require(_domain != 0, \\\"empty domain\\\");\\n    require(_rootManager != address(0), \\\"empty rootManager\\\");\\n    // see note at top of contract on why the mirror values are not sanity checked\\n\\n    // set immutables\\n    DOMAIN = _domain;\\n    AMB = _amb;\\n    ROOT_MANAGER = _rootManager;\\n    MIRROR_DOMAIN = _mirrorDomain;\\n    // set mutables if defined\\n    if (_mirrorConnector != address(0)) {\\n      _setMirrorConnector(_mirrorConnector);\\n    }\\n\\n    emit NewConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector);\\n  }\\n\\n  // ============ Receivable ============\\n  /**\\n   * @notice Connectors may need to receive native asset to handle fees when sending a\\n   * message\\n   */\\n  receive() external payable {}\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Sets the address of the l2Connector for this domain\\n   */\\n  function setMirrorConnector(address _mirrorConnector) public onlyOwner {\\n    _setMirrorConnector(_mirrorConnector);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice Processes a message received by an AMB\\n   * @dev This is called by AMBs to process messages originating from mirror connector\\n   */\\n  function processMessage(bytes memory _data) external virtual onlyAMB {\\n    _processMessage(_data);\\n    emit MessageProcessed(_data, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Checks the cross domain sender for a given address\\n   */\\n  function verifySender(address _expected) external returns (bool) {\\n    return _verifySender(_expected);\\n  }\\n\\n  // ============ Virtual Functions ============\\n\\n  /**\\n   * @notice This function is used by the Connext contract on the l2 domain to send a message to the\\n   * l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\\n   * @param _data The contents of the message\\n   * @param _encodedData Data used to send the message; specific to connector\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal virtual;\\n\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(\\n    bytes memory /* _data */\\n  ) internal virtual {\\n    // By default, reverts. This is to ensure the call path is not used unless this function is\\n    // overridden by the inheriting class\\n    revert Connector__processMessage_notUsed();\\n  }\\n\\n  /**\\n   * @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\\n   * is the expected address.\\n   * @dev Should be overridden by the implementing Connector contract.\\n   */\\n  function _verifySender(address _expected) internal virtual returns (bool);\\n\\n  // ============ Private Functions ============\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal virtual {\\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\\n    mirrorConnector = _mirrorConnector;\\n  }\\n}\\n\",\"keccak256\":\"0x08d4077a1b5caf9f46491206064bb24bee467dd741b42fed3d30a608eea83368\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/GasCap.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\n\\nabstract contract GasCap is ProposedOwnable {\\n  // ============ Storage ============\\n  /**\\n   * @notice The gnosis amb requires destination gas to be specified on the origin.\\n   * The gas used will be passed in by the relayer to allow for real-time estimates,\\n   * but will be capped at the admin-set cap.\\n   */\\n  uint256 gasCap;\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted when admin updates the gas cap\\n   * @param _previous The starting value\\n   * @param _updated The final value\\n   */\\n  event GasCapUpdated(uint256 _previous, uint256 _updated);\\n\\n  // ============ Constructor ============\\n  constructor(uint256 _gasCap) {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Admin Fns ============\\n  function setGasCap(uint256 _gasCap) public onlyOwner {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Internal Fns ============\\n\\n  /**\\n   * @notice Used (by admin) to update the gas cap\\n   * @param _gasCap The new value\\n   */\\n  function _setGasCap(uint256 _gasCap) internal {\\n    emit GasCapUpdated(gasCap, _gasCap);\\n    gasCap = _gasCap;\\n  }\\n\\n  /**\\n   * @notice Used to get the gas to use. Will be the original value IFF it\\n   * is less than the cap\\n   * @param _gas The proposed gas value\\n   */\\n  function _getGas(uint256 _gas) internal view returns (uint256) {\\n    if (_gas > gasCap) {\\n      _gas = gasCap;\\n    }\\n    return _gas;\\n  }\\n}\\n\",\"keccak256\":\"0xb8b52a3372f08490c918d1f490ad80764d54bd62d1638e4d17a5b552efe6587d\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/HubConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Connector} from \\\"./Connector.sol\\\";\\n\\n/**\\n * @title HubConnector\\n * @author Connext Labs, Inc.\\n * @notice This contract implements the messaging functions needed on the hub-side of a given AMB.\\n * The HubConnector has a limited set of functionality compared to the SpokeConnector, namely that\\n * it contains no logic to store or prove messages.\\n *\\n * @dev This contract should be deployed on the hub-side of an AMB (i.e. on L1), and contracts\\n * which extend this should implement the virtual functions defined in the BaseConnector class\\n */\\nabstract contract HubConnector is Connector {\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) Connector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector) {}\\n\\n  // ============ Public fns ============\\n  /**\\n   * @notice Sends a message over the amb\\n   * @dev This is called by the root manager *only* on mainnet to propagate the aggregate root\\n   */\\n  function sendMessage(bytes memory _data, bytes memory _encodedData) external payable onlyRootManager {\\n    _sendMessage(_data, _encodedData);\\n    emit MessageSent(_data, _encodedData, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0xc35621419ca872ed0550b0943a577b39942f3d2c9b54de008fee382d5ad290e4\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/gnosis/GnosisBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {GnosisAmb} from \\\"../../interfaces/ambs/GnosisAmb.sol\\\";\\n\\nimport {GasCap} from \\\"../GasCap.sol\\\";\\n\\nabstract contract GnosisBase is GasCap {\\n  // ============ Storage ============\\n  uint256 public immutable MIRROR_CHAIN_ID;\\n\\n  // ============ Constructor ============\\n  constructor(uint256 _gasCap, uint256 _mirrorChainId) GasCap(_gasCap) {\\n    MIRROR_CHAIN_ID = _mirrorChainId;\\n  }\\n\\n  // ============ Private fns ============\\n\\n  /**\\n   * @dev Asserts the sender of a cross domain message\\n   */\\n  function _verifySender(\\n    address _amb,\\n    address _expected,\\n    uint256 _sourceChain\\n  ) internal view returns (bool) {\\n    require(msg.sender == _amb, \\\"!bridge\\\");\\n    require(_sourceChain == MIRROR_CHAIN_ID, \\\"!source\\\");\\n    return GnosisAmb(_amb).messageSender() == _expected;\\n  }\\n\\n  /**\\n   * @notice Using Gnosis AMB, the gas is provided to `sendMessage` as an encoded uint\\n   */\\n  function _getGasFromEncoded(bytes memory _encodedData) internal view returns (uint256 _gas) {\\n    // Should include gssas info in specialized calldata\\n    require(_encodedData.length == 32, \\\"!data length\\\");\\n\\n    // Get the gas, if it is more than the cap use the cap\\n    _gas = _getGas(abi.decode(_encodedData, (uint256)));\\n  }\\n}\\n\",\"keccak256\":\"0xa7385485ed85be588ec7bcc6de033ecec9b2efa18aa2e810d5edcd1f4fbe4572\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/gnosis/GnosisHubConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IRootManager} from \\\"../../interfaces/IRootManager.sol\\\";\\nimport {GnosisAmb} from \\\"../../interfaces/ambs/GnosisAmb.sol\\\";\\n\\nimport {Connector} from \\\"../Connector.sol\\\";\\nimport {HubConnector} from \\\"../HubConnector.sol\\\";\\n\\nimport {GnosisBase} from \\\"./GnosisBase.sol\\\";\\n\\ncontract GnosisHubConnector is HubConnector, GnosisBase {\\n  // ============ Constructor ============\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    uint256 _gasCap,\\n    uint256 _mirrorChainId\\n  ) HubConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector) GnosisBase(_gasCap, _mirrorChainId) {}\\n\\n  // https://docs.gnosischain.com/bridges/tutorials/using-amb\\n  function executeSignatures(bytes memory _data, bytes memory _signatures) external {\\n    GnosisAmb(AMB).executeSignatures(_data, _signatures);\\n  }\\n\\n  // ============ Private fns ============\\n  /**\\n   * @dev Asserts the sender of a cross domain message\\n   */\\n  function _verifySender(address _expected) internal view override returns (bool) {\\n    return _verifySender(AMB, _expected, GnosisAmb(AMB).destinationChainId());\\n  }\\n\\n  /**\\n   * @dev Messaging uses this function to send data to l2 via amb\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\\n    // Should always be dispatching the aggregate root\\n    require(_data.length == 32, \\\"!length\\\");\\n\\n    // send message via AMB, should call \\\"processMessage\\\" which will update aggregate root\\n    GnosisAmb(AMB).requireToPassMessage(\\n      mirrorConnector,\\n      abi.encodeWithSelector(Connector.processMessage.selector, _data),\\n      _getGasFromEncoded(_encodedData)\\n    );\\n  }\\n\\n  /**\\n   * @dev L2 connector calls this function to pass down latest outbound root\\n   */\\n  function _processMessage(bytes memory _data) internal override {\\n    // ensure the l1 connector sent the message\\n    require(_verifySender(mirrorConnector), \\\"!l2Connector\\\");\\n    // ensure it is headed to this domain\\n    require(GnosisAmb(AMB).sourceChainId() == block.chainid, \\\"!sourceChain\\\");\\n    // get the data (should be the outbound root)\\n    require(_data.length == 32, \\\"!length\\\");\\n    // update the root on the root manager\\n    IRootManager(ROOT_MANAGER).aggregate(MIRROR_DOMAIN, bytes32(_data));\\n  }\\n}\\n\",\"keccak256\":\"0x915bff740024874aacad65677a6839f7d8a87c1240a2dba3a7b29a91696faf0b\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IRootManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\ninterface IRootManager {\\n  /**\\n   * @notice This is called by relayers to generate + send the mixed root from mainnet via AMB to\\n   * spoke domains.\\n   * @dev This must read information for the root from the registered AMBs.\\n   */\\n  function propagate(\\n    address[] calldata _connectors,\\n    uint256[] calldata _fees,\\n    bytes[] memory _encodedData\\n  ) external payable;\\n\\n  /**\\n   * @notice Called by the connectors for various domains on the hub to aggregate their latest\\n   * inbound root.\\n   * @dev This must read information for the root from the registered AMBs\\n   */\\n  function aggregate(uint32 _domain, bytes32 _outbound) external;\\n}\\n\",\"keccak256\":\"0xa895dfaa4baad37a636e7e7e7da72a0a4badfd2d3d8256f975e5101cd5a98236\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/ambs/GnosisAmb.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// Taken from: https://github.com/omni/tokenbridge-contracts/blob/master/contracts/interfaces/IAMB.sol\\ninterface GnosisAmb {\\n  function messageSender() external view returns (address);\\n\\n  function maxGasPerTx() external view returns (uint256);\\n\\n  function transactionHash() external view returns (bytes32);\\n\\n  function messageId() external view returns (bytes32);\\n\\n  function messageSourceChainId() external view returns (bytes32);\\n\\n  function messageCallStatus(bytes32 _messageId) external view returns (bool);\\n\\n  function failedMessageDataHash(bytes32 _messageId) external view returns (bytes32);\\n\\n  function failedMessageReceiver(bytes32 _messageId) external view returns (address);\\n\\n  function failedMessageSender(bytes32 _messageId) external view returns (address);\\n\\n  function requireToPassMessage(\\n    address _contract,\\n    bytes memory _data,\\n    uint256 _gas\\n  ) external returns (bytes32);\\n\\n  function requireToConfirmMessage(\\n    address _contract,\\n    bytes memory _data,\\n    uint256 _gas\\n  ) external returns (bytes32);\\n\\n  function requireToGetInformation(bytes32 _requestSelector, bytes memory _data) external returns (bytes32);\\n\\n  function sourceChainId() external view returns (uint256);\\n\\n  function destinationChainId() external view returns (uint256);\\n\\n  function executeSignatures(bytes memory _data, bytes memory _signatures) external;\\n\\n  function safeExecuteSignaturesWithAutoGasLimit(bytes memory _data, bytes memory _signatures) external;\\n}\\n\",\"keccak256\":\"0x343a551705ba02bb1aa83553c118135beb42a892ebe78d6f5f575891f6d17d9e\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/gnosis/GnosisHubConnector.sol:GnosisHubConnector","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/gnosis/GnosisHubConnector.sol:GnosisHubConnector","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/gnosis/GnosisHubConnector.sol:GnosisHubConnector","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39051,"contract":"contracts/messaging/connectors/gnosis/GnosisHubConnector.sol:GnosisHubConnector","label":"mirrorConnector","offset":0,"slot":"3","type":"t_address"},{"astId":39301,"contract":"contracts/messaging/connectors/gnosis/GnosisHubConnector.sol:GnosisHubConnector","label":"gasCap","offset":0,"slot":"4","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"GasCapUpdated(uint256,uint256)":{"notice":"Emitted when admin updates the gas cap"},"MessageProcessed(bytes,address)":{"notice":"Emitted whenever a message is successfully received over an AMB"},"MessageSent(bytes,bytes,address)":{"notice":"Emitted whenever a message is successfully sent over an AMB"}},"kind":"user","methods":{"AMB()":{"notice":"Address of the AMB on this domain."},"DOMAIN()":{"notice":"The domain of this Messaging (i.e. Connector) contract."},"MIRROR_DOMAIN()":{"notice":"The domain of the corresponding messaging (i.e. Connector) contract."},"ROOT_MANAGER()":{"notice":"RootManager contract address."},"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"mirrorConnector()":{"notice":"Connector on L2 for L1 connectors, and vice versa."},"owner()":{"notice":"Returns the address of the current owner."},"processMessage(bytes)":{"notice":"Processes a message received by an AMB"},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"sendMessage(bytes,bytes)":{"notice":"Sends a message over the amb"},"setMirrorConnector(address)":{"notice":"Sets the address of the l2Connector for this domain"},"verifySender(address)":{"notice":"Checks the cross domain sender for a given address"}},"version":1}}},"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol":{"GnosisSpokeConnector":{"abi":[{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"uint32","name":"_mirrorDomain","type":"uint32"},{"internalType":"address","name":"_amb","type":"address"},{"internalType":"address","name":"_rootManager","type":"address"},{"internalType":"address","name":"_mirrorConnector","type":"address"},{"internalType":"uint256","name":"_processGas","type":"uint256"},{"internalType":"uint256","name":"_reserveGas","type":"uint256"},{"internalType":"uint256","name":"_delayBlocks","type":"uint256"},{"internalType":"address","name":"_merkle","type":"address"},{"internalType":"address","name":"_watcherManager","type":"address"},{"internalType":"uint256","name":"_gasCap","type":"uint256"},{"internalType":"uint256","name":"_mirrorChainId","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Connector__processMessage_notUsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"inputs":[],"name":"RateLimited__rateLimited_messageSendRateExceeded","type":"error"},{"inputs":[],"name":"TypedMemView__index_indexMoreThan32Bytes","type":"error"},{"inputs":[{"internalType":"uint256","name":"loc","type":"uint256"},{"internalType":"uint256","name":"len","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"slice","type":"uint256"}],"name":"TypedMemView__index_overrun","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_identityOOG","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_invalidPointer","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_nullPointer","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootVerified","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"updated","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"DelayBlocksUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"message","type":"bytes"}],"name":"Dispatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"GasCapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"aggregateRoot","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"aggregateIndex","type":"uint256"}],"name":"MessageProven","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"encodedData","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"current","type":"address"}],"name":"MirrorConnectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"mirrorDomain","type":"uint32"},{"indexed":false,"internalType":"address","name":"amb","type":"address"},{"indexed":false,"internalType":"address","name":"rootManager","type":"address"},{"indexed":false,"internalType":"address","name":"mirrorConnector","type":"address"}],"name":"NewConnector","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"returnData","type":"bytes"}],"name":"Process","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updater","type":"address"},{"indexed":false,"internalType":"uint256","name":"newRateLimit","type":"uint256"}],"name":"SendRateLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"SenderAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"SenderRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"watcherManager","type":"address"}],"name":"WatcherManagerChanged","type":"event"},{"inputs":[],"name":"AMB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MERKLE","outputs":[{"internalType":"contract MerkleTreeManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIRROR_CHAIN_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIRROR_DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROCESS_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"addSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlistedSenders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_destinationDomain","type":"uint32"},{"internalType":"bytes32","name":"_recipientAddress","type":"bytes32"},{"internalType":"bytes","name":"_messageBody","type":"bytes"}],"name":"dispatch","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"home","outputs":[{"internalType":"contract IOutbox","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_potentialReplica","type":"address"}],"name":"isReplica","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"localDomain","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"messages","outputs":[{"internalType":"enum SpokeConnector.MessageStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mirrorConnector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"nonces","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"outboundRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"pendingAggregateRoots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"processMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32[32]","name":"path","type":"bytes32[32]"},{"internalType":"uint256","name":"index","type":"uint256"}],"internalType":"struct SpokeConnector.Proof[]","name":"_proofs","type":"tuple[]"},{"internalType":"bytes32","name":"_aggregateRoot","type":"bytes32"},{"internalType":"bytes32[32]","name":"_aggregatePath","type":"bytes32[32]"},{"internalType":"uint256","name":"_aggregateIndex","type":"uint256"}],"name":"proveAndProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"provenAggregateRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"provenMessageRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rateLimitBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_fraudulentRoot","type":"bytes32"}],"name":"removePendingAggregateRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"removeSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_encodedData","type":"bytes"}],"name":"send","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"sentMessageRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_delayBlocks","type":"uint256"}],"name":"setDelayBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gasCap","type":"uint256"}],"name":"setGasCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mirrorConnector","type":"address"}],"name":"setMirrorConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rateLimit","type":"uint256"}],"name":"setRateLimitBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_watcherManager","type":"address"}],"name":"setWatcherManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_expected","type":"address"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"watcherManager","outputs":[{"internalType":"contract WatcherManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"addSender(address)":{"details":"Only allowlisted routers (senders) can call `dispatch`."},"dispatch(uint32,bytes32,bytes)":{"details":"The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \"hub\"), it will be combined into a single aggregate root by RootManager (along with outbound roots from other chains). This aggregate root will be redistributed to all destination chains. NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions"},"home()":{"details":"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad","returns":{"_0":"The local inbox contract"}},"isReplica(address)":{"returns":{"_0":"True if _potentialReplica is an enrolled Replica"}},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"processMessage(bytes)":{"details":"This is called by AMBs to process messages originating from mirror connector"},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":{"details":"Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.Intended to be called by the relayer at specific intervals during runtime.Will record a calculated root as having been proven if we've already proven that it was included in the aggregateRoot.","params":{"_aggregateIndex":"Index of the inbound root in the aggregator's merkle tree in the hub.","_aggregatePath":"Merkle path of inclusion for the inbound root.","_aggregateRoot":"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.","_proofs":"Batch of Proofs containing messages for proving/processing."}},"removePendingAggregateRoot(bytes32)":{"details":"This method is required for handling fraud cases in the current construction.","params":{"_fraudulentRoot":"Target fraudulent root that should be erased from the `pendingAggregateRoots` mapping."}},"removeSender(address)":{"details":"Only allowlisted routers (senders) can call `dispatch`."},"setRateLimitBlocks(uint256)":{"details":"Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)","params":{"_rateLimit":"The number of blocks require between sending messages. If set to 0, rate limiting for this spoke connector will be disabled."}},"withdrawFunds(address)":{"details":"Withdraws the entire balance of the contract.","params":{"_to":"The recipient of the funds withdrawn"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_10599":{"entryPoint":null,"id":10599,"parameterSlots":0,"returnSlots":0},"@_10699":{"entryPoint":null,"id":10699,"parameterSlots":0,"returnSlots":0},"@_38838":{"entryPoint":null,"id":38838,"parameterSlots":1,"returnSlots":0},"@_39152":{"entryPoint":null,"id":39152,"parameterSlots":5,"returnSlots":0},"@_39257":{"entryPoint":null,"id":39257,"parameterSlots":0,"returnSlots":0},"@_39318":{"entryPoint":null,"id":39318,"parameterSlots":1,"returnSlots":0},"@_39687":{"entryPoint":null,"id":39687,"parameterSlots":10,"returnSlots":0},"@_41249":{"entryPoint":null,"id":41249,"parameterSlots":2,"returnSlots":0},"@_41537":{"entryPoint":null,"id":41537,"parameterSlots":12,"returnSlots":0},"@_setGasCap_39346":{"entryPoint":919,"id":39346,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":814,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":713,"id":49908,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":1010,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_addresst_uint256t_uint256_fromMemory":{"entryPoint":1034,"id":null,"parameterSlots":2,"returnSlots":12},"abi_decode_uint32_fromMemory":{"entryPoint":984,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4063:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"73:108:181","statements":[{"nodeType":"YulAssignment","src":"83:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"98:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"92:5:181"},"nodeType":"YulFunctionCall","src":"92:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"83:5:181"}]},{"body":{"nodeType":"YulBlock","src":"159:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"168:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"171:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"161:6:181"},"nodeType":"YulFunctionCall","src":"161:12:181"},"nodeType":"YulExpressionStatement","src":"161:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"127:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"138:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"145:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"134:3:181"},"nodeType":"YulFunctionCall","src":"134:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"124:2:181"},"nodeType":"YulFunctionCall","src":"124:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"117:6:181"},"nodeType":"YulFunctionCall","src":"117:41:181"},"nodeType":"YulIf","src":"114:61:181"}]},"name":"abi_decode_uint32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"52:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"63:5:181","type":""}],"src":"14:167:181"},{"body":{"nodeType":"YulBlock","src":"246:117:181","statements":[{"nodeType":"YulAssignment","src":"256:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"271:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"265:5:181"},"nodeType":"YulFunctionCall","src":"265:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"256:5:181"}]},{"body":{"nodeType":"YulBlock","src":"341:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"350:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"353:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"343:6:181"},"nodeType":"YulFunctionCall","src":"343:12:181"},"nodeType":"YulExpressionStatement","src":"343:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"300:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"311:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"326:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"331:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"322:3:181"},"nodeType":"YulFunctionCall","src":"322:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"335:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"318:3:181"},"nodeType":"YulFunctionCall","src":"318:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"307:3:181"},"nodeType":"YulFunctionCall","src":"307:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"297:2:181"},"nodeType":"YulFunctionCall","src":"297:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"290:6:181"},"nodeType":"YulFunctionCall","src":"290:50:181"},"nodeType":"YulIf","src":"287:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"225:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"236:5:181","type":""}],"src":"186:177:181"},{"body":{"nodeType":"YulBlock","src":"636:764:181","statements":[{"body":{"nodeType":"YulBlock","src":"683:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"692:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"695:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"685:6:181"},"nodeType":"YulFunctionCall","src":"685:12:181"},"nodeType":"YulExpressionStatement","src":"685:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"657:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"666:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"653:3:181"},"nodeType":"YulFunctionCall","src":"653:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"678:3:181","type":"","value":"384"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"649:3:181"},"nodeType":"YulFunctionCall","src":"649:33:181"},"nodeType":"YulIf","src":"646:53:181"},{"nodeType":"YulAssignment","src":"708:49:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"747:9:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"718:28:181"},"nodeType":"YulFunctionCall","src":"718:39:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"708:6:181"}]},{"nodeType":"YulAssignment","src":"766:58:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"809:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"820:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"805:3:181"},"nodeType":"YulFunctionCall","src":"805:18:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"776:28:181"},"nodeType":"YulFunctionCall","src":"776:48:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"766:6:181"}]},{"nodeType":"YulAssignment","src":"833:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"877:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"888:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"873:3:181"},"nodeType":"YulFunctionCall","src":"873:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"843:29:181"},"nodeType":"YulFunctionCall","src":"843:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"833:6:181"}]},{"nodeType":"YulAssignment","src":"901:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"945:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"956:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"941:3:181"},"nodeType":"YulFunctionCall","src":"941:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"911:29:181"},"nodeType":"YulFunctionCall","src":"911:49:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"901:6:181"}]},{"nodeType":"YulAssignment","src":"969:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1013:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1024:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1009:3:181"},"nodeType":"YulFunctionCall","src":"1009:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"979:29:181"},"nodeType":"YulFunctionCall","src":"979:50:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"969:6:181"}]},{"nodeType":"YulAssignment","src":"1038:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1058:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1069:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1054:3:181"},"nodeType":"YulFunctionCall","src":"1054:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1048:5:181"},"nodeType":"YulFunctionCall","src":"1048:26:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"1038:6:181"}]},{"nodeType":"YulAssignment","src":"1083:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1103:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1114:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1099:3:181"},"nodeType":"YulFunctionCall","src":"1099:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1093:5:181"},"nodeType":"YulFunctionCall","src":"1093:26:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"1083:6:181"}]},{"nodeType":"YulAssignment","src":"1128:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1148:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1159:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1144:3:181"},"nodeType":"YulFunctionCall","src":"1144:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1138:5:181"},"nodeType":"YulFunctionCall","src":"1138:26:181"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"1128:6:181"}]},{"nodeType":"YulAssignment","src":"1173:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1217:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1228:3:181","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1213:3:181"},"nodeType":"YulFunctionCall","src":"1213:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"1183:29:181"},"nodeType":"YulFunctionCall","src":"1183:50:181"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"1173:6:181"}]},{"nodeType":"YulAssignment","src":"1242:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1286:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1297:3:181","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1282:3:181"},"nodeType":"YulFunctionCall","src":"1282:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"1252:29:181"},"nodeType":"YulFunctionCall","src":"1252:50:181"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"1242:6:181"}]},{"nodeType":"YulAssignment","src":"1311:37:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1332:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1343:3:181","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1328:3:181"},"nodeType":"YulFunctionCall","src":"1328:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1322:5:181"},"nodeType":"YulFunctionCall","src":"1322:26:181"},"variableNames":[{"name":"value10","nodeType":"YulIdentifier","src":"1311:7:181"}]},{"nodeType":"YulAssignment","src":"1357:37:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1378:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1389:3:181","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1374:3:181"},"nodeType":"YulFunctionCall","src":"1374:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1368:5:181"},"nodeType":"YulFunctionCall","src":"1368:26:181"},"variableNames":[{"name":"value11","nodeType":"YulIdentifier","src":"1357:7:181"}]}]},"name":"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_addresst_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"512:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"523:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"535:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"543:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"551:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"559:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"567:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"575:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"583:6:181","type":""},{"name":"value7","nodeType":"YulTypedName","src":"591:6:181","type":""},{"name":"value8","nodeType":"YulTypedName","src":"599:6:181","type":""},{"name":"value9","nodeType":"YulTypedName","src":"607:6:181","type":""},{"name":"value10","nodeType":"YulTypedName","src":"615:7:181","type":""},{"name":"value11","nodeType":"YulTypedName","src":"624:7:181","type":""}],"src":"368:1032:181"},{"body":{"nodeType":"YulBlock","src":"1579:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1596:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1607:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1589:6:181"},"nodeType":"YulFunctionCall","src":"1589:21:181"},"nodeType":"YulExpressionStatement","src":"1589:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1630:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1641:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1626:3:181"},"nodeType":"YulFunctionCall","src":"1626:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1646:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1619:6:181"},"nodeType":"YulFunctionCall","src":"1619:30:181"},"nodeType":"YulExpressionStatement","src":"1619:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1669:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1680:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1665:3:181"},"nodeType":"YulFunctionCall","src":"1665:18:181"},{"hexValue":"656d70747920646f6d61696e","kind":"string","nodeType":"YulLiteral","src":"1685:14:181","type":"","value":"empty domain"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1658:6:181"},"nodeType":"YulFunctionCall","src":"1658:42:181"},"nodeType":"YulExpressionStatement","src":"1658:42:181"},{"nodeType":"YulAssignment","src":"1709:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1721:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1732:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1717:3:181"},"nodeType":"YulFunctionCall","src":"1717:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1709:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1556:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1570:4:181","type":""}],"src":"1405:336:181"},{"body":{"nodeType":"YulBlock","src":"1920:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1937:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1948:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1930:6:181"},"nodeType":"YulFunctionCall","src":"1930:21:181"},"nodeType":"YulExpressionStatement","src":"1930:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1971:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1982:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1967:3:181"},"nodeType":"YulFunctionCall","src":"1967:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1987:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1960:6:181"},"nodeType":"YulFunctionCall","src":"1960:30:181"},"nodeType":"YulExpressionStatement","src":"1960:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2010:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2021:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2006:3:181"},"nodeType":"YulFunctionCall","src":"2006:18:181"},{"hexValue":"656d70747920726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"2026:19:181","type":"","value":"empty rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1999:6:181"},"nodeType":"YulFunctionCall","src":"1999:47:181"},"nodeType":"YulExpressionStatement","src":"1999:47:181"},{"nodeType":"YulAssignment","src":"2055:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2067:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2078:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2063:3:181"},"nodeType":"YulFunctionCall","src":"2063:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2055:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1897:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1911:4:181","type":""}],"src":"1746:341:181"},{"body":{"nodeType":"YulBlock","src":"2249:227:181","statements":[{"nodeType":"YulAssignment","src":"2259:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2271:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2282:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2267:3:181"},"nodeType":"YulFunctionCall","src":"2267:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2259:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"2294:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2312:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2317:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2308:3:181"},"nodeType":"YulFunctionCall","src":"2308:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2321:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2304:3:181"},"nodeType":"YulFunctionCall","src":"2304:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2298:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2339:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2354:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2362:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2350:3:181"},"nodeType":"YulFunctionCall","src":"2350:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2332:6:181"},"nodeType":"YulFunctionCall","src":"2332:34:181"},"nodeType":"YulExpressionStatement","src":"2332:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2386:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2397:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2382:3:181"},"nodeType":"YulFunctionCall","src":"2382:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2406:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2414:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2402:3:181"},"nodeType":"YulFunctionCall","src":"2402:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2375:6:181"},"nodeType":"YulFunctionCall","src":"2375:43:181"},"nodeType":"YulExpressionStatement","src":"2375:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2438:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2449:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2434:3:181"},"nodeType":"YulFunctionCall","src":"2434:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"2458:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2466:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2454:3:181"},"nodeType":"YulFunctionCall","src":"2454:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2427:6:181"},"nodeType":"YulFunctionCall","src":"2427:43:181"},"nodeType":"YulExpressionStatement","src":"2427:43:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2202:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2213:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2221:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2229:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2240:4:181","type":""}],"src":"2092:384:181"},{"body":{"nodeType":"YulBlock","src":"2655:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2672:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2683:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2665:6:181"},"nodeType":"YulFunctionCall","src":"2665:21:181"},"nodeType":"YulExpressionStatement","src":"2665:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2706:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2717:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2702:3:181"},"nodeType":"YulFunctionCall","src":"2702:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2722:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2695:6:181"},"nodeType":"YulFunctionCall","src":"2695:30:181"},"nodeType":"YulExpressionStatement","src":"2695:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2745:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2756:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2741:3:181"},"nodeType":"YulFunctionCall","src":"2741:18:181"},{"hexValue":"2170726f6365737320676173","kind":"string","nodeType":"YulLiteral","src":"2761:14:181","type":"","value":"!process gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2734:6:181"},"nodeType":"YulFunctionCall","src":"2734:42:181"},"nodeType":"YulExpressionStatement","src":"2734:42:181"},{"nodeType":"YulAssignment","src":"2785:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2797:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2808:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2793:3:181"},"nodeType":"YulFunctionCall","src":"2793:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2785:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2632:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2646:4:181","type":""}],"src":"2481:336:181"},{"body":{"nodeType":"YulBlock","src":"2996:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3013:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3024:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3006:6:181"},"nodeType":"YulFunctionCall","src":"3006:21:181"},"nodeType":"YulExpressionStatement","src":"3006:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3047:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3058:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3043:3:181"},"nodeType":"YulFunctionCall","src":"3043:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3063:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3036:6:181"},"nodeType":"YulFunctionCall","src":"3036:30:181"},"nodeType":"YulExpressionStatement","src":"3036:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3086:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3097:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3082:3:181"},"nodeType":"YulFunctionCall","src":"3082:18:181"},{"hexValue":"217265736572766520676173","kind":"string","nodeType":"YulLiteral","src":"3102:14:181","type":"","value":"!reserve gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3075:6:181"},"nodeType":"YulFunctionCall","src":"3075:42:181"},"nodeType":"YulExpressionStatement","src":"3075:42:181"},{"nodeType":"YulAssignment","src":"3126:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3138:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3149:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3134:3:181"},"nodeType":"YulFunctionCall","src":"3134:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3126:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2973:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2987:4:181","type":""}],"src":"2822:336:181"},{"body":{"nodeType":"YulBlock","src":"3337:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3354:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3365:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3347:6:181"},"nodeType":"YulFunctionCall","src":"3347:21:181"},"nodeType":"YulExpressionStatement","src":"3347:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3388:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3399:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3384:3:181"},"nodeType":"YulFunctionCall","src":"3384:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3404:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3377:6:181"},"nodeType":"YulFunctionCall","src":"3377:30:181"},"nodeType":"YulExpressionStatement","src":"3377:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3427:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3438:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3423:3:181"},"nodeType":"YulFunctionCall","src":"3423:18:181"},{"hexValue":"217a65726f206d65726b6c65","kind":"string","nodeType":"YulLiteral","src":"3443:14:181","type":"","value":"!zero merkle"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3416:6:181"},"nodeType":"YulFunctionCall","src":"3416:42:181"},"nodeType":"YulExpressionStatement","src":"3416:42:181"},{"nodeType":"YulAssignment","src":"3467:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3479:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3490:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3475:3:181"},"nodeType":"YulFunctionCall","src":"3475:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3467:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3314:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3328:4:181","type":""}],"src":"3163:336:181"},{"body":{"nodeType":"YulBlock","src":"3633:175:181","statements":[{"nodeType":"YulAssignment","src":"3643:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3655:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3666:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3651:3:181"},"nodeType":"YulFunctionCall","src":"3651:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3643:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"3678:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3696:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3701:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3692:3:181"},"nodeType":"YulFunctionCall","src":"3692:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3705:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3688:3:181"},"nodeType":"YulFunctionCall","src":"3688:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3682:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3723:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3738:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3746:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3734:3:181"},"nodeType":"YulFunctionCall","src":"3734:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3716:6:181"},"nodeType":"YulFunctionCall","src":"3716:34:181"},"nodeType":"YulExpressionStatement","src":"3716:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3770:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3781:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3766:3:181"},"nodeType":"YulFunctionCall","src":"3766:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3790:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3798:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3786:3:181"},"nodeType":"YulFunctionCall","src":"3786:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3759:6:181"},"nodeType":"YulFunctionCall","src":"3759:43:181"},"nodeType":"YulExpressionStatement","src":"3759:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3594:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3605:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3613:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3624:4:181","type":""}],"src":"3504:304:181"},{"body":{"nodeType":"YulBlock","src":"3942:119:181","statements":[{"nodeType":"YulAssignment","src":"3952:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3964:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3975:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3960:3:181"},"nodeType":"YulFunctionCall","src":"3960:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3952:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3994:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"4005:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3987:6:181"},"nodeType":"YulFunctionCall","src":"3987:25:181"},"nodeType":"YulExpressionStatement","src":"3987:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4032:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4043:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4028:3:181"},"nodeType":"YulFunctionCall","src":"4028:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"4048:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4021:6:181"},"nodeType":"YulFunctionCall","src":"4021:34:181"},"nodeType":"YulExpressionStatement","src":"4021:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3903:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3914:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3922:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3933:4:181","type":""}],"src":"3813:248:181"}]},"contents":"{\n    { }\n    function abi_decode_uint32_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_addresst_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11\n    {\n        if slt(sub(dataEnd, headStart), 384) { revert(0, 0) }\n        value0 := abi_decode_uint32_fromMemory(headStart)\n        value1 := abi_decode_uint32_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n        value4 := abi_decode_address_fromMemory(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n        value6 := mload(add(headStart, 192))\n        value7 := mload(add(headStart, 224))\n        value8 := abi_decode_address_fromMemory(add(headStart, 256))\n        value9 := abi_decode_address_fromMemory(add(headStart, 288))\n        value10 := mload(add(headStart, 320))\n        value11 := mload(add(headStart, 352))\n    }\n    function abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"empty domain\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"empty rootManager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!process gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!reserve gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!zero merkle\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"6101806040523480156200001257600080fd5b5060405162003de238038062003de283398101604081905262000035916200040a565b8181818e8e8e8e8e8e8e8e8e8e808a8a8a8a8a6200005333620002c9565b8463ffffffff166000036200009e5760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620000ea5760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b604482015260640162000095565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e052811615620001225762000122816200032e565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a350506003805460ff60a01b191690555050600480546001600160a01b0319166001600160a01b039390931692909217909155506001600755620cf84f8511620001f55760405162461bcd60e51b815260206004820152600c60248201526b2170726f636573732067617360a01b604482015260640162000095565b613a978411620002375760405162461bcd60e51b815260206004820152600c60248201526b21726573657276652067617360a01b604482015260640162000095565b6101208590526101408490526001600160a01b0382166200028a5760405162461bcd60e51b815260206004820152600c60248201526b217a65726f206d65726b6c6560a01b604482015260640162000095565b506001600160a01b03166101005260085550620002b09550869450506200039792505050565b506101605250620004d29b505050505050505050505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b60105460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1601055565b805163ffffffff81168114620003ed57600080fd5b919050565b80516001600160a01b0381168114620003ed57600080fd5b6000806000806000806000806000806000806101808d8f0312156200042e57600080fd5b620004398d620003d8565b9b506200044960208e01620003d8565b9a506200045960408e01620003f2565b99506200046960608e01620003f2565b98506200047960808e01620003f2565b975060a08d0151965060c08d0151955060e08d015194506200049f6101008e01620003f2565b9350620004b06101208e01620003f2565b92506101408d015191506101608d015190509295989b509295989b509295989b565b60805160a05160c05160e05161010051610120516101405161016051613841620005a1600039600081816108620152612cf00152600081816103400152611ebe01526000818161095d01528181611edf0152611f6c01526000818161075001528181610ada0152818161101a015261171e015260006102d00152600061055e01526000818161091301528181610c82015281816118c601528181611ae00152818161234501526123670152600081816104a50152818161068c015281816116c00152611dbe01526138416000f3fe6080604052600436106102b25760003560e01c80638456cb5911610175578063b95a2001116100dc578063d2a3cc7111610095578063d88beda21161006f578063d88beda21461094b578063db1b76591461097f578063e0fed0101461099f578063fa31de01146109bf57600080fd5b8063d2a3cc71146108e1578063d69f9d6114610901578063d7d317b31461093557600080fd5b8063b95a200114610808578063c5b350df1461083b578063c8a4d69014610850578063cc39428314610884578063d1851c92146108a4578063d232c220146108c257600080fd5b8063a01892a51161012e578063a01892a51461073e578063a792c29b14610772578063ad9c0c2e14610792578063b1f8100d146107a8578063b2f87643146107c8578063b697f531146107e857600080fd5b80638456cb59146106685780638d3638f41461067d5780638da5cb5b146106b057806398c9f2b9146106ce5780639d3117c7146106fe5780639fa92f9d1461072b57600080fd5b8063572386ca1161021957806365eaf11b116101d257806365eaf11b146105c857806368742da6146105dd5780636a42b8f8146105fd5780636b04a93314610613578063715018a6146106335780637850b0201461064857600080fd5b8063572386ca146104c7578063579c1618146104f75780635bd11efc1461050d5780635c975abb1461052d5780635f61e3ec1461054c5780636159ada11461059857600080fd5b80633cf52ffb1161026b5780633cf52ffb146104005780633f4ba83a146104155780634ff746f61461042a578063508a109b1461044a5780635190bc531461046a57806352a9674b1461049357600080fd5b806314168416146102be5780631eeaabea1461030c57806325e3beda1461032e5780632bb1ae7c146103705780632bbd59ca14610383578063301f07c3146103c057600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102f27f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b34801561031857600080fd5b5061032c6103273660046131bf565b6109ed565b005b34801561033a57600080fd5b506103627f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610303565b61032c61037e36600461327b565b610a97565b34801561038f57600080fd5b506103b361039e3660046131bf565b600f6020526000908152604090205460ff1681565b60405161030391906132c6565b3480156103cc57600080fd5b506103f06103db3660046131bf565b600a6020526000908152604090205460ff1681565b6040519015158152602001610303565b34801561040c57600080fd5b50600254610362565b34801561042157600080fd5b5061032c610c3a565b34801561043657600080fd5b5061032c61044536600461327b565b610c77565b34801561045657600080fd5b5061032c6104653660046132ee565b610d1d565b34801561047657600080fd5b506103f061048536600461339f565b6001600160a01b0316301490565b34801561049f57600080fd5b506102f27f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d357600080fd5b506103f06104e23660046131bf565b600c6020526000908152604090205460ff1681565b34801561050357600080fd5b5061036260055481565b34801561051957600080fd5b5061032c61052836600461339f565b610fdf565b34801561053957600080fd5b50600354600160a01b900460ff166103f0565b34801561055857600080fd5b506105807f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610303565b3480156105a457600080fd5b506103f06105b336600461339f565b600d6020526000908152604090205460ff1681565b3480156105d457600080fd5b50610362611016565b3480156105e957600080fd5b5061032c6105f836600461339f565b61109f565b34801561060957600080fd5b5062093a80610362565b34801561061f57600080fd5b5061032c61062e3660046131bf565b61111c565b34801561063f57600080fd5b5061032c6111e7565b34801561065457600080fd5b5061032c6106633660046131bf565b611212565b34801561067457600080fd5b5061032c611246565b34801561068957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102f2565b3480156106bc57600080fd5b506000546001600160a01b0316610580565b3480156106da57600080fd5b506103f06106e93660046131bf565b600b6020526000908152604090205460ff1681565b34801561070a57600080fd5b506103626107193660046131bf565b60096020526000908152604090205481565b34801561073757600080fd5b5030610580565b34801561074a57600080fd5b506105807f000000000000000000000000000000000000000000000000000000000000000081565b34801561077e57600080fd5b50600454610580906001600160a01b031681565b34801561079e57600080fd5b5061036260085481565b3480156107b457600080fd5b5061032c6107c336600461339f565b6112fa565b3480156107d457600080fd5b5061032c6107e336600461339f565b611398565b3480156107f457600080fd5b5061032c61080336600461339f565b611414565b34801561081457600080fd5b506102f26108233660046133d5565b600e6020526000908152604090205463ffffffff1681565b34801561084757600080fd5b5061032c611493565b34801561085c57600080fd5b506103627f000000000000000000000000000000000000000000000000000000000000000081565b34801561089057600080fd5b50600354610580906001600160a01b031681565b3480156108b057600080fd5b506001546001600160a01b0316610580565b3480156108ce57600080fd5b506000546001600160a01b0316156103f0565b3480156108ed57600080fd5b5061032c6108fc36600461339f565b611503565b34801561090d57600080fd5b506105807f000000000000000000000000000000000000000000000000000000000000000081565b34801561094157600080fd5b5061036260065481565b34801561095757600080fd5b506103627f000000000000000000000000000000000000000000000000000000000000000081565b34801561098b57600080fd5b506103f061099a36600461339f565b6115da565b3480156109ab57600080fd5b5061032c6109ba3660046131bf565b6115eb565b3480156109cb57600080fd5b506109df6109da3660046133f0565b61161f565b604051610303929190613497565b6000546001600160a01b03163314610a18576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610a5d5760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610a9f6117ee565b43600554600654610ab091906134c6565b1115610acf576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5a91906134d9565b6000818152600c602052604090205490915060ff1615610bb05760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b6044820152606401610a54565b600081604051602001610bc591815260200190565b6040516020818303038152906040529050610be0818461183b565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610c2d908390869033906134f2565b60405180910390a1505050565b6000546001600160a01b03163314610c65576040516311a8a1bb60e31b815260040160405180910390fd5b610c6d6119a9565b610c756119f9565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cd85760405162461bcd60e51b8152600401610a549060208082526004908201526310a0a6a160e11b604082015260600190565b610ce181611a4e565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610d12929190613530565b60405180910390a150565b610d256117ee565b610d2d611bad565b83610d645760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b6044820152606401610a54565b600085856000818110610d7957610d7961355a565b9050602002810190610d8b9190613570565b610d959080613591565b604051610da39291906135df565b604051809103902090506000610e0a8288886000818110610dc657610dc661355a565b9050602002810190610dd89190613570565b60200189896000818110610dee57610dee61355a565b9050602002810190610e009190613570565b6104200135611c06565b9050610e1881868686611cad565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610f3e5788888263ffffffff16818110610e5d57610e5d61355a565b9050602002810190610e6f9190613570565b610e799080613591565b604051610e879291906135df565b604051809103902093506000610edc858b8b8563ffffffff16818110610eaf57610eaf61355a565b9050602002810190610ec19190613570565b6020018c8c8663ffffffff16818110610dee57610dee61355a565b9050838114610f1b5760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b6044820152606401610a54565b506000848152600f60205260409020805460ff1916600190811790915501610e37565b5060005b818163ffffffff161015610fca57610fc189898363ffffffff16818110610f6b57610f6b61355a565b9050602002810190610f7d9190613570565b610f879080613591565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611da892505050565b50600101610f42565b50505050610fd86001600755565b5050505050565b6000546001600160a01b0316331461100a576040516311a8a1bb60e31b815260040160405180910390fd5b61101381612085565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109a91906134d9565b905090565b6000546001600160a01b031633146110ca576040516311a8a1bb60e31b815260040160405180910390fd5b476110d582826120ee565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d8260405161111091815260200190565b60405180910390a25050565b6000546001600160a01b03163314611147576040516311a8a1bb60e31b815260040160405180910390fd5b61114f6119a9565b60008181526009602052604081205490036111a45760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b6044820152606401610a54565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610d129083815260200190565b6000546001600160a01b03163314610c75576040516311a8a1bb60e31b815260040160405180910390fd5b6000546001600160a01b0316331461123d576040516311a8a1bb60e31b815260040160405180910390fd5b61101381612207565b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa15801561128f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b391906135ef565b6112ea5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610a54565b6112f26117ee565b610c75612248565b6000546001600160a01b03163314611325576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015611343575060025415155b15611361576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361138f57604051634a2fb73f60e11b815260040160405180910390fd5b6110138161228b565b6000546001600160a01b031633146113c3576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610d12565b6000546001600160a01b0316331461143f576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610d12565b6001546001600160a01b031633146114be576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426114d09190613611565b116114ee576040516324e0285f60e21b815260040160405180910390fd5b600154610c75906001600160a01b03166122d9565b6000546001600160a01b0316331461152e576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b039081169082160361158c5760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e616765720000000000000000006044820152606401610a54565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610d12565b60006115e58261233e565b92915050565b6000546001600160a01b03163314611616576040516311a8a1bb60e31b815260040160405180910390fd5b611013816123ec565b336000908152600d602052604081205460609060ff166116705760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b6044820152606401610a54565b63ffffffff8086166000908152600e602052604081208054919291909116908261169983613624565b91906101000a81548163ffffffff021916908363ffffffff160217905550905060006116f87f00000000000000000000000000000000000000000000000000000000000000006116ef336001600160a01b031690565b848a8a8a61246a565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af115801561176e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117929190613647565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f836117c4600184613611565b84876040516117d6949392919061366b565b60405180910390a15090989197509095505050505050565b600354600160a01b900460ff1615610c755760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a54565b81516020146118765760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a54565b80516020146118b65760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a54565b6003546040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263dc8601b3929116906327fba37b60e11b9061190890879060240161369a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611943856124a2565b6040518463ffffffff1660e01b8152600401611961939291906136ad565b6020604051808303816000875af1158015611980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a491906134d9565b505050565b600354600160a01b900460ff16610c755760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a54565b611a016119a9565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b8051602014611a895760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a54565b600354611a9e906001600160a01b031661233e565b611add5760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b6044820152606401610a54565b467f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631544298e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6091906134d9565b14611b9c5760405162461bcd60e51b815260206004820152600c60248201526b10b9b7bab931b2a1b430b4b760a11b6044820152606401610a54565b611013611ba8826136e1565b612500565b600260075403611bff5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a54565b6002600755565b6000806000858152600f602052604090205460ff166002811115611c2c57611c2c6132b0565b14611c6f5760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b6044820152606401610a54565b611ca38484602080602002604051908101604052809291908260208002808284376000920191909152508691506126299050565b90505b9392505050565b6000848152600b602052604090205460ff16611da257611ccc83612977565b6000611d028584602080602002604051908101604052809291908260208002808284376000920191909152508691506126299050565b9050838114611d495760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b6044820152606401610a54565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611d989086815260200190565b60405180910390a3505b50505050565b600080611db58382612ad7565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611ded62ffffff198316612afb565b63ffffffff1614611e2f5760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b6044820152606401610a54565b6000611e4062ffffff198316612b10565b905060016000828152600f602052604090205460ff166002811115611e6757611e676132b0565b14611e9e5760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b6044820152606401610a54565b6000818152600f60205260409020805460ff191660021790556001611f037f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006134c6565b611f0d9190613611565b5a11611f445760405162461bcd60e51b8152600401610a54906020808252600490820152632167617360e01b604082015260600190565b6000611f5562ffffff198416612b59565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611fb062ffffff198816612b6a565b611fbf62ffffff198916612b7e565b611fce62ffffff198a16612b93565b611feb611fe062ffffff198c16612ba8565b62ffffff1916612bd6565b604051602401611ffe9493929190613708565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050612038858560008685612c1f565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe48906120719088908b908690613737565b60405180910390a150505050505050919050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b8047101561213e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a54565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461218b576040519150601f19603f3d011682016040523d82523d6000602084013e612190565b606091505b50509050806119a45760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a54565b60105460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1601055565b6122506117ee565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a313390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60006115e57f0000000000000000000000000000000000000000000000000000000000000000837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b07506116040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e791906134d9565b612caa565b600554810361242f5760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b6044820152606401610a54565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610d12565b606086868686868660405160200161248796959493929190613758565b60405160208183030381529060405290509695505050505050565b600081516020146124e45760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a54565b6115e5828060200190518101906124fb91906134d9565b612dc5565b8061253e5760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b6044820152606401610a54565b600081815260096020526040902054156125915760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b6044820152606401610a54565b6000818152600a602052604090205460ff16156125e65760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b6044820152606401610a54565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610d129083815260200190565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b806129ba5760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b6044820152606401610a54565b6000818152600a602052604090205460ff16156129d45750565b60008181526009602052604081205490819003612a2a5760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b6044820152606401610a54565b600854612a378243613611565b1015612a855760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f74202176657269666965640000000000000000006044820152606401610a54565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b815160009060208401612af264ffffffffff85168284612ddb565b95945050505050565b60006115e562ffffff19831660286004612e18565b600080612b268360781c6001600160601b031690565b6001600160601b031690506000612b468460181c6001600160601b031690565b6001600160601b03169091209392505050565b60006115e5612b6783612e48565b90565b60006115e562ffffff198316826004612e18565b60006115e562ffffff19831660246004612e18565b60006115e562ffffff19831660046020612e59565b60006115e5604c612bc681601886901c6001600160601b0316613611565b62ffffff19851691906000612f64565b6060600080612bee8460181c6001600160601b031690565b6001600160601b031690506040519150819250612c0e8483602001612fe0565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff811115612c4557612c456131d8565b6040519080825280601f01601f191660200182016040528015612c6f576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612c90578692505b828152826000602083013e90999098509650505050505050565b6000336001600160a01b03851614612cee5760405162461bcd60e51b81526020600482015260076024820152662162726964676560c81b6044820152606401610a54565b7f00000000000000000000000000000000000000000000000000000000000000008214612d475760405162461bcd60e51b815260206004820152600760248201526621736f7572636560c81b6044820152606401610a54565b826001600160a01b0316846001600160a01b031663d67bdd256040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db391906137b2565b6001600160a01b031614949350505050565b6000601054821115612dd75760105491505b5090565b600080612de883856134c6565b9050604051811115612df8575060005b80600003612e0d5762ffffff19915050611ca6565b612af28585856130d3565b6000612e258260206137cf565b612e309060086137e8565b60ff16612e3e858585612e59565b901c949350505050565b60006115e562ffffff198316602c60205b60008160ff16600003612e6e57506000611ca6565b612e818460181c6001600160601b031690565b6001600160601b0316612e9760ff8416856134c6565b1115612eff57612eb08460781c6001600160601b031690565b612ec38560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610a54565b60208260ff161115612f245760405163045df3f960e01b815260040160405180910390fd5b600882026000612f3d8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612f7a8660781c6001600160601b031690565b6001600160601b03169050612f8e8661314a565b84612f9987846134c6565b612fa391906134c6565b1115612fb65762ffffff19915050612fd8565b612fc085826134c6565b9050612fd48364ffffffffff168286612ddb565b9150505b949350505050565b600062ffffff19808416036130085760405163148d513360e21b815260040160405180910390fd5b61301183613183565b1561302f57604051632ee0949160e11b815260040160405180910390fd5b60006130448460181c6001600160601b031690565b6001600160601b0316905060006130648560781c6001600160601b031690565b6001600160601b031690506000806040519150858211156130855760206060fd5b8386858560045afa9050806130ad57604051632af1bd9b60e21b815260040160405180910390fd5b6130c86130ba8860d81c90565b64ffffffffff1687866130d3565b979650505050505050565b60006060601883856001600160601b038216821480156130fb575086816001600160601b0316145b6131345760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610a54565b96831b90961790911b90941790931b9392505050565b600061315f8260181c6001600160601b031690565b6131728360781c6001600160601b031690565b016001600160601b03169050919050565b600061318f8260d81c90565b64ffffffffff1664ffffffffff036131a957506001919050565b60006131b48361314a565b604051109392505050565b6000602082840312156131d157600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126131ff57600080fd5b813567ffffffffffffffff8082111561321a5761321a6131d8565b604051601f8301601f19908116603f01168101908282118183101715613242576132426131d8565b8160405283815286602085880101111561325b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561328d57600080fd5b813567ffffffffffffffff8111156132a457600080fd5b612fd8848285016131ee565b634e487b7160e01b600052602160045260246000fd5b60208101600383106132e857634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806000610460868803121561330757600080fd5b853567ffffffffffffffff8082111561331f57600080fd5b818801915088601f83011261333357600080fd5b81358181111561334257600080fd5b8960208260051b850101111561335757600080fd5b60209283019750955050860135925061044086018781111561337857600080fd5b94979396509194604001933592915050565b6001600160a01b038116811461101357600080fd5b6000602082840312156133b157600080fd5b8135611ca68161338a565b803563ffffffff811681146133d057600080fd5b919050565b6000602082840312156133e757600080fd5b611ca6826133bc565b60008060006060848603121561340557600080fd5b61340e846133bc565b925060208401359150604084013567ffffffffffffffff81111561343157600080fd5b61343d868287016131ee565b9150509250925092565b60005b8381101561346257818101518382015260200161344a565b50506000910152565b60008151808452613483816020860160208601613447565b601f01601f19169290920160200192915050565b828152604060208201526000611ca3604083018461346b565b634e487b7160e01b600052601160045260246000fd5b808201808211156115e5576115e56134b0565b6000602082840312156134eb57600080fd5b5051919050565b606081526000613505606083018661346b565b8281036020840152613517818661346b565b91505060018060a01b0383166040830152949350505050565b604081526000613543604083018561346b565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e1983360301811261358757600080fd5b9190910192915050565b6000808335601e198436030181126135a857600080fd5b83018035915067ffffffffffffffff8211156135c357600080fd5b6020019150368190038213156135d857600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561360157600080fd5b81518015158114611ca657600080fd5b818103818111156115e5576115e56134b0565b600063ffffffff80831681810361363d5761363d6134b0565b6001019392505050565b6000806040838503121561365a57600080fd5b505080516020909101519092909150565b848152836020820152826040820152608060608201526000613690608083018461346b565b9695505050505050565b602081526000611ca6602083018461346b565b6001600160a01b03841681526060602082018190526000906136d19083018561346b565b9050826040830152949350505050565b80516020808301519190811015613702576000198160200360031b1b821691505b50919050565b600063ffffffff808716835280861660208401525083604083015260806060830152613690608083018461346b565b8381528215156020820152606060408201526000612af2606083018461346b565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c83015282516137a081604c850160208701613447565b91909101604c01979650505050505050565b6000602082840312156137c457600080fd5b8151611ca68161338a565b60ff82811682821603908111156115e5576115e56134b0565b60ff8181168382160290811690818114613804576138046134b0565b509291505056fea2646970667358221220c23780cb54942c64f152b504f2f46971273932b30e89e7626227a2a82d5b59f664736f6c63430008110033","opcodes":"PUSH2 0x180 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x3DE2 CODESIZE SUB DUP1 PUSH3 0x3DE2 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x40A JUMP JUMPDEST DUP2 DUP2 DUP2 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 DUP1 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH3 0x53 CALLER PUSH3 0x2C9 JUMP JUMPDEST DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0x0 SUB PUSH3 0x9E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x32B6B83A3C903237B6B0B4B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xEA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x32B6B83A3C903937B7BA26B0B730B3B2B9 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x95 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0xA0 MSTORE DUP4 DUP2 AND PUSH1 0xC0 MSTORE SWAP1 DUP6 AND PUSH1 0xE0 MSTORE DUP2 AND ISZERO PUSH3 0x122 JUMPI PUSH3 0x122 DUP2 PUSH3 0x32E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH4 0xFFFFFFFF DUP7 DUP2 AND SWAP3 SWAP1 DUP9 AND SWAP2 PUSH32 0x4F9C27C2FE3F84576EA469D367D044DA53C45E951617E8389F2B5ED8DB9D25F0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE POP PUSH1 0x1 PUSH1 0x7 SSTORE PUSH3 0xCF84F DUP6 GT PUSH3 0x1F5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2170726F6365737320676173 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x95 JUMP JUMPDEST PUSH2 0x3A97 DUP5 GT PUSH3 0x237 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x217265736572766520676173 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x95 JUMP JUMPDEST PUSH2 0x120 DUP6 SWAP1 MSTORE PUSH2 0x140 DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0x28A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x217A65726F206D65726B6C65 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x95 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x100 MSTORE PUSH1 0x8 SSTORE POP PUSH3 0x2B0 SWAP6 POP DUP7 SWAP5 POP POP PUSH3 0x397 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH2 0x160 MSTORE POP PUSH3 0x4D2 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x10 SSTORE JUMP JUMPDEST DUP1 MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH3 0x3ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x3ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x180 DUP14 DUP16 SUB SLT ISZERO PUSH3 0x42E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x439 DUP14 PUSH3 0x3D8 JUMP JUMPDEST SWAP12 POP PUSH3 0x449 PUSH1 0x20 DUP15 ADD PUSH3 0x3D8 JUMP JUMPDEST SWAP11 POP PUSH3 0x459 PUSH1 0x40 DUP15 ADD PUSH3 0x3F2 JUMP JUMPDEST SWAP10 POP PUSH3 0x469 PUSH1 0x60 DUP15 ADD PUSH3 0x3F2 JUMP JUMPDEST SWAP9 POP PUSH3 0x479 PUSH1 0x80 DUP15 ADD PUSH3 0x3F2 JUMP JUMPDEST SWAP8 POP PUSH1 0xA0 DUP14 ADD MLOAD SWAP7 POP PUSH1 0xC0 DUP14 ADD MLOAD SWAP6 POP PUSH1 0xE0 DUP14 ADD MLOAD SWAP5 POP PUSH3 0x49F PUSH2 0x100 DUP15 ADD PUSH3 0x3F2 JUMP JUMPDEST SWAP4 POP PUSH3 0x4B0 PUSH2 0x120 DUP15 ADD PUSH3 0x3F2 JUMP JUMPDEST SWAP3 POP PUSH2 0x140 DUP14 ADD MLOAD SWAP2 POP PUSH2 0x160 DUP14 ADD MLOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x3841 PUSH3 0x5A1 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x862 ADD MSTORE PUSH2 0x2CF0 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x340 ADD MSTORE PUSH2 0x1EBE ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x95D ADD MSTORE DUP2 DUP2 PUSH2 0x1EDF ADD MSTORE PUSH2 0x1F6C ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x750 ADD MSTORE DUP2 DUP2 PUSH2 0xADA ADD MSTORE DUP2 DUP2 PUSH2 0x101A ADD MSTORE PUSH2 0x171E ADD MSTORE PUSH1 0x0 PUSH2 0x2D0 ADD MSTORE PUSH1 0x0 PUSH2 0x55E ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x913 ADD MSTORE DUP2 DUP2 PUSH2 0xC82 ADD MSTORE DUP2 DUP2 PUSH2 0x18C6 ADD MSTORE DUP2 DUP2 PUSH2 0x1AE0 ADD MSTORE DUP2 DUP2 PUSH2 0x2345 ADD MSTORE PUSH2 0x2367 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x4A5 ADD MSTORE DUP2 DUP2 PUSH2 0x68C ADD MSTORE DUP2 DUP2 PUSH2 0x16C0 ADD MSTORE PUSH2 0x1DBE ADD MSTORE PUSH2 0x3841 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B2 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x175 JUMPI DUP1 PUSH4 0xB95A2001 GT PUSH2 0xDC JUMPI DUP1 PUSH4 0xD2A3CC71 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xD88BEDA2 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xD88BEDA2 EQ PUSH2 0x94B JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x97F JUMPI DUP1 PUSH4 0xE0FED010 EQ PUSH2 0x99F JUMPI DUP1 PUSH4 0xFA31DE01 EQ PUSH2 0x9BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD2A3CC71 EQ PUSH2 0x8E1 JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x901 JUMPI DUP1 PUSH4 0xD7D317B3 EQ PUSH2 0x935 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB95A2001 EQ PUSH2 0x808 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x83B JUMPI DUP1 PUSH4 0xC8A4D690 EQ PUSH2 0x850 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x884 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x8A4 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x8C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA01892A5 GT PUSH2 0x12E JUMPI DUP1 PUSH4 0xA01892A5 EQ PUSH2 0x73E JUMPI DUP1 PUSH4 0xA792C29B EQ PUSH2 0x772 JUMPI DUP1 PUSH4 0xAD9C0C2E EQ PUSH2 0x792 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x7A8 JUMPI DUP1 PUSH4 0xB2F87643 EQ PUSH2 0x7C8 JUMPI DUP1 PUSH4 0xB697F531 EQ PUSH2 0x7E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x668 JUMPI DUP1 PUSH4 0x8D3638F4 EQ PUSH2 0x67D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x6B0 JUMPI DUP1 PUSH4 0x98C9F2B9 EQ PUSH2 0x6CE JUMPI DUP1 PUSH4 0x9D3117C7 EQ PUSH2 0x6FE JUMPI DUP1 PUSH4 0x9FA92F9D EQ PUSH2 0x72B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x572386CA GT PUSH2 0x219 JUMPI DUP1 PUSH4 0x65EAF11B GT PUSH2 0x1D2 JUMPI DUP1 PUSH4 0x65EAF11B EQ PUSH2 0x5C8 JUMPI DUP1 PUSH4 0x68742DA6 EQ PUSH2 0x5DD JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x5FD JUMPI DUP1 PUSH4 0x6B04A933 EQ PUSH2 0x613 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x633 JUMPI DUP1 PUSH4 0x7850B020 EQ PUSH2 0x648 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x572386CA EQ PUSH2 0x4C7 JUMPI DUP1 PUSH4 0x579C1618 EQ PUSH2 0x4F7 JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x52D JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x54C JUMPI DUP1 PUSH4 0x6159ADA1 EQ PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3CF52FFB GT PUSH2 0x26B JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x400 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x415 JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x42A JUMPI DUP1 PUSH4 0x508A109B EQ PUSH2 0x44A JUMPI DUP1 PUSH4 0x5190BC53 EQ PUSH2 0x46A JUMPI DUP1 PUSH4 0x52A9674B EQ PUSH2 0x493 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x2BE JUMPI DUP1 PUSH4 0x1EEAABEA EQ PUSH2 0x30C JUMPI DUP1 PUSH4 0x25E3BEDA EQ PUSH2 0x32E JUMPI DUP1 PUSH4 0x2BB1AE7C EQ PUSH2 0x370 JUMPI DUP1 PUSH4 0x2BBD59CA EQ PUSH2 0x383 JUMPI DUP1 PUSH4 0x301F07C3 EQ PUSH2 0x3C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x2B9 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F2 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x318 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x327 CALLDATASIZE PUSH1 0x4 PUSH2 0x31BF JUMP JUMPDEST PUSH2 0x9ED JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x303 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x37E CALLDATASIZE PUSH1 0x4 PUSH2 0x327B JUMP JUMPDEST PUSH2 0xA97 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x38F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3B3 PUSH2 0x39E CALLDATASIZE PUSH1 0x4 PUSH2 0x31BF JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x303 SWAP2 SWAP1 PUSH2 0x32C6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x3DB CALLDATASIZE PUSH1 0x4 PUSH2 0x31BF JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x303 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x40C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x362 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x421 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0xC3A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x436 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x445 CALLDATASIZE PUSH1 0x4 PUSH2 0x327B JUMP JUMPDEST PUSH2 0xC77 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x456 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x465 CALLDATASIZE PUSH1 0x4 PUSH2 0x32EE JUMP JUMPDEST PUSH2 0xD1D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x476 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x485 CALLDATASIZE PUSH1 0x4 PUSH2 0x339F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x49F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F2 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x4E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x31BF JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x503 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x528 CALLDATASIZE PUSH1 0x4 PUSH2 0x339F JUMP JUMPDEST PUSH2 0xFDF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x539 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3F0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x558 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x580 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x303 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x5B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x339F JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH2 0x1016 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x5F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x339F JUMP JUMPDEST PUSH2 0x109F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x609 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x362 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x61F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x62E CALLDATASIZE PUSH1 0x4 PUSH2 0x31BF JUMP JUMPDEST PUSH2 0x111C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x11E7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x654 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x663 CALLDATASIZE PUSH1 0x4 PUSH2 0x31BF JUMP JUMPDEST PUSH2 0x1212 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x674 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x1246 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x689 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x0 PUSH2 0x2F2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x580 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x6E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x31BF JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH2 0x719 CALLDATASIZE PUSH1 0x4 PUSH2 0x31BF JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x737 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH2 0x580 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x74A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x580 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x77E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x580 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x79E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x7C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x339F JUMP JUMPDEST PUSH2 0x12FA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x7E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x339F JUMP JUMPDEST PUSH2 0x1398 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x803 CALLDATASIZE PUSH1 0x4 PUSH2 0x339F JUMP JUMPDEST PUSH2 0x1414 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x814 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F2 PUSH2 0x823 CALLDATASIZE PUSH1 0x4 PUSH2 0x33D5 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x847 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x1493 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x85C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x890 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x580 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x580 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x3F0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x8FC CALLDATASIZE PUSH1 0x4 PUSH2 0x339F JUMP JUMPDEST PUSH2 0x1503 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x90D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x580 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x941 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x957 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x98B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x99A CALLDATASIZE PUSH1 0x4 PUSH2 0x339F JUMP JUMPDEST PUSH2 0x15DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x9BA CALLDATASIZE PUSH1 0x4 PUSH2 0x31BF JUMP JUMPDEST PUSH2 0x15EB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9DF PUSH2 0x9DA CALLDATASIZE PUSH1 0x4 PUSH2 0x33F0 JUMP JUMPDEST PUSH2 0x161F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x303 SWAP3 SWAP2 SWAP1 PUSH2 0x3497 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA18 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD DUP2 SUB PUSH2 0xA5D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2164656C6179426C6F636B73 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLER DUP2 MSTORE DUP2 SWAP1 PUSH32 0x8BD16320F3B60336ED5FD2A770EB7453E7E71CFEF4462ADDFFD7AE9DFE201C8E SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x8 SSTORE JUMP JUMPDEST PUSH2 0xA9F PUSH2 0x17EE JUMP JUMPDEST NUMBER PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD PUSH2 0xAB0 SWAP2 SWAP1 PUSH2 0x34C6 JUMP JUMPDEST GT ISZERO PUSH2 0xACF JUMPI PUSH1 0x40 MLOAD PUSH4 0x46CF2AF1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST NUMBER PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB36 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB5A SWAP2 SWAP1 PUSH2 0x34D9 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xBB0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1C9BDBDD08185B1C9958591E481CD95B9D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xBC5 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH2 0xBE0 DUP2 DUP5 PUSH2 0x183B JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 SWAP1 PUSH2 0xC2D SWAP1 DUP4 SWAP1 DUP7 SWAP1 CALLER SWAP1 PUSH2 0x34F2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC65 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC6D PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0xC75 PUSH2 0x19F9 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xCD8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA54 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0xCE1 DUP2 PUSH2 0x1A4E JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0xD12 SWAP3 SWAP2 SWAP1 PUSH2 0x3530 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xD25 PUSH2 0x17EE JUMP JUMPDEST PUSH2 0xD2D PUSH2 0x1BAD JUMP JUMPDEST DUP4 PUSH2 0xD64 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x2170726F6F6673 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD79 JUMPI PUSH2 0xD79 PUSH2 0x355A JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD8B SWAP2 SWAP1 PUSH2 0x3570 JUMP JUMPDEST PUSH2 0xD95 SWAP1 DUP1 PUSH2 0x3591 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDA3 SWAP3 SWAP2 SWAP1 PUSH2 0x35DF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xE0A DUP3 DUP9 DUP9 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xDC6 JUMPI PUSH2 0xDC6 PUSH2 0x355A JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xDD8 SWAP2 SWAP1 PUSH2 0x3570 JUMP JUMPDEST PUSH1 0x20 ADD DUP10 DUP10 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xDEE JUMPI PUSH2 0xDEE PUSH2 0x355A JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE00 SWAP2 SWAP1 PUSH2 0x3570 JUMP JUMPDEST PUSH2 0x420 ADD CALLDATALOAD PUSH2 0x1C06 JUMP JUMPDEST SWAP1 POP PUSH2 0xE18 DUP2 DUP7 DUP7 DUP7 PUSH2 0x1CAD JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP7 SWAP1 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xF3E JUMPI DUP9 DUP9 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xE5D JUMPI PUSH2 0xE5D PUSH2 0x355A JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE6F SWAP2 SWAP1 PUSH2 0x3570 JUMP JUMPDEST PUSH2 0xE79 SWAP1 DUP1 PUSH2 0x3591 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE87 SWAP3 SWAP2 SWAP1 PUSH2 0x35DF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP4 POP PUSH1 0x0 PUSH2 0xEDC DUP6 DUP12 DUP12 DUP6 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xEAF JUMPI PUSH2 0xEAF PUSH2 0x355A JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xEC1 SWAP2 SWAP1 PUSH2 0x3570 JUMP JUMPDEST PUSH1 0x20 ADD DUP13 DUP13 DUP7 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xDEE JUMPI PUSH2 0xDEE PUSH2 0x355A JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0xF1B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x85CDA185C9959149BDBDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE ADD PUSH2 0xE37 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xFCA JUMPI PUSH2 0xFC1 DUP10 DUP10 DUP4 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xF6B JUMPI PUSH2 0xF6B PUSH2 0x355A JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xF7D SWAP2 SWAP1 PUSH2 0x3570 JUMP JUMPDEST PUSH2 0xF87 SWAP1 DUP1 PUSH2 0x3591 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1DA8 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xF42 JUMP JUMPDEST POP POP POP POP PUSH2 0xFD8 PUSH1 0x1 PUSH1 0x7 SSTORE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x100A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1013 DUP2 PUSH2 0x2085 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1076 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x109A SWAP2 SWAP1 PUSH2 0x34D9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10CA JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SELFBALANCE PUSH2 0x10D5 DUP3 DUP3 PUSH2 0x20EE JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEAFF4B37086828766AD3268786972C0CD24259D4C87A80F9D3963A3C3D999B0D DUP3 PUSH1 0x40 MLOAD PUSH2 0x1110 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1147 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x114F PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SUB PUSH2 0x11A4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x616767726567617465526F6F742021657869737473 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xF51534ECF10A58DB36CE4F5180F59DEDDF3B3EB7C5E7454E602C2F80A40CC739 SWAP1 PUSH2 0xD12 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC75 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x123D JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1013 DUP2 PUSH2 0x2207 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x128F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12B3 SWAP2 SWAP1 PUSH2 0x35EF JUMP JUMPDEST PUSH2 0x12EA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH2 0x12F2 PUSH2 0x17EE JUMP JUMPDEST PUSH2 0xC75 PUSH2 0x2248 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1325 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x1343 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1361 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x138F JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1013 DUP2 PUSH2 0x228B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x13C3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x384859C5EF5FAFAC31E8BC92CE7FB48B1F2C74C4DD5E212EB84EC202FA5D9FAD SWAP2 ADD PUSH2 0xD12 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x143F JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xD65ECA5D561D3A4568C87B9B13CED4AB52A69EDADFDFDB22D76BC595F36D7D87 SWAP2 ADD PUSH2 0xD12 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x14BE JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x14D0 SWAP2 SWAP1 PUSH2 0x3611 JUMP JUMPDEST GT PUSH2 0x14EE JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0xC75 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x22D9 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x152E JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0x158C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616C72656164792077617463686572206D616E61676572000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC16D059E43D7F8E29CCB4E001A2F249D3C59E274925D6A6BC3912943441D9F6C SWAP1 PUSH1 0x20 ADD PUSH2 0xD12 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E5 DUP3 PUSH2 0x233E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1616 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1013 DUP2 PUSH2 0x23EC JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x60 SWAP1 PUSH1 0xFF AND PUSH2 0x1670 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x8585B1B1BDDDB1A5CDD1959 PUSH1 0xA2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP3 PUSH2 0x1699 DUP4 PUSH2 0x3624 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH4 0xFFFFFFFF AND MUL OR SWAP1 SSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0x16F8 PUSH32 0x0 PUSH2 0x16EF CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP5 DUP11 DUP11 DUP11 PUSH2 0x246A JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH4 0x2D287E43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2D287E43 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x176E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1792 SWAP2 SWAP1 PUSH2 0x3647 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH32 0x40F08EE347FC927AE45902EDC87DEBB024AAB1A311943731968607F603F2152F DUP4 PUSH2 0x17C4 PUSH1 0x1 DUP5 PUSH2 0x3611 JUMP JUMPDEST DUP5 DUP8 PUSH1 0x40 MLOAD PUSH2 0x17D6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x366B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP SWAP1 SWAP9 SWAP2 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xC75 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x1876 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0x18B6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND SWAP3 PUSH4 0xDC8601B3 SWAP3 SWAP2 AND SWAP1 PUSH4 0x27FBA37B PUSH1 0xE1 SHL SWAP1 PUSH2 0x1908 SWAP1 DUP8 SWAP1 PUSH1 0x24 ADD PUSH2 0x369A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x1943 DUP6 PUSH2 0x24A2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1961 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x36AD JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1980 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19A4 SWAP2 SWAP1 PUSH2 0x34D9 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xC75 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH2 0x1A01 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0x1A89 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x1A9E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x233E JUMP JUMPDEST PUSH2 0x1ADD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x10B6B4B93937B921B7B73732B1BA37B9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST CHAINID PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1544298E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B3C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B60 SWAP2 SWAP1 PUSH2 0x34D9 JUMP JUMPDEST EQ PUSH2 0x1B9C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B9B7BAB931B2A1B430B4B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH2 0x1013 PUSH2 0x1BA8 DUP3 PUSH2 0x36E1 JUMP JUMPDEST PUSH2 0x2500 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SLOAD SUB PUSH2 0x1BFF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1C2C JUMPI PUSH2 0x1C2C PUSH2 0x32B0 JUMP JUMPDEST EQ PUSH2 0x1C6F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x214D6573736167655374617475732E4E6F6E65 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH2 0x1CA3 DUP5 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x2629 SWAP1 POP JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1DA2 JUMPI PUSH2 0x1CCC DUP4 PUSH2 0x2977 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D02 DUP6 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x2629 SWAP1 POP JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0x1D49 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1A5B9D985B1A59081A5B989BDD5B99149BDBDD PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP5 SWAP1 DUP7 SWAP1 PUSH32 0x7EC1EA51FE3DB53E55ED9D922854BC2156F467FF2F87D74E2086DAE2C84A88A8 SWAP1 PUSH2 0x1D98 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1DB5 DUP4 DUP3 PUSH2 0x2AD7 JUMP JUMPDEST SWAP1 POP PUSH4 0xFFFFFFFF PUSH32 0x0 AND PUSH2 0x1DED PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x2AFB JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x1E2F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B232B9BA34B730BA34B7B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E40 PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x2B10 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1E67 JUMPI PUSH2 0x1E67 PUSH2 0x32B0 JUMP JUMPDEST EQ PUSH2 0x1E9E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x10B83937BB32B7 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x2 OR SWAP1 SSTORE PUSH1 0x1 PUSH2 0x1F03 PUSH32 0x0 PUSH32 0x0 PUSH2 0x34C6 JUMP JUMPDEST PUSH2 0x1F0D SWAP2 SWAP1 PUSH2 0x3611 JUMP JUMPDEST GAS GT PUSH2 0x1F44 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA54 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x21676173 PUSH1 0xE0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F55 PUSH3 0xFFFFFF NOT DUP5 AND PUSH2 0x2B59 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH32 0x0 SWAP2 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x1FB0 PUSH3 0xFFFFFF NOT DUP9 AND PUSH2 0x2B6A JUMP JUMPDEST PUSH2 0x1FBF PUSH3 0xFFFFFF NOT DUP10 AND PUSH2 0x2B7E JUMP JUMPDEST PUSH2 0x1FCE PUSH3 0xFFFFFF NOT DUP11 AND PUSH2 0x2B93 JUMP JUMPDEST PUSH2 0x1FEB PUSH2 0x1FE0 PUSH3 0xFFFFFF NOT DUP13 AND PUSH2 0x2BA8 JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND PUSH2 0x2BD6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1FFE SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3708 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xAB2DC3F5 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 POP PUSH2 0x2038 DUP6 DUP6 PUSH1 0x0 DUP7 DUP6 PUSH2 0x2C1F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP10 POP SWAP3 POP PUSH32 0xD42DE95A9B26F1BE134C8ECCE389DC4FCFA18753D01661B7B361233569E8FE48 SWAP1 PUSH2 0x2071 SWAP1 DUP9 SWAP1 DUP12 SWAP1 DUP7 SWAP1 PUSH2 0x3737 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x213E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x218B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2190 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x19A4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x10 SSTORE JUMP JUMPDEST PUSH2 0x2250 PUSH2 0x17EE JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1A31 CALLER SWAP1 JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E5 PUSH32 0x0 DUP4 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB0750611 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23E7 SWAP2 SWAP1 PUSH2 0x34D9 JUMP JUMPDEST PUSH2 0x2CAA JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 SUB PUSH2 0x242F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x85B995DC81C985D19481B1A5B5A5D PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0x8E7FA5E406CB856AAB05575E45EA011C6748376CC1B5229E3D67B92986406A15 SWAP2 ADD PUSH2 0xD12 JUMP JUMPDEST PUSH1 0x60 DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2487 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3758 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x24E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH2 0x15E5 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x24FB SWAP2 SWAP1 PUSH2 0x34D9 JUMP JUMPDEST PUSH2 0x2DC5 JUMP JUMPDEST DUP1 PUSH2 0x253E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x6E657720726F6F7420656D707479 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x2591 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x726F6F7420616C72656164792070656E64696E67 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x25E6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x3937B7BA1030B63932B0B23C90383937BB32B7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 NUMBER SWAP1 SSTORE MLOAD PUSH32 0x84EF18531155AFDB0E64FF905D67044AE3AAC63A6FBA4661CFD9C4C14F289BC8 SWAP1 PUSH2 0xD12 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x5 DUP3 DUP2 SHL DUP3 AND SWAP5 DUP6 MSTORE DUP4 MLOAD SWAP5 DUP3 SUB SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x40 PUSH1 0x0 DUP2 DUP2 KECCAK256 PUSH1 0x2 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x4 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP3 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x8 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x10 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 DUP5 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 DUP4 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 SWAP1 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xE0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x100 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x200 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x120 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x400 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x140 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x800 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x160 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x1000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x2000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x4000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1C0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x8000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1E0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH3 0x10000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x20000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x220 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x40000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x240 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x80000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x260 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x100000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x280 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x200000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x400000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x800000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2E0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x1000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x300 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x2000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x320 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x4000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x340 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x8000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x360 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x10000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x380 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x20000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x40000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x80000000 SWAP1 SWAP5 AND ISZERO SWAP1 SWAP6 SHL SWAP2 DUP3 SWAP1 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x3E0 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x29BA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x616767726567617465526F6F7420656D707479 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x29D4 JUMPI POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x2A2A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x1859D9DC9959D85D19549BDBDD0808595E1A5CDD PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x2A37 DUP3 NUMBER PUSH2 0x3611 JUMP JUMPDEST LT ISZERO PUSH2 0x2A85 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616767726567617465526F6F7420217665726966696564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP4 SWAP2 PUSH32 0x36B314ABA9F663B4D3EF3288AE489341CC5E6A2725A05FA2B72DF7A27E03F42A SWAP2 LOG2 POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0x2AF2 PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x2DDB JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E5 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x28 PUSH1 0x4 PUSH2 0x2E18 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2B26 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2B46 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 SWAP2 KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E5 PUSH2 0x2B67 DUP4 PUSH2 0x2E48 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E5 PUSH3 0xFFFFFF NOT DUP4 AND DUP3 PUSH1 0x4 PUSH2 0x2E18 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E5 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x24 PUSH1 0x4 PUSH2 0x2E18 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E5 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x4 PUSH1 0x20 PUSH2 0x2E59 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E5 PUSH1 0x4C PUSH2 0x2BC6 DUP2 PUSH1 0x18 DUP7 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x3611 JUMP JUMPDEST PUSH3 0xFFFFFF NOT DUP6 AND SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2F64 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x2BEE DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x40 MLOAD SWAP2 POP DUP2 SWAP3 POP PUSH2 0x2C0E DUP5 DUP4 PUSH1 0x20 ADD PUSH2 0x2FE0 JUMP JUMPDEST POP DUP2 DUP2 ADD PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH2 0xFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2C45 JUMPI PUSH2 0x2C45 PUSH2 0x31D8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2C6F JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP8 MLOAD PUSH1 0x20 DUP10 ADD DUP12 DUP15 DUP15 CALL SWAP2 POP RETURNDATASIZE SWAP3 POP DUP7 DUP4 GT ISZERO PUSH2 0x2C90 JUMPI DUP7 SWAP3 POP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EQ PUSH2 0x2CEE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x21627269646765 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH32 0x0 DUP3 EQ PUSH2 0x2D47 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x21736F75726365 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD67BDD25 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D8F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2DB3 SWAP2 SWAP1 PUSH2 0x37B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x10 SLOAD DUP3 GT ISZERO PUSH2 0x2DD7 JUMPI PUSH1 0x10 SLOAD SWAP2 POP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2DE8 DUP4 DUP6 PUSH2 0x34C6 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x2DF8 JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x2E0D JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x1CA6 JUMP JUMPDEST PUSH2 0x2AF2 DUP6 DUP6 DUP6 PUSH2 0x30D3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E25 DUP3 PUSH1 0x20 PUSH2 0x37CF JUMP JUMPDEST PUSH2 0x2E30 SWAP1 PUSH1 0x8 PUSH2 0x37E8 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x2E3E DUP6 DUP6 DUP6 PUSH2 0x2E59 JUMP JUMPDEST SWAP1 SHR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E5 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x2C PUSH1 0x20 JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0x2E6E JUMPI POP PUSH1 0x0 PUSH2 0x1CA6 JUMP JUMPDEST PUSH2 0x2E81 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x2E97 PUSH1 0xFF DUP5 AND DUP6 PUSH2 0x34C6 JUMP JUMPDEST GT ISZERO PUSH2 0x2EFF JUMPI PUSH2 0x2EB0 DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2EC3 DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x2F24 JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0x2F3D DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT DUP5 ADD SAR SWAP2 SWAP1 SWAP6 ADD MLOAD AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2F7A DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH2 0x2F8E DUP7 PUSH2 0x314A JUMP JUMPDEST DUP5 PUSH2 0x2F99 DUP8 DUP5 PUSH2 0x34C6 JUMP JUMPDEST PUSH2 0x2FA3 SWAP2 SWAP1 PUSH2 0x34C6 JUMP JUMPDEST GT ISZERO PUSH2 0x2FB6 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x2FD8 JUMP JUMPDEST PUSH2 0x2FC0 DUP6 DUP3 PUSH2 0x34C6 JUMP JUMPDEST SWAP1 POP PUSH2 0x2FD4 DUP4 PUSH5 0xFFFFFFFFFF AND DUP3 DUP7 PUSH2 0x2DDB JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFFFFFF NOT DUP1 DUP5 AND SUB PUSH2 0x3008 JUMPI PUSH1 0x40 MLOAD PUSH4 0x148D5133 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3011 DUP4 PUSH2 0x3183 JUMP JUMPDEST ISZERO PUSH2 0x302F JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EE09491 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3044 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x3064 DUP6 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD SWAP2 POP DUP6 DUP3 GT ISZERO PUSH2 0x3085 JUMPI PUSH1 0x20 PUSH1 0x60 REVERT JUMPDEST DUP4 DUP7 DUP6 DUP6 PUSH1 0x4 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x30AD JUMPI PUSH1 0x40 MLOAD PUSH4 0x2AF1BD9B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x30C8 PUSH2 0x30BA DUP9 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND DUP8 DUP7 PUSH2 0x30D3 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0x30FB JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0x3134 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x315F DUP3 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x3172 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x318F DUP3 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH5 0xFFFFFFFFFF SUB PUSH2 0x31A9 JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x31B4 DUP4 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x40 MLOAD LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x31D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x31FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x321A JUMPI PUSH2 0x321A PUSH2 0x31D8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x3242 JUMPI PUSH2 0x3242 PUSH2 0x31D8 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x325B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x328D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x32A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2FD8 DUP5 DUP3 DUP6 ADD PUSH2 0x31EE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH2 0x32E8 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x460 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3307 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x331F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3333 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x3342 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x3357 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 DUP4 ADD SWAP8 POP SWAP6 POP POP DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x440 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x3378 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x40 ADD SWAP4 CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1013 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1CA6 DUP2 PUSH2 0x338A JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x33D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1CA6 DUP3 PUSH2 0x33BC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3405 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x340E DUP5 PUSH2 0x33BC JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3431 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x343D DUP7 DUP3 DUP8 ADD PUSH2 0x31EE JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3462 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x344A JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x3483 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3447 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1CA3 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x346B JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x15E5 JUMPI PUSH2 0x15E5 PUSH2 0x34B0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x34EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3505 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x346B JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x3517 DUP2 DUP7 PUSH2 0x346B JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3543 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x346B JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x43E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3587 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x35A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x35C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x35D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3601 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1CA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x15E5 JUMPI PUSH2 0x15E5 PUSH2 0x34B0 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x363D JUMPI PUSH2 0x363D PUSH2 0x34B0 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x365A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x3690 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x346B JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1CA6 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x346B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x36D1 SWAP1 DUP4 ADD DUP6 PUSH2 0x346B JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x3702 JUMPI PUSH1 0x0 NOT DUP2 PUSH1 0x20 SUB PUSH1 0x3 SHL SHL DUP3 AND SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3690 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x346B JUMP JUMPDEST DUP4 DUP2 MSTORE DUP3 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2AF2 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x346B JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP1 DUP10 PUSH1 0xE0 SHL AND DUP4 MSTORE DUP8 PUSH1 0x4 DUP5 ADD MSTORE DUP1 DUP8 PUSH1 0xE0 SHL AND PUSH1 0x24 DUP5 ADD MSTORE DUP1 DUP7 PUSH1 0xE0 SHL AND PUSH1 0x28 DUP5 ADD MSTORE POP DUP4 PUSH1 0x2C DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x37A0 DUP2 PUSH1 0x4C DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x3447 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x4C ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x37C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1CA6 DUP2 PUSH2 0x338A JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x15E5 JUMPI PUSH2 0x15E5 PUSH2 0x34B0 JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND MUL SWAP1 DUP2 AND SWAP1 DUP2 DUP2 EQ PUSH2 0x3804 JUMPI PUSH2 0x3804 PUSH2 0x34B0 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC2 CALLDATACOPY DUP1 0xCB SLOAD SWAP5 0x2C PUSH5 0xF152B504F2 DELEGATECALL PUSH10 0x71273932B30E89E76262 0x27 LOG2 0xA8 0x2D JUMPDEST MSIZE 0xF6 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"297:2524:125:-:0;;;404:606;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;981:7;990:14;981:7;779;794:13;815:4;827:12;847:16;871:11;890;909:12;929:7;944:15;;779:7;794:13;815:4;827:12;847:16;3038:21:116::1;3048:10;3038:9;:21::i;:::-;3105:7;:12;;3116:1;3105:12:::0;3097:37:::1;;;::::0;-1:-1:-1;;;3097:37:116;;1607:2:181;3097:37:116::1;::::0;::::1;1589:21:181::0;1646:2;1626:18;;;1619:30;-1:-1:-1;;;1665:18:181;;;1658:42;1717:18;;3097:37:116::1;;;;;;;;;-1:-1:-1::0;;;;;3148:26:116;::::1;3140:56;;;::::0;-1:-1:-1;;;3140:56:116;;1948:2:181;3140:56:116::1;::::0;::::1;1930:21:181::0;1987:2;1967:18;;;1960:30;-1:-1:-1;;;2006:18:181;;;1999:47;2063:18;;3140:56:116::1;1746:341:181::0;3140:56:116::1;3308:16;::::0;;::::1;;::::0;-1:-1:-1;;;;;3330:10:116;;::::1;;::::0;3346:27;;::::1;;::::0;3379:29;;::::1;;::::0;3449:30;::::1;::::0;3445:88:::1;;3489:37;3509:16:::0;3489:19:::1;:37::i;:::-;3544:74;::::0;;-1:-1:-1;;;;;2350:15:181;;;2332:34;;2402:15;;;2397:2;2382:18;;2375:43;2454:15;;2434:18;;;2427:43;3544:74:116;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;2282:2:181;3544:74:116;;::::1;-1:-1:-1::0;;996:7:51;:15;;-1:-1:-1;;;;996:15:51;;;-1:-1:-1;;1056:14:114::1;:48:::0;;-1:-1:-1;;;;;;1056:48:114::1;-1:-1:-1::0;;;;;1056:48:114;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;1821:7:52;:22;7305:11:120::3;7291:25:::0;::::3;7283:50;;;::::0;-1:-1:-1;;;7283:50:120;;2683:2:181;7283:50:120::3;::::0;::::3;2665:21:181::0;2722:2;2702:18;;;2695:30;-1:-1:-1;;;2741:18:181;;;2734:42;2793:18;;7283:50:120::3;2481:336:181::0;7283:50:120::3;7361:10;7347:11;:24;7339:49;;;::::0;-1:-1:-1;;;7339:49:120;;3024:2:181;7339:49:120::3;::::0;::::3;3006:21:181::0;3063:2;3043:18;;;3036:30;-1:-1:-1;;;3082:18:181;;;3075:42;3134:18;;7339:49:120::3;2822:336:181::0;7339:49:120::3;7394:25;::::0;;;7425::::3;::::0;;;-1:-1:-1;;;;;7465:21:120;::::3;7457:46;;;::::0;-1:-1:-1;;;7457:46:120;;3365:2:181;7457:46:120::3;::::0;::::3;3347:21:181::0;3404:2;3384:18;;;3377:30;-1:-1:-1;;;3423:18:181;;;3416:42;3475:18;;7457:46:120::3;3163:336:181::0;7457:46:120::3;-1:-1:-1::0;;;;;;7509:35:120::3;;::::0;7551:11:::3;:26:::0;-1:-1:-1;791:19:118;;-1:-1:-1;802:7:118;;-1:-1:-1;;791:10:118;:19;-1:-1:-1;;;791:19:118:i;:::-;-1:-1:-1;419:32:123::1;::::0;-1:-1:-1;297:2524:125;;-1:-1:-1;;;;;;;;;;;;297:2524:125;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;5838::116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;3716:34:181;;3786:15;;;3781:2;3766:18;;3759:43;5921:57:116;;3651:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;1089:114:118:-;1160:6;;1146:30;;;3987:25:181;;;4043:2;4028:18;;4021:34;;;1146:30:118;;3960:18:181;1146:30:118;;;;;;;1182:6;:16;1089:114::o;14:167:181:-;92:13;;145:10;134:22;;124:33;;114:61;;171:1;168;161:12;114:61;14:167;;;:::o;186:177::-;265:13;;-1:-1:-1;;;;;307:31:181;;297:42;;287:70;;353:1;350;343:12;368:1032;535:6;543;551;559;567;575;583;591;599;607;615:7;624;678:3;666:9;657:7;653:23;649:33;646:53;;;695:1;692;685:12;646:53;718:39;747:9;718:39;:::i;:::-;708:49;;776:48;820:2;809:9;805:18;776:48;:::i;:::-;766:58;;843:49;888:2;877:9;873:18;843:49;:::i;:::-;833:59;;911:49;956:2;945:9;941:18;911:49;:::i;:::-;901:59;;979:50;1024:3;1013:9;1009:19;979:50;:::i;:::-;969:60;;1069:3;1058:9;1054:19;1048:26;1038:36;;1114:3;1103:9;1099:19;1093:26;1083:36;;1159:3;1148:9;1144:19;1138:26;1128:36;;1183:50;1228:3;1217:9;1213:19;1183:50;:::i;:::-;1173:60;;1252:50;1297:3;1286:9;1282:19;1252:50;:::i;:::-;1242:60;;1343:3;1332:9;1328:19;1322:26;1311:37;;1389:3;1378:9;1374:19;1368:26;1357:37;;368:1032;;;;;;;;;;;;;;:::o;3813:248::-;297:2524:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@AMB_39042":{"entryPoint":null,"id":39042,"parameterSlots":0,"returnSlots":0},"@DOMAIN_39039":{"entryPoint":null,"id":39039,"parameterSlots":0,"returnSlots":0},"@MERKLE_39550":{"entryPoint":null,"id":39550,"parameterSlots":0,"returnSlots":0},"@MIRROR_CHAIN_ID_41234":{"entryPoint":null,"id":41234,"parameterSlots":0,"returnSlots":0},"@MIRROR_DOMAIN_39048":{"entryPoint":null,"id":39048,"parameterSlots":0,"returnSlots":0},"@PROCESS_GAS_39553":{"entryPoint":null,"id":39553,"parameterSlots":0,"returnSlots":0},"@RESERVE_GAS_39556":{"entryPoint":null,"id":39556,"parameterSlots":0,"returnSlots":0},"@ROOT_MANAGER_39045":{"entryPoint":null,"id":39045,"parameterSlots":0,"returnSlots":0},"@_39157":{"entryPoint":null,"id":39157,"parameterSlots":0,"returnSlots":0},"@_getGasFromEncoded_41314":{"entryPoint":9378,"id":41314,"parameterSlots":1,"returnSlots":1},"@_getGas_39366":{"entryPoint":11717,"id":39366,"parameterSlots":1,"returnSlots":1},"@_msgSender_11496":{"entryPoint":null,"id":11496,"parameterSlots":0,"returnSlots":1},"@_nonReentrantAfter_10733":{"entryPoint":null,"id":10733,"parameterSlots":0,"returnSlots":0},"@_nonReentrantBefore_10725":{"entryPoint":7085,"id":10725,"parameterSlots":0,"returnSlots":0},"@_pause_10663":{"entryPoint":8776,"id":10663,"parameterSlots":0,"returnSlots":0},"@_processMessage_41652":{"entryPoint":6734,"id":41652,"parameterSlots":1,"returnSlots":0},"@_requireNotPaused_10636":{"entryPoint":6126,"id":10636,"parameterSlots":0,"returnSlots":0},"@_requirePaused_10647":{"entryPoint":6569,"id":10647,"parameterSlots":0,"returnSlots":0},"@_sendMessage_41610":{"entryPoint":6203,"id":41610,"parameterSlots":2,"returnSlots":0},"@_setGasCap_39346":{"entryPoint":8711,"id":39346,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":8325,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":8921,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":8843,"id":49927,"parameterSlots":1,"returnSlots":0},"@_setRateLimitBlocks_49687":{"entryPoint":9196,"id":49687,"parameterSlots":1,"returnSlots":0},"@_unpause_10679":{"entryPoint":6649,"id":10679,"parameterSlots":0,"returnSlots":0},"@_verifySender_41285":{"entryPoint":11434,"id":41285,"parameterSlots":3,"returnSlots":1},"@_verifySender_41567":{"entryPoint":9022,"id":41567,"parameterSlots":1,"returnSlots":1},"@acceptProposedOwner_49887":{"entryPoint":5267,"id":49887,"parameterSlots":0,"returnSlots":0},"@addSender_39706":{"entryPoint":5140,"id":39706,"parameterSlots":1,"returnSlots":0},"@addressToBytes32_50168":{"entryPoint":null,"id":50168,"parameterSlots":1,"returnSlots":1},"@allowlistedSenders_39581":{"entryPoint":null,"id":39581,"parameterSlots":0,"returnSlots":0},"@body_49194":{"entryPoint":11176,"id":49194,"parameterSlots":1,"returnSlots":1},"@branchRoot_48998":{"entryPoint":9769,"id":48998,"parameterSlots":3,"returnSlots":1},"@build_50565":{"entryPoint":11739,"id":50565,"parameterSlots":3,"returnSlots":1},"@bytes32ToAddress_50187":{"entryPoint":null,"id":50187,"parameterSlots":1,"returnSlots":1},"@calculateMessageRoot_40253":{"entryPoint":7174,"id":40253,"parameterSlots":3,"returnSlots":1},"@clone_51141":{"entryPoint":11222,"id":51141,"parameterSlots":1,"returnSlots":1},"@delayBlocks_39546":{"entryPoint":null,"id":39546,"parameterSlots":0,"returnSlots":0},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@destination_49143":{"entryPoint":11003,"id":49143,"parameterSlots":1,"returnSlots":1},"@dispatch_39974":{"entryPoint":5663,"id":39974,"parameterSlots":3,"returnSlots":2},"@end_50683":{"entryPoint":12618,"id":50683,"parameterSlots":1,"returnSlots":1},"@excessivelySafeCall_50045":{"entryPoint":11295,"id":50045,"parameterSlots":5,"returnSlots":2},"@formatMessage_49044":{"entryPoint":9322,"id":49044,"parameterSlots":6,"returnSlots":1},"@home_39271":{"entryPoint":null,"id":39271,"parameterSlots":0,"returnSlots":1},"@indexUint_50882":{"entryPoint":11800,"id":50882,"parameterSlots":3,"returnSlots":1},"@index_50852":{"entryPoint":11865,"id":50852,"parameterSlots":3,"returnSlots":1},"@isNotValid_50403":{"entryPoint":12675,"id":50403,"parameterSlots":1,"returnSlots":1},"@isNull_50364":{"entryPoint":null,"id":50364,"parameterSlots":1,"returnSlots":1},"@isReplica_39286":{"entryPoint":null,"id":39286,"parameterSlots":1,"returnSlots":1},"@keccak_50951":{"entryPoint":11024,"id":50951,"parameterSlots":1,"returnSlots":1},"@lastSentBlock_49642":{"entryPoint":null,"id":49642,"parameterSlots":0,"returnSlots":0},"@leftMask_50342":{"entryPoint":null,"id":50342,"parameterSlots":1,"returnSlots":1},"@len_50665":{"entryPoint":null,"id":50665,"parameterSlots":1,"returnSlots":1},"@loc_50615":{"entryPoint":null,"id":50615,"parameterSlots":1,"returnSlots":1},"@localDomain_39855":{"entryPoint":null,"id":39855,"parameterSlots":0,"returnSlots":1},"@messages_39592":{"entryPoint":null,"id":39592,"parameterSlots":0,"returnSlots":0},"@mirrorConnector_39051":{"entryPoint":null,"id":39051,"parameterSlots":0,"returnSlots":0},"@nonce_49125":{"entryPoint":11134,"id":49125,"parameterSlots":1,"returnSlots":1},"@nonces_39586":{"entryPoint":null,"id":39586,"parameterSlots":0,"returnSlots":0},"@origin_49092":{"entryPoint":11114,"id":49092,"parameterSlots":1,"returnSlots":1},"@outboundRoot_39845":{"entryPoint":4118,"id":39845,"parameterSlots":0,"returnSlots":1},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@pause_38913":{"entryPoint":4678,"id":38913,"parameterSlots":0,"returnSlots":0},"@paused_10624":{"entryPoint":null,"id":10624,"parameterSlots":0,"returnSlots":1},"@pendingAggregateRoots_39561":{"entryPoint":null,"id":39561,"parameterSlots":0,"returnSlots":0},"@processMessage_39189":{"entryPoint":3191,"id":39189,"parameterSlots":1,"returnSlots":0},"@process_40427":{"entryPoint":7592,"id":40427,"parameterSlots":1,"returnSlots":1},"@proposeNewOwner_49841":{"entryPoint":4858,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@proveAndProcess_40115":{"entryPoint":3357,"id":40115,"parameterSlots":5,"returnSlots":0},"@proveMessageRoot_40306":{"entryPoint":7341,"id":40306,"parameterSlots":4,"returnSlots":0},"@provenAggregateRoots_39566":{"entryPoint":null,"id":39566,"parameterSlots":0,"returnSlots":0},"@provenMessageRoots_39571":{"entryPoint":null,"id":39571,"parameterSlots":0,"returnSlots":0},"@rateLimitBlocks_49639":{"entryPoint":null,"id":49639,"parameterSlots":0,"returnSlots":0},"@receiveAggregateRoot_40160":{"entryPoint":9472,"id":40160,"parameterSlots":1,"returnSlots":0},"@recipientAddress_49174":{"entryPoint":11097,"id":49174,"parameterSlots":1,"returnSlots":1},"@recipient_49158":{"entryPoint":11848,"id":49158,"parameterSlots":1,"returnSlots":1},"@ref_50591":{"entryPoint":10967,"id":50591,"parameterSlots":2,"returnSlots":1},"@removePendingAggregateRoot_39792":{"entryPoint":4380,"id":39792,"parameterSlots":1,"returnSlots":0},"@removeSender_39724":{"entryPoint":5016,"id":39724,"parameterSlots":1,"returnSlots":0},"@renounceOwnership_41547":{"entryPoint":4583,"id":41547,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@sendValue_11206":{"entryPoint":8430,"id":11206,"parameterSlots":2,"returnSlots":0},"@send_39906":{"entryPoint":2711,"id":39906,"parameterSlots":1,"returnSlots":0},"@sender_49107":{"entryPoint":11155,"id":49107,"parameterSlots":1,"returnSlots":1},"@sentMessageRoots_39576":{"entryPoint":null,"id":39576,"parameterSlots":0,"returnSlots":0},"@setDelayBlocks_39750":{"entryPoint":2541,"id":39750,"parameterSlots":1,"returnSlots":0},"@setGasCap_39330":{"entryPoint":4626,"id":39330,"parameterSlots":1,"returnSlots":0},"@setMirrorConnector_39170":{"entryPoint":4063,"id":39170,"parameterSlots":1,"returnSlots":0},"@setRateLimitBlocks_39763":{"entryPoint":5611,"id":39763,"parameterSlots":1,"returnSlots":0},"@setWatcherManager_38881":{"entryPoint":5379,"id":38881,"parameterSlots":1,"returnSlots":0},"@slice_50729":{"entryPoint":12132,"id":50729,"parameterSlots":4,"returnSlots":1},"@typeOf_50601":{"entryPoint":null,"id":50601,"parameterSlots":1,"returnSlots":1},"@unpause_38893":{"entryPoint":3130,"id":38893,"parameterSlots":0,"returnSlots":0},"@unsafeBuildUnchecked_50530":{"entryPoint":12499,"id":50530,"parameterSlots":3,"returnSlots":1},"@unsafeCopyTo_51113":{"entryPoint":12256,"id":51113,"parameterSlots":2,"returnSlots":1},"@verifyAggregateRoot_40221":{"entryPoint":10615,"id":40221,"parameterSlots":1,"returnSlots":0},"@verifySender_39202":{"entryPoint":5594,"id":39202,"parameterSlots":1,"returnSlots":1},"@watcherManager_38824":{"entryPoint":null,"id":38824,"parameterSlots":0,"returnSlots":0},"@withdrawFunds_39824":{"entryPoint":4255,"id":39824,"parameterSlots":1,"returnSlots":0},"abi_decode_bytes":{"entryPoint":12782,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":13215,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":14258,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256":{"entryPoint":13038,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":13807,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32_fromMemory":{"entryPoint":13529,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_uint256_fromMemory":{"entryPoint":13895,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes_memory_ptr":{"entryPoint":12923,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":12735,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32":{"entryPoint":13269,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr":{"entryPoint":13296,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_uint32":{"entryPoint":13244,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_bytes":{"entryPoint":13419,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":13791,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":14168,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_bytes_memory_ptr_t_uint256__to_t_address_t_bytes_memory_ptr_t_uint256__fromStack_reversed":{"entryPoint":13997,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":14135,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13463,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13931,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13978,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":13616,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":13554,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed":{"entryPoint":12998,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0d5605680c5f886aed2495c7e7998d97b3239c9572097b625996bd4acc3f63dd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_599616dc1fbc723d39bc96590d652f93d467afd415e9f46bd106f14abf00049d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5bd20fa0eac50a6892371dae18efeb7d2b1c7a8479150f38626e21052ac8472c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":14088,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"access_calldata_tail_t_bytes_calldata_ptr":{"entryPoint":13713,"id":null,"parameterSlots":2,"returnSlots":2},"access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr":{"entryPoint":13680,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":13510,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint8":{"entryPoint":14312,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":13841,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint8":{"entryPoint":14287,"id":null,"parameterSlots":2,"returnSlots":1},"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32":{"entryPoint":14049,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":13383,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint32":{"entryPoint":13860,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":13488,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":12976,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":13658,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":12760,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":13194,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:26918:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"113:93:181","statements":[{"nodeType":"YulAssignment","src":"123:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"135:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"146:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"131:3:181"},"nodeType":"YulFunctionCall","src":"131:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"123:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"165:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"180:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"188:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"176:3:181"},"nodeType":"YulFunctionCall","src":"176:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"158:6:181"},"nodeType":"YulFunctionCall","src":"158:42:181"},"nodeType":"YulExpressionStatement","src":"158:42:181"}]},"name":"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"82:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"93:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"104:4:181","type":""}],"src":"14:192:181"},{"body":{"nodeType":"YulBlock","src":"281:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"327:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"336:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"339:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"329:6:181"},"nodeType":"YulFunctionCall","src":"329:12:181"},"nodeType":"YulExpressionStatement","src":"329:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"302:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"311:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"298:3:181"},"nodeType":"YulFunctionCall","src":"298:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"323:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"294:3:181"},"nodeType":"YulFunctionCall","src":"294:32:181"},"nodeType":"YulIf","src":"291:52:181"},{"nodeType":"YulAssignment","src":"352:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"375:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"362:12:181"},"nodeType":"YulFunctionCall","src":"362:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"352:6:181"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"247:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"258:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"270:6:181","type":""}],"src":"211:180:181"},{"body":{"nodeType":"YulBlock","src":"497:76:181","statements":[{"nodeType":"YulAssignment","src":"507:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"519:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"530:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"515:3:181"},"nodeType":"YulFunctionCall","src":"515:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"507:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"549:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"560:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"542:6:181"},"nodeType":"YulFunctionCall","src":"542:25:181"},"nodeType":"YulExpressionStatement","src":"542:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"466:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"477:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"488:4:181","type":""}],"src":"396:177:181"},{"body":{"nodeType":"YulBlock","src":"610:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"627:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"634:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"639:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"630:3:181"},"nodeType":"YulFunctionCall","src":"630:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"620:6:181"},"nodeType":"YulFunctionCall","src":"620:31:181"},"nodeType":"YulExpressionStatement","src":"620:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"667:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"670:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"660:6:181"},"nodeType":"YulFunctionCall","src":"660:15:181"},"nodeType":"YulExpressionStatement","src":"660:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"691:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"694:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"684:6:181"},"nodeType":"YulFunctionCall","src":"684:15:181"},"nodeType":"YulExpressionStatement","src":"684:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"578:127:181"},{"body":{"nodeType":"YulBlock","src":"762:666:181","statements":[{"body":{"nodeType":"YulBlock","src":"811:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"820:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"823:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"813:6:181"},"nodeType":"YulFunctionCall","src":"813:12:181"},"nodeType":"YulExpressionStatement","src":"813:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"790:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"798:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"786:3:181"},"nodeType":"YulFunctionCall","src":"786:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"805:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"782:3:181"},"nodeType":"YulFunctionCall","src":"782:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"775:6:181"},"nodeType":"YulFunctionCall","src":"775:35:181"},"nodeType":"YulIf","src":"772:55:181"},{"nodeType":"YulVariableDeclaration","src":"836:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"859:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"846:12:181"},"nodeType":"YulFunctionCall","src":"846:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"840:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"875:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"885:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"879:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"926:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"928:16:181"},"nodeType":"YulFunctionCall","src":"928:18:181"},"nodeType":"YulExpressionStatement","src":"928:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"918:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"922:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"915:2:181"},"nodeType":"YulFunctionCall","src":"915:10:181"},"nodeType":"YulIf","src":"912:36:181"},{"nodeType":"YulVariableDeclaration","src":"957:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"971:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"967:3:181"},"nodeType":"YulFunctionCall","src":"967:7:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"961:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"983:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1003:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"997:5:181"},"nodeType":"YulFunctionCall","src":"997:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"987:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1015:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1037:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1061:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1065:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1057:3:181"},"nodeType":"YulFunctionCall","src":"1057:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1072:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1053:3:181"},"nodeType":"YulFunctionCall","src":"1053:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"1077:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1049:3:181"},"nodeType":"YulFunctionCall","src":"1049:31:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1082:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1045:3:181"},"nodeType":"YulFunctionCall","src":"1045:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1033:3:181"},"nodeType":"YulFunctionCall","src":"1033:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1019:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1145:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1147:16:181"},"nodeType":"YulFunctionCall","src":"1147:18:181"},"nodeType":"YulExpressionStatement","src":"1147:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1104:10:181"},{"name":"_2","nodeType":"YulIdentifier","src":"1116:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1101:2:181"},"nodeType":"YulFunctionCall","src":"1101:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1124:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1136:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1121:2:181"},"nodeType":"YulFunctionCall","src":"1121:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1098:2:181"},"nodeType":"YulFunctionCall","src":"1098:46:181"},"nodeType":"YulIf","src":"1095:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1183:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1187:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1176:6:181"},"nodeType":"YulFunctionCall","src":"1176:22:181"},"nodeType":"YulExpressionStatement","src":"1176:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1214:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1222:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1207:6:181"},"nodeType":"YulFunctionCall","src":"1207:18:181"},"nodeType":"YulExpressionStatement","src":"1207:18:181"},{"body":{"nodeType":"YulBlock","src":"1273:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1282:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1285:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1275:6:181"},"nodeType":"YulFunctionCall","src":"1275:12:181"},"nodeType":"YulExpressionStatement","src":"1275:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1248:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1256:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1244:3:181"},"nodeType":"YulFunctionCall","src":"1244:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1261:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1240:3:181"},"nodeType":"YulFunctionCall","src":"1240:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"1268:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1237:2:181"},"nodeType":"YulFunctionCall","src":"1237:35:181"},"nodeType":"YulIf","src":"1234:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1315:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1323:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1311:3:181"},"nodeType":"YulFunctionCall","src":"1311:17:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1334:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1342:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1330:3:181"},"nodeType":"YulFunctionCall","src":"1330:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1349:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1298:12:181"},"nodeType":"YulFunctionCall","src":"1298:54:181"},"nodeType":"YulExpressionStatement","src":"1298:54:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1376:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1384:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1372:3:181"},"nodeType":"YulFunctionCall","src":"1372:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1389:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1368:3:181"},"nodeType":"YulFunctionCall","src":"1368:26:181"},{"kind":"number","nodeType":"YulLiteral","src":"1396:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1361:6:181"},"nodeType":"YulFunctionCall","src":"1361:37:181"},"nodeType":"YulExpressionStatement","src":"1361:37:181"},{"nodeType":"YulAssignment","src":"1407:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1416:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1407:5:181"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"736:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"744:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"752:5:181","type":""}],"src":"710:718:181"},{"body":{"nodeType":"YulBlock","src":"1512:241:181","statements":[{"body":{"nodeType":"YulBlock","src":"1558:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1567:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1570:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1560:6:181"},"nodeType":"YulFunctionCall","src":"1560:12:181"},"nodeType":"YulExpressionStatement","src":"1560:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1533:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1542:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1529:3:181"},"nodeType":"YulFunctionCall","src":"1529:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1554:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1525:3:181"},"nodeType":"YulFunctionCall","src":"1525:32:181"},"nodeType":"YulIf","src":"1522:52:181"},{"nodeType":"YulVariableDeclaration","src":"1583:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1610:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1597:12:181"},"nodeType":"YulFunctionCall","src":"1597:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1587:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1663:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1672:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1675:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1665:6:181"},"nodeType":"YulFunctionCall","src":"1665:12:181"},"nodeType":"YulExpressionStatement","src":"1665:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1635:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1643:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1632:2:181"},"nodeType":"YulFunctionCall","src":"1632:30:181"},"nodeType":"YulIf","src":"1629:50:181"},{"nodeType":"YulAssignment","src":"1688:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1719:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1730:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1715:3:181"},"nodeType":"YulFunctionCall","src":"1715:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1739:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"1698:16:181"},"nodeType":"YulFunctionCall","src":"1698:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1688:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1478:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1489:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1501:6:181","type":""}],"src":"1433:320:181"},{"body":{"nodeType":"YulBlock","src":"1828:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"1874:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1883:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1886:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1876:6:181"},"nodeType":"YulFunctionCall","src":"1876:12:181"},"nodeType":"YulExpressionStatement","src":"1876:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1849:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1858:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1845:3:181"},"nodeType":"YulFunctionCall","src":"1845:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1870:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1841:3:181"},"nodeType":"YulFunctionCall","src":"1841:32:181"},"nodeType":"YulIf","src":"1838:52:181"},{"nodeType":"YulAssignment","src":"1899:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1922:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1909:12:181"},"nodeType":"YulFunctionCall","src":"1909:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1899:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1794:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1805:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1817:6:181","type":""}],"src":"1758:180:181"},{"body":{"nodeType":"YulBlock","src":"1975:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1992:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1999:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2004:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1995:3:181"},"nodeType":"YulFunctionCall","src":"1995:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1985:6:181"},"nodeType":"YulFunctionCall","src":"1985:31:181"},"nodeType":"YulExpressionStatement","src":"1985:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2032:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2035:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2025:6:181"},"nodeType":"YulFunctionCall","src":"2025:15:181"},"nodeType":"YulExpressionStatement","src":"2025:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2056:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2059:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2049:6:181"},"nodeType":"YulFunctionCall","src":"2049:15:181"},"nodeType":"YulExpressionStatement","src":"2049:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"1943:127:181"},{"body":{"nodeType":"YulBlock","src":"2193:229:181","statements":[{"nodeType":"YulAssignment","src":"2203:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2215:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2226:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2211:3:181"},"nodeType":"YulFunctionCall","src":"2211:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2203:4:181"}]},{"body":{"nodeType":"YulBlock","src":"2271:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2292:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2299:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2304:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2295:3:181"},"nodeType":"YulFunctionCall","src":"2295:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2285:6:181"},"nodeType":"YulFunctionCall","src":"2285:31:181"},"nodeType":"YulExpressionStatement","src":"2285:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2336:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2339:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2329:6:181"},"nodeType":"YulFunctionCall","src":"2329:15:181"},"nodeType":"YulExpressionStatement","src":"2329:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2364:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2367:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2357:6:181"},"nodeType":"YulFunctionCall","src":"2357:15:181"},"nodeType":"YulExpressionStatement","src":"2357:15:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2251:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2259:1:181","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2248:2:181"},"nodeType":"YulFunctionCall","src":"2248:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2241:6:181"},"nodeType":"YulFunctionCall","src":"2241:21:181"},"nodeType":"YulIf","src":"2238:144:181"},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2398:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"2409:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2391:6:181"},"nodeType":"YulFunctionCall","src":"2391:25:181"},"nodeType":"YulExpressionStatement","src":"2391:25:181"}]},"name":"abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2162:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2173:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2184:4:181","type":""}],"src":"2075:347:181"},{"body":{"nodeType":"YulBlock","src":"2522:92:181","statements":[{"nodeType":"YulAssignment","src":"2532:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2544:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2555:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2540:3:181"},"nodeType":"YulFunctionCall","src":"2540:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2532:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2574:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2599:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2592:6:181"},"nodeType":"YulFunctionCall","src":"2592:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2585:6:181"},"nodeType":"YulFunctionCall","src":"2585:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2567:6:181"},"nodeType":"YulFunctionCall","src":"2567:41:181"},"nodeType":"YulExpressionStatement","src":"2567:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2491:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2502:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2513:4:181","type":""}],"src":"2427:187:181"},{"body":{"nodeType":"YulBlock","src":"2827:724:181","statements":[{"body":{"nodeType":"YulBlock","src":"2875:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2884:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2887:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2877:6:181"},"nodeType":"YulFunctionCall","src":"2877:12:181"},"nodeType":"YulExpressionStatement","src":"2877:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2848:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2857:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2844:3:181"},"nodeType":"YulFunctionCall","src":"2844:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2869:4:181","type":"","value":"1120"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2840:3:181"},"nodeType":"YulFunctionCall","src":"2840:34:181"},"nodeType":"YulIf","src":"2837:54:181"},{"nodeType":"YulVariableDeclaration","src":"2900:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2927:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2914:12:181"},"nodeType":"YulFunctionCall","src":"2914:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2904:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2946:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2956:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2950:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3001:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3010:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3013:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3003:6:181"},"nodeType":"YulFunctionCall","src":"3003:12:181"},"nodeType":"YulExpressionStatement","src":"3003:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2989:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2997:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2986:2:181"},"nodeType":"YulFunctionCall","src":"2986:14:181"},"nodeType":"YulIf","src":"2983:34:181"},{"nodeType":"YulVariableDeclaration","src":"3026:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3040:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"3051:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3036:3:181"},"nodeType":"YulFunctionCall","src":"3036:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"3030:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3106:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3115:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3118:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3108:6:181"},"nodeType":"YulFunctionCall","src":"3108:12:181"},"nodeType":"YulExpressionStatement","src":"3108:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3085:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3089:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3081:3:181"},"nodeType":"YulFunctionCall","src":"3081:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3096:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3077:3:181"},"nodeType":"YulFunctionCall","src":"3077:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3070:6:181"},"nodeType":"YulFunctionCall","src":"3070:35:181"},"nodeType":"YulIf","src":"3067:55:181"},{"nodeType":"YulVariableDeclaration","src":"3131:30:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3158:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3145:12:181"},"nodeType":"YulFunctionCall","src":"3145:16:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3135:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3188:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3197:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3200:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3190:6:181"},"nodeType":"YulFunctionCall","src":"3190:12:181"},"nodeType":"YulExpressionStatement","src":"3190:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3176:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3184:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3173:2:181"},"nodeType":"YulFunctionCall","src":"3173:14:181"},"nodeType":"YulIf","src":"3170:34:181"},{"body":{"nodeType":"YulBlock","src":"3264:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3273:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3276:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3266:6:181"},"nodeType":"YulFunctionCall","src":"3266:12:181"},"nodeType":"YulExpressionStatement","src":"3266:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3227:2:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3235:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"3238:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3231:3:181"},"nodeType":"YulFunctionCall","src":"3231:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3223:3:181"},"nodeType":"YulFunctionCall","src":"3223:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3248:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3219:3:181"},"nodeType":"YulFunctionCall","src":"3219:34:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3255:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3216:2:181"},"nodeType":"YulFunctionCall","src":"3216:47:181"},"nodeType":"YulIf","src":"3213:67:181"},{"nodeType":"YulAssignment","src":"3289:23:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3303:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3307:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3299:3:181"},"nodeType":"YulFunctionCall","src":"3299:13:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3289:6:181"}]},{"nodeType":"YulAssignment","src":"3321:16:181","value":{"name":"length","nodeType":"YulIdentifier","src":"3331:6:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3321:6:181"}]},{"nodeType":"YulAssignment","src":"3346:44:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3373:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3384:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3369:3:181"},"nodeType":"YulFunctionCall","src":"3369:20:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3356:12:181"},"nodeType":"YulFunctionCall","src":"3356:34:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3346:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3399:30:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3413:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3424:4:181","type":"","value":"1088"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3409:3:181"},"nodeType":"YulFunctionCall","src":"3409:20:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"3403:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3457:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3466:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3469:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3459:6:181"},"nodeType":"YulFunctionCall","src":"3459:12:181"},"nodeType":"YulExpressionStatement","src":"3459:12:181"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3444:2:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3448:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3441:2:181"},"nodeType":"YulFunctionCall","src":"3441:15:181"},"nodeType":"YulIf","src":"3438:35:181"},{"nodeType":"YulAssignment","src":"3482:28:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3496:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3507:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3492:3:181"},"nodeType":"YulFunctionCall","src":"3492:18:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3482:6:181"}]},{"nodeType":"YulAssignment","src":"3519:26:181","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3542:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3529:12:181"},"nodeType":"YulFunctionCall","src":"3529:16:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3519:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2761:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2772:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2784:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2792:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2800:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2808:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2816:6:181","type":""}],"src":"2619:932:181"},{"body":{"nodeType":"YulBlock","src":"3601:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"3665:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3674:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3677:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3667:6:181"},"nodeType":"YulFunctionCall","src":"3667:12:181"},"nodeType":"YulExpressionStatement","src":"3667:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3624:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3635:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3650:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3655:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3646:3:181"},"nodeType":"YulFunctionCall","src":"3646:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3659:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3642:3:181"},"nodeType":"YulFunctionCall","src":"3642:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3631:3:181"},"nodeType":"YulFunctionCall","src":"3631:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3621:2:181"},"nodeType":"YulFunctionCall","src":"3621:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3614:6:181"},"nodeType":"YulFunctionCall","src":"3614:50:181"},"nodeType":"YulIf","src":"3611:70:181"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3590:5:181","type":""}],"src":"3556:131:181"},{"body":{"nodeType":"YulBlock","src":"3762:177:181","statements":[{"body":{"nodeType":"YulBlock","src":"3808:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3817:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3820:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3810:6:181"},"nodeType":"YulFunctionCall","src":"3810:12:181"},"nodeType":"YulExpressionStatement","src":"3810:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3783:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3792:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3779:3:181"},"nodeType":"YulFunctionCall","src":"3779:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3804:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3775:3:181"},"nodeType":"YulFunctionCall","src":"3775:32:181"},"nodeType":"YulIf","src":"3772:52:181"},{"nodeType":"YulVariableDeclaration","src":"3833:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3859:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3846:12:181"},"nodeType":"YulFunctionCall","src":"3846:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3837:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3903:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3878:24:181"},"nodeType":"YulFunctionCall","src":"3878:31:181"},"nodeType":"YulExpressionStatement","src":"3878:31:181"},{"nodeType":"YulAssignment","src":"3918:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"3928:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3918:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3728:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3739:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3751:6:181","type":""}],"src":"3692:247:181"},{"body":{"nodeType":"YulBlock","src":"4045:102:181","statements":[{"nodeType":"YulAssignment","src":"4055:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4067:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4078:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4063:3:181"},"nodeType":"YulFunctionCall","src":"4063:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4055:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4097:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4112:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4128:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4133:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4124:3:181"},"nodeType":"YulFunctionCall","src":"4124:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4137:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4120:3:181"},"nodeType":"YulFunctionCall","src":"4120:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4108:3:181"},"nodeType":"YulFunctionCall","src":"4108:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4090:6:181"},"nodeType":"YulFunctionCall","src":"4090:51:181"},"nodeType":"YulExpressionStatement","src":"4090:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4014:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4025:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4036:4:181","type":""}],"src":"3944:203:181"},{"body":{"nodeType":"YulBlock","src":"4253:76:181","statements":[{"nodeType":"YulAssignment","src":"4263:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4275:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4286:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4271:3:181"},"nodeType":"YulFunctionCall","src":"4271:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4263:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4305:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"4316:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4298:6:181"},"nodeType":"YulFunctionCall","src":"4298:25:181"},"nodeType":"YulExpressionStatement","src":"4298:25:181"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4222:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4233:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4244:4:181","type":""}],"src":"4152:177:181"},{"body":{"nodeType":"YulBlock","src":"4452:102:181","statements":[{"nodeType":"YulAssignment","src":"4462:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4474:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4485:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4470:3:181"},"nodeType":"YulFunctionCall","src":"4470:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4462:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4504:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4519:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4535:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4540:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4531:3:181"},"nodeType":"YulFunctionCall","src":"4531:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4544:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4527:3:181"},"nodeType":"YulFunctionCall","src":"4527:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4515:3:181"},"nodeType":"YulFunctionCall","src":"4515:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4497:6:181"},"nodeType":"YulFunctionCall","src":"4497:51:181"},"nodeType":"YulExpressionStatement","src":"4497:51:181"}]},"name":"abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4421:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4432:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4443:4:181","type":""}],"src":"4334:220:181"},{"body":{"nodeType":"YulBlock","src":"4687:102:181","statements":[{"nodeType":"YulAssignment","src":"4697:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4709:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4720:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4705:3:181"},"nodeType":"YulFunctionCall","src":"4705:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4697:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4739:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4754:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4770:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4775:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4766:3:181"},"nodeType":"YulFunctionCall","src":"4766:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4779:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4762:3:181"},"nodeType":"YulFunctionCall","src":"4762:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4750:3:181"},"nodeType":"YulFunctionCall","src":"4750:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4732:6:181"},"nodeType":"YulFunctionCall","src":"4732:51:181"},"nodeType":"YulExpressionStatement","src":"4732:51:181"}]},"name":"abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4656:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4667:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4678:4:181","type":""}],"src":"4559:230:181"},{"body":{"nodeType":"YulBlock","src":"4919:102:181","statements":[{"nodeType":"YulAssignment","src":"4929:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4941:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4952:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4937:3:181"},"nodeType":"YulFunctionCall","src":"4937:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4929:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4971:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4986:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5002:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5007:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4998:3:181"},"nodeType":"YulFunctionCall","src":"4998:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5011:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4994:3:181"},"nodeType":"YulFunctionCall","src":"4994:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4982:3:181"},"nodeType":"YulFunctionCall","src":"4982:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4964:6:181"},"nodeType":"YulFunctionCall","src":"4964:51:181"},"nodeType":"YulExpressionStatement","src":"4964:51:181"}]},"name":"abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4888:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4899:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4910:4:181","type":""}],"src":"4794:227:181"},{"body":{"nodeType":"YulBlock","src":"5074:115:181","statements":[{"nodeType":"YulAssignment","src":"5084:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5106:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5093:12:181"},"nodeType":"YulFunctionCall","src":"5093:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"5084:5:181"}]},{"body":{"nodeType":"YulBlock","src":"5167:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5176:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5179:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5169:6:181"},"nodeType":"YulFunctionCall","src":"5169:12:181"},"nodeType":"YulExpressionStatement","src":"5169:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5135:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5146:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5153:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5142:3:181"},"nodeType":"YulFunctionCall","src":"5142:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5132:2:181"},"nodeType":"YulFunctionCall","src":"5132:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5125:6:181"},"nodeType":"YulFunctionCall","src":"5125:41:181"},"nodeType":"YulIf","src":"5122:61:181"}]},"name":"abi_decode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"5053:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"5064:5:181","type":""}],"src":"5026:163:181"},{"body":{"nodeType":"YulBlock","src":"5263:115:181","statements":[{"body":{"nodeType":"YulBlock","src":"5309:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5318:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5321:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5311:6:181"},"nodeType":"YulFunctionCall","src":"5311:12:181"},"nodeType":"YulExpressionStatement","src":"5311:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5284:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5293:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5280:3:181"},"nodeType":"YulFunctionCall","src":"5280:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5305:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5276:3:181"},"nodeType":"YulFunctionCall","src":"5276:32:181"},"nodeType":"YulIf","src":"5273:52:181"},{"nodeType":"YulAssignment","src":"5334:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5362:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"5344:17:181"},"nodeType":"YulFunctionCall","src":"5344:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5334:6:181"}]}]},"name":"abi_decode_tuple_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5229:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5240:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5252:6:181","type":""}],"src":"5194:184:181"},{"body":{"nodeType":"YulBlock","src":"5495:348:181","statements":[{"body":{"nodeType":"YulBlock","src":"5541:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5550:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5553:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5543:6:181"},"nodeType":"YulFunctionCall","src":"5543:12:181"},"nodeType":"YulExpressionStatement","src":"5543:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5516:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5525:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5512:3:181"},"nodeType":"YulFunctionCall","src":"5512:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5537:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5508:3:181"},"nodeType":"YulFunctionCall","src":"5508:32:181"},"nodeType":"YulIf","src":"5505:52:181"},{"nodeType":"YulAssignment","src":"5566:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5594:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"5576:17:181"},"nodeType":"YulFunctionCall","src":"5576:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5566:6:181"}]},{"nodeType":"YulAssignment","src":"5613:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5640:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5651:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5636:3:181"},"nodeType":"YulFunctionCall","src":"5636:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5623:12:181"},"nodeType":"YulFunctionCall","src":"5623:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5613:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"5664:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5695:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5706:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5691:3:181"},"nodeType":"YulFunctionCall","src":"5691:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5678:12:181"},"nodeType":"YulFunctionCall","src":"5678:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"5668:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5753:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5762:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5765:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5755:6:181"},"nodeType":"YulFunctionCall","src":"5755:12:181"},"nodeType":"YulExpressionStatement","src":"5755:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5725:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5733:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5722:2:181"},"nodeType":"YulFunctionCall","src":"5722:30:181"},"nodeType":"YulIf","src":"5719:50:181"},{"nodeType":"YulAssignment","src":"5778:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5809:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"5820:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5805:3:181"},"nodeType":"YulFunctionCall","src":"5805:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5829:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"5788:16:181"},"nodeType":"YulFunctionCall","src":"5788:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5778:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5445:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5456:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5468:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5476:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5484:6:181","type":""}],"src":"5383:460:181"},{"body":{"nodeType":"YulBlock","src":"5914:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"5924:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"5933:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"5928:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5993:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6018:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"6023:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6014:3:181"},"nodeType":"YulFunctionCall","src":"6014:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"6037:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"6042:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6033:3:181"},"nodeType":"YulFunctionCall","src":"6033:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6027:5:181"},"nodeType":"YulFunctionCall","src":"6027:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6007:6:181"},"nodeType":"YulFunctionCall","src":"6007:39:181"},"nodeType":"YulExpressionStatement","src":"6007:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5954:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"5957:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5951:2:181"},"nodeType":"YulFunctionCall","src":"5951:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5965:19:181","statements":[{"nodeType":"YulAssignment","src":"5967:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5976:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"5979:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5972:3:181"},"nodeType":"YulFunctionCall","src":"5972:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"5967:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"5947:3:181","statements":[]},"src":"5943:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6076:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"6081:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6072:3:181"},"nodeType":"YulFunctionCall","src":"6072:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"6090:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6065:6:181"},"nodeType":"YulFunctionCall","src":"6065:27:181"},"nodeType":"YulExpressionStatement","src":"6065:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"5892:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"5897:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"5902:6:181","type":""}],"src":"5848:250:181"},{"body":{"nodeType":"YulBlock","src":"6152:221:181","statements":[{"nodeType":"YulVariableDeclaration","src":"6162:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6182:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6176:5:181"},"nodeType":"YulFunctionCall","src":"6176:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"6166:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6204:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"6209:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6197:6:181"},"nodeType":"YulFunctionCall","src":"6197:19:181"},"nodeType":"YulExpressionStatement","src":"6197:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6264:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"6271:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6260:3:181"},"nodeType":"YulFunctionCall","src":"6260:16:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6282:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"6287:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6278:3:181"},"nodeType":"YulFunctionCall","src":"6278:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"6294:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"6225:34:181"},"nodeType":"YulFunctionCall","src":"6225:76:181"},"nodeType":"YulExpressionStatement","src":"6225:76:181"},{"nodeType":"YulAssignment","src":"6310:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6325:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6338:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6346:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6334:3:181"},"nodeType":"YulFunctionCall","src":"6334:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6355:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6351:3:181"},"nodeType":"YulFunctionCall","src":"6351:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6330:3:181"},"nodeType":"YulFunctionCall","src":"6330:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6321:3:181"},"nodeType":"YulFunctionCall","src":"6321:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"6362:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6317:3:181"},"nodeType":"YulFunctionCall","src":"6317:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"6310:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"6129:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"6136:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"6144:3:181","type":""}],"src":"6103:270:181"},{"body":{"nodeType":"YulBlock","src":"6525:141:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6542:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"6553:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6535:6:181"},"nodeType":"YulFunctionCall","src":"6535:25:181"},"nodeType":"YulExpressionStatement","src":"6535:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6580:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6591:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6576:3:181"},"nodeType":"YulFunctionCall","src":"6576:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6596:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6569:6:181"},"nodeType":"YulFunctionCall","src":"6569:30:181"},"nodeType":"YulExpressionStatement","src":"6569:30:181"},{"nodeType":"YulAssignment","src":"6608:52:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6633:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6645:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6656:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6641:3:181"},"nodeType":"YulFunctionCall","src":"6641:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"6616:16:181"},"nodeType":"YulFunctionCall","src":"6616:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6608:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6486:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6497:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6505:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6516:4:181","type":""}],"src":"6378:288:181"},{"body":{"nodeType":"YulBlock","src":"6845:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6862:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6873:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6855:6:181"},"nodeType":"YulFunctionCall","src":"6855:21:181"},"nodeType":"YulExpressionStatement","src":"6855:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6896:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6907:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6892:3:181"},"nodeType":"YulFunctionCall","src":"6892:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6912:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6885:6:181"},"nodeType":"YulFunctionCall","src":"6885:30:181"},"nodeType":"YulExpressionStatement","src":"6885:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6935:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6946:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6931:3:181"},"nodeType":"YulFunctionCall","src":"6931:18:181"},{"hexValue":"2164656c6179426c6f636b73","kind":"string","nodeType":"YulLiteral","src":"6951:14:181","type":"","value":"!delayBlocks"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6924:6:181"},"nodeType":"YulFunctionCall","src":"6924:42:181"},"nodeType":"YulExpressionStatement","src":"6924:42:181"},{"nodeType":"YulAssignment","src":"6975:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6987:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6998:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6983:3:181"},"nodeType":"YulFunctionCall","src":"6983:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6975:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6822:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6836:4:181","type":""}],"src":"6671:336:181"},{"body":{"nodeType":"YulBlock","src":"7044:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7061:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7068:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"7073:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7064:3:181"},"nodeType":"YulFunctionCall","src":"7064:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7054:6:181"},"nodeType":"YulFunctionCall","src":"7054:31:181"},"nodeType":"YulExpressionStatement","src":"7054:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7101:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7104:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7094:6:181"},"nodeType":"YulFunctionCall","src":"7094:15:181"},"nodeType":"YulExpressionStatement","src":"7094:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7125:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7128:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7118:6:181"},"nodeType":"YulFunctionCall","src":"7118:15:181"},"nodeType":"YulExpressionStatement","src":"7118:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"7012:127:181"},{"body":{"nodeType":"YulBlock","src":"7192:77:181","statements":[{"nodeType":"YulAssignment","src":"7202:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7213:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"7216:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7209:3:181"},"nodeType":"YulFunctionCall","src":"7209:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"7202:3:181"}]},{"body":{"nodeType":"YulBlock","src":"7241:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7243:16:181"},"nodeType":"YulFunctionCall","src":"7243:18:181"},"nodeType":"YulExpressionStatement","src":"7243:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7233:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"7236:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7230:2:181"},"nodeType":"YulFunctionCall","src":"7230:10:181"},"nodeType":"YulIf","src":"7227:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"7175:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"7178:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"7184:3:181","type":""}],"src":"7144:125:181"},{"body":{"nodeType":"YulBlock","src":"7355:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"7401:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7410:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7413:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7403:6:181"},"nodeType":"YulFunctionCall","src":"7403:12:181"},"nodeType":"YulExpressionStatement","src":"7403:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7376:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7385:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7372:3:181"},"nodeType":"YulFunctionCall","src":"7372:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7397:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7368:3:181"},"nodeType":"YulFunctionCall","src":"7368:32:181"},"nodeType":"YulIf","src":"7365:52:181"},{"nodeType":"YulAssignment","src":"7426:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7442:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7436:5:181"},"nodeType":"YulFunctionCall","src":"7436:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7426:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7321:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7332:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7344:6:181","type":""}],"src":"7274:184:181"},{"body":{"nodeType":"YulBlock","src":"7637:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7654:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7665:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7647:6:181"},"nodeType":"YulFunctionCall","src":"7647:21:181"},"nodeType":"YulExpressionStatement","src":"7647:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7688:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7699:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7684:3:181"},"nodeType":"YulFunctionCall","src":"7684:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7704:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7677:6:181"},"nodeType":"YulFunctionCall","src":"7677:30:181"},"nodeType":"YulExpressionStatement","src":"7677:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7727:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7738:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7723:3:181"},"nodeType":"YulFunctionCall","src":"7723:18:181"},{"hexValue":"726f6f7420616c72656164792073656e74","kind":"string","nodeType":"YulLiteral","src":"7743:19:181","type":"","value":"root already sent"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7716:6:181"},"nodeType":"YulFunctionCall","src":"7716:47:181"},"nodeType":"YulExpressionStatement","src":"7716:47:181"},{"nodeType":"YulAssignment","src":"7772:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7784:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7795:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7780:3:181"},"nodeType":"YulFunctionCall","src":"7780:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7772:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7614:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7628:4:181","type":""}],"src":"7463:341:181"},{"body":{"nodeType":"YulBlock","src":"7928:63:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7945:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"7950:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7938:6:181"},"nodeType":"YulFunctionCall","src":"7938:19:181"},"nodeType":"YulExpressionStatement","src":"7938:19:181"},{"nodeType":"YulAssignment","src":"7966:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7977:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"7982:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7973:3:181"},"nodeType":"YulFunctionCall","src":"7973:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"7966:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"7904:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7909:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"7920:3:181","type":""}],"src":"7809:182:181"},{"body":{"nodeType":"YulBlock","src":"8189:281:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8206:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8217:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8199:6:181"},"nodeType":"YulFunctionCall","src":"8199:21:181"},"nodeType":"YulExpressionStatement","src":"8199:21:181"},{"nodeType":"YulVariableDeclaration","src":"8229:58:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8260:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8272:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8283:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8268:3:181"},"nodeType":"YulFunctionCall","src":"8268:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"8243:16:181"},"nodeType":"YulFunctionCall","src":"8243:44:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"8233:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8307:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8318:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8303:3:181"},"nodeType":"YulFunctionCall","src":"8303:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"8327:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8335:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8323:3:181"},"nodeType":"YulFunctionCall","src":"8323:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8296:6:181"},"nodeType":"YulFunctionCall","src":"8296:50:181"},"nodeType":"YulExpressionStatement","src":"8296:50:181"},{"nodeType":"YulAssignment","src":"8355:40:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"8380:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"8388:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"8363:16:181"},"nodeType":"YulFunctionCall","src":"8363:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8355:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8415:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8426:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8411:3:181"},"nodeType":"YulFunctionCall","src":"8411:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"8435:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8451:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"8456:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8447:3:181"},"nodeType":"YulFunctionCall","src":"8447:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"8460:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8443:3:181"},"nodeType":"YulFunctionCall","src":"8443:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8431:3:181"},"nodeType":"YulFunctionCall","src":"8431:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8404:6:181"},"nodeType":"YulFunctionCall","src":"8404:60:181"},"nodeType":"YulExpressionStatement","src":"8404:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8142:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8153:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8161:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8169:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8180:4:181","type":""}],"src":"7996:474:181"},{"body":{"nodeType":"YulBlock","src":"8649:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8666:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8677:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8659:6:181"},"nodeType":"YulFunctionCall","src":"8659:21:181"},"nodeType":"YulExpressionStatement","src":"8659:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8700:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8711:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8696:3:181"},"nodeType":"YulFunctionCall","src":"8696:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8716:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8689:6:181"},"nodeType":"YulFunctionCall","src":"8689:29:181"},"nodeType":"YulExpressionStatement","src":"8689:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8738:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8749:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8734:3:181"},"nodeType":"YulFunctionCall","src":"8734:18:181"},{"hexValue":"21414d42","kind":"string","nodeType":"YulLiteral","src":"8754:6:181","type":"","value":"!AMB"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8727:6:181"},"nodeType":"YulFunctionCall","src":"8727:34:181"},"nodeType":"YulExpressionStatement","src":"8727:34:181"},{"nodeType":"YulAssignment","src":"8770:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8782:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8793:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8778:3:181"},"nodeType":"YulFunctionCall","src":"8778:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8770:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8626:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8640:4:181","type":""}],"src":"8475:327:181"},{"body":{"nodeType":"YulBlock","src":"8954:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8971:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8982:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8964:6:181"},"nodeType":"YulFunctionCall","src":"8964:21:181"},"nodeType":"YulExpressionStatement","src":"8964:21:181"},{"nodeType":"YulAssignment","src":"8994:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9019:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9031:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9042:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9027:3:181"},"nodeType":"YulFunctionCall","src":"9027:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"9002:16:181"},"nodeType":"YulFunctionCall","src":"9002:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8994:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9066:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9077:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9062:3:181"},"nodeType":"YulFunctionCall","src":"9062:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9086:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9102:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"9107:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9098:3:181"},"nodeType":"YulFunctionCall","src":"9098:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"9111:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9094:3:181"},"nodeType":"YulFunctionCall","src":"9094:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9082:3:181"},"nodeType":"YulFunctionCall","src":"9082:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9055:6:181"},"nodeType":"YulFunctionCall","src":"9055:60:181"},"nodeType":"YulExpressionStatement","src":"9055:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8915:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8926:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8934:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8945:4:181","type":""}],"src":"8807:314:181"},{"body":{"nodeType":"YulBlock","src":"9300:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9317:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9328:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9310:6:181"},"nodeType":"YulFunctionCall","src":"9310:21:181"},"nodeType":"YulExpressionStatement","src":"9310:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9351:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9362:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9347:3:181"},"nodeType":"YulFunctionCall","src":"9347:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9367:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9340:6:181"},"nodeType":"YulFunctionCall","src":"9340:29:181"},"nodeType":"YulExpressionStatement","src":"9340:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9389:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9400:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9385:3:181"},"nodeType":"YulFunctionCall","src":"9385:18:181"},{"hexValue":"2170726f6f6673","kind":"string","nodeType":"YulLiteral","src":"9405:9:181","type":"","value":"!proofs"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9378:6:181"},"nodeType":"YulFunctionCall","src":"9378:37:181"},"nodeType":"YulExpressionStatement","src":"9378:37:181"},{"nodeType":"YulAssignment","src":"9424:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9436:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9447:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9432:3:181"},"nodeType":"YulFunctionCall","src":"9432:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9424:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9277:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9291:4:181","type":""}],"src":"9126:330:181"},{"body":{"nodeType":"YulBlock","src":"9493:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9510:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9517:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"9522:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9513:3:181"},"nodeType":"YulFunctionCall","src":"9513:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9503:6:181"},"nodeType":"YulFunctionCall","src":"9503:31:181"},"nodeType":"YulExpressionStatement","src":"9503:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9550:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"9553:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9543:6:181"},"nodeType":"YulFunctionCall","src":"9543:15:181"},"nodeType":"YulExpressionStatement","src":"9543:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9574:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9577:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9567:6:181"},"nodeType":"YulFunctionCall","src":"9567:15:181"},"nodeType":"YulExpressionStatement","src":"9567:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"9461:127:181"},{"body":{"nodeType":"YulBlock","src":"9694:224:181","statements":[{"nodeType":"YulVariableDeclaration","src":"9704:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"9743:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9730:12:181"},"nodeType":"YulFunctionCall","src":"9730:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"9708:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9846:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9855:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9858:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9848:6:181"},"nodeType":"YulFunctionCall","src":"9848:12:181"},"nodeType":"YulExpressionStatement","src":"9848:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"9778:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"9806:12:181"},"nodeType":"YulFunctionCall","src":"9806:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"9822:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9802:3:181"},"nodeType":"YulFunctionCall","src":"9802:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9837:4:181","type":"","value":"1086"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"9833:3:181"},"nodeType":"YulFunctionCall","src":"9833:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9798:3:181"},"nodeType":"YulFunctionCall","src":"9798:45:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9774:3:181"},"nodeType":"YulFunctionCall","src":"9774:70:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9767:6:181"},"nodeType":"YulFunctionCall","src":"9767:78:181"},"nodeType":"YulIf","src":"9764:98:181"},{"nodeType":"YulAssignment","src":"9871:41:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"9883:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"9893:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9879:3:181"},"nodeType":"YulFunctionCall","src":"9879:33:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"9871:4:181"}]}]},"name":"access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"9659:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"9669:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"9685:4:181","type":""}],"src":"9593:325:181"},{"body":{"nodeType":"YulBlock","src":"10017:427:181","statements":[{"nodeType":"YulVariableDeclaration","src":"10027:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"10066:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10053:12:181"},"nodeType":"YulFunctionCall","src":"10053:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"10031:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10167:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10176:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10179:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10169:6:181"},"nodeType":"YulFunctionCall","src":"10169:12:181"},"nodeType":"YulExpressionStatement","src":"10169:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10101:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"10129:12:181"},"nodeType":"YulFunctionCall","src":"10129:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"10145:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10125:3:181"},"nodeType":"YulFunctionCall","src":"10125:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10160:2:181","type":"","value":"30"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10156:3:181"},"nodeType":"YulFunctionCall","src":"10156:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10121:3:181"},"nodeType":"YulFunctionCall","src":"10121:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10097:3:181"},"nodeType":"YulFunctionCall","src":"10097:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10090:6:181"},"nodeType":"YulFunctionCall","src":"10090:76:181"},"nodeType":"YulIf","src":"10087:96:181"},{"nodeType":"YulVariableDeclaration","src":"10192:47:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"10210:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10220:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10206:3:181"},"nodeType":"YulFunctionCall","src":"10206:33:181"},"variables":[{"name":"addr_1","nodeType":"YulTypedName","src":"10196:6:181","type":""}]},{"nodeType":"YulAssignment","src":"10248:30:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"10271:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10258:12:181"},"nodeType":"YulFunctionCall","src":"10258:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"10248:6:181"}]},{"body":{"nodeType":"YulBlock","src":"10321:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10330:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10333:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10323:6:181"},"nodeType":"YulFunctionCall","src":"10323:12:181"},"nodeType":"YulExpressionStatement","src":"10323:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"10293:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10301:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10290:2:181"},"nodeType":"YulFunctionCall","src":"10290:30:181"},"nodeType":"YulIf","src":"10287:50:181"},{"nodeType":"YulAssignment","src":"10346:25:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"10358:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10366:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10354:3:181"},"nodeType":"YulFunctionCall","src":"10354:17:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"10346:4:181"}]},{"body":{"nodeType":"YulBlock","src":"10422:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10431:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10434:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10424:6:181"},"nodeType":"YulFunctionCall","src":"10424:12:181"},"nodeType":"YulExpressionStatement","src":"10424:12:181"}]},"condition":{"arguments":[{"name":"addr","nodeType":"YulIdentifier","src":"10387:4:181"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"10397:12:181"},"nodeType":"YulFunctionCall","src":"10397:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"10413:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10393:3:181"},"nodeType":"YulFunctionCall","src":"10393:27:181"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"10383:3:181"},"nodeType":"YulFunctionCall","src":"10383:38:181"},"nodeType":"YulIf","src":"10380:58:181"}]},"name":"access_calldata_tail_t_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"9974:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"9984:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"10000:4:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"10006:6:181","type":""}],"src":"9923:521:181"},{"body":{"nodeType":"YulBlock","src":"10596:124:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10619:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"10624:6:181"},{"name":"value1","nodeType":"YulIdentifier","src":"10632:6:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"10606:12:181"},"nodeType":"YulFunctionCall","src":"10606:33:181"},"nodeType":"YulExpressionStatement","src":"10606:33:181"},{"nodeType":"YulVariableDeclaration","src":"10648:26:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10662:3:181"},{"name":"value1","nodeType":"YulIdentifier","src":"10667:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10658:3:181"},"nodeType":"YulFunctionCall","src":"10658:16:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10652:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"10690:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"10694:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10683:6:181"},"nodeType":"YulFunctionCall","src":"10683:13:181"},"nodeType":"YulExpressionStatement","src":"10683:13:181"},{"nodeType":"YulAssignment","src":"10705:9:181","value":{"name":"_1","nodeType":"YulIdentifier","src":"10712:2:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"10705:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"10564:3:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10569:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10577:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10588:3:181","type":""}],"src":"10449:271:181"},{"body":{"nodeType":"YulBlock","src":"10899:161:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10916:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10927:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10909:6:181"},"nodeType":"YulFunctionCall","src":"10909:21:181"},"nodeType":"YulExpressionStatement","src":"10909:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10950:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10961:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10946:3:181"},"nodeType":"YulFunctionCall","src":"10946:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10966:2:181","type":"","value":"11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10939:6:181"},"nodeType":"YulFunctionCall","src":"10939:30:181"},"nodeType":"YulExpressionStatement","src":"10939:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10989:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11000:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10985:3:181"},"nodeType":"YulFunctionCall","src":"10985:18:181"},{"hexValue":"21736861726564526f6f74","kind":"string","nodeType":"YulLiteral","src":"11005:13:181","type":"","value":"!sharedRoot"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10978:6:181"},"nodeType":"YulFunctionCall","src":"10978:41:181"},"nodeType":"YulExpressionStatement","src":"10978:41:181"},{"nodeType":"YulAssignment","src":"11028:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11040:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11051:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11036:3:181"},"nodeType":"YulFunctionCall","src":"11036:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11028:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10876:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10890:4:181","type":""}],"src":"10725:335:181"},{"body":{"nodeType":"YulBlock","src":"11239:171:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11256:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11267:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11249:6:181"},"nodeType":"YulFunctionCall","src":"11249:21:181"},"nodeType":"YulExpressionStatement","src":"11249:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11290:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11301:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11286:3:181"},"nodeType":"YulFunctionCall","src":"11286:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11306:2:181","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11279:6:181"},"nodeType":"YulFunctionCall","src":"11279:30:181"},"nodeType":"YulExpressionStatement","src":"11279:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11329:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11340:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11325:3:181"},"nodeType":"YulFunctionCall","src":"11325:18:181"},{"hexValue":"616767726567617465526f6f742021657869737473","kind":"string","nodeType":"YulLiteral","src":"11345:23:181","type":"","value":"aggregateRoot !exists"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11318:6:181"},"nodeType":"YulFunctionCall","src":"11318:51:181"},"nodeType":"YulExpressionStatement","src":"11318:51:181"},{"nodeType":"YulAssignment","src":"11378:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11390:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11401:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11386:3:181"},"nodeType":"YulFunctionCall","src":"11386:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11378:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11216:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11230:4:181","type":""}],"src":"11065:345:181"},{"body":{"nodeType":"YulBlock","src":"11493:199:181","statements":[{"body":{"nodeType":"YulBlock","src":"11539:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11548:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11551:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11541:6:181"},"nodeType":"YulFunctionCall","src":"11541:12:181"},"nodeType":"YulExpressionStatement","src":"11541:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11514:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"11523:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11510:3:181"},"nodeType":"YulFunctionCall","src":"11510:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"11535:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11506:3:181"},"nodeType":"YulFunctionCall","src":"11506:32:181"},"nodeType":"YulIf","src":"11503:52:181"},{"nodeType":"YulVariableDeclaration","src":"11564:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11583:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11577:5:181"},"nodeType":"YulFunctionCall","src":"11577:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11568:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"11646:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11655:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11658:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11648:6:181"},"nodeType":"YulFunctionCall","src":"11648:12:181"},"nodeType":"YulExpressionStatement","src":"11648:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11615:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11636:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11629:6:181"},"nodeType":"YulFunctionCall","src":"11629:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11622:6:181"},"nodeType":"YulFunctionCall","src":"11622:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"11612:2:181"},"nodeType":"YulFunctionCall","src":"11612:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11605:6:181"},"nodeType":"YulFunctionCall","src":"11605:40:181"},"nodeType":"YulIf","src":"11602:60:181"},{"nodeType":"YulAssignment","src":"11671:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"11681:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11671:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11459:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11470:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11482:6:181","type":""}],"src":"11415:277:181"},{"body":{"nodeType":"YulBlock","src":"11871:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11888:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11899:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11881:6:181"},"nodeType":"YulFunctionCall","src":"11881:21:181"},"nodeType":"YulExpressionStatement","src":"11881:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11922:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11933:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11918:3:181"},"nodeType":"YulFunctionCall","src":"11918:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11938:1:181","type":"","value":"8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11911:6:181"},"nodeType":"YulFunctionCall","src":"11911:29:181"},"nodeType":"YulExpressionStatement","src":"11911:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11960:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11971:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11956:3:181"},"nodeType":"YulFunctionCall","src":"11956:18:181"},{"hexValue":"2177617463686572","kind":"string","nodeType":"YulLiteral","src":"11976:10:181","type":"","value":"!watcher"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11949:6:181"},"nodeType":"YulFunctionCall","src":"11949:38:181"},"nodeType":"YulExpressionStatement","src":"11949:38:181"},{"nodeType":"YulAssignment","src":"11996:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12008:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12019:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12004:3:181"},"nodeType":"YulFunctionCall","src":"12004:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11996:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11848:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11862:4:181","type":""}],"src":"11697:331:181"},{"body":{"nodeType":"YulBlock","src":"12082:79:181","statements":[{"nodeType":"YulAssignment","src":"12092:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"12104:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"12107:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12100:3:181"},"nodeType":"YulFunctionCall","src":"12100:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"12092:4:181"}]},{"body":{"nodeType":"YulBlock","src":"12133:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"12135:16:181"},"nodeType":"YulFunctionCall","src":"12135:18:181"},"nodeType":"YulExpressionStatement","src":"12135:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"12124:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"12130:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12121:2:181"},"nodeType":"YulFunctionCall","src":"12121:11:181"},"nodeType":"YulIf","src":"12118:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"12064:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"12067:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"12073:4:181","type":""}],"src":"12033:128:181"},{"body":{"nodeType":"YulBlock","src":"12340:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12357:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12368:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12350:6:181"},"nodeType":"YulFunctionCall","src":"12350:21:181"},"nodeType":"YulExpressionStatement","src":"12350:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12391:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12402:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12387:3:181"},"nodeType":"YulFunctionCall","src":"12387:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12407:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12380:6:181"},"nodeType":"YulFunctionCall","src":"12380:30:181"},"nodeType":"YulExpressionStatement","src":"12380:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12430:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12441:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12426:3:181"},"nodeType":"YulFunctionCall","src":"12426:18:181"},{"hexValue":"616c72656164792077617463686572206d616e61676572","kind":"string","nodeType":"YulLiteral","src":"12446:25:181","type":"","value":"already watcher manager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12419:6:181"},"nodeType":"YulFunctionCall","src":"12419:53:181"},"nodeType":"YulExpressionStatement","src":"12419:53:181"},{"nodeType":"YulAssignment","src":"12481:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12493:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12504:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12489:3:181"},"nodeType":"YulFunctionCall","src":"12489:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12481:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12317:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12331:4:181","type":""}],"src":"12166:347:181"},{"body":{"nodeType":"YulBlock","src":"12692:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12709:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12720:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12702:6:181"},"nodeType":"YulFunctionCall","src":"12702:21:181"},"nodeType":"YulExpressionStatement","src":"12702:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12743:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12754:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12739:3:181"},"nodeType":"YulFunctionCall","src":"12739:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12759:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12732:6:181"},"nodeType":"YulFunctionCall","src":"12732:30:181"},"nodeType":"YulExpressionStatement","src":"12732:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12782:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12793:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12778:3:181"},"nodeType":"YulFunctionCall","src":"12778:18:181"},{"hexValue":"21616c6c6f776c6973746564","kind":"string","nodeType":"YulLiteral","src":"12798:14:181","type":"","value":"!allowlisted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12771:6:181"},"nodeType":"YulFunctionCall","src":"12771:42:181"},"nodeType":"YulExpressionStatement","src":"12771:42:181"},{"nodeType":"YulAssignment","src":"12822:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12834:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12845:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12830:3:181"},"nodeType":"YulFunctionCall","src":"12830:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12822:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12669:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12683:4:181","type":""}],"src":"12518:336:181"},{"body":{"nodeType":"YulBlock","src":"12905:155:181","statements":[{"nodeType":"YulVariableDeclaration","src":"12915:20:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12925:10:181","type":"","value":"0xffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12919:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12944:29:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12963:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12970:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12959:3:181"},"nodeType":"YulFunctionCall","src":"12959:14:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"12948:7:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"13001:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13003:16:181"},"nodeType":"YulFunctionCall","src":"13003:18:181"},"nodeType":"YulExpressionStatement","src":"13003:18:181"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"12988:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12997:2:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"12985:2:181"},"nodeType":"YulFunctionCall","src":"12985:15:181"},"nodeType":"YulIf","src":"12982:41:181"},{"nodeType":"YulAssignment","src":"13032:22:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"13043:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"13052:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13039:3:181"},"nodeType":"YulFunctionCall","src":"13039:15:181"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"13032:3:181"}]}]},"name":"increment_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"12887:5:181","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"12897:3:181","type":""}],"src":"12859:201:181"},{"body":{"nodeType":"YulBlock","src":"13163:147:181","statements":[{"body":{"nodeType":"YulBlock","src":"13209:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13218:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13221:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13211:6:181"},"nodeType":"YulFunctionCall","src":"13211:12:181"},"nodeType":"YulExpressionStatement","src":"13211:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13184:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"13193:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13180:3:181"},"nodeType":"YulFunctionCall","src":"13180:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"13205:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13176:3:181"},"nodeType":"YulFunctionCall","src":"13176:32:181"},"nodeType":"YulIf","src":"13173:52:181"},{"nodeType":"YulAssignment","src":"13234:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13250:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13244:5:181"},"nodeType":"YulFunctionCall","src":"13244:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13234:6:181"}]},{"nodeType":"YulAssignment","src":"13269:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13289:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13300:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13285:3:181"},"nodeType":"YulFunctionCall","src":"13285:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13279:5:181"},"nodeType":"YulFunctionCall","src":"13279:25:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13269:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13121:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13132:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13144:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13152:6:181","type":""}],"src":"13065:245:181"},{"body":{"nodeType":"YulBlock","src":"13518:229:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13535:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"13546:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13528:6:181"},"nodeType":"YulFunctionCall","src":"13528:25:181"},"nodeType":"YulExpressionStatement","src":"13528:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13573:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13584:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13569:3:181"},"nodeType":"YulFunctionCall","src":"13569:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"13589:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13562:6:181"},"nodeType":"YulFunctionCall","src":"13562:34:181"},"nodeType":"YulExpressionStatement","src":"13562:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13616:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13627:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13612:3:181"},"nodeType":"YulFunctionCall","src":"13612:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"13632:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13605:6:181"},"nodeType":"YulFunctionCall","src":"13605:34:181"},"nodeType":"YulExpressionStatement","src":"13605:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13659:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13670:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13655:3:181"},"nodeType":"YulFunctionCall","src":"13655:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13675:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13648:6:181"},"nodeType":"YulFunctionCall","src":"13648:31:181"},"nodeType":"YulExpressionStatement","src":"13648:31:181"},{"nodeType":"YulAssignment","src":"13688:53:181","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"13713:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13725:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13736:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13721:3:181"},"nodeType":"YulFunctionCall","src":"13721:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"13696:16:181"},"nodeType":"YulFunctionCall","src":"13696:45:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13688:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13463:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13474:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13482:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13490:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13498:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13509:4:181","type":""}],"src":"13315:432:181"},{"body":{"nodeType":"YulBlock","src":"13926:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13943:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13954:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13936:6:181"},"nodeType":"YulFunctionCall","src":"13936:21:181"},"nodeType":"YulExpressionStatement","src":"13936:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13977:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13988:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13973:3:181"},"nodeType":"YulFunctionCall","src":"13973:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13993:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13966:6:181"},"nodeType":"YulFunctionCall","src":"13966:30:181"},"nodeType":"YulExpressionStatement","src":"13966:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14016:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14027:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14012:3:181"},"nodeType":"YulFunctionCall","src":"14012:18:181"},{"hexValue":"5061757361626c653a20706175736564","kind":"string","nodeType":"YulLiteral","src":"14032:18:181","type":"","value":"Pausable: paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14005:6:181"},"nodeType":"YulFunctionCall","src":"14005:46:181"},"nodeType":"YulExpressionStatement","src":"14005:46:181"},{"nodeType":"YulAssignment","src":"14060:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14072:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14083:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14068:3:181"},"nodeType":"YulFunctionCall","src":"14068:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14060:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13903:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13917:4:181","type":""}],"src":"13752:340:181"},{"body":{"nodeType":"YulBlock","src":"14271:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14288:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14299:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14281:6:181"},"nodeType":"YulFunctionCall","src":"14281:21:181"},"nodeType":"YulExpressionStatement","src":"14281:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14322:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14333:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14318:3:181"},"nodeType":"YulFunctionCall","src":"14318:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14338:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14311:6:181"},"nodeType":"YulFunctionCall","src":"14311:29:181"},"nodeType":"YulExpressionStatement","src":"14311:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14360:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14371:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14356:3:181"},"nodeType":"YulFunctionCall","src":"14356:18:181"},{"hexValue":"216c656e677468","kind":"string","nodeType":"YulLiteral","src":"14376:9:181","type":"","value":"!length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14349:6:181"},"nodeType":"YulFunctionCall","src":"14349:37:181"},"nodeType":"YulExpressionStatement","src":"14349:37:181"},{"nodeType":"YulAssignment","src":"14395:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14407:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14418:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14403:3:181"},"nodeType":"YulFunctionCall","src":"14403:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14395:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14248:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14262:4:181","type":""}],"src":"14097:330:181"},{"body":{"nodeType":"YulBlock","src":"14606:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14623:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14634:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14616:6:181"},"nodeType":"YulFunctionCall","src":"14616:21:181"},"nodeType":"YulExpressionStatement","src":"14616:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14657:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14668:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14653:3:181"},"nodeType":"YulFunctionCall","src":"14653:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14673:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14646:6:181"},"nodeType":"YulFunctionCall","src":"14646:30:181"},"nodeType":"YulExpressionStatement","src":"14646:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14696:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14707:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14692:3:181"},"nodeType":"YulFunctionCall","src":"14692:18:181"},{"hexValue":"2164617461206c656e677468","kind":"string","nodeType":"YulLiteral","src":"14712:14:181","type":"","value":"!data length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14685:6:181"},"nodeType":"YulFunctionCall","src":"14685:42:181"},"nodeType":"YulExpressionStatement","src":"14685:42:181"},{"nodeType":"YulAssignment","src":"14736:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14748:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14759:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14744:3:181"},"nodeType":"YulFunctionCall","src":"14744:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14736:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14583:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14597:4:181","type":""}],"src":"14432:336:181"},{"body":{"nodeType":"YulBlock","src":"14892:98:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14909:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14920:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14902:6:181"},"nodeType":"YulFunctionCall","src":"14902:21:181"},"nodeType":"YulExpressionStatement","src":"14902:21:181"},{"nodeType":"YulAssignment","src":"14932:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14957:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14969:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14980:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14965:3:181"},"nodeType":"YulFunctionCall","src":"14965:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"14940:16:181"},"nodeType":"YulFunctionCall","src":"14940:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14932:4:181"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14861:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14872:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14883:4:181","type":""}],"src":"14773:217:181"},{"body":{"nodeType":"YulBlock","src":"15170:210:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15187:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15202:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15218:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"15223:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"15214:3:181"},"nodeType":"YulFunctionCall","src":"15214:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"15227:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15210:3:181"},"nodeType":"YulFunctionCall","src":"15210:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15198:3:181"},"nodeType":"YulFunctionCall","src":"15198:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15180:6:181"},"nodeType":"YulFunctionCall","src":"15180:51:181"},"nodeType":"YulExpressionStatement","src":"15180:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15251:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15262:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15247:3:181"},"nodeType":"YulFunctionCall","src":"15247:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15267:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15240:6:181"},"nodeType":"YulFunctionCall","src":"15240:30:181"},"nodeType":"YulExpressionStatement","src":"15240:30:181"},{"nodeType":"YulAssignment","src":"15279:52:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"15304:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15316:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15327:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15312:3:181"},"nodeType":"YulFunctionCall","src":"15312:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"15287:16:181"},"nodeType":"YulFunctionCall","src":"15287:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15279:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15351:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15362:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15347:3:181"},"nodeType":"YulFunctionCall","src":"15347:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"15367:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15340:6:181"},"nodeType":"YulFunctionCall","src":"15340:34:181"},"nodeType":"YulExpressionStatement","src":"15340:34:181"}]},"name":"abi_encode_tuple_t_address_t_bytes_memory_ptr_t_uint256__to_t_address_t_bytes_memory_ptr_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15123:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15134:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15142:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15150:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15161:4:181","type":""}],"src":"14995:385:181"},{"body":{"nodeType":"YulBlock","src":"15559:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15576:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15587:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15569:6:181"},"nodeType":"YulFunctionCall","src":"15569:21:181"},"nodeType":"YulExpressionStatement","src":"15569:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15610:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15621:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15606:3:181"},"nodeType":"YulFunctionCall","src":"15606:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15626:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15599:6:181"},"nodeType":"YulFunctionCall","src":"15599:30:181"},"nodeType":"YulExpressionStatement","src":"15599:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15649:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15660:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15645:3:181"},"nodeType":"YulFunctionCall","src":"15645:18:181"},{"hexValue":"5061757361626c653a206e6f7420706175736564","kind":"string","nodeType":"YulLiteral","src":"15665:22:181","type":"","value":"Pausable: not paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15638:6:181"},"nodeType":"YulFunctionCall","src":"15638:50:181"},"nodeType":"YulExpressionStatement","src":"15638:50:181"},{"nodeType":"YulAssignment","src":"15697:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15709:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15720:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15705:3:181"},"nodeType":"YulFunctionCall","src":"15705:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15697:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15536:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15550:4:181","type":""}],"src":"15385:344:181"},{"body":{"nodeType":"YulBlock","src":"15908:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15925:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15936:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15918:6:181"},"nodeType":"YulFunctionCall","src":"15918:21:181"},"nodeType":"YulExpressionStatement","src":"15918:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15959:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15970:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15955:3:181"},"nodeType":"YulFunctionCall","src":"15955:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15975:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15948:6:181"},"nodeType":"YulFunctionCall","src":"15948:30:181"},"nodeType":"YulExpressionStatement","src":"15948:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15998:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16009:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15994:3:181"},"nodeType":"YulFunctionCall","src":"15994:18:181"},{"hexValue":"216d6972726f72436f6e6e6563746f72","kind":"string","nodeType":"YulLiteral","src":"16014:18:181","type":"","value":"!mirrorConnector"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15987:6:181"},"nodeType":"YulFunctionCall","src":"15987:46:181"},"nodeType":"YulExpressionStatement","src":"15987:46:181"},{"nodeType":"YulAssignment","src":"16042:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16054:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16065:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16050:3:181"},"nodeType":"YulFunctionCall","src":"16050:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16042:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15885:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15899:4:181","type":""}],"src":"15734:340:181"},{"body":{"nodeType":"YulBlock","src":"16160:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"16206:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16215:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16218:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16208:6:181"},"nodeType":"YulFunctionCall","src":"16208:12:181"},"nodeType":"YulExpressionStatement","src":"16208:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"16181:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"16190:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16177:3:181"},"nodeType":"YulFunctionCall","src":"16177:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"16202:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"16173:3:181"},"nodeType":"YulFunctionCall","src":"16173:32:181"},"nodeType":"YulIf","src":"16170:52:181"},{"nodeType":"YulAssignment","src":"16231:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16247:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16241:5:181"},"nodeType":"YulFunctionCall","src":"16241:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"16231:6:181"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16126:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"16137:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"16149:6:181","type":""}],"src":"16079:184:181"},{"body":{"nodeType":"YulBlock","src":"16442:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16459:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16470:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16452:6:181"},"nodeType":"YulFunctionCall","src":"16452:21:181"},"nodeType":"YulExpressionStatement","src":"16452:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16493:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16504:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16489:3:181"},"nodeType":"YulFunctionCall","src":"16489:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16509:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16482:6:181"},"nodeType":"YulFunctionCall","src":"16482:30:181"},"nodeType":"YulExpressionStatement","src":"16482:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16532:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16543:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16528:3:181"},"nodeType":"YulFunctionCall","src":"16528:18:181"},{"hexValue":"21736f75726365436861696e","kind":"string","nodeType":"YulLiteral","src":"16548:14:181","type":"","value":"!sourceChain"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16521:6:181"},"nodeType":"YulFunctionCall","src":"16521:42:181"},"nodeType":"YulExpressionStatement","src":"16521:42:181"},{"nodeType":"YulAssignment","src":"16572:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16584:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16595:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16580:3:181"},"nodeType":"YulFunctionCall","src":"16580:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16572:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0d5605680c5f886aed2495c7e7998d97b3239c9572097b625996bd4acc3f63dd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16419:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16433:4:181","type":""}],"src":"16268:336:181"},{"body":{"nodeType":"YulBlock","src":"16703:203:181","statements":[{"nodeType":"YulVariableDeclaration","src":"16713:26:181","value":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"16733:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16727:5:181"},"nodeType":"YulFunctionCall","src":"16727:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"16717:6:181","type":""}]},{"nodeType":"YulAssignment","src":"16748:32:181","value":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"16767:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"16774:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16763:3:181"},"nodeType":"YulFunctionCall","src":"16763:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16757:5:181"},"nodeType":"YulFunctionCall","src":"16757:23:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"16748:5:181"}]},{"body":{"nodeType":"YulBlock","src":"16817:83:181","statements":[{"nodeType":"YulAssignment","src":"16831:59:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16844:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16859:1:181","type":"","value":"3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16866:4:181","type":"","value":"0x20"},{"name":"length","nodeType":"YulIdentifier","src":"16872:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16862:3:181"},"nodeType":"YulFunctionCall","src":"16862:17:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16855:3:181"},"nodeType":"YulFunctionCall","src":"16855:25:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16886:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"16882:3:181"},"nodeType":"YulFunctionCall","src":"16882:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16851:3:181"},"nodeType":"YulFunctionCall","src":"16851:38:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16840:3:181"},"nodeType":"YulFunctionCall","src":"16840:50:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"16831:5:181"}]}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"16795:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"16803:4:181","type":"","value":"0x20"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16792:2:181"},"nodeType":"YulFunctionCall","src":"16792:16:181"},"nodeType":"YulIf","src":"16789:111:181"}]},"name":"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nodeType":"YulTypedName","src":"16683:5:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"16693:5:181","type":""}],"src":"16609:297:181"},{"body":{"nodeType":"YulBlock","src":"17085:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17102:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17113:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17095:6:181"},"nodeType":"YulFunctionCall","src":"17095:21:181"},"nodeType":"YulExpressionStatement","src":"17095:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17136:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17147:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17132:3:181"},"nodeType":"YulFunctionCall","src":"17132:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17152:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17125:6:181"},"nodeType":"YulFunctionCall","src":"17125:30:181"},"nodeType":"YulExpressionStatement","src":"17125:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17175:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17186:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17171:3:181"},"nodeType":"YulFunctionCall","src":"17171:18:181"},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","kind":"string","nodeType":"YulLiteral","src":"17191:33:181","type":"","value":"ReentrancyGuard: reentrant call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17164:6:181"},"nodeType":"YulFunctionCall","src":"17164:61:181"},"nodeType":"YulExpressionStatement","src":"17164:61:181"},{"nodeType":"YulAssignment","src":"17234:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17246:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17257:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17242:3:181"},"nodeType":"YulFunctionCall","src":"17242:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17234:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17062:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17076:4:181","type":""}],"src":"16911:355:181"},{"body":{"nodeType":"YulBlock","src":"17445:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17462:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17473:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17455:6:181"},"nodeType":"YulFunctionCall","src":"17455:21:181"},"nodeType":"YulExpressionStatement","src":"17455:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17496:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17507:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17492:3:181"},"nodeType":"YulFunctionCall","src":"17492:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17512:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17485:6:181"},"nodeType":"YulFunctionCall","src":"17485:30:181"},"nodeType":"YulExpressionStatement","src":"17485:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17535:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17546:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17531:3:181"},"nodeType":"YulFunctionCall","src":"17531:18:181"},{"hexValue":"214d6573736167655374617475732e4e6f6e65","kind":"string","nodeType":"YulLiteral","src":"17551:21:181","type":"","value":"!MessageStatus.None"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17524:6:181"},"nodeType":"YulFunctionCall","src":"17524:49:181"},"nodeType":"YulExpressionStatement","src":"17524:49:181"},{"nodeType":"YulAssignment","src":"17582:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17594:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17605:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17590:3:181"},"nodeType":"YulFunctionCall","src":"17590:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17582:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17422:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17436:4:181","type":""}],"src":"17271:343:181"},{"body":{"nodeType":"YulBlock","src":"17793:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17810:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17821:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17803:6:181"},"nodeType":"YulFunctionCall","src":"17803:21:181"},"nodeType":"YulExpressionStatement","src":"17803:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17844:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17855:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17840:3:181"},"nodeType":"YulFunctionCall","src":"17840:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17860:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17833:6:181"},"nodeType":"YulFunctionCall","src":"17833:30:181"},"nodeType":"YulExpressionStatement","src":"17833:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17883:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17894:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17879:3:181"},"nodeType":"YulFunctionCall","src":"17879:18:181"},{"hexValue":"696e76616c696420696e626f756e64526f6f74","kind":"string","nodeType":"YulLiteral","src":"17899:21:181","type":"","value":"invalid inboundRoot"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17872:6:181"},"nodeType":"YulFunctionCall","src":"17872:49:181"},"nodeType":"YulExpressionStatement","src":"17872:49:181"},{"nodeType":"YulAssignment","src":"17930:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17942:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17953:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17938:3:181"},"nodeType":"YulFunctionCall","src":"17938:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17930:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17770:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17784:4:181","type":""}],"src":"17619:343:181"},{"body":{"nodeType":"YulBlock","src":"18141:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18158:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18169:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18151:6:181"},"nodeType":"YulFunctionCall","src":"18151:21:181"},"nodeType":"YulExpressionStatement","src":"18151:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18192:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18203:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18188:3:181"},"nodeType":"YulFunctionCall","src":"18188:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18208:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18181:6:181"},"nodeType":"YulFunctionCall","src":"18181:30:181"},"nodeType":"YulExpressionStatement","src":"18181:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18231:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18242:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18227:3:181"},"nodeType":"YulFunctionCall","src":"18227:18:181"},{"hexValue":"2164657374696e6174696f6e","kind":"string","nodeType":"YulLiteral","src":"18247:14:181","type":"","value":"!destination"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18220:6:181"},"nodeType":"YulFunctionCall","src":"18220:42:181"},"nodeType":"YulExpressionStatement","src":"18220:42:181"},{"nodeType":"YulAssignment","src":"18271:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18283:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18294:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18279:3:181"},"nodeType":"YulFunctionCall","src":"18279:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18271:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18118:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18132:4:181","type":""}],"src":"17967:336:181"},{"body":{"nodeType":"YulBlock","src":"18482:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18499:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18510:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18492:6:181"},"nodeType":"YulFunctionCall","src":"18492:21:181"},"nodeType":"YulExpressionStatement","src":"18492:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18533:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18544:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18529:3:181"},"nodeType":"YulFunctionCall","src":"18529:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18549:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18522:6:181"},"nodeType":"YulFunctionCall","src":"18522:29:181"},"nodeType":"YulExpressionStatement","src":"18522:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18571:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18582:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18567:3:181"},"nodeType":"YulFunctionCall","src":"18567:18:181"},{"hexValue":"2170726f76656e","kind":"string","nodeType":"YulLiteral","src":"18587:9:181","type":"","value":"!proven"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18560:6:181"},"nodeType":"YulFunctionCall","src":"18560:37:181"},"nodeType":"YulExpressionStatement","src":"18560:37:181"},{"nodeType":"YulAssignment","src":"18606:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18618:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18629:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18614:3:181"},"nodeType":"YulFunctionCall","src":"18614:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18606:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18459:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18473:4:181","type":""}],"src":"18308:330:181"},{"body":{"nodeType":"YulBlock","src":"18817:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18834:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18845:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18827:6:181"},"nodeType":"YulFunctionCall","src":"18827:21:181"},"nodeType":"YulExpressionStatement","src":"18827:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18868:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18879:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18864:3:181"},"nodeType":"YulFunctionCall","src":"18864:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18884:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18857:6:181"},"nodeType":"YulFunctionCall","src":"18857:29:181"},"nodeType":"YulExpressionStatement","src":"18857:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18906:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18917:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18902:3:181"},"nodeType":"YulFunctionCall","src":"18902:18:181"},{"hexValue":"21676173","kind":"string","nodeType":"YulLiteral","src":"18922:6:181","type":"","value":"!gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18895:6:181"},"nodeType":"YulFunctionCall","src":"18895:34:181"},"nodeType":"YulExpressionStatement","src":"18895:34:181"},{"nodeType":"YulAssignment","src":"18938:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18950:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18961:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18946:3:181"},"nodeType":"YulFunctionCall","src":"18946:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18938:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18794:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18808:4:181","type":""}],"src":"18643:327:181"},{"body":{"nodeType":"YulBlock","src":"19174:276:181","statements":[{"nodeType":"YulVariableDeclaration","src":"19184:20:181","value":{"kind":"number","nodeType":"YulLiteral","src":"19194:10:181","type":"","value":"0xffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"19188:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19220:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19235:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"19243:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19231:3:181"},"nodeType":"YulFunctionCall","src":"19231:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19213:6:181"},"nodeType":"YulFunctionCall","src":"19213:34:181"},"nodeType":"YulExpressionStatement","src":"19213:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19267:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19278:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19263:3:181"},"nodeType":"YulFunctionCall","src":"19263:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"19287:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"19295:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19283:3:181"},"nodeType":"YulFunctionCall","src":"19283:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19256:6:181"},"nodeType":"YulFunctionCall","src":"19256:43:181"},"nodeType":"YulExpressionStatement","src":"19256:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19319:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19330:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19315:3:181"},"nodeType":"YulFunctionCall","src":"19315:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"19335:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19308:6:181"},"nodeType":"YulFunctionCall","src":"19308:34:181"},"nodeType":"YulExpressionStatement","src":"19308:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19362:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19373:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19358:3:181"},"nodeType":"YulFunctionCall","src":"19358:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19378:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19351:6:181"},"nodeType":"YulFunctionCall","src":"19351:31:181"},"nodeType":"YulExpressionStatement","src":"19351:31:181"},{"nodeType":"YulAssignment","src":"19391:53:181","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"19416:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19428:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19439:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19424:3:181"},"nodeType":"YulFunctionCall","src":"19424:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"19399:16:181"},"nodeType":"YulFunctionCall","src":"19399:45:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19391:4:181"}]}]},"name":"abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19119:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"19130:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"19138:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19146:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19154:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19165:4:181","type":""}],"src":"18975:475:181"},{"body":{"nodeType":"YulBlock","src":"19624:200:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19641:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"19652:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19634:6:181"},"nodeType":"YulFunctionCall","src":"19634:25:181"},"nodeType":"YulExpressionStatement","src":"19634:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19679:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19690:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19675:3:181"},"nodeType":"YulFunctionCall","src":"19675:18:181"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"19709:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19702:6:181"},"nodeType":"YulFunctionCall","src":"19702:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19695:6:181"},"nodeType":"YulFunctionCall","src":"19695:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19668:6:181"},"nodeType":"YulFunctionCall","src":"19668:50:181"},"nodeType":"YulExpressionStatement","src":"19668:50:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19738:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19749:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19734:3:181"},"nodeType":"YulFunctionCall","src":"19734:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19754:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19727:6:181"},"nodeType":"YulFunctionCall","src":"19727:30:181"},"nodeType":"YulExpressionStatement","src":"19727:30:181"},{"nodeType":"YulAssignment","src":"19766:52:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"19791:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19803:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19814:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19799:3:181"},"nodeType":"YulFunctionCall","src":"19799:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"19774:16:181"},"nodeType":"YulFunctionCall","src":"19774:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19766:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19577:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"19588:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19596:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19604:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19615:4:181","type":""}],"src":"19455:369:181"},{"body":{"nodeType":"YulBlock","src":"19958:175:181","statements":[{"nodeType":"YulAssignment","src":"19968:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19980:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19991:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19976:3:181"},"nodeType":"YulFunctionCall","src":"19976:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19968:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"20003:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20021:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"20026:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"20017:3:181"},"nodeType":"YulFunctionCall","src":"20017:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"20030:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20013:3:181"},"nodeType":"YulFunctionCall","src":"20013:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"20007:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20048:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"20063:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"20071:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20059:3:181"},"nodeType":"YulFunctionCall","src":"20059:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20041:6:181"},"nodeType":"YulFunctionCall","src":"20041:34:181"},"nodeType":"YulExpressionStatement","src":"20041:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20095:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20106:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20091:3:181"},"nodeType":"YulFunctionCall","src":"20091:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20115:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"20123:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20111:3:181"},"nodeType":"YulFunctionCall","src":"20111:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20084:6:181"},"nodeType":"YulFunctionCall","src":"20084:43:181"},"nodeType":"YulExpressionStatement","src":"20084:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19919:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19930:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19938:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19949:4:181","type":""}],"src":"19829:304:181"},{"body":{"nodeType":"YulBlock","src":"20312:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20329:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20340:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20322:6:181"},"nodeType":"YulFunctionCall","src":"20322:21:181"},"nodeType":"YulExpressionStatement","src":"20322:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20363:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20374:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20359:3:181"},"nodeType":"YulFunctionCall","src":"20359:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20379:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20352:6:181"},"nodeType":"YulFunctionCall","src":"20352:30:181"},"nodeType":"YulExpressionStatement","src":"20352:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20402:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20413:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20398:3:181"},"nodeType":"YulFunctionCall","src":"20398:18:181"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","kind":"string","nodeType":"YulLiteral","src":"20418:31:181","type":"","value":"Address: insufficient balance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20391:6:181"},"nodeType":"YulFunctionCall","src":"20391:59:181"},"nodeType":"YulExpressionStatement","src":"20391:59:181"},{"nodeType":"YulAssignment","src":"20459:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20471:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20482:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20467:3:181"},"nodeType":"YulFunctionCall","src":"20467:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20459:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20289:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20303:4:181","type":""}],"src":"20138:353:181"},{"body":{"nodeType":"YulBlock","src":"20687:14:181","statements":[{"nodeType":"YulAssignment","src":"20689:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"20696:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"20689:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"20671:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"20679:3:181","type":""}],"src":"20496:205:181"},{"body":{"nodeType":"YulBlock","src":"20880:248:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20897:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20908:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20890:6:181"},"nodeType":"YulFunctionCall","src":"20890:21:181"},"nodeType":"YulExpressionStatement","src":"20890:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20931:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20942:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20927:3:181"},"nodeType":"YulFunctionCall","src":"20927:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20947:2:181","type":"","value":"58"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20920:6:181"},"nodeType":"YulFunctionCall","src":"20920:30:181"},"nodeType":"YulExpressionStatement","src":"20920:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20970:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20981:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20966:3:181"},"nodeType":"YulFunctionCall","src":"20966:18:181"},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c2072","kind":"string","nodeType":"YulLiteral","src":"20986:34:181","type":"","value":"Address: unable to send value, r"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20959:6:181"},"nodeType":"YulFunctionCall","src":"20959:62:181"},"nodeType":"YulExpressionStatement","src":"20959:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21041:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21052:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21037:3:181"},"nodeType":"YulFunctionCall","src":"21037:18:181"},{"hexValue":"6563697069656e74206d61792068617665207265766572746564","kind":"string","nodeType":"YulLiteral","src":"21057:28:181","type":"","value":"ecipient may have reverted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21030:6:181"},"nodeType":"YulFunctionCall","src":"21030:56:181"},"nodeType":"YulExpressionStatement","src":"21030:56:181"},{"nodeType":"YulAssignment","src":"21095:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21107:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21118:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21103:3:181"},"nodeType":"YulFunctionCall","src":"21103:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21095:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20857:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20871:4:181","type":""}],"src":"20706:422:181"},{"body":{"nodeType":"YulBlock","src":"21262:119:181","statements":[{"nodeType":"YulAssignment","src":"21272:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21284:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21295:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21280:3:181"},"nodeType":"YulFunctionCall","src":"21280:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21272:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21314:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"21325:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21307:6:181"},"nodeType":"YulFunctionCall","src":"21307:25:181"},"nodeType":"YulExpressionStatement","src":"21307:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21352:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21363:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21348:3:181"},"nodeType":"YulFunctionCall","src":"21348:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"21368:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21341:6:181"},"nodeType":"YulFunctionCall","src":"21341:34:181"},"nodeType":"YulExpressionStatement","src":"21341:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21223:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21234:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"21242:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21253:4:181","type":""}],"src":"21133:248:181"},{"body":{"nodeType":"YulBlock","src":"21560:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21577:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21588:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21570:6:181"},"nodeType":"YulFunctionCall","src":"21570:21:181"},"nodeType":"YulExpressionStatement","src":"21570:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21611:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21622:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21607:3:181"},"nodeType":"YulFunctionCall","src":"21607:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"21627:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21600:6:181"},"nodeType":"YulFunctionCall","src":"21600:30:181"},"nodeType":"YulExpressionStatement","src":"21600:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21650:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21661:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21646:3:181"},"nodeType":"YulFunctionCall","src":"21646:18:181"},{"hexValue":"216e65772072617465206c696d6974","kind":"string","nodeType":"YulLiteral","src":"21666:17:181","type":"","value":"!new rate limit"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21639:6:181"},"nodeType":"YulFunctionCall","src":"21639:45:181"},"nodeType":"YulExpressionStatement","src":"21639:45:181"},{"nodeType":"YulAssignment","src":"21693:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21705:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21716:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21701:3:181"},"nodeType":"YulFunctionCall","src":"21701:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21693:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21537:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21551:4:181","type":""}],"src":"21386:339:181"},{"body":{"nodeType":"YulBlock","src":"21859:145:181","statements":[{"nodeType":"YulAssignment","src":"21869:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21881:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21892:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21877:3:181"},"nodeType":"YulFunctionCall","src":"21877:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21869:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21911:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"21926:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21942:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"21947:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21938:3:181"},"nodeType":"YulFunctionCall","src":"21938:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"21951:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21934:3:181"},"nodeType":"YulFunctionCall","src":"21934:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21922:3:181"},"nodeType":"YulFunctionCall","src":"21922:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21904:6:181"},"nodeType":"YulFunctionCall","src":"21904:51:181"},"nodeType":"YulExpressionStatement","src":"21904:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21975:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21986:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21971:3:181"},"nodeType":"YulFunctionCall","src":"21971:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"21991:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21964:6:181"},"nodeType":"YulFunctionCall","src":"21964:34:181"},"nodeType":"YulExpressionStatement","src":"21964:34:181"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21820:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21831:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"21839:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21850:4:181","type":""}],"src":"21730:274:181"},{"body":{"nodeType":"YulBlock","src":"22280:439:181","statements":[{"nodeType":"YulVariableDeclaration","src":"22290:30:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22304:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"22309:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"22300:3:181"},"nodeType":"YulFunctionCall","src":"22300:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"22294:2:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"22336:3:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22349:3:181","type":"","value":"224"},{"name":"value0","nodeType":"YulIdentifier","src":"22354:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"22345:3:181"},"nodeType":"YulFunctionCall","src":"22345:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"22363:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22341:3:181"},"nodeType":"YulFunctionCall","src":"22341:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22329:6:181"},"nodeType":"YulFunctionCall","src":"22329:38:181"},"nodeType":"YulExpressionStatement","src":"22329:38:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"22387:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"22392:1:181","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22383:3:181"},"nodeType":"YulFunctionCall","src":"22383:11:181"},{"name":"value1","nodeType":"YulIdentifier","src":"22396:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22376:6:181"},"nodeType":"YulFunctionCall","src":"22376:27:181"},"nodeType":"YulExpressionStatement","src":"22376:27:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"22423:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"22428:2:181","type":"","value":"36"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22419:3:181"},"nodeType":"YulFunctionCall","src":"22419:12:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22441:3:181","type":"","value":"224"},{"name":"value2","nodeType":"YulIdentifier","src":"22446:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"22437:3:181"},"nodeType":"YulFunctionCall","src":"22437:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"22455:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22433:3:181"},"nodeType":"YulFunctionCall","src":"22433:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22412:6:181"},"nodeType":"YulFunctionCall","src":"22412:47:181"},"nodeType":"YulExpressionStatement","src":"22412:47:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"22479:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"22484:2:181","type":"","value":"40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22475:3:181"},"nodeType":"YulFunctionCall","src":"22475:12:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22497:3:181","type":"","value":"224"},{"name":"value3","nodeType":"YulIdentifier","src":"22502:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"22493:3:181"},"nodeType":"YulFunctionCall","src":"22493:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"22511:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22489:3:181"},"nodeType":"YulFunctionCall","src":"22489:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22468:6:181"},"nodeType":"YulFunctionCall","src":"22468:47:181"},"nodeType":"YulExpressionStatement","src":"22468:47:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"22535:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"22540:2:181","type":"","value":"44"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22531:3:181"},"nodeType":"YulFunctionCall","src":"22531:12:181"},{"name":"value4","nodeType":"YulIdentifier","src":"22545:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22524:6:181"},"nodeType":"YulFunctionCall","src":"22524:28:181"},"nodeType":"YulExpressionStatement","src":"22524:28:181"},{"nodeType":"YulVariableDeclaration","src":"22561:27:181","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"22581:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"22575:5:181"},"nodeType":"YulFunctionCall","src":"22575:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"22565:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"22636:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"22644:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22632:3:181"},"nodeType":"YulFunctionCall","src":"22632:17:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"22655:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"22660:2:181","type":"","value":"76"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22651:3:181"},"nodeType":"YulFunctionCall","src":"22651:12:181"},{"name":"length","nodeType":"YulIdentifier","src":"22665:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"22597:34:181"},"nodeType":"YulFunctionCall","src":"22597:75:181"},"nodeType":"YulExpressionStatement","src":"22597:75:181"},{"nodeType":"YulAssignment","src":"22681:32:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"22696:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"22701:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22692:3:181"},"nodeType":"YulFunctionCall","src":"22692:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"22710:2:181","type":"","value":"76"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22688:3:181"},"nodeType":"YulFunctionCall","src":"22688:25:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"22681:3:181"}]}]},"name":"abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"22216:3:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"22221:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"22229:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"22237:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"22245:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22253:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"22261:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"22272:3:181","type":""}],"src":"22009:710:181"},{"body":{"nodeType":"YulBlock","src":"22898:164:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22915:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22926:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22908:6:181"},"nodeType":"YulFunctionCall","src":"22908:21:181"},"nodeType":"YulExpressionStatement","src":"22908:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22949:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22960:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22945:3:181"},"nodeType":"YulFunctionCall","src":"22945:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22965:2:181","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22938:6:181"},"nodeType":"YulFunctionCall","src":"22938:30:181"},"nodeType":"YulExpressionStatement","src":"22938:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22988:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22999:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22984:3:181"},"nodeType":"YulFunctionCall","src":"22984:18:181"},{"hexValue":"6e657720726f6f7420656d707479","kind":"string","nodeType":"YulLiteral","src":"23004:16:181","type":"","value":"new root empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22977:6:181"},"nodeType":"YulFunctionCall","src":"22977:44:181"},"nodeType":"YulExpressionStatement","src":"22977:44:181"},{"nodeType":"YulAssignment","src":"23030:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23042:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23053:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23038:3:181"},"nodeType":"YulFunctionCall","src":"23038:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23030:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22875:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22889:4:181","type":""}],"src":"22724:338:181"},{"body":{"nodeType":"YulBlock","src":"23241:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23258:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23269:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23251:6:181"},"nodeType":"YulFunctionCall","src":"23251:21:181"},"nodeType":"YulExpressionStatement","src":"23251:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23292:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23303:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23288:3:181"},"nodeType":"YulFunctionCall","src":"23288:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23308:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23281:6:181"},"nodeType":"YulFunctionCall","src":"23281:30:181"},"nodeType":"YulExpressionStatement","src":"23281:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23331:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23342:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23327:3:181"},"nodeType":"YulFunctionCall","src":"23327:18:181"},{"hexValue":"726f6f7420616c72656164792070656e64696e67","kind":"string","nodeType":"YulLiteral","src":"23347:22:181","type":"","value":"root already pending"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23320:6:181"},"nodeType":"YulFunctionCall","src":"23320:50:181"},"nodeType":"YulExpressionStatement","src":"23320:50:181"},{"nodeType":"YulAssignment","src":"23379:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23391:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23402:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23387:3:181"},"nodeType":"YulFunctionCall","src":"23387:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23379:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23218:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23232:4:181","type":""}],"src":"23067:344:181"},{"body":{"nodeType":"YulBlock","src":"23590:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23607:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23618:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23600:6:181"},"nodeType":"YulFunctionCall","src":"23600:21:181"},"nodeType":"YulExpressionStatement","src":"23600:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23641:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23652:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23637:3:181"},"nodeType":"YulFunctionCall","src":"23637:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23657:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23630:6:181"},"nodeType":"YulFunctionCall","src":"23630:30:181"},"nodeType":"YulExpressionStatement","src":"23630:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23680:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23691:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23676:3:181"},"nodeType":"YulFunctionCall","src":"23676:18:181"},{"hexValue":"726f6f7420616c72656164792070726f76656e","kind":"string","nodeType":"YulLiteral","src":"23696:21:181","type":"","value":"root already proven"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23669:6:181"},"nodeType":"YulFunctionCall","src":"23669:49:181"},"nodeType":"YulExpressionStatement","src":"23669:49:181"},{"nodeType":"YulAssignment","src":"23727:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23739:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23750:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23735:3:181"},"nodeType":"YulFunctionCall","src":"23735:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23727:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23567:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23581:4:181","type":""}],"src":"23416:343:181"},{"body":{"nodeType":"YulBlock","src":"23938:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23955:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23966:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23948:6:181"},"nodeType":"YulFunctionCall","src":"23948:21:181"},"nodeType":"YulExpressionStatement","src":"23948:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23989:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24000:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23985:3:181"},"nodeType":"YulFunctionCall","src":"23985:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24005:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23978:6:181"},"nodeType":"YulFunctionCall","src":"23978:30:181"},"nodeType":"YulExpressionStatement","src":"23978:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24028:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24039:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24024:3:181"},"nodeType":"YulFunctionCall","src":"24024:18:181"},{"hexValue":"616767726567617465526f6f7420656d707479","kind":"string","nodeType":"YulLiteral","src":"24044:21:181","type":"","value":"aggregateRoot empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24017:6:181"},"nodeType":"YulFunctionCall","src":"24017:49:181"},"nodeType":"YulExpressionStatement","src":"24017:49:181"},{"nodeType":"YulAssignment","src":"24075:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24087:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24098:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24083:3:181"},"nodeType":"YulFunctionCall","src":"24083:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24075:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23915:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23929:4:181","type":""}],"src":"23764:343:181"},{"body":{"nodeType":"YulBlock","src":"24286:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24303:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24314:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24296:6:181"},"nodeType":"YulFunctionCall","src":"24296:21:181"},"nodeType":"YulExpressionStatement","src":"24296:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24337:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24348:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24333:3:181"},"nodeType":"YulFunctionCall","src":"24333:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24353:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24326:6:181"},"nodeType":"YulFunctionCall","src":"24326:30:181"},"nodeType":"YulExpressionStatement","src":"24326:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24376:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24387:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24372:3:181"},"nodeType":"YulFunctionCall","src":"24372:18:181"},{"hexValue":"616767726567617465526f6f7420216578697374","kind":"string","nodeType":"YulLiteral","src":"24392:22:181","type":"","value":"aggregateRoot !exist"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24365:6:181"},"nodeType":"YulFunctionCall","src":"24365:50:181"},"nodeType":"YulExpressionStatement","src":"24365:50:181"},{"nodeType":"YulAssignment","src":"24424:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24436:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24447:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24432:3:181"},"nodeType":"YulFunctionCall","src":"24432:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24424:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24263:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24277:4:181","type":""}],"src":"24112:344:181"},{"body":{"nodeType":"YulBlock","src":"24635:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24652:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24663:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24645:6:181"},"nodeType":"YulFunctionCall","src":"24645:21:181"},"nodeType":"YulExpressionStatement","src":"24645:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24686:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24697:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24682:3:181"},"nodeType":"YulFunctionCall","src":"24682:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24702:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24675:6:181"},"nodeType":"YulFunctionCall","src":"24675:30:181"},"nodeType":"YulExpressionStatement","src":"24675:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24725:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24736:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24721:3:181"},"nodeType":"YulFunctionCall","src":"24721:18:181"},{"hexValue":"616767726567617465526f6f7420217665726966696564","kind":"string","nodeType":"YulLiteral","src":"24741:25:181","type":"","value":"aggregateRoot !verified"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24714:6:181"},"nodeType":"YulFunctionCall","src":"24714:53:181"},"nodeType":"YulExpressionStatement","src":"24714:53:181"},{"nodeType":"YulAssignment","src":"24776:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24788:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24799:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24784:3:181"},"nodeType":"YulFunctionCall","src":"24784:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24776:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24612:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24626:4:181","type":""}],"src":"24461:347:181"},{"body":{"nodeType":"YulBlock","src":"24987:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25004:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25015:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24997:6:181"},"nodeType":"YulFunctionCall","src":"24997:21:181"},"nodeType":"YulExpressionStatement","src":"24997:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25038:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25049:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25034:3:181"},"nodeType":"YulFunctionCall","src":"25034:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"25054:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25027:6:181"},"nodeType":"YulFunctionCall","src":"25027:29:181"},"nodeType":"YulExpressionStatement","src":"25027:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25076:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25087:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25072:3:181"},"nodeType":"YulFunctionCall","src":"25072:18:181"},{"hexValue":"21627269646765","kind":"string","nodeType":"YulLiteral","src":"25092:9:181","type":"","value":"!bridge"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25065:6:181"},"nodeType":"YulFunctionCall","src":"25065:37:181"},"nodeType":"YulExpressionStatement","src":"25065:37:181"},{"nodeType":"YulAssignment","src":"25111:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25123:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25134:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25119:3:181"},"nodeType":"YulFunctionCall","src":"25119:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25111:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5bd20fa0eac50a6892371dae18efeb7d2b1c7a8479150f38626e21052ac8472c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24964:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24978:4:181","type":""}],"src":"24813:330:181"},{"body":{"nodeType":"YulBlock","src":"25322:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25339:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25350:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25332:6:181"},"nodeType":"YulFunctionCall","src":"25332:21:181"},"nodeType":"YulExpressionStatement","src":"25332:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25373:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25384:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25369:3:181"},"nodeType":"YulFunctionCall","src":"25369:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"25389:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25362:6:181"},"nodeType":"YulFunctionCall","src":"25362:29:181"},"nodeType":"YulExpressionStatement","src":"25362:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25411:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25422:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25407:3:181"},"nodeType":"YulFunctionCall","src":"25407:18:181"},{"hexValue":"21736f75726365","kind":"string","nodeType":"YulLiteral","src":"25427:9:181","type":"","value":"!source"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25400:6:181"},"nodeType":"YulFunctionCall","src":"25400:37:181"},"nodeType":"YulExpressionStatement","src":"25400:37:181"},{"nodeType":"YulAssignment","src":"25446:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25458:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25469:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25454:3:181"},"nodeType":"YulFunctionCall","src":"25454:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25446:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_599616dc1fbc723d39bc96590d652f93d467afd415e9f46bd106f14abf00049d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25299:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25313:4:181","type":""}],"src":"25148:330:181"},{"body":{"nodeType":"YulBlock","src":"25564:170:181","statements":[{"body":{"nodeType":"YulBlock","src":"25610:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25619:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"25622:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"25612:6:181"},"nodeType":"YulFunctionCall","src":"25612:12:181"},"nodeType":"YulExpressionStatement","src":"25612:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"25585:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"25594:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25581:3:181"},"nodeType":"YulFunctionCall","src":"25581:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"25606:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"25577:3:181"},"nodeType":"YulFunctionCall","src":"25577:32:181"},"nodeType":"YulIf","src":"25574:52:181"},{"nodeType":"YulVariableDeclaration","src":"25635:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25654:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25648:5:181"},"nodeType":"YulFunctionCall","src":"25648:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"25639:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"25698:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"25673:24:181"},"nodeType":"YulFunctionCall","src":"25673:31:181"},"nodeType":"YulExpressionStatement","src":"25673:31:181"},{"nodeType":"YulAssignment","src":"25713:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"25723:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"25713:6:181"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25530:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"25541:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"25553:6:181","type":""}],"src":"25483:251:181"},{"body":{"nodeType":"YulBlock","src":"25786:104:181","statements":[{"nodeType":"YulAssignment","src":"25796:39:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"25812:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"25815:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25808:3:181"},"nodeType":"YulFunctionCall","src":"25808:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"25826:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"25829:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25822:3:181"},"nodeType":"YulFunctionCall","src":"25822:12:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25804:3:181"},"nodeType":"YulFunctionCall","src":"25804:31:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"25796:4:181"}]},{"body":{"nodeType":"YulBlock","src":"25862:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"25864:16:181"},"nodeType":"YulFunctionCall","src":"25864:18:181"},"nodeType":"YulExpressionStatement","src":"25864:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"25850:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"25856:4:181","type":"","value":"0xff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"25847:2:181"},"nodeType":"YulFunctionCall","src":"25847:14:181"},"nodeType":"YulIf","src":"25844:40:181"}]},"name":"checked_sub_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"25768:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"25771:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"25777:4:181","type":""}],"src":"25739:151:181"},{"body":{"nodeType":"YulBlock","src":"25945:175:181","statements":[{"nodeType":"YulVariableDeclaration","src":"25955:50:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"25982:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"25985:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25978:3:181"},"nodeType":"YulFunctionCall","src":"25978:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"25996:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"25999:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25992:3:181"},"nodeType":"YulFunctionCall","src":"25992:12:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"25974:3:181"},"nodeType":"YulFunctionCall","src":"25974:31:181"},"variables":[{"name":"product_raw","nodeType":"YulTypedName","src":"25959:11:181","type":""}]},{"nodeType":"YulAssignment","src":"26014:33:181","value":{"arguments":[{"name":"product_raw","nodeType":"YulIdentifier","src":"26029:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"26042:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26025:3:181"},"nodeType":"YulFunctionCall","src":"26025:22:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"26014:7:181"}]},{"body":{"nodeType":"YulBlock","src":"26092:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"26094:16:181"},"nodeType":"YulFunctionCall","src":"26094:18:181"},"nodeType":"YulExpressionStatement","src":"26094:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"26069:7:181"},{"name":"product_raw","nodeType":"YulIdentifier","src":"26078:11:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"26066:2:181"},"nodeType":"YulFunctionCall","src":"26066:24:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"26059:6:181"},"nodeType":"YulFunctionCall","src":"26059:32:181"},"nodeType":"YulIf","src":"26056:58:181"}]},"name":"checked_mul_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"25924:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"25927:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"25933:7:181","type":""}],"src":"25895:225:181"},{"body":{"nodeType":"YulBlock","src":"26308:269:181","statements":[{"nodeType":"YulAssignment","src":"26318:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26330:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26341:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26326:3:181"},"nodeType":"YulFunctionCall","src":"26326:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26318:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"26354:36:181","value":{"kind":"number","nodeType":"YulLiteral","src":"26364:26:181","type":"","value":"0xffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"26358:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26406:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"26421:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"26429:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26417:3:181"},"nodeType":"YulFunctionCall","src":"26417:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26399:6:181"},"nodeType":"YulFunctionCall","src":"26399:34:181"},"nodeType":"YulExpressionStatement","src":"26399:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26453:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26464:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26449:3:181"},"nodeType":"YulFunctionCall","src":"26449:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"26473:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"26481:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26469:3:181"},"nodeType":"YulFunctionCall","src":"26469:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26442:6:181"},"nodeType":"YulFunctionCall","src":"26442:43:181"},"nodeType":"YulExpressionStatement","src":"26442:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26505:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26516:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26501:3:181"},"nodeType":"YulFunctionCall","src":"26501:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"26521:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26494:6:181"},"nodeType":"YulFunctionCall","src":"26494:34:181"},"nodeType":"YulExpressionStatement","src":"26494:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26548:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26559:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26544:3:181"},"nodeType":"YulFunctionCall","src":"26544:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"26564:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26537:6:181"},"nodeType":"YulFunctionCall","src":"26537:34:181"},"nodeType":"YulExpressionStatement","src":"26537:34:181"}]},"name":"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26253:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"26264:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"26272:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"26280:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"26288:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26299:4:181","type":""}],"src":"26125:452:181"},{"body":{"nodeType":"YulBlock","src":"26756:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26773:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26784:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26766:6:181"},"nodeType":"YulFunctionCall","src":"26766:21:181"},"nodeType":"YulExpressionStatement","src":"26766:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26807:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26818:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26803:3:181"},"nodeType":"YulFunctionCall","src":"26803:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"26823:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26796:6:181"},"nodeType":"YulFunctionCall","src":"26796:30:181"},"nodeType":"YulExpressionStatement","src":"26796:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26846:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26857:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26842:3:181"},"nodeType":"YulFunctionCall","src":"26842:18:181"},{"hexValue":"217472756e6361746564","kind":"string","nodeType":"YulLiteral","src":"26862:12:181","type":"","value":"!truncated"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26835:6:181"},"nodeType":"YulFunctionCall","src":"26835:40:181"},"nodeType":"YulExpressionStatement","src":"26835:40:181"},{"nodeType":"YulAssignment","src":"26884:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26896:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26907:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26892:3:181"},"nodeType":"YulFunctionCall","src":"26892:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26884:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26733:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26747:4:181","type":""}],"src":"26582:334:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        if iszero(lt(value0, 3))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 1120) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, shl(5, length)), 0x20), dataEnd) { revert(0, 0) }\n        value0 := add(_2, 0x20)\n        value1 := length\n        value2 := calldataload(add(headStart, 0x20))\n        let _3 := add(headStart, 1088)\n        if gt(_3, dataEnd) { revert(0, 0) }\n        value3 := add(headStart, 64)\n        value4 := calldataload(_3)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n    }\n    function abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value2 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_bytes(value1, add(headStart, 64))\n    }\n    function abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!delayBlocks\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"root already sent\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, value0)\n        end := add(pos, 32)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        let tail_1 := abi_encode_bytes(value0, add(headStart, 96))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value1, tail_1)\n        mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!AMB\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        tail := abi_encode_bytes(value0, add(headStart, 64))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!proofs\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr(base_ref, ptr_to_tail) -> addr\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(1086)))) { revert(0, 0) }\n        addr := add(base_ref, rel_offset_of_tail)\n    }\n    function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 11)\n        mstore(add(headStart, 64), \"!sharedRoot\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"aggregateRoot !exists\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 8)\n        mstore(add(headStart, 64), \"!watcher\")\n        tail := add(headStart, 96)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"already watcher manager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!allowlisted\")\n        tail := add(headStart, 96)\n    }\n    function increment_t_uint32(value) -> ret\n    {\n        let _1 := 0xffffffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_decode_tuple_t_bytes32t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Pausable: paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!data length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr_t_uint256__to_t_address_t_bytes_memory_ptr_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), 96)\n        tail := abi_encode_bytes(value1, add(headStart, 96))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"Pausable: not paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"!mirrorConnector\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_0d5605680c5f886aed2495c7e7998d97b3239c9572097b625996bd4acc3f63dd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!sourceChain\")\n        tail := add(headStart, 96)\n    }\n    function convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32(array) -> value\n    {\n        let length := mload(array)\n        value := mload(add(array, 0x20))\n        if lt(length, 0x20)\n        {\n            value := and(value, shl(shl(3, sub(0x20, length)), not(0)))\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"!MessageStatus.None\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"invalid inboundRoot\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!destination\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!proven\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n        mstore(add(headStart, 64), 96)\n        tail := abi_encode_bytes(value2, add(headStart, 96))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: insufficient balance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    { end := pos }\n    function abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 58)\n        mstore(add(headStart, 64), \"Address: unable to send value, r\")\n        mstore(add(headStart, 96), \"ecipient may have reverted\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"!new rate limit\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value5, value4, value3, value2, value1, value0) -> end\n    {\n        let _1 := shl(224, 0xffffffff)\n        mstore(pos, and(shl(224, value0), _1))\n        mstore(add(pos, 4), value1)\n        mstore(add(pos, 36), and(shl(224, value2), _1))\n        mstore(add(pos, 40), and(shl(224, value3), _1))\n        mstore(add(pos, 44), value4)\n        let length := mload(value5)\n        copy_memory_to_memory_with_cleanup(add(value5, 0x20), add(pos, 76), length)\n        end := add(add(pos, length), 76)\n    }\n    function abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"new root empty\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"root already pending\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"root already proven\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"aggregateRoot empty\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"aggregateRoot !exist\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"aggregateRoot !verified\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_5bd20fa0eac50a6892371dae18efeb7d2b1c7a8479150f38626e21052ac8472c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!bridge\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_599616dc1fbc723d39bc96590d652f93d467afd415e9f46bd106f14abf00049d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!source\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function checked_sub_t_uint8(x, y) -> diff\n    {\n        diff := sub(and(x, 0xff), and(y, 0xff))\n        if gt(diff, 0xff) { panic_error_0x11() }\n    }\n    function checked_mul_t_uint8(x, y) -> product\n    {\n        let product_raw := mul(and(x, 0xff), and(y, 0xff))\n        product := and(product_raw, 0xff)\n        if iszero(eq(product, product_raw)) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"!truncated\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"39039":[{"length":32,"start":1189},{"length":32,"start":1676},{"length":32,"start":5824},{"length":32,"start":7614}],"39042":[{"length":32,"start":2323},{"length":32,"start":3202},{"length":32,"start":6342},{"length":32,"start":6880},{"length":32,"start":9029},{"length":32,"start":9063}],"39045":[{"length":32,"start":1374}],"39048":[{"length":32,"start":720}],"39550":[{"length":32,"start":1872},{"length":32,"start":2778},{"length":32,"start":4122},{"length":32,"start":5918}],"39553":[{"length":32,"start":2397},{"length":32,"start":7903},{"length":32,"start":8044}],"39556":[{"length":32,"start":832},{"length":32,"start":7870}],"41234":[{"length":32,"start":2146},{"length":32,"start":11504}]},"linkReferences":{},"object":"6080604052600436106102b25760003560e01c80638456cb5911610175578063b95a2001116100dc578063d2a3cc7111610095578063d88beda21161006f578063d88beda21461094b578063db1b76591461097f578063e0fed0101461099f578063fa31de01146109bf57600080fd5b8063d2a3cc71146108e1578063d69f9d6114610901578063d7d317b31461093557600080fd5b8063b95a200114610808578063c5b350df1461083b578063c8a4d69014610850578063cc39428314610884578063d1851c92146108a4578063d232c220146108c257600080fd5b8063a01892a51161012e578063a01892a51461073e578063a792c29b14610772578063ad9c0c2e14610792578063b1f8100d146107a8578063b2f87643146107c8578063b697f531146107e857600080fd5b80638456cb59146106685780638d3638f41461067d5780638da5cb5b146106b057806398c9f2b9146106ce5780639d3117c7146106fe5780639fa92f9d1461072b57600080fd5b8063572386ca1161021957806365eaf11b116101d257806365eaf11b146105c857806368742da6146105dd5780636a42b8f8146105fd5780636b04a93314610613578063715018a6146106335780637850b0201461064857600080fd5b8063572386ca146104c7578063579c1618146104f75780635bd11efc1461050d5780635c975abb1461052d5780635f61e3ec1461054c5780636159ada11461059857600080fd5b80633cf52ffb1161026b5780633cf52ffb146104005780633f4ba83a146104155780634ff746f61461042a578063508a109b1461044a5780635190bc531461046a57806352a9674b1461049357600080fd5b806314168416146102be5780631eeaabea1461030c57806325e3beda1461032e5780632bb1ae7c146103705780632bbd59ca14610383578063301f07c3146103c057600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102f27f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b34801561031857600080fd5b5061032c6103273660046131bf565b6109ed565b005b34801561033a57600080fd5b506103627f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610303565b61032c61037e36600461327b565b610a97565b34801561038f57600080fd5b506103b361039e3660046131bf565b600f6020526000908152604090205460ff1681565b60405161030391906132c6565b3480156103cc57600080fd5b506103f06103db3660046131bf565b600a6020526000908152604090205460ff1681565b6040519015158152602001610303565b34801561040c57600080fd5b50600254610362565b34801561042157600080fd5b5061032c610c3a565b34801561043657600080fd5b5061032c61044536600461327b565b610c77565b34801561045657600080fd5b5061032c6104653660046132ee565b610d1d565b34801561047657600080fd5b506103f061048536600461339f565b6001600160a01b0316301490565b34801561049f57600080fd5b506102f27f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d357600080fd5b506103f06104e23660046131bf565b600c6020526000908152604090205460ff1681565b34801561050357600080fd5b5061036260055481565b34801561051957600080fd5b5061032c61052836600461339f565b610fdf565b34801561053957600080fd5b50600354600160a01b900460ff166103f0565b34801561055857600080fd5b506105807f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610303565b3480156105a457600080fd5b506103f06105b336600461339f565b600d6020526000908152604090205460ff1681565b3480156105d457600080fd5b50610362611016565b3480156105e957600080fd5b5061032c6105f836600461339f565b61109f565b34801561060957600080fd5b5062093a80610362565b34801561061f57600080fd5b5061032c61062e3660046131bf565b61111c565b34801561063f57600080fd5b5061032c6111e7565b34801561065457600080fd5b5061032c6106633660046131bf565b611212565b34801561067457600080fd5b5061032c611246565b34801561068957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102f2565b3480156106bc57600080fd5b506000546001600160a01b0316610580565b3480156106da57600080fd5b506103f06106e93660046131bf565b600b6020526000908152604090205460ff1681565b34801561070a57600080fd5b506103626107193660046131bf565b60096020526000908152604090205481565b34801561073757600080fd5b5030610580565b34801561074a57600080fd5b506105807f000000000000000000000000000000000000000000000000000000000000000081565b34801561077e57600080fd5b50600454610580906001600160a01b031681565b34801561079e57600080fd5b5061036260085481565b3480156107b457600080fd5b5061032c6107c336600461339f565b6112fa565b3480156107d457600080fd5b5061032c6107e336600461339f565b611398565b3480156107f457600080fd5b5061032c61080336600461339f565b611414565b34801561081457600080fd5b506102f26108233660046133d5565b600e6020526000908152604090205463ffffffff1681565b34801561084757600080fd5b5061032c611493565b34801561085c57600080fd5b506103627f000000000000000000000000000000000000000000000000000000000000000081565b34801561089057600080fd5b50600354610580906001600160a01b031681565b3480156108b057600080fd5b506001546001600160a01b0316610580565b3480156108ce57600080fd5b506000546001600160a01b0316156103f0565b3480156108ed57600080fd5b5061032c6108fc36600461339f565b611503565b34801561090d57600080fd5b506105807f000000000000000000000000000000000000000000000000000000000000000081565b34801561094157600080fd5b5061036260065481565b34801561095757600080fd5b506103627f000000000000000000000000000000000000000000000000000000000000000081565b34801561098b57600080fd5b506103f061099a36600461339f565b6115da565b3480156109ab57600080fd5b5061032c6109ba3660046131bf565b6115eb565b3480156109cb57600080fd5b506109df6109da3660046133f0565b61161f565b604051610303929190613497565b6000546001600160a01b03163314610a18576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610a5d5760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610a9f6117ee565b43600554600654610ab091906134c6565b1115610acf576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5a91906134d9565b6000818152600c602052604090205490915060ff1615610bb05760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b6044820152606401610a54565b600081604051602001610bc591815260200190565b6040516020818303038152906040529050610be0818461183b565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610c2d908390869033906134f2565b60405180910390a1505050565b6000546001600160a01b03163314610c65576040516311a8a1bb60e31b815260040160405180910390fd5b610c6d6119a9565b610c756119f9565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cd85760405162461bcd60e51b8152600401610a549060208082526004908201526310a0a6a160e11b604082015260600190565b610ce181611a4e565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610d12929190613530565b60405180910390a150565b610d256117ee565b610d2d611bad565b83610d645760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b6044820152606401610a54565b600085856000818110610d7957610d7961355a565b9050602002810190610d8b9190613570565b610d959080613591565b604051610da39291906135df565b604051809103902090506000610e0a8288886000818110610dc657610dc661355a565b9050602002810190610dd89190613570565b60200189896000818110610dee57610dee61355a565b9050602002810190610e009190613570565b6104200135611c06565b9050610e1881868686611cad565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610f3e5788888263ffffffff16818110610e5d57610e5d61355a565b9050602002810190610e6f9190613570565b610e799080613591565b604051610e879291906135df565b604051809103902093506000610edc858b8b8563ffffffff16818110610eaf57610eaf61355a565b9050602002810190610ec19190613570565b6020018c8c8663ffffffff16818110610dee57610dee61355a565b9050838114610f1b5760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b6044820152606401610a54565b506000848152600f60205260409020805460ff1916600190811790915501610e37565b5060005b818163ffffffff161015610fca57610fc189898363ffffffff16818110610f6b57610f6b61355a565b9050602002810190610f7d9190613570565b610f879080613591565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611da892505050565b50600101610f42565b50505050610fd86001600755565b5050505050565b6000546001600160a01b0316331461100a576040516311a8a1bb60e31b815260040160405180910390fd5b61101381612085565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109a91906134d9565b905090565b6000546001600160a01b031633146110ca576040516311a8a1bb60e31b815260040160405180910390fd5b476110d582826120ee565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d8260405161111091815260200190565b60405180910390a25050565b6000546001600160a01b03163314611147576040516311a8a1bb60e31b815260040160405180910390fd5b61114f6119a9565b60008181526009602052604081205490036111a45760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b6044820152606401610a54565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610d129083815260200190565b6000546001600160a01b03163314610c75576040516311a8a1bb60e31b815260040160405180910390fd5b6000546001600160a01b0316331461123d576040516311a8a1bb60e31b815260040160405180910390fd5b61101381612207565b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa15801561128f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b391906135ef565b6112ea5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610a54565b6112f26117ee565b610c75612248565b6000546001600160a01b03163314611325576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015611343575060025415155b15611361576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361138f57604051634a2fb73f60e11b815260040160405180910390fd5b6110138161228b565b6000546001600160a01b031633146113c3576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610d12565b6000546001600160a01b0316331461143f576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610d12565b6001546001600160a01b031633146114be576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426114d09190613611565b116114ee576040516324e0285f60e21b815260040160405180910390fd5b600154610c75906001600160a01b03166122d9565b6000546001600160a01b0316331461152e576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b039081169082160361158c5760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e616765720000000000000000006044820152606401610a54565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610d12565b60006115e58261233e565b92915050565b6000546001600160a01b03163314611616576040516311a8a1bb60e31b815260040160405180910390fd5b611013816123ec565b336000908152600d602052604081205460609060ff166116705760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b6044820152606401610a54565b63ffffffff8086166000908152600e602052604081208054919291909116908261169983613624565b91906101000a81548163ffffffff021916908363ffffffff160217905550905060006116f87f00000000000000000000000000000000000000000000000000000000000000006116ef336001600160a01b031690565b848a8a8a61246a565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af115801561176e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117929190613647565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f836117c4600184613611565b84876040516117d6949392919061366b565b60405180910390a15090989197509095505050505050565b600354600160a01b900460ff1615610c755760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a54565b81516020146118765760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a54565b80516020146118b65760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a54565b6003546040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263dc8601b3929116906327fba37b60e11b9061190890879060240161369a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611943856124a2565b6040518463ffffffff1660e01b8152600401611961939291906136ad565b6020604051808303816000875af1158015611980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a491906134d9565b505050565b600354600160a01b900460ff16610c755760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a54565b611a016119a9565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b8051602014611a895760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a54565b600354611a9e906001600160a01b031661233e565b611add5760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b6044820152606401610a54565b467f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631544298e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6091906134d9565b14611b9c5760405162461bcd60e51b815260206004820152600c60248201526b10b9b7bab931b2a1b430b4b760a11b6044820152606401610a54565b611013611ba8826136e1565b612500565b600260075403611bff5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a54565b6002600755565b6000806000858152600f602052604090205460ff166002811115611c2c57611c2c6132b0565b14611c6f5760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b6044820152606401610a54565b611ca38484602080602002604051908101604052809291908260208002808284376000920191909152508691506126299050565b90505b9392505050565b6000848152600b602052604090205460ff16611da257611ccc83612977565b6000611d028584602080602002604051908101604052809291908260208002808284376000920191909152508691506126299050565b9050838114611d495760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b6044820152606401610a54565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611d989086815260200190565b60405180910390a3505b50505050565b600080611db58382612ad7565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611ded62ffffff198316612afb565b63ffffffff1614611e2f5760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b6044820152606401610a54565b6000611e4062ffffff198316612b10565b905060016000828152600f602052604090205460ff166002811115611e6757611e676132b0565b14611e9e5760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b6044820152606401610a54565b6000818152600f60205260409020805460ff191660021790556001611f037f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006134c6565b611f0d9190613611565b5a11611f445760405162461bcd60e51b8152600401610a54906020808252600490820152632167617360e01b604082015260600190565b6000611f5562ffffff198416612b59565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611fb062ffffff198816612b6a565b611fbf62ffffff198916612b7e565b611fce62ffffff198a16612b93565b611feb611fe062ffffff198c16612ba8565b62ffffff1916612bd6565b604051602401611ffe9493929190613708565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050612038858560008685612c1f565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe48906120719088908b908690613737565b60405180910390a150505050505050919050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b8047101561213e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a54565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461218b576040519150601f19603f3d011682016040523d82523d6000602084013e612190565b606091505b50509050806119a45760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a54565b60105460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1601055565b6122506117ee565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a313390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60006115e57f0000000000000000000000000000000000000000000000000000000000000000837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b07506116040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e791906134d9565b612caa565b600554810361242f5760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b6044820152606401610a54565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610d12565b606086868686868660405160200161248796959493929190613758565b60405160208183030381529060405290509695505050505050565b600081516020146124e45760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a54565b6115e5828060200190518101906124fb91906134d9565b612dc5565b8061253e5760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b6044820152606401610a54565b600081815260096020526040902054156125915760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b6044820152606401610a54565b6000818152600a602052604090205460ff16156125e65760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b6044820152606401610a54565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610d129083815260200190565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b806129ba5760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b6044820152606401610a54565b6000818152600a602052604090205460ff16156129d45750565b60008181526009602052604081205490819003612a2a5760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b6044820152606401610a54565b600854612a378243613611565b1015612a855760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f74202176657269666965640000000000000000006044820152606401610a54565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b815160009060208401612af264ffffffffff85168284612ddb565b95945050505050565b60006115e562ffffff19831660286004612e18565b600080612b268360781c6001600160601b031690565b6001600160601b031690506000612b468460181c6001600160601b031690565b6001600160601b03169091209392505050565b60006115e5612b6783612e48565b90565b60006115e562ffffff198316826004612e18565b60006115e562ffffff19831660246004612e18565b60006115e562ffffff19831660046020612e59565b60006115e5604c612bc681601886901c6001600160601b0316613611565b62ffffff19851691906000612f64565b6060600080612bee8460181c6001600160601b031690565b6001600160601b031690506040519150819250612c0e8483602001612fe0565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff811115612c4557612c456131d8565b6040519080825280601f01601f191660200182016040528015612c6f576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612c90578692505b828152826000602083013e90999098509650505050505050565b6000336001600160a01b03851614612cee5760405162461bcd60e51b81526020600482015260076024820152662162726964676560c81b6044820152606401610a54565b7f00000000000000000000000000000000000000000000000000000000000000008214612d475760405162461bcd60e51b815260206004820152600760248201526621736f7572636560c81b6044820152606401610a54565b826001600160a01b0316846001600160a01b031663d67bdd256040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db391906137b2565b6001600160a01b031614949350505050565b6000601054821115612dd75760105491505b5090565b600080612de883856134c6565b9050604051811115612df8575060005b80600003612e0d5762ffffff19915050611ca6565b612af28585856130d3565b6000612e258260206137cf565b612e309060086137e8565b60ff16612e3e858585612e59565b901c949350505050565b60006115e562ffffff198316602c60205b60008160ff16600003612e6e57506000611ca6565b612e818460181c6001600160601b031690565b6001600160601b0316612e9760ff8416856134c6565b1115612eff57612eb08460781c6001600160601b031690565b612ec38560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610a54565b60208260ff161115612f245760405163045df3f960e01b815260040160405180910390fd5b600882026000612f3d8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612f7a8660781c6001600160601b031690565b6001600160601b03169050612f8e8661314a565b84612f9987846134c6565b612fa391906134c6565b1115612fb65762ffffff19915050612fd8565b612fc085826134c6565b9050612fd48364ffffffffff168286612ddb565b9150505b949350505050565b600062ffffff19808416036130085760405163148d513360e21b815260040160405180910390fd5b61301183613183565b1561302f57604051632ee0949160e11b815260040160405180910390fd5b60006130448460181c6001600160601b031690565b6001600160601b0316905060006130648560781c6001600160601b031690565b6001600160601b031690506000806040519150858211156130855760206060fd5b8386858560045afa9050806130ad57604051632af1bd9b60e21b815260040160405180910390fd5b6130c86130ba8860d81c90565b64ffffffffff1687866130d3565b979650505050505050565b60006060601883856001600160601b038216821480156130fb575086816001600160601b0316145b6131345760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610a54565b96831b90961790911b90941790931b9392505050565b600061315f8260181c6001600160601b031690565b6131728360781c6001600160601b031690565b016001600160601b03169050919050565b600061318f8260d81c90565b64ffffffffff1664ffffffffff036131a957506001919050565b60006131b48361314a565b604051109392505050565b6000602082840312156131d157600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126131ff57600080fd5b813567ffffffffffffffff8082111561321a5761321a6131d8565b604051601f8301601f19908116603f01168101908282118183101715613242576132426131d8565b8160405283815286602085880101111561325b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561328d57600080fd5b813567ffffffffffffffff8111156132a457600080fd5b612fd8848285016131ee565b634e487b7160e01b600052602160045260246000fd5b60208101600383106132e857634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806000610460868803121561330757600080fd5b853567ffffffffffffffff8082111561331f57600080fd5b818801915088601f83011261333357600080fd5b81358181111561334257600080fd5b8960208260051b850101111561335757600080fd5b60209283019750955050860135925061044086018781111561337857600080fd5b94979396509194604001933592915050565b6001600160a01b038116811461101357600080fd5b6000602082840312156133b157600080fd5b8135611ca68161338a565b803563ffffffff811681146133d057600080fd5b919050565b6000602082840312156133e757600080fd5b611ca6826133bc565b60008060006060848603121561340557600080fd5b61340e846133bc565b925060208401359150604084013567ffffffffffffffff81111561343157600080fd5b61343d868287016131ee565b9150509250925092565b60005b8381101561346257818101518382015260200161344a565b50506000910152565b60008151808452613483816020860160208601613447565b601f01601f19169290920160200192915050565b828152604060208201526000611ca3604083018461346b565b634e487b7160e01b600052601160045260246000fd5b808201808211156115e5576115e56134b0565b6000602082840312156134eb57600080fd5b5051919050565b606081526000613505606083018661346b565b8281036020840152613517818661346b565b91505060018060a01b0383166040830152949350505050565b604081526000613543604083018561346b565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e1983360301811261358757600080fd5b9190910192915050565b6000808335601e198436030181126135a857600080fd5b83018035915067ffffffffffffffff8211156135c357600080fd5b6020019150368190038213156135d857600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561360157600080fd5b81518015158114611ca657600080fd5b818103818111156115e5576115e56134b0565b600063ffffffff80831681810361363d5761363d6134b0565b6001019392505050565b6000806040838503121561365a57600080fd5b505080516020909101519092909150565b848152836020820152826040820152608060608201526000613690608083018461346b565b9695505050505050565b602081526000611ca6602083018461346b565b6001600160a01b03841681526060602082018190526000906136d19083018561346b565b9050826040830152949350505050565b80516020808301519190811015613702576000198160200360031b1b821691505b50919050565b600063ffffffff808716835280861660208401525083604083015260806060830152613690608083018461346b565b8381528215156020820152606060408201526000612af2606083018461346b565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c83015282516137a081604c850160208701613447565b91909101604c01979650505050505050565b6000602082840312156137c457600080fd5b8151611ca68161338a565b60ff82811682821603908111156115e5576115e56134b0565b60ff8181168382160290811690818114613804576138046134b0565b509291505056fea2646970667358221220c23780cb54942c64f152b504f2f46971273932b30e89e7626227a2a82d5b59f664736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B2 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x175 JUMPI DUP1 PUSH4 0xB95A2001 GT PUSH2 0xDC JUMPI DUP1 PUSH4 0xD2A3CC71 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xD88BEDA2 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xD88BEDA2 EQ PUSH2 0x94B JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x97F JUMPI DUP1 PUSH4 0xE0FED010 EQ PUSH2 0x99F JUMPI DUP1 PUSH4 0xFA31DE01 EQ PUSH2 0x9BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD2A3CC71 EQ PUSH2 0x8E1 JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x901 JUMPI DUP1 PUSH4 0xD7D317B3 EQ PUSH2 0x935 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB95A2001 EQ PUSH2 0x808 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x83B JUMPI DUP1 PUSH4 0xC8A4D690 EQ PUSH2 0x850 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x884 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x8A4 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x8C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA01892A5 GT PUSH2 0x12E JUMPI DUP1 PUSH4 0xA01892A5 EQ PUSH2 0x73E JUMPI DUP1 PUSH4 0xA792C29B EQ PUSH2 0x772 JUMPI DUP1 PUSH4 0xAD9C0C2E EQ PUSH2 0x792 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x7A8 JUMPI DUP1 PUSH4 0xB2F87643 EQ PUSH2 0x7C8 JUMPI DUP1 PUSH4 0xB697F531 EQ PUSH2 0x7E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x668 JUMPI DUP1 PUSH4 0x8D3638F4 EQ PUSH2 0x67D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x6B0 JUMPI DUP1 PUSH4 0x98C9F2B9 EQ PUSH2 0x6CE JUMPI DUP1 PUSH4 0x9D3117C7 EQ PUSH2 0x6FE JUMPI DUP1 PUSH4 0x9FA92F9D EQ PUSH2 0x72B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x572386CA GT PUSH2 0x219 JUMPI DUP1 PUSH4 0x65EAF11B GT PUSH2 0x1D2 JUMPI DUP1 PUSH4 0x65EAF11B EQ PUSH2 0x5C8 JUMPI DUP1 PUSH4 0x68742DA6 EQ PUSH2 0x5DD JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x5FD JUMPI DUP1 PUSH4 0x6B04A933 EQ PUSH2 0x613 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x633 JUMPI DUP1 PUSH4 0x7850B020 EQ PUSH2 0x648 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x572386CA EQ PUSH2 0x4C7 JUMPI DUP1 PUSH4 0x579C1618 EQ PUSH2 0x4F7 JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x52D JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x54C JUMPI DUP1 PUSH4 0x6159ADA1 EQ PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3CF52FFB GT PUSH2 0x26B JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x400 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x415 JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x42A JUMPI DUP1 PUSH4 0x508A109B EQ PUSH2 0x44A JUMPI DUP1 PUSH4 0x5190BC53 EQ PUSH2 0x46A JUMPI DUP1 PUSH4 0x52A9674B EQ PUSH2 0x493 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x2BE JUMPI DUP1 PUSH4 0x1EEAABEA EQ PUSH2 0x30C JUMPI DUP1 PUSH4 0x25E3BEDA EQ PUSH2 0x32E JUMPI DUP1 PUSH4 0x2BB1AE7C EQ PUSH2 0x370 JUMPI DUP1 PUSH4 0x2BBD59CA EQ PUSH2 0x383 JUMPI DUP1 PUSH4 0x301F07C3 EQ PUSH2 0x3C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x2B9 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F2 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x318 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x327 CALLDATASIZE PUSH1 0x4 PUSH2 0x31BF JUMP JUMPDEST PUSH2 0x9ED JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x303 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x37E CALLDATASIZE PUSH1 0x4 PUSH2 0x327B JUMP JUMPDEST PUSH2 0xA97 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x38F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3B3 PUSH2 0x39E CALLDATASIZE PUSH1 0x4 PUSH2 0x31BF JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x303 SWAP2 SWAP1 PUSH2 0x32C6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x3DB CALLDATASIZE PUSH1 0x4 PUSH2 0x31BF JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x303 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x40C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x362 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x421 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0xC3A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x436 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x445 CALLDATASIZE PUSH1 0x4 PUSH2 0x327B JUMP JUMPDEST PUSH2 0xC77 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x456 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x465 CALLDATASIZE PUSH1 0x4 PUSH2 0x32EE JUMP JUMPDEST PUSH2 0xD1D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x476 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x485 CALLDATASIZE PUSH1 0x4 PUSH2 0x339F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x49F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F2 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x4E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x31BF JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x503 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x528 CALLDATASIZE PUSH1 0x4 PUSH2 0x339F JUMP JUMPDEST PUSH2 0xFDF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x539 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3F0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x558 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x580 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x303 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x5B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x339F JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH2 0x1016 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x5F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x339F JUMP JUMPDEST PUSH2 0x109F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x609 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x362 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x61F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x62E CALLDATASIZE PUSH1 0x4 PUSH2 0x31BF JUMP JUMPDEST PUSH2 0x111C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x11E7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x654 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x663 CALLDATASIZE PUSH1 0x4 PUSH2 0x31BF JUMP JUMPDEST PUSH2 0x1212 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x674 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x1246 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x689 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x0 PUSH2 0x2F2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x580 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x6E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x31BF JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH2 0x719 CALLDATASIZE PUSH1 0x4 PUSH2 0x31BF JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x737 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH2 0x580 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x74A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x580 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x77E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x580 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x79E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x7C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x339F JUMP JUMPDEST PUSH2 0x12FA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x7E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x339F JUMP JUMPDEST PUSH2 0x1398 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x803 CALLDATASIZE PUSH1 0x4 PUSH2 0x339F JUMP JUMPDEST PUSH2 0x1414 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x814 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F2 PUSH2 0x823 CALLDATASIZE PUSH1 0x4 PUSH2 0x33D5 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x847 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x1493 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x85C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x890 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x580 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x580 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x3F0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x8FC CALLDATASIZE PUSH1 0x4 PUSH2 0x339F JUMP JUMPDEST PUSH2 0x1503 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x90D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x580 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x941 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x957 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x98B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x99A CALLDATASIZE PUSH1 0x4 PUSH2 0x339F JUMP JUMPDEST PUSH2 0x15DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x9BA CALLDATASIZE PUSH1 0x4 PUSH2 0x31BF JUMP JUMPDEST PUSH2 0x15EB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9DF PUSH2 0x9DA CALLDATASIZE PUSH1 0x4 PUSH2 0x33F0 JUMP JUMPDEST PUSH2 0x161F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x303 SWAP3 SWAP2 SWAP1 PUSH2 0x3497 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA18 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD DUP2 SUB PUSH2 0xA5D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2164656C6179426C6F636B73 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLER DUP2 MSTORE DUP2 SWAP1 PUSH32 0x8BD16320F3B60336ED5FD2A770EB7453E7E71CFEF4462ADDFFD7AE9DFE201C8E SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x8 SSTORE JUMP JUMPDEST PUSH2 0xA9F PUSH2 0x17EE JUMP JUMPDEST NUMBER PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD PUSH2 0xAB0 SWAP2 SWAP1 PUSH2 0x34C6 JUMP JUMPDEST GT ISZERO PUSH2 0xACF JUMPI PUSH1 0x40 MLOAD PUSH4 0x46CF2AF1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST NUMBER PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB36 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB5A SWAP2 SWAP1 PUSH2 0x34D9 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xBB0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1C9BDBDD08185B1C9958591E481CD95B9D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xBC5 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH2 0xBE0 DUP2 DUP5 PUSH2 0x183B JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 SWAP1 PUSH2 0xC2D SWAP1 DUP4 SWAP1 DUP7 SWAP1 CALLER SWAP1 PUSH2 0x34F2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC65 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC6D PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0xC75 PUSH2 0x19F9 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xCD8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA54 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0xCE1 DUP2 PUSH2 0x1A4E JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0xD12 SWAP3 SWAP2 SWAP1 PUSH2 0x3530 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xD25 PUSH2 0x17EE JUMP JUMPDEST PUSH2 0xD2D PUSH2 0x1BAD JUMP JUMPDEST DUP4 PUSH2 0xD64 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x2170726F6F6673 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD79 JUMPI PUSH2 0xD79 PUSH2 0x355A JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD8B SWAP2 SWAP1 PUSH2 0x3570 JUMP JUMPDEST PUSH2 0xD95 SWAP1 DUP1 PUSH2 0x3591 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDA3 SWAP3 SWAP2 SWAP1 PUSH2 0x35DF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xE0A DUP3 DUP9 DUP9 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xDC6 JUMPI PUSH2 0xDC6 PUSH2 0x355A JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xDD8 SWAP2 SWAP1 PUSH2 0x3570 JUMP JUMPDEST PUSH1 0x20 ADD DUP10 DUP10 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xDEE JUMPI PUSH2 0xDEE PUSH2 0x355A JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE00 SWAP2 SWAP1 PUSH2 0x3570 JUMP JUMPDEST PUSH2 0x420 ADD CALLDATALOAD PUSH2 0x1C06 JUMP JUMPDEST SWAP1 POP PUSH2 0xE18 DUP2 DUP7 DUP7 DUP7 PUSH2 0x1CAD JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP7 SWAP1 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xF3E JUMPI DUP9 DUP9 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xE5D JUMPI PUSH2 0xE5D PUSH2 0x355A JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE6F SWAP2 SWAP1 PUSH2 0x3570 JUMP JUMPDEST PUSH2 0xE79 SWAP1 DUP1 PUSH2 0x3591 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE87 SWAP3 SWAP2 SWAP1 PUSH2 0x35DF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP4 POP PUSH1 0x0 PUSH2 0xEDC DUP6 DUP12 DUP12 DUP6 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xEAF JUMPI PUSH2 0xEAF PUSH2 0x355A JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xEC1 SWAP2 SWAP1 PUSH2 0x3570 JUMP JUMPDEST PUSH1 0x20 ADD DUP13 DUP13 DUP7 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xDEE JUMPI PUSH2 0xDEE PUSH2 0x355A JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0xF1B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x85CDA185C9959149BDBDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE ADD PUSH2 0xE37 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xFCA JUMPI PUSH2 0xFC1 DUP10 DUP10 DUP4 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xF6B JUMPI PUSH2 0xF6B PUSH2 0x355A JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xF7D SWAP2 SWAP1 PUSH2 0x3570 JUMP JUMPDEST PUSH2 0xF87 SWAP1 DUP1 PUSH2 0x3591 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1DA8 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xF42 JUMP JUMPDEST POP POP POP POP PUSH2 0xFD8 PUSH1 0x1 PUSH1 0x7 SSTORE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x100A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1013 DUP2 PUSH2 0x2085 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1076 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x109A SWAP2 SWAP1 PUSH2 0x34D9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10CA JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SELFBALANCE PUSH2 0x10D5 DUP3 DUP3 PUSH2 0x20EE JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEAFF4B37086828766AD3268786972C0CD24259D4C87A80F9D3963A3C3D999B0D DUP3 PUSH1 0x40 MLOAD PUSH2 0x1110 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1147 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x114F PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SUB PUSH2 0x11A4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x616767726567617465526F6F742021657869737473 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xF51534ECF10A58DB36CE4F5180F59DEDDF3B3EB7C5E7454E602C2F80A40CC739 SWAP1 PUSH2 0xD12 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC75 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x123D JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1013 DUP2 PUSH2 0x2207 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x128F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12B3 SWAP2 SWAP1 PUSH2 0x35EF JUMP JUMPDEST PUSH2 0x12EA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH2 0x12F2 PUSH2 0x17EE JUMP JUMPDEST PUSH2 0xC75 PUSH2 0x2248 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1325 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x1343 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1361 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x138F JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1013 DUP2 PUSH2 0x228B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x13C3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x384859C5EF5FAFAC31E8BC92CE7FB48B1F2C74C4DD5E212EB84EC202FA5D9FAD SWAP2 ADD PUSH2 0xD12 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x143F JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xD65ECA5D561D3A4568C87B9B13CED4AB52A69EDADFDFDB22D76BC595F36D7D87 SWAP2 ADD PUSH2 0xD12 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x14BE JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x14D0 SWAP2 SWAP1 PUSH2 0x3611 JUMP JUMPDEST GT PUSH2 0x14EE JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0xC75 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x22D9 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x152E JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0x158C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616C72656164792077617463686572206D616E61676572000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC16D059E43D7F8E29CCB4E001A2F249D3C59E274925D6A6BC3912943441D9F6C SWAP1 PUSH1 0x20 ADD PUSH2 0xD12 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E5 DUP3 PUSH2 0x233E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1616 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1013 DUP2 PUSH2 0x23EC JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x60 SWAP1 PUSH1 0xFF AND PUSH2 0x1670 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x8585B1B1BDDDB1A5CDD1959 PUSH1 0xA2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP3 PUSH2 0x1699 DUP4 PUSH2 0x3624 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH4 0xFFFFFFFF AND MUL OR SWAP1 SSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0x16F8 PUSH32 0x0 PUSH2 0x16EF CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP5 DUP11 DUP11 DUP11 PUSH2 0x246A JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH4 0x2D287E43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2D287E43 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x176E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1792 SWAP2 SWAP1 PUSH2 0x3647 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH32 0x40F08EE347FC927AE45902EDC87DEBB024AAB1A311943731968607F603F2152F DUP4 PUSH2 0x17C4 PUSH1 0x1 DUP5 PUSH2 0x3611 JUMP JUMPDEST DUP5 DUP8 PUSH1 0x40 MLOAD PUSH2 0x17D6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x366B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP SWAP1 SWAP9 SWAP2 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xC75 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x1876 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0x18B6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND SWAP3 PUSH4 0xDC8601B3 SWAP3 SWAP2 AND SWAP1 PUSH4 0x27FBA37B PUSH1 0xE1 SHL SWAP1 PUSH2 0x1908 SWAP1 DUP8 SWAP1 PUSH1 0x24 ADD PUSH2 0x369A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x1943 DUP6 PUSH2 0x24A2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1961 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x36AD JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1980 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19A4 SWAP2 SWAP1 PUSH2 0x34D9 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xC75 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH2 0x1A01 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0x1A89 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x1A9E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x233E JUMP JUMPDEST PUSH2 0x1ADD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x10B6B4B93937B921B7B73732B1BA37B9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST CHAINID PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1544298E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B3C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B60 SWAP2 SWAP1 PUSH2 0x34D9 JUMP JUMPDEST EQ PUSH2 0x1B9C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B9B7BAB931B2A1B430B4B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH2 0x1013 PUSH2 0x1BA8 DUP3 PUSH2 0x36E1 JUMP JUMPDEST PUSH2 0x2500 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SLOAD SUB PUSH2 0x1BFF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1C2C JUMPI PUSH2 0x1C2C PUSH2 0x32B0 JUMP JUMPDEST EQ PUSH2 0x1C6F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x214D6573736167655374617475732E4E6F6E65 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH2 0x1CA3 DUP5 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x2629 SWAP1 POP JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1DA2 JUMPI PUSH2 0x1CCC DUP4 PUSH2 0x2977 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D02 DUP6 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x2629 SWAP1 POP JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0x1D49 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1A5B9D985B1A59081A5B989BDD5B99149BDBDD PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP5 SWAP1 DUP7 SWAP1 PUSH32 0x7EC1EA51FE3DB53E55ED9D922854BC2156F467FF2F87D74E2086DAE2C84A88A8 SWAP1 PUSH2 0x1D98 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1DB5 DUP4 DUP3 PUSH2 0x2AD7 JUMP JUMPDEST SWAP1 POP PUSH4 0xFFFFFFFF PUSH32 0x0 AND PUSH2 0x1DED PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x2AFB JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x1E2F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B232B9BA34B730BA34B7B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E40 PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x2B10 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1E67 JUMPI PUSH2 0x1E67 PUSH2 0x32B0 JUMP JUMPDEST EQ PUSH2 0x1E9E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x10B83937BB32B7 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x2 OR SWAP1 SSTORE PUSH1 0x1 PUSH2 0x1F03 PUSH32 0x0 PUSH32 0x0 PUSH2 0x34C6 JUMP JUMPDEST PUSH2 0x1F0D SWAP2 SWAP1 PUSH2 0x3611 JUMP JUMPDEST GAS GT PUSH2 0x1F44 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA54 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x21676173 PUSH1 0xE0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F55 PUSH3 0xFFFFFF NOT DUP5 AND PUSH2 0x2B59 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH32 0x0 SWAP2 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x1FB0 PUSH3 0xFFFFFF NOT DUP9 AND PUSH2 0x2B6A JUMP JUMPDEST PUSH2 0x1FBF PUSH3 0xFFFFFF NOT DUP10 AND PUSH2 0x2B7E JUMP JUMPDEST PUSH2 0x1FCE PUSH3 0xFFFFFF NOT DUP11 AND PUSH2 0x2B93 JUMP JUMPDEST PUSH2 0x1FEB PUSH2 0x1FE0 PUSH3 0xFFFFFF NOT DUP13 AND PUSH2 0x2BA8 JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND PUSH2 0x2BD6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1FFE SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3708 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xAB2DC3F5 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 POP PUSH2 0x2038 DUP6 DUP6 PUSH1 0x0 DUP7 DUP6 PUSH2 0x2C1F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP10 POP SWAP3 POP PUSH32 0xD42DE95A9B26F1BE134C8ECCE389DC4FCFA18753D01661B7B361233569E8FE48 SWAP1 PUSH2 0x2071 SWAP1 DUP9 SWAP1 DUP12 SWAP1 DUP7 SWAP1 PUSH2 0x3737 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x213E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x218B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2190 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x19A4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x10 SSTORE JUMP JUMPDEST PUSH2 0x2250 PUSH2 0x17EE JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1A31 CALLER SWAP1 JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E5 PUSH32 0x0 DUP4 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB0750611 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23E7 SWAP2 SWAP1 PUSH2 0x34D9 JUMP JUMPDEST PUSH2 0x2CAA JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 SUB PUSH2 0x242F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x85B995DC81C985D19481B1A5B5A5D PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0x8E7FA5E406CB856AAB05575E45EA011C6748376CC1B5229E3D67B92986406A15 SWAP2 ADD PUSH2 0xD12 JUMP JUMPDEST PUSH1 0x60 DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2487 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3758 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x24E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH2 0x15E5 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x24FB SWAP2 SWAP1 PUSH2 0x34D9 JUMP JUMPDEST PUSH2 0x2DC5 JUMP JUMPDEST DUP1 PUSH2 0x253E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x6E657720726F6F7420656D707479 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x2591 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x726F6F7420616C72656164792070656E64696E67 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x25E6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x3937B7BA1030B63932B0B23C90383937BB32B7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 NUMBER SWAP1 SSTORE MLOAD PUSH32 0x84EF18531155AFDB0E64FF905D67044AE3AAC63A6FBA4661CFD9C4C14F289BC8 SWAP1 PUSH2 0xD12 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x5 DUP3 DUP2 SHL DUP3 AND SWAP5 DUP6 MSTORE DUP4 MLOAD SWAP5 DUP3 SUB SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x40 PUSH1 0x0 DUP2 DUP2 KECCAK256 PUSH1 0x2 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x4 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP3 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x8 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x10 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 DUP5 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 DUP4 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 SWAP1 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xE0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x100 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x200 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x120 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x400 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x140 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x800 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x160 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x1000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x2000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x4000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1C0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x8000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1E0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH3 0x10000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x20000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x220 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x40000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x240 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x80000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x260 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x100000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x280 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x200000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x400000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x800000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2E0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x1000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x300 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x2000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x320 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x4000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x340 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x8000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x360 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x10000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x380 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x20000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x40000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x80000000 SWAP1 SWAP5 AND ISZERO SWAP1 SWAP6 SHL SWAP2 DUP3 SWAP1 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x3E0 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x29BA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x616767726567617465526F6F7420656D707479 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x29D4 JUMPI POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x2A2A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x1859D9DC9959D85D19549BDBDD0808595E1A5CDD PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x2A37 DUP3 NUMBER PUSH2 0x3611 JUMP JUMPDEST LT ISZERO PUSH2 0x2A85 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616767726567617465526F6F7420217665726966696564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP4 SWAP2 PUSH32 0x36B314ABA9F663B4D3EF3288AE489341CC5E6A2725A05FA2B72DF7A27E03F42A SWAP2 LOG2 POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0x2AF2 PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x2DDB JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E5 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x28 PUSH1 0x4 PUSH2 0x2E18 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2B26 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2B46 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 SWAP2 KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E5 PUSH2 0x2B67 DUP4 PUSH2 0x2E48 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E5 PUSH3 0xFFFFFF NOT DUP4 AND DUP3 PUSH1 0x4 PUSH2 0x2E18 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E5 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x24 PUSH1 0x4 PUSH2 0x2E18 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E5 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x4 PUSH1 0x20 PUSH2 0x2E59 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E5 PUSH1 0x4C PUSH2 0x2BC6 DUP2 PUSH1 0x18 DUP7 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x3611 JUMP JUMPDEST PUSH3 0xFFFFFF NOT DUP6 AND SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2F64 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x2BEE DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x40 MLOAD SWAP2 POP DUP2 SWAP3 POP PUSH2 0x2C0E DUP5 DUP4 PUSH1 0x20 ADD PUSH2 0x2FE0 JUMP JUMPDEST POP DUP2 DUP2 ADD PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH2 0xFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2C45 JUMPI PUSH2 0x2C45 PUSH2 0x31D8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2C6F JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP8 MLOAD PUSH1 0x20 DUP10 ADD DUP12 DUP15 DUP15 CALL SWAP2 POP RETURNDATASIZE SWAP3 POP DUP7 DUP4 GT ISZERO PUSH2 0x2C90 JUMPI DUP7 SWAP3 POP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EQ PUSH2 0x2CEE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x21627269646765 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH32 0x0 DUP3 EQ PUSH2 0x2D47 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x21736F75726365 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD67BDD25 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D8F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2DB3 SWAP2 SWAP1 PUSH2 0x37B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x10 SLOAD DUP3 GT ISZERO PUSH2 0x2DD7 JUMPI PUSH1 0x10 SLOAD SWAP2 POP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2DE8 DUP4 DUP6 PUSH2 0x34C6 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x2DF8 JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x2E0D JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x1CA6 JUMP JUMPDEST PUSH2 0x2AF2 DUP6 DUP6 DUP6 PUSH2 0x30D3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E25 DUP3 PUSH1 0x20 PUSH2 0x37CF JUMP JUMPDEST PUSH2 0x2E30 SWAP1 PUSH1 0x8 PUSH2 0x37E8 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x2E3E DUP6 DUP6 DUP6 PUSH2 0x2E59 JUMP JUMPDEST SWAP1 SHR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15E5 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x2C PUSH1 0x20 JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0x2E6E JUMPI POP PUSH1 0x0 PUSH2 0x1CA6 JUMP JUMPDEST PUSH2 0x2E81 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x2E97 PUSH1 0xFF DUP5 AND DUP6 PUSH2 0x34C6 JUMP JUMPDEST GT ISZERO PUSH2 0x2EFF JUMPI PUSH2 0x2EB0 DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2EC3 DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA54 JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x2F24 JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0x2F3D DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT DUP5 ADD SAR SWAP2 SWAP1 SWAP6 ADD MLOAD AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2F7A DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH2 0x2F8E DUP7 PUSH2 0x314A JUMP JUMPDEST DUP5 PUSH2 0x2F99 DUP8 DUP5 PUSH2 0x34C6 JUMP JUMPDEST PUSH2 0x2FA3 SWAP2 SWAP1 PUSH2 0x34C6 JUMP JUMPDEST GT ISZERO PUSH2 0x2FB6 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x2FD8 JUMP JUMPDEST PUSH2 0x2FC0 DUP6 DUP3 PUSH2 0x34C6 JUMP JUMPDEST SWAP1 POP PUSH2 0x2FD4 DUP4 PUSH5 0xFFFFFFFFFF AND DUP3 DUP7 PUSH2 0x2DDB JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFFFFFF NOT DUP1 DUP5 AND SUB PUSH2 0x3008 JUMPI PUSH1 0x40 MLOAD PUSH4 0x148D5133 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3011 DUP4 PUSH2 0x3183 JUMP JUMPDEST ISZERO PUSH2 0x302F JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EE09491 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3044 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x3064 DUP6 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD SWAP2 POP DUP6 DUP3 GT ISZERO PUSH2 0x3085 JUMPI PUSH1 0x20 PUSH1 0x60 REVERT JUMPDEST DUP4 DUP7 DUP6 DUP6 PUSH1 0x4 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x30AD JUMPI PUSH1 0x40 MLOAD PUSH4 0x2AF1BD9B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x30C8 PUSH2 0x30BA DUP9 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND DUP8 DUP7 PUSH2 0x30D3 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0x30FB JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0x3134 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA54 JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x315F DUP3 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x3172 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x318F DUP3 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH5 0xFFFFFFFFFF SUB PUSH2 0x31A9 JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x31B4 DUP4 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x40 MLOAD LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x31D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x31FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x321A JUMPI PUSH2 0x321A PUSH2 0x31D8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x3242 JUMPI PUSH2 0x3242 PUSH2 0x31D8 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x325B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x328D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x32A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2FD8 DUP5 DUP3 DUP6 ADD PUSH2 0x31EE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH2 0x32E8 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x460 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3307 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x331F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3333 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x3342 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x3357 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 DUP4 ADD SWAP8 POP SWAP6 POP POP DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x440 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x3378 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x40 ADD SWAP4 CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1013 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1CA6 DUP2 PUSH2 0x338A JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x33D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1CA6 DUP3 PUSH2 0x33BC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3405 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x340E DUP5 PUSH2 0x33BC JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3431 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x343D DUP7 DUP3 DUP8 ADD PUSH2 0x31EE JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3462 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x344A JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x3483 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3447 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1CA3 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x346B JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x15E5 JUMPI PUSH2 0x15E5 PUSH2 0x34B0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x34EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3505 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x346B JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x3517 DUP2 DUP7 PUSH2 0x346B JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3543 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x346B JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x43E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3587 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x35A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x35C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x35D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3601 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1CA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x15E5 JUMPI PUSH2 0x15E5 PUSH2 0x34B0 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x363D JUMPI PUSH2 0x363D PUSH2 0x34B0 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x365A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x3690 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x346B JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1CA6 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x346B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x36D1 SWAP1 DUP4 ADD DUP6 PUSH2 0x346B JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x3702 JUMPI PUSH1 0x0 NOT DUP2 PUSH1 0x20 SUB PUSH1 0x3 SHL SHL DUP3 AND SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3690 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x346B JUMP JUMPDEST DUP4 DUP2 MSTORE DUP3 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2AF2 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x346B JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP1 DUP10 PUSH1 0xE0 SHL AND DUP4 MSTORE DUP8 PUSH1 0x4 DUP5 ADD MSTORE DUP1 DUP8 PUSH1 0xE0 SHL AND PUSH1 0x24 DUP5 ADD MSTORE DUP1 DUP7 PUSH1 0xE0 SHL AND PUSH1 0x28 DUP5 ADD MSTORE POP DUP4 PUSH1 0x2C DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x37A0 DUP2 PUSH1 0x4C DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x3447 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x4C ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x37C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1CA6 DUP2 PUSH2 0x338A JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x15E5 JUMPI PUSH2 0x15E5 PUSH2 0x34B0 JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND MUL SWAP1 DUP2 AND SWAP1 DUP2 DUP2 EQ PUSH2 0x3804 JUMPI PUSH2 0x3804 PUSH2 0x34B0 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC2 CALLDATACOPY DUP1 0xCB SLOAD SWAP5 0x2C PUSH5 0xF152B504F2 DELEGATECALL PUSH10 0x71273932B30E89E76262 0x27 LOG2 0xA8 0x2D JUMPDEST MSIZE 0xF6 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"297:2524:125:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1587:37:116;;;;;;;;;;;;;;;;;;188:10:181;176:23;;;158:42;;146:2;131:18;1587:37:116;;;;;;;;8274:213:120;;;;;;;;;;-1:-1:-1;8274:213:120;;;;;:::i;:::-;;:::i;:::-;;3780:36;;;;;;;;;;;;;;;;;;542:25:181;;;530:2;515:18;3780:36:120;396:177:181;11079:368:120;;;;;;:::i;:::-;;:::i;5679:49::-;;;;;;;;;;-1:-1:-1;5679:49:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;4723:52::-;;;;;;;;;;-1:-1:-1;4723:52:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2592:14:181;;2585:22;2567:41;;2555:2;2540:18;4723:52:120;2427:187:181;1949:112:168;;;;;;;;;;-1:-1:-1;2029:27:168;;1949:112;;1810:70:114;;;;;;;;;;;;;:::i;4262:148:116:-;;;;;;;;;;-1:-1:-1;4262:148:116;;;;;:::i;:::-;;:::i;14590:2124:120:-;;;;;;;;;;-1:-1:-1;14590:2124:120;;;;;:::i;:::-;;:::i;805:125:117:-;;;;;;;;;;-1:-1:-1;805:125:117;;;;;:::i;:::-;-1:-1:-1;;;;;891:34:117;920:4;891:34;;805:125;1268:30:116;;;;;;;;;;;;;;;5237:48:120;;;;;;;;;;-1:-1:-1;5237:48:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;853:30:167;;;;;;;;;;;;;;;;3939:119:116;;;;;;;;;;-1:-1:-1;3939:119:116;;;;;:::i;:::-;;:::i;1615:84:51:-;;;;;;;;;;-1:-1:-1;1685:7:51;;-1:-1:-1;;;1685:7:51;;;;1615:84;;1451:37:116;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4108:32:181;;;4090:51;;4078:2;4063:18;1451:37:116;3944:203:181;5424:50:120;;;;;;;;;;-1:-1:-1;5424:50:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;10615:87;;;;;;;;;;;;;:::i;9896:185::-;;;;;;;;;;-1:-1:-1;9896:185:120;;;;;:::i;:::-;;:::i;2151:79:168:-;;;;;;;;;;-1:-1:-1;1530:6:168;2151:79;;9312:328:120;;;;;;;;;;-1:-1:-1;9312:328:120;;;;;:::i;:::-;;:::i;1080:98:125:-;;;;;;;;;;;;;:::i;860:83:118:-;;;;;;;;;;-1:-1:-1;860:83:118;;;;;:::i;:::-;;:::i;2321:71:114:-;;;;;;;;;;;;;:::i;10853:87:120:-;;;;;;;;;;-1:-1:-1;10929:6:120;10853:87;;1641:79:168;;;;;;;;;;-1:-1:-1;1687:7:168;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;5017:50:120;;;;;;;;;;-1:-1:-1;5017:50:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;4312:56;;;;;;;;;;-1:-1:-1;4312:56:120;;;;;:::i;:::-;;;;;;;;;;;;;;715:86:117;;;;;;;;;;-1:-1:-1;790:4:117;715:86;;3501:41:120;;;;;;;;;;;;;;;911:36:114;;;;;;;;;;-1:-1:-1;911:36:114;;;;-1:-1:-1;;;;;911:36:114;;;3276:26:120;;;;;;;;;;;;;;;;3321:420:168;;;;;;;;;;-1:-1:-1;3321:420:168;;;;;:::i;:::-;;:::i;8018:134:120:-;;;;;;;;;;-1:-1:-1;8018:134:120;;;;;:::i;:::-;;:::i;7757:129::-;;;;;;;;;;-1:-1:-1;7757:129:120;;;;;:::i;:::-;;:::i;5551:39::-;;;;;;;;;;-1:-1:-1;5551:39:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;4404:539:168;;;;;;;;;;;;;:::i;256:40:123:-;;;;;;;;;;;;;;;1705:30:116;;;;;;;;;;-1:-1:-1;1705:30:116;;;;-1:-1:-1;;;;;1705:30:116;;;1792:85:168;;;;;;;;;;-1:-1:-1;1863:9:168;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;;;;;;;;;;-1:-1:-1;3097:4:168;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;1457:263:114;;;;;;;;;;-1:-1:-1;1457:263:114;;;;;:::i;:::-;;:::i;1363:28:116:-;;;;;;;;;;;;;;;959::167;;;;;;;;;;;;;;;;3640:36:120;;;;;;;;;;;;;;;4490:107:116;;;;;;;;;;-1:-1:-1;4490:107:116;;;;;:::i;:::-;;:::i;8892::120:-;;;;;;;;;;-1:-1:-1;8892:107:120;;;;;:::i;:::-;;:::i;11954:1067::-;;;;;;;;;;-1:-1:-1;11954:1067:120;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;8274:213::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;8367:11:120::1;;8351:12;:27:::0;8343:52:::1;;;::::0;-1:-1:-1;;;8343:52:120;;6873:2:181;8343:52:120::1;::::0;::::1;6855:21:181::0;6912:2;6892:18;;;6885:30;-1:-1:-1;;;6931:18:181;;;6924:42;6983:18;;8343:52:120::1;;;;;;;;;8406:44;::::0;8439:10:::1;4090:51:181::0;;8425:12:120;;8406:44:::1;::::0;4078:2:181;4063:18;8406:44:120::1;;;;;;;8456:11;:26:::0;8274:213::o;11079:368::-;1239:19:51;:17;:19::i;:::-;1418:12:167::1;1400:15;;1384:13;;:31;;;;:::i;:::-;:46;1380:124;;;1447:50;;-1:-1:-1::0;;;1447:50:167::1;;;;;;;;;;;1380:124;1595:12;1579:13;:28;;;;11169:12:120::2;11184:6;-1:-1:-1::0;;;;;11184:11:120::2;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11211:22;::::0;;;:16:::2;:22;::::0;;;;;11169:28;;-1:-1:-1;11211:22:120::2;;:31;11203:61;;;::::0;-1:-1:-1;;;11203:61:120;;7665:2:181;11203:61:120::2;::::0;::::2;7647:21:181::0;7704:2;7684:18;;;7677:30;-1:-1:-1;;;7723:18:181;;;7716:47;7780:18;;11203:61:120::2;7463:341:181::0;11203:61:120::2;11270:18;11308:4;11291:22;;;;;;7938:19:181::0;;7982:2;7973:12;;7809:182;11291:22:120::2;;;;;;;;;;;;;11270:43;;11319:33;11332:5;11339:12;11319;:33::i;:::-;11358:22;::::0;;;:16:::2;:22;::::0;;;;;;:29;;-1:-1:-1;;11358:29:120::2;11383:4;11358:29;::::0;;11398:44;::::2;::::0;::::2;::::0;11410:5;;11417:12;;11431:10:::2;::::0;11398:44:::2;:::i;:::-;;;;;;;;11163:284;;11079:368:::0;:::o;1810:70:114:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1486:16:51::1;:14;:16::i;:::-;1865:10:114::2;:8;:10::i;:::-;1810:70::o:0;4262:148:116:-;1891:10;-1:-1:-1;;;;;1905:3:116;1891:17;;1883:34;;;;-1:-1:-1;;;1883:34:116;;;;;;8677:2:181;8659:21;;;8716:1;8696:18;;;8689:29;-1:-1:-1;;;8749:2:181;8734:18;;8727:34;8793:2;8778:18;;8475:327;1883:34:116;4337:22:::1;4353:5;4337:15;:22::i;:::-;4370:35;4387:5;4394:10;4370:35;;;;;;;:::i;:::-;;;;;;;;4262:148:::0;:::o;14590:2124:120:-;1239:19:51;:17;:19::i;:::-;2261:21:52::1;:19;:21::i;:::-;14839:18:120::0;14831:38:::2;;;::::0;-1:-1:-1;;;14831:38:120;;9328:2:181;14831:38:120::2;::::0;::::2;9310:21:181::0;9367:1;9347:18;;;9340:29;-1:-1:-1;;;9385:18:181;;;9378:37;9432:18;;14831:38:120::2;9126:330:181::0;14831:38:120::2;15122:20;15155:7;;15163:1;15155:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;15145:29;;;;;;;:::i;:::-;;;;;;;;15122:52;;15304:20;15327:69;15348:12;15362:7;;15370:1;15362:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:15;;15379:7;;15387:1;15379:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:16;;;15327:20;:69::i;:::-;15304:92;;15485:79;15502:12;15516:14;15532;15548:15;15485:16;:79::i;:::-;15667:22;::::0;;;:8:::2;:22;::::0;;;;:45;;-1:-1:-1;;15667:45:120::2;15692:20;15667:45:::0;;::::2;::::0;;;15852:7;;15872:441:::2;15895:3;15891:1;:7;;;15872:441;;;15935:7;;15943:1;15935:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;15925:29;;;;;;;:::i;:::-;;;;;;;;15910:44;;15962:23;15988:69;16009:12;16023:7;;16031:1;16023:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:15;;16040:7;;16048:1;16040:10;;;;;;;;;:::i;15988:69::-;15962:95;;16157:12;16138:15;:31;16130:55;;;::::0;-1:-1:-1;;;16130:55:120;;10927:2:181;16130:55:120::2;::::0;::::2;10909:21:181::0;10966:2;10946:18;;;10939:30;-1:-1:-1;;;10985:18:181;;;10978:41;11036:18;;16130:55:120::2;10725:335:181::0;16130:55:120::2;-1:-1:-1::0;16221:22:120::2;::::0;;;:8:::2;:22;::::0;;;;:45;;-1:-1:-1;;16221:45:120::2;16246:20;16221:45:::0;;::::2;::::0;;;16295:3:::2;15872:441;;;;16604:8;16599:111;16622:3;16618:1;:7;;;16599:111;;;16637:27;16645:7;;16653:1;16645:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;16637:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;16637:7:120::2;::::0;-1:-1:-1;;;16637:27:120:i:2;:::-;-1:-1:-1::0;16692:3:120::2;;16599:111;;;;14783:1931;;;2303:20:52::1;1716:1:::0;2809:7;:22;2629:209;2303:20:::1;14590:2124:120::0;;;;;:::o;3939:119:116:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4016:37:116::1;4036:16;4016:19;:37::i;:::-;3939:119:::0;:::o;10615:87:120:-;10662:7;10684:6;-1:-1:-1;;;;;10684:11:120;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10677:20;;10615:87;:::o;9896:185::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;9972:21:120::1;9999:39;10025:3:::0;9972:21;9999:17:::1;:39::i;:::-;10064:3;-1:-1:-1::0;;;;;10049:27:120::1;;10069:6;10049:27;;;;542:25:181::0;;530:2;515:18;;396:177;10049:27:120::1;;;;;;;;9949:132;9896:185:::0;:::o;9312:328::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1486:16:51::1;:14;:16::i;:::-;9467:38:120::2;::::0;;;:21:::2;:38;::::0;;;;;:43;;9459:77:::2;;;::::0;-1:-1:-1;;;9459:77:120;;11267:2:181;9459:77:120::2;::::0;::::2;11249:21:181::0;11306:2;11286:18;;;11279:30;-1:-1:-1;;;11325:18:181;;;11318:51;11386:18;;9459:77:120::2;11065:345:181::0;9459:77:120::2;9549:38;::::0;;;:21:::2;:38;::::0;;;;;9542:45;;;;9598:37;::::2;::::0;::::2;::::0;9571:15;542:25:181;;530:2;515:18;;396:177;1080:98:125;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;860:83:118;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;919:19:118::1;930:7;919:10;:19::i;2321:71:114:-:0;1251:14;;;:36;;-1:-1:-1;;;1251:36:114;;1276:10;1251:36;;;4090:51:181;;;;-1:-1:-1;;;;;1251:14:114;;:24;;4063:18:181;;1251:36:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1243:57;;;;-1:-1:-1;;;1243:57:114;;11899:2:181;1243:57:114;;;11881:21:181;11938:1;11918:18;;;11911:29;-1:-1:-1;;;11956:18:181;;;11949:38;12004:18;;1243:57:114;11697:331:181;1243:57:114;1239:19:51::1;:17;:19::i;:::-;2379:8:114::2;:6;:8::i;3321:420:168:-:0;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;8018:134:120:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;-1:-1:-1;;;;;8087:27:120;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;8080:34;;-1:-1:-1;;8080:34:120::1;::::0;;8125:22;;4090:51:181;;;8125:22:120::1;::::0;4063:18:181;8125:22:120::1;3944:203:181::0;7757:129:120;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;-1:-1:-1;;;;;7816:27:120;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;7816:34:120::1;7846:4;7816:34;::::0;;7861:20;;4090:51:181;;;7861:20:120::1;::::0;4063:18:181;7861:20:120::1;3944:203:181::0;4404:539:168;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;1457:263:114:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1569:14:114::1;::::0;-1:-1:-1;;;;;1569:14:114;;::::1;1542:42:::0;;::::1;::::0;1534:78:::1;;;::::0;-1:-1:-1;;;1534:78:114;;12368:2:181;1534:78:114::1;::::0;::::1;12350:21:181::0;12407:2;12387:18;;;12380:30;12446:25;12426:18;;;12419:53;12489:18;;1534:78:114::1;12166:347:181::0;1534:78:114::1;1618:14;:48:::0;;-1:-1:-1;;;;;;1618:48:114::1;-1:-1:-1::0;;;;;1618:48:114;::::1;::::0;;::::1;::::0;;;1677:38:::1;::::0;4090:51:181;;;1677:38:114::1;::::0;4078:2:181;4063:18;1677:38:114::1;3944:203:181::0;4490:107:116;4549:4;4568:24;4582:9;4568:13;:24::i;:::-;4561:31;4490:107;-1:-1:-1;;4490:107:116:o;8892::120:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;8963:31:120::1;8983:10;8963:19;:31::i;11954:1067::-:0;5841:10;12109:7;5822:30;;;:18;:30;;;;;;12118:12;;5822:30;;5814:55;;;;-1:-1:-1;;;5814:55:120;;12720:2:181;5814:55:120;;;12702:21:181;12759:2;12739:18;;;12732:30;-1:-1:-1;;;12778:18:181;;;12771:42;12830:18;;5814:55:120;12518:336:181;5814:55:120;12227:26:::1;::::0;;::::1;12211:13;12227:26:::0;;;:6:::1;:26;::::0;;;;:28;;12211:13;;12227:28;;;::::1;::::0;12211:13;12227:28:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12211:44;;12307:21;12331:172;12360:6;12374:38;12401:10;-1:-1:-1::0;;;;;335:23:173;;241:123;12374:38:120::1;12420:6;12434:18;12460:17;12485:12;12331:21;:172::i;:::-;12588:19:::0;;::::1;::::0;::::1;::::0;12749:27:::1;::::0;-1:-1:-1;;;12749:27:120;;::::1;::::0;::::1;542:25:181::0;;;12588:19:120;;-1:-1:-1;12588:19:120;12565:20:::1;::::0;;;12749:6:::1;-1:-1:-1::0;;;;;12749:13:120::1;::::0;::::1;::::0;515:18:181;;12749:27:120::1;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12715:61:::0;;-1:-1:-1;12715:61:120;-1:-1:-1;12928:51:120::1;12937:12:::0;12951:10:::1;12960:1;12715:61:::0;12951:10:::1;:::i;:::-;12963:5;12970:8;12928:51;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;12993:12:120;;13007:8;;-1:-1:-1;11954:1067:120;;-1:-1:-1;;;;;;11954:1067:120:o;1767:106:51:-;1685:7;;-1:-1:-1;;;1685:7:51;;;;1836:9;1828:38;;;;-1:-1:-1;;;1828:38:51;;13954:2:181;1828:38:51;;;13936:21:181;13993:2;13973:18;;;13966:30;-1:-1:-1;;;14012:18:181;;;14005:46;14068:18;;1828:38:51;13752:340:181;1667:557:125;1822:5;:12;1838:2;1822:18;1814:38;;;;-1:-1:-1;;;1814:38:125;;14299:2:181;1814:38:125;;;14281:21:181;14338:1;14318:18;;;14311:29;-1:-1:-1;;;14356:18:181;;;14349:37;14403:18;;1814:38:125;14097:330:181;1814:38:125;1922:12;:19;1945:2;1922:25;1914:50;;;;-1:-1:-1;;;1914:50:125;;14634:2:181;1914:50:125;;;14616:21:181;14673:2;14653:18;;;14646:30;-1:-1:-1;;;14692:18:181;;;14685:42;14744:18;;1914:50:125;14432:336:181;1914:50:125;2086:15;;2109:64;;-1:-1:-1;;;;;2053:3:125;2043:35;;;;;2086:15;;;-1:-1:-1;;;2132:33:125;2109:64;;2167:5;;2109:64;;;:::i;:::-;;;;-1:-1:-1;;2109:64:125;;;;;;;;;;;;;;-1:-1:-1;;;;;2109:64:125;-1:-1:-1;;;;;;2109:64:125;;;;;;;;;;2181:32;2200:12;2181:18;:32::i;:::-;2043:176;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1667:557;;:::o;1945:106:51:-;1685:7;;-1:-1:-1;;;1685:7:51;;;;2003:41;;;;-1:-1:-1;;;2003:41:51;;15587:2:181;2003:41:51;;;15569:21:181;15626:2;15606:18;;;15599:30;-1:-1:-1;;;15645:18:181;;;15638:50;15705:18;;2003:41:51;15385:344:181;2433:117:51;1486:16;:14;:16::i;:::-;2491:7:::1;:15:::0;;-1:-1:-1;;;;2491:15:51::1;::::0;;2521:22:::1;719:10:58::0;2530:12:51::1;2521:22;::::0;-1:-1:-1;;;;;4108:32:181;;;4090:51;;4078:2;4063:18;2521:22:51::1;;;;;;;2433:117::o:0;2334:485:125:-;2462:5;:12;2478:2;2462:18;2454:38;;;;-1:-1:-1;;;2454:38:125;;14299:2:181;2454:38:125;;;14281:21:181;14338:1;14318:18;;;14311:29;-1:-1:-1;;;14356:18:181;;;14349:37;14403:18;;2454:38:125;14097:330:181;2454:38:125;2568:15;;2554:30;;-1:-1:-1;;;;;2568:15:125;2554:13;:30::i;:::-;2546:59;;;;-1:-1:-1;;;2546:59:125;;15936:2:181;2546:59:125;;;15918:21:181;15975:2;15955:18;;;15948:30;-1:-1:-1;;;15994:18:181;;;15987:46;16050:18;;2546:59:125;15734:340:181;2546:59:125;2695:13;2671:3;-1:-1:-1;;;;;2661:28:125;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;2653:72;;;;-1:-1:-1;;;2653:72:125;;16470:2:181;2653:72:125;;;16452:21:181;16509:2;16489:18;;;16482:30;-1:-1:-1;;;16528:18:181;;;16521:42;16580:18;;2653:72:125;16268:336:181;2653:72:125;2778:36;2799:14;2807:5;2799:14;:::i;:::-;2778:20;:36::i;2336:287:52:-;1759:1;2468:7;;:19;2460:63;;;;-1:-1:-1;;;2460:63:52;;17113:2:181;2460:63:52;;;17095:21:181;17152:2;17132:18;;;17125:30;17191:33;17171:18;;;17164:61;17242:18;;2460:63:52;16911:355:181;2460:63:52;1759:1;2598:7;:18;2336:287::o;19673:730:120:-;19822:7;;19925:22;;;;:8;:22;;;;;;;;:44;;;;;;;;:::i;:::-;;19917:76;;;;-1:-1:-1;;;19917:76:120;;17473:2:181;19917:76:120;;;17455:21:181;17512:2;17492:18;;;17485:30;-1:-1:-1;;;17531:18:181;;;17524:49;17590:18;;19917:76:120;17271:343:181;19917:76:120;20335:63;20356:12;20370;20335:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20384:13:120;;-1:-1:-1;20335:20:120;;-1:-1:-1;20335:63:120:i;:::-;20328:70;;19673:730;;;;;;:::o;20958:1261::-;21206:32;;;;:18;:32;;;;;;;;21531:7;21202:342;21599:35;21619:14;21599:19;:35::i;:::-;21740:32;21775:67;21796:12;21810:14;21775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21826:15:120;;-1:-1:-1;21775:20:120;;-1:-1:-1;21775:67:120:i;:::-;21740:102;;21968:14;21940:24;:42;21932:74;;;;-1:-1:-1;;;21932:74:120;;17821:2:181;21932:74:120;;;17803:21:181;17860:2;17840:18;;;17833:30;-1:-1:-1;;;17879:18:181;;;17872:49;17938:18;;21932:74:120;17619:343:181;21932:74:120;22104:32;;;;:18;:32;;;;;;;:39;;-1:-1:-1;;22104:39:120;22139:4;22104:39;;;22154:60;22182:14;;22123:12;;22154:60;;;;22198:15;542:25:181;;530:2;515:18;;396:177;22154:60:120;;;;;;;;21121:1098;20958:1261;;;;;:::o;22704:1731::-;22762:13;;22796:15;:8;22762:13;22796:12;:15::i;:::-;22783:28;-1:-1:-1;22873:26:120;22893:6;22873:26;:16;-1:-1:-1;;22873:14:120;;;:16::i;:::-;:26;;;22865:51;;;;-1:-1:-1;;;22865:51:120;;18169:2:181;22865:51:120;;;18151:21:181;18208:2;18188:18;;;18181:30;-1:-1:-1;;;18227:18:181;;;18220:42;18279:18;;22865:51:120;17967:336:181;22865:51:120;22960:20;22983:11;-1:-1:-1;;22983:9:120;;;:11::i;:::-;22960:34;-1:-1:-1;23034:20:120;23008:22;;;;:8;:22;;;;;;;;:46;;;;;;;;:::i;:::-;;23000:66;;;;-1:-1:-1;;;23000:66:120;;18510:2:181;23000:66:120;;;18492:21:181;18549:1;18529:18;;;18522:29;-1:-1:-1;;;18567:18:181;;;18560:37;18614:18;;23000:66:120;18308:330:181;23000:66:120;23209:22;;;;:8;:22;;;;;:48;;-1:-1:-1;;23209:48:120;23234:23;23209:48;;;;23746:25;23760:11;23746;:25;:::i;:::-;:29;;;;:::i;:::-;23734:9;:41;23726:58;;;;-1:-1:-1;;;23726:58:120;;;;;;18845:2:181;18827:21;;;18884:1;18864:18;;;18857:29;-1:-1:-1;;;18917:2:181;18902:18;;18895:34;18961:2;18946:18;;18643:327;23726:58:120;23823:18;23844:21;-1:-1:-1;;23844:19:120;;;:21::i;:::-;24027:19;;;23953:3;24027:19;;;;;;;;;23823:42;;-1:-1:-1;23918:11:120;;23903:12;;23953:3;24027:19;;;;;;;;;;-1:-1:-1;;24000:46:120;-1:-1:-1;24052:22:120;24153:11;-1:-1:-1;;24153:9:120;;;:11::i;:::-;24172:10;-1:-1:-1;;24172:8:120;;;:10::i;:::-;24190:11;-1:-1:-1;;24190:9:120;;;:11::i;:::-;24209:17;:9;-1:-1:-1;;24209:7:120;;;:9::i;:::-;-1:-1:-1;;24209:15:120;;:17::i;:::-;24077:155;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;24077:155:120;;;;;;;;;;;;;;-1:-1:-1;;;;;24077:155:120;-1:-1:-1;;;24077:155:120;;;;-1:-1:-1;24265:81:120;24305:10;24317:4;-1:-1:-1;24326:8:120;24077:155;24265:39;:81::i;:::-;24386:44;;24239:107;;-1:-1:-1;24239:107:120;-1:-1:-1;24386:44:120;;;;24394:12;;24239:107;;;;24386:44;:::i;:::-;;;;;;;;22777:1658;;;;;;;22704:1731;;;:::o;5838:185:116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;20041:34:181;;20111:15;;;20106:2;20091:18;;20084:43;5921:57:116;;19976:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;2412:312:57:-;2526:6;2501:21;:31;;2493:73;;;;-1:-1:-1;;;2493:73:57;;20340:2:181;2493:73:57;;;20322:21:181;20379:2;20359:18;;;20352:30;20418:31;20398:18;;;20391:59;20467:18;;2493:73:57;20138:353:181;2493:73:57;2578:12;2596:9;-1:-1:-1;;;;;2596:14:57;2618:6;2596:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:52;;;2647:7;2639:78;;;;-1:-1:-1;;;2639:78:57;;20908:2:181;2639:78:57;;;20890:21:181;20947:2;20927:18;;;20920:30;20986:34;20966:18;;;20959:62;21057:28;21037:18;;;21030:56;21103:19;;2639:78:57;20706:422:181;1089:114:118;1160:6;;1146:30;;;21307:25:181;;;21363:2;21348:18;;21341:34;;;1146:30:118;;21280:18:181;1146:30:118;;;;;;;1182:6;:16;1089:114::o;2186:115:51:-;1239:19;:17;:19::i;:::-;2245:7:::1;:14:::0;;-1:-1:-1;;;;2245:14:51::1;-1:-1:-1::0;;;2245:14:51::1;::::0;;2274:20:::1;2281:12;719:10:58::0;;640:96;5170:183:168;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;4981:185::-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;1292:164:125:-;1366:4;1385:66;1399:3;1404:9;1425:3;-1:-1:-1;;;;;1415:33:125;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1385:13;:66::i;1742:335:167:-;1834:15;;1817:13;:32;1809:60;;;;-1:-1:-1;;;1809:60:167;;21588:2:181;1809:60:167;;;21570:21:181;21627:2;21607:18;;;21600:30;-1:-1:-1;;;21646:18:181;;;21639:45;21701:18;;1809:60:167;21386:339:181;1809:60:167;1983:15;:31;;;2025:47;;;2046:10;21904:51:181;;21986:2;21971:18;;21964:34;;;2025:47:167;;21877:18:181;2025:47:167;21730:274:181;981:328:165;1183:12;1227:13;1242:7;1251:6;1259:18;1279:10;1291:12;1210:94;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1203:101;;981:328;;;;;;;;:::o;960:327:123:-;1038:12;1123;:19;1146:2;1123:25;1115:50;;;;-1:-1:-1;;;1115:50:123;;14634:2:181;1115:50:123;;;14616:21:181;14673:2;14653:18;;;14646:30;-1:-1:-1;;;14692:18:181;;;14685:42;14744:18;;1115:50:123;14432:336:181;1115:50:123;1238:44;1257:12;1246:35;;;;;;;;;;;;:::i;:::-;1238:7;:44::i;17098:357:120:-;17169:8;17161:50;;;;-1:-1:-1;;;17161:50:120;;22926:2:181;17161:50:120;;;22908:21:181;22965:2;22945:18;;;22938:30;-1:-1:-1;;;22984:18:181;;;22977:44;23038:18;;17161:50:120;22724:338:181;17161:50:120;17225:31;;;;:21;:31;;;;;;:36;17217:69;;;;-1:-1:-1;;;17217:69:120;;23269:2:181;17217:69:120;;;23251:21:181;23308:2;23288:18;;;23281:30;-1:-1:-1;;;23327:18:181;;;23320:50;23387:18;;17217:69:120;23067:344:181;17217:69:120;17301:30;;;;:20;:30;;;;;;;;17300:31;17292:63;;;;-1:-1:-1;;;17292:63:120;;23618:2:181;17292:63:120;;;23600:21:181;23657:2;23637:18;;;23630:30;-1:-1:-1;;;23676:18:181;;;23669:49;23735:18;;17292:63:120;23416:343:181;17292:63:120;17362:31;;;;:21;:31;;;;;;;17396:12;17362:46;;17419:31;;;;;17384:8;542:25:181;;530:2;515:18;;396:177;24755:6146:164;25004:22;25008:1;25004:22;;;;;25033:19;;;25080:25;;25066:12;;;25059:47;;;;25138:4;24881:16;25125:18;;;25182:9;25170:22;;25163:30;25156:38;;25208:12;;;25201:30;;;;25254:34;;;25248:41;25238:52;;25309:18;;;25366:9;25354:22;;25347:30;25340:38;;25392:12;;;25385:30;;;;25438:34;;;25432:41;25422:52;;25493:18;;;25550:9;25538:22;;25531:30;25524:38;;25576:12;;;25569:30;;;;25646:9;25622:34;;25616:41;25606:52;;25677:18;;;25734:9;25722:22;;25715:30;25708:38;;25760:12;;;25753:30;;;;25830:9;25806:34;;;25800:41;25790:52;;;25861:18;;;25906:22;;;25899:30;25892:38;;25944:12;;;25937:30;;;;26014:9;25990:34;;25984:41;25974:52;;26045:18;;;26090:22;;;26083:30;26076:38;;26128:12;;;26121:30;;;;26198:9;26174:34;;26168:41;26158:52;;26229:18;;;26274:22;;;26267:30;26260:38;;26312:12;;;26305:30;;;;26382:9;26358:34;;26352:41;26342:52;;26413:18;;;26470:9;26458:22;;;26451:30;26444:38;;26496:12;;;26489:30;;;;26542:34;;26536:41;26526:52;;26597:18;;;26654:9;26642:22;;;26635:30;26628:38;;26680:12;;;26673:30;;;;26750:9;26726:34;;26720:41;26710:52;;;26781:18;;;26838:10;26826:23;;26819:31;26812:39;;26865:12;;;26858:30;;;;26935:10;26911:35;;26905:42;26895:53;;26967:18;;;27024:10;27012:23;;27005:31;26998:39;;27051:12;;;27044:30;;;;27121:10;27097:35;;27091:42;27081:53;;27153:18;;;27210:10;27198:23;;27191:31;27184:39;;27237:12;;;27230:30;;;;27307:10;27283:35;;27277:42;27267:53;;27339:18;;;27396:10;27384:23;;27377:31;27370:39;;27423:12;;;27416:30;;;;27493:10;27469:35;;27463:42;27453:53;;27525:18;;;27582:10;27570:23;;27563:31;27556:39;;27609:12;;;27602:30;;;;27679:10;27655:35;;27649:42;27639:53;;27711:18;;;27768:10;27756:23;;27749:31;27742:39;;27795:12;;;27788:30;;;;27865:10;27841:35;;27835:42;27825:53;;27897:18;;;27954:10;27942:23;;27935:31;27928:39;;27981:12;;;27974:30;;;;28027:35;;;28021:42;28011:53;;28083:18;;;28140:10;28128:23;;28121:31;28114:39;;28167:12;;;28160:30;;;;28237:10;28213:35;;28207:42;28197:53;;28269:18;;;28326:10;28314:23;;28307:31;28300:39;;28353:12;;;28346:30;;;;28423:10;28399:35;;28393:42;28383:53;;28455:18;;;28512:10;28500:23;;28493:31;28486:39;;28539:12;;;28532:30;;;;28609:10;28585:35;;28579:42;28569:53;;28641:18;;;28698:10;28686:23;;28679:31;28672:39;;28725:12;;;28718:30;;;;28795:10;28771:35;;28765:42;28755:53;;28827:18;;;28884:10;28872:23;;28865:31;28858:39;;28911:12;;;28904:30;;;;28981:10;28957:35;;28951:42;28941:53;;29013:18;;;29070:10;29058:23;;29051:31;29044:39;;29097:12;;;29090:30;;;;29167:10;29143:35;;29137:42;29127:53;;29199:18;;;29256:10;29244:23;;29237:31;29230:39;;29283:12;;;29276:30;;;;29353:10;29329:35;;29323:42;29313:53;;29385:18;;;29442:10;29430:23;;29423:31;29416:39;;29469:12;;;29462:30;;;;29539:10;29515:35;;29509:42;29499:53;;29571:18;;;29628:10;29616:23;;29609:31;29602:39;;29655:12;;;29648:30;;;;29725:10;29701:35;;29695:42;29685:53;;29757:18;;;29814:10;29802:23;;29795:31;29788:39;;29841:12;;;29834:30;;;;29911:10;29887:35;;29881:42;29871:53;;29943:18;;;30000:10;29988:23;;29981:31;29974:39;;30027:12;;;30020:30;;;;30097:10;30073:35;;30067:42;30057:53;;30129:18;;;30186:10;30174:23;;30167:31;30160:39;;30213:12;;;30206:30;;;;30283:10;30259:35;;30253:42;30243:53;;30315:18;;;30372:10;30360:23;;30353:31;30346:39;;30399:12;;;30392:30;;;;30469:10;30445:35;;30439:42;30429:53;;30501:18;;;30558:10;30546:23;;30539:31;30532:39;;30585:12;;;30578:30;;;;30655:10;30631:35;;30625:42;30615:53;;30687:18;;;30744:10;30732:23;;;30725:31;30718:39;;;30771:12;;;;30764:30;;;;30841:10;30817:35;;;30811:42;30801:53;;;30873:18;;;24755:6146::o;17891:1180:120:-;18006:14;17998:61;;;;-1:-1:-1;;;17998:61:120;;23966:2:181;17998:61:120;;;23948:21:181;24005:2;23985:18;;;23978:30;-1:-1:-1;;;24024:18:181;;;24017:49;24083:18;;17998:61:120;23764:343:181;17998:61:120;18149:36;;;;:20;:36;;;;;;;;18145:104;;;17891:1180;:::o;18145:104::-;18354:33;18390:37;;;:21;:37;;;;;;;18441:30;;;18433:63;;;;-1:-1:-1;;;18433:63:120;;24314:2:181;18433:63:120;;;24296:21:181;24353:2;24333:18;;;24326:30;-1:-1:-1;;;24372:18:181;;;24365:50;24432:18;;18433:63:120;24112:344:181;18433:63:120;18641:11;;18597:40;18612:25;18597:12;:40;:::i;:::-;:55;;18589:91;;;;-1:-1:-1;;;18589:91:120;;24663:2:181;18589:91:120;;;24645:21:181;24702:2;24682:18;;;24675:30;24741:25;24721:18;;;24714:53;24784:18;;18589:91:120;24461:347:181;18589:91:120;18808:36;;;;:20;:36;;;;;;:43;;-1:-1:-1;;18808:43:120;18847:4;18808:43;;;18862:37;18829:14;;18862:37;;;-1:-1:-1;19029:37:120;;;;:21;:37;;;;;19022:44;17891:1180::o;10748:325:174:-;10848:10;;10818:7;;10975:4;10966:14;;11042:26;;;;10966:14;10848:10;11042:5;:26::i;:::-;11035:33;10748:325;-1:-1:-1;;;;;10748:325:174:o;2583:121:165:-;2645:6;2673:25;-1:-1:-1;;2673:18:165;;2692:2;2696:1;2673:18;:25::i;17661:260:174:-;17717:14;17739:12;17754;17758:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;17754:12;-1:-1:-1;;;;;17739:27:174;;;17772:12;17787;17791:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;17787:12;-1:-1:-1;;;;;17772:27:174;17890:21;;;;17661:260;-1:-1:-1;;;17661:260:174:o;2942:141:165:-;3009:7;3031:47;3058:19;3068:8;3058:9;:19::i;:::-;508:4:173;399:121;2097:115:165;2154:6;2182:24;-1:-1:-1;;2182:18:165;;2154:6;2204:1;2182:18;:24::i;2414:115::-;2470:6;2498:25;-1:-1:-1;;2498:18:165;;2517:2;2521:1;2498:18;:25::i;2261:105::-;2318:7;2340:21;-1:-1:-1;;2340:14:165;;2355:1;2358:2;2340:14;:21::i;3201:146::-;3256:7;3278:64;533:2;3308:30;533:2;13008::174;13004:16;;;-1:-1:-1;;;;;13000:28:174;3308:30:165;:::i;:::-;-1:-1:-1;;3278:14:165;;;:64;3340:1;3278:14;:64::i;21380:556:174:-;21435:16;21459:11;21476:12;21491;21495:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;21491:12;-1:-1:-1;;;;;21476:27:174;;;21597:4;21591:11;21584:18;;21646:3;21639:10;;21678:33;21691:7;21700:3;21706:4;21700:10;21678:12;:33::i;:::-;-1:-1:-1;21815:14:174;;;21831:4;21811:25;21805:4;21798:39;21872:17;;21380:556;;-1:-1:-1;21380:556:174:o;1360:1117:171:-;1519:4;1525:12;1577:15;1598:13;1617:24;1654:8;1644:19;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1644:19:171;;1617:46;;2083:1;2062;2033:9;2027:16;2003:4;1992:9;1988:20;1957:6;1927:7;1906:4;1892:210;1880:222;;2157:16;2146:27;;2195:8;2186:7;2183:21;2180:62;;;2226:8;2215:19;;2180:62;2315:7;2302:11;2295:28;2423:7;2420:1;2413:4;2400:11;2396:22;2381:50;2450:8;;;;-1:-1:-1;1360:1117:171;-1:-1:-1;;;;;;;1360:1117:171:o;571:286:123:-;688:4;708:10;-1:-1:-1;;;;;708:18:123;;;700:38;;;;-1:-1:-1;;;700:38:123;;25015:2:181;700:38:123;;;24997:21:181;25054:1;25034:18;;;25027:29;-1:-1:-1;;;25072:18:181;;;25065:37;25119:18;;700:38:123;24813:330:181;700:38:123;768:15;752:12;:31;744:51;;;;-1:-1:-1;;;744:51:123;;25350:2:181;744:51:123;;;25332:21:181;25389:1;25369:18;;;25362:29;-1:-1:-1;;;25407:18:181;;;25400:37;25454:18;;744:51:123;25148:330:181;744:51:123;843:9;-1:-1:-1;;;;;808:44:123;818:4;-1:-1:-1;;;;;808:29:123;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;808:44:123;;;571:286;-1:-1:-1;;;;571:286:123:o;1360:137:118:-;1414:7;1440:6;;1433:4;:13;1429:47;;;1463:6;;1456:13;;1429:47;-1:-1:-1;1488:4:118;1360:137::o;9979:390:174:-;10076:15;;10114:11;10121:4;10114;:11;:::i;:::-;10099:26;;10224:4;10218:11;10212:4;10209:21;10206:52;;;-1:-1:-1;10249:1:174;10206:52;10273:4;10281:1;10273:9;10269:41;;-1:-1:-1;;10292:11:174;;;;;10269:41;10325:39;10346:5;10353:4;10359;10325:20;:39::i;16417:201::-;16522:14;16596:11;16601:6;16596:2;:11;:::i;:::-;16595:17;;16611:1;16595:17;:::i;:::-;16551:62;;16559:30;16565:7;16574:6;16582;16559:5;:30::i;:::-;16551:62;;;16417:201;-1:-1:-1;;;;16417:201:174:o;2767:109:165:-;2827:7;2849:22;-1:-1:-1;;2849:14:165;;2864:2;2868;15274:815:174;15375:14;15401:6;:11;;15411:1;15401:11;15397:49;;-1:-1:-1;15437:1:174;15422:17;;15397:49;15473:12;15477:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15473:12;-1:-1:-1;;;;;15455:30:174;:15;;;;:6;:15;:::i;:::-;:30;15451:282;;;15674:12;15678:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15674:12;15688;15692:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15688:12;15646:80;;-1:-1:-1;;;15646:80:174;;-1:-1:-1;;;;;26417:15:181;;;15646:80:174;;;26399:34:181;26469:15;;26449:18;;;26442:43;26501:18;;;26494:34;;;15710:15:174;;;26544:18:181;;;26537:34;26326:19;;15646:80:174;26125:452:181;15451:282:174;15751:2;15742:6;:11;;;15738:66;;;15762:42;;-1:-1:-1;;;15762:42:174;;;;;;;;;;;15738:66;15871:1;15862:10;;15811:15;15899:12;15903:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15899:12;-1:-1:-1;;;;;15884:27:174;;-1:-1:-1;15917:13:174;-1:-1:-1;;;;;5031:12:174;;5027:85;16053:17;;;;16047:24;16043:36;;;-1:-1:-1;;;;;15274:815:174:o;13593:349::-;13714:7;13729:12;13744;13748:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;13744:12;-1:-1:-1;;;;;13729:27:174;;;13832:12;13836:7;13832:3;:12::i;:::-;13825:4;13809:13;13816:6;13809:4;:13;:::i;:::-;:20;;;;:::i;:::-;:35;13805:67;;;-1:-1:-1;;13854:11:174;;;;;13805:67;13885:13;13892:6;13885:4;:13;:::i;:::-;13878:20;;13911:26;13917:7;13911:26;;13926:4;13932;13911:5;:26::i;:::-;13904:33;;;13593:349;;;;;;;:::o;20133:893::-;20211:15;-1:-1:-1;;5480:15:174;;;;20234:68;;20262:40;;-1:-1:-1;;;20262:40:174;;;;;;;;;;;20234:68;20312:19;20323:7;20312:10;:19::i;:::-;20308:75;;;20340:43;;-1:-1:-1;;;20340:43:174;;;;;;;;;;;20308:75;20390:12;20405;20409:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;20405:12;-1:-1:-1;;;;;20390:27:174;;;20423:15;20441:12;20445:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;20441:12;-1:-1:-1;;;;;20423:30:174;;;20460:11;20477:8;20579:4;20573:11;20566:18;;20654:7;20649:3;20646:16;20643:80;;;20686:4;20680;20673:18;20643:80;20880:4;20871:7;20865:4;20856:7;20853:1;20846:5;20835:50;20828:57;;20901:3;20896:57;;20913:40;;-1:-1:-1;;;20913:40:174;;;;;;;;;;;20896:57;20969:52;20990:15;20997:7;11442:17;11438:31;;11253:254;20990:15;20969:52;;21007:7;21016:4;20969:20;:52::i;:::-;20959:62;20133:893;-1:-1:-1;;;;;;;20133:893:174:o;8805:657::-;8916:15;8961:2;8990;9076:4;9108;-1:-1:-1;;;;;9127:12:174;;;;:28;;;;;9151:4;9143;-1:-1:-1;;;;;9143:12:174;;9127:28;9119:51;;;;-1:-1:-1;;;9119:51:174;;26784:2:181;9119:51:174;;;26766:21:181;26823:2;26803:18;;;26796:30;-1:-1:-1;;;26842:18:181;;;26835:40;26892:18;;9119:51:174;26582:334:181;9119:51:174;9271:23;;;9344:17;;;9327:35;;;9410:17;;;9394:34;;;;;-1:-1:-1;;;8805:657:174:o;13200:131::-;13253:7;13308:12;13312:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;13308:12;13293;13297:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;13293:12;:27;-1:-1:-1;;;;;13286:34:174;;;13200:131;;;:::o;6121:290::-;6181:8;6201:15;6208:7;11442:17;11438:31;;11253:254;6201:15;:31;;6220:12;6201:31;6197:63;;-1:-1:-1;6249:4:174;;6121:290;-1:-1:-1;6121:290:174:o;6197:63::-;6265:12;6280;6284:7;6280:3;:12::i;:::-;6395:4;6389:11;-1:-1:-1;6380:21:174;6121:290;-1:-1:-1;;;6121:290:174:o;211:180:181:-;270:6;323:2;311:9;302:7;298:23;294:32;291:52;;;339:1;336;329:12;291:52;-1:-1:-1;362:23:181;;211:180;-1:-1:-1;211:180:181:o;578:127::-;639:10;634:3;630:20;627:1;620:31;670:4;667:1;660:15;694:4;691:1;684:15;710:718;752:5;805:3;798:4;790:6;786:17;782:27;772:55;;823:1;820;813:12;772:55;859:6;846:20;885:18;922:2;918;915:10;912:36;;;928:18;;:::i;:::-;1003:2;997:9;971:2;1057:13;;-1:-1:-1;;1053:22:181;;;1077:2;1049:31;1045:40;1033:53;;;1101:18;;;1121:22;;;1098:46;1095:72;;;1147:18;;:::i;:::-;1187:10;1183:2;1176:22;1222:2;1214:6;1207:18;1268:3;1261:4;1256:2;1248:6;1244:15;1240:26;1237:35;1234:55;;;1285:1;1282;1275:12;1234:55;1349:2;1342:4;1334:6;1330:17;1323:4;1315:6;1311:17;1298:54;1396:1;1389:4;1384:2;1376:6;1372:15;1368:26;1361:37;1416:6;1407:15;;;;;;710:718;;;;:::o;1433:320::-;1501:6;1554:2;1542:9;1533:7;1529:23;1525:32;1522:52;;;1570:1;1567;1560:12;1522:52;1610:9;1597:23;1643:18;1635:6;1632:30;1629:50;;;1675:1;1672;1665:12;1629:50;1698:49;1739:7;1730:6;1719:9;1715:22;1698:49;:::i;1943:127::-;2004:10;1999:3;1995:20;1992:1;1985:31;2035:4;2032:1;2025:15;2059:4;2056:1;2049:15;2075:347;2226:2;2211:18;;2259:1;2248:13;;2238:144;;2304:10;2299:3;2295:20;2292:1;2285:31;2339:4;2336:1;2329:15;2367:4;2364:1;2357:15;2238:144;2391:25;;;2075:347;:::o;2619:932::-;2784:6;2792;2800;2808;2816;2869:4;2857:9;2848:7;2844:23;2840:34;2837:54;;;2887:1;2884;2877:12;2837:54;2927:9;2914:23;2956:18;2997:2;2989:6;2986:14;2983:34;;;3013:1;3010;3003:12;2983:34;3051:6;3040:9;3036:22;3026:32;;3096:7;3089:4;3085:2;3081:13;3077:27;3067:55;;3118:1;3115;3108:12;3067:55;3158:2;3145:16;3184:2;3176:6;3173:14;3170:34;;;3200:1;3197;3190:12;3170:34;3255:7;3248:4;3238:6;3235:1;3231:14;3227:2;3223:23;3219:34;3216:47;3213:67;;;3276:1;3273;3266:12;3213:67;3307:4;3299:13;;;;-1:-1:-1;3331:6:181;-1:-1:-1;;3369:20:181;;3356:34;;-1:-1:-1;3424:4:181;3409:20;;3441:15;;;3438:35;;;3469:1;3466;3459:12;3438:35;2619:932;;;;-1:-1:-1;2619:932:181;;3507:2;3492:18;;3529:16;;2619:932;-1:-1:-1;;2619:932:181:o;3556:131::-;-1:-1:-1;;;;;3631:31:181;;3621:42;;3611:70;;3677:1;3674;3667:12;3692:247;3751:6;3804:2;3792:9;3783:7;3779:23;3775:32;3772:52;;;3820:1;3817;3810:12;3772:52;3859:9;3846:23;3878:31;3903:5;3878:31;:::i;5026:163::-;5093:20;;5153:10;5142:22;;5132:33;;5122:61;;5179:1;5176;5169:12;5122:61;5026:163;;;:::o;5194:184::-;5252:6;5305:2;5293:9;5284:7;5280:23;5276:32;5273:52;;;5321:1;5318;5311:12;5273:52;5344:28;5362:9;5344:28;:::i;5383:460::-;5468:6;5476;5484;5537:2;5525:9;5516:7;5512:23;5508:32;5505:52;;;5553:1;5550;5543:12;5505:52;5576:28;5594:9;5576:28;:::i;:::-;5566:38;;5651:2;5640:9;5636:18;5623:32;5613:42;;5706:2;5695:9;5691:18;5678:32;5733:18;5725:6;5722:30;5719:50;;;5765:1;5762;5755:12;5719:50;5788:49;5829:7;5820:6;5809:9;5805:22;5788:49;:::i;:::-;5778:59;;;5383:460;;;;;:::o;5848:250::-;5933:1;5943:113;5957:6;5954:1;5951:13;5943:113;;;6033:11;;;6027:18;6014:11;;;6007:39;5979:2;5972:10;5943:113;;;-1:-1:-1;;6090:1:181;6072:16;;6065:27;5848:250::o;6103:270::-;6144:3;6182:5;6176:12;6209:6;6204:3;6197:19;6225:76;6294:6;6287:4;6282:3;6278:14;6271:4;6264:5;6260:16;6225:76;:::i;:::-;6355:2;6334:15;-1:-1:-1;;6330:29:181;6321:39;;;;6362:4;6317:50;;6103:270;-1:-1:-1;;6103:270:181:o;6378:288::-;6553:6;6542:9;6535:25;6596:2;6591;6580:9;6576:18;6569:30;6516:4;6616:44;6656:2;6645:9;6641:18;6633:6;6616:44;:::i;7012:127::-;7073:10;7068:3;7064:20;7061:1;7054:31;7104:4;7101:1;7094:15;7128:4;7125:1;7118:15;7144:125;7209:9;;;7230:10;;;7227:36;;;7243:18;;:::i;7274:184::-;7344:6;7397:2;7385:9;7376:7;7372:23;7368:32;7365:52;;;7413:1;7410;7403:12;7365:52;-1:-1:-1;7436:16:181;;7274:184;-1:-1:-1;7274:184:181:o;7996:474::-;8217:2;8206:9;8199:21;8180:4;8243:44;8283:2;8272:9;8268:18;8260:6;8243:44;:::i;:::-;8335:9;8327:6;8323:22;8318:2;8307:9;8303:18;8296:50;8363:32;8388:6;8380;8363:32;:::i;:::-;8355:40;;;8460:1;8456;8451:3;8447:11;8443:19;8435:6;8431:32;8426:2;8415:9;8411:18;8404:60;7996:474;;;;;;:::o;8807:314::-;8982:2;8971:9;8964:21;8945:4;9002:44;9042:2;9031:9;9027:18;9019:6;9002:44;:::i;:::-;8994:52;;9111:1;9107;9102:3;9098:11;9094:19;9086:6;9082:32;9077:2;9066:9;9062:18;9055:60;8807:314;;;;;:::o;9461:127::-;9522:10;9517:3;9513:20;9510:1;9503:31;9553:4;9550:1;9543:15;9577:4;9574:1;9567:15;9593:325;9685:4;9743:11;9730:25;9837:4;9833:9;9822:8;9806:14;9802:29;9798:45;9778:18;9774:70;9764:98;;9858:1;9855;9848:12;9764:98;9879:33;;;;;9593:325;-1:-1:-1;;9593:325:181:o;9923:521::-;10000:4;10006:6;10066:11;10053:25;10160:2;10156:7;10145:8;10129:14;10125:29;10121:43;10101:18;10097:68;10087:96;;10179:1;10176;10169:12;10087:96;10206:33;;10258:20;;;-1:-1:-1;10301:18:181;10290:30;;10287:50;;;10333:1;10330;10323:12;10287:50;10366:4;10354:17;;-1:-1:-1;10397:14:181;10393:27;;;10383:38;;10380:58;;;10434:1;10431;10424:12;10380:58;9923:521;;;;;:::o;10449:271::-;10632:6;10624;10619:3;10606:33;10588:3;10658:16;;10683:13;;;10658:16;10449:271;-1:-1:-1;10449:271:181:o;11415:277::-;11482:6;11535:2;11523:9;11514:7;11510:23;11506:32;11503:52;;;11551:1;11548;11541:12;11503:52;11583:9;11577:16;11636:5;11629:13;11622:21;11615:5;11612:32;11602:60;;11658:1;11655;11648:12;12033:128;12100:9;;;12121:11;;;12118:37;;;12135:18;;:::i;12859:201::-;12897:3;12925:10;12970:2;12963:5;12959:14;12997:2;12988:7;12985:15;12982:41;;13003:18;;:::i;:::-;13052:1;13039:15;;12859:201;-1:-1:-1;;;12859:201:181:o;13065:245::-;13144:6;13152;13205:2;13193:9;13184:7;13180:23;13176:32;13173:52;;;13221:1;13218;13211:12;13173:52;-1:-1:-1;;13244:16:181;;13300:2;13285:18;;;13279:25;13244:16;;13279:25;;-1:-1:-1;13065:245:181:o;13315:432::-;13546:6;13535:9;13528:25;13589:6;13584:2;13573:9;13569:18;13562:34;13632:6;13627:2;13616:9;13612:18;13605:34;13675:3;13670:2;13659:9;13655:18;13648:31;13509:4;13696:45;13736:3;13725:9;13721:19;13713:6;13696:45;:::i;:::-;13688:53;13315:432;-1:-1:-1;;;;;;13315:432:181:o;14773:217::-;14920:2;14909:9;14902:21;14883:4;14940:44;14980:2;14969:9;14965:18;14957:6;14940:44;:::i;14995:385::-;-1:-1:-1;;;;;15198:32:181;;15180:51;;15267:2;15262;15247:18;;15240:30;;;-1:-1:-1;;15287:44:181;;15312:18;;15304:6;15287:44;:::i;:::-;15279:52;;15367:6;15362:2;15351:9;15347:18;15340:34;14995:385;;;;;;:::o;16609:297::-;16727:12;;16774:4;16763:16;;;16757:23;;16727:12;16792:16;;16789:111;;;16886:1;16882:6;16872;16866:4;16862:17;16859:1;16855:25;16851:38;16844:5;16840:50;16831:59;;16789:111;;16609:297;;;:::o;18975:475::-;19165:4;19194:10;19243:2;19235:6;19231:15;19220:9;19213:34;19295:2;19287:6;19283:15;19278:2;19267:9;19263:18;19256:43;;19335:6;19330:2;19319:9;19315:18;19308:34;19378:3;19373:2;19362:9;19358:18;19351:31;19399:45;19439:3;19428:9;19424:19;19416:6;19399:45;:::i;19455:369::-;19652:6;19641:9;19634:25;19709:6;19702:14;19695:22;19690:2;19679:9;19675:18;19668:50;19754:2;19749;19738:9;19734:18;19727:30;19615:4;19774:44;19814:2;19803:9;19799:18;19791:6;19774:44;:::i;22009:710::-;22272:3;22309:10;22304:3;22300:20;22363:2;22354:6;22349:3;22345:16;22341:25;22336:3;22329:38;22396:6;22392:1;22387:3;22383:11;22376:27;22455:2;22446:6;22441:3;22437:16;22433:25;22428:2;22423:3;22419:12;22412:47;22511:2;22502:6;22497:3;22493:16;22489:25;22484:2;22479:3;22475:12;22468:47;;22545:6;22540:2;22535:3;22531:12;22524:28;22581:6;22575:13;22597:75;22665:6;22660:2;22655:3;22651:12;22644:4;22636:6;22632:17;22597:75;:::i;:::-;22692:16;;;;22710:2;22688:25;;22009:710;-1:-1:-1;;;;;;;22009:710:181:o;25483:251::-;25553:6;25606:2;25594:9;25585:7;25581:23;25577:32;25574:52;;;25622:1;25619;25612:12;25574:52;25654:9;25648:16;25673:31;25698:5;25673:31;:::i;25739:151::-;25829:4;25822:12;;;25808;;;25804:31;;25847:14;;25844:40;;;25864:18;;:::i;25895:225::-;25999:4;25978:12;;;25992;;;25974:31;26025:22;;;;26066:24;;;26056:58;;26094:18;;:::i;:::-;26056:58;25895:225;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"2880200","executionCost":"infinite","totalCost":"infinite"},"external":{"AMB()":"infinite","DOMAIN()":"infinite","MERKLE()":"infinite","MIRROR_CHAIN_ID()":"infinite","MIRROR_DOMAIN()":"infinite","PROCESS_GAS()":"infinite","RESERVE_GAS()":"infinite","ROOT_MANAGER()":"infinite","acceptProposedOwner()":"63837","addSender(address)":"27982","allowlistedSenders(address)":"2681","delay()":"281","delayBlocks()":"2384","dispatch(uint32,bytes32,bytes)":"infinite","home()":"368","isReplica(address)":"507","lastSentBlock()":"2406","localDomain()":"infinite","messages(bytes32)":"2626","mirrorConnector()":"2448","nonces(uint32)":"2556","outboundRoot()":"infinite","owner()":"2421","pause()":"infinite","paused()":"2433","pendingAggregateRoots(bytes32)":"2572","processMessage(bytes)":"infinite","proposeNewOwner(address)":"infinite","proposed()":"2464","proposedTimestamp()":"2338","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":"infinite","provenAggregateRoots(bytes32)":"2607","provenMessageRoots(bytes32)":"2562","rateLimitBlocks()":"2363","removePendingAggregateRoot(bytes32)":"12980","removeSender(address)":"27954","renounceOwnership()":"2458","renounced()":"2474","send(bytes)":"infinite","sentMessageRoots(bytes32)":"2496","setDelayBlocks(uint256)":"28093","setGasCap(uint256)":"28085","setMirrorConnector(address)":"infinite","setRateLimitBlocks(uint256)":"28079","setWatcherManager(address)":"29990","unpause()":"infinite","verifySender(address)":"infinite","watcherManager()":"2404","withdrawFunds(address)":"infinite"},"internal":{"_processMessage(bytes memory)":"infinite","_sendMessage(bytes memory,bytes memory)":"infinite","_verifySender(address)":"infinite"}},"methodIdentifiers":{"AMB()":"d69f9d61","DOMAIN()":"52a9674b","MERKLE()":"a01892a5","MIRROR_CHAIN_ID()":"c8a4d690","MIRROR_DOMAIN()":"14168416","PROCESS_GAS()":"d88beda2","RESERVE_GAS()":"25e3beda","ROOT_MANAGER()":"5f61e3ec","acceptProposedOwner()":"c5b350df","addSender(address)":"b697f531","allowlistedSenders(address)":"6159ada1","delay()":"6a42b8f8","delayBlocks()":"ad9c0c2e","dispatch(uint32,bytes32,bytes)":"fa31de01","home()":"9fa92f9d","isReplica(address)":"5190bc53","lastSentBlock()":"d7d317b3","localDomain()":"8d3638f4","messages(bytes32)":"2bbd59ca","mirrorConnector()":"cc394283","nonces(uint32)":"b95a2001","outboundRoot()":"65eaf11b","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","pendingAggregateRoots(bytes32)":"9d3117c7","processMessage(bytes)":"4ff746f6","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":"508a109b","provenAggregateRoots(bytes32)":"301f07c3","provenMessageRoots(bytes32)":"98c9f2b9","rateLimitBlocks()":"579c1618","removePendingAggregateRoot(bytes32)":"6b04a933","removeSender(address)":"b2f87643","renounceOwnership()":"715018a6","renounced()":"d232c220","send(bytes)":"2bb1ae7c","sentMessageRoots(bytes32)":"572386ca","setDelayBlocks(uint256)":"1eeaabea","setGasCap(uint256)":"7850b020","setMirrorConnector(address)":"5bd11efc","setRateLimitBlocks(uint256)":"e0fed010","setWatcherManager(address)":"d2a3cc71","unpause()":"3f4ba83a","verifySender(address)":"db1b7659","watcherManager()":"a792c29b","withdrawFunds(address)":"68742da6"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_mirrorDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_amb\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rootManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_processGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserveGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_merkle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_mirrorChainId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Connector__processMessage_notUsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimited__rateLimited_messageSendRateExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__index_indexMoreThan32Bytes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"len\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slice\",\"type\":\"uint256\"}],\"name\":\"TypedMemView__index_overrun\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_identityOOG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_invalidPointer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_nullPointer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"updated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"DelayBlocksUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Dispatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_previous\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"GasCapUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"aggregateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"MessageProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"MirrorConnectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"mirrorDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"amb\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mirrorConnector\",\"type\":\"address\"}],\"name\":\"NewConnector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"Process\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updater\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRateLimit\",\"type\":\"uint256\"}],\"name\":\"SendRateLimitUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"watcherManager\",\"type\":\"address\"}],\"name\":\"WatcherManagerChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MERKLE\",\"outputs\":[{\"internalType\":\"contract MerkleTreeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROCESS_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROOT_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"addSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowlistedSenders\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_recipientAddress\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_messageBody\",\"type\":\"bytes\"}],\"name\":\"dispatch\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"home\",\"outputs\":[{\"internalType\":\"contract IOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_potentialReplica\",\"type\":\"address\"}],\"name\":\"isReplica\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastSentBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localDomain\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"messages\",\"outputs\":[{\"internalType\":\"enum SpokeConnector.MessageStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outboundRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"pendingAggregateRoots\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"path\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct SpokeConnector.Proof[]\",\"name\":\"_proofs\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"_aggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[32]\",\"name\":\"_aggregatePath\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"_aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"proveAndProcess\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenAggregateRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenMessageRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rateLimitBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_fraudulentRoot\",\"type\":\"bytes32\"}],\"name\":\"removePendingAggregateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"removeSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"sentMessageRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_delayBlocks\",\"type\":\"uint256\"}],\"name\":\"setDelayBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"}],\"name\":\"setGasCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"}],\"name\":\"setMirrorConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rateLimit\",\"type\":\"uint256\"}],\"name\":\"setRateLimitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"}],\"name\":\"setWatcherManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"watcherManager\",\"outputs\":[{\"internalType\":\"contract WatcherManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addSender(address)\":{\"details\":\"Only allowlisted routers (senders) can call `dispatch`.\"},\"dispatch(uint32,bytes32,bytes)\":{\"details\":\"The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \\\"hub\\\"), it will be combined into a single aggregate root by RootManager (along with outbound roots from other chains). This aggregate root will be redistributed to all destination chains. NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\"},\"home()\":{\"details\":\"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad\",\"returns\":{\"_0\":\"The local inbox contract\"}},\"isReplica(address)\":{\"returns\":{\"_0\":\"True if _potentialReplica is an enrolled Replica\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"processMessage(bytes)\":{\"details\":\"This is called by AMBs to process messages originating from mirror connector\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)\":{\"details\":\"Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.Intended to be called by the relayer at specific intervals during runtime.Will record a calculated root as having been proven if we've already proven that it was included in the aggregateRoot.\",\"params\":{\"_aggregateIndex\":\"Index of the inbound root in the aggregator's merkle tree in the hub.\",\"_aggregatePath\":\"Merkle path of inclusion for the inbound root.\",\"_aggregateRoot\":\"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.\",\"_proofs\":\"Batch of Proofs containing messages for proving/processing.\"}},\"removePendingAggregateRoot(bytes32)\":{\"details\":\"This method is required for handling fraud cases in the current construction.\",\"params\":{\"_fraudulentRoot\":\"Target fraudulent root that should be erased from the `pendingAggregateRoots` mapping.\"}},\"removeSender(address)\":{\"details\":\"Only allowlisted routers (senders) can call `dispatch`.\"},\"setRateLimitBlocks(uint256)\":{\"details\":\"Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\",\"params\":{\"_rateLimit\":\"The number of blocks require between sending messages. If set to 0, rate limiting for this spoke connector will be disabled.\"}},\"withdrawFunds(address)\":{\"details\":\"Withdraws the entire balance of the contract.\",\"params\":{\"_to\":\"The recipient of the funds withdrawn\"}}},\"version\":1},\"userdoc\":{\"events\":{\"FundsWithdrawn(address,uint256)\":{\"notice\":\"Emitted when funds are withdrawn by the admin\"},\"GasCapUpdated(uint256,uint256)\":{\"notice\":\"Emitted when admin updates the gas cap\"},\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"},\"WatcherManagerChanged(address)\":{\"notice\":\"Emitted when the manager address changes\"}},\"kind\":\"user\",\"methods\":{\"AMB()\":{\"notice\":\"Address of the AMB on this domain.\"},\"DOMAIN()\":{\"notice\":\"The domain of this Messaging (i.e. Connector) contract.\"},\"MERKLE()\":{\"notice\":\"MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root will be sent crosschain to the hub for aggregation and redistribution.\"},\"MIRROR_DOMAIN()\":{\"notice\":\"The domain of the corresponding messaging (i.e. Connector) contract.\"},\"PROCESS_GAS()\":{\"notice\":\"Minimum gas for processing a received message (reserved for handle)\"},\"RESERVE_GAS()\":{\"notice\":\"Reserved gas (to ensure tx completes in case message processing runs out)\"},\"ROOT_MANAGER()\":{\"notice\":\"RootManager contract address.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"addSender(address)\":{\"notice\":\"Adds a sender to the allowlist.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"delayBlocks()\":{\"notice\":\"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary.\"},\"dispatch(uint32,bytes32,bytes)\":{\"notice\":\"This function adds transfers to the outbound transfer merkle tree.\"},\"home()\":{\"notice\":\"Get the local inbox contract from the xAppConnectionManager\"},\"isReplica(address)\":{\"notice\":\"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\"},\"lastSentBlock()\":{\"notice\":\"Tracks the last block that we sent a message.\"},\"localDomain()\":{\"notice\":\"This provides the implementation for what is defined in the ConnectorManager to avoid storing the domain redundantly\"},\"messages(bytes32)\":{\"notice\":\"Mapping of message leaves to MessageStatus, keyed on leaf.\"},\"mirrorConnector()\":{\"notice\":\"Connector on L2 for L1 connectors, and vice versa.\"},\"nonces(uint32)\":{\"notice\":\"domain => next available nonce for the domain.\"},\"outboundRoot()\":{\"notice\":\"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"pause()\":{\"notice\":\"Watchers can pause contracts if fraud is detected\"},\"pendingAggregateRoots(bytes32)\":{\"notice\":\"This will hold the commit block for incoming aggregateRoots from the hub chain. Once they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can be used for proving inclusion of crosschain messages.\"},\"processMessage(bytes)\":{\"notice\":\"Processes a message received by an AMB\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)\":{\"notice\":\"Must be able to call the `handle` function on the BridgeRouter contract. This is called on the destination domain to handle incoming messages. Proving: Calculates the expected inbound root from an origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this calculated inbound root is included in the current aggregateRoot, given its index in the aggregator tree and the proof of inclusion. Processing: After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for execution.\"},\"provenAggregateRoots(bytes32)\":{\"notice\":\"This tracks the roots of the aggregate tree containing outbound roots from all other supported domains. The current version is the one that is known to be past the delayBlocks time period.\"},\"provenMessageRoots(bytes32)\":{\"notice\":\"This tracks whether the root has been proven to exist within the given aggregate root.\"},\"rateLimitBlocks()\":{\"notice\":\"The number of blocks required between message sending events.\"},\"removePendingAggregateRoot(bytes32)\":{\"notice\":\"Manually remove a pending aggregateRoot by owner if the contract is paused.\"},\"removeSender(address)\":{\"notice\":\"Removes a sender from the allowlist.\"},\"renounceOwnership()\":{\"notice\":\"Should not be able to renounce ownership\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"send(bytes)\":{\"notice\":\"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)\"},\"sentMessageRoots(bytes32)\":{\"notice\":\"This mapping records all message roots that have already been sent in order to prevent redundant message roots from being sent to hub.\"},\"setDelayBlocks(uint256)\":{\"notice\":\"Set the `delayBlocks`, the period in blocks over which an incoming message is verified.\"},\"setMirrorConnector(address)\":{\"notice\":\"Sets the address of the l2Connector for this domain\"},\"setRateLimitBlocks(uint256)\":{\"notice\":\"Set the rate limit (number of blocks) at which we can send messages from this contract to the hub chain using the `send` method.\"},\"setWatcherManager(address)\":{\"notice\":\"Owner can enroll a watcher (abilities are defined by inheriting contracts)\"},\"unpause()\":{\"notice\":\"Owner can unpause contracts if fraud is detected by watchers\"},\"verifySender(address)\":{\"notice\":\"Checks the cross domain sender for a given address\"},\"watcherManager()\":{\"notice\":\"The `WatcherManager` contract governs the watcher allowlist.\"},\"withdrawFunds(address)\":{\"notice\":\"This function should be callable by owner, and send funds trapped on a connector to the provided recipient.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol\":\"GnosisSpokeConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n    /**\\n     * @dev Emitted when the pause is triggered by `account`.\\n     */\\n    event Paused(address account);\\n\\n    /**\\n     * @dev Emitted when the pause is lifted by `account`.\\n     */\\n    event Unpaused(address account);\\n\\n    bool private _paused;\\n\\n    /**\\n     * @dev Initializes the contract in unpaused state.\\n     */\\n    constructor() {\\n        _paused = false;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    modifier whenNotPaused() {\\n        _requireNotPaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    modifier whenPaused() {\\n        _requirePaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the contract is paused, and false otherwise.\\n     */\\n    function paused() public view virtual returns (bool) {\\n        return _paused;\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is paused.\\n     */\\n    function _requireNotPaused() internal view virtual {\\n        require(!paused(), \\\"Pausable: paused\\\");\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is not paused.\\n     */\\n    function _requirePaused() internal view virtual {\\n        require(paused(), \\\"Pausable: not paused\\\");\\n    }\\n\\n    /**\\n     * @dev Triggers stopped state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    function _pause() internal virtual whenNotPaused {\\n        _paused = true;\\n        emit Paused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Returns to normal state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    function _unpause() internal virtual whenPaused {\\n        _paused = false;\\n        emit Unpaused(_msgSender());\\n    }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"contracts/messaging/MerkleTreeManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnableUpgradeable} from \\\"../shared/ProposedOwnableUpgradeable.sol\\\";\\nimport {MerkleLib} from \\\"./libraries/MerkleLib.sol\\\";\\n\\n/**\\n * @title MerkleTreeManager\\n * @notice Contains a Merkle tree instance and exposes read/write functions for the tree.\\n * @dev On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector.\\n */\\ncontract MerkleTreeManager is ProposedOwnableUpgradeable {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleTreeManager__setArborist_zeroAddress();\\n  error MerkleTreeManager__setArborist_alreadyArborist();\\n\\n  // ============ Events ============\\n\\n  event ArboristUpdated(address previous, address updated);\\n\\n  event LeafInserted(bytes32 root, uint256 count, bytes32 leaf);\\n\\n  event LeavesInserted(bytes32 root, uint256 count, bytes32[] leaves);\\n\\n  // ============ Libraries ============\\n\\n  using MerkleLib for MerkleLib.Tree;\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Core data structure with which this contract is tasked with keeping custody.\\n   * Writable only by the designated arborist.\\n   */\\n  MerkleLib.Tree public tree;\\n\\n  /**\\n   * @notice The arborist contract that has permission to write to this tree.\\n   * @dev This could be the root manager contract or a spoke connector contract, for example.\\n   */\\n  address public arborist;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyArborist() {\\n    require(arborist == msg.sender, \\\"!arborist\\\");\\n    _;\\n  }\\n\\n  // ============ Getters ============\\n\\n  /**\\n   * @notice Returns the current branch.\\n   */\\n  function branch() public view returns (bytes32[32] memory) {\\n    return tree.branch;\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the current root.\\n   */\\n  function root() public view returns (bytes32) {\\n    return tree.root();\\n  }\\n\\n  /**\\n   * @notice Returns the number of inserted leaves in the tree (current index).\\n   */\\n  function count() public view returns (uint256) {\\n    return tree.count;\\n  }\\n\\n  /**\\n   * @notice Convenience getter: returns the root and count.\\n   */\\n  function rootAndCount() public view returns (bytes32, uint256) {\\n    return (tree.root(), tree.count);\\n  }\\n\\n  // ======== Initializer =========\\n\\n  function initialize(address _arborist) public initializer {\\n    __MerkleTreeManager_init(_arborist);\\n    __ProposedOwnable_init();\\n  }\\n\\n  /**\\n   * @dev Initializes MerkleTreeManager instance. Sets the msg.sender as the initial permissioned\\n   */\\n  function __MerkleTreeManager_init(address _arborist) internal onlyInitializing {\\n    __MerkleTreeManager_init_unchained(_arborist);\\n  }\\n\\n  function __MerkleTreeManager_init_unchained(address _arborist) internal onlyInitializing {\\n    arborist = _arborist;\\n  }\\n\\n  // ============ Admin Functions ==============\\n\\n  /**\\n   * @notice Method for the current arborist to assign write permissions to a new arborist.\\n   * @param newArborist The new address to set as the current arborist.\\n   */\\n  function setArborist(address newArborist) external onlyOwner {\\n    if (newArborist == address(0)) revert MerkleTreeManager__setArborist_zeroAddress();\\n    address current = arborist;\\n    if (current == newArborist) revert MerkleTreeManager__setArborist_alreadyArborist();\\n\\n    // Emit updated event\\n    emit ArboristUpdated(current, newArborist);\\n\\n    arborist = newArborist;\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as there is a possibility the\\n   * arborist may change.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ========= Public Functions =========\\n\\n  /**\\n   * @notice Inserts the given leaves into the tree.\\n   * @param leaves The leaves to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32[] memory leaves) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // For > 1 leaf, considerably more efficient to put this tree into memory, conduct operations,\\n    // then re-assign it to storage - *especially* if we have multiple leaves to insert.\\n    MerkleLib.Tree memory _tree = tree;\\n\\n    uint256 leafCount = leaves.length;\\n    for (uint256 i; i < leafCount; ) {\\n      // Insert the new node (using in-memory method).\\n      _tree = _tree.insert(leaves[i]);\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // Write the newly updated tree to storage.\\n    tree = _tree;\\n\\n    // Get return details for convenience.\\n    _count = _tree.count;\\n    // NOTE: Root calculation method currently reads from storage only.\\n    _root = tree.root();\\n\\n    emit LeavesInserted(_root, _count, leaves);\\n  }\\n\\n  /**\\n   * @notice Inserts the given leaf into the tree.\\n   * @param leaf The leaf to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32 leaf) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // Insert the new node.\\n    tree = tree.insert(leaf);\\n    _count = tree.count;\\n    _root = tree.root();\\n\\n    emit LeafInserted(_root, _count, leaf);\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[48] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x6eb338843435d4e859de1c71b9ad458c41aeba79002eaa58a463ef86effda89a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherClient.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Pausable} from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\nimport {WatcherManager} from \\\"./WatcherManager.sol\\\";\\n\\n/**\\n * @notice This contract abstracts the functionality of the watcher manager.\\n * Contracts can inherit this contract to be able to use the watcher manager's shared watcher set.\\n */\\n\\ncontract WatcherClient is ProposedOwnable, Pausable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted when the manager address changes\\n   * @param watcherManager The updated manager\\n   */\\n  event WatcherManagerChanged(address watcherManager);\\n\\n  // ============ Properties ============\\n  /**\\n   * @notice The `WatcherManager` contract governs the watcher allowlist.\\n   * @dev Multiple clients can share a watcher set using the same manager\\n   */\\n  WatcherManager public watcherManager;\\n\\n  // ============ Constructor ============\\n  constructor(address _watcherManager) ProposedOwnable() {\\n    watcherManager = WatcherManager(_watcherManager);\\n  }\\n\\n  // ============ Modifiers ============\\n  /**\\n   * @notice Enforces the sender is the watcher\\n   */\\n  modifier onlyWatcher() {\\n    require(watcherManager.isWatcher(msg.sender), \\\"!watcher\\\");\\n    _;\\n  }\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @notice Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function setWatcherManager(address _watcherManager) external onlyOwner {\\n    require(_watcherManager != address(watcherManager), \\\"already watcher manager\\\");\\n    watcherManager = WatcherManager(_watcherManager);\\n    emit WatcherManagerChanged(_watcherManager);\\n  }\\n\\n  /**\\n   * @notice Owner can unpause contracts if fraud is detected by watchers\\n   */\\n  function unpause() external onlyOwner whenPaused {\\n    _unpause();\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as only the owner\\n   * is able to unpause the contracts. You can still propose `address(0)`,\\n   * but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ============ Watcher fns ============\\n\\n  /**\\n   * @notice Watchers can pause contracts if fraud is detected\\n   */\\n  function pause() external onlyWatcher whenNotPaused {\\n    _pause();\\n  }\\n}\\n\",\"keccak256\":\"0x97b0da2c0317359ef2980d1f3c5fcdd7df2bdacbedf216dcbda521b96124444a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can\\n * inherit to make use of the same watcher set.\\n */\\n\\ncontract WatcherManager is ProposedOwnable {\\n  // ============ Events ============\\n  event WatcherAdded(address watcher);\\n\\n  event WatcherRemoved(address watcher);\\n\\n  // ============ Properties ============\\n  mapping(address => bool) public isWatcher;\\n\\n  // ============ Constructor ============\\n  constructor() ProposedOwnable() {\\n    _setOwner(msg.sender);\\n  }\\n\\n  // ============ Modifiers ============\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @dev Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function addWatcher(address _watcher) external onlyOwner {\\n    require(!isWatcher[_watcher], \\\"already watcher\\\");\\n    isWatcher[_watcher] = true;\\n    emit WatcherAdded(_watcher);\\n  }\\n\\n  /**\\n   * @dev Owner can unenroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function removeWatcher(address _watcher) external onlyOwner {\\n    require(isWatcher[_watcher], \\\"!exist\\\");\\n    delete isWatcher[_watcher];\\n    emit WatcherRemoved(_watcher);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as the watcher griefing\\n   * vector exists. You can still propose `address(0)`, but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n}\\n\",\"keccak256\":\"0x94d9db4cd19453c9047164f697011163a42a6e12f9b2e1d7fbcfb35a7d021318\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/Connector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IConnector} from \\\"../interfaces/IConnector.sol\\\";\\n\\n/**\\n * @title Connector\\n * @author Connext Labs, Inc.\\n * @notice This contract has the messaging interface functions used by all connectors.\\n *\\n * @dev This contract stores information about mirror connectors, but can be used as a\\n * base for contracts that do not have a mirror (i.e. the connector handling messaging on\\n * mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\\n * will be empty\\n *\\n * @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\\n * or `mirrorGas`\\n */\\nabstract contract Connector is ProposedOwnable, IConnector {\\n  // ========== Custom Errors ===========\\n\\n  error Connector__processMessage_notUsed();\\n\\n  // ============ Events ============\\n\\n  event NewConnector(\\n    uint32 indexed domain,\\n    uint32 indexed mirrorDomain,\\n    address amb,\\n    address rootManager,\\n    address mirrorConnector\\n  );\\n\\n  event MirrorConnectorUpdated(address previous, address current);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The domain of this Messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable DOMAIN;\\n\\n  /**\\n   * @notice Address of the AMB on this domain.\\n   */\\n  address public immutable AMB;\\n\\n  /**\\n   * @notice RootManager contract address.\\n   */\\n  address public immutable ROOT_MANAGER;\\n\\n  /**\\n   * @notice The domain of the corresponding messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable MIRROR_DOMAIN;\\n\\n  /**\\n   * @notice Connector on L2 for L1 connectors, and vice versa.\\n   */\\n  address public mirrorConnector;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered AMB\\n   */\\n  modifier onlyAMB() {\\n    require(msg.sender == AMB, \\\"!AMB\\\");\\n    _;\\n  }\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered ROOT_MANAGER\\n   */\\n  modifier onlyRootManager() {\\n    // NOTE: RootManager will be zero address for spoke connectors.\\n    // Only root manager can dispatch a message to spokes/L2s via the hub connector.\\n    require(msg.sender == ROOT_MANAGER, \\\"!rootManager\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) ProposedOwnable() {\\n    // set the owner\\n    _setOwner(msg.sender);\\n\\n    // sanity checks on values\\n    require(_domain != 0, \\\"empty domain\\\");\\n    require(_rootManager != address(0), \\\"empty rootManager\\\");\\n    // see note at top of contract on why the mirror values are not sanity checked\\n\\n    // set immutables\\n    DOMAIN = _domain;\\n    AMB = _amb;\\n    ROOT_MANAGER = _rootManager;\\n    MIRROR_DOMAIN = _mirrorDomain;\\n    // set mutables if defined\\n    if (_mirrorConnector != address(0)) {\\n      _setMirrorConnector(_mirrorConnector);\\n    }\\n\\n    emit NewConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector);\\n  }\\n\\n  // ============ Receivable ============\\n  /**\\n   * @notice Connectors may need to receive native asset to handle fees when sending a\\n   * message\\n   */\\n  receive() external payable {}\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Sets the address of the l2Connector for this domain\\n   */\\n  function setMirrorConnector(address _mirrorConnector) public onlyOwner {\\n    _setMirrorConnector(_mirrorConnector);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice Processes a message received by an AMB\\n   * @dev This is called by AMBs to process messages originating from mirror connector\\n   */\\n  function processMessage(bytes memory _data) external virtual onlyAMB {\\n    _processMessage(_data);\\n    emit MessageProcessed(_data, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Checks the cross domain sender for a given address\\n   */\\n  function verifySender(address _expected) external returns (bool) {\\n    return _verifySender(_expected);\\n  }\\n\\n  // ============ Virtual Functions ============\\n\\n  /**\\n   * @notice This function is used by the Connext contract on the l2 domain to send a message to the\\n   * l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\\n   * @param _data The contents of the message\\n   * @param _encodedData Data used to send the message; specific to connector\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal virtual;\\n\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(\\n    bytes memory /* _data */\\n  ) internal virtual {\\n    // By default, reverts. This is to ensure the call path is not used unless this function is\\n    // overridden by the inheriting class\\n    revert Connector__processMessage_notUsed();\\n  }\\n\\n  /**\\n   * @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\\n   * is the expected address.\\n   * @dev Should be overridden by the implementing Connector contract.\\n   */\\n  function _verifySender(address _expected) internal virtual returns (bool);\\n\\n  // ============ Private Functions ============\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal virtual {\\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\\n    mirrorConnector = _mirrorConnector;\\n  }\\n}\\n\",\"keccak256\":\"0x08d4077a1b5caf9f46491206064bb24bee467dd741b42fed3d30a608eea83368\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/ConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IConnectorManager} from \\\"../interfaces/IConnectorManager.sol\\\";\\nimport {IOutbox} from \\\"../interfaces/IOutbox.sol\\\";\\n\\n/**\\n * @notice This is an interface to allow the `Messaging` contract to be used\\n * as a `XappConnectionManager` on all router contracts.\\n *\\n * @dev Each nomad router contract has a `XappConnectionClient`, which references a\\n * XappConnectionManager to get the `Home` (outbox) and approved `Replica` (inbox)\\n * instances. At any point the client can replace the manager it's pointing to,\\n * changing the underlying messaging connection.\\n */\\nabstract contract ConnectorManager is IConnectorManager {\\n  constructor() {}\\n\\n  function home() public view returns (IOutbox) {\\n    return IOutbox(address(this));\\n  }\\n\\n  function isReplica(address _potentialReplica) public view returns (bool) {\\n    return _potentialReplica == address(this);\\n  }\\n\\n  function localDomain() external view virtual returns (uint32);\\n}\\n\",\"keccak256\":\"0x0112a527de062459aadfc2c8aa59a81c379d53c0f646f7869c6250e343ba91be\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/GasCap.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\n\\nabstract contract GasCap is ProposedOwnable {\\n  // ============ Storage ============\\n  /**\\n   * @notice The gnosis amb requires destination gas to be specified on the origin.\\n   * The gas used will be passed in by the relayer to allow for real-time estimates,\\n   * but will be capped at the admin-set cap.\\n   */\\n  uint256 gasCap;\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted when admin updates the gas cap\\n   * @param _previous The starting value\\n   * @param _updated The final value\\n   */\\n  event GasCapUpdated(uint256 _previous, uint256 _updated);\\n\\n  // ============ Constructor ============\\n  constructor(uint256 _gasCap) {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Admin Fns ============\\n  function setGasCap(uint256 _gasCap) public onlyOwner {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Internal Fns ============\\n\\n  /**\\n   * @notice Used (by admin) to update the gas cap\\n   * @param _gasCap The new value\\n   */\\n  function _setGasCap(uint256 _gasCap) internal {\\n    emit GasCapUpdated(gasCap, _gasCap);\\n    gasCap = _gasCap;\\n  }\\n\\n  /**\\n   * @notice Used to get the gas to use. Will be the original value IFF it\\n   * is less than the cap\\n   * @param _gas The proposed gas value\\n   */\\n  function _getGas(uint256 _gas) internal view returns (uint256) {\\n    if (_gas > gasCap) {\\n      _gas = gasCap;\\n    }\\n    return _gas;\\n  }\\n}\\n\",\"keccak256\":\"0xb8b52a3372f08490c918d1f490ad80764d54bd62d1638e4d17a5b552efe6587d\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/SpokeConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ReentrancyGuard} from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {ExcessivelySafeCall} from \\\"../../shared/libraries/ExcessivelySafeCall.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {MerkleLib} from \\\"../libraries/MerkleLib.sol\\\";\\nimport {Message} from \\\"../libraries/Message.sol\\\";\\nimport {RateLimited} from \\\"../libraries/RateLimited.sol\\\";\\n\\nimport {MerkleTreeManager} from \\\"../MerkleTreeManager.sol\\\";\\nimport {WatcherClient} from \\\"../WatcherClient.sol\\\";\\n\\nimport {Connector, ProposedOwnable} from \\\"./Connector.sol\\\";\\nimport {ConnectorManager} from \\\"./ConnectorManager.sol\\\";\\n\\n/**\\n * @title SpokeConnector\\n * @author Connext Labs, Inc.\\n * @notice This contract implements the messaging functions needed on the spoke-side of a given AMB.\\n * The SpokeConnector extends the HubConnector functionality by being able to send, store, and prove\\n * messages.\\n *\\n * @dev If you are deploying this contract to mainnet, then the mirror values stored in the HubConnector\\n * will be unused\\n */\\nabstract contract SpokeConnector is Connector, ConnectorManager, WatcherClient, RateLimited, ReentrancyGuard {\\n  // ============ Libraries ============\\n\\n  using MerkleLib for MerkleLib.Tree;\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n  using Message for bytes29;\\n\\n  // ============ Events ============\\n\\n  event SenderAdded(address sender);\\n\\n  event SenderRemoved(address sender);\\n\\n  event AggregateRootReceived(bytes32 root);\\n\\n  event AggregateRootRemoved(bytes32 root);\\n\\n  event AggregateRootVerified(bytes32 indexed root);\\n\\n  event Dispatch(bytes32 leaf, uint256 index, bytes32 root, bytes message);\\n\\n  event Process(bytes32 leaf, bool success, bytes returnData);\\n\\n  event DelayBlocksUpdated(uint256 indexed updated, address caller);\\n\\n  /**\\n   * @notice Emitted when funds are withdrawn by the admin\\n   * @dev See comments in `withdrawFunds`\\n   * @param to The recipient of the funds\\n   * @param amount The amount withdrawn\\n   */\\n  event FundsWithdrawn(address indexed to, uint256 amount);\\n\\n  event MessageProven(bytes32 indexed leaf, bytes32 indexed aggregateRoot, uint256 aggregateIndex);\\n\\n  // ============ Structs ============\\n\\n  // Status of Message:\\n  //   0 - None - message has not been proven or processed\\n  //   1 - Proven - message inclusion proof has been validated\\n  //   2 - Processed - message has been dispatched to recipient\\n  enum MessageStatus {\\n    None,\\n    Proven,\\n    Processed\\n  }\\n\\n  /**\\n   * Struct for submitting a proof for a given message. Used in `proveAndProcess` below.\\n   * @param message Bytes of message to be processed. The hash of this message is considered the leaf.\\n   * @param proof Merkle proof of inclusion for given leaf.\\n   * @param index Index of leaf in home's merkle tree.\\n   */\\n  struct Proof {\\n    bytes message;\\n    bytes32[32] path;\\n    uint256 index;\\n  }\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Number of blocks to delay the processing of a message to allow for watchers to verify\\n   * the validity and pause if necessary.\\n   */\\n  uint256 public delayBlocks;\\n\\n  /**\\n   * @notice MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root\\n   * will be sent crosschain to the hub for aggregation and redistribution.\\n   */\\n  MerkleTreeManager public immutable MERKLE;\\n\\n  /**\\n   * @notice Minimum gas for processing a received message (reserved for handle)\\n   */\\n  uint256 public immutable PROCESS_GAS;\\n\\n  /**\\n   * @notice Reserved gas (to ensure tx completes in case message processing runs out)\\n   */\\n  uint256 public immutable RESERVE_GAS;\\n\\n  /**\\n   * @notice This will hold the commit block for incoming aggregateRoots from the hub chain. Once\\n   * they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can\\n   * be used for proving inclusion of crosschain messages.\\n   *\\n   * @dev NOTE: A commit block of 0 should be considered invalid (it is an empty entry in the\\n   * mapping). We must ALWAYS ensure the value is not 0 before checking whether it has surpassed the\\n   * verification period.\\n   */\\n  mapping(bytes32 => uint256) public pendingAggregateRoots;\\n\\n  /**\\n   * @notice This tracks the roots of the aggregate tree containing outbound roots from all other\\n   * supported domains. The current version is the one that is known to be past the delayBlocks\\n   * time period.\\n   * @dev This root is the root of the tree that is aggregated on mainnet (composed of all the roots\\n   * of previous trees).\\n   */\\n  mapping(bytes32 => bool) public provenAggregateRoots;\\n\\n  /**\\n   * @notice This tracks whether the root has been proven to exist within the given aggregate root.\\n   * @dev Tracking this is an optimization so you dont have to prove inclusion of the same constituent\\n   * root many times.\\n   */\\n  mapping(bytes32 => bool) public provenMessageRoots;\\n\\n  /**\\n   * @notice This mapping records all message roots that have already been sent in order to prevent\\n   * redundant message roots from being sent to hub.\\n   */\\n  mapping(bytes32 => bool) public sentMessageRoots;\\n\\n  /**\\n   * @dev This is used for the `onlyAllowlistedSender` modifier, which gates who\\n   * can send messages using `dispatch`.\\n   */\\n  mapping(address => bool) public allowlistedSenders;\\n\\n  /**\\n   * @notice domain => next available nonce for the domain.\\n   */\\n  mapping(uint32 => uint32) public nonces;\\n\\n  /**\\n   * @notice Mapping of message leaves to MessageStatus, keyed on leaf.\\n   */\\n  mapping(bytes32 => MessageStatus) public messages;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyAllowlistedSender() {\\n    require(allowlistedSenders[msg.sender], \\\"!allowlisted\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new SpokeConnector instance.\\n   * @param _domain The domain this connector lives on.\\n   * @param _mirrorDomain The hub domain.\\n   * @param _amb The address of the AMB on the spoke domain this connector lives on.\\n   * @param _rootManager The address of the RootManager on the hub.\\n   * @param _mirrorConnector The address of the spoke connector.\\n   * @param _processGas The gas costs used in `handle` to ensure meaningful state changes can occur (minimum gas needed\\n   * to handle transaction).\\n   * @param _reserveGas The gas costs reserved when `handle` is called to ensure failures are handled.\\n   * @param _delayBlocks The delay for the validation period for incoming messages in blocks.\\n   * @param _merkle The address of the MerkleTreeManager on this spoke domain.\\n   * @param _watcherManager The address of the WatcherManager to whom this connector is a client.\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    uint256 _processGas,\\n    uint256 _reserveGas,\\n    uint256 _delayBlocks,\\n    address _merkle,\\n    address _watcherManager\\n  )\\n    ConnectorManager()\\n    Connector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector)\\n    WatcherClient(_watcherManager)\\n  {\\n    // Sanity check: constants are reasonable.\\n    require(_processGas > 850_000 - 1, \\\"!process gas\\\");\\n    require(_reserveGas > 15_000 - 1, \\\"!reserve gas\\\");\\n    PROCESS_GAS = _processGas;\\n    RESERVE_GAS = _reserveGas;\\n\\n    require(_merkle != address(0), \\\"!zero merkle\\\");\\n    MERKLE = MerkleTreeManager(_merkle);\\n\\n    delayBlocks = _delayBlocks;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Adds a sender to the allowlist.\\n   * @dev Only allowlisted routers (senders) can call `dispatch`.\\n   */\\n  function addSender(address _sender) public onlyOwner {\\n    allowlistedSenders[_sender] = true;\\n    emit SenderAdded(_sender);\\n  }\\n\\n  /**\\n   * @notice Removes a sender from the allowlist.\\n   * @dev Only allowlisted routers (senders) can call `dispatch`.\\n   */\\n  function removeSender(address _sender) public onlyOwner {\\n    delete allowlistedSenders[_sender];\\n    emit SenderRemoved(_sender);\\n  }\\n\\n  /**\\n   * @notice Set the `delayBlocks`, the period in blocks over which an incoming message\\n   * is verified.\\n   */\\n  function setDelayBlocks(uint256 _delayBlocks) public onlyOwner {\\n    require(_delayBlocks != delayBlocks, \\\"!delayBlocks\\\");\\n    emit DelayBlocksUpdated(_delayBlocks, msg.sender);\\n    delayBlocks = _delayBlocks;\\n  }\\n\\n  /**\\n   * @notice Set the rate limit (number of blocks) at which we can send messages from\\n   * this contract to the hub chain using the `send` method.\\n   * @dev Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\\n   * @param _rateLimit The number of blocks require between sending messages. If set to\\n   * 0, rate limiting for this spoke connector will be disabled.\\n   */\\n  function setRateLimitBlocks(uint256 _rateLimit) public onlyOwner {\\n    _setRateLimitBlocks(_rateLimit);\\n  }\\n\\n  /**\\n   * @notice Manually remove a pending aggregateRoot by owner if the contract is paused.\\n   * @dev This method is required for handling fraud cases in the current construction.\\n   * @param _fraudulentRoot Target fraudulent root that should be erased from the\\n   * `pendingAggregateRoots` mapping.\\n   */\\n  function removePendingAggregateRoot(bytes32 _fraudulentRoot) public onlyOwner whenPaused {\\n    // Sanity check: pending aggregate root exists.\\n    require(pendingAggregateRoots[_fraudulentRoot] != 0, \\\"aggregateRoot !exists\\\");\\n    delete pendingAggregateRoots[_fraudulentRoot];\\n    emit AggregateRootRemoved(_fraudulentRoot);\\n  }\\n\\n  /**\\n   * @notice This function should be callable by owner, and send funds trapped on\\n   * a connector to the provided recipient.\\n   * @dev Withdraws the entire balance of the contract.\\n   *\\n   * @param _to The recipient of the funds withdrawn\\n   */\\n  function withdrawFunds(address _to) public onlyOwner {\\n    uint256 amount = address(this).balance;\\n    Address.sendValue(payable(_to), amount);\\n    emit FundsWithdrawn(_to, amount);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as it is impossible in the\\n   * WatcherClient, and as long as only the owner can remove pending roots in case of\\n   * fraud.\\n   */\\n  function renounceOwnership() public virtual override(ProposedOwnable, WatcherClient) onlyOwner {}\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice This returns the root of all messages with the origin domain as this domain (i.e.\\n   * all outbound messages)\\n   */\\n  function outboundRoot() external view returns (bytes32) {\\n    return MERKLE.root();\\n  }\\n\\n  /**\\n   * @notice This provides the implementation for what is defined in the ConnectorManager\\n   * to avoid storing the domain redundantly\\n   */\\n  function localDomain() external view override returns (uint32) {\\n    return DOMAIN;\\n  }\\n\\n  /**\\n   * @notice This returns the root of all messages with the origin domain as this domain (i.e.\\n   * all outbound messages)\\n   */\\n  function send(bytes memory _encodedData) external payable whenNotPaused rateLimited {\\n    bytes32 root = MERKLE.root();\\n    require(sentMessageRoots[root] == false, \\\"root already sent\\\");\\n    bytes memory _data = abi.encodePacked(root);\\n    _sendMessage(_data, _encodedData);\\n    sentMessageRoots[root] = true;\\n    emit MessageSent(_data, _encodedData, msg.sender);\\n  }\\n\\n  /**\\n   * @notice This function adds transfers to the outbound transfer merkle tree.\\n   * @dev The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \\\"hub\\\"),\\n   * it will be combined into a single aggregate root by RootManager (along with outbound roots from other\\n   * chains). This aggregate root will be redistributed to all destination chains.\\n   *\\n   * NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external onlyAllowlistedSender returns (bytes32, bytes memory) {\\n    // Get the next nonce for the destination domain, then increment it.\\n    uint32 _nonce = nonces[_destinationDomain]++;\\n\\n    // Format the message into packed bytes.\\n    bytes memory _message = Message.formatMessage(\\n      DOMAIN,\\n      TypeCasts.addressToBytes32(msg.sender),\\n      _nonce,\\n      _destinationDomain,\\n      _recipientAddress,\\n      _messageBody\\n    );\\n\\n    // Insert the hashed message into the Merkle tree.\\n    bytes32 _messageHash = keccak256(_message);\\n\\n    // Returns the root calculated after insertion of message, needed for events for\\n    // watchers\\n    (bytes32 _root, uint256 _count) = MERKLE.insert(_messageHash);\\n\\n    // Emit Dispatch event with message information.\\n    // NOTE: Current leaf index is count - 1 since new leaf has already been inserted.\\n    emit Dispatch(_messageHash, _count - 1, _root, _message);\\n    return (_messageHash, _message);\\n  }\\n\\n  /**\\n   * @notice Must be able to call the `handle` function on the BridgeRouter contract. This is called\\n   * on the destination domain to handle incoming messages.\\n   *\\n   * Proving:\\n   * Calculates the expected inbound root from an origin chain given a leaf (message hash),\\n   * the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this\\n   * calculated inbound root is included in the current aggregateRoot, given its index in the aggregator\\n   * tree and the proof of inclusion.\\n   *\\n   * Processing:\\n   * After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for\\n   * execution.\\n   *\\n   * @dev Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they\\n   * must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.\\n   * @dev Intended to be called by the relayer at specific intervals during runtime.\\n   * @dev Will record a calculated root as having been proven if we've already proven that it was included\\n   * in the aggregateRoot.\\n   *\\n   * @param _proofs Batch of Proofs containing messages for proving/processing.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   */\\n  function proveAndProcess(\\n    Proof[] calldata _proofs,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) external whenNotPaused nonReentrant {\\n    // Sanity check: proofs are included.\\n    require(_proofs.length > 0, \\\"!proofs\\\");\\n\\n    // Optimization: calculate the inbound root for the first message in the batch and validate that\\n    // it's included in the aggregator tree. We can use this as a reference for every calculation\\n    // below to minimize storage access calls.\\n    bytes32 _messageHash = keccak256(_proofs[0].message);\\n    // TODO: Could use an array of sharedRoots so you can submit a message batch of messages with\\n    // different origins.\\n    bytes32 _messageRoot = calculateMessageRoot(_messageHash, _proofs[0].path, _proofs[0].index);\\n\\n    // Handle proving this message root is included in the target aggregate root.\\n    proveMessageRoot(_messageRoot, _aggregateRoot, _aggregatePath, _aggregateIndex);\\n    // Assuming the inbound message root was proven, the first message is now considered proven.\\n    messages[_messageHash] = MessageStatus.Proven;\\n\\n    // Now we handle proving all remaining messages in the batch - they should all share the same\\n    // inbound root!\\n    uint256 len = _proofs.length;\\n    for (uint32 i = 1; i < len; ) {\\n      _messageHash = keccak256(_proofs[i].message);\\n      bytes32 _calculatedRoot = calculateMessageRoot(_messageHash, _proofs[i].path, _proofs[i].index);\\n      // Make sure this root matches the validated inbound root.\\n      require(_calculatedRoot == _messageRoot, \\\"!sharedRoot\\\");\\n      // Message is proven!\\n      messages[_messageHash] = MessageStatus.Proven;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // All messages have been proven. We iterate separately here to process each message in the batch.\\n    // NOTE: Going through the proving phase for all messages in the batch BEFORE processing ensures\\n    // we hit reverts before we consume unbounded gas from `process` calls.\\n    for (uint32 i = 0; i < len; ) {\\n      process(_proofs[i].message);\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  // ============ Private Functions ============\\n\\n  /**\\n   * @notice This is either called by the Connector (AKA `this`) on the spoke (L2) chain after retrieving\\n   * latest `aggregateRoot` from the AMB (sourced from mainnet) OR called by the AMB directly.\\n   * @dev Must check the msg.sender on the origin chain to ensure only the root manager is passing\\n   * these roots.\\n   */\\n  function receiveAggregateRoot(bytes32 _newRoot) internal {\\n    require(_newRoot != bytes32(\\\"\\\"), \\\"new root empty\\\");\\n    require(pendingAggregateRoots[_newRoot] == 0, \\\"root already pending\\\");\\n    require(!provenAggregateRoots[_newRoot], \\\"root already proven\\\");\\n\\n    pendingAggregateRoots[_newRoot] = block.number;\\n    emit AggregateRootReceived(_newRoot);\\n  }\\n\\n  /**\\n   * @notice Checks whether the given aggregate root has surpassed the verification period.\\n   * @dev Reverts if the given aggregate root is invalid (does not exist) OR has not surpassed\\n   * verification period.\\n   * @dev If the target aggregate root is pending and HAS surpassed the verification period, then we will\\n   * move it over to the proven mapping.\\n   * @param _aggregateRoot Target aggregate root to verify.\\n   */\\n  function verifyAggregateRoot(bytes32 _aggregateRoot) internal {\\n    // 0. Sanity check: root is not 0.\\n    require(_aggregateRoot != bytes32(\\\"\\\"), \\\"aggregateRoot empty\\\");\\n\\n    // 1. Check to see if the target *aggregate* root has already been proven.\\n    if (provenAggregateRoots[_aggregateRoot]) {\\n      return; // Short circuit if this root is proven.\\n    }\\n\\n    // 2. The target aggregate root must be pending. Aggregate root commit block entry MUST exist.\\n    uint256 _aggregateRootCommitBlock = pendingAggregateRoots[_aggregateRoot];\\n    require(_aggregateRootCommitBlock != 0, \\\"aggregateRoot !exist\\\");\\n\\n    // 3. Pending aggregate root has surpassed the `delayBlocks` verification period.\\n    require(block.number - _aggregateRootCommitBlock >= delayBlocks, \\\"aggregateRoot !verified\\\");\\n\\n    // 4. The target aggregate root has surpassed verification period, we can move it over to the\\n    // proven mapping.\\n    provenAggregateRoots[_aggregateRoot] = true;\\n    emit AggregateRootVerified(_aggregateRoot);\\n    // May as well delete the pending aggregate root entry for the gas refund: it should no longer\\n    // be needed.\\n    delete pendingAggregateRoots[_aggregateRoot];\\n  }\\n\\n  /**\\n   * @notice Checks whether a given message is valid. If so, calculates the expected inbound root from an\\n   * origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion.\\n   * @dev Reverts if message's MessageStatus != None (i.e. if message was already proven or processed).\\n   *\\n   * @param _messageHash Leaf (message hash) that requires proving.\\n   * @param _messagePath Merkle path of inclusion for the leaf.\\n   * @param _messageIndex Index of leaf in the merkle tree on the origin chain of the message.\\n   * @return bytes32 Calculated root.\\n   **/\\n  function calculateMessageRoot(\\n    bytes32 _messageHash,\\n    bytes32[32] calldata _messagePath,\\n    uint256 _messageIndex\\n  ) internal view returns (bytes32) {\\n    // Ensure that the given message has not already been proven and processed.\\n    require(messages[_messageHash] == MessageStatus.None, \\\"!MessageStatus.None\\\");\\n    // Calculate the expected inbound root from the message origin based on the proof.\\n    // NOTE: Assuming a valid message was submitted with correct path/index, this should be an inbound root\\n    // that the hub has received. If the message were invalid, the root calculated here would not exist in the\\n    // aggregate root.\\n    return MerkleLib.branchRoot(_messageHash, _messagePath, _messageIndex);\\n  }\\n\\n  /**\\n   * @notice Prove an inbound message root from another chain is included in the target aggregateRoot.\\n   * @param _messageRoot The message root we want to verify.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   */\\n  function proveMessageRoot(\\n    bytes32 _messageRoot,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) internal {\\n    // 0. Check to see if the root for this batch has already been proven.\\n    if (provenMessageRoots[_messageRoot]) {\\n      // NOTE: It seems counter-intuitive, but we do NOT need to prove the given `_aggregateRoot` param\\n      // is valid IFF the `_messageRoot` has already been proven; we know that the `_messageRoot` has to\\n      // have been included in *some* proven aggregate root historically.\\n      return;\\n    }\\n\\n    // 1. Ensure aggregate root has been proven.\\n    verifyAggregateRoot(_aggregateRoot);\\n\\n    // 2. Calculate an aggregate root, given this inbound root (as leaf), path (proof), and index.\\n    bytes32 _calculatedAggregateRoot = MerkleLib.branchRoot(_messageRoot, _aggregatePath, _aggregateIndex);\\n\\n    // 3. Check to make sure it matches the current aggregate root we have stored.\\n    require(_calculatedAggregateRoot == _aggregateRoot, \\\"invalid inboundRoot\\\");\\n\\n    // This inbound root has been proven. We should specify that to optimize future calls.\\n    provenMessageRoots[_messageRoot] = true;\\n    emit MessageProven(_messageRoot, _aggregateRoot, _aggregateIndex);\\n  }\\n\\n  /**\\n   * @notice Given formatted message, attempts to dispatch message payload to end recipient.\\n   * @dev Recipient must implement a `handle` method (refer to IMessageRecipient.sol)\\n   * Reverts if formatted message's destination domain is not the Replica's domain,\\n   * if message has not been proven,\\n   * or if not enough gas is provided for the dispatch transaction.\\n   * @param _message Formatted message\\n   * @return _success TRUE iff dispatch transaction succeeded\\n   */\\n  function process(bytes memory _message) internal returns (bool _success) {\\n    bytes29 _m = _message.ref(0);\\n    // ensure message was meant for this domain\\n    require(_m.destination() == DOMAIN, \\\"!destination\\\");\\n    // ensure message has been proven\\n    bytes32 _messageHash = _m.keccak();\\n    require(messages[_messageHash] == MessageStatus.Proven, \\\"!proven\\\");\\n    // check re-entrancy guard\\n    // require(entered == 1, \\\"!reentrant\\\");\\n    // entered = 0;\\n    // update message status as processed\\n    messages[_messageHash] = MessageStatus.Processed;\\n    // A call running out of gas TYPICALLY errors the whole tx. We want to\\n    // a) ensure the call has a sufficient amount of gas to make a\\n    //    meaningful state change.\\n    // b) ensure that if the subcall runs out of gas, that the tx as a whole\\n    //    does not revert (i.e. we still mark the message processed)\\n    // To do this, we require that we have enough gas to process\\n    // and still return. We then delegate only the minimum processing gas.\\n    require(gasleft() > PROCESS_GAS + RESERVE_GAS - 1, \\\"!gas\\\");\\n    // get the message recipient\\n    address _recipient = _m.recipientAddress();\\n    // set up for assembly call\\n    uint256 _gas = PROCESS_GAS;\\n    uint16 _maxCopy = 256;\\n    // allocate memory for returndata\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    bytes memory _calldata = abi.encodeWithSignature(\\n      \\\"handle(uint32,uint32,bytes32,bytes)\\\",\\n      _m.origin(),\\n      _m.nonce(),\\n      _m.sender(),\\n      _m.body().clone()\\n    );\\n\\n    (_success, _returnData) = ExcessivelySafeCall.excessivelySafeCall(_recipient, _gas, 0, _maxCopy, _calldata);\\n\\n    // emit process results\\n    emit Process(_messageHash, _success, _returnData);\\n  }\\n}\\n\",\"keccak256\":\"0xde9ea6f462f33e62618d069fddaeed24268d13cfe03abc9dd388824a5e4e3896\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/gnosis/GnosisBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {GnosisAmb} from \\\"../../interfaces/ambs/GnosisAmb.sol\\\";\\n\\nimport {GasCap} from \\\"../GasCap.sol\\\";\\n\\nabstract contract GnosisBase is GasCap {\\n  // ============ Storage ============\\n  uint256 public immutable MIRROR_CHAIN_ID;\\n\\n  // ============ Constructor ============\\n  constructor(uint256 _gasCap, uint256 _mirrorChainId) GasCap(_gasCap) {\\n    MIRROR_CHAIN_ID = _mirrorChainId;\\n  }\\n\\n  // ============ Private fns ============\\n\\n  /**\\n   * @dev Asserts the sender of a cross domain message\\n   */\\n  function _verifySender(\\n    address _amb,\\n    address _expected,\\n    uint256 _sourceChain\\n  ) internal view returns (bool) {\\n    require(msg.sender == _amb, \\\"!bridge\\\");\\n    require(_sourceChain == MIRROR_CHAIN_ID, \\\"!source\\\");\\n    return GnosisAmb(_amb).messageSender() == _expected;\\n  }\\n\\n  /**\\n   * @notice Using Gnosis AMB, the gas is provided to `sendMessage` as an encoded uint\\n   */\\n  function _getGasFromEncoded(bytes memory _encodedData) internal view returns (uint256 _gas) {\\n    // Should include gssas info in specialized calldata\\n    require(_encodedData.length == 32, \\\"!data length\\\");\\n\\n    // Get the gas, if it is more than the cap use the cap\\n    _gas = _getGas(abi.decode(_encodedData, (uint256)));\\n  }\\n}\\n\",\"keccak256\":\"0xa7385485ed85be588ec7bcc6de033ecec9b2efa18aa2e810d5edcd1f4fbe4572\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {GnosisAmb} from \\\"../../interfaces/ambs/GnosisAmb.sol\\\";\\n\\nimport {SpokeConnector, ProposedOwnable} from \\\"../SpokeConnector.sol\\\";\\nimport {Connector} from \\\"../Connector.sol\\\";\\n\\nimport {GnosisBase} from \\\"./GnosisBase.sol\\\";\\n\\ncontract GnosisSpokeConnector is SpokeConnector, GnosisBase {\\n  // ============ Constructor ============\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    uint256 _processGas,\\n    uint256 _reserveGas,\\n    uint256 _delayBlocks,\\n    address _merkle,\\n    address _watcherManager,\\n    uint256 _gasCap, // gas to be provided on L1 execution\\n    uint256 _mirrorChainId\\n  )\\n    SpokeConnector(\\n      _domain,\\n      _mirrorDomain,\\n      _amb,\\n      _rootManager,\\n      _mirrorConnector,\\n      _processGas,\\n      _reserveGas,\\n      _delayBlocks,\\n      _merkle,\\n      _watcherManager\\n    )\\n    GnosisBase(_gasCap, _mirrorChainId)\\n  {}\\n\\n  /**\\n   * @notice Should not be able to renounce ownership\\n   */\\n  function renounceOwnership() public virtual override(SpokeConnector, ProposedOwnable) onlyOwner {}\\n\\n  // ============ Private fns ============\\n  /**\\n   * @dev Asserts the sender of a cross domain message\\n   */\\n  function _verifySender(address _expected) internal view override returns (bool) {\\n    return _verifySender(AMB, _expected, GnosisAmb(AMB).destinationChainId());\\n  }\\n\\n  /**\\n   * @dev Messaging uses this function to send data to mainnet via amb\\n   * @param _encodedData Should be encoding of gas to be provided in execution of the method call on\\n   * the mirror domain\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\\n    // Should always be dispatching the outbound root\\n    require(_data.length == 32, \\\"!length\\\");\\n\\n    // Should include gas info in specialized calldata\\n    require(_encodedData.length == 32, \\\"!data length\\\");\\n\\n    // send the message to the l1 connector by calling `processMessage`\\n    GnosisAmb(AMB).requireToPassMessage(\\n      mirrorConnector,\\n      abi.encodeWithSelector(Connector.processMessage.selector, _data),\\n      _getGasFromEncoded(_encodedData)\\n    );\\n  }\\n\\n  /**\\n   * @dev AMB calls this function to store aggregate root that is sent up by the root manager\\n   */\\n  function _processMessage(bytes memory _data) internal override {\\n    // get the data (should be the aggregate root)\\n    require(_data.length == 32, \\\"!length\\\");\\n    // ensure the l1 connector sent the message\\n    require(_verifySender(mirrorConnector), \\\"!mirrorConnector\\\");\\n    // ensure it is headed to this domain\\n    require(GnosisAmb(AMB).sourceChainId() == block.chainid, \\\"!sourceChain\\\");\\n    // update the aggregate root on the domain\\n    receiveAggregateRoot(bytes32(_data));\\n  }\\n}\\n\",\"keccak256\":\"0x2cdba4a11c5291f13c1746b971db9e2a375feee366f57d7b963eeba2a20aa03e\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/ambs/GnosisAmb.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// Taken from: https://github.com/omni/tokenbridge-contracts/blob/master/contracts/interfaces/IAMB.sol\\ninterface GnosisAmb {\\n  function messageSender() external view returns (address);\\n\\n  function maxGasPerTx() external view returns (uint256);\\n\\n  function transactionHash() external view returns (bytes32);\\n\\n  function messageId() external view returns (bytes32);\\n\\n  function messageSourceChainId() external view returns (bytes32);\\n\\n  function messageCallStatus(bytes32 _messageId) external view returns (bool);\\n\\n  function failedMessageDataHash(bytes32 _messageId) external view returns (bytes32);\\n\\n  function failedMessageReceiver(bytes32 _messageId) external view returns (address);\\n\\n  function failedMessageSender(bytes32 _messageId) external view returns (address);\\n\\n  function requireToPassMessage(\\n    address _contract,\\n    bytes memory _data,\\n    uint256 _gas\\n  ) external returns (bytes32);\\n\\n  function requireToConfirmMessage(\\n    address _contract,\\n    bytes memory _data,\\n    uint256 _gas\\n  ) external returns (bytes32);\\n\\n  function requireToGetInformation(bytes32 _requestSelector, bytes memory _data) external returns (bytes32);\\n\\n  function sourceChainId() external view returns (uint256);\\n\\n  function destinationChainId() external view returns (uint256);\\n\\n  function executeSignatures(bytes memory _data, bytes memory _signatures) external;\\n\\n  function safeExecuteSignaturesWithAutoGasLimit(bytes memory _data, bytes memory _signatures) external;\\n}\\n\",\"keccak256\":\"0x343a551705ba02bb1aa83553c118135beb42a892ebe78d6f5f575891f6d17d9e\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/MerkleLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MerkleLib\\n * @author Illusory Systems Inc.\\n * @notice An incremental merkle tree modeled on the eth2 deposit contract.\\n **/\\nlibrary MerkleLib {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleLib__insert_treeIsFull();\\n\\n  // ============ Constants =============\\n\\n  uint256 internal constant TREE_DEPTH = 32;\\n  uint256 internal constant MAX_LEAVES = 2**TREE_DEPTH - 1;\\n\\n  /**\\n   * @dev Z_i represent the hash values at different heights for a binary tree with leaf values equal to `0`.\\n   * (e.g. Z_1 is the keccak256 hash of (0x0, 0x0), Z_2 is the keccak256 hash of (Z_1, Z_1), etc...)\\n   * Z_0 is the bottom of the 33-layer tree, Z_32 is the top (i.e. root).\\n   * Used to shortcut calculation in root calculation methods below.\\n   */\\n  bytes32 internal constant Z_0 = hex\\\"0000000000000000000000000000000000000000000000000000000000000000\\\";\\n  bytes32 internal constant Z_1 = hex\\\"ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5\\\";\\n  bytes32 internal constant Z_2 = hex\\\"b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30\\\";\\n  bytes32 internal constant Z_3 = hex\\\"21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85\\\";\\n  bytes32 internal constant Z_4 = hex\\\"e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344\\\";\\n  bytes32 internal constant Z_5 = hex\\\"0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d\\\";\\n  bytes32 internal constant Z_6 = hex\\\"887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968\\\";\\n  bytes32 internal constant Z_7 = hex\\\"ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83\\\";\\n  bytes32 internal constant Z_8 = hex\\\"9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af\\\";\\n  bytes32 internal constant Z_9 = hex\\\"cefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0\\\";\\n  bytes32 internal constant Z_10 = hex\\\"f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5\\\";\\n  bytes32 internal constant Z_11 = hex\\\"f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892\\\";\\n  bytes32 internal constant Z_12 = hex\\\"3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c\\\";\\n  bytes32 internal constant Z_13 = hex\\\"c1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb\\\";\\n  bytes32 internal constant Z_14 = hex\\\"5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc\\\";\\n  bytes32 internal constant Z_15 = hex\\\"da7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2\\\";\\n  bytes32 internal constant Z_16 = hex\\\"2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f\\\";\\n  bytes32 internal constant Z_17 = hex\\\"e1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a\\\";\\n  bytes32 internal constant Z_18 = hex\\\"5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0\\\";\\n  bytes32 internal constant Z_19 = hex\\\"b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0\\\";\\n  bytes32 internal constant Z_20 = hex\\\"c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2\\\";\\n  bytes32 internal constant Z_21 = hex\\\"f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9\\\";\\n  bytes32 internal constant Z_22 = hex\\\"5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377\\\";\\n  bytes32 internal constant Z_23 = hex\\\"4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652\\\";\\n  bytes32 internal constant Z_24 = hex\\\"cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef\\\";\\n  bytes32 internal constant Z_25 = hex\\\"0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d\\\";\\n  bytes32 internal constant Z_26 = hex\\\"b8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0\\\";\\n  bytes32 internal constant Z_27 = hex\\\"838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e\\\";\\n  bytes32 internal constant Z_28 = hex\\\"662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e\\\";\\n  bytes32 internal constant Z_29 = hex\\\"388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322\\\";\\n  bytes32 internal constant Z_30 = hex\\\"93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735\\\";\\n  bytes32 internal constant Z_31 = hex\\\"8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9\\\";\\n  bytes32 internal constant Z_32 = hex\\\"27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757\\\";\\n\\n  // ============= Structs ==============\\n\\n  /**\\n   * @notice Struct representing incremental merkle tree. Contains current\\n   * branch and the number of inserted leaves in the tree.\\n   **/\\n  struct Tree {\\n    bytes32[TREE_DEPTH] branch;\\n    uint256 count;\\n  }\\n\\n  // ========= Write Methods =========\\n\\n  /**\\n   * @notice Inserts a given node (leaf) into merkle tree. Operates on an in-memory tree and\\n   * returns an updated version of that tree.\\n   * @dev Reverts if the tree is already full.\\n   * @param node Element to insert into tree.\\n   * @return Tree Updated tree.\\n   **/\\n  function insert(Tree memory tree, bytes32 node) internal pure returns (Tree memory) {\\n    // Update tree.count to increase the current count by 1 since we'll be including a new node.\\n    uint256 size = ++tree.count;\\n    if (size > MAX_LEAVES) revert MerkleLib__insert_treeIsFull();\\n\\n    // Loop starting at 0, ending when we've finished inserting the node (i.e. hashing it) into\\n    // the active branch. Each loop we cut size in half, hashing the inserted node up the active\\n    // branch along the way.\\n    for (uint256 i; i < TREE_DEPTH; ) {\\n      // Check if the current size is odd; if so, we set this index in the branch to be the node.\\n      if ((size & 1) == 1) {\\n        // If i > 0, then this node will be a hash of the original node with every layer up\\n        // until layer `i`.\\n        tree.branch[i] = node;\\n        return tree;\\n      }\\n      // If the size is not yet odd, we hash the current index in the tree branch with the node.\\n      node = keccak256(abi.encodePacked(tree.branch[i], node));\\n      size >>= 1; // Cut size in half (statement equivalent to: `size /= 2`).\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // As the loop should always end prematurely with the `return` statement, this code should\\n    // be unreachable. We revert here just to be safe.\\n    revert MerkleLib__insert_treeIsFull();\\n  }\\n\\n  // ========= Read Methods =========\\n\\n  /**\\n   * @notice Calculates and returns tree's current root.\\n   * @return _current bytes32 root.\\n   **/\\n  function root(Tree storage tree) internal view returns (bytes32 _current) {\\n    uint256 _index = tree.count;\\n\\n    if (_index == 0) {\\n      return Z_32;\\n    }\\n\\n    uint256 i;\\n    assembly {\\n      let TREE_SLOT := tree.slot\\n\\n      for {\\n\\n      } true {\\n\\n      } {\\n        for {\\n\\n        } true {\\n\\n        } {\\n          if and(_index, 1) {\\n            mstore(0, sload(TREE_SLOT))\\n            mstore(0x20, Z_0)\\n            _current := keccak256(0, 0x40)\\n            break\\n          }\\n\\n          if and(_index, shl(1, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 1)))\\n            mstore(0x20, Z_1)\\n            _current := keccak256(0, 0x40)\\n            i := 1\\n            break\\n          }\\n\\n          if and(_index, shl(2, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 2)))\\n            mstore(0x20, Z_2)\\n            _current := keccak256(0, 0x40)\\n            i := 2\\n            break\\n          }\\n\\n          if and(_index, shl(3, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 3)))\\n            mstore(0x20, Z_3)\\n            _current := keccak256(0, 0x40)\\n            i := 3\\n            break\\n          }\\n\\n          if and(_index, shl(4, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 4)))\\n            mstore(0x20, Z_4)\\n            _current := keccak256(0, 0x40)\\n            i := 4\\n            break\\n          }\\n\\n          if and(_index, shl(5, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 5)))\\n            mstore(0x20, Z_5)\\n            _current := keccak256(0, 0x40)\\n            i := 5\\n            break\\n          }\\n\\n          if and(_index, shl(6, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 6)))\\n            mstore(0x20, Z_6)\\n            _current := keccak256(0, 0x40)\\n            i := 6\\n            break\\n          }\\n\\n          if and(_index, shl(7, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 7)))\\n            mstore(0x20, Z_7)\\n            _current := keccak256(0, 0x40)\\n            i := 7\\n            break\\n          }\\n\\n          if and(_index, shl(8, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 8)))\\n            mstore(0x20, Z_8)\\n            _current := keccak256(0, 0x40)\\n            i := 8\\n            break\\n          }\\n\\n          if and(_index, shl(9, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 9)))\\n            mstore(0x20, Z_9)\\n            _current := keccak256(0, 0x40)\\n            i := 9\\n            break\\n          }\\n\\n          if and(_index, shl(10, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 10)))\\n            mstore(0x20, Z_10)\\n            _current := keccak256(0, 0x40)\\n            i := 10\\n            break\\n          }\\n\\n          if and(_index, shl(11, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 11)))\\n            mstore(0x20, Z_11)\\n            _current := keccak256(0, 0x40)\\n            i := 11\\n            break\\n          }\\n\\n          if and(_index, shl(12, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 12)))\\n            mstore(0x20, Z_12)\\n            _current := keccak256(0, 0x40)\\n            i := 12\\n            break\\n          }\\n\\n          if and(_index, shl(13, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 13)))\\n            mstore(0x20, Z_13)\\n            _current := keccak256(0, 0x40)\\n            i := 13\\n            break\\n          }\\n\\n          if and(_index, shl(14, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 14)))\\n            mstore(0x20, Z_14)\\n            _current := keccak256(0, 0x40)\\n            i := 14\\n            break\\n          }\\n\\n          if and(_index, shl(15, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 15)))\\n            mstore(0x20, Z_15)\\n            _current := keccak256(0, 0x40)\\n            i := 15\\n            break\\n          }\\n\\n          if and(_index, shl(16, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 16)))\\n            mstore(0x20, Z_16)\\n            _current := keccak256(0, 0x40)\\n            i := 16\\n            break\\n          }\\n\\n          if and(_index, shl(17, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 17)))\\n            mstore(0x20, Z_17)\\n            _current := keccak256(0, 0x40)\\n            i := 17\\n            break\\n          }\\n\\n          if and(_index, shl(18, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 18)))\\n            mstore(0x20, Z_18)\\n            _current := keccak256(0, 0x40)\\n            i := 18\\n            break\\n          }\\n\\n          if and(_index, shl(19, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 19)))\\n            mstore(0x20, Z_19)\\n            _current := keccak256(0, 0x40)\\n            i := 19\\n            break\\n          }\\n\\n          if and(_index, shl(20, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 20)))\\n            mstore(0x20, Z_20)\\n            _current := keccak256(0, 0x40)\\n            i := 20\\n            break\\n          }\\n\\n          if and(_index, shl(21, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 21)))\\n            mstore(0x20, Z_21)\\n            _current := keccak256(0, 0x40)\\n            i := 21\\n            break\\n          }\\n\\n          if and(_index, shl(22, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 22)))\\n            mstore(0x20, Z_22)\\n            _current := keccak256(0, 0x40)\\n            i := 22\\n            break\\n          }\\n\\n          if and(_index, shl(23, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 23)))\\n            mstore(0x20, Z_23)\\n            _current := keccak256(0, 0x40)\\n            i := 23\\n            break\\n          }\\n\\n          if and(_index, shl(24, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 24)))\\n            mstore(0x20, Z_24)\\n            _current := keccak256(0, 0x40)\\n            i := 24\\n            break\\n          }\\n\\n          if and(_index, shl(25, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 25)))\\n            mstore(0x20, Z_25)\\n            _current := keccak256(0, 0x40)\\n            i := 25\\n            break\\n          }\\n\\n          if and(_index, shl(26, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 26)))\\n            mstore(0x20, Z_26)\\n            _current := keccak256(0, 0x40)\\n            i := 26\\n            break\\n          }\\n\\n          if and(_index, shl(27, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 27)))\\n            mstore(0x20, Z_27)\\n            _current := keccak256(0, 0x40)\\n            i := 27\\n            break\\n          }\\n\\n          if and(_index, shl(28, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 28)))\\n            mstore(0x20, Z_28)\\n            _current := keccak256(0, 0x40)\\n            i := 28\\n            break\\n          }\\n\\n          if and(_index, shl(29, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 29)))\\n            mstore(0x20, Z_29)\\n            _current := keccak256(0, 0x40)\\n            i := 29\\n            break\\n          }\\n\\n          if and(_index, shl(30, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 30)))\\n            mstore(0x20, Z_30)\\n            _current := keccak256(0, 0x40)\\n            i := 30\\n            break\\n          }\\n\\n          if and(_index, shl(31, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 31)))\\n            mstore(0x20, Z_31)\\n            _current := keccak256(0, 0x40)\\n            i := 31\\n            break\\n          }\\n\\n          _current := Z_32\\n          i := 32\\n          break\\n        }\\n\\n        if gt(i, 30) {\\n          break\\n        }\\n\\n        {\\n          if lt(i, 1) {\\n            switch and(_index, shl(1, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_1)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 1)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 2) {\\n            switch and(_index, shl(2, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_2)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 2)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 3) {\\n            switch and(_index, shl(3, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_3)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 3)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 4) {\\n            switch and(_index, shl(4, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_4)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 4)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 5) {\\n            switch and(_index, shl(5, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_5)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 5)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 6) {\\n            switch and(_index, shl(6, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_6)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 6)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 7) {\\n            switch and(_index, shl(7, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_7)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 7)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 8) {\\n            switch and(_index, shl(8, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_8)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 8)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 9) {\\n            switch and(_index, shl(9, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_9)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 9)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 10) {\\n            switch and(_index, shl(10, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_10)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 10)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 11) {\\n            switch and(_index, shl(11, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_11)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 11)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 12) {\\n            switch and(_index, shl(12, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_12)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 12)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 13) {\\n            switch and(_index, shl(13, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_13)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 13)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 14) {\\n            switch and(_index, shl(14, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_14)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 14)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 15) {\\n            switch and(_index, shl(15, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_15)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 15)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 16) {\\n            switch and(_index, shl(16, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_16)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 16)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 17) {\\n            switch and(_index, shl(17, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_17)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 17)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 18) {\\n            switch and(_index, shl(18, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_18)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 18)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 19) {\\n            switch and(_index, shl(19, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_19)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 19)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 20) {\\n            switch and(_index, shl(20, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_20)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 20)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 21) {\\n            switch and(_index, shl(21, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_21)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 21)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 22) {\\n            switch and(_index, shl(22, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_22)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 22)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 23) {\\n            switch and(_index, shl(23, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_23)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 23)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 24) {\\n            switch and(_index, shl(24, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_24)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 24)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 25) {\\n            switch and(_index, shl(25, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_25)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 25)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 26) {\\n            switch and(_index, shl(26, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_26)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 26)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 27) {\\n            switch and(_index, shl(27, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_27)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 27)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 28) {\\n            switch and(_index, shl(28, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_28)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 28)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 29) {\\n            switch and(_index, shl(29, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_29)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 29)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 30) {\\n            switch and(_index, shl(30, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_30)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 30)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 31) {\\n            switch and(_index, shl(31, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_31)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 31)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n        }\\n\\n        break\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the merkle root for the given leaf `_item`,\\n   * a merkle branch, and the index of `_item` in the tree.\\n   * @param _item Merkle leaf\\n   * @param _branch Merkle proof\\n   * @param _index Index of `_item` in tree\\n   * @return _current Calculated merkle root\\n   **/\\n  function branchRoot(\\n    bytes32 _item,\\n    bytes32[TREE_DEPTH] memory _branch,\\n    uint256 _index\\n  ) internal pure returns (bytes32 _current) {\\n    assembly {\\n      _current := _item\\n      let BRANCH_DATA_OFFSET := _branch\\n      let f\\n\\n      f := shl(5, and(_index, 1))\\n      mstore(f, _current)\\n      mstore(sub(0x20, f), mload(BRANCH_DATA_OFFSET))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(1, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 1))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(2, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 2))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(3, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 3))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(4, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 4))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(5, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 5))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(6, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 6))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(7, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 7))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(8, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 8))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(9, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 9))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(10, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 10))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(11, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 11))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(12, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 12))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(13, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 13))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(14, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 14))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(15, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 15))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(16, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 16))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(17, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 17))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(18, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 18))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(19, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 19))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(20, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 20))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(21, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 21))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(22, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 22))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(23, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 23))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(24, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 24))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(25, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 25))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(26, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 26))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(27, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 27))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(28, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 28))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(29, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 29))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(30, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 30))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(31, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 31))))\\n      _current := keccak256(0, 0x40)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08c791dbeef6253813d74e2145183501fe7631c13d5ac9d768036f47b66b693e\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/Message.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\n/**\\n * @title Message Library\\n * @author Illusory Systems Inc.\\n * @notice Library for formatted messages used by Home and Replica.\\n **/\\nlibrary Message {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // Number of bytes in formatted message before `body` field\\n  uint256 internal constant PREFIX_LENGTH = 76;\\n\\n  /**\\n   * @notice Returns formatted (packed) message with provided fields\\n   * @param _originDomain Domain of home chain\\n   * @param _sender Address of sender as bytes32\\n   * @param _nonce Destination-specific nonce\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipient Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes of message body\\n   * @return Formatted message\\n   **/\\n  function formatMessage(\\n    uint32 _originDomain,\\n    bytes32 _sender,\\n    uint32 _nonce,\\n    uint32 _destinationDomain,\\n    bytes32 _recipient,\\n    bytes memory _messageBody\\n  ) internal pure returns (bytes memory) {\\n    return abi.encodePacked(_originDomain, _sender, _nonce, _destinationDomain, _recipient, _messageBody);\\n  }\\n\\n  /**\\n   * @notice Returns leaf of formatted message with provided fields.\\n   * @param _origin Domain of home chain\\n   * @param _sender Address of sender as bytes32\\n   * @param _nonce Destination-specific nonce number\\n   * @param _destination Domain of destination chain\\n   * @param _recipient Address of recipient on destination chain as bytes32\\n   * @param _body Raw bytes of message body\\n   * @return Leaf (hash) of formatted message\\n   **/\\n  function messageHash(\\n    uint32 _origin,\\n    bytes32 _sender,\\n    uint32 _nonce,\\n    uint32 _destination,\\n    bytes32 _recipient,\\n    bytes memory _body\\n  ) internal pure returns (bytes32) {\\n    return keccak256(formatMessage(_origin, _sender, _nonce, _destination, _recipient, _body));\\n  }\\n\\n  /// @notice Returns message's origin field\\n  function origin(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(0, 4));\\n  }\\n\\n  /// @notice Returns message's sender field\\n  function sender(bytes29 _message) internal pure returns (bytes32) {\\n    return _message.index(4, 32);\\n  }\\n\\n  /// @notice Returns message's nonce field\\n  function nonce(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(36, 4));\\n  }\\n\\n  /// @notice Returns message's destination field\\n  function destination(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(40, 4));\\n  }\\n\\n  /// @notice Returns message's recipient field as bytes32\\n  function recipient(bytes29 _message) internal pure returns (bytes32) {\\n    return _message.index(44, 32);\\n  }\\n\\n  /// @notice Returns message's recipient field as an address\\n  function recipientAddress(bytes29 _message) internal pure returns (address) {\\n    return TypeCasts.bytes32ToAddress(recipient(_message));\\n  }\\n\\n  /// @notice Returns message's body field as bytes29 (refer to TypedMemView library for details on bytes29 type)\\n  function body(bytes29 _message) internal pure returns (bytes29) {\\n    return _message.slice(PREFIX_LENGTH, _message.len() - PREFIX_LENGTH, 0);\\n  }\\n\\n  function leaf(bytes29 _message) internal pure returns (bytes32) {\\n    uint256 loc = _message.loc();\\n    uint256 len = _message.len();\\n    /*\\n    prev:\\n    return\\n      messageHash(\\n        origin(_message),\\n        sender(_message),\\n        nonce(_message),\\n        destination(_message),\\n        recipient(_message),\\n        TypedMemView.clone(body(_message))\\n      );\\n\\n      below added for gas optimization\\n     */\\n    bytes32 hash;\\n    assembly {\\n      hash := keccak256(loc, len)\\n    }\\n    return hash;\\n  }\\n}\\n\",\"keccak256\":\"0xa4212f7b88146588e8e0e24cddbc5dae6269618a722b34f00ea322b33fa1f36a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/RateLimited.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice An abstract contract intended to manage the rate limiting aspect of spoke\\n * connector messaging. Rate limiting the number of messages we can send over a span of\\n * blocks is used to mitigate key DoSing vectors for transporting messages between chains.\\n */\\nabstract contract RateLimited {\\n  // ========== Custom Errors ===========\\n\\n  error RateLimited__rateLimited_messageSendRateExceeded();\\n\\n  // ============ Events ============\\n\\n  event SendRateLimitUpdated(address updater, uint256 newRateLimit);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The number of blocks required between message sending events.\\n   * @dev NOTE: This value is 0 by default, meaning that rate limiting functionality\\n   * will naturally be disabled by default.\\n   */\\n  uint256 public rateLimitBlocks;\\n\\n  /**\\n   * @notice Tracks the last block that we sent a message.\\n   */\\n  uint256 public lastSentBlock;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Checks to see if we can send this block, given the current rate limit\\n   * setting and the last block we sent a message. If rate limit has been surpassed,\\n   * we update the `lastSentBlock` to be the current block.\\n   */\\n  modifier rateLimited() {\\n    // Check to make sure we have surpassed the number of rate limit blocks.\\n    if (lastSentBlock + rateLimitBlocks > block.number) {\\n      revert RateLimited__rateLimited_messageSendRateExceeded();\\n    }\\n    // Update the last block we sent a message to be the current one.\\n    lastSentBlock = block.number;\\n    _;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Update the current rate limit to a new value.\\n   */\\n  function _setRateLimitBlocks(uint256 _newRateLimit) internal {\\n    require(_newRateLimit != rateLimitBlocks, \\\"!new rate limit\\\");\\n    // NOTE: Setting the block rate limit interval to 0 will result in rate limiting\\n    // being disabled.\\n    rateLimitBlocks = _newRateLimit;\\n    emit SendRateLimitUpdated(msg.sender, _newRateLimit);\\n  }\\n}\\n\",\"keccak256\":\"0xcc185ae966c87441490aaa8c0779a7b3085961a7b8512d5973f1c34f641eeae3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/ProposedOwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {Initializable} from \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"./ProposedOwnable.sol\\\";\\n\\nabstract contract ProposedOwnableUpgradeable is Initializable, ProposedOwnable {\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial\\n   */\\n  function __ProposedOwnable_init() internal onlyInitializing {\\n    __ProposedOwnable_init_unchained();\\n  }\\n\\n  function __ProposedOwnable_init_unchained() internal onlyInitializing {\\n    _setOwner(msg.sender);\\n  }\\n\\n  /**\\n   * @dev This empty reserved space is put in place to allow future versions to add new\\n   * variables without shifting down storage in the inheritance chain.\\n   * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n   */\\n  uint256[47] private __GAP;\\n}\\n\",\"keccak256\":\"0x2b064b03a25915e93749905ef3aae516ffaac86b8ba9f126b614425b623bf477\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/ExcessivelySafeCall.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// Taken from: https://github.com/nomad-xyz/ExcessivelySafeCall\\n// NOTE: There is a difference between npm latest and github main versions\\n// where the latest github version allows you to specify an ether value.\\n\\nlibrary ExcessivelySafeCall {\\n  uint256 constant LOW_28_MASK = 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _value The value in wei to send to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeCall(\\n    address _target,\\n    uint256 _gas,\\n    uint256 _value,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := call(\\n        _gas, // gas\\n        _target, // recipient\\n        _value, // ether value\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeStaticCall(\\n    address _target,\\n    uint256 _gas,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal view returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := staticcall(\\n        _gas, // gas\\n        _target, // recipient\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /**\\n   * @notice Swaps function selectors in encoded contract calls\\n   * @dev Allows reuse of encoded calldata for functions with identical\\n   * argument types but different names. It simply swaps out the first 4 bytes\\n   * for the new selector. This function modifies memory in place, and should\\n   * only be used with caution.\\n   * @param _newSelector The new 4-byte selector\\n   * @param _buf The encoded contract args\\n   */\\n  function swapSelector(bytes4 _newSelector, bytes memory _buf) internal pure {\\n    require(_buf.length > 4 - 1);\\n    uint256 _mask = LOW_28_MASK;\\n    assembly {\\n      // load the first word of\\n      let _word := mload(add(_buf, 0x20))\\n      // mask out the top 4 bytes\\n      // /x\\n      _word := and(_word, _mask)\\n      _word := or(_newSelector, _word)\\n      mstore(add(_buf, 0x20), _word)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x5472b56fa56886620b1a8e4e2f12f8925500bb237a4dad38651c79db69f0724c\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol:GnosisSpokeConnector","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol:GnosisSpokeConnector","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol:GnosisSpokeConnector","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39051,"contract":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol:GnosisSpokeConnector","label":"mirrorConnector","offset":0,"slot":"3","type":"t_address"},{"astId":10590,"contract":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol:GnosisSpokeConnector","label":"_paused","offset":20,"slot":"3","type":"t_bool"},{"astId":38824,"contract":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol:GnosisSpokeConnector","label":"watcherManager","offset":0,"slot":"4","type":"t_contract(WatcherManager)39005"},{"astId":49639,"contract":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol:GnosisSpokeConnector","label":"rateLimitBlocks","offset":0,"slot":"5","type":"t_uint256"},{"astId":49642,"contract":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol:GnosisSpokeConnector","label":"lastSentBlock","offset":0,"slot":"6","type":"t_uint256"},{"astId":10691,"contract":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol:GnosisSpokeConnector","label":"_status","offset":0,"slot":"7","type":"t_uint256"},{"astId":39546,"contract":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol:GnosisSpokeConnector","label":"delayBlocks","offset":0,"slot":"8","type":"t_uint256"},{"astId":39561,"contract":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol:GnosisSpokeConnector","label":"pendingAggregateRoots","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":39566,"contract":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol:GnosisSpokeConnector","label":"provenAggregateRoots","offset":0,"slot":"10","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39571,"contract":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol:GnosisSpokeConnector","label":"provenMessageRoots","offset":0,"slot":"11","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39576,"contract":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol:GnosisSpokeConnector","label":"sentMessageRoots","offset":0,"slot":"12","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39581,"contract":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol:GnosisSpokeConnector","label":"allowlistedSenders","offset":0,"slot":"13","type":"t_mapping(t_address,t_bool)"},{"astId":39586,"contract":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol:GnosisSpokeConnector","label":"nonces","offset":0,"slot":"14","type":"t_mapping(t_uint32,t_uint32)"},{"astId":39592,"contract":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol:GnosisSpokeConnector","label":"messages","offset":0,"slot":"15","type":"t_mapping(t_bytes32,t_enum(MessageStatus)39534)"},{"astId":39301,"contract":"contracts/messaging/connectors/gnosis/GnosisSpokeConnector.sol:GnosisSpokeConnector","label":"gasCap","offset":0,"slot":"16","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(WatcherManager)39005":{"encoding":"inplace","label":"contract WatcherManager","numberOfBytes":"20"},"t_enum(MessageStatus)39534":{"encoding":"inplace","label":"enum SpokeConnector.MessageStatus","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(MessageStatus)39534)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum SpokeConnector.MessageStatus)","numberOfBytes":"32","value":"t_enum(MessageStatus)39534"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_uint32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => uint32)","numberOfBytes":"32","value":"t_uint32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"}}},"userdoc":{"events":{"FundsWithdrawn(address,uint256)":{"notice":"Emitted when funds are withdrawn by the admin"},"GasCapUpdated(uint256,uint256)":{"notice":"Emitted when admin updates the gas cap"},"MessageProcessed(bytes,address)":{"notice":"Emitted whenever a message is successfully received over an AMB"},"MessageSent(bytes,bytes,address)":{"notice":"Emitted whenever a message is successfully sent over an AMB"},"WatcherManagerChanged(address)":{"notice":"Emitted when the manager address changes"}},"kind":"user","methods":{"AMB()":{"notice":"Address of the AMB on this domain."},"DOMAIN()":{"notice":"The domain of this Messaging (i.e. Connector) contract."},"MERKLE()":{"notice":"MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root will be sent crosschain to the hub for aggregation and redistribution."},"MIRROR_DOMAIN()":{"notice":"The domain of the corresponding messaging (i.e. Connector) contract."},"PROCESS_GAS()":{"notice":"Minimum gas for processing a received message (reserved for handle)"},"RESERVE_GAS()":{"notice":"Reserved gas (to ensure tx completes in case message processing runs out)"},"ROOT_MANAGER()":{"notice":"RootManager contract address."},"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"addSender(address)":{"notice":"Adds a sender to the allowlist."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"delayBlocks()":{"notice":"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary."},"dispatch(uint32,bytes32,bytes)":{"notice":"This function adds transfers to the outbound transfer merkle tree."},"home()":{"notice":"Get the local inbox contract from the xAppConnectionManager"},"isReplica(address)":{"notice":"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager"},"lastSentBlock()":{"notice":"Tracks the last block that we sent a message."},"localDomain()":{"notice":"This provides the implementation for what is defined in the ConnectorManager to avoid storing the domain redundantly"},"messages(bytes32)":{"notice":"Mapping of message leaves to MessageStatus, keyed on leaf."},"mirrorConnector()":{"notice":"Connector on L2 for L1 connectors, and vice versa."},"nonces(uint32)":{"notice":"domain => next available nonce for the domain."},"outboundRoot()":{"notice":"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)"},"owner()":{"notice":"Returns the address of the current owner."},"pause()":{"notice":"Watchers can pause contracts if fraud is detected"},"pendingAggregateRoots(bytes32)":{"notice":"This will hold the commit block for incoming aggregateRoots from the hub chain. Once they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can be used for proving inclusion of crosschain messages."},"processMessage(bytes)":{"notice":"Processes a message received by an AMB"},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":{"notice":"Must be able to call the `handle` function on the BridgeRouter contract. This is called on the destination domain to handle incoming messages. Proving: Calculates the expected inbound root from an origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this calculated inbound root is included in the current aggregateRoot, given its index in the aggregator tree and the proof of inclusion. Processing: After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for execution."},"provenAggregateRoots(bytes32)":{"notice":"This tracks the roots of the aggregate tree containing outbound roots from all other supported domains. The current version is the one that is known to be past the delayBlocks time period."},"provenMessageRoots(bytes32)":{"notice":"This tracks whether the root has been proven to exist within the given aggregate root."},"rateLimitBlocks()":{"notice":"The number of blocks required between message sending events."},"removePendingAggregateRoot(bytes32)":{"notice":"Manually remove a pending aggregateRoot by owner if the contract is paused."},"removeSender(address)":{"notice":"Removes a sender from the allowlist."},"renounceOwnership()":{"notice":"Should not be able to renounce ownership"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"send(bytes)":{"notice":"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)"},"sentMessageRoots(bytes32)":{"notice":"This mapping records all message roots that have already been sent in order to prevent redundant message roots from being sent to hub."},"setDelayBlocks(uint256)":{"notice":"Set the `delayBlocks`, the period in blocks over which an incoming message is verified."},"setMirrorConnector(address)":{"notice":"Sets the address of the l2Connector for this domain"},"setRateLimitBlocks(uint256)":{"notice":"Set the rate limit (number of blocks) at which we can send messages from this contract to the hub chain using the `send` method."},"setWatcherManager(address)":{"notice":"Owner can enroll a watcher (abilities are defined by inheriting contracts)"},"unpause()":{"notice":"Owner can unpause contracts if fraud is detected by watchers"},"verifySender(address)":{"notice":"Checks the cross domain sender for a given address"},"watcherManager()":{"notice":"The `WatcherManager` contract governs the watcher allowlist."},"withdrawFunds(address)":{"notice":"This function should be callable by owner, and send funds trapped on a connector to the provided recipient."}},"version":1}}},"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol":{"MainnetSpokeConnector":{"abi":[{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"uint32","name":"_mirrorDomain","type":"uint32"},{"internalType":"address","name":"_amb","type":"address"},{"internalType":"address","name":"_rootManager","type":"address"},{"internalType":"address","name":"_mirrorConnector","type":"address"},{"internalType":"uint256","name":"_processGas","type":"uint256"},{"internalType":"uint256","name":"_reserveGas","type":"uint256"},{"internalType":"uint256","name":"_delayBlocks","type":"uint256"},{"internalType":"address","name":"_merkle","type":"address"},{"internalType":"address","name":"_watcherManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Connector__processMessage_notUsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"inputs":[],"name":"RateLimited__rateLimited_messageSendRateExceeded","type":"error"},{"inputs":[],"name":"TypedMemView__index_indexMoreThan32Bytes","type":"error"},{"inputs":[{"internalType":"uint256","name":"loc","type":"uint256"},{"internalType":"uint256","name":"len","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"slice","type":"uint256"}],"name":"TypedMemView__index_overrun","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_identityOOG","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_invalidPointer","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_nullPointer","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootVerified","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"updated","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"DelayBlocksUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"message","type":"bytes"}],"name":"Dispatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"aggregateRoot","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"aggregateIndex","type":"uint256"}],"name":"MessageProven","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"encodedData","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"current","type":"address"}],"name":"MirrorConnectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"mirrorDomain","type":"uint32"},{"indexed":false,"internalType":"address","name":"amb","type":"address"},{"indexed":false,"internalType":"address","name":"rootManager","type":"address"},{"indexed":false,"internalType":"address","name":"mirrorConnector","type":"address"}],"name":"NewConnector","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"returnData","type":"bytes"}],"name":"Process","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updater","type":"address"},{"indexed":false,"internalType":"uint256","name":"newRateLimit","type":"uint256"}],"name":"SendRateLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"SenderAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"SenderRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"watcherManager","type":"address"}],"name":"WatcherManagerChanged","type":"event"},{"inputs":[],"name":"AMB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MERKLE","outputs":[{"internalType":"contract MerkleTreeManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIRROR_DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROCESS_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"addSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlistedSenders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_destinationDomain","type":"uint32"},{"internalType":"bytes32","name":"_recipientAddress","type":"bytes32"},{"internalType":"bytes","name":"_messageBody","type":"bytes"}],"name":"dispatch","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"home","outputs":[{"internalType":"contract IOutbox","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_potentialReplica","type":"address"}],"name":"isReplica","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"localDomain","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"messages","outputs":[{"internalType":"enum SpokeConnector.MessageStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mirrorConnector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"nonces","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"outboundRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"pendingAggregateRoots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"processMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32[32]","name":"path","type":"bytes32[32]"},{"internalType":"uint256","name":"index","type":"uint256"}],"internalType":"struct SpokeConnector.Proof[]","name":"_proofs","type":"tuple[]"},{"internalType":"bytes32","name":"_aggregateRoot","type":"bytes32"},{"internalType":"bytes32[32]","name":"_aggregatePath","type":"bytes32[32]"},{"internalType":"uint256","name":"_aggregateIndex","type":"uint256"}],"name":"proveAndProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"provenAggregateRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"provenMessageRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rateLimitBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_fraudulentRoot","type":"bytes32"}],"name":"removePendingAggregateRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"removeSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_encodedData","type":"bytes"}],"name":"send","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_encodedData","type":"bytes"}],"name":"sendMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"sentMessageRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_delayBlocks","type":"uint256"}],"name":"setDelayBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mirrorConnector","type":"address"}],"name":"setMirrorConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rateLimit","type":"uint256"}],"name":"setRateLimitBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_watcherManager","type":"address"}],"name":"setWatcherManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_expected","type":"address"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"watcherManager","outputs":[{"internalType":"contract WatcherManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"addSender(address)":{"details":"Only allowlisted routers (senders) can call `dispatch`."},"dispatch(uint32,bytes32,bytes)":{"details":"The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \"hub\"), it will be combined into a single aggregate root by RootManager (along with outbound roots from other chains). This aggregate root will be redistributed to all destination chains. NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions"},"home()":{"details":"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad","returns":{"_0":"The local inbox contract"}},"isReplica(address)":{"returns":{"_0":"True if _potentialReplica is an enrolled Replica"}},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"processMessage(bytes)":{"details":"This is called by AMBs to process messages originating from mirror connector"},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":{"details":"Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.Intended to be called by the relayer at specific intervals during runtime.Will record a calculated root as having been proven if we've already proven that it was included in the aggregateRoot.","params":{"_aggregateIndex":"Index of the inbound root in the aggregator's merkle tree in the hub.","_aggregatePath":"Merkle path of inclusion for the inbound root.","_aggregateRoot":"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.","_proofs":"Batch of Proofs containing messages for proving/processing."}},"removePendingAggregateRoot(bytes32)":{"details":"This method is required for handling fraud cases in the current construction.","params":{"_fraudulentRoot":"Target fraudulent root that should be erased from the `pendingAggregateRoots` mapping."}},"removeSender(address)":{"details":"Only allowlisted routers (senders) can call `dispatch`."},"renounceOwnership()":{"details":"Renounce ownership should be impossible as long as it is impossible in the WatcherClient, and as long as only the owner can remove pending roots in case of fraud."},"sendMessage(bytes,bytes)":{"details":"This is called by the root manager *only* on mainnet to propagate the aggregate rootGet 'Base constructor arguments given twice' when trying to inherit"},"setRateLimitBlocks(uint256)":{"details":"Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)","params":{"_rateLimit":"The number of blocks require between sending messages. If set to 0, rate limiting for this spoke connector will be disabled."}},"withdrawFunds(address)":{"details":"Withdraws the entire balance of the contract.","params":{"_to":"The recipient of the funds withdrawn"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_10599":{"entryPoint":null,"id":10599,"parameterSlots":0,"returnSlots":0},"@_10699":{"entryPoint":null,"id":10699,"parameterSlots":0,"returnSlots":0},"@_38838":{"entryPoint":null,"id":38838,"parameterSlots":1,"returnSlots":0},"@_39152":{"entryPoint":null,"id":39152,"parameterSlots":5,"returnSlots":0},"@_39257":{"entryPoint":null,"id":39257,"parameterSlots":0,"returnSlots":0},"@_39687":{"entryPoint":null,"id":39687,"parameterSlots":10,"returnSlots":0},"@_41701":{"entryPoint":null,"id":41701,"parameterSlots":10,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":789,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":688,"id":49908,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":920,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_address_fromMemory":{"entryPoint":944,"id":null,"parameterSlots":2,"returnSlots":10},"abi_decode_uint32_fromMemory":{"entryPoint":894,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3682:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"73:108:181","statements":[{"nodeType":"YulAssignment","src":"83:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"98:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"92:5:181"},"nodeType":"YulFunctionCall","src":"92:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"83:5:181"}]},{"body":{"nodeType":"YulBlock","src":"159:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"168:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"171:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"161:6:181"},"nodeType":"YulFunctionCall","src":"161:12:181"},"nodeType":"YulExpressionStatement","src":"161:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"127:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"138:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"145:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"134:3:181"},"nodeType":"YulFunctionCall","src":"134:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"124:2:181"},"nodeType":"YulFunctionCall","src":"124:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"117:6:181"},"nodeType":"YulFunctionCall","src":"117:41:181"},"nodeType":"YulIf","src":"114:61:181"}]},"name":"abi_decode_uint32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"52:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"63:5:181","type":""}],"src":"14:167:181"},{"body":{"nodeType":"YulBlock","src":"246:117:181","statements":[{"nodeType":"YulAssignment","src":"256:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"271:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"265:5:181"},"nodeType":"YulFunctionCall","src":"265:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"256:5:181"}]},{"body":{"nodeType":"YulBlock","src":"341:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"350:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"353:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"343:6:181"},"nodeType":"YulFunctionCall","src":"343:12:181"},"nodeType":"YulExpressionStatement","src":"343:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"300:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"311:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"326:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"331:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"322:3:181"},"nodeType":"YulFunctionCall","src":"322:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"335:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"318:3:181"},"nodeType":"YulFunctionCall","src":"318:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"307:3:181"},"nodeType":"YulFunctionCall","src":"307:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"297:2:181"},"nodeType":"YulFunctionCall","src":"297:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"290:6:181"},"nodeType":"YulFunctionCall","src":"290:50:181"},"nodeType":"YulIf","src":"287:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"225:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"236:5:181","type":""}],"src":"186:177:181"},{"body":{"nodeType":"YulBlock","src":"600:672:181","statements":[{"body":{"nodeType":"YulBlock","src":"647:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"656:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"659:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"649:6:181"},"nodeType":"YulFunctionCall","src":"649:12:181"},"nodeType":"YulExpressionStatement","src":"649:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"621:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"630:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"617:3:181"},"nodeType":"YulFunctionCall","src":"617:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"642:3:181","type":"","value":"320"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"613:3:181"},"nodeType":"YulFunctionCall","src":"613:33:181"},"nodeType":"YulIf","src":"610:53:181"},{"nodeType":"YulAssignment","src":"672:49:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"711:9:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"682:28:181"},"nodeType":"YulFunctionCall","src":"682:39:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"672:6:181"}]},{"nodeType":"YulAssignment","src":"730:58:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"773:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"784:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"769:3:181"},"nodeType":"YulFunctionCall","src":"769:18:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"740:28:181"},"nodeType":"YulFunctionCall","src":"740:48:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"730:6:181"}]},{"nodeType":"YulAssignment","src":"797:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"841:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"852:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"837:3:181"},"nodeType":"YulFunctionCall","src":"837:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"807:29:181"},"nodeType":"YulFunctionCall","src":"807:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"797:6:181"}]},{"nodeType":"YulAssignment","src":"865:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"909:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"920:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"905:3:181"},"nodeType":"YulFunctionCall","src":"905:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"875:29:181"},"nodeType":"YulFunctionCall","src":"875:49:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"865:6:181"}]},{"nodeType":"YulAssignment","src":"933:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"977:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"988:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"973:3:181"},"nodeType":"YulFunctionCall","src":"973:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"943:29:181"},"nodeType":"YulFunctionCall","src":"943:50:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"933:6:181"}]},{"nodeType":"YulAssignment","src":"1002:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1022:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1033:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1018:3:181"},"nodeType":"YulFunctionCall","src":"1018:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1012:5:181"},"nodeType":"YulFunctionCall","src":"1012:26:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"1002:6:181"}]},{"nodeType":"YulAssignment","src":"1047:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1067:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1078:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1063:3:181"},"nodeType":"YulFunctionCall","src":"1063:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1057:5:181"},"nodeType":"YulFunctionCall","src":"1057:26:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"1047:6:181"}]},{"nodeType":"YulAssignment","src":"1092:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1112:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1123:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1108:3:181"},"nodeType":"YulFunctionCall","src":"1108:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1102:5:181"},"nodeType":"YulFunctionCall","src":"1102:26:181"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"1092:6:181"}]},{"nodeType":"YulAssignment","src":"1137:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1181:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1192:3:181","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1177:3:181"},"nodeType":"YulFunctionCall","src":"1177:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"1147:29:181"},"nodeType":"YulFunctionCall","src":"1147:50:181"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"1137:6:181"}]},{"nodeType":"YulAssignment","src":"1206:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1250:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1261:3:181","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1246:3:181"},"nodeType":"YulFunctionCall","src":"1246:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"1216:29:181"},"nodeType":"YulFunctionCall","src":"1216:50:181"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"1206:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"494:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"505:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"517:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"525:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"533:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"541:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"549:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"557:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"565:6:181","type":""},{"name":"value7","nodeType":"YulTypedName","src":"573:6:181","type":""},{"name":"value8","nodeType":"YulTypedName","src":"581:6:181","type":""},{"name":"value9","nodeType":"YulTypedName","src":"589:6:181","type":""}],"src":"368:904:181"},{"body":{"nodeType":"YulBlock","src":"1451:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1468:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1479:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1461:6:181"},"nodeType":"YulFunctionCall","src":"1461:21:181"},"nodeType":"YulExpressionStatement","src":"1461:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1502:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1513:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1498:3:181"},"nodeType":"YulFunctionCall","src":"1498:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1518:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1491:6:181"},"nodeType":"YulFunctionCall","src":"1491:30:181"},"nodeType":"YulExpressionStatement","src":"1491:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1541:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1552:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1537:3:181"},"nodeType":"YulFunctionCall","src":"1537:18:181"},{"hexValue":"656d70747920646f6d61696e","kind":"string","nodeType":"YulLiteral","src":"1557:14:181","type":"","value":"empty domain"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1530:6:181"},"nodeType":"YulFunctionCall","src":"1530:42:181"},"nodeType":"YulExpressionStatement","src":"1530:42:181"},{"nodeType":"YulAssignment","src":"1581:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1593:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1604:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1589:3:181"},"nodeType":"YulFunctionCall","src":"1589:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1581:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1428:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1442:4:181","type":""}],"src":"1277:336:181"},{"body":{"nodeType":"YulBlock","src":"1792:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1809:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1820:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1802:6:181"},"nodeType":"YulFunctionCall","src":"1802:21:181"},"nodeType":"YulExpressionStatement","src":"1802:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1843:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1854:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1839:3:181"},"nodeType":"YulFunctionCall","src":"1839:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1859:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1832:6:181"},"nodeType":"YulFunctionCall","src":"1832:30:181"},"nodeType":"YulExpressionStatement","src":"1832:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1882:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1893:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1878:3:181"},"nodeType":"YulFunctionCall","src":"1878:18:181"},{"hexValue":"656d70747920726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"1898:19:181","type":"","value":"empty rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1871:6:181"},"nodeType":"YulFunctionCall","src":"1871:47:181"},"nodeType":"YulExpressionStatement","src":"1871:47:181"},{"nodeType":"YulAssignment","src":"1927:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1939:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1950:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1935:3:181"},"nodeType":"YulFunctionCall","src":"1935:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1927:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1769:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1783:4:181","type":""}],"src":"1618:341:181"},{"body":{"nodeType":"YulBlock","src":"2121:227:181","statements":[{"nodeType":"YulAssignment","src":"2131:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2143:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2154:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2139:3:181"},"nodeType":"YulFunctionCall","src":"2139:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2131:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"2166:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2184:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2189:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2180:3:181"},"nodeType":"YulFunctionCall","src":"2180:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2193:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2176:3:181"},"nodeType":"YulFunctionCall","src":"2176:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2170:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2211:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2226:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2234:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2222:3:181"},"nodeType":"YulFunctionCall","src":"2222:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2204:6:181"},"nodeType":"YulFunctionCall","src":"2204:34:181"},"nodeType":"YulExpressionStatement","src":"2204:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2258:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2269:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2254:3:181"},"nodeType":"YulFunctionCall","src":"2254:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2278:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2286:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2274:3:181"},"nodeType":"YulFunctionCall","src":"2274:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2247:6:181"},"nodeType":"YulFunctionCall","src":"2247:43:181"},"nodeType":"YulExpressionStatement","src":"2247:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2310:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2321:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2306:3:181"},"nodeType":"YulFunctionCall","src":"2306:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"2330:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2338:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2326:3:181"},"nodeType":"YulFunctionCall","src":"2326:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2299:6:181"},"nodeType":"YulFunctionCall","src":"2299:43:181"},"nodeType":"YulExpressionStatement","src":"2299:43:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2074:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2085:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2093:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2101:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2112:4:181","type":""}],"src":"1964:384:181"},{"body":{"nodeType":"YulBlock","src":"2527:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2544:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2555:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2537:6:181"},"nodeType":"YulFunctionCall","src":"2537:21:181"},"nodeType":"YulExpressionStatement","src":"2537:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2578:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2589:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2574:3:181"},"nodeType":"YulFunctionCall","src":"2574:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2594:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2567:6:181"},"nodeType":"YulFunctionCall","src":"2567:30:181"},"nodeType":"YulExpressionStatement","src":"2567:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2617:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2628:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2613:3:181"},"nodeType":"YulFunctionCall","src":"2613:18:181"},{"hexValue":"2170726f6365737320676173","kind":"string","nodeType":"YulLiteral","src":"2633:14:181","type":"","value":"!process gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2606:6:181"},"nodeType":"YulFunctionCall","src":"2606:42:181"},"nodeType":"YulExpressionStatement","src":"2606:42:181"},{"nodeType":"YulAssignment","src":"2657:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2669:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2680:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2665:3:181"},"nodeType":"YulFunctionCall","src":"2665:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2657:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2504:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2518:4:181","type":""}],"src":"2353:336:181"},{"body":{"nodeType":"YulBlock","src":"2868:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2885:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2896:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2878:6:181"},"nodeType":"YulFunctionCall","src":"2878:21:181"},"nodeType":"YulExpressionStatement","src":"2878:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2919:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2930:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2915:3:181"},"nodeType":"YulFunctionCall","src":"2915:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2935:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2908:6:181"},"nodeType":"YulFunctionCall","src":"2908:30:181"},"nodeType":"YulExpressionStatement","src":"2908:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2958:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2969:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2954:3:181"},"nodeType":"YulFunctionCall","src":"2954:18:181"},{"hexValue":"217265736572766520676173","kind":"string","nodeType":"YulLiteral","src":"2974:14:181","type":"","value":"!reserve gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2947:6:181"},"nodeType":"YulFunctionCall","src":"2947:42:181"},"nodeType":"YulExpressionStatement","src":"2947:42:181"},{"nodeType":"YulAssignment","src":"2998:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3010:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3021:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3006:3:181"},"nodeType":"YulFunctionCall","src":"3006:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2998:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2845:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2859:4:181","type":""}],"src":"2694:336:181"},{"body":{"nodeType":"YulBlock","src":"3209:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3226:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3237:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3219:6:181"},"nodeType":"YulFunctionCall","src":"3219:21:181"},"nodeType":"YulExpressionStatement","src":"3219:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3260:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3271:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3256:3:181"},"nodeType":"YulFunctionCall","src":"3256:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3276:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3249:6:181"},"nodeType":"YulFunctionCall","src":"3249:30:181"},"nodeType":"YulExpressionStatement","src":"3249:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3299:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3310:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3295:3:181"},"nodeType":"YulFunctionCall","src":"3295:18:181"},{"hexValue":"217a65726f206d65726b6c65","kind":"string","nodeType":"YulLiteral","src":"3315:14:181","type":"","value":"!zero merkle"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3288:6:181"},"nodeType":"YulFunctionCall","src":"3288:42:181"},"nodeType":"YulExpressionStatement","src":"3288:42:181"},{"nodeType":"YulAssignment","src":"3339:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3351:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3362:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3347:3:181"},"nodeType":"YulFunctionCall","src":"3347:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3339:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3186:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3200:4:181","type":""}],"src":"3035:336:181"},{"body":{"nodeType":"YulBlock","src":"3505:175:181","statements":[{"nodeType":"YulAssignment","src":"3515:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3527:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3538:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3523:3:181"},"nodeType":"YulFunctionCall","src":"3523:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3515:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"3550:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3568:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3573:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3564:3:181"},"nodeType":"YulFunctionCall","src":"3564:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3577:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3560:3:181"},"nodeType":"YulFunctionCall","src":"3560:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3554:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3595:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3610:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3618:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3606:3:181"},"nodeType":"YulFunctionCall","src":"3606:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3588:6:181"},"nodeType":"YulFunctionCall","src":"3588:34:181"},"nodeType":"YulExpressionStatement","src":"3588:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3642:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3653:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3638:3:181"},"nodeType":"YulFunctionCall","src":"3638:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3662:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3670:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3658:3:181"},"nodeType":"YulFunctionCall","src":"3658:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3631:6:181"},"nodeType":"YulFunctionCall","src":"3631:43:181"},"nodeType":"YulExpressionStatement","src":"3631:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3466:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3477:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3485:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3496:4:181","type":""}],"src":"3376:304:181"}]},"contents":"{\n    { }\n    function abi_decode_uint32_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9\n    {\n        if slt(sub(dataEnd, headStart), 320) { revert(0, 0) }\n        value0 := abi_decode_uint32_fromMemory(headStart)\n        value1 := abi_decode_uint32_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n        value4 := abi_decode_address_fromMemory(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n        value6 := mload(add(headStart, 192))\n        value7 := mload(add(headStart, 224))\n        value8 := abi_decode_address_fromMemory(add(headStart, 256))\n        value9 := abi_decode_address_fromMemory(add(headStart, 288))\n    }\n    function abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"empty domain\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"empty rootManager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!process gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!reserve gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!zero merkle\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"6101606040523480156200001257600080fd5b5060405162003a0138038062003a018339810160408190526200003591620003b0565b89898989898989898989808a8a8a8a8a6200005033620002b0565b8463ffffffff166000036200009b5760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620000e75760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b604482015260640162000092565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e0528116156200011f576200011f8162000315565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a350506003805460ff60a01b191690555050600480546001600160a01b0319166001600160a01b039390931692909217909155506001600755620cf84f8511620001f25760405162461bcd60e51b815260206004820152600c60248201526b2170726f636573732067617360a01b604482015260640162000092565b613a978411620002345760405162461bcd60e51b815260206004820152600c60248201526b21726573657276652067617360a01b604482015260640162000092565b6101208590526101408490526001600160a01b038216620002875760405162461bcd60e51b815260206004820152600c60248201526b217a65726f206d65726b6c6560a01b604482015260640162000092565b506001600160a01b03166101005260085550620004649f50505050505050505050505050505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b805163ffffffff811681146200039357600080fd5b919050565b80516001600160a01b03811681146200039357600080fd5b6000806000806000806000806000806101408b8d031215620003d157600080fd5b620003dc8b6200037e565b9950620003ec60208c016200037e565b9850620003fc60408c0162000398565b97506200040c60608c0162000398565b96506200041c60808c0162000398565b955060a08b0151945060c08b0151935060e08b01519250620004426101008c0162000398565b9150620004536101208c0162000398565b90509295989b9194979a5092959850565b60805160a05160c05160e0516101005161012051610140516134e062000521600039600081816103250152611ddf01526000818161090101528181611e000152611e8d01526000818161072801528181610a7e015281816110c10152611795015260006102b501526000818161055601528181610c2601528181611935015261197a0152600081816108b70152610d3201526000818161049d0152818161066401528181611737015281816119a10152611cdf01526134e06000f3fe6080604052600436106102975760003560e01c80638456cb591161015a578063b95a2001116100c1578063d69f9d611161007a578063d69f9d61146108a5578063d7d317b3146108d9578063d88beda2146108ef578063db1b765914610923578063e0fed01014610943578063fa31de011461096357600080fd5b8063b95a2001146107e0578063c5b350df14610813578063cc39428314610828578063d1851c9214610848578063d232c22014610866578063d2a3cc711461088557600080fd5b8063a01892a511610113578063a01892a514610716578063a792c29b1461074a578063ad9c0c2e1461076a578063b1f8100d14610780578063b2f87643146107a0578063b697f531146107c057600080fd5b80638456cb59146106405780638d3638f4146106555780638da5cb5b1461068857806398c9f2b9146106a65780639d3117c7146106d65780639fa92f9d1461070357600080fd5b806352a9674b116101fe5780636159ada1116101b75780636159ada11461059057806365eaf11b146105c057806368742da6146105d55780636a42b8f8146105f55780636b04a9331461060b578063715018a61461062b57600080fd5b806352a9674b1461048b578063572386ca146104bf578063579c1618146104ef5780635bd11efc146105055780635c975abb146105255780635f61e3ec1461054457600080fd5b80633cf52ffb116102505780633cf52ffb146103e55780633f4ba83a146103fa57806348e6fa231461040f5780634ff746f614610422578063508a109b146104425780635190bc531461046257600080fd5b806314168416146102a35780631eeaabea146102f157806325e3beda146103135780632bb1ae7c146103555780632bbd59ca14610368578063301f07c3146103a557600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b3480156102fd57600080fd5b5061031161030c366004612e67565b610991565b005b34801561031f57600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016102e8565b610311610363366004612f23565b610a3b565b34801561037457600080fd5b50610398610383366004612e67565b600f6020526000908152604090205460ff1681565b6040516102e89190612f6e565b3480156103b157600080fd5b506103d56103c0366004612e67565b600a6020526000908152604090205460ff1681565b60405190151581526020016102e8565b3480156103f157600080fd5b50600254610347565b34801561040657600080fd5b50610311610bde565b61031161041d366004612f96565b610c1b565b34801561042e57600080fd5b5061031161043d366004612f23565b610d27565b34801561044e57600080fd5b5061031161045d366004612ffa565b610dc4565b34801561046e57600080fd5b506103d561047d366004613096565b6001600160a01b0316301490565b34801561049757600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b3480156104cb57600080fd5b506103d56104da366004612e67565b600c6020526000908152604090205460ff1681565b3480156104fb57600080fd5b5061034760055481565b34801561051157600080fd5b50610311610520366004613096565b611086565b34801561053157600080fd5b50600354600160a01b900460ff166103d5565b34801561055057600080fd5b506105787f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102e8565b34801561059c57600080fd5b506103d56105ab366004613096565b600d6020526000908152604090205460ff1681565b3480156105cc57600080fd5b506103476110bd565b3480156105e157600080fd5b506103116105f0366004613096565b611146565b34801561060157600080fd5b5062093a80610347565b34801561061757600080fd5b50610311610626366004612e67565b6111c3565b34801561063757600080fd5b5061031161128e565b34801561064c57600080fd5b506103116112b9565b34801561066157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102d7565b34801561069457600080fd5b506000546001600160a01b0316610578565b3480156106b257600080fd5b506103d56106c1366004612e67565b600b6020526000908152604090205460ff1681565b3480156106e257600080fd5b506103476106f1366004612e67565b60096020526000908152604090205481565b34801561070f57600080fd5b5030610578565b34801561072257600080fd5b506105787f000000000000000000000000000000000000000000000000000000000000000081565b34801561075657600080fd5b50600454610578906001600160a01b031681565b34801561077657600080fd5b5061034760085481565b34801561078c57600080fd5b5061031161079b366004613096565b61136d565b3480156107ac57600080fd5b506103116107bb366004613096565b61140b565b3480156107cc57600080fd5b506103116107db366004613096565b611487565b3480156107ec57600080fd5b506102d76107fb3660046130d8565b600e6020526000908152604090205463ffffffff1681565b34801561081f57600080fd5b50610311611506565b34801561083457600080fd5b50600354610578906001600160a01b031681565b34801561085457600080fd5b506001546001600160a01b0316610578565b34801561087257600080fd5b506000546001600160a01b0316156103d5565b34801561089157600080fd5b506103116108a0366004613096565b611576565b3480156108b157600080fd5b506105787f000000000000000000000000000000000000000000000000000000000000000081565b3480156108e557600080fd5b5061034760065481565b3480156108fb57600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b34801561092f57600080fd5b506103d561093e366004613096565b61164d565b34801561094f57600080fd5b5061031161095e366004612e67565b611662565b34801561096f57600080fd5b5061098361097e3660046130f3565b611696565b6040516102e892919061319a565b6000546001600160a01b031633146109bc576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610a015760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610a43611865565b43600554600654610a5491906131c9565b1115610a73576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afe91906131dc565b6000818152600c602052604090205490915060ff1615610b545760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b60448201526064016109f8565b600081604051602001610b6991815260200190565b6040516020818303038152906040529050610b8481846118b2565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610bd1908390869033906131f5565b60405180910390a1505050565b6000546001600160a01b03163314610c09576040516311a8a1bb60e31b815260040160405180910390fd5b610c11611a29565b610c19611a79565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c825760405162461bcd60e51b815260206004820152600c60248201526b10b937b7ba26b0b730b3b2b960a11b60448201526064016109f8565b805115610cc05760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b60448201526064016109f8565b610cd982604051806020016040528060008152506118b2565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e9355077826040518060200160405280600081525033604051610d1b939291906131f5565b60405180910390a15050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d885760405162461bcd60e51b81526004016109f89060208082526004908201526310a0a6a160e11b604082015260600190565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610db9929190613233565b60405180910390a150565b610dcc611865565b610dd4611ace565b83610e0b5760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b60448201526064016109f8565b600085856000818110610e2057610e2061325d565b9050602002810190610e329190613273565b610e3c9080613294565b604051610e4a9291906132e2565b604051809103902090506000610eb18288886000818110610e6d57610e6d61325d565b9050602002810190610e7f9190613273565b60200189896000818110610e9557610e9561325d565b9050602002810190610ea79190613273565b6104200135611b27565b9050610ebf81868686611bce565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610fe55788888263ffffffff16818110610f0457610f0461325d565b9050602002810190610f169190613273565b610f209080613294565b604051610f2e9291906132e2565b604051809103902093506000610f83858b8b8563ffffffff16818110610f5657610f5661325d565b9050602002810190610f689190613273565b6020018c8c8663ffffffff16818110610e9557610e9561325d565b9050838114610fc25760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b60448201526064016109f8565b506000848152600f60205260409020805460ff1916600190811790915501610ede565b5060005b818163ffffffff1610156110715761106889898363ffffffff168181106110125761101261325d565b90506020028101906110249190613273565b61102e9080613294565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cc992505050565b50600101610fe9565b5050505061107f6001600755565b5050505050565b6000546001600160a01b031633146110b1576040516311a8a1bb60e31b815260040160405180910390fd5b6110ba81611fa6565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114191906131dc565b905090565b6000546001600160a01b03163314611171576040516311a8a1bb60e31b815260040160405180910390fd5b4761117c828261200f565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d826040516111b791815260200190565b60405180910390a25050565b6000546001600160a01b031633146111ee576040516311a8a1bb60e31b815260040160405180910390fd5b6111f6611a29565b600081815260096020526040812054900361124b5760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b60448201526064016109f8565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610db99083815260200190565b6000546001600160a01b03163314610c19576040516311a8a1bb60e31b815260040160405180910390fd5b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa158015611302573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132691906132f2565b61135d5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b60448201526064016109f8565b611365611865565b610c1961212d565b6000546001600160a01b03163314611398576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b0382811691161480156113b6575060025415155b156113d4576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361140257604051634a2fb73f60e11b815260040160405180910390fd5b6110ba81612170565b6000546001600160a01b03163314611436576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610db9565b6000546001600160a01b031633146114b2576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610db9565b6001546001600160a01b03163314611531576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426115439190613314565b11611561576040516324e0285f60e21b815260040160405180910390fd5b600154610c19906001600160a01b03166121be565b6000546001600160a01b031633146115a1576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b03908116908216036115ff5760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e6167657200000000000000000060448201526064016109f8565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610db9565b60006001600160a01b03821633145b92915050565b6000546001600160a01b0316331461168d576040516311a8a1bb60e31b815260040160405180910390fd5b6110ba81612223565b336000908152600d602052604081205460609060ff166116e75760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b60448201526064016109f8565b63ffffffff8086166000908152600e602052604081208054919291909116908261171083613327565b91906101000a81548163ffffffff021916908363ffffffff1602179055509050600061176f7f0000000000000000000000000000000000000000000000000000000000000000611766336001600160a01b031690565b848a8a8a6122a1565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af11580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061334a565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f8361183b600184613314565b848760405161184d949392919061336e565b60405180910390a15090989197509095505050505050565b600354600160a01b900460ff1615610c195760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016109f8565b8051156118f05760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b60448201526064016109f8565b815160201461192b5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b60448201526064016109f8565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036119705761196c6119678361339d565b6122d9565b5050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016638e7d93fa7f00000000000000000000000000000000000000000000000000000000000000006119c98561339d565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526024820152604401600060405180830381600087803b158015611a0d57600080fd5b505af1158015611a21573d6000803e3d6000fd5b505050505050565b600354600160a01b900460ff16610c195760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016109f8565b611a81611a29565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600260075403611b205760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109f8565b6002600755565b6000806000858152600f602052604090205460ff166002811115611b4d57611b4d612f58565b14611b905760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b60448201526064016109f8565b611bc48484602080602002604051908101604052809291908260208002808284376000920191909152508691506124029050565b90505b9392505050565b6000848152600b602052604090205460ff16611cc357611bed83612750565b6000611c238584602080602002604051908101604052809291908260208002808284376000920191909152508691506124029050565b9050838114611c6a5760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b60448201526064016109f8565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611cb99086815260200190565b60405180910390a3505b50505050565b600080611cd683826128b0565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611d0e62ffffff1983166128d4565b63ffffffff1614611d505760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b60448201526064016109f8565b6000611d6162ffffff1983166128e9565b905060016000828152600f602052604090205460ff166002811115611d8857611d88612f58565b14611dbf5760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b60448201526064016109f8565b6000818152600f60205260409020805460ff191660021790556001611e247f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006131c9565b611e2e9190613314565b5a11611e655760405162461bcd60e51b81526004016109f8906020808252600490820152632167617360e01b604082015260600190565b6000611e7662ffffff198416612932565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611ed162ffffff198816612943565b611ee062ffffff198916612957565b611eef62ffffff198a1661296c565b611f0c611f0162ffffff198c16612981565b62ffffff19166129af565b604051602401611f1f94939291906133c4565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050611f598585600086856129f8565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890611f929088908b9086906133f3565b60405180910390a150505050505050919050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b8047101561205f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109f8565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146120ac576040519150601f19603f3d011682016040523d82523d6000602084013e6120b1565b606091505b50509050806121285760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016109f8565b505050565b612135611865565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611ab13390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60055481036122665760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b60448201526064016109f8565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610db9565b60608686868686866040516020016122be96959493929190613414565b60405160208183030381529060405290509695505050505050565b806123175760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b60448201526064016109f8565b6000818152600960205260409020541561236a5760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b60448201526064016109f8565b6000818152600a602052604090205460ff16156123bf5760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b60448201526064016109f8565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610db99083815260200190565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b806127935760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b60448201526064016109f8565b6000818152600a602052604090205460ff16156127ad5750565b600081815260096020526040812054908190036128035760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b60448201526064016109f8565b6008546128108243613314565b101561285e5760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f742021766572696669656400000000000000000060448201526064016109f8565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b8151600090602084016128cb64ffffffffff85168284612a83565b95945050505050565b600061165c62ffffff19831660286004612ac0565b6000806128ff8360781c6001600160601b031690565b6001600160601b03169050600061291f8460181c6001600160601b031690565b6001600160601b03169091209392505050565b600061165c61294083612af0565b90565b600061165c62ffffff198316826004612ac0565b600061165c62ffffff19831660246004612ac0565b600061165c62ffffff19831660046020612b01565b600061165c604c61299f81601886901c6001600160601b0316613314565b62ffffff19851691906000612c0c565b60606000806129c78460181c6001600160601b031690565b6001600160601b0316905060405191508192506129e78483602001612c88565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff811115612a1e57612a1e612e80565b6040519080825280601f01601f191660200182016040528015612a48576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612a69578692505b828152826000602083013e90999098509650505050505050565b600080612a9083856131c9565b9050604051811115612aa0575060005b80600003612ab55762ffffff19915050611bc7565b6128cb858585612d7b565b6000612acd82602061346e565b612ad8906008613487565b60ff16612ae6858585612b01565b901c949350505050565b600061165c62ffffff198316602c60205b60008160ff16600003612b1657506000611bc7565b612b298460181c6001600160601b031690565b6001600160601b0316612b3f60ff8416856131c9565b1115612ba757612b588460781c6001600160601b031690565b612b6b8560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff831660648201526084016109f8565b60208260ff161115612bcc5760405163045df3f960e01b815260040160405180910390fd5b600882026000612be58660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612c228660781c6001600160601b031690565b6001600160601b03169050612c3686612df2565b84612c4187846131c9565b612c4b91906131c9565b1115612c5e5762ffffff19915050612c80565b612c6885826131c9565b9050612c7c8364ffffffffff168286612a83565b9150505b949350505050565b600062ffffff1980841603612cb05760405163148d513360e21b815260040160405180910390fd5b612cb983612e2b565b15612cd757604051632ee0949160e11b815260040160405180910390fd5b6000612cec8460181c6001600160601b031690565b6001600160601b031690506000612d0c8560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115612d2d5760206060fd5b8386858560045afa905080612d5557604051632af1bd9b60e21b815260040160405180910390fd5b612d70612d628860d81c90565b64ffffffffff168786612d7b565b979650505050505050565b60006060601883856001600160601b03821682148015612da3575086816001600160601b0316145b612ddc5760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b60448201526064016109f8565b96831b90961790911b90941790931b9392505050565b6000612e078260181c6001600160601b031690565b612e1a8360781c6001600160601b031690565b016001600160601b03169050919050565b6000612e378260d81c90565b64ffffffffff1664ffffffffff03612e5157506001919050565b6000612e5c83612df2565b604051109392505050565b600060208284031215612e7957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612ea757600080fd5b813567ffffffffffffffff80821115612ec257612ec2612e80565b604051601f8301601f19908116603f01168101908282118183101715612eea57612eea612e80565b81604052838152866020858801011115612f0357600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215612f3557600080fd5b813567ffffffffffffffff811115612f4c57600080fd5b612c8084828501612e96565b634e487b7160e01b600052602160045260246000fd5b6020810160038310612f9057634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215612fa957600080fd5b823567ffffffffffffffff80821115612fc157600080fd5b612fcd86838701612e96565b93506020850135915080821115612fe357600080fd5b50612ff085828601612e96565b9150509250929050565b6000806000806000610460868803121561301357600080fd5b853567ffffffffffffffff8082111561302b57600080fd5b818801915088601f83011261303f57600080fd5b81358181111561304e57600080fd5b8960208260051b850101111561306357600080fd5b60209283019750955050860135925061044086018781111561308457600080fd5b94979396509194604001933592915050565b6000602082840312156130a857600080fd5b81356001600160a01b0381168114611bc757600080fd5b803563ffffffff811681146130d357600080fd5b919050565b6000602082840312156130ea57600080fd5b611bc7826130bf565b60008060006060848603121561310857600080fd5b613111846130bf565b925060208401359150604084013567ffffffffffffffff81111561313457600080fd5b61314086828701612e96565b9150509250925092565b60005b8381101561316557818101518382015260200161314d565b50506000910152565b6000815180845261318681602086016020860161314a565b601f01601f19169290920160200192915050565b828152604060208201526000611bc4604083018461316e565b634e487b7160e01b600052601160045260246000fd5b8082018082111561165c5761165c6131b3565b6000602082840312156131ee57600080fd5b5051919050565b606081526000613208606083018661316e565b828103602084015261321a818661316e565b91505060018060a01b0383166040830152949350505050565b604081526000613246604083018561316e565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e1983360301811261328a57600080fd5b9190910192915050565b6000808335601e198436030181126132ab57600080fd5b83018035915067ffffffffffffffff8211156132c657600080fd5b6020019150368190038213156132db57600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561330457600080fd5b81518015158114611bc757600080fd5b8181038181111561165c5761165c6131b3565b600063ffffffff808316818103613340576133406131b3565b6001019392505050565b6000806040838503121561335d57600080fd5b505080516020909101519092909150565b848152836020820152826040820152608060608201526000613393608083018461316e565b9695505050505050565b805160208083015191908110156133be576000198160200360031b1b821691505b50919050565b600063ffffffff808716835280861660208401525083604083015260806060830152613393608083018461316e565b83815282151560208201526060604082015260006128cb606083018461316e565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c830152825161345c81604c85016020870161314a565b91909101604c01979650505050505050565b60ff828116828216039081111561165c5761165c6131b3565b60ff81811683821602908116908181146134a3576134a36131b3565b509291505056fea2646970667358221220e0669f9973a9eb5780a17d59e6576a6d930c4941bd9d7e7e61efd12671c7938f64736f6c63430008110033","opcodes":"PUSH2 0x160 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x3A01 CODESIZE SUB DUP1 PUSH3 0x3A01 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x3B0 JUMP JUMPDEST DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP1 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH3 0x50 CALLER PUSH3 0x2B0 JUMP JUMPDEST DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0x0 SUB PUSH3 0x9B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x32B6B83A3C903237B6B0B4B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xE7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x32B6B83A3C903937B7BA26B0B730B3B2B9 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x92 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0xA0 MSTORE DUP4 DUP2 AND PUSH1 0xC0 MSTORE SWAP1 DUP6 AND PUSH1 0xE0 MSTORE DUP2 AND ISZERO PUSH3 0x11F JUMPI PUSH3 0x11F DUP2 PUSH3 0x315 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH4 0xFFFFFFFF DUP7 DUP2 AND SWAP3 SWAP1 DUP9 AND SWAP2 PUSH32 0x4F9C27C2FE3F84576EA469D367D044DA53C45E951617E8389F2B5ED8DB9D25F0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE POP PUSH1 0x1 PUSH1 0x7 SSTORE PUSH3 0xCF84F DUP6 GT PUSH3 0x1F2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2170726F6365737320676173 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x92 JUMP JUMPDEST PUSH2 0x3A97 DUP5 GT PUSH3 0x234 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x217265736572766520676173 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x92 JUMP JUMPDEST PUSH2 0x120 DUP6 SWAP1 MSTORE PUSH2 0x140 DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0x287 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x217A65726F206D65726B6C65 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x92 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x100 MSTORE PUSH1 0x8 SSTORE POP PUSH3 0x464 SWAP16 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH3 0x393 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x393 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x140 DUP12 DUP14 SUB SLT ISZERO PUSH3 0x3D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x3DC DUP12 PUSH3 0x37E JUMP JUMPDEST SWAP10 POP PUSH3 0x3EC PUSH1 0x20 DUP13 ADD PUSH3 0x37E JUMP JUMPDEST SWAP9 POP PUSH3 0x3FC PUSH1 0x40 DUP13 ADD PUSH3 0x398 JUMP JUMPDEST SWAP8 POP PUSH3 0x40C PUSH1 0x60 DUP13 ADD PUSH3 0x398 JUMP JUMPDEST SWAP7 POP PUSH3 0x41C PUSH1 0x80 DUP13 ADD PUSH3 0x398 JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD MLOAD SWAP5 POP PUSH1 0xC0 DUP12 ADD MLOAD SWAP4 POP PUSH1 0xE0 DUP12 ADD MLOAD SWAP3 POP PUSH3 0x442 PUSH2 0x100 DUP13 ADD PUSH3 0x398 JUMP JUMPDEST SWAP2 POP PUSH3 0x453 PUSH2 0x120 DUP13 ADD PUSH3 0x398 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP2 SWAP5 SWAP8 SWAP11 POP SWAP3 SWAP6 SWAP9 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x34E0 PUSH3 0x521 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x325 ADD MSTORE PUSH2 0x1DDF ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x901 ADD MSTORE DUP2 DUP2 PUSH2 0x1E00 ADD MSTORE PUSH2 0x1E8D ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x728 ADD MSTORE DUP2 DUP2 PUSH2 0xA7E ADD MSTORE DUP2 DUP2 PUSH2 0x10C1 ADD MSTORE PUSH2 0x1795 ADD MSTORE PUSH1 0x0 PUSH2 0x2B5 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x556 ADD MSTORE DUP2 DUP2 PUSH2 0xC26 ADD MSTORE DUP2 DUP2 PUSH2 0x1935 ADD MSTORE PUSH2 0x197A ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x8B7 ADD MSTORE PUSH2 0xD32 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x49D ADD MSTORE DUP2 DUP2 PUSH2 0x664 ADD MSTORE DUP2 DUP2 PUSH2 0x1737 ADD MSTORE DUP2 DUP2 PUSH2 0x19A1 ADD MSTORE PUSH2 0x1CDF ADD MSTORE PUSH2 0x34E0 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x297 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x15A JUMPI DUP1 PUSH4 0xB95A2001 GT PUSH2 0xC1 JUMPI DUP1 PUSH4 0xD69F9D61 GT PUSH2 0x7A JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x8A5 JUMPI DUP1 PUSH4 0xD7D317B3 EQ PUSH2 0x8D9 JUMPI DUP1 PUSH4 0xD88BEDA2 EQ PUSH2 0x8EF JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x923 JUMPI DUP1 PUSH4 0xE0FED010 EQ PUSH2 0x943 JUMPI DUP1 PUSH4 0xFA31DE01 EQ PUSH2 0x963 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB95A2001 EQ PUSH2 0x7E0 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x813 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x828 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x848 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x866 JUMPI DUP1 PUSH4 0xD2A3CC71 EQ PUSH2 0x885 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA01892A5 GT PUSH2 0x113 JUMPI DUP1 PUSH4 0xA01892A5 EQ PUSH2 0x716 JUMPI DUP1 PUSH4 0xA792C29B EQ PUSH2 0x74A JUMPI DUP1 PUSH4 0xAD9C0C2E EQ PUSH2 0x76A JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x780 JUMPI DUP1 PUSH4 0xB2F87643 EQ PUSH2 0x7A0 JUMPI DUP1 PUSH4 0xB697F531 EQ PUSH2 0x7C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x640 JUMPI DUP1 PUSH4 0x8D3638F4 EQ PUSH2 0x655 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x688 JUMPI DUP1 PUSH4 0x98C9F2B9 EQ PUSH2 0x6A6 JUMPI DUP1 PUSH4 0x9D3117C7 EQ PUSH2 0x6D6 JUMPI DUP1 PUSH4 0x9FA92F9D EQ PUSH2 0x703 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B GT PUSH2 0x1FE JUMPI DUP1 PUSH4 0x6159ADA1 GT PUSH2 0x1B7 JUMPI DUP1 PUSH4 0x6159ADA1 EQ PUSH2 0x590 JUMPI DUP1 PUSH4 0x65EAF11B EQ PUSH2 0x5C0 JUMPI DUP1 PUSH4 0x68742DA6 EQ PUSH2 0x5D5 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x5F5 JUMPI DUP1 PUSH4 0x6B04A933 EQ PUSH2 0x60B JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x62B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B EQ PUSH2 0x48B JUMPI DUP1 PUSH4 0x572386CA EQ PUSH2 0x4BF JUMPI DUP1 PUSH4 0x579C1618 EQ PUSH2 0x4EF JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x505 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x525 JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x544 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3CF52FFB GT PUSH2 0x250 JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x3E5 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x3FA JUMPI DUP1 PUSH4 0x48E6FA23 EQ PUSH2 0x40F JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x422 JUMPI DUP1 PUSH4 0x508A109B EQ PUSH2 0x442 JUMPI DUP1 PUSH4 0x5190BC53 EQ PUSH2 0x462 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x2A3 JUMPI DUP1 PUSH4 0x1EEAABEA EQ PUSH2 0x2F1 JUMPI DUP1 PUSH4 0x25E3BEDA EQ PUSH2 0x313 JUMPI DUP1 PUSH4 0x2BB1AE7C EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0x2BBD59CA EQ PUSH2 0x368 JUMPI DUP1 PUSH4 0x301F07C3 EQ PUSH2 0x3A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x29E JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D7 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x30C CALLDATASIZE PUSH1 0x4 PUSH2 0x2E67 JUMP JUMPDEST PUSH2 0x991 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x31F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E8 JUMP JUMPDEST PUSH2 0x311 PUSH2 0x363 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F23 JUMP JUMPDEST PUSH2 0xA3B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x398 PUSH2 0x383 CALLDATASIZE PUSH1 0x4 PUSH2 0x2E67 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2E8 SWAP2 SWAP1 PUSH2 0x2F6E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x3C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2E67 JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x347 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x406 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0xBDE JUMP JUMPDEST PUSH2 0x311 PUSH2 0x41D CALLDATASIZE PUSH1 0x4 PUSH2 0x2F96 JUMP JUMPDEST PUSH2 0xC1B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x43D CALLDATASIZE PUSH1 0x4 PUSH2 0x2F23 JUMP JUMPDEST PUSH2 0xD27 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x44E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x45D CALLDATASIZE PUSH1 0x4 PUSH2 0x2FFA JUMP JUMPDEST PUSH2 0xDC4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x46E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x47D CALLDATASIZE PUSH1 0x4 PUSH2 0x3096 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x497 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D7 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x4DA CALLDATASIZE PUSH1 0x4 PUSH2 0x2E67 JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x511 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x520 CALLDATASIZE PUSH1 0x4 PUSH2 0x3096 JUMP JUMPDEST PUSH2 0x1086 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x531 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3D5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x550 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x578 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x59C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x5AB CALLDATASIZE PUSH1 0x4 PUSH2 0x3096 JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x10BD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x5F0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3096 JUMP JUMPDEST PUSH2 0x1146 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x601 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x347 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x617 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x626 CALLDATASIZE PUSH1 0x4 PUSH2 0x2E67 JUMP JUMPDEST PUSH2 0x11C3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x637 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x128E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x64C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x12B9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x661 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x0 PUSH2 0x2D7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x694 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x578 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x6C1 CALLDATASIZE PUSH1 0x4 PUSH2 0x2E67 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x6F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x2E67 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH2 0x578 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x722 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x578 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x756 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x578 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x78C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x79B CALLDATASIZE PUSH1 0x4 PUSH2 0x3096 JUMP JUMPDEST PUSH2 0x136D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x7BB CALLDATASIZE PUSH1 0x4 PUSH2 0x3096 JUMP JUMPDEST PUSH2 0x140B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x7DB CALLDATASIZE PUSH1 0x4 PUSH2 0x3096 JUMP JUMPDEST PUSH2 0x1487 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D7 PUSH2 0x7FB CALLDATASIZE PUSH1 0x4 PUSH2 0x30D8 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x81F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x1506 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x834 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x578 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x854 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x578 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x872 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x3D5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x891 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x8A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3096 JUMP JUMPDEST PUSH2 0x1576 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x578 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x92F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x93E CALLDATASIZE PUSH1 0x4 PUSH2 0x3096 JUMP JUMPDEST PUSH2 0x164D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x94F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x95E CALLDATASIZE PUSH1 0x4 PUSH2 0x2E67 JUMP JUMPDEST PUSH2 0x1662 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x96F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x983 PUSH2 0x97E CALLDATASIZE PUSH1 0x4 PUSH2 0x30F3 JUMP JUMPDEST PUSH2 0x1696 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2E8 SWAP3 SWAP2 SWAP1 PUSH2 0x319A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9BC JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD DUP2 SUB PUSH2 0xA01 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2164656C6179426C6F636B73 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLER DUP2 MSTORE DUP2 SWAP1 PUSH32 0x8BD16320F3B60336ED5FD2A770EB7453E7E71CFEF4462ADDFFD7AE9DFE201C8E SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x8 SSTORE JUMP JUMPDEST PUSH2 0xA43 PUSH2 0x1865 JUMP JUMPDEST NUMBER PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD PUSH2 0xA54 SWAP2 SWAP1 PUSH2 0x31C9 JUMP JUMPDEST GT ISZERO PUSH2 0xA73 JUMPI PUSH1 0x40 MLOAD PUSH4 0x46CF2AF1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST NUMBER PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xADA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAFE SWAP2 SWAP1 PUSH2 0x31DC JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xB54 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1C9BDBDD08185B1C9958591E481CD95B9D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xB69 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH2 0xB84 DUP2 DUP5 PUSH2 0x18B2 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 SWAP1 PUSH2 0xBD1 SWAP1 DUP4 SWAP1 DUP7 SWAP1 CALLER SWAP1 PUSH2 0x31F5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC09 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC11 PUSH2 0x1A29 JUMP JUMPDEST PUSH2 0xC19 PUSH2 0x1A79 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xC82 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B937B7BA26B0B730B3B2B9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xCC0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH2 0xCD9 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x18B2 JUMP JUMPDEST PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP CALLER PUSH1 0x40 MLOAD PUSH2 0xD1B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x31F5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xD88 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9F8 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0xDB9 SWAP3 SWAP2 SWAP1 PUSH2 0x3233 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xDCC PUSH2 0x1865 JUMP JUMPDEST PUSH2 0xDD4 PUSH2 0x1ACE JUMP JUMPDEST DUP4 PUSH2 0xE0B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x2170726F6F6673 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xE20 JUMPI PUSH2 0xE20 PUSH2 0x325D JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE32 SWAP2 SWAP1 PUSH2 0x3273 JUMP JUMPDEST PUSH2 0xE3C SWAP1 DUP1 PUSH2 0x3294 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE4A SWAP3 SWAP2 SWAP1 PUSH2 0x32E2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xEB1 DUP3 DUP9 DUP9 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xE6D JUMPI PUSH2 0xE6D PUSH2 0x325D JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE7F SWAP2 SWAP1 PUSH2 0x3273 JUMP JUMPDEST PUSH1 0x20 ADD DUP10 DUP10 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xE95 JUMPI PUSH2 0xE95 PUSH2 0x325D JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xEA7 SWAP2 SWAP1 PUSH2 0x3273 JUMP JUMPDEST PUSH2 0x420 ADD CALLDATALOAD PUSH2 0x1B27 JUMP JUMPDEST SWAP1 POP PUSH2 0xEBF DUP2 DUP7 DUP7 DUP7 PUSH2 0x1BCE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP7 SWAP1 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xFE5 JUMPI DUP9 DUP9 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xF04 JUMPI PUSH2 0xF04 PUSH2 0x325D JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xF16 SWAP2 SWAP1 PUSH2 0x3273 JUMP JUMPDEST PUSH2 0xF20 SWAP1 DUP1 PUSH2 0x3294 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF2E SWAP3 SWAP2 SWAP1 PUSH2 0x32E2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP4 POP PUSH1 0x0 PUSH2 0xF83 DUP6 DUP12 DUP12 DUP6 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xF56 JUMPI PUSH2 0xF56 PUSH2 0x325D JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xF68 SWAP2 SWAP1 PUSH2 0x3273 JUMP JUMPDEST PUSH1 0x20 ADD DUP13 DUP13 DUP7 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xE95 JUMPI PUSH2 0xE95 PUSH2 0x325D JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0xFC2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x85CDA185C9959149BDBDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE ADD PUSH2 0xEDE JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0x1071 JUMPI PUSH2 0x1068 DUP10 DUP10 DUP4 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0x1012 JUMPI PUSH2 0x1012 PUSH2 0x325D JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x1024 SWAP2 SWAP1 PUSH2 0x3273 JUMP JUMPDEST PUSH2 0x102E SWAP1 DUP1 PUSH2 0x3294 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1CC9 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xFE9 JUMP JUMPDEST POP POP POP POP PUSH2 0x107F PUSH1 0x1 PUSH1 0x7 SSTORE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10B1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x10BA DUP2 PUSH2 0x1FA6 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x111D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1141 SWAP2 SWAP1 PUSH2 0x31DC JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1171 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SELFBALANCE PUSH2 0x117C DUP3 DUP3 PUSH2 0x200F JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEAFF4B37086828766AD3268786972C0CD24259D4C87A80F9D3963A3C3D999B0D DUP3 PUSH1 0x40 MLOAD PUSH2 0x11B7 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x11EE JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x11F6 PUSH2 0x1A29 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SUB PUSH2 0x124B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x616767726567617465526F6F742021657869737473 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xF51534ECF10A58DB36CE4F5180F59DEDDF3B3EB7C5E7454E602C2F80A40CC739 SWAP1 PUSH2 0xDB9 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC19 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1302 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1326 SWAP2 SWAP1 PUSH2 0x32F2 JUMP JUMPDEST PUSH2 0x135D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH2 0x1365 PUSH2 0x1865 JUMP JUMPDEST PUSH2 0xC19 PUSH2 0x212D JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1398 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x13B6 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x13D4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x1402 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x10BA DUP2 PUSH2 0x2170 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1436 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x384859C5EF5FAFAC31E8BC92CE7FB48B1F2C74C4DD5E212EB84EC202FA5D9FAD SWAP2 ADD PUSH2 0xDB9 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x14B2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xD65ECA5D561D3A4568C87B9B13CED4AB52A69EDADFDFDB22D76BC595F36D7D87 SWAP2 ADD PUSH2 0xDB9 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1531 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x1543 SWAP2 SWAP1 PUSH2 0x3314 JUMP JUMPDEST GT PUSH2 0x1561 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0xC19 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x21BE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x15A1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0x15FF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616C72656164792077617463686572206D616E61676572000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC16D059E43D7F8E29CCB4E001A2F249D3C59E274925D6A6BC3912943441D9F6C SWAP1 PUSH1 0x20 ADD PUSH2 0xDB9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND CALLER EQ JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x168D JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x10BA DUP2 PUSH2 0x2223 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x60 SWAP1 PUSH1 0xFF AND PUSH2 0x16E7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x8585B1B1BDDDB1A5CDD1959 PUSH1 0xA2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP3 PUSH2 0x1710 DUP4 PUSH2 0x3327 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH4 0xFFFFFFFF AND MUL OR SWAP1 SSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0x176F PUSH32 0x0 PUSH2 0x1766 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP5 DUP11 DUP11 DUP11 PUSH2 0x22A1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH4 0x2D287E43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2D287E43 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x17E5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1809 SWAP2 SWAP1 PUSH2 0x334A JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH32 0x40F08EE347FC927AE45902EDC87DEBB024AAB1A311943731968607F603F2152F DUP4 PUSH2 0x183B PUSH1 0x1 DUP5 PUSH2 0x3314 JUMP JUMPDEST DUP5 DUP8 PUSH1 0x40 MLOAD PUSH2 0x184D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x336E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP SWAP1 SWAP9 SWAP2 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xC19 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x18F0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x192B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x1970 JUMPI PUSH2 0x196C PUSH2 0x1967 DUP4 PUSH2 0x339D JUMP JUMPDEST PUSH2 0x22D9 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH4 0x8E7D93FA PUSH32 0x0 PUSH2 0x19C9 DUP6 PUSH2 0x339D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1A21 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xC19 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH2 0x1A81 PUSH2 0x1A29 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SLOAD SUB PUSH2 0x1B20 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1B4D JUMPI PUSH2 0x1B4D PUSH2 0x2F58 JUMP JUMPDEST EQ PUSH2 0x1B90 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x214D6573736167655374617475732E4E6F6E65 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH2 0x1BC4 DUP5 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x2402 SWAP1 POP JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1CC3 JUMPI PUSH2 0x1BED DUP4 PUSH2 0x2750 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C23 DUP6 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x2402 SWAP1 POP JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0x1C6A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1A5B9D985B1A59081A5B989BDD5B99149BDBDD PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP5 SWAP1 DUP7 SWAP1 PUSH32 0x7EC1EA51FE3DB53E55ED9D922854BC2156F467FF2F87D74E2086DAE2C84A88A8 SWAP1 PUSH2 0x1CB9 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1CD6 DUP4 DUP3 PUSH2 0x28B0 JUMP JUMPDEST SWAP1 POP PUSH4 0xFFFFFFFF PUSH32 0x0 AND PUSH2 0x1D0E PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x28D4 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x1D50 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B232B9BA34B730BA34B7B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D61 PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x28E9 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1D88 JUMPI PUSH2 0x1D88 PUSH2 0x2F58 JUMP JUMPDEST EQ PUSH2 0x1DBF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x10B83937BB32B7 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x2 OR SWAP1 SSTORE PUSH1 0x1 PUSH2 0x1E24 PUSH32 0x0 PUSH32 0x0 PUSH2 0x31C9 JUMP JUMPDEST PUSH2 0x1E2E SWAP2 SWAP1 PUSH2 0x3314 JUMP JUMPDEST GAS GT PUSH2 0x1E65 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9F8 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x21676173 PUSH1 0xE0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E76 PUSH3 0xFFFFFF NOT DUP5 AND PUSH2 0x2932 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH32 0x0 SWAP2 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x1ED1 PUSH3 0xFFFFFF NOT DUP9 AND PUSH2 0x2943 JUMP JUMPDEST PUSH2 0x1EE0 PUSH3 0xFFFFFF NOT DUP10 AND PUSH2 0x2957 JUMP JUMPDEST PUSH2 0x1EEF PUSH3 0xFFFFFF NOT DUP11 AND PUSH2 0x296C JUMP JUMPDEST PUSH2 0x1F0C PUSH2 0x1F01 PUSH3 0xFFFFFF NOT DUP13 AND PUSH2 0x2981 JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND PUSH2 0x29AF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1F1F SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x33C4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xAB2DC3F5 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 POP PUSH2 0x1F59 DUP6 DUP6 PUSH1 0x0 DUP7 DUP6 PUSH2 0x29F8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP10 POP SWAP3 POP PUSH32 0xD42DE95A9B26F1BE134C8ECCE389DC4FCFA18753D01661B7B361233569E8FE48 SWAP1 PUSH2 0x1F92 SWAP1 DUP9 SWAP1 DUP12 SWAP1 DUP7 SWAP1 PUSH2 0x33F3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x205F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x20AC JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x20B1 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2128 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x9F8 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x2135 PUSH2 0x1865 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1AB1 CALLER SWAP1 JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 SUB PUSH2 0x2266 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x85B995DC81C985D19481B1A5B5A5D PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0x8E7FA5E406CB856AAB05575E45EA011C6748376CC1B5229E3D67B92986406A15 SWAP2 ADD PUSH2 0xDB9 JUMP JUMPDEST PUSH1 0x60 DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x22BE SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3414 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x2317 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x6E657720726F6F7420656D707479 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x236A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x726F6F7420616C72656164792070656E64696E67 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x23BF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x3937B7BA1030B63932B0B23C90383937BB32B7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 NUMBER SWAP1 SSTORE MLOAD PUSH32 0x84EF18531155AFDB0E64FF905D67044AE3AAC63A6FBA4661CFD9C4C14F289BC8 SWAP1 PUSH2 0xDB9 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x5 DUP3 DUP2 SHL DUP3 AND SWAP5 DUP6 MSTORE DUP4 MLOAD SWAP5 DUP3 SUB SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x40 PUSH1 0x0 DUP2 DUP2 KECCAK256 PUSH1 0x2 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x4 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP3 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x8 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x10 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 DUP5 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 DUP4 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 SWAP1 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xE0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x100 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x200 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x120 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x400 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x140 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x800 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x160 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x1000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x2000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x4000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1C0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x8000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1E0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH3 0x10000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x20000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x220 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x40000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x240 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x80000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x260 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x100000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x280 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x200000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x400000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x800000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2E0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x1000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x300 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x2000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x320 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x4000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x340 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x8000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x360 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x10000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x380 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x20000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x40000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x80000000 SWAP1 SWAP5 AND ISZERO SWAP1 SWAP6 SHL SWAP2 DUP3 SWAP1 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x3E0 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x2793 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x616767726567617465526F6F7420656D707479 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x27AD JUMPI POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x2803 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x1859D9DC9959D85D19549BDBDD0808595E1A5CDD PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x2810 DUP3 NUMBER PUSH2 0x3314 JUMP JUMPDEST LT ISZERO PUSH2 0x285E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616767726567617465526F6F7420217665726966696564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP4 SWAP2 PUSH32 0x36B314ABA9F663B4D3EF3288AE489341CC5E6A2725A05FA2B72DF7A27E03F42A SWAP2 LOG2 POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0x28CB PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x2A83 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x165C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x28 PUSH1 0x4 PUSH2 0x2AC0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x28FF DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x291F DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 SWAP2 KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x165C PUSH2 0x2940 DUP4 PUSH2 0x2AF0 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x165C PUSH3 0xFFFFFF NOT DUP4 AND DUP3 PUSH1 0x4 PUSH2 0x2AC0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x165C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x24 PUSH1 0x4 PUSH2 0x2AC0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x165C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x4 PUSH1 0x20 PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x165C PUSH1 0x4C PUSH2 0x299F DUP2 PUSH1 0x18 DUP7 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x3314 JUMP JUMPDEST PUSH3 0xFFFFFF NOT DUP6 AND SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2C0C JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x29C7 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x40 MLOAD SWAP2 POP DUP2 SWAP3 POP PUSH2 0x29E7 DUP5 DUP4 PUSH1 0x20 ADD PUSH2 0x2C88 JUMP JUMPDEST POP DUP2 DUP2 ADD PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH2 0xFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2A1E JUMPI PUSH2 0x2A1E PUSH2 0x2E80 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2A48 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP8 MLOAD PUSH1 0x20 DUP10 ADD DUP12 DUP15 DUP15 CALL SWAP2 POP RETURNDATASIZE SWAP3 POP DUP7 DUP4 GT ISZERO PUSH2 0x2A69 JUMPI DUP7 SWAP3 POP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2A90 DUP4 DUP6 PUSH2 0x31C9 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x2AA0 JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x2AB5 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x1BC7 JUMP JUMPDEST PUSH2 0x28CB DUP6 DUP6 DUP6 PUSH2 0x2D7B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2ACD DUP3 PUSH1 0x20 PUSH2 0x346E JUMP JUMPDEST PUSH2 0x2AD8 SWAP1 PUSH1 0x8 PUSH2 0x3487 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x2AE6 DUP6 DUP6 DUP6 PUSH2 0x2B01 JUMP JUMPDEST SWAP1 SHR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x165C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x2C PUSH1 0x20 JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0x2B16 JUMPI POP PUSH1 0x0 PUSH2 0x1BC7 JUMP JUMPDEST PUSH2 0x2B29 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x2B3F PUSH1 0xFF DUP5 AND DUP6 PUSH2 0x31C9 JUMP JUMPDEST GT ISZERO PUSH2 0x2BA7 JUMPI PUSH2 0x2B58 DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2B6B DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x2BCC JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0x2BE5 DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT DUP5 ADD SAR SWAP2 SWAP1 SWAP6 ADD MLOAD AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2C22 DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH2 0x2C36 DUP7 PUSH2 0x2DF2 JUMP JUMPDEST DUP5 PUSH2 0x2C41 DUP8 DUP5 PUSH2 0x31C9 JUMP JUMPDEST PUSH2 0x2C4B SWAP2 SWAP1 PUSH2 0x31C9 JUMP JUMPDEST GT ISZERO PUSH2 0x2C5E JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x2C80 JUMP JUMPDEST PUSH2 0x2C68 DUP6 DUP3 PUSH2 0x31C9 JUMP JUMPDEST SWAP1 POP PUSH2 0x2C7C DUP4 PUSH5 0xFFFFFFFFFF AND DUP3 DUP7 PUSH2 0x2A83 JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFFFFFF NOT DUP1 DUP5 AND SUB PUSH2 0x2CB0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x148D5133 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2CB9 DUP4 PUSH2 0x2E2B JUMP JUMPDEST ISZERO PUSH2 0x2CD7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EE09491 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2CEC DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2D0C DUP6 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD SWAP2 POP DUP6 DUP3 GT ISZERO PUSH2 0x2D2D JUMPI PUSH1 0x20 PUSH1 0x60 REVERT JUMPDEST DUP4 DUP7 DUP6 DUP6 PUSH1 0x4 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x2D55 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2AF1BD9B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2D70 PUSH2 0x2D62 DUP9 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND DUP8 DUP7 PUSH2 0x2D7B JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0x2DA3 JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0x2DDC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E07 DUP3 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2E1A DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E37 DUP3 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH5 0xFFFFFFFFFF SUB PUSH2 0x2E51 JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E5C DUP4 PUSH2 0x2DF2 JUMP JUMPDEST PUSH1 0x40 MLOAD LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2EA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2EC2 JUMPI PUSH2 0x2EC2 PUSH2 0x2E80 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x2EEA JUMPI PUSH2 0x2EEA PUSH2 0x2E80 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x2F03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2F35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2F4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C80 DUP5 DUP3 DUP6 ADD PUSH2 0x2E96 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH2 0x2F90 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2FA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2FC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2FCD DUP7 DUP4 DUP8 ADD PUSH2 0x2E96 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2FE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FF0 DUP6 DUP3 DUP7 ADD PUSH2 0x2E96 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x460 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3013 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x302B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x303F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x304E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x3063 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 DUP4 ADD SWAP8 POP SWAP6 POP POP DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x440 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x3084 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x40 ADD SWAP4 CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1BC7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x30D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1BC7 DUP3 PUSH2 0x30BF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3108 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3111 DUP5 PUSH2 0x30BF JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3134 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3140 DUP7 DUP3 DUP8 ADD PUSH2 0x2E96 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3165 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x314D JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x3186 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x314A JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1BC4 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x316E JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x165C JUMPI PUSH2 0x165C PUSH2 0x31B3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x31EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3208 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x316E JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x321A DUP2 DUP7 PUSH2 0x316E JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3246 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x316E JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x43E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x328A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x32AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x32C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x32DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3304 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1BC7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x165C JUMPI PUSH2 0x165C PUSH2 0x31B3 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x3340 JUMPI PUSH2 0x3340 PUSH2 0x31B3 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x335D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x3393 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x316E JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x33BE JUMPI PUSH1 0x0 NOT DUP2 PUSH1 0x20 SUB PUSH1 0x3 SHL SHL DUP3 AND SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3393 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x316E JUMP JUMPDEST DUP4 DUP2 MSTORE DUP3 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x28CB PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x316E JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP1 DUP10 PUSH1 0xE0 SHL AND DUP4 MSTORE DUP8 PUSH1 0x4 DUP5 ADD MSTORE DUP1 DUP8 PUSH1 0xE0 SHL AND PUSH1 0x24 DUP5 ADD MSTORE DUP1 DUP7 PUSH1 0xE0 SHL AND PUSH1 0x28 DUP5 ADD MSTORE POP DUP4 PUSH1 0x2C DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x345C DUP2 PUSH1 0x4C DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x314A JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x4C ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x165C JUMPI PUSH2 0x165C PUSH2 0x31B3 JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND MUL SWAP1 DUP2 AND SWAP1 DUP2 DUP2 EQ PUSH2 0x34A3 JUMPI PUSH2 0x34A3 PUSH2 0x31B3 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE0 PUSH7 0x9F9973A9EB5780 LOG1 PUSH30 0x59E6576A6D930C4941BD9D7E7E61EFD12671C7938F64736F6C6343000811 STOP CALLER ","sourceMap":"257:2529:126:-:0;;;368:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;656:7;671:13;692:4;704:12;724:16;748:11;767;786:12;806:7;821:15;;656:7;671:13;692:4;704:12;724:16;3038:21:116::1;3048:10;3038:9;:21::i;:::-;3105:7;:12;;3116:1;3105:12:::0;3097:37:::1;;;::::0;-1:-1:-1;;;3097:37:116;;1479:2:181;3097:37:116::1;::::0;::::1;1461:21:181::0;1518:2;1498:18;;;1491:30;-1:-1:-1;;;1537:18:181;;;1530:42;1589:18;;3097:37:116::1;;;;;;;;;-1:-1:-1::0;;;;;3148:26:116;::::1;3140:56;;;::::0;-1:-1:-1;;;3140:56:116;;1820:2:181;3140:56:116::1;::::0;::::1;1802:21:181::0;1859:2;1839:18;;;1832:30;-1:-1:-1;;;1878:18:181;;;1871:47;1935:18;;3140:56:116::1;1618:341:181::0;3140:56:116::1;3308:16;::::0;;::::1;;::::0;-1:-1:-1;;;;;3330:10:116;;::::1;;::::0;3346:27;;::::1;;::::0;3379:29;;::::1;;::::0;3449:30;::::1;::::0;3445:88:::1;;3489:37;3509:16:::0;3489:19:::1;:37::i;:::-;3544:74;::::0;;-1:-1:-1;;;;;2222:15:181;;;2204:34;;2274:15;;;2269:2;2254:18;;2247:43;2326:15;;2306:18;;;2299:43;3544:74:116;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;2154:2:181;3544:74:116;;::::1;-1:-1:-1::0;;996:7:51;:15;;-1:-1:-1;;;;996:15:51;;;-1:-1:-1;;1056:14:114::1;:48:::0;;-1:-1:-1;;;;;;1056:48:114::1;-1:-1:-1::0;;;;;1056:48:114;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;1821:7:52;:22;7305:11:120::3;7291:25:::0;::::3;7283:50;;;::::0;-1:-1:-1;;;7283:50:120;;2555:2:181;7283:50:120::3;::::0;::::3;2537:21:181::0;2594:2;2574:18;;;2567:30;-1:-1:-1;;;2613:18:181;;;2606:42;2665:18;;7283:50:120::3;2353:336:181::0;7283:50:120::3;7361:10;7347:11;:24;7339:49;;;::::0;-1:-1:-1;;;7339:49:120;;2896:2:181;7339:49:120::3;::::0;::::3;2878:21:181::0;2935:2;2915:18;;;2908:30;-1:-1:-1;;;2954:18:181;;;2947:42;3006:18;;7339:49:120::3;2694:336:181::0;7339:49:120::3;7394:25;::::0;;;7425::::3;::::0;;;-1:-1:-1;;;;;7465:21:120;::::3;7457:46;;;::::0;-1:-1:-1;;;7457:46:120;;3237:2:181;7457:46:120::3;::::0;::::3;3219:21:181::0;3276:2;3256:18;;;3249:30;-1:-1:-1;;;3295:18:181;;;3288:42;3347:18;;7457:46:120::3;3035:336:181::0;7457:46:120::3;-1:-1:-1::0;;;;;;7509:35:120::3;;::::0;7551:11:::3;:26:::0;-1:-1:-1;257:2529:126;;-1:-1:-1;;;;;;;;;;;;;;;;257:2529:126;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;5838::116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;3588:34:181;;3658:15;;;3653:2;3638:18;;3631:43;5921:57:116;;3523:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;14:167:181:-;92:13;;145:10;134:22;;124:33;;114:61;;171:1;168;161:12;114:61;14:167;;;:::o;186:177::-;265:13;;-1:-1:-1;;;;;307:31:181;;297:42;;287:70;;353:1;350;343:12;368:904;517:6;525;533;541;549;557;565;573;581;589;642:3;630:9;621:7;617:23;613:33;610:53;;;659:1;656;649:12;610:53;682:39;711:9;682:39;:::i;:::-;672:49;;740:48;784:2;773:9;769:18;740:48;:::i;:::-;730:58;;807:49;852:2;841:9;837:18;807:49;:::i;:::-;797:59;;875:49;920:2;909:9;905:18;875:49;:::i;:::-;865:59;;943:50;988:3;977:9;973:19;943:50;:::i;:::-;933:60;;1033:3;1022:9;1018:19;1012:26;1002:36;;1078:3;1067:9;1063:19;1057:26;1047:36;;1123:3;1112:9;1108:19;1102:26;1092:36;;1147:50;1192:3;1181:9;1177:19;1147:50;:::i;:::-;1137:60;;1216:50;1261:3;1250:9;1246:19;1216:50;:::i;:::-;1206:60;;368:904;;;;;;;;;;;;;:::o;3376:304::-;257:2529:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@AMB_39042":{"entryPoint":null,"id":39042,"parameterSlots":0,"returnSlots":0},"@DOMAIN_39039":{"entryPoint":null,"id":39039,"parameterSlots":0,"returnSlots":0},"@MERKLE_39550":{"entryPoint":null,"id":39550,"parameterSlots":0,"returnSlots":0},"@MIRROR_DOMAIN_39048":{"entryPoint":null,"id":39048,"parameterSlots":0,"returnSlots":0},"@PROCESS_GAS_39553":{"entryPoint":null,"id":39553,"parameterSlots":0,"returnSlots":0},"@RESERVE_GAS_39556":{"entryPoint":null,"id":39556,"parameterSlots":0,"returnSlots":0},"@ROOT_MANAGER_39045":{"entryPoint":null,"id":39045,"parameterSlots":0,"returnSlots":0},"@_39157":{"entryPoint":null,"id":39157,"parameterSlots":0,"returnSlots":0},"@_msgSender_11496":{"entryPoint":null,"id":11496,"parameterSlots":0,"returnSlots":1},"@_nonReentrantAfter_10733":{"entryPoint":null,"id":10733,"parameterSlots":0,"returnSlots":0},"@_nonReentrantBefore_10725":{"entryPoint":6862,"id":10725,"parameterSlots":0,"returnSlots":0},"@_pause_10663":{"entryPoint":8493,"id":10663,"parameterSlots":0,"returnSlots":0},"@_processMessage_41812":{"entryPoint":null,"id":41812,"parameterSlots":1,"returnSlots":0},"@_requireNotPaused_10636":{"entryPoint":6245,"id":10636,"parameterSlots":0,"returnSlots":0},"@_requirePaused_10647":{"entryPoint":6697,"id":10647,"parameterSlots":0,"returnSlots":0},"@_sendMessage_41804":{"entryPoint":6322,"id":41804,"parameterSlots":2,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":8102,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":8638,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":8560,"id":49927,"parameterSlots":1,"returnSlots":0},"@_setRateLimitBlocks_49687":{"entryPoint":8739,"id":49687,"parameterSlots":1,"returnSlots":0},"@_unpause_10679":{"entryPoint":6777,"id":10679,"parameterSlots":0,"returnSlots":0},"@_verifySender_41753":{"entryPoint":null,"id":41753,"parameterSlots":1,"returnSlots":1},"@acceptProposedOwner_49887":{"entryPoint":5382,"id":49887,"parameterSlots":0,"returnSlots":0},"@addSender_39706":{"entryPoint":5255,"id":39706,"parameterSlots":1,"returnSlots":0},"@addressToBytes32_50168":{"entryPoint":null,"id":50168,"parameterSlots":1,"returnSlots":1},"@allowlistedSenders_39581":{"entryPoint":null,"id":39581,"parameterSlots":0,"returnSlots":0},"@body_49194":{"entryPoint":10625,"id":49194,"parameterSlots":1,"returnSlots":1},"@branchRoot_48998":{"entryPoint":9218,"id":48998,"parameterSlots":3,"returnSlots":1},"@build_50565":{"entryPoint":10883,"id":50565,"parameterSlots":3,"returnSlots":1},"@bytes32ToAddress_50187":{"entryPoint":null,"id":50187,"parameterSlots":1,"returnSlots":1},"@calculateMessageRoot_40253":{"entryPoint":6951,"id":40253,"parameterSlots":3,"returnSlots":1},"@clone_51141":{"entryPoint":10671,"id":51141,"parameterSlots":1,"returnSlots":1},"@delayBlocks_39546":{"entryPoint":null,"id":39546,"parameterSlots":0,"returnSlots":0},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@destination_49143":{"entryPoint":10452,"id":49143,"parameterSlots":1,"returnSlots":1},"@dispatch_39974":{"entryPoint":5782,"id":39974,"parameterSlots":3,"returnSlots":2},"@end_50683":{"entryPoint":11762,"id":50683,"parameterSlots":1,"returnSlots":1},"@excessivelySafeCall_50045":{"entryPoint":10744,"id":50045,"parameterSlots":5,"returnSlots":2},"@formatMessage_49044":{"entryPoint":8865,"id":49044,"parameterSlots":6,"returnSlots":1},"@home_39271":{"entryPoint":null,"id":39271,"parameterSlots":0,"returnSlots":1},"@indexUint_50882":{"entryPoint":10944,"id":50882,"parameterSlots":3,"returnSlots":1},"@index_50852":{"entryPoint":11009,"id":50852,"parameterSlots":3,"returnSlots":1},"@isNotValid_50403":{"entryPoint":11819,"id":50403,"parameterSlots":1,"returnSlots":1},"@isNull_50364":{"entryPoint":null,"id":50364,"parameterSlots":1,"returnSlots":1},"@isReplica_39286":{"entryPoint":null,"id":39286,"parameterSlots":1,"returnSlots":1},"@keccak_50951":{"entryPoint":10473,"id":50951,"parameterSlots":1,"returnSlots":1},"@lastSentBlock_49642":{"entryPoint":null,"id":49642,"parameterSlots":0,"returnSlots":0},"@leftMask_50342":{"entryPoint":null,"id":50342,"parameterSlots":1,"returnSlots":1},"@len_50665":{"entryPoint":null,"id":50665,"parameterSlots":1,"returnSlots":1},"@loc_50615":{"entryPoint":null,"id":50615,"parameterSlots":1,"returnSlots":1},"@localDomain_39855":{"entryPoint":null,"id":39855,"parameterSlots":0,"returnSlots":1},"@messages_39592":{"entryPoint":null,"id":39592,"parameterSlots":0,"returnSlots":0},"@mirrorConnector_39051":{"entryPoint":null,"id":39051,"parameterSlots":0,"returnSlots":0},"@nonce_49125":{"entryPoint":10583,"id":49125,"parameterSlots":1,"returnSlots":1},"@nonces_39586":{"entryPoint":null,"id":39586,"parameterSlots":0,"returnSlots":0},"@origin_49092":{"entryPoint":10563,"id":49092,"parameterSlots":1,"returnSlots":1},"@outboundRoot_39845":{"entryPoint":4285,"id":39845,"parameterSlots":0,"returnSlots":1},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@pause_38913":{"entryPoint":4793,"id":38913,"parameterSlots":0,"returnSlots":0},"@paused_10624":{"entryPoint":null,"id":10624,"parameterSlots":0,"returnSlots":1},"@pendingAggregateRoots_39561":{"entryPoint":null,"id":39561,"parameterSlots":0,"returnSlots":0},"@processMessage_39189":{"entryPoint":3367,"id":39189,"parameterSlots":1,"returnSlots":0},"@process_40427":{"entryPoint":7369,"id":40427,"parameterSlots":1,"returnSlots":1},"@proposeNewOwner_49841":{"entryPoint":4973,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@proveAndProcess_40115":{"entryPoint":3524,"id":40115,"parameterSlots":5,"returnSlots":0},"@proveMessageRoot_40306":{"entryPoint":7118,"id":40306,"parameterSlots":4,"returnSlots":0},"@provenAggregateRoots_39566":{"entryPoint":null,"id":39566,"parameterSlots":0,"returnSlots":0},"@provenMessageRoots_39571":{"entryPoint":null,"id":39571,"parameterSlots":0,"returnSlots":0},"@rateLimitBlocks_49639":{"entryPoint":null,"id":49639,"parameterSlots":0,"returnSlots":0},"@receiveAggregateRoot_40160":{"entryPoint":8921,"id":40160,"parameterSlots":1,"returnSlots":0},"@recipientAddress_49174":{"entryPoint":10546,"id":49174,"parameterSlots":1,"returnSlots":1},"@recipient_49158":{"entryPoint":10992,"id":49158,"parameterSlots":1,"returnSlots":1},"@ref_50591":{"entryPoint":10416,"id":50591,"parameterSlots":2,"returnSlots":1},"@removePendingAggregateRoot_39792":{"entryPoint":4547,"id":39792,"parameterSlots":1,"returnSlots":0},"@removeSender_39724":{"entryPoint":5131,"id":39724,"parameterSlots":1,"returnSlots":0},"@renounceOwnership_39834":{"entryPoint":4750,"id":39834,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@sendMessage_41738":{"entryPoint":3099,"id":41738,"parameterSlots":2,"returnSlots":0},"@sendValue_11206":{"entryPoint":8207,"id":11206,"parameterSlots":2,"returnSlots":0},"@send_39906":{"entryPoint":2619,"id":39906,"parameterSlots":1,"returnSlots":0},"@sender_49107":{"entryPoint":10604,"id":49107,"parameterSlots":1,"returnSlots":1},"@sentMessageRoots_39576":{"entryPoint":null,"id":39576,"parameterSlots":0,"returnSlots":0},"@setDelayBlocks_39750":{"entryPoint":2449,"id":39750,"parameterSlots":1,"returnSlots":0},"@setMirrorConnector_39170":{"entryPoint":4230,"id":39170,"parameterSlots":1,"returnSlots":0},"@setRateLimitBlocks_39763":{"entryPoint":5730,"id":39763,"parameterSlots":1,"returnSlots":0},"@setWatcherManager_38881":{"entryPoint":5494,"id":38881,"parameterSlots":1,"returnSlots":0},"@slice_50729":{"entryPoint":11276,"id":50729,"parameterSlots":4,"returnSlots":1},"@typeOf_50601":{"entryPoint":null,"id":50601,"parameterSlots":1,"returnSlots":1},"@unpause_38893":{"entryPoint":3038,"id":38893,"parameterSlots":0,"returnSlots":0},"@unsafeBuildUnchecked_50530":{"entryPoint":11643,"id":50530,"parameterSlots":3,"returnSlots":1},"@unsafeCopyTo_51113":{"entryPoint":11400,"id":51113,"parameterSlots":2,"returnSlots":1},"@verifyAggregateRoot_40221":{"entryPoint":10064,"id":40221,"parameterSlots":1,"returnSlots":0},"@verifySender_39202":{"entryPoint":5709,"id":39202,"parameterSlots":1,"returnSlots":1},"@watcherManager_38824":{"entryPoint":null,"id":38824,"parameterSlots":0,"returnSlots":0},"@withdrawFunds_39824":{"entryPoint":4422,"id":39824,"parameterSlots":1,"returnSlots":0},"abi_decode_bytes":{"entryPoint":11926,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":12438,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256":{"entryPoint":12282,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":13042,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32_fromMemory":{"entryPoint":12764,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_uint256_fromMemory":{"entryPoint":13130,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes_memory_ptr":{"entryPoint":12067,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr":{"entryPoint":12182,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":11879,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32":{"entryPoint":12504,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr":{"entryPoint":12531,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_uint32":{"entryPoint":12479,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_bytes":{"entryPoint":12654,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":13026,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":13332,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13299,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":12698,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13166,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":12851,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":12789,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed":{"entryPoint":12142,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13252,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"access_calldata_tail_t_bytes_calldata_ptr":{"entryPoint":12948,"id":null,"parameterSlots":2,"returnSlots":2},"access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr":{"entryPoint":12915,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":12745,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint8":{"entryPoint":13447,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":13076,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint8":{"entryPoint":13422,"id":null,"parameterSlots":2,"returnSlots":1},"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32":{"entryPoint":13213,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":12618,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint32":{"entryPoint":13095,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":12723,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":12120,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":12893,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":11904,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:25308:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"113:93:181","statements":[{"nodeType":"YulAssignment","src":"123:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"135:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"146:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"131:3:181"},"nodeType":"YulFunctionCall","src":"131:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"123:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"165:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"180:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"188:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"176:3:181"},"nodeType":"YulFunctionCall","src":"176:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"158:6:181"},"nodeType":"YulFunctionCall","src":"158:42:181"},"nodeType":"YulExpressionStatement","src":"158:42:181"}]},"name":"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"82:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"93:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"104:4:181","type":""}],"src":"14:192:181"},{"body":{"nodeType":"YulBlock","src":"281:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"327:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"336:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"339:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"329:6:181"},"nodeType":"YulFunctionCall","src":"329:12:181"},"nodeType":"YulExpressionStatement","src":"329:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"302:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"311:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"298:3:181"},"nodeType":"YulFunctionCall","src":"298:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"323:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"294:3:181"},"nodeType":"YulFunctionCall","src":"294:32:181"},"nodeType":"YulIf","src":"291:52:181"},{"nodeType":"YulAssignment","src":"352:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"375:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"362:12:181"},"nodeType":"YulFunctionCall","src":"362:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"352:6:181"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"247:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"258:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"270:6:181","type":""}],"src":"211:180:181"},{"body":{"nodeType":"YulBlock","src":"497:76:181","statements":[{"nodeType":"YulAssignment","src":"507:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"519:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"530:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"515:3:181"},"nodeType":"YulFunctionCall","src":"515:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"507:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"549:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"560:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"542:6:181"},"nodeType":"YulFunctionCall","src":"542:25:181"},"nodeType":"YulExpressionStatement","src":"542:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"466:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"477:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"488:4:181","type":""}],"src":"396:177:181"},{"body":{"nodeType":"YulBlock","src":"610:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"627:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"634:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"639:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"630:3:181"},"nodeType":"YulFunctionCall","src":"630:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"620:6:181"},"nodeType":"YulFunctionCall","src":"620:31:181"},"nodeType":"YulExpressionStatement","src":"620:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"667:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"670:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"660:6:181"},"nodeType":"YulFunctionCall","src":"660:15:181"},"nodeType":"YulExpressionStatement","src":"660:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"691:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"694:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"684:6:181"},"nodeType":"YulFunctionCall","src":"684:15:181"},"nodeType":"YulExpressionStatement","src":"684:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"578:127:181"},{"body":{"nodeType":"YulBlock","src":"762:666:181","statements":[{"body":{"nodeType":"YulBlock","src":"811:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"820:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"823:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"813:6:181"},"nodeType":"YulFunctionCall","src":"813:12:181"},"nodeType":"YulExpressionStatement","src":"813:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"790:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"798:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"786:3:181"},"nodeType":"YulFunctionCall","src":"786:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"805:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"782:3:181"},"nodeType":"YulFunctionCall","src":"782:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"775:6:181"},"nodeType":"YulFunctionCall","src":"775:35:181"},"nodeType":"YulIf","src":"772:55:181"},{"nodeType":"YulVariableDeclaration","src":"836:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"859:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"846:12:181"},"nodeType":"YulFunctionCall","src":"846:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"840:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"875:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"885:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"879:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"926:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"928:16:181"},"nodeType":"YulFunctionCall","src":"928:18:181"},"nodeType":"YulExpressionStatement","src":"928:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"918:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"922:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"915:2:181"},"nodeType":"YulFunctionCall","src":"915:10:181"},"nodeType":"YulIf","src":"912:36:181"},{"nodeType":"YulVariableDeclaration","src":"957:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"971:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"967:3:181"},"nodeType":"YulFunctionCall","src":"967:7:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"961:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"983:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1003:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"997:5:181"},"nodeType":"YulFunctionCall","src":"997:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"987:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1015:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1037:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1061:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1065:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1057:3:181"},"nodeType":"YulFunctionCall","src":"1057:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1072:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1053:3:181"},"nodeType":"YulFunctionCall","src":"1053:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"1077:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1049:3:181"},"nodeType":"YulFunctionCall","src":"1049:31:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1082:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1045:3:181"},"nodeType":"YulFunctionCall","src":"1045:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1033:3:181"},"nodeType":"YulFunctionCall","src":"1033:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1019:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1145:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1147:16:181"},"nodeType":"YulFunctionCall","src":"1147:18:181"},"nodeType":"YulExpressionStatement","src":"1147:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1104:10:181"},{"name":"_2","nodeType":"YulIdentifier","src":"1116:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1101:2:181"},"nodeType":"YulFunctionCall","src":"1101:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1124:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1136:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1121:2:181"},"nodeType":"YulFunctionCall","src":"1121:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1098:2:181"},"nodeType":"YulFunctionCall","src":"1098:46:181"},"nodeType":"YulIf","src":"1095:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1183:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1187:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1176:6:181"},"nodeType":"YulFunctionCall","src":"1176:22:181"},"nodeType":"YulExpressionStatement","src":"1176:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1214:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1222:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1207:6:181"},"nodeType":"YulFunctionCall","src":"1207:18:181"},"nodeType":"YulExpressionStatement","src":"1207:18:181"},{"body":{"nodeType":"YulBlock","src":"1273:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1282:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1285:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1275:6:181"},"nodeType":"YulFunctionCall","src":"1275:12:181"},"nodeType":"YulExpressionStatement","src":"1275:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1248:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1256:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1244:3:181"},"nodeType":"YulFunctionCall","src":"1244:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1261:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1240:3:181"},"nodeType":"YulFunctionCall","src":"1240:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"1268:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1237:2:181"},"nodeType":"YulFunctionCall","src":"1237:35:181"},"nodeType":"YulIf","src":"1234:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1315:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1323:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1311:3:181"},"nodeType":"YulFunctionCall","src":"1311:17:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1334:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1342:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1330:3:181"},"nodeType":"YulFunctionCall","src":"1330:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1349:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1298:12:181"},"nodeType":"YulFunctionCall","src":"1298:54:181"},"nodeType":"YulExpressionStatement","src":"1298:54:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1376:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1384:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1372:3:181"},"nodeType":"YulFunctionCall","src":"1372:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1389:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1368:3:181"},"nodeType":"YulFunctionCall","src":"1368:26:181"},{"kind":"number","nodeType":"YulLiteral","src":"1396:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1361:6:181"},"nodeType":"YulFunctionCall","src":"1361:37:181"},"nodeType":"YulExpressionStatement","src":"1361:37:181"},{"nodeType":"YulAssignment","src":"1407:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1416:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1407:5:181"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"736:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"744:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"752:5:181","type":""}],"src":"710:718:181"},{"body":{"nodeType":"YulBlock","src":"1512:241:181","statements":[{"body":{"nodeType":"YulBlock","src":"1558:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1567:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1570:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1560:6:181"},"nodeType":"YulFunctionCall","src":"1560:12:181"},"nodeType":"YulExpressionStatement","src":"1560:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1533:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1542:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1529:3:181"},"nodeType":"YulFunctionCall","src":"1529:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1554:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1525:3:181"},"nodeType":"YulFunctionCall","src":"1525:32:181"},"nodeType":"YulIf","src":"1522:52:181"},{"nodeType":"YulVariableDeclaration","src":"1583:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1610:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1597:12:181"},"nodeType":"YulFunctionCall","src":"1597:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1587:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1663:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1672:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1675:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1665:6:181"},"nodeType":"YulFunctionCall","src":"1665:12:181"},"nodeType":"YulExpressionStatement","src":"1665:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1635:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1643:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1632:2:181"},"nodeType":"YulFunctionCall","src":"1632:30:181"},"nodeType":"YulIf","src":"1629:50:181"},{"nodeType":"YulAssignment","src":"1688:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1719:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1730:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1715:3:181"},"nodeType":"YulFunctionCall","src":"1715:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1739:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"1698:16:181"},"nodeType":"YulFunctionCall","src":"1698:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1688:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1478:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1489:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1501:6:181","type":""}],"src":"1433:320:181"},{"body":{"nodeType":"YulBlock","src":"1828:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"1874:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1883:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1886:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1876:6:181"},"nodeType":"YulFunctionCall","src":"1876:12:181"},"nodeType":"YulExpressionStatement","src":"1876:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1849:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1858:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1845:3:181"},"nodeType":"YulFunctionCall","src":"1845:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1870:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1841:3:181"},"nodeType":"YulFunctionCall","src":"1841:32:181"},"nodeType":"YulIf","src":"1838:52:181"},{"nodeType":"YulAssignment","src":"1899:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1922:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1909:12:181"},"nodeType":"YulFunctionCall","src":"1909:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1899:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1794:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1805:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1817:6:181","type":""}],"src":"1758:180:181"},{"body":{"nodeType":"YulBlock","src":"1975:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1992:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1999:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2004:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1995:3:181"},"nodeType":"YulFunctionCall","src":"1995:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1985:6:181"},"nodeType":"YulFunctionCall","src":"1985:31:181"},"nodeType":"YulExpressionStatement","src":"1985:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2032:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2035:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2025:6:181"},"nodeType":"YulFunctionCall","src":"2025:15:181"},"nodeType":"YulExpressionStatement","src":"2025:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2056:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2059:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2049:6:181"},"nodeType":"YulFunctionCall","src":"2049:15:181"},"nodeType":"YulExpressionStatement","src":"2049:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"1943:127:181"},{"body":{"nodeType":"YulBlock","src":"2193:229:181","statements":[{"nodeType":"YulAssignment","src":"2203:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2215:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2226:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2211:3:181"},"nodeType":"YulFunctionCall","src":"2211:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2203:4:181"}]},{"body":{"nodeType":"YulBlock","src":"2271:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2292:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2299:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2304:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2295:3:181"},"nodeType":"YulFunctionCall","src":"2295:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2285:6:181"},"nodeType":"YulFunctionCall","src":"2285:31:181"},"nodeType":"YulExpressionStatement","src":"2285:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2336:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2339:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2329:6:181"},"nodeType":"YulFunctionCall","src":"2329:15:181"},"nodeType":"YulExpressionStatement","src":"2329:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2364:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2367:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2357:6:181"},"nodeType":"YulFunctionCall","src":"2357:15:181"},"nodeType":"YulExpressionStatement","src":"2357:15:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2251:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2259:1:181","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2248:2:181"},"nodeType":"YulFunctionCall","src":"2248:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2241:6:181"},"nodeType":"YulFunctionCall","src":"2241:21:181"},"nodeType":"YulIf","src":"2238:144:181"},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2398:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"2409:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2391:6:181"},"nodeType":"YulFunctionCall","src":"2391:25:181"},"nodeType":"YulExpressionStatement","src":"2391:25:181"}]},"name":"abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2162:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2173:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2184:4:181","type":""}],"src":"2075:347:181"},{"body":{"nodeType":"YulBlock","src":"2522:92:181","statements":[{"nodeType":"YulAssignment","src":"2532:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2544:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2555:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2540:3:181"},"nodeType":"YulFunctionCall","src":"2540:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2532:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2574:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2599:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2592:6:181"},"nodeType":"YulFunctionCall","src":"2592:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2585:6:181"},"nodeType":"YulFunctionCall","src":"2585:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2567:6:181"},"nodeType":"YulFunctionCall","src":"2567:41:181"},"nodeType":"YulExpressionStatement","src":"2567:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2491:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2502:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2513:4:181","type":""}],"src":"2427:187:181"},{"body":{"nodeType":"YulBlock","src":"2724:434:181","statements":[{"body":{"nodeType":"YulBlock","src":"2770:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2779:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2782:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2772:6:181"},"nodeType":"YulFunctionCall","src":"2772:12:181"},"nodeType":"YulExpressionStatement","src":"2772:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2745:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2754:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2741:3:181"},"nodeType":"YulFunctionCall","src":"2741:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2766:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2737:3:181"},"nodeType":"YulFunctionCall","src":"2737:32:181"},"nodeType":"YulIf","src":"2734:52:181"},{"nodeType":"YulVariableDeclaration","src":"2795:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2822:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2809:12:181"},"nodeType":"YulFunctionCall","src":"2809:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2799:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2841:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2851:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2845:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2896:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2905:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2908:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2898:6:181"},"nodeType":"YulFunctionCall","src":"2898:12:181"},"nodeType":"YulExpressionStatement","src":"2898:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2884:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2892:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2881:2:181"},"nodeType":"YulFunctionCall","src":"2881:14:181"},"nodeType":"YulIf","src":"2878:34:181"},{"nodeType":"YulAssignment","src":"2921:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2952:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"2963:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2948:3:181"},"nodeType":"YulFunctionCall","src":"2948:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2972:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"2931:16:181"},"nodeType":"YulFunctionCall","src":"2931:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2921:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2989:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3022:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3033:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3018:3:181"},"nodeType":"YulFunctionCall","src":"3018:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3005:12:181"},"nodeType":"YulFunctionCall","src":"3005:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"2993:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3066:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3075:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3078:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3068:6:181"},"nodeType":"YulFunctionCall","src":"3068:12:181"},"nodeType":"YulExpressionStatement","src":"3068:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"3052:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3062:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3049:2:181"},"nodeType":"YulFunctionCall","src":"3049:16:181"},"nodeType":"YulIf","src":"3046:36:181"},{"nodeType":"YulAssignment","src":"3091:61:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3122:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"3133:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3118:3:181"},"nodeType":"YulFunctionCall","src":"3118:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3144:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"3101:16:181"},"nodeType":"YulFunctionCall","src":"3101:51:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3091:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2682:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2693:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2705:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2713:6:181","type":""}],"src":"2619:539:181"},{"body":{"nodeType":"YulBlock","src":"3371:724:181","statements":[{"body":{"nodeType":"YulBlock","src":"3419:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3428:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3431:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3421:6:181"},"nodeType":"YulFunctionCall","src":"3421:12:181"},"nodeType":"YulExpressionStatement","src":"3421:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3392:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3401:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3388:3:181"},"nodeType":"YulFunctionCall","src":"3388:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3413:4:181","type":"","value":"1120"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3384:3:181"},"nodeType":"YulFunctionCall","src":"3384:34:181"},"nodeType":"YulIf","src":"3381:54:181"},{"nodeType":"YulVariableDeclaration","src":"3444:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3471:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3458:12:181"},"nodeType":"YulFunctionCall","src":"3458:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3448:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3490:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3500:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3494:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3545:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3554:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3557:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3547:6:181"},"nodeType":"YulFunctionCall","src":"3547:12:181"},"nodeType":"YulExpressionStatement","src":"3547:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3533:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3541:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3530:2:181"},"nodeType":"YulFunctionCall","src":"3530:14:181"},"nodeType":"YulIf","src":"3527:34:181"},{"nodeType":"YulVariableDeclaration","src":"3570:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3584:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"3595:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3580:3:181"},"nodeType":"YulFunctionCall","src":"3580:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"3574:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3650:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3659:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3662:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3652:6:181"},"nodeType":"YulFunctionCall","src":"3652:12:181"},"nodeType":"YulExpressionStatement","src":"3652:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3629:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3633:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3625:3:181"},"nodeType":"YulFunctionCall","src":"3625:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3640:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3621:3:181"},"nodeType":"YulFunctionCall","src":"3621:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3614:6:181"},"nodeType":"YulFunctionCall","src":"3614:35:181"},"nodeType":"YulIf","src":"3611:55:181"},{"nodeType":"YulVariableDeclaration","src":"3675:30:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3702:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3689:12:181"},"nodeType":"YulFunctionCall","src":"3689:16:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3679:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3732:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3741:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3744:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3734:6:181"},"nodeType":"YulFunctionCall","src":"3734:12:181"},"nodeType":"YulExpressionStatement","src":"3734:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3720:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3728:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3717:2:181"},"nodeType":"YulFunctionCall","src":"3717:14:181"},"nodeType":"YulIf","src":"3714:34:181"},{"body":{"nodeType":"YulBlock","src":"3808:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3817:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3820:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3810:6:181"},"nodeType":"YulFunctionCall","src":"3810:12:181"},"nodeType":"YulExpressionStatement","src":"3810:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3771:2:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3779:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"3782:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3775:3:181"},"nodeType":"YulFunctionCall","src":"3775:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3767:3:181"},"nodeType":"YulFunctionCall","src":"3767:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3792:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3763:3:181"},"nodeType":"YulFunctionCall","src":"3763:34:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3799:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3760:2:181"},"nodeType":"YulFunctionCall","src":"3760:47:181"},"nodeType":"YulIf","src":"3757:67:181"},{"nodeType":"YulAssignment","src":"3833:23:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3847:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3851:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3843:3:181"},"nodeType":"YulFunctionCall","src":"3843:13:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3833:6:181"}]},{"nodeType":"YulAssignment","src":"3865:16:181","value":{"name":"length","nodeType":"YulIdentifier","src":"3875:6:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3865:6:181"}]},{"nodeType":"YulAssignment","src":"3890:44:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3917:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3928:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3913:3:181"},"nodeType":"YulFunctionCall","src":"3913:20:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3900:12:181"},"nodeType":"YulFunctionCall","src":"3900:34:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3890:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3943:30:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3957:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3968:4:181","type":"","value":"1088"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3953:3:181"},"nodeType":"YulFunctionCall","src":"3953:20:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"3947:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4001:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4010:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4013:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4003:6:181"},"nodeType":"YulFunctionCall","src":"4003:12:181"},"nodeType":"YulExpressionStatement","src":"4003:12:181"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3988:2:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3992:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3985:2:181"},"nodeType":"YulFunctionCall","src":"3985:15:181"},"nodeType":"YulIf","src":"3982:35:181"},{"nodeType":"YulAssignment","src":"4026:28:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4040:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4051:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4036:3:181"},"nodeType":"YulFunctionCall","src":"4036:18:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4026:6:181"}]},{"nodeType":"YulAssignment","src":"4063:26:181","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"4086:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4073:12:181"},"nodeType":"YulFunctionCall","src":"4073:16:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"4063:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3305:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3316:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3328:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3336:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3344:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3352:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3360:6:181","type":""}],"src":"3163:932:181"},{"body":{"nodeType":"YulBlock","src":"4170:216:181","statements":[{"body":{"nodeType":"YulBlock","src":"4216:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4225:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4228:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4218:6:181"},"nodeType":"YulFunctionCall","src":"4218:12:181"},"nodeType":"YulExpressionStatement","src":"4218:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4191:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"4200:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4187:3:181"},"nodeType":"YulFunctionCall","src":"4187:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"4212:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4183:3:181"},"nodeType":"YulFunctionCall","src":"4183:32:181"},"nodeType":"YulIf","src":"4180:52:181"},{"nodeType":"YulVariableDeclaration","src":"4241:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4267:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4254:12:181"},"nodeType":"YulFunctionCall","src":"4254:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4245:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4340:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4349:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4352:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4342:6:181"},"nodeType":"YulFunctionCall","src":"4342:12:181"},"nodeType":"YulExpressionStatement","src":"4342:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4299:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4310:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4325:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4330:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4321:3:181"},"nodeType":"YulFunctionCall","src":"4321:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4334:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4317:3:181"},"nodeType":"YulFunctionCall","src":"4317:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4306:3:181"},"nodeType":"YulFunctionCall","src":"4306:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4296:2:181"},"nodeType":"YulFunctionCall","src":"4296:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4289:6:181"},"nodeType":"YulFunctionCall","src":"4289:50:181"},"nodeType":"YulIf","src":"4286:70:181"},{"nodeType":"YulAssignment","src":"4365:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"4375:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4365:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4136:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4147:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4159:6:181","type":""}],"src":"4100:286:181"},{"body":{"nodeType":"YulBlock","src":"4492:102:181","statements":[{"nodeType":"YulAssignment","src":"4502:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4514:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4525:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4510:3:181"},"nodeType":"YulFunctionCall","src":"4510:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4502:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4544:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4559:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4575:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4580:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4571:3:181"},"nodeType":"YulFunctionCall","src":"4571:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4584:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4567:3:181"},"nodeType":"YulFunctionCall","src":"4567:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4555:3:181"},"nodeType":"YulFunctionCall","src":"4555:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4537:6:181"},"nodeType":"YulFunctionCall","src":"4537:51:181"},"nodeType":"YulExpressionStatement","src":"4537:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4461:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4472:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4483:4:181","type":""}],"src":"4391:203:181"},{"body":{"nodeType":"YulBlock","src":"4700:76:181","statements":[{"nodeType":"YulAssignment","src":"4710:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4722:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4733:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4718:3:181"},"nodeType":"YulFunctionCall","src":"4718:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4710:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4752:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"4763:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4745:6:181"},"nodeType":"YulFunctionCall","src":"4745:25:181"},"nodeType":"YulExpressionStatement","src":"4745:25:181"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4669:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4680:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4691:4:181","type":""}],"src":"4599:177:181"},{"body":{"nodeType":"YulBlock","src":"4899:102:181","statements":[{"nodeType":"YulAssignment","src":"4909:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4921:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4932:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4917:3:181"},"nodeType":"YulFunctionCall","src":"4917:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4909:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4951:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4966:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4982:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4987:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4978:3:181"},"nodeType":"YulFunctionCall","src":"4978:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4991:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4974:3:181"},"nodeType":"YulFunctionCall","src":"4974:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4962:3:181"},"nodeType":"YulFunctionCall","src":"4962:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4944:6:181"},"nodeType":"YulFunctionCall","src":"4944:51:181"},"nodeType":"YulExpressionStatement","src":"4944:51:181"}]},"name":"abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4868:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4879:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4890:4:181","type":""}],"src":"4781:220:181"},{"body":{"nodeType":"YulBlock","src":"5134:102:181","statements":[{"nodeType":"YulAssignment","src":"5144:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5156:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5167:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5152:3:181"},"nodeType":"YulFunctionCall","src":"5152:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5144:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5186:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5201:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5217:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5222:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5213:3:181"},"nodeType":"YulFunctionCall","src":"5213:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5226:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5209:3:181"},"nodeType":"YulFunctionCall","src":"5209:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5197:3:181"},"nodeType":"YulFunctionCall","src":"5197:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5179:6:181"},"nodeType":"YulFunctionCall","src":"5179:51:181"},"nodeType":"YulExpressionStatement","src":"5179:51:181"}]},"name":"abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5103:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5114:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5125:4:181","type":""}],"src":"5006:230:181"},{"body":{"nodeType":"YulBlock","src":"5366:102:181","statements":[{"nodeType":"YulAssignment","src":"5376:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5388:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5399:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5384:3:181"},"nodeType":"YulFunctionCall","src":"5384:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5376:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5418:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5433:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5449:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5454:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5445:3:181"},"nodeType":"YulFunctionCall","src":"5445:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5458:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5441:3:181"},"nodeType":"YulFunctionCall","src":"5441:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5429:3:181"},"nodeType":"YulFunctionCall","src":"5429:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5411:6:181"},"nodeType":"YulFunctionCall","src":"5411:51:181"},"nodeType":"YulExpressionStatement","src":"5411:51:181"}]},"name":"abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5335:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5346:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5357:4:181","type":""}],"src":"5241:227:181"},{"body":{"nodeType":"YulBlock","src":"5521:115:181","statements":[{"nodeType":"YulAssignment","src":"5531:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5553:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5540:12:181"},"nodeType":"YulFunctionCall","src":"5540:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"5531:5:181"}]},{"body":{"nodeType":"YulBlock","src":"5614:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5623:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5626:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5616:6:181"},"nodeType":"YulFunctionCall","src":"5616:12:181"},"nodeType":"YulExpressionStatement","src":"5616:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5582:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5593:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5600:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5589:3:181"},"nodeType":"YulFunctionCall","src":"5589:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5579:2:181"},"nodeType":"YulFunctionCall","src":"5579:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5572:6:181"},"nodeType":"YulFunctionCall","src":"5572:41:181"},"nodeType":"YulIf","src":"5569:61:181"}]},"name":"abi_decode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"5500:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"5511:5:181","type":""}],"src":"5473:163:181"},{"body":{"nodeType":"YulBlock","src":"5710:115:181","statements":[{"body":{"nodeType":"YulBlock","src":"5756:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5765:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5768:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5758:6:181"},"nodeType":"YulFunctionCall","src":"5758:12:181"},"nodeType":"YulExpressionStatement","src":"5758:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5731:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5740:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5727:3:181"},"nodeType":"YulFunctionCall","src":"5727:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5752:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5723:3:181"},"nodeType":"YulFunctionCall","src":"5723:32:181"},"nodeType":"YulIf","src":"5720:52:181"},{"nodeType":"YulAssignment","src":"5781:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5809:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"5791:17:181"},"nodeType":"YulFunctionCall","src":"5791:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5781:6:181"}]}]},"name":"abi_decode_tuple_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5676:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5687:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5699:6:181","type":""}],"src":"5641:184:181"},{"body":{"nodeType":"YulBlock","src":"5942:348:181","statements":[{"body":{"nodeType":"YulBlock","src":"5988:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5997:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6000:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5990:6:181"},"nodeType":"YulFunctionCall","src":"5990:12:181"},"nodeType":"YulExpressionStatement","src":"5990:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5963:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5972:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5959:3:181"},"nodeType":"YulFunctionCall","src":"5959:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5984:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5955:3:181"},"nodeType":"YulFunctionCall","src":"5955:32:181"},"nodeType":"YulIf","src":"5952:52:181"},{"nodeType":"YulAssignment","src":"6013:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6041:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"6023:17:181"},"nodeType":"YulFunctionCall","src":"6023:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6013:6:181"}]},{"nodeType":"YulAssignment","src":"6060:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6087:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6098:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6083:3:181"},"nodeType":"YulFunctionCall","src":"6083:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6070:12:181"},"nodeType":"YulFunctionCall","src":"6070:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6060:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"6111:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6142:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6153:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6138:3:181"},"nodeType":"YulFunctionCall","src":"6138:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6125:12:181"},"nodeType":"YulFunctionCall","src":"6125:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"6115:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6200:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6209:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6212:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6202:6:181"},"nodeType":"YulFunctionCall","src":"6202:12:181"},"nodeType":"YulExpressionStatement","src":"6202:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6172:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6180:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6169:2:181"},"nodeType":"YulFunctionCall","src":"6169:30:181"},"nodeType":"YulIf","src":"6166:50:181"},{"nodeType":"YulAssignment","src":"6225:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6256:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"6267:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6252:3:181"},"nodeType":"YulFunctionCall","src":"6252:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6276:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"6235:16:181"},"nodeType":"YulFunctionCall","src":"6235:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6225:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5892:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5903:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5915:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5923:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5931:6:181","type":""}],"src":"5830:460:181"},{"body":{"nodeType":"YulBlock","src":"6361:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"6371:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6380:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"6375:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6440:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6465:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"6470:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6461:3:181"},"nodeType":"YulFunctionCall","src":"6461:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"6484:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"6489:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6480:3:181"},"nodeType":"YulFunctionCall","src":"6480:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6474:5:181"},"nodeType":"YulFunctionCall","src":"6474:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6454:6:181"},"nodeType":"YulFunctionCall","src":"6454:39:181"},"nodeType":"YulExpressionStatement","src":"6454:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6401:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"6404:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6398:2:181"},"nodeType":"YulFunctionCall","src":"6398:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6412:19:181","statements":[{"nodeType":"YulAssignment","src":"6414:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6423:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"6426:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6419:3:181"},"nodeType":"YulFunctionCall","src":"6419:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"6414:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"6394:3:181","statements":[]},"src":"6390:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6523:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"6528:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6519:3:181"},"nodeType":"YulFunctionCall","src":"6519:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"6537:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6512:6:181"},"nodeType":"YulFunctionCall","src":"6512:27:181"},"nodeType":"YulExpressionStatement","src":"6512:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"6339:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"6344:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"6349:6:181","type":""}],"src":"6295:250:181"},{"body":{"nodeType":"YulBlock","src":"6599:221:181","statements":[{"nodeType":"YulVariableDeclaration","src":"6609:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6629:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6623:5:181"},"nodeType":"YulFunctionCall","src":"6623:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"6613:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6651:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"6656:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6644:6:181"},"nodeType":"YulFunctionCall","src":"6644:19:181"},"nodeType":"YulExpressionStatement","src":"6644:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6711:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"6718:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6707:3:181"},"nodeType":"YulFunctionCall","src":"6707:16:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6729:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"6734:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6725:3:181"},"nodeType":"YulFunctionCall","src":"6725:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"6741:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"6672:34:181"},"nodeType":"YulFunctionCall","src":"6672:76:181"},"nodeType":"YulExpressionStatement","src":"6672:76:181"},{"nodeType":"YulAssignment","src":"6757:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6772:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6785:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6793:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6781:3:181"},"nodeType":"YulFunctionCall","src":"6781:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6802:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6798:3:181"},"nodeType":"YulFunctionCall","src":"6798:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6777:3:181"},"nodeType":"YulFunctionCall","src":"6777:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6768:3:181"},"nodeType":"YulFunctionCall","src":"6768:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"6809:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6764:3:181"},"nodeType":"YulFunctionCall","src":"6764:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"6757:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"6576:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"6583:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"6591:3:181","type":""}],"src":"6550:270:181"},{"body":{"nodeType":"YulBlock","src":"6972:141:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6989:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"7000:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6982:6:181"},"nodeType":"YulFunctionCall","src":"6982:25:181"},"nodeType":"YulExpressionStatement","src":"6982:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7027:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7038:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7023:3:181"},"nodeType":"YulFunctionCall","src":"7023:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7043:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7016:6:181"},"nodeType":"YulFunctionCall","src":"7016:30:181"},"nodeType":"YulExpressionStatement","src":"7016:30:181"},{"nodeType":"YulAssignment","src":"7055:52:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"7080:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7092:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7103:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7088:3:181"},"nodeType":"YulFunctionCall","src":"7088:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"7063:16:181"},"nodeType":"YulFunctionCall","src":"7063:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7055:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6933:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6944:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6952:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6963:4:181","type":""}],"src":"6825:288:181"},{"body":{"nodeType":"YulBlock","src":"7292:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7309:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7320:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7302:6:181"},"nodeType":"YulFunctionCall","src":"7302:21:181"},"nodeType":"YulExpressionStatement","src":"7302:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7343:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7354:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7339:3:181"},"nodeType":"YulFunctionCall","src":"7339:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7359:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7332:6:181"},"nodeType":"YulFunctionCall","src":"7332:30:181"},"nodeType":"YulExpressionStatement","src":"7332:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7382:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7393:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7378:3:181"},"nodeType":"YulFunctionCall","src":"7378:18:181"},{"hexValue":"2164656c6179426c6f636b73","kind":"string","nodeType":"YulLiteral","src":"7398:14:181","type":"","value":"!delayBlocks"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7371:6:181"},"nodeType":"YulFunctionCall","src":"7371:42:181"},"nodeType":"YulExpressionStatement","src":"7371:42:181"},{"nodeType":"YulAssignment","src":"7422:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7434:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7445:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7430:3:181"},"nodeType":"YulFunctionCall","src":"7430:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7422:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7269:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7283:4:181","type":""}],"src":"7118:336:181"},{"body":{"nodeType":"YulBlock","src":"7491:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7508:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7515:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"7520:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7511:3:181"},"nodeType":"YulFunctionCall","src":"7511:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7501:6:181"},"nodeType":"YulFunctionCall","src":"7501:31:181"},"nodeType":"YulExpressionStatement","src":"7501:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7548:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7551:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7541:6:181"},"nodeType":"YulFunctionCall","src":"7541:15:181"},"nodeType":"YulExpressionStatement","src":"7541:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7572:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7575:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7565:6:181"},"nodeType":"YulFunctionCall","src":"7565:15:181"},"nodeType":"YulExpressionStatement","src":"7565:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"7459:127:181"},{"body":{"nodeType":"YulBlock","src":"7639:77:181","statements":[{"nodeType":"YulAssignment","src":"7649:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7660:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"7663:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7656:3:181"},"nodeType":"YulFunctionCall","src":"7656:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"7649:3:181"}]},{"body":{"nodeType":"YulBlock","src":"7688:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7690:16:181"},"nodeType":"YulFunctionCall","src":"7690:18:181"},"nodeType":"YulExpressionStatement","src":"7690:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7680:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"7683:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7677:2:181"},"nodeType":"YulFunctionCall","src":"7677:10:181"},"nodeType":"YulIf","src":"7674:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"7622:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"7625:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"7631:3:181","type":""}],"src":"7591:125:181"},{"body":{"nodeType":"YulBlock","src":"7802:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"7848:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7857:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7860:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7850:6:181"},"nodeType":"YulFunctionCall","src":"7850:12:181"},"nodeType":"YulExpressionStatement","src":"7850:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7823:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7832:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7819:3:181"},"nodeType":"YulFunctionCall","src":"7819:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7844:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7815:3:181"},"nodeType":"YulFunctionCall","src":"7815:32:181"},"nodeType":"YulIf","src":"7812:52:181"},{"nodeType":"YulAssignment","src":"7873:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7889:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7883:5:181"},"nodeType":"YulFunctionCall","src":"7883:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7873:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7768:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7779:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7791:6:181","type":""}],"src":"7721:184:181"},{"body":{"nodeType":"YulBlock","src":"8084:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8101:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8112:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8094:6:181"},"nodeType":"YulFunctionCall","src":"8094:21:181"},"nodeType":"YulExpressionStatement","src":"8094:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8135:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8146:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8131:3:181"},"nodeType":"YulFunctionCall","src":"8131:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8151:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8124:6:181"},"nodeType":"YulFunctionCall","src":"8124:30:181"},"nodeType":"YulExpressionStatement","src":"8124:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8174:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8185:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8170:3:181"},"nodeType":"YulFunctionCall","src":"8170:18:181"},{"hexValue":"726f6f7420616c72656164792073656e74","kind":"string","nodeType":"YulLiteral","src":"8190:19:181","type":"","value":"root already sent"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8163:6:181"},"nodeType":"YulFunctionCall","src":"8163:47:181"},"nodeType":"YulExpressionStatement","src":"8163:47:181"},{"nodeType":"YulAssignment","src":"8219:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8231:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8242:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8227:3:181"},"nodeType":"YulFunctionCall","src":"8227:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8219:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8061:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8075:4:181","type":""}],"src":"7910:341:181"},{"body":{"nodeType":"YulBlock","src":"8375:63:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8392:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"8397:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8385:6:181"},"nodeType":"YulFunctionCall","src":"8385:19:181"},"nodeType":"YulExpressionStatement","src":"8385:19:181"},{"nodeType":"YulAssignment","src":"8413:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8424:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"8429:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8420:3:181"},"nodeType":"YulFunctionCall","src":"8420:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"8413:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"8351:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8356:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"8367:3:181","type":""}],"src":"8256:182:181"},{"body":{"nodeType":"YulBlock","src":"8636:281:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8653:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8664:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8646:6:181"},"nodeType":"YulFunctionCall","src":"8646:21:181"},"nodeType":"YulExpressionStatement","src":"8646:21:181"},{"nodeType":"YulVariableDeclaration","src":"8676:58:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8707:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8719:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8730:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8715:3:181"},"nodeType":"YulFunctionCall","src":"8715:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"8690:16:181"},"nodeType":"YulFunctionCall","src":"8690:44:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"8680:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8754:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8765:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8750:3:181"},"nodeType":"YulFunctionCall","src":"8750:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"8774:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8782:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8770:3:181"},"nodeType":"YulFunctionCall","src":"8770:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8743:6:181"},"nodeType":"YulFunctionCall","src":"8743:50:181"},"nodeType":"YulExpressionStatement","src":"8743:50:181"},{"nodeType":"YulAssignment","src":"8802:40:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"8827:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"8835:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"8810:16:181"},"nodeType":"YulFunctionCall","src":"8810:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8802:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8862:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8873:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8858:3:181"},"nodeType":"YulFunctionCall","src":"8858:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"8882:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8898:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"8903:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8894:3:181"},"nodeType":"YulFunctionCall","src":"8894:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"8907:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8890:3:181"},"nodeType":"YulFunctionCall","src":"8890:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8878:3:181"},"nodeType":"YulFunctionCall","src":"8878:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8851:6:181"},"nodeType":"YulFunctionCall","src":"8851:60:181"},"nodeType":"YulExpressionStatement","src":"8851:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8589:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8600:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8608:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8616:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8627:4:181","type":""}],"src":"8443:474:181"},{"body":{"nodeType":"YulBlock","src":"9096:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9113:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9124:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9106:6:181"},"nodeType":"YulFunctionCall","src":"9106:21:181"},"nodeType":"YulExpressionStatement","src":"9106:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9147:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9158:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9143:3:181"},"nodeType":"YulFunctionCall","src":"9143:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9163:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9136:6:181"},"nodeType":"YulFunctionCall","src":"9136:30:181"},"nodeType":"YulExpressionStatement","src":"9136:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9186:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9197:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9182:3:181"},"nodeType":"YulFunctionCall","src":"9182:18:181"},{"hexValue":"21726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"9202:14:181","type":"","value":"!rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9175:6:181"},"nodeType":"YulFunctionCall","src":"9175:42:181"},"nodeType":"YulExpressionStatement","src":"9175:42:181"},{"nodeType":"YulAssignment","src":"9226:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9238:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9249:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9234:3:181"},"nodeType":"YulFunctionCall","src":"9234:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9226:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9073:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9087:4:181","type":""}],"src":"8922:336:181"},{"body":{"nodeType":"YulBlock","src":"9437:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9454:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9465:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9447:6:181"},"nodeType":"YulFunctionCall","src":"9447:21:181"},"nodeType":"YulExpressionStatement","src":"9447:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9488:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9499:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9484:3:181"},"nodeType":"YulFunctionCall","src":"9484:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9504:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9477:6:181"},"nodeType":"YulFunctionCall","src":"9477:30:181"},"nodeType":"YulExpressionStatement","src":"9477:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9527:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9538:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9523:3:181"},"nodeType":"YulFunctionCall","src":"9523:18:181"},{"hexValue":"2164617461206c656e677468","kind":"string","nodeType":"YulLiteral","src":"9543:14:181","type":"","value":"!data length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9516:6:181"},"nodeType":"YulFunctionCall","src":"9516:42:181"},"nodeType":"YulExpressionStatement","src":"9516:42:181"},{"nodeType":"YulAssignment","src":"9567:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9579:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9590:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9575:3:181"},"nodeType":"YulFunctionCall","src":"9575:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9567:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9414:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9428:4:181","type":""}],"src":"9263:336:181"},{"body":{"nodeType":"YulBlock","src":"9778:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9795:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9806:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9788:6:181"},"nodeType":"YulFunctionCall","src":"9788:21:181"},"nodeType":"YulExpressionStatement","src":"9788:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9829:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9840:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9825:3:181"},"nodeType":"YulFunctionCall","src":"9825:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9845:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9818:6:181"},"nodeType":"YulFunctionCall","src":"9818:29:181"},"nodeType":"YulExpressionStatement","src":"9818:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9867:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9878:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9863:3:181"},"nodeType":"YulFunctionCall","src":"9863:18:181"},{"hexValue":"21414d42","kind":"string","nodeType":"YulLiteral","src":"9883:6:181","type":"","value":"!AMB"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9856:6:181"},"nodeType":"YulFunctionCall","src":"9856:34:181"},"nodeType":"YulExpressionStatement","src":"9856:34:181"},{"nodeType":"YulAssignment","src":"9899:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9911:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9922:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9907:3:181"},"nodeType":"YulFunctionCall","src":"9907:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9899:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9755:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9769:4:181","type":""}],"src":"9604:327:181"},{"body":{"nodeType":"YulBlock","src":"10083:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10100:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10111:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10093:6:181"},"nodeType":"YulFunctionCall","src":"10093:21:181"},"nodeType":"YulExpressionStatement","src":"10093:21:181"},{"nodeType":"YulAssignment","src":"10123:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10148:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10160:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10171:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10156:3:181"},"nodeType":"YulFunctionCall","src":"10156:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"10131:16:181"},"nodeType":"YulFunctionCall","src":"10131:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10123:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10195:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10206:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10191:3:181"},"nodeType":"YulFunctionCall","src":"10191:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10215:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10231:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"10236:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10227:3:181"},"nodeType":"YulFunctionCall","src":"10227:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"10240:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10223:3:181"},"nodeType":"YulFunctionCall","src":"10223:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10211:3:181"},"nodeType":"YulFunctionCall","src":"10211:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10184:6:181"},"nodeType":"YulFunctionCall","src":"10184:60:181"},"nodeType":"YulExpressionStatement","src":"10184:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10044:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10055:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10063:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10074:4:181","type":""}],"src":"9936:314:181"},{"body":{"nodeType":"YulBlock","src":"10429:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10446:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10457:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10439:6:181"},"nodeType":"YulFunctionCall","src":"10439:21:181"},"nodeType":"YulExpressionStatement","src":"10439:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10480:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10491:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10476:3:181"},"nodeType":"YulFunctionCall","src":"10476:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10496:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10469:6:181"},"nodeType":"YulFunctionCall","src":"10469:29:181"},"nodeType":"YulExpressionStatement","src":"10469:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10518:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10529:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10514:3:181"},"nodeType":"YulFunctionCall","src":"10514:18:181"},{"hexValue":"2170726f6f6673","kind":"string","nodeType":"YulLiteral","src":"10534:9:181","type":"","value":"!proofs"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10507:6:181"},"nodeType":"YulFunctionCall","src":"10507:37:181"},"nodeType":"YulExpressionStatement","src":"10507:37:181"},{"nodeType":"YulAssignment","src":"10553:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10565:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10576:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10561:3:181"},"nodeType":"YulFunctionCall","src":"10561:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10553:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10406:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10420:4:181","type":""}],"src":"10255:330:181"},{"body":{"nodeType":"YulBlock","src":"10622:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10639:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10646:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"10651:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10642:3:181"},"nodeType":"YulFunctionCall","src":"10642:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10632:6:181"},"nodeType":"YulFunctionCall","src":"10632:31:181"},"nodeType":"YulExpressionStatement","src":"10632:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10679:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10682:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10672:6:181"},"nodeType":"YulFunctionCall","src":"10672:15:181"},"nodeType":"YulExpressionStatement","src":"10672:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10703:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10706:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10696:6:181"},"nodeType":"YulFunctionCall","src":"10696:15:181"},"nodeType":"YulExpressionStatement","src":"10696:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"10590:127:181"},{"body":{"nodeType":"YulBlock","src":"10823:224:181","statements":[{"nodeType":"YulVariableDeclaration","src":"10833:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"10872:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10859:12:181"},"nodeType":"YulFunctionCall","src":"10859:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"10837:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10975:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10984:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10987:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10977:6:181"},"nodeType":"YulFunctionCall","src":"10977:12:181"},"nodeType":"YulExpressionStatement","src":"10977:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10907:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"10935:12:181"},"nodeType":"YulFunctionCall","src":"10935:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"10951:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10931:3:181"},"nodeType":"YulFunctionCall","src":"10931:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10966:4:181","type":"","value":"1086"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10962:3:181"},"nodeType":"YulFunctionCall","src":"10962:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10927:3:181"},"nodeType":"YulFunctionCall","src":"10927:45:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10903:3:181"},"nodeType":"YulFunctionCall","src":"10903:70:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10896:6:181"},"nodeType":"YulFunctionCall","src":"10896:78:181"},"nodeType":"YulIf","src":"10893:98:181"},{"nodeType":"YulAssignment","src":"11000:41:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"11012:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"11022:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11008:3:181"},"nodeType":"YulFunctionCall","src":"11008:33:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"11000:4:181"}]}]},"name":"access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"10788:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"10798:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"10814:4:181","type":""}],"src":"10722:325:181"},{"body":{"nodeType":"YulBlock","src":"11146:427:181","statements":[{"nodeType":"YulVariableDeclaration","src":"11156:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"11195:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11182:12:181"},"nodeType":"YulFunctionCall","src":"11182:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"11160:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"11296:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11305:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11308:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11298:6:181"},"nodeType":"YulFunctionCall","src":"11298:12:181"},"nodeType":"YulExpressionStatement","src":"11298:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"11230:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"11258:12:181"},"nodeType":"YulFunctionCall","src":"11258:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"11274:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11254:3:181"},"nodeType":"YulFunctionCall","src":"11254:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11289:2:181","type":"","value":"30"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11285:3:181"},"nodeType":"YulFunctionCall","src":"11285:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11250:3:181"},"nodeType":"YulFunctionCall","src":"11250:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11226:3:181"},"nodeType":"YulFunctionCall","src":"11226:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11219:6:181"},"nodeType":"YulFunctionCall","src":"11219:76:181"},"nodeType":"YulIf","src":"11216:96:181"},{"nodeType":"YulVariableDeclaration","src":"11321:47:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"11339:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"11349:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11335:3:181"},"nodeType":"YulFunctionCall","src":"11335:33:181"},"variables":[{"name":"addr_1","nodeType":"YulTypedName","src":"11325:6:181","type":""}]},{"nodeType":"YulAssignment","src":"11377:30:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"11400:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11387:12:181"},"nodeType":"YulFunctionCall","src":"11387:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"11377:6:181"}]},{"body":{"nodeType":"YulBlock","src":"11450:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11459:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11462:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11452:6:181"},"nodeType":"YulFunctionCall","src":"11452:12:181"},"nodeType":"YulExpressionStatement","src":"11452:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"11422:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11430:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11419:2:181"},"nodeType":"YulFunctionCall","src":"11419:30:181"},"nodeType":"YulIf","src":"11416:50:181"},{"nodeType":"YulAssignment","src":"11475:25:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"11487:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11495:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11483:3:181"},"nodeType":"YulFunctionCall","src":"11483:17:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"11475:4:181"}]},{"body":{"nodeType":"YulBlock","src":"11551:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11560:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11563:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11553:6:181"},"nodeType":"YulFunctionCall","src":"11553:12:181"},"nodeType":"YulExpressionStatement","src":"11553:12:181"}]},"condition":{"arguments":[{"name":"addr","nodeType":"YulIdentifier","src":"11516:4:181"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"11526:12:181"},"nodeType":"YulFunctionCall","src":"11526:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"11542:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11522:3:181"},"nodeType":"YulFunctionCall","src":"11522:27:181"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"11512:3:181"},"nodeType":"YulFunctionCall","src":"11512:38:181"},"nodeType":"YulIf","src":"11509:58:181"}]},"name":"access_calldata_tail_t_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"11103:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"11113:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"11129:4:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"11135:6:181","type":""}],"src":"11052:521:181"},{"body":{"nodeType":"YulBlock","src":"11725:124:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11748:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"11753:6:181"},{"name":"value1","nodeType":"YulIdentifier","src":"11761:6:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"11735:12:181"},"nodeType":"YulFunctionCall","src":"11735:33:181"},"nodeType":"YulExpressionStatement","src":"11735:33:181"},{"nodeType":"YulVariableDeclaration","src":"11777:26:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11791:3:181"},{"name":"value1","nodeType":"YulIdentifier","src":"11796:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11787:3:181"},"nodeType":"YulFunctionCall","src":"11787:16:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11781:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"11819:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"11823:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11812:6:181"},"nodeType":"YulFunctionCall","src":"11812:13:181"},"nodeType":"YulExpressionStatement","src":"11812:13:181"},{"nodeType":"YulAssignment","src":"11834:9:181","value":{"name":"_1","nodeType":"YulIdentifier","src":"11841:2:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"11834:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"11693:3:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11698:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11706:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"11717:3:181","type":""}],"src":"11578:271:181"},{"body":{"nodeType":"YulBlock","src":"12028:161:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12045:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12056:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12038:6:181"},"nodeType":"YulFunctionCall","src":"12038:21:181"},"nodeType":"YulExpressionStatement","src":"12038:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12079:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12090:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12075:3:181"},"nodeType":"YulFunctionCall","src":"12075:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12095:2:181","type":"","value":"11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12068:6:181"},"nodeType":"YulFunctionCall","src":"12068:30:181"},"nodeType":"YulExpressionStatement","src":"12068:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12118:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12129:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12114:3:181"},"nodeType":"YulFunctionCall","src":"12114:18:181"},{"hexValue":"21736861726564526f6f74","kind":"string","nodeType":"YulLiteral","src":"12134:13:181","type":"","value":"!sharedRoot"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12107:6:181"},"nodeType":"YulFunctionCall","src":"12107:41:181"},"nodeType":"YulExpressionStatement","src":"12107:41:181"},{"nodeType":"YulAssignment","src":"12157:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12169:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12180:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12165:3:181"},"nodeType":"YulFunctionCall","src":"12165:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12157:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12005:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12019:4:181","type":""}],"src":"11854:335:181"},{"body":{"nodeType":"YulBlock","src":"12368:171:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12385:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12396:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12378:6:181"},"nodeType":"YulFunctionCall","src":"12378:21:181"},"nodeType":"YulExpressionStatement","src":"12378:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12419:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12430:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12415:3:181"},"nodeType":"YulFunctionCall","src":"12415:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12435:2:181","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12408:6:181"},"nodeType":"YulFunctionCall","src":"12408:30:181"},"nodeType":"YulExpressionStatement","src":"12408:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12458:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12469:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12454:3:181"},"nodeType":"YulFunctionCall","src":"12454:18:181"},{"hexValue":"616767726567617465526f6f742021657869737473","kind":"string","nodeType":"YulLiteral","src":"12474:23:181","type":"","value":"aggregateRoot !exists"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12447:6:181"},"nodeType":"YulFunctionCall","src":"12447:51:181"},"nodeType":"YulExpressionStatement","src":"12447:51:181"},{"nodeType":"YulAssignment","src":"12507:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12519:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12530:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12515:3:181"},"nodeType":"YulFunctionCall","src":"12515:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12507:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12345:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12359:4:181","type":""}],"src":"12194:345:181"},{"body":{"nodeType":"YulBlock","src":"12622:199:181","statements":[{"body":{"nodeType":"YulBlock","src":"12668:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12677:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12680:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12670:6:181"},"nodeType":"YulFunctionCall","src":"12670:12:181"},"nodeType":"YulExpressionStatement","src":"12670:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12643:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"12652:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12639:3:181"},"nodeType":"YulFunctionCall","src":"12639:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"12664:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12635:3:181"},"nodeType":"YulFunctionCall","src":"12635:32:181"},"nodeType":"YulIf","src":"12632:52:181"},{"nodeType":"YulVariableDeclaration","src":"12693:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12712:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12706:5:181"},"nodeType":"YulFunctionCall","src":"12706:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12697:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"12775:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12784:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12787:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12777:6:181"},"nodeType":"YulFunctionCall","src":"12777:12:181"},"nodeType":"YulExpressionStatement","src":"12777:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12744:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12765:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12758:6:181"},"nodeType":"YulFunctionCall","src":"12758:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12751:6:181"},"nodeType":"YulFunctionCall","src":"12751:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"12741:2:181"},"nodeType":"YulFunctionCall","src":"12741:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12734:6:181"},"nodeType":"YulFunctionCall","src":"12734:40:181"},"nodeType":"YulIf","src":"12731:60:181"},{"nodeType":"YulAssignment","src":"12800:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"12810:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"12800:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12588:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12599:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12611:6:181","type":""}],"src":"12544:277:181"},{"body":{"nodeType":"YulBlock","src":"13000:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13017:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13028:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13010:6:181"},"nodeType":"YulFunctionCall","src":"13010:21:181"},"nodeType":"YulExpressionStatement","src":"13010:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13051:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13062:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13047:3:181"},"nodeType":"YulFunctionCall","src":"13047:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13067:1:181","type":"","value":"8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13040:6:181"},"nodeType":"YulFunctionCall","src":"13040:29:181"},"nodeType":"YulExpressionStatement","src":"13040:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13089:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13100:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13085:3:181"},"nodeType":"YulFunctionCall","src":"13085:18:181"},{"hexValue":"2177617463686572","kind":"string","nodeType":"YulLiteral","src":"13105:10:181","type":"","value":"!watcher"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13078:6:181"},"nodeType":"YulFunctionCall","src":"13078:38:181"},"nodeType":"YulExpressionStatement","src":"13078:38:181"},{"nodeType":"YulAssignment","src":"13125:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13137:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13148:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13133:3:181"},"nodeType":"YulFunctionCall","src":"13133:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13125:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12977:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12991:4:181","type":""}],"src":"12826:331:181"},{"body":{"nodeType":"YulBlock","src":"13211:79:181","statements":[{"nodeType":"YulAssignment","src":"13221:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13233:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"13236:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13229:3:181"},"nodeType":"YulFunctionCall","src":"13229:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"13221:4:181"}]},{"body":{"nodeType":"YulBlock","src":"13262:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13264:16:181"},"nodeType":"YulFunctionCall","src":"13264:18:181"},"nodeType":"YulExpressionStatement","src":"13264:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"13253:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"13259:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13250:2:181"},"nodeType":"YulFunctionCall","src":"13250:11:181"},"nodeType":"YulIf","src":"13247:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"13193:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"13196:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"13202:4:181","type":""}],"src":"13162:128:181"},{"body":{"nodeType":"YulBlock","src":"13469:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13486:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13497:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13479:6:181"},"nodeType":"YulFunctionCall","src":"13479:21:181"},"nodeType":"YulExpressionStatement","src":"13479:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13520:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13531:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13516:3:181"},"nodeType":"YulFunctionCall","src":"13516:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13536:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13509:6:181"},"nodeType":"YulFunctionCall","src":"13509:30:181"},"nodeType":"YulExpressionStatement","src":"13509:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13559:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13570:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13555:3:181"},"nodeType":"YulFunctionCall","src":"13555:18:181"},{"hexValue":"616c72656164792077617463686572206d616e61676572","kind":"string","nodeType":"YulLiteral","src":"13575:25:181","type":"","value":"already watcher manager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13548:6:181"},"nodeType":"YulFunctionCall","src":"13548:53:181"},"nodeType":"YulExpressionStatement","src":"13548:53:181"},{"nodeType":"YulAssignment","src":"13610:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13622:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13633:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13618:3:181"},"nodeType":"YulFunctionCall","src":"13618:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13610:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13446:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13460:4:181","type":""}],"src":"13295:347:181"},{"body":{"nodeType":"YulBlock","src":"13821:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13838:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13849:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13831:6:181"},"nodeType":"YulFunctionCall","src":"13831:21:181"},"nodeType":"YulExpressionStatement","src":"13831:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13872:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13883:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13868:3:181"},"nodeType":"YulFunctionCall","src":"13868:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13888:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13861:6:181"},"nodeType":"YulFunctionCall","src":"13861:30:181"},"nodeType":"YulExpressionStatement","src":"13861:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13911:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13922:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13907:3:181"},"nodeType":"YulFunctionCall","src":"13907:18:181"},{"hexValue":"21616c6c6f776c6973746564","kind":"string","nodeType":"YulLiteral","src":"13927:14:181","type":"","value":"!allowlisted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13900:6:181"},"nodeType":"YulFunctionCall","src":"13900:42:181"},"nodeType":"YulExpressionStatement","src":"13900:42:181"},{"nodeType":"YulAssignment","src":"13951:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13963:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13974:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13959:3:181"},"nodeType":"YulFunctionCall","src":"13959:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13951:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13798:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13812:4:181","type":""}],"src":"13647:336:181"},{"body":{"nodeType":"YulBlock","src":"14034:155:181","statements":[{"nodeType":"YulVariableDeclaration","src":"14044:20:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14054:10:181","type":"","value":"0xffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14048:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"14073:29:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14092:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14099:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14088:3:181"},"nodeType":"YulFunctionCall","src":"14088:14:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"14077:7:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"14130:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14132:16:181"},"nodeType":"YulFunctionCall","src":"14132:18:181"},"nodeType":"YulExpressionStatement","src":"14132:18:181"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"14117:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14126:2:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"14114:2:181"},"nodeType":"YulFunctionCall","src":"14114:15:181"},"nodeType":"YulIf","src":"14111:41:181"},{"nodeType":"YulAssignment","src":"14161:22:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"14172:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"14181:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14168:3:181"},"nodeType":"YulFunctionCall","src":"14168:15:181"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"14161:3:181"}]}]},"name":"increment_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"14016:5:181","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"14026:3:181","type":""}],"src":"13988:201:181"},{"body":{"nodeType":"YulBlock","src":"14292:147:181","statements":[{"body":{"nodeType":"YulBlock","src":"14338:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14347:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14350:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14340:6:181"},"nodeType":"YulFunctionCall","src":"14340:12:181"},"nodeType":"YulExpressionStatement","src":"14340:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14313:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"14322:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14309:3:181"},"nodeType":"YulFunctionCall","src":"14309:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"14334:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14305:3:181"},"nodeType":"YulFunctionCall","src":"14305:32:181"},"nodeType":"YulIf","src":"14302:52:181"},{"nodeType":"YulAssignment","src":"14363:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14379:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14373:5:181"},"nodeType":"YulFunctionCall","src":"14373:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14363:6:181"}]},{"nodeType":"YulAssignment","src":"14398:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14418:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14429:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14414:3:181"},"nodeType":"YulFunctionCall","src":"14414:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14408:5:181"},"nodeType":"YulFunctionCall","src":"14408:25:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"14398:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14250:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14261:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14273:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14281:6:181","type":""}],"src":"14194:245:181"},{"body":{"nodeType":"YulBlock","src":"14647:229:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14664:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"14675:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14657:6:181"},"nodeType":"YulFunctionCall","src":"14657:25:181"},"nodeType":"YulExpressionStatement","src":"14657:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14702:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14713:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14698:3:181"},"nodeType":"YulFunctionCall","src":"14698:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"14718:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14691:6:181"},"nodeType":"YulFunctionCall","src":"14691:34:181"},"nodeType":"YulExpressionStatement","src":"14691:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14745:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14756:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14741:3:181"},"nodeType":"YulFunctionCall","src":"14741:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"14761:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14734:6:181"},"nodeType":"YulFunctionCall","src":"14734:34:181"},"nodeType":"YulExpressionStatement","src":"14734:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14788:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14799:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14784:3:181"},"nodeType":"YulFunctionCall","src":"14784:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14804:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14777:6:181"},"nodeType":"YulFunctionCall","src":"14777:31:181"},"nodeType":"YulExpressionStatement","src":"14777:31:181"},{"nodeType":"YulAssignment","src":"14817:53:181","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"14842:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14854:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14865:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14850:3:181"},"nodeType":"YulFunctionCall","src":"14850:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"14825:16:181"},"nodeType":"YulFunctionCall","src":"14825:45:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14817:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14592:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14603:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14611:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14619:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14627:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14638:4:181","type":""}],"src":"14444:432:181"},{"body":{"nodeType":"YulBlock","src":"15055:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15072:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15083:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15065:6:181"},"nodeType":"YulFunctionCall","src":"15065:21:181"},"nodeType":"YulExpressionStatement","src":"15065:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15106:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15117:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15102:3:181"},"nodeType":"YulFunctionCall","src":"15102:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15122:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15095:6:181"},"nodeType":"YulFunctionCall","src":"15095:30:181"},"nodeType":"YulExpressionStatement","src":"15095:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15145:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15156:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15141:3:181"},"nodeType":"YulFunctionCall","src":"15141:18:181"},{"hexValue":"5061757361626c653a20706175736564","kind":"string","nodeType":"YulLiteral","src":"15161:18:181","type":"","value":"Pausable: paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15134:6:181"},"nodeType":"YulFunctionCall","src":"15134:46:181"},"nodeType":"YulExpressionStatement","src":"15134:46:181"},{"nodeType":"YulAssignment","src":"15189:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15201:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15212:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15197:3:181"},"nodeType":"YulFunctionCall","src":"15197:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15189:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15032:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15046:4:181","type":""}],"src":"14881:340:181"},{"body":{"nodeType":"YulBlock","src":"15400:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15417:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15428:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15410:6:181"},"nodeType":"YulFunctionCall","src":"15410:21:181"},"nodeType":"YulExpressionStatement","src":"15410:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15451:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15462:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15447:3:181"},"nodeType":"YulFunctionCall","src":"15447:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15467:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15440:6:181"},"nodeType":"YulFunctionCall","src":"15440:29:181"},"nodeType":"YulExpressionStatement","src":"15440:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15489:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15500:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15485:3:181"},"nodeType":"YulFunctionCall","src":"15485:18:181"},{"hexValue":"216c656e677468","kind":"string","nodeType":"YulLiteral","src":"15505:9:181","type":"","value":"!length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15478:6:181"},"nodeType":"YulFunctionCall","src":"15478:37:181"},"nodeType":"YulExpressionStatement","src":"15478:37:181"},{"nodeType":"YulAssignment","src":"15524:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15536:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15547:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15532:3:181"},"nodeType":"YulFunctionCall","src":"15532:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15524:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15377:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15391:4:181","type":""}],"src":"15226:330:181"},{"body":{"nodeType":"YulBlock","src":"15655:203:181","statements":[{"nodeType":"YulVariableDeclaration","src":"15665:26:181","value":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"15685:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15679:5:181"},"nodeType":"YulFunctionCall","src":"15679:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"15669:6:181","type":""}]},{"nodeType":"YulAssignment","src":"15700:32:181","value":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"15719:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"15726:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15715:3:181"},"nodeType":"YulFunctionCall","src":"15715:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15709:5:181"},"nodeType":"YulFunctionCall","src":"15709:23:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"15700:5:181"}]},{"body":{"nodeType":"YulBlock","src":"15769:83:181","statements":[{"nodeType":"YulAssignment","src":"15783:59:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15796:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15811:1:181","type":"","value":"3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15818:4:181","type":"","value":"0x20"},{"name":"length","nodeType":"YulIdentifier","src":"15824:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15814:3:181"},"nodeType":"YulFunctionCall","src":"15814:17:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"15807:3:181"},"nodeType":"YulFunctionCall","src":"15807:25:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15838:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"15834:3:181"},"nodeType":"YulFunctionCall","src":"15834:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"15803:3:181"},"nodeType":"YulFunctionCall","src":"15803:38:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15792:3:181"},"nodeType":"YulFunctionCall","src":"15792:50:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"15783:5:181"}]}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"15747:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"15755:4:181","type":"","value":"0x20"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15744:2:181"},"nodeType":"YulFunctionCall","src":"15744:16:181"},"nodeType":"YulIf","src":"15741:111:181"}]},"name":"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nodeType":"YulTypedName","src":"15635:5:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"15645:5:181","type":""}],"src":"15561:297:181"},{"body":{"nodeType":"YulBlock","src":"15990:136:181","statements":[{"nodeType":"YulAssignment","src":"16000:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16012:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16023:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16008:3:181"},"nodeType":"YulFunctionCall","src":"16008:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16000:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16042:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16057:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"16065:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16053:3:181"},"nodeType":"YulFunctionCall","src":"16053:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16035:6:181"},"nodeType":"YulFunctionCall","src":"16035:42:181"},"nodeType":"YulExpressionStatement","src":"16035:42:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16097:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16108:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16093:3:181"},"nodeType":"YulFunctionCall","src":"16093:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"16113:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16086:6:181"},"nodeType":"YulFunctionCall","src":"16086:34:181"},"nodeType":"YulExpressionStatement","src":"16086:34:181"}]},"name":"abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15951:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15962:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15970:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15981:4:181","type":""}],"src":"15863:263:181"},{"body":{"nodeType":"YulBlock","src":"16305:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16322:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16333:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16315:6:181"},"nodeType":"YulFunctionCall","src":"16315:21:181"},"nodeType":"YulExpressionStatement","src":"16315:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16356:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16367:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16352:3:181"},"nodeType":"YulFunctionCall","src":"16352:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16372:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16345:6:181"},"nodeType":"YulFunctionCall","src":"16345:30:181"},"nodeType":"YulExpressionStatement","src":"16345:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16395:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16406:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16391:3:181"},"nodeType":"YulFunctionCall","src":"16391:18:181"},{"hexValue":"5061757361626c653a206e6f7420706175736564","kind":"string","nodeType":"YulLiteral","src":"16411:22:181","type":"","value":"Pausable: not paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16384:6:181"},"nodeType":"YulFunctionCall","src":"16384:50:181"},"nodeType":"YulExpressionStatement","src":"16384:50:181"},{"nodeType":"YulAssignment","src":"16443:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16455:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16466:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16451:3:181"},"nodeType":"YulFunctionCall","src":"16451:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16443:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16282:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16296:4:181","type":""}],"src":"16131:344:181"},{"body":{"nodeType":"YulBlock","src":"16654:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16671:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16682:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16664:6:181"},"nodeType":"YulFunctionCall","src":"16664:21:181"},"nodeType":"YulExpressionStatement","src":"16664:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16705:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16716:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16701:3:181"},"nodeType":"YulFunctionCall","src":"16701:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16721:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16694:6:181"},"nodeType":"YulFunctionCall","src":"16694:30:181"},"nodeType":"YulExpressionStatement","src":"16694:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16744:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16755:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16740:3:181"},"nodeType":"YulFunctionCall","src":"16740:18:181"},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","kind":"string","nodeType":"YulLiteral","src":"16760:33:181","type":"","value":"ReentrancyGuard: reentrant call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16733:6:181"},"nodeType":"YulFunctionCall","src":"16733:61:181"},"nodeType":"YulExpressionStatement","src":"16733:61:181"},{"nodeType":"YulAssignment","src":"16803:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16815:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16826:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16811:3:181"},"nodeType":"YulFunctionCall","src":"16811:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16803:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16631:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16645:4:181","type":""}],"src":"16480:355:181"},{"body":{"nodeType":"YulBlock","src":"17014:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17031:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17042:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17024:6:181"},"nodeType":"YulFunctionCall","src":"17024:21:181"},"nodeType":"YulExpressionStatement","src":"17024:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17065:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17076:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17061:3:181"},"nodeType":"YulFunctionCall","src":"17061:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17081:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17054:6:181"},"nodeType":"YulFunctionCall","src":"17054:30:181"},"nodeType":"YulExpressionStatement","src":"17054:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17104:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17115:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17100:3:181"},"nodeType":"YulFunctionCall","src":"17100:18:181"},{"hexValue":"214d6573736167655374617475732e4e6f6e65","kind":"string","nodeType":"YulLiteral","src":"17120:21:181","type":"","value":"!MessageStatus.None"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17093:6:181"},"nodeType":"YulFunctionCall","src":"17093:49:181"},"nodeType":"YulExpressionStatement","src":"17093:49:181"},{"nodeType":"YulAssignment","src":"17151:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17163:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17174:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17159:3:181"},"nodeType":"YulFunctionCall","src":"17159:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17151:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16991:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17005:4:181","type":""}],"src":"16840:343:181"},{"body":{"nodeType":"YulBlock","src":"17362:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17379:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17390:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17372:6:181"},"nodeType":"YulFunctionCall","src":"17372:21:181"},"nodeType":"YulExpressionStatement","src":"17372:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17413:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17424:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17409:3:181"},"nodeType":"YulFunctionCall","src":"17409:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17429:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17402:6:181"},"nodeType":"YulFunctionCall","src":"17402:30:181"},"nodeType":"YulExpressionStatement","src":"17402:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17452:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17463:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17448:3:181"},"nodeType":"YulFunctionCall","src":"17448:18:181"},{"hexValue":"696e76616c696420696e626f756e64526f6f74","kind":"string","nodeType":"YulLiteral","src":"17468:21:181","type":"","value":"invalid inboundRoot"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17441:6:181"},"nodeType":"YulFunctionCall","src":"17441:49:181"},"nodeType":"YulExpressionStatement","src":"17441:49:181"},{"nodeType":"YulAssignment","src":"17499:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17511:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17522:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17507:3:181"},"nodeType":"YulFunctionCall","src":"17507:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17499:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17339:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17353:4:181","type":""}],"src":"17188:343:181"},{"body":{"nodeType":"YulBlock","src":"17710:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17727:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17738:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17720:6:181"},"nodeType":"YulFunctionCall","src":"17720:21:181"},"nodeType":"YulExpressionStatement","src":"17720:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17761:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17772:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17757:3:181"},"nodeType":"YulFunctionCall","src":"17757:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17777:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17750:6:181"},"nodeType":"YulFunctionCall","src":"17750:30:181"},"nodeType":"YulExpressionStatement","src":"17750:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17800:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17811:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17796:3:181"},"nodeType":"YulFunctionCall","src":"17796:18:181"},{"hexValue":"2164657374696e6174696f6e","kind":"string","nodeType":"YulLiteral","src":"17816:14:181","type":"","value":"!destination"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17789:6:181"},"nodeType":"YulFunctionCall","src":"17789:42:181"},"nodeType":"YulExpressionStatement","src":"17789:42:181"},{"nodeType":"YulAssignment","src":"17840:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17852:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17863:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17848:3:181"},"nodeType":"YulFunctionCall","src":"17848:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17840:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17687:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17701:4:181","type":""}],"src":"17536:336:181"},{"body":{"nodeType":"YulBlock","src":"18051:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18068:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18079:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18061:6:181"},"nodeType":"YulFunctionCall","src":"18061:21:181"},"nodeType":"YulExpressionStatement","src":"18061:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18102:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18113:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18098:3:181"},"nodeType":"YulFunctionCall","src":"18098:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18118:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18091:6:181"},"nodeType":"YulFunctionCall","src":"18091:29:181"},"nodeType":"YulExpressionStatement","src":"18091:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18140:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18151:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18136:3:181"},"nodeType":"YulFunctionCall","src":"18136:18:181"},{"hexValue":"2170726f76656e","kind":"string","nodeType":"YulLiteral","src":"18156:9:181","type":"","value":"!proven"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18129:6:181"},"nodeType":"YulFunctionCall","src":"18129:37:181"},"nodeType":"YulExpressionStatement","src":"18129:37:181"},{"nodeType":"YulAssignment","src":"18175:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18187:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18198:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18183:3:181"},"nodeType":"YulFunctionCall","src":"18183:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18175:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18028:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18042:4:181","type":""}],"src":"17877:330:181"},{"body":{"nodeType":"YulBlock","src":"18386:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18403:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18414:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18396:6:181"},"nodeType":"YulFunctionCall","src":"18396:21:181"},"nodeType":"YulExpressionStatement","src":"18396:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18437:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18448:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18433:3:181"},"nodeType":"YulFunctionCall","src":"18433:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18453:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18426:6:181"},"nodeType":"YulFunctionCall","src":"18426:29:181"},"nodeType":"YulExpressionStatement","src":"18426:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18475:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18486:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18471:3:181"},"nodeType":"YulFunctionCall","src":"18471:18:181"},{"hexValue":"21676173","kind":"string","nodeType":"YulLiteral","src":"18491:6:181","type":"","value":"!gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18464:6:181"},"nodeType":"YulFunctionCall","src":"18464:34:181"},"nodeType":"YulExpressionStatement","src":"18464:34:181"},{"nodeType":"YulAssignment","src":"18507:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18519:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18530:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18515:3:181"},"nodeType":"YulFunctionCall","src":"18515:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18507:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18363:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18377:4:181","type":""}],"src":"18212:327:181"},{"body":{"nodeType":"YulBlock","src":"18743:276:181","statements":[{"nodeType":"YulVariableDeclaration","src":"18753:20:181","value":{"kind":"number","nodeType":"YulLiteral","src":"18763:10:181","type":"","value":"0xffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18757:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18789:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18804:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"18812:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18800:3:181"},"nodeType":"YulFunctionCall","src":"18800:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18782:6:181"},"nodeType":"YulFunctionCall","src":"18782:34:181"},"nodeType":"YulExpressionStatement","src":"18782:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18836:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18847:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18832:3:181"},"nodeType":"YulFunctionCall","src":"18832:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"18856:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"18864:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18852:3:181"},"nodeType":"YulFunctionCall","src":"18852:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18825:6:181"},"nodeType":"YulFunctionCall","src":"18825:43:181"},"nodeType":"YulExpressionStatement","src":"18825:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18888:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18899:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18884:3:181"},"nodeType":"YulFunctionCall","src":"18884:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"18904:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18877:6:181"},"nodeType":"YulFunctionCall","src":"18877:34:181"},"nodeType":"YulExpressionStatement","src":"18877:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18931:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18942:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18927:3:181"},"nodeType":"YulFunctionCall","src":"18927:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18947:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18920:6:181"},"nodeType":"YulFunctionCall","src":"18920:31:181"},"nodeType":"YulExpressionStatement","src":"18920:31:181"},{"nodeType":"YulAssignment","src":"18960:53:181","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"18985:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18997:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19008:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18993:3:181"},"nodeType":"YulFunctionCall","src":"18993:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"18968:16:181"},"nodeType":"YulFunctionCall","src":"18968:45:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18960:4:181"}]}]},"name":"abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18688:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"18699:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"18707:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18715:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18723:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18734:4:181","type":""}],"src":"18544:475:181"},{"body":{"nodeType":"YulBlock","src":"19193:200:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19210:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"19221:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19203:6:181"},"nodeType":"YulFunctionCall","src":"19203:25:181"},"nodeType":"YulExpressionStatement","src":"19203:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19248:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19259:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19244:3:181"},"nodeType":"YulFunctionCall","src":"19244:18:181"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"19278:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19271:6:181"},"nodeType":"YulFunctionCall","src":"19271:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19264:6:181"},"nodeType":"YulFunctionCall","src":"19264:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19237:6:181"},"nodeType":"YulFunctionCall","src":"19237:50:181"},"nodeType":"YulExpressionStatement","src":"19237:50:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19307:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19318:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19303:3:181"},"nodeType":"YulFunctionCall","src":"19303:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19323:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19296:6:181"},"nodeType":"YulFunctionCall","src":"19296:30:181"},"nodeType":"YulExpressionStatement","src":"19296:30:181"},{"nodeType":"YulAssignment","src":"19335:52:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"19360:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19372:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19383:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19368:3:181"},"nodeType":"YulFunctionCall","src":"19368:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"19343:16:181"},"nodeType":"YulFunctionCall","src":"19343:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19335:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19146:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"19157:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19165:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19173:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19184:4:181","type":""}],"src":"19024:369:181"},{"body":{"nodeType":"YulBlock","src":"19527:175:181","statements":[{"nodeType":"YulAssignment","src":"19537:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19549:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19560:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19545:3:181"},"nodeType":"YulFunctionCall","src":"19545:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19537:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"19572:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19590:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"19595:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"19586:3:181"},"nodeType":"YulFunctionCall","src":"19586:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"19599:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19582:3:181"},"nodeType":"YulFunctionCall","src":"19582:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"19576:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19617:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19632:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"19640:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19628:3:181"},"nodeType":"YulFunctionCall","src":"19628:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19610:6:181"},"nodeType":"YulFunctionCall","src":"19610:34:181"},"nodeType":"YulExpressionStatement","src":"19610:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19664:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19675:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19660:3:181"},"nodeType":"YulFunctionCall","src":"19660:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"19684:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"19692:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19680:3:181"},"nodeType":"YulFunctionCall","src":"19680:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19653:6:181"},"nodeType":"YulFunctionCall","src":"19653:43:181"},"nodeType":"YulExpressionStatement","src":"19653:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19488:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19499:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19507:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19518:4:181","type":""}],"src":"19398:304:181"},{"body":{"nodeType":"YulBlock","src":"19881:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19898:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19909:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19891:6:181"},"nodeType":"YulFunctionCall","src":"19891:21:181"},"nodeType":"YulExpressionStatement","src":"19891:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19932:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19943:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19928:3:181"},"nodeType":"YulFunctionCall","src":"19928:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19948:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19921:6:181"},"nodeType":"YulFunctionCall","src":"19921:30:181"},"nodeType":"YulExpressionStatement","src":"19921:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19971:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19982:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19967:3:181"},"nodeType":"YulFunctionCall","src":"19967:18:181"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","kind":"string","nodeType":"YulLiteral","src":"19987:31:181","type":"","value":"Address: insufficient balance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19960:6:181"},"nodeType":"YulFunctionCall","src":"19960:59:181"},"nodeType":"YulExpressionStatement","src":"19960:59:181"},{"nodeType":"YulAssignment","src":"20028:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20040:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20051:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20036:3:181"},"nodeType":"YulFunctionCall","src":"20036:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20028:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19858:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19872:4:181","type":""}],"src":"19707:353:181"},{"body":{"nodeType":"YulBlock","src":"20256:14:181","statements":[{"nodeType":"YulAssignment","src":"20258:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"20265:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"20258:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"20240:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"20248:3:181","type":""}],"src":"20065:205:181"},{"body":{"nodeType":"YulBlock","src":"20449:248:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20466:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20477:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20459:6:181"},"nodeType":"YulFunctionCall","src":"20459:21:181"},"nodeType":"YulExpressionStatement","src":"20459:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20500:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20511:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20496:3:181"},"nodeType":"YulFunctionCall","src":"20496:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20516:2:181","type":"","value":"58"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20489:6:181"},"nodeType":"YulFunctionCall","src":"20489:30:181"},"nodeType":"YulExpressionStatement","src":"20489:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20539:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20550:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20535:3:181"},"nodeType":"YulFunctionCall","src":"20535:18:181"},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c2072","kind":"string","nodeType":"YulLiteral","src":"20555:34:181","type":"","value":"Address: unable to send value, r"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20528:6:181"},"nodeType":"YulFunctionCall","src":"20528:62:181"},"nodeType":"YulExpressionStatement","src":"20528:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20610:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20621:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20606:3:181"},"nodeType":"YulFunctionCall","src":"20606:18:181"},{"hexValue":"6563697069656e74206d61792068617665207265766572746564","kind":"string","nodeType":"YulLiteral","src":"20626:28:181","type":"","value":"ecipient may have reverted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20599:6:181"},"nodeType":"YulFunctionCall","src":"20599:56:181"},"nodeType":"YulExpressionStatement","src":"20599:56:181"},{"nodeType":"YulAssignment","src":"20664:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20676:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20687:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20672:3:181"},"nodeType":"YulFunctionCall","src":"20672:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20664:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20426:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20440:4:181","type":""}],"src":"20275:422:181"},{"body":{"nodeType":"YulBlock","src":"20876:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20893:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20904:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20886:6:181"},"nodeType":"YulFunctionCall","src":"20886:21:181"},"nodeType":"YulExpressionStatement","src":"20886:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20927:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20938:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20923:3:181"},"nodeType":"YulFunctionCall","src":"20923:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20943:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20916:6:181"},"nodeType":"YulFunctionCall","src":"20916:30:181"},"nodeType":"YulExpressionStatement","src":"20916:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20966:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20977:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20962:3:181"},"nodeType":"YulFunctionCall","src":"20962:18:181"},{"hexValue":"216e65772072617465206c696d6974","kind":"string","nodeType":"YulLiteral","src":"20982:17:181","type":"","value":"!new rate limit"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20955:6:181"},"nodeType":"YulFunctionCall","src":"20955:45:181"},"nodeType":"YulExpressionStatement","src":"20955:45:181"},{"nodeType":"YulAssignment","src":"21009:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21021:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21032:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21017:3:181"},"nodeType":"YulFunctionCall","src":"21017:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21009:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20853:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20867:4:181","type":""}],"src":"20702:339:181"},{"body":{"nodeType":"YulBlock","src":"21175:145:181","statements":[{"nodeType":"YulAssignment","src":"21185:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21197:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21208:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21193:3:181"},"nodeType":"YulFunctionCall","src":"21193:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21185:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21227:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"21242:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21258:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"21263:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21254:3:181"},"nodeType":"YulFunctionCall","src":"21254:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"21267:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21250:3:181"},"nodeType":"YulFunctionCall","src":"21250:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21238:3:181"},"nodeType":"YulFunctionCall","src":"21238:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21220:6:181"},"nodeType":"YulFunctionCall","src":"21220:51:181"},"nodeType":"YulExpressionStatement","src":"21220:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21291:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21302:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21287:3:181"},"nodeType":"YulFunctionCall","src":"21287:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"21307:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21280:6:181"},"nodeType":"YulFunctionCall","src":"21280:34:181"},"nodeType":"YulExpressionStatement","src":"21280:34:181"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21136:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21147:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"21155:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21166:4:181","type":""}],"src":"21046:274:181"},{"body":{"nodeType":"YulBlock","src":"21596:439:181","statements":[{"nodeType":"YulVariableDeclaration","src":"21606:30:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21620:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"21625:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21616:3:181"},"nodeType":"YulFunctionCall","src":"21616:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"21610:2:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21652:3:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21665:3:181","type":"","value":"224"},{"name":"value0","nodeType":"YulIdentifier","src":"21670:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21661:3:181"},"nodeType":"YulFunctionCall","src":"21661:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21679:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21657:3:181"},"nodeType":"YulFunctionCall","src":"21657:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21645:6:181"},"nodeType":"YulFunctionCall","src":"21645:38:181"},"nodeType":"YulExpressionStatement","src":"21645:38:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21703:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21708:1:181","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21699:3:181"},"nodeType":"YulFunctionCall","src":"21699:11:181"},{"name":"value1","nodeType":"YulIdentifier","src":"21712:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21692:6:181"},"nodeType":"YulFunctionCall","src":"21692:27:181"},"nodeType":"YulExpressionStatement","src":"21692:27:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21739:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21744:2:181","type":"","value":"36"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21735:3:181"},"nodeType":"YulFunctionCall","src":"21735:12:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21757:3:181","type":"","value":"224"},{"name":"value2","nodeType":"YulIdentifier","src":"21762:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21753:3:181"},"nodeType":"YulFunctionCall","src":"21753:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21771:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21749:3:181"},"nodeType":"YulFunctionCall","src":"21749:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21728:6:181"},"nodeType":"YulFunctionCall","src":"21728:47:181"},"nodeType":"YulExpressionStatement","src":"21728:47:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21795:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21800:2:181","type":"","value":"40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21791:3:181"},"nodeType":"YulFunctionCall","src":"21791:12:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21813:3:181","type":"","value":"224"},{"name":"value3","nodeType":"YulIdentifier","src":"21818:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21809:3:181"},"nodeType":"YulFunctionCall","src":"21809:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21827:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21805:3:181"},"nodeType":"YulFunctionCall","src":"21805:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21784:6:181"},"nodeType":"YulFunctionCall","src":"21784:47:181"},"nodeType":"YulExpressionStatement","src":"21784:47:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21851:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21856:2:181","type":"","value":"44"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21847:3:181"},"nodeType":"YulFunctionCall","src":"21847:12:181"},{"name":"value4","nodeType":"YulIdentifier","src":"21861:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21840:6:181"},"nodeType":"YulFunctionCall","src":"21840:28:181"},"nodeType":"YulExpressionStatement","src":"21840:28:181"},{"nodeType":"YulVariableDeclaration","src":"21877:27:181","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"21897:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"21891:5:181"},"nodeType":"YulFunctionCall","src":"21891:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"21881:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"21952:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"21960:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21948:3:181"},"nodeType":"YulFunctionCall","src":"21948:17:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21971:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21976:2:181","type":"","value":"76"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21967:3:181"},"nodeType":"YulFunctionCall","src":"21967:12:181"},{"name":"length","nodeType":"YulIdentifier","src":"21981:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"21913:34:181"},"nodeType":"YulFunctionCall","src":"21913:75:181"},"nodeType":"YulExpressionStatement","src":"21913:75:181"},{"nodeType":"YulAssignment","src":"21997:32:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"22012:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"22017:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22008:3:181"},"nodeType":"YulFunctionCall","src":"22008:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"22026:2:181","type":"","value":"76"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22004:3:181"},"nodeType":"YulFunctionCall","src":"22004:25:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"21997:3:181"}]}]},"name":"abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"21532:3:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"21537:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"21545:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"21553:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"21561:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21569:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"21577:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"21588:3:181","type":""}],"src":"21325:710:181"},{"body":{"nodeType":"YulBlock","src":"22214:164:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22231:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22242:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22224:6:181"},"nodeType":"YulFunctionCall","src":"22224:21:181"},"nodeType":"YulExpressionStatement","src":"22224:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22265:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22276:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22261:3:181"},"nodeType":"YulFunctionCall","src":"22261:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22281:2:181","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22254:6:181"},"nodeType":"YulFunctionCall","src":"22254:30:181"},"nodeType":"YulExpressionStatement","src":"22254:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22304:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22315:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22300:3:181"},"nodeType":"YulFunctionCall","src":"22300:18:181"},{"hexValue":"6e657720726f6f7420656d707479","kind":"string","nodeType":"YulLiteral","src":"22320:16:181","type":"","value":"new root empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22293:6:181"},"nodeType":"YulFunctionCall","src":"22293:44:181"},"nodeType":"YulExpressionStatement","src":"22293:44:181"},{"nodeType":"YulAssignment","src":"22346:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22358:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22369:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22354:3:181"},"nodeType":"YulFunctionCall","src":"22354:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22346:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22191:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22205:4:181","type":""}],"src":"22040:338:181"},{"body":{"nodeType":"YulBlock","src":"22557:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22574:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22585:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22567:6:181"},"nodeType":"YulFunctionCall","src":"22567:21:181"},"nodeType":"YulExpressionStatement","src":"22567:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22608:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22619:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22604:3:181"},"nodeType":"YulFunctionCall","src":"22604:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22624:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22597:6:181"},"nodeType":"YulFunctionCall","src":"22597:30:181"},"nodeType":"YulExpressionStatement","src":"22597:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22647:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22658:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22643:3:181"},"nodeType":"YulFunctionCall","src":"22643:18:181"},{"hexValue":"726f6f7420616c72656164792070656e64696e67","kind":"string","nodeType":"YulLiteral","src":"22663:22:181","type":"","value":"root already pending"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22636:6:181"},"nodeType":"YulFunctionCall","src":"22636:50:181"},"nodeType":"YulExpressionStatement","src":"22636:50:181"},{"nodeType":"YulAssignment","src":"22695:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22707:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22718:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22703:3:181"},"nodeType":"YulFunctionCall","src":"22703:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22695:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22534:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22548:4:181","type":""}],"src":"22383:344:181"},{"body":{"nodeType":"YulBlock","src":"22906:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22923:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22934:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22916:6:181"},"nodeType":"YulFunctionCall","src":"22916:21:181"},"nodeType":"YulExpressionStatement","src":"22916:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22957:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22968:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22953:3:181"},"nodeType":"YulFunctionCall","src":"22953:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22973:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22946:6:181"},"nodeType":"YulFunctionCall","src":"22946:30:181"},"nodeType":"YulExpressionStatement","src":"22946:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22996:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23007:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22992:3:181"},"nodeType":"YulFunctionCall","src":"22992:18:181"},{"hexValue":"726f6f7420616c72656164792070726f76656e","kind":"string","nodeType":"YulLiteral","src":"23012:21:181","type":"","value":"root already proven"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22985:6:181"},"nodeType":"YulFunctionCall","src":"22985:49:181"},"nodeType":"YulExpressionStatement","src":"22985:49:181"},{"nodeType":"YulAssignment","src":"23043:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23055:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23066:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23051:3:181"},"nodeType":"YulFunctionCall","src":"23051:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23043:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22883:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22897:4:181","type":""}],"src":"22732:343:181"},{"body":{"nodeType":"YulBlock","src":"23254:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23271:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23282:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23264:6:181"},"nodeType":"YulFunctionCall","src":"23264:21:181"},"nodeType":"YulExpressionStatement","src":"23264:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23305:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23316:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23301:3:181"},"nodeType":"YulFunctionCall","src":"23301:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23321:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23294:6:181"},"nodeType":"YulFunctionCall","src":"23294:30:181"},"nodeType":"YulExpressionStatement","src":"23294:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23344:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23355:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23340:3:181"},"nodeType":"YulFunctionCall","src":"23340:18:181"},{"hexValue":"616767726567617465526f6f7420656d707479","kind":"string","nodeType":"YulLiteral","src":"23360:21:181","type":"","value":"aggregateRoot empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23333:6:181"},"nodeType":"YulFunctionCall","src":"23333:49:181"},"nodeType":"YulExpressionStatement","src":"23333:49:181"},{"nodeType":"YulAssignment","src":"23391:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23403:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23414:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23399:3:181"},"nodeType":"YulFunctionCall","src":"23399:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23391:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23231:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23245:4:181","type":""}],"src":"23080:343:181"},{"body":{"nodeType":"YulBlock","src":"23602:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23619:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23630:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23612:6:181"},"nodeType":"YulFunctionCall","src":"23612:21:181"},"nodeType":"YulExpressionStatement","src":"23612:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23653:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23664:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23649:3:181"},"nodeType":"YulFunctionCall","src":"23649:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23669:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23642:6:181"},"nodeType":"YulFunctionCall","src":"23642:30:181"},"nodeType":"YulExpressionStatement","src":"23642:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23692:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23703:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23688:3:181"},"nodeType":"YulFunctionCall","src":"23688:18:181"},{"hexValue":"616767726567617465526f6f7420216578697374","kind":"string","nodeType":"YulLiteral","src":"23708:22:181","type":"","value":"aggregateRoot !exist"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23681:6:181"},"nodeType":"YulFunctionCall","src":"23681:50:181"},"nodeType":"YulExpressionStatement","src":"23681:50:181"},{"nodeType":"YulAssignment","src":"23740:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23752:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23763:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23748:3:181"},"nodeType":"YulFunctionCall","src":"23748:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23740:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23579:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23593:4:181","type":""}],"src":"23428:344:181"},{"body":{"nodeType":"YulBlock","src":"23951:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23968:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23979:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23961:6:181"},"nodeType":"YulFunctionCall","src":"23961:21:181"},"nodeType":"YulExpressionStatement","src":"23961:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24002:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24013:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23998:3:181"},"nodeType":"YulFunctionCall","src":"23998:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24018:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23991:6:181"},"nodeType":"YulFunctionCall","src":"23991:30:181"},"nodeType":"YulExpressionStatement","src":"23991:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24041:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24052:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24037:3:181"},"nodeType":"YulFunctionCall","src":"24037:18:181"},{"hexValue":"616767726567617465526f6f7420217665726966696564","kind":"string","nodeType":"YulLiteral","src":"24057:25:181","type":"","value":"aggregateRoot !verified"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24030:6:181"},"nodeType":"YulFunctionCall","src":"24030:53:181"},"nodeType":"YulExpressionStatement","src":"24030:53:181"},{"nodeType":"YulAssignment","src":"24092:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24104:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24115:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24100:3:181"},"nodeType":"YulFunctionCall","src":"24100:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24092:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23928:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23942:4:181","type":""}],"src":"23777:347:181"},{"body":{"nodeType":"YulBlock","src":"24176:104:181","statements":[{"nodeType":"YulAssignment","src":"24186:39:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"24202:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"24205:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24198:3:181"},"nodeType":"YulFunctionCall","src":"24198:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"24216:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"24219:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24212:3:181"},"nodeType":"YulFunctionCall","src":"24212:12:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"24194:3:181"},"nodeType":"YulFunctionCall","src":"24194:31:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"24186:4:181"}]},{"body":{"nodeType":"YulBlock","src":"24252:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"24254:16:181"},"nodeType":"YulFunctionCall","src":"24254:18:181"},"nodeType":"YulExpressionStatement","src":"24254:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"24240:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"24246:4:181","type":"","value":"0xff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"24237:2:181"},"nodeType":"YulFunctionCall","src":"24237:14:181"},"nodeType":"YulIf","src":"24234:40:181"}]},"name":"checked_sub_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"24158:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"24161:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"24167:4:181","type":""}],"src":"24129:151:181"},{"body":{"nodeType":"YulBlock","src":"24335:175:181","statements":[{"nodeType":"YulVariableDeclaration","src":"24345:50:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"24372:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"24375:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24368:3:181"},"nodeType":"YulFunctionCall","src":"24368:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"24386:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"24389:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24382:3:181"},"nodeType":"YulFunctionCall","src":"24382:12:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"24364:3:181"},"nodeType":"YulFunctionCall","src":"24364:31:181"},"variables":[{"name":"product_raw","nodeType":"YulTypedName","src":"24349:11:181","type":""}]},{"nodeType":"YulAssignment","src":"24404:33:181","value":{"arguments":[{"name":"product_raw","nodeType":"YulIdentifier","src":"24419:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"24432:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24415:3:181"},"nodeType":"YulFunctionCall","src":"24415:22:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"24404:7:181"}]},{"body":{"nodeType":"YulBlock","src":"24482:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"24484:16:181"},"nodeType":"YulFunctionCall","src":"24484:18:181"},"nodeType":"YulExpressionStatement","src":"24484:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"24459:7:181"},{"name":"product_raw","nodeType":"YulIdentifier","src":"24468:11:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"24456:2:181"},"nodeType":"YulFunctionCall","src":"24456:24:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"24449:6:181"},"nodeType":"YulFunctionCall","src":"24449:32:181"},"nodeType":"YulIf","src":"24446:58:181"}]},"name":"checked_mul_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"24314:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"24317:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"24323:7:181","type":""}],"src":"24285:225:181"},{"body":{"nodeType":"YulBlock","src":"24698:269:181","statements":[{"nodeType":"YulAssignment","src":"24708:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24720:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24731:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24716:3:181"},"nodeType":"YulFunctionCall","src":"24716:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24708:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"24744:36:181","value":{"kind":"number","nodeType":"YulLiteral","src":"24754:26:181","type":"","value":"0xffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"24748:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24796:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"24811:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"24819:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24807:3:181"},"nodeType":"YulFunctionCall","src":"24807:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24789:6:181"},"nodeType":"YulFunctionCall","src":"24789:34:181"},"nodeType":"YulExpressionStatement","src":"24789:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24843:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24854:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24839:3:181"},"nodeType":"YulFunctionCall","src":"24839:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"24863:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"24871:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24859:3:181"},"nodeType":"YulFunctionCall","src":"24859:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24832:6:181"},"nodeType":"YulFunctionCall","src":"24832:43:181"},"nodeType":"YulExpressionStatement","src":"24832:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24895:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24906:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24891:3:181"},"nodeType":"YulFunctionCall","src":"24891:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"24911:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24884:6:181"},"nodeType":"YulFunctionCall","src":"24884:34:181"},"nodeType":"YulExpressionStatement","src":"24884:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24938:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24949:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24934:3:181"},"nodeType":"YulFunctionCall","src":"24934:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"24954:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24927:6:181"},"nodeType":"YulFunctionCall","src":"24927:34:181"},"nodeType":"YulExpressionStatement","src":"24927:34:181"}]},"name":"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24643:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"24654:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"24662:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"24670:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"24678:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24689:4:181","type":""}],"src":"24515:452:181"},{"body":{"nodeType":"YulBlock","src":"25146:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25163:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25174:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25156:6:181"},"nodeType":"YulFunctionCall","src":"25156:21:181"},"nodeType":"YulExpressionStatement","src":"25156:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25197:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25208:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25193:3:181"},"nodeType":"YulFunctionCall","src":"25193:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"25213:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25186:6:181"},"nodeType":"YulFunctionCall","src":"25186:30:181"},"nodeType":"YulExpressionStatement","src":"25186:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25236:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25247:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25232:3:181"},"nodeType":"YulFunctionCall","src":"25232:18:181"},{"hexValue":"217472756e6361746564","kind":"string","nodeType":"YulLiteral","src":"25252:12:181","type":"","value":"!truncated"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25225:6:181"},"nodeType":"YulFunctionCall","src":"25225:40:181"},"nodeType":"YulExpressionStatement","src":"25225:40:181"},{"nodeType":"YulAssignment","src":"25274:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25286:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25297:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25282:3:181"},"nodeType":"YulFunctionCall","src":"25282:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25274:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25123:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25137:4:181","type":""}],"src":"24972:334:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        if iszero(lt(value0, 3))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_bytes(add(headStart, offset_1), dataEnd)\n    }\n    function abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 1120) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, shl(5, length)), 0x20), dataEnd) { revert(0, 0) }\n        value0 := add(_2, 0x20)\n        value1 := length\n        value2 := calldataload(add(headStart, 0x20))\n        let _3 := add(headStart, 1088)\n        if gt(_3, dataEnd) { revert(0, 0) }\n        value3 := add(headStart, 64)\n        value4 := calldataload(_3)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n    }\n    function abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value2 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_bytes(value1, add(headStart, 64))\n    }\n    function abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!delayBlocks\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"root already sent\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, value0)\n        end := add(pos, 32)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        let tail_1 := abi_encode_bytes(value0, add(headStart, 96))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value1, tail_1)\n        mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!rootManager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!data length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!AMB\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        tail := abi_encode_bytes(value0, add(headStart, 64))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!proofs\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr(base_ref, ptr_to_tail) -> addr\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(1086)))) { revert(0, 0) }\n        addr := add(base_ref, rel_offset_of_tail)\n    }\n    function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 11)\n        mstore(add(headStart, 64), \"!sharedRoot\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"aggregateRoot !exists\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 8)\n        mstore(add(headStart, 64), \"!watcher\")\n        tail := add(headStart, 96)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"already watcher manager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!allowlisted\")\n        tail := add(headStart, 96)\n    }\n    function increment_t_uint32(value) -> ret\n    {\n        let _1 := 0xffffffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_decode_tuple_t_bytes32t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Pausable: paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!length\")\n        tail := add(headStart, 96)\n    }\n    function convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32(array) -> value\n    {\n        let length := mload(array)\n        value := mload(add(array, 0x20))\n        if lt(length, 0x20)\n        {\n            value := and(value, shl(shl(3, sub(0x20, length)), not(0)))\n        }\n    }\n    function abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"Pausable: not paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"!MessageStatus.None\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"invalid inboundRoot\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!destination\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!proven\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n        mstore(add(headStart, 64), 96)\n        tail := abi_encode_bytes(value2, add(headStart, 96))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: insufficient balance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    { end := pos }\n    function abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 58)\n        mstore(add(headStart, 64), \"Address: unable to send value, r\")\n        mstore(add(headStart, 96), \"ecipient may have reverted\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"!new rate limit\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value5, value4, value3, value2, value1, value0) -> end\n    {\n        let _1 := shl(224, 0xffffffff)\n        mstore(pos, and(shl(224, value0), _1))\n        mstore(add(pos, 4), value1)\n        mstore(add(pos, 36), and(shl(224, value2), _1))\n        mstore(add(pos, 40), and(shl(224, value3), _1))\n        mstore(add(pos, 44), value4)\n        let length := mload(value5)\n        copy_memory_to_memory_with_cleanup(add(value5, 0x20), add(pos, 76), length)\n        end := add(add(pos, length), 76)\n    }\n    function abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"new root empty\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"root already pending\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"root already proven\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"aggregateRoot empty\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"aggregateRoot !exist\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"aggregateRoot !verified\")\n        tail := add(headStart, 96)\n    }\n    function checked_sub_t_uint8(x, y) -> diff\n    {\n        diff := sub(and(x, 0xff), and(y, 0xff))\n        if gt(diff, 0xff) { panic_error_0x11() }\n    }\n    function checked_mul_t_uint8(x, y) -> product\n    {\n        let product_raw := mul(and(x, 0xff), and(y, 0xff))\n        product := and(product_raw, 0xff)\n        if iszero(eq(product, product_raw)) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"!truncated\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"39039":[{"length":32,"start":1181},{"length":32,"start":1636},{"length":32,"start":5943},{"length":32,"start":6561},{"length":32,"start":7391}],"39042":[{"length":32,"start":2231},{"length":32,"start":3378}],"39045":[{"length":32,"start":1366},{"length":32,"start":3110},{"length":32,"start":6453},{"length":32,"start":6522}],"39048":[{"length":32,"start":693}],"39550":[{"length":32,"start":1832},{"length":32,"start":2686},{"length":32,"start":4289},{"length":32,"start":6037}],"39553":[{"length":32,"start":2305},{"length":32,"start":7680},{"length":32,"start":7821}],"39556":[{"length":32,"start":805},{"length":32,"start":7647}]},"linkReferences":{},"object":"6080604052600436106102975760003560e01c80638456cb591161015a578063b95a2001116100c1578063d69f9d611161007a578063d69f9d61146108a5578063d7d317b3146108d9578063d88beda2146108ef578063db1b765914610923578063e0fed01014610943578063fa31de011461096357600080fd5b8063b95a2001146107e0578063c5b350df14610813578063cc39428314610828578063d1851c9214610848578063d232c22014610866578063d2a3cc711461088557600080fd5b8063a01892a511610113578063a01892a514610716578063a792c29b1461074a578063ad9c0c2e1461076a578063b1f8100d14610780578063b2f87643146107a0578063b697f531146107c057600080fd5b80638456cb59146106405780638d3638f4146106555780638da5cb5b1461068857806398c9f2b9146106a65780639d3117c7146106d65780639fa92f9d1461070357600080fd5b806352a9674b116101fe5780636159ada1116101b75780636159ada11461059057806365eaf11b146105c057806368742da6146105d55780636a42b8f8146105f55780636b04a9331461060b578063715018a61461062b57600080fd5b806352a9674b1461048b578063572386ca146104bf578063579c1618146104ef5780635bd11efc146105055780635c975abb146105255780635f61e3ec1461054457600080fd5b80633cf52ffb116102505780633cf52ffb146103e55780633f4ba83a146103fa57806348e6fa231461040f5780634ff746f614610422578063508a109b146104425780635190bc531461046257600080fd5b806314168416146102a35780631eeaabea146102f157806325e3beda146103135780632bb1ae7c146103555780632bbd59ca14610368578063301f07c3146103a557600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b3480156102fd57600080fd5b5061031161030c366004612e67565b610991565b005b34801561031f57600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016102e8565b610311610363366004612f23565b610a3b565b34801561037457600080fd5b50610398610383366004612e67565b600f6020526000908152604090205460ff1681565b6040516102e89190612f6e565b3480156103b157600080fd5b506103d56103c0366004612e67565b600a6020526000908152604090205460ff1681565b60405190151581526020016102e8565b3480156103f157600080fd5b50600254610347565b34801561040657600080fd5b50610311610bde565b61031161041d366004612f96565b610c1b565b34801561042e57600080fd5b5061031161043d366004612f23565b610d27565b34801561044e57600080fd5b5061031161045d366004612ffa565b610dc4565b34801561046e57600080fd5b506103d561047d366004613096565b6001600160a01b0316301490565b34801561049757600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b3480156104cb57600080fd5b506103d56104da366004612e67565b600c6020526000908152604090205460ff1681565b3480156104fb57600080fd5b5061034760055481565b34801561051157600080fd5b50610311610520366004613096565b611086565b34801561053157600080fd5b50600354600160a01b900460ff166103d5565b34801561055057600080fd5b506105787f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102e8565b34801561059c57600080fd5b506103d56105ab366004613096565b600d6020526000908152604090205460ff1681565b3480156105cc57600080fd5b506103476110bd565b3480156105e157600080fd5b506103116105f0366004613096565b611146565b34801561060157600080fd5b5062093a80610347565b34801561061757600080fd5b50610311610626366004612e67565b6111c3565b34801561063757600080fd5b5061031161128e565b34801561064c57600080fd5b506103116112b9565b34801561066157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102d7565b34801561069457600080fd5b506000546001600160a01b0316610578565b3480156106b257600080fd5b506103d56106c1366004612e67565b600b6020526000908152604090205460ff1681565b3480156106e257600080fd5b506103476106f1366004612e67565b60096020526000908152604090205481565b34801561070f57600080fd5b5030610578565b34801561072257600080fd5b506105787f000000000000000000000000000000000000000000000000000000000000000081565b34801561075657600080fd5b50600454610578906001600160a01b031681565b34801561077657600080fd5b5061034760085481565b34801561078c57600080fd5b5061031161079b366004613096565b61136d565b3480156107ac57600080fd5b506103116107bb366004613096565b61140b565b3480156107cc57600080fd5b506103116107db366004613096565b611487565b3480156107ec57600080fd5b506102d76107fb3660046130d8565b600e6020526000908152604090205463ffffffff1681565b34801561081f57600080fd5b50610311611506565b34801561083457600080fd5b50600354610578906001600160a01b031681565b34801561085457600080fd5b506001546001600160a01b0316610578565b34801561087257600080fd5b506000546001600160a01b0316156103d5565b34801561089157600080fd5b506103116108a0366004613096565b611576565b3480156108b157600080fd5b506105787f000000000000000000000000000000000000000000000000000000000000000081565b3480156108e557600080fd5b5061034760065481565b3480156108fb57600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b34801561092f57600080fd5b506103d561093e366004613096565b61164d565b34801561094f57600080fd5b5061031161095e366004612e67565b611662565b34801561096f57600080fd5b5061098361097e3660046130f3565b611696565b6040516102e892919061319a565b6000546001600160a01b031633146109bc576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610a015760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610a43611865565b43600554600654610a5491906131c9565b1115610a73576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afe91906131dc565b6000818152600c602052604090205490915060ff1615610b545760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b60448201526064016109f8565b600081604051602001610b6991815260200190565b6040516020818303038152906040529050610b8481846118b2565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610bd1908390869033906131f5565b60405180910390a1505050565b6000546001600160a01b03163314610c09576040516311a8a1bb60e31b815260040160405180910390fd5b610c11611a29565b610c19611a79565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c825760405162461bcd60e51b815260206004820152600c60248201526b10b937b7ba26b0b730b3b2b960a11b60448201526064016109f8565b805115610cc05760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b60448201526064016109f8565b610cd982604051806020016040528060008152506118b2565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e9355077826040518060200160405280600081525033604051610d1b939291906131f5565b60405180910390a15050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d885760405162461bcd60e51b81526004016109f89060208082526004908201526310a0a6a160e11b604082015260600190565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610db9929190613233565b60405180910390a150565b610dcc611865565b610dd4611ace565b83610e0b5760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b60448201526064016109f8565b600085856000818110610e2057610e2061325d565b9050602002810190610e329190613273565b610e3c9080613294565b604051610e4a9291906132e2565b604051809103902090506000610eb18288886000818110610e6d57610e6d61325d565b9050602002810190610e7f9190613273565b60200189896000818110610e9557610e9561325d565b9050602002810190610ea79190613273565b6104200135611b27565b9050610ebf81868686611bce565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610fe55788888263ffffffff16818110610f0457610f0461325d565b9050602002810190610f169190613273565b610f209080613294565b604051610f2e9291906132e2565b604051809103902093506000610f83858b8b8563ffffffff16818110610f5657610f5661325d565b9050602002810190610f689190613273565b6020018c8c8663ffffffff16818110610e9557610e9561325d565b9050838114610fc25760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b60448201526064016109f8565b506000848152600f60205260409020805460ff1916600190811790915501610ede565b5060005b818163ffffffff1610156110715761106889898363ffffffff168181106110125761101261325d565b90506020028101906110249190613273565b61102e9080613294565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cc992505050565b50600101610fe9565b5050505061107f6001600755565b5050505050565b6000546001600160a01b031633146110b1576040516311a8a1bb60e31b815260040160405180910390fd5b6110ba81611fa6565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114191906131dc565b905090565b6000546001600160a01b03163314611171576040516311a8a1bb60e31b815260040160405180910390fd5b4761117c828261200f565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d826040516111b791815260200190565b60405180910390a25050565b6000546001600160a01b031633146111ee576040516311a8a1bb60e31b815260040160405180910390fd5b6111f6611a29565b600081815260096020526040812054900361124b5760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b60448201526064016109f8565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610db99083815260200190565b6000546001600160a01b03163314610c19576040516311a8a1bb60e31b815260040160405180910390fd5b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa158015611302573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132691906132f2565b61135d5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b60448201526064016109f8565b611365611865565b610c1961212d565b6000546001600160a01b03163314611398576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b0382811691161480156113b6575060025415155b156113d4576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361140257604051634a2fb73f60e11b815260040160405180910390fd5b6110ba81612170565b6000546001600160a01b03163314611436576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610db9565b6000546001600160a01b031633146114b2576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610db9565b6001546001600160a01b03163314611531576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426115439190613314565b11611561576040516324e0285f60e21b815260040160405180910390fd5b600154610c19906001600160a01b03166121be565b6000546001600160a01b031633146115a1576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b03908116908216036115ff5760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e6167657200000000000000000060448201526064016109f8565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610db9565b60006001600160a01b03821633145b92915050565b6000546001600160a01b0316331461168d576040516311a8a1bb60e31b815260040160405180910390fd5b6110ba81612223565b336000908152600d602052604081205460609060ff166116e75760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b60448201526064016109f8565b63ffffffff8086166000908152600e602052604081208054919291909116908261171083613327565b91906101000a81548163ffffffff021916908363ffffffff1602179055509050600061176f7f0000000000000000000000000000000000000000000000000000000000000000611766336001600160a01b031690565b848a8a8a6122a1565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af11580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061334a565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f8361183b600184613314565b848760405161184d949392919061336e565b60405180910390a15090989197509095505050505050565b600354600160a01b900460ff1615610c195760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016109f8565b8051156118f05760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b60448201526064016109f8565b815160201461192b5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b60448201526064016109f8565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036119705761196c6119678361339d565b6122d9565b5050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016638e7d93fa7f00000000000000000000000000000000000000000000000000000000000000006119c98561339d565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526024820152604401600060405180830381600087803b158015611a0d57600080fd5b505af1158015611a21573d6000803e3d6000fd5b505050505050565b600354600160a01b900460ff16610c195760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016109f8565b611a81611a29565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600260075403611b205760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109f8565b6002600755565b6000806000858152600f602052604090205460ff166002811115611b4d57611b4d612f58565b14611b905760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b60448201526064016109f8565b611bc48484602080602002604051908101604052809291908260208002808284376000920191909152508691506124029050565b90505b9392505050565b6000848152600b602052604090205460ff16611cc357611bed83612750565b6000611c238584602080602002604051908101604052809291908260208002808284376000920191909152508691506124029050565b9050838114611c6a5760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b60448201526064016109f8565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611cb99086815260200190565b60405180910390a3505b50505050565b600080611cd683826128b0565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611d0e62ffffff1983166128d4565b63ffffffff1614611d505760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b60448201526064016109f8565b6000611d6162ffffff1983166128e9565b905060016000828152600f602052604090205460ff166002811115611d8857611d88612f58565b14611dbf5760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b60448201526064016109f8565b6000818152600f60205260409020805460ff191660021790556001611e247f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006131c9565b611e2e9190613314565b5a11611e655760405162461bcd60e51b81526004016109f8906020808252600490820152632167617360e01b604082015260600190565b6000611e7662ffffff198416612932565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611ed162ffffff198816612943565b611ee062ffffff198916612957565b611eef62ffffff198a1661296c565b611f0c611f0162ffffff198c16612981565b62ffffff19166129af565b604051602401611f1f94939291906133c4565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050611f598585600086856129f8565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890611f929088908b9086906133f3565b60405180910390a150505050505050919050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b8047101561205f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109f8565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146120ac576040519150601f19603f3d011682016040523d82523d6000602084013e6120b1565b606091505b50509050806121285760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016109f8565b505050565b612135611865565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611ab13390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60055481036122665760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b60448201526064016109f8565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610db9565b60608686868686866040516020016122be96959493929190613414565b60405160208183030381529060405290509695505050505050565b806123175760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b60448201526064016109f8565b6000818152600960205260409020541561236a5760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b60448201526064016109f8565b6000818152600a602052604090205460ff16156123bf5760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b60448201526064016109f8565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610db99083815260200190565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b806127935760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b60448201526064016109f8565b6000818152600a602052604090205460ff16156127ad5750565b600081815260096020526040812054908190036128035760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b60448201526064016109f8565b6008546128108243613314565b101561285e5760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f742021766572696669656400000000000000000060448201526064016109f8565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b8151600090602084016128cb64ffffffffff85168284612a83565b95945050505050565b600061165c62ffffff19831660286004612ac0565b6000806128ff8360781c6001600160601b031690565b6001600160601b03169050600061291f8460181c6001600160601b031690565b6001600160601b03169091209392505050565b600061165c61294083612af0565b90565b600061165c62ffffff198316826004612ac0565b600061165c62ffffff19831660246004612ac0565b600061165c62ffffff19831660046020612b01565b600061165c604c61299f81601886901c6001600160601b0316613314565b62ffffff19851691906000612c0c565b60606000806129c78460181c6001600160601b031690565b6001600160601b0316905060405191508192506129e78483602001612c88565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff811115612a1e57612a1e612e80565b6040519080825280601f01601f191660200182016040528015612a48576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612a69578692505b828152826000602083013e90999098509650505050505050565b600080612a9083856131c9565b9050604051811115612aa0575060005b80600003612ab55762ffffff19915050611bc7565b6128cb858585612d7b565b6000612acd82602061346e565b612ad8906008613487565b60ff16612ae6858585612b01565b901c949350505050565b600061165c62ffffff198316602c60205b60008160ff16600003612b1657506000611bc7565b612b298460181c6001600160601b031690565b6001600160601b0316612b3f60ff8416856131c9565b1115612ba757612b588460781c6001600160601b031690565b612b6b8560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff831660648201526084016109f8565b60208260ff161115612bcc5760405163045df3f960e01b815260040160405180910390fd5b600882026000612be58660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612c228660781c6001600160601b031690565b6001600160601b03169050612c3686612df2565b84612c4187846131c9565b612c4b91906131c9565b1115612c5e5762ffffff19915050612c80565b612c6885826131c9565b9050612c7c8364ffffffffff168286612a83565b9150505b949350505050565b600062ffffff1980841603612cb05760405163148d513360e21b815260040160405180910390fd5b612cb983612e2b565b15612cd757604051632ee0949160e11b815260040160405180910390fd5b6000612cec8460181c6001600160601b031690565b6001600160601b031690506000612d0c8560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115612d2d5760206060fd5b8386858560045afa905080612d5557604051632af1bd9b60e21b815260040160405180910390fd5b612d70612d628860d81c90565b64ffffffffff168786612d7b565b979650505050505050565b60006060601883856001600160601b03821682148015612da3575086816001600160601b0316145b612ddc5760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b60448201526064016109f8565b96831b90961790911b90941790931b9392505050565b6000612e078260181c6001600160601b031690565b612e1a8360781c6001600160601b031690565b016001600160601b03169050919050565b6000612e378260d81c90565b64ffffffffff1664ffffffffff03612e5157506001919050565b6000612e5c83612df2565b604051109392505050565b600060208284031215612e7957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612ea757600080fd5b813567ffffffffffffffff80821115612ec257612ec2612e80565b604051601f8301601f19908116603f01168101908282118183101715612eea57612eea612e80565b81604052838152866020858801011115612f0357600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215612f3557600080fd5b813567ffffffffffffffff811115612f4c57600080fd5b612c8084828501612e96565b634e487b7160e01b600052602160045260246000fd5b6020810160038310612f9057634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215612fa957600080fd5b823567ffffffffffffffff80821115612fc157600080fd5b612fcd86838701612e96565b93506020850135915080821115612fe357600080fd5b50612ff085828601612e96565b9150509250929050565b6000806000806000610460868803121561301357600080fd5b853567ffffffffffffffff8082111561302b57600080fd5b818801915088601f83011261303f57600080fd5b81358181111561304e57600080fd5b8960208260051b850101111561306357600080fd5b60209283019750955050860135925061044086018781111561308457600080fd5b94979396509194604001933592915050565b6000602082840312156130a857600080fd5b81356001600160a01b0381168114611bc757600080fd5b803563ffffffff811681146130d357600080fd5b919050565b6000602082840312156130ea57600080fd5b611bc7826130bf565b60008060006060848603121561310857600080fd5b613111846130bf565b925060208401359150604084013567ffffffffffffffff81111561313457600080fd5b61314086828701612e96565b9150509250925092565b60005b8381101561316557818101518382015260200161314d565b50506000910152565b6000815180845261318681602086016020860161314a565b601f01601f19169290920160200192915050565b828152604060208201526000611bc4604083018461316e565b634e487b7160e01b600052601160045260246000fd5b8082018082111561165c5761165c6131b3565b6000602082840312156131ee57600080fd5b5051919050565b606081526000613208606083018661316e565b828103602084015261321a818661316e565b91505060018060a01b0383166040830152949350505050565b604081526000613246604083018561316e565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e1983360301811261328a57600080fd5b9190910192915050565b6000808335601e198436030181126132ab57600080fd5b83018035915067ffffffffffffffff8211156132c657600080fd5b6020019150368190038213156132db57600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561330457600080fd5b81518015158114611bc757600080fd5b8181038181111561165c5761165c6131b3565b600063ffffffff808316818103613340576133406131b3565b6001019392505050565b6000806040838503121561335d57600080fd5b505080516020909101519092909150565b848152836020820152826040820152608060608201526000613393608083018461316e565b9695505050505050565b805160208083015191908110156133be576000198160200360031b1b821691505b50919050565b600063ffffffff808716835280861660208401525083604083015260806060830152613393608083018461316e565b83815282151560208201526060604082015260006128cb606083018461316e565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c830152825161345c81604c85016020870161314a565b91909101604c01979650505050505050565b60ff828116828216039081111561165c5761165c6131b3565b60ff81811683821602908116908181146134a3576134a36131b3565b509291505056fea2646970667358221220e0669f9973a9eb5780a17d59e6576a6d930c4941bd9d7e7e61efd12671c7938f64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x297 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x15A JUMPI DUP1 PUSH4 0xB95A2001 GT PUSH2 0xC1 JUMPI DUP1 PUSH4 0xD69F9D61 GT PUSH2 0x7A JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x8A5 JUMPI DUP1 PUSH4 0xD7D317B3 EQ PUSH2 0x8D9 JUMPI DUP1 PUSH4 0xD88BEDA2 EQ PUSH2 0x8EF JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x923 JUMPI DUP1 PUSH4 0xE0FED010 EQ PUSH2 0x943 JUMPI DUP1 PUSH4 0xFA31DE01 EQ PUSH2 0x963 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB95A2001 EQ PUSH2 0x7E0 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x813 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x828 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x848 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x866 JUMPI DUP1 PUSH4 0xD2A3CC71 EQ PUSH2 0x885 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA01892A5 GT PUSH2 0x113 JUMPI DUP1 PUSH4 0xA01892A5 EQ PUSH2 0x716 JUMPI DUP1 PUSH4 0xA792C29B EQ PUSH2 0x74A JUMPI DUP1 PUSH4 0xAD9C0C2E EQ PUSH2 0x76A JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x780 JUMPI DUP1 PUSH4 0xB2F87643 EQ PUSH2 0x7A0 JUMPI DUP1 PUSH4 0xB697F531 EQ PUSH2 0x7C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x640 JUMPI DUP1 PUSH4 0x8D3638F4 EQ PUSH2 0x655 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x688 JUMPI DUP1 PUSH4 0x98C9F2B9 EQ PUSH2 0x6A6 JUMPI DUP1 PUSH4 0x9D3117C7 EQ PUSH2 0x6D6 JUMPI DUP1 PUSH4 0x9FA92F9D EQ PUSH2 0x703 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B GT PUSH2 0x1FE JUMPI DUP1 PUSH4 0x6159ADA1 GT PUSH2 0x1B7 JUMPI DUP1 PUSH4 0x6159ADA1 EQ PUSH2 0x590 JUMPI DUP1 PUSH4 0x65EAF11B EQ PUSH2 0x5C0 JUMPI DUP1 PUSH4 0x68742DA6 EQ PUSH2 0x5D5 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x5F5 JUMPI DUP1 PUSH4 0x6B04A933 EQ PUSH2 0x60B JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x62B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B EQ PUSH2 0x48B JUMPI DUP1 PUSH4 0x572386CA EQ PUSH2 0x4BF JUMPI DUP1 PUSH4 0x579C1618 EQ PUSH2 0x4EF JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x505 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x525 JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x544 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3CF52FFB GT PUSH2 0x250 JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x3E5 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x3FA JUMPI DUP1 PUSH4 0x48E6FA23 EQ PUSH2 0x40F JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x422 JUMPI DUP1 PUSH4 0x508A109B EQ PUSH2 0x442 JUMPI DUP1 PUSH4 0x5190BC53 EQ PUSH2 0x462 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x2A3 JUMPI DUP1 PUSH4 0x1EEAABEA EQ PUSH2 0x2F1 JUMPI DUP1 PUSH4 0x25E3BEDA EQ PUSH2 0x313 JUMPI DUP1 PUSH4 0x2BB1AE7C EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0x2BBD59CA EQ PUSH2 0x368 JUMPI DUP1 PUSH4 0x301F07C3 EQ PUSH2 0x3A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x29E JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D7 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x30C CALLDATASIZE PUSH1 0x4 PUSH2 0x2E67 JUMP JUMPDEST PUSH2 0x991 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x31F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E8 JUMP JUMPDEST PUSH2 0x311 PUSH2 0x363 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F23 JUMP JUMPDEST PUSH2 0xA3B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x398 PUSH2 0x383 CALLDATASIZE PUSH1 0x4 PUSH2 0x2E67 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2E8 SWAP2 SWAP1 PUSH2 0x2F6E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x3C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2E67 JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x347 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x406 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0xBDE JUMP JUMPDEST PUSH2 0x311 PUSH2 0x41D CALLDATASIZE PUSH1 0x4 PUSH2 0x2F96 JUMP JUMPDEST PUSH2 0xC1B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x43D CALLDATASIZE PUSH1 0x4 PUSH2 0x2F23 JUMP JUMPDEST PUSH2 0xD27 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x44E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x45D CALLDATASIZE PUSH1 0x4 PUSH2 0x2FFA JUMP JUMPDEST PUSH2 0xDC4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x46E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x47D CALLDATASIZE PUSH1 0x4 PUSH2 0x3096 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x497 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D7 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x4DA CALLDATASIZE PUSH1 0x4 PUSH2 0x2E67 JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x511 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x520 CALLDATASIZE PUSH1 0x4 PUSH2 0x3096 JUMP JUMPDEST PUSH2 0x1086 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x531 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3D5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x550 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x578 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x59C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x5AB CALLDATASIZE PUSH1 0x4 PUSH2 0x3096 JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x10BD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x5F0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3096 JUMP JUMPDEST PUSH2 0x1146 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x601 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x347 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x617 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x626 CALLDATASIZE PUSH1 0x4 PUSH2 0x2E67 JUMP JUMPDEST PUSH2 0x11C3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x637 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x128E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x64C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x12B9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x661 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x0 PUSH2 0x2D7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x694 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x578 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x6C1 CALLDATASIZE PUSH1 0x4 PUSH2 0x2E67 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x6F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x2E67 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH2 0x578 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x722 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x578 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x756 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x578 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x78C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x79B CALLDATASIZE PUSH1 0x4 PUSH2 0x3096 JUMP JUMPDEST PUSH2 0x136D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x7BB CALLDATASIZE PUSH1 0x4 PUSH2 0x3096 JUMP JUMPDEST PUSH2 0x140B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x7DB CALLDATASIZE PUSH1 0x4 PUSH2 0x3096 JUMP JUMPDEST PUSH2 0x1487 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D7 PUSH2 0x7FB CALLDATASIZE PUSH1 0x4 PUSH2 0x30D8 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x81F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x1506 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x834 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x578 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x854 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x578 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x872 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x3D5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x891 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x8A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3096 JUMP JUMPDEST PUSH2 0x1576 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x578 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x92F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x93E CALLDATASIZE PUSH1 0x4 PUSH2 0x3096 JUMP JUMPDEST PUSH2 0x164D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x94F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x95E CALLDATASIZE PUSH1 0x4 PUSH2 0x2E67 JUMP JUMPDEST PUSH2 0x1662 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x96F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x983 PUSH2 0x97E CALLDATASIZE PUSH1 0x4 PUSH2 0x30F3 JUMP JUMPDEST PUSH2 0x1696 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2E8 SWAP3 SWAP2 SWAP1 PUSH2 0x319A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9BC JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD DUP2 SUB PUSH2 0xA01 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2164656C6179426C6F636B73 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLER DUP2 MSTORE DUP2 SWAP1 PUSH32 0x8BD16320F3B60336ED5FD2A770EB7453E7E71CFEF4462ADDFFD7AE9DFE201C8E SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x8 SSTORE JUMP JUMPDEST PUSH2 0xA43 PUSH2 0x1865 JUMP JUMPDEST NUMBER PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD PUSH2 0xA54 SWAP2 SWAP1 PUSH2 0x31C9 JUMP JUMPDEST GT ISZERO PUSH2 0xA73 JUMPI PUSH1 0x40 MLOAD PUSH4 0x46CF2AF1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST NUMBER PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xADA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAFE SWAP2 SWAP1 PUSH2 0x31DC JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xB54 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1C9BDBDD08185B1C9958591E481CD95B9D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xB69 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH2 0xB84 DUP2 DUP5 PUSH2 0x18B2 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 SWAP1 PUSH2 0xBD1 SWAP1 DUP4 SWAP1 DUP7 SWAP1 CALLER SWAP1 PUSH2 0x31F5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC09 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC11 PUSH2 0x1A29 JUMP JUMPDEST PUSH2 0xC19 PUSH2 0x1A79 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xC82 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B937B7BA26B0B730B3B2B9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xCC0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH2 0xCD9 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x18B2 JUMP JUMPDEST PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP CALLER PUSH1 0x40 MLOAD PUSH2 0xD1B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x31F5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xD88 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9F8 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0xDB9 SWAP3 SWAP2 SWAP1 PUSH2 0x3233 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xDCC PUSH2 0x1865 JUMP JUMPDEST PUSH2 0xDD4 PUSH2 0x1ACE JUMP JUMPDEST DUP4 PUSH2 0xE0B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x2170726F6F6673 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xE20 JUMPI PUSH2 0xE20 PUSH2 0x325D JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE32 SWAP2 SWAP1 PUSH2 0x3273 JUMP JUMPDEST PUSH2 0xE3C SWAP1 DUP1 PUSH2 0x3294 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE4A SWAP3 SWAP2 SWAP1 PUSH2 0x32E2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xEB1 DUP3 DUP9 DUP9 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xE6D JUMPI PUSH2 0xE6D PUSH2 0x325D JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE7F SWAP2 SWAP1 PUSH2 0x3273 JUMP JUMPDEST PUSH1 0x20 ADD DUP10 DUP10 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xE95 JUMPI PUSH2 0xE95 PUSH2 0x325D JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xEA7 SWAP2 SWAP1 PUSH2 0x3273 JUMP JUMPDEST PUSH2 0x420 ADD CALLDATALOAD PUSH2 0x1B27 JUMP JUMPDEST SWAP1 POP PUSH2 0xEBF DUP2 DUP7 DUP7 DUP7 PUSH2 0x1BCE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP7 SWAP1 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xFE5 JUMPI DUP9 DUP9 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xF04 JUMPI PUSH2 0xF04 PUSH2 0x325D JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xF16 SWAP2 SWAP1 PUSH2 0x3273 JUMP JUMPDEST PUSH2 0xF20 SWAP1 DUP1 PUSH2 0x3294 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF2E SWAP3 SWAP2 SWAP1 PUSH2 0x32E2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP4 POP PUSH1 0x0 PUSH2 0xF83 DUP6 DUP12 DUP12 DUP6 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xF56 JUMPI PUSH2 0xF56 PUSH2 0x325D JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xF68 SWAP2 SWAP1 PUSH2 0x3273 JUMP JUMPDEST PUSH1 0x20 ADD DUP13 DUP13 DUP7 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xE95 JUMPI PUSH2 0xE95 PUSH2 0x325D JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0xFC2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x85CDA185C9959149BDBDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE ADD PUSH2 0xEDE JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0x1071 JUMPI PUSH2 0x1068 DUP10 DUP10 DUP4 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0x1012 JUMPI PUSH2 0x1012 PUSH2 0x325D JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x1024 SWAP2 SWAP1 PUSH2 0x3273 JUMP JUMPDEST PUSH2 0x102E SWAP1 DUP1 PUSH2 0x3294 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1CC9 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xFE9 JUMP JUMPDEST POP POP POP POP PUSH2 0x107F PUSH1 0x1 PUSH1 0x7 SSTORE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10B1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x10BA DUP2 PUSH2 0x1FA6 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x111D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1141 SWAP2 SWAP1 PUSH2 0x31DC JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1171 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SELFBALANCE PUSH2 0x117C DUP3 DUP3 PUSH2 0x200F JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEAFF4B37086828766AD3268786972C0CD24259D4C87A80F9D3963A3C3D999B0D DUP3 PUSH1 0x40 MLOAD PUSH2 0x11B7 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x11EE JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x11F6 PUSH2 0x1A29 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SUB PUSH2 0x124B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x616767726567617465526F6F742021657869737473 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xF51534ECF10A58DB36CE4F5180F59DEDDF3B3EB7C5E7454E602C2F80A40CC739 SWAP1 PUSH2 0xDB9 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC19 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1302 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1326 SWAP2 SWAP1 PUSH2 0x32F2 JUMP JUMPDEST PUSH2 0x135D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH2 0x1365 PUSH2 0x1865 JUMP JUMPDEST PUSH2 0xC19 PUSH2 0x212D JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1398 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x13B6 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x13D4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x1402 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x10BA DUP2 PUSH2 0x2170 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1436 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x384859C5EF5FAFAC31E8BC92CE7FB48B1F2C74C4DD5E212EB84EC202FA5D9FAD SWAP2 ADD PUSH2 0xDB9 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x14B2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xD65ECA5D561D3A4568C87B9B13CED4AB52A69EDADFDFDB22D76BC595F36D7D87 SWAP2 ADD PUSH2 0xDB9 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1531 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x1543 SWAP2 SWAP1 PUSH2 0x3314 JUMP JUMPDEST GT PUSH2 0x1561 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0xC19 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x21BE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x15A1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0x15FF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616C72656164792077617463686572206D616E61676572000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC16D059E43D7F8E29CCB4E001A2F249D3C59E274925D6A6BC3912943441D9F6C SWAP1 PUSH1 0x20 ADD PUSH2 0xDB9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND CALLER EQ JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x168D JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x10BA DUP2 PUSH2 0x2223 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x60 SWAP1 PUSH1 0xFF AND PUSH2 0x16E7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x8585B1B1BDDDB1A5CDD1959 PUSH1 0xA2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP3 PUSH2 0x1710 DUP4 PUSH2 0x3327 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH4 0xFFFFFFFF AND MUL OR SWAP1 SSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0x176F PUSH32 0x0 PUSH2 0x1766 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP5 DUP11 DUP11 DUP11 PUSH2 0x22A1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH4 0x2D287E43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2D287E43 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x17E5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1809 SWAP2 SWAP1 PUSH2 0x334A JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH32 0x40F08EE347FC927AE45902EDC87DEBB024AAB1A311943731968607F603F2152F DUP4 PUSH2 0x183B PUSH1 0x1 DUP5 PUSH2 0x3314 JUMP JUMPDEST DUP5 DUP8 PUSH1 0x40 MLOAD PUSH2 0x184D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x336E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP SWAP1 SWAP9 SWAP2 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xC19 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x18F0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x192B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x1970 JUMPI PUSH2 0x196C PUSH2 0x1967 DUP4 PUSH2 0x339D JUMP JUMPDEST PUSH2 0x22D9 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH4 0x8E7D93FA PUSH32 0x0 PUSH2 0x19C9 DUP6 PUSH2 0x339D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1A21 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xC19 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH2 0x1A81 PUSH2 0x1A29 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SLOAD SUB PUSH2 0x1B20 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1B4D JUMPI PUSH2 0x1B4D PUSH2 0x2F58 JUMP JUMPDEST EQ PUSH2 0x1B90 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x214D6573736167655374617475732E4E6F6E65 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH2 0x1BC4 DUP5 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x2402 SWAP1 POP JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1CC3 JUMPI PUSH2 0x1BED DUP4 PUSH2 0x2750 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C23 DUP6 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x2402 SWAP1 POP JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0x1C6A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1A5B9D985B1A59081A5B989BDD5B99149BDBDD PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP5 SWAP1 DUP7 SWAP1 PUSH32 0x7EC1EA51FE3DB53E55ED9D922854BC2156F467FF2F87D74E2086DAE2C84A88A8 SWAP1 PUSH2 0x1CB9 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1CD6 DUP4 DUP3 PUSH2 0x28B0 JUMP JUMPDEST SWAP1 POP PUSH4 0xFFFFFFFF PUSH32 0x0 AND PUSH2 0x1D0E PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x28D4 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x1D50 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B232B9BA34B730BA34B7B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D61 PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x28E9 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1D88 JUMPI PUSH2 0x1D88 PUSH2 0x2F58 JUMP JUMPDEST EQ PUSH2 0x1DBF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x10B83937BB32B7 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x2 OR SWAP1 SSTORE PUSH1 0x1 PUSH2 0x1E24 PUSH32 0x0 PUSH32 0x0 PUSH2 0x31C9 JUMP JUMPDEST PUSH2 0x1E2E SWAP2 SWAP1 PUSH2 0x3314 JUMP JUMPDEST GAS GT PUSH2 0x1E65 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9F8 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x21676173 PUSH1 0xE0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E76 PUSH3 0xFFFFFF NOT DUP5 AND PUSH2 0x2932 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH32 0x0 SWAP2 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x1ED1 PUSH3 0xFFFFFF NOT DUP9 AND PUSH2 0x2943 JUMP JUMPDEST PUSH2 0x1EE0 PUSH3 0xFFFFFF NOT DUP10 AND PUSH2 0x2957 JUMP JUMPDEST PUSH2 0x1EEF PUSH3 0xFFFFFF NOT DUP11 AND PUSH2 0x296C JUMP JUMPDEST PUSH2 0x1F0C PUSH2 0x1F01 PUSH3 0xFFFFFF NOT DUP13 AND PUSH2 0x2981 JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND PUSH2 0x29AF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1F1F SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x33C4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xAB2DC3F5 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 POP PUSH2 0x1F59 DUP6 DUP6 PUSH1 0x0 DUP7 DUP6 PUSH2 0x29F8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP10 POP SWAP3 POP PUSH32 0xD42DE95A9B26F1BE134C8ECCE389DC4FCFA18753D01661B7B361233569E8FE48 SWAP1 PUSH2 0x1F92 SWAP1 DUP9 SWAP1 DUP12 SWAP1 DUP7 SWAP1 PUSH2 0x33F3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x205F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x20AC JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x20B1 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2128 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x9F8 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x2135 PUSH2 0x1865 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1AB1 CALLER SWAP1 JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 SUB PUSH2 0x2266 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x85B995DC81C985D19481B1A5B5A5D PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0x8E7FA5E406CB856AAB05575E45EA011C6748376CC1B5229E3D67B92986406A15 SWAP2 ADD PUSH2 0xDB9 JUMP JUMPDEST PUSH1 0x60 DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x22BE SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3414 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x2317 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x6E657720726F6F7420656D707479 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x236A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x726F6F7420616C72656164792070656E64696E67 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x23BF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x3937B7BA1030B63932B0B23C90383937BB32B7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 NUMBER SWAP1 SSTORE MLOAD PUSH32 0x84EF18531155AFDB0E64FF905D67044AE3AAC63A6FBA4661CFD9C4C14F289BC8 SWAP1 PUSH2 0xDB9 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x5 DUP3 DUP2 SHL DUP3 AND SWAP5 DUP6 MSTORE DUP4 MLOAD SWAP5 DUP3 SUB SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x40 PUSH1 0x0 DUP2 DUP2 KECCAK256 PUSH1 0x2 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x4 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP3 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x8 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x10 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 DUP5 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 DUP4 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 SWAP1 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xE0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x100 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x200 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x120 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x400 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x140 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x800 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x160 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x1000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x2000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x4000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1C0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x8000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1E0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH3 0x10000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x20000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x220 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x40000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x240 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x80000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x260 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x100000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x280 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x200000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x400000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x800000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2E0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x1000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x300 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x2000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x320 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x4000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x340 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x8000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x360 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x10000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x380 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x20000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x40000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x80000000 SWAP1 SWAP5 AND ISZERO SWAP1 SWAP6 SHL SWAP2 DUP3 SWAP1 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x3E0 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x2793 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x616767726567617465526F6F7420656D707479 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x27AD JUMPI POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x2803 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x1859D9DC9959D85D19549BDBDD0808595E1A5CDD PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x2810 DUP3 NUMBER PUSH2 0x3314 JUMP JUMPDEST LT ISZERO PUSH2 0x285E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616767726567617465526F6F7420217665726966696564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP4 SWAP2 PUSH32 0x36B314ABA9F663B4D3EF3288AE489341CC5E6A2725A05FA2B72DF7A27E03F42A SWAP2 LOG2 POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0x28CB PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x2A83 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x165C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x28 PUSH1 0x4 PUSH2 0x2AC0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x28FF DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x291F DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 SWAP2 KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x165C PUSH2 0x2940 DUP4 PUSH2 0x2AF0 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x165C PUSH3 0xFFFFFF NOT DUP4 AND DUP3 PUSH1 0x4 PUSH2 0x2AC0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x165C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x24 PUSH1 0x4 PUSH2 0x2AC0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x165C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x4 PUSH1 0x20 PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x165C PUSH1 0x4C PUSH2 0x299F DUP2 PUSH1 0x18 DUP7 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x3314 JUMP JUMPDEST PUSH3 0xFFFFFF NOT DUP6 AND SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2C0C JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x29C7 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x40 MLOAD SWAP2 POP DUP2 SWAP3 POP PUSH2 0x29E7 DUP5 DUP4 PUSH1 0x20 ADD PUSH2 0x2C88 JUMP JUMPDEST POP DUP2 DUP2 ADD PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH2 0xFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2A1E JUMPI PUSH2 0x2A1E PUSH2 0x2E80 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2A48 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP8 MLOAD PUSH1 0x20 DUP10 ADD DUP12 DUP15 DUP15 CALL SWAP2 POP RETURNDATASIZE SWAP3 POP DUP7 DUP4 GT ISZERO PUSH2 0x2A69 JUMPI DUP7 SWAP3 POP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2A90 DUP4 DUP6 PUSH2 0x31C9 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x2AA0 JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x2AB5 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x1BC7 JUMP JUMPDEST PUSH2 0x28CB DUP6 DUP6 DUP6 PUSH2 0x2D7B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2ACD DUP3 PUSH1 0x20 PUSH2 0x346E JUMP JUMPDEST PUSH2 0x2AD8 SWAP1 PUSH1 0x8 PUSH2 0x3487 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x2AE6 DUP6 DUP6 DUP6 PUSH2 0x2B01 JUMP JUMPDEST SWAP1 SHR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x165C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x2C PUSH1 0x20 JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0x2B16 JUMPI POP PUSH1 0x0 PUSH2 0x1BC7 JUMP JUMPDEST PUSH2 0x2B29 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x2B3F PUSH1 0xFF DUP5 AND DUP6 PUSH2 0x31C9 JUMP JUMPDEST GT ISZERO PUSH2 0x2BA7 JUMPI PUSH2 0x2B58 DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2B6B DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x2BCC JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0x2BE5 DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT DUP5 ADD SAR SWAP2 SWAP1 SWAP6 ADD MLOAD AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2C22 DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH2 0x2C36 DUP7 PUSH2 0x2DF2 JUMP JUMPDEST DUP5 PUSH2 0x2C41 DUP8 DUP5 PUSH2 0x31C9 JUMP JUMPDEST PUSH2 0x2C4B SWAP2 SWAP1 PUSH2 0x31C9 JUMP JUMPDEST GT ISZERO PUSH2 0x2C5E JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x2C80 JUMP JUMPDEST PUSH2 0x2C68 DUP6 DUP3 PUSH2 0x31C9 JUMP JUMPDEST SWAP1 POP PUSH2 0x2C7C DUP4 PUSH5 0xFFFFFFFFFF AND DUP3 DUP7 PUSH2 0x2A83 JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFFFFFF NOT DUP1 DUP5 AND SUB PUSH2 0x2CB0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x148D5133 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2CB9 DUP4 PUSH2 0x2E2B JUMP JUMPDEST ISZERO PUSH2 0x2CD7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EE09491 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2CEC DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2D0C DUP6 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD SWAP2 POP DUP6 DUP3 GT ISZERO PUSH2 0x2D2D JUMPI PUSH1 0x20 PUSH1 0x60 REVERT JUMPDEST DUP4 DUP7 DUP6 DUP6 PUSH1 0x4 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x2D55 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2AF1BD9B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2D70 PUSH2 0x2D62 DUP9 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND DUP8 DUP7 PUSH2 0x2D7B JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0x2DA3 JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0x2DDC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9F8 JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E07 DUP3 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2E1A DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E37 DUP3 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH5 0xFFFFFFFFFF SUB PUSH2 0x2E51 JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E5C DUP4 PUSH2 0x2DF2 JUMP JUMPDEST PUSH1 0x40 MLOAD LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2EA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2EC2 JUMPI PUSH2 0x2EC2 PUSH2 0x2E80 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x2EEA JUMPI PUSH2 0x2EEA PUSH2 0x2E80 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x2F03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2F35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2F4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C80 DUP5 DUP3 DUP6 ADD PUSH2 0x2E96 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH2 0x2F90 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2FA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2FC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2FCD DUP7 DUP4 DUP8 ADD PUSH2 0x2E96 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2FE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FF0 DUP6 DUP3 DUP7 ADD PUSH2 0x2E96 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x460 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3013 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x302B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x303F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x304E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x3063 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 DUP4 ADD SWAP8 POP SWAP6 POP POP DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x440 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x3084 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x40 ADD SWAP4 CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1BC7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x30D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1BC7 DUP3 PUSH2 0x30BF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3108 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3111 DUP5 PUSH2 0x30BF JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3134 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3140 DUP7 DUP3 DUP8 ADD PUSH2 0x2E96 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3165 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x314D JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x3186 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x314A JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1BC4 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x316E JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x165C JUMPI PUSH2 0x165C PUSH2 0x31B3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x31EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3208 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x316E JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x321A DUP2 DUP7 PUSH2 0x316E JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3246 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x316E JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x43E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x328A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x32AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x32C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x32DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3304 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1BC7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x165C JUMPI PUSH2 0x165C PUSH2 0x31B3 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x3340 JUMPI PUSH2 0x3340 PUSH2 0x31B3 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x335D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x3393 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x316E JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x33BE JUMPI PUSH1 0x0 NOT DUP2 PUSH1 0x20 SUB PUSH1 0x3 SHL SHL DUP3 AND SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3393 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x316E JUMP JUMPDEST DUP4 DUP2 MSTORE DUP3 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x28CB PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x316E JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP1 DUP10 PUSH1 0xE0 SHL AND DUP4 MSTORE DUP8 PUSH1 0x4 DUP5 ADD MSTORE DUP1 DUP8 PUSH1 0xE0 SHL AND PUSH1 0x24 DUP5 ADD MSTORE DUP1 DUP7 PUSH1 0xE0 SHL AND PUSH1 0x28 DUP5 ADD MSTORE POP DUP4 PUSH1 0x2C DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x345C DUP2 PUSH1 0x4C DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x314A JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x4C ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x165C JUMPI PUSH2 0x165C PUSH2 0x31B3 JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND MUL SWAP1 DUP2 AND SWAP1 DUP2 DUP2 EQ PUSH2 0x34A3 JUMPI PUSH2 0x34A3 PUSH2 0x31B3 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE0 PUSH7 0x9F9973A9EB5780 LOG1 PUSH30 0x59E6576A6D930C4941BD9D7E7E61EFD12671C7938F64736F6C6343000811 STOP CALLER ","sourceMap":"257:2529:126:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1587:37:116;;;;;;;;;;;;;;;;;;188:10:181;176:23;;;158:42;;146:2;131:18;1587:37:116;;;;;;;;8274:213:120;;;;;;;;;;-1:-1:-1;8274:213:120;;;;;:::i;:::-;;:::i;:::-;;3780:36;;;;;;;;;;;;;;;;;;542:25:181;;;530:2;515:18;3780:36:120;396:177:181;11079:368:120;;;;;;:::i;:::-;;:::i;5679:49::-;;;;;;;;;;-1:-1:-1;5679:49:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;4723:52::-;;;;;;;;;;-1:-1:-1;4723:52:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2592:14:181;;2585:22;2567:41;;2555:2;2540:18;4723:52:120;2427:187:181;1949:112:168;;;;;;;;;;-1:-1:-1;2029:27:168;;1949:112;;1810:70:114;;;;;;;;;;;;;:::i;1120:296:126:-;;;;;;:::i;:::-;;:::i;4262:148:116:-;;;;;;;;;;-1:-1:-1;4262:148:116;;;;;:::i;:::-;;:::i;14590:2124:120:-;;;;;;;;;;-1:-1:-1;14590:2124:120;;;;;:::i;:::-;;:::i;805:125:117:-;;;;;;;;;;-1:-1:-1;805:125:117;;;;;:::i;:::-;-1:-1:-1;;;;;891:34:117;920:4;891:34;;805:125;1268:30:116;;;;;;;;;;;;;;;5237:48:120;;;;;;;;;;-1:-1:-1;5237:48:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;853:30:167;;;;;;;;;;;;;;;;3939:119:116;;;;;;;;;;-1:-1:-1;3939:119:116;;;;;:::i;:::-;;:::i;1615:84:51:-;;;;;;;;;;-1:-1:-1;1685:7:51;;-1:-1:-1;;;1685:7:51;;;;1615:84;;1451:37:116;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4555:32:181;;;4537:51;;4525:2;4510:18;1451:37:116;4391:203:181;5424:50:120;;;;;;;;;;-1:-1:-1;5424:50:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;10615:87;;;;;;;;;;;;;:::i;9896:185::-;;;;;;;;;;-1:-1:-1;9896:185:120;;;;;:::i;:::-;;:::i;2151:79:168:-;;;;;;;;;;-1:-1:-1;1530:6:168;2151:79;;9312:328:120;;;;;;;;;;-1:-1:-1;9312:328:120;;;;;:::i;:::-;;:::i;10330:97::-;;;;;;;;;;;;;:::i;2321:71:114:-;;;;;;;;;;;;;:::i;10853:87:120:-;;;;;;;;;;-1:-1:-1;10929:6:120;10853:87;;1641:79:168;;;;;;;;;;-1:-1:-1;1687:7:168;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;5017:50:120;;;;;;;;;;-1:-1:-1;5017:50:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;4312:56;;;;;;;;;;-1:-1:-1;4312:56:120;;;;;:::i;:::-;;;;;;;;;;;;;;715:86:117;;;;;;;;;;-1:-1:-1;790:4:117;715:86;;3501:41:120;;;;;;;;;;;;;;;911:36:114;;;;;;;;;;-1:-1:-1;911:36:114;;;;-1:-1:-1;;;;;911:36:114;;;3276:26:120;;;;;;;;;;;;;;;;3321:420:168;;;;;;;;;;-1:-1:-1;3321:420:168;;;;;:::i;:::-;;:::i;8018:134:120:-;;;;;;;;;;-1:-1:-1;8018:134:120;;;;;:::i;:::-;;:::i;7757:129::-;;;;;;;;;;-1:-1:-1;7757:129:120;;;;;:::i;:::-;;:::i;5551:39::-;;;;;;;;;;-1:-1:-1;5551:39:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;4404:539:168;;;;;;;;;;;;;:::i;1705:30:116:-;;;;;;;;;;-1:-1:-1;1705:30:116;;;;-1:-1:-1;;;;;1705:30:116;;;1792:85:168;;;;;;;;;;-1:-1:-1;1863:9:168;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;;;;;;;;;;-1:-1:-1;3097:4:168;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;1457:263:114;;;;;;;;;;-1:-1:-1;1457:263:114;;;;;:::i;:::-;;:::i;1363:28:116:-;;;;;;;;;;;;;;;959::167;;;;;;;;;;;;;;;;3640:36:120;;;;;;;;;;;;;;;4490:107:116;;;;;;;;;;-1:-1:-1;4490:107:116;;;;;:::i;:::-;;:::i;8892::120:-;;;;;;;;;;-1:-1:-1;8892:107:120;;;;;:::i;:::-;;:::i;11954:1067::-;;;;;;;;;;-1:-1:-1;11954:1067:120;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;8274:213::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;8367:11:120::1;;8351:12;:27:::0;8343:52:::1;;;::::0;-1:-1:-1;;;8343:52:120;;7320:2:181;8343:52:120::1;::::0;::::1;7302:21:181::0;7359:2;7339:18;;;7332:30;-1:-1:-1;;;7378:18:181;;;7371:42;7430:18;;8343:52:120::1;;;;;;;;;8406:44;::::0;8439:10:::1;4537:51:181::0;;8425:12:120;;8406:44:::1;::::0;4525:2:181;4510:18;8406:44:120::1;;;;;;;8456:11;:26:::0;8274:213::o;11079:368::-;1239:19:51;:17;:19::i;:::-;1418:12:167::1;1400:15;;1384:13;;:31;;;;:::i;:::-;:46;1380:124;;;1447:50;;-1:-1:-1::0;;;1447:50:167::1;;;;;;;;;;;1380:124;1595:12;1579:13;:28;;;;11169:12:120::2;11184:6;-1:-1:-1::0;;;;;11184:11:120::2;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11211:22;::::0;;;:16:::2;:22;::::0;;;;;11169:28;;-1:-1:-1;11211:22:120::2;;:31;11203:61;;;::::0;-1:-1:-1;;;11203:61:120;;8112:2:181;11203:61:120::2;::::0;::::2;8094:21:181::0;8151:2;8131:18;;;8124:30;-1:-1:-1;;;8170:18:181;;;8163:47;8227:18;;11203:61:120::2;7910:341:181::0;11203:61:120::2;11270:18;11308:4;11291:22;;;;;;8385:19:181::0;;8429:2;8420:12;;8256:182;11291:22:120::2;;;;;;;;;;;;;11270:43;;11319:33;11332:5;11339:12;11319;:33::i;:::-;11358:22;::::0;;;:16:::2;:22;::::0;;;;;;:29;;-1:-1:-1;;11358:29:120::2;11383:4;11358:29;::::0;;11398:44;::::2;::::0;::::2;::::0;11410:5;;11417:12;;11431:10:::2;::::0;11398:44:::2;:::i;:::-;;;;;;;;11163:284;;11079:368:::0;:::o;1810:70:114:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1486:16:51::1;:14;:16::i;:::-;1865:10:114::2;:8;:10::i;:::-;1810:70::o:0;1120:296:126:-;2212:10:116;-1:-1:-1;;;;;2226:12:116;2212:26;;2204:51;;;;-1:-1:-1;;;2204:51:116;;9124:2:181;2204:51:116;;;9106:21:181;9163:2;9143:18;;;9136:30;-1:-1:-1;;;9182:18:181;;;9175:42;9234:18;;2204:51:116;8922:336:181;2204:51:116;1282:19:126;;:24;1274:49:::1;;;::::0;-1:-1:-1;;;1274:49:126;;9465:2:181;1274:49:126::1;::::0;::::1;9447:21:181::0;9504:2;9484:18;;;9477:30;-1:-1:-1;;;9523:18:181;;;9516:42;9575:18;;1274:49:126::1;9263:336:181::0;1274:49:126::1;1329:30;1342:5;1349:9;;;;;;;;;;;::::0;1329:12:::1;:30::i;:::-;1370:41;1382:5;1389:9;;;;;;;;;;;::::0;1400:10:::1;1370:41;;;;;;;;:::i;:::-;;;;;;;;1120:296:::0;;:::o;4262:148:116:-;1891:10;-1:-1:-1;;;;;1905:3:116;1891:17;;1883:34;;;;-1:-1:-1;;;1883:34:116;;;;;;9806:2:181;9788:21;;;9845:1;9825:18;;;9818:29;-1:-1:-1;;;9878:2:181;9863:18;;9856:34;9922:2;9907:18;;9604:327;1883:34:116;4370:35:::1;4387:5;4394:10;4370:35;;;;;;;:::i;:::-;;;;;;;;4262:148:::0;:::o;14590:2124:120:-;1239:19:51;:17;:19::i;:::-;2261:21:52::1;:19;:21::i;:::-;14839:18:120::0;14831:38:::2;;;::::0;-1:-1:-1;;;14831:38:120;;10457:2:181;14831:38:120::2;::::0;::::2;10439:21:181::0;10496:1;10476:18;;;10469:29;-1:-1:-1;;;10514:18:181;;;10507:37;10561:18;;14831:38:120::2;10255:330:181::0;14831:38:120::2;15122:20;15155:7;;15163:1;15155:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;15145:29;;;;;;;:::i;:::-;;;;;;;;15122:52;;15304:20;15327:69;15348:12;15362:7;;15370:1;15362:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:15;;15379:7;;15387:1;15379:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:16;;;15327:20;:69::i;:::-;15304:92;;15485:79;15502:12;15516:14;15532;15548:15;15485:16;:79::i;:::-;15667:22;::::0;;;:8:::2;:22;::::0;;;;:45;;-1:-1:-1;;15667:45:120::2;15692:20;15667:45:::0;;::::2;::::0;;;15852:7;;15872:441:::2;15895:3;15891:1;:7;;;15872:441;;;15935:7;;15943:1;15935:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;15925:29;;;;;;;:::i;:::-;;;;;;;;15910:44;;15962:23;15988:69;16009:12;16023:7;;16031:1;16023:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:15;;16040:7;;16048:1;16040:10;;;;;;;;;:::i;15988:69::-;15962:95;;16157:12;16138:15;:31;16130:55;;;::::0;-1:-1:-1;;;16130:55:120;;12056:2:181;16130:55:120::2;::::0;::::2;12038:21:181::0;12095:2;12075:18;;;12068:30;-1:-1:-1;;;12114:18:181;;;12107:41;12165:18;;16130:55:120::2;11854:335:181::0;16130:55:120::2;-1:-1:-1::0;16221:22:120::2;::::0;;;:8:::2;:22;::::0;;;;:45;;-1:-1:-1;;16221:45:120::2;16246:20;16221:45:::0;;::::2;::::0;;;16295:3:::2;15872:441;;;;16604:8;16599:111;16622:3;16618:1;:7;;;16599:111;;;16637:27;16645:7;;16653:1;16645:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;16637:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;16637:7:120::2;::::0;-1:-1:-1;;;16637:27:120:i:2;:::-;-1:-1:-1::0;16692:3:120::2;;16599:111;;;;14783:1931;;;2303:20:52::1;1716:1:::0;2809:7;:22;2629:209;2303:20:::1;14590:2124:120::0;;;;;:::o;3939:119:116:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4016:37:116::1;4036:16;4016:19;:37::i;:::-;3939:119:::0;:::o;10615:87:120:-;10662:7;10684:6;-1:-1:-1;;;;;10684:11:120;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10677:20;;10615:87;:::o;9896:185::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;9972:21:120::1;9999:39;10025:3:::0;9972:21;9999:17:::1;:39::i;:::-;10064:3;-1:-1:-1::0;;;;;10049:27:120::1;;10069:6;10049:27;;;;542:25:181::0;;530:2;515:18;;396:177;10049:27:120::1;;;;;;;;9949:132;9896:185:::0;:::o;9312:328::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1486:16:51::1;:14;:16::i;:::-;9467:38:120::2;::::0;;;:21:::2;:38;::::0;;;;;:43;;9459:77:::2;;;::::0;-1:-1:-1;;;9459:77:120;;12396:2:181;9459:77:120::2;::::0;::::2;12378:21:181::0;12435:2;12415:18;;;12408:30;-1:-1:-1;;;12454:18:181;;;12447:51;12515:18;;9459:77:120::2;12194:345:181::0;9459:77:120::2;9549:38;::::0;;;:21:::2;:38;::::0;;;;;9542:45;;;;9598:37;::::2;::::0;::::2;::::0;9571:15;542:25:181;;530:2;515:18;;396:177;10330:97:120;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2321:71:114;1251:14;;;:36;;-1:-1:-1;;;1251:36:114;;1276:10;1251:36;;;4537:51:181;;;;-1:-1:-1;;;;;1251:14:114;;:24;;4510:18:181;;1251:36:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1243:57;;;;-1:-1:-1;;;1243:57:114;;13028:2:181;1243:57:114;;;13010:21:181;13067:1;13047:18;;;13040:29;-1:-1:-1;;;13085:18:181;;;13078:38;13133:18;;1243:57:114;12826:331:181;1243:57:114;1239:19:51::1;:17;:19::i;:::-;2379:8:114::2;:6;:8::i;3321:420:168:-:0;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;8018:134:120:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;-1:-1:-1;;;;;8087:27:120;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;8080:34;;-1:-1:-1;;8080:34:120::1;::::0;;8125:22;;4537:51:181;;;8125:22:120::1;::::0;4510:18:181;8125:22:120::1;4391:203:181::0;7757:129:120;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;-1:-1:-1;;;;;7816:27:120;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;7816:34:120::1;7846:4;7816:34;::::0;;7861:20;;4537:51:181;;;7861:20:120::1;::::0;4510:18:181;7861:20:120::1;4391:203:181::0;4404:539:168;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;1457:263:114:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1569:14:114::1;::::0;-1:-1:-1;;;;;1569:14:114;;::::1;1542:42:::0;;::::1;::::0;1534:78:::1;;;::::0;-1:-1:-1;;;1534:78:114;;13497:2:181;1534:78:114::1;::::0;::::1;13479:21:181::0;13536:2;13516:18;;;13509:30;13575:25;13555:18;;;13548:53;13618:18;;1534:78:114::1;13295:347:181::0;1534:78:114::1;1618:14;:48:::0;;-1:-1:-1;;;;;;1618:48:114::1;-1:-1:-1::0;;;;;1618:48:114;::::1;::::0;;::::1;::::0;;;1677:38:::1;::::0;4537:51:181;;;1677:38:114::1;::::0;4525:2:181;4510:18;1677:38:114::1;4391:203:181::0;4490:107:116;4549:4;-1:-1:-1;;;;;1662:23:126;;:10;:23;4568:24:116;4561:31;4490:107;-1:-1:-1;;4490:107:116:o;8892::120:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;8963:31:120::1;8983:10;8963:19;:31::i;11954:1067::-:0;5841:10;12109:7;5822:30;;;:18;:30;;;;;;12118:12;;5822:30;;5814:55;;;;-1:-1:-1;;;5814:55:120;;13849:2:181;5814:55:120;;;13831:21:181;13888:2;13868:18;;;13861:30;-1:-1:-1;;;13907:18:181;;;13900:42;13959:18;;5814:55:120;13647:336:181;5814:55:120;12227:26:::1;::::0;;::::1;12211:13;12227:26:::0;;;:6:::1;:26;::::0;;;;:28;;12211:13;;12227:28;;;::::1;::::0;12211:13;12227:28:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12211:44;;12307:21;12331:172;12360:6;12374:38;12401:10;-1:-1:-1::0;;;;;335:23:173;;241:123;12374:38:120::1;12420:6;12434:18;12460:17;12485:12;12331:21;:172::i;:::-;12588:19:::0;;::::1;::::0;::::1;::::0;12749:27:::1;::::0;-1:-1:-1;;;12749:27:120;;::::1;::::0;::::1;542:25:181::0;;;12588:19:120;;-1:-1:-1;12588:19:120;12565:20:::1;::::0;;;12749:6:::1;-1:-1:-1::0;;;;;12749:13:120::1;::::0;::::1;::::0;515:18:181;;12749:27:120::1;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12715:61:::0;;-1:-1:-1;12715:61:120;-1:-1:-1;12928:51:120::1;12937:12:::0;12951:10:::1;12960:1;12715:61:::0;12951:10:::1;:::i;:::-;12963:5;12970:8;12928:51;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;12993:12:120;;13007:8;;-1:-1:-1;11954:1067:120;;-1:-1:-1;;;;;;11954:1067:120:o;1767:106:51:-;1685:7;;-1:-1:-1;;;1685:7:51;;;;1836:9;1828:38;;;;-1:-1:-1;;;1828:38:51;;15083:2:181;1828:38:51;;;15065:21:181;15122:2;15102:18;;;15095:30;-1:-1:-1;;;15141:18:181;;;15134:46;15197:18;;1828:38:51;14881:340:181;1920:606:126;2068:19;;:24;2060:49;;;;-1:-1:-1;;;2060:49:126;;9465:2:181;2060:49:126;;;9447:21:181;9504:2;9484:18;;;9477:30;-1:-1:-1;;;9523:18:181;;;9516:42;9575:18;;2060:49:126;9263:336:181;2060:49:126;2214:5;:12;2230:2;2214:18;2206:38;;;;-1:-1:-1;;;2206:38:126;;15428:2:181;2206:38:126;;;15410:21:181;15467:1;15447:18;;;15440:29;-1:-1:-1;;;15485:18:181;;;15478:37;15532:18;;2206:38:126;15226:330:181;2206:38:126;-1:-1:-1;;;;;2268:12:126;2254:26;:10;:26;2250:132;;2325:36;2346:14;2354:5;2346:14;:::i;:::-;2325:20;:36::i;:::-;1920:606;;:::o;2250:132::-;-1:-1:-1;;;;;2474:12:126;2461:36;;2498:6;2506:14;2514:5;2506:14;:::i;:::-;2461:60;;-1:-1:-1;;;;;;2461:60:126;;;;;;;;16053:23:181;;;;2461:60:126;;;16035:42:181;16093:18;;;16086:34;16008:18;;2461:60:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1920:606;;:::o;1945:106:51:-;1685:7;;-1:-1:-1;;;1685:7:51;;;;2003:41;;;;-1:-1:-1;;;2003:41:51;;16333:2:181;2003:41:51;;;16315:21:181;16372:2;16352:18;;;16345:30;-1:-1:-1;;;16391:18:181;;;16384:50;16451:18;;2003:41:51;16131:344:181;2433:117:51;1486:16;:14;:16::i;:::-;2491:7:::1;:15:::0;;-1:-1:-1;;;;2491:15:51::1;::::0;;2521:22:::1;719:10:58::0;2530:12:51::1;2521:22;::::0;-1:-1:-1;;;;;4555:32:181;;;4537:51;;4525:2;4510:18;2521:22:51::1;;;;;;;2433:117::o:0;2336:287:52:-;1759:1;2468:7;;:19;2460:63;;;;-1:-1:-1;;;2460:63:52;;16682:2:181;2460:63:52;;;16664:21:181;16721:2;16701:18;;;16694:30;16760:33;16740:18;;;16733:61;16811:18;;2460:63:52;16480:355:181;2460:63:52;1759:1;2598:7;:18;2336:287::o;19673:730:120:-;19822:7;;19925:22;;;;:8;:22;;;;;;;;:44;;;;;;;;:::i;:::-;;19917:76;;;;-1:-1:-1;;;19917:76:120;;17042:2:181;19917:76:120;;;17024:21:181;17081:2;17061:18;;;17054:30;-1:-1:-1;;;17100:18:181;;;17093:49;17159:18;;19917:76:120;16840:343:181;19917:76:120;20335:63;20356:12;20370;20335:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20384:13:120;;-1:-1:-1;20335:20:120;;-1:-1:-1;20335:63:120:i;:::-;20328:70;;19673:730;;;;;;:::o;20958:1261::-;21206:32;;;;:18;:32;;;;;;;;21531:7;21202:342;21599:35;21619:14;21599:19;:35::i;:::-;21740:32;21775:67;21796:12;21810:14;21775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21826:15:120;;-1:-1:-1;21775:20:120;;-1:-1:-1;21775:67:120:i;:::-;21740:102;;21968:14;21940:24;:42;21932:74;;;;-1:-1:-1;;;21932:74:120;;17390:2:181;21932:74:120;;;17372:21:181;17429:2;17409:18;;;17402:30;-1:-1:-1;;;17448:18:181;;;17441:49;17507:18;;21932:74:120;17188:343:181;21932:74:120;22104:32;;;;:18;:32;;;;;;;:39;;-1:-1:-1;;22104:39:120;22139:4;22104:39;;;22154:60;22182:14;;22123:12;;22154:60;;;;22198:15;542:25:181;;530:2;515:18;;396:177;22154:60:120;;;;;;;;21121:1098;20958:1261;;;;;:::o;22704:1731::-;22762:13;;22796:15;:8;22762:13;22796:12;:15::i;:::-;22783:28;-1:-1:-1;22873:26:120;22893:6;22873:26;:16;-1:-1:-1;;22873:14:120;;;:16::i;:::-;:26;;;22865:51;;;;-1:-1:-1;;;22865:51:120;;17738:2:181;22865:51:120;;;17720:21:181;17777:2;17757:18;;;17750:30;-1:-1:-1;;;17796:18:181;;;17789:42;17848:18;;22865:51:120;17536:336:181;22865:51:120;22960:20;22983:11;-1:-1:-1;;22983:9:120;;;:11::i;:::-;22960:34;-1:-1:-1;23034:20:120;23008:22;;;;:8;:22;;;;;;;;:46;;;;;;;;:::i;:::-;;23000:66;;;;-1:-1:-1;;;23000:66:120;;18079:2:181;23000:66:120;;;18061:21:181;18118:1;18098:18;;;18091:29;-1:-1:-1;;;18136:18:181;;;18129:37;18183:18;;23000:66:120;17877:330:181;23000:66:120;23209:22;;;;:8;:22;;;;;:48;;-1:-1:-1;;23209:48:120;23234:23;23209:48;;;;23746:25;23760:11;23746;:25;:::i;:::-;:29;;;;:::i;:::-;23734:9;:41;23726:58;;;;-1:-1:-1;;;23726:58:120;;;;;;18414:2:181;18396:21;;;18453:1;18433:18;;;18426:29;-1:-1:-1;;;18486:2:181;18471:18;;18464:34;18530:2;18515:18;;18212:327;23726:58:120;23823:18;23844:21;-1:-1:-1;;23844:19:120;;;:21::i;:::-;24027:19;;;23953:3;24027:19;;;;;;;;;23823:42;;-1:-1:-1;23918:11:120;;23903:12;;23953:3;24027:19;;;;;;;;;;-1:-1:-1;;24000:46:120;-1:-1:-1;24052:22:120;24153:11;-1:-1:-1;;24153:9:120;;;:11::i;:::-;24172:10;-1:-1:-1;;24172:8:120;;;:10::i;:::-;24190:11;-1:-1:-1;;24190:9:120;;;:11::i;:::-;24209:17;:9;-1:-1:-1;;24209:7:120;;;:9::i;:::-;-1:-1:-1;;24209:15:120;;:17::i;:::-;24077:155;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;24077:155:120;;;;;;;;;;;;;;-1:-1:-1;;;;;24077:155:120;-1:-1:-1;;;24077:155:120;;;;-1:-1:-1;24265:81:120;24305:10;24317:4;-1:-1:-1;24326:8:120;24077:155;24265:39;:81::i;:::-;24386:44;;24239:107;;-1:-1:-1;24239:107:120;-1:-1:-1;24386:44:120;;;;24394:12;;24239:107;;;;24386:44;:::i;:::-;;;;;;;;22777:1658;;;;;;;22704:1731;;;:::o;5838:185:116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;19610:34:181;;19680:15;;;19675:2;19660:18;;19653:43;5921:57:116;;19545:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;2412:312:57:-;2526:6;2501:21;:31;;2493:73;;;;-1:-1:-1;;;2493:73:57;;19909:2:181;2493:73:57;;;19891:21:181;19948:2;19928:18;;;19921:30;19987:31;19967:18;;;19960:59;20036:18;;2493:73:57;19707:353:181;2493:73:57;2578:12;2596:9;-1:-1:-1;;;;;2596:14:57;2618:6;2596:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:52;;;2647:7;2639:78;;;;-1:-1:-1;;;2639:78:57;;20477:2:181;2639:78:57;;;20459:21:181;20516:2;20496:18;;;20489:30;20555:34;20535:18;;;20528:62;20626:28;20606:18;;;20599:56;20672:19;;2639:78:57;20275:422:181;2639:78:57;2483:241;2412:312;;:::o;2186:115:51:-;1239:19;:17;:19::i;:::-;2245:7:::1;:14:::0;;-1:-1:-1;;;;2245:14:51::1;-1:-1:-1::0;;;2245:14:51::1;::::0;;2274:20:::1;2281:12;719:10:58::0;;640:96;5170:183:168;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;4981:185::-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;1742:335:167:-;1834:15;;1817:13;:32;1809:60;;;;-1:-1:-1;;;1809:60:167;;20904:2:181;1809:60:167;;;20886:21:181;20943:2;20923:18;;;20916:30;-1:-1:-1;;;20962:18:181;;;20955:45;21017:18;;1809:60:167;20702:339:181;1809:60:167;1983:15;:31;;;2025:47;;;2046:10;21220:51:181;;21302:2;21287:18;;21280:34;;;2025:47:167;;21193:18:181;2025:47:167;21046:274:181;981:328:165;1183:12;1227:13;1242:7;1251:6;1259:18;1279:10;1291:12;1210:94;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1203:101;;981:328;;;;;;;;:::o;17098:357:120:-;17169:8;17161:50;;;;-1:-1:-1;;;17161:50:120;;22242:2:181;17161:50:120;;;22224:21:181;22281:2;22261:18;;;22254:30;-1:-1:-1;;;22300:18:181;;;22293:44;22354:18;;17161:50:120;22040:338:181;17161:50:120;17225:31;;;;:21;:31;;;;;;:36;17217:69;;;;-1:-1:-1;;;17217:69:120;;22585:2:181;17217:69:120;;;22567:21:181;22624:2;22604:18;;;22597:30;-1:-1:-1;;;22643:18:181;;;22636:50;22703:18;;17217:69:120;22383:344:181;17217:69:120;17301:30;;;;:20;:30;;;;;;;;17300:31;17292:63;;;;-1:-1:-1;;;17292:63:120;;22934:2:181;17292:63:120;;;22916:21:181;22973:2;22953:18;;;22946:30;-1:-1:-1;;;22992:18:181;;;22985:49;23051:18;;17292:63:120;22732:343:181;17292:63:120;17362:31;;;;:21;:31;;;;;;;17396:12;17362:46;;17419:31;;;;;17384:8;542:25:181;;530:2;515:18;;396:177;24755:6146:164;25004:22;25008:1;25004:22;;;;;25033:19;;;25080:25;;25066:12;;;25059:47;;;;25138:4;24881:16;25125:18;;;25182:9;25170:22;;25163:30;25156:38;;25208:12;;;25201:30;;;;25254:34;;;25248:41;25238:52;;25309:18;;;25366:9;25354:22;;25347:30;25340:38;;25392:12;;;25385:30;;;;25438:34;;;25432:41;25422:52;;25493:18;;;25550:9;25538:22;;25531:30;25524:38;;25576:12;;;25569:30;;;;25646:9;25622:34;;25616:41;25606:52;;25677:18;;;25734:9;25722:22;;25715:30;25708:38;;25760:12;;;25753:30;;;;25830:9;25806:34;;;25800:41;25790:52;;;25861:18;;;25906:22;;;25899:30;25892:38;;25944:12;;;25937:30;;;;26014:9;25990:34;;25984:41;25974:52;;26045:18;;;26090:22;;;26083:30;26076:38;;26128:12;;;26121:30;;;;26198:9;26174:34;;26168:41;26158:52;;26229:18;;;26274:22;;;26267:30;26260:38;;26312:12;;;26305:30;;;;26382:9;26358:34;;26352:41;26342:52;;26413:18;;;26470:9;26458:22;;;26451:30;26444:38;;26496:12;;;26489:30;;;;26542:34;;26536:41;26526:52;;26597:18;;;26654:9;26642:22;;;26635:30;26628:38;;26680:12;;;26673:30;;;;26750:9;26726:34;;26720:41;26710:52;;;26781:18;;;26838:10;26826:23;;26819:31;26812:39;;26865:12;;;26858:30;;;;26935:10;26911:35;;26905:42;26895:53;;26967:18;;;27024:10;27012:23;;27005:31;26998:39;;27051:12;;;27044:30;;;;27121:10;27097:35;;27091:42;27081:53;;27153:18;;;27210:10;27198:23;;27191:31;27184:39;;27237:12;;;27230:30;;;;27307:10;27283:35;;27277:42;27267:53;;27339:18;;;27396:10;27384:23;;27377:31;27370:39;;27423:12;;;27416:30;;;;27493:10;27469:35;;27463:42;27453:53;;27525:18;;;27582:10;27570:23;;27563:31;27556:39;;27609:12;;;27602:30;;;;27679:10;27655:35;;27649:42;27639:53;;27711:18;;;27768:10;27756:23;;27749:31;27742:39;;27795:12;;;27788:30;;;;27865:10;27841:35;;27835:42;27825:53;;27897:18;;;27954:10;27942:23;;27935:31;27928:39;;27981:12;;;27974:30;;;;28027:35;;;28021:42;28011:53;;28083:18;;;28140:10;28128:23;;28121:31;28114:39;;28167:12;;;28160:30;;;;28237:10;28213:35;;28207:42;28197:53;;28269:18;;;28326:10;28314:23;;28307:31;28300:39;;28353:12;;;28346:30;;;;28423:10;28399:35;;28393:42;28383:53;;28455:18;;;28512:10;28500:23;;28493:31;28486:39;;28539:12;;;28532:30;;;;28609:10;28585:35;;28579:42;28569:53;;28641:18;;;28698:10;28686:23;;28679:31;28672:39;;28725:12;;;28718:30;;;;28795:10;28771:35;;28765:42;28755:53;;28827:18;;;28884:10;28872:23;;28865:31;28858:39;;28911:12;;;28904:30;;;;28981:10;28957:35;;28951:42;28941:53;;29013:18;;;29070:10;29058:23;;29051:31;29044:39;;29097:12;;;29090:30;;;;29167:10;29143:35;;29137:42;29127:53;;29199:18;;;29256:10;29244:23;;29237:31;29230:39;;29283:12;;;29276:30;;;;29353:10;29329:35;;29323:42;29313:53;;29385:18;;;29442:10;29430:23;;29423:31;29416:39;;29469:12;;;29462:30;;;;29539:10;29515:35;;29509:42;29499:53;;29571:18;;;29628:10;29616:23;;29609:31;29602:39;;29655:12;;;29648:30;;;;29725:10;29701:35;;29695:42;29685:53;;29757:18;;;29814:10;29802:23;;29795:31;29788:39;;29841:12;;;29834:30;;;;29911:10;29887:35;;29881:42;29871:53;;29943:18;;;30000:10;29988:23;;29981:31;29974:39;;30027:12;;;30020:30;;;;30097:10;30073:35;;30067:42;30057:53;;30129:18;;;30186:10;30174:23;;30167:31;30160:39;;30213:12;;;30206:30;;;;30283:10;30259:35;;30253:42;30243:53;;30315:18;;;30372:10;30360:23;;30353:31;30346:39;;30399:12;;;30392:30;;;;30469:10;30445:35;;30439:42;30429:53;;30501:18;;;30558:10;30546:23;;30539:31;30532:39;;30585:12;;;30578:30;;;;30655:10;30631:35;;30625:42;30615:53;;30687:18;;;30744:10;30732:23;;;30725:31;30718:39;;;30771:12;;;;30764:30;;;;30841:10;30817:35;;;30811:42;30801:53;;;30873:18;;;24755:6146::o;17891:1180:120:-;18006:14;17998:61;;;;-1:-1:-1;;;17998:61:120;;23282:2:181;17998:61:120;;;23264:21:181;23321:2;23301:18;;;23294:30;-1:-1:-1;;;23340:18:181;;;23333:49;23399:18;;17998:61:120;23080:343:181;17998:61:120;18149:36;;;;:20;:36;;;;;;;;18145:104;;;17891:1180;:::o;18145:104::-;18354:33;18390:37;;;:21;:37;;;;;;;18441:30;;;18433:63;;;;-1:-1:-1;;;18433:63:120;;23630:2:181;18433:63:120;;;23612:21:181;23669:2;23649:18;;;23642:30;-1:-1:-1;;;23688:18:181;;;23681:50;23748:18;;18433:63:120;23428:344:181;18433:63:120;18641:11;;18597:40;18612:25;18597:12;:40;:::i;:::-;:55;;18589:91;;;;-1:-1:-1;;;18589:91:120;;23979:2:181;18589:91:120;;;23961:21:181;24018:2;23998:18;;;23991:30;24057:25;24037:18;;;24030:53;24100:18;;18589:91:120;23777:347:181;18589:91:120;18808:36;;;;:20;:36;;;;;;:43;;-1:-1:-1;;18808:43:120;18847:4;18808:43;;;18862:37;18829:14;;18862:37;;;-1:-1:-1;19029:37:120;;;;:21;:37;;;;;19022:44;17891:1180::o;10748:325:174:-;10848:10;;10818:7;;10975:4;10966:14;;11042:26;;;;10966:14;10848:10;11042:5;:26::i;:::-;11035:33;10748:325;-1:-1:-1;;;;;10748:325:174:o;2583:121:165:-;2645:6;2673:25;-1:-1:-1;;2673:18:165;;2692:2;2696:1;2673:18;:25::i;17661:260:174:-;17717:14;17739:12;17754;17758:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;17754:12;-1:-1:-1;;;;;17739:27:174;;;17772:12;17787;17791:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;17787:12;-1:-1:-1;;;;;17772:27:174;17890:21;;;;17661:260;-1:-1:-1;;;17661:260:174:o;2942:141:165:-;3009:7;3031:47;3058:19;3068:8;3058:9;:19::i;:::-;508:4:173;399:121;2097:115:165;2154:6;2182:24;-1:-1:-1;;2182:18:165;;2154:6;2204:1;2182:18;:24::i;2414:115::-;2470:6;2498:25;-1:-1:-1;;2498:18:165;;2517:2;2521:1;2498:18;:25::i;2261:105::-;2318:7;2340:21;-1:-1:-1;;2340:14:165;;2355:1;2358:2;2340:14;:21::i;3201:146::-;3256:7;3278:64;533:2;3308:30;533:2;13008::174;13004:16;;;-1:-1:-1;;;;;13000:28:174;3308:30:165;:::i;:::-;-1:-1:-1;;3278:14:165;;;:64;3340:1;3278:14;:64::i;21380:556:174:-;21435:16;21459:11;21476:12;21491;21495:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;21491:12;-1:-1:-1;;;;;21476:27:174;;;21597:4;21591:11;21584:18;;21646:3;21639:10;;21678:33;21691:7;21700:3;21706:4;21700:10;21678:12;:33::i;:::-;-1:-1:-1;21815:14:174;;;21831:4;21811:25;21805:4;21798:39;21872:17;;21380:556;;-1:-1:-1;21380:556:174:o;1360:1117:171:-;1519:4;1525:12;1577:15;1598:13;1617:24;1654:8;1644:19;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1644:19:171;;1617:46;;2083:1;2062;2033:9;2027:16;2003:4;1992:9;1988:20;1957:6;1927:7;1906:4;1892:210;1880:222;;2157:16;2146:27;;2195:8;2186:7;2183:21;2180:62;;;2226:8;2215:19;;2180:62;2315:7;2302:11;2295:28;2423:7;2420:1;2413:4;2400:11;2396:22;2381:50;2450:8;;;;-1:-1:-1;1360:1117:171;-1:-1:-1;;;;;;;1360:1117:171:o;9979:390:174:-;10076:15;;10114:11;10121:4;10114;:11;:::i;:::-;10099:26;;10224:4;10218:11;10212:4;10209:21;10206:52;;;-1:-1:-1;10249:1:174;10206:52;10273:4;10281:1;10273:9;10269:41;;-1:-1:-1;;10292:11:174;;;;;10269:41;10325:39;10346:5;10353:4;10359;10325:20;:39::i;16417:201::-;16522:14;16596:11;16601:6;16596:2;:11;:::i;:::-;16595:17;;16611:1;16595:17;:::i;:::-;16551:62;;16559:30;16565:7;16574:6;16582;16559:5;:30::i;:::-;16551:62;;;16417:201;-1:-1:-1;;;;16417:201:174:o;2767:109:165:-;2827:7;2849:22;-1:-1:-1;;2849:14:165;;2864:2;2868;15274:815:174;15375:14;15401:6;:11;;15411:1;15401:11;15397:49;;-1:-1:-1;15437:1:174;15422:17;;15397:49;15473:12;15477:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15473:12;-1:-1:-1;;;;;15455:30:174;:15;;;;:6;:15;:::i;:::-;:30;15451:282;;;15674:12;15678:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15674:12;15688;15692:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15688:12;15646:80;;-1:-1:-1;;;15646:80:174;;-1:-1:-1;;;;;24807:15:181;;;15646:80:174;;;24789:34:181;24859:15;;24839:18;;;24832:43;24891:18;;;24884:34;;;15710:15:174;;;24934:18:181;;;24927:34;24716:19;;15646:80:174;24515:452:181;15451:282:174;15751:2;15742:6;:11;;;15738:66;;;15762:42;;-1:-1:-1;;;15762:42:174;;;;;;;;;;;15738:66;15871:1;15862:10;;15811:15;15899:12;15903:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15899:12;-1:-1:-1;;;;;15884:27:174;;-1:-1:-1;15917:13:174;-1:-1:-1;;;;;5031:12:174;;5027:85;16053:17;;;;16047:24;16043:36;;;-1:-1:-1;;;;;15274:815:174:o;13593:349::-;13714:7;13729:12;13744;13748:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;13744:12;-1:-1:-1;;;;;13729:27:174;;;13832:12;13836:7;13832:3;:12::i;:::-;13825:4;13809:13;13816:6;13809:4;:13;:::i;:::-;:20;;;;:::i;:::-;:35;13805:67;;;-1:-1:-1;;13854:11:174;;;;;13805:67;13885:13;13892:6;13885:4;:13;:::i;:::-;13878:20;;13911:26;13917:7;13911:26;;13926:4;13932;13911:5;:26::i;:::-;13904:33;;;13593:349;;;;;;;:::o;20133:893::-;20211:15;-1:-1:-1;;5480:15:174;;;;20234:68;;20262:40;;-1:-1:-1;;;20262:40:174;;;;;;;;;;;20234:68;20312:19;20323:7;20312:10;:19::i;:::-;20308:75;;;20340:43;;-1:-1:-1;;;20340:43:174;;;;;;;;;;;20308:75;20390:12;20405;20409:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;20405:12;-1:-1:-1;;;;;20390:27:174;;;20423:15;20441:12;20445:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;20441:12;-1:-1:-1;;;;;20423:30:174;;;20460:11;20477:8;20579:4;20573:11;20566:18;;20654:7;20649:3;20646:16;20643:80;;;20686:4;20680;20673:18;20643:80;20880:4;20871:7;20865:4;20856:7;20853:1;20846:5;20835:50;20828:57;;20901:3;20896:57;;20913:40;;-1:-1:-1;;;20913:40:174;;;;;;;;;;;20896:57;20969:52;20990:15;20997:7;11442:17;11438:31;;11253:254;20990:15;20969:52;;21007:7;21016:4;20969:20;:52::i;:::-;20959:62;20133:893;-1:-1:-1;;;;;;;20133:893:174:o;8805:657::-;8916:15;8961:2;8990;9076:4;9108;-1:-1:-1;;;;;9127:12:174;;;;:28;;;;;9151:4;9143;-1:-1:-1;;;;;9143:12:174;;9127:28;9119:51;;;;-1:-1:-1;;;9119:51:174;;25174:2:181;9119:51:174;;;25156:21:181;25213:2;25193:18;;;25186:30;-1:-1:-1;;;25232:18:181;;;25225:40;25282:18;;9119:51:174;24972:334:181;9119:51:174;9271:23;;;9344:17;;;9327:35;;;9410:17;;;9394:34;;;;;-1:-1:-1;;;8805:657:174:o;13200:131::-;13253:7;13308:12;13312:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;13308:12;13293;13297:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;13293:12;:27;-1:-1:-1;;;;;13286:34:174;;;13200:131;;;:::o;6121:290::-;6181:8;6201:15;6208:7;11442:17;11438:31;;11253:254;6201:15;:31;;6220:12;6201:31;6197:63;;-1:-1:-1;6249:4:174;;6121:290;-1:-1:-1;6121:290:174:o;6197:63::-;6265:12;6280;6284:7;6280:3;:12::i;:::-;6395:4;6389:11;-1:-1:-1;6380:21:174;6121:290;-1:-1:-1;;;6121:290:174:o;211:180:181:-;270:6;323:2;311:9;302:7;298:23;294:32;291:52;;;339:1;336;329:12;291:52;-1:-1:-1;362:23:181;;211:180;-1:-1:-1;211:180:181:o;578:127::-;639:10;634:3;630:20;627:1;620:31;670:4;667:1;660:15;694:4;691:1;684:15;710:718;752:5;805:3;798:4;790:6;786:17;782:27;772:55;;823:1;820;813:12;772:55;859:6;846:20;885:18;922:2;918;915:10;912:36;;;928:18;;:::i;:::-;1003:2;997:9;971:2;1057:13;;-1:-1:-1;;1053:22:181;;;1077:2;1049:31;1045:40;1033:53;;;1101:18;;;1121:22;;;1098:46;1095:72;;;1147:18;;:::i;:::-;1187:10;1183:2;1176:22;1222:2;1214:6;1207:18;1268:3;1261:4;1256:2;1248:6;1244:15;1240:26;1237:35;1234:55;;;1285:1;1282;1275:12;1234:55;1349:2;1342:4;1334:6;1330:17;1323:4;1315:6;1311:17;1298:54;1396:1;1389:4;1384:2;1376:6;1372:15;1368:26;1361:37;1416:6;1407:15;;;;;;710:718;;;;:::o;1433:320::-;1501:6;1554:2;1542:9;1533:7;1529:23;1525:32;1522:52;;;1570:1;1567;1560:12;1522:52;1610:9;1597:23;1643:18;1635:6;1632:30;1629:50;;;1675:1;1672;1665:12;1629:50;1698:49;1739:7;1730:6;1719:9;1715:22;1698:49;:::i;1943:127::-;2004:10;1999:3;1995:20;1992:1;1985:31;2035:4;2032:1;2025:15;2059:4;2056:1;2049:15;2075:347;2226:2;2211:18;;2259:1;2248:13;;2238:144;;2304:10;2299:3;2295:20;2292:1;2285:31;2339:4;2336:1;2329:15;2367:4;2364:1;2357:15;2238:144;2391:25;;;2075:347;:::o;2619:539::-;2705:6;2713;2766:2;2754:9;2745:7;2741:23;2737:32;2734:52;;;2782:1;2779;2772:12;2734:52;2822:9;2809:23;2851:18;2892:2;2884:6;2881:14;2878:34;;;2908:1;2905;2898:12;2878:34;2931:49;2972:7;2963:6;2952:9;2948:22;2931:49;:::i;:::-;2921:59;;3033:2;3022:9;3018:18;3005:32;2989:48;;3062:2;3052:8;3049:16;3046:36;;;3078:1;3075;3068:12;3046:36;;3101:51;3144:7;3133:8;3122:9;3118:24;3101:51;:::i;:::-;3091:61;;;2619:539;;;;;:::o;3163:932::-;3328:6;3336;3344;3352;3360;3413:4;3401:9;3392:7;3388:23;3384:34;3381:54;;;3431:1;3428;3421:12;3381:54;3471:9;3458:23;3500:18;3541:2;3533:6;3530:14;3527:34;;;3557:1;3554;3547:12;3527:34;3595:6;3584:9;3580:22;3570:32;;3640:7;3633:4;3629:2;3625:13;3621:27;3611:55;;3662:1;3659;3652:12;3611:55;3702:2;3689:16;3728:2;3720:6;3717:14;3714:34;;;3744:1;3741;3734:12;3714:34;3799:7;3792:4;3782:6;3779:1;3775:14;3771:2;3767:23;3763:34;3760:47;3757:67;;;3820:1;3817;3810:12;3757:67;3851:4;3843:13;;;;-1:-1:-1;3875:6:181;-1:-1:-1;;3913:20:181;;3900:34;;-1:-1:-1;3968:4:181;3953:20;;3985:15;;;3982:35;;;4013:1;4010;4003:12;3982:35;3163:932;;;;-1:-1:-1;3163:932:181;;4051:2;4036:18;;4073:16;;3163:932;-1:-1:-1;;3163:932:181:o;4100:286::-;4159:6;4212:2;4200:9;4191:7;4187:23;4183:32;4180:52;;;4228:1;4225;4218:12;4180:52;4254:23;;-1:-1:-1;;;;;4306:31:181;;4296:42;;4286:70;;4352:1;4349;4342:12;5473:163;5540:20;;5600:10;5589:22;;5579:33;;5569:61;;5626:1;5623;5616:12;5569:61;5473:163;;;:::o;5641:184::-;5699:6;5752:2;5740:9;5731:7;5727:23;5723:32;5720:52;;;5768:1;5765;5758:12;5720:52;5791:28;5809:9;5791:28;:::i;5830:460::-;5915:6;5923;5931;5984:2;5972:9;5963:7;5959:23;5955:32;5952:52;;;6000:1;5997;5990:12;5952:52;6023:28;6041:9;6023:28;:::i;:::-;6013:38;;6098:2;6087:9;6083:18;6070:32;6060:42;;6153:2;6142:9;6138:18;6125:32;6180:18;6172:6;6169:30;6166:50;;;6212:1;6209;6202:12;6166:50;6235:49;6276:7;6267:6;6256:9;6252:22;6235:49;:::i;:::-;6225:59;;;5830:460;;;;;:::o;6295:250::-;6380:1;6390:113;6404:6;6401:1;6398:13;6390:113;;;6480:11;;;6474:18;6461:11;;;6454:39;6426:2;6419:10;6390:113;;;-1:-1:-1;;6537:1:181;6519:16;;6512:27;6295:250::o;6550:270::-;6591:3;6629:5;6623:12;6656:6;6651:3;6644:19;6672:76;6741:6;6734:4;6729:3;6725:14;6718:4;6711:5;6707:16;6672:76;:::i;:::-;6802:2;6781:15;-1:-1:-1;;6777:29:181;6768:39;;;;6809:4;6764:50;;6550:270;-1:-1:-1;;6550:270:181:o;6825:288::-;7000:6;6989:9;6982:25;7043:2;7038;7027:9;7023:18;7016:30;6963:4;7063:44;7103:2;7092:9;7088:18;7080:6;7063:44;:::i;7459:127::-;7520:10;7515:3;7511:20;7508:1;7501:31;7551:4;7548:1;7541:15;7575:4;7572:1;7565:15;7591:125;7656:9;;;7677:10;;;7674:36;;;7690:18;;:::i;7721:184::-;7791:6;7844:2;7832:9;7823:7;7819:23;7815:32;7812:52;;;7860:1;7857;7850:12;7812:52;-1:-1:-1;7883:16:181;;7721:184;-1:-1:-1;7721:184:181:o;8443:474::-;8664:2;8653:9;8646:21;8627:4;8690:44;8730:2;8719:9;8715:18;8707:6;8690:44;:::i;:::-;8782:9;8774:6;8770:22;8765:2;8754:9;8750:18;8743:50;8810:32;8835:6;8827;8810:32;:::i;:::-;8802:40;;;8907:1;8903;8898:3;8894:11;8890:19;8882:6;8878:32;8873:2;8862:9;8858:18;8851:60;8443:474;;;;;;:::o;9936:314::-;10111:2;10100:9;10093:21;10074:4;10131:44;10171:2;10160:9;10156:18;10148:6;10131:44;:::i;:::-;10123:52;;10240:1;10236;10231:3;10227:11;10223:19;10215:6;10211:32;10206:2;10195:9;10191:18;10184:60;9936:314;;;;;:::o;10590:127::-;10651:10;10646:3;10642:20;10639:1;10632:31;10682:4;10679:1;10672:15;10706:4;10703:1;10696:15;10722:325;10814:4;10872:11;10859:25;10966:4;10962:9;10951:8;10935:14;10931:29;10927:45;10907:18;10903:70;10893:98;;10987:1;10984;10977:12;10893:98;11008:33;;;;;10722:325;-1:-1:-1;;10722:325:181:o;11052:521::-;11129:4;11135:6;11195:11;11182:25;11289:2;11285:7;11274:8;11258:14;11254:29;11250:43;11230:18;11226:68;11216:96;;11308:1;11305;11298:12;11216:96;11335:33;;11387:20;;;-1:-1:-1;11430:18:181;11419:30;;11416:50;;;11462:1;11459;11452:12;11416:50;11495:4;11483:17;;-1:-1:-1;11526:14:181;11522:27;;;11512:38;;11509:58;;;11563:1;11560;11553:12;11509:58;11052:521;;;;;:::o;11578:271::-;11761:6;11753;11748:3;11735:33;11717:3;11787:16;;11812:13;;;11787:16;11578:271;-1:-1:-1;11578:271:181:o;12544:277::-;12611:6;12664:2;12652:9;12643:7;12639:23;12635:32;12632:52;;;12680:1;12677;12670:12;12632:52;12712:9;12706:16;12765:5;12758:13;12751:21;12744:5;12741:32;12731:60;;12787:1;12784;12777:12;13162:128;13229:9;;;13250:11;;;13247:37;;;13264:18;;:::i;13988:201::-;14026:3;14054:10;14099:2;14092:5;14088:14;14126:2;14117:7;14114:15;14111:41;;14132:18;;:::i;:::-;14181:1;14168:15;;13988:201;-1:-1:-1;;;13988:201:181:o;14194:245::-;14273:6;14281;14334:2;14322:9;14313:7;14309:23;14305:32;14302:52;;;14350:1;14347;14340:12;14302:52;-1:-1:-1;;14373:16:181;;14429:2;14414:18;;;14408:25;14373:16;;14408:25;;-1:-1:-1;14194:245:181:o;14444:432::-;14675:6;14664:9;14657:25;14718:6;14713:2;14702:9;14698:18;14691:34;14761:6;14756:2;14745:9;14741:18;14734:34;14804:3;14799:2;14788:9;14784:18;14777:31;14638:4;14825:45;14865:3;14854:9;14850:19;14842:6;14825:45;:::i;:::-;14817:53;14444:432;-1:-1:-1;;;;;;14444:432:181:o;15561:297::-;15679:12;;15726:4;15715:16;;;15709:23;;15679:12;15744:16;;15741:111;;;15838:1;15834:6;15824;15818:4;15814:17;15811:1;15807:25;15803:38;15796:5;15792:50;15783:59;;15741:111;;15561:297;;;:::o;18544:475::-;18734:4;18763:10;18812:2;18804:6;18800:15;18789:9;18782:34;18864:2;18856:6;18852:15;18847:2;18836:9;18832:18;18825:43;;18904:6;18899:2;18888:9;18884:18;18877:34;18947:3;18942:2;18931:9;18927:18;18920:31;18968:45;19008:3;18997:9;18993:19;18985:6;18968:45;:::i;19024:369::-;19221:6;19210:9;19203:25;19278:6;19271:14;19264:22;19259:2;19248:9;19244:18;19237:50;19323:2;19318;19307:9;19303:18;19296:30;19184:4;19343:44;19383:2;19372:9;19368:18;19360:6;19343:44;:::i;21325:710::-;21588:3;21625:10;21620:3;21616:20;21679:2;21670:6;21665:3;21661:16;21657:25;21652:3;21645:38;21712:6;21708:1;21703:3;21699:11;21692:27;21771:2;21762:6;21757:3;21753:16;21749:25;21744:2;21739:3;21735:12;21728:47;21827:2;21818:6;21813:3;21809:16;21805:25;21800:2;21795:3;21791:12;21784:47;;21861:6;21856:2;21851:3;21847:12;21840:28;21897:6;21891:13;21913:75;21981:6;21976:2;21971:3;21967:12;21960:4;21952:6;21948:17;21913:75;:::i;:::-;22008:16;;;;22026:2;22004:25;;21325:710;-1:-1:-1;;;;;;;21325:710:181:o;24129:151::-;24219:4;24212:12;;;24198;;;24194:31;;24237:14;;24234:40;;;24254:18;;:::i;24285:225::-;24389:4;24368:12;;;24382;;;24364:31;24415:22;;;;24456:24;;;24446:58;;24484:18;;:::i;:::-;24446:58;24285:225;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"2707200","executionCost":"infinite","totalCost":"infinite"},"external":{"AMB()":"infinite","DOMAIN()":"infinite","MERKLE()":"infinite","MIRROR_DOMAIN()":"infinite","PROCESS_GAS()":"infinite","RESERVE_GAS()":"infinite","ROOT_MANAGER()":"infinite","acceptProposedOwner()":"63837","addSender(address)":"27953","allowlistedSenders(address)":"2541","delay()":"303","delayBlocks()":"2384","dispatch(uint32,bytes32,bytes)":"infinite","home()":"368","isReplica(address)":"500","lastSentBlock()":"2361","localDomain()":"infinite","messages(bytes32)":"2626","mirrorConnector()":"2426","nonces(uint32)":"2556","outboundRoot()":"infinite","owner()":"2421","pause()":"infinite","paused()":"2455","pendingAggregateRoots(bytes32)":"2572","processMessage(bytes)":"infinite","proposeNewOwner(address)":"56494","proposed()":"2442","proposedTimestamp()":"2338","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":"infinite","provenAggregateRoots(bytes32)":"2607","provenMessageRoots(bytes32)":"2562","rateLimitBlocks()":"2385","removePendingAggregateRoot(bytes32)":"13002","removeSender(address)":"27925","renounceOwnership()":"2480","renounced()":"2452","send(bytes)":"infinite","sendMessage(bytes,bytes)":"infinite","sentMessageRoots(bytes32)":"2518","setDelayBlocks(uint256)":"28093","setMirrorConnector(address)":"30278","setRateLimitBlocks(uint256)":"28101","setWatcherManager(address)":"30049","unpause()":"infinite","verifySender(address)":"480","watcherManager()":"2404","withdrawFunds(address)":"infinite"},"internal":{"_processMessage(bytes memory)":"infinite","_sendMessage(bytes memory,bytes memory)":"infinite","_verifySender(address)":"infinite"}},"methodIdentifiers":{"AMB()":"d69f9d61","DOMAIN()":"52a9674b","MERKLE()":"a01892a5","MIRROR_DOMAIN()":"14168416","PROCESS_GAS()":"d88beda2","RESERVE_GAS()":"25e3beda","ROOT_MANAGER()":"5f61e3ec","acceptProposedOwner()":"c5b350df","addSender(address)":"b697f531","allowlistedSenders(address)":"6159ada1","delay()":"6a42b8f8","delayBlocks()":"ad9c0c2e","dispatch(uint32,bytes32,bytes)":"fa31de01","home()":"9fa92f9d","isReplica(address)":"5190bc53","lastSentBlock()":"d7d317b3","localDomain()":"8d3638f4","messages(bytes32)":"2bbd59ca","mirrorConnector()":"cc394283","nonces(uint32)":"b95a2001","outboundRoot()":"65eaf11b","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","pendingAggregateRoots(bytes32)":"9d3117c7","processMessage(bytes)":"4ff746f6","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":"508a109b","provenAggregateRoots(bytes32)":"301f07c3","provenMessageRoots(bytes32)":"98c9f2b9","rateLimitBlocks()":"579c1618","removePendingAggregateRoot(bytes32)":"6b04a933","removeSender(address)":"b2f87643","renounceOwnership()":"715018a6","renounced()":"d232c220","send(bytes)":"2bb1ae7c","sendMessage(bytes,bytes)":"48e6fa23","sentMessageRoots(bytes32)":"572386ca","setDelayBlocks(uint256)":"1eeaabea","setMirrorConnector(address)":"5bd11efc","setRateLimitBlocks(uint256)":"e0fed010","setWatcherManager(address)":"d2a3cc71","unpause()":"3f4ba83a","verifySender(address)":"db1b7659","watcherManager()":"a792c29b","withdrawFunds(address)":"68742da6"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_mirrorDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_amb\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rootManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_processGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserveGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_merkle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Connector__processMessage_notUsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimited__rateLimited_messageSendRateExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__index_indexMoreThan32Bytes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"len\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slice\",\"type\":\"uint256\"}],\"name\":\"TypedMemView__index_overrun\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_identityOOG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_invalidPointer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_nullPointer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"updated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"DelayBlocksUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Dispatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"aggregateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"MessageProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"MirrorConnectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"mirrorDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"amb\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mirrorConnector\",\"type\":\"address\"}],\"name\":\"NewConnector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"Process\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updater\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRateLimit\",\"type\":\"uint256\"}],\"name\":\"SendRateLimitUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"watcherManager\",\"type\":\"address\"}],\"name\":\"WatcherManagerChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MERKLE\",\"outputs\":[{\"internalType\":\"contract MerkleTreeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROCESS_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROOT_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"addSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowlistedSenders\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_recipientAddress\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_messageBody\",\"type\":\"bytes\"}],\"name\":\"dispatch\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"home\",\"outputs\":[{\"internalType\":\"contract IOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_potentialReplica\",\"type\":\"address\"}],\"name\":\"isReplica\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastSentBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localDomain\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"messages\",\"outputs\":[{\"internalType\":\"enum SpokeConnector.MessageStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outboundRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"pendingAggregateRoots\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"path\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct SpokeConnector.Proof[]\",\"name\":\"_proofs\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"_aggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[32]\",\"name\":\"_aggregatePath\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"_aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"proveAndProcess\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenAggregateRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenMessageRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rateLimitBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_fraudulentRoot\",\"type\":\"bytes32\"}],\"name\":\"removePendingAggregateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"removeSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"sentMessageRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_delayBlocks\",\"type\":\"uint256\"}],\"name\":\"setDelayBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"}],\"name\":\"setMirrorConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rateLimit\",\"type\":\"uint256\"}],\"name\":\"setRateLimitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"}],\"name\":\"setWatcherManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"watcherManager\",\"outputs\":[{\"internalType\":\"contract WatcherManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addSender(address)\":{\"details\":\"Only allowlisted routers (senders) can call `dispatch`.\"},\"dispatch(uint32,bytes32,bytes)\":{\"details\":\"The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \\\"hub\\\"), it will be combined into a single aggregate root by RootManager (along with outbound roots from other chains). This aggregate root will be redistributed to all destination chains. NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\"},\"home()\":{\"details\":\"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad\",\"returns\":{\"_0\":\"The local inbox contract\"}},\"isReplica(address)\":{\"returns\":{\"_0\":\"True if _potentialReplica is an enrolled Replica\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"processMessage(bytes)\":{\"details\":\"This is called by AMBs to process messages originating from mirror connector\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)\":{\"details\":\"Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.Intended to be called by the relayer at specific intervals during runtime.Will record a calculated root as having been proven if we've already proven that it was included in the aggregateRoot.\",\"params\":{\"_aggregateIndex\":\"Index of the inbound root in the aggregator's merkle tree in the hub.\",\"_aggregatePath\":\"Merkle path of inclusion for the inbound root.\",\"_aggregateRoot\":\"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.\",\"_proofs\":\"Batch of Proofs containing messages for proving/processing.\"}},\"removePendingAggregateRoot(bytes32)\":{\"details\":\"This method is required for handling fraud cases in the current construction.\",\"params\":{\"_fraudulentRoot\":\"Target fraudulent root that should be erased from the `pendingAggregateRoots` mapping.\"}},\"removeSender(address)\":{\"details\":\"Only allowlisted routers (senders) can call `dispatch`.\"},\"renounceOwnership()\":{\"details\":\"Renounce ownership should be impossible as long as it is impossible in the WatcherClient, and as long as only the owner can remove pending roots in case of fraud.\"},\"sendMessage(bytes,bytes)\":{\"details\":\"This is called by the root manager *only* on mainnet to propagate the aggregate rootGet 'Base constructor arguments given twice' when trying to inherit\"},\"setRateLimitBlocks(uint256)\":{\"details\":\"Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\",\"params\":{\"_rateLimit\":\"The number of blocks require between sending messages. If set to 0, rate limiting for this spoke connector will be disabled.\"}},\"withdrawFunds(address)\":{\"details\":\"Withdraws the entire balance of the contract.\",\"params\":{\"_to\":\"The recipient of the funds withdrawn\"}}},\"version\":1},\"userdoc\":{\"events\":{\"FundsWithdrawn(address,uint256)\":{\"notice\":\"Emitted when funds are withdrawn by the admin\"},\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"},\"WatcherManagerChanged(address)\":{\"notice\":\"Emitted when the manager address changes\"}},\"kind\":\"user\",\"methods\":{\"AMB()\":{\"notice\":\"Address of the AMB on this domain.\"},\"DOMAIN()\":{\"notice\":\"The domain of this Messaging (i.e. Connector) contract.\"},\"MERKLE()\":{\"notice\":\"MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root will be sent crosschain to the hub for aggregation and redistribution.\"},\"MIRROR_DOMAIN()\":{\"notice\":\"The domain of the corresponding messaging (i.e. Connector) contract.\"},\"PROCESS_GAS()\":{\"notice\":\"Minimum gas for processing a received message (reserved for handle)\"},\"RESERVE_GAS()\":{\"notice\":\"Reserved gas (to ensure tx completes in case message processing runs out)\"},\"ROOT_MANAGER()\":{\"notice\":\"RootManager contract address.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"addSender(address)\":{\"notice\":\"Adds a sender to the allowlist.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"delayBlocks()\":{\"notice\":\"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary.\"},\"dispatch(uint32,bytes32,bytes)\":{\"notice\":\"This function adds transfers to the outbound transfer merkle tree.\"},\"home()\":{\"notice\":\"Get the local inbox contract from the xAppConnectionManager\"},\"isReplica(address)\":{\"notice\":\"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\"},\"lastSentBlock()\":{\"notice\":\"Tracks the last block that we sent a message.\"},\"localDomain()\":{\"notice\":\"This provides the implementation for what is defined in the ConnectorManager to avoid storing the domain redundantly\"},\"messages(bytes32)\":{\"notice\":\"Mapping of message leaves to MessageStatus, keyed on leaf.\"},\"mirrorConnector()\":{\"notice\":\"Connector on L2 for L1 connectors, and vice versa.\"},\"nonces(uint32)\":{\"notice\":\"domain => next available nonce for the domain.\"},\"outboundRoot()\":{\"notice\":\"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"pause()\":{\"notice\":\"Watchers can pause contracts if fraud is detected\"},\"pendingAggregateRoots(bytes32)\":{\"notice\":\"This will hold the commit block for incoming aggregateRoots from the hub chain. Once they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can be used for proving inclusion of crosschain messages.\"},\"processMessage(bytes)\":{\"notice\":\"Processes a message received by an AMB\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)\":{\"notice\":\"Must be able to call the `handle` function on the BridgeRouter contract. This is called on the destination domain to handle incoming messages. Proving: Calculates the expected inbound root from an origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this calculated inbound root is included in the current aggregateRoot, given its index in the aggregator tree and the proof of inclusion. Processing: After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for execution.\"},\"provenAggregateRoots(bytes32)\":{\"notice\":\"This tracks the roots of the aggregate tree containing outbound roots from all other supported domains. The current version is the one that is known to be past the delayBlocks time period.\"},\"provenMessageRoots(bytes32)\":{\"notice\":\"This tracks whether the root has been proven to exist within the given aggregate root.\"},\"rateLimitBlocks()\":{\"notice\":\"The number of blocks required between message sending events.\"},\"removePendingAggregateRoot(bytes32)\":{\"notice\":\"Manually remove a pending aggregateRoot by owner if the contract is paused.\"},\"removeSender(address)\":{\"notice\":\"Removes a sender from the allowlist.\"},\"renounceOwnership()\":{\"notice\":\"Remove ability to renounce ownership\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"send(bytes)\":{\"notice\":\"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)\"},\"sendMessage(bytes,bytes)\":{\"notice\":\"Sends a message over the amb\"},\"sentMessageRoots(bytes32)\":{\"notice\":\"This mapping records all message roots that have already been sent in order to prevent redundant message roots from being sent to hub.\"},\"setDelayBlocks(uint256)\":{\"notice\":\"Set the `delayBlocks`, the period in blocks over which an incoming message is verified.\"},\"setMirrorConnector(address)\":{\"notice\":\"Sets the address of the l2Connector for this domain\"},\"setRateLimitBlocks(uint256)\":{\"notice\":\"Set the rate limit (number of blocks) at which we can send messages from this contract to the hub chain using the `send` method.\"},\"setWatcherManager(address)\":{\"notice\":\"Owner can enroll a watcher (abilities are defined by inheriting contracts)\"},\"unpause()\":{\"notice\":\"Owner can unpause contracts if fraud is detected by watchers\"},\"verifySender(address)\":{\"notice\":\"Checks the cross domain sender for a given address\"},\"watcherManager()\":{\"notice\":\"The `WatcherManager` contract governs the watcher allowlist.\"},\"withdrawFunds(address)\":{\"notice\":\"This function should be callable by owner, and send funds trapped on a connector to the provided recipient.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol\":\"MainnetSpokeConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n    /**\\n     * @dev Emitted when the pause is triggered by `account`.\\n     */\\n    event Paused(address account);\\n\\n    /**\\n     * @dev Emitted when the pause is lifted by `account`.\\n     */\\n    event Unpaused(address account);\\n\\n    bool private _paused;\\n\\n    /**\\n     * @dev Initializes the contract in unpaused state.\\n     */\\n    constructor() {\\n        _paused = false;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    modifier whenNotPaused() {\\n        _requireNotPaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    modifier whenPaused() {\\n        _requirePaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the contract is paused, and false otherwise.\\n     */\\n    function paused() public view virtual returns (bool) {\\n        return _paused;\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is paused.\\n     */\\n    function _requireNotPaused() internal view virtual {\\n        require(!paused(), \\\"Pausable: paused\\\");\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is not paused.\\n     */\\n    function _requirePaused() internal view virtual {\\n        require(paused(), \\\"Pausable: not paused\\\");\\n    }\\n\\n    /**\\n     * @dev Triggers stopped state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    function _pause() internal virtual whenNotPaused {\\n        _paused = true;\\n        emit Paused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Returns to normal state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    function _unpause() internal virtual whenPaused {\\n        _paused = false;\\n        emit Unpaused(_msgSender());\\n    }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"contracts/messaging/MerkleTreeManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnableUpgradeable} from \\\"../shared/ProposedOwnableUpgradeable.sol\\\";\\nimport {MerkleLib} from \\\"./libraries/MerkleLib.sol\\\";\\n\\n/**\\n * @title MerkleTreeManager\\n * @notice Contains a Merkle tree instance and exposes read/write functions for the tree.\\n * @dev On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector.\\n */\\ncontract MerkleTreeManager is ProposedOwnableUpgradeable {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleTreeManager__setArborist_zeroAddress();\\n  error MerkleTreeManager__setArborist_alreadyArborist();\\n\\n  // ============ Events ============\\n\\n  event ArboristUpdated(address previous, address updated);\\n\\n  event LeafInserted(bytes32 root, uint256 count, bytes32 leaf);\\n\\n  event LeavesInserted(bytes32 root, uint256 count, bytes32[] leaves);\\n\\n  // ============ Libraries ============\\n\\n  using MerkleLib for MerkleLib.Tree;\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Core data structure with which this contract is tasked with keeping custody.\\n   * Writable only by the designated arborist.\\n   */\\n  MerkleLib.Tree public tree;\\n\\n  /**\\n   * @notice The arborist contract that has permission to write to this tree.\\n   * @dev This could be the root manager contract or a spoke connector contract, for example.\\n   */\\n  address public arborist;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyArborist() {\\n    require(arborist == msg.sender, \\\"!arborist\\\");\\n    _;\\n  }\\n\\n  // ============ Getters ============\\n\\n  /**\\n   * @notice Returns the current branch.\\n   */\\n  function branch() public view returns (bytes32[32] memory) {\\n    return tree.branch;\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the current root.\\n   */\\n  function root() public view returns (bytes32) {\\n    return tree.root();\\n  }\\n\\n  /**\\n   * @notice Returns the number of inserted leaves in the tree (current index).\\n   */\\n  function count() public view returns (uint256) {\\n    return tree.count;\\n  }\\n\\n  /**\\n   * @notice Convenience getter: returns the root and count.\\n   */\\n  function rootAndCount() public view returns (bytes32, uint256) {\\n    return (tree.root(), tree.count);\\n  }\\n\\n  // ======== Initializer =========\\n\\n  function initialize(address _arborist) public initializer {\\n    __MerkleTreeManager_init(_arborist);\\n    __ProposedOwnable_init();\\n  }\\n\\n  /**\\n   * @dev Initializes MerkleTreeManager instance. Sets the msg.sender as the initial permissioned\\n   */\\n  function __MerkleTreeManager_init(address _arborist) internal onlyInitializing {\\n    __MerkleTreeManager_init_unchained(_arborist);\\n  }\\n\\n  function __MerkleTreeManager_init_unchained(address _arborist) internal onlyInitializing {\\n    arborist = _arborist;\\n  }\\n\\n  // ============ Admin Functions ==============\\n\\n  /**\\n   * @notice Method for the current arborist to assign write permissions to a new arborist.\\n   * @param newArborist The new address to set as the current arborist.\\n   */\\n  function setArborist(address newArborist) external onlyOwner {\\n    if (newArborist == address(0)) revert MerkleTreeManager__setArborist_zeroAddress();\\n    address current = arborist;\\n    if (current == newArborist) revert MerkleTreeManager__setArborist_alreadyArborist();\\n\\n    // Emit updated event\\n    emit ArboristUpdated(current, newArborist);\\n\\n    arborist = newArborist;\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as there is a possibility the\\n   * arborist may change.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ========= Public Functions =========\\n\\n  /**\\n   * @notice Inserts the given leaves into the tree.\\n   * @param leaves The leaves to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32[] memory leaves) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // For > 1 leaf, considerably more efficient to put this tree into memory, conduct operations,\\n    // then re-assign it to storage - *especially* if we have multiple leaves to insert.\\n    MerkleLib.Tree memory _tree = tree;\\n\\n    uint256 leafCount = leaves.length;\\n    for (uint256 i; i < leafCount; ) {\\n      // Insert the new node (using in-memory method).\\n      _tree = _tree.insert(leaves[i]);\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // Write the newly updated tree to storage.\\n    tree = _tree;\\n\\n    // Get return details for convenience.\\n    _count = _tree.count;\\n    // NOTE: Root calculation method currently reads from storage only.\\n    _root = tree.root();\\n\\n    emit LeavesInserted(_root, _count, leaves);\\n  }\\n\\n  /**\\n   * @notice Inserts the given leaf into the tree.\\n   * @param leaf The leaf to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32 leaf) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // Insert the new node.\\n    tree = tree.insert(leaf);\\n    _count = tree.count;\\n    _root = tree.root();\\n\\n    emit LeafInserted(_root, _count, leaf);\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[48] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x6eb338843435d4e859de1c71b9ad458c41aeba79002eaa58a463ef86effda89a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherClient.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Pausable} from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\nimport {WatcherManager} from \\\"./WatcherManager.sol\\\";\\n\\n/**\\n * @notice This contract abstracts the functionality of the watcher manager.\\n * Contracts can inherit this contract to be able to use the watcher manager's shared watcher set.\\n */\\n\\ncontract WatcherClient is ProposedOwnable, Pausable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted when the manager address changes\\n   * @param watcherManager The updated manager\\n   */\\n  event WatcherManagerChanged(address watcherManager);\\n\\n  // ============ Properties ============\\n  /**\\n   * @notice The `WatcherManager` contract governs the watcher allowlist.\\n   * @dev Multiple clients can share a watcher set using the same manager\\n   */\\n  WatcherManager public watcherManager;\\n\\n  // ============ Constructor ============\\n  constructor(address _watcherManager) ProposedOwnable() {\\n    watcherManager = WatcherManager(_watcherManager);\\n  }\\n\\n  // ============ Modifiers ============\\n  /**\\n   * @notice Enforces the sender is the watcher\\n   */\\n  modifier onlyWatcher() {\\n    require(watcherManager.isWatcher(msg.sender), \\\"!watcher\\\");\\n    _;\\n  }\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @notice Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function setWatcherManager(address _watcherManager) external onlyOwner {\\n    require(_watcherManager != address(watcherManager), \\\"already watcher manager\\\");\\n    watcherManager = WatcherManager(_watcherManager);\\n    emit WatcherManagerChanged(_watcherManager);\\n  }\\n\\n  /**\\n   * @notice Owner can unpause contracts if fraud is detected by watchers\\n   */\\n  function unpause() external onlyOwner whenPaused {\\n    _unpause();\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as only the owner\\n   * is able to unpause the contracts. You can still propose `address(0)`,\\n   * but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ============ Watcher fns ============\\n\\n  /**\\n   * @notice Watchers can pause contracts if fraud is detected\\n   */\\n  function pause() external onlyWatcher whenNotPaused {\\n    _pause();\\n  }\\n}\\n\",\"keccak256\":\"0x97b0da2c0317359ef2980d1f3c5fcdd7df2bdacbedf216dcbda521b96124444a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can\\n * inherit to make use of the same watcher set.\\n */\\n\\ncontract WatcherManager is ProposedOwnable {\\n  // ============ Events ============\\n  event WatcherAdded(address watcher);\\n\\n  event WatcherRemoved(address watcher);\\n\\n  // ============ Properties ============\\n  mapping(address => bool) public isWatcher;\\n\\n  // ============ Constructor ============\\n  constructor() ProposedOwnable() {\\n    _setOwner(msg.sender);\\n  }\\n\\n  // ============ Modifiers ============\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @dev Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function addWatcher(address _watcher) external onlyOwner {\\n    require(!isWatcher[_watcher], \\\"already watcher\\\");\\n    isWatcher[_watcher] = true;\\n    emit WatcherAdded(_watcher);\\n  }\\n\\n  /**\\n   * @dev Owner can unenroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function removeWatcher(address _watcher) external onlyOwner {\\n    require(isWatcher[_watcher], \\\"!exist\\\");\\n    delete isWatcher[_watcher];\\n    emit WatcherRemoved(_watcher);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as the watcher griefing\\n   * vector exists. You can still propose `address(0)`, but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n}\\n\",\"keccak256\":\"0x94d9db4cd19453c9047164f697011163a42a6e12f9b2e1d7fbcfb35a7d021318\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/Connector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IConnector} from \\\"../interfaces/IConnector.sol\\\";\\n\\n/**\\n * @title Connector\\n * @author Connext Labs, Inc.\\n * @notice This contract has the messaging interface functions used by all connectors.\\n *\\n * @dev This contract stores information about mirror connectors, but can be used as a\\n * base for contracts that do not have a mirror (i.e. the connector handling messaging on\\n * mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\\n * will be empty\\n *\\n * @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\\n * or `mirrorGas`\\n */\\nabstract contract Connector is ProposedOwnable, IConnector {\\n  // ========== Custom Errors ===========\\n\\n  error Connector__processMessage_notUsed();\\n\\n  // ============ Events ============\\n\\n  event NewConnector(\\n    uint32 indexed domain,\\n    uint32 indexed mirrorDomain,\\n    address amb,\\n    address rootManager,\\n    address mirrorConnector\\n  );\\n\\n  event MirrorConnectorUpdated(address previous, address current);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The domain of this Messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable DOMAIN;\\n\\n  /**\\n   * @notice Address of the AMB on this domain.\\n   */\\n  address public immutable AMB;\\n\\n  /**\\n   * @notice RootManager contract address.\\n   */\\n  address public immutable ROOT_MANAGER;\\n\\n  /**\\n   * @notice The domain of the corresponding messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable MIRROR_DOMAIN;\\n\\n  /**\\n   * @notice Connector on L2 for L1 connectors, and vice versa.\\n   */\\n  address public mirrorConnector;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered AMB\\n   */\\n  modifier onlyAMB() {\\n    require(msg.sender == AMB, \\\"!AMB\\\");\\n    _;\\n  }\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered ROOT_MANAGER\\n   */\\n  modifier onlyRootManager() {\\n    // NOTE: RootManager will be zero address for spoke connectors.\\n    // Only root manager can dispatch a message to spokes/L2s via the hub connector.\\n    require(msg.sender == ROOT_MANAGER, \\\"!rootManager\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) ProposedOwnable() {\\n    // set the owner\\n    _setOwner(msg.sender);\\n\\n    // sanity checks on values\\n    require(_domain != 0, \\\"empty domain\\\");\\n    require(_rootManager != address(0), \\\"empty rootManager\\\");\\n    // see note at top of contract on why the mirror values are not sanity checked\\n\\n    // set immutables\\n    DOMAIN = _domain;\\n    AMB = _amb;\\n    ROOT_MANAGER = _rootManager;\\n    MIRROR_DOMAIN = _mirrorDomain;\\n    // set mutables if defined\\n    if (_mirrorConnector != address(0)) {\\n      _setMirrorConnector(_mirrorConnector);\\n    }\\n\\n    emit NewConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector);\\n  }\\n\\n  // ============ Receivable ============\\n  /**\\n   * @notice Connectors may need to receive native asset to handle fees when sending a\\n   * message\\n   */\\n  receive() external payable {}\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Sets the address of the l2Connector for this domain\\n   */\\n  function setMirrorConnector(address _mirrorConnector) public onlyOwner {\\n    _setMirrorConnector(_mirrorConnector);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice Processes a message received by an AMB\\n   * @dev This is called by AMBs to process messages originating from mirror connector\\n   */\\n  function processMessage(bytes memory _data) external virtual onlyAMB {\\n    _processMessage(_data);\\n    emit MessageProcessed(_data, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Checks the cross domain sender for a given address\\n   */\\n  function verifySender(address _expected) external returns (bool) {\\n    return _verifySender(_expected);\\n  }\\n\\n  // ============ Virtual Functions ============\\n\\n  /**\\n   * @notice This function is used by the Connext contract on the l2 domain to send a message to the\\n   * l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\\n   * @param _data The contents of the message\\n   * @param _encodedData Data used to send the message; specific to connector\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal virtual;\\n\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(\\n    bytes memory /* _data */\\n  ) internal virtual {\\n    // By default, reverts. This is to ensure the call path is not used unless this function is\\n    // overridden by the inheriting class\\n    revert Connector__processMessage_notUsed();\\n  }\\n\\n  /**\\n   * @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\\n   * is the expected address.\\n   * @dev Should be overridden by the implementing Connector contract.\\n   */\\n  function _verifySender(address _expected) internal virtual returns (bool);\\n\\n  // ============ Private Functions ============\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal virtual {\\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\\n    mirrorConnector = _mirrorConnector;\\n  }\\n}\\n\",\"keccak256\":\"0x08d4077a1b5caf9f46491206064bb24bee467dd741b42fed3d30a608eea83368\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/ConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IConnectorManager} from \\\"../interfaces/IConnectorManager.sol\\\";\\nimport {IOutbox} from \\\"../interfaces/IOutbox.sol\\\";\\n\\n/**\\n * @notice This is an interface to allow the `Messaging` contract to be used\\n * as a `XappConnectionManager` on all router contracts.\\n *\\n * @dev Each nomad router contract has a `XappConnectionClient`, which references a\\n * XappConnectionManager to get the `Home` (outbox) and approved `Replica` (inbox)\\n * instances. At any point the client can replace the manager it's pointing to,\\n * changing the underlying messaging connection.\\n */\\nabstract contract ConnectorManager is IConnectorManager {\\n  constructor() {}\\n\\n  function home() public view returns (IOutbox) {\\n    return IOutbox(address(this));\\n  }\\n\\n  function isReplica(address _potentialReplica) public view returns (bool) {\\n    return _potentialReplica == address(this);\\n  }\\n\\n  function localDomain() external view virtual returns (uint32);\\n}\\n\",\"keccak256\":\"0x0112a527de062459aadfc2c8aa59a81c379d53c0f646f7869c6250e343ba91be\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/SpokeConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ReentrancyGuard} from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {ExcessivelySafeCall} from \\\"../../shared/libraries/ExcessivelySafeCall.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {MerkleLib} from \\\"../libraries/MerkleLib.sol\\\";\\nimport {Message} from \\\"../libraries/Message.sol\\\";\\nimport {RateLimited} from \\\"../libraries/RateLimited.sol\\\";\\n\\nimport {MerkleTreeManager} from \\\"../MerkleTreeManager.sol\\\";\\nimport {WatcherClient} from \\\"../WatcherClient.sol\\\";\\n\\nimport {Connector, ProposedOwnable} from \\\"./Connector.sol\\\";\\nimport {ConnectorManager} from \\\"./ConnectorManager.sol\\\";\\n\\n/**\\n * @title SpokeConnector\\n * @author Connext Labs, Inc.\\n * @notice This contract implements the messaging functions needed on the spoke-side of a given AMB.\\n * The SpokeConnector extends the HubConnector functionality by being able to send, store, and prove\\n * messages.\\n *\\n * @dev If you are deploying this contract to mainnet, then the mirror values stored in the HubConnector\\n * will be unused\\n */\\nabstract contract SpokeConnector is Connector, ConnectorManager, WatcherClient, RateLimited, ReentrancyGuard {\\n  // ============ Libraries ============\\n\\n  using MerkleLib for MerkleLib.Tree;\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n  using Message for bytes29;\\n\\n  // ============ Events ============\\n\\n  event SenderAdded(address sender);\\n\\n  event SenderRemoved(address sender);\\n\\n  event AggregateRootReceived(bytes32 root);\\n\\n  event AggregateRootRemoved(bytes32 root);\\n\\n  event AggregateRootVerified(bytes32 indexed root);\\n\\n  event Dispatch(bytes32 leaf, uint256 index, bytes32 root, bytes message);\\n\\n  event Process(bytes32 leaf, bool success, bytes returnData);\\n\\n  event DelayBlocksUpdated(uint256 indexed updated, address caller);\\n\\n  /**\\n   * @notice Emitted when funds are withdrawn by the admin\\n   * @dev See comments in `withdrawFunds`\\n   * @param to The recipient of the funds\\n   * @param amount The amount withdrawn\\n   */\\n  event FundsWithdrawn(address indexed to, uint256 amount);\\n\\n  event MessageProven(bytes32 indexed leaf, bytes32 indexed aggregateRoot, uint256 aggregateIndex);\\n\\n  // ============ Structs ============\\n\\n  // Status of Message:\\n  //   0 - None - message has not been proven or processed\\n  //   1 - Proven - message inclusion proof has been validated\\n  //   2 - Processed - message has been dispatched to recipient\\n  enum MessageStatus {\\n    None,\\n    Proven,\\n    Processed\\n  }\\n\\n  /**\\n   * Struct for submitting a proof for a given message. Used in `proveAndProcess` below.\\n   * @param message Bytes of message to be processed. The hash of this message is considered the leaf.\\n   * @param proof Merkle proof of inclusion for given leaf.\\n   * @param index Index of leaf in home's merkle tree.\\n   */\\n  struct Proof {\\n    bytes message;\\n    bytes32[32] path;\\n    uint256 index;\\n  }\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Number of blocks to delay the processing of a message to allow for watchers to verify\\n   * the validity and pause if necessary.\\n   */\\n  uint256 public delayBlocks;\\n\\n  /**\\n   * @notice MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root\\n   * will be sent crosschain to the hub for aggregation and redistribution.\\n   */\\n  MerkleTreeManager public immutable MERKLE;\\n\\n  /**\\n   * @notice Minimum gas for processing a received message (reserved for handle)\\n   */\\n  uint256 public immutable PROCESS_GAS;\\n\\n  /**\\n   * @notice Reserved gas (to ensure tx completes in case message processing runs out)\\n   */\\n  uint256 public immutable RESERVE_GAS;\\n\\n  /**\\n   * @notice This will hold the commit block for incoming aggregateRoots from the hub chain. Once\\n   * they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can\\n   * be used for proving inclusion of crosschain messages.\\n   *\\n   * @dev NOTE: A commit block of 0 should be considered invalid (it is an empty entry in the\\n   * mapping). We must ALWAYS ensure the value is not 0 before checking whether it has surpassed the\\n   * verification period.\\n   */\\n  mapping(bytes32 => uint256) public pendingAggregateRoots;\\n\\n  /**\\n   * @notice This tracks the roots of the aggregate tree containing outbound roots from all other\\n   * supported domains. The current version is the one that is known to be past the delayBlocks\\n   * time period.\\n   * @dev This root is the root of the tree that is aggregated on mainnet (composed of all the roots\\n   * of previous trees).\\n   */\\n  mapping(bytes32 => bool) public provenAggregateRoots;\\n\\n  /**\\n   * @notice This tracks whether the root has been proven to exist within the given aggregate root.\\n   * @dev Tracking this is an optimization so you dont have to prove inclusion of the same constituent\\n   * root many times.\\n   */\\n  mapping(bytes32 => bool) public provenMessageRoots;\\n\\n  /**\\n   * @notice This mapping records all message roots that have already been sent in order to prevent\\n   * redundant message roots from being sent to hub.\\n   */\\n  mapping(bytes32 => bool) public sentMessageRoots;\\n\\n  /**\\n   * @dev This is used for the `onlyAllowlistedSender` modifier, which gates who\\n   * can send messages using `dispatch`.\\n   */\\n  mapping(address => bool) public allowlistedSenders;\\n\\n  /**\\n   * @notice domain => next available nonce for the domain.\\n   */\\n  mapping(uint32 => uint32) public nonces;\\n\\n  /**\\n   * @notice Mapping of message leaves to MessageStatus, keyed on leaf.\\n   */\\n  mapping(bytes32 => MessageStatus) public messages;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyAllowlistedSender() {\\n    require(allowlistedSenders[msg.sender], \\\"!allowlisted\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new SpokeConnector instance.\\n   * @param _domain The domain this connector lives on.\\n   * @param _mirrorDomain The hub domain.\\n   * @param _amb The address of the AMB on the spoke domain this connector lives on.\\n   * @param _rootManager The address of the RootManager on the hub.\\n   * @param _mirrorConnector The address of the spoke connector.\\n   * @param _processGas The gas costs used in `handle` to ensure meaningful state changes can occur (minimum gas needed\\n   * to handle transaction).\\n   * @param _reserveGas The gas costs reserved when `handle` is called to ensure failures are handled.\\n   * @param _delayBlocks The delay for the validation period for incoming messages in blocks.\\n   * @param _merkle The address of the MerkleTreeManager on this spoke domain.\\n   * @param _watcherManager The address of the WatcherManager to whom this connector is a client.\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    uint256 _processGas,\\n    uint256 _reserveGas,\\n    uint256 _delayBlocks,\\n    address _merkle,\\n    address _watcherManager\\n  )\\n    ConnectorManager()\\n    Connector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector)\\n    WatcherClient(_watcherManager)\\n  {\\n    // Sanity check: constants are reasonable.\\n    require(_processGas > 850_000 - 1, \\\"!process gas\\\");\\n    require(_reserveGas > 15_000 - 1, \\\"!reserve gas\\\");\\n    PROCESS_GAS = _processGas;\\n    RESERVE_GAS = _reserveGas;\\n\\n    require(_merkle != address(0), \\\"!zero merkle\\\");\\n    MERKLE = MerkleTreeManager(_merkle);\\n\\n    delayBlocks = _delayBlocks;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Adds a sender to the allowlist.\\n   * @dev Only allowlisted routers (senders) can call `dispatch`.\\n   */\\n  function addSender(address _sender) public onlyOwner {\\n    allowlistedSenders[_sender] = true;\\n    emit SenderAdded(_sender);\\n  }\\n\\n  /**\\n   * @notice Removes a sender from the allowlist.\\n   * @dev Only allowlisted routers (senders) can call `dispatch`.\\n   */\\n  function removeSender(address _sender) public onlyOwner {\\n    delete allowlistedSenders[_sender];\\n    emit SenderRemoved(_sender);\\n  }\\n\\n  /**\\n   * @notice Set the `delayBlocks`, the period in blocks over which an incoming message\\n   * is verified.\\n   */\\n  function setDelayBlocks(uint256 _delayBlocks) public onlyOwner {\\n    require(_delayBlocks != delayBlocks, \\\"!delayBlocks\\\");\\n    emit DelayBlocksUpdated(_delayBlocks, msg.sender);\\n    delayBlocks = _delayBlocks;\\n  }\\n\\n  /**\\n   * @notice Set the rate limit (number of blocks) at which we can send messages from\\n   * this contract to the hub chain using the `send` method.\\n   * @dev Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\\n   * @param _rateLimit The number of blocks require between sending messages. If set to\\n   * 0, rate limiting for this spoke connector will be disabled.\\n   */\\n  function setRateLimitBlocks(uint256 _rateLimit) public onlyOwner {\\n    _setRateLimitBlocks(_rateLimit);\\n  }\\n\\n  /**\\n   * @notice Manually remove a pending aggregateRoot by owner if the contract is paused.\\n   * @dev This method is required for handling fraud cases in the current construction.\\n   * @param _fraudulentRoot Target fraudulent root that should be erased from the\\n   * `pendingAggregateRoots` mapping.\\n   */\\n  function removePendingAggregateRoot(bytes32 _fraudulentRoot) public onlyOwner whenPaused {\\n    // Sanity check: pending aggregate root exists.\\n    require(pendingAggregateRoots[_fraudulentRoot] != 0, \\\"aggregateRoot !exists\\\");\\n    delete pendingAggregateRoots[_fraudulentRoot];\\n    emit AggregateRootRemoved(_fraudulentRoot);\\n  }\\n\\n  /**\\n   * @notice This function should be callable by owner, and send funds trapped on\\n   * a connector to the provided recipient.\\n   * @dev Withdraws the entire balance of the contract.\\n   *\\n   * @param _to The recipient of the funds withdrawn\\n   */\\n  function withdrawFunds(address _to) public onlyOwner {\\n    uint256 amount = address(this).balance;\\n    Address.sendValue(payable(_to), amount);\\n    emit FundsWithdrawn(_to, amount);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as it is impossible in the\\n   * WatcherClient, and as long as only the owner can remove pending roots in case of\\n   * fraud.\\n   */\\n  function renounceOwnership() public virtual override(ProposedOwnable, WatcherClient) onlyOwner {}\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice This returns the root of all messages with the origin domain as this domain (i.e.\\n   * all outbound messages)\\n   */\\n  function outboundRoot() external view returns (bytes32) {\\n    return MERKLE.root();\\n  }\\n\\n  /**\\n   * @notice This provides the implementation for what is defined in the ConnectorManager\\n   * to avoid storing the domain redundantly\\n   */\\n  function localDomain() external view override returns (uint32) {\\n    return DOMAIN;\\n  }\\n\\n  /**\\n   * @notice This returns the root of all messages with the origin domain as this domain (i.e.\\n   * all outbound messages)\\n   */\\n  function send(bytes memory _encodedData) external payable whenNotPaused rateLimited {\\n    bytes32 root = MERKLE.root();\\n    require(sentMessageRoots[root] == false, \\\"root already sent\\\");\\n    bytes memory _data = abi.encodePacked(root);\\n    _sendMessage(_data, _encodedData);\\n    sentMessageRoots[root] = true;\\n    emit MessageSent(_data, _encodedData, msg.sender);\\n  }\\n\\n  /**\\n   * @notice This function adds transfers to the outbound transfer merkle tree.\\n   * @dev The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \\\"hub\\\"),\\n   * it will be combined into a single aggregate root by RootManager (along with outbound roots from other\\n   * chains). This aggregate root will be redistributed to all destination chains.\\n   *\\n   * NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external onlyAllowlistedSender returns (bytes32, bytes memory) {\\n    // Get the next nonce for the destination domain, then increment it.\\n    uint32 _nonce = nonces[_destinationDomain]++;\\n\\n    // Format the message into packed bytes.\\n    bytes memory _message = Message.formatMessage(\\n      DOMAIN,\\n      TypeCasts.addressToBytes32(msg.sender),\\n      _nonce,\\n      _destinationDomain,\\n      _recipientAddress,\\n      _messageBody\\n    );\\n\\n    // Insert the hashed message into the Merkle tree.\\n    bytes32 _messageHash = keccak256(_message);\\n\\n    // Returns the root calculated after insertion of message, needed for events for\\n    // watchers\\n    (bytes32 _root, uint256 _count) = MERKLE.insert(_messageHash);\\n\\n    // Emit Dispatch event with message information.\\n    // NOTE: Current leaf index is count - 1 since new leaf has already been inserted.\\n    emit Dispatch(_messageHash, _count - 1, _root, _message);\\n    return (_messageHash, _message);\\n  }\\n\\n  /**\\n   * @notice Must be able to call the `handle` function on the BridgeRouter contract. This is called\\n   * on the destination domain to handle incoming messages.\\n   *\\n   * Proving:\\n   * Calculates the expected inbound root from an origin chain given a leaf (message hash),\\n   * the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this\\n   * calculated inbound root is included in the current aggregateRoot, given its index in the aggregator\\n   * tree and the proof of inclusion.\\n   *\\n   * Processing:\\n   * After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for\\n   * execution.\\n   *\\n   * @dev Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they\\n   * must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.\\n   * @dev Intended to be called by the relayer at specific intervals during runtime.\\n   * @dev Will record a calculated root as having been proven if we've already proven that it was included\\n   * in the aggregateRoot.\\n   *\\n   * @param _proofs Batch of Proofs containing messages for proving/processing.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   */\\n  function proveAndProcess(\\n    Proof[] calldata _proofs,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) external whenNotPaused nonReentrant {\\n    // Sanity check: proofs are included.\\n    require(_proofs.length > 0, \\\"!proofs\\\");\\n\\n    // Optimization: calculate the inbound root for the first message in the batch and validate that\\n    // it's included in the aggregator tree. We can use this as a reference for every calculation\\n    // below to minimize storage access calls.\\n    bytes32 _messageHash = keccak256(_proofs[0].message);\\n    // TODO: Could use an array of sharedRoots so you can submit a message batch of messages with\\n    // different origins.\\n    bytes32 _messageRoot = calculateMessageRoot(_messageHash, _proofs[0].path, _proofs[0].index);\\n\\n    // Handle proving this message root is included in the target aggregate root.\\n    proveMessageRoot(_messageRoot, _aggregateRoot, _aggregatePath, _aggregateIndex);\\n    // Assuming the inbound message root was proven, the first message is now considered proven.\\n    messages[_messageHash] = MessageStatus.Proven;\\n\\n    // Now we handle proving all remaining messages in the batch - they should all share the same\\n    // inbound root!\\n    uint256 len = _proofs.length;\\n    for (uint32 i = 1; i < len; ) {\\n      _messageHash = keccak256(_proofs[i].message);\\n      bytes32 _calculatedRoot = calculateMessageRoot(_messageHash, _proofs[i].path, _proofs[i].index);\\n      // Make sure this root matches the validated inbound root.\\n      require(_calculatedRoot == _messageRoot, \\\"!sharedRoot\\\");\\n      // Message is proven!\\n      messages[_messageHash] = MessageStatus.Proven;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // All messages have been proven. We iterate separately here to process each message in the batch.\\n    // NOTE: Going through the proving phase for all messages in the batch BEFORE processing ensures\\n    // we hit reverts before we consume unbounded gas from `process` calls.\\n    for (uint32 i = 0; i < len; ) {\\n      process(_proofs[i].message);\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  // ============ Private Functions ============\\n\\n  /**\\n   * @notice This is either called by the Connector (AKA `this`) on the spoke (L2) chain after retrieving\\n   * latest `aggregateRoot` from the AMB (sourced from mainnet) OR called by the AMB directly.\\n   * @dev Must check the msg.sender on the origin chain to ensure only the root manager is passing\\n   * these roots.\\n   */\\n  function receiveAggregateRoot(bytes32 _newRoot) internal {\\n    require(_newRoot != bytes32(\\\"\\\"), \\\"new root empty\\\");\\n    require(pendingAggregateRoots[_newRoot] == 0, \\\"root already pending\\\");\\n    require(!provenAggregateRoots[_newRoot], \\\"root already proven\\\");\\n\\n    pendingAggregateRoots[_newRoot] = block.number;\\n    emit AggregateRootReceived(_newRoot);\\n  }\\n\\n  /**\\n   * @notice Checks whether the given aggregate root has surpassed the verification period.\\n   * @dev Reverts if the given aggregate root is invalid (does not exist) OR has not surpassed\\n   * verification period.\\n   * @dev If the target aggregate root is pending and HAS surpassed the verification period, then we will\\n   * move it over to the proven mapping.\\n   * @param _aggregateRoot Target aggregate root to verify.\\n   */\\n  function verifyAggregateRoot(bytes32 _aggregateRoot) internal {\\n    // 0. Sanity check: root is not 0.\\n    require(_aggregateRoot != bytes32(\\\"\\\"), \\\"aggregateRoot empty\\\");\\n\\n    // 1. Check to see if the target *aggregate* root has already been proven.\\n    if (provenAggregateRoots[_aggregateRoot]) {\\n      return; // Short circuit if this root is proven.\\n    }\\n\\n    // 2. The target aggregate root must be pending. Aggregate root commit block entry MUST exist.\\n    uint256 _aggregateRootCommitBlock = pendingAggregateRoots[_aggregateRoot];\\n    require(_aggregateRootCommitBlock != 0, \\\"aggregateRoot !exist\\\");\\n\\n    // 3. Pending aggregate root has surpassed the `delayBlocks` verification period.\\n    require(block.number - _aggregateRootCommitBlock >= delayBlocks, \\\"aggregateRoot !verified\\\");\\n\\n    // 4. The target aggregate root has surpassed verification period, we can move it over to the\\n    // proven mapping.\\n    provenAggregateRoots[_aggregateRoot] = true;\\n    emit AggregateRootVerified(_aggregateRoot);\\n    // May as well delete the pending aggregate root entry for the gas refund: it should no longer\\n    // be needed.\\n    delete pendingAggregateRoots[_aggregateRoot];\\n  }\\n\\n  /**\\n   * @notice Checks whether a given message is valid. If so, calculates the expected inbound root from an\\n   * origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion.\\n   * @dev Reverts if message's MessageStatus != None (i.e. if message was already proven or processed).\\n   *\\n   * @param _messageHash Leaf (message hash) that requires proving.\\n   * @param _messagePath Merkle path of inclusion for the leaf.\\n   * @param _messageIndex Index of leaf in the merkle tree on the origin chain of the message.\\n   * @return bytes32 Calculated root.\\n   **/\\n  function calculateMessageRoot(\\n    bytes32 _messageHash,\\n    bytes32[32] calldata _messagePath,\\n    uint256 _messageIndex\\n  ) internal view returns (bytes32) {\\n    // Ensure that the given message has not already been proven and processed.\\n    require(messages[_messageHash] == MessageStatus.None, \\\"!MessageStatus.None\\\");\\n    // Calculate the expected inbound root from the message origin based on the proof.\\n    // NOTE: Assuming a valid message was submitted with correct path/index, this should be an inbound root\\n    // that the hub has received. If the message were invalid, the root calculated here would not exist in the\\n    // aggregate root.\\n    return MerkleLib.branchRoot(_messageHash, _messagePath, _messageIndex);\\n  }\\n\\n  /**\\n   * @notice Prove an inbound message root from another chain is included in the target aggregateRoot.\\n   * @param _messageRoot The message root we want to verify.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   */\\n  function proveMessageRoot(\\n    bytes32 _messageRoot,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) internal {\\n    // 0. Check to see if the root for this batch has already been proven.\\n    if (provenMessageRoots[_messageRoot]) {\\n      // NOTE: It seems counter-intuitive, but we do NOT need to prove the given `_aggregateRoot` param\\n      // is valid IFF the `_messageRoot` has already been proven; we know that the `_messageRoot` has to\\n      // have been included in *some* proven aggregate root historically.\\n      return;\\n    }\\n\\n    // 1. Ensure aggregate root has been proven.\\n    verifyAggregateRoot(_aggregateRoot);\\n\\n    // 2. Calculate an aggregate root, given this inbound root (as leaf), path (proof), and index.\\n    bytes32 _calculatedAggregateRoot = MerkleLib.branchRoot(_messageRoot, _aggregatePath, _aggregateIndex);\\n\\n    // 3. Check to make sure it matches the current aggregate root we have stored.\\n    require(_calculatedAggregateRoot == _aggregateRoot, \\\"invalid inboundRoot\\\");\\n\\n    // This inbound root has been proven. We should specify that to optimize future calls.\\n    provenMessageRoots[_messageRoot] = true;\\n    emit MessageProven(_messageRoot, _aggregateRoot, _aggregateIndex);\\n  }\\n\\n  /**\\n   * @notice Given formatted message, attempts to dispatch message payload to end recipient.\\n   * @dev Recipient must implement a `handle` method (refer to IMessageRecipient.sol)\\n   * Reverts if formatted message's destination domain is not the Replica's domain,\\n   * if message has not been proven,\\n   * or if not enough gas is provided for the dispatch transaction.\\n   * @param _message Formatted message\\n   * @return _success TRUE iff dispatch transaction succeeded\\n   */\\n  function process(bytes memory _message) internal returns (bool _success) {\\n    bytes29 _m = _message.ref(0);\\n    // ensure message was meant for this domain\\n    require(_m.destination() == DOMAIN, \\\"!destination\\\");\\n    // ensure message has been proven\\n    bytes32 _messageHash = _m.keccak();\\n    require(messages[_messageHash] == MessageStatus.Proven, \\\"!proven\\\");\\n    // check re-entrancy guard\\n    // require(entered == 1, \\\"!reentrant\\\");\\n    // entered = 0;\\n    // update message status as processed\\n    messages[_messageHash] = MessageStatus.Processed;\\n    // A call running out of gas TYPICALLY errors the whole tx. We want to\\n    // a) ensure the call has a sufficient amount of gas to make a\\n    //    meaningful state change.\\n    // b) ensure that if the subcall runs out of gas, that the tx as a whole\\n    //    does not revert (i.e. we still mark the message processed)\\n    // To do this, we require that we have enough gas to process\\n    // and still return. We then delegate only the minimum processing gas.\\n    require(gasleft() > PROCESS_GAS + RESERVE_GAS - 1, \\\"!gas\\\");\\n    // get the message recipient\\n    address _recipient = _m.recipientAddress();\\n    // set up for assembly call\\n    uint256 _gas = PROCESS_GAS;\\n    uint16 _maxCopy = 256;\\n    // allocate memory for returndata\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    bytes memory _calldata = abi.encodeWithSignature(\\n      \\\"handle(uint32,uint32,bytes32,bytes)\\\",\\n      _m.origin(),\\n      _m.nonce(),\\n      _m.sender(),\\n      _m.body().clone()\\n    );\\n\\n    (_success, _returnData) = ExcessivelySafeCall.excessivelySafeCall(_recipient, _gas, 0, _maxCopy, _calldata);\\n\\n    // emit process results\\n    emit Process(_messageHash, _success, _returnData);\\n  }\\n}\\n\",\"keccak256\":\"0xde9ea6f462f33e62618d069fddaeed24268d13cfe03abc9dd388824a5e4e3896\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IRootManager} from \\\"../../interfaces/IRootManager.sol\\\";\\nimport {IHubConnector} from \\\"../../interfaces/IHubConnector.sol\\\";\\n\\nimport {SpokeConnector} from \\\"../SpokeConnector.sol\\\";\\n\\ncontract MainnetSpokeConnector is SpokeConnector, IHubConnector {\\n  // ============ Constructor ============\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    uint256 _processGas,\\n    uint256 _reserveGas,\\n    uint256 _delayBlocks,\\n    address _merkle,\\n    address _watcherManager\\n  )\\n    SpokeConnector(\\n      _domain,\\n      _mirrorDomain,\\n      _amb,\\n      _rootManager,\\n      _mirrorConnector,\\n      _processGas,\\n      _reserveGas,\\n      _delayBlocks,\\n      _merkle,\\n      _watcherManager\\n    )\\n  {}\\n\\n  // ============ Public fns ============\\n  /**\\n   * @notice Sends a message over the amb\\n   * @dev This is called by the root manager *only* on mainnet to propagate the aggregate root\\n   * @dev Get 'Base constructor arguments given twice' when trying to inherit\\n   */\\n  function sendMessage(bytes memory _data, bytes memory _encodedData) external payable onlyRootManager {\\n    // Should not include specialized calldata\\n    require(_encodedData.length == 0, \\\"!data length\\\");\\n    _sendMessage(_data, bytes(\\\"\\\"));\\n    emit MessageSent(_data, bytes(\\\"\\\"), msg.sender);\\n  }\\n\\n  // ============ Private fns ============\\n  /**\\n   * @dev Asserts the sender of a cross domain message. On mainnet all senders should be this\\n   */\\n  function _verifySender(address _expected) internal view override returns (bool) {\\n    return msg.sender == _expected;\\n  }\\n\\n  /**\\n   * @dev There are two times messages get \\\"sent\\\" from this connector:\\n   * 1. `RootManager` calls `sendMessage` during `propagate`\\n   * 2. Relayers call `send`, which calls `_sendMessage` to set the outbound root\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\\n    // Should not include specialized calldata\\n    require(_encodedData.length == 0, \\\"!data length\\\");\\n    // get the data (should be either the outbound or aggregate root, depending on sender)\\n    require(_data.length == 32, \\\"!length\\\");\\n    if (msg.sender == ROOT_MANAGER) {\\n      // update the aggregate root\\n      receiveAggregateRoot(bytes32(_data));\\n      return;\\n    }\\n    // otherwise is relayer, update the outbound root on the root manager\\n    IRootManager(ROOT_MANAGER).aggregate(DOMAIN, bytes32(_data));\\n  }\\n\\n  /**\\n   * @dev The `RootManager` calls `.sendMessage` on all connectors, there is nothing on mainnet\\n   * that would be processing \\\"inbound messages\\\", so do nothing in this function\\n   */\\n  function _processMessage(bytes memory _data) internal override {}\\n}\\n\",\"keccak256\":\"0x04b81e983b7c1289a64a8b822d1990f1d1a771a6fc3ca68f0f52be70370e18f3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IHubConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IConnector} from \\\"./IConnector.sol\\\";\\n\\ninterface IHubConnector is IConnector {\\n  function sendMessage(bytes memory _data, bytes memory _encodedData) external payable;\\n}\\n\",\"keccak256\":\"0x9c3b0b9f1ab326d6283e404818b8c2c55c4fc1ee9919830a1d04ebc3f4a022cd\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IRootManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\ninterface IRootManager {\\n  /**\\n   * @notice This is called by relayers to generate + send the mixed root from mainnet via AMB to\\n   * spoke domains.\\n   * @dev This must read information for the root from the registered AMBs.\\n   */\\n  function propagate(\\n    address[] calldata _connectors,\\n    uint256[] calldata _fees,\\n    bytes[] memory _encodedData\\n  ) external payable;\\n\\n  /**\\n   * @notice Called by the connectors for various domains on the hub to aggregate their latest\\n   * inbound root.\\n   * @dev This must read information for the root from the registered AMBs\\n   */\\n  function aggregate(uint32 _domain, bytes32 _outbound) external;\\n}\\n\",\"keccak256\":\"0xa895dfaa4baad37a636e7e7e7da72a0a4badfd2d3d8256f975e5101cd5a98236\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/MerkleLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MerkleLib\\n * @author Illusory Systems Inc.\\n * @notice An incremental merkle tree modeled on the eth2 deposit contract.\\n **/\\nlibrary MerkleLib {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleLib__insert_treeIsFull();\\n\\n  // ============ Constants =============\\n\\n  uint256 internal constant TREE_DEPTH = 32;\\n  uint256 internal constant MAX_LEAVES = 2**TREE_DEPTH - 1;\\n\\n  /**\\n   * @dev Z_i represent the hash values at different heights for a binary tree with leaf values equal to `0`.\\n   * (e.g. Z_1 is the keccak256 hash of (0x0, 0x0), Z_2 is the keccak256 hash of (Z_1, Z_1), etc...)\\n   * Z_0 is the bottom of the 33-layer tree, Z_32 is the top (i.e. root).\\n   * Used to shortcut calculation in root calculation methods below.\\n   */\\n  bytes32 internal constant Z_0 = hex\\\"0000000000000000000000000000000000000000000000000000000000000000\\\";\\n  bytes32 internal constant Z_1 = hex\\\"ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5\\\";\\n  bytes32 internal constant Z_2 = hex\\\"b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30\\\";\\n  bytes32 internal constant Z_3 = hex\\\"21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85\\\";\\n  bytes32 internal constant Z_4 = hex\\\"e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344\\\";\\n  bytes32 internal constant Z_5 = hex\\\"0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d\\\";\\n  bytes32 internal constant Z_6 = hex\\\"887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968\\\";\\n  bytes32 internal constant Z_7 = hex\\\"ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83\\\";\\n  bytes32 internal constant Z_8 = hex\\\"9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af\\\";\\n  bytes32 internal constant Z_9 = hex\\\"cefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0\\\";\\n  bytes32 internal constant Z_10 = hex\\\"f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5\\\";\\n  bytes32 internal constant Z_11 = hex\\\"f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892\\\";\\n  bytes32 internal constant Z_12 = hex\\\"3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c\\\";\\n  bytes32 internal constant Z_13 = hex\\\"c1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb\\\";\\n  bytes32 internal constant Z_14 = hex\\\"5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc\\\";\\n  bytes32 internal constant Z_15 = hex\\\"da7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2\\\";\\n  bytes32 internal constant Z_16 = hex\\\"2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f\\\";\\n  bytes32 internal constant Z_17 = hex\\\"e1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a\\\";\\n  bytes32 internal constant Z_18 = hex\\\"5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0\\\";\\n  bytes32 internal constant Z_19 = hex\\\"b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0\\\";\\n  bytes32 internal constant Z_20 = hex\\\"c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2\\\";\\n  bytes32 internal constant Z_21 = hex\\\"f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9\\\";\\n  bytes32 internal constant Z_22 = hex\\\"5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377\\\";\\n  bytes32 internal constant Z_23 = hex\\\"4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652\\\";\\n  bytes32 internal constant Z_24 = hex\\\"cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef\\\";\\n  bytes32 internal constant Z_25 = hex\\\"0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d\\\";\\n  bytes32 internal constant Z_26 = hex\\\"b8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0\\\";\\n  bytes32 internal constant Z_27 = hex\\\"838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e\\\";\\n  bytes32 internal constant Z_28 = hex\\\"662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e\\\";\\n  bytes32 internal constant Z_29 = hex\\\"388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322\\\";\\n  bytes32 internal constant Z_30 = hex\\\"93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735\\\";\\n  bytes32 internal constant Z_31 = hex\\\"8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9\\\";\\n  bytes32 internal constant Z_32 = hex\\\"27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757\\\";\\n\\n  // ============= Structs ==============\\n\\n  /**\\n   * @notice Struct representing incremental merkle tree. Contains current\\n   * branch and the number of inserted leaves in the tree.\\n   **/\\n  struct Tree {\\n    bytes32[TREE_DEPTH] branch;\\n    uint256 count;\\n  }\\n\\n  // ========= Write Methods =========\\n\\n  /**\\n   * @notice Inserts a given node (leaf) into merkle tree. Operates on an in-memory tree and\\n   * returns an updated version of that tree.\\n   * @dev Reverts if the tree is already full.\\n   * @param node Element to insert into tree.\\n   * @return Tree Updated tree.\\n   **/\\n  function insert(Tree memory tree, bytes32 node) internal pure returns (Tree memory) {\\n    // Update tree.count to increase the current count by 1 since we'll be including a new node.\\n    uint256 size = ++tree.count;\\n    if (size > MAX_LEAVES) revert MerkleLib__insert_treeIsFull();\\n\\n    // Loop starting at 0, ending when we've finished inserting the node (i.e. hashing it) into\\n    // the active branch. Each loop we cut size in half, hashing the inserted node up the active\\n    // branch along the way.\\n    for (uint256 i; i < TREE_DEPTH; ) {\\n      // Check if the current size is odd; if so, we set this index in the branch to be the node.\\n      if ((size & 1) == 1) {\\n        // If i > 0, then this node will be a hash of the original node with every layer up\\n        // until layer `i`.\\n        tree.branch[i] = node;\\n        return tree;\\n      }\\n      // If the size is not yet odd, we hash the current index in the tree branch with the node.\\n      node = keccak256(abi.encodePacked(tree.branch[i], node));\\n      size >>= 1; // Cut size in half (statement equivalent to: `size /= 2`).\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // As the loop should always end prematurely with the `return` statement, this code should\\n    // be unreachable. We revert here just to be safe.\\n    revert MerkleLib__insert_treeIsFull();\\n  }\\n\\n  // ========= Read Methods =========\\n\\n  /**\\n   * @notice Calculates and returns tree's current root.\\n   * @return _current bytes32 root.\\n   **/\\n  function root(Tree storage tree) internal view returns (bytes32 _current) {\\n    uint256 _index = tree.count;\\n\\n    if (_index == 0) {\\n      return Z_32;\\n    }\\n\\n    uint256 i;\\n    assembly {\\n      let TREE_SLOT := tree.slot\\n\\n      for {\\n\\n      } true {\\n\\n      } {\\n        for {\\n\\n        } true {\\n\\n        } {\\n          if and(_index, 1) {\\n            mstore(0, sload(TREE_SLOT))\\n            mstore(0x20, Z_0)\\n            _current := keccak256(0, 0x40)\\n            break\\n          }\\n\\n          if and(_index, shl(1, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 1)))\\n            mstore(0x20, Z_1)\\n            _current := keccak256(0, 0x40)\\n            i := 1\\n            break\\n          }\\n\\n          if and(_index, shl(2, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 2)))\\n            mstore(0x20, Z_2)\\n            _current := keccak256(0, 0x40)\\n            i := 2\\n            break\\n          }\\n\\n          if and(_index, shl(3, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 3)))\\n            mstore(0x20, Z_3)\\n            _current := keccak256(0, 0x40)\\n            i := 3\\n            break\\n          }\\n\\n          if and(_index, shl(4, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 4)))\\n            mstore(0x20, Z_4)\\n            _current := keccak256(0, 0x40)\\n            i := 4\\n            break\\n          }\\n\\n          if and(_index, shl(5, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 5)))\\n            mstore(0x20, Z_5)\\n            _current := keccak256(0, 0x40)\\n            i := 5\\n            break\\n          }\\n\\n          if and(_index, shl(6, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 6)))\\n            mstore(0x20, Z_6)\\n            _current := keccak256(0, 0x40)\\n            i := 6\\n            break\\n          }\\n\\n          if and(_index, shl(7, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 7)))\\n            mstore(0x20, Z_7)\\n            _current := keccak256(0, 0x40)\\n            i := 7\\n            break\\n          }\\n\\n          if and(_index, shl(8, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 8)))\\n            mstore(0x20, Z_8)\\n            _current := keccak256(0, 0x40)\\n            i := 8\\n            break\\n          }\\n\\n          if and(_index, shl(9, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 9)))\\n            mstore(0x20, Z_9)\\n            _current := keccak256(0, 0x40)\\n            i := 9\\n            break\\n          }\\n\\n          if and(_index, shl(10, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 10)))\\n            mstore(0x20, Z_10)\\n            _current := keccak256(0, 0x40)\\n            i := 10\\n            break\\n          }\\n\\n          if and(_index, shl(11, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 11)))\\n            mstore(0x20, Z_11)\\n            _current := keccak256(0, 0x40)\\n            i := 11\\n            break\\n          }\\n\\n          if and(_index, shl(12, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 12)))\\n            mstore(0x20, Z_12)\\n            _current := keccak256(0, 0x40)\\n            i := 12\\n            break\\n          }\\n\\n          if and(_index, shl(13, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 13)))\\n            mstore(0x20, Z_13)\\n            _current := keccak256(0, 0x40)\\n            i := 13\\n            break\\n          }\\n\\n          if and(_index, shl(14, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 14)))\\n            mstore(0x20, Z_14)\\n            _current := keccak256(0, 0x40)\\n            i := 14\\n            break\\n          }\\n\\n          if and(_index, shl(15, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 15)))\\n            mstore(0x20, Z_15)\\n            _current := keccak256(0, 0x40)\\n            i := 15\\n            break\\n          }\\n\\n          if and(_index, shl(16, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 16)))\\n            mstore(0x20, Z_16)\\n            _current := keccak256(0, 0x40)\\n            i := 16\\n            break\\n          }\\n\\n          if and(_index, shl(17, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 17)))\\n            mstore(0x20, Z_17)\\n            _current := keccak256(0, 0x40)\\n            i := 17\\n            break\\n          }\\n\\n          if and(_index, shl(18, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 18)))\\n            mstore(0x20, Z_18)\\n            _current := keccak256(0, 0x40)\\n            i := 18\\n            break\\n          }\\n\\n          if and(_index, shl(19, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 19)))\\n            mstore(0x20, Z_19)\\n            _current := keccak256(0, 0x40)\\n            i := 19\\n            break\\n          }\\n\\n          if and(_index, shl(20, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 20)))\\n            mstore(0x20, Z_20)\\n            _current := keccak256(0, 0x40)\\n            i := 20\\n            break\\n          }\\n\\n          if and(_index, shl(21, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 21)))\\n            mstore(0x20, Z_21)\\n            _current := keccak256(0, 0x40)\\n            i := 21\\n            break\\n          }\\n\\n          if and(_index, shl(22, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 22)))\\n            mstore(0x20, Z_22)\\n            _current := keccak256(0, 0x40)\\n            i := 22\\n            break\\n          }\\n\\n          if and(_index, shl(23, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 23)))\\n            mstore(0x20, Z_23)\\n            _current := keccak256(0, 0x40)\\n            i := 23\\n            break\\n          }\\n\\n          if and(_index, shl(24, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 24)))\\n            mstore(0x20, Z_24)\\n            _current := keccak256(0, 0x40)\\n            i := 24\\n            break\\n          }\\n\\n          if and(_index, shl(25, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 25)))\\n            mstore(0x20, Z_25)\\n            _current := keccak256(0, 0x40)\\n            i := 25\\n            break\\n          }\\n\\n          if and(_index, shl(26, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 26)))\\n            mstore(0x20, Z_26)\\n            _current := keccak256(0, 0x40)\\n            i := 26\\n            break\\n          }\\n\\n          if and(_index, shl(27, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 27)))\\n            mstore(0x20, Z_27)\\n            _current := keccak256(0, 0x40)\\n            i := 27\\n            break\\n          }\\n\\n          if and(_index, shl(28, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 28)))\\n            mstore(0x20, Z_28)\\n            _current := keccak256(0, 0x40)\\n            i := 28\\n            break\\n          }\\n\\n          if and(_index, shl(29, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 29)))\\n            mstore(0x20, Z_29)\\n            _current := keccak256(0, 0x40)\\n            i := 29\\n            break\\n          }\\n\\n          if and(_index, shl(30, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 30)))\\n            mstore(0x20, Z_30)\\n            _current := keccak256(0, 0x40)\\n            i := 30\\n            break\\n          }\\n\\n          if and(_index, shl(31, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 31)))\\n            mstore(0x20, Z_31)\\n            _current := keccak256(0, 0x40)\\n            i := 31\\n            break\\n          }\\n\\n          _current := Z_32\\n          i := 32\\n          break\\n        }\\n\\n        if gt(i, 30) {\\n          break\\n        }\\n\\n        {\\n          if lt(i, 1) {\\n            switch and(_index, shl(1, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_1)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 1)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 2) {\\n            switch and(_index, shl(2, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_2)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 2)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 3) {\\n            switch and(_index, shl(3, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_3)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 3)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 4) {\\n            switch and(_index, shl(4, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_4)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 4)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 5) {\\n            switch and(_index, shl(5, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_5)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 5)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 6) {\\n            switch and(_index, shl(6, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_6)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 6)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 7) {\\n            switch and(_index, shl(7, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_7)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 7)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 8) {\\n            switch and(_index, shl(8, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_8)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 8)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 9) {\\n            switch and(_index, shl(9, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_9)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 9)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 10) {\\n            switch and(_index, shl(10, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_10)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 10)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 11) {\\n            switch and(_index, shl(11, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_11)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 11)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 12) {\\n            switch and(_index, shl(12, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_12)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 12)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 13) {\\n            switch and(_index, shl(13, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_13)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 13)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 14) {\\n            switch and(_index, shl(14, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_14)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 14)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 15) {\\n            switch and(_index, shl(15, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_15)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 15)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 16) {\\n            switch and(_index, shl(16, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_16)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 16)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 17) {\\n            switch and(_index, shl(17, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_17)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 17)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 18) {\\n            switch and(_index, shl(18, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_18)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 18)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 19) {\\n            switch and(_index, shl(19, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_19)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 19)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 20) {\\n            switch and(_index, shl(20, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_20)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 20)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 21) {\\n            switch and(_index, shl(21, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_21)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 21)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 22) {\\n            switch and(_index, shl(22, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_22)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 22)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 23) {\\n            switch and(_index, shl(23, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_23)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 23)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 24) {\\n            switch and(_index, shl(24, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_24)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 24)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 25) {\\n            switch and(_index, shl(25, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_25)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 25)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 26) {\\n            switch and(_index, shl(26, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_26)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 26)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 27) {\\n            switch and(_index, shl(27, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_27)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 27)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 28) {\\n            switch and(_index, shl(28, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_28)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 28)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 29) {\\n            switch and(_index, shl(29, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_29)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 29)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 30) {\\n            switch and(_index, shl(30, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_30)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 30)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 31) {\\n            switch and(_index, shl(31, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_31)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 31)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n        }\\n\\n        break\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the merkle root for the given leaf `_item`,\\n   * a merkle branch, and the index of `_item` in the tree.\\n   * @param _item Merkle leaf\\n   * @param _branch Merkle proof\\n   * @param _index Index of `_item` in tree\\n   * @return _current Calculated merkle root\\n   **/\\n  function branchRoot(\\n    bytes32 _item,\\n    bytes32[TREE_DEPTH] memory _branch,\\n    uint256 _index\\n  ) internal pure returns (bytes32 _current) {\\n    assembly {\\n      _current := _item\\n      let BRANCH_DATA_OFFSET := _branch\\n      let f\\n\\n      f := shl(5, and(_index, 1))\\n      mstore(f, _current)\\n      mstore(sub(0x20, f), mload(BRANCH_DATA_OFFSET))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(1, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 1))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(2, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 2))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(3, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 3))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(4, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 4))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(5, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 5))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(6, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 6))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(7, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 7))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(8, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 8))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(9, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 9))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(10, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 10))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(11, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 11))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(12, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 12))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(13, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 13))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(14, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 14))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(15, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 15))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(16, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 16))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(17, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 17))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(18, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 18))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(19, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 19))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(20, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 20))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(21, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 21))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(22, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 22))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(23, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 23))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(24, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 24))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(25, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 25))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(26, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 26))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(27, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 27))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(28, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 28))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(29, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 29))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(30, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 30))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(31, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 31))))\\n      _current := keccak256(0, 0x40)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08c791dbeef6253813d74e2145183501fe7631c13d5ac9d768036f47b66b693e\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/Message.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\n/**\\n * @title Message Library\\n * @author Illusory Systems Inc.\\n * @notice Library for formatted messages used by Home and Replica.\\n **/\\nlibrary Message {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // Number of bytes in formatted message before `body` field\\n  uint256 internal constant PREFIX_LENGTH = 76;\\n\\n  /**\\n   * @notice Returns formatted (packed) message with provided fields\\n   * @param _originDomain Domain of home chain\\n   * @param _sender Address of sender as bytes32\\n   * @param _nonce Destination-specific nonce\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipient Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes of message body\\n   * @return Formatted message\\n   **/\\n  function formatMessage(\\n    uint32 _originDomain,\\n    bytes32 _sender,\\n    uint32 _nonce,\\n    uint32 _destinationDomain,\\n    bytes32 _recipient,\\n    bytes memory _messageBody\\n  ) internal pure returns (bytes memory) {\\n    return abi.encodePacked(_originDomain, _sender, _nonce, _destinationDomain, _recipient, _messageBody);\\n  }\\n\\n  /**\\n   * @notice Returns leaf of formatted message with provided fields.\\n   * @param _origin Domain of home chain\\n   * @param _sender Address of sender as bytes32\\n   * @param _nonce Destination-specific nonce number\\n   * @param _destination Domain of destination chain\\n   * @param _recipient Address of recipient on destination chain as bytes32\\n   * @param _body Raw bytes of message body\\n   * @return Leaf (hash) of formatted message\\n   **/\\n  function messageHash(\\n    uint32 _origin,\\n    bytes32 _sender,\\n    uint32 _nonce,\\n    uint32 _destination,\\n    bytes32 _recipient,\\n    bytes memory _body\\n  ) internal pure returns (bytes32) {\\n    return keccak256(formatMessage(_origin, _sender, _nonce, _destination, _recipient, _body));\\n  }\\n\\n  /// @notice Returns message's origin field\\n  function origin(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(0, 4));\\n  }\\n\\n  /// @notice Returns message's sender field\\n  function sender(bytes29 _message) internal pure returns (bytes32) {\\n    return _message.index(4, 32);\\n  }\\n\\n  /// @notice Returns message's nonce field\\n  function nonce(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(36, 4));\\n  }\\n\\n  /// @notice Returns message's destination field\\n  function destination(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(40, 4));\\n  }\\n\\n  /// @notice Returns message's recipient field as bytes32\\n  function recipient(bytes29 _message) internal pure returns (bytes32) {\\n    return _message.index(44, 32);\\n  }\\n\\n  /// @notice Returns message's recipient field as an address\\n  function recipientAddress(bytes29 _message) internal pure returns (address) {\\n    return TypeCasts.bytes32ToAddress(recipient(_message));\\n  }\\n\\n  /// @notice Returns message's body field as bytes29 (refer to TypedMemView library for details on bytes29 type)\\n  function body(bytes29 _message) internal pure returns (bytes29) {\\n    return _message.slice(PREFIX_LENGTH, _message.len() - PREFIX_LENGTH, 0);\\n  }\\n\\n  function leaf(bytes29 _message) internal pure returns (bytes32) {\\n    uint256 loc = _message.loc();\\n    uint256 len = _message.len();\\n    /*\\n    prev:\\n    return\\n      messageHash(\\n        origin(_message),\\n        sender(_message),\\n        nonce(_message),\\n        destination(_message),\\n        recipient(_message),\\n        TypedMemView.clone(body(_message))\\n      );\\n\\n      below added for gas optimization\\n     */\\n    bytes32 hash;\\n    assembly {\\n      hash := keccak256(loc, len)\\n    }\\n    return hash;\\n  }\\n}\\n\",\"keccak256\":\"0xa4212f7b88146588e8e0e24cddbc5dae6269618a722b34f00ea322b33fa1f36a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/RateLimited.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice An abstract contract intended to manage the rate limiting aspect of spoke\\n * connector messaging. Rate limiting the number of messages we can send over a span of\\n * blocks is used to mitigate key DoSing vectors for transporting messages between chains.\\n */\\nabstract contract RateLimited {\\n  // ========== Custom Errors ===========\\n\\n  error RateLimited__rateLimited_messageSendRateExceeded();\\n\\n  // ============ Events ============\\n\\n  event SendRateLimitUpdated(address updater, uint256 newRateLimit);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The number of blocks required between message sending events.\\n   * @dev NOTE: This value is 0 by default, meaning that rate limiting functionality\\n   * will naturally be disabled by default.\\n   */\\n  uint256 public rateLimitBlocks;\\n\\n  /**\\n   * @notice Tracks the last block that we sent a message.\\n   */\\n  uint256 public lastSentBlock;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Checks to see if we can send this block, given the current rate limit\\n   * setting and the last block we sent a message. If rate limit has been surpassed,\\n   * we update the `lastSentBlock` to be the current block.\\n   */\\n  modifier rateLimited() {\\n    // Check to make sure we have surpassed the number of rate limit blocks.\\n    if (lastSentBlock + rateLimitBlocks > block.number) {\\n      revert RateLimited__rateLimited_messageSendRateExceeded();\\n    }\\n    // Update the last block we sent a message to be the current one.\\n    lastSentBlock = block.number;\\n    _;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Update the current rate limit to a new value.\\n   */\\n  function _setRateLimitBlocks(uint256 _newRateLimit) internal {\\n    require(_newRateLimit != rateLimitBlocks, \\\"!new rate limit\\\");\\n    // NOTE: Setting the block rate limit interval to 0 will result in rate limiting\\n    // being disabled.\\n    rateLimitBlocks = _newRateLimit;\\n    emit SendRateLimitUpdated(msg.sender, _newRateLimit);\\n  }\\n}\\n\",\"keccak256\":\"0xcc185ae966c87441490aaa8c0779a7b3085961a7b8512d5973f1c34f641eeae3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/ProposedOwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {Initializable} from \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"./ProposedOwnable.sol\\\";\\n\\nabstract contract ProposedOwnableUpgradeable is Initializable, ProposedOwnable {\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial\\n   */\\n  function __ProposedOwnable_init() internal onlyInitializing {\\n    __ProposedOwnable_init_unchained();\\n  }\\n\\n  function __ProposedOwnable_init_unchained() internal onlyInitializing {\\n    _setOwner(msg.sender);\\n  }\\n\\n  /**\\n   * @dev This empty reserved space is put in place to allow future versions to add new\\n   * variables without shifting down storage in the inheritance chain.\\n   * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n   */\\n  uint256[47] private __GAP;\\n}\\n\",\"keccak256\":\"0x2b064b03a25915e93749905ef3aae516ffaac86b8ba9f126b614425b623bf477\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/ExcessivelySafeCall.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// Taken from: https://github.com/nomad-xyz/ExcessivelySafeCall\\n// NOTE: There is a difference between npm latest and github main versions\\n// where the latest github version allows you to specify an ether value.\\n\\nlibrary ExcessivelySafeCall {\\n  uint256 constant LOW_28_MASK = 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _value The value in wei to send to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeCall(\\n    address _target,\\n    uint256 _gas,\\n    uint256 _value,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := call(\\n        _gas, // gas\\n        _target, // recipient\\n        _value, // ether value\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeStaticCall(\\n    address _target,\\n    uint256 _gas,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal view returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := staticcall(\\n        _gas, // gas\\n        _target, // recipient\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /**\\n   * @notice Swaps function selectors in encoded contract calls\\n   * @dev Allows reuse of encoded calldata for functions with identical\\n   * argument types but different names. It simply swaps out the first 4 bytes\\n   * for the new selector. This function modifies memory in place, and should\\n   * only be used with caution.\\n   * @param _newSelector The new 4-byte selector\\n   * @param _buf The encoded contract args\\n   */\\n  function swapSelector(bytes4 _newSelector, bytes memory _buf) internal pure {\\n    require(_buf.length > 4 - 1);\\n    uint256 _mask = LOW_28_MASK;\\n    assembly {\\n      // load the first word of\\n      let _word := mload(add(_buf, 0x20))\\n      // mask out the top 4 bytes\\n      // /x\\n      _word := and(_word, _mask)\\n      _word := or(_newSelector, _word)\\n      mstore(add(_buf, 0x20), _word)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x5472b56fa56886620b1a8e4e2f12f8925500bb237a4dad38651c79db69f0724c\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol:MainnetSpokeConnector","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol:MainnetSpokeConnector","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol:MainnetSpokeConnector","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39051,"contract":"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol:MainnetSpokeConnector","label":"mirrorConnector","offset":0,"slot":"3","type":"t_address"},{"astId":10590,"contract":"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol:MainnetSpokeConnector","label":"_paused","offset":20,"slot":"3","type":"t_bool"},{"astId":38824,"contract":"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol:MainnetSpokeConnector","label":"watcherManager","offset":0,"slot":"4","type":"t_contract(WatcherManager)39005"},{"astId":49639,"contract":"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol:MainnetSpokeConnector","label":"rateLimitBlocks","offset":0,"slot":"5","type":"t_uint256"},{"astId":49642,"contract":"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol:MainnetSpokeConnector","label":"lastSentBlock","offset":0,"slot":"6","type":"t_uint256"},{"astId":10691,"contract":"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol:MainnetSpokeConnector","label":"_status","offset":0,"slot":"7","type":"t_uint256"},{"astId":39546,"contract":"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol:MainnetSpokeConnector","label":"delayBlocks","offset":0,"slot":"8","type":"t_uint256"},{"astId":39561,"contract":"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol:MainnetSpokeConnector","label":"pendingAggregateRoots","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":39566,"contract":"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol:MainnetSpokeConnector","label":"provenAggregateRoots","offset":0,"slot":"10","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39571,"contract":"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol:MainnetSpokeConnector","label":"provenMessageRoots","offset":0,"slot":"11","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39576,"contract":"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol:MainnetSpokeConnector","label":"sentMessageRoots","offset":0,"slot":"12","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39581,"contract":"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol:MainnetSpokeConnector","label":"allowlistedSenders","offset":0,"slot":"13","type":"t_mapping(t_address,t_bool)"},{"astId":39586,"contract":"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol:MainnetSpokeConnector","label":"nonces","offset":0,"slot":"14","type":"t_mapping(t_uint32,t_uint32)"},{"astId":39592,"contract":"contracts/messaging/connectors/mainnet/MainnetSpokeConnector.sol:MainnetSpokeConnector","label":"messages","offset":0,"slot":"15","type":"t_mapping(t_bytes32,t_enum(MessageStatus)39534)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(WatcherManager)39005":{"encoding":"inplace","label":"contract WatcherManager","numberOfBytes":"20"},"t_enum(MessageStatus)39534":{"encoding":"inplace","label":"enum SpokeConnector.MessageStatus","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(MessageStatus)39534)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum SpokeConnector.MessageStatus)","numberOfBytes":"32","value":"t_enum(MessageStatus)39534"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_uint32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => uint32)","numberOfBytes":"32","value":"t_uint32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"}}},"userdoc":{"events":{"FundsWithdrawn(address,uint256)":{"notice":"Emitted when funds are withdrawn by the admin"},"MessageProcessed(bytes,address)":{"notice":"Emitted whenever a message is successfully received over an AMB"},"MessageSent(bytes,bytes,address)":{"notice":"Emitted whenever a message is successfully sent over an AMB"},"WatcherManagerChanged(address)":{"notice":"Emitted when the manager address changes"}},"kind":"user","methods":{"AMB()":{"notice":"Address of the AMB on this domain."},"DOMAIN()":{"notice":"The domain of this Messaging (i.e. Connector) contract."},"MERKLE()":{"notice":"MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root will be sent crosschain to the hub for aggregation and redistribution."},"MIRROR_DOMAIN()":{"notice":"The domain of the corresponding messaging (i.e. Connector) contract."},"PROCESS_GAS()":{"notice":"Minimum gas for processing a received message (reserved for handle)"},"RESERVE_GAS()":{"notice":"Reserved gas (to ensure tx completes in case message processing runs out)"},"ROOT_MANAGER()":{"notice":"RootManager contract address."},"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"addSender(address)":{"notice":"Adds a sender to the allowlist."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"delayBlocks()":{"notice":"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary."},"dispatch(uint32,bytes32,bytes)":{"notice":"This function adds transfers to the outbound transfer merkle tree."},"home()":{"notice":"Get the local inbox contract from the xAppConnectionManager"},"isReplica(address)":{"notice":"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager"},"lastSentBlock()":{"notice":"Tracks the last block that we sent a message."},"localDomain()":{"notice":"This provides the implementation for what is defined in the ConnectorManager to avoid storing the domain redundantly"},"messages(bytes32)":{"notice":"Mapping of message leaves to MessageStatus, keyed on leaf."},"mirrorConnector()":{"notice":"Connector on L2 for L1 connectors, and vice versa."},"nonces(uint32)":{"notice":"domain => next available nonce for the domain."},"outboundRoot()":{"notice":"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)"},"owner()":{"notice":"Returns the address of the current owner."},"pause()":{"notice":"Watchers can pause contracts if fraud is detected"},"pendingAggregateRoots(bytes32)":{"notice":"This will hold the commit block for incoming aggregateRoots from the hub chain. Once they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can be used for proving inclusion of crosschain messages."},"processMessage(bytes)":{"notice":"Processes a message received by an AMB"},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":{"notice":"Must be able to call the `handle` function on the BridgeRouter contract. This is called on the destination domain to handle incoming messages. Proving: Calculates the expected inbound root from an origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this calculated inbound root is included in the current aggregateRoot, given its index in the aggregator tree and the proof of inclusion. Processing: After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for execution."},"provenAggregateRoots(bytes32)":{"notice":"This tracks the roots of the aggregate tree containing outbound roots from all other supported domains. The current version is the one that is known to be past the delayBlocks time period."},"provenMessageRoots(bytes32)":{"notice":"This tracks whether the root has been proven to exist within the given aggregate root."},"rateLimitBlocks()":{"notice":"The number of blocks required between message sending events."},"removePendingAggregateRoot(bytes32)":{"notice":"Manually remove a pending aggregateRoot by owner if the contract is paused."},"removeSender(address)":{"notice":"Removes a sender from the allowlist."},"renounceOwnership()":{"notice":"Remove ability to renounce ownership"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"send(bytes)":{"notice":"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)"},"sendMessage(bytes,bytes)":{"notice":"Sends a message over the amb"},"sentMessageRoots(bytes32)":{"notice":"This mapping records all message roots that have already been sent in order to prevent redundant message roots from being sent to hub."},"setDelayBlocks(uint256)":{"notice":"Set the `delayBlocks`, the period in blocks over which an incoming message is verified."},"setMirrorConnector(address)":{"notice":"Sets the address of the l2Connector for this domain"},"setRateLimitBlocks(uint256)":{"notice":"Set the rate limit (number of blocks) at which we can send messages from this contract to the hub chain using the `send` method."},"setWatcherManager(address)":{"notice":"Owner can enroll a watcher (abilities are defined by inheriting contracts)"},"unpause()":{"notice":"Owner can unpause contracts if fraud is detected by watchers"},"verifySender(address)":{"notice":"Checks the cross domain sender for a given address"},"watcherManager()":{"notice":"The `WatcherManager` contract governs the watcher allowlist."},"withdrawFunds(address)":{"notice":"This function should be callable by owner, and send funds trapped on a connector to the provided recipient."}},"version":1}}},"contracts/messaging/connectors/multichain/BaseMultichain.sol":{"BaseMultichain":{"abi":[{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"GasCapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"anyExecute","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gasCap","type":"uint256"}],"name":"setGasCap","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"acceptProposedOwner()":"c5b350df","anyExecute(bytes)":"9abaf479","delay()":"6a42b8f8","owner()":"8da5cb5b","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","renounceOwnership()":"715018a6","renounced()":"d232c220","setGasCap(uint256)":"7850b020"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_previous\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"GasCapUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"anyExecute\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"}],\"name\":\"setGasCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"GasCapUpdated(uint256,uint256)\":{\"notice\":\"Emitted when admin updates the gas cap\"}},\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/multichain/BaseMultichain.sol\":\"BaseMultichain\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/GasCap.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\n\\nabstract contract GasCap is ProposedOwnable {\\n  // ============ Storage ============\\n  /**\\n   * @notice The gnosis amb requires destination gas to be specified on the origin.\\n   * The gas used will be passed in by the relayer to allow for real-time estimates,\\n   * but will be capped at the admin-set cap.\\n   */\\n  uint256 gasCap;\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted when admin updates the gas cap\\n   * @param _previous The starting value\\n   * @param _updated The final value\\n   */\\n  event GasCapUpdated(uint256 _previous, uint256 _updated);\\n\\n  // ============ Constructor ============\\n  constructor(uint256 _gasCap) {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Admin Fns ============\\n  function setGasCap(uint256 _gasCap) public onlyOwner {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Internal Fns ============\\n\\n  /**\\n   * @notice Used (by admin) to update the gas cap\\n   * @param _gasCap The new value\\n   */\\n  function _setGasCap(uint256 _gasCap) internal {\\n    emit GasCapUpdated(gasCap, _gasCap);\\n    gasCap = _gasCap;\\n  }\\n\\n  /**\\n   * @notice Used to get the gas to use. Will be the original value IFF it\\n   * is less than the cap\\n   * @param _gas The proposed gas value\\n   */\\n  function _getGas(uint256 _gas) internal view returns (uint256) {\\n    if (_gas > gasCap) {\\n      _gas = gasCap;\\n    }\\n    return _gas;\\n  }\\n}\\n\",\"keccak256\":\"0xb8b52a3372f08490c918d1f490ad80764d54bd62d1638e4d17a5b552efe6587d\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/multichain/BaseMultichain.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Multichain} from \\\"../../interfaces/ambs/Multichain.sol\\\";\\n\\nimport {GasCap} from \\\"../GasCap.sol\\\";\\n\\nabstract contract BaseMultichain is GasCap {\\n  // ============ Internal Storage ============\\n  address internal immutable EXECUTOR; // Is != amb, used only to retrieve sender context\\n\\n  // Mirror chain id\\n  uint256 internal immutable MIRROR_CHAIN_ID;\\n\\n  // ============ Constructor ============\\n  constructor(\\n    address _amb,\\n    uint256 _mirrorChainId,\\n    uint256 _gasCap // max fee on destination chain\\n  ) GasCap(_gasCap) {\\n    // sanity checks\\n    require(_mirrorChainId != 0, \\\"!mirrorChainId\\\");\\n\\n    // set immutable propertioes\\n    EXECUTOR = Multichain(_amb).executor();\\n    require(EXECUTOR != address(0), \\\"!executor\\\");\\n    MIRROR_CHAIN_ID = _mirrorChainId;\\n  }\\n\\n  // ============ Public Fns ============\\n  function anyExecute(bytes memory _data) external returns (bool success, bytes memory result) {\\n    _processMessage(_data);\\n  }\\n\\n  // ============ Private fns ============\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(bytes memory _data) internal virtual;\\n\\n  /**\\n   * @dev Sends `outboundRoot` to root manager on the mirror chain\\n   */\\n  function _sendMessage(\\n    address _amb,\\n    address _mirrorConnector,\\n    bytes memory _data,\\n    bytes memory _encodedData\\n  ) internal {\\n    // Should always be sending a merkle root\\n    require(_data.length == 32, \\\"!data length\\\");\\n\\n    // Should not include any gas info\\n    require(_encodedData.length == 0, \\\"!data length\\\");\\n\\n    // Get the max fee supplied\\n    uint256 supplied = _getGas(msg.value); // fee paid on origin chain, up to cap\\n    // NOTE: fee will always be <= msg.value\\n\\n    // Get the min fees\\n    uint256 required = Multichain(_amb).calcSrcFees(\\n      \\\"\\\", // app id\\n      MIRROR_CHAIN_ID, // destination chain\\n      32 // data length: selector + root\\n    );\\n    // Should have at least the min fees\\n    require(required < supplied + 1, \\\"!fees\\\");\\n\\n    Multichain(_amb).anyCall{value: supplied}(\\n      _mirrorConnector, // Target contract on destination\\n      _data, // Call data for interaction\\n      address(0), // fallback address on origin chain\\n      MIRROR_CHAIN_ID,\\n      2 // fees paid on source chain\\n    );\\n  }\\n\\n  function _verifySender(address _amb, address _expected) internal view returns (bool) {\\n    require(msg.sender == EXECUTOR, \\\"!executor\\\");\\n\\n    (address from, uint256 fromChainId, ) = Multichain(EXECUTOR).context();\\n    return from == _expected && fromChainId == MIRROR_CHAIN_ID;\\n  }\\n}\\n\",\"keccak256\":\"0x57494779372d73cbb657b60cff9ff57a29455d32df8c74dad7df6cb2fb4e1d9b\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/ambs/Multichain.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @dev interface to interact with multicall (prev anyswap) anycall proxy\\n *     see https://github.com/anyswap/multichain-smart-contracts/blob/main/contracts/anycall/AnyswapV6CallProxy.sol\\n */\\ninterface Multichain {\\n  function anyCall(\\n    address _to,\\n    bytes calldata _data,\\n    address _fallback,\\n    uint256 _toChainID,\\n    uint256 _flags\\n  ) external payable;\\n\\n  function context()\\n    external\\n    view\\n    returns (\\n      address from,\\n      uint256 fromChainID,\\n      uint256 nonce\\n    );\\n\\n  function executor() external view returns (address executor);\\n\\n  function calcSrcFees(\\n    string calldata _appID,\\n    uint256 _toChainID,\\n    uint256 _dataLength\\n  ) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xdb3f6c60f9b28aec1a7d5a05378f7eb7783b35cf8bab2a72bd96040249131ef7\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/multichain/BaseMultichain.sol:BaseMultichain","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/multichain/BaseMultichain.sol:BaseMultichain","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/multichain/BaseMultichain.sol:BaseMultichain","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39301,"contract":"contracts/messaging/connectors/multichain/BaseMultichain.sol:BaseMultichain","label":"gasCap","offset":0,"slot":"3","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"GasCapUpdated(uint256,uint256)":{"notice":"Emitted when admin updates the gas cap"}},"kind":"user","methods":{"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"owner()":{"notice":"Returns the address of the current owner."},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"}},"version":1}}},"contracts/messaging/connectors/multichain/MultichainHubConnector.sol":{"MultichainHubConnector":{"abi":[{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"uint32","name":"_mirrorDomain","type":"uint32"},{"internalType":"address","name":"_amb","type":"address"},{"internalType":"address","name":"_rootManager","type":"address"},{"internalType":"address","name":"_mirrorConnector","type":"address"},{"internalType":"uint256","name":"_mirrorChainId","type":"uint256"},{"internalType":"uint256","name":"_gasCap","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Connector__processMessage_notUsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"GasCapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"encodedData","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"current","type":"address"}],"name":"MirrorConnectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"mirrorDomain","type":"uint32"},{"indexed":false,"internalType":"address","name":"amb","type":"address"},{"indexed":false,"internalType":"address","name":"rootManager","type":"address"},{"indexed":false,"internalType":"address","name":"mirrorConnector","type":"address"}],"name":"NewConnector","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"AMB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIRROR_DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"anyExecute","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mirrorConnector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"processMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_encodedData","type":"bytes"}],"name":"sendMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gasCap","type":"uint256"}],"name":"setGasCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mirrorConnector","type":"address"}],"name":"setMirrorConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_expected","type":"address"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"processMessage(bytes)":{"details":"This is called by AMBs to process messages originating from mirror connector"},"sendMessage(bytes,bytes)":{"details":"This is called by the root manager *only* on mainnet to propagate the aggregate root"}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_39152":{"entryPoint":null,"id":39152,"parameterSlots":5,"returnSlots":0},"@_39318":{"entryPoint":null,"id":39318,"parameterSlots":1,"returnSlots":0},"@_39396":{"entryPoint":null,"id":39396,"parameterSlots":5,"returnSlots":0},"@_41867":{"entryPoint":null,"id":41867,"parameterSlots":3,"returnSlots":0},"@_42039":{"entryPoint":null,"id":42039,"parameterSlots":7,"returnSlots":0},"@_setGasCap_39346":{"entryPoint":868,"id":39346,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":763,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":662,"id":49908,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":959,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":1114,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256_fromMemory":{"entryPoint":983,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_uint32_fromMemory":{"entryPoint":933,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_620aa21aff383647ce0e5ebd652fee0a2b799ab25acda9de7376f45202465bab__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_78201d9d8a76cb57609402a557d055ee4f4bd3859f343728f9681a9fe9675816__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3571:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"73:108:181","statements":[{"nodeType":"YulAssignment","src":"83:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"98:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"92:5:181"},"nodeType":"YulFunctionCall","src":"92:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"83:5:181"}]},{"body":{"nodeType":"YulBlock","src":"159:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"168:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"171:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"161:6:181"},"nodeType":"YulFunctionCall","src":"161:12:181"},"nodeType":"YulExpressionStatement","src":"161:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"127:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"138:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"145:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"134:3:181"},"nodeType":"YulFunctionCall","src":"134:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"124:2:181"},"nodeType":"YulFunctionCall","src":"124:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"117:6:181"},"nodeType":"YulFunctionCall","src":"117:41:181"},"nodeType":"YulIf","src":"114:61:181"}]},"name":"abi_decode_uint32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"52:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"63:5:181","type":""}],"src":"14:167:181"},{"body":{"nodeType":"YulBlock","src":"246:117:181","statements":[{"nodeType":"YulAssignment","src":"256:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"271:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"265:5:181"},"nodeType":"YulFunctionCall","src":"265:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"256:5:181"}]},{"body":{"nodeType":"YulBlock","src":"341:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"350:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"353:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"343:6:181"},"nodeType":"YulFunctionCall","src":"343:12:181"},"nodeType":"YulExpressionStatement","src":"343:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"300:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"311:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"326:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"331:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"322:3:181"},"nodeType":"YulFunctionCall","src":"322:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"335:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"318:3:181"},"nodeType":"YulFunctionCall","src":"318:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"307:3:181"},"nodeType":"YulFunctionCall","src":"307:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"297:2:181"},"nodeType":"YulFunctionCall","src":"297:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"290:6:181"},"nodeType":"YulFunctionCall","src":"290:50:181"},"nodeType":"YulIf","src":"287:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"225:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"236:5:181","type":""}],"src":"186:177:181"},{"body":{"nodeType":"YulBlock","src":"549:489:181","statements":[{"body":{"nodeType":"YulBlock","src":"596:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"605:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"608:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"598:6:181"},"nodeType":"YulFunctionCall","src":"598:12:181"},"nodeType":"YulExpressionStatement","src":"598:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"570:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"579:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"566:3:181"},"nodeType":"YulFunctionCall","src":"566:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"591:3:181","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"562:3:181"},"nodeType":"YulFunctionCall","src":"562:33:181"},"nodeType":"YulIf","src":"559:53:181"},{"nodeType":"YulAssignment","src":"621:49:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"660:9:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"631:28:181"},"nodeType":"YulFunctionCall","src":"631:39:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"621:6:181"}]},{"nodeType":"YulAssignment","src":"679:58:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"722:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"733:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"718:3:181"},"nodeType":"YulFunctionCall","src":"718:18:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"689:28:181"},"nodeType":"YulFunctionCall","src":"689:48:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"679:6:181"}]},{"nodeType":"YulAssignment","src":"746:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"790:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"801:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"786:3:181"},"nodeType":"YulFunctionCall","src":"786:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"756:29:181"},"nodeType":"YulFunctionCall","src":"756:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"746:6:181"}]},{"nodeType":"YulAssignment","src":"814:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"858:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"869:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"854:3:181"},"nodeType":"YulFunctionCall","src":"854:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"824:29:181"},"nodeType":"YulFunctionCall","src":"824:49:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"814:6:181"}]},{"nodeType":"YulAssignment","src":"882:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"926:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"937:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"922:3:181"},"nodeType":"YulFunctionCall","src":"922:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"892:29:181"},"nodeType":"YulFunctionCall","src":"892:50:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"882:6:181"}]},{"nodeType":"YulAssignment","src":"951:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"971:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"982:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"967:3:181"},"nodeType":"YulFunctionCall","src":"967:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"961:5:181"},"nodeType":"YulFunctionCall","src":"961:26:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"951:6:181"}]},{"nodeType":"YulAssignment","src":"996:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1016:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1027:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1012:3:181"},"nodeType":"YulFunctionCall","src":"1012:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1006:5:181"},"nodeType":"YulFunctionCall","src":"1006:26:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"996:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"467:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"478:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"490:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"498:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"506:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"514:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"522:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"530:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"538:6:181","type":""}],"src":"368:670:181"},{"body":{"nodeType":"YulBlock","src":"1217:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1234:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1245:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1227:6:181"},"nodeType":"YulFunctionCall","src":"1227:21:181"},"nodeType":"YulExpressionStatement","src":"1227:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1268:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1279:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1264:3:181"},"nodeType":"YulFunctionCall","src":"1264:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1284:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1257:6:181"},"nodeType":"YulFunctionCall","src":"1257:30:181"},"nodeType":"YulExpressionStatement","src":"1257:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1307:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1318:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1303:3:181"},"nodeType":"YulFunctionCall","src":"1303:18:181"},{"hexValue":"656d70747920646f6d61696e","kind":"string","nodeType":"YulLiteral","src":"1323:14:181","type":"","value":"empty domain"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1296:6:181"},"nodeType":"YulFunctionCall","src":"1296:42:181"},"nodeType":"YulExpressionStatement","src":"1296:42:181"},{"nodeType":"YulAssignment","src":"1347:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1359:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1370:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1355:3:181"},"nodeType":"YulFunctionCall","src":"1355:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1347:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1194:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1208:4:181","type":""}],"src":"1043:336:181"},{"body":{"nodeType":"YulBlock","src":"1558:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1575:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1586:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1568:6:181"},"nodeType":"YulFunctionCall","src":"1568:21:181"},"nodeType":"YulExpressionStatement","src":"1568:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1609:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1620:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1605:3:181"},"nodeType":"YulFunctionCall","src":"1605:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1625:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1598:6:181"},"nodeType":"YulFunctionCall","src":"1598:30:181"},"nodeType":"YulExpressionStatement","src":"1598:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1648:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1659:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1644:3:181"},"nodeType":"YulFunctionCall","src":"1644:18:181"},{"hexValue":"656d70747920726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"1664:19:181","type":"","value":"empty rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1637:6:181"},"nodeType":"YulFunctionCall","src":"1637:47:181"},"nodeType":"YulExpressionStatement","src":"1637:47:181"},{"nodeType":"YulAssignment","src":"1693:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1705:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1716:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1701:3:181"},"nodeType":"YulFunctionCall","src":"1701:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1693:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1535:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1549:4:181","type":""}],"src":"1384:341:181"},{"body":{"nodeType":"YulBlock","src":"1887:227:181","statements":[{"nodeType":"YulAssignment","src":"1897:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1909:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1920:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1905:3:181"},"nodeType":"YulFunctionCall","src":"1905:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1897:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"1932:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1950:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1955:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1946:3:181"},"nodeType":"YulFunctionCall","src":"1946:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1959:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1942:3:181"},"nodeType":"YulFunctionCall","src":"1942:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1936:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1977:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1992:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2000:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1988:3:181"},"nodeType":"YulFunctionCall","src":"1988:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1970:6:181"},"nodeType":"YulFunctionCall","src":"1970:34:181"},"nodeType":"YulExpressionStatement","src":"1970:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2024:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2035:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2020:3:181"},"nodeType":"YulFunctionCall","src":"2020:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2044:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2052:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2040:3:181"},"nodeType":"YulFunctionCall","src":"2040:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2013:6:181"},"nodeType":"YulFunctionCall","src":"2013:43:181"},"nodeType":"YulExpressionStatement","src":"2013:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2076:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2087:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2072:3:181"},"nodeType":"YulFunctionCall","src":"2072:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"2096:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2104:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2092:3:181"},"nodeType":"YulFunctionCall","src":"2092:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2065:6:181"},"nodeType":"YulFunctionCall","src":"2065:43:181"},"nodeType":"YulExpressionStatement","src":"2065:43:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1840:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1851:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1859:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1867:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1878:4:181","type":""}],"src":"1730:384:181"},{"body":{"nodeType":"YulBlock","src":"2293:164:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2310:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2321:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2303:6:181"},"nodeType":"YulFunctionCall","src":"2303:21:181"},"nodeType":"YulExpressionStatement","src":"2303:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2344:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2355:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2340:3:181"},"nodeType":"YulFunctionCall","src":"2340:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2360:2:181","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2333:6:181"},"nodeType":"YulFunctionCall","src":"2333:30:181"},"nodeType":"YulExpressionStatement","src":"2333:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2383:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2394:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2379:3:181"},"nodeType":"YulFunctionCall","src":"2379:18:181"},{"hexValue":"216d6972726f72436861696e4964","kind":"string","nodeType":"YulLiteral","src":"2399:16:181","type":"","value":"!mirrorChainId"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2372:6:181"},"nodeType":"YulFunctionCall","src":"2372:44:181"},"nodeType":"YulExpressionStatement","src":"2372:44:181"},{"nodeType":"YulAssignment","src":"2425:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2437:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2448:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2433:3:181"},"nodeType":"YulFunctionCall","src":"2433:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2425:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_620aa21aff383647ce0e5ebd652fee0a2b799ab25acda9de7376f45202465bab__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2270:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2284:4:181","type":""}],"src":"2119:338:181"},{"body":{"nodeType":"YulBlock","src":"2543:127:181","statements":[{"body":{"nodeType":"YulBlock","src":"2589:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2598:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2601:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2591:6:181"},"nodeType":"YulFunctionCall","src":"2591:12:181"},"nodeType":"YulExpressionStatement","src":"2591:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2564:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2573:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2560:3:181"},"nodeType":"YulFunctionCall","src":"2560:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2585:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2556:3:181"},"nodeType":"YulFunctionCall","src":"2556:32:181"},"nodeType":"YulIf","src":"2553:52:181"},{"nodeType":"YulAssignment","src":"2614:50:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2654:9:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"2624:29:181"},"nodeType":"YulFunctionCall","src":"2624:40:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2614:6:181"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2509:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2520:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2532:6:181","type":""}],"src":"2462:208:181"},{"body":{"nodeType":"YulBlock","src":"2849:158:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2866:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2877:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2859:6:181"},"nodeType":"YulFunctionCall","src":"2859:21:181"},"nodeType":"YulExpressionStatement","src":"2859:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2900:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2911:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2896:3:181"},"nodeType":"YulFunctionCall","src":"2896:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2916:1:181","type":"","value":"9"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2889:6:181"},"nodeType":"YulFunctionCall","src":"2889:29:181"},"nodeType":"YulExpressionStatement","src":"2889:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2938:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2949:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2934:3:181"},"nodeType":"YulFunctionCall","src":"2934:18:181"},{"hexValue":"216578656375746f72","kind":"string","nodeType":"YulLiteral","src":"2954:11:181","type":"","value":"!executor"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2927:6:181"},"nodeType":"YulFunctionCall","src":"2927:39:181"},"nodeType":"YulExpressionStatement","src":"2927:39:181"},{"nodeType":"YulAssignment","src":"2975:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2987:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2998:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2983:3:181"},"nodeType":"YulFunctionCall","src":"2983:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2975:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_78201d9d8a76cb57609402a557d055ee4f4bd3859f343728f9681a9fe9675816__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2826:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2840:4:181","type":""}],"src":"2675:332:181"},{"body":{"nodeType":"YulBlock","src":"3141:175:181","statements":[{"nodeType":"YulAssignment","src":"3151:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3163:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3174:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3159:3:181"},"nodeType":"YulFunctionCall","src":"3159:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3151:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"3186:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3204:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3209:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3200:3:181"},"nodeType":"YulFunctionCall","src":"3200:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3213:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3196:3:181"},"nodeType":"YulFunctionCall","src":"3196:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3190:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3231:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3246:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3254:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3242:3:181"},"nodeType":"YulFunctionCall","src":"3242:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3224:6:181"},"nodeType":"YulFunctionCall","src":"3224:34:181"},"nodeType":"YulExpressionStatement","src":"3224:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3278:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3289:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3274:3:181"},"nodeType":"YulFunctionCall","src":"3274:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3298:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3306:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3294:3:181"},"nodeType":"YulFunctionCall","src":"3294:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3267:6:181"},"nodeType":"YulFunctionCall","src":"3267:43:181"},"nodeType":"YulExpressionStatement","src":"3267:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3102:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3113:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3121:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3132:4:181","type":""}],"src":"3012:304:181"},{"body":{"nodeType":"YulBlock","src":"3450:119:181","statements":[{"nodeType":"YulAssignment","src":"3460:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3472:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3483:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3468:3:181"},"nodeType":"YulFunctionCall","src":"3468:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3460:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3502:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"3513:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3495:6:181"},"nodeType":"YulFunctionCall","src":"3495:25:181"},"nodeType":"YulExpressionStatement","src":"3495:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3540:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3551:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3536:3:181"},"nodeType":"YulFunctionCall","src":"3536:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"3556:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3529:6:181"},"nodeType":"YulFunctionCall","src":"3529:34:181"},"nodeType":"YulExpressionStatement","src":"3529:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3411:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3422:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3430:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3441:4:181","type":""}],"src":"3321:248:181"}]},"contents":"{\n    { }\n    function abi_decode_uint32_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := abi_decode_uint32_fromMemory(headStart)\n        value1 := abi_decode_uint32_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n        value4 := abi_decode_address_fromMemory(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n        value6 := mload(add(headStart, 192))\n    }\n    function abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"empty domain\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"empty rootManager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_620aa21aff383647ce0e5ebd652fee0a2b799ab25acda9de7376f45202465bab__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"!mirrorChainId\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_78201d9d8a76cb57609402a557d055ee4f4bd3859f343728f9681a9fe9675816__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 9)\n        mstore(add(headStart, 64), \"!executor\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"6101406040523480156200001257600080fd5b5060405162001686380380620016868339810160408190526200003591620003d7565b848282808a8a858a8a84848484846200004e3362000296565b8463ffffffff16600003620000995760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620000e55760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b604482015260640162000090565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e0528116156200011d576200011d81620002fb565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a35050505050505050505062000190816200036460201b60201c565b5081600003620001d45760405162461bcd60e51b815260206004820152600e60248201526d085b5a5c9c9bdc90da185a5b925960921b604482015260640162000090565b826001600160a01b031663c34c08e56040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000213573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023991906200045a565b6001600160a01b0316610100819052620002825760405162461bcd60e51b815260206004820152600960248201526810b2bc32b1baba37b960b91b604482015260640162000090565b5061012052506200047f9650505050505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b60045460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1600455565b805163ffffffff81168114620003ba57600080fd5b919050565b80516001600160a01b0381168114620003ba57600080fd5b600080600080600080600060e0888a031215620003f357600080fd5b620003fe88620003a5565b96506200040e60208901620003a5565b95506200041e60408901620003bf565b94506200042e60608901620003bf565b93506200043e60808901620003bf565b925060a0880151915060c0880151905092959891949750929550565b6000602082840312156200046d57600080fd5b6200047882620003bf565b9392505050565b60805160a05160c05160e05161010051610120516111786200050e60003960008181610b4b01528181610c3e0152610db1015260008181610cb00152610d0e015260008181610136015261089301526000818161022c015281816103fa015261086c0152600081816103ad015281816104af015281816107a30152610a7e015260006101d801526111786000f3fe6080604052600436106101185760003560e01c80637850b020116100a0578063cc39428311610064578063cc39428314610332578063d1851c9214610352578063d232c22014610370578063d69f9d611461039b578063db1b7659146103cf57600080fd5b80637850b020146102915780638da5cb5b146102b15780639abaf479146102cf578063b1f8100d146102fd578063c5b350df1461031d57600080fd5b806352a9674b116100e757806352a9674b146101c65780635bd11efc146101fa5780635f61e3ec1461021a5780636a42b8f814610266578063715018a61461027c57600080fd5b806314168416146101245780633cf52ffb1461017257806348e6fa23146101915780634ff746f6146101a657600080fd5b3661011f57005b600080fd5b34801561013057600080fd5b506101587f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b34801561017e57600080fd5b506002545b604051908152602001610169565b6101a461019f366004610e95565b6103ef565b005b3480156101b257600080fd5b506101a46101c1366004610ef9565b6104a4565b3480156101d257600080fd5b506101587f000000000000000000000000000000000000000000000000000000000000000081565b34801561020657600080fd5b506101a4610215366004610f4b565b61054a565b34801561022657600080fd5b5061024e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610169565b34801561027257600080fd5b5062093a80610183565b34801561028857600080fd5b506101a4610581565b34801561029d57600080fd5b506101a46102ac366004610f6f565b610635565b3480156102bd57600080fd5b506000546001600160a01b031661024e565b3480156102db57600080fd5b506102ef6102ea366004610ef9565b610669565b604051610169929190610fce565b34801561030957600080fd5b506101a4610318366004610f4b565b61067b565b34801561032957600080fd5b506101a4610719565b34801561033e57600080fd5b5060035461024e906001600160a01b031681565b34801561035e57600080fd5b506001546001600160a01b031661024e565b34801561037c57600080fd5b506000546001600160a01b0316155b6040519015158152602001610169565b3480156103a757600080fd5b5061024e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103db57600080fd5b5061038b6103ea366004610f4b565b610789565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461045b5760405162461bcd60e51b815260206004820152600c60248201526b10b937b7ba26b0b730b3b2b960a11b60448201526064015b60405180910390fd5b610465828261079a565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507782823360405161049893929190610fe9565b60405180910390a15050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105055760405162461bcd60e51b81526004016104529060208082526004908201526310a0a6a160e11b604082015260600190565b61050e816107d7565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced813360405161053f929190611027565b60405180910390a150565b6000546001600160a01b03163314610575576040516311a8a1bb60e31b815260040160405180910390fd5b61057e8161091a565b50565b6000546001600160a01b031633146105ac576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426105be9190611067565b116105dc576040516324e0285f60e21b815260040160405180910390fd5b6002546000036105ff57604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b031615610629576040516323295ef960e01b815260040160405180910390fd5b6106336000610983565b565b6000546001600160a01b03163314610660576040516311a8a1bb60e31b815260040160405180910390fd5b61057e816109e8565b60006060610676836107d7565b915091565b6000546001600160a01b031633146106a6576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b0382811691161480156106c4575060025415155b156106e2576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361071057604051634a2fb73f60e11b815260040160405180910390fd5b61057e81610a29565b6001546001600160a01b03163314610744576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426107569190611067565b11610774576040516324e0285f60e21b815260040160405180910390fd5b600154610633906001600160a01b0316610983565b600061079482610a77565b92915050565b6003546107d3907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03168484610aa3565b5050565b6003546107ec906001600160a01b0316610a77565b6108275760405162461bcd60e51b815260206004820152600c60248201526b10b61921b7b73732b1ba37b960a11b6044820152606401610452565b80516020146108625760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610452565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016638e7d93fa7f00000000000000000000000000000000000000000000000000000000000000006108bb8461107a565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526024820152604401600060405180830381600087803b1580156108ff57600080fd5b505af1158015610913573d6000803e3d6000fd5b5050505050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60045460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1600455565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b60006107947f000000000000000000000000000000000000000000000000000000000000000083610ca3565b8151602014610ae35760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610452565b805115610b215760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610452565b6000610b2c34610ddc565b6040516366c96b3760e01b8152606060048201526000606482018190527f00000000000000000000000000000000000000000000000000000000000000006024830152602060448301529192506001600160a01b038716906366c96b3790608401602060405180830381865afa158015610baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bce91906110a1565b9050610bdb8260016110ba565b8110610c115760405162461bcd60e51b8152602060048201526005602482015264216665657360d81b6044820152606401610452565b60405163bd45c4e760e01b81526001600160a01b0387169063bd45c4e7908490610c6990899089906000907f0000000000000000000000000000000000000000000000000000000000000000906002906004016110cd565b6000604051808303818588803b158015610c8257600080fd5b505af1158015610c96573d6000803e3d6000fd5b5050505050505050505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d095760405162461bcd60e51b815260206004820152600960248201526810b2bc32b1baba37b960b91b6044820152606401610452565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e919061110b565b5091509150836001600160a01b0316826001600160a01b0316148015610dd357507f000000000000000000000000000000000000000000000000000000000000000081145b95945050505050565b6000600454821115610dee5760045491505b5090565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610e1957600080fd5b813567ffffffffffffffff80821115610e3457610e34610df2565b604051601f8301601f19908116603f01168101908282118183101715610e5c57610e5c610df2565b81604052838152866020858801011115610e7557600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610ea857600080fd5b823567ffffffffffffffff80821115610ec057600080fd5b610ecc86838701610e08565b93506020850135915080821115610ee257600080fd5b50610eef85828601610e08565b9150509250929050565b600060208284031215610f0b57600080fd5b813567ffffffffffffffff811115610f2257600080fd5b610f2e84828501610e08565b949350505050565b6001600160a01b038116811461057e57600080fd5b600060208284031215610f5d57600080fd5b8135610f6881610f36565b9392505050565b600060208284031215610f8157600080fd5b5035919050565b6000815180845260005b81811015610fae57602081850181015186830182015201610f92565b506000602082860101526020601f19601f83011685010191505092915050565b8215158152604060208201526000610f2e6040830184610f88565b606081526000610ffc6060830186610f88565b828103602084015261100e8186610f88565b91505060018060a01b0383166040830152949350505050565b60408152600061103a6040830185610f88565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561079457610794611051565b8051602080830151919081101561109b576000198160200360031b1b821691505b50919050565b6000602082840312156110b357600080fd5b5051919050565b8082018082111561079457610794611051565b600060018060a01b03808816835260a060208401526110ef60a0840188610f88565b9516604083015250606081019290925260809091015292915050565b60008060006060848603121561112057600080fd5b835161112b81610f36565b60208501516040909501519096949550939250505056fea264697066735822122031cfc3cb5a032f137de2cab84c416d16e895165d8b4efd56769ea027c640a62864736f6c63430008110033","opcodes":"PUSH2 0x140 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1686 CODESIZE SUB DUP1 PUSH3 0x1686 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x3D7 JUMP JUMPDEST DUP5 DUP3 DUP3 DUP1 DUP11 DUP11 DUP6 DUP11 DUP11 DUP5 DUP5 DUP5 DUP5 DUP5 PUSH3 0x4E CALLER PUSH3 0x296 JUMP JUMPDEST DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0x0 SUB PUSH3 0x99 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x32B6B83A3C903237B6B0B4B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xE5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x32B6B83A3C903937B7BA26B0B730B3B2B9 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x90 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0xA0 MSTORE DUP4 DUP2 AND PUSH1 0xC0 MSTORE SWAP1 DUP6 AND PUSH1 0xE0 MSTORE DUP2 AND ISZERO PUSH3 0x11D JUMPI PUSH3 0x11D DUP2 PUSH3 0x2FB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH4 0xFFFFFFFF DUP7 DUP2 AND SWAP3 SWAP1 DUP9 AND SWAP2 PUSH32 0x4F9C27C2FE3F84576EA469D367D044DA53C45E951617E8389F2B5ED8DB9D25F0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP PUSH3 0x190 DUP2 PUSH3 0x364 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP DUP2 PUSH1 0x0 SUB PUSH3 0x1D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x85B5A5C9C9BDC90DA185A5B9259 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x90 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC34C08E5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x213 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x239 SWAP2 SWAP1 PUSH3 0x45A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x100 DUP2 SWAP1 MSTORE PUSH3 0x282 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x10B2BC32B1BABA37B9 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x90 JUMP JUMPDEST POP PUSH2 0x120 MSTORE POP PUSH3 0x47F SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 SSTORE JUMP JUMPDEST DUP1 MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH3 0x3BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x3BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH3 0x3F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x3FE DUP9 PUSH3 0x3A5 JUMP JUMPDEST SWAP7 POP PUSH3 0x40E PUSH1 0x20 DUP10 ADD PUSH3 0x3A5 JUMP JUMPDEST SWAP6 POP PUSH3 0x41E PUSH1 0x40 DUP10 ADD PUSH3 0x3BF JUMP JUMPDEST SWAP5 POP PUSH3 0x42E PUSH1 0x60 DUP10 ADD PUSH3 0x3BF JUMP JUMPDEST SWAP4 POP PUSH3 0x43E PUSH1 0x80 DUP10 ADD PUSH3 0x3BF JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD MLOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD MLOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x46D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x478 DUP3 PUSH3 0x3BF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH2 0x1178 PUSH3 0x50E PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0xB4B ADD MSTORE DUP2 DUP2 PUSH2 0xC3E ADD MSTORE PUSH2 0xDB1 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0xCB0 ADD MSTORE PUSH2 0xD0E ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x136 ADD MSTORE PUSH2 0x893 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x22C ADD MSTORE DUP2 DUP2 PUSH2 0x3FA ADD MSTORE PUSH2 0x86C ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x3AD ADD MSTORE DUP2 DUP2 PUSH2 0x4AF ADD MSTORE DUP2 DUP2 PUSH2 0x7A3 ADD MSTORE PUSH2 0xA7E ADD MSTORE PUSH1 0x0 PUSH2 0x1D8 ADD MSTORE PUSH2 0x1178 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x118 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7850B020 GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xCC394283 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x332 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x352 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x370 JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x39B JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x3CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7850B020 EQ PUSH2 0x291 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2B1 JUMPI DUP1 PUSH4 0x9ABAF479 EQ PUSH2 0x2CF JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x2FD JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x31D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0x52A9674B EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x1FA JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x266 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x27C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x124 JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x172 JUMPI DUP1 PUSH4 0x48E6FA23 EQ PUSH2 0x191 JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x11F JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x130 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x158 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x17E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x169 JUMP JUMPDEST PUSH2 0x1A4 PUSH2 0x19F CALLDATASIZE PUSH1 0x4 PUSH2 0xE95 JUMP JUMPDEST PUSH2 0x3EF JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A4 PUSH2 0x1C1 CALLDATASIZE PUSH1 0x4 PUSH2 0xEF9 JUMP JUMPDEST PUSH2 0x4A4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x158 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A4 PUSH2 0x215 CALLDATASIZE PUSH1 0x4 PUSH2 0xF4B JUMP JUMPDEST PUSH2 0x54A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24E PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x169 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x272 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x183 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x288 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A4 PUSH2 0x581 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A4 PUSH2 0x2AC CALLDATASIZE PUSH1 0x4 PUSH2 0xF6F JUMP JUMPDEST PUSH2 0x635 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x24E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EF PUSH2 0x2EA CALLDATASIZE PUSH1 0x4 PUSH2 0xEF9 JUMP JUMPDEST PUSH2 0x669 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x169 SWAP3 SWAP2 SWAP1 PUSH2 0xFCE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x309 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A4 PUSH2 0x318 CALLDATASIZE PUSH1 0x4 PUSH2 0xF4B JUMP JUMPDEST PUSH2 0x67B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x329 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A4 PUSH2 0x719 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x24E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x24E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x169 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24E PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x38B PUSH2 0x3EA CALLDATASIZE PUSH1 0x4 PUSH2 0xF4B JUMP JUMPDEST PUSH2 0x789 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x45B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B937B7BA26B0B730B3B2B9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x465 DUP3 DUP3 PUSH2 0x79A JUMP JUMPDEST PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 DUP3 DUP3 CALLER PUSH1 0x40 MLOAD PUSH2 0x498 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xFE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x505 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x452 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0x50E DUP2 PUSH2 0x7D7 JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0x53F SWAP3 SWAP2 SWAP1 PUSH2 0x1027 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x575 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x57E DUP2 PUSH2 0x91A JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5AC JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x5BE SWAP2 SWAP1 PUSH2 0x1067 JUMP JUMPDEST GT PUSH2 0x5DC JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x5FF JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x629 JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x633 PUSH1 0x0 PUSH2 0x983 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x660 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x57E DUP2 PUSH2 0x9E8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x676 DUP4 PUSH2 0x7D7 JUMP JUMPDEST SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x6A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x6C4 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x6E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x710 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x57E DUP2 PUSH2 0xA29 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x744 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x756 SWAP2 SWAP1 PUSH2 0x1067 JUMP JUMPDEST GT PUSH2 0x774 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x633 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x983 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x794 DUP3 PUSH2 0xA77 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x7D3 SWAP1 PUSH32 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 DUP5 PUSH2 0xAA3 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x7EC SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA77 JUMP JUMPDEST PUSH2 0x827 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B61921B7B73732B1BA37B9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x452 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0x862 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x452 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH4 0x8E7D93FA PUSH32 0x0 PUSH2 0x8BB DUP5 PUSH2 0x107A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x913 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x794 PUSH32 0x0 DUP4 PUSH2 0xCA3 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0xAE3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x452 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xB21 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x452 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB2C CALLVALUE PUSH2 0xDDC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x66C96B37 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x60 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP3 ADD DUP2 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x20 PUSH1 0x44 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0x66C96B37 SWAP1 PUSH1 0x84 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBAA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBCE SWAP2 SWAP1 PUSH2 0x10A1 JUMP JUMPDEST SWAP1 POP PUSH2 0xBDB DUP3 PUSH1 0x1 PUSH2 0x10BA JUMP JUMPDEST DUP2 LT PUSH2 0xC11 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x5 PUSH1 0x24 DUP3 ADD MSTORE PUSH5 0x2166656573 PUSH1 0xD8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x452 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xBD45C4E7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0xBD45C4E7 SWAP1 DUP5 SWAP1 PUSH2 0xC69 SWAP1 DUP10 SWAP1 DUP10 SWAP1 PUSH1 0x0 SWAP1 PUSH32 0x0 SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x4 ADD PUSH2 0x10CD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC96 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xD09 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x10B2BC32B1BABA37B9 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x452 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0496D6A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD6A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD8E SWAP2 SWAP1 PUSH2 0x110B JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0xDD3 JUMPI POP PUSH32 0x0 DUP2 EQ JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 SLOAD DUP3 GT ISZERO PUSH2 0xDEE JUMPI PUSH1 0x4 SLOAD SWAP2 POP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xE19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xE34 JUMPI PUSH2 0xE34 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xE5C JUMPI PUSH2 0xE5C PUSH2 0xDF2 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0xE75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xEC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xECC DUP7 DUP4 DUP8 ADD PUSH2 0xE08 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xEE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xEEF DUP6 DUP3 DUP7 ADD PUSH2 0xE08 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF2E DUP5 DUP3 DUP6 ADD PUSH2 0xE08 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x57E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xF68 DUP2 PUSH2 0xF36 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xFAE JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0xF92 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xF2E PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0xF88 JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0xFFC PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0xF88 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x100E DUP2 DUP7 PUSH2 0xF88 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x103A PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0xF88 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x794 JUMPI PUSH2 0x794 PUSH2 0x1051 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x109B JUMPI PUSH1 0x0 NOT DUP2 PUSH1 0x20 SUB PUSH1 0x3 SHL SHL DUP3 AND SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x10B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x794 JUMPI PUSH2 0x794 PUSH2 0x1051 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND DUP4 MSTORE PUSH1 0xA0 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x10EF PUSH1 0xA0 DUP5 ADD DUP9 PUSH2 0xF88 JUMP JUMPDEST SWAP6 AND PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH2 0x112B DUP2 PUSH2 0xF36 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x40 SWAP1 SWAP6 ADD MLOAD SWAP1 SWAP7 SWAP5 SWAP6 POP SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BALANCE 0xCF 0xC3 0xCB GAS SUB 0x2F SGT PUSH30 0xE2CAB84C416D16E895165D8B4EFD56769EA027C640A62864736F6C634300 ADDMOD GT STOP CALLER ","sourceMap":"252:1236:128:-:0;;;363:318;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;646:4;652:14;668:7;;565;574:13;646:4;595:12;609:16;565:7;574:13;646:4;595:12;609:16;3038:21:116::1;3048:10;3038:9;:21::i;:::-;3105:7;:12;;3116:1;3105:12:::0;3097:37:::1;;;::::0;-1:-1:-1;;;3097:37:116;;1245:2:181;3097:37:116::1;::::0;::::1;1227:21:181::0;1284:2;1264:18;;;1257:30;-1:-1:-1;;;1303:18:181;;;1296:42;1355:18;;3097:37:116::1;;;;;;;;;-1:-1:-1::0;;;;;3148:26:116;::::1;3140:56;;;::::0;-1:-1:-1;;;3140:56:116;;1586:2:181;3140:56:116::1;::::0;::::1;1568:21:181::0;1625:2;1605:18;;;1598:30;-1:-1:-1;;;1644:18:181;;;1637:47;1701:18;;3140:56:116::1;1384:341:181::0;3140:56:116::1;3308:16;::::0;;::::1;;::::0;-1:-1:-1;;;;;3330:10:116;;::::1;;::::0;3346:27;;::::1;;::::0;3379:29;;::::1;;::::0;3449:30;::::1;::::0;3445:88:::1;;3489:37;3509:16:::0;3489:19:::1;:37::i;:::-;3544:74;::::0;;-1:-1:-1;;;;;1988:15:181;;;1970:34;;2040:15;;;2035:2;2020:18;;2013:43;2092:15;;2072:18;;;2065:43;3544:74:116;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;1920:2:181;3544:74:116;;::::1;2857:766:::0;;;;;1209:210:119;;;;;791:19:118;802:7;791:10;;;:19;;:::i;:::-;756:59;639:14:127::1;657:1;639:19:::0;631:46:::1;;;::::0;-1:-1:-1;;;631:46:127;;2321:2:181;631:46:127::1;::::0;::::1;2303:21:181::0;2360:2;2340:18;;;2333:30;-1:-1:-1;;;2379:18:181;;;2372:44;2433:18;;631:46:127::1;2119:338:181::0;631:46:127::1;739:4;-1:-1:-1::0;;;;;728:25:127::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;717:38:127::1;;::::0;;;761:44:::1;;;::::0;-1:-1:-1;;;761:44:127;;2877:2:181;761:44:127::1;::::0;::::1;2859:21:181::0;2916:1;2896:18;;;2889:29;-1:-1:-1;;;2934:18:181;;;2927:39;2983:18;;761:44:127::1;2675:332:181::0;761:44:127::1;-1:-1:-1::0;811:32:127::1;::::0;-1:-1:-1;252:1236:128;;-1:-1:-1;;;;;;;252:1236:128;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;5838::116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;3224:34:181;;3294:15;;;3289:2;3274:18;;3267:43;5921:57:116;;3159:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;1089:114:118:-;1160:6;;1146:30;;;3495:25:181;;;3551:2;3536:18;;3529:34;;;1146:30:118;;3468:18:181;1146:30:118;;;;;;;1182:6;:16;1089:114::o;14:167:181:-;92:13;;145:10;134:22;;124:33;;114:61;;171:1;168;161:12;114:61;14:167;;;:::o;186:177::-;265:13;;-1:-1:-1;;;;;307:31:181;;297:42;;287:70;;353:1;350;343:12;368:670;490:6;498;506;514;522;530;538;591:3;579:9;570:7;566:23;562:33;559:53;;;608:1;605;598:12;559:53;631:39;660:9;631:39;:::i;:::-;621:49;;689:48;733:2;722:9;718:18;689:48;:::i;:::-;679:58;;756:49;801:2;790:9;786:18;756:49;:::i;:::-;746:59;;824:49;869:2;858:9;854:18;824:49;:::i;:::-;814:59;;892:50;937:3;926:9;922:19;892:50;:::i;:::-;882:60;;982:3;971:9;967:19;961:26;951:36;;1027:3;1016:9;1012:19;1006:26;996:36;;368:670;;;;;;;;;;:::o;2462:208::-;2532:6;2585:2;2573:9;2564:7;2560:23;2556:32;2553:52;;;2601:1;2598;2591:12;2553:52;2624:40;2654:9;2624:40;:::i;:::-;2614:50;2462:208;-1:-1:-1;;;2462:208:181:o;3321:248::-;252:1236:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@AMB_39042":{"entryPoint":null,"id":39042,"parameterSlots":0,"returnSlots":0},"@DOMAIN_39039":{"entryPoint":null,"id":39039,"parameterSlots":0,"returnSlots":0},"@MIRROR_DOMAIN_39048":{"entryPoint":null,"id":39048,"parameterSlots":0,"returnSlots":0},"@ROOT_MANAGER_39045":{"entryPoint":null,"id":39045,"parameterSlots":0,"returnSlots":0},"@_39157":{"entryPoint":null,"id":39157,"parameterSlots":0,"returnSlots":0},"@_getGas_39366":{"entryPoint":3548,"id":39366,"parameterSlots":1,"returnSlots":1},"@_processMessage_42075":{"entryPoint":2007,"id":42075,"parameterSlots":1,"returnSlots":0},"@_sendMessage_41959":{"entryPoint":2723,"id":41959,"parameterSlots":4,"returnSlots":0},"@_sendMessage_42091":{"entryPoint":1946,"id":42091,"parameterSlots":2,"returnSlots":0},"@_setGasCap_39346":{"entryPoint":2536,"id":39346,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":2330,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":2435,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":2601,"id":49927,"parameterSlots":1,"returnSlots":0},"@_verifySender_41995":{"entryPoint":3235,"id":41995,"parameterSlots":2,"returnSlots":1},"@_verifySender_42105":{"entryPoint":2679,"id":42105,"parameterSlots":1,"returnSlots":1},"@acceptProposedOwner_49887":{"entryPoint":1817,"id":49887,"parameterSlots":0,"returnSlots":0},"@anyExecute_41881":{"entryPoint":1641,"id":41881,"parameterSlots":1,"returnSlots":2},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@mirrorConnector_39051":{"entryPoint":null,"id":39051,"parameterSlots":0,"returnSlots":0},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@processMessage_39189":{"entryPoint":1188,"id":39189,"parameterSlots":1,"returnSlots":0},"@proposeNewOwner_49841":{"entryPoint":1659,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_49874":{"entryPoint":1409,"id":49874,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@sendMessage_39419":{"entryPoint":1007,"id":39419,"parameterSlots":2,"returnSlots":0},"@setGasCap_39330":{"entryPoint":1589,"id":39330,"parameterSlots":1,"returnSlots":0},"@setMirrorConnector_39170":{"entryPoint":1354,"id":39170,"parameterSlots":1,"returnSlots":0},"@verifySender_39202":{"entryPoint":1929,"id":39202,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes":{"entryPoint":3592,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":3915,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_uint256t_uint256_fromMemory":{"entryPoint":4363,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_bytes_memory_ptr":{"entryPoint":3833,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr":{"entryPoint":3733,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":3951,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":4257,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes":{"entryPoint":3976,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_bytes_memory_ptr_t_address_t_uint256_t_rational_2_by_1__to_t_address_t_bytes_memory_ptr_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":4301,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool_t_bytes_memory_ptr__to_t_bool_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":4046,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":4135,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":4073,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_72c4e0ea3426978b633b2efe37087a856f506ae7eacb1b1e7c169974142d9a69__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_78201d9d8a76cb57609402a557d055ee4f4bd3859f343728f9681a9fe9675816__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_867777f634bb94108a594889ab4f827c256cf5677bbf34c222dbb2e03cd5a0d3__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_t_uint256_t_rational_32_by_1__to_t_string_memory_ptr_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":4282,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":4199,"id":null,"parameterSlots":2,"returnSlots":1},"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32":{"entryPoint":4218,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":4177,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":3570,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":3894,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:10085:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"113:93:181","statements":[{"nodeType":"YulAssignment","src":"123:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"135:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"146:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"131:3:181"},"nodeType":"YulFunctionCall","src":"131:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"123:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"165:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"180:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"188:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"176:3:181"},"nodeType":"YulFunctionCall","src":"176:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"158:6:181"},"nodeType":"YulFunctionCall","src":"158:42:181"},"nodeType":"YulExpressionStatement","src":"158:42:181"}]},"name":"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"82:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"93:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"104:4:181","type":""}],"src":"14:192:181"},{"body":{"nodeType":"YulBlock","src":"312:76:181","statements":[{"nodeType":"YulAssignment","src":"322:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"334:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"345:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"330:3:181"},"nodeType":"YulFunctionCall","src":"330:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"322:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"364:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"375:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"357:6:181"},"nodeType":"YulFunctionCall","src":"357:25:181"},"nodeType":"YulExpressionStatement","src":"357:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"281:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"292:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"303:4:181","type":""}],"src":"211:177:181"},{"body":{"nodeType":"YulBlock","src":"425:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"442:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"449:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"454:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"445:3:181"},"nodeType":"YulFunctionCall","src":"445:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"435:6:181"},"nodeType":"YulFunctionCall","src":"435:31:181"},"nodeType":"YulExpressionStatement","src":"435:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"482:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"485:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"475:6:181"},"nodeType":"YulFunctionCall","src":"475:15:181"},"nodeType":"YulExpressionStatement","src":"475:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"506:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"509:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"499:6:181"},"nodeType":"YulFunctionCall","src":"499:15:181"},"nodeType":"YulExpressionStatement","src":"499:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"393:127:181"},{"body":{"nodeType":"YulBlock","src":"577:666:181","statements":[{"body":{"nodeType":"YulBlock","src":"626:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"635:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"638:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"628:6:181"},"nodeType":"YulFunctionCall","src":"628:12:181"},"nodeType":"YulExpressionStatement","src":"628:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"605:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"613:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"601:3:181"},"nodeType":"YulFunctionCall","src":"601:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"620:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"597:3:181"},"nodeType":"YulFunctionCall","src":"597:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"590:6:181"},"nodeType":"YulFunctionCall","src":"590:35:181"},"nodeType":"YulIf","src":"587:55:181"},{"nodeType":"YulVariableDeclaration","src":"651:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"674:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"661:12:181"},"nodeType":"YulFunctionCall","src":"661:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"655:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"690:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"700:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"694:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"741:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"743:16:181"},"nodeType":"YulFunctionCall","src":"743:18:181"},"nodeType":"YulExpressionStatement","src":"743:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"733:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"737:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"730:2:181"},"nodeType":"YulFunctionCall","src":"730:10:181"},"nodeType":"YulIf","src":"727:36:181"},{"nodeType":"YulVariableDeclaration","src":"772:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"786:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"782:3:181"},"nodeType":"YulFunctionCall","src":"782:7:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"776:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"798:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"818:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"812:5:181"},"nodeType":"YulFunctionCall","src":"812:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"802:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"830:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"852:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"876:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"880:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"872:3:181"},"nodeType":"YulFunctionCall","src":"872:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"887:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"868:3:181"},"nodeType":"YulFunctionCall","src":"868:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"892:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"864:3:181"},"nodeType":"YulFunctionCall","src":"864:31:181"},{"name":"_3","nodeType":"YulIdentifier","src":"897:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"860:3:181"},"nodeType":"YulFunctionCall","src":"860:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"848:3:181"},"nodeType":"YulFunctionCall","src":"848:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"834:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"960:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"962:16:181"},"nodeType":"YulFunctionCall","src":"962:18:181"},"nodeType":"YulExpressionStatement","src":"962:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"919:10:181"},{"name":"_2","nodeType":"YulIdentifier","src":"931:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"916:2:181"},"nodeType":"YulFunctionCall","src":"916:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"939:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"951:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"936:2:181"},"nodeType":"YulFunctionCall","src":"936:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"913:2:181"},"nodeType":"YulFunctionCall","src":"913:46:181"},"nodeType":"YulIf","src":"910:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"998:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1002:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"991:6:181"},"nodeType":"YulFunctionCall","src":"991:22:181"},"nodeType":"YulExpressionStatement","src":"991:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1029:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1037:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1022:6:181"},"nodeType":"YulFunctionCall","src":"1022:18:181"},"nodeType":"YulExpressionStatement","src":"1022:18:181"},{"body":{"nodeType":"YulBlock","src":"1088:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1097:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1100:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1090:6:181"},"nodeType":"YulFunctionCall","src":"1090:12:181"},"nodeType":"YulExpressionStatement","src":"1090:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1063:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1071:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1059:3:181"},"nodeType":"YulFunctionCall","src":"1059:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1076:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1055:3:181"},"nodeType":"YulFunctionCall","src":"1055:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"1083:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1052:2:181"},"nodeType":"YulFunctionCall","src":"1052:35:181"},"nodeType":"YulIf","src":"1049:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1130:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1138:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1126:3:181"},"nodeType":"YulFunctionCall","src":"1126:17:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1149:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1157:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1145:3:181"},"nodeType":"YulFunctionCall","src":"1145:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1164:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1113:12:181"},"nodeType":"YulFunctionCall","src":"1113:54:181"},"nodeType":"YulExpressionStatement","src":"1113:54:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1191:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1199:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1187:3:181"},"nodeType":"YulFunctionCall","src":"1187:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1204:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1183:3:181"},"nodeType":"YulFunctionCall","src":"1183:26:181"},{"kind":"number","nodeType":"YulLiteral","src":"1211:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1176:6:181"},"nodeType":"YulFunctionCall","src":"1176:37:181"},"nodeType":"YulExpressionStatement","src":"1176:37:181"},{"nodeType":"YulAssignment","src":"1222:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1231:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1222:5:181"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"551:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"559:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"567:5:181","type":""}],"src":"525:718:181"},{"body":{"nodeType":"YulBlock","src":"1353:434:181","statements":[{"body":{"nodeType":"YulBlock","src":"1399:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1408:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1411:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1401:6:181"},"nodeType":"YulFunctionCall","src":"1401:12:181"},"nodeType":"YulExpressionStatement","src":"1401:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1374:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1383:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1370:3:181"},"nodeType":"YulFunctionCall","src":"1370:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1395:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1366:3:181"},"nodeType":"YulFunctionCall","src":"1366:32:181"},"nodeType":"YulIf","src":"1363:52:181"},{"nodeType":"YulVariableDeclaration","src":"1424:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1451:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1438:12:181"},"nodeType":"YulFunctionCall","src":"1438:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1428:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1470:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1480:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1474:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1525:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1534:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1537:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1527:6:181"},"nodeType":"YulFunctionCall","src":"1527:12:181"},"nodeType":"YulExpressionStatement","src":"1527:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1513:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1521:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1510:2:181"},"nodeType":"YulFunctionCall","src":"1510:14:181"},"nodeType":"YulIf","src":"1507:34:181"},{"nodeType":"YulAssignment","src":"1550:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1581:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1592:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1577:3:181"},"nodeType":"YulFunctionCall","src":"1577:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1601:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"1560:16:181"},"nodeType":"YulFunctionCall","src":"1560:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1550:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1618:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1651:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1662:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1647:3:181"},"nodeType":"YulFunctionCall","src":"1647:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1634:12:181"},"nodeType":"YulFunctionCall","src":"1634:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"1622:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1695:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1704:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1707:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1697:6:181"},"nodeType":"YulFunctionCall","src":"1697:12:181"},"nodeType":"YulExpressionStatement","src":"1697:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"1681:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1691:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1678:2:181"},"nodeType":"YulFunctionCall","src":"1678:16:181"},"nodeType":"YulIf","src":"1675:36:181"},{"nodeType":"YulAssignment","src":"1720:61:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1751:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"1762:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1747:3:181"},"nodeType":"YulFunctionCall","src":"1747:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1773:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"1730:16:181"},"nodeType":"YulFunctionCall","src":"1730:51:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1720:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1311:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1322:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1334:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1342:6:181","type":""}],"src":"1248:539:181"},{"body":{"nodeType":"YulBlock","src":"1871:241:181","statements":[{"body":{"nodeType":"YulBlock","src":"1917:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1926:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1929:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1919:6:181"},"nodeType":"YulFunctionCall","src":"1919:12:181"},"nodeType":"YulExpressionStatement","src":"1919:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1892:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1901:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1888:3:181"},"nodeType":"YulFunctionCall","src":"1888:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1913:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1884:3:181"},"nodeType":"YulFunctionCall","src":"1884:32:181"},"nodeType":"YulIf","src":"1881:52:181"},{"nodeType":"YulVariableDeclaration","src":"1942:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1969:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1956:12:181"},"nodeType":"YulFunctionCall","src":"1956:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1946:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2022:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2031:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2034:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2024:6:181"},"nodeType":"YulFunctionCall","src":"2024:12:181"},"nodeType":"YulExpressionStatement","src":"2024:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1994:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2002:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1991:2:181"},"nodeType":"YulFunctionCall","src":"1991:30:181"},"nodeType":"YulIf","src":"1988:50:181"},{"nodeType":"YulAssignment","src":"2047:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2078:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"2089:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2074:3:181"},"nodeType":"YulFunctionCall","src":"2074:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2098:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"2057:16:181"},"nodeType":"YulFunctionCall","src":"2057:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2047:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1837:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1848:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1860:6:181","type":""}],"src":"1792:320:181"},{"body":{"nodeType":"YulBlock","src":"2162:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"2226:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2235:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2238:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2228:6:181"},"nodeType":"YulFunctionCall","src":"2228:12:181"},"nodeType":"YulExpressionStatement","src":"2228:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2185:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2196:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2211:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2216:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2207:3:181"},"nodeType":"YulFunctionCall","src":"2207:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2220:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2203:3:181"},"nodeType":"YulFunctionCall","src":"2203:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2192:3:181"},"nodeType":"YulFunctionCall","src":"2192:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2182:2:181"},"nodeType":"YulFunctionCall","src":"2182:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2175:6:181"},"nodeType":"YulFunctionCall","src":"2175:50:181"},"nodeType":"YulIf","src":"2172:70:181"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"2151:5:181","type":""}],"src":"2117:131:181"},{"body":{"nodeType":"YulBlock","src":"2323:177:181","statements":[{"body":{"nodeType":"YulBlock","src":"2369:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2378:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2381:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2371:6:181"},"nodeType":"YulFunctionCall","src":"2371:12:181"},"nodeType":"YulExpressionStatement","src":"2371:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2344:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2353:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2340:3:181"},"nodeType":"YulFunctionCall","src":"2340:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2365:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2336:3:181"},"nodeType":"YulFunctionCall","src":"2336:32:181"},"nodeType":"YulIf","src":"2333:52:181"},{"nodeType":"YulVariableDeclaration","src":"2394:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2420:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2407:12:181"},"nodeType":"YulFunctionCall","src":"2407:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2398:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2464:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2439:24:181"},"nodeType":"YulFunctionCall","src":"2439:31:181"},"nodeType":"YulExpressionStatement","src":"2439:31:181"},{"nodeType":"YulAssignment","src":"2479:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"2489:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2479:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2289:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2300:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2312:6:181","type":""}],"src":"2253:247:181"},{"body":{"nodeType":"YulBlock","src":"2606:102:181","statements":[{"nodeType":"YulAssignment","src":"2616:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2628:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2639:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2624:3:181"},"nodeType":"YulFunctionCall","src":"2624:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2616:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2658:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2673:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2689:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2694:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2685:3:181"},"nodeType":"YulFunctionCall","src":"2685:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2698:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2681:3:181"},"nodeType":"YulFunctionCall","src":"2681:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2669:3:181"},"nodeType":"YulFunctionCall","src":"2669:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2651:6:181"},"nodeType":"YulFunctionCall","src":"2651:51:181"},"nodeType":"YulExpressionStatement","src":"2651:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2575:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2586:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2597:4:181","type":""}],"src":"2505:203:181"},{"body":{"nodeType":"YulBlock","src":"2783:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"2829:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2838:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2841:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2831:6:181"},"nodeType":"YulFunctionCall","src":"2831:12:181"},"nodeType":"YulExpressionStatement","src":"2831:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2804:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2813:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2800:3:181"},"nodeType":"YulFunctionCall","src":"2800:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2825:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2796:3:181"},"nodeType":"YulFunctionCall","src":"2796:32:181"},"nodeType":"YulIf","src":"2793:52:181"},{"nodeType":"YulAssignment","src":"2854:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2877:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2864:12:181"},"nodeType":"YulFunctionCall","src":"2864:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2854:6:181"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2749:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2760:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2772:6:181","type":""}],"src":"2713:180:181"},{"body":{"nodeType":"YulBlock","src":"2947:373:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2957:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2977:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2971:5:181"},"nodeType":"YulFunctionCall","src":"2971:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2961:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2999:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"3004:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2992:6:181"},"nodeType":"YulFunctionCall","src":"2992:19:181"},"nodeType":"YulExpressionStatement","src":"2992:19:181"},{"nodeType":"YulVariableDeclaration","src":"3020:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3029:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"3024:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3091:110:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3105:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3115:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3109:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3147:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"3152:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3143:3:181"},"nodeType":"YulFunctionCall","src":"3143:11:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3156:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3139:3:181"},"nodeType":"YulFunctionCall","src":"3139:20:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3175:5:181"},{"name":"i","nodeType":"YulIdentifier","src":"3182:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3171:3:181"},"nodeType":"YulFunctionCall","src":"3171:13:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3186:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3167:3:181"},"nodeType":"YulFunctionCall","src":"3167:22:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3161:5:181"},"nodeType":"YulFunctionCall","src":"3161:29:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3132:6:181"},"nodeType":"YulFunctionCall","src":"3132:59:181"},"nodeType":"YulExpressionStatement","src":"3132:59:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3050:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"3053:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3047:2:181"},"nodeType":"YulFunctionCall","src":"3047:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3061:21:181","statements":[{"nodeType":"YulAssignment","src":"3063:17:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3072:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"3075:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3068:3:181"},"nodeType":"YulFunctionCall","src":"3068:12:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"3063:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"3043:3:181","statements":[]},"src":"3039:162:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3225:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"3230:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3221:3:181"},"nodeType":"YulFunctionCall","src":"3221:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"3239:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3217:3:181"},"nodeType":"YulFunctionCall","src":"3217:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"3246:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3210:6:181"},"nodeType":"YulFunctionCall","src":"3210:38:181"},"nodeType":"YulExpressionStatement","src":"3210:38:181"},{"nodeType":"YulAssignment","src":"3257:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3272:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3285:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3293:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3281:3:181"},"nodeType":"YulFunctionCall","src":"3281:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3302:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3298:3:181"},"nodeType":"YulFunctionCall","src":"3298:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3277:3:181"},"nodeType":"YulFunctionCall","src":"3277:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3268:3:181"},"nodeType":"YulFunctionCall","src":"3268:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"3309:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3264:3:181"},"nodeType":"YulFunctionCall","src":"3264:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"3257:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"2924:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"2931:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"2939:3:181","type":""}],"src":"2898:422:181"},{"body":{"nodeType":"YulBlock","src":"3466:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3483:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3508:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3501:6:181"},"nodeType":"YulFunctionCall","src":"3501:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3494:6:181"},"nodeType":"YulFunctionCall","src":"3494:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3476:6:181"},"nodeType":"YulFunctionCall","src":"3476:41:181"},"nodeType":"YulExpressionStatement","src":"3476:41:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3537:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3548:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3533:3:181"},"nodeType":"YulFunctionCall","src":"3533:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3553:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3526:6:181"},"nodeType":"YulFunctionCall","src":"3526:30:181"},"nodeType":"YulExpressionStatement","src":"3526:30:181"},{"nodeType":"YulAssignment","src":"3565:52:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3590:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3602:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3613:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3598:3:181"},"nodeType":"YulFunctionCall","src":"3598:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"3573:16:181"},"nodeType":"YulFunctionCall","src":"3573:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3565:4:181"}]}]},"name":"abi_encode_tuple_t_bool_t_bytes_memory_ptr__to_t_bool_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3427:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3438:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3446:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3457:4:181","type":""}],"src":"3325:298:181"},{"body":{"nodeType":"YulBlock","src":"3723:92:181","statements":[{"nodeType":"YulAssignment","src":"3733:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3745:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3756:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3741:3:181"},"nodeType":"YulFunctionCall","src":"3741:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3733:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3775:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3800:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3793:6:181"},"nodeType":"YulFunctionCall","src":"3793:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3786:6:181"},"nodeType":"YulFunctionCall","src":"3786:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3768:6:181"},"nodeType":"YulFunctionCall","src":"3768:41:181"},"nodeType":"YulExpressionStatement","src":"3768:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3692:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3703:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3714:4:181","type":""}],"src":"3628:187:181"},{"body":{"nodeType":"YulBlock","src":"3994:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4011:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4022:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4004:6:181"},"nodeType":"YulFunctionCall","src":"4004:21:181"},"nodeType":"YulExpressionStatement","src":"4004:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4045:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4056:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4041:3:181"},"nodeType":"YulFunctionCall","src":"4041:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4061:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4034:6:181"},"nodeType":"YulFunctionCall","src":"4034:30:181"},"nodeType":"YulExpressionStatement","src":"4034:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4084:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4095:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4080:3:181"},"nodeType":"YulFunctionCall","src":"4080:18:181"},{"hexValue":"21726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"4100:14:181","type":"","value":"!rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4073:6:181"},"nodeType":"YulFunctionCall","src":"4073:42:181"},"nodeType":"YulExpressionStatement","src":"4073:42:181"},{"nodeType":"YulAssignment","src":"4124:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4136:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4147:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4132:3:181"},"nodeType":"YulFunctionCall","src":"4132:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4124:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3971:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3985:4:181","type":""}],"src":"3820:336:181"},{"body":{"nodeType":"YulBlock","src":"4354:281:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4371:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4382:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4364:6:181"},"nodeType":"YulFunctionCall","src":"4364:21:181"},"nodeType":"YulExpressionStatement","src":"4364:21:181"},{"nodeType":"YulVariableDeclaration","src":"4394:58:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4425:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4437:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4448:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4433:3:181"},"nodeType":"YulFunctionCall","src":"4433:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"4408:16:181"},"nodeType":"YulFunctionCall","src":"4408:44:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"4398:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4472:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4483:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4468:3:181"},"nodeType":"YulFunctionCall","src":"4468:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"4492:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"4500:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4488:3:181"},"nodeType":"YulFunctionCall","src":"4488:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4461:6:181"},"nodeType":"YulFunctionCall","src":"4461:50:181"},"nodeType":"YulExpressionStatement","src":"4461:50:181"},{"nodeType":"YulAssignment","src":"4520:40:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"4545:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"4553:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"4528:16:181"},"nodeType":"YulFunctionCall","src":"4528:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4520:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4580:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4591:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4576:3:181"},"nodeType":"YulFunctionCall","src":"4576:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"4600:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4616:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4621:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4612:3:181"},"nodeType":"YulFunctionCall","src":"4612:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4625:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4608:3:181"},"nodeType":"YulFunctionCall","src":"4608:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4596:3:181"},"nodeType":"YulFunctionCall","src":"4596:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4569:6:181"},"nodeType":"YulFunctionCall","src":"4569:60:181"},"nodeType":"YulExpressionStatement","src":"4569:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4307:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4318:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4326:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4334:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4345:4:181","type":""}],"src":"4161:474:181"},{"body":{"nodeType":"YulBlock","src":"4814:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4831:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4842:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4824:6:181"},"nodeType":"YulFunctionCall","src":"4824:21:181"},"nodeType":"YulExpressionStatement","src":"4824:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4865:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4876:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4861:3:181"},"nodeType":"YulFunctionCall","src":"4861:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4881:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4854:6:181"},"nodeType":"YulFunctionCall","src":"4854:29:181"},"nodeType":"YulExpressionStatement","src":"4854:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4903:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4914:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4899:3:181"},"nodeType":"YulFunctionCall","src":"4899:18:181"},{"hexValue":"21414d42","kind":"string","nodeType":"YulLiteral","src":"4919:6:181","type":"","value":"!AMB"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4892:6:181"},"nodeType":"YulFunctionCall","src":"4892:34:181"},"nodeType":"YulExpressionStatement","src":"4892:34:181"},{"nodeType":"YulAssignment","src":"4935:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4947:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4958:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4943:3:181"},"nodeType":"YulFunctionCall","src":"4943:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4935:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4791:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4805:4:181","type":""}],"src":"4640:327:181"},{"body":{"nodeType":"YulBlock","src":"5119:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5136:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5147:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5129:6:181"},"nodeType":"YulFunctionCall","src":"5129:21:181"},"nodeType":"YulExpressionStatement","src":"5129:21:181"},{"nodeType":"YulAssignment","src":"5159:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5184:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5196:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5207:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5192:3:181"},"nodeType":"YulFunctionCall","src":"5192:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"5167:16:181"},"nodeType":"YulFunctionCall","src":"5167:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5159:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5231:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5242:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5227:3:181"},"nodeType":"YulFunctionCall","src":"5227:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"5251:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5267:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5272:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5263:3:181"},"nodeType":"YulFunctionCall","src":"5263:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5276:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5259:3:181"},"nodeType":"YulFunctionCall","src":"5259:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5247:3:181"},"nodeType":"YulFunctionCall","src":"5247:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5220:6:181"},"nodeType":"YulFunctionCall","src":"5220:60:181"},"nodeType":"YulExpressionStatement","src":"5220:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5080:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5091:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5099:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5110:4:181","type":""}],"src":"4972:314:181"},{"body":{"nodeType":"YulBlock","src":"5323:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5340:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5347:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"5352:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5343:3:181"},"nodeType":"YulFunctionCall","src":"5343:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5333:6:181"},"nodeType":"YulFunctionCall","src":"5333:31:181"},"nodeType":"YulExpressionStatement","src":"5333:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5380:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5383:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5373:6:181"},"nodeType":"YulFunctionCall","src":"5373:15:181"},"nodeType":"YulExpressionStatement","src":"5373:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5404:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5407:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5397:6:181"},"nodeType":"YulFunctionCall","src":"5397:15:181"},"nodeType":"YulExpressionStatement","src":"5397:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"5291:127:181"},{"body":{"nodeType":"YulBlock","src":"5472:79:181","statements":[{"nodeType":"YulAssignment","src":"5482:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5494:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"5497:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5490:3:181"},"nodeType":"YulFunctionCall","src":"5490:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"5482:4:181"}]},{"body":{"nodeType":"YulBlock","src":"5523:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"5525:16:181"},"nodeType":"YulFunctionCall","src":"5525:18:181"},"nodeType":"YulExpressionStatement","src":"5525:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"5514:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"5520:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5511:2:181"},"nodeType":"YulFunctionCall","src":"5511:11:181"},"nodeType":"YulIf","src":"5508:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"5454:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"5457:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"5463:4:181","type":""}],"src":"5423:128:181"},{"body":{"nodeType":"YulBlock","src":"5730:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5747:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5758:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5740:6:181"},"nodeType":"YulFunctionCall","src":"5740:21:181"},"nodeType":"YulExpressionStatement","src":"5740:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5781:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5792:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5777:3:181"},"nodeType":"YulFunctionCall","src":"5777:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5797:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5770:6:181"},"nodeType":"YulFunctionCall","src":"5770:30:181"},"nodeType":"YulExpressionStatement","src":"5770:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5820:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5831:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5816:3:181"},"nodeType":"YulFunctionCall","src":"5816:18:181"},{"hexValue":"216c32436f6e6e6563746f72","kind":"string","nodeType":"YulLiteral","src":"5836:14:181","type":"","value":"!l2Connector"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5809:6:181"},"nodeType":"YulFunctionCall","src":"5809:42:181"},"nodeType":"YulExpressionStatement","src":"5809:42:181"},{"nodeType":"YulAssignment","src":"5860:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5872:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5883:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5868:3:181"},"nodeType":"YulFunctionCall","src":"5868:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5860:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_72c4e0ea3426978b633b2efe37087a856f506ae7eacb1b1e7c169974142d9a69__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5707:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5721:4:181","type":""}],"src":"5556:336:181"},{"body":{"nodeType":"YulBlock","src":"6071:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6088:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6099:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6081:6:181"},"nodeType":"YulFunctionCall","src":"6081:21:181"},"nodeType":"YulExpressionStatement","src":"6081:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6122:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6133:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6118:3:181"},"nodeType":"YulFunctionCall","src":"6118:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6138:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6111:6:181"},"nodeType":"YulFunctionCall","src":"6111:29:181"},"nodeType":"YulExpressionStatement","src":"6111:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6160:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6171:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6156:3:181"},"nodeType":"YulFunctionCall","src":"6156:18:181"},{"hexValue":"216c656e677468","kind":"string","nodeType":"YulLiteral","src":"6176:9:181","type":"","value":"!length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6149:6:181"},"nodeType":"YulFunctionCall","src":"6149:37:181"},"nodeType":"YulExpressionStatement","src":"6149:37:181"},{"nodeType":"YulAssignment","src":"6195:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6207:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6218:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6203:3:181"},"nodeType":"YulFunctionCall","src":"6203:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6195:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6048:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6062:4:181","type":""}],"src":"5897:330:181"},{"body":{"nodeType":"YulBlock","src":"6326:203:181","statements":[{"nodeType":"YulVariableDeclaration","src":"6336:26:181","value":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"6356:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6350:5:181"},"nodeType":"YulFunctionCall","src":"6350:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"6340:6:181","type":""}]},{"nodeType":"YulAssignment","src":"6371:32:181","value":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"6390:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"6397:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6386:3:181"},"nodeType":"YulFunctionCall","src":"6386:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6380:5:181"},"nodeType":"YulFunctionCall","src":"6380:23:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"6371:5:181"}]},{"body":{"nodeType":"YulBlock","src":"6440:83:181","statements":[{"nodeType":"YulAssignment","src":"6454:59:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6467:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6482:1:181","type":"","value":"3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6489:4:181","type":"","value":"0x20"},{"name":"length","nodeType":"YulIdentifier","src":"6495:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6485:3:181"},"nodeType":"YulFunctionCall","src":"6485:17:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6478:3:181"},"nodeType":"YulFunctionCall","src":"6478:25:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6509:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6505:3:181"},"nodeType":"YulFunctionCall","src":"6505:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6474:3:181"},"nodeType":"YulFunctionCall","src":"6474:38:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6463:3:181"},"nodeType":"YulFunctionCall","src":"6463:50:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"6454:5:181"}]}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6418:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6426:4:181","type":"","value":"0x20"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6415:2:181"},"nodeType":"YulFunctionCall","src":"6415:16:181"},"nodeType":"YulIf","src":"6412:111:181"}]},"name":"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nodeType":"YulTypedName","src":"6306:5:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"6316:5:181","type":""}],"src":"6232:297:181"},{"body":{"nodeType":"YulBlock","src":"6661:136:181","statements":[{"nodeType":"YulAssignment","src":"6671:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6683:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6694:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6679:3:181"},"nodeType":"YulFunctionCall","src":"6679:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6671:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6713:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6728:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6736:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6724:3:181"},"nodeType":"YulFunctionCall","src":"6724:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6706:6:181"},"nodeType":"YulFunctionCall","src":"6706:42:181"},"nodeType":"YulExpressionStatement","src":"6706:42:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6768:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6779:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6764:3:181"},"nodeType":"YulFunctionCall","src":"6764:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"6784:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6757:6:181"},"nodeType":"YulFunctionCall","src":"6757:34:181"},"nodeType":"YulExpressionStatement","src":"6757:34:181"}]},"name":"abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6622:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6633:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6641:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6652:4:181","type":""}],"src":"6534:263:181"},{"body":{"nodeType":"YulBlock","src":"6931:175:181","statements":[{"nodeType":"YulAssignment","src":"6941:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6953:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6964:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6949:3:181"},"nodeType":"YulFunctionCall","src":"6949:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6941:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"6976:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6994:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6999:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6990:3:181"},"nodeType":"YulFunctionCall","src":"6990:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"7003:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6986:3:181"},"nodeType":"YulFunctionCall","src":"6986:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6980:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7021:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7036:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7044:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7032:3:181"},"nodeType":"YulFunctionCall","src":"7032:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7014:6:181"},"nodeType":"YulFunctionCall","src":"7014:34:181"},"nodeType":"YulExpressionStatement","src":"7014:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7068:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7079:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7064:3:181"},"nodeType":"YulFunctionCall","src":"7064:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"7088:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7096:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7084:3:181"},"nodeType":"YulFunctionCall","src":"7084:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7057:6:181"},"nodeType":"YulFunctionCall","src":"7057:43:181"},"nodeType":"YulExpressionStatement","src":"7057:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6892:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6903:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6911:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6922:4:181","type":""}],"src":"6802:304:181"},{"body":{"nodeType":"YulBlock","src":"7240:119:181","statements":[{"nodeType":"YulAssignment","src":"7250:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7262:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7273:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7258:3:181"},"nodeType":"YulFunctionCall","src":"7258:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7250:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7292:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"7303:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7285:6:181"},"nodeType":"YulFunctionCall","src":"7285:25:181"},"nodeType":"YulExpressionStatement","src":"7285:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7330:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7341:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7326:3:181"},"nodeType":"YulFunctionCall","src":"7326:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"7346:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7319:6:181"},"nodeType":"YulFunctionCall","src":"7319:34:181"},"nodeType":"YulExpressionStatement","src":"7319:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7201:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7212:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7220:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7231:4:181","type":""}],"src":"7111:248:181"},{"body":{"nodeType":"YulBlock","src":"7538:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7555:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7566:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7548:6:181"},"nodeType":"YulFunctionCall","src":"7548:21:181"},"nodeType":"YulExpressionStatement","src":"7548:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7589:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7600:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7585:3:181"},"nodeType":"YulFunctionCall","src":"7585:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7605:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7578:6:181"},"nodeType":"YulFunctionCall","src":"7578:30:181"},"nodeType":"YulExpressionStatement","src":"7578:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7628:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7639:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7624:3:181"},"nodeType":"YulFunctionCall","src":"7624:18:181"},{"hexValue":"2164617461206c656e677468","kind":"string","nodeType":"YulLiteral","src":"7644:14:181","type":"","value":"!data length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7617:6:181"},"nodeType":"YulFunctionCall","src":"7617:42:181"},"nodeType":"YulExpressionStatement","src":"7617:42:181"},{"nodeType":"YulAssignment","src":"7668:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7680:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7691:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7676:3:181"},"nodeType":"YulFunctionCall","src":"7676:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7668:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7515:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7529:4:181","type":""}],"src":"7364:336:181"},{"body":{"nodeType":"YulBlock","src":"7944:199:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7961:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7972:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7954:6:181"},"nodeType":"YulFunctionCall","src":"7954:21:181"},"nodeType":"YulExpressionStatement","src":"7954:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7995:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8006:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7991:3:181"},"nodeType":"YulFunctionCall","src":"7991:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8011:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7984:6:181"},"nodeType":"YulFunctionCall","src":"7984:29:181"},"nodeType":"YulExpressionStatement","src":"7984:29:181"},{"nodeType":"YulAssignment","src":"8022:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8034:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8045:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8030:3:181"},"nodeType":"YulFunctionCall","src":"8030:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8022:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8069:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8080:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8065:3:181"},"nodeType":"YulFunctionCall","src":"8065:20:181"},{"name":"value0","nodeType":"YulIdentifier","src":"8087:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8058:6:181"},"nodeType":"YulFunctionCall","src":"8058:36:181"},"nodeType":"YulExpressionStatement","src":"8058:36:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8114:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8125:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8110:3:181"},"nodeType":"YulFunctionCall","src":"8110:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"8130:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8103:6:181"},"nodeType":"YulFunctionCall","src":"8103:34:181"},"nodeType":"YulExpressionStatement","src":"8103:34:181"}]},"name":"abi_encode_tuple_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_t_uint256_t_rational_32_by_1__to_t_string_memory_ptr_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7905:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7916:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7924:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7935:4:181","type":""}],"src":"7705:438:181"},{"body":{"nodeType":"YulBlock","src":"8229:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"8275:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8284:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8287:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8277:6:181"},"nodeType":"YulFunctionCall","src":"8277:12:181"},"nodeType":"YulExpressionStatement","src":"8277:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8250:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8259:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8246:3:181"},"nodeType":"YulFunctionCall","src":"8246:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"8271:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8242:3:181"},"nodeType":"YulFunctionCall","src":"8242:32:181"},"nodeType":"YulIf","src":"8239:52:181"},{"nodeType":"YulAssignment","src":"8300:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8316:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8310:5:181"},"nodeType":"YulFunctionCall","src":"8310:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8300:6:181"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8195:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8206:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8218:6:181","type":""}],"src":"8148:184:181"},{"body":{"nodeType":"YulBlock","src":"8385:77:181","statements":[{"nodeType":"YulAssignment","src":"8395:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"8406:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"8409:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8402:3:181"},"nodeType":"YulFunctionCall","src":"8402:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"8395:3:181"}]},{"body":{"nodeType":"YulBlock","src":"8434:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8436:16:181"},"nodeType":"YulFunctionCall","src":"8436:18:181"},"nodeType":"YulExpressionStatement","src":"8436:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"8426:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"8429:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8423:2:181"},"nodeType":"YulFunctionCall","src":"8423:10:181"},"nodeType":"YulIf","src":"8420:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"8368:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"8371:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"8377:3:181","type":""}],"src":"8337:125:181"},{"body":{"nodeType":"YulBlock","src":"8641:154:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8658:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8669:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8651:6:181"},"nodeType":"YulFunctionCall","src":"8651:21:181"},"nodeType":"YulExpressionStatement","src":"8651:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8692:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8703:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8688:3:181"},"nodeType":"YulFunctionCall","src":"8688:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8708:1:181","type":"","value":"5"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8681:6:181"},"nodeType":"YulFunctionCall","src":"8681:29:181"},"nodeType":"YulExpressionStatement","src":"8681:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8730:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8741:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8726:3:181"},"nodeType":"YulFunctionCall","src":"8726:18:181"},{"hexValue":"2166656573","kind":"string","nodeType":"YulLiteral","src":"8746:7:181","type":"","value":"!fees"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8719:6:181"},"nodeType":"YulFunctionCall","src":"8719:35:181"},"nodeType":"YulExpressionStatement","src":"8719:35:181"},{"nodeType":"YulAssignment","src":"8763:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8775:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8786:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8771:3:181"},"nodeType":"YulFunctionCall","src":"8771:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8763:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_867777f634bb94108a594889ab4f827c256cf5677bbf34c222dbb2e03cd5a0d3__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8618:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8632:4:181","type":""}],"src":"8467:328:181"},{"body":{"nodeType":"YulBlock","src":"9039:329:181","statements":[{"nodeType":"YulVariableDeclaration","src":"9049:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9067:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"9072:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9063:3:181"},"nodeType":"YulFunctionCall","src":"9063:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"9076:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9059:3:181"},"nodeType":"YulFunctionCall","src":"9059:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9053:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9094:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9109:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9117:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9105:3:181"},"nodeType":"YulFunctionCall","src":"9105:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9087:6:181"},"nodeType":"YulFunctionCall","src":"9087:34:181"},"nodeType":"YulExpressionStatement","src":"9087:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9141:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9152:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9137:3:181"},"nodeType":"YulFunctionCall","src":"9137:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9157:3:181","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9130:6:181"},"nodeType":"YulFunctionCall","src":"9130:31:181"},"nodeType":"YulExpressionStatement","src":"9130:31:181"},{"nodeType":"YulAssignment","src":"9170:53:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9195:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9207:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9218:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9203:3:181"},"nodeType":"YulFunctionCall","src":"9203:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"9178:16:181"},"nodeType":"YulFunctionCall","src":"9178:45:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9170:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9243:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9254:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9239:3:181"},"nodeType":"YulFunctionCall","src":"9239:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"9263:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"9271:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9259:3:181"},"nodeType":"YulFunctionCall","src":"9259:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9232:6:181"},"nodeType":"YulFunctionCall","src":"9232:43:181"},"nodeType":"YulExpressionStatement","src":"9232:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9295:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9306:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9291:3:181"},"nodeType":"YulFunctionCall","src":"9291:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"9311:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9284:6:181"},"nodeType":"YulFunctionCall","src":"9284:34:181"},"nodeType":"YulExpressionStatement","src":"9284:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9338:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9349:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9334:3:181"},"nodeType":"YulFunctionCall","src":"9334:19:181"},{"name":"value4","nodeType":"YulIdentifier","src":"9355:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9327:6:181"},"nodeType":"YulFunctionCall","src":"9327:35:181"},"nodeType":"YulExpressionStatement","src":"9327:35:181"}]},"name":"abi_encode_tuple_t_address_t_bytes_memory_ptr_t_address_t_uint256_t_rational_2_by_1__to_t_address_t_bytes_memory_ptr_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8976:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"8987:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"8995:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9003:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9011:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9019:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9030:4:181","type":""}],"src":"8800:568:181"},{"body":{"nodeType":"YulBlock","src":"9547:158:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9564:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9575:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9557:6:181"},"nodeType":"YulFunctionCall","src":"9557:21:181"},"nodeType":"YulExpressionStatement","src":"9557:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9598:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9609:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9594:3:181"},"nodeType":"YulFunctionCall","src":"9594:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9614:1:181","type":"","value":"9"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9587:6:181"},"nodeType":"YulFunctionCall","src":"9587:29:181"},"nodeType":"YulExpressionStatement","src":"9587:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9636:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9647:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9632:3:181"},"nodeType":"YulFunctionCall","src":"9632:18:181"},{"hexValue":"216578656375746f72","kind":"string","nodeType":"YulLiteral","src":"9652:11:181","type":"","value":"!executor"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9625:6:181"},"nodeType":"YulFunctionCall","src":"9625:39:181"},"nodeType":"YulExpressionStatement","src":"9625:39:181"},{"nodeType":"YulAssignment","src":"9673:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9685:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9696:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9681:3:181"},"nodeType":"YulFunctionCall","src":"9681:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9673:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_78201d9d8a76cb57609402a557d055ee4f4bd3859f343728f9681a9fe9675816__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9524:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9538:4:181","type":""}],"src":"9373:332:181"},{"body":{"nodeType":"YulBlock","src":"9825:258:181","statements":[{"body":{"nodeType":"YulBlock","src":"9871:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9880:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9883:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9873:6:181"},"nodeType":"YulFunctionCall","src":"9873:12:181"},"nodeType":"YulExpressionStatement","src":"9873:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9846:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"9855:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9842:3:181"},"nodeType":"YulFunctionCall","src":"9842:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"9867:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9838:3:181"},"nodeType":"YulFunctionCall","src":"9838:32:181"},"nodeType":"YulIf","src":"9835:52:181"},{"nodeType":"YulVariableDeclaration","src":"9896:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9915:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9909:5:181"},"nodeType":"YulFunctionCall","src":"9909:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9900:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9959:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9934:24:181"},"nodeType":"YulFunctionCall","src":"9934:31:181"},"nodeType":"YulExpressionStatement","src":"9934:31:181"},{"nodeType":"YulAssignment","src":"9974:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"9984:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9974:6:181"}]},{"nodeType":"YulAssignment","src":"9998:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10018:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10029:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10014:3:181"},"nodeType":"YulFunctionCall","src":"10014:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10008:5:181"},"nodeType":"YulFunctionCall","src":"10008:25:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9998:6:181"}]},{"nodeType":"YulAssignment","src":"10042:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10062:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10073:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10058:3:181"},"nodeType":"YulFunctionCall","src":"10058:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10052:5:181"},"nodeType":"YulFunctionCall","src":"10052:25:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"10042:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9775:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9786:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9798:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9806:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9814:6:181","type":""}],"src":"9710:373:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_bytes(add(headStart, offset_1), dataEnd)\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_bool_t_bytes_memory_ptr__to_t_bool_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, iszero(iszero(value0)))\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_bytes(value1, add(headStart, 64))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!rootManager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        let tail_1 := abi_encode_bytes(value0, add(headStart, 96))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value1, tail_1)\n        mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!AMB\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        tail := abi_encode_bytes(value0, add(headStart, 64))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_72c4e0ea3426978b633b2efe37087a856f506ae7eacb1b1e7c169974142d9a69__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!l2Connector\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!length\")\n        tail := add(headStart, 96)\n    }\n    function convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32(array) -> value\n    {\n        let length := mload(array)\n        value := mload(add(array, 0x20))\n        if lt(length, 0x20)\n        {\n            value := and(value, shl(shl(3, sub(0x20, length)), not(0)))\n        }\n    }\n    function abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!data length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_t_uint256_t_rational_32_by_1__to_t_string_memory_ptr_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        mstore(add(headStart, 96), 0)\n        tail := add(headStart, 128)\n        mstore(add(headStart, 0x20), value0)\n        mstore(add(headStart, 64), value1)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_867777f634bb94108a594889ab4f827c256cf5677bbf34c222dbb2e03cd5a0d3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 5)\n        mstore(add(headStart, 64), \"!fees\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr_t_address_t_uint256_t_rational_2_by_1__to_t_address_t_bytes_memory_ptr_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), 160)\n        tail := abi_encode_bytes(value1, add(headStart, 160))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_stringliteral_78201d9d8a76cb57609402a557d055ee4f4bd3859f343728f9681a9fe9675816__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 9)\n        mstore(add(headStart, 64), \"!executor\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"39039":[{"length":32,"start":472}],"39042":[{"length":32,"start":941},{"length":32,"start":1199},{"length":32,"start":1955},{"length":32,"start":2686}],"39045":[{"length":32,"start":556},{"length":32,"start":1018},{"length":32,"start":2156}],"39048":[{"length":32,"start":310},{"length":32,"start":2195}],"41823":[{"length":32,"start":3248},{"length":32,"start":3342}],"41825":[{"length":32,"start":2891},{"length":32,"start":3134},{"length":32,"start":3505}]},"linkReferences":{},"object":"6080604052600436106101185760003560e01c80637850b020116100a0578063cc39428311610064578063cc39428314610332578063d1851c9214610352578063d232c22014610370578063d69f9d611461039b578063db1b7659146103cf57600080fd5b80637850b020146102915780638da5cb5b146102b15780639abaf479146102cf578063b1f8100d146102fd578063c5b350df1461031d57600080fd5b806352a9674b116100e757806352a9674b146101c65780635bd11efc146101fa5780635f61e3ec1461021a5780636a42b8f814610266578063715018a61461027c57600080fd5b806314168416146101245780633cf52ffb1461017257806348e6fa23146101915780634ff746f6146101a657600080fd5b3661011f57005b600080fd5b34801561013057600080fd5b506101587f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b34801561017e57600080fd5b506002545b604051908152602001610169565b6101a461019f366004610e95565b6103ef565b005b3480156101b257600080fd5b506101a46101c1366004610ef9565b6104a4565b3480156101d257600080fd5b506101587f000000000000000000000000000000000000000000000000000000000000000081565b34801561020657600080fd5b506101a4610215366004610f4b565b61054a565b34801561022657600080fd5b5061024e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610169565b34801561027257600080fd5b5062093a80610183565b34801561028857600080fd5b506101a4610581565b34801561029d57600080fd5b506101a46102ac366004610f6f565b610635565b3480156102bd57600080fd5b506000546001600160a01b031661024e565b3480156102db57600080fd5b506102ef6102ea366004610ef9565b610669565b604051610169929190610fce565b34801561030957600080fd5b506101a4610318366004610f4b565b61067b565b34801561032957600080fd5b506101a4610719565b34801561033e57600080fd5b5060035461024e906001600160a01b031681565b34801561035e57600080fd5b506001546001600160a01b031661024e565b34801561037c57600080fd5b506000546001600160a01b0316155b6040519015158152602001610169565b3480156103a757600080fd5b5061024e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103db57600080fd5b5061038b6103ea366004610f4b565b610789565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461045b5760405162461bcd60e51b815260206004820152600c60248201526b10b937b7ba26b0b730b3b2b960a11b60448201526064015b60405180910390fd5b610465828261079a565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507782823360405161049893929190610fe9565b60405180910390a15050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105055760405162461bcd60e51b81526004016104529060208082526004908201526310a0a6a160e11b604082015260600190565b61050e816107d7565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced813360405161053f929190611027565b60405180910390a150565b6000546001600160a01b03163314610575576040516311a8a1bb60e31b815260040160405180910390fd5b61057e8161091a565b50565b6000546001600160a01b031633146105ac576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426105be9190611067565b116105dc576040516324e0285f60e21b815260040160405180910390fd5b6002546000036105ff57604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b031615610629576040516323295ef960e01b815260040160405180910390fd5b6106336000610983565b565b6000546001600160a01b03163314610660576040516311a8a1bb60e31b815260040160405180910390fd5b61057e816109e8565b60006060610676836107d7565b915091565b6000546001600160a01b031633146106a6576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b0382811691161480156106c4575060025415155b156106e2576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361071057604051634a2fb73f60e11b815260040160405180910390fd5b61057e81610a29565b6001546001600160a01b03163314610744576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426107569190611067565b11610774576040516324e0285f60e21b815260040160405180910390fd5b600154610633906001600160a01b0316610983565b600061079482610a77565b92915050565b6003546107d3907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03168484610aa3565b5050565b6003546107ec906001600160a01b0316610a77565b6108275760405162461bcd60e51b815260206004820152600c60248201526b10b61921b7b73732b1ba37b960a11b6044820152606401610452565b80516020146108625760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610452565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016638e7d93fa7f00000000000000000000000000000000000000000000000000000000000000006108bb8461107a565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526024820152604401600060405180830381600087803b1580156108ff57600080fd5b505af1158015610913573d6000803e3d6000fd5b5050505050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60045460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1600455565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b60006107947f000000000000000000000000000000000000000000000000000000000000000083610ca3565b8151602014610ae35760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610452565b805115610b215760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610452565b6000610b2c34610ddc565b6040516366c96b3760e01b8152606060048201526000606482018190527f00000000000000000000000000000000000000000000000000000000000000006024830152602060448301529192506001600160a01b038716906366c96b3790608401602060405180830381865afa158015610baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bce91906110a1565b9050610bdb8260016110ba565b8110610c115760405162461bcd60e51b8152602060048201526005602482015264216665657360d81b6044820152606401610452565b60405163bd45c4e760e01b81526001600160a01b0387169063bd45c4e7908490610c6990899089906000907f0000000000000000000000000000000000000000000000000000000000000000906002906004016110cd565b6000604051808303818588803b158015610c8257600080fd5b505af1158015610c96573d6000803e3d6000fd5b5050505050505050505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d095760405162461bcd60e51b815260206004820152600960248201526810b2bc32b1baba37b960b91b6044820152606401610452565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e919061110b565b5091509150836001600160a01b0316826001600160a01b0316148015610dd357507f000000000000000000000000000000000000000000000000000000000000000081145b95945050505050565b6000600454821115610dee5760045491505b5090565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610e1957600080fd5b813567ffffffffffffffff80821115610e3457610e34610df2565b604051601f8301601f19908116603f01168101908282118183101715610e5c57610e5c610df2565b81604052838152866020858801011115610e7557600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610ea857600080fd5b823567ffffffffffffffff80821115610ec057600080fd5b610ecc86838701610e08565b93506020850135915080821115610ee257600080fd5b50610eef85828601610e08565b9150509250929050565b600060208284031215610f0b57600080fd5b813567ffffffffffffffff811115610f2257600080fd5b610f2e84828501610e08565b949350505050565b6001600160a01b038116811461057e57600080fd5b600060208284031215610f5d57600080fd5b8135610f6881610f36565b9392505050565b600060208284031215610f8157600080fd5b5035919050565b6000815180845260005b81811015610fae57602081850181015186830182015201610f92565b506000602082860101526020601f19601f83011685010191505092915050565b8215158152604060208201526000610f2e6040830184610f88565b606081526000610ffc6060830186610f88565b828103602084015261100e8186610f88565b91505060018060a01b0383166040830152949350505050565b60408152600061103a6040830185610f88565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561079457610794611051565b8051602080830151919081101561109b576000198160200360031b1b821691505b50919050565b6000602082840312156110b357600080fd5b5051919050565b8082018082111561079457610794611051565b600060018060a01b03808816835260a060208401526110ef60a0840188610f88565b9516604083015250606081019290925260809091015292915050565b60008060006060848603121561112057600080fd5b835161112b81610f36565b60208501516040909501519096949550939250505056fea264697066735822122031cfc3cb5a032f137de2cab84c416d16e895165d8b4efd56769ea027c640a62864736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x118 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7850B020 GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xCC394283 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x332 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x352 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x370 JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x39B JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x3CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7850B020 EQ PUSH2 0x291 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2B1 JUMPI DUP1 PUSH4 0x9ABAF479 EQ PUSH2 0x2CF JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x2FD JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x31D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0x52A9674B EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x1FA JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x266 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x27C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x124 JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x172 JUMPI DUP1 PUSH4 0x48E6FA23 EQ PUSH2 0x191 JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x11F JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x130 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x158 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x17E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x169 JUMP JUMPDEST PUSH2 0x1A4 PUSH2 0x19F CALLDATASIZE PUSH1 0x4 PUSH2 0xE95 JUMP JUMPDEST PUSH2 0x3EF JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A4 PUSH2 0x1C1 CALLDATASIZE PUSH1 0x4 PUSH2 0xEF9 JUMP JUMPDEST PUSH2 0x4A4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x158 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A4 PUSH2 0x215 CALLDATASIZE PUSH1 0x4 PUSH2 0xF4B JUMP JUMPDEST PUSH2 0x54A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24E PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x169 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x272 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x183 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x288 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A4 PUSH2 0x581 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A4 PUSH2 0x2AC CALLDATASIZE PUSH1 0x4 PUSH2 0xF6F JUMP JUMPDEST PUSH2 0x635 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x24E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EF PUSH2 0x2EA CALLDATASIZE PUSH1 0x4 PUSH2 0xEF9 JUMP JUMPDEST PUSH2 0x669 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x169 SWAP3 SWAP2 SWAP1 PUSH2 0xFCE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x309 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A4 PUSH2 0x318 CALLDATASIZE PUSH1 0x4 PUSH2 0xF4B JUMP JUMPDEST PUSH2 0x67B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x329 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A4 PUSH2 0x719 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x24E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x24E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x169 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24E PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x38B PUSH2 0x3EA CALLDATASIZE PUSH1 0x4 PUSH2 0xF4B JUMP JUMPDEST PUSH2 0x789 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x45B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B937B7BA26B0B730B3B2B9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x465 DUP3 DUP3 PUSH2 0x79A JUMP JUMPDEST PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 DUP3 DUP3 CALLER PUSH1 0x40 MLOAD PUSH2 0x498 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xFE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x505 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x452 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0x50E DUP2 PUSH2 0x7D7 JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0x53F SWAP3 SWAP2 SWAP1 PUSH2 0x1027 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x575 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x57E DUP2 PUSH2 0x91A JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5AC JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x5BE SWAP2 SWAP1 PUSH2 0x1067 JUMP JUMPDEST GT PUSH2 0x5DC JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x5FF JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x629 JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x633 PUSH1 0x0 PUSH2 0x983 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x660 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x57E DUP2 PUSH2 0x9E8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x676 DUP4 PUSH2 0x7D7 JUMP JUMPDEST SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x6A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x6C4 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x6E2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x710 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x57E DUP2 PUSH2 0xA29 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x744 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x756 SWAP2 SWAP1 PUSH2 0x1067 JUMP JUMPDEST GT PUSH2 0x774 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x633 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x983 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x794 DUP3 PUSH2 0xA77 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x7D3 SWAP1 PUSH32 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 DUP5 PUSH2 0xAA3 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x7EC SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA77 JUMP JUMPDEST PUSH2 0x827 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B61921B7B73732B1BA37B9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x452 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0x862 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x452 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH4 0x8E7D93FA PUSH32 0x0 PUSH2 0x8BB DUP5 PUSH2 0x107A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x913 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x794 PUSH32 0x0 DUP4 PUSH2 0xCA3 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0xAE3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x452 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xB21 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x452 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB2C CALLVALUE PUSH2 0xDDC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x66C96B37 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x60 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP3 ADD DUP2 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x20 PUSH1 0x44 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0x66C96B37 SWAP1 PUSH1 0x84 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBAA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBCE SWAP2 SWAP1 PUSH2 0x10A1 JUMP JUMPDEST SWAP1 POP PUSH2 0xBDB DUP3 PUSH1 0x1 PUSH2 0x10BA JUMP JUMPDEST DUP2 LT PUSH2 0xC11 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x5 PUSH1 0x24 DUP3 ADD MSTORE PUSH5 0x2166656573 PUSH1 0xD8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x452 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xBD45C4E7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0xBD45C4E7 SWAP1 DUP5 SWAP1 PUSH2 0xC69 SWAP1 DUP10 SWAP1 DUP10 SWAP1 PUSH1 0x0 SWAP1 PUSH32 0x0 SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x4 ADD PUSH2 0x10CD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC96 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xD09 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x10B2BC32B1BABA37B9 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x452 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0496D6A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD6A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD8E SWAP2 SWAP1 PUSH2 0x110B JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0xDD3 JUMPI POP PUSH32 0x0 DUP2 EQ JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 SLOAD DUP3 GT ISZERO PUSH2 0xDEE JUMPI PUSH1 0x4 SLOAD SWAP2 POP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xE19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xE34 JUMPI PUSH2 0xE34 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xE5C JUMPI PUSH2 0xE5C PUSH2 0xDF2 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0xE75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xEA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xEC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xECC DUP7 DUP4 DUP8 ADD PUSH2 0xE08 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xEE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xEEF DUP6 DUP3 DUP7 ADD PUSH2 0xE08 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF2E DUP5 DUP3 DUP6 ADD PUSH2 0xE08 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x57E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xF68 DUP2 PUSH2 0xF36 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xFAE JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0xF92 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xF2E PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0xF88 JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0xFFC PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0xF88 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x100E DUP2 DUP7 PUSH2 0xF88 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x103A PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0xF88 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x794 JUMPI PUSH2 0x794 PUSH2 0x1051 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x109B JUMPI PUSH1 0x0 NOT DUP2 PUSH1 0x20 SUB PUSH1 0x3 SHL SHL DUP3 AND SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x10B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x794 JUMPI PUSH2 0x794 PUSH2 0x1051 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND DUP4 MSTORE PUSH1 0xA0 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x10EF PUSH1 0xA0 DUP5 ADD DUP9 PUSH2 0xF88 JUMP JUMPDEST SWAP6 AND PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH2 0x112B DUP2 PUSH2 0xF36 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x40 SWAP1 SWAP6 ADD MLOAD SWAP1 SWAP7 SWAP5 SWAP6 POP SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BALANCE 0xCF 0xC3 0xCB GAS SUB 0x2F SGT PUSH30 0xE2CAB84C416D16E895165D8B4EFD56769EA027C640A62864736F6C634300 ADDMOD GT STOP CALLER ","sourceMap":"252:1236:128:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1587:37:116;;;;;;;;;;;;;;;;;;188:10:181;176:23;;;158:42;;146:2;131:18;1587:37:116;;;;;;;;1949:112:168;;;;;;;;;;-1:-1:-1;2029:27:168;;1949:112;;;357:25:181;;;345:2;330:18;1949:112:168;211:177:181;1614:200:119;;;;;;:::i;:::-;;:::i;:::-;;4262:148:116;;;;;;;;;;-1:-1:-1;4262:148:116;;;;;:::i;:::-;;:::i;1268:30::-;;;;;;;;;;;;;;;3939:119;;;;;;;;;;-1:-1:-1;3939:119:116;;;;;:::i;:::-;;:::i;1451:37::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2669:32:181;;;2651:51;;2639:2;2624:18;1451:37:116;2505:203:181;2151:79:168;;;;;;;;;;-1:-1:-1;1530:6:168;2151:79;;3820:442;;;;;;;;;;;;;:::i;860:83:118:-;;;;;;;;;;-1:-1:-1;860:83:118;;;;;:::i;:::-;;:::i;1641:79:168:-;;;;;;;;;;-1:-1:-1;1687:7:168;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;894:126:127;;;;;;;;;;-1:-1:-1;894:126:127;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;3321:420:168:-;;;;;;;;;;-1:-1:-1;3321:420:168;;;;;:::i;:::-;;:::i;4404:539::-;;;;;;;;;;;;;:::i;1705:30:116:-;;;;;;;;;;-1:-1:-1;1705:30:116;;;;-1:-1:-1;;;;;1705:30:116;;;1792:85:168;;;;;;;;;;-1:-1:-1;1863:9:168;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;;;;;;;;;;-1:-1:-1;3097:4:168;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;;3793:14:181;;3786:22;3768:41;;3756:2;3741:18;3055:86:168;3628:187:181;1363:28:116;;;;;;;;;;;;;;;4490:107;;;;;;;;;;-1:-1:-1;4490:107:116;;;;;:::i;:::-;;:::i;1614:200:119:-;2212:10:116;-1:-1:-1;;;;;2226:12:116;2212:26;;2204:51;;;;-1:-1:-1;;;2204:51:116;;4022:2:181;2204:51:116;;;4004:21:181;4061:2;4041:18;;;4034:30;-1:-1:-1;;;4080:18:181;;;4073:42;4132:18;;2204:51:116;;;;;;;;;1721:33:119::1;1734:5;1741:12;1721;:33::i;:::-;1765:44;1777:5;1784:12;1798:10;1765:44;;;;;;;;:::i;:::-;;;;;;;;1614:200:::0;;:::o;4262:148:116:-;1891:10;-1:-1:-1;;;;;1905:3:116;1891:17;;1883:34;;;;-1:-1:-1;;;1883:34:116;;;;;;4842:2:181;4824:21;;;4881:1;4861:18;;;4854:29;-1:-1:-1;;;4914:2:181;4899:18;;4892:34;4958:2;4943:18;;4640:327;1883:34:116;4337:22:::1;4353:5;4337:15;:22::i;:::-;4370:35;4387:5;4394:10;4370:35;;;;;;;:::i;:::-;;;;;;;;4262:148:::0;:::o;3939:119::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4016:37:116::1;4036:16;4016:19;:37::i;:::-;3939:119:::0;:::o;3820:442:168:-;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;3960:27:::2;;3991:1;3960:32:::0;3956:92:::2;;4001:47;;-1:-1:-1::0;;;4001:47:168::2;;;;;;;;;;;3956:92;4095:9;::::0;-1:-1:-1;;;;;4095:9:168::2;:23:::0;4091:88:::2;;4127:52;;-1:-1:-1::0;;;4127:52:168::2;;;;;;;;;;;4091:88;4236:21;4254:1;4236:9;:21::i;:::-;3820:442::o:0;860:83:118:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;919:19:118::1;930:7;919:10;:19::i;894:126:127:-:0;952:12;966:19;993:22;1009:5;993:15;:22::i;:::-;894:126;;;:::o;3321:420:168:-;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;4404:539::-:0;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;4490:107:116:-:0;4549:4;4568:24;4582:9;4568:13;:24::i;:::-;4561:31;4490:107;-1:-1:-1;;4490:107:116:o;1202:153:128:-;1313:15;;1295:55;;1308:3;;-1:-1:-1;;;;;1313:15:128;1330:5;1337:12;1295;:55::i;:::-;1202:153;;:::o;785:413::-;949:15;;935:30;;-1:-1:-1;;;;;949:15:128;935:13;:30::i;:::-;927:55;;;;-1:-1:-1;;;927:55:128;;5758:2:181;927:55:128;;;5740:21:181;5797:2;5777:18;;;5770:30;-1:-1:-1;;;5816:18:181;;;5809:42;5868:18;;927:55:128;5556:336:181;927:55:128;1046:5;:12;1062:2;1046:18;1038:38;;;;-1:-1:-1;;;1038:38:128;;6099:2:181;1038:38:128;;;6081:21:181;6138:1;6118:18;;;6111:29;-1:-1:-1;;;6156:18:181;;;6149:37;6203:18;;1038:38:128;5897:330:181;1038:38:128;-1:-1:-1;;;;;1139:12:128;1126:36;;1163:13;1178:14;1186:5;1178:14;:::i;:::-;1126:67;;-1:-1:-1;;;;;;1126:67:128;;;;;;;;6724:23:181;;;;1126:67:128;;;6706:42:181;6764:18;;;6757:34;6679:18;;1126:67:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;785:413;:::o;5838:185:116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;7014:34:181;;7084:15;;;7079:2;7064:18;;7057:43;5921:57:116;;6949:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;4981::168:-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;1089:114:118:-;1160:6;;1146:30;;;7285:25:181;;;7341:2;7326:18;;7319:34;;;1146:30:118;;7258:18:181;1146:30:118;;;;;;;1182:6;:16;1089:114::o;5170:183:168:-;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;1359:127:128:-;1433:4;1452:29;1466:3;1471:9;1452:13;:29::i;1362:1040:127:-;1560:5;:12;1576:2;1560:18;1552:43;;;;-1:-1:-1;;;1552:43:127;;7566:2:181;1552:43:127;;;7548:21:181;7605:2;7585:18;;;7578:30;-1:-1:-1;;;7624:18:181;;;7617:42;7676:18;;1552:43:127;7364:336:181;1552:43:127;1649:19;;:24;1641:49;;;;-1:-1:-1;;;1641:49:127;;7566:2:181;1641:49:127;;;7548:21:181;7605:2;7585:18;;;7578:30;-1:-1:-1;;;7624:18:181;;;7617:42;7676:18;;1641:49:127;7364:336:181;1641:49:127;1729:16;1748:18;1756:9;1748:7;:18::i;:::-;1900:140;;-1:-1:-1;;;1900:140:127;;7972:2:181;1900:140:127;;;7954:21:181;1881:16:127;7991:18:181;;;7984:29;;;1956:15:127;8065:20:181;;;8058:36;2000:2:127;8110:18:181;;;8103:34;1729:37:127;;-1:-1:-1;;;;;;1900:28:127;;;;;8030:19:181;;1900:140:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1881:159;-1:-1:-1;2106:12:127;:8;2117:1;2106:12;:::i;:::-;2095:8;:23;2087:41;;;;-1:-1:-1;;;2087:41:127;;8669:2:181;2087:41:127;;;8651:21:181;8708:1;8688:18;;;8681:29;-1:-1:-1;;;8726:18:181;;;8719:35;8771:18;;2087:41:127;8467:328:181;2087:41:127;2135:262;;-1:-1:-1;;;2135:262:127;;-1:-1:-1;;;;;2135:24:127;;;;;2167:8;;2135:262;;2184:16;;2242:5;;2292:1;;2338:15;;2361:1;;2135:262;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1500:902;;1362:1040;;;;:::o;2406:281::-;2485:4;2505:10;-1:-1:-1;;;;;2519:8:127;2505:22;;2497:44;;;;-1:-1:-1;;;2497:44:127;;9575:2:181;2497:44:127;;;9557:21:181;9614:1;9594:18;;;9587:29;-1:-1:-1;;;9632:18:181;;;9625:39;9681:18;;2497:44:127;9373:332:181;2497:44:127;2549:12;2563:19;2599:8;-1:-1:-1;;;;;2588:28:127;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2548:70;;;;;2639:9;-1:-1:-1;;;;;2631:17:127;:4;-1:-1:-1;;;;;2631:17:127;;:51;;;;;2667:15;2652:11;:30;2631:51;2624:58;2406:281;-1:-1:-1;;;;;2406:281:127:o;1360:137:118:-;1414:7;1440:6;;1433:4;:13;1429:47;;;1463:6;;1456:13;;1429:47;-1:-1:-1;1488:4:118;1360:137::o;393:127:181:-;454:10;449:3;445:20;442:1;435:31;485:4;482:1;475:15;509:4;506:1;499:15;525:718;567:5;620:3;613:4;605:6;601:17;597:27;587:55;;638:1;635;628:12;587:55;674:6;661:20;700:18;737:2;733;730:10;727:36;;;743:18;;:::i;:::-;818:2;812:9;786:2;872:13;;-1:-1:-1;;868:22:181;;;892:2;864:31;860:40;848:53;;;916:18;;;936:22;;;913:46;910:72;;;962:18;;:::i;:::-;1002:10;998:2;991:22;1037:2;1029:6;1022:18;1083:3;1076:4;1071:2;1063:6;1059:15;1055:26;1052:35;1049:55;;;1100:1;1097;1090:12;1049:55;1164:2;1157:4;1149:6;1145:17;1138:4;1130:6;1126:17;1113:54;1211:1;1204:4;1199:2;1191:6;1187:15;1183:26;1176:37;1231:6;1222:15;;;;;;525:718;;;;:::o;1248:539::-;1334:6;1342;1395:2;1383:9;1374:7;1370:23;1366:32;1363:52;;;1411:1;1408;1401:12;1363:52;1451:9;1438:23;1480:18;1521:2;1513:6;1510:14;1507:34;;;1537:1;1534;1527:12;1507:34;1560:49;1601:7;1592:6;1581:9;1577:22;1560:49;:::i;:::-;1550:59;;1662:2;1651:9;1647:18;1634:32;1618:48;;1691:2;1681:8;1678:16;1675:36;;;1707:1;1704;1697:12;1675:36;;1730:51;1773:7;1762:8;1751:9;1747:24;1730:51;:::i;:::-;1720:61;;;1248:539;;;;;:::o;1792:320::-;1860:6;1913:2;1901:9;1892:7;1888:23;1884:32;1881:52;;;1929:1;1926;1919:12;1881:52;1969:9;1956:23;2002:18;1994:6;1991:30;1988:50;;;2034:1;2031;2024:12;1988:50;2057:49;2098:7;2089:6;2078:9;2074:22;2057:49;:::i;:::-;2047:59;1792:320;-1:-1:-1;;;;1792:320:181:o;2117:131::-;-1:-1:-1;;;;;2192:31:181;;2182:42;;2172:70;;2238:1;2235;2228:12;2253:247;2312:6;2365:2;2353:9;2344:7;2340:23;2336:32;2333:52;;;2381:1;2378;2371:12;2333:52;2420:9;2407:23;2439:31;2464:5;2439:31;:::i;:::-;2489:5;2253:247;-1:-1:-1;;;2253:247:181:o;2713:180::-;2772:6;2825:2;2813:9;2804:7;2800:23;2796:32;2793:52;;;2841:1;2838;2831:12;2793:52;-1:-1:-1;2864:23:181;;2713:180;-1:-1:-1;2713:180:181:o;2898:422::-;2939:3;2977:5;2971:12;3004:6;2999:3;2992:19;3029:1;3039:162;3053:6;3050:1;3047:13;3039:162;;;3115:4;3171:13;;;3167:22;;3161:29;3143:11;;;3139:20;;3132:59;3068:12;3039:162;;;3043:3;3246:1;3239:4;3230:6;3225:3;3221:16;3217:27;3210:38;3309:4;3302:2;3298:7;3293:2;3285:6;3281:15;3277:29;3272:3;3268:39;3264:50;3257:57;;;2898:422;;;;:::o;3325:298::-;3508:6;3501:14;3494:22;3483:9;3476:41;3553:2;3548;3537:9;3533:18;3526:30;3457:4;3573:44;3613:2;3602:9;3598:18;3590:6;3573:44;:::i;4161:474::-;4382:2;4371:9;4364:21;4345:4;4408:44;4448:2;4437:9;4433:18;4425:6;4408:44;:::i;:::-;4500:9;4492:6;4488:22;4483:2;4472:9;4468:18;4461:50;4528:32;4553:6;4545;4528:32;:::i;:::-;4520:40;;;4625:1;4621;4616:3;4612:11;4608:19;4600:6;4596:32;4591:2;4580:9;4576:18;4569:60;4161:474;;;;;;:::o;4972:314::-;5147:2;5136:9;5129:21;5110:4;5167:44;5207:2;5196:9;5192:18;5184:6;5167:44;:::i;:::-;5159:52;;5276:1;5272;5267:3;5263:11;5259:19;5251:6;5247:32;5242:2;5231:9;5227:18;5220:60;4972:314;;;;;:::o;5291:127::-;5352:10;5347:3;5343:20;5340:1;5333:31;5383:4;5380:1;5373:15;5407:4;5404:1;5397:15;5423:128;5490:9;;;5511:11;;;5508:37;;;5525:18;;:::i;6232:297::-;6350:12;;6397:4;6386:16;;;6380:23;;6350:12;6415:16;;6412:111;;;6509:1;6505:6;6495;6489:4;6485:17;6482:1;6478:25;6474:38;6467:5;6463:50;6454:59;;6412:111;;6232:297;;;:::o;8148:184::-;8218:6;8271:2;8259:9;8250:7;8246:23;8242:32;8239:52;;;8287:1;8284;8277:12;8239:52;-1:-1:-1;8310:16:181;;8148:184;-1:-1:-1;8148:184:181:o;8337:125::-;8402:9;;;8423:10;;;8420:36;;;8436:18;;:::i;8800:568::-;9030:4;9076:1;9072;9067:3;9063:11;9059:19;9117:2;9109:6;9105:15;9094:9;9087:34;9157:3;9152:2;9141:9;9137:18;9130:31;9178:45;9218:3;9207:9;9203:19;9195:6;9178:45;:::i;:::-;9259:15;;9254:2;9239:18;;9232:43;-1:-1:-1;9306:2:181;9291:18;;9284:34;;;;9349:3;9334:19;;;9327:35;9170:53;8800:568;-1:-1:-1;;8800:568:181:o;9710:373::-;9798:6;9806;9814;9867:2;9855:9;9846:7;9842:23;9838:32;9835:52;;;9883:1;9880;9873:12;9835:52;9915:9;9909:16;9934:31;9959:5;9934:31;:::i;:::-;10029:2;10014:18;;10008:25;10073:2;10058:18;;;10052:25;9984:5;;10008:25;;-1:-1:-1;10052:25:181;9710:373;-1:-1:-1;;;9710:373:181:o"},"gasEstimates":{"creation":{"codeDepositCost":"894400","executionCost":"infinite","totalCost":"infinite"},"external":{"AMB()":"infinite","DOMAIN()":"infinite","MIRROR_DOMAIN()":"infinite","ROOT_MANAGER()":"infinite","acceptProposedOwner()":"63881","anyExecute(bytes)":"infinite","delay()":"281","mirrorConnector()":"2359","owner()":"2376","processMessage(bytes)":"infinite","proposeNewOwner(address)":"infinite","proposed()":"2375","proposedTimestamp()":"2327","renounceOwnership()":"66021","renounced()":"2374","sendMessage(bytes,bytes)":"infinite","setGasCap(uint256)":"27953","setMirrorConnector(address)":"infinite","verifySender(address)":"infinite"},"internal":{"_processMessage(bytes memory)":"infinite","_sendMessage(bytes memory,bytes memory)":"infinite","_verifySender(address)":"infinite"}},"methodIdentifiers":{"AMB()":"d69f9d61","DOMAIN()":"52a9674b","MIRROR_DOMAIN()":"14168416","ROOT_MANAGER()":"5f61e3ec","acceptProposedOwner()":"c5b350df","anyExecute(bytes)":"9abaf479","delay()":"6a42b8f8","mirrorConnector()":"cc394283","owner()":"8da5cb5b","processMessage(bytes)":"4ff746f6","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","renounceOwnership()":"715018a6","renounced()":"d232c220","sendMessage(bytes,bytes)":"48e6fa23","setGasCap(uint256)":"7850b020","setMirrorConnector(address)":"5bd11efc","verifySender(address)":"db1b7659"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_mirrorDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_amb\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rootManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_mirrorChainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Connector__processMessage_notUsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_previous\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"GasCapUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"MirrorConnectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"mirrorDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"amb\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mirrorConnector\",\"type\":\"address\"}],\"name\":\"NewConnector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROOT_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"anyExecute\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"}],\"name\":\"setGasCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"}],\"name\":\"setMirrorConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"processMessage(bytes)\":{\"details\":\"This is called by AMBs to process messages originating from mirror connector\"},\"sendMessage(bytes,bytes)\":{\"details\":\"This is called by the root manager *only* on mainnet to propagate the aggregate root\"}},\"version\":1},\"userdoc\":{\"events\":{\"GasCapUpdated(uint256,uint256)\":{\"notice\":\"Emitted when admin updates the gas cap\"},\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"}},\"kind\":\"user\",\"methods\":{\"AMB()\":{\"notice\":\"Address of the AMB on this domain.\"},\"DOMAIN()\":{\"notice\":\"The domain of this Messaging (i.e. Connector) contract.\"},\"MIRROR_DOMAIN()\":{\"notice\":\"The domain of the corresponding messaging (i.e. Connector) contract.\"},\"ROOT_MANAGER()\":{\"notice\":\"RootManager contract address.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"mirrorConnector()\":{\"notice\":\"Connector on L2 for L1 connectors, and vice versa.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"processMessage(bytes)\":{\"notice\":\"Processes a message received by an AMB\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"sendMessage(bytes,bytes)\":{\"notice\":\"Sends a message over the amb\"},\"setMirrorConnector(address)\":{\"notice\":\"Sets the address of the l2Connector for this domain\"},\"verifySender(address)\":{\"notice\":\"Checks the cross domain sender for a given address\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/multichain/MultichainHubConnector.sol\":\"MultichainHubConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/Connector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IConnector} from \\\"../interfaces/IConnector.sol\\\";\\n\\n/**\\n * @title Connector\\n * @author Connext Labs, Inc.\\n * @notice This contract has the messaging interface functions used by all connectors.\\n *\\n * @dev This contract stores information about mirror connectors, but can be used as a\\n * base for contracts that do not have a mirror (i.e. the connector handling messaging on\\n * mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\\n * will be empty\\n *\\n * @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\\n * or `mirrorGas`\\n */\\nabstract contract Connector is ProposedOwnable, IConnector {\\n  // ========== Custom Errors ===========\\n\\n  error Connector__processMessage_notUsed();\\n\\n  // ============ Events ============\\n\\n  event NewConnector(\\n    uint32 indexed domain,\\n    uint32 indexed mirrorDomain,\\n    address amb,\\n    address rootManager,\\n    address mirrorConnector\\n  );\\n\\n  event MirrorConnectorUpdated(address previous, address current);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The domain of this Messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable DOMAIN;\\n\\n  /**\\n   * @notice Address of the AMB on this domain.\\n   */\\n  address public immutable AMB;\\n\\n  /**\\n   * @notice RootManager contract address.\\n   */\\n  address public immutable ROOT_MANAGER;\\n\\n  /**\\n   * @notice The domain of the corresponding messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable MIRROR_DOMAIN;\\n\\n  /**\\n   * @notice Connector on L2 for L1 connectors, and vice versa.\\n   */\\n  address public mirrorConnector;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered AMB\\n   */\\n  modifier onlyAMB() {\\n    require(msg.sender == AMB, \\\"!AMB\\\");\\n    _;\\n  }\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered ROOT_MANAGER\\n   */\\n  modifier onlyRootManager() {\\n    // NOTE: RootManager will be zero address for spoke connectors.\\n    // Only root manager can dispatch a message to spokes/L2s via the hub connector.\\n    require(msg.sender == ROOT_MANAGER, \\\"!rootManager\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) ProposedOwnable() {\\n    // set the owner\\n    _setOwner(msg.sender);\\n\\n    // sanity checks on values\\n    require(_domain != 0, \\\"empty domain\\\");\\n    require(_rootManager != address(0), \\\"empty rootManager\\\");\\n    // see note at top of contract on why the mirror values are not sanity checked\\n\\n    // set immutables\\n    DOMAIN = _domain;\\n    AMB = _amb;\\n    ROOT_MANAGER = _rootManager;\\n    MIRROR_DOMAIN = _mirrorDomain;\\n    // set mutables if defined\\n    if (_mirrorConnector != address(0)) {\\n      _setMirrorConnector(_mirrorConnector);\\n    }\\n\\n    emit NewConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector);\\n  }\\n\\n  // ============ Receivable ============\\n  /**\\n   * @notice Connectors may need to receive native asset to handle fees when sending a\\n   * message\\n   */\\n  receive() external payable {}\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Sets the address of the l2Connector for this domain\\n   */\\n  function setMirrorConnector(address _mirrorConnector) public onlyOwner {\\n    _setMirrorConnector(_mirrorConnector);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice Processes a message received by an AMB\\n   * @dev This is called by AMBs to process messages originating from mirror connector\\n   */\\n  function processMessage(bytes memory _data) external virtual onlyAMB {\\n    _processMessage(_data);\\n    emit MessageProcessed(_data, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Checks the cross domain sender for a given address\\n   */\\n  function verifySender(address _expected) external returns (bool) {\\n    return _verifySender(_expected);\\n  }\\n\\n  // ============ Virtual Functions ============\\n\\n  /**\\n   * @notice This function is used by the Connext contract on the l2 domain to send a message to the\\n   * l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\\n   * @param _data The contents of the message\\n   * @param _encodedData Data used to send the message; specific to connector\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal virtual;\\n\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(\\n    bytes memory /* _data */\\n  ) internal virtual {\\n    // By default, reverts. This is to ensure the call path is not used unless this function is\\n    // overridden by the inheriting class\\n    revert Connector__processMessage_notUsed();\\n  }\\n\\n  /**\\n   * @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\\n   * is the expected address.\\n   * @dev Should be overridden by the implementing Connector contract.\\n   */\\n  function _verifySender(address _expected) internal virtual returns (bool);\\n\\n  // ============ Private Functions ============\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal virtual {\\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\\n    mirrorConnector = _mirrorConnector;\\n  }\\n}\\n\",\"keccak256\":\"0x08d4077a1b5caf9f46491206064bb24bee467dd741b42fed3d30a608eea83368\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/GasCap.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\n\\nabstract contract GasCap is ProposedOwnable {\\n  // ============ Storage ============\\n  /**\\n   * @notice The gnosis amb requires destination gas to be specified on the origin.\\n   * The gas used will be passed in by the relayer to allow for real-time estimates,\\n   * but will be capped at the admin-set cap.\\n   */\\n  uint256 gasCap;\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted when admin updates the gas cap\\n   * @param _previous The starting value\\n   * @param _updated The final value\\n   */\\n  event GasCapUpdated(uint256 _previous, uint256 _updated);\\n\\n  // ============ Constructor ============\\n  constructor(uint256 _gasCap) {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Admin Fns ============\\n  function setGasCap(uint256 _gasCap) public onlyOwner {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Internal Fns ============\\n\\n  /**\\n   * @notice Used (by admin) to update the gas cap\\n   * @param _gasCap The new value\\n   */\\n  function _setGasCap(uint256 _gasCap) internal {\\n    emit GasCapUpdated(gasCap, _gasCap);\\n    gasCap = _gasCap;\\n  }\\n\\n  /**\\n   * @notice Used to get the gas to use. Will be the original value IFF it\\n   * is less than the cap\\n   * @param _gas The proposed gas value\\n   */\\n  function _getGas(uint256 _gas) internal view returns (uint256) {\\n    if (_gas > gasCap) {\\n      _gas = gasCap;\\n    }\\n    return _gas;\\n  }\\n}\\n\",\"keccak256\":\"0xb8b52a3372f08490c918d1f490ad80764d54bd62d1638e4d17a5b552efe6587d\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/HubConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Connector} from \\\"./Connector.sol\\\";\\n\\n/**\\n * @title HubConnector\\n * @author Connext Labs, Inc.\\n * @notice This contract implements the messaging functions needed on the hub-side of a given AMB.\\n * The HubConnector has a limited set of functionality compared to the SpokeConnector, namely that\\n * it contains no logic to store or prove messages.\\n *\\n * @dev This contract should be deployed on the hub-side of an AMB (i.e. on L1), and contracts\\n * which extend this should implement the virtual functions defined in the BaseConnector class\\n */\\nabstract contract HubConnector is Connector {\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) Connector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector) {}\\n\\n  // ============ Public fns ============\\n  /**\\n   * @notice Sends a message over the amb\\n   * @dev This is called by the root manager *only* on mainnet to propagate the aggregate root\\n   */\\n  function sendMessage(bytes memory _data, bytes memory _encodedData) external payable onlyRootManager {\\n    _sendMessage(_data, _encodedData);\\n    emit MessageSent(_data, _encodedData, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0xc35621419ca872ed0550b0943a577b39942f3d2c9b54de008fee382d5ad290e4\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/multichain/BaseMultichain.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Multichain} from \\\"../../interfaces/ambs/Multichain.sol\\\";\\n\\nimport {GasCap} from \\\"../GasCap.sol\\\";\\n\\nabstract contract BaseMultichain is GasCap {\\n  // ============ Internal Storage ============\\n  address internal immutable EXECUTOR; // Is != amb, used only to retrieve sender context\\n\\n  // Mirror chain id\\n  uint256 internal immutable MIRROR_CHAIN_ID;\\n\\n  // ============ Constructor ============\\n  constructor(\\n    address _amb,\\n    uint256 _mirrorChainId,\\n    uint256 _gasCap // max fee on destination chain\\n  ) GasCap(_gasCap) {\\n    // sanity checks\\n    require(_mirrorChainId != 0, \\\"!mirrorChainId\\\");\\n\\n    // set immutable propertioes\\n    EXECUTOR = Multichain(_amb).executor();\\n    require(EXECUTOR != address(0), \\\"!executor\\\");\\n    MIRROR_CHAIN_ID = _mirrorChainId;\\n  }\\n\\n  // ============ Public Fns ============\\n  function anyExecute(bytes memory _data) external returns (bool success, bytes memory result) {\\n    _processMessage(_data);\\n  }\\n\\n  // ============ Private fns ============\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(bytes memory _data) internal virtual;\\n\\n  /**\\n   * @dev Sends `outboundRoot` to root manager on the mirror chain\\n   */\\n  function _sendMessage(\\n    address _amb,\\n    address _mirrorConnector,\\n    bytes memory _data,\\n    bytes memory _encodedData\\n  ) internal {\\n    // Should always be sending a merkle root\\n    require(_data.length == 32, \\\"!data length\\\");\\n\\n    // Should not include any gas info\\n    require(_encodedData.length == 0, \\\"!data length\\\");\\n\\n    // Get the max fee supplied\\n    uint256 supplied = _getGas(msg.value); // fee paid on origin chain, up to cap\\n    // NOTE: fee will always be <= msg.value\\n\\n    // Get the min fees\\n    uint256 required = Multichain(_amb).calcSrcFees(\\n      \\\"\\\", // app id\\n      MIRROR_CHAIN_ID, // destination chain\\n      32 // data length: selector + root\\n    );\\n    // Should have at least the min fees\\n    require(required < supplied + 1, \\\"!fees\\\");\\n\\n    Multichain(_amb).anyCall{value: supplied}(\\n      _mirrorConnector, // Target contract on destination\\n      _data, // Call data for interaction\\n      address(0), // fallback address on origin chain\\n      MIRROR_CHAIN_ID,\\n      2 // fees paid on source chain\\n    );\\n  }\\n\\n  function _verifySender(address _amb, address _expected) internal view returns (bool) {\\n    require(msg.sender == EXECUTOR, \\\"!executor\\\");\\n\\n    (address from, uint256 fromChainId, ) = Multichain(EXECUTOR).context();\\n    return from == _expected && fromChainId == MIRROR_CHAIN_ID;\\n  }\\n}\\n\",\"keccak256\":\"0x57494779372d73cbb657b60cff9ff57a29455d32df8c74dad7df6cb2fb4e1d9b\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/multichain/MultichainHubConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IRootManager} from \\\"../../interfaces/IRootManager.sol\\\";\\n\\nimport {HubConnector, Connector} from \\\"../HubConnector.sol\\\";\\n\\nimport {BaseMultichain} from \\\"./BaseMultichain.sol\\\";\\n\\ncontract MultichainHubConnector is HubConnector, BaseMultichain {\\n  // ============ Constructor ============\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    uint256 _mirrorChainId,\\n    uint256 _gasCap\\n  )\\n    HubConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector)\\n    BaseMultichain(_amb, _mirrorChainId, _gasCap)\\n  {}\\n\\n  // ============ Private fns ============\\n  /**\\n   * @dev Handles an incoming `outboundRoot`\\n   */\\n  function _processMessage(bytes memory _data) internal override(Connector, BaseMultichain) {\\n    // enforce this came from connector on l2\\n    require(_verifySender(mirrorConnector), \\\"!l2Connector\\\");\\n    // get the data (should be the outbound root)\\n    require(_data.length == 32, \\\"!length\\\");\\n    // set the outbound root for BSC domain\\n    IRootManager(ROOT_MANAGER).aggregate(MIRROR_DOMAIN, bytes32(_data));\\n  }\\n\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\\n    _sendMessage(AMB, mirrorConnector, _data, _encodedData);\\n  }\\n\\n  function _verifySender(address _expected) internal view override returns (bool) {\\n    return _verifySender(AMB, _expected);\\n  }\\n}\\n\",\"keccak256\":\"0xa98d5db6df83e1bc56afdd663bf78f68c8d6fbd7b25521d76ef0946bd94f7ce3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IRootManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\ninterface IRootManager {\\n  /**\\n   * @notice This is called by relayers to generate + send the mixed root from mainnet via AMB to\\n   * spoke domains.\\n   * @dev This must read information for the root from the registered AMBs.\\n   */\\n  function propagate(\\n    address[] calldata _connectors,\\n    uint256[] calldata _fees,\\n    bytes[] memory _encodedData\\n  ) external payable;\\n\\n  /**\\n   * @notice Called by the connectors for various domains on the hub to aggregate their latest\\n   * inbound root.\\n   * @dev This must read information for the root from the registered AMBs\\n   */\\n  function aggregate(uint32 _domain, bytes32 _outbound) external;\\n}\\n\",\"keccak256\":\"0xa895dfaa4baad37a636e7e7e7da72a0a4badfd2d3d8256f975e5101cd5a98236\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/ambs/Multichain.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @dev interface to interact with multicall (prev anyswap) anycall proxy\\n *     see https://github.com/anyswap/multichain-smart-contracts/blob/main/contracts/anycall/AnyswapV6CallProxy.sol\\n */\\ninterface Multichain {\\n  function anyCall(\\n    address _to,\\n    bytes calldata _data,\\n    address _fallback,\\n    uint256 _toChainID,\\n    uint256 _flags\\n  ) external payable;\\n\\n  function context()\\n    external\\n    view\\n    returns (\\n      address from,\\n      uint256 fromChainID,\\n      uint256 nonce\\n    );\\n\\n  function executor() external view returns (address executor);\\n\\n  function calcSrcFees(\\n    string calldata _appID,\\n    uint256 _toChainID,\\n    uint256 _dataLength\\n  ) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xdb3f6c60f9b28aec1a7d5a05378f7eb7783b35cf8bab2a72bd96040249131ef7\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/multichain/MultichainHubConnector.sol:MultichainHubConnector","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/multichain/MultichainHubConnector.sol:MultichainHubConnector","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/multichain/MultichainHubConnector.sol:MultichainHubConnector","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39051,"contract":"contracts/messaging/connectors/multichain/MultichainHubConnector.sol:MultichainHubConnector","label":"mirrorConnector","offset":0,"slot":"3","type":"t_address"},{"astId":39301,"contract":"contracts/messaging/connectors/multichain/MultichainHubConnector.sol:MultichainHubConnector","label":"gasCap","offset":0,"slot":"4","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"GasCapUpdated(uint256,uint256)":{"notice":"Emitted when admin updates the gas cap"},"MessageProcessed(bytes,address)":{"notice":"Emitted whenever a message is successfully received over an AMB"},"MessageSent(bytes,bytes,address)":{"notice":"Emitted whenever a message is successfully sent over an AMB"}},"kind":"user","methods":{"AMB()":{"notice":"Address of the AMB on this domain."},"DOMAIN()":{"notice":"The domain of this Messaging (i.e. Connector) contract."},"MIRROR_DOMAIN()":{"notice":"The domain of the corresponding messaging (i.e. Connector) contract."},"ROOT_MANAGER()":{"notice":"RootManager contract address."},"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"mirrorConnector()":{"notice":"Connector on L2 for L1 connectors, and vice versa."},"owner()":{"notice":"Returns the address of the current owner."},"processMessage(bytes)":{"notice":"Processes a message received by an AMB"},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"sendMessage(bytes,bytes)":{"notice":"Sends a message over the amb"},"setMirrorConnector(address)":{"notice":"Sets the address of the l2Connector for this domain"},"verifySender(address)":{"notice":"Checks the cross domain sender for a given address"}},"version":1}}},"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol":{"MultichainSpokeConnector":{"abi":[{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"uint32","name":"_mirrorDomain","type":"uint32"},{"internalType":"address","name":"_amb","type":"address"},{"internalType":"address","name":"_rootManager","type":"address"},{"internalType":"address","name":"_mirrorConnector","type":"address"},{"internalType":"uint256","name":"_processGas","type":"uint256"},{"internalType":"uint256","name":"_reserveGas","type":"uint256"},{"internalType":"uint256","name":"_delayBlocks","type":"uint256"},{"internalType":"address","name":"_merkle","type":"address"},{"internalType":"address","name":"_watcherManager","type":"address"},{"internalType":"uint256","name":"_mirrorChainId","type":"uint256"},{"internalType":"uint256","name":"_gasCap","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Connector__processMessage_notUsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"inputs":[],"name":"RateLimited__rateLimited_messageSendRateExceeded","type":"error"},{"inputs":[],"name":"TypedMemView__index_indexMoreThan32Bytes","type":"error"},{"inputs":[{"internalType":"uint256","name":"loc","type":"uint256"},{"internalType":"uint256","name":"len","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"slice","type":"uint256"}],"name":"TypedMemView__index_overrun","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_identityOOG","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_invalidPointer","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_nullPointer","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootVerified","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"updated","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"DelayBlocksUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"message","type":"bytes"}],"name":"Dispatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"GasCapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"aggregateRoot","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"aggregateIndex","type":"uint256"}],"name":"MessageProven","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"encodedData","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"current","type":"address"}],"name":"MirrorConnectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"mirrorDomain","type":"uint32"},{"indexed":false,"internalType":"address","name":"amb","type":"address"},{"indexed":false,"internalType":"address","name":"rootManager","type":"address"},{"indexed":false,"internalType":"address","name":"mirrorConnector","type":"address"}],"name":"NewConnector","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"returnData","type":"bytes"}],"name":"Process","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updater","type":"address"},{"indexed":false,"internalType":"uint256","name":"newRateLimit","type":"uint256"}],"name":"SendRateLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"SenderAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"SenderRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"watcherManager","type":"address"}],"name":"WatcherManagerChanged","type":"event"},{"inputs":[],"name":"AMB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MERKLE","outputs":[{"internalType":"contract MerkleTreeManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIRROR_DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROCESS_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"addSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlistedSenders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"anyExecute","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_destinationDomain","type":"uint32"},{"internalType":"bytes32","name":"_recipientAddress","type":"bytes32"},{"internalType":"bytes","name":"_messageBody","type":"bytes"}],"name":"dispatch","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"home","outputs":[{"internalType":"contract IOutbox","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_potentialReplica","type":"address"}],"name":"isReplica","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"localDomain","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"messages","outputs":[{"internalType":"enum SpokeConnector.MessageStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mirrorConnector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"nonces","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"outboundRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"pendingAggregateRoots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"processMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32[32]","name":"path","type":"bytes32[32]"},{"internalType":"uint256","name":"index","type":"uint256"}],"internalType":"struct SpokeConnector.Proof[]","name":"_proofs","type":"tuple[]"},{"internalType":"bytes32","name":"_aggregateRoot","type":"bytes32"},{"internalType":"bytes32[32]","name":"_aggregatePath","type":"bytes32[32]"},{"internalType":"uint256","name":"_aggregateIndex","type":"uint256"}],"name":"proveAndProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"provenAggregateRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"provenMessageRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rateLimitBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_fraudulentRoot","type":"bytes32"}],"name":"removePendingAggregateRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"removeSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_encodedData","type":"bytes"}],"name":"send","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"sentMessageRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_delayBlocks","type":"uint256"}],"name":"setDelayBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gasCap","type":"uint256"}],"name":"setGasCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mirrorConnector","type":"address"}],"name":"setMirrorConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rateLimit","type":"uint256"}],"name":"setRateLimitBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_watcherManager","type":"address"}],"name":"setWatcherManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_expected","type":"address"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"watcherManager","outputs":[{"internalType":"contract WatcherManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"addSender(address)":{"details":"Only allowlisted routers (senders) can call `dispatch`."},"dispatch(uint32,bytes32,bytes)":{"details":"The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \"hub\"), it will be combined into a single aggregate root by RootManager (along with outbound roots from other chains). This aggregate root will be redistributed to all destination chains. NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions"},"home()":{"details":"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad","returns":{"_0":"The local inbox contract"}},"isReplica(address)":{"returns":{"_0":"True if _potentialReplica is an enrolled Replica"}},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"processMessage(bytes)":{"details":"This is called by AMBs to process messages originating from mirror connector"},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":{"details":"Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.Intended to be called by the relayer at specific intervals during runtime.Will record a calculated root as having been proven if we've already proven that it was included in the aggregateRoot.","params":{"_aggregateIndex":"Index of the inbound root in the aggregator's merkle tree in the hub.","_aggregatePath":"Merkle path of inclusion for the inbound root.","_aggregateRoot":"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.","_proofs":"Batch of Proofs containing messages for proving/processing."}},"removePendingAggregateRoot(bytes32)":{"details":"This method is required for handling fraud cases in the current construction.","params":{"_fraudulentRoot":"Target fraudulent root that should be erased from the `pendingAggregateRoots` mapping."}},"removeSender(address)":{"details":"Only allowlisted routers (senders) can call `dispatch`."},"setRateLimitBlocks(uint256)":{"details":"Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)","params":{"_rateLimit":"The number of blocks require between sending messages. If set to 0, rate limiting for this spoke connector will be disabled."}},"withdrawFunds(address)":{"details":"Withdraws the entire balance of the contract.","params":{"_to":"The recipient of the funds withdrawn"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_10599":{"entryPoint":null,"id":10599,"parameterSlots":0,"returnSlots":0},"@_10699":{"entryPoint":null,"id":10699,"parameterSlots":0,"returnSlots":0},"@_38838":{"entryPoint":null,"id":38838,"parameterSlots":1,"returnSlots":0},"@_39152":{"entryPoint":null,"id":39152,"parameterSlots":5,"returnSlots":0},"@_39257":{"entryPoint":null,"id":39257,"parameterSlots":0,"returnSlots":0},"@_39318":{"entryPoint":null,"id":39318,"parameterSlots":1,"returnSlots":0},"@_39687":{"entryPoint":null,"id":39687,"parameterSlots":10,"returnSlots":0},"@_41867":{"entryPoint":null,"id":41867,"parameterSlots":3,"returnSlots":0},"@_42164":{"entryPoint":null,"id":42164,"parameterSlots":12,"returnSlots":0},"@_setGasCap_39346":{"entryPoint":1162,"id":39346,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":1057,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":956,"id":49908,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":1253,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":1477,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_addresst_uint256t_uint256_fromMemory":{"entryPoint":1277,"id":null,"parameterSlots":2,"returnSlots":12},"abi_decode_uint32_fromMemory":{"entryPoint":1227,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_620aa21aff383647ce0e5ebd652fee0a2b799ab25acda9de7376f45202465bab__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_78201d9d8a76cb57609402a557d055ee4f4bd3859f343728f9681a9fe9675816__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4956:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"73:108:181","statements":[{"nodeType":"YulAssignment","src":"83:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"98:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"92:5:181"},"nodeType":"YulFunctionCall","src":"92:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"83:5:181"}]},{"body":{"nodeType":"YulBlock","src":"159:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"168:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"171:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"161:6:181"},"nodeType":"YulFunctionCall","src":"161:12:181"},"nodeType":"YulExpressionStatement","src":"161:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"127:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"138:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"145:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"134:3:181"},"nodeType":"YulFunctionCall","src":"134:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"124:2:181"},"nodeType":"YulFunctionCall","src":"124:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"117:6:181"},"nodeType":"YulFunctionCall","src":"117:41:181"},"nodeType":"YulIf","src":"114:61:181"}]},"name":"abi_decode_uint32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"52:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"63:5:181","type":""}],"src":"14:167:181"},{"body":{"nodeType":"YulBlock","src":"246:117:181","statements":[{"nodeType":"YulAssignment","src":"256:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"271:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"265:5:181"},"nodeType":"YulFunctionCall","src":"265:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"256:5:181"}]},{"body":{"nodeType":"YulBlock","src":"341:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"350:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"353:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"343:6:181"},"nodeType":"YulFunctionCall","src":"343:12:181"},"nodeType":"YulExpressionStatement","src":"343:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"300:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"311:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"326:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"331:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"322:3:181"},"nodeType":"YulFunctionCall","src":"322:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"335:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"318:3:181"},"nodeType":"YulFunctionCall","src":"318:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"307:3:181"},"nodeType":"YulFunctionCall","src":"307:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"297:2:181"},"nodeType":"YulFunctionCall","src":"297:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"290:6:181"},"nodeType":"YulFunctionCall","src":"290:50:181"},"nodeType":"YulIf","src":"287:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"225:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"236:5:181","type":""}],"src":"186:177:181"},{"body":{"nodeType":"YulBlock","src":"636:764:181","statements":[{"body":{"nodeType":"YulBlock","src":"683:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"692:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"695:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"685:6:181"},"nodeType":"YulFunctionCall","src":"685:12:181"},"nodeType":"YulExpressionStatement","src":"685:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"657:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"666:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"653:3:181"},"nodeType":"YulFunctionCall","src":"653:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"678:3:181","type":"","value":"384"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"649:3:181"},"nodeType":"YulFunctionCall","src":"649:33:181"},"nodeType":"YulIf","src":"646:53:181"},{"nodeType":"YulAssignment","src":"708:49:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"747:9:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"718:28:181"},"nodeType":"YulFunctionCall","src":"718:39:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"708:6:181"}]},{"nodeType":"YulAssignment","src":"766:58:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"809:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"820:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"805:3:181"},"nodeType":"YulFunctionCall","src":"805:18:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"776:28:181"},"nodeType":"YulFunctionCall","src":"776:48:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"766:6:181"}]},{"nodeType":"YulAssignment","src":"833:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"877:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"888:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"873:3:181"},"nodeType":"YulFunctionCall","src":"873:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"843:29:181"},"nodeType":"YulFunctionCall","src":"843:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"833:6:181"}]},{"nodeType":"YulAssignment","src":"901:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"945:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"956:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"941:3:181"},"nodeType":"YulFunctionCall","src":"941:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"911:29:181"},"nodeType":"YulFunctionCall","src":"911:49:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"901:6:181"}]},{"nodeType":"YulAssignment","src":"969:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1013:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1024:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1009:3:181"},"nodeType":"YulFunctionCall","src":"1009:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"979:29:181"},"nodeType":"YulFunctionCall","src":"979:50:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"969:6:181"}]},{"nodeType":"YulAssignment","src":"1038:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1058:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1069:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1054:3:181"},"nodeType":"YulFunctionCall","src":"1054:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1048:5:181"},"nodeType":"YulFunctionCall","src":"1048:26:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"1038:6:181"}]},{"nodeType":"YulAssignment","src":"1083:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1103:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1114:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1099:3:181"},"nodeType":"YulFunctionCall","src":"1099:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1093:5:181"},"nodeType":"YulFunctionCall","src":"1093:26:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"1083:6:181"}]},{"nodeType":"YulAssignment","src":"1128:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1148:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1159:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1144:3:181"},"nodeType":"YulFunctionCall","src":"1144:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1138:5:181"},"nodeType":"YulFunctionCall","src":"1138:26:181"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"1128:6:181"}]},{"nodeType":"YulAssignment","src":"1173:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1217:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1228:3:181","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1213:3:181"},"nodeType":"YulFunctionCall","src":"1213:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"1183:29:181"},"nodeType":"YulFunctionCall","src":"1183:50:181"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"1173:6:181"}]},{"nodeType":"YulAssignment","src":"1242:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1286:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1297:3:181","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1282:3:181"},"nodeType":"YulFunctionCall","src":"1282:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"1252:29:181"},"nodeType":"YulFunctionCall","src":"1252:50:181"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"1242:6:181"}]},{"nodeType":"YulAssignment","src":"1311:37:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1332:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1343:3:181","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1328:3:181"},"nodeType":"YulFunctionCall","src":"1328:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1322:5:181"},"nodeType":"YulFunctionCall","src":"1322:26:181"},"variableNames":[{"name":"value10","nodeType":"YulIdentifier","src":"1311:7:181"}]},{"nodeType":"YulAssignment","src":"1357:37:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1378:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1389:3:181","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1374:3:181"},"nodeType":"YulFunctionCall","src":"1374:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1368:5:181"},"nodeType":"YulFunctionCall","src":"1368:26:181"},"variableNames":[{"name":"value11","nodeType":"YulIdentifier","src":"1357:7:181"}]}]},"name":"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_addresst_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"512:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"523:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"535:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"543:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"551:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"559:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"567:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"575:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"583:6:181","type":""},{"name":"value7","nodeType":"YulTypedName","src":"591:6:181","type":""},{"name":"value8","nodeType":"YulTypedName","src":"599:6:181","type":""},{"name":"value9","nodeType":"YulTypedName","src":"607:6:181","type":""},{"name":"value10","nodeType":"YulTypedName","src":"615:7:181","type":""},{"name":"value11","nodeType":"YulTypedName","src":"624:7:181","type":""}],"src":"368:1032:181"},{"body":{"nodeType":"YulBlock","src":"1579:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1596:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1607:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1589:6:181"},"nodeType":"YulFunctionCall","src":"1589:21:181"},"nodeType":"YulExpressionStatement","src":"1589:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1630:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1641:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1626:3:181"},"nodeType":"YulFunctionCall","src":"1626:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1646:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1619:6:181"},"nodeType":"YulFunctionCall","src":"1619:30:181"},"nodeType":"YulExpressionStatement","src":"1619:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1669:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1680:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1665:3:181"},"nodeType":"YulFunctionCall","src":"1665:18:181"},{"hexValue":"656d70747920646f6d61696e","kind":"string","nodeType":"YulLiteral","src":"1685:14:181","type":"","value":"empty domain"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1658:6:181"},"nodeType":"YulFunctionCall","src":"1658:42:181"},"nodeType":"YulExpressionStatement","src":"1658:42:181"},{"nodeType":"YulAssignment","src":"1709:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1721:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1732:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1717:3:181"},"nodeType":"YulFunctionCall","src":"1717:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1709:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1556:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1570:4:181","type":""}],"src":"1405:336:181"},{"body":{"nodeType":"YulBlock","src":"1920:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1937:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1948:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1930:6:181"},"nodeType":"YulFunctionCall","src":"1930:21:181"},"nodeType":"YulExpressionStatement","src":"1930:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1971:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1982:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1967:3:181"},"nodeType":"YulFunctionCall","src":"1967:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1987:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1960:6:181"},"nodeType":"YulFunctionCall","src":"1960:30:181"},"nodeType":"YulExpressionStatement","src":"1960:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2010:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2021:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2006:3:181"},"nodeType":"YulFunctionCall","src":"2006:18:181"},{"hexValue":"656d70747920726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"2026:19:181","type":"","value":"empty rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1999:6:181"},"nodeType":"YulFunctionCall","src":"1999:47:181"},"nodeType":"YulExpressionStatement","src":"1999:47:181"},{"nodeType":"YulAssignment","src":"2055:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2067:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2078:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2063:3:181"},"nodeType":"YulFunctionCall","src":"2063:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2055:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1897:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1911:4:181","type":""}],"src":"1746:341:181"},{"body":{"nodeType":"YulBlock","src":"2249:227:181","statements":[{"nodeType":"YulAssignment","src":"2259:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2271:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2282:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2267:3:181"},"nodeType":"YulFunctionCall","src":"2267:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2259:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"2294:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2312:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2317:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2308:3:181"},"nodeType":"YulFunctionCall","src":"2308:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2321:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2304:3:181"},"nodeType":"YulFunctionCall","src":"2304:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2298:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2339:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2354:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2362:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2350:3:181"},"nodeType":"YulFunctionCall","src":"2350:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2332:6:181"},"nodeType":"YulFunctionCall","src":"2332:34:181"},"nodeType":"YulExpressionStatement","src":"2332:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2386:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2397:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2382:3:181"},"nodeType":"YulFunctionCall","src":"2382:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2406:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2414:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2402:3:181"},"nodeType":"YulFunctionCall","src":"2402:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2375:6:181"},"nodeType":"YulFunctionCall","src":"2375:43:181"},"nodeType":"YulExpressionStatement","src":"2375:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2438:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2449:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2434:3:181"},"nodeType":"YulFunctionCall","src":"2434:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"2458:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2466:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2454:3:181"},"nodeType":"YulFunctionCall","src":"2454:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2427:6:181"},"nodeType":"YulFunctionCall","src":"2427:43:181"},"nodeType":"YulExpressionStatement","src":"2427:43:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2202:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2213:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2221:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2229:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2240:4:181","type":""}],"src":"2092:384:181"},{"body":{"nodeType":"YulBlock","src":"2655:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2672:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2683:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2665:6:181"},"nodeType":"YulFunctionCall","src":"2665:21:181"},"nodeType":"YulExpressionStatement","src":"2665:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2706:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2717:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2702:3:181"},"nodeType":"YulFunctionCall","src":"2702:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2722:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2695:6:181"},"nodeType":"YulFunctionCall","src":"2695:30:181"},"nodeType":"YulExpressionStatement","src":"2695:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2745:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2756:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2741:3:181"},"nodeType":"YulFunctionCall","src":"2741:18:181"},{"hexValue":"2170726f6365737320676173","kind":"string","nodeType":"YulLiteral","src":"2761:14:181","type":"","value":"!process gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2734:6:181"},"nodeType":"YulFunctionCall","src":"2734:42:181"},"nodeType":"YulExpressionStatement","src":"2734:42:181"},{"nodeType":"YulAssignment","src":"2785:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2797:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2808:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2793:3:181"},"nodeType":"YulFunctionCall","src":"2793:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2785:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2632:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2646:4:181","type":""}],"src":"2481:336:181"},{"body":{"nodeType":"YulBlock","src":"2996:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3013:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3024:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3006:6:181"},"nodeType":"YulFunctionCall","src":"3006:21:181"},"nodeType":"YulExpressionStatement","src":"3006:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3047:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3058:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3043:3:181"},"nodeType":"YulFunctionCall","src":"3043:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3063:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3036:6:181"},"nodeType":"YulFunctionCall","src":"3036:30:181"},"nodeType":"YulExpressionStatement","src":"3036:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3086:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3097:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3082:3:181"},"nodeType":"YulFunctionCall","src":"3082:18:181"},{"hexValue":"217265736572766520676173","kind":"string","nodeType":"YulLiteral","src":"3102:14:181","type":"","value":"!reserve gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3075:6:181"},"nodeType":"YulFunctionCall","src":"3075:42:181"},"nodeType":"YulExpressionStatement","src":"3075:42:181"},{"nodeType":"YulAssignment","src":"3126:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3138:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3149:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3134:3:181"},"nodeType":"YulFunctionCall","src":"3134:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3126:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2973:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2987:4:181","type":""}],"src":"2822:336:181"},{"body":{"nodeType":"YulBlock","src":"3337:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3354:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3365:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3347:6:181"},"nodeType":"YulFunctionCall","src":"3347:21:181"},"nodeType":"YulExpressionStatement","src":"3347:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3388:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3399:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3384:3:181"},"nodeType":"YulFunctionCall","src":"3384:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3404:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3377:6:181"},"nodeType":"YulFunctionCall","src":"3377:30:181"},"nodeType":"YulExpressionStatement","src":"3377:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3427:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3438:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3423:3:181"},"nodeType":"YulFunctionCall","src":"3423:18:181"},{"hexValue":"217a65726f206d65726b6c65","kind":"string","nodeType":"YulLiteral","src":"3443:14:181","type":"","value":"!zero merkle"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3416:6:181"},"nodeType":"YulFunctionCall","src":"3416:42:181"},"nodeType":"YulExpressionStatement","src":"3416:42:181"},{"nodeType":"YulAssignment","src":"3467:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3479:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3490:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3475:3:181"},"nodeType":"YulFunctionCall","src":"3475:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3467:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3314:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3328:4:181","type":""}],"src":"3163:336:181"},{"body":{"nodeType":"YulBlock","src":"3678:164:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3695:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3706:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3688:6:181"},"nodeType":"YulFunctionCall","src":"3688:21:181"},"nodeType":"YulExpressionStatement","src":"3688:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3729:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3740:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3725:3:181"},"nodeType":"YulFunctionCall","src":"3725:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3745:2:181","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3718:6:181"},"nodeType":"YulFunctionCall","src":"3718:30:181"},"nodeType":"YulExpressionStatement","src":"3718:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3768:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3779:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3764:3:181"},"nodeType":"YulFunctionCall","src":"3764:18:181"},{"hexValue":"216d6972726f72436861696e4964","kind":"string","nodeType":"YulLiteral","src":"3784:16:181","type":"","value":"!mirrorChainId"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3757:6:181"},"nodeType":"YulFunctionCall","src":"3757:44:181"},"nodeType":"YulExpressionStatement","src":"3757:44:181"},{"nodeType":"YulAssignment","src":"3810:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3822:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3833:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3818:3:181"},"nodeType":"YulFunctionCall","src":"3818:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3810:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_620aa21aff383647ce0e5ebd652fee0a2b799ab25acda9de7376f45202465bab__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3655:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3669:4:181","type":""}],"src":"3504:338:181"},{"body":{"nodeType":"YulBlock","src":"3928:127:181","statements":[{"body":{"nodeType":"YulBlock","src":"3974:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3983:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3986:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3976:6:181"},"nodeType":"YulFunctionCall","src":"3976:12:181"},"nodeType":"YulExpressionStatement","src":"3976:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3949:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3958:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3945:3:181"},"nodeType":"YulFunctionCall","src":"3945:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3970:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3941:3:181"},"nodeType":"YulFunctionCall","src":"3941:32:181"},"nodeType":"YulIf","src":"3938:52:181"},{"nodeType":"YulAssignment","src":"3999:50:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4039:9:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"4009:29:181"},"nodeType":"YulFunctionCall","src":"4009:40:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3999:6:181"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3894:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3905:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3917:6:181","type":""}],"src":"3847:208:181"},{"body":{"nodeType":"YulBlock","src":"4234:158:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4251:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4262:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4244:6:181"},"nodeType":"YulFunctionCall","src":"4244:21:181"},"nodeType":"YulExpressionStatement","src":"4244:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4285:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4296:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4281:3:181"},"nodeType":"YulFunctionCall","src":"4281:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4301:1:181","type":"","value":"9"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4274:6:181"},"nodeType":"YulFunctionCall","src":"4274:29:181"},"nodeType":"YulExpressionStatement","src":"4274:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4323:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4334:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4319:3:181"},"nodeType":"YulFunctionCall","src":"4319:18:181"},{"hexValue":"216578656375746f72","kind":"string","nodeType":"YulLiteral","src":"4339:11:181","type":"","value":"!executor"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4312:6:181"},"nodeType":"YulFunctionCall","src":"4312:39:181"},"nodeType":"YulExpressionStatement","src":"4312:39:181"},{"nodeType":"YulAssignment","src":"4360:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4372:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4383:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4368:3:181"},"nodeType":"YulFunctionCall","src":"4368:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4360:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_78201d9d8a76cb57609402a557d055ee4f4bd3859f343728f9681a9fe9675816__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4211:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4225:4:181","type":""}],"src":"4060:332:181"},{"body":{"nodeType":"YulBlock","src":"4526:175:181","statements":[{"nodeType":"YulAssignment","src":"4536:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4548:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4559:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4544:3:181"},"nodeType":"YulFunctionCall","src":"4544:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4536:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"4571:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4589:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4594:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4585:3:181"},"nodeType":"YulFunctionCall","src":"4585:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4598:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4581:3:181"},"nodeType":"YulFunctionCall","src":"4581:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4575:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4616:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4631:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4639:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4627:3:181"},"nodeType":"YulFunctionCall","src":"4627:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4609:6:181"},"nodeType":"YulFunctionCall","src":"4609:34:181"},"nodeType":"YulExpressionStatement","src":"4609:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4663:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4674:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4659:3:181"},"nodeType":"YulFunctionCall","src":"4659:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"4683:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4691:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4679:3:181"},"nodeType":"YulFunctionCall","src":"4679:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4652:6:181"},"nodeType":"YulFunctionCall","src":"4652:43:181"},"nodeType":"YulExpressionStatement","src":"4652:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4487:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4498:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4506:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4517:4:181","type":""}],"src":"4397:304:181"},{"body":{"nodeType":"YulBlock","src":"4835:119:181","statements":[{"nodeType":"YulAssignment","src":"4845:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4857:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4868:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4853:3:181"},"nodeType":"YulFunctionCall","src":"4853:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4845:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4887:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"4898:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4880:6:181"},"nodeType":"YulFunctionCall","src":"4880:25:181"},"nodeType":"YulExpressionStatement","src":"4880:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4925:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4936:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4921:3:181"},"nodeType":"YulFunctionCall","src":"4921:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"4941:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4914:6:181"},"nodeType":"YulFunctionCall","src":"4914:34:181"},"nodeType":"YulExpressionStatement","src":"4914:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4796:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4807:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4815:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4826:4:181","type":""}],"src":"4706:248:181"}]},"contents":"{\n    { }\n    function abi_decode_uint32_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_addresst_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11\n    {\n        if slt(sub(dataEnd, headStart), 384) { revert(0, 0) }\n        value0 := abi_decode_uint32_fromMemory(headStart)\n        value1 := abi_decode_uint32_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n        value4 := abi_decode_address_fromMemory(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n        value6 := mload(add(headStart, 192))\n        value7 := mload(add(headStart, 224))\n        value8 := abi_decode_address_fromMemory(add(headStart, 256))\n        value9 := abi_decode_address_fromMemory(add(headStart, 288))\n        value10 := mload(add(headStart, 320))\n        value11 := mload(add(headStart, 352))\n    }\n    function abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"empty domain\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"empty rootManager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!process gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!reserve gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!zero merkle\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_620aa21aff383647ce0e5ebd652fee0a2b799ab25acda9de7376f45202465bab__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"!mirrorChainId\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_78201d9d8a76cb57609402a557d055ee4f4bd3859f343728f9681a9fe9675816__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 9)\n        mstore(add(headStart, 64), \"!executor\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"6101a06040523480156200001257600080fd5b5060405162003e8d38038062003e8d8339810160408190526200003591620004fd565b898282808f8f858f8f8f8f8f8f8f808a8a8a8a8a6200005433620003bc565b8463ffffffff166000036200009f5760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620000eb5760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b604482015260640162000096565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e0528116156200012357620001238162000421565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a350506003805460ff60a01b191690555050600480546001600160a01b0319166001600160a01b039390931692909217909155506001600755620cf84f8511620001f65760405162461bcd60e51b815260206004820152600c60248201526b2170726f636573732067617360a01b604482015260640162000096565b613a978411620002385760405162461bcd60e51b815260206004820152600c60248201526b21726573657276652067617360a01b604482015260640162000096565b6101208590526101408490526001600160a01b0382166200028b5760405162461bcd60e51b815260206004820152600c60248201526b217a65726f206d65726b6c6560a01b604482015260640162000096565b506001600160a01b03166101005260085550620002b19550869450506200048a92505050565b5081600003620002f55760405162461bcd60e51b815260206004820152600e60248201526d085b5a5c9c9bdc90da185a5b925960921b604482015260640162000096565b826001600160a01b031663c34c08e56040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000334573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035a9190620005c5565b6001600160a01b0316610160819052620003a35760405162461bcd60e51b815260206004820152600960248201526810b2bc32b1baba37b960b91b604482015260640162000096565b506101805250620005ea9b505050505050505050505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b60105460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1601055565b805163ffffffff81168114620004e057600080fd5b919050565b80516001600160a01b0381168114620004e057600080fd5b6000806000806000806000806000806000806101808d8f0312156200052157600080fd5b6200052c8d620004cb565b9b506200053c60208e01620004cb565b9a506200054c60408e01620004e5565b99506200055c60608e01620004e5565b98506200056c60808e01620004e5565b975060a08d0151965060c08d0151955060e08d01519450620005926101008e01620004e5565b9350620005a36101208e01620004e5565b92506101408d015191506101608d015190509295989b509295989b509295989b565b600060208284031215620005d857600080fd5b620005e382620004e5565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516137c9620006c4600039600081816122e9015281816123dc0152612cf9015260008181612bf80152612c560152600081816103400152611cda01526000818161095701528181611cfb0152611d8801526000818161077e01528181610ad401528181611014015261172a015260006102d00152600061055e01526000818161090d01528181610c7c0152818161185001526121660152600081816104a50152818161068c015281816116cc0152611bda01526137c96000f3fe6080604052600436106102b25760003560e01c80638456cb5911610175578063b697f531116100dc578063d2a3cc7111610095578063d88beda21161006f578063d88beda214610945578063db1b765914610979578063e0fed01014610999578063fa31de01146109b957600080fd5b8063d2a3cc71146108db578063d69f9d61146108fb578063d7d317b31461092f57600080fd5b8063b697f53114610816578063b95a200114610836578063c5b350df14610869578063cc3942831461087e578063d1851c921461089e578063d232c220146108bc57600080fd5b80639fa92f9d1161012e5780639fa92f9d14610759578063a01892a51461076c578063a792c29b146107a0578063ad9c0c2e146107c0578063b1f8100d146107d6578063b2f87643146107f657600080fd5b80638456cb59146106685780638d3638f41461067d5780638da5cb5b146106b057806398c9f2b9146106ce5780639abaf479146106fe5780639d3117c71461072c57600080fd5b8063572386ca1161021957806365eaf11b116101d257806365eaf11b146105c857806368742da6146105dd5780636a42b8f8146105fd5780636b04a93314610613578063715018a6146106335780637850b0201461064857600080fd5b8063572386ca146104c7578063579c1618146104f75780635bd11efc1461050d5780635c975abb1461052d5780635f61e3ec1461054c5780636159ada11461059857600080fd5b80633cf52ffb1161026b5780633cf52ffb146104005780633f4ba83a146104155780634ff746f61461042a578063508a109b1461044a5780635190bc531461046a57806352a9674b1461049357600080fd5b806314168416146102be5780631eeaabea1461030c57806325e3beda1461032e5780632bb1ae7c146103705780632bbd59ca14610383578063301f07c3146103c057600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102f27f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b34801561031857600080fd5b5061032c61032736600461311b565b6109e7565b005b34801561033a57600080fd5b506103627f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610303565b61032c61037e3660046131d7565b610a91565b34801561038f57600080fd5b506103b361039e36600461311b565b600f6020526000908152604090205460ff1681565b6040516103039190613222565b3480156103cc57600080fd5b506103f06103db36600461311b565b600a6020526000908152604090205460ff1681565b6040519015158152602001610303565b34801561040c57600080fd5b50600254610362565b34801561042157600080fd5b5061032c610c34565b34801561043657600080fd5b5061032c6104453660046131d7565b610c71565b34801561045657600080fd5b5061032c61046536600461324a565b610d17565b34801561047657600080fd5b506103f06104853660046132fb565b6001600160a01b0316301490565b34801561049f57600080fd5b506102f27f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d357600080fd5b506103f06104e236600461311b565b600c6020526000908152604090205460ff1681565b34801561050357600080fd5b5061036260055481565b34801561051957600080fd5b5061032c6105283660046132fb565b610fd9565b34801561053957600080fd5b50600354600160a01b900460ff166103f0565b34801561055857600080fd5b506105807f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610303565b3480156105a457600080fd5b506103f06105b33660046132fb565b600d6020526000908152604090205460ff1681565b3480156105d457600080fd5b50610362611010565b3480156105e957600080fd5b5061032c6105f83660046132fb565b611099565b34801561060957600080fd5b5062093a80610362565b34801561061f57600080fd5b5061032c61062e36600461311b565b611116565b34801561063f57600080fd5b5061032c6111e1565b34801561065457600080fd5b5061032c61066336600461311b565b61120c565b34801561067457600080fd5b5061032c611240565b34801561068957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102f2565b3480156106bc57600080fd5b506000546001600160a01b0316610580565b3480156106da57600080fd5b506103f06106e936600461311b565b600b6020526000908152604090205460ff1681565b34801561070a57600080fd5b5061071e6107193660046131d7565b6112f4565b604051610303929190613368565b34801561073857600080fd5b5061036261074736600461311b565b60096020526000908152604090205481565b34801561076557600080fd5b5030610580565b34801561077857600080fd5b506105807f000000000000000000000000000000000000000000000000000000000000000081565b3480156107ac57600080fd5b50600454610580906001600160a01b031681565b3480156107cc57600080fd5b5061036260085481565b3480156107e257600080fd5b5061032c6107f13660046132fb565b611306565b34801561080257600080fd5b5061032c6108113660046132fb565b6113a4565b34801561082257600080fd5b5061032c6108313660046132fb565b611420565b34801561084257600080fd5b506102f261085136600461339c565b600e6020526000908152604090205463ffffffff1681565b34801561087557600080fd5b5061032c61149f565b34801561088a57600080fd5b50600354610580906001600160a01b031681565b3480156108aa57600080fd5b506001546001600160a01b0316610580565b3480156108c857600080fd5b506000546001600160a01b0316156103f0565b3480156108e757600080fd5b5061032c6108f63660046132fb565b61150f565b34801561090757600080fd5b506105807f000000000000000000000000000000000000000000000000000000000000000081565b34801561093b57600080fd5b5061036260065481565b34801561095157600080fd5b506103627f000000000000000000000000000000000000000000000000000000000000000081565b34801561098557600080fd5b506103f06109943660046132fb565b6115e6565b3480156109a557600080fd5b5061032c6109b436600461311b565b6115f7565b3480156109c557600080fd5b506109d96109d43660046133b7565b61162b565b60405161030392919061340e565b6000546001600160a01b03163314610a12576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610a575760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610a996117fa565b43600554600654610aaa919061343d565b1115610ac9576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b549190613450565b6000818152600c602052604090205490915060ff1615610baa5760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b6044820152606401610a4e565b600081604051602001610bbf91815260200190565b6040516020818303038152906040529050610bda8184611847565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610c2790839086903390613469565b60405180910390a1505050565b6000546001600160a01b03163314610c5f576040516311a8a1bb60e31b815260040160405180910390fd5b610c67611884565b610c6f6118d4565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cd25760405162461bcd60e51b8152600401610a4e9060208082526004908201526310a0a6a160e11b604082015260600190565b610cdb81611929565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610d0c9291906134a7565b60405180910390a150565b610d1f6117fa565b610d276119c9565b83610d5e5760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b6044820152606401610a4e565b600085856000818110610d7357610d736134d1565b9050602002810190610d8591906134e7565b610d8f9080613508565b604051610d9d929190613556565b604051809103902090506000610e048288886000818110610dc057610dc06134d1565b9050602002810190610dd291906134e7565b60200189896000818110610de857610de86134d1565b9050602002810190610dfa91906134e7565b6104200135611a22565b9050610e1281868686611ac9565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610f385788888263ffffffff16818110610e5757610e576134d1565b9050602002810190610e6991906134e7565b610e739080613508565b604051610e81929190613556565b604051809103902093506000610ed6858b8b8563ffffffff16818110610ea957610ea96134d1565b9050602002810190610ebb91906134e7565b6020018c8c8663ffffffff16818110610de857610de86134d1565b9050838114610f155760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b6044820152606401610a4e565b506000848152600f60205260409020805460ff1916600190811790915501610e31565b5060005b818163ffffffff161015610fc457610fbb89898363ffffffff16818110610f6557610f656134d1565b9050602002810190610f7791906134e7565b610f819080613508565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bc492505050565b50600101610f3c565b50505050610fd26001600755565b5050505050565b6000546001600160a01b03163314611004576040516311a8a1bb60e31b815260040160405180910390fd5b61100d81611ea1565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110949190613450565b905090565b6000546001600160a01b031633146110c4576040516311a8a1bb60e31b815260040160405180910390fd5b476110cf8282611f0a565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d8260405161110a91815260200190565b60405180910390a25050565b6000546001600160a01b03163314611141576040516311a8a1bb60e31b815260040160405180910390fd5b611149611884565b600081815260096020526040812054900361119e5760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b6044820152606401610a4e565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610d0c9083815260200190565b6000546001600160a01b03163314610c6f576040516311a8a1bb60e31b815260040160405180910390fd5b6000546001600160a01b03163314611237576040516311a8a1bb60e31b815260040160405180910390fd5b61100d81612028565b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa158015611289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ad9190613566565b6112e45760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610a4e565b6112ec6117fa565b610c6f612069565b6000606061130183611929565b915091565b6000546001600160a01b03163314611331576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b03828116911614801561134f575060025415155b1561136d576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361139b57604051634a2fb73f60e11b815260040160405180910390fd5b61100d816120ac565b6000546001600160a01b031633146113cf576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610d0c565b6000546001600160a01b0316331461144b576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610d0c565b6001546001600160a01b031633146114ca576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426114dc9190613588565b116114fa576040516324e0285f60e21b815260040160405180910390fd5b600154610c6f906001600160a01b03166120fa565b6000546001600160a01b0316331461153a576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b03908116908216036115985760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e616765720000000000000000006044820152606401610a4e565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610d0c565b60006115f18261215f565b92915050565b6000546001600160a01b03163314611622576040516311a8a1bb60e31b815260040160405180910390fd5b61100d8161218b565b336000908152600d602052604081205460609060ff1661167c5760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b6044820152606401610a4e565b63ffffffff8086166000908152600e60205260408120805491929190911690826116a58361359b565b91906101000a81548163ffffffff021916908363ffffffff160217905550905060006117047f00000000000000000000000000000000000000000000000000000000000000006116fb336001600160a01b031690565b848a8a8a612209565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af115801561177a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179e91906135be565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f836117d0600184613588565b84876040516117e294939291906135e2565b60405180910390a15090989197509095505050505050565b600354600160a01b900460ff1615610c6f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a4e565b600354611880907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03168484612241565b5050565b600354600160a01b900460ff16610c6f5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a4e565b6118dc611884565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60035461193e906001600160a01b031661215f565b61197d5760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b6044820152606401610a4e565b80516020146119b85760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a4e565b61100d6119c482613611565b612441565b600260075403611a1b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a4e565b6002600755565b6000806000858152600f602052604090205460ff166002811115611a4857611a4861320c565b14611a8b5760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b6044820152606401610a4e565b611abf84846020806020026040519081016040528092919082602080028082843760009201919091525086915061256a9050565b90505b9392505050565b6000848152600b602052604090205460ff16611bbe57611ae8836128b8565b6000611b1e85846020806020026040519081016040528092919082602080028082843760009201919091525086915061256a9050565b9050838114611b655760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b6044820152606401610a4e565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611bb49086815260200190565b60405180910390a3505b50505050565b600080611bd18382612a18565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611c0962ffffff198316612a3c565b63ffffffff1614611c4b5760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b6044820152606401610a4e565b6000611c5c62ffffff198316612a51565b905060016000828152600f602052604090205460ff166002811115611c8357611c8361320c565b14611cba5760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b6044820152606401610a4e565b6000818152600f60205260409020805460ff191660021790556001611d1f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061343d565b611d299190613588565b5a11611d605760405162461bcd60e51b8152600401610a4e906020808252600490820152632167617360e01b604082015260600190565b6000611d7162ffffff198416612a9a565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611dcc62ffffff198816612aab565b611ddb62ffffff198916612abf565b611dea62ffffff198a16612ad4565b611e07611dfc62ffffff198c16612ae9565b62ffffff1916612b17565b604051602401611e1a9493929190613638565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050611e54858560008685612b60565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890611e8d9088908b908690613667565b60405180910390a150505050505050919050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b80471015611f5a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a4e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611fa7576040519150601f19603f3d011682016040523d82523d6000602084013e611fac565b606091505b50509050806120235760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a4e565b505050565b60105460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1601055565b6120716117fa565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861190c3390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60006115f17f000000000000000000000000000000000000000000000000000000000000000083612beb565b60055481036121ce5760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b6044820152606401610a4e565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610d0c565b606086868686868660405160200161222696959493929190613688565b60405160208183030381529060405290509695505050505050565b81516020146122815760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a4e565b8051156122bf5760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a4e565b60006122ca34612d21565b6040516366c96b3760e01b8152606060048201526000606482018190527f00000000000000000000000000000000000000000000000000000000000000006024830152602060448301529192506001600160a01b038716906366c96b3790608401602060405180830381865afa158015612348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236c9190613450565b905061237982600161343d565b81106123af5760405162461bcd60e51b8152602060048201526005602482015264216665657360d81b6044820152606401610a4e565b60405163bd45c4e760e01b81526001600160a01b0387169063bd45c4e790849061240790899089906000907f0000000000000000000000000000000000000000000000000000000000000000906002906004016136e2565b6000604051808303818588803b15801561242057600080fd5b505af1158015612434573d6000803e3d6000fd5b5050505050505050505050565b8061247f5760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b6044820152606401610a4e565b600081815260096020526040902054156124d25760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b6044820152606401610a4e565b6000818152600a602052604090205460ff16156125275760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b6044820152606401610a4e565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610d0c9083815260200190565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b806128fb5760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b6044820152606401610a4e565b6000818152600a602052604090205460ff16156129155750565b6000818152600960205260408120549081900361296b5760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b6044820152606401610a4e565b6008546129788243613588565b10156129c65760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f74202176657269666965640000000000000000006044820152606401610a4e565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b815160009060208401612a3364ffffffffff85168284612d37565b95945050505050565b60006115f162ffffff19831660286004612d74565b600080612a678360781c6001600160601b031690565b6001600160601b031690506000612a878460181c6001600160601b031690565b6001600160601b03169091209392505050565b60006115f1612aa883612da4565b90565b60006115f162ffffff198316826004612d74565b60006115f162ffffff19831660246004612d74565b60006115f162ffffff19831660046020612db5565b60006115f1604c612b0781601886901c6001600160601b0316613588565b62ffffff19851691906000612ec0565b6060600080612b2f8460181c6001600160601b031690565b6001600160601b031690506040519150819250612b4f8483602001612f3c565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff811115612b8657612b86613134565b6040519080825280601f01601f191660200182016040528015612bb0576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612bd1578692505b828152826000602083013e90999098509650505050505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612c515760405162461bcd60e51b815260206004820152600960248201526810b2bc32b1baba37b960b91b6044820152606401610a4e565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd69190613720565b5091509150836001600160a01b0316826001600160a01b0316148015612a3357507f000000000000000000000000000000000000000000000000000000000000000014949350505050565b6000601054821115612d335760105491505b5090565b600080612d44838561343d565b9050604051811115612d54575060005b80600003612d695762ffffff19915050611ac2565b612a3385858561302f565b6000612d81826020613757565b612d8c906008613770565b60ff16612d9a858585612db5565b901c949350505050565b60006115f162ffffff198316602c60205b60008160ff16600003612dca57506000611ac2565b612ddd8460181c6001600160601b031690565b6001600160601b0316612df360ff84168561343d565b1115612e5b57612e0c8460781c6001600160601b031690565b612e1f8560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610a4e565b60208260ff161115612e805760405163045df3f960e01b815260040160405180910390fd5b600882026000612e998660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612ed68660781c6001600160601b031690565b6001600160601b03169050612eea866130a6565b84612ef5878461343d565b612eff919061343d565b1115612f125762ffffff19915050612f34565b612f1c858261343d565b9050612f308364ffffffffff168286612d37565b9150505b949350505050565b600062ffffff1980841603612f645760405163148d513360e21b815260040160405180910390fd5b612f6d836130df565b15612f8b57604051632ee0949160e11b815260040160405180910390fd5b6000612fa08460181c6001600160601b031690565b6001600160601b031690506000612fc08560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115612fe15760206060fd5b8386858560045afa90508061300957604051632af1bd9b60e21b815260040160405180910390fd5b6130246130168860d81c90565b64ffffffffff16878661302f565b979650505050505050565b60006060601883856001600160601b03821682148015613057575086816001600160601b0316145b6130905760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610a4e565b96831b90961790911b90941790931b9392505050565b60006130bb8260181c6001600160601b031690565b6130ce8360781c6001600160601b031690565b016001600160601b03169050919050565b60006130eb8260d81c90565b64ffffffffff1664ffffffffff0361310557506001919050565b6000613110836130a6565b604051109392505050565b60006020828403121561312d57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261315b57600080fd5b813567ffffffffffffffff8082111561317657613176613134565b604051601f8301601f19908116603f0116810190828211818310171561319e5761319e613134565b816040528381528660208588010111156131b757600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156131e957600080fd5b813567ffffffffffffffff81111561320057600080fd5b612f348482850161314a565b634e487b7160e01b600052602160045260246000fd5b602081016003831061324457634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806000610460868803121561326357600080fd5b853567ffffffffffffffff8082111561327b57600080fd5b818801915088601f83011261328f57600080fd5b81358181111561329e57600080fd5b8960208260051b85010111156132b357600080fd5b6020928301975095505086013592506104408601878111156132d457600080fd5b94979396509194604001933592915050565b6001600160a01b038116811461100d57600080fd5b60006020828403121561330d57600080fd5b8135611ac2816132e6565b60005b8381101561333357818101518382015260200161331b565b50506000910152565b60008151808452613354816020860160208601613318565b601f01601f19169290920160200192915050565b8215158152604060208201526000611abf604083018461333c565b803563ffffffff8116811461339757600080fd5b919050565b6000602082840312156133ae57600080fd5b611ac282613383565b6000806000606084860312156133cc57600080fd5b6133d584613383565b925060208401359150604084013567ffffffffffffffff8111156133f857600080fd5b6134048682870161314a565b9150509250925092565b828152604060208201526000611abf604083018461333c565b634e487b7160e01b600052601160045260246000fd5b808201808211156115f1576115f1613427565b60006020828403121561346257600080fd5b5051919050565b60608152600061347c606083018661333c565b828103602084015261348e818661333c565b91505060018060a01b0383166040830152949350505050565b6040815260006134ba604083018561333c565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e198336030181126134fe57600080fd5b9190910192915050565b6000808335601e1984360301811261351f57600080fd5b83018035915067ffffffffffffffff82111561353a57600080fd5b60200191503681900382131561354f57600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561357857600080fd5b81518015158114611ac257600080fd5b818103818111156115f1576115f1613427565b600063ffffffff8083168181036135b4576135b4613427565b6001019392505050565b600080604083850312156135d157600080fd5b505080516020909101519092909150565b848152836020820152826040820152608060608201526000613607608083018461333c565b9695505050505050565b80516020808301519190811015613632576000198160200360031b1b821691505b50919050565b600063ffffffff808716835280861660208401525083604083015260806060830152613607608083018461333c565b8381528215156020820152606060408201526000612a33606083018461333c565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c83015282516136d081604c850160208701613318565b91909101604c01979650505050505050565b600060018060a01b03808816835260a0602084015261370460a084018861333c565b9516604083015250606081019290925260809091015292915050565b60008060006060848603121561373557600080fd5b8351613740816132e6565b602085015160409095015190969495509392505050565b60ff82811682821603908111156115f1576115f1613427565b60ff818116838216029081169081811461378c5761378c613427565b509291505056fea264697066735822122043cb57dda3d0d3e129ba582556881d3d321ac4038f65ad83464a601c6bc4318e64736f6c63430008110033","opcodes":"PUSH2 0x1A0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x3E8D CODESIZE SUB DUP1 PUSH3 0x3E8D DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x4FD JUMP JUMPDEST DUP10 DUP3 DUP3 DUP1 DUP16 DUP16 DUP6 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP16 DUP1 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH3 0x54 CALLER PUSH3 0x3BC JUMP JUMPDEST DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0x0 SUB PUSH3 0x9F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x32B6B83A3C903237B6B0B4B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xEB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x32B6B83A3C903937B7BA26B0B730B3B2B9 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x96 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0xA0 MSTORE DUP4 DUP2 AND PUSH1 0xC0 MSTORE SWAP1 DUP6 AND PUSH1 0xE0 MSTORE DUP2 AND ISZERO PUSH3 0x123 JUMPI PUSH3 0x123 DUP2 PUSH3 0x421 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH4 0xFFFFFFFF DUP7 DUP2 AND SWAP3 SWAP1 DUP9 AND SWAP2 PUSH32 0x4F9C27C2FE3F84576EA469D367D044DA53C45E951617E8389F2B5ED8DB9D25F0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE POP PUSH1 0x1 PUSH1 0x7 SSTORE PUSH3 0xCF84F DUP6 GT PUSH3 0x1F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2170726F6365737320676173 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x96 JUMP JUMPDEST PUSH2 0x3A97 DUP5 GT PUSH3 0x238 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x217265736572766520676173 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x96 JUMP JUMPDEST PUSH2 0x120 DUP6 SWAP1 MSTORE PUSH2 0x140 DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0x28B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x217A65726F206D65726B6C65 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x96 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x100 MSTORE PUSH1 0x8 SSTORE POP PUSH3 0x2B1 SWAP6 POP DUP7 SWAP5 POP POP PUSH3 0x48A SWAP3 POP POP POP JUMP JUMPDEST POP DUP2 PUSH1 0x0 SUB PUSH3 0x2F5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x85B5A5C9C9BDC90DA185A5B9259 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x96 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC34C08E5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x334 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x35A SWAP2 SWAP1 PUSH3 0x5C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x160 DUP2 SWAP1 MSTORE PUSH3 0x3A3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x10B2BC32B1BABA37B9 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x96 JUMP JUMPDEST POP PUSH2 0x180 MSTORE POP PUSH3 0x5EA SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x10 SSTORE JUMP JUMPDEST DUP1 MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH3 0x4E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x4E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x180 DUP14 DUP16 SUB SLT ISZERO PUSH3 0x521 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x52C DUP14 PUSH3 0x4CB JUMP JUMPDEST SWAP12 POP PUSH3 0x53C PUSH1 0x20 DUP15 ADD PUSH3 0x4CB JUMP JUMPDEST SWAP11 POP PUSH3 0x54C PUSH1 0x40 DUP15 ADD PUSH3 0x4E5 JUMP JUMPDEST SWAP10 POP PUSH3 0x55C PUSH1 0x60 DUP15 ADD PUSH3 0x4E5 JUMP JUMPDEST SWAP9 POP PUSH3 0x56C PUSH1 0x80 DUP15 ADD PUSH3 0x4E5 JUMP JUMPDEST SWAP8 POP PUSH1 0xA0 DUP14 ADD MLOAD SWAP7 POP PUSH1 0xC0 DUP14 ADD MLOAD SWAP6 POP PUSH1 0xE0 DUP14 ADD MLOAD SWAP5 POP PUSH3 0x592 PUSH2 0x100 DUP15 ADD PUSH3 0x4E5 JUMP JUMPDEST SWAP4 POP PUSH3 0x5A3 PUSH2 0x120 DUP15 ADD PUSH3 0x4E5 JUMP JUMPDEST SWAP3 POP PUSH2 0x140 DUP14 ADD MLOAD SWAP2 POP PUSH2 0x160 DUP14 ADD MLOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x5D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x5E3 DUP3 PUSH3 0x4E5 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH2 0x37C9 PUSH3 0x6C4 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x22E9 ADD MSTORE DUP2 DUP2 PUSH2 0x23DC ADD MSTORE PUSH2 0x2CF9 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x2BF8 ADD MSTORE PUSH2 0x2C56 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x340 ADD MSTORE PUSH2 0x1CDA ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x957 ADD MSTORE DUP2 DUP2 PUSH2 0x1CFB ADD MSTORE PUSH2 0x1D88 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x77E ADD MSTORE DUP2 DUP2 PUSH2 0xAD4 ADD MSTORE DUP2 DUP2 PUSH2 0x1014 ADD MSTORE PUSH2 0x172A ADD MSTORE PUSH1 0x0 PUSH2 0x2D0 ADD MSTORE PUSH1 0x0 PUSH2 0x55E ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x90D ADD MSTORE DUP2 DUP2 PUSH2 0xC7C ADD MSTORE DUP2 DUP2 PUSH2 0x1850 ADD MSTORE PUSH2 0x2166 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x4A5 ADD MSTORE DUP2 DUP2 PUSH2 0x68C ADD MSTORE DUP2 DUP2 PUSH2 0x16CC ADD MSTORE PUSH2 0x1BDA ADD MSTORE PUSH2 0x37C9 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B2 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x175 JUMPI DUP1 PUSH4 0xB697F531 GT PUSH2 0xDC JUMPI DUP1 PUSH4 0xD2A3CC71 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xD88BEDA2 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xD88BEDA2 EQ PUSH2 0x945 JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x979 JUMPI DUP1 PUSH4 0xE0FED010 EQ PUSH2 0x999 JUMPI DUP1 PUSH4 0xFA31DE01 EQ PUSH2 0x9B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD2A3CC71 EQ PUSH2 0x8DB JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x8FB JUMPI DUP1 PUSH4 0xD7D317B3 EQ PUSH2 0x92F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB697F531 EQ PUSH2 0x816 JUMPI DUP1 PUSH4 0xB95A2001 EQ PUSH2 0x836 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x869 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x87E JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x89E JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x8BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9FA92F9D GT PUSH2 0x12E JUMPI DUP1 PUSH4 0x9FA92F9D EQ PUSH2 0x759 JUMPI DUP1 PUSH4 0xA01892A5 EQ PUSH2 0x76C JUMPI DUP1 PUSH4 0xA792C29B EQ PUSH2 0x7A0 JUMPI DUP1 PUSH4 0xAD9C0C2E EQ PUSH2 0x7C0 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x7D6 JUMPI DUP1 PUSH4 0xB2F87643 EQ PUSH2 0x7F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x668 JUMPI DUP1 PUSH4 0x8D3638F4 EQ PUSH2 0x67D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x6B0 JUMPI DUP1 PUSH4 0x98C9F2B9 EQ PUSH2 0x6CE JUMPI DUP1 PUSH4 0x9ABAF479 EQ PUSH2 0x6FE JUMPI DUP1 PUSH4 0x9D3117C7 EQ PUSH2 0x72C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x572386CA GT PUSH2 0x219 JUMPI DUP1 PUSH4 0x65EAF11B GT PUSH2 0x1D2 JUMPI DUP1 PUSH4 0x65EAF11B EQ PUSH2 0x5C8 JUMPI DUP1 PUSH4 0x68742DA6 EQ PUSH2 0x5DD JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x5FD JUMPI DUP1 PUSH4 0x6B04A933 EQ PUSH2 0x613 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x633 JUMPI DUP1 PUSH4 0x7850B020 EQ PUSH2 0x648 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x572386CA EQ PUSH2 0x4C7 JUMPI DUP1 PUSH4 0x579C1618 EQ PUSH2 0x4F7 JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x52D JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x54C JUMPI DUP1 PUSH4 0x6159ADA1 EQ PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3CF52FFB GT PUSH2 0x26B JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x400 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x415 JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x42A JUMPI DUP1 PUSH4 0x508A109B EQ PUSH2 0x44A JUMPI DUP1 PUSH4 0x5190BC53 EQ PUSH2 0x46A JUMPI DUP1 PUSH4 0x52A9674B EQ PUSH2 0x493 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x2BE JUMPI DUP1 PUSH4 0x1EEAABEA EQ PUSH2 0x30C JUMPI DUP1 PUSH4 0x25E3BEDA EQ PUSH2 0x32E JUMPI DUP1 PUSH4 0x2BB1AE7C EQ PUSH2 0x370 JUMPI DUP1 PUSH4 0x2BBD59CA EQ PUSH2 0x383 JUMPI DUP1 PUSH4 0x301F07C3 EQ PUSH2 0x3C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x2B9 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F2 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x318 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x327 CALLDATASIZE PUSH1 0x4 PUSH2 0x311B JUMP JUMPDEST PUSH2 0x9E7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x303 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x37E CALLDATASIZE PUSH1 0x4 PUSH2 0x31D7 JUMP JUMPDEST PUSH2 0xA91 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x38F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3B3 PUSH2 0x39E CALLDATASIZE PUSH1 0x4 PUSH2 0x311B JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x303 SWAP2 SWAP1 PUSH2 0x3222 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x3DB CALLDATASIZE PUSH1 0x4 PUSH2 0x311B JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x303 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x40C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x362 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x421 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0xC34 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x436 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x445 CALLDATASIZE PUSH1 0x4 PUSH2 0x31D7 JUMP JUMPDEST PUSH2 0xC71 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x456 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x465 CALLDATASIZE PUSH1 0x4 PUSH2 0x324A JUMP JUMPDEST PUSH2 0xD17 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x476 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x485 CALLDATASIZE PUSH1 0x4 PUSH2 0x32FB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x49F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F2 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x4E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x311B JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x503 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x528 CALLDATASIZE PUSH1 0x4 PUSH2 0x32FB JUMP JUMPDEST PUSH2 0xFD9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x539 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3F0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x558 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x580 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x303 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x5B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x32FB JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH2 0x1010 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x5F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x32FB JUMP JUMPDEST PUSH2 0x1099 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x609 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x362 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x61F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x62E CALLDATASIZE PUSH1 0x4 PUSH2 0x311B JUMP JUMPDEST PUSH2 0x1116 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x11E1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x654 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x663 CALLDATASIZE PUSH1 0x4 PUSH2 0x311B JUMP JUMPDEST PUSH2 0x120C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x674 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x1240 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x689 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x0 PUSH2 0x2F2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x580 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x6E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x311B JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x71E PUSH2 0x719 CALLDATASIZE PUSH1 0x4 PUSH2 0x31D7 JUMP JUMPDEST PUSH2 0x12F4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x303 SWAP3 SWAP2 SWAP1 PUSH2 0x3368 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x738 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH2 0x747 CALLDATASIZE PUSH1 0x4 PUSH2 0x311B JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x765 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH2 0x580 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x778 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x580 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x580 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x7F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x32FB JUMP JUMPDEST PUSH2 0x1306 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x802 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x811 CALLDATASIZE PUSH1 0x4 PUSH2 0x32FB JUMP JUMPDEST PUSH2 0x13A4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x822 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x831 CALLDATASIZE PUSH1 0x4 PUSH2 0x32FB JUMP JUMPDEST PUSH2 0x1420 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x842 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F2 PUSH2 0x851 CALLDATASIZE PUSH1 0x4 PUSH2 0x339C JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x875 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x149F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x580 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x580 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x3F0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x8F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x32FB JUMP JUMPDEST PUSH2 0x150F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x580 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x93B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x951 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x985 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x994 CALLDATASIZE PUSH1 0x4 PUSH2 0x32FB JUMP JUMPDEST PUSH2 0x15E6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x9B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x311B JUMP JUMPDEST PUSH2 0x15F7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9D9 PUSH2 0x9D4 CALLDATASIZE PUSH1 0x4 PUSH2 0x33B7 JUMP JUMPDEST PUSH2 0x162B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x303 SWAP3 SWAP2 SWAP1 PUSH2 0x340E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA12 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD DUP2 SUB PUSH2 0xA57 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2164656C6179426C6F636B73 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLER DUP2 MSTORE DUP2 SWAP1 PUSH32 0x8BD16320F3B60336ED5FD2A770EB7453E7E71CFEF4462ADDFFD7AE9DFE201C8E SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x8 SSTORE JUMP JUMPDEST PUSH2 0xA99 PUSH2 0x17FA JUMP JUMPDEST NUMBER PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD PUSH2 0xAAA SWAP2 SWAP1 PUSH2 0x343D JUMP JUMPDEST GT ISZERO PUSH2 0xAC9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x46CF2AF1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST NUMBER PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB30 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB54 SWAP2 SWAP1 PUSH2 0x3450 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xBAA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1C9BDBDD08185B1C9958591E481CD95B9D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xBBF SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH2 0xBDA DUP2 DUP5 PUSH2 0x1847 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 SWAP1 PUSH2 0xC27 SWAP1 DUP4 SWAP1 DUP7 SWAP1 CALLER SWAP1 PUSH2 0x3469 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC5F JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC67 PUSH2 0x1884 JUMP JUMPDEST PUSH2 0xC6F PUSH2 0x18D4 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xCD2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA4E SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0xCDB DUP2 PUSH2 0x1929 JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0xD0C SWAP3 SWAP2 SWAP1 PUSH2 0x34A7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xD1F PUSH2 0x17FA JUMP JUMPDEST PUSH2 0xD27 PUSH2 0x19C9 JUMP JUMPDEST DUP4 PUSH2 0xD5E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x2170726F6F6673 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD73 JUMPI PUSH2 0xD73 PUSH2 0x34D1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD85 SWAP2 SWAP1 PUSH2 0x34E7 JUMP JUMPDEST PUSH2 0xD8F SWAP1 DUP1 PUSH2 0x3508 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9D SWAP3 SWAP2 SWAP1 PUSH2 0x3556 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xE04 DUP3 DUP9 DUP9 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xDC0 JUMPI PUSH2 0xDC0 PUSH2 0x34D1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xDD2 SWAP2 SWAP1 PUSH2 0x34E7 JUMP JUMPDEST PUSH1 0x20 ADD DUP10 DUP10 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xDE8 JUMPI PUSH2 0xDE8 PUSH2 0x34D1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xDFA SWAP2 SWAP1 PUSH2 0x34E7 JUMP JUMPDEST PUSH2 0x420 ADD CALLDATALOAD PUSH2 0x1A22 JUMP JUMPDEST SWAP1 POP PUSH2 0xE12 DUP2 DUP7 DUP7 DUP7 PUSH2 0x1AC9 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP7 SWAP1 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xF38 JUMPI DUP9 DUP9 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xE57 JUMPI PUSH2 0xE57 PUSH2 0x34D1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE69 SWAP2 SWAP1 PUSH2 0x34E7 JUMP JUMPDEST PUSH2 0xE73 SWAP1 DUP1 PUSH2 0x3508 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE81 SWAP3 SWAP2 SWAP1 PUSH2 0x3556 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP4 POP PUSH1 0x0 PUSH2 0xED6 DUP6 DUP12 DUP12 DUP6 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xEA9 JUMPI PUSH2 0xEA9 PUSH2 0x34D1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xEBB SWAP2 SWAP1 PUSH2 0x34E7 JUMP JUMPDEST PUSH1 0x20 ADD DUP13 DUP13 DUP7 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xDE8 JUMPI PUSH2 0xDE8 PUSH2 0x34D1 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0xF15 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x85CDA185C9959149BDBDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE ADD PUSH2 0xE31 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xFC4 JUMPI PUSH2 0xFBB DUP10 DUP10 DUP4 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xF65 JUMPI PUSH2 0xF65 PUSH2 0x34D1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xF77 SWAP2 SWAP1 PUSH2 0x34E7 JUMP JUMPDEST PUSH2 0xF81 SWAP1 DUP1 PUSH2 0x3508 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1BC4 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xF3C JUMP JUMPDEST POP POP POP POP PUSH2 0xFD2 PUSH1 0x1 PUSH1 0x7 SSTORE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1004 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x100D DUP2 PUSH2 0x1EA1 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1070 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1094 SWAP2 SWAP1 PUSH2 0x3450 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10C4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SELFBALANCE PUSH2 0x10CF DUP3 DUP3 PUSH2 0x1F0A JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEAFF4B37086828766AD3268786972C0CD24259D4C87A80F9D3963A3C3D999B0D DUP3 PUSH1 0x40 MLOAD PUSH2 0x110A SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1141 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1149 PUSH2 0x1884 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SUB PUSH2 0x119E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x616767726567617465526F6F742021657869737473 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xF51534ECF10A58DB36CE4F5180F59DEDDF3B3EB7C5E7454E602C2F80A40CC739 SWAP1 PUSH2 0xD0C SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC6F JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1237 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x100D DUP2 PUSH2 0x2028 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1289 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12AD SWAP2 SWAP1 PUSH2 0x3566 JUMP JUMPDEST PUSH2 0x12E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH2 0x12EC PUSH2 0x17FA JUMP JUMPDEST PUSH2 0xC6F PUSH2 0x2069 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1301 DUP4 PUSH2 0x1929 JUMP JUMPDEST SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1331 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x134F JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x136D JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x139B JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x100D DUP2 PUSH2 0x20AC JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x13CF JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x384859C5EF5FAFAC31E8BC92CE7FB48B1F2C74C4DD5E212EB84EC202FA5D9FAD SWAP2 ADD PUSH2 0xD0C JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x144B JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xD65ECA5D561D3A4568C87B9B13CED4AB52A69EDADFDFDB22D76BC595F36D7D87 SWAP2 ADD PUSH2 0xD0C JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x14CA JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x14DC SWAP2 SWAP1 PUSH2 0x3588 JUMP JUMPDEST GT PUSH2 0x14FA JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0xC6F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x20FA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x153A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0x1598 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616C72656164792077617463686572206D616E61676572000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC16D059E43D7F8E29CCB4E001A2F249D3C59E274925D6A6BC3912943441D9F6C SWAP1 PUSH1 0x20 ADD PUSH2 0xD0C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F1 DUP3 PUSH2 0x215F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1622 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x100D DUP2 PUSH2 0x218B JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x60 SWAP1 PUSH1 0xFF AND PUSH2 0x167C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x8585B1B1BDDDB1A5CDD1959 PUSH1 0xA2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP3 PUSH2 0x16A5 DUP4 PUSH2 0x359B JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH4 0xFFFFFFFF AND MUL OR SWAP1 SSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0x1704 PUSH32 0x0 PUSH2 0x16FB CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP5 DUP11 DUP11 DUP11 PUSH2 0x2209 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH4 0x2D287E43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2D287E43 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x177A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x179E SWAP2 SWAP1 PUSH2 0x35BE JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH32 0x40F08EE347FC927AE45902EDC87DEBB024AAB1A311943731968607F603F2152F DUP4 PUSH2 0x17D0 PUSH1 0x1 DUP5 PUSH2 0x3588 JUMP JUMPDEST DUP5 DUP8 PUSH1 0x40 MLOAD PUSH2 0x17E2 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x35E2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP SWAP1 SWAP9 SWAP2 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xC6F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x1880 SWAP1 PUSH32 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 DUP5 PUSH2 0x2241 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xC6F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH2 0x18DC PUSH2 0x1884 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x193E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x215F JUMP JUMPDEST PUSH2 0x197D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x10B6B4B93937B921B7B73732B1BA37B9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0x19B8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH2 0x100D PUSH2 0x19C4 DUP3 PUSH2 0x3611 JUMP JUMPDEST PUSH2 0x2441 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SLOAD SUB PUSH2 0x1A1B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1A48 JUMPI PUSH2 0x1A48 PUSH2 0x320C JUMP JUMPDEST EQ PUSH2 0x1A8B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x214D6573736167655374617475732E4E6F6E65 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH2 0x1ABF DUP5 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x256A SWAP1 POP JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1BBE JUMPI PUSH2 0x1AE8 DUP4 PUSH2 0x28B8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B1E DUP6 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x256A SWAP1 POP JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0x1B65 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1A5B9D985B1A59081A5B989BDD5B99149BDBDD PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP5 SWAP1 DUP7 SWAP1 PUSH32 0x7EC1EA51FE3DB53E55ED9D922854BC2156F467FF2F87D74E2086DAE2C84A88A8 SWAP1 PUSH2 0x1BB4 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1BD1 DUP4 DUP3 PUSH2 0x2A18 JUMP JUMPDEST SWAP1 POP PUSH4 0xFFFFFFFF PUSH32 0x0 AND PUSH2 0x1C09 PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x2A3C JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x1C4B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B232B9BA34B730BA34B7B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C5C PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x2A51 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1C83 JUMPI PUSH2 0x1C83 PUSH2 0x320C JUMP JUMPDEST EQ PUSH2 0x1CBA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x10B83937BB32B7 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x2 OR SWAP1 SSTORE PUSH1 0x1 PUSH2 0x1D1F PUSH32 0x0 PUSH32 0x0 PUSH2 0x343D JUMP JUMPDEST PUSH2 0x1D29 SWAP2 SWAP1 PUSH2 0x3588 JUMP JUMPDEST GAS GT PUSH2 0x1D60 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA4E SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x21676173 PUSH1 0xE0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D71 PUSH3 0xFFFFFF NOT DUP5 AND PUSH2 0x2A9A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH32 0x0 SWAP2 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x1DCC PUSH3 0xFFFFFF NOT DUP9 AND PUSH2 0x2AAB JUMP JUMPDEST PUSH2 0x1DDB PUSH3 0xFFFFFF NOT DUP10 AND PUSH2 0x2ABF JUMP JUMPDEST PUSH2 0x1DEA PUSH3 0xFFFFFF NOT DUP11 AND PUSH2 0x2AD4 JUMP JUMPDEST PUSH2 0x1E07 PUSH2 0x1DFC PUSH3 0xFFFFFF NOT DUP13 AND PUSH2 0x2AE9 JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND PUSH2 0x2B17 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1E1A SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3638 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xAB2DC3F5 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 POP PUSH2 0x1E54 DUP6 DUP6 PUSH1 0x0 DUP7 DUP6 PUSH2 0x2B60 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP10 POP SWAP3 POP PUSH32 0xD42DE95A9B26F1BE134C8ECCE389DC4FCFA18753D01661B7B361233569E8FE48 SWAP1 PUSH2 0x1E8D SWAP1 DUP9 SWAP1 DUP12 SWAP1 DUP7 SWAP1 PUSH2 0x3667 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x1F5A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1FA7 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1FAC JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2023 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA4E JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x10 SSTORE JUMP JUMPDEST PUSH2 0x2071 PUSH2 0x17FA JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x190C CALLER SWAP1 JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F1 PUSH32 0x0 DUP4 PUSH2 0x2BEB JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 SUB PUSH2 0x21CE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x85B995DC81C985D19481B1A5B5A5D PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0x8E7FA5E406CB856AAB05575E45EA011C6748376CC1B5229E3D67B92986406A15 SWAP2 ADD PUSH2 0xD0C JUMP JUMPDEST PUSH1 0x60 DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2226 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3688 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x2281 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x22BF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22CA CALLVALUE PUSH2 0x2D21 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x66C96B37 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x60 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP3 ADD DUP2 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x20 PUSH1 0x44 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0x66C96B37 SWAP1 PUSH1 0x84 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2348 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x236C SWAP2 SWAP1 PUSH2 0x3450 JUMP JUMPDEST SWAP1 POP PUSH2 0x2379 DUP3 PUSH1 0x1 PUSH2 0x343D JUMP JUMPDEST DUP2 LT PUSH2 0x23AF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x5 PUSH1 0x24 DUP3 ADD MSTORE PUSH5 0x2166656573 PUSH1 0xD8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xBD45C4E7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0xBD45C4E7 SWAP1 DUP5 SWAP1 PUSH2 0x2407 SWAP1 DUP10 SWAP1 DUP10 SWAP1 PUSH1 0x0 SWAP1 PUSH32 0x0 SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x4 ADD PUSH2 0x36E2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2420 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2434 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x247F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x6E657720726F6F7420656D707479 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x24D2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x726F6F7420616C72656164792070656E64696E67 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2527 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x3937B7BA1030B63932B0B23C90383937BB32B7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 NUMBER SWAP1 SSTORE MLOAD PUSH32 0x84EF18531155AFDB0E64FF905D67044AE3AAC63A6FBA4661CFD9C4C14F289BC8 SWAP1 PUSH2 0xD0C SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x5 DUP3 DUP2 SHL DUP3 AND SWAP5 DUP6 MSTORE DUP4 MLOAD SWAP5 DUP3 SUB SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x40 PUSH1 0x0 DUP2 DUP2 KECCAK256 PUSH1 0x2 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x4 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP3 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x8 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x10 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 DUP5 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 DUP4 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 SWAP1 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xE0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x100 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x200 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x120 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x400 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x140 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x800 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x160 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x1000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x2000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x4000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1C0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x8000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1E0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH3 0x10000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x20000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x220 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x40000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x240 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x80000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x260 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x100000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x280 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x200000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x400000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x800000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2E0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x1000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x300 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x2000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x320 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x4000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x340 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x8000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x360 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x10000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x380 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x20000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x40000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x80000000 SWAP1 SWAP5 AND ISZERO SWAP1 SWAP6 SHL SWAP2 DUP3 SWAP1 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x3E0 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x28FB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x616767726567617465526F6F7420656D707479 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2915 JUMPI POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x296B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x1859D9DC9959D85D19549BDBDD0808595E1A5CDD PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x2978 DUP3 NUMBER PUSH2 0x3588 JUMP JUMPDEST LT ISZERO PUSH2 0x29C6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616767726567617465526F6F7420217665726966696564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP4 SWAP2 PUSH32 0x36B314ABA9F663B4D3EF3288AE489341CC5E6A2725A05FA2B72DF7A27E03F42A SWAP2 LOG2 POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0x2A33 PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x2D37 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F1 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x28 PUSH1 0x4 PUSH2 0x2D74 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2A67 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2A87 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 SWAP2 KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F1 PUSH2 0x2AA8 DUP4 PUSH2 0x2DA4 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F1 PUSH3 0xFFFFFF NOT DUP4 AND DUP3 PUSH1 0x4 PUSH2 0x2D74 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F1 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x24 PUSH1 0x4 PUSH2 0x2D74 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F1 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x4 PUSH1 0x20 PUSH2 0x2DB5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F1 PUSH1 0x4C PUSH2 0x2B07 DUP2 PUSH1 0x18 DUP7 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x3588 JUMP JUMPDEST PUSH3 0xFFFFFF NOT DUP6 AND SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2EC0 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x2B2F DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x40 MLOAD SWAP2 POP DUP2 SWAP3 POP PUSH2 0x2B4F DUP5 DUP4 PUSH1 0x20 ADD PUSH2 0x2F3C JUMP JUMPDEST POP DUP2 DUP2 ADD PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH2 0xFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2B86 JUMPI PUSH2 0x2B86 PUSH2 0x3134 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2BB0 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP8 MLOAD PUSH1 0x20 DUP10 ADD DUP12 DUP15 DUP15 CALL SWAP2 POP RETURNDATASIZE SWAP3 POP DUP7 DUP4 GT ISZERO PUSH2 0x2BD1 JUMPI DUP7 SWAP3 POP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x2C51 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x10B2BC32B1BABA37B9 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0496D6A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2CB2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2CD6 SWAP2 SWAP1 PUSH2 0x3720 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0x2A33 JUMPI POP PUSH32 0x0 EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x10 SLOAD DUP3 GT ISZERO PUSH2 0x2D33 JUMPI PUSH1 0x10 SLOAD SWAP2 POP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2D44 DUP4 DUP6 PUSH2 0x343D JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x2D54 JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x2D69 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x2A33 DUP6 DUP6 DUP6 PUSH2 0x302F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D81 DUP3 PUSH1 0x20 PUSH2 0x3757 JUMP JUMPDEST PUSH2 0x2D8C SWAP1 PUSH1 0x8 PUSH2 0x3770 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x2D9A DUP6 DUP6 DUP6 PUSH2 0x2DB5 JUMP JUMPDEST SWAP1 SHR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F1 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x2C PUSH1 0x20 JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0x2DCA JUMPI POP PUSH1 0x0 PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x2DDD DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x2DF3 PUSH1 0xFF DUP5 AND DUP6 PUSH2 0x343D JUMP JUMPDEST GT ISZERO PUSH2 0x2E5B JUMPI PUSH2 0x2E0C DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2E1F DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x2E80 JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0x2E99 DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT DUP5 ADD SAR SWAP2 SWAP1 SWAP6 ADD MLOAD AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2ED6 DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH2 0x2EEA DUP7 PUSH2 0x30A6 JUMP JUMPDEST DUP5 PUSH2 0x2EF5 DUP8 DUP5 PUSH2 0x343D JUMP JUMPDEST PUSH2 0x2EFF SWAP2 SWAP1 PUSH2 0x343D JUMP JUMPDEST GT ISZERO PUSH2 0x2F12 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x2F34 JUMP JUMPDEST PUSH2 0x2F1C DUP6 DUP3 PUSH2 0x343D JUMP JUMPDEST SWAP1 POP PUSH2 0x2F30 DUP4 PUSH5 0xFFFFFFFFFF AND DUP3 DUP7 PUSH2 0x2D37 JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFFFFFF NOT DUP1 DUP5 AND SUB PUSH2 0x2F64 JUMPI PUSH1 0x40 MLOAD PUSH4 0x148D5133 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2F6D DUP4 PUSH2 0x30DF JUMP JUMPDEST ISZERO PUSH2 0x2F8B JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EE09491 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2FA0 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2FC0 DUP6 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD SWAP2 POP DUP6 DUP3 GT ISZERO PUSH2 0x2FE1 JUMPI PUSH1 0x20 PUSH1 0x60 REVERT JUMPDEST DUP4 DUP7 DUP6 DUP6 PUSH1 0x4 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x3009 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2AF1BD9B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3024 PUSH2 0x3016 DUP9 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND DUP8 DUP7 PUSH2 0x302F JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0x3057 JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0x3090 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x30BB DUP3 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x30CE DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x30EB DUP3 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH5 0xFFFFFFFFFF SUB PUSH2 0x3105 JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3110 DUP4 PUSH2 0x30A6 JUMP JUMPDEST PUSH1 0x40 MLOAD LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x312D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x315B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x3176 JUMPI PUSH2 0x3176 PUSH2 0x3134 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x319E JUMPI PUSH2 0x319E PUSH2 0x3134 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x31B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x31E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F34 DUP5 DUP3 DUP6 ADD PUSH2 0x314A JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH2 0x3244 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x460 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3263 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x327B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x328F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x329E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x32B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 DUP4 ADD SWAP8 POP SWAP6 POP POP DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x440 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x32D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x40 ADD SWAP4 CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x100D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x330D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1AC2 DUP2 PUSH2 0x32E6 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3333 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x331B JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x3354 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3318 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1ABF PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x333C JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3397 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1AC2 DUP3 PUSH2 0x3383 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x33CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x33D5 DUP5 PUSH2 0x3383 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x33F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3404 DUP7 DUP3 DUP8 ADD PUSH2 0x314A JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1ABF PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x333C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x15F1 JUMPI PUSH2 0x15F1 PUSH2 0x3427 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3462 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x347C PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x333C JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x348E DUP2 DUP7 PUSH2 0x333C JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x34BA PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x333C JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x43E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x34FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x351F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x353A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x354F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3578 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1AC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x15F1 JUMPI PUSH2 0x15F1 PUSH2 0x3427 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x35B4 JUMPI PUSH2 0x35B4 PUSH2 0x3427 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x35D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x3607 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x333C JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x3632 JUMPI PUSH1 0x0 NOT DUP2 PUSH1 0x20 SUB PUSH1 0x3 SHL SHL DUP3 AND SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3607 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x333C JUMP JUMPDEST DUP4 DUP2 MSTORE DUP3 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2A33 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x333C JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP1 DUP10 PUSH1 0xE0 SHL AND DUP4 MSTORE DUP8 PUSH1 0x4 DUP5 ADD MSTORE DUP1 DUP8 PUSH1 0xE0 SHL AND PUSH1 0x24 DUP5 ADD MSTORE DUP1 DUP7 PUSH1 0xE0 SHL AND PUSH1 0x28 DUP5 ADD MSTORE POP DUP4 PUSH1 0x2C DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x36D0 DUP2 PUSH1 0x4C DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x3318 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x4C ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND DUP4 MSTORE PUSH1 0xA0 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x3704 PUSH1 0xA0 DUP5 ADD DUP9 PUSH2 0x333C JUMP JUMPDEST SWAP6 AND PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3735 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH2 0x3740 DUP2 PUSH2 0x32E6 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x40 SWAP1 SWAP6 ADD MLOAD SWAP1 SWAP7 SWAP5 SWAP6 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x15F1 JUMPI PUSH2 0x15F1 PUSH2 0x3427 JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND MUL SWAP1 DUP2 AND SWAP1 DUP2 DUP2 EQ PUSH2 0x378C JUMPI PUSH2 0x378C PUSH2 0x3427 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER 0xCB JUMPI 0xDD LOG3 0xD0 0xD3 0xE1 0x29 0xBA PC 0x25 JUMP DUP9 SAR RETURNDATASIZE ORIGIN BYTE 0xC4 SUB DUP16 PUSH6 0xAD83464A601C PUSH12 0xC4318E64736F6C6343000811 STOP CALLER ","sourceMap":"241:1743:129:-:0;;;356:578;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;899:4;905:14;921:7;;693;708:13;899:4;741:12;761:16;785:11;804;823:12;843:7;858:15;;693:7;708:13;899:4;741:12;761:16;3038:21:116::1;3048:10;3038:9;:21::i;:::-;3105:7;:12;;3116:1;3105:12:::0;3097:37:::1;;;::::0;-1:-1:-1;;;3097:37:116;;1607:2:181;3097:37:116::1;::::0;::::1;1589:21:181::0;1646:2;1626:18;;;1619:30;-1:-1:-1;;;1665:18:181;;;1658:42;1717:18;;3097:37:116::1;;;;;;;;;-1:-1:-1::0;;;;;3148:26:116;::::1;3140:56;;;::::0;-1:-1:-1;;;3140:56:116;;1948:2:181;3140:56:116::1;::::0;::::1;1930:21:181::0;1987:2;1967:18;;;1960:30;-1:-1:-1;;;2006:18:181;;;1999:47;2063:18;;3140:56:116::1;1746:341:181::0;3140:56:116::1;3308:16;::::0;;::::1;;::::0;-1:-1:-1;;;;;3330:10:116;;::::1;;::::0;3346:27;;::::1;;::::0;3379:29;;::::1;;::::0;3449:30;::::1;::::0;3445:88:::1;;3489:37;3509:16:::0;3489:19:::1;:37::i;:::-;3544:74;::::0;;-1:-1:-1;;;;;2350:15:181;;;2332:34;;2402:15;;;2397:2;2382:18;;2375:43;2454:15;;2434:18;;;2427:43;3544:74:116;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;2282:2:181;3544:74:116;;::::1;-1:-1:-1::0;;996:7:51;:15;;-1:-1:-1;;;;996:15:51;;;-1:-1:-1;;1056:14:114::1;:48:::0;;-1:-1:-1;;;;;;1056:48:114::1;-1:-1:-1::0;;;;;1056:48:114;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;1821:7:52;:22;7305:11:120::3;7291:25:::0;::::3;7283:50;;;::::0;-1:-1:-1;;;7283:50:120;;2683:2:181;7283:50:120::3;::::0;::::3;2665:21:181::0;2722:2;2702:18;;;2695:30;-1:-1:-1;;;2741:18:181;;;2734:42;2793:18;;7283:50:120::3;2481:336:181::0;7283:50:120::3;7361:10;7347:11;:24;7339:49;;;::::0;-1:-1:-1;;;7339:49:120;;3024:2:181;7339:49:120::3;::::0;::::3;3006:21:181::0;3063:2;3043:18;;;3036:30;-1:-1:-1;;;3082:18:181;;;3075:42;3134:18;;7339:49:120::3;2822:336:181::0;7339:49:120::3;7394:25;::::0;;;7425::::3;::::0;;;-1:-1:-1;;;;;7465:21:120;::::3;7457:46;;;::::0;-1:-1:-1;;;7457:46:120;;3365:2:181;7457:46:120::3;::::0;::::3;3347:21:181::0;3404:2;3384:18;;;3377:30;-1:-1:-1;;;3423:18:181;;;3416:42;3475:18;;7457:46:120::3;3163:336:181::0;7457:46:120::3;-1:-1:-1::0;;;;;;7509:35:120::3;;::::0;7551:11:::3;:26:::0;-1:-1:-1;791:19:118;;-1:-1:-1;802:7:118;;-1:-1:-1;;791:10:118;:19;-1:-1:-1;;;791:19:118:i;:::-;756:59;639:14:127::1;657:1;639:19:::0;631:46:::1;;;::::0;-1:-1:-1;;;631:46:127;;3706:2:181;631:46:127::1;::::0;::::1;3688:21:181::0;3745:2;3725:18;;;3718:30;-1:-1:-1;;;3764:18:181;;;3757:44;3818:18;;631:46:127::1;3504:338:181::0;631:46:127::1;739:4;-1:-1:-1::0;;;;;728:25:127::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;717:38:127::1;;::::0;;;761:44:::1;;;::::0;-1:-1:-1;;;761:44:127;;4262:2:181;761:44:127::1;::::0;::::1;4244:21:181::0;4301:1;4281:18;;;4274:29;-1:-1:-1;;;4319:18:181;;;4312:39;4368:18;;761:44:127::1;4060:332:181::0;761:44:127::1;-1:-1:-1::0;811:32:127::1;::::0;-1:-1:-1;241:1743:129;;-1:-1:-1;;;;;;;;;;;;241:1743:129;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;5838::116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;4609:34:181;;4679:15;;;4674:2;4659:18;;4652:43;5921:57:116;;4544:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;1089:114:118:-;1160:6;;1146:30;;;4880:25:181;;;4936:2;4921:18;;4914:34;;;1146:30:118;;4853:18:181;1146:30:118;;;;;;;1182:6;:16;1089:114::o;14:167:181:-;92:13;;145:10;134:22;;124:33;;114:61;;171:1;168;161:12;114:61;14:167;;;:::o;186:177::-;265:13;;-1:-1:-1;;;;;307:31:181;;297:42;;287:70;;353:1;350;343:12;368:1032;535:6;543;551;559;567;575;583;591;599;607;615:7;624;678:3;666:9;657:7;653:23;649:33;646:53;;;695:1;692;685:12;646:53;718:39;747:9;718:39;:::i;:::-;708:49;;776:48;820:2;809:9;805:18;776:48;:::i;:::-;766:58;;843:49;888:2;877:9;873:18;843:49;:::i;:::-;833:59;;911:49;956:2;945:9;941:18;911:49;:::i;:::-;901:59;;979:50;1024:3;1013:9;1009:19;979:50;:::i;:::-;969:60;;1069:3;1058:9;1054:19;1048:26;1038:36;;1114:3;1103:9;1099:19;1093:26;1083:36;;1159:3;1148:9;1144:19;1138:26;1128:36;;1183:50;1228:3;1217:9;1213:19;1183:50;:::i;:::-;1173:60;;1252:50;1297:3;1286:9;1282:19;1252:50;:::i;:::-;1242:60;;1343:3;1332:9;1328:19;1322:26;1311:37;;1389:3;1378:9;1374:19;1368:26;1357:37;;368:1032;;;;;;;;;;;;;;:::o;3847:208::-;3917:6;3970:2;3958:9;3949:7;3945:23;3941:32;3938:52;;;3986:1;3983;3976:12;3938:52;4009:40;4039:9;4009:40;:::i;:::-;3999:50;3847:208;-1:-1:-1;;;3847:208:181:o;4706:248::-;241:1743:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@AMB_39042":{"entryPoint":null,"id":39042,"parameterSlots":0,"returnSlots":0},"@DOMAIN_39039":{"entryPoint":null,"id":39039,"parameterSlots":0,"returnSlots":0},"@MERKLE_39550":{"entryPoint":null,"id":39550,"parameterSlots":0,"returnSlots":0},"@MIRROR_DOMAIN_39048":{"entryPoint":null,"id":39048,"parameterSlots":0,"returnSlots":0},"@PROCESS_GAS_39553":{"entryPoint":null,"id":39553,"parameterSlots":0,"returnSlots":0},"@RESERVE_GAS_39556":{"entryPoint":null,"id":39556,"parameterSlots":0,"returnSlots":0},"@ROOT_MANAGER_39045":{"entryPoint":null,"id":39045,"parameterSlots":0,"returnSlots":0},"@_39157":{"entryPoint":null,"id":39157,"parameterSlots":0,"returnSlots":0},"@_getGas_39366":{"entryPoint":11553,"id":39366,"parameterSlots":1,"returnSlots":1},"@_msgSender_11496":{"entryPoint":null,"id":11496,"parameterSlots":0,"returnSlots":1},"@_nonReentrantAfter_10733":{"entryPoint":null,"id":10733,"parameterSlots":0,"returnSlots":0},"@_nonReentrantBefore_10725":{"entryPoint":6601,"id":10725,"parameterSlots":0,"returnSlots":0},"@_pause_10663":{"entryPoint":8297,"id":10663,"parameterSlots":0,"returnSlots":0},"@_processMessage_42206":{"entryPoint":6441,"id":42206,"parameterSlots":1,"returnSlots":0},"@_requireNotPaused_10636":{"entryPoint":6138,"id":10636,"parameterSlots":0,"returnSlots":0},"@_requirePaused_10647":{"entryPoint":6276,"id":10647,"parameterSlots":0,"returnSlots":0},"@_sendMessage_41959":{"entryPoint":8769,"id":41959,"parameterSlots":4,"returnSlots":0},"@_sendMessage_42222":{"entryPoint":6215,"id":42222,"parameterSlots":2,"returnSlots":0},"@_setGasCap_39346":{"entryPoint":8232,"id":39346,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":7841,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":8442,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":8364,"id":49927,"parameterSlots":1,"returnSlots":0},"@_setRateLimitBlocks_49687":{"entryPoint":8587,"id":49687,"parameterSlots":1,"returnSlots":0},"@_unpause_10679":{"entryPoint":6356,"id":10679,"parameterSlots":0,"returnSlots":0},"@_verifySender_41995":{"entryPoint":11243,"id":41995,"parameterSlots":2,"returnSlots":1},"@_verifySender_42236":{"entryPoint":8543,"id":42236,"parameterSlots":1,"returnSlots":1},"@acceptProposedOwner_49887":{"entryPoint":5279,"id":49887,"parameterSlots":0,"returnSlots":0},"@addSender_39706":{"entryPoint":5152,"id":39706,"parameterSlots":1,"returnSlots":0},"@addressToBytes32_50168":{"entryPoint":null,"id":50168,"parameterSlots":1,"returnSlots":1},"@allowlistedSenders_39581":{"entryPoint":null,"id":39581,"parameterSlots":0,"returnSlots":0},"@anyExecute_41881":{"entryPoint":4852,"id":41881,"parameterSlots":1,"returnSlots":2},"@body_49194":{"entryPoint":10985,"id":49194,"parameterSlots":1,"returnSlots":1},"@branchRoot_48998":{"entryPoint":9578,"id":48998,"parameterSlots":3,"returnSlots":1},"@build_50565":{"entryPoint":11575,"id":50565,"parameterSlots":3,"returnSlots":1},"@bytes32ToAddress_50187":{"entryPoint":null,"id":50187,"parameterSlots":1,"returnSlots":1},"@calculateMessageRoot_40253":{"entryPoint":6690,"id":40253,"parameterSlots":3,"returnSlots":1},"@clone_51141":{"entryPoint":11031,"id":51141,"parameterSlots":1,"returnSlots":1},"@delayBlocks_39546":{"entryPoint":null,"id":39546,"parameterSlots":0,"returnSlots":0},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@destination_49143":{"entryPoint":10812,"id":49143,"parameterSlots":1,"returnSlots":1},"@dispatch_39974":{"entryPoint":5675,"id":39974,"parameterSlots":3,"returnSlots":2},"@end_50683":{"entryPoint":12454,"id":50683,"parameterSlots":1,"returnSlots":1},"@excessivelySafeCall_50045":{"entryPoint":11104,"id":50045,"parameterSlots":5,"returnSlots":2},"@formatMessage_49044":{"entryPoint":8713,"id":49044,"parameterSlots":6,"returnSlots":1},"@home_39271":{"entryPoint":null,"id":39271,"parameterSlots":0,"returnSlots":1},"@indexUint_50882":{"entryPoint":11636,"id":50882,"parameterSlots":3,"returnSlots":1},"@index_50852":{"entryPoint":11701,"id":50852,"parameterSlots":3,"returnSlots":1},"@isNotValid_50403":{"entryPoint":12511,"id":50403,"parameterSlots":1,"returnSlots":1},"@isNull_50364":{"entryPoint":null,"id":50364,"parameterSlots":1,"returnSlots":1},"@isReplica_39286":{"entryPoint":null,"id":39286,"parameterSlots":1,"returnSlots":1},"@keccak_50951":{"entryPoint":10833,"id":50951,"parameterSlots":1,"returnSlots":1},"@lastSentBlock_49642":{"entryPoint":null,"id":49642,"parameterSlots":0,"returnSlots":0},"@leftMask_50342":{"entryPoint":null,"id":50342,"parameterSlots":1,"returnSlots":1},"@len_50665":{"entryPoint":null,"id":50665,"parameterSlots":1,"returnSlots":1},"@loc_50615":{"entryPoint":null,"id":50615,"parameterSlots":1,"returnSlots":1},"@localDomain_39855":{"entryPoint":null,"id":39855,"parameterSlots":0,"returnSlots":1},"@messages_39592":{"entryPoint":null,"id":39592,"parameterSlots":0,"returnSlots":0},"@mirrorConnector_39051":{"entryPoint":null,"id":39051,"parameterSlots":0,"returnSlots":0},"@nonce_49125":{"entryPoint":10943,"id":49125,"parameterSlots":1,"returnSlots":1},"@nonces_39586":{"entryPoint":null,"id":39586,"parameterSlots":0,"returnSlots":0},"@origin_49092":{"entryPoint":10923,"id":49092,"parameterSlots":1,"returnSlots":1},"@outboundRoot_39845":{"entryPoint":4112,"id":39845,"parameterSlots":0,"returnSlots":1},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@pause_38913":{"entryPoint":4672,"id":38913,"parameterSlots":0,"returnSlots":0},"@paused_10624":{"entryPoint":null,"id":10624,"parameterSlots":0,"returnSlots":1},"@pendingAggregateRoots_39561":{"entryPoint":null,"id":39561,"parameterSlots":0,"returnSlots":0},"@processMessage_39189":{"entryPoint":3185,"id":39189,"parameterSlots":1,"returnSlots":0},"@process_40427":{"entryPoint":7108,"id":40427,"parameterSlots":1,"returnSlots":1},"@proposeNewOwner_49841":{"entryPoint":4870,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@proveAndProcess_40115":{"entryPoint":3351,"id":40115,"parameterSlots":5,"returnSlots":0},"@proveMessageRoot_40306":{"entryPoint":6857,"id":40306,"parameterSlots":4,"returnSlots":0},"@provenAggregateRoots_39566":{"entryPoint":null,"id":39566,"parameterSlots":0,"returnSlots":0},"@provenMessageRoots_39571":{"entryPoint":null,"id":39571,"parameterSlots":0,"returnSlots":0},"@rateLimitBlocks_49639":{"entryPoint":null,"id":49639,"parameterSlots":0,"returnSlots":0},"@receiveAggregateRoot_40160":{"entryPoint":9281,"id":40160,"parameterSlots":1,"returnSlots":0},"@recipientAddress_49174":{"entryPoint":10906,"id":49174,"parameterSlots":1,"returnSlots":1},"@recipient_49158":{"entryPoint":11684,"id":49158,"parameterSlots":1,"returnSlots":1},"@ref_50591":{"entryPoint":10776,"id":50591,"parameterSlots":2,"returnSlots":1},"@removePendingAggregateRoot_39792":{"entryPoint":4374,"id":39792,"parameterSlots":1,"returnSlots":0},"@removeSender_39724":{"entryPoint":5028,"id":39724,"parameterSlots":1,"returnSlots":0},"@renounceOwnership_42174":{"entryPoint":4577,"id":42174,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@sendValue_11206":{"entryPoint":7946,"id":11206,"parameterSlots":2,"returnSlots":0},"@send_39906":{"entryPoint":2705,"id":39906,"parameterSlots":1,"returnSlots":0},"@sender_49107":{"entryPoint":10964,"id":49107,"parameterSlots":1,"returnSlots":1},"@sentMessageRoots_39576":{"entryPoint":null,"id":39576,"parameterSlots":0,"returnSlots":0},"@setDelayBlocks_39750":{"entryPoint":2535,"id":39750,"parameterSlots":1,"returnSlots":0},"@setGasCap_39330":{"entryPoint":4620,"id":39330,"parameterSlots":1,"returnSlots":0},"@setMirrorConnector_39170":{"entryPoint":4057,"id":39170,"parameterSlots":1,"returnSlots":0},"@setRateLimitBlocks_39763":{"entryPoint":5623,"id":39763,"parameterSlots":1,"returnSlots":0},"@setWatcherManager_38881":{"entryPoint":5391,"id":38881,"parameterSlots":1,"returnSlots":0},"@slice_50729":{"entryPoint":11968,"id":50729,"parameterSlots":4,"returnSlots":1},"@typeOf_50601":{"entryPoint":null,"id":50601,"parameterSlots":1,"returnSlots":1},"@unpause_38893":{"entryPoint":3124,"id":38893,"parameterSlots":0,"returnSlots":0},"@unsafeBuildUnchecked_50530":{"entryPoint":12335,"id":50530,"parameterSlots":3,"returnSlots":1},"@unsafeCopyTo_51113":{"entryPoint":12092,"id":51113,"parameterSlots":2,"returnSlots":1},"@verifyAggregateRoot_40221":{"entryPoint":10424,"id":40221,"parameterSlots":1,"returnSlots":0},"@verifySender_39202":{"entryPoint":5606,"id":39202,"parameterSlots":1,"returnSlots":1},"@watcherManager_38824":{"entryPoint":null,"id":38824,"parameterSlots":0,"returnSlots":0},"@withdrawFunds_39824":{"entryPoint":4249,"id":39824,"parameterSlots":1,"returnSlots":0},"abi_decode_bytes":{"entryPoint":12618,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":13051,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_uint256t_uint256_fromMemory":{"entryPoint":14112,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256":{"entryPoint":12874,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":13670,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32_fromMemory":{"entryPoint":13392,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_uint256_fromMemory":{"entryPoint":13758,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes_memory_ptr":{"entryPoint":12759,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":12571,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32":{"entryPoint":13212,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr":{"entryPoint":13239,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_uint32":{"entryPoint":13187,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_bytes":{"entryPoint":13116,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":13654,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":13960,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_bytes_memory_ptr_t_address_t_uint256_t_rational_2_by_1__to_t_address_t_bytes_memory_ptr_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":14050,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool_t_bytes_memory_ptr__to_t_bool_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13160,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13927,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13326,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13794,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":13479,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":13417,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed":{"entryPoint":12834,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_78201d9d8a76cb57609402a557d055ee4f4bd3859f343728f9681a9fe9675816__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_867777f634bb94108a594889ab4f827c256cf5677bbf34c222dbb2e03cd5a0d3__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_t_uint256_t_rational_32_by_1__to_t_string_memory_ptr_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13880,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"access_calldata_tail_t_bytes_calldata_ptr":{"entryPoint":13576,"id":null,"parameterSlots":2,"returnSlots":2},"access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr":{"entryPoint":13543,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":13373,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint8":{"entryPoint":14192,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":13704,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint8":{"entryPoint":14167,"id":null,"parameterSlots":2,"returnSlots":1},"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32":{"entryPoint":13841,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":13080,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint32":{"entryPoint":13723,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":13351,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":12812,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":13521,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":12596,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":13030,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:27406:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"113:93:181","statements":[{"nodeType":"YulAssignment","src":"123:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"135:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"146:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"131:3:181"},"nodeType":"YulFunctionCall","src":"131:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"123:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"165:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"180:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"188:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"176:3:181"},"nodeType":"YulFunctionCall","src":"176:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"158:6:181"},"nodeType":"YulFunctionCall","src":"158:42:181"},"nodeType":"YulExpressionStatement","src":"158:42:181"}]},"name":"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"82:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"93:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"104:4:181","type":""}],"src":"14:192:181"},{"body":{"nodeType":"YulBlock","src":"281:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"327:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"336:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"339:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"329:6:181"},"nodeType":"YulFunctionCall","src":"329:12:181"},"nodeType":"YulExpressionStatement","src":"329:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"302:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"311:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"298:3:181"},"nodeType":"YulFunctionCall","src":"298:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"323:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"294:3:181"},"nodeType":"YulFunctionCall","src":"294:32:181"},"nodeType":"YulIf","src":"291:52:181"},{"nodeType":"YulAssignment","src":"352:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"375:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"362:12:181"},"nodeType":"YulFunctionCall","src":"362:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"352:6:181"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"247:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"258:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"270:6:181","type":""}],"src":"211:180:181"},{"body":{"nodeType":"YulBlock","src":"497:76:181","statements":[{"nodeType":"YulAssignment","src":"507:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"519:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"530:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"515:3:181"},"nodeType":"YulFunctionCall","src":"515:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"507:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"549:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"560:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"542:6:181"},"nodeType":"YulFunctionCall","src":"542:25:181"},"nodeType":"YulExpressionStatement","src":"542:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"466:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"477:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"488:4:181","type":""}],"src":"396:177:181"},{"body":{"nodeType":"YulBlock","src":"610:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"627:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"634:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"639:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"630:3:181"},"nodeType":"YulFunctionCall","src":"630:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"620:6:181"},"nodeType":"YulFunctionCall","src":"620:31:181"},"nodeType":"YulExpressionStatement","src":"620:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"667:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"670:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"660:6:181"},"nodeType":"YulFunctionCall","src":"660:15:181"},"nodeType":"YulExpressionStatement","src":"660:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"691:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"694:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"684:6:181"},"nodeType":"YulFunctionCall","src":"684:15:181"},"nodeType":"YulExpressionStatement","src":"684:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"578:127:181"},{"body":{"nodeType":"YulBlock","src":"762:666:181","statements":[{"body":{"nodeType":"YulBlock","src":"811:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"820:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"823:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"813:6:181"},"nodeType":"YulFunctionCall","src":"813:12:181"},"nodeType":"YulExpressionStatement","src":"813:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"790:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"798:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"786:3:181"},"nodeType":"YulFunctionCall","src":"786:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"805:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"782:3:181"},"nodeType":"YulFunctionCall","src":"782:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"775:6:181"},"nodeType":"YulFunctionCall","src":"775:35:181"},"nodeType":"YulIf","src":"772:55:181"},{"nodeType":"YulVariableDeclaration","src":"836:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"859:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"846:12:181"},"nodeType":"YulFunctionCall","src":"846:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"840:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"875:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"885:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"879:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"926:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"928:16:181"},"nodeType":"YulFunctionCall","src":"928:18:181"},"nodeType":"YulExpressionStatement","src":"928:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"918:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"922:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"915:2:181"},"nodeType":"YulFunctionCall","src":"915:10:181"},"nodeType":"YulIf","src":"912:36:181"},{"nodeType":"YulVariableDeclaration","src":"957:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"971:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"967:3:181"},"nodeType":"YulFunctionCall","src":"967:7:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"961:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"983:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1003:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"997:5:181"},"nodeType":"YulFunctionCall","src":"997:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"987:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1015:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1037:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1061:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1065:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1057:3:181"},"nodeType":"YulFunctionCall","src":"1057:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1072:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1053:3:181"},"nodeType":"YulFunctionCall","src":"1053:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"1077:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1049:3:181"},"nodeType":"YulFunctionCall","src":"1049:31:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1082:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1045:3:181"},"nodeType":"YulFunctionCall","src":"1045:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1033:3:181"},"nodeType":"YulFunctionCall","src":"1033:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1019:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1145:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1147:16:181"},"nodeType":"YulFunctionCall","src":"1147:18:181"},"nodeType":"YulExpressionStatement","src":"1147:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1104:10:181"},{"name":"_2","nodeType":"YulIdentifier","src":"1116:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1101:2:181"},"nodeType":"YulFunctionCall","src":"1101:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1124:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1136:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1121:2:181"},"nodeType":"YulFunctionCall","src":"1121:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1098:2:181"},"nodeType":"YulFunctionCall","src":"1098:46:181"},"nodeType":"YulIf","src":"1095:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1183:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1187:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1176:6:181"},"nodeType":"YulFunctionCall","src":"1176:22:181"},"nodeType":"YulExpressionStatement","src":"1176:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1214:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1222:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1207:6:181"},"nodeType":"YulFunctionCall","src":"1207:18:181"},"nodeType":"YulExpressionStatement","src":"1207:18:181"},{"body":{"nodeType":"YulBlock","src":"1273:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1282:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1285:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1275:6:181"},"nodeType":"YulFunctionCall","src":"1275:12:181"},"nodeType":"YulExpressionStatement","src":"1275:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1248:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1256:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1244:3:181"},"nodeType":"YulFunctionCall","src":"1244:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1261:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1240:3:181"},"nodeType":"YulFunctionCall","src":"1240:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"1268:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1237:2:181"},"nodeType":"YulFunctionCall","src":"1237:35:181"},"nodeType":"YulIf","src":"1234:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1315:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1323:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1311:3:181"},"nodeType":"YulFunctionCall","src":"1311:17:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1334:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1342:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1330:3:181"},"nodeType":"YulFunctionCall","src":"1330:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1349:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1298:12:181"},"nodeType":"YulFunctionCall","src":"1298:54:181"},"nodeType":"YulExpressionStatement","src":"1298:54:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1376:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1384:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1372:3:181"},"nodeType":"YulFunctionCall","src":"1372:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1389:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1368:3:181"},"nodeType":"YulFunctionCall","src":"1368:26:181"},{"kind":"number","nodeType":"YulLiteral","src":"1396:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1361:6:181"},"nodeType":"YulFunctionCall","src":"1361:37:181"},"nodeType":"YulExpressionStatement","src":"1361:37:181"},{"nodeType":"YulAssignment","src":"1407:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1416:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1407:5:181"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"736:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"744:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"752:5:181","type":""}],"src":"710:718:181"},{"body":{"nodeType":"YulBlock","src":"1512:241:181","statements":[{"body":{"nodeType":"YulBlock","src":"1558:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1567:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1570:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1560:6:181"},"nodeType":"YulFunctionCall","src":"1560:12:181"},"nodeType":"YulExpressionStatement","src":"1560:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1533:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1542:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1529:3:181"},"nodeType":"YulFunctionCall","src":"1529:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1554:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1525:3:181"},"nodeType":"YulFunctionCall","src":"1525:32:181"},"nodeType":"YulIf","src":"1522:52:181"},{"nodeType":"YulVariableDeclaration","src":"1583:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1610:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1597:12:181"},"nodeType":"YulFunctionCall","src":"1597:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1587:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1663:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1672:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1675:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1665:6:181"},"nodeType":"YulFunctionCall","src":"1665:12:181"},"nodeType":"YulExpressionStatement","src":"1665:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1635:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1643:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1632:2:181"},"nodeType":"YulFunctionCall","src":"1632:30:181"},"nodeType":"YulIf","src":"1629:50:181"},{"nodeType":"YulAssignment","src":"1688:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1719:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1730:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1715:3:181"},"nodeType":"YulFunctionCall","src":"1715:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1739:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"1698:16:181"},"nodeType":"YulFunctionCall","src":"1698:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1688:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1478:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1489:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1501:6:181","type":""}],"src":"1433:320:181"},{"body":{"nodeType":"YulBlock","src":"1828:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"1874:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1883:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1886:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1876:6:181"},"nodeType":"YulFunctionCall","src":"1876:12:181"},"nodeType":"YulExpressionStatement","src":"1876:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1849:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1858:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1845:3:181"},"nodeType":"YulFunctionCall","src":"1845:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1870:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1841:3:181"},"nodeType":"YulFunctionCall","src":"1841:32:181"},"nodeType":"YulIf","src":"1838:52:181"},{"nodeType":"YulAssignment","src":"1899:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1922:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1909:12:181"},"nodeType":"YulFunctionCall","src":"1909:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1899:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1794:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1805:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1817:6:181","type":""}],"src":"1758:180:181"},{"body":{"nodeType":"YulBlock","src":"1975:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1992:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1999:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2004:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1995:3:181"},"nodeType":"YulFunctionCall","src":"1995:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1985:6:181"},"nodeType":"YulFunctionCall","src":"1985:31:181"},"nodeType":"YulExpressionStatement","src":"1985:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2032:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2035:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2025:6:181"},"nodeType":"YulFunctionCall","src":"2025:15:181"},"nodeType":"YulExpressionStatement","src":"2025:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2056:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2059:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2049:6:181"},"nodeType":"YulFunctionCall","src":"2049:15:181"},"nodeType":"YulExpressionStatement","src":"2049:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"1943:127:181"},{"body":{"nodeType":"YulBlock","src":"2193:229:181","statements":[{"nodeType":"YulAssignment","src":"2203:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2215:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2226:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2211:3:181"},"nodeType":"YulFunctionCall","src":"2211:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2203:4:181"}]},{"body":{"nodeType":"YulBlock","src":"2271:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2292:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2299:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2304:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2295:3:181"},"nodeType":"YulFunctionCall","src":"2295:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2285:6:181"},"nodeType":"YulFunctionCall","src":"2285:31:181"},"nodeType":"YulExpressionStatement","src":"2285:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2336:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2339:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2329:6:181"},"nodeType":"YulFunctionCall","src":"2329:15:181"},"nodeType":"YulExpressionStatement","src":"2329:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2364:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2367:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2357:6:181"},"nodeType":"YulFunctionCall","src":"2357:15:181"},"nodeType":"YulExpressionStatement","src":"2357:15:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2251:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2259:1:181","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2248:2:181"},"nodeType":"YulFunctionCall","src":"2248:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2241:6:181"},"nodeType":"YulFunctionCall","src":"2241:21:181"},"nodeType":"YulIf","src":"2238:144:181"},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2398:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"2409:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2391:6:181"},"nodeType":"YulFunctionCall","src":"2391:25:181"},"nodeType":"YulExpressionStatement","src":"2391:25:181"}]},"name":"abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2162:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2173:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2184:4:181","type":""}],"src":"2075:347:181"},{"body":{"nodeType":"YulBlock","src":"2522:92:181","statements":[{"nodeType":"YulAssignment","src":"2532:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2544:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2555:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2540:3:181"},"nodeType":"YulFunctionCall","src":"2540:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2532:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2574:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2599:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2592:6:181"},"nodeType":"YulFunctionCall","src":"2592:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2585:6:181"},"nodeType":"YulFunctionCall","src":"2585:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2567:6:181"},"nodeType":"YulFunctionCall","src":"2567:41:181"},"nodeType":"YulExpressionStatement","src":"2567:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2491:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2502:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2513:4:181","type":""}],"src":"2427:187:181"},{"body":{"nodeType":"YulBlock","src":"2827:724:181","statements":[{"body":{"nodeType":"YulBlock","src":"2875:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2884:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2887:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2877:6:181"},"nodeType":"YulFunctionCall","src":"2877:12:181"},"nodeType":"YulExpressionStatement","src":"2877:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2848:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2857:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2844:3:181"},"nodeType":"YulFunctionCall","src":"2844:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2869:4:181","type":"","value":"1120"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2840:3:181"},"nodeType":"YulFunctionCall","src":"2840:34:181"},"nodeType":"YulIf","src":"2837:54:181"},{"nodeType":"YulVariableDeclaration","src":"2900:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2927:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2914:12:181"},"nodeType":"YulFunctionCall","src":"2914:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2904:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2946:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2956:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2950:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3001:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3010:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3013:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3003:6:181"},"nodeType":"YulFunctionCall","src":"3003:12:181"},"nodeType":"YulExpressionStatement","src":"3003:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2989:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2997:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2986:2:181"},"nodeType":"YulFunctionCall","src":"2986:14:181"},"nodeType":"YulIf","src":"2983:34:181"},{"nodeType":"YulVariableDeclaration","src":"3026:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3040:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"3051:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3036:3:181"},"nodeType":"YulFunctionCall","src":"3036:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"3030:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3106:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3115:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3118:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3108:6:181"},"nodeType":"YulFunctionCall","src":"3108:12:181"},"nodeType":"YulExpressionStatement","src":"3108:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3085:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3089:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3081:3:181"},"nodeType":"YulFunctionCall","src":"3081:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3096:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3077:3:181"},"nodeType":"YulFunctionCall","src":"3077:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3070:6:181"},"nodeType":"YulFunctionCall","src":"3070:35:181"},"nodeType":"YulIf","src":"3067:55:181"},{"nodeType":"YulVariableDeclaration","src":"3131:30:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3158:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3145:12:181"},"nodeType":"YulFunctionCall","src":"3145:16:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3135:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3188:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3197:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3200:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3190:6:181"},"nodeType":"YulFunctionCall","src":"3190:12:181"},"nodeType":"YulExpressionStatement","src":"3190:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3176:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3184:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3173:2:181"},"nodeType":"YulFunctionCall","src":"3173:14:181"},"nodeType":"YulIf","src":"3170:34:181"},{"body":{"nodeType":"YulBlock","src":"3264:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3273:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3276:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3266:6:181"},"nodeType":"YulFunctionCall","src":"3266:12:181"},"nodeType":"YulExpressionStatement","src":"3266:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3227:2:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3235:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"3238:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3231:3:181"},"nodeType":"YulFunctionCall","src":"3231:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3223:3:181"},"nodeType":"YulFunctionCall","src":"3223:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3248:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3219:3:181"},"nodeType":"YulFunctionCall","src":"3219:34:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3255:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3216:2:181"},"nodeType":"YulFunctionCall","src":"3216:47:181"},"nodeType":"YulIf","src":"3213:67:181"},{"nodeType":"YulAssignment","src":"3289:23:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3303:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3307:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3299:3:181"},"nodeType":"YulFunctionCall","src":"3299:13:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3289:6:181"}]},{"nodeType":"YulAssignment","src":"3321:16:181","value":{"name":"length","nodeType":"YulIdentifier","src":"3331:6:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3321:6:181"}]},{"nodeType":"YulAssignment","src":"3346:44:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3373:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3384:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3369:3:181"},"nodeType":"YulFunctionCall","src":"3369:20:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3356:12:181"},"nodeType":"YulFunctionCall","src":"3356:34:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3346:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3399:30:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3413:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3424:4:181","type":"","value":"1088"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3409:3:181"},"nodeType":"YulFunctionCall","src":"3409:20:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"3403:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3457:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3466:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3469:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3459:6:181"},"nodeType":"YulFunctionCall","src":"3459:12:181"},"nodeType":"YulExpressionStatement","src":"3459:12:181"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3444:2:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3448:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3441:2:181"},"nodeType":"YulFunctionCall","src":"3441:15:181"},"nodeType":"YulIf","src":"3438:35:181"},{"nodeType":"YulAssignment","src":"3482:28:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3496:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3507:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3492:3:181"},"nodeType":"YulFunctionCall","src":"3492:18:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3482:6:181"}]},{"nodeType":"YulAssignment","src":"3519:26:181","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3542:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3529:12:181"},"nodeType":"YulFunctionCall","src":"3529:16:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3519:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2761:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2772:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2784:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2792:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2800:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2808:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2816:6:181","type":""}],"src":"2619:932:181"},{"body":{"nodeType":"YulBlock","src":"3601:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"3665:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3674:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3677:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3667:6:181"},"nodeType":"YulFunctionCall","src":"3667:12:181"},"nodeType":"YulExpressionStatement","src":"3667:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3624:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3635:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3650:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3655:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3646:3:181"},"nodeType":"YulFunctionCall","src":"3646:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3659:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3642:3:181"},"nodeType":"YulFunctionCall","src":"3642:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3631:3:181"},"nodeType":"YulFunctionCall","src":"3631:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3621:2:181"},"nodeType":"YulFunctionCall","src":"3621:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3614:6:181"},"nodeType":"YulFunctionCall","src":"3614:50:181"},"nodeType":"YulIf","src":"3611:70:181"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3590:5:181","type":""}],"src":"3556:131:181"},{"body":{"nodeType":"YulBlock","src":"3762:177:181","statements":[{"body":{"nodeType":"YulBlock","src":"3808:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3817:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3820:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3810:6:181"},"nodeType":"YulFunctionCall","src":"3810:12:181"},"nodeType":"YulExpressionStatement","src":"3810:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3783:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3792:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3779:3:181"},"nodeType":"YulFunctionCall","src":"3779:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3804:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3775:3:181"},"nodeType":"YulFunctionCall","src":"3775:32:181"},"nodeType":"YulIf","src":"3772:52:181"},{"nodeType":"YulVariableDeclaration","src":"3833:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3859:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3846:12:181"},"nodeType":"YulFunctionCall","src":"3846:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3837:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3903:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3878:24:181"},"nodeType":"YulFunctionCall","src":"3878:31:181"},"nodeType":"YulExpressionStatement","src":"3878:31:181"},{"nodeType":"YulAssignment","src":"3918:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"3928:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3918:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3728:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3739:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3751:6:181","type":""}],"src":"3692:247:181"},{"body":{"nodeType":"YulBlock","src":"4045:102:181","statements":[{"nodeType":"YulAssignment","src":"4055:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4067:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4078:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4063:3:181"},"nodeType":"YulFunctionCall","src":"4063:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4055:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4097:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4112:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4128:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4133:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4124:3:181"},"nodeType":"YulFunctionCall","src":"4124:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4137:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4120:3:181"},"nodeType":"YulFunctionCall","src":"4120:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4108:3:181"},"nodeType":"YulFunctionCall","src":"4108:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4090:6:181"},"nodeType":"YulFunctionCall","src":"4090:51:181"},"nodeType":"YulExpressionStatement","src":"4090:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4014:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4025:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4036:4:181","type":""}],"src":"3944:203:181"},{"body":{"nodeType":"YulBlock","src":"4253:76:181","statements":[{"nodeType":"YulAssignment","src":"4263:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4275:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4286:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4271:3:181"},"nodeType":"YulFunctionCall","src":"4271:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4263:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4305:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"4316:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4298:6:181"},"nodeType":"YulFunctionCall","src":"4298:25:181"},"nodeType":"YulExpressionStatement","src":"4298:25:181"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4222:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4233:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4244:4:181","type":""}],"src":"4152:177:181"},{"body":{"nodeType":"YulBlock","src":"4400:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"4410:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4419:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"4414:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4479:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4504:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"4509:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4500:3:181"},"nodeType":"YulFunctionCall","src":"4500:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4523:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"4528:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4519:3:181"},"nodeType":"YulFunctionCall","src":"4519:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4513:5:181"},"nodeType":"YulFunctionCall","src":"4513:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4493:6:181"},"nodeType":"YulFunctionCall","src":"4493:39:181"},"nodeType":"YulExpressionStatement","src":"4493:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4440:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"4443:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4437:2:181"},"nodeType":"YulFunctionCall","src":"4437:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4451:19:181","statements":[{"nodeType":"YulAssignment","src":"4453:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4462:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"4465:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4458:3:181"},"nodeType":"YulFunctionCall","src":"4458:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"4453:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"4433:3:181","statements":[]},"src":"4429:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4562:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"4567:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4558:3:181"},"nodeType":"YulFunctionCall","src":"4558:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"4576:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4551:6:181"},"nodeType":"YulFunctionCall","src":"4551:27:181"},"nodeType":"YulExpressionStatement","src":"4551:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"4378:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"4383:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"4388:6:181","type":""}],"src":"4334:250:181"},{"body":{"nodeType":"YulBlock","src":"4638:221:181","statements":[{"nodeType":"YulVariableDeclaration","src":"4648:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4668:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4662:5:181"},"nodeType":"YulFunctionCall","src":"4662:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"4652:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4690:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"4695:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4683:6:181"},"nodeType":"YulFunctionCall","src":"4683:19:181"},"nodeType":"YulExpressionStatement","src":"4683:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4750:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"4757:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4746:3:181"},"nodeType":"YulFunctionCall","src":"4746:16:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4768:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"4773:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4764:3:181"},"nodeType":"YulFunctionCall","src":"4764:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"4780:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"4711:34:181"},"nodeType":"YulFunctionCall","src":"4711:76:181"},"nodeType":"YulExpressionStatement","src":"4711:76:181"},{"nodeType":"YulAssignment","src":"4796:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4811:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4824:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4832:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4820:3:181"},"nodeType":"YulFunctionCall","src":"4820:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4841:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4837:3:181"},"nodeType":"YulFunctionCall","src":"4837:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4816:3:181"},"nodeType":"YulFunctionCall","src":"4816:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4807:3:181"},"nodeType":"YulFunctionCall","src":"4807:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"4848:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4803:3:181"},"nodeType":"YulFunctionCall","src":"4803:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"4796:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4615:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4622:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"4630:3:181","type":""}],"src":"4589:270:181"},{"body":{"nodeType":"YulBlock","src":"5005:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5022:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5047:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5040:6:181"},"nodeType":"YulFunctionCall","src":"5040:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5033:6:181"},"nodeType":"YulFunctionCall","src":"5033:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5015:6:181"},"nodeType":"YulFunctionCall","src":"5015:41:181"},"nodeType":"YulExpressionStatement","src":"5015:41:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5076:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5087:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5072:3:181"},"nodeType":"YulFunctionCall","src":"5072:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5092:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5065:6:181"},"nodeType":"YulFunctionCall","src":"5065:30:181"},"nodeType":"YulExpressionStatement","src":"5065:30:181"},{"nodeType":"YulAssignment","src":"5104:52:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"5129:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5141:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5152:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5137:3:181"},"nodeType":"YulFunctionCall","src":"5137:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"5112:16:181"},"nodeType":"YulFunctionCall","src":"5112:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5104:4:181"}]}]},"name":"abi_encode_tuple_t_bool_t_bytes_memory_ptr__to_t_bool_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4966:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4977:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4985:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4996:4:181","type":""}],"src":"4864:298:181"},{"body":{"nodeType":"YulBlock","src":"5285:102:181","statements":[{"nodeType":"YulAssignment","src":"5295:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5307:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5318:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5303:3:181"},"nodeType":"YulFunctionCall","src":"5303:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5295:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5337:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5352:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5368:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5373:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5364:3:181"},"nodeType":"YulFunctionCall","src":"5364:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5377:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5360:3:181"},"nodeType":"YulFunctionCall","src":"5360:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5348:3:181"},"nodeType":"YulFunctionCall","src":"5348:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5330:6:181"},"nodeType":"YulFunctionCall","src":"5330:51:181"},"nodeType":"YulExpressionStatement","src":"5330:51:181"}]},"name":"abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5254:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5265:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5276:4:181","type":""}],"src":"5167:220:181"},{"body":{"nodeType":"YulBlock","src":"5520:102:181","statements":[{"nodeType":"YulAssignment","src":"5530:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5542:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5553:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5538:3:181"},"nodeType":"YulFunctionCall","src":"5538:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5530:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5572:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5587:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5603:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5608:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5599:3:181"},"nodeType":"YulFunctionCall","src":"5599:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5612:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5595:3:181"},"nodeType":"YulFunctionCall","src":"5595:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5583:3:181"},"nodeType":"YulFunctionCall","src":"5583:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5565:6:181"},"nodeType":"YulFunctionCall","src":"5565:51:181"},"nodeType":"YulExpressionStatement","src":"5565:51:181"}]},"name":"abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5489:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5500:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5511:4:181","type":""}],"src":"5392:230:181"},{"body":{"nodeType":"YulBlock","src":"5752:102:181","statements":[{"nodeType":"YulAssignment","src":"5762:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5774:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5785:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5770:3:181"},"nodeType":"YulFunctionCall","src":"5770:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5762:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5804:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5819:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5835:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5840:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5831:3:181"},"nodeType":"YulFunctionCall","src":"5831:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5844:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5827:3:181"},"nodeType":"YulFunctionCall","src":"5827:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5815:3:181"},"nodeType":"YulFunctionCall","src":"5815:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5797:6:181"},"nodeType":"YulFunctionCall","src":"5797:51:181"},"nodeType":"YulExpressionStatement","src":"5797:51:181"}]},"name":"abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5721:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5732:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5743:4:181","type":""}],"src":"5627:227:181"},{"body":{"nodeType":"YulBlock","src":"5907:115:181","statements":[{"nodeType":"YulAssignment","src":"5917:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5939:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5926:12:181"},"nodeType":"YulFunctionCall","src":"5926:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"5917:5:181"}]},{"body":{"nodeType":"YulBlock","src":"6000:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6009:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6012:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6002:6:181"},"nodeType":"YulFunctionCall","src":"6002:12:181"},"nodeType":"YulExpressionStatement","src":"6002:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5968:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5979:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5986:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5975:3:181"},"nodeType":"YulFunctionCall","src":"5975:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5965:2:181"},"nodeType":"YulFunctionCall","src":"5965:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5958:6:181"},"nodeType":"YulFunctionCall","src":"5958:41:181"},"nodeType":"YulIf","src":"5955:61:181"}]},"name":"abi_decode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"5886:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"5897:5:181","type":""}],"src":"5859:163:181"},{"body":{"nodeType":"YulBlock","src":"6096:115:181","statements":[{"body":{"nodeType":"YulBlock","src":"6142:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6151:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6154:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6144:6:181"},"nodeType":"YulFunctionCall","src":"6144:12:181"},"nodeType":"YulExpressionStatement","src":"6144:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6117:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6126:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6113:3:181"},"nodeType":"YulFunctionCall","src":"6113:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"6138:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6109:3:181"},"nodeType":"YulFunctionCall","src":"6109:32:181"},"nodeType":"YulIf","src":"6106:52:181"},{"nodeType":"YulAssignment","src":"6167:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6195:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"6177:17:181"},"nodeType":"YulFunctionCall","src":"6177:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6167:6:181"}]}]},"name":"abi_decode_tuple_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6062:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6073:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6085:6:181","type":""}],"src":"6027:184:181"},{"body":{"nodeType":"YulBlock","src":"6328:348:181","statements":[{"body":{"nodeType":"YulBlock","src":"6374:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6383:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6386:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6376:6:181"},"nodeType":"YulFunctionCall","src":"6376:12:181"},"nodeType":"YulExpressionStatement","src":"6376:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6349:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6358:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6345:3:181"},"nodeType":"YulFunctionCall","src":"6345:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"6370:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6341:3:181"},"nodeType":"YulFunctionCall","src":"6341:32:181"},"nodeType":"YulIf","src":"6338:52:181"},{"nodeType":"YulAssignment","src":"6399:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6427:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"6409:17:181"},"nodeType":"YulFunctionCall","src":"6409:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6399:6:181"}]},{"nodeType":"YulAssignment","src":"6446:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6473:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6484:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6469:3:181"},"nodeType":"YulFunctionCall","src":"6469:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6456:12:181"},"nodeType":"YulFunctionCall","src":"6456:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6446:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"6497:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6528:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6539:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6524:3:181"},"nodeType":"YulFunctionCall","src":"6524:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6511:12:181"},"nodeType":"YulFunctionCall","src":"6511:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"6501:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6586:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6595:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6598:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6588:6:181"},"nodeType":"YulFunctionCall","src":"6588:12:181"},"nodeType":"YulExpressionStatement","src":"6588:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6558:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6566:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6555:2:181"},"nodeType":"YulFunctionCall","src":"6555:30:181"},"nodeType":"YulIf","src":"6552:50:181"},{"nodeType":"YulAssignment","src":"6611:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6642:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"6653:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6638:3:181"},"nodeType":"YulFunctionCall","src":"6638:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6662:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"6621:16:181"},"nodeType":"YulFunctionCall","src":"6621:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6611:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6278:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6289:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6301:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6309:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6317:6:181","type":""}],"src":"6216:460:181"},{"body":{"nodeType":"YulBlock","src":"6828:141:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6845:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"6856:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6838:6:181"},"nodeType":"YulFunctionCall","src":"6838:25:181"},"nodeType":"YulExpressionStatement","src":"6838:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6883:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6894:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6879:3:181"},"nodeType":"YulFunctionCall","src":"6879:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6899:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6872:6:181"},"nodeType":"YulFunctionCall","src":"6872:30:181"},"nodeType":"YulExpressionStatement","src":"6872:30:181"},{"nodeType":"YulAssignment","src":"6911:52:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6936:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6948:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6959:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6944:3:181"},"nodeType":"YulFunctionCall","src":"6944:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"6919:16:181"},"nodeType":"YulFunctionCall","src":"6919:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6911:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6789:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6800:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6808:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6819:4:181","type":""}],"src":"6681:288:181"},{"body":{"nodeType":"YulBlock","src":"7148:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7165:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7176:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7158:6:181"},"nodeType":"YulFunctionCall","src":"7158:21:181"},"nodeType":"YulExpressionStatement","src":"7158:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7199:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7210:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7195:3:181"},"nodeType":"YulFunctionCall","src":"7195:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7215:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7188:6:181"},"nodeType":"YulFunctionCall","src":"7188:30:181"},"nodeType":"YulExpressionStatement","src":"7188:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7238:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7249:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7234:3:181"},"nodeType":"YulFunctionCall","src":"7234:18:181"},{"hexValue":"2164656c6179426c6f636b73","kind":"string","nodeType":"YulLiteral","src":"7254:14:181","type":"","value":"!delayBlocks"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7227:6:181"},"nodeType":"YulFunctionCall","src":"7227:42:181"},"nodeType":"YulExpressionStatement","src":"7227:42:181"},{"nodeType":"YulAssignment","src":"7278:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7290:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7301:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7286:3:181"},"nodeType":"YulFunctionCall","src":"7286:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7278:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7125:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7139:4:181","type":""}],"src":"6974:336:181"},{"body":{"nodeType":"YulBlock","src":"7347:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7364:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7371:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"7376:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7367:3:181"},"nodeType":"YulFunctionCall","src":"7367:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7357:6:181"},"nodeType":"YulFunctionCall","src":"7357:31:181"},"nodeType":"YulExpressionStatement","src":"7357:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7404:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7407:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7397:6:181"},"nodeType":"YulFunctionCall","src":"7397:15:181"},"nodeType":"YulExpressionStatement","src":"7397:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7428:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7431:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7421:6:181"},"nodeType":"YulFunctionCall","src":"7421:15:181"},"nodeType":"YulExpressionStatement","src":"7421:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"7315:127:181"},{"body":{"nodeType":"YulBlock","src":"7495:77:181","statements":[{"nodeType":"YulAssignment","src":"7505:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7516:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"7519:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7512:3:181"},"nodeType":"YulFunctionCall","src":"7512:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"7505:3:181"}]},{"body":{"nodeType":"YulBlock","src":"7544:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7546:16:181"},"nodeType":"YulFunctionCall","src":"7546:18:181"},"nodeType":"YulExpressionStatement","src":"7546:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7536:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"7539:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7533:2:181"},"nodeType":"YulFunctionCall","src":"7533:10:181"},"nodeType":"YulIf","src":"7530:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"7478:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"7481:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"7487:3:181","type":""}],"src":"7447:125:181"},{"body":{"nodeType":"YulBlock","src":"7658:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"7704:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7713:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7716:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7706:6:181"},"nodeType":"YulFunctionCall","src":"7706:12:181"},"nodeType":"YulExpressionStatement","src":"7706:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7679:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7688:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7675:3:181"},"nodeType":"YulFunctionCall","src":"7675:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7700:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7671:3:181"},"nodeType":"YulFunctionCall","src":"7671:32:181"},"nodeType":"YulIf","src":"7668:52:181"},{"nodeType":"YulAssignment","src":"7729:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7745:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7739:5:181"},"nodeType":"YulFunctionCall","src":"7739:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7729:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7624:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7635:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7647:6:181","type":""}],"src":"7577:184:181"},{"body":{"nodeType":"YulBlock","src":"7940:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7957:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7968:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7950:6:181"},"nodeType":"YulFunctionCall","src":"7950:21:181"},"nodeType":"YulExpressionStatement","src":"7950:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7991:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8002:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7987:3:181"},"nodeType":"YulFunctionCall","src":"7987:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8007:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7980:6:181"},"nodeType":"YulFunctionCall","src":"7980:30:181"},"nodeType":"YulExpressionStatement","src":"7980:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8030:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8041:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8026:3:181"},"nodeType":"YulFunctionCall","src":"8026:18:181"},{"hexValue":"726f6f7420616c72656164792073656e74","kind":"string","nodeType":"YulLiteral","src":"8046:19:181","type":"","value":"root already sent"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8019:6:181"},"nodeType":"YulFunctionCall","src":"8019:47:181"},"nodeType":"YulExpressionStatement","src":"8019:47:181"},{"nodeType":"YulAssignment","src":"8075:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8087:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8098:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8083:3:181"},"nodeType":"YulFunctionCall","src":"8083:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8075:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7917:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7931:4:181","type":""}],"src":"7766:341:181"},{"body":{"nodeType":"YulBlock","src":"8231:63:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8248:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"8253:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8241:6:181"},"nodeType":"YulFunctionCall","src":"8241:19:181"},"nodeType":"YulExpressionStatement","src":"8241:19:181"},{"nodeType":"YulAssignment","src":"8269:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8280:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"8285:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8276:3:181"},"nodeType":"YulFunctionCall","src":"8276:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"8269:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"8207:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8212:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"8223:3:181","type":""}],"src":"8112:182:181"},{"body":{"nodeType":"YulBlock","src":"8492:281:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8509:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8520:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8502:6:181"},"nodeType":"YulFunctionCall","src":"8502:21:181"},"nodeType":"YulExpressionStatement","src":"8502:21:181"},{"nodeType":"YulVariableDeclaration","src":"8532:58:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8563:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8575:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8586:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8571:3:181"},"nodeType":"YulFunctionCall","src":"8571:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"8546:16:181"},"nodeType":"YulFunctionCall","src":"8546:44:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"8536:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8610:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8621:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8606:3:181"},"nodeType":"YulFunctionCall","src":"8606:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"8630:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8638:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8626:3:181"},"nodeType":"YulFunctionCall","src":"8626:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8599:6:181"},"nodeType":"YulFunctionCall","src":"8599:50:181"},"nodeType":"YulExpressionStatement","src":"8599:50:181"},{"nodeType":"YulAssignment","src":"8658:40:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"8683:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"8691:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"8666:16:181"},"nodeType":"YulFunctionCall","src":"8666:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8658:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8718:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8729:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8714:3:181"},"nodeType":"YulFunctionCall","src":"8714:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"8738:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8754:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"8759:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8750:3:181"},"nodeType":"YulFunctionCall","src":"8750:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"8763:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8746:3:181"},"nodeType":"YulFunctionCall","src":"8746:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8734:3:181"},"nodeType":"YulFunctionCall","src":"8734:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8707:6:181"},"nodeType":"YulFunctionCall","src":"8707:60:181"},"nodeType":"YulExpressionStatement","src":"8707:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8445:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8456:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8464:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8472:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8483:4:181","type":""}],"src":"8299:474:181"},{"body":{"nodeType":"YulBlock","src":"8952:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8969:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8980:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8962:6:181"},"nodeType":"YulFunctionCall","src":"8962:21:181"},"nodeType":"YulExpressionStatement","src":"8962:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9003:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9014:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8999:3:181"},"nodeType":"YulFunctionCall","src":"8999:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9019:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8992:6:181"},"nodeType":"YulFunctionCall","src":"8992:29:181"},"nodeType":"YulExpressionStatement","src":"8992:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9041:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9052:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9037:3:181"},"nodeType":"YulFunctionCall","src":"9037:18:181"},{"hexValue":"21414d42","kind":"string","nodeType":"YulLiteral","src":"9057:6:181","type":"","value":"!AMB"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9030:6:181"},"nodeType":"YulFunctionCall","src":"9030:34:181"},"nodeType":"YulExpressionStatement","src":"9030:34:181"},{"nodeType":"YulAssignment","src":"9073:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9085:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9096:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9081:3:181"},"nodeType":"YulFunctionCall","src":"9081:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9073:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8929:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8943:4:181","type":""}],"src":"8778:327:181"},{"body":{"nodeType":"YulBlock","src":"9257:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9274:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9285:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9267:6:181"},"nodeType":"YulFunctionCall","src":"9267:21:181"},"nodeType":"YulExpressionStatement","src":"9267:21:181"},{"nodeType":"YulAssignment","src":"9297:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9322:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9334:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9345:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9330:3:181"},"nodeType":"YulFunctionCall","src":"9330:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"9305:16:181"},"nodeType":"YulFunctionCall","src":"9305:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9297:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9369:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9380:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9365:3:181"},"nodeType":"YulFunctionCall","src":"9365:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9389:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9405:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"9410:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9401:3:181"},"nodeType":"YulFunctionCall","src":"9401:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"9414:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9397:3:181"},"nodeType":"YulFunctionCall","src":"9397:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9385:3:181"},"nodeType":"YulFunctionCall","src":"9385:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9358:6:181"},"nodeType":"YulFunctionCall","src":"9358:60:181"},"nodeType":"YulExpressionStatement","src":"9358:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9218:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9229:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9237:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9248:4:181","type":""}],"src":"9110:314:181"},{"body":{"nodeType":"YulBlock","src":"9603:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9620:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9631:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9613:6:181"},"nodeType":"YulFunctionCall","src":"9613:21:181"},"nodeType":"YulExpressionStatement","src":"9613:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9654:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9665:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9650:3:181"},"nodeType":"YulFunctionCall","src":"9650:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9670:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9643:6:181"},"nodeType":"YulFunctionCall","src":"9643:29:181"},"nodeType":"YulExpressionStatement","src":"9643:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9692:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9703:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9688:3:181"},"nodeType":"YulFunctionCall","src":"9688:18:181"},{"hexValue":"2170726f6f6673","kind":"string","nodeType":"YulLiteral","src":"9708:9:181","type":"","value":"!proofs"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9681:6:181"},"nodeType":"YulFunctionCall","src":"9681:37:181"},"nodeType":"YulExpressionStatement","src":"9681:37:181"},{"nodeType":"YulAssignment","src":"9727:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9739:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9750:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9735:3:181"},"nodeType":"YulFunctionCall","src":"9735:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9727:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9580:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9594:4:181","type":""}],"src":"9429:330:181"},{"body":{"nodeType":"YulBlock","src":"9796:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9813:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9820:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"9825:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9816:3:181"},"nodeType":"YulFunctionCall","src":"9816:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9806:6:181"},"nodeType":"YulFunctionCall","src":"9806:31:181"},"nodeType":"YulExpressionStatement","src":"9806:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9853:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"9856:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9846:6:181"},"nodeType":"YulFunctionCall","src":"9846:15:181"},"nodeType":"YulExpressionStatement","src":"9846:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9877:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9880:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9870:6:181"},"nodeType":"YulFunctionCall","src":"9870:15:181"},"nodeType":"YulExpressionStatement","src":"9870:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"9764:127:181"},{"body":{"nodeType":"YulBlock","src":"9997:224:181","statements":[{"nodeType":"YulVariableDeclaration","src":"10007:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"10046:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10033:12:181"},"nodeType":"YulFunctionCall","src":"10033:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"10011:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10149:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10158:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10161:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10151:6:181"},"nodeType":"YulFunctionCall","src":"10151:12:181"},"nodeType":"YulExpressionStatement","src":"10151:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10081:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"10109:12:181"},"nodeType":"YulFunctionCall","src":"10109:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"10125:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10105:3:181"},"nodeType":"YulFunctionCall","src":"10105:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10140:4:181","type":"","value":"1086"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10136:3:181"},"nodeType":"YulFunctionCall","src":"10136:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10101:3:181"},"nodeType":"YulFunctionCall","src":"10101:45:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10077:3:181"},"nodeType":"YulFunctionCall","src":"10077:70:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10070:6:181"},"nodeType":"YulFunctionCall","src":"10070:78:181"},"nodeType":"YulIf","src":"10067:98:181"},{"nodeType":"YulAssignment","src":"10174:41:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"10186:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10196:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10182:3:181"},"nodeType":"YulFunctionCall","src":"10182:33:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"10174:4:181"}]}]},"name":"access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"9962:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"9972:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"9988:4:181","type":""}],"src":"9896:325:181"},{"body":{"nodeType":"YulBlock","src":"10320:427:181","statements":[{"nodeType":"YulVariableDeclaration","src":"10330:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"10369:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10356:12:181"},"nodeType":"YulFunctionCall","src":"10356:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"10334:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10470:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10479:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10482:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10472:6:181"},"nodeType":"YulFunctionCall","src":"10472:12:181"},"nodeType":"YulExpressionStatement","src":"10472:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10404:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"10432:12:181"},"nodeType":"YulFunctionCall","src":"10432:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"10448:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10428:3:181"},"nodeType":"YulFunctionCall","src":"10428:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10463:2:181","type":"","value":"30"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10459:3:181"},"nodeType":"YulFunctionCall","src":"10459:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10424:3:181"},"nodeType":"YulFunctionCall","src":"10424:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10400:3:181"},"nodeType":"YulFunctionCall","src":"10400:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10393:6:181"},"nodeType":"YulFunctionCall","src":"10393:76:181"},"nodeType":"YulIf","src":"10390:96:181"},{"nodeType":"YulVariableDeclaration","src":"10495:47:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"10513:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10523:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10509:3:181"},"nodeType":"YulFunctionCall","src":"10509:33:181"},"variables":[{"name":"addr_1","nodeType":"YulTypedName","src":"10499:6:181","type":""}]},{"nodeType":"YulAssignment","src":"10551:30:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"10574:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10561:12:181"},"nodeType":"YulFunctionCall","src":"10561:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"10551:6:181"}]},{"body":{"nodeType":"YulBlock","src":"10624:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10633:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10636:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10626:6:181"},"nodeType":"YulFunctionCall","src":"10626:12:181"},"nodeType":"YulExpressionStatement","src":"10626:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"10596:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10604:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10593:2:181"},"nodeType":"YulFunctionCall","src":"10593:30:181"},"nodeType":"YulIf","src":"10590:50:181"},{"nodeType":"YulAssignment","src":"10649:25:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"10661:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10669:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10657:3:181"},"nodeType":"YulFunctionCall","src":"10657:17:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"10649:4:181"}]},{"body":{"nodeType":"YulBlock","src":"10725:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10734:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10737:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10727:6:181"},"nodeType":"YulFunctionCall","src":"10727:12:181"},"nodeType":"YulExpressionStatement","src":"10727:12:181"}]},"condition":{"arguments":[{"name":"addr","nodeType":"YulIdentifier","src":"10690:4:181"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"10700:12:181"},"nodeType":"YulFunctionCall","src":"10700:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"10716:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10696:3:181"},"nodeType":"YulFunctionCall","src":"10696:27:181"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"10686:3:181"},"nodeType":"YulFunctionCall","src":"10686:38:181"},"nodeType":"YulIf","src":"10683:58:181"}]},"name":"access_calldata_tail_t_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"10277:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"10287:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"10303:4:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"10309:6:181","type":""}],"src":"10226:521:181"},{"body":{"nodeType":"YulBlock","src":"10899:124:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10922:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"10927:6:181"},{"name":"value1","nodeType":"YulIdentifier","src":"10935:6:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"10909:12:181"},"nodeType":"YulFunctionCall","src":"10909:33:181"},"nodeType":"YulExpressionStatement","src":"10909:33:181"},{"nodeType":"YulVariableDeclaration","src":"10951:26:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10965:3:181"},{"name":"value1","nodeType":"YulIdentifier","src":"10970:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10961:3:181"},"nodeType":"YulFunctionCall","src":"10961:16:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10955:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"10993:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"10997:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10986:6:181"},"nodeType":"YulFunctionCall","src":"10986:13:181"},"nodeType":"YulExpressionStatement","src":"10986:13:181"},{"nodeType":"YulAssignment","src":"11008:9:181","value":{"name":"_1","nodeType":"YulIdentifier","src":"11015:2:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"11008:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"10867:3:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10872:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10880:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10891:3:181","type":""}],"src":"10752:271:181"},{"body":{"nodeType":"YulBlock","src":"11202:161:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11219:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11230:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11212:6:181"},"nodeType":"YulFunctionCall","src":"11212:21:181"},"nodeType":"YulExpressionStatement","src":"11212:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11253:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11264:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11249:3:181"},"nodeType":"YulFunctionCall","src":"11249:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11269:2:181","type":"","value":"11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11242:6:181"},"nodeType":"YulFunctionCall","src":"11242:30:181"},"nodeType":"YulExpressionStatement","src":"11242:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11292:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11303:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11288:3:181"},"nodeType":"YulFunctionCall","src":"11288:18:181"},{"hexValue":"21736861726564526f6f74","kind":"string","nodeType":"YulLiteral","src":"11308:13:181","type":"","value":"!sharedRoot"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11281:6:181"},"nodeType":"YulFunctionCall","src":"11281:41:181"},"nodeType":"YulExpressionStatement","src":"11281:41:181"},{"nodeType":"YulAssignment","src":"11331:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11343:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11354:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11339:3:181"},"nodeType":"YulFunctionCall","src":"11339:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11331:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11179:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11193:4:181","type":""}],"src":"11028:335:181"},{"body":{"nodeType":"YulBlock","src":"11542:171:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11559:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11570:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11552:6:181"},"nodeType":"YulFunctionCall","src":"11552:21:181"},"nodeType":"YulExpressionStatement","src":"11552:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11593:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11604:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11589:3:181"},"nodeType":"YulFunctionCall","src":"11589:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11609:2:181","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11582:6:181"},"nodeType":"YulFunctionCall","src":"11582:30:181"},"nodeType":"YulExpressionStatement","src":"11582:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11632:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11643:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11628:3:181"},"nodeType":"YulFunctionCall","src":"11628:18:181"},{"hexValue":"616767726567617465526f6f742021657869737473","kind":"string","nodeType":"YulLiteral","src":"11648:23:181","type":"","value":"aggregateRoot !exists"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11621:6:181"},"nodeType":"YulFunctionCall","src":"11621:51:181"},"nodeType":"YulExpressionStatement","src":"11621:51:181"},{"nodeType":"YulAssignment","src":"11681:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11693:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11704:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11689:3:181"},"nodeType":"YulFunctionCall","src":"11689:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11681:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11519:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11533:4:181","type":""}],"src":"11368:345:181"},{"body":{"nodeType":"YulBlock","src":"11796:199:181","statements":[{"body":{"nodeType":"YulBlock","src":"11842:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11851:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11854:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11844:6:181"},"nodeType":"YulFunctionCall","src":"11844:12:181"},"nodeType":"YulExpressionStatement","src":"11844:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11817:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"11826:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11813:3:181"},"nodeType":"YulFunctionCall","src":"11813:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"11838:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11809:3:181"},"nodeType":"YulFunctionCall","src":"11809:32:181"},"nodeType":"YulIf","src":"11806:52:181"},{"nodeType":"YulVariableDeclaration","src":"11867:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11886:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11880:5:181"},"nodeType":"YulFunctionCall","src":"11880:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11871:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"11949:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11958:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11961:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11951:6:181"},"nodeType":"YulFunctionCall","src":"11951:12:181"},"nodeType":"YulExpressionStatement","src":"11951:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11918:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11939:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11932:6:181"},"nodeType":"YulFunctionCall","src":"11932:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11925:6:181"},"nodeType":"YulFunctionCall","src":"11925:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"11915:2:181"},"nodeType":"YulFunctionCall","src":"11915:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11908:6:181"},"nodeType":"YulFunctionCall","src":"11908:40:181"},"nodeType":"YulIf","src":"11905:60:181"},{"nodeType":"YulAssignment","src":"11974:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"11984:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11974:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11762:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11773:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11785:6:181","type":""}],"src":"11718:277:181"},{"body":{"nodeType":"YulBlock","src":"12174:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12191:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12202:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12184:6:181"},"nodeType":"YulFunctionCall","src":"12184:21:181"},"nodeType":"YulExpressionStatement","src":"12184:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12225:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12236:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12221:3:181"},"nodeType":"YulFunctionCall","src":"12221:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12241:1:181","type":"","value":"8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12214:6:181"},"nodeType":"YulFunctionCall","src":"12214:29:181"},"nodeType":"YulExpressionStatement","src":"12214:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12263:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12274:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12259:3:181"},"nodeType":"YulFunctionCall","src":"12259:18:181"},{"hexValue":"2177617463686572","kind":"string","nodeType":"YulLiteral","src":"12279:10:181","type":"","value":"!watcher"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12252:6:181"},"nodeType":"YulFunctionCall","src":"12252:38:181"},"nodeType":"YulExpressionStatement","src":"12252:38:181"},{"nodeType":"YulAssignment","src":"12299:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12311:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12322:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12307:3:181"},"nodeType":"YulFunctionCall","src":"12307:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12299:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12151:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12165:4:181","type":""}],"src":"12000:331:181"},{"body":{"nodeType":"YulBlock","src":"12385:79:181","statements":[{"nodeType":"YulAssignment","src":"12395:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"12407:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"12410:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12403:3:181"},"nodeType":"YulFunctionCall","src":"12403:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"12395:4:181"}]},{"body":{"nodeType":"YulBlock","src":"12436:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"12438:16:181"},"nodeType":"YulFunctionCall","src":"12438:18:181"},"nodeType":"YulExpressionStatement","src":"12438:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"12427:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"12433:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12424:2:181"},"nodeType":"YulFunctionCall","src":"12424:11:181"},"nodeType":"YulIf","src":"12421:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"12367:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"12370:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"12376:4:181","type":""}],"src":"12336:128:181"},{"body":{"nodeType":"YulBlock","src":"12643:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12660:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12671:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12653:6:181"},"nodeType":"YulFunctionCall","src":"12653:21:181"},"nodeType":"YulExpressionStatement","src":"12653:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12694:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12705:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12690:3:181"},"nodeType":"YulFunctionCall","src":"12690:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12710:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12683:6:181"},"nodeType":"YulFunctionCall","src":"12683:30:181"},"nodeType":"YulExpressionStatement","src":"12683:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12733:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12744:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12729:3:181"},"nodeType":"YulFunctionCall","src":"12729:18:181"},{"hexValue":"616c72656164792077617463686572206d616e61676572","kind":"string","nodeType":"YulLiteral","src":"12749:25:181","type":"","value":"already watcher manager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12722:6:181"},"nodeType":"YulFunctionCall","src":"12722:53:181"},"nodeType":"YulExpressionStatement","src":"12722:53:181"},{"nodeType":"YulAssignment","src":"12784:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12796:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12807:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12792:3:181"},"nodeType":"YulFunctionCall","src":"12792:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12784:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12620:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12634:4:181","type":""}],"src":"12469:347:181"},{"body":{"nodeType":"YulBlock","src":"12995:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13012:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13023:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13005:6:181"},"nodeType":"YulFunctionCall","src":"13005:21:181"},"nodeType":"YulExpressionStatement","src":"13005:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13046:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13057:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13042:3:181"},"nodeType":"YulFunctionCall","src":"13042:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13062:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13035:6:181"},"nodeType":"YulFunctionCall","src":"13035:30:181"},"nodeType":"YulExpressionStatement","src":"13035:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13085:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13096:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13081:3:181"},"nodeType":"YulFunctionCall","src":"13081:18:181"},{"hexValue":"21616c6c6f776c6973746564","kind":"string","nodeType":"YulLiteral","src":"13101:14:181","type":"","value":"!allowlisted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13074:6:181"},"nodeType":"YulFunctionCall","src":"13074:42:181"},"nodeType":"YulExpressionStatement","src":"13074:42:181"},{"nodeType":"YulAssignment","src":"13125:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13137:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13148:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13133:3:181"},"nodeType":"YulFunctionCall","src":"13133:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13125:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12972:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12986:4:181","type":""}],"src":"12821:336:181"},{"body":{"nodeType":"YulBlock","src":"13208:155:181","statements":[{"nodeType":"YulVariableDeclaration","src":"13218:20:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13228:10:181","type":"","value":"0xffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13222:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13247:29:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13266:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13273:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13262:3:181"},"nodeType":"YulFunctionCall","src":"13262:14:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"13251:7:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"13304:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13306:16:181"},"nodeType":"YulFunctionCall","src":"13306:18:181"},"nodeType":"YulExpressionStatement","src":"13306:18:181"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"13291:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13300:2:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"13288:2:181"},"nodeType":"YulFunctionCall","src":"13288:15:181"},"nodeType":"YulIf","src":"13285:41:181"},{"nodeType":"YulAssignment","src":"13335:22:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"13346:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"13355:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13342:3:181"},"nodeType":"YulFunctionCall","src":"13342:15:181"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"13335:3:181"}]}]},"name":"increment_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"13190:5:181","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"13200:3:181","type":""}],"src":"13162:201:181"},{"body":{"nodeType":"YulBlock","src":"13466:147:181","statements":[{"body":{"nodeType":"YulBlock","src":"13512:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13521:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13524:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13514:6:181"},"nodeType":"YulFunctionCall","src":"13514:12:181"},"nodeType":"YulExpressionStatement","src":"13514:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13487:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"13496:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13483:3:181"},"nodeType":"YulFunctionCall","src":"13483:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"13508:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13479:3:181"},"nodeType":"YulFunctionCall","src":"13479:32:181"},"nodeType":"YulIf","src":"13476:52:181"},{"nodeType":"YulAssignment","src":"13537:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13553:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13547:5:181"},"nodeType":"YulFunctionCall","src":"13547:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13537:6:181"}]},{"nodeType":"YulAssignment","src":"13572:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13592:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13603:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13588:3:181"},"nodeType":"YulFunctionCall","src":"13588:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13582:5:181"},"nodeType":"YulFunctionCall","src":"13582:25:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13572:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13424:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13435:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13447:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13455:6:181","type":""}],"src":"13368:245:181"},{"body":{"nodeType":"YulBlock","src":"13821:229:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13838:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"13849:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13831:6:181"},"nodeType":"YulFunctionCall","src":"13831:25:181"},"nodeType":"YulExpressionStatement","src":"13831:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13876:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13887:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13872:3:181"},"nodeType":"YulFunctionCall","src":"13872:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"13892:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13865:6:181"},"nodeType":"YulFunctionCall","src":"13865:34:181"},"nodeType":"YulExpressionStatement","src":"13865:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13919:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13930:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13915:3:181"},"nodeType":"YulFunctionCall","src":"13915:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"13935:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13908:6:181"},"nodeType":"YulFunctionCall","src":"13908:34:181"},"nodeType":"YulExpressionStatement","src":"13908:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13962:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13973:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13958:3:181"},"nodeType":"YulFunctionCall","src":"13958:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13978:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13951:6:181"},"nodeType":"YulFunctionCall","src":"13951:31:181"},"nodeType":"YulExpressionStatement","src":"13951:31:181"},{"nodeType":"YulAssignment","src":"13991:53:181","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"14016:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14028:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14039:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14024:3:181"},"nodeType":"YulFunctionCall","src":"14024:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"13999:16:181"},"nodeType":"YulFunctionCall","src":"13999:45:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13991:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13766:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13777:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13785:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13793:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13801:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13812:4:181","type":""}],"src":"13618:432:181"},{"body":{"nodeType":"YulBlock","src":"14229:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14246:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14257:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14239:6:181"},"nodeType":"YulFunctionCall","src":"14239:21:181"},"nodeType":"YulExpressionStatement","src":"14239:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14280:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14291:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14276:3:181"},"nodeType":"YulFunctionCall","src":"14276:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14296:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14269:6:181"},"nodeType":"YulFunctionCall","src":"14269:30:181"},"nodeType":"YulExpressionStatement","src":"14269:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14319:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14330:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14315:3:181"},"nodeType":"YulFunctionCall","src":"14315:18:181"},{"hexValue":"5061757361626c653a20706175736564","kind":"string","nodeType":"YulLiteral","src":"14335:18:181","type":"","value":"Pausable: paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14308:6:181"},"nodeType":"YulFunctionCall","src":"14308:46:181"},"nodeType":"YulExpressionStatement","src":"14308:46:181"},{"nodeType":"YulAssignment","src":"14363:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14375:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14386:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14371:3:181"},"nodeType":"YulFunctionCall","src":"14371:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14363:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14206:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14220:4:181","type":""}],"src":"14055:340:181"},{"body":{"nodeType":"YulBlock","src":"14574:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14591:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14602:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14584:6:181"},"nodeType":"YulFunctionCall","src":"14584:21:181"},"nodeType":"YulExpressionStatement","src":"14584:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14625:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14636:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14621:3:181"},"nodeType":"YulFunctionCall","src":"14621:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14641:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14614:6:181"},"nodeType":"YulFunctionCall","src":"14614:30:181"},"nodeType":"YulExpressionStatement","src":"14614:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14664:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14675:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14660:3:181"},"nodeType":"YulFunctionCall","src":"14660:18:181"},{"hexValue":"5061757361626c653a206e6f7420706175736564","kind":"string","nodeType":"YulLiteral","src":"14680:22:181","type":"","value":"Pausable: not paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14653:6:181"},"nodeType":"YulFunctionCall","src":"14653:50:181"},"nodeType":"YulExpressionStatement","src":"14653:50:181"},{"nodeType":"YulAssignment","src":"14712:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14724:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14735:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14720:3:181"},"nodeType":"YulFunctionCall","src":"14720:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14712:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14551:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14565:4:181","type":""}],"src":"14400:344:181"},{"body":{"nodeType":"YulBlock","src":"14923:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14940:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14951:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14933:6:181"},"nodeType":"YulFunctionCall","src":"14933:21:181"},"nodeType":"YulExpressionStatement","src":"14933:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14974:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14985:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14970:3:181"},"nodeType":"YulFunctionCall","src":"14970:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14990:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14963:6:181"},"nodeType":"YulFunctionCall","src":"14963:30:181"},"nodeType":"YulExpressionStatement","src":"14963:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15013:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15024:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15009:3:181"},"nodeType":"YulFunctionCall","src":"15009:18:181"},{"hexValue":"216d6972726f72436f6e6e6563746f72","kind":"string","nodeType":"YulLiteral","src":"15029:18:181","type":"","value":"!mirrorConnector"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15002:6:181"},"nodeType":"YulFunctionCall","src":"15002:46:181"},"nodeType":"YulExpressionStatement","src":"15002:46:181"},{"nodeType":"YulAssignment","src":"15057:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15069:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15080:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15065:3:181"},"nodeType":"YulFunctionCall","src":"15065:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15057:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14900:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14914:4:181","type":""}],"src":"14749:340:181"},{"body":{"nodeType":"YulBlock","src":"15268:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15285:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15296:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15278:6:181"},"nodeType":"YulFunctionCall","src":"15278:21:181"},"nodeType":"YulExpressionStatement","src":"15278:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15319:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15330:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15315:3:181"},"nodeType":"YulFunctionCall","src":"15315:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15335:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15308:6:181"},"nodeType":"YulFunctionCall","src":"15308:29:181"},"nodeType":"YulExpressionStatement","src":"15308:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15357:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15368:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15353:3:181"},"nodeType":"YulFunctionCall","src":"15353:18:181"},{"hexValue":"216c656e677468","kind":"string","nodeType":"YulLiteral","src":"15373:9:181","type":"","value":"!length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15346:6:181"},"nodeType":"YulFunctionCall","src":"15346:37:181"},"nodeType":"YulExpressionStatement","src":"15346:37:181"},{"nodeType":"YulAssignment","src":"15392:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15404:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15415:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15400:3:181"},"nodeType":"YulFunctionCall","src":"15400:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15392:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15245:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15259:4:181","type":""}],"src":"15094:330:181"},{"body":{"nodeType":"YulBlock","src":"15523:203:181","statements":[{"nodeType":"YulVariableDeclaration","src":"15533:26:181","value":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"15553:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15547:5:181"},"nodeType":"YulFunctionCall","src":"15547:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"15537:6:181","type":""}]},{"nodeType":"YulAssignment","src":"15568:32:181","value":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"15587:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"15594:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15583:3:181"},"nodeType":"YulFunctionCall","src":"15583:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15577:5:181"},"nodeType":"YulFunctionCall","src":"15577:23:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"15568:5:181"}]},{"body":{"nodeType":"YulBlock","src":"15637:83:181","statements":[{"nodeType":"YulAssignment","src":"15651:59:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15664:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15679:1:181","type":"","value":"3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15686:4:181","type":"","value":"0x20"},{"name":"length","nodeType":"YulIdentifier","src":"15692:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15682:3:181"},"nodeType":"YulFunctionCall","src":"15682:17:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"15675:3:181"},"nodeType":"YulFunctionCall","src":"15675:25:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15706:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"15702:3:181"},"nodeType":"YulFunctionCall","src":"15702:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"15671:3:181"},"nodeType":"YulFunctionCall","src":"15671:38:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15660:3:181"},"nodeType":"YulFunctionCall","src":"15660:50:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"15651:5:181"}]}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"15615:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"15623:4:181","type":"","value":"0x20"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15612:2:181"},"nodeType":"YulFunctionCall","src":"15612:16:181"},"nodeType":"YulIf","src":"15609:111:181"}]},"name":"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nodeType":"YulTypedName","src":"15503:5:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"15513:5:181","type":""}],"src":"15429:297:181"},{"body":{"nodeType":"YulBlock","src":"15905:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15922:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15933:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15915:6:181"},"nodeType":"YulFunctionCall","src":"15915:21:181"},"nodeType":"YulExpressionStatement","src":"15915:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15956:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15967:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15952:3:181"},"nodeType":"YulFunctionCall","src":"15952:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15972:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15945:6:181"},"nodeType":"YulFunctionCall","src":"15945:30:181"},"nodeType":"YulExpressionStatement","src":"15945:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15995:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16006:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15991:3:181"},"nodeType":"YulFunctionCall","src":"15991:18:181"},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","kind":"string","nodeType":"YulLiteral","src":"16011:33:181","type":"","value":"ReentrancyGuard: reentrant call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15984:6:181"},"nodeType":"YulFunctionCall","src":"15984:61:181"},"nodeType":"YulExpressionStatement","src":"15984:61:181"},{"nodeType":"YulAssignment","src":"16054:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16066:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16077:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16062:3:181"},"nodeType":"YulFunctionCall","src":"16062:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16054:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15882:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15896:4:181","type":""}],"src":"15731:355:181"},{"body":{"nodeType":"YulBlock","src":"16265:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16282:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16293:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16275:6:181"},"nodeType":"YulFunctionCall","src":"16275:21:181"},"nodeType":"YulExpressionStatement","src":"16275:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16316:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16327:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16312:3:181"},"nodeType":"YulFunctionCall","src":"16312:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16332:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16305:6:181"},"nodeType":"YulFunctionCall","src":"16305:30:181"},"nodeType":"YulExpressionStatement","src":"16305:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16355:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16366:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16351:3:181"},"nodeType":"YulFunctionCall","src":"16351:18:181"},{"hexValue":"214d6573736167655374617475732e4e6f6e65","kind":"string","nodeType":"YulLiteral","src":"16371:21:181","type":"","value":"!MessageStatus.None"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16344:6:181"},"nodeType":"YulFunctionCall","src":"16344:49:181"},"nodeType":"YulExpressionStatement","src":"16344:49:181"},{"nodeType":"YulAssignment","src":"16402:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16414:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16425:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16410:3:181"},"nodeType":"YulFunctionCall","src":"16410:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16402:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16242:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16256:4:181","type":""}],"src":"16091:343:181"},{"body":{"nodeType":"YulBlock","src":"16613:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16630:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16641:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16623:6:181"},"nodeType":"YulFunctionCall","src":"16623:21:181"},"nodeType":"YulExpressionStatement","src":"16623:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16664:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16675:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16660:3:181"},"nodeType":"YulFunctionCall","src":"16660:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16680:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16653:6:181"},"nodeType":"YulFunctionCall","src":"16653:30:181"},"nodeType":"YulExpressionStatement","src":"16653:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16703:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16714:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16699:3:181"},"nodeType":"YulFunctionCall","src":"16699:18:181"},{"hexValue":"696e76616c696420696e626f756e64526f6f74","kind":"string","nodeType":"YulLiteral","src":"16719:21:181","type":"","value":"invalid inboundRoot"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16692:6:181"},"nodeType":"YulFunctionCall","src":"16692:49:181"},"nodeType":"YulExpressionStatement","src":"16692:49:181"},{"nodeType":"YulAssignment","src":"16750:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16762:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16773:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16758:3:181"},"nodeType":"YulFunctionCall","src":"16758:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16750:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16590:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16604:4:181","type":""}],"src":"16439:343:181"},{"body":{"nodeType":"YulBlock","src":"16961:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16978:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16989:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16971:6:181"},"nodeType":"YulFunctionCall","src":"16971:21:181"},"nodeType":"YulExpressionStatement","src":"16971:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17012:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17023:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17008:3:181"},"nodeType":"YulFunctionCall","src":"17008:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17028:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17001:6:181"},"nodeType":"YulFunctionCall","src":"17001:30:181"},"nodeType":"YulExpressionStatement","src":"17001:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17051:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17062:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17047:3:181"},"nodeType":"YulFunctionCall","src":"17047:18:181"},{"hexValue":"2164657374696e6174696f6e","kind":"string","nodeType":"YulLiteral","src":"17067:14:181","type":"","value":"!destination"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17040:6:181"},"nodeType":"YulFunctionCall","src":"17040:42:181"},"nodeType":"YulExpressionStatement","src":"17040:42:181"},{"nodeType":"YulAssignment","src":"17091:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17103:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17114:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17099:3:181"},"nodeType":"YulFunctionCall","src":"17099:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17091:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16938:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16952:4:181","type":""}],"src":"16787:336:181"},{"body":{"nodeType":"YulBlock","src":"17302:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17319:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17330:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17312:6:181"},"nodeType":"YulFunctionCall","src":"17312:21:181"},"nodeType":"YulExpressionStatement","src":"17312:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17353:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17364:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17349:3:181"},"nodeType":"YulFunctionCall","src":"17349:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17369:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17342:6:181"},"nodeType":"YulFunctionCall","src":"17342:29:181"},"nodeType":"YulExpressionStatement","src":"17342:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17391:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17402:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17387:3:181"},"nodeType":"YulFunctionCall","src":"17387:18:181"},{"hexValue":"2170726f76656e","kind":"string","nodeType":"YulLiteral","src":"17407:9:181","type":"","value":"!proven"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17380:6:181"},"nodeType":"YulFunctionCall","src":"17380:37:181"},"nodeType":"YulExpressionStatement","src":"17380:37:181"},{"nodeType":"YulAssignment","src":"17426:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17438:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17449:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17434:3:181"},"nodeType":"YulFunctionCall","src":"17434:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17426:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17279:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17293:4:181","type":""}],"src":"17128:330:181"},{"body":{"nodeType":"YulBlock","src":"17637:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17654:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17665:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17647:6:181"},"nodeType":"YulFunctionCall","src":"17647:21:181"},"nodeType":"YulExpressionStatement","src":"17647:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17688:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17699:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17684:3:181"},"nodeType":"YulFunctionCall","src":"17684:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17704:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17677:6:181"},"nodeType":"YulFunctionCall","src":"17677:29:181"},"nodeType":"YulExpressionStatement","src":"17677:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17726:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17737:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17722:3:181"},"nodeType":"YulFunctionCall","src":"17722:18:181"},{"hexValue":"21676173","kind":"string","nodeType":"YulLiteral","src":"17742:6:181","type":"","value":"!gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17715:6:181"},"nodeType":"YulFunctionCall","src":"17715:34:181"},"nodeType":"YulExpressionStatement","src":"17715:34:181"},{"nodeType":"YulAssignment","src":"17758:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17770:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17781:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17766:3:181"},"nodeType":"YulFunctionCall","src":"17766:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17758:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17614:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17628:4:181","type":""}],"src":"17463:327:181"},{"body":{"nodeType":"YulBlock","src":"17994:276:181","statements":[{"nodeType":"YulVariableDeclaration","src":"18004:20:181","value":{"kind":"number","nodeType":"YulLiteral","src":"18014:10:181","type":"","value":"0xffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18008:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18040:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18055:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"18063:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18051:3:181"},"nodeType":"YulFunctionCall","src":"18051:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18033:6:181"},"nodeType":"YulFunctionCall","src":"18033:34:181"},"nodeType":"YulExpressionStatement","src":"18033:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18087:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18098:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18083:3:181"},"nodeType":"YulFunctionCall","src":"18083:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"18107:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"18115:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18103:3:181"},"nodeType":"YulFunctionCall","src":"18103:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18076:6:181"},"nodeType":"YulFunctionCall","src":"18076:43:181"},"nodeType":"YulExpressionStatement","src":"18076:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18139:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18150:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18135:3:181"},"nodeType":"YulFunctionCall","src":"18135:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"18155:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18128:6:181"},"nodeType":"YulFunctionCall","src":"18128:34:181"},"nodeType":"YulExpressionStatement","src":"18128:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18182:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18193:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18178:3:181"},"nodeType":"YulFunctionCall","src":"18178:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18198:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18171:6:181"},"nodeType":"YulFunctionCall","src":"18171:31:181"},"nodeType":"YulExpressionStatement","src":"18171:31:181"},{"nodeType":"YulAssignment","src":"18211:53:181","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"18236:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18248:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18259:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18244:3:181"},"nodeType":"YulFunctionCall","src":"18244:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"18219:16:181"},"nodeType":"YulFunctionCall","src":"18219:45:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18211:4:181"}]}]},"name":"abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17939:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"17950:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"17958:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"17966:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17974:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17985:4:181","type":""}],"src":"17795:475:181"},{"body":{"nodeType":"YulBlock","src":"18444:200:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18461:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"18472:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18454:6:181"},"nodeType":"YulFunctionCall","src":"18454:25:181"},"nodeType":"YulExpressionStatement","src":"18454:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18499:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18510:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18495:3:181"},"nodeType":"YulFunctionCall","src":"18495:18:181"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"18529:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"18522:6:181"},"nodeType":"YulFunctionCall","src":"18522:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"18515:6:181"},"nodeType":"YulFunctionCall","src":"18515:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18488:6:181"},"nodeType":"YulFunctionCall","src":"18488:50:181"},"nodeType":"YulExpressionStatement","src":"18488:50:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18558:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18569:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18554:3:181"},"nodeType":"YulFunctionCall","src":"18554:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18574:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18547:6:181"},"nodeType":"YulFunctionCall","src":"18547:30:181"},"nodeType":"YulExpressionStatement","src":"18547:30:181"},{"nodeType":"YulAssignment","src":"18586:52:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"18611:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18623:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18634:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18619:3:181"},"nodeType":"YulFunctionCall","src":"18619:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"18594:16:181"},"nodeType":"YulFunctionCall","src":"18594:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18586:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18397:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"18408:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18416:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18424:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18435:4:181","type":""}],"src":"18275:369:181"},{"body":{"nodeType":"YulBlock","src":"18778:175:181","statements":[{"nodeType":"YulAssignment","src":"18788:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18800:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18811:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18796:3:181"},"nodeType":"YulFunctionCall","src":"18796:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18788:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"18823:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18841:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"18846:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"18837:3:181"},"nodeType":"YulFunctionCall","src":"18837:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"18850:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"18833:3:181"},"nodeType":"YulFunctionCall","src":"18833:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18827:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18868:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18883:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"18891:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18879:3:181"},"nodeType":"YulFunctionCall","src":"18879:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18861:6:181"},"nodeType":"YulFunctionCall","src":"18861:34:181"},"nodeType":"YulExpressionStatement","src":"18861:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18915:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18926:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18911:3:181"},"nodeType":"YulFunctionCall","src":"18911:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"18935:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"18943:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18931:3:181"},"nodeType":"YulFunctionCall","src":"18931:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18904:6:181"},"nodeType":"YulFunctionCall","src":"18904:43:181"},"nodeType":"YulExpressionStatement","src":"18904:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18739:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18750:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18758:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18769:4:181","type":""}],"src":"18649:304:181"},{"body":{"nodeType":"YulBlock","src":"19132:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19149:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19160:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19142:6:181"},"nodeType":"YulFunctionCall","src":"19142:21:181"},"nodeType":"YulExpressionStatement","src":"19142:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19183:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19194:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19179:3:181"},"nodeType":"YulFunctionCall","src":"19179:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19199:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19172:6:181"},"nodeType":"YulFunctionCall","src":"19172:30:181"},"nodeType":"YulExpressionStatement","src":"19172:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19222:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19233:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19218:3:181"},"nodeType":"YulFunctionCall","src":"19218:18:181"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","kind":"string","nodeType":"YulLiteral","src":"19238:31:181","type":"","value":"Address: insufficient balance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19211:6:181"},"nodeType":"YulFunctionCall","src":"19211:59:181"},"nodeType":"YulExpressionStatement","src":"19211:59:181"},{"nodeType":"YulAssignment","src":"19279:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19291:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19302:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19287:3:181"},"nodeType":"YulFunctionCall","src":"19287:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19279:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19109:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19123:4:181","type":""}],"src":"18958:353:181"},{"body":{"nodeType":"YulBlock","src":"19507:14:181","statements":[{"nodeType":"YulAssignment","src":"19509:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"19516:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"19509:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"19491:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"19499:3:181","type":""}],"src":"19316:205:181"},{"body":{"nodeType":"YulBlock","src":"19700:248:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19717:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19728:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19710:6:181"},"nodeType":"YulFunctionCall","src":"19710:21:181"},"nodeType":"YulExpressionStatement","src":"19710:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19751:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19762:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19747:3:181"},"nodeType":"YulFunctionCall","src":"19747:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19767:2:181","type":"","value":"58"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19740:6:181"},"nodeType":"YulFunctionCall","src":"19740:30:181"},"nodeType":"YulExpressionStatement","src":"19740:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19790:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19801:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19786:3:181"},"nodeType":"YulFunctionCall","src":"19786:18:181"},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c2072","kind":"string","nodeType":"YulLiteral","src":"19806:34:181","type":"","value":"Address: unable to send value, r"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19779:6:181"},"nodeType":"YulFunctionCall","src":"19779:62:181"},"nodeType":"YulExpressionStatement","src":"19779:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19861:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19872:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19857:3:181"},"nodeType":"YulFunctionCall","src":"19857:18:181"},{"hexValue":"6563697069656e74206d61792068617665207265766572746564","kind":"string","nodeType":"YulLiteral","src":"19877:28:181","type":"","value":"ecipient may have reverted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19850:6:181"},"nodeType":"YulFunctionCall","src":"19850:56:181"},"nodeType":"YulExpressionStatement","src":"19850:56:181"},{"nodeType":"YulAssignment","src":"19915:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19927:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19938:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19923:3:181"},"nodeType":"YulFunctionCall","src":"19923:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19915:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19677:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19691:4:181","type":""}],"src":"19526:422:181"},{"body":{"nodeType":"YulBlock","src":"20082:119:181","statements":[{"nodeType":"YulAssignment","src":"20092:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20104:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20115:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20100:3:181"},"nodeType":"YulFunctionCall","src":"20100:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20092:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20134:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"20145:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20127:6:181"},"nodeType":"YulFunctionCall","src":"20127:25:181"},"nodeType":"YulExpressionStatement","src":"20127:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20172:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20183:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20168:3:181"},"nodeType":"YulFunctionCall","src":"20168:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"20188:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20161:6:181"},"nodeType":"YulFunctionCall","src":"20161:34:181"},"nodeType":"YulExpressionStatement","src":"20161:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20043:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"20054:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"20062:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20073:4:181","type":""}],"src":"19953:248:181"},{"body":{"nodeType":"YulBlock","src":"20380:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20397:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20408:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20390:6:181"},"nodeType":"YulFunctionCall","src":"20390:21:181"},"nodeType":"YulExpressionStatement","src":"20390:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20431:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20442:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20427:3:181"},"nodeType":"YulFunctionCall","src":"20427:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20447:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20420:6:181"},"nodeType":"YulFunctionCall","src":"20420:30:181"},"nodeType":"YulExpressionStatement","src":"20420:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20470:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20481:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20466:3:181"},"nodeType":"YulFunctionCall","src":"20466:18:181"},{"hexValue":"216e65772072617465206c696d6974","kind":"string","nodeType":"YulLiteral","src":"20486:17:181","type":"","value":"!new rate limit"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20459:6:181"},"nodeType":"YulFunctionCall","src":"20459:45:181"},"nodeType":"YulExpressionStatement","src":"20459:45:181"},{"nodeType":"YulAssignment","src":"20513:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20525:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20536:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20521:3:181"},"nodeType":"YulFunctionCall","src":"20521:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20513:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20357:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20371:4:181","type":""}],"src":"20206:339:181"},{"body":{"nodeType":"YulBlock","src":"20679:145:181","statements":[{"nodeType":"YulAssignment","src":"20689:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20701:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20712:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20697:3:181"},"nodeType":"YulFunctionCall","src":"20697:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20689:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20731:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"20746:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20762:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"20767:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"20758:3:181"},"nodeType":"YulFunctionCall","src":"20758:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"20771:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20754:3:181"},"nodeType":"YulFunctionCall","src":"20754:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20742:3:181"},"nodeType":"YulFunctionCall","src":"20742:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20724:6:181"},"nodeType":"YulFunctionCall","src":"20724:51:181"},"nodeType":"YulExpressionStatement","src":"20724:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20795:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20806:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20791:3:181"},"nodeType":"YulFunctionCall","src":"20791:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"20811:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20784:6:181"},"nodeType":"YulFunctionCall","src":"20784:34:181"},"nodeType":"YulExpressionStatement","src":"20784:34:181"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20640:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"20651:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"20659:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20670:4:181","type":""}],"src":"20550:274:181"},{"body":{"nodeType":"YulBlock","src":"21100:439:181","statements":[{"nodeType":"YulVariableDeclaration","src":"21110:30:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21124:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"21129:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21120:3:181"},"nodeType":"YulFunctionCall","src":"21120:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"21114:2:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21156:3:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21169:3:181","type":"","value":"224"},{"name":"value0","nodeType":"YulIdentifier","src":"21174:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21165:3:181"},"nodeType":"YulFunctionCall","src":"21165:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21183:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21161:3:181"},"nodeType":"YulFunctionCall","src":"21161:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21149:6:181"},"nodeType":"YulFunctionCall","src":"21149:38:181"},"nodeType":"YulExpressionStatement","src":"21149:38:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21207:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21212:1:181","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21203:3:181"},"nodeType":"YulFunctionCall","src":"21203:11:181"},{"name":"value1","nodeType":"YulIdentifier","src":"21216:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21196:6:181"},"nodeType":"YulFunctionCall","src":"21196:27:181"},"nodeType":"YulExpressionStatement","src":"21196:27:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21243:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21248:2:181","type":"","value":"36"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21239:3:181"},"nodeType":"YulFunctionCall","src":"21239:12:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21261:3:181","type":"","value":"224"},{"name":"value2","nodeType":"YulIdentifier","src":"21266:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21257:3:181"},"nodeType":"YulFunctionCall","src":"21257:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21275:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21253:3:181"},"nodeType":"YulFunctionCall","src":"21253:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21232:6:181"},"nodeType":"YulFunctionCall","src":"21232:47:181"},"nodeType":"YulExpressionStatement","src":"21232:47:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21299:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21304:2:181","type":"","value":"40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21295:3:181"},"nodeType":"YulFunctionCall","src":"21295:12:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21317:3:181","type":"","value":"224"},{"name":"value3","nodeType":"YulIdentifier","src":"21322:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21313:3:181"},"nodeType":"YulFunctionCall","src":"21313:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21331:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21309:3:181"},"nodeType":"YulFunctionCall","src":"21309:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21288:6:181"},"nodeType":"YulFunctionCall","src":"21288:47:181"},"nodeType":"YulExpressionStatement","src":"21288:47:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21355:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21360:2:181","type":"","value":"44"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21351:3:181"},"nodeType":"YulFunctionCall","src":"21351:12:181"},{"name":"value4","nodeType":"YulIdentifier","src":"21365:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21344:6:181"},"nodeType":"YulFunctionCall","src":"21344:28:181"},"nodeType":"YulExpressionStatement","src":"21344:28:181"},{"nodeType":"YulVariableDeclaration","src":"21381:27:181","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"21401:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"21395:5:181"},"nodeType":"YulFunctionCall","src":"21395:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"21385:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"21456:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"21464:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21452:3:181"},"nodeType":"YulFunctionCall","src":"21452:17:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21475:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21480:2:181","type":"","value":"76"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21471:3:181"},"nodeType":"YulFunctionCall","src":"21471:12:181"},{"name":"length","nodeType":"YulIdentifier","src":"21485:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"21417:34:181"},"nodeType":"YulFunctionCall","src":"21417:75:181"},"nodeType":"YulExpressionStatement","src":"21417:75:181"},{"nodeType":"YulAssignment","src":"21501:32:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21516:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"21521:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21512:3:181"},"nodeType":"YulFunctionCall","src":"21512:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"21530:2:181","type":"","value":"76"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21508:3:181"},"nodeType":"YulFunctionCall","src":"21508:25:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"21501:3:181"}]}]},"name":"abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"21036:3:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"21041:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"21049:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"21057:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"21065:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21073:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"21081:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"21092:3:181","type":""}],"src":"20829:710:181"},{"body":{"nodeType":"YulBlock","src":"21718:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21735:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21746:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21728:6:181"},"nodeType":"YulFunctionCall","src":"21728:21:181"},"nodeType":"YulExpressionStatement","src":"21728:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21769:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21780:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21765:3:181"},"nodeType":"YulFunctionCall","src":"21765:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"21785:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21758:6:181"},"nodeType":"YulFunctionCall","src":"21758:30:181"},"nodeType":"YulExpressionStatement","src":"21758:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21808:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21819:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21804:3:181"},"nodeType":"YulFunctionCall","src":"21804:18:181"},{"hexValue":"2164617461206c656e677468","kind":"string","nodeType":"YulLiteral","src":"21824:14:181","type":"","value":"!data length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21797:6:181"},"nodeType":"YulFunctionCall","src":"21797:42:181"},"nodeType":"YulExpressionStatement","src":"21797:42:181"},{"nodeType":"YulAssignment","src":"21848:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21860:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21871:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21856:3:181"},"nodeType":"YulFunctionCall","src":"21856:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21848:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21695:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21709:4:181","type":""}],"src":"21544:336:181"},{"body":{"nodeType":"YulBlock","src":"22124:199:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22141:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22152:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22134:6:181"},"nodeType":"YulFunctionCall","src":"22134:21:181"},"nodeType":"YulExpressionStatement","src":"22134:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22175:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22186:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22171:3:181"},"nodeType":"YulFunctionCall","src":"22171:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22191:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22164:6:181"},"nodeType":"YulFunctionCall","src":"22164:29:181"},"nodeType":"YulExpressionStatement","src":"22164:29:181"},{"nodeType":"YulAssignment","src":"22202:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22214:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22225:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22210:3:181"},"nodeType":"YulFunctionCall","src":"22210:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22202:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22249:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22260:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22245:3:181"},"nodeType":"YulFunctionCall","src":"22245:20:181"},{"name":"value0","nodeType":"YulIdentifier","src":"22267:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22238:6:181"},"nodeType":"YulFunctionCall","src":"22238:36:181"},"nodeType":"YulExpressionStatement","src":"22238:36:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22294:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22305:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22290:3:181"},"nodeType":"YulFunctionCall","src":"22290:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"22310:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22283:6:181"},"nodeType":"YulFunctionCall","src":"22283:34:181"},"nodeType":"YulExpressionStatement","src":"22283:34:181"}]},"name":"abi_encode_tuple_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_t_uint256_t_rational_32_by_1__to_t_string_memory_ptr_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22085:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22096:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"22104:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22115:4:181","type":""}],"src":"21885:438:181"},{"body":{"nodeType":"YulBlock","src":"22409:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"22455:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22464:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22467:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22457:6:181"},"nodeType":"YulFunctionCall","src":"22457:12:181"},"nodeType":"YulExpressionStatement","src":"22457:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"22430:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"22439:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22426:3:181"},"nodeType":"YulFunctionCall","src":"22426:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"22451:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"22422:3:181"},"nodeType":"YulFunctionCall","src":"22422:32:181"},"nodeType":"YulIf","src":"22419:52:181"},{"nodeType":"YulAssignment","src":"22480:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22496:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"22490:5:181"},"nodeType":"YulFunctionCall","src":"22490:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"22480:6:181"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22375:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"22386:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"22398:6:181","type":""}],"src":"22328:184:181"},{"body":{"nodeType":"YulBlock","src":"22691:154:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22708:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22719:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22701:6:181"},"nodeType":"YulFunctionCall","src":"22701:21:181"},"nodeType":"YulExpressionStatement","src":"22701:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22742:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22753:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22738:3:181"},"nodeType":"YulFunctionCall","src":"22738:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22758:1:181","type":"","value":"5"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22731:6:181"},"nodeType":"YulFunctionCall","src":"22731:29:181"},"nodeType":"YulExpressionStatement","src":"22731:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22780:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22791:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22776:3:181"},"nodeType":"YulFunctionCall","src":"22776:18:181"},{"hexValue":"2166656573","kind":"string","nodeType":"YulLiteral","src":"22796:7:181","type":"","value":"!fees"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22769:6:181"},"nodeType":"YulFunctionCall","src":"22769:35:181"},"nodeType":"YulExpressionStatement","src":"22769:35:181"},{"nodeType":"YulAssignment","src":"22813:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22825:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22836:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22821:3:181"},"nodeType":"YulFunctionCall","src":"22821:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22813:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_867777f634bb94108a594889ab4f827c256cf5677bbf34c222dbb2e03cd5a0d3__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22668:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22682:4:181","type":""}],"src":"22517:328:181"},{"body":{"nodeType":"YulBlock","src":"23089:329:181","statements":[{"nodeType":"YulVariableDeclaration","src":"23099:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23117:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"23122:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"23113:3:181"},"nodeType":"YulFunctionCall","src":"23113:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"23126:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"23109:3:181"},"nodeType":"YulFunctionCall","src":"23109:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"23103:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23144:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"23159:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"23167:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23155:3:181"},"nodeType":"YulFunctionCall","src":"23155:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23137:6:181"},"nodeType":"YulFunctionCall","src":"23137:34:181"},"nodeType":"YulExpressionStatement","src":"23137:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23191:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23202:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23187:3:181"},"nodeType":"YulFunctionCall","src":"23187:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23207:3:181","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23180:6:181"},"nodeType":"YulFunctionCall","src":"23180:31:181"},"nodeType":"YulExpressionStatement","src":"23180:31:181"},{"nodeType":"YulAssignment","src":"23220:53:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"23245:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23257:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23268:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23253:3:181"},"nodeType":"YulFunctionCall","src":"23253:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"23228:16:181"},"nodeType":"YulFunctionCall","src":"23228:45:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23220:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23293:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23304:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23289:3:181"},"nodeType":"YulFunctionCall","src":"23289:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"23313:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"23321:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23309:3:181"},"nodeType":"YulFunctionCall","src":"23309:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23282:6:181"},"nodeType":"YulFunctionCall","src":"23282:43:181"},"nodeType":"YulExpressionStatement","src":"23282:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23345:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23356:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23341:3:181"},"nodeType":"YulFunctionCall","src":"23341:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"23361:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23334:6:181"},"nodeType":"YulFunctionCall","src":"23334:34:181"},"nodeType":"YulExpressionStatement","src":"23334:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23388:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23399:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23384:3:181"},"nodeType":"YulFunctionCall","src":"23384:19:181"},{"name":"value4","nodeType":"YulIdentifier","src":"23405:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23377:6:181"},"nodeType":"YulFunctionCall","src":"23377:35:181"},"nodeType":"YulExpressionStatement","src":"23377:35:181"}]},"name":"abi_encode_tuple_t_address_t_bytes_memory_ptr_t_address_t_uint256_t_rational_2_by_1__to_t_address_t_bytes_memory_ptr_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23026:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"23037:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"23045:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"23053:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"23061:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"23069:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23080:4:181","type":""}],"src":"22850:568:181"},{"body":{"nodeType":"YulBlock","src":"23597:164:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23614:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23625:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23607:6:181"},"nodeType":"YulFunctionCall","src":"23607:21:181"},"nodeType":"YulExpressionStatement","src":"23607:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23648:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23659:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23644:3:181"},"nodeType":"YulFunctionCall","src":"23644:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23664:2:181","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23637:6:181"},"nodeType":"YulFunctionCall","src":"23637:30:181"},"nodeType":"YulExpressionStatement","src":"23637:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23687:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23698:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23683:3:181"},"nodeType":"YulFunctionCall","src":"23683:18:181"},{"hexValue":"6e657720726f6f7420656d707479","kind":"string","nodeType":"YulLiteral","src":"23703:16:181","type":"","value":"new root empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23676:6:181"},"nodeType":"YulFunctionCall","src":"23676:44:181"},"nodeType":"YulExpressionStatement","src":"23676:44:181"},{"nodeType":"YulAssignment","src":"23729:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23741:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23752:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23737:3:181"},"nodeType":"YulFunctionCall","src":"23737:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23729:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23574:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23588:4:181","type":""}],"src":"23423:338:181"},{"body":{"nodeType":"YulBlock","src":"23940:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23957:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23968:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23950:6:181"},"nodeType":"YulFunctionCall","src":"23950:21:181"},"nodeType":"YulExpressionStatement","src":"23950:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23991:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24002:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23987:3:181"},"nodeType":"YulFunctionCall","src":"23987:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24007:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23980:6:181"},"nodeType":"YulFunctionCall","src":"23980:30:181"},"nodeType":"YulExpressionStatement","src":"23980:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24030:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24041:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24026:3:181"},"nodeType":"YulFunctionCall","src":"24026:18:181"},{"hexValue":"726f6f7420616c72656164792070656e64696e67","kind":"string","nodeType":"YulLiteral","src":"24046:22:181","type":"","value":"root already pending"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24019:6:181"},"nodeType":"YulFunctionCall","src":"24019:50:181"},"nodeType":"YulExpressionStatement","src":"24019:50:181"},{"nodeType":"YulAssignment","src":"24078:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24090:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24101:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24086:3:181"},"nodeType":"YulFunctionCall","src":"24086:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24078:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23917:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23931:4:181","type":""}],"src":"23766:344:181"},{"body":{"nodeType":"YulBlock","src":"24289:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24306:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24317:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24299:6:181"},"nodeType":"YulFunctionCall","src":"24299:21:181"},"nodeType":"YulExpressionStatement","src":"24299:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24340:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24351:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24336:3:181"},"nodeType":"YulFunctionCall","src":"24336:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24356:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24329:6:181"},"nodeType":"YulFunctionCall","src":"24329:30:181"},"nodeType":"YulExpressionStatement","src":"24329:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24379:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24390:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24375:3:181"},"nodeType":"YulFunctionCall","src":"24375:18:181"},{"hexValue":"726f6f7420616c72656164792070726f76656e","kind":"string","nodeType":"YulLiteral","src":"24395:21:181","type":"","value":"root already proven"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24368:6:181"},"nodeType":"YulFunctionCall","src":"24368:49:181"},"nodeType":"YulExpressionStatement","src":"24368:49:181"},{"nodeType":"YulAssignment","src":"24426:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24438:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24449:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24434:3:181"},"nodeType":"YulFunctionCall","src":"24434:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24426:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24266:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24280:4:181","type":""}],"src":"24115:343:181"},{"body":{"nodeType":"YulBlock","src":"24637:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24654:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24665:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24647:6:181"},"nodeType":"YulFunctionCall","src":"24647:21:181"},"nodeType":"YulExpressionStatement","src":"24647:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24688:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24699:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24684:3:181"},"nodeType":"YulFunctionCall","src":"24684:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24704:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24677:6:181"},"nodeType":"YulFunctionCall","src":"24677:30:181"},"nodeType":"YulExpressionStatement","src":"24677:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24727:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24738:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24723:3:181"},"nodeType":"YulFunctionCall","src":"24723:18:181"},{"hexValue":"616767726567617465526f6f7420656d707479","kind":"string","nodeType":"YulLiteral","src":"24743:21:181","type":"","value":"aggregateRoot empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24716:6:181"},"nodeType":"YulFunctionCall","src":"24716:49:181"},"nodeType":"YulExpressionStatement","src":"24716:49:181"},{"nodeType":"YulAssignment","src":"24774:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24786:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24797:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24782:3:181"},"nodeType":"YulFunctionCall","src":"24782:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24774:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24614:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24628:4:181","type":""}],"src":"24463:343:181"},{"body":{"nodeType":"YulBlock","src":"24985:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25002:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25013:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24995:6:181"},"nodeType":"YulFunctionCall","src":"24995:21:181"},"nodeType":"YulExpressionStatement","src":"24995:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25036:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25047:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25032:3:181"},"nodeType":"YulFunctionCall","src":"25032:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"25052:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25025:6:181"},"nodeType":"YulFunctionCall","src":"25025:30:181"},"nodeType":"YulExpressionStatement","src":"25025:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25075:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25086:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25071:3:181"},"nodeType":"YulFunctionCall","src":"25071:18:181"},{"hexValue":"616767726567617465526f6f7420216578697374","kind":"string","nodeType":"YulLiteral","src":"25091:22:181","type":"","value":"aggregateRoot !exist"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25064:6:181"},"nodeType":"YulFunctionCall","src":"25064:50:181"},"nodeType":"YulExpressionStatement","src":"25064:50:181"},{"nodeType":"YulAssignment","src":"25123:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25135:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25146:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25131:3:181"},"nodeType":"YulFunctionCall","src":"25131:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25123:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24962:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24976:4:181","type":""}],"src":"24811:344:181"},{"body":{"nodeType":"YulBlock","src":"25334:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25351:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25362:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25344:6:181"},"nodeType":"YulFunctionCall","src":"25344:21:181"},"nodeType":"YulExpressionStatement","src":"25344:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25385:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25396:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25381:3:181"},"nodeType":"YulFunctionCall","src":"25381:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"25401:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25374:6:181"},"nodeType":"YulFunctionCall","src":"25374:30:181"},"nodeType":"YulExpressionStatement","src":"25374:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25424:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25435:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25420:3:181"},"nodeType":"YulFunctionCall","src":"25420:18:181"},{"hexValue":"616767726567617465526f6f7420217665726966696564","kind":"string","nodeType":"YulLiteral","src":"25440:25:181","type":"","value":"aggregateRoot !verified"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25413:6:181"},"nodeType":"YulFunctionCall","src":"25413:53:181"},"nodeType":"YulExpressionStatement","src":"25413:53:181"},{"nodeType":"YulAssignment","src":"25475:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25487:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25498:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25483:3:181"},"nodeType":"YulFunctionCall","src":"25483:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25475:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25311:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25325:4:181","type":""}],"src":"25160:347:181"},{"body":{"nodeType":"YulBlock","src":"25686:158:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25703:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25714:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25696:6:181"},"nodeType":"YulFunctionCall","src":"25696:21:181"},"nodeType":"YulExpressionStatement","src":"25696:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25737:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25748:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25733:3:181"},"nodeType":"YulFunctionCall","src":"25733:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"25753:1:181","type":"","value":"9"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25726:6:181"},"nodeType":"YulFunctionCall","src":"25726:29:181"},"nodeType":"YulExpressionStatement","src":"25726:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25775:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25786:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25771:3:181"},"nodeType":"YulFunctionCall","src":"25771:18:181"},{"hexValue":"216578656375746f72","kind":"string","nodeType":"YulLiteral","src":"25791:11:181","type":"","value":"!executor"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25764:6:181"},"nodeType":"YulFunctionCall","src":"25764:39:181"},"nodeType":"YulExpressionStatement","src":"25764:39:181"},{"nodeType":"YulAssignment","src":"25812:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25824:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25835:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25820:3:181"},"nodeType":"YulFunctionCall","src":"25820:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25812:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_78201d9d8a76cb57609402a557d055ee4f4bd3859f343728f9681a9fe9675816__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25663:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25677:4:181","type":""}],"src":"25512:332:181"},{"body":{"nodeType":"YulBlock","src":"25964:258:181","statements":[{"body":{"nodeType":"YulBlock","src":"26010:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26019:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"26022:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"26012:6:181"},"nodeType":"YulFunctionCall","src":"26012:12:181"},"nodeType":"YulExpressionStatement","src":"26012:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"25985:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"25994:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25981:3:181"},"nodeType":"YulFunctionCall","src":"25981:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"26006:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"25977:3:181"},"nodeType":"YulFunctionCall","src":"25977:32:181"},"nodeType":"YulIf","src":"25974:52:181"},{"nodeType":"YulVariableDeclaration","src":"26035:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26054:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26048:5:181"},"nodeType":"YulFunctionCall","src":"26048:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"26039:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"26098:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"26073:24:181"},"nodeType":"YulFunctionCall","src":"26073:31:181"},"nodeType":"YulExpressionStatement","src":"26073:31:181"},{"nodeType":"YulAssignment","src":"26113:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"26123:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"26113:6:181"}]},{"nodeType":"YulAssignment","src":"26137:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26157:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26168:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26153:3:181"},"nodeType":"YulFunctionCall","src":"26153:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26147:5:181"},"nodeType":"YulFunctionCall","src":"26147:25:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"26137:6:181"}]},{"nodeType":"YulAssignment","src":"26181:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26201:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26212:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26197:3:181"},"nodeType":"YulFunctionCall","src":"26197:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26191:5:181"},"nodeType":"YulFunctionCall","src":"26191:25:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"26181:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25914:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"25925:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"25937:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"25945:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"25953:6:181","type":""}],"src":"25849:373:181"},{"body":{"nodeType":"YulBlock","src":"26274:104:181","statements":[{"nodeType":"YulAssignment","src":"26284:39:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"26300:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"26303:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26296:3:181"},"nodeType":"YulFunctionCall","src":"26296:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"26314:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"26317:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26310:3:181"},"nodeType":"YulFunctionCall","src":"26310:12:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"26292:3:181"},"nodeType":"YulFunctionCall","src":"26292:31:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"26284:4:181"}]},{"body":{"nodeType":"YulBlock","src":"26350:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"26352:16:181"},"nodeType":"YulFunctionCall","src":"26352:18:181"},"nodeType":"YulExpressionStatement","src":"26352:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"26338:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"26344:4:181","type":"","value":"0xff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"26335:2:181"},"nodeType":"YulFunctionCall","src":"26335:14:181"},"nodeType":"YulIf","src":"26332:40:181"}]},"name":"checked_sub_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"26256:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"26259:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"26265:4:181","type":""}],"src":"26227:151:181"},{"body":{"nodeType":"YulBlock","src":"26433:175:181","statements":[{"nodeType":"YulVariableDeclaration","src":"26443:50:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"26470:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"26473:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26466:3:181"},"nodeType":"YulFunctionCall","src":"26466:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"26484:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"26487:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26480:3:181"},"nodeType":"YulFunctionCall","src":"26480:12:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"26462:3:181"},"nodeType":"YulFunctionCall","src":"26462:31:181"},"variables":[{"name":"product_raw","nodeType":"YulTypedName","src":"26447:11:181","type":""}]},{"nodeType":"YulAssignment","src":"26502:33:181","value":{"arguments":[{"name":"product_raw","nodeType":"YulIdentifier","src":"26517:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"26530:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26513:3:181"},"nodeType":"YulFunctionCall","src":"26513:22:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"26502:7:181"}]},{"body":{"nodeType":"YulBlock","src":"26580:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"26582:16:181"},"nodeType":"YulFunctionCall","src":"26582:18:181"},"nodeType":"YulExpressionStatement","src":"26582:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"26557:7:181"},{"name":"product_raw","nodeType":"YulIdentifier","src":"26566:11:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"26554:2:181"},"nodeType":"YulFunctionCall","src":"26554:24:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"26547:6:181"},"nodeType":"YulFunctionCall","src":"26547:32:181"},"nodeType":"YulIf","src":"26544:58:181"}]},"name":"checked_mul_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"26412:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"26415:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"26421:7:181","type":""}],"src":"26383:225:181"},{"body":{"nodeType":"YulBlock","src":"26796:269:181","statements":[{"nodeType":"YulAssignment","src":"26806:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26818:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26829:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26814:3:181"},"nodeType":"YulFunctionCall","src":"26814:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26806:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"26842:36:181","value":{"kind":"number","nodeType":"YulLiteral","src":"26852:26:181","type":"","value":"0xffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"26846:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26894:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"26909:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"26917:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26905:3:181"},"nodeType":"YulFunctionCall","src":"26905:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26887:6:181"},"nodeType":"YulFunctionCall","src":"26887:34:181"},"nodeType":"YulExpressionStatement","src":"26887:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26941:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26952:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26937:3:181"},"nodeType":"YulFunctionCall","src":"26937:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"26961:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"26969:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26957:3:181"},"nodeType":"YulFunctionCall","src":"26957:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26930:6:181"},"nodeType":"YulFunctionCall","src":"26930:43:181"},"nodeType":"YulExpressionStatement","src":"26930:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26993:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27004:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26989:3:181"},"nodeType":"YulFunctionCall","src":"26989:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"27009:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26982:6:181"},"nodeType":"YulFunctionCall","src":"26982:34:181"},"nodeType":"YulExpressionStatement","src":"26982:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27036:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27047:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27032:3:181"},"nodeType":"YulFunctionCall","src":"27032:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"27052:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27025:6:181"},"nodeType":"YulFunctionCall","src":"27025:34:181"},"nodeType":"YulExpressionStatement","src":"27025:34:181"}]},"name":"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26741:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"26752:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"26760:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"26768:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"26776:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26787:4:181","type":""}],"src":"26613:452:181"},{"body":{"nodeType":"YulBlock","src":"27244:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27261:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27272:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27254:6:181"},"nodeType":"YulFunctionCall","src":"27254:21:181"},"nodeType":"YulExpressionStatement","src":"27254:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27295:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27306:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27291:3:181"},"nodeType":"YulFunctionCall","src":"27291:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"27311:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27284:6:181"},"nodeType":"YulFunctionCall","src":"27284:30:181"},"nodeType":"YulExpressionStatement","src":"27284:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27334:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27345:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27330:3:181"},"nodeType":"YulFunctionCall","src":"27330:18:181"},{"hexValue":"217472756e6361746564","kind":"string","nodeType":"YulLiteral","src":"27350:12:181","type":"","value":"!truncated"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27323:6:181"},"nodeType":"YulFunctionCall","src":"27323:40:181"},"nodeType":"YulExpressionStatement","src":"27323:40:181"},{"nodeType":"YulAssignment","src":"27372:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27384:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"27395:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27380:3:181"},"nodeType":"YulFunctionCall","src":"27380:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"27372:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27221:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"27235:4:181","type":""}],"src":"27070:334:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        if iszero(lt(value0, 3))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 1120) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, shl(5, length)), 0x20), dataEnd) { revert(0, 0) }\n        value0 := add(_2, 0x20)\n        value1 := length\n        value2 := calldataload(add(headStart, 0x20))\n        let _3 := add(headStart, 1088)\n        if gt(_3, dataEnd) { revert(0, 0) }\n        value3 := add(headStart, 64)\n        value4 := calldataload(_3)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_bool_t_bytes_memory_ptr__to_t_bool_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, iszero(iszero(value0)))\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_bytes(value1, add(headStart, 64))\n    }\n    function abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n    }\n    function abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value2 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_bytes(value1, add(headStart, 64))\n    }\n    function abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!delayBlocks\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"root already sent\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, value0)\n        end := add(pos, 32)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        let tail_1 := abi_encode_bytes(value0, add(headStart, 96))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value1, tail_1)\n        mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!AMB\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        tail := abi_encode_bytes(value0, add(headStart, 64))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!proofs\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr(base_ref, ptr_to_tail) -> addr\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(1086)))) { revert(0, 0) }\n        addr := add(base_ref, rel_offset_of_tail)\n    }\n    function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 11)\n        mstore(add(headStart, 64), \"!sharedRoot\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"aggregateRoot !exists\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 8)\n        mstore(add(headStart, 64), \"!watcher\")\n        tail := add(headStart, 96)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"already watcher manager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!allowlisted\")\n        tail := add(headStart, 96)\n    }\n    function increment_t_uint32(value) -> ret\n    {\n        let _1 := 0xffffffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_decode_tuple_t_bytes32t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Pausable: paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"Pausable: not paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"!mirrorConnector\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!length\")\n        tail := add(headStart, 96)\n    }\n    function convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32(array) -> value\n    {\n        let length := mload(array)\n        value := mload(add(array, 0x20))\n        if lt(length, 0x20)\n        {\n            value := and(value, shl(shl(3, sub(0x20, length)), not(0)))\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"!MessageStatus.None\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"invalid inboundRoot\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!destination\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!proven\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n        mstore(add(headStart, 64), 96)\n        tail := abi_encode_bytes(value2, add(headStart, 96))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: insufficient balance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    { end := pos }\n    function abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 58)\n        mstore(add(headStart, 64), \"Address: unable to send value, r\")\n        mstore(add(headStart, 96), \"ecipient may have reverted\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"!new rate limit\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value5, value4, value3, value2, value1, value0) -> end\n    {\n        let _1 := shl(224, 0xffffffff)\n        mstore(pos, and(shl(224, value0), _1))\n        mstore(add(pos, 4), value1)\n        mstore(add(pos, 36), and(shl(224, value2), _1))\n        mstore(add(pos, 40), and(shl(224, value3), _1))\n        mstore(add(pos, 44), value4)\n        let length := mload(value5)\n        copy_memory_to_memory_with_cleanup(add(value5, 0x20), add(pos, 76), length)\n        end := add(add(pos, length), 76)\n    }\n    function abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!data length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_t_uint256_t_rational_32_by_1__to_t_string_memory_ptr_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        mstore(add(headStart, 96), 0)\n        tail := add(headStart, 128)\n        mstore(add(headStart, 0x20), value0)\n        mstore(add(headStart, 64), value1)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_867777f634bb94108a594889ab4f827c256cf5677bbf34c222dbb2e03cd5a0d3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 5)\n        mstore(add(headStart, 64), \"!fees\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr_t_address_t_uint256_t_rational_2_by_1__to_t_address_t_bytes_memory_ptr_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), 160)\n        tail := abi_encode_bytes(value1, add(headStart, 160))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"new root empty\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"root already pending\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"root already proven\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"aggregateRoot empty\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"aggregateRoot !exist\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"aggregateRoot !verified\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_78201d9d8a76cb57609402a557d055ee4f4bd3859f343728f9681a9fe9675816__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 9)\n        mstore(add(headStart, 64), \"!executor\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n    function checked_sub_t_uint8(x, y) -> diff\n    {\n        diff := sub(and(x, 0xff), and(y, 0xff))\n        if gt(diff, 0xff) { panic_error_0x11() }\n    }\n    function checked_mul_t_uint8(x, y) -> product\n    {\n        let product_raw := mul(and(x, 0xff), and(y, 0xff))\n        product := and(product_raw, 0xff)\n        if iszero(eq(product, product_raw)) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"!truncated\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"39039":[{"length":32,"start":1189},{"length":32,"start":1676},{"length":32,"start":5836},{"length":32,"start":7130}],"39042":[{"length":32,"start":2317},{"length":32,"start":3196},{"length":32,"start":6224},{"length":32,"start":8550}],"39045":[{"length":32,"start":1374}],"39048":[{"length":32,"start":720}],"39550":[{"length":32,"start":1918},{"length":32,"start":2772},{"length":32,"start":4116},{"length":32,"start":5930}],"39553":[{"length":32,"start":2391},{"length":32,"start":7419},{"length":32,"start":7560}],"39556":[{"length":32,"start":832},{"length":32,"start":7386}],"41823":[{"length":32,"start":11256},{"length":32,"start":11350}],"41825":[{"length":32,"start":8937},{"length":32,"start":9180},{"length":32,"start":11513}]},"linkReferences":{},"object":"6080604052600436106102b25760003560e01c80638456cb5911610175578063b697f531116100dc578063d2a3cc7111610095578063d88beda21161006f578063d88beda214610945578063db1b765914610979578063e0fed01014610999578063fa31de01146109b957600080fd5b8063d2a3cc71146108db578063d69f9d61146108fb578063d7d317b31461092f57600080fd5b8063b697f53114610816578063b95a200114610836578063c5b350df14610869578063cc3942831461087e578063d1851c921461089e578063d232c220146108bc57600080fd5b80639fa92f9d1161012e5780639fa92f9d14610759578063a01892a51461076c578063a792c29b146107a0578063ad9c0c2e146107c0578063b1f8100d146107d6578063b2f87643146107f657600080fd5b80638456cb59146106685780638d3638f41461067d5780638da5cb5b146106b057806398c9f2b9146106ce5780639abaf479146106fe5780639d3117c71461072c57600080fd5b8063572386ca1161021957806365eaf11b116101d257806365eaf11b146105c857806368742da6146105dd5780636a42b8f8146105fd5780636b04a93314610613578063715018a6146106335780637850b0201461064857600080fd5b8063572386ca146104c7578063579c1618146104f75780635bd11efc1461050d5780635c975abb1461052d5780635f61e3ec1461054c5780636159ada11461059857600080fd5b80633cf52ffb1161026b5780633cf52ffb146104005780633f4ba83a146104155780634ff746f61461042a578063508a109b1461044a5780635190bc531461046a57806352a9674b1461049357600080fd5b806314168416146102be5780631eeaabea1461030c57806325e3beda1461032e5780632bb1ae7c146103705780632bbd59ca14610383578063301f07c3146103c057600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102f27f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b34801561031857600080fd5b5061032c61032736600461311b565b6109e7565b005b34801561033a57600080fd5b506103627f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610303565b61032c61037e3660046131d7565b610a91565b34801561038f57600080fd5b506103b361039e36600461311b565b600f6020526000908152604090205460ff1681565b6040516103039190613222565b3480156103cc57600080fd5b506103f06103db36600461311b565b600a6020526000908152604090205460ff1681565b6040519015158152602001610303565b34801561040c57600080fd5b50600254610362565b34801561042157600080fd5b5061032c610c34565b34801561043657600080fd5b5061032c6104453660046131d7565b610c71565b34801561045657600080fd5b5061032c61046536600461324a565b610d17565b34801561047657600080fd5b506103f06104853660046132fb565b6001600160a01b0316301490565b34801561049f57600080fd5b506102f27f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d357600080fd5b506103f06104e236600461311b565b600c6020526000908152604090205460ff1681565b34801561050357600080fd5b5061036260055481565b34801561051957600080fd5b5061032c6105283660046132fb565b610fd9565b34801561053957600080fd5b50600354600160a01b900460ff166103f0565b34801561055857600080fd5b506105807f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610303565b3480156105a457600080fd5b506103f06105b33660046132fb565b600d6020526000908152604090205460ff1681565b3480156105d457600080fd5b50610362611010565b3480156105e957600080fd5b5061032c6105f83660046132fb565b611099565b34801561060957600080fd5b5062093a80610362565b34801561061f57600080fd5b5061032c61062e36600461311b565b611116565b34801561063f57600080fd5b5061032c6111e1565b34801561065457600080fd5b5061032c61066336600461311b565b61120c565b34801561067457600080fd5b5061032c611240565b34801561068957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102f2565b3480156106bc57600080fd5b506000546001600160a01b0316610580565b3480156106da57600080fd5b506103f06106e936600461311b565b600b6020526000908152604090205460ff1681565b34801561070a57600080fd5b5061071e6107193660046131d7565b6112f4565b604051610303929190613368565b34801561073857600080fd5b5061036261074736600461311b565b60096020526000908152604090205481565b34801561076557600080fd5b5030610580565b34801561077857600080fd5b506105807f000000000000000000000000000000000000000000000000000000000000000081565b3480156107ac57600080fd5b50600454610580906001600160a01b031681565b3480156107cc57600080fd5b5061036260085481565b3480156107e257600080fd5b5061032c6107f13660046132fb565b611306565b34801561080257600080fd5b5061032c6108113660046132fb565b6113a4565b34801561082257600080fd5b5061032c6108313660046132fb565b611420565b34801561084257600080fd5b506102f261085136600461339c565b600e6020526000908152604090205463ffffffff1681565b34801561087557600080fd5b5061032c61149f565b34801561088a57600080fd5b50600354610580906001600160a01b031681565b3480156108aa57600080fd5b506001546001600160a01b0316610580565b3480156108c857600080fd5b506000546001600160a01b0316156103f0565b3480156108e757600080fd5b5061032c6108f63660046132fb565b61150f565b34801561090757600080fd5b506105807f000000000000000000000000000000000000000000000000000000000000000081565b34801561093b57600080fd5b5061036260065481565b34801561095157600080fd5b506103627f000000000000000000000000000000000000000000000000000000000000000081565b34801561098557600080fd5b506103f06109943660046132fb565b6115e6565b3480156109a557600080fd5b5061032c6109b436600461311b565b6115f7565b3480156109c557600080fd5b506109d96109d43660046133b7565b61162b565b60405161030392919061340e565b6000546001600160a01b03163314610a12576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610a575760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610a996117fa565b43600554600654610aaa919061343d565b1115610ac9576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b549190613450565b6000818152600c602052604090205490915060ff1615610baa5760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b6044820152606401610a4e565b600081604051602001610bbf91815260200190565b6040516020818303038152906040529050610bda8184611847565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610c2790839086903390613469565b60405180910390a1505050565b6000546001600160a01b03163314610c5f576040516311a8a1bb60e31b815260040160405180910390fd5b610c67611884565b610c6f6118d4565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cd25760405162461bcd60e51b8152600401610a4e9060208082526004908201526310a0a6a160e11b604082015260600190565b610cdb81611929565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610d0c9291906134a7565b60405180910390a150565b610d1f6117fa565b610d276119c9565b83610d5e5760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b6044820152606401610a4e565b600085856000818110610d7357610d736134d1565b9050602002810190610d8591906134e7565b610d8f9080613508565b604051610d9d929190613556565b604051809103902090506000610e048288886000818110610dc057610dc06134d1565b9050602002810190610dd291906134e7565b60200189896000818110610de857610de86134d1565b9050602002810190610dfa91906134e7565b6104200135611a22565b9050610e1281868686611ac9565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610f385788888263ffffffff16818110610e5757610e576134d1565b9050602002810190610e6991906134e7565b610e739080613508565b604051610e81929190613556565b604051809103902093506000610ed6858b8b8563ffffffff16818110610ea957610ea96134d1565b9050602002810190610ebb91906134e7565b6020018c8c8663ffffffff16818110610de857610de86134d1565b9050838114610f155760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b6044820152606401610a4e565b506000848152600f60205260409020805460ff1916600190811790915501610e31565b5060005b818163ffffffff161015610fc457610fbb89898363ffffffff16818110610f6557610f656134d1565b9050602002810190610f7791906134e7565b610f819080613508565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bc492505050565b50600101610f3c565b50505050610fd26001600755565b5050505050565b6000546001600160a01b03163314611004576040516311a8a1bb60e31b815260040160405180910390fd5b61100d81611ea1565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110949190613450565b905090565b6000546001600160a01b031633146110c4576040516311a8a1bb60e31b815260040160405180910390fd5b476110cf8282611f0a565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d8260405161110a91815260200190565b60405180910390a25050565b6000546001600160a01b03163314611141576040516311a8a1bb60e31b815260040160405180910390fd5b611149611884565b600081815260096020526040812054900361119e5760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b6044820152606401610a4e565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610d0c9083815260200190565b6000546001600160a01b03163314610c6f576040516311a8a1bb60e31b815260040160405180910390fd5b6000546001600160a01b03163314611237576040516311a8a1bb60e31b815260040160405180910390fd5b61100d81612028565b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa158015611289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ad9190613566565b6112e45760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610a4e565b6112ec6117fa565b610c6f612069565b6000606061130183611929565b915091565b6000546001600160a01b03163314611331576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b03828116911614801561134f575060025415155b1561136d576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361139b57604051634a2fb73f60e11b815260040160405180910390fd5b61100d816120ac565b6000546001600160a01b031633146113cf576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610d0c565b6000546001600160a01b0316331461144b576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610d0c565b6001546001600160a01b031633146114ca576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426114dc9190613588565b116114fa576040516324e0285f60e21b815260040160405180910390fd5b600154610c6f906001600160a01b03166120fa565b6000546001600160a01b0316331461153a576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b03908116908216036115985760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e616765720000000000000000006044820152606401610a4e565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610d0c565b60006115f18261215f565b92915050565b6000546001600160a01b03163314611622576040516311a8a1bb60e31b815260040160405180910390fd5b61100d8161218b565b336000908152600d602052604081205460609060ff1661167c5760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b6044820152606401610a4e565b63ffffffff8086166000908152600e60205260408120805491929190911690826116a58361359b565b91906101000a81548163ffffffff021916908363ffffffff160217905550905060006117047f00000000000000000000000000000000000000000000000000000000000000006116fb336001600160a01b031690565b848a8a8a612209565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af115801561177a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179e91906135be565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f836117d0600184613588565b84876040516117e294939291906135e2565b60405180910390a15090989197509095505050505050565b600354600160a01b900460ff1615610c6f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a4e565b600354611880907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03168484612241565b5050565b600354600160a01b900460ff16610c6f5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a4e565b6118dc611884565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60035461193e906001600160a01b031661215f565b61197d5760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b6044820152606401610a4e565b80516020146119b85760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a4e565b61100d6119c482613611565b612441565b600260075403611a1b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a4e565b6002600755565b6000806000858152600f602052604090205460ff166002811115611a4857611a4861320c565b14611a8b5760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b6044820152606401610a4e565b611abf84846020806020026040519081016040528092919082602080028082843760009201919091525086915061256a9050565b90505b9392505050565b6000848152600b602052604090205460ff16611bbe57611ae8836128b8565b6000611b1e85846020806020026040519081016040528092919082602080028082843760009201919091525086915061256a9050565b9050838114611b655760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b6044820152606401610a4e565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611bb49086815260200190565b60405180910390a3505b50505050565b600080611bd18382612a18565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611c0962ffffff198316612a3c565b63ffffffff1614611c4b5760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b6044820152606401610a4e565b6000611c5c62ffffff198316612a51565b905060016000828152600f602052604090205460ff166002811115611c8357611c8361320c565b14611cba5760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b6044820152606401610a4e565b6000818152600f60205260409020805460ff191660021790556001611d1f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061343d565b611d299190613588565b5a11611d605760405162461bcd60e51b8152600401610a4e906020808252600490820152632167617360e01b604082015260600190565b6000611d7162ffffff198416612a9a565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611dcc62ffffff198816612aab565b611ddb62ffffff198916612abf565b611dea62ffffff198a16612ad4565b611e07611dfc62ffffff198c16612ae9565b62ffffff1916612b17565b604051602401611e1a9493929190613638565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050611e54858560008685612b60565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890611e8d9088908b908690613667565b60405180910390a150505050505050919050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b80471015611f5a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a4e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611fa7576040519150601f19603f3d011682016040523d82523d6000602084013e611fac565b606091505b50509050806120235760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a4e565b505050565b60105460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1601055565b6120716117fa565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861190c3390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60006115f17f000000000000000000000000000000000000000000000000000000000000000083612beb565b60055481036121ce5760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b6044820152606401610a4e565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610d0c565b606086868686868660405160200161222696959493929190613688565b60405160208183030381529060405290509695505050505050565b81516020146122815760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a4e565b8051156122bf5760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a4e565b60006122ca34612d21565b6040516366c96b3760e01b8152606060048201526000606482018190527f00000000000000000000000000000000000000000000000000000000000000006024830152602060448301529192506001600160a01b038716906366c96b3790608401602060405180830381865afa158015612348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236c9190613450565b905061237982600161343d565b81106123af5760405162461bcd60e51b8152602060048201526005602482015264216665657360d81b6044820152606401610a4e565b60405163bd45c4e760e01b81526001600160a01b0387169063bd45c4e790849061240790899089906000907f0000000000000000000000000000000000000000000000000000000000000000906002906004016136e2565b6000604051808303818588803b15801561242057600080fd5b505af1158015612434573d6000803e3d6000fd5b5050505050505050505050565b8061247f5760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b6044820152606401610a4e565b600081815260096020526040902054156124d25760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b6044820152606401610a4e565b6000818152600a602052604090205460ff16156125275760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b6044820152606401610a4e565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610d0c9083815260200190565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b806128fb5760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b6044820152606401610a4e565b6000818152600a602052604090205460ff16156129155750565b6000818152600960205260408120549081900361296b5760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b6044820152606401610a4e565b6008546129788243613588565b10156129c65760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f74202176657269666965640000000000000000006044820152606401610a4e565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b815160009060208401612a3364ffffffffff85168284612d37565b95945050505050565b60006115f162ffffff19831660286004612d74565b600080612a678360781c6001600160601b031690565b6001600160601b031690506000612a878460181c6001600160601b031690565b6001600160601b03169091209392505050565b60006115f1612aa883612da4565b90565b60006115f162ffffff198316826004612d74565b60006115f162ffffff19831660246004612d74565b60006115f162ffffff19831660046020612db5565b60006115f1604c612b0781601886901c6001600160601b0316613588565b62ffffff19851691906000612ec0565b6060600080612b2f8460181c6001600160601b031690565b6001600160601b031690506040519150819250612b4f8483602001612f3c565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff811115612b8657612b86613134565b6040519080825280601f01601f191660200182016040528015612bb0576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612bd1578692505b828152826000602083013e90999098509650505050505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612c515760405162461bcd60e51b815260206004820152600960248201526810b2bc32b1baba37b960b91b6044820152606401610a4e565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd69190613720565b5091509150836001600160a01b0316826001600160a01b0316148015612a3357507f000000000000000000000000000000000000000000000000000000000000000014949350505050565b6000601054821115612d335760105491505b5090565b600080612d44838561343d565b9050604051811115612d54575060005b80600003612d695762ffffff19915050611ac2565b612a3385858561302f565b6000612d81826020613757565b612d8c906008613770565b60ff16612d9a858585612db5565b901c949350505050565b60006115f162ffffff198316602c60205b60008160ff16600003612dca57506000611ac2565b612ddd8460181c6001600160601b031690565b6001600160601b0316612df360ff84168561343d565b1115612e5b57612e0c8460781c6001600160601b031690565b612e1f8560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610a4e565b60208260ff161115612e805760405163045df3f960e01b815260040160405180910390fd5b600882026000612e998660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612ed68660781c6001600160601b031690565b6001600160601b03169050612eea866130a6565b84612ef5878461343d565b612eff919061343d565b1115612f125762ffffff19915050612f34565b612f1c858261343d565b9050612f308364ffffffffff168286612d37565b9150505b949350505050565b600062ffffff1980841603612f645760405163148d513360e21b815260040160405180910390fd5b612f6d836130df565b15612f8b57604051632ee0949160e11b815260040160405180910390fd5b6000612fa08460181c6001600160601b031690565b6001600160601b031690506000612fc08560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115612fe15760206060fd5b8386858560045afa90508061300957604051632af1bd9b60e21b815260040160405180910390fd5b6130246130168860d81c90565b64ffffffffff16878661302f565b979650505050505050565b60006060601883856001600160601b03821682148015613057575086816001600160601b0316145b6130905760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610a4e565b96831b90961790911b90941790931b9392505050565b60006130bb8260181c6001600160601b031690565b6130ce8360781c6001600160601b031690565b016001600160601b03169050919050565b60006130eb8260d81c90565b64ffffffffff1664ffffffffff0361310557506001919050565b6000613110836130a6565b604051109392505050565b60006020828403121561312d57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261315b57600080fd5b813567ffffffffffffffff8082111561317657613176613134565b604051601f8301601f19908116603f0116810190828211818310171561319e5761319e613134565b816040528381528660208588010111156131b757600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156131e957600080fd5b813567ffffffffffffffff81111561320057600080fd5b612f348482850161314a565b634e487b7160e01b600052602160045260246000fd5b602081016003831061324457634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806000610460868803121561326357600080fd5b853567ffffffffffffffff8082111561327b57600080fd5b818801915088601f83011261328f57600080fd5b81358181111561329e57600080fd5b8960208260051b85010111156132b357600080fd5b6020928301975095505086013592506104408601878111156132d457600080fd5b94979396509194604001933592915050565b6001600160a01b038116811461100d57600080fd5b60006020828403121561330d57600080fd5b8135611ac2816132e6565b60005b8381101561333357818101518382015260200161331b565b50506000910152565b60008151808452613354816020860160208601613318565b601f01601f19169290920160200192915050565b8215158152604060208201526000611abf604083018461333c565b803563ffffffff8116811461339757600080fd5b919050565b6000602082840312156133ae57600080fd5b611ac282613383565b6000806000606084860312156133cc57600080fd5b6133d584613383565b925060208401359150604084013567ffffffffffffffff8111156133f857600080fd5b6134048682870161314a565b9150509250925092565b828152604060208201526000611abf604083018461333c565b634e487b7160e01b600052601160045260246000fd5b808201808211156115f1576115f1613427565b60006020828403121561346257600080fd5b5051919050565b60608152600061347c606083018661333c565b828103602084015261348e818661333c565b91505060018060a01b0383166040830152949350505050565b6040815260006134ba604083018561333c565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e198336030181126134fe57600080fd5b9190910192915050565b6000808335601e1984360301811261351f57600080fd5b83018035915067ffffffffffffffff82111561353a57600080fd5b60200191503681900382131561354f57600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561357857600080fd5b81518015158114611ac257600080fd5b818103818111156115f1576115f1613427565b600063ffffffff8083168181036135b4576135b4613427565b6001019392505050565b600080604083850312156135d157600080fd5b505080516020909101519092909150565b848152836020820152826040820152608060608201526000613607608083018461333c565b9695505050505050565b80516020808301519190811015613632576000198160200360031b1b821691505b50919050565b600063ffffffff808716835280861660208401525083604083015260806060830152613607608083018461333c565b8381528215156020820152606060408201526000612a33606083018461333c565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c83015282516136d081604c850160208701613318565b91909101604c01979650505050505050565b600060018060a01b03808816835260a0602084015261370460a084018861333c565b9516604083015250606081019290925260809091015292915050565b60008060006060848603121561373557600080fd5b8351613740816132e6565b602085015160409095015190969495509392505050565b60ff82811682821603908111156115f1576115f1613427565b60ff818116838216029081169081811461378c5761378c613427565b509291505056fea264697066735822122043cb57dda3d0d3e129ba582556881d3d321ac4038f65ad83464a601c6bc4318e64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B2 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x175 JUMPI DUP1 PUSH4 0xB697F531 GT PUSH2 0xDC JUMPI DUP1 PUSH4 0xD2A3CC71 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xD88BEDA2 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xD88BEDA2 EQ PUSH2 0x945 JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x979 JUMPI DUP1 PUSH4 0xE0FED010 EQ PUSH2 0x999 JUMPI DUP1 PUSH4 0xFA31DE01 EQ PUSH2 0x9B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD2A3CC71 EQ PUSH2 0x8DB JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x8FB JUMPI DUP1 PUSH4 0xD7D317B3 EQ PUSH2 0x92F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB697F531 EQ PUSH2 0x816 JUMPI DUP1 PUSH4 0xB95A2001 EQ PUSH2 0x836 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x869 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x87E JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x89E JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x8BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9FA92F9D GT PUSH2 0x12E JUMPI DUP1 PUSH4 0x9FA92F9D EQ PUSH2 0x759 JUMPI DUP1 PUSH4 0xA01892A5 EQ PUSH2 0x76C JUMPI DUP1 PUSH4 0xA792C29B EQ PUSH2 0x7A0 JUMPI DUP1 PUSH4 0xAD9C0C2E EQ PUSH2 0x7C0 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x7D6 JUMPI DUP1 PUSH4 0xB2F87643 EQ PUSH2 0x7F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x668 JUMPI DUP1 PUSH4 0x8D3638F4 EQ PUSH2 0x67D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x6B0 JUMPI DUP1 PUSH4 0x98C9F2B9 EQ PUSH2 0x6CE JUMPI DUP1 PUSH4 0x9ABAF479 EQ PUSH2 0x6FE JUMPI DUP1 PUSH4 0x9D3117C7 EQ PUSH2 0x72C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x572386CA GT PUSH2 0x219 JUMPI DUP1 PUSH4 0x65EAF11B GT PUSH2 0x1D2 JUMPI DUP1 PUSH4 0x65EAF11B EQ PUSH2 0x5C8 JUMPI DUP1 PUSH4 0x68742DA6 EQ PUSH2 0x5DD JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x5FD JUMPI DUP1 PUSH4 0x6B04A933 EQ PUSH2 0x613 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x633 JUMPI DUP1 PUSH4 0x7850B020 EQ PUSH2 0x648 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x572386CA EQ PUSH2 0x4C7 JUMPI DUP1 PUSH4 0x579C1618 EQ PUSH2 0x4F7 JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x52D JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x54C JUMPI DUP1 PUSH4 0x6159ADA1 EQ PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3CF52FFB GT PUSH2 0x26B JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x400 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x415 JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x42A JUMPI DUP1 PUSH4 0x508A109B EQ PUSH2 0x44A JUMPI DUP1 PUSH4 0x5190BC53 EQ PUSH2 0x46A JUMPI DUP1 PUSH4 0x52A9674B EQ PUSH2 0x493 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x2BE JUMPI DUP1 PUSH4 0x1EEAABEA EQ PUSH2 0x30C JUMPI DUP1 PUSH4 0x25E3BEDA EQ PUSH2 0x32E JUMPI DUP1 PUSH4 0x2BB1AE7C EQ PUSH2 0x370 JUMPI DUP1 PUSH4 0x2BBD59CA EQ PUSH2 0x383 JUMPI DUP1 PUSH4 0x301F07C3 EQ PUSH2 0x3C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x2B9 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F2 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x318 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x327 CALLDATASIZE PUSH1 0x4 PUSH2 0x311B JUMP JUMPDEST PUSH2 0x9E7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x303 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x37E CALLDATASIZE PUSH1 0x4 PUSH2 0x31D7 JUMP JUMPDEST PUSH2 0xA91 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x38F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3B3 PUSH2 0x39E CALLDATASIZE PUSH1 0x4 PUSH2 0x311B JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x303 SWAP2 SWAP1 PUSH2 0x3222 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x3DB CALLDATASIZE PUSH1 0x4 PUSH2 0x311B JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x303 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x40C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x362 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x421 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0xC34 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x436 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x445 CALLDATASIZE PUSH1 0x4 PUSH2 0x31D7 JUMP JUMPDEST PUSH2 0xC71 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x456 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x465 CALLDATASIZE PUSH1 0x4 PUSH2 0x324A JUMP JUMPDEST PUSH2 0xD17 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x476 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x485 CALLDATASIZE PUSH1 0x4 PUSH2 0x32FB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x49F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F2 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x4E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x311B JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x503 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x519 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x528 CALLDATASIZE PUSH1 0x4 PUSH2 0x32FB JUMP JUMPDEST PUSH2 0xFD9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x539 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3F0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x558 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x580 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x303 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x5B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x32FB JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH2 0x1010 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x5F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x32FB JUMP JUMPDEST PUSH2 0x1099 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x609 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x362 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x61F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x62E CALLDATASIZE PUSH1 0x4 PUSH2 0x311B JUMP JUMPDEST PUSH2 0x1116 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x63F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x11E1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x654 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x663 CALLDATASIZE PUSH1 0x4 PUSH2 0x311B JUMP JUMPDEST PUSH2 0x120C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x674 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x1240 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x689 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x0 PUSH2 0x2F2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x580 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x6E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x311B JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x71E PUSH2 0x719 CALLDATASIZE PUSH1 0x4 PUSH2 0x31D7 JUMP JUMPDEST PUSH2 0x12F4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x303 SWAP3 SWAP2 SWAP1 PUSH2 0x3368 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x738 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH2 0x747 CALLDATASIZE PUSH1 0x4 PUSH2 0x311B JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x765 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH2 0x580 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x778 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x580 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x580 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x7F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x32FB JUMP JUMPDEST PUSH2 0x1306 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x802 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x811 CALLDATASIZE PUSH1 0x4 PUSH2 0x32FB JUMP JUMPDEST PUSH2 0x13A4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x822 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x831 CALLDATASIZE PUSH1 0x4 PUSH2 0x32FB JUMP JUMPDEST PUSH2 0x1420 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x842 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F2 PUSH2 0x851 CALLDATASIZE PUSH1 0x4 PUSH2 0x339C JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x875 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x149F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x580 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x580 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x3F0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x8F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x32FB JUMP JUMPDEST PUSH2 0x150F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x907 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x580 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x93B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x951 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x362 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x985 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3F0 PUSH2 0x994 CALLDATASIZE PUSH1 0x4 PUSH2 0x32FB JUMP JUMPDEST PUSH2 0x15E6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32C PUSH2 0x9B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x311B JUMP JUMPDEST PUSH2 0x15F7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9D9 PUSH2 0x9D4 CALLDATASIZE PUSH1 0x4 PUSH2 0x33B7 JUMP JUMPDEST PUSH2 0x162B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x303 SWAP3 SWAP2 SWAP1 PUSH2 0x340E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA12 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD DUP2 SUB PUSH2 0xA57 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2164656C6179426C6F636B73 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLER DUP2 MSTORE DUP2 SWAP1 PUSH32 0x8BD16320F3B60336ED5FD2A770EB7453E7E71CFEF4462ADDFFD7AE9DFE201C8E SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x8 SSTORE JUMP JUMPDEST PUSH2 0xA99 PUSH2 0x17FA JUMP JUMPDEST NUMBER PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD PUSH2 0xAAA SWAP2 SWAP1 PUSH2 0x343D JUMP JUMPDEST GT ISZERO PUSH2 0xAC9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x46CF2AF1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST NUMBER PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB30 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB54 SWAP2 SWAP1 PUSH2 0x3450 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xBAA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1C9BDBDD08185B1C9958591E481CD95B9D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xBBF SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH2 0xBDA DUP2 DUP5 PUSH2 0x1847 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 SWAP1 PUSH2 0xC27 SWAP1 DUP4 SWAP1 DUP7 SWAP1 CALLER SWAP1 PUSH2 0x3469 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC5F JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC67 PUSH2 0x1884 JUMP JUMPDEST PUSH2 0xC6F PUSH2 0x18D4 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xCD2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA4E SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0xCDB DUP2 PUSH2 0x1929 JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0xD0C SWAP3 SWAP2 SWAP1 PUSH2 0x34A7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xD1F PUSH2 0x17FA JUMP JUMPDEST PUSH2 0xD27 PUSH2 0x19C9 JUMP JUMPDEST DUP4 PUSH2 0xD5E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x2170726F6F6673 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD73 JUMPI PUSH2 0xD73 PUSH2 0x34D1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD85 SWAP2 SWAP1 PUSH2 0x34E7 JUMP JUMPDEST PUSH2 0xD8F SWAP1 DUP1 PUSH2 0x3508 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9D SWAP3 SWAP2 SWAP1 PUSH2 0x3556 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xE04 DUP3 DUP9 DUP9 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xDC0 JUMPI PUSH2 0xDC0 PUSH2 0x34D1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xDD2 SWAP2 SWAP1 PUSH2 0x34E7 JUMP JUMPDEST PUSH1 0x20 ADD DUP10 DUP10 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xDE8 JUMPI PUSH2 0xDE8 PUSH2 0x34D1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xDFA SWAP2 SWAP1 PUSH2 0x34E7 JUMP JUMPDEST PUSH2 0x420 ADD CALLDATALOAD PUSH2 0x1A22 JUMP JUMPDEST SWAP1 POP PUSH2 0xE12 DUP2 DUP7 DUP7 DUP7 PUSH2 0x1AC9 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP7 SWAP1 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xF38 JUMPI DUP9 DUP9 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xE57 JUMPI PUSH2 0xE57 PUSH2 0x34D1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE69 SWAP2 SWAP1 PUSH2 0x34E7 JUMP JUMPDEST PUSH2 0xE73 SWAP1 DUP1 PUSH2 0x3508 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE81 SWAP3 SWAP2 SWAP1 PUSH2 0x3556 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP4 POP PUSH1 0x0 PUSH2 0xED6 DUP6 DUP12 DUP12 DUP6 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xEA9 JUMPI PUSH2 0xEA9 PUSH2 0x34D1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xEBB SWAP2 SWAP1 PUSH2 0x34E7 JUMP JUMPDEST PUSH1 0x20 ADD DUP13 DUP13 DUP7 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xDE8 JUMPI PUSH2 0xDE8 PUSH2 0x34D1 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0xF15 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x85CDA185C9959149BDBDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE ADD PUSH2 0xE31 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xFC4 JUMPI PUSH2 0xFBB DUP10 DUP10 DUP4 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xF65 JUMPI PUSH2 0xF65 PUSH2 0x34D1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xF77 SWAP2 SWAP1 PUSH2 0x34E7 JUMP JUMPDEST PUSH2 0xF81 SWAP1 DUP1 PUSH2 0x3508 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1BC4 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xF3C JUMP JUMPDEST POP POP POP POP PUSH2 0xFD2 PUSH1 0x1 PUSH1 0x7 SSTORE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1004 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x100D DUP2 PUSH2 0x1EA1 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1070 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1094 SWAP2 SWAP1 PUSH2 0x3450 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10C4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SELFBALANCE PUSH2 0x10CF DUP3 DUP3 PUSH2 0x1F0A JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEAFF4B37086828766AD3268786972C0CD24259D4C87A80F9D3963A3C3D999B0D DUP3 PUSH1 0x40 MLOAD PUSH2 0x110A SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1141 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1149 PUSH2 0x1884 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SUB PUSH2 0x119E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x616767726567617465526F6F742021657869737473 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xF51534ECF10A58DB36CE4F5180F59DEDDF3B3EB7C5E7454E602C2F80A40CC739 SWAP1 PUSH2 0xD0C SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC6F JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1237 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x100D DUP2 PUSH2 0x2028 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1289 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12AD SWAP2 SWAP1 PUSH2 0x3566 JUMP JUMPDEST PUSH2 0x12E4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH2 0x12EC PUSH2 0x17FA JUMP JUMPDEST PUSH2 0xC6F PUSH2 0x2069 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1301 DUP4 PUSH2 0x1929 JUMP JUMPDEST SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1331 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x134F JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x136D JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x139B JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x100D DUP2 PUSH2 0x20AC JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x13CF JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x384859C5EF5FAFAC31E8BC92CE7FB48B1F2C74C4DD5E212EB84EC202FA5D9FAD SWAP2 ADD PUSH2 0xD0C JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x144B JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xD65ECA5D561D3A4568C87B9B13CED4AB52A69EDADFDFDB22D76BC595F36D7D87 SWAP2 ADD PUSH2 0xD0C JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x14CA JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x14DC SWAP2 SWAP1 PUSH2 0x3588 JUMP JUMPDEST GT PUSH2 0x14FA JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0xC6F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x20FA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x153A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0x1598 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616C72656164792077617463686572206D616E61676572000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC16D059E43D7F8E29CCB4E001A2F249D3C59E274925D6A6BC3912943441D9F6C SWAP1 PUSH1 0x20 ADD PUSH2 0xD0C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F1 DUP3 PUSH2 0x215F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1622 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x100D DUP2 PUSH2 0x218B JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x60 SWAP1 PUSH1 0xFF AND PUSH2 0x167C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x8585B1B1BDDDB1A5CDD1959 PUSH1 0xA2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP3 PUSH2 0x16A5 DUP4 PUSH2 0x359B JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH4 0xFFFFFFFF AND MUL OR SWAP1 SSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0x1704 PUSH32 0x0 PUSH2 0x16FB CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP5 DUP11 DUP11 DUP11 PUSH2 0x2209 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH4 0x2D287E43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2D287E43 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x177A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x179E SWAP2 SWAP1 PUSH2 0x35BE JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH32 0x40F08EE347FC927AE45902EDC87DEBB024AAB1A311943731968607F603F2152F DUP4 PUSH2 0x17D0 PUSH1 0x1 DUP5 PUSH2 0x3588 JUMP JUMPDEST DUP5 DUP8 PUSH1 0x40 MLOAD PUSH2 0x17E2 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x35E2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP SWAP1 SWAP9 SWAP2 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xC6F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x1880 SWAP1 PUSH32 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 DUP5 PUSH2 0x2241 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xC6F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH2 0x18DC PUSH2 0x1884 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x193E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x215F JUMP JUMPDEST PUSH2 0x197D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x10B6B4B93937B921B7B73732B1BA37B9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0x19B8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH2 0x100D PUSH2 0x19C4 DUP3 PUSH2 0x3611 JUMP JUMPDEST PUSH2 0x2441 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SLOAD SUB PUSH2 0x1A1B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1A48 JUMPI PUSH2 0x1A48 PUSH2 0x320C JUMP JUMPDEST EQ PUSH2 0x1A8B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x214D6573736167655374617475732E4E6F6E65 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH2 0x1ABF DUP5 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x256A SWAP1 POP JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1BBE JUMPI PUSH2 0x1AE8 DUP4 PUSH2 0x28B8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B1E DUP6 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x256A SWAP1 POP JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0x1B65 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1A5B9D985B1A59081A5B989BDD5B99149BDBDD PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP5 SWAP1 DUP7 SWAP1 PUSH32 0x7EC1EA51FE3DB53E55ED9D922854BC2156F467FF2F87D74E2086DAE2C84A88A8 SWAP1 PUSH2 0x1BB4 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1BD1 DUP4 DUP3 PUSH2 0x2A18 JUMP JUMPDEST SWAP1 POP PUSH4 0xFFFFFFFF PUSH32 0x0 AND PUSH2 0x1C09 PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x2A3C JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x1C4B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B232B9BA34B730BA34B7B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C5C PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x2A51 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1C83 JUMPI PUSH2 0x1C83 PUSH2 0x320C JUMP JUMPDEST EQ PUSH2 0x1CBA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x10B83937BB32B7 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x2 OR SWAP1 SSTORE PUSH1 0x1 PUSH2 0x1D1F PUSH32 0x0 PUSH32 0x0 PUSH2 0x343D JUMP JUMPDEST PUSH2 0x1D29 SWAP2 SWAP1 PUSH2 0x3588 JUMP JUMPDEST GAS GT PUSH2 0x1D60 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA4E SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x21676173 PUSH1 0xE0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D71 PUSH3 0xFFFFFF NOT DUP5 AND PUSH2 0x2A9A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH32 0x0 SWAP2 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x1DCC PUSH3 0xFFFFFF NOT DUP9 AND PUSH2 0x2AAB JUMP JUMPDEST PUSH2 0x1DDB PUSH3 0xFFFFFF NOT DUP10 AND PUSH2 0x2ABF JUMP JUMPDEST PUSH2 0x1DEA PUSH3 0xFFFFFF NOT DUP11 AND PUSH2 0x2AD4 JUMP JUMPDEST PUSH2 0x1E07 PUSH2 0x1DFC PUSH3 0xFFFFFF NOT DUP13 AND PUSH2 0x2AE9 JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND PUSH2 0x2B17 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1E1A SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3638 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xAB2DC3F5 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 POP PUSH2 0x1E54 DUP6 DUP6 PUSH1 0x0 DUP7 DUP6 PUSH2 0x2B60 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP10 POP SWAP3 POP PUSH32 0xD42DE95A9B26F1BE134C8ECCE389DC4FCFA18753D01661B7B361233569E8FE48 SWAP1 PUSH2 0x1E8D SWAP1 DUP9 SWAP1 DUP12 SWAP1 DUP7 SWAP1 PUSH2 0x3667 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x1F5A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1FA7 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1FAC JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2023 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA4E JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x10 SSTORE JUMP JUMPDEST PUSH2 0x2071 PUSH2 0x17FA JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x190C CALLER SWAP1 JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F1 PUSH32 0x0 DUP4 PUSH2 0x2BEB JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 SUB PUSH2 0x21CE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x85B995DC81C985D19481B1A5B5A5D PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0x8E7FA5E406CB856AAB05575E45EA011C6748376CC1B5229E3D67B92986406A15 SWAP2 ADD PUSH2 0xD0C JUMP JUMPDEST PUSH1 0x60 DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2226 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3688 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x2281 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x22BF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22CA CALLVALUE PUSH2 0x2D21 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x66C96B37 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x60 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP3 ADD DUP2 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x20 PUSH1 0x44 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0x66C96B37 SWAP1 PUSH1 0x84 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2348 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x236C SWAP2 SWAP1 PUSH2 0x3450 JUMP JUMPDEST SWAP1 POP PUSH2 0x2379 DUP3 PUSH1 0x1 PUSH2 0x343D JUMP JUMPDEST DUP2 LT PUSH2 0x23AF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x5 PUSH1 0x24 DUP3 ADD MSTORE PUSH5 0x2166656573 PUSH1 0xD8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xBD45C4E7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP1 PUSH4 0xBD45C4E7 SWAP1 DUP5 SWAP1 PUSH2 0x2407 SWAP1 DUP10 SWAP1 DUP10 SWAP1 PUSH1 0x0 SWAP1 PUSH32 0x0 SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x4 ADD PUSH2 0x36E2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2420 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2434 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x247F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x6E657720726F6F7420656D707479 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x24D2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x726F6F7420616C72656164792070656E64696E67 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2527 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x3937B7BA1030B63932B0B23C90383937BB32B7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 NUMBER SWAP1 SSTORE MLOAD PUSH32 0x84EF18531155AFDB0E64FF905D67044AE3AAC63A6FBA4661CFD9C4C14F289BC8 SWAP1 PUSH2 0xD0C SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x5 DUP3 DUP2 SHL DUP3 AND SWAP5 DUP6 MSTORE DUP4 MLOAD SWAP5 DUP3 SUB SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x40 PUSH1 0x0 DUP2 DUP2 KECCAK256 PUSH1 0x2 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x4 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP3 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x8 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x10 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 DUP5 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 DUP4 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 SWAP1 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xE0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x100 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x200 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x120 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x400 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x140 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x800 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x160 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x1000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x2000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x4000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1C0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x8000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1E0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH3 0x10000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x20000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x220 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x40000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x240 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x80000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x260 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x100000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x280 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x200000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x400000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x800000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2E0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x1000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x300 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x2000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x320 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x4000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x340 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x8000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x360 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x10000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x380 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x20000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x40000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x80000000 SWAP1 SWAP5 AND ISZERO SWAP1 SWAP6 SHL SWAP2 DUP3 SWAP1 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x3E0 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x28FB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x616767726567617465526F6F7420656D707479 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2915 JUMPI POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x296B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x1859D9DC9959D85D19549BDBDD0808595E1A5CDD PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x2978 DUP3 NUMBER PUSH2 0x3588 JUMP JUMPDEST LT ISZERO PUSH2 0x29C6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616767726567617465526F6F7420217665726966696564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP4 SWAP2 PUSH32 0x36B314ABA9F663B4D3EF3288AE489341CC5E6A2725A05FA2B72DF7A27E03F42A SWAP2 LOG2 POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0x2A33 PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x2D37 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F1 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x28 PUSH1 0x4 PUSH2 0x2D74 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2A67 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2A87 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 SWAP2 KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F1 PUSH2 0x2AA8 DUP4 PUSH2 0x2DA4 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F1 PUSH3 0xFFFFFF NOT DUP4 AND DUP3 PUSH1 0x4 PUSH2 0x2D74 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F1 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x24 PUSH1 0x4 PUSH2 0x2D74 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F1 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x4 PUSH1 0x20 PUSH2 0x2DB5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F1 PUSH1 0x4C PUSH2 0x2B07 DUP2 PUSH1 0x18 DUP7 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x3588 JUMP JUMPDEST PUSH3 0xFFFFFF NOT DUP6 AND SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2EC0 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x2B2F DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x40 MLOAD SWAP2 POP DUP2 SWAP3 POP PUSH2 0x2B4F DUP5 DUP4 PUSH1 0x20 ADD PUSH2 0x2F3C JUMP JUMPDEST POP DUP2 DUP2 ADD PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH2 0xFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2B86 JUMPI PUSH2 0x2B86 PUSH2 0x3134 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2BB0 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP8 MLOAD PUSH1 0x20 DUP10 ADD DUP12 DUP15 DUP15 CALL SWAP2 POP RETURNDATASIZE SWAP3 POP DUP7 DUP4 GT ISZERO PUSH2 0x2BD1 JUMPI DUP7 SWAP3 POP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x2C51 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x10B2BC32B1BABA37B9 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0496D6A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2CB2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2CD6 SWAP2 SWAP1 PUSH2 0x3720 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 ISZERO PUSH2 0x2A33 JUMPI POP PUSH32 0x0 EQ SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x10 SLOAD DUP3 GT ISZERO PUSH2 0x2D33 JUMPI PUSH1 0x10 SLOAD SWAP2 POP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2D44 DUP4 DUP6 PUSH2 0x343D JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x2D54 JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x2D69 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x2A33 DUP6 DUP6 DUP6 PUSH2 0x302F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D81 DUP3 PUSH1 0x20 PUSH2 0x3757 JUMP JUMPDEST PUSH2 0x2D8C SWAP1 PUSH1 0x8 PUSH2 0x3770 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x2D9A DUP6 DUP6 DUP6 PUSH2 0x2DB5 JUMP JUMPDEST SWAP1 SHR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F1 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x2C PUSH1 0x20 JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0x2DCA JUMPI POP PUSH1 0x0 PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x2DDD DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x2DF3 PUSH1 0xFF DUP5 AND DUP6 PUSH2 0x343D JUMP JUMPDEST GT ISZERO PUSH2 0x2E5B JUMPI PUSH2 0x2E0C DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2E1F DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA4E JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x2E80 JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0x2E99 DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT DUP5 ADD SAR SWAP2 SWAP1 SWAP6 ADD MLOAD AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2ED6 DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH2 0x2EEA DUP7 PUSH2 0x30A6 JUMP JUMPDEST DUP5 PUSH2 0x2EF5 DUP8 DUP5 PUSH2 0x343D JUMP JUMPDEST PUSH2 0x2EFF SWAP2 SWAP1 PUSH2 0x343D JUMP JUMPDEST GT ISZERO PUSH2 0x2F12 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x2F34 JUMP JUMPDEST PUSH2 0x2F1C DUP6 DUP3 PUSH2 0x343D JUMP JUMPDEST SWAP1 POP PUSH2 0x2F30 DUP4 PUSH5 0xFFFFFFFFFF AND DUP3 DUP7 PUSH2 0x2D37 JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFFFFFF NOT DUP1 DUP5 AND SUB PUSH2 0x2F64 JUMPI PUSH1 0x40 MLOAD PUSH4 0x148D5133 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2F6D DUP4 PUSH2 0x30DF JUMP JUMPDEST ISZERO PUSH2 0x2F8B JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EE09491 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2FA0 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2FC0 DUP6 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD SWAP2 POP DUP6 DUP3 GT ISZERO PUSH2 0x2FE1 JUMPI PUSH1 0x20 PUSH1 0x60 REVERT JUMPDEST DUP4 DUP7 DUP6 DUP6 PUSH1 0x4 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x3009 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2AF1BD9B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3024 PUSH2 0x3016 DUP9 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND DUP8 DUP7 PUSH2 0x302F JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0x3057 JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0x3090 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA4E JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x30BB DUP3 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x30CE DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x30EB DUP3 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH5 0xFFFFFFFFFF SUB PUSH2 0x3105 JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3110 DUP4 PUSH2 0x30A6 JUMP JUMPDEST PUSH1 0x40 MLOAD LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x312D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x315B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x3176 JUMPI PUSH2 0x3176 PUSH2 0x3134 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x319E JUMPI PUSH2 0x319E PUSH2 0x3134 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x31B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x31E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F34 DUP5 DUP3 DUP6 ADD PUSH2 0x314A JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH2 0x3244 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x460 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3263 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x327B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x328F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x329E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x32B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 DUP4 ADD SWAP8 POP SWAP6 POP POP DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x440 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x32D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x40 ADD SWAP4 CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x100D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x330D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1AC2 DUP2 PUSH2 0x32E6 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3333 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x331B JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x3354 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3318 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1ABF PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x333C JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3397 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1AC2 DUP3 PUSH2 0x3383 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x33CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x33D5 DUP5 PUSH2 0x3383 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x33F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3404 DUP7 DUP3 DUP8 ADD PUSH2 0x314A JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1ABF PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x333C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x15F1 JUMPI PUSH2 0x15F1 PUSH2 0x3427 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3462 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x347C PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x333C JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x348E DUP2 DUP7 PUSH2 0x333C JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x34BA PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x333C JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x43E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x34FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x351F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x353A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x354F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3578 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1AC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x15F1 JUMPI PUSH2 0x15F1 PUSH2 0x3427 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x35B4 JUMPI PUSH2 0x35B4 PUSH2 0x3427 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x35D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x3607 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x333C JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x3632 JUMPI PUSH1 0x0 NOT DUP2 PUSH1 0x20 SUB PUSH1 0x3 SHL SHL DUP3 AND SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3607 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x333C JUMP JUMPDEST DUP4 DUP2 MSTORE DUP3 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2A33 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x333C JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP1 DUP10 PUSH1 0xE0 SHL AND DUP4 MSTORE DUP8 PUSH1 0x4 DUP5 ADD MSTORE DUP1 DUP8 PUSH1 0xE0 SHL AND PUSH1 0x24 DUP5 ADD MSTORE DUP1 DUP7 PUSH1 0xE0 SHL AND PUSH1 0x28 DUP5 ADD MSTORE POP DUP4 PUSH1 0x2C DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x36D0 DUP2 PUSH1 0x4C DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x3318 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x4C ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND DUP4 MSTORE PUSH1 0xA0 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x3704 PUSH1 0xA0 DUP5 ADD DUP9 PUSH2 0x333C JUMP JUMPDEST SWAP6 AND PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3735 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH2 0x3740 DUP2 PUSH2 0x32E6 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x40 SWAP1 SWAP6 ADD MLOAD SWAP1 SWAP7 SWAP5 SWAP6 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x15F1 JUMPI PUSH2 0x15F1 PUSH2 0x3427 JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND MUL SWAP1 DUP2 AND SWAP1 DUP2 DUP2 EQ PUSH2 0x378C JUMPI PUSH2 0x378C PUSH2 0x3427 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER 0xCB JUMPI 0xDD LOG3 0xD0 0xD3 0xE1 0x29 0xBA PC 0x25 JUMP DUP9 SAR RETURNDATASIZE ORIGIN BYTE 0xC4 SUB DUP16 PUSH6 0xAD83464A601C PUSH12 0xC4318E64736F6C6343000811 STOP CALLER ","sourceMap":"241:1743:129:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1587:37:116;;;;;;;;;;;;;;;;;;188:10:181;176:23;;;158:42;;146:2;131:18;1587:37:116;;;;;;;;8274:213:120;;;;;;;;;;-1:-1:-1;8274:213:120;;;;;:::i;:::-;;:::i;:::-;;3780:36;;;;;;;;;;;;;;;;;;542:25:181;;;530:2;515:18;3780:36:120;396:177:181;11079:368:120;;;;;;:::i;:::-;;:::i;5679:49::-;;;;;;;;;;-1:-1:-1;5679:49:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;4723:52::-;;;;;;;;;;-1:-1:-1;4723:52:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2592:14:181;;2585:22;2567:41;;2555:2;2540:18;4723:52:120;2427:187:181;1949:112:168;;;;;;;;;;-1:-1:-1;2029:27:168;;1949:112;;1810:70:114;;;;;;;;;;;;;:::i;4262:148:116:-;;;;;;;;;;-1:-1:-1;4262:148:116;;;;;:::i;:::-;;:::i;14590:2124:120:-;;;;;;;;;;-1:-1:-1;14590:2124:120;;;;;:::i;:::-;;:::i;805:125:117:-;;;;;;;;;;-1:-1:-1;805:125:117;;;;;:::i;:::-;-1:-1:-1;;;;;891:34:117;920:4;891:34;;805:125;1268:30:116;;;;;;;;;;;;;;;5237:48:120;;;;;;;;;;-1:-1:-1;5237:48:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;853:30:167;;;;;;;;;;;;;;;;3939:119:116;;;;;;;;;;-1:-1:-1;3939:119:116;;;;;:::i;:::-;;:::i;1615:84:51:-;;;;;;;;;;-1:-1:-1;1685:7:51;;-1:-1:-1;;;1685:7:51;;;;1615:84;;1451:37:116;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4108:32:181;;;4090:51;;4078:2;4063:18;1451:37:116;3944:203:181;5424:50:120;;;;;;;;;;-1:-1:-1;5424:50:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;10615:87;;;;;;;;;;;;;:::i;9896:185::-;;;;;;;;;;-1:-1:-1;9896:185:120;;;;;:::i;:::-;;:::i;2151:79:168:-;;;;;;;;;;-1:-1:-1;1530:6:168;2151:79;;9312:328:120;;;;;;;;;;-1:-1:-1;9312:328:120;;;;;:::i;:::-;;:::i;1046:98:129:-;;;;;;;;;;;;;:::i;860:83:118:-;;;;;;;;;;-1:-1:-1;860:83:118;;;;;:::i;:::-;;:::i;2321:71:114:-;;;;;;;;;;;;;:::i;10853:87:120:-;;;;;;;;;;-1:-1:-1;10929:6:120;10853:87;;1641:79:168;;;;;;;;;;-1:-1:-1;1687:7:168;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;5017:50:120;;;;;;;;;;-1:-1:-1;5017:50:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;894:126:127;;;;;;;;;;-1:-1:-1;894:126:127;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;4312:56:120:-;;;;;;;;;;-1:-1:-1;4312:56:120;;;;;:::i;:::-;;;;;;;;;;;;;;715:86:117;;;;;;;;;;-1:-1:-1;790:4:117;715:86;;3501:41:120;;;;;;;;;;;;;;;911:36:114;;;;;;;;;;-1:-1:-1;911:36:114;;;;-1:-1:-1;;;;;911:36:114;;;3276:26:120;;;;;;;;;;;;;;;;3321:420:168;;;;;;;;;;-1:-1:-1;3321:420:168;;;;;:::i;:::-;;:::i;8018:134:120:-;;;;;;;;;;-1:-1:-1;8018:134:120;;;;;:::i;:::-;;:::i;7757:129::-;;;;;;;;;;-1:-1:-1;7757:129:120;;;;;:::i;:::-;;:::i;5551:39::-;;;;;;;;;;-1:-1:-1;5551:39:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;4404:539:168;;;;;;;;;;;;;:::i;1705:30:116:-;;;;;;;;;;-1:-1:-1;1705:30:116;;;;-1:-1:-1;;;;;1705:30:116;;;1792:85:168;;;;;;;;;;-1:-1:-1;1863:9:168;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;;;;;;;;;;-1:-1:-1;3097:4:168;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;1457:263:114;;;;;;;;;;-1:-1:-1;1457:263:114;;;;;:::i;:::-;;:::i;1363:28:116:-;;;;;;;;;;;;;;;959::167;;;;;;;;;;;;;;;;3640:36:120;;;;;;;;;;;;;;;4490:107:116;;;;;;;;;;-1:-1:-1;4490:107:116;;;;;:::i;:::-;;:::i;8892::120:-;;;;;;;;;;-1:-1:-1;8892:107:120;;;;;:::i;:::-;;:::i;11954:1067::-;;;;;;;;;;-1:-1:-1;11954:1067:120;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;8274:213::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;8367:11:120::1;;8351:12;:27:::0;8343:52:::1;;;::::0;-1:-1:-1;;;8343:52:120;;7176:2:181;8343:52:120::1;::::0;::::1;7158:21:181::0;7215:2;7195:18;;;7188:30;-1:-1:-1;;;7234:18:181;;;7227:42;7286:18;;8343:52:120::1;;;;;;;;;8406:44;::::0;8439:10:::1;4090:51:181::0;;8425:12:120;;8406:44:::1;::::0;4078:2:181;4063:18;8406:44:120::1;;;;;;;8456:11;:26:::0;8274:213::o;11079:368::-;1239:19:51;:17;:19::i;:::-;1418:12:167::1;1400:15;;1384:13;;:31;;;;:::i;:::-;:46;1380:124;;;1447:50;;-1:-1:-1::0;;;1447:50:167::1;;;;;;;;;;;1380:124;1595:12;1579:13;:28;;;;11169:12:120::2;11184:6;-1:-1:-1::0;;;;;11184:11:120::2;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11211:22;::::0;;;:16:::2;:22;::::0;;;;;11169:28;;-1:-1:-1;11211:22:120::2;;:31;11203:61;;;::::0;-1:-1:-1;;;11203:61:120;;7968:2:181;11203:61:120::2;::::0;::::2;7950:21:181::0;8007:2;7987:18;;;7980:30;-1:-1:-1;;;8026:18:181;;;8019:47;8083:18;;11203:61:120::2;7766:341:181::0;11203:61:120::2;11270:18;11308:4;11291:22;;;;;;8241:19:181::0;;8285:2;8276:12;;8112:182;11291:22:120::2;;;;;;;;;;;;;11270:43;;11319:33;11332:5;11339:12;11319;:33::i;:::-;11358:22;::::0;;;:16:::2;:22;::::0;;;;;;:29;;-1:-1:-1;;11358:29:120::2;11383:4;11358:29;::::0;;11398:44;::::2;::::0;::::2;::::0;11410:5;;11417:12;;11431:10:::2;::::0;11398:44:::2;:::i;:::-;;;;;;;;11163:284;;11079:368:::0;:::o;1810:70:114:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1486:16:51::1;:14;:16::i;:::-;1865:10:114::2;:8;:10::i;:::-;1810:70::o:0;4262:148:116:-;1891:10;-1:-1:-1;;;;;1905:3:116;1891:17;;1883:34;;;;-1:-1:-1;;;1883:34:116;;;;;;8980:2:181;8962:21;;;9019:1;8999:18;;;8992:29;-1:-1:-1;;;9052:2:181;9037:18;;9030:34;9096:2;9081:18;;8778:327;1883:34:116;4337:22:::1;4353:5;4337:15;:22::i;:::-;4370:35;4387:5;4394:10;4370:35;;;;;;;:::i;:::-;;;;;;;;4262:148:::0;:::o;14590:2124:120:-;1239:19:51;:17;:19::i;:::-;2261:21:52::1;:19;:21::i;:::-;14839:18:120::0;14831:38:::2;;;::::0;-1:-1:-1;;;14831:38:120;;9631:2:181;14831:38:120::2;::::0;::::2;9613:21:181::0;9670:1;9650:18;;;9643:29;-1:-1:-1;;;9688:18:181;;;9681:37;9735:18;;14831:38:120::2;9429:330:181::0;14831:38:120::2;15122:20;15155:7;;15163:1;15155:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;15145:29;;;;;;;:::i;:::-;;;;;;;;15122:52;;15304:20;15327:69;15348:12;15362:7;;15370:1;15362:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:15;;15379:7;;15387:1;15379:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:16;;;15327:20;:69::i;:::-;15304:92;;15485:79;15502:12;15516:14;15532;15548:15;15485:16;:79::i;:::-;15667:22;::::0;;;:8:::2;:22;::::0;;;;:45;;-1:-1:-1;;15667:45:120::2;15692:20;15667:45:::0;;::::2;::::0;;;15852:7;;15872:441:::2;15895:3;15891:1;:7;;;15872:441;;;15935:7;;15943:1;15935:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;15925:29;;;;;;;:::i;:::-;;;;;;;;15910:44;;15962:23;15988:69;16009:12;16023:7;;16031:1;16023:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:15;;16040:7;;16048:1;16040:10;;;;;;;;;:::i;15988:69::-;15962:95;;16157:12;16138:15;:31;16130:55;;;::::0;-1:-1:-1;;;16130:55:120;;11230:2:181;16130:55:120::2;::::0;::::2;11212:21:181::0;11269:2;11249:18;;;11242:30;-1:-1:-1;;;11288:18:181;;;11281:41;11339:18;;16130:55:120::2;11028:335:181::0;16130:55:120::2;-1:-1:-1::0;16221:22:120::2;::::0;;;:8:::2;:22;::::0;;;;:45;;-1:-1:-1;;16221:45:120::2;16246:20;16221:45:::0;;::::2;::::0;;;16295:3:::2;15872:441;;;;16604:8;16599:111;16622:3;16618:1;:7;;;16599:111;;;16637:27;16645:7;;16653:1;16645:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;16637:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;16637:7:120::2;::::0;-1:-1:-1;;;16637:27:120:i:2;:::-;-1:-1:-1::0;16692:3:120::2;;16599:111;;;;14783:1931;;;2303:20:52::1;1716:1:::0;2809:7;:22;2629:209;2303:20:::1;14590:2124:120::0;;;;;:::o;3939:119:116:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4016:37:116::1;4036:16;4016:19;:37::i;:::-;3939:119:::0;:::o;10615:87:120:-;10662:7;10684:6;-1:-1:-1;;;;;10684:11:120;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10677:20;;10615:87;:::o;9896:185::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;9972:21:120::1;9999:39;10025:3:::0;9972:21;9999:17:::1;:39::i;:::-;10064:3;-1:-1:-1::0;;;;;10049:27:120::1;;10069:6;10049:27;;;;542:25:181::0;;530:2;515:18;;396:177;10049:27:120::1;;;;;;;;9949:132;9896:185:::0;:::o;9312:328::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1486:16:51::1;:14;:16::i;:::-;9467:38:120::2;::::0;;;:21:::2;:38;::::0;;;;;:43;;9459:77:::2;;;::::0;-1:-1:-1;;;9459:77:120;;11570:2:181;9459:77:120::2;::::0;::::2;11552:21:181::0;11609:2;11589:18;;;11582:30;-1:-1:-1;;;11628:18:181;;;11621:51;11689:18;;9459:77:120::2;11368:345:181::0;9459:77:120::2;9549:38;::::0;;;:21:::2;:38;::::0;;;;;9542:45;;;;9598:37;::::2;::::0;::::2;::::0;9571:15;542:25:181;;530:2;515:18;;396:177;1046:98:129;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;860:83:118;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;919:19:118::1;930:7;919:10;:19::i;2321:71:114:-:0;1251:14;;;:36;;-1:-1:-1;;;1251:36:114;;1276:10;1251:36;;;4090:51:181;;;;-1:-1:-1;;;;;1251:14:114;;:24;;4063:18:181;;1251:36:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1243:57;;;;-1:-1:-1;;;1243:57:114;;12202:2:181;1243:57:114;;;12184:21:181;12241:1;12221:18;;;12214:29;-1:-1:-1;;;12259:18:181;;;12252:38;12307:18;;1243:57:114;12000:331:181;1243:57:114;1239:19:51::1;:17;:19::i;:::-;2379:8:114::2;:6;:8::i;894:126:127:-:0;952:12;966:19;993:22;1009:5;993:15;:22::i;:::-;894:126;;;:::o;3321:420:168:-;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;8018:134:120:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;-1:-1:-1;;;;;8087:27:120;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;8080:34;;-1:-1:-1;;8080:34:120::1;::::0;;8125:22;;4090:51:181;;;8125:22:120::1;::::0;4063:18:181;8125:22:120::1;3944:203:181::0;7757:129:120;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;-1:-1:-1;;;;;7816:27:120;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;7816:34:120::1;7846:4;7816:34;::::0;;7861:20;;4090:51:181;;;7861:20:120::1;::::0;4063:18:181;7861:20:120::1;3944:203:181::0;4404:539:168;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;1457:263:114:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1569:14:114::1;::::0;-1:-1:-1;;;;;1569:14:114;;::::1;1542:42:::0;;::::1;::::0;1534:78:::1;;;::::0;-1:-1:-1;;;1534:78:114;;12671:2:181;1534:78:114::1;::::0;::::1;12653:21:181::0;12710:2;12690:18;;;12683:30;12749:25;12729:18;;;12722:53;12792:18;;1534:78:114::1;12469:347:181::0;1534:78:114::1;1618:14;:48:::0;;-1:-1:-1;;;;;;1618:48:114::1;-1:-1:-1::0;;;;;1618:48:114;::::1;::::0;;::::1;::::0;;;1677:38:::1;::::0;4090:51:181;;;1677:38:114::1;::::0;4078:2:181;4063:18;1677:38:114::1;3944:203:181::0;4490:107:116;4549:4;4568:24;4582:9;4568:13;:24::i;:::-;4561:31;4490:107;-1:-1:-1;;4490:107:116:o;8892::120:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;8963:31:120::1;8983:10;8963:19;:31::i;11954:1067::-:0;5841:10;12109:7;5822:30;;;:18;:30;;;;;;12118:12;;5822:30;;5814:55;;;;-1:-1:-1;;;5814:55:120;;13023:2:181;5814:55:120;;;13005:21:181;13062:2;13042:18;;;13035:30;-1:-1:-1;;;13081:18:181;;;13074:42;13133:18;;5814:55:120;12821:336:181;5814:55:120;12227:26:::1;::::0;;::::1;12211:13;12227:26:::0;;;:6:::1;:26;::::0;;;;:28;;12211:13;;12227:28;;;::::1;::::0;12211:13;12227:28:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12211:44;;12307:21;12331:172;12360:6;12374:38;12401:10;-1:-1:-1::0;;;;;335:23:173;;241:123;12374:38:120::1;12420:6;12434:18;12460:17;12485:12;12331:21;:172::i;:::-;12588:19:::0;;::::1;::::0;::::1;::::0;12749:27:::1;::::0;-1:-1:-1;;;12749:27:120;;::::1;::::0;::::1;542:25:181::0;;;12588:19:120;;-1:-1:-1;12588:19:120;12565:20:::1;::::0;;;12749:6:::1;-1:-1:-1::0;;;;;12749:13:120::1;::::0;::::1;::::0;515:18:181;;12749:27:120::1;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12715:61:::0;;-1:-1:-1;12715:61:120;-1:-1:-1;12928:51:120::1;12937:12:::0;12951:10:::1;12960:1;12715:61:::0;12951:10:::1;:::i;:::-;12963:5;12970:8;12928:51;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;12993:12:120;;13007:8;;-1:-1:-1;11954:1067:120;;-1:-1:-1;;;;;;11954:1067:120:o;1767:106:51:-;1685:7;;-1:-1:-1;;;1685:7:51;;;;1836:9;1828:38;;;;-1:-1:-1;;;1828:38:51;;14257:2:181;1828:38:51;;;14239:21:181;14296:2;14276:18;;;14269:30;-1:-1:-1;;;14315:18:181;;;14308:46;14371:18;;1828:38:51;14055:340:181;1698:153:129;1809:15;;1791:55;;1804:3;;-1:-1:-1;;;;;1809:15:129;1826:5;1833:12;1791;:55::i;:::-;1698:153;;:::o;1945:106:51:-;1685:7;;-1:-1:-1;;;1685:7:51;;;;2003:41;;;;-1:-1:-1;;;2003:41:51;;14602:2:181;2003:41:51;;;14584:21:181;14641:2;14621:18;;;14614:30;-1:-1:-1;;;14660:18:181;;;14653:50;14720:18;;2003:41:51;14400:344:181;2433:117:51;1486:16;:14;:16::i;:::-;2491:7:::1;:15:::0;;-1:-1:-1;;;;2491:15:51::1;::::0;;2521:22:::1;719:10:58::0;2530:12:51::1;2521:22;::::0;-1:-1:-1;;;;;4108:32:181;;;4090:51;;4078:2;4063:18;2521:22:51::1;;;;;;;2433:117::o:0;1314:380:129:-;1478:15;;1464:30;;-1:-1:-1;;;;;1478:15:129;1464:13;:30::i;:::-;1456:59;;;;-1:-1:-1;;;1456:59:129;;14951:2:181;1456:59:129;;;14933:21:181;14990:2;14970:18;;;14963:30;-1:-1:-1;;;15009:18:181;;;15002:46;15065:18;;1456:59:129;14749:340:181;1456:59:129;1562:5;:12;1578:2;1562:18;1554:38;;;;-1:-1:-1;;;1554:38:129;;15296:2:181;1554:38:129;;;15278:21:181;15335:1;15315:18;;;15308:29;-1:-1:-1;;;15353:18:181;;;15346:37;15400:18;;1554:38:129;15094:330:181;1554:38:129;1653:36;1674:14;1682:5;1674:14;:::i;:::-;1653:20;:36::i;2336:287:52:-;1759:1;2468:7;;:19;2460:63;;;;-1:-1:-1;;;2460:63:52;;15933:2:181;2460:63:52;;;15915:21:181;15972:2;15952:18;;;15945:30;16011:33;15991:18;;;15984:61;16062:18;;2460:63:52;15731:355:181;2460:63:52;1759:1;2598:7;:18;2336:287::o;19673:730:120:-;19822:7;;19925:22;;;;:8;:22;;;;;;;;:44;;;;;;;;:::i;:::-;;19917:76;;;;-1:-1:-1;;;19917:76:120;;16293:2:181;19917:76:120;;;16275:21:181;16332:2;16312:18;;;16305:30;-1:-1:-1;;;16351:18:181;;;16344:49;16410:18;;19917:76:120;16091:343:181;19917:76:120;20335:63;20356:12;20370;20335:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20384:13:120;;-1:-1:-1;20335:20:120;;-1:-1:-1;20335:63:120:i;:::-;20328:70;;19673:730;;;;;;:::o;20958:1261::-;21206:32;;;;:18;:32;;;;;;;;21531:7;21202:342;21599:35;21619:14;21599:19;:35::i;:::-;21740:32;21775:67;21796:12;21810:14;21775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21826:15:120;;-1:-1:-1;21775:20:120;;-1:-1:-1;21775:67:120:i;:::-;21740:102;;21968:14;21940:24;:42;21932:74;;;;-1:-1:-1;;;21932:74:120;;16641:2:181;21932:74:120;;;16623:21:181;16680:2;16660:18;;;16653:30;-1:-1:-1;;;16699:18:181;;;16692:49;16758:18;;21932:74:120;16439:343:181;21932:74:120;22104:32;;;;:18;:32;;;;;;;:39;;-1:-1:-1;;22104:39:120;22139:4;22104:39;;;22154:60;22182:14;;22123:12;;22154:60;;;;22198:15;542:25:181;;530:2;515:18;;396:177;22154:60:120;;;;;;;;21121:1098;20958:1261;;;;;:::o;22704:1731::-;22762:13;;22796:15;:8;22762:13;22796:12;:15::i;:::-;22783:28;-1:-1:-1;22873:26:120;22893:6;22873:26;:16;-1:-1:-1;;22873:14:120;;;:16::i;:::-;:26;;;22865:51;;;;-1:-1:-1;;;22865:51:120;;16989:2:181;22865:51:120;;;16971:21:181;17028:2;17008:18;;;17001:30;-1:-1:-1;;;17047:18:181;;;17040:42;17099:18;;22865:51:120;16787:336:181;22865:51:120;22960:20;22983:11;-1:-1:-1;;22983:9:120;;;:11::i;:::-;22960:34;-1:-1:-1;23034:20:120;23008:22;;;;:8;:22;;;;;;;;:46;;;;;;;;:::i;:::-;;23000:66;;;;-1:-1:-1;;;23000:66:120;;17330:2:181;23000:66:120;;;17312:21:181;17369:1;17349:18;;;17342:29;-1:-1:-1;;;17387:18:181;;;17380:37;17434:18;;23000:66:120;17128:330:181;23000:66:120;23209:22;;;;:8;:22;;;;;:48;;-1:-1:-1;;23209:48:120;23234:23;23209:48;;;;23746:25;23760:11;23746;:25;:::i;:::-;:29;;;;:::i;:::-;23734:9;:41;23726:58;;;;-1:-1:-1;;;23726:58:120;;;;;;17665:2:181;17647:21;;;17704:1;17684:18;;;17677:29;-1:-1:-1;;;17737:2:181;17722:18;;17715:34;17781:2;17766:18;;17463:327;23726:58:120;23823:18;23844:21;-1:-1:-1;;23844:19:120;;;:21::i;:::-;24027:19;;;23953:3;24027:19;;;;;;;;;23823:42;;-1:-1:-1;23918:11:120;;23903:12;;23953:3;24027:19;;;;;;;;;;-1:-1:-1;;24000:46:120;-1:-1:-1;24052:22:120;24153:11;-1:-1:-1;;24153:9:120;;;:11::i;:::-;24172:10;-1:-1:-1;;24172:8:120;;;:10::i;:::-;24190:11;-1:-1:-1;;24190:9:120;;;:11::i;:::-;24209:17;:9;-1:-1:-1;;24209:7:120;;;:9::i;:::-;-1:-1:-1;;24209:15:120;;:17::i;:::-;24077:155;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;24077:155:120;;;;;;;;;;;;;;-1:-1:-1;;;;;24077:155:120;-1:-1:-1;;;24077:155:120;;;;-1:-1:-1;24265:81:120;24305:10;24317:4;-1:-1:-1;24326:8:120;24077:155;24265:39;:81::i;:::-;24386:44;;24239:107;;-1:-1:-1;24239:107:120;-1:-1:-1;24386:44:120;;;;24394:12;;24239:107;;;;24386:44;:::i;:::-;;;;;;;;22777:1658;;;;;;;22704:1731;;;:::o;5838:185:116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;18861:34:181;;18931:15;;;18926:2;18911:18;;18904:43;5921:57:116;;18796:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;2412:312:57:-;2526:6;2501:21;:31;;2493:73;;;;-1:-1:-1;;;2493:73:57;;19160:2:181;2493:73:57;;;19142:21:181;19199:2;19179:18;;;19172:30;19238:31;19218:18;;;19211:59;19287:18;;2493:73:57;18958:353:181;2493:73:57;2578:12;2596:9;-1:-1:-1;;;;;2596:14:57;2618:6;2596:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:52;;;2647:7;2639:78;;;;-1:-1:-1;;;2639:78:57;;19728:2:181;2639:78:57;;;19710:21:181;19767:2;19747:18;;;19740:30;19806:34;19786:18;;;19779:62;19877:28;19857:18;;;19850:56;19923:19;;2639:78:57;19526:422:181;2639:78:57;2483:241;2412:312;;:::o;1089:114:118:-;1160:6;;1146:30;;;20127:25:181;;;20183:2;20168:18;;20161:34;;;1146:30:118;;20100:18:181;1146:30:118;;;;;;;1182:6;:16;1089:114::o;2186:115:51:-;1239:19;:17;:19::i;:::-;2245:7:::1;:14:::0;;-1:-1:-1;;;;2245:14:51::1;-1:-1:-1::0;;;2245:14:51::1;::::0;;2274:20:::1;2281:12;719:10:58::0;;640:96;5170:183:168;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;4981:185::-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;1855:127:129:-;1929:4;1948:29;1962:3;1967:9;1948:13;:29::i;1742:335:167:-;1834:15;;1817:13;:32;1809:60;;;;-1:-1:-1;;;1809:60:167;;20408:2:181;1809:60:167;;;20390:21:181;20447:2;20427:18;;;20420:30;-1:-1:-1;;;20466:18:181;;;20459:45;20521:18;;1809:60:167;20206:339:181;1809:60:167;1983:15;:31;;;2025:47;;;2046:10;20724:51:181;;20806:2;20791:18;;20784:34;;;2025:47:167;;20697:18:181;2025:47:167;20550:274:181;981:328:165;1183:12;1227:13;1242:7;1251:6;1259:18;1279:10;1291:12;1210:94;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1203:101;;981:328;;;;;;;;:::o;1362:1040:127:-;1560:5;:12;1576:2;1560:18;1552:43;;;;-1:-1:-1;;;1552:43:127;;21746:2:181;1552:43:127;;;21728:21:181;21785:2;21765:18;;;21758:30;-1:-1:-1;;;21804:18:181;;;21797:42;21856:18;;1552:43:127;21544:336:181;1552:43:127;1649:19;;:24;1641:49;;;;-1:-1:-1;;;1641:49:127;;21746:2:181;1641:49:127;;;21728:21:181;21785:2;21765:18;;;21758:30;-1:-1:-1;;;21804:18:181;;;21797:42;21856:18;;1641:49:127;21544:336:181;1641:49:127;1729:16;1748:18;1756:9;1748:7;:18::i;:::-;1900:140;;-1:-1:-1;;;1900:140:127;;22152:2:181;1900:140:127;;;22134:21:181;1881:16:127;22171:18:181;;;22164:29;;;1956:15:127;22245:20:181;;;22238:36;2000:2:127;22290:18:181;;;22283:34;1729:37:127;;-1:-1:-1;;;;;;1900:28:127;;;;;22210:19:181;;1900:140:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1881:159;-1:-1:-1;2106:12:127;:8;2117:1;2106:12;:::i;:::-;2095:8;:23;2087:41;;;;-1:-1:-1;;;2087:41:127;;22719:2:181;2087:41:127;;;22701:21:181;22758:1;22738:18;;;22731:29;-1:-1:-1;;;22776:18:181;;;22769:35;22821:18;;2087:41:127;22517:328:181;2087:41:127;2135:262;;-1:-1:-1;;;2135:262:127;;-1:-1:-1;;;;;2135:24:127;;;;;2167:8;;2135:262;;2184:16;;2242:5;;2292:1;;2338:15;;2361:1;;2135:262;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1500:902;;1362:1040;;;;:::o;17098:357:120:-;17169:8;17161:50;;;;-1:-1:-1;;;17161:50:120;;23625:2:181;17161:50:120;;;23607:21:181;23664:2;23644:18;;;23637:30;-1:-1:-1;;;23683:18:181;;;23676:44;23737:18;;17161:50:120;23423:338:181;17161:50:120;17225:31;;;;:21;:31;;;;;;:36;17217:69;;;;-1:-1:-1;;;17217:69:120;;23968:2:181;17217:69:120;;;23950:21:181;24007:2;23987:18;;;23980:30;-1:-1:-1;;;24026:18:181;;;24019:50;24086:18;;17217:69:120;23766:344:181;17217:69:120;17301:30;;;;:20;:30;;;;;;;;17300:31;17292:63;;;;-1:-1:-1;;;17292:63:120;;24317:2:181;17292:63:120;;;24299:21:181;24356:2;24336:18;;;24329:30;-1:-1:-1;;;24375:18:181;;;24368:49;24434:18;;17292:63:120;24115:343:181;17292:63:120;17362:31;;;;:21;:31;;;;;;;17396:12;17362:46;;17419:31;;;;;17384:8;542:25:181;;530:2;515:18;;396:177;24755:6146:164;25004:22;25008:1;25004:22;;;;;25033:19;;;25080:25;;25066:12;;;25059:47;;;;25138:4;24881:16;25125:18;;;25182:9;25170:22;;25163:30;25156:38;;25208:12;;;25201:30;;;;25254:34;;;25248:41;25238:52;;25309:18;;;25366:9;25354:22;;25347:30;25340:38;;25392:12;;;25385:30;;;;25438:34;;;25432:41;25422:52;;25493:18;;;25550:9;25538:22;;25531:30;25524:38;;25576:12;;;25569:30;;;;25646:9;25622:34;;25616:41;25606:52;;25677:18;;;25734:9;25722:22;;25715:30;25708:38;;25760:12;;;25753:30;;;;25830:9;25806:34;;;25800:41;25790:52;;;25861:18;;;25906:22;;;25899:30;25892:38;;25944:12;;;25937:30;;;;26014:9;25990:34;;25984:41;25974:52;;26045:18;;;26090:22;;;26083:30;26076:38;;26128:12;;;26121:30;;;;26198:9;26174:34;;26168:41;26158:52;;26229:18;;;26274:22;;;26267:30;26260:38;;26312:12;;;26305:30;;;;26382:9;26358:34;;26352:41;26342:52;;26413:18;;;26470:9;26458:22;;;26451:30;26444:38;;26496:12;;;26489:30;;;;26542:34;;26536:41;26526:52;;26597:18;;;26654:9;26642:22;;;26635:30;26628:38;;26680:12;;;26673:30;;;;26750:9;26726:34;;26720:41;26710:52;;;26781:18;;;26838:10;26826:23;;26819:31;26812:39;;26865:12;;;26858:30;;;;26935:10;26911:35;;26905:42;26895:53;;26967:18;;;27024:10;27012:23;;27005:31;26998:39;;27051:12;;;27044:30;;;;27121:10;27097:35;;27091:42;27081:53;;27153:18;;;27210:10;27198:23;;27191:31;27184:39;;27237:12;;;27230:30;;;;27307:10;27283:35;;27277:42;27267:53;;27339:18;;;27396:10;27384:23;;27377:31;27370:39;;27423:12;;;27416:30;;;;27493:10;27469:35;;27463:42;27453:53;;27525:18;;;27582:10;27570:23;;27563:31;27556:39;;27609:12;;;27602:30;;;;27679:10;27655:35;;27649:42;27639:53;;27711:18;;;27768:10;27756:23;;27749:31;27742:39;;27795:12;;;27788:30;;;;27865:10;27841:35;;27835:42;27825:53;;27897:18;;;27954:10;27942:23;;27935:31;27928:39;;27981:12;;;27974:30;;;;28027:35;;;28021:42;28011:53;;28083:18;;;28140:10;28128:23;;28121:31;28114:39;;28167:12;;;28160:30;;;;28237:10;28213:35;;28207:42;28197:53;;28269:18;;;28326:10;28314:23;;28307:31;28300:39;;28353:12;;;28346:30;;;;28423:10;28399:35;;28393:42;28383:53;;28455:18;;;28512:10;28500:23;;28493:31;28486:39;;28539:12;;;28532:30;;;;28609:10;28585:35;;28579:42;28569:53;;28641:18;;;28698:10;28686:23;;28679:31;28672:39;;28725:12;;;28718:30;;;;28795:10;28771:35;;28765:42;28755:53;;28827:18;;;28884:10;28872:23;;28865:31;28858:39;;28911:12;;;28904:30;;;;28981:10;28957:35;;28951:42;28941:53;;29013:18;;;29070:10;29058:23;;29051:31;29044:39;;29097:12;;;29090:30;;;;29167:10;29143:35;;29137:42;29127:53;;29199:18;;;29256:10;29244:23;;29237:31;29230:39;;29283:12;;;29276:30;;;;29353:10;29329:35;;29323:42;29313:53;;29385:18;;;29442:10;29430:23;;29423:31;29416:39;;29469:12;;;29462:30;;;;29539:10;29515:35;;29509:42;29499:53;;29571:18;;;29628:10;29616:23;;29609:31;29602:39;;29655:12;;;29648:30;;;;29725:10;29701:35;;29695:42;29685:53;;29757:18;;;29814:10;29802:23;;29795:31;29788:39;;29841:12;;;29834:30;;;;29911:10;29887:35;;29881:42;29871:53;;29943:18;;;30000:10;29988:23;;29981:31;29974:39;;30027:12;;;30020:30;;;;30097:10;30073:35;;30067:42;30057:53;;30129:18;;;30186:10;30174:23;;30167:31;30160:39;;30213:12;;;30206:30;;;;30283:10;30259:35;;30253:42;30243:53;;30315:18;;;30372:10;30360:23;;30353:31;30346:39;;30399:12;;;30392:30;;;;30469:10;30445:35;;30439:42;30429:53;;30501:18;;;30558:10;30546:23;;30539:31;30532:39;;30585:12;;;30578:30;;;;30655:10;30631:35;;30625:42;30615:53;;30687:18;;;30744:10;30732:23;;;30725:31;30718:39;;;30771:12;;;;30764:30;;;;30841:10;30817:35;;;30811:42;30801:53;;;30873:18;;;24755:6146::o;17891:1180:120:-;18006:14;17998:61;;;;-1:-1:-1;;;17998:61:120;;24665:2:181;17998:61:120;;;24647:21:181;24704:2;24684:18;;;24677:30;-1:-1:-1;;;24723:18:181;;;24716:49;24782:18;;17998:61:120;24463:343:181;17998:61:120;18149:36;;;;:20;:36;;;;;;;;18145:104;;;17891:1180;:::o;18145:104::-;18354:33;18390:37;;;:21;:37;;;;;;;18441:30;;;18433:63;;;;-1:-1:-1;;;18433:63:120;;25013:2:181;18433:63:120;;;24995:21:181;25052:2;25032:18;;;25025:30;-1:-1:-1;;;25071:18:181;;;25064:50;25131:18;;18433:63:120;24811:344:181;18433:63:120;18641:11;;18597:40;18612:25;18597:12;:40;:::i;:::-;:55;;18589:91;;;;-1:-1:-1;;;18589:91:120;;25362:2:181;18589:91:120;;;25344:21:181;25401:2;25381:18;;;25374:30;25440:25;25420:18;;;25413:53;25483:18;;18589:91:120;25160:347:181;18589:91:120;18808:36;;;;:20;:36;;;;;;:43;;-1:-1:-1;;18808:43:120;18847:4;18808:43;;;18862:37;18829:14;;18862:37;;;-1:-1:-1;19029:37:120;;;;:21;:37;;;;;19022:44;17891:1180::o;10748:325:174:-;10848:10;;10818:7;;10975:4;10966:14;;11042:26;;;;10966:14;10848:10;11042:5;:26::i;:::-;11035:33;10748:325;-1:-1:-1;;;;;10748:325:174:o;2583:121:165:-;2645:6;2673:25;-1:-1:-1;;2673:18:165;;2692:2;2696:1;2673:18;:25::i;17661:260:174:-;17717:14;17739:12;17754;17758:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;17754:12;-1:-1:-1;;;;;17739:27:174;;;17772:12;17787;17791:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;17787:12;-1:-1:-1;;;;;17772:27:174;17890:21;;;;17661:260;-1:-1:-1;;;17661:260:174:o;2942:141:165:-;3009:7;3031:47;3058:19;3068:8;3058:9;:19::i;:::-;508:4:173;399:121;2097:115:165;2154:6;2182:24;-1:-1:-1;;2182:18:165;;2154:6;2204:1;2182:18;:24::i;2414:115::-;2470:6;2498:25;-1:-1:-1;;2498:18:165;;2517:2;2521:1;2498:18;:25::i;2261:105::-;2318:7;2340:21;-1:-1:-1;;2340:14:165;;2355:1;2358:2;2340:14;:21::i;3201:146::-;3256:7;3278:64;533:2;3308:30;533:2;13008::174;13004:16;;;-1:-1:-1;;;;;13000:28:174;3308:30:165;:::i;:::-;-1:-1:-1;;3278:14:165;;;:64;3340:1;3278:14;:64::i;21380:556:174:-;21435:16;21459:11;21476:12;21491;21495:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;21491:12;-1:-1:-1;;;;;21476:27:174;;;21597:4;21591:11;21584:18;;21646:3;21639:10;;21678:33;21691:7;21700:3;21706:4;21700:10;21678:12;:33::i;:::-;-1:-1:-1;21815:14:174;;;21831:4;21811:25;21805:4;21798:39;21872:17;;21380:556;;-1:-1:-1;21380:556:174:o;1360:1117:171:-;1519:4;1525:12;1577:15;1598:13;1617:24;1654:8;1644:19;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1644:19:171;;1617:46;;2083:1;2062;2033:9;2027:16;2003:4;1992:9;1988:20;1957:6;1927:7;1906:4;1892:210;1880:222;;2157:16;2146:27;;2195:8;2186:7;2183:21;2180:62;;;2226:8;2215:19;;2180:62;2315:7;2302:11;2295:28;2423:7;2420:1;2413:4;2400:11;2396:22;2381:50;2450:8;;;;-1:-1:-1;1360:1117:171;-1:-1:-1;;;;;;;1360:1117:171:o;2406:281:127:-;2485:4;2505:10;-1:-1:-1;;;;;2519:8:127;2505:22;;2497:44;;;;-1:-1:-1;;;2497:44:127;;25714:2:181;2497:44:127;;;25696:21:181;25753:1;25733:18;;;25726:29;-1:-1:-1;;;25771:18:181;;;25764:39;25820:18;;2497:44:127;25512:332:181;2497:44:127;2549:12;2563:19;2599:8;-1:-1:-1;;;;;2588:28:127;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2548:70;;;;;2639:9;-1:-1:-1;;;;;2631:17:127;:4;-1:-1:-1;;;;;2631:17:127;;:51;;;;-1:-1:-1;2667:15:127;2652:30;;2406:281;-1:-1:-1;;;;2406:281:127:o;1360:137:118:-;1414:7;1440:6;;1433:4;:13;1429:47;;;1463:6;;1456:13;;1429:47;-1:-1:-1;1488:4:118;1360:137::o;9979:390:174:-;10076:15;;10114:11;10121:4;10114;:11;:::i;:::-;10099:26;;10224:4;10218:11;10212:4;10209:21;10206:52;;;-1:-1:-1;10249:1:174;10206:52;10273:4;10281:1;10273:9;10269:41;;-1:-1:-1;;10292:11:174;;;;;10269:41;10325:39;10346:5;10353:4;10359;10325:20;:39::i;16417:201::-;16522:14;16596:11;16601:6;16596:2;:11;:::i;:::-;16595:17;;16611:1;16595:17;:::i;:::-;16551:62;;16559:30;16565:7;16574:6;16582;16559:5;:30::i;:::-;16551:62;;;16417:201;-1:-1:-1;;;;16417:201:174:o;2767:109:165:-;2827:7;2849:22;-1:-1:-1;;2849:14:165;;2864:2;2868;15274:815:174;15375:14;15401:6;:11;;15411:1;15401:11;15397:49;;-1:-1:-1;15437:1:174;15422:17;;15397:49;15473:12;15477:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15473:12;-1:-1:-1;;;;;15455:30:174;:15;;;;:6;:15;:::i;:::-;:30;15451:282;;;15674:12;15678:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15674:12;15688;15692:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15688:12;15646:80;;-1:-1:-1;;;15646:80:174;;-1:-1:-1;;;;;26905:15:181;;;15646:80:174;;;26887:34:181;26957:15;;26937:18;;;26930:43;26989:18;;;26982:34;;;15710:15:174;;;27032:18:181;;;27025:34;26814:19;;15646:80:174;26613:452:181;15451:282:174;15751:2;15742:6;:11;;;15738:66;;;15762:42;;-1:-1:-1;;;15762:42:174;;;;;;;;;;;15738:66;15871:1;15862:10;;15811:15;15899:12;15903:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15899:12;-1:-1:-1;;;;;15884:27:174;;-1:-1:-1;15917:13:174;-1:-1:-1;;;;;5031:12:174;;5027:85;16053:17;;;;16047:24;16043:36;;;-1:-1:-1;;;;;15274:815:174:o;13593:349::-;13714:7;13729:12;13744;13748:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;13744:12;-1:-1:-1;;;;;13729:27:174;;;13832:12;13836:7;13832:3;:12::i;:::-;13825:4;13809:13;13816:6;13809:4;:13;:::i;:::-;:20;;;;:::i;:::-;:35;13805:67;;;-1:-1:-1;;13854:11:174;;;;;13805:67;13885:13;13892:6;13885:4;:13;:::i;:::-;13878:20;;13911:26;13917:7;13911:26;;13926:4;13932;13911:5;:26::i;:::-;13904:33;;;13593:349;;;;;;;:::o;20133:893::-;20211:15;-1:-1:-1;;5480:15:174;;;;20234:68;;20262:40;;-1:-1:-1;;;20262:40:174;;;;;;;;;;;20234:68;20312:19;20323:7;20312:10;:19::i;:::-;20308:75;;;20340:43;;-1:-1:-1;;;20340:43:174;;;;;;;;;;;20308:75;20390:12;20405;20409:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;20405:12;-1:-1:-1;;;;;20390:27:174;;;20423:15;20441:12;20445:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;20441:12;-1:-1:-1;;;;;20423:30:174;;;20460:11;20477:8;20579:4;20573:11;20566:18;;20654:7;20649:3;20646:16;20643:80;;;20686:4;20680;20673:18;20643:80;20880:4;20871:7;20865:4;20856:7;20853:1;20846:5;20835:50;20828:57;;20901:3;20896:57;;20913:40;;-1:-1:-1;;;20913:40:174;;;;;;;;;;;20896:57;20969:52;20990:15;20997:7;11442:17;11438:31;;11253:254;20990:15;20969:52;;21007:7;21016:4;20969:20;:52::i;:::-;20959:62;20133:893;-1:-1:-1;;;;;;;20133:893:174:o;8805:657::-;8916:15;8961:2;8990;9076:4;9108;-1:-1:-1;;;;;9127:12:174;;;;:28;;;;;9151:4;9143;-1:-1:-1;;;;;9143:12:174;;9127:28;9119:51;;;;-1:-1:-1;;;9119:51:174;;27272:2:181;9119:51:174;;;27254:21:181;27311:2;27291:18;;;27284:30;-1:-1:-1;;;27330:18:181;;;27323:40;27380:18;;9119:51:174;27070:334:181;9119:51:174;9271:23;;;9344:17;;;9327:35;;;9410:17;;;9394:34;;;;;-1:-1:-1;;;8805:657:174:o;13200:131::-;13253:7;13308:12;13312:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;13308:12;13293;13297:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;13293:12;:27;-1:-1:-1;;;;;13286:34:174;;;13200:131;;;:::o;6121:290::-;6181:8;6201:15;6208:7;11442:17;11438:31;;11253:254;6201:15;:31;;6220:12;6201:31;6197:63;;-1:-1:-1;6249:4:174;;6121:290;-1:-1:-1;6121:290:174:o;6197:63::-;6265:12;6280;6284:7;6280:3;:12::i;:::-;6395:4;6389:11;-1:-1:-1;6380:21:174;6121:290;-1:-1:-1;;;6121:290:174:o;211:180:181:-;270:6;323:2;311:9;302:7;298:23;294:32;291:52;;;339:1;336;329:12;291:52;-1:-1:-1;362:23:181;;211:180;-1:-1:-1;211:180:181:o;578:127::-;639:10;634:3;630:20;627:1;620:31;670:4;667:1;660:15;694:4;691:1;684:15;710:718;752:5;805:3;798:4;790:6;786:17;782:27;772:55;;823:1;820;813:12;772:55;859:6;846:20;885:18;922:2;918;915:10;912:36;;;928:18;;:::i;:::-;1003:2;997:9;971:2;1057:13;;-1:-1:-1;;1053:22:181;;;1077:2;1049:31;1045:40;1033:53;;;1101:18;;;1121:22;;;1098:46;1095:72;;;1147:18;;:::i;:::-;1187:10;1183:2;1176:22;1222:2;1214:6;1207:18;1268:3;1261:4;1256:2;1248:6;1244:15;1240:26;1237:35;1234:55;;;1285:1;1282;1275:12;1234:55;1349:2;1342:4;1334:6;1330:17;1323:4;1315:6;1311:17;1298:54;1396:1;1389:4;1384:2;1376:6;1372:15;1368:26;1361:37;1416:6;1407:15;;;;;;710:718;;;;:::o;1433:320::-;1501:6;1554:2;1542:9;1533:7;1529:23;1525:32;1522:52;;;1570:1;1567;1560:12;1522:52;1610:9;1597:23;1643:18;1635:6;1632:30;1629:50;;;1675:1;1672;1665:12;1629:50;1698:49;1739:7;1730:6;1719:9;1715:22;1698:49;:::i;1943:127::-;2004:10;1999:3;1995:20;1992:1;1985:31;2035:4;2032:1;2025:15;2059:4;2056:1;2049:15;2075:347;2226:2;2211:18;;2259:1;2248:13;;2238:144;;2304:10;2299:3;2295:20;2292:1;2285:31;2339:4;2336:1;2329:15;2367:4;2364:1;2357:15;2238:144;2391:25;;;2075:347;:::o;2619:932::-;2784:6;2792;2800;2808;2816;2869:4;2857:9;2848:7;2844:23;2840:34;2837:54;;;2887:1;2884;2877:12;2837:54;2927:9;2914:23;2956:18;2997:2;2989:6;2986:14;2983:34;;;3013:1;3010;3003:12;2983:34;3051:6;3040:9;3036:22;3026:32;;3096:7;3089:4;3085:2;3081:13;3077:27;3067:55;;3118:1;3115;3108:12;3067:55;3158:2;3145:16;3184:2;3176:6;3173:14;3170:34;;;3200:1;3197;3190:12;3170:34;3255:7;3248:4;3238:6;3235:1;3231:14;3227:2;3223:23;3219:34;3216:47;3213:67;;;3276:1;3273;3266:12;3213:67;3307:4;3299:13;;;;-1:-1:-1;3331:6:181;-1:-1:-1;;3369:20:181;;3356:34;;-1:-1:-1;3424:4:181;3409:20;;3441:15;;;3438:35;;;3469:1;3466;3459:12;3438:35;2619:932;;;;-1:-1:-1;2619:932:181;;3507:2;3492:18;;3529:16;;2619:932;-1:-1:-1;;2619:932:181:o;3556:131::-;-1:-1:-1;;;;;3631:31:181;;3621:42;;3611:70;;3677:1;3674;3667:12;3692:247;3751:6;3804:2;3792:9;3783:7;3779:23;3775:32;3772:52;;;3820:1;3817;3810:12;3772:52;3859:9;3846:23;3878:31;3903:5;3878:31;:::i;4334:250::-;4419:1;4429:113;4443:6;4440:1;4437:13;4429:113;;;4519:11;;;4513:18;4500:11;;;4493:39;4465:2;4458:10;4429:113;;;-1:-1:-1;;4576:1:181;4558:16;;4551:27;4334:250::o;4589:270::-;4630:3;4668:5;4662:12;4695:6;4690:3;4683:19;4711:76;4780:6;4773:4;4768:3;4764:14;4757:4;4750:5;4746:16;4711:76;:::i;:::-;4841:2;4820:15;-1:-1:-1;;4816:29:181;4807:39;;;;4848:4;4803:50;;4589:270;-1:-1:-1;;4589:270:181:o;4864:298::-;5047:6;5040:14;5033:22;5022:9;5015:41;5092:2;5087;5076:9;5072:18;5065:30;4996:4;5112:44;5152:2;5141:9;5137:18;5129:6;5112:44;:::i;5859:163::-;5926:20;;5986:10;5975:22;;5965:33;;5955:61;;6012:1;6009;6002:12;5955:61;5859:163;;;:::o;6027:184::-;6085:6;6138:2;6126:9;6117:7;6113:23;6109:32;6106:52;;;6154:1;6151;6144:12;6106:52;6177:28;6195:9;6177:28;:::i;6216:460::-;6301:6;6309;6317;6370:2;6358:9;6349:7;6345:23;6341:32;6338:52;;;6386:1;6383;6376:12;6338:52;6409:28;6427:9;6409:28;:::i;:::-;6399:38;;6484:2;6473:9;6469:18;6456:32;6446:42;;6539:2;6528:9;6524:18;6511:32;6566:18;6558:6;6555:30;6552:50;;;6598:1;6595;6588:12;6552:50;6621:49;6662:7;6653:6;6642:9;6638:22;6621:49;:::i;:::-;6611:59;;;6216:460;;;;;:::o;6681:288::-;6856:6;6845:9;6838:25;6899:2;6894;6883:9;6879:18;6872:30;6819:4;6919:44;6959:2;6948:9;6944:18;6936:6;6919:44;:::i;7315:127::-;7376:10;7371:3;7367:20;7364:1;7357:31;7407:4;7404:1;7397:15;7431:4;7428:1;7421:15;7447:125;7512:9;;;7533:10;;;7530:36;;;7546:18;;:::i;7577:184::-;7647:6;7700:2;7688:9;7679:7;7675:23;7671:32;7668:52;;;7716:1;7713;7706:12;7668:52;-1:-1:-1;7739:16:181;;7577:184;-1:-1:-1;7577:184:181:o;8299:474::-;8520:2;8509:9;8502:21;8483:4;8546:44;8586:2;8575:9;8571:18;8563:6;8546:44;:::i;:::-;8638:9;8630:6;8626:22;8621:2;8610:9;8606:18;8599:50;8666:32;8691:6;8683;8666:32;:::i;:::-;8658:40;;;8763:1;8759;8754:3;8750:11;8746:19;8738:6;8734:32;8729:2;8718:9;8714:18;8707:60;8299:474;;;;;;:::o;9110:314::-;9285:2;9274:9;9267:21;9248:4;9305:44;9345:2;9334:9;9330:18;9322:6;9305:44;:::i;:::-;9297:52;;9414:1;9410;9405:3;9401:11;9397:19;9389:6;9385:32;9380:2;9369:9;9365:18;9358:60;9110:314;;;;;:::o;9764:127::-;9825:10;9820:3;9816:20;9813:1;9806:31;9856:4;9853:1;9846:15;9880:4;9877:1;9870:15;9896:325;9988:4;10046:11;10033:25;10140:4;10136:9;10125:8;10109:14;10105:29;10101:45;10081:18;10077:70;10067:98;;10161:1;10158;10151:12;10067:98;10182:33;;;;;9896:325;-1:-1:-1;;9896:325:181:o;10226:521::-;10303:4;10309:6;10369:11;10356:25;10463:2;10459:7;10448:8;10432:14;10428:29;10424:43;10404:18;10400:68;10390:96;;10482:1;10479;10472:12;10390:96;10509:33;;10561:20;;;-1:-1:-1;10604:18:181;10593:30;;10590:50;;;10636:1;10633;10626:12;10590:50;10669:4;10657:17;;-1:-1:-1;10700:14:181;10696:27;;;10686:38;;10683:58;;;10737:1;10734;10727:12;10683:58;10226:521;;;;;:::o;10752:271::-;10935:6;10927;10922:3;10909:33;10891:3;10961:16;;10986:13;;;10961:16;10752:271;-1:-1:-1;10752:271:181:o;11718:277::-;11785:6;11838:2;11826:9;11817:7;11813:23;11809:32;11806:52;;;11854:1;11851;11844:12;11806:52;11886:9;11880:16;11939:5;11932:13;11925:21;11918:5;11915:32;11905:60;;11961:1;11958;11951:12;12336:128;12403:9;;;12424:11;;;12421:37;;;12438:18;;:::i;13162:201::-;13200:3;13228:10;13273:2;13266:5;13262:14;13300:2;13291:7;13288:15;13285:41;;13306:18;;:::i;:::-;13355:1;13342:15;;13162:201;-1:-1:-1;;;13162:201:181:o;13368:245::-;13447:6;13455;13508:2;13496:9;13487:7;13483:23;13479:32;13476:52;;;13524:1;13521;13514:12;13476:52;-1:-1:-1;;13547:16:181;;13603:2;13588:18;;;13582:25;13547:16;;13582:25;;-1:-1:-1;13368:245:181:o;13618:432::-;13849:6;13838:9;13831:25;13892:6;13887:2;13876:9;13872:18;13865:34;13935:6;13930:2;13919:9;13915:18;13908:34;13978:3;13973:2;13962:9;13958:18;13951:31;13812:4;13999:45;14039:3;14028:9;14024:19;14016:6;13999:45;:::i;:::-;13991:53;13618:432;-1:-1:-1;;;;;;13618:432:181:o;15429:297::-;15547:12;;15594:4;15583:16;;;15577:23;;15547:12;15612:16;;15609:111;;;15706:1;15702:6;15692;15686:4;15682:17;15679:1;15675:25;15671:38;15664:5;15660:50;15651:59;;15609:111;;15429:297;;;:::o;17795:475::-;17985:4;18014:10;18063:2;18055:6;18051:15;18040:9;18033:34;18115:2;18107:6;18103:15;18098:2;18087:9;18083:18;18076:43;;18155:6;18150:2;18139:9;18135:18;18128:34;18198:3;18193:2;18182:9;18178:18;18171:31;18219:45;18259:3;18248:9;18244:19;18236:6;18219:45;:::i;18275:369::-;18472:6;18461:9;18454:25;18529:6;18522:14;18515:22;18510:2;18499:9;18495:18;18488:50;18574:2;18569;18558:9;18554:18;18547:30;18435:4;18594:44;18634:2;18623:9;18619:18;18611:6;18594:44;:::i;20829:710::-;21092:3;21129:10;21124:3;21120:20;21183:2;21174:6;21169:3;21165:16;21161:25;21156:3;21149:38;21216:6;21212:1;21207:3;21203:11;21196:27;21275:2;21266:6;21261:3;21257:16;21253:25;21248:2;21243:3;21239:12;21232:47;21331:2;21322:6;21317:3;21313:16;21309:25;21304:2;21299:3;21295:12;21288:47;;21365:6;21360:2;21355:3;21351:12;21344:28;21401:6;21395:13;21417:75;21485:6;21480:2;21475:3;21471:12;21464:4;21456:6;21452:17;21417:75;:::i;:::-;21512:16;;;;21530:2;21508:25;;20829:710;-1:-1:-1;;;;;;;20829:710:181:o;22850:568::-;23080:4;23126:1;23122;23117:3;23113:11;23109:19;23167:2;23159:6;23155:15;23144:9;23137:34;23207:3;23202:2;23191:9;23187:18;23180:31;23228:45;23268:3;23257:9;23253:19;23245:6;23228:45;:::i;:::-;23309:15;;23304:2;23289:18;;23282:43;-1:-1:-1;23356:2:181;23341:18;;23334:34;;;;23399:3;23384:19;;;23377:35;23220:53;22850:568;-1:-1:-1;;22850:568:181:o;25849:373::-;25937:6;25945;25953;26006:2;25994:9;25985:7;25981:23;25977:32;25974:52;;;26022:1;26019;26012:12;25974:52;26054:9;26048:16;26073:31;26098:5;26073:31;:::i;:::-;26168:2;26153:18;;26147:25;26212:2;26197:18;;;26191:25;26123:5;;26147:25;;-1:-1:-1;26191:25:181;25849:373;-1:-1:-1;;;25849:373:181:o;26227:151::-;26317:4;26310:12;;;26296;;;26292:31;;26335:14;;26332:40;;;26352:18;;:::i;26383:225::-;26487:4;26466:12;;;26480;;;26462:31;26513:22;;;;26554:24;;;26544:58;;26582:18;;:::i;:::-;26544:58;26383:225;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"2856200","executionCost":"infinite","totalCost":"infinite"},"external":{"AMB()":"infinite","DOMAIN()":"infinite","MERKLE()":"infinite","MIRROR_DOMAIN()":"infinite","PROCESS_GAS()":"infinite","RESERVE_GAS()":"infinite","ROOT_MANAGER()":"infinite","acceptProposedOwner()":"63859","addSender(address)":"27872","allowlistedSenders(address)":"2681","anyExecute(bytes)":"infinite","delay()":"281","delayBlocks()":"2406","dispatch(uint32,bytes32,bytes)":"infinite","home()":"257","isReplica(address)":"507","lastSentBlock()":"2406","localDomain()":"infinite","messages(bytes32)":"2626","mirrorConnector()":"2448","nonces(uint32)":"2578","outboundRoot()":"infinite","owner()":"2421","pause()":"infinite","paused()":"2433","pendingAggregateRoots(bytes32)":"2594","processMessage(bytes)":"infinite","proposeNewOwner(address)":"infinite","proposed()":"2464","proposedTimestamp()":"2338","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":"infinite","provenAggregateRoots(bytes32)":"2607","provenMessageRoots(bytes32)":"2562","rateLimitBlocks()":"2363","removePendingAggregateRoot(bytes32)":"12980","removeSender(address)":"27976","renounceOwnership()":"2458","renounced()":"2474","send(bytes)":"infinite","sentMessageRoots(bytes32)":"2496","setDelayBlocks(uint256)":"28093","setGasCap(uint256)":"28085","setMirrorConnector(address)":"infinite","setRateLimitBlocks(uint256)":"28079","setWatcherManager(address)":"29990","unpause()":"infinite","verifySender(address)":"infinite","watcherManager()":"2426","withdrawFunds(address)":"infinite"},"internal":{"_processMessage(bytes memory)":"infinite","_sendMessage(bytes memory,bytes memory)":"infinite","_verifySender(address)":"infinite"}},"methodIdentifiers":{"AMB()":"d69f9d61","DOMAIN()":"52a9674b","MERKLE()":"a01892a5","MIRROR_DOMAIN()":"14168416","PROCESS_GAS()":"d88beda2","RESERVE_GAS()":"25e3beda","ROOT_MANAGER()":"5f61e3ec","acceptProposedOwner()":"c5b350df","addSender(address)":"b697f531","allowlistedSenders(address)":"6159ada1","anyExecute(bytes)":"9abaf479","delay()":"6a42b8f8","delayBlocks()":"ad9c0c2e","dispatch(uint32,bytes32,bytes)":"fa31de01","home()":"9fa92f9d","isReplica(address)":"5190bc53","lastSentBlock()":"d7d317b3","localDomain()":"8d3638f4","messages(bytes32)":"2bbd59ca","mirrorConnector()":"cc394283","nonces(uint32)":"b95a2001","outboundRoot()":"65eaf11b","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","pendingAggregateRoots(bytes32)":"9d3117c7","processMessage(bytes)":"4ff746f6","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":"508a109b","provenAggregateRoots(bytes32)":"301f07c3","provenMessageRoots(bytes32)":"98c9f2b9","rateLimitBlocks()":"579c1618","removePendingAggregateRoot(bytes32)":"6b04a933","removeSender(address)":"b2f87643","renounceOwnership()":"715018a6","renounced()":"d232c220","send(bytes)":"2bb1ae7c","sentMessageRoots(bytes32)":"572386ca","setDelayBlocks(uint256)":"1eeaabea","setGasCap(uint256)":"7850b020","setMirrorConnector(address)":"5bd11efc","setRateLimitBlocks(uint256)":"e0fed010","setWatcherManager(address)":"d2a3cc71","unpause()":"3f4ba83a","verifySender(address)":"db1b7659","watcherManager()":"a792c29b","withdrawFunds(address)":"68742da6"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_mirrorDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_amb\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rootManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_processGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserveGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_merkle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_mirrorChainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Connector__processMessage_notUsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimited__rateLimited_messageSendRateExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__index_indexMoreThan32Bytes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"len\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slice\",\"type\":\"uint256\"}],\"name\":\"TypedMemView__index_overrun\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_identityOOG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_invalidPointer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_nullPointer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"updated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"DelayBlocksUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Dispatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_previous\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"GasCapUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"aggregateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"MessageProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"MirrorConnectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"mirrorDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"amb\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mirrorConnector\",\"type\":\"address\"}],\"name\":\"NewConnector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"Process\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updater\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRateLimit\",\"type\":\"uint256\"}],\"name\":\"SendRateLimitUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"watcherManager\",\"type\":\"address\"}],\"name\":\"WatcherManagerChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MERKLE\",\"outputs\":[{\"internalType\":\"contract MerkleTreeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROCESS_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROOT_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"addSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowlistedSenders\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"anyExecute\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_recipientAddress\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_messageBody\",\"type\":\"bytes\"}],\"name\":\"dispatch\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"home\",\"outputs\":[{\"internalType\":\"contract IOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_potentialReplica\",\"type\":\"address\"}],\"name\":\"isReplica\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastSentBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localDomain\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"messages\",\"outputs\":[{\"internalType\":\"enum SpokeConnector.MessageStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outboundRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"pendingAggregateRoots\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"path\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct SpokeConnector.Proof[]\",\"name\":\"_proofs\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"_aggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[32]\",\"name\":\"_aggregatePath\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"_aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"proveAndProcess\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenAggregateRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenMessageRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rateLimitBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_fraudulentRoot\",\"type\":\"bytes32\"}],\"name\":\"removePendingAggregateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"removeSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"sentMessageRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_delayBlocks\",\"type\":\"uint256\"}],\"name\":\"setDelayBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"}],\"name\":\"setGasCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"}],\"name\":\"setMirrorConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rateLimit\",\"type\":\"uint256\"}],\"name\":\"setRateLimitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"}],\"name\":\"setWatcherManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"watcherManager\",\"outputs\":[{\"internalType\":\"contract WatcherManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addSender(address)\":{\"details\":\"Only allowlisted routers (senders) can call `dispatch`.\"},\"dispatch(uint32,bytes32,bytes)\":{\"details\":\"The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \\\"hub\\\"), it will be combined into a single aggregate root by RootManager (along with outbound roots from other chains). This aggregate root will be redistributed to all destination chains. NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\"},\"home()\":{\"details\":\"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad\",\"returns\":{\"_0\":\"The local inbox contract\"}},\"isReplica(address)\":{\"returns\":{\"_0\":\"True if _potentialReplica is an enrolled Replica\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"processMessage(bytes)\":{\"details\":\"This is called by AMBs to process messages originating from mirror connector\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)\":{\"details\":\"Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.Intended to be called by the relayer at specific intervals during runtime.Will record a calculated root as having been proven if we've already proven that it was included in the aggregateRoot.\",\"params\":{\"_aggregateIndex\":\"Index of the inbound root in the aggregator's merkle tree in the hub.\",\"_aggregatePath\":\"Merkle path of inclusion for the inbound root.\",\"_aggregateRoot\":\"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.\",\"_proofs\":\"Batch of Proofs containing messages for proving/processing.\"}},\"removePendingAggregateRoot(bytes32)\":{\"details\":\"This method is required for handling fraud cases in the current construction.\",\"params\":{\"_fraudulentRoot\":\"Target fraudulent root that should be erased from the `pendingAggregateRoots` mapping.\"}},\"removeSender(address)\":{\"details\":\"Only allowlisted routers (senders) can call `dispatch`.\"},\"setRateLimitBlocks(uint256)\":{\"details\":\"Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\",\"params\":{\"_rateLimit\":\"The number of blocks require between sending messages. If set to 0, rate limiting for this spoke connector will be disabled.\"}},\"withdrawFunds(address)\":{\"details\":\"Withdraws the entire balance of the contract.\",\"params\":{\"_to\":\"The recipient of the funds withdrawn\"}}},\"version\":1},\"userdoc\":{\"events\":{\"FundsWithdrawn(address,uint256)\":{\"notice\":\"Emitted when funds are withdrawn by the admin\"},\"GasCapUpdated(uint256,uint256)\":{\"notice\":\"Emitted when admin updates the gas cap\"},\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"},\"WatcherManagerChanged(address)\":{\"notice\":\"Emitted when the manager address changes\"}},\"kind\":\"user\",\"methods\":{\"AMB()\":{\"notice\":\"Address of the AMB on this domain.\"},\"DOMAIN()\":{\"notice\":\"The domain of this Messaging (i.e. Connector) contract.\"},\"MERKLE()\":{\"notice\":\"MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root will be sent crosschain to the hub for aggregation and redistribution.\"},\"MIRROR_DOMAIN()\":{\"notice\":\"The domain of the corresponding messaging (i.e. Connector) contract.\"},\"PROCESS_GAS()\":{\"notice\":\"Minimum gas for processing a received message (reserved for handle)\"},\"RESERVE_GAS()\":{\"notice\":\"Reserved gas (to ensure tx completes in case message processing runs out)\"},\"ROOT_MANAGER()\":{\"notice\":\"RootManager contract address.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"addSender(address)\":{\"notice\":\"Adds a sender to the allowlist.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"delayBlocks()\":{\"notice\":\"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary.\"},\"dispatch(uint32,bytes32,bytes)\":{\"notice\":\"This function adds transfers to the outbound transfer merkle tree.\"},\"home()\":{\"notice\":\"Get the local inbox contract from the xAppConnectionManager\"},\"isReplica(address)\":{\"notice\":\"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\"},\"lastSentBlock()\":{\"notice\":\"Tracks the last block that we sent a message.\"},\"localDomain()\":{\"notice\":\"This provides the implementation for what is defined in the ConnectorManager to avoid storing the domain redundantly\"},\"messages(bytes32)\":{\"notice\":\"Mapping of message leaves to MessageStatus, keyed on leaf.\"},\"mirrorConnector()\":{\"notice\":\"Connector on L2 for L1 connectors, and vice versa.\"},\"nonces(uint32)\":{\"notice\":\"domain => next available nonce for the domain.\"},\"outboundRoot()\":{\"notice\":\"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"pause()\":{\"notice\":\"Watchers can pause contracts if fraud is detected\"},\"pendingAggregateRoots(bytes32)\":{\"notice\":\"This will hold the commit block for incoming aggregateRoots from the hub chain. Once they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can be used for proving inclusion of crosschain messages.\"},\"processMessage(bytes)\":{\"notice\":\"Processes a message received by an AMB\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)\":{\"notice\":\"Must be able to call the `handle` function on the BridgeRouter contract. This is called on the destination domain to handle incoming messages. Proving: Calculates the expected inbound root from an origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this calculated inbound root is included in the current aggregateRoot, given its index in the aggregator tree and the proof of inclusion. Processing: After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for execution.\"},\"provenAggregateRoots(bytes32)\":{\"notice\":\"This tracks the roots of the aggregate tree containing outbound roots from all other supported domains. The current version is the one that is known to be past the delayBlocks time period.\"},\"provenMessageRoots(bytes32)\":{\"notice\":\"This tracks whether the root has been proven to exist within the given aggregate root.\"},\"rateLimitBlocks()\":{\"notice\":\"The number of blocks required between message sending events.\"},\"removePendingAggregateRoot(bytes32)\":{\"notice\":\"Manually remove a pending aggregateRoot by owner if the contract is paused.\"},\"removeSender(address)\":{\"notice\":\"Removes a sender from the allowlist.\"},\"renounceOwnership()\":{\"notice\":\"Should not be able to renounce ownership\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"send(bytes)\":{\"notice\":\"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)\"},\"sentMessageRoots(bytes32)\":{\"notice\":\"This mapping records all message roots that have already been sent in order to prevent redundant message roots from being sent to hub.\"},\"setDelayBlocks(uint256)\":{\"notice\":\"Set the `delayBlocks`, the period in blocks over which an incoming message is verified.\"},\"setMirrorConnector(address)\":{\"notice\":\"Sets the address of the l2Connector for this domain\"},\"setRateLimitBlocks(uint256)\":{\"notice\":\"Set the rate limit (number of blocks) at which we can send messages from this contract to the hub chain using the `send` method.\"},\"setWatcherManager(address)\":{\"notice\":\"Owner can enroll a watcher (abilities are defined by inheriting contracts)\"},\"unpause()\":{\"notice\":\"Owner can unpause contracts if fraud is detected by watchers\"},\"verifySender(address)\":{\"notice\":\"Checks the cross domain sender for a given address\"},\"watcherManager()\":{\"notice\":\"The `WatcherManager` contract governs the watcher allowlist.\"},\"withdrawFunds(address)\":{\"notice\":\"This function should be callable by owner, and send funds trapped on a connector to the provided recipient.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol\":\"MultichainSpokeConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n    /**\\n     * @dev Emitted when the pause is triggered by `account`.\\n     */\\n    event Paused(address account);\\n\\n    /**\\n     * @dev Emitted when the pause is lifted by `account`.\\n     */\\n    event Unpaused(address account);\\n\\n    bool private _paused;\\n\\n    /**\\n     * @dev Initializes the contract in unpaused state.\\n     */\\n    constructor() {\\n        _paused = false;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    modifier whenNotPaused() {\\n        _requireNotPaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    modifier whenPaused() {\\n        _requirePaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the contract is paused, and false otherwise.\\n     */\\n    function paused() public view virtual returns (bool) {\\n        return _paused;\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is paused.\\n     */\\n    function _requireNotPaused() internal view virtual {\\n        require(!paused(), \\\"Pausable: paused\\\");\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is not paused.\\n     */\\n    function _requirePaused() internal view virtual {\\n        require(paused(), \\\"Pausable: not paused\\\");\\n    }\\n\\n    /**\\n     * @dev Triggers stopped state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    function _pause() internal virtual whenNotPaused {\\n        _paused = true;\\n        emit Paused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Returns to normal state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    function _unpause() internal virtual whenPaused {\\n        _paused = false;\\n        emit Unpaused(_msgSender());\\n    }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"contracts/messaging/MerkleTreeManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnableUpgradeable} from \\\"../shared/ProposedOwnableUpgradeable.sol\\\";\\nimport {MerkleLib} from \\\"./libraries/MerkleLib.sol\\\";\\n\\n/**\\n * @title MerkleTreeManager\\n * @notice Contains a Merkle tree instance and exposes read/write functions for the tree.\\n * @dev On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector.\\n */\\ncontract MerkleTreeManager is ProposedOwnableUpgradeable {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleTreeManager__setArborist_zeroAddress();\\n  error MerkleTreeManager__setArborist_alreadyArborist();\\n\\n  // ============ Events ============\\n\\n  event ArboristUpdated(address previous, address updated);\\n\\n  event LeafInserted(bytes32 root, uint256 count, bytes32 leaf);\\n\\n  event LeavesInserted(bytes32 root, uint256 count, bytes32[] leaves);\\n\\n  // ============ Libraries ============\\n\\n  using MerkleLib for MerkleLib.Tree;\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Core data structure with which this contract is tasked with keeping custody.\\n   * Writable only by the designated arborist.\\n   */\\n  MerkleLib.Tree public tree;\\n\\n  /**\\n   * @notice The arborist contract that has permission to write to this tree.\\n   * @dev This could be the root manager contract or a spoke connector contract, for example.\\n   */\\n  address public arborist;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyArborist() {\\n    require(arborist == msg.sender, \\\"!arborist\\\");\\n    _;\\n  }\\n\\n  // ============ Getters ============\\n\\n  /**\\n   * @notice Returns the current branch.\\n   */\\n  function branch() public view returns (bytes32[32] memory) {\\n    return tree.branch;\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the current root.\\n   */\\n  function root() public view returns (bytes32) {\\n    return tree.root();\\n  }\\n\\n  /**\\n   * @notice Returns the number of inserted leaves in the tree (current index).\\n   */\\n  function count() public view returns (uint256) {\\n    return tree.count;\\n  }\\n\\n  /**\\n   * @notice Convenience getter: returns the root and count.\\n   */\\n  function rootAndCount() public view returns (bytes32, uint256) {\\n    return (tree.root(), tree.count);\\n  }\\n\\n  // ======== Initializer =========\\n\\n  function initialize(address _arborist) public initializer {\\n    __MerkleTreeManager_init(_arborist);\\n    __ProposedOwnable_init();\\n  }\\n\\n  /**\\n   * @dev Initializes MerkleTreeManager instance. Sets the msg.sender as the initial permissioned\\n   */\\n  function __MerkleTreeManager_init(address _arborist) internal onlyInitializing {\\n    __MerkleTreeManager_init_unchained(_arborist);\\n  }\\n\\n  function __MerkleTreeManager_init_unchained(address _arborist) internal onlyInitializing {\\n    arborist = _arborist;\\n  }\\n\\n  // ============ Admin Functions ==============\\n\\n  /**\\n   * @notice Method for the current arborist to assign write permissions to a new arborist.\\n   * @param newArborist The new address to set as the current arborist.\\n   */\\n  function setArborist(address newArborist) external onlyOwner {\\n    if (newArborist == address(0)) revert MerkleTreeManager__setArborist_zeroAddress();\\n    address current = arborist;\\n    if (current == newArborist) revert MerkleTreeManager__setArborist_alreadyArborist();\\n\\n    // Emit updated event\\n    emit ArboristUpdated(current, newArborist);\\n\\n    arborist = newArborist;\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as there is a possibility the\\n   * arborist may change.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ========= Public Functions =========\\n\\n  /**\\n   * @notice Inserts the given leaves into the tree.\\n   * @param leaves The leaves to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32[] memory leaves) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // For > 1 leaf, considerably more efficient to put this tree into memory, conduct operations,\\n    // then re-assign it to storage - *especially* if we have multiple leaves to insert.\\n    MerkleLib.Tree memory _tree = tree;\\n\\n    uint256 leafCount = leaves.length;\\n    for (uint256 i; i < leafCount; ) {\\n      // Insert the new node (using in-memory method).\\n      _tree = _tree.insert(leaves[i]);\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // Write the newly updated tree to storage.\\n    tree = _tree;\\n\\n    // Get return details for convenience.\\n    _count = _tree.count;\\n    // NOTE: Root calculation method currently reads from storage only.\\n    _root = tree.root();\\n\\n    emit LeavesInserted(_root, _count, leaves);\\n  }\\n\\n  /**\\n   * @notice Inserts the given leaf into the tree.\\n   * @param leaf The leaf to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32 leaf) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // Insert the new node.\\n    tree = tree.insert(leaf);\\n    _count = tree.count;\\n    _root = tree.root();\\n\\n    emit LeafInserted(_root, _count, leaf);\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[48] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x6eb338843435d4e859de1c71b9ad458c41aeba79002eaa58a463ef86effda89a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherClient.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Pausable} from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\nimport {WatcherManager} from \\\"./WatcherManager.sol\\\";\\n\\n/**\\n * @notice This contract abstracts the functionality of the watcher manager.\\n * Contracts can inherit this contract to be able to use the watcher manager's shared watcher set.\\n */\\n\\ncontract WatcherClient is ProposedOwnable, Pausable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted when the manager address changes\\n   * @param watcherManager The updated manager\\n   */\\n  event WatcherManagerChanged(address watcherManager);\\n\\n  // ============ Properties ============\\n  /**\\n   * @notice The `WatcherManager` contract governs the watcher allowlist.\\n   * @dev Multiple clients can share a watcher set using the same manager\\n   */\\n  WatcherManager public watcherManager;\\n\\n  // ============ Constructor ============\\n  constructor(address _watcherManager) ProposedOwnable() {\\n    watcherManager = WatcherManager(_watcherManager);\\n  }\\n\\n  // ============ Modifiers ============\\n  /**\\n   * @notice Enforces the sender is the watcher\\n   */\\n  modifier onlyWatcher() {\\n    require(watcherManager.isWatcher(msg.sender), \\\"!watcher\\\");\\n    _;\\n  }\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @notice Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function setWatcherManager(address _watcherManager) external onlyOwner {\\n    require(_watcherManager != address(watcherManager), \\\"already watcher manager\\\");\\n    watcherManager = WatcherManager(_watcherManager);\\n    emit WatcherManagerChanged(_watcherManager);\\n  }\\n\\n  /**\\n   * @notice Owner can unpause contracts if fraud is detected by watchers\\n   */\\n  function unpause() external onlyOwner whenPaused {\\n    _unpause();\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as only the owner\\n   * is able to unpause the contracts. You can still propose `address(0)`,\\n   * but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ============ Watcher fns ============\\n\\n  /**\\n   * @notice Watchers can pause contracts if fraud is detected\\n   */\\n  function pause() external onlyWatcher whenNotPaused {\\n    _pause();\\n  }\\n}\\n\",\"keccak256\":\"0x97b0da2c0317359ef2980d1f3c5fcdd7df2bdacbedf216dcbda521b96124444a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can\\n * inherit to make use of the same watcher set.\\n */\\n\\ncontract WatcherManager is ProposedOwnable {\\n  // ============ Events ============\\n  event WatcherAdded(address watcher);\\n\\n  event WatcherRemoved(address watcher);\\n\\n  // ============ Properties ============\\n  mapping(address => bool) public isWatcher;\\n\\n  // ============ Constructor ============\\n  constructor() ProposedOwnable() {\\n    _setOwner(msg.sender);\\n  }\\n\\n  // ============ Modifiers ============\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @dev Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function addWatcher(address _watcher) external onlyOwner {\\n    require(!isWatcher[_watcher], \\\"already watcher\\\");\\n    isWatcher[_watcher] = true;\\n    emit WatcherAdded(_watcher);\\n  }\\n\\n  /**\\n   * @dev Owner can unenroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function removeWatcher(address _watcher) external onlyOwner {\\n    require(isWatcher[_watcher], \\\"!exist\\\");\\n    delete isWatcher[_watcher];\\n    emit WatcherRemoved(_watcher);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as the watcher griefing\\n   * vector exists. You can still propose `address(0)`, but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n}\\n\",\"keccak256\":\"0x94d9db4cd19453c9047164f697011163a42a6e12f9b2e1d7fbcfb35a7d021318\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/Connector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IConnector} from \\\"../interfaces/IConnector.sol\\\";\\n\\n/**\\n * @title Connector\\n * @author Connext Labs, Inc.\\n * @notice This contract has the messaging interface functions used by all connectors.\\n *\\n * @dev This contract stores information about mirror connectors, but can be used as a\\n * base for contracts that do not have a mirror (i.e. the connector handling messaging on\\n * mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\\n * will be empty\\n *\\n * @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\\n * or `mirrorGas`\\n */\\nabstract contract Connector is ProposedOwnable, IConnector {\\n  // ========== Custom Errors ===========\\n\\n  error Connector__processMessage_notUsed();\\n\\n  // ============ Events ============\\n\\n  event NewConnector(\\n    uint32 indexed domain,\\n    uint32 indexed mirrorDomain,\\n    address amb,\\n    address rootManager,\\n    address mirrorConnector\\n  );\\n\\n  event MirrorConnectorUpdated(address previous, address current);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The domain of this Messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable DOMAIN;\\n\\n  /**\\n   * @notice Address of the AMB on this domain.\\n   */\\n  address public immutable AMB;\\n\\n  /**\\n   * @notice RootManager contract address.\\n   */\\n  address public immutable ROOT_MANAGER;\\n\\n  /**\\n   * @notice The domain of the corresponding messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable MIRROR_DOMAIN;\\n\\n  /**\\n   * @notice Connector on L2 for L1 connectors, and vice versa.\\n   */\\n  address public mirrorConnector;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered AMB\\n   */\\n  modifier onlyAMB() {\\n    require(msg.sender == AMB, \\\"!AMB\\\");\\n    _;\\n  }\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered ROOT_MANAGER\\n   */\\n  modifier onlyRootManager() {\\n    // NOTE: RootManager will be zero address for spoke connectors.\\n    // Only root manager can dispatch a message to spokes/L2s via the hub connector.\\n    require(msg.sender == ROOT_MANAGER, \\\"!rootManager\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) ProposedOwnable() {\\n    // set the owner\\n    _setOwner(msg.sender);\\n\\n    // sanity checks on values\\n    require(_domain != 0, \\\"empty domain\\\");\\n    require(_rootManager != address(0), \\\"empty rootManager\\\");\\n    // see note at top of contract on why the mirror values are not sanity checked\\n\\n    // set immutables\\n    DOMAIN = _domain;\\n    AMB = _amb;\\n    ROOT_MANAGER = _rootManager;\\n    MIRROR_DOMAIN = _mirrorDomain;\\n    // set mutables if defined\\n    if (_mirrorConnector != address(0)) {\\n      _setMirrorConnector(_mirrorConnector);\\n    }\\n\\n    emit NewConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector);\\n  }\\n\\n  // ============ Receivable ============\\n  /**\\n   * @notice Connectors may need to receive native asset to handle fees when sending a\\n   * message\\n   */\\n  receive() external payable {}\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Sets the address of the l2Connector for this domain\\n   */\\n  function setMirrorConnector(address _mirrorConnector) public onlyOwner {\\n    _setMirrorConnector(_mirrorConnector);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice Processes a message received by an AMB\\n   * @dev This is called by AMBs to process messages originating from mirror connector\\n   */\\n  function processMessage(bytes memory _data) external virtual onlyAMB {\\n    _processMessage(_data);\\n    emit MessageProcessed(_data, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Checks the cross domain sender for a given address\\n   */\\n  function verifySender(address _expected) external returns (bool) {\\n    return _verifySender(_expected);\\n  }\\n\\n  // ============ Virtual Functions ============\\n\\n  /**\\n   * @notice This function is used by the Connext contract on the l2 domain to send a message to the\\n   * l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\\n   * @param _data The contents of the message\\n   * @param _encodedData Data used to send the message; specific to connector\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal virtual;\\n\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(\\n    bytes memory /* _data */\\n  ) internal virtual {\\n    // By default, reverts. This is to ensure the call path is not used unless this function is\\n    // overridden by the inheriting class\\n    revert Connector__processMessage_notUsed();\\n  }\\n\\n  /**\\n   * @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\\n   * is the expected address.\\n   * @dev Should be overridden by the implementing Connector contract.\\n   */\\n  function _verifySender(address _expected) internal virtual returns (bool);\\n\\n  // ============ Private Functions ============\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal virtual {\\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\\n    mirrorConnector = _mirrorConnector;\\n  }\\n}\\n\",\"keccak256\":\"0x08d4077a1b5caf9f46491206064bb24bee467dd741b42fed3d30a608eea83368\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/ConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IConnectorManager} from \\\"../interfaces/IConnectorManager.sol\\\";\\nimport {IOutbox} from \\\"../interfaces/IOutbox.sol\\\";\\n\\n/**\\n * @notice This is an interface to allow the `Messaging` contract to be used\\n * as a `XappConnectionManager` on all router contracts.\\n *\\n * @dev Each nomad router contract has a `XappConnectionClient`, which references a\\n * XappConnectionManager to get the `Home` (outbox) and approved `Replica` (inbox)\\n * instances. At any point the client can replace the manager it's pointing to,\\n * changing the underlying messaging connection.\\n */\\nabstract contract ConnectorManager is IConnectorManager {\\n  constructor() {}\\n\\n  function home() public view returns (IOutbox) {\\n    return IOutbox(address(this));\\n  }\\n\\n  function isReplica(address _potentialReplica) public view returns (bool) {\\n    return _potentialReplica == address(this);\\n  }\\n\\n  function localDomain() external view virtual returns (uint32);\\n}\\n\",\"keccak256\":\"0x0112a527de062459aadfc2c8aa59a81c379d53c0f646f7869c6250e343ba91be\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/GasCap.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\n\\nabstract contract GasCap is ProposedOwnable {\\n  // ============ Storage ============\\n  /**\\n   * @notice The gnosis amb requires destination gas to be specified on the origin.\\n   * The gas used will be passed in by the relayer to allow for real-time estimates,\\n   * but will be capped at the admin-set cap.\\n   */\\n  uint256 gasCap;\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted when admin updates the gas cap\\n   * @param _previous The starting value\\n   * @param _updated The final value\\n   */\\n  event GasCapUpdated(uint256 _previous, uint256 _updated);\\n\\n  // ============ Constructor ============\\n  constructor(uint256 _gasCap) {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Admin Fns ============\\n  function setGasCap(uint256 _gasCap) public onlyOwner {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Internal Fns ============\\n\\n  /**\\n   * @notice Used (by admin) to update the gas cap\\n   * @param _gasCap The new value\\n   */\\n  function _setGasCap(uint256 _gasCap) internal {\\n    emit GasCapUpdated(gasCap, _gasCap);\\n    gasCap = _gasCap;\\n  }\\n\\n  /**\\n   * @notice Used to get the gas to use. Will be the original value IFF it\\n   * is less than the cap\\n   * @param _gas The proposed gas value\\n   */\\n  function _getGas(uint256 _gas) internal view returns (uint256) {\\n    if (_gas > gasCap) {\\n      _gas = gasCap;\\n    }\\n    return _gas;\\n  }\\n}\\n\",\"keccak256\":\"0xb8b52a3372f08490c918d1f490ad80764d54bd62d1638e4d17a5b552efe6587d\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/SpokeConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ReentrancyGuard} from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {ExcessivelySafeCall} from \\\"../../shared/libraries/ExcessivelySafeCall.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {MerkleLib} from \\\"../libraries/MerkleLib.sol\\\";\\nimport {Message} from \\\"../libraries/Message.sol\\\";\\nimport {RateLimited} from \\\"../libraries/RateLimited.sol\\\";\\n\\nimport {MerkleTreeManager} from \\\"../MerkleTreeManager.sol\\\";\\nimport {WatcherClient} from \\\"../WatcherClient.sol\\\";\\n\\nimport {Connector, ProposedOwnable} from \\\"./Connector.sol\\\";\\nimport {ConnectorManager} from \\\"./ConnectorManager.sol\\\";\\n\\n/**\\n * @title SpokeConnector\\n * @author Connext Labs, Inc.\\n * @notice This contract implements the messaging functions needed on the spoke-side of a given AMB.\\n * The SpokeConnector extends the HubConnector functionality by being able to send, store, and prove\\n * messages.\\n *\\n * @dev If you are deploying this contract to mainnet, then the mirror values stored in the HubConnector\\n * will be unused\\n */\\nabstract contract SpokeConnector is Connector, ConnectorManager, WatcherClient, RateLimited, ReentrancyGuard {\\n  // ============ Libraries ============\\n\\n  using MerkleLib for MerkleLib.Tree;\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n  using Message for bytes29;\\n\\n  // ============ Events ============\\n\\n  event SenderAdded(address sender);\\n\\n  event SenderRemoved(address sender);\\n\\n  event AggregateRootReceived(bytes32 root);\\n\\n  event AggregateRootRemoved(bytes32 root);\\n\\n  event AggregateRootVerified(bytes32 indexed root);\\n\\n  event Dispatch(bytes32 leaf, uint256 index, bytes32 root, bytes message);\\n\\n  event Process(bytes32 leaf, bool success, bytes returnData);\\n\\n  event DelayBlocksUpdated(uint256 indexed updated, address caller);\\n\\n  /**\\n   * @notice Emitted when funds are withdrawn by the admin\\n   * @dev See comments in `withdrawFunds`\\n   * @param to The recipient of the funds\\n   * @param amount The amount withdrawn\\n   */\\n  event FundsWithdrawn(address indexed to, uint256 amount);\\n\\n  event MessageProven(bytes32 indexed leaf, bytes32 indexed aggregateRoot, uint256 aggregateIndex);\\n\\n  // ============ Structs ============\\n\\n  // Status of Message:\\n  //   0 - None - message has not been proven or processed\\n  //   1 - Proven - message inclusion proof has been validated\\n  //   2 - Processed - message has been dispatched to recipient\\n  enum MessageStatus {\\n    None,\\n    Proven,\\n    Processed\\n  }\\n\\n  /**\\n   * Struct for submitting a proof for a given message. Used in `proveAndProcess` below.\\n   * @param message Bytes of message to be processed. The hash of this message is considered the leaf.\\n   * @param proof Merkle proof of inclusion for given leaf.\\n   * @param index Index of leaf in home's merkle tree.\\n   */\\n  struct Proof {\\n    bytes message;\\n    bytes32[32] path;\\n    uint256 index;\\n  }\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Number of blocks to delay the processing of a message to allow for watchers to verify\\n   * the validity and pause if necessary.\\n   */\\n  uint256 public delayBlocks;\\n\\n  /**\\n   * @notice MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root\\n   * will be sent crosschain to the hub for aggregation and redistribution.\\n   */\\n  MerkleTreeManager public immutable MERKLE;\\n\\n  /**\\n   * @notice Minimum gas for processing a received message (reserved for handle)\\n   */\\n  uint256 public immutable PROCESS_GAS;\\n\\n  /**\\n   * @notice Reserved gas (to ensure tx completes in case message processing runs out)\\n   */\\n  uint256 public immutable RESERVE_GAS;\\n\\n  /**\\n   * @notice This will hold the commit block for incoming aggregateRoots from the hub chain. Once\\n   * they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can\\n   * be used for proving inclusion of crosschain messages.\\n   *\\n   * @dev NOTE: A commit block of 0 should be considered invalid (it is an empty entry in the\\n   * mapping). We must ALWAYS ensure the value is not 0 before checking whether it has surpassed the\\n   * verification period.\\n   */\\n  mapping(bytes32 => uint256) public pendingAggregateRoots;\\n\\n  /**\\n   * @notice This tracks the roots of the aggregate tree containing outbound roots from all other\\n   * supported domains. The current version is the one that is known to be past the delayBlocks\\n   * time period.\\n   * @dev This root is the root of the tree that is aggregated on mainnet (composed of all the roots\\n   * of previous trees).\\n   */\\n  mapping(bytes32 => bool) public provenAggregateRoots;\\n\\n  /**\\n   * @notice This tracks whether the root has been proven to exist within the given aggregate root.\\n   * @dev Tracking this is an optimization so you dont have to prove inclusion of the same constituent\\n   * root many times.\\n   */\\n  mapping(bytes32 => bool) public provenMessageRoots;\\n\\n  /**\\n   * @notice This mapping records all message roots that have already been sent in order to prevent\\n   * redundant message roots from being sent to hub.\\n   */\\n  mapping(bytes32 => bool) public sentMessageRoots;\\n\\n  /**\\n   * @dev This is used for the `onlyAllowlistedSender` modifier, which gates who\\n   * can send messages using `dispatch`.\\n   */\\n  mapping(address => bool) public allowlistedSenders;\\n\\n  /**\\n   * @notice domain => next available nonce for the domain.\\n   */\\n  mapping(uint32 => uint32) public nonces;\\n\\n  /**\\n   * @notice Mapping of message leaves to MessageStatus, keyed on leaf.\\n   */\\n  mapping(bytes32 => MessageStatus) public messages;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyAllowlistedSender() {\\n    require(allowlistedSenders[msg.sender], \\\"!allowlisted\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new SpokeConnector instance.\\n   * @param _domain The domain this connector lives on.\\n   * @param _mirrorDomain The hub domain.\\n   * @param _amb The address of the AMB on the spoke domain this connector lives on.\\n   * @param _rootManager The address of the RootManager on the hub.\\n   * @param _mirrorConnector The address of the spoke connector.\\n   * @param _processGas The gas costs used in `handle` to ensure meaningful state changes can occur (minimum gas needed\\n   * to handle transaction).\\n   * @param _reserveGas The gas costs reserved when `handle` is called to ensure failures are handled.\\n   * @param _delayBlocks The delay for the validation period for incoming messages in blocks.\\n   * @param _merkle The address of the MerkleTreeManager on this spoke domain.\\n   * @param _watcherManager The address of the WatcherManager to whom this connector is a client.\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    uint256 _processGas,\\n    uint256 _reserveGas,\\n    uint256 _delayBlocks,\\n    address _merkle,\\n    address _watcherManager\\n  )\\n    ConnectorManager()\\n    Connector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector)\\n    WatcherClient(_watcherManager)\\n  {\\n    // Sanity check: constants are reasonable.\\n    require(_processGas > 850_000 - 1, \\\"!process gas\\\");\\n    require(_reserveGas > 15_000 - 1, \\\"!reserve gas\\\");\\n    PROCESS_GAS = _processGas;\\n    RESERVE_GAS = _reserveGas;\\n\\n    require(_merkle != address(0), \\\"!zero merkle\\\");\\n    MERKLE = MerkleTreeManager(_merkle);\\n\\n    delayBlocks = _delayBlocks;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Adds a sender to the allowlist.\\n   * @dev Only allowlisted routers (senders) can call `dispatch`.\\n   */\\n  function addSender(address _sender) public onlyOwner {\\n    allowlistedSenders[_sender] = true;\\n    emit SenderAdded(_sender);\\n  }\\n\\n  /**\\n   * @notice Removes a sender from the allowlist.\\n   * @dev Only allowlisted routers (senders) can call `dispatch`.\\n   */\\n  function removeSender(address _sender) public onlyOwner {\\n    delete allowlistedSenders[_sender];\\n    emit SenderRemoved(_sender);\\n  }\\n\\n  /**\\n   * @notice Set the `delayBlocks`, the period in blocks over which an incoming message\\n   * is verified.\\n   */\\n  function setDelayBlocks(uint256 _delayBlocks) public onlyOwner {\\n    require(_delayBlocks != delayBlocks, \\\"!delayBlocks\\\");\\n    emit DelayBlocksUpdated(_delayBlocks, msg.sender);\\n    delayBlocks = _delayBlocks;\\n  }\\n\\n  /**\\n   * @notice Set the rate limit (number of blocks) at which we can send messages from\\n   * this contract to the hub chain using the `send` method.\\n   * @dev Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\\n   * @param _rateLimit The number of blocks require between sending messages. If set to\\n   * 0, rate limiting for this spoke connector will be disabled.\\n   */\\n  function setRateLimitBlocks(uint256 _rateLimit) public onlyOwner {\\n    _setRateLimitBlocks(_rateLimit);\\n  }\\n\\n  /**\\n   * @notice Manually remove a pending aggregateRoot by owner if the contract is paused.\\n   * @dev This method is required for handling fraud cases in the current construction.\\n   * @param _fraudulentRoot Target fraudulent root that should be erased from the\\n   * `pendingAggregateRoots` mapping.\\n   */\\n  function removePendingAggregateRoot(bytes32 _fraudulentRoot) public onlyOwner whenPaused {\\n    // Sanity check: pending aggregate root exists.\\n    require(pendingAggregateRoots[_fraudulentRoot] != 0, \\\"aggregateRoot !exists\\\");\\n    delete pendingAggregateRoots[_fraudulentRoot];\\n    emit AggregateRootRemoved(_fraudulentRoot);\\n  }\\n\\n  /**\\n   * @notice This function should be callable by owner, and send funds trapped on\\n   * a connector to the provided recipient.\\n   * @dev Withdraws the entire balance of the contract.\\n   *\\n   * @param _to The recipient of the funds withdrawn\\n   */\\n  function withdrawFunds(address _to) public onlyOwner {\\n    uint256 amount = address(this).balance;\\n    Address.sendValue(payable(_to), amount);\\n    emit FundsWithdrawn(_to, amount);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as it is impossible in the\\n   * WatcherClient, and as long as only the owner can remove pending roots in case of\\n   * fraud.\\n   */\\n  function renounceOwnership() public virtual override(ProposedOwnable, WatcherClient) onlyOwner {}\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice This returns the root of all messages with the origin domain as this domain (i.e.\\n   * all outbound messages)\\n   */\\n  function outboundRoot() external view returns (bytes32) {\\n    return MERKLE.root();\\n  }\\n\\n  /**\\n   * @notice This provides the implementation for what is defined in the ConnectorManager\\n   * to avoid storing the domain redundantly\\n   */\\n  function localDomain() external view override returns (uint32) {\\n    return DOMAIN;\\n  }\\n\\n  /**\\n   * @notice This returns the root of all messages with the origin domain as this domain (i.e.\\n   * all outbound messages)\\n   */\\n  function send(bytes memory _encodedData) external payable whenNotPaused rateLimited {\\n    bytes32 root = MERKLE.root();\\n    require(sentMessageRoots[root] == false, \\\"root already sent\\\");\\n    bytes memory _data = abi.encodePacked(root);\\n    _sendMessage(_data, _encodedData);\\n    sentMessageRoots[root] = true;\\n    emit MessageSent(_data, _encodedData, msg.sender);\\n  }\\n\\n  /**\\n   * @notice This function adds transfers to the outbound transfer merkle tree.\\n   * @dev The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \\\"hub\\\"),\\n   * it will be combined into a single aggregate root by RootManager (along with outbound roots from other\\n   * chains). This aggregate root will be redistributed to all destination chains.\\n   *\\n   * NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external onlyAllowlistedSender returns (bytes32, bytes memory) {\\n    // Get the next nonce for the destination domain, then increment it.\\n    uint32 _nonce = nonces[_destinationDomain]++;\\n\\n    // Format the message into packed bytes.\\n    bytes memory _message = Message.formatMessage(\\n      DOMAIN,\\n      TypeCasts.addressToBytes32(msg.sender),\\n      _nonce,\\n      _destinationDomain,\\n      _recipientAddress,\\n      _messageBody\\n    );\\n\\n    // Insert the hashed message into the Merkle tree.\\n    bytes32 _messageHash = keccak256(_message);\\n\\n    // Returns the root calculated after insertion of message, needed for events for\\n    // watchers\\n    (bytes32 _root, uint256 _count) = MERKLE.insert(_messageHash);\\n\\n    // Emit Dispatch event with message information.\\n    // NOTE: Current leaf index is count - 1 since new leaf has already been inserted.\\n    emit Dispatch(_messageHash, _count - 1, _root, _message);\\n    return (_messageHash, _message);\\n  }\\n\\n  /**\\n   * @notice Must be able to call the `handle` function on the BridgeRouter contract. This is called\\n   * on the destination domain to handle incoming messages.\\n   *\\n   * Proving:\\n   * Calculates the expected inbound root from an origin chain given a leaf (message hash),\\n   * the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this\\n   * calculated inbound root is included in the current aggregateRoot, given its index in the aggregator\\n   * tree and the proof of inclusion.\\n   *\\n   * Processing:\\n   * After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for\\n   * execution.\\n   *\\n   * @dev Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they\\n   * must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.\\n   * @dev Intended to be called by the relayer at specific intervals during runtime.\\n   * @dev Will record a calculated root as having been proven if we've already proven that it was included\\n   * in the aggregateRoot.\\n   *\\n   * @param _proofs Batch of Proofs containing messages for proving/processing.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   */\\n  function proveAndProcess(\\n    Proof[] calldata _proofs,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) external whenNotPaused nonReentrant {\\n    // Sanity check: proofs are included.\\n    require(_proofs.length > 0, \\\"!proofs\\\");\\n\\n    // Optimization: calculate the inbound root for the first message in the batch and validate that\\n    // it's included in the aggregator tree. We can use this as a reference for every calculation\\n    // below to minimize storage access calls.\\n    bytes32 _messageHash = keccak256(_proofs[0].message);\\n    // TODO: Could use an array of sharedRoots so you can submit a message batch of messages with\\n    // different origins.\\n    bytes32 _messageRoot = calculateMessageRoot(_messageHash, _proofs[0].path, _proofs[0].index);\\n\\n    // Handle proving this message root is included in the target aggregate root.\\n    proveMessageRoot(_messageRoot, _aggregateRoot, _aggregatePath, _aggregateIndex);\\n    // Assuming the inbound message root was proven, the first message is now considered proven.\\n    messages[_messageHash] = MessageStatus.Proven;\\n\\n    // Now we handle proving all remaining messages in the batch - they should all share the same\\n    // inbound root!\\n    uint256 len = _proofs.length;\\n    for (uint32 i = 1; i < len; ) {\\n      _messageHash = keccak256(_proofs[i].message);\\n      bytes32 _calculatedRoot = calculateMessageRoot(_messageHash, _proofs[i].path, _proofs[i].index);\\n      // Make sure this root matches the validated inbound root.\\n      require(_calculatedRoot == _messageRoot, \\\"!sharedRoot\\\");\\n      // Message is proven!\\n      messages[_messageHash] = MessageStatus.Proven;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // All messages have been proven. We iterate separately here to process each message in the batch.\\n    // NOTE: Going through the proving phase for all messages in the batch BEFORE processing ensures\\n    // we hit reverts before we consume unbounded gas from `process` calls.\\n    for (uint32 i = 0; i < len; ) {\\n      process(_proofs[i].message);\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  // ============ Private Functions ============\\n\\n  /**\\n   * @notice This is either called by the Connector (AKA `this`) on the spoke (L2) chain after retrieving\\n   * latest `aggregateRoot` from the AMB (sourced from mainnet) OR called by the AMB directly.\\n   * @dev Must check the msg.sender on the origin chain to ensure only the root manager is passing\\n   * these roots.\\n   */\\n  function receiveAggregateRoot(bytes32 _newRoot) internal {\\n    require(_newRoot != bytes32(\\\"\\\"), \\\"new root empty\\\");\\n    require(pendingAggregateRoots[_newRoot] == 0, \\\"root already pending\\\");\\n    require(!provenAggregateRoots[_newRoot], \\\"root already proven\\\");\\n\\n    pendingAggregateRoots[_newRoot] = block.number;\\n    emit AggregateRootReceived(_newRoot);\\n  }\\n\\n  /**\\n   * @notice Checks whether the given aggregate root has surpassed the verification period.\\n   * @dev Reverts if the given aggregate root is invalid (does not exist) OR has not surpassed\\n   * verification period.\\n   * @dev If the target aggregate root is pending and HAS surpassed the verification period, then we will\\n   * move it over to the proven mapping.\\n   * @param _aggregateRoot Target aggregate root to verify.\\n   */\\n  function verifyAggregateRoot(bytes32 _aggregateRoot) internal {\\n    // 0. Sanity check: root is not 0.\\n    require(_aggregateRoot != bytes32(\\\"\\\"), \\\"aggregateRoot empty\\\");\\n\\n    // 1. Check to see if the target *aggregate* root has already been proven.\\n    if (provenAggregateRoots[_aggregateRoot]) {\\n      return; // Short circuit if this root is proven.\\n    }\\n\\n    // 2. The target aggregate root must be pending. Aggregate root commit block entry MUST exist.\\n    uint256 _aggregateRootCommitBlock = pendingAggregateRoots[_aggregateRoot];\\n    require(_aggregateRootCommitBlock != 0, \\\"aggregateRoot !exist\\\");\\n\\n    // 3. Pending aggregate root has surpassed the `delayBlocks` verification period.\\n    require(block.number - _aggregateRootCommitBlock >= delayBlocks, \\\"aggregateRoot !verified\\\");\\n\\n    // 4. The target aggregate root has surpassed verification period, we can move it over to the\\n    // proven mapping.\\n    provenAggregateRoots[_aggregateRoot] = true;\\n    emit AggregateRootVerified(_aggregateRoot);\\n    // May as well delete the pending aggregate root entry for the gas refund: it should no longer\\n    // be needed.\\n    delete pendingAggregateRoots[_aggregateRoot];\\n  }\\n\\n  /**\\n   * @notice Checks whether a given message is valid. If so, calculates the expected inbound root from an\\n   * origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion.\\n   * @dev Reverts if message's MessageStatus != None (i.e. if message was already proven or processed).\\n   *\\n   * @param _messageHash Leaf (message hash) that requires proving.\\n   * @param _messagePath Merkle path of inclusion for the leaf.\\n   * @param _messageIndex Index of leaf in the merkle tree on the origin chain of the message.\\n   * @return bytes32 Calculated root.\\n   **/\\n  function calculateMessageRoot(\\n    bytes32 _messageHash,\\n    bytes32[32] calldata _messagePath,\\n    uint256 _messageIndex\\n  ) internal view returns (bytes32) {\\n    // Ensure that the given message has not already been proven and processed.\\n    require(messages[_messageHash] == MessageStatus.None, \\\"!MessageStatus.None\\\");\\n    // Calculate the expected inbound root from the message origin based on the proof.\\n    // NOTE: Assuming a valid message was submitted with correct path/index, this should be an inbound root\\n    // that the hub has received. If the message were invalid, the root calculated here would not exist in the\\n    // aggregate root.\\n    return MerkleLib.branchRoot(_messageHash, _messagePath, _messageIndex);\\n  }\\n\\n  /**\\n   * @notice Prove an inbound message root from another chain is included in the target aggregateRoot.\\n   * @param _messageRoot The message root we want to verify.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   */\\n  function proveMessageRoot(\\n    bytes32 _messageRoot,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) internal {\\n    // 0. Check to see if the root for this batch has already been proven.\\n    if (provenMessageRoots[_messageRoot]) {\\n      // NOTE: It seems counter-intuitive, but we do NOT need to prove the given `_aggregateRoot` param\\n      // is valid IFF the `_messageRoot` has already been proven; we know that the `_messageRoot` has to\\n      // have been included in *some* proven aggregate root historically.\\n      return;\\n    }\\n\\n    // 1. Ensure aggregate root has been proven.\\n    verifyAggregateRoot(_aggregateRoot);\\n\\n    // 2. Calculate an aggregate root, given this inbound root (as leaf), path (proof), and index.\\n    bytes32 _calculatedAggregateRoot = MerkleLib.branchRoot(_messageRoot, _aggregatePath, _aggregateIndex);\\n\\n    // 3. Check to make sure it matches the current aggregate root we have stored.\\n    require(_calculatedAggregateRoot == _aggregateRoot, \\\"invalid inboundRoot\\\");\\n\\n    // This inbound root has been proven. We should specify that to optimize future calls.\\n    provenMessageRoots[_messageRoot] = true;\\n    emit MessageProven(_messageRoot, _aggregateRoot, _aggregateIndex);\\n  }\\n\\n  /**\\n   * @notice Given formatted message, attempts to dispatch message payload to end recipient.\\n   * @dev Recipient must implement a `handle` method (refer to IMessageRecipient.sol)\\n   * Reverts if formatted message's destination domain is not the Replica's domain,\\n   * if message has not been proven,\\n   * or if not enough gas is provided for the dispatch transaction.\\n   * @param _message Formatted message\\n   * @return _success TRUE iff dispatch transaction succeeded\\n   */\\n  function process(bytes memory _message) internal returns (bool _success) {\\n    bytes29 _m = _message.ref(0);\\n    // ensure message was meant for this domain\\n    require(_m.destination() == DOMAIN, \\\"!destination\\\");\\n    // ensure message has been proven\\n    bytes32 _messageHash = _m.keccak();\\n    require(messages[_messageHash] == MessageStatus.Proven, \\\"!proven\\\");\\n    // check re-entrancy guard\\n    // require(entered == 1, \\\"!reentrant\\\");\\n    // entered = 0;\\n    // update message status as processed\\n    messages[_messageHash] = MessageStatus.Processed;\\n    // A call running out of gas TYPICALLY errors the whole tx. We want to\\n    // a) ensure the call has a sufficient amount of gas to make a\\n    //    meaningful state change.\\n    // b) ensure that if the subcall runs out of gas, that the tx as a whole\\n    //    does not revert (i.e. we still mark the message processed)\\n    // To do this, we require that we have enough gas to process\\n    // and still return. We then delegate only the minimum processing gas.\\n    require(gasleft() > PROCESS_GAS + RESERVE_GAS - 1, \\\"!gas\\\");\\n    // get the message recipient\\n    address _recipient = _m.recipientAddress();\\n    // set up for assembly call\\n    uint256 _gas = PROCESS_GAS;\\n    uint16 _maxCopy = 256;\\n    // allocate memory for returndata\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    bytes memory _calldata = abi.encodeWithSignature(\\n      \\\"handle(uint32,uint32,bytes32,bytes)\\\",\\n      _m.origin(),\\n      _m.nonce(),\\n      _m.sender(),\\n      _m.body().clone()\\n    );\\n\\n    (_success, _returnData) = ExcessivelySafeCall.excessivelySafeCall(_recipient, _gas, 0, _maxCopy, _calldata);\\n\\n    // emit process results\\n    emit Process(_messageHash, _success, _returnData);\\n  }\\n}\\n\",\"keccak256\":\"0xde9ea6f462f33e62618d069fddaeed24268d13cfe03abc9dd388824a5e4e3896\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/multichain/BaseMultichain.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Multichain} from \\\"../../interfaces/ambs/Multichain.sol\\\";\\n\\nimport {GasCap} from \\\"../GasCap.sol\\\";\\n\\nabstract contract BaseMultichain is GasCap {\\n  // ============ Internal Storage ============\\n  address internal immutable EXECUTOR; // Is != amb, used only to retrieve sender context\\n\\n  // Mirror chain id\\n  uint256 internal immutable MIRROR_CHAIN_ID;\\n\\n  // ============ Constructor ============\\n  constructor(\\n    address _amb,\\n    uint256 _mirrorChainId,\\n    uint256 _gasCap // max fee on destination chain\\n  ) GasCap(_gasCap) {\\n    // sanity checks\\n    require(_mirrorChainId != 0, \\\"!mirrorChainId\\\");\\n\\n    // set immutable propertioes\\n    EXECUTOR = Multichain(_amb).executor();\\n    require(EXECUTOR != address(0), \\\"!executor\\\");\\n    MIRROR_CHAIN_ID = _mirrorChainId;\\n  }\\n\\n  // ============ Public Fns ============\\n  function anyExecute(bytes memory _data) external returns (bool success, bytes memory result) {\\n    _processMessage(_data);\\n  }\\n\\n  // ============ Private fns ============\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(bytes memory _data) internal virtual;\\n\\n  /**\\n   * @dev Sends `outboundRoot` to root manager on the mirror chain\\n   */\\n  function _sendMessage(\\n    address _amb,\\n    address _mirrorConnector,\\n    bytes memory _data,\\n    bytes memory _encodedData\\n  ) internal {\\n    // Should always be sending a merkle root\\n    require(_data.length == 32, \\\"!data length\\\");\\n\\n    // Should not include any gas info\\n    require(_encodedData.length == 0, \\\"!data length\\\");\\n\\n    // Get the max fee supplied\\n    uint256 supplied = _getGas(msg.value); // fee paid on origin chain, up to cap\\n    // NOTE: fee will always be <= msg.value\\n\\n    // Get the min fees\\n    uint256 required = Multichain(_amb).calcSrcFees(\\n      \\\"\\\", // app id\\n      MIRROR_CHAIN_ID, // destination chain\\n      32 // data length: selector + root\\n    );\\n    // Should have at least the min fees\\n    require(required < supplied + 1, \\\"!fees\\\");\\n\\n    Multichain(_amb).anyCall{value: supplied}(\\n      _mirrorConnector, // Target contract on destination\\n      _data, // Call data for interaction\\n      address(0), // fallback address on origin chain\\n      MIRROR_CHAIN_ID,\\n      2 // fees paid on source chain\\n    );\\n  }\\n\\n  function _verifySender(address _amb, address _expected) internal view returns (bool) {\\n    require(msg.sender == EXECUTOR, \\\"!executor\\\");\\n\\n    (address from, uint256 fromChainId, ) = Multichain(EXECUTOR).context();\\n    return from == _expected && fromChainId == MIRROR_CHAIN_ID;\\n  }\\n}\\n\",\"keccak256\":\"0x57494779372d73cbb657b60cff9ff57a29455d32df8c74dad7df6cb2fb4e1d9b\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {SpokeConnector, ProposedOwnable} from \\\"../SpokeConnector.sol\\\";\\nimport {Connector} from \\\"../Connector.sol\\\";\\n\\nimport {BaseMultichain} from \\\"./BaseMultichain.sol\\\";\\n\\ncontract MultichainSpokeConnector is SpokeConnector, BaseMultichain {\\n  // ============ Constructor ============\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    uint256 _processGas,\\n    uint256 _reserveGas,\\n    uint256 _delayBlocks,\\n    address _merkle,\\n    address _watcherManager,\\n    uint256 _mirrorChainId,\\n    uint256 _gasCap\\n  )\\n    SpokeConnector(\\n      _domain,\\n      _mirrorDomain,\\n      _amb,\\n      _rootManager,\\n      _mirrorConnector,\\n      _processGas,\\n      _reserveGas,\\n      _delayBlocks,\\n      _merkle,\\n      _watcherManager\\n    )\\n    BaseMultichain(_amb, _mirrorChainId, _gasCap)\\n  {}\\n\\n  // ============ Admin fns ============\\n\\n  /**\\n   * @notice Should not be able to renounce ownership\\n   */\\n  function renounceOwnership() public virtual override(SpokeConnector, ProposedOwnable) onlyOwner {}\\n\\n  // ============ Private fns ============\\n  /**\\n   * @dev Handles an incoming `aggregateRoot`\\n   * NOTE: Could store latest root sent and prove aggregate root\\n   */\\n  function _processMessage(bytes memory _data) internal override(Connector, BaseMultichain) {\\n    // enforce this came from connector on l1\\n    require(_verifySender(mirrorConnector), \\\"!mirrorConnector\\\");\\n    // sanity check: data length\\n    require(_data.length == 32, \\\"!length\\\");\\n    // set the aggregate root for BSC + access control\\n    receiveAggregateRoot(bytes32(_data));\\n  }\\n\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\\n    _sendMessage(AMB, mirrorConnector, _data, _encodedData);\\n  }\\n\\n  function _verifySender(address _expected) internal view override returns (bool) {\\n    return _verifySender(AMB, _expected);\\n  }\\n}\\n\",\"keccak256\":\"0x72a76febe390e686ce1432923b3e7df6621f727da9cf458e69af1443216eebb2\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/ambs/Multichain.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @dev interface to interact with multicall (prev anyswap) anycall proxy\\n *     see https://github.com/anyswap/multichain-smart-contracts/blob/main/contracts/anycall/AnyswapV6CallProxy.sol\\n */\\ninterface Multichain {\\n  function anyCall(\\n    address _to,\\n    bytes calldata _data,\\n    address _fallback,\\n    uint256 _toChainID,\\n    uint256 _flags\\n  ) external payable;\\n\\n  function context()\\n    external\\n    view\\n    returns (\\n      address from,\\n      uint256 fromChainID,\\n      uint256 nonce\\n    );\\n\\n  function executor() external view returns (address executor);\\n\\n  function calcSrcFees(\\n    string calldata _appID,\\n    uint256 _toChainID,\\n    uint256 _dataLength\\n  ) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xdb3f6c60f9b28aec1a7d5a05378f7eb7783b35cf8bab2a72bd96040249131ef7\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/MerkleLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MerkleLib\\n * @author Illusory Systems Inc.\\n * @notice An incremental merkle tree modeled on the eth2 deposit contract.\\n **/\\nlibrary MerkleLib {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleLib__insert_treeIsFull();\\n\\n  // ============ Constants =============\\n\\n  uint256 internal constant TREE_DEPTH = 32;\\n  uint256 internal constant MAX_LEAVES = 2**TREE_DEPTH - 1;\\n\\n  /**\\n   * @dev Z_i represent the hash values at different heights for a binary tree with leaf values equal to `0`.\\n   * (e.g. Z_1 is the keccak256 hash of (0x0, 0x0), Z_2 is the keccak256 hash of (Z_1, Z_1), etc...)\\n   * Z_0 is the bottom of the 33-layer tree, Z_32 is the top (i.e. root).\\n   * Used to shortcut calculation in root calculation methods below.\\n   */\\n  bytes32 internal constant Z_0 = hex\\\"0000000000000000000000000000000000000000000000000000000000000000\\\";\\n  bytes32 internal constant Z_1 = hex\\\"ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5\\\";\\n  bytes32 internal constant Z_2 = hex\\\"b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30\\\";\\n  bytes32 internal constant Z_3 = hex\\\"21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85\\\";\\n  bytes32 internal constant Z_4 = hex\\\"e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344\\\";\\n  bytes32 internal constant Z_5 = hex\\\"0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d\\\";\\n  bytes32 internal constant Z_6 = hex\\\"887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968\\\";\\n  bytes32 internal constant Z_7 = hex\\\"ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83\\\";\\n  bytes32 internal constant Z_8 = hex\\\"9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af\\\";\\n  bytes32 internal constant Z_9 = hex\\\"cefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0\\\";\\n  bytes32 internal constant Z_10 = hex\\\"f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5\\\";\\n  bytes32 internal constant Z_11 = hex\\\"f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892\\\";\\n  bytes32 internal constant Z_12 = hex\\\"3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c\\\";\\n  bytes32 internal constant Z_13 = hex\\\"c1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb\\\";\\n  bytes32 internal constant Z_14 = hex\\\"5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc\\\";\\n  bytes32 internal constant Z_15 = hex\\\"da7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2\\\";\\n  bytes32 internal constant Z_16 = hex\\\"2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f\\\";\\n  bytes32 internal constant Z_17 = hex\\\"e1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a\\\";\\n  bytes32 internal constant Z_18 = hex\\\"5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0\\\";\\n  bytes32 internal constant Z_19 = hex\\\"b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0\\\";\\n  bytes32 internal constant Z_20 = hex\\\"c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2\\\";\\n  bytes32 internal constant Z_21 = hex\\\"f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9\\\";\\n  bytes32 internal constant Z_22 = hex\\\"5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377\\\";\\n  bytes32 internal constant Z_23 = hex\\\"4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652\\\";\\n  bytes32 internal constant Z_24 = hex\\\"cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef\\\";\\n  bytes32 internal constant Z_25 = hex\\\"0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d\\\";\\n  bytes32 internal constant Z_26 = hex\\\"b8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0\\\";\\n  bytes32 internal constant Z_27 = hex\\\"838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e\\\";\\n  bytes32 internal constant Z_28 = hex\\\"662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e\\\";\\n  bytes32 internal constant Z_29 = hex\\\"388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322\\\";\\n  bytes32 internal constant Z_30 = hex\\\"93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735\\\";\\n  bytes32 internal constant Z_31 = hex\\\"8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9\\\";\\n  bytes32 internal constant Z_32 = hex\\\"27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757\\\";\\n\\n  // ============= Structs ==============\\n\\n  /**\\n   * @notice Struct representing incremental merkle tree. Contains current\\n   * branch and the number of inserted leaves in the tree.\\n   **/\\n  struct Tree {\\n    bytes32[TREE_DEPTH] branch;\\n    uint256 count;\\n  }\\n\\n  // ========= Write Methods =========\\n\\n  /**\\n   * @notice Inserts a given node (leaf) into merkle tree. Operates on an in-memory tree and\\n   * returns an updated version of that tree.\\n   * @dev Reverts if the tree is already full.\\n   * @param node Element to insert into tree.\\n   * @return Tree Updated tree.\\n   **/\\n  function insert(Tree memory tree, bytes32 node) internal pure returns (Tree memory) {\\n    // Update tree.count to increase the current count by 1 since we'll be including a new node.\\n    uint256 size = ++tree.count;\\n    if (size > MAX_LEAVES) revert MerkleLib__insert_treeIsFull();\\n\\n    // Loop starting at 0, ending when we've finished inserting the node (i.e. hashing it) into\\n    // the active branch. Each loop we cut size in half, hashing the inserted node up the active\\n    // branch along the way.\\n    for (uint256 i; i < TREE_DEPTH; ) {\\n      // Check if the current size is odd; if so, we set this index in the branch to be the node.\\n      if ((size & 1) == 1) {\\n        // If i > 0, then this node will be a hash of the original node with every layer up\\n        // until layer `i`.\\n        tree.branch[i] = node;\\n        return tree;\\n      }\\n      // If the size is not yet odd, we hash the current index in the tree branch with the node.\\n      node = keccak256(abi.encodePacked(tree.branch[i], node));\\n      size >>= 1; // Cut size in half (statement equivalent to: `size /= 2`).\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // As the loop should always end prematurely with the `return` statement, this code should\\n    // be unreachable. We revert here just to be safe.\\n    revert MerkleLib__insert_treeIsFull();\\n  }\\n\\n  // ========= Read Methods =========\\n\\n  /**\\n   * @notice Calculates and returns tree's current root.\\n   * @return _current bytes32 root.\\n   **/\\n  function root(Tree storage tree) internal view returns (bytes32 _current) {\\n    uint256 _index = tree.count;\\n\\n    if (_index == 0) {\\n      return Z_32;\\n    }\\n\\n    uint256 i;\\n    assembly {\\n      let TREE_SLOT := tree.slot\\n\\n      for {\\n\\n      } true {\\n\\n      } {\\n        for {\\n\\n        } true {\\n\\n        } {\\n          if and(_index, 1) {\\n            mstore(0, sload(TREE_SLOT))\\n            mstore(0x20, Z_0)\\n            _current := keccak256(0, 0x40)\\n            break\\n          }\\n\\n          if and(_index, shl(1, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 1)))\\n            mstore(0x20, Z_1)\\n            _current := keccak256(0, 0x40)\\n            i := 1\\n            break\\n          }\\n\\n          if and(_index, shl(2, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 2)))\\n            mstore(0x20, Z_2)\\n            _current := keccak256(0, 0x40)\\n            i := 2\\n            break\\n          }\\n\\n          if and(_index, shl(3, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 3)))\\n            mstore(0x20, Z_3)\\n            _current := keccak256(0, 0x40)\\n            i := 3\\n            break\\n          }\\n\\n          if and(_index, shl(4, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 4)))\\n            mstore(0x20, Z_4)\\n            _current := keccak256(0, 0x40)\\n            i := 4\\n            break\\n          }\\n\\n          if and(_index, shl(5, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 5)))\\n            mstore(0x20, Z_5)\\n            _current := keccak256(0, 0x40)\\n            i := 5\\n            break\\n          }\\n\\n          if and(_index, shl(6, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 6)))\\n            mstore(0x20, Z_6)\\n            _current := keccak256(0, 0x40)\\n            i := 6\\n            break\\n          }\\n\\n          if and(_index, shl(7, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 7)))\\n            mstore(0x20, Z_7)\\n            _current := keccak256(0, 0x40)\\n            i := 7\\n            break\\n          }\\n\\n          if and(_index, shl(8, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 8)))\\n            mstore(0x20, Z_8)\\n            _current := keccak256(0, 0x40)\\n            i := 8\\n            break\\n          }\\n\\n          if and(_index, shl(9, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 9)))\\n            mstore(0x20, Z_9)\\n            _current := keccak256(0, 0x40)\\n            i := 9\\n            break\\n          }\\n\\n          if and(_index, shl(10, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 10)))\\n            mstore(0x20, Z_10)\\n            _current := keccak256(0, 0x40)\\n            i := 10\\n            break\\n          }\\n\\n          if and(_index, shl(11, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 11)))\\n            mstore(0x20, Z_11)\\n            _current := keccak256(0, 0x40)\\n            i := 11\\n            break\\n          }\\n\\n          if and(_index, shl(12, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 12)))\\n            mstore(0x20, Z_12)\\n            _current := keccak256(0, 0x40)\\n            i := 12\\n            break\\n          }\\n\\n          if and(_index, shl(13, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 13)))\\n            mstore(0x20, Z_13)\\n            _current := keccak256(0, 0x40)\\n            i := 13\\n            break\\n          }\\n\\n          if and(_index, shl(14, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 14)))\\n            mstore(0x20, Z_14)\\n            _current := keccak256(0, 0x40)\\n            i := 14\\n            break\\n          }\\n\\n          if and(_index, shl(15, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 15)))\\n            mstore(0x20, Z_15)\\n            _current := keccak256(0, 0x40)\\n            i := 15\\n            break\\n          }\\n\\n          if and(_index, shl(16, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 16)))\\n            mstore(0x20, Z_16)\\n            _current := keccak256(0, 0x40)\\n            i := 16\\n            break\\n          }\\n\\n          if and(_index, shl(17, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 17)))\\n            mstore(0x20, Z_17)\\n            _current := keccak256(0, 0x40)\\n            i := 17\\n            break\\n          }\\n\\n          if and(_index, shl(18, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 18)))\\n            mstore(0x20, Z_18)\\n            _current := keccak256(0, 0x40)\\n            i := 18\\n            break\\n          }\\n\\n          if and(_index, shl(19, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 19)))\\n            mstore(0x20, Z_19)\\n            _current := keccak256(0, 0x40)\\n            i := 19\\n            break\\n          }\\n\\n          if and(_index, shl(20, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 20)))\\n            mstore(0x20, Z_20)\\n            _current := keccak256(0, 0x40)\\n            i := 20\\n            break\\n          }\\n\\n          if and(_index, shl(21, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 21)))\\n            mstore(0x20, Z_21)\\n            _current := keccak256(0, 0x40)\\n            i := 21\\n            break\\n          }\\n\\n          if and(_index, shl(22, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 22)))\\n            mstore(0x20, Z_22)\\n            _current := keccak256(0, 0x40)\\n            i := 22\\n            break\\n          }\\n\\n          if and(_index, shl(23, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 23)))\\n            mstore(0x20, Z_23)\\n            _current := keccak256(0, 0x40)\\n            i := 23\\n            break\\n          }\\n\\n          if and(_index, shl(24, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 24)))\\n            mstore(0x20, Z_24)\\n            _current := keccak256(0, 0x40)\\n            i := 24\\n            break\\n          }\\n\\n          if and(_index, shl(25, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 25)))\\n            mstore(0x20, Z_25)\\n            _current := keccak256(0, 0x40)\\n            i := 25\\n            break\\n          }\\n\\n          if and(_index, shl(26, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 26)))\\n            mstore(0x20, Z_26)\\n            _current := keccak256(0, 0x40)\\n            i := 26\\n            break\\n          }\\n\\n          if and(_index, shl(27, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 27)))\\n            mstore(0x20, Z_27)\\n            _current := keccak256(0, 0x40)\\n            i := 27\\n            break\\n          }\\n\\n          if and(_index, shl(28, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 28)))\\n            mstore(0x20, Z_28)\\n            _current := keccak256(0, 0x40)\\n            i := 28\\n            break\\n          }\\n\\n          if and(_index, shl(29, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 29)))\\n            mstore(0x20, Z_29)\\n            _current := keccak256(0, 0x40)\\n            i := 29\\n            break\\n          }\\n\\n          if and(_index, shl(30, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 30)))\\n            mstore(0x20, Z_30)\\n            _current := keccak256(0, 0x40)\\n            i := 30\\n            break\\n          }\\n\\n          if and(_index, shl(31, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 31)))\\n            mstore(0x20, Z_31)\\n            _current := keccak256(0, 0x40)\\n            i := 31\\n            break\\n          }\\n\\n          _current := Z_32\\n          i := 32\\n          break\\n        }\\n\\n        if gt(i, 30) {\\n          break\\n        }\\n\\n        {\\n          if lt(i, 1) {\\n            switch and(_index, shl(1, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_1)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 1)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 2) {\\n            switch and(_index, shl(2, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_2)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 2)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 3) {\\n            switch and(_index, shl(3, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_3)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 3)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 4) {\\n            switch and(_index, shl(4, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_4)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 4)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 5) {\\n            switch and(_index, shl(5, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_5)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 5)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 6) {\\n            switch and(_index, shl(6, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_6)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 6)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 7) {\\n            switch and(_index, shl(7, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_7)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 7)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 8) {\\n            switch and(_index, shl(8, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_8)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 8)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 9) {\\n            switch and(_index, shl(9, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_9)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 9)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 10) {\\n            switch and(_index, shl(10, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_10)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 10)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 11) {\\n            switch and(_index, shl(11, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_11)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 11)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 12) {\\n            switch and(_index, shl(12, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_12)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 12)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 13) {\\n            switch and(_index, shl(13, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_13)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 13)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 14) {\\n            switch and(_index, shl(14, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_14)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 14)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 15) {\\n            switch and(_index, shl(15, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_15)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 15)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 16) {\\n            switch and(_index, shl(16, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_16)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 16)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 17) {\\n            switch and(_index, shl(17, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_17)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 17)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 18) {\\n            switch and(_index, shl(18, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_18)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 18)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 19) {\\n            switch and(_index, shl(19, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_19)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 19)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 20) {\\n            switch and(_index, shl(20, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_20)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 20)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 21) {\\n            switch and(_index, shl(21, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_21)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 21)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 22) {\\n            switch and(_index, shl(22, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_22)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 22)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 23) {\\n            switch and(_index, shl(23, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_23)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 23)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 24) {\\n            switch and(_index, shl(24, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_24)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 24)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 25) {\\n            switch and(_index, shl(25, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_25)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 25)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 26) {\\n            switch and(_index, shl(26, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_26)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 26)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 27) {\\n            switch and(_index, shl(27, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_27)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 27)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 28) {\\n            switch and(_index, shl(28, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_28)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 28)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 29) {\\n            switch and(_index, shl(29, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_29)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 29)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 30) {\\n            switch and(_index, shl(30, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_30)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 30)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 31) {\\n            switch and(_index, shl(31, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_31)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 31)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n        }\\n\\n        break\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the merkle root for the given leaf `_item`,\\n   * a merkle branch, and the index of `_item` in the tree.\\n   * @param _item Merkle leaf\\n   * @param _branch Merkle proof\\n   * @param _index Index of `_item` in tree\\n   * @return _current Calculated merkle root\\n   **/\\n  function branchRoot(\\n    bytes32 _item,\\n    bytes32[TREE_DEPTH] memory _branch,\\n    uint256 _index\\n  ) internal pure returns (bytes32 _current) {\\n    assembly {\\n      _current := _item\\n      let BRANCH_DATA_OFFSET := _branch\\n      let f\\n\\n      f := shl(5, and(_index, 1))\\n      mstore(f, _current)\\n      mstore(sub(0x20, f), mload(BRANCH_DATA_OFFSET))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(1, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 1))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(2, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 2))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(3, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 3))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(4, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 4))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(5, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 5))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(6, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 6))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(7, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 7))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(8, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 8))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(9, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 9))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(10, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 10))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(11, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 11))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(12, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 12))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(13, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 13))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(14, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 14))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(15, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 15))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(16, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 16))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(17, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 17))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(18, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 18))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(19, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 19))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(20, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 20))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(21, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 21))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(22, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 22))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(23, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 23))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(24, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 24))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(25, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 25))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(26, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 26))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(27, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 27))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(28, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 28))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(29, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 29))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(30, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 30))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(31, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 31))))\\n      _current := keccak256(0, 0x40)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08c791dbeef6253813d74e2145183501fe7631c13d5ac9d768036f47b66b693e\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/Message.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\n/**\\n * @title Message Library\\n * @author Illusory Systems Inc.\\n * @notice Library for formatted messages used by Home and Replica.\\n **/\\nlibrary Message {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // Number of bytes in formatted message before `body` field\\n  uint256 internal constant PREFIX_LENGTH = 76;\\n\\n  /**\\n   * @notice Returns formatted (packed) message with provided fields\\n   * @param _originDomain Domain of home chain\\n   * @param _sender Address of sender as bytes32\\n   * @param _nonce Destination-specific nonce\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipient Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes of message body\\n   * @return Formatted message\\n   **/\\n  function formatMessage(\\n    uint32 _originDomain,\\n    bytes32 _sender,\\n    uint32 _nonce,\\n    uint32 _destinationDomain,\\n    bytes32 _recipient,\\n    bytes memory _messageBody\\n  ) internal pure returns (bytes memory) {\\n    return abi.encodePacked(_originDomain, _sender, _nonce, _destinationDomain, _recipient, _messageBody);\\n  }\\n\\n  /**\\n   * @notice Returns leaf of formatted message with provided fields.\\n   * @param _origin Domain of home chain\\n   * @param _sender Address of sender as bytes32\\n   * @param _nonce Destination-specific nonce number\\n   * @param _destination Domain of destination chain\\n   * @param _recipient Address of recipient on destination chain as bytes32\\n   * @param _body Raw bytes of message body\\n   * @return Leaf (hash) of formatted message\\n   **/\\n  function messageHash(\\n    uint32 _origin,\\n    bytes32 _sender,\\n    uint32 _nonce,\\n    uint32 _destination,\\n    bytes32 _recipient,\\n    bytes memory _body\\n  ) internal pure returns (bytes32) {\\n    return keccak256(formatMessage(_origin, _sender, _nonce, _destination, _recipient, _body));\\n  }\\n\\n  /// @notice Returns message's origin field\\n  function origin(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(0, 4));\\n  }\\n\\n  /// @notice Returns message's sender field\\n  function sender(bytes29 _message) internal pure returns (bytes32) {\\n    return _message.index(4, 32);\\n  }\\n\\n  /// @notice Returns message's nonce field\\n  function nonce(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(36, 4));\\n  }\\n\\n  /// @notice Returns message's destination field\\n  function destination(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(40, 4));\\n  }\\n\\n  /// @notice Returns message's recipient field as bytes32\\n  function recipient(bytes29 _message) internal pure returns (bytes32) {\\n    return _message.index(44, 32);\\n  }\\n\\n  /// @notice Returns message's recipient field as an address\\n  function recipientAddress(bytes29 _message) internal pure returns (address) {\\n    return TypeCasts.bytes32ToAddress(recipient(_message));\\n  }\\n\\n  /// @notice Returns message's body field as bytes29 (refer to TypedMemView library for details on bytes29 type)\\n  function body(bytes29 _message) internal pure returns (bytes29) {\\n    return _message.slice(PREFIX_LENGTH, _message.len() - PREFIX_LENGTH, 0);\\n  }\\n\\n  function leaf(bytes29 _message) internal pure returns (bytes32) {\\n    uint256 loc = _message.loc();\\n    uint256 len = _message.len();\\n    /*\\n    prev:\\n    return\\n      messageHash(\\n        origin(_message),\\n        sender(_message),\\n        nonce(_message),\\n        destination(_message),\\n        recipient(_message),\\n        TypedMemView.clone(body(_message))\\n      );\\n\\n      below added for gas optimization\\n     */\\n    bytes32 hash;\\n    assembly {\\n      hash := keccak256(loc, len)\\n    }\\n    return hash;\\n  }\\n}\\n\",\"keccak256\":\"0xa4212f7b88146588e8e0e24cddbc5dae6269618a722b34f00ea322b33fa1f36a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/RateLimited.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice An abstract contract intended to manage the rate limiting aspect of spoke\\n * connector messaging. Rate limiting the number of messages we can send over a span of\\n * blocks is used to mitigate key DoSing vectors for transporting messages between chains.\\n */\\nabstract contract RateLimited {\\n  // ========== Custom Errors ===========\\n\\n  error RateLimited__rateLimited_messageSendRateExceeded();\\n\\n  // ============ Events ============\\n\\n  event SendRateLimitUpdated(address updater, uint256 newRateLimit);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The number of blocks required between message sending events.\\n   * @dev NOTE: This value is 0 by default, meaning that rate limiting functionality\\n   * will naturally be disabled by default.\\n   */\\n  uint256 public rateLimitBlocks;\\n\\n  /**\\n   * @notice Tracks the last block that we sent a message.\\n   */\\n  uint256 public lastSentBlock;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Checks to see if we can send this block, given the current rate limit\\n   * setting and the last block we sent a message. If rate limit has been surpassed,\\n   * we update the `lastSentBlock` to be the current block.\\n   */\\n  modifier rateLimited() {\\n    // Check to make sure we have surpassed the number of rate limit blocks.\\n    if (lastSentBlock + rateLimitBlocks > block.number) {\\n      revert RateLimited__rateLimited_messageSendRateExceeded();\\n    }\\n    // Update the last block we sent a message to be the current one.\\n    lastSentBlock = block.number;\\n    _;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Update the current rate limit to a new value.\\n   */\\n  function _setRateLimitBlocks(uint256 _newRateLimit) internal {\\n    require(_newRateLimit != rateLimitBlocks, \\\"!new rate limit\\\");\\n    // NOTE: Setting the block rate limit interval to 0 will result in rate limiting\\n    // being disabled.\\n    rateLimitBlocks = _newRateLimit;\\n    emit SendRateLimitUpdated(msg.sender, _newRateLimit);\\n  }\\n}\\n\",\"keccak256\":\"0xcc185ae966c87441490aaa8c0779a7b3085961a7b8512d5973f1c34f641eeae3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/ProposedOwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {Initializable} from \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"./ProposedOwnable.sol\\\";\\n\\nabstract contract ProposedOwnableUpgradeable is Initializable, ProposedOwnable {\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial\\n   */\\n  function __ProposedOwnable_init() internal onlyInitializing {\\n    __ProposedOwnable_init_unchained();\\n  }\\n\\n  function __ProposedOwnable_init_unchained() internal onlyInitializing {\\n    _setOwner(msg.sender);\\n  }\\n\\n  /**\\n   * @dev This empty reserved space is put in place to allow future versions to add new\\n   * variables without shifting down storage in the inheritance chain.\\n   * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n   */\\n  uint256[47] private __GAP;\\n}\\n\",\"keccak256\":\"0x2b064b03a25915e93749905ef3aae516ffaac86b8ba9f126b614425b623bf477\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/ExcessivelySafeCall.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// Taken from: https://github.com/nomad-xyz/ExcessivelySafeCall\\n// NOTE: There is a difference between npm latest and github main versions\\n// where the latest github version allows you to specify an ether value.\\n\\nlibrary ExcessivelySafeCall {\\n  uint256 constant LOW_28_MASK = 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _value The value in wei to send to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeCall(\\n    address _target,\\n    uint256 _gas,\\n    uint256 _value,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := call(\\n        _gas, // gas\\n        _target, // recipient\\n        _value, // ether value\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeStaticCall(\\n    address _target,\\n    uint256 _gas,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal view returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := staticcall(\\n        _gas, // gas\\n        _target, // recipient\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /**\\n   * @notice Swaps function selectors in encoded contract calls\\n   * @dev Allows reuse of encoded calldata for functions with identical\\n   * argument types but different names. It simply swaps out the first 4 bytes\\n   * for the new selector. This function modifies memory in place, and should\\n   * only be used with caution.\\n   * @param _newSelector The new 4-byte selector\\n   * @param _buf The encoded contract args\\n   */\\n  function swapSelector(bytes4 _newSelector, bytes memory _buf) internal pure {\\n    require(_buf.length > 4 - 1);\\n    uint256 _mask = LOW_28_MASK;\\n    assembly {\\n      // load the first word of\\n      let _word := mload(add(_buf, 0x20))\\n      // mask out the top 4 bytes\\n      // /x\\n      _word := and(_word, _mask)\\n      _word := or(_newSelector, _word)\\n      mstore(add(_buf, 0x20), _word)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x5472b56fa56886620b1a8e4e2f12f8925500bb237a4dad38651c79db69f0724c\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol:MultichainSpokeConnector","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol:MultichainSpokeConnector","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol:MultichainSpokeConnector","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39051,"contract":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol:MultichainSpokeConnector","label":"mirrorConnector","offset":0,"slot":"3","type":"t_address"},{"astId":10590,"contract":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol:MultichainSpokeConnector","label":"_paused","offset":20,"slot":"3","type":"t_bool"},{"astId":38824,"contract":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol:MultichainSpokeConnector","label":"watcherManager","offset":0,"slot":"4","type":"t_contract(WatcherManager)39005"},{"astId":49639,"contract":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol:MultichainSpokeConnector","label":"rateLimitBlocks","offset":0,"slot":"5","type":"t_uint256"},{"astId":49642,"contract":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol:MultichainSpokeConnector","label":"lastSentBlock","offset":0,"slot":"6","type":"t_uint256"},{"astId":10691,"contract":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol:MultichainSpokeConnector","label":"_status","offset":0,"slot":"7","type":"t_uint256"},{"astId":39546,"contract":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol:MultichainSpokeConnector","label":"delayBlocks","offset":0,"slot":"8","type":"t_uint256"},{"astId":39561,"contract":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol:MultichainSpokeConnector","label":"pendingAggregateRoots","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":39566,"contract":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol:MultichainSpokeConnector","label":"provenAggregateRoots","offset":0,"slot":"10","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39571,"contract":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol:MultichainSpokeConnector","label":"provenMessageRoots","offset":0,"slot":"11","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39576,"contract":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol:MultichainSpokeConnector","label":"sentMessageRoots","offset":0,"slot":"12","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39581,"contract":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol:MultichainSpokeConnector","label":"allowlistedSenders","offset":0,"slot":"13","type":"t_mapping(t_address,t_bool)"},{"astId":39586,"contract":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol:MultichainSpokeConnector","label":"nonces","offset":0,"slot":"14","type":"t_mapping(t_uint32,t_uint32)"},{"astId":39592,"contract":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol:MultichainSpokeConnector","label":"messages","offset":0,"slot":"15","type":"t_mapping(t_bytes32,t_enum(MessageStatus)39534)"},{"astId":39301,"contract":"contracts/messaging/connectors/multichain/MultichainSpokeConnector.sol:MultichainSpokeConnector","label":"gasCap","offset":0,"slot":"16","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(WatcherManager)39005":{"encoding":"inplace","label":"contract WatcherManager","numberOfBytes":"20"},"t_enum(MessageStatus)39534":{"encoding":"inplace","label":"enum SpokeConnector.MessageStatus","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(MessageStatus)39534)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum SpokeConnector.MessageStatus)","numberOfBytes":"32","value":"t_enum(MessageStatus)39534"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_uint32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => uint32)","numberOfBytes":"32","value":"t_uint32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"}}},"userdoc":{"events":{"FundsWithdrawn(address,uint256)":{"notice":"Emitted when funds are withdrawn by the admin"},"GasCapUpdated(uint256,uint256)":{"notice":"Emitted when admin updates the gas cap"},"MessageProcessed(bytes,address)":{"notice":"Emitted whenever a message is successfully received over an AMB"},"MessageSent(bytes,bytes,address)":{"notice":"Emitted whenever a message is successfully sent over an AMB"},"WatcherManagerChanged(address)":{"notice":"Emitted when the manager address changes"}},"kind":"user","methods":{"AMB()":{"notice":"Address of the AMB on this domain."},"DOMAIN()":{"notice":"The domain of this Messaging (i.e. Connector) contract."},"MERKLE()":{"notice":"MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root will be sent crosschain to the hub for aggregation and redistribution."},"MIRROR_DOMAIN()":{"notice":"The domain of the corresponding messaging (i.e. Connector) contract."},"PROCESS_GAS()":{"notice":"Minimum gas for processing a received message (reserved for handle)"},"RESERVE_GAS()":{"notice":"Reserved gas (to ensure tx completes in case message processing runs out)"},"ROOT_MANAGER()":{"notice":"RootManager contract address."},"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"addSender(address)":{"notice":"Adds a sender to the allowlist."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"delayBlocks()":{"notice":"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary."},"dispatch(uint32,bytes32,bytes)":{"notice":"This function adds transfers to the outbound transfer merkle tree."},"home()":{"notice":"Get the local inbox contract from the xAppConnectionManager"},"isReplica(address)":{"notice":"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager"},"lastSentBlock()":{"notice":"Tracks the last block that we sent a message."},"localDomain()":{"notice":"This provides the implementation for what is defined in the ConnectorManager to avoid storing the domain redundantly"},"messages(bytes32)":{"notice":"Mapping of message leaves to MessageStatus, keyed on leaf."},"mirrorConnector()":{"notice":"Connector on L2 for L1 connectors, and vice versa."},"nonces(uint32)":{"notice":"domain => next available nonce for the domain."},"outboundRoot()":{"notice":"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)"},"owner()":{"notice":"Returns the address of the current owner."},"pause()":{"notice":"Watchers can pause contracts if fraud is detected"},"pendingAggregateRoots(bytes32)":{"notice":"This will hold the commit block for incoming aggregateRoots from the hub chain. Once they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can be used for proving inclusion of crosschain messages."},"processMessage(bytes)":{"notice":"Processes a message received by an AMB"},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":{"notice":"Must be able to call the `handle` function on the BridgeRouter contract. This is called on the destination domain to handle incoming messages. Proving: Calculates the expected inbound root from an origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this calculated inbound root is included in the current aggregateRoot, given its index in the aggregator tree and the proof of inclusion. Processing: After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for execution."},"provenAggregateRoots(bytes32)":{"notice":"This tracks the roots of the aggregate tree containing outbound roots from all other supported domains. The current version is the one that is known to be past the delayBlocks time period."},"provenMessageRoots(bytes32)":{"notice":"This tracks whether the root has been proven to exist within the given aggregate root."},"rateLimitBlocks()":{"notice":"The number of blocks required between message sending events."},"removePendingAggregateRoot(bytes32)":{"notice":"Manually remove a pending aggregateRoot by owner if the contract is paused."},"removeSender(address)":{"notice":"Removes a sender from the allowlist."},"renounceOwnership()":{"notice":"Should not be able to renounce ownership"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"send(bytes)":{"notice":"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)"},"sentMessageRoots(bytes32)":{"notice":"This mapping records all message roots that have already been sent in order to prevent redundant message roots from being sent to hub."},"setDelayBlocks(uint256)":{"notice":"Set the `delayBlocks`, the period in blocks over which an incoming message is verified."},"setMirrorConnector(address)":{"notice":"Sets the address of the l2Connector for this domain"},"setRateLimitBlocks(uint256)":{"notice":"Set the rate limit (number of blocks) at which we can send messages from this contract to the hub chain using the `send` method."},"setWatcherManager(address)":{"notice":"Owner can enroll a watcher (abilities are defined by inheriting contracts)"},"unpause()":{"notice":"Owner can unpause contracts if fraud is detected by watchers"},"verifySender(address)":{"notice":"Checks the cross domain sender for a given address"},"watcherManager()":{"notice":"The `WatcherManager` contract governs the watcher allowlist."},"withdrawFunds(address)":{"notice":"This function should be callable by owner, and send funds trapped on a connector to the provided recipient."}},"version":1}}},"contracts/messaging/connectors/optimism/BaseOptimism.sol":{"BaseOptimism":{"abi":[{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"GasCapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gasCap","type":"uint256"}],"name":"setGasCap","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"acceptProposedOwner()":"c5b350df","delay()":"6a42b8f8","owner()":"8da5cb5b","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","renounceOwnership()":"715018a6","renounced()":"d232c220","setGasCap(uint256)":"7850b020"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_previous\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"GasCapUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"}],\"name\":\"setGasCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"GasCapUpdated(uint256,uint256)\":{\"notice\":\"Emitted when admin updates the gas cap\"}},\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/optimism/BaseOptimism.sol\":\"BaseOptimism\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/GasCap.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\n\\nabstract contract GasCap is ProposedOwnable {\\n  // ============ Storage ============\\n  /**\\n   * @notice The gnosis amb requires destination gas to be specified on the origin.\\n   * The gas used will be passed in by the relayer to allow for real-time estimates,\\n   * but will be capped at the admin-set cap.\\n   */\\n  uint256 gasCap;\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted when admin updates the gas cap\\n   * @param _previous The starting value\\n   * @param _updated The final value\\n   */\\n  event GasCapUpdated(uint256 _previous, uint256 _updated);\\n\\n  // ============ Constructor ============\\n  constructor(uint256 _gasCap) {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Admin Fns ============\\n  function setGasCap(uint256 _gasCap) public onlyOwner {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Internal Fns ============\\n\\n  /**\\n   * @notice Used (by admin) to update the gas cap\\n   * @param _gasCap The new value\\n   */\\n  function _setGasCap(uint256 _gasCap) internal {\\n    emit GasCapUpdated(gasCap, _gasCap);\\n    gasCap = _gasCap;\\n  }\\n\\n  /**\\n   * @notice Used to get the gas to use. Will be the original value IFF it\\n   * is less than the cap\\n   * @param _gas The proposed gas value\\n   */\\n  function _getGas(uint256 _gas) internal view returns (uint256) {\\n    if (_gas > gasCap) {\\n      _gas = gasCap;\\n    }\\n    return _gas;\\n  }\\n}\\n\",\"keccak256\":\"0xb8b52a3372f08490c918d1f490ad80764d54bd62d1638e4d17a5b552efe6587d\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/BaseOptimism.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {OptimismAmb} from \\\"../../interfaces/ambs/optimism/OptimismAmb.sol\\\";\\n\\nimport {GasCap} from \\\"../GasCap.sol\\\";\\n\\nabstract contract BaseOptimism is GasCap {\\n  // ============ Constructor ============\\n  constructor(uint256 _gasCap) GasCap(_gasCap) {}\\n\\n  // ============ Override Fns ============\\n  function _verifySender(address _amb, address _expected) internal view returns (bool) {\\n    require(msg.sender == _amb, \\\"!bridge\\\");\\n    return OptimismAmb(_amb).xDomainMessageSender() == _expected;\\n  }\\n\\n  /**\\n   * @notice Using Optimism AMB, the gas is provided to `sendMessage` as an encoded uint\\n   */\\n  function _getGasFromEncoded(bytes memory _encodedData) internal view returns (uint256 _gas) {\\n    // Should include gas info in specialized calldata\\n    require(_encodedData.length == 32, \\\"!data length\\\");\\n\\n    // Get the gas, if it is more than the cap use the cap\\n    _gas = _getGas(abi.decode(_encodedData, (uint256)));\\n  }\\n}\\n\",\"keccak256\":\"0x87034df88ba7e4d767c451ff2d0180f8eee25f502682153af7a018e280eab8e3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/ambs/optimism/OptimismAmb.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @dev The optimism bridge shares both of these functions, but it is important\\n * to note that when going from L2 -> L1, the message cannot be processed by the\\n * AMB until the challenge period elapses.\\n *\\n * HOWEVER, before the challenge elapses, you can read the state of the L2 as it is\\n * placed on mainnet. By processing data from the L2 state, we are able to \\\"circumvent\\\"\\n * this delay to a reasonable degree.\\n *\\n * This means that for messages going L1 -> L2, you can call \\\"processMessage\\\" and expect\\n * the call to be executed to pass up the aggregate root. When going from L2 -> L1, you\\n * must read the root from the L2 state\\n *\\n * L2 messenger: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2CrossDomainMessenger.sol\\n * L1 messenger: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol\\n */\\ninterface OptimismAmb {\\n  function sendMessage(\\n    address _target,\\n    bytes memory _message,\\n    uint32 _gasLimit\\n  ) external;\\n\\n  function xDomainMessageSender() external view returns (address);\\n}\\n\",\"keccak256\":\"0xbce6aaa568441bd8ad60f2b5f1ad8d9e3c61cbc91ce4405d7a390980920f66f3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/optimism/BaseOptimism.sol:BaseOptimism","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/optimism/BaseOptimism.sol:BaseOptimism","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/optimism/BaseOptimism.sol:BaseOptimism","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39301,"contract":"contracts/messaging/connectors/optimism/BaseOptimism.sol:BaseOptimism","label":"gasCap","offset":0,"slot":"3","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"GasCapUpdated(uint256,uint256)":{"notice":"Emitted when admin updates the gas cap"}},"kind":"user","methods":{"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"owner()":{"notice":"Returns the address of the current owner."},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"}},"version":1}}},"contracts/messaging/connectors/optimism/OptimismHubConnector.sol":{"OptimismHubConnector":{"abi":[{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"uint32","name":"_mirrorDomain","type":"uint32"},{"internalType":"address","name":"_amb","type":"address"},{"internalType":"address","name":"_rootManager","type":"address"},{"internalType":"address","name":"_mirrorConnector","type":"address"},{"internalType":"address","name":"_stateCommitmentChain","type":"address"},{"internalType":"uint256","name":"_gasCap","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Connector__processMessage_notUsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"inputs":[],"name":"TypedMemView__index_indexMoreThan32Bytes","type":"error"},{"inputs":[{"internalType":"uint256","name":"loc","type":"uint256"},{"internalType":"uint256","name":"len","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"slice","type":"uint256"}],"name":"TypedMemView__index_overrun","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"GasCapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"encodedData","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"current","type":"address"}],"name":"MirrorConnectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"mirrorDomain","type":"uint32"},{"indexed":false,"internalType":"address","name":"amb","type":"address"},{"indexed":false,"internalType":"address","name":"rootManager","type":"address"},{"indexed":false,"internalType":"address","name":"mirrorConnector","type":"address"}],"name":"NewConnector","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"AMB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIRROR_DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mirrorConnector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"processMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"uint256","name":"_messageNonce","type":"uint256"},{"components":[{"internalType":"bytes32","name":"stateRoot","type":"bytes32"},{"components":[{"internalType":"uint256","name":"batchIndex","type":"uint256"},{"internalType":"bytes32","name":"batchRoot","type":"bytes32"},{"internalType":"uint256","name":"batchSize","type":"uint256"},{"internalType":"uint256","name":"prevTotalElements","type":"uint256"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct ChainBatchHeader","name":"stateRootBatchHeader","type":"tuple"},{"components":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bytes32[]","name":"siblings","type":"bytes32[]"}],"internalType":"struct ChainInclusionProof","name":"stateRootProof","type":"tuple"},{"internalType":"bytes","name":"stateTrieWitness","type":"bytes"},{"internalType":"bytes","name":"storageTrieWitness","type":"bytes"}],"internalType":"struct L2MessageInclusionProof","name":"_proof","type":"tuple"}],"name":"processMessageFromRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"processed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_encodedData","type":"bytes"}],"name":"sendMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gasCap","type":"uint256"}],"name":"setGasCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mirrorConnector","type":"address"}],"name":"setMirrorConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stateCommitmentChain","outputs":[{"internalType":"contract IStateCommitmentChain","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_expected","type":"address"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"processMessage(bytes)":{"details":"This is called by AMBs to process messages originating from mirror connector"},"processMessageFromRoot(address,address,bytes,uint256,(bytes32,(uint256,bytes32,uint256,uint256,bytes),(uint256,bytes32[]),bytes,bytes))":{"details":"modified from: https://github.com/ethereum-optimism/optimism/blob/9973c1da3211e094a180a8a96ba9f8bb1ab1b389/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol#L165"},"sendMessage(bytes,bytes)":{"details":"This is called by the root manager *only* on mainnet to propagate the aggregate root"}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_39152":{"entryPoint":null,"id":39152,"parameterSlots":5,"returnSlots":0},"@_39318":{"entryPoint":null,"id":39318,"parameterSlots":1,"returnSlots":0},"@_39396":{"entryPoint":null,"id":39396,"parameterSlots":5,"returnSlots":0},"@_42254":{"entryPoint":null,"id":42254,"parameterSlots":1,"returnSlots":0},"@_42384":{"entryPoint":null,"id":42384,"parameterSlots":7,"returnSlots":0},"@_setGasCap_39346":{"entryPoint":632,"id":39346,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":527,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":426,"id":49908,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":723,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_addresst_uint256_fromMemory":{"entryPoint":747,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_uint32_fromMemory":{"entryPoint":697,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2702:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"73:108:181","statements":[{"nodeType":"YulAssignment","src":"83:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"98:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"92:5:181"},"nodeType":"YulFunctionCall","src":"92:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"83:5:181"}]},{"body":{"nodeType":"YulBlock","src":"159:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"168:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"171:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"161:6:181"},"nodeType":"YulFunctionCall","src":"161:12:181"},"nodeType":"YulExpressionStatement","src":"161:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"127:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"138:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"145:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"134:3:181"},"nodeType":"YulFunctionCall","src":"134:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"124:2:181"},"nodeType":"YulFunctionCall","src":"124:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"117:6:181"},"nodeType":"YulFunctionCall","src":"117:41:181"},"nodeType":"YulIf","src":"114:61:181"}]},"name":"abi_decode_uint32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"52:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"63:5:181","type":""}],"src":"14:167:181"},{"body":{"nodeType":"YulBlock","src":"246:117:181","statements":[{"nodeType":"YulAssignment","src":"256:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"271:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"265:5:181"},"nodeType":"YulFunctionCall","src":"265:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"256:5:181"}]},{"body":{"nodeType":"YulBlock","src":"341:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"350:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"353:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"343:6:181"},"nodeType":"YulFunctionCall","src":"343:12:181"},"nodeType":"YulExpressionStatement","src":"343:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"300:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"311:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"326:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"331:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"322:3:181"},"nodeType":"YulFunctionCall","src":"322:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"335:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"318:3:181"},"nodeType":"YulFunctionCall","src":"318:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"307:3:181"},"nodeType":"YulFunctionCall","src":"307:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"297:2:181"},"nodeType":"YulFunctionCall","src":"297:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"290:6:181"},"nodeType":"YulFunctionCall","src":"290:50:181"},"nodeType":"YulIf","src":"287:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"225:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"236:5:181","type":""}],"src":"186:177:181"},{"body":{"nodeType":"YulBlock","src":"549:513:181","statements":[{"body":{"nodeType":"YulBlock","src":"596:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"605:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"608:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"598:6:181"},"nodeType":"YulFunctionCall","src":"598:12:181"},"nodeType":"YulExpressionStatement","src":"598:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"570:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"579:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"566:3:181"},"nodeType":"YulFunctionCall","src":"566:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"591:3:181","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"562:3:181"},"nodeType":"YulFunctionCall","src":"562:33:181"},"nodeType":"YulIf","src":"559:53:181"},{"nodeType":"YulAssignment","src":"621:49:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"660:9:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"631:28:181"},"nodeType":"YulFunctionCall","src":"631:39:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"621:6:181"}]},{"nodeType":"YulAssignment","src":"679:58:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"722:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"733:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"718:3:181"},"nodeType":"YulFunctionCall","src":"718:18:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"689:28:181"},"nodeType":"YulFunctionCall","src":"689:48:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"679:6:181"}]},{"nodeType":"YulAssignment","src":"746:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"790:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"801:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"786:3:181"},"nodeType":"YulFunctionCall","src":"786:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"756:29:181"},"nodeType":"YulFunctionCall","src":"756:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"746:6:181"}]},{"nodeType":"YulAssignment","src":"814:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"858:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"869:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"854:3:181"},"nodeType":"YulFunctionCall","src":"854:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"824:29:181"},"nodeType":"YulFunctionCall","src":"824:49:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"814:6:181"}]},{"nodeType":"YulAssignment","src":"882:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"926:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"937:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"922:3:181"},"nodeType":"YulFunctionCall","src":"922:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"892:29:181"},"nodeType":"YulFunctionCall","src":"892:50:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"882:6:181"}]},{"nodeType":"YulAssignment","src":"951:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"995:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1006:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"991:3:181"},"nodeType":"YulFunctionCall","src":"991:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"961:29:181"},"nodeType":"YulFunctionCall","src":"961:50:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"951:6:181"}]},{"nodeType":"YulAssignment","src":"1020:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1040:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1051:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1036:3:181"},"nodeType":"YulFunctionCall","src":"1036:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1030:5:181"},"nodeType":"YulFunctionCall","src":"1030:26:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"1020:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_addresst_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"467:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"478:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"490:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"498:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"506:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"514:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"522:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"530:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"538:6:181","type":""}],"src":"368:694:181"},{"body":{"nodeType":"YulBlock","src":"1241:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1258:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1269:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1251:6:181"},"nodeType":"YulFunctionCall","src":"1251:21:181"},"nodeType":"YulExpressionStatement","src":"1251:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1292:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1303:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1288:3:181"},"nodeType":"YulFunctionCall","src":"1288:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1308:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1281:6:181"},"nodeType":"YulFunctionCall","src":"1281:30:181"},"nodeType":"YulExpressionStatement","src":"1281:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1331:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1342:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1327:3:181"},"nodeType":"YulFunctionCall","src":"1327:18:181"},{"hexValue":"656d70747920646f6d61696e","kind":"string","nodeType":"YulLiteral","src":"1347:14:181","type":"","value":"empty domain"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1320:6:181"},"nodeType":"YulFunctionCall","src":"1320:42:181"},"nodeType":"YulExpressionStatement","src":"1320:42:181"},{"nodeType":"YulAssignment","src":"1371:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1383:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1394:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1379:3:181"},"nodeType":"YulFunctionCall","src":"1379:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1371:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1218:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1232:4:181","type":""}],"src":"1067:336:181"},{"body":{"nodeType":"YulBlock","src":"1582:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1599:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1610:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1592:6:181"},"nodeType":"YulFunctionCall","src":"1592:21:181"},"nodeType":"YulExpressionStatement","src":"1592:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1633:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1644:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1629:3:181"},"nodeType":"YulFunctionCall","src":"1629:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1649:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1622:6:181"},"nodeType":"YulFunctionCall","src":"1622:30:181"},"nodeType":"YulExpressionStatement","src":"1622:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1672:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1683:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1668:3:181"},"nodeType":"YulFunctionCall","src":"1668:18:181"},{"hexValue":"656d70747920726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"1688:19:181","type":"","value":"empty rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1661:6:181"},"nodeType":"YulFunctionCall","src":"1661:47:181"},"nodeType":"YulExpressionStatement","src":"1661:47:181"},{"nodeType":"YulAssignment","src":"1717:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1729:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1740:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1725:3:181"},"nodeType":"YulFunctionCall","src":"1725:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1717:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1559:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1573:4:181","type":""}],"src":"1408:341:181"},{"body":{"nodeType":"YulBlock","src":"1911:227:181","statements":[{"nodeType":"YulAssignment","src":"1921:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1933:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1944:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1929:3:181"},"nodeType":"YulFunctionCall","src":"1929:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1921:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"1956:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1974:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1979:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1970:3:181"},"nodeType":"YulFunctionCall","src":"1970:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1983:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1966:3:181"},"nodeType":"YulFunctionCall","src":"1966:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1960:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2001:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2016:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2024:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2012:3:181"},"nodeType":"YulFunctionCall","src":"2012:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1994:6:181"},"nodeType":"YulFunctionCall","src":"1994:34:181"},"nodeType":"YulExpressionStatement","src":"1994:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2048:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2059:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2044:3:181"},"nodeType":"YulFunctionCall","src":"2044:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2068:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2076:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2064:3:181"},"nodeType":"YulFunctionCall","src":"2064:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2037:6:181"},"nodeType":"YulFunctionCall","src":"2037:43:181"},"nodeType":"YulExpressionStatement","src":"2037:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2100:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2111:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2096:3:181"},"nodeType":"YulFunctionCall","src":"2096:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"2120:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2128:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2116:3:181"},"nodeType":"YulFunctionCall","src":"2116:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2089:6:181"},"nodeType":"YulFunctionCall","src":"2089:43:181"},"nodeType":"YulExpressionStatement","src":"2089:43:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1864:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1875:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1883:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1891:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1902:4:181","type":""}],"src":"1754:384:181"},{"body":{"nodeType":"YulBlock","src":"2272:175:181","statements":[{"nodeType":"YulAssignment","src":"2282:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2294:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2305:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2290:3:181"},"nodeType":"YulFunctionCall","src":"2290:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2282:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"2317:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2335:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2340:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2331:3:181"},"nodeType":"YulFunctionCall","src":"2331:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2344:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2327:3:181"},"nodeType":"YulFunctionCall","src":"2327:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2321:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2362:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2377:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2385:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2373:3:181"},"nodeType":"YulFunctionCall","src":"2373:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2355:6:181"},"nodeType":"YulFunctionCall","src":"2355:34:181"},"nodeType":"YulExpressionStatement","src":"2355:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2409:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2420:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2405:3:181"},"nodeType":"YulFunctionCall","src":"2405:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2429:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2437:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2425:3:181"},"nodeType":"YulFunctionCall","src":"2425:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2398:6:181"},"nodeType":"YulFunctionCall","src":"2398:43:181"},"nodeType":"YulExpressionStatement","src":"2398:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2233:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2244:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2252:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2263:4:181","type":""}],"src":"2143:304:181"},{"body":{"nodeType":"YulBlock","src":"2581:119:181","statements":[{"nodeType":"YulAssignment","src":"2591:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2603:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2614:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2599:3:181"},"nodeType":"YulFunctionCall","src":"2599:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2591:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2633:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"2644:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2626:6:181"},"nodeType":"YulFunctionCall","src":"2626:25:181"},"nodeType":"YulExpressionStatement","src":"2626:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2671:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2682:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2667:3:181"},"nodeType":"YulFunctionCall","src":"2667:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"2687:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2660:6:181"},"nodeType":"YulFunctionCall","src":"2660:34:181"},"nodeType":"YulExpressionStatement","src":"2660:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2542:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2553:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2561:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2572:4:181","type":""}],"src":"2452:248:181"}]},"contents":"{\n    { }\n    function abi_decode_uint32_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_addresst_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := abi_decode_uint32_fromMemory(headStart)\n        value1 := abi_decode_uint32_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n        value4 := abi_decode_address_fromMemory(add(headStart, 128))\n        value5 := abi_decode_address_fromMemory(add(headStart, 160))\n        value6 := mload(add(headStart, 192))\n    }\n    function abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"empty domain\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"empty rootManager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"6101206040523480156200001257600080fd5b50604051620031b8380380620031b88339810160408190526200003591620002eb565b8080888888888884848484846200004c33620001aa565b8463ffffffff16600003620000975760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620000e35760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b60448201526064016200008e565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e0528116156200011b576200011b816200020f565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a3505050505050505050506200018e816200027860201b60201c565b5050506001600160a01b03166101005250620003779350505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b60045460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1600455565b805163ffffffff81168114620002ce57600080fd5b919050565b80516001600160a01b0381168114620002ce57600080fd5b600080600080600080600060e0888a0312156200030757600080fd5b6200031288620002b9565b96506200032260208901620002b9565b95506200033260408901620002d3565b94506200034260608901620002d3565b93506200035260808901620002d3565b92506200036260a08901620002d3565b915060c0880151905092959891949750929550565b60805160a05160c05160e05161010051612dcb620003ed6000396000818161014c0152610ed301526000818161019d015261075401526000818161028e0152818161046a015261078f01526000818161041d0152818161051f01528181610afd0152610e880152600061023a0152612dcb6000f3fe60806040526004361061012e5760003560e01c8063715018a6116100ab578063c5b350df1161006f578063c5b350df14610399578063cc394283146103ae578063d1851c92146103ce578063d232c220146103ec578063d69f9d611461040b578063db1b76591461043f57600080fd5b8063715018a6146102e65780637850b020146102fb5780638da5cb5b1461031b578063b1f8100d14610339578063c1f0808a1461035957600080fd5b806352a9674b116100f257806352a9674b146102285780635bd11efc1461025c5780635f61e3ec1461027c5780636a42b8f8146102b05780636e2edb4e146102c657600080fd5b80630f329ef81461013a578063141684161461018b5780633cf52ffb146101d457806348e6fa23146101f35780634ff746f61461020857600080fd5b3661013557005b600080fd5b34801561014657600080fd5b5061016e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019757600080fd5b506101bf7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610182565b3480156101e057600080fd5b506002545b604051908152602001610182565b610206610201366004612687565b61045f565b005b34801561021457600080fd5b506102066102233660046126eb565b610514565b34801561023457600080fd5b506101bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561026857600080fd5b5061020661027736600461273d565b6105ba565b34801561028857600080fd5b5061016e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102bc57600080fd5b5062093a806101e5565b3480156102d257600080fd5b506102066102e13660046128a3565b6105f1565b3480156102f257600080fd5b5061020661084e565b34801561030757600080fd5b506102066103163660046129dc565b610902565b34801561032757600080fd5b506000546001600160a01b031661016e565b34801561034557600080fd5b5061020661035436600461273d565b610936565b34801561036557600080fd5b506103896103743660046129dc565b60056020526000908152604090205460ff1681565b6040519015158152602001610182565b3480156103a557600080fd5b506102066109d4565b3480156103ba57600080fd5b5060035461016e906001600160a01b031681565b3480156103da57600080fd5b506001546001600160a01b031661016e565b3480156103f857600080fd5b506000546001600160a01b031615610389565b34801561041757600080fd5b5061016e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044b57600080fd5b5061038961045a36600461273d565b610a44565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104cb5760405162461bcd60e51b815260206004820152600c60248201526b10b937b7ba26b0b730b3b2b960a11b60448201526064015b60405180910390fd5b6104d58282610a55565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507782823360405161050893929190612a45565b60405180910390a15050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105755760405162461bcd60e51b81526004016104c29060208082526004908201526310a0a6a160e11b604082015260600190565b61057e81610b6c565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced81336040516105af929190612a83565b60405180910390a150565b6000546001600160a01b031633146105e5576040516311a8a1bb60e31b815260040160405180910390fd5b6105ee81610b85565b50565b6003546001600160a01b038581169116146106415760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b60448201526064016104c2565b6001600160a01b03851630146106815760405162461bcd60e51b8152602060048201526005602482015264217468697360d81b60448201526064016104c2565b600061068f86868686610bee565b905061069b8183610c3b565b6106d05760405162461bcd60e51b815260206004820152600660248201526510b83937b7b360d11b60448201526064016104c2565b60006106dc8582610c5e565b905060006107136106fb6020601885901c6001600160601b0316612ac3565b62ffffff198416906001600160601b03166020610c82565b60008181526005602052604090205490915060ff166108445760008181526005602052604090819020805460ff191660011790555163473ec9fd60e11b81527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166004820152602481018290526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638e7d93fa90604401600060405180830381600087803b1580156107d357600080fd5b505af11580156107e7573d6000803e3d6000fd5b505050507fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8160405160200161081f91815260200190565b60408051601f198184030181529082905261083b913390612a83565b60405180910390a15b5050505050505050565b6000546001600160a01b03163314610879576040516311a8a1bb60e31b815260040160405180910390fd5b62093a806002544261088b9190612aea565b116108a9576040516324e0285f60e21b815260040160405180910390fd5b6002546000036108cc57604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b0316156108f6576040516323295ef960e01b815260040160405180910390fd5b6109006000610d8d565b565b6000546001600160a01b0316331461092d576040516311a8a1bb60e31b815260040160405180910390fd5b6105ee81610df2565b6000546001600160a01b03163314610961576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b03828116911614801561097f575060025415155b1561099d576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036109cb57604051634a2fb73f60e11b815260040160405180910390fd5b6105ee81610e33565b6001546001600160a01b031633146109ff576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442610a119190612aea565b11610a2f576040516324e0285f60e21b815260040160405180910390fd5b600154610900906001600160a01b0316610d8d565b6000610a4f82610e81565b92915050565b8151602014610a905760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b60448201526064016104c2565b6000634ff746f660e01b83604051602401610aab9190612afd565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252600354600480549351633dbb202b60e01b81529294506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811694633dbb202b94610b359490921692879201612b10565b600060405180830381600087803b158015610b4f57600080fd5b505af1158015610b63573d6000803e3d6000fd5b50505050505050565b6040516316c2fdb560e21b815260040160405180910390fd5b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b606084848484604051602401610c079493929190612b4a565b60408051601f198184030181529190526020810180516001600160e01b031663cbd4ece960e01b1790529050949350505050565b6000610c4682610ead565b8015610c575750610c578383610f47565b9392505050565b815160009060208401610c7964ffffffffff851682846110d6565b95945050505050565b60008160ff16600003610c9757506000610c57565b610caa8460181c6001600160601b031690565b6001600160601b0316610cc060ff841685612b87565b1115610d2857610cd98460781c6001600160601b031690565b610cec8560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff831660648201526084016104c2565b60208260ff161115610d4d5760405163045df3f960e01b815260040160405180910390fd5b600882026000610d668660781c6001600160601b031690565b6001600160601b03169490940151600160ff1b600019929092019190911d16949350505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60045460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1600455565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b6000610a4f7f000000000000000000000000000000000000000000000000000000000000000083611113565b805160208201516040808401519051634d69ee5760e01b81526000936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693634d69ee5793610f0693600401612b9a565b602060405180830381865afa158015610f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190612c45565b600080836007602160991b01604051602001610f64929190612c67565b60408051601f1981840301815282825280516020918201209083015260009082015260600160408051601f19818403018152908290528051602091820120602160f91b9183019190915291506000908190610fd89060340160408051601f19818403018152919052606087015187516111d4565b909250905060018215151461106b5760405162461bcd60e51b815260206004820152604d60248201527f4d6573736167652070617373696e67207072656465706c6f7920686173206e6f60448201527f74206265656e20696e697469616c697a6564206f7220696e76616c696420707260648201526c37b7b310383937bb34b232b21760991b608482015260a4016104c2565b6000611076826111fd565b90506110cb8460405160200161108e91815260200190565b60408051601f1981840301815290829052600160f81b602083015290602101604051602081830303815290604052886080015184604001516112c1565b979650505050505050565b6000806110e38385612b87565b90506040518111156110f3575060005b806000036111085762ffffff19915050610c57565b610c798585856112e5565b6000336001600160a01b038416146111575760405162461bcd60e51b81526020600482015260076024820152662162726964676560c81b60448201526064016104c2565b816001600160a01b0316836001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561119f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c39190612c9e565b6001600160a01b0316149392505050565b6000606060006111e38661135c565b90506111f081868661138e565b9250925050935093915050565b60408051608081018252600080825260208201819052918101829052606081018290529061122a83611469565b9050604051806080016040528061125a8360008151811061124d5761124d612cbb565b602002602001015161149c565b81526020016112758360018151811061124d5761124d612cbb565b815260200161129d8360028151811061129057611290612cbb565b60200260200101516114a3565b81526020016112b88360038151811061129057611290612cbb565b90529392505050565b6000806112cd8661135c565b90506112db818686866115a4565b9695505050505050565b60006060601883856001600160601b0382168214801561130d575086816001600160601b0316145b6113465760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b60448201526064016104c2565b96831b90961790911b90941790931b9392505050565b6060818051906020012060405160200161137891815260200190565b6040516020818303038152906040529050919050565b60006060600061139d856115da565b905060008060006113af848a896116ce565b815192955090935091501580806113c35750815b61140f5760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e00000000000060448201526064016104c2565b60008161142b5760405180602001604052806000815250611457565b6114578661143a600188612aea565b8151811061144a5761144a612cbb565b6020026020010151611ae4565b919b919a509098505050505050505050565b604080518082018252600080825260209182015281518083019092528251825280830190820152606090610a4f90611b0e565b6000610a4f825b600060228260000151106114f95760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e00000000000060448201526064016104c2565b600080600061150785611cfa565b91945092509050600081600181111561152257611522612cd1565b1461156f5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e00000000000060448201526064016104c2565b60008386602001516115819190612b87565b805190915060208410156112db5760208490036101000a90049695505050505050565b60008060006115b487868661138e565b915091508180156110cb57508051602080830191909120875191880191909120146110cb565b606060006115e783611469565b90506000815167ffffffffffffffff81111561160557611605612584565b60405190808252806020026020018201604052801561164a57816020015b60408051808201909152606080825260208201528152602001906001900390816116235790505b50825190915060005b818110156116c457600061167f85838151811061167257611672612cbb565b6020026020010151612048565b9050604051806040016040528082815260200161169b83611469565b8152508483815181106116b0576116b0612cbb565b602090810291909101015250600101611653565b5090949350505050565b600060608180806116de876120cf565b90506000869050600080611705604051806040016040528060608152602001606081525090565b8b5160005b81811015611abb578d818151811061172457611724612cbb565b60200260200101519250838561173a9190612b87565b9450611747600189612b87565b9750846000036117a25782518051602090910120861461179d5760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b60448201526064016104c2565b611860565b825151601f10156118055782518051602090910120861461179d5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c2068617368000000000060448201526064016104c2565b856118138460000151612204565b146118605760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f6465206861736800000000000060448201526064016104c2565b60019081019061187290601090612b87565b836020015151036118e45786518514611abb57600087868151811061189957611899612cbb565b602001015160f81c60f81b60f81c9050600084602001518260ff16815181106118c4576118c4612cbb565b602002602001015190506118d78161222c565b975060019550505061170a565b600283602001515103611a735760006118fc84612262565b905060008160008151811061191357611913612cbb565b016020015160f81c9050600061192a600283612cfd565b611935906002612d1f565b90506000611946848360ff16612286565b905060006119548c8b612286565b9050600061196283836122bc565b905060ff851660021480611979575060ff85166003145b156119b35780835114801561198e5750808251145b156119a05761199d818c612b87565b9a505b50600160ff1b9a50611abb945050505050565b60ff851615806119c6575060ff85166001145b15611a1c57825181146119e65750600160ff1b9a50611abb945050505050565b611a0d8960200151600181518110611a0057611a00612cbb565b602002602001015161222c565b9b50985061170a945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b60648201526084016104c2565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e00000060448201526064016104c2565b50600160ff1b851487611ace8887612286565b909f909e50909c509a5050505050505050505050565b60208101518051606091610a4f91611afe90600190612aea565b8151811061167257611672612cbb565b6060600080611b1c84611cfa565b91935090915060019050816001811115611b3857611b38612cd1565b14611b855760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e00000000000000000060448201526064016104c2565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081611b9e5790505090506000835b8651811015611cef5760208210611c375760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b60648201526084016104c2565b600080611c746040518060400160405280858c60000151611c589190612aea565b8152602001858c60200151611c6d9190612b87565b9052611cfa565b509150915060405180604001604052808383611c909190612b87565b8152602001848b60200151611ca59190612b87565b815250858581518110611cba57611cba612cbb565b6020908102919091010152611cd0600185612b87565b9350611cdc8183612b87565b611ce69084612b87565b92505050611bcb565b508152949350505050565b600080600080846000015111611d525760405162461bcd60e51b815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e000000000000000060448201526064016104c2565b6020840151805160001a6080811015611d78576000600160009450945094505050612041565b60b8811015611df5576000611d8e608083612aea565b905080876000015111611de35760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e0000000000000060448201526064016104c2565b60019550935060009250612041915050565b60c0811015611ee5576000611e0b60b783612aea565b905080876000015111611e605760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e0060448201526064016104c2565b600183015160208290036101000a9004611e7a8183612b87565b885111611ec95760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e000000000000000060448201526064016104c2565b611ed4826001612b87565b965094506000935061204192505050565b60f8811015611f61576000611efb60c083612aea565b905080876000015111611f505760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e00000000000000000060448201526064016104c2565b600195509350849250612041915050565b6000611f6e60f783612aea565b905080876000015111611fc35760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e00000060448201526064016104c2565b600183015160208290036101000a9004611fdd8183612b87565b8851116120255760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b60448201526064016104c2565b612030826001612b87565b965094506001935061204192505050565b9193909250565b6060600080600061205885611cfa565b91945092509050600081600181111561207357612073612cd1565b146120c05760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e000000000000000060448201526064016104c2565b610c7985602001518484612338565b60606000825160026120e19190612d38565b67ffffffffffffffff8111156120f9576120f9612584565b6040519080825280601f01601f191660200182016040528015612123576020820181803683370190505b50835190915060005b818110156121fb57600485828151811061214857612148612cbb565b01602001516001600160f81b031916901c83612165836002612d38565b8151811061217557612175612cbb565b60200101906001600160f81b031916908160001a90535060108582815181106121a0576121a0612cbb565b01602001516121b2919060f81c612cfd565b60f81b836121c1836002612d38565b6121cc906001612b87565b815181106121dc576121dc612cbb565b60200101906001600160f81b031916908160001a90535060010161212c565b50909392505050565b600060208251101561221857506020015190565b81806020019051810190610a4f9190612d4f565b6000606060208360000151101561224d576122468361240c565b9050612259565b61225683612048565b90505b610c5781612204565b6060610a4f612281836020015160008151811061167257611672612cbb565b6120cf565b6060825182106122a55750604080516020810190915260008152610a4f565b610c5783838486516122b79190612aea565b612417565b6000805b8084511180156122d05750808351115b801561232157508281815181106122e9576122e9612cbb565b602001015160f81c60f81b6001600160f81b03191684828151811061231057612310612cbb565b01602001516001600160f81b031916145b15610c57578061233081612d68565b9150506122c0565b606060008267ffffffffffffffff81111561235557612355612584565b6040519080825280601f01601f19166020018201604052801561237f576020820181803683370190505b5090508051600003612392579050610c57565b600061239e8587612b87565b90506020820160005b6123b2602087612d81565b8110156123df57825182526123c8602084612b87565b92506123d5602083612b87565b91506001016123a7565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b6060610a4f8261256e565b60608161242581601f612b87565b10156124645760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016104c2565b8261246f8382612b87565b10156124ae5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016104c2565b6124b88284612b87565b845110156124fc5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016104c2565b60608215801561251b5760405191506000825260208201604052612565565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561255457805183526020928301920161253c565b5050858452601f01601f1916604052505b50949350505050565b6060610a4f826020015160008460000151612338565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156125bd576125bd612584565b60405290565b60405160a0810167ffffffffffffffff811182821017156125bd576125bd612584565b604051601f8201601f1916810167ffffffffffffffff8111828210171561260f5761260f612584565b604052919050565b600082601f83011261262857600080fd5b813567ffffffffffffffff81111561264257612642612584565b612655601f8201601f19166020016125e6565b81815284602083860101111561266a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561269a57600080fd5b823567ffffffffffffffff808211156126b257600080fd5b6126be86838701612617565b935060208501359150808211156126d457600080fd5b506126e185828601612617565b9150509250929050565b6000602082840312156126fd57600080fd5b813567ffffffffffffffff81111561271457600080fd5b61272084828501612617565b949350505050565b6001600160a01b03811681146105ee57600080fd5b60006020828403121561274f57600080fd5b8135610c5781612728565b600060a0828403121561276c57600080fd5b60405160a0810167ffffffffffffffff828210818311171561279057612790612584565b816040528293508435835260208501356020840152604085013560408401526060850135606084015260808501359150808211156127cd57600080fd5b506127da85828601612617565b6080830152505092915050565b6000604082840312156127f957600080fd5b61280161259a565b90508135815260208083013567ffffffffffffffff8082111561282357600080fd5b818501915085601f83011261283757600080fd5b81358181111561284957612849612584565b8060051b915061285a8483016125e6565b818152918301840191848101908884111561287457600080fd5b938501935b8385101561289257843582529385019390850190612879565b808688015250505050505092915050565b600080600080600060a086880312156128bb57600080fd5b85356128c681612728565b945060208601356128d681612728565b9350604086013567ffffffffffffffff808211156128f357600080fd5b6128ff89838a01612617565b945060608801359350608088013591508082111561291c57600080fd5b9087019060a0828a03121561293057600080fd5b6129386125c3565b8235815260208301358281111561294e57600080fd5b61295a8b82860161275a565b60208301525060408301358281111561297257600080fd5b61297e8b8286016127e7565b60408301525060608301358281111561299657600080fd5b6129a28b828601612617565b6060830152506080830135828111156129ba57600080fd5b6129c68b828601612617565b6080830152508093505050509295509295909350565b6000602082840312156129ee57600080fd5b5035919050565b60005b83811015612a105781810151838201526020016129f8565b50506000910152565b60008151808452612a318160208601602086016129f5565b601f01601f19169290920160200192915050565b606081526000612a586060830186612a19565b8281036020840152612a6a8186612a19565b91505060018060a01b0383166040830152949350505050565b604081526000612a966040830185612a19565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052601160045260246000fd5b6001600160601b03828116828216039080821115612ae357612ae3612aad565b5092915050565b81810381811115610a4f57610a4f612aad565b602081526000610c576020830184612a19565b6001600160a01b0384168152606060208201819052600090612b3490830185612a19565b905063ffffffff83166040830152949350505050565b6001600160a01b03858116825284166020820152608060408201819052600090612b7690830185612a19565b905082606083015295945050505050565b80820180821115610a4f57610a4f612aad565b8381526000602060608184015284516060840152808501516080840152604085015160a0840152606085015160c0840152608085015160a060e0850152612be5610100850182612a19565b905083810360408501526040810185518252828601516040848401528181518084526060850191508583019450600093505b80841015612c375784518252938501936001939093019290850190612c17565b509998505050505050505050565b600060208284031215612c5757600080fd5b81518015158114610c5757600080fd5b60008351612c798184602088016129f5565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b600060208284031215612cb057600080fd5b8151610c5781612728565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600060ff831680612d1057612d10612ce7565b8060ff84160691505092915050565b60ff8281168282160390811115610a4f57610a4f612aad565b8082028115828204841417610a4f57610a4f612aad565b600060208284031215612d6157600080fd5b5051919050565b600060018201612d7a57612d7a612aad565b5060010190565b600082612d9057612d90612ce7565b50049056fea264697066735822122049488d98f454e5e1097bffbc409bd2ed7b797216444b82845a44d82d3af4fe4b64736f6c63430008110033","opcodes":"PUSH2 0x120 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x31B8 CODESIZE SUB DUP1 PUSH3 0x31B8 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x2EB JUMP JUMPDEST DUP1 DUP1 DUP9 DUP9 DUP9 DUP9 DUP9 DUP5 DUP5 DUP5 DUP5 DUP5 PUSH3 0x4C CALLER PUSH3 0x1AA JUMP JUMPDEST DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0x0 SUB PUSH3 0x97 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x32B6B83A3C903237B6B0B4B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xE3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x32B6B83A3C903937B7BA26B0B730B3B2B9 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x8E JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0xA0 MSTORE DUP4 DUP2 AND PUSH1 0xC0 MSTORE SWAP1 DUP6 AND PUSH1 0xE0 MSTORE DUP2 AND ISZERO PUSH3 0x11B JUMPI PUSH3 0x11B DUP2 PUSH3 0x20F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH4 0xFFFFFFFF DUP7 DUP2 AND SWAP3 SWAP1 DUP9 AND SWAP2 PUSH32 0x4F9C27C2FE3F84576EA469D367D044DA53C45E951617E8389F2B5ED8DB9D25F0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP PUSH3 0x18E DUP2 PUSH3 0x278 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x100 MSTORE POP PUSH3 0x377 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 SSTORE JUMP JUMPDEST DUP1 MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH3 0x2CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x2CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH3 0x307 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x312 DUP9 PUSH3 0x2B9 JUMP JUMPDEST SWAP7 POP PUSH3 0x322 PUSH1 0x20 DUP10 ADD PUSH3 0x2B9 JUMP JUMPDEST SWAP6 POP PUSH3 0x332 PUSH1 0x40 DUP10 ADD PUSH3 0x2D3 JUMP JUMPDEST SWAP5 POP PUSH3 0x342 PUSH1 0x60 DUP10 ADD PUSH3 0x2D3 JUMP JUMPDEST SWAP4 POP PUSH3 0x352 PUSH1 0x80 DUP10 ADD PUSH3 0x2D3 JUMP JUMPDEST SWAP3 POP PUSH3 0x362 PUSH1 0xA0 DUP10 ADD PUSH3 0x2D3 JUMP JUMPDEST SWAP2 POP PUSH1 0xC0 DUP9 ADD MLOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x2DCB PUSH3 0x3ED PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x14C ADD MSTORE PUSH2 0xED3 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x19D ADD MSTORE PUSH2 0x754 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x28E ADD MSTORE DUP2 DUP2 PUSH2 0x46A ADD MSTORE PUSH2 0x78F ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x41D ADD MSTORE DUP2 DUP2 PUSH2 0x51F ADD MSTORE DUP2 DUP2 PUSH2 0xAFD ADD MSTORE PUSH2 0xE88 ADD MSTORE PUSH1 0x0 PUSH2 0x23A ADD MSTORE PUSH2 0x2DCB PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x12E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 GT PUSH2 0xAB JUMPI DUP1 PUSH4 0xC5B350DF GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x399 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x3AE JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x3CE JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x3EC JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x40B JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x43F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x715018A6 EQ PUSH2 0x2E6 JUMPI DUP1 PUSH4 0x7850B020 EQ PUSH2 0x2FB JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x31B JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x339 JUMPI DUP1 PUSH4 0xC1F0808A EQ PUSH2 0x359 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B GT PUSH2 0xF2 JUMPI DUP1 PUSH4 0x52A9674B EQ PUSH2 0x228 JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x25C JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x2B0 JUMPI DUP1 PUSH4 0x6E2EDB4E EQ PUSH2 0x2C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xF329EF8 EQ PUSH2 0x13A JUMPI DUP1 PUSH4 0x14168416 EQ PUSH2 0x18B JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x48E6FA23 EQ PUSH2 0x1F3 JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x208 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x135 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x146 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x16E PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x197 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x182 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x182 JUMP JUMPDEST PUSH2 0x206 PUSH2 0x201 CALLDATASIZE PUSH1 0x4 PUSH2 0x2687 JUMP JUMPDEST PUSH2 0x45F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x214 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0x223 CALLDATASIZE PUSH1 0x4 PUSH2 0x26EB JUMP JUMPDEST PUSH2 0x514 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BF PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x268 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0x277 CALLDATASIZE PUSH1 0x4 PUSH2 0x273D JUMP JUMPDEST PUSH2 0x5BA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x288 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x16E PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x1E5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0x2E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x28A3 JUMP JUMPDEST PUSH2 0x5F1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0x84E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x307 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0x316 CALLDATASIZE PUSH1 0x4 PUSH2 0x29DC JUMP JUMPDEST PUSH2 0x902 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x327 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x16E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x345 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0x354 CALLDATASIZE PUSH1 0x4 PUSH2 0x273D JUMP JUMPDEST PUSH2 0x936 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x365 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x389 PUSH2 0x374 CALLDATASIZE PUSH1 0x4 PUSH2 0x29DC JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x182 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0x9D4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x16E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x16E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x389 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x417 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x16E PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x44B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x389 PUSH2 0x45A CALLDATASIZE PUSH1 0x4 PUSH2 0x273D JUMP JUMPDEST PUSH2 0xA44 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x4CB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B937B7BA26B0B730B3B2B9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4D5 DUP3 DUP3 PUSH2 0xA55 JUMP JUMPDEST PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 DUP3 DUP3 CALLER PUSH1 0x40 MLOAD PUSH2 0x508 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2A45 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x575 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4C2 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0x57E DUP2 PUSH2 0xB6C JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0x5AF SWAP3 SWAP2 SWAP1 PUSH2 0x2A83 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5E5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5EE DUP2 PUSH2 0xB85 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP2 AND EQ PUSH2 0x641 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x10B6B4B93937B921B7B73732B1BA37B9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND ADDRESS EQ PUSH2 0x681 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x5 PUSH1 0x24 DUP3 ADD MSTORE PUSH5 0x2174686973 PUSH1 0xD8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x68F DUP7 DUP7 DUP7 DUP7 PUSH2 0xBEE JUMP JUMPDEST SWAP1 POP PUSH2 0x69B DUP2 DUP4 PUSH2 0xC3B JUMP JUMPDEST PUSH2 0x6D0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x10B83937B7B3 PUSH1 0xD1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6DC DUP6 DUP3 PUSH2 0xC5E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x713 PUSH2 0x6FB PUSH1 0x20 PUSH1 0x18 DUP6 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x2AC3 JUMP JUMPDEST PUSH3 0xFFFFFF NOT DUP5 AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH1 0x20 PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND PUSH2 0x844 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH4 0x473EC9FD PUSH1 0xE1 SHL DUP2 MSTORE PUSH32 0x0 PUSH4 0xFFFFFFFF AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x8E7D93FA SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7E7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x81F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH2 0x83B SWAP2 CALLER SWAP1 PUSH2 0x2A83 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x879 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x88B SWAP2 SWAP1 PUSH2 0x2AEA JUMP JUMPDEST GT PUSH2 0x8A9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x8CC JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x8F6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x900 PUSH1 0x0 PUSH2 0xD8D JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x92D JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5EE DUP2 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x961 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x97F JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x99D JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x9CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5EE DUP2 PUSH2 0xE33 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9FF JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0xA11 SWAP2 SWAP1 PUSH2 0x2AEA JUMP JUMPDEST GT PUSH2 0xA2F JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x900 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD8D JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA4F DUP3 PUSH2 0xE81 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0xA90 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x0 PUSH4 0x4FF746F6 PUSH1 0xE0 SHL DUP4 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xAAB SWAP2 SWAP1 PUSH2 0x2AFD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x3 SLOAD PUSH1 0x4 DUP1 SLOAD SWAP4 MLOAD PUSH4 0x3DBB202B PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND SWAP5 PUSH4 0x3DBB202B SWAP5 PUSH2 0xB35 SWAP5 SWAP1 SWAP3 AND SWAP3 DUP8 SWAP3 ADD PUSH2 0x2B10 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB63 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x16C2FDB5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xC07 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2B4A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xCBD4ECE9 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC46 DUP3 PUSH2 0xEAD JUMP JUMPDEST DUP1 ISZERO PUSH2 0xC57 JUMPI POP PUSH2 0xC57 DUP4 DUP4 PUSH2 0xF47 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0xC79 PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x10D6 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0xC97 JUMPI POP PUSH1 0x0 PUSH2 0xC57 JUMP JUMPDEST PUSH2 0xCAA DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0xCC0 PUSH1 0xFF DUP5 AND DUP6 PUSH2 0x2B87 JUMP JUMPDEST GT ISZERO PUSH2 0xD28 JUMPI PUSH2 0xCD9 DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xCEC DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0xD4D JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0xD66 DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP5 SWAP1 SWAP5 ADD MLOAD PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SAR AND SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA4F PUSH32 0x0 DUP4 PUSH2 0x1113 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP1 DUP5 ADD MLOAD SWAP1 MLOAD PUSH4 0x4D69EE57 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP4 PUSH4 0x4D69EE57 SWAP4 PUSH2 0xF06 SWAP4 PUSH1 0x4 ADD PUSH2 0x2B9A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA4F SWAP2 SWAP1 PUSH2 0x2C45 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x7 PUSH1 0x21 PUSH1 0x99 SHL ADD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xF64 SWAP3 SWAP2 SWAP1 PUSH2 0x2C67 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 SWAP1 DUP4 ADD MSTORE PUSH1 0x0 SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x21 PUSH1 0xF9 SHL SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 POP PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0xFD8 SWAP1 PUSH1 0x34 ADD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x60 DUP8 ADD MLOAD DUP8 MLOAD PUSH2 0x11D4 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 DUP3 ISZERO ISZERO EQ PUSH2 0x106B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x4D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D6573736167652070617373696E67207072656465706C6F7920686173206E6F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74206265656E20696E697469616C697A6564206F7220696E76616C6964207072 PUSH1 0x64 DUP3 ADD MSTORE PUSH13 0x37B7B310383937BB34B232B217 PUSH1 0x99 SHL PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1076 DUP3 PUSH2 0x11FD JUMP JUMPDEST SWAP1 POP PUSH2 0x10CB DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x108E SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0xF8 SHL PUSH1 0x20 DUP4 ADD MSTORE SWAP1 PUSH1 0x21 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP9 PUSH1 0x80 ADD MLOAD DUP5 PUSH1 0x40 ADD MLOAD PUSH2 0x12C1 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x10E3 DUP4 DUP6 PUSH2 0x2B87 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x10F3 JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x1108 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0xC57 JUMP JUMPDEST PUSH2 0xC79 DUP6 DUP6 DUP6 PUSH2 0x12E5 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EQ PUSH2 0x1157 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x21627269646765 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6E296E45 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x119F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11C3 SWAP2 SWAP1 PUSH2 0x2C9E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x11E3 DUP7 PUSH2 0x135C JUMP JUMPDEST SWAP1 POP PUSH2 0x11F0 DUP2 DUP7 DUP7 PUSH2 0x138E JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 PUSH2 0x122A DUP4 PUSH2 0x1469 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x125A DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x124D JUMPI PUSH2 0x124D PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x149C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1275 DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x124D JUMPI PUSH2 0x124D PUSH2 0x2CBB JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129D DUP4 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x1290 JUMPI PUSH2 0x1290 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x14A3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12B8 DUP4 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x1290 JUMPI PUSH2 0x1290 PUSH2 0x2CBB JUMP JUMPDEST SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x12CD DUP7 PUSH2 0x135C JUMP JUMPDEST SWAP1 POP PUSH2 0x12DB DUP2 DUP7 DUP7 DUP7 PUSH2 0x15A4 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0x130D JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0x1346 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1378 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x139D DUP6 PUSH2 0x15DA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x13AF DUP5 DUP11 DUP10 PUSH2 0x16CE JUMP JUMPDEST DUP2 MLOAD SWAP3 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP ISZERO DUP1 DUP1 PUSH2 0x13C3 JUMPI POP DUP2 JUMPDEST PUSH2 0x140F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x50726F76696465642070726F6F6620697320696E76616C69642E000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x142B JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x1457 JUMP JUMPDEST PUSH2 0x1457 DUP7 PUSH2 0x143A PUSH1 0x1 DUP9 PUSH2 0x2AEA JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x144A JUMPI PUSH2 0x144A PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1AE4 JUMP JUMPDEST SWAP2 SWAP12 SWAP2 SWAP11 POP SWAP1 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE DUP3 MLOAD DUP3 MSTORE DUP1 DUP4 ADD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 SWAP1 PUSH2 0xA4F SWAP1 PUSH2 0x1B0E JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA4F DUP3 JUMPDEST PUSH1 0x0 PUSH1 0x22 DUP3 PUSH1 0x0 ADD MLOAD LT PUSH2 0x14F9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420524C5020627974657333322076616C75652E000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1507 DUP6 PUSH2 0x1CFA JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x1522 JUMPI PUSH2 0x1522 PUSH2 0x2CD1 JUMP JUMPDEST EQ PUSH2 0x156F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420524C5020627974657333322076616C75652E000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x1581 SWAP2 SWAP1 PUSH2 0x2B87 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x20 DUP5 LT ISZERO PUSH2 0x12DB JUMPI PUSH1 0x20 DUP5 SWAP1 SUB PUSH2 0x100 EXP SWAP1 DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x15B4 DUP8 DUP7 DUP7 PUSH2 0x138E JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x10CB JUMPI POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 KECCAK256 DUP8 MLOAD SWAP2 DUP9 ADD SWAP2 SWAP1 SWAP2 KECCAK256 EQ PUSH2 0x10CB JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x15E7 DUP4 PUSH2 0x1469 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1605 JUMPI PUSH2 0x1605 PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x164A JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1623 JUMPI SWAP1 POP JUMPDEST POP DUP3 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x16C4 JUMPI PUSH1 0x0 PUSH2 0x167F DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1672 JUMPI PUSH2 0x1672 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2048 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x169B DUP4 PUSH2 0x1469 JUMP JUMPDEST DUP2 MSTORE POP DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x16B0 JUMPI PUSH2 0x16B0 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x1653 JUMP JUMPDEST POP SWAP1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP2 DUP1 DUP1 PUSH2 0x16DE DUP8 PUSH2 0x20CF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP7 SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x1705 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP12 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1ABB JUMPI DUP14 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1724 JUMPI PUSH2 0x1724 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP3 POP DUP4 DUP6 PUSH2 0x173A SWAP2 SWAP1 PUSH2 0x2B87 JUMP JUMPDEST SWAP5 POP PUSH2 0x1747 PUSH1 0x1 DUP10 PUSH2 0x2B87 JUMP JUMPDEST SWAP8 POP DUP5 PUSH1 0x0 SUB PUSH2 0x17A2 JUMPI DUP3 MLOAD DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 DUP7 EQ PUSH2 0x179D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x92DCECC2D8D2C840E4DEDEE840D0C2E6D PUSH1 0x7B SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH2 0x1860 JUMP JUMPDEST DUP3 MLOAD MLOAD PUSH1 0x1F LT ISZERO PUSH2 0x1805 JUMPI DUP3 MLOAD DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 DUP7 EQ PUSH2 0x179D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C6964206C6172676520696E7465726E616C20686173680000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST DUP6 PUSH2 0x1813 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x2204 JUMP JUMPDEST EQ PUSH2 0x1860 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420696E7465726E616C206E6F64652068617368000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1872 SWAP1 PUSH1 0x10 SWAP1 PUSH2 0x2B87 JUMP JUMPDEST DUP4 PUSH1 0x20 ADD MLOAD MLOAD SUB PUSH2 0x18E4 JUMPI DUP7 MLOAD DUP6 EQ PUSH2 0x1ABB JUMPI PUSH1 0x0 DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x1899 JUMPI PUSH2 0x1899 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 ADD ADD MLOAD PUSH1 0xF8 SHR PUSH1 0xF8 SHL PUSH1 0xF8 SHR SWAP1 POP PUSH1 0x0 DUP5 PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x18C4 JUMPI PUSH2 0x18C4 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x18D7 DUP2 PUSH2 0x222C JUMP JUMPDEST SWAP8 POP PUSH1 0x1 SWAP6 POP POP POP PUSH2 0x170A JUMP JUMPDEST PUSH1 0x2 DUP4 PUSH1 0x20 ADD MLOAD MLOAD SUB PUSH2 0x1A73 JUMPI PUSH1 0x0 PUSH2 0x18FC DUP5 PUSH2 0x2262 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1913 JUMPI PUSH2 0x1913 PUSH2 0x2CBB JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0xF8 SHR SWAP1 POP PUSH1 0x0 PUSH2 0x192A PUSH1 0x2 DUP4 PUSH2 0x2CFD JUMP JUMPDEST PUSH2 0x1935 SWAP1 PUSH1 0x2 PUSH2 0x2D1F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1946 DUP5 DUP4 PUSH1 0xFF AND PUSH2 0x2286 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1954 DUP13 DUP12 PUSH2 0x2286 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1962 DUP4 DUP4 PUSH2 0x22BC JUMP JUMPDEST SWAP1 POP PUSH1 0xFF DUP6 AND PUSH1 0x2 EQ DUP1 PUSH2 0x1979 JUMPI POP PUSH1 0xFF DUP6 AND PUSH1 0x3 EQ JUMPDEST ISZERO PUSH2 0x19B3 JUMPI DUP1 DUP4 MLOAD EQ DUP1 ISZERO PUSH2 0x198E JUMPI POP DUP1 DUP3 MLOAD EQ JUMPDEST ISZERO PUSH2 0x19A0 JUMPI PUSH2 0x199D DUP2 DUP13 PUSH2 0x2B87 JUMP JUMPDEST SWAP11 POP JUMPDEST POP PUSH1 0x1 PUSH1 0xFF SHL SWAP11 POP PUSH2 0x1ABB SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0xFF DUP6 AND ISZERO DUP1 PUSH2 0x19C6 JUMPI POP PUSH1 0xFF DUP6 AND PUSH1 0x1 EQ JUMPDEST ISZERO PUSH2 0x1A1C JUMPI DUP3 MLOAD DUP2 EQ PUSH2 0x19E6 JUMPI POP PUSH1 0x1 PUSH1 0xFF SHL SWAP11 POP PUSH2 0x1ABB SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1A0D DUP10 PUSH1 0x20 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x1A00 JUMPI PUSH2 0x1A00 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x222C JUMP JUMPDEST SWAP12 POP SWAP9 POP PUSH2 0x170A SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x52656365697665642061206E6F6465207769746820616E20756E6B6E6F776E20 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0xE0E4CACCD2F PUSH1 0xD3 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x526563656976656420616E20756E706172736561626C65206E6F64652E000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0xFF SHL DUP6 EQ DUP8 PUSH2 0x1ACE DUP9 DUP8 PUSH2 0x2286 JUMP JUMPDEST SWAP1 SWAP16 SWAP1 SWAP15 POP SWAP1 SWAP13 POP SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP1 MLOAD PUSH1 0x60 SWAP2 PUSH2 0xA4F SWAP2 PUSH2 0x1AFE SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x2AEA JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x1672 JUMPI PUSH2 0x1672 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x1B1C DUP5 PUSH2 0x1CFA JUMP JUMPDEST SWAP2 SWAP4 POP SWAP1 SWAP2 POP PUSH1 0x1 SWAP1 POP DUP2 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x1B38 JUMPI PUSH2 0x1B38 PUSH2 0x2CD1 JUMP JUMPDEST EQ PUSH2 0x1B85 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420524C50206C6973742076616C75652E000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE PUSH2 0x420 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1B9E JUMPI SWAP1 POP POP SWAP1 POP PUSH1 0x0 DUP4 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x1CEF JUMPI PUSH1 0x20 DUP3 LT PUSH2 0x1C37 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x50726F766964656420524C50206C6973742065786365656473206D6178206C69 PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x39BA103632B733BA3417 PUSH1 0xB1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1C74 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP6 DUP13 PUSH1 0x0 ADD MLOAD PUSH2 0x1C58 SWAP2 SWAP1 PUSH2 0x2AEA JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP13 PUSH1 0x20 ADD MLOAD PUSH2 0x1C6D SWAP2 SWAP1 PUSH2 0x2B87 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x1CFA JUMP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP4 DUP4 PUSH2 0x1C90 SWAP2 SWAP1 PUSH2 0x2B87 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP12 PUSH1 0x20 ADD MLOAD PUSH2 0x1CA5 SWAP2 SWAP1 PUSH2 0x2B87 JUMP JUMPDEST DUP2 MSTORE POP DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x1CBA JUMPI PUSH2 0x1CBA PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH2 0x1CD0 PUSH1 0x1 DUP6 PUSH2 0x2B87 JUMP JUMPDEST SWAP4 POP PUSH2 0x1CDC DUP2 DUP4 PUSH2 0x2B87 JUMP JUMPDEST PUSH2 0x1CE6 SWAP1 DUP5 PUSH2 0x2B87 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x1BCB JUMP JUMPDEST POP DUP2 MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 PUSH1 0x0 ADD MLOAD GT PUSH2 0x1D52 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x524C50206974656D2063616E6E6F74206265206E756C6C2E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1D78 JUMPI PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP5 POP SWAP5 POP SWAP5 POP POP POP PUSH2 0x2041 JUMP JUMPDEST PUSH1 0xB8 DUP2 LT ISZERO PUSH2 0x1DF5 JUMPI PUSH1 0x0 PUSH2 0x1D8E PUSH1 0x80 DUP4 PUSH2 0x2AEA JUMP JUMPDEST SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD MLOAD GT PUSH2 0x1DE3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420524C502073686F727420737472696E672E00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x1 SWAP6 POP SWAP4 POP PUSH1 0x0 SWAP3 POP PUSH2 0x2041 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x1EE5 JUMPI PUSH1 0x0 PUSH2 0x1E0B PUSH1 0xB7 DUP4 PUSH2 0x2AEA JUMP JUMPDEST SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD MLOAD GT PUSH2 0x1E60 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420524C50206C6F6E6720737472696E67206C656E6774682E00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD MLOAD PUSH1 0x20 DUP3 SWAP1 SUB PUSH2 0x100 EXP SWAP1 DIV PUSH2 0x1E7A DUP2 DUP4 PUSH2 0x2B87 JUMP JUMPDEST DUP9 MLOAD GT PUSH2 0x1EC9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420524C50206C6F6E6720737472696E672E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH2 0x1ED4 DUP3 PUSH1 0x1 PUSH2 0x2B87 JUMP JUMPDEST SWAP7 POP SWAP5 POP PUSH1 0x0 SWAP4 POP PUSH2 0x2041 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xF8 DUP2 LT ISZERO PUSH2 0x1F61 JUMPI PUSH1 0x0 PUSH2 0x1EFB PUSH1 0xC0 DUP4 PUSH2 0x2AEA JUMP JUMPDEST SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD MLOAD GT PUSH2 0x1F50 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420524C502073686F7274206C6973742E000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x1 SWAP6 POP SWAP4 POP DUP5 SWAP3 POP PUSH2 0x2041 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F6E PUSH1 0xF7 DUP4 PUSH2 0x2AEA JUMP JUMPDEST SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD MLOAD GT PUSH2 0x1FC3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420524C50206C6F6E67206C697374206C656E6774682E000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD MLOAD PUSH1 0x20 DUP3 SWAP1 SUB PUSH2 0x100 EXP SWAP1 DIV PUSH2 0x1FDD DUP2 DUP4 PUSH2 0x2B87 JUMP JUMPDEST DUP9 MLOAD GT PUSH2 0x2025 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x24B73B30B634B210292628103637B733903634B9BA17 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH2 0x2030 DUP3 PUSH1 0x1 PUSH2 0x2B87 JUMP JUMPDEST SWAP7 POP SWAP5 POP PUSH1 0x1 SWAP4 POP PUSH2 0x2041 SWAP3 POP POP POP JUMP JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2058 DUP6 PUSH2 0x1CFA JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x2073 JUMPI PUSH2 0x2073 PUSH2 0x2CD1 JUMP JUMPDEST EQ PUSH2 0x20C0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420524C502062797465732076616C75652E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH2 0xC79 DUP6 PUSH1 0x20 ADD MLOAD DUP5 DUP5 PUSH2 0x2338 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 MLOAD PUSH1 0x2 PUSH2 0x20E1 SWAP2 SWAP1 PUSH2 0x2D38 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x20F9 JUMPI PUSH2 0x20F9 PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2123 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP DUP4 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x21FB JUMPI PUSH1 0x4 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2148 JUMPI PUSH2 0x2148 PUSH2 0x2CBB JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 SHR DUP4 PUSH2 0x2165 DUP4 PUSH1 0x2 PUSH2 0x2D38 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2175 JUMPI PUSH2 0x2175 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x10 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x21A0 JUMPI PUSH2 0x21A0 PUSH2 0x2CBB JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH2 0x21B2 SWAP2 SWAP1 PUSH1 0xF8 SHR PUSH2 0x2CFD JUMP JUMPDEST PUSH1 0xF8 SHL DUP4 PUSH2 0x21C1 DUP4 PUSH1 0x2 PUSH2 0x2D38 JUMP JUMPDEST PUSH2 0x21CC SWAP1 PUSH1 0x1 PUSH2 0x2B87 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x21DC JUMPI PUSH2 0x21DC PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x1 ADD PUSH2 0x212C JUMP JUMPDEST POP SWAP1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MLOAD LT ISZERO PUSH2 0x2218 JUMPI POP PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xA4F SWAP2 SWAP1 PUSH2 0x2D4F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x20 DUP4 PUSH1 0x0 ADD MLOAD LT ISZERO PUSH2 0x224D JUMPI PUSH2 0x2246 DUP4 PUSH2 0x240C JUMP JUMPDEST SWAP1 POP PUSH2 0x2259 JUMP JUMPDEST PUSH2 0x2256 DUP4 PUSH2 0x2048 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0xC57 DUP2 PUSH2 0x2204 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xA4F PUSH2 0x2281 DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1672 JUMPI PUSH2 0x1672 PUSH2 0x2CBB JUMP JUMPDEST PUSH2 0x20CF JUMP JUMPDEST PUSH1 0x60 DUP3 MLOAD DUP3 LT PUSH2 0x22A5 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH2 0xA4F JUMP JUMPDEST PUSH2 0xC57 DUP4 DUP4 DUP5 DUP7 MLOAD PUSH2 0x22B7 SWAP2 SWAP1 PUSH2 0x2AEA JUMP JUMPDEST PUSH2 0x2417 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP1 DUP5 MLOAD GT DUP1 ISZERO PUSH2 0x22D0 JUMPI POP DUP1 DUP4 MLOAD GT JUMPDEST DUP1 ISZERO PUSH2 0x2321 JUMPI POP DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x22E9 JUMPI PUSH2 0x22E9 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 ADD ADD MLOAD PUSH1 0xF8 SHR PUSH1 0xF8 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2310 JUMPI PUSH2 0x2310 PUSH2 0x2CBB JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND EQ JUMPDEST ISZERO PUSH2 0xC57 JUMPI DUP1 PUSH2 0x2330 DUP2 PUSH2 0x2D68 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x22C0 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2355 JUMPI PUSH2 0x2355 PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x237F JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0x2392 JUMPI SWAP1 POP PUSH2 0xC57 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x239E DUP6 DUP8 PUSH2 0x2B87 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 ADD PUSH1 0x0 JUMPDEST PUSH2 0x23B2 PUSH1 0x20 DUP8 PUSH2 0x2D81 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x23DF JUMPI DUP3 MLOAD DUP3 MSTORE PUSH2 0x23C8 PUSH1 0x20 DUP5 PUSH2 0x2B87 JUMP JUMPDEST SWAP3 POP PUSH2 0x23D5 PUSH1 0x20 DUP4 PUSH2 0x2B87 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x23A7 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x20 DUP8 MOD PUSH1 0x20 SUB PUSH2 0x100 EXP SUB SWAP1 POP DUP1 DUP3 MLOAD AND DUP2 NOT DUP5 MLOAD AND OR DUP3 MSTORE DUP4 SWAP5 POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xA4F DUP3 PUSH2 0x256E JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH2 0x2425 DUP2 PUSH1 0x1F PUSH2 0x2B87 JUMP JUMPDEST LT ISZERO PUSH2 0x2464 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x736C6963655F6F766572666C6F77 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST DUP3 PUSH2 0x246F DUP4 DUP3 PUSH2 0x2B87 JUMP JUMPDEST LT ISZERO PUSH2 0x24AE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x736C6963655F6F766572666C6F77 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH2 0x24B8 DUP3 DUP5 PUSH2 0x2B87 JUMP JUMPDEST DUP5 MLOAD LT ISZERO PUSH2 0x24FC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x736C6963655F6F75744F66426F756E6473 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x60 DUP3 ISZERO DUP1 ISZERO PUSH2 0x251B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2565 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F DUP5 AND DUP1 ISZERO PUSH1 0x20 MUL DUP2 DUP5 ADD ADD DUP6 DUP2 ADD DUP8 DUP4 ISZERO PUSH1 0x20 MUL DUP5 DUP12 ADD ADD ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0x2554 JUMPI DUP1 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x253C JUMP JUMPDEST POP POP DUP6 DUP5 MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x40 MSTORE POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xA4F DUP3 PUSH1 0x20 ADD MLOAD PUSH1 0x0 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x2338 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x25BD JUMPI PUSH2 0x25BD PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x25BD JUMPI PUSH2 0x25BD PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x260F JUMPI PUSH2 0x260F PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2628 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2642 JUMPI PUSH2 0x2642 PUSH2 0x2584 JUMP JUMPDEST PUSH2 0x2655 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x25E6 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x266A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x269A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x26B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26BE DUP7 DUP4 DUP8 ADD PUSH2 0x2617 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26E1 DUP6 DUP3 DUP7 ADD PUSH2 0x2617 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2714 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2720 DUP5 DUP3 DUP6 ADD PUSH2 0x2617 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x5EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x274F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xC57 DUP2 PUSH2 0x2728 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x276C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP3 DUP3 LT DUP2 DUP4 GT OR ISZERO PUSH2 0x2790 JUMPI PUSH2 0x2790 PUSH2 0x2584 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 SWAP4 POP DUP5 CALLDATALOAD DUP4 MSTORE PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x27CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27DA DUP6 DUP3 DUP7 ADD PUSH2 0x2617 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x27F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2801 PUSH2 0x259A JUMP JUMPDEST SWAP1 POP DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2823 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2837 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x2849 JUMPI PUSH2 0x2849 PUSH2 0x2584 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0x285A DUP5 DUP4 ADD PUSH2 0x25E6 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0x2874 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x2892 JUMPI DUP5 CALLDATALOAD DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0x2879 JUMP JUMPDEST DUP1 DUP7 DUP9 ADD MSTORE POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x28BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x28C6 DUP2 PUSH2 0x2728 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x28D6 DUP2 PUSH2 0x2728 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x28F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x28FF DUP10 DUP4 DUP11 ADD PUSH2 0x2617 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x291C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP8 ADD SWAP1 PUSH1 0xA0 DUP3 DUP11 SUB SLT ISZERO PUSH2 0x2930 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2938 PUSH2 0x25C3 JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x294E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x295A DUP12 DUP3 DUP7 ADD PUSH2 0x275A JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x2972 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x297E DUP12 DUP3 DUP7 ADD PUSH2 0x27E7 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x2996 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x29A2 DUP12 DUP3 DUP7 ADD PUSH2 0x2617 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x29BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x29C6 DUP12 DUP3 DUP7 ADD PUSH2 0x2617 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x29EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A10 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x29F8 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2A31 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x29F5 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2A58 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x2A19 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2A6A DUP2 DUP7 PUSH2 0x2A19 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2A96 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x2A19 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x2AE3 JUMPI PUSH2 0x2AE3 PUSH2 0x2AAD JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xA4F JUMPI PUSH2 0xA4F PUSH2 0x2AAD JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xC57 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2A19 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x2B34 SWAP1 DUP4 ADD DUP6 PUSH2 0x2A19 JUMP JUMPDEST SWAP1 POP PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x2B76 SWAP1 DUP4 ADD DUP6 PUSH2 0x2A19 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xA4F JUMPI PUSH2 0xA4F PUSH2 0x2AAD JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 PUSH1 0x60 DUP2 DUP5 ADD MSTORE DUP5 MLOAD PUSH1 0x60 DUP5 ADD MSTORE DUP1 DUP6 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x80 DUP6 ADD MLOAD PUSH1 0xA0 PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x2BE5 PUSH2 0x100 DUP6 ADD DUP3 PUSH2 0x2A19 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 SUB PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD DUP6 MLOAD DUP3 MSTORE DUP3 DUP7 ADD MLOAD PUSH1 0x40 DUP5 DUP5 ADD MSTORE DUP2 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x60 DUP6 ADD SWAP2 POP DUP6 DUP4 ADD SWAP5 POP PUSH1 0x0 SWAP4 POP JUMPDEST DUP1 DUP5 LT ISZERO PUSH2 0x2C37 JUMPI DUP5 MLOAD DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 PUSH1 0x1 SWAP4 SWAP1 SWAP4 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH2 0x2C17 JUMP JUMPDEST POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xC57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 MLOAD PUSH2 0x2C79 DUP2 DUP5 PUSH1 0x20 DUP9 ADD PUSH2 0x29F5 JUMP JUMPDEST PUSH1 0x60 SWAP4 SWAP1 SWAP4 SHL PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP2 SWAP1 SWAP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x14 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2CB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xC57 DUP2 PUSH2 0x2728 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP4 AND DUP1 PUSH2 0x2D10 JUMPI PUSH2 0x2D10 PUSH2 0x2CE7 JUMP JUMPDEST DUP1 PUSH1 0xFF DUP5 AND MOD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0xA4F JUMPI PUSH2 0xA4F PUSH2 0x2AAD JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0xA4F JUMPI PUSH2 0xA4F PUSH2 0x2AAD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x2D7A JUMPI PUSH2 0x2D7A PUSH2 0x2AAD JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2D90 JUMPI PUSH2 0x2D90 PUSH2 0x2CE7 JUMP JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x49 BASEFEE DUP14 SWAP9 DELEGATECALL SLOAD 0xE5 0xE1 MULMOD PUSH28 0xFFBC409BD2ED7B797216444B82845A44D82D3AF4FE4B64736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"724:7347:131:-:0;;;1476:367;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1756:7;;1681;1690:13;1705:4;1711:12;1725:16;1681:7;1690:13;1705:4;1711:12;1725:16;3038:21:116::1;3048:10;3038:9;:21::i;:::-;3105:7;:12;;3116:1;3105:12:::0;3097:37:::1;;;::::0;-1:-1:-1;;;3097:37:116;;1269:2:181;3097:37:116::1;::::0;::::1;1251:21:181::0;1308:2;1288:18;;;1281:30;-1:-1:-1;;;1327:18:181;;;1320:42;1379:18;;3097:37:116::1;;;;;;;;;-1:-1:-1::0;;;;;3148:26:116;::::1;3140:56;;;::::0;-1:-1:-1;;;3140:56:116;;1610:2:181;3140:56:116::1;::::0;::::1;1592:21:181::0;1649:2;1629:18;;;1622:30;-1:-1:-1;;;1668:18:181;;;1661:47;1725:18;;3140:56:116::1;1408:341:181::0;3140:56:116::1;3308:16;::::0;;::::1;;::::0;-1:-1:-1;;;;;3330:10:116;;::::1;;::::0;3346:27;;::::1;;::::0;3379:29;;::::1;;::::0;3449:30;::::1;::::0;3445:88:::1;;3489:37;3509:16:::0;3489:19:::1;:37::i;:::-;3544:74;::::0;;-1:-1:-1;;;;;2012:15:181;;;1994:34;;2064:15;;;2059:2;2044:18;;2037:43;2116:15;;2096:18;;;2089:43;3544:74:116;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;1944:2:181;3544:74:116;;::::1;2857:766:::0;;;;;1209:210:119;;;;;791:19:118;802:7;791:10;;;:19;;:::i;:::-;-1:-1:-1;;;;;;;;1771:67:131::2;;::::0;-1:-1:-1;724:7347:131;;-1:-1:-1;;;;724:7347:131;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;5838::116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;2355:34:181;;2425:15;;;2420:2;2405:18;;2398:43;5921:57:116;;2290:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;1089:114:118:-;1160:6;;1146:30;;;2626:25:181;;;2682:2;2667:18;;2660:34;;;1146:30:118;;2599:18:181;1146:30:118;;;;;;;1182:6;:16;1089:114::o;14:167:181:-;92:13;;145:10;134:22;;124:33;;114:61;;171:1;168;161:12;114:61;14:167;;;:::o;186:177::-;265:13;;-1:-1:-1;;;;;307:31:181;;297:42;;287:70;;353:1;350;343:12;368:694;490:6;498;506;514;522;530;538;591:3;579:9;570:7;566:23;562:33;559:53;;;608:1;605;598:12;559:53;631:39;660:9;631:39;:::i;:::-;621:49;;689:48;733:2;722:9;718:18;689:48;:::i;:::-;679:58;;756:49;801:2;790:9;786:18;756:49;:::i;:::-;746:59;;824:49;869:2;858:9;854:18;824:49;:::i;:::-;814:59;;892:50;937:3;926:9;922:19;892:50;:::i;:::-;882:60;;961:50;1006:3;995:9;991:19;961:50;:::i;:::-;951:60;;1051:3;1040:9;1036:19;1030:26;1020:36;;368:694;;;;;;;;;;:::o;2452:248::-;724:7347:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@AMB_39042":{"entryPoint":null,"id":39042,"parameterSlots":0,"returnSlots":0},"@DOMAIN_39039":{"entryPoint":null,"id":39039,"parameterSlots":0,"returnSlots":0},"@MIRROR_DOMAIN_39048":{"entryPoint":null,"id":39048,"parameterSlots":0,"returnSlots":0},"@ROOT_MANAGER_39045":{"entryPoint":null,"id":39045,"parameterSlots":0,"returnSlots":0},"@_39157":{"entryPoint":null,"id":39157,"parameterSlots":0,"returnSlots":0},"@_copy_44611":{"entryPoint":9016,"id":44611,"parameterSlots":3,"returnSlots":1},"@_copy_44629":{"entryPoint":9582,"id":44629,"parameterSlots":1,"returnSlots":1},"@_decodeLength_44528":{"entryPoint":7418,"id":44528,"parameterSlots":1,"returnSlots":3},"@_encodeXDomainCalldata_42687":{"entryPoint":3054,"id":42687,"parameterSlots":4,"returnSlots":1},"@_getNodeID_43699":{"entryPoint":8748,"id":43699,"parameterSlots":1,"returnSlots":1},"@_getNodePath_43720":{"entryPoint":8802,"id":43720,"parameterSlots":1,"returnSlots":1},"@_getNodeValue_43742":{"entryPoint":6884,"id":43742,"parameterSlots":1,"returnSlots":1},"@_getSecureKey_44708":{"entryPoint":4956,"id":44708,"parameterSlots":1,"returnSlots":1},"@_getSharedNibbleLength_43781":{"entryPoint":8892,"id":43781,"parameterSlots":2,"returnSlots":1},"@_parseProof_43660":{"entryPoint":5594,"id":43660,"parameterSlots":1,"returnSlots":1},"@_processMessage_39220":{"entryPoint":2924,"id":39220,"parameterSlots":1,"returnSlots":0},"@_sendMessage_42438":{"entryPoint":2645,"id":42438,"parameterSlots":2,"returnSlots":0},"@_setGasCap_39346":{"entryPoint":3570,"id":39346,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":2949,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":3469,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":3635,"id":49927,"parameterSlots":1,"returnSlots":0},"@_verifySender_42280":{"entryPoint":4371,"id":42280,"parameterSlots":2,"returnSlots":1},"@_verifySender_42398":{"entryPoint":3713,"id":42398,"parameterSlots":1,"returnSlots":1},"@_verifyStateRootProof_42578":{"entryPoint":3757,"id":42578,"parameterSlots":1,"returnSlots":1},"@_verifyStorageProof_42663":{"entryPoint":3911,"id":42663,"parameterSlots":2,"returnSlots":1},"@_verifyXDomainMessage_42558":{"entryPoint":3131,"id":42558,"parameterSlots":2,"returnSlots":1},"@_walkNodePath_43584":{"entryPoint":5838,"id":43584,"parameterSlots":3,"returnSlots":3},"@acceptProposedOwner_49887":{"entryPoint":2516,"id":49887,"parameterSlots":0,"returnSlots":0},"@build_50565":{"entryPoint":4310,"id":50565,"parameterSlots":3,"returnSlots":1},"@decodeEVMAccount_43844":{"entryPoint":4605,"id":43844,"parameterSlots":1,"returnSlots":1},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@equal_43111":{"entryPoint":null,"id":43111,"parameterSlots":2,"returnSlots":1},"@get_43263":{"entryPoint":5006,"id":43263,"parameterSlots":3,"returnSlots":2},"@get_44692":{"entryPoint":4564,"id":44692,"parameterSlots":3,"returnSlots":2},"@index_50852":{"entryPoint":3202,"id":50852,"parameterSlots":3,"returnSlots":1},"@leftMask_50342":{"entryPoint":null,"id":50342,"parameterSlots":1,"returnSlots":1},"@len_50665":{"entryPoint":null,"id":50665,"parameterSlots":1,"returnSlots":1},"@loc_50615":{"entryPoint":null,"id":50615,"parameterSlots":1,"returnSlots":1},"@mirrorConnector_39051":{"entryPoint":null,"id":39051,"parameterSlots":0,"returnSlots":0},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@processMessageFromRoot_42536":{"entryPoint":1521,"id":42536,"parameterSlots":5,"returnSlots":0},"@processMessage_39189":{"entryPoint":1300,"id":39189,"parameterSlots":1,"returnSlots":0},"@processed_42350":{"entryPoint":null,"id":42350,"parameterSlots":0,"returnSlots":0},"@proposeNewOwner_49841":{"entryPoint":2358,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@readBytes32_44177":{"entryPoint":5283,"id":44177,"parameterSlots":1,"returnSlots":1},"@readBytes_44078":{"entryPoint":8264,"id":44078,"parameterSlots":1,"returnSlots":1},"@readList_44025":{"entryPoint":6926,"id":44025,"parameterSlots":1,"returnSlots":1},"@readList_44042":{"entryPoint":5225,"id":44042,"parameterSlots":1,"returnSlots":1},"@readRawBytes_44349":{"entryPoint":9228,"id":44349,"parameterSlots":1,"returnSlots":1},"@readUint256_44209":{"entryPoint":5276,"id":44209,"parameterSlots":1,"returnSlots":1},"@ref_50591":{"entryPoint":3166,"id":50591,"parameterSlots":2,"returnSlots":1},"@renounceOwnership_49874":{"entryPoint":2126,"id":49874,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@sendMessage_39419":{"entryPoint":1119,"id":39419,"parameterSlots":2,"returnSlots":0},"@setGasCap_39330":{"entryPoint":2306,"id":39330,"parameterSlots":1,"returnSlots":0},"@setMirrorConnector_39170":{"entryPoint":1466,"id":39170,"parameterSlots":1,"returnSlots":0},"@slice_42890":{"entryPoint":9239,"id":42890,"parameterSlots":3,"returnSlots":1},"@slice_42920":{"entryPoint":8838,"id":42920,"parameterSlots":2,"returnSlots":1},"@stateCommitmentChain_42346":{"entryPoint":null,"id":42346,"parameterSlots":0,"returnSlots":0},"@toBytes32_42948":{"entryPoint":8708,"id":42948,"parameterSlots":1,"returnSlots":1},"@toNibbles_43033":{"entryPoint":8399,"id":43033,"parameterSlots":1,"returnSlots":1},"@toRLPItem_43919":{"entryPoint":null,"id":43919,"parameterSlots":1,"returnSlots":1},"@unsafeBuildUnchecked_50530":{"entryPoint":4837,"id":50530,"parameterSlots":3,"returnSlots":1},"@verifyInclusionProof_43193":{"entryPoint":5540,"id":43193,"parameterSlots":4,"returnSlots":1},"@verifyInclusionProof_44664":{"entryPoint":4801,"id":44664,"parameterSlots":4,"returnSlots":1},"@verifySender_39202":{"entryPoint":2628,"id":39202,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes":{"entryPoint":9751,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_ChainBatchHeader":{"entryPoint":10074,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_ChainInclusionProof":{"entryPoint":10215,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":10045,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":11422,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_bytes_memory_ptrt_uint256t_struct$_L2MessageInclusionProof_$48308_memory_ptr":{"entryPoint":10403,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":11333,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32_fromMemory":{"entryPoint":11599,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes_memory_ptr":{"entryPoint":9963,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr":{"entryPoint":9863,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":10716,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes":{"entryPoint":10777,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_address__to_t_address__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes32_t_uint256__to_t_bytes32_t_uint256__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__nonPadded_inplace_fromStack_reversed":{"entryPoint":11367,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_uint8__to_t_uint8__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_bytes_memory_ptr_t_uint256__to_t_address_t_address_t_bytes_memory_ptr_t_uint256__fromStack_reversed":{"entryPoint":11082,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_bytes_memory_ptr_t_uint32__to_t_address_t_bytes_memory_ptr_t_uint32__fromStack_reversed":{"entryPoint":11024,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_struct$_ChainBatchHeader_$48289_memory_ptr_t_struct$_ChainInclusionProof_$48295_memory_ptr__to_t_bytes32_t_struct$_ChainBatchHeader_$48289_memory_ptr_t_struct$_ChainInclusionProof_$48295_memory_ptr__fromStack_reversed":{"entryPoint":11162,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":11005,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":10883,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":10821,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_contract$_IStateCommitmentChain_$48385__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_17a91ad79ff0ffb523ce6bd4cec4c7a194c9236c41f13271d5e41d6bee8604ec__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1945466d8297d124a74cd1815c3681e97e828860265acaaea52d7392b2e28033__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1ab842401d58445ea8b599f677fc3eda93bc858b970ca455538ed6faecc256da__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1e7ade99c3b21d92da381624c75600d4d8827f17ae2b049a19c6287b6f740403__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_20f694aafe1a6d12fb1d006f7106bcafe640e6950031327d022975fd11504e5a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_39eecfdff5c282a731d38dbcdc63390f0cf2731e0f36b58f09ddf52a0f962492__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_44be0f743167942a406d825903e699357e663ee7ba0bc41f4d988c3023209e40__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4bb18a3f980d71dabb635b00d5ab88ff971a36edd9dc79fbb99312849c9fce67__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5087e62b30af24eb438474b5124c062b0df85cd3cdf4ea6c03991870220714c1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5bd20fa0eac50a6892371dae18efeb7d2b1c7a8479150f38626e21052ac8472c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5d3d629f76473d94377d221b1f1c8f2161f7b65cab69e095662ec5d0e026c17e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_6257fa65cb3e2131130f078fa0b2c0b28695aa9be00e6235d4f462589ad75bec__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_697f2b4b75a3a3464c831501f59169c7eaa7683b6eb1ecfc8fd6c0d4011086b5__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_848de431415f0c3627b6ae0a9dbc7e8072c165b6a18cec94d54fe6ab8855172a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8aca44bbbcae5e1f45d4afe6279225dc68170211b861c4daf13bd2681ef32975__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_907f215123609329de6771559e9fb247bc5ec60375a7811e373541560cb612bc__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cbfd45d6cbabcf1f972bc6e670a58703dc2f15f95d28d9e580f69e92be3c3b29__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cca2258dcc0d08c244435525255fbef9116c9a31b4c29471218f002bbbceb7a0__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e91bee799143bea684e6e3b2005af43754801e59e0ad19b6af4182fcfef3328b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e9e55fd097279baafdb4899794fb4962ef0a885668e60ace65bd9cacedd5b27b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ea5c908f6fb9ba591809871c4bac08fa77a46fe28384af8030ba9c22e2978554__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f80c2a45ec3706bf6827e456edd04bddc9929616615a2e1a2a2462809e20942c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_faacf826bd31e02dc921ea35583cf601fa5cc747d5ee46904a18ead089c4f2e1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"allocate_memory":{"entryPoint":9702,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_3751":{"entryPoint":9626,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_3753":{"entryPoint":9667,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":11143,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":11649,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":11576,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":10986,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint8":{"entryPoint":11551,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint96":{"entryPoint":10947,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":10741,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint256":{"entryPoint":11624,"id":null,"parameterSlots":1,"returnSlots":1},"mod_t_uint8":{"entryPoint":11517,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":10925,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":11495,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":11473,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":11451,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":9604,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":10024,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:26894:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"146:102:181","statements":[{"nodeType":"YulAssignment","src":"156:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"168:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"179:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"164:3:181"},"nodeType":"YulFunctionCall","src":"164:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"156:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"198:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"213:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"229:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"234:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"225:3:181"},"nodeType":"YulFunctionCall","src":"225:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"238:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"221:3:181"},"nodeType":"YulFunctionCall","src":"221:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"209:3:181"},"nodeType":"YulFunctionCall","src":"209:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"191:6:181"},"nodeType":"YulFunctionCall","src":"191:51:181"},"nodeType":"YulExpressionStatement","src":"191:51:181"}]},"name":"abi_encode_tuple_t_contract$_IStateCommitmentChain_$48385__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"115:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"126:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"137:4:181","type":""}],"src":"14:234:181"},{"body":{"nodeType":"YulBlock","src":"352:93:181","statements":[{"nodeType":"YulAssignment","src":"362:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"374:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"385:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"370:3:181"},"nodeType":"YulFunctionCall","src":"370:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"362:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"404:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"419:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"427:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"415:3:181"},"nodeType":"YulFunctionCall","src":"415:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"397:6:181"},"nodeType":"YulFunctionCall","src":"397:42:181"},"nodeType":"YulExpressionStatement","src":"397:42:181"}]},"name":"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"321:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"332:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"343:4:181","type":""}],"src":"253:192:181"},{"body":{"nodeType":"YulBlock","src":"551:76:181","statements":[{"nodeType":"YulAssignment","src":"561:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"573:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"584:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"569:3:181"},"nodeType":"YulFunctionCall","src":"569:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"561:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"603:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"614:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"596:6:181"},"nodeType":"YulFunctionCall","src":"596:25:181"},"nodeType":"YulExpressionStatement","src":"596:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"520:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"531:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"542:4:181","type":""}],"src":"450:177:181"},{"body":{"nodeType":"YulBlock","src":"664:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"681:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"688:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"693:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"684:3:181"},"nodeType":"YulFunctionCall","src":"684:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"674:6:181"},"nodeType":"YulFunctionCall","src":"674:31:181"},"nodeType":"YulExpressionStatement","src":"674:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"721:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"724:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"714:6:181"},"nodeType":"YulFunctionCall","src":"714:15:181"},"nodeType":"YulExpressionStatement","src":"714:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"745:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"748:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"738:6:181"},"nodeType":"YulFunctionCall","src":"738:15:181"},"nodeType":"YulExpressionStatement","src":"738:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"632:127:181"},{"body":{"nodeType":"YulBlock","src":"810:211:181","statements":[{"nodeType":"YulAssignment","src":"820:21:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"836:4:181","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"830:5:181"},"nodeType":"YulFunctionCall","src":"830:11:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"820:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"850:35:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"872:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"880:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"868:3:181"},"nodeType":"YulFunctionCall","src":"868:17:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"854:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"960:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"962:16:181"},"nodeType":"YulFunctionCall","src":"962:18:181"},"nodeType":"YulExpressionStatement","src":"962:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"903:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"915:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"900:2:181"},"nodeType":"YulFunctionCall","src":"900:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"939:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"951:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"936:2:181"},"nodeType":"YulFunctionCall","src":"936:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"897:2:181"},"nodeType":"YulFunctionCall","src":"897:62:181"},"nodeType":"YulIf","src":"894:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"998:4:181","type":"","value":"0x40"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1004:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"991:6:181"},"nodeType":"YulFunctionCall","src":"991:24:181"},"nodeType":"YulExpressionStatement","src":"991:24:181"}]},"name":"allocate_memory_3751","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"799:6:181","type":""}],"src":"764:257:181"},{"body":{"nodeType":"YulBlock","src":"1072:206:181","statements":[{"nodeType":"YulAssignment","src":"1082:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1098:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1092:5:181"},"nodeType":"YulFunctionCall","src":"1092:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1082:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1110:34:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1132:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1140:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1128:3:181"},"nodeType":"YulFunctionCall","src":"1128:16:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1114:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1219:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1221:16:181"},"nodeType":"YulFunctionCall","src":"1221:18:181"},"nodeType":"YulExpressionStatement","src":"1221:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1162:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"1174:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1159:2:181"},"nodeType":"YulFunctionCall","src":"1159:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1198:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1210:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1195:2:181"},"nodeType":"YulFunctionCall","src":"1195:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1156:2:181"},"nodeType":"YulFunctionCall","src":"1156:62:181"},"nodeType":"YulIf","src":"1153:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1257:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1261:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1250:6:181"},"nodeType":"YulFunctionCall","src":"1250:22:181"},"nodeType":"YulExpressionStatement","src":"1250:22:181"}]},"name":"allocate_memory_3753","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1061:6:181","type":""}],"src":"1026:252:181"},{"body":{"nodeType":"YulBlock","src":"1328:230:181","statements":[{"nodeType":"YulAssignment","src":"1338:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1354:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1348:5:181"},"nodeType":"YulFunctionCall","src":"1348:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1338:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1366:58:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1388:6:181"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"1404:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"1410:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1400:3:181"},"nodeType":"YulFunctionCall","src":"1400:13:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1419:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1415:3:181"},"nodeType":"YulFunctionCall","src":"1415:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1396:3:181"},"nodeType":"YulFunctionCall","src":"1396:27:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1384:3:181"},"nodeType":"YulFunctionCall","src":"1384:40:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1370:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1499:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1501:16:181"},"nodeType":"YulFunctionCall","src":"1501:18:181"},"nodeType":"YulExpressionStatement","src":"1501:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1442:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"1454:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1439:2:181"},"nodeType":"YulFunctionCall","src":"1439:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1478:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1490:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1475:2:181"},"nodeType":"YulFunctionCall","src":"1475:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1436:2:181"},"nodeType":"YulFunctionCall","src":"1436:62:181"},"nodeType":"YulIf","src":"1433:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1537:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1541:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1530:6:181"},"nodeType":"YulFunctionCall","src":"1530:22:181"},"nodeType":"YulExpressionStatement","src":"1530:22:181"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"1308:4:181","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1317:6:181","type":""}],"src":"1283:275:181"},{"body":{"nodeType":"YulBlock","src":"1615:478:181","statements":[{"body":{"nodeType":"YulBlock","src":"1664:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1673:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1676:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1666:6:181"},"nodeType":"YulFunctionCall","src":"1666:12:181"},"nodeType":"YulExpressionStatement","src":"1666:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1643:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1651:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1639:3:181"},"nodeType":"YulFunctionCall","src":"1639:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"1658:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1635:3:181"},"nodeType":"YulFunctionCall","src":"1635:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1628:6:181"},"nodeType":"YulFunctionCall","src":"1628:35:181"},"nodeType":"YulIf","src":"1625:55:181"},{"nodeType":"YulVariableDeclaration","src":"1689:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1712:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1699:12:181"},"nodeType":"YulFunctionCall","src":"1699:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1693:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1758:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1760:16:181"},"nodeType":"YulFunctionCall","src":"1760:18:181"},"nodeType":"YulExpressionStatement","src":"1760:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1734:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1738:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1731:2:181"},"nodeType":"YulFunctionCall","src":"1731:26:181"},"nodeType":"YulIf","src":"1728:52:181"},{"nodeType":"YulVariableDeclaration","src":"1789:70:181","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1832:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1836:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1828:3:181"},"nodeType":"YulFunctionCall","src":"1828:13:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1847:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1843:3:181"},"nodeType":"YulFunctionCall","src":"1843:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1824:3:181"},"nodeType":"YulFunctionCall","src":"1824:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"1853:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1820:3:181"},"nodeType":"YulFunctionCall","src":"1820:38:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"1804:15:181"},"nodeType":"YulFunctionCall","src":"1804:55:181"},"variables":[{"name":"array_1","nodeType":"YulTypedName","src":"1793:7:181","type":""}]},{"expression":{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"1875:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1884:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1868:6:181"},"nodeType":"YulFunctionCall","src":"1868:19:181"},"nodeType":"YulExpressionStatement","src":"1868:19:181"},{"body":{"nodeType":"YulBlock","src":"1935:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1944:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1947:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1937:6:181"},"nodeType":"YulFunctionCall","src":"1937:12:181"},"nodeType":"YulExpressionStatement","src":"1937:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1910:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1918:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1906:3:181"},"nodeType":"YulFunctionCall","src":"1906:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1923:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1902:3:181"},"nodeType":"YulFunctionCall","src":"1902:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"1930:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1899:2:181"},"nodeType":"YulFunctionCall","src":"1899:35:181"},"nodeType":"YulIf","src":"1896:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"1977:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"1986:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1973:3:181"},"nodeType":"YulFunctionCall","src":"1973:18:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1997:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2005:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1993:3:181"},"nodeType":"YulFunctionCall","src":"1993:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2012:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1960:12:181"},"nodeType":"YulFunctionCall","src":"1960:55:181"},"nodeType":"YulExpressionStatement","src":"1960:55:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"2039:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2048:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2035:3:181"},"nodeType":"YulFunctionCall","src":"2035:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"2053:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2031:3:181"},"nodeType":"YulFunctionCall","src":"2031:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"2060:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2024:6:181"},"nodeType":"YulFunctionCall","src":"2024:38:181"},"nodeType":"YulExpressionStatement","src":"2024:38:181"},{"nodeType":"YulAssignment","src":"2071:16:181","value":{"name":"array_1","nodeType":"YulIdentifier","src":"2080:7:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"2071:5:181"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1589:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"1597:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"1605:5:181","type":""}],"src":"1563:530:181"},{"body":{"nodeType":"YulBlock","src":"2203:434:181","statements":[{"body":{"nodeType":"YulBlock","src":"2249:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2258:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2261:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2251:6:181"},"nodeType":"YulFunctionCall","src":"2251:12:181"},"nodeType":"YulExpressionStatement","src":"2251:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2224:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2233:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2220:3:181"},"nodeType":"YulFunctionCall","src":"2220:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2245:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2216:3:181"},"nodeType":"YulFunctionCall","src":"2216:32:181"},"nodeType":"YulIf","src":"2213:52:181"},{"nodeType":"YulVariableDeclaration","src":"2274:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2301:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2288:12:181"},"nodeType":"YulFunctionCall","src":"2288:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2278:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2320:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2330:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2324:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2375:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2384:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2387:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2377:6:181"},"nodeType":"YulFunctionCall","src":"2377:12:181"},"nodeType":"YulExpressionStatement","src":"2377:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2363:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2371:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2360:2:181"},"nodeType":"YulFunctionCall","src":"2360:14:181"},"nodeType":"YulIf","src":"2357:34:181"},{"nodeType":"YulAssignment","src":"2400:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2431:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"2442:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2427:3:181"},"nodeType":"YulFunctionCall","src":"2427:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2451:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"2410:16:181"},"nodeType":"YulFunctionCall","src":"2410:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2400:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2468:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2501:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2512:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2497:3:181"},"nodeType":"YulFunctionCall","src":"2497:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2484:12:181"},"nodeType":"YulFunctionCall","src":"2484:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"2472:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2545:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2554:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2557:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2547:6:181"},"nodeType":"YulFunctionCall","src":"2547:12:181"},"nodeType":"YulExpressionStatement","src":"2547:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"2531:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2541:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2528:2:181"},"nodeType":"YulFunctionCall","src":"2528:16:181"},"nodeType":"YulIf","src":"2525:36:181"},{"nodeType":"YulAssignment","src":"2570:61:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2601:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"2612:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2597:3:181"},"nodeType":"YulFunctionCall","src":"2597:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2623:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"2580:16:181"},"nodeType":"YulFunctionCall","src":"2580:51:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2570:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2161:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2172:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2184:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2192:6:181","type":""}],"src":"2098:539:181"},{"body":{"nodeType":"YulBlock","src":"2721:241:181","statements":[{"body":{"nodeType":"YulBlock","src":"2767:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2776:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2779:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2769:6:181"},"nodeType":"YulFunctionCall","src":"2769:12:181"},"nodeType":"YulExpressionStatement","src":"2769:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2742:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2751:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2738:3:181"},"nodeType":"YulFunctionCall","src":"2738:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2763:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2734:3:181"},"nodeType":"YulFunctionCall","src":"2734:32:181"},"nodeType":"YulIf","src":"2731:52:181"},{"nodeType":"YulVariableDeclaration","src":"2792:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2819:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2806:12:181"},"nodeType":"YulFunctionCall","src":"2806:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2796:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2872:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2881:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2884:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2874:6:181"},"nodeType":"YulFunctionCall","src":"2874:12:181"},"nodeType":"YulExpressionStatement","src":"2874:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2844:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2852:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2841:2:181"},"nodeType":"YulFunctionCall","src":"2841:30:181"},"nodeType":"YulIf","src":"2838:50:181"},{"nodeType":"YulAssignment","src":"2897:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2928:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"2939:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2924:3:181"},"nodeType":"YulFunctionCall","src":"2924:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2948:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"2907:16:181"},"nodeType":"YulFunctionCall","src":"2907:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2897:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2687:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2698:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2710:6:181","type":""}],"src":"2642:320:181"},{"body":{"nodeType":"YulBlock","src":"3012:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"3076:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3085:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3088:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3078:6:181"},"nodeType":"YulFunctionCall","src":"3078:12:181"},"nodeType":"YulExpressionStatement","src":"3078:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3035:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3046:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3061:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3066:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3057:3:181"},"nodeType":"YulFunctionCall","src":"3057:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3070:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3053:3:181"},"nodeType":"YulFunctionCall","src":"3053:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3042:3:181"},"nodeType":"YulFunctionCall","src":"3042:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3032:2:181"},"nodeType":"YulFunctionCall","src":"3032:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3025:6:181"},"nodeType":"YulFunctionCall","src":"3025:50:181"},"nodeType":"YulIf","src":"3022:70:181"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3001:5:181","type":""}],"src":"2967:131:181"},{"body":{"nodeType":"YulBlock","src":"3173:177:181","statements":[{"body":{"nodeType":"YulBlock","src":"3219:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3228:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3231:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3221:6:181"},"nodeType":"YulFunctionCall","src":"3221:12:181"},"nodeType":"YulExpressionStatement","src":"3221:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3194:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3203:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3190:3:181"},"nodeType":"YulFunctionCall","src":"3190:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3215:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3186:3:181"},"nodeType":"YulFunctionCall","src":"3186:32:181"},"nodeType":"YulIf","src":"3183:52:181"},{"nodeType":"YulVariableDeclaration","src":"3244:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3270:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3257:12:181"},"nodeType":"YulFunctionCall","src":"3257:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3248:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3314:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3289:24:181"},"nodeType":"YulFunctionCall","src":"3289:31:181"},"nodeType":"YulExpressionStatement","src":"3289:31:181"},{"nodeType":"YulAssignment","src":"3329:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"3339:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3329:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3139:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3150:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3162:6:181","type":""}],"src":"3103:247:181"},{"body":{"nodeType":"YulBlock","src":"3456:102:181","statements":[{"nodeType":"YulAssignment","src":"3466:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3478:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3489:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3474:3:181"},"nodeType":"YulFunctionCall","src":"3474:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3466:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3508:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3523:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3539:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3544:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3535:3:181"},"nodeType":"YulFunctionCall","src":"3535:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3548:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3531:3:181"},"nodeType":"YulFunctionCall","src":"3531:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3519:3:181"},"nodeType":"YulFunctionCall","src":"3519:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3501:6:181"},"nodeType":"YulFunctionCall","src":"3501:51:181"},"nodeType":"YulExpressionStatement","src":"3501:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3425:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3436:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3447:4:181","type":""}],"src":"3355:203:181"},{"body":{"nodeType":"YulBlock","src":"3636:740:181","statements":[{"body":{"nodeType":"YulBlock","src":"3680:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3689:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3692:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3682:6:181"},"nodeType":"YulFunctionCall","src":"3682:12:181"},"nodeType":"YulExpressionStatement","src":"3682:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"3657:3:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3662:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3653:3:181"},"nodeType":"YulFunctionCall","src":"3653:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"3674:4:181","type":"","value":"0xa0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3649:3:181"},"nodeType":"YulFunctionCall","src":"3649:30:181"},"nodeType":"YulIf","src":"3646:50:181"},{"nodeType":"YulVariableDeclaration","src":"3705:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3725:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3719:5:181"},"nodeType":"YulFunctionCall","src":"3719:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"3709:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3737:35:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3759:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3767:4:181","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3755:3:181"},"nodeType":"YulFunctionCall","src":"3755:17:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"3741:10:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3781:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3791:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3785:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3868:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"3870:16:181"},"nodeType":"YulFunctionCall","src":"3870:18:181"},"nodeType":"YulExpressionStatement","src":"3870:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3827:10:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3839:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3824:2:181"},"nodeType":"YulFunctionCall","src":"3824:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3847:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"3859:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3844:2:181"},"nodeType":"YulFunctionCall","src":"3844:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"3821:2:181"},"nodeType":"YulFunctionCall","src":"3821:46:181"},"nodeType":"YulIf","src":"3818:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3906:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3910:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3899:6:181"},"nodeType":"YulFunctionCall","src":"3899:22:181"},"nodeType":"YulExpressionStatement","src":"3899:22:181"},{"nodeType":"YulAssignment","src":"3930:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"3939:6:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3930:5:181"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3961:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3982:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3969:12:181"},"nodeType":"YulFunctionCall","src":"3969:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3954:6:181"},"nodeType":"YulFunctionCall","src":"3954:39:181"},"nodeType":"YulExpressionStatement","src":"3954:39:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4013:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4021:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4009:3:181"},"nodeType":"YulFunctionCall","src":"4009:15:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4043:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4054:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4039:3:181"},"nodeType":"YulFunctionCall","src":"4039:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4026:12:181"},"nodeType":"YulFunctionCall","src":"4026:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4002:6:181"},"nodeType":"YulFunctionCall","src":"4002:57:181"},"nodeType":"YulExpressionStatement","src":"4002:57:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4079:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4087:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4075:3:181"},"nodeType":"YulFunctionCall","src":"4075:15:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4109:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4120:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4105:3:181"},"nodeType":"YulFunctionCall","src":"4105:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4092:12:181"},"nodeType":"YulFunctionCall","src":"4092:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4068:6:181"},"nodeType":"YulFunctionCall","src":"4068:57:181"},"nodeType":"YulExpressionStatement","src":"4068:57:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4145:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4153:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4141:3:181"},"nodeType":"YulFunctionCall","src":"4141:15:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4175:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4186:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4171:3:181"},"nodeType":"YulFunctionCall","src":"4171:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4158:12:181"},"nodeType":"YulFunctionCall","src":"4158:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4134:6:181"},"nodeType":"YulFunctionCall","src":"4134:57:181"},"nodeType":"YulExpressionStatement","src":"4134:57:181"},{"nodeType":"YulVariableDeclaration","src":"4200:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4231:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4242:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4227:3:181"},"nodeType":"YulFunctionCall","src":"4227:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4214:12:181"},"nodeType":"YulFunctionCall","src":"4214:33:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"4204:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4274:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4283:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4286:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4276:6:181"},"nodeType":"YulFunctionCall","src":"4276:12:181"},"nodeType":"YulExpressionStatement","src":"4276:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4262:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4270:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4259:2:181"},"nodeType":"YulFunctionCall","src":"4259:14:181"},"nodeType":"YulIf","src":"4256:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4310:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4318:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4306:3:181"},"nodeType":"YulFunctionCall","src":"4306:16:181"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4345:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"4356:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4341:3:181"},"nodeType":"YulFunctionCall","src":"4341:22:181"},{"name":"end","nodeType":"YulIdentifier","src":"4365:3:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"4324:16:181"},"nodeType":"YulFunctionCall","src":"4324:45:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4299:6:181"},"nodeType":"YulFunctionCall","src":"4299:71:181"},"nodeType":"YulExpressionStatement","src":"4299:71:181"}]},"name":"abi_decode_struct_ChainBatchHeader","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3607:9:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"3618:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3626:5:181","type":""}],"src":"3563:813:181"},{"body":{"nodeType":"YulBlock","src":"4457:951:181","statements":[{"body":{"nodeType":"YulBlock","src":"4501:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4510:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4513:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4503:6:181"},"nodeType":"YulFunctionCall","src":"4503:12:181"},"nodeType":"YulExpressionStatement","src":"4503:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"4478:3:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"4483:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4474:3:181"},"nodeType":"YulFunctionCall","src":"4474:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"4495:4:181","type":"","value":"0x40"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4470:3:181"},"nodeType":"YulFunctionCall","src":"4470:30:181"},"nodeType":"YulIf","src":"4467:50:181"},{"nodeType":"YulAssignment","src":"4526:31:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_3751","nodeType":"YulIdentifier","src":"4535:20:181"},"nodeType":"YulFunctionCall","src":"4535:22:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"4526:5:181"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4573:5:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4593:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4580:12:181"},"nodeType":"YulFunctionCall","src":"4580:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4566:6:181"},"nodeType":"YulFunctionCall","src":"4566:38:181"},"nodeType":"YulExpressionStatement","src":"4566:38:181"},{"nodeType":"YulVariableDeclaration","src":"4613:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4623:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4617:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4634:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4665:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4676:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4661:3:181"},"nodeType":"YulFunctionCall","src":"4661:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4648:12:181"},"nodeType":"YulFunctionCall","src":"4648:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"4638:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4689:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4699:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"4693:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4744:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4753:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4756:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4746:6:181"},"nodeType":"YulFunctionCall","src":"4746:12:181"},"nodeType":"YulExpressionStatement","src":"4746:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4732:6:181"},{"name":"_2","nodeType":"YulIdentifier","src":"4740:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4729:2:181"},"nodeType":"YulFunctionCall","src":"4729:14:181"},"nodeType":"YulIf","src":"4726:34:181"},{"nodeType":"YulVariableDeclaration","src":"4769:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4783:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"4794:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4779:3:181"},"nodeType":"YulFunctionCall","src":"4779:22:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"4773:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4845:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4854:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4857:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4847:6:181"},"nodeType":"YulFunctionCall","src":"4847:12:181"},"nodeType":"YulExpressionStatement","src":"4847:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"4828:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4832:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4824:3:181"},"nodeType":"YulFunctionCall","src":"4824:13:181"},{"name":"end","nodeType":"YulIdentifier","src":"4839:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4820:3:181"},"nodeType":"YulFunctionCall","src":"4820:23:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4813:6:181"},"nodeType":"YulFunctionCall","src":"4813:31:181"},"nodeType":"YulIf","src":"4810:51:181"},{"nodeType":"YulVariableDeclaration","src":"4870:26:181","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"4893:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4880:12:181"},"nodeType":"YulFunctionCall","src":"4880:16:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"4874:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4919:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"4921:16:181"},"nodeType":"YulFunctionCall","src":"4921:18:181"},"nodeType":"YulExpressionStatement","src":"4921:18:181"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"4911:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"4915:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4908:2:181"},"nodeType":"YulFunctionCall","src":"4908:10:181"},"nodeType":"YulIf","src":"4905:36:181"},{"nodeType":"YulVariableDeclaration","src":"4950:20:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4964:1:181","type":"","value":"5"},{"name":"_4","nodeType":"YulIdentifier","src":"4967:2:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4960:3:181"},"nodeType":"YulFunctionCall","src":"4960:10:181"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"4954:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4979:39:181","value":{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"5010:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5014:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5006:3:181"},"nodeType":"YulFunctionCall","src":"5006:11:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"4990:15:181"},"nodeType":"YulFunctionCall","src":"4990:28:181"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"4983:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5027:16:181","value":{"name":"dst","nodeType":"YulIdentifier","src":"5040:3:181"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"5031:5:181","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5059:3:181"},{"name":"_4","nodeType":"YulIdentifier","src":"5064:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5052:6:181"},"nodeType":"YulFunctionCall","src":"5052:15:181"},"nodeType":"YulExpressionStatement","src":"5052:15:181"},{"nodeType":"YulAssignment","src":"5076:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5087:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5092:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5083:3:181"},"nodeType":"YulFunctionCall","src":"5083:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"5076:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"5104:34:181","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"5126:2:181"},{"name":"_5","nodeType":"YulIdentifier","src":"5130:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5122:3:181"},"nodeType":"YulFunctionCall","src":"5122:11:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5135:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5118:3:181"},"nodeType":"YulFunctionCall","src":"5118:20:181"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"5108:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5166:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5175:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5178:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5168:6:181"},"nodeType":"YulFunctionCall","src":"5168:12:181"},"nodeType":"YulExpressionStatement","src":"5168:12:181"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"5153:6:181"},{"name":"end","nodeType":"YulIdentifier","src":"5161:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5150:2:181"},"nodeType":"YulFunctionCall","src":"5150:15:181"},"nodeType":"YulIf","src":"5147:35:181"},{"nodeType":"YulVariableDeclaration","src":"5191:22:181","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"5206:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5210:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5202:3:181"},"nodeType":"YulFunctionCall","src":"5202:11:181"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"5195:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5278:86:181","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5299:3:181"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5317:3:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5304:12:181"},"nodeType":"YulFunctionCall","src":"5304:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5292:6:181"},"nodeType":"YulFunctionCall","src":"5292:30:181"},"nodeType":"YulExpressionStatement","src":"5292:30:181"},{"nodeType":"YulAssignment","src":"5335:19:181","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5346:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5351:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5342:3:181"},"nodeType":"YulFunctionCall","src":"5342:12:181"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"5335:3:181"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5233:3:181"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"5238:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5230:2:181"},"nodeType":"YulFunctionCall","src":"5230:15:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5246:23:181","statements":[{"nodeType":"YulAssignment","src":"5248:19:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5259:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5264:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5255:3:181"},"nodeType":"YulFunctionCall","src":"5255:12:181"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"5248:3:181"}]}]},"pre":{"nodeType":"YulBlock","src":"5226:3:181","statements":[]},"src":"5222:142:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5384:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5391:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5380:3:181"},"nodeType":"YulFunctionCall","src":"5380:14:181"},{"name":"dst_1","nodeType":"YulIdentifier","src":"5396:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5373:6:181"},"nodeType":"YulFunctionCall","src":"5373:29:181"},"nodeType":"YulExpressionStatement","src":"5373:29:181"}]},"name":"abi_decode_struct_ChainInclusionProof","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4428:9:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"4439:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"4447:5:181","type":""}],"src":"4381:1027:181"},{"body":{"nodeType":"YulBlock","src":"5602:1608:181","statements":[{"body":{"nodeType":"YulBlock","src":"5649:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5658:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5661:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5651:6:181"},"nodeType":"YulFunctionCall","src":"5651:12:181"},"nodeType":"YulExpressionStatement","src":"5651:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5623:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5632:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5619:3:181"},"nodeType":"YulFunctionCall","src":"5619:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5644:3:181","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5615:3:181"},"nodeType":"YulFunctionCall","src":"5615:33:181"},"nodeType":"YulIf","src":"5612:53:181"},{"nodeType":"YulVariableDeclaration","src":"5674:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5700:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5687:12:181"},"nodeType":"YulFunctionCall","src":"5687:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5678:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5744:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5719:24:181"},"nodeType":"YulFunctionCall","src":"5719:31:181"},"nodeType":"YulExpressionStatement","src":"5719:31:181"},{"nodeType":"YulAssignment","src":"5759:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"5769:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5759:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"5783:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5815:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5826:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5811:3:181"},"nodeType":"YulFunctionCall","src":"5811:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5798:12:181"},"nodeType":"YulFunctionCall","src":"5798:32:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"5787:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5864:7:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5839:24:181"},"nodeType":"YulFunctionCall","src":"5839:33:181"},"nodeType":"YulExpressionStatement","src":"5839:33:181"},{"nodeType":"YulAssignment","src":"5881:17:181","value":{"name":"value_1","nodeType":"YulIdentifier","src":"5891:7:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5881:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"5907:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5938:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5949:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5934:3:181"},"nodeType":"YulFunctionCall","src":"5934:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5921:12:181"},"nodeType":"YulFunctionCall","src":"5921:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"5911:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5962:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"5972:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5966:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6017:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6026:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6029:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6019:6:181"},"nodeType":"YulFunctionCall","src":"6019:12:181"},"nodeType":"YulExpressionStatement","src":"6019:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6005:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6013:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6002:2:181"},"nodeType":"YulFunctionCall","src":"6002:14:181"},"nodeType":"YulIf","src":"5999:34:181"},{"nodeType":"YulAssignment","src":"6042:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6073:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"6084:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6069:3:181"},"nodeType":"YulFunctionCall","src":"6069:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6093:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"6052:16:181"},"nodeType":"YulFunctionCall","src":"6052:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6042:6:181"}]},{"nodeType":"YulAssignment","src":"6110:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6137:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6148:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6133:3:181"},"nodeType":"YulFunctionCall","src":"6133:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6120:12:181"},"nodeType":"YulFunctionCall","src":"6120:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"6110:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"6161:49:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6194:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6205:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6190:3:181"},"nodeType":"YulFunctionCall","src":"6190:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6177:12:181"},"nodeType":"YulFunctionCall","src":"6177:33:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"6165:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6239:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6248:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6251:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6241:6:181"},"nodeType":"YulFunctionCall","src":"6241:12:181"},"nodeType":"YulExpressionStatement","src":"6241:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"6225:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6235:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6222:2:181"},"nodeType":"YulFunctionCall","src":"6222:16:181"},"nodeType":"YulIf","src":"6219:36:181"},{"nodeType":"YulVariableDeclaration","src":"6264:34:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6278:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"6289:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6274:3:181"},"nodeType":"YulFunctionCall","src":"6274:24:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"6268:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6337:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6346:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6349:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6339:6:181"},"nodeType":"YulFunctionCall","src":"6339:12:181"},"nodeType":"YulExpressionStatement","src":"6339:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6318:7:181"},{"name":"_2","nodeType":"YulIdentifier","src":"6327:2:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6314:3:181"},"nodeType":"YulFunctionCall","src":"6314:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"6332:3:181","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6310:3:181"},"nodeType":"YulFunctionCall","src":"6310:26:181"},"nodeType":"YulIf","src":"6307:46:181"},{"nodeType":"YulVariableDeclaration","src":"6362:37:181","value":{"arguments":[],"functionName":{"name":"allocate_memory_3753","nodeType":"YulIdentifier","src":"6377:20:181"},"nodeType":"YulFunctionCall","src":"6377:22:181"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"6366:7:181","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"6415:7:181"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6437:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6424:12:181"},"nodeType":"YulFunctionCall","src":"6424:16:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6408:6:181"},"nodeType":"YulFunctionCall","src":"6408:33:181"},"nodeType":"YulExpressionStatement","src":"6408:33:181"},{"nodeType":"YulVariableDeclaration","src":"6450:41:181","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6483:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"6487:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6479:3:181"},"nodeType":"YulFunctionCall","src":"6479:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6466:12:181"},"nodeType":"YulFunctionCall","src":"6466:25:181"},"variables":[{"name":"offset_2","nodeType":"YulTypedName","src":"6454:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6520:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6529:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6532:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6522:6:181"},"nodeType":"YulFunctionCall","src":"6522:12:181"},"nodeType":"YulExpressionStatement","src":"6522:12:181"}]},"condition":{"arguments":[{"name":"offset_2","nodeType":"YulIdentifier","src":"6506:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6516:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6503:2:181"},"nodeType":"YulFunctionCall","src":"6503:16:181"},"nodeType":"YulIf","src":"6500:36:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"6556:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"6565:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6552:3:181"},"nodeType":"YulFunctionCall","src":"6552:16:181"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6609:2:181"},{"name":"offset_2","nodeType":"YulIdentifier","src":"6613:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6605:3:181"},"nodeType":"YulFunctionCall","src":"6605:17:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6624:7:181"}],"functionName":{"name":"abi_decode_struct_ChainBatchHeader","nodeType":"YulIdentifier","src":"6570:34:181"},"nodeType":"YulFunctionCall","src":"6570:62:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6545:6:181"},"nodeType":"YulFunctionCall","src":"6545:88:181"},"nodeType":"YulExpressionStatement","src":"6545:88:181"},{"nodeType":"YulVariableDeclaration","src":"6642:41:181","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6675:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"6679:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6671:3:181"},"nodeType":"YulFunctionCall","src":"6671:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6658:12:181"},"nodeType":"YulFunctionCall","src":"6658:25:181"},"variables":[{"name":"offset_3","nodeType":"YulTypedName","src":"6646:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6712:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6721:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6724:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6714:6:181"},"nodeType":"YulFunctionCall","src":"6714:12:181"},"nodeType":"YulExpressionStatement","src":"6714:12:181"}]},"condition":{"arguments":[{"name":"offset_3","nodeType":"YulIdentifier","src":"6698:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6708:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6695:2:181"},"nodeType":"YulFunctionCall","src":"6695:16:181"},"nodeType":"YulIf","src":"6692:36:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"6748:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"6757:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6744:3:181"},"nodeType":"YulFunctionCall","src":"6744:16:181"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6804:2:181"},{"name":"offset_3","nodeType":"YulIdentifier","src":"6808:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6800:3:181"},"nodeType":"YulFunctionCall","src":"6800:17:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6819:7:181"}],"functionName":{"name":"abi_decode_struct_ChainInclusionProof","nodeType":"YulIdentifier","src":"6762:37:181"},"nodeType":"YulFunctionCall","src":"6762:65:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6737:6:181"},"nodeType":"YulFunctionCall","src":"6737:91:181"},"nodeType":"YulExpressionStatement","src":"6737:91:181"},{"nodeType":"YulVariableDeclaration","src":"6837:41:181","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6870:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"6874:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6866:3:181"},"nodeType":"YulFunctionCall","src":"6866:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6853:12:181"},"nodeType":"YulFunctionCall","src":"6853:25:181"},"variables":[{"name":"offset_4","nodeType":"YulTypedName","src":"6841:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6907:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6916:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6919:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6909:6:181"},"nodeType":"YulFunctionCall","src":"6909:12:181"},"nodeType":"YulExpressionStatement","src":"6909:12:181"}]},"condition":{"arguments":[{"name":"offset_4","nodeType":"YulIdentifier","src":"6893:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6903:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6890:2:181"},"nodeType":"YulFunctionCall","src":"6890:16:181"},"nodeType":"YulIf","src":"6887:36:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"6943:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"6952:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6939:3:181"},"nodeType":"YulFunctionCall","src":"6939:16:181"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6978:2:181"},{"name":"offset_4","nodeType":"YulIdentifier","src":"6982:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6974:3:181"},"nodeType":"YulFunctionCall","src":"6974:17:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6993:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"6957:16:181"},"nodeType":"YulFunctionCall","src":"6957:44:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6932:6:181"},"nodeType":"YulFunctionCall","src":"6932:70:181"},"nodeType":"YulExpressionStatement","src":"6932:70:181"},{"nodeType":"YulVariableDeclaration","src":"7011:42:181","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7044:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"7048:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7040:3:181"},"nodeType":"YulFunctionCall","src":"7040:12:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7027:12:181"},"nodeType":"YulFunctionCall","src":"7027:26:181"},"variables":[{"name":"offset_5","nodeType":"YulTypedName","src":"7015:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7082:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7091:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7094:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7084:6:181"},"nodeType":"YulFunctionCall","src":"7084:12:181"},"nodeType":"YulExpressionStatement","src":"7084:12:181"}]},"condition":{"arguments":[{"name":"offset_5","nodeType":"YulIdentifier","src":"7068:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"7078:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7065:2:181"},"nodeType":"YulFunctionCall","src":"7065:16:181"},"nodeType":"YulIf","src":"7062:36:181"},{"expression":{"arguments":[{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"7118:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"7127:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7114:3:181"},"nodeType":"YulFunctionCall","src":"7114:17:181"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7154:2:181"},{"name":"offset_5","nodeType":"YulIdentifier","src":"7158:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7150:3:181"},"nodeType":"YulFunctionCall","src":"7150:17:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"7169:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"7133:16:181"},"nodeType":"YulFunctionCall","src":"7133:44:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7107:6:181"},"nodeType":"YulFunctionCall","src":"7107:71:181"},"nodeType":"YulExpressionStatement","src":"7107:71:181"},{"nodeType":"YulAssignment","src":"7187:17:181","value":{"name":"value_2","nodeType":"YulIdentifier","src":"7197:7:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"7187:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_bytes_memory_ptrt_uint256t_struct$_L2MessageInclusionProof_$48308_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5536:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5547:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5559:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5567:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5575:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5583:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"5591:6:181","type":""}],"src":"5413:1797:181"},{"body":{"nodeType":"YulBlock","src":"7285:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"7331:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7340:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7343:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7333:6:181"},"nodeType":"YulFunctionCall","src":"7333:12:181"},"nodeType":"YulExpressionStatement","src":"7333:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7306:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7315:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7302:3:181"},"nodeType":"YulFunctionCall","src":"7302:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7327:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7298:3:181"},"nodeType":"YulFunctionCall","src":"7298:32:181"},"nodeType":"YulIf","src":"7295:52:181"},{"nodeType":"YulAssignment","src":"7356:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7379:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7366:12:181"},"nodeType":"YulFunctionCall","src":"7366:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7356:6:181"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7251:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7262:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7274:6:181","type":""}],"src":"7215:180:181"},{"body":{"nodeType":"YulBlock","src":"7470:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"7516:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7525:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7528:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7518:6:181"},"nodeType":"YulFunctionCall","src":"7518:12:181"},"nodeType":"YulExpressionStatement","src":"7518:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7491:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7500:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7487:3:181"},"nodeType":"YulFunctionCall","src":"7487:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7512:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7483:3:181"},"nodeType":"YulFunctionCall","src":"7483:32:181"},"nodeType":"YulIf","src":"7480:52:181"},{"nodeType":"YulAssignment","src":"7541:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7564:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7551:12:181"},"nodeType":"YulFunctionCall","src":"7551:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7541:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7436:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7447:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7459:6:181","type":""}],"src":"7400:180:181"},{"body":{"nodeType":"YulBlock","src":"7680:92:181","statements":[{"nodeType":"YulAssignment","src":"7690:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7702:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7713:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7698:3:181"},"nodeType":"YulFunctionCall","src":"7698:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7690:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7732:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7757:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7750:6:181"},"nodeType":"YulFunctionCall","src":"7750:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7743:6:181"},"nodeType":"YulFunctionCall","src":"7743:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7725:6:181"},"nodeType":"YulFunctionCall","src":"7725:41:181"},"nodeType":"YulExpressionStatement","src":"7725:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7649:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7660:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7671:4:181","type":""}],"src":"7585:187:181"},{"body":{"nodeType":"YulBlock","src":"7951:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7968:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7979:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7961:6:181"},"nodeType":"YulFunctionCall","src":"7961:21:181"},"nodeType":"YulExpressionStatement","src":"7961:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8002:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8013:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7998:3:181"},"nodeType":"YulFunctionCall","src":"7998:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8018:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7991:6:181"},"nodeType":"YulFunctionCall","src":"7991:30:181"},"nodeType":"YulExpressionStatement","src":"7991:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8041:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8052:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8037:3:181"},"nodeType":"YulFunctionCall","src":"8037:18:181"},{"hexValue":"21726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"8057:14:181","type":"","value":"!rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8030:6:181"},"nodeType":"YulFunctionCall","src":"8030:42:181"},"nodeType":"YulExpressionStatement","src":"8030:42:181"},{"nodeType":"YulAssignment","src":"8081:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8093:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8104:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8089:3:181"},"nodeType":"YulFunctionCall","src":"8089:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8081:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7928:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7942:4:181","type":""}],"src":"7777:336:181"},{"body":{"nodeType":"YulBlock","src":"8184:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"8194:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"8203:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"8198:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8263:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"8288:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"8293:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8284:3:181"},"nodeType":"YulFunctionCall","src":"8284:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"8307:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"8312:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8303:3:181"},"nodeType":"YulFunctionCall","src":"8303:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8297:5:181"},"nodeType":"YulFunctionCall","src":"8297:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8277:6:181"},"nodeType":"YulFunctionCall","src":"8277:39:181"},"nodeType":"YulExpressionStatement","src":"8277:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"8224:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"8227:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8221:2:181"},"nodeType":"YulFunctionCall","src":"8221:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"8235:19:181","statements":[{"nodeType":"YulAssignment","src":"8237:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"8246:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"8249:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8242:3:181"},"nodeType":"YulFunctionCall","src":"8242:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"8237:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"8217:3:181","statements":[]},"src":"8213:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"8346:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"8351:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8342:3:181"},"nodeType":"YulFunctionCall","src":"8342:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"8360:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8335:6:181"},"nodeType":"YulFunctionCall","src":"8335:27:181"},"nodeType":"YulExpressionStatement","src":"8335:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"8162:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"8167:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"8172:6:181","type":""}],"src":"8118:250:181"},{"body":{"nodeType":"YulBlock","src":"8422:221:181","statements":[{"nodeType":"YulVariableDeclaration","src":"8432:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8452:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8446:5:181"},"nodeType":"YulFunctionCall","src":"8446:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"8436:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8474:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"8479:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8467:6:181"},"nodeType":"YulFunctionCall","src":"8467:19:181"},"nodeType":"YulExpressionStatement","src":"8467:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8534:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"8541:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8530:3:181"},"nodeType":"YulFunctionCall","src":"8530:16:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8552:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"8557:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8548:3:181"},"nodeType":"YulFunctionCall","src":"8548:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"8564:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"8495:34:181"},"nodeType":"YulFunctionCall","src":"8495:76:181"},"nodeType":"YulExpressionStatement","src":"8495:76:181"},{"nodeType":"YulAssignment","src":"8580:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8595:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8608:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8616:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8604:3:181"},"nodeType":"YulFunctionCall","src":"8604:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8625:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"8621:3:181"},"nodeType":"YulFunctionCall","src":"8621:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8600:3:181"},"nodeType":"YulFunctionCall","src":"8600:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8591:3:181"},"nodeType":"YulFunctionCall","src":"8591:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"8632:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8587:3:181"},"nodeType":"YulFunctionCall","src":"8587:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"8580:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8399:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"8406:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"8414:3:181","type":""}],"src":"8373:270:181"},{"body":{"nodeType":"YulBlock","src":"8841:281:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8858:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8869:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8851:6:181"},"nodeType":"YulFunctionCall","src":"8851:21:181"},"nodeType":"YulExpressionStatement","src":"8851:21:181"},{"nodeType":"YulVariableDeclaration","src":"8881:58:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8912:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8924:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8935:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8920:3:181"},"nodeType":"YulFunctionCall","src":"8920:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"8895:16:181"},"nodeType":"YulFunctionCall","src":"8895:44:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"8885:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8959:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8970:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8955:3:181"},"nodeType":"YulFunctionCall","src":"8955:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"8979:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8987:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8975:3:181"},"nodeType":"YulFunctionCall","src":"8975:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8948:6:181"},"nodeType":"YulFunctionCall","src":"8948:50:181"},"nodeType":"YulExpressionStatement","src":"8948:50:181"},{"nodeType":"YulAssignment","src":"9007:40:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9032:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"9040:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"9015:16:181"},"nodeType":"YulFunctionCall","src":"9015:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9007:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9067:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9078:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9063:3:181"},"nodeType":"YulFunctionCall","src":"9063:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"9087:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9103:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"9108:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9099:3:181"},"nodeType":"YulFunctionCall","src":"9099:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"9112:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9095:3:181"},"nodeType":"YulFunctionCall","src":"9095:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9083:3:181"},"nodeType":"YulFunctionCall","src":"9083:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9056:6:181"},"nodeType":"YulFunctionCall","src":"9056:60:181"},"nodeType":"YulExpressionStatement","src":"9056:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8794:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8805:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8813:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8821:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8832:4:181","type":""}],"src":"8648:474:181"},{"body":{"nodeType":"YulBlock","src":"9301:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9318:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9329:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9311:6:181"},"nodeType":"YulFunctionCall","src":"9311:21:181"},"nodeType":"YulExpressionStatement","src":"9311:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9352:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9363:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9348:3:181"},"nodeType":"YulFunctionCall","src":"9348:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9368:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9341:6:181"},"nodeType":"YulFunctionCall","src":"9341:29:181"},"nodeType":"YulExpressionStatement","src":"9341:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9390:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9401:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9386:3:181"},"nodeType":"YulFunctionCall","src":"9386:18:181"},{"hexValue":"21414d42","kind":"string","nodeType":"YulLiteral","src":"9406:6:181","type":"","value":"!AMB"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9379:6:181"},"nodeType":"YulFunctionCall","src":"9379:34:181"},"nodeType":"YulExpressionStatement","src":"9379:34:181"},{"nodeType":"YulAssignment","src":"9422:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9434:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9445:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9430:3:181"},"nodeType":"YulFunctionCall","src":"9430:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9422:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9278:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9292:4:181","type":""}],"src":"9127:327:181"},{"body":{"nodeType":"YulBlock","src":"9606:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9623:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9634:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9616:6:181"},"nodeType":"YulFunctionCall","src":"9616:21:181"},"nodeType":"YulExpressionStatement","src":"9616:21:181"},{"nodeType":"YulAssignment","src":"9646:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9671:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9683:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9694:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9679:3:181"},"nodeType":"YulFunctionCall","src":"9679:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"9654:16:181"},"nodeType":"YulFunctionCall","src":"9654:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9646:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9718:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9729:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9714:3:181"},"nodeType":"YulFunctionCall","src":"9714:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9738:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9754:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"9759:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9750:3:181"},"nodeType":"YulFunctionCall","src":"9750:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"9763:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9746:3:181"},"nodeType":"YulFunctionCall","src":"9746:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9734:3:181"},"nodeType":"YulFunctionCall","src":"9734:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9707:6:181"},"nodeType":"YulFunctionCall","src":"9707:60:181"},"nodeType":"YulExpressionStatement","src":"9707:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9567:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9578:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9586:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9597:4:181","type":""}],"src":"9459:314:181"},{"body":{"nodeType":"YulBlock","src":"9952:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9969:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9980:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9962:6:181"},"nodeType":"YulFunctionCall","src":"9962:21:181"},"nodeType":"YulExpressionStatement","src":"9962:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10003:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10014:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9999:3:181"},"nodeType":"YulFunctionCall","src":"9999:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10019:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9992:6:181"},"nodeType":"YulFunctionCall","src":"9992:30:181"},"nodeType":"YulExpressionStatement","src":"9992:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10042:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10053:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10038:3:181"},"nodeType":"YulFunctionCall","src":"10038:18:181"},{"hexValue":"216d6972726f72436f6e6e6563746f72","kind":"string","nodeType":"YulLiteral","src":"10058:18:181","type":"","value":"!mirrorConnector"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10031:6:181"},"nodeType":"YulFunctionCall","src":"10031:46:181"},"nodeType":"YulExpressionStatement","src":"10031:46:181"},{"nodeType":"YulAssignment","src":"10086:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10098:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10109:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10094:3:181"},"nodeType":"YulFunctionCall","src":"10094:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10086:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9929:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9943:4:181","type":""}],"src":"9778:340:181"},{"body":{"nodeType":"YulBlock","src":"10297:154:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10314:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10325:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10307:6:181"},"nodeType":"YulFunctionCall","src":"10307:21:181"},"nodeType":"YulExpressionStatement","src":"10307:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10348:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10359:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10344:3:181"},"nodeType":"YulFunctionCall","src":"10344:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10364:1:181","type":"","value":"5"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10337:6:181"},"nodeType":"YulFunctionCall","src":"10337:29:181"},"nodeType":"YulExpressionStatement","src":"10337:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10386:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10397:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10382:3:181"},"nodeType":"YulFunctionCall","src":"10382:18:181"},{"hexValue":"2174686973","kind":"string","nodeType":"YulLiteral","src":"10402:7:181","type":"","value":"!this"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10375:6:181"},"nodeType":"YulFunctionCall","src":"10375:35:181"},"nodeType":"YulExpressionStatement","src":"10375:35:181"},{"nodeType":"YulAssignment","src":"10419:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10431:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10442:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10427:3:181"},"nodeType":"YulFunctionCall","src":"10427:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10419:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1945466d8297d124a74cd1815c3681e97e828860265acaaea52d7392b2e28033__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10274:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10288:4:181","type":""}],"src":"10123:328:181"},{"body":{"nodeType":"YulBlock","src":"10630:155:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10647:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10658:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10640:6:181"},"nodeType":"YulFunctionCall","src":"10640:21:181"},"nodeType":"YulExpressionStatement","src":"10640:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10681:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10692:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10677:3:181"},"nodeType":"YulFunctionCall","src":"10677:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10697:1:181","type":"","value":"6"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10670:6:181"},"nodeType":"YulFunctionCall","src":"10670:29:181"},"nodeType":"YulExpressionStatement","src":"10670:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10719:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10730:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10715:3:181"},"nodeType":"YulFunctionCall","src":"10715:18:181"},{"hexValue":"2170726f6f66","kind":"string","nodeType":"YulLiteral","src":"10735:8:181","type":"","value":"!proof"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10708:6:181"},"nodeType":"YulFunctionCall","src":"10708:36:181"},"nodeType":"YulExpressionStatement","src":"10708:36:181"},{"nodeType":"YulAssignment","src":"10753:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10765:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10776:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10761:3:181"},"nodeType":"YulFunctionCall","src":"10761:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10753:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_6257fa65cb3e2131130f078fa0b2c0b28695aa9be00e6235d4f462589ad75bec__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10607:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10621:4:181","type":""}],"src":"10456:329:181"},{"body":{"nodeType":"YulBlock","src":"10822:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10839:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10846:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"10851:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10842:3:181"},"nodeType":"YulFunctionCall","src":"10842:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10832:6:181"},"nodeType":"YulFunctionCall","src":"10832:31:181"},"nodeType":"YulExpressionStatement","src":"10832:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10879:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10882:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10872:6:181"},"nodeType":"YulFunctionCall","src":"10872:15:181"},"nodeType":"YulExpressionStatement","src":"10872:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10903:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10906:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10896:6:181"},"nodeType":"YulFunctionCall","src":"10896:15:181"},"nodeType":"YulExpressionStatement","src":"10896:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"10790:127:181"},{"body":{"nodeType":"YulBlock","src":"10970:143:181","statements":[{"nodeType":"YulVariableDeclaration","src":"10980:36:181","value":{"kind":"number","nodeType":"YulLiteral","src":"10990:26:181","type":"","value":"0xffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10984:2:181","type":""}]},{"nodeType":"YulAssignment","src":"11025:35:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11041:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"11044:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11037:3:181"},"nodeType":"YulFunctionCall","src":"11037:10:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11053:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"11056:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11049:3:181"},"nodeType":"YulFunctionCall","src":"11049:10:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11033:3:181"},"nodeType":"YulFunctionCall","src":"11033:27:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"11025:4:181"}]},{"body":{"nodeType":"YulBlock","src":"11085:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11087:16:181"},"nodeType":"YulFunctionCall","src":"11087:18:181"},"nodeType":"YulExpressionStatement","src":"11087:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"11075:4:181"},{"name":"_1","nodeType":"YulIdentifier","src":"11081:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11072:2:181"},"nodeType":"YulFunctionCall","src":"11072:12:181"},"nodeType":"YulIf","src":"11069:38:181"}]},"name":"checked_sub_t_uint96","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10952:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"10955:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"10961:4:181","type":""}],"src":"10922:191:181"},{"body":{"nodeType":"YulBlock","src":"11245:136:181","statements":[{"nodeType":"YulAssignment","src":"11255:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11267:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11278:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11263:3:181"},"nodeType":"YulFunctionCall","src":"11263:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11255:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11297:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11312:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11320:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11308:3:181"},"nodeType":"YulFunctionCall","src":"11308:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11290:6:181"},"nodeType":"YulFunctionCall","src":"11290:42:181"},"nodeType":"YulExpressionStatement","src":"11290:42:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11352:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11363:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11348:3:181"},"nodeType":"YulFunctionCall","src":"11348:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"11368:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11341:6:181"},"nodeType":"YulFunctionCall","src":"11341:34:181"},"nodeType":"YulExpressionStatement","src":"11341:34:181"}]},"name":"abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11206:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11217:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11225:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11236:4:181","type":""}],"src":"11118:263:181"},{"body":{"nodeType":"YulBlock","src":"11487:76:181","statements":[{"nodeType":"YulAssignment","src":"11497:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11509:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11520:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11505:3:181"},"nodeType":"YulFunctionCall","src":"11505:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11497:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11539:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"11550:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11532:6:181"},"nodeType":"YulFunctionCall","src":"11532:25:181"},"nodeType":"YulExpressionStatement","src":"11532:25:181"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11456:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11467:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11478:4:181","type":""}],"src":"11386:177:181"},{"body":{"nodeType":"YulBlock","src":"11617:79:181","statements":[{"nodeType":"YulAssignment","src":"11627:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11639:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"11642:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11635:3:181"},"nodeType":"YulFunctionCall","src":"11635:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"11627:4:181"}]},{"body":{"nodeType":"YulBlock","src":"11668:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11670:16:181"},"nodeType":"YulFunctionCall","src":"11670:18:181"},"nodeType":"YulExpressionStatement","src":"11670:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"11659:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"11665:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11656:2:181"},"nodeType":"YulFunctionCall","src":"11656:11:181"},"nodeType":"YulIf","src":"11653:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11599:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"11602:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"11608:4:181","type":""}],"src":"11568:128:181"},{"body":{"nodeType":"YulBlock","src":"11875:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11892:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11903:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11885:6:181"},"nodeType":"YulFunctionCall","src":"11885:21:181"},"nodeType":"YulExpressionStatement","src":"11885:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11926:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11937:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11922:3:181"},"nodeType":"YulFunctionCall","src":"11922:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11942:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11915:6:181"},"nodeType":"YulFunctionCall","src":"11915:29:181"},"nodeType":"YulExpressionStatement","src":"11915:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11964:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11975:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11960:3:181"},"nodeType":"YulFunctionCall","src":"11960:18:181"},{"hexValue":"216c656e677468","kind":"string","nodeType":"YulLiteral","src":"11980:9:181","type":"","value":"!length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11953:6:181"},"nodeType":"YulFunctionCall","src":"11953:37:181"},"nodeType":"YulExpressionStatement","src":"11953:37:181"},{"nodeType":"YulAssignment","src":"11999:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12011:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12022:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12007:3:181"},"nodeType":"YulFunctionCall","src":"12007:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11999:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11852:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11866:4:181","type":""}],"src":"11701:330:181"},{"body":{"nodeType":"YulBlock","src":"12155:98:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12172:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12183:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12165:6:181"},"nodeType":"YulFunctionCall","src":"12165:21:181"},"nodeType":"YulExpressionStatement","src":"12165:21:181"},{"nodeType":"YulAssignment","src":"12195:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12220:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12232:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12243:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12228:3:181"},"nodeType":"YulFunctionCall","src":"12228:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"12203:16:181"},"nodeType":"YulFunctionCall","src":"12203:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12195:4:181"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12124:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12135:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12146:4:181","type":""}],"src":"12036:217:181"},{"body":{"nodeType":"YulBlock","src":"12431:227:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12448:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12463:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12479:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"12484:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12475:3:181"},"nodeType":"YulFunctionCall","src":"12475:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"12488:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12471:3:181"},"nodeType":"YulFunctionCall","src":"12471:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12459:3:181"},"nodeType":"YulFunctionCall","src":"12459:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12441:6:181"},"nodeType":"YulFunctionCall","src":"12441:51:181"},"nodeType":"YulExpressionStatement","src":"12441:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12512:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12523:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12508:3:181"},"nodeType":"YulFunctionCall","src":"12508:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12528:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12501:6:181"},"nodeType":"YulFunctionCall","src":"12501:30:181"},"nodeType":"YulExpressionStatement","src":"12501:30:181"},{"nodeType":"YulAssignment","src":"12540:52:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12565:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12577:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12588:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12573:3:181"},"nodeType":"YulFunctionCall","src":"12573:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"12548:16:181"},"nodeType":"YulFunctionCall","src":"12548:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12540:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12612:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12623:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12608:3:181"},"nodeType":"YulFunctionCall","src":"12608:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"12632:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"12640:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12628:3:181"},"nodeType":"YulFunctionCall","src":"12628:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12601:6:181"},"nodeType":"YulFunctionCall","src":"12601:51:181"},"nodeType":"YulExpressionStatement","src":"12601:51:181"}]},"name":"abi_encode_tuple_t_address_t_bytes_memory_ptr_t_uint32__to_t_address_t_bytes_memory_ptr_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12384:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12395:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12403:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12411:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12422:4:181","type":""}],"src":"12258:400:181"},{"body":{"nodeType":"YulBlock","src":"12792:175:181","statements":[{"nodeType":"YulAssignment","src":"12802:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12814:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12825:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12810:3:181"},"nodeType":"YulFunctionCall","src":"12810:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12802:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"12837:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12855:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"12860:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12851:3:181"},"nodeType":"YulFunctionCall","src":"12851:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"12864:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12847:3:181"},"nodeType":"YulFunctionCall","src":"12847:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12841:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12882:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12897:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12905:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12893:3:181"},"nodeType":"YulFunctionCall","src":"12893:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12875:6:181"},"nodeType":"YulFunctionCall","src":"12875:34:181"},"nodeType":"YulExpressionStatement","src":"12875:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12929:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12940:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12925:3:181"},"nodeType":"YulFunctionCall","src":"12925:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12949:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12957:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12945:3:181"},"nodeType":"YulFunctionCall","src":"12945:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12918:6:181"},"nodeType":"YulFunctionCall","src":"12918:43:181"},"nodeType":"YulExpressionStatement","src":"12918:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12753:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12764:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12772:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12783:4:181","type":""}],"src":"12663:304:181"},{"body":{"nodeType":"YulBlock","src":"13175:285:181","statements":[{"nodeType":"YulVariableDeclaration","src":"13185:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13203:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"13208:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13199:3:181"},"nodeType":"YulFunctionCall","src":"13199:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"13212:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13195:3:181"},"nodeType":"YulFunctionCall","src":"13195:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13189:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13230:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13245:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13253:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13241:3:181"},"nodeType":"YulFunctionCall","src":"13241:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13223:6:181"},"nodeType":"YulFunctionCall","src":"13223:34:181"},"nodeType":"YulExpressionStatement","src":"13223:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13277:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13288:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13273:3:181"},"nodeType":"YulFunctionCall","src":"13273:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13297:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13305:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13293:3:181"},"nodeType":"YulFunctionCall","src":"13293:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13266:6:181"},"nodeType":"YulFunctionCall","src":"13266:43:181"},"nodeType":"YulExpressionStatement","src":"13266:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13329:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13340:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13325:3:181"},"nodeType":"YulFunctionCall","src":"13325:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13345:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13318:6:181"},"nodeType":"YulFunctionCall","src":"13318:31:181"},"nodeType":"YulExpressionStatement","src":"13318:31:181"},{"nodeType":"YulAssignment","src":"13358:53:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"13383:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13395:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13406:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13391:3:181"},"nodeType":"YulFunctionCall","src":"13391:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"13366:16:181"},"nodeType":"YulFunctionCall","src":"13366:45:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13358:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13431:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13442:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13427:3:181"},"nodeType":"YulFunctionCall","src":"13427:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"13447:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13420:6:181"},"nodeType":"YulFunctionCall","src":"13420:34:181"},"nodeType":"YulExpressionStatement","src":"13420:34:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_bytes_memory_ptr_t_uint256__to_t_address_t_address_t_bytes_memory_ptr_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13120:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13131:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13139:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13147:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13155:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13166:4:181","type":""}],"src":"12972:488:181"},{"body":{"nodeType":"YulBlock","src":"13513:77:181","statements":[{"nodeType":"YulAssignment","src":"13523:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13534:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"13537:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13530:3:181"},"nodeType":"YulFunctionCall","src":"13530:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"13523:3:181"}]},{"body":{"nodeType":"YulBlock","src":"13562:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13564:16:181"},"nodeType":"YulFunctionCall","src":"13564:18:181"},"nodeType":"YulExpressionStatement","src":"13564:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13554:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"13557:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13551:2:181"},"nodeType":"YulFunctionCall","src":"13551:10:181"},"nodeType":"YulIf","src":"13548:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"13496:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"13499:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"13505:3:181","type":""}],"src":"13465:125:181"},{"body":{"nodeType":"YulBlock","src":"13778:269:181","statements":[{"nodeType":"YulAssignment","src":"13788:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13800:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13811:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13796:3:181"},"nodeType":"YulFunctionCall","src":"13796:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13788:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"13824:36:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13834:26:181","type":"","value":"0xffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13828:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13876:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13891:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13899:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13887:3:181"},"nodeType":"YulFunctionCall","src":"13887:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13869:6:181"},"nodeType":"YulFunctionCall","src":"13869:34:181"},"nodeType":"YulExpressionStatement","src":"13869:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13923:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13934:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13919:3:181"},"nodeType":"YulFunctionCall","src":"13919:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13943:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13951:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13939:3:181"},"nodeType":"YulFunctionCall","src":"13939:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13912:6:181"},"nodeType":"YulFunctionCall","src":"13912:43:181"},"nodeType":"YulExpressionStatement","src":"13912:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13975:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13986:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13971:3:181"},"nodeType":"YulFunctionCall","src":"13971:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"13991:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13964:6:181"},"nodeType":"YulFunctionCall","src":"13964:34:181"},"nodeType":"YulExpressionStatement","src":"13964:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14018:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14029:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14014:3:181"},"nodeType":"YulFunctionCall","src":"14014:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"14034:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14007:6:181"},"nodeType":"YulFunctionCall","src":"14007:34:181"},"nodeType":"YulExpressionStatement","src":"14007:34:181"}]},"name":"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13723:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13734:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13742:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13750:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13758:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13769:4:181","type":""}],"src":"13595:452:181"},{"body":{"nodeType":"YulBlock","src":"14181:119:181","statements":[{"nodeType":"YulAssignment","src":"14191:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14203:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14214:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14199:3:181"},"nodeType":"YulFunctionCall","src":"14199:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14191:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14233:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"14244:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14226:6:181"},"nodeType":"YulFunctionCall","src":"14226:25:181"},"nodeType":"YulExpressionStatement","src":"14226:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14271:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14282:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14267:3:181"},"nodeType":"YulFunctionCall","src":"14267:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"14287:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14260:6:181"},"nodeType":"YulFunctionCall","src":"14260:34:181"},"nodeType":"YulExpressionStatement","src":"14260:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14142:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14153:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14161:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14172:4:181","type":""}],"src":"14052:248:181"},{"body":{"nodeType":"YulBlock","src":"14608:1109:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14625:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"14636:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14618:6:181"},"nodeType":"YulFunctionCall","src":"14618:25:181"},"nodeType":"YulExpressionStatement","src":"14618:25:181"},{"nodeType":"YulVariableDeclaration","src":"14652:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14662:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14656:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14684:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14695:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14680:3:181"},"nodeType":"YulFunctionCall","src":"14680:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14700:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14673:6:181"},"nodeType":"YulFunctionCall","src":"14673:30:181"},"nodeType":"YulExpressionStatement","src":"14673:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14723:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14734:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14719:3:181"},"nodeType":"YulFunctionCall","src":"14719:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14745:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14739:5:181"},"nodeType":"YulFunctionCall","src":"14739:13:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14712:6:181"},"nodeType":"YulFunctionCall","src":"14712:41:181"},"nodeType":"YulExpressionStatement","src":"14712:41:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14773:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14784:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14769:3:181"},"nodeType":"YulFunctionCall","src":"14769:19:181"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14800:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14808:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14796:3:181"},"nodeType":"YulFunctionCall","src":"14796:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14790:5:181"},"nodeType":"YulFunctionCall","src":"14790:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14762:6:181"},"nodeType":"YulFunctionCall","src":"14762:51:181"},"nodeType":"YulExpressionStatement","src":"14762:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14833:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14844:4:181","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14829:3:181"},"nodeType":"YulFunctionCall","src":"14829:20:181"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14861:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"14869:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14857:3:181"},"nodeType":"YulFunctionCall","src":"14857:17:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14851:5:181"},"nodeType":"YulFunctionCall","src":"14851:24:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14822:6:181"},"nodeType":"YulFunctionCall","src":"14822:54:181"},"nodeType":"YulExpressionStatement","src":"14822:54:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14896:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14907:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14892:3:181"},"nodeType":"YulFunctionCall","src":"14892:19:181"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14923:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"14931:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14919:3:181"},"nodeType":"YulFunctionCall","src":"14919:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14913:5:181"},"nodeType":"YulFunctionCall","src":"14913:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14885:6:181"},"nodeType":"YulFunctionCall","src":"14885:51:181"},"nodeType":"YulExpressionStatement","src":"14885:51:181"},{"nodeType":"YulVariableDeclaration","src":"14945:43:181","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14975:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"14983:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14971:3:181"},"nodeType":"YulFunctionCall","src":"14971:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14965:5:181"},"nodeType":"YulFunctionCall","src":"14965:23:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"14949:12:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15008:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15019:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15004:3:181"},"nodeType":"YulFunctionCall","src":"15004:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"15025:4:181","type":"","value":"0xa0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14997:6:181"},"nodeType":"YulFunctionCall","src":"14997:33:181"},"nodeType":"YulExpressionStatement","src":"14997:33:181"},{"nodeType":"YulVariableDeclaration","src":"15039:62:181","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"15067:12:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15085:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15096:3:181","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15081:3:181"},"nodeType":"YulFunctionCall","src":"15081:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"15050:16:181"},"nodeType":"YulFunctionCall","src":"15050:51:181"},"variables":[{"name":"end","nodeType":"YulTypedName","src":"15043:3:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15121:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15132:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15117:3:181"},"nodeType":"YulFunctionCall","src":"15117:20:181"},{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"15143:3:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"15148:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15139:3:181"},"nodeType":"YulFunctionCall","src":"15139:19:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15110:6:181"},"nodeType":"YulFunctionCall","src":"15110:49:181"},"nodeType":"YulExpressionStatement","src":"15110:49:181"},{"nodeType":"YulVariableDeclaration","src":"15168:28:181","value":{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"15186:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"15191:4:181","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15182:3:181"},"nodeType":"YulFunctionCall","src":"15182:14:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"15172:6:181","type":""}]},{"expression":{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"15212:3:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15223:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15217:5:181"},"nodeType":"YulFunctionCall","src":"15217:13:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15205:6:181"},"nodeType":"YulFunctionCall","src":"15205:26:181"},"nodeType":"YulExpressionStatement","src":"15205:26:181"},{"nodeType":"YulVariableDeclaration","src":"15240:44:181","value":{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15272:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"15280:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15268:3:181"},"nodeType":"YulFunctionCall","src":"15268:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15262:5:181"},"nodeType":"YulFunctionCall","src":"15262:22:181"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"15244:14:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"15304:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"15309:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15300:3:181"},"nodeType":"YulFunctionCall","src":"15300:12:181"},{"kind":"number","nodeType":"YulLiteral","src":"15314:4:181","type":"","value":"0x40"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15293:6:181"},"nodeType":"YulFunctionCall","src":"15293:26:181"},"nodeType":"YulExpressionStatement","src":"15293:26:181"},{"nodeType":"YulVariableDeclaration","src":"15328:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"15339:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"15332:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15354:35:181","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"15374:14:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15368:5:181"},"nodeType":"YulFunctionCall","src":"15368:21:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"15358:6:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"15405:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"15413:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15398:6:181"},"nodeType":"YulFunctionCall","src":"15398:22:181"},"nodeType":"YulExpressionStatement","src":"15398:22:181"},{"nodeType":"YulAssignment","src":"15429:19:181","value":{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"15440:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"15445:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15436:3:181"},"nodeType":"YulFunctionCall","src":"15436:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"15429:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"15457:37:181","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"15475:14:181"},{"name":"_1","nodeType":"YulIdentifier","src":"15491:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15471:3:181"},"nodeType":"YulFunctionCall","src":"15471:23:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"15461:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15503:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"15512:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"15507:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"15571:120:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"15592:3:181"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"15603:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15597:5:181"},"nodeType":"YulFunctionCall","src":"15597:13:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15585:6:181"},"nodeType":"YulFunctionCall","src":"15585:26:181"},"nodeType":"YulExpressionStatement","src":"15585:26:181"},{"nodeType":"YulAssignment","src":"15624:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"15635:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"15640:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15631:3:181"},"nodeType":"YulFunctionCall","src":"15631:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"15624:3:181"}]},{"nodeType":"YulAssignment","src":"15656:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"15670:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"15678:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15666:3:181"},"nodeType":"YulFunctionCall","src":"15666:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"15656:6:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"15533:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"15536:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15530:2:181"},"nodeType":"YulFunctionCall","src":"15530:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"15544:18:181","statements":[{"nodeType":"YulAssignment","src":"15546:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"15555:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"15558:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15551:3:181"},"nodeType":"YulFunctionCall","src":"15551:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"15546:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"15526:3:181","statements":[]},"src":"15522:169:181"},{"nodeType":"YulAssignment","src":"15700:11:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"15708:3:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15700:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_struct$_ChainBatchHeader_$48289_memory_ptr_t_struct$_ChainInclusionProof_$48295_memory_ptr__to_t_bytes32_t_struct$_ChainBatchHeader_$48289_memory_ptr_t_struct$_ChainInclusionProof_$48295_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14561:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14572:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14580:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14588:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14599:4:181","type":""}],"src":"14305:1412:181"},{"body":{"nodeType":"YulBlock","src":"15800:199:181","statements":[{"body":{"nodeType":"YulBlock","src":"15846:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15855:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15858:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15848:6:181"},"nodeType":"YulFunctionCall","src":"15848:12:181"},"nodeType":"YulExpressionStatement","src":"15848:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"15821:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"15830:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15817:3:181"},"nodeType":"YulFunctionCall","src":"15817:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"15842:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"15813:3:181"},"nodeType":"YulFunctionCall","src":"15813:32:181"},"nodeType":"YulIf","src":"15810:52:181"},{"nodeType":"YulVariableDeclaration","src":"15871:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15890:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15884:5:181"},"nodeType":"YulFunctionCall","src":"15884:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"15875:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"15953:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15962:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15965:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15955:6:181"},"nodeType":"YulFunctionCall","src":"15955:12:181"},"nodeType":"YulExpressionStatement","src":"15955:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15922:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15943:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"15936:6:181"},"nodeType":"YulFunctionCall","src":"15936:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"15929:6:181"},"nodeType":"YulFunctionCall","src":"15929:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"15919:2:181"},"nodeType":"YulFunctionCall","src":"15919:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"15912:6:181"},"nodeType":"YulFunctionCall","src":"15912:40:181"},"nodeType":"YulIf","src":"15909:60:181"},{"nodeType":"YulAssignment","src":"15978:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"15988:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"15978:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15766:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"15777:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"15789:6:181","type":""}],"src":"15722:277:181"},{"body":{"nodeType":"YulBlock","src":"16169:263:181","statements":[{"nodeType":"YulVariableDeclaration","src":"16179:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16199:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16193:5:181"},"nodeType":"YulFunctionCall","src":"16193:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"16183:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16254:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"16262:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16250:3:181"},"nodeType":"YulFunctionCall","src":"16250:17:181"},{"name":"pos","nodeType":"YulIdentifier","src":"16269:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"16274:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"16215:34:181"},"nodeType":"YulFunctionCall","src":"16215:66:181"},"nodeType":"YulExpressionStatement","src":"16215:66:181"},{"nodeType":"YulVariableDeclaration","src":"16290:29:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16307:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"16312:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16303:3:181"},"nodeType":"YulFunctionCall","src":"16303:16:181"},"variables":[{"name":"end_1","nodeType":"YulTypedName","src":"16294:5:181","type":""}]},{"expression":{"arguments":[{"name":"end_1","nodeType":"YulIdentifier","src":"16335:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16350:2:181","type":"","value":"96"},{"name":"value1","nodeType":"YulIdentifier","src":"16354:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16346:3:181"},"nodeType":"YulFunctionCall","src":"16346:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16367:26:181","type":"","value":"0xffffffffffffffffffffffff"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"16363:3:181"},"nodeType":"YulFunctionCall","src":"16363:31:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16342:3:181"},"nodeType":"YulFunctionCall","src":"16342:53:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16328:6:181"},"nodeType":"YulFunctionCall","src":"16328:68:181"},"nodeType":"YulExpressionStatement","src":"16328:68:181"},{"nodeType":"YulAssignment","src":"16405:21:181","value":{"arguments":[{"name":"end_1","nodeType":"YulIdentifier","src":"16416:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"16423:2:181","type":"","value":"20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16412:3:181"},"nodeType":"YulFunctionCall","src":"16412:14:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"16405:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"16137:3:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16142:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16150:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"16161:3:181","type":""}],"src":"16004:428:181"},{"body":{"nodeType":"YulBlock","src":"16584:100:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16601:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"16606:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16594:6:181"},"nodeType":"YulFunctionCall","src":"16594:19:181"},"nodeType":"YulExpressionStatement","src":"16594:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16633:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"16638:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16629:3:181"},"nodeType":"YulFunctionCall","src":"16629:12:181"},{"name":"value1","nodeType":"YulIdentifier","src":"16643:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16622:6:181"},"nodeType":"YulFunctionCall","src":"16622:28:181"},"nodeType":"YulExpressionStatement","src":"16622:28:181"},{"nodeType":"YulAssignment","src":"16659:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16670:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"16675:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16666:3:181"},"nodeType":"YulFunctionCall","src":"16666:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"16659:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes32_t_uint256__to_t_bytes32_t_uint256__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"16552:3:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16557:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16565:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"16576:3:181","type":""}],"src":"16437:247:181"},{"body":{"nodeType":"YulBlock","src":"16808:110:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16825:3:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16838:2:181","type":"","value":"96"},{"name":"value0","nodeType":"YulIdentifier","src":"16842:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16834:3:181"},"nodeType":"YulFunctionCall","src":"16834:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16855:26:181","type":"","value":"0xffffffffffffffffffffffff"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"16851:3:181"},"nodeType":"YulFunctionCall","src":"16851:31:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16830:3:181"},"nodeType":"YulFunctionCall","src":"16830:53:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16818:6:181"},"nodeType":"YulFunctionCall","src":"16818:66:181"},"nodeType":"YulExpressionStatement","src":"16818:66:181"},{"nodeType":"YulAssignment","src":"16893:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16904:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"16909:2:181","type":"","value":"20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16900:3:181"},"nodeType":"YulFunctionCall","src":"16900:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"16893:3:181"}]}]},"name":"abi_encode_tuple_packed_t_address__to_t_address__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"16784:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16789:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"16800:3:181","type":""}],"src":"16689:229:181"},{"body":{"nodeType":"YulBlock","src":"17097:307:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17114:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17125:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17107:6:181"},"nodeType":"YulFunctionCall","src":"17107:21:181"},"nodeType":"YulExpressionStatement","src":"17107:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17148:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17159:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17144:3:181"},"nodeType":"YulFunctionCall","src":"17144:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17164:2:181","type":"","value":"77"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17137:6:181"},"nodeType":"YulFunctionCall","src":"17137:30:181"},"nodeType":"YulExpressionStatement","src":"17137:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17187:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17198:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17183:3:181"},"nodeType":"YulFunctionCall","src":"17183:18:181"},{"hexValue":"4d6573736167652070617373696e67207072656465706c6f7920686173206e6f","kind":"string","nodeType":"YulLiteral","src":"17203:34:181","type":"","value":"Message passing predeploy has no"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17176:6:181"},"nodeType":"YulFunctionCall","src":"17176:62:181"},"nodeType":"YulExpressionStatement","src":"17176:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17258:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17269:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17254:3:181"},"nodeType":"YulFunctionCall","src":"17254:18:181"},{"hexValue":"74206265656e20696e697469616c697a6564206f7220696e76616c6964207072","kind":"string","nodeType":"YulLiteral","src":"17274:34:181","type":"","value":"t been initialized or invalid pr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17247:6:181"},"nodeType":"YulFunctionCall","src":"17247:62:181"},"nodeType":"YulExpressionStatement","src":"17247:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17329:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17340:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17325:3:181"},"nodeType":"YulFunctionCall","src":"17325:19:181"},{"hexValue":"6f6f662070726f76696465642e","kind":"string","nodeType":"YulLiteral","src":"17346:15:181","type":"","value":"oof provided."}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17318:6:181"},"nodeType":"YulFunctionCall","src":"17318:44:181"},"nodeType":"YulExpressionStatement","src":"17318:44:181"},{"nodeType":"YulAssignment","src":"17371:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17383:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17394:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17379:3:181"},"nodeType":"YulFunctionCall","src":"17379:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17371:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_39eecfdff5c282a731d38dbcdc63390f0cf2731e0f36b58f09ddf52a0f962492__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17074:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17088:4:181","type":""}],"src":"16923:481:181"},{"body":{"nodeType":"YulBlock","src":"17528:63:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17545:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"17550:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17538:6:181"},"nodeType":"YulFunctionCall","src":"17538:19:181"},"nodeType":"YulExpressionStatement","src":"17538:19:181"},{"nodeType":"YulAssignment","src":"17566:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17577:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"17582:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17573:3:181"},"nodeType":"YulFunctionCall","src":"17573:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"17566:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"17504:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17509:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"17520:3:181","type":""}],"src":"17409:182:181"},{"body":{"nodeType":"YulBlock","src":"17711:92:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17728:3:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17741:3:181","type":"","value":"248"},{"name":"value0","nodeType":"YulIdentifier","src":"17746:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"17737:3:181"},"nodeType":"YulFunctionCall","src":"17737:16:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17759:3:181","type":"","value":"248"},{"kind":"number","nodeType":"YulLiteral","src":"17764:3:181","type":"","value":"255"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"17755:3:181"},"nodeType":"YulFunctionCall","src":"17755:13:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17733:3:181"},"nodeType":"YulFunctionCall","src":"17733:36:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17721:6:181"},"nodeType":"YulFunctionCall","src":"17721:49:181"},"nodeType":"YulExpressionStatement","src":"17721:49:181"},{"nodeType":"YulAssignment","src":"17779:18:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17790:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"17795:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17786:3:181"},"nodeType":"YulFunctionCall","src":"17786:11:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"17779:3:181"}]}]},"name":"abi_encode_tuple_packed_t_uint8__to_t_uint8__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"17687:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17692:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"17703:3:181","type":""}],"src":"17596:207:181"},{"body":{"nodeType":"YulBlock","src":"17982:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17999:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18010:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17992:6:181"},"nodeType":"YulFunctionCall","src":"17992:21:181"},"nodeType":"YulExpressionStatement","src":"17992:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18033:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18044:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18029:3:181"},"nodeType":"YulFunctionCall","src":"18029:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18049:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18022:6:181"},"nodeType":"YulFunctionCall","src":"18022:29:181"},"nodeType":"YulExpressionStatement","src":"18022:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18071:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18082:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18067:3:181"},"nodeType":"YulFunctionCall","src":"18067:18:181"},{"hexValue":"21627269646765","kind":"string","nodeType":"YulLiteral","src":"18087:9:181","type":"","value":"!bridge"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18060:6:181"},"nodeType":"YulFunctionCall","src":"18060:37:181"},"nodeType":"YulExpressionStatement","src":"18060:37:181"},{"nodeType":"YulAssignment","src":"18106:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18118:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18129:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18114:3:181"},"nodeType":"YulFunctionCall","src":"18114:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18106:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5bd20fa0eac50a6892371dae18efeb7d2b1c7a8479150f38626e21052ac8472c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17959:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17973:4:181","type":""}],"src":"17808:330:181"},{"body":{"nodeType":"YulBlock","src":"18224:170:181","statements":[{"body":{"nodeType":"YulBlock","src":"18270:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18279:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18282:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"18272:6:181"},"nodeType":"YulFunctionCall","src":"18272:12:181"},"nodeType":"YulExpressionStatement","src":"18272:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"18245:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"18254:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"18241:3:181"},"nodeType":"YulFunctionCall","src":"18241:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"18266:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"18237:3:181"},"nodeType":"YulFunctionCall","src":"18237:32:181"},"nodeType":"YulIf","src":"18234:52:181"},{"nodeType":"YulVariableDeclaration","src":"18295:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18314:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18308:5:181"},"nodeType":"YulFunctionCall","src":"18308:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"18299:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18358:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"18333:24:181"},"nodeType":"YulFunctionCall","src":"18333:31:181"},"nodeType":"YulExpressionStatement","src":"18333:31:181"},{"nodeType":"YulAssignment","src":"18373:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"18383:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"18373:6:181"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18190:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"18201:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"18213:6:181","type":""}],"src":"18143:251:181"},{"body":{"nodeType":"YulBlock","src":"18431:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18448:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18455:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"18460:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"18451:3:181"},"nodeType":"YulFunctionCall","src":"18451:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18441:6:181"},"nodeType":"YulFunctionCall","src":"18441:31:181"},"nodeType":"YulExpressionStatement","src":"18441:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18488:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"18491:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18481:6:181"},"nodeType":"YulFunctionCall","src":"18481:15:181"},"nodeType":"YulExpressionStatement","src":"18481:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18512:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18515:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"18505:6:181"},"nodeType":"YulFunctionCall","src":"18505:15:181"},"nodeType":"YulExpressionStatement","src":"18505:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"18399:127:181"},{"body":{"nodeType":"YulBlock","src":"18705:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18722:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18733:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18715:6:181"},"nodeType":"YulFunctionCall","src":"18715:21:181"},"nodeType":"YulExpressionStatement","src":"18715:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18756:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18767:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18752:3:181"},"nodeType":"YulFunctionCall","src":"18752:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18772:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18745:6:181"},"nodeType":"YulFunctionCall","src":"18745:30:181"},"nodeType":"YulExpressionStatement","src":"18745:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18795:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18806:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18791:3:181"},"nodeType":"YulFunctionCall","src":"18791:18:181"},{"hexValue":"217472756e6361746564","kind":"string","nodeType":"YulLiteral","src":"18811:12:181","type":"","value":"!truncated"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18784:6:181"},"nodeType":"YulFunctionCall","src":"18784:40:181"},"nodeType":"YulExpressionStatement","src":"18784:40:181"},{"nodeType":"YulAssignment","src":"18833:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18845:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18856:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18841:3:181"},"nodeType":"YulFunctionCall","src":"18841:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18833:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18682:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18696:4:181","type":""}],"src":"18531:334:181"},{"body":{"nodeType":"YulBlock","src":"19044:176:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19061:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19072:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19054:6:181"},"nodeType":"YulFunctionCall","src":"19054:21:181"},"nodeType":"YulExpressionStatement","src":"19054:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19095:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19106:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19091:3:181"},"nodeType":"YulFunctionCall","src":"19091:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19111:2:181","type":"","value":"26"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19084:6:181"},"nodeType":"YulFunctionCall","src":"19084:30:181"},"nodeType":"YulExpressionStatement","src":"19084:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19134:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19145:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19130:3:181"},"nodeType":"YulFunctionCall","src":"19130:18:181"},{"hexValue":"50726f76696465642070726f6f6620697320696e76616c69642e","kind":"string","nodeType":"YulLiteral","src":"19150:28:181","type":"","value":"Provided proof is invalid."}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19123:6:181"},"nodeType":"YulFunctionCall","src":"19123:56:181"},"nodeType":"YulExpressionStatement","src":"19123:56:181"},{"nodeType":"YulAssignment","src":"19188:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19200:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19211:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19196:3:181"},"nodeType":"YulFunctionCall","src":"19196:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19188:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1e7ade99c3b21d92da381624c75600d4d8827f17ae2b049a19c6287b6f740403__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19021:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19035:4:181","type":""}],"src":"18870:350:181"},{"body":{"nodeType":"YulBlock","src":"19399:176:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19416:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19427:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19409:6:181"},"nodeType":"YulFunctionCall","src":"19409:21:181"},"nodeType":"YulExpressionStatement","src":"19409:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19450:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19461:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19446:3:181"},"nodeType":"YulFunctionCall","src":"19446:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19466:2:181","type":"","value":"26"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19439:6:181"},"nodeType":"YulFunctionCall","src":"19439:30:181"},"nodeType":"YulExpressionStatement","src":"19439:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19489:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19500:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19485:3:181"},"nodeType":"YulFunctionCall","src":"19485:18:181"},{"hexValue":"496e76616c696420524c5020627974657333322076616c75652e","kind":"string","nodeType":"YulLiteral","src":"19505:28:181","type":"","value":"Invalid RLP bytes32 value."}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19478:6:181"},"nodeType":"YulFunctionCall","src":"19478:56:181"},"nodeType":"YulExpressionStatement","src":"19478:56:181"},{"nodeType":"YulAssignment","src":"19543:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19555:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19566:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19551:3:181"},"nodeType":"YulFunctionCall","src":"19551:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19543:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_697f2b4b75a3a3464c831501f59169c7eaa7683b6eb1ecfc8fd6c0d4011086b5__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19376:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19390:4:181","type":""}],"src":"19225:350:181"},{"body":{"nodeType":"YulBlock","src":"19612:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19629:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19636:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"19641:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"19632:3:181"},"nodeType":"YulFunctionCall","src":"19632:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19622:6:181"},"nodeType":"YulFunctionCall","src":"19622:31:181"},"nodeType":"YulExpressionStatement","src":"19622:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19669:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"19672:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19662:6:181"},"nodeType":"YulFunctionCall","src":"19662:15:181"},"nodeType":"YulExpressionStatement","src":"19662:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19693:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19696:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19686:6:181"},"nodeType":"YulFunctionCall","src":"19686:15:181"},"nodeType":"YulExpressionStatement","src":"19686:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"19580:127:181"},{"body":{"nodeType":"YulBlock","src":"19886:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19903:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19914:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19896:6:181"},"nodeType":"YulFunctionCall","src":"19896:21:181"},"nodeType":"YulExpressionStatement","src":"19896:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19937:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19948:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19933:3:181"},"nodeType":"YulFunctionCall","src":"19933:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19953:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19926:6:181"},"nodeType":"YulFunctionCall","src":"19926:30:181"},"nodeType":"YulExpressionStatement","src":"19926:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19976:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19987:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19972:3:181"},"nodeType":"YulFunctionCall","src":"19972:18:181"},{"hexValue":"496e76616c696420726f6f742068617368","kind":"string","nodeType":"YulLiteral","src":"19992:19:181","type":"","value":"Invalid root hash"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19965:6:181"},"nodeType":"YulFunctionCall","src":"19965:47:181"},"nodeType":"YulExpressionStatement","src":"19965:47:181"},{"nodeType":"YulAssignment","src":"20021:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20033:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20044:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20029:3:181"},"nodeType":"YulFunctionCall","src":"20029:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20021:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f80c2a45ec3706bf6827e456edd04bddc9929616615a2e1a2a2462809e20942c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19863:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19877:4:181","type":""}],"src":"19712:341:181"},{"body":{"nodeType":"YulBlock","src":"20232:177:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20249:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20260:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20242:6:181"},"nodeType":"YulFunctionCall","src":"20242:21:181"},"nodeType":"YulExpressionStatement","src":"20242:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20283:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20294:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20279:3:181"},"nodeType":"YulFunctionCall","src":"20279:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20299:2:181","type":"","value":"27"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20272:6:181"},"nodeType":"YulFunctionCall","src":"20272:30:181"},"nodeType":"YulExpressionStatement","src":"20272:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20322:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20333:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20318:3:181"},"nodeType":"YulFunctionCall","src":"20318:18:181"},{"hexValue":"496e76616c6964206c6172676520696e7465726e616c2068617368","kind":"string","nodeType":"YulLiteral","src":"20338:29:181","type":"","value":"Invalid large internal hash"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20311:6:181"},"nodeType":"YulFunctionCall","src":"20311:57:181"},"nodeType":"YulExpressionStatement","src":"20311:57:181"},{"nodeType":"YulAssignment","src":"20377:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20389:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20400:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20385:3:181"},"nodeType":"YulFunctionCall","src":"20385:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20377:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_17a91ad79ff0ffb523ce6bd4cec4c7a194c9236c41f13271d5e41d6bee8604ec__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20209:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20223:4:181","type":""}],"src":"20058:351:181"},{"body":{"nodeType":"YulBlock","src":"20588:176:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20605:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20616:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20598:6:181"},"nodeType":"YulFunctionCall","src":"20598:21:181"},"nodeType":"YulExpressionStatement","src":"20598:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20639:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20650:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20635:3:181"},"nodeType":"YulFunctionCall","src":"20635:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20655:2:181","type":"","value":"26"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20628:6:181"},"nodeType":"YulFunctionCall","src":"20628:30:181"},"nodeType":"YulExpressionStatement","src":"20628:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20678:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20689:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20674:3:181"},"nodeType":"YulFunctionCall","src":"20674:18:181"},{"hexValue":"496e76616c696420696e7465726e616c206e6f64652068617368","kind":"string","nodeType":"YulLiteral","src":"20694:28:181","type":"","value":"Invalid internal node hash"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20667:6:181"},"nodeType":"YulFunctionCall","src":"20667:56:181"},"nodeType":"YulExpressionStatement","src":"20667:56:181"},{"nodeType":"YulAssignment","src":"20732:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20744:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20755:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20740:3:181"},"nodeType":"YulFunctionCall","src":"20740:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20732:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e9e55fd097279baafdb4899794fb4962ef0a885668e60ace65bd9cacedd5b27b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20565:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20579:4:181","type":""}],"src":"20414:350:181"},{"body":{"nodeType":"YulBlock","src":"20801:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20818:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20825:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"20830:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"20821:3:181"},"nodeType":"YulFunctionCall","src":"20821:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20811:6:181"},"nodeType":"YulFunctionCall","src":"20811:31:181"},"nodeType":"YulExpressionStatement","src":"20811:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20858:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"20861:4:181","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20851:6:181"},"nodeType":"YulFunctionCall","src":"20851:15:181"},"nodeType":"YulExpressionStatement","src":"20851:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20882:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20885:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20875:6:181"},"nodeType":"YulFunctionCall","src":"20875:15:181"},"nodeType":"YulExpressionStatement","src":"20875:15:181"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"20769:127:181"},{"body":{"nodeType":"YulBlock","src":"20937:121:181","statements":[{"nodeType":"YulVariableDeclaration","src":"20947:23:181","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"20962:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"20965:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20958:3:181"},"nodeType":"YulFunctionCall","src":"20958:12:181"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"20951:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"20994:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x12","nodeType":"YulIdentifier","src":"20996:16:181"},"nodeType":"YulFunctionCall","src":"20996:18:181"},"nodeType":"YulExpressionStatement","src":"20996:18:181"}]},"condition":{"arguments":[{"name":"y_1","nodeType":"YulIdentifier","src":"20989:3:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"20982:6:181"},"nodeType":"YulFunctionCall","src":"20982:11:181"},"nodeType":"YulIf","src":"20979:37:181"},{"nodeType":"YulAssignment","src":"21025:27:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"21038:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"21041:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21034:3:181"},"nodeType":"YulFunctionCall","src":"21034:12:181"},{"name":"y_1","nodeType":"YulIdentifier","src":"21048:3:181"}],"functionName":{"name":"mod","nodeType":"YulIdentifier","src":"21030:3:181"},"nodeType":"YulFunctionCall","src":"21030:22:181"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"21025:1:181"}]}]},"name":"mod_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"20922:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"20925:1:181","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"20931:1:181","type":""}],"src":"20901:157:181"},{"body":{"nodeType":"YulBlock","src":"21110:104:181","statements":[{"nodeType":"YulAssignment","src":"21120:39:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"21136:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"21139:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21132:3:181"},"nodeType":"YulFunctionCall","src":"21132:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"21150:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"21153:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21146:3:181"},"nodeType":"YulFunctionCall","src":"21146:12:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21128:3:181"},"nodeType":"YulFunctionCall","src":"21128:31:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"21120:4:181"}]},{"body":{"nodeType":"YulBlock","src":"21186:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"21188:16:181"},"nodeType":"YulFunctionCall","src":"21188:18:181"},"nodeType":"YulExpressionStatement","src":"21188:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"21174:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"21180:4:181","type":"","value":"0xff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21171:2:181"},"nodeType":"YulFunctionCall","src":"21171:14:181"},"nodeType":"YulIf","src":"21168:40:181"}]},"name":"checked_sub_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"21092:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"21095:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"21101:4:181","type":""}],"src":"21063:151:181"},{"body":{"nodeType":"YulBlock","src":"21393:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21410:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21421:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21403:6:181"},"nodeType":"YulFunctionCall","src":"21403:21:181"},"nodeType":"YulExpressionStatement","src":"21403:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21444:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21455:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21440:3:181"},"nodeType":"YulFunctionCall","src":"21440:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"21460:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21433:6:181"},"nodeType":"YulFunctionCall","src":"21433:30:181"},"nodeType":"YulExpressionStatement","src":"21433:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21483:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21494:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21479:3:181"},"nodeType":"YulFunctionCall","src":"21479:18:181"},{"hexValue":"52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e20","kind":"string","nodeType":"YulLiteral","src":"21499:34:181","type":"","value":"Received a node with an unknown "}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21472:6:181"},"nodeType":"YulFunctionCall","src":"21472:62:181"},"nodeType":"YulExpressionStatement","src":"21472:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21554:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21565:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21550:3:181"},"nodeType":"YulFunctionCall","src":"21550:18:181"},{"hexValue":"707265666978","kind":"string","nodeType":"YulLiteral","src":"21570:8:181","type":"","value":"prefix"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21543:6:181"},"nodeType":"YulFunctionCall","src":"21543:36:181"},"nodeType":"YulExpressionStatement","src":"21543:36:181"},{"nodeType":"YulAssignment","src":"21588:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21600:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21611:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21596:3:181"},"nodeType":"YulFunctionCall","src":"21596:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21588:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_907f215123609329de6771559e9fb247bc5ec60375a7811e373541560cb612bc__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21370:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21384:4:181","type":""}],"src":"21219:402:181"},{"body":{"nodeType":"YulBlock","src":"21800:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21817:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21828:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21810:6:181"},"nodeType":"YulFunctionCall","src":"21810:21:181"},"nodeType":"YulExpressionStatement","src":"21810:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21851:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21862:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21847:3:181"},"nodeType":"YulFunctionCall","src":"21847:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"21867:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21840:6:181"},"nodeType":"YulFunctionCall","src":"21840:30:181"},"nodeType":"YulExpressionStatement","src":"21840:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21890:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21901:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21886:3:181"},"nodeType":"YulFunctionCall","src":"21886:18:181"},{"hexValue":"526563656976656420616e20756e706172736561626c65206e6f64652e","kind":"string","nodeType":"YulLiteral","src":"21906:31:181","type":"","value":"Received an unparseable node."}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21879:6:181"},"nodeType":"YulFunctionCall","src":"21879:59:181"},"nodeType":"YulExpressionStatement","src":"21879:59:181"},{"nodeType":"YulAssignment","src":"21947:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21959:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21970:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21955:3:181"},"nodeType":"YulFunctionCall","src":"21955:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21947:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_44be0f743167942a406d825903e699357e663ee7ba0bc41f4d988c3023209e40__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21777:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21791:4:181","type":""}],"src":"21626:353:181"},{"body":{"nodeType":"YulBlock","src":"22158:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22175:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22186:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22168:6:181"},"nodeType":"YulFunctionCall","src":"22168:21:181"},"nodeType":"YulExpressionStatement","src":"22168:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22209:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22220:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22205:3:181"},"nodeType":"YulFunctionCall","src":"22205:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22225:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22198:6:181"},"nodeType":"YulFunctionCall","src":"22198:30:181"},"nodeType":"YulExpressionStatement","src":"22198:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22248:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22259:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22244:3:181"},"nodeType":"YulFunctionCall","src":"22244:18:181"},{"hexValue":"496e76616c696420524c50206c6973742076616c75652e","kind":"string","nodeType":"YulLiteral","src":"22264:25:181","type":"","value":"Invalid RLP list value."}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22237:6:181"},"nodeType":"YulFunctionCall","src":"22237:53:181"},"nodeType":"YulExpressionStatement","src":"22237:53:181"},{"nodeType":"YulAssignment","src":"22299:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22311:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22322:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22307:3:181"},"nodeType":"YulFunctionCall","src":"22307:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22299:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_848de431415f0c3627b6ae0a9dbc7e8072c165b6a18cec94d54fe6ab8855172a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22135:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22149:4:181","type":""}],"src":"21984:347:181"},{"body":{"nodeType":"YulBlock","src":"22510:232:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22527:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22538:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22520:6:181"},"nodeType":"YulFunctionCall","src":"22520:21:181"},"nodeType":"YulExpressionStatement","src":"22520:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22561:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22572:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22557:3:181"},"nodeType":"YulFunctionCall","src":"22557:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22577:2:181","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22550:6:181"},"nodeType":"YulFunctionCall","src":"22550:30:181"},"nodeType":"YulExpressionStatement","src":"22550:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22600:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22611:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22596:3:181"},"nodeType":"YulFunctionCall","src":"22596:18:181"},{"hexValue":"50726f766964656420524c50206c6973742065786365656473206d6178206c69","kind":"string","nodeType":"YulLiteral","src":"22616:34:181","type":"","value":"Provided RLP list exceeds max li"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22589:6:181"},"nodeType":"YulFunctionCall","src":"22589:62:181"},"nodeType":"YulExpressionStatement","src":"22589:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22671:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22682:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22667:3:181"},"nodeType":"YulFunctionCall","src":"22667:18:181"},{"hexValue":"7374206c656e6774682e","kind":"string","nodeType":"YulLiteral","src":"22687:12:181","type":"","value":"st length."}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22660:6:181"},"nodeType":"YulFunctionCall","src":"22660:40:181"},"nodeType":"YulExpressionStatement","src":"22660:40:181"},{"nodeType":"YulAssignment","src":"22709:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22721:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22732:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22717:3:181"},"nodeType":"YulFunctionCall","src":"22717:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22709:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5087e62b30af24eb438474b5124c062b0df85cd3cdf4ea6c03991870220714c1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22487:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22501:4:181","type":""}],"src":"22336:406:181"},{"body":{"nodeType":"YulBlock","src":"22921:174:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22938:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22949:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22931:6:181"},"nodeType":"YulFunctionCall","src":"22931:21:181"},"nodeType":"YulExpressionStatement","src":"22931:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22972:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22983:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22968:3:181"},"nodeType":"YulFunctionCall","src":"22968:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22988:2:181","type":"","value":"24"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22961:6:181"},"nodeType":"YulFunctionCall","src":"22961:30:181"},"nodeType":"YulExpressionStatement","src":"22961:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23011:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23022:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23007:3:181"},"nodeType":"YulFunctionCall","src":"23007:18:181"},{"hexValue":"524c50206974656d2063616e6e6f74206265206e756c6c2e","kind":"string","nodeType":"YulLiteral","src":"23027:26:181","type":"","value":"RLP item cannot be null."}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23000:6:181"},"nodeType":"YulFunctionCall","src":"23000:54:181"},"nodeType":"YulExpressionStatement","src":"23000:54:181"},{"nodeType":"YulAssignment","src":"23063:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23075:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23086:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23071:3:181"},"nodeType":"YulFunctionCall","src":"23071:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23063:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cbfd45d6cbabcf1f972bc6e670a58703dc2f15f95d28d9e580f69e92be3c3b29__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22898:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22912:4:181","type":""}],"src":"22747:348:181"},{"body":{"nodeType":"YulBlock","src":"23274:175:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23291:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23302:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23284:6:181"},"nodeType":"YulFunctionCall","src":"23284:21:181"},"nodeType":"YulExpressionStatement","src":"23284:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23325:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23336:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23321:3:181"},"nodeType":"YulFunctionCall","src":"23321:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23341:2:181","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23314:6:181"},"nodeType":"YulFunctionCall","src":"23314:30:181"},"nodeType":"YulExpressionStatement","src":"23314:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23364:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23375:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23360:3:181"},"nodeType":"YulFunctionCall","src":"23360:18:181"},{"hexValue":"496e76616c696420524c502073686f727420737472696e672e","kind":"string","nodeType":"YulLiteral","src":"23380:27:181","type":"","value":"Invalid RLP short string."}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23353:6:181"},"nodeType":"YulFunctionCall","src":"23353:55:181"},"nodeType":"YulExpressionStatement","src":"23353:55:181"},{"nodeType":"YulAssignment","src":"23417:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23429:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23440:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23425:3:181"},"nodeType":"YulFunctionCall","src":"23425:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23417:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8aca44bbbcae5e1f45d4afe6279225dc68170211b861c4daf13bd2681ef32975__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23251:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23265:4:181","type":""}],"src":"23100:349:181"},{"body":{"nodeType":"YulBlock","src":"23628:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23645:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23656:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23638:6:181"},"nodeType":"YulFunctionCall","src":"23638:21:181"},"nodeType":"YulExpressionStatement","src":"23638:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23679:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23690:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23675:3:181"},"nodeType":"YulFunctionCall","src":"23675:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23695:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23668:6:181"},"nodeType":"YulFunctionCall","src":"23668:30:181"},"nodeType":"YulExpressionStatement","src":"23668:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23718:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23729:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23714:3:181"},"nodeType":"YulFunctionCall","src":"23714:18:181"},{"hexValue":"496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e","kind":"string","nodeType":"YulLiteral","src":"23734:33:181","type":"","value":"Invalid RLP long string length."}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23707:6:181"},"nodeType":"YulFunctionCall","src":"23707:61:181"},"nodeType":"YulExpressionStatement","src":"23707:61:181"},{"nodeType":"YulAssignment","src":"23777:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23789:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23800:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23785:3:181"},"nodeType":"YulFunctionCall","src":"23785:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23777:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4bb18a3f980d71dabb635b00d5ab88ff971a36edd9dc79fbb99312849c9fce67__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23605:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23619:4:181","type":""}],"src":"23454:355:181"},{"body":{"nodeType":"YulBlock","src":"23988:174:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24005:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24016:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23998:6:181"},"nodeType":"YulFunctionCall","src":"23998:21:181"},"nodeType":"YulExpressionStatement","src":"23998:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24039:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24050:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24035:3:181"},"nodeType":"YulFunctionCall","src":"24035:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24055:2:181","type":"","value":"24"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24028:6:181"},"nodeType":"YulFunctionCall","src":"24028:30:181"},"nodeType":"YulExpressionStatement","src":"24028:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24078:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24089:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24074:3:181"},"nodeType":"YulFunctionCall","src":"24074:18:181"},{"hexValue":"496e76616c696420524c50206c6f6e6720737472696e672e","kind":"string","nodeType":"YulLiteral","src":"24094:26:181","type":"","value":"Invalid RLP long string."}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24067:6:181"},"nodeType":"YulFunctionCall","src":"24067:54:181"},"nodeType":"YulExpressionStatement","src":"24067:54:181"},{"nodeType":"YulAssignment","src":"24130:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24142:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24153:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24138:3:181"},"nodeType":"YulFunctionCall","src":"24138:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24130:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e91bee799143bea684e6e3b2005af43754801e59e0ad19b6af4182fcfef3328b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23965:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23979:4:181","type":""}],"src":"23814:348:181"},{"body":{"nodeType":"YulBlock","src":"24341:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24358:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24369:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24351:6:181"},"nodeType":"YulFunctionCall","src":"24351:21:181"},"nodeType":"YulExpressionStatement","src":"24351:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24392:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24403:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24388:3:181"},"nodeType":"YulFunctionCall","src":"24388:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24408:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24381:6:181"},"nodeType":"YulFunctionCall","src":"24381:30:181"},"nodeType":"YulExpressionStatement","src":"24381:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24431:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24442:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24427:3:181"},"nodeType":"YulFunctionCall","src":"24427:18:181"},{"hexValue":"496e76616c696420524c502073686f7274206c6973742e","kind":"string","nodeType":"YulLiteral","src":"24447:25:181","type":"","value":"Invalid RLP short list."}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24420:6:181"},"nodeType":"YulFunctionCall","src":"24420:53:181"},"nodeType":"YulExpressionStatement","src":"24420:53:181"},{"nodeType":"YulAssignment","src":"24482:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24494:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24505:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24490:3:181"},"nodeType":"YulFunctionCall","src":"24490:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24482:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_faacf826bd31e02dc921ea35583cf601fa5cc747d5ee46904a18ead089c4f2e1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24318:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24332:4:181","type":""}],"src":"24167:347:181"},{"body":{"nodeType":"YulBlock","src":"24693:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24710:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24721:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24703:6:181"},"nodeType":"YulFunctionCall","src":"24703:21:181"},"nodeType":"YulExpressionStatement","src":"24703:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24744:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24755:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24740:3:181"},"nodeType":"YulFunctionCall","src":"24740:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24760:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24733:6:181"},"nodeType":"YulFunctionCall","src":"24733:30:181"},"nodeType":"YulExpressionStatement","src":"24733:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24783:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24794:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24779:3:181"},"nodeType":"YulFunctionCall","src":"24779:18:181"},{"hexValue":"496e76616c696420524c50206c6f6e67206c697374206c656e6774682e","kind":"string","nodeType":"YulLiteral","src":"24799:31:181","type":"","value":"Invalid RLP long list length."}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24772:6:181"},"nodeType":"YulFunctionCall","src":"24772:59:181"},"nodeType":"YulExpressionStatement","src":"24772:59:181"},{"nodeType":"YulAssignment","src":"24840:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24852:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24863:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24848:3:181"},"nodeType":"YulFunctionCall","src":"24848:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24840:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1ab842401d58445ea8b599f677fc3eda93bc858b970ca455538ed6faecc256da__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24670:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24684:4:181","type":""}],"src":"24519:353:181"},{"body":{"nodeType":"YulBlock","src":"25051:172:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25068:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25079:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25061:6:181"},"nodeType":"YulFunctionCall","src":"25061:21:181"},"nodeType":"YulExpressionStatement","src":"25061:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25102:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25113:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25098:3:181"},"nodeType":"YulFunctionCall","src":"25098:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"25118:2:181","type":"","value":"22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25091:6:181"},"nodeType":"YulFunctionCall","src":"25091:30:181"},"nodeType":"YulExpressionStatement","src":"25091:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25141:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25152:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25137:3:181"},"nodeType":"YulFunctionCall","src":"25137:18:181"},{"hexValue":"496e76616c696420524c50206c6f6e67206c6973742e","kind":"string","nodeType":"YulLiteral","src":"25157:24:181","type":"","value":"Invalid RLP long list."}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25130:6:181"},"nodeType":"YulFunctionCall","src":"25130:52:181"},"nodeType":"YulExpressionStatement","src":"25130:52:181"},{"nodeType":"YulAssignment","src":"25191:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25203:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25214:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25199:3:181"},"nodeType":"YulFunctionCall","src":"25199:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25191:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_20f694aafe1a6d12fb1d006f7106bcafe640e6950031327d022975fd11504e5a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25028:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25042:4:181","type":""}],"src":"24877:346:181"},{"body":{"nodeType":"YulBlock","src":"25402:174:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25419:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25430:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25412:6:181"},"nodeType":"YulFunctionCall","src":"25412:21:181"},"nodeType":"YulExpressionStatement","src":"25412:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25453:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25464:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25449:3:181"},"nodeType":"YulFunctionCall","src":"25449:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"25469:2:181","type":"","value":"24"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25442:6:181"},"nodeType":"YulFunctionCall","src":"25442:30:181"},"nodeType":"YulExpressionStatement","src":"25442:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25492:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25503:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25488:3:181"},"nodeType":"YulFunctionCall","src":"25488:18:181"},{"hexValue":"496e76616c696420524c502062797465732076616c75652e","kind":"string","nodeType":"YulLiteral","src":"25508:26:181","type":"","value":"Invalid RLP bytes value."}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25481:6:181"},"nodeType":"YulFunctionCall","src":"25481:54:181"},"nodeType":"YulExpressionStatement","src":"25481:54:181"},{"nodeType":"YulAssignment","src":"25544:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25556:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25567:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25552:3:181"},"nodeType":"YulFunctionCall","src":"25552:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25544:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ea5c908f6fb9ba591809871c4bac08fa77a46fe28384af8030ba9c22e2978554__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25379:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25393:4:181","type":""}],"src":"25228:348:181"},{"body":{"nodeType":"YulBlock","src":"25633:116:181","statements":[{"nodeType":"YulAssignment","src":"25643:20:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"25658:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"25661:1:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"25654:3:181"},"nodeType":"YulFunctionCall","src":"25654:9:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"25643:7:181"}]},{"body":{"nodeType":"YulBlock","src":"25721:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"25723:16:181"},"nodeType":"YulFunctionCall","src":"25723:18:181"},"nodeType":"YulExpressionStatement","src":"25723:18:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"25692:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"25685:6:181"},"nodeType":"YulFunctionCall","src":"25685:9:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"25699:1:181"},{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"25706:7:181"},{"name":"x","nodeType":"YulIdentifier","src":"25715:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"25702:3:181"},"nodeType":"YulFunctionCall","src":"25702:15:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"25696:2:181"},"nodeType":"YulFunctionCall","src":"25696:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"25682:2:181"},"nodeType":"YulFunctionCall","src":"25682:37:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"25675:6:181"},"nodeType":"YulFunctionCall","src":"25675:45:181"},"nodeType":"YulIf","src":"25672:71:181"}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"25612:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"25615:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"25621:7:181","type":""}],"src":"25581:168:181"},{"body":{"nodeType":"YulBlock","src":"25835:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"25881:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25890:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"25893:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"25883:6:181"},"nodeType":"YulFunctionCall","src":"25883:12:181"},"nodeType":"YulExpressionStatement","src":"25883:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"25856:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"25865:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25852:3:181"},"nodeType":"YulFunctionCall","src":"25852:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"25877:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"25848:3:181"},"nodeType":"YulFunctionCall","src":"25848:32:181"},"nodeType":"YulIf","src":"25845:52:181"},{"nodeType":"YulAssignment","src":"25906:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25922:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25916:5:181"},"nodeType":"YulFunctionCall","src":"25916:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"25906:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25801:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"25812:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"25824:6:181","type":""}],"src":"25754:184:181"},{"body":{"nodeType":"YulBlock","src":"25990:88:181","statements":[{"body":{"nodeType":"YulBlock","src":"26021:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"26023:16:181"},"nodeType":"YulFunctionCall","src":"26023:18:181"},"nodeType":"YulExpressionStatement","src":"26023:18:181"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"26006:5:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26017:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"26013:3:181"},"nodeType":"YulFunctionCall","src":"26013:6:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"26003:2:181"},"nodeType":"YulFunctionCall","src":"26003:17:181"},"nodeType":"YulIf","src":"26000:43:181"},{"nodeType":"YulAssignment","src":"26052:20:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"26063:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"26070:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26059:3:181"},"nodeType":"YulFunctionCall","src":"26059:13:181"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"26052:3:181"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"25972:5:181","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"25982:3:181","type":""}],"src":"25943:135:181"},{"body":{"nodeType":"YulBlock","src":"26129:74:181","statements":[{"body":{"nodeType":"YulBlock","src":"26152:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x12","nodeType":"YulIdentifier","src":"26154:16:181"},"nodeType":"YulFunctionCall","src":"26154:18:181"},"nodeType":"YulExpressionStatement","src":"26154:18:181"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"26149:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"26142:6:181"},"nodeType":"YulFunctionCall","src":"26142:9:181"},"nodeType":"YulIf","src":"26139:35:181"},{"nodeType":"YulAssignment","src":"26183:14:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"26192:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"26195:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"26188:3:181"},"nodeType":"YulFunctionCall","src":"26188:9:181"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"26183:1:181"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"26114:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"26117:1:181","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"26123:1:181","type":""}],"src":"26083:120:181"},{"body":{"nodeType":"YulBlock","src":"26382:164:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26399:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26410:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26392:6:181"},"nodeType":"YulFunctionCall","src":"26392:21:181"},"nodeType":"YulExpressionStatement","src":"26392:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26433:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26444:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26429:3:181"},"nodeType":"YulFunctionCall","src":"26429:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"26449:2:181","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26422:6:181"},"nodeType":"YulFunctionCall","src":"26422:30:181"},"nodeType":"YulExpressionStatement","src":"26422:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26472:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26483:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26468:3:181"},"nodeType":"YulFunctionCall","src":"26468:18:181"},{"hexValue":"736c6963655f6f766572666c6f77","kind":"string","nodeType":"YulLiteral","src":"26488:16:181","type":"","value":"slice_overflow"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26461:6:181"},"nodeType":"YulFunctionCall","src":"26461:44:181"},"nodeType":"YulExpressionStatement","src":"26461:44:181"},{"nodeType":"YulAssignment","src":"26514:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26526:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26537:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26522:3:181"},"nodeType":"YulFunctionCall","src":"26522:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26514:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5d3d629f76473d94377d221b1f1c8f2161f7b65cab69e095662ec5d0e026c17e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26359:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26373:4:181","type":""}],"src":"26208:338:181"},{"body":{"nodeType":"YulBlock","src":"26725:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26742:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26753:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26735:6:181"},"nodeType":"YulFunctionCall","src":"26735:21:181"},"nodeType":"YulExpressionStatement","src":"26735:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26776:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26787:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26772:3:181"},"nodeType":"YulFunctionCall","src":"26772:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"26792:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26765:6:181"},"nodeType":"YulFunctionCall","src":"26765:30:181"},"nodeType":"YulExpressionStatement","src":"26765:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26815:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26826:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26811:3:181"},"nodeType":"YulFunctionCall","src":"26811:18:181"},{"hexValue":"736c6963655f6f75744f66426f756e6473","kind":"string","nodeType":"YulLiteral","src":"26831:19:181","type":"","value":"slice_outOfBounds"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26804:6:181"},"nodeType":"YulFunctionCall","src":"26804:47:181"},"nodeType":"YulExpressionStatement","src":"26804:47:181"},{"nodeType":"YulAssignment","src":"26860:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26872:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26883:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26868:3:181"},"nodeType":"YulFunctionCall","src":"26868:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26860:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_cca2258dcc0d08c244435525255fbef9116c9a31b4c29471218f002bbbceb7a0__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26702:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26716:4:181","type":""}],"src":"26551:341:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_contract$_IStateCommitmentChain_$48385__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_3751() -> memPtr\n    {\n        memPtr := mload(0x40)\n        let newFreePtr := add(memPtr, 0x40)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(0x40, newFreePtr)\n    }\n    function allocate_memory_3753() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 160)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        if gt(_1, 0xffffffffffffffff) { panic_error_0x41() }\n        let array_1 := allocate_memory(add(and(add(_1, 0x1f), not(31)), 0x20))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(array_1, _1), 0x20), 0)\n        array := array_1\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_bytes(add(headStart, offset_1), dataEnd)\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_struct_ChainBatchHeader(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0xa0) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xa0)\n        let _1 := 0xffffffffffffffff\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, calldataload(headStart))\n        mstore(add(memPtr, 32), calldataload(add(headStart, 32)))\n        mstore(add(memPtr, 64), calldataload(add(headStart, 64)))\n        mstore(add(memPtr, 96), calldataload(add(headStart, 96)))\n        let offset := calldataload(add(headStart, 128))\n        if gt(offset, _1) { revert(0, 0) }\n        mstore(add(memPtr, 128), abi_decode_bytes(add(headStart, offset), end))\n    }\n    function abi_decode_struct_ChainInclusionProof(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x40) { revert(0, 0) }\n        value := allocate_memory_3751()\n        mstore(value, calldataload(headStart))\n        let _1 := 32\n        let offset := calldataload(add(headStart, _1))\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), end)) { revert(0, 0) }\n        let _4 := calldataload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let _5 := shl(5, _4)\n        let dst := allocate_memory(add(_5, _1))\n        let dst_1 := dst\n        mstore(dst, _4)\n        dst := add(dst, _1)\n        let srcEnd := add(add(_3, _5), _1)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(_3, _1)\n        for { } lt(src, srcEnd) { src := add(src, _1) }\n        {\n            mstore(dst, calldataload(src))\n            dst := add(dst, _1)\n        }\n        mstore(add(value, _1), dst_1)\n    }\n    function abi_decode_tuple_t_addresst_addresst_bytes_memory_ptrt_uint256t_struct$_L2MessageInclusionProof_$48308_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let offset := calldataload(add(headStart, 64))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value2 := abi_decode_bytes(add(headStart, offset), dataEnd)\n        value3 := calldataload(add(headStart, 96))\n        let offset_1 := calldataload(add(headStart, 128))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset_1)\n        if slt(sub(dataEnd, _2), 160) { revert(0, 0) }\n        let value_2 := allocate_memory_3753()\n        mstore(value_2, calldataload(_2))\n        let offset_2 := calldataload(add(_2, 32))\n        if gt(offset_2, _1) { revert(0, 0) }\n        mstore(add(value_2, 32), abi_decode_struct_ChainBatchHeader(add(_2, offset_2), dataEnd))\n        let offset_3 := calldataload(add(_2, 64))\n        if gt(offset_3, _1) { revert(0, 0) }\n        mstore(add(value_2, 64), abi_decode_struct_ChainInclusionProof(add(_2, offset_3), dataEnd))\n        let offset_4 := calldataload(add(_2, 96))\n        if gt(offset_4, _1) { revert(0, 0) }\n        mstore(add(value_2, 96), abi_decode_bytes(add(_2, offset_4), dataEnd))\n        let offset_5 := calldataload(add(_2, 128))\n        if gt(offset_5, _1) { revert(0, 0) }\n        mstore(add(value_2, 128), abi_decode_bytes(add(_2, offset_5), dataEnd))\n        value4 := value_2\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!rootManager\")\n        tail := add(headStart, 96)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        let tail_1 := abi_encode_bytes(value0, add(headStart, 96))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value1, tail_1)\n        mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!AMB\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        tail := abi_encode_bytes(value0, add(headStart, 64))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"!mirrorConnector\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1945466d8297d124a74cd1815c3681e97e828860265acaaea52d7392b2e28033__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 5)\n        mstore(add(headStart, 64), \"!this\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_6257fa65cb3e2131130f078fa0b2c0b28695aa9be00e6235d4f462589ad75bec__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 6)\n        mstore(add(headStart, 64), \"!proof\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint96(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffff\n        diff := sub(and(x, _1), and(y, _1))\n        if gt(diff, _1) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr_t_uint32__to_t_address_t_bytes_memory_ptr_t_uint32__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), 96)\n        tail := abi_encode_bytes(value1, add(headStart, 96))\n        mstore(add(headStart, 64), and(value2, 0xffffffff))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_address_t_address_t_bytes_memory_ptr_t_uint256__to_t_address_t_address_t_bytes_memory_ptr_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), 128)\n        tail := abi_encode_bytes(value2, add(headStart, 128))\n        mstore(add(headStart, 96), value3)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_bytes32_t_struct$_ChainBatchHeader_$48289_memory_ptr_t_struct$_ChainInclusionProof_$48295_memory_ptr__to_t_bytes32_t_struct$_ChainBatchHeader_$48289_memory_ptr_t_struct$_ChainInclusionProof_$48295_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        let _1 := 32\n        mstore(add(headStart, _1), 96)\n        mstore(add(headStart, 96), mload(value1))\n        mstore(add(headStart, 128), mload(add(value1, _1)))\n        mstore(add(headStart, 0xa0), mload(add(value1, 0x40)))\n        mstore(add(headStart, 192), mload(add(value1, 96)))\n        let memberValue0 := mload(add(value1, 128))\n        mstore(add(headStart, 224), 0xa0)\n        let end := abi_encode_bytes(memberValue0, add(headStart, 256))\n        mstore(add(headStart, 0x40), sub(end, headStart))\n        let tail_1 := add(end, 0x40)\n        mstore(end, mload(value2))\n        let memberValue0_1 := mload(add(value2, _1))\n        mstore(add(end, _1), 0x40)\n        let pos := tail_1\n        let length := mload(memberValue0_1)\n        mstore(tail_1, length)\n        pos := add(end, 96)\n        let srcPtr := add(memberValue0_1, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        let end_1 := add(pos, length)\n        mstore(end_1, and(shl(96, value1), not(0xffffffffffffffffffffffff)))\n        end := add(end_1, 20)\n    }\n    function abi_encode_tuple_packed_t_bytes32_t_uint256__to_t_bytes32_t_uint256__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, value0)\n        mstore(add(pos, 32), value1)\n        end := add(pos, 64)\n    }\n    function abi_encode_tuple_packed_t_address__to_t_address__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, and(shl(96, value0), not(0xffffffffffffffffffffffff)))\n        end := add(pos, 20)\n    }\n    function abi_encode_tuple_t_stringliteral_39eecfdff5c282a731d38dbcdc63390f0cf2731e0f36b58f09ddf52a0f962492__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 77)\n        mstore(add(headStart, 64), \"Message passing predeploy has no\")\n        mstore(add(headStart, 96), \"t been initialized or invalid pr\")\n        mstore(add(headStart, 128), \"oof provided.\")\n        tail := add(headStart, 160)\n    }\n    function abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, value0)\n        end := add(pos, 32)\n    }\n    function abi_encode_tuple_packed_t_uint8__to_t_uint8__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, and(shl(248, value0), shl(248, 255)))\n        end := add(pos, 1)\n    }\n    function abi_encode_tuple_t_stringliteral_5bd20fa0eac50a6892371dae18efeb7d2b1c7a8479150f38626e21052ac8472c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!bridge\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"!truncated\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1e7ade99c3b21d92da381624c75600d4d8827f17ae2b049a19c6287b6f740403__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 26)\n        mstore(add(headStart, 64), \"Provided proof is invalid.\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_697f2b4b75a3a3464c831501f59169c7eaa7683b6eb1ecfc8fd6c0d4011086b5__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 26)\n        mstore(add(headStart, 64), \"Invalid RLP bytes32 value.\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_f80c2a45ec3706bf6827e456edd04bddc9929616615a2e1a2a2462809e20942c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"Invalid root hash\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_17a91ad79ff0ffb523ce6bd4cec4c7a194c9236c41f13271d5e41d6bee8604ec__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"Invalid large internal hash\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e9e55fd097279baafdb4899794fb4962ef0a885668e60ace65bd9cacedd5b27b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 26)\n        mstore(add(headStart, 64), \"Invalid internal node hash\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function mod_t_uint8(x, y) -> r\n    {\n        let y_1 := and(y, 0xff)\n        if iszero(y_1) { panic_error_0x12() }\n        r := mod(and(x, 0xff), y_1)\n    }\n    function checked_sub_t_uint8(x, y) -> diff\n    {\n        diff := sub(and(x, 0xff), and(y, 0xff))\n        if gt(diff, 0xff) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_907f215123609329de6771559e9fb247bc5ec60375a7811e373541560cb612bc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Received a node with an unknown \")\n        mstore(add(headStart, 96), \"prefix\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_44be0f743167942a406d825903e699357e663ee7ba0bc41f4d988c3023209e40__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Received an unparseable node.\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_848de431415f0c3627b6ae0a9dbc7e8072c165b6a18cec94d54fe6ab8855172a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"Invalid RLP list value.\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_5087e62b30af24eb438474b5124c062b0df85cd3cdf4ea6c03991870220714c1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"Provided RLP list exceeds max li\")\n        mstore(add(headStart, 96), \"st length.\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cbfd45d6cbabcf1f972bc6e670a58703dc2f15f95d28d9e580f69e92be3c3b29__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"RLP item cannot be null.\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_8aca44bbbcae5e1f45d4afe6279225dc68170211b861c4daf13bd2681ef32975__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"Invalid RLP short string.\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4bb18a3f980d71dabb635b00d5ab88ff971a36edd9dc79fbb99312849c9fce67__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"Invalid RLP long string length.\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e91bee799143bea684e6e3b2005af43754801e59e0ad19b6af4182fcfef3328b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"Invalid RLP long string.\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_faacf826bd31e02dc921ea35583cf601fa5cc747d5ee46904a18ead089c4f2e1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"Invalid RLP short list.\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1ab842401d58445ea8b599f677fc3eda93bc858b970ca455538ed6faecc256da__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Invalid RLP long list length.\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_20f694aafe1a6d12fb1d006f7106bcafe640e6950031327d022975fd11504e5a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"Invalid RLP long list.\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_ea5c908f6fb9ba591809871c4bac08fa77a46fe28384af8030ba9c22e2978554__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"Invalid RLP bytes value.\")\n        tail := add(headStart, 96)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        product := mul(x, y)\n        if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_5d3d629f76473d94377d221b1f1c8f2161f7b65cab69e095662ec5d0e026c17e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"slice_overflow\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_cca2258dcc0d08c244435525255fbef9116c9a31b4c29471218f002bbbceb7a0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"slice_outOfBounds\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"39039":[{"length":32,"start":570}],"39042":[{"length":32,"start":1053},{"length":32,"start":1311},{"length":32,"start":2813},{"length":32,"start":3720}],"39045":[{"length":32,"start":654},{"length":32,"start":1130},{"length":32,"start":1935}],"39048":[{"length":32,"start":413},{"length":32,"start":1876}],"42346":[{"length":32,"start":332},{"length":32,"start":3795}]},"linkReferences":{},"object":"60806040526004361061012e5760003560e01c8063715018a6116100ab578063c5b350df1161006f578063c5b350df14610399578063cc394283146103ae578063d1851c92146103ce578063d232c220146103ec578063d69f9d611461040b578063db1b76591461043f57600080fd5b8063715018a6146102e65780637850b020146102fb5780638da5cb5b1461031b578063b1f8100d14610339578063c1f0808a1461035957600080fd5b806352a9674b116100f257806352a9674b146102285780635bd11efc1461025c5780635f61e3ec1461027c5780636a42b8f8146102b05780636e2edb4e146102c657600080fd5b80630f329ef81461013a578063141684161461018b5780633cf52ffb146101d457806348e6fa23146101f35780634ff746f61461020857600080fd5b3661013557005b600080fd5b34801561014657600080fd5b5061016e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019757600080fd5b506101bf7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610182565b3480156101e057600080fd5b506002545b604051908152602001610182565b610206610201366004612687565b61045f565b005b34801561021457600080fd5b506102066102233660046126eb565b610514565b34801561023457600080fd5b506101bf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561026857600080fd5b5061020661027736600461273d565b6105ba565b34801561028857600080fd5b5061016e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102bc57600080fd5b5062093a806101e5565b3480156102d257600080fd5b506102066102e13660046128a3565b6105f1565b3480156102f257600080fd5b5061020661084e565b34801561030757600080fd5b506102066103163660046129dc565b610902565b34801561032757600080fd5b506000546001600160a01b031661016e565b34801561034557600080fd5b5061020661035436600461273d565b610936565b34801561036557600080fd5b506103896103743660046129dc565b60056020526000908152604090205460ff1681565b6040519015158152602001610182565b3480156103a557600080fd5b506102066109d4565b3480156103ba57600080fd5b5060035461016e906001600160a01b031681565b3480156103da57600080fd5b506001546001600160a01b031661016e565b3480156103f857600080fd5b506000546001600160a01b031615610389565b34801561041757600080fd5b5061016e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044b57600080fd5b5061038961045a36600461273d565b610a44565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104cb5760405162461bcd60e51b815260206004820152600c60248201526b10b937b7ba26b0b730b3b2b960a11b60448201526064015b60405180910390fd5b6104d58282610a55565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507782823360405161050893929190612a45565b60405180910390a15050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105755760405162461bcd60e51b81526004016104c29060208082526004908201526310a0a6a160e11b604082015260600190565b61057e81610b6c565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced81336040516105af929190612a83565b60405180910390a150565b6000546001600160a01b031633146105e5576040516311a8a1bb60e31b815260040160405180910390fd5b6105ee81610b85565b50565b6003546001600160a01b038581169116146106415760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b60448201526064016104c2565b6001600160a01b03851630146106815760405162461bcd60e51b8152602060048201526005602482015264217468697360d81b60448201526064016104c2565b600061068f86868686610bee565b905061069b8183610c3b565b6106d05760405162461bcd60e51b815260206004820152600660248201526510b83937b7b360d11b60448201526064016104c2565b60006106dc8582610c5e565b905060006107136106fb6020601885901c6001600160601b0316612ac3565b62ffffff198416906001600160601b03166020610c82565b60008181526005602052604090205490915060ff166108445760008181526005602052604090819020805460ff191660011790555163473ec9fd60e11b81527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166004820152602481018290526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638e7d93fa90604401600060405180830381600087803b1580156107d357600080fd5b505af11580156107e7573d6000803e3d6000fd5b505050507fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8160405160200161081f91815260200190565b60408051601f198184030181529082905261083b913390612a83565b60405180910390a15b5050505050505050565b6000546001600160a01b03163314610879576040516311a8a1bb60e31b815260040160405180910390fd5b62093a806002544261088b9190612aea565b116108a9576040516324e0285f60e21b815260040160405180910390fd5b6002546000036108cc57604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b0316156108f6576040516323295ef960e01b815260040160405180910390fd5b6109006000610d8d565b565b6000546001600160a01b0316331461092d576040516311a8a1bb60e31b815260040160405180910390fd5b6105ee81610df2565b6000546001600160a01b03163314610961576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b03828116911614801561097f575060025415155b1561099d576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036109cb57604051634a2fb73f60e11b815260040160405180910390fd5b6105ee81610e33565b6001546001600160a01b031633146109ff576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442610a119190612aea565b11610a2f576040516324e0285f60e21b815260040160405180910390fd5b600154610900906001600160a01b0316610d8d565b6000610a4f82610e81565b92915050565b8151602014610a905760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b60448201526064016104c2565b6000634ff746f660e01b83604051602401610aab9190612afd565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252600354600480549351633dbb202b60e01b81529294506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811694633dbb202b94610b359490921692879201612b10565b600060405180830381600087803b158015610b4f57600080fd5b505af1158015610b63573d6000803e3d6000fd5b50505050505050565b6040516316c2fdb560e21b815260040160405180910390fd5b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b606084848484604051602401610c079493929190612b4a565b60408051601f198184030181529190526020810180516001600160e01b031663cbd4ece960e01b1790529050949350505050565b6000610c4682610ead565b8015610c575750610c578383610f47565b9392505050565b815160009060208401610c7964ffffffffff851682846110d6565b95945050505050565b60008160ff16600003610c9757506000610c57565b610caa8460181c6001600160601b031690565b6001600160601b0316610cc060ff841685612b87565b1115610d2857610cd98460781c6001600160601b031690565b610cec8560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff831660648201526084016104c2565b60208260ff161115610d4d5760405163045df3f960e01b815260040160405180910390fd5b600882026000610d668660781c6001600160601b031690565b6001600160601b03169490940151600160ff1b600019929092019190911d16949350505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60045460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1600455565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b6000610a4f7f000000000000000000000000000000000000000000000000000000000000000083611113565b805160208201516040808401519051634d69ee5760e01b81526000936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693634d69ee5793610f0693600401612b9a565b602060405180830381865afa158015610f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190612c45565b600080836007602160991b01604051602001610f64929190612c67565b60408051601f1981840301815282825280516020918201209083015260009082015260600160408051601f19818403018152908290528051602091820120602160f91b9183019190915291506000908190610fd89060340160408051601f19818403018152919052606087015187516111d4565b909250905060018215151461106b5760405162461bcd60e51b815260206004820152604d60248201527f4d6573736167652070617373696e67207072656465706c6f7920686173206e6f60448201527f74206265656e20696e697469616c697a6564206f7220696e76616c696420707260648201526c37b7b310383937bb34b232b21760991b608482015260a4016104c2565b6000611076826111fd565b90506110cb8460405160200161108e91815260200190565b60408051601f1981840301815290829052600160f81b602083015290602101604051602081830303815290604052886080015184604001516112c1565b979650505050505050565b6000806110e38385612b87565b90506040518111156110f3575060005b806000036111085762ffffff19915050610c57565b610c798585856112e5565b6000336001600160a01b038416146111575760405162461bcd60e51b81526020600482015260076024820152662162726964676560c81b60448201526064016104c2565b816001600160a01b0316836001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561119f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c39190612c9e565b6001600160a01b0316149392505050565b6000606060006111e38661135c565b90506111f081868661138e565b9250925050935093915050565b60408051608081018252600080825260208201819052918101829052606081018290529061122a83611469565b9050604051806080016040528061125a8360008151811061124d5761124d612cbb565b602002602001015161149c565b81526020016112758360018151811061124d5761124d612cbb565b815260200161129d8360028151811061129057611290612cbb565b60200260200101516114a3565b81526020016112b88360038151811061129057611290612cbb565b90529392505050565b6000806112cd8661135c565b90506112db818686866115a4565b9695505050505050565b60006060601883856001600160601b0382168214801561130d575086816001600160601b0316145b6113465760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b60448201526064016104c2565b96831b90961790911b90941790931b9392505050565b6060818051906020012060405160200161137891815260200190565b6040516020818303038152906040529050919050565b60006060600061139d856115da565b905060008060006113af848a896116ce565b815192955090935091501580806113c35750815b61140f5760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e00000000000060448201526064016104c2565b60008161142b5760405180602001604052806000815250611457565b6114578661143a600188612aea565b8151811061144a5761144a612cbb565b6020026020010151611ae4565b919b919a509098505050505050505050565b604080518082018252600080825260209182015281518083019092528251825280830190820152606090610a4f90611b0e565b6000610a4f825b600060228260000151106114f95760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e00000000000060448201526064016104c2565b600080600061150785611cfa565b91945092509050600081600181111561152257611522612cd1565b1461156f5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e00000000000060448201526064016104c2565b60008386602001516115819190612b87565b805190915060208410156112db5760208490036101000a90049695505050505050565b60008060006115b487868661138e565b915091508180156110cb57508051602080830191909120875191880191909120146110cb565b606060006115e783611469565b90506000815167ffffffffffffffff81111561160557611605612584565b60405190808252806020026020018201604052801561164a57816020015b60408051808201909152606080825260208201528152602001906001900390816116235790505b50825190915060005b818110156116c457600061167f85838151811061167257611672612cbb565b6020026020010151612048565b9050604051806040016040528082815260200161169b83611469565b8152508483815181106116b0576116b0612cbb565b602090810291909101015250600101611653565b5090949350505050565b600060608180806116de876120cf565b90506000869050600080611705604051806040016040528060608152602001606081525090565b8b5160005b81811015611abb578d818151811061172457611724612cbb565b60200260200101519250838561173a9190612b87565b9450611747600189612b87565b9750846000036117a25782518051602090910120861461179d5760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b60448201526064016104c2565b611860565b825151601f10156118055782518051602090910120861461179d5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c2068617368000000000060448201526064016104c2565b856118138460000151612204565b146118605760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f6465206861736800000000000060448201526064016104c2565b60019081019061187290601090612b87565b836020015151036118e45786518514611abb57600087868151811061189957611899612cbb565b602001015160f81c60f81b60f81c9050600084602001518260ff16815181106118c4576118c4612cbb565b602002602001015190506118d78161222c565b975060019550505061170a565b600283602001515103611a735760006118fc84612262565b905060008160008151811061191357611913612cbb565b016020015160f81c9050600061192a600283612cfd565b611935906002612d1f565b90506000611946848360ff16612286565b905060006119548c8b612286565b9050600061196283836122bc565b905060ff851660021480611979575060ff85166003145b156119b35780835114801561198e5750808251145b156119a05761199d818c612b87565b9a505b50600160ff1b9a50611abb945050505050565b60ff851615806119c6575060ff85166001145b15611a1c57825181146119e65750600160ff1b9a50611abb945050505050565b611a0d8960200151600181518110611a0057611a00612cbb565b602002602001015161222c565b9b50985061170a945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b60648201526084016104c2565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e00000060448201526064016104c2565b50600160ff1b851487611ace8887612286565b909f909e50909c509a5050505050505050505050565b60208101518051606091610a4f91611afe90600190612aea565b8151811061167257611672612cbb565b6060600080611b1c84611cfa565b91935090915060019050816001811115611b3857611b38612cd1565b14611b855760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e00000000000000000060448201526064016104c2565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081611b9e5790505090506000835b8651811015611cef5760208210611c375760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b60648201526084016104c2565b600080611c746040518060400160405280858c60000151611c589190612aea565b8152602001858c60200151611c6d9190612b87565b9052611cfa565b509150915060405180604001604052808383611c909190612b87565b8152602001848b60200151611ca59190612b87565b815250858581518110611cba57611cba612cbb565b6020908102919091010152611cd0600185612b87565b9350611cdc8183612b87565b611ce69084612b87565b92505050611bcb565b508152949350505050565b600080600080846000015111611d525760405162461bcd60e51b815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e000000000000000060448201526064016104c2565b6020840151805160001a6080811015611d78576000600160009450945094505050612041565b60b8811015611df5576000611d8e608083612aea565b905080876000015111611de35760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e0000000000000060448201526064016104c2565b60019550935060009250612041915050565b60c0811015611ee5576000611e0b60b783612aea565b905080876000015111611e605760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e0060448201526064016104c2565b600183015160208290036101000a9004611e7a8183612b87565b885111611ec95760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e000000000000000060448201526064016104c2565b611ed4826001612b87565b965094506000935061204192505050565b60f8811015611f61576000611efb60c083612aea565b905080876000015111611f505760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e00000000000000000060448201526064016104c2565b600195509350849250612041915050565b6000611f6e60f783612aea565b905080876000015111611fc35760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e00000060448201526064016104c2565b600183015160208290036101000a9004611fdd8183612b87565b8851116120255760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b60448201526064016104c2565b612030826001612b87565b965094506001935061204192505050565b9193909250565b6060600080600061205885611cfa565b91945092509050600081600181111561207357612073612cd1565b146120c05760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e000000000000000060448201526064016104c2565b610c7985602001518484612338565b60606000825160026120e19190612d38565b67ffffffffffffffff8111156120f9576120f9612584565b6040519080825280601f01601f191660200182016040528015612123576020820181803683370190505b50835190915060005b818110156121fb57600485828151811061214857612148612cbb565b01602001516001600160f81b031916901c83612165836002612d38565b8151811061217557612175612cbb565b60200101906001600160f81b031916908160001a90535060108582815181106121a0576121a0612cbb565b01602001516121b2919060f81c612cfd565b60f81b836121c1836002612d38565b6121cc906001612b87565b815181106121dc576121dc612cbb565b60200101906001600160f81b031916908160001a90535060010161212c565b50909392505050565b600060208251101561221857506020015190565b81806020019051810190610a4f9190612d4f565b6000606060208360000151101561224d576122468361240c565b9050612259565b61225683612048565b90505b610c5781612204565b6060610a4f612281836020015160008151811061167257611672612cbb565b6120cf565b6060825182106122a55750604080516020810190915260008152610a4f565b610c5783838486516122b79190612aea565b612417565b6000805b8084511180156122d05750808351115b801561232157508281815181106122e9576122e9612cbb565b602001015160f81c60f81b6001600160f81b03191684828151811061231057612310612cbb565b01602001516001600160f81b031916145b15610c57578061233081612d68565b9150506122c0565b606060008267ffffffffffffffff81111561235557612355612584565b6040519080825280601f01601f19166020018201604052801561237f576020820181803683370190505b5090508051600003612392579050610c57565b600061239e8587612b87565b90506020820160005b6123b2602087612d81565b8110156123df57825182526123c8602084612b87565b92506123d5602083612b87565b91506001016123a7565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b6060610a4f8261256e565b60608161242581601f612b87565b10156124645760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016104c2565b8261246f8382612b87565b10156124ae5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016104c2565b6124b88284612b87565b845110156124fc5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016104c2565b60608215801561251b5760405191506000825260208201604052612565565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561255457805183526020928301920161253c565b5050858452601f01601f1916604052505b50949350505050565b6060610a4f826020015160008460000151612338565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156125bd576125bd612584565b60405290565b60405160a0810167ffffffffffffffff811182821017156125bd576125bd612584565b604051601f8201601f1916810167ffffffffffffffff8111828210171561260f5761260f612584565b604052919050565b600082601f83011261262857600080fd5b813567ffffffffffffffff81111561264257612642612584565b612655601f8201601f19166020016125e6565b81815284602083860101111561266a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561269a57600080fd5b823567ffffffffffffffff808211156126b257600080fd5b6126be86838701612617565b935060208501359150808211156126d457600080fd5b506126e185828601612617565b9150509250929050565b6000602082840312156126fd57600080fd5b813567ffffffffffffffff81111561271457600080fd5b61272084828501612617565b949350505050565b6001600160a01b03811681146105ee57600080fd5b60006020828403121561274f57600080fd5b8135610c5781612728565b600060a0828403121561276c57600080fd5b60405160a0810167ffffffffffffffff828210818311171561279057612790612584565b816040528293508435835260208501356020840152604085013560408401526060850135606084015260808501359150808211156127cd57600080fd5b506127da85828601612617565b6080830152505092915050565b6000604082840312156127f957600080fd5b61280161259a565b90508135815260208083013567ffffffffffffffff8082111561282357600080fd5b818501915085601f83011261283757600080fd5b81358181111561284957612849612584565b8060051b915061285a8483016125e6565b818152918301840191848101908884111561287457600080fd5b938501935b8385101561289257843582529385019390850190612879565b808688015250505050505092915050565b600080600080600060a086880312156128bb57600080fd5b85356128c681612728565b945060208601356128d681612728565b9350604086013567ffffffffffffffff808211156128f357600080fd5b6128ff89838a01612617565b945060608801359350608088013591508082111561291c57600080fd5b9087019060a0828a03121561293057600080fd5b6129386125c3565b8235815260208301358281111561294e57600080fd5b61295a8b82860161275a565b60208301525060408301358281111561297257600080fd5b61297e8b8286016127e7565b60408301525060608301358281111561299657600080fd5b6129a28b828601612617565b6060830152506080830135828111156129ba57600080fd5b6129c68b828601612617565b6080830152508093505050509295509295909350565b6000602082840312156129ee57600080fd5b5035919050565b60005b83811015612a105781810151838201526020016129f8565b50506000910152565b60008151808452612a318160208601602086016129f5565b601f01601f19169290920160200192915050565b606081526000612a586060830186612a19565b8281036020840152612a6a8186612a19565b91505060018060a01b0383166040830152949350505050565b604081526000612a966040830185612a19565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052601160045260246000fd5b6001600160601b03828116828216039080821115612ae357612ae3612aad565b5092915050565b81810381811115610a4f57610a4f612aad565b602081526000610c576020830184612a19565b6001600160a01b0384168152606060208201819052600090612b3490830185612a19565b905063ffffffff83166040830152949350505050565b6001600160a01b03858116825284166020820152608060408201819052600090612b7690830185612a19565b905082606083015295945050505050565b80820180821115610a4f57610a4f612aad565b8381526000602060608184015284516060840152808501516080840152604085015160a0840152606085015160c0840152608085015160a060e0850152612be5610100850182612a19565b905083810360408501526040810185518252828601516040848401528181518084526060850191508583019450600093505b80841015612c375784518252938501936001939093019290850190612c17565b509998505050505050505050565b600060208284031215612c5757600080fd5b81518015158114610c5757600080fd5b60008351612c798184602088016129f5565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b600060208284031215612cb057600080fd5b8151610c5781612728565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600060ff831680612d1057612d10612ce7565b8060ff84160691505092915050565b60ff8281168282160390811115610a4f57610a4f612aad565b8082028115828204841417610a4f57610a4f612aad565b600060208284031215612d6157600080fd5b5051919050565b600060018201612d7a57612d7a612aad565b5060010190565b600082612d9057612d90612ce7565b50049056fea264697066735822122049488d98f454e5e1097bffbc409bd2ed7b797216444b82845a44d82d3af4fe4b64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x12E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 GT PUSH2 0xAB JUMPI DUP1 PUSH4 0xC5B350DF GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x399 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x3AE JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x3CE JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x3EC JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x40B JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x43F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x715018A6 EQ PUSH2 0x2E6 JUMPI DUP1 PUSH4 0x7850B020 EQ PUSH2 0x2FB JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x31B JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x339 JUMPI DUP1 PUSH4 0xC1F0808A EQ PUSH2 0x359 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B GT PUSH2 0xF2 JUMPI DUP1 PUSH4 0x52A9674B EQ PUSH2 0x228 JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x25C JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x2B0 JUMPI DUP1 PUSH4 0x6E2EDB4E EQ PUSH2 0x2C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xF329EF8 EQ PUSH2 0x13A JUMPI DUP1 PUSH4 0x14168416 EQ PUSH2 0x18B JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x48E6FA23 EQ PUSH2 0x1F3 JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x208 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x135 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x146 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x16E PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x197 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x182 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x182 JUMP JUMPDEST PUSH2 0x206 PUSH2 0x201 CALLDATASIZE PUSH1 0x4 PUSH2 0x2687 JUMP JUMPDEST PUSH2 0x45F JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x214 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0x223 CALLDATASIZE PUSH1 0x4 PUSH2 0x26EB JUMP JUMPDEST PUSH2 0x514 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BF PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x268 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0x277 CALLDATASIZE PUSH1 0x4 PUSH2 0x273D JUMP JUMPDEST PUSH2 0x5BA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x288 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x16E PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x1E5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0x2E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x28A3 JUMP JUMPDEST PUSH2 0x5F1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0x84E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x307 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0x316 CALLDATASIZE PUSH1 0x4 PUSH2 0x29DC JUMP JUMPDEST PUSH2 0x902 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x327 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x16E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x345 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0x354 CALLDATASIZE PUSH1 0x4 PUSH2 0x273D JUMP JUMPDEST PUSH2 0x936 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x365 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x389 PUSH2 0x374 CALLDATASIZE PUSH1 0x4 PUSH2 0x29DC JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x182 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x206 PUSH2 0x9D4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x16E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x16E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x389 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x417 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x16E PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x44B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x389 PUSH2 0x45A CALLDATASIZE PUSH1 0x4 PUSH2 0x273D JUMP JUMPDEST PUSH2 0xA44 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x4CB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B937B7BA26B0B730B3B2B9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4D5 DUP3 DUP3 PUSH2 0xA55 JUMP JUMPDEST PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 DUP3 DUP3 CALLER PUSH1 0x40 MLOAD PUSH2 0x508 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2A45 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x575 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4C2 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0x57E DUP2 PUSH2 0xB6C JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0x5AF SWAP3 SWAP2 SWAP1 PUSH2 0x2A83 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5E5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5EE DUP2 PUSH2 0xB85 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND SWAP2 AND EQ PUSH2 0x641 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x10B6B4B93937B921B7B73732B1BA37B9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND ADDRESS EQ PUSH2 0x681 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x5 PUSH1 0x24 DUP3 ADD MSTORE PUSH5 0x2174686973 PUSH1 0xD8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x68F DUP7 DUP7 DUP7 DUP7 PUSH2 0xBEE JUMP JUMPDEST SWAP1 POP PUSH2 0x69B DUP2 DUP4 PUSH2 0xC3B JUMP JUMPDEST PUSH2 0x6D0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x10B83937B7B3 PUSH1 0xD1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6DC DUP6 DUP3 PUSH2 0xC5E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x713 PUSH2 0x6FB PUSH1 0x20 PUSH1 0x18 DUP6 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x2AC3 JUMP JUMPDEST PUSH3 0xFFFFFF NOT DUP5 AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH1 0x20 PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND PUSH2 0x844 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH4 0x473EC9FD PUSH1 0xE1 SHL DUP2 MSTORE PUSH32 0x0 PUSH4 0xFFFFFFFF AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x8E7D93FA SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7E7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x81F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH2 0x83B SWAP2 CALLER SWAP1 PUSH2 0x2A83 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x879 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x88B SWAP2 SWAP1 PUSH2 0x2AEA JUMP JUMPDEST GT PUSH2 0x8A9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x8CC JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x8F6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x900 PUSH1 0x0 PUSH2 0xD8D JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x92D JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5EE DUP2 PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x961 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x97F JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x99D JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x9CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5EE DUP2 PUSH2 0xE33 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9FF JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0xA11 SWAP2 SWAP1 PUSH2 0x2AEA JUMP JUMPDEST GT PUSH2 0xA2F JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x900 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD8D JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA4F DUP3 PUSH2 0xE81 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0xA90 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x0 PUSH4 0x4FF746F6 PUSH1 0xE0 SHL DUP4 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xAAB SWAP2 SWAP1 PUSH2 0x2AFD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 MSTORE PUSH1 0x3 SLOAD PUSH1 0x4 DUP1 SLOAD SWAP4 MLOAD PUSH4 0x3DBB202B PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND SWAP5 PUSH4 0x3DBB202B SWAP5 PUSH2 0xB35 SWAP5 SWAP1 SWAP3 AND SWAP3 DUP8 SWAP3 ADD PUSH2 0x2B10 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB63 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x16C2FDB5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xC07 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2B4A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xCBD4ECE9 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC46 DUP3 PUSH2 0xEAD JUMP JUMPDEST DUP1 ISZERO PUSH2 0xC57 JUMPI POP PUSH2 0xC57 DUP4 DUP4 PUSH2 0xF47 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0xC79 PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x10D6 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0xC97 JUMPI POP PUSH1 0x0 PUSH2 0xC57 JUMP JUMPDEST PUSH2 0xCAA DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0xCC0 PUSH1 0xFF DUP5 AND DUP6 PUSH2 0x2B87 JUMP JUMPDEST GT ISZERO PUSH2 0xD28 JUMPI PUSH2 0xCD9 DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xCEC DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0xD4D JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0xD66 DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP5 SWAP1 SWAP5 ADD MLOAD PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 SAR AND SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA4F PUSH32 0x0 DUP4 PUSH2 0x1113 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP1 DUP5 ADD MLOAD SWAP1 MLOAD PUSH4 0x4D69EE57 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP4 PUSH4 0x4D69EE57 SWAP4 PUSH2 0xF06 SWAP4 PUSH1 0x4 ADD PUSH2 0x2B9A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA4F SWAP2 SWAP1 PUSH2 0x2C45 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x7 PUSH1 0x21 PUSH1 0x99 SHL ADD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xF64 SWAP3 SWAP2 SWAP1 PUSH2 0x2C67 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 SWAP1 DUP4 ADD MSTORE PUSH1 0x0 SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x21 PUSH1 0xF9 SHL SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 POP PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0xFD8 SWAP1 PUSH1 0x34 ADD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x60 DUP8 ADD MLOAD DUP8 MLOAD PUSH2 0x11D4 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x1 DUP3 ISZERO ISZERO EQ PUSH2 0x106B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x4D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D6573736167652070617373696E67207072656465706C6F7920686173206E6F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74206265656E20696E697469616C697A6564206F7220696E76616C6964207072 PUSH1 0x64 DUP3 ADD MSTORE PUSH13 0x37B7B310383937BB34B232B217 PUSH1 0x99 SHL PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1076 DUP3 PUSH2 0x11FD JUMP JUMPDEST SWAP1 POP PUSH2 0x10CB DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x108E SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0xF8 SHL PUSH1 0x20 DUP4 ADD MSTORE SWAP1 PUSH1 0x21 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP9 PUSH1 0x80 ADD MLOAD DUP5 PUSH1 0x40 ADD MLOAD PUSH2 0x12C1 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x10E3 DUP4 DUP6 PUSH2 0x2B87 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x10F3 JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x1108 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0xC57 JUMP JUMPDEST PUSH2 0xC79 DUP6 DUP6 DUP6 PUSH2 0x12E5 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EQ PUSH2 0x1157 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x21627269646765 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6E296E45 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x119F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11C3 SWAP2 SWAP1 PUSH2 0x2C9E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x11E3 DUP7 PUSH2 0x135C JUMP JUMPDEST SWAP1 POP PUSH2 0x11F0 DUP2 DUP7 DUP7 PUSH2 0x138E JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 PUSH2 0x122A DUP4 PUSH2 0x1469 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x125A DUP4 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x124D JUMPI PUSH2 0x124D PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x149C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1275 DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x124D JUMPI PUSH2 0x124D PUSH2 0x2CBB JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129D DUP4 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0x1290 JUMPI PUSH2 0x1290 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x14A3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12B8 DUP4 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x1290 JUMPI PUSH2 0x1290 PUSH2 0x2CBB JUMP JUMPDEST SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x12CD DUP7 PUSH2 0x135C JUMP JUMPDEST SWAP1 POP PUSH2 0x12DB DUP2 DUP7 DUP7 DUP7 PUSH2 0x15A4 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0x130D JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0x1346 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1378 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x139D DUP6 PUSH2 0x15DA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x13AF DUP5 DUP11 DUP10 PUSH2 0x16CE JUMP JUMPDEST DUP2 MLOAD SWAP3 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP ISZERO DUP1 DUP1 PUSH2 0x13C3 JUMPI POP DUP2 JUMPDEST PUSH2 0x140F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x50726F76696465642070726F6F6620697320696E76616C69642E000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x142B JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x1457 JUMP JUMPDEST PUSH2 0x1457 DUP7 PUSH2 0x143A PUSH1 0x1 DUP9 PUSH2 0x2AEA JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x144A JUMPI PUSH2 0x144A PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1AE4 JUMP JUMPDEST SWAP2 SWAP12 SWAP2 SWAP11 POP SWAP1 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE DUP3 MLOAD DUP3 MSTORE DUP1 DUP4 ADD SWAP1 DUP3 ADD MSTORE PUSH1 0x60 SWAP1 PUSH2 0xA4F SWAP1 PUSH2 0x1B0E JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA4F DUP3 JUMPDEST PUSH1 0x0 PUSH1 0x22 DUP3 PUSH1 0x0 ADD MLOAD LT PUSH2 0x14F9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420524C5020627974657333322076616C75652E000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1507 DUP6 PUSH2 0x1CFA JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x1522 JUMPI PUSH2 0x1522 PUSH2 0x2CD1 JUMP JUMPDEST EQ PUSH2 0x156F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420524C5020627974657333322076616C75652E000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x1581 SWAP2 SWAP1 PUSH2 0x2B87 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x20 DUP5 LT ISZERO PUSH2 0x12DB JUMPI PUSH1 0x20 DUP5 SWAP1 SUB PUSH2 0x100 EXP SWAP1 DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x15B4 DUP8 DUP7 DUP7 PUSH2 0x138E JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x10CB JUMPI POP DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 KECCAK256 DUP8 MLOAD SWAP2 DUP9 ADD SWAP2 SWAP1 SWAP2 KECCAK256 EQ PUSH2 0x10CB JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x15E7 DUP4 PUSH2 0x1469 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1605 JUMPI PUSH2 0x1605 PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x164A JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1623 JUMPI SWAP1 POP JUMPDEST POP DUP3 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x16C4 JUMPI PUSH1 0x0 PUSH2 0x167F DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1672 JUMPI PUSH2 0x1672 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2048 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x169B DUP4 PUSH2 0x1469 JUMP JUMPDEST DUP2 MSTORE POP DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x16B0 JUMPI PUSH2 0x16B0 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x1653 JUMP JUMPDEST POP SWAP1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP2 DUP1 DUP1 PUSH2 0x16DE DUP8 PUSH2 0x20CF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP7 SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x1705 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP12 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1ABB JUMPI DUP14 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1724 JUMPI PUSH2 0x1724 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP3 POP DUP4 DUP6 PUSH2 0x173A SWAP2 SWAP1 PUSH2 0x2B87 JUMP JUMPDEST SWAP5 POP PUSH2 0x1747 PUSH1 0x1 DUP10 PUSH2 0x2B87 JUMP JUMPDEST SWAP8 POP DUP5 PUSH1 0x0 SUB PUSH2 0x17A2 JUMPI DUP3 MLOAD DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 DUP7 EQ PUSH2 0x179D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x92DCECC2D8D2C840E4DEDEE840D0C2E6D PUSH1 0x7B SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH2 0x1860 JUMP JUMPDEST DUP3 MLOAD MLOAD PUSH1 0x1F LT ISZERO PUSH2 0x1805 JUMPI DUP3 MLOAD DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 DUP7 EQ PUSH2 0x179D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C6964206C6172676520696E7465726E616C20686173680000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST DUP6 PUSH2 0x1813 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x2204 JUMP JUMPDEST EQ PUSH2 0x1860 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420696E7465726E616C206E6F64652068617368000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1872 SWAP1 PUSH1 0x10 SWAP1 PUSH2 0x2B87 JUMP JUMPDEST DUP4 PUSH1 0x20 ADD MLOAD MLOAD SUB PUSH2 0x18E4 JUMPI DUP7 MLOAD DUP6 EQ PUSH2 0x1ABB JUMPI PUSH1 0x0 DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x1899 JUMPI PUSH2 0x1899 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 ADD ADD MLOAD PUSH1 0xF8 SHR PUSH1 0xF8 SHL PUSH1 0xF8 SHR SWAP1 POP PUSH1 0x0 DUP5 PUSH1 0x20 ADD MLOAD DUP3 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x18C4 JUMPI PUSH2 0x18C4 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x18D7 DUP2 PUSH2 0x222C JUMP JUMPDEST SWAP8 POP PUSH1 0x1 SWAP6 POP POP POP PUSH2 0x170A JUMP JUMPDEST PUSH1 0x2 DUP4 PUSH1 0x20 ADD MLOAD MLOAD SUB PUSH2 0x1A73 JUMPI PUSH1 0x0 PUSH2 0x18FC DUP5 PUSH2 0x2262 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1913 JUMPI PUSH2 0x1913 PUSH2 0x2CBB JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0xF8 SHR SWAP1 POP PUSH1 0x0 PUSH2 0x192A PUSH1 0x2 DUP4 PUSH2 0x2CFD JUMP JUMPDEST PUSH2 0x1935 SWAP1 PUSH1 0x2 PUSH2 0x2D1F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1946 DUP5 DUP4 PUSH1 0xFF AND PUSH2 0x2286 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1954 DUP13 DUP12 PUSH2 0x2286 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1962 DUP4 DUP4 PUSH2 0x22BC JUMP JUMPDEST SWAP1 POP PUSH1 0xFF DUP6 AND PUSH1 0x2 EQ DUP1 PUSH2 0x1979 JUMPI POP PUSH1 0xFF DUP6 AND PUSH1 0x3 EQ JUMPDEST ISZERO PUSH2 0x19B3 JUMPI DUP1 DUP4 MLOAD EQ DUP1 ISZERO PUSH2 0x198E JUMPI POP DUP1 DUP3 MLOAD EQ JUMPDEST ISZERO PUSH2 0x19A0 JUMPI PUSH2 0x199D DUP2 DUP13 PUSH2 0x2B87 JUMP JUMPDEST SWAP11 POP JUMPDEST POP PUSH1 0x1 PUSH1 0xFF SHL SWAP11 POP PUSH2 0x1ABB SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0xFF DUP6 AND ISZERO DUP1 PUSH2 0x19C6 JUMPI POP PUSH1 0xFF DUP6 AND PUSH1 0x1 EQ JUMPDEST ISZERO PUSH2 0x1A1C JUMPI DUP3 MLOAD DUP2 EQ PUSH2 0x19E6 JUMPI POP PUSH1 0x1 PUSH1 0xFF SHL SWAP11 POP PUSH2 0x1ABB SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1A0D DUP10 PUSH1 0x20 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x1A00 JUMPI PUSH2 0x1A00 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x222C JUMP JUMPDEST SWAP12 POP SWAP9 POP PUSH2 0x170A SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x52656365697665642061206E6F6465207769746820616E20756E6B6E6F776E20 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0xE0E4CACCD2F PUSH1 0xD3 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x526563656976656420616E20756E706172736561626C65206E6F64652E000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0xFF SHL DUP6 EQ DUP8 PUSH2 0x1ACE DUP9 DUP8 PUSH2 0x2286 JUMP JUMPDEST SWAP1 SWAP16 SWAP1 SWAP15 POP SWAP1 SWAP13 POP SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP1 MLOAD PUSH1 0x60 SWAP2 PUSH2 0xA4F SWAP2 PUSH2 0x1AFE SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x2AEA JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x1672 JUMPI PUSH2 0x1672 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x1B1C DUP5 PUSH2 0x1CFA JUMP JUMPDEST SWAP2 SWAP4 POP SWAP1 SWAP2 POP PUSH1 0x1 SWAP1 POP DUP2 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x1B38 JUMPI PUSH2 0x1B38 PUSH2 0x2CD1 JUMP JUMPDEST EQ PUSH2 0x1B85 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420524C50206C6973742076616C75652E000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE PUSH2 0x420 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP2 DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1B9E JUMPI SWAP1 POP POP SWAP1 POP PUSH1 0x0 DUP4 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x1CEF JUMPI PUSH1 0x20 DUP3 LT PUSH2 0x1C37 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x50726F766964656420524C50206C6973742065786365656473206D6178206C69 PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x39BA103632B733BA3417 PUSH1 0xB1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1C74 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP6 DUP13 PUSH1 0x0 ADD MLOAD PUSH2 0x1C58 SWAP2 SWAP1 PUSH2 0x2AEA JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP13 PUSH1 0x20 ADD MLOAD PUSH2 0x1C6D SWAP2 SWAP1 PUSH2 0x2B87 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x1CFA JUMP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP4 DUP4 PUSH2 0x1C90 SWAP2 SWAP1 PUSH2 0x2B87 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP12 PUSH1 0x20 ADD MLOAD PUSH2 0x1CA5 SWAP2 SWAP1 PUSH2 0x2B87 JUMP JUMPDEST DUP2 MSTORE POP DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x1CBA JUMPI PUSH2 0x1CBA PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH2 0x1CD0 PUSH1 0x1 DUP6 PUSH2 0x2B87 JUMP JUMPDEST SWAP4 POP PUSH2 0x1CDC DUP2 DUP4 PUSH2 0x2B87 JUMP JUMPDEST PUSH2 0x1CE6 SWAP1 DUP5 PUSH2 0x2B87 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x1BCB JUMP JUMPDEST POP DUP2 MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 PUSH1 0x0 ADD MLOAD GT PUSH2 0x1D52 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x524C50206974656D2063616E6E6F74206265206E756C6C2E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1D78 JUMPI PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP5 POP SWAP5 POP SWAP5 POP POP POP PUSH2 0x2041 JUMP JUMPDEST PUSH1 0xB8 DUP2 LT ISZERO PUSH2 0x1DF5 JUMPI PUSH1 0x0 PUSH2 0x1D8E PUSH1 0x80 DUP4 PUSH2 0x2AEA JUMP JUMPDEST SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD MLOAD GT PUSH2 0x1DE3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420524C502073686F727420737472696E672E00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x1 SWAP6 POP SWAP4 POP PUSH1 0x0 SWAP3 POP PUSH2 0x2041 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x1EE5 JUMPI PUSH1 0x0 PUSH2 0x1E0B PUSH1 0xB7 DUP4 PUSH2 0x2AEA JUMP JUMPDEST SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD MLOAD GT PUSH2 0x1E60 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420524C50206C6F6E6720737472696E67206C656E6774682E00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD MLOAD PUSH1 0x20 DUP3 SWAP1 SUB PUSH2 0x100 EXP SWAP1 DIV PUSH2 0x1E7A DUP2 DUP4 PUSH2 0x2B87 JUMP JUMPDEST DUP9 MLOAD GT PUSH2 0x1EC9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420524C50206C6F6E6720737472696E672E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH2 0x1ED4 DUP3 PUSH1 0x1 PUSH2 0x2B87 JUMP JUMPDEST SWAP7 POP SWAP5 POP PUSH1 0x0 SWAP4 POP PUSH2 0x2041 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xF8 DUP2 LT ISZERO PUSH2 0x1F61 JUMPI PUSH1 0x0 PUSH2 0x1EFB PUSH1 0xC0 DUP4 PUSH2 0x2AEA JUMP JUMPDEST SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD MLOAD GT PUSH2 0x1F50 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420524C502073686F7274206C6973742E000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x1 SWAP6 POP SWAP4 POP DUP5 SWAP3 POP PUSH2 0x2041 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F6E PUSH1 0xF7 DUP4 PUSH2 0x2AEA JUMP JUMPDEST SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD MLOAD GT PUSH2 0x1FC3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420524C50206C6F6E67206C697374206C656E6774682E000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD MLOAD PUSH1 0x20 DUP3 SWAP1 SUB PUSH2 0x100 EXP SWAP1 DIV PUSH2 0x1FDD DUP2 DUP4 PUSH2 0x2B87 JUMP JUMPDEST DUP9 MLOAD GT PUSH2 0x2025 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x24B73B30B634B210292628103637B733903634B9BA17 PUSH1 0x51 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH2 0x2030 DUP3 PUSH1 0x1 PUSH2 0x2B87 JUMP JUMPDEST SWAP7 POP SWAP5 POP PUSH1 0x1 SWAP4 POP PUSH2 0x2041 SWAP3 POP POP POP JUMP JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2058 DUP6 PUSH2 0x1CFA JUMP JUMPDEST SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x2073 JUMPI PUSH2 0x2073 PUSH2 0x2CD1 JUMP JUMPDEST EQ PUSH2 0x20C0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C696420524C502062797465732076616C75652E0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH2 0xC79 DUP6 PUSH1 0x20 ADD MLOAD DUP5 DUP5 PUSH2 0x2338 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 MLOAD PUSH1 0x2 PUSH2 0x20E1 SWAP2 SWAP1 PUSH2 0x2D38 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x20F9 JUMPI PUSH2 0x20F9 PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2123 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP DUP4 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x21FB JUMPI PUSH1 0x4 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2148 JUMPI PUSH2 0x2148 PUSH2 0x2CBB JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 SHR DUP4 PUSH2 0x2165 DUP4 PUSH1 0x2 PUSH2 0x2D38 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2175 JUMPI PUSH2 0x2175 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x10 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x21A0 JUMPI PUSH2 0x21A0 PUSH2 0x2CBB JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH2 0x21B2 SWAP2 SWAP1 PUSH1 0xF8 SHR PUSH2 0x2CFD JUMP JUMPDEST PUSH1 0xF8 SHL DUP4 PUSH2 0x21C1 DUP4 PUSH1 0x2 PUSH2 0x2D38 JUMP JUMPDEST PUSH2 0x21CC SWAP1 PUSH1 0x1 PUSH2 0x2B87 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x21DC JUMPI PUSH2 0x21DC PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x1 ADD PUSH2 0x212C JUMP JUMPDEST POP SWAP1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MLOAD LT ISZERO PUSH2 0x2218 JUMPI POP PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xA4F SWAP2 SWAP1 PUSH2 0x2D4F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x20 DUP4 PUSH1 0x0 ADD MLOAD LT ISZERO PUSH2 0x224D JUMPI PUSH2 0x2246 DUP4 PUSH2 0x240C JUMP JUMPDEST SWAP1 POP PUSH2 0x2259 JUMP JUMPDEST PUSH2 0x2256 DUP4 PUSH2 0x2048 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH2 0xC57 DUP2 PUSH2 0x2204 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xA4F PUSH2 0x2281 DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1672 JUMPI PUSH2 0x1672 PUSH2 0x2CBB JUMP JUMPDEST PUSH2 0x20CF JUMP JUMPDEST PUSH1 0x60 DUP3 MLOAD DUP3 LT PUSH2 0x22A5 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH2 0xA4F JUMP JUMPDEST PUSH2 0xC57 DUP4 DUP4 DUP5 DUP7 MLOAD PUSH2 0x22B7 SWAP2 SWAP1 PUSH2 0x2AEA JUMP JUMPDEST PUSH2 0x2417 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP1 DUP5 MLOAD GT DUP1 ISZERO PUSH2 0x22D0 JUMPI POP DUP1 DUP4 MLOAD GT JUMPDEST DUP1 ISZERO PUSH2 0x2321 JUMPI POP DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x22E9 JUMPI PUSH2 0x22E9 PUSH2 0x2CBB JUMP JUMPDEST PUSH1 0x20 ADD ADD MLOAD PUSH1 0xF8 SHR PUSH1 0xF8 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2310 JUMPI PUSH2 0x2310 PUSH2 0x2CBB JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND EQ JUMPDEST ISZERO PUSH2 0xC57 JUMPI DUP1 PUSH2 0x2330 DUP2 PUSH2 0x2D68 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x22C0 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2355 JUMPI PUSH2 0x2355 PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x237F JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0x2392 JUMPI SWAP1 POP PUSH2 0xC57 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x239E DUP6 DUP8 PUSH2 0x2B87 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 ADD PUSH1 0x0 JUMPDEST PUSH2 0x23B2 PUSH1 0x20 DUP8 PUSH2 0x2D81 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x23DF JUMPI DUP3 MLOAD DUP3 MSTORE PUSH2 0x23C8 PUSH1 0x20 DUP5 PUSH2 0x2B87 JUMP JUMPDEST SWAP3 POP PUSH2 0x23D5 PUSH1 0x20 DUP4 PUSH2 0x2B87 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x23A7 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x20 DUP8 MOD PUSH1 0x20 SUB PUSH2 0x100 EXP SUB SWAP1 POP DUP1 DUP3 MLOAD AND DUP2 NOT DUP5 MLOAD AND OR DUP3 MSTORE DUP4 SWAP5 POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xA4F DUP3 PUSH2 0x256E JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH2 0x2425 DUP2 PUSH1 0x1F PUSH2 0x2B87 JUMP JUMPDEST LT ISZERO PUSH2 0x2464 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x736C6963655F6F766572666C6F77 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST DUP3 PUSH2 0x246F DUP4 DUP3 PUSH2 0x2B87 JUMP JUMPDEST LT ISZERO PUSH2 0x24AE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x736C6963655F6F766572666C6F77 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH2 0x24B8 DUP3 DUP5 PUSH2 0x2B87 JUMP JUMPDEST DUP5 MLOAD LT ISZERO PUSH2 0x24FC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x736C6963655F6F75744F66426F756E6473 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x4C2 JUMP JUMPDEST PUSH1 0x60 DUP3 ISZERO DUP1 ISZERO PUSH2 0x251B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2565 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F DUP5 AND DUP1 ISZERO PUSH1 0x20 MUL DUP2 DUP5 ADD ADD DUP6 DUP2 ADD DUP8 DUP4 ISZERO PUSH1 0x20 MUL DUP5 DUP12 ADD ADD ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0x2554 JUMPI DUP1 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x253C JUMP JUMPDEST POP POP DUP6 DUP5 MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x40 MSTORE POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xA4F DUP3 PUSH1 0x20 ADD MLOAD PUSH1 0x0 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x2338 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x25BD JUMPI PUSH2 0x25BD PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x25BD JUMPI PUSH2 0x25BD PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x260F JUMPI PUSH2 0x260F PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2628 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2642 JUMPI PUSH2 0x2642 PUSH2 0x2584 JUMP JUMPDEST PUSH2 0x2655 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x25E6 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x266A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x269A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x26B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26BE DUP7 DUP4 DUP8 ADD PUSH2 0x2617 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26E1 DUP6 DUP3 DUP7 ADD PUSH2 0x2617 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2714 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2720 DUP5 DUP3 DUP6 ADD PUSH2 0x2617 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x5EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x274F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xC57 DUP2 PUSH2 0x2728 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x276C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP3 DUP3 LT DUP2 DUP4 GT OR ISZERO PUSH2 0x2790 JUMPI PUSH2 0x2790 PUSH2 0x2584 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 SWAP4 POP DUP5 CALLDATALOAD DUP4 MSTORE PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x27CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x27DA DUP6 DUP3 DUP7 ADD PUSH2 0x2617 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x27F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2801 PUSH2 0x259A JUMP JUMPDEST SWAP1 POP DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2823 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2837 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x2849 JUMPI PUSH2 0x2849 PUSH2 0x2584 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0x285A DUP5 DUP4 ADD PUSH2 0x25E6 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0x2874 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x2892 JUMPI DUP5 CALLDATALOAD DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0x2879 JUMP JUMPDEST DUP1 DUP7 DUP9 ADD MSTORE POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x28BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x28C6 DUP2 PUSH2 0x2728 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x28D6 DUP2 PUSH2 0x2728 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x28F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x28FF DUP10 DUP4 DUP11 ADD PUSH2 0x2617 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x291C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP8 ADD SWAP1 PUSH1 0xA0 DUP3 DUP11 SUB SLT ISZERO PUSH2 0x2930 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2938 PUSH2 0x25C3 JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x294E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x295A DUP12 DUP3 DUP7 ADD PUSH2 0x275A JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x2972 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x297E DUP12 DUP3 DUP7 ADD PUSH2 0x27E7 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x2996 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x29A2 DUP12 DUP3 DUP7 ADD PUSH2 0x2617 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x29BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x29C6 DUP12 DUP3 DUP7 ADD PUSH2 0x2617 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x29EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A10 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x29F8 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2A31 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x29F5 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2A58 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x2A19 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2A6A DUP2 DUP7 PUSH2 0x2A19 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2A96 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x2A19 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x2AE3 JUMPI PUSH2 0x2AE3 PUSH2 0x2AAD JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xA4F JUMPI PUSH2 0xA4F PUSH2 0x2AAD JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xC57 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2A19 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x2B34 SWAP1 DUP4 ADD DUP6 PUSH2 0x2A19 JUMP JUMPDEST SWAP1 POP PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x2B76 SWAP1 DUP4 ADD DUP6 PUSH2 0x2A19 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xA4F JUMPI PUSH2 0xA4F PUSH2 0x2AAD JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 PUSH1 0x60 DUP2 DUP5 ADD MSTORE DUP5 MLOAD PUSH1 0x60 DUP5 ADD MSTORE DUP1 DUP6 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x80 DUP6 ADD MLOAD PUSH1 0xA0 PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x2BE5 PUSH2 0x100 DUP6 ADD DUP3 PUSH2 0x2A19 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 SUB PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD DUP6 MLOAD DUP3 MSTORE DUP3 DUP7 ADD MLOAD PUSH1 0x40 DUP5 DUP5 ADD MSTORE DUP2 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x60 DUP6 ADD SWAP2 POP DUP6 DUP4 ADD SWAP5 POP PUSH1 0x0 SWAP4 POP JUMPDEST DUP1 DUP5 LT ISZERO PUSH2 0x2C37 JUMPI DUP5 MLOAD DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 PUSH1 0x1 SWAP4 SWAP1 SWAP4 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH2 0x2C17 JUMP JUMPDEST POP SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xC57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 MLOAD PUSH2 0x2C79 DUP2 DUP5 PUSH1 0x20 DUP9 ADD PUSH2 0x29F5 JUMP JUMPDEST PUSH1 0x60 SWAP4 SWAP1 SWAP4 SHL PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP2 SWAP1 SWAP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x14 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2CB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xC57 DUP2 PUSH2 0x2728 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP4 AND DUP1 PUSH2 0x2D10 JUMPI PUSH2 0x2D10 PUSH2 0x2CE7 JUMP JUMPDEST DUP1 PUSH1 0xFF DUP5 AND MOD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0xA4F JUMPI PUSH2 0xA4F PUSH2 0x2AAD JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0xA4F JUMPI PUSH2 0xA4F PUSH2 0x2AAD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x2D7A JUMPI PUSH2 0x2D7A PUSH2 0x2AAD JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2D90 JUMPI PUSH2 0x2D90 PUSH2 0x2CE7 JUMP JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x49 BASEFEE DUP14 SWAP9 DELEGATECALL SLOAD 0xE5 0xE1 MULMOD PUSH28 0xFFBC409BD2ED7B797216444B82845A44D82D3AF4FE4B64736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"724:7347:131:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;935:59;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;209:32:181;;;191:51;;179:2;164:18;935:59:131;;;;;;;;1587:37:116;;;;;;;;;;;;;;;;;;427:10:181;415:23;;;397:42;;385:2;370:18;1587:37:116;253:192:181;1949:112:168;;;;;;;;;;-1:-1:-1;2029:27:168;;1949:112;;;596:25:181;;;584:2;569:18;1949:112:168;450:177:181;1614:200:119;;;;;;:::i;:::-;;:::i;:::-;;4262:148:116;;;;;;;;;;-1:-1:-1;4262:148:116;;;;;:::i;:::-;;:::i;1268:30::-;;;;;;;;;;;;;;;3939:119;;;;;;;;;;-1:-1:-1;3939:119:116;;;;;:::i;:::-;;:::i;1451:37::-;;;;;;;;;;;;;;;2151:79:168;;;;;;;;;;-1:-1:-1;1530:6:168;2151:79;;2843:1751:131;;;;;;;;;;-1:-1:-1;2843:1751:131;;;;;:::i;:::-;;:::i;3820:442:168:-;;;;;;;;;;;;;:::i;860:83:118:-;;;;;;;;;;-1:-1:-1;860:83:118;;;;;:::i;:::-;;:::i;1641:79:168:-;;;;;;;;;;-1:-1:-1;1687:7:168;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;3321:420;;;;;;;;;;-1:-1:-1;3321:420:168;;;;;:::i;:::-;;:::i;1387:41:131:-;;;;;;;;;;-1:-1:-1;1387:41:131;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7750:14:181;;7743:22;7725:41;;7713:2;7698:18;1387:41:131;7585:187:181;4404:539:168;;;;;;;;;;;;;:::i;1705:30:116:-;;;;;;;;;;-1:-1:-1;1705:30:116;;;;-1:-1:-1;;;;;1705:30:116;;;1792:85:168;;;;;;;;;;-1:-1:-1;1863:9:168;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;;;;;;;;;;-1:-1:-1;3097:4:168;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;1363:28:116;;;;;;;;;;;;;;;4490:107;;;;;;;;;;-1:-1:-1;4490:107:116;;;;;:::i;:::-;;:::i;1614:200:119:-;2212:10:116;-1:-1:-1;;;;;2226:12:116;2212:26;;2204:51;;;;-1:-1:-1;;;2204:51:116;;7979:2:181;2204:51:116;;;7961:21:181;8018:2;7998:18;;;7991:30;-1:-1:-1;;;8037:18:181;;;8030:42;8089:18;;2204:51:116;;;;;;;;;1721:33:119::1;1734:5;1741:12;1721;:33::i;:::-;1765:44;1777:5;1784:12;1798:10;1765:44;;;;;;;;:::i;:::-;;;;;;;;1614:200:::0;;:::o;4262:148:116:-;1891:10;-1:-1:-1;;;;;1905:3:116;1891:17;;1883:34;;;;-1:-1:-1;;;1883:34:116;;;;;;9329:2:181;9311:21;;;9368:1;9348:18;;;9341:29;-1:-1:-1;;;9401:2:181;9386:18;;9379:34;9445:2;9430:18;;9127:327;1883:34:116;4337:22:::1;4353:5;4337:15;:22::i;:::-;4370:35;4387:5;4394:10;4370:35;;;;;;;:::i;:::-;;;;;;;;4262:148:::0;:::o;3939:119::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4016:37:116::1;4036:16;4016:19;:37::i;:::-;3939:119:::0;:::o;2843:1751:131:-;3096:15;;-1:-1:-1;;;;;3085:26:131;;;3096:15;;3085:26;3077:55;;;;-1:-1:-1;;;3077:55:131;;9980:2:181;3077:55:131;;;9962:21:181;10019:2;9999:18;;;9992:30;-1:-1:-1;;;10038:18:181;;;10031:46;10094:18;;3077:55:131;9778:340:181;3077:55:131;-1:-1:-1;;;;;3189:24:131;;3208:4;3189:24;3181:42;;;;-1:-1:-1;;;3181:42:131;;10325:2:181;3181:42:131;;;10307:21:181;10364:1;10344:18;;;10337:29;-1:-1:-1;;;10382:18:181;;;10375:35;10427:18;;3181:42:131;10123:328:181;3181:42:131;3258:24;3285:65;3308:7;3317;3326:8;3336:13;3285:22;:65::i;:::-;3258:92;;3365:42;3387:11;3400:6;3365:21;:42::i;:::-;3357:61;;;;-1:-1:-1;;;3357:61:131;;10658:2:181;3357:61:131;;;10640:21:181;10697:1;10677:18;;;10670:29;-1:-1:-1;;;10715:18:181;;;10708:36;10761:18;;3357:61:131;10456:329:181;3357:61:131;4187:13;4203:15;:8;4187:13;4203:12;:15::i;:::-;4187:31;-1:-1:-1;4224:12:131;4239:33;4251:16;4265:2;13008::174;13004:16;;;-1:-1:-1;;;;;13000:28:174;4251:16:131;:::i;:::-;-1:-1:-1;;4239:11:131;;;-1:-1:-1;;;;;4239:33:131;4269:2;4239:11;:33::i;:::-;4284:15;;;;:9;:15;;;;;;4224:48;;-1:-1:-1;4284:15:131;;4279:260;;4340:15;;;;:9;:15;;;;;;;:22;;-1:-1:-1;;4340:22:131;4358:4;4340:22;;;4415:57;-1:-1:-1;;;4415:57:131;;4452:13;11320:10:181;11308:23;4415:57:131;;;11290:42:181;11348:18;;;11341:34;;;-1:-1:-1;;;;;4428:12:131;4415:36;;;;11263:18:181;;4415:57:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4486:46;4514:4;4503:16;;;;;;596:25:181;;584:2;569:18;;450:177;4503:16:131;;;;-1:-1:-1;;4503:16:131;;;;;;;;;;4486:46;;4521:10;;4486:46;:::i;:::-;;;;;;;;4279:260;3027:1567;;;2843:1751;;;;;:::o;3820:442:168:-;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;3960:27:::2;;3991:1;3960:32:::0;3956:92:::2;;4001:47;;-1:-1:-1::0;;;4001:47:168::2;;;;;;;;;;;3956:92;4095:9;::::0;-1:-1:-1;;;;;4095:9:168::2;:23:::0;4091:88:::2;;4127:52;;-1:-1:-1::0;;;4127:52:168::2;;;;;;;;;;;4091:88;4236:21;4254:1;4236:9;:21::i;:::-;3820:442::o:0;860:83:118:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;919:19:118::1;930:7;919:10;:19::i;3321:420:168:-:0;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;4404:539::-:0;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;4490:107:116:-:0;4549:4;4568:24;4582:9;4568:13;:24::i;:::-;4561:31;4490:107;-1:-1:-1;;4490:107:116:o;2085:412:131:-;2241:5;:12;2257:2;2241:18;2233:38;;;;-1:-1:-1;;;2233:38:131;;11903:2:181;2233:38:131;;;11885:21:181;11942:1;11922:18;;;11915:29;-1:-1:-1;;;11960:18:181;;;11953:37;12007:18;;2233:38:131;11701:330:181;2233:38:131;2301:22;2349:33;;;2384:5;2326:64;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2326:64:131;;;;;;;;;;;;;;-1:-1:-1;;;;;2326:64:131;-1:-1:-1;;;;;;2326:64:131;;;;;;;;;;2449:15;;2484:6;;;2420:72;;-1:-1:-1;;;2420:72:131;;2326:64;;-1:-1:-1;;;;;;2432:3:131;2420:28;;;;;:72;;2449:15;;;;2326:64;;2420:72;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2172:325;2085:412;;:::o;5220:267:116:-;5447:35;;-1:-1:-1;;;5447:35:116;;;;;;;;;;;5838:185;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;12875:34:181;;12945:15;;;12940:2;12925:18;;12918:43;5921:57:116;;12810:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;7763:306:131:-;7918:12;8022:7;8031;8040:8;8050:13;7951:113;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;7951:113:131;;;;;;;;;;;;;;-1:-1:-1;;;;;7951:113:131;-1:-1:-1;;;7951:113:131;;;;-1:-1:-1;7763:306:131;;;;;;:::o;5013:242::-;5149:4;5171:29;5193:6;5171:21;:29::i;:::-;:78;;;;;5204:45;5224:16;5242:6;5204:19;:45::i;:::-;5163:87;5013:242;-1:-1:-1;;;5013:242:131:o;10748:325:174:-;10848:10;;10818:7;;10975:4;10966:14;;11042:26;;;;10966:14;10848:10;11042:5;:26::i;:::-;11035:33;10748:325;-1:-1:-1;;;;;10748:325:174:o;15274:815::-;15375:14;15401:6;:11;;15411:1;15401:11;15397:49;;-1:-1:-1;15437:1:174;15422:17;;15397:49;15473:12;15477:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15473:12;-1:-1:-1;;;;;15455:30:174;:15;;;;:6;:15;:::i;:::-;:30;15451:282;;;15674:12;15678:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15674:12;15688;15692:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15688:12;15646:80;;-1:-1:-1;;;15646:80:174;;-1:-1:-1;;;;;13887:15:181;;;15646:80:174;;;13869:34:181;13939:15;;13919:18;;;13912:43;13971:18;;;13964:34;;;15710:15:174;;;14014:18:181;;;14007:34;13796:19;;15646:80:174;13595:452:181;15451:282:174;15751:2;15742:6;:11;;;15738:66;;;15762:42;;-1:-1:-1;;;15762:42:174;;;;;;;;;;;15738:66;15871:1;15862:10;;15811:15;15899:12;15903:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15899:12;-1:-1:-1;;;;;15884:27:174;16053:17;;;;16047:24;-1:-1:-1;;;;;5031:12:174;;;;5027:85;;;;16043:36;;15274:815;-1:-1:-1;;;;15274:815:174:o;4981:185:168:-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;1089:114:118:-;1160:6;;1146:30;;;14226:25:181;;;14282:2;14267:18;;14260:34;;;1146:30:118;;14199:18:181;1146:30:118;;;;;;;1182:6;:16;1089:114::o;5170:183:168:-;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;1891:127:131:-;1965:4;1984:29;1998:3;2003:9;1984:13;:29::i;5638:235::-;5799:16;;5817:27;;;;5846:21;;;;;5756:112;;-1:-1:-1;;;5756:112:131;;5731:4;;-1:-1:-1;;;;;5756:20:131;:42;;;;:112;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6314:970::-;6448:4;6462:18;6553:16;-1:-1:-1;;;;;6536:80:131;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6536:80:131;;;;;;;;;6526:91;;6536:80;6526:91;;;;6500:145;;;16594:19:181;6635:1:131;16629:12:181;;;16622:28;16666:12;;6500:145:131;;;-1:-1:-1;;6500:145:131;;;;;;;;;;6483:168;;6500:145;6483:168;;;;-1:-1:-1;;;6745:60:131;;;16818:66:181;;;;6483:168:131;-1:-1:-1;6659:11:131;;;;6717:149;;16900:12:181;;6745:60:131;;;-1:-1:-1;;6745:60:131;;;;;;;;;6813:23;;;;6844:16;;6717:20;:149::i;:::-;6658:208;;-1:-1:-1;6658:208:131;-1:-1:-1;6891:4:131;6881:14;;;;6873:104;;;;-1:-1:-1;;;6873:104:131;;17125:2:181;6873:104:131;;;17107:21:181;17164:2;17144:18;;;17137:30;17203:34;17183:18;;;17176:62;17274:34;17254:18;;;17247:62;-1:-1:-1;;;17325:19:181;;;17318:44;17379:19;;6873:104:131;16923:481:181;6873:104:131;6984:34;7021:55;7047:28;7021:25;:55::i;:::-;6984:92;;7096:183;7160:10;7143:28;;;;;;17538:19:181;;17582:2;17573:12;;17409:182;7143:28:131;;;;-1:-1:-1;;7143:28:131;;;;;;;;;;-1:-1:-1;;;7143:28:131;7181:26;;17721:49:181;7143:28:131;17786:11:181;;7181:26:131;;;;;;;;;;;;7217:6;:25;;;7252:7;:19;;;7096:37;:183::i;:::-;7083:196;6314:970;-1:-1:-1;;;;;;;6314:970:131:o;9979:390:174:-;10076:15;;10114:11;10121:4;10114;:11;:::i;:::-;10099:26;;10224:4;10218:11;10212:4;10209:21;10206:52;;;-1:-1:-1;10249:1:174;10206:52;10273:4;10281:1;10273:9;10269:41;;-1:-1:-1;;10292:11:174;;;;;10269:41;10325:39;10346:5;10353:4;10359;10325:20;:39::i;370:200:130:-;449:4;469:10;-1:-1:-1;;;;;469:18:130;;;461:38;;;;-1:-1:-1;;;461:38:130;;18010:2:181;461:38:130;;;17992:21:181;18049:1;18029:18;;;18022:29;-1:-1:-1;;;18067:18:181;;;18060:37;18114:18;;461:38:130;17808:330:181;461:38:130;556:9;-1:-1:-1;;;;;512:53:130;524:4;-1:-1:-1;;;;;512:38:130;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;512:53:130;;;370:200;-1:-1:-1;;;370:200:130:o;1737:238:138:-;1844:12;1858:19;1885:16;1904:19;1918:4;1904:13;:19::i;:::-;1885:38;;1936:34;1951:3;1956:6;1964:5;1936:14;:34::i;:::-;1929:41;;;;;1737:238;;;;;;:::o;660:443:135:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;799:28:135;818:8;799:18;:28::i;:::-;757:70;;847:251;;;;;;;;875:38;897:12;910:1;897:15;;;;;;;;:::i;:::-;;;;;;;875:21;:38::i;:::-;847:251;;;;932:38;954:12;967:1;954:15;;;;;;;;:::i;932:38::-;847:251;;;;993:38;1015:12;1028:1;1015:15;;;;;;;;:::i;:::-;;;;;;;993:21;:38::i;:::-;847:251;;;;1051:38;1073:12;1086:1;1073:15;;;;;;;;:::i;1051:38::-;847:251;;834:264;660:443;-1:-1:-1;;;660:443:135:o;1111:286:138:-;1260:14;1282:16;1301:19;1315:4;1301:13;:19::i;:::-;1282:38;;1333:59;1365:3;1370:6;1378;1386:5;1333:31;:59::i;:::-;1326:66;1111:286;-1:-1:-1;;;;;;1111:286:138:o;8805:657:174:-;8916:15;8961:2;8990;9076:4;9108;-1:-1:-1;;;;;9127:12:174;;;;:28;;;;;9151:4;9143;-1:-1:-1;;;;;9143:12:174;;9127:28;9119:51;;;;-1:-1:-1;;;9119:51:174;;18733:2:181;9119:51:174;;;18715:21:181;18772:2;18752:18;;;18745:30;-1:-1:-1;;;18791:18:181;;;18784:40;18841:18;;9119:51:174;18531:334:181;9119:51:174;9271:23;;;9344:17;;;9327:35;;;9410:17;;;9394:34;;;;;-1:-1:-1;;;8805:657:174:o;2213:140:138:-;2277:23;2342:4;2332:15;;;;;;2315:33;;;;;;17538:19:181;;17582:2;17573:12;;17409:182;2315:33:138;;;;;;;;;;;;;2308:40;;2213:140;;;:::o;3091:531:134:-;3198:12;3212:19;3239:23;3265:19;3277:6;3265:11;:19::i;:::-;3239:45;;3291:18;3311:25;3338:16;3358:33;3372:5;3379:4;3385:5;3358:13;:33::i;:::-;3412:19;;3290:101;;-1:-1:-1;3290:101:134;;-1:-1:-1;3290:101:134;-1:-1:-1;3412:24:134;;;3451:21;;;3461:11;3451:21;3443:60;;;;-1:-1:-1;;;3443:60:134;;19072:2:181;3443:60:134;;;19054:21:181;19111:2;19091:18;;;19084:30;19150:28;19130:18;;;19123:56;19196:18;;3443:60:134;18870:350:181;3443:60:134;3510:18;3531:6;:57;;3579:9;;;;;;;;;;;;3531:57;;;3540:36;3554:5;3560:14;3573:1;3560:10;:14;:::i;:::-;3554:21;;;;;;;;:::i;:::-;;;;;;;3540:13;:36::i;:::-;3603:6;;;;-1:-1:-1;3091:531:134;;-1:-1:-1;;;;;;;;;3091:531:134:o;2576:119:137:-;-1:-1:-1;;;;;;;;;;;;;;;;;962:39:137;;;;;;;;979:10;;962:39;;931:12;;;962:39;;;;2635:16;;2666:24;;:8;:24::i;4943:116::-;5007:7;5037:16;5049:3;3966:603;4030:7;4090:6;4077:3;:10;;;:19;4069:58;;;;-1:-1:-1;;;4069:58:137;;19427:2:181;4069:58:137;;;19409:21:181;19466:2;19446:18;;;19439:30;19505:28;19485:18;;;19478:56;19551:18;;4069:58:137;19225:350:181;4069:58:137;4135:18;4155;4175:20;4199:18;4213:3;4199:13;:18::i;:::-;4134:83;;-1:-1:-1;4134:83:137;-1:-1:-1;4134:83:137;-1:-1:-1;4244:21:137;4232:8;:33;;;;;;;;:::i;:::-;;4224:72;;;;-1:-1:-1;;;4224:72:137;;19427:2:181;4224:72:137;;;19409:21:181;19466:2;19446:18;;;19439:30;19505:28;19485:18;;;19478:56;19551:18;;4224:72:137;19225:350:181;4224:72:137;4303:11;4327:10;4317:3;:7;;;:20;;;;:::i;:::-;4384:10;;4303:34;;-1:-1:-1;4474:2:137;4459:18;;4456:86;;;4517:2;4513:19;;;4508:3;4504:29;4495:39;;4561:3;3966:603;-1:-1:-1;;;;;;3966:603:137:o;2458:293:134:-;2607:14;2630:11;2643:18;2665:24;2669:4;2675:6;2683:5;2665:3;:24::i;:::-;2629:60;;;;2704:6;:41;;;;-1:-1:-1;4283:17:133;;;;;;;;;;4262;;;;;;;;;:38;2714:31:134;4163:142:133;8400:503:134;8464:25;8497:32;8532:26;8551:6;8532:18;:26::i;:::-;8497:61;;8564:23;8605:5;:12;8590:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;8590:28:134;;;;;;;;;;;;;;;-1:-1:-1;8639:12:134;;8564:54;;-1:-1:-1;8625:11:134;8657:223;8681:3;8677:1;:7;8657:223;;;8696:20;8719:29;8739:5;8745:1;8739:8;;;;;;;;:::i;:::-;;;;;;;8719:19;:29::i;:::-;8696:52;;8767:66;;;;;;;;8786:7;8767:66;;;;8804:27;8823:7;8804:18;:27::i;:::-;8767:66;;;8756:5;8762:1;8756:8;;;;;;;;:::i;:::-;;;;;;;;;;:77;-1:-1:-1;8862:3:134;;8657:223;;;-1:-1:-1;8893:5:134;;8400:503;-1:-1:-1;;;;8400:503:134:o;4093:4109::-;4233:19;4260:26;4233:19;;;4373:26;4394:4;4373:20;:26::i;:::-;4354:45;;4406:21;4430:5;4406:29;;4441:23;4474:27;4511;-1:-1:-1;;;;;;;;;;;;;;;;;;;4511:27:134;4626:13;;4612:11;4645:3358;4669:3;4665:1;:7;4645:3358;;;4698:6;4705:1;4698:9;;;;;;;;:::i;:::-;;;;;;;4684:23;;4734:19;4715:38;;;;;:::i;:::-;;-1:-1:-1;4898:15:134;4912:1;4898:15;;:::i;:::-;;;4926;4945:1;4926:20;4922:575;;5032:19;;5022:30;;;;;;;:47;;5014:77;;;;-1:-1:-1;;;5014:77:134;;19914:2:181;5014:77:134;;;19896:21:181;19953:2;19933:18;;;19926:30;-1:-1:-1;;;19972:18:181;;;19965:47;20029:18;;5014:77:134;19712:341:181;5014:77:134;4922:575;;;5110:19;;:26;5139:6;-1:-1:-1;5106:391:134;;;5243:19;;5233:30;;;;;;;:47;;5225:87;;;;-1:-1:-1;;;5225:87:134;;20260:2:181;5225:87:134;;;20242:21:181;20299:2;20279:18;;;20272:30;20338:29;20318:18;;;20311:57;20385:18;;5225:87:134;20058:351:181;5106:391:134;5444:13;5399:41;5420:11;:19;;;5399:20;:41::i;:::-;:58;5391:97;;;;-1:-1:-1;;;5391:97:134;;20616:2:181;5391:97:134;;;20598:21:181;20655:2;20635:18;;;20628:30;20694:28;20674:18;;;20667:56;20740:18;;5391:97:134;20414:350:181;5391:97:134;5593:3;;;;;898:14;;778:2;;898:14;:::i;:::-;5617:11;:19;;;:26;:48;5613:2384;;5700:10;;5677:546;;5832:5;5677:546;5986:15;6010:3;6014:15;6010:20;;;;;;;;:::i;:::-;;;;;;;;;6004:27;;5986:45;;6043:33;6079:11;:19;;;6099:9;6079:30;;;;;;;;;;:::i;:::-;;;;;;;6043:66;;6137:20;6148:8;6137:10;:20::i;:::-;6121:36;;6191:1;6169:23;;6204:8;;4645:3358;;5613:2384;1051:1;6241:11;:19;;;:26;:59;6237:1760;;6312:17;6332:25;6345:11;6332:12;:25::i;:::-;6312:45;;6367:12;6388:4;6393:1;6388:7;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;6406:12:134;6426:10;6435:1;6388:7;6426:10;:::i;:::-;6421:16;;:1;:16;:::i;:::-;6406:31;;6447:26;6476:30;6493:4;6499:6;6476:30;;:16;:30::i;:::-;6447:59;;6516:25;6544:38;6561:3;6566:15;6544:16;:38::i;:::-;6516:66;;6592:26;6621:51;6644:13;6659:12;6621:22;:51::i;:::-;6592:80;-1:-1:-1;6687:26:134;;;1555:1;6687:26;;:55;;-1:-1:-1;6717:25:134;;;1593:1;6717:25;6687:55;6683:1242;;;6784:18;6760:13;:20;:42;:87;;;;;6829:18;6806:12;:19;:41;6760:87;6756:299;;;7005:37;7024:18;7005:37;;:::i;:::-;;;6756:299;-1:-1:-1;;;;1687:12:134;-1:-1:-1;7181:5:134;;-1:-1:-1;;;;;7181:5:134;6683:1242;7207:31;;;;;:65;;-1:-1:-1;7242:30:134;;;1516:1;7242:30;7207:65;7203:722;;;7312:13;:20;7290:18;:42;7286:552;;-1:-1:-1;;;;1687:12:134;-1:-1:-1;7569:5:134;;-1:-1:-1;;;;;7569:5:134;7286:552;7715:34;7726:11;:19;;;7746:1;7726:22;;;;;;;;:::i;:::-;;;;;;;7715:10;:34::i;:::-;7699:50;-1:-1:-1;7785:18:134;-1:-1:-1;4645:3358:134;;-1:-1:-1;;;;;4645:3358:134;7203:722;7866:48;;-1:-1:-1;;;7866:48:134;;21421:2:181;7866:48:134;;;21403:21:181;21460:2;21440:18;;;21433:30;21499:34;21479:18;;;21472:62;-1:-1:-1;;;21550:18:181;;;21543:36;21596:19;;7866:48:134;21219:402:181;6237:1760:134;7949:39;;-1:-1:-1;;;7949:39:134;;21828:2:181;7949:39:134;;;21810:21:181;21867:2;21847:18;;;21840:30;21906:31;21886:18;;;21879:59;21955:18;;7949:39:134;21626:353:181;4645:3358:134;-1:-1:-1;;;;8085:34:134;;8133:10;8145:38;8162:3;8167:15;8145:16;:38::i;:::-;8125:72;;;;-1:-1:-1;8185:11:134;;-1:-1:-1;4093:4109:134;-1:-1:-1;;;;;;;;;;;4093:4109:134:o;10087:167::-;10209:13;;;;10223:20;;10155:19;;10189:60;;10223:24;;10246:1;;10223:24;:::i;:::-;10209:39;;;;;;;;:::i;1146:1290:137:-;1207:16;1232:18;1254:20;1278:18;1292:3;1278:13;:18::i;:::-;1231:65;;-1:-1:-1;1231:65:137;;-1:-1:-1;1323:21:137;;-1:-1:-1;1311:8:137;:33;;;;;;;;:::i;:::-;;1303:69;;;;-1:-1:-1;;;1303:69:137;;22186:2:181;1303:69:137;;;22168:21:181;22225:2;22205:18;;;22198:30;22264:25;22244:18;;;22237:53;22307:18;;1303:69:137;21984:347:181;1303:69:137;1778:30;;;361:2;1778:30;;;;;;;;;1755:20;;1778:30;;;;-1:-1:-1;;;;;;;;;;;;;;;;;1778:30:137;;;;;;;;;;;;;;-1:-1:-1;1755:53:137;-1:-1:-1;1815:17:137;1859:10;1875:426;1891:10;;1882:19;;1875:426;;;361:2;1919:9;:27;1911:82;;;;-1:-1:-1;;;1911:82:137;;22538:2:181;1911:82:137;;;22520:21:181;22577:2;22557:18;;;22550:30;22616:34;22596:18;;;22589:62;-1:-1:-1;;;22667:18:181;;;22660:40;22717:19;;1911:82:137;22336:406:181;1911:82:137;2003:18;2023;2047:92;2070:61;;;;;;;;2100:6;2087:3;:10;;;:19;;;;:::i;:::-;2070:61;;;;2123:6;2113:3;:7;;;:16;;;;:::i;:::-;2070:61;;2047:13;:92::i;:::-;2002:137;;;;;2165:65;;;;;;;;2195:10;2182;:23;;;;:::i;:::-;2165:65;;;;2222:6;2212:3;:7;;;:16;;;;:::i;:::-;2165:65;;;2148:3;2152:9;2148:14;;;;;;;;:::i;:::-;;;;;;;;;;:82;2239:14;2252:1;2239:14;;:::i;:::-;;-1:-1:-1;2271:23:137;2284:10;2271;:23;:::i;:::-;2261:33;;;;:::i;:::-;;;1903:398;;1875:426;;;-1:-1:-1;2387:22:137;;2394:3;1146:1290;-1:-1:-1;;;;1146:1290:137:o;7144:1872::-;7228:7;7243;7258:11;7305:1;7292:3;:10;;;:14;7284:51;;;;-1:-1:-1;;;7284:51:137;;22949:2:181;7284:51:137;;;22931:21:181;22988:2;22968:18;;;22961:30;23027:26;23007:18;;;23000:54;23071:18;;7284:51:137;22747:348:181;7284:51:137;7356:7;;;;7424:10;;7342:11;7416:19;7460:8;7451:17;;7447:1565;;;7509:1;7512;7515:21;7501:36;;;;;;;;;;7447:1565;7563:8;7554:6;:17;7550:1462;;;7655:14;7672:13;7681:4;7672:6;:13;:::i;:::-;7655:30;;7715:6;7702:3;:10;;;:19;7694:57;;;;-1:-1:-1;;;7694:57:137;;23302:2:181;7694:57:137;;;23284:21:181;23341:2;23321:18;;;23314:30;23380:27;23360:18;;;23353:55;23425:18;;7694:57:137;23100:349:181;7694:57:137;7768:1;;-1:-1:-1;7771:6:137;-1:-1:-1;7779:21:137;;-1:-1:-1;7760:41:137;;-1:-1:-1;;7760:41:137;7550:1462;7827:8;7818:6;:17;7814:1198;;;7867:19;7889:13;7898:4;7889:6;:13;:::i;:::-;7867:35;;7932:11;7919:3;:10;;;:24;7911:68;;;;-1:-1:-1;;;7911:68:137;;23656:2:181;7911:68:137;;;23638:21:181;23695:2;23675:18;;;23668:30;23734:33;23714:18;;;23707:61;23785:18;;7911:68:137;23454:355:181;7911:68:137;8097:1;8088:11;;8082:18;8115:2;8111:20;;;8106:3;8102:30;8078:55;;8170:20;8078:55;8119:11;8170:20;:::i;:::-;8157:10;;:33;8149:70;;;;-1:-1:-1;;;8149:70:137;;24016:2:181;8149:70:137;;;23998:21:181;24055:2;24035:18;;;24028:30;24094:26;24074:18;;;24067:54;24138:18;;8149:70:137;23814:348:181;8149:70:137;8236:15;8240:11;8236:1;:15;:::i;:::-;8228:55;-1:-1:-1;8253:6:137;-1:-1:-1;8261:21:137;;-1:-1:-1;8228:55:137;;-1:-1:-1;;;8228:55:137;7814:1198;8309:8;8300:6;:17;8296:716;;;8398:15;8416:13;8425:4;8416:6;:13;:::i;:::-;8398:31;;8459:7;8446:3;:10;;;:20;8438:56;;;;-1:-1:-1;;;8438:56:137;;24369:2:181;8438:56:137;;;24351:21:181;24408:2;24388:18;;;24381:30;24447:25;24427:18;;;24420:53;24490:18;;8438:56:137;24167:347:181;8438:56:137;8511:1;;-1:-1:-1;8514:7:137;-1:-1:-1;8511:1:137;;-1:-1:-1;8503:42:137;;-1:-1:-1;;8503:42:137;8296:716;8586:20;8609:13;8618:4;8609:6;:13;:::i;:::-;8586:36;;8652:12;8639:3;:10;;;:25;8631:67;;;;-1:-1:-1;;;8631:67:137;;24721:2:181;8631:67:137;;;24703:21:181;24760:2;24740:18;;;24733:30;24799:31;24779:18;;;24772:59;24848:18;;8631:67:137;24519:353:181;8631:67:137;8816:1;8807:11;;8801:18;8834:2;8830:21;;;8825:3;8821:31;8797:56;;8890:22;8797:56;8838:12;8890:22;:::i;:::-;8877:10;;:35;8869:70;;;;-1:-1:-1;;;8869:70:137;;25079:2:181;8869:70:137;;;25061:21:181;25118:2;25098:18;;;25091:30;-1:-1:-1;;;25137:18:181;;;25130:52;25199:18;;8869:70:137;24877:346:181;8869:70:137;8956:16;8960:12;8956:1;:16;:::i;:::-;8948:57;-1:-1:-1;8974:7:137;-1:-1:-1;8983:21:137;;-1:-1:-1;8948:57:137;;-1:-1:-1;;;8948:57:137;7144:1872;;;;;;:::o;2814:299::-;2876:12;2897:18;2917;2937:20;2961:18;2975:3;2961:13;:18::i;:::-;2896:83;;-1:-1:-1;2896:83:137;-1:-1:-1;2896:83:137;-1:-1:-1;3006:21:137;2994:8;:33;;;;;;;;:::i;:::-;;2986:70;;;;-1:-1:-1;;;2986:70:137;;25430:2:181;2986:70:137;;;25412:21:181;25469:2;25449:18;;;25442:30;25508:26;25488:18;;;25481:54;25552:18;;2986:70:137;25228:348:181;2986:70:137;3070:38;3076:3;:7;;;3085:10;3097;3070:5;:38::i;3454:374:133:-;3517:12;3537:20;3570:6;:13;3586:1;3570:17;;;;:::i;:::-;3560:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3560:28:133;-1:-1:-1;3609:13:133;;3537:51;;-1:-1:-1;3595:11:133;3628:175;3652:3;3648:1;:7;3628:175;;;3697:1;3684:6;3691:1;3684:9;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;3684:9:133;:14;;3667:7;3675:5;:1;3679;3675:5;:::i;:::-;3667:14;;;;;;;;:::i;:::-;;;;:31;-1:-1:-1;;;;;3667:31:133;;;;;;;;;3753:2;3740:6;3747:1;3740:9;;;;;;;;:::i;:::-;;;;;3734:21;;;3740:9;;3734:21;:::i;:::-;3727:29;;3706:7;3714:5;:1;3718;3714:5;:::i;:::-;:9;;3722:1;3714:9;:::i;:::-;3706:18;;;;;;;;:::i;:::-;;;;:50;-1:-1:-1;;;;;3706:50:133;;;;;;;;-1:-1:-1;3785:3:133;;3628:175;;;-1:-1:-1;3816:7:133;;3454:374;-1:-1:-1;;;3454:374:133:o;3030:300::-;3093:7;3128:2;3112:6;:13;:18;3108:131;;;-1:-1:-1;3203:2:133;3191:15;3185:22;;3030:300::o;3108:131::-;3263:6;3252:29;;;;;;;;;;;;:::i;9199:401:134:-;9273:15;9296:19;9341:2;9326:5;:12;;;:17;9322:232;;;9416:29;9439:5;9416:22;:29::i;:::-;9407:38;;9322:232;;;9521:26;9541:5;9521:19;:26::i;:::-;9512:35;;9322:232;9567:28;9588:6;9567:20;:28::i;9779:164::-;9846:18;9879:59;9900:37;9920:5;:13;;;9934:1;9920:16;;;;;;;;:::i;9900:37::-;9879:20;:59::i;2808:218:133:-;2883:12;2917:6;:13;2907:6;:23;2903:60;;-1:-1:-1;2947:9:133;;;;;;;;;-1:-1:-1;2947:9:133;;2940:16;;2903:60;2976:45;2982:6;2990;3014;2998;:13;:22;;;;:::i;:::-;2976:5;:45::i;10482:223:134:-;10570:15;;10612:75;10631:1;10619:2;:9;:13;:30;;;;;10648:1;10636:2;:9;:13;10619:30;:48;;;;;10662:2;10665:1;10662:5;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;10653:14:134;;:2;10656:1;10653:5;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;10653:5:134;:14;10619:48;10612:75;;;10677:3;;;;:::i;:::-;;;;10612:75;;9255:789:137;9356:12;9376:16;9405:7;9395:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9395:18:137;;9376:37;;9423:3;:10;9437:1;9423:15;9419:46;;9455:3;-1:-1:-1;9448:10:137;;9419:46;9471:11;9485:14;9492:7;9485:4;:14;:::i;:::-;9471:28;-1:-1:-1;9557:2:137;9548:12;;9505;9623:181;9647:12;9657:2;9647:7;:12;:::i;:::-;9643:1;:16;9623:181;;;9703:10;;9690:24;;9730:9;9737:2;9709:3;9730:9;:::i;:::-;;-1:-1:-1;9747:10:137;9755:2;9747:10;;:::i;:::-;;-1:-1:-1;9786:3:137;;9623:181;;;-1:-1:-1;9847:12:137;9919:1;9912:2;9902:7;:12;9896:2;:19;9890:3;:26;:30;9883:37;;10011:4;10004;9998:11;9994:22;9986:4;9982:9;9976:3;9970:10;9966:26;9963:54;9957:4;9950:68;10036:3;10029:10;;;;;;9255:789;;;;;:::o;6733:107::-;6798:12;6825:10;6831:3;6825:5;:10::i;352:2452:133:-;460:12;504:7;488:12;504:7;498:2;488:12;:::i;:::-;:23;;480:50;;;;-1:-1:-1;;;480:50:133;;26410:2:181;480:50:133;;;26392:21:181;26449:2;26429:18;;;26422:30;-1:-1:-1;;;26468:18:181;;;26461:44;26522:18;;480:50:133;26208:338:181;480:50:133;564:6;544:16;553:7;564:6;544:16;:::i;:::-;:26;;536:53;;;;-1:-1:-1;;;536:53:133;;26410:2:181;536:53:133;;;26392:21:181;26449:2;26429:18;;;26422:30;-1:-1:-1;;;26468:18:181;;;26461:44;26522:18;;536:53:133;26208:338:181;536:53:133;620:16;629:7;620:6;:16;:::i;:::-;603:6;:13;:33;;595:63;;;;-1:-1:-1;;;595:63:133;;26753:2:181;595:63:133;;;26735:21:181;26792:2;26772:18;;;26765:30;-1:-1:-1;;;26811:18:181;;;26804:47;26868:18;;595:63:133;26551:341:181;595:63:133;665:22;718:15;;740:1693;;;;2554:4;2548:11;2535:24;;2717:1;2706:9;2699:20;2757:4;2746:9;2742:20;2736:4;2729:34;711:2060;;740:1693;898:4;892:11;879:24;;1485:2;1476:7;1472:16;1827:9;1820:17;1814:4;1810:28;1798:9;1787;1783:25;1779:60;1867:7;1863:2;1859:16;2081:6;2067:9;2060:17;2054:4;2050:28;2038:9;2030:6;2026:22;2022:57;2018:70;1885:341;2106:3;2102:2;2099:11;1885:341;;;2206:9;;2195:21;;2137:4;2129:13;;;;2159;1885:341;;;-1:-1:-1;;2236:26:133;;;2420:2;2403:11;-1:-1:-1;;2399:25:133;2393:4;2386:39;-1:-1:-1;711:2060:133;-1:-1:-1;2790:9:133;352:2452;-1:-1:-1;;;;352:2452:133:o;10157:118:137:-;10214:12;10241:29;10247:3;:7;;;10256:1;10259:3;:10;;;10241:5;:29::i;632:127:181:-;693:10;688:3;684:20;681:1;674:31;724:4;721:1;714:15;748:4;745:1;738:15;764:257;836:4;830:11;;;868:17;;915:18;900:34;;936:22;;;897:62;894:88;;;962:18;;:::i;:::-;998:4;991:24;764:257;:::o;1026:252::-;1098:2;1092:9;1140:3;1128:16;;1174:18;1159:34;;1195:22;;;1156:62;1153:88;;;1221:18;;:::i;1283:275::-;1354:2;1348:9;1419:2;1400:13;;-1:-1:-1;;1396:27:181;1384:40;;1454:18;1439:34;;1475:22;;;1436:62;1433:88;;;1501:18;;:::i;:::-;1537:2;1530:22;1283:275;;-1:-1:-1;1283:275:181:o;1563:530::-;1605:5;1658:3;1651:4;1643:6;1639:17;1635:27;1625:55;;1676:1;1673;1666:12;1625:55;1712:6;1699:20;1738:18;1734:2;1731:26;1728:52;;;1760:18;;:::i;:::-;1804:55;1847:2;1828:13;;-1:-1:-1;;1824:27:181;1853:4;1820:38;1804:55;:::i;:::-;1884:2;1875:7;1868:19;1930:3;1923:4;1918:2;1910:6;1906:15;1902:26;1899:35;1896:55;;;1947:1;1944;1937:12;1896:55;2012:2;2005:4;1997:6;1993:17;1986:4;1977:7;1973:18;1960:55;2060:1;2035:16;;;2053:4;2031:27;2024:38;;;;2039:7;1563:530;-1:-1:-1;;;1563:530:181:o;2098:539::-;2184:6;2192;2245:2;2233:9;2224:7;2220:23;2216:32;2213:52;;;2261:1;2258;2251:12;2213:52;2301:9;2288:23;2330:18;2371:2;2363:6;2360:14;2357:34;;;2387:1;2384;2377:12;2357:34;2410:49;2451:7;2442:6;2431:9;2427:22;2410:49;:::i;:::-;2400:59;;2512:2;2501:9;2497:18;2484:32;2468:48;;2541:2;2531:8;2528:16;2525:36;;;2557:1;2554;2547:12;2525:36;;2580:51;2623:7;2612:8;2601:9;2597:24;2580:51;:::i;:::-;2570:61;;;2098:539;;;;;:::o;2642:320::-;2710:6;2763:2;2751:9;2742:7;2738:23;2734:32;2731:52;;;2779:1;2776;2769:12;2731:52;2819:9;2806:23;2852:18;2844:6;2841:30;2838:50;;;2884:1;2881;2874:12;2838:50;2907:49;2948:7;2939:6;2928:9;2924:22;2907:49;:::i;:::-;2897:59;2642:320;-1:-1:-1;;;;2642:320:181:o;2967:131::-;-1:-1:-1;;;;;3042:31:181;;3032:42;;3022:70;;3088:1;3085;3078:12;3103:247;3162:6;3215:2;3203:9;3194:7;3190:23;3186:32;3183:52;;;3231:1;3228;3221:12;3183:52;3270:9;3257:23;3289:31;3314:5;3289:31;:::i;3563:813::-;3626:5;3674:4;3662:9;3657:3;3653:19;3649:30;3646:50;;;3692:1;3689;3682:12;3646:50;3725:2;3719:9;3767:4;3759:6;3755:17;3791:18;3859:6;3847:10;3844:22;3839:2;3827:10;3824:18;3821:46;3818:72;;;3870:18;;:::i;:::-;3910:10;3906:2;3899:22;3939:6;3930:15;;3982:9;3969:23;3961:6;3954:39;4054:2;4043:9;4039:18;4026:32;4021:2;4013:6;4009:15;4002:57;4120:2;4109:9;4105:18;4092:32;4087:2;4079:6;4075:15;4068:57;4186:2;4175:9;4171:18;4158:32;4153:2;4145:6;4141:15;4134:57;4242:3;4231:9;4227:19;4214:33;4200:47;;4270:2;4262:6;4259:14;4256:34;;;4286:1;4283;4276:12;4256:34;;4324:45;4365:3;4356:6;4345:9;4341:22;4324:45;:::i;:::-;4318:3;4310:6;4306:16;4299:71;;;3563:813;;;;:::o;4381:1027::-;4447:5;4495:4;4483:9;4478:3;4474:19;4470:30;4467:50;;;4513:1;4510;4503:12;4467:50;4535:22;;:::i;:::-;4526:31;;4593:9;4580:23;4573:5;4566:38;4623:2;4676;4665:9;4661:18;4648:32;4699:18;4740:2;4732:6;4729:14;4726:34;;;4756:1;4753;4746:12;4726:34;4794:6;4783:9;4779:22;4769:32;;4839:3;4832:4;4828:2;4824:13;4820:23;4810:51;;4857:1;4854;4847:12;4810:51;4893:2;4880:16;4915:2;4911;4908:10;4905:36;;;4921:18;;:::i;:::-;4967:2;4964:1;4960:10;4950:20;;4990:28;5014:2;5010;5006:11;4990:28;:::i;:::-;5052:15;;;5122:11;;;5118:20;;;5083:12;;;;5150:15;;;5147:35;;;5178:1;5175;5168:12;5147:35;5202:11;;;;5222:142;5238:6;5233:3;5230:15;5222:142;;;5304:17;;5292:30;;5255:12;;;;5342;;;;5222:142;;;5396:5;5391:2;5384:5;5380:14;5373:29;;;;;;;4381:1027;;;;:::o;5413:1797::-;5559:6;5567;5575;5583;5591;5644:3;5632:9;5623:7;5619:23;5615:33;5612:53;;;5661:1;5658;5651:12;5612:53;5700:9;5687:23;5719:31;5744:5;5719:31;:::i;:::-;5769:5;-1:-1:-1;5826:2:181;5811:18;;5798:32;5839:33;5798:32;5839:33;:::i;:::-;5891:7;-1:-1:-1;5949:2:181;5934:18;;5921:32;5972:18;6002:14;;;5999:34;;;6029:1;6026;6019:12;5999:34;6052:49;6093:7;6084:6;6073:9;6069:22;6052:49;:::i;:::-;6042:59;;6148:2;6137:9;6133:18;6120:32;6110:42;;6205:3;6194:9;6190:19;6177:33;6161:49;;6235:2;6225:8;6222:16;6219:36;;;6251:1;6248;6241:12;6219:36;6274:24;;;;6332:3;6314:16;;;6310:26;6307:46;;;6349:1;6346;6339:12;6307:46;6377:22;;:::i;:::-;6437:2;6424:16;6415:7;6408:33;6487:2;6483;6479:11;6466:25;6516:2;6506:8;6503:16;6500:36;;;6532:1;6529;6522:12;6500:36;6570:62;6624:7;6613:8;6609:2;6605:17;6570:62;:::i;:::-;6565:2;6556:7;6552:16;6545:88;;6679:2;6675;6671:11;6658:25;6708:2;6698:8;6695:16;6692:36;;;6724:1;6721;6714:12;6692:36;6762:65;6819:7;6808:8;6804:2;6800:17;6762:65;:::i;:::-;6757:2;6748:7;6744:16;6737:91;;6874:2;6870;6866:11;6853:25;6903:2;6893:8;6890:16;6887:36;;;6919:1;6916;6909:12;6887:36;6957:44;6993:7;6982:8;6978:2;6974:17;6957:44;:::i;:::-;6952:2;6943:7;6939:16;6932:70;;7048:3;7044:2;7040:12;7027:26;7078:2;7068:8;7065:16;7062:36;;;7094:1;7091;7084:12;7062:36;7133:44;7169:7;7158:8;7154:2;7150:17;7133:44;:::i;:::-;7127:3;7118:7;7114:17;7107:71;;7197:7;7187:17;;;;;5413:1797;;;;;;;;:::o;7215:180::-;7274:6;7327:2;7315:9;7306:7;7302:23;7298:32;7295:52;;;7343:1;7340;7333:12;7295:52;-1:-1:-1;7366:23:181;;7215:180;-1:-1:-1;7215:180:181:o;8118:250::-;8203:1;8213:113;8227:6;8224:1;8221:13;8213:113;;;8303:11;;;8297:18;8284:11;;;8277:39;8249:2;8242:10;8213:113;;;-1:-1:-1;;8360:1:181;8342:16;;8335:27;8118:250::o;8373:270::-;8414:3;8452:5;8446:12;8479:6;8474:3;8467:19;8495:76;8564:6;8557:4;8552:3;8548:14;8541:4;8534:5;8530:16;8495:76;:::i;:::-;8625:2;8604:15;-1:-1:-1;;8600:29:181;8591:39;;;;8632:4;8587:50;;8373:270;-1:-1:-1;;8373:270:181:o;8648:474::-;8869:2;8858:9;8851:21;8832:4;8895:44;8935:2;8924:9;8920:18;8912:6;8895:44;:::i;:::-;8987:9;8979:6;8975:22;8970:2;8959:9;8955:18;8948:50;9015:32;9040:6;9032;9015:32;:::i;:::-;9007:40;;;9112:1;9108;9103:3;9099:11;9095:19;9087:6;9083:32;9078:2;9067:9;9063:18;9056:60;8648:474;;;;;;:::o;9459:314::-;9634:2;9623:9;9616:21;9597:4;9654:44;9694:2;9683:9;9679:18;9671:6;9654:44;:::i;:::-;9646:52;;9763:1;9759;9754:3;9750:11;9746:19;9738:6;9734:32;9729:2;9718:9;9714:18;9707:60;9459:314;;;;;:::o;10790:127::-;10851:10;10846:3;10842:20;10839:1;10832:31;10882:4;10879:1;10872:15;10906:4;10903:1;10896:15;10922:191;-1:-1:-1;;;;;11049:10:181;;;11037;;;11033:27;;11072:12;;;11069:38;;;11087:18;;:::i;:::-;11069:38;10922:191;;;;:::o;11568:128::-;11635:9;;;11656:11;;;11653:37;;;11670:18;;:::i;12036:217::-;12183:2;12172:9;12165:21;12146:4;12203:44;12243:2;12232:9;12228:18;12220:6;12203:44;:::i;12258:400::-;-1:-1:-1;;;;;12459:32:181;;12441:51;;12528:2;12523;12508:18;;12501:30;;;-1:-1:-1;;12548:44:181;;12573:18;;12565:6;12548:44;:::i;:::-;12540:52;;12640:10;12632:6;12628:23;12623:2;12612:9;12608:18;12601:51;12258:400;;;;;;:::o;12972:488::-;-1:-1:-1;;;;;13241:15:181;;;13223:34;;13293:15;;13288:2;13273:18;;13266:43;13345:3;13340:2;13325:18;;13318:31;;;13166:4;;13366:45;;13391:19;;13383:6;13366:45;:::i;:::-;13358:53;;13447:6;13442:2;13431:9;13427:18;13420:34;12972:488;;;;;;;:::o;13465:125::-;13530:9;;;13551:10;;;13548:36;;;13564:18;;:::i;14305:1412::-;14636:6;14625:9;14618:25;14599:4;14662:2;14700;14695;14684:9;14680:18;14673:30;14745:6;14739:13;14734:2;14723:9;14719:18;14712:41;14808:2;14800:6;14796:15;14790:22;14784:3;14773:9;14769:19;14762:51;14869:4;14861:6;14857:17;14851:24;14844:4;14833:9;14829:20;14822:54;14931:2;14923:6;14919:15;14913:22;14907:3;14896:9;14892:19;14885:51;14983:3;14975:6;14971:16;14965:23;15025:4;15019:3;15008:9;15004:19;14997:33;15050:51;15096:3;15085:9;15081:19;15067:12;15050:51;:::i;:::-;15039:62;;15148:9;15143:3;15139:19;15132:4;15121:9;15117:20;15110:49;15191:4;15186:3;15182:14;15223:6;15217:13;15212:3;15205:26;15280:2;15272:6;15268:15;15262:22;15314:4;15309:2;15304:3;15300:12;15293:26;15339:6;15374:14;15368:21;15413:6;15405;15398:22;15445:2;15440:3;15436:12;15429:19;;15491:2;15475:14;15471:23;15457:37;;15512:1;15503:10;;15522:169;15536:6;15533:1;15530:13;15522:169;;;15597:13;;15585:26;;15666:15;;;;15558:1;15551:9;;;;;15631:12;;;;15522:169;;;-1:-1:-1;15708:3:181;14305:1412;-1:-1:-1;;;;;;;;;14305:1412:181:o;15722:277::-;15789:6;15842:2;15830:9;15821:7;15817:23;15813:32;15810:52;;;15858:1;15855;15848:12;15810:52;15890:9;15884:16;15943:5;15936:13;15929:21;15922:5;15919:32;15909:60;;15965:1;15962;15955:12;16004:428;16161:3;16199:6;16193:13;16215:66;16274:6;16269:3;16262:4;16254:6;16250:17;16215:66;:::i;:::-;16350:2;16346:15;;;;-1:-1:-1;;16342:53:181;16303:16;;;;16328:68;;;16423:2;16412:14;;16004:428;-1:-1:-1;;16004:428:181:o;18143:251::-;18213:6;18266:2;18254:9;18245:7;18241:23;18237:32;18234:52;;;18282:1;18279;18272:12;18234:52;18314:9;18308:16;18333:31;18358:5;18333:31;:::i;18399:127::-;18460:10;18455:3;18451:20;18448:1;18441:31;18491:4;18488:1;18481:15;18515:4;18512:1;18505:15;19580:127;19641:10;19636:3;19632:20;19629:1;19622:31;19672:4;19669:1;19662:15;19696:4;19693:1;19686:15;20769:127;20830:10;20825:3;20821:20;20818:1;20811:31;20861:4;20858:1;20851:15;20885:4;20882:1;20875:15;20901:157;20931:1;20965:4;20962:1;20958:12;20989:3;20979:37;;20996:18;;:::i;:::-;21048:3;21041:4;21038:1;21034:12;21030:22;21025:27;;;20901:157;;;;:::o;21063:151::-;21153:4;21146:12;;;21132;;;21128:31;;21171:14;;21168:40;;;21188:18;;:::i;25581:168::-;25654:9;;;25685;;25702:15;;;25696:22;;25682:37;25672:71;;25723:18;;:::i;25754:184::-;25824:6;25877:2;25865:9;25856:7;25852:23;25848:32;25845:52;;;25893:1;25890;25883:12;25845:52;-1:-1:-1;25916:16:181;;25754:184;-1:-1:-1;25754:184:181:o;25943:135::-;25982:3;26003:17;;;26000:43;;26023:18;;:::i;:::-;-1:-1:-1;26070:1:181;26059:13;;25943:135::o;26083:120::-;26123:1;26149;26139:35;;26154:18;;:::i;:::-;-1:-1:-1;26188:9:181;;26083:120::o"},"gasEstimates":{"creation":{"codeDepositCost":"2344600","executionCost":"infinite","totalCost":"infinite"},"external":{"AMB()":"infinite","DOMAIN()":"infinite","MIRROR_DOMAIN()":"infinite","ROOT_MANAGER()":"infinite","acceptProposedOwner()":"63792","delay()":"281","mirrorConnector()":"2370","owner()":"2387","processMessage(bytes)":"infinite","processMessageFromRoot(address,address,bytes,uint256,(bytes32,(uint256,bytes32,uint256,uint256,bytes),(uint256,bytes32[]),bytes,bytes))":"infinite","processed(bytes32)":"2561","proposeNewOwner(address)":"infinite","proposed()":"2386","proposedTimestamp()":"2349","renounceOwnership()":"65933","renounced()":"2407","sendMessage(bytes,bytes)":"infinite","setGasCap(uint256)":"27975","setMirrorConnector(address)":"infinite","stateCommitmentChain()":"infinite","verifySender(address)":"infinite"},"internal":{"_encodeXDomainCalldata(address,address,bytes memory,uint256)":"infinite","_sendMessage(bytes memory,bytes memory)":"infinite","_verifySender(address)":"infinite","_verifyStateRootProof(struct L2MessageInclusionProof memory)":"infinite","_verifyStorageProof(bytes memory,struct L2MessageInclusionProof memory)":"infinite","_verifyXDomainMessage(bytes memory,struct L2MessageInclusionProof memory)":"infinite"}},"methodIdentifiers":{"AMB()":"d69f9d61","DOMAIN()":"52a9674b","MIRROR_DOMAIN()":"14168416","ROOT_MANAGER()":"5f61e3ec","acceptProposedOwner()":"c5b350df","delay()":"6a42b8f8","mirrorConnector()":"cc394283","owner()":"8da5cb5b","processMessage(bytes)":"4ff746f6","processMessageFromRoot(address,address,bytes,uint256,(bytes32,(uint256,bytes32,uint256,uint256,bytes),(uint256,bytes32[]),bytes,bytes))":"6e2edb4e","processed(bytes32)":"c1f0808a","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","renounceOwnership()":"715018a6","renounced()":"d232c220","sendMessage(bytes,bytes)":"48e6fa23","setGasCap(uint256)":"7850b020","setMirrorConnector(address)":"5bd11efc","stateCommitmentChain()":"0f329ef8","verifySender(address)":"db1b7659"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_mirrorDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_amb\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rootManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_stateCommitmentChain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Connector__processMessage_notUsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__index_indexMoreThan32Bytes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"len\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slice\",\"type\":\"uint256\"}],\"name\":\"TypedMemView__index_overrun\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_previous\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"GasCapUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"MirrorConnectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"mirrorDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"amb\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mirrorConnector\",\"type\":\"address\"}],\"name\":\"NewConnector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROOT_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_messageNonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"batchRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"batchSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevTotalElements\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct ChainBatchHeader\",\"name\":\"stateRootBatchHeader\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"siblings\",\"type\":\"bytes32[]\"}],\"internalType\":\"struct ChainInclusionProof\",\"name\":\"stateRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"stateTrieWitness\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"storageTrieWitness\",\"type\":\"bytes\"}],\"internalType\":\"struct L2MessageInclusionProof\",\"name\":\"_proof\",\"type\":\"tuple\"}],\"name\":\"processMessageFromRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"processed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"}],\"name\":\"setGasCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"}],\"name\":\"setMirrorConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateCommitmentChain\",\"outputs\":[{\"internalType\":\"contract IStateCommitmentChain\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"processMessage(bytes)\":{\"details\":\"This is called by AMBs to process messages originating from mirror connector\"},\"processMessageFromRoot(address,address,bytes,uint256,(bytes32,(uint256,bytes32,uint256,uint256,bytes),(uint256,bytes32[]),bytes,bytes))\":{\"details\":\"modified from: https://github.com/ethereum-optimism/optimism/blob/9973c1da3211e094a180a8a96ba9f8bb1ab1b389/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol#L165\"},\"sendMessage(bytes,bytes)\":{\"details\":\"This is called by the root manager *only* on mainnet to propagate the aggregate root\"}},\"version\":1},\"userdoc\":{\"events\":{\"GasCapUpdated(uint256,uint256)\":{\"notice\":\"Emitted when admin updates the gas cap\"},\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"}},\"kind\":\"user\",\"methods\":{\"AMB()\":{\"notice\":\"Address of the AMB on this domain.\"},\"DOMAIN()\":{\"notice\":\"The domain of this Messaging (i.e. Connector) contract.\"},\"MIRROR_DOMAIN()\":{\"notice\":\"The domain of the corresponding messaging (i.e. Connector) contract.\"},\"ROOT_MANAGER()\":{\"notice\":\"RootManager contract address.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"mirrorConnector()\":{\"notice\":\"Connector on L2 for L1 connectors, and vice versa.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"processMessage(bytes)\":{\"notice\":\"Processes a message received by an AMB\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"sendMessage(bytes,bytes)\":{\"notice\":\"Sends a message over the amb\"},\"setMirrorConnector(address)\":{\"notice\":\"Sets the address of the l2Connector for this domain\"},\"verifySender(address)\":{\"notice\":\"Checks the cross domain sender for a given address\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/optimism/OptimismHubConnector.sol\":\"OptimismHubConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/Connector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IConnector} from \\\"../interfaces/IConnector.sol\\\";\\n\\n/**\\n * @title Connector\\n * @author Connext Labs, Inc.\\n * @notice This contract has the messaging interface functions used by all connectors.\\n *\\n * @dev This contract stores information about mirror connectors, but can be used as a\\n * base for contracts that do not have a mirror (i.e. the connector handling messaging on\\n * mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\\n * will be empty\\n *\\n * @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\\n * or `mirrorGas`\\n */\\nabstract contract Connector is ProposedOwnable, IConnector {\\n  // ========== Custom Errors ===========\\n\\n  error Connector__processMessage_notUsed();\\n\\n  // ============ Events ============\\n\\n  event NewConnector(\\n    uint32 indexed domain,\\n    uint32 indexed mirrorDomain,\\n    address amb,\\n    address rootManager,\\n    address mirrorConnector\\n  );\\n\\n  event MirrorConnectorUpdated(address previous, address current);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The domain of this Messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable DOMAIN;\\n\\n  /**\\n   * @notice Address of the AMB on this domain.\\n   */\\n  address public immutable AMB;\\n\\n  /**\\n   * @notice RootManager contract address.\\n   */\\n  address public immutable ROOT_MANAGER;\\n\\n  /**\\n   * @notice The domain of the corresponding messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable MIRROR_DOMAIN;\\n\\n  /**\\n   * @notice Connector on L2 for L1 connectors, and vice versa.\\n   */\\n  address public mirrorConnector;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered AMB\\n   */\\n  modifier onlyAMB() {\\n    require(msg.sender == AMB, \\\"!AMB\\\");\\n    _;\\n  }\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered ROOT_MANAGER\\n   */\\n  modifier onlyRootManager() {\\n    // NOTE: RootManager will be zero address for spoke connectors.\\n    // Only root manager can dispatch a message to spokes/L2s via the hub connector.\\n    require(msg.sender == ROOT_MANAGER, \\\"!rootManager\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) ProposedOwnable() {\\n    // set the owner\\n    _setOwner(msg.sender);\\n\\n    // sanity checks on values\\n    require(_domain != 0, \\\"empty domain\\\");\\n    require(_rootManager != address(0), \\\"empty rootManager\\\");\\n    // see note at top of contract on why the mirror values are not sanity checked\\n\\n    // set immutables\\n    DOMAIN = _domain;\\n    AMB = _amb;\\n    ROOT_MANAGER = _rootManager;\\n    MIRROR_DOMAIN = _mirrorDomain;\\n    // set mutables if defined\\n    if (_mirrorConnector != address(0)) {\\n      _setMirrorConnector(_mirrorConnector);\\n    }\\n\\n    emit NewConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector);\\n  }\\n\\n  // ============ Receivable ============\\n  /**\\n   * @notice Connectors may need to receive native asset to handle fees when sending a\\n   * message\\n   */\\n  receive() external payable {}\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Sets the address of the l2Connector for this domain\\n   */\\n  function setMirrorConnector(address _mirrorConnector) public onlyOwner {\\n    _setMirrorConnector(_mirrorConnector);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice Processes a message received by an AMB\\n   * @dev This is called by AMBs to process messages originating from mirror connector\\n   */\\n  function processMessage(bytes memory _data) external virtual onlyAMB {\\n    _processMessage(_data);\\n    emit MessageProcessed(_data, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Checks the cross domain sender for a given address\\n   */\\n  function verifySender(address _expected) external returns (bool) {\\n    return _verifySender(_expected);\\n  }\\n\\n  // ============ Virtual Functions ============\\n\\n  /**\\n   * @notice This function is used by the Connext contract on the l2 domain to send a message to the\\n   * l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\\n   * @param _data The contents of the message\\n   * @param _encodedData Data used to send the message; specific to connector\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal virtual;\\n\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(\\n    bytes memory /* _data */\\n  ) internal virtual {\\n    // By default, reverts. This is to ensure the call path is not used unless this function is\\n    // overridden by the inheriting class\\n    revert Connector__processMessage_notUsed();\\n  }\\n\\n  /**\\n   * @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\\n   * is the expected address.\\n   * @dev Should be overridden by the implementing Connector contract.\\n   */\\n  function _verifySender(address _expected) internal virtual returns (bool);\\n\\n  // ============ Private Functions ============\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal virtual {\\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\\n    mirrorConnector = _mirrorConnector;\\n  }\\n}\\n\",\"keccak256\":\"0x08d4077a1b5caf9f46491206064bb24bee467dd741b42fed3d30a608eea83368\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/GasCap.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\n\\nabstract contract GasCap is ProposedOwnable {\\n  // ============ Storage ============\\n  /**\\n   * @notice The gnosis amb requires destination gas to be specified on the origin.\\n   * The gas used will be passed in by the relayer to allow for real-time estimates,\\n   * but will be capped at the admin-set cap.\\n   */\\n  uint256 gasCap;\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted when admin updates the gas cap\\n   * @param _previous The starting value\\n   * @param _updated The final value\\n   */\\n  event GasCapUpdated(uint256 _previous, uint256 _updated);\\n\\n  // ============ Constructor ============\\n  constructor(uint256 _gasCap) {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Admin Fns ============\\n  function setGasCap(uint256 _gasCap) public onlyOwner {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Internal Fns ============\\n\\n  /**\\n   * @notice Used (by admin) to update the gas cap\\n   * @param _gasCap The new value\\n   */\\n  function _setGasCap(uint256 _gasCap) internal {\\n    emit GasCapUpdated(gasCap, _gasCap);\\n    gasCap = _gasCap;\\n  }\\n\\n  /**\\n   * @notice Used to get the gas to use. Will be the original value IFF it\\n   * is less than the cap\\n   * @param _gas The proposed gas value\\n   */\\n  function _getGas(uint256 _gas) internal view returns (uint256) {\\n    if (_gas > gasCap) {\\n      _gas = gasCap;\\n    }\\n    return _gas;\\n  }\\n}\\n\",\"keccak256\":\"0xb8b52a3372f08490c918d1f490ad80764d54bd62d1638e4d17a5b552efe6587d\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/HubConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Connector} from \\\"./Connector.sol\\\";\\n\\n/**\\n * @title HubConnector\\n * @author Connext Labs, Inc.\\n * @notice This contract implements the messaging functions needed on the hub-side of a given AMB.\\n * The HubConnector has a limited set of functionality compared to the SpokeConnector, namely that\\n * it contains no logic to store or prove messages.\\n *\\n * @dev This contract should be deployed on the hub-side of an AMB (i.e. on L1), and contracts\\n * which extend this should implement the virtual functions defined in the BaseConnector class\\n */\\nabstract contract HubConnector is Connector {\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) Connector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector) {}\\n\\n  // ============ Public fns ============\\n  /**\\n   * @notice Sends a message over the amb\\n   * @dev This is called by the root manager *only* on mainnet to propagate the aggregate root\\n   */\\n  function sendMessage(bytes memory _data, bytes memory _encodedData) external payable onlyRootManager {\\n    _sendMessage(_data, _encodedData);\\n    emit MessageSent(_data, _encodedData, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0xc35621419ca872ed0550b0943a577b39942f3d2c9b54de008fee382d5ad290e4\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/BaseOptimism.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {OptimismAmb} from \\\"../../interfaces/ambs/optimism/OptimismAmb.sol\\\";\\n\\nimport {GasCap} from \\\"../GasCap.sol\\\";\\n\\nabstract contract BaseOptimism is GasCap {\\n  // ============ Constructor ============\\n  constructor(uint256 _gasCap) GasCap(_gasCap) {}\\n\\n  // ============ Override Fns ============\\n  function _verifySender(address _amb, address _expected) internal view returns (bool) {\\n    require(msg.sender == _amb, \\\"!bridge\\\");\\n    return OptimismAmb(_amb).xDomainMessageSender() == _expected;\\n  }\\n\\n  /**\\n   * @notice Using Optimism AMB, the gas is provided to `sendMessage` as an encoded uint\\n   */\\n  function _getGasFromEncoded(bytes memory _encodedData) internal view returns (uint256 _gas) {\\n    // Should include gas info in specialized calldata\\n    require(_encodedData.length == 32, \\\"!data length\\\");\\n\\n    // Get the gas, if it is more than the cap use the cap\\n    _gas = _getGas(abi.decode(_encodedData, (uint256)));\\n  }\\n}\\n\",\"keccak256\":\"0x87034df88ba7e4d767c451ff2d0180f8eee25f502682153af7a018e280eab8e3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/OptimismHubConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IRootManager} from \\\"../../interfaces/IRootManager.sol\\\";\\nimport {OptimismAmb} from \\\"../../interfaces/ambs/optimism/OptimismAmb.sol\\\";\\nimport {IStateCommitmentChain, L2MessageInclusionProof} from \\\"../../interfaces/ambs/optimism/IStateCommitmentChain.sol\\\";\\n\\nimport {TypedMemView} from \\\"../../../shared/libraries/TypedMemView.sol\\\";\\n\\nimport {HubConnector} from \\\"../HubConnector.sol\\\";\\nimport {Connector} from \\\"../Connector.sol\\\";\\n\\nimport {PredeployAddresses} from \\\"./lib/PredeployAddresses.sol\\\";\\nimport {OVMCodec} from \\\"./lib/OVMCodec.sol\\\";\\nimport {SecureMerkleTrie} from \\\"./lib/SecureMerkleTrie.sol\\\";\\n\\nimport {BaseOptimism} from \\\"./BaseOptimism.sol\\\";\\n\\ncontract OptimismHubConnector is HubConnector, BaseOptimism {\\n  // ============ Libraries ============\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // ============ Storage ============\\n  IStateCommitmentChain public immutable stateCommitmentChain;\\n\\n  // NOTE: This is needed because we need to track the roots we've\\n  // already sent across chains. When sending an optimism message, we send calldata\\n  // for Connector.processMessage. At any point these messages could be processed\\n  // before the timeout using `processFromRoot` or after the timeout using `process`\\n  // we track the roots sent here to ensure we process each root once\\n  mapping(bytes32 => bool) public processed;\\n\\n  // ============ Constructor ============\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    address _stateCommitmentChain,\\n    uint256 _gasCap\\n  ) HubConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector) BaseOptimism(_gasCap) {\\n    stateCommitmentChain = IStateCommitmentChain(_stateCommitmentChain);\\n  }\\n\\n  // ============ Override Fns ============\\n  function _verifySender(address _expected) internal view override returns (bool) {\\n    return _verifySender(AMB, _expected);\\n  }\\n\\n  /**\\n   * @dev Sends `aggregateRoot` to messaging on l2\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\\n    // Should always be dispatching the aggregate root\\n    require(_data.length == 32, \\\"!length\\\");\\n    // Get the calldata\\n    bytes memory _calldata = abi.encodeWithSelector(Connector.processMessage.selector, _data);\\n    // Dispatch message\\n    OptimismAmb(AMB).sendMessage(mirrorConnector, _calldata, uint32(gasCap));\\n  }\\n\\n  // DO NOT override _processMessage, should revert from `Connector` class. All messages must use the\\n  // `processMessageFromRoot` flow.\\n\\n  /**\\n   * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/9973c1da3211e094a180a8a96ba9f8bb1ab1b389/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol#L165\\n   */\\n  function processMessageFromRoot(\\n    address _target,\\n    address _sender,\\n    bytes memory _message,\\n    uint256 _messageNonce,\\n    L2MessageInclusionProof memory _proof\\n  ) external {\\n    // verify the sender is the l2 contract\\n    require(_sender == mirrorConnector, \\\"!mirrorConnector\\\");\\n\\n    // verify the target is this contract\\n    require(_target == address(this), \\\"!this\\\");\\n\\n    // Get the encoded data\\n    bytes memory xDomainData = _encodeXDomainCalldata(_target, _sender, _message, _messageNonce);\\n\\n    require(_verifyXDomainMessage(xDomainData, _proof), \\\"!proof\\\");\\n\\n    // NOTE: optimism seems to pad the calldata sent in to include more than the expected\\n    // 36 bytes, i.e. in this transaction:\\n    // https://blockscout.com/optimism/goerli/tx/0x440fda036d28eb547394a8689af90c5342a00a8ca2ab5117f2b85f54d1416ddd/logs\\n    // the corresponding _message is:\\n    // 0x4ff746f60000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002027ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757\\n    //\\n    // this means the length check and byte parsing used in the `ArbitrumHubConnector` would\\n    // not work here. Instead, take the back 32 bytes of the string\\n\\n    // NOTE: TypedMemView only loads 32-byte chunks onto stack, which is fine in this case\\n    bytes29 _view = _message.ref(0);\\n    bytes32 root = _view.index(_view.len() - 32, 32);\\n\\n    if (!processed[root]) {\\n      // set root to processed\\n      processed[root] = true;\\n      // update the root on the root manager\\n      IRootManager(ROOT_MANAGER).aggregate(MIRROR_DOMAIN, root);\\n\\n      emit MessageProcessed(abi.encode(root), msg.sender);\\n    } // otherwise root was already sent to root manager\\n  }\\n\\n  /**\\n   * Verifies that the given message is valid.\\n   * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/9973c1da3211e094a180a8a96ba9f8bb1ab1b389/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol#L283-L288\\n   * @param _xDomainCalldata Calldata to verify.\\n   * @param _proof Inclusion proof for the message.\\n   * @return Whether or not the provided message is valid.\\n   */\\n  function _verifyXDomainMessage(bytes memory _xDomainCalldata, L2MessageInclusionProof memory _proof)\\n    internal\\n    view\\n    returns (bool)\\n  {\\n    return (_verifyStateRootProof(_proof) && _verifyStorageProof(_xDomainCalldata, _proof));\\n  }\\n\\n  /**\\n   * Verifies that the state root within an inclusion proof is valid.\\n   * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/9973c1da3211e094a180a8a96ba9f8bb1ab1b389/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol#L295-L311\\n   * @param _proof Message inclusion proof.\\n   * @return Whether or not the provided proof is valid.\\n   */\\n  function _verifyStateRootProof(L2MessageInclusionProof memory _proof) internal view returns (bool) {\\n    return\\n      stateCommitmentChain.verifyStateCommitment(_proof.stateRoot, _proof.stateRootBatchHeader, _proof.stateRootProof);\\n  }\\n\\n  /**\\n   * Verifies that the storage proof within an inclusion proof is valid.\\n   * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/9973c1da3211e094a180a8a96ba9f8bb1ab1b389/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol#L313-L357\\n   * @param _xDomainCalldata Encoded message calldata.\\n   * @param _proof Message inclusion proof.\\n   * @return Whether or not the provided proof is valid.\\n   */\\n  function _verifyStorageProof(bytes memory _xDomainCalldata, L2MessageInclusionProof memory _proof)\\n    internal\\n    pure\\n    returns (bool)\\n  {\\n    bytes32 storageKey = keccak256(\\n      abi.encodePacked(\\n        keccak256(abi.encodePacked(_xDomainCalldata, PredeployAddresses.L2_CROSS_DOMAIN_MESSENGER)),\\n        uint256(0)\\n      )\\n    );\\n\\n    (bool exists, bytes memory encodedMessagePassingAccount) = SecureMerkleTrie.get(\\n      abi.encodePacked(PredeployAddresses.L2_TO_L1_MESSAGE_PASSER),\\n      _proof.stateTrieWitness,\\n      _proof.stateRoot\\n    );\\n\\n    require(exists == true, \\\"Message passing predeploy has not been initialized or invalid proof provided.\\\");\\n\\n    OVMCodec.EVMAccount memory account = OVMCodec.decodeEVMAccount(encodedMessagePassingAccount);\\n\\n    return\\n      SecureMerkleTrie.verifyInclusionProof(\\n        abi.encodePacked(storageKey),\\n        abi.encodePacked(uint8(1)),\\n        _proof.storageTrieWitness,\\n        account.storageRoot\\n      );\\n  }\\n\\n  /**\\n   * Generates the correct cross domain calldata for a message.\\n   * @dev taken from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/bridge/Lib_CrossDomainUtils.sol\\n   * @param _target Target contract address.\\n   * @param _sender Message sender address.\\n   * @param _message Message to send to the target.\\n   * @param _messageNonce Nonce for the provided message.\\n   * @return ABI encoded cross domain calldata.\\n   */\\n  function _encodeXDomainCalldata(\\n    address _target,\\n    address _sender,\\n    bytes memory _message,\\n    uint256 _messageNonce\\n  ) internal pure returns (bytes memory) {\\n    return\\n      abi.encodeWithSignature(\\\"relayMessage(address,address,bytes,uint256)\\\", _target, _sender, _message, _messageNonce);\\n  }\\n}\\n\",\"keccak256\":\"0xb18457d946271fda78aadfe30804e73e0eda62d596a63259595922e9186de6d6\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/lib/BytesUtils.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title BytesUtils\\n *\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/utils/Lib_BytesUtils.sol\\n */\\nlibrary BytesUtils {\\n  /**********************\\n   * Internal Functions *\\n   **********************/\\n\\n  function slice(\\n    bytes memory _bytes,\\n    uint256 _start,\\n    uint256 _length\\n  ) internal pure returns (bytes memory) {\\n    require(_length + 31 >= _length, \\\"slice_overflow\\\");\\n    require(_start + _length >= _start, \\\"slice_overflow\\\");\\n    require(_bytes.length >= _start + _length, \\\"slice_outOfBounds\\\");\\n\\n    bytes memory tempBytes;\\n\\n    assembly {\\n      switch iszero(_length)\\n      case 0 {\\n        // Get a location of some free memory and store it in tempBytes as\\n        // Solidity does for memory variables.\\n        tempBytes := mload(0x40)\\n\\n        // The first word of the slice result is potentially a partial\\n        // word read from the original array. To read it, we calculate\\n        // the length of that partial word and start copying that many\\n        // bytes into the array. The first word we copy will start with\\n        // data we don't care about, but the last `lengthmod` bytes will\\n        // land at the beginning of the contents of the new array. When\\n        // we're done copying, we overwrite the full first word with\\n        // the actual length of the slice.\\n        let lengthmod := and(_length, 31)\\n\\n        // The multiplication in the next line is necessary\\n        // because when slicing multiples of 32 bytes (lengthmod == 0)\\n        // the following copy loop was copying the origin's length\\n        // and then ending prematurely not copying everything it should.\\n        let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)))\\n        let end := add(mc, _length)\\n\\n        for {\\n          // The multiplication in the next line has the same exact purpose\\n          // as the one above.\\n          let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start)\\n        } lt(mc, end) {\\n          mc := add(mc, 0x20)\\n          cc := add(cc, 0x20)\\n        } {\\n          mstore(mc, mload(cc))\\n        }\\n\\n        mstore(tempBytes, _length)\\n\\n        //update free-memory pointer\\n        //allocating the array padded to 32 bytes like the compiler does now\\n        mstore(0x40, and(add(mc, 31), not(31)))\\n      }\\n      //if we want a zero-length slice let's just return a zero-length array\\n      default {\\n        tempBytes := mload(0x40)\\n\\n        //zero out the 32 bytes slice we are about to return\\n        //we need to do it because Solidity does not garbage collect\\n        mstore(tempBytes, 0)\\n\\n        mstore(0x40, add(tempBytes, 0x20))\\n      }\\n    }\\n\\n    return tempBytes;\\n  }\\n\\n  function slice(bytes memory _bytes, uint256 _start) internal pure returns (bytes memory) {\\n    if (_start >= _bytes.length) {\\n      return bytes(\\\"\\\");\\n    }\\n\\n    return slice(_bytes, _start, _bytes.length - _start);\\n  }\\n\\n  function toBytes32(bytes memory _bytes) internal pure returns (bytes32) {\\n    if (_bytes.length < 32) {\\n      bytes32 ret;\\n      assembly {\\n        ret := mload(add(_bytes, 32))\\n      }\\n      return ret;\\n    }\\n\\n    return abi.decode(_bytes, (bytes32)); // will truncate if input length > 32 bytes\\n  }\\n\\n  function toUint256(bytes memory _bytes) internal pure returns (uint256) {\\n    return uint256(toBytes32(_bytes));\\n  }\\n\\n  function toNibbles(bytes memory _bytes) internal pure returns (bytes memory) {\\n    bytes memory nibbles = new bytes(_bytes.length * 2);\\n\\n    uint256 len = _bytes.length;\\n    for (uint256 i = 0; i < len; ) {\\n      nibbles[i * 2] = _bytes[i] >> 4;\\n      nibbles[i * 2 + 1] = bytes1(uint8(_bytes[i]) % 16);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    return nibbles;\\n  }\\n\\n  function fromNibbles(bytes memory _bytes) internal pure returns (bytes memory) {\\n    bytes memory ret = new bytes(_bytes.length / 2);\\n\\n    uint256 len = ret.length;\\n    for (uint256 i = 0; i < len; ) {\\n      ret[i] = (_bytes[i * 2] << 4) | (_bytes[i * 2 + 1]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    return ret;\\n  }\\n\\n  function equal(bytes memory _bytes, bytes memory _other) internal pure returns (bool) {\\n    return keccak256(_bytes) == keccak256(_other);\\n  }\\n}\\n\",\"keccak256\":\"0x81feab05c6cadccdf548b5cc8bbb8e5afdbb788f5215f1cc477e4ee877665578\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/lib/MerkleTrie.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/* Library Imports */\\nimport {BytesUtils} from \\\"./BytesUtils.sol\\\";\\nimport {RLPReader} from \\\"./RLPReader.sol\\\";\\n\\n/**\\n * @title MerkleTrie\\n *\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/trie/Lib_MerkleTrie.sol\\n */\\nlibrary MerkleTrie {\\n  /*******************\\n   * Data Structures *\\n   *******************/\\n\\n  enum NodeType {\\n    BranchNode,\\n    ExtensionNode,\\n    LeafNode\\n  }\\n\\n  struct TrieNode {\\n    bytes encoded;\\n    RLPReader.RLPItem[] decoded;\\n  }\\n\\n  /**********************\\n   * Contract Constants *\\n   **********************/\\n\\n  // TREE_RADIX determines the number of elements per branch node.\\n  uint256 constant TREE_RADIX = 16;\\n  // Branch nodes have TREE_RADIX elements plus an additional `value` slot.\\n  uint256 constant BRANCH_NODE_LENGTH = TREE_RADIX + 1;\\n  // Leaf nodes and extension nodes always have two elements, a `path` and a `value`.\\n  uint256 constant LEAF_OR_EXTENSION_NODE_LENGTH = 2;\\n\\n  // Prefixes are prepended to the `path` within a leaf or extension node and\\n  // allow us to differentiate between the two node types. `ODD` or `EVEN` is\\n  // determined by the number of nibbles within the unprefixed `path`. If the\\n  // number of nibbles if even, we need to insert an extra padding nibble so\\n  // the resulting prefixed `path` has an even number of nibbles.\\n  uint8 constant PREFIX_EXTENSION_EVEN = 0;\\n  uint8 constant PREFIX_EXTENSION_ODD = 1;\\n  uint8 constant PREFIX_LEAF_EVEN = 2;\\n  uint8 constant PREFIX_LEAF_ODD = 3;\\n\\n  // Just a utility constant. RLP represents `NULL` as 0x80.\\n  bytes1 constant RLP_NULL = bytes1(0x80);\\n\\n  /**********************\\n   * Internal Functions *\\n   **********************/\\n\\n  /**\\n   * @notice Verifies a proof that a given key/value pair is present in the\\n   * Merkle trie.\\n   * @param _key Key of the node to search for, as a hex string.\\n   * @param _value Value of the node to search for, as a hex string.\\n   * @param _proof Merkle trie inclusion proof for the desired node. Unlike\\n   * traditional Merkle trees, this proof is executed top-down and consists\\n   * of a list of RLP-encoded nodes that make a path down to the target node.\\n   * @param _root Known root of the Merkle trie. Used to verify that the\\n   * included proof is correctly constructed.\\n   * @return _verified `true` if the k/v pair exists in the trie, `false` otherwise.\\n   */\\n  function verifyInclusionProof(\\n    bytes memory _key,\\n    bytes memory _value,\\n    bytes memory _proof,\\n    bytes32 _root\\n  ) internal pure returns (bool _verified) {\\n    (bool exists, bytes memory value) = get(_key, _proof, _root);\\n\\n    return (exists && BytesUtils.equal(_value, value));\\n  }\\n\\n  /**\\n   * @notice Retrieves the value associated with a given key.\\n   * @param _key Key to search for, as hex bytes.\\n   * @param _proof Merkle trie inclusion proof for the key.\\n   * @param _root Known root of the Merkle trie.\\n   * @return _exists Whether or not the key exists.\\n   * @return _value Value of the key if it exists.\\n   */\\n  function get(\\n    bytes memory _key,\\n    bytes memory _proof,\\n    bytes32 _root\\n  ) internal pure returns (bool _exists, bytes memory _value) {\\n    TrieNode[] memory proof = _parseProof(_proof);\\n    (uint256 pathLength, bytes memory keyRemainder, bool isFinalNode) = _walkNodePath(proof, _key, _root);\\n\\n    bool exists = keyRemainder.length == 0;\\n\\n    require(exists || isFinalNode, \\\"Provided proof is invalid.\\\");\\n\\n    bytes memory value = exists ? _getNodeValue(proof[pathLength - 1]) : bytes(\\\"\\\");\\n\\n    return (exists, value);\\n  }\\n\\n  /*********************\\n   * Private Functions *\\n   *********************/\\n\\n  /**\\n   * @notice Walks through a proof using a provided key.\\n   * @param _proof Inclusion proof to walk through.\\n   * @param _key Key to use for the walk.\\n   * @param _root Known root of the trie.\\n   * @return _pathLength Length of the final path\\n   * @return _keyRemainder Portion of the key remaining after the walk.\\n   * @return _isFinalNode Whether or not we've hit a dead end.\\n   */\\n  function _walkNodePath(\\n    TrieNode[] memory _proof,\\n    bytes memory _key,\\n    bytes32 _root\\n  )\\n    private\\n    pure\\n    returns (\\n      uint256 _pathLength,\\n      bytes memory _keyRemainder,\\n      bool _isFinalNode\\n    )\\n  {\\n    uint256 pathLength = 0;\\n    bytes memory key = BytesUtils.toNibbles(_key);\\n\\n    bytes32 currentNodeID = _root;\\n    uint256 currentKeyIndex = 0;\\n    uint256 currentKeyIncrement = 0;\\n    TrieNode memory currentNode;\\n\\n    // Proof is top-down, so we start at the first element (root).\\n    uint256 len = _proof.length;\\n    for (uint256 i = 0; i < len; ) {\\n      currentNode = _proof[i];\\n      currentKeyIndex += currentKeyIncrement;\\n\\n      // Keep track of the proof elements we actually need.\\n      // It's expensive to resize arrays, so this simply reduces gas costs.\\n      pathLength += 1;\\n\\n      if (currentKeyIndex == 0) {\\n        // First proof element is always the root node.\\n        require(keccak256(currentNode.encoded) == currentNodeID, \\\"Invalid root hash\\\");\\n      } else if (currentNode.encoded.length > 32 - 1) {\\n        // Nodes 32 bytes or larger are hashed inside branch nodes.\\n        require(keccak256(currentNode.encoded) == currentNodeID, \\\"Invalid large internal hash\\\");\\n      } else {\\n        // Nodes smaller than 31 bytes aren't hashed.\\n        require(BytesUtils.toBytes32(currentNode.encoded) == currentNodeID, \\\"Invalid internal node hash\\\");\\n      }\\n\\n      // unreachable code if it's below the if statement under this\\n      unchecked {\\n        ++i;\\n      }\\n\\n      if (currentNode.decoded.length == BRANCH_NODE_LENGTH) {\\n        if (currentKeyIndex == key.length) {\\n          // We've hit the end of the key\\n          // meaning the value should be within this branch node.\\n          break;\\n        } else {\\n          // We're not at the end of the key yet.\\n          // Figure out what the next node ID should be and continue.\\n          uint8 branchKey = uint8(key[currentKeyIndex]);\\n          RLPReader.RLPItem memory nextNode = currentNode.decoded[branchKey];\\n          currentNodeID = _getNodeID(nextNode);\\n          currentKeyIncrement = 1;\\n          continue;\\n        }\\n      } else if (currentNode.decoded.length == LEAF_OR_EXTENSION_NODE_LENGTH) {\\n        bytes memory path = _getNodePath(currentNode);\\n        uint8 prefix = uint8(path[0]);\\n        uint8 offset = 2 - (prefix % 2);\\n        bytes memory pathRemainder = BytesUtils.slice(path, offset);\\n        bytes memory keyRemainder = BytesUtils.slice(key, currentKeyIndex);\\n        uint256 sharedNibbleLength = _getSharedNibbleLength(pathRemainder, keyRemainder);\\n\\n        if (prefix == PREFIX_LEAF_EVEN || prefix == PREFIX_LEAF_ODD) {\\n          if (pathRemainder.length == sharedNibbleLength && keyRemainder.length == sharedNibbleLength) {\\n            // The key within this leaf matches our key exactly.\\n            // Increment the key index to reflect that we have no remainder.\\n            currentKeyIndex += sharedNibbleLength;\\n          }\\n\\n          // We've hit a leaf node, so our next node should be NULL.\\n          currentNodeID = bytes32(RLP_NULL);\\n          break;\\n        } else if (prefix == PREFIX_EXTENSION_EVEN || prefix == PREFIX_EXTENSION_ODD) {\\n          if (sharedNibbleLength != pathRemainder.length) {\\n            // Our extension node is not identical to the remainder.\\n            // We've hit the end of this path\\n            // updates will need to modify this extension.\\n            currentNodeID = bytes32(RLP_NULL);\\n            break;\\n          } else {\\n            // Our extension shares some nibbles.\\n            // Carry on to the next node.\\n            currentNodeID = _getNodeID(currentNode.decoded[1]);\\n            currentKeyIncrement = sharedNibbleLength;\\n            continue;\\n          }\\n        } else {\\n          revert(\\\"Received a node with an unknown prefix\\\");\\n        }\\n      } else {\\n        revert(\\\"Received an unparseable node.\\\");\\n      }\\n    }\\n\\n    // If our node ID is NULL, then we're at a dead end.\\n    bool isFinalNode = currentNodeID == bytes32(RLP_NULL);\\n    return (pathLength, BytesUtils.slice(key, currentKeyIndex), isFinalNode);\\n  }\\n\\n  /**\\n   * @notice Parses an RLP-encoded proof into something more useful.\\n   * @param _proof RLP-encoded proof to parse.\\n   * @return _parsed Proof parsed into easily accessible structs.\\n   */\\n  function _parseProof(bytes memory _proof) private pure returns (TrieNode[] memory _parsed) {\\n    RLPReader.RLPItem[] memory nodes = RLPReader.readList(_proof);\\n    TrieNode[] memory proof = new TrieNode[](nodes.length);\\n\\n    uint256 len = nodes.length;\\n    for (uint256 i = 0; i < len; ) {\\n      bytes memory encoded = RLPReader.readBytes(nodes[i]);\\n      proof[i] = TrieNode({encoded: encoded, decoded: RLPReader.readList(encoded)});\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    return proof;\\n  }\\n\\n  /**\\n   * @notice Picks out the ID for a node. Node ID is referred to as the\\n   * \\\"hash\\\" within the specification, but nodes < 32 bytes are not actually\\n   * hashed.\\n   * @param _node Node to pull an ID for.\\n   * @return _nodeID ID for the node, depending on the size of its contents.\\n   */\\n  function _getNodeID(RLPReader.RLPItem memory _node) private pure returns (bytes32 _nodeID) {\\n    bytes memory nodeID;\\n\\n    if (_node.length < 32) {\\n      // Nodes smaller than 32 bytes are RLP encoded.\\n      nodeID = RLPReader.readRawBytes(_node);\\n    } else {\\n      // Nodes 32 bytes or larger are hashed.\\n      nodeID = RLPReader.readBytes(_node);\\n    }\\n\\n    return BytesUtils.toBytes32(nodeID);\\n  }\\n\\n  /**\\n   * @notice Gets the path for a leaf or extension node.\\n   * @param _node Node to get a path for.\\n   * @return _path Node path, converted to an array of nibbles.\\n   */\\n  function _getNodePath(TrieNode memory _node) private pure returns (bytes memory _path) {\\n    return BytesUtils.toNibbles(RLPReader.readBytes(_node.decoded[0]));\\n  }\\n\\n  /**\\n   * @notice Gets the path for a node.\\n   * @param _node Node to get a value for.\\n   * @return _value Node value, as hex bytes.\\n   */\\n  function _getNodeValue(TrieNode memory _node) private pure returns (bytes memory _value) {\\n    return RLPReader.readBytes(_node.decoded[_node.decoded.length - 1]);\\n  }\\n\\n  /**\\n   * @notice Utility; determines the number of nibbles shared between two\\n   * nibble arrays.\\n   * @param _a First nibble array.\\n   * @param _b Second nibble array.\\n   * @return _shared Number of shared nibbles.\\n   */\\n  function _getSharedNibbleLength(bytes memory _a, bytes memory _b) private pure returns (uint256 _shared) {\\n    uint256 i = 0;\\n    while (_a.length > i && _b.length > i && _a[i] == _b[i]) {\\n      i++;\\n    }\\n    return i;\\n  }\\n}\\n\",\"keccak256\":\"0xead186b4bbb39d904ec1ecdc418893465831dba9a1ed088c17e673df6df9198a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/lib/OVMCodec.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/* Library Imports */\\nimport {RLPReader} from \\\"./RLPReader.sol\\\";\\n\\n/**\\n * @title OVMCodec\\n *\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/codec/Lib_OVMCodec.sol\\n */\\nlibrary OVMCodec {\\n  /***********\\n   * Structs *\\n   ***********/\\n\\n  struct EVMAccount {\\n    uint256 nonce;\\n    uint256 balance;\\n    bytes32 storageRoot;\\n    bytes32 codeHash;\\n  }\\n\\n  /**\\n   * @notice Decodes an RLP-encoded account state into a useful struct.\\n   * @param _encoded RLP-encoded account state.\\n   * @return Account state struct.\\n   */\\n  function decodeEVMAccount(bytes memory _encoded) internal pure returns (EVMAccount memory) {\\n    RLPReader.RLPItem[] memory accountState = RLPReader.readList(_encoded);\\n\\n    return\\n      EVMAccount({\\n        nonce: RLPReader.readUint256(accountState[0]),\\n        balance: RLPReader.readUint256(accountState[1]),\\n        storageRoot: RLPReader.readBytes32(accountState[2]),\\n        codeHash: RLPReader.readBytes32(accountState[3])\\n      });\\n  }\\n}\\n\",\"keccak256\":\"0x777f550172e00112a8fcdde5a759c6d86ef71ca46d78a7850d6cac217a156b2b\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/lib/PredeployAddresses.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title PredeployAddresses\\n *\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/constants/Lib_PredeployAddresses.sol\\n */\\nlibrary PredeployAddresses {\\n  address internal constant L2_TO_L1_MESSAGE_PASSER = 0x4200000000000000000000000000000000000000;\\n  address internal constant L1_MESSAGE_SENDER = 0x4200000000000000000000000000000000000001;\\n  address internal constant DEPLOYER_WHITELIST = 0x4200000000000000000000000000000000000002;\\n  address payable internal constant OVM_ETH = payable(0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000);\\n  address internal constant L2_CROSS_DOMAIN_MESSENGER = 0x4200000000000000000000000000000000000007;\\n  address internal constant LIB_ADDRESS_MANAGER = 0x4200000000000000000000000000000000000008;\\n  address internal constant PROXY_EOA = 0x4200000000000000000000000000000000000009;\\n  address internal constant L2_STANDARD_BRIDGE = 0x4200000000000000000000000000000000000010;\\n  address internal constant SEQUENCER_FEE_WALLET = 0x4200000000000000000000000000000000000011;\\n  address internal constant L2_STANDARD_TOKEN_FACTORY = 0x4200000000000000000000000000000000000012;\\n  address internal constant L1_BLOCK_NUMBER = 0x4200000000000000000000000000000000000013;\\n}\\n\",\"keccak256\":\"0xec0c20ed39e122e0f97a551b28ff9c845e012901bee3eef8d2cebb486007de03\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/lib/RLPReader.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title RLPReader\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/rlp/Lib_RLPReader.sol\\n */\\nlibrary RLPReader {\\n  /*************\\n   * Constants *\\n   *************/\\n\\n  uint256 internal constant MAX_LIST_LENGTH = 32;\\n\\n  /*********\\n   * Enums *\\n   *********/\\n\\n  enum RLPItemType {\\n    DATA_ITEM,\\n    LIST_ITEM\\n  }\\n\\n  /***********\\n   * Structs *\\n   ***********/\\n\\n  struct RLPItem {\\n    uint256 length;\\n    uint256 ptr;\\n  }\\n\\n  /**********************\\n   * Internal Functions *\\n   **********************/\\n\\n  /**\\n   * Converts bytes to a reference to memory position and length.\\n   * @param _in Input bytes to convert.\\n   * @return Output memory reference.\\n   */\\n  function toRLPItem(bytes memory _in) internal pure returns (RLPItem memory) {\\n    uint256 ptr;\\n    assembly {\\n      ptr := add(_in, 32)\\n    }\\n\\n    return RLPItem({length: _in.length, ptr: ptr});\\n  }\\n\\n  /**\\n   * Reads an RLP list value into a list of RLP items.\\n   * @param _in RLP list value.\\n   * @return Decoded RLP list items.\\n   */\\n  function readList(RLPItem memory _in) internal pure returns (RLPItem[] memory) {\\n    (uint256 listOffset, , RLPItemType itemType) = _decodeLength(_in);\\n\\n    require(itemType == RLPItemType.LIST_ITEM, \\\"Invalid RLP list value.\\\");\\n\\n    // Solidity in-memory arrays can't be increased in size, but *can* be decreased in size by\\n    // writing to the length. Since we can't know the number of RLP items without looping over\\n    // the entire input, we'd have to loop twice to accurately size this array. It's easier to\\n    // simply set a reasonable maximum list length and decrease the size before we finish.\\n    RLPItem[] memory out = new RLPItem[](MAX_LIST_LENGTH);\\n\\n    uint256 itemCount = 0;\\n    uint256 offset = listOffset;\\n    while (offset < _in.length) {\\n      require(itemCount < MAX_LIST_LENGTH, \\\"Provided RLP list exceeds max list length.\\\");\\n\\n      (uint256 itemOffset, uint256 itemLength, ) = _decodeLength(\\n        RLPItem({length: _in.length - offset, ptr: _in.ptr + offset})\\n      );\\n\\n      out[itemCount] = RLPItem({length: itemLength + itemOffset, ptr: _in.ptr + offset});\\n\\n      itemCount += 1;\\n      offset += itemOffset + itemLength;\\n    }\\n\\n    // Decrease the array size to match the actual item count.\\n    assembly {\\n      mstore(out, itemCount)\\n    }\\n\\n    return out;\\n  }\\n\\n  /**\\n   * Reads an RLP list value into a list of RLP items.\\n   * @param _in RLP list value.\\n   * @return Decoded RLP list items.\\n   */\\n  function readList(bytes memory _in) internal pure returns (RLPItem[] memory) {\\n    return readList(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP bytes value into bytes.\\n   * @param _in RLP bytes value.\\n   * @return Decoded bytes.\\n   */\\n  function readBytes(RLPItem memory _in) internal pure returns (bytes memory) {\\n    (uint256 itemOffset, uint256 itemLength, RLPItemType itemType) = _decodeLength(_in);\\n\\n    require(itemType == RLPItemType.DATA_ITEM, \\\"Invalid RLP bytes value.\\\");\\n\\n    return _copy(_in.ptr, itemOffset, itemLength);\\n  }\\n\\n  /**\\n   * Reads an RLP bytes value into bytes.\\n   * @param _in RLP bytes value.\\n   * @return Decoded bytes.\\n   */\\n  function readBytes(bytes memory _in) internal pure returns (bytes memory) {\\n    return readBytes(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP string value into a string.\\n   * @param _in RLP string value.\\n   * @return Decoded string.\\n   */\\n  function readString(RLPItem memory _in) internal pure returns (string memory) {\\n    return string(readBytes(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP string value into a string.\\n   * @param _in RLP string value.\\n   * @return Decoded string.\\n   */\\n  function readString(bytes memory _in) internal pure returns (string memory) {\\n    return readString(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP bytes32 value into a bytes32.\\n   * @param _in RLP bytes32 value.\\n   * @return Decoded bytes32.\\n   */\\n  function readBytes32(RLPItem memory _in) internal pure returns (bytes32) {\\n    // instead of <= 33\\n    require(_in.length < 33 + 1, \\\"Invalid RLP bytes32 value.\\\");\\n\\n    (uint256 itemOffset, uint256 itemLength, RLPItemType itemType) = _decodeLength(_in);\\n\\n    require(itemType == RLPItemType.DATA_ITEM, \\\"Invalid RLP bytes32 value.\\\");\\n\\n    uint256 ptr = _in.ptr + itemOffset;\\n    bytes32 out;\\n    assembly {\\n      out := mload(ptr)\\n\\n      // Shift the bytes over to match the item size.\\n      if lt(itemLength, 32) {\\n        out := div(out, exp(256, sub(32, itemLength)))\\n      }\\n    }\\n\\n    return out;\\n  }\\n\\n  /**\\n   * Reads an RLP bytes32 value into a bytes32.\\n   * @param _in RLP bytes32 value.\\n   * @return Decoded bytes32.\\n   */\\n  function readBytes32(bytes memory _in) internal pure returns (bytes32) {\\n    return readBytes32(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP uint256 value into a uint256.\\n   * @param _in RLP uint256 value.\\n   * @return Decoded uint256.\\n   */\\n  function readUint256(RLPItem memory _in) internal pure returns (uint256) {\\n    return uint256(readBytes32(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP uint256 value into a uint256.\\n   * @param _in RLP uint256 value.\\n   * @return Decoded uint256.\\n   */\\n  function readUint256(bytes memory _in) internal pure returns (uint256) {\\n    return readUint256(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP bool value into a bool.\\n   * @param _in RLP bool value.\\n   * @return Decoded bool.\\n   */\\n  function readBool(RLPItem memory _in) internal pure returns (bool) {\\n    require(_in.length == 1, \\\"Invalid RLP boolean value.\\\");\\n\\n    uint256 ptr = _in.ptr;\\n    uint256 out;\\n    assembly {\\n      out := byte(0, mload(ptr))\\n    }\\n\\n    require(out == 0 || out == 1, \\\"Lib_RLPReader: Invalid RLP boolean value, must be 0 or 1\\\");\\n\\n    return out != 0;\\n  }\\n\\n  /**\\n   * Reads an RLP bool value into a bool.\\n   * @param _in RLP bool value.\\n   * @return Decoded bool.\\n   */\\n  function readBool(bytes memory _in) internal pure returns (bool) {\\n    return readBool(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP address value into a address.\\n   * @param _in RLP address value.\\n   * @return Decoded address.\\n   */\\n  function readAddress(RLPItem memory _in) internal pure returns (address) {\\n    if (_in.length == 1) {\\n      return address(0);\\n    }\\n\\n    require(_in.length == 21, \\\"Invalid RLP address value.\\\");\\n\\n    return address(uint160(readUint256(_in)));\\n  }\\n\\n  /**\\n   * Reads an RLP address value into a address.\\n   * @param _in RLP address value.\\n   * @return Decoded address.\\n   */\\n  function readAddress(bytes memory _in) internal pure returns (address) {\\n    return readAddress(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads the raw bytes of an RLP item.\\n   * @param _in RLP item to read.\\n   * @return Raw RLP bytes.\\n   */\\n  function readRawBytes(RLPItem memory _in) internal pure returns (bytes memory) {\\n    return _copy(_in);\\n  }\\n\\n  /*********************\\n   * Private Functions *\\n   *********************/\\n\\n  /**\\n   * Decodes the length of an RLP item.\\n   * @param _in RLP item to decode.\\n   * @return Offset of the encoded data.\\n   * @return Length of the encoded data.\\n   * @return RLP item type (LIST_ITEM or DATA_ITEM).\\n   */\\n  function _decodeLength(RLPItem memory _in)\\n    private\\n    pure\\n    returns (\\n      uint256,\\n      uint256,\\n      RLPItemType\\n    )\\n  {\\n    require(_in.length > 0, \\\"RLP item cannot be null.\\\");\\n\\n    uint256 ptr = _in.ptr;\\n    uint256 prefix;\\n    assembly {\\n      prefix := byte(0, mload(ptr))\\n    }\\n\\n    if (prefix < 0x7f + 1) {\\n      // Single byte.\\n\\n      return (0, 1, RLPItemType.DATA_ITEM);\\n    } else if (prefix < 0xb7 + 1) {\\n      // Short string.\\n\\n      // slither-disable-next-line variable-scope\\n      uint256 strLen = prefix - 0x80;\\n\\n      require(_in.length > strLen, \\\"Invalid RLP short string.\\\");\\n\\n      return (1, strLen, RLPItemType.DATA_ITEM);\\n    } else if (prefix < 0xbf + 1) {\\n      // Long string.\\n      uint256 lenOfStrLen = prefix - 0xb7;\\n\\n      require(_in.length > lenOfStrLen, \\\"Invalid RLP long string length.\\\");\\n\\n      uint256 strLen;\\n      assembly {\\n        // Pick out the string length.\\n        strLen := div(mload(add(ptr, 1)), exp(256, sub(32, lenOfStrLen)))\\n      }\\n\\n      require(_in.length > lenOfStrLen + strLen, \\\"Invalid RLP long string.\\\");\\n\\n      return (1 + lenOfStrLen, strLen, RLPItemType.DATA_ITEM);\\n    } else if (prefix < 0xf7 + 1) {\\n      // Short list.\\n      // slither-disable-next-line variable-scope\\n      uint256 listLen = prefix - 0xc0;\\n\\n      require(_in.length > listLen, \\\"Invalid RLP short list.\\\");\\n\\n      return (1, listLen, RLPItemType.LIST_ITEM);\\n    } else {\\n      // Long list.\\n      uint256 lenOfListLen = prefix - 0xf7;\\n\\n      require(_in.length > lenOfListLen, \\\"Invalid RLP long list length.\\\");\\n\\n      uint256 listLen;\\n      assembly {\\n        // Pick out the list length.\\n        listLen := div(mload(add(ptr, 1)), exp(256, sub(32, lenOfListLen)))\\n      }\\n\\n      require(_in.length > lenOfListLen + listLen, \\\"Invalid RLP long list.\\\");\\n\\n      return (1 + lenOfListLen, listLen, RLPItemType.LIST_ITEM);\\n    }\\n  }\\n\\n  /**\\n   * Copies the bytes from a memory location.\\n   * @param _src Pointer to the location to read from.\\n   * @param _offset Offset to start reading from.\\n   * @param _length Number of bytes to read.\\n   * @return Copied bytes.\\n   */\\n  function _copy(\\n    uint256 _src,\\n    uint256 _offset,\\n    uint256 _length\\n  ) private pure returns (bytes memory) {\\n    bytes memory out = new bytes(_length);\\n    if (out.length == 0) {\\n      return out;\\n    }\\n\\n    uint256 src = _src + _offset;\\n    uint256 dest;\\n    assembly {\\n      dest := add(out, 32)\\n    }\\n\\n    // Copy over as many complete words as we can.\\n    for (uint256 i = 0; i < _length / 32; ) {\\n      assembly {\\n        mstore(dest, mload(src))\\n      }\\n\\n      src += 32;\\n      dest += 32;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Pick out the remaining bytes.\\n    uint256 mask;\\n    unchecked {\\n      mask = 256**(32 - (_length % 32)) - 1;\\n    }\\n\\n    assembly {\\n      mstore(dest, or(and(mload(src), not(mask)), and(mload(dest), mask)))\\n    }\\n    return out;\\n  }\\n\\n  /**\\n   * Copies an RLP item into bytes.\\n   * @param _in RLP item to copy.\\n   * @return Copied bytes.\\n   */\\n  function _copy(RLPItem memory _in) private pure returns (bytes memory) {\\n    return _copy(_in.ptr, 0, _in.length);\\n  }\\n}\\n\",\"keccak256\":\"0x1770c68d08215690f873f1c8d95d8f63db546cf6b34e477a5b065379a9030e43\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/lib/SecureMerkleTrie.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/* Library Imports */\\nimport {MerkleTrie} from \\\"./MerkleTrie.sol\\\";\\n\\n/**\\n * @title SecureMerkleTrie\\n *\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/trie/Lib_SecureMerkleTrie.sol\\n */\\nlibrary SecureMerkleTrie {\\n  /**********************\\n   * Internal Functions *\\n   **********************/\\n\\n  /**\\n   * @notice Verifies a proof that a given key/value pair is present in the\\n   * Merkle trie.\\n   * @param _key Key of the node to search for, as a hex string.\\n   * @param _value Value of the node to search for, as a hex string.\\n   * @param _proof Merkle trie inclusion proof for the desired node. Unlike\\n   * traditional Merkle trees, this proof is executed top-down and consists\\n   * of a list of RLP-encoded nodes that make a path down to the target node.\\n   * @param _root Known root of the Merkle trie. Used to verify that the\\n   * included proof is correctly constructed.\\n   * @return _verified `true` if the k/v pair exists in the trie, `false` otherwise.\\n   */\\n  function verifyInclusionProof(\\n    bytes memory _key,\\n    bytes memory _value,\\n    bytes memory _proof,\\n    bytes32 _root\\n  ) internal pure returns (bool _verified) {\\n    bytes memory key = _getSecureKey(_key);\\n    return MerkleTrie.verifyInclusionProof(key, _value, _proof, _root);\\n  }\\n\\n  /**\\n   * @notice Retrieves the value associated with a given key.\\n   * @param _key Key to search for, as hex bytes.\\n   * @param _proof Merkle trie inclusion proof for the key.\\n   * @param _root Known root of the Merkle trie.\\n   * @return _exists Whether or not the key exists.\\n   * @return _value Value of the key if it exists.\\n   */\\n  function get(\\n    bytes memory _key,\\n    bytes memory _proof,\\n    bytes32 _root\\n  ) internal pure returns (bool _exists, bytes memory _value) {\\n    bytes memory key = _getSecureKey(_key);\\n    return MerkleTrie.get(key, _proof, _root);\\n  }\\n\\n  /*********************\\n   * Private Functions *\\n   *********************/\\n\\n  /**\\n   * Computes the secure counterpart to a key.\\n   * @param _key Key to get a secure key from.\\n   * @return _secureKey Secure version of the key.\\n   */\\n  function _getSecureKey(bytes memory _key) private pure returns (bytes memory _secureKey) {\\n    return abi.encodePacked(keccak256(_key));\\n  }\\n}\\n\",\"keccak256\":\"0x83dec50ac7d2349f24462c9f2d1928f3a42503ea7e8463757b843d497ea64959\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IRootManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\ninterface IRootManager {\\n  /**\\n   * @notice This is called by relayers to generate + send the mixed root from mainnet via AMB to\\n   * spoke domains.\\n   * @dev This must read information for the root from the registered AMBs.\\n   */\\n  function propagate(\\n    address[] calldata _connectors,\\n    uint256[] calldata _fees,\\n    bytes[] memory _encodedData\\n  ) external payable;\\n\\n  /**\\n   * @notice Called by the connectors for various domains on the hub to aggregate their latest\\n   * inbound root.\\n   * @dev This must read information for the root from the registered AMBs\\n   */\\n  function aggregate(uint32 _domain, bytes32 _outbound) external;\\n}\\n\",\"keccak256\":\"0xa895dfaa4baad37a636e7e7e7da72a0a4badfd2d3d8256f975e5101cd5a98236\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/ambs/optimism/IStateCommitmentChain.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// modified from: https://github.com/ethereum-optimism/optimism/blob/fcfcf6e7e69801e63904ec53815db01a8d45dcac/packages/contracts/contracts/libraries/codec/Lib_OVMCodec.sol#L34-L40\\nstruct ChainBatchHeader {\\n  uint256 batchIndex;\\n  bytes32 batchRoot;\\n  uint256 batchSize;\\n  uint256 prevTotalElements;\\n  bytes extraData;\\n}\\n\\n// modified from: https://github.com/ethereum-optimism/optimism/blob/fcfcf6e7e69801e63904ec53815db01a8d45dcac/packages/contracts/contracts/libraries/codec/Lib_OVMCodec.sol#L42-L45\\nstruct ChainInclusionProof {\\n  uint256 index;\\n  bytes32[] siblings;\\n}\\n\\n// modified from: https://github.com/ethereum-optimism/optimism/blob/fcfcf6e7e69801e63904ec53815db01a8d45dcac/packages/contracts/contracts/L1/messaging/IL1CrossDomainMessenger.sol#L18-L24\\nstruct L2MessageInclusionProof {\\n  bytes32 stateRoot;\\n  ChainBatchHeader stateRootBatchHeader;\\n  ChainInclusionProof stateRootProof;\\n  bytes stateTrieWitness;\\n  bytes storageTrieWitness;\\n}\\n\\n/**\\n * @title IStateCommitmentChain\\n *\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/rollup/IStateCommitmentChain.sol\\n */\\ninterface IStateCommitmentChain {\\n  /**********\\n   * Events *\\n   **********/\\n\\n  event StateBatchAppended(\\n    uint256 indexed _batchIndex,\\n    bytes32 _batchRoot,\\n    uint256 _batchSize,\\n    uint256 _prevTotalElements,\\n    bytes _extraData\\n  );\\n\\n  event StateBatchDeleted(uint256 indexed _batchIndex, bytes32 _batchRoot);\\n\\n  /********************\\n   * Public Functions *\\n   ********************/\\n\\n  /**\\n   * Retrieves the total number of elements submitted.\\n   * @return _totalElements Total submitted elements.\\n   */\\n  function getTotalElements() external view returns (uint256 _totalElements);\\n\\n  /**\\n   * Retrieves the total number of batches submitted.\\n   * @return _totalBatches Total submitted batches.\\n   */\\n  function getTotalBatches() external view returns (uint256 _totalBatches);\\n\\n  /**\\n   * Retrieves the timestamp of the last batch submitted by the sequencer.\\n   * @return _lastSequencerTimestamp Last sequencer batch timestamp.\\n   */\\n  function getLastSequencerTimestamp() external view returns (uint256 _lastSequencerTimestamp);\\n\\n  /**\\n   * Appends a batch of state roots to the chain.\\n   * @param _batch Batch of state roots.\\n   * @param _shouldStartAtElement Index of the element at which this batch should start.\\n   */\\n  function appendStateBatch(bytes32[] calldata _batch, uint256 _shouldStartAtElement) external;\\n\\n  /**\\n   * Deletes all state roots after (and including) a given batch.\\n   * @param _batchHeader Header of the batch to start deleting from.\\n   */\\n  function deleteStateBatch(ChainBatchHeader memory _batchHeader) external;\\n\\n  /**\\n   * Verifies a batch inclusion proof.\\n   * @param _element Hash of the element to verify a proof for.\\n   * @param _batchHeader Header of the batch in which the element was included.\\n   * @param _proof Merkle inclusion proof for the element.\\n   */\\n  function verifyStateCommitment(\\n    bytes32 _element,\\n    ChainBatchHeader memory _batchHeader,\\n    ChainInclusionProof memory _proof\\n  ) external view returns (bool _verified);\\n\\n  /**\\n   * Checks whether a given batch is still inside its fraud proof window.\\n   * @param _batchHeader Header of the batch to check.\\n   * @return _inside Whether or not the batch is inside the fraud proof window.\\n   */\\n  function insideFraudProofWindow(ChainBatchHeader memory _batchHeader) external view returns (bool _inside);\\n}\\n\",\"keccak256\":\"0x76577b06af1692d10b9a41bd0beb4edf11f3a00cfb2895df416aaf872781788c\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/ambs/optimism/OptimismAmb.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @dev The optimism bridge shares both of these functions, but it is important\\n * to note that when going from L2 -> L1, the message cannot be processed by the\\n * AMB until the challenge period elapses.\\n *\\n * HOWEVER, before the challenge elapses, you can read the state of the L2 as it is\\n * placed on mainnet. By processing data from the L2 state, we are able to \\\"circumvent\\\"\\n * this delay to a reasonable degree.\\n *\\n * This means that for messages going L1 -> L2, you can call \\\"processMessage\\\" and expect\\n * the call to be executed to pass up the aggregate root. When going from L2 -> L1, you\\n * must read the root from the L2 state\\n *\\n * L2 messenger: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2CrossDomainMessenger.sol\\n * L1 messenger: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol\\n */\\ninterface OptimismAmb {\\n  function sendMessage(\\n    address _target,\\n    bytes memory _message,\\n    uint32 _gasLimit\\n  ) external;\\n\\n  function xDomainMessageSender() external view returns (address);\\n}\\n\",\"keccak256\":\"0xbce6aaa568441bd8ad60f2b5f1ad8d9e3c61cbc91ce4405d7a390980920f66f3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/optimism/OptimismHubConnector.sol:OptimismHubConnector","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/optimism/OptimismHubConnector.sol:OptimismHubConnector","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/optimism/OptimismHubConnector.sol:OptimismHubConnector","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39051,"contract":"contracts/messaging/connectors/optimism/OptimismHubConnector.sol:OptimismHubConnector","label":"mirrorConnector","offset":0,"slot":"3","type":"t_address"},{"astId":39301,"contract":"contracts/messaging/connectors/optimism/OptimismHubConnector.sol:OptimismHubConnector","label":"gasCap","offset":0,"slot":"4","type":"t_uint256"},{"astId":42350,"contract":"contracts/messaging/connectors/optimism/OptimismHubConnector.sol:OptimismHubConnector","label":"processed","offset":0,"slot":"5","type":"t_mapping(t_bytes32,t_bool)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"GasCapUpdated(uint256,uint256)":{"notice":"Emitted when admin updates the gas cap"},"MessageProcessed(bytes,address)":{"notice":"Emitted whenever a message is successfully received over an AMB"},"MessageSent(bytes,bytes,address)":{"notice":"Emitted whenever a message is successfully sent over an AMB"}},"kind":"user","methods":{"AMB()":{"notice":"Address of the AMB on this domain."},"DOMAIN()":{"notice":"The domain of this Messaging (i.e. Connector) contract."},"MIRROR_DOMAIN()":{"notice":"The domain of the corresponding messaging (i.e. Connector) contract."},"ROOT_MANAGER()":{"notice":"RootManager contract address."},"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"mirrorConnector()":{"notice":"Connector on L2 for L1 connectors, and vice versa."},"owner()":{"notice":"Returns the address of the current owner."},"processMessage(bytes)":{"notice":"Processes a message received by an AMB"},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"sendMessage(bytes,bytes)":{"notice":"Sends a message over the amb"},"setMirrorConnector(address)":{"notice":"Sets the address of the l2Connector for this domain"},"verifySender(address)":{"notice":"Checks the cross domain sender for a given address"}},"version":1}}},"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol":{"OptimismSpokeConnector":{"abi":[{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"uint32","name":"_mirrorDomain","type":"uint32"},{"internalType":"address","name":"_amb","type":"address"},{"internalType":"address","name":"_rootManager","type":"address"},{"internalType":"address","name":"_mirrorConnector","type":"address"},{"internalType":"uint256","name":"_processGas","type":"uint256"},{"internalType":"uint256","name":"_reserveGas","type":"uint256"},{"internalType":"uint256","name":"_delayBlocks","type":"uint256"},{"internalType":"address","name":"_merkle","type":"address"},{"internalType":"address","name":"_watcherManager","type":"address"},{"internalType":"uint256","name":"_gasCap","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Connector__processMessage_notUsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"inputs":[],"name":"RateLimited__rateLimited_messageSendRateExceeded","type":"error"},{"inputs":[],"name":"TypedMemView__index_indexMoreThan32Bytes","type":"error"},{"inputs":[{"internalType":"uint256","name":"loc","type":"uint256"},{"internalType":"uint256","name":"len","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"slice","type":"uint256"}],"name":"TypedMemView__index_overrun","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_identityOOG","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_invalidPointer","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_nullPointer","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootVerified","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"updated","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"DelayBlocksUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"message","type":"bytes"}],"name":"Dispatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"GasCapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"aggregateRoot","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"aggregateIndex","type":"uint256"}],"name":"MessageProven","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"encodedData","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"current","type":"address"}],"name":"MirrorConnectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"mirrorDomain","type":"uint32"},{"indexed":false,"internalType":"address","name":"amb","type":"address"},{"indexed":false,"internalType":"address","name":"rootManager","type":"address"},{"indexed":false,"internalType":"address","name":"mirrorConnector","type":"address"}],"name":"NewConnector","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"returnData","type":"bytes"}],"name":"Process","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updater","type":"address"},{"indexed":false,"internalType":"uint256","name":"newRateLimit","type":"uint256"}],"name":"SendRateLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"SenderAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"SenderRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"watcherManager","type":"address"}],"name":"WatcherManagerChanged","type":"event"},{"inputs":[],"name":"AMB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MERKLE","outputs":[{"internalType":"contract MerkleTreeManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIRROR_DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROCESS_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"addSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlistedSenders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_destinationDomain","type":"uint32"},{"internalType":"bytes32","name":"_recipientAddress","type":"bytes32"},{"internalType":"bytes","name":"_messageBody","type":"bytes"}],"name":"dispatch","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"home","outputs":[{"internalType":"contract IOutbox","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_potentialReplica","type":"address"}],"name":"isReplica","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"localDomain","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"messages","outputs":[{"internalType":"enum SpokeConnector.MessageStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mirrorConnector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"nonces","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"outboundRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"pendingAggregateRoots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"processMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32[32]","name":"path","type":"bytes32[32]"},{"internalType":"uint256","name":"index","type":"uint256"}],"internalType":"struct SpokeConnector.Proof[]","name":"_proofs","type":"tuple[]"},{"internalType":"bytes32","name":"_aggregateRoot","type":"bytes32"},{"internalType":"bytes32[32]","name":"_aggregatePath","type":"bytes32[32]"},{"internalType":"uint256","name":"_aggregateIndex","type":"uint256"}],"name":"proveAndProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"provenAggregateRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"provenMessageRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rateLimitBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_fraudulentRoot","type":"bytes32"}],"name":"removePendingAggregateRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"removeSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_encodedData","type":"bytes"}],"name":"send","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"sentMessageRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_delayBlocks","type":"uint256"}],"name":"setDelayBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gasCap","type":"uint256"}],"name":"setGasCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mirrorConnector","type":"address"}],"name":"setMirrorConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rateLimit","type":"uint256"}],"name":"setRateLimitBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_watcherManager","type":"address"}],"name":"setWatcherManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_expected","type":"address"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"watcherManager","outputs":[{"internalType":"contract WatcherManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"addSender(address)":{"details":"Only allowlisted routers (senders) can call `dispatch`."},"dispatch(uint32,bytes32,bytes)":{"details":"The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \"hub\"), it will be combined into a single aggregate root by RootManager (along with outbound roots from other chains). This aggregate root will be redistributed to all destination chains. NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions"},"home()":{"details":"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad","returns":{"_0":"The local inbox contract"}},"isReplica(address)":{"returns":{"_0":"True if _potentialReplica is an enrolled Replica"}},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"processMessage(bytes)":{"details":"This is called by AMBs to process messages originating from mirror connector"},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":{"details":"Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.Intended to be called by the relayer at specific intervals during runtime.Will record a calculated root as having been proven if we've already proven that it was included in the aggregateRoot.","params":{"_aggregateIndex":"Index of the inbound root in the aggregator's merkle tree in the hub.","_aggregatePath":"Merkle path of inclusion for the inbound root.","_aggregateRoot":"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.","_proofs":"Batch of Proofs containing messages for proving/processing."}},"removePendingAggregateRoot(bytes32)":{"details":"This method is required for handling fraud cases in the current construction.","params":{"_fraudulentRoot":"Target fraudulent root that should be erased from the `pendingAggregateRoots` mapping."}},"removeSender(address)":{"details":"Only allowlisted routers (senders) can call `dispatch`."},"setRateLimitBlocks(uint256)":{"details":"Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)","params":{"_rateLimit":"The number of blocks require between sending messages. If set to 0, rate limiting for this spoke connector will be disabled."}},"withdrawFunds(address)":{"details":"Withdraws the entire balance of the contract.","params":{"_to":"The recipient of the funds withdrawn"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_10599":{"entryPoint":null,"id":10599,"parameterSlots":0,"returnSlots":0},"@_10699":{"entryPoint":null,"id":10699,"parameterSlots":0,"returnSlots":0},"@_38838":{"entryPoint":null,"id":38838,"parameterSlots":1,"returnSlots":0},"@_39152":{"entryPoint":null,"id":39152,"parameterSlots":5,"returnSlots":0},"@_39257":{"entryPoint":null,"id":39257,"parameterSlots":0,"returnSlots":0},"@_39318":{"entryPoint":null,"id":39318,"parameterSlots":1,"returnSlots":0},"@_39687":{"entryPoint":null,"id":39687,"parameterSlots":10,"returnSlots":0},"@_42254":{"entryPoint":null,"id":42254,"parameterSlots":1,"returnSlots":0},"@_42744":{"entryPoint":null,"id":42744,"parameterSlots":11,"returnSlots":0},"@_setGasCap_39346":{"entryPoint":912,"id":39346,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":807,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":706,"id":49908,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":1003,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_addresst_uint256_fromMemory":{"entryPoint":1027,"id":null,"parameterSlots":2,"returnSlots":11},"abi_decode_uint32_fromMemory":{"entryPoint":977,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3999:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"73:108:181","statements":[{"nodeType":"YulAssignment","src":"83:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"98:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"92:5:181"},"nodeType":"YulFunctionCall","src":"92:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"83:5:181"}]},{"body":{"nodeType":"YulBlock","src":"159:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"168:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"171:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"161:6:181"},"nodeType":"YulFunctionCall","src":"161:12:181"},"nodeType":"YulExpressionStatement","src":"161:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"127:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"138:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"145:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"134:3:181"},"nodeType":"YulFunctionCall","src":"134:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"124:2:181"},"nodeType":"YulFunctionCall","src":"124:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"117:6:181"},"nodeType":"YulFunctionCall","src":"117:41:181"},"nodeType":"YulIf","src":"114:61:181"}]},"name":"abi_decode_uint32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"52:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"63:5:181","type":""}],"src":"14:167:181"},{"body":{"nodeType":"YulBlock","src":"246:117:181","statements":[{"nodeType":"YulAssignment","src":"256:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"271:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"265:5:181"},"nodeType":"YulFunctionCall","src":"265:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"256:5:181"}]},{"body":{"nodeType":"YulBlock","src":"341:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"350:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"353:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"343:6:181"},"nodeType":"YulFunctionCall","src":"343:12:181"},"nodeType":"YulExpressionStatement","src":"343:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"300:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"311:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"326:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"331:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"322:3:181"},"nodeType":"YulFunctionCall","src":"322:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"335:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"318:3:181"},"nodeType":"YulFunctionCall","src":"318:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"307:3:181"},"nodeType":"YulFunctionCall","src":"307:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"297:2:181"},"nodeType":"YulFunctionCall","src":"297:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"290:6:181"},"nodeType":"YulFunctionCall","src":"290:50:181"},"nodeType":"YulIf","src":"287:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"225:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"236:5:181","type":""}],"src":"186:177:181"},{"body":{"nodeType":"YulBlock","src":"618:718:181","statements":[{"body":{"nodeType":"YulBlock","src":"665:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"674:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"677:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"667:6:181"},"nodeType":"YulFunctionCall","src":"667:12:181"},"nodeType":"YulExpressionStatement","src":"667:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"639:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"648:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"635:3:181"},"nodeType":"YulFunctionCall","src":"635:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"660:3:181","type":"","value":"352"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"631:3:181"},"nodeType":"YulFunctionCall","src":"631:33:181"},"nodeType":"YulIf","src":"628:53:181"},{"nodeType":"YulAssignment","src":"690:49:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"729:9:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"700:28:181"},"nodeType":"YulFunctionCall","src":"700:39:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"690:6:181"}]},{"nodeType":"YulAssignment","src":"748:58:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"791:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"802:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"787:3:181"},"nodeType":"YulFunctionCall","src":"787:18:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"758:28:181"},"nodeType":"YulFunctionCall","src":"758:48:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"748:6:181"}]},{"nodeType":"YulAssignment","src":"815:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"859:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"870:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"855:3:181"},"nodeType":"YulFunctionCall","src":"855:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"825:29:181"},"nodeType":"YulFunctionCall","src":"825:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"815:6:181"}]},{"nodeType":"YulAssignment","src":"883:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"927:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"938:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"923:3:181"},"nodeType":"YulFunctionCall","src":"923:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"893:29:181"},"nodeType":"YulFunctionCall","src":"893:49:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"883:6:181"}]},{"nodeType":"YulAssignment","src":"951:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"995:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1006:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"991:3:181"},"nodeType":"YulFunctionCall","src":"991:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"961:29:181"},"nodeType":"YulFunctionCall","src":"961:50:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"951:6:181"}]},{"nodeType":"YulAssignment","src":"1020:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1040:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1051:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1036:3:181"},"nodeType":"YulFunctionCall","src":"1036:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1030:5:181"},"nodeType":"YulFunctionCall","src":"1030:26:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"1020:6:181"}]},{"nodeType":"YulAssignment","src":"1065:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1085:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1096:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1081:3:181"},"nodeType":"YulFunctionCall","src":"1081:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1075:5:181"},"nodeType":"YulFunctionCall","src":"1075:26:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"1065:6:181"}]},{"nodeType":"YulAssignment","src":"1110:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1130:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1141:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1126:3:181"},"nodeType":"YulFunctionCall","src":"1126:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1120:5:181"},"nodeType":"YulFunctionCall","src":"1120:26:181"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"1110:6:181"}]},{"nodeType":"YulAssignment","src":"1155:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1199:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1210:3:181","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1195:3:181"},"nodeType":"YulFunctionCall","src":"1195:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"1165:29:181"},"nodeType":"YulFunctionCall","src":"1165:50:181"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"1155:6:181"}]},{"nodeType":"YulAssignment","src":"1224:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1268:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1279:3:181","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1264:3:181"},"nodeType":"YulFunctionCall","src":"1264:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"1234:29:181"},"nodeType":"YulFunctionCall","src":"1234:50:181"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"1224:6:181"}]},{"nodeType":"YulAssignment","src":"1293:37:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1314:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1325:3:181","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1310:3:181"},"nodeType":"YulFunctionCall","src":"1310:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1304:5:181"},"nodeType":"YulFunctionCall","src":"1304:26:181"},"variableNames":[{"name":"value10","nodeType":"YulIdentifier","src":"1293:7:181"}]}]},"name":"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_addresst_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"503:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"514:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"526:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"534:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"542:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"550:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"558:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"566:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"574:6:181","type":""},{"name":"value7","nodeType":"YulTypedName","src":"582:6:181","type":""},{"name":"value8","nodeType":"YulTypedName","src":"590:6:181","type":""},{"name":"value9","nodeType":"YulTypedName","src":"598:6:181","type":""},{"name":"value10","nodeType":"YulTypedName","src":"606:7:181","type":""}],"src":"368:968:181"},{"body":{"nodeType":"YulBlock","src":"1515:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1532:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1543:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1525:6:181"},"nodeType":"YulFunctionCall","src":"1525:21:181"},"nodeType":"YulExpressionStatement","src":"1525:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1566:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1577:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1562:3:181"},"nodeType":"YulFunctionCall","src":"1562:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1582:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1555:6:181"},"nodeType":"YulFunctionCall","src":"1555:30:181"},"nodeType":"YulExpressionStatement","src":"1555:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1605:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1616:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1601:3:181"},"nodeType":"YulFunctionCall","src":"1601:18:181"},{"hexValue":"656d70747920646f6d61696e","kind":"string","nodeType":"YulLiteral","src":"1621:14:181","type":"","value":"empty domain"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1594:6:181"},"nodeType":"YulFunctionCall","src":"1594:42:181"},"nodeType":"YulExpressionStatement","src":"1594:42:181"},{"nodeType":"YulAssignment","src":"1645:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1657:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1668:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1653:3:181"},"nodeType":"YulFunctionCall","src":"1653:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1645:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1492:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1506:4:181","type":""}],"src":"1341:336:181"},{"body":{"nodeType":"YulBlock","src":"1856:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1873:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1884:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1866:6:181"},"nodeType":"YulFunctionCall","src":"1866:21:181"},"nodeType":"YulExpressionStatement","src":"1866:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1907:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1918:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1903:3:181"},"nodeType":"YulFunctionCall","src":"1903:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1923:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1896:6:181"},"nodeType":"YulFunctionCall","src":"1896:30:181"},"nodeType":"YulExpressionStatement","src":"1896:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1946:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1957:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1942:3:181"},"nodeType":"YulFunctionCall","src":"1942:18:181"},{"hexValue":"656d70747920726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"1962:19:181","type":"","value":"empty rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1935:6:181"},"nodeType":"YulFunctionCall","src":"1935:47:181"},"nodeType":"YulExpressionStatement","src":"1935:47:181"},{"nodeType":"YulAssignment","src":"1991:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2003:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2014:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1999:3:181"},"nodeType":"YulFunctionCall","src":"1999:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1991:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1833:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1847:4:181","type":""}],"src":"1682:341:181"},{"body":{"nodeType":"YulBlock","src":"2185:227:181","statements":[{"nodeType":"YulAssignment","src":"2195:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2207:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2218:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2203:3:181"},"nodeType":"YulFunctionCall","src":"2203:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2195:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"2230:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2248:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2253:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2244:3:181"},"nodeType":"YulFunctionCall","src":"2244:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2257:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2240:3:181"},"nodeType":"YulFunctionCall","src":"2240:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2234:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2275:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2290:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2298:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2286:3:181"},"nodeType":"YulFunctionCall","src":"2286:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2268:6:181"},"nodeType":"YulFunctionCall","src":"2268:34:181"},"nodeType":"YulExpressionStatement","src":"2268:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2322:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2333:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2318:3:181"},"nodeType":"YulFunctionCall","src":"2318:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2342:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2350:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2338:3:181"},"nodeType":"YulFunctionCall","src":"2338:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2311:6:181"},"nodeType":"YulFunctionCall","src":"2311:43:181"},"nodeType":"YulExpressionStatement","src":"2311:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2374:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2385:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2370:3:181"},"nodeType":"YulFunctionCall","src":"2370:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"2394:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2402:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2390:3:181"},"nodeType":"YulFunctionCall","src":"2390:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2363:6:181"},"nodeType":"YulFunctionCall","src":"2363:43:181"},"nodeType":"YulExpressionStatement","src":"2363:43:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2138:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2149:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2157:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2165:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2176:4:181","type":""}],"src":"2028:384:181"},{"body":{"nodeType":"YulBlock","src":"2591:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2608:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2619:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2601:6:181"},"nodeType":"YulFunctionCall","src":"2601:21:181"},"nodeType":"YulExpressionStatement","src":"2601:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2642:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2653:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2638:3:181"},"nodeType":"YulFunctionCall","src":"2638:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2658:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2631:6:181"},"nodeType":"YulFunctionCall","src":"2631:30:181"},"nodeType":"YulExpressionStatement","src":"2631:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2681:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2692:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2677:3:181"},"nodeType":"YulFunctionCall","src":"2677:18:181"},{"hexValue":"2170726f6365737320676173","kind":"string","nodeType":"YulLiteral","src":"2697:14:181","type":"","value":"!process gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2670:6:181"},"nodeType":"YulFunctionCall","src":"2670:42:181"},"nodeType":"YulExpressionStatement","src":"2670:42:181"},{"nodeType":"YulAssignment","src":"2721:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2733:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2744:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2729:3:181"},"nodeType":"YulFunctionCall","src":"2729:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2721:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2568:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2582:4:181","type":""}],"src":"2417:336:181"},{"body":{"nodeType":"YulBlock","src":"2932:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2949:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2960:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2942:6:181"},"nodeType":"YulFunctionCall","src":"2942:21:181"},"nodeType":"YulExpressionStatement","src":"2942:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2983:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2994:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2979:3:181"},"nodeType":"YulFunctionCall","src":"2979:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2999:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2972:6:181"},"nodeType":"YulFunctionCall","src":"2972:30:181"},"nodeType":"YulExpressionStatement","src":"2972:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3022:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3033:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3018:3:181"},"nodeType":"YulFunctionCall","src":"3018:18:181"},{"hexValue":"217265736572766520676173","kind":"string","nodeType":"YulLiteral","src":"3038:14:181","type":"","value":"!reserve gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3011:6:181"},"nodeType":"YulFunctionCall","src":"3011:42:181"},"nodeType":"YulExpressionStatement","src":"3011:42:181"},{"nodeType":"YulAssignment","src":"3062:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3074:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3085:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3070:3:181"},"nodeType":"YulFunctionCall","src":"3070:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3062:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2909:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2923:4:181","type":""}],"src":"2758:336:181"},{"body":{"nodeType":"YulBlock","src":"3273:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3290:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3301:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3283:6:181"},"nodeType":"YulFunctionCall","src":"3283:21:181"},"nodeType":"YulExpressionStatement","src":"3283:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3324:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3335:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3320:3:181"},"nodeType":"YulFunctionCall","src":"3320:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3340:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3313:6:181"},"nodeType":"YulFunctionCall","src":"3313:30:181"},"nodeType":"YulExpressionStatement","src":"3313:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3363:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3374:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3359:3:181"},"nodeType":"YulFunctionCall","src":"3359:18:181"},{"hexValue":"217a65726f206d65726b6c65","kind":"string","nodeType":"YulLiteral","src":"3379:14:181","type":"","value":"!zero merkle"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3352:6:181"},"nodeType":"YulFunctionCall","src":"3352:42:181"},"nodeType":"YulExpressionStatement","src":"3352:42:181"},{"nodeType":"YulAssignment","src":"3403:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3415:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3426:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3411:3:181"},"nodeType":"YulFunctionCall","src":"3411:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3403:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3250:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3264:4:181","type":""}],"src":"3099:336:181"},{"body":{"nodeType":"YulBlock","src":"3569:175:181","statements":[{"nodeType":"YulAssignment","src":"3579:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3591:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3602:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3587:3:181"},"nodeType":"YulFunctionCall","src":"3587:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3579:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"3614:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3632:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3637:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3628:3:181"},"nodeType":"YulFunctionCall","src":"3628:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3641:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3624:3:181"},"nodeType":"YulFunctionCall","src":"3624:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3618:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3659:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3674:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3682:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3670:3:181"},"nodeType":"YulFunctionCall","src":"3670:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3652:6:181"},"nodeType":"YulFunctionCall","src":"3652:34:181"},"nodeType":"YulExpressionStatement","src":"3652:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3706:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3717:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3702:3:181"},"nodeType":"YulFunctionCall","src":"3702:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3726:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3734:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3722:3:181"},"nodeType":"YulFunctionCall","src":"3722:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3695:6:181"},"nodeType":"YulFunctionCall","src":"3695:43:181"},"nodeType":"YulExpressionStatement","src":"3695:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3530:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3541:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3549:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3560:4:181","type":""}],"src":"3440:304:181"},{"body":{"nodeType":"YulBlock","src":"3878:119:181","statements":[{"nodeType":"YulAssignment","src":"3888:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3900:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3911:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3896:3:181"},"nodeType":"YulFunctionCall","src":"3896:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3888:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3930:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"3941:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3923:6:181"},"nodeType":"YulFunctionCall","src":"3923:25:181"},"nodeType":"YulExpressionStatement","src":"3923:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3968:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3979:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3964:3:181"},"nodeType":"YulFunctionCall","src":"3964:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"3984:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3957:6:181"},"nodeType":"YulFunctionCall","src":"3957:34:181"},"nodeType":"YulExpressionStatement","src":"3957:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3839:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3850:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3858:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3869:4:181","type":""}],"src":"3749:248:181"}]},"contents":"{\n    { }\n    function abi_decode_uint32_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_addresst_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10\n    {\n        if slt(sub(dataEnd, headStart), 352) { revert(0, 0) }\n        value0 := abi_decode_uint32_fromMemory(headStart)\n        value1 := abi_decode_uint32_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n        value4 := abi_decode_address_fromMemory(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n        value6 := mload(add(headStart, 192))\n        value7 := mload(add(headStart, 224))\n        value8 := abi_decode_address_fromMemory(add(headStart, 256))\n        value9 := abi_decode_address_fromMemory(add(headStart, 288))\n        value10 := mload(add(headStart, 320))\n    }\n    function abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"empty domain\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"empty rootManager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!process gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!reserve gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!zero merkle\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"6101606040523480156200001257600080fd5b5060405162003b8a38038062003b8a833981016040819052620000359162000403565b80808c8c8c8c8c8c8c8c8c8c808a8a8a8a8a6200005233620002c2565b8463ffffffff166000036200009d5760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620000e95760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b604482015260640162000094565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e0528116156200012157620001218162000327565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a350506003805460ff60a01b191690555050600480546001600160a01b0319166001600160a01b039390931692909217909155506001600755620cf84f8511620001f45760405162461bcd60e51b815260206004820152600c60248201526b2170726f636573732067617360a01b604482015260640162000094565b613a978411620002365760405162461bcd60e51b815260206004820152600c60248201526b21726573657276652067617360a01b604482015260640162000094565b6101208590526101408490526001600160a01b038216620002895760405162461bcd60e51b815260206004820152600c60248201526b217a65726f206d65726b6c6560a01b604482015260640162000094565b506001600160a01b03166101005260085550620002af9550869450506200039092505050565b50505050505050505050505050620004c2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b60105460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1601055565b805163ffffffff81168114620003e657600080fd5b919050565b80516001600160a01b0381168114620003e657600080fd5b60008060008060008060008060008060006101608c8e0312156200042657600080fd5b620004318c620003d1565b9a506200044160208d01620003d1565b99506200045160408d01620003eb565b98506200046160608d01620003eb565b97506200047160808d01620003eb565b965060a08c0151955060c08c0151945060e08c01519350620004976101008d01620003eb565b9250620004a86101208d01620003eb565b91506101408c015190509295989b509295989b9093969950565b60805160a05160c05160e05161010051610120516101405161361962000571600039600081816103250152611d6701526000818161090e01528181611d880152611e1501526000818161073501528181610a8b01528181610fcb01526116cf015260006102b5015260006105430152600081816108c401528181610c330152818161188901526121f301526000818161048a01528181610671015281816116710152611c6701526136196000f3fe6080604052600436106102975760003560e01c80638456cb591161015a578063b95a2001116100c1578063d69f9d611161007a578063d69f9d61146108b2578063d7d317b3146108e6578063d88beda2146108fc578063db1b765914610930578063e0fed01014610950578063fa31de011461097057600080fd5b8063b95a2001146107ed578063c5b350df14610820578063cc39428314610835578063d1851c9214610855578063d232c22014610873578063d2a3cc711461089257600080fd5b8063a01892a511610113578063a01892a514610723578063a792c29b14610757578063ad9c0c2e14610777578063b1f8100d1461078d578063b2f87643146107ad578063b697f531146107cd57600080fd5b80638456cb591461064d5780638d3638f4146106625780638da5cb5b1461069557806398c9f2b9146106b35780639d3117c7146106e35780639fa92f9d1461071057600080fd5b8063572386ca116101fe57806365eaf11b116101b757806365eaf11b146105ad57806368742da6146105c25780636a42b8f8146105e25780636b04a933146105f8578063715018a6146106185780637850b0201461062d57600080fd5b8063572386ca146104ac578063579c1618146104dc5780635bd11efc146104f25780635c975abb146105125780635f61e3ec146105315780636159ada11461057d57600080fd5b80633cf52ffb116102505780633cf52ffb146103e55780633f4ba83a146103fa5780634ff746f61461040f578063508a109b1461042f5780635190bc531461044f57806352a9674b1461047857600080fd5b806314168416146102a35780631eeaabea146102f157806325e3beda146103135780632bb1ae7c146103555780632bbd59ca14610368578063301f07c3146103a557600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b3480156102fd57600080fd5b5061031161030c366004612f91565b61099e565b005b34801561031f57600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016102e8565b61031161036336600461304d565b610a48565b34801561037457600080fd5b50610398610383366004612f91565b600f6020526000908152604090205460ff1681565b6040516102e89190613098565b3480156103b157600080fd5b506103d56103c0366004612f91565b600a6020526000908152604090205460ff1681565b60405190151581526020016102e8565b3480156103f157600080fd5b50600254610347565b34801561040657600080fd5b50610311610beb565b34801561041b57600080fd5b5061031161042a36600461304d565b610c28565b34801561043b57600080fd5b5061031161044a3660046130c0565b610cce565b34801561045b57600080fd5b506103d561046a366004613171565b6001600160a01b0316301490565b34801561048457600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b857600080fd5b506103d56104c7366004612f91565b600c6020526000908152604090205460ff1681565b3480156104e857600080fd5b5061034760055481565b3480156104fe57600080fd5b5061031161050d366004613171565b610f90565b34801561051e57600080fd5b50600354600160a01b900460ff166103d5565b34801561053d57600080fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102e8565b34801561058957600080fd5b506103d5610598366004613171565b600d6020526000908152604090205460ff1681565b3480156105b957600080fd5b50610347610fc7565b3480156105ce57600080fd5b506103116105dd366004613171565b611050565b3480156105ee57600080fd5b5062093a80610347565b34801561060457600080fd5b50610311610613366004612f91565b6110cd565b34801561062457600080fd5b50610311611198565b34801561063957600080fd5b50610311610648366004612f91565b6111c3565b34801561065957600080fd5b506103116111f7565b34801561066e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102d7565b3480156106a157600080fd5b506000546001600160a01b0316610565565b3480156106bf57600080fd5b506103d56106ce366004612f91565b600b6020526000908152604090205460ff1681565b3480156106ef57600080fd5b506103476106fe366004612f91565b60096020526000908152604090205481565b34801561071c57600080fd5b5030610565565b34801561072f57600080fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b34801561076357600080fd5b50600454610565906001600160a01b031681565b34801561078357600080fd5b5061034760085481565b34801561079957600080fd5b506103116107a8366004613171565b6112ab565b3480156107b957600080fd5b506103116107c8366004613171565b611349565b3480156107d957600080fd5b506103116107e8366004613171565b6113c5565b3480156107f957600080fd5b506102d76108083660046131a7565b600e6020526000908152604090205463ffffffff1681565b34801561082c57600080fd5b50610311611444565b34801561084157600080fd5b50600354610565906001600160a01b031681565b34801561086157600080fd5b506001546001600160a01b0316610565565b34801561087f57600080fd5b506000546001600160a01b0316156103d5565b34801561089e57600080fd5b506103116108ad366004613171565b6114b4565b3480156108be57600080fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b3480156108f257600080fd5b5061034760065481565b34801561090857600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b34801561093c57600080fd5b506103d561094b366004613171565b61158b565b34801561095c57600080fd5b5061031161096b366004612f91565b61159c565b34801561097c57600080fd5b5061099061098b3660046131c2565b6115d0565b6040516102e8929190613269565b6000546001600160a01b031633146109c9576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610a0e5760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610a5061179f565b43600554600654610a619190613298565b1115610a80576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0b91906132ab565b6000818152600c602052604090205490915060ff1615610b615760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b6044820152606401610a05565b600081604051602001610b7691815260200190565b6040516020818303038152906040529050610b9181846117ec565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610bde908390869033906132c4565b60405180910390a1505050565b6000546001600160a01b03163314610c16576040516311a8a1bb60e31b815260040160405180910390fd5b610c1e611911565b610c26611961565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c895760405162461bcd60e51b8152600401610a059060208082526004908201526310a0a6a160e11b604082015260600190565b610c92816119b6565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610cc3929190613302565b60405180910390a150565b610cd661179f565b610cde611a56565b83610d155760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b6044820152606401610a05565b600085856000818110610d2a57610d2a61332c565b9050602002810190610d3c9190613342565b610d469080613363565b604051610d549291906133b1565b604051809103902090506000610dbb8288886000818110610d7757610d7761332c565b9050602002810190610d899190613342565b60200189896000818110610d9f57610d9f61332c565b9050602002810190610db19190613342565b6104200135611aaf565b9050610dc981868686611b56565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610eef5788888263ffffffff16818110610e0e57610e0e61332c565b9050602002810190610e209190613342565b610e2a9080613363565b604051610e389291906133b1565b604051809103902093506000610e8d858b8b8563ffffffff16818110610e6057610e6061332c565b9050602002810190610e729190613342565b6020018c8c8663ffffffff16818110610d9f57610d9f61332c565b9050838114610ecc5760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b6044820152606401610a05565b506000848152600f60205260409020805460ff1916600190811790915501610de8565b5060005b818163ffffffff161015610f7b57610f7289898363ffffffff16818110610f1c57610f1c61332c565b9050602002810190610f2e9190613342565b610f389080613363565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5192505050565b50600101610ef3565b50505050610f896001600755565b5050505050565b6000546001600160a01b03163314610fbb576040516311a8a1bb60e31b815260040160405180910390fd5b610fc481611f2e565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104b91906132ab565b905090565b6000546001600160a01b0316331461107b576040516311a8a1bb60e31b815260040160405180910390fd5b476110868282611f97565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d826040516110c191815260200190565b60405180910390a25050565b6000546001600160a01b031633146110f8576040516311a8a1bb60e31b815260040160405180910390fd5b611100611911565b60008181526009602052604081205490036111555760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b6044820152606401610a05565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610cc39083815260200190565b6000546001600160a01b03163314610c26576040516311a8a1bb60e31b815260040160405180910390fd5b6000546001600160a01b031633146111ee576040516311a8a1bb60e31b815260040160405180910390fd5b610fc4816120b5565b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa158015611240573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126491906133c1565b61129b5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610a05565b6112a361179f565b610c266120f6565b6000546001600160a01b031633146112d6576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b0382811691161480156112f4575060025415155b15611312576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361134057604051634a2fb73f60e11b815260040160405180910390fd5b610fc481612139565b6000546001600160a01b03163314611374576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610cc3565b6000546001600160a01b031633146113f0576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610cc3565b6001546001600160a01b0316331461146f576040516311a7f27160e11b815260040160405180910390fd5b62093a806002544261148191906133e3565b1161149f576040516324e0285f60e21b815260040160405180910390fd5b600154610c26906001600160a01b0316612187565b6000546001600160a01b031633146114df576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b039081169082160361153d5760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e616765720000000000000000006044820152606401610a05565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610cc3565b6000611596826121ec565b92915050565b6000546001600160a01b031633146115c7576040516311a8a1bb60e31b815260040160405180910390fd5b610fc481612218565b336000908152600d602052604081205460609060ff166116215760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b6044820152606401610a05565b63ffffffff8086166000908152600e602052604081208054919291909116908261164a836133f6565b91906101000a81548163ffffffff021916908363ffffffff160217905550905060006116a97f00000000000000000000000000000000000000000000000000000000000000006116a0336001600160a01b031690565b848a8a8a612296565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af115801561171f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117439190613419565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f836117756001846133e3565b8487604051611787949392919061343d565b60405180910390a15090989197509095505050505050565b600354600160a01b900460ff1615610c265760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a05565b815160201461182c5760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a05565b6000634ff746f660e01b83604051602401611847919061346c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526003549091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691633dbb202b9116836118bc866122ce565b6040518463ffffffff1660e01b81526004016118da9392919061347f565b600060405180830381600087803b1580156118f457600080fd5b505af1158015611908573d6000803e3d6000fd5b50505050505050565b600354600160a01b900460ff16610c265760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a05565b611969611911565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6003546119cb906001600160a01b03166121ec565b611a0a5760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b6044820152606401610a05565b8051602014611a455760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a05565b610fc4611a51826134b9565b61232c565b600260075403611aa85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a05565b6002600755565b6000806000858152600f602052604090205460ff166002811115611ad557611ad5613082565b14611b185760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b6044820152606401610a05565b611b4c8484602080602002604051908101604052809291908260208002808284376000920191909152508691506124559050565b90505b9392505050565b6000848152600b602052604090205460ff16611c4b57611b75836127a3565b6000611bab8584602080602002604051908101604052809291908260208002808284376000920191909152508691506124559050565b9050838114611bf25760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b6044820152606401610a05565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611c419086815260200190565b60405180910390a3505b50505050565b600080611c5e8382612903565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611c9662ffffff198316612927565b63ffffffff1614611cd85760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b6044820152606401610a05565b6000611ce962ffffff19831661293c565b905060016000828152600f602052604090205460ff166002811115611d1057611d10613082565b14611d475760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b6044820152606401610a05565b6000818152600f60205260409020805460ff191660021790556001611dac7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613298565b611db691906133e3565b5a11611ded5760405162461bcd60e51b8152600401610a05906020808252600490820152632167617360e01b604082015260600190565b6000611dfe62ffffff198416612985565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611e5962ffffff198816612996565b611e6862ffffff1989166129aa565b611e7762ffffff198a166129bf565b611e94611e8962ffffff198c166129d4565b62ffffff1916612a02565b604051602401611ea794939291906134e0565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050611ee1858560008685612a4b565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890611f1a9088908b90869061350f565b60405180910390a150505050505050919050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b80471015611fe75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a05565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612034576040519150601f19603f3d011682016040523d82523d6000602084013e612039565b606091505b50509050806120b05760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a05565b505050565b60105460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1601055565b6120fe61179f565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586119993390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60006115967f000000000000000000000000000000000000000000000000000000000000000083612ad6565b600554810361225b5760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b6044820152606401610a05565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610cc3565b60608686868686866040516020016122b396959493929190613530565b60405160208183030381529060405290509695505050505050565b600081516020146123105760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a05565b6115968280602001905181019061232791906132ab565b612b97565b8061236a5760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b6044820152606401610a05565b600081815260096020526040902054156123bd5760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b6044820152606401610a05565b6000818152600a602052604090205460ff16156124125760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b6044820152606401610a05565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610cc39083815260200190565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b806127e65760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b6044820152606401610a05565b6000818152600a602052604090205460ff16156128005750565b600081815260096020526040812054908190036128565760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b6044820152606401610a05565b60085461286382436133e3565b10156128b15760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f74202176657269666965640000000000000000006044820152606401610a05565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b81516000906020840161291e64ffffffffff85168284612bad565b95945050505050565b600061159662ffffff19831660286004612bea565b6000806129528360781c6001600160601b031690565b6001600160601b0316905060006129728460181c6001600160601b031690565b6001600160601b03169091209392505050565b600061159661299383612c1a565b90565b600061159662ffffff198316826004612bea565b600061159662ffffff19831660246004612bea565b600061159662ffffff19831660046020612c2b565b6000611596604c6129f281601886901c6001600160601b03166133e3565b62ffffff19851691906000612d36565b6060600080612a1a8460181c6001600160601b031690565b6001600160601b031690506040519150819250612a3a8483602001612db2565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff811115612a7157612a71612faa565b6040519080825280601f01601f191660200182016040528015612a9b576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612abc578692505b828152826000602083013e90999098509650505050505050565b6000336001600160a01b03841614612b1a5760405162461bcd60e51b81526020600482015260076024820152662162726964676560c81b6044820152606401610a05565b816001600160a01b0316836001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b86919061358a565b6001600160a01b0316149392505050565b6000601054821115612ba95760105491505b5090565b600080612bba8385613298565b9050604051811115612bca575060005b80600003612bdf5762ffffff19915050611b4f565b61291e858585612ea5565b6000612bf78260206135a7565b612c029060086135c0565b60ff16612c10858585612c2b565b901c949350505050565b600061159662ffffff198316602c60205b60008160ff16600003612c4057506000611b4f565b612c538460181c6001600160601b031690565b6001600160601b0316612c6960ff841685613298565b1115612cd157612c828460781c6001600160601b031690565b612c958560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610a05565b60208260ff161115612cf65760405163045df3f960e01b815260040160405180910390fd5b600882026000612d0f8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612d4c8660781c6001600160601b031690565b6001600160601b03169050612d6086612f1c565b84612d6b8784613298565b612d759190613298565b1115612d885762ffffff19915050612daa565b612d928582613298565b9050612da68364ffffffffff168286612bad565b9150505b949350505050565b600062ffffff1980841603612dda5760405163148d513360e21b815260040160405180910390fd5b612de383612f55565b15612e0157604051632ee0949160e11b815260040160405180910390fd5b6000612e168460181c6001600160601b031690565b6001600160601b031690506000612e368560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115612e575760206060fd5b8386858560045afa905080612e7f57604051632af1bd9b60e21b815260040160405180910390fd5b612e9a612e8c8860d81c90565b64ffffffffff168786612ea5565b979650505050505050565b60006060601883856001600160601b03821682148015612ecd575086816001600160601b0316145b612f065760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610a05565b96831b90961790911b90941790931b9392505050565b6000612f318260181c6001600160601b031690565b612f448360781c6001600160601b031690565b016001600160601b03169050919050565b6000612f618260d81c90565b64ffffffffff1664ffffffffff03612f7b57506001919050565b6000612f8683612f1c565b604051109392505050565b600060208284031215612fa357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612fd157600080fd5b813567ffffffffffffffff80821115612fec57612fec612faa565b604051601f8301601f19908116603f0116810190828211818310171561301457613014612faa565b8160405283815286602085880101111561302d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561305f57600080fd5b813567ffffffffffffffff81111561307657600080fd5b612daa84828501612fc0565b634e487b7160e01b600052602160045260246000fd5b60208101600383106130ba57634e487b7160e01b600052602160045260246000fd5b91905290565b600080600080600061046086880312156130d957600080fd5b853567ffffffffffffffff808211156130f157600080fd5b818801915088601f83011261310557600080fd5b81358181111561311457600080fd5b8960208260051b850101111561312957600080fd5b60209283019750955050860135925061044086018781111561314a57600080fd5b94979396509194604001933592915050565b6001600160a01b0381168114610fc457600080fd5b60006020828403121561318357600080fd5b8135611b4f8161315c565b803563ffffffff811681146131a257600080fd5b919050565b6000602082840312156131b957600080fd5b611b4f8261318e565b6000806000606084860312156131d757600080fd5b6131e08461318e565b925060208401359150604084013567ffffffffffffffff81111561320357600080fd5b61320f86828701612fc0565b9150509250925092565b60005b8381101561323457818101518382015260200161321c565b50506000910152565b60008151808452613255816020860160208601613219565b601f01601f19169290920160200192915050565b828152604060208201526000611b4c604083018461323d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561159657611596613282565b6000602082840312156132bd57600080fd5b5051919050565b6060815260006132d7606083018661323d565b82810360208401526132e9818661323d565b91505060018060a01b0383166040830152949350505050565b604081526000613315604083018561323d565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e1983360301811261335957600080fd5b9190910192915050565b6000808335601e1984360301811261337a57600080fd5b83018035915067ffffffffffffffff82111561339557600080fd5b6020019150368190038213156133aa57600080fd5b9250929050565b8183823760009101908152919050565b6000602082840312156133d357600080fd5b81518015158114611b4f57600080fd5b8181038181111561159657611596613282565b600063ffffffff80831681810361340f5761340f613282565b6001019392505050565b6000806040838503121561342c57600080fd5b505080516020909101519092909150565b848152836020820152826040820152608060608201526000613462608083018461323d565b9695505050505050565b602081526000611b4f602083018461323d565b6001600160a01b03841681526060602082018190526000906134a39083018561323d565b905063ffffffff83166040830152949350505050565b805160208083015191908110156134da576000198160200360031b1b821691505b50919050565b600063ffffffff808716835280861660208401525083604083015260806060830152613462608083018461323d565b838152821515602082015260606040820152600061291e606083018461323d565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c830152825161357881604c850160208701613219565b91909101604c01979650505050505050565b60006020828403121561359c57600080fd5b8151611b4f8161315c565b60ff828116828216039081111561159657611596613282565b60ff81811683821602908116908181146135dc576135dc613282565b509291505056fea2646970667358221220f02d2fe9b92aba6ab368fdc34506d2339c45cd80325d4a1d967312b89967484464736f6c63430008110033","opcodes":"PUSH2 0x160 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x3B8A CODESIZE SUB DUP1 PUSH3 0x3B8A DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x403 JUMP JUMPDEST DUP1 DUP1 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP1 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH3 0x52 CALLER PUSH3 0x2C2 JUMP JUMPDEST DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0x0 SUB PUSH3 0x9D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x32B6B83A3C903237B6B0B4B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xE9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x32B6B83A3C903937B7BA26B0B730B3B2B9 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x94 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0xA0 MSTORE DUP4 DUP2 AND PUSH1 0xC0 MSTORE SWAP1 DUP6 AND PUSH1 0xE0 MSTORE DUP2 AND ISZERO PUSH3 0x121 JUMPI PUSH3 0x121 DUP2 PUSH3 0x327 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH4 0xFFFFFFFF DUP7 DUP2 AND SWAP3 SWAP1 DUP9 AND SWAP2 PUSH32 0x4F9C27C2FE3F84576EA469D367D044DA53C45E951617E8389F2B5ED8DB9D25F0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE POP PUSH1 0x1 PUSH1 0x7 SSTORE PUSH3 0xCF84F DUP6 GT PUSH3 0x1F4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2170726F6365737320676173 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x94 JUMP JUMPDEST PUSH2 0x3A97 DUP5 GT PUSH3 0x236 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x217265736572766520676173 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x94 JUMP JUMPDEST PUSH2 0x120 DUP6 SWAP1 MSTORE PUSH2 0x140 DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0x289 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x217A65726F206D65726B6C65 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x94 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x100 MSTORE PUSH1 0x8 SSTORE POP PUSH3 0x2AF SWAP6 POP DUP7 SWAP5 POP POP PUSH3 0x390 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH3 0x4C2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x10 SSTORE JUMP JUMPDEST DUP1 MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH3 0x3E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x3E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x160 DUP13 DUP15 SUB SLT ISZERO PUSH3 0x426 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x431 DUP13 PUSH3 0x3D1 JUMP JUMPDEST SWAP11 POP PUSH3 0x441 PUSH1 0x20 DUP14 ADD PUSH3 0x3D1 JUMP JUMPDEST SWAP10 POP PUSH3 0x451 PUSH1 0x40 DUP14 ADD PUSH3 0x3EB JUMP JUMPDEST SWAP9 POP PUSH3 0x461 PUSH1 0x60 DUP14 ADD PUSH3 0x3EB JUMP JUMPDEST SWAP8 POP PUSH3 0x471 PUSH1 0x80 DUP14 ADD PUSH3 0x3EB JUMP JUMPDEST SWAP7 POP PUSH1 0xA0 DUP13 ADD MLOAD SWAP6 POP PUSH1 0xC0 DUP13 ADD MLOAD SWAP5 POP PUSH1 0xE0 DUP13 ADD MLOAD SWAP4 POP PUSH3 0x497 PUSH2 0x100 DUP14 ADD PUSH3 0x3EB JUMP JUMPDEST SWAP3 POP PUSH3 0x4A8 PUSH2 0x120 DUP14 ADD PUSH3 0x3EB JUMP JUMPDEST SWAP2 POP PUSH2 0x140 DUP13 ADD MLOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x3619 PUSH3 0x571 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x325 ADD MSTORE PUSH2 0x1D67 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x90E ADD MSTORE DUP2 DUP2 PUSH2 0x1D88 ADD MSTORE PUSH2 0x1E15 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x735 ADD MSTORE DUP2 DUP2 PUSH2 0xA8B ADD MSTORE DUP2 DUP2 PUSH2 0xFCB ADD MSTORE PUSH2 0x16CF ADD MSTORE PUSH1 0x0 PUSH2 0x2B5 ADD MSTORE PUSH1 0x0 PUSH2 0x543 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x8C4 ADD MSTORE DUP2 DUP2 PUSH2 0xC33 ADD MSTORE DUP2 DUP2 PUSH2 0x1889 ADD MSTORE PUSH2 0x21F3 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x48A ADD MSTORE DUP2 DUP2 PUSH2 0x671 ADD MSTORE DUP2 DUP2 PUSH2 0x1671 ADD MSTORE PUSH2 0x1C67 ADD MSTORE PUSH2 0x3619 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x297 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x15A JUMPI DUP1 PUSH4 0xB95A2001 GT PUSH2 0xC1 JUMPI DUP1 PUSH4 0xD69F9D61 GT PUSH2 0x7A JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x8B2 JUMPI DUP1 PUSH4 0xD7D317B3 EQ PUSH2 0x8E6 JUMPI DUP1 PUSH4 0xD88BEDA2 EQ PUSH2 0x8FC JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x930 JUMPI DUP1 PUSH4 0xE0FED010 EQ PUSH2 0x950 JUMPI DUP1 PUSH4 0xFA31DE01 EQ PUSH2 0x970 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB95A2001 EQ PUSH2 0x7ED JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x820 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x835 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x855 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x873 JUMPI DUP1 PUSH4 0xD2A3CC71 EQ PUSH2 0x892 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA01892A5 GT PUSH2 0x113 JUMPI DUP1 PUSH4 0xA01892A5 EQ PUSH2 0x723 JUMPI DUP1 PUSH4 0xA792C29B EQ PUSH2 0x757 JUMPI DUP1 PUSH4 0xAD9C0C2E EQ PUSH2 0x777 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x78D JUMPI DUP1 PUSH4 0xB2F87643 EQ PUSH2 0x7AD JUMPI DUP1 PUSH4 0xB697F531 EQ PUSH2 0x7CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x64D JUMPI DUP1 PUSH4 0x8D3638F4 EQ PUSH2 0x662 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x695 JUMPI DUP1 PUSH4 0x98C9F2B9 EQ PUSH2 0x6B3 JUMPI DUP1 PUSH4 0x9D3117C7 EQ PUSH2 0x6E3 JUMPI DUP1 PUSH4 0x9FA92F9D EQ PUSH2 0x710 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x572386CA GT PUSH2 0x1FE JUMPI DUP1 PUSH4 0x65EAF11B GT PUSH2 0x1B7 JUMPI DUP1 PUSH4 0x65EAF11B EQ PUSH2 0x5AD JUMPI DUP1 PUSH4 0x68742DA6 EQ PUSH2 0x5C2 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x5E2 JUMPI DUP1 PUSH4 0x6B04A933 EQ PUSH2 0x5F8 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x618 JUMPI DUP1 PUSH4 0x7850B020 EQ PUSH2 0x62D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x572386CA EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0x579C1618 EQ PUSH2 0x4DC JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x4F2 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x512 JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x531 JUMPI DUP1 PUSH4 0x6159ADA1 EQ PUSH2 0x57D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3CF52FFB GT PUSH2 0x250 JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x3E5 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x3FA JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x40F JUMPI DUP1 PUSH4 0x508A109B EQ PUSH2 0x42F JUMPI DUP1 PUSH4 0x5190BC53 EQ PUSH2 0x44F JUMPI DUP1 PUSH4 0x52A9674B EQ PUSH2 0x478 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x2A3 JUMPI DUP1 PUSH4 0x1EEAABEA EQ PUSH2 0x2F1 JUMPI DUP1 PUSH4 0x25E3BEDA EQ PUSH2 0x313 JUMPI DUP1 PUSH4 0x2BB1AE7C EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0x2BBD59CA EQ PUSH2 0x368 JUMPI DUP1 PUSH4 0x301F07C3 EQ PUSH2 0x3A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x29E JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D7 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x30C CALLDATASIZE PUSH1 0x4 PUSH2 0x2F91 JUMP JUMPDEST PUSH2 0x99E JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x31F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E8 JUMP JUMPDEST PUSH2 0x311 PUSH2 0x363 CALLDATASIZE PUSH1 0x4 PUSH2 0x304D JUMP JUMPDEST PUSH2 0xA48 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x398 PUSH2 0x383 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F91 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2E8 SWAP2 SWAP1 PUSH2 0x3098 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x3C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F91 JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x347 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x406 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0xBEB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x41B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x42A CALLDATASIZE PUSH1 0x4 PUSH2 0x304D JUMP JUMPDEST PUSH2 0xC28 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x43B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x44A CALLDATASIZE PUSH1 0x4 PUSH2 0x30C0 JUMP JUMPDEST PUSH2 0xCCE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x46A CALLDATASIZE PUSH1 0x4 PUSH2 0x3171 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x484 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D7 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x4C7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F91 JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x50D CALLDATASIZE PUSH1 0x4 PUSH2 0x3171 JUMP JUMPDEST PUSH2 0xF90 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3D5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x53D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x565 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x589 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x598 CALLDATASIZE PUSH1 0x4 PUSH2 0x3171 JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0xFC7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x5DD CALLDATASIZE PUSH1 0x4 PUSH2 0x3171 JUMP JUMPDEST PUSH2 0x1050 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x347 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x604 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x613 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F91 JUMP JUMPDEST PUSH2 0x10CD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x624 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x1198 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x639 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x648 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F91 JUMP JUMPDEST PUSH2 0x11C3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x659 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x11F7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x66E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x0 PUSH2 0x2D7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x565 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x6CE CALLDATASIZE PUSH1 0x4 PUSH2 0x2F91 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x6FE CALLDATASIZE PUSH1 0x4 PUSH2 0x2F91 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x71C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH2 0x565 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x72F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x565 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x763 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x565 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x783 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x799 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x7A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3171 JUMP JUMPDEST PUSH2 0x12AB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x7C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3171 JUMP JUMPDEST PUSH2 0x1349 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x7E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3171 JUMP JUMPDEST PUSH2 0x13C5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D7 PUSH2 0x808 CALLDATASIZE PUSH1 0x4 PUSH2 0x31A7 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x82C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x1444 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x841 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x565 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x861 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x565 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x87F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x3D5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x89E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x8AD CALLDATASIZE PUSH1 0x4 PUSH2 0x3171 JUMP JUMPDEST PUSH2 0x14B4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x565 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x908 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x93C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x94B CALLDATASIZE PUSH1 0x4 PUSH2 0x3171 JUMP JUMPDEST PUSH2 0x158B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x96B CALLDATASIZE PUSH1 0x4 PUSH2 0x2F91 JUMP JUMPDEST PUSH2 0x159C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x97C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x990 PUSH2 0x98B CALLDATASIZE PUSH1 0x4 PUSH2 0x31C2 JUMP JUMPDEST PUSH2 0x15D0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2E8 SWAP3 SWAP2 SWAP1 PUSH2 0x3269 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9C9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD DUP2 SUB PUSH2 0xA0E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2164656C6179426C6F636B73 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLER DUP2 MSTORE DUP2 SWAP1 PUSH32 0x8BD16320F3B60336ED5FD2A770EB7453E7E71CFEF4462ADDFFD7AE9DFE201C8E SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x8 SSTORE JUMP JUMPDEST PUSH2 0xA50 PUSH2 0x179F JUMP JUMPDEST NUMBER PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD PUSH2 0xA61 SWAP2 SWAP1 PUSH2 0x3298 JUMP JUMPDEST GT ISZERO PUSH2 0xA80 JUMPI PUSH1 0x40 MLOAD PUSH4 0x46CF2AF1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST NUMBER PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB0B SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xB61 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1C9BDBDD08185B1C9958591E481CD95B9D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xB76 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH2 0xB91 DUP2 DUP5 PUSH2 0x17EC JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 SWAP1 PUSH2 0xBDE SWAP1 DUP4 SWAP1 DUP7 SWAP1 CALLER SWAP1 PUSH2 0x32C4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC16 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC1E PUSH2 0x1911 JUMP JUMPDEST PUSH2 0xC26 PUSH2 0x1961 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xC89 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA05 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0xC92 DUP2 PUSH2 0x19B6 JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0xCC3 SWAP3 SWAP2 SWAP1 PUSH2 0x3302 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xCD6 PUSH2 0x179F JUMP JUMPDEST PUSH2 0xCDE PUSH2 0x1A56 JUMP JUMPDEST DUP4 PUSH2 0xD15 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x2170726F6F6673 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD2A JUMPI PUSH2 0xD2A PUSH2 0x332C JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD3C SWAP2 SWAP1 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0xD46 SWAP1 DUP1 PUSH2 0x3363 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD54 SWAP3 SWAP2 SWAP1 PUSH2 0x33B1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xDBB DUP3 DUP9 DUP9 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD77 JUMPI PUSH2 0xD77 PUSH2 0x332C JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD89 SWAP2 SWAP1 PUSH2 0x3342 JUMP JUMPDEST PUSH1 0x20 ADD DUP10 DUP10 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD9F JUMPI PUSH2 0xD9F PUSH2 0x332C JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xDB1 SWAP2 SWAP1 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0x420 ADD CALLDATALOAD PUSH2 0x1AAF JUMP JUMPDEST SWAP1 POP PUSH2 0xDC9 DUP2 DUP7 DUP7 DUP7 PUSH2 0x1B56 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP7 SWAP1 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xEEF JUMPI DUP9 DUP9 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xE0E JUMPI PUSH2 0xE0E PUSH2 0x332C JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE20 SWAP2 SWAP1 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0xE2A SWAP1 DUP1 PUSH2 0x3363 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE38 SWAP3 SWAP2 SWAP1 PUSH2 0x33B1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP4 POP PUSH1 0x0 PUSH2 0xE8D DUP6 DUP12 DUP12 DUP6 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xE60 JUMPI PUSH2 0xE60 PUSH2 0x332C JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE72 SWAP2 SWAP1 PUSH2 0x3342 JUMP JUMPDEST PUSH1 0x20 ADD DUP13 DUP13 DUP7 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xD9F JUMPI PUSH2 0xD9F PUSH2 0x332C JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0xECC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x85CDA185C9959149BDBDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE ADD PUSH2 0xDE8 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xF7B JUMPI PUSH2 0xF72 DUP10 DUP10 DUP4 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xF1C JUMPI PUSH2 0xF1C PUSH2 0x332C JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xF2E SWAP2 SWAP1 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0xF38 SWAP1 DUP1 PUSH2 0x3363 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1C51 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xEF3 JUMP JUMPDEST POP POP POP POP PUSH2 0xF89 PUSH1 0x1 PUSH1 0x7 SSTORE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xFBB JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFC4 DUP2 PUSH2 0x1F2E JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1027 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x104B SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x107B JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SELFBALANCE PUSH2 0x1086 DUP3 DUP3 PUSH2 0x1F97 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEAFF4B37086828766AD3268786972C0CD24259D4C87A80F9D3963A3C3D999B0D DUP3 PUSH1 0x40 MLOAD PUSH2 0x10C1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10F8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1100 PUSH2 0x1911 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SUB PUSH2 0x1155 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x616767726567617465526F6F742021657869737473 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xF51534ECF10A58DB36CE4F5180F59DEDDF3B3EB7C5E7454E602C2F80A40CC739 SWAP1 PUSH2 0xCC3 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC26 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x11EE JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFC4 DUP2 PUSH2 0x20B5 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1240 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1264 SWAP2 SWAP1 PUSH2 0x33C1 JUMP JUMPDEST PUSH2 0x129B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0x12A3 PUSH2 0x179F JUMP JUMPDEST PUSH2 0xC26 PUSH2 0x20F6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x12D6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x12F4 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1312 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x1340 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFC4 DUP2 PUSH2 0x2139 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1374 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x384859C5EF5FAFAC31E8BC92CE7FB48B1F2C74C4DD5E212EB84EC202FA5D9FAD SWAP2 ADD PUSH2 0xCC3 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x13F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xD65ECA5D561D3A4568C87B9B13CED4AB52A69EDADFDFDB22D76BC595F36D7D87 SWAP2 ADD PUSH2 0xCC3 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x146F JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x1481 SWAP2 SWAP1 PUSH2 0x33E3 JUMP JUMPDEST GT PUSH2 0x149F JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0xC26 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2187 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x14DF JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0x153D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616C72656164792077617463686572206D616E61676572000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC16D059E43D7F8E29CCB4E001A2F249D3C59E274925D6A6BC3912943441D9F6C SWAP1 PUSH1 0x20 ADD PUSH2 0xCC3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1596 DUP3 PUSH2 0x21EC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x15C7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFC4 DUP2 PUSH2 0x2218 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x60 SWAP1 PUSH1 0xFF AND PUSH2 0x1621 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x8585B1B1BDDDB1A5CDD1959 PUSH1 0xA2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP3 PUSH2 0x164A DUP4 PUSH2 0x33F6 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH4 0xFFFFFFFF AND MUL OR SWAP1 SSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0x16A9 PUSH32 0x0 PUSH2 0x16A0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP5 DUP11 DUP11 DUP11 PUSH2 0x2296 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH4 0x2D287E43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2D287E43 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x171F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1743 SWAP2 SWAP1 PUSH2 0x3419 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH32 0x40F08EE347FC927AE45902EDC87DEBB024AAB1A311943731968607F603F2152F DUP4 PUSH2 0x1775 PUSH1 0x1 DUP5 PUSH2 0x33E3 JUMP JUMPDEST DUP5 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1787 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x343D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP SWAP1 SWAP9 SWAP2 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xC26 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x182C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 PUSH4 0x4FF746F6 PUSH1 0xE0 SHL DUP4 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1847 SWAP2 SWAP1 PUSH2 0x346C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH1 0x3 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND SWAP2 PUSH4 0x3DBB202B SWAP2 AND DUP4 PUSH2 0x18BC DUP7 PUSH2 0x22CE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x18DA SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x347F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1908 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xC26 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0x1969 PUSH2 0x1911 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x19CB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x21EC JUMP JUMPDEST PUSH2 0x1A0A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x10B6B4B93937B921B7B73732B1BA37B9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0x1A45 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0xFC4 PUSH2 0x1A51 DUP3 PUSH2 0x34B9 JUMP JUMPDEST PUSH2 0x232C JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SLOAD SUB PUSH2 0x1AA8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1AD5 JUMPI PUSH2 0x1AD5 PUSH2 0x3082 JUMP JUMPDEST EQ PUSH2 0x1B18 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x214D6573736167655374617475732E4E6F6E65 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0x1B4C DUP5 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x2455 SWAP1 POP JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1C4B JUMPI PUSH2 0x1B75 DUP4 PUSH2 0x27A3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1BAB DUP6 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x2455 SWAP1 POP JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0x1BF2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1A5B9D985B1A59081A5B989BDD5B99149BDBDD PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP5 SWAP1 DUP7 SWAP1 PUSH32 0x7EC1EA51FE3DB53E55ED9D922854BC2156F467FF2F87D74E2086DAE2C84A88A8 SWAP1 PUSH2 0x1C41 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1C5E DUP4 DUP3 PUSH2 0x2903 JUMP JUMPDEST SWAP1 POP PUSH4 0xFFFFFFFF PUSH32 0x0 AND PUSH2 0x1C96 PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x2927 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x1CD8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B232B9BA34B730BA34B7B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CE9 PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x293C JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1D10 JUMPI PUSH2 0x1D10 PUSH2 0x3082 JUMP JUMPDEST EQ PUSH2 0x1D47 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x10B83937BB32B7 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x2 OR SWAP1 SSTORE PUSH1 0x1 PUSH2 0x1DAC PUSH32 0x0 PUSH32 0x0 PUSH2 0x3298 JUMP JUMPDEST PUSH2 0x1DB6 SWAP2 SWAP1 PUSH2 0x33E3 JUMP JUMPDEST GAS GT PUSH2 0x1DED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA05 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x21676173 PUSH1 0xE0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DFE PUSH3 0xFFFFFF NOT DUP5 AND PUSH2 0x2985 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH32 0x0 SWAP2 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x1E59 PUSH3 0xFFFFFF NOT DUP9 AND PUSH2 0x2996 JUMP JUMPDEST PUSH2 0x1E68 PUSH3 0xFFFFFF NOT DUP10 AND PUSH2 0x29AA JUMP JUMPDEST PUSH2 0x1E77 PUSH3 0xFFFFFF NOT DUP11 AND PUSH2 0x29BF JUMP JUMPDEST PUSH2 0x1E94 PUSH2 0x1E89 PUSH3 0xFFFFFF NOT DUP13 AND PUSH2 0x29D4 JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND PUSH2 0x2A02 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1EA7 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x34E0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xAB2DC3F5 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 POP PUSH2 0x1EE1 DUP6 DUP6 PUSH1 0x0 DUP7 DUP6 PUSH2 0x2A4B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP10 POP SWAP3 POP PUSH32 0xD42DE95A9B26F1BE134C8ECCE389DC4FCFA18753D01661B7B361233569E8FE48 SWAP1 PUSH2 0x1F1A SWAP1 DUP9 SWAP1 DUP12 SWAP1 DUP7 SWAP1 PUSH2 0x350F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x1FE7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2034 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2039 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x20B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA05 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x10 SSTORE JUMP JUMPDEST PUSH2 0x20FE PUSH2 0x179F JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1999 CALLER SWAP1 JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1596 PUSH32 0x0 DUP4 PUSH2 0x2AD6 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 SUB PUSH2 0x225B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x85B995DC81C985D19481B1A5B5A5D PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0x8E7FA5E406CB856AAB05575E45EA011C6748376CC1B5229E3D67B92986406A15 SWAP2 ADD PUSH2 0xCC3 JUMP JUMPDEST PUSH1 0x60 DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x22B3 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3530 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x2310 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0x1596 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2327 SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST PUSH2 0x2B97 JUMP JUMPDEST DUP1 PUSH2 0x236A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x6E657720726F6F7420656D707479 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x23BD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x726F6F7420616C72656164792070656E64696E67 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2412 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x3937B7BA1030B63932B0B23C90383937BB32B7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 NUMBER SWAP1 SSTORE MLOAD PUSH32 0x84EF18531155AFDB0E64FF905D67044AE3AAC63A6FBA4661CFD9C4C14F289BC8 SWAP1 PUSH2 0xCC3 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x5 DUP3 DUP2 SHL DUP3 AND SWAP5 DUP6 MSTORE DUP4 MLOAD SWAP5 DUP3 SUB SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x40 PUSH1 0x0 DUP2 DUP2 KECCAK256 PUSH1 0x2 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x4 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP3 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x8 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x10 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 DUP5 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 DUP4 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 SWAP1 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xE0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x100 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x200 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x120 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x400 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x140 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x800 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x160 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x1000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x2000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x4000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1C0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x8000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1E0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH3 0x10000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x20000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x220 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x40000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x240 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x80000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x260 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x100000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x280 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x200000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x400000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x800000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2E0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x1000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x300 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x2000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x320 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x4000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x340 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x8000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x360 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x10000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x380 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x20000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x40000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x80000000 SWAP1 SWAP5 AND ISZERO SWAP1 SWAP6 SHL SWAP2 DUP3 SWAP1 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x3E0 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x27E6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x616767726567617465526F6F7420656D707479 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2800 JUMPI POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x2856 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x1859D9DC9959D85D19549BDBDD0808595E1A5CDD PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x2863 DUP3 NUMBER PUSH2 0x33E3 JUMP JUMPDEST LT ISZERO PUSH2 0x28B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616767726567617465526F6F7420217665726966696564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP4 SWAP2 PUSH32 0x36B314ABA9F663B4D3EF3288AE489341CC5E6A2725A05FA2B72DF7A27E03F42A SWAP2 LOG2 POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0x291E PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x2BAD JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1596 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x28 PUSH1 0x4 PUSH2 0x2BEA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2952 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2972 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 SWAP2 KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1596 PUSH2 0x2993 DUP4 PUSH2 0x2C1A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1596 PUSH3 0xFFFFFF NOT DUP4 AND DUP3 PUSH1 0x4 PUSH2 0x2BEA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1596 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x24 PUSH1 0x4 PUSH2 0x2BEA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1596 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x4 PUSH1 0x20 PUSH2 0x2C2B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1596 PUSH1 0x4C PUSH2 0x29F2 DUP2 PUSH1 0x18 DUP7 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x33E3 JUMP JUMPDEST PUSH3 0xFFFFFF NOT DUP6 AND SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2D36 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x2A1A DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x40 MLOAD SWAP2 POP DUP2 SWAP3 POP PUSH2 0x2A3A DUP5 DUP4 PUSH1 0x20 ADD PUSH2 0x2DB2 JUMP JUMPDEST POP DUP2 DUP2 ADD PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH2 0xFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2A71 JUMPI PUSH2 0x2A71 PUSH2 0x2FAA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2A9B JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP8 MLOAD PUSH1 0x20 DUP10 ADD DUP12 DUP15 DUP15 CALL SWAP2 POP RETURNDATASIZE SWAP3 POP DUP7 DUP4 GT ISZERO PUSH2 0x2ABC JUMPI DUP7 SWAP3 POP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EQ PUSH2 0x2B1A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x21627269646765 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6E296E45 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B62 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B86 SWAP2 SWAP1 PUSH2 0x358A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x10 SLOAD DUP3 GT ISZERO PUSH2 0x2BA9 JUMPI PUSH1 0x10 SLOAD SWAP2 POP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2BBA DUP4 DUP6 PUSH2 0x3298 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x2BCA JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x2BDF JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x1B4F JUMP JUMPDEST PUSH2 0x291E DUP6 DUP6 DUP6 PUSH2 0x2EA5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BF7 DUP3 PUSH1 0x20 PUSH2 0x35A7 JUMP JUMPDEST PUSH2 0x2C02 SWAP1 PUSH1 0x8 PUSH2 0x35C0 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x2C10 DUP6 DUP6 DUP6 PUSH2 0x2C2B JUMP JUMPDEST SWAP1 SHR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1596 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x2C PUSH1 0x20 JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0x2C40 JUMPI POP PUSH1 0x0 PUSH2 0x1B4F JUMP JUMPDEST PUSH2 0x2C53 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x2C69 PUSH1 0xFF DUP5 AND DUP6 PUSH2 0x3298 JUMP JUMPDEST GT ISZERO PUSH2 0x2CD1 JUMPI PUSH2 0x2C82 DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2C95 DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x2CF6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0x2D0F DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT DUP5 ADD SAR SWAP2 SWAP1 SWAP6 ADD MLOAD AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2D4C DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH2 0x2D60 DUP7 PUSH2 0x2F1C JUMP JUMPDEST DUP5 PUSH2 0x2D6B DUP8 DUP5 PUSH2 0x3298 JUMP JUMPDEST PUSH2 0x2D75 SWAP2 SWAP1 PUSH2 0x3298 JUMP JUMPDEST GT ISZERO PUSH2 0x2D88 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x2DAA JUMP JUMPDEST PUSH2 0x2D92 DUP6 DUP3 PUSH2 0x3298 JUMP JUMPDEST SWAP1 POP PUSH2 0x2DA6 DUP4 PUSH5 0xFFFFFFFFFF AND DUP3 DUP7 PUSH2 0x2BAD JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFFFFFF NOT DUP1 DUP5 AND SUB PUSH2 0x2DDA JUMPI PUSH1 0x40 MLOAD PUSH4 0x148D5133 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2DE3 DUP4 PUSH2 0x2F55 JUMP JUMPDEST ISZERO PUSH2 0x2E01 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EE09491 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2E16 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2E36 DUP6 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD SWAP2 POP DUP6 DUP3 GT ISZERO PUSH2 0x2E57 JUMPI PUSH1 0x20 PUSH1 0x60 REVERT JUMPDEST DUP4 DUP7 DUP6 DUP6 PUSH1 0x4 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x2E7F JUMPI PUSH1 0x40 MLOAD PUSH4 0x2AF1BD9B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2E9A PUSH2 0x2E8C DUP9 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND DUP8 DUP7 PUSH2 0x2EA5 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0x2ECD JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0x2F06 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F31 DUP3 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2F44 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F61 DUP3 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH5 0xFFFFFFFFFF SUB PUSH2 0x2F7B JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F86 DUP4 PUSH2 0x2F1C JUMP JUMPDEST PUSH1 0x40 MLOAD LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2FA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2FD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2FEC JUMPI PUSH2 0x2FEC PUSH2 0x2FAA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x3014 JUMPI PUSH2 0x3014 PUSH2 0x2FAA JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x302D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x305F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3076 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2DAA DUP5 DUP3 DUP6 ADD PUSH2 0x2FC0 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH2 0x30BA JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x460 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x30D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x30F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3105 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x3114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x3129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 DUP4 ADD SWAP8 POP SWAP6 POP POP DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x440 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x314A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x40 ADD SWAP4 CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xFC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3183 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1B4F DUP2 PUSH2 0x315C JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x31A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x31B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B4F DUP3 PUSH2 0x318E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x31D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31E0 DUP5 PUSH2 0x318E JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3203 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x320F DUP7 DUP3 DUP8 ADD PUSH2 0x2FC0 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3234 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x321C JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x3255 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3219 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1B4C PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x323D JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x1596 JUMPI PUSH2 0x1596 PUSH2 0x3282 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x32BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x32D7 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x323D JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x32E9 DUP2 DUP7 PUSH2 0x323D JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3315 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x323D JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x43E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3359 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x337A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x3395 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x33AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1B4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x1596 JUMPI PUSH2 0x1596 PUSH2 0x3282 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x340F JUMPI PUSH2 0x340F PUSH2 0x3282 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x342C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x3462 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x323D JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1B4F PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x323D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x34A3 SWAP1 DUP4 ADD DUP6 PUSH2 0x323D JUMP JUMPDEST SWAP1 POP PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x34DA JUMPI PUSH1 0x0 NOT DUP2 PUSH1 0x20 SUB PUSH1 0x3 SHL SHL DUP3 AND SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3462 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x323D JUMP JUMPDEST DUP4 DUP2 MSTORE DUP3 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x291E PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x323D JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP1 DUP10 PUSH1 0xE0 SHL AND DUP4 MSTORE DUP8 PUSH1 0x4 DUP5 ADD MSTORE DUP1 DUP8 PUSH1 0xE0 SHL AND PUSH1 0x24 DUP5 ADD MSTORE DUP1 DUP7 PUSH1 0xE0 SHL AND PUSH1 0x28 DUP5 ADD MSTORE POP DUP4 PUSH1 0x2C DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x3578 DUP2 PUSH1 0x4C DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x3219 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x4C ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x359C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1B4F DUP2 PUSH2 0x315C JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x1596 JUMPI PUSH2 0x1596 PUSH2 0x3282 JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND MUL SWAP1 DUP2 AND SWAP1 DUP2 DUP2 EQ PUSH2 0x35DC JUMPI PUSH2 0x35DC PUSH2 0x3282 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CREATE 0x2D 0x2F 0xE9 0xB9 0x2A 0xBA PUSH11 0xB368FDC34506D2339C45CD DUP1 ORIGIN 0x5D 0x4A SAR SWAP7 PUSH20 0x12B89967484464736F6C63430008110033000000 ","sourceMap":"314:1948:132:-:0;;;425:560;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;972:7;;768;783:13;804:4;816:12;836:16;860:11;879;898:12;918:7;933:15;;768:7;783:13;804:4;816:12;836:16;3038:21:116::1;3048:10;3038:9;:21::i;:::-;3105:7;:12;;3116:1;3105:12:::0;3097:37:::1;;;::::0;-1:-1:-1;;;3097:37:116;;1543:2:181;3097:37:116::1;::::0;::::1;1525:21:181::0;1582:2;1562:18;;;1555:30;-1:-1:-1;;;1601:18:181;;;1594:42;1653:18;;3097:37:116::1;;;;;;;;;-1:-1:-1::0;;;;;3148:26:116;::::1;3140:56;;;::::0;-1:-1:-1;;;3140:56:116;;1884:2:181;3140:56:116::1;::::0;::::1;1866:21:181::0;1923:2;1903:18;;;1896:30;-1:-1:-1;;;1942:18:181;;;1935:47;1999:18;;3140:56:116::1;1682:341:181::0;3140:56:116::1;3308:16;::::0;;::::1;;::::0;-1:-1:-1;;;;;3330:10:116;;::::1;;::::0;3346:27;;::::1;;::::0;3379:29;;::::1;;::::0;3449:30;::::1;::::0;3445:88:::1;;3489:37;3509:16:::0;3489:19:::1;:37::i;:::-;3544:74;::::0;;-1:-1:-1;;;;;2286:15:181;;;2268:34;;2338:15;;;2333:2;2318:18;;2311:43;2390:15;;2370:18;;;2363:43;3544:74:116;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;2218:2:181;3544:74:116;;::::1;-1:-1:-1::0;;996:7:51;:15;;-1:-1:-1;;;;996:15:51;;;-1:-1:-1;;1056:14:114::1;:48:::0;;-1:-1:-1;;;;;;1056:48:114::1;-1:-1:-1::0;;;;;1056:48:114;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;1821:7:52;:22;7305:11:120::3;7291:25:::0;::::3;7283:50;;;::::0;-1:-1:-1;;;7283:50:120;;2619:2:181;7283:50:120::3;::::0;::::3;2601:21:181::0;2658:2;2638:18;;;2631:30;-1:-1:-1;;;2677:18:181;;;2670:42;2729:18;;7283:50:120::3;2417:336:181::0;7283:50:120::3;7361:10;7347:11;:24;7339:49;;;::::0;-1:-1:-1;;;7339:49:120;;2960:2:181;7339:49:120::3;::::0;::::3;2942:21:181::0;2999:2;2979:18;;;2972:30;-1:-1:-1;;;3018:18:181;;;3011:42;3070:18;;7339:49:120::3;2758:336:181::0;7339:49:120::3;7394:25;::::0;;;7425::::3;::::0;;;-1:-1:-1;;;;;7465:21:120;::::3;7457:46;;;::::0;-1:-1:-1;;;7457:46:120;;3301:2:181;7457:46:120::3;::::0;::::3;3283:21:181::0;3340:2;3320:18;;;3313:30;-1:-1:-1;;;3359:18:181;;;3352:42;3411:18;;7457:46:120::3;3099:336:181::0;7457:46:120::3;-1:-1:-1::0;;;;;;7509:35:120::3;;::::0;7551:11:::3;:26:::0;-1:-1:-1;791:19:118;;-1:-1:-1;802:7:118;;-1:-1:-1;;791:10:118;:19;-1:-1:-1;;;791:19:118:i;:::-;756:59;275:47:130;425:560:132;;;;;;;;;;;314:1948;;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;5838::116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;3652:34:181;;3722:15;;;3717:2;3702:18;;3695:43;5921:57:116;;3587:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;1089:114:118:-;1160:6;;1146:30;;;3923:25:181;;;3979:2;3964:18;;3957:34;;;1146:30:118;;3896:18:181;1146:30:118;;;;;;;1182:6;:16;1089:114::o;14:167:181:-;92:13;;145:10;134:22;;124:33;;114:61;;171:1;168;161:12;114:61;14:167;;;:::o;186:177::-;265:13;;-1:-1:-1;;;;;307:31:181;;297:42;;287:70;;353:1;350;343:12;368:968;526:6;534;542;550;558;566;574;582;590;598;606:7;660:3;648:9;639:7;635:23;631:33;628:53;;;677:1;674;667:12;628:53;700:39;729:9;700:39;:::i;:::-;690:49;;758:48;802:2;791:9;787:18;758:48;:::i;:::-;748:58;;825:49;870:2;859:9;855:18;825:49;:::i;:::-;815:59;;893:49;938:2;927:9;923:18;893:49;:::i;:::-;883:59;;961:50;1006:3;995:9;991:19;961:50;:::i;:::-;951:60;;1051:3;1040:9;1036:19;1030:26;1020:36;;1096:3;1085:9;1081:19;1075:26;1065:36;;1141:3;1130:9;1126:19;1120:26;1110:36;;1165:50;1210:3;1199:9;1195:19;1165:50;:::i;:::-;1155:60;;1234:50;1279:3;1268:9;1264:19;1234:50;:::i;:::-;1224:60;;1325:3;1314:9;1310:19;1304:26;1293:37;;368:968;;;;;;;;;;;;;;:::o;3749:248::-;314:1948:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@AMB_39042":{"entryPoint":null,"id":39042,"parameterSlots":0,"returnSlots":0},"@DOMAIN_39039":{"entryPoint":null,"id":39039,"parameterSlots":0,"returnSlots":0},"@MERKLE_39550":{"entryPoint":null,"id":39550,"parameterSlots":0,"returnSlots":0},"@MIRROR_DOMAIN_39048":{"entryPoint":null,"id":39048,"parameterSlots":0,"returnSlots":0},"@PROCESS_GAS_39553":{"entryPoint":null,"id":39553,"parameterSlots":0,"returnSlots":0},"@RESERVE_GAS_39556":{"entryPoint":null,"id":39556,"parameterSlots":0,"returnSlots":0},"@ROOT_MANAGER_39045":{"entryPoint":null,"id":39045,"parameterSlots":0,"returnSlots":0},"@_39157":{"entryPoint":null,"id":39157,"parameterSlots":0,"returnSlots":0},"@_getGasFromEncoded_42309":{"entryPoint":8910,"id":42309,"parameterSlots":1,"returnSlots":1},"@_getGas_39366":{"entryPoint":11159,"id":39366,"parameterSlots":1,"returnSlots":1},"@_msgSender_11496":{"entryPoint":null,"id":11496,"parameterSlots":0,"returnSlots":1},"@_nonReentrantAfter_10733":{"entryPoint":null,"id":10733,"parameterSlots":0,"returnSlots":0},"@_nonReentrantBefore_10725":{"entryPoint":6742,"id":10725,"parameterSlots":0,"returnSlots":0},"@_pause_10663":{"entryPoint":8438,"id":10663,"parameterSlots":0,"returnSlots":0},"@_processMessage_42840":{"entryPoint":6582,"id":42840,"parameterSlots":1,"returnSlots":0},"@_requireNotPaused_10636":{"entryPoint":6047,"id":10636,"parameterSlots":0,"returnSlots":0},"@_requirePaused_10647":{"entryPoint":6417,"id":10647,"parameterSlots":0,"returnSlots":0},"@_sendMessage_42810":{"entryPoint":6124,"id":42810,"parameterSlots":2,"returnSlots":0},"@_setGasCap_39346":{"entryPoint":8373,"id":39346,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":7982,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":8583,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":8505,"id":49927,"parameterSlots":1,"returnSlots":0},"@_setRateLimitBlocks_49687":{"entryPoint":8728,"id":49687,"parameterSlots":1,"returnSlots":0},"@_unpause_10679":{"entryPoint":6497,"id":10679,"parameterSlots":0,"returnSlots":0},"@_verifySender_42280":{"entryPoint":10966,"id":42280,"parameterSlots":2,"returnSlots":1},"@_verifySender_42758":{"entryPoint":8684,"id":42758,"parameterSlots":1,"returnSlots":1},"@acceptProposedOwner_49887":{"entryPoint":5188,"id":49887,"parameterSlots":0,"returnSlots":0},"@addSender_39706":{"entryPoint":5061,"id":39706,"parameterSlots":1,"returnSlots":0},"@addressToBytes32_50168":{"entryPoint":null,"id":50168,"parameterSlots":1,"returnSlots":1},"@allowlistedSenders_39581":{"entryPoint":null,"id":39581,"parameterSlots":0,"returnSlots":0},"@body_49194":{"entryPoint":10708,"id":49194,"parameterSlots":1,"returnSlots":1},"@branchRoot_48998":{"entryPoint":9301,"id":48998,"parameterSlots":3,"returnSlots":1},"@build_50565":{"entryPoint":11181,"id":50565,"parameterSlots":3,"returnSlots":1},"@bytes32ToAddress_50187":{"entryPoint":null,"id":50187,"parameterSlots":1,"returnSlots":1},"@calculateMessageRoot_40253":{"entryPoint":6831,"id":40253,"parameterSlots":3,"returnSlots":1},"@clone_51141":{"entryPoint":10754,"id":51141,"parameterSlots":1,"returnSlots":1},"@delayBlocks_39546":{"entryPoint":null,"id":39546,"parameterSlots":0,"returnSlots":0},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@destination_49143":{"entryPoint":10535,"id":49143,"parameterSlots":1,"returnSlots":1},"@dispatch_39974":{"entryPoint":5584,"id":39974,"parameterSlots":3,"returnSlots":2},"@end_50683":{"entryPoint":12060,"id":50683,"parameterSlots":1,"returnSlots":1},"@excessivelySafeCall_50045":{"entryPoint":10827,"id":50045,"parameterSlots":5,"returnSlots":2},"@formatMessage_49044":{"entryPoint":8854,"id":49044,"parameterSlots":6,"returnSlots":1},"@home_39271":{"entryPoint":null,"id":39271,"parameterSlots":0,"returnSlots":1},"@indexUint_50882":{"entryPoint":11242,"id":50882,"parameterSlots":3,"returnSlots":1},"@index_50852":{"entryPoint":11307,"id":50852,"parameterSlots":3,"returnSlots":1},"@isNotValid_50403":{"entryPoint":12117,"id":50403,"parameterSlots":1,"returnSlots":1},"@isNull_50364":{"entryPoint":null,"id":50364,"parameterSlots":1,"returnSlots":1},"@isReplica_39286":{"entryPoint":null,"id":39286,"parameterSlots":1,"returnSlots":1},"@keccak_50951":{"entryPoint":10556,"id":50951,"parameterSlots":1,"returnSlots":1},"@lastSentBlock_49642":{"entryPoint":null,"id":49642,"parameterSlots":0,"returnSlots":0},"@leftMask_50342":{"entryPoint":null,"id":50342,"parameterSlots":1,"returnSlots":1},"@len_50665":{"entryPoint":null,"id":50665,"parameterSlots":1,"returnSlots":1},"@loc_50615":{"entryPoint":null,"id":50615,"parameterSlots":1,"returnSlots":1},"@localDomain_39855":{"entryPoint":null,"id":39855,"parameterSlots":0,"returnSlots":1},"@messages_39592":{"entryPoint":null,"id":39592,"parameterSlots":0,"returnSlots":0},"@mirrorConnector_39051":{"entryPoint":null,"id":39051,"parameterSlots":0,"returnSlots":0},"@nonce_49125":{"entryPoint":10666,"id":49125,"parameterSlots":1,"returnSlots":1},"@nonces_39586":{"entryPoint":null,"id":39586,"parameterSlots":0,"returnSlots":0},"@origin_49092":{"entryPoint":10646,"id":49092,"parameterSlots":1,"returnSlots":1},"@outboundRoot_39845":{"entryPoint":4039,"id":39845,"parameterSlots":0,"returnSlots":1},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@pause_38913":{"entryPoint":4599,"id":38913,"parameterSlots":0,"returnSlots":0},"@paused_10624":{"entryPoint":null,"id":10624,"parameterSlots":0,"returnSlots":1},"@pendingAggregateRoots_39561":{"entryPoint":null,"id":39561,"parameterSlots":0,"returnSlots":0},"@processMessage_39189":{"entryPoint":3112,"id":39189,"parameterSlots":1,"returnSlots":0},"@process_40427":{"entryPoint":7249,"id":40427,"parameterSlots":1,"returnSlots":1},"@proposeNewOwner_49841":{"entryPoint":4779,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@proveAndProcess_40115":{"entryPoint":3278,"id":40115,"parameterSlots":5,"returnSlots":0},"@proveMessageRoot_40306":{"entryPoint":6998,"id":40306,"parameterSlots":4,"returnSlots":0},"@provenAggregateRoots_39566":{"entryPoint":null,"id":39566,"parameterSlots":0,"returnSlots":0},"@provenMessageRoots_39571":{"entryPoint":null,"id":39571,"parameterSlots":0,"returnSlots":0},"@rateLimitBlocks_49639":{"entryPoint":null,"id":49639,"parameterSlots":0,"returnSlots":0},"@receiveAggregateRoot_40160":{"entryPoint":9004,"id":40160,"parameterSlots":1,"returnSlots":0},"@recipientAddress_49174":{"entryPoint":10629,"id":49174,"parameterSlots":1,"returnSlots":1},"@recipient_49158":{"entryPoint":11290,"id":49158,"parameterSlots":1,"returnSlots":1},"@ref_50591":{"entryPoint":10499,"id":50591,"parameterSlots":2,"returnSlots":1},"@removePendingAggregateRoot_39792":{"entryPoint":4301,"id":39792,"parameterSlots":1,"returnSlots":0},"@removeSender_39724":{"entryPoint":4937,"id":39724,"parameterSlots":1,"returnSlots":0},"@renounceOwnership_42768":{"entryPoint":4504,"id":42768,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@sendValue_11206":{"entryPoint":8087,"id":11206,"parameterSlots":2,"returnSlots":0},"@send_39906":{"entryPoint":2632,"id":39906,"parameterSlots":1,"returnSlots":0},"@sender_49107":{"entryPoint":10687,"id":49107,"parameterSlots":1,"returnSlots":1},"@sentMessageRoots_39576":{"entryPoint":null,"id":39576,"parameterSlots":0,"returnSlots":0},"@setDelayBlocks_39750":{"entryPoint":2462,"id":39750,"parameterSlots":1,"returnSlots":0},"@setGasCap_39330":{"entryPoint":4547,"id":39330,"parameterSlots":1,"returnSlots":0},"@setMirrorConnector_39170":{"entryPoint":3984,"id":39170,"parameterSlots":1,"returnSlots":0},"@setRateLimitBlocks_39763":{"entryPoint":5532,"id":39763,"parameterSlots":1,"returnSlots":0},"@setWatcherManager_38881":{"entryPoint":5300,"id":38881,"parameterSlots":1,"returnSlots":0},"@slice_50729":{"entryPoint":11574,"id":50729,"parameterSlots":4,"returnSlots":1},"@typeOf_50601":{"entryPoint":null,"id":50601,"parameterSlots":1,"returnSlots":1},"@unpause_38893":{"entryPoint":3051,"id":38893,"parameterSlots":0,"returnSlots":0},"@unsafeBuildUnchecked_50530":{"entryPoint":11941,"id":50530,"parameterSlots":3,"returnSlots":1},"@unsafeCopyTo_51113":{"entryPoint":11698,"id":51113,"parameterSlots":2,"returnSlots":1},"@verifyAggregateRoot_40221":{"entryPoint":10147,"id":40221,"parameterSlots":1,"returnSlots":0},"@verifySender_39202":{"entryPoint":5515,"id":39202,"parameterSlots":1,"returnSlots":1},"@watcherManager_38824":{"entryPoint":null,"id":38824,"parameterSlots":0,"returnSlots":0},"@withdrawFunds_39824":{"entryPoint":4176,"id":39824,"parameterSlots":1,"returnSlots":0},"abi_decode_bytes":{"entryPoint":12224,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":12657,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":13706,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256":{"entryPoint":12480,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":13249,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32_fromMemory":{"entryPoint":12971,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_uint256_fromMemory":{"entryPoint":13337,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes_memory_ptr":{"entryPoint":12365,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":12177,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32":{"entryPoint":12711,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr":{"entryPoint":12738,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_uint32":{"entryPoint":12686,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_bytes":{"entryPoint":12861,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":13233,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":13616,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_bytes_memory_ptr_t_uint32__to_t_address_t_bytes_memory_ptr_t_uint32__fromStack_reversed":{"entryPoint":13439,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13583,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":12905,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13373,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13420,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":13058,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":12996,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed":{"entryPoint":12440,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5bd20fa0eac50a6892371dae18efeb7d2b1c7a8479150f38626e21052ac8472c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13536,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"access_calldata_tail_t_bytes_calldata_ptr":{"entryPoint":13155,"id":null,"parameterSlots":2,"returnSlots":2},"access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr":{"entryPoint":13122,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":12952,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint8":{"entryPoint":13760,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":13283,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint8":{"entryPoint":13735,"id":null,"parameterSlots":2,"returnSlots":1},"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32":{"entryPoint":13497,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":12825,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint32":{"entryPoint":13302,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":12930,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":12418,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":13100,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":12202,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":12636,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:26257:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"113:93:181","statements":[{"nodeType":"YulAssignment","src":"123:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"135:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"146:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"131:3:181"},"nodeType":"YulFunctionCall","src":"131:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"123:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"165:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"180:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"188:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"176:3:181"},"nodeType":"YulFunctionCall","src":"176:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"158:6:181"},"nodeType":"YulFunctionCall","src":"158:42:181"},"nodeType":"YulExpressionStatement","src":"158:42:181"}]},"name":"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"82:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"93:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"104:4:181","type":""}],"src":"14:192:181"},{"body":{"nodeType":"YulBlock","src":"281:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"327:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"336:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"339:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"329:6:181"},"nodeType":"YulFunctionCall","src":"329:12:181"},"nodeType":"YulExpressionStatement","src":"329:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"302:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"311:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"298:3:181"},"nodeType":"YulFunctionCall","src":"298:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"323:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"294:3:181"},"nodeType":"YulFunctionCall","src":"294:32:181"},"nodeType":"YulIf","src":"291:52:181"},{"nodeType":"YulAssignment","src":"352:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"375:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"362:12:181"},"nodeType":"YulFunctionCall","src":"362:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"352:6:181"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"247:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"258:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"270:6:181","type":""}],"src":"211:180:181"},{"body":{"nodeType":"YulBlock","src":"497:76:181","statements":[{"nodeType":"YulAssignment","src":"507:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"519:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"530:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"515:3:181"},"nodeType":"YulFunctionCall","src":"515:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"507:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"549:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"560:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"542:6:181"},"nodeType":"YulFunctionCall","src":"542:25:181"},"nodeType":"YulExpressionStatement","src":"542:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"466:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"477:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"488:4:181","type":""}],"src":"396:177:181"},{"body":{"nodeType":"YulBlock","src":"610:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"627:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"634:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"639:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"630:3:181"},"nodeType":"YulFunctionCall","src":"630:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"620:6:181"},"nodeType":"YulFunctionCall","src":"620:31:181"},"nodeType":"YulExpressionStatement","src":"620:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"667:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"670:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"660:6:181"},"nodeType":"YulFunctionCall","src":"660:15:181"},"nodeType":"YulExpressionStatement","src":"660:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"691:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"694:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"684:6:181"},"nodeType":"YulFunctionCall","src":"684:15:181"},"nodeType":"YulExpressionStatement","src":"684:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"578:127:181"},{"body":{"nodeType":"YulBlock","src":"762:666:181","statements":[{"body":{"nodeType":"YulBlock","src":"811:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"820:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"823:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"813:6:181"},"nodeType":"YulFunctionCall","src":"813:12:181"},"nodeType":"YulExpressionStatement","src":"813:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"790:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"798:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"786:3:181"},"nodeType":"YulFunctionCall","src":"786:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"805:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"782:3:181"},"nodeType":"YulFunctionCall","src":"782:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"775:6:181"},"nodeType":"YulFunctionCall","src":"775:35:181"},"nodeType":"YulIf","src":"772:55:181"},{"nodeType":"YulVariableDeclaration","src":"836:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"859:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"846:12:181"},"nodeType":"YulFunctionCall","src":"846:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"840:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"875:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"885:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"879:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"926:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"928:16:181"},"nodeType":"YulFunctionCall","src":"928:18:181"},"nodeType":"YulExpressionStatement","src":"928:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"918:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"922:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"915:2:181"},"nodeType":"YulFunctionCall","src":"915:10:181"},"nodeType":"YulIf","src":"912:36:181"},{"nodeType":"YulVariableDeclaration","src":"957:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"971:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"967:3:181"},"nodeType":"YulFunctionCall","src":"967:7:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"961:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"983:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1003:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"997:5:181"},"nodeType":"YulFunctionCall","src":"997:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"987:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1015:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1037:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1061:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1065:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1057:3:181"},"nodeType":"YulFunctionCall","src":"1057:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1072:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1053:3:181"},"nodeType":"YulFunctionCall","src":"1053:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"1077:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1049:3:181"},"nodeType":"YulFunctionCall","src":"1049:31:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1082:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1045:3:181"},"nodeType":"YulFunctionCall","src":"1045:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1033:3:181"},"nodeType":"YulFunctionCall","src":"1033:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1019:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1145:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1147:16:181"},"nodeType":"YulFunctionCall","src":"1147:18:181"},"nodeType":"YulExpressionStatement","src":"1147:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1104:10:181"},{"name":"_2","nodeType":"YulIdentifier","src":"1116:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1101:2:181"},"nodeType":"YulFunctionCall","src":"1101:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1124:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1136:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1121:2:181"},"nodeType":"YulFunctionCall","src":"1121:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1098:2:181"},"nodeType":"YulFunctionCall","src":"1098:46:181"},"nodeType":"YulIf","src":"1095:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1183:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1187:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1176:6:181"},"nodeType":"YulFunctionCall","src":"1176:22:181"},"nodeType":"YulExpressionStatement","src":"1176:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1214:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1222:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1207:6:181"},"nodeType":"YulFunctionCall","src":"1207:18:181"},"nodeType":"YulExpressionStatement","src":"1207:18:181"},{"body":{"nodeType":"YulBlock","src":"1273:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1282:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1285:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1275:6:181"},"nodeType":"YulFunctionCall","src":"1275:12:181"},"nodeType":"YulExpressionStatement","src":"1275:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1248:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1256:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1244:3:181"},"nodeType":"YulFunctionCall","src":"1244:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1261:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1240:3:181"},"nodeType":"YulFunctionCall","src":"1240:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"1268:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1237:2:181"},"nodeType":"YulFunctionCall","src":"1237:35:181"},"nodeType":"YulIf","src":"1234:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1315:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1323:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1311:3:181"},"nodeType":"YulFunctionCall","src":"1311:17:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1334:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1342:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1330:3:181"},"nodeType":"YulFunctionCall","src":"1330:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1349:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1298:12:181"},"nodeType":"YulFunctionCall","src":"1298:54:181"},"nodeType":"YulExpressionStatement","src":"1298:54:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1376:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1384:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1372:3:181"},"nodeType":"YulFunctionCall","src":"1372:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1389:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1368:3:181"},"nodeType":"YulFunctionCall","src":"1368:26:181"},{"kind":"number","nodeType":"YulLiteral","src":"1396:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1361:6:181"},"nodeType":"YulFunctionCall","src":"1361:37:181"},"nodeType":"YulExpressionStatement","src":"1361:37:181"},{"nodeType":"YulAssignment","src":"1407:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1416:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1407:5:181"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"736:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"744:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"752:5:181","type":""}],"src":"710:718:181"},{"body":{"nodeType":"YulBlock","src":"1512:241:181","statements":[{"body":{"nodeType":"YulBlock","src":"1558:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1567:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1570:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1560:6:181"},"nodeType":"YulFunctionCall","src":"1560:12:181"},"nodeType":"YulExpressionStatement","src":"1560:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1533:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1542:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1529:3:181"},"nodeType":"YulFunctionCall","src":"1529:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1554:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1525:3:181"},"nodeType":"YulFunctionCall","src":"1525:32:181"},"nodeType":"YulIf","src":"1522:52:181"},{"nodeType":"YulVariableDeclaration","src":"1583:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1610:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1597:12:181"},"nodeType":"YulFunctionCall","src":"1597:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1587:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1663:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1672:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1675:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1665:6:181"},"nodeType":"YulFunctionCall","src":"1665:12:181"},"nodeType":"YulExpressionStatement","src":"1665:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1635:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1643:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1632:2:181"},"nodeType":"YulFunctionCall","src":"1632:30:181"},"nodeType":"YulIf","src":"1629:50:181"},{"nodeType":"YulAssignment","src":"1688:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1719:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1730:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1715:3:181"},"nodeType":"YulFunctionCall","src":"1715:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1739:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"1698:16:181"},"nodeType":"YulFunctionCall","src":"1698:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1688:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1478:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1489:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1501:6:181","type":""}],"src":"1433:320:181"},{"body":{"nodeType":"YulBlock","src":"1828:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"1874:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1883:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1886:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1876:6:181"},"nodeType":"YulFunctionCall","src":"1876:12:181"},"nodeType":"YulExpressionStatement","src":"1876:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1849:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1858:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1845:3:181"},"nodeType":"YulFunctionCall","src":"1845:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1870:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1841:3:181"},"nodeType":"YulFunctionCall","src":"1841:32:181"},"nodeType":"YulIf","src":"1838:52:181"},{"nodeType":"YulAssignment","src":"1899:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1922:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1909:12:181"},"nodeType":"YulFunctionCall","src":"1909:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1899:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1794:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1805:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1817:6:181","type":""}],"src":"1758:180:181"},{"body":{"nodeType":"YulBlock","src":"1975:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1992:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1999:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2004:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1995:3:181"},"nodeType":"YulFunctionCall","src":"1995:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1985:6:181"},"nodeType":"YulFunctionCall","src":"1985:31:181"},"nodeType":"YulExpressionStatement","src":"1985:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2032:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2035:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2025:6:181"},"nodeType":"YulFunctionCall","src":"2025:15:181"},"nodeType":"YulExpressionStatement","src":"2025:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2056:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2059:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2049:6:181"},"nodeType":"YulFunctionCall","src":"2049:15:181"},"nodeType":"YulExpressionStatement","src":"2049:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"1943:127:181"},{"body":{"nodeType":"YulBlock","src":"2193:229:181","statements":[{"nodeType":"YulAssignment","src":"2203:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2215:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2226:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2211:3:181"},"nodeType":"YulFunctionCall","src":"2211:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2203:4:181"}]},{"body":{"nodeType":"YulBlock","src":"2271:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2292:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2299:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2304:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2295:3:181"},"nodeType":"YulFunctionCall","src":"2295:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2285:6:181"},"nodeType":"YulFunctionCall","src":"2285:31:181"},"nodeType":"YulExpressionStatement","src":"2285:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2336:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2339:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2329:6:181"},"nodeType":"YulFunctionCall","src":"2329:15:181"},"nodeType":"YulExpressionStatement","src":"2329:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2364:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2367:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2357:6:181"},"nodeType":"YulFunctionCall","src":"2357:15:181"},"nodeType":"YulExpressionStatement","src":"2357:15:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2251:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2259:1:181","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2248:2:181"},"nodeType":"YulFunctionCall","src":"2248:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2241:6:181"},"nodeType":"YulFunctionCall","src":"2241:21:181"},"nodeType":"YulIf","src":"2238:144:181"},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2398:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"2409:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2391:6:181"},"nodeType":"YulFunctionCall","src":"2391:25:181"},"nodeType":"YulExpressionStatement","src":"2391:25:181"}]},"name":"abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2162:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2173:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2184:4:181","type":""}],"src":"2075:347:181"},{"body":{"nodeType":"YulBlock","src":"2522:92:181","statements":[{"nodeType":"YulAssignment","src":"2532:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2544:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2555:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2540:3:181"},"nodeType":"YulFunctionCall","src":"2540:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2532:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2574:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2599:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2592:6:181"},"nodeType":"YulFunctionCall","src":"2592:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2585:6:181"},"nodeType":"YulFunctionCall","src":"2585:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2567:6:181"},"nodeType":"YulFunctionCall","src":"2567:41:181"},"nodeType":"YulExpressionStatement","src":"2567:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2491:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2502:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2513:4:181","type":""}],"src":"2427:187:181"},{"body":{"nodeType":"YulBlock","src":"2827:724:181","statements":[{"body":{"nodeType":"YulBlock","src":"2875:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2884:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2887:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2877:6:181"},"nodeType":"YulFunctionCall","src":"2877:12:181"},"nodeType":"YulExpressionStatement","src":"2877:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2848:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2857:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2844:3:181"},"nodeType":"YulFunctionCall","src":"2844:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2869:4:181","type":"","value":"1120"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2840:3:181"},"nodeType":"YulFunctionCall","src":"2840:34:181"},"nodeType":"YulIf","src":"2837:54:181"},{"nodeType":"YulVariableDeclaration","src":"2900:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2927:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2914:12:181"},"nodeType":"YulFunctionCall","src":"2914:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2904:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2946:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2956:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2950:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3001:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3010:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3013:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3003:6:181"},"nodeType":"YulFunctionCall","src":"3003:12:181"},"nodeType":"YulExpressionStatement","src":"3003:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2989:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2997:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2986:2:181"},"nodeType":"YulFunctionCall","src":"2986:14:181"},"nodeType":"YulIf","src":"2983:34:181"},{"nodeType":"YulVariableDeclaration","src":"3026:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3040:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"3051:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3036:3:181"},"nodeType":"YulFunctionCall","src":"3036:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"3030:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3106:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3115:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3118:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3108:6:181"},"nodeType":"YulFunctionCall","src":"3108:12:181"},"nodeType":"YulExpressionStatement","src":"3108:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3085:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3089:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3081:3:181"},"nodeType":"YulFunctionCall","src":"3081:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3096:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3077:3:181"},"nodeType":"YulFunctionCall","src":"3077:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3070:6:181"},"nodeType":"YulFunctionCall","src":"3070:35:181"},"nodeType":"YulIf","src":"3067:55:181"},{"nodeType":"YulVariableDeclaration","src":"3131:30:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3158:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3145:12:181"},"nodeType":"YulFunctionCall","src":"3145:16:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3135:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3188:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3197:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3200:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3190:6:181"},"nodeType":"YulFunctionCall","src":"3190:12:181"},"nodeType":"YulExpressionStatement","src":"3190:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3176:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3184:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3173:2:181"},"nodeType":"YulFunctionCall","src":"3173:14:181"},"nodeType":"YulIf","src":"3170:34:181"},{"body":{"nodeType":"YulBlock","src":"3264:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3273:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3276:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3266:6:181"},"nodeType":"YulFunctionCall","src":"3266:12:181"},"nodeType":"YulExpressionStatement","src":"3266:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3227:2:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3235:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"3238:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3231:3:181"},"nodeType":"YulFunctionCall","src":"3231:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3223:3:181"},"nodeType":"YulFunctionCall","src":"3223:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3248:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3219:3:181"},"nodeType":"YulFunctionCall","src":"3219:34:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3255:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3216:2:181"},"nodeType":"YulFunctionCall","src":"3216:47:181"},"nodeType":"YulIf","src":"3213:67:181"},{"nodeType":"YulAssignment","src":"3289:23:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3303:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3307:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3299:3:181"},"nodeType":"YulFunctionCall","src":"3299:13:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3289:6:181"}]},{"nodeType":"YulAssignment","src":"3321:16:181","value":{"name":"length","nodeType":"YulIdentifier","src":"3331:6:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3321:6:181"}]},{"nodeType":"YulAssignment","src":"3346:44:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3373:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3384:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3369:3:181"},"nodeType":"YulFunctionCall","src":"3369:20:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3356:12:181"},"nodeType":"YulFunctionCall","src":"3356:34:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3346:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3399:30:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3413:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3424:4:181","type":"","value":"1088"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3409:3:181"},"nodeType":"YulFunctionCall","src":"3409:20:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"3403:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3457:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3466:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3469:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3459:6:181"},"nodeType":"YulFunctionCall","src":"3459:12:181"},"nodeType":"YulExpressionStatement","src":"3459:12:181"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3444:2:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3448:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3441:2:181"},"nodeType":"YulFunctionCall","src":"3441:15:181"},"nodeType":"YulIf","src":"3438:35:181"},{"nodeType":"YulAssignment","src":"3482:28:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3496:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3507:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3492:3:181"},"nodeType":"YulFunctionCall","src":"3492:18:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3482:6:181"}]},{"nodeType":"YulAssignment","src":"3519:26:181","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3542:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3529:12:181"},"nodeType":"YulFunctionCall","src":"3529:16:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3519:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2761:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2772:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2784:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2792:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2800:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2808:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2816:6:181","type":""}],"src":"2619:932:181"},{"body":{"nodeType":"YulBlock","src":"3601:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"3665:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3674:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3677:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3667:6:181"},"nodeType":"YulFunctionCall","src":"3667:12:181"},"nodeType":"YulExpressionStatement","src":"3667:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3624:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3635:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3650:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3655:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3646:3:181"},"nodeType":"YulFunctionCall","src":"3646:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3659:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3642:3:181"},"nodeType":"YulFunctionCall","src":"3642:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3631:3:181"},"nodeType":"YulFunctionCall","src":"3631:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3621:2:181"},"nodeType":"YulFunctionCall","src":"3621:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3614:6:181"},"nodeType":"YulFunctionCall","src":"3614:50:181"},"nodeType":"YulIf","src":"3611:70:181"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3590:5:181","type":""}],"src":"3556:131:181"},{"body":{"nodeType":"YulBlock","src":"3762:177:181","statements":[{"body":{"nodeType":"YulBlock","src":"3808:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3817:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3820:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3810:6:181"},"nodeType":"YulFunctionCall","src":"3810:12:181"},"nodeType":"YulExpressionStatement","src":"3810:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3783:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3792:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3779:3:181"},"nodeType":"YulFunctionCall","src":"3779:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3804:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3775:3:181"},"nodeType":"YulFunctionCall","src":"3775:32:181"},"nodeType":"YulIf","src":"3772:52:181"},{"nodeType":"YulVariableDeclaration","src":"3833:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3859:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3846:12:181"},"nodeType":"YulFunctionCall","src":"3846:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3837:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3903:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3878:24:181"},"nodeType":"YulFunctionCall","src":"3878:31:181"},"nodeType":"YulExpressionStatement","src":"3878:31:181"},{"nodeType":"YulAssignment","src":"3918:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"3928:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3918:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3728:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3739:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3751:6:181","type":""}],"src":"3692:247:181"},{"body":{"nodeType":"YulBlock","src":"4045:102:181","statements":[{"nodeType":"YulAssignment","src":"4055:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4067:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4078:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4063:3:181"},"nodeType":"YulFunctionCall","src":"4063:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4055:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4097:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4112:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4128:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4133:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4124:3:181"},"nodeType":"YulFunctionCall","src":"4124:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4137:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4120:3:181"},"nodeType":"YulFunctionCall","src":"4120:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4108:3:181"},"nodeType":"YulFunctionCall","src":"4108:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4090:6:181"},"nodeType":"YulFunctionCall","src":"4090:51:181"},"nodeType":"YulExpressionStatement","src":"4090:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4014:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4025:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4036:4:181","type":""}],"src":"3944:203:181"},{"body":{"nodeType":"YulBlock","src":"4253:76:181","statements":[{"nodeType":"YulAssignment","src":"4263:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4275:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4286:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4271:3:181"},"nodeType":"YulFunctionCall","src":"4271:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4263:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4305:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"4316:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4298:6:181"},"nodeType":"YulFunctionCall","src":"4298:25:181"},"nodeType":"YulExpressionStatement","src":"4298:25:181"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4222:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4233:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4244:4:181","type":""}],"src":"4152:177:181"},{"body":{"nodeType":"YulBlock","src":"4452:102:181","statements":[{"nodeType":"YulAssignment","src":"4462:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4474:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4485:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4470:3:181"},"nodeType":"YulFunctionCall","src":"4470:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4462:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4504:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4519:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4535:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4540:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4531:3:181"},"nodeType":"YulFunctionCall","src":"4531:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4544:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4527:3:181"},"nodeType":"YulFunctionCall","src":"4527:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4515:3:181"},"nodeType":"YulFunctionCall","src":"4515:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4497:6:181"},"nodeType":"YulFunctionCall","src":"4497:51:181"},"nodeType":"YulExpressionStatement","src":"4497:51:181"}]},"name":"abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4421:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4432:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4443:4:181","type":""}],"src":"4334:220:181"},{"body":{"nodeType":"YulBlock","src":"4687:102:181","statements":[{"nodeType":"YulAssignment","src":"4697:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4709:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4720:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4705:3:181"},"nodeType":"YulFunctionCall","src":"4705:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4697:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4739:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4754:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4770:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4775:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4766:3:181"},"nodeType":"YulFunctionCall","src":"4766:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4779:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4762:3:181"},"nodeType":"YulFunctionCall","src":"4762:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4750:3:181"},"nodeType":"YulFunctionCall","src":"4750:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4732:6:181"},"nodeType":"YulFunctionCall","src":"4732:51:181"},"nodeType":"YulExpressionStatement","src":"4732:51:181"}]},"name":"abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4656:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4667:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4678:4:181","type":""}],"src":"4559:230:181"},{"body":{"nodeType":"YulBlock","src":"4919:102:181","statements":[{"nodeType":"YulAssignment","src":"4929:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4941:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4952:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4937:3:181"},"nodeType":"YulFunctionCall","src":"4937:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4929:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4971:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4986:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5002:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5007:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4998:3:181"},"nodeType":"YulFunctionCall","src":"4998:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5011:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4994:3:181"},"nodeType":"YulFunctionCall","src":"4994:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4982:3:181"},"nodeType":"YulFunctionCall","src":"4982:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4964:6:181"},"nodeType":"YulFunctionCall","src":"4964:51:181"},"nodeType":"YulExpressionStatement","src":"4964:51:181"}]},"name":"abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4888:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4899:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4910:4:181","type":""}],"src":"4794:227:181"},{"body":{"nodeType":"YulBlock","src":"5074:115:181","statements":[{"nodeType":"YulAssignment","src":"5084:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5106:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5093:12:181"},"nodeType":"YulFunctionCall","src":"5093:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"5084:5:181"}]},{"body":{"nodeType":"YulBlock","src":"5167:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5176:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5179:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5169:6:181"},"nodeType":"YulFunctionCall","src":"5169:12:181"},"nodeType":"YulExpressionStatement","src":"5169:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5135:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5146:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5153:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5142:3:181"},"nodeType":"YulFunctionCall","src":"5142:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5132:2:181"},"nodeType":"YulFunctionCall","src":"5132:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5125:6:181"},"nodeType":"YulFunctionCall","src":"5125:41:181"},"nodeType":"YulIf","src":"5122:61:181"}]},"name":"abi_decode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"5053:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"5064:5:181","type":""}],"src":"5026:163:181"},{"body":{"nodeType":"YulBlock","src":"5263:115:181","statements":[{"body":{"nodeType":"YulBlock","src":"5309:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5318:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5321:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5311:6:181"},"nodeType":"YulFunctionCall","src":"5311:12:181"},"nodeType":"YulExpressionStatement","src":"5311:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5284:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5293:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5280:3:181"},"nodeType":"YulFunctionCall","src":"5280:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5305:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5276:3:181"},"nodeType":"YulFunctionCall","src":"5276:32:181"},"nodeType":"YulIf","src":"5273:52:181"},{"nodeType":"YulAssignment","src":"5334:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5362:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"5344:17:181"},"nodeType":"YulFunctionCall","src":"5344:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5334:6:181"}]}]},"name":"abi_decode_tuple_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5229:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5240:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5252:6:181","type":""}],"src":"5194:184:181"},{"body":{"nodeType":"YulBlock","src":"5495:348:181","statements":[{"body":{"nodeType":"YulBlock","src":"5541:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5550:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5553:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5543:6:181"},"nodeType":"YulFunctionCall","src":"5543:12:181"},"nodeType":"YulExpressionStatement","src":"5543:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5516:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5525:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5512:3:181"},"nodeType":"YulFunctionCall","src":"5512:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5537:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5508:3:181"},"nodeType":"YulFunctionCall","src":"5508:32:181"},"nodeType":"YulIf","src":"5505:52:181"},{"nodeType":"YulAssignment","src":"5566:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5594:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"5576:17:181"},"nodeType":"YulFunctionCall","src":"5576:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5566:6:181"}]},{"nodeType":"YulAssignment","src":"5613:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5640:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5651:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5636:3:181"},"nodeType":"YulFunctionCall","src":"5636:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5623:12:181"},"nodeType":"YulFunctionCall","src":"5623:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5613:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"5664:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5695:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5706:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5691:3:181"},"nodeType":"YulFunctionCall","src":"5691:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5678:12:181"},"nodeType":"YulFunctionCall","src":"5678:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"5668:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5753:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5762:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5765:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5755:6:181"},"nodeType":"YulFunctionCall","src":"5755:12:181"},"nodeType":"YulExpressionStatement","src":"5755:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5725:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5733:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5722:2:181"},"nodeType":"YulFunctionCall","src":"5722:30:181"},"nodeType":"YulIf","src":"5719:50:181"},{"nodeType":"YulAssignment","src":"5778:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5809:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"5820:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5805:3:181"},"nodeType":"YulFunctionCall","src":"5805:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5829:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"5788:16:181"},"nodeType":"YulFunctionCall","src":"5788:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5778:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5445:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5456:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5468:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5476:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5484:6:181","type":""}],"src":"5383:460:181"},{"body":{"nodeType":"YulBlock","src":"5914:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"5924:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"5933:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"5928:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5993:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6018:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"6023:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6014:3:181"},"nodeType":"YulFunctionCall","src":"6014:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"6037:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"6042:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6033:3:181"},"nodeType":"YulFunctionCall","src":"6033:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6027:5:181"},"nodeType":"YulFunctionCall","src":"6027:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6007:6:181"},"nodeType":"YulFunctionCall","src":"6007:39:181"},"nodeType":"YulExpressionStatement","src":"6007:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5954:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"5957:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5951:2:181"},"nodeType":"YulFunctionCall","src":"5951:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5965:19:181","statements":[{"nodeType":"YulAssignment","src":"5967:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5976:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"5979:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5972:3:181"},"nodeType":"YulFunctionCall","src":"5972:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"5967:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"5947:3:181","statements":[]},"src":"5943:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6076:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"6081:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6072:3:181"},"nodeType":"YulFunctionCall","src":"6072:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"6090:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6065:6:181"},"nodeType":"YulFunctionCall","src":"6065:27:181"},"nodeType":"YulExpressionStatement","src":"6065:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"5892:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"5897:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"5902:6:181","type":""}],"src":"5848:250:181"},{"body":{"nodeType":"YulBlock","src":"6152:221:181","statements":[{"nodeType":"YulVariableDeclaration","src":"6162:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6182:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6176:5:181"},"nodeType":"YulFunctionCall","src":"6176:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"6166:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6204:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"6209:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6197:6:181"},"nodeType":"YulFunctionCall","src":"6197:19:181"},"nodeType":"YulExpressionStatement","src":"6197:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6264:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"6271:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6260:3:181"},"nodeType":"YulFunctionCall","src":"6260:16:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6282:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"6287:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6278:3:181"},"nodeType":"YulFunctionCall","src":"6278:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"6294:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"6225:34:181"},"nodeType":"YulFunctionCall","src":"6225:76:181"},"nodeType":"YulExpressionStatement","src":"6225:76:181"},{"nodeType":"YulAssignment","src":"6310:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6325:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6338:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6346:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6334:3:181"},"nodeType":"YulFunctionCall","src":"6334:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6355:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6351:3:181"},"nodeType":"YulFunctionCall","src":"6351:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6330:3:181"},"nodeType":"YulFunctionCall","src":"6330:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6321:3:181"},"nodeType":"YulFunctionCall","src":"6321:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"6362:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6317:3:181"},"nodeType":"YulFunctionCall","src":"6317:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"6310:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"6129:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"6136:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"6144:3:181","type":""}],"src":"6103:270:181"},{"body":{"nodeType":"YulBlock","src":"6525:141:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6542:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"6553:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6535:6:181"},"nodeType":"YulFunctionCall","src":"6535:25:181"},"nodeType":"YulExpressionStatement","src":"6535:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6580:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6591:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6576:3:181"},"nodeType":"YulFunctionCall","src":"6576:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6596:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6569:6:181"},"nodeType":"YulFunctionCall","src":"6569:30:181"},"nodeType":"YulExpressionStatement","src":"6569:30:181"},{"nodeType":"YulAssignment","src":"6608:52:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6633:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6645:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6656:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6641:3:181"},"nodeType":"YulFunctionCall","src":"6641:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"6616:16:181"},"nodeType":"YulFunctionCall","src":"6616:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6608:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6486:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6497:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6505:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6516:4:181","type":""}],"src":"6378:288:181"},{"body":{"nodeType":"YulBlock","src":"6845:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6862:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6873:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6855:6:181"},"nodeType":"YulFunctionCall","src":"6855:21:181"},"nodeType":"YulExpressionStatement","src":"6855:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6896:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6907:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6892:3:181"},"nodeType":"YulFunctionCall","src":"6892:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6912:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6885:6:181"},"nodeType":"YulFunctionCall","src":"6885:30:181"},"nodeType":"YulExpressionStatement","src":"6885:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6935:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6946:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6931:3:181"},"nodeType":"YulFunctionCall","src":"6931:18:181"},{"hexValue":"2164656c6179426c6f636b73","kind":"string","nodeType":"YulLiteral","src":"6951:14:181","type":"","value":"!delayBlocks"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6924:6:181"},"nodeType":"YulFunctionCall","src":"6924:42:181"},"nodeType":"YulExpressionStatement","src":"6924:42:181"},{"nodeType":"YulAssignment","src":"6975:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6987:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6998:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6983:3:181"},"nodeType":"YulFunctionCall","src":"6983:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6975:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6822:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6836:4:181","type":""}],"src":"6671:336:181"},{"body":{"nodeType":"YulBlock","src":"7044:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7061:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7068:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"7073:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7064:3:181"},"nodeType":"YulFunctionCall","src":"7064:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7054:6:181"},"nodeType":"YulFunctionCall","src":"7054:31:181"},"nodeType":"YulExpressionStatement","src":"7054:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7101:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7104:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7094:6:181"},"nodeType":"YulFunctionCall","src":"7094:15:181"},"nodeType":"YulExpressionStatement","src":"7094:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7125:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7128:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7118:6:181"},"nodeType":"YulFunctionCall","src":"7118:15:181"},"nodeType":"YulExpressionStatement","src":"7118:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"7012:127:181"},{"body":{"nodeType":"YulBlock","src":"7192:77:181","statements":[{"nodeType":"YulAssignment","src":"7202:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7213:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"7216:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7209:3:181"},"nodeType":"YulFunctionCall","src":"7209:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"7202:3:181"}]},{"body":{"nodeType":"YulBlock","src":"7241:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7243:16:181"},"nodeType":"YulFunctionCall","src":"7243:18:181"},"nodeType":"YulExpressionStatement","src":"7243:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7233:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"7236:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7230:2:181"},"nodeType":"YulFunctionCall","src":"7230:10:181"},"nodeType":"YulIf","src":"7227:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"7175:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"7178:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"7184:3:181","type":""}],"src":"7144:125:181"},{"body":{"nodeType":"YulBlock","src":"7355:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"7401:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7410:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7413:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7403:6:181"},"nodeType":"YulFunctionCall","src":"7403:12:181"},"nodeType":"YulExpressionStatement","src":"7403:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7376:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7385:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7372:3:181"},"nodeType":"YulFunctionCall","src":"7372:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7397:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7368:3:181"},"nodeType":"YulFunctionCall","src":"7368:32:181"},"nodeType":"YulIf","src":"7365:52:181"},{"nodeType":"YulAssignment","src":"7426:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7442:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7436:5:181"},"nodeType":"YulFunctionCall","src":"7436:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7426:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7321:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7332:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7344:6:181","type":""}],"src":"7274:184:181"},{"body":{"nodeType":"YulBlock","src":"7637:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7654:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7665:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7647:6:181"},"nodeType":"YulFunctionCall","src":"7647:21:181"},"nodeType":"YulExpressionStatement","src":"7647:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7688:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7699:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7684:3:181"},"nodeType":"YulFunctionCall","src":"7684:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7704:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7677:6:181"},"nodeType":"YulFunctionCall","src":"7677:30:181"},"nodeType":"YulExpressionStatement","src":"7677:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7727:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7738:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7723:3:181"},"nodeType":"YulFunctionCall","src":"7723:18:181"},{"hexValue":"726f6f7420616c72656164792073656e74","kind":"string","nodeType":"YulLiteral","src":"7743:19:181","type":"","value":"root already sent"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7716:6:181"},"nodeType":"YulFunctionCall","src":"7716:47:181"},"nodeType":"YulExpressionStatement","src":"7716:47:181"},{"nodeType":"YulAssignment","src":"7772:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7784:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7795:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7780:3:181"},"nodeType":"YulFunctionCall","src":"7780:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7772:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7614:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7628:4:181","type":""}],"src":"7463:341:181"},{"body":{"nodeType":"YulBlock","src":"7928:63:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7945:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"7950:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7938:6:181"},"nodeType":"YulFunctionCall","src":"7938:19:181"},"nodeType":"YulExpressionStatement","src":"7938:19:181"},{"nodeType":"YulAssignment","src":"7966:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7977:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"7982:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7973:3:181"},"nodeType":"YulFunctionCall","src":"7973:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"7966:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"7904:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7909:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"7920:3:181","type":""}],"src":"7809:182:181"},{"body":{"nodeType":"YulBlock","src":"8189:281:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8206:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8217:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8199:6:181"},"nodeType":"YulFunctionCall","src":"8199:21:181"},"nodeType":"YulExpressionStatement","src":"8199:21:181"},{"nodeType":"YulVariableDeclaration","src":"8229:58:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8260:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8272:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8283:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8268:3:181"},"nodeType":"YulFunctionCall","src":"8268:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"8243:16:181"},"nodeType":"YulFunctionCall","src":"8243:44:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"8233:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8307:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8318:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8303:3:181"},"nodeType":"YulFunctionCall","src":"8303:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"8327:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8335:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8323:3:181"},"nodeType":"YulFunctionCall","src":"8323:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8296:6:181"},"nodeType":"YulFunctionCall","src":"8296:50:181"},"nodeType":"YulExpressionStatement","src":"8296:50:181"},{"nodeType":"YulAssignment","src":"8355:40:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"8380:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"8388:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"8363:16:181"},"nodeType":"YulFunctionCall","src":"8363:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8355:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8415:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8426:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8411:3:181"},"nodeType":"YulFunctionCall","src":"8411:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"8435:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8451:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"8456:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8447:3:181"},"nodeType":"YulFunctionCall","src":"8447:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"8460:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8443:3:181"},"nodeType":"YulFunctionCall","src":"8443:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8431:3:181"},"nodeType":"YulFunctionCall","src":"8431:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8404:6:181"},"nodeType":"YulFunctionCall","src":"8404:60:181"},"nodeType":"YulExpressionStatement","src":"8404:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8142:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8153:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8161:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8169:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8180:4:181","type":""}],"src":"7996:474:181"},{"body":{"nodeType":"YulBlock","src":"8649:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8666:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8677:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8659:6:181"},"nodeType":"YulFunctionCall","src":"8659:21:181"},"nodeType":"YulExpressionStatement","src":"8659:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8700:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8711:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8696:3:181"},"nodeType":"YulFunctionCall","src":"8696:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8716:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8689:6:181"},"nodeType":"YulFunctionCall","src":"8689:29:181"},"nodeType":"YulExpressionStatement","src":"8689:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8738:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8749:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8734:3:181"},"nodeType":"YulFunctionCall","src":"8734:18:181"},{"hexValue":"21414d42","kind":"string","nodeType":"YulLiteral","src":"8754:6:181","type":"","value":"!AMB"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8727:6:181"},"nodeType":"YulFunctionCall","src":"8727:34:181"},"nodeType":"YulExpressionStatement","src":"8727:34:181"},{"nodeType":"YulAssignment","src":"8770:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8782:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8793:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8778:3:181"},"nodeType":"YulFunctionCall","src":"8778:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8770:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8626:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8640:4:181","type":""}],"src":"8475:327:181"},{"body":{"nodeType":"YulBlock","src":"8954:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8971:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8982:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8964:6:181"},"nodeType":"YulFunctionCall","src":"8964:21:181"},"nodeType":"YulExpressionStatement","src":"8964:21:181"},{"nodeType":"YulAssignment","src":"8994:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9019:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9031:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9042:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9027:3:181"},"nodeType":"YulFunctionCall","src":"9027:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"9002:16:181"},"nodeType":"YulFunctionCall","src":"9002:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8994:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9066:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9077:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9062:3:181"},"nodeType":"YulFunctionCall","src":"9062:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9086:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9102:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"9107:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9098:3:181"},"nodeType":"YulFunctionCall","src":"9098:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"9111:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9094:3:181"},"nodeType":"YulFunctionCall","src":"9094:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9082:3:181"},"nodeType":"YulFunctionCall","src":"9082:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9055:6:181"},"nodeType":"YulFunctionCall","src":"9055:60:181"},"nodeType":"YulExpressionStatement","src":"9055:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8915:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8926:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8934:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8945:4:181","type":""}],"src":"8807:314:181"},{"body":{"nodeType":"YulBlock","src":"9300:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9317:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9328:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9310:6:181"},"nodeType":"YulFunctionCall","src":"9310:21:181"},"nodeType":"YulExpressionStatement","src":"9310:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9351:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9362:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9347:3:181"},"nodeType":"YulFunctionCall","src":"9347:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9367:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9340:6:181"},"nodeType":"YulFunctionCall","src":"9340:29:181"},"nodeType":"YulExpressionStatement","src":"9340:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9389:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9400:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9385:3:181"},"nodeType":"YulFunctionCall","src":"9385:18:181"},{"hexValue":"2170726f6f6673","kind":"string","nodeType":"YulLiteral","src":"9405:9:181","type":"","value":"!proofs"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9378:6:181"},"nodeType":"YulFunctionCall","src":"9378:37:181"},"nodeType":"YulExpressionStatement","src":"9378:37:181"},{"nodeType":"YulAssignment","src":"9424:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9436:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9447:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9432:3:181"},"nodeType":"YulFunctionCall","src":"9432:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9424:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9277:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9291:4:181","type":""}],"src":"9126:330:181"},{"body":{"nodeType":"YulBlock","src":"9493:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9510:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9517:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"9522:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9513:3:181"},"nodeType":"YulFunctionCall","src":"9513:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9503:6:181"},"nodeType":"YulFunctionCall","src":"9503:31:181"},"nodeType":"YulExpressionStatement","src":"9503:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9550:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"9553:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9543:6:181"},"nodeType":"YulFunctionCall","src":"9543:15:181"},"nodeType":"YulExpressionStatement","src":"9543:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9574:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9577:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9567:6:181"},"nodeType":"YulFunctionCall","src":"9567:15:181"},"nodeType":"YulExpressionStatement","src":"9567:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"9461:127:181"},{"body":{"nodeType":"YulBlock","src":"9694:224:181","statements":[{"nodeType":"YulVariableDeclaration","src":"9704:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"9743:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9730:12:181"},"nodeType":"YulFunctionCall","src":"9730:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"9708:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9846:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9855:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9858:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9848:6:181"},"nodeType":"YulFunctionCall","src":"9848:12:181"},"nodeType":"YulExpressionStatement","src":"9848:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"9778:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"9806:12:181"},"nodeType":"YulFunctionCall","src":"9806:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"9822:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9802:3:181"},"nodeType":"YulFunctionCall","src":"9802:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9837:4:181","type":"","value":"1086"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"9833:3:181"},"nodeType":"YulFunctionCall","src":"9833:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9798:3:181"},"nodeType":"YulFunctionCall","src":"9798:45:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9774:3:181"},"nodeType":"YulFunctionCall","src":"9774:70:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9767:6:181"},"nodeType":"YulFunctionCall","src":"9767:78:181"},"nodeType":"YulIf","src":"9764:98:181"},{"nodeType":"YulAssignment","src":"9871:41:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"9883:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"9893:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9879:3:181"},"nodeType":"YulFunctionCall","src":"9879:33:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"9871:4:181"}]}]},"name":"access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"9659:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"9669:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"9685:4:181","type":""}],"src":"9593:325:181"},{"body":{"nodeType":"YulBlock","src":"10017:427:181","statements":[{"nodeType":"YulVariableDeclaration","src":"10027:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"10066:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10053:12:181"},"nodeType":"YulFunctionCall","src":"10053:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"10031:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10167:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10176:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10179:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10169:6:181"},"nodeType":"YulFunctionCall","src":"10169:12:181"},"nodeType":"YulExpressionStatement","src":"10169:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10101:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"10129:12:181"},"nodeType":"YulFunctionCall","src":"10129:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"10145:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10125:3:181"},"nodeType":"YulFunctionCall","src":"10125:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10160:2:181","type":"","value":"30"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10156:3:181"},"nodeType":"YulFunctionCall","src":"10156:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10121:3:181"},"nodeType":"YulFunctionCall","src":"10121:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10097:3:181"},"nodeType":"YulFunctionCall","src":"10097:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10090:6:181"},"nodeType":"YulFunctionCall","src":"10090:76:181"},"nodeType":"YulIf","src":"10087:96:181"},{"nodeType":"YulVariableDeclaration","src":"10192:47:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"10210:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10220:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10206:3:181"},"nodeType":"YulFunctionCall","src":"10206:33:181"},"variables":[{"name":"addr_1","nodeType":"YulTypedName","src":"10196:6:181","type":""}]},{"nodeType":"YulAssignment","src":"10248:30:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"10271:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10258:12:181"},"nodeType":"YulFunctionCall","src":"10258:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"10248:6:181"}]},{"body":{"nodeType":"YulBlock","src":"10321:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10330:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10333:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10323:6:181"},"nodeType":"YulFunctionCall","src":"10323:12:181"},"nodeType":"YulExpressionStatement","src":"10323:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"10293:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10301:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10290:2:181"},"nodeType":"YulFunctionCall","src":"10290:30:181"},"nodeType":"YulIf","src":"10287:50:181"},{"nodeType":"YulAssignment","src":"10346:25:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"10358:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10366:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10354:3:181"},"nodeType":"YulFunctionCall","src":"10354:17:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"10346:4:181"}]},{"body":{"nodeType":"YulBlock","src":"10422:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10431:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10434:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10424:6:181"},"nodeType":"YulFunctionCall","src":"10424:12:181"},"nodeType":"YulExpressionStatement","src":"10424:12:181"}]},"condition":{"arguments":[{"name":"addr","nodeType":"YulIdentifier","src":"10387:4:181"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"10397:12:181"},"nodeType":"YulFunctionCall","src":"10397:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"10413:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10393:3:181"},"nodeType":"YulFunctionCall","src":"10393:27:181"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"10383:3:181"},"nodeType":"YulFunctionCall","src":"10383:38:181"},"nodeType":"YulIf","src":"10380:58:181"}]},"name":"access_calldata_tail_t_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"9974:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"9984:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"10000:4:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"10006:6:181","type":""}],"src":"9923:521:181"},{"body":{"nodeType":"YulBlock","src":"10596:124:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10619:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"10624:6:181"},{"name":"value1","nodeType":"YulIdentifier","src":"10632:6:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"10606:12:181"},"nodeType":"YulFunctionCall","src":"10606:33:181"},"nodeType":"YulExpressionStatement","src":"10606:33:181"},{"nodeType":"YulVariableDeclaration","src":"10648:26:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10662:3:181"},{"name":"value1","nodeType":"YulIdentifier","src":"10667:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10658:3:181"},"nodeType":"YulFunctionCall","src":"10658:16:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10652:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"10690:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"10694:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10683:6:181"},"nodeType":"YulFunctionCall","src":"10683:13:181"},"nodeType":"YulExpressionStatement","src":"10683:13:181"},{"nodeType":"YulAssignment","src":"10705:9:181","value":{"name":"_1","nodeType":"YulIdentifier","src":"10712:2:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"10705:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"10564:3:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10569:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10577:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10588:3:181","type":""}],"src":"10449:271:181"},{"body":{"nodeType":"YulBlock","src":"10899:161:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10916:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10927:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10909:6:181"},"nodeType":"YulFunctionCall","src":"10909:21:181"},"nodeType":"YulExpressionStatement","src":"10909:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10950:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10961:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10946:3:181"},"nodeType":"YulFunctionCall","src":"10946:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10966:2:181","type":"","value":"11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10939:6:181"},"nodeType":"YulFunctionCall","src":"10939:30:181"},"nodeType":"YulExpressionStatement","src":"10939:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10989:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11000:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10985:3:181"},"nodeType":"YulFunctionCall","src":"10985:18:181"},{"hexValue":"21736861726564526f6f74","kind":"string","nodeType":"YulLiteral","src":"11005:13:181","type":"","value":"!sharedRoot"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10978:6:181"},"nodeType":"YulFunctionCall","src":"10978:41:181"},"nodeType":"YulExpressionStatement","src":"10978:41:181"},{"nodeType":"YulAssignment","src":"11028:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11040:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11051:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11036:3:181"},"nodeType":"YulFunctionCall","src":"11036:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11028:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10876:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10890:4:181","type":""}],"src":"10725:335:181"},{"body":{"nodeType":"YulBlock","src":"11239:171:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11256:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11267:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11249:6:181"},"nodeType":"YulFunctionCall","src":"11249:21:181"},"nodeType":"YulExpressionStatement","src":"11249:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11290:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11301:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11286:3:181"},"nodeType":"YulFunctionCall","src":"11286:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11306:2:181","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11279:6:181"},"nodeType":"YulFunctionCall","src":"11279:30:181"},"nodeType":"YulExpressionStatement","src":"11279:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11329:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11340:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11325:3:181"},"nodeType":"YulFunctionCall","src":"11325:18:181"},{"hexValue":"616767726567617465526f6f742021657869737473","kind":"string","nodeType":"YulLiteral","src":"11345:23:181","type":"","value":"aggregateRoot !exists"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11318:6:181"},"nodeType":"YulFunctionCall","src":"11318:51:181"},"nodeType":"YulExpressionStatement","src":"11318:51:181"},{"nodeType":"YulAssignment","src":"11378:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11390:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11401:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11386:3:181"},"nodeType":"YulFunctionCall","src":"11386:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11378:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11216:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11230:4:181","type":""}],"src":"11065:345:181"},{"body":{"nodeType":"YulBlock","src":"11493:199:181","statements":[{"body":{"nodeType":"YulBlock","src":"11539:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11548:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11551:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11541:6:181"},"nodeType":"YulFunctionCall","src":"11541:12:181"},"nodeType":"YulExpressionStatement","src":"11541:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11514:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"11523:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11510:3:181"},"nodeType":"YulFunctionCall","src":"11510:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"11535:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11506:3:181"},"nodeType":"YulFunctionCall","src":"11506:32:181"},"nodeType":"YulIf","src":"11503:52:181"},{"nodeType":"YulVariableDeclaration","src":"11564:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11583:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11577:5:181"},"nodeType":"YulFunctionCall","src":"11577:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11568:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"11646:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11655:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11658:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11648:6:181"},"nodeType":"YulFunctionCall","src":"11648:12:181"},"nodeType":"YulExpressionStatement","src":"11648:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11615:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11636:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11629:6:181"},"nodeType":"YulFunctionCall","src":"11629:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11622:6:181"},"nodeType":"YulFunctionCall","src":"11622:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"11612:2:181"},"nodeType":"YulFunctionCall","src":"11612:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11605:6:181"},"nodeType":"YulFunctionCall","src":"11605:40:181"},"nodeType":"YulIf","src":"11602:60:181"},{"nodeType":"YulAssignment","src":"11671:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"11681:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11671:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11459:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11470:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11482:6:181","type":""}],"src":"11415:277:181"},{"body":{"nodeType":"YulBlock","src":"11871:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11888:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11899:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11881:6:181"},"nodeType":"YulFunctionCall","src":"11881:21:181"},"nodeType":"YulExpressionStatement","src":"11881:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11922:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11933:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11918:3:181"},"nodeType":"YulFunctionCall","src":"11918:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11938:1:181","type":"","value":"8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11911:6:181"},"nodeType":"YulFunctionCall","src":"11911:29:181"},"nodeType":"YulExpressionStatement","src":"11911:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11960:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11971:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11956:3:181"},"nodeType":"YulFunctionCall","src":"11956:18:181"},{"hexValue":"2177617463686572","kind":"string","nodeType":"YulLiteral","src":"11976:10:181","type":"","value":"!watcher"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11949:6:181"},"nodeType":"YulFunctionCall","src":"11949:38:181"},"nodeType":"YulExpressionStatement","src":"11949:38:181"},{"nodeType":"YulAssignment","src":"11996:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12008:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12019:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12004:3:181"},"nodeType":"YulFunctionCall","src":"12004:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11996:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11848:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11862:4:181","type":""}],"src":"11697:331:181"},{"body":{"nodeType":"YulBlock","src":"12082:79:181","statements":[{"nodeType":"YulAssignment","src":"12092:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"12104:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"12107:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12100:3:181"},"nodeType":"YulFunctionCall","src":"12100:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"12092:4:181"}]},{"body":{"nodeType":"YulBlock","src":"12133:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"12135:16:181"},"nodeType":"YulFunctionCall","src":"12135:18:181"},"nodeType":"YulExpressionStatement","src":"12135:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"12124:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"12130:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12121:2:181"},"nodeType":"YulFunctionCall","src":"12121:11:181"},"nodeType":"YulIf","src":"12118:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"12064:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"12067:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"12073:4:181","type":""}],"src":"12033:128:181"},{"body":{"nodeType":"YulBlock","src":"12340:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12357:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12368:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12350:6:181"},"nodeType":"YulFunctionCall","src":"12350:21:181"},"nodeType":"YulExpressionStatement","src":"12350:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12391:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12402:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12387:3:181"},"nodeType":"YulFunctionCall","src":"12387:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12407:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12380:6:181"},"nodeType":"YulFunctionCall","src":"12380:30:181"},"nodeType":"YulExpressionStatement","src":"12380:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12430:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12441:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12426:3:181"},"nodeType":"YulFunctionCall","src":"12426:18:181"},{"hexValue":"616c72656164792077617463686572206d616e61676572","kind":"string","nodeType":"YulLiteral","src":"12446:25:181","type":"","value":"already watcher manager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12419:6:181"},"nodeType":"YulFunctionCall","src":"12419:53:181"},"nodeType":"YulExpressionStatement","src":"12419:53:181"},{"nodeType":"YulAssignment","src":"12481:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12493:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12504:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12489:3:181"},"nodeType":"YulFunctionCall","src":"12489:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12481:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12317:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12331:4:181","type":""}],"src":"12166:347:181"},{"body":{"nodeType":"YulBlock","src":"12692:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12709:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12720:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12702:6:181"},"nodeType":"YulFunctionCall","src":"12702:21:181"},"nodeType":"YulExpressionStatement","src":"12702:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12743:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12754:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12739:3:181"},"nodeType":"YulFunctionCall","src":"12739:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12759:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12732:6:181"},"nodeType":"YulFunctionCall","src":"12732:30:181"},"nodeType":"YulExpressionStatement","src":"12732:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12782:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12793:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12778:3:181"},"nodeType":"YulFunctionCall","src":"12778:18:181"},{"hexValue":"21616c6c6f776c6973746564","kind":"string","nodeType":"YulLiteral","src":"12798:14:181","type":"","value":"!allowlisted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12771:6:181"},"nodeType":"YulFunctionCall","src":"12771:42:181"},"nodeType":"YulExpressionStatement","src":"12771:42:181"},{"nodeType":"YulAssignment","src":"12822:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12834:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12845:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12830:3:181"},"nodeType":"YulFunctionCall","src":"12830:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12822:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12669:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12683:4:181","type":""}],"src":"12518:336:181"},{"body":{"nodeType":"YulBlock","src":"12905:155:181","statements":[{"nodeType":"YulVariableDeclaration","src":"12915:20:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12925:10:181","type":"","value":"0xffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12919:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12944:29:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12963:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12970:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12959:3:181"},"nodeType":"YulFunctionCall","src":"12959:14:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"12948:7:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"13001:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13003:16:181"},"nodeType":"YulFunctionCall","src":"13003:18:181"},"nodeType":"YulExpressionStatement","src":"13003:18:181"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"12988:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12997:2:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"12985:2:181"},"nodeType":"YulFunctionCall","src":"12985:15:181"},"nodeType":"YulIf","src":"12982:41:181"},{"nodeType":"YulAssignment","src":"13032:22:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"13043:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"13052:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13039:3:181"},"nodeType":"YulFunctionCall","src":"13039:15:181"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"13032:3:181"}]}]},"name":"increment_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"12887:5:181","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"12897:3:181","type":""}],"src":"12859:201:181"},{"body":{"nodeType":"YulBlock","src":"13163:147:181","statements":[{"body":{"nodeType":"YulBlock","src":"13209:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13218:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13221:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13211:6:181"},"nodeType":"YulFunctionCall","src":"13211:12:181"},"nodeType":"YulExpressionStatement","src":"13211:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13184:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"13193:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13180:3:181"},"nodeType":"YulFunctionCall","src":"13180:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"13205:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13176:3:181"},"nodeType":"YulFunctionCall","src":"13176:32:181"},"nodeType":"YulIf","src":"13173:52:181"},{"nodeType":"YulAssignment","src":"13234:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13250:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13244:5:181"},"nodeType":"YulFunctionCall","src":"13244:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13234:6:181"}]},{"nodeType":"YulAssignment","src":"13269:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13289:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13300:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13285:3:181"},"nodeType":"YulFunctionCall","src":"13285:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13279:5:181"},"nodeType":"YulFunctionCall","src":"13279:25:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13269:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13121:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13132:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13144:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13152:6:181","type":""}],"src":"13065:245:181"},{"body":{"nodeType":"YulBlock","src":"13518:229:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13535:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"13546:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13528:6:181"},"nodeType":"YulFunctionCall","src":"13528:25:181"},"nodeType":"YulExpressionStatement","src":"13528:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13573:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13584:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13569:3:181"},"nodeType":"YulFunctionCall","src":"13569:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"13589:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13562:6:181"},"nodeType":"YulFunctionCall","src":"13562:34:181"},"nodeType":"YulExpressionStatement","src":"13562:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13616:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13627:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13612:3:181"},"nodeType":"YulFunctionCall","src":"13612:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"13632:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13605:6:181"},"nodeType":"YulFunctionCall","src":"13605:34:181"},"nodeType":"YulExpressionStatement","src":"13605:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13659:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13670:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13655:3:181"},"nodeType":"YulFunctionCall","src":"13655:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13675:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13648:6:181"},"nodeType":"YulFunctionCall","src":"13648:31:181"},"nodeType":"YulExpressionStatement","src":"13648:31:181"},{"nodeType":"YulAssignment","src":"13688:53:181","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"13713:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13725:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13736:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13721:3:181"},"nodeType":"YulFunctionCall","src":"13721:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"13696:16:181"},"nodeType":"YulFunctionCall","src":"13696:45:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13688:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13463:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13474:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13482:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13490:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13498:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13509:4:181","type":""}],"src":"13315:432:181"},{"body":{"nodeType":"YulBlock","src":"13926:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13943:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13954:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13936:6:181"},"nodeType":"YulFunctionCall","src":"13936:21:181"},"nodeType":"YulExpressionStatement","src":"13936:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13977:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13988:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13973:3:181"},"nodeType":"YulFunctionCall","src":"13973:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13993:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13966:6:181"},"nodeType":"YulFunctionCall","src":"13966:30:181"},"nodeType":"YulExpressionStatement","src":"13966:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14016:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14027:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14012:3:181"},"nodeType":"YulFunctionCall","src":"14012:18:181"},{"hexValue":"5061757361626c653a20706175736564","kind":"string","nodeType":"YulLiteral","src":"14032:18:181","type":"","value":"Pausable: paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14005:6:181"},"nodeType":"YulFunctionCall","src":"14005:46:181"},"nodeType":"YulExpressionStatement","src":"14005:46:181"},{"nodeType":"YulAssignment","src":"14060:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14072:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14083:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14068:3:181"},"nodeType":"YulFunctionCall","src":"14068:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14060:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13903:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13917:4:181","type":""}],"src":"13752:340:181"},{"body":{"nodeType":"YulBlock","src":"14271:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14288:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14299:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14281:6:181"},"nodeType":"YulFunctionCall","src":"14281:21:181"},"nodeType":"YulExpressionStatement","src":"14281:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14322:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14333:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14318:3:181"},"nodeType":"YulFunctionCall","src":"14318:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14338:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14311:6:181"},"nodeType":"YulFunctionCall","src":"14311:30:181"},"nodeType":"YulExpressionStatement","src":"14311:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14361:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14372:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14357:3:181"},"nodeType":"YulFunctionCall","src":"14357:18:181"},{"hexValue":"2164617461206c656e677468","kind":"string","nodeType":"YulLiteral","src":"14377:14:181","type":"","value":"!data length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14350:6:181"},"nodeType":"YulFunctionCall","src":"14350:42:181"},"nodeType":"YulExpressionStatement","src":"14350:42:181"},{"nodeType":"YulAssignment","src":"14401:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14413:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14424:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14409:3:181"},"nodeType":"YulFunctionCall","src":"14409:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14401:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14248:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14262:4:181","type":""}],"src":"14097:336:181"},{"body":{"nodeType":"YulBlock","src":"14557:98:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14574:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14585:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14567:6:181"},"nodeType":"YulFunctionCall","src":"14567:21:181"},"nodeType":"YulExpressionStatement","src":"14567:21:181"},{"nodeType":"YulAssignment","src":"14597:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14622:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14634:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14645:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14630:3:181"},"nodeType":"YulFunctionCall","src":"14630:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"14605:16:181"},"nodeType":"YulFunctionCall","src":"14605:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14597:4:181"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14526:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14537:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14548:4:181","type":""}],"src":"14438:217:181"},{"body":{"nodeType":"YulBlock","src":"14833:227:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14850:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14865:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14881:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"14886:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14877:3:181"},"nodeType":"YulFunctionCall","src":"14877:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"14890:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14873:3:181"},"nodeType":"YulFunctionCall","src":"14873:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14861:3:181"},"nodeType":"YulFunctionCall","src":"14861:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14843:6:181"},"nodeType":"YulFunctionCall","src":"14843:51:181"},"nodeType":"YulExpressionStatement","src":"14843:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14914:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14925:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14910:3:181"},"nodeType":"YulFunctionCall","src":"14910:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14930:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14903:6:181"},"nodeType":"YulFunctionCall","src":"14903:30:181"},"nodeType":"YulExpressionStatement","src":"14903:30:181"},{"nodeType":"YulAssignment","src":"14942:52:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14967:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14979:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14990:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14975:3:181"},"nodeType":"YulFunctionCall","src":"14975:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"14950:16:181"},"nodeType":"YulFunctionCall","src":"14950:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14942:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15014:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15025:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15010:3:181"},"nodeType":"YulFunctionCall","src":"15010:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15034:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"15042:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15030:3:181"},"nodeType":"YulFunctionCall","src":"15030:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15003:6:181"},"nodeType":"YulFunctionCall","src":"15003:51:181"},"nodeType":"YulExpressionStatement","src":"15003:51:181"}]},"name":"abi_encode_tuple_t_address_t_bytes_memory_ptr_t_uint32__to_t_address_t_bytes_memory_ptr_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14786:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14797:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14805:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14813:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14824:4:181","type":""}],"src":"14660:400:181"},{"body":{"nodeType":"YulBlock","src":"15239:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15256:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15267:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15249:6:181"},"nodeType":"YulFunctionCall","src":"15249:21:181"},"nodeType":"YulExpressionStatement","src":"15249:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15290:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15301:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15286:3:181"},"nodeType":"YulFunctionCall","src":"15286:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15306:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15279:6:181"},"nodeType":"YulFunctionCall","src":"15279:30:181"},"nodeType":"YulExpressionStatement","src":"15279:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15329:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15340:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15325:3:181"},"nodeType":"YulFunctionCall","src":"15325:18:181"},{"hexValue":"5061757361626c653a206e6f7420706175736564","kind":"string","nodeType":"YulLiteral","src":"15345:22:181","type":"","value":"Pausable: not paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15318:6:181"},"nodeType":"YulFunctionCall","src":"15318:50:181"},"nodeType":"YulExpressionStatement","src":"15318:50:181"},{"nodeType":"YulAssignment","src":"15377:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15389:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15400:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15385:3:181"},"nodeType":"YulFunctionCall","src":"15385:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15377:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15216:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15230:4:181","type":""}],"src":"15065:344:181"},{"body":{"nodeType":"YulBlock","src":"15588:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15605:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15616:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15598:6:181"},"nodeType":"YulFunctionCall","src":"15598:21:181"},"nodeType":"YulExpressionStatement","src":"15598:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15639:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15650:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15635:3:181"},"nodeType":"YulFunctionCall","src":"15635:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15655:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15628:6:181"},"nodeType":"YulFunctionCall","src":"15628:30:181"},"nodeType":"YulExpressionStatement","src":"15628:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15678:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15689:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15674:3:181"},"nodeType":"YulFunctionCall","src":"15674:18:181"},{"hexValue":"216d6972726f72436f6e6e6563746f72","kind":"string","nodeType":"YulLiteral","src":"15694:18:181","type":"","value":"!mirrorConnector"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15667:6:181"},"nodeType":"YulFunctionCall","src":"15667:46:181"},"nodeType":"YulExpressionStatement","src":"15667:46:181"},{"nodeType":"YulAssignment","src":"15722:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15734:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15745:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15730:3:181"},"nodeType":"YulFunctionCall","src":"15730:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15722:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15565:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15579:4:181","type":""}],"src":"15414:340:181"},{"body":{"nodeType":"YulBlock","src":"15933:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15950:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15961:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15943:6:181"},"nodeType":"YulFunctionCall","src":"15943:21:181"},"nodeType":"YulExpressionStatement","src":"15943:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15984:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15995:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15980:3:181"},"nodeType":"YulFunctionCall","src":"15980:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16000:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15973:6:181"},"nodeType":"YulFunctionCall","src":"15973:29:181"},"nodeType":"YulExpressionStatement","src":"15973:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16022:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16033:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16018:3:181"},"nodeType":"YulFunctionCall","src":"16018:18:181"},{"hexValue":"216c656e677468","kind":"string","nodeType":"YulLiteral","src":"16038:9:181","type":"","value":"!length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16011:6:181"},"nodeType":"YulFunctionCall","src":"16011:37:181"},"nodeType":"YulExpressionStatement","src":"16011:37:181"},{"nodeType":"YulAssignment","src":"16057:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16069:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16080:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16065:3:181"},"nodeType":"YulFunctionCall","src":"16065:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16057:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15910:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15924:4:181","type":""}],"src":"15759:330:181"},{"body":{"nodeType":"YulBlock","src":"16188:203:181","statements":[{"nodeType":"YulVariableDeclaration","src":"16198:26:181","value":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"16218:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16212:5:181"},"nodeType":"YulFunctionCall","src":"16212:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"16202:6:181","type":""}]},{"nodeType":"YulAssignment","src":"16233:32:181","value":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"16252:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"16259:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16248:3:181"},"nodeType":"YulFunctionCall","src":"16248:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16242:5:181"},"nodeType":"YulFunctionCall","src":"16242:23:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"16233:5:181"}]},{"body":{"nodeType":"YulBlock","src":"16302:83:181","statements":[{"nodeType":"YulAssignment","src":"16316:59:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16329:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16344:1:181","type":"","value":"3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16351:4:181","type":"","value":"0x20"},{"name":"length","nodeType":"YulIdentifier","src":"16357:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16347:3:181"},"nodeType":"YulFunctionCall","src":"16347:17:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16340:3:181"},"nodeType":"YulFunctionCall","src":"16340:25:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16371:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"16367:3:181"},"nodeType":"YulFunctionCall","src":"16367:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16336:3:181"},"nodeType":"YulFunctionCall","src":"16336:38:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16325:3:181"},"nodeType":"YulFunctionCall","src":"16325:50:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"16316:5:181"}]}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"16280:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"16288:4:181","type":"","value":"0x20"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16277:2:181"},"nodeType":"YulFunctionCall","src":"16277:16:181"},"nodeType":"YulIf","src":"16274:111:181"}]},"name":"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nodeType":"YulTypedName","src":"16168:5:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"16178:5:181","type":""}],"src":"16094:297:181"},{"body":{"nodeType":"YulBlock","src":"16570:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16587:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16598:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16580:6:181"},"nodeType":"YulFunctionCall","src":"16580:21:181"},"nodeType":"YulExpressionStatement","src":"16580:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16621:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16632:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16617:3:181"},"nodeType":"YulFunctionCall","src":"16617:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16637:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16610:6:181"},"nodeType":"YulFunctionCall","src":"16610:30:181"},"nodeType":"YulExpressionStatement","src":"16610:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16660:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16671:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16656:3:181"},"nodeType":"YulFunctionCall","src":"16656:18:181"},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","kind":"string","nodeType":"YulLiteral","src":"16676:33:181","type":"","value":"ReentrancyGuard: reentrant call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16649:6:181"},"nodeType":"YulFunctionCall","src":"16649:61:181"},"nodeType":"YulExpressionStatement","src":"16649:61:181"},{"nodeType":"YulAssignment","src":"16719:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16731:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16742:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16727:3:181"},"nodeType":"YulFunctionCall","src":"16727:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16719:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16547:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16561:4:181","type":""}],"src":"16396:355:181"},{"body":{"nodeType":"YulBlock","src":"16930:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16947:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16958:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16940:6:181"},"nodeType":"YulFunctionCall","src":"16940:21:181"},"nodeType":"YulExpressionStatement","src":"16940:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16981:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16992:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16977:3:181"},"nodeType":"YulFunctionCall","src":"16977:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16997:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16970:6:181"},"nodeType":"YulFunctionCall","src":"16970:30:181"},"nodeType":"YulExpressionStatement","src":"16970:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17020:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17031:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17016:3:181"},"nodeType":"YulFunctionCall","src":"17016:18:181"},{"hexValue":"214d6573736167655374617475732e4e6f6e65","kind":"string","nodeType":"YulLiteral","src":"17036:21:181","type":"","value":"!MessageStatus.None"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17009:6:181"},"nodeType":"YulFunctionCall","src":"17009:49:181"},"nodeType":"YulExpressionStatement","src":"17009:49:181"},{"nodeType":"YulAssignment","src":"17067:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17079:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17090:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17075:3:181"},"nodeType":"YulFunctionCall","src":"17075:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17067:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16907:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16921:4:181","type":""}],"src":"16756:343:181"},{"body":{"nodeType":"YulBlock","src":"17278:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17295:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17306:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17288:6:181"},"nodeType":"YulFunctionCall","src":"17288:21:181"},"nodeType":"YulExpressionStatement","src":"17288:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17329:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17340:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17325:3:181"},"nodeType":"YulFunctionCall","src":"17325:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17345:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17318:6:181"},"nodeType":"YulFunctionCall","src":"17318:30:181"},"nodeType":"YulExpressionStatement","src":"17318:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17368:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17379:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17364:3:181"},"nodeType":"YulFunctionCall","src":"17364:18:181"},{"hexValue":"696e76616c696420696e626f756e64526f6f74","kind":"string","nodeType":"YulLiteral","src":"17384:21:181","type":"","value":"invalid inboundRoot"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17357:6:181"},"nodeType":"YulFunctionCall","src":"17357:49:181"},"nodeType":"YulExpressionStatement","src":"17357:49:181"},{"nodeType":"YulAssignment","src":"17415:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17427:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17438:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17423:3:181"},"nodeType":"YulFunctionCall","src":"17423:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17415:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17255:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17269:4:181","type":""}],"src":"17104:343:181"},{"body":{"nodeType":"YulBlock","src":"17626:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17643:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17654:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17636:6:181"},"nodeType":"YulFunctionCall","src":"17636:21:181"},"nodeType":"YulExpressionStatement","src":"17636:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17677:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17688:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17673:3:181"},"nodeType":"YulFunctionCall","src":"17673:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17693:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17666:6:181"},"nodeType":"YulFunctionCall","src":"17666:30:181"},"nodeType":"YulExpressionStatement","src":"17666:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17716:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17727:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17712:3:181"},"nodeType":"YulFunctionCall","src":"17712:18:181"},{"hexValue":"2164657374696e6174696f6e","kind":"string","nodeType":"YulLiteral","src":"17732:14:181","type":"","value":"!destination"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17705:6:181"},"nodeType":"YulFunctionCall","src":"17705:42:181"},"nodeType":"YulExpressionStatement","src":"17705:42:181"},{"nodeType":"YulAssignment","src":"17756:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17768:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17779:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17764:3:181"},"nodeType":"YulFunctionCall","src":"17764:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17756:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17603:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17617:4:181","type":""}],"src":"17452:336:181"},{"body":{"nodeType":"YulBlock","src":"17967:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17984:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17995:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17977:6:181"},"nodeType":"YulFunctionCall","src":"17977:21:181"},"nodeType":"YulExpressionStatement","src":"17977:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18018:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18029:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18014:3:181"},"nodeType":"YulFunctionCall","src":"18014:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18034:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18007:6:181"},"nodeType":"YulFunctionCall","src":"18007:29:181"},"nodeType":"YulExpressionStatement","src":"18007:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18056:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18067:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18052:3:181"},"nodeType":"YulFunctionCall","src":"18052:18:181"},{"hexValue":"2170726f76656e","kind":"string","nodeType":"YulLiteral","src":"18072:9:181","type":"","value":"!proven"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18045:6:181"},"nodeType":"YulFunctionCall","src":"18045:37:181"},"nodeType":"YulExpressionStatement","src":"18045:37:181"},{"nodeType":"YulAssignment","src":"18091:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18103:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18114:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18099:3:181"},"nodeType":"YulFunctionCall","src":"18099:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18091:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17944:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17958:4:181","type":""}],"src":"17793:330:181"},{"body":{"nodeType":"YulBlock","src":"18302:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18319:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18330:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18312:6:181"},"nodeType":"YulFunctionCall","src":"18312:21:181"},"nodeType":"YulExpressionStatement","src":"18312:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18353:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18364:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18349:3:181"},"nodeType":"YulFunctionCall","src":"18349:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18369:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18342:6:181"},"nodeType":"YulFunctionCall","src":"18342:29:181"},"nodeType":"YulExpressionStatement","src":"18342:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18391:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18402:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18387:3:181"},"nodeType":"YulFunctionCall","src":"18387:18:181"},{"hexValue":"21676173","kind":"string","nodeType":"YulLiteral","src":"18407:6:181","type":"","value":"!gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18380:6:181"},"nodeType":"YulFunctionCall","src":"18380:34:181"},"nodeType":"YulExpressionStatement","src":"18380:34:181"},{"nodeType":"YulAssignment","src":"18423:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18435:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18446:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18431:3:181"},"nodeType":"YulFunctionCall","src":"18431:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18423:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18279:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18293:4:181","type":""}],"src":"18128:327:181"},{"body":{"nodeType":"YulBlock","src":"18659:276:181","statements":[{"nodeType":"YulVariableDeclaration","src":"18669:20:181","value":{"kind":"number","nodeType":"YulLiteral","src":"18679:10:181","type":"","value":"0xffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18673:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18705:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18720:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"18728:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18716:3:181"},"nodeType":"YulFunctionCall","src":"18716:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18698:6:181"},"nodeType":"YulFunctionCall","src":"18698:34:181"},"nodeType":"YulExpressionStatement","src":"18698:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18752:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18763:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18748:3:181"},"nodeType":"YulFunctionCall","src":"18748:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"18772:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"18780:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18768:3:181"},"nodeType":"YulFunctionCall","src":"18768:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18741:6:181"},"nodeType":"YulFunctionCall","src":"18741:43:181"},"nodeType":"YulExpressionStatement","src":"18741:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18804:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18815:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18800:3:181"},"nodeType":"YulFunctionCall","src":"18800:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"18820:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18793:6:181"},"nodeType":"YulFunctionCall","src":"18793:34:181"},"nodeType":"YulExpressionStatement","src":"18793:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18847:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18858:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18843:3:181"},"nodeType":"YulFunctionCall","src":"18843:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18863:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18836:6:181"},"nodeType":"YulFunctionCall","src":"18836:31:181"},"nodeType":"YulExpressionStatement","src":"18836:31:181"},{"nodeType":"YulAssignment","src":"18876:53:181","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"18901:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18913:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18924:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18909:3:181"},"nodeType":"YulFunctionCall","src":"18909:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"18884:16:181"},"nodeType":"YulFunctionCall","src":"18884:45:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18876:4:181"}]}]},"name":"abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18604:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"18615:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"18623:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18631:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18639:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18650:4:181","type":""}],"src":"18460:475:181"},{"body":{"nodeType":"YulBlock","src":"19109:200:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19126:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"19137:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19119:6:181"},"nodeType":"YulFunctionCall","src":"19119:25:181"},"nodeType":"YulExpressionStatement","src":"19119:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19164:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19175:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19160:3:181"},"nodeType":"YulFunctionCall","src":"19160:18:181"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"19194:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19187:6:181"},"nodeType":"YulFunctionCall","src":"19187:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19180:6:181"},"nodeType":"YulFunctionCall","src":"19180:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19153:6:181"},"nodeType":"YulFunctionCall","src":"19153:50:181"},"nodeType":"YulExpressionStatement","src":"19153:50:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19223:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19234:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19219:3:181"},"nodeType":"YulFunctionCall","src":"19219:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19239:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19212:6:181"},"nodeType":"YulFunctionCall","src":"19212:30:181"},"nodeType":"YulExpressionStatement","src":"19212:30:181"},{"nodeType":"YulAssignment","src":"19251:52:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"19276:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19288:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19299:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19284:3:181"},"nodeType":"YulFunctionCall","src":"19284:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"19259:16:181"},"nodeType":"YulFunctionCall","src":"19259:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19251:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19062:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"19073:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19081:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19089:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19100:4:181","type":""}],"src":"18940:369:181"},{"body":{"nodeType":"YulBlock","src":"19443:175:181","statements":[{"nodeType":"YulAssignment","src":"19453:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19465:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19476:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19461:3:181"},"nodeType":"YulFunctionCall","src":"19461:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19453:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"19488:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19506:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"19511:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"19502:3:181"},"nodeType":"YulFunctionCall","src":"19502:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"19515:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19498:3:181"},"nodeType":"YulFunctionCall","src":"19498:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"19492:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19533:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19548:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"19556:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19544:3:181"},"nodeType":"YulFunctionCall","src":"19544:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19526:6:181"},"nodeType":"YulFunctionCall","src":"19526:34:181"},"nodeType":"YulExpressionStatement","src":"19526:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19580:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19591:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19576:3:181"},"nodeType":"YulFunctionCall","src":"19576:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"19600:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"19608:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19596:3:181"},"nodeType":"YulFunctionCall","src":"19596:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19569:6:181"},"nodeType":"YulFunctionCall","src":"19569:43:181"},"nodeType":"YulExpressionStatement","src":"19569:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19404:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19415:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19423:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19434:4:181","type":""}],"src":"19314:304:181"},{"body":{"nodeType":"YulBlock","src":"19797:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19814:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19825:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19807:6:181"},"nodeType":"YulFunctionCall","src":"19807:21:181"},"nodeType":"YulExpressionStatement","src":"19807:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19848:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19859:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19844:3:181"},"nodeType":"YulFunctionCall","src":"19844:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19864:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19837:6:181"},"nodeType":"YulFunctionCall","src":"19837:30:181"},"nodeType":"YulExpressionStatement","src":"19837:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19887:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19898:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19883:3:181"},"nodeType":"YulFunctionCall","src":"19883:18:181"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","kind":"string","nodeType":"YulLiteral","src":"19903:31:181","type":"","value":"Address: insufficient balance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19876:6:181"},"nodeType":"YulFunctionCall","src":"19876:59:181"},"nodeType":"YulExpressionStatement","src":"19876:59:181"},{"nodeType":"YulAssignment","src":"19944:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19956:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19967:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19952:3:181"},"nodeType":"YulFunctionCall","src":"19952:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19944:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19774:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19788:4:181","type":""}],"src":"19623:353:181"},{"body":{"nodeType":"YulBlock","src":"20172:14:181","statements":[{"nodeType":"YulAssignment","src":"20174:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"20181:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"20174:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"20156:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"20164:3:181","type":""}],"src":"19981:205:181"},{"body":{"nodeType":"YulBlock","src":"20365:248:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20382:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20393:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20375:6:181"},"nodeType":"YulFunctionCall","src":"20375:21:181"},"nodeType":"YulExpressionStatement","src":"20375:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20416:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20427:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20412:3:181"},"nodeType":"YulFunctionCall","src":"20412:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20432:2:181","type":"","value":"58"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20405:6:181"},"nodeType":"YulFunctionCall","src":"20405:30:181"},"nodeType":"YulExpressionStatement","src":"20405:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20455:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20466:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20451:3:181"},"nodeType":"YulFunctionCall","src":"20451:18:181"},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c2072","kind":"string","nodeType":"YulLiteral","src":"20471:34:181","type":"","value":"Address: unable to send value, r"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20444:6:181"},"nodeType":"YulFunctionCall","src":"20444:62:181"},"nodeType":"YulExpressionStatement","src":"20444:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20526:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20537:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20522:3:181"},"nodeType":"YulFunctionCall","src":"20522:18:181"},{"hexValue":"6563697069656e74206d61792068617665207265766572746564","kind":"string","nodeType":"YulLiteral","src":"20542:28:181","type":"","value":"ecipient may have reverted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20515:6:181"},"nodeType":"YulFunctionCall","src":"20515:56:181"},"nodeType":"YulExpressionStatement","src":"20515:56:181"},{"nodeType":"YulAssignment","src":"20580:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20592:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20603:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20588:3:181"},"nodeType":"YulFunctionCall","src":"20588:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20580:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20342:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20356:4:181","type":""}],"src":"20191:422:181"},{"body":{"nodeType":"YulBlock","src":"20747:119:181","statements":[{"nodeType":"YulAssignment","src":"20757:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20769:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20780:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20765:3:181"},"nodeType":"YulFunctionCall","src":"20765:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20757:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20799:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"20810:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20792:6:181"},"nodeType":"YulFunctionCall","src":"20792:25:181"},"nodeType":"YulExpressionStatement","src":"20792:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20837:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20848:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20833:3:181"},"nodeType":"YulFunctionCall","src":"20833:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"20853:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20826:6:181"},"nodeType":"YulFunctionCall","src":"20826:34:181"},"nodeType":"YulExpressionStatement","src":"20826:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20708:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"20719:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"20727:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20738:4:181","type":""}],"src":"20618:248:181"},{"body":{"nodeType":"YulBlock","src":"21045:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21062:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21073:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21055:6:181"},"nodeType":"YulFunctionCall","src":"21055:21:181"},"nodeType":"YulExpressionStatement","src":"21055:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21096:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21107:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21092:3:181"},"nodeType":"YulFunctionCall","src":"21092:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"21112:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21085:6:181"},"nodeType":"YulFunctionCall","src":"21085:30:181"},"nodeType":"YulExpressionStatement","src":"21085:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21135:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21146:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21131:3:181"},"nodeType":"YulFunctionCall","src":"21131:18:181"},{"hexValue":"216e65772072617465206c696d6974","kind":"string","nodeType":"YulLiteral","src":"21151:17:181","type":"","value":"!new rate limit"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21124:6:181"},"nodeType":"YulFunctionCall","src":"21124:45:181"},"nodeType":"YulExpressionStatement","src":"21124:45:181"},{"nodeType":"YulAssignment","src":"21178:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21190:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21201:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21186:3:181"},"nodeType":"YulFunctionCall","src":"21186:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21178:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21022:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21036:4:181","type":""}],"src":"20871:339:181"},{"body":{"nodeType":"YulBlock","src":"21344:145:181","statements":[{"nodeType":"YulAssignment","src":"21354:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21366:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21377:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21362:3:181"},"nodeType":"YulFunctionCall","src":"21362:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21354:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21396:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"21411:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21427:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"21432:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21423:3:181"},"nodeType":"YulFunctionCall","src":"21423:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"21436:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21419:3:181"},"nodeType":"YulFunctionCall","src":"21419:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21407:3:181"},"nodeType":"YulFunctionCall","src":"21407:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21389:6:181"},"nodeType":"YulFunctionCall","src":"21389:51:181"},"nodeType":"YulExpressionStatement","src":"21389:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21460:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21471:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21456:3:181"},"nodeType":"YulFunctionCall","src":"21456:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"21476:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21449:6:181"},"nodeType":"YulFunctionCall","src":"21449:34:181"},"nodeType":"YulExpressionStatement","src":"21449:34:181"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21305:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21316:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"21324:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21335:4:181","type":""}],"src":"21215:274:181"},{"body":{"nodeType":"YulBlock","src":"21765:439:181","statements":[{"nodeType":"YulVariableDeclaration","src":"21775:30:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21789:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"21794:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21785:3:181"},"nodeType":"YulFunctionCall","src":"21785:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"21779:2:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21821:3:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21834:3:181","type":"","value":"224"},{"name":"value0","nodeType":"YulIdentifier","src":"21839:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21830:3:181"},"nodeType":"YulFunctionCall","src":"21830:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21848:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21826:3:181"},"nodeType":"YulFunctionCall","src":"21826:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21814:6:181"},"nodeType":"YulFunctionCall","src":"21814:38:181"},"nodeType":"YulExpressionStatement","src":"21814:38:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21872:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21877:1:181","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21868:3:181"},"nodeType":"YulFunctionCall","src":"21868:11:181"},{"name":"value1","nodeType":"YulIdentifier","src":"21881:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21861:6:181"},"nodeType":"YulFunctionCall","src":"21861:27:181"},"nodeType":"YulExpressionStatement","src":"21861:27:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21908:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21913:2:181","type":"","value":"36"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21904:3:181"},"nodeType":"YulFunctionCall","src":"21904:12:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21926:3:181","type":"","value":"224"},{"name":"value2","nodeType":"YulIdentifier","src":"21931:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21922:3:181"},"nodeType":"YulFunctionCall","src":"21922:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21940:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21918:3:181"},"nodeType":"YulFunctionCall","src":"21918:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21897:6:181"},"nodeType":"YulFunctionCall","src":"21897:47:181"},"nodeType":"YulExpressionStatement","src":"21897:47:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21964:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21969:2:181","type":"","value":"40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21960:3:181"},"nodeType":"YulFunctionCall","src":"21960:12:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21982:3:181","type":"","value":"224"},{"name":"value3","nodeType":"YulIdentifier","src":"21987:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21978:3:181"},"nodeType":"YulFunctionCall","src":"21978:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21996:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21974:3:181"},"nodeType":"YulFunctionCall","src":"21974:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21953:6:181"},"nodeType":"YulFunctionCall","src":"21953:47:181"},"nodeType":"YulExpressionStatement","src":"21953:47:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"22020:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"22025:2:181","type":"","value":"44"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22016:3:181"},"nodeType":"YulFunctionCall","src":"22016:12:181"},{"name":"value4","nodeType":"YulIdentifier","src":"22030:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22009:6:181"},"nodeType":"YulFunctionCall","src":"22009:28:181"},"nodeType":"YulExpressionStatement","src":"22009:28:181"},{"nodeType":"YulVariableDeclaration","src":"22046:27:181","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"22066:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"22060:5:181"},"nodeType":"YulFunctionCall","src":"22060:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"22050:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"22121:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"22129:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22117:3:181"},"nodeType":"YulFunctionCall","src":"22117:17:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"22140:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"22145:2:181","type":"","value":"76"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22136:3:181"},"nodeType":"YulFunctionCall","src":"22136:12:181"},{"name":"length","nodeType":"YulIdentifier","src":"22150:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"22082:34:181"},"nodeType":"YulFunctionCall","src":"22082:75:181"},"nodeType":"YulExpressionStatement","src":"22082:75:181"},{"nodeType":"YulAssignment","src":"22166:32:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"22181:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"22186:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22177:3:181"},"nodeType":"YulFunctionCall","src":"22177:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"22195:2:181","type":"","value":"76"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22173:3:181"},"nodeType":"YulFunctionCall","src":"22173:25:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"22166:3:181"}]}]},"name":"abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"21701:3:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"21706:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"21714:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"21722:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"21730:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21738:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"21746:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"21757:3:181","type":""}],"src":"21494:710:181"},{"body":{"nodeType":"YulBlock","src":"22290:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"22336:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22345:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22348:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22338:6:181"},"nodeType":"YulFunctionCall","src":"22338:12:181"},"nodeType":"YulExpressionStatement","src":"22338:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"22311:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"22320:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22307:3:181"},"nodeType":"YulFunctionCall","src":"22307:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"22332:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"22303:3:181"},"nodeType":"YulFunctionCall","src":"22303:32:181"},"nodeType":"YulIf","src":"22300:52:181"},{"nodeType":"YulAssignment","src":"22361:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22377:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"22371:5:181"},"nodeType":"YulFunctionCall","src":"22371:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"22361:6:181"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22256:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"22267:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"22279:6:181","type":""}],"src":"22209:184:181"},{"body":{"nodeType":"YulBlock","src":"22572:164:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22589:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22600:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22582:6:181"},"nodeType":"YulFunctionCall","src":"22582:21:181"},"nodeType":"YulExpressionStatement","src":"22582:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22623:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22634:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22619:3:181"},"nodeType":"YulFunctionCall","src":"22619:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22639:2:181","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22612:6:181"},"nodeType":"YulFunctionCall","src":"22612:30:181"},"nodeType":"YulExpressionStatement","src":"22612:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22662:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22673:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22658:3:181"},"nodeType":"YulFunctionCall","src":"22658:18:181"},{"hexValue":"6e657720726f6f7420656d707479","kind":"string","nodeType":"YulLiteral","src":"22678:16:181","type":"","value":"new root empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22651:6:181"},"nodeType":"YulFunctionCall","src":"22651:44:181"},"nodeType":"YulExpressionStatement","src":"22651:44:181"},{"nodeType":"YulAssignment","src":"22704:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22716:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22727:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22712:3:181"},"nodeType":"YulFunctionCall","src":"22712:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22704:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22549:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22563:4:181","type":""}],"src":"22398:338:181"},{"body":{"nodeType":"YulBlock","src":"22915:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22932:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22943:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22925:6:181"},"nodeType":"YulFunctionCall","src":"22925:21:181"},"nodeType":"YulExpressionStatement","src":"22925:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22966:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22977:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22962:3:181"},"nodeType":"YulFunctionCall","src":"22962:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22982:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22955:6:181"},"nodeType":"YulFunctionCall","src":"22955:30:181"},"nodeType":"YulExpressionStatement","src":"22955:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23005:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23016:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23001:3:181"},"nodeType":"YulFunctionCall","src":"23001:18:181"},{"hexValue":"726f6f7420616c72656164792070656e64696e67","kind":"string","nodeType":"YulLiteral","src":"23021:22:181","type":"","value":"root already pending"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22994:6:181"},"nodeType":"YulFunctionCall","src":"22994:50:181"},"nodeType":"YulExpressionStatement","src":"22994:50:181"},{"nodeType":"YulAssignment","src":"23053:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23065:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23076:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23061:3:181"},"nodeType":"YulFunctionCall","src":"23061:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23053:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22892:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22906:4:181","type":""}],"src":"22741:344:181"},{"body":{"nodeType":"YulBlock","src":"23264:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23281:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23292:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23274:6:181"},"nodeType":"YulFunctionCall","src":"23274:21:181"},"nodeType":"YulExpressionStatement","src":"23274:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23315:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23326:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23311:3:181"},"nodeType":"YulFunctionCall","src":"23311:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23331:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23304:6:181"},"nodeType":"YulFunctionCall","src":"23304:30:181"},"nodeType":"YulExpressionStatement","src":"23304:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23354:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23365:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23350:3:181"},"nodeType":"YulFunctionCall","src":"23350:18:181"},{"hexValue":"726f6f7420616c72656164792070726f76656e","kind":"string","nodeType":"YulLiteral","src":"23370:21:181","type":"","value":"root already proven"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23343:6:181"},"nodeType":"YulFunctionCall","src":"23343:49:181"},"nodeType":"YulExpressionStatement","src":"23343:49:181"},{"nodeType":"YulAssignment","src":"23401:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23413:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23424:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23409:3:181"},"nodeType":"YulFunctionCall","src":"23409:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23401:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23241:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23255:4:181","type":""}],"src":"23090:343:181"},{"body":{"nodeType":"YulBlock","src":"23612:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23629:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23640:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23622:6:181"},"nodeType":"YulFunctionCall","src":"23622:21:181"},"nodeType":"YulExpressionStatement","src":"23622:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23663:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23674:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23659:3:181"},"nodeType":"YulFunctionCall","src":"23659:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23679:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23652:6:181"},"nodeType":"YulFunctionCall","src":"23652:30:181"},"nodeType":"YulExpressionStatement","src":"23652:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23702:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23713:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23698:3:181"},"nodeType":"YulFunctionCall","src":"23698:18:181"},{"hexValue":"616767726567617465526f6f7420656d707479","kind":"string","nodeType":"YulLiteral","src":"23718:21:181","type":"","value":"aggregateRoot empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23691:6:181"},"nodeType":"YulFunctionCall","src":"23691:49:181"},"nodeType":"YulExpressionStatement","src":"23691:49:181"},{"nodeType":"YulAssignment","src":"23749:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23761:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23772:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23757:3:181"},"nodeType":"YulFunctionCall","src":"23757:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23749:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23589:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23603:4:181","type":""}],"src":"23438:343:181"},{"body":{"nodeType":"YulBlock","src":"23960:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23977:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23988:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23970:6:181"},"nodeType":"YulFunctionCall","src":"23970:21:181"},"nodeType":"YulExpressionStatement","src":"23970:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24011:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24022:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24007:3:181"},"nodeType":"YulFunctionCall","src":"24007:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24027:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24000:6:181"},"nodeType":"YulFunctionCall","src":"24000:30:181"},"nodeType":"YulExpressionStatement","src":"24000:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24050:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24061:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24046:3:181"},"nodeType":"YulFunctionCall","src":"24046:18:181"},{"hexValue":"616767726567617465526f6f7420216578697374","kind":"string","nodeType":"YulLiteral","src":"24066:22:181","type":"","value":"aggregateRoot !exist"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24039:6:181"},"nodeType":"YulFunctionCall","src":"24039:50:181"},"nodeType":"YulExpressionStatement","src":"24039:50:181"},{"nodeType":"YulAssignment","src":"24098:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24110:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24121:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24106:3:181"},"nodeType":"YulFunctionCall","src":"24106:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24098:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23937:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23951:4:181","type":""}],"src":"23786:344:181"},{"body":{"nodeType":"YulBlock","src":"24309:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24326:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24337:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24319:6:181"},"nodeType":"YulFunctionCall","src":"24319:21:181"},"nodeType":"YulExpressionStatement","src":"24319:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24360:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24371:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24356:3:181"},"nodeType":"YulFunctionCall","src":"24356:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24376:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24349:6:181"},"nodeType":"YulFunctionCall","src":"24349:30:181"},"nodeType":"YulExpressionStatement","src":"24349:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24399:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24410:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24395:3:181"},"nodeType":"YulFunctionCall","src":"24395:18:181"},{"hexValue":"616767726567617465526f6f7420217665726966696564","kind":"string","nodeType":"YulLiteral","src":"24415:25:181","type":"","value":"aggregateRoot !verified"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24388:6:181"},"nodeType":"YulFunctionCall","src":"24388:53:181"},"nodeType":"YulExpressionStatement","src":"24388:53:181"},{"nodeType":"YulAssignment","src":"24450:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24462:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24473:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24458:3:181"},"nodeType":"YulFunctionCall","src":"24458:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24450:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24286:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24300:4:181","type":""}],"src":"24135:347:181"},{"body":{"nodeType":"YulBlock","src":"24661:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24678:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24689:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24671:6:181"},"nodeType":"YulFunctionCall","src":"24671:21:181"},"nodeType":"YulExpressionStatement","src":"24671:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24712:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24723:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24708:3:181"},"nodeType":"YulFunctionCall","src":"24708:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24728:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24701:6:181"},"nodeType":"YulFunctionCall","src":"24701:29:181"},"nodeType":"YulExpressionStatement","src":"24701:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24750:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24761:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24746:3:181"},"nodeType":"YulFunctionCall","src":"24746:18:181"},{"hexValue":"21627269646765","kind":"string","nodeType":"YulLiteral","src":"24766:9:181","type":"","value":"!bridge"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24739:6:181"},"nodeType":"YulFunctionCall","src":"24739:37:181"},"nodeType":"YulExpressionStatement","src":"24739:37:181"},{"nodeType":"YulAssignment","src":"24785:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24797:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24808:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24793:3:181"},"nodeType":"YulFunctionCall","src":"24793:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24785:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5bd20fa0eac50a6892371dae18efeb7d2b1c7a8479150f38626e21052ac8472c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24638:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24652:4:181","type":""}],"src":"24487:330:181"},{"body":{"nodeType":"YulBlock","src":"24903:170:181","statements":[{"body":{"nodeType":"YulBlock","src":"24949:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24958:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"24961:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"24951:6:181"},"nodeType":"YulFunctionCall","src":"24951:12:181"},"nodeType":"YulExpressionStatement","src":"24951:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"24924:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"24933:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"24920:3:181"},"nodeType":"YulFunctionCall","src":"24920:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"24945:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"24916:3:181"},"nodeType":"YulFunctionCall","src":"24916:32:181"},"nodeType":"YulIf","src":"24913:52:181"},{"nodeType":"YulVariableDeclaration","src":"24974:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24993:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24987:5:181"},"nodeType":"YulFunctionCall","src":"24987:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"24978:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"25037:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"25012:24:181"},"nodeType":"YulFunctionCall","src":"25012:31:181"},"nodeType":"YulExpressionStatement","src":"25012:31:181"},{"nodeType":"YulAssignment","src":"25052:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"25062:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"25052:6:181"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24869:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"24880:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"24892:6:181","type":""}],"src":"24822:251:181"},{"body":{"nodeType":"YulBlock","src":"25125:104:181","statements":[{"nodeType":"YulAssignment","src":"25135:39:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"25151:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"25154:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25147:3:181"},"nodeType":"YulFunctionCall","src":"25147:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"25165:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"25168:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25161:3:181"},"nodeType":"YulFunctionCall","src":"25161:12:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25143:3:181"},"nodeType":"YulFunctionCall","src":"25143:31:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"25135:4:181"}]},{"body":{"nodeType":"YulBlock","src":"25201:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"25203:16:181"},"nodeType":"YulFunctionCall","src":"25203:18:181"},"nodeType":"YulExpressionStatement","src":"25203:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"25189:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"25195:4:181","type":"","value":"0xff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"25186:2:181"},"nodeType":"YulFunctionCall","src":"25186:14:181"},"nodeType":"YulIf","src":"25183:40:181"}]},"name":"checked_sub_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"25107:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"25110:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"25116:4:181","type":""}],"src":"25078:151:181"},{"body":{"nodeType":"YulBlock","src":"25284:175:181","statements":[{"nodeType":"YulVariableDeclaration","src":"25294:50:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"25321:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"25324:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25317:3:181"},"nodeType":"YulFunctionCall","src":"25317:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"25335:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"25338:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25331:3:181"},"nodeType":"YulFunctionCall","src":"25331:12:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"25313:3:181"},"nodeType":"YulFunctionCall","src":"25313:31:181"},"variables":[{"name":"product_raw","nodeType":"YulTypedName","src":"25298:11:181","type":""}]},{"nodeType":"YulAssignment","src":"25353:33:181","value":{"arguments":[{"name":"product_raw","nodeType":"YulIdentifier","src":"25368:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"25381:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25364:3:181"},"nodeType":"YulFunctionCall","src":"25364:22:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"25353:7:181"}]},{"body":{"nodeType":"YulBlock","src":"25431:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"25433:16:181"},"nodeType":"YulFunctionCall","src":"25433:18:181"},"nodeType":"YulExpressionStatement","src":"25433:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"25408:7:181"},{"name":"product_raw","nodeType":"YulIdentifier","src":"25417:11:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"25405:2:181"},"nodeType":"YulFunctionCall","src":"25405:24:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"25398:6:181"},"nodeType":"YulFunctionCall","src":"25398:32:181"},"nodeType":"YulIf","src":"25395:58:181"}]},"name":"checked_mul_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"25263:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"25266:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"25272:7:181","type":""}],"src":"25234:225:181"},{"body":{"nodeType":"YulBlock","src":"25647:269:181","statements":[{"nodeType":"YulAssignment","src":"25657:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25669:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25680:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25665:3:181"},"nodeType":"YulFunctionCall","src":"25665:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25657:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"25693:36:181","value":{"kind":"number","nodeType":"YulLiteral","src":"25703:26:181","type":"","value":"0xffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"25697:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25745:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"25760:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"25768:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25756:3:181"},"nodeType":"YulFunctionCall","src":"25756:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25738:6:181"},"nodeType":"YulFunctionCall","src":"25738:34:181"},"nodeType":"YulExpressionStatement","src":"25738:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25792:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25803:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25788:3:181"},"nodeType":"YulFunctionCall","src":"25788:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25812:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"25820:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25808:3:181"},"nodeType":"YulFunctionCall","src":"25808:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25781:6:181"},"nodeType":"YulFunctionCall","src":"25781:43:181"},"nodeType":"YulExpressionStatement","src":"25781:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25844:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25855:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25840:3:181"},"nodeType":"YulFunctionCall","src":"25840:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"25860:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25833:6:181"},"nodeType":"YulFunctionCall","src":"25833:34:181"},"nodeType":"YulExpressionStatement","src":"25833:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25887:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25898:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25883:3:181"},"nodeType":"YulFunctionCall","src":"25883:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"25903:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25876:6:181"},"nodeType":"YulFunctionCall","src":"25876:34:181"},"nodeType":"YulExpressionStatement","src":"25876:34:181"}]},"name":"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25592:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"25603:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"25611:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"25619:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"25627:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25638:4:181","type":""}],"src":"25464:452:181"},{"body":{"nodeType":"YulBlock","src":"26095:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26112:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26123:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26105:6:181"},"nodeType":"YulFunctionCall","src":"26105:21:181"},"nodeType":"YulExpressionStatement","src":"26105:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26146:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26157:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26142:3:181"},"nodeType":"YulFunctionCall","src":"26142:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"26162:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26135:6:181"},"nodeType":"YulFunctionCall","src":"26135:30:181"},"nodeType":"YulExpressionStatement","src":"26135:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26185:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26196:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26181:3:181"},"nodeType":"YulFunctionCall","src":"26181:18:181"},{"hexValue":"217472756e6361746564","kind":"string","nodeType":"YulLiteral","src":"26201:12:181","type":"","value":"!truncated"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26174:6:181"},"nodeType":"YulFunctionCall","src":"26174:40:181"},"nodeType":"YulExpressionStatement","src":"26174:40:181"},{"nodeType":"YulAssignment","src":"26223:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26235:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26246:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26231:3:181"},"nodeType":"YulFunctionCall","src":"26231:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26223:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26072:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26086:4:181","type":""}],"src":"25921:334:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        if iszero(lt(value0, 3))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 1120) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, shl(5, length)), 0x20), dataEnd) { revert(0, 0) }\n        value0 := add(_2, 0x20)\n        value1 := length\n        value2 := calldataload(add(headStart, 0x20))\n        let _3 := add(headStart, 1088)\n        if gt(_3, dataEnd) { revert(0, 0) }\n        value3 := add(headStart, 64)\n        value4 := calldataload(_3)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n    }\n    function abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value2 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_bytes(value1, add(headStart, 64))\n    }\n    function abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!delayBlocks\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"root already sent\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, value0)\n        end := add(pos, 32)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        let tail_1 := abi_encode_bytes(value0, add(headStart, 96))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value1, tail_1)\n        mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!AMB\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        tail := abi_encode_bytes(value0, add(headStart, 64))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!proofs\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr(base_ref, ptr_to_tail) -> addr\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(1086)))) { revert(0, 0) }\n        addr := add(base_ref, rel_offset_of_tail)\n    }\n    function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 11)\n        mstore(add(headStart, 64), \"!sharedRoot\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"aggregateRoot !exists\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 8)\n        mstore(add(headStart, 64), \"!watcher\")\n        tail := add(headStart, 96)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"already watcher manager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!allowlisted\")\n        tail := add(headStart, 96)\n    }\n    function increment_t_uint32(value) -> ret\n    {\n        let _1 := 0xffffffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_decode_tuple_t_bytes32t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Pausable: paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!data length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr_t_uint32__to_t_address_t_bytes_memory_ptr_t_uint32__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), 96)\n        tail := abi_encode_bytes(value1, add(headStart, 96))\n        mstore(add(headStart, 64), and(value2, 0xffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"Pausable: not paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"!mirrorConnector\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!length\")\n        tail := add(headStart, 96)\n    }\n    function convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32(array) -> value\n    {\n        let length := mload(array)\n        value := mload(add(array, 0x20))\n        if lt(length, 0x20)\n        {\n            value := and(value, shl(shl(3, sub(0x20, length)), not(0)))\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"!MessageStatus.None\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"invalid inboundRoot\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!destination\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!proven\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n        mstore(add(headStart, 64), 96)\n        tail := abi_encode_bytes(value2, add(headStart, 96))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: insufficient balance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    { end := pos }\n    function abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 58)\n        mstore(add(headStart, 64), \"Address: unable to send value, r\")\n        mstore(add(headStart, 96), \"ecipient may have reverted\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"!new rate limit\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value5, value4, value3, value2, value1, value0) -> end\n    {\n        let _1 := shl(224, 0xffffffff)\n        mstore(pos, and(shl(224, value0), _1))\n        mstore(add(pos, 4), value1)\n        mstore(add(pos, 36), and(shl(224, value2), _1))\n        mstore(add(pos, 40), and(shl(224, value3), _1))\n        mstore(add(pos, 44), value4)\n        let length := mload(value5)\n        copy_memory_to_memory_with_cleanup(add(value5, 0x20), add(pos, 76), length)\n        end := add(add(pos, length), 76)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"new root empty\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"root already pending\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"root already proven\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"aggregateRoot empty\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"aggregateRoot !exist\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"aggregateRoot !verified\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_5bd20fa0eac50a6892371dae18efeb7d2b1c7a8479150f38626e21052ac8472c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!bridge\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function checked_sub_t_uint8(x, y) -> diff\n    {\n        diff := sub(and(x, 0xff), and(y, 0xff))\n        if gt(diff, 0xff) { panic_error_0x11() }\n    }\n    function checked_mul_t_uint8(x, y) -> product\n    {\n        let product_raw := mul(and(x, 0xff), and(y, 0xff))\n        product := and(product_raw, 0xff)\n        if iszero(eq(product, product_raw)) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"!truncated\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"39039":[{"length":32,"start":1162},{"length":32,"start":1649},{"length":32,"start":5745},{"length":32,"start":7271}],"39042":[{"length":32,"start":2244},{"length":32,"start":3123},{"length":32,"start":6281},{"length":32,"start":8691}],"39045":[{"length":32,"start":1347}],"39048":[{"length":32,"start":693}],"39550":[{"length":32,"start":1845},{"length":32,"start":2699},{"length":32,"start":4043},{"length":32,"start":5839}],"39553":[{"length":32,"start":2318},{"length":32,"start":7560},{"length":32,"start":7701}],"39556":[{"length":32,"start":805},{"length":32,"start":7527}]},"linkReferences":{},"object":"6080604052600436106102975760003560e01c80638456cb591161015a578063b95a2001116100c1578063d69f9d611161007a578063d69f9d61146108b2578063d7d317b3146108e6578063d88beda2146108fc578063db1b765914610930578063e0fed01014610950578063fa31de011461097057600080fd5b8063b95a2001146107ed578063c5b350df14610820578063cc39428314610835578063d1851c9214610855578063d232c22014610873578063d2a3cc711461089257600080fd5b8063a01892a511610113578063a01892a514610723578063a792c29b14610757578063ad9c0c2e14610777578063b1f8100d1461078d578063b2f87643146107ad578063b697f531146107cd57600080fd5b80638456cb591461064d5780638d3638f4146106625780638da5cb5b1461069557806398c9f2b9146106b35780639d3117c7146106e35780639fa92f9d1461071057600080fd5b8063572386ca116101fe57806365eaf11b116101b757806365eaf11b146105ad57806368742da6146105c25780636a42b8f8146105e25780636b04a933146105f8578063715018a6146106185780637850b0201461062d57600080fd5b8063572386ca146104ac578063579c1618146104dc5780635bd11efc146104f25780635c975abb146105125780635f61e3ec146105315780636159ada11461057d57600080fd5b80633cf52ffb116102505780633cf52ffb146103e55780633f4ba83a146103fa5780634ff746f61461040f578063508a109b1461042f5780635190bc531461044f57806352a9674b1461047857600080fd5b806314168416146102a35780631eeaabea146102f157806325e3beda146103135780632bb1ae7c146103555780632bbd59ca14610368578063301f07c3146103a557600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b3480156102fd57600080fd5b5061031161030c366004612f91565b61099e565b005b34801561031f57600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016102e8565b61031161036336600461304d565b610a48565b34801561037457600080fd5b50610398610383366004612f91565b600f6020526000908152604090205460ff1681565b6040516102e89190613098565b3480156103b157600080fd5b506103d56103c0366004612f91565b600a6020526000908152604090205460ff1681565b60405190151581526020016102e8565b3480156103f157600080fd5b50600254610347565b34801561040657600080fd5b50610311610beb565b34801561041b57600080fd5b5061031161042a36600461304d565b610c28565b34801561043b57600080fd5b5061031161044a3660046130c0565b610cce565b34801561045b57600080fd5b506103d561046a366004613171565b6001600160a01b0316301490565b34801561048457600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b857600080fd5b506103d56104c7366004612f91565b600c6020526000908152604090205460ff1681565b3480156104e857600080fd5b5061034760055481565b3480156104fe57600080fd5b5061031161050d366004613171565b610f90565b34801561051e57600080fd5b50600354600160a01b900460ff166103d5565b34801561053d57600080fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102e8565b34801561058957600080fd5b506103d5610598366004613171565b600d6020526000908152604090205460ff1681565b3480156105b957600080fd5b50610347610fc7565b3480156105ce57600080fd5b506103116105dd366004613171565b611050565b3480156105ee57600080fd5b5062093a80610347565b34801561060457600080fd5b50610311610613366004612f91565b6110cd565b34801561062457600080fd5b50610311611198565b34801561063957600080fd5b50610311610648366004612f91565b6111c3565b34801561065957600080fd5b506103116111f7565b34801561066e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102d7565b3480156106a157600080fd5b506000546001600160a01b0316610565565b3480156106bf57600080fd5b506103d56106ce366004612f91565b600b6020526000908152604090205460ff1681565b3480156106ef57600080fd5b506103476106fe366004612f91565b60096020526000908152604090205481565b34801561071c57600080fd5b5030610565565b34801561072f57600080fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b34801561076357600080fd5b50600454610565906001600160a01b031681565b34801561078357600080fd5b5061034760085481565b34801561079957600080fd5b506103116107a8366004613171565b6112ab565b3480156107b957600080fd5b506103116107c8366004613171565b611349565b3480156107d957600080fd5b506103116107e8366004613171565b6113c5565b3480156107f957600080fd5b506102d76108083660046131a7565b600e6020526000908152604090205463ffffffff1681565b34801561082c57600080fd5b50610311611444565b34801561084157600080fd5b50600354610565906001600160a01b031681565b34801561086157600080fd5b506001546001600160a01b0316610565565b34801561087f57600080fd5b506000546001600160a01b0316156103d5565b34801561089e57600080fd5b506103116108ad366004613171565b6114b4565b3480156108be57600080fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b3480156108f257600080fd5b5061034760065481565b34801561090857600080fd5b506103477f000000000000000000000000000000000000000000000000000000000000000081565b34801561093c57600080fd5b506103d561094b366004613171565b61158b565b34801561095c57600080fd5b5061031161096b366004612f91565b61159c565b34801561097c57600080fd5b5061099061098b3660046131c2565b6115d0565b6040516102e8929190613269565b6000546001600160a01b031633146109c9576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610a0e5760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610a5061179f565b43600554600654610a619190613298565b1115610a80576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0b91906132ab565b6000818152600c602052604090205490915060ff1615610b615760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b6044820152606401610a05565b600081604051602001610b7691815260200190565b6040516020818303038152906040529050610b9181846117ec565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610bde908390869033906132c4565b60405180910390a1505050565b6000546001600160a01b03163314610c16576040516311a8a1bb60e31b815260040160405180910390fd5b610c1e611911565b610c26611961565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c895760405162461bcd60e51b8152600401610a059060208082526004908201526310a0a6a160e11b604082015260600190565b610c92816119b6565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610cc3929190613302565b60405180910390a150565b610cd661179f565b610cde611a56565b83610d155760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b6044820152606401610a05565b600085856000818110610d2a57610d2a61332c565b9050602002810190610d3c9190613342565b610d469080613363565b604051610d549291906133b1565b604051809103902090506000610dbb8288886000818110610d7757610d7761332c565b9050602002810190610d899190613342565b60200189896000818110610d9f57610d9f61332c565b9050602002810190610db19190613342565b6104200135611aaf565b9050610dc981868686611b56565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610eef5788888263ffffffff16818110610e0e57610e0e61332c565b9050602002810190610e209190613342565b610e2a9080613363565b604051610e389291906133b1565b604051809103902093506000610e8d858b8b8563ffffffff16818110610e6057610e6061332c565b9050602002810190610e729190613342565b6020018c8c8663ffffffff16818110610d9f57610d9f61332c565b9050838114610ecc5760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b6044820152606401610a05565b506000848152600f60205260409020805460ff1916600190811790915501610de8565b5060005b818163ffffffff161015610f7b57610f7289898363ffffffff16818110610f1c57610f1c61332c565b9050602002810190610f2e9190613342565b610f389080613363565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5192505050565b50600101610ef3565b50505050610f896001600755565b5050505050565b6000546001600160a01b03163314610fbb576040516311a8a1bb60e31b815260040160405180910390fd5b610fc481611f2e565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104b91906132ab565b905090565b6000546001600160a01b0316331461107b576040516311a8a1bb60e31b815260040160405180910390fd5b476110868282611f97565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d826040516110c191815260200190565b60405180910390a25050565b6000546001600160a01b031633146110f8576040516311a8a1bb60e31b815260040160405180910390fd5b611100611911565b60008181526009602052604081205490036111555760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b6044820152606401610a05565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610cc39083815260200190565b6000546001600160a01b03163314610c26576040516311a8a1bb60e31b815260040160405180910390fd5b6000546001600160a01b031633146111ee576040516311a8a1bb60e31b815260040160405180910390fd5b610fc4816120b5565b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa158015611240573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126491906133c1565b61129b5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610a05565b6112a361179f565b610c266120f6565b6000546001600160a01b031633146112d6576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b0382811691161480156112f4575060025415155b15611312576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361134057604051634a2fb73f60e11b815260040160405180910390fd5b610fc481612139565b6000546001600160a01b03163314611374576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610cc3565b6000546001600160a01b031633146113f0576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610cc3565b6001546001600160a01b0316331461146f576040516311a7f27160e11b815260040160405180910390fd5b62093a806002544261148191906133e3565b1161149f576040516324e0285f60e21b815260040160405180910390fd5b600154610c26906001600160a01b0316612187565b6000546001600160a01b031633146114df576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b039081169082160361153d5760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e616765720000000000000000006044820152606401610a05565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610cc3565b6000611596826121ec565b92915050565b6000546001600160a01b031633146115c7576040516311a8a1bb60e31b815260040160405180910390fd5b610fc481612218565b336000908152600d602052604081205460609060ff166116215760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b6044820152606401610a05565b63ffffffff8086166000908152600e602052604081208054919291909116908261164a836133f6565b91906101000a81548163ffffffff021916908363ffffffff160217905550905060006116a97f00000000000000000000000000000000000000000000000000000000000000006116a0336001600160a01b031690565b848a8a8a612296565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af115801561171f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117439190613419565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f836117756001846133e3565b8487604051611787949392919061343d565b60405180910390a15090989197509095505050505050565b600354600160a01b900460ff1615610c265760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a05565b815160201461182c5760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a05565b6000634ff746f660e01b83604051602401611847919061346c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526003549091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691633dbb202b9116836118bc866122ce565b6040518463ffffffff1660e01b81526004016118da9392919061347f565b600060405180830381600087803b1580156118f457600080fd5b505af1158015611908573d6000803e3d6000fd5b50505050505050565b600354600160a01b900460ff16610c265760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a05565b611969611911565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6003546119cb906001600160a01b03166121ec565b611a0a5760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b6044820152606401610a05565b8051602014611a455760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a05565b610fc4611a51826134b9565b61232c565b600260075403611aa85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a05565b6002600755565b6000806000858152600f602052604090205460ff166002811115611ad557611ad5613082565b14611b185760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b6044820152606401610a05565b611b4c8484602080602002604051908101604052809291908260208002808284376000920191909152508691506124559050565b90505b9392505050565b6000848152600b602052604090205460ff16611c4b57611b75836127a3565b6000611bab8584602080602002604051908101604052809291908260208002808284376000920191909152508691506124559050565b9050838114611bf25760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b6044820152606401610a05565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611c419086815260200190565b60405180910390a3505b50505050565b600080611c5e8382612903565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611c9662ffffff198316612927565b63ffffffff1614611cd85760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b6044820152606401610a05565b6000611ce962ffffff19831661293c565b905060016000828152600f602052604090205460ff166002811115611d1057611d10613082565b14611d475760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b6044820152606401610a05565b6000818152600f60205260409020805460ff191660021790556001611dac7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613298565b611db691906133e3565b5a11611ded5760405162461bcd60e51b8152600401610a05906020808252600490820152632167617360e01b604082015260600190565b6000611dfe62ffffff198416612985565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611e5962ffffff198816612996565b611e6862ffffff1989166129aa565b611e7762ffffff198a166129bf565b611e94611e8962ffffff198c166129d4565b62ffffff1916612a02565b604051602401611ea794939291906134e0565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050611ee1858560008685612a4b565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890611f1a9088908b90869061350f565b60405180910390a150505050505050919050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b80471015611fe75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a05565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612034576040519150601f19603f3d011682016040523d82523d6000602084013e612039565b606091505b50509050806120b05760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a05565b505050565b60105460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1601055565b6120fe61179f565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586119993390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60006115967f000000000000000000000000000000000000000000000000000000000000000083612ad6565b600554810361225b5760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b6044820152606401610a05565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610cc3565b60608686868686866040516020016122b396959493929190613530565b60405160208183030381529060405290509695505050505050565b600081516020146123105760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a05565b6115968280602001905181019061232791906132ab565b612b97565b8061236a5760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b6044820152606401610a05565b600081815260096020526040902054156123bd5760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b6044820152606401610a05565b6000818152600a602052604090205460ff16156124125760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b6044820152606401610a05565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610cc39083815260200190565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b806127e65760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b6044820152606401610a05565b6000818152600a602052604090205460ff16156128005750565b600081815260096020526040812054908190036128565760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b6044820152606401610a05565b60085461286382436133e3565b10156128b15760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f74202176657269666965640000000000000000006044820152606401610a05565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b81516000906020840161291e64ffffffffff85168284612bad565b95945050505050565b600061159662ffffff19831660286004612bea565b6000806129528360781c6001600160601b031690565b6001600160601b0316905060006129728460181c6001600160601b031690565b6001600160601b03169091209392505050565b600061159661299383612c1a565b90565b600061159662ffffff198316826004612bea565b600061159662ffffff19831660246004612bea565b600061159662ffffff19831660046020612c2b565b6000611596604c6129f281601886901c6001600160601b03166133e3565b62ffffff19851691906000612d36565b6060600080612a1a8460181c6001600160601b031690565b6001600160601b031690506040519150819250612a3a8483602001612db2565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff811115612a7157612a71612faa565b6040519080825280601f01601f191660200182016040528015612a9b576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612abc578692505b828152826000602083013e90999098509650505050505050565b6000336001600160a01b03841614612b1a5760405162461bcd60e51b81526020600482015260076024820152662162726964676560c81b6044820152606401610a05565b816001600160a01b0316836001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b86919061358a565b6001600160a01b0316149392505050565b6000601054821115612ba95760105491505b5090565b600080612bba8385613298565b9050604051811115612bca575060005b80600003612bdf5762ffffff19915050611b4f565b61291e858585612ea5565b6000612bf78260206135a7565b612c029060086135c0565b60ff16612c10858585612c2b565b901c949350505050565b600061159662ffffff198316602c60205b60008160ff16600003612c4057506000611b4f565b612c538460181c6001600160601b031690565b6001600160601b0316612c6960ff841685613298565b1115612cd157612c828460781c6001600160601b031690565b612c958560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610a05565b60208260ff161115612cf65760405163045df3f960e01b815260040160405180910390fd5b600882026000612d0f8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612d4c8660781c6001600160601b031690565b6001600160601b03169050612d6086612f1c565b84612d6b8784613298565b612d759190613298565b1115612d885762ffffff19915050612daa565b612d928582613298565b9050612da68364ffffffffff168286612bad565b9150505b949350505050565b600062ffffff1980841603612dda5760405163148d513360e21b815260040160405180910390fd5b612de383612f55565b15612e0157604051632ee0949160e11b815260040160405180910390fd5b6000612e168460181c6001600160601b031690565b6001600160601b031690506000612e368560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115612e575760206060fd5b8386858560045afa905080612e7f57604051632af1bd9b60e21b815260040160405180910390fd5b612e9a612e8c8860d81c90565b64ffffffffff168786612ea5565b979650505050505050565b60006060601883856001600160601b03821682148015612ecd575086816001600160601b0316145b612f065760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610a05565b96831b90961790911b90941790931b9392505050565b6000612f318260181c6001600160601b031690565b612f448360781c6001600160601b031690565b016001600160601b03169050919050565b6000612f618260d81c90565b64ffffffffff1664ffffffffff03612f7b57506001919050565b6000612f8683612f1c565b604051109392505050565b600060208284031215612fa357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612fd157600080fd5b813567ffffffffffffffff80821115612fec57612fec612faa565b604051601f8301601f19908116603f0116810190828211818310171561301457613014612faa565b8160405283815286602085880101111561302d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561305f57600080fd5b813567ffffffffffffffff81111561307657600080fd5b612daa84828501612fc0565b634e487b7160e01b600052602160045260246000fd5b60208101600383106130ba57634e487b7160e01b600052602160045260246000fd5b91905290565b600080600080600061046086880312156130d957600080fd5b853567ffffffffffffffff808211156130f157600080fd5b818801915088601f83011261310557600080fd5b81358181111561311457600080fd5b8960208260051b850101111561312957600080fd5b60209283019750955050860135925061044086018781111561314a57600080fd5b94979396509194604001933592915050565b6001600160a01b0381168114610fc457600080fd5b60006020828403121561318357600080fd5b8135611b4f8161315c565b803563ffffffff811681146131a257600080fd5b919050565b6000602082840312156131b957600080fd5b611b4f8261318e565b6000806000606084860312156131d757600080fd5b6131e08461318e565b925060208401359150604084013567ffffffffffffffff81111561320357600080fd5b61320f86828701612fc0565b9150509250925092565b60005b8381101561323457818101518382015260200161321c565b50506000910152565b60008151808452613255816020860160208601613219565b601f01601f19169290920160200192915050565b828152604060208201526000611b4c604083018461323d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561159657611596613282565b6000602082840312156132bd57600080fd5b5051919050565b6060815260006132d7606083018661323d565b82810360208401526132e9818661323d565b91505060018060a01b0383166040830152949350505050565b604081526000613315604083018561323d565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e1983360301811261335957600080fd5b9190910192915050565b6000808335601e1984360301811261337a57600080fd5b83018035915067ffffffffffffffff82111561339557600080fd5b6020019150368190038213156133aa57600080fd5b9250929050565b8183823760009101908152919050565b6000602082840312156133d357600080fd5b81518015158114611b4f57600080fd5b8181038181111561159657611596613282565b600063ffffffff80831681810361340f5761340f613282565b6001019392505050565b6000806040838503121561342c57600080fd5b505080516020909101519092909150565b848152836020820152826040820152608060608201526000613462608083018461323d565b9695505050505050565b602081526000611b4f602083018461323d565b6001600160a01b03841681526060602082018190526000906134a39083018561323d565b905063ffffffff83166040830152949350505050565b805160208083015191908110156134da576000198160200360031b1b821691505b50919050565b600063ffffffff808716835280861660208401525083604083015260806060830152613462608083018461323d565b838152821515602082015260606040820152600061291e606083018461323d565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c830152825161357881604c850160208701613219565b91909101604c01979650505050505050565b60006020828403121561359c57600080fd5b8151611b4f8161315c565b60ff828116828216039081111561159657611596613282565b60ff81811683821602908116908181146135dc576135dc613282565b509291505056fea2646970667358221220f02d2fe9b92aba6ab368fdc34506d2339c45cd80325d4a1d967312b89967484464736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x297 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x15A JUMPI DUP1 PUSH4 0xB95A2001 GT PUSH2 0xC1 JUMPI DUP1 PUSH4 0xD69F9D61 GT PUSH2 0x7A JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x8B2 JUMPI DUP1 PUSH4 0xD7D317B3 EQ PUSH2 0x8E6 JUMPI DUP1 PUSH4 0xD88BEDA2 EQ PUSH2 0x8FC JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x930 JUMPI DUP1 PUSH4 0xE0FED010 EQ PUSH2 0x950 JUMPI DUP1 PUSH4 0xFA31DE01 EQ PUSH2 0x970 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB95A2001 EQ PUSH2 0x7ED JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x820 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x835 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x855 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x873 JUMPI DUP1 PUSH4 0xD2A3CC71 EQ PUSH2 0x892 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA01892A5 GT PUSH2 0x113 JUMPI DUP1 PUSH4 0xA01892A5 EQ PUSH2 0x723 JUMPI DUP1 PUSH4 0xA792C29B EQ PUSH2 0x757 JUMPI DUP1 PUSH4 0xAD9C0C2E EQ PUSH2 0x777 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x78D JUMPI DUP1 PUSH4 0xB2F87643 EQ PUSH2 0x7AD JUMPI DUP1 PUSH4 0xB697F531 EQ PUSH2 0x7CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x64D JUMPI DUP1 PUSH4 0x8D3638F4 EQ PUSH2 0x662 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x695 JUMPI DUP1 PUSH4 0x98C9F2B9 EQ PUSH2 0x6B3 JUMPI DUP1 PUSH4 0x9D3117C7 EQ PUSH2 0x6E3 JUMPI DUP1 PUSH4 0x9FA92F9D EQ PUSH2 0x710 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x572386CA GT PUSH2 0x1FE JUMPI DUP1 PUSH4 0x65EAF11B GT PUSH2 0x1B7 JUMPI DUP1 PUSH4 0x65EAF11B EQ PUSH2 0x5AD JUMPI DUP1 PUSH4 0x68742DA6 EQ PUSH2 0x5C2 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x5E2 JUMPI DUP1 PUSH4 0x6B04A933 EQ PUSH2 0x5F8 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x618 JUMPI DUP1 PUSH4 0x7850B020 EQ PUSH2 0x62D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x572386CA EQ PUSH2 0x4AC JUMPI DUP1 PUSH4 0x579C1618 EQ PUSH2 0x4DC JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x4F2 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x512 JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x531 JUMPI DUP1 PUSH4 0x6159ADA1 EQ PUSH2 0x57D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3CF52FFB GT PUSH2 0x250 JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x3E5 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x3FA JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x40F JUMPI DUP1 PUSH4 0x508A109B EQ PUSH2 0x42F JUMPI DUP1 PUSH4 0x5190BC53 EQ PUSH2 0x44F JUMPI DUP1 PUSH4 0x52A9674B EQ PUSH2 0x478 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x2A3 JUMPI DUP1 PUSH4 0x1EEAABEA EQ PUSH2 0x2F1 JUMPI DUP1 PUSH4 0x25E3BEDA EQ PUSH2 0x313 JUMPI DUP1 PUSH4 0x2BB1AE7C EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0x2BBD59CA EQ PUSH2 0x368 JUMPI DUP1 PUSH4 0x301F07C3 EQ PUSH2 0x3A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x29E JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D7 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x30C CALLDATASIZE PUSH1 0x4 PUSH2 0x2F91 JUMP JUMPDEST PUSH2 0x99E JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x31F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E8 JUMP JUMPDEST PUSH2 0x311 PUSH2 0x363 CALLDATASIZE PUSH1 0x4 PUSH2 0x304D JUMP JUMPDEST PUSH2 0xA48 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x398 PUSH2 0x383 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F91 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2E8 SWAP2 SWAP1 PUSH2 0x3098 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x3C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F91 JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x347 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x406 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0xBEB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x41B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x42A CALLDATASIZE PUSH1 0x4 PUSH2 0x304D JUMP JUMPDEST PUSH2 0xC28 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x43B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x44A CALLDATASIZE PUSH1 0x4 PUSH2 0x30C0 JUMP JUMPDEST PUSH2 0xCCE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x46A CALLDATASIZE PUSH1 0x4 PUSH2 0x3171 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x484 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D7 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x4C7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F91 JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x50D CALLDATASIZE PUSH1 0x4 PUSH2 0x3171 JUMP JUMPDEST PUSH2 0xF90 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3D5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x53D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x565 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x589 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x598 CALLDATASIZE PUSH1 0x4 PUSH2 0x3171 JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0xFC7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x5DD CALLDATASIZE PUSH1 0x4 PUSH2 0x3171 JUMP JUMPDEST PUSH2 0x1050 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x347 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x604 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x613 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F91 JUMP JUMPDEST PUSH2 0x10CD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x624 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x1198 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x639 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x648 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F91 JUMP JUMPDEST PUSH2 0x11C3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x659 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x11F7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x66E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x0 PUSH2 0x2D7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x565 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x6CE CALLDATASIZE PUSH1 0x4 PUSH2 0x2F91 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x6FE CALLDATASIZE PUSH1 0x4 PUSH2 0x2F91 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x71C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH2 0x565 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x72F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x565 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x763 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x565 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x783 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x799 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x7A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3171 JUMP JUMPDEST PUSH2 0x12AB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x7C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3171 JUMP JUMPDEST PUSH2 0x1349 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x7E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3171 JUMP JUMPDEST PUSH2 0x13C5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D7 PUSH2 0x808 CALLDATASIZE PUSH1 0x4 PUSH2 0x31A7 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x82C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x1444 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x841 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x565 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x861 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x565 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x87F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x3D5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x89E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x8AD CALLDATASIZE PUSH1 0x4 PUSH2 0x3171 JUMP JUMPDEST PUSH2 0x14B4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x565 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x908 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x93C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D5 PUSH2 0x94B CALLDATASIZE PUSH1 0x4 PUSH2 0x3171 JUMP JUMPDEST PUSH2 0x158B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x311 PUSH2 0x96B CALLDATASIZE PUSH1 0x4 PUSH2 0x2F91 JUMP JUMPDEST PUSH2 0x159C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x97C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x990 PUSH2 0x98B CALLDATASIZE PUSH1 0x4 PUSH2 0x31C2 JUMP JUMPDEST PUSH2 0x15D0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2E8 SWAP3 SWAP2 SWAP1 PUSH2 0x3269 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9C9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD DUP2 SUB PUSH2 0xA0E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2164656C6179426C6F636B73 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLER DUP2 MSTORE DUP2 SWAP1 PUSH32 0x8BD16320F3B60336ED5FD2A770EB7453E7E71CFEF4462ADDFFD7AE9DFE201C8E SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x8 SSTORE JUMP JUMPDEST PUSH2 0xA50 PUSH2 0x179F JUMP JUMPDEST NUMBER PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD PUSH2 0xA61 SWAP2 SWAP1 PUSH2 0x3298 JUMP JUMPDEST GT ISZERO PUSH2 0xA80 JUMPI PUSH1 0x40 MLOAD PUSH4 0x46CF2AF1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST NUMBER PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB0B SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xB61 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1C9BDBDD08185B1C9958591E481CD95B9D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xB76 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH2 0xB91 DUP2 DUP5 PUSH2 0x17EC JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 SWAP1 PUSH2 0xBDE SWAP1 DUP4 SWAP1 DUP7 SWAP1 CALLER SWAP1 PUSH2 0x32C4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC16 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC1E PUSH2 0x1911 JUMP JUMPDEST PUSH2 0xC26 PUSH2 0x1961 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xC89 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA05 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0xC92 DUP2 PUSH2 0x19B6 JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0xCC3 SWAP3 SWAP2 SWAP1 PUSH2 0x3302 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xCD6 PUSH2 0x179F JUMP JUMPDEST PUSH2 0xCDE PUSH2 0x1A56 JUMP JUMPDEST DUP4 PUSH2 0xD15 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x2170726F6F6673 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD2A JUMPI PUSH2 0xD2A PUSH2 0x332C JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD3C SWAP2 SWAP1 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0xD46 SWAP1 DUP1 PUSH2 0x3363 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD54 SWAP3 SWAP2 SWAP1 PUSH2 0x33B1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xDBB DUP3 DUP9 DUP9 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD77 JUMPI PUSH2 0xD77 PUSH2 0x332C JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD89 SWAP2 SWAP1 PUSH2 0x3342 JUMP JUMPDEST PUSH1 0x20 ADD DUP10 DUP10 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD9F JUMPI PUSH2 0xD9F PUSH2 0x332C JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xDB1 SWAP2 SWAP1 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0x420 ADD CALLDATALOAD PUSH2 0x1AAF JUMP JUMPDEST SWAP1 POP PUSH2 0xDC9 DUP2 DUP7 DUP7 DUP7 PUSH2 0x1B56 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP7 SWAP1 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xEEF JUMPI DUP9 DUP9 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xE0E JUMPI PUSH2 0xE0E PUSH2 0x332C JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE20 SWAP2 SWAP1 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0xE2A SWAP1 DUP1 PUSH2 0x3363 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE38 SWAP3 SWAP2 SWAP1 PUSH2 0x33B1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP4 POP PUSH1 0x0 PUSH2 0xE8D DUP6 DUP12 DUP12 DUP6 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xE60 JUMPI PUSH2 0xE60 PUSH2 0x332C JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE72 SWAP2 SWAP1 PUSH2 0x3342 JUMP JUMPDEST PUSH1 0x20 ADD DUP13 DUP13 DUP7 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xD9F JUMPI PUSH2 0xD9F PUSH2 0x332C JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0xECC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x85CDA185C9959149BDBDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE ADD PUSH2 0xDE8 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xF7B JUMPI PUSH2 0xF72 DUP10 DUP10 DUP4 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xF1C JUMPI PUSH2 0xF1C PUSH2 0x332C JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xF2E SWAP2 SWAP1 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0xF38 SWAP1 DUP1 PUSH2 0x3363 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1C51 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xEF3 JUMP JUMPDEST POP POP POP POP PUSH2 0xF89 PUSH1 0x1 PUSH1 0x7 SSTORE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xFBB JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFC4 DUP2 PUSH2 0x1F2E JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1027 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x104B SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x107B JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SELFBALANCE PUSH2 0x1086 DUP3 DUP3 PUSH2 0x1F97 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEAFF4B37086828766AD3268786972C0CD24259D4C87A80F9D3963A3C3D999B0D DUP3 PUSH1 0x40 MLOAD PUSH2 0x10C1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10F8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1100 PUSH2 0x1911 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SUB PUSH2 0x1155 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x616767726567617465526F6F742021657869737473 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xF51534ECF10A58DB36CE4F5180F59DEDDF3B3EB7C5E7454E602C2F80A40CC739 SWAP1 PUSH2 0xCC3 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC26 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x11EE JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFC4 DUP2 PUSH2 0x20B5 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1240 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1264 SWAP2 SWAP1 PUSH2 0x33C1 JUMP JUMPDEST PUSH2 0x129B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0x12A3 PUSH2 0x179F JUMP JUMPDEST PUSH2 0xC26 PUSH2 0x20F6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x12D6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x12F4 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1312 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x1340 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFC4 DUP2 PUSH2 0x2139 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1374 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x384859C5EF5FAFAC31E8BC92CE7FB48B1F2C74C4DD5E212EB84EC202FA5D9FAD SWAP2 ADD PUSH2 0xCC3 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x13F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xD65ECA5D561D3A4568C87B9B13CED4AB52A69EDADFDFDB22D76BC595F36D7D87 SWAP2 ADD PUSH2 0xCC3 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x146F JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x1481 SWAP2 SWAP1 PUSH2 0x33E3 JUMP JUMPDEST GT PUSH2 0x149F JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0xC26 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2187 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x14DF JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0x153D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616C72656164792077617463686572206D616E61676572000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC16D059E43D7F8E29CCB4E001A2F249D3C59E274925D6A6BC3912943441D9F6C SWAP1 PUSH1 0x20 ADD PUSH2 0xCC3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1596 DUP3 PUSH2 0x21EC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x15C7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xFC4 DUP2 PUSH2 0x2218 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x60 SWAP1 PUSH1 0xFF AND PUSH2 0x1621 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x8585B1B1BDDDB1A5CDD1959 PUSH1 0xA2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP3 PUSH2 0x164A DUP4 PUSH2 0x33F6 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH4 0xFFFFFFFF AND MUL OR SWAP1 SSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0x16A9 PUSH32 0x0 PUSH2 0x16A0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP5 DUP11 DUP11 DUP11 PUSH2 0x2296 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH4 0x2D287E43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2D287E43 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x171F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1743 SWAP2 SWAP1 PUSH2 0x3419 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH32 0x40F08EE347FC927AE45902EDC87DEBB024AAB1A311943731968607F603F2152F DUP4 PUSH2 0x1775 PUSH1 0x1 DUP5 PUSH2 0x33E3 JUMP JUMPDEST DUP5 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1787 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x343D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP SWAP1 SWAP9 SWAP2 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xC26 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x182C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 PUSH4 0x4FF746F6 PUSH1 0xE0 SHL DUP4 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1847 SWAP2 SWAP1 PUSH2 0x346C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH1 0x3 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND SWAP2 PUSH4 0x3DBB202B SWAP2 AND DUP4 PUSH2 0x18BC DUP7 PUSH2 0x22CE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x18DA SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x347F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1908 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xC26 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0x1969 PUSH2 0x1911 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x19CB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x21EC JUMP JUMPDEST PUSH2 0x1A0A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x10B6B4B93937B921B7B73732B1BA37B9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0x1A45 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0xFC4 PUSH2 0x1A51 DUP3 PUSH2 0x34B9 JUMP JUMPDEST PUSH2 0x232C JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SLOAD SUB PUSH2 0x1AA8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1AD5 JUMPI PUSH2 0x1AD5 PUSH2 0x3082 JUMP JUMPDEST EQ PUSH2 0x1B18 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x214D6573736167655374617475732E4E6F6E65 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0x1B4C DUP5 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x2455 SWAP1 POP JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1C4B JUMPI PUSH2 0x1B75 DUP4 PUSH2 0x27A3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1BAB DUP6 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x2455 SWAP1 POP JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0x1BF2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1A5B9D985B1A59081A5B989BDD5B99149BDBDD PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP5 SWAP1 DUP7 SWAP1 PUSH32 0x7EC1EA51FE3DB53E55ED9D922854BC2156F467FF2F87D74E2086DAE2C84A88A8 SWAP1 PUSH2 0x1C41 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1C5E DUP4 DUP3 PUSH2 0x2903 JUMP JUMPDEST SWAP1 POP PUSH4 0xFFFFFFFF PUSH32 0x0 AND PUSH2 0x1C96 PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x2927 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x1CD8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B232B9BA34B730BA34B7B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CE9 PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x293C JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1D10 JUMPI PUSH2 0x1D10 PUSH2 0x3082 JUMP JUMPDEST EQ PUSH2 0x1D47 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x10B83937BB32B7 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x2 OR SWAP1 SSTORE PUSH1 0x1 PUSH2 0x1DAC PUSH32 0x0 PUSH32 0x0 PUSH2 0x3298 JUMP JUMPDEST PUSH2 0x1DB6 SWAP2 SWAP1 PUSH2 0x33E3 JUMP JUMPDEST GAS GT PUSH2 0x1DED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA05 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x21676173 PUSH1 0xE0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DFE PUSH3 0xFFFFFF NOT DUP5 AND PUSH2 0x2985 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH32 0x0 SWAP2 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x1E59 PUSH3 0xFFFFFF NOT DUP9 AND PUSH2 0x2996 JUMP JUMPDEST PUSH2 0x1E68 PUSH3 0xFFFFFF NOT DUP10 AND PUSH2 0x29AA JUMP JUMPDEST PUSH2 0x1E77 PUSH3 0xFFFFFF NOT DUP11 AND PUSH2 0x29BF JUMP JUMPDEST PUSH2 0x1E94 PUSH2 0x1E89 PUSH3 0xFFFFFF NOT DUP13 AND PUSH2 0x29D4 JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND PUSH2 0x2A02 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1EA7 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x34E0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xAB2DC3F5 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 POP PUSH2 0x1EE1 DUP6 DUP6 PUSH1 0x0 DUP7 DUP6 PUSH2 0x2A4B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP10 POP SWAP3 POP PUSH32 0xD42DE95A9B26F1BE134C8ECCE389DC4FCFA18753D01661B7B361233569E8FE48 SWAP1 PUSH2 0x1F1A SWAP1 DUP9 SWAP1 DUP12 SWAP1 DUP7 SWAP1 PUSH2 0x350F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x1FE7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2034 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2039 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x20B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA05 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x10 SSTORE JUMP JUMPDEST PUSH2 0x20FE PUSH2 0x179F JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1999 CALLER SWAP1 JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1596 PUSH32 0x0 DUP4 PUSH2 0x2AD6 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 SUB PUSH2 0x225B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x85B995DC81C985D19481B1A5B5A5D PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0x8E7FA5E406CB856AAB05575E45EA011C6748376CC1B5229E3D67B92986406A15 SWAP2 ADD PUSH2 0xCC3 JUMP JUMPDEST PUSH1 0x60 DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x22B3 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3530 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x2310 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH2 0x1596 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2327 SWAP2 SWAP1 PUSH2 0x32AB JUMP JUMPDEST PUSH2 0x2B97 JUMP JUMPDEST DUP1 PUSH2 0x236A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x6E657720726F6F7420656D707479 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x23BD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x726F6F7420616C72656164792070656E64696E67 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2412 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x3937B7BA1030B63932B0B23C90383937BB32B7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 NUMBER SWAP1 SSTORE MLOAD PUSH32 0x84EF18531155AFDB0E64FF905D67044AE3AAC63A6FBA4661CFD9C4C14F289BC8 SWAP1 PUSH2 0xCC3 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x5 DUP3 DUP2 SHL DUP3 AND SWAP5 DUP6 MSTORE DUP4 MLOAD SWAP5 DUP3 SUB SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x40 PUSH1 0x0 DUP2 DUP2 KECCAK256 PUSH1 0x2 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x4 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP3 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x8 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x10 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 DUP5 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 DUP4 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 SWAP1 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xE0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x100 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x200 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x120 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x400 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x140 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x800 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x160 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x1000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x2000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x4000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1C0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x8000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1E0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH3 0x10000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x20000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x220 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x40000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x240 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x80000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x260 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x100000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x280 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x200000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x400000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x800000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2E0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x1000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x300 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x2000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x320 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x4000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x340 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x8000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x360 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x10000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x380 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x20000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x40000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x80000000 SWAP1 SWAP5 AND ISZERO SWAP1 SWAP6 SHL SWAP2 DUP3 SWAP1 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x3E0 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x27E6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x616767726567617465526F6F7420656D707479 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2800 JUMPI POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x2856 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x1859D9DC9959D85D19549BDBDD0808595E1A5CDD PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x2863 DUP3 NUMBER PUSH2 0x33E3 JUMP JUMPDEST LT ISZERO PUSH2 0x28B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616767726567617465526F6F7420217665726966696564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP4 SWAP2 PUSH32 0x36B314ABA9F663B4D3EF3288AE489341CC5E6A2725A05FA2B72DF7A27E03F42A SWAP2 LOG2 POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0x291E PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x2BAD JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1596 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x28 PUSH1 0x4 PUSH2 0x2BEA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2952 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2972 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 SWAP2 KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1596 PUSH2 0x2993 DUP4 PUSH2 0x2C1A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1596 PUSH3 0xFFFFFF NOT DUP4 AND DUP3 PUSH1 0x4 PUSH2 0x2BEA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1596 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x24 PUSH1 0x4 PUSH2 0x2BEA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1596 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x4 PUSH1 0x20 PUSH2 0x2C2B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1596 PUSH1 0x4C PUSH2 0x29F2 DUP2 PUSH1 0x18 DUP7 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x33E3 JUMP JUMPDEST PUSH3 0xFFFFFF NOT DUP6 AND SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2D36 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x2A1A DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x40 MLOAD SWAP2 POP DUP2 SWAP3 POP PUSH2 0x2A3A DUP5 DUP4 PUSH1 0x20 ADD PUSH2 0x2DB2 JUMP JUMPDEST POP DUP2 DUP2 ADD PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH2 0xFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2A71 JUMPI PUSH2 0x2A71 PUSH2 0x2FAA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2A9B JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP8 MLOAD PUSH1 0x20 DUP10 ADD DUP12 DUP15 DUP15 CALL SWAP2 POP RETURNDATASIZE SWAP3 POP DUP7 DUP4 GT ISZERO PUSH2 0x2ABC JUMPI DUP7 SWAP3 POP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EQ PUSH2 0x2B1A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x21627269646765 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6E296E45 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B62 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B86 SWAP2 SWAP1 PUSH2 0x358A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x10 SLOAD DUP3 GT ISZERO PUSH2 0x2BA9 JUMPI PUSH1 0x10 SLOAD SWAP2 POP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2BBA DUP4 DUP6 PUSH2 0x3298 JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x2BCA JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x2BDF JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x1B4F JUMP JUMPDEST PUSH2 0x291E DUP6 DUP6 DUP6 PUSH2 0x2EA5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BF7 DUP3 PUSH1 0x20 PUSH2 0x35A7 JUMP JUMPDEST PUSH2 0x2C02 SWAP1 PUSH1 0x8 PUSH2 0x35C0 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x2C10 DUP6 DUP6 DUP6 PUSH2 0x2C2B JUMP JUMPDEST SWAP1 SHR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1596 PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x2C PUSH1 0x20 JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0x2C40 JUMPI POP PUSH1 0x0 PUSH2 0x1B4F JUMP JUMPDEST PUSH2 0x2C53 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x2C69 PUSH1 0xFF DUP5 AND DUP6 PUSH2 0x3298 JUMP JUMPDEST GT ISZERO PUSH2 0x2CD1 JUMPI PUSH2 0x2C82 DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2C95 DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA05 JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x2CF6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0x2D0F DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT DUP5 ADD SAR SWAP2 SWAP1 SWAP6 ADD MLOAD AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2D4C DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH2 0x2D60 DUP7 PUSH2 0x2F1C JUMP JUMPDEST DUP5 PUSH2 0x2D6B DUP8 DUP5 PUSH2 0x3298 JUMP JUMPDEST PUSH2 0x2D75 SWAP2 SWAP1 PUSH2 0x3298 JUMP JUMPDEST GT ISZERO PUSH2 0x2D88 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x2DAA JUMP JUMPDEST PUSH2 0x2D92 DUP6 DUP3 PUSH2 0x3298 JUMP JUMPDEST SWAP1 POP PUSH2 0x2DA6 DUP4 PUSH5 0xFFFFFFFFFF AND DUP3 DUP7 PUSH2 0x2BAD JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFFFFFF NOT DUP1 DUP5 AND SUB PUSH2 0x2DDA JUMPI PUSH1 0x40 MLOAD PUSH4 0x148D5133 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2DE3 DUP4 PUSH2 0x2F55 JUMP JUMPDEST ISZERO PUSH2 0x2E01 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EE09491 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2E16 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2E36 DUP6 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD SWAP2 POP DUP6 DUP3 GT ISZERO PUSH2 0x2E57 JUMPI PUSH1 0x20 PUSH1 0x60 REVERT JUMPDEST DUP4 DUP7 DUP6 DUP6 PUSH1 0x4 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x2E7F JUMPI PUSH1 0x40 MLOAD PUSH4 0x2AF1BD9B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2E9A PUSH2 0x2E8C DUP9 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND DUP8 DUP7 PUSH2 0x2EA5 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0x2ECD JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0x2F06 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA05 JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F31 DUP3 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2F44 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F61 DUP3 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH5 0xFFFFFFFFFF SUB PUSH2 0x2F7B JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F86 DUP4 PUSH2 0x2F1C JUMP JUMPDEST PUSH1 0x40 MLOAD LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2FA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2FD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2FEC JUMPI PUSH2 0x2FEC PUSH2 0x2FAA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x3014 JUMPI PUSH2 0x3014 PUSH2 0x2FAA JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x302D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x305F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3076 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2DAA DUP5 DUP3 DUP6 ADD PUSH2 0x2FC0 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH2 0x30BA JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x460 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x30D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x30F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3105 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x3114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x3129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 DUP4 ADD SWAP8 POP SWAP6 POP POP DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x440 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x314A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x40 ADD SWAP4 CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xFC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3183 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1B4F DUP2 PUSH2 0x315C JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x31A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x31B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B4F DUP3 PUSH2 0x318E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x31D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31E0 DUP5 PUSH2 0x318E JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3203 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x320F DUP7 DUP3 DUP8 ADD PUSH2 0x2FC0 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3234 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x321C JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x3255 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3219 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1B4C PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x323D JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x1596 JUMPI PUSH2 0x1596 PUSH2 0x3282 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x32BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x32D7 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x323D JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x32E9 DUP2 DUP7 PUSH2 0x323D JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3315 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x323D JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x43E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3359 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x337A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x3395 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x33AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1B4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x1596 JUMPI PUSH2 0x1596 PUSH2 0x3282 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x340F JUMPI PUSH2 0x340F PUSH2 0x3282 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x342C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x3462 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x323D JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1B4F PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x323D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x34A3 SWAP1 DUP4 ADD DUP6 PUSH2 0x323D JUMP JUMPDEST SWAP1 POP PUSH4 0xFFFFFFFF DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x34DA JUMPI PUSH1 0x0 NOT DUP2 PUSH1 0x20 SUB PUSH1 0x3 SHL SHL DUP3 AND SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3462 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x323D JUMP JUMPDEST DUP4 DUP2 MSTORE DUP3 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x291E PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x323D JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP1 DUP10 PUSH1 0xE0 SHL AND DUP4 MSTORE DUP8 PUSH1 0x4 DUP5 ADD MSTORE DUP1 DUP8 PUSH1 0xE0 SHL AND PUSH1 0x24 DUP5 ADD MSTORE DUP1 DUP7 PUSH1 0xE0 SHL AND PUSH1 0x28 DUP5 ADD MSTORE POP DUP4 PUSH1 0x2C DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x3578 DUP2 PUSH1 0x4C DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x3219 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x4C ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x359C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1B4F DUP2 PUSH2 0x315C JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x1596 JUMPI PUSH2 0x1596 PUSH2 0x3282 JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND MUL SWAP1 DUP2 AND SWAP1 DUP2 DUP2 EQ PUSH2 0x35DC JUMPI PUSH2 0x35DC PUSH2 0x3282 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CREATE 0x2D 0x2F 0xE9 0xB9 0x2A 0xBA PUSH11 0xB368FDC34506D2339C45CD DUP1 ORIGIN 0x5D 0x4A SAR SWAP7 PUSH20 0x12B89967484464736F6C63430008110033000000 ","sourceMap":"314:1948:132:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1587:37:116;;;;;;;;;;;;;;;;;;188:10:181;176:23;;;158:42;;146:2;131:18;1587:37:116;;;;;;;;8274:213:120;;;;;;;;;;-1:-1:-1;8274:213:120;;;;;:::i;:::-;;:::i;:::-;;3780:36;;;;;;;;;;;;;;;;;;542:25:181;;;530:2;515:18;3780:36:120;396:177:181;11079:368:120;;;;;;:::i;:::-;;:::i;5679:49::-;;;;;;;;;;-1:-1:-1;5679:49:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;4723:52::-;;;;;;;;;;-1:-1:-1;4723:52:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2592:14:181;;2585:22;2567:41;;2555:2;2540:18;4723:52:120;2427:187:181;1949:112:168;;;;;;;;;;-1:-1:-1;2029:27:168;;1949:112;;1810:70:114;;;;;;;;;;;;;:::i;4262:148:116:-;;;;;;;;;;-1:-1:-1;4262:148:116;;;;;:::i;:::-;;:::i;14590:2124:120:-;;;;;;;;;;-1:-1:-1;14590:2124:120;;;;;:::i;:::-;;:::i;805:125:117:-;;;;;;;;;;-1:-1:-1;805:125:117;;;;;:::i;:::-;-1:-1:-1;;;;;891:34:117;920:4;891:34;;805:125;1268:30:116;;;;;;;;;;;;;;;5237:48:120;;;;;;;;;;-1:-1:-1;5237:48:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;853:30:167;;;;;;;;;;;;;;;;3939:119:116;;;;;;;;;;-1:-1:-1;3939:119:116;;;;;:::i;:::-;;:::i;1615:84:51:-;;;;;;;;;;-1:-1:-1;1685:7:51;;-1:-1:-1;;;1685:7:51;;;;1615:84;;1451:37:116;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4108:32:181;;;4090:51;;4078:2;4063:18;1451:37:116;3944:203:181;5424:50:120;;;;;;;;;;-1:-1:-1;5424:50:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;10615:87;;;;;;;;;;;;;:::i;9896:185::-;;;;;;;;;;-1:-1:-1;9896:185:120;;;;;:::i;:::-;;:::i;2151:79:168:-;;;;;;;;;;-1:-1:-1;1530:6:168;2151:79;;9312:328:120;;;;;;;;;;-1:-1:-1;9312:328:120;;;;;:::i;:::-;;:::i;1230:98:132:-;;;;;;;;;;;;;:::i;860:83:118:-;;;;;;;;;;-1:-1:-1;860:83:118;;;;;:::i;:::-;;:::i;2321:71:114:-;;;;;;;;;;;;;:::i;10853:87:120:-;;;;;;;;;;-1:-1:-1;10929:6:120;10853:87;;1641:79:168;;;;;;;;;;-1:-1:-1;1687:7:168;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;5017:50:120;;;;;;;;;;-1:-1:-1;5017:50:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;4312:56;;;;;;;;;;-1:-1:-1;4312:56:120;;;;;:::i;:::-;;;;;;;;;;;;;;715:86:117;;;;;;;;;;-1:-1:-1;790:4:117;715:86;;3501:41:120;;;;;;;;;;;;;;;911:36:114;;;;;;;;;;-1:-1:-1;911:36:114;;;;-1:-1:-1;;;;;911:36:114;;;3276:26:120;;;;;;;;;;;;;;;;3321:420:168;;;;;;;;;;-1:-1:-1;3321:420:168;;;;;:::i;:::-;;:::i;8018:134:120:-;;;;;;;;;;-1:-1:-1;8018:134:120;;;;;:::i;:::-;;:::i;7757:129::-;;;;;;;;;;-1:-1:-1;7757:129:120;;;;;:::i;:::-;;:::i;5551:39::-;;;;;;;;;;-1:-1:-1;5551:39:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;4404:539:168;;;;;;;;;;;;;:::i;1705:30:116:-;;;;;;;;;;-1:-1:-1;1705:30:116;;;;-1:-1:-1;;;;;1705:30:116;;;1792:85:168;;;;;;;;;;-1:-1:-1;1863:9:168;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;;;;;;;;;;-1:-1:-1;3097:4:168;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;1457:263:114;;;;;;;;;;-1:-1:-1;1457:263:114;;;;;:::i;:::-;;:::i;1363:28:116:-;;;;;;;;;;;;;;;959::167;;;;;;;;;;;;;;;;3640:36:120;;;;;;;;;;;;;;;4490:107:116;;;;;;;;;;-1:-1:-1;4490:107:116;;;;;:::i;:::-;;:::i;8892::120:-;;;;;;;;;;-1:-1:-1;8892:107:120;;;;;:::i;:::-;;:::i;11954:1067::-;;;;;;;;;;-1:-1:-1;11954:1067:120;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;8274:213::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;8367:11:120::1;;8351:12;:27:::0;8343:52:::1;;;::::0;-1:-1:-1;;;8343:52:120;;6873:2:181;8343:52:120::1;::::0;::::1;6855:21:181::0;6912:2;6892:18;;;6885:30;-1:-1:-1;;;6931:18:181;;;6924:42;6983:18;;8343:52:120::1;;;;;;;;;8406:44;::::0;8439:10:::1;4090:51:181::0;;8425:12:120;;8406:44:::1;::::0;4078:2:181;4063:18;8406:44:120::1;;;;;;;8456:11;:26:::0;8274:213::o;11079:368::-;1239:19:51;:17;:19::i;:::-;1418:12:167::1;1400:15;;1384:13;;:31;;;;:::i;:::-;:46;1380:124;;;1447:50;;-1:-1:-1::0;;;1447:50:167::1;;;;;;;;;;;1380:124;1595:12;1579:13;:28;;;;11169:12:120::2;11184:6;-1:-1:-1::0;;;;;11184:11:120::2;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11211:22;::::0;;;:16:::2;:22;::::0;;;;;11169:28;;-1:-1:-1;11211:22:120::2;;:31;11203:61;;;::::0;-1:-1:-1;;;11203:61:120;;7665:2:181;11203:61:120::2;::::0;::::2;7647:21:181::0;7704:2;7684:18;;;7677:30;-1:-1:-1;;;7723:18:181;;;7716:47;7780:18;;11203:61:120::2;7463:341:181::0;11203:61:120::2;11270:18;11308:4;11291:22;;;;;;7938:19:181::0;;7982:2;7973:12;;7809:182;11291:22:120::2;;;;;;;;;;;;;11270:43;;11319:33;11332:5;11339:12;11319;:33::i;:::-;11358:22;::::0;;;:16:::2;:22;::::0;;;;;;:29;;-1:-1:-1;;11358:29:120::2;11383:4;11358:29;::::0;;11398:44;::::2;::::0;::::2;::::0;11410:5;;11417:12;;11431:10:::2;::::0;11398:44:::2;:::i;:::-;;;;;;;;11163:284;;11079:368:::0;:::o;1810:70:114:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1486:16:51::1;:14;:16::i;:::-;1865:10:114::2;:8;:10::i;:::-;1810:70::o:0;4262:148:116:-;1891:10;-1:-1:-1;;;;;1905:3:116;1891:17;;1883:34;;;;-1:-1:-1;;;1883:34:116;;;;;;8677:2:181;8659:21;;;8716:1;8696:18;;;8689:29;-1:-1:-1;;;8749:2:181;8734:18;;8727:34;8793:2;8778:18;;8475:327;1883:34:116;4337:22:::1;4353:5;4337:15;:22::i;:::-;4370:35;4387:5;4394:10;4370:35;;;;;;;:::i;:::-;;;;;;;;4262:148:::0;:::o;14590:2124:120:-;1239:19:51;:17;:19::i;:::-;2261:21:52::1;:19;:21::i;:::-;14839:18:120::0;14831:38:::2;;;::::0;-1:-1:-1;;;14831:38:120;;9328:2:181;14831:38:120::2;::::0;::::2;9310:21:181::0;9367:1;9347:18;;;9340:29;-1:-1:-1;;;9385:18:181;;;9378:37;9432:18;;14831:38:120::2;9126:330:181::0;14831:38:120::2;15122:20;15155:7;;15163:1;15155:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;15145:29;;;;;;;:::i;:::-;;;;;;;;15122:52;;15304:20;15327:69;15348:12;15362:7;;15370:1;15362:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:15;;15379:7;;15387:1;15379:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:16;;;15327:20;:69::i;:::-;15304:92;;15485:79;15502:12;15516:14;15532;15548:15;15485:16;:79::i;:::-;15667:22;::::0;;;:8:::2;:22;::::0;;;;:45;;-1:-1:-1;;15667:45:120::2;15692:20;15667:45:::0;;::::2;::::0;;;15852:7;;15872:441:::2;15895:3;15891:1;:7;;;15872:441;;;15935:7;;15943:1;15935:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;15925:29;;;;;;;:::i;:::-;;;;;;;;15910:44;;15962:23;15988:69;16009:12;16023:7;;16031:1;16023:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:15;;16040:7;;16048:1;16040:10;;;;;;;;;:::i;15988:69::-;15962:95;;16157:12;16138:15;:31;16130:55;;;::::0;-1:-1:-1;;;16130:55:120;;10927:2:181;16130:55:120::2;::::0;::::2;10909:21:181::0;10966:2;10946:18;;;10939:30;-1:-1:-1;;;10985:18:181;;;10978:41;11036:18;;16130:55:120::2;10725:335:181::0;16130:55:120::2;-1:-1:-1::0;16221:22:120::2;::::0;;;:8:::2;:22;::::0;;;;:45;;-1:-1:-1;;16221:45:120::2;16246:20;16221:45:::0;;::::2;::::0;;;16295:3:::2;15872:441;;;;16604:8;16599:111;16622:3;16618:1;:7;;;16599:111;;;16637:27;16645:7;;16653:1;16645:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;16637:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;16637:7:120::2;::::0;-1:-1:-1;;;16637:27:120:i:2;:::-;-1:-1:-1::0;16692:3:120::2;;16599:111;;;;14783:1931;;;2303:20:52::1;1716:1:::0;2809:7;:22;2629:209;2303:20:::1;14590:2124:120::0;;;;;:::o;3939:119:116:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4016:37:116::1;4036:16;4016:19;:37::i;:::-;3939:119:::0;:::o;10615:87:120:-;10662:7;10684:6;-1:-1:-1;;;;;10684:11:120;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10677:20;;10615:87;:::o;9896:185::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;9972:21:120::1;9999:39;10025:3:::0;9972:21;9999:17:::1;:39::i;:::-;10064:3;-1:-1:-1::0;;;;;10049:27:120::1;;10069:6;10049:27;;;;542:25:181::0;;530:2;515:18;;396:177;10049:27:120::1;;;;;;;;9949:132;9896:185:::0;:::o;9312:328::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1486:16:51::1;:14;:16::i;:::-;9467:38:120::2;::::0;;;:21:::2;:38;::::0;;;;;:43;;9459:77:::2;;;::::0;-1:-1:-1;;;9459:77:120;;11267:2:181;9459:77:120::2;::::0;::::2;11249:21:181::0;11306:2;11286:18;;;11279:30;-1:-1:-1;;;11325:18:181;;;11318:51;11386:18;;9459:77:120::2;11065:345:181::0;9459:77:120::2;9549:38;::::0;;;:21:::2;:38;::::0;;;;;9542:45;;;;9598:37;::::2;::::0;::::2;::::0;9571:15;542:25:181;;530:2;515:18;;396:177;1230:98:132;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;860:83:118;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;919:19:118::1;930:7;919:10;:19::i;2321:71:114:-:0;1251:14;;;:36;;-1:-1:-1;;;1251:36:114;;1276:10;1251:36;;;4090:51:181;;;;-1:-1:-1;;;;;1251:14:114;;:24;;4063:18:181;;1251:36:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1243:57;;;;-1:-1:-1;;;1243:57:114;;11899:2:181;1243:57:114;;;11881:21:181;11938:1;11918:18;;;11911:29;-1:-1:-1;;;11956:18:181;;;11949:38;12004:18;;1243:57:114;11697:331:181;1243:57:114;1239:19:51::1;:17;:19::i;:::-;2379:8:114::2;:6;:8::i;3321:420:168:-:0;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;8018:134:120:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;-1:-1:-1;;;;;8087:27:120;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;8080:34;;-1:-1:-1;;8080:34:120::1;::::0;;8125:22;;4090:51:181;;;8125:22:120::1;::::0;4063:18:181;8125:22:120::1;3944:203:181::0;7757:129:120;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;-1:-1:-1;;;;;7816:27:120;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;7816:34:120::1;7846:4;7816:34;::::0;;7861:20;;4090:51:181;;;7861:20:120::1;::::0;4063:18:181;7861:20:120::1;3944:203:181::0;4404:539:168;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;1457:263:114:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1569:14:114::1;::::0;-1:-1:-1;;;;;1569:14:114;;::::1;1542:42:::0;;::::1;::::0;1534:78:::1;;;::::0;-1:-1:-1;;;1534:78:114;;12368:2:181;1534:78:114::1;::::0;::::1;12350:21:181::0;12407:2;12387:18;;;12380:30;12446:25;12426:18;;;12419:53;12489:18;;1534:78:114::1;12166:347:181::0;1534:78:114::1;1618:14;:48:::0;;-1:-1:-1;;;;;;1618:48:114::1;-1:-1:-1::0;;;;;1618:48:114;::::1;::::0;;::::1;::::0;;;1677:38:::1;::::0;4090:51:181;;;1677:38:114::1;::::0;4078:2:181;4063:18;1677:38:114::1;3944:203:181::0;4490:107:116;4549:4;4568:24;4582:9;4568:13;:24::i;:::-;4561:31;4490:107;-1:-1:-1;;4490:107:116:o;8892::120:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;8963:31:120::1;8983:10;8963:19;:31::i;11954:1067::-:0;5841:10;12109:7;5822:30;;;:18;:30;;;;;;12118:12;;5822:30;;5814:55;;;;-1:-1:-1;;;5814:55:120;;12720:2:181;5814:55:120;;;12702:21:181;12759:2;12739:18;;;12732:30;-1:-1:-1;;;12778:18:181;;;12771:42;12830:18;;5814:55:120;12518:336:181;5814:55:120;12227:26:::1;::::0;;::::1;12211:13;12227:26:::0;;;:6:::1;:26;::::0;;;;:28;;12211:13;;12227:28;;;::::1;::::0;12211:13;12227:28:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12211:44;;12307:21;12331:172;12360:6;12374:38;12401:10;-1:-1:-1::0;;;;;335:23:173;;241:123;12374:38:120::1;12420:6;12434:18;12460:17;12485:12;12331:21;:172::i;:::-;12588:19:::0;;::::1;::::0;::::1;::::0;12749:27:::1;::::0;-1:-1:-1;;;12749:27:120;;::::1;::::0;::::1;542:25:181::0;;;12588:19:120;;-1:-1:-1;12588:19:120;12565:20:::1;::::0;;;12749:6:::1;-1:-1:-1::0;;;;;12749:13:120::1;::::0;::::1;::::0;515:18:181;;12749:27:120::1;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12715:61:::0;;-1:-1:-1;12715:61:120;-1:-1:-1;12928:51:120::1;12937:12:::0;12951:10:::1;12960:1;12715:61:::0;12951:10:::1;:::i;:::-;12963:5;12970:8;12928:51;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;12993:12:120;;13007:8;;-1:-1:-1;11954:1067:120;;-1:-1:-1;;;;;;11954:1067:120:o;1767:106:51:-;1685:7;;-1:-1:-1;;;1685:7:51;;;;1836:9;1828:38;;;;-1:-1:-1;;;1828:38:51;;13954:2:181;1828:38:51;;;13936:21:181;13993:2;13973:18;;;13966:30;-1:-1:-1;;;14012:18:181;;;14005:46;14068:18;;1828:38:51;13752:340:181;1397:390:132;1548:5;:12;1564:2;1548:18;1540:43;;;;-1:-1:-1;;;1540:43:132;;14299:2:181;1540:43:132;;;14281:21:181;14338:2;14318:18;;;14311:30;-1:-1:-1;;;14357:18:181;;;14350:42;14409:18;;1540:43:132;14097:336:181;1540:43:132;1589:22;1637:33;;;1672:5;1614:64;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1614:64:132;;;;;;;;;;;;;;-1:-1:-1;;;;;1614:64:132;-1:-1:-1;;;;;;1614:64:132;;;;;;;;;;1713:15;;1614:64;;-1:-1:-1;;;;;;1696:3:132;1684:28;;;;;1713:15;1614:64;1748:32;1767:12;1748:18;:32::i;:::-;1684:98;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1484:303;1397:390;;:::o;1945:106:51:-;1685:7;;-1:-1:-1;;;1685:7:51;;;;2003:41;;;;-1:-1:-1;;;2003:41:51;;15267:2:181;2003:41:51;;;15249:21:181;15306:2;15286:18;;;15279:30;-1:-1:-1;;;15325:18:181;;;15318:50;15385:18;;2003:41:51;15065:344:181;2433:117:51;1486:16;:14;:16::i;:::-;2491:7:::1;:15:::0;;-1:-1:-1;;;;2491:15:51::1;::::0;;2521:22:::1;719:10:58::0;2530:12:51::1;2521:22;::::0;-1:-1:-1;;;;;4108:32:181;;;4090:51;;4078:2;4063:18;2521:22:51::1;;;;;;;2433:117::o:0;1914:346:132:-;2051:15;;2037:30;;-1:-1:-1;;;;;2051:15:132;2037:13;:30::i;:::-;2029:59;;;;-1:-1:-1;;;2029:59:132;;15616:2:181;2029:59:132;;;15598:21:181;15655:2;15635:18;;;15628:30;-1:-1:-1;;;15674:18:181;;;15667:46;15730:18;;2029:59:132;15414:340:181;2029:59:132;2153:5;:12;2169:2;2153:18;2145:38;;;;-1:-1:-1;;;2145:38:132;;15961:2:181;2145:38:132;;;15943:21:181;16000:1;15980:18;;;15973:29;-1:-1:-1;;;16018:18:181;;;16011:37;16065:18;;2145:38:132;15759:330:181;2145:38:132;2219:36;2240:14;2248:5;2240:14;:::i;:::-;2219:20;:36::i;2336:287:52:-;1759:1;2468:7;;:19;2460:63;;;;-1:-1:-1;;;2460:63:52;;16598:2:181;2460:63:52;;;16580:21:181;16637:2;16617:18;;;16610:30;16676:33;16656:18;;;16649:61;16727:18;;2460:63:52;16396:355:181;2460:63:52;1759:1;2598:7;:18;2336:287::o;19673:730:120:-;19822:7;;19925:22;;;;:8;:22;;;;;;;;:44;;;;;;;;:::i;:::-;;19917:76;;;;-1:-1:-1;;;19917:76:120;;16958:2:181;19917:76:120;;;16940:21:181;16997:2;16977:18;;;16970:30;-1:-1:-1;;;17016:18:181;;;17009:49;17075:18;;19917:76:120;16756:343:181;19917:76:120;20335:63;20356:12;20370;20335:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20384:13:120;;-1:-1:-1;20335:20:120;;-1:-1:-1;20335:63:120:i;:::-;20328:70;;19673:730;;;;;;:::o;20958:1261::-;21206:32;;;;:18;:32;;;;;;;;21531:7;21202:342;21599:35;21619:14;21599:19;:35::i;:::-;21740:32;21775:67;21796:12;21810:14;21775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21826:15:120;;-1:-1:-1;21775:20:120;;-1:-1:-1;21775:67:120:i;:::-;21740:102;;21968:14;21940:24;:42;21932:74;;;;-1:-1:-1;;;21932:74:120;;17306:2:181;21932:74:120;;;17288:21:181;17345:2;17325:18;;;17318:30;-1:-1:-1;;;17364:18:181;;;17357:49;17423:18;;21932:74:120;17104:343:181;21932:74:120;22104:32;;;;:18;:32;;;;;;;:39;;-1:-1:-1;;22104:39:120;22139:4;22104:39;;;22154:60;22182:14;;22123:12;;22154:60;;;;22198:15;542:25:181;;530:2;515:18;;396:177;22154:60:120;;;;;;;;21121:1098;20958:1261;;;;;:::o;22704:1731::-;22762:13;;22796:15;:8;22762:13;22796:12;:15::i;:::-;22783:28;-1:-1:-1;22873:26:120;22893:6;22873:26;:16;-1:-1:-1;;22873:14:120;;;:16::i;:::-;:26;;;22865:51;;;;-1:-1:-1;;;22865:51:120;;17654:2:181;22865:51:120;;;17636:21:181;17693:2;17673:18;;;17666:30;-1:-1:-1;;;17712:18:181;;;17705:42;17764:18;;22865:51:120;17452:336:181;22865:51:120;22960:20;22983:11;-1:-1:-1;;22983:9:120;;;:11::i;:::-;22960:34;-1:-1:-1;23034:20:120;23008:22;;;;:8;:22;;;;;;;;:46;;;;;;;;:::i;:::-;;23000:66;;;;-1:-1:-1;;;23000:66:120;;17995:2:181;23000:66:120;;;17977:21:181;18034:1;18014:18;;;18007:29;-1:-1:-1;;;18052:18:181;;;18045:37;18099:18;;23000:66:120;17793:330:181;23000:66:120;23209:22;;;;:8;:22;;;;;:48;;-1:-1:-1;;23209:48:120;23234:23;23209:48;;;;23746:25;23760:11;23746;:25;:::i;:::-;:29;;;;:::i;:::-;23734:9;:41;23726:58;;;;-1:-1:-1;;;23726:58:120;;;;;;18330:2:181;18312:21;;;18369:1;18349:18;;;18342:29;-1:-1:-1;;;18402:2:181;18387:18;;18380:34;18446:2;18431:18;;18128:327;23726:58:120;23823:18;23844:21;-1:-1:-1;;23844:19:120;;;:21::i;:::-;24027:19;;;23953:3;24027:19;;;;;;;;;23823:42;;-1:-1:-1;23918:11:120;;23903:12;;23953:3;24027:19;;;;;;;;;;-1:-1:-1;;24000:46:120;-1:-1:-1;24052:22:120;24153:11;-1:-1:-1;;24153:9:120;;;:11::i;:::-;24172:10;-1:-1:-1;;24172:8:120;;;:10::i;:::-;24190:11;-1:-1:-1;;24190:9:120;;;:11::i;:::-;24209:17;:9;-1:-1:-1;;24209:7:120;;;:9::i;:::-;-1:-1:-1;;24209:15:120;;:17::i;:::-;24077:155;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;24077:155:120;;;;;;;;;;;;;;-1:-1:-1;;;;;24077:155:120;-1:-1:-1;;;24077:155:120;;;;-1:-1:-1;24265:81:120;24305:10;24317:4;-1:-1:-1;24326:8:120;24077:155;24265:39;:81::i;:::-;24386:44;;24239:107;;-1:-1:-1;24239:107:120;-1:-1:-1;24386:44:120;;;;24394:12;;24239:107;;;;24386:44;:::i;:::-;;;;;;;;22777:1658;;;;;;;22704:1731;;;:::o;5838:185:116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;19526:34:181;;19596:15;;;19591:2;19576:18;;19569:43;5921:57:116;;19461:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;2412:312:57:-;2526:6;2501:21;:31;;2493:73;;;;-1:-1:-1;;;2493:73:57;;19825:2:181;2493:73:57;;;19807:21:181;19864:2;19844:18;;;19837:30;19903:31;19883:18;;;19876:59;19952:18;;2493:73:57;19623:353:181;2493:73:57;2578:12;2596:9;-1:-1:-1;;;;;2596:14:57;2618:6;2596:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:52;;;2647:7;2639:78;;;;-1:-1:-1;;;2639:78:57;;20393:2:181;2639:78:57;;;20375:21:181;20432:2;20412:18;;;20405:30;20471:34;20451:18;;;20444:62;20542:28;20522:18;;;20515:56;20588:19;;2639:78:57;20191:422:181;2639:78:57;2483:241;2412:312;;:::o;1089:114:118:-;1160:6;;1146:30;;;20792:25:181;;;20848:2;20833:18;;20826:34;;;1146:30:118;;20765:18:181;1146:30:118;;;;;;;1182:6;:16;1089:114::o;2186:115:51:-;1239:19;:17;:19::i;:::-;2245:7:::1;:14:::0;;-1:-1:-1;;;;2245:14:51::1;-1:-1:-1::0;;;2245:14:51::1;::::0;;2274:20:::1;2281:12;719:10:58::0;;640:96;5170:183:168;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;4981:185::-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;1033:127:132:-;1107:4;1126:29;1140:3;1145:9;1126:13;:29::i;1742:335:167:-;1834:15;;1817:13;:32;1809:60;;;;-1:-1:-1;;;1809:60:167;;21073:2:181;1809:60:167;;;21055:21:181;21112:2;21092:18;;;21085:30;-1:-1:-1;;;21131:18:181;;;21124:45;21186:18;;1809:60:167;20871:339:181;1809:60:167;1983:15;:31;;;2025:47;;;2046:10;21389:51:181;;21471:2;21456:18;;21449:34;;;2025:47:167;;21362:18:181;2025:47:167;21215:274:181;981:328:165;1183:12;1227:13;1242:7;1251:6;1259:18;1279:10;1291:12;1210:94;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1203:101;;981:328;;;;;;;;:::o;675:325:130:-;753:12;836;:19;859:2;836:25;828:50;;;;-1:-1:-1;;;828:50:130;;14299:2:181;828:50:130;;;14281:21:181;14338:2;14318:18;;;14311:30;-1:-1:-1;;;14357:18:181;;;14350:42;14409:18;;828:50:130;14097:336:181;828:50:130;951:44;970:12;959:35;;;;;;;;;;;;:::i;:::-;951:7;:44::i;17098:357:120:-;17169:8;17161:50;;;;-1:-1:-1;;;17161:50:120;;22600:2:181;17161:50:120;;;22582:21:181;22639:2;22619:18;;;22612:30;-1:-1:-1;;;22658:18:181;;;22651:44;22712:18;;17161:50:120;22398:338:181;17161:50:120;17225:31;;;;:21;:31;;;;;;:36;17217:69;;;;-1:-1:-1;;;17217:69:120;;22943:2:181;17217:69:120;;;22925:21:181;22982:2;22962:18;;;22955:30;-1:-1:-1;;;23001:18:181;;;22994:50;23061:18;;17217:69:120;22741:344:181;17217:69:120;17301:30;;;;:20;:30;;;;;;;;17300:31;17292:63;;;;-1:-1:-1;;;17292:63:120;;23292:2:181;17292:63:120;;;23274:21:181;23331:2;23311:18;;;23304:30;-1:-1:-1;;;23350:18:181;;;23343:49;23409:18;;17292:63:120;23090:343:181;17292:63:120;17362:31;;;;:21;:31;;;;;;;17396:12;17362:46;;17419:31;;;;;17384:8;542:25:181;;530:2;515:18;;396:177;24755:6146:164;25004:22;25008:1;25004:22;;;;;25033:19;;;25080:25;;25066:12;;;25059:47;;;;25138:4;24881:16;25125:18;;;25182:9;25170:22;;25163:30;25156:38;;25208:12;;;25201:30;;;;25254:34;;;25248:41;25238:52;;25309:18;;;25366:9;25354:22;;25347:30;25340:38;;25392:12;;;25385:30;;;;25438:34;;;25432:41;25422:52;;25493:18;;;25550:9;25538:22;;25531:30;25524:38;;25576:12;;;25569:30;;;;25646:9;25622:34;;25616:41;25606:52;;25677:18;;;25734:9;25722:22;;25715:30;25708:38;;25760:12;;;25753:30;;;;25830:9;25806:34;;;25800:41;25790:52;;;25861:18;;;25906:22;;;25899:30;25892:38;;25944:12;;;25937:30;;;;26014:9;25990:34;;25984:41;25974:52;;26045:18;;;26090:22;;;26083:30;26076:38;;26128:12;;;26121:30;;;;26198:9;26174:34;;26168:41;26158:52;;26229:18;;;26274:22;;;26267:30;26260:38;;26312:12;;;26305:30;;;;26382:9;26358:34;;26352:41;26342:52;;26413:18;;;26470:9;26458:22;;;26451:30;26444:38;;26496:12;;;26489:30;;;;26542:34;;26536:41;26526:52;;26597:18;;;26654:9;26642:22;;;26635:30;26628:38;;26680:12;;;26673:30;;;;26750:9;26726:34;;26720:41;26710:52;;;26781:18;;;26838:10;26826:23;;26819:31;26812:39;;26865:12;;;26858:30;;;;26935:10;26911:35;;26905:42;26895:53;;26967:18;;;27024:10;27012:23;;27005:31;26998:39;;27051:12;;;27044:30;;;;27121:10;27097:35;;27091:42;27081:53;;27153:18;;;27210:10;27198:23;;27191:31;27184:39;;27237:12;;;27230:30;;;;27307:10;27283:35;;27277:42;27267:53;;27339:18;;;27396:10;27384:23;;27377:31;27370:39;;27423:12;;;27416:30;;;;27493:10;27469:35;;27463:42;27453:53;;27525:18;;;27582:10;27570:23;;27563:31;27556:39;;27609:12;;;27602:30;;;;27679:10;27655:35;;27649:42;27639:53;;27711:18;;;27768:10;27756:23;;27749:31;27742:39;;27795:12;;;27788:30;;;;27865:10;27841:35;;27835:42;27825:53;;27897:18;;;27954:10;27942:23;;27935:31;27928:39;;27981:12;;;27974:30;;;;28027:35;;;28021:42;28011:53;;28083:18;;;28140:10;28128:23;;28121:31;28114:39;;28167:12;;;28160:30;;;;28237:10;28213:35;;28207:42;28197:53;;28269:18;;;28326:10;28314:23;;28307:31;28300:39;;28353:12;;;28346:30;;;;28423:10;28399:35;;28393:42;28383:53;;28455:18;;;28512:10;28500:23;;28493:31;28486:39;;28539:12;;;28532:30;;;;28609:10;28585:35;;28579:42;28569:53;;28641:18;;;28698:10;28686:23;;28679:31;28672:39;;28725:12;;;28718:30;;;;28795:10;28771:35;;28765:42;28755:53;;28827:18;;;28884:10;28872:23;;28865:31;28858:39;;28911:12;;;28904:30;;;;28981:10;28957:35;;28951:42;28941:53;;29013:18;;;29070:10;29058:23;;29051:31;29044:39;;29097:12;;;29090:30;;;;29167:10;29143:35;;29137:42;29127:53;;29199:18;;;29256:10;29244:23;;29237:31;29230:39;;29283:12;;;29276:30;;;;29353:10;29329:35;;29323:42;29313:53;;29385:18;;;29442:10;29430:23;;29423:31;29416:39;;29469:12;;;29462:30;;;;29539:10;29515:35;;29509:42;29499:53;;29571:18;;;29628:10;29616:23;;29609:31;29602:39;;29655:12;;;29648:30;;;;29725:10;29701:35;;29695:42;29685:53;;29757:18;;;29814:10;29802:23;;29795:31;29788:39;;29841:12;;;29834:30;;;;29911:10;29887:35;;29881:42;29871:53;;29943:18;;;30000:10;29988:23;;29981:31;29974:39;;30027:12;;;30020:30;;;;30097:10;30073:35;;30067:42;30057:53;;30129:18;;;30186:10;30174:23;;30167:31;30160:39;;30213:12;;;30206:30;;;;30283:10;30259:35;;30253:42;30243:53;;30315:18;;;30372:10;30360:23;;30353:31;30346:39;;30399:12;;;30392:30;;;;30469:10;30445:35;;30439:42;30429:53;;30501:18;;;30558:10;30546:23;;30539:31;30532:39;;30585:12;;;30578:30;;;;30655:10;30631:35;;30625:42;30615:53;;30687:18;;;30744:10;30732:23;;;30725:31;30718:39;;;30771:12;;;;30764:30;;;;30841:10;30817:35;;;30811:42;30801:53;;;30873:18;;;24755:6146::o;17891:1180:120:-;18006:14;17998:61;;;;-1:-1:-1;;;17998:61:120;;23640:2:181;17998:61:120;;;23622:21:181;23679:2;23659:18;;;23652:30;-1:-1:-1;;;23698:18:181;;;23691:49;23757:18;;17998:61:120;23438:343:181;17998:61:120;18149:36;;;;:20;:36;;;;;;;;18145:104;;;17891:1180;:::o;18145:104::-;18354:33;18390:37;;;:21;:37;;;;;;;18441:30;;;18433:63;;;;-1:-1:-1;;;18433:63:120;;23988:2:181;18433:63:120;;;23970:21:181;24027:2;24007:18;;;24000:30;-1:-1:-1;;;24046:18:181;;;24039:50;24106:18;;18433:63:120;23786:344:181;18433:63:120;18641:11;;18597:40;18612:25;18597:12;:40;:::i;:::-;:55;;18589:91;;;;-1:-1:-1;;;18589:91:120;;24337:2:181;18589:91:120;;;24319:21:181;24376:2;24356:18;;;24349:30;24415:25;24395:18;;;24388:53;24458:18;;18589:91:120;24135:347:181;18589:91:120;18808:36;;;;:20;:36;;;;;;:43;;-1:-1:-1;;18808:43:120;18847:4;18808:43;;;18862:37;18829:14;;18862:37;;;-1:-1:-1;19029:37:120;;;;:21;:37;;;;;19022:44;17891:1180::o;10748:325:174:-;10848:10;;10818:7;;10975:4;10966:14;;11042:26;;;;10966:14;10848:10;11042:5;:26::i;:::-;11035:33;10748:325;-1:-1:-1;;;;;10748:325:174:o;2583:121:165:-;2645:6;2673:25;-1:-1:-1;;2673:18:165;;2692:2;2696:1;2673:18;:25::i;17661:260:174:-;17717:14;17739:12;17754;17758:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;17754:12;-1:-1:-1;;;;;17739:27:174;;;17772:12;17787;17791:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;17787:12;-1:-1:-1;;;;;17772:27:174;17890:21;;;;17661:260;-1:-1:-1;;;17661:260:174:o;2942:141:165:-;3009:7;3031:47;3058:19;3068:8;3058:9;:19::i;:::-;508:4:173;399:121;2097:115:165;2154:6;2182:24;-1:-1:-1;;2182:18:165;;2154:6;2204:1;2182:18;:24::i;2414:115::-;2470:6;2498:25;-1:-1:-1;;2498:18:165;;2517:2;2521:1;2498:18;:25::i;2261:105::-;2318:7;2340:21;-1:-1:-1;;2340:14:165;;2355:1;2358:2;2340:14;:21::i;3201:146::-;3256:7;3278:64;533:2;3308:30;533:2;13008::174;13004:16;;;-1:-1:-1;;;;;13000:28:174;3308:30:165;:::i;:::-;-1:-1:-1;;3278:14:165;;;:64;3340:1;3278:14;:64::i;21380:556:174:-;21435:16;21459:11;21476:12;21491;21495:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;21491:12;-1:-1:-1;;;;;21476:27:174;;;21597:4;21591:11;21584:18;;21646:3;21639:10;;21678:33;21691:7;21700:3;21706:4;21700:10;21678:12;:33::i;:::-;-1:-1:-1;21815:14:174;;;21831:4;21811:25;21805:4;21798:39;21872:17;;21380:556;;-1:-1:-1;21380:556:174:o;1360:1117:171:-;1519:4;1525:12;1577:15;1598:13;1617:24;1654:8;1644:19;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1644:19:171;;1617:46;;2083:1;2062;2033:9;2027:16;2003:4;1992:9;1988:20;1957:6;1927:7;1906:4;1892:210;1880:222;;2157:16;2146:27;;2195:8;2186:7;2183:21;2180:62;;;2226:8;2215:19;;2180:62;2315:7;2302:11;2295:28;2423:7;2420:1;2413:4;2400:11;2396:22;2381:50;2450:8;;;;-1:-1:-1;1360:1117:171;-1:-1:-1;;;;;;;1360:1117:171:o;370:200:130:-;449:4;469:10;-1:-1:-1;;;;;469:18:130;;;461:38;;;;-1:-1:-1;;;461:38:130;;24689:2:181;461:38:130;;;24671:21:181;24728:1;24708:18;;;24701:29;-1:-1:-1;;;24746:18:181;;;24739:37;24793:18;;461:38:130;24487:330:181;461:38:130;556:9;-1:-1:-1;;;;;512:53:130;524:4;-1:-1:-1;;;;;512:38:130;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;512:53:130;;;370:200;-1:-1:-1;;;370:200:130:o;1360:137:118:-;1414:7;1440:6;;1433:4;:13;1429:47;;;1463:6;;1456:13;;1429:47;-1:-1:-1;1488:4:118;1360:137::o;9979:390:174:-;10076:15;;10114:11;10121:4;10114;:11;:::i;:::-;10099:26;;10224:4;10218:11;10212:4;10209:21;10206:52;;;-1:-1:-1;10249:1:174;10206:52;10273:4;10281:1;10273:9;10269:41;;-1:-1:-1;;10292:11:174;;;;;10269:41;10325:39;10346:5;10353:4;10359;10325:20;:39::i;16417:201::-;16522:14;16596:11;16601:6;16596:2;:11;:::i;:::-;16595:17;;16611:1;16595:17;:::i;:::-;16551:62;;16559:30;16565:7;16574:6;16582;16559:5;:30::i;:::-;16551:62;;;16417:201;-1:-1:-1;;;;16417:201:174:o;2767:109:165:-;2827:7;2849:22;-1:-1:-1;;2849:14:165;;2864:2;2868;15274:815:174;15375:14;15401:6;:11;;15411:1;15401:11;15397:49;;-1:-1:-1;15437:1:174;15422:17;;15397:49;15473:12;15477:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15473:12;-1:-1:-1;;;;;15455:30:174;:15;;;;:6;:15;:::i;:::-;:30;15451:282;;;15674:12;15678:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15674:12;15688;15692:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15688:12;15646:80;;-1:-1:-1;;;15646:80:174;;-1:-1:-1;;;;;25756:15:181;;;15646:80:174;;;25738:34:181;25808:15;;25788:18;;;25781:43;25840:18;;;25833:34;;;15710:15:174;;;25883:18:181;;;25876:34;25665:19;;15646:80:174;25464:452:181;15451:282:174;15751:2;15742:6;:11;;;15738:66;;;15762:42;;-1:-1:-1;;;15762:42:174;;;;;;;;;;;15738:66;15871:1;15862:10;;15811:15;15899:12;15903:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15899:12;-1:-1:-1;;;;;15884:27:174;;-1:-1:-1;15917:13:174;-1:-1:-1;;;;;5031:12:174;;5027:85;16053:17;;;;16047:24;16043:36;;;-1:-1:-1;;;;;15274:815:174:o;13593:349::-;13714:7;13729:12;13744;13748:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;13744:12;-1:-1:-1;;;;;13729:27:174;;;13832:12;13836:7;13832:3;:12::i;:::-;13825:4;13809:13;13816:6;13809:4;:13;:::i;:::-;:20;;;;:::i;:::-;:35;13805:67;;;-1:-1:-1;;13854:11:174;;;;;13805:67;13885:13;13892:6;13885:4;:13;:::i;:::-;13878:20;;13911:26;13917:7;13911:26;;13926:4;13932;13911:5;:26::i;:::-;13904:33;;;13593:349;;;;;;;:::o;20133:893::-;20211:15;-1:-1:-1;;5480:15:174;;;;20234:68;;20262:40;;-1:-1:-1;;;20262:40:174;;;;;;;;;;;20234:68;20312:19;20323:7;20312:10;:19::i;:::-;20308:75;;;20340:43;;-1:-1:-1;;;20340:43:174;;;;;;;;;;;20308:75;20390:12;20405;20409:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;20405:12;-1:-1:-1;;;;;20390:27:174;;;20423:15;20441:12;20445:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;20441:12;-1:-1:-1;;;;;20423:30:174;;;20460:11;20477:8;20579:4;20573:11;20566:18;;20654:7;20649:3;20646:16;20643:80;;;20686:4;20680;20673:18;20643:80;20880:4;20871:7;20865:4;20856:7;20853:1;20846:5;20835:50;20828:57;;20901:3;20896:57;;20913:40;;-1:-1:-1;;;20913:40:174;;;;;;;;;;;20896:57;20969:52;20990:15;20997:7;11442:17;11438:31;;11253:254;20990:15;20969:52;;21007:7;21016:4;20969:20;:52::i;:::-;20959:62;20133:893;-1:-1:-1;;;;;;;20133:893:174:o;8805:657::-;8916:15;8961:2;8990;9076:4;9108;-1:-1:-1;;;;;9127:12:174;;;;:28;;;;;9151:4;9143;-1:-1:-1;;;;;9143:12:174;;9127:28;9119:51;;;;-1:-1:-1;;;9119:51:174;;26123:2:181;9119:51:174;;;26105:21:181;26162:2;26142:18;;;26135:30;-1:-1:-1;;;26181:18:181;;;26174:40;26231:18;;9119:51:174;25921:334:181;9119:51:174;9271:23;;;9344:17;;;9327:35;;;9410:17;;;9394:34;;;;;-1:-1:-1;;;8805:657:174:o;13200:131::-;13253:7;13308:12;13312:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;13308:12;13293;13297:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;13293:12;:27;-1:-1:-1;;;;;13286:34:174;;;13200:131;;;:::o;6121:290::-;6181:8;6201:15;6208:7;11442:17;11438:31;;11253:254;6201:15;:31;;6220:12;6201:31;6197:63;;-1:-1:-1;6249:4:174;;6121:290;-1:-1:-1;6121:290:174:o;6197:63::-;6265:12;6280;6284:7;6280:3;:12::i;:::-;6395:4;6389:11;-1:-1:-1;6380:21:174;6121:290;-1:-1:-1;;;6121:290:174:o;211:180:181:-;270:6;323:2;311:9;302:7;298:23;294:32;291:52;;;339:1;336;329:12;291:52;-1:-1:-1;362:23:181;;211:180;-1:-1:-1;211:180:181:o;578:127::-;639:10;634:3;630:20;627:1;620:31;670:4;667:1;660:15;694:4;691:1;684:15;710:718;752:5;805:3;798:4;790:6;786:17;782:27;772:55;;823:1;820;813:12;772:55;859:6;846:20;885:18;922:2;918;915:10;912:36;;;928:18;;:::i;:::-;1003:2;997:9;971:2;1057:13;;-1:-1:-1;;1053:22:181;;;1077:2;1049:31;1045:40;1033:53;;;1101:18;;;1121:22;;;1098:46;1095:72;;;1147:18;;:::i;:::-;1187:10;1183:2;1176:22;1222:2;1214:6;1207:18;1268:3;1261:4;1256:2;1248:6;1244:15;1240:26;1237:35;1234:55;;;1285:1;1282;1275:12;1234:55;1349:2;1342:4;1334:6;1330:17;1323:4;1315:6;1311:17;1298:54;1396:1;1389:4;1384:2;1376:6;1372:15;1368:26;1361:37;1416:6;1407:15;;;;;;710:718;;;;:::o;1433:320::-;1501:6;1554:2;1542:9;1533:7;1529:23;1525:32;1522:52;;;1570:1;1567;1560:12;1522:52;1610:9;1597:23;1643:18;1635:6;1632:30;1629:50;;;1675:1;1672;1665:12;1629:50;1698:49;1739:7;1730:6;1719:9;1715:22;1698:49;:::i;1943:127::-;2004:10;1999:3;1995:20;1992:1;1985:31;2035:4;2032:1;2025:15;2059:4;2056:1;2049:15;2075:347;2226:2;2211:18;;2259:1;2248:13;;2238:144;;2304:10;2299:3;2295:20;2292:1;2285:31;2339:4;2336:1;2329:15;2367:4;2364:1;2357:15;2238:144;2391:25;;;2075:347;:::o;2619:932::-;2784:6;2792;2800;2808;2816;2869:4;2857:9;2848:7;2844:23;2840:34;2837:54;;;2887:1;2884;2877:12;2837:54;2927:9;2914:23;2956:18;2997:2;2989:6;2986:14;2983:34;;;3013:1;3010;3003:12;2983:34;3051:6;3040:9;3036:22;3026:32;;3096:7;3089:4;3085:2;3081:13;3077:27;3067:55;;3118:1;3115;3108:12;3067:55;3158:2;3145:16;3184:2;3176:6;3173:14;3170:34;;;3200:1;3197;3190:12;3170:34;3255:7;3248:4;3238:6;3235:1;3231:14;3227:2;3223:23;3219:34;3216:47;3213:67;;;3276:1;3273;3266:12;3213:67;3307:4;3299:13;;;;-1:-1:-1;3331:6:181;-1:-1:-1;;3369:20:181;;3356:34;;-1:-1:-1;3424:4:181;3409:20;;3441:15;;;3438:35;;;3469:1;3466;3459:12;3438:35;2619:932;;;;-1:-1:-1;2619:932:181;;3507:2;3492:18;;3529:16;;2619:932;-1:-1:-1;;2619:932:181:o;3556:131::-;-1:-1:-1;;;;;3631:31:181;;3621:42;;3611:70;;3677:1;3674;3667:12;3692:247;3751:6;3804:2;3792:9;3783:7;3779:23;3775:32;3772:52;;;3820:1;3817;3810:12;3772:52;3859:9;3846:23;3878:31;3903:5;3878:31;:::i;5026:163::-;5093:20;;5153:10;5142:22;;5132:33;;5122:61;;5179:1;5176;5169:12;5122:61;5026:163;;;:::o;5194:184::-;5252:6;5305:2;5293:9;5284:7;5280:23;5276:32;5273:52;;;5321:1;5318;5311:12;5273:52;5344:28;5362:9;5344:28;:::i;5383:460::-;5468:6;5476;5484;5537:2;5525:9;5516:7;5512:23;5508:32;5505:52;;;5553:1;5550;5543:12;5505:52;5576:28;5594:9;5576:28;:::i;:::-;5566:38;;5651:2;5640:9;5636:18;5623:32;5613:42;;5706:2;5695:9;5691:18;5678:32;5733:18;5725:6;5722:30;5719:50;;;5765:1;5762;5755:12;5719:50;5788:49;5829:7;5820:6;5809:9;5805:22;5788:49;:::i;:::-;5778:59;;;5383:460;;;;;:::o;5848:250::-;5933:1;5943:113;5957:6;5954:1;5951:13;5943:113;;;6033:11;;;6027:18;6014:11;;;6007:39;5979:2;5972:10;5943:113;;;-1:-1:-1;;6090:1:181;6072:16;;6065:27;5848:250::o;6103:270::-;6144:3;6182:5;6176:12;6209:6;6204:3;6197:19;6225:76;6294:6;6287:4;6282:3;6278:14;6271:4;6264:5;6260:16;6225:76;:::i;:::-;6355:2;6334:15;-1:-1:-1;;6330:29:181;6321:39;;;;6362:4;6317:50;;6103:270;-1:-1:-1;;6103:270:181:o;6378:288::-;6553:6;6542:9;6535:25;6596:2;6591;6580:9;6576:18;6569:30;6516:4;6616:44;6656:2;6645:9;6641:18;6633:6;6616:44;:::i;7012:127::-;7073:10;7068:3;7064:20;7061:1;7054:31;7104:4;7101:1;7094:15;7128:4;7125:1;7118:15;7144:125;7209:9;;;7230:10;;;7227:36;;;7243:18;;:::i;7274:184::-;7344:6;7397:2;7385:9;7376:7;7372:23;7368:32;7365:52;;;7413:1;7410;7403:12;7365:52;-1:-1:-1;7436:16:181;;7274:184;-1:-1:-1;7274:184:181:o;7996:474::-;8217:2;8206:9;8199:21;8180:4;8243:44;8283:2;8272:9;8268:18;8260:6;8243:44;:::i;:::-;8335:9;8327:6;8323:22;8318:2;8307:9;8303:18;8296:50;8363:32;8388:6;8380;8363:32;:::i;:::-;8355:40;;;8460:1;8456;8451:3;8447:11;8443:19;8435:6;8431:32;8426:2;8415:9;8411:18;8404:60;7996:474;;;;;;:::o;8807:314::-;8982:2;8971:9;8964:21;8945:4;9002:44;9042:2;9031:9;9027:18;9019:6;9002:44;:::i;:::-;8994:52;;9111:1;9107;9102:3;9098:11;9094:19;9086:6;9082:32;9077:2;9066:9;9062:18;9055:60;8807:314;;;;;:::o;9461:127::-;9522:10;9517:3;9513:20;9510:1;9503:31;9553:4;9550:1;9543:15;9577:4;9574:1;9567:15;9593:325;9685:4;9743:11;9730:25;9837:4;9833:9;9822:8;9806:14;9802:29;9798:45;9778:18;9774:70;9764:98;;9858:1;9855;9848:12;9764:98;9879:33;;;;;9593:325;-1:-1:-1;;9593:325:181:o;9923:521::-;10000:4;10006:6;10066:11;10053:25;10160:2;10156:7;10145:8;10129:14;10125:29;10121:43;10101:18;10097:68;10087:96;;10179:1;10176;10169:12;10087:96;10206:33;;10258:20;;;-1:-1:-1;10301:18:181;10290:30;;10287:50;;;10333:1;10330;10323:12;10287:50;10366:4;10354:17;;-1:-1:-1;10397:14:181;10393:27;;;10383:38;;10380:58;;;10434:1;10431;10424:12;10380:58;9923:521;;;;;:::o;10449:271::-;10632:6;10624;10619:3;10606:33;10588:3;10658:16;;10683:13;;;10658:16;10449:271;-1:-1:-1;10449:271:181:o;11415:277::-;11482:6;11535:2;11523:9;11514:7;11510:23;11506:32;11503:52;;;11551:1;11548;11541:12;11503:52;11583:9;11577:16;11636:5;11629:13;11622:21;11615:5;11612:32;11602:60;;11658:1;11655;11648:12;12033:128;12100:9;;;12121:11;;;12118:37;;;12135:18;;:::i;12859:201::-;12897:3;12925:10;12970:2;12963:5;12959:14;12997:2;12988:7;12985:15;12982:41;;13003:18;;:::i;:::-;13052:1;13039:15;;12859:201;-1:-1:-1;;;12859:201:181:o;13065:245::-;13144:6;13152;13205:2;13193:9;13184:7;13180:23;13176:32;13173:52;;;13221:1;13218;13211:12;13173:52;-1:-1:-1;;13244:16:181;;13300:2;13285:18;;;13279:25;13244:16;;13279:25;;-1:-1:-1;13065:245:181:o;13315:432::-;13546:6;13535:9;13528:25;13589:6;13584:2;13573:9;13569:18;13562:34;13632:6;13627:2;13616:9;13612:18;13605:34;13675:3;13670:2;13659:9;13655:18;13648:31;13509:4;13696:45;13736:3;13725:9;13721:19;13713:6;13696:45;:::i;:::-;13688:53;13315:432;-1:-1:-1;;;;;;13315:432:181:o;14438:217::-;14585:2;14574:9;14567:21;14548:4;14605:44;14645:2;14634:9;14630:18;14622:6;14605:44;:::i;14660:400::-;-1:-1:-1;;;;;14861:32:181;;14843:51;;14930:2;14925;14910:18;;14903:30;;;-1:-1:-1;;14950:44:181;;14975:18;;14967:6;14950:44;:::i;:::-;14942:52;;15042:10;15034:6;15030:23;15025:2;15014:9;15010:18;15003:51;14660:400;;;;;;:::o;16094:297::-;16212:12;;16259:4;16248:16;;;16242:23;;16212:12;16277:16;;16274:111;;;16371:1;16367:6;16357;16351:4;16347:17;16344:1;16340:25;16336:38;16329:5;16325:50;16316:59;;16274:111;;16094:297;;;:::o;18460:475::-;18650:4;18679:10;18728:2;18720:6;18716:15;18705:9;18698:34;18780:2;18772:6;18768:15;18763:2;18752:9;18748:18;18741:43;;18820:6;18815:2;18804:9;18800:18;18793:34;18863:3;18858:2;18847:9;18843:18;18836:31;18884:45;18924:3;18913:9;18909:19;18901:6;18884:45;:::i;18940:369::-;19137:6;19126:9;19119:25;19194:6;19187:14;19180:22;19175:2;19164:9;19160:18;19153:50;19239:2;19234;19223:9;19219:18;19212:30;19100:4;19259:44;19299:2;19288:9;19284:18;19276:6;19259:44;:::i;21494:710::-;21757:3;21794:10;21789:3;21785:20;21848:2;21839:6;21834:3;21830:16;21826:25;21821:3;21814:38;21881:6;21877:1;21872:3;21868:11;21861:27;21940:2;21931:6;21926:3;21922:16;21918:25;21913:2;21908:3;21904:12;21897:47;21996:2;21987:6;21982:3;21978:16;21974:25;21969:2;21964:3;21960:12;21953:47;;22030:6;22025:2;22020:3;22016:12;22009:28;22066:6;22060:13;22082:75;22150:6;22145:2;22140:3;22136:12;22129:4;22121:6;22117:17;22082:75;:::i;:::-;22177:16;;;;22195:2;22173:25;;21494:710;-1:-1:-1;;;;;;;21494:710:181:o;24822:251::-;24892:6;24945:2;24933:9;24924:7;24920:23;24916:32;24913:52;;;24961:1;24958;24951:12;24913:52;24993:9;24987:16;25012:31;25037:5;25012:31;:::i;25078:151::-;25168:4;25161:12;;;25147;;;25143:31;;25186:14;;25183:40;;;25203:18;;:::i;25234:225::-;25338:4;25317:12;;;25331;;;25313:31;25364:22;;;;25405:24;;;25395:58;;25433:18;;:::i;:::-;25395:58;25234:225;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"2769800","executionCost":"infinite","totalCost":"infinite"},"external":{"AMB()":"infinite","DOMAIN()":"infinite","MERKLE()":"infinite","MIRROR_DOMAIN()":"infinite","PROCESS_GAS()":"infinite","RESERVE_GAS()":"infinite","ROOT_MANAGER()":"infinite","acceptProposedOwner()":"63837","addSender(address)":"27982","allowlistedSenders(address)":"2681","delay()":"281","delayBlocks()":"2384","dispatch(uint32,bytes32,bytes)":"infinite","home()":"368","isReplica(address)":"507","lastSentBlock()":"2361","localDomain()":"infinite","messages(bytes32)":"2626","mirrorConnector()":"2426","nonces(uint32)":"2556","outboundRoot()":"infinite","owner()":"2421","pause()":"infinite","paused()":"2433","pendingAggregateRoots(bytes32)":"2572","processMessage(bytes)":"infinite","proposeNewOwner(address)":"infinite","proposed()":"2442","proposedTimestamp()":"2338","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":"infinite","provenAggregateRoots(bytes32)":"2607","provenMessageRoots(bytes32)":"2562","rateLimitBlocks()":"2363","removePendingAggregateRoot(bytes32)":"12980","removeSender(address)":"27954","renounceOwnership()":"2458","renounced()":"2452","send(bytes)":"infinite","sentMessageRoots(bytes32)":"2496","setDelayBlocks(uint256)":"28093","setGasCap(uint256)":"28085","setMirrorConnector(address)":"infinite","setRateLimitBlocks(uint256)":"28101","setWatcherManager(address)":"30078","unpause()":"infinite","verifySender(address)":"infinite","watcherManager()":"2404","withdrawFunds(address)":"infinite"},"internal":{"_processMessage(bytes memory)":"infinite","_sendMessage(bytes memory,bytes memory)":"infinite","_verifySender(address)":"infinite"}},"methodIdentifiers":{"AMB()":"d69f9d61","DOMAIN()":"52a9674b","MERKLE()":"a01892a5","MIRROR_DOMAIN()":"14168416","PROCESS_GAS()":"d88beda2","RESERVE_GAS()":"25e3beda","ROOT_MANAGER()":"5f61e3ec","acceptProposedOwner()":"c5b350df","addSender(address)":"b697f531","allowlistedSenders(address)":"6159ada1","delay()":"6a42b8f8","delayBlocks()":"ad9c0c2e","dispatch(uint32,bytes32,bytes)":"fa31de01","home()":"9fa92f9d","isReplica(address)":"5190bc53","lastSentBlock()":"d7d317b3","localDomain()":"8d3638f4","messages(bytes32)":"2bbd59ca","mirrorConnector()":"cc394283","nonces(uint32)":"b95a2001","outboundRoot()":"65eaf11b","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","pendingAggregateRoots(bytes32)":"9d3117c7","processMessage(bytes)":"4ff746f6","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":"508a109b","provenAggregateRoots(bytes32)":"301f07c3","provenMessageRoots(bytes32)":"98c9f2b9","rateLimitBlocks()":"579c1618","removePendingAggregateRoot(bytes32)":"6b04a933","removeSender(address)":"b2f87643","renounceOwnership()":"715018a6","renounced()":"d232c220","send(bytes)":"2bb1ae7c","sentMessageRoots(bytes32)":"572386ca","setDelayBlocks(uint256)":"1eeaabea","setGasCap(uint256)":"7850b020","setMirrorConnector(address)":"5bd11efc","setRateLimitBlocks(uint256)":"e0fed010","setWatcherManager(address)":"d2a3cc71","unpause()":"3f4ba83a","verifySender(address)":"db1b7659","watcherManager()":"a792c29b","withdrawFunds(address)":"68742da6"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_mirrorDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_amb\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rootManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_processGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserveGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_merkle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Connector__processMessage_notUsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimited__rateLimited_messageSendRateExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__index_indexMoreThan32Bytes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"len\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slice\",\"type\":\"uint256\"}],\"name\":\"TypedMemView__index_overrun\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_identityOOG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_invalidPointer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_nullPointer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"updated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"DelayBlocksUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Dispatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_previous\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"GasCapUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"aggregateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"MessageProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"MirrorConnectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"mirrorDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"amb\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mirrorConnector\",\"type\":\"address\"}],\"name\":\"NewConnector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"Process\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updater\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRateLimit\",\"type\":\"uint256\"}],\"name\":\"SendRateLimitUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"watcherManager\",\"type\":\"address\"}],\"name\":\"WatcherManagerChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MERKLE\",\"outputs\":[{\"internalType\":\"contract MerkleTreeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROCESS_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROOT_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"addSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowlistedSenders\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_recipientAddress\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_messageBody\",\"type\":\"bytes\"}],\"name\":\"dispatch\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"home\",\"outputs\":[{\"internalType\":\"contract IOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_potentialReplica\",\"type\":\"address\"}],\"name\":\"isReplica\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastSentBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localDomain\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"messages\",\"outputs\":[{\"internalType\":\"enum SpokeConnector.MessageStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outboundRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"pendingAggregateRoots\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"path\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct SpokeConnector.Proof[]\",\"name\":\"_proofs\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"_aggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[32]\",\"name\":\"_aggregatePath\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"_aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"proveAndProcess\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenAggregateRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenMessageRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rateLimitBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_fraudulentRoot\",\"type\":\"bytes32\"}],\"name\":\"removePendingAggregateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"removeSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"sentMessageRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_delayBlocks\",\"type\":\"uint256\"}],\"name\":\"setDelayBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"}],\"name\":\"setGasCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"}],\"name\":\"setMirrorConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rateLimit\",\"type\":\"uint256\"}],\"name\":\"setRateLimitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"}],\"name\":\"setWatcherManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"watcherManager\",\"outputs\":[{\"internalType\":\"contract WatcherManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addSender(address)\":{\"details\":\"Only allowlisted routers (senders) can call `dispatch`.\"},\"dispatch(uint32,bytes32,bytes)\":{\"details\":\"The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \\\"hub\\\"), it will be combined into a single aggregate root by RootManager (along with outbound roots from other chains). This aggregate root will be redistributed to all destination chains. NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\"},\"home()\":{\"details\":\"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad\",\"returns\":{\"_0\":\"The local inbox contract\"}},\"isReplica(address)\":{\"returns\":{\"_0\":\"True if _potentialReplica is an enrolled Replica\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"processMessage(bytes)\":{\"details\":\"This is called by AMBs to process messages originating from mirror connector\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)\":{\"details\":\"Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.Intended to be called by the relayer at specific intervals during runtime.Will record a calculated root as having been proven if we've already proven that it was included in the aggregateRoot.\",\"params\":{\"_aggregateIndex\":\"Index of the inbound root in the aggregator's merkle tree in the hub.\",\"_aggregatePath\":\"Merkle path of inclusion for the inbound root.\",\"_aggregateRoot\":\"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.\",\"_proofs\":\"Batch of Proofs containing messages for proving/processing.\"}},\"removePendingAggregateRoot(bytes32)\":{\"details\":\"This method is required for handling fraud cases in the current construction.\",\"params\":{\"_fraudulentRoot\":\"Target fraudulent root that should be erased from the `pendingAggregateRoots` mapping.\"}},\"removeSender(address)\":{\"details\":\"Only allowlisted routers (senders) can call `dispatch`.\"},\"setRateLimitBlocks(uint256)\":{\"details\":\"Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\",\"params\":{\"_rateLimit\":\"The number of blocks require between sending messages. If set to 0, rate limiting for this spoke connector will be disabled.\"}},\"withdrawFunds(address)\":{\"details\":\"Withdraws the entire balance of the contract.\",\"params\":{\"_to\":\"The recipient of the funds withdrawn\"}}},\"version\":1},\"userdoc\":{\"events\":{\"FundsWithdrawn(address,uint256)\":{\"notice\":\"Emitted when funds are withdrawn by the admin\"},\"GasCapUpdated(uint256,uint256)\":{\"notice\":\"Emitted when admin updates the gas cap\"},\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"},\"WatcherManagerChanged(address)\":{\"notice\":\"Emitted when the manager address changes\"}},\"kind\":\"user\",\"methods\":{\"AMB()\":{\"notice\":\"Address of the AMB on this domain.\"},\"DOMAIN()\":{\"notice\":\"The domain of this Messaging (i.e. Connector) contract.\"},\"MERKLE()\":{\"notice\":\"MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root will be sent crosschain to the hub for aggregation and redistribution.\"},\"MIRROR_DOMAIN()\":{\"notice\":\"The domain of the corresponding messaging (i.e. Connector) contract.\"},\"PROCESS_GAS()\":{\"notice\":\"Minimum gas for processing a received message (reserved for handle)\"},\"RESERVE_GAS()\":{\"notice\":\"Reserved gas (to ensure tx completes in case message processing runs out)\"},\"ROOT_MANAGER()\":{\"notice\":\"RootManager contract address.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"addSender(address)\":{\"notice\":\"Adds a sender to the allowlist.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"delayBlocks()\":{\"notice\":\"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary.\"},\"dispatch(uint32,bytes32,bytes)\":{\"notice\":\"This function adds transfers to the outbound transfer merkle tree.\"},\"home()\":{\"notice\":\"Get the local inbox contract from the xAppConnectionManager\"},\"isReplica(address)\":{\"notice\":\"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\"},\"lastSentBlock()\":{\"notice\":\"Tracks the last block that we sent a message.\"},\"localDomain()\":{\"notice\":\"This provides the implementation for what is defined in the ConnectorManager to avoid storing the domain redundantly\"},\"messages(bytes32)\":{\"notice\":\"Mapping of message leaves to MessageStatus, keyed on leaf.\"},\"mirrorConnector()\":{\"notice\":\"Connector on L2 for L1 connectors, and vice versa.\"},\"nonces(uint32)\":{\"notice\":\"domain => next available nonce for the domain.\"},\"outboundRoot()\":{\"notice\":\"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"pause()\":{\"notice\":\"Watchers can pause contracts if fraud is detected\"},\"pendingAggregateRoots(bytes32)\":{\"notice\":\"This will hold the commit block for incoming aggregateRoots from the hub chain. Once they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can be used for proving inclusion of crosschain messages.\"},\"processMessage(bytes)\":{\"notice\":\"Processes a message received by an AMB\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)\":{\"notice\":\"Must be able to call the `handle` function on the BridgeRouter contract. This is called on the destination domain to handle incoming messages. Proving: Calculates the expected inbound root from an origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this calculated inbound root is included in the current aggregateRoot, given its index in the aggregator tree and the proof of inclusion. Processing: After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for execution.\"},\"provenAggregateRoots(bytes32)\":{\"notice\":\"This tracks the roots of the aggregate tree containing outbound roots from all other supported domains. The current version is the one that is known to be past the delayBlocks time period.\"},\"provenMessageRoots(bytes32)\":{\"notice\":\"This tracks whether the root has been proven to exist within the given aggregate root.\"},\"rateLimitBlocks()\":{\"notice\":\"The number of blocks required between message sending events.\"},\"removePendingAggregateRoot(bytes32)\":{\"notice\":\"Manually remove a pending aggregateRoot by owner if the contract is paused.\"},\"removeSender(address)\":{\"notice\":\"Removes a sender from the allowlist.\"},\"renounceOwnership()\":{\"notice\":\"Should not be able to renounce ownership\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"send(bytes)\":{\"notice\":\"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)\"},\"sentMessageRoots(bytes32)\":{\"notice\":\"This mapping records all message roots that have already been sent in order to prevent redundant message roots from being sent to hub.\"},\"setDelayBlocks(uint256)\":{\"notice\":\"Set the `delayBlocks`, the period in blocks over which an incoming message is verified.\"},\"setMirrorConnector(address)\":{\"notice\":\"Sets the address of the l2Connector for this domain\"},\"setRateLimitBlocks(uint256)\":{\"notice\":\"Set the rate limit (number of blocks) at which we can send messages from this contract to the hub chain using the `send` method.\"},\"setWatcherManager(address)\":{\"notice\":\"Owner can enroll a watcher (abilities are defined by inheriting contracts)\"},\"unpause()\":{\"notice\":\"Owner can unpause contracts if fraud is detected by watchers\"},\"verifySender(address)\":{\"notice\":\"Checks the cross domain sender for a given address\"},\"watcherManager()\":{\"notice\":\"The `WatcherManager` contract governs the watcher allowlist.\"},\"withdrawFunds(address)\":{\"notice\":\"This function should be callable by owner, and send funds trapped on a connector to the provided recipient.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol\":\"OptimismSpokeConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n    /**\\n     * @dev Emitted when the pause is triggered by `account`.\\n     */\\n    event Paused(address account);\\n\\n    /**\\n     * @dev Emitted when the pause is lifted by `account`.\\n     */\\n    event Unpaused(address account);\\n\\n    bool private _paused;\\n\\n    /**\\n     * @dev Initializes the contract in unpaused state.\\n     */\\n    constructor() {\\n        _paused = false;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    modifier whenNotPaused() {\\n        _requireNotPaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    modifier whenPaused() {\\n        _requirePaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the contract is paused, and false otherwise.\\n     */\\n    function paused() public view virtual returns (bool) {\\n        return _paused;\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is paused.\\n     */\\n    function _requireNotPaused() internal view virtual {\\n        require(!paused(), \\\"Pausable: paused\\\");\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is not paused.\\n     */\\n    function _requirePaused() internal view virtual {\\n        require(paused(), \\\"Pausable: not paused\\\");\\n    }\\n\\n    /**\\n     * @dev Triggers stopped state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    function _pause() internal virtual whenNotPaused {\\n        _paused = true;\\n        emit Paused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Returns to normal state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    function _unpause() internal virtual whenPaused {\\n        _paused = false;\\n        emit Unpaused(_msgSender());\\n    }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"contracts/messaging/MerkleTreeManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnableUpgradeable} from \\\"../shared/ProposedOwnableUpgradeable.sol\\\";\\nimport {MerkleLib} from \\\"./libraries/MerkleLib.sol\\\";\\n\\n/**\\n * @title MerkleTreeManager\\n * @notice Contains a Merkle tree instance and exposes read/write functions for the tree.\\n * @dev On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector.\\n */\\ncontract MerkleTreeManager is ProposedOwnableUpgradeable {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleTreeManager__setArborist_zeroAddress();\\n  error MerkleTreeManager__setArborist_alreadyArborist();\\n\\n  // ============ Events ============\\n\\n  event ArboristUpdated(address previous, address updated);\\n\\n  event LeafInserted(bytes32 root, uint256 count, bytes32 leaf);\\n\\n  event LeavesInserted(bytes32 root, uint256 count, bytes32[] leaves);\\n\\n  // ============ Libraries ============\\n\\n  using MerkleLib for MerkleLib.Tree;\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Core data structure with which this contract is tasked with keeping custody.\\n   * Writable only by the designated arborist.\\n   */\\n  MerkleLib.Tree public tree;\\n\\n  /**\\n   * @notice The arborist contract that has permission to write to this tree.\\n   * @dev This could be the root manager contract or a spoke connector contract, for example.\\n   */\\n  address public arborist;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyArborist() {\\n    require(arborist == msg.sender, \\\"!arborist\\\");\\n    _;\\n  }\\n\\n  // ============ Getters ============\\n\\n  /**\\n   * @notice Returns the current branch.\\n   */\\n  function branch() public view returns (bytes32[32] memory) {\\n    return tree.branch;\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the current root.\\n   */\\n  function root() public view returns (bytes32) {\\n    return tree.root();\\n  }\\n\\n  /**\\n   * @notice Returns the number of inserted leaves in the tree (current index).\\n   */\\n  function count() public view returns (uint256) {\\n    return tree.count;\\n  }\\n\\n  /**\\n   * @notice Convenience getter: returns the root and count.\\n   */\\n  function rootAndCount() public view returns (bytes32, uint256) {\\n    return (tree.root(), tree.count);\\n  }\\n\\n  // ======== Initializer =========\\n\\n  function initialize(address _arborist) public initializer {\\n    __MerkleTreeManager_init(_arborist);\\n    __ProposedOwnable_init();\\n  }\\n\\n  /**\\n   * @dev Initializes MerkleTreeManager instance. Sets the msg.sender as the initial permissioned\\n   */\\n  function __MerkleTreeManager_init(address _arborist) internal onlyInitializing {\\n    __MerkleTreeManager_init_unchained(_arborist);\\n  }\\n\\n  function __MerkleTreeManager_init_unchained(address _arborist) internal onlyInitializing {\\n    arborist = _arborist;\\n  }\\n\\n  // ============ Admin Functions ==============\\n\\n  /**\\n   * @notice Method for the current arborist to assign write permissions to a new arborist.\\n   * @param newArborist The new address to set as the current arborist.\\n   */\\n  function setArborist(address newArborist) external onlyOwner {\\n    if (newArborist == address(0)) revert MerkleTreeManager__setArborist_zeroAddress();\\n    address current = arborist;\\n    if (current == newArborist) revert MerkleTreeManager__setArborist_alreadyArborist();\\n\\n    // Emit updated event\\n    emit ArboristUpdated(current, newArborist);\\n\\n    arborist = newArborist;\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as there is a possibility the\\n   * arborist may change.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ========= Public Functions =========\\n\\n  /**\\n   * @notice Inserts the given leaves into the tree.\\n   * @param leaves The leaves to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32[] memory leaves) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // For > 1 leaf, considerably more efficient to put this tree into memory, conduct operations,\\n    // then re-assign it to storage - *especially* if we have multiple leaves to insert.\\n    MerkleLib.Tree memory _tree = tree;\\n\\n    uint256 leafCount = leaves.length;\\n    for (uint256 i; i < leafCount; ) {\\n      // Insert the new node (using in-memory method).\\n      _tree = _tree.insert(leaves[i]);\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // Write the newly updated tree to storage.\\n    tree = _tree;\\n\\n    // Get return details for convenience.\\n    _count = _tree.count;\\n    // NOTE: Root calculation method currently reads from storage only.\\n    _root = tree.root();\\n\\n    emit LeavesInserted(_root, _count, leaves);\\n  }\\n\\n  /**\\n   * @notice Inserts the given leaf into the tree.\\n   * @param leaf The leaf to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32 leaf) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // Insert the new node.\\n    tree = tree.insert(leaf);\\n    _count = tree.count;\\n    _root = tree.root();\\n\\n    emit LeafInserted(_root, _count, leaf);\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[48] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x6eb338843435d4e859de1c71b9ad458c41aeba79002eaa58a463ef86effda89a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherClient.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Pausable} from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\nimport {WatcherManager} from \\\"./WatcherManager.sol\\\";\\n\\n/**\\n * @notice This contract abstracts the functionality of the watcher manager.\\n * Contracts can inherit this contract to be able to use the watcher manager's shared watcher set.\\n */\\n\\ncontract WatcherClient is ProposedOwnable, Pausable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted when the manager address changes\\n   * @param watcherManager The updated manager\\n   */\\n  event WatcherManagerChanged(address watcherManager);\\n\\n  // ============ Properties ============\\n  /**\\n   * @notice The `WatcherManager` contract governs the watcher allowlist.\\n   * @dev Multiple clients can share a watcher set using the same manager\\n   */\\n  WatcherManager public watcherManager;\\n\\n  // ============ Constructor ============\\n  constructor(address _watcherManager) ProposedOwnable() {\\n    watcherManager = WatcherManager(_watcherManager);\\n  }\\n\\n  // ============ Modifiers ============\\n  /**\\n   * @notice Enforces the sender is the watcher\\n   */\\n  modifier onlyWatcher() {\\n    require(watcherManager.isWatcher(msg.sender), \\\"!watcher\\\");\\n    _;\\n  }\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @notice Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function setWatcherManager(address _watcherManager) external onlyOwner {\\n    require(_watcherManager != address(watcherManager), \\\"already watcher manager\\\");\\n    watcherManager = WatcherManager(_watcherManager);\\n    emit WatcherManagerChanged(_watcherManager);\\n  }\\n\\n  /**\\n   * @notice Owner can unpause contracts if fraud is detected by watchers\\n   */\\n  function unpause() external onlyOwner whenPaused {\\n    _unpause();\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as only the owner\\n   * is able to unpause the contracts. You can still propose `address(0)`,\\n   * but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ============ Watcher fns ============\\n\\n  /**\\n   * @notice Watchers can pause contracts if fraud is detected\\n   */\\n  function pause() external onlyWatcher whenNotPaused {\\n    _pause();\\n  }\\n}\\n\",\"keccak256\":\"0x97b0da2c0317359ef2980d1f3c5fcdd7df2bdacbedf216dcbda521b96124444a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can\\n * inherit to make use of the same watcher set.\\n */\\n\\ncontract WatcherManager is ProposedOwnable {\\n  // ============ Events ============\\n  event WatcherAdded(address watcher);\\n\\n  event WatcherRemoved(address watcher);\\n\\n  // ============ Properties ============\\n  mapping(address => bool) public isWatcher;\\n\\n  // ============ Constructor ============\\n  constructor() ProposedOwnable() {\\n    _setOwner(msg.sender);\\n  }\\n\\n  // ============ Modifiers ============\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @dev Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function addWatcher(address _watcher) external onlyOwner {\\n    require(!isWatcher[_watcher], \\\"already watcher\\\");\\n    isWatcher[_watcher] = true;\\n    emit WatcherAdded(_watcher);\\n  }\\n\\n  /**\\n   * @dev Owner can unenroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function removeWatcher(address _watcher) external onlyOwner {\\n    require(isWatcher[_watcher], \\\"!exist\\\");\\n    delete isWatcher[_watcher];\\n    emit WatcherRemoved(_watcher);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as the watcher griefing\\n   * vector exists. You can still propose `address(0)`, but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n}\\n\",\"keccak256\":\"0x94d9db4cd19453c9047164f697011163a42a6e12f9b2e1d7fbcfb35a7d021318\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/Connector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IConnector} from \\\"../interfaces/IConnector.sol\\\";\\n\\n/**\\n * @title Connector\\n * @author Connext Labs, Inc.\\n * @notice This contract has the messaging interface functions used by all connectors.\\n *\\n * @dev This contract stores information about mirror connectors, but can be used as a\\n * base for contracts that do not have a mirror (i.e. the connector handling messaging on\\n * mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\\n * will be empty\\n *\\n * @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\\n * or `mirrorGas`\\n */\\nabstract contract Connector is ProposedOwnable, IConnector {\\n  // ========== Custom Errors ===========\\n\\n  error Connector__processMessage_notUsed();\\n\\n  // ============ Events ============\\n\\n  event NewConnector(\\n    uint32 indexed domain,\\n    uint32 indexed mirrorDomain,\\n    address amb,\\n    address rootManager,\\n    address mirrorConnector\\n  );\\n\\n  event MirrorConnectorUpdated(address previous, address current);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The domain of this Messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable DOMAIN;\\n\\n  /**\\n   * @notice Address of the AMB on this domain.\\n   */\\n  address public immutable AMB;\\n\\n  /**\\n   * @notice RootManager contract address.\\n   */\\n  address public immutable ROOT_MANAGER;\\n\\n  /**\\n   * @notice The domain of the corresponding messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable MIRROR_DOMAIN;\\n\\n  /**\\n   * @notice Connector on L2 for L1 connectors, and vice versa.\\n   */\\n  address public mirrorConnector;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered AMB\\n   */\\n  modifier onlyAMB() {\\n    require(msg.sender == AMB, \\\"!AMB\\\");\\n    _;\\n  }\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered ROOT_MANAGER\\n   */\\n  modifier onlyRootManager() {\\n    // NOTE: RootManager will be zero address for spoke connectors.\\n    // Only root manager can dispatch a message to spokes/L2s via the hub connector.\\n    require(msg.sender == ROOT_MANAGER, \\\"!rootManager\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) ProposedOwnable() {\\n    // set the owner\\n    _setOwner(msg.sender);\\n\\n    // sanity checks on values\\n    require(_domain != 0, \\\"empty domain\\\");\\n    require(_rootManager != address(0), \\\"empty rootManager\\\");\\n    // see note at top of contract on why the mirror values are not sanity checked\\n\\n    // set immutables\\n    DOMAIN = _domain;\\n    AMB = _amb;\\n    ROOT_MANAGER = _rootManager;\\n    MIRROR_DOMAIN = _mirrorDomain;\\n    // set mutables if defined\\n    if (_mirrorConnector != address(0)) {\\n      _setMirrorConnector(_mirrorConnector);\\n    }\\n\\n    emit NewConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector);\\n  }\\n\\n  // ============ Receivable ============\\n  /**\\n   * @notice Connectors may need to receive native asset to handle fees when sending a\\n   * message\\n   */\\n  receive() external payable {}\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Sets the address of the l2Connector for this domain\\n   */\\n  function setMirrorConnector(address _mirrorConnector) public onlyOwner {\\n    _setMirrorConnector(_mirrorConnector);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice Processes a message received by an AMB\\n   * @dev This is called by AMBs to process messages originating from mirror connector\\n   */\\n  function processMessage(bytes memory _data) external virtual onlyAMB {\\n    _processMessage(_data);\\n    emit MessageProcessed(_data, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Checks the cross domain sender for a given address\\n   */\\n  function verifySender(address _expected) external returns (bool) {\\n    return _verifySender(_expected);\\n  }\\n\\n  // ============ Virtual Functions ============\\n\\n  /**\\n   * @notice This function is used by the Connext contract on the l2 domain to send a message to the\\n   * l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\\n   * @param _data The contents of the message\\n   * @param _encodedData Data used to send the message; specific to connector\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal virtual;\\n\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(\\n    bytes memory /* _data */\\n  ) internal virtual {\\n    // By default, reverts. This is to ensure the call path is not used unless this function is\\n    // overridden by the inheriting class\\n    revert Connector__processMessage_notUsed();\\n  }\\n\\n  /**\\n   * @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\\n   * is the expected address.\\n   * @dev Should be overridden by the implementing Connector contract.\\n   */\\n  function _verifySender(address _expected) internal virtual returns (bool);\\n\\n  // ============ Private Functions ============\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal virtual {\\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\\n    mirrorConnector = _mirrorConnector;\\n  }\\n}\\n\",\"keccak256\":\"0x08d4077a1b5caf9f46491206064bb24bee467dd741b42fed3d30a608eea83368\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/ConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IConnectorManager} from \\\"../interfaces/IConnectorManager.sol\\\";\\nimport {IOutbox} from \\\"../interfaces/IOutbox.sol\\\";\\n\\n/**\\n * @notice This is an interface to allow the `Messaging` contract to be used\\n * as a `XappConnectionManager` on all router contracts.\\n *\\n * @dev Each nomad router contract has a `XappConnectionClient`, which references a\\n * XappConnectionManager to get the `Home` (outbox) and approved `Replica` (inbox)\\n * instances. At any point the client can replace the manager it's pointing to,\\n * changing the underlying messaging connection.\\n */\\nabstract contract ConnectorManager is IConnectorManager {\\n  constructor() {}\\n\\n  function home() public view returns (IOutbox) {\\n    return IOutbox(address(this));\\n  }\\n\\n  function isReplica(address _potentialReplica) public view returns (bool) {\\n    return _potentialReplica == address(this);\\n  }\\n\\n  function localDomain() external view virtual returns (uint32);\\n}\\n\",\"keccak256\":\"0x0112a527de062459aadfc2c8aa59a81c379d53c0f646f7869c6250e343ba91be\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/GasCap.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\n\\nabstract contract GasCap is ProposedOwnable {\\n  // ============ Storage ============\\n  /**\\n   * @notice The gnosis amb requires destination gas to be specified on the origin.\\n   * The gas used will be passed in by the relayer to allow for real-time estimates,\\n   * but will be capped at the admin-set cap.\\n   */\\n  uint256 gasCap;\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted when admin updates the gas cap\\n   * @param _previous The starting value\\n   * @param _updated The final value\\n   */\\n  event GasCapUpdated(uint256 _previous, uint256 _updated);\\n\\n  // ============ Constructor ============\\n  constructor(uint256 _gasCap) {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Admin Fns ============\\n  function setGasCap(uint256 _gasCap) public onlyOwner {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Internal Fns ============\\n\\n  /**\\n   * @notice Used (by admin) to update the gas cap\\n   * @param _gasCap The new value\\n   */\\n  function _setGasCap(uint256 _gasCap) internal {\\n    emit GasCapUpdated(gasCap, _gasCap);\\n    gasCap = _gasCap;\\n  }\\n\\n  /**\\n   * @notice Used to get the gas to use. Will be the original value IFF it\\n   * is less than the cap\\n   * @param _gas The proposed gas value\\n   */\\n  function _getGas(uint256 _gas) internal view returns (uint256) {\\n    if (_gas > gasCap) {\\n      _gas = gasCap;\\n    }\\n    return _gas;\\n  }\\n}\\n\",\"keccak256\":\"0xb8b52a3372f08490c918d1f490ad80764d54bd62d1638e4d17a5b552efe6587d\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/SpokeConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ReentrancyGuard} from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {ExcessivelySafeCall} from \\\"../../shared/libraries/ExcessivelySafeCall.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {MerkleLib} from \\\"../libraries/MerkleLib.sol\\\";\\nimport {Message} from \\\"../libraries/Message.sol\\\";\\nimport {RateLimited} from \\\"../libraries/RateLimited.sol\\\";\\n\\nimport {MerkleTreeManager} from \\\"../MerkleTreeManager.sol\\\";\\nimport {WatcherClient} from \\\"../WatcherClient.sol\\\";\\n\\nimport {Connector, ProposedOwnable} from \\\"./Connector.sol\\\";\\nimport {ConnectorManager} from \\\"./ConnectorManager.sol\\\";\\n\\n/**\\n * @title SpokeConnector\\n * @author Connext Labs, Inc.\\n * @notice This contract implements the messaging functions needed on the spoke-side of a given AMB.\\n * The SpokeConnector extends the HubConnector functionality by being able to send, store, and prove\\n * messages.\\n *\\n * @dev If you are deploying this contract to mainnet, then the mirror values stored in the HubConnector\\n * will be unused\\n */\\nabstract contract SpokeConnector is Connector, ConnectorManager, WatcherClient, RateLimited, ReentrancyGuard {\\n  // ============ Libraries ============\\n\\n  using MerkleLib for MerkleLib.Tree;\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n  using Message for bytes29;\\n\\n  // ============ Events ============\\n\\n  event SenderAdded(address sender);\\n\\n  event SenderRemoved(address sender);\\n\\n  event AggregateRootReceived(bytes32 root);\\n\\n  event AggregateRootRemoved(bytes32 root);\\n\\n  event AggregateRootVerified(bytes32 indexed root);\\n\\n  event Dispatch(bytes32 leaf, uint256 index, bytes32 root, bytes message);\\n\\n  event Process(bytes32 leaf, bool success, bytes returnData);\\n\\n  event DelayBlocksUpdated(uint256 indexed updated, address caller);\\n\\n  /**\\n   * @notice Emitted when funds are withdrawn by the admin\\n   * @dev See comments in `withdrawFunds`\\n   * @param to The recipient of the funds\\n   * @param amount The amount withdrawn\\n   */\\n  event FundsWithdrawn(address indexed to, uint256 amount);\\n\\n  event MessageProven(bytes32 indexed leaf, bytes32 indexed aggregateRoot, uint256 aggregateIndex);\\n\\n  // ============ Structs ============\\n\\n  // Status of Message:\\n  //   0 - None - message has not been proven or processed\\n  //   1 - Proven - message inclusion proof has been validated\\n  //   2 - Processed - message has been dispatched to recipient\\n  enum MessageStatus {\\n    None,\\n    Proven,\\n    Processed\\n  }\\n\\n  /**\\n   * Struct for submitting a proof for a given message. Used in `proveAndProcess` below.\\n   * @param message Bytes of message to be processed. The hash of this message is considered the leaf.\\n   * @param proof Merkle proof of inclusion for given leaf.\\n   * @param index Index of leaf in home's merkle tree.\\n   */\\n  struct Proof {\\n    bytes message;\\n    bytes32[32] path;\\n    uint256 index;\\n  }\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Number of blocks to delay the processing of a message to allow for watchers to verify\\n   * the validity and pause if necessary.\\n   */\\n  uint256 public delayBlocks;\\n\\n  /**\\n   * @notice MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root\\n   * will be sent crosschain to the hub for aggregation and redistribution.\\n   */\\n  MerkleTreeManager public immutable MERKLE;\\n\\n  /**\\n   * @notice Minimum gas for processing a received message (reserved for handle)\\n   */\\n  uint256 public immutable PROCESS_GAS;\\n\\n  /**\\n   * @notice Reserved gas (to ensure tx completes in case message processing runs out)\\n   */\\n  uint256 public immutable RESERVE_GAS;\\n\\n  /**\\n   * @notice This will hold the commit block for incoming aggregateRoots from the hub chain. Once\\n   * they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can\\n   * be used for proving inclusion of crosschain messages.\\n   *\\n   * @dev NOTE: A commit block of 0 should be considered invalid (it is an empty entry in the\\n   * mapping). We must ALWAYS ensure the value is not 0 before checking whether it has surpassed the\\n   * verification period.\\n   */\\n  mapping(bytes32 => uint256) public pendingAggregateRoots;\\n\\n  /**\\n   * @notice This tracks the roots of the aggregate tree containing outbound roots from all other\\n   * supported domains. The current version is the one that is known to be past the delayBlocks\\n   * time period.\\n   * @dev This root is the root of the tree that is aggregated on mainnet (composed of all the roots\\n   * of previous trees).\\n   */\\n  mapping(bytes32 => bool) public provenAggregateRoots;\\n\\n  /**\\n   * @notice This tracks whether the root has been proven to exist within the given aggregate root.\\n   * @dev Tracking this is an optimization so you dont have to prove inclusion of the same constituent\\n   * root many times.\\n   */\\n  mapping(bytes32 => bool) public provenMessageRoots;\\n\\n  /**\\n   * @notice This mapping records all message roots that have already been sent in order to prevent\\n   * redundant message roots from being sent to hub.\\n   */\\n  mapping(bytes32 => bool) public sentMessageRoots;\\n\\n  /**\\n   * @dev This is used for the `onlyAllowlistedSender` modifier, which gates who\\n   * can send messages using `dispatch`.\\n   */\\n  mapping(address => bool) public allowlistedSenders;\\n\\n  /**\\n   * @notice domain => next available nonce for the domain.\\n   */\\n  mapping(uint32 => uint32) public nonces;\\n\\n  /**\\n   * @notice Mapping of message leaves to MessageStatus, keyed on leaf.\\n   */\\n  mapping(bytes32 => MessageStatus) public messages;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyAllowlistedSender() {\\n    require(allowlistedSenders[msg.sender], \\\"!allowlisted\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new SpokeConnector instance.\\n   * @param _domain The domain this connector lives on.\\n   * @param _mirrorDomain The hub domain.\\n   * @param _amb The address of the AMB on the spoke domain this connector lives on.\\n   * @param _rootManager The address of the RootManager on the hub.\\n   * @param _mirrorConnector The address of the spoke connector.\\n   * @param _processGas The gas costs used in `handle` to ensure meaningful state changes can occur (minimum gas needed\\n   * to handle transaction).\\n   * @param _reserveGas The gas costs reserved when `handle` is called to ensure failures are handled.\\n   * @param _delayBlocks The delay for the validation period for incoming messages in blocks.\\n   * @param _merkle The address of the MerkleTreeManager on this spoke domain.\\n   * @param _watcherManager The address of the WatcherManager to whom this connector is a client.\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    uint256 _processGas,\\n    uint256 _reserveGas,\\n    uint256 _delayBlocks,\\n    address _merkle,\\n    address _watcherManager\\n  )\\n    ConnectorManager()\\n    Connector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector)\\n    WatcherClient(_watcherManager)\\n  {\\n    // Sanity check: constants are reasonable.\\n    require(_processGas > 850_000 - 1, \\\"!process gas\\\");\\n    require(_reserveGas > 15_000 - 1, \\\"!reserve gas\\\");\\n    PROCESS_GAS = _processGas;\\n    RESERVE_GAS = _reserveGas;\\n\\n    require(_merkle != address(0), \\\"!zero merkle\\\");\\n    MERKLE = MerkleTreeManager(_merkle);\\n\\n    delayBlocks = _delayBlocks;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Adds a sender to the allowlist.\\n   * @dev Only allowlisted routers (senders) can call `dispatch`.\\n   */\\n  function addSender(address _sender) public onlyOwner {\\n    allowlistedSenders[_sender] = true;\\n    emit SenderAdded(_sender);\\n  }\\n\\n  /**\\n   * @notice Removes a sender from the allowlist.\\n   * @dev Only allowlisted routers (senders) can call `dispatch`.\\n   */\\n  function removeSender(address _sender) public onlyOwner {\\n    delete allowlistedSenders[_sender];\\n    emit SenderRemoved(_sender);\\n  }\\n\\n  /**\\n   * @notice Set the `delayBlocks`, the period in blocks over which an incoming message\\n   * is verified.\\n   */\\n  function setDelayBlocks(uint256 _delayBlocks) public onlyOwner {\\n    require(_delayBlocks != delayBlocks, \\\"!delayBlocks\\\");\\n    emit DelayBlocksUpdated(_delayBlocks, msg.sender);\\n    delayBlocks = _delayBlocks;\\n  }\\n\\n  /**\\n   * @notice Set the rate limit (number of blocks) at which we can send messages from\\n   * this contract to the hub chain using the `send` method.\\n   * @dev Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\\n   * @param _rateLimit The number of blocks require between sending messages. If set to\\n   * 0, rate limiting for this spoke connector will be disabled.\\n   */\\n  function setRateLimitBlocks(uint256 _rateLimit) public onlyOwner {\\n    _setRateLimitBlocks(_rateLimit);\\n  }\\n\\n  /**\\n   * @notice Manually remove a pending aggregateRoot by owner if the contract is paused.\\n   * @dev This method is required for handling fraud cases in the current construction.\\n   * @param _fraudulentRoot Target fraudulent root that should be erased from the\\n   * `pendingAggregateRoots` mapping.\\n   */\\n  function removePendingAggregateRoot(bytes32 _fraudulentRoot) public onlyOwner whenPaused {\\n    // Sanity check: pending aggregate root exists.\\n    require(pendingAggregateRoots[_fraudulentRoot] != 0, \\\"aggregateRoot !exists\\\");\\n    delete pendingAggregateRoots[_fraudulentRoot];\\n    emit AggregateRootRemoved(_fraudulentRoot);\\n  }\\n\\n  /**\\n   * @notice This function should be callable by owner, and send funds trapped on\\n   * a connector to the provided recipient.\\n   * @dev Withdraws the entire balance of the contract.\\n   *\\n   * @param _to The recipient of the funds withdrawn\\n   */\\n  function withdrawFunds(address _to) public onlyOwner {\\n    uint256 amount = address(this).balance;\\n    Address.sendValue(payable(_to), amount);\\n    emit FundsWithdrawn(_to, amount);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as it is impossible in the\\n   * WatcherClient, and as long as only the owner can remove pending roots in case of\\n   * fraud.\\n   */\\n  function renounceOwnership() public virtual override(ProposedOwnable, WatcherClient) onlyOwner {}\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice This returns the root of all messages with the origin domain as this domain (i.e.\\n   * all outbound messages)\\n   */\\n  function outboundRoot() external view returns (bytes32) {\\n    return MERKLE.root();\\n  }\\n\\n  /**\\n   * @notice This provides the implementation for what is defined in the ConnectorManager\\n   * to avoid storing the domain redundantly\\n   */\\n  function localDomain() external view override returns (uint32) {\\n    return DOMAIN;\\n  }\\n\\n  /**\\n   * @notice This returns the root of all messages with the origin domain as this domain (i.e.\\n   * all outbound messages)\\n   */\\n  function send(bytes memory _encodedData) external payable whenNotPaused rateLimited {\\n    bytes32 root = MERKLE.root();\\n    require(sentMessageRoots[root] == false, \\\"root already sent\\\");\\n    bytes memory _data = abi.encodePacked(root);\\n    _sendMessage(_data, _encodedData);\\n    sentMessageRoots[root] = true;\\n    emit MessageSent(_data, _encodedData, msg.sender);\\n  }\\n\\n  /**\\n   * @notice This function adds transfers to the outbound transfer merkle tree.\\n   * @dev The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \\\"hub\\\"),\\n   * it will be combined into a single aggregate root by RootManager (along with outbound roots from other\\n   * chains). This aggregate root will be redistributed to all destination chains.\\n   *\\n   * NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external onlyAllowlistedSender returns (bytes32, bytes memory) {\\n    // Get the next nonce for the destination domain, then increment it.\\n    uint32 _nonce = nonces[_destinationDomain]++;\\n\\n    // Format the message into packed bytes.\\n    bytes memory _message = Message.formatMessage(\\n      DOMAIN,\\n      TypeCasts.addressToBytes32(msg.sender),\\n      _nonce,\\n      _destinationDomain,\\n      _recipientAddress,\\n      _messageBody\\n    );\\n\\n    // Insert the hashed message into the Merkle tree.\\n    bytes32 _messageHash = keccak256(_message);\\n\\n    // Returns the root calculated after insertion of message, needed for events for\\n    // watchers\\n    (bytes32 _root, uint256 _count) = MERKLE.insert(_messageHash);\\n\\n    // Emit Dispatch event with message information.\\n    // NOTE: Current leaf index is count - 1 since new leaf has already been inserted.\\n    emit Dispatch(_messageHash, _count - 1, _root, _message);\\n    return (_messageHash, _message);\\n  }\\n\\n  /**\\n   * @notice Must be able to call the `handle` function on the BridgeRouter contract. This is called\\n   * on the destination domain to handle incoming messages.\\n   *\\n   * Proving:\\n   * Calculates the expected inbound root from an origin chain given a leaf (message hash),\\n   * the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this\\n   * calculated inbound root is included in the current aggregateRoot, given its index in the aggregator\\n   * tree and the proof of inclusion.\\n   *\\n   * Processing:\\n   * After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for\\n   * execution.\\n   *\\n   * @dev Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they\\n   * must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.\\n   * @dev Intended to be called by the relayer at specific intervals during runtime.\\n   * @dev Will record a calculated root as having been proven if we've already proven that it was included\\n   * in the aggregateRoot.\\n   *\\n   * @param _proofs Batch of Proofs containing messages for proving/processing.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   */\\n  function proveAndProcess(\\n    Proof[] calldata _proofs,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) external whenNotPaused nonReentrant {\\n    // Sanity check: proofs are included.\\n    require(_proofs.length > 0, \\\"!proofs\\\");\\n\\n    // Optimization: calculate the inbound root for the first message in the batch and validate that\\n    // it's included in the aggregator tree. We can use this as a reference for every calculation\\n    // below to minimize storage access calls.\\n    bytes32 _messageHash = keccak256(_proofs[0].message);\\n    // TODO: Could use an array of sharedRoots so you can submit a message batch of messages with\\n    // different origins.\\n    bytes32 _messageRoot = calculateMessageRoot(_messageHash, _proofs[0].path, _proofs[0].index);\\n\\n    // Handle proving this message root is included in the target aggregate root.\\n    proveMessageRoot(_messageRoot, _aggregateRoot, _aggregatePath, _aggregateIndex);\\n    // Assuming the inbound message root was proven, the first message is now considered proven.\\n    messages[_messageHash] = MessageStatus.Proven;\\n\\n    // Now we handle proving all remaining messages in the batch - they should all share the same\\n    // inbound root!\\n    uint256 len = _proofs.length;\\n    for (uint32 i = 1; i < len; ) {\\n      _messageHash = keccak256(_proofs[i].message);\\n      bytes32 _calculatedRoot = calculateMessageRoot(_messageHash, _proofs[i].path, _proofs[i].index);\\n      // Make sure this root matches the validated inbound root.\\n      require(_calculatedRoot == _messageRoot, \\\"!sharedRoot\\\");\\n      // Message is proven!\\n      messages[_messageHash] = MessageStatus.Proven;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // All messages have been proven. We iterate separately here to process each message in the batch.\\n    // NOTE: Going through the proving phase for all messages in the batch BEFORE processing ensures\\n    // we hit reverts before we consume unbounded gas from `process` calls.\\n    for (uint32 i = 0; i < len; ) {\\n      process(_proofs[i].message);\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  // ============ Private Functions ============\\n\\n  /**\\n   * @notice This is either called by the Connector (AKA `this`) on the spoke (L2) chain after retrieving\\n   * latest `aggregateRoot` from the AMB (sourced from mainnet) OR called by the AMB directly.\\n   * @dev Must check the msg.sender on the origin chain to ensure only the root manager is passing\\n   * these roots.\\n   */\\n  function receiveAggregateRoot(bytes32 _newRoot) internal {\\n    require(_newRoot != bytes32(\\\"\\\"), \\\"new root empty\\\");\\n    require(pendingAggregateRoots[_newRoot] == 0, \\\"root already pending\\\");\\n    require(!provenAggregateRoots[_newRoot], \\\"root already proven\\\");\\n\\n    pendingAggregateRoots[_newRoot] = block.number;\\n    emit AggregateRootReceived(_newRoot);\\n  }\\n\\n  /**\\n   * @notice Checks whether the given aggregate root has surpassed the verification period.\\n   * @dev Reverts if the given aggregate root is invalid (does not exist) OR has not surpassed\\n   * verification period.\\n   * @dev If the target aggregate root is pending and HAS surpassed the verification period, then we will\\n   * move it over to the proven mapping.\\n   * @param _aggregateRoot Target aggregate root to verify.\\n   */\\n  function verifyAggregateRoot(bytes32 _aggregateRoot) internal {\\n    // 0. Sanity check: root is not 0.\\n    require(_aggregateRoot != bytes32(\\\"\\\"), \\\"aggregateRoot empty\\\");\\n\\n    // 1. Check to see if the target *aggregate* root has already been proven.\\n    if (provenAggregateRoots[_aggregateRoot]) {\\n      return; // Short circuit if this root is proven.\\n    }\\n\\n    // 2. The target aggregate root must be pending. Aggregate root commit block entry MUST exist.\\n    uint256 _aggregateRootCommitBlock = pendingAggregateRoots[_aggregateRoot];\\n    require(_aggregateRootCommitBlock != 0, \\\"aggregateRoot !exist\\\");\\n\\n    // 3. Pending aggregate root has surpassed the `delayBlocks` verification period.\\n    require(block.number - _aggregateRootCommitBlock >= delayBlocks, \\\"aggregateRoot !verified\\\");\\n\\n    // 4. The target aggregate root has surpassed verification period, we can move it over to the\\n    // proven mapping.\\n    provenAggregateRoots[_aggregateRoot] = true;\\n    emit AggregateRootVerified(_aggregateRoot);\\n    // May as well delete the pending aggregate root entry for the gas refund: it should no longer\\n    // be needed.\\n    delete pendingAggregateRoots[_aggregateRoot];\\n  }\\n\\n  /**\\n   * @notice Checks whether a given message is valid. If so, calculates the expected inbound root from an\\n   * origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion.\\n   * @dev Reverts if message's MessageStatus != None (i.e. if message was already proven or processed).\\n   *\\n   * @param _messageHash Leaf (message hash) that requires proving.\\n   * @param _messagePath Merkle path of inclusion for the leaf.\\n   * @param _messageIndex Index of leaf in the merkle tree on the origin chain of the message.\\n   * @return bytes32 Calculated root.\\n   **/\\n  function calculateMessageRoot(\\n    bytes32 _messageHash,\\n    bytes32[32] calldata _messagePath,\\n    uint256 _messageIndex\\n  ) internal view returns (bytes32) {\\n    // Ensure that the given message has not already been proven and processed.\\n    require(messages[_messageHash] == MessageStatus.None, \\\"!MessageStatus.None\\\");\\n    // Calculate the expected inbound root from the message origin based on the proof.\\n    // NOTE: Assuming a valid message was submitted with correct path/index, this should be an inbound root\\n    // that the hub has received. If the message were invalid, the root calculated here would not exist in the\\n    // aggregate root.\\n    return MerkleLib.branchRoot(_messageHash, _messagePath, _messageIndex);\\n  }\\n\\n  /**\\n   * @notice Prove an inbound message root from another chain is included in the target aggregateRoot.\\n   * @param _messageRoot The message root we want to verify.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   */\\n  function proveMessageRoot(\\n    bytes32 _messageRoot,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) internal {\\n    // 0. Check to see if the root for this batch has already been proven.\\n    if (provenMessageRoots[_messageRoot]) {\\n      // NOTE: It seems counter-intuitive, but we do NOT need to prove the given `_aggregateRoot` param\\n      // is valid IFF the `_messageRoot` has already been proven; we know that the `_messageRoot` has to\\n      // have been included in *some* proven aggregate root historically.\\n      return;\\n    }\\n\\n    // 1. Ensure aggregate root has been proven.\\n    verifyAggregateRoot(_aggregateRoot);\\n\\n    // 2. Calculate an aggregate root, given this inbound root (as leaf), path (proof), and index.\\n    bytes32 _calculatedAggregateRoot = MerkleLib.branchRoot(_messageRoot, _aggregatePath, _aggregateIndex);\\n\\n    // 3. Check to make sure it matches the current aggregate root we have stored.\\n    require(_calculatedAggregateRoot == _aggregateRoot, \\\"invalid inboundRoot\\\");\\n\\n    // This inbound root has been proven. We should specify that to optimize future calls.\\n    provenMessageRoots[_messageRoot] = true;\\n    emit MessageProven(_messageRoot, _aggregateRoot, _aggregateIndex);\\n  }\\n\\n  /**\\n   * @notice Given formatted message, attempts to dispatch message payload to end recipient.\\n   * @dev Recipient must implement a `handle` method (refer to IMessageRecipient.sol)\\n   * Reverts if formatted message's destination domain is not the Replica's domain,\\n   * if message has not been proven,\\n   * or if not enough gas is provided for the dispatch transaction.\\n   * @param _message Formatted message\\n   * @return _success TRUE iff dispatch transaction succeeded\\n   */\\n  function process(bytes memory _message) internal returns (bool _success) {\\n    bytes29 _m = _message.ref(0);\\n    // ensure message was meant for this domain\\n    require(_m.destination() == DOMAIN, \\\"!destination\\\");\\n    // ensure message has been proven\\n    bytes32 _messageHash = _m.keccak();\\n    require(messages[_messageHash] == MessageStatus.Proven, \\\"!proven\\\");\\n    // check re-entrancy guard\\n    // require(entered == 1, \\\"!reentrant\\\");\\n    // entered = 0;\\n    // update message status as processed\\n    messages[_messageHash] = MessageStatus.Processed;\\n    // A call running out of gas TYPICALLY errors the whole tx. We want to\\n    // a) ensure the call has a sufficient amount of gas to make a\\n    //    meaningful state change.\\n    // b) ensure that if the subcall runs out of gas, that the tx as a whole\\n    //    does not revert (i.e. we still mark the message processed)\\n    // To do this, we require that we have enough gas to process\\n    // and still return. We then delegate only the minimum processing gas.\\n    require(gasleft() > PROCESS_GAS + RESERVE_GAS - 1, \\\"!gas\\\");\\n    // get the message recipient\\n    address _recipient = _m.recipientAddress();\\n    // set up for assembly call\\n    uint256 _gas = PROCESS_GAS;\\n    uint16 _maxCopy = 256;\\n    // allocate memory for returndata\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    bytes memory _calldata = abi.encodeWithSignature(\\n      \\\"handle(uint32,uint32,bytes32,bytes)\\\",\\n      _m.origin(),\\n      _m.nonce(),\\n      _m.sender(),\\n      _m.body().clone()\\n    );\\n\\n    (_success, _returnData) = ExcessivelySafeCall.excessivelySafeCall(_recipient, _gas, 0, _maxCopy, _calldata);\\n\\n    // emit process results\\n    emit Process(_messageHash, _success, _returnData);\\n  }\\n}\\n\",\"keccak256\":\"0xde9ea6f462f33e62618d069fddaeed24268d13cfe03abc9dd388824a5e4e3896\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/BaseOptimism.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {OptimismAmb} from \\\"../../interfaces/ambs/optimism/OptimismAmb.sol\\\";\\n\\nimport {GasCap} from \\\"../GasCap.sol\\\";\\n\\nabstract contract BaseOptimism is GasCap {\\n  // ============ Constructor ============\\n  constructor(uint256 _gasCap) GasCap(_gasCap) {}\\n\\n  // ============ Override Fns ============\\n  function _verifySender(address _amb, address _expected) internal view returns (bool) {\\n    require(msg.sender == _amb, \\\"!bridge\\\");\\n    return OptimismAmb(_amb).xDomainMessageSender() == _expected;\\n  }\\n\\n  /**\\n   * @notice Using Optimism AMB, the gas is provided to `sendMessage` as an encoded uint\\n   */\\n  function _getGasFromEncoded(bytes memory _encodedData) internal view returns (uint256 _gas) {\\n    // Should include gas info in specialized calldata\\n    require(_encodedData.length == 32, \\\"!data length\\\");\\n\\n    // Get the gas, if it is more than the cap use the cap\\n    _gas = _getGas(abi.decode(_encodedData, (uint256)));\\n  }\\n}\\n\",\"keccak256\":\"0x87034df88ba7e4d767c451ff2d0180f8eee25f502682153af7a018e280eab8e3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {OptimismAmb} from \\\"../../interfaces/ambs/optimism/OptimismAmb.sol\\\";\\n\\nimport {SpokeConnector, ProposedOwnable} from \\\"../SpokeConnector.sol\\\";\\nimport {Connector} from \\\"../Connector.sol\\\";\\n\\nimport {BaseOptimism} from \\\"./BaseOptimism.sol\\\";\\n\\ncontract OptimismSpokeConnector is SpokeConnector, BaseOptimism {\\n  // ============ Constructor ============\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    uint256 _processGas,\\n    uint256 _reserveGas,\\n    uint256 _delayBlocks,\\n    address _merkle,\\n    address _watcherManager,\\n    uint256 _gasCap // gasLimit of message call on L1\\n  )\\n    SpokeConnector(\\n      _domain,\\n      _mirrorDomain,\\n      _amb,\\n      _rootManager,\\n      _mirrorConnector,\\n      _processGas,\\n      _reserveGas,\\n      _delayBlocks,\\n      _merkle,\\n      _watcherManager\\n    )\\n    BaseOptimism(_gasCap)\\n  {}\\n\\n  // ============ Override Fns ============\\n  function _verifySender(address _expected) internal view override returns (bool) {\\n    return _verifySender(AMB, _expected);\\n  }\\n\\n  /**\\n   * @notice Should not be able to renounce ownership\\n   */\\n  function renounceOwnership() public virtual override(SpokeConnector, ProposedOwnable) onlyOwner {}\\n\\n  /**\\n   * @dev Sends `outboundRoot` to root manager on l1\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\\n    // Should always be sending the outbound root\\n    require(_data.length == 32, \\\"!data length\\\");\\n    bytes memory _calldata = abi.encodeWithSelector(Connector.processMessage.selector, _data);\\n    OptimismAmb(AMB).sendMessage(mirrorConnector, _calldata, uint32(_getGasFromEncoded(_encodedData)));\\n  }\\n\\n  /**\\n   * @dev Handles an incoming `aggregateRoot`\\n   * NOTE: Could store latest root sent and prove aggregate root\\n   */\\n  function _processMessage(bytes memory _data) internal override {\\n    // enforce this came from connector on l2\\n    require(_verifySender(mirrorConnector), \\\"!mirrorConnector\\\");\\n    // get the data (should be the aggregate root)\\n    require(_data.length == 32, \\\"!length\\\");\\n    // set the aggregate root\\n    receiveAggregateRoot(bytes32(_data));\\n  }\\n}\\n\",\"keccak256\":\"0xa2c7b88e9a36c82a1046dce05ff10b1baf0abd6a819f718e3a26574c96327f8d\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/ambs/optimism/OptimismAmb.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @dev The optimism bridge shares both of these functions, but it is important\\n * to note that when going from L2 -> L1, the message cannot be processed by the\\n * AMB until the challenge period elapses.\\n *\\n * HOWEVER, before the challenge elapses, you can read the state of the L2 as it is\\n * placed on mainnet. By processing data from the L2 state, we are able to \\\"circumvent\\\"\\n * this delay to a reasonable degree.\\n *\\n * This means that for messages going L1 -> L2, you can call \\\"processMessage\\\" and expect\\n * the call to be executed to pass up the aggregate root. When going from L2 -> L1, you\\n * must read the root from the L2 state\\n *\\n * L2 messenger: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2CrossDomainMessenger.sol\\n * L1 messenger: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol\\n */\\ninterface OptimismAmb {\\n  function sendMessage(\\n    address _target,\\n    bytes memory _message,\\n    uint32 _gasLimit\\n  ) external;\\n\\n  function xDomainMessageSender() external view returns (address);\\n}\\n\",\"keccak256\":\"0xbce6aaa568441bd8ad60f2b5f1ad8d9e3c61cbc91ce4405d7a390980920f66f3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/MerkleLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MerkleLib\\n * @author Illusory Systems Inc.\\n * @notice An incremental merkle tree modeled on the eth2 deposit contract.\\n **/\\nlibrary MerkleLib {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleLib__insert_treeIsFull();\\n\\n  // ============ Constants =============\\n\\n  uint256 internal constant TREE_DEPTH = 32;\\n  uint256 internal constant MAX_LEAVES = 2**TREE_DEPTH - 1;\\n\\n  /**\\n   * @dev Z_i represent the hash values at different heights for a binary tree with leaf values equal to `0`.\\n   * (e.g. Z_1 is the keccak256 hash of (0x0, 0x0), Z_2 is the keccak256 hash of (Z_1, Z_1), etc...)\\n   * Z_0 is the bottom of the 33-layer tree, Z_32 is the top (i.e. root).\\n   * Used to shortcut calculation in root calculation methods below.\\n   */\\n  bytes32 internal constant Z_0 = hex\\\"0000000000000000000000000000000000000000000000000000000000000000\\\";\\n  bytes32 internal constant Z_1 = hex\\\"ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5\\\";\\n  bytes32 internal constant Z_2 = hex\\\"b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30\\\";\\n  bytes32 internal constant Z_3 = hex\\\"21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85\\\";\\n  bytes32 internal constant Z_4 = hex\\\"e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344\\\";\\n  bytes32 internal constant Z_5 = hex\\\"0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d\\\";\\n  bytes32 internal constant Z_6 = hex\\\"887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968\\\";\\n  bytes32 internal constant Z_7 = hex\\\"ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83\\\";\\n  bytes32 internal constant Z_8 = hex\\\"9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af\\\";\\n  bytes32 internal constant Z_9 = hex\\\"cefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0\\\";\\n  bytes32 internal constant Z_10 = hex\\\"f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5\\\";\\n  bytes32 internal constant Z_11 = hex\\\"f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892\\\";\\n  bytes32 internal constant Z_12 = hex\\\"3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c\\\";\\n  bytes32 internal constant Z_13 = hex\\\"c1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb\\\";\\n  bytes32 internal constant Z_14 = hex\\\"5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc\\\";\\n  bytes32 internal constant Z_15 = hex\\\"da7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2\\\";\\n  bytes32 internal constant Z_16 = hex\\\"2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f\\\";\\n  bytes32 internal constant Z_17 = hex\\\"e1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a\\\";\\n  bytes32 internal constant Z_18 = hex\\\"5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0\\\";\\n  bytes32 internal constant Z_19 = hex\\\"b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0\\\";\\n  bytes32 internal constant Z_20 = hex\\\"c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2\\\";\\n  bytes32 internal constant Z_21 = hex\\\"f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9\\\";\\n  bytes32 internal constant Z_22 = hex\\\"5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377\\\";\\n  bytes32 internal constant Z_23 = hex\\\"4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652\\\";\\n  bytes32 internal constant Z_24 = hex\\\"cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef\\\";\\n  bytes32 internal constant Z_25 = hex\\\"0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d\\\";\\n  bytes32 internal constant Z_26 = hex\\\"b8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0\\\";\\n  bytes32 internal constant Z_27 = hex\\\"838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e\\\";\\n  bytes32 internal constant Z_28 = hex\\\"662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e\\\";\\n  bytes32 internal constant Z_29 = hex\\\"388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322\\\";\\n  bytes32 internal constant Z_30 = hex\\\"93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735\\\";\\n  bytes32 internal constant Z_31 = hex\\\"8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9\\\";\\n  bytes32 internal constant Z_32 = hex\\\"27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757\\\";\\n\\n  // ============= Structs ==============\\n\\n  /**\\n   * @notice Struct representing incremental merkle tree. Contains current\\n   * branch and the number of inserted leaves in the tree.\\n   **/\\n  struct Tree {\\n    bytes32[TREE_DEPTH] branch;\\n    uint256 count;\\n  }\\n\\n  // ========= Write Methods =========\\n\\n  /**\\n   * @notice Inserts a given node (leaf) into merkle tree. Operates on an in-memory tree and\\n   * returns an updated version of that tree.\\n   * @dev Reverts if the tree is already full.\\n   * @param node Element to insert into tree.\\n   * @return Tree Updated tree.\\n   **/\\n  function insert(Tree memory tree, bytes32 node) internal pure returns (Tree memory) {\\n    // Update tree.count to increase the current count by 1 since we'll be including a new node.\\n    uint256 size = ++tree.count;\\n    if (size > MAX_LEAVES) revert MerkleLib__insert_treeIsFull();\\n\\n    // Loop starting at 0, ending when we've finished inserting the node (i.e. hashing it) into\\n    // the active branch. Each loop we cut size in half, hashing the inserted node up the active\\n    // branch along the way.\\n    for (uint256 i; i < TREE_DEPTH; ) {\\n      // Check if the current size is odd; if so, we set this index in the branch to be the node.\\n      if ((size & 1) == 1) {\\n        // If i > 0, then this node will be a hash of the original node with every layer up\\n        // until layer `i`.\\n        tree.branch[i] = node;\\n        return tree;\\n      }\\n      // If the size is not yet odd, we hash the current index in the tree branch with the node.\\n      node = keccak256(abi.encodePacked(tree.branch[i], node));\\n      size >>= 1; // Cut size in half (statement equivalent to: `size /= 2`).\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // As the loop should always end prematurely with the `return` statement, this code should\\n    // be unreachable. We revert here just to be safe.\\n    revert MerkleLib__insert_treeIsFull();\\n  }\\n\\n  // ========= Read Methods =========\\n\\n  /**\\n   * @notice Calculates and returns tree's current root.\\n   * @return _current bytes32 root.\\n   **/\\n  function root(Tree storage tree) internal view returns (bytes32 _current) {\\n    uint256 _index = tree.count;\\n\\n    if (_index == 0) {\\n      return Z_32;\\n    }\\n\\n    uint256 i;\\n    assembly {\\n      let TREE_SLOT := tree.slot\\n\\n      for {\\n\\n      } true {\\n\\n      } {\\n        for {\\n\\n        } true {\\n\\n        } {\\n          if and(_index, 1) {\\n            mstore(0, sload(TREE_SLOT))\\n            mstore(0x20, Z_0)\\n            _current := keccak256(0, 0x40)\\n            break\\n          }\\n\\n          if and(_index, shl(1, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 1)))\\n            mstore(0x20, Z_1)\\n            _current := keccak256(0, 0x40)\\n            i := 1\\n            break\\n          }\\n\\n          if and(_index, shl(2, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 2)))\\n            mstore(0x20, Z_2)\\n            _current := keccak256(0, 0x40)\\n            i := 2\\n            break\\n          }\\n\\n          if and(_index, shl(3, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 3)))\\n            mstore(0x20, Z_3)\\n            _current := keccak256(0, 0x40)\\n            i := 3\\n            break\\n          }\\n\\n          if and(_index, shl(4, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 4)))\\n            mstore(0x20, Z_4)\\n            _current := keccak256(0, 0x40)\\n            i := 4\\n            break\\n          }\\n\\n          if and(_index, shl(5, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 5)))\\n            mstore(0x20, Z_5)\\n            _current := keccak256(0, 0x40)\\n            i := 5\\n            break\\n          }\\n\\n          if and(_index, shl(6, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 6)))\\n            mstore(0x20, Z_6)\\n            _current := keccak256(0, 0x40)\\n            i := 6\\n            break\\n          }\\n\\n          if and(_index, shl(7, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 7)))\\n            mstore(0x20, Z_7)\\n            _current := keccak256(0, 0x40)\\n            i := 7\\n            break\\n          }\\n\\n          if and(_index, shl(8, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 8)))\\n            mstore(0x20, Z_8)\\n            _current := keccak256(0, 0x40)\\n            i := 8\\n            break\\n          }\\n\\n          if and(_index, shl(9, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 9)))\\n            mstore(0x20, Z_9)\\n            _current := keccak256(0, 0x40)\\n            i := 9\\n            break\\n          }\\n\\n          if and(_index, shl(10, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 10)))\\n            mstore(0x20, Z_10)\\n            _current := keccak256(0, 0x40)\\n            i := 10\\n            break\\n          }\\n\\n          if and(_index, shl(11, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 11)))\\n            mstore(0x20, Z_11)\\n            _current := keccak256(0, 0x40)\\n            i := 11\\n            break\\n          }\\n\\n          if and(_index, shl(12, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 12)))\\n            mstore(0x20, Z_12)\\n            _current := keccak256(0, 0x40)\\n            i := 12\\n            break\\n          }\\n\\n          if and(_index, shl(13, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 13)))\\n            mstore(0x20, Z_13)\\n            _current := keccak256(0, 0x40)\\n            i := 13\\n            break\\n          }\\n\\n          if and(_index, shl(14, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 14)))\\n            mstore(0x20, Z_14)\\n            _current := keccak256(0, 0x40)\\n            i := 14\\n            break\\n          }\\n\\n          if and(_index, shl(15, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 15)))\\n            mstore(0x20, Z_15)\\n            _current := keccak256(0, 0x40)\\n            i := 15\\n            break\\n          }\\n\\n          if and(_index, shl(16, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 16)))\\n            mstore(0x20, Z_16)\\n            _current := keccak256(0, 0x40)\\n            i := 16\\n            break\\n          }\\n\\n          if and(_index, shl(17, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 17)))\\n            mstore(0x20, Z_17)\\n            _current := keccak256(0, 0x40)\\n            i := 17\\n            break\\n          }\\n\\n          if and(_index, shl(18, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 18)))\\n            mstore(0x20, Z_18)\\n            _current := keccak256(0, 0x40)\\n            i := 18\\n            break\\n          }\\n\\n          if and(_index, shl(19, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 19)))\\n            mstore(0x20, Z_19)\\n            _current := keccak256(0, 0x40)\\n            i := 19\\n            break\\n          }\\n\\n          if and(_index, shl(20, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 20)))\\n            mstore(0x20, Z_20)\\n            _current := keccak256(0, 0x40)\\n            i := 20\\n            break\\n          }\\n\\n          if and(_index, shl(21, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 21)))\\n            mstore(0x20, Z_21)\\n            _current := keccak256(0, 0x40)\\n            i := 21\\n            break\\n          }\\n\\n          if and(_index, shl(22, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 22)))\\n            mstore(0x20, Z_22)\\n            _current := keccak256(0, 0x40)\\n            i := 22\\n            break\\n          }\\n\\n          if and(_index, shl(23, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 23)))\\n            mstore(0x20, Z_23)\\n            _current := keccak256(0, 0x40)\\n            i := 23\\n            break\\n          }\\n\\n          if and(_index, shl(24, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 24)))\\n            mstore(0x20, Z_24)\\n            _current := keccak256(0, 0x40)\\n            i := 24\\n            break\\n          }\\n\\n          if and(_index, shl(25, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 25)))\\n            mstore(0x20, Z_25)\\n            _current := keccak256(0, 0x40)\\n            i := 25\\n            break\\n          }\\n\\n          if and(_index, shl(26, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 26)))\\n            mstore(0x20, Z_26)\\n            _current := keccak256(0, 0x40)\\n            i := 26\\n            break\\n          }\\n\\n          if and(_index, shl(27, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 27)))\\n            mstore(0x20, Z_27)\\n            _current := keccak256(0, 0x40)\\n            i := 27\\n            break\\n          }\\n\\n          if and(_index, shl(28, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 28)))\\n            mstore(0x20, Z_28)\\n            _current := keccak256(0, 0x40)\\n            i := 28\\n            break\\n          }\\n\\n          if and(_index, shl(29, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 29)))\\n            mstore(0x20, Z_29)\\n            _current := keccak256(0, 0x40)\\n            i := 29\\n            break\\n          }\\n\\n          if and(_index, shl(30, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 30)))\\n            mstore(0x20, Z_30)\\n            _current := keccak256(0, 0x40)\\n            i := 30\\n            break\\n          }\\n\\n          if and(_index, shl(31, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 31)))\\n            mstore(0x20, Z_31)\\n            _current := keccak256(0, 0x40)\\n            i := 31\\n            break\\n          }\\n\\n          _current := Z_32\\n          i := 32\\n          break\\n        }\\n\\n        if gt(i, 30) {\\n          break\\n        }\\n\\n        {\\n          if lt(i, 1) {\\n            switch and(_index, shl(1, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_1)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 1)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 2) {\\n            switch and(_index, shl(2, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_2)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 2)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 3) {\\n            switch and(_index, shl(3, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_3)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 3)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 4) {\\n            switch and(_index, shl(4, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_4)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 4)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 5) {\\n            switch and(_index, shl(5, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_5)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 5)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 6) {\\n            switch and(_index, shl(6, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_6)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 6)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 7) {\\n            switch and(_index, shl(7, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_7)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 7)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 8) {\\n            switch and(_index, shl(8, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_8)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 8)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 9) {\\n            switch and(_index, shl(9, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_9)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 9)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 10) {\\n            switch and(_index, shl(10, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_10)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 10)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 11) {\\n            switch and(_index, shl(11, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_11)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 11)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 12) {\\n            switch and(_index, shl(12, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_12)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 12)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 13) {\\n            switch and(_index, shl(13, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_13)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 13)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 14) {\\n            switch and(_index, shl(14, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_14)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 14)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 15) {\\n            switch and(_index, shl(15, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_15)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 15)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 16) {\\n            switch and(_index, shl(16, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_16)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 16)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 17) {\\n            switch and(_index, shl(17, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_17)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 17)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 18) {\\n            switch and(_index, shl(18, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_18)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 18)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 19) {\\n            switch and(_index, shl(19, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_19)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 19)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 20) {\\n            switch and(_index, shl(20, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_20)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 20)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 21) {\\n            switch and(_index, shl(21, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_21)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 21)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 22) {\\n            switch and(_index, shl(22, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_22)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 22)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 23) {\\n            switch and(_index, shl(23, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_23)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 23)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 24) {\\n            switch and(_index, shl(24, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_24)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 24)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 25) {\\n            switch and(_index, shl(25, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_25)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 25)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 26) {\\n            switch and(_index, shl(26, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_26)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 26)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 27) {\\n            switch and(_index, shl(27, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_27)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 27)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 28) {\\n            switch and(_index, shl(28, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_28)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 28)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 29) {\\n            switch and(_index, shl(29, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_29)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 29)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 30) {\\n            switch and(_index, shl(30, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_30)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 30)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 31) {\\n            switch and(_index, shl(31, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_31)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 31)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n        }\\n\\n        break\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the merkle root for the given leaf `_item`,\\n   * a merkle branch, and the index of `_item` in the tree.\\n   * @param _item Merkle leaf\\n   * @param _branch Merkle proof\\n   * @param _index Index of `_item` in tree\\n   * @return _current Calculated merkle root\\n   **/\\n  function branchRoot(\\n    bytes32 _item,\\n    bytes32[TREE_DEPTH] memory _branch,\\n    uint256 _index\\n  ) internal pure returns (bytes32 _current) {\\n    assembly {\\n      _current := _item\\n      let BRANCH_DATA_OFFSET := _branch\\n      let f\\n\\n      f := shl(5, and(_index, 1))\\n      mstore(f, _current)\\n      mstore(sub(0x20, f), mload(BRANCH_DATA_OFFSET))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(1, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 1))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(2, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 2))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(3, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 3))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(4, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 4))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(5, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 5))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(6, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 6))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(7, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 7))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(8, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 8))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(9, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 9))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(10, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 10))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(11, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 11))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(12, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 12))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(13, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 13))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(14, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 14))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(15, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 15))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(16, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 16))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(17, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 17))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(18, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 18))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(19, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 19))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(20, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 20))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(21, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 21))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(22, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 22))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(23, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 23))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(24, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 24))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(25, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 25))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(26, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 26))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(27, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 27))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(28, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 28))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(29, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 29))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(30, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 30))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(31, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 31))))\\n      _current := keccak256(0, 0x40)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08c791dbeef6253813d74e2145183501fe7631c13d5ac9d768036f47b66b693e\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/Message.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\n/**\\n * @title Message Library\\n * @author Illusory Systems Inc.\\n * @notice Library for formatted messages used by Home and Replica.\\n **/\\nlibrary Message {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // Number of bytes in formatted message before `body` field\\n  uint256 internal constant PREFIX_LENGTH = 76;\\n\\n  /**\\n   * @notice Returns formatted (packed) message with provided fields\\n   * @param _originDomain Domain of home chain\\n   * @param _sender Address of sender as bytes32\\n   * @param _nonce Destination-specific nonce\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipient Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes of message body\\n   * @return Formatted message\\n   **/\\n  function formatMessage(\\n    uint32 _originDomain,\\n    bytes32 _sender,\\n    uint32 _nonce,\\n    uint32 _destinationDomain,\\n    bytes32 _recipient,\\n    bytes memory _messageBody\\n  ) internal pure returns (bytes memory) {\\n    return abi.encodePacked(_originDomain, _sender, _nonce, _destinationDomain, _recipient, _messageBody);\\n  }\\n\\n  /**\\n   * @notice Returns leaf of formatted message with provided fields.\\n   * @param _origin Domain of home chain\\n   * @param _sender Address of sender as bytes32\\n   * @param _nonce Destination-specific nonce number\\n   * @param _destination Domain of destination chain\\n   * @param _recipient Address of recipient on destination chain as bytes32\\n   * @param _body Raw bytes of message body\\n   * @return Leaf (hash) of formatted message\\n   **/\\n  function messageHash(\\n    uint32 _origin,\\n    bytes32 _sender,\\n    uint32 _nonce,\\n    uint32 _destination,\\n    bytes32 _recipient,\\n    bytes memory _body\\n  ) internal pure returns (bytes32) {\\n    return keccak256(formatMessage(_origin, _sender, _nonce, _destination, _recipient, _body));\\n  }\\n\\n  /// @notice Returns message's origin field\\n  function origin(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(0, 4));\\n  }\\n\\n  /// @notice Returns message's sender field\\n  function sender(bytes29 _message) internal pure returns (bytes32) {\\n    return _message.index(4, 32);\\n  }\\n\\n  /// @notice Returns message's nonce field\\n  function nonce(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(36, 4));\\n  }\\n\\n  /// @notice Returns message's destination field\\n  function destination(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(40, 4));\\n  }\\n\\n  /// @notice Returns message's recipient field as bytes32\\n  function recipient(bytes29 _message) internal pure returns (bytes32) {\\n    return _message.index(44, 32);\\n  }\\n\\n  /// @notice Returns message's recipient field as an address\\n  function recipientAddress(bytes29 _message) internal pure returns (address) {\\n    return TypeCasts.bytes32ToAddress(recipient(_message));\\n  }\\n\\n  /// @notice Returns message's body field as bytes29 (refer to TypedMemView library for details on bytes29 type)\\n  function body(bytes29 _message) internal pure returns (bytes29) {\\n    return _message.slice(PREFIX_LENGTH, _message.len() - PREFIX_LENGTH, 0);\\n  }\\n\\n  function leaf(bytes29 _message) internal pure returns (bytes32) {\\n    uint256 loc = _message.loc();\\n    uint256 len = _message.len();\\n    /*\\n    prev:\\n    return\\n      messageHash(\\n        origin(_message),\\n        sender(_message),\\n        nonce(_message),\\n        destination(_message),\\n        recipient(_message),\\n        TypedMemView.clone(body(_message))\\n      );\\n\\n      below added for gas optimization\\n     */\\n    bytes32 hash;\\n    assembly {\\n      hash := keccak256(loc, len)\\n    }\\n    return hash;\\n  }\\n}\\n\",\"keccak256\":\"0xa4212f7b88146588e8e0e24cddbc5dae6269618a722b34f00ea322b33fa1f36a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/RateLimited.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice An abstract contract intended to manage the rate limiting aspect of spoke\\n * connector messaging. Rate limiting the number of messages we can send over a span of\\n * blocks is used to mitigate key DoSing vectors for transporting messages between chains.\\n */\\nabstract contract RateLimited {\\n  // ========== Custom Errors ===========\\n\\n  error RateLimited__rateLimited_messageSendRateExceeded();\\n\\n  // ============ Events ============\\n\\n  event SendRateLimitUpdated(address updater, uint256 newRateLimit);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The number of blocks required between message sending events.\\n   * @dev NOTE: This value is 0 by default, meaning that rate limiting functionality\\n   * will naturally be disabled by default.\\n   */\\n  uint256 public rateLimitBlocks;\\n\\n  /**\\n   * @notice Tracks the last block that we sent a message.\\n   */\\n  uint256 public lastSentBlock;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Checks to see if we can send this block, given the current rate limit\\n   * setting and the last block we sent a message. If rate limit has been surpassed,\\n   * we update the `lastSentBlock` to be the current block.\\n   */\\n  modifier rateLimited() {\\n    // Check to make sure we have surpassed the number of rate limit blocks.\\n    if (lastSentBlock + rateLimitBlocks > block.number) {\\n      revert RateLimited__rateLimited_messageSendRateExceeded();\\n    }\\n    // Update the last block we sent a message to be the current one.\\n    lastSentBlock = block.number;\\n    _;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Update the current rate limit to a new value.\\n   */\\n  function _setRateLimitBlocks(uint256 _newRateLimit) internal {\\n    require(_newRateLimit != rateLimitBlocks, \\\"!new rate limit\\\");\\n    // NOTE: Setting the block rate limit interval to 0 will result in rate limiting\\n    // being disabled.\\n    rateLimitBlocks = _newRateLimit;\\n    emit SendRateLimitUpdated(msg.sender, _newRateLimit);\\n  }\\n}\\n\",\"keccak256\":\"0xcc185ae966c87441490aaa8c0779a7b3085961a7b8512d5973f1c34f641eeae3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/ProposedOwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {Initializable} from \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"./ProposedOwnable.sol\\\";\\n\\nabstract contract ProposedOwnableUpgradeable is Initializable, ProposedOwnable {\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial\\n   */\\n  function __ProposedOwnable_init() internal onlyInitializing {\\n    __ProposedOwnable_init_unchained();\\n  }\\n\\n  function __ProposedOwnable_init_unchained() internal onlyInitializing {\\n    _setOwner(msg.sender);\\n  }\\n\\n  /**\\n   * @dev This empty reserved space is put in place to allow future versions to add new\\n   * variables without shifting down storage in the inheritance chain.\\n   * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n   */\\n  uint256[47] private __GAP;\\n}\\n\",\"keccak256\":\"0x2b064b03a25915e93749905ef3aae516ffaac86b8ba9f126b614425b623bf477\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/ExcessivelySafeCall.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// Taken from: https://github.com/nomad-xyz/ExcessivelySafeCall\\n// NOTE: There is a difference between npm latest and github main versions\\n// where the latest github version allows you to specify an ether value.\\n\\nlibrary ExcessivelySafeCall {\\n  uint256 constant LOW_28_MASK = 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _value The value in wei to send to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeCall(\\n    address _target,\\n    uint256 _gas,\\n    uint256 _value,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := call(\\n        _gas, // gas\\n        _target, // recipient\\n        _value, // ether value\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeStaticCall(\\n    address _target,\\n    uint256 _gas,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal view returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := staticcall(\\n        _gas, // gas\\n        _target, // recipient\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /**\\n   * @notice Swaps function selectors in encoded contract calls\\n   * @dev Allows reuse of encoded calldata for functions with identical\\n   * argument types but different names. It simply swaps out the first 4 bytes\\n   * for the new selector. This function modifies memory in place, and should\\n   * only be used with caution.\\n   * @param _newSelector The new 4-byte selector\\n   * @param _buf The encoded contract args\\n   */\\n  function swapSelector(bytes4 _newSelector, bytes memory _buf) internal pure {\\n    require(_buf.length > 4 - 1);\\n    uint256 _mask = LOW_28_MASK;\\n    assembly {\\n      // load the first word of\\n      let _word := mload(add(_buf, 0x20))\\n      // mask out the top 4 bytes\\n      // /x\\n      _word := and(_word, _mask)\\n      _word := or(_newSelector, _word)\\n      mstore(add(_buf, 0x20), _word)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x5472b56fa56886620b1a8e4e2f12f8925500bb237a4dad38651c79db69f0724c\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39051,"contract":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector","label":"mirrorConnector","offset":0,"slot":"3","type":"t_address"},{"astId":10590,"contract":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector","label":"_paused","offset":20,"slot":"3","type":"t_bool"},{"astId":38824,"contract":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector","label":"watcherManager","offset":0,"slot":"4","type":"t_contract(WatcherManager)39005"},{"astId":49639,"contract":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector","label":"rateLimitBlocks","offset":0,"slot":"5","type":"t_uint256"},{"astId":49642,"contract":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector","label":"lastSentBlock","offset":0,"slot":"6","type":"t_uint256"},{"astId":10691,"contract":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector","label":"_status","offset":0,"slot":"7","type":"t_uint256"},{"astId":39546,"contract":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector","label":"delayBlocks","offset":0,"slot":"8","type":"t_uint256"},{"astId":39561,"contract":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector","label":"pendingAggregateRoots","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":39566,"contract":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector","label":"provenAggregateRoots","offset":0,"slot":"10","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39571,"contract":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector","label":"provenMessageRoots","offset":0,"slot":"11","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39576,"contract":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector","label":"sentMessageRoots","offset":0,"slot":"12","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39581,"contract":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector","label":"allowlistedSenders","offset":0,"slot":"13","type":"t_mapping(t_address,t_bool)"},{"astId":39586,"contract":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector","label":"nonces","offset":0,"slot":"14","type":"t_mapping(t_uint32,t_uint32)"},{"astId":39592,"contract":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector","label":"messages","offset":0,"slot":"15","type":"t_mapping(t_bytes32,t_enum(MessageStatus)39534)"},{"astId":39301,"contract":"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector","label":"gasCap","offset":0,"slot":"16","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(WatcherManager)39005":{"encoding":"inplace","label":"contract WatcherManager","numberOfBytes":"20"},"t_enum(MessageStatus)39534":{"encoding":"inplace","label":"enum SpokeConnector.MessageStatus","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(MessageStatus)39534)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum SpokeConnector.MessageStatus)","numberOfBytes":"32","value":"t_enum(MessageStatus)39534"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_uint32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => uint32)","numberOfBytes":"32","value":"t_uint32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"}}},"userdoc":{"events":{"FundsWithdrawn(address,uint256)":{"notice":"Emitted when funds are withdrawn by the admin"},"GasCapUpdated(uint256,uint256)":{"notice":"Emitted when admin updates the gas cap"},"MessageProcessed(bytes,address)":{"notice":"Emitted whenever a message is successfully received over an AMB"},"MessageSent(bytes,bytes,address)":{"notice":"Emitted whenever a message is successfully sent over an AMB"},"WatcherManagerChanged(address)":{"notice":"Emitted when the manager address changes"}},"kind":"user","methods":{"AMB()":{"notice":"Address of the AMB on this domain."},"DOMAIN()":{"notice":"The domain of this Messaging (i.e. Connector) contract."},"MERKLE()":{"notice":"MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root will be sent crosschain to the hub for aggregation and redistribution."},"MIRROR_DOMAIN()":{"notice":"The domain of the corresponding messaging (i.e. Connector) contract."},"PROCESS_GAS()":{"notice":"Minimum gas for processing a received message (reserved for handle)"},"RESERVE_GAS()":{"notice":"Reserved gas (to ensure tx completes in case message processing runs out)"},"ROOT_MANAGER()":{"notice":"RootManager contract address."},"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"addSender(address)":{"notice":"Adds a sender to the allowlist."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"delayBlocks()":{"notice":"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary."},"dispatch(uint32,bytes32,bytes)":{"notice":"This function adds transfers to the outbound transfer merkle tree."},"home()":{"notice":"Get the local inbox contract from the xAppConnectionManager"},"isReplica(address)":{"notice":"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager"},"lastSentBlock()":{"notice":"Tracks the last block that we sent a message."},"localDomain()":{"notice":"This provides the implementation for what is defined in the ConnectorManager to avoid storing the domain redundantly"},"messages(bytes32)":{"notice":"Mapping of message leaves to MessageStatus, keyed on leaf."},"mirrorConnector()":{"notice":"Connector on L2 for L1 connectors, and vice versa."},"nonces(uint32)":{"notice":"domain => next available nonce for the domain."},"outboundRoot()":{"notice":"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)"},"owner()":{"notice":"Returns the address of the current owner."},"pause()":{"notice":"Watchers can pause contracts if fraud is detected"},"pendingAggregateRoots(bytes32)":{"notice":"This will hold the commit block for incoming aggregateRoots from the hub chain. Once they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can be used for proving inclusion of crosschain messages."},"processMessage(bytes)":{"notice":"Processes a message received by an AMB"},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":{"notice":"Must be able to call the `handle` function on the BridgeRouter contract. This is called on the destination domain to handle incoming messages. Proving: Calculates the expected inbound root from an origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this calculated inbound root is included in the current aggregateRoot, given its index in the aggregator tree and the proof of inclusion. Processing: After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for execution."},"provenAggregateRoots(bytes32)":{"notice":"This tracks the roots of the aggregate tree containing outbound roots from all other supported domains. The current version is the one that is known to be past the delayBlocks time period."},"provenMessageRoots(bytes32)":{"notice":"This tracks whether the root has been proven to exist within the given aggregate root."},"rateLimitBlocks()":{"notice":"The number of blocks required between message sending events."},"removePendingAggregateRoot(bytes32)":{"notice":"Manually remove a pending aggregateRoot by owner if the contract is paused."},"removeSender(address)":{"notice":"Removes a sender from the allowlist."},"renounceOwnership()":{"notice":"Should not be able to renounce ownership"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"send(bytes)":{"notice":"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)"},"sentMessageRoots(bytes32)":{"notice":"This mapping records all message roots that have already been sent in order to prevent redundant message roots from being sent to hub."},"setDelayBlocks(uint256)":{"notice":"Set the `delayBlocks`, the period in blocks over which an incoming message is verified."},"setMirrorConnector(address)":{"notice":"Sets the address of the l2Connector for this domain"},"setRateLimitBlocks(uint256)":{"notice":"Set the rate limit (number of blocks) at which we can send messages from this contract to the hub chain using the `send` method."},"setWatcherManager(address)":{"notice":"Owner can enroll a watcher (abilities are defined by inheriting contracts)"},"unpause()":{"notice":"Owner can unpause contracts if fraud is detected by watchers"},"verifySender(address)":{"notice":"Checks the cross domain sender for a given address"},"watcherManager()":{"notice":"The `WatcherManager` contract governs the watcher allowlist."},"withdrawFunds(address)":{"notice":"This function should be callable by owner, and send funds trapped on a connector to the provided recipient."}},"version":1}}},"contracts/messaging/connectors/optimism/lib/BytesUtils.sol":{"BytesUtils":{"abi":[],"devdoc":{"details":"modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/utils/Lib_BytesUtils.sol","kind":"dev","methods":{},"title":"BytesUtils","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122087b4f129dd115ce92243aeacb2d2d2fd0eaafdc9a4619be1285d09489f947da164736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP8 0xB4 CALL 0x29 0xDD GT 0x5C 0xE9 0x22 NUMBER 0xAE 0xAC 0xB2 0xD2 0xD2 REVERT 0xE 0xAA REVERT 0xC9 LOG4 PUSH2 0x9BE1 0x28 0x5D MULMOD BASEFEE SWAP16 SWAP5 PUSH30 0xA164736F6C63430008110033000000000000000000000000000000000000 ","sourceMap":"249:4058:133:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;249:4058:133;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122087b4f129dd115ce92243aeacb2d2d2fd0eaafdc9a4619be1285d09489f947da164736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP8 0xB4 CALL 0x29 0xDD GT 0x5C 0xE9 0x22 NUMBER 0xAE 0xAC 0xB2 0xD2 0xD2 REVERT 0xE 0xAA REVERT 0xC9 LOG4 PUSH2 0x9BE1 0x28 0x5D MULMOD BASEFEE SWAP16 SWAP5 PUSH30 0xA164736F6C63430008110033000000000000000000000000000000000000 ","sourceMap":"249:4058:133:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"equal(bytes memory,bytes memory)":"infinite","fromNibbles(bytes memory)":"infinite","slice(bytes memory,uint256)":"infinite","slice(bytes memory,uint256,uint256)":"infinite","toBytes32(bytes memory)":"infinite","toNibbles(bytes memory)":"infinite","toUint256(bytes memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/utils/Lib_BytesUtils.sol\",\"kind\":\"dev\",\"methods\":{},\"title\":\"BytesUtils\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/optimism/lib/BytesUtils.sol\":\"BytesUtils\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/optimism/lib/BytesUtils.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title BytesUtils\\n *\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/utils/Lib_BytesUtils.sol\\n */\\nlibrary BytesUtils {\\n  /**********************\\n   * Internal Functions *\\n   **********************/\\n\\n  function slice(\\n    bytes memory _bytes,\\n    uint256 _start,\\n    uint256 _length\\n  ) internal pure returns (bytes memory) {\\n    require(_length + 31 >= _length, \\\"slice_overflow\\\");\\n    require(_start + _length >= _start, \\\"slice_overflow\\\");\\n    require(_bytes.length >= _start + _length, \\\"slice_outOfBounds\\\");\\n\\n    bytes memory tempBytes;\\n\\n    assembly {\\n      switch iszero(_length)\\n      case 0 {\\n        // Get a location of some free memory and store it in tempBytes as\\n        // Solidity does for memory variables.\\n        tempBytes := mload(0x40)\\n\\n        // The first word of the slice result is potentially a partial\\n        // word read from the original array. To read it, we calculate\\n        // the length of that partial word and start copying that many\\n        // bytes into the array. The first word we copy will start with\\n        // data we don't care about, but the last `lengthmod` bytes will\\n        // land at the beginning of the contents of the new array. When\\n        // we're done copying, we overwrite the full first word with\\n        // the actual length of the slice.\\n        let lengthmod := and(_length, 31)\\n\\n        // The multiplication in the next line is necessary\\n        // because when slicing multiples of 32 bytes (lengthmod == 0)\\n        // the following copy loop was copying the origin's length\\n        // and then ending prematurely not copying everything it should.\\n        let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)))\\n        let end := add(mc, _length)\\n\\n        for {\\n          // The multiplication in the next line has the same exact purpose\\n          // as the one above.\\n          let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start)\\n        } lt(mc, end) {\\n          mc := add(mc, 0x20)\\n          cc := add(cc, 0x20)\\n        } {\\n          mstore(mc, mload(cc))\\n        }\\n\\n        mstore(tempBytes, _length)\\n\\n        //update free-memory pointer\\n        //allocating the array padded to 32 bytes like the compiler does now\\n        mstore(0x40, and(add(mc, 31), not(31)))\\n      }\\n      //if we want a zero-length slice let's just return a zero-length array\\n      default {\\n        tempBytes := mload(0x40)\\n\\n        //zero out the 32 bytes slice we are about to return\\n        //we need to do it because Solidity does not garbage collect\\n        mstore(tempBytes, 0)\\n\\n        mstore(0x40, add(tempBytes, 0x20))\\n      }\\n    }\\n\\n    return tempBytes;\\n  }\\n\\n  function slice(bytes memory _bytes, uint256 _start) internal pure returns (bytes memory) {\\n    if (_start >= _bytes.length) {\\n      return bytes(\\\"\\\");\\n    }\\n\\n    return slice(_bytes, _start, _bytes.length - _start);\\n  }\\n\\n  function toBytes32(bytes memory _bytes) internal pure returns (bytes32) {\\n    if (_bytes.length < 32) {\\n      bytes32 ret;\\n      assembly {\\n        ret := mload(add(_bytes, 32))\\n      }\\n      return ret;\\n    }\\n\\n    return abi.decode(_bytes, (bytes32)); // will truncate if input length > 32 bytes\\n  }\\n\\n  function toUint256(bytes memory _bytes) internal pure returns (uint256) {\\n    return uint256(toBytes32(_bytes));\\n  }\\n\\n  function toNibbles(bytes memory _bytes) internal pure returns (bytes memory) {\\n    bytes memory nibbles = new bytes(_bytes.length * 2);\\n\\n    uint256 len = _bytes.length;\\n    for (uint256 i = 0; i < len; ) {\\n      nibbles[i * 2] = _bytes[i] >> 4;\\n      nibbles[i * 2 + 1] = bytes1(uint8(_bytes[i]) % 16);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    return nibbles;\\n  }\\n\\n  function fromNibbles(bytes memory _bytes) internal pure returns (bytes memory) {\\n    bytes memory ret = new bytes(_bytes.length / 2);\\n\\n    uint256 len = ret.length;\\n    for (uint256 i = 0; i < len; ) {\\n      ret[i] = (_bytes[i * 2] << 4) | (_bytes[i * 2 + 1]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    return ret;\\n  }\\n\\n  function equal(bytes memory _bytes, bytes memory _other) internal pure returns (bool) {\\n    return keccak256(_bytes) == keccak256(_other);\\n  }\\n}\\n\",\"keccak256\":\"0x81feab05c6cadccdf548b5cc8bbb8e5afdbb788f5215f1cc477e4ee877665578\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/messaging/connectors/optimism/lib/MerkleTrie.sol":{"MerkleTrie":{"abi":[],"devdoc":{"details":"modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/trie/Lib_MerkleTrie.sol","kind":"dev","methods":{},"title":"MerkleTrie","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b5b90a164572c81b9a92cf13487e9bde7e5541001b64ba7fc123a10ea34ce6da64736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB5 0xB9 EXP AND GASLIMIT PUSH19 0xC81B9A92CF13487E9BDE7E5541001B64BA7FC1 0x23 LOG1 0xE LOG3 0x4C 0xE6 0xDA PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"359:10348:134:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;359:10348:134;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b5b90a164572c81b9a92cf13487e9bde7e5541001b64ba7fc123a10ea34ce6da64736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB5 0xB9 EXP AND GASLIMIT PUSH19 0xC81B9A92CF13487E9BDE7E5541001B64BA7FC1 0x23 LOG1 0xE LOG3 0x4C 0xE6 0xDA PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"359:10348:134:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_getNodeID(struct RLPReader.RLPItem memory)":"infinite","_getNodePath(struct MerkleTrie.TrieNode memory)":"infinite","_getNodeValue(struct MerkleTrie.TrieNode memory)":"infinite","_getSharedNibbleLength(bytes memory,bytes memory)":"infinite","_parseProof(bytes memory)":"infinite","_walkNodePath(struct MerkleTrie.TrieNode memory[] memory,bytes memory,bytes32)":"infinite","get(bytes memory,bytes memory,bytes32)":"infinite","verifyInclusionProof(bytes memory,bytes memory,bytes memory,bytes32)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/trie/Lib_MerkleTrie.sol\",\"kind\":\"dev\",\"methods\":{},\"title\":\"MerkleTrie\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/optimism/lib/MerkleTrie.sol\":\"MerkleTrie\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/optimism/lib/BytesUtils.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title BytesUtils\\n *\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/utils/Lib_BytesUtils.sol\\n */\\nlibrary BytesUtils {\\n  /**********************\\n   * Internal Functions *\\n   **********************/\\n\\n  function slice(\\n    bytes memory _bytes,\\n    uint256 _start,\\n    uint256 _length\\n  ) internal pure returns (bytes memory) {\\n    require(_length + 31 >= _length, \\\"slice_overflow\\\");\\n    require(_start + _length >= _start, \\\"slice_overflow\\\");\\n    require(_bytes.length >= _start + _length, \\\"slice_outOfBounds\\\");\\n\\n    bytes memory tempBytes;\\n\\n    assembly {\\n      switch iszero(_length)\\n      case 0 {\\n        // Get a location of some free memory and store it in tempBytes as\\n        // Solidity does for memory variables.\\n        tempBytes := mload(0x40)\\n\\n        // The first word of the slice result is potentially a partial\\n        // word read from the original array. To read it, we calculate\\n        // the length of that partial word and start copying that many\\n        // bytes into the array. The first word we copy will start with\\n        // data we don't care about, but the last `lengthmod` bytes will\\n        // land at the beginning of the contents of the new array. When\\n        // we're done copying, we overwrite the full first word with\\n        // the actual length of the slice.\\n        let lengthmod := and(_length, 31)\\n\\n        // The multiplication in the next line is necessary\\n        // because when slicing multiples of 32 bytes (lengthmod == 0)\\n        // the following copy loop was copying the origin's length\\n        // and then ending prematurely not copying everything it should.\\n        let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)))\\n        let end := add(mc, _length)\\n\\n        for {\\n          // The multiplication in the next line has the same exact purpose\\n          // as the one above.\\n          let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start)\\n        } lt(mc, end) {\\n          mc := add(mc, 0x20)\\n          cc := add(cc, 0x20)\\n        } {\\n          mstore(mc, mload(cc))\\n        }\\n\\n        mstore(tempBytes, _length)\\n\\n        //update free-memory pointer\\n        //allocating the array padded to 32 bytes like the compiler does now\\n        mstore(0x40, and(add(mc, 31), not(31)))\\n      }\\n      //if we want a zero-length slice let's just return a zero-length array\\n      default {\\n        tempBytes := mload(0x40)\\n\\n        //zero out the 32 bytes slice we are about to return\\n        //we need to do it because Solidity does not garbage collect\\n        mstore(tempBytes, 0)\\n\\n        mstore(0x40, add(tempBytes, 0x20))\\n      }\\n    }\\n\\n    return tempBytes;\\n  }\\n\\n  function slice(bytes memory _bytes, uint256 _start) internal pure returns (bytes memory) {\\n    if (_start >= _bytes.length) {\\n      return bytes(\\\"\\\");\\n    }\\n\\n    return slice(_bytes, _start, _bytes.length - _start);\\n  }\\n\\n  function toBytes32(bytes memory _bytes) internal pure returns (bytes32) {\\n    if (_bytes.length < 32) {\\n      bytes32 ret;\\n      assembly {\\n        ret := mload(add(_bytes, 32))\\n      }\\n      return ret;\\n    }\\n\\n    return abi.decode(_bytes, (bytes32)); // will truncate if input length > 32 bytes\\n  }\\n\\n  function toUint256(bytes memory _bytes) internal pure returns (uint256) {\\n    return uint256(toBytes32(_bytes));\\n  }\\n\\n  function toNibbles(bytes memory _bytes) internal pure returns (bytes memory) {\\n    bytes memory nibbles = new bytes(_bytes.length * 2);\\n\\n    uint256 len = _bytes.length;\\n    for (uint256 i = 0; i < len; ) {\\n      nibbles[i * 2] = _bytes[i] >> 4;\\n      nibbles[i * 2 + 1] = bytes1(uint8(_bytes[i]) % 16);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    return nibbles;\\n  }\\n\\n  function fromNibbles(bytes memory _bytes) internal pure returns (bytes memory) {\\n    bytes memory ret = new bytes(_bytes.length / 2);\\n\\n    uint256 len = ret.length;\\n    for (uint256 i = 0; i < len; ) {\\n      ret[i] = (_bytes[i * 2] << 4) | (_bytes[i * 2 + 1]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    return ret;\\n  }\\n\\n  function equal(bytes memory _bytes, bytes memory _other) internal pure returns (bool) {\\n    return keccak256(_bytes) == keccak256(_other);\\n  }\\n}\\n\",\"keccak256\":\"0x81feab05c6cadccdf548b5cc8bbb8e5afdbb788f5215f1cc477e4ee877665578\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/lib/MerkleTrie.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/* Library Imports */\\nimport {BytesUtils} from \\\"./BytesUtils.sol\\\";\\nimport {RLPReader} from \\\"./RLPReader.sol\\\";\\n\\n/**\\n * @title MerkleTrie\\n *\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/trie/Lib_MerkleTrie.sol\\n */\\nlibrary MerkleTrie {\\n  /*******************\\n   * Data Structures *\\n   *******************/\\n\\n  enum NodeType {\\n    BranchNode,\\n    ExtensionNode,\\n    LeafNode\\n  }\\n\\n  struct TrieNode {\\n    bytes encoded;\\n    RLPReader.RLPItem[] decoded;\\n  }\\n\\n  /**********************\\n   * Contract Constants *\\n   **********************/\\n\\n  // TREE_RADIX determines the number of elements per branch node.\\n  uint256 constant TREE_RADIX = 16;\\n  // Branch nodes have TREE_RADIX elements plus an additional `value` slot.\\n  uint256 constant BRANCH_NODE_LENGTH = TREE_RADIX + 1;\\n  // Leaf nodes and extension nodes always have two elements, a `path` and a `value`.\\n  uint256 constant LEAF_OR_EXTENSION_NODE_LENGTH = 2;\\n\\n  // Prefixes are prepended to the `path` within a leaf or extension node and\\n  // allow us to differentiate between the two node types. `ODD` or `EVEN` is\\n  // determined by the number of nibbles within the unprefixed `path`. If the\\n  // number of nibbles if even, we need to insert an extra padding nibble so\\n  // the resulting prefixed `path` has an even number of nibbles.\\n  uint8 constant PREFIX_EXTENSION_EVEN = 0;\\n  uint8 constant PREFIX_EXTENSION_ODD = 1;\\n  uint8 constant PREFIX_LEAF_EVEN = 2;\\n  uint8 constant PREFIX_LEAF_ODD = 3;\\n\\n  // Just a utility constant. RLP represents `NULL` as 0x80.\\n  bytes1 constant RLP_NULL = bytes1(0x80);\\n\\n  /**********************\\n   * Internal Functions *\\n   **********************/\\n\\n  /**\\n   * @notice Verifies a proof that a given key/value pair is present in the\\n   * Merkle trie.\\n   * @param _key Key of the node to search for, as a hex string.\\n   * @param _value Value of the node to search for, as a hex string.\\n   * @param _proof Merkle trie inclusion proof for the desired node. Unlike\\n   * traditional Merkle trees, this proof is executed top-down and consists\\n   * of a list of RLP-encoded nodes that make a path down to the target node.\\n   * @param _root Known root of the Merkle trie. Used to verify that the\\n   * included proof is correctly constructed.\\n   * @return _verified `true` if the k/v pair exists in the trie, `false` otherwise.\\n   */\\n  function verifyInclusionProof(\\n    bytes memory _key,\\n    bytes memory _value,\\n    bytes memory _proof,\\n    bytes32 _root\\n  ) internal pure returns (bool _verified) {\\n    (bool exists, bytes memory value) = get(_key, _proof, _root);\\n\\n    return (exists && BytesUtils.equal(_value, value));\\n  }\\n\\n  /**\\n   * @notice Retrieves the value associated with a given key.\\n   * @param _key Key to search for, as hex bytes.\\n   * @param _proof Merkle trie inclusion proof for the key.\\n   * @param _root Known root of the Merkle trie.\\n   * @return _exists Whether or not the key exists.\\n   * @return _value Value of the key if it exists.\\n   */\\n  function get(\\n    bytes memory _key,\\n    bytes memory _proof,\\n    bytes32 _root\\n  ) internal pure returns (bool _exists, bytes memory _value) {\\n    TrieNode[] memory proof = _parseProof(_proof);\\n    (uint256 pathLength, bytes memory keyRemainder, bool isFinalNode) = _walkNodePath(proof, _key, _root);\\n\\n    bool exists = keyRemainder.length == 0;\\n\\n    require(exists || isFinalNode, \\\"Provided proof is invalid.\\\");\\n\\n    bytes memory value = exists ? _getNodeValue(proof[pathLength - 1]) : bytes(\\\"\\\");\\n\\n    return (exists, value);\\n  }\\n\\n  /*********************\\n   * Private Functions *\\n   *********************/\\n\\n  /**\\n   * @notice Walks through a proof using a provided key.\\n   * @param _proof Inclusion proof to walk through.\\n   * @param _key Key to use for the walk.\\n   * @param _root Known root of the trie.\\n   * @return _pathLength Length of the final path\\n   * @return _keyRemainder Portion of the key remaining after the walk.\\n   * @return _isFinalNode Whether or not we've hit a dead end.\\n   */\\n  function _walkNodePath(\\n    TrieNode[] memory _proof,\\n    bytes memory _key,\\n    bytes32 _root\\n  )\\n    private\\n    pure\\n    returns (\\n      uint256 _pathLength,\\n      bytes memory _keyRemainder,\\n      bool _isFinalNode\\n    )\\n  {\\n    uint256 pathLength = 0;\\n    bytes memory key = BytesUtils.toNibbles(_key);\\n\\n    bytes32 currentNodeID = _root;\\n    uint256 currentKeyIndex = 0;\\n    uint256 currentKeyIncrement = 0;\\n    TrieNode memory currentNode;\\n\\n    // Proof is top-down, so we start at the first element (root).\\n    uint256 len = _proof.length;\\n    for (uint256 i = 0; i < len; ) {\\n      currentNode = _proof[i];\\n      currentKeyIndex += currentKeyIncrement;\\n\\n      // Keep track of the proof elements we actually need.\\n      // It's expensive to resize arrays, so this simply reduces gas costs.\\n      pathLength += 1;\\n\\n      if (currentKeyIndex == 0) {\\n        // First proof element is always the root node.\\n        require(keccak256(currentNode.encoded) == currentNodeID, \\\"Invalid root hash\\\");\\n      } else if (currentNode.encoded.length > 32 - 1) {\\n        // Nodes 32 bytes or larger are hashed inside branch nodes.\\n        require(keccak256(currentNode.encoded) == currentNodeID, \\\"Invalid large internal hash\\\");\\n      } else {\\n        // Nodes smaller than 31 bytes aren't hashed.\\n        require(BytesUtils.toBytes32(currentNode.encoded) == currentNodeID, \\\"Invalid internal node hash\\\");\\n      }\\n\\n      // unreachable code if it's below the if statement under this\\n      unchecked {\\n        ++i;\\n      }\\n\\n      if (currentNode.decoded.length == BRANCH_NODE_LENGTH) {\\n        if (currentKeyIndex == key.length) {\\n          // We've hit the end of the key\\n          // meaning the value should be within this branch node.\\n          break;\\n        } else {\\n          // We're not at the end of the key yet.\\n          // Figure out what the next node ID should be and continue.\\n          uint8 branchKey = uint8(key[currentKeyIndex]);\\n          RLPReader.RLPItem memory nextNode = currentNode.decoded[branchKey];\\n          currentNodeID = _getNodeID(nextNode);\\n          currentKeyIncrement = 1;\\n          continue;\\n        }\\n      } else if (currentNode.decoded.length == LEAF_OR_EXTENSION_NODE_LENGTH) {\\n        bytes memory path = _getNodePath(currentNode);\\n        uint8 prefix = uint8(path[0]);\\n        uint8 offset = 2 - (prefix % 2);\\n        bytes memory pathRemainder = BytesUtils.slice(path, offset);\\n        bytes memory keyRemainder = BytesUtils.slice(key, currentKeyIndex);\\n        uint256 sharedNibbleLength = _getSharedNibbleLength(pathRemainder, keyRemainder);\\n\\n        if (prefix == PREFIX_LEAF_EVEN || prefix == PREFIX_LEAF_ODD) {\\n          if (pathRemainder.length == sharedNibbleLength && keyRemainder.length == sharedNibbleLength) {\\n            // The key within this leaf matches our key exactly.\\n            // Increment the key index to reflect that we have no remainder.\\n            currentKeyIndex += sharedNibbleLength;\\n          }\\n\\n          // We've hit a leaf node, so our next node should be NULL.\\n          currentNodeID = bytes32(RLP_NULL);\\n          break;\\n        } else if (prefix == PREFIX_EXTENSION_EVEN || prefix == PREFIX_EXTENSION_ODD) {\\n          if (sharedNibbleLength != pathRemainder.length) {\\n            // Our extension node is not identical to the remainder.\\n            // We've hit the end of this path\\n            // updates will need to modify this extension.\\n            currentNodeID = bytes32(RLP_NULL);\\n            break;\\n          } else {\\n            // Our extension shares some nibbles.\\n            // Carry on to the next node.\\n            currentNodeID = _getNodeID(currentNode.decoded[1]);\\n            currentKeyIncrement = sharedNibbleLength;\\n            continue;\\n          }\\n        } else {\\n          revert(\\\"Received a node with an unknown prefix\\\");\\n        }\\n      } else {\\n        revert(\\\"Received an unparseable node.\\\");\\n      }\\n    }\\n\\n    // If our node ID is NULL, then we're at a dead end.\\n    bool isFinalNode = currentNodeID == bytes32(RLP_NULL);\\n    return (pathLength, BytesUtils.slice(key, currentKeyIndex), isFinalNode);\\n  }\\n\\n  /**\\n   * @notice Parses an RLP-encoded proof into something more useful.\\n   * @param _proof RLP-encoded proof to parse.\\n   * @return _parsed Proof parsed into easily accessible structs.\\n   */\\n  function _parseProof(bytes memory _proof) private pure returns (TrieNode[] memory _parsed) {\\n    RLPReader.RLPItem[] memory nodes = RLPReader.readList(_proof);\\n    TrieNode[] memory proof = new TrieNode[](nodes.length);\\n\\n    uint256 len = nodes.length;\\n    for (uint256 i = 0; i < len; ) {\\n      bytes memory encoded = RLPReader.readBytes(nodes[i]);\\n      proof[i] = TrieNode({encoded: encoded, decoded: RLPReader.readList(encoded)});\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    return proof;\\n  }\\n\\n  /**\\n   * @notice Picks out the ID for a node. Node ID is referred to as the\\n   * \\\"hash\\\" within the specification, but nodes < 32 bytes are not actually\\n   * hashed.\\n   * @param _node Node to pull an ID for.\\n   * @return _nodeID ID for the node, depending on the size of its contents.\\n   */\\n  function _getNodeID(RLPReader.RLPItem memory _node) private pure returns (bytes32 _nodeID) {\\n    bytes memory nodeID;\\n\\n    if (_node.length < 32) {\\n      // Nodes smaller than 32 bytes are RLP encoded.\\n      nodeID = RLPReader.readRawBytes(_node);\\n    } else {\\n      // Nodes 32 bytes or larger are hashed.\\n      nodeID = RLPReader.readBytes(_node);\\n    }\\n\\n    return BytesUtils.toBytes32(nodeID);\\n  }\\n\\n  /**\\n   * @notice Gets the path for a leaf or extension node.\\n   * @param _node Node to get a path for.\\n   * @return _path Node path, converted to an array of nibbles.\\n   */\\n  function _getNodePath(TrieNode memory _node) private pure returns (bytes memory _path) {\\n    return BytesUtils.toNibbles(RLPReader.readBytes(_node.decoded[0]));\\n  }\\n\\n  /**\\n   * @notice Gets the path for a node.\\n   * @param _node Node to get a value for.\\n   * @return _value Node value, as hex bytes.\\n   */\\n  function _getNodeValue(TrieNode memory _node) private pure returns (bytes memory _value) {\\n    return RLPReader.readBytes(_node.decoded[_node.decoded.length - 1]);\\n  }\\n\\n  /**\\n   * @notice Utility; determines the number of nibbles shared between two\\n   * nibble arrays.\\n   * @param _a First nibble array.\\n   * @param _b Second nibble array.\\n   * @return _shared Number of shared nibbles.\\n   */\\n  function _getSharedNibbleLength(bytes memory _a, bytes memory _b) private pure returns (uint256 _shared) {\\n    uint256 i = 0;\\n    while (_a.length > i && _b.length > i && _a[i] == _b[i]) {\\n      i++;\\n    }\\n    return i;\\n  }\\n}\\n\",\"keccak256\":\"0xead186b4bbb39d904ec1ecdc418893465831dba9a1ed088c17e673df6df9198a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/lib/RLPReader.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title RLPReader\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/rlp/Lib_RLPReader.sol\\n */\\nlibrary RLPReader {\\n  /*************\\n   * Constants *\\n   *************/\\n\\n  uint256 internal constant MAX_LIST_LENGTH = 32;\\n\\n  /*********\\n   * Enums *\\n   *********/\\n\\n  enum RLPItemType {\\n    DATA_ITEM,\\n    LIST_ITEM\\n  }\\n\\n  /***********\\n   * Structs *\\n   ***********/\\n\\n  struct RLPItem {\\n    uint256 length;\\n    uint256 ptr;\\n  }\\n\\n  /**********************\\n   * Internal Functions *\\n   **********************/\\n\\n  /**\\n   * Converts bytes to a reference to memory position and length.\\n   * @param _in Input bytes to convert.\\n   * @return Output memory reference.\\n   */\\n  function toRLPItem(bytes memory _in) internal pure returns (RLPItem memory) {\\n    uint256 ptr;\\n    assembly {\\n      ptr := add(_in, 32)\\n    }\\n\\n    return RLPItem({length: _in.length, ptr: ptr});\\n  }\\n\\n  /**\\n   * Reads an RLP list value into a list of RLP items.\\n   * @param _in RLP list value.\\n   * @return Decoded RLP list items.\\n   */\\n  function readList(RLPItem memory _in) internal pure returns (RLPItem[] memory) {\\n    (uint256 listOffset, , RLPItemType itemType) = _decodeLength(_in);\\n\\n    require(itemType == RLPItemType.LIST_ITEM, \\\"Invalid RLP list value.\\\");\\n\\n    // Solidity in-memory arrays can't be increased in size, but *can* be decreased in size by\\n    // writing to the length. Since we can't know the number of RLP items without looping over\\n    // the entire input, we'd have to loop twice to accurately size this array. It's easier to\\n    // simply set a reasonable maximum list length and decrease the size before we finish.\\n    RLPItem[] memory out = new RLPItem[](MAX_LIST_LENGTH);\\n\\n    uint256 itemCount = 0;\\n    uint256 offset = listOffset;\\n    while (offset < _in.length) {\\n      require(itemCount < MAX_LIST_LENGTH, \\\"Provided RLP list exceeds max list length.\\\");\\n\\n      (uint256 itemOffset, uint256 itemLength, ) = _decodeLength(\\n        RLPItem({length: _in.length - offset, ptr: _in.ptr + offset})\\n      );\\n\\n      out[itemCount] = RLPItem({length: itemLength + itemOffset, ptr: _in.ptr + offset});\\n\\n      itemCount += 1;\\n      offset += itemOffset + itemLength;\\n    }\\n\\n    // Decrease the array size to match the actual item count.\\n    assembly {\\n      mstore(out, itemCount)\\n    }\\n\\n    return out;\\n  }\\n\\n  /**\\n   * Reads an RLP list value into a list of RLP items.\\n   * @param _in RLP list value.\\n   * @return Decoded RLP list items.\\n   */\\n  function readList(bytes memory _in) internal pure returns (RLPItem[] memory) {\\n    return readList(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP bytes value into bytes.\\n   * @param _in RLP bytes value.\\n   * @return Decoded bytes.\\n   */\\n  function readBytes(RLPItem memory _in) internal pure returns (bytes memory) {\\n    (uint256 itemOffset, uint256 itemLength, RLPItemType itemType) = _decodeLength(_in);\\n\\n    require(itemType == RLPItemType.DATA_ITEM, \\\"Invalid RLP bytes value.\\\");\\n\\n    return _copy(_in.ptr, itemOffset, itemLength);\\n  }\\n\\n  /**\\n   * Reads an RLP bytes value into bytes.\\n   * @param _in RLP bytes value.\\n   * @return Decoded bytes.\\n   */\\n  function readBytes(bytes memory _in) internal pure returns (bytes memory) {\\n    return readBytes(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP string value into a string.\\n   * @param _in RLP string value.\\n   * @return Decoded string.\\n   */\\n  function readString(RLPItem memory _in) internal pure returns (string memory) {\\n    return string(readBytes(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP string value into a string.\\n   * @param _in RLP string value.\\n   * @return Decoded string.\\n   */\\n  function readString(bytes memory _in) internal pure returns (string memory) {\\n    return readString(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP bytes32 value into a bytes32.\\n   * @param _in RLP bytes32 value.\\n   * @return Decoded bytes32.\\n   */\\n  function readBytes32(RLPItem memory _in) internal pure returns (bytes32) {\\n    // instead of <= 33\\n    require(_in.length < 33 + 1, \\\"Invalid RLP bytes32 value.\\\");\\n\\n    (uint256 itemOffset, uint256 itemLength, RLPItemType itemType) = _decodeLength(_in);\\n\\n    require(itemType == RLPItemType.DATA_ITEM, \\\"Invalid RLP bytes32 value.\\\");\\n\\n    uint256 ptr = _in.ptr + itemOffset;\\n    bytes32 out;\\n    assembly {\\n      out := mload(ptr)\\n\\n      // Shift the bytes over to match the item size.\\n      if lt(itemLength, 32) {\\n        out := div(out, exp(256, sub(32, itemLength)))\\n      }\\n    }\\n\\n    return out;\\n  }\\n\\n  /**\\n   * Reads an RLP bytes32 value into a bytes32.\\n   * @param _in RLP bytes32 value.\\n   * @return Decoded bytes32.\\n   */\\n  function readBytes32(bytes memory _in) internal pure returns (bytes32) {\\n    return readBytes32(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP uint256 value into a uint256.\\n   * @param _in RLP uint256 value.\\n   * @return Decoded uint256.\\n   */\\n  function readUint256(RLPItem memory _in) internal pure returns (uint256) {\\n    return uint256(readBytes32(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP uint256 value into a uint256.\\n   * @param _in RLP uint256 value.\\n   * @return Decoded uint256.\\n   */\\n  function readUint256(bytes memory _in) internal pure returns (uint256) {\\n    return readUint256(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP bool value into a bool.\\n   * @param _in RLP bool value.\\n   * @return Decoded bool.\\n   */\\n  function readBool(RLPItem memory _in) internal pure returns (bool) {\\n    require(_in.length == 1, \\\"Invalid RLP boolean value.\\\");\\n\\n    uint256 ptr = _in.ptr;\\n    uint256 out;\\n    assembly {\\n      out := byte(0, mload(ptr))\\n    }\\n\\n    require(out == 0 || out == 1, \\\"Lib_RLPReader: Invalid RLP boolean value, must be 0 or 1\\\");\\n\\n    return out != 0;\\n  }\\n\\n  /**\\n   * Reads an RLP bool value into a bool.\\n   * @param _in RLP bool value.\\n   * @return Decoded bool.\\n   */\\n  function readBool(bytes memory _in) internal pure returns (bool) {\\n    return readBool(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP address value into a address.\\n   * @param _in RLP address value.\\n   * @return Decoded address.\\n   */\\n  function readAddress(RLPItem memory _in) internal pure returns (address) {\\n    if (_in.length == 1) {\\n      return address(0);\\n    }\\n\\n    require(_in.length == 21, \\\"Invalid RLP address value.\\\");\\n\\n    return address(uint160(readUint256(_in)));\\n  }\\n\\n  /**\\n   * Reads an RLP address value into a address.\\n   * @param _in RLP address value.\\n   * @return Decoded address.\\n   */\\n  function readAddress(bytes memory _in) internal pure returns (address) {\\n    return readAddress(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads the raw bytes of an RLP item.\\n   * @param _in RLP item to read.\\n   * @return Raw RLP bytes.\\n   */\\n  function readRawBytes(RLPItem memory _in) internal pure returns (bytes memory) {\\n    return _copy(_in);\\n  }\\n\\n  /*********************\\n   * Private Functions *\\n   *********************/\\n\\n  /**\\n   * Decodes the length of an RLP item.\\n   * @param _in RLP item to decode.\\n   * @return Offset of the encoded data.\\n   * @return Length of the encoded data.\\n   * @return RLP item type (LIST_ITEM or DATA_ITEM).\\n   */\\n  function _decodeLength(RLPItem memory _in)\\n    private\\n    pure\\n    returns (\\n      uint256,\\n      uint256,\\n      RLPItemType\\n    )\\n  {\\n    require(_in.length > 0, \\\"RLP item cannot be null.\\\");\\n\\n    uint256 ptr = _in.ptr;\\n    uint256 prefix;\\n    assembly {\\n      prefix := byte(0, mload(ptr))\\n    }\\n\\n    if (prefix < 0x7f + 1) {\\n      // Single byte.\\n\\n      return (0, 1, RLPItemType.DATA_ITEM);\\n    } else if (prefix < 0xb7 + 1) {\\n      // Short string.\\n\\n      // slither-disable-next-line variable-scope\\n      uint256 strLen = prefix - 0x80;\\n\\n      require(_in.length > strLen, \\\"Invalid RLP short string.\\\");\\n\\n      return (1, strLen, RLPItemType.DATA_ITEM);\\n    } else if (prefix < 0xbf + 1) {\\n      // Long string.\\n      uint256 lenOfStrLen = prefix - 0xb7;\\n\\n      require(_in.length > lenOfStrLen, \\\"Invalid RLP long string length.\\\");\\n\\n      uint256 strLen;\\n      assembly {\\n        // Pick out the string length.\\n        strLen := div(mload(add(ptr, 1)), exp(256, sub(32, lenOfStrLen)))\\n      }\\n\\n      require(_in.length > lenOfStrLen + strLen, \\\"Invalid RLP long string.\\\");\\n\\n      return (1 + lenOfStrLen, strLen, RLPItemType.DATA_ITEM);\\n    } else if (prefix < 0xf7 + 1) {\\n      // Short list.\\n      // slither-disable-next-line variable-scope\\n      uint256 listLen = prefix - 0xc0;\\n\\n      require(_in.length > listLen, \\\"Invalid RLP short list.\\\");\\n\\n      return (1, listLen, RLPItemType.LIST_ITEM);\\n    } else {\\n      // Long list.\\n      uint256 lenOfListLen = prefix - 0xf7;\\n\\n      require(_in.length > lenOfListLen, \\\"Invalid RLP long list length.\\\");\\n\\n      uint256 listLen;\\n      assembly {\\n        // Pick out the list length.\\n        listLen := div(mload(add(ptr, 1)), exp(256, sub(32, lenOfListLen)))\\n      }\\n\\n      require(_in.length > lenOfListLen + listLen, \\\"Invalid RLP long list.\\\");\\n\\n      return (1 + lenOfListLen, listLen, RLPItemType.LIST_ITEM);\\n    }\\n  }\\n\\n  /**\\n   * Copies the bytes from a memory location.\\n   * @param _src Pointer to the location to read from.\\n   * @param _offset Offset to start reading from.\\n   * @param _length Number of bytes to read.\\n   * @return Copied bytes.\\n   */\\n  function _copy(\\n    uint256 _src,\\n    uint256 _offset,\\n    uint256 _length\\n  ) private pure returns (bytes memory) {\\n    bytes memory out = new bytes(_length);\\n    if (out.length == 0) {\\n      return out;\\n    }\\n\\n    uint256 src = _src + _offset;\\n    uint256 dest;\\n    assembly {\\n      dest := add(out, 32)\\n    }\\n\\n    // Copy over as many complete words as we can.\\n    for (uint256 i = 0; i < _length / 32; ) {\\n      assembly {\\n        mstore(dest, mload(src))\\n      }\\n\\n      src += 32;\\n      dest += 32;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Pick out the remaining bytes.\\n    uint256 mask;\\n    unchecked {\\n      mask = 256**(32 - (_length % 32)) - 1;\\n    }\\n\\n    assembly {\\n      mstore(dest, or(and(mload(src), not(mask)), and(mload(dest), mask)))\\n    }\\n    return out;\\n  }\\n\\n  /**\\n   * Copies an RLP item into bytes.\\n   * @param _in RLP item to copy.\\n   * @return Copied bytes.\\n   */\\n  function _copy(RLPItem memory _in) private pure returns (bytes memory) {\\n    return _copy(_in.ptr, 0, _in.length);\\n  }\\n}\\n\",\"keccak256\":\"0x1770c68d08215690f873f1c8d95d8f63db546cf6b34e477a5b065379a9030e43\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/messaging/connectors/optimism/lib/OVMCodec.sol":{"OVMCodec":{"abi":[],"devdoc":{"details":"modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/codec/Lib_OVMCodec.sol","kind":"dev","methods":{},"title":"OVMCodec","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e8e83f40b724449339d954b4fcc1c194726ffebdbfd361f0e81974dd1c53a30164736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE8 0xE8 EXTCODEHASH BLOCKHASH 0xB7 0x24 DIFFICULTY SWAP4 CODECOPY 0xD9 SLOAD 0xB4 0xFC 0xC1 0xC1 SWAP5 PUSH19 0x6FFEBDBFD361F0E81974DD1C53A30164736F6C PUSH4 0x43000811 STOP CALLER ","sourceMap":"311:794:135:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;311:794:135;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e8e83f40b724449339d954b4fcc1c194726ffebdbfd361f0e81974dd1c53a30164736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE8 0xE8 EXTCODEHASH BLOCKHASH 0xB7 0x24 DIFFICULTY SWAP4 CODECOPY 0xD9 SLOAD 0xB4 0xFC 0xC1 0xC1 SWAP5 PUSH19 0x6FFEBDBFD361F0E81974DD1C53A30164736F6C PUSH4 0x43000811 STOP CALLER ","sourceMap":"311:794:135:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"decodeEVMAccount(bytes memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/codec/Lib_OVMCodec.sol\",\"kind\":\"dev\",\"methods\":{},\"title\":\"OVMCodec\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/optimism/lib/OVMCodec.sol\":\"OVMCodec\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/optimism/lib/OVMCodec.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/* Library Imports */\\nimport {RLPReader} from \\\"./RLPReader.sol\\\";\\n\\n/**\\n * @title OVMCodec\\n *\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/codec/Lib_OVMCodec.sol\\n */\\nlibrary OVMCodec {\\n  /***********\\n   * Structs *\\n   ***********/\\n\\n  struct EVMAccount {\\n    uint256 nonce;\\n    uint256 balance;\\n    bytes32 storageRoot;\\n    bytes32 codeHash;\\n  }\\n\\n  /**\\n   * @notice Decodes an RLP-encoded account state into a useful struct.\\n   * @param _encoded RLP-encoded account state.\\n   * @return Account state struct.\\n   */\\n  function decodeEVMAccount(bytes memory _encoded) internal pure returns (EVMAccount memory) {\\n    RLPReader.RLPItem[] memory accountState = RLPReader.readList(_encoded);\\n\\n    return\\n      EVMAccount({\\n        nonce: RLPReader.readUint256(accountState[0]),\\n        balance: RLPReader.readUint256(accountState[1]),\\n        storageRoot: RLPReader.readBytes32(accountState[2]),\\n        codeHash: RLPReader.readBytes32(accountState[3])\\n      });\\n  }\\n}\\n\",\"keccak256\":\"0x777f550172e00112a8fcdde5a759c6d86ef71ca46d78a7850d6cac217a156b2b\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/lib/RLPReader.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title RLPReader\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/rlp/Lib_RLPReader.sol\\n */\\nlibrary RLPReader {\\n  /*************\\n   * Constants *\\n   *************/\\n\\n  uint256 internal constant MAX_LIST_LENGTH = 32;\\n\\n  /*********\\n   * Enums *\\n   *********/\\n\\n  enum RLPItemType {\\n    DATA_ITEM,\\n    LIST_ITEM\\n  }\\n\\n  /***********\\n   * Structs *\\n   ***********/\\n\\n  struct RLPItem {\\n    uint256 length;\\n    uint256 ptr;\\n  }\\n\\n  /**********************\\n   * Internal Functions *\\n   **********************/\\n\\n  /**\\n   * Converts bytes to a reference to memory position and length.\\n   * @param _in Input bytes to convert.\\n   * @return Output memory reference.\\n   */\\n  function toRLPItem(bytes memory _in) internal pure returns (RLPItem memory) {\\n    uint256 ptr;\\n    assembly {\\n      ptr := add(_in, 32)\\n    }\\n\\n    return RLPItem({length: _in.length, ptr: ptr});\\n  }\\n\\n  /**\\n   * Reads an RLP list value into a list of RLP items.\\n   * @param _in RLP list value.\\n   * @return Decoded RLP list items.\\n   */\\n  function readList(RLPItem memory _in) internal pure returns (RLPItem[] memory) {\\n    (uint256 listOffset, , RLPItemType itemType) = _decodeLength(_in);\\n\\n    require(itemType == RLPItemType.LIST_ITEM, \\\"Invalid RLP list value.\\\");\\n\\n    // Solidity in-memory arrays can't be increased in size, but *can* be decreased in size by\\n    // writing to the length. Since we can't know the number of RLP items without looping over\\n    // the entire input, we'd have to loop twice to accurately size this array. It's easier to\\n    // simply set a reasonable maximum list length and decrease the size before we finish.\\n    RLPItem[] memory out = new RLPItem[](MAX_LIST_LENGTH);\\n\\n    uint256 itemCount = 0;\\n    uint256 offset = listOffset;\\n    while (offset < _in.length) {\\n      require(itemCount < MAX_LIST_LENGTH, \\\"Provided RLP list exceeds max list length.\\\");\\n\\n      (uint256 itemOffset, uint256 itemLength, ) = _decodeLength(\\n        RLPItem({length: _in.length - offset, ptr: _in.ptr + offset})\\n      );\\n\\n      out[itemCount] = RLPItem({length: itemLength + itemOffset, ptr: _in.ptr + offset});\\n\\n      itemCount += 1;\\n      offset += itemOffset + itemLength;\\n    }\\n\\n    // Decrease the array size to match the actual item count.\\n    assembly {\\n      mstore(out, itemCount)\\n    }\\n\\n    return out;\\n  }\\n\\n  /**\\n   * Reads an RLP list value into a list of RLP items.\\n   * @param _in RLP list value.\\n   * @return Decoded RLP list items.\\n   */\\n  function readList(bytes memory _in) internal pure returns (RLPItem[] memory) {\\n    return readList(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP bytes value into bytes.\\n   * @param _in RLP bytes value.\\n   * @return Decoded bytes.\\n   */\\n  function readBytes(RLPItem memory _in) internal pure returns (bytes memory) {\\n    (uint256 itemOffset, uint256 itemLength, RLPItemType itemType) = _decodeLength(_in);\\n\\n    require(itemType == RLPItemType.DATA_ITEM, \\\"Invalid RLP bytes value.\\\");\\n\\n    return _copy(_in.ptr, itemOffset, itemLength);\\n  }\\n\\n  /**\\n   * Reads an RLP bytes value into bytes.\\n   * @param _in RLP bytes value.\\n   * @return Decoded bytes.\\n   */\\n  function readBytes(bytes memory _in) internal pure returns (bytes memory) {\\n    return readBytes(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP string value into a string.\\n   * @param _in RLP string value.\\n   * @return Decoded string.\\n   */\\n  function readString(RLPItem memory _in) internal pure returns (string memory) {\\n    return string(readBytes(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP string value into a string.\\n   * @param _in RLP string value.\\n   * @return Decoded string.\\n   */\\n  function readString(bytes memory _in) internal pure returns (string memory) {\\n    return readString(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP bytes32 value into a bytes32.\\n   * @param _in RLP bytes32 value.\\n   * @return Decoded bytes32.\\n   */\\n  function readBytes32(RLPItem memory _in) internal pure returns (bytes32) {\\n    // instead of <= 33\\n    require(_in.length < 33 + 1, \\\"Invalid RLP bytes32 value.\\\");\\n\\n    (uint256 itemOffset, uint256 itemLength, RLPItemType itemType) = _decodeLength(_in);\\n\\n    require(itemType == RLPItemType.DATA_ITEM, \\\"Invalid RLP bytes32 value.\\\");\\n\\n    uint256 ptr = _in.ptr + itemOffset;\\n    bytes32 out;\\n    assembly {\\n      out := mload(ptr)\\n\\n      // Shift the bytes over to match the item size.\\n      if lt(itemLength, 32) {\\n        out := div(out, exp(256, sub(32, itemLength)))\\n      }\\n    }\\n\\n    return out;\\n  }\\n\\n  /**\\n   * Reads an RLP bytes32 value into a bytes32.\\n   * @param _in RLP bytes32 value.\\n   * @return Decoded bytes32.\\n   */\\n  function readBytes32(bytes memory _in) internal pure returns (bytes32) {\\n    return readBytes32(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP uint256 value into a uint256.\\n   * @param _in RLP uint256 value.\\n   * @return Decoded uint256.\\n   */\\n  function readUint256(RLPItem memory _in) internal pure returns (uint256) {\\n    return uint256(readBytes32(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP uint256 value into a uint256.\\n   * @param _in RLP uint256 value.\\n   * @return Decoded uint256.\\n   */\\n  function readUint256(bytes memory _in) internal pure returns (uint256) {\\n    return readUint256(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP bool value into a bool.\\n   * @param _in RLP bool value.\\n   * @return Decoded bool.\\n   */\\n  function readBool(RLPItem memory _in) internal pure returns (bool) {\\n    require(_in.length == 1, \\\"Invalid RLP boolean value.\\\");\\n\\n    uint256 ptr = _in.ptr;\\n    uint256 out;\\n    assembly {\\n      out := byte(0, mload(ptr))\\n    }\\n\\n    require(out == 0 || out == 1, \\\"Lib_RLPReader: Invalid RLP boolean value, must be 0 or 1\\\");\\n\\n    return out != 0;\\n  }\\n\\n  /**\\n   * Reads an RLP bool value into a bool.\\n   * @param _in RLP bool value.\\n   * @return Decoded bool.\\n   */\\n  function readBool(bytes memory _in) internal pure returns (bool) {\\n    return readBool(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP address value into a address.\\n   * @param _in RLP address value.\\n   * @return Decoded address.\\n   */\\n  function readAddress(RLPItem memory _in) internal pure returns (address) {\\n    if (_in.length == 1) {\\n      return address(0);\\n    }\\n\\n    require(_in.length == 21, \\\"Invalid RLP address value.\\\");\\n\\n    return address(uint160(readUint256(_in)));\\n  }\\n\\n  /**\\n   * Reads an RLP address value into a address.\\n   * @param _in RLP address value.\\n   * @return Decoded address.\\n   */\\n  function readAddress(bytes memory _in) internal pure returns (address) {\\n    return readAddress(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads the raw bytes of an RLP item.\\n   * @param _in RLP item to read.\\n   * @return Raw RLP bytes.\\n   */\\n  function readRawBytes(RLPItem memory _in) internal pure returns (bytes memory) {\\n    return _copy(_in);\\n  }\\n\\n  /*********************\\n   * Private Functions *\\n   *********************/\\n\\n  /**\\n   * Decodes the length of an RLP item.\\n   * @param _in RLP item to decode.\\n   * @return Offset of the encoded data.\\n   * @return Length of the encoded data.\\n   * @return RLP item type (LIST_ITEM or DATA_ITEM).\\n   */\\n  function _decodeLength(RLPItem memory _in)\\n    private\\n    pure\\n    returns (\\n      uint256,\\n      uint256,\\n      RLPItemType\\n    )\\n  {\\n    require(_in.length > 0, \\\"RLP item cannot be null.\\\");\\n\\n    uint256 ptr = _in.ptr;\\n    uint256 prefix;\\n    assembly {\\n      prefix := byte(0, mload(ptr))\\n    }\\n\\n    if (prefix < 0x7f + 1) {\\n      // Single byte.\\n\\n      return (0, 1, RLPItemType.DATA_ITEM);\\n    } else if (prefix < 0xb7 + 1) {\\n      // Short string.\\n\\n      // slither-disable-next-line variable-scope\\n      uint256 strLen = prefix - 0x80;\\n\\n      require(_in.length > strLen, \\\"Invalid RLP short string.\\\");\\n\\n      return (1, strLen, RLPItemType.DATA_ITEM);\\n    } else if (prefix < 0xbf + 1) {\\n      // Long string.\\n      uint256 lenOfStrLen = prefix - 0xb7;\\n\\n      require(_in.length > lenOfStrLen, \\\"Invalid RLP long string length.\\\");\\n\\n      uint256 strLen;\\n      assembly {\\n        // Pick out the string length.\\n        strLen := div(mload(add(ptr, 1)), exp(256, sub(32, lenOfStrLen)))\\n      }\\n\\n      require(_in.length > lenOfStrLen + strLen, \\\"Invalid RLP long string.\\\");\\n\\n      return (1 + lenOfStrLen, strLen, RLPItemType.DATA_ITEM);\\n    } else if (prefix < 0xf7 + 1) {\\n      // Short list.\\n      // slither-disable-next-line variable-scope\\n      uint256 listLen = prefix - 0xc0;\\n\\n      require(_in.length > listLen, \\\"Invalid RLP short list.\\\");\\n\\n      return (1, listLen, RLPItemType.LIST_ITEM);\\n    } else {\\n      // Long list.\\n      uint256 lenOfListLen = prefix - 0xf7;\\n\\n      require(_in.length > lenOfListLen, \\\"Invalid RLP long list length.\\\");\\n\\n      uint256 listLen;\\n      assembly {\\n        // Pick out the list length.\\n        listLen := div(mload(add(ptr, 1)), exp(256, sub(32, lenOfListLen)))\\n      }\\n\\n      require(_in.length > lenOfListLen + listLen, \\\"Invalid RLP long list.\\\");\\n\\n      return (1 + lenOfListLen, listLen, RLPItemType.LIST_ITEM);\\n    }\\n  }\\n\\n  /**\\n   * Copies the bytes from a memory location.\\n   * @param _src Pointer to the location to read from.\\n   * @param _offset Offset to start reading from.\\n   * @param _length Number of bytes to read.\\n   * @return Copied bytes.\\n   */\\n  function _copy(\\n    uint256 _src,\\n    uint256 _offset,\\n    uint256 _length\\n  ) private pure returns (bytes memory) {\\n    bytes memory out = new bytes(_length);\\n    if (out.length == 0) {\\n      return out;\\n    }\\n\\n    uint256 src = _src + _offset;\\n    uint256 dest;\\n    assembly {\\n      dest := add(out, 32)\\n    }\\n\\n    // Copy over as many complete words as we can.\\n    for (uint256 i = 0; i < _length / 32; ) {\\n      assembly {\\n        mstore(dest, mload(src))\\n      }\\n\\n      src += 32;\\n      dest += 32;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Pick out the remaining bytes.\\n    uint256 mask;\\n    unchecked {\\n      mask = 256**(32 - (_length % 32)) - 1;\\n    }\\n\\n    assembly {\\n      mstore(dest, or(and(mload(src), not(mask)), and(mload(dest), mask)))\\n    }\\n    return out;\\n  }\\n\\n  /**\\n   * Copies an RLP item into bytes.\\n   * @param _in RLP item to copy.\\n   * @return Copied bytes.\\n   */\\n  function _copy(RLPItem memory _in) private pure returns (bytes memory) {\\n    return _copy(_in.ptr, 0, _in.length);\\n  }\\n}\\n\",\"keccak256\":\"0x1770c68d08215690f873f1c8d95d8f63db546cf6b34e477a5b065379a9030e43\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/messaging/connectors/optimism/lib/PredeployAddresses.sol":{"PredeployAddresses":{"abi":[],"devdoc":{"details":"modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/constants/Lib_PredeployAddresses.sol","kind":"dev","methods":{},"title":"PredeployAddresses","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122064714791d58aec37ed0771c9945e0295e7aca38d93fdf37b74ff14c0a0b7937d64736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH5 0x714791D58A 0xEC CALLDATACOPY 0xED SMOD PUSH18 0xC9945E0295E7ACA38D93FDF37B74FF14C0A0 0xB7 SWAP4 PUSH30 0x64736F6C6343000811003300000000000000000000000000000000000000 ","sourceMap":"269:1068:136:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;269:1068:136;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122064714791d58aec37ed0771c9945e0295e7aca38d93fdf37b74ff14c0a0b7937d64736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH5 0x714791D58A 0xEC CALLDATACOPY 0xED SMOD PUSH18 0xC9945E0295E7ACA38D93FDF37B74FF14C0A0 0xB7 SWAP4 PUSH30 0x64736F6C6343000811003300000000000000000000000000000000000000 ","sourceMap":"269:1068:136:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/constants/Lib_PredeployAddresses.sol\",\"kind\":\"dev\",\"methods\":{},\"title\":\"PredeployAddresses\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/optimism/lib/PredeployAddresses.sol\":\"PredeployAddresses\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/optimism/lib/PredeployAddresses.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title PredeployAddresses\\n *\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/constants/Lib_PredeployAddresses.sol\\n */\\nlibrary PredeployAddresses {\\n  address internal constant L2_TO_L1_MESSAGE_PASSER = 0x4200000000000000000000000000000000000000;\\n  address internal constant L1_MESSAGE_SENDER = 0x4200000000000000000000000000000000000001;\\n  address internal constant DEPLOYER_WHITELIST = 0x4200000000000000000000000000000000000002;\\n  address payable internal constant OVM_ETH = payable(0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000);\\n  address internal constant L2_CROSS_DOMAIN_MESSENGER = 0x4200000000000000000000000000000000000007;\\n  address internal constant LIB_ADDRESS_MANAGER = 0x4200000000000000000000000000000000000008;\\n  address internal constant PROXY_EOA = 0x4200000000000000000000000000000000000009;\\n  address internal constant L2_STANDARD_BRIDGE = 0x4200000000000000000000000000000000000010;\\n  address internal constant SEQUENCER_FEE_WALLET = 0x4200000000000000000000000000000000000011;\\n  address internal constant L2_STANDARD_TOKEN_FACTORY = 0x4200000000000000000000000000000000000012;\\n  address internal constant L1_BLOCK_NUMBER = 0x4200000000000000000000000000000000000013;\\n}\\n\",\"keccak256\":\"0xec0c20ed39e122e0f97a551b28ff9c845e012901bee3eef8d2cebb486007de03\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/messaging/connectors/optimism/lib/RLPReader.sol":{"RLPReader":{"abi":[],"devdoc":{"details":"modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/rlp/Lib_RLPReader.sol","kind":"dev","methods":{},"title":"RLPReader","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220097f1e267ff01ae61a7a759e4db09512269283e604589fdd754e76f3dded02e164736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MULMOD PUSH32 0x1E267FF01AE61A7A759E4DB09512269283E604589FDD754E76F3DDED02E16473 PUSH16 0x6C634300081100330000000000000000 ","sourceMap":"242:10035:137:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;242:10035:137;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220097f1e267ff01ae61a7a759e4db09512269283e604589fdd754e76f3dded02e164736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MULMOD PUSH32 0x1E267FF01AE61A7A759E4DB09512269283E604589FDD754E76F3DDED02E16473 PUSH16 0x6C634300081100330000000000000000 ","sourceMap":"242:10035:137:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_copy(struct RLPReader.RLPItem memory)":"infinite","_copy(uint256,uint256,uint256)":"infinite","_decodeLength(struct RLPReader.RLPItem memory)":"infinite","readAddress(bytes memory)":"infinite","readAddress(struct RLPReader.RLPItem memory)":"infinite","readBool(bytes memory)":"infinite","readBool(struct RLPReader.RLPItem memory)":"infinite","readBytes(bytes memory)":"infinite","readBytes(struct RLPReader.RLPItem memory)":"infinite","readBytes32(bytes memory)":"infinite","readBytes32(struct RLPReader.RLPItem memory)":"infinite","readList(bytes memory)":"infinite","readList(struct RLPReader.RLPItem memory)":"infinite","readRawBytes(struct RLPReader.RLPItem memory)":"infinite","readString(bytes memory)":"infinite","readString(struct RLPReader.RLPItem memory)":"infinite","readUint256(bytes memory)":"infinite","readUint256(struct RLPReader.RLPItem memory)":"infinite","toRLPItem(bytes memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/rlp/Lib_RLPReader.sol\",\"kind\":\"dev\",\"methods\":{},\"title\":\"RLPReader\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/optimism/lib/RLPReader.sol\":\"RLPReader\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/optimism/lib/RLPReader.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title RLPReader\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/rlp/Lib_RLPReader.sol\\n */\\nlibrary RLPReader {\\n  /*************\\n   * Constants *\\n   *************/\\n\\n  uint256 internal constant MAX_LIST_LENGTH = 32;\\n\\n  /*********\\n   * Enums *\\n   *********/\\n\\n  enum RLPItemType {\\n    DATA_ITEM,\\n    LIST_ITEM\\n  }\\n\\n  /***********\\n   * Structs *\\n   ***********/\\n\\n  struct RLPItem {\\n    uint256 length;\\n    uint256 ptr;\\n  }\\n\\n  /**********************\\n   * Internal Functions *\\n   **********************/\\n\\n  /**\\n   * Converts bytes to a reference to memory position and length.\\n   * @param _in Input bytes to convert.\\n   * @return Output memory reference.\\n   */\\n  function toRLPItem(bytes memory _in) internal pure returns (RLPItem memory) {\\n    uint256 ptr;\\n    assembly {\\n      ptr := add(_in, 32)\\n    }\\n\\n    return RLPItem({length: _in.length, ptr: ptr});\\n  }\\n\\n  /**\\n   * Reads an RLP list value into a list of RLP items.\\n   * @param _in RLP list value.\\n   * @return Decoded RLP list items.\\n   */\\n  function readList(RLPItem memory _in) internal pure returns (RLPItem[] memory) {\\n    (uint256 listOffset, , RLPItemType itemType) = _decodeLength(_in);\\n\\n    require(itemType == RLPItemType.LIST_ITEM, \\\"Invalid RLP list value.\\\");\\n\\n    // Solidity in-memory arrays can't be increased in size, but *can* be decreased in size by\\n    // writing to the length. Since we can't know the number of RLP items without looping over\\n    // the entire input, we'd have to loop twice to accurately size this array. It's easier to\\n    // simply set a reasonable maximum list length and decrease the size before we finish.\\n    RLPItem[] memory out = new RLPItem[](MAX_LIST_LENGTH);\\n\\n    uint256 itemCount = 0;\\n    uint256 offset = listOffset;\\n    while (offset < _in.length) {\\n      require(itemCount < MAX_LIST_LENGTH, \\\"Provided RLP list exceeds max list length.\\\");\\n\\n      (uint256 itemOffset, uint256 itemLength, ) = _decodeLength(\\n        RLPItem({length: _in.length - offset, ptr: _in.ptr + offset})\\n      );\\n\\n      out[itemCount] = RLPItem({length: itemLength + itemOffset, ptr: _in.ptr + offset});\\n\\n      itemCount += 1;\\n      offset += itemOffset + itemLength;\\n    }\\n\\n    // Decrease the array size to match the actual item count.\\n    assembly {\\n      mstore(out, itemCount)\\n    }\\n\\n    return out;\\n  }\\n\\n  /**\\n   * Reads an RLP list value into a list of RLP items.\\n   * @param _in RLP list value.\\n   * @return Decoded RLP list items.\\n   */\\n  function readList(bytes memory _in) internal pure returns (RLPItem[] memory) {\\n    return readList(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP bytes value into bytes.\\n   * @param _in RLP bytes value.\\n   * @return Decoded bytes.\\n   */\\n  function readBytes(RLPItem memory _in) internal pure returns (bytes memory) {\\n    (uint256 itemOffset, uint256 itemLength, RLPItemType itemType) = _decodeLength(_in);\\n\\n    require(itemType == RLPItemType.DATA_ITEM, \\\"Invalid RLP bytes value.\\\");\\n\\n    return _copy(_in.ptr, itemOffset, itemLength);\\n  }\\n\\n  /**\\n   * Reads an RLP bytes value into bytes.\\n   * @param _in RLP bytes value.\\n   * @return Decoded bytes.\\n   */\\n  function readBytes(bytes memory _in) internal pure returns (bytes memory) {\\n    return readBytes(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP string value into a string.\\n   * @param _in RLP string value.\\n   * @return Decoded string.\\n   */\\n  function readString(RLPItem memory _in) internal pure returns (string memory) {\\n    return string(readBytes(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP string value into a string.\\n   * @param _in RLP string value.\\n   * @return Decoded string.\\n   */\\n  function readString(bytes memory _in) internal pure returns (string memory) {\\n    return readString(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP bytes32 value into a bytes32.\\n   * @param _in RLP bytes32 value.\\n   * @return Decoded bytes32.\\n   */\\n  function readBytes32(RLPItem memory _in) internal pure returns (bytes32) {\\n    // instead of <= 33\\n    require(_in.length < 33 + 1, \\\"Invalid RLP bytes32 value.\\\");\\n\\n    (uint256 itemOffset, uint256 itemLength, RLPItemType itemType) = _decodeLength(_in);\\n\\n    require(itemType == RLPItemType.DATA_ITEM, \\\"Invalid RLP bytes32 value.\\\");\\n\\n    uint256 ptr = _in.ptr + itemOffset;\\n    bytes32 out;\\n    assembly {\\n      out := mload(ptr)\\n\\n      // Shift the bytes over to match the item size.\\n      if lt(itemLength, 32) {\\n        out := div(out, exp(256, sub(32, itemLength)))\\n      }\\n    }\\n\\n    return out;\\n  }\\n\\n  /**\\n   * Reads an RLP bytes32 value into a bytes32.\\n   * @param _in RLP bytes32 value.\\n   * @return Decoded bytes32.\\n   */\\n  function readBytes32(bytes memory _in) internal pure returns (bytes32) {\\n    return readBytes32(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP uint256 value into a uint256.\\n   * @param _in RLP uint256 value.\\n   * @return Decoded uint256.\\n   */\\n  function readUint256(RLPItem memory _in) internal pure returns (uint256) {\\n    return uint256(readBytes32(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP uint256 value into a uint256.\\n   * @param _in RLP uint256 value.\\n   * @return Decoded uint256.\\n   */\\n  function readUint256(bytes memory _in) internal pure returns (uint256) {\\n    return readUint256(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP bool value into a bool.\\n   * @param _in RLP bool value.\\n   * @return Decoded bool.\\n   */\\n  function readBool(RLPItem memory _in) internal pure returns (bool) {\\n    require(_in.length == 1, \\\"Invalid RLP boolean value.\\\");\\n\\n    uint256 ptr = _in.ptr;\\n    uint256 out;\\n    assembly {\\n      out := byte(0, mload(ptr))\\n    }\\n\\n    require(out == 0 || out == 1, \\\"Lib_RLPReader: Invalid RLP boolean value, must be 0 or 1\\\");\\n\\n    return out != 0;\\n  }\\n\\n  /**\\n   * Reads an RLP bool value into a bool.\\n   * @param _in RLP bool value.\\n   * @return Decoded bool.\\n   */\\n  function readBool(bytes memory _in) internal pure returns (bool) {\\n    return readBool(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP address value into a address.\\n   * @param _in RLP address value.\\n   * @return Decoded address.\\n   */\\n  function readAddress(RLPItem memory _in) internal pure returns (address) {\\n    if (_in.length == 1) {\\n      return address(0);\\n    }\\n\\n    require(_in.length == 21, \\\"Invalid RLP address value.\\\");\\n\\n    return address(uint160(readUint256(_in)));\\n  }\\n\\n  /**\\n   * Reads an RLP address value into a address.\\n   * @param _in RLP address value.\\n   * @return Decoded address.\\n   */\\n  function readAddress(bytes memory _in) internal pure returns (address) {\\n    return readAddress(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads the raw bytes of an RLP item.\\n   * @param _in RLP item to read.\\n   * @return Raw RLP bytes.\\n   */\\n  function readRawBytes(RLPItem memory _in) internal pure returns (bytes memory) {\\n    return _copy(_in);\\n  }\\n\\n  /*********************\\n   * Private Functions *\\n   *********************/\\n\\n  /**\\n   * Decodes the length of an RLP item.\\n   * @param _in RLP item to decode.\\n   * @return Offset of the encoded data.\\n   * @return Length of the encoded data.\\n   * @return RLP item type (LIST_ITEM or DATA_ITEM).\\n   */\\n  function _decodeLength(RLPItem memory _in)\\n    private\\n    pure\\n    returns (\\n      uint256,\\n      uint256,\\n      RLPItemType\\n    )\\n  {\\n    require(_in.length > 0, \\\"RLP item cannot be null.\\\");\\n\\n    uint256 ptr = _in.ptr;\\n    uint256 prefix;\\n    assembly {\\n      prefix := byte(0, mload(ptr))\\n    }\\n\\n    if (prefix < 0x7f + 1) {\\n      // Single byte.\\n\\n      return (0, 1, RLPItemType.DATA_ITEM);\\n    } else if (prefix < 0xb7 + 1) {\\n      // Short string.\\n\\n      // slither-disable-next-line variable-scope\\n      uint256 strLen = prefix - 0x80;\\n\\n      require(_in.length > strLen, \\\"Invalid RLP short string.\\\");\\n\\n      return (1, strLen, RLPItemType.DATA_ITEM);\\n    } else if (prefix < 0xbf + 1) {\\n      // Long string.\\n      uint256 lenOfStrLen = prefix - 0xb7;\\n\\n      require(_in.length > lenOfStrLen, \\\"Invalid RLP long string length.\\\");\\n\\n      uint256 strLen;\\n      assembly {\\n        // Pick out the string length.\\n        strLen := div(mload(add(ptr, 1)), exp(256, sub(32, lenOfStrLen)))\\n      }\\n\\n      require(_in.length > lenOfStrLen + strLen, \\\"Invalid RLP long string.\\\");\\n\\n      return (1 + lenOfStrLen, strLen, RLPItemType.DATA_ITEM);\\n    } else if (prefix < 0xf7 + 1) {\\n      // Short list.\\n      // slither-disable-next-line variable-scope\\n      uint256 listLen = prefix - 0xc0;\\n\\n      require(_in.length > listLen, \\\"Invalid RLP short list.\\\");\\n\\n      return (1, listLen, RLPItemType.LIST_ITEM);\\n    } else {\\n      // Long list.\\n      uint256 lenOfListLen = prefix - 0xf7;\\n\\n      require(_in.length > lenOfListLen, \\\"Invalid RLP long list length.\\\");\\n\\n      uint256 listLen;\\n      assembly {\\n        // Pick out the list length.\\n        listLen := div(mload(add(ptr, 1)), exp(256, sub(32, lenOfListLen)))\\n      }\\n\\n      require(_in.length > lenOfListLen + listLen, \\\"Invalid RLP long list.\\\");\\n\\n      return (1 + lenOfListLen, listLen, RLPItemType.LIST_ITEM);\\n    }\\n  }\\n\\n  /**\\n   * Copies the bytes from a memory location.\\n   * @param _src Pointer to the location to read from.\\n   * @param _offset Offset to start reading from.\\n   * @param _length Number of bytes to read.\\n   * @return Copied bytes.\\n   */\\n  function _copy(\\n    uint256 _src,\\n    uint256 _offset,\\n    uint256 _length\\n  ) private pure returns (bytes memory) {\\n    bytes memory out = new bytes(_length);\\n    if (out.length == 0) {\\n      return out;\\n    }\\n\\n    uint256 src = _src + _offset;\\n    uint256 dest;\\n    assembly {\\n      dest := add(out, 32)\\n    }\\n\\n    // Copy over as many complete words as we can.\\n    for (uint256 i = 0; i < _length / 32; ) {\\n      assembly {\\n        mstore(dest, mload(src))\\n      }\\n\\n      src += 32;\\n      dest += 32;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Pick out the remaining bytes.\\n    uint256 mask;\\n    unchecked {\\n      mask = 256**(32 - (_length % 32)) - 1;\\n    }\\n\\n    assembly {\\n      mstore(dest, or(and(mload(src), not(mask)), and(mload(dest), mask)))\\n    }\\n    return out;\\n  }\\n\\n  /**\\n   * Copies an RLP item into bytes.\\n   * @param _in RLP item to copy.\\n   * @return Copied bytes.\\n   */\\n  function _copy(RLPItem memory _in) private pure returns (bytes memory) {\\n    return _copy(_in.ptr, 0, _in.length);\\n  }\\n}\\n\",\"keccak256\":\"0x1770c68d08215690f873f1c8d95d8f63db546cf6b34e477a5b065379a9030e43\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/messaging/connectors/optimism/lib/SecureMerkleTrie.sol":{"SecureMerkleTrie":{"abi":[],"devdoc":{"details":"modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/trie/Lib_SecureMerkleTrie.sol","kind":"dev","methods":{},"title":"SecureMerkleTrie","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d7ab8b4ba7d5ce951442c87969227e7b8afdda49e89ae78e9b0c4d6caaaea96364736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD7 0xAB DUP12 0x4B 0xA7 0xD5 0xCE SWAP6 EQ TIMESTAMP 0xC8 PUSH26 0x69227E7B8AFDDA49E89AE78E9B0C4D6CAAAEA96364736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"328:2027:138:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;328:2027:138;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d7ab8b4ba7d5ce951442c87969227e7b8afdda49e89ae78e9b0c4d6caaaea96364736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD7 0xAB DUP12 0x4B 0xA7 0xD5 0xCE SWAP6 EQ TIMESTAMP 0xC8 PUSH26 0x69227E7B8AFDDA49E89AE78E9B0C4D6CAAAEA96364736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"328:2027:138:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_getSecureKey(bytes memory)":"infinite","get(bytes memory,bytes memory,bytes32)":"infinite","verifyInclusionProof(bytes memory,bytes memory,bytes memory,bytes32)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/trie/Lib_SecureMerkleTrie.sol\",\"kind\":\"dev\",\"methods\":{},\"title\":\"SecureMerkleTrie\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/optimism/lib/SecureMerkleTrie.sol\":\"SecureMerkleTrie\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/optimism/lib/BytesUtils.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title BytesUtils\\n *\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/utils/Lib_BytesUtils.sol\\n */\\nlibrary BytesUtils {\\n  /**********************\\n   * Internal Functions *\\n   **********************/\\n\\n  function slice(\\n    bytes memory _bytes,\\n    uint256 _start,\\n    uint256 _length\\n  ) internal pure returns (bytes memory) {\\n    require(_length + 31 >= _length, \\\"slice_overflow\\\");\\n    require(_start + _length >= _start, \\\"slice_overflow\\\");\\n    require(_bytes.length >= _start + _length, \\\"slice_outOfBounds\\\");\\n\\n    bytes memory tempBytes;\\n\\n    assembly {\\n      switch iszero(_length)\\n      case 0 {\\n        // Get a location of some free memory and store it in tempBytes as\\n        // Solidity does for memory variables.\\n        tempBytes := mload(0x40)\\n\\n        // The first word of the slice result is potentially a partial\\n        // word read from the original array. To read it, we calculate\\n        // the length of that partial word and start copying that many\\n        // bytes into the array. The first word we copy will start with\\n        // data we don't care about, but the last `lengthmod` bytes will\\n        // land at the beginning of the contents of the new array. When\\n        // we're done copying, we overwrite the full first word with\\n        // the actual length of the slice.\\n        let lengthmod := and(_length, 31)\\n\\n        // The multiplication in the next line is necessary\\n        // because when slicing multiples of 32 bytes (lengthmod == 0)\\n        // the following copy loop was copying the origin's length\\n        // and then ending prematurely not copying everything it should.\\n        let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)))\\n        let end := add(mc, _length)\\n\\n        for {\\n          // The multiplication in the next line has the same exact purpose\\n          // as the one above.\\n          let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start)\\n        } lt(mc, end) {\\n          mc := add(mc, 0x20)\\n          cc := add(cc, 0x20)\\n        } {\\n          mstore(mc, mload(cc))\\n        }\\n\\n        mstore(tempBytes, _length)\\n\\n        //update free-memory pointer\\n        //allocating the array padded to 32 bytes like the compiler does now\\n        mstore(0x40, and(add(mc, 31), not(31)))\\n      }\\n      //if we want a zero-length slice let's just return a zero-length array\\n      default {\\n        tempBytes := mload(0x40)\\n\\n        //zero out the 32 bytes slice we are about to return\\n        //we need to do it because Solidity does not garbage collect\\n        mstore(tempBytes, 0)\\n\\n        mstore(0x40, add(tempBytes, 0x20))\\n      }\\n    }\\n\\n    return tempBytes;\\n  }\\n\\n  function slice(bytes memory _bytes, uint256 _start) internal pure returns (bytes memory) {\\n    if (_start >= _bytes.length) {\\n      return bytes(\\\"\\\");\\n    }\\n\\n    return slice(_bytes, _start, _bytes.length - _start);\\n  }\\n\\n  function toBytes32(bytes memory _bytes) internal pure returns (bytes32) {\\n    if (_bytes.length < 32) {\\n      bytes32 ret;\\n      assembly {\\n        ret := mload(add(_bytes, 32))\\n      }\\n      return ret;\\n    }\\n\\n    return abi.decode(_bytes, (bytes32)); // will truncate if input length > 32 bytes\\n  }\\n\\n  function toUint256(bytes memory _bytes) internal pure returns (uint256) {\\n    return uint256(toBytes32(_bytes));\\n  }\\n\\n  function toNibbles(bytes memory _bytes) internal pure returns (bytes memory) {\\n    bytes memory nibbles = new bytes(_bytes.length * 2);\\n\\n    uint256 len = _bytes.length;\\n    for (uint256 i = 0; i < len; ) {\\n      nibbles[i * 2] = _bytes[i] >> 4;\\n      nibbles[i * 2 + 1] = bytes1(uint8(_bytes[i]) % 16);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    return nibbles;\\n  }\\n\\n  function fromNibbles(bytes memory _bytes) internal pure returns (bytes memory) {\\n    bytes memory ret = new bytes(_bytes.length / 2);\\n\\n    uint256 len = ret.length;\\n    for (uint256 i = 0; i < len; ) {\\n      ret[i] = (_bytes[i * 2] << 4) | (_bytes[i * 2 + 1]);\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    return ret;\\n  }\\n\\n  function equal(bytes memory _bytes, bytes memory _other) internal pure returns (bool) {\\n    return keccak256(_bytes) == keccak256(_other);\\n  }\\n}\\n\",\"keccak256\":\"0x81feab05c6cadccdf548b5cc8bbb8e5afdbb788f5215f1cc477e4ee877665578\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/lib/MerkleTrie.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/* Library Imports */\\nimport {BytesUtils} from \\\"./BytesUtils.sol\\\";\\nimport {RLPReader} from \\\"./RLPReader.sol\\\";\\n\\n/**\\n * @title MerkleTrie\\n *\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/trie/Lib_MerkleTrie.sol\\n */\\nlibrary MerkleTrie {\\n  /*******************\\n   * Data Structures *\\n   *******************/\\n\\n  enum NodeType {\\n    BranchNode,\\n    ExtensionNode,\\n    LeafNode\\n  }\\n\\n  struct TrieNode {\\n    bytes encoded;\\n    RLPReader.RLPItem[] decoded;\\n  }\\n\\n  /**********************\\n   * Contract Constants *\\n   **********************/\\n\\n  // TREE_RADIX determines the number of elements per branch node.\\n  uint256 constant TREE_RADIX = 16;\\n  // Branch nodes have TREE_RADIX elements plus an additional `value` slot.\\n  uint256 constant BRANCH_NODE_LENGTH = TREE_RADIX + 1;\\n  // Leaf nodes and extension nodes always have two elements, a `path` and a `value`.\\n  uint256 constant LEAF_OR_EXTENSION_NODE_LENGTH = 2;\\n\\n  // Prefixes are prepended to the `path` within a leaf or extension node and\\n  // allow us to differentiate between the two node types. `ODD` or `EVEN` is\\n  // determined by the number of nibbles within the unprefixed `path`. If the\\n  // number of nibbles if even, we need to insert an extra padding nibble so\\n  // the resulting prefixed `path` has an even number of nibbles.\\n  uint8 constant PREFIX_EXTENSION_EVEN = 0;\\n  uint8 constant PREFIX_EXTENSION_ODD = 1;\\n  uint8 constant PREFIX_LEAF_EVEN = 2;\\n  uint8 constant PREFIX_LEAF_ODD = 3;\\n\\n  // Just a utility constant. RLP represents `NULL` as 0x80.\\n  bytes1 constant RLP_NULL = bytes1(0x80);\\n\\n  /**********************\\n   * Internal Functions *\\n   **********************/\\n\\n  /**\\n   * @notice Verifies a proof that a given key/value pair is present in the\\n   * Merkle trie.\\n   * @param _key Key of the node to search for, as a hex string.\\n   * @param _value Value of the node to search for, as a hex string.\\n   * @param _proof Merkle trie inclusion proof for the desired node. Unlike\\n   * traditional Merkle trees, this proof is executed top-down and consists\\n   * of a list of RLP-encoded nodes that make a path down to the target node.\\n   * @param _root Known root of the Merkle trie. Used to verify that the\\n   * included proof is correctly constructed.\\n   * @return _verified `true` if the k/v pair exists in the trie, `false` otherwise.\\n   */\\n  function verifyInclusionProof(\\n    bytes memory _key,\\n    bytes memory _value,\\n    bytes memory _proof,\\n    bytes32 _root\\n  ) internal pure returns (bool _verified) {\\n    (bool exists, bytes memory value) = get(_key, _proof, _root);\\n\\n    return (exists && BytesUtils.equal(_value, value));\\n  }\\n\\n  /**\\n   * @notice Retrieves the value associated with a given key.\\n   * @param _key Key to search for, as hex bytes.\\n   * @param _proof Merkle trie inclusion proof for the key.\\n   * @param _root Known root of the Merkle trie.\\n   * @return _exists Whether or not the key exists.\\n   * @return _value Value of the key if it exists.\\n   */\\n  function get(\\n    bytes memory _key,\\n    bytes memory _proof,\\n    bytes32 _root\\n  ) internal pure returns (bool _exists, bytes memory _value) {\\n    TrieNode[] memory proof = _parseProof(_proof);\\n    (uint256 pathLength, bytes memory keyRemainder, bool isFinalNode) = _walkNodePath(proof, _key, _root);\\n\\n    bool exists = keyRemainder.length == 0;\\n\\n    require(exists || isFinalNode, \\\"Provided proof is invalid.\\\");\\n\\n    bytes memory value = exists ? _getNodeValue(proof[pathLength - 1]) : bytes(\\\"\\\");\\n\\n    return (exists, value);\\n  }\\n\\n  /*********************\\n   * Private Functions *\\n   *********************/\\n\\n  /**\\n   * @notice Walks through a proof using a provided key.\\n   * @param _proof Inclusion proof to walk through.\\n   * @param _key Key to use for the walk.\\n   * @param _root Known root of the trie.\\n   * @return _pathLength Length of the final path\\n   * @return _keyRemainder Portion of the key remaining after the walk.\\n   * @return _isFinalNode Whether or not we've hit a dead end.\\n   */\\n  function _walkNodePath(\\n    TrieNode[] memory _proof,\\n    bytes memory _key,\\n    bytes32 _root\\n  )\\n    private\\n    pure\\n    returns (\\n      uint256 _pathLength,\\n      bytes memory _keyRemainder,\\n      bool _isFinalNode\\n    )\\n  {\\n    uint256 pathLength = 0;\\n    bytes memory key = BytesUtils.toNibbles(_key);\\n\\n    bytes32 currentNodeID = _root;\\n    uint256 currentKeyIndex = 0;\\n    uint256 currentKeyIncrement = 0;\\n    TrieNode memory currentNode;\\n\\n    // Proof is top-down, so we start at the first element (root).\\n    uint256 len = _proof.length;\\n    for (uint256 i = 0; i < len; ) {\\n      currentNode = _proof[i];\\n      currentKeyIndex += currentKeyIncrement;\\n\\n      // Keep track of the proof elements we actually need.\\n      // It's expensive to resize arrays, so this simply reduces gas costs.\\n      pathLength += 1;\\n\\n      if (currentKeyIndex == 0) {\\n        // First proof element is always the root node.\\n        require(keccak256(currentNode.encoded) == currentNodeID, \\\"Invalid root hash\\\");\\n      } else if (currentNode.encoded.length > 32 - 1) {\\n        // Nodes 32 bytes or larger are hashed inside branch nodes.\\n        require(keccak256(currentNode.encoded) == currentNodeID, \\\"Invalid large internal hash\\\");\\n      } else {\\n        // Nodes smaller than 31 bytes aren't hashed.\\n        require(BytesUtils.toBytes32(currentNode.encoded) == currentNodeID, \\\"Invalid internal node hash\\\");\\n      }\\n\\n      // unreachable code if it's below the if statement under this\\n      unchecked {\\n        ++i;\\n      }\\n\\n      if (currentNode.decoded.length == BRANCH_NODE_LENGTH) {\\n        if (currentKeyIndex == key.length) {\\n          // We've hit the end of the key\\n          // meaning the value should be within this branch node.\\n          break;\\n        } else {\\n          // We're not at the end of the key yet.\\n          // Figure out what the next node ID should be and continue.\\n          uint8 branchKey = uint8(key[currentKeyIndex]);\\n          RLPReader.RLPItem memory nextNode = currentNode.decoded[branchKey];\\n          currentNodeID = _getNodeID(nextNode);\\n          currentKeyIncrement = 1;\\n          continue;\\n        }\\n      } else if (currentNode.decoded.length == LEAF_OR_EXTENSION_NODE_LENGTH) {\\n        bytes memory path = _getNodePath(currentNode);\\n        uint8 prefix = uint8(path[0]);\\n        uint8 offset = 2 - (prefix % 2);\\n        bytes memory pathRemainder = BytesUtils.slice(path, offset);\\n        bytes memory keyRemainder = BytesUtils.slice(key, currentKeyIndex);\\n        uint256 sharedNibbleLength = _getSharedNibbleLength(pathRemainder, keyRemainder);\\n\\n        if (prefix == PREFIX_LEAF_EVEN || prefix == PREFIX_LEAF_ODD) {\\n          if (pathRemainder.length == sharedNibbleLength && keyRemainder.length == sharedNibbleLength) {\\n            // The key within this leaf matches our key exactly.\\n            // Increment the key index to reflect that we have no remainder.\\n            currentKeyIndex += sharedNibbleLength;\\n          }\\n\\n          // We've hit a leaf node, so our next node should be NULL.\\n          currentNodeID = bytes32(RLP_NULL);\\n          break;\\n        } else if (prefix == PREFIX_EXTENSION_EVEN || prefix == PREFIX_EXTENSION_ODD) {\\n          if (sharedNibbleLength != pathRemainder.length) {\\n            // Our extension node is not identical to the remainder.\\n            // We've hit the end of this path\\n            // updates will need to modify this extension.\\n            currentNodeID = bytes32(RLP_NULL);\\n            break;\\n          } else {\\n            // Our extension shares some nibbles.\\n            // Carry on to the next node.\\n            currentNodeID = _getNodeID(currentNode.decoded[1]);\\n            currentKeyIncrement = sharedNibbleLength;\\n            continue;\\n          }\\n        } else {\\n          revert(\\\"Received a node with an unknown prefix\\\");\\n        }\\n      } else {\\n        revert(\\\"Received an unparseable node.\\\");\\n      }\\n    }\\n\\n    // If our node ID is NULL, then we're at a dead end.\\n    bool isFinalNode = currentNodeID == bytes32(RLP_NULL);\\n    return (pathLength, BytesUtils.slice(key, currentKeyIndex), isFinalNode);\\n  }\\n\\n  /**\\n   * @notice Parses an RLP-encoded proof into something more useful.\\n   * @param _proof RLP-encoded proof to parse.\\n   * @return _parsed Proof parsed into easily accessible structs.\\n   */\\n  function _parseProof(bytes memory _proof) private pure returns (TrieNode[] memory _parsed) {\\n    RLPReader.RLPItem[] memory nodes = RLPReader.readList(_proof);\\n    TrieNode[] memory proof = new TrieNode[](nodes.length);\\n\\n    uint256 len = nodes.length;\\n    for (uint256 i = 0; i < len; ) {\\n      bytes memory encoded = RLPReader.readBytes(nodes[i]);\\n      proof[i] = TrieNode({encoded: encoded, decoded: RLPReader.readList(encoded)});\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    return proof;\\n  }\\n\\n  /**\\n   * @notice Picks out the ID for a node. Node ID is referred to as the\\n   * \\\"hash\\\" within the specification, but nodes < 32 bytes are not actually\\n   * hashed.\\n   * @param _node Node to pull an ID for.\\n   * @return _nodeID ID for the node, depending on the size of its contents.\\n   */\\n  function _getNodeID(RLPReader.RLPItem memory _node) private pure returns (bytes32 _nodeID) {\\n    bytes memory nodeID;\\n\\n    if (_node.length < 32) {\\n      // Nodes smaller than 32 bytes are RLP encoded.\\n      nodeID = RLPReader.readRawBytes(_node);\\n    } else {\\n      // Nodes 32 bytes or larger are hashed.\\n      nodeID = RLPReader.readBytes(_node);\\n    }\\n\\n    return BytesUtils.toBytes32(nodeID);\\n  }\\n\\n  /**\\n   * @notice Gets the path for a leaf or extension node.\\n   * @param _node Node to get a path for.\\n   * @return _path Node path, converted to an array of nibbles.\\n   */\\n  function _getNodePath(TrieNode memory _node) private pure returns (bytes memory _path) {\\n    return BytesUtils.toNibbles(RLPReader.readBytes(_node.decoded[0]));\\n  }\\n\\n  /**\\n   * @notice Gets the path for a node.\\n   * @param _node Node to get a value for.\\n   * @return _value Node value, as hex bytes.\\n   */\\n  function _getNodeValue(TrieNode memory _node) private pure returns (bytes memory _value) {\\n    return RLPReader.readBytes(_node.decoded[_node.decoded.length - 1]);\\n  }\\n\\n  /**\\n   * @notice Utility; determines the number of nibbles shared between two\\n   * nibble arrays.\\n   * @param _a First nibble array.\\n   * @param _b Second nibble array.\\n   * @return _shared Number of shared nibbles.\\n   */\\n  function _getSharedNibbleLength(bytes memory _a, bytes memory _b) private pure returns (uint256 _shared) {\\n    uint256 i = 0;\\n    while (_a.length > i && _b.length > i && _a[i] == _b[i]) {\\n      i++;\\n    }\\n    return i;\\n  }\\n}\\n\",\"keccak256\":\"0xead186b4bbb39d904ec1ecdc418893465831dba9a1ed088c17e673df6df9198a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/lib/RLPReader.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title RLPReader\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/rlp/Lib_RLPReader.sol\\n */\\nlibrary RLPReader {\\n  /*************\\n   * Constants *\\n   *************/\\n\\n  uint256 internal constant MAX_LIST_LENGTH = 32;\\n\\n  /*********\\n   * Enums *\\n   *********/\\n\\n  enum RLPItemType {\\n    DATA_ITEM,\\n    LIST_ITEM\\n  }\\n\\n  /***********\\n   * Structs *\\n   ***********/\\n\\n  struct RLPItem {\\n    uint256 length;\\n    uint256 ptr;\\n  }\\n\\n  /**********************\\n   * Internal Functions *\\n   **********************/\\n\\n  /**\\n   * Converts bytes to a reference to memory position and length.\\n   * @param _in Input bytes to convert.\\n   * @return Output memory reference.\\n   */\\n  function toRLPItem(bytes memory _in) internal pure returns (RLPItem memory) {\\n    uint256 ptr;\\n    assembly {\\n      ptr := add(_in, 32)\\n    }\\n\\n    return RLPItem({length: _in.length, ptr: ptr});\\n  }\\n\\n  /**\\n   * Reads an RLP list value into a list of RLP items.\\n   * @param _in RLP list value.\\n   * @return Decoded RLP list items.\\n   */\\n  function readList(RLPItem memory _in) internal pure returns (RLPItem[] memory) {\\n    (uint256 listOffset, , RLPItemType itemType) = _decodeLength(_in);\\n\\n    require(itemType == RLPItemType.LIST_ITEM, \\\"Invalid RLP list value.\\\");\\n\\n    // Solidity in-memory arrays can't be increased in size, but *can* be decreased in size by\\n    // writing to the length. Since we can't know the number of RLP items without looping over\\n    // the entire input, we'd have to loop twice to accurately size this array. It's easier to\\n    // simply set a reasonable maximum list length and decrease the size before we finish.\\n    RLPItem[] memory out = new RLPItem[](MAX_LIST_LENGTH);\\n\\n    uint256 itemCount = 0;\\n    uint256 offset = listOffset;\\n    while (offset < _in.length) {\\n      require(itemCount < MAX_LIST_LENGTH, \\\"Provided RLP list exceeds max list length.\\\");\\n\\n      (uint256 itemOffset, uint256 itemLength, ) = _decodeLength(\\n        RLPItem({length: _in.length - offset, ptr: _in.ptr + offset})\\n      );\\n\\n      out[itemCount] = RLPItem({length: itemLength + itemOffset, ptr: _in.ptr + offset});\\n\\n      itemCount += 1;\\n      offset += itemOffset + itemLength;\\n    }\\n\\n    // Decrease the array size to match the actual item count.\\n    assembly {\\n      mstore(out, itemCount)\\n    }\\n\\n    return out;\\n  }\\n\\n  /**\\n   * Reads an RLP list value into a list of RLP items.\\n   * @param _in RLP list value.\\n   * @return Decoded RLP list items.\\n   */\\n  function readList(bytes memory _in) internal pure returns (RLPItem[] memory) {\\n    return readList(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP bytes value into bytes.\\n   * @param _in RLP bytes value.\\n   * @return Decoded bytes.\\n   */\\n  function readBytes(RLPItem memory _in) internal pure returns (bytes memory) {\\n    (uint256 itemOffset, uint256 itemLength, RLPItemType itemType) = _decodeLength(_in);\\n\\n    require(itemType == RLPItemType.DATA_ITEM, \\\"Invalid RLP bytes value.\\\");\\n\\n    return _copy(_in.ptr, itemOffset, itemLength);\\n  }\\n\\n  /**\\n   * Reads an RLP bytes value into bytes.\\n   * @param _in RLP bytes value.\\n   * @return Decoded bytes.\\n   */\\n  function readBytes(bytes memory _in) internal pure returns (bytes memory) {\\n    return readBytes(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP string value into a string.\\n   * @param _in RLP string value.\\n   * @return Decoded string.\\n   */\\n  function readString(RLPItem memory _in) internal pure returns (string memory) {\\n    return string(readBytes(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP string value into a string.\\n   * @param _in RLP string value.\\n   * @return Decoded string.\\n   */\\n  function readString(bytes memory _in) internal pure returns (string memory) {\\n    return readString(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP bytes32 value into a bytes32.\\n   * @param _in RLP bytes32 value.\\n   * @return Decoded bytes32.\\n   */\\n  function readBytes32(RLPItem memory _in) internal pure returns (bytes32) {\\n    // instead of <= 33\\n    require(_in.length < 33 + 1, \\\"Invalid RLP bytes32 value.\\\");\\n\\n    (uint256 itemOffset, uint256 itemLength, RLPItemType itemType) = _decodeLength(_in);\\n\\n    require(itemType == RLPItemType.DATA_ITEM, \\\"Invalid RLP bytes32 value.\\\");\\n\\n    uint256 ptr = _in.ptr + itemOffset;\\n    bytes32 out;\\n    assembly {\\n      out := mload(ptr)\\n\\n      // Shift the bytes over to match the item size.\\n      if lt(itemLength, 32) {\\n        out := div(out, exp(256, sub(32, itemLength)))\\n      }\\n    }\\n\\n    return out;\\n  }\\n\\n  /**\\n   * Reads an RLP bytes32 value into a bytes32.\\n   * @param _in RLP bytes32 value.\\n   * @return Decoded bytes32.\\n   */\\n  function readBytes32(bytes memory _in) internal pure returns (bytes32) {\\n    return readBytes32(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP uint256 value into a uint256.\\n   * @param _in RLP uint256 value.\\n   * @return Decoded uint256.\\n   */\\n  function readUint256(RLPItem memory _in) internal pure returns (uint256) {\\n    return uint256(readBytes32(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP uint256 value into a uint256.\\n   * @param _in RLP uint256 value.\\n   * @return Decoded uint256.\\n   */\\n  function readUint256(bytes memory _in) internal pure returns (uint256) {\\n    return readUint256(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP bool value into a bool.\\n   * @param _in RLP bool value.\\n   * @return Decoded bool.\\n   */\\n  function readBool(RLPItem memory _in) internal pure returns (bool) {\\n    require(_in.length == 1, \\\"Invalid RLP boolean value.\\\");\\n\\n    uint256 ptr = _in.ptr;\\n    uint256 out;\\n    assembly {\\n      out := byte(0, mload(ptr))\\n    }\\n\\n    require(out == 0 || out == 1, \\\"Lib_RLPReader: Invalid RLP boolean value, must be 0 or 1\\\");\\n\\n    return out != 0;\\n  }\\n\\n  /**\\n   * Reads an RLP bool value into a bool.\\n   * @param _in RLP bool value.\\n   * @return Decoded bool.\\n   */\\n  function readBool(bytes memory _in) internal pure returns (bool) {\\n    return readBool(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads an RLP address value into a address.\\n   * @param _in RLP address value.\\n   * @return Decoded address.\\n   */\\n  function readAddress(RLPItem memory _in) internal pure returns (address) {\\n    if (_in.length == 1) {\\n      return address(0);\\n    }\\n\\n    require(_in.length == 21, \\\"Invalid RLP address value.\\\");\\n\\n    return address(uint160(readUint256(_in)));\\n  }\\n\\n  /**\\n   * Reads an RLP address value into a address.\\n   * @param _in RLP address value.\\n   * @return Decoded address.\\n   */\\n  function readAddress(bytes memory _in) internal pure returns (address) {\\n    return readAddress(toRLPItem(_in));\\n  }\\n\\n  /**\\n   * Reads the raw bytes of an RLP item.\\n   * @param _in RLP item to read.\\n   * @return Raw RLP bytes.\\n   */\\n  function readRawBytes(RLPItem memory _in) internal pure returns (bytes memory) {\\n    return _copy(_in);\\n  }\\n\\n  /*********************\\n   * Private Functions *\\n   *********************/\\n\\n  /**\\n   * Decodes the length of an RLP item.\\n   * @param _in RLP item to decode.\\n   * @return Offset of the encoded data.\\n   * @return Length of the encoded data.\\n   * @return RLP item type (LIST_ITEM or DATA_ITEM).\\n   */\\n  function _decodeLength(RLPItem memory _in)\\n    private\\n    pure\\n    returns (\\n      uint256,\\n      uint256,\\n      RLPItemType\\n    )\\n  {\\n    require(_in.length > 0, \\\"RLP item cannot be null.\\\");\\n\\n    uint256 ptr = _in.ptr;\\n    uint256 prefix;\\n    assembly {\\n      prefix := byte(0, mload(ptr))\\n    }\\n\\n    if (prefix < 0x7f + 1) {\\n      // Single byte.\\n\\n      return (0, 1, RLPItemType.DATA_ITEM);\\n    } else if (prefix < 0xb7 + 1) {\\n      // Short string.\\n\\n      // slither-disable-next-line variable-scope\\n      uint256 strLen = prefix - 0x80;\\n\\n      require(_in.length > strLen, \\\"Invalid RLP short string.\\\");\\n\\n      return (1, strLen, RLPItemType.DATA_ITEM);\\n    } else if (prefix < 0xbf + 1) {\\n      // Long string.\\n      uint256 lenOfStrLen = prefix - 0xb7;\\n\\n      require(_in.length > lenOfStrLen, \\\"Invalid RLP long string length.\\\");\\n\\n      uint256 strLen;\\n      assembly {\\n        // Pick out the string length.\\n        strLen := div(mload(add(ptr, 1)), exp(256, sub(32, lenOfStrLen)))\\n      }\\n\\n      require(_in.length > lenOfStrLen + strLen, \\\"Invalid RLP long string.\\\");\\n\\n      return (1 + lenOfStrLen, strLen, RLPItemType.DATA_ITEM);\\n    } else if (prefix < 0xf7 + 1) {\\n      // Short list.\\n      // slither-disable-next-line variable-scope\\n      uint256 listLen = prefix - 0xc0;\\n\\n      require(_in.length > listLen, \\\"Invalid RLP short list.\\\");\\n\\n      return (1, listLen, RLPItemType.LIST_ITEM);\\n    } else {\\n      // Long list.\\n      uint256 lenOfListLen = prefix - 0xf7;\\n\\n      require(_in.length > lenOfListLen, \\\"Invalid RLP long list length.\\\");\\n\\n      uint256 listLen;\\n      assembly {\\n        // Pick out the list length.\\n        listLen := div(mload(add(ptr, 1)), exp(256, sub(32, lenOfListLen)))\\n      }\\n\\n      require(_in.length > lenOfListLen + listLen, \\\"Invalid RLP long list.\\\");\\n\\n      return (1 + lenOfListLen, listLen, RLPItemType.LIST_ITEM);\\n    }\\n  }\\n\\n  /**\\n   * Copies the bytes from a memory location.\\n   * @param _src Pointer to the location to read from.\\n   * @param _offset Offset to start reading from.\\n   * @param _length Number of bytes to read.\\n   * @return Copied bytes.\\n   */\\n  function _copy(\\n    uint256 _src,\\n    uint256 _offset,\\n    uint256 _length\\n  ) private pure returns (bytes memory) {\\n    bytes memory out = new bytes(_length);\\n    if (out.length == 0) {\\n      return out;\\n    }\\n\\n    uint256 src = _src + _offset;\\n    uint256 dest;\\n    assembly {\\n      dest := add(out, 32)\\n    }\\n\\n    // Copy over as many complete words as we can.\\n    for (uint256 i = 0; i < _length / 32; ) {\\n      assembly {\\n        mstore(dest, mload(src))\\n      }\\n\\n      src += 32;\\n      dest += 32;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // Pick out the remaining bytes.\\n    uint256 mask;\\n    unchecked {\\n      mask = 256**(32 - (_length % 32)) - 1;\\n    }\\n\\n    assembly {\\n      mstore(dest, or(and(mload(src), not(mask)), and(mload(dest), mask)))\\n    }\\n    return out;\\n  }\\n\\n  /**\\n   * Copies an RLP item into bytes.\\n   * @param _in RLP item to copy.\\n   * @return Copied bytes.\\n   */\\n  function _copy(RLPItem memory _in) private pure returns (bytes memory) {\\n    return _copy(_in.ptr, 0, _in.length);\\n  }\\n}\\n\",\"keccak256\":\"0x1770c68d08215690f873f1c8d95d8f63db546cf6b34e477a5b065379a9030e43\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/lib/SecureMerkleTrie.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/* Library Imports */\\nimport {MerkleTrie} from \\\"./MerkleTrie.sol\\\";\\n\\n/**\\n * @title SecureMerkleTrie\\n *\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/trie/Lib_SecureMerkleTrie.sol\\n */\\nlibrary SecureMerkleTrie {\\n  /**********************\\n   * Internal Functions *\\n   **********************/\\n\\n  /**\\n   * @notice Verifies a proof that a given key/value pair is present in the\\n   * Merkle trie.\\n   * @param _key Key of the node to search for, as a hex string.\\n   * @param _value Value of the node to search for, as a hex string.\\n   * @param _proof Merkle trie inclusion proof for the desired node. Unlike\\n   * traditional Merkle trees, this proof is executed top-down and consists\\n   * of a list of RLP-encoded nodes that make a path down to the target node.\\n   * @param _root Known root of the Merkle trie. Used to verify that the\\n   * included proof is correctly constructed.\\n   * @return _verified `true` if the k/v pair exists in the trie, `false` otherwise.\\n   */\\n  function verifyInclusionProof(\\n    bytes memory _key,\\n    bytes memory _value,\\n    bytes memory _proof,\\n    bytes32 _root\\n  ) internal pure returns (bool _verified) {\\n    bytes memory key = _getSecureKey(_key);\\n    return MerkleTrie.verifyInclusionProof(key, _value, _proof, _root);\\n  }\\n\\n  /**\\n   * @notice Retrieves the value associated with a given key.\\n   * @param _key Key to search for, as hex bytes.\\n   * @param _proof Merkle trie inclusion proof for the key.\\n   * @param _root Known root of the Merkle trie.\\n   * @return _exists Whether or not the key exists.\\n   * @return _value Value of the key if it exists.\\n   */\\n  function get(\\n    bytes memory _key,\\n    bytes memory _proof,\\n    bytes32 _root\\n  ) internal pure returns (bool _exists, bytes memory _value) {\\n    bytes memory key = _getSecureKey(_key);\\n    return MerkleTrie.get(key, _proof, _root);\\n  }\\n\\n  /*********************\\n   * Private Functions *\\n   *********************/\\n\\n  /**\\n   * Computes the secure counterpart to a key.\\n   * @param _key Key to get a secure key from.\\n   * @return _secureKey Secure version of the key.\\n   */\\n  function _getSecureKey(bytes memory _key) private pure returns (bytes memory _secureKey) {\\n    return abi.encodePacked(keccak256(_key));\\n  }\\n}\\n\",\"keccak256\":\"0x83dec50ac7d2349f24462c9f2d1928f3a42503ea7e8463757b843d497ea64959\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/messaging/connectors/polygon/PolygonHubConnector.sol":{"PolygonHubConnector":{"abi":[{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"uint32","name":"_mirrorDomain","type":"uint32"},{"internalType":"address","name":"_amb","type":"address"},{"internalType":"address","name":"_rootManager","type":"address"},{"internalType":"address","name":"_mirrorConnector","type":"address"},{"internalType":"address","name":"_checkPointManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Connector__processMessage_notUsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"encodedData","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"current","type":"address"}],"name":"MirrorConnectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"mirrorDomain","type":"uint32"},{"indexed":false,"internalType":"address","name":"amb","type":"address"},{"indexed":false,"internalType":"address","name":"rootManager","type":"address"},{"indexed":false,"internalType":"address","name":"mirrorConnector","type":"address"}],"name":"NewConnector","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"AMB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIRROR_DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SEND_MESSAGE_EVENT_SIG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkpointManager","outputs":[{"internalType":"contract ICheckpointManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fxChildTunnel","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fxRoot","outputs":[{"internalType":"contract IFxStateSender","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mirrorConnector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"processMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"processedExits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"inputData","type":"bytes"}],"name":"receiveMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_encodedData","type":"bytes"}],"name":"sendMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_mirrorConnector","type":"address"}],"name":"setMirrorConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_expected","type":"address"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"processMessage(bytes)":{"details":"This is called by AMBs to process messages originating from mirror connector"},"receiveMessage(bytes)":{"details":"This function verifies if the transaction actually happened on child chain","params":{"inputData":"RLP encoded data of the reference tx containing following list of fields  0 - headerNumber - Checkpoint header block number containing the reference tx  1 - blockProof - Proof that the block header (in the child chain) is a leaf in the submitted merkle root  2 - blockNumber - Block number containing the reference tx on child chain  3 - blockTime - Reference tx block time  4 - txRoot - Transactions root of block  5 - receiptRoot - Receipts root of block  6 - receipt - Receipt of the reference transaction  7 - receiptProof - Merkle proof of the reference receipt  8 - branchMask - 32 bits denoting the path of receipt in merkle tree  9 - receiptLogIndex - Log Index to read from the receipt"}},"sendMessage(bytes,bytes)":{"details":"This is called by the root manager *only* on mainnet to propagate the aggregate root"}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_39152":{"entryPoint":null,"id":39152,"parameterSlots":5,"returnSlots":0},"@_39396":{"entryPoint":null,"id":39396,"parameterSlots":5,"returnSlots":0},"@_44748":{"entryPoint":null,"id":44748,"parameterSlots":6,"returnSlots":0},"@_47117":{"entryPoint":null,"id":47117,"parameterSlots":2,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":579,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_44829":{"entryPoint":543,"id":44829,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":442,"id":49908,"parameterSlots":1,"returnSlots":0},"@setFxChildTunnel_47137":{"entryPoint":684,"id":47137,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":854,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_address_fromMemory":{"entryPoint":878,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_uint32_fromMemory":{"entryPoint":828,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1dc310af12cba7b1018a7df66f4a5d342cf94c76291e27400d58d59cb64eb899__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2798:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"73:108:181","statements":[{"nodeType":"YulAssignment","src":"83:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"98:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"92:5:181"},"nodeType":"YulFunctionCall","src":"92:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"83:5:181"}]},{"body":{"nodeType":"YulBlock","src":"159:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"168:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"171:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"161:6:181"},"nodeType":"YulFunctionCall","src":"161:12:181"},"nodeType":"YulExpressionStatement","src":"161:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"127:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"138:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"145:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"134:3:181"},"nodeType":"YulFunctionCall","src":"134:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"124:2:181"},"nodeType":"YulFunctionCall","src":"124:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"117:6:181"},"nodeType":"YulFunctionCall","src":"117:41:181"},"nodeType":"YulIf","src":"114:61:181"}]},"name":"abi_decode_uint32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"52:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"63:5:181","type":""}],"src":"14:167:181"},{"body":{"nodeType":"YulBlock","src":"246:117:181","statements":[{"nodeType":"YulAssignment","src":"256:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"271:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"265:5:181"},"nodeType":"YulFunctionCall","src":"265:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"256:5:181"}]},{"body":{"nodeType":"YulBlock","src":"341:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"350:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"353:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"343:6:181"},"nodeType":"YulFunctionCall","src":"343:12:181"},"nodeType":"YulExpressionStatement","src":"343:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"300:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"311:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"326:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"331:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"322:3:181"},"nodeType":"YulFunctionCall","src":"322:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"335:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"318:3:181"},"nodeType":"YulFunctionCall","src":"318:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"307:3:181"},"nodeType":"YulFunctionCall","src":"307:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"297:2:181"},"nodeType":"YulFunctionCall","src":"297:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"290:6:181"},"nodeType":"YulFunctionCall","src":"290:50:181"},"nodeType":"YulIf","src":"287:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"225:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"236:5:181","type":""}],"src":"186:177:181"},{"body":{"nodeType":"YulBlock","src":"532:468:181","statements":[{"body":{"nodeType":"YulBlock","src":"579:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"588:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"591:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"581:6:181"},"nodeType":"YulFunctionCall","src":"581:12:181"},"nodeType":"YulExpressionStatement","src":"581:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"553:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"562:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"549:3:181"},"nodeType":"YulFunctionCall","src":"549:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"574:3:181","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"545:3:181"},"nodeType":"YulFunctionCall","src":"545:33:181"},"nodeType":"YulIf","src":"542:53:181"},{"nodeType":"YulAssignment","src":"604:49:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"643:9:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"614:28:181"},"nodeType":"YulFunctionCall","src":"614:39:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"604:6:181"}]},{"nodeType":"YulAssignment","src":"662:58:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"705:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"716:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"701:3:181"},"nodeType":"YulFunctionCall","src":"701:18:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"672:28:181"},"nodeType":"YulFunctionCall","src":"672:48:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"662:6:181"}]},{"nodeType":"YulAssignment","src":"729:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"773:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"784:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"769:3:181"},"nodeType":"YulFunctionCall","src":"769:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"739:29:181"},"nodeType":"YulFunctionCall","src":"739:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"729:6:181"}]},{"nodeType":"YulAssignment","src":"797:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"841:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"852:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"837:3:181"},"nodeType":"YulFunctionCall","src":"837:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"807:29:181"},"nodeType":"YulFunctionCall","src":"807:49:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"797:6:181"}]},{"nodeType":"YulAssignment","src":"865:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"909:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"920:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"905:3:181"},"nodeType":"YulFunctionCall","src":"905:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"875:29:181"},"nodeType":"YulFunctionCall","src":"875:50:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"865:6:181"}]},{"nodeType":"YulAssignment","src":"934:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"978:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"989:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"974:3:181"},"nodeType":"YulFunctionCall","src":"974:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"944:29:181"},"nodeType":"YulFunctionCall","src":"944:50:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"934:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"458:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"469:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"481:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"489:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"497:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"505:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"513:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"521:6:181","type":""}],"src":"368:632:181"},{"body":{"nodeType":"YulBlock","src":"1179:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1196:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1207:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1189:6:181"},"nodeType":"YulFunctionCall","src":"1189:21:181"},"nodeType":"YulExpressionStatement","src":"1189:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1230:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1241:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1226:3:181"},"nodeType":"YulFunctionCall","src":"1226:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1246:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1219:6:181"},"nodeType":"YulFunctionCall","src":"1219:30:181"},"nodeType":"YulExpressionStatement","src":"1219:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1269:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1280:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1265:3:181"},"nodeType":"YulFunctionCall","src":"1265:18:181"},{"hexValue":"656d70747920646f6d61696e","kind":"string","nodeType":"YulLiteral","src":"1285:14:181","type":"","value":"empty domain"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1258:6:181"},"nodeType":"YulFunctionCall","src":"1258:42:181"},"nodeType":"YulExpressionStatement","src":"1258:42:181"},{"nodeType":"YulAssignment","src":"1309:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1321:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1332:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1317:3:181"},"nodeType":"YulFunctionCall","src":"1317:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1309:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1156:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1170:4:181","type":""}],"src":"1005:336:181"},{"body":{"nodeType":"YulBlock","src":"1520:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1537:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1548:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1530:6:181"},"nodeType":"YulFunctionCall","src":"1530:21:181"},"nodeType":"YulExpressionStatement","src":"1530:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1571:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1582:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1567:3:181"},"nodeType":"YulFunctionCall","src":"1567:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1587:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1560:6:181"},"nodeType":"YulFunctionCall","src":"1560:30:181"},"nodeType":"YulExpressionStatement","src":"1560:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1610:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1621:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1606:3:181"},"nodeType":"YulFunctionCall","src":"1606:18:181"},{"hexValue":"656d70747920726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"1626:19:181","type":"","value":"empty rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1599:6:181"},"nodeType":"YulFunctionCall","src":"1599:47:181"},"nodeType":"YulExpressionStatement","src":"1599:47:181"},{"nodeType":"YulAssignment","src":"1655:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1667:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1678:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1663:3:181"},"nodeType":"YulFunctionCall","src":"1663:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1655:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1497:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1511:4:181","type":""}],"src":"1346:341:181"},{"body":{"nodeType":"YulBlock","src":"1849:227:181","statements":[{"nodeType":"YulAssignment","src":"1859:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1871:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1882:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1867:3:181"},"nodeType":"YulFunctionCall","src":"1867:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1859:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"1894:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1912:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1917:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1908:3:181"},"nodeType":"YulFunctionCall","src":"1908:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1921:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1904:3:181"},"nodeType":"YulFunctionCall","src":"1904:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1898:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1939:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1954:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1962:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1950:3:181"},"nodeType":"YulFunctionCall","src":"1950:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1932:6:181"},"nodeType":"YulFunctionCall","src":"1932:34:181"},"nodeType":"YulExpressionStatement","src":"1932:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1986:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1997:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1982:3:181"},"nodeType":"YulFunctionCall","src":"1982:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2006:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2014:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2002:3:181"},"nodeType":"YulFunctionCall","src":"2002:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1975:6:181"},"nodeType":"YulFunctionCall","src":"1975:43:181"},"nodeType":"YulExpressionStatement","src":"1975:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2038:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2049:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2034:3:181"},"nodeType":"YulFunctionCall","src":"2034:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"2058:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2066:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2054:3:181"},"nodeType":"YulFunctionCall","src":"2054:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2027:6:181"},"nodeType":"YulFunctionCall","src":"2027:43:181"},"nodeType":"YulExpressionStatement","src":"2027:43:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1802:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1813:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1821:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1829:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1840:4:181","type":""}],"src":"1692:384:181"},{"body":{"nodeType":"YulBlock","src":"2210:175:181","statements":[{"nodeType":"YulAssignment","src":"2220:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2232:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2243:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2228:3:181"},"nodeType":"YulFunctionCall","src":"2228:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2220:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"2255:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2273:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2278:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2269:3:181"},"nodeType":"YulFunctionCall","src":"2269:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2282:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2265:3:181"},"nodeType":"YulFunctionCall","src":"2265:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2259:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2300:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2315:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2323:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2311:3:181"},"nodeType":"YulFunctionCall","src":"2311:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2293:6:181"},"nodeType":"YulFunctionCall","src":"2293:34:181"},"nodeType":"YulExpressionStatement","src":"2293:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2347:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2358:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2343:3:181"},"nodeType":"YulFunctionCall","src":"2343:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2367:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2375:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2363:3:181"},"nodeType":"YulFunctionCall","src":"2363:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2336:6:181"},"nodeType":"YulFunctionCall","src":"2336:43:181"},"nodeType":"YulExpressionStatement","src":"2336:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2171:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2182:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2190:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2201:4:181","type":""}],"src":"2081:304:181"},{"body":{"nodeType":"YulBlock","src":"2564:232:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2581:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2592:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2574:6:181"},"nodeType":"YulFunctionCall","src":"2574:21:181"},"nodeType":"YulExpressionStatement","src":"2574:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2615:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2626:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2611:3:181"},"nodeType":"YulFunctionCall","src":"2611:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2631:2:181","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2604:6:181"},"nodeType":"YulFunctionCall","src":"2604:30:181"},"nodeType":"YulExpressionStatement","src":"2604:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2654:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2665:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2650:3:181"},"nodeType":"YulFunctionCall","src":"2650:18:181"},{"hexValue":"467842617365526f6f7454756e6e656c3a204348494c445f54554e4e454c5f41","kind":"string","nodeType":"YulLiteral","src":"2670:34:181","type":"","value":"FxBaseRootTunnel: CHILD_TUNNEL_A"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2643:6:181"},"nodeType":"YulFunctionCall","src":"2643:62:181"},"nodeType":"YulExpressionStatement","src":"2643:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2725:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2736:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2721:3:181"},"nodeType":"YulFunctionCall","src":"2721:18:181"},{"hexValue":"4c52454144595f534554","kind":"string","nodeType":"YulLiteral","src":"2741:12:181","type":"","value":"LREADY_SET"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2714:6:181"},"nodeType":"YulFunctionCall","src":"2714:40:181"},"nodeType":"YulExpressionStatement","src":"2714:40:181"},{"nodeType":"YulAssignment","src":"2763:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2775:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2786:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2771:3:181"},"nodeType":"YulFunctionCall","src":"2771:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2763:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1dc310af12cba7b1018a7df66f4a5d342cf94c76291e27400d58d59cb64eb899__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2541:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2555:4:181","type":""}],"src":"2390:406:181"}]},"contents":"{\n    { }\n    function abi_decode_uint32_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        value0 := abi_decode_uint32_fromMemory(headStart)\n        value1 := abi_decode_uint32_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n        value4 := abi_decode_address_fromMemory(add(headStart, 128))\n        value5 := abi_decode_address_fromMemory(add(headStart, 160))\n    }\n    function abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"empty domain\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"empty rootManager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_1dc310af12cba7b1018a7df66f4a5d342cf94c76291e27400d58d59cb64eb899__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"FxBaseRootTunnel: CHILD_TUNNEL_A\")\n        mstore(add(headStart, 96), \"LREADY_SET\")\n        tail := add(headStart, 128)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"6101006040523480156200001257600080fd5b5060405162002b3b38038062002b3b83398101604081905262000035916200036e565b8084878782878784848484846200004c33620001ba565b8463ffffffff16600003620000975760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620000e35760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b60448201526064016200008e565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e0528116156200011b576200011b816200021f565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a35050600580546001600160a01b039b8c166001600160a01b031991821617909155600480549a909b1699169890981790985550620003ef9c50505050505050505050505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b62000235816200024360201b620008311760201c565b6200024081620002ac565b50565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b0316156200031a5760405162461bcd60e51b815260206004820152602a60248201527f467842617365526f6f7454756e6e656c3a204348494c445f54554e4e454c5f4160448201526913149150511657d4d15560b21b60648201526084016200008e565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b805163ffffffff811681146200035157600080fd5b919050565b80516001600160a01b03811681146200035157600080fd5b60008060008060008060c087890312156200038857600080fd5b62000393876200033c565b9550620003a3602088016200033c565b9450620003b36040880162000356565b9350620003c36060880162000356565b9250620003d36080880162000356565b9150620003e360a0880162000356565b90509295509295509295565b60805160a05160c05160e0516126f662000445600039600081816101a90152610d11015260008181610290015281816104c40152610cea01526000818161043701526105790152600061023c01526126f66000f3fe6080604052600436106101445760003560e01c80638da5cb5b116100b6578063d1851c921161006f578063d1851c92146103e8578063d232c22014610406578063d69f9d6114610425578063db1b765914610459578063de9b771f14610479578063f953cec71461049957600080fd5b80638da5cb5b14610335578063972c492814610353578063b1f8100d14610373578063c0857ba014610393578063c5b350df146103b3578063cc394283146103c857600080fd5b806352a9674b1161010857806352a9674b1461022a5780635bd11efc1461025e5780635f61e3ec1461027e578063607f2d42146102ca5780636a42b8f81461030a578063715018a61461032057600080fd5b80630e387de61461015057806314168416146101975780633cf52ffb146101e057806348e6fa23146101f55780634ff746f61461020a57600080fd5b3661014b57005b600080fd5b34801561015c57600080fd5b506101847f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b03681565b6040519081526020015b60405180910390f35b3480156101a357600080fd5b506101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161018e565b3480156101ec57600080fd5b50600254610184565b6102086102033660046121de565b6104b9565b005b34801561021657600080fd5b50610208610225366004612242565b61056e565b34801561023657600080fd5b506101cb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561026a57600080fd5b5061020861027936600461228c565b610614565b34801561028a57600080fd5b506102b27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161018e565b3480156102d657600080fd5b506102fa6102e53660046122a9565b60076020526000908152604090205460ff1681565b604051901515815260200161018e565b34801561031657600080fd5b5062093a80610184565b34801561032c57600080fd5b5061020861064b565b34801561034157600080fd5b506000546001600160a01b03166102b2565b34801561035f57600080fd5b506006546102b2906001600160a01b031681565b34801561037f57600080fd5b5061020861038e36600461228c565b6106ff565b34801561039f57600080fd5b506005546102b2906001600160a01b031681565b3480156103bf57600080fd5b5061020861079d565b3480156103d457600080fd5b506003546102b2906001600160a01b031681565b3480156103f457600080fd5b506001546001600160a01b03166102b2565b34801561041257600080fd5b506000546001600160a01b0316156102fa565b34801561043157600080fd5b506102b27f000000000000000000000000000000000000000000000000000000000000000081565b34801561046557600080fd5b506102fa61047436600461228c565b61080d565b34801561048557600080fd5b506004546102b2906001600160a01b031681565b3480156104a557600080fd5b506102086104b4366004612242565b610817565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105255760405162461bcd60e51b815260206004820152600c60248201526b10b937b7ba26b0b730b3b2b960a11b60448201526064015b60405180910390fd5b61052f828261089a565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507782823360405161056293929190612312565b60405180910390a15050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105cf5760405162461bcd60e51b815260040161051c9060208082526004908201526310a0a6a160e11b604082015260600190565b6105d8816108e1565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610609929190612350565b60405180910390a150565b6000546001600160a01b0316331461063f576040516311a8a1bb60e31b815260040160405180910390fd5b610648816108fa565b50565b6000546001600160a01b03163314610676576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426106889190612390565b116106a6576040516324e0285f60e21b815260040160405180910390fd5b6002546000036106c957604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b0316156106f3576040516323295ef960e01b815260040160405180910390fd5b6106fd600061090c565b565b6000546001600160a01b0316331461072a576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610748575060025415155b15610766576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361079457604051634a2fb73f60e11b815260040160405180910390fd5b61064881610971565b6001546001600160a01b031633146107c8576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426107da9190612390565b116107f8576040516324e0285f60e21b815260040160405180910390fd5b6001546106fd906001600160a01b031661090c565b6000805b92915050565b6000610822826109bf565b905061082d81610ca5565b5050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b8051156108d85760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b604482015260640161051c565b61082d82610dc6565b6040516316c2fdb560e21b815260040160405180910390fd5b61090381610831565b61064881610e2f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b606060006109cc83610ebd565b905060006109d982610f1c565b905060006109e683610f45565b90506000816109f484610f6e565b6109fd86611124565b604051602001610a0f939291906123a3565b60408051601f1981840301815291815281516020928301206000818152600790935291205490915060ff1615610a935760405162461bcd60e51b8152602060048201526024808201527f4678526f6f7454756e6e656c3a20455849545f414c52454144595f50524f434560448201526314d4d15160e21b606482015260840161051c565b6000818152600760205260408120805460ff19166001179055610ab585611140565b90506000610ac28261128a565b9050610acd8161131a565b6006546001600160a01b03908116911614610b385760405162461bcd60e51b815260206004820152602560248201527f4678526f6f7454756e6e656c3a20494e56414c49445f46585f4348494c445f54604482015264155393915360da1b606482015260840161051c565b6000610b4387611343565b9050610b63610b53846020015190565b87610b5d8a61135f565b8461137b565b610bbb5760405162461bcd60e51b815260206004820152602360248201527f4678526f6f7454756e6e656c3a20494e56414c49445f524543454950545f505260448201526227a7a360e91b606482015260840161051c565b610be985610bc88961162e565b610bd18a61164a565b84610bdb8c611666565b610be48d611682565b61169e565b506000610bf5836117c4565b90507f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036610c2b610c26836000611800565b611838565b14610c785760405162461bcd60e51b815260206004820152601f60248201527f4678526f6f7454756e6e656c3a20494e56414c49445f5349474e415455524500604482015260640161051c565b6000610c83846118b2565b806020019051810190610c9691906123d0565b9b9a5050505050505050505050565b8051602014610ce05760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b604482015260640161051c565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016638e7d93fa7f0000000000000000000000000000000000000000000000000000000000000000610d3984612447565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526024820152604401600060405180830381600087803b158015610d7d57600080fd5b505af1158015610d91573d6000803e3d6000fd5b505050507fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610609929190612350565b6004805460065460405163b472047760e01b81526001600160a01b039283169363b472047793610dfa93169186910161246b565b600060405180830381600087803b158015610e1457600080fd5b505af1158015610e28573d6000803e3d6000fd5b5050505050565b6006546001600160a01b031615610e9b5760405162461bcd60e51b815260206004820152602a60248201527f467842617365526f6f7454756e6e656c3a204348494c445f54554e4e454c5f4160448201526913149150511657d4d15560b21b606482015260840161051c565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6040805160208101909152606081526000610f07610f028460408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6118ce565b60408051602081019091529081529392505050565b60606108118260000151600881518110610f3857610f3861248f565b60200260200101516119da565b60006108118260000151600281518110610f6157610f6161248f565b6020026020010151611838565b6040805160208101909152600081528151606091901561081157600080610f96600086611a77565b60f81c90506001811480610fad57508060ff166003145b1561105557600185516002610fc291906124a5565b610fcc9190612390565b67ffffffffffffffff811115610fe457610fe4612119565b6040519080825280601f01601f19166020018201604052801561100e576020820181803683370190505b509250600061101e600187611a77565b905080846000815181106110345761103461248f565b60200101906001600160f81b031916908160001a90535060019250506110b9565b60028551600261106591906124a5565b61106f9190612390565b67ffffffffffffffff81111561108757611087612119565b6040519080825280601f01601f1916602001820160405280156110b1576020820181803683370190505b509250600091505b825160ff83165b8181101561111a576110e96110d860ff861683612390565b6110e39060026124bc565b88611a77565b8582815181106110fb576110fb61248f565b60200101906001600160f81b031916908160001a9053506001016110c0565b5050505092915050565b60006108118260000151600981518110610f6157610f6161248f565b61116460405180606001604052806060815260200160608152602001600081525090565b61117e8260000151600681518110610f3857610f3861248f565b6020828101829052604080518082018252600080825290830152805180820190915282518152918101908201526111b481611af8565b156111c9576111c2816118ce565b8252611276565b602082015180516000906111df90600190612390565b67ffffffffffffffff8111156111f7576111f7612119565b6040519080825280601f01601f191660200182016040528015611221576020820181803683370190505b50905060008083602101915082602001905061123f82828551611b33565b60408051808201825260008082526020918201528151808301909252845182528085019082015261126f906118ce565b8652505050505b61127f83611124565b604083015250919050565b6040805160808101825260009181018281526060808301939093528152602081019190915260006112d883600001516003815181106112cb576112cb61248f565b60200260200101516118ce565b8360400151815181106112ed576112ed61248f565b602002602001015190506040518060400160405280828152602001611311836118ce565b90529392505050565b600061081182602001516000815181106113365761133661248f565b6020026020010151611bcc565b60006108118260000151600581518110610f6157610f6161248f565b60606108118260000151600781518110610f3857610f3861248f565b6000806113af8460408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b905060006113bc826118ce565b9050606080856000806113ce8b610f6e565b905080516000036113e9576000975050505050505050611626565b855160005b8181101561161c5782518411156114115760009950505050505050505050611626565b6114338882815181106114265761142661248f565b6020026020010151611be6565b9650868051906020012085146114555760009950505050505050505050611626565b61146a8882815181106112cb576112cb61248f565b9550855160110361153f57825184036114cb578d8051906020012061149b87601081518110610f3857610f3861248f565b80519060200120036114b95760019950505050505050505050611626565b60009950505050505050505050611626565b60008385815181106114df576114df61248f565b016020015160f81c905060108111156115055760009a5050505050505050505050611626565b61152a878260ff168151811061151d5761151d61248f565b6020026020010151611c65565b95506115376001866124bc565b945050611614565b85516002036114b957600061156a61156388600081518110610f3857610f3861248f565b8587611c93565b845190915061157982876124bc565b036115ce578e8051906020012061159c88600181518110610f3857610f3861248f565b80519060200120036115bb5760019a5050505050505050505050611626565b60009a5050505050505050505050611626565b806000036115e95760009a5050505050505050505050611626565b6115f381866124bc565b945061160b8760018151811061151d5761151d61248f565b95506116149050565b6001016113ee565b5050505050505050505b949350505050565b60006108118260000151600381518110610f6157610f6161248f565b60006108118260000151600481518110610f6157610f6161248f565b60006108118260000151600081518110610f6157610f6161248f565b60606108118260000151600181518110610f3857610f3861248f565b6005546040516320a9cea560e11b8152600481018490526000918291829182916001600160a01b03909116906341539d4a9060240160a060405180830381865afa1580156116f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171491906124cf565b509350509250925061176b828b61172b9190612390565b6040805160208082018f90528183018e9052606082018d905260808083018d90528351808403909101815260a09092019092528051910120908588611d97565b6117b75760405162461bcd60e51b815260206004820152601c60248201527f4678526f6f7454756e6e656c3a20494e56414c49445f48454144455200000000604482015260640161051c565b9998505050505050505050565b60408051602081019091526060815260405180602001604052806117f884602001516001815181106112cb576112cb61248f565b905292915050565b604080518082019091526000808252602082015282518051839081106118285761182861248f565b6020026020010151905092915050565b80516000901580159061184c575081516022115b61185557600080fd5b60006118648360200151611f09565b905060008184600001516118789190612390565b905060008083866020015161188d91906124bc565b90508051915060208310156118a957826020036101000a820491505b50949350505050565b60606108118260200151600281518110610f3857610f3861248f565b60606118d982611af8565b6118e257600080fd5b60006118ed83611f9d565b905060008167ffffffffffffffff81111561190a5761190a612119565b60405190808252806020026020018201604052801561194f57816020015b60408051808201909152600080825260208201528152602001906001900390816119285790505b50905060006119618560200151611f09565b856020015161197091906124bc565b90506000805b848110156119cf5761198783612022565b91506040518060400160405280838152602001848152508482815181106119b0576119b061248f565b60209081029190910101526119c582846124bc565b9250600101611976565b509195945050505050565b80516060906119e857600080fd5b60006119f78360200151611f09565b90506000818460000151611a0b9190612390565b905060008167ffffffffffffffff811115611a2857611a28612119565b6040519080825280601f01601f191660200182016040528015611a52576020820181803683370190505b50905060008160200190506118a9848760200151611a7091906124bc565b82856120c6565b6000611a84600284612532565b15611abe57601082611a97600286612546565b81518110611aa757611aa761248f565b0160200151611ab9919060f81c61255a565b611aee565b601082611acc600286612546565b81518110611adc57611adc61248f565b0160200151611aee919060f81c61257c565b60f81b9392505050565b80516000908103611b0b57506000919050565b6020820151805160001a9060c0821015611b29575060009392505050565b5060019392505050565b80600003611b4057505050565b611b4c6001602061259e565b60ff16811115611b865782518252611b656020846124bc565b9250611b726020836124bc565b9150611b7f602082612390565b9050611b40565b80600003611b9357505050565b60006001611ba2836020612390565b611bae9061010061269b565b611bb89190612390565b935183518516941916939093179091525050565b8051600090601514611bdd57600080fd5b61081182611838565b60606000826000015167ffffffffffffffff811115611c0757611c07612119565b6040519080825280601f01601f191660200182016040528015611c31576020820181803683370190505b5090508051600003611c435792915050565b6000816020019050611c5e84602001518286600001516120c6565b5092915050565b8051600090602114611c7657600080fd5b60008083602001516001611c8a91906124bc565b51949350505050565b60008080611ca086610f6e565b90506000815167ffffffffffffffff811115611cbe57611cbe612119565b6040519080825280601f01601f191660200182016040528015611ce8576020820181803683370190505b5090506000825186611cfa91906124bc565b9050855b81811015611d67576000888281518110611d1a57611d1a61248f565b01602001516001600160f81b03191690508084611d378a85612390565b81518110611d4757611d4761248f565b60200101906001600160f81b031916908160001a90535050600101611cfe565b508180519060200120838051906020012003611d865782519350611d8b565b600093505b50919695505050505050565b600060208251611da79190612532565b15611deb5760405162461bcd60e51b8152602060048201526014602482015273092dcecc2d8d2c840e0e4dedecc40d8cadccee8d60631b604482015260640161051c565b600060208351611dfb9190612546565b9050611e0881600261269b565b8510611e4e5760405162461bcd60e51b81526020600482015260156024820152744c65616620696e64657820697320746f6f2062696760581b604482015260640161051c565b825160009087908290611e629060016124bc565b905060205b81811015611efa57868101519350611e8060028a612532565b600003611eb8576040805160208101859052908101859052606001604051602081830303815290604052805190602001209250611ee5565b60408051602081018690529081018490526060016040516020818303038152906040528051906020012092505b611ef060028a612546565b9850602001611e67565b50509094149695505050505050565b8051600090811a6080811015611f225750600092915050565b60b8811080611f495750611f38600160c061259e565b60ff1681118015611f49575060f881105b15611f575750600192915050565b60c0811015611f8b57611f6c600160b861259e565b611f799060ff1682612390565b611f849060016124bc565b9392505050565b611f6c600160f861259e565b50919050565b80516000908103611fb057506000919050565b600080611fc08460200151611f09565b8460200151611fcf91906124bc565b9050600084600001518560200151611fe791906124bc565b90505b8082101561201957611ffb82612022565b61200590836124bc565b915082612011816126a7565b935050611fea565b50909392505050565b80516000908190811a608081101561203d5760019150611c5e565b60b881101561206357612051608082612390565b61205c9060016124bc565b9150611c5e565b60c08110156120905760b78103600185019450806020036101000a85510460018201810193505050611c5e565b60f88110156120a45761205160c082612390565b60019390930151602084900360f7016101000a900490920160f5190192915050565b806000036120d357505050565b6120df6001602061259e565b60ff16811115611b8657825182526120f86020846124bc565b92506121056020836124bc565b9150612112602082612390565b90506120d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561215857612158612119565b604052919050565b600067ffffffffffffffff82111561217a5761217a612119565b50601f01601f191660200190565b600082601f83011261219957600080fd5b81356121ac6121a782612160565b61212f565b8181528460208386010111156121c157600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156121f157600080fd5b823567ffffffffffffffff8082111561220957600080fd5b61221586838701612188565b9350602085013591508082111561222b57600080fd5b5061223885828601612188565b9150509250929050565b60006020828403121561225457600080fd5b813567ffffffffffffffff81111561226b57600080fd5b61162684828501612188565b6001600160a01b038116811461064857600080fd5b60006020828403121561229e57600080fd5b8135611f8481612277565b6000602082840312156122bb57600080fd5b5035919050565b60005b838110156122dd5781810151838201526020016122c5565b50506000910152565b600081518084526122fe8160208601602086016122c2565b601f01601f19169290920160200192915050565b60608152600061232560608301866122e6565b828103602084015261233781866122e6565b91505060018060a01b0383166040830152949350505050565b60408152600061236360408301856122e6565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108115761081161237a565b838152600083516123bb8160208501602088016122c2565b60209201918201929092526040019392505050565b6000602082840312156123e257600080fd5b815167ffffffffffffffff8111156123f957600080fd5b8201601f8101841361240a57600080fd5b80516124186121a782612160565b81815285602083850101111561242d57600080fd5b61243e8260208301602086016122c2565b95945050505050565b80516020808301519190811015611f975760001960209190910360031b1b16919050565b6001600160a01b0383168152604060208201819052600090611626908301846122e6565b634e487b7160e01b600052603260045260246000fd5b80820281158282048414176108115761081161237a565b808201808211156108115761081161237a565b600080600080600060a086880312156124e757600080fd5b85519450602086015193506040860151925060608601519150608086015161250e81612277565b809150509295509295909350565b634e487b7160e01b600052601260045260246000fd5b6000826125415761254161251c565b500690565b6000826125555761255561251c565b500490565b600060ff83168061256d5761256d61251c565b8060ff84160691505092915050565b600060ff83168061258f5761258f61251c565b8060ff84160491505092915050565b60ff82811682821603908111156108115761081161237a565b600181815b808511156125f25781600019048211156125d8576125d861237a565b808516156125e557918102915b93841c93908002906125bc565b509250929050565b60008261260957506001610811565b8161261657506000610811565b816001811461262c576002811461263657612652565b6001915050610811565b60ff8411156126475761264761237a565b50506001821b610811565b5060208310610133831016604e8410600b8410161715612675575081810a610811565b61267f83836125b7565b80600019048211156126935761269361237a565b029392505050565b6000611f8483836125fa565b6000600182016126b9576126b961237a565b506001019056fea2646970667358221220be914e6f3dfeddf3d452269e093e5fe0dbea3f244152c7e04a21363d6d0e6e3764736f6c63430008110033","opcodes":"PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2B3B CODESIZE SUB DUP1 PUSH3 0x2B3B DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x36E JUMP JUMPDEST DUP1 DUP5 DUP8 DUP8 DUP3 DUP8 DUP8 DUP5 DUP5 DUP5 DUP5 DUP5 PUSH3 0x4C CALLER PUSH3 0x1BA JUMP JUMPDEST DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0x0 SUB PUSH3 0x97 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x32B6B83A3C903237B6B0B4B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xE3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x32B6B83A3C903937B7BA26B0B730B3B2B9 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x8E JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0xA0 MSTORE DUP4 DUP2 AND PUSH1 0xC0 MSTORE SWAP1 DUP6 AND PUSH1 0xE0 MSTORE DUP2 AND ISZERO PUSH3 0x11B JUMPI PUSH3 0x11B DUP2 PUSH3 0x21F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH4 0xFFFFFFFF DUP7 DUP2 AND SWAP3 SWAP1 DUP9 AND SWAP2 PUSH32 0x4F9C27C2FE3F84576EA469D367D044DA53C45E951617E8389F2B5ED8DB9D25F0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP12 DUP13 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x4 DUP1 SLOAD SWAP11 SWAP1 SWAP12 AND SWAP10 AND SWAP9 SWAP1 SWAP9 OR SWAP1 SWAP9 SSTORE POP PUSH3 0x3EF SWAP13 POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH3 0x235 DUP2 PUSH3 0x243 PUSH1 0x20 SHL PUSH3 0x831 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x240 DUP2 PUSH3 0x2AC JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH3 0x31A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x467842617365526F6F7454756E6E656C3A204348494C445F54554E4E454C5F41 PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x13149150511657D4D155 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x8E JUMP JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH3 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH3 0x388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x393 DUP8 PUSH3 0x33C JUMP JUMPDEST SWAP6 POP PUSH3 0x3A3 PUSH1 0x20 DUP9 ADD PUSH3 0x33C JUMP JUMPDEST SWAP5 POP PUSH3 0x3B3 PUSH1 0x40 DUP9 ADD PUSH3 0x356 JUMP JUMPDEST SWAP4 POP PUSH3 0x3C3 PUSH1 0x60 DUP9 ADD PUSH3 0x356 JUMP JUMPDEST SWAP3 POP PUSH3 0x3D3 PUSH1 0x80 DUP9 ADD PUSH3 0x356 JUMP JUMPDEST SWAP2 POP PUSH3 0x3E3 PUSH1 0xA0 DUP9 ADD PUSH3 0x356 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x26F6 PUSH3 0x445 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x1A9 ADD MSTORE PUSH2 0xD11 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x290 ADD MSTORE DUP2 DUP2 PUSH2 0x4C4 ADD MSTORE PUSH2 0xCEA ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x437 ADD MSTORE PUSH2 0x579 ADD MSTORE PUSH1 0x0 PUSH2 0x23C ADD MSTORE PUSH2 0x26F6 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x144 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xB6 JUMPI DUP1 PUSH4 0xD1851C92 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x3E8 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x406 JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x425 JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x459 JUMPI DUP1 PUSH4 0xDE9B771F EQ PUSH2 0x479 JUMPI DUP1 PUSH4 0xF953CEC7 EQ PUSH2 0x499 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x335 JUMPI DUP1 PUSH4 0x972C4928 EQ PUSH2 0x353 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x373 JUMPI DUP1 PUSH4 0xC0857BA0 EQ PUSH2 0x393 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x3B3 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x3C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B GT PUSH2 0x108 JUMPI DUP1 PUSH4 0x52A9674B EQ PUSH2 0x22A JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x25E JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x27E JUMPI DUP1 PUSH4 0x607F2D42 EQ PUSH2 0x2CA JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x30A JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x320 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE387DE6 EQ PUSH2 0x150 JUMPI DUP1 PUSH4 0x14168416 EQ PUSH2 0x197 JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x1E0 JUMPI DUP1 PUSH4 0x48E6FA23 EQ PUSH2 0x1F5 JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x20A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x14B JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x184 PUSH32 0x8C5261668696CE22758910D05BAB8F186D6EB247CEAC2AF2E82C7DC17669B036 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1CB PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x18E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x184 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x203 CALLDATASIZE PUSH1 0x4 PUSH2 0x21DE JUMP JUMPDEST PUSH2 0x4B9 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x208 PUSH2 0x225 CALLDATASIZE PUSH1 0x4 PUSH2 0x2242 JUMP JUMPDEST PUSH2 0x56E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x236 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1CB PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x208 PUSH2 0x279 CALLDATASIZE PUSH1 0x4 PUSH2 0x228C JUMP JUMPDEST PUSH2 0x614 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B2 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x18E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FA PUSH2 0x2E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x22A9 JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x18E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x316 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x184 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x32C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x208 PUSH2 0x64B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x341 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2B2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x6 SLOAD PUSH2 0x2B2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x208 PUSH2 0x38E CALLDATASIZE PUSH1 0x4 PUSH2 0x228C JUMP JUMPDEST PUSH2 0x6FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x39F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x5 SLOAD PUSH2 0x2B2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x208 PUSH2 0x79D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x2B2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2B2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x412 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x2FA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x431 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B2 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x465 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FA PUSH2 0x474 CALLDATASIZE PUSH1 0x4 PUSH2 0x228C JUMP JUMPDEST PUSH2 0x80D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x485 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x2B2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x208 PUSH2 0x4B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x2242 JUMP JUMPDEST PUSH2 0x817 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x525 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B937B7BA26B0B730B3B2B9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x52F DUP3 DUP3 PUSH2 0x89A JUMP JUMPDEST PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 DUP3 DUP3 CALLER PUSH1 0x40 MLOAD PUSH2 0x562 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2312 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x5CF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51C SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0x5D8 DUP2 PUSH2 0x8E1 JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0x609 SWAP3 SWAP2 SWAP1 PUSH2 0x2350 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x63F JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x648 DUP2 PUSH2 0x8FA JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x676 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x688 SWAP2 SWAP1 PUSH2 0x2390 JUMP JUMPDEST GT PUSH2 0x6A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x6C9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x6F3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6FD PUSH1 0x0 PUSH2 0x90C JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x72A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x748 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x766 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x794 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x648 DUP2 PUSH2 0x971 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x7C8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x7DA SWAP2 SWAP1 PUSH2 0x2390 JUMP JUMPDEST GT PUSH2 0x7F8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x6FD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x90C JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x822 DUP3 PUSH2 0x9BF JUMP JUMPDEST SWAP1 POP PUSH2 0x82D DUP2 PUSH2 0xCA5 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x8D8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x51C JUMP JUMPDEST PUSH2 0x82D DUP3 PUSH2 0xDC6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x16C2FDB5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x903 DUP2 PUSH2 0x831 JUMP JUMPDEST PUSH2 0x648 DUP2 PUSH2 0xE2F JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x9CC DUP4 PUSH2 0xEBD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9D9 DUP3 PUSH2 0xF1C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9E6 DUP4 PUSH2 0xF45 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH2 0x9F4 DUP5 PUSH2 0xF6E JUMP JUMPDEST PUSH2 0x9FD DUP7 PUSH2 0x1124 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xA0F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x23A3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 SWAP1 SWAP4 MSTORE SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xA93 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x4678526F6F7454756E6E656C3A20455849545F414C52454144595F50524F4345 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x14D4D151 PUSH1 0xE2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x51C JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0xAB5 DUP6 PUSH2 0x1140 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xAC2 DUP3 PUSH2 0x128A JUMP JUMPDEST SWAP1 POP PUSH2 0xACD DUP2 PUSH2 0x131A JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xB38 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4678526F6F7454756E6E656C3A20494E56414C49445F46585F4348494C445F54 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x1553939153 PUSH1 0xDA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x51C JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB43 DUP8 PUSH2 0x1343 JUMP JUMPDEST SWAP1 POP PUSH2 0xB63 PUSH2 0xB53 DUP5 PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST DUP8 PUSH2 0xB5D DUP11 PUSH2 0x135F JUMP JUMPDEST DUP5 PUSH2 0x137B JUMP JUMPDEST PUSH2 0xBBB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4678526F6F7454756E6E656C3A20494E56414C49445F524543454950545F5052 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x27A7A3 PUSH1 0xE9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x51C JUMP JUMPDEST PUSH2 0xBE9 DUP6 PUSH2 0xBC8 DUP10 PUSH2 0x162E JUMP JUMPDEST PUSH2 0xBD1 DUP11 PUSH2 0x164A JUMP JUMPDEST DUP5 PUSH2 0xBDB DUP13 PUSH2 0x1666 JUMP JUMPDEST PUSH2 0xBE4 DUP14 PUSH2 0x1682 JUMP JUMPDEST PUSH2 0x169E JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xBF5 DUP4 PUSH2 0x17C4 JUMP JUMPDEST SWAP1 POP PUSH32 0x8C5261668696CE22758910D05BAB8F186D6EB247CEAC2AF2E82C7DC17669B036 PUSH2 0xC2B PUSH2 0xC26 DUP4 PUSH1 0x0 PUSH2 0x1800 JUMP JUMPDEST PUSH2 0x1838 JUMP JUMPDEST EQ PUSH2 0xC78 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4678526F6F7454756E6E656C3A20494E56414C49445F5349474E415455524500 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x51C JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC83 DUP5 PUSH2 0x18B2 JUMP JUMPDEST DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xC96 SWAP2 SWAP1 PUSH2 0x23D0 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0xCE0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x51C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH4 0x8E7D93FA PUSH32 0x0 PUSH2 0xD39 DUP5 PUSH2 0x2447 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD91 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0x609 SWAP3 SWAP2 SWAP1 PUSH2 0x2350 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH4 0xB4720477 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP4 PUSH4 0xB4720477 SWAP4 PUSH2 0xDFA SWAP4 AND SWAP2 DUP7 SWAP2 ADD PUSH2 0x246B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE28 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0xE9B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x467842617365526F6F7454756E6E656C3A204348494C445F54554E4E454C5F41 PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x13149150511657D4D155 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x51C JUMP JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0xF07 PUSH2 0xF02 DUP5 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE DUP3 MLOAD DUP3 MSTORE SWAP2 DUP3 ADD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x18CE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE SWAP1 DUP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x811 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x8 DUP2 MLOAD DUP2 LT PUSH2 0xF38 JUMPI PUSH2 0xF38 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x19DA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x811 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0xF61 JUMPI PUSH2 0xF61 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1838 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP2 MLOAD PUSH1 0x60 SWAP2 SWAP1 ISZERO PUSH2 0x811 JUMPI PUSH1 0x0 DUP1 PUSH2 0xF96 PUSH1 0x0 DUP7 PUSH2 0x1A77 JUMP JUMPDEST PUSH1 0xF8 SHR SWAP1 POP PUSH1 0x1 DUP2 EQ DUP1 PUSH2 0xFAD JUMPI POP DUP1 PUSH1 0xFF AND PUSH1 0x3 EQ JUMPDEST ISZERO PUSH2 0x1055 JUMPI PUSH1 0x1 DUP6 MLOAD PUSH1 0x2 PUSH2 0xFC2 SWAP2 SWAP1 PUSH2 0x24A5 JUMP JUMPDEST PUSH2 0xFCC SWAP2 SWAP1 PUSH2 0x2390 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xFE4 JUMPI PUSH2 0xFE4 PUSH2 0x2119 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x100E JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 PUSH2 0x101E PUSH1 0x1 DUP8 PUSH2 0x1A77 JUMP JUMPDEST SWAP1 POP DUP1 DUP5 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1034 JUMPI PUSH2 0x1034 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x1 SWAP3 POP POP PUSH2 0x10B9 JUMP JUMPDEST PUSH1 0x2 DUP6 MLOAD PUSH1 0x2 PUSH2 0x1065 SWAP2 SWAP1 PUSH2 0x24A5 JUMP JUMPDEST PUSH2 0x106F SWAP2 SWAP1 PUSH2 0x2390 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1087 JUMPI PUSH2 0x1087 PUSH2 0x2119 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x10B1 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP JUMPDEST DUP3 MLOAD PUSH1 0xFF DUP4 AND JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x111A JUMPI PUSH2 0x10E9 PUSH2 0x10D8 PUSH1 0xFF DUP7 AND DUP4 PUSH2 0x2390 JUMP JUMPDEST PUSH2 0x10E3 SWAP1 PUSH1 0x2 PUSH2 0x24BC JUMP JUMPDEST DUP9 PUSH2 0x1A77 JUMP JUMPDEST DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x10FB JUMPI PUSH2 0x10FB PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x1 ADD PUSH2 0x10C0 JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x811 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x9 DUP2 MLOAD DUP2 LT PUSH2 0xF61 JUMPI PUSH2 0xF61 PUSH2 0x248F JUMP JUMPDEST PUSH2 0x1164 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x117E DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x6 DUP2 MLOAD DUP2 LT PUSH2 0xF38 JUMPI PUSH2 0xF38 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE SWAP1 DUP4 ADD MSTORE DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP1 DUP3 ADD MSTORE PUSH2 0x11B4 DUP2 PUSH2 0x1AF8 JUMP JUMPDEST ISZERO PUSH2 0x11C9 JUMPI PUSH2 0x11C2 DUP2 PUSH2 0x18CE JUMP JUMPDEST DUP3 MSTORE PUSH2 0x1276 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x11DF SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x2390 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x11F7 JUMPI PUSH2 0x11F7 PUSH2 0x2119 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1221 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP4 PUSH1 0x21 ADD SWAP2 POP DUP3 PUSH1 0x20 ADD SWAP1 POP PUSH2 0x123F DUP3 DUP3 DUP6 MLOAD PUSH2 0x1B33 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE DUP5 MLOAD DUP3 MSTORE DUP1 DUP6 ADD SWAP1 DUP3 ADD MSTORE PUSH2 0x126F SWAP1 PUSH2 0x18CE JUMP JUMPDEST DUP7 MSTORE POP POP POP POP JUMPDEST PUSH2 0x127F DUP4 PUSH2 0x1124 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH1 0x0 SWAP2 DUP2 ADD DUP3 DUP2 MSTORE PUSH1 0x60 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH2 0x12D8 DUP4 PUSH1 0x0 ADD MLOAD PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x12CB JUMPI PUSH2 0x12CB PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x18CE JUMP JUMPDEST DUP4 PUSH1 0x40 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x12ED JUMPI PUSH2 0x12ED PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1311 DUP4 PUSH2 0x18CE JUMP JUMPDEST SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x811 DUP3 PUSH1 0x20 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1336 JUMPI PUSH2 0x1336 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1BCC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x811 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH2 0xF61 JUMPI PUSH2 0xF61 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x60 PUSH2 0x811 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x7 DUP2 MLOAD DUP2 LT PUSH2 0xF38 JUMPI PUSH2 0xF38 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x13AF DUP5 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE DUP3 MLOAD DUP3 MSTORE SWAP2 DUP3 ADD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x13BC DUP3 PUSH2 0x18CE JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP1 DUP6 PUSH1 0x0 DUP1 PUSH2 0x13CE DUP12 PUSH2 0xF6E JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0x13E9 JUMPI PUSH1 0x0 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x1626 JUMP JUMPDEST DUP6 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x161C JUMPI DUP3 MLOAD DUP5 GT ISZERO PUSH2 0x1411 JUMPI PUSH1 0x0 SWAP10 POP POP POP POP POP POP POP POP POP POP PUSH2 0x1626 JUMP JUMPDEST PUSH2 0x1433 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1426 JUMPI PUSH2 0x1426 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1BE6 JUMP JUMPDEST SWAP7 POP DUP7 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP6 EQ PUSH2 0x1455 JUMPI PUSH1 0x0 SWAP10 POP POP POP POP POP POP POP POP POP POP PUSH2 0x1626 JUMP JUMPDEST PUSH2 0x146A DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x12CB JUMPI PUSH2 0x12CB PUSH2 0x248F JUMP JUMPDEST SWAP6 POP DUP6 MLOAD PUSH1 0x11 SUB PUSH2 0x153F JUMPI DUP3 MLOAD DUP5 SUB PUSH2 0x14CB JUMPI DUP14 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH2 0x149B DUP8 PUSH1 0x10 DUP2 MLOAD DUP2 LT PUSH2 0xF38 JUMPI PUSH2 0xF38 PUSH2 0x248F JUMP JUMPDEST DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SUB PUSH2 0x14B9 JUMPI PUSH1 0x1 SWAP10 POP POP POP POP POP POP POP POP POP POP PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x0 SWAP10 POP POP POP POP POP POP POP POP POP POP PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x14DF JUMPI PUSH2 0x14DF PUSH2 0x248F JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0xF8 SHR SWAP1 POP PUSH1 0x10 DUP2 GT ISZERO PUSH2 0x1505 JUMPI PUSH1 0x0 SWAP11 POP POP POP POP POP POP POP POP POP POP POP PUSH2 0x1626 JUMP JUMPDEST PUSH2 0x152A DUP8 DUP3 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x151D JUMPI PUSH2 0x151D PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1C65 JUMP JUMPDEST SWAP6 POP PUSH2 0x1537 PUSH1 0x1 DUP7 PUSH2 0x24BC JUMP JUMPDEST SWAP5 POP POP PUSH2 0x1614 JUMP JUMPDEST DUP6 MLOAD PUSH1 0x2 SUB PUSH2 0x14B9 JUMPI PUSH1 0x0 PUSH2 0x156A PUSH2 0x1563 DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xF38 JUMPI PUSH2 0xF38 PUSH2 0x248F JUMP JUMPDEST DUP6 DUP8 PUSH2 0x1C93 JUMP JUMPDEST DUP5 MLOAD SWAP1 SWAP2 POP PUSH2 0x1579 DUP3 DUP8 PUSH2 0x24BC JUMP JUMPDEST SUB PUSH2 0x15CE JUMPI DUP15 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH2 0x159C DUP9 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xF38 JUMPI PUSH2 0xF38 PUSH2 0x248F JUMP JUMPDEST DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SUB PUSH2 0x15BB JUMPI PUSH1 0x1 SWAP11 POP POP POP POP POP POP POP POP POP POP POP PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x0 SWAP11 POP POP POP POP POP POP POP POP POP POP POP PUSH2 0x1626 JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x15E9 JUMPI PUSH1 0x0 SWAP11 POP POP POP POP POP POP POP POP POP POP POP PUSH2 0x1626 JUMP JUMPDEST PUSH2 0x15F3 DUP2 DUP7 PUSH2 0x24BC JUMP JUMPDEST SWAP5 POP PUSH2 0x160B DUP8 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x151D JUMPI PUSH2 0x151D PUSH2 0x248F JUMP JUMPDEST SWAP6 POP PUSH2 0x1614 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x13EE JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x811 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0xF61 JUMPI PUSH2 0xF61 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x811 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH2 0xF61 JUMPI PUSH2 0xF61 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x811 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xF61 JUMPI PUSH2 0xF61 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x60 PUSH2 0x811 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xF38 JUMPI PUSH2 0xF38 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH4 0x20A9CEA5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x41539D4A SWAP1 PUSH1 0x24 ADD PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16F0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1714 SWAP2 SWAP1 PUSH2 0x24CF JUMP JUMPDEST POP SWAP4 POP POP SWAP3 POP SWAP3 POP PUSH2 0x176B DUP3 DUP12 PUSH2 0x172B SWAP2 SWAP1 PUSH2 0x2390 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP16 SWAP1 MSTORE DUP2 DUP4 ADD DUP15 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP14 SWAP1 MSTORE PUSH1 0x80 DUP1 DUP4 ADD DUP14 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 DUP6 DUP9 PUSH2 0x1D97 JUMP JUMPDEST PUSH2 0x17B7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4678526F6F7454756E6E656C3A20494E56414C49445F48454144455200000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x51C JUMP JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x17F8 DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x12CB JUMPI PUSH2 0x12CB PUSH2 0x248F JUMP JUMPDEST SWAP1 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP3 MLOAD DUP1 MLOAD DUP4 SWAP1 DUP2 LT PUSH2 0x1828 JUMPI PUSH2 0x1828 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x184C JUMPI POP DUP2 MLOAD PUSH1 0x22 GT JUMPDEST PUSH2 0x1855 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1864 DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0x1F09 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x1878 SWAP2 SWAP1 PUSH2 0x2390 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP4 DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x188D SWAP2 SWAP1 PUSH2 0x24BC JUMP JUMPDEST SWAP1 POP DUP1 MLOAD SWAP2 POP PUSH1 0x20 DUP4 LT ISZERO PUSH2 0x18A9 JUMPI DUP3 PUSH1 0x20 SUB PUSH2 0x100 EXP DUP3 DIV SWAP2 POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x811 DUP3 PUSH1 0x20 ADD MLOAD PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0xF38 JUMPI PUSH2 0xF38 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x60 PUSH2 0x18D9 DUP3 PUSH2 0x1AF8 JUMP JUMPDEST PUSH2 0x18E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x18ED DUP4 PUSH2 0x1F9D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x190A JUMPI PUSH2 0x190A PUSH2 0x2119 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x194F JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1928 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH2 0x1961 DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x1F09 JUMP JUMPDEST DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x1970 SWAP2 SWAP1 PUSH2 0x24BC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x19CF JUMPI PUSH2 0x1987 DUP4 PUSH2 0x2022 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE POP DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x19B0 JUMPI PUSH2 0x19B0 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH2 0x19C5 DUP3 DUP5 PUSH2 0x24BC JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x1976 JUMP JUMPDEST POP SWAP2 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH2 0x19E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x19F7 DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0x1F09 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x1A0B SWAP2 SWAP1 PUSH2 0x2390 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1A28 JUMPI PUSH2 0x1A28 PUSH2 0x2119 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1A52 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x20 ADD SWAP1 POP PUSH2 0x18A9 DUP5 DUP8 PUSH1 0x20 ADD MLOAD PUSH2 0x1A70 SWAP2 SWAP1 PUSH2 0x24BC JUMP JUMPDEST DUP3 DUP6 PUSH2 0x20C6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A84 PUSH1 0x2 DUP5 PUSH2 0x2532 JUMP JUMPDEST ISZERO PUSH2 0x1ABE JUMPI PUSH1 0x10 DUP3 PUSH2 0x1A97 PUSH1 0x2 DUP7 PUSH2 0x2546 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x1AA7 JUMPI PUSH2 0x1AA7 PUSH2 0x248F JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH2 0x1AB9 SWAP2 SWAP1 PUSH1 0xF8 SHR PUSH2 0x255A JUMP JUMPDEST PUSH2 0x1AEE JUMP JUMPDEST PUSH1 0x10 DUP3 PUSH2 0x1ACC PUSH1 0x2 DUP7 PUSH2 0x2546 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x1ADC JUMPI PUSH2 0x1ADC PUSH2 0x248F JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH2 0x1AEE SWAP2 SWAP1 PUSH1 0xF8 SHR PUSH2 0x257C JUMP JUMPDEST PUSH1 0xF8 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 SUB PUSH2 0x1B0B JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD DUP1 MLOAD PUSH1 0x0 BYTE SWAP1 PUSH1 0xC0 DUP3 LT ISZERO PUSH2 0x1B29 JUMPI POP PUSH1 0x0 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x1B40 JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x1B4C PUSH1 0x1 PUSH1 0x20 PUSH2 0x259E JUMP JUMPDEST PUSH1 0xFF AND DUP2 GT ISZERO PUSH2 0x1B86 JUMPI DUP3 MLOAD DUP3 MSTORE PUSH2 0x1B65 PUSH1 0x20 DUP5 PUSH2 0x24BC JUMP JUMPDEST SWAP3 POP PUSH2 0x1B72 PUSH1 0x20 DUP4 PUSH2 0x24BC JUMP JUMPDEST SWAP2 POP PUSH2 0x1B7F PUSH1 0x20 DUP3 PUSH2 0x2390 JUMP JUMPDEST SWAP1 POP PUSH2 0x1B40 JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x1B93 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH2 0x1BA2 DUP4 PUSH1 0x20 PUSH2 0x2390 JUMP JUMPDEST PUSH2 0x1BAE SWAP1 PUSH2 0x100 PUSH2 0x269B JUMP JUMPDEST PUSH2 0x1BB8 SWAP2 SWAP1 PUSH2 0x2390 JUMP JUMPDEST SWAP4 MLOAD DUP4 MLOAD DUP6 AND SWAP5 NOT AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP2 MSTORE POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x15 EQ PUSH2 0x1BDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x811 DUP3 PUSH2 0x1838 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 PUSH1 0x0 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1C07 JUMPI PUSH2 0x1C07 PUSH2 0x2119 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1C31 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0x1C43 JUMPI SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD SWAP1 POP PUSH2 0x1C5E DUP5 PUSH1 0x20 ADD MLOAD DUP3 DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0x20C6 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x21 EQ PUSH2 0x1C76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH2 0x1C8A SWAP2 SWAP1 PUSH2 0x24BC JUMP JUMPDEST MLOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x1CA0 DUP7 PUSH2 0xF6E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1CBE JUMPI PUSH2 0x1CBE PUSH2 0x2119 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1CE8 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP3 MLOAD DUP7 PUSH2 0x1CFA SWAP2 SWAP1 PUSH2 0x24BC JUMP JUMPDEST SWAP1 POP DUP6 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1D67 JUMPI PUSH1 0x0 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1D1A JUMPI PUSH2 0x1D1A PUSH2 0x248F JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 POP DUP1 DUP5 PUSH2 0x1D37 DUP11 DUP6 PUSH2 0x2390 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x1D47 JUMPI PUSH2 0x1D47 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP POP PUSH1 0x1 ADD PUSH2 0x1CFE JUMP JUMPDEST POP DUP2 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SUB PUSH2 0x1D86 JUMPI DUP3 MLOAD SWAP4 POP PUSH2 0x1D8B JUMP JUMPDEST PUSH1 0x0 SWAP4 POP JUMPDEST POP SWAP2 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MLOAD PUSH2 0x1DA7 SWAP2 SWAP1 PUSH2 0x2532 JUMP JUMPDEST ISZERO PUSH2 0x1DEB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x92DCECC2D8D2C840E0E4DEDECC40D8CADCCEE8D PUSH1 0x63 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x51C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 MLOAD PUSH2 0x1DFB SWAP2 SWAP1 PUSH2 0x2546 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E08 DUP2 PUSH1 0x2 PUSH2 0x269B JUMP JUMPDEST DUP6 LT PUSH2 0x1E4E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x4C65616620696E64657820697320746F6F20626967 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x51C JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP3 SWAP1 PUSH2 0x1E62 SWAP1 PUSH1 0x1 PUSH2 0x24BC JUMP JUMPDEST SWAP1 POP PUSH1 0x20 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1EFA JUMPI DUP7 DUP2 ADD MLOAD SWAP4 POP PUSH2 0x1E80 PUSH1 0x2 DUP11 PUSH2 0x2532 JUMP JUMPDEST PUSH1 0x0 SUB PUSH2 0x1EB8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x60 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP3 POP PUSH2 0x1EE5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP3 POP JUMPDEST PUSH2 0x1EF0 PUSH1 0x2 DUP11 PUSH2 0x2546 JUMP JUMPDEST SWAP9 POP PUSH1 0x20 ADD PUSH2 0x1E67 JUMP JUMPDEST POP POP SWAP1 SWAP5 EQ SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 BYTE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1F22 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xB8 DUP2 LT DUP1 PUSH2 0x1F49 JUMPI POP PUSH2 0x1F38 PUSH1 0x1 PUSH1 0xC0 PUSH2 0x259E JUMP JUMPDEST PUSH1 0xFF AND DUP2 GT DUP1 ISZERO PUSH2 0x1F49 JUMPI POP PUSH1 0xF8 DUP2 LT JUMPDEST ISZERO PUSH2 0x1F57 JUMPI POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x1F8B JUMPI PUSH2 0x1F6C PUSH1 0x1 PUSH1 0xB8 PUSH2 0x259E JUMP JUMPDEST PUSH2 0x1F79 SWAP1 PUSH1 0xFF AND DUP3 PUSH2 0x2390 JUMP JUMPDEST PUSH2 0x1F84 SWAP1 PUSH1 0x1 PUSH2 0x24BC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1F6C PUSH1 0x1 PUSH1 0xF8 PUSH2 0x259E JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 SUB PUSH2 0x1FB0 JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1FC0 DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x1F09 JUMP JUMPDEST DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x1FCF SWAP2 SWAP1 PUSH2 0x24BC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x1FE7 SWAP2 SWAP1 PUSH2 0x24BC JUMP JUMPDEST SWAP1 POP JUMPDEST DUP1 DUP3 LT ISZERO PUSH2 0x2019 JUMPI PUSH2 0x1FFB DUP3 PUSH2 0x2022 JUMP JUMPDEST PUSH2 0x2005 SWAP1 DUP4 PUSH2 0x24BC JUMP JUMPDEST SWAP2 POP DUP3 PUSH2 0x2011 DUP2 PUSH2 0x26A7 JUMP JUMPDEST SWAP4 POP POP PUSH2 0x1FEA JUMP JUMPDEST POP SWAP1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 BYTE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x203D JUMPI PUSH1 0x1 SWAP2 POP PUSH2 0x1C5E JUMP JUMPDEST PUSH1 0xB8 DUP2 LT ISZERO PUSH2 0x2063 JUMPI PUSH2 0x2051 PUSH1 0x80 DUP3 PUSH2 0x2390 JUMP JUMPDEST PUSH2 0x205C SWAP1 PUSH1 0x1 PUSH2 0x24BC JUMP JUMPDEST SWAP2 POP PUSH2 0x1C5E JUMP JUMPDEST PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x2090 JUMPI PUSH1 0xB7 DUP2 SUB PUSH1 0x1 DUP6 ADD SWAP5 POP DUP1 PUSH1 0x20 SUB PUSH2 0x100 EXP DUP6 MLOAD DIV PUSH1 0x1 DUP3 ADD DUP2 ADD SWAP4 POP POP POP PUSH2 0x1C5E JUMP JUMPDEST PUSH1 0xF8 DUP2 LT ISZERO PUSH2 0x20A4 JUMPI PUSH2 0x2051 PUSH1 0xC0 DUP3 PUSH2 0x2390 JUMP JUMPDEST PUSH1 0x1 SWAP4 SWAP1 SWAP4 ADD MLOAD PUSH1 0x20 DUP5 SWAP1 SUB PUSH1 0xF7 ADD PUSH2 0x100 EXP SWAP1 DIV SWAP1 SWAP3 ADD PUSH1 0xF5 NOT ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x20D3 JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x20DF PUSH1 0x1 PUSH1 0x20 PUSH2 0x259E JUMP JUMPDEST PUSH1 0xFF AND DUP2 GT ISZERO PUSH2 0x1B86 JUMPI DUP3 MLOAD DUP3 MSTORE PUSH2 0x20F8 PUSH1 0x20 DUP5 PUSH2 0x24BC JUMP JUMPDEST SWAP3 POP PUSH2 0x2105 PUSH1 0x20 DUP4 PUSH2 0x24BC JUMP JUMPDEST SWAP2 POP PUSH2 0x2112 PUSH1 0x20 DUP3 PUSH2 0x2390 JUMP JUMPDEST SWAP1 POP PUSH2 0x20D3 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2158 JUMPI PUSH2 0x2158 PUSH2 0x2119 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x217A JUMPI PUSH2 0x217A PUSH2 0x2119 JUMP JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2199 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x21AC PUSH2 0x21A7 DUP3 PUSH2 0x2160 JUMP JUMPDEST PUSH2 0x212F JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x21C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x21F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2209 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2215 DUP7 DUP4 DUP8 ADD PUSH2 0x2188 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x222B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2238 DUP6 DUP3 DUP7 ADD PUSH2 0x2188 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x226B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1626 DUP5 DUP3 DUP6 ADD PUSH2 0x2188 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x648 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x229E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1F84 DUP2 PUSH2 0x2277 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x22BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x22DD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x22C5 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x22FE DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x22C2 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2325 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x22E6 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2337 DUP2 DUP7 PUSH2 0x22E6 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2363 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x22E6 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x811 JUMPI PUSH2 0x811 PUSH2 0x237A JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH2 0x23BB DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x22C2 JUMP JUMPDEST PUSH1 0x20 SWAP3 ADD SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x23F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0x240A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x2418 PUSH2 0x21A7 DUP3 PUSH2 0x2160 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x242D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x243E DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x22C2 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x1F97 JUMPI PUSH1 0x0 NOT PUSH1 0x20 SWAP2 SWAP1 SWAP2 SUB PUSH1 0x3 SHL SHL AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x1626 SWAP1 DUP4 ADD DUP5 PUSH2 0x22E6 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x811 JUMPI PUSH2 0x811 PUSH2 0x237A JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x811 JUMPI PUSH2 0x811 PUSH2 0x237A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x24E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 MLOAD SWAP5 POP PUSH1 0x20 DUP7 ADD MLOAD SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD SWAP2 POP PUSH1 0x80 DUP7 ADD MLOAD PUSH2 0x250E DUP2 PUSH2 0x2277 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2541 JUMPI PUSH2 0x2541 PUSH2 0x251C JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2555 JUMPI PUSH2 0x2555 PUSH2 0x251C JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP4 AND DUP1 PUSH2 0x256D JUMPI PUSH2 0x256D PUSH2 0x251C JUMP JUMPDEST DUP1 PUSH1 0xFF DUP5 AND MOD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP4 AND DUP1 PUSH2 0x258F JUMPI PUSH2 0x258F PUSH2 0x251C JUMP JUMPDEST DUP1 PUSH1 0xFF DUP5 AND DIV SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x811 JUMPI PUSH2 0x811 PUSH2 0x237A JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x25F2 JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x25D8 JUMPI PUSH2 0x25D8 PUSH2 0x237A JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x25E5 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x25BC JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2609 JUMPI POP PUSH1 0x1 PUSH2 0x811 JUMP JUMPDEST DUP2 PUSH2 0x2616 JUMPI POP PUSH1 0x0 PUSH2 0x811 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x262C JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x2636 JUMPI PUSH2 0x2652 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x811 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x2647 JUMPI PUSH2 0x2647 PUSH2 0x237A JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x811 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x2675 JUMPI POP DUP2 DUP2 EXP PUSH2 0x811 JUMP JUMPDEST PUSH2 0x267F DUP4 DUP4 PUSH2 0x25B7 JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x2693 JUMPI PUSH2 0x2693 PUSH2 0x237A JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F84 DUP4 DUP4 PUSH2 0x25FA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x26B9 JUMPI PUSH2 0x26B9 PUSH2 0x237A JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBE SWAP2 0x4E PUSH16 0x3DFEDDF3D452269E093E5FE0DBEA3F24 COINBASE MSTORE 0xC7 0xE0 0x4A 0x21 CALLDATASIZE RETURNDATASIZE PUSH14 0xE6E3764736F6C63430008110033 ","sourceMap":"252:2056:139:-:0;;;362:298;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;630:18;650:4;547:7;556:13;650:4;577:12;591:16;547:7;556:13;650:4;577:12;591:16;3038:21:116::1;3048:10;3038:9;:21::i;:::-;3105:7;:12;;3116:1;3105:12:::0;3097:37:::1;;;::::0;-1:-1:-1;;;3097:37:116;;1207:2:181;3097:37:116::1;::::0;::::1;1189:21:181::0;1246:2;1226:18;;;1219:30;-1:-1:-1;;;1265:18:181;;;1258:42;1317:18;;3097:37:116::1;;;;;;;;;-1:-1:-1::0;;;;;3148:26:116;::::1;3140:56;;;::::0;-1:-1:-1;;;3140:56:116;;1548:2:181;3140:56:116::1;::::0;::::1;1530:21:181::0;1587:2;1567:18;;;1560:30;-1:-1:-1;;;1606:18:181;;;1599:47;1663:18;;3140:56:116::1;1346:341:181::0;3140:56:116::1;3308:16;::::0;;::::1;;::::0;-1:-1:-1;;;;;3330:10:116;;::::1;;::::0;3346:27;;::::1;;::::0;3379:29;;::::1;;::::0;3449:30;::::1;::::0;3445:88:::1;;3489:37;3509:16:::0;3489:19:::1;:37::i;:::-;3544:74;::::0;;-1:-1:-1;;;;;1950:15:181;;;1932:34;;2002:15;;;1997:2;1982:18;;1975:43;2054:15;;2034:18;;;2027:43;3544:74:116;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;1882:2:181;3544:74:116;;::::1;-1:-1:-1::0;;1718:17:146;:58;;-1:-1:-1;;;;;1718:58:146;;;-1:-1:-1;;;;;;1718:58:146;;;;;;;1782:6;:32;;;;;;;;;;;;;;;-1:-1:-1;252:2056:139;;-1:-1:-1;;;;;;;;;;;;;252:2056:139;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;1777:529:139:-;2217:43;2243:16;2217:25;;;;;:43;;:::i;:::-;2267:34;2284:16;2267;:34::i;:::-;1777:529;:::o;5838:185:116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;2293:34:181;;2363:15;;;2358:2;2343:18;;2336:43;5921:57:116;;2228:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;1865:198:146:-;1946:13;;-1:-1:-1;;;;;1946:13:146;:29;1938:84;;;;-1:-1:-1;;;1938:84:146;;2592:2:181;1938:84:146;;;2574:21:181;2631:2;2611:18;;;2604:30;2670:34;2650:18;;;2643:62;-1:-1:-1;;;2721:18:181;;;2714:40;2771:19;;1938:84:146;2390:406:181;1938:84:146;2028:13;:30;;-1:-1:-1;;;;;;2028:30:146;-1:-1:-1;;;;;2028:30:146;;;;;;;;;;1865:198::o;14:167:181:-;92:13;;145:10;134:22;;124:33;;114:61;;171:1;168;161:12;114:61;14:167;;;:::o;186:177::-;265:13;;-1:-1:-1;;;;;307:31:181;;297:42;;287:70;;353:1;350;343:12;368:632;481:6;489;497;505;513;521;574:3;562:9;553:7;549:23;545:33;542:53;;;591:1;588;581:12;542:53;614:39;643:9;614:39;:::i;:::-;604:49;;672:48;716:2;705:9;701:18;672:48;:::i;:::-;662:58;;739:49;784:2;773:9;769:18;739:49;:::i;:::-;729:59;;807:49;852:2;841:9;837:18;807:49;:::i;:::-;797:59;;875:50;920:3;909:9;905:19;875:50;:::i;:::-;865:60;;944:50;989:3;978:9;974:19;944:50;:::i;:::-;934:60;;368:632;;;;;;;;:::o;2390:406::-;252:2056:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@AMB_39042":{"entryPoint":null,"id":39042,"parameterSlots":0,"returnSlots":0},"@DOMAIN_39039":{"entryPoint":null,"id":39039,"parameterSlots":0,"returnSlots":0},"@MIRROR_DOMAIN_39048":{"entryPoint":null,"id":39048,"parameterSlots":0,"returnSlots":0},"@ROOT_MANAGER_39045":{"entryPoint":null,"id":39045,"parameterSlots":0,"returnSlots":0},"@SEND_MESSAGE_EVENT_SIG_47085":{"entryPoint":null,"id":47085,"parameterSlots":0,"returnSlots":0},"@_39157":{"entryPoint":null,"id":39157,"parameterSlots":0,"returnSlots":0},"@_checkBlockMembershipInCheckpoint_47365":{"entryPoint":5790,"id":47365,"parameterSlots":6,"returnSlots":1},"@_getNibbleArray_46043":{"entryPoint":3950,"id":46043,"parameterSlots":1,"returnSlots":1},"@_getNthNibbleOfBytes_46083":{"entryPoint":6775,"id":46083,"parameterSlots":2,"returnSlots":1},"@_itemLength_46798":{"entryPoint":8226,"id":46798,"parameterSlots":1,"returnSlots":1},"@_nibblesToTraverse_45924":{"entryPoint":7315,"id":45924,"parameterSlots":3,"returnSlots":1},"@_payloadOffset_46855":{"entryPoint":7945,"id":46855,"parameterSlots":1,"returnSlots":1},"@_processMessageFromChild_44812":{"entryPoint":3237,"id":44812,"parameterSlots":1,"returnSlots":0},"@_processMessage_39220":{"entryPoint":2273,"id":39220,"parameterSlots":1,"returnSlots":0},"@_sendMessageToChild_47151":{"entryPoint":3526,"id":47151,"parameterSlots":1,"returnSlots":0},"@_sendMessage_44780":{"entryPoint":2202,"id":44780,"parameterSlots":2,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":2097,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_44829":{"entryPoint":2298,"id":44829,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":2316,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":2417,"id":49927,"parameterSlots":1,"returnSlots":0},"@_validateAndExtractMessage_47314":{"entryPoint":2495,"id":47314,"parameterSlots":1,"returnSlots":1},"@_verifySender_44759":{"entryPoint":null,"id":44759,"parameterSlots":1,"returnSlots":1},"@acceptProposedOwner_49887":{"entryPoint":1949,"id":49887,"parameterSlots":0,"returnSlots":0},"@checkMembership_45579":{"entryPoint":7575,"id":45579,"parameterSlots":4,"returnSlots":1},"@checkpointManager_47091":{"entryPoint":null,"id":47091,"parameterSlots":0,"returnSlots":0},"@copy_45057":{"entryPoint":6963,"id":45057,"parameterSlots":3,"returnSlots":0},"@copy_46907":{"entryPoint":8390,"id":46907,"parameterSlots":3,"returnSlots":0},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@fxChildTunnel_47093":{"entryPoint":null,"id":47093,"parameterSlots":0,"returnSlots":0},"@fxRoot_47088":{"entryPoint":null,"id":47088,"parameterSlots":0,"returnSlots":0},"@getBlockNumber_45130":{"entryPoint":3909,"id":45130,"parameterSlots":1,"returnSlots":1},"@getBlockProof_45114":{"entryPoint":5762,"id":45114,"parameterSlots":1,"returnSlots":1},"@getBlockTime_45146":{"entryPoint":5678,"id":45146,"parameterSlots":1,"returnSlots":1},"@getBranchMaskAsBytes_45310":{"entryPoint":3868,"id":45310,"parameterSlots":1,"returnSlots":1},"@getData_45438":{"entryPoint":6322,"id":45438,"parameterSlots":1,"returnSlots":1},"@getEmitter_45403":{"entryPoint":4890,"id":45403,"parameterSlots":1,"returnSlots":1},"@getField_45469":{"entryPoint":6144,"id":45469,"parameterSlots":2,"returnSlots":1},"@getHeaderNumber_45098":{"entryPoint":5734,"id":45098,"parameterSlots":1,"returnSlots":1},"@getLog_45386":{"entryPoint":4746,"id":45386,"parameterSlots":1,"returnSlots":1},"@getReceiptLogIndex_45342":{"entryPoint":4388,"id":45342,"parameterSlots":1,"returnSlots":1},"@getReceiptProof_45294":{"entryPoint":4959,"id":45294,"parameterSlots":1,"returnSlots":1},"@getReceiptRoot_45184":{"entryPoint":4931,"id":45184,"parameterSlots":1,"returnSlots":1},"@getReceipt_45278":{"entryPoint":4416,"id":45278,"parameterSlots":1,"returnSlots":1},"@getTopics_45422":{"entryPoint":6084,"id":45422,"parameterSlots":1,"returnSlots":1},"@getTxRoot_45165":{"entryPoint":5706,"id":45165,"parameterSlots":1,"returnSlots":1},"@isList_46372":{"entryPoint":6904,"id":46372,"parameterSlots":1,"returnSlots":1},"@mirrorConnector_39051":{"entryPoint":null,"id":39051,"parameterSlots":0,"returnSlots":0},"@numItems_46740":{"entryPoint":8093,"id":46740,"parameterSlots":1,"returnSlots":1},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@processMessage_39189":{"entryPoint":1390,"id":39189,"parameterSlots":1,"returnSlots":0},"@processedExits_47097":{"entryPoint":null,"id":47097,"parameterSlots":0,"returnSlots":0},"@proposeNewOwner_49841":{"entryPoint":1791,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@receiveMessage_47382":{"entryPoint":2071,"id":47382,"parameterSlots":1,"returnSlots":0},"@renounceOwnership_49874":{"entryPoint":1611,"id":49874,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@sendMessage_39419":{"entryPoint":1209,"id":39419,"parameterSlots":2,"returnSlots":0},"@setFxChildTunnel_47137":{"entryPoint":3631,"id":47137,"parameterSlots":1,"returnSlots":0},"@setMirrorConnector_39170":{"entryPoint":1556,"id":39170,"parameterSlots":1,"returnSlots":0},"@toAddress_46553":{"entryPoint":7116,"id":46553,"parameterSlots":1,"returnSlots":1},"@toBytes_45354":{"entryPoint":null,"id":45354,"parameterSlots":1,"returnSlots":1},"@toBytes_46684":{"entryPoint":6618,"id":46684,"parameterSlots":1,"returnSlots":1},"@toExitPayload_45082":{"entryPoint":3773,"id":45082,"parameterSlots":1,"returnSlots":1},"@toList_46339":{"entryPoint":6350,"id":46339,"parameterSlots":1,"returnSlots":1},"@toRlpBytes_46495":{"entryPoint":7142,"id":46495,"parameterSlots":1,"returnSlots":1},"@toRlpItem_46195":{"entryPoint":null,"id":46195,"parameterSlots":1,"returnSlots":1},"@toUintStrict_46632":{"entryPoint":7269,"id":46632,"parameterSlots":1,"returnSlots":1},"@toUint_46603":{"entryPoint":6200,"id":46603,"parameterSlots":1,"returnSlots":1},"@verifySender_39202":{"entryPoint":2061,"id":39202,"parameterSlots":1,"returnSlots":1},"@verify_45839":{"entryPoint":4987,"id":45839,"parameterSlots":4,"returnSlots":1},"abi_decode_bytes":{"entryPoint":8584,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":8844,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":8873,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_uint256t_uint256t_uint256t_address_fromMemory":{"entryPoint":9423,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bytes_memory_ptr":{"entryPoint":8770,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes_memory_ptr_fromMemory":{"entryPoint":9168,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr":{"entryPoint":8670,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_bytes":{"entryPoint":8934,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_uint256_t_bytes_memory_ptr_t_uint256__to_t_uint256_t_bytes_memory_ptr_t_uint256__nonPadded_inplace_fromStack_reversed":{"entryPoint":9123,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_packed_t_uint256_t_uint256_t_bytes32_t_bytes32__to_t_uint256_t_uint256_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":9323,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":9040,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":8978,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_contract$_ICheckpointManager_$47056__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IFxStateSender_$47038__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1dc310af12cba7b1018a7df66f4a5d342cf94c76291e27400d58d59cb64eb899__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2ce2fedc24e79d64f58937c7672062618900d7fda5b396849b04c1ef7692f676__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_346ac4d916e6e0ff921470f98a98a708e34aa5c8a93b4076794f133e004e36a5__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a384685b2d9864ca58af3cdeb11675a5eb31234b321579291672bb93c38d256c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a93d72abfb9ed65892e9dea7aa76fdb1003bad3c2be9fdc6e43aa17d2648b99c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ad52eb458dc59be89b09f31cb50841858fb84683b2cb7a41fdcd5c7d6e7430d9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bb7a552d748e26b221e0250d9c5275afe2a0161f67e052c27f605992e65ad73d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e20402930bc2a62dcad7f5124f56dbfe0c166bf9b0c73c01cd54b14a41c30523__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"allocate_memory":{"entryPoint":8495,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":8544,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":9404,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":9542,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint8":{"entryPoint":9596,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":9655,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":9883,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":9722,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":9381,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":9104,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint8":{"entryPoint":9630,"id":null,"parameterSlots":2,"returnSlots":1},"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32":{"entryPoint":9287,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":8898,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint256":{"entryPoint":9895,"id":null,"parameterSlots":1,"returnSlots":1},"mod_t_uint256":{"entryPoint":9522,"id":null,"parameterSlots":2,"returnSlots":1},"mod_t_uint8":{"entryPoint":9562,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":9082,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":9500,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":9359,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":8473,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":8823,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:16183:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:76:181","statements":[{"nodeType":"YulAssignment","src":"125:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:181"},"nodeType":"YulFunctionCall","src":"133:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"178:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:181"},"nodeType":"YulFunctionCall","src":"160:25:181"},"nodeType":"YulExpressionStatement","src":"160:25:181"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:181","type":""}],"src":"14:177:181"},{"body":{"nodeType":"YulBlock","src":"295:93:181","statements":[{"nodeType":"YulAssignment","src":"305:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"317:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"328:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"313:3:181"},"nodeType":"YulFunctionCall","src":"313:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"305:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"347:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"362:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"370:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"358:3:181"},"nodeType":"YulFunctionCall","src":"358:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"340:6:181"},"nodeType":"YulFunctionCall","src":"340:42:181"},"nodeType":"YulExpressionStatement","src":"340:42:181"}]},"name":"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"264:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"275:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"286:4:181","type":""}],"src":"196:192:181"},{"body":{"nodeType":"YulBlock","src":"494:76:181","statements":[{"nodeType":"YulAssignment","src":"504:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"516:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"527:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"512:3:181"},"nodeType":"YulFunctionCall","src":"512:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"504:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"546:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"557:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"539:6:181"},"nodeType":"YulFunctionCall","src":"539:25:181"},"nodeType":"YulExpressionStatement","src":"539:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"463:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"474:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"485:4:181","type":""}],"src":"393:177:181"},{"body":{"nodeType":"YulBlock","src":"607:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"624:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"631:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"636:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"627:3:181"},"nodeType":"YulFunctionCall","src":"627:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"617:6:181"},"nodeType":"YulFunctionCall","src":"617:31:181"},"nodeType":"YulExpressionStatement","src":"617:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"664:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"667:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"657:6:181"},"nodeType":"YulFunctionCall","src":"657:15:181"},"nodeType":"YulExpressionStatement","src":"657:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"688:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"691:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"681:6:181"},"nodeType":"YulFunctionCall","src":"681:15:181"},"nodeType":"YulExpressionStatement","src":"681:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"575:127:181"},{"body":{"nodeType":"YulBlock","src":"752:230:181","statements":[{"nodeType":"YulAssignment","src":"762:19:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"778:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"772:5:181"},"nodeType":"YulFunctionCall","src":"772:9:181"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"762:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"790:58:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"812:6:181"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"828:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"834:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"824:3:181"},"nodeType":"YulFunctionCall","src":"824:13:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"843:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"839:3:181"},"nodeType":"YulFunctionCall","src":"839:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"820:3:181"},"nodeType":"YulFunctionCall","src":"820:27:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"808:3:181"},"nodeType":"YulFunctionCall","src":"808:40:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"794:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"923:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"925:16:181"},"nodeType":"YulFunctionCall","src":"925:18:181"},"nodeType":"YulExpressionStatement","src":"925:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"866:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"878:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"863:2:181"},"nodeType":"YulFunctionCall","src":"863:34:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"902:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"914:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"899:2:181"},"nodeType":"YulFunctionCall","src":"899:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"860:2:181"},"nodeType":"YulFunctionCall","src":"860:62:181"},"nodeType":"YulIf","src":"857:88:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"961:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"965:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"954:6:181"},"nodeType":"YulFunctionCall","src":"954:22:181"},"nodeType":"YulExpressionStatement","src":"954:22:181"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"732:4:181","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"741:6:181","type":""}],"src":"707:275:181"},{"body":{"nodeType":"YulBlock","src":"1044:129:181","statements":[{"body":{"nodeType":"YulBlock","src":"1088:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1090:16:181"},"nodeType":"YulFunctionCall","src":"1090:18:181"},"nodeType":"YulExpressionStatement","src":"1090:18:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1060:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1068:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1057:2:181"},"nodeType":"YulFunctionCall","src":"1057:30:181"},"nodeType":"YulIf","src":"1054:56:181"},{"nodeType":"YulAssignment","src":"1119:48:181","value":{"arguments":[{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1139:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1147:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1135:3:181"},"nodeType":"YulFunctionCall","src":"1135:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1156:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1152:3:181"},"nodeType":"YulFunctionCall","src":"1152:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1131:3:181"},"nodeType":"YulFunctionCall","src":"1131:29:181"},{"kind":"number","nodeType":"YulLiteral","src":"1162:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1127:3:181"},"nodeType":"YulFunctionCall","src":"1127:40:181"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"1119:4:181"}]}]},"name":"array_allocation_size_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nodeType":"YulTypedName","src":"1024:6:181","type":""}],"returnVariables":[{"name":"size","nodeType":"YulTypedName","src":"1035:4:181","type":""}],"src":"987:186:181"},{"body":{"nodeType":"YulBlock","src":"1230:410:181","statements":[{"body":{"nodeType":"YulBlock","src":"1279:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1288:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1291:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1281:6:181"},"nodeType":"YulFunctionCall","src":"1281:12:181"},"nodeType":"YulExpressionStatement","src":"1281:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1258:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1266:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1254:3:181"},"nodeType":"YulFunctionCall","src":"1254:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"1273:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1250:3:181"},"nodeType":"YulFunctionCall","src":"1250:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1243:6:181"},"nodeType":"YulFunctionCall","src":"1243:35:181"},"nodeType":"YulIf","src":"1240:55:181"},{"nodeType":"YulVariableDeclaration","src":"1304:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1327:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1314:12:181"},"nodeType":"YulFunctionCall","src":"1314:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1308:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1343:63:181","value":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1402:2:181"}],"functionName":{"name":"array_allocation_size_bytes","nodeType":"YulIdentifier","src":"1374:27:181"},"nodeType":"YulFunctionCall","src":"1374:31:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"1358:15:181"},"nodeType":"YulFunctionCall","src":"1358:48:181"},"variables":[{"name":"array_1","nodeType":"YulTypedName","src":"1347:7:181","type":""}]},{"expression":{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"1422:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1431:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1415:6:181"},"nodeType":"YulFunctionCall","src":"1415:19:181"},"nodeType":"YulExpressionStatement","src":"1415:19:181"},{"body":{"nodeType":"YulBlock","src":"1482:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1491:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1494:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1484:6:181"},"nodeType":"YulFunctionCall","src":"1484:12:181"},"nodeType":"YulExpressionStatement","src":"1484:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1457:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1465:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1453:3:181"},"nodeType":"YulFunctionCall","src":"1453:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1470:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1449:3:181"},"nodeType":"YulFunctionCall","src":"1449:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"1477:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1446:2:181"},"nodeType":"YulFunctionCall","src":"1446:35:181"},"nodeType":"YulIf","src":"1443:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"1524:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"1533:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1520:3:181"},"nodeType":"YulFunctionCall","src":"1520:18:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1544:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1552:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1540:3:181"},"nodeType":"YulFunctionCall","src":"1540:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1559:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1507:12:181"},"nodeType":"YulFunctionCall","src":"1507:55:181"},"nodeType":"YulExpressionStatement","src":"1507:55:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"1586:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1595:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1582:3:181"},"nodeType":"YulFunctionCall","src":"1582:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"1600:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1578:3:181"},"nodeType":"YulFunctionCall","src":"1578:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"1607:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1571:6:181"},"nodeType":"YulFunctionCall","src":"1571:38:181"},"nodeType":"YulExpressionStatement","src":"1571:38:181"},{"nodeType":"YulAssignment","src":"1618:16:181","value":{"name":"array_1","nodeType":"YulIdentifier","src":"1627:7:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1618:5:181"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1204:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"1212:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"1220:5:181","type":""}],"src":"1178:462:181"},{"body":{"nodeType":"YulBlock","src":"1750:434:181","statements":[{"body":{"nodeType":"YulBlock","src":"1796:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1805:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1808:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1798:6:181"},"nodeType":"YulFunctionCall","src":"1798:12:181"},"nodeType":"YulExpressionStatement","src":"1798:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1771:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1780:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1767:3:181"},"nodeType":"YulFunctionCall","src":"1767:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1792:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1763:3:181"},"nodeType":"YulFunctionCall","src":"1763:32:181"},"nodeType":"YulIf","src":"1760:52:181"},{"nodeType":"YulVariableDeclaration","src":"1821:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1848:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1835:12:181"},"nodeType":"YulFunctionCall","src":"1835:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1825:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1867:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1877:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1871:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1922:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1931:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1934:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1924:6:181"},"nodeType":"YulFunctionCall","src":"1924:12:181"},"nodeType":"YulExpressionStatement","src":"1924:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1910:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1918:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1907:2:181"},"nodeType":"YulFunctionCall","src":"1907:14:181"},"nodeType":"YulIf","src":"1904:34:181"},{"nodeType":"YulAssignment","src":"1947:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1978:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1989:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1974:3:181"},"nodeType":"YulFunctionCall","src":"1974:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1998:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"1957:16:181"},"nodeType":"YulFunctionCall","src":"1957:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1947:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2015:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2048:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2059:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2044:3:181"},"nodeType":"YulFunctionCall","src":"2044:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2031:12:181"},"nodeType":"YulFunctionCall","src":"2031:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"2019:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2092:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2101:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2104:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2094:6:181"},"nodeType":"YulFunctionCall","src":"2094:12:181"},"nodeType":"YulExpressionStatement","src":"2094:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"2078:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2088:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2075:2:181"},"nodeType":"YulFunctionCall","src":"2075:16:181"},"nodeType":"YulIf","src":"2072:36:181"},{"nodeType":"YulAssignment","src":"2117:61:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2148:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"2159:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2144:3:181"},"nodeType":"YulFunctionCall","src":"2144:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2170:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"2127:16:181"},"nodeType":"YulFunctionCall","src":"2127:51:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2117:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1708:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1719:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1731:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1739:6:181","type":""}],"src":"1645:539:181"},{"body":{"nodeType":"YulBlock","src":"2268:241:181","statements":[{"body":{"nodeType":"YulBlock","src":"2314:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2323:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2326:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2316:6:181"},"nodeType":"YulFunctionCall","src":"2316:12:181"},"nodeType":"YulExpressionStatement","src":"2316:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2289:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2298:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2285:3:181"},"nodeType":"YulFunctionCall","src":"2285:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2310:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2281:3:181"},"nodeType":"YulFunctionCall","src":"2281:32:181"},"nodeType":"YulIf","src":"2278:52:181"},{"nodeType":"YulVariableDeclaration","src":"2339:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2366:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2353:12:181"},"nodeType":"YulFunctionCall","src":"2353:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2343:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2419:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2428:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2431:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2421:6:181"},"nodeType":"YulFunctionCall","src":"2421:12:181"},"nodeType":"YulExpressionStatement","src":"2421:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2391:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2399:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2388:2:181"},"nodeType":"YulFunctionCall","src":"2388:30:181"},"nodeType":"YulIf","src":"2385:50:181"},{"nodeType":"YulAssignment","src":"2444:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2475:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"2486:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2471:3:181"},"nodeType":"YulFunctionCall","src":"2471:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2495:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"2454:16:181"},"nodeType":"YulFunctionCall","src":"2454:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2444:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2234:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2245:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2257:6:181","type":""}],"src":"2189:320:181"},{"body":{"nodeType":"YulBlock","src":"2559:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"2623:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2632:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2635:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2625:6:181"},"nodeType":"YulFunctionCall","src":"2625:12:181"},"nodeType":"YulExpressionStatement","src":"2625:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2582:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2593:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2608:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2613:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2604:3:181"},"nodeType":"YulFunctionCall","src":"2604:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2617:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2600:3:181"},"nodeType":"YulFunctionCall","src":"2600:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2589:3:181"},"nodeType":"YulFunctionCall","src":"2589:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2579:2:181"},"nodeType":"YulFunctionCall","src":"2579:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2572:6:181"},"nodeType":"YulFunctionCall","src":"2572:50:181"},"nodeType":"YulIf","src":"2569:70:181"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"2548:5:181","type":""}],"src":"2514:131:181"},{"body":{"nodeType":"YulBlock","src":"2720:177:181","statements":[{"body":{"nodeType":"YulBlock","src":"2766:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2775:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2778:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2768:6:181"},"nodeType":"YulFunctionCall","src":"2768:12:181"},"nodeType":"YulExpressionStatement","src":"2768:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2741:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2750:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2737:3:181"},"nodeType":"YulFunctionCall","src":"2737:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2762:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2733:3:181"},"nodeType":"YulFunctionCall","src":"2733:32:181"},"nodeType":"YulIf","src":"2730:52:181"},{"nodeType":"YulVariableDeclaration","src":"2791:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2817:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2804:12:181"},"nodeType":"YulFunctionCall","src":"2804:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2795:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2861:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2836:24:181"},"nodeType":"YulFunctionCall","src":"2836:31:181"},"nodeType":"YulExpressionStatement","src":"2836:31:181"},{"nodeType":"YulAssignment","src":"2876:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"2886:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2876:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2686:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2697:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2709:6:181","type":""}],"src":"2650:247:181"},{"body":{"nodeType":"YulBlock","src":"3003:102:181","statements":[{"nodeType":"YulAssignment","src":"3013:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3025:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3036:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3021:3:181"},"nodeType":"YulFunctionCall","src":"3021:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3013:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3055:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3070:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3086:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3091:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3082:3:181"},"nodeType":"YulFunctionCall","src":"3082:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3095:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3078:3:181"},"nodeType":"YulFunctionCall","src":"3078:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3066:3:181"},"nodeType":"YulFunctionCall","src":"3066:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3048:6:181"},"nodeType":"YulFunctionCall","src":"3048:51:181"},"nodeType":"YulExpressionStatement","src":"3048:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2972:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2983:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2994:4:181","type":""}],"src":"2902:203:181"},{"body":{"nodeType":"YulBlock","src":"3180:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"3226:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3235:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3238:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3228:6:181"},"nodeType":"YulFunctionCall","src":"3228:12:181"},"nodeType":"YulExpressionStatement","src":"3228:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3201:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3210:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3197:3:181"},"nodeType":"YulFunctionCall","src":"3197:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3222:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3193:3:181"},"nodeType":"YulFunctionCall","src":"3193:32:181"},"nodeType":"YulIf","src":"3190:52:181"},{"nodeType":"YulAssignment","src":"3251:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3274:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3261:12:181"},"nodeType":"YulFunctionCall","src":"3261:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3251:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3146:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3157:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3169:6:181","type":""}],"src":"3110:180:181"},{"body":{"nodeType":"YulBlock","src":"3390:92:181","statements":[{"nodeType":"YulAssignment","src":"3400:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3412:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3423:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3408:3:181"},"nodeType":"YulFunctionCall","src":"3408:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3400:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3442:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3467:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3460:6:181"},"nodeType":"YulFunctionCall","src":"3460:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3453:6:181"},"nodeType":"YulFunctionCall","src":"3453:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3435:6:181"},"nodeType":"YulFunctionCall","src":"3435:41:181"},"nodeType":"YulExpressionStatement","src":"3435:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3359:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3370:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3381:4:181","type":""}],"src":"3295:187:181"},{"body":{"nodeType":"YulBlock","src":"3616:102:181","statements":[{"nodeType":"YulAssignment","src":"3626:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3638:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3649:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3634:3:181"},"nodeType":"YulFunctionCall","src":"3634:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3626:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3668:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3683:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3699:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3704:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3695:3:181"},"nodeType":"YulFunctionCall","src":"3695:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3708:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3691:3:181"},"nodeType":"YulFunctionCall","src":"3691:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3679:3:181"},"nodeType":"YulFunctionCall","src":"3679:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3661:6:181"},"nodeType":"YulFunctionCall","src":"3661:51:181"},"nodeType":"YulExpressionStatement","src":"3661:51:181"}]},"name":"abi_encode_tuple_t_contract$_ICheckpointManager_$47056__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3585:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3596:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3607:4:181","type":""}],"src":"3487:231:181"},{"body":{"nodeType":"YulBlock","src":"3848:102:181","statements":[{"nodeType":"YulAssignment","src":"3858:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3870:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3881:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3866:3:181"},"nodeType":"YulFunctionCall","src":"3866:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3858:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3900:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3915:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3931:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3936:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3927:3:181"},"nodeType":"YulFunctionCall","src":"3927:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3940:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3923:3:181"},"nodeType":"YulFunctionCall","src":"3923:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3911:3:181"},"nodeType":"YulFunctionCall","src":"3911:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3893:6:181"},"nodeType":"YulFunctionCall","src":"3893:51:181"},"nodeType":"YulExpressionStatement","src":"3893:51:181"}]},"name":"abi_encode_tuple_t_contract$_IFxStateSender_$47038__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3817:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3828:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3839:4:181","type":""}],"src":"3723:227:181"},{"body":{"nodeType":"YulBlock","src":"4129:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4146:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4157:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4139:6:181"},"nodeType":"YulFunctionCall","src":"4139:21:181"},"nodeType":"YulExpressionStatement","src":"4139:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4180:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4191:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4176:3:181"},"nodeType":"YulFunctionCall","src":"4176:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4196:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4169:6:181"},"nodeType":"YulFunctionCall","src":"4169:30:181"},"nodeType":"YulExpressionStatement","src":"4169:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4219:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4230:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4215:3:181"},"nodeType":"YulFunctionCall","src":"4215:18:181"},{"hexValue":"21726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"4235:14:181","type":"","value":"!rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4208:6:181"},"nodeType":"YulFunctionCall","src":"4208:42:181"},"nodeType":"YulExpressionStatement","src":"4208:42:181"},{"nodeType":"YulAssignment","src":"4259:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4271:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4282:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4267:3:181"},"nodeType":"YulFunctionCall","src":"4267:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4259:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4106:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4120:4:181","type":""}],"src":"3955:336:181"},{"body":{"nodeType":"YulBlock","src":"4362:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"4372:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4381:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"4376:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4441:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4466:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"4471:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4462:3:181"},"nodeType":"YulFunctionCall","src":"4462:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4485:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"4490:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4481:3:181"},"nodeType":"YulFunctionCall","src":"4481:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4475:5:181"},"nodeType":"YulFunctionCall","src":"4475:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4455:6:181"},"nodeType":"YulFunctionCall","src":"4455:39:181"},"nodeType":"YulExpressionStatement","src":"4455:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4402:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"4405:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4399:2:181"},"nodeType":"YulFunctionCall","src":"4399:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4413:19:181","statements":[{"nodeType":"YulAssignment","src":"4415:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4424:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"4427:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4420:3:181"},"nodeType":"YulFunctionCall","src":"4420:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"4415:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"4395:3:181","statements":[]},"src":"4391:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4524:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"4529:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4520:3:181"},"nodeType":"YulFunctionCall","src":"4520:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"4538:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4513:6:181"},"nodeType":"YulFunctionCall","src":"4513:27:181"},"nodeType":"YulExpressionStatement","src":"4513:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"4340:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"4345:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"4350:6:181","type":""}],"src":"4296:250:181"},{"body":{"nodeType":"YulBlock","src":"4600:221:181","statements":[{"nodeType":"YulVariableDeclaration","src":"4610:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4630:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4624:5:181"},"nodeType":"YulFunctionCall","src":"4624:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"4614:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4652:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"4657:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4645:6:181"},"nodeType":"YulFunctionCall","src":"4645:19:181"},"nodeType":"YulExpressionStatement","src":"4645:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4712:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"4719:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4708:3:181"},"nodeType":"YulFunctionCall","src":"4708:16:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4730:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"4735:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4726:3:181"},"nodeType":"YulFunctionCall","src":"4726:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"4742:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"4673:34:181"},"nodeType":"YulFunctionCall","src":"4673:76:181"},"nodeType":"YulExpressionStatement","src":"4673:76:181"},{"nodeType":"YulAssignment","src":"4758:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4773:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4786:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"4794:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4782:3:181"},"nodeType":"YulFunctionCall","src":"4782:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4803:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4799:3:181"},"nodeType":"YulFunctionCall","src":"4799:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4778:3:181"},"nodeType":"YulFunctionCall","src":"4778:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4769:3:181"},"nodeType":"YulFunctionCall","src":"4769:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"4810:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4765:3:181"},"nodeType":"YulFunctionCall","src":"4765:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"4758:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4577:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4584:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"4592:3:181","type":""}],"src":"4551:270:181"},{"body":{"nodeType":"YulBlock","src":"5019:281:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5036:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5047:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5029:6:181"},"nodeType":"YulFunctionCall","src":"5029:21:181"},"nodeType":"YulExpressionStatement","src":"5029:21:181"},{"nodeType":"YulVariableDeclaration","src":"5059:58:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5090:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5102:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5113:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5098:3:181"},"nodeType":"YulFunctionCall","src":"5098:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"5073:16:181"},"nodeType":"YulFunctionCall","src":"5073:44:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"5063:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5137:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5148:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5133:3:181"},"nodeType":"YulFunctionCall","src":"5133:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"5157:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5165:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5153:3:181"},"nodeType":"YulFunctionCall","src":"5153:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5126:6:181"},"nodeType":"YulFunctionCall","src":"5126:50:181"},"nodeType":"YulExpressionStatement","src":"5126:50:181"},{"nodeType":"YulAssignment","src":"5185:40:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"5210:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"5218:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"5193:16:181"},"nodeType":"YulFunctionCall","src":"5193:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5185:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5245:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5256:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5241:3:181"},"nodeType":"YulFunctionCall","src":"5241:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"5265:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5281:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5286:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5277:3:181"},"nodeType":"YulFunctionCall","src":"5277:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5290:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5273:3:181"},"nodeType":"YulFunctionCall","src":"5273:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5261:3:181"},"nodeType":"YulFunctionCall","src":"5261:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5234:6:181"},"nodeType":"YulFunctionCall","src":"5234:60:181"},"nodeType":"YulExpressionStatement","src":"5234:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4972:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4983:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4991:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4999:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5010:4:181","type":""}],"src":"4826:474:181"},{"body":{"nodeType":"YulBlock","src":"5479:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5496:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5507:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5489:6:181"},"nodeType":"YulFunctionCall","src":"5489:21:181"},"nodeType":"YulExpressionStatement","src":"5489:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5530:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5541:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5526:3:181"},"nodeType":"YulFunctionCall","src":"5526:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5546:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5519:6:181"},"nodeType":"YulFunctionCall","src":"5519:29:181"},"nodeType":"YulExpressionStatement","src":"5519:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5568:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5579:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5564:3:181"},"nodeType":"YulFunctionCall","src":"5564:18:181"},{"hexValue":"21414d42","kind":"string","nodeType":"YulLiteral","src":"5584:6:181","type":"","value":"!AMB"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5557:6:181"},"nodeType":"YulFunctionCall","src":"5557:34:181"},"nodeType":"YulExpressionStatement","src":"5557:34:181"},{"nodeType":"YulAssignment","src":"5600:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5612:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5623:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5608:3:181"},"nodeType":"YulFunctionCall","src":"5608:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5600:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5456:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5470:4:181","type":""}],"src":"5305:327:181"},{"body":{"nodeType":"YulBlock","src":"5784:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5801:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5812:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5794:6:181"},"nodeType":"YulFunctionCall","src":"5794:21:181"},"nodeType":"YulExpressionStatement","src":"5794:21:181"},{"nodeType":"YulAssignment","src":"5824:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5849:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5861:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5872:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5857:3:181"},"nodeType":"YulFunctionCall","src":"5857:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"5832:16:181"},"nodeType":"YulFunctionCall","src":"5832:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5824:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5896:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5907:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5892:3:181"},"nodeType":"YulFunctionCall","src":"5892:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"5916:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5932:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5937:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5928:3:181"},"nodeType":"YulFunctionCall","src":"5928:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5941:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5924:3:181"},"nodeType":"YulFunctionCall","src":"5924:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5912:3:181"},"nodeType":"YulFunctionCall","src":"5912:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5885:6:181"},"nodeType":"YulFunctionCall","src":"5885:60:181"},"nodeType":"YulExpressionStatement","src":"5885:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5745:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5756:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5764:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5775:4:181","type":""}],"src":"5637:314:181"},{"body":{"nodeType":"YulBlock","src":"5988:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6005:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6012:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"6017:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6008:3:181"},"nodeType":"YulFunctionCall","src":"6008:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5998:6:181"},"nodeType":"YulFunctionCall","src":"5998:31:181"},"nodeType":"YulExpressionStatement","src":"5998:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6045:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6048:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6038:6:181"},"nodeType":"YulFunctionCall","src":"6038:15:181"},"nodeType":"YulExpressionStatement","src":"6038:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6069:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6072:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6062:6:181"},"nodeType":"YulFunctionCall","src":"6062:15:181"},"nodeType":"YulExpressionStatement","src":"6062:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"5956:127:181"},{"body":{"nodeType":"YulBlock","src":"6137:79:181","statements":[{"nodeType":"YulAssignment","src":"6147:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6159:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"6162:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6155:3:181"},"nodeType":"YulFunctionCall","src":"6155:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"6147:4:181"}]},{"body":{"nodeType":"YulBlock","src":"6188:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6190:16:181"},"nodeType":"YulFunctionCall","src":"6190:18:181"},"nodeType":"YulExpressionStatement","src":"6190:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"6179:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"6185:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6176:2:181"},"nodeType":"YulFunctionCall","src":"6176:11:181"},"nodeType":"YulIf","src":"6173:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"6119:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"6122:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"6128:4:181","type":""}],"src":"6088:128:181"},{"body":{"nodeType":"YulBlock","src":"6350:175:181","statements":[{"nodeType":"YulAssignment","src":"6360:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6372:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6383:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6368:3:181"},"nodeType":"YulFunctionCall","src":"6368:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6360:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"6395:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6413:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6418:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6409:3:181"},"nodeType":"YulFunctionCall","src":"6409:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"6422:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6405:3:181"},"nodeType":"YulFunctionCall","src":"6405:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6399:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6440:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6455:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6463:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6451:3:181"},"nodeType":"YulFunctionCall","src":"6451:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6433:6:181"},"nodeType":"YulFunctionCall","src":"6433:34:181"},"nodeType":"YulExpressionStatement","src":"6433:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6487:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6498:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6483:3:181"},"nodeType":"YulFunctionCall","src":"6483:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6507:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6515:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6503:3:181"},"nodeType":"YulFunctionCall","src":"6503:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6476:6:181"},"nodeType":"YulFunctionCall","src":"6476:43:181"},"nodeType":"YulExpressionStatement","src":"6476:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6311:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6322:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6330:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6341:4:181","type":""}],"src":"6221:304:181"},{"body":{"nodeType":"YulBlock","src":"6704:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6721:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6732:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6714:6:181"},"nodeType":"YulFunctionCall","src":"6714:21:181"},"nodeType":"YulExpressionStatement","src":"6714:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6755:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6766:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6751:3:181"},"nodeType":"YulFunctionCall","src":"6751:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6771:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6744:6:181"},"nodeType":"YulFunctionCall","src":"6744:30:181"},"nodeType":"YulExpressionStatement","src":"6744:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6794:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6805:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6790:3:181"},"nodeType":"YulFunctionCall","src":"6790:18:181"},{"hexValue":"2164617461206c656e677468","kind":"string","nodeType":"YulLiteral","src":"6810:14:181","type":"","value":"!data length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6783:6:181"},"nodeType":"YulFunctionCall","src":"6783:42:181"},"nodeType":"YulExpressionStatement","src":"6783:42:181"},{"nodeType":"YulAssignment","src":"6834:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6846:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6857:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6842:3:181"},"nodeType":"YulFunctionCall","src":"6842:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6834:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6681:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6695:4:181","type":""}],"src":"6530:336:181"},{"body":{"nodeType":"YulBlock","src":"7064:251:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7081:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"7086:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7074:6:181"},"nodeType":"YulFunctionCall","src":"7074:19:181"},"nodeType":"YulExpressionStatement","src":"7074:19:181"},{"nodeType":"YulVariableDeclaration","src":"7102:27:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"7122:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7116:5:181"},"nodeType":"YulFunctionCall","src":"7116:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"7106:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"7177:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"7185:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7173:3:181"},"nodeType":"YulFunctionCall","src":"7173:15:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7194:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"7199:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7190:3:181"},"nodeType":"YulFunctionCall","src":"7190:12:181"},{"name":"length","nodeType":"YulIdentifier","src":"7204:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"7138:34:181"},"nodeType":"YulFunctionCall","src":"7138:73:181"},"nodeType":"YulExpressionStatement","src":"7138:73:181"},{"nodeType":"YulVariableDeclaration","src":"7220:26:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7234:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"7239:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7230:3:181"},"nodeType":"YulFunctionCall","src":"7230:16:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7224:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"7266:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"7270:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7262:3:181"},"nodeType":"YulFunctionCall","src":"7262:11:181"},{"name":"value2","nodeType":"YulIdentifier","src":"7275:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7255:6:181"},"nodeType":"YulFunctionCall","src":"7255:27:181"},"nodeType":"YulExpressionStatement","src":"7255:27:181"},{"nodeType":"YulAssignment","src":"7291:18:181","value":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"7302:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"7306:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7298:3:181"},"nodeType":"YulFunctionCall","src":"7298:11:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"7291:3:181"}]}]},"name":"abi_encode_tuple_packed_t_uint256_t_bytes_memory_ptr_t_uint256__to_t_uint256_t_bytes_memory_ptr_t_uint256__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"7024:3:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7029:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7037:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7045:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"7056:3:181","type":""}],"src":"6871:444:181"},{"body":{"nodeType":"YulBlock","src":"7494:226:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7511:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7522:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7504:6:181"},"nodeType":"YulFunctionCall","src":"7504:21:181"},"nodeType":"YulExpressionStatement","src":"7504:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7545:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7556:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7541:3:181"},"nodeType":"YulFunctionCall","src":"7541:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7561:2:181","type":"","value":"36"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7534:6:181"},"nodeType":"YulFunctionCall","src":"7534:30:181"},"nodeType":"YulExpressionStatement","src":"7534:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7584:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7595:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7580:3:181"},"nodeType":"YulFunctionCall","src":"7580:18:181"},{"hexValue":"4678526f6f7454756e6e656c3a20455849545f414c52454144595f50524f4345","kind":"string","nodeType":"YulLiteral","src":"7600:34:181","type":"","value":"FxRootTunnel: EXIT_ALREADY_PROCE"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7573:6:181"},"nodeType":"YulFunctionCall","src":"7573:62:181"},"nodeType":"YulExpressionStatement","src":"7573:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7655:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7666:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7651:3:181"},"nodeType":"YulFunctionCall","src":"7651:18:181"},{"hexValue":"53534544","kind":"string","nodeType":"YulLiteral","src":"7671:6:181","type":"","value":"SSED"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7644:6:181"},"nodeType":"YulFunctionCall","src":"7644:34:181"},"nodeType":"YulExpressionStatement","src":"7644:34:181"},{"nodeType":"YulAssignment","src":"7687:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7699:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7710:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7695:3:181"},"nodeType":"YulFunctionCall","src":"7695:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7687:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_346ac4d916e6e0ff921470f98a98a708e34aa5c8a93b4076794f133e004e36a5__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7471:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7485:4:181","type":""}],"src":"7320:400:181"},{"body":{"nodeType":"YulBlock","src":"7899:227:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7916:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7927:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7909:6:181"},"nodeType":"YulFunctionCall","src":"7909:21:181"},"nodeType":"YulExpressionStatement","src":"7909:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7950:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7961:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7946:3:181"},"nodeType":"YulFunctionCall","src":"7946:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7966:2:181","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7939:6:181"},"nodeType":"YulFunctionCall","src":"7939:30:181"},"nodeType":"YulExpressionStatement","src":"7939:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7989:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8000:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7985:3:181"},"nodeType":"YulFunctionCall","src":"7985:18:181"},{"hexValue":"4678526f6f7454756e6e656c3a20494e56414c49445f46585f4348494c445f54","kind":"string","nodeType":"YulLiteral","src":"8005:34:181","type":"","value":"FxRootTunnel: INVALID_FX_CHILD_T"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7978:6:181"},"nodeType":"YulFunctionCall","src":"7978:62:181"},"nodeType":"YulExpressionStatement","src":"7978:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8060:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8071:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8056:3:181"},"nodeType":"YulFunctionCall","src":"8056:18:181"},{"hexValue":"554e4e454c","kind":"string","nodeType":"YulLiteral","src":"8076:7:181","type":"","value":"UNNEL"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8049:6:181"},"nodeType":"YulFunctionCall","src":"8049:35:181"},"nodeType":"YulExpressionStatement","src":"8049:35:181"},{"nodeType":"YulAssignment","src":"8093:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8105:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8116:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8101:3:181"},"nodeType":"YulFunctionCall","src":"8101:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8093:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e20402930bc2a62dcad7f5124f56dbfe0c166bf9b0c73c01cd54b14a41c30523__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7876:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7890:4:181","type":""}],"src":"7725:401:181"},{"body":{"nodeType":"YulBlock","src":"8305:225:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8322:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8333:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8315:6:181"},"nodeType":"YulFunctionCall","src":"8315:21:181"},"nodeType":"YulExpressionStatement","src":"8315:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8356:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8367:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8352:3:181"},"nodeType":"YulFunctionCall","src":"8352:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8372:2:181","type":"","value":"35"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8345:6:181"},"nodeType":"YulFunctionCall","src":"8345:30:181"},"nodeType":"YulExpressionStatement","src":"8345:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8395:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8406:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8391:3:181"},"nodeType":"YulFunctionCall","src":"8391:18:181"},{"hexValue":"4678526f6f7454756e6e656c3a20494e56414c49445f524543454950545f5052","kind":"string","nodeType":"YulLiteral","src":"8411:34:181","type":"","value":"FxRootTunnel: INVALID_RECEIPT_PR"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8384:6:181"},"nodeType":"YulFunctionCall","src":"8384:62:181"},"nodeType":"YulExpressionStatement","src":"8384:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8466:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8477:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8462:3:181"},"nodeType":"YulFunctionCall","src":"8462:18:181"},{"hexValue":"4f4f46","kind":"string","nodeType":"YulLiteral","src":"8482:5:181","type":"","value":"OOF"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8455:6:181"},"nodeType":"YulFunctionCall","src":"8455:33:181"},"nodeType":"YulExpressionStatement","src":"8455:33:181"},{"nodeType":"YulAssignment","src":"8497:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8509:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8520:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8505:3:181"},"nodeType":"YulFunctionCall","src":"8505:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8497:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2ce2fedc24e79d64f58937c7672062618900d7fda5b396849b04c1ef7692f676__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8282:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8296:4:181","type":""}],"src":"8131:399:181"},{"body":{"nodeType":"YulBlock","src":"8709:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8726:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8737:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8719:6:181"},"nodeType":"YulFunctionCall","src":"8719:21:181"},"nodeType":"YulExpressionStatement","src":"8719:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8760:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8771:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8756:3:181"},"nodeType":"YulFunctionCall","src":"8756:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8776:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8749:6:181"},"nodeType":"YulFunctionCall","src":"8749:30:181"},"nodeType":"YulExpressionStatement","src":"8749:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8799:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8810:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8795:3:181"},"nodeType":"YulFunctionCall","src":"8795:18:181"},{"hexValue":"4678526f6f7454756e6e656c3a20494e56414c49445f5349474e4154555245","kind":"string","nodeType":"YulLiteral","src":"8815:33:181","type":"","value":"FxRootTunnel: INVALID_SIGNATURE"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8788:6:181"},"nodeType":"YulFunctionCall","src":"8788:61:181"},"nodeType":"YulExpressionStatement","src":"8788:61:181"},{"nodeType":"YulAssignment","src":"8858:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8870:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8881:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8866:3:181"},"nodeType":"YulFunctionCall","src":"8866:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8858:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_bb7a552d748e26b221e0250d9c5275afe2a0161f67e052c27f605992e65ad73d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8686:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8700:4:181","type":""}],"src":"8535:355:181"},{"body":{"nodeType":"YulBlock","src":"8985:557:181","statements":[{"body":{"nodeType":"YulBlock","src":"9031:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9040:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9043:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9033:6:181"},"nodeType":"YulFunctionCall","src":"9033:12:181"},"nodeType":"YulExpressionStatement","src":"9033:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9006:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"9015:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9002:3:181"},"nodeType":"YulFunctionCall","src":"9002:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"9027:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8998:3:181"},"nodeType":"YulFunctionCall","src":"8998:32:181"},"nodeType":"YulIf","src":"8995:52:181"},{"nodeType":"YulVariableDeclaration","src":"9056:30:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9076:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9070:5:181"},"nodeType":"YulFunctionCall","src":"9070:16:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"9060:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9129:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9138:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9141:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9131:6:181"},"nodeType":"YulFunctionCall","src":"9131:12:181"},"nodeType":"YulExpressionStatement","src":"9131:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9101:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"9109:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9098:2:181"},"nodeType":"YulFunctionCall","src":"9098:30:181"},"nodeType":"YulIf","src":"9095:50:181"},{"nodeType":"YulVariableDeclaration","src":"9154:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9168:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"9179:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9164:3:181"},"nodeType":"YulFunctionCall","src":"9164:22:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9158:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9234:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9243:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9246:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9236:6:181"},"nodeType":"YulFunctionCall","src":"9236:12:181"},"nodeType":"YulExpressionStatement","src":"9236:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"9213:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"9217:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9209:3:181"},"nodeType":"YulFunctionCall","src":"9209:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9224:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9205:3:181"},"nodeType":"YulFunctionCall","src":"9205:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9198:6:181"},"nodeType":"YulFunctionCall","src":"9198:35:181"},"nodeType":"YulIf","src":"9195:55:181"},{"nodeType":"YulVariableDeclaration","src":"9259:19:181","value":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"9275:2:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9269:5:181"},"nodeType":"YulFunctionCall","src":"9269:9:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"9263:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9287:61:181","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"9344:2:181"}],"functionName":{"name":"array_allocation_size_bytes","nodeType":"YulIdentifier","src":"9316:27:181"},"nodeType":"YulFunctionCall","src":"9316:31:181"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"9300:15:181"},"nodeType":"YulFunctionCall","src":"9300:48:181"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"9291:5:181","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"9364:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"9371:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9357:6:181"},"nodeType":"YulFunctionCall","src":"9357:17:181"},"nodeType":"YulExpressionStatement","src":"9357:17:181"},{"body":{"nodeType":"YulBlock","src":"9420:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9429:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9432:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9422:6:181"},"nodeType":"YulFunctionCall","src":"9422:12:181"},"nodeType":"YulExpressionStatement","src":"9422:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"9397:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"9401:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9393:3:181"},"nodeType":"YulFunctionCall","src":"9393:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"9406:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9389:3:181"},"nodeType":"YulFunctionCall","src":"9389:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9411:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9386:2:181"},"nodeType":"YulFunctionCall","src":"9386:33:181"},"nodeType":"YulIf","src":"9383:53:181"},{"expression":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"9484:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"9488:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9480:3:181"},"nodeType":"YulFunctionCall","src":"9480:11:181"},{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"9497:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"9504:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9493:3:181"},"nodeType":"YulFunctionCall","src":"9493:14:181"},{"name":"_2","nodeType":"YulIdentifier","src":"9509:2:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"9445:34:181"},"nodeType":"YulFunctionCall","src":"9445:67:181"},"nodeType":"YulExpressionStatement","src":"9445:67:181"},{"nodeType":"YulAssignment","src":"9521:15:181","value":{"name":"array","nodeType":"YulIdentifier","src":"9531:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9521:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8951:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8962:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8974:6:181","type":""}],"src":"8895:647:181"},{"body":{"nodeType":"YulBlock","src":"9721:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9738:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9749:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9731:6:181"},"nodeType":"YulFunctionCall","src":"9731:21:181"},"nodeType":"YulExpressionStatement","src":"9731:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9772:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9783:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9768:3:181"},"nodeType":"YulFunctionCall","src":"9768:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9788:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9761:6:181"},"nodeType":"YulFunctionCall","src":"9761:29:181"},"nodeType":"YulExpressionStatement","src":"9761:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9810:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9821:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9806:3:181"},"nodeType":"YulFunctionCall","src":"9806:18:181"},{"hexValue":"216c656e677468","kind":"string","nodeType":"YulLiteral","src":"9826:9:181","type":"","value":"!length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9799:6:181"},"nodeType":"YulFunctionCall","src":"9799:37:181"},"nodeType":"YulExpressionStatement","src":"9799:37:181"},{"nodeType":"YulAssignment","src":"9845:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9857:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9868:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9853:3:181"},"nodeType":"YulFunctionCall","src":"9853:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9845:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9698:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9712:4:181","type":""}],"src":"9547:330:181"},{"body":{"nodeType":"YulBlock","src":"9976:203:181","statements":[{"nodeType":"YulVariableDeclaration","src":"9986:26:181","value":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"10006:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10000:5:181"},"nodeType":"YulFunctionCall","src":"10000:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"9990:6:181","type":""}]},{"nodeType":"YulAssignment","src":"10021:32:181","value":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"10040:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"10047:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10036:3:181"},"nodeType":"YulFunctionCall","src":"10036:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10030:5:181"},"nodeType":"YulFunctionCall","src":"10030:23:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"10021:5:181"}]},{"body":{"nodeType":"YulBlock","src":"10090:83:181","statements":[{"nodeType":"YulAssignment","src":"10104:59:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10117:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10132:1:181","type":"","value":"3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10139:4:181","type":"","value":"0x20"},{"name":"length","nodeType":"YulIdentifier","src":"10145:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10135:3:181"},"nodeType":"YulFunctionCall","src":"10135:17:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10128:3:181"},"nodeType":"YulFunctionCall","src":"10128:25:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10159:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10155:3:181"},"nodeType":"YulFunctionCall","src":"10155:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10124:3:181"},"nodeType":"YulFunctionCall","src":"10124:38:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10113:3:181"},"nodeType":"YulFunctionCall","src":"10113:50:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"10104:5:181"}]}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"10068:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10076:4:181","type":"","value":"0x20"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10065:2:181"},"nodeType":"YulFunctionCall","src":"10065:16:181"},"nodeType":"YulIf","src":"10062:111:181"}]},"name":"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nodeType":"YulTypedName","src":"9956:5:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"9966:5:181","type":""}],"src":"9882:297:181"},{"body":{"nodeType":"YulBlock","src":"10311:136:181","statements":[{"nodeType":"YulAssignment","src":"10321:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10333:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10344:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10329:3:181"},"nodeType":"YulFunctionCall","src":"10329:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10321:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10363:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10378:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10386:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10374:3:181"},"nodeType":"YulFunctionCall","src":"10374:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10356:6:181"},"nodeType":"YulFunctionCall","src":"10356:42:181"},"nodeType":"YulExpressionStatement","src":"10356:42:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10418:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10429:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10414:3:181"},"nodeType":"YulFunctionCall","src":"10414:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"10434:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10407:6:181"},"nodeType":"YulFunctionCall","src":"10407:34:181"},"nodeType":"YulExpressionStatement","src":"10407:34:181"}]},"name":"abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10272:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10283:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10291:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10302:4:181","type":""}],"src":"10184:263:181"},{"body":{"nodeType":"YulBlock","src":"10599:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10616:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10631:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10647:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"10652:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10643:3:181"},"nodeType":"YulFunctionCall","src":"10643:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"10656:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10639:3:181"},"nodeType":"YulFunctionCall","src":"10639:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10627:3:181"},"nodeType":"YulFunctionCall","src":"10627:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10609:6:181"},"nodeType":"YulFunctionCall","src":"10609:51:181"},"nodeType":"YulExpressionStatement","src":"10609:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10680:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10691:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10676:3:181"},"nodeType":"YulFunctionCall","src":"10676:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10696:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10669:6:181"},"nodeType":"YulFunctionCall","src":"10669:30:181"},"nodeType":"YulExpressionStatement","src":"10669:30:181"},{"nodeType":"YulAssignment","src":"10708:52:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10733:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10745:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10756:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10741:3:181"},"nodeType":"YulFunctionCall","src":"10741:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"10716:16:181"},"nodeType":"YulFunctionCall","src":"10716:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10708:4:181"}]}]},"name":"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10560:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10571:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10579:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10590:4:181","type":""}],"src":"10452:314:181"},{"body":{"nodeType":"YulBlock","src":"10945:232:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10962:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10973:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10955:6:181"},"nodeType":"YulFunctionCall","src":"10955:21:181"},"nodeType":"YulExpressionStatement","src":"10955:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10996:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11007:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10992:3:181"},"nodeType":"YulFunctionCall","src":"10992:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11012:2:181","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10985:6:181"},"nodeType":"YulFunctionCall","src":"10985:30:181"},"nodeType":"YulExpressionStatement","src":"10985:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11035:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11046:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11031:3:181"},"nodeType":"YulFunctionCall","src":"11031:18:181"},{"hexValue":"467842617365526f6f7454756e6e656c3a204348494c445f54554e4e454c5f41","kind":"string","nodeType":"YulLiteral","src":"11051:34:181","type":"","value":"FxBaseRootTunnel: CHILD_TUNNEL_A"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11024:6:181"},"nodeType":"YulFunctionCall","src":"11024:62:181"},"nodeType":"YulExpressionStatement","src":"11024:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11106:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11117:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11102:3:181"},"nodeType":"YulFunctionCall","src":"11102:18:181"},{"hexValue":"4c52454144595f534554","kind":"string","nodeType":"YulLiteral","src":"11122:12:181","type":"","value":"LREADY_SET"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11095:6:181"},"nodeType":"YulFunctionCall","src":"11095:40:181"},"nodeType":"YulExpressionStatement","src":"11095:40:181"},{"nodeType":"YulAssignment","src":"11144:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11156:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11167:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11152:3:181"},"nodeType":"YulFunctionCall","src":"11152:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11144:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1dc310af12cba7b1018a7df66f4a5d342cf94c76291e27400d58d59cb64eb899__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10922:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10936:4:181","type":""}],"src":"10771:406:181"},{"body":{"nodeType":"YulBlock","src":"11214:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11231:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11238:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"11243:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11234:3:181"},"nodeType":"YulFunctionCall","src":"11234:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11224:6:181"},"nodeType":"YulFunctionCall","src":"11224:31:181"},"nodeType":"YulExpressionStatement","src":"11224:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11271:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"11274:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11264:6:181"},"nodeType":"YulFunctionCall","src":"11264:15:181"},"nodeType":"YulExpressionStatement","src":"11264:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11295:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11298:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11288:6:181"},"nodeType":"YulFunctionCall","src":"11288:15:181"},"nodeType":"YulExpressionStatement","src":"11288:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"11182:127:181"},{"body":{"nodeType":"YulBlock","src":"11366:116:181","statements":[{"nodeType":"YulAssignment","src":"11376:20:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11391:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"11394:1:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"11387:3:181"},"nodeType":"YulFunctionCall","src":"11387:9:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"11376:7:181"}]},{"body":{"nodeType":"YulBlock","src":"11454:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11456:16:181"},"nodeType":"YulFunctionCall","src":"11456:18:181"},"nodeType":"YulExpressionStatement","src":"11456:18:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11425:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11418:6:181"},"nodeType":"YulFunctionCall","src":"11418:9:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11432:1:181"},{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"11439:7:181"},{"name":"x","nodeType":"YulIdentifier","src":"11448:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"11435:3:181"},"nodeType":"YulFunctionCall","src":"11435:15:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"11429:2:181"},"nodeType":"YulFunctionCall","src":"11429:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"11415:2:181"},"nodeType":"YulFunctionCall","src":"11415:37:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11408:6:181"},"nodeType":"YulFunctionCall","src":"11408:45:181"},"nodeType":"YulIf","src":"11405:71:181"}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11345:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"11348:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"11354:7:181","type":""}],"src":"11314:168:181"},{"body":{"nodeType":"YulBlock","src":"11535:77:181","statements":[{"nodeType":"YulAssignment","src":"11545:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11556:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"11559:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11552:3:181"},"nodeType":"YulFunctionCall","src":"11552:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"11545:3:181"}]},{"body":{"nodeType":"YulBlock","src":"11584:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11586:16:181"},"nodeType":"YulFunctionCall","src":"11586:18:181"},"nodeType":"YulExpressionStatement","src":"11586:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11576:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"11579:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11573:2:181"},"nodeType":"YulFunctionCall","src":"11573:10:181"},"nodeType":"YulIf","src":"11570:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11518:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"11521:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"11527:3:181","type":""}],"src":"11487:125:181"},{"body":{"nodeType":"YulBlock","src":"11766:348:181","statements":[{"body":{"nodeType":"YulBlock","src":"11813:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11822:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11825:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11815:6:181"},"nodeType":"YulFunctionCall","src":"11815:12:181"},"nodeType":"YulExpressionStatement","src":"11815:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11787:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"11796:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11783:3:181"},"nodeType":"YulFunctionCall","src":"11783:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"11808:3:181","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11779:3:181"},"nodeType":"YulFunctionCall","src":"11779:33:181"},"nodeType":"YulIf","src":"11776:53:181"},{"nodeType":"YulAssignment","src":"11838:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11854:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11848:5:181"},"nodeType":"YulFunctionCall","src":"11848:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11838:6:181"}]},{"nodeType":"YulAssignment","src":"11873:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11893:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11904:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11889:3:181"},"nodeType":"YulFunctionCall","src":"11889:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11883:5:181"},"nodeType":"YulFunctionCall","src":"11883:25:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"11873:6:181"}]},{"nodeType":"YulAssignment","src":"11917:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11937:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11948:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11933:3:181"},"nodeType":"YulFunctionCall","src":"11933:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11927:5:181"},"nodeType":"YulFunctionCall","src":"11927:25:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"11917:6:181"}]},{"nodeType":"YulAssignment","src":"11961:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11981:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11992:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11977:3:181"},"nodeType":"YulFunctionCall","src":"11977:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11971:5:181"},"nodeType":"YulFunctionCall","src":"11971:25:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"11961:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"12005:39:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12028:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12039:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12024:3:181"},"nodeType":"YulFunctionCall","src":"12024:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12018:5:181"},"nodeType":"YulFunctionCall","src":"12018:26:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12009:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12078:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12053:24:181"},"nodeType":"YulFunctionCall","src":"12053:31:181"},"nodeType":"YulExpressionStatement","src":"12053:31:181"},{"nodeType":"YulAssignment","src":"12093:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"12103:5:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"12093:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint256t_uint256t_uint256t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11700:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11711:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11723:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11731:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11739:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11747:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"11755:6:181","type":""}],"src":"11617:497:181"},{"body":{"nodeType":"YulBlock","src":"12322:175:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12339:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"12344:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12332:6:181"},"nodeType":"YulFunctionCall","src":"12332:19:181"},"nodeType":"YulExpressionStatement","src":"12332:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12371:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"12376:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12367:3:181"},"nodeType":"YulFunctionCall","src":"12367:12:181"},{"name":"value1","nodeType":"YulIdentifier","src":"12381:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12360:6:181"},"nodeType":"YulFunctionCall","src":"12360:28:181"},"nodeType":"YulExpressionStatement","src":"12360:28:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12408:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"12413:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12404:3:181"},"nodeType":"YulFunctionCall","src":"12404:12:181"},{"name":"value2","nodeType":"YulIdentifier","src":"12418:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12397:6:181"},"nodeType":"YulFunctionCall","src":"12397:28:181"},"nodeType":"YulExpressionStatement","src":"12397:28:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12445:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"12450:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12441:3:181"},"nodeType":"YulFunctionCall","src":"12441:12:181"},{"name":"value3","nodeType":"YulIdentifier","src":"12455:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12434:6:181"},"nodeType":"YulFunctionCall","src":"12434:28:181"},"nodeType":"YulExpressionStatement","src":"12434:28:181"},{"nodeType":"YulAssignment","src":"12471:20:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12482:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"12487:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12478:3:181"},"nodeType":"YulFunctionCall","src":"12478:13:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"12471:3:181"}]}]},"name":"abi_encode_tuple_packed_t_uint256_t_uint256_t_bytes32_t_bytes32__to_t_uint256_t_uint256_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"12274:3:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12279:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12287:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12295:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12303:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"12314:3:181","type":""}],"src":"12119:378:181"},{"body":{"nodeType":"YulBlock","src":"12676:178:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12693:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12704:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12686:6:181"},"nodeType":"YulFunctionCall","src":"12686:21:181"},"nodeType":"YulExpressionStatement","src":"12686:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12727:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12738:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12723:3:181"},"nodeType":"YulFunctionCall","src":"12723:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12743:2:181","type":"","value":"28"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12716:6:181"},"nodeType":"YulFunctionCall","src":"12716:30:181"},"nodeType":"YulExpressionStatement","src":"12716:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12766:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12777:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12762:3:181"},"nodeType":"YulFunctionCall","src":"12762:18:181"},{"hexValue":"4678526f6f7454756e6e656c3a20494e56414c49445f484541444552","kind":"string","nodeType":"YulLiteral","src":"12782:30:181","type":"","value":"FxRootTunnel: INVALID_HEADER"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12755:6:181"},"nodeType":"YulFunctionCall","src":"12755:58:181"},"nodeType":"YulExpressionStatement","src":"12755:58:181"},{"nodeType":"YulAssignment","src":"12822:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12834:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12845:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12830:3:181"},"nodeType":"YulFunctionCall","src":"12830:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12822:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ad52eb458dc59be89b09f31cb50841858fb84683b2cb7a41fdcd5c7d6e7430d9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12653:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12667:4:181","type":""}],"src":"12502:352:181"},{"body":{"nodeType":"YulBlock","src":"12891:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12908:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12915:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"12920:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12911:3:181"},"nodeType":"YulFunctionCall","src":"12911:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12901:6:181"},"nodeType":"YulFunctionCall","src":"12901:31:181"},"nodeType":"YulExpressionStatement","src":"12901:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12948:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"12951:4:181","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12941:6:181"},"nodeType":"YulFunctionCall","src":"12941:15:181"},"nodeType":"YulExpressionStatement","src":"12941:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12972:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12975:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12965:6:181"},"nodeType":"YulFunctionCall","src":"12965:15:181"},"nodeType":"YulExpressionStatement","src":"12965:15:181"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"12859:127:181"},{"body":{"nodeType":"YulBlock","src":"13029:74:181","statements":[{"body":{"nodeType":"YulBlock","src":"13052:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x12","nodeType":"YulIdentifier","src":"13054:16:181"},"nodeType":"YulFunctionCall","src":"13054:18:181"},"nodeType":"YulExpressionStatement","src":"13054:18:181"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"13049:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13042:6:181"},"nodeType":"YulFunctionCall","src":"13042:9:181"},"nodeType":"YulIf","src":"13039:35:181"},{"nodeType":"YulAssignment","src":"13083:14:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13092:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"13095:1:181"}],"functionName":{"name":"mod","nodeType":"YulIdentifier","src":"13088:3:181"},"nodeType":"YulFunctionCall","src":"13088:9:181"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"13083:1:181"}]}]},"name":"mod_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"13014:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"13017:1:181","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"13023:1:181","type":""}],"src":"12991:112:181"},{"body":{"nodeType":"YulBlock","src":"13154:74:181","statements":[{"body":{"nodeType":"YulBlock","src":"13177:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x12","nodeType":"YulIdentifier","src":"13179:16:181"},"nodeType":"YulFunctionCall","src":"13179:18:181"},"nodeType":"YulExpressionStatement","src":"13179:18:181"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"13174:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13167:6:181"},"nodeType":"YulFunctionCall","src":"13167:9:181"},"nodeType":"YulIf","src":"13164:35:181"},{"nodeType":"YulAssignment","src":"13208:14:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13217:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"13220:1:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"13213:3:181"},"nodeType":"YulFunctionCall","src":"13213:9:181"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"13208:1:181"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"13139:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"13142:1:181","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"13148:1:181","type":""}],"src":"13108:120:181"},{"body":{"nodeType":"YulBlock","src":"13269:121:181","statements":[{"nodeType":"YulVariableDeclaration","src":"13279:23:181","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"13294:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"13297:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13290:3:181"},"nodeType":"YulFunctionCall","src":"13290:12:181"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"13283:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"13326:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x12","nodeType":"YulIdentifier","src":"13328:16:181"},"nodeType":"YulFunctionCall","src":"13328:18:181"},"nodeType":"YulExpressionStatement","src":"13328:18:181"}]},"condition":{"arguments":[{"name":"y_1","nodeType":"YulIdentifier","src":"13321:3:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13314:6:181"},"nodeType":"YulFunctionCall","src":"13314:11:181"},"nodeType":"YulIf","src":"13311:37:181"},{"nodeType":"YulAssignment","src":"13357:27:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13370:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"13373:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13366:3:181"},"nodeType":"YulFunctionCall","src":"13366:12:181"},{"name":"y_1","nodeType":"YulIdentifier","src":"13380:3:181"}],"functionName":{"name":"mod","nodeType":"YulIdentifier","src":"13362:3:181"},"nodeType":"YulFunctionCall","src":"13362:22:181"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"13357:1:181"}]}]},"name":"mod_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"13254:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"13257:1:181","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"13263:1:181","type":""}],"src":"13233:157:181"},{"body":{"nodeType":"YulBlock","src":"13439:121:181","statements":[{"nodeType":"YulVariableDeclaration","src":"13449:23:181","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"13464:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"13467:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13460:3:181"},"nodeType":"YulFunctionCall","src":"13460:12:181"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"13453:3:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"13496:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x12","nodeType":"YulIdentifier","src":"13498:16:181"},"nodeType":"YulFunctionCall","src":"13498:18:181"},"nodeType":"YulExpressionStatement","src":"13498:18:181"}]},"condition":{"arguments":[{"name":"y_1","nodeType":"YulIdentifier","src":"13491:3:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13484:6:181"},"nodeType":"YulFunctionCall","src":"13484:11:181"},"nodeType":"YulIf","src":"13481:37:181"},{"nodeType":"YulAssignment","src":"13527:27:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13540:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"13543:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13536:3:181"},"nodeType":"YulFunctionCall","src":"13536:12:181"},{"name":"y_1","nodeType":"YulIdentifier","src":"13550:3:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"13532:3:181"},"nodeType":"YulFunctionCall","src":"13532:22:181"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"13527:1:181"}]}]},"name":"checked_div_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"13424:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"13427:1:181","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"13433:1:181","type":""}],"src":"13395:165:181"},{"body":{"nodeType":"YulBlock","src":"13612:104:181","statements":[{"nodeType":"YulAssignment","src":"13622:39:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13638:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"13641:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13634:3:181"},"nodeType":"YulFunctionCall","src":"13634:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"13652:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"13655:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13648:3:181"},"nodeType":"YulFunctionCall","src":"13648:12:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13630:3:181"},"nodeType":"YulFunctionCall","src":"13630:31:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"13622:4:181"}]},{"body":{"nodeType":"YulBlock","src":"13688:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13690:16:181"},"nodeType":"YulFunctionCall","src":"13690:18:181"},"nodeType":"YulExpressionStatement","src":"13690:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"13676:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"13682:4:181","type":"","value":"0xff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13673:2:181"},"nodeType":"YulFunctionCall","src":"13673:14:181"},"nodeType":"YulIf","src":"13670:40:181"}]},"name":"checked_sub_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"13594:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"13597:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"13603:4:181","type":""}],"src":"13565:151:181"},{"body":{"nodeType":"YulBlock","src":"13785:358:181","statements":[{"nodeType":"YulVariableDeclaration","src":"13795:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"13810:1:181","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"13799:7:181","type":""}]},{"nodeType":"YulAssignment","src":"13820:16:181","value":{"name":"power_1","nodeType":"YulIdentifier","src":"13829:7:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"13820:5:181"}]},{"nodeType":"YulAssignment","src":"13845:13:181","value":{"name":"_base","nodeType":"YulIdentifier","src":"13853:5:181"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"13845:4:181"}]},{"body":{"nodeType":"YulBlock","src":"13909:228:181","statements":[{"body":{"nodeType":"YulBlock","src":"13954:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13956:16:181"},"nodeType":"YulFunctionCall","src":"13956:18:181"},"nodeType":"YulExpressionStatement","src":"13956:18:181"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"13929:4:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13943:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"13939:3:181"},"nodeType":"YulFunctionCall","src":"13939:6:181"},{"name":"base","nodeType":"YulIdentifier","src":"13947:4:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"13935:3:181"},"nodeType":"YulFunctionCall","src":"13935:17:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13926:2:181"},"nodeType":"YulFunctionCall","src":"13926:27:181"},"nodeType":"YulIf","src":"13923:53:181"},{"body":{"nodeType":"YulBlock","src":"14015:29:181","statements":[{"nodeType":"YulAssignment","src":"14017:25:181","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"14030:5:181"},{"name":"base","nodeType":"YulIdentifier","src":"14037:4:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"14026:3:181"},"nodeType":"YulFunctionCall","src":"14026:16:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14017:5:181"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"13996:8:181"},{"name":"power_1","nodeType":"YulIdentifier","src":"14006:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13992:3:181"},"nodeType":"YulFunctionCall","src":"13992:22:181"},"nodeType":"YulIf","src":"13989:55:181"},{"nodeType":"YulAssignment","src":"14057:23:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"14069:4:181"},{"name":"base","nodeType":"YulIdentifier","src":"14075:4:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"14065:3:181"},"nodeType":"YulFunctionCall","src":"14065:15:181"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"14057:4:181"}]},{"nodeType":"YulAssignment","src":"14093:34:181","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"14109:7:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"14118:8:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"14105:3:181"},"nodeType":"YulFunctionCall","src":"14105:22:181"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"14093:8:181"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"13878:8:181"},{"name":"power_1","nodeType":"YulIdentifier","src":"13888:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13875:2:181"},"nodeType":"YulFunctionCall","src":"13875:21:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"13897:3:181","statements":[]},"pre":{"nodeType":"YulBlock","src":"13871:3:181","statements":[]},"src":"13867:270:181"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"13749:5:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"13756:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"13769:5:181","type":""},{"name":"base","nodeType":"YulTypedName","src":"13776:4:181","type":""}],"src":"13721:422:181"},{"body":{"nodeType":"YulBlock","src":"14207:747:181","statements":[{"body":{"nodeType":"YulBlock","src":"14245:52:181","statements":[{"nodeType":"YulAssignment","src":"14259:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14268:1:181","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14259:5:181"}]},{"nodeType":"YulLeave","src":"14282:5:181"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"14227:8:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14220:6:181"},"nodeType":"YulFunctionCall","src":"14220:16:181"},"nodeType":"YulIf","src":"14217:80:181"},{"body":{"nodeType":"YulBlock","src":"14330:52:181","statements":[{"nodeType":"YulAssignment","src":"14344:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14353:1:181","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14344:5:181"}]},{"nodeType":"YulLeave","src":"14367:5:181"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"14316:4:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14309:6:181"},"nodeType":"YulFunctionCall","src":"14309:12:181"},"nodeType":"YulIf","src":"14306:76:181"},{"cases":[{"body":{"nodeType":"YulBlock","src":"14418:52:181","statements":[{"nodeType":"YulAssignment","src":"14432:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14441:1:181","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14432:5:181"}]},{"nodeType":"YulLeave","src":"14455:5:181"}]},"nodeType":"YulCase","src":"14411:59:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14416:1:181","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"14486:123:181","statements":[{"body":{"nodeType":"YulBlock","src":"14521:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14523:16:181"},"nodeType":"YulFunctionCall","src":"14523:18:181"},"nodeType":"YulExpressionStatement","src":"14523:18:181"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"14506:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"14516:3:181","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14503:2:181"},"nodeType":"YulFunctionCall","src":"14503:17:181"},"nodeType":"YulIf","src":"14500:43:181"},{"nodeType":"YulAssignment","src":"14556:25:181","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"14569:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"14579:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14565:3:181"},"nodeType":"YulFunctionCall","src":"14565:16:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14556:5:181"}]},{"nodeType":"YulLeave","src":"14594:5:181"}]},"nodeType":"YulCase","src":"14479:130:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14484:1:181","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"14398:4:181"},"nodeType":"YulSwitch","src":"14391:218:181"},{"body":{"nodeType":"YulBlock","src":"14707:70:181","statements":[{"nodeType":"YulAssignment","src":"14721:28:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"14734:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"14740:8:181"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"14730:3:181"},"nodeType":"YulFunctionCall","src":"14730:19:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14721:5:181"}]},{"nodeType":"YulLeave","src":"14762:5:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"14631:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"14637:2:181","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14628:2:181"},"nodeType":"YulFunctionCall","src":"14628:12:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"14645:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"14655:2:181","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14642:2:181"},"nodeType":"YulFunctionCall","src":"14642:16:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14624:3:181"},"nodeType":"YulFunctionCall","src":"14624:35:181"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"14668:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"14674:3:181","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14665:2:181"},"nodeType":"YulFunctionCall","src":"14665:13:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"14683:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"14693:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14680:2:181"},"nodeType":"YulFunctionCall","src":"14680:16:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14661:3:181"},"nodeType":"YulFunctionCall","src":"14661:36:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"14621:2:181"},"nodeType":"YulFunctionCall","src":"14621:77:181"},"nodeType":"YulIf","src":"14618:159:181"},{"nodeType":"YulVariableDeclaration","src":"14786:57:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"14828:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"14834:8:181"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"14809:18:181"},"nodeType":"YulFunctionCall","src":"14809:34:181"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"14790:7:181","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"14799:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"14888:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14890:16:181"},"nodeType":"YulFunctionCall","src":"14890:18:181"},"nodeType":"YulExpressionStatement","src":"14890:18:181"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"14858:7:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14875:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"14871:3:181"},"nodeType":"YulFunctionCall","src":"14871:6:181"},{"name":"base_1","nodeType":"YulIdentifier","src":"14879:6:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"14867:3:181"},"nodeType":"YulFunctionCall","src":"14867:19:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14855:2:181"},"nodeType":"YulFunctionCall","src":"14855:32:181"},"nodeType":"YulIf","src":"14852:58:181"},{"nodeType":"YulAssignment","src":"14919:29:181","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"14932:7:181"},{"name":"base_1","nodeType":"YulIdentifier","src":"14941:6:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"14928:3:181"},"nodeType":"YulFunctionCall","src":"14928:20:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14919:5:181"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"14178:4:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"14184:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"14197:5:181","type":""}],"src":"14148:806:181"},{"body":{"nodeType":"YulBlock","src":"15029:61:181","statements":[{"nodeType":"YulAssignment","src":"15039:45:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"15069:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"15075:8:181"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"15048:20:181"},"nodeType":"YulFunctionCall","src":"15048:36:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"15039:5:181"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"15000:4:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"15006:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"15019:5:181","type":""}],"src":"14959:131:181"},{"body":{"nodeType":"YulBlock","src":"15269:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15286:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15297:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15279:6:181"},"nodeType":"YulFunctionCall","src":"15279:21:181"},"nodeType":"YulExpressionStatement","src":"15279:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15320:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15331:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15316:3:181"},"nodeType":"YulFunctionCall","src":"15316:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15336:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15309:6:181"},"nodeType":"YulFunctionCall","src":"15309:30:181"},"nodeType":"YulExpressionStatement","src":"15309:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15359:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15370:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15355:3:181"},"nodeType":"YulFunctionCall","src":"15355:18:181"},{"hexValue":"496e76616c69642070726f6f66206c656e677468","kind":"string","nodeType":"YulLiteral","src":"15375:22:181","type":"","value":"Invalid proof length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15348:6:181"},"nodeType":"YulFunctionCall","src":"15348:50:181"},"nodeType":"YulExpressionStatement","src":"15348:50:181"},{"nodeType":"YulAssignment","src":"15407:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15419:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15430:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15415:3:181"},"nodeType":"YulFunctionCall","src":"15415:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15407:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a384685b2d9864ca58af3cdeb11675a5eb31234b321579291672bb93c38d256c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15246:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15260:4:181","type":""}],"src":"15095:344:181"},{"body":{"nodeType":"YulBlock","src":"15618:171:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15635:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15646:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15628:6:181"},"nodeType":"YulFunctionCall","src":"15628:21:181"},"nodeType":"YulExpressionStatement","src":"15628:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15669:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15680:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15665:3:181"},"nodeType":"YulFunctionCall","src":"15665:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15685:2:181","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15658:6:181"},"nodeType":"YulFunctionCall","src":"15658:30:181"},"nodeType":"YulExpressionStatement","src":"15658:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15708:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15719:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15704:3:181"},"nodeType":"YulFunctionCall","src":"15704:18:181"},{"hexValue":"4c65616620696e64657820697320746f6f20626967","kind":"string","nodeType":"YulLiteral","src":"15724:23:181","type":"","value":"Leaf index is too big"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15697:6:181"},"nodeType":"YulFunctionCall","src":"15697:51:181"},"nodeType":"YulExpressionStatement","src":"15697:51:181"},{"nodeType":"YulAssignment","src":"15757:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15769:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15780:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15765:3:181"},"nodeType":"YulFunctionCall","src":"15765:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15757:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a93d72abfb9ed65892e9dea7aa76fdb1003bad3c2be9fdc6e43aa17d2648b99c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15595:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15609:4:181","type":""}],"src":"15444:345:181"},{"body":{"nodeType":"YulBlock","src":"15941:100:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"15958:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"15963:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15951:6:181"},"nodeType":"YulFunctionCall","src":"15951:19:181"},"nodeType":"YulExpressionStatement","src":"15951:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"15990:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"15995:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15986:3:181"},"nodeType":"YulFunctionCall","src":"15986:12:181"},{"name":"value1","nodeType":"YulIdentifier","src":"16000:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15979:6:181"},"nodeType":"YulFunctionCall","src":"15979:28:181"},"nodeType":"YulExpressionStatement","src":"15979:28:181"},{"nodeType":"YulAssignment","src":"16016:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"16027:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"16032:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16023:3:181"},"nodeType":"YulFunctionCall","src":"16023:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"16016:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"15909:3:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15914:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15922:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"15933:3:181","type":""}],"src":"15794:247:181"},{"body":{"nodeType":"YulBlock","src":"16093:88:181","statements":[{"body":{"nodeType":"YulBlock","src":"16124:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16126:16:181"},"nodeType":"YulFunctionCall","src":"16126:18:181"},"nodeType":"YulExpressionStatement","src":"16126:18:181"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16109:5:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16120:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"16116:3:181"},"nodeType":"YulFunctionCall","src":"16116:6:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"16106:2:181"},"nodeType":"YulFunctionCall","src":"16106:17:181"},"nodeType":"YulIf","src":"16103:43:181"},{"nodeType":"YulAssignment","src":"16155:20:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16166:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"16173:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16162:3:181"},"nodeType":"YulFunctionCall","src":"16162:13:181"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"16155:3:181"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"16075:5:181","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"16085:3:181","type":""}],"src":"16046:135:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_bytes(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(and(add(length, 31), not(31)), 0x20)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let array_1 := allocate_memory(array_allocation_size_bytes(_1))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(array_1, _1), 0x20), 0)\n        array := array_1\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_bytes(add(headStart, offset_1), dataEnd)\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_contract$_ICheckpointManager_$47056__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_IFxStateSender_$47038__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!rootManager\")\n        tail := add(headStart, 96)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        let tail_1 := abi_encode_bytes(value0, add(headStart, 96))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value1, tail_1)\n        mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!AMB\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        tail := abi_encode_bytes(value0, add(headStart, 64))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!data length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_uint256_t_bytes_memory_ptr_t_uint256__to_t_uint256_t_bytes_memory_ptr_t_uint256__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n    {\n        mstore(pos, value0)\n        let length := mload(value1)\n        copy_memory_to_memory_with_cleanup(add(value1, 32), add(pos, 32), length)\n        let _1 := add(pos, length)\n        mstore(add(_1, 32), value2)\n        end := add(_1, 64)\n    }\n    function abi_encode_tuple_t_stringliteral_346ac4d916e6e0ff921470f98a98a708e34aa5c8a93b4076794f133e004e36a5__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"FxRootTunnel: EXIT_ALREADY_PROCE\")\n        mstore(add(headStart, 96), \"SSED\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_e20402930bc2a62dcad7f5124f56dbfe0c166bf9b0c73c01cd54b14a41c30523__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"FxRootTunnel: INVALID_FX_CHILD_T\")\n        mstore(add(headStart, 96), \"UNNEL\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_2ce2fedc24e79d64f58937c7672062618900d7fda5b396849b04c1ef7692f676__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"FxRootTunnel: INVALID_RECEIPT_PR\")\n        mstore(add(headStart, 96), \"OOF\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_bb7a552d748e26b221e0250d9c5275afe2a0161f67e052c27f605992e65ad73d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"FxRootTunnel: INVALID_SIGNATURE\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := mload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n        let _2 := mload(_1)\n        let array := allocate_memory(array_allocation_size_bytes(_2))\n        mstore(array, _2)\n        if gt(add(add(_1, _2), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory_with_cleanup(add(_1, 32), add(array, 32), _2)\n        value0 := array\n    }\n    function abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!length\")\n        tail := add(headStart, 96)\n    }\n    function convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32(array) -> value\n    {\n        let length := mload(array)\n        value := mload(add(array, 0x20))\n        if lt(length, 0x20)\n        {\n            value := and(value, shl(shl(3, sub(0x20, length)), not(0)))\n        }\n    }\n    function abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_bytes(value1, add(headStart, 64))\n    }\n    function abi_encode_tuple_t_stringliteral_1dc310af12cba7b1018a7df66f4a5d342cf94c76291e27400d58d59cb64eb899__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"FxBaseRootTunnel: CHILD_TUNNEL_A\")\n        mstore(add(headStart, 96), \"LREADY_SET\")\n        tail := add(headStart, 128)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        product := mul(x, y)\n        if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_decode_tuple_t_bytes32t_uint256t_uint256t_uint256t_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        value3 := mload(add(headStart, 96))\n        let value := mload(add(headStart, 128))\n        validator_revert_address(value)\n        value4 := value\n    }\n    function abi_encode_tuple_packed_t_uint256_t_uint256_t_bytes32_t_bytes32__to_t_uint256_t_uint256_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value3, value2, value1, value0) -> end\n    {\n        mstore(pos, value0)\n        mstore(add(pos, 32), value1)\n        mstore(add(pos, 64), value2)\n        mstore(add(pos, 96), value3)\n        end := add(pos, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_ad52eb458dc59be89b09f31cb50841858fb84683b2cb7a41fdcd5c7d6e7430d9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 28)\n        mstore(add(headStart, 64), \"FxRootTunnel: INVALID_HEADER\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function mod_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := mod(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function mod_t_uint8(x, y) -> r\n    {\n        let y_1 := and(y, 0xff)\n        if iszero(y_1) { panic_error_0x12() }\n        r := mod(and(x, 0xff), y_1)\n    }\n    function checked_div_t_uint8(x, y) -> r\n    {\n        let y_1 := and(y, 0xff)\n        if iszero(y_1) { panic_error_0x12() }\n        r := div(and(x, 0xff), y_1)\n    }\n    function checked_sub_t_uint8(x, y) -> diff\n    {\n        diff := sub(and(x, 0xff), and(y, 0xff))\n        if gt(diff, 0xff) { panic_error_0x11() }\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(not(0), base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(not(0), base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function abi_encode_tuple_t_stringliteral_a384685b2d9864ca58af3cdeb11675a5eb31234b321579291672bb93c38d256c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"Invalid proof length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_a93d72abfb9ed65892e9dea7aa76fdb1003bad3c2be9fdc6e43aa17d2648b99c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"Leaf index is too big\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_bytes32_t_bytes32__to_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, value0)\n        mstore(add(pos, 32), value1)\n        end := add(pos, 64)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"39039":[{"length":32,"start":572}],"39042":[{"length":32,"start":1079},{"length":32,"start":1401}],"39045":[{"length":32,"start":656},{"length":32,"start":1220},{"length":32,"start":3306}],"39048":[{"length":32,"start":425},{"length":32,"start":3345}]},"linkReferences":{},"object":"6080604052600436106101445760003560e01c80638da5cb5b116100b6578063d1851c921161006f578063d1851c92146103e8578063d232c22014610406578063d69f9d6114610425578063db1b765914610459578063de9b771f14610479578063f953cec71461049957600080fd5b80638da5cb5b14610335578063972c492814610353578063b1f8100d14610373578063c0857ba014610393578063c5b350df146103b3578063cc394283146103c857600080fd5b806352a9674b1161010857806352a9674b1461022a5780635bd11efc1461025e5780635f61e3ec1461027e578063607f2d42146102ca5780636a42b8f81461030a578063715018a61461032057600080fd5b80630e387de61461015057806314168416146101975780633cf52ffb146101e057806348e6fa23146101f55780634ff746f61461020a57600080fd5b3661014b57005b600080fd5b34801561015c57600080fd5b506101847f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b03681565b6040519081526020015b60405180910390f35b3480156101a357600080fd5b506101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161018e565b3480156101ec57600080fd5b50600254610184565b6102086102033660046121de565b6104b9565b005b34801561021657600080fd5b50610208610225366004612242565b61056e565b34801561023657600080fd5b506101cb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561026a57600080fd5b5061020861027936600461228c565b610614565b34801561028a57600080fd5b506102b27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161018e565b3480156102d657600080fd5b506102fa6102e53660046122a9565b60076020526000908152604090205460ff1681565b604051901515815260200161018e565b34801561031657600080fd5b5062093a80610184565b34801561032c57600080fd5b5061020861064b565b34801561034157600080fd5b506000546001600160a01b03166102b2565b34801561035f57600080fd5b506006546102b2906001600160a01b031681565b34801561037f57600080fd5b5061020861038e36600461228c565b6106ff565b34801561039f57600080fd5b506005546102b2906001600160a01b031681565b3480156103bf57600080fd5b5061020861079d565b3480156103d457600080fd5b506003546102b2906001600160a01b031681565b3480156103f457600080fd5b506001546001600160a01b03166102b2565b34801561041257600080fd5b506000546001600160a01b0316156102fa565b34801561043157600080fd5b506102b27f000000000000000000000000000000000000000000000000000000000000000081565b34801561046557600080fd5b506102fa61047436600461228c565b61080d565b34801561048557600080fd5b506004546102b2906001600160a01b031681565b3480156104a557600080fd5b506102086104b4366004612242565b610817565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105255760405162461bcd60e51b815260206004820152600c60248201526b10b937b7ba26b0b730b3b2b960a11b60448201526064015b60405180910390fd5b61052f828261089a565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507782823360405161056293929190612312565b60405180910390a15050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105cf5760405162461bcd60e51b815260040161051c9060208082526004908201526310a0a6a160e11b604082015260600190565b6105d8816108e1565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610609929190612350565b60405180910390a150565b6000546001600160a01b0316331461063f576040516311a8a1bb60e31b815260040160405180910390fd5b610648816108fa565b50565b6000546001600160a01b03163314610676576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426106889190612390565b116106a6576040516324e0285f60e21b815260040160405180910390fd5b6002546000036106c957604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b0316156106f3576040516323295ef960e01b815260040160405180910390fd5b6106fd600061090c565b565b6000546001600160a01b0316331461072a576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610748575060025415155b15610766576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361079457604051634a2fb73f60e11b815260040160405180910390fd5b61064881610971565b6001546001600160a01b031633146107c8576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426107da9190612390565b116107f8576040516324e0285f60e21b815260040160405180910390fd5b6001546106fd906001600160a01b031661090c565b6000805b92915050565b6000610822826109bf565b905061082d81610ca5565b5050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b8051156108d85760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b604482015260640161051c565b61082d82610dc6565b6040516316c2fdb560e21b815260040160405180910390fd5b61090381610831565b61064881610e2f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b606060006109cc83610ebd565b905060006109d982610f1c565b905060006109e683610f45565b90506000816109f484610f6e565b6109fd86611124565b604051602001610a0f939291906123a3565b60408051601f1981840301815291815281516020928301206000818152600790935291205490915060ff1615610a935760405162461bcd60e51b8152602060048201526024808201527f4678526f6f7454756e6e656c3a20455849545f414c52454144595f50524f434560448201526314d4d15160e21b606482015260840161051c565b6000818152600760205260408120805460ff19166001179055610ab585611140565b90506000610ac28261128a565b9050610acd8161131a565b6006546001600160a01b03908116911614610b385760405162461bcd60e51b815260206004820152602560248201527f4678526f6f7454756e6e656c3a20494e56414c49445f46585f4348494c445f54604482015264155393915360da1b606482015260840161051c565b6000610b4387611343565b9050610b63610b53846020015190565b87610b5d8a61135f565b8461137b565b610bbb5760405162461bcd60e51b815260206004820152602360248201527f4678526f6f7454756e6e656c3a20494e56414c49445f524543454950545f505260448201526227a7a360e91b606482015260840161051c565b610be985610bc88961162e565b610bd18a61164a565b84610bdb8c611666565b610be48d611682565b61169e565b506000610bf5836117c4565b90507f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036610c2b610c26836000611800565b611838565b14610c785760405162461bcd60e51b815260206004820152601f60248201527f4678526f6f7454756e6e656c3a20494e56414c49445f5349474e415455524500604482015260640161051c565b6000610c83846118b2565b806020019051810190610c9691906123d0565b9b9a5050505050505050505050565b8051602014610ce05760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b604482015260640161051c565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016638e7d93fa7f0000000000000000000000000000000000000000000000000000000000000000610d3984612447565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526024820152604401600060405180830381600087803b158015610d7d57600080fd5b505af1158015610d91573d6000803e3d6000fd5b505050507fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610609929190612350565b6004805460065460405163b472047760e01b81526001600160a01b039283169363b472047793610dfa93169186910161246b565b600060405180830381600087803b158015610e1457600080fd5b505af1158015610e28573d6000803e3d6000fd5b5050505050565b6006546001600160a01b031615610e9b5760405162461bcd60e51b815260206004820152602a60248201527f467842617365526f6f7454756e6e656c3a204348494c445f54554e4e454c5f4160448201526913149150511657d4d15560b21b606482015260840161051c565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6040805160208101909152606081526000610f07610f028460408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6118ce565b60408051602081019091529081529392505050565b60606108118260000151600881518110610f3857610f3861248f565b60200260200101516119da565b60006108118260000151600281518110610f6157610f6161248f565b6020026020010151611838565b6040805160208101909152600081528151606091901561081157600080610f96600086611a77565b60f81c90506001811480610fad57508060ff166003145b1561105557600185516002610fc291906124a5565b610fcc9190612390565b67ffffffffffffffff811115610fe457610fe4612119565b6040519080825280601f01601f19166020018201604052801561100e576020820181803683370190505b509250600061101e600187611a77565b905080846000815181106110345761103461248f565b60200101906001600160f81b031916908160001a90535060019250506110b9565b60028551600261106591906124a5565b61106f9190612390565b67ffffffffffffffff81111561108757611087612119565b6040519080825280601f01601f1916602001820160405280156110b1576020820181803683370190505b509250600091505b825160ff83165b8181101561111a576110e96110d860ff861683612390565b6110e39060026124bc565b88611a77565b8582815181106110fb576110fb61248f565b60200101906001600160f81b031916908160001a9053506001016110c0565b5050505092915050565b60006108118260000151600981518110610f6157610f6161248f565b61116460405180606001604052806060815260200160608152602001600081525090565b61117e8260000151600681518110610f3857610f3861248f565b6020828101829052604080518082018252600080825290830152805180820190915282518152918101908201526111b481611af8565b156111c9576111c2816118ce565b8252611276565b602082015180516000906111df90600190612390565b67ffffffffffffffff8111156111f7576111f7612119565b6040519080825280601f01601f191660200182016040528015611221576020820181803683370190505b50905060008083602101915082602001905061123f82828551611b33565b60408051808201825260008082526020918201528151808301909252845182528085019082015261126f906118ce565b8652505050505b61127f83611124565b604083015250919050565b6040805160808101825260009181018281526060808301939093528152602081019190915260006112d883600001516003815181106112cb576112cb61248f565b60200260200101516118ce565b8360400151815181106112ed576112ed61248f565b602002602001015190506040518060400160405280828152602001611311836118ce565b90529392505050565b600061081182602001516000815181106113365761133661248f565b6020026020010151611bcc565b60006108118260000151600581518110610f6157610f6161248f565b60606108118260000151600781518110610f3857610f3861248f565b6000806113af8460408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b905060006113bc826118ce565b9050606080856000806113ce8b610f6e565b905080516000036113e9576000975050505050505050611626565b855160005b8181101561161c5782518411156114115760009950505050505050505050611626565b6114338882815181106114265761142661248f565b6020026020010151611be6565b9650868051906020012085146114555760009950505050505050505050611626565b61146a8882815181106112cb576112cb61248f565b9550855160110361153f57825184036114cb578d8051906020012061149b87601081518110610f3857610f3861248f565b80519060200120036114b95760019950505050505050505050611626565b60009950505050505050505050611626565b60008385815181106114df576114df61248f565b016020015160f81c905060108111156115055760009a5050505050505050505050611626565b61152a878260ff168151811061151d5761151d61248f565b6020026020010151611c65565b95506115376001866124bc565b945050611614565b85516002036114b957600061156a61156388600081518110610f3857610f3861248f565b8587611c93565b845190915061157982876124bc565b036115ce578e8051906020012061159c88600181518110610f3857610f3861248f565b80519060200120036115bb5760019a5050505050505050505050611626565b60009a5050505050505050505050611626565b806000036115e95760009a5050505050505050505050611626565b6115f381866124bc565b945061160b8760018151811061151d5761151d61248f565b95506116149050565b6001016113ee565b5050505050505050505b949350505050565b60006108118260000151600381518110610f6157610f6161248f565b60006108118260000151600481518110610f6157610f6161248f565b60006108118260000151600081518110610f6157610f6161248f565b60606108118260000151600181518110610f3857610f3861248f565b6005546040516320a9cea560e11b8152600481018490526000918291829182916001600160a01b03909116906341539d4a9060240160a060405180830381865afa1580156116f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171491906124cf565b509350509250925061176b828b61172b9190612390565b6040805160208082018f90528183018e9052606082018d905260808083018d90528351808403909101815260a09092019092528051910120908588611d97565b6117b75760405162461bcd60e51b815260206004820152601c60248201527f4678526f6f7454756e6e656c3a20494e56414c49445f48454144455200000000604482015260640161051c565b9998505050505050505050565b60408051602081019091526060815260405180602001604052806117f884602001516001815181106112cb576112cb61248f565b905292915050565b604080518082019091526000808252602082015282518051839081106118285761182861248f565b6020026020010151905092915050565b80516000901580159061184c575081516022115b61185557600080fd5b60006118648360200151611f09565b905060008184600001516118789190612390565b905060008083866020015161188d91906124bc565b90508051915060208310156118a957826020036101000a820491505b50949350505050565b60606108118260200151600281518110610f3857610f3861248f565b60606118d982611af8565b6118e257600080fd5b60006118ed83611f9d565b905060008167ffffffffffffffff81111561190a5761190a612119565b60405190808252806020026020018201604052801561194f57816020015b60408051808201909152600080825260208201528152602001906001900390816119285790505b50905060006119618560200151611f09565b856020015161197091906124bc565b90506000805b848110156119cf5761198783612022565b91506040518060400160405280838152602001848152508482815181106119b0576119b061248f565b60209081029190910101526119c582846124bc565b9250600101611976565b509195945050505050565b80516060906119e857600080fd5b60006119f78360200151611f09565b90506000818460000151611a0b9190612390565b905060008167ffffffffffffffff811115611a2857611a28612119565b6040519080825280601f01601f191660200182016040528015611a52576020820181803683370190505b50905060008160200190506118a9848760200151611a7091906124bc565b82856120c6565b6000611a84600284612532565b15611abe57601082611a97600286612546565b81518110611aa757611aa761248f565b0160200151611ab9919060f81c61255a565b611aee565b601082611acc600286612546565b81518110611adc57611adc61248f565b0160200151611aee919060f81c61257c565b60f81b9392505050565b80516000908103611b0b57506000919050565b6020820151805160001a9060c0821015611b29575060009392505050565b5060019392505050565b80600003611b4057505050565b611b4c6001602061259e565b60ff16811115611b865782518252611b656020846124bc565b9250611b726020836124bc565b9150611b7f602082612390565b9050611b40565b80600003611b9357505050565b60006001611ba2836020612390565b611bae9061010061269b565b611bb89190612390565b935183518516941916939093179091525050565b8051600090601514611bdd57600080fd5b61081182611838565b60606000826000015167ffffffffffffffff811115611c0757611c07612119565b6040519080825280601f01601f191660200182016040528015611c31576020820181803683370190505b5090508051600003611c435792915050565b6000816020019050611c5e84602001518286600001516120c6565b5092915050565b8051600090602114611c7657600080fd5b60008083602001516001611c8a91906124bc565b51949350505050565b60008080611ca086610f6e565b90506000815167ffffffffffffffff811115611cbe57611cbe612119565b6040519080825280601f01601f191660200182016040528015611ce8576020820181803683370190505b5090506000825186611cfa91906124bc565b9050855b81811015611d67576000888281518110611d1a57611d1a61248f565b01602001516001600160f81b03191690508084611d378a85612390565b81518110611d4757611d4761248f565b60200101906001600160f81b031916908160001a90535050600101611cfe565b508180519060200120838051906020012003611d865782519350611d8b565b600093505b50919695505050505050565b600060208251611da79190612532565b15611deb5760405162461bcd60e51b8152602060048201526014602482015273092dcecc2d8d2c840e0e4dedecc40d8cadccee8d60631b604482015260640161051c565b600060208351611dfb9190612546565b9050611e0881600261269b565b8510611e4e5760405162461bcd60e51b81526020600482015260156024820152744c65616620696e64657820697320746f6f2062696760581b604482015260640161051c565b825160009087908290611e629060016124bc565b905060205b81811015611efa57868101519350611e8060028a612532565b600003611eb8576040805160208101859052908101859052606001604051602081830303815290604052805190602001209250611ee5565b60408051602081018690529081018490526060016040516020818303038152906040528051906020012092505b611ef060028a612546565b9850602001611e67565b50509094149695505050505050565b8051600090811a6080811015611f225750600092915050565b60b8811080611f495750611f38600160c061259e565b60ff1681118015611f49575060f881105b15611f575750600192915050565b60c0811015611f8b57611f6c600160b861259e565b611f799060ff1682612390565b611f849060016124bc565b9392505050565b611f6c600160f861259e565b50919050565b80516000908103611fb057506000919050565b600080611fc08460200151611f09565b8460200151611fcf91906124bc565b9050600084600001518560200151611fe791906124bc565b90505b8082101561201957611ffb82612022565b61200590836124bc565b915082612011816126a7565b935050611fea565b50909392505050565b80516000908190811a608081101561203d5760019150611c5e565b60b881101561206357612051608082612390565b61205c9060016124bc565b9150611c5e565b60c08110156120905760b78103600185019450806020036101000a85510460018201810193505050611c5e565b60f88110156120a45761205160c082612390565b60019390930151602084900360f7016101000a900490920160f5190192915050565b806000036120d357505050565b6120df6001602061259e565b60ff16811115611b8657825182526120f86020846124bc565b92506121056020836124bc565b9150612112602082612390565b90506120d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561215857612158612119565b604052919050565b600067ffffffffffffffff82111561217a5761217a612119565b50601f01601f191660200190565b600082601f83011261219957600080fd5b81356121ac6121a782612160565b61212f565b8181528460208386010111156121c157600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156121f157600080fd5b823567ffffffffffffffff8082111561220957600080fd5b61221586838701612188565b9350602085013591508082111561222b57600080fd5b5061223885828601612188565b9150509250929050565b60006020828403121561225457600080fd5b813567ffffffffffffffff81111561226b57600080fd5b61162684828501612188565b6001600160a01b038116811461064857600080fd5b60006020828403121561229e57600080fd5b8135611f8481612277565b6000602082840312156122bb57600080fd5b5035919050565b60005b838110156122dd5781810151838201526020016122c5565b50506000910152565b600081518084526122fe8160208601602086016122c2565b601f01601f19169290920160200192915050565b60608152600061232560608301866122e6565b828103602084015261233781866122e6565b91505060018060a01b0383166040830152949350505050565b60408152600061236360408301856122e6565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108115761081161237a565b838152600083516123bb8160208501602088016122c2565b60209201918201929092526040019392505050565b6000602082840312156123e257600080fd5b815167ffffffffffffffff8111156123f957600080fd5b8201601f8101841361240a57600080fd5b80516124186121a782612160565b81815285602083850101111561242d57600080fd5b61243e8260208301602086016122c2565b95945050505050565b80516020808301519190811015611f975760001960209190910360031b1b16919050565b6001600160a01b0383168152604060208201819052600090611626908301846122e6565b634e487b7160e01b600052603260045260246000fd5b80820281158282048414176108115761081161237a565b808201808211156108115761081161237a565b600080600080600060a086880312156124e757600080fd5b85519450602086015193506040860151925060608601519150608086015161250e81612277565b809150509295509295909350565b634e487b7160e01b600052601260045260246000fd5b6000826125415761254161251c565b500690565b6000826125555761255561251c565b500490565b600060ff83168061256d5761256d61251c565b8060ff84160691505092915050565b600060ff83168061258f5761258f61251c565b8060ff84160491505092915050565b60ff82811682821603908111156108115761081161237a565b600181815b808511156125f25781600019048211156125d8576125d861237a565b808516156125e557918102915b93841c93908002906125bc565b509250929050565b60008261260957506001610811565b8161261657506000610811565b816001811461262c576002811461263657612652565b6001915050610811565b60ff8411156126475761264761237a565b50506001821b610811565b5060208310610133831016604e8410600b8410161715612675575081810a610811565b61267f83836125b7565b80600019048211156126935761269361237a565b029392505050565b6000611f8483836125fa565b6000600182016126b9576126b961237a565b506001019056fea2646970667358221220be914e6f3dfeddf3d452269e093e5fe0dbea3f244152c7e04a21363d6d0e6e3764736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x144 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xB6 JUMPI DUP1 PUSH4 0xD1851C92 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x3E8 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x406 JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x425 JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x459 JUMPI DUP1 PUSH4 0xDE9B771F EQ PUSH2 0x479 JUMPI DUP1 PUSH4 0xF953CEC7 EQ PUSH2 0x499 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x335 JUMPI DUP1 PUSH4 0x972C4928 EQ PUSH2 0x353 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x373 JUMPI DUP1 PUSH4 0xC0857BA0 EQ PUSH2 0x393 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x3B3 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x3C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B GT PUSH2 0x108 JUMPI DUP1 PUSH4 0x52A9674B EQ PUSH2 0x22A JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x25E JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x27E JUMPI DUP1 PUSH4 0x607F2D42 EQ PUSH2 0x2CA JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x30A JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x320 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE387DE6 EQ PUSH2 0x150 JUMPI DUP1 PUSH4 0x14168416 EQ PUSH2 0x197 JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x1E0 JUMPI DUP1 PUSH4 0x48E6FA23 EQ PUSH2 0x1F5 JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x20A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x14B JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x184 PUSH32 0x8C5261668696CE22758910D05BAB8F186D6EB247CEAC2AF2E82C7DC17669B036 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1CB PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x18E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x184 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x203 CALLDATASIZE PUSH1 0x4 PUSH2 0x21DE JUMP JUMPDEST PUSH2 0x4B9 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x208 PUSH2 0x225 CALLDATASIZE PUSH1 0x4 PUSH2 0x2242 JUMP JUMPDEST PUSH2 0x56E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x236 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1CB PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x208 PUSH2 0x279 CALLDATASIZE PUSH1 0x4 PUSH2 0x228C JUMP JUMPDEST PUSH2 0x614 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B2 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x18E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FA PUSH2 0x2E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x22A9 JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x18E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x316 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x184 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x32C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x208 PUSH2 0x64B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x341 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2B2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x6 SLOAD PUSH2 0x2B2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x208 PUSH2 0x38E CALLDATASIZE PUSH1 0x4 PUSH2 0x228C JUMP JUMPDEST PUSH2 0x6FF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x39F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x5 SLOAD PUSH2 0x2B2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x208 PUSH2 0x79D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x2B2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2B2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x412 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x2FA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x431 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B2 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x465 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FA PUSH2 0x474 CALLDATASIZE PUSH1 0x4 PUSH2 0x228C JUMP JUMPDEST PUSH2 0x80D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x485 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x2B2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x208 PUSH2 0x4B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x2242 JUMP JUMPDEST PUSH2 0x817 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x525 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B937B7BA26B0B730B3B2B9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x52F DUP3 DUP3 PUSH2 0x89A JUMP JUMPDEST PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 DUP3 DUP3 CALLER PUSH1 0x40 MLOAD PUSH2 0x562 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2312 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x5CF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51C SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0x5D8 DUP2 PUSH2 0x8E1 JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0x609 SWAP3 SWAP2 SWAP1 PUSH2 0x2350 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x63F JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x648 DUP2 PUSH2 0x8FA JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x676 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x688 SWAP2 SWAP1 PUSH2 0x2390 JUMP JUMPDEST GT PUSH2 0x6A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x6C9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x6F3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6FD PUSH1 0x0 PUSH2 0x90C JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x72A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x748 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x766 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x794 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x648 DUP2 PUSH2 0x971 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x7C8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x7DA SWAP2 SWAP1 PUSH2 0x2390 JUMP JUMPDEST GT PUSH2 0x7F8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x6FD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x90C JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x822 DUP3 PUSH2 0x9BF JUMP JUMPDEST SWAP1 POP PUSH2 0x82D DUP2 PUSH2 0xCA5 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x8D8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x51C JUMP JUMPDEST PUSH2 0x82D DUP3 PUSH2 0xDC6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x16C2FDB5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x903 DUP2 PUSH2 0x831 JUMP JUMPDEST PUSH2 0x648 DUP2 PUSH2 0xE2F JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x9CC DUP4 PUSH2 0xEBD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9D9 DUP3 PUSH2 0xF1C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9E6 DUP4 PUSH2 0xF45 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH2 0x9F4 DUP5 PUSH2 0xF6E JUMP JUMPDEST PUSH2 0x9FD DUP7 PUSH2 0x1124 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xA0F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x23A3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 SWAP1 SWAP4 MSTORE SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xA93 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x4678526F6F7454756E6E656C3A20455849545F414C52454144595F50524F4345 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x14D4D151 PUSH1 0xE2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x51C JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0xAB5 DUP6 PUSH2 0x1140 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xAC2 DUP3 PUSH2 0x128A JUMP JUMPDEST SWAP1 POP PUSH2 0xACD DUP2 PUSH2 0x131A JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0xB38 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4678526F6F7454756E6E656C3A20494E56414C49445F46585F4348494C445F54 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x1553939153 PUSH1 0xDA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x51C JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB43 DUP8 PUSH2 0x1343 JUMP JUMPDEST SWAP1 POP PUSH2 0xB63 PUSH2 0xB53 DUP5 PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST DUP8 PUSH2 0xB5D DUP11 PUSH2 0x135F JUMP JUMPDEST DUP5 PUSH2 0x137B JUMP JUMPDEST PUSH2 0xBBB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4678526F6F7454756E6E656C3A20494E56414C49445F524543454950545F5052 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x27A7A3 PUSH1 0xE9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x51C JUMP JUMPDEST PUSH2 0xBE9 DUP6 PUSH2 0xBC8 DUP10 PUSH2 0x162E JUMP JUMPDEST PUSH2 0xBD1 DUP11 PUSH2 0x164A JUMP JUMPDEST DUP5 PUSH2 0xBDB DUP13 PUSH2 0x1666 JUMP JUMPDEST PUSH2 0xBE4 DUP14 PUSH2 0x1682 JUMP JUMPDEST PUSH2 0x169E JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xBF5 DUP4 PUSH2 0x17C4 JUMP JUMPDEST SWAP1 POP PUSH32 0x8C5261668696CE22758910D05BAB8F186D6EB247CEAC2AF2E82C7DC17669B036 PUSH2 0xC2B PUSH2 0xC26 DUP4 PUSH1 0x0 PUSH2 0x1800 JUMP JUMPDEST PUSH2 0x1838 JUMP JUMPDEST EQ PUSH2 0xC78 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4678526F6F7454756E6E656C3A20494E56414C49445F5349474E415455524500 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x51C JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC83 DUP5 PUSH2 0x18B2 JUMP JUMPDEST DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xC96 SWAP2 SWAP1 PUSH2 0x23D0 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0xCE0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x51C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH4 0x8E7D93FA PUSH32 0x0 PUSH2 0xD39 DUP5 PUSH2 0x2447 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD91 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0x609 SWAP3 SWAP2 SWAP1 PUSH2 0x2350 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH4 0xB4720477 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP4 PUSH4 0xB4720477 SWAP4 PUSH2 0xDFA SWAP4 AND SWAP2 DUP7 SWAP2 ADD PUSH2 0x246B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE28 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0xE9B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x467842617365526F6F7454756E6E656C3A204348494C445F54554E4E454C5F41 PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x13149150511657D4D155 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x51C JUMP JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0xF07 PUSH2 0xF02 DUP5 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE DUP3 MLOAD DUP3 MSTORE SWAP2 DUP3 ADD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x18CE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE SWAP1 DUP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x811 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x8 DUP2 MLOAD DUP2 LT PUSH2 0xF38 JUMPI PUSH2 0xF38 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x19DA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x811 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0xF61 JUMPI PUSH2 0xF61 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1838 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE DUP2 MLOAD PUSH1 0x60 SWAP2 SWAP1 ISZERO PUSH2 0x811 JUMPI PUSH1 0x0 DUP1 PUSH2 0xF96 PUSH1 0x0 DUP7 PUSH2 0x1A77 JUMP JUMPDEST PUSH1 0xF8 SHR SWAP1 POP PUSH1 0x1 DUP2 EQ DUP1 PUSH2 0xFAD JUMPI POP DUP1 PUSH1 0xFF AND PUSH1 0x3 EQ JUMPDEST ISZERO PUSH2 0x1055 JUMPI PUSH1 0x1 DUP6 MLOAD PUSH1 0x2 PUSH2 0xFC2 SWAP2 SWAP1 PUSH2 0x24A5 JUMP JUMPDEST PUSH2 0xFCC SWAP2 SWAP1 PUSH2 0x2390 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xFE4 JUMPI PUSH2 0xFE4 PUSH2 0x2119 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x100E JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 PUSH2 0x101E PUSH1 0x1 DUP8 PUSH2 0x1A77 JUMP JUMPDEST SWAP1 POP DUP1 DUP5 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1034 JUMPI PUSH2 0x1034 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x1 SWAP3 POP POP PUSH2 0x10B9 JUMP JUMPDEST PUSH1 0x2 DUP6 MLOAD PUSH1 0x2 PUSH2 0x1065 SWAP2 SWAP1 PUSH2 0x24A5 JUMP JUMPDEST PUSH2 0x106F SWAP2 SWAP1 PUSH2 0x2390 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1087 JUMPI PUSH2 0x1087 PUSH2 0x2119 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x10B1 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP JUMPDEST DUP3 MLOAD PUSH1 0xFF DUP4 AND JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x111A JUMPI PUSH2 0x10E9 PUSH2 0x10D8 PUSH1 0xFF DUP7 AND DUP4 PUSH2 0x2390 JUMP JUMPDEST PUSH2 0x10E3 SWAP1 PUSH1 0x2 PUSH2 0x24BC JUMP JUMPDEST DUP9 PUSH2 0x1A77 JUMP JUMPDEST DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x10FB JUMPI PUSH2 0x10FB PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x1 ADD PUSH2 0x10C0 JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x811 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x9 DUP2 MLOAD DUP2 LT PUSH2 0xF61 JUMPI PUSH2 0xF61 PUSH2 0x248F JUMP JUMPDEST PUSH2 0x1164 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x117E DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x6 DUP2 MLOAD DUP2 LT PUSH2 0xF38 JUMPI PUSH2 0xF38 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE SWAP1 DUP4 ADD MSTORE DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP1 DUP3 ADD MSTORE PUSH2 0x11B4 DUP2 PUSH2 0x1AF8 JUMP JUMPDEST ISZERO PUSH2 0x11C9 JUMPI PUSH2 0x11C2 DUP2 PUSH2 0x18CE JUMP JUMPDEST DUP3 MSTORE PUSH2 0x1276 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH2 0x11DF SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x2390 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x11F7 JUMPI PUSH2 0x11F7 PUSH2 0x2119 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1221 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP4 PUSH1 0x21 ADD SWAP2 POP DUP3 PUSH1 0x20 ADD SWAP1 POP PUSH2 0x123F DUP3 DUP3 DUP6 MLOAD PUSH2 0x1B33 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE DUP5 MLOAD DUP3 MSTORE DUP1 DUP6 ADD SWAP1 DUP3 ADD MSTORE PUSH2 0x126F SWAP1 PUSH2 0x18CE JUMP JUMPDEST DUP7 MSTORE POP POP POP POP JUMPDEST PUSH2 0x127F DUP4 PUSH2 0x1124 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH1 0x0 SWAP2 DUP2 ADD DUP3 DUP2 MSTORE PUSH1 0x60 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x0 PUSH2 0x12D8 DUP4 PUSH1 0x0 ADD MLOAD PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0x12CB JUMPI PUSH2 0x12CB PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x18CE JUMP JUMPDEST DUP4 PUSH1 0x40 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x12ED JUMPI PUSH2 0x12ED PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1311 DUP4 PUSH2 0x18CE JUMP JUMPDEST SWAP1 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x811 DUP3 PUSH1 0x20 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x1336 JUMPI PUSH2 0x1336 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1BCC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x811 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH2 0xF61 JUMPI PUSH2 0xF61 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x60 PUSH2 0x811 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x7 DUP2 MLOAD DUP2 LT PUSH2 0xF38 JUMPI PUSH2 0xF38 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x13AF DUP5 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE DUP3 MLOAD DUP3 MSTORE SWAP2 DUP3 ADD SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x13BC DUP3 PUSH2 0x18CE JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP1 DUP6 PUSH1 0x0 DUP1 PUSH2 0x13CE DUP12 PUSH2 0xF6E JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0x13E9 JUMPI PUSH1 0x0 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x1626 JUMP JUMPDEST DUP6 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x161C JUMPI DUP3 MLOAD DUP5 GT ISZERO PUSH2 0x1411 JUMPI PUSH1 0x0 SWAP10 POP POP POP POP POP POP POP POP POP POP PUSH2 0x1626 JUMP JUMPDEST PUSH2 0x1433 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1426 JUMPI PUSH2 0x1426 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1BE6 JUMP JUMPDEST SWAP7 POP DUP7 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP6 EQ PUSH2 0x1455 JUMPI PUSH1 0x0 SWAP10 POP POP POP POP POP POP POP POP POP POP PUSH2 0x1626 JUMP JUMPDEST PUSH2 0x146A DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x12CB JUMPI PUSH2 0x12CB PUSH2 0x248F JUMP JUMPDEST SWAP6 POP DUP6 MLOAD PUSH1 0x11 SUB PUSH2 0x153F JUMPI DUP3 MLOAD DUP5 SUB PUSH2 0x14CB JUMPI DUP14 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH2 0x149B DUP8 PUSH1 0x10 DUP2 MLOAD DUP2 LT PUSH2 0xF38 JUMPI PUSH2 0xF38 PUSH2 0x248F JUMP JUMPDEST DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SUB PUSH2 0x14B9 JUMPI PUSH1 0x1 SWAP10 POP POP POP POP POP POP POP POP POP POP PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x0 SWAP10 POP POP POP POP POP POP POP POP POP POP PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x14DF JUMPI PUSH2 0x14DF PUSH2 0x248F JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0xF8 SHR SWAP1 POP PUSH1 0x10 DUP2 GT ISZERO PUSH2 0x1505 JUMPI PUSH1 0x0 SWAP11 POP POP POP POP POP POP POP POP POP POP POP PUSH2 0x1626 JUMP JUMPDEST PUSH2 0x152A DUP8 DUP3 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x151D JUMPI PUSH2 0x151D PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1C65 JUMP JUMPDEST SWAP6 POP PUSH2 0x1537 PUSH1 0x1 DUP7 PUSH2 0x24BC JUMP JUMPDEST SWAP5 POP POP PUSH2 0x1614 JUMP JUMPDEST DUP6 MLOAD PUSH1 0x2 SUB PUSH2 0x14B9 JUMPI PUSH1 0x0 PUSH2 0x156A PUSH2 0x1563 DUP9 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xF38 JUMPI PUSH2 0xF38 PUSH2 0x248F JUMP JUMPDEST DUP6 DUP8 PUSH2 0x1C93 JUMP JUMPDEST DUP5 MLOAD SWAP1 SWAP2 POP PUSH2 0x1579 DUP3 DUP8 PUSH2 0x24BC JUMP JUMPDEST SUB PUSH2 0x15CE JUMPI DUP15 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH2 0x159C DUP9 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xF38 JUMPI PUSH2 0xF38 PUSH2 0x248F JUMP JUMPDEST DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SUB PUSH2 0x15BB JUMPI PUSH1 0x1 SWAP11 POP POP POP POP POP POP POP POP POP POP POP PUSH2 0x1626 JUMP JUMPDEST PUSH1 0x0 SWAP11 POP POP POP POP POP POP POP POP POP POP POP PUSH2 0x1626 JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x15E9 JUMPI PUSH1 0x0 SWAP11 POP POP POP POP POP POP POP POP POP POP POP PUSH2 0x1626 JUMP JUMPDEST PUSH2 0x15F3 DUP2 DUP7 PUSH2 0x24BC JUMP JUMPDEST SWAP5 POP PUSH2 0x160B DUP8 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x151D JUMPI PUSH2 0x151D PUSH2 0x248F JUMP JUMPDEST SWAP6 POP PUSH2 0x1614 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x13EE JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x811 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH2 0xF61 JUMPI PUSH2 0xF61 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x811 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH2 0xF61 JUMPI PUSH2 0xF61 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x811 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xF61 JUMPI PUSH2 0xF61 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x60 PUSH2 0x811 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xF38 JUMPI PUSH2 0xF38 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH4 0x20A9CEA5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x41539D4A SWAP1 PUSH1 0x24 ADD PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16F0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1714 SWAP2 SWAP1 PUSH2 0x24CF JUMP JUMPDEST POP SWAP4 POP POP SWAP3 POP SWAP3 POP PUSH2 0x176B DUP3 DUP12 PUSH2 0x172B SWAP2 SWAP1 PUSH2 0x2390 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP16 SWAP1 MSTORE DUP2 DUP4 ADD DUP15 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP14 SWAP1 MSTORE PUSH1 0x80 DUP1 DUP4 ADD DUP14 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 DUP6 DUP9 PUSH2 0x1D97 JUMP JUMPDEST PUSH2 0x17B7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4678526F6F7454756E6E656C3A20494E56414C49445F48454144455200000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x51C JUMP JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x17F8 DUP5 PUSH1 0x20 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x12CB JUMPI PUSH2 0x12CB PUSH2 0x248F JUMP JUMPDEST SWAP1 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP3 MLOAD DUP1 MLOAD DUP4 SWAP1 DUP2 LT PUSH2 0x1828 JUMPI PUSH2 0x1828 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x184C JUMPI POP DUP2 MLOAD PUSH1 0x22 GT JUMPDEST PUSH2 0x1855 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1864 DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0x1F09 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x1878 SWAP2 SWAP1 PUSH2 0x2390 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 DUP4 DUP7 PUSH1 0x20 ADD MLOAD PUSH2 0x188D SWAP2 SWAP1 PUSH2 0x24BC JUMP JUMPDEST SWAP1 POP DUP1 MLOAD SWAP2 POP PUSH1 0x20 DUP4 LT ISZERO PUSH2 0x18A9 JUMPI DUP3 PUSH1 0x20 SUB PUSH2 0x100 EXP DUP3 DIV SWAP2 POP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x811 DUP3 PUSH1 0x20 ADD MLOAD PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH2 0xF38 JUMPI PUSH2 0xF38 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x60 PUSH2 0x18D9 DUP3 PUSH2 0x1AF8 JUMP JUMPDEST PUSH2 0x18E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x18ED DUP4 PUSH2 0x1F9D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x190A JUMPI PUSH2 0x190A PUSH2 0x2119 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x194F JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1928 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH2 0x1961 DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x1F09 JUMP JUMPDEST DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x1970 SWAP2 SWAP1 PUSH2 0x24BC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x19CF JUMPI PUSH2 0x1987 DUP4 PUSH2 0x2022 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE POP DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x19B0 JUMPI PUSH2 0x19B0 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH2 0x19C5 DUP3 DUP5 PUSH2 0x24BC JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x1976 JUMP JUMPDEST POP SWAP2 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH2 0x19E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x19F7 DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0x1F09 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x1A0B SWAP2 SWAP1 PUSH2 0x2390 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1A28 JUMPI PUSH2 0x1A28 PUSH2 0x2119 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1A52 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x20 ADD SWAP1 POP PUSH2 0x18A9 DUP5 DUP8 PUSH1 0x20 ADD MLOAD PUSH2 0x1A70 SWAP2 SWAP1 PUSH2 0x24BC JUMP JUMPDEST DUP3 DUP6 PUSH2 0x20C6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A84 PUSH1 0x2 DUP5 PUSH2 0x2532 JUMP JUMPDEST ISZERO PUSH2 0x1ABE JUMPI PUSH1 0x10 DUP3 PUSH2 0x1A97 PUSH1 0x2 DUP7 PUSH2 0x2546 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x1AA7 JUMPI PUSH2 0x1AA7 PUSH2 0x248F JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH2 0x1AB9 SWAP2 SWAP1 PUSH1 0xF8 SHR PUSH2 0x255A JUMP JUMPDEST PUSH2 0x1AEE JUMP JUMPDEST PUSH1 0x10 DUP3 PUSH2 0x1ACC PUSH1 0x2 DUP7 PUSH2 0x2546 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x1ADC JUMPI PUSH2 0x1ADC PUSH2 0x248F JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH2 0x1AEE SWAP2 SWAP1 PUSH1 0xF8 SHR PUSH2 0x257C JUMP JUMPDEST PUSH1 0xF8 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 SUB PUSH2 0x1B0B JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD DUP1 MLOAD PUSH1 0x0 BYTE SWAP1 PUSH1 0xC0 DUP3 LT ISZERO PUSH2 0x1B29 JUMPI POP PUSH1 0x0 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x1B40 JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x1B4C PUSH1 0x1 PUSH1 0x20 PUSH2 0x259E JUMP JUMPDEST PUSH1 0xFF AND DUP2 GT ISZERO PUSH2 0x1B86 JUMPI DUP3 MLOAD DUP3 MSTORE PUSH2 0x1B65 PUSH1 0x20 DUP5 PUSH2 0x24BC JUMP JUMPDEST SWAP3 POP PUSH2 0x1B72 PUSH1 0x20 DUP4 PUSH2 0x24BC JUMP JUMPDEST SWAP2 POP PUSH2 0x1B7F PUSH1 0x20 DUP3 PUSH2 0x2390 JUMP JUMPDEST SWAP1 POP PUSH2 0x1B40 JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x1B93 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH2 0x1BA2 DUP4 PUSH1 0x20 PUSH2 0x2390 JUMP JUMPDEST PUSH2 0x1BAE SWAP1 PUSH2 0x100 PUSH2 0x269B JUMP JUMPDEST PUSH2 0x1BB8 SWAP2 SWAP1 PUSH2 0x2390 JUMP JUMPDEST SWAP4 MLOAD DUP4 MLOAD DUP6 AND SWAP5 NOT AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP2 MSTORE POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x15 EQ PUSH2 0x1BDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x811 DUP3 PUSH2 0x1838 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 PUSH1 0x0 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1C07 JUMPI PUSH2 0x1C07 PUSH2 0x2119 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1C31 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0x1C43 JUMPI SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x20 ADD SWAP1 POP PUSH2 0x1C5E DUP5 PUSH1 0x20 ADD MLOAD DUP3 DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0x20C6 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x21 EQ PUSH2 0x1C76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH2 0x1C8A SWAP2 SWAP1 PUSH2 0x24BC JUMP JUMPDEST MLOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH2 0x1CA0 DUP7 PUSH2 0xF6E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1CBE JUMPI PUSH2 0x1CBE PUSH2 0x2119 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1CE8 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP3 MLOAD DUP7 PUSH2 0x1CFA SWAP2 SWAP1 PUSH2 0x24BC JUMP JUMPDEST SWAP1 POP DUP6 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1D67 JUMPI PUSH1 0x0 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1D1A JUMPI PUSH2 0x1D1A PUSH2 0x248F JUMP JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 POP DUP1 DUP5 PUSH2 0x1D37 DUP11 DUP6 PUSH2 0x2390 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x1D47 JUMPI PUSH2 0x1D47 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP POP PUSH1 0x1 ADD PUSH2 0x1CFE JUMP JUMPDEST POP DUP2 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP4 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SUB PUSH2 0x1D86 JUMPI DUP3 MLOAD SWAP4 POP PUSH2 0x1D8B JUMP JUMPDEST PUSH1 0x0 SWAP4 POP JUMPDEST POP SWAP2 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MLOAD PUSH2 0x1DA7 SWAP2 SWAP1 PUSH2 0x2532 JUMP JUMPDEST ISZERO PUSH2 0x1DEB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x92DCECC2D8D2C840E0E4DEDECC40D8CADCCEE8D PUSH1 0x63 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x51C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 MLOAD PUSH2 0x1DFB SWAP2 SWAP1 PUSH2 0x2546 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E08 DUP2 PUSH1 0x2 PUSH2 0x269B JUMP JUMPDEST DUP6 LT PUSH2 0x1E4E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x4C65616620696E64657820697320746F6F20626967 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x51C JUMP JUMPDEST DUP3 MLOAD PUSH1 0x0 SWAP1 DUP8 SWAP1 DUP3 SWAP1 PUSH2 0x1E62 SWAP1 PUSH1 0x1 PUSH2 0x24BC JUMP JUMPDEST SWAP1 POP PUSH1 0x20 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1EFA JUMPI DUP7 DUP2 ADD MLOAD SWAP4 POP PUSH2 0x1E80 PUSH1 0x2 DUP11 PUSH2 0x2532 JUMP JUMPDEST PUSH1 0x0 SUB PUSH2 0x1EB8 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x60 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP3 POP PUSH2 0x1EE5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP3 POP JUMPDEST PUSH2 0x1EF0 PUSH1 0x2 DUP11 PUSH2 0x2546 JUMP JUMPDEST SWAP9 POP PUSH1 0x20 ADD PUSH2 0x1E67 JUMP JUMPDEST POP POP SWAP1 SWAP5 EQ SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 BYTE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1F22 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xB8 DUP2 LT DUP1 PUSH2 0x1F49 JUMPI POP PUSH2 0x1F38 PUSH1 0x1 PUSH1 0xC0 PUSH2 0x259E JUMP JUMPDEST PUSH1 0xFF AND DUP2 GT DUP1 ISZERO PUSH2 0x1F49 JUMPI POP PUSH1 0xF8 DUP2 LT JUMPDEST ISZERO PUSH2 0x1F57 JUMPI POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x1F8B JUMPI PUSH2 0x1F6C PUSH1 0x1 PUSH1 0xB8 PUSH2 0x259E JUMP JUMPDEST PUSH2 0x1F79 SWAP1 PUSH1 0xFF AND DUP3 PUSH2 0x2390 JUMP JUMPDEST PUSH2 0x1F84 SWAP1 PUSH1 0x1 PUSH2 0x24BC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1F6C PUSH1 0x1 PUSH1 0xF8 PUSH2 0x259E JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 SUB PUSH2 0x1FB0 JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1FC0 DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x1F09 JUMP JUMPDEST DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x1FCF SWAP2 SWAP1 PUSH2 0x24BC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x1FE7 SWAP2 SWAP1 PUSH2 0x24BC JUMP JUMPDEST SWAP1 POP JUMPDEST DUP1 DUP3 LT ISZERO PUSH2 0x2019 JUMPI PUSH2 0x1FFB DUP3 PUSH2 0x2022 JUMP JUMPDEST PUSH2 0x2005 SWAP1 DUP4 PUSH2 0x24BC JUMP JUMPDEST SWAP2 POP DUP3 PUSH2 0x2011 DUP2 PUSH2 0x26A7 JUMP JUMPDEST SWAP4 POP POP PUSH2 0x1FEA JUMP JUMPDEST POP SWAP1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 BYTE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x203D JUMPI PUSH1 0x1 SWAP2 POP PUSH2 0x1C5E JUMP JUMPDEST PUSH1 0xB8 DUP2 LT ISZERO PUSH2 0x2063 JUMPI PUSH2 0x2051 PUSH1 0x80 DUP3 PUSH2 0x2390 JUMP JUMPDEST PUSH2 0x205C SWAP1 PUSH1 0x1 PUSH2 0x24BC JUMP JUMPDEST SWAP2 POP PUSH2 0x1C5E JUMP JUMPDEST PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x2090 JUMPI PUSH1 0xB7 DUP2 SUB PUSH1 0x1 DUP6 ADD SWAP5 POP DUP1 PUSH1 0x20 SUB PUSH2 0x100 EXP DUP6 MLOAD DIV PUSH1 0x1 DUP3 ADD DUP2 ADD SWAP4 POP POP POP PUSH2 0x1C5E JUMP JUMPDEST PUSH1 0xF8 DUP2 LT ISZERO PUSH2 0x20A4 JUMPI PUSH2 0x2051 PUSH1 0xC0 DUP3 PUSH2 0x2390 JUMP JUMPDEST PUSH1 0x1 SWAP4 SWAP1 SWAP4 ADD MLOAD PUSH1 0x20 DUP5 SWAP1 SUB PUSH1 0xF7 ADD PUSH2 0x100 EXP SWAP1 DIV SWAP1 SWAP3 ADD PUSH1 0xF5 NOT ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x20D3 JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x20DF PUSH1 0x1 PUSH1 0x20 PUSH2 0x259E JUMP JUMPDEST PUSH1 0xFF AND DUP2 GT ISZERO PUSH2 0x1B86 JUMPI DUP3 MLOAD DUP3 MSTORE PUSH2 0x20F8 PUSH1 0x20 DUP5 PUSH2 0x24BC JUMP JUMPDEST SWAP3 POP PUSH2 0x2105 PUSH1 0x20 DUP4 PUSH2 0x24BC JUMP JUMPDEST SWAP2 POP PUSH2 0x2112 PUSH1 0x20 DUP3 PUSH2 0x2390 JUMP JUMPDEST SWAP1 POP PUSH2 0x20D3 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2158 JUMPI PUSH2 0x2158 PUSH2 0x2119 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x217A JUMPI PUSH2 0x217A PUSH2 0x2119 JUMP JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2199 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x21AC PUSH2 0x21A7 DUP3 PUSH2 0x2160 JUMP JUMPDEST PUSH2 0x212F JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x21C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x21F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2209 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2215 DUP7 DUP4 DUP8 ADD PUSH2 0x2188 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x222B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2238 DUP6 DUP3 DUP7 ADD PUSH2 0x2188 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x226B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1626 DUP5 DUP3 DUP6 ADD PUSH2 0x2188 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x648 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x229E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1F84 DUP2 PUSH2 0x2277 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x22BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x22DD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x22C5 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x22FE DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x22C2 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2325 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x22E6 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2337 DUP2 DUP7 PUSH2 0x22E6 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2363 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x22E6 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x811 JUMPI PUSH2 0x811 PUSH2 0x237A JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH2 0x23BB DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x22C2 JUMP JUMPDEST PUSH1 0x20 SWAP3 ADD SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x23F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0x240A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x2418 PUSH2 0x21A7 DUP3 PUSH2 0x2160 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x242D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x243E DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x22C2 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x1F97 JUMPI PUSH1 0x0 NOT PUSH1 0x20 SWAP2 SWAP1 SWAP2 SUB PUSH1 0x3 SHL SHL AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x1626 SWAP1 DUP4 ADD DUP5 PUSH2 0x22E6 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x811 JUMPI PUSH2 0x811 PUSH2 0x237A JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x811 JUMPI PUSH2 0x811 PUSH2 0x237A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x24E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 MLOAD SWAP5 POP PUSH1 0x20 DUP7 ADD MLOAD SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD SWAP2 POP PUSH1 0x80 DUP7 ADD MLOAD PUSH2 0x250E DUP2 PUSH2 0x2277 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2541 JUMPI PUSH2 0x2541 PUSH2 0x251C JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2555 JUMPI PUSH2 0x2555 PUSH2 0x251C JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP4 AND DUP1 PUSH2 0x256D JUMPI PUSH2 0x256D PUSH2 0x251C JUMP JUMPDEST DUP1 PUSH1 0xFF DUP5 AND MOD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP4 AND DUP1 PUSH2 0x258F JUMPI PUSH2 0x258F PUSH2 0x251C JUMP JUMPDEST DUP1 PUSH1 0xFF DUP5 AND DIV SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x811 JUMPI PUSH2 0x811 PUSH2 0x237A JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x25F2 JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x25D8 JUMPI PUSH2 0x25D8 PUSH2 0x237A JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x25E5 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x25BC JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2609 JUMPI POP PUSH1 0x1 PUSH2 0x811 JUMP JUMPDEST DUP2 PUSH2 0x2616 JUMPI POP PUSH1 0x0 PUSH2 0x811 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x262C JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x2636 JUMPI PUSH2 0x2652 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x811 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x2647 JUMPI PUSH2 0x2647 PUSH2 0x237A JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x811 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x2675 JUMPI POP DUP2 DUP2 EXP PUSH2 0x811 JUMP JUMPDEST PUSH2 0x267F DUP4 DUP4 PUSH2 0x25B7 JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x2693 JUMPI PUSH2 0x2693 PUSH2 0x237A JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F84 DUP4 DUP4 PUSH2 0x25FA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x26B9 JUMPI PUSH2 0x26B9 PUSH2 0x237A JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBE SWAP2 0x4E PUSH16 0x3DFEDDF3D452269E093E5FE0DBEA3F24 COINBASE MSTORE 0xC7 0xE0 0x4A 0x21 CALLDATASIZE RETURNDATASIZE PUSH14 0xE6E3764736F6C63430008110033 ","sourceMap":"252:2056:139:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1222:115:146;;;;;;;;;;-1:-1:-1;1222:115:146;1271:66;1222:115;;;;;160:25:181;;;148:2;133:18;1222:115:146;;;;;;;;1587:37:116;;;;;;;;;;;;;;;;;;370:10:181;358:23;;;340:42;;328:2;313:18;1587:37:116;196:192:181;1949:112:168;;;;;;;;;;-1:-1:-1;2029:27:168;;1949:112;;1614:200:119;;;;;;:::i;:::-;;:::i;:::-;;4262:148:116;;;;;;;;;;-1:-1:-1;4262:148:116;;;;;:::i;:::-;;:::i;1268:30::-;;;;;;;;;;;;;;;3939:119;;;;;;;;;;-1:-1:-1;3939:119:116;;;;;:::i;:::-;;:::i;1451:37::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3066:32:181;;;3048:51;;3036:2;3021:18;1451:37:116;2902:203:181;1604:46:146;;;;;;;;;;-1:-1:-1;1604:46:146;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3460:14:181;;3453:22;3435:41;;3423:2;3408:18;1604:46:146;3295:187:181;2151:79:168;;;;;;;;;;-1:-1:-1;1530:6:168;2151:79;;3820:442;;;;;;;;;;;;;:::i;1641:79::-;;;;;;;;;;-1:-1:-1;1687:7:168;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;1533:28:146;;;;;;;;;;-1:-1:-1;1533:28:146;;;;-1:-1:-1;;;;;1533:28:146;;;3321:420:168;;;;;;;;;;-1:-1:-1;3321:420:168;;;;;:::i;:::-;;:::i;1425:43:146:-;;;;;;;;;;-1:-1:-1;1425:43:146;;;;-1:-1:-1;;;;;1425:43:146;;;4404:539:168;;;;;;;;;;;;;:::i;1705:30:116:-;;;;;;;;;;-1:-1:-1;1705:30:116;;;;-1:-1:-1;;;;;1705:30:116;;;1792:85:168;;;;;;;;;;-1:-1:-1;1863:9:168;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;;;;;;;;;;-1:-1:-1;3097:4:168;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;1363:28:116;;;;;;;;;;;;;;;4490:107;;;;;;;;;;-1:-1:-1;4490:107:116;;;;;:::i;:::-;;:::i;1369:28:146:-;;;;;;;;;;-1:-1:-1;1369:28:146;;;;-1:-1:-1;;;;;1369:28:146;;;6142:173;;;;;;;;;;-1:-1:-1;6142:173:146;;;;;:::i;:::-;;:::i;1614:200:119:-;2212:10:116;-1:-1:-1;;;;;2226:12:116;2212:26;;2204:51;;;;-1:-1:-1;;;2204:51:116;;4157:2:181;2204:51:116;;;4139:21:181;4196:2;4176:18;;;4169:30;-1:-1:-1;;;4215:18:181;;;4208:42;4267:18;;2204:51:116;;;;;;;;;1721:33:119::1;1734:5;1741:12;1721;:33::i;:::-;1765:44;1777:5;1784:12;1798:10;1765:44;;;;;;;;:::i;:::-;;;;;;;;1614:200:::0;;:::o;4262:148:116:-;1891:10;-1:-1:-1;;;;;1905:3:116;1891:17;;1883:34;;;;-1:-1:-1;;;1883:34:116;;;;;;5507:2:181;5489:21;;;5546:1;5526:18;;;5519:29;-1:-1:-1;;;5579:2:181;5564:18;;5557:34;5623:2;5608:18;;5305:327;1883:34:116;4337:22:::1;4353:5;4337:15;:22::i;:::-;4370:35;4387:5;4394:10;4370:35;;;;;;;:::i;:::-;;;;;;;;4262:148:::0;:::o;3939:119::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4016:37:116::1;4036:16;4016:19;:37::i;:::-;3939:119:::0;:::o;3820:442:168:-;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;3960:27:::2;;3991:1;3960:32:::0;3956:92:::2;;4001:47;;-1:-1:-1::0;;;4001:47:168::2;;;;;;;;;;;3956:92;4095:9;::::0;-1:-1:-1;;;;;4095:9:168::2;:23:::0;4091:88:::2;;4127:52;;-1:-1:-1::0;;;4127:52:168::2;;;;;;;;;;;4091:88;4236:21;4254:1;4236:9;:21::i;:::-;3820:442::o:0;3321:420::-;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;4404:539::-:0;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;4490:107:116:-:0;4549:4;;4568:24;4561:31;4490:107;-1:-1:-1;;4490:107:116:o;6142:173:146:-;6211:20;6234:37;6261:9;6234:26;:37::i;:::-;6211:60;;6277:33;6302:7;6277:24;:33::i;:::-;6205:110;6142:173;:::o;5838:185:116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;6433:34:181;;6503:15;;;6498:2;6483:18;;6476:43;5921:57:116;;6368:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;859:226:139:-;1007:19;;:24;999:49;;;;-1:-1:-1;;;999:49:139;;6732:2:181;999:49:139;;;6714:21:181;6771:2;6751:18;;;6744:30;-1:-1:-1;;;6790:18:181;;;6783:42;6842:18;;999:49:139;6530:336:181;999:49:139;1054:26;1074:5;1054:19;:26::i;5220:267:116:-;5447:35;;-1:-1:-1;;;5447:35:116;;;;;;;;;;;1777:529:139;2217:43;2243:16;2217:25;:43::i;:::-;2267:34;2284:16;2267;:34::i;4981:185:168:-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;5170:183::-;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;2464:2132:146:-;2542:12;2562:44;2609:25;:9;:23;:25::i;:::-;2562:72;;2641:28;2672:30;:7;:28;:30::i;:::-;2641:61;;2708:19;2730:24;:7;:22;:24::i;:::-;2708:46;;2901:16;2963:11;3223:52;3259:15;3223:35;:52::i;:::-;3285:28;:7;:26;:28::i;:::-;2937:384;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2937:384:146;;;;;;;;;2920:407;;2937:384;2920:407;;;;3341:24;;;;:14;:24;;;;;;2920:407;;-1:-1:-1;3341:24:146;;:33;3333:82;;;;-1:-1:-1;;;3333:82:146;;7522:2:181;3333:82:146;;;7504:21:181;7561:2;7541:18;;;7534:30;7600:34;7580:18;;;7573:62;-1:-1:-1;;;7651:18:181;;;7644:34;7695:19;;3333:82:146;7320:400:181;3333:82:146;3421:24;;;;:14;:24;;;;;:31;;-1:-1:-1;;3421:31:146;3448:4;3421:31;;;3502:20;:7;:18;:20::i;:::-;3459:63;;3528:32;3563:16;:7;:14;:16::i;:::-;3528:51;;3637:16;:3;:14;:16::i;:::-;3620:13;;-1:-1:-1;;;;;3620:13:146;;;:33;;;3612:83;;;;-1:-1:-1;;;3612:83:146;;7927:2:181;3612:83:146;;;7909:21:181;7966:2;7946:18;;;7939:30;8005:34;7985:18;;;7978:62;-1:-1:-1;;;8056:18:181;;;8049:35;8101:19;;3612:83:146;7725:401:181;3612:83:146;3702:19;3724:24;:7;:22;:24::i;:::-;3702:46;;3801:102;3828:17;:7;3829:11:141;;;;3738:107;3828:17:146;3847:15;3864:25;:7;:23;:25::i;:::-;3891:11;3801:26;:102::i;:::-;3786:168;;;;-1:-1:-1;;;3786:168:146;;8333:2:181;3786:168:146;;;8315:21:181;8372:2;8352:18;;;8345:30;8411:34;8391:18;;;8384:62;-1:-1:-1;;;8462:18:181;;;8455:33;8505:19;;3786:168:146;8131:399:181;3786:168:146;3996:198;4037:11;4056:22;:7;:20;:22::i;:::-;4086:19;:7;:17;:19::i;:::-;4113:11;4132:25;:7;:23;:25::i;:::-;4165:23;:7;:21;:23::i;:::-;3996:33;:198::i;:::-;;4201:41;4245:15;:3;:13;:15::i;:::-;4201:59;-1:-1:-1;1271:66:146;4290:27;:18;4201:59;4322:22;4290:15;:18::i;:::-;:25;:27::i;:::-;4282:62;4267:147;;;;-1:-1:-1;;;4267:147:146;;8737:2:181;4267:147:146;;;8719:21:181;8776:2;8756:18;;;8749:30;8815:33;8795:18;;;8788:61;8866:18;;4267:147:146;8535:355:181;4267:147:146;4450:20;4484:13;:3;:11;:13::i;:::-;4473:34;;;;;;;;;;;;:::i;:::-;4450:57;2464:2132;-1:-1:-1;;;;;;;;;;;2464:2132:146:o;1089:543:139:-;1428:7;:14;1446:2;1428:20;1420:40;;;;-1:-1:-1;;;1420:40:139;;9749:2:181;1420:40:139;;;9731:21:181;9788:1;9768:18;;;9761:29;-1:-1:-1;;;9806:18:181;;;9799:37;9853:18;;1420:40:139;9547:330:181;1420:40:139;-1:-1:-1;;;;;1522:12:139;1509:36;;1546:13;1561:16;1569:7;1561:16;:::i;:::-;1509:69;;-1:-1:-1;;;;;;1509:69:139;;;;;;;;10374:23:181;;;;1509:69:139;;;10356:42:181;10414:18;;;10407:34;10329:18;;1509:69:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1590:37;1607:7;1616:10;1590:37;;;;;;;:::i;2340:120:146:-;2406:6;;;2432:13;;2406:49;;-1:-1:-1;;;2406:49:146;;-1:-1:-1;;;;;2406:6:146;;;;:25;;:49;;2432:13;;2447:7;;2406:49;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2340:120;:::o;1865:198::-;1946:13;;-1:-1:-1;;;;;1946:13:146;:29;1938:84;;;;-1:-1:-1;;;1938:84:146;;10973:2:181;1938:84:146;;;10955:21:181;11012:2;10992:18;;;10985:30;11051:34;11031:18;;;11024:62;-1:-1:-1;;;11102:18:181;;;11095:40;11152:19;;1938:84:146;10771:406:181;1938:84:146;2028:13;:30;;-1:-1:-1;;;;;;2028:30:146;-1:-1:-1;;;;;2028:30:146;;;;;;;;;;1865:198::o;1369:200:141:-;-1:-1:-1;;;;;;;;;;;;1460:38:141;1501:25;:16;:4;-1:-1:-1;;;;;;;;;;;;;;;;;1537:28:144;;;;;;;;1545:11;;1537:28;;1503:15;;;1537:28;;;;;;;;1373:197;1501:16:141;:23;:25::i;:::-;1540:24;;;;;;;;;;;;;1369:200;-1:-1:-1;;;1369:200:141:o;3306:138::-;3387:12;3414:25;:7;:12;;;3427:1;3414:15;;;;;;;;:::i;:::-;;;;;;;:23;:25::i;1839:126::-;1914:7;1936:24;:7;:12;;;1949:1;1936:15;;;;;;;;:::i;:::-;;;;;;;:22;:24::i;3559:727:143:-;3643:25;;;;;;;;;:20;:25;;3678:8;;3623:12;;3643:25;3678:12;3674:588;;3700:12;3720:14;3743:26;3764:1;3767;3743:20;:26::i;:::-;3737:33;;;-1:-1:-1;3794:1:143;3782:13;;;:30;;;3799:8;:13;;3811:1;3799:13;3782:30;3778:281;;;3859:1;3844;:8;3855:1;3844:12;;;;:::i;:::-;:16;;;;:::i;:::-;3834:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3834:27:143;;3824:37;;3871:16;3890:26;3911:1;3914;3890:20;:26::i;:::-;3871:45;;3939:9;3926:7;3934:1;3926:10;;;;;;;;:::i;:::-;;;;:22;-1:-1:-1;;;;;3926:22:143;;;;;;;;;3967:1;3958:10;;3814:163;3778:281;;;4028:1;4013;:8;4024:1;4013:12;;;;:::i;:::-;:16;;;;:::i;:::-;4003:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4003:27:143;;3993:37;;4049:1;4040:10;;3778:281;4081:14;;4108:18;;;4103:153;4132:3;4128:1;:7;4103:153;;;4162:39;4183:10;;;;:1;:10;:::i;:::-;:14;;4196:1;4183:14;:::i;:::-;4199:1;4162:20;:39::i;:::-;4149:7;4157:1;4149:10;;;;;;;;:::i;:::-;;;;:52;-1:-1:-1;;;;;4149:52:143;;;;;;;;-1:-1:-1;4234:3:143;;4103:153;;;;3692:570;;;4274:7;3559:727;-1:-1:-1;;3559:727:143:o;3583:130:141:-;3662:7;3684:24;:7;:12;;;3697:1;3684:15;;;;;;;;:::i;2370:795::-;2441:22;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;2441:22:141;2485:25;:7;:12;;;2498:1;2485:15;;;;;;;;:::i;:25::-;2471:11;;;;:39;;;-1:-1:-1;;;;;;;;;;;;;;;;1537:28:144;;;;;;;;1545:11;;1537:28;;1503:15;;;1537:28;;;;2589:20:141;1537:28:144;2589:18:141;:20::i;:::-;2585:503;;;2653:20;:11;:18;:20::i;:::-;2638:35;;2585:503;;;2768:11;;;;2819:17;;2742:23;;2819:21;;2839:1;;2819:21;:::i;:::-;2809:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2809:32:141;;2787:54;;2849:14;2871:15;2931:10;2927:2;2923:19;2913:29;;2972:6;2966:4;2962:17;2951:28;;2995:36;3000:6;3008:7;3017:6;:13;2995:4;:36::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;1537:28:144;;;;;;;;1545:11;;1537:28;;1503:15;;;1537:28;;;;3054:27:141;;1501:23;:25::i;3054:27::-;3039:42;;-1:-1:-1;;;;2585:503:141;3113:27;3132:7;3113:18;:27::i;:::-;3094:16;;;:46;-1:-1:-1;3094:7:141;2370:795;-1:-1:-1;2370:795:141:o;3849:206::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3930:32:141;3965:24;:7;:12;;;3978:1;3965:15;;;;;;;;:::i;:::-;;;;;;;:22;:24::i;:::-;3990:7;:16;;;3965:42;;;;;;;;:::i;:::-;;;;;;;3930:77;;4020:30;;;;;;;;4024:7;4020:30;;;;4033:16;:7;:14;:16::i;:::-;4020:30;;4013:37;3849:206;-1:-1:-1;;;3849:206:141:o;4076:118::-;4135:7;4157:32;4177:3;:8;;;4186:1;4177:11;;;;;;;;:::i;:::-;;;;;;;4157:19;:32::i;2231:135::-;2306:7;2336:24;:7;:12;;;2349:1;2336:15;;;;;;;;:::i;3169:133::-;3245:12;3272:25;:7;:12;;;3285:1;3272:15;;;;;;;;:::i;545:2050:143:-;693:4;705:29;737:35;757:14;-1:-1:-1;;;;;;;;;;;;;;;;;1537:28:144;;;;;;;;1545:11;;1537:28;;1503:15;;;1537:28;;;;;;;;1373:197;737:35:143;705:67;;778:38;819:22;836:4;819:16;:22::i;:::-;778:63;-1:-1:-1;848:24:143;;945:4;927:15;;1001:28;1017:11;1001:15;:28::i;:::-;981:48;;1039:4;:11;1054:1;1039:16;1035:49;;1072:5;1065:12;;;;;;;;;;;1035:49;1104:18;;1090:11;1128:1463;1152:3;1148:1;:7;1128:1463;;;1181:4;:11;1171:7;:21;1167:58;;;1211:5;1204:12;;;;;;;;;;;;;1167:58;1247:36;1268:11;1280:1;1268:14;;;;;;;;:::i;:::-;;;;;;;1247:20;:36::i;:::-;1233:50;;1316:11;1306:22;;;;;;1295:7;:33;1291:70;;1347:5;1340:12;;;;;;;;;;;;;1291:70;1386:32;1403:11;1415:1;1403:14;;;;;;;;:::i;1386:32::-;1368:50;;1431:15;:22;1457:2;1431:28;1427:1118;;1486:4;:11;1475:7;:22;1471:208;;1578:5;1568:16;;;;;;1525:38;1543:15;1559:2;1543:19;;;;;;;;:::i;1525:38::-;1515:49;;;;;;:69;1511:158;;1607:4;1600:11;;;;;;;;;;;;;1511:158;1651:5;1644:12;;;;;;;;;;;;;1511:158;1689:20;1718:4;1723:7;1718:13;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;1763:2:143;1746:19;;1742:60;;;1786:5;1779:12;;;;;;;;;;;;;;1742:60;1829:55;1852:15;1868:14;1852:31;;;;;;;;;;:::i;:::-;;;;;;;1829:22;:55::i;:::-;1821:64;-1:-1:-1;1895:12:143;1906:1;1895:12;;:::i;:::-;;;1461:455;1427:1118;;;1926:15;:22;1952:1;1926:27;1922:623;;1965:17;1985:72;2004:37;2022:15;2038:1;2022:18;;;;;;;;:::i;2004:37::-;2043:4;2049:7;1985:18;:72::i;:::-;2094:11;;1965:92;;-1:-1:-1;2071:19:143;1965:92;2071:7;:19;:::i;:::-;:34;2067:241;;2207:5;2197:16;;;;;;2155:37;2173:15;2189:1;2173:18;;;;;;;;:::i;2155:37::-;2145:48;;;;;;:68;2141:157;;2236:4;2229:11;;;;;;;;;;;;;;2141:157;2280:5;2273:12;;;;;;;;;;;;;;2141:157;2347:9;2360:1;2347:14;2343:55;;2382:5;2375:12;;;;;;;;;;;;;;2343:55;2408:20;2419:9;2408:20;;:::i;:::-;;;2456:42;2479:15;2495:1;2479:18;;;;;;;;:::i;2456:42::-;2448:51;-1:-1:-1;1922:623:143;;-1:-1:-1;1922:623:143;;2573:3;;1128:1463;;;;699:1896;;;;;;;;545:2050;;;;;;;:::o;1969:124:141:-;2042:7;2064:24;:7;:12;;;2077:1;2064:15;;;;;;;;:::i;2097:130::-;2167:7;2197:24;:7;:12;;;2210:1;2197:15;;;;;;;;:::i;1573:127::-;1649:7;1671:24;:7;:12;;;1684:1;1671:15;;;;;;;;:::i;1704:131::-;1778:12;1805:25;:7;:12;;;1818:1;1805:15;;;;;;;;:::i;4600:605:146:-;4898:17;;:44;;-1:-1:-1;;;4898:44:146;;;;;160:25:181;;;4817:7:146;;;;;;;;-1:-1:-1;;;;;4898:17:146;;;;:30;;133:18:181;;4898:44:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4832:110;;;;;;;;4964:170;5076:10;5062:11;:24;;;;:::i;:::-;4974:61;;;;;;;12332:19:181;;;12367:12;;;12360:28;;;12404:12;;;12397:28;;;12441:12;;;;12434:28;;;4974:61:146;;;;;;;;;;12478:13:181;;;;4974:61:146;;;4964:72;;;;;;5096:10;5116;4964:88;:170::i;:::-;4949:229;;;;-1:-1:-1;;;4949:229:146;;12704:2:181;4949:229:146;;;12686:21:181;12743:2;12723:18;;;12716:30;12782;12762:18;;;12755:58;12830:18;;4949:229:146;12502:352:181;4949:229:146;5191:9;4600:605;-1:-1:-1;;;;;;;;;4600:605:146:o;4198:125:141:-;-1:-1:-1;;;;;;;;;;;;4287:31:141;;;;;;;;4297:20;:3;:8;;;4306:1;4297:11;;;;;;;;:::i;:20::-;4287:31;;4280:38;4198:125;-1:-1:-1;;4198:125:141:o;4579:143::-;-1:-1:-1;;;;;;;;;;;;;;;;;4699:11:141;;:18;;4711:5;;4699:18;;;;;;:::i;:::-;;;;;;;4692:25;;4579:143;;;;:::o;5132:483:144:-;5215:8;;5192:7;;5215:12;;;;:33;;-1:-1:-1;5231:8:144;;5242:6;-1:-1:-1;5215:33:144;5207:42;;;;;;5256:14;5273:27;5288:4;:11;;;5273:14;:27::i;:::-;5256:44;;5306:11;5331:6;5320:4;:8;;;:17;;;;:::i;:::-;5306:31;;5344:14;5364;5395:6;5381:4;:11;;;:20;;;;:::i;:::-;5364:37;;5440:6;5434:13;5424:23;;5518:2;5513:3;5510:11;5507:78;;;5571:3;5567:2;5563:12;5558:3;5554:22;5546:6;5542:35;5532:45;;5507:78;-1:-1:-1;5604:6:144;5132:483;-1:-1:-1;;;;5132:483:144:o;4327:109:141:-;4383:12;4410:21;:3;:8;;;4419:1;4410:11;;;;;;;;:::i;2306:504:144:-;2366:16;2398:12;2405:4;2398:6;:12::i;:::-;2390:21;;;;;;2418:13;2434:14;2443:4;2434:8;:14::i;:::-;2418:30;;2454:23;2494:5;2480:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;2480:20:144;;;;;;;;;;;;;;;;2454:46;;2507:14;2538:27;2553:4;:11;;;2538:14;:27::i;:::-;2524:4;:11;;;:41;;;;:::i;:::-;2507:58;-1:-1:-1;2571:15:144;;2592:194;2616:5;2612:1;:9;2592:194;;;2643:19;2655:6;2643:11;:19::i;:::-;2633:29;;2682:24;;;;;;;;2690:7;2682:24;;;;2699:6;2682:24;;;2670:6;2677:1;2670:9;;;;;;;;:::i;:::-;;;;;;;;;;:36;2723:16;2732:7;2723:6;:16;:::i;:::-;2714:25;-1:-1:-1;2768:3:144;;2592:194;;;-1:-1:-1;2799:6:144;;2306:504;-1:-1:-1;;;;;2306:504:144:o;5914:396::-;6003:8;;5975:12;;5995:21;;;;;;6023:14;6040:27;6055:4;:11;;;6040:14;:27::i;:::-;6023:44;;6073:11;6098:6;6087:4;:8;;;:17;;;;:::i;:::-;6073:31;;6125:19;6157:3;6147:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6147:14:144;;6125:36;;6168:15;6227:6;6221:4;6217:17;6206:28;;6246:40;6265:6;6251:4;:11;;;:20;;;;:::i;:::-;6273:7;6282:3;6246:4;:40::i;4290:179:143:-;4371:6;4399:5;4403:1;4399;:5;:::i;:::-;:10;:64;;4459:4;4445:3;4449:5;4453:1;4449;:5;:::i;:::-;4445:10;;;;;;;;:::i;:::-;;;;;4439:24;;;4445:10;;4439:24;:::i;:::-;4399:64;;;4432:4;4418:3;4422:5;4426:1;4422;:5;:::i;:::-;4418:10;;;;;;;;:::i;:::-;;;;;4412:24;;;4418:10;;4412:24;:::i;:::-;4392:72;;;4290:179;-1:-1:-1;;;4290:179:143:o;2910:285:144:-;2986:8;;2970:4;;2986:13;;2982:31;;-1:-1:-1;3008:5:144;;2910:285;-1:-1:-1;2910:285:144:o;2982:31::-;3054:11;;;;3105:13;;3020:11;3097:22;;280:4;3135:24;;3131:42;;;-1:-1:-1;3168:5:144;;2910:285;-1:-1:-1;;;2910:285:144:o;3131:42::-;-1:-1:-1;3186:4:144;;2910:285;-1:-1:-1;;;2910:285:144:o;696:669:141:-;789:3;796:1;789:8;785:21;;696:669;;;:::o;785:21::-;868:13;880:1;317:2;868:13;:::i;:::-;862:19;;:3;:19;855:161;;;941:10;;928:24;;968:16;317:2;947:3;968:16;:::i;:::-;;-1:-1:-1;992:17:141;317:2;992:17;;:::i;:::-;;-1:-1:-1;883:16:141;317:2;883:16;;:::i;:::-;;;855:161;;;1026:3;1033:1;1026:8;1022:21;;696:669;;;:::o;1022:21::-;1125:12;1165:1;1146:15;1158:3;317:2;1146:15;:::i;:::-;1140:22;;:3;:22;:::i;:::-;:26;;;;:::i;:::-;1208:10;;1273:11;;1269:22;;1220:9;;1204:26;1333:21;;;;1320:35;;;-1:-1:-1;;696:669:141:o;4942:186:144:-;5064:8;;5005:7;;5076:2;5064:14;5056:23;;;;;;5109:12;5116:4;5109:6;:12::i;4335:301::-;4399:12;4419:19;4451:4;:8;;;4441:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4441:19:144;;4419:41;;4470:6;:13;4487:1;4470:18;4466:37;;4497:6;4335:301;-1:-1:-1;;4335:301:144:o;4466:37::-;4510:11;4561:6;4555:4;4551:17;4544:24;;4580:32;4585:4;:11;;;4598:3;4603:4;:8;;;4580:4;:32::i;:::-;-1:-1:-1;4625:6:144;4335:301;-1:-1:-1;;4335:301:144:o;5648:262::-;5760:8;;5714:7;;5772:2;5760:14;5752:23;;;;;;5782:14;5802;5819:4;:11;;;5833:1;5819:15;;;;:::i;:::-;5867:13;;5648:262;-1:-1:-1;;;;5648:262:144:o;2599:924:143:-;2734:7;;;2974:35;2990:18;2974:15;:35::i;:::-;2947:62;;3015:23;3051:11;:18;3041:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3041:29:143;;3015:55;;3164:12;3189:11;:18;3179:7;:28;;;;:::i;:::-;3164:43;-1:-1:-1;3230:7:143;3213:164;3243:4;3239:1;:8;3213:164;;;3259:17;3279:4;3284:1;3279:7;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;3279:7:143;;-1:-1:-1;3279:7:143;3294:10;3305:11;3309:7;3305:1;:11;:::i;:::-;3294:23;;;;;;;;:::i;:::-;;;;:36;-1:-1:-1;;;;;3294:36:143;;;;;;;;-1:-1:-1;;3359:3:143;;3213:164;;;;3423:10;3413:21;;;;;;3397:11;3387:22;;;;;;:47;3383:120;;3450:11;:18;3444:24;;3383:120;;;3495:1;3489:7;;3383:120;-1:-1:-1;3515:3:143;;2599:924;-1:-1:-1;;;;;;2599:924:143:o;153:961:142:-;288:4;323:2;308:5;:12;:17;;;;:::i;:::-;:22;300:55;;;;-1:-1:-1;;;300:55:142;;15297:2:181;300:55:142;;;15279:21:181;15336:2;15316:18;;;15309:30;-1:-1:-1;;;15355:18:181;;;15348:50;15415:18;;300:55:142;15095:344:181;300:55:142;361:19;398:2;383:5;:12;:17;;;;:::i;:::-;361:39;-1:-1:-1;540:14:142;361:39;540:1;:14;:::i;:::-;532:5;:22;524:56;;;;-1:-1:-1;;;524:56:142;;15646:2:181;524:56:142;;;15628:21:181;15685:2;15665:18;;;15658:30;-1:-1:-1;;;15704:18:181;;;15697:51;15765:18;;524:56:142;15444:345:181;524:56:142;660:12;;587:20;;636:4;;587:20;;660:16;;675:1;660:16;:::i;:::-;646:30;-1:-1:-1;699:2:142;682:391;707:3;703:1;:7;682:391;;;763:13;;;757:20;;-1:-1:-1;797:9:142;805:1;797:5;:9;:::i;:::-;810:1;797:14;793:204;;848:44;;;;;;15951:19:181;;;15986:12;;;15979:28;;;16023:12;;848:44:142;;;;;;;;;;;;838:55;;;;;;823:70;;793:204;;;943:44;;;;;;15951:19:181;;;15986:12;;;15979:28;;;16023:12;;943:44:142;;;;;;;;;;;;933:55;;;;;;918:70;;793:204;1013:9;1021:1;1013:5;:9;:::i;:::-;1005:17;-1:-1:-1;1056:2:142;1051:7;682:391;;;-1:-1:-1;;1085:24:142;;;;153:961;-1:-1:-1;;;;;;153:961:142:o;7959:476:144:-;8089:13;;8021:7;;8081:22;;195:4;8119:26;;8115:315;;;-1:-1:-1;8154:1:144;;7959:476;-1:-1:-1;;7959:476:144:o;8115:315::-;238:4;8170:25;;;:86;;-1:-1:-1;8208:20:144;8227:1;280:4;8208:20;:::i;:::-;8200:28;;:5;:28;:55;;;;-1:-1:-1;321:4:144;8232:23;;8200:55;8166:264;;;-1:-1:-1;8265:1:144;;7959:476;-1:-1:-1;;7959:476:144:o;8166:264::-;280:4;8281:24;;8277:153;;;8353:21;8373:1;238:4;8353:21;:::i;:::-;8344:31;;;;:5;:31;:::i;:::-;:35;;8378:1;8344:35;:::i;:::-;8337:42;7959:476;-1:-1:-1;;;7959:476:144:o;8277:153::-;8406:19;8424:1;321:4;8406:19;:::i;8277:153::-;8030:405;7959:476;;;:::o;6408:382::-;6488:8;;6469:7;;6488:13;;6484:27;;-1:-1:-1;6510:1:144;;6408:382;-1:-1:-1;6408:382:144:o;6484:27::-;6518:13;6541:15;6573:27;6588:4;:11;;;6573:14;:27::i;:::-;6559:4;:11;;;:41;;;;:::i;:::-;6541:59;;6606:14;6637:4;:8;;;6623:4;:11;;;:22;;;;:::i;:::-;6606:39;;6651:116;6668:6;6658:7;:16;6651:116;;;6704:20;6716:7;6704:11;:20::i;:::-;6694:30;;:7;:30;:::i;:::-;6684:40;-1:-1:-1;6753:7:144;;;;:::i;:::-;;;;6651:116;;;-1:-1:-1;6780:5:144;;6408:382;-1:-1:-1;;;6408:382:144:o;6835:1076::-;6983:13;;6894:7;;;;6975:22;;195:4;7013:26;;7009:877;;;7051:1;7041:11;;7009:877;;;238:4;7067:25;;7063:823;;;7104:26;195:4;7104:5;:26;:::i;:::-;:30;;7133:1;7104:30;:::i;:::-;7094:40;;7063:823;;;280:4;7149:24;;7145:741;;;7228:4;7221:5;7217:16;7299:1;7291:6;7287:14;7277:24;;7421:7;7417:2;7413:16;7408:3;7404:26;7395:6;7389:13;7385:46;7510:1;7501:7;7497:15;7488:7;7484:29;7473:40;;;;7145:741;;;321:4;7537:23;;7533:353;;;7580:24;280:4;7580:5;:24;:::i;7533:353::-;7710:1;7698:14;;;;7741:13;7769:2;7765:16;;;7674:4;7765:16;7760:3;7756:26;7737:46;;7843:29;;;-1:-1:-1;;7843:29:144;;7899:7;-1:-1:-1;;6835:1076:144:o;8581:670::-;8674:3;8681:1;8674:8;8670:21;;8581:670;;;:::o;8670:21::-;8753:13;8765:1;356:2;8753:13;:::i;:::-;8747:19;;:3;:19;8740:161;;;8826:10;;8813:24;;8853:16;356:2;8832:3;8853:16;:::i;:::-;;-1:-1:-1;8877:17:144;356:2;8877:17;;:::i;:::-;;-1:-1:-1;8768:16:144;356:2;8768:16;;:::i;:::-;;;8740:161;;575:127:181;636:10;631:3;627:20;624:1;617:31;667:4;664:1;657:15;691:4;688:1;681:15;707:275;778:2;772:9;843:2;824:13;;-1:-1:-1;;820:27:181;808:40;;878:18;863:34;;899:22;;;860:62;857:88;;;925:18;;:::i;:::-;961:2;954:22;707:275;;-1:-1:-1;707:275:181:o;987:186::-;1035:4;1068:18;1060:6;1057:30;1054:56;;;1090:18;;:::i;:::-;-1:-1:-1;1156:2:181;1135:15;-1:-1:-1;;1131:29:181;1162:4;1127:40;;987:186::o;1178:462::-;1220:5;1273:3;1266:4;1258:6;1254:17;1250:27;1240:55;;1291:1;1288;1281:12;1240:55;1327:6;1314:20;1358:48;1374:31;1402:2;1374:31;:::i;:::-;1358:48;:::i;:::-;1431:2;1422:7;1415:19;1477:3;1470:4;1465:2;1457:6;1453:15;1449:26;1446:35;1443:55;;;1494:1;1491;1484:12;1443:55;1559:2;1552:4;1544:6;1540:17;1533:4;1524:7;1520:18;1507:55;1607:1;1582:16;;;1600:4;1578:27;1571:38;;;;1586:7;1178:462;-1:-1:-1;;;1178:462:181:o;1645:539::-;1731:6;1739;1792:2;1780:9;1771:7;1767:23;1763:32;1760:52;;;1808:1;1805;1798:12;1760:52;1848:9;1835:23;1877:18;1918:2;1910:6;1907:14;1904:34;;;1934:1;1931;1924:12;1904:34;1957:49;1998:7;1989:6;1978:9;1974:22;1957:49;:::i;:::-;1947:59;;2059:2;2048:9;2044:18;2031:32;2015:48;;2088:2;2078:8;2075:16;2072:36;;;2104:1;2101;2094:12;2072:36;;2127:51;2170:7;2159:8;2148:9;2144:24;2127:51;:::i;:::-;2117:61;;;1645:539;;;;;:::o;2189:320::-;2257:6;2310:2;2298:9;2289:7;2285:23;2281:32;2278:52;;;2326:1;2323;2316:12;2278:52;2366:9;2353:23;2399:18;2391:6;2388:30;2385:50;;;2431:1;2428;2421:12;2385:50;2454:49;2495:7;2486:6;2475:9;2471:22;2454:49;:::i;2514:131::-;-1:-1:-1;;;;;2589:31:181;;2579:42;;2569:70;;2635:1;2632;2625:12;2650:247;2709:6;2762:2;2750:9;2741:7;2737:23;2733:32;2730:52;;;2778:1;2775;2768:12;2730:52;2817:9;2804:23;2836:31;2861:5;2836:31;:::i;3110:180::-;3169:6;3222:2;3210:9;3201:7;3197:23;3193:32;3190:52;;;3238:1;3235;3228:12;3190:52;-1:-1:-1;3261:23:181;;3110:180;-1:-1:-1;3110:180:181:o;4296:250::-;4381:1;4391:113;4405:6;4402:1;4399:13;4391:113;;;4481:11;;;4475:18;4462:11;;;4455:39;4427:2;4420:10;4391:113;;;-1:-1:-1;;4538:1:181;4520:16;;4513:27;4296:250::o;4551:270::-;4592:3;4630:5;4624:12;4657:6;4652:3;4645:19;4673:76;4742:6;4735:4;4730:3;4726:14;4719:4;4712:5;4708:16;4673:76;:::i;:::-;4803:2;4782:15;-1:-1:-1;;4778:29:181;4769:39;;;;4810:4;4765:50;;4551:270;-1:-1:-1;;4551:270:181:o;4826:474::-;5047:2;5036:9;5029:21;5010:4;5073:44;5113:2;5102:9;5098:18;5090:6;5073:44;:::i;:::-;5165:9;5157:6;5153:22;5148:2;5137:9;5133:18;5126:50;5193:32;5218:6;5210;5193:32;:::i;:::-;5185:40;;;5290:1;5286;5281:3;5277:11;5273:19;5265:6;5261:32;5256:2;5245:9;5241:18;5234:60;4826:474;;;;;;:::o;5637:314::-;5812:2;5801:9;5794:21;5775:4;5832:44;5872:2;5861:9;5857:18;5849:6;5832:44;:::i;:::-;5824:52;;5941:1;5937;5932:3;5928:11;5924:19;5916:6;5912:32;5907:2;5896:9;5892:18;5885:60;5637:314;;;;;:::o;5956:127::-;6017:10;6012:3;6008:20;6005:1;5998:31;6048:4;6045:1;6038:15;6072:4;6069:1;6062:15;6088:128;6155:9;;;6176:11;;;6173:37;;;6190:18;;:::i;6871:444::-;7086:6;7081:3;7074:19;7056:3;7122:6;7116:13;7138:73;7204:6;7199:2;7194:3;7190:12;7185:2;7177:6;7173:15;7138:73;:::i;:::-;7270:2;7230:16;;7262:11;;;7255:27;;;;7306:2;7298:11;;6871:444;-1:-1:-1;;;6871:444:181:o;8895:647::-;8974:6;9027:2;9015:9;9006:7;9002:23;8998:32;8995:52;;;9043:1;9040;9033:12;8995:52;9076:9;9070:16;9109:18;9101:6;9098:30;9095:50;;;9141:1;9138;9131:12;9095:50;9164:22;;9217:4;9209:13;;9205:27;-1:-1:-1;9195:55:181;;9246:1;9243;9236:12;9195:55;9275:2;9269:9;9300:48;9316:31;9344:2;9316:31;:::i;9300:48::-;9371:2;9364:5;9357:17;9411:7;9406:2;9401;9397;9393:11;9389:20;9386:33;9383:53;;;9432:1;9429;9422:12;9383:53;9445:67;9509:2;9504;9497:5;9493:14;9488:2;9484;9480:11;9445:67;:::i;:::-;9531:5;8895:647;-1:-1:-1;;;;;8895:647:181:o;9882:297::-;10000:12;;10047:4;10036:16;;;10030:23;;10000:12;10065:16;;10062:111;;;-1:-1:-1;;10139:4:181;10135:17;;;;10132:1;10128:25;10124:38;10113:50;;9882:297;-1:-1:-1;9882:297:181:o;10452:314::-;-1:-1:-1;;;;;10627:32:181;;10609:51;;10696:2;10691;10676:18;;10669:30;;;-1:-1:-1;;10716:44:181;;10741:18;;10733:6;10716:44;:::i;11182:127::-;11243:10;11238:3;11234:20;11231:1;11224:31;11274:4;11271:1;11264:15;11298:4;11295:1;11288:15;11314:168;11387:9;;;11418;;11435:15;;;11429:22;;11415:37;11405:71;;11456:18;;:::i;11487:125::-;11552:9;;;11573:10;;;11570:36;;;11586:18;;:::i;11617:497::-;11723:6;11731;11739;11747;11755;11808:3;11796:9;11787:7;11783:23;11779:33;11776:53;;;11825:1;11822;11815:12;11776:53;11854:9;11848:16;11838:26;;11904:2;11893:9;11889:18;11883:25;11873:35;;11948:2;11937:9;11933:18;11927:25;11917:35;;11992:2;11981:9;11977:18;11971:25;11961:35;;12039:3;12028:9;12024:19;12018:26;12053:31;12078:5;12053:31;:::i;:::-;12103:5;12093:15;;;11617:497;;;;;;;;:::o;12859:127::-;12920:10;12915:3;12911:20;12908:1;12901:31;12951:4;12948:1;12941:15;12975:4;12972:1;12965:15;12991:112;13023:1;13049;13039:35;;13054:18;;:::i;:::-;-1:-1:-1;13088:9:181;;12991:112::o;13108:120::-;13148:1;13174;13164:35;;13179:18;;:::i;:::-;-1:-1:-1;13213:9:181;;13108:120::o;13233:157::-;13263:1;13297:4;13294:1;13290:12;13321:3;13311:37;;13328:18;;:::i;:::-;13380:3;13373:4;13370:1;13366:12;13362:22;13357:27;;;13233:157;;;;:::o;13395:165::-;13433:1;13467:4;13464:1;13460:12;13491:3;13481:37;;13498:18;;:::i;:::-;13550:3;13543:4;13540:1;13536:12;13532:22;13527:27;;;13395:165;;;;:::o;13565:151::-;13655:4;13648:12;;;13634;;;13630:31;;13673:14;;13670:40;;;13690:18;;:::i;13721:422::-;13810:1;13853:5;13810:1;13867:270;13888:7;13878:8;13875:21;13867:270;;;13947:4;13943:1;13939:6;13935:17;13929:4;13926:27;13923:53;;;13956:18;;:::i;:::-;14006:7;13996:8;13992:22;13989:55;;;14026:16;;;;13989:55;14105:22;;;;14065:15;;;;13867:270;;;13871:3;13721:422;;;;;:::o;14148:806::-;14197:5;14227:8;14217:80;;-1:-1:-1;14268:1:181;14282:5;;14217:80;14316:4;14306:76;;-1:-1:-1;14353:1:181;14367:5;;14306:76;14398:4;14416:1;14411:59;;;;14484:1;14479:130;;;;14391:218;;14411:59;14441:1;14432:10;;14455:5;;;14479:130;14516:3;14506:8;14503:17;14500:43;;;14523:18;;:::i;:::-;-1:-1:-1;;14579:1:181;14565:16;;14594:5;;14391:218;;14693:2;14683:8;14680:16;14674:3;14668:4;14665:13;14661:36;14655:2;14645:8;14642:16;14637:2;14631:4;14628:12;14624:35;14621:77;14618:159;;;-1:-1:-1;14730:19:181;;;14762:5;;14618:159;14809:34;14834:8;14828:4;14809:34;:::i;:::-;14879:6;14875:1;14871:6;14867:19;14858:7;14855:32;14852:58;;;14890:18;;:::i;:::-;14928:20;;14148:806;-1:-1:-1;;;14148:806:181:o;14959:131::-;15019:5;15048:36;15075:8;15069:4;15048:36;:::i;16046:135::-;16085:3;16106:17;;;16103:43;;16126:18;;:::i;:::-;-1:-1:-1;16173:1:181;16162:13;;16046:135::o"},"gasEstimates":{"creation":{"codeDepositCost":"1994800","executionCost":"infinite","totalCost":"infinite"},"external":{"AMB()":"infinite","DOMAIN()":"infinite","MIRROR_DOMAIN()":"infinite","ROOT_MANAGER()":"infinite","SEND_MESSAGE_EVENT_SIG()":"208","acceptProposedOwner()":"63881","checkpointManager()":"2426","delay()":"292","fxChildTunnel()":"2382","fxRoot()":"2447","mirrorConnector()":"2470","owner()":"2354","processMessage(bytes)":"infinite","processedExits(bytes32)":"2539","proposeNewOwner(address)":"infinite","proposed()":"2353","proposedTimestamp()":"2349","receiveMessage(bytes)":"infinite","renounceOwnership()":"66043","renounced()":"2363","sendMessage(bytes,bytes)":"infinite","setMirrorConnector(address)":"infinite","verifySender(address)":"464"},"internal":{"_processMessageFromChild(bytes memory)":"infinite","_sendMessage(bytes memory,bytes memory)":"infinite","_setMirrorConnector(address)":"infinite","_verifySender(address)":"infinite"}},"methodIdentifiers":{"AMB()":"d69f9d61","DOMAIN()":"52a9674b","MIRROR_DOMAIN()":"14168416","ROOT_MANAGER()":"5f61e3ec","SEND_MESSAGE_EVENT_SIG()":"0e387de6","acceptProposedOwner()":"c5b350df","checkpointManager()":"c0857ba0","delay()":"6a42b8f8","fxChildTunnel()":"972c4928","fxRoot()":"de9b771f","mirrorConnector()":"cc394283","owner()":"8da5cb5b","processMessage(bytes)":"4ff746f6","processedExits(bytes32)":"607f2d42","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","receiveMessage(bytes)":"f953cec7","renounceOwnership()":"715018a6","renounced()":"d232c220","sendMessage(bytes,bytes)":"48e6fa23","setMirrorConnector(address)":"5bd11efc","verifySender(address)":"db1b7659"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_mirrorDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_amb\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rootManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_checkPointManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Connector__processMessage_notUsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"MirrorConnectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"mirrorDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"amb\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mirrorConnector\",\"type\":\"address\"}],\"name\":\"NewConnector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROOT_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEND_MESSAGE_EVENT_SIG\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"checkpointManager\",\"outputs\":[{\"internalType\":\"contract ICheckpointManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fxChildTunnel\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fxRoot\",\"outputs\":[{\"internalType\":\"contract IFxStateSender\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"processedExits\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"inputData\",\"type\":\"bytes\"}],\"name\":\"receiveMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"}],\"name\":\"setMirrorConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"processMessage(bytes)\":{\"details\":\"This is called by AMBs to process messages originating from mirror connector\"},\"receiveMessage(bytes)\":{\"details\":\"This function verifies if the transaction actually happened on child chain\",\"params\":{\"inputData\":\"RLP encoded data of the reference tx containing following list of fields  0 - headerNumber - Checkpoint header block number containing the reference tx  1 - blockProof - Proof that the block header (in the child chain) is a leaf in the submitted merkle root  2 - blockNumber - Block number containing the reference tx on child chain  3 - blockTime - Reference tx block time  4 - txRoot - Transactions root of block  5 - receiptRoot - Receipts root of block  6 - receipt - Receipt of the reference transaction  7 - receiptProof - Merkle proof of the reference receipt  8 - branchMask - 32 bits denoting the path of receipt in merkle tree  9 - receiptLogIndex - Log Index to read from the receipt\"}},\"sendMessage(bytes,bytes)\":{\"details\":\"This is called by the root manager *only* on mainnet to propagate the aggregate root\"}},\"version\":1},\"userdoc\":{\"events\":{\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"}},\"kind\":\"user\",\"methods\":{\"AMB()\":{\"notice\":\"Address of the AMB on this domain.\"},\"DOMAIN()\":{\"notice\":\"The domain of this Messaging (i.e. Connector) contract.\"},\"MIRROR_DOMAIN()\":{\"notice\":\"The domain of the corresponding messaging (i.e. Connector) contract.\"},\"ROOT_MANAGER()\":{\"notice\":\"RootManager contract address.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"mirrorConnector()\":{\"notice\":\"Connector on L2 for L1 connectors, and vice versa.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"processMessage(bytes)\":{\"notice\":\"Processes a message received by an AMB\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"receiveMessage(bytes)\":{\"notice\":\"receive message from  L2 to L1, validated by proof\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"sendMessage(bytes,bytes)\":{\"notice\":\"Sends a message over the amb\"},\"setMirrorConnector(address)\":{\"notice\":\"Sets the address of the l2Connector for this domain\"},\"verifySender(address)\":{\"notice\":\"Checks the cross domain sender for a given address\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/polygon/PolygonHubConnector.sol\":\"PolygonHubConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/Connector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IConnector} from \\\"../interfaces/IConnector.sol\\\";\\n\\n/**\\n * @title Connector\\n * @author Connext Labs, Inc.\\n * @notice This contract has the messaging interface functions used by all connectors.\\n *\\n * @dev This contract stores information about mirror connectors, but can be used as a\\n * base for contracts that do not have a mirror (i.e. the connector handling messaging on\\n * mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\\n * will be empty\\n *\\n * @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\\n * or `mirrorGas`\\n */\\nabstract contract Connector is ProposedOwnable, IConnector {\\n  // ========== Custom Errors ===========\\n\\n  error Connector__processMessage_notUsed();\\n\\n  // ============ Events ============\\n\\n  event NewConnector(\\n    uint32 indexed domain,\\n    uint32 indexed mirrorDomain,\\n    address amb,\\n    address rootManager,\\n    address mirrorConnector\\n  );\\n\\n  event MirrorConnectorUpdated(address previous, address current);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The domain of this Messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable DOMAIN;\\n\\n  /**\\n   * @notice Address of the AMB on this domain.\\n   */\\n  address public immutable AMB;\\n\\n  /**\\n   * @notice RootManager contract address.\\n   */\\n  address public immutable ROOT_MANAGER;\\n\\n  /**\\n   * @notice The domain of the corresponding messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable MIRROR_DOMAIN;\\n\\n  /**\\n   * @notice Connector on L2 for L1 connectors, and vice versa.\\n   */\\n  address public mirrorConnector;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered AMB\\n   */\\n  modifier onlyAMB() {\\n    require(msg.sender == AMB, \\\"!AMB\\\");\\n    _;\\n  }\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered ROOT_MANAGER\\n   */\\n  modifier onlyRootManager() {\\n    // NOTE: RootManager will be zero address for spoke connectors.\\n    // Only root manager can dispatch a message to spokes/L2s via the hub connector.\\n    require(msg.sender == ROOT_MANAGER, \\\"!rootManager\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) ProposedOwnable() {\\n    // set the owner\\n    _setOwner(msg.sender);\\n\\n    // sanity checks on values\\n    require(_domain != 0, \\\"empty domain\\\");\\n    require(_rootManager != address(0), \\\"empty rootManager\\\");\\n    // see note at top of contract on why the mirror values are not sanity checked\\n\\n    // set immutables\\n    DOMAIN = _domain;\\n    AMB = _amb;\\n    ROOT_MANAGER = _rootManager;\\n    MIRROR_DOMAIN = _mirrorDomain;\\n    // set mutables if defined\\n    if (_mirrorConnector != address(0)) {\\n      _setMirrorConnector(_mirrorConnector);\\n    }\\n\\n    emit NewConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector);\\n  }\\n\\n  // ============ Receivable ============\\n  /**\\n   * @notice Connectors may need to receive native asset to handle fees when sending a\\n   * message\\n   */\\n  receive() external payable {}\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Sets the address of the l2Connector for this domain\\n   */\\n  function setMirrorConnector(address _mirrorConnector) public onlyOwner {\\n    _setMirrorConnector(_mirrorConnector);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice Processes a message received by an AMB\\n   * @dev This is called by AMBs to process messages originating from mirror connector\\n   */\\n  function processMessage(bytes memory _data) external virtual onlyAMB {\\n    _processMessage(_data);\\n    emit MessageProcessed(_data, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Checks the cross domain sender for a given address\\n   */\\n  function verifySender(address _expected) external returns (bool) {\\n    return _verifySender(_expected);\\n  }\\n\\n  // ============ Virtual Functions ============\\n\\n  /**\\n   * @notice This function is used by the Connext contract on the l2 domain to send a message to the\\n   * l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\\n   * @param _data The contents of the message\\n   * @param _encodedData Data used to send the message; specific to connector\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal virtual;\\n\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(\\n    bytes memory /* _data */\\n  ) internal virtual {\\n    // By default, reverts. This is to ensure the call path is not used unless this function is\\n    // overridden by the inheriting class\\n    revert Connector__processMessage_notUsed();\\n  }\\n\\n  /**\\n   * @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\\n   * is the expected address.\\n   * @dev Should be overridden by the implementing Connector contract.\\n   */\\n  function _verifySender(address _expected) internal virtual returns (bool);\\n\\n  // ============ Private Functions ============\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal virtual {\\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\\n    mirrorConnector = _mirrorConnector;\\n  }\\n}\\n\",\"keccak256\":\"0x08d4077a1b5caf9f46491206064bb24bee467dd741b42fed3d30a608eea83368\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/HubConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Connector} from \\\"./Connector.sol\\\";\\n\\n/**\\n * @title HubConnector\\n * @author Connext Labs, Inc.\\n * @notice This contract implements the messaging functions needed on the hub-side of a given AMB.\\n * The HubConnector has a limited set of functionality compared to the SpokeConnector, namely that\\n * it contains no logic to store or prove messages.\\n *\\n * @dev This contract should be deployed on the hub-side of an AMB (i.e. on L1), and contracts\\n * which extend this should implement the virtual functions defined in the BaseConnector class\\n */\\nabstract contract HubConnector is Connector {\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) Connector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector) {}\\n\\n  // ============ Public fns ============\\n  /**\\n   * @notice Sends a message over the amb\\n   * @dev This is called by the root manager *only* on mainnet to propagate the aggregate root\\n   */\\n  function sendMessage(bytes memory _data, bytes memory _encodedData) external payable onlyRootManager {\\n    _sendMessage(_data, _encodedData);\\n    emit MessageSent(_data, _encodedData, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0xc35621419ca872ed0550b0943a577b39942f3d2c9b54de008fee382d5ad290e4\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/polygon/PolygonHubConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IRootManager} from \\\"../../interfaces/IRootManager.sol\\\";\\n\\nimport {FxBaseRootTunnel} from \\\"./tunnel/FxBaseRootTunnel.sol\\\";\\n\\nimport {HubConnector} from \\\"../HubConnector.sol\\\";\\n\\ncontract PolygonHubConnector is HubConnector, FxBaseRootTunnel {\\n  // ============ Constructor ============\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    address _checkPointManager\\n  )\\n    HubConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector)\\n    FxBaseRootTunnel(_checkPointManager, _amb)\\n  {}\\n\\n  // ============ Private fns ============\\n\\n  function _verifySender(address _expected) internal view override returns (bool) {\\n    // NOTE: always return false on polygon\\n    return false;\\n  }\\n\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\\n    // Should not include specialized calldata\\n    require(_encodedData.length == 0, \\\"!data length\\\");\\n    _sendMessageToChild(_data);\\n  }\\n\\n  function _processMessageFromChild(bytes memory message) internal override {\\n    // NOTE: crosschain sender is not directly exposed by the child message\\n\\n    // do not need any additional sender or origin checks here since the proof contains inclusion proofs of the snapshots\\n\\n    // get the data (should be the aggregate root)\\n    require(message.length == 32, \\\"!length\\\");\\n    // update the root on the root manager\\n    IRootManager(ROOT_MANAGER).aggregate(MIRROR_DOMAIN, bytes32(message));\\n\\n    emit MessageProcessed(message, msg.sender);\\n  }\\n\\n  // DO NOT override _processMessage, should revert from `Connector` class. All messages must use the\\n  // `_processMessageFromChild` flow.\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal override {\\n    // NOTE: FxBaseRootTunnel has the following code in their `setFxChildTunnel`:\\n    // ```\\n    // require(fxChildTunnel == address(0x0), \\\"FxBaseRootTunnel: CHILD_TUNNEL_ALREADY_SET\\\");\\n    // ```\\n    // Which means this function will revert if updating the `mirrorConnector`. In that case, in\\n    // changes  the\\n    // hub connector should also be redeployed\\n    super._setMirrorConnector(_mirrorConnector);\\n\\n    setFxChildTunnel(_mirrorConnector);\\n  }\\n}\\n\",\"keccak256\":\"0x7b259dfd950d7e954365f66256629398ce3801ab4bf5e2ffba79d1ca3ccf9433\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/polygon/lib/ExitPayloadReader.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/ExitPayloadReader.sol\\npragma solidity 0.8.17;\\n\\nimport {RLPReader} from \\\"./RLPReader.sol\\\";\\n\\nlibrary ExitPayloadReader {\\n  using RLPReader for bytes;\\n  using RLPReader for RLPReader.RLPItem;\\n\\n  uint8 constant WORD_SIZE = 32;\\n\\n  struct ExitPayload {\\n    RLPReader.RLPItem[] data;\\n  }\\n\\n  struct Receipt {\\n    RLPReader.RLPItem[] data;\\n    bytes raw;\\n    uint256 logIndex;\\n  }\\n\\n  struct Log {\\n    RLPReader.RLPItem data;\\n    RLPReader.RLPItem[] list;\\n  }\\n\\n  struct LogTopics {\\n    RLPReader.RLPItem[] data;\\n  }\\n\\n  // copy paste of private copy() from RLPReader to avoid changing of existing contracts\\n  function copy(\\n    uint256 src,\\n    uint256 dest,\\n    uint256 len\\n  ) private pure {\\n    if (len == 0) return;\\n\\n    // copy as many word sizes as possible\\n    for (; len > WORD_SIZE - 1; len -= WORD_SIZE) {\\n      assembly {\\n        mstore(dest, mload(src))\\n      }\\n\\n      src += WORD_SIZE;\\n      dest += WORD_SIZE;\\n    }\\n\\n    if (len == 0) return;\\n\\n    // left over bytes. Mask is used to remove unwanted bytes from the word\\n    uint256 mask = 256**(WORD_SIZE - len) - 1;\\n    assembly {\\n      let srcpart := and(mload(src), not(mask)) // zero out src\\n      let destpart := and(mload(dest), mask) // retrieve the bytes\\n      mstore(dest, or(destpart, srcpart))\\n    }\\n  }\\n\\n  function toExitPayload(bytes memory data) internal pure returns (ExitPayload memory) {\\n    RLPReader.RLPItem[] memory payloadData = data.toRlpItem().toList();\\n\\n    return ExitPayload(payloadData);\\n  }\\n\\n  function getHeaderNumber(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[0].toUint();\\n  }\\n\\n  function getBlockProof(ExitPayload memory payload) internal pure returns (bytes memory) {\\n    return payload.data[1].toBytes();\\n  }\\n\\n  function getBlockNumber(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[2].toUint();\\n  }\\n\\n  function getBlockTime(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[3].toUint();\\n  }\\n\\n  function getTxRoot(ExitPayload memory payload) internal pure returns (bytes32) {\\n    return bytes32(payload.data[4].toUint());\\n  }\\n\\n  function getReceiptRoot(ExitPayload memory payload) internal pure returns (bytes32) {\\n    return bytes32(payload.data[5].toUint());\\n  }\\n\\n  function getReceipt(ExitPayload memory payload) internal pure returns (Receipt memory receipt) {\\n    receipt.raw = payload.data[6].toBytes();\\n    RLPReader.RLPItem memory receiptItem = receipt.raw.toRlpItem();\\n\\n    if (receiptItem.isList()) {\\n      // legacy tx\\n      receipt.data = receiptItem.toList();\\n    } else {\\n      // pop first byte before parsting receipt\\n      bytes memory typedBytes = receipt.raw;\\n      bytes memory result = new bytes(typedBytes.length - 1);\\n      uint256 srcPtr;\\n      uint256 destPtr;\\n      assembly {\\n        srcPtr := add(33, typedBytes)\\n        destPtr := add(0x20, result)\\n      }\\n\\n      copy(srcPtr, destPtr, result.length);\\n      receipt.data = result.toRlpItem().toList();\\n    }\\n\\n    receipt.logIndex = getReceiptLogIndex(payload);\\n    return receipt;\\n  }\\n\\n  function getReceiptProof(ExitPayload memory payload) internal pure returns (bytes memory) {\\n    return payload.data[7].toBytes();\\n  }\\n\\n  function getBranchMaskAsBytes(ExitPayload memory payload) internal pure returns (bytes memory) {\\n    return payload.data[8].toBytes();\\n  }\\n\\n  function getBranchMaskAsUint(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[8].toUint();\\n  }\\n\\n  function getReceiptLogIndex(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[9].toUint();\\n  }\\n\\n  // Receipt methods\\n  function toBytes(Receipt memory receipt) internal pure returns (bytes memory) {\\n    return receipt.raw;\\n  }\\n\\n  function getLog(Receipt memory receipt) internal pure returns (Log memory) {\\n    RLPReader.RLPItem memory logData = receipt.data[3].toList()[receipt.logIndex];\\n    return Log(logData, logData.toList());\\n  }\\n\\n  // Log methods\\n  function getEmitter(Log memory log) internal pure returns (address) {\\n    return RLPReader.toAddress(log.list[0]);\\n  }\\n\\n  function getTopics(Log memory log) internal pure returns (LogTopics memory) {\\n    return LogTopics(log.list[1].toList());\\n  }\\n\\n  function getData(Log memory log) internal pure returns (bytes memory) {\\n    return log.list[2].toBytes();\\n  }\\n\\n  function toRlpBytes(Log memory log) internal pure returns (bytes memory) {\\n    return log.data.toRlpBytes();\\n  }\\n\\n  // LogTopics methods\\n  function getField(LogTopics memory topics, uint256 index) internal pure returns (RLPReader.RLPItem memory) {\\n    return topics.data[index];\\n  }\\n}\\n\",\"keccak256\":\"0x0d07d60a794df4d3c0a41032f0ee46912daeb73369a3a112f376fcd0487fc107\",\"license\":\"MIT\"},\"contracts/messaging/connectors/polygon/lib/Merkle.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/Merkle.sol\\npragma solidity 0.8.17;\\n\\nlibrary Merkle {\\n  function checkMembership(\\n    bytes32 leaf,\\n    uint256 index,\\n    bytes32 rootHash,\\n    bytes memory proof\\n  ) internal pure returns (bool) {\\n    require(proof.length % 32 == 0, \\\"Invalid proof length\\\");\\n    uint256 proofHeight = proof.length / 32;\\n    // Proof of size n means, height of the tree is n+1.\\n    // In a tree of height n+1, max #leafs possible is 2 ^ n\\n    require(index < 2**proofHeight, \\\"Leaf index is too big\\\");\\n\\n    bytes32 proofElement;\\n    bytes32 computedHash = leaf;\\n    uint256 len = proof.length + 1;\\n    for (uint256 i = 32; i < len; ) {\\n      assembly {\\n        proofElement := mload(add(proof, i))\\n      }\\n\\n      if (index % 2 == 0) {\\n        computedHash = keccak256(abi.encodePacked(computedHash, proofElement));\\n      } else {\\n        computedHash = keccak256(abi.encodePacked(proofElement, computedHash));\\n      }\\n\\n      index = index / 2;\\n\\n      unchecked {\\n        i += 32;\\n      }\\n    }\\n    return computedHash == rootHash;\\n  }\\n}\\n\",\"keccak256\":\"0xc7282da570239b7d6c774fa6e829a605d73bdfcc7812b727f4a5b42b17b6d64f\",\"license\":\"MIT\"},\"contracts/messaging/connectors/polygon/lib/MerklePatriciaProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/MerklePatriciaProof.sol\\npragma solidity 0.8.17;\\n\\nimport {RLPReader} from \\\"./RLPReader.sol\\\";\\n\\nlibrary MerklePatriciaProof {\\n  /*\\n   * @dev Verifies a merkle patricia proof.\\n   * @param value The terminating value in the trie.\\n   * @param encodedPath The path in the trie leading to value.\\n   * @param rlpParentNodes The rlp encoded stack of nodes.\\n   * @param root The root hash of the trie.\\n   * @return The boolean validity of the proof.\\n   */\\n  function verify(\\n    bytes memory value,\\n    bytes memory encodedPath,\\n    bytes memory rlpParentNodes,\\n    bytes32 root\\n  ) internal pure returns (bool) {\\n    RLPReader.RLPItem memory item = RLPReader.toRlpItem(rlpParentNodes);\\n    RLPReader.RLPItem[] memory parentNodes = RLPReader.toList(item);\\n\\n    bytes memory currentNode;\\n    RLPReader.RLPItem[] memory currentNodeList;\\n\\n    bytes32 nodeKey = root;\\n    uint256 pathPtr = 0;\\n\\n    bytes memory path = _getNibbleArray(encodedPath);\\n    if (path.length == 0) {\\n      return false;\\n    }\\n\\n    uint256 len = parentNodes.length;\\n    for (uint256 i = 0; i < len; ) {\\n      if (pathPtr > path.length) {\\n        return false;\\n      }\\n\\n      currentNode = RLPReader.toRlpBytes(parentNodes[i]);\\n      if (nodeKey != keccak256(currentNode)) {\\n        return false;\\n      }\\n      currentNodeList = RLPReader.toList(parentNodes[i]);\\n\\n      if (currentNodeList.length == 17) {\\n        if (pathPtr == path.length) {\\n          if (keccak256(RLPReader.toBytes(currentNodeList[16])) == keccak256(value)) {\\n            return true;\\n          } else {\\n            return false;\\n          }\\n        }\\n\\n        uint8 nextPathNibble = uint8(path[pathPtr]);\\n        if (nextPathNibble > 16) {\\n          return false;\\n        }\\n        nodeKey = bytes32(RLPReader.toUintStrict(currentNodeList[nextPathNibble]));\\n        pathPtr += 1;\\n      } else if (currentNodeList.length == 2) {\\n        uint256 traversed = _nibblesToTraverse(RLPReader.toBytes(currentNodeList[0]), path, pathPtr);\\n        if (pathPtr + traversed == path.length) {\\n          //leaf node\\n          if (keccak256(RLPReader.toBytes(currentNodeList[1])) == keccak256(value)) {\\n            return true;\\n          } else {\\n            return false;\\n          }\\n        }\\n\\n        //extension node\\n        if (traversed == 0) {\\n          return false;\\n        }\\n\\n        pathPtr += traversed;\\n        nodeKey = bytes32(RLPReader.toUintStrict(currentNodeList[1]));\\n      } else {\\n        return false;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  function _nibblesToTraverse(\\n    bytes memory encodedPartialPath,\\n    bytes memory path,\\n    uint256 pathPtr\\n  ) private pure returns (uint256) {\\n    uint256 len = 0;\\n    // encodedPartialPath has elements that are each two hex characters (1 byte), but partialPath\\n    // and slicedPath have elements that are each one hex character (1 nibble)\\n    bytes memory partialPath = _getNibbleArray(encodedPartialPath);\\n    bytes memory slicedPath = new bytes(partialPath.length);\\n\\n    // pathPtr counts nibbles in path\\n    // partialPath.length is a number of nibbles\\n    uint256 _len = pathPtr + partialPath.length;\\n    for (uint256 i = pathPtr; i < _len; ) {\\n      bytes1 pathNibble = path[i];\\n      slicedPath[i - pathPtr] = pathNibble;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    if (keccak256(partialPath) == keccak256(slicedPath)) {\\n      len = partialPath.length;\\n    } else {\\n      len = 0;\\n    }\\n    return len;\\n  }\\n\\n  // bytes b must be hp encoded\\n  function _getNibbleArray(bytes memory b) internal pure returns (bytes memory) {\\n    bytes memory nibbles = \\\"\\\";\\n    if (b.length > 0) {\\n      uint8 offset;\\n      uint8 hpNibble = uint8(_getNthNibbleOfBytes(0, b));\\n      if (hpNibble == 1 || hpNibble == 3) {\\n        nibbles = new bytes(b.length * 2 - 1);\\n        bytes1 oddNibble = _getNthNibbleOfBytes(1, b);\\n        nibbles[0] = oddNibble;\\n        offset = 1;\\n      } else {\\n        nibbles = new bytes(b.length * 2 - 2);\\n        offset = 0;\\n      }\\n\\n      uint256 len = nibbles.length;\\n      for (uint256 i = offset; i < len; ) {\\n        nibbles[i] = _getNthNibbleOfBytes(i - offset + 2, b);\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n    }\\n    return nibbles;\\n  }\\n\\n  function _getNthNibbleOfBytes(uint256 n, bytes memory str) private pure returns (bytes1) {\\n    return bytes1(n % 2 == 0 ? uint8(str[n / 2]) / 0x10 : uint8(str[n / 2]) % 0x10);\\n  }\\n}\\n\",\"keccak256\":\"0x5132cb2535739352bac5f6cd66689cbd1bc086e048a05f7524079ef74ad693b3\",\"license\":\"MIT\"},\"contracts/messaging/connectors/polygon/lib/RLPReader.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/RLPReader.sol\\npragma solidity 0.8.17;\\n\\nlibrary RLPReader {\\n  uint8 constant STRING_SHORT_START = 0x80;\\n  uint8 constant STRING_LONG_START = 0xb8;\\n  uint8 constant LIST_SHORT_START = 0xc0;\\n  uint8 constant LIST_LONG_START = 0xf8;\\n  uint8 constant WORD_SIZE = 32;\\n\\n  struct RLPItem {\\n    uint256 len;\\n    uint256 memPtr;\\n  }\\n\\n  struct Iterator {\\n    RLPItem item; // Item that's being iterated over.\\n    uint256 nextPtr; // Position of the next item in the list.\\n  }\\n\\n  /*\\n   * @dev Returns the next element in the iteration. Reverts if it has not next element.\\n   * @param self The iterator.\\n   * @return The next element in the iteration.\\n   */\\n  function next(Iterator memory self) internal pure returns (RLPItem memory) {\\n    require(hasNext(self));\\n\\n    uint256 ptr = self.nextPtr;\\n    uint256 itemLength = _itemLength(ptr);\\n    self.nextPtr = ptr + itemLength;\\n\\n    return RLPItem(itemLength, ptr);\\n  }\\n\\n  /*\\n   * @dev Returns true if the iteration has more elements.\\n   * @param self The iterator.\\n   * @return true if the iteration has more elements.\\n   */\\n  function hasNext(Iterator memory self) internal pure returns (bool) {\\n    RLPItem memory item = self.item;\\n    return self.nextPtr < item.memPtr + item.len;\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function toRlpItem(bytes memory item) internal pure returns (RLPItem memory) {\\n    uint256 memPtr;\\n    assembly {\\n      memPtr := add(item, 0x20)\\n    }\\n\\n    return RLPItem(item.length, memPtr);\\n  }\\n\\n  /*\\n   * @dev Create an iterator. Reverts if item is not a list.\\n   * @param self The RLP item.\\n   * @return An 'Iterator' over the item.\\n   */\\n  function iterator(RLPItem memory self) internal pure returns (Iterator memory) {\\n    require(isList(self));\\n\\n    uint256 ptr = self.memPtr + _payloadOffset(self.memPtr);\\n    return Iterator(self, ptr);\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function rlpLen(RLPItem memory item) internal pure returns (uint256) {\\n    return item.len;\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function payloadLen(RLPItem memory item) internal pure returns (uint256) {\\n    return item.len - _payloadOffset(item.memPtr);\\n  }\\n\\n  /*\\n   * @param item RLP encoded list in bytes\\n   */\\n  function toList(RLPItem memory item) internal pure returns (RLPItem[] memory) {\\n    require(isList(item));\\n\\n    uint256 items = numItems(item);\\n    RLPItem[] memory result = new RLPItem[](items);\\n\\n    uint256 memPtr = item.memPtr + _payloadOffset(item.memPtr);\\n    uint256 dataLen;\\n    for (uint256 i = 0; i < items; ) {\\n      dataLen = _itemLength(memPtr);\\n      result[i] = RLPItem(dataLen, memPtr);\\n      memPtr = memPtr + dataLen;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    return result;\\n  }\\n\\n  // @return indicator whether encoded payload is a list. negate this function call for isData.\\n  function isList(RLPItem memory item) internal pure returns (bool) {\\n    if (item.len == 0) return false;\\n\\n    uint8 byte0;\\n    uint256 memPtr = item.memPtr;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < LIST_SHORT_START) return false;\\n    return true;\\n  }\\n\\n  /*\\n   * @dev A cheaper version of keccak256(toRlpBytes(item)) that avoids copying memory.\\n   * @return keccak256 hash of RLP encoded bytes.\\n   */\\n  function rlpBytesKeccak256(RLPItem memory item) internal pure returns (bytes32) {\\n    uint256 ptr = item.memPtr;\\n    uint256 len = item.len;\\n    bytes32 result;\\n    assembly {\\n      result := keccak256(ptr, len)\\n    }\\n    return result;\\n  }\\n\\n  function payloadLocation(RLPItem memory item) internal pure returns (uint256, uint256) {\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 memPtr = item.memPtr + offset;\\n    uint256 len = item.len - offset; // data length\\n    return (memPtr, len);\\n  }\\n\\n  /*\\n   * @dev A cheaper version of keccak256(toBytes(item)) that avoids copying memory.\\n   * @return keccak256 hash of the item payload.\\n   */\\n  function payloadKeccak256(RLPItem memory item) internal pure returns (bytes32) {\\n    (uint256 memPtr, uint256 len) = payloadLocation(item);\\n    bytes32 result;\\n    assembly {\\n      result := keccak256(memPtr, len)\\n    }\\n    return result;\\n  }\\n\\n  /** RLPItem conversions into data types **/\\n\\n  // @returns raw rlp encoding in bytes\\n  function toRlpBytes(RLPItem memory item) internal pure returns (bytes memory) {\\n    bytes memory result = new bytes(item.len);\\n    if (result.length == 0) return result;\\n\\n    uint256 ptr;\\n    assembly {\\n      ptr := add(0x20, result)\\n    }\\n\\n    copy(item.memPtr, ptr, item.len);\\n    return result;\\n  }\\n\\n  // any non-zero byte is considered true\\n  function toBoolean(RLPItem memory item) internal pure returns (bool) {\\n    require(item.len == 1);\\n    uint256 result;\\n    uint256 memPtr = item.memPtr;\\n    assembly {\\n      result := byte(0, mload(memPtr))\\n    }\\n\\n    return result == 0 ? false : true;\\n  }\\n\\n  function toAddress(RLPItem memory item) internal pure returns (address) {\\n    // 1 byte for the length prefix\\n    require(item.len == 21);\\n\\n    return address(uint160(toUint(item)));\\n  }\\n\\n  function toUint(RLPItem memory item) internal pure returns (uint256) {\\n    require(item.len > 0 && item.len < 33 + 1);\\n\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 len = item.len - offset;\\n\\n    uint256 result;\\n    uint256 memPtr = item.memPtr + offset;\\n    assembly {\\n      result := mload(memPtr)\\n\\n      // shfit to the correct location if neccesary\\n      if lt(len, 32) {\\n        result := div(result, exp(256, sub(32, len)))\\n      }\\n    }\\n\\n    return result;\\n  }\\n\\n  // enforces 32 byte length\\n  function toUintStrict(RLPItem memory item) internal pure returns (uint256) {\\n    // one byte prefix\\n    require(item.len == 33);\\n\\n    uint256 result;\\n    uint256 memPtr = item.memPtr + 1;\\n    assembly {\\n      result := mload(memPtr)\\n    }\\n\\n    return result;\\n  }\\n\\n  function toBytes(RLPItem memory item) internal pure returns (bytes memory) {\\n    require(item.len > 0);\\n\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 len = item.len - offset; // data length\\n    bytes memory result = new bytes(len);\\n\\n    uint256 destPtr;\\n    assembly {\\n      destPtr := add(0x20, result)\\n    }\\n\\n    copy(item.memPtr + offset, destPtr, len);\\n    return result;\\n  }\\n\\n  /*\\n   * Private Helpers\\n   */\\n\\n  // @return number of payload items inside an encoded list.\\n  function numItems(RLPItem memory item) private pure returns (uint256) {\\n    if (item.len == 0) return 0;\\n\\n    uint256 count = 0;\\n    uint256 currPtr = item.memPtr + _payloadOffset(item.memPtr);\\n    uint256 endPtr = item.memPtr + item.len;\\n    while (currPtr < endPtr) {\\n      currPtr = currPtr + _itemLength(currPtr); // skip over an item\\n      count++;\\n    }\\n\\n    return count;\\n  }\\n\\n  // @return entire rlp item byte length\\n  function _itemLength(uint256 memPtr) private pure returns (uint256) {\\n    uint256 itemLen;\\n    uint256 byte0;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < STRING_SHORT_START) itemLen = 1;\\n    else if (byte0 < STRING_LONG_START) itemLen = byte0 - STRING_SHORT_START + 1;\\n    else if (byte0 < LIST_SHORT_START) {\\n      assembly {\\n        let byteLen := sub(byte0, 0xb7) // # of bytes the actual length is\\n        memPtr := add(memPtr, 1) // skip over the first byte\\n        /* 32 byte word size */\\n        let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to get the len\\n        itemLen := add(dataLen, add(byteLen, 1))\\n      }\\n    } else if (byte0 < LIST_LONG_START) {\\n      itemLen = byte0 - LIST_SHORT_START + 1;\\n    } else {\\n      assembly {\\n        let byteLen := sub(byte0, 0xf7)\\n        memPtr := add(memPtr, 1)\\n\\n        let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to the correct length\\n        itemLen := add(dataLen, add(byteLen, 1))\\n      }\\n    }\\n\\n    return itemLen;\\n  }\\n\\n  // @return number of bytes until the data\\n  function _payloadOffset(uint256 memPtr) private pure returns (uint256) {\\n    uint256 byte0;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < STRING_SHORT_START) return 0;\\n    else if (byte0 < STRING_LONG_START || (byte0 > LIST_SHORT_START - 1 && byte0 < LIST_LONG_START)) return 1;\\n    else if (byte0 < LIST_SHORT_START)\\n      // being explicit\\n      return byte0 - (STRING_LONG_START - 1) + 1;\\n    else return byte0 - (LIST_LONG_START - 1) + 1;\\n  }\\n\\n  /*\\n   * @param src Pointer to source\\n   * @param dest Pointer to destination\\n   * @param len Amount of memory to copy from the source\\n   */\\n  function copy(\\n    uint256 src,\\n    uint256 dest,\\n    uint256 len\\n  ) private pure {\\n    if (len == 0) return;\\n\\n    // copy as many word sizes as possible\\n    for (; len > WORD_SIZE - 1; len -= WORD_SIZE) {\\n      assembly {\\n        mstore(dest, mload(src))\\n      }\\n\\n      src += WORD_SIZE;\\n      dest += WORD_SIZE;\\n    }\\n\\n    if (len == 0) return;\\n\\n    // left over bytes. Mask is used to remove unwanted bytes from the word\\n    uint256 mask = 256**(WORD_SIZE - len) - 1;\\n\\n    assembly {\\n      let srcpart := and(mload(src), not(mask)) // zero out src\\n      let destpart := and(mload(dest), mask) // retrieve the bytes\\n      mstore(dest, or(destpart, srcpart))\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x213834ee76145029ef22fab9575fbffec4309f7b52b63e23d840aeab7f5a6f44\",\"license\":\"MIT\"},\"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/tunnel/FxBaseRootTunnel.sol\\npragma solidity 0.8.17;\\n\\nimport {RLPReader} from \\\"../lib/RLPReader.sol\\\";\\nimport {MerklePatriciaProof} from \\\"../lib/MerklePatriciaProof.sol\\\";\\nimport {Merkle} from \\\"../lib/Merkle.sol\\\";\\nimport \\\"../lib/ExitPayloadReader.sol\\\";\\n\\ninterface IFxStateSender {\\n  function sendMessageToChild(address _receiver, bytes calldata _data) external;\\n}\\n\\ncontract ICheckpointManager {\\n  struct HeaderBlock {\\n    bytes32 root;\\n    uint256 start;\\n    uint256 end;\\n    uint256 createdAt;\\n    address proposer;\\n  }\\n\\n  /**\\n   * @notice mapping of checkpoint header numbers to block details\\n   * @dev These checkpoints are submited by plasma contracts\\n   */\\n  mapping(uint256 => HeaderBlock) public headerBlocks;\\n}\\n\\nabstract contract FxBaseRootTunnel {\\n  using RLPReader for RLPReader.RLPItem;\\n  using Merkle for bytes32;\\n  using ExitPayloadReader for bytes;\\n  using ExitPayloadReader for ExitPayloadReader.ExitPayload;\\n  using ExitPayloadReader for ExitPayloadReader.Log;\\n  using ExitPayloadReader for ExitPayloadReader.LogTopics;\\n  using ExitPayloadReader for ExitPayloadReader.Receipt;\\n\\n  // keccak256(MessageSent(bytes))\\n  bytes32 public constant SEND_MESSAGE_EVENT_SIG = 0x8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036;\\n\\n  // state sender contract\\n  IFxStateSender public fxRoot;\\n  // root chain manager\\n  ICheckpointManager public checkpointManager;\\n  // child tunnel contract which receives and sends messages\\n  address public fxChildTunnel;\\n\\n  // storage to avoid duplicate exits\\n  mapping(bytes32 => bool) public processedExits;\\n\\n  constructor(address _checkpointManager, address _fxRoot) {\\n    checkpointManager = ICheckpointManager(_checkpointManager);\\n    fxRoot = IFxStateSender(_fxRoot);\\n  }\\n\\n  // set fxChildTunnel if not set already\\n  function setFxChildTunnel(address _fxChildTunnel) internal virtual {\\n    require(fxChildTunnel == address(0x0), \\\"FxBaseRootTunnel: CHILD_TUNNEL_ALREADY_SET\\\");\\n    fxChildTunnel = _fxChildTunnel;\\n  }\\n\\n  /**\\n   * @notice Send bytes message to Child Tunnel\\n   * @param message bytes message that will be sent to Child Tunnel\\n   * some message examples -\\n   *   abi.encode(tokenId);\\n   *   abi.encode(tokenId, tokenMetadata);\\n   *   abi.encode(messageType, messageData);\\n   */\\n  function _sendMessageToChild(bytes memory message) internal {\\n    fxRoot.sendMessageToChild(fxChildTunnel, message);\\n  }\\n\\n  function _validateAndExtractMessage(bytes memory inputData) internal returns (bytes memory) {\\n    ExitPayloadReader.ExitPayload memory payload = inputData.toExitPayload();\\n\\n    bytes memory branchMaskBytes = payload.getBranchMaskAsBytes();\\n    uint256 blockNumber = payload.getBlockNumber();\\n    // checking if exit has already been processed\\n    // unique exit is identified using hash of (blockNumber, branchMask, receiptLogIndex)\\n    bytes32 exitHash = keccak256(\\n      abi.encodePacked(\\n        blockNumber,\\n        // first 2 nibbles are dropped while generating nibble array\\n        // this allows branch masks that are valid but bypass exitHash check (changing first 2 nibbles only)\\n        // so converting to nibble array and then hashing it\\n        MerklePatriciaProof._getNibbleArray(branchMaskBytes),\\n        payload.getReceiptLogIndex()\\n      )\\n    );\\n    require(processedExits[exitHash] == false, \\\"FxRootTunnel: EXIT_ALREADY_PROCESSED\\\");\\n    processedExits[exitHash] = true;\\n\\n    ExitPayloadReader.Receipt memory receipt = payload.getReceipt();\\n    ExitPayloadReader.Log memory log = receipt.getLog();\\n\\n    // check child tunnel\\n    require(fxChildTunnel == log.getEmitter(), \\\"FxRootTunnel: INVALID_FX_CHILD_TUNNEL\\\");\\n\\n    bytes32 receiptRoot = payload.getReceiptRoot();\\n    // verify receipt inclusion\\n    require(\\n      MerklePatriciaProof.verify(receipt.toBytes(), branchMaskBytes, payload.getReceiptProof(), receiptRoot),\\n      \\\"FxRootTunnel: INVALID_RECEIPT_PROOF\\\"\\n    );\\n\\n    // verify checkpoint inclusion\\n    _checkBlockMembershipInCheckpoint(\\n      blockNumber,\\n      payload.getBlockTime(),\\n      payload.getTxRoot(),\\n      receiptRoot,\\n      payload.getHeaderNumber(),\\n      payload.getBlockProof()\\n    );\\n\\n    ExitPayloadReader.LogTopics memory topics = log.getTopics();\\n\\n    require(\\n      bytes32(topics.getField(0).toUint()) == SEND_MESSAGE_EVENT_SIG, // topic0 is event sig\\n      \\\"FxRootTunnel: INVALID_SIGNATURE\\\"\\n    );\\n\\n    // received message data\\n    bytes memory message = abi.decode(log.getData(), (bytes)); // event decodes params again, so decoding bytes to get message\\n    return message;\\n  }\\n\\n  function _checkBlockMembershipInCheckpoint(\\n    uint256 blockNumber,\\n    uint256 blockTime,\\n    bytes32 txRoot,\\n    bytes32 receiptRoot,\\n    uint256 headerNumber,\\n    bytes memory blockProof\\n  ) private view returns (uint256) {\\n    (bytes32 headerRoot, uint256 startBlock, , uint256 createdAt, ) = checkpointManager.headerBlocks(headerNumber);\\n\\n    require(\\n      keccak256(abi.encodePacked(blockNumber, blockTime, txRoot, receiptRoot)).checkMembership(\\n        blockNumber - startBlock,\\n        headerRoot,\\n        blockProof\\n      ),\\n      \\\"FxRootTunnel: INVALID_HEADER\\\"\\n    );\\n    return createdAt;\\n  }\\n\\n  /**\\n   * @notice receive message from  L2 to L1, validated by proof\\n   * @dev This function verifies if the transaction actually happened on child chain\\n   *\\n   * @param inputData RLP encoded data of the reference tx containing following list of fields\\n   *  0 - headerNumber - Checkpoint header block number containing the reference tx\\n   *  1 - blockProof - Proof that the block header (in the child chain) is a leaf in the submitted merkle root\\n   *  2 - blockNumber - Block number containing the reference tx on child chain\\n   *  3 - blockTime - Reference tx block time\\n   *  4 - txRoot - Transactions root of block\\n   *  5 - receiptRoot - Receipts root of block\\n   *  6 - receipt - Receipt of the reference transaction\\n   *  7 - receiptProof - Merkle proof of the reference receipt\\n   *  8 - branchMask - 32 bits denoting the path of receipt in merkle tree\\n   *  9 - receiptLogIndex - Log Index to read from the receipt\\n   */\\n  function receiveMessage(bytes memory inputData) public virtual {\\n    bytes memory message = _validateAndExtractMessage(inputData);\\n    _processMessageFromChild(message);\\n  }\\n\\n  /**\\n   * @notice Process message received from Child Tunnel\\n   * @dev function needs to be implemented to handle message as per requirement\\n   * This is called by onStateReceive function.\\n   * Since it is called via a system call, any event will not be emitted during its execution.\\n   * @param message bytes message that was sent from Child Tunnel\\n   */\\n  function _processMessageFromChild(bytes memory message) internal virtual;\\n}\\n\",\"keccak256\":\"0x7b5d6a3850d1aba92864c1f7361e2a0f1ecd2073e9ef5783b2ff543f45a7e42d\",\"license\":\"MIT\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IRootManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\ninterface IRootManager {\\n  /**\\n   * @notice This is called by relayers to generate + send the mixed root from mainnet via AMB to\\n   * spoke domains.\\n   * @dev This must read information for the root from the registered AMBs.\\n   */\\n  function propagate(\\n    address[] calldata _connectors,\\n    uint256[] calldata _fees,\\n    bytes[] memory _encodedData\\n  ) external payable;\\n\\n  /**\\n   * @notice Called by the connectors for various domains on the hub to aggregate their latest\\n   * inbound root.\\n   * @dev This must read information for the root from the registered AMBs\\n   */\\n  function aggregate(uint32 _domain, bytes32 _outbound) external;\\n}\\n\",\"keccak256\":\"0xa895dfaa4baad37a636e7e7e7da72a0a4badfd2d3d8256f975e5101cd5a98236\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/polygon/PolygonHubConnector.sol:PolygonHubConnector","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/polygon/PolygonHubConnector.sol:PolygonHubConnector","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/polygon/PolygonHubConnector.sol:PolygonHubConnector","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39051,"contract":"contracts/messaging/connectors/polygon/PolygonHubConnector.sol:PolygonHubConnector","label":"mirrorConnector","offset":0,"slot":"3","type":"t_address"},{"astId":47088,"contract":"contracts/messaging/connectors/polygon/PolygonHubConnector.sol:PolygonHubConnector","label":"fxRoot","offset":0,"slot":"4","type":"t_contract(IFxStateSender)47038"},{"astId":47091,"contract":"contracts/messaging/connectors/polygon/PolygonHubConnector.sol:PolygonHubConnector","label":"checkpointManager","offset":0,"slot":"5","type":"t_contract(ICheckpointManager)47056"},{"astId":47093,"contract":"contracts/messaging/connectors/polygon/PolygonHubConnector.sol:PolygonHubConnector","label":"fxChildTunnel","offset":0,"slot":"6","type":"t_address"},{"astId":47097,"contract":"contracts/messaging/connectors/polygon/PolygonHubConnector.sol:PolygonHubConnector","label":"processedExits","offset":0,"slot":"7","type":"t_mapping(t_bytes32,t_bool)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(ICheckpointManager)47056":{"encoding":"inplace","label":"contract ICheckpointManager","numberOfBytes":"20"},"t_contract(IFxStateSender)47038":{"encoding":"inplace","label":"contract IFxStateSender","numberOfBytes":"20"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"MessageProcessed(bytes,address)":{"notice":"Emitted whenever a message is successfully received over an AMB"},"MessageSent(bytes,bytes,address)":{"notice":"Emitted whenever a message is successfully sent over an AMB"}},"kind":"user","methods":{"AMB()":{"notice":"Address of the AMB on this domain."},"DOMAIN()":{"notice":"The domain of this Messaging (i.e. Connector) contract."},"MIRROR_DOMAIN()":{"notice":"The domain of the corresponding messaging (i.e. Connector) contract."},"ROOT_MANAGER()":{"notice":"RootManager contract address."},"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"mirrorConnector()":{"notice":"Connector on L2 for L1 connectors, and vice versa."},"owner()":{"notice":"Returns the address of the current owner."},"processMessage(bytes)":{"notice":"Processes a message received by an AMB"},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"receiveMessage(bytes)":{"notice":"receive message from  L2 to L1, validated by proof"},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"sendMessage(bytes,bytes)":{"notice":"Sends a message over the amb"},"setMirrorConnector(address)":{"notice":"Sets the address of the l2Connector for this domain"},"verifySender(address)":{"notice":"Checks the cross domain sender for a given address"}},"version":1}}},"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol":{"PolygonSpokeConnector":{"abi":[{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"uint32","name":"_mirrorDomain","type":"uint32"},{"internalType":"address","name":"_amb","type":"address"},{"internalType":"address","name":"_rootManager","type":"address"},{"internalType":"address","name":"_mirrorConnector","type":"address"},{"internalType":"uint256","name":"_processGas","type":"uint256"},{"internalType":"uint256","name":"_reserveGas","type":"uint256"},{"internalType":"uint256","name":"_delayBlocks","type":"uint256"},{"internalType":"address","name":"_merkle","type":"address"},{"internalType":"address","name":"_watcherManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Connector__processMessage_notUsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"inputs":[],"name":"RateLimited__rateLimited_messageSendRateExceeded","type":"error"},{"inputs":[],"name":"TypedMemView__index_indexMoreThan32Bytes","type":"error"},{"inputs":[{"internalType":"uint256","name":"loc","type":"uint256"},{"internalType":"uint256","name":"len","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"slice","type":"uint256"}],"name":"TypedMemView__index_overrun","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_identityOOG","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_invalidPointer","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_nullPointer","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootVerified","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"updated","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"DelayBlocksUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"message","type":"bytes"}],"name":"Dispatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"aggregateRoot","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"aggregateIndex","type":"uint256"}],"name":"MessageProven","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"message","type":"bytes"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"encodedData","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"current","type":"address"}],"name":"MirrorConnectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"mirrorDomain","type":"uint32"},{"indexed":false,"internalType":"address","name":"amb","type":"address"},{"indexed":false,"internalType":"address","name":"rootManager","type":"address"},{"indexed":false,"internalType":"address","name":"mirrorConnector","type":"address"}],"name":"NewConnector","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"returnData","type":"bytes"}],"name":"Process","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updater","type":"address"},{"indexed":false,"internalType":"uint256","name":"newRateLimit","type":"uint256"}],"name":"SendRateLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"SenderAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"SenderRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"watcherManager","type":"address"}],"name":"WatcherManagerChanged","type":"event"},{"inputs":[],"name":"AMB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MERKLE","outputs":[{"internalType":"contract MerkleTreeManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIRROR_DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROCESS_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"addSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlistedSenders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_destinationDomain","type":"uint32"},{"internalType":"bytes32","name":"_recipientAddress","type":"bytes32"},{"internalType":"bytes","name":"_messageBody","type":"bytes"}],"name":"dispatch","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fxChild","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fxRootTunnel","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"home","outputs":[{"internalType":"contract IOutbox","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_potentialReplica","type":"address"}],"name":"isReplica","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"localDomain","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"messages","outputs":[{"internalType":"enum SpokeConnector.MessageStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mirrorConnector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"nonces","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"outboundRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"pendingAggregateRoots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"processMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stateId","type":"uint256"},{"internalType":"address","name":"rootMessageSender","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"processMessageFromRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32[32]","name":"path","type":"bytes32[32]"},{"internalType":"uint256","name":"index","type":"uint256"}],"internalType":"struct SpokeConnector.Proof[]","name":"_proofs","type":"tuple[]"},{"internalType":"bytes32","name":"_aggregateRoot","type":"bytes32"},{"internalType":"bytes32[32]","name":"_aggregatePath","type":"bytes32[32]"},{"internalType":"uint256","name":"_aggregateIndex","type":"uint256"}],"name":"proveAndProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"provenAggregateRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"provenMessageRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rateLimitBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_fraudulentRoot","type":"bytes32"}],"name":"removePendingAggregateRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"removeSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_encodedData","type":"bytes"}],"name":"send","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"sentMessageRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_delayBlocks","type":"uint256"}],"name":"setDelayBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mirrorConnector","type":"address"}],"name":"setMirrorConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rateLimit","type":"uint256"}],"name":"setRateLimitBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_watcherManager","type":"address"}],"name":"setWatcherManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_expected","type":"address"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"watcherManager","outputs":[{"internalType":"contract WatcherManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"addSender(address)":{"details":"Only allowlisted routers (senders) can call `dispatch`."},"dispatch(uint32,bytes32,bytes)":{"details":"The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \"hub\"), it will be combined into a single aggregate root by RootManager (along with outbound roots from other chains). This aggregate root will be redistributed to all destination chains. NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions"},"home()":{"details":"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad","returns":{"_0":"The local inbox contract"}},"isReplica(address)":{"returns":{"_0":"True if _potentialReplica is an enrolled Replica"}},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"processMessage(bytes)":{"details":"This is called by AMBs to process messages originating from mirror connector"},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":{"details":"Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.Intended to be called by the relayer at specific intervals during runtime.Will record a calculated root as having been proven if we've already proven that it was included in the aggregateRoot.","params":{"_aggregateIndex":"Index of the inbound root in the aggregator's merkle tree in the hub.","_aggregatePath":"Merkle path of inclusion for the inbound root.","_aggregateRoot":"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.","_proofs":"Batch of Proofs containing messages for proving/processing."}},"removePendingAggregateRoot(bytes32)":{"details":"This method is required for handling fraud cases in the current construction.","params":{"_fraudulentRoot":"Target fraudulent root that should be erased from the `pendingAggregateRoots` mapping."}},"removeSender(address)":{"details":"Only allowlisted routers (senders) can call `dispatch`."},"renounceOwnership()":{"details":"Renounce ownership should be impossible as long as it is impossible in the WatcherClient, and as long as only the owner can remove pending roots in case of fraud."},"setRateLimitBlocks(uint256)":{"details":"Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)","params":{"_rateLimit":"The number of blocks require between sending messages. If set to 0, rate limiting for this spoke connector will be disabled."}},"withdrawFunds(address)":{"details":"Withdraws the entire balance of the contract.","params":{"_to":"The recipient of the funds withdrawn"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_10599":{"entryPoint":null,"id":10599,"parameterSlots":0,"returnSlots":0},"@_10699":{"entryPoint":null,"id":10699,"parameterSlots":0,"returnSlots":0},"@_38838":{"entryPoint":null,"id":38838,"parameterSlots":1,"returnSlots":0},"@_39152":{"entryPoint":null,"id":39152,"parameterSlots":5,"returnSlots":0},"@_39257":{"entryPoint":null,"id":39257,"parameterSlots":0,"returnSlots":0},"@_39687":{"entryPoint":null,"id":39687,"parameterSlots":10,"returnSlots":0},"@_44879":{"entryPoint":null,"id":44879,"parameterSlots":10,"returnSlots":0},"@_46941":{"entryPoint":null,"id":46941,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":856,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_44963":{"entryPoint":820,"id":44963,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":719,"id":49908,"parameterSlots":1,"returnSlots":0},"@setFxRootTunnel_46974":{"entryPoint":961,"id":46974,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":1131,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_address_fromMemory":{"entryPoint":1155,"id":null,"parameterSlots":2,"returnSlots":10},"abi_decode_uint32_fromMemory":{"entryPoint":1105,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f7974c7c2deac4fad00669eceb145d6535e698a8bcd8493990c8db551188166b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4093:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"73:108:181","statements":[{"nodeType":"YulAssignment","src":"83:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"98:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"92:5:181"},"nodeType":"YulFunctionCall","src":"92:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"83:5:181"}]},{"body":{"nodeType":"YulBlock","src":"159:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"168:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"171:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"161:6:181"},"nodeType":"YulFunctionCall","src":"161:12:181"},"nodeType":"YulExpressionStatement","src":"161:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"127:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"138:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"145:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"134:3:181"},"nodeType":"YulFunctionCall","src":"134:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"124:2:181"},"nodeType":"YulFunctionCall","src":"124:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"117:6:181"},"nodeType":"YulFunctionCall","src":"117:41:181"},"nodeType":"YulIf","src":"114:61:181"}]},"name":"abi_decode_uint32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"52:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"63:5:181","type":""}],"src":"14:167:181"},{"body":{"nodeType":"YulBlock","src":"246:117:181","statements":[{"nodeType":"YulAssignment","src":"256:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"271:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"265:5:181"},"nodeType":"YulFunctionCall","src":"265:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"256:5:181"}]},{"body":{"nodeType":"YulBlock","src":"341:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"350:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"353:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"343:6:181"},"nodeType":"YulFunctionCall","src":"343:12:181"},"nodeType":"YulExpressionStatement","src":"343:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"300:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"311:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"326:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"331:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"322:3:181"},"nodeType":"YulFunctionCall","src":"322:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"335:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"318:3:181"},"nodeType":"YulFunctionCall","src":"318:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"307:3:181"},"nodeType":"YulFunctionCall","src":"307:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"297:2:181"},"nodeType":"YulFunctionCall","src":"297:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"290:6:181"},"nodeType":"YulFunctionCall","src":"290:50:181"},"nodeType":"YulIf","src":"287:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"225:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"236:5:181","type":""}],"src":"186:177:181"},{"body":{"nodeType":"YulBlock","src":"600:672:181","statements":[{"body":{"nodeType":"YulBlock","src":"647:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"656:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"659:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"649:6:181"},"nodeType":"YulFunctionCall","src":"649:12:181"},"nodeType":"YulExpressionStatement","src":"649:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"621:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"630:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"617:3:181"},"nodeType":"YulFunctionCall","src":"617:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"642:3:181","type":"","value":"320"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"613:3:181"},"nodeType":"YulFunctionCall","src":"613:33:181"},"nodeType":"YulIf","src":"610:53:181"},{"nodeType":"YulAssignment","src":"672:49:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"711:9:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"682:28:181"},"nodeType":"YulFunctionCall","src":"682:39:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"672:6:181"}]},{"nodeType":"YulAssignment","src":"730:58:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"773:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"784:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"769:3:181"},"nodeType":"YulFunctionCall","src":"769:18:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"740:28:181"},"nodeType":"YulFunctionCall","src":"740:48:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"730:6:181"}]},{"nodeType":"YulAssignment","src":"797:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"841:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"852:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"837:3:181"},"nodeType":"YulFunctionCall","src":"837:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"807:29:181"},"nodeType":"YulFunctionCall","src":"807:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"797:6:181"}]},{"nodeType":"YulAssignment","src":"865:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"909:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"920:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"905:3:181"},"nodeType":"YulFunctionCall","src":"905:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"875:29:181"},"nodeType":"YulFunctionCall","src":"875:49:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"865:6:181"}]},{"nodeType":"YulAssignment","src":"933:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"977:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"988:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"973:3:181"},"nodeType":"YulFunctionCall","src":"973:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"943:29:181"},"nodeType":"YulFunctionCall","src":"943:50:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"933:6:181"}]},{"nodeType":"YulAssignment","src":"1002:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1022:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1033:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1018:3:181"},"nodeType":"YulFunctionCall","src":"1018:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1012:5:181"},"nodeType":"YulFunctionCall","src":"1012:26:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"1002:6:181"}]},{"nodeType":"YulAssignment","src":"1047:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1067:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1078:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1063:3:181"},"nodeType":"YulFunctionCall","src":"1063:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1057:5:181"},"nodeType":"YulFunctionCall","src":"1057:26:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"1047:6:181"}]},{"nodeType":"YulAssignment","src":"1092:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1112:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1123:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1108:3:181"},"nodeType":"YulFunctionCall","src":"1108:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1102:5:181"},"nodeType":"YulFunctionCall","src":"1102:26:181"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"1092:6:181"}]},{"nodeType":"YulAssignment","src":"1137:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1181:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1192:3:181","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1177:3:181"},"nodeType":"YulFunctionCall","src":"1177:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"1147:29:181"},"nodeType":"YulFunctionCall","src":"1147:50:181"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"1137:6:181"}]},{"nodeType":"YulAssignment","src":"1206:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1250:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1261:3:181","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1246:3:181"},"nodeType":"YulFunctionCall","src":"1246:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"1216:29:181"},"nodeType":"YulFunctionCall","src":"1216:50:181"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"1206:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"494:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"505:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"517:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"525:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"533:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"541:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"549:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"557:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"565:6:181","type":""},{"name":"value7","nodeType":"YulTypedName","src":"573:6:181","type":""},{"name":"value8","nodeType":"YulTypedName","src":"581:6:181","type":""},{"name":"value9","nodeType":"YulTypedName","src":"589:6:181","type":""}],"src":"368:904:181"},{"body":{"nodeType":"YulBlock","src":"1451:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1468:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1479:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1461:6:181"},"nodeType":"YulFunctionCall","src":"1461:21:181"},"nodeType":"YulExpressionStatement","src":"1461:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1502:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1513:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1498:3:181"},"nodeType":"YulFunctionCall","src":"1498:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1518:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1491:6:181"},"nodeType":"YulFunctionCall","src":"1491:30:181"},"nodeType":"YulExpressionStatement","src":"1491:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1541:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1552:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1537:3:181"},"nodeType":"YulFunctionCall","src":"1537:18:181"},{"hexValue":"656d70747920646f6d61696e","kind":"string","nodeType":"YulLiteral","src":"1557:14:181","type":"","value":"empty domain"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1530:6:181"},"nodeType":"YulFunctionCall","src":"1530:42:181"},"nodeType":"YulExpressionStatement","src":"1530:42:181"},{"nodeType":"YulAssignment","src":"1581:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1593:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1604:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1589:3:181"},"nodeType":"YulFunctionCall","src":"1589:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1581:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1428:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1442:4:181","type":""}],"src":"1277:336:181"},{"body":{"nodeType":"YulBlock","src":"1792:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1809:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1820:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1802:6:181"},"nodeType":"YulFunctionCall","src":"1802:21:181"},"nodeType":"YulExpressionStatement","src":"1802:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1843:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1854:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1839:3:181"},"nodeType":"YulFunctionCall","src":"1839:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1859:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1832:6:181"},"nodeType":"YulFunctionCall","src":"1832:30:181"},"nodeType":"YulExpressionStatement","src":"1832:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1882:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1893:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1878:3:181"},"nodeType":"YulFunctionCall","src":"1878:18:181"},{"hexValue":"656d70747920726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"1898:19:181","type":"","value":"empty rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1871:6:181"},"nodeType":"YulFunctionCall","src":"1871:47:181"},"nodeType":"YulExpressionStatement","src":"1871:47:181"},{"nodeType":"YulAssignment","src":"1927:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1939:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1950:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1935:3:181"},"nodeType":"YulFunctionCall","src":"1935:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1927:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1769:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1783:4:181","type":""}],"src":"1618:341:181"},{"body":{"nodeType":"YulBlock","src":"2121:227:181","statements":[{"nodeType":"YulAssignment","src":"2131:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2143:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2154:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2139:3:181"},"nodeType":"YulFunctionCall","src":"2139:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2131:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"2166:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2184:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2189:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2180:3:181"},"nodeType":"YulFunctionCall","src":"2180:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2193:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2176:3:181"},"nodeType":"YulFunctionCall","src":"2176:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2170:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2211:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2226:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2234:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2222:3:181"},"nodeType":"YulFunctionCall","src":"2222:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2204:6:181"},"nodeType":"YulFunctionCall","src":"2204:34:181"},"nodeType":"YulExpressionStatement","src":"2204:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2258:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2269:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2254:3:181"},"nodeType":"YulFunctionCall","src":"2254:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2278:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2286:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2274:3:181"},"nodeType":"YulFunctionCall","src":"2274:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2247:6:181"},"nodeType":"YulFunctionCall","src":"2247:43:181"},"nodeType":"YulExpressionStatement","src":"2247:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2310:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2321:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2306:3:181"},"nodeType":"YulFunctionCall","src":"2306:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"2330:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2338:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2326:3:181"},"nodeType":"YulFunctionCall","src":"2326:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2299:6:181"},"nodeType":"YulFunctionCall","src":"2299:43:181"},"nodeType":"YulExpressionStatement","src":"2299:43:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2074:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2085:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2093:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2101:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2112:4:181","type":""}],"src":"1964:384:181"},{"body":{"nodeType":"YulBlock","src":"2527:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2544:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2555:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2537:6:181"},"nodeType":"YulFunctionCall","src":"2537:21:181"},"nodeType":"YulExpressionStatement","src":"2537:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2578:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2589:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2574:3:181"},"nodeType":"YulFunctionCall","src":"2574:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2594:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2567:6:181"},"nodeType":"YulFunctionCall","src":"2567:30:181"},"nodeType":"YulExpressionStatement","src":"2567:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2617:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2628:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2613:3:181"},"nodeType":"YulFunctionCall","src":"2613:18:181"},{"hexValue":"2170726f6365737320676173","kind":"string","nodeType":"YulLiteral","src":"2633:14:181","type":"","value":"!process gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2606:6:181"},"nodeType":"YulFunctionCall","src":"2606:42:181"},"nodeType":"YulExpressionStatement","src":"2606:42:181"},{"nodeType":"YulAssignment","src":"2657:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2669:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2680:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2665:3:181"},"nodeType":"YulFunctionCall","src":"2665:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2657:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2504:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2518:4:181","type":""}],"src":"2353:336:181"},{"body":{"nodeType":"YulBlock","src":"2868:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2885:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2896:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2878:6:181"},"nodeType":"YulFunctionCall","src":"2878:21:181"},"nodeType":"YulExpressionStatement","src":"2878:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2919:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2930:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2915:3:181"},"nodeType":"YulFunctionCall","src":"2915:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2935:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2908:6:181"},"nodeType":"YulFunctionCall","src":"2908:30:181"},"nodeType":"YulExpressionStatement","src":"2908:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2958:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2969:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2954:3:181"},"nodeType":"YulFunctionCall","src":"2954:18:181"},{"hexValue":"217265736572766520676173","kind":"string","nodeType":"YulLiteral","src":"2974:14:181","type":"","value":"!reserve gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2947:6:181"},"nodeType":"YulFunctionCall","src":"2947:42:181"},"nodeType":"YulExpressionStatement","src":"2947:42:181"},{"nodeType":"YulAssignment","src":"2998:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3010:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3021:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3006:3:181"},"nodeType":"YulFunctionCall","src":"3006:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2998:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2845:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2859:4:181","type":""}],"src":"2694:336:181"},{"body":{"nodeType":"YulBlock","src":"3209:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3226:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3237:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3219:6:181"},"nodeType":"YulFunctionCall","src":"3219:21:181"},"nodeType":"YulExpressionStatement","src":"3219:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3260:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3271:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3256:3:181"},"nodeType":"YulFunctionCall","src":"3256:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3276:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3249:6:181"},"nodeType":"YulFunctionCall","src":"3249:30:181"},"nodeType":"YulExpressionStatement","src":"3249:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3299:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3310:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3295:3:181"},"nodeType":"YulFunctionCall","src":"3295:18:181"},{"hexValue":"217a65726f206d65726b6c65","kind":"string","nodeType":"YulLiteral","src":"3315:14:181","type":"","value":"!zero merkle"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3288:6:181"},"nodeType":"YulFunctionCall","src":"3288:42:181"},"nodeType":"YulExpressionStatement","src":"3288:42:181"},{"nodeType":"YulAssignment","src":"3339:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3351:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3362:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3347:3:181"},"nodeType":"YulFunctionCall","src":"3347:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3339:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3186:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3200:4:181","type":""}],"src":"3035:336:181"},{"body":{"nodeType":"YulBlock","src":"3505:175:181","statements":[{"nodeType":"YulAssignment","src":"3515:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3527:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3538:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3523:3:181"},"nodeType":"YulFunctionCall","src":"3523:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3515:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"3550:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3568:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3573:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3564:3:181"},"nodeType":"YulFunctionCall","src":"3564:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3577:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3560:3:181"},"nodeType":"YulFunctionCall","src":"3560:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3554:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3595:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3610:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3618:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3606:3:181"},"nodeType":"YulFunctionCall","src":"3606:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3588:6:181"},"nodeType":"YulFunctionCall","src":"3588:34:181"},"nodeType":"YulExpressionStatement","src":"3588:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3642:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3653:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3638:3:181"},"nodeType":"YulFunctionCall","src":"3638:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3662:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3670:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3658:3:181"},"nodeType":"YulFunctionCall","src":"3658:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3631:6:181"},"nodeType":"YulFunctionCall","src":"3631:43:181"},"nodeType":"YulExpressionStatement","src":"3631:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3466:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3477:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3485:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3496:4:181","type":""}],"src":"3376:304:181"},{"body":{"nodeType":"YulBlock","src":"3859:232:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3876:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3887:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3869:6:181"},"nodeType":"YulFunctionCall","src":"3869:21:181"},"nodeType":"YulExpressionStatement","src":"3869:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3910:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3921:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3906:3:181"},"nodeType":"YulFunctionCall","src":"3906:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3926:2:181","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3899:6:181"},"nodeType":"YulFunctionCall","src":"3899:30:181"},"nodeType":"YulExpressionStatement","src":"3899:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3949:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3960:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3945:3:181"},"nodeType":"YulFunctionCall","src":"3945:18:181"},{"hexValue":"4678426173654368696c6454756e6e656c3a20524f4f545f54554e4e454c5f41","kind":"string","nodeType":"YulLiteral","src":"3965:34:181","type":"","value":"FxBaseChildTunnel: ROOT_TUNNEL_A"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3938:6:181"},"nodeType":"YulFunctionCall","src":"3938:62:181"},"nodeType":"YulExpressionStatement","src":"3938:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4020:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4031:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4016:3:181"},"nodeType":"YulFunctionCall","src":"4016:18:181"},{"hexValue":"4c52454144595f534554","kind":"string","nodeType":"YulLiteral","src":"4036:12:181","type":"","value":"LREADY_SET"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4009:6:181"},"nodeType":"YulFunctionCall","src":"4009:40:181"},"nodeType":"YulExpressionStatement","src":"4009:40:181"},{"nodeType":"YulAssignment","src":"4058:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4070:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4081:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4066:3:181"},"nodeType":"YulFunctionCall","src":"4066:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4058:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f7974c7c2deac4fad00669eceb145d6535e698a8bcd8493990c8db551188166b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3836:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3850:4:181","type":""}],"src":"3685:406:181"}]},"contents":"{\n    { }\n    function abi_decode_uint32_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9\n    {\n        if slt(sub(dataEnd, headStart), 320) { revert(0, 0) }\n        value0 := abi_decode_uint32_fromMemory(headStart)\n        value1 := abi_decode_uint32_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n        value4 := abi_decode_address_fromMemory(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n        value6 := mload(add(headStart, 192))\n        value7 := mload(add(headStart, 224))\n        value8 := abi_decode_address_fromMemory(add(headStart, 256))\n        value9 := abi_decode_address_fromMemory(add(headStart, 288))\n    }\n    function abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"empty domain\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"empty rootManager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!process gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!reserve gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!zero merkle\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_f7974c7c2deac4fad00669eceb145d6535e698a8bcd8493990c8db551188166b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"FxBaseChildTunnel: ROOT_TUNNEL_A\")\n        mstore(add(headStart, 96), \"LREADY_SET\")\n        tail := add(headStart, 128)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"6101606040523480156200001257600080fd5b5060405162003bd038038062003bd0833981016040819052620000359162000483565b878a8a828a8a8a8a8a8a8a808a8a8a8a8a6200005133620002cf565b8463ffffffff166000036200009c5760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620000e85760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b604482015260640162000093565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e0528116156200012057620001208162000334565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a350506003805460ff60a01b191690555050600480546001600160a01b0319166001600160a01b039390931692909217909155506001600755620cf84f8511620001f35760405162461bcd60e51b815260206004820152600c60248201526b2170726f636573732067617360a01b604482015260640162000093565b613a978411620002355760405162461bcd60e51b815260206004820152600c60248201526b21726573657276652067617360a01b604482015260640162000093565b6101208590526101408490526001600160a01b038216620002885760405162461bcd60e51b815260206004820152600c60248201526b217a65726f206d65726b6c6560a01b604482015260640162000093565b506001600160a01b0390811661010052600891909155601080546001600160a01b031916999091169890981790975550620005379f50505050505050505050505050505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b6200034a816200035860201b620018851760201c565b6200035581620003c1565b50565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b6011546001600160a01b0316156200042f5760405162461bcd60e51b815260206004820152602a60248201527f4678426173654368696c6454756e6e656c3a20524f4f545f54554e4e454c5f4160448201526913149150511657d4d15560b21b606482015260840162000093565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b805163ffffffff811681146200046657600080fd5b919050565b80516001600160a01b03811681146200046657600080fd5b6000806000806000806000806000806101408b8d031215620004a457600080fd5b620004af8b62000451565b9950620004bf60208c0162000451565b9850620004cf60408c016200046b565b9750620004df60608c016200046b565b9650620004ef60808c016200046b565b955060a08b0151945060c08b0151935060e08b01519250620005156101008c016200046b565b9150620005266101208c016200046b565b90509295989b9194979a5092959850565b60805160a05160c05160e0516101005161012051610140516135f8620005d86000396000818161035b0152611d5401526000818161098401528181611d750152611e020152600081816107ab01528181610b010152818161104101526117b5015260006102eb015260006105b101526000818161093a0152610ca90152600081816104f8015281816106c7015281816117570152611c5401526135f86000f3fe6080604052600436106102cd5760003560e01c80638456cb5911610175578063b697f531116100dc578063d2a3cc7111610095578063d88beda21161006f578063d88beda214610972578063db1b7659146109a6578063e0fed010146109c6578063fa31de01146109e657600080fd5b8063d2a3cc7114610908578063d69f9d6114610928578063d7d317b31461095c57600080fd5b8063b697f53114610843578063b95a200114610863578063c5b350df14610896578063cc394283146108ab578063d1851c92146108cb578063d232c220146108e957600080fd5b80639fa92f9d1161012e5780639fa92f9d14610786578063a01892a514610799578063a792c29b146107cd578063ad9c0c2e146107ed578063b1f8100d14610803578063b2f876431461082357600080fd5b80638456cb59146106a35780638d3638f4146106b85780638da5cb5b146106eb57806398c9f2b9146107095780639a7c4b71146107395780639d3117c71461075957600080fd5b806352a9674b116102345780636159ada1116101ed5780636a42b8f8116101c75780636a42b8f8146106385780636b04a9331461064e578063715018a61461066e5780637f1e9cb01461068357600080fd5b80636159ada1146105d357806365eaf11b1461060357806368742da61461061857600080fd5b806352a9674b146104e6578063572386ca1461051a578063579c16181461054a5780635bd11efc146105605780635c975abb146105805780635f61e3ec1461059f57600080fd5b80633cf52ffb116102865780633cf52ffb1461041b5780633f4ba83a14610430578063450d11f0146104455780634ff746f61461047d578063508a109b1461049d5780635190bc53146104bd57600080fd5b806314168416146102d95780631eeaabea1461032757806325e3beda146103495780632bb1ae7c1461038b5780632bbd59ca1461039e578063301f07c3146103db57600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b5061030d7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b34801561033357600080fd5b50610347610342366004612f40565b610a14565b005b34801561035557600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161031e565b610347610399366004612ffc565b610abe565b3480156103aa57600080fd5b506103ce6103b9366004612f40565b600f6020526000908152604090205460ff1681565b60405161031e9190613047565b3480156103e757600080fd5b5061040b6103f6366004612f40565b600a6020526000908152604090205460ff1681565b604051901515815260200161031e565b34801561042757600080fd5b5060025461037d565b34801561043c57600080fd5b50610347610c61565b34801561045157600080fd5b50601054610465906001600160a01b031681565b6040516001600160a01b03909116815260200161031e565b34801561048957600080fd5b50610347610498366004612ffc565b610c9e565b3480156104a957600080fd5b506103476104b836600461306f565b610d44565b3480156104c957600080fd5b5061040b6104d8366004613127565b6001600160a01b0316301490565b3480156104f257600080fd5b5061030d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052657600080fd5b5061040b610535366004612f40565b600c6020526000908152604090205460ff1681565b34801561055657600080fd5b5061037d60055481565b34801561056c57600080fd5b5061034761057b366004613127565b611006565b34801561058c57600080fd5b50600354600160a01b900460ff1661040b565b3480156105ab57600080fd5b506104657f000000000000000000000000000000000000000000000000000000000000000081565b3480156105df57600080fd5b5061040b6105ee366004613127565b600d6020526000908152604090205460ff1681565b34801561060f57600080fd5b5061037d61103d565b34801561062457600080fd5b50610347610633366004613127565b6110c6565b34801561064457600080fd5b5062093a8061037d565b34801561065a57600080fd5b50610347610669366004612f40565b611143565b34801561067a57600080fd5b5061034761120e565b34801561068f57600080fd5b50601154610465906001600160a01b031681565b3480156106af57600080fd5b50610347611239565b3480156106c457600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030d565b3480156106f757600080fd5b506000546001600160a01b0316610465565b34801561071557600080fd5b5061040b610724366004612f40565b600b6020526000908152604090205460ff1681565b34801561074557600080fd5b50610347610754366004613142565b6112ed565b34801561076557600080fd5b5061037d610774366004612f40565b60096020526000908152604090205481565b34801561079257600080fd5b5030610465565b3480156107a557600080fd5b506104657f000000000000000000000000000000000000000000000000000000000000000081565b3480156107d957600080fd5b50600454610465906001600160a01b031681565b3480156107f957600080fd5b5061037d60085481565b34801561080f57600080fd5b5061034761081e366004613127565b611398565b34801561082f57600080fd5b5061034761083e366004613127565b611436565b34801561084f57600080fd5b5061034761085e366004613127565b6114b2565b34801561086f57600080fd5b5061030d61087e3660046131dd565b600e6020526000908152604090205463ffffffff1681565b3480156108a257600080fd5b50610347611531565b3480156108b757600080fd5b50600354610465906001600160a01b031681565b3480156108d757600080fd5b506001546001600160a01b0316610465565b3480156108f557600080fd5b506000546001600160a01b03161561040b565b34801561091457600080fd5b50610347610923366004613127565b6115a1565b34801561093457600080fd5b506104657f000000000000000000000000000000000000000000000000000000000000000081565b34801561096857600080fd5b5061037d60065481565b34801561097e57600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156109b257600080fd5b5061040b6109c1366004613127565b611678565b3480156109d257600080fd5b506103476109e1366004612f40565b611682565b3480156109f257600080fd5b50610a06610a013660046131f8565b6116b6565b60405161031e92919061329f565b6000546001600160a01b03163314610a3f576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610a845760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610ac66118ee565b43600554600654610ad791906132ce565b1115610af6576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8191906132e1565b6000818152600c602052604090205490915060ff1615610bd75760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b6044820152606401610a7b565b600081604051602001610bec91815260200190565b6040516020818303038152906040529050610c07818461193b565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610c54908390869033906132fa565b60405180910390a1505050565b6000546001600160a01b03163314610c8c576040516311a8a1bb60e31b815260040160405180910390fd5b610c94611986565b610c9c6119d6565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cff5760405162461bcd60e51b8152600401610a7b9060208082526004908201526310a0a6a160e11b604082015260600190565b610d0881611a2b565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610d39929190613338565b60405180910390a150565b610d4c6118ee565b610d54611a44565b83610d8b5760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b6044820152606401610a7b565b600085856000818110610da057610da0613362565b9050602002810190610db29190613378565b610dbc9080613399565b604051610dca9291906133e7565b604051809103902090506000610e318288886000818110610ded57610ded613362565b9050602002810190610dff9190613378565b60200189896000818110610e1557610e15613362565b9050602002810190610e279190613378565b6104200135611a9d565b9050610e3f81868686611b44565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610f655788888263ffffffff16818110610e8457610e84613362565b9050602002810190610e969190613378565b610ea09080613399565b604051610eae9291906133e7565b604051809103902093506000610f03858b8b8563ffffffff16818110610ed657610ed6613362565b9050602002810190610ee89190613378565b6020018c8c8663ffffffff16818110610e1557610e15613362565b9050838114610f425760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b6044820152606401610a7b565b506000848152600f60205260409020805460ff1916600190811790915501610e5e565b5060005b818163ffffffff161015610ff157610fe889898363ffffffff16818110610f9257610f92613362565b9050602002810190610fa49190613378565b610fae9080613399565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c3e92505050565b50600101610f69565b50505050610fff6001600755565b5050505050565b6000546001600160a01b03163314611031576040516311a8a1bb60e31b815260040160405180910390fd5b61103a81611f1b565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561109d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c191906132e1565b905090565b6000546001600160a01b031633146110f1576040516311a8a1bb60e31b815260040160405180910390fd5b476110fc8282611f2d565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d8260405161113791815260200190565b60405180910390a25050565b6000546001600160a01b0316331461116e576040516311a8a1bb60e31b815260040160405180910390fd5b611176611986565b60008181526009602052604081205490036111cb5760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b6044820152606401610a7b565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610d399083815260200190565b6000546001600160a01b03163314610c9c576040516311a8a1bb60e31b815260040160405180910390fd5b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa158015611282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a691906133f7565b6112dd5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610a7b565b6112e56118ee565b610c9c61204b565b6010546001600160a01b031633146113515760405162461bcd60e51b815260206004820152602160248201527f4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e44456044820152602960f91b6064820152608401610a7b565b611392848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208e92505050565b50505050565b6000546001600160a01b031633146113c3576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b0382811691161480156113e1575060025415155b156113ff576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361142d57604051634a2fb73f60e11b815260040160405180910390fd5b61103a8161218c565b6000546001600160a01b03163314611461576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610d39565b6000546001600160a01b031633146114dd576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610d39565b6001546001600160a01b0316331461155c576040516311a7f27160e11b815260040160405180910390fd5b62093a806002544261156e9190613419565b1161158c576040516324e0285f60e21b815260040160405180910390fd5b600154610c9c906001600160a01b03166121da565b6000546001600160a01b031633146115cc576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b039081169082160361162a5760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e616765720000000000000000006044820152606401610a7b565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610d39565b6000805b92915050565b6000546001600160a01b031633146116ad576040516311a8a1bb60e31b815260040160405180910390fd5b61103a8161223f565b336000908152600d602052604081205460609060ff166117075760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b6044820152606401610a7b565b63ffffffff8086166000908152600e60205260408120805491929190911690826117308361342c565b91906101000a81548163ffffffff021916908363ffffffff1602179055509050600061178f7f0000000000000000000000000000000000000000000000000000000000000000611786336001600160a01b031690565b848a8a8a6122bd565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af1158015611805573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611829919061344f565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f8361185b600184613419565b848760405161186d9493929190613473565b60405180910390a15090989197509095505050505050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b600354600160a01b900460ff1615610c9c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a7b565b8051156119795760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a7b565b611982826122f5565b5050565b600354600160a01b900460ff16610c9c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a7b565b6119de611986565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6040516316c2fdb560e21b815260040160405180910390fd5b600260075403611a965760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a7b565b6002600755565b6000806000858152600f602052604090205460ff166002811115611ac357611ac3613031565b14611b065760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b6044820152606401610a7b565b611b3a8484602080602002604051908101604052809291908260208002808284376000920191909152508691506123249050565b90505b9392505050565b6000848152600b602052604090205460ff1661139257611b6383612672565b6000611b998584602080602002604051908101604052809291908260208002808284376000920191909152508691506123249050565b9050838114611be05760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b6044820152606401610a7b565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611c2f9086815260200190565b60405180910390a35050505050565b600080611c4b83826127d2565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611c8362ffffff1983166127f6565b63ffffffff1614611cc55760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b6044820152606401610a7b565b6000611cd662ffffff19831661280b565b905060016000828152600f602052604090205460ff166002811115611cfd57611cfd613031565b14611d345760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b6044820152606401610a7b565b6000818152600f60205260409020805460ff191660021790556001611d997f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006132ce565b611da39190613419565b5a11611dda5760405162461bcd60e51b8152600401610a7b906020808252600490820152632167617360e01b604082015260600190565b6000611deb62ffffff198416612854565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611e4662ffffff198816612865565b611e5562ffffff198916612879565b611e6462ffffff198a1661288e565b611e81611e7662ffffff198c166128a3565b62ffffff19166128d1565b604051602401611e9494939291906134a2565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050611ece85856000868561291a565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890611f079088908b9086906134d1565b60405180910390a150505050505050919050565b611f2481611885565b61103a816129a5565b80471015611f7d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a7b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611fca576040519150601f19603f3d011682016040523d82523d6000602084013e611fcf565b606091505b50509050806120465760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a7b565b505050565b6120536118ee565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a0e3390565b60115482906001600160a01b038083169116146121015760405162461bcd60e51b815260206004820152602b60248201527f4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e444560448201526a1497d19493d357d493d3d560aa1b6064820152608401610a7b565b815160201461213c5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a7b565b61214d612148836134f2565b612a33565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced823360405161217e929190613338565b60405180910390a150505050565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60055481036122825760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b6044820152606401610a7b565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610d39565b60608686868686866040516020016122da96959493929190613519565b60405160208183030381529060405290509695505050505050565b7f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b03681604051610d399190613573565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b806126b55760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b6044820152606401610a7b565b6000818152600a602052604090205460ff16156126cf5750565b600081815260096020526040812054908190036127255760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b6044820152606401610a7b565b6008546127328243613419565b10156127805760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f74202176657269666965640000000000000000006044820152606401610a7b565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b8151600090602084016127ed64ffffffffff85168284612b5c565b95945050505050565b600061167c62ffffff19831660286004612b99565b6000806128218360781c6001600160601b031690565b6001600160601b0316905060006128418460181c6001600160601b031690565b6001600160601b03169091209392505050565b600061167c61286283612bc9565b90565b600061167c62ffffff198316826004612b99565b600061167c62ffffff19831660246004612b99565b600061167c62ffffff19831660046020612bda565b600061167c604c6128c181601886901c6001600160601b0316613419565b62ffffff19851691906000612ce5565b60606000806128e98460181c6001600160601b031690565b6001600160601b0316905060405191508192506129098483602001612d61565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff81111561294057612940612f59565b6040519080825280601f01601f19166020018201604052801561296a576020820181803683370190505b5090506000808751602089018b8e8ef191503d92508683111561298b578692505b828152826000602083013e90999098509650505050505050565b6011546001600160a01b031615612a115760405162461bcd60e51b815260206004820152602a60248201527f4678426173654368696c6454756e6e656c3a20524f4f545f54554e4e454c5f4160448201526913149150511657d4d15560b21b6064820152608401610a7b565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b80612a715760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b6044820152606401610a7b565b60008181526009602052604090205415612ac45760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b6044820152606401610a7b565b6000818152600a602052604090205460ff1615612b195760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b6044820152606401610a7b565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610d399083815260200190565b600080612b6983856132ce565b9050604051811115612b79575060005b80600003612b8e5762ffffff19915050611b3d565b6127ed858585612e54565b6000612ba6826020613586565b612bb190600861359f565b60ff16612bbf858585612bda565b901c949350505050565b600061167c62ffffff198316602c60205b60008160ff16600003612bef57506000611b3d565b612c028460181c6001600160601b031690565b6001600160601b0316612c1860ff8416856132ce565b1115612c8057612c318460781c6001600160601b031690565b612c448560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610a7b565b60208260ff161115612ca55760405163045df3f960e01b815260040160405180910390fd5b600882026000612cbe8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612cfb8660781c6001600160601b031690565b6001600160601b03169050612d0f86612ecb565b84612d1a87846132ce565b612d2491906132ce565b1115612d375762ffffff19915050612d59565b612d4185826132ce565b9050612d558364ffffffffff168286612b5c565b9150505b949350505050565b600062ffffff1980841603612d895760405163148d513360e21b815260040160405180910390fd5b612d9283612f04565b15612db057604051632ee0949160e11b815260040160405180910390fd5b6000612dc58460181c6001600160601b031690565b6001600160601b031690506000612de58560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115612e065760206060fd5b8386858560045afa905080612e2e57604051632af1bd9b60e21b815260040160405180910390fd5b612e49612e3b8860d81c90565b64ffffffffff168786612e54565b979650505050505050565b60006060601883856001600160601b03821682148015612e7c575086816001600160601b0316145b612eb55760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610a7b565b96831b90961790911b90941790931b9392505050565b6000612ee08260181c6001600160601b031690565b612ef38360781c6001600160601b031690565b016001600160601b03169050919050565b6000612f108260d81c90565b64ffffffffff1664ffffffffff03612f2a57506001919050565b6000612f3583612ecb565b604051109392505050565b600060208284031215612f5257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612f8057600080fd5b813567ffffffffffffffff80821115612f9b57612f9b612f59565b604051601f8301601f19908116603f01168101908282118183101715612fc357612fc3612f59565b81604052838152866020858801011115612fdc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561300e57600080fd5b813567ffffffffffffffff81111561302557600080fd5b612d5984828501612f6f565b634e487b7160e01b600052602160045260246000fd5b602081016003831061306957634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806000610460868803121561308857600080fd5b853567ffffffffffffffff808211156130a057600080fd5b818801915088601f8301126130b457600080fd5b8135818111156130c357600080fd5b8960208260051b85010111156130d857600080fd5b6020928301975095505086013592506104408601878111156130f957600080fd5b94979396509194604001933592915050565b80356001600160a01b038116811461312257600080fd5b919050565b60006020828403121561313957600080fd5b611b3d8261310b565b6000806000806060858703121561315857600080fd5b843593506131686020860161310b565b9250604085013567ffffffffffffffff8082111561318557600080fd5b818701915087601f83011261319957600080fd5b8135818111156131a857600080fd5b8860208285010111156131ba57600080fd5b95989497505060200194505050565b803563ffffffff8116811461312257600080fd5b6000602082840312156131ef57600080fd5b611b3d826131c9565b60008060006060848603121561320d57600080fd5b613216846131c9565b925060208401359150604084013567ffffffffffffffff81111561323957600080fd5b61324586828701612f6f565b9150509250925092565b60005b8381101561326a578181015183820152602001613252565b50506000910152565b6000815180845261328b81602086016020860161324f565b601f01601f19169290920160200192915050565b828152604060208201526000611b3a6040830184613273565b634e487b7160e01b600052601160045260246000fd5b8082018082111561167c5761167c6132b8565b6000602082840312156132f357600080fd5b5051919050565b60608152600061330d6060830186613273565b828103602084015261331f8186613273565b91505060018060a01b0383166040830152949350505050565b60408152600061334b6040830185613273565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e1983360301811261338f57600080fd5b9190910192915050565b6000808335601e198436030181126133b057600080fd5b83018035915067ffffffffffffffff8211156133cb57600080fd5b6020019150368190038213156133e057600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561340957600080fd5b81518015158114611b3d57600080fd5b8181038181111561167c5761167c6132b8565b600063ffffffff808316818103613445576134456132b8565b6001019392505050565b6000806040838503121561346257600080fd5b505080516020909101519092909150565b8481528360208201528260408201526080606082015260006134986080830184613273565b9695505050505050565b600063ffffffff8087168352808616602084015250836040830152608060608301526134986080830184613273565b83815282151560208201526060604082015260006127ed6060830184613273565b80516020808301519190811015613513576000198160200360031b1b821691505b50919050565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c830152825161356181604c85016020870161324f565b91909101604c01979650505050505050565b602081526000611b3d6020830184613273565b60ff828116828216039081111561167c5761167c6132b8565b60ff81811683821602908116908181146135bb576135bb6132b8565b509291505056fea2646970667358221220b6edae06494dd48d99fd1393de6c6a9203028115008d2d15d85a6e887403494d64736f6c63430008110033","opcodes":"PUSH2 0x160 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x3BD0 CODESIZE SUB DUP1 PUSH3 0x3BD0 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x483 JUMP JUMPDEST DUP8 DUP11 DUP11 DUP3 DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 DUP1 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH3 0x51 CALLER PUSH3 0x2CF JUMP JUMPDEST DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0x0 SUB PUSH3 0x9C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x32B6B83A3C903237B6B0B4B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xE8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x32B6B83A3C903937B7BA26B0B730B3B2B9 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x93 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0xA0 MSTORE DUP4 DUP2 AND PUSH1 0xC0 MSTORE SWAP1 DUP6 AND PUSH1 0xE0 MSTORE DUP2 AND ISZERO PUSH3 0x120 JUMPI PUSH3 0x120 DUP2 PUSH3 0x334 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH4 0xFFFFFFFF DUP7 DUP2 AND SWAP3 SWAP1 DUP9 AND SWAP2 PUSH32 0x4F9C27C2FE3F84576EA469D367D044DA53C45E951617E8389F2B5ED8DB9D25F0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE POP PUSH1 0x1 PUSH1 0x7 SSTORE PUSH3 0xCF84F DUP6 GT PUSH3 0x1F3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2170726F6365737320676173 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x93 JUMP JUMPDEST PUSH2 0x3A97 DUP5 GT PUSH3 0x235 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x217265736572766520676173 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x93 JUMP JUMPDEST PUSH2 0x120 DUP6 SWAP1 MSTORE PUSH2 0x140 DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0x288 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x217A65726F206D65726B6C65 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x93 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH2 0x100 MSTORE PUSH1 0x8 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x10 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP10 SWAP1 SWAP2 AND SWAP9 SWAP1 SWAP9 OR SWAP1 SWAP8 SSTORE POP PUSH3 0x537 SWAP16 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH3 0x34A DUP2 PUSH3 0x358 PUSH1 0x20 SHL PUSH3 0x1885 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x355 DUP2 PUSH3 0x3C1 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH3 0x42F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4678426173654368696C6454756E6E656C3A20524F4F545F54554E4E454C5F41 PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x13149150511657D4D155 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x93 JUMP JUMPDEST PUSH1 0x11 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH3 0x466 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x466 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x140 DUP12 DUP14 SUB SLT ISZERO PUSH3 0x4A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x4AF DUP12 PUSH3 0x451 JUMP JUMPDEST SWAP10 POP PUSH3 0x4BF PUSH1 0x20 DUP13 ADD PUSH3 0x451 JUMP JUMPDEST SWAP9 POP PUSH3 0x4CF PUSH1 0x40 DUP13 ADD PUSH3 0x46B JUMP JUMPDEST SWAP8 POP PUSH3 0x4DF PUSH1 0x60 DUP13 ADD PUSH3 0x46B JUMP JUMPDEST SWAP7 POP PUSH3 0x4EF PUSH1 0x80 DUP13 ADD PUSH3 0x46B JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD MLOAD SWAP5 POP PUSH1 0xC0 DUP12 ADD MLOAD SWAP4 POP PUSH1 0xE0 DUP12 ADD MLOAD SWAP3 POP PUSH3 0x515 PUSH2 0x100 DUP13 ADD PUSH3 0x46B JUMP JUMPDEST SWAP2 POP PUSH3 0x526 PUSH2 0x120 DUP13 ADD PUSH3 0x46B JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP2 SWAP5 SWAP8 SWAP11 POP SWAP3 SWAP6 SWAP9 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x35F8 PUSH3 0x5D8 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x35B ADD MSTORE PUSH2 0x1D54 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x984 ADD MSTORE DUP2 DUP2 PUSH2 0x1D75 ADD MSTORE PUSH2 0x1E02 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x7AB ADD MSTORE DUP2 DUP2 PUSH2 0xB01 ADD MSTORE DUP2 DUP2 PUSH2 0x1041 ADD MSTORE PUSH2 0x17B5 ADD MSTORE PUSH1 0x0 PUSH2 0x2EB ADD MSTORE PUSH1 0x0 PUSH2 0x5B1 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x93A ADD MSTORE PUSH2 0xCA9 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x4F8 ADD MSTORE DUP2 DUP2 PUSH2 0x6C7 ADD MSTORE DUP2 DUP2 PUSH2 0x1757 ADD MSTORE PUSH2 0x1C54 ADD MSTORE PUSH2 0x35F8 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2CD JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x175 JUMPI DUP1 PUSH4 0xB697F531 GT PUSH2 0xDC JUMPI DUP1 PUSH4 0xD2A3CC71 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xD88BEDA2 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xD88BEDA2 EQ PUSH2 0x972 JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x9A6 JUMPI DUP1 PUSH4 0xE0FED010 EQ PUSH2 0x9C6 JUMPI DUP1 PUSH4 0xFA31DE01 EQ PUSH2 0x9E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD2A3CC71 EQ PUSH2 0x908 JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x928 JUMPI DUP1 PUSH4 0xD7D317B3 EQ PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB697F531 EQ PUSH2 0x843 JUMPI DUP1 PUSH4 0xB95A2001 EQ PUSH2 0x863 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x896 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x8AB JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x8CB JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x8E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9FA92F9D GT PUSH2 0x12E JUMPI DUP1 PUSH4 0x9FA92F9D EQ PUSH2 0x786 JUMPI DUP1 PUSH4 0xA01892A5 EQ PUSH2 0x799 JUMPI DUP1 PUSH4 0xA792C29B EQ PUSH2 0x7CD JUMPI DUP1 PUSH4 0xAD9C0C2E EQ PUSH2 0x7ED JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x803 JUMPI DUP1 PUSH4 0xB2F87643 EQ PUSH2 0x823 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x6A3 JUMPI DUP1 PUSH4 0x8D3638F4 EQ PUSH2 0x6B8 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x6EB JUMPI DUP1 PUSH4 0x98C9F2B9 EQ PUSH2 0x709 JUMPI DUP1 PUSH4 0x9A7C4B71 EQ PUSH2 0x739 JUMPI DUP1 PUSH4 0x9D3117C7 EQ PUSH2 0x759 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B GT PUSH2 0x234 JUMPI DUP1 PUSH4 0x6159ADA1 GT PUSH2 0x1ED JUMPI DUP1 PUSH4 0x6A42B8F8 GT PUSH2 0x1C7 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x638 JUMPI DUP1 PUSH4 0x6B04A933 EQ PUSH2 0x64E JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x66E JUMPI DUP1 PUSH4 0x7F1E9CB0 EQ PUSH2 0x683 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6159ADA1 EQ PUSH2 0x5D3 JUMPI DUP1 PUSH4 0x65EAF11B EQ PUSH2 0x603 JUMPI DUP1 PUSH4 0x68742DA6 EQ PUSH2 0x618 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B EQ PUSH2 0x4E6 JUMPI DUP1 PUSH4 0x572386CA EQ PUSH2 0x51A JUMPI DUP1 PUSH4 0x579C1618 EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x560 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x580 JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x59F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3CF52FFB GT PUSH2 0x286 JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x41B JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x430 JUMPI DUP1 PUSH4 0x450D11F0 EQ PUSH2 0x445 JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x47D JUMPI DUP1 PUSH4 0x508A109B EQ PUSH2 0x49D JUMPI DUP1 PUSH4 0x5190BC53 EQ PUSH2 0x4BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x2D9 JUMPI DUP1 PUSH4 0x1EEAABEA EQ PUSH2 0x327 JUMPI DUP1 PUSH4 0x25E3BEDA EQ PUSH2 0x349 JUMPI DUP1 PUSH4 0x2BB1AE7C EQ PUSH2 0x38B JUMPI DUP1 PUSH4 0x2BBD59CA EQ PUSH2 0x39E JUMPI DUP1 PUSH4 0x301F07C3 EQ PUSH2 0x3DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x2D4 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30D PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x333 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x342 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F40 JUMP JUMPDEST PUSH2 0xA14 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x355 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37D PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x31E JUMP JUMPDEST PUSH2 0x347 PUSH2 0x399 CALLDATASIZE PUSH1 0x4 PUSH2 0x2FFC JUMP JUMPDEST PUSH2 0xABE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CE PUSH2 0x3B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F40 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x31E SWAP2 SWAP1 PUSH2 0x3047 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40B PUSH2 0x3F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F40 JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x31E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x427 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x37D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x43C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0xC61 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x451 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x10 SLOAD PUSH2 0x465 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x31E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x489 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x498 CALLDATASIZE PUSH1 0x4 PUSH2 0x2FFC JUMP JUMPDEST PUSH2 0xC9E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x4B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x306F JUMP JUMPDEST PUSH2 0xD44 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40B PUSH2 0x4D8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3127 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30D PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x526 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40B PUSH2 0x535 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F40 JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x556 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37D PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x56C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x57B CALLDATASIZE PUSH1 0x4 PUSH2 0x3127 JUMP JUMPDEST PUSH2 0x1006 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x40B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x465 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40B PUSH2 0x5EE CALLDATASIZE PUSH1 0x4 PUSH2 0x3127 JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x60F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37D PUSH2 0x103D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x624 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x633 CALLDATASIZE PUSH1 0x4 PUSH2 0x3127 JUMP JUMPDEST PUSH2 0x10C6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x644 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x37D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x65A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x669 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F40 JUMP JUMPDEST PUSH2 0x1143 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x67A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x120E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x68F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x11 SLOAD PUSH2 0x465 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x1239 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x0 PUSH2 0x30D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x465 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x715 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40B PUSH2 0x724 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F40 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x745 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x754 CALLDATASIZE PUSH1 0x4 PUSH2 0x3142 JUMP JUMPDEST PUSH2 0x12ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x765 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37D PUSH2 0x774 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F40 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x792 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH2 0x465 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x465 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x465 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37D PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x80F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x81E CALLDATASIZE PUSH1 0x4 PUSH2 0x3127 JUMP JUMPDEST PUSH2 0x1398 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x82F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x83E CALLDATASIZE PUSH1 0x4 PUSH2 0x3127 JUMP JUMPDEST PUSH2 0x1436 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x84F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x85E CALLDATASIZE PUSH1 0x4 PUSH2 0x3127 JUMP JUMPDEST PUSH2 0x14B2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x86F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30D PUSH2 0x87E CALLDATASIZE PUSH1 0x4 PUSH2 0x31DD JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x1531 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x465 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x465 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x40B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x914 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x923 CALLDATASIZE PUSH1 0x4 PUSH2 0x3127 JUMP JUMPDEST PUSH2 0x15A1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x934 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x465 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x968 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37D PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x97E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37D PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40B PUSH2 0x9C1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3127 JUMP JUMPDEST PUSH2 0x1678 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x9E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F40 JUMP JUMPDEST PUSH2 0x1682 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA06 PUSH2 0xA01 CALLDATASIZE PUSH1 0x4 PUSH2 0x31F8 JUMP JUMPDEST PUSH2 0x16B6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x31E SWAP3 SWAP2 SWAP1 PUSH2 0x329F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA3F JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD DUP2 SUB PUSH2 0xA84 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2164656C6179426C6F636B73 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLER DUP2 MSTORE DUP2 SWAP1 PUSH32 0x8BD16320F3B60336ED5FD2A770EB7453E7E71CFEF4462ADDFFD7AE9DFE201C8E SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x8 SSTORE JUMP JUMPDEST PUSH2 0xAC6 PUSH2 0x18EE JUMP JUMPDEST NUMBER PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD PUSH2 0xAD7 SWAP2 SWAP1 PUSH2 0x32CE JUMP JUMPDEST GT ISZERO PUSH2 0xAF6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x46CF2AF1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST NUMBER PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB5D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB81 SWAP2 SWAP1 PUSH2 0x32E1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xBD7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1C9BDBDD08185B1C9958591E481CD95B9D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xBEC SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH2 0xC07 DUP2 DUP5 PUSH2 0x193B JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 SWAP1 PUSH2 0xC54 SWAP1 DUP4 SWAP1 DUP7 SWAP1 CALLER SWAP1 PUSH2 0x32FA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC8C JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC94 PUSH2 0x1986 JUMP JUMPDEST PUSH2 0xC9C PUSH2 0x19D6 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xCFF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA7B SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0xD08 DUP2 PUSH2 0x1A2B JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0xD39 SWAP3 SWAP2 SWAP1 PUSH2 0x3338 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xD4C PUSH2 0x18EE JUMP JUMPDEST PUSH2 0xD54 PUSH2 0x1A44 JUMP JUMPDEST DUP4 PUSH2 0xD8B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x2170726F6F6673 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xDA0 JUMPI PUSH2 0xDA0 PUSH2 0x3362 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xDB2 SWAP2 SWAP1 PUSH2 0x3378 JUMP JUMPDEST PUSH2 0xDBC SWAP1 DUP1 PUSH2 0x3399 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDCA SWAP3 SWAP2 SWAP1 PUSH2 0x33E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xE31 DUP3 DUP9 DUP9 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xDED JUMPI PUSH2 0xDED PUSH2 0x3362 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xDFF SWAP2 SWAP1 PUSH2 0x3378 JUMP JUMPDEST PUSH1 0x20 ADD DUP10 DUP10 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xE15 JUMPI PUSH2 0xE15 PUSH2 0x3362 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE27 SWAP2 SWAP1 PUSH2 0x3378 JUMP JUMPDEST PUSH2 0x420 ADD CALLDATALOAD PUSH2 0x1A9D JUMP JUMPDEST SWAP1 POP PUSH2 0xE3F DUP2 DUP7 DUP7 DUP7 PUSH2 0x1B44 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP7 SWAP1 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xF65 JUMPI DUP9 DUP9 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xE84 JUMPI PUSH2 0xE84 PUSH2 0x3362 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE96 SWAP2 SWAP1 PUSH2 0x3378 JUMP JUMPDEST PUSH2 0xEA0 SWAP1 DUP1 PUSH2 0x3399 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEAE SWAP3 SWAP2 SWAP1 PUSH2 0x33E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP4 POP PUSH1 0x0 PUSH2 0xF03 DUP6 DUP12 DUP12 DUP6 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xED6 JUMPI PUSH2 0xED6 PUSH2 0x3362 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xEE8 SWAP2 SWAP1 PUSH2 0x3378 JUMP JUMPDEST PUSH1 0x20 ADD DUP13 DUP13 DUP7 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xE15 JUMPI PUSH2 0xE15 PUSH2 0x3362 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0xF42 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x85CDA185C9959149BDBDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE ADD PUSH2 0xE5E JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xFF1 JUMPI PUSH2 0xFE8 DUP10 DUP10 DUP4 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xF92 JUMPI PUSH2 0xF92 PUSH2 0x3362 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xFA4 SWAP2 SWAP1 PUSH2 0x3378 JUMP JUMPDEST PUSH2 0xFAE SWAP1 DUP1 PUSH2 0x3399 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1C3E SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xF69 JUMP JUMPDEST POP POP POP POP PUSH2 0xFFF PUSH1 0x1 PUSH1 0x7 SSTORE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1031 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x103A DUP2 PUSH2 0x1F1B JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x109D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10C1 SWAP2 SWAP1 PUSH2 0x32E1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10F1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SELFBALANCE PUSH2 0x10FC DUP3 DUP3 PUSH2 0x1F2D JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEAFF4B37086828766AD3268786972C0CD24259D4C87A80F9D3963A3C3D999B0D DUP3 PUSH1 0x40 MLOAD PUSH2 0x1137 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x116E JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1176 PUSH2 0x1986 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SUB PUSH2 0x11CB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x616767726567617465526F6F742021657869737473 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xF51534ECF10A58DB36CE4F5180F59DEDDF3B3EB7C5E7454E602C2F80A40CC739 SWAP1 PUSH2 0xD39 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC9C JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1282 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12A6 SWAP2 SWAP1 PUSH2 0x33F7 JUMP JUMPDEST PUSH2 0x12DD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH2 0x12E5 PUSH2 0x18EE JUMP JUMPDEST PUSH2 0xC9C PUSH2 0x204B JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1351 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4678426173654368696C6454756E6E656C3A20494E56414C49445F53454E4445 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0xF9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH2 0x1392 DUP5 DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x208E SWAP3 POP POP POP JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x13C3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x13E1 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x13FF JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x142D JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x103A DUP2 PUSH2 0x218C JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1461 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x384859C5EF5FAFAC31E8BC92CE7FB48B1F2C74C4DD5E212EB84EC202FA5D9FAD SWAP2 ADD PUSH2 0xD39 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x14DD JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xD65ECA5D561D3A4568C87B9B13CED4AB52A69EDADFDFDB22D76BC595F36D7D87 SWAP2 ADD PUSH2 0xD39 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x155C JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x156E SWAP2 SWAP1 PUSH2 0x3419 JUMP JUMPDEST GT PUSH2 0x158C JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0xC9C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x21DA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x15CC JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0x162A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616C72656164792077617463686572206D616E61676572000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC16D059E43D7F8E29CCB4E001A2F249D3C59E274925D6A6BC3912943441D9F6C SWAP1 PUSH1 0x20 ADD PUSH2 0xD39 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x16AD JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x103A DUP2 PUSH2 0x223F JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x60 SWAP1 PUSH1 0xFF AND PUSH2 0x1707 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x8585B1B1BDDDB1A5CDD1959 PUSH1 0xA2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP3 PUSH2 0x1730 DUP4 PUSH2 0x342C JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH4 0xFFFFFFFF AND MUL OR SWAP1 SSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0x178F PUSH32 0x0 PUSH2 0x1786 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP5 DUP11 DUP11 DUP11 PUSH2 0x22BD JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH4 0x2D287E43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2D287E43 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1805 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1829 SWAP2 SWAP1 PUSH2 0x344F JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH32 0x40F08EE347FC927AE45902EDC87DEBB024AAB1A311943731968607F603F2152F DUP4 PUSH2 0x185B PUSH1 0x1 DUP5 PUSH2 0x3419 JUMP JUMPDEST DUP5 DUP8 PUSH1 0x40 MLOAD PUSH2 0x186D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3473 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP SWAP1 SWAP9 SWAP2 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xC9C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1979 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH2 0x1982 DUP3 PUSH2 0x22F5 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xC9C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH2 0x19DE PUSH2 0x1986 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x16C2FDB5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x7 SLOAD SUB PUSH2 0x1A96 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1AC3 JUMPI PUSH2 0x1AC3 PUSH2 0x3031 JUMP JUMPDEST EQ PUSH2 0x1B06 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x214D6573736167655374617475732E4E6F6E65 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH2 0x1B3A DUP5 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x2324 SWAP1 POP JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1392 JUMPI PUSH2 0x1B63 DUP4 PUSH2 0x2672 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B99 DUP6 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x2324 SWAP1 POP JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0x1BE0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1A5B9D985B1A59081A5B989BDD5B99149BDBDD PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP5 SWAP1 DUP7 SWAP1 PUSH32 0x7EC1EA51FE3DB53E55ED9D922854BC2156F467FF2F87D74E2086DAE2C84A88A8 SWAP1 PUSH2 0x1C2F SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1C4B DUP4 DUP3 PUSH2 0x27D2 JUMP JUMPDEST SWAP1 POP PUSH4 0xFFFFFFFF PUSH32 0x0 AND PUSH2 0x1C83 PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x27F6 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x1CC5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B232B9BA34B730BA34B7B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CD6 PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x280B JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1CFD JUMPI PUSH2 0x1CFD PUSH2 0x3031 JUMP JUMPDEST EQ PUSH2 0x1D34 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x10B83937BB32B7 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x2 OR SWAP1 SSTORE PUSH1 0x1 PUSH2 0x1D99 PUSH32 0x0 PUSH32 0x0 PUSH2 0x32CE JUMP JUMPDEST PUSH2 0x1DA3 SWAP2 SWAP1 PUSH2 0x3419 JUMP JUMPDEST GAS GT PUSH2 0x1DDA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA7B SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x21676173 PUSH1 0xE0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DEB PUSH3 0xFFFFFF NOT DUP5 AND PUSH2 0x2854 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH32 0x0 SWAP2 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x1E46 PUSH3 0xFFFFFF NOT DUP9 AND PUSH2 0x2865 JUMP JUMPDEST PUSH2 0x1E55 PUSH3 0xFFFFFF NOT DUP10 AND PUSH2 0x2879 JUMP JUMPDEST PUSH2 0x1E64 PUSH3 0xFFFFFF NOT DUP11 AND PUSH2 0x288E JUMP JUMPDEST PUSH2 0x1E81 PUSH2 0x1E76 PUSH3 0xFFFFFF NOT DUP13 AND PUSH2 0x28A3 JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND PUSH2 0x28D1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1E94 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x34A2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xAB2DC3F5 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 POP PUSH2 0x1ECE DUP6 DUP6 PUSH1 0x0 DUP7 DUP6 PUSH2 0x291A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP10 POP SWAP3 POP PUSH32 0xD42DE95A9B26F1BE134C8ECCE389DC4FCFA18753D01661B7B361233569E8FE48 SWAP1 PUSH2 0x1F07 SWAP1 DUP9 SWAP1 DUP12 SWAP1 DUP7 SWAP1 PUSH2 0x34D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1F24 DUP2 PUSH2 0x1885 JUMP JUMPDEST PUSH2 0x103A DUP2 PUSH2 0x29A5 JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x1F7D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1FCA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1FCF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2046 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA7B JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x2053 PUSH2 0x18EE JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1A0E CALLER SWAP1 JUMP JUMPDEST PUSH1 0x11 SLOAD DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND EQ PUSH2 0x2101 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4678426173654368696C6454756E6E656C3A20494E56414C49445F53454E4445 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x1497D19493D357D493D3D5 PUSH1 0xAA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA7B JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x213C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH2 0x214D PUSH2 0x2148 DUP4 PUSH2 0x34F2 JUMP JUMPDEST PUSH2 0x2A33 JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP3 CALLER PUSH1 0x40 MLOAD PUSH2 0x217E SWAP3 SWAP2 SWAP1 PUSH2 0x3338 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 SUB PUSH2 0x2282 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x85B995DC81C985D19481B1A5B5A5D PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0x8E7FA5E406CB856AAB05575E45EA011C6748376CC1B5229E3D67B92986406A15 SWAP2 ADD PUSH2 0xD39 JUMP JUMPDEST PUSH1 0x60 DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x22DA SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3519 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x8C5261668696CE22758910D05BAB8F186D6EB247CEAC2AF2E82C7DC17669B036 DUP2 PUSH1 0x40 MLOAD PUSH2 0xD39 SWAP2 SWAP1 PUSH2 0x3573 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x5 DUP3 DUP2 SHL DUP3 AND SWAP5 DUP6 MSTORE DUP4 MLOAD SWAP5 DUP3 SUB SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x40 PUSH1 0x0 DUP2 DUP2 KECCAK256 PUSH1 0x2 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x4 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP3 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x8 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x10 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 DUP5 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 DUP4 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 SWAP1 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xE0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x100 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x200 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x120 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x400 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x140 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x800 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x160 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x1000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x2000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x4000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1C0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x8000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1E0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH3 0x10000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x20000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x220 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x40000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x240 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x80000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x260 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x100000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x280 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x200000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x400000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x800000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2E0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x1000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x300 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x2000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x320 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x4000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x340 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x8000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x360 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x10000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x380 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x20000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x40000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x80000000 SWAP1 SWAP5 AND ISZERO SWAP1 SWAP6 SHL SWAP2 DUP3 SWAP1 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x3E0 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x26B5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x616767726567617465526F6F7420656D707479 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x26CF JUMPI POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x2725 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x1859D9DC9959D85D19549BDBDD0808595E1A5CDD PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x2732 DUP3 NUMBER PUSH2 0x3419 JUMP JUMPDEST LT ISZERO PUSH2 0x2780 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616767726567617465526F6F7420217665726966696564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP4 SWAP2 PUSH32 0x36B314ABA9F663B4D3EF3288AE489341CC5E6A2725A05FA2B72DF7A27E03F42A SWAP2 LOG2 POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0x27ED PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x2B5C JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x167C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x28 PUSH1 0x4 PUSH2 0x2B99 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2821 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2841 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 SWAP2 KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x167C PUSH2 0x2862 DUP4 PUSH2 0x2BC9 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x167C PUSH3 0xFFFFFF NOT DUP4 AND DUP3 PUSH1 0x4 PUSH2 0x2B99 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x167C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x24 PUSH1 0x4 PUSH2 0x2B99 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x167C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x4 PUSH1 0x20 PUSH2 0x2BDA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x167C PUSH1 0x4C PUSH2 0x28C1 DUP2 PUSH1 0x18 DUP7 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x3419 JUMP JUMPDEST PUSH3 0xFFFFFF NOT DUP6 AND SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2CE5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x28E9 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x40 MLOAD SWAP2 POP DUP2 SWAP3 POP PUSH2 0x2909 DUP5 DUP4 PUSH1 0x20 ADD PUSH2 0x2D61 JUMP JUMPDEST POP DUP2 DUP2 ADD PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH2 0xFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2940 JUMPI PUSH2 0x2940 PUSH2 0x2F59 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x296A JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP8 MLOAD PUSH1 0x20 DUP10 ADD DUP12 DUP15 DUP15 CALL SWAP2 POP RETURNDATASIZE SWAP3 POP DUP7 DUP4 GT ISZERO PUSH2 0x298B JUMPI DUP7 SWAP3 POP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x2A11 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4678426173654368696C6454756E6E656C3A20524F4F545F54554E4E454C5F41 PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x13149150511657D4D155 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x11 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 PUSH2 0x2A71 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x6E657720726F6F7420656D707479 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x2AC4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x726F6F7420616C72656164792070656E64696E67 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2B19 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x3937B7BA1030B63932B0B23C90383937BB32B7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 NUMBER SWAP1 SSTORE MLOAD PUSH32 0x84EF18531155AFDB0E64FF905D67044AE3AAC63A6FBA4661CFD9C4C14F289BC8 SWAP1 PUSH2 0xD39 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2B69 DUP4 DUP6 PUSH2 0x32CE JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x2B79 JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x2B8E JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x1B3D JUMP JUMPDEST PUSH2 0x27ED DUP6 DUP6 DUP6 PUSH2 0x2E54 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BA6 DUP3 PUSH1 0x20 PUSH2 0x3586 JUMP JUMPDEST PUSH2 0x2BB1 SWAP1 PUSH1 0x8 PUSH2 0x359F JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x2BBF DUP6 DUP6 DUP6 PUSH2 0x2BDA JUMP JUMPDEST SWAP1 SHR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x167C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x2C PUSH1 0x20 JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0x2BEF JUMPI POP PUSH1 0x0 PUSH2 0x1B3D JUMP JUMPDEST PUSH2 0x2C02 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x2C18 PUSH1 0xFF DUP5 AND DUP6 PUSH2 0x32CE JUMP JUMPDEST GT ISZERO PUSH2 0x2C80 JUMPI PUSH2 0x2C31 DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2C44 DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x2CA5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0x2CBE DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT DUP5 ADD SAR SWAP2 SWAP1 SWAP6 ADD MLOAD AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2CFB DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH2 0x2D0F DUP7 PUSH2 0x2ECB JUMP JUMPDEST DUP5 PUSH2 0x2D1A DUP8 DUP5 PUSH2 0x32CE JUMP JUMPDEST PUSH2 0x2D24 SWAP2 SWAP1 PUSH2 0x32CE JUMP JUMPDEST GT ISZERO PUSH2 0x2D37 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x2D59 JUMP JUMPDEST PUSH2 0x2D41 DUP6 DUP3 PUSH2 0x32CE JUMP JUMPDEST SWAP1 POP PUSH2 0x2D55 DUP4 PUSH5 0xFFFFFFFFFF AND DUP3 DUP7 PUSH2 0x2B5C JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFFFFFF NOT DUP1 DUP5 AND SUB PUSH2 0x2D89 JUMPI PUSH1 0x40 MLOAD PUSH4 0x148D5133 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2D92 DUP4 PUSH2 0x2F04 JUMP JUMPDEST ISZERO PUSH2 0x2DB0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EE09491 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2DC5 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2DE5 DUP6 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD SWAP2 POP DUP6 DUP3 GT ISZERO PUSH2 0x2E06 JUMPI PUSH1 0x20 PUSH1 0x60 REVERT JUMPDEST DUP4 DUP7 DUP6 DUP6 PUSH1 0x4 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x2E2E JUMPI PUSH1 0x40 MLOAD PUSH4 0x2AF1BD9B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2E49 PUSH2 0x2E3B DUP9 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND DUP8 DUP7 PUSH2 0x2E54 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0x2E7C JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0x2EB5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EE0 DUP3 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2EF3 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F10 DUP3 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH5 0xFFFFFFFFFF SUB PUSH2 0x2F2A JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F35 DUP4 PUSH2 0x2ECB JUMP JUMPDEST PUSH1 0x40 MLOAD LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2F52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2F80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2F9B JUMPI PUSH2 0x2F9B PUSH2 0x2F59 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x2FC3 JUMPI PUSH2 0x2FC3 PUSH2 0x2F59 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x2FDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x300E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3025 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2D59 DUP5 DUP3 DUP6 ADD PUSH2 0x2F6F JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH2 0x3069 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x460 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3088 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x30A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x30B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x30C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x30D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 DUP4 ADD SWAP8 POP SWAP6 POP POP DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x440 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x30F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x40 ADD SWAP4 CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B3D DUP3 PUSH2 0x310B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3158 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH2 0x3168 PUSH1 0x20 DUP7 ADD PUSH2 0x310B JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x3185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3199 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x31A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x31BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP POP PUSH1 0x20 ADD SWAP5 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x31EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B3D DUP3 PUSH2 0x31C9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x320D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3216 DUP5 PUSH2 0x31C9 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3245 DUP7 DUP3 DUP8 ADD PUSH2 0x2F6F JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x326A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3252 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x328B DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x324F JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1B3A PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x3273 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x167C JUMPI PUSH2 0x167C PUSH2 0x32B8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x32F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x330D PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x3273 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x331F DUP2 DUP7 PUSH2 0x3273 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x334B PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x3273 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x43E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x338F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x33B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x33CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x33E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3409 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1B3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x167C JUMPI PUSH2 0x167C PUSH2 0x32B8 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x3445 JUMPI PUSH2 0x3445 PUSH2 0x32B8 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3462 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x3498 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x3273 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3498 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x3273 JUMP JUMPDEST DUP4 DUP2 MSTORE DUP3 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x27ED PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x3273 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x3513 JUMPI PUSH1 0x0 NOT DUP2 PUSH1 0x20 SUB PUSH1 0x3 SHL SHL DUP3 AND SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP1 DUP10 PUSH1 0xE0 SHL AND DUP4 MSTORE DUP8 PUSH1 0x4 DUP5 ADD MSTORE DUP1 DUP8 PUSH1 0xE0 SHL AND PUSH1 0x24 DUP5 ADD MSTORE DUP1 DUP7 PUSH1 0xE0 SHL AND PUSH1 0x28 DUP5 ADD MSTORE POP DUP4 PUSH1 0x2C DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x3561 DUP2 PUSH1 0x4C DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x324F JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x4C ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1B3D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3273 JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x167C JUMPI PUSH2 0x167C PUSH2 0x32B8 JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND MUL SWAP1 DUP2 AND SWAP1 DUP2 DUP2 EQ PUSH2 0x35BB JUMPI PUSH2 0x35BB PUSH2 0x32B8 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB6 0xED 0xAE MOD 0x49 0x4D 0xD4 DUP14 SWAP10 REVERT SGT SWAP4 0xDE PUSH13 0x6A9203028115008D2D15D85A6E DUP9 PUSH21 0x3494D64736F6C6343000811003300000000000000 ","sourceMap":"708:2304:140:-:0;;;823:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1320:4;1111:7;1126:13;1320:4;1159:12;1179:16;1203:11;1222;1241:12;1261:7;1276:15;;1111:7;1126:13;1320:4;1159:12;1179:16;3038:21:116::1;3048:10;3038:9;:21::i;:::-;3105:7;:12;;3116:1;3105:12:::0;3097:37:::1;;;::::0;-1:-1:-1;;;3097:37:116;;1479:2:181;3097:37:116::1;::::0;::::1;1461:21:181::0;1518:2;1498:18;;;1491:30;-1:-1:-1;;;1537:18:181;;;1530:42;1589:18;;3097:37:116::1;;;;;;;;;-1:-1:-1::0;;;;;3148:26:116;::::1;3140:56;;;::::0;-1:-1:-1;;;3140:56:116;;1820:2:181;3140:56:116::1;::::0;::::1;1802:21:181::0;1859:2;1839:18;;;1832:30;-1:-1:-1;;;1878:18:181;;;1871:47;1935:18;;3140:56:116::1;1618:341:181::0;3140:56:116::1;3308:16;::::0;;::::1;;::::0;-1:-1:-1;;;;;3330:10:116;;::::1;;::::0;3346:27;;::::1;;::::0;3379:29;;::::1;;::::0;3449:30;::::1;::::0;3445:88:::1;;3489:37;3509:16:::0;3489:19:::1;:37::i;:::-;3544:74;::::0;;-1:-1:-1;;;;;2222:15:181;;;2204:34;;2274:15;;;2269:2;2254:18;;2247:43;2326:15;;2306:18;;;2299:43;3544:74:116;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;2154:2:181;3544:74:116;;::::1;-1:-1:-1::0;;996:7:51;:15;;-1:-1:-1;;;;996:15:51;;;-1:-1:-1;;1056:14:114::1;:48:::0;;-1:-1:-1;;;;;;1056:48:114::1;-1:-1:-1::0;;;;;1056:48:114;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;1821:7:52;:22;7305:11:120::3;7291:25:::0;::::3;7283:50;;;::::0;-1:-1:-1;;;7283:50:120;;2555:2:181;7283:50:120::3;::::0;::::3;2537:21:181::0;2594:2;2574:18;;;2567:30;-1:-1:-1;;;2613:18:181;;;2606:42;2665:18;;7283:50:120::3;2353:336:181::0;7283:50:120::3;7361:10;7347:11;:24;7339:49;;;::::0;-1:-1:-1;;;7339:49:120;;2896:2:181;7339:49:120::3;::::0;::::3;2878:21:181::0;2935:2;2915:18;;;2908:30;-1:-1:-1;;;2954:18:181;;;2947:42;3006:18;;7339:49:120::3;2694:336:181::0;7339:49:120::3;7394:25;::::0;;;7425::::3;::::0;;;-1:-1:-1;;;;;7465:21:120;::::3;7457:46;;;::::0;-1:-1:-1;;;7457:46:120;;3237:2:181;7457:46:120::3;::::0;::::3;3219:21:181::0;3276:2;3256:18;;;3249:30;-1:-1:-1;;;3295:18:181;;;3288:42;3347:18;;7457:46:120::3;3035:336:181::0;7457:46:120::3;-1:-1:-1::0;;;;;;7509:35:120;;::::3;;::::0;7551:11:::3;:26:::0;;;;737:7:145;:18;;-1:-1:-1;;;;;;737:18:145;;;;;;;;;;;;-1:-1:-1;708:2304:140;;-1:-1:-1;;;;;;;;;;;;;;;;708:2304:140;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;2486:524:140:-;2922:43;2948:16;2922:25;;;;;:43;;:::i;:::-;2972:33;2988:16;2972:15;:33::i;:::-;2486:524;:::o;5838:185:116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;3588:34:181;;3658:15;;;3653:2;3638:18;;3631:43;5921:57:116;;3523:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;1002:193:145:-;1081:12;;-1:-1:-1;;;;;1081:12:145;:28;1073:83;;;;-1:-1:-1;;;1073:83:145;;3887:2:181;1073:83:145;;;3869:21:181;3926:2;3906:18;;;3899:30;3965:34;3945:18;;;3938:62;-1:-1:-1;;;4016:18:181;;;4009:40;4066:19;;1073:83:145;3685:406:181;1073:83:145;1162:12;:28;;-1:-1:-1;;;;;;1162:28:145;-1:-1:-1;;;;;1162:28:145;;;;;;;;;;1002:193::o;14:167:181:-;92:13;;145:10;134:22;;124:33;;114:61;;171:1;168;161:12;114:61;14:167;;;:::o;186:177::-;265:13;;-1:-1:-1;;;;;307:31:181;;297:42;;287:70;;353:1;350;343:12;368:904;517:6;525;533;541;549;557;565;573;581;589;642:3;630:9;621:7;617:23;613:33;610:53;;;659:1;656;649:12;610:53;682:39;711:9;682:39;:::i;:::-;672:49;;740:48;784:2;773:9;769:18;740:48;:::i;:::-;730:58;;807:49;852:2;841:9;837:18;807:49;:::i;:::-;797:59;;875:49;920:2;909:9;905:18;875:49;:::i;:::-;865:59;;943:50;988:3;977:9;973:19;943:50;:::i;:::-;933:60;;1033:3;1022:9;1018:19;1012:26;1002:36;;1078:3;1067:9;1063:19;1057:26;1047:36;;1123:3;1112:9;1108:19;1102:26;1092:36;;1147:50;1192:3;1181:9;1177:19;1147:50;:::i;:::-;1137:60;;1216:50;1261:3;1250:9;1246:19;1216:50;:::i;:::-;1206:60;;368:904;;;;;;;;;;;;;:::o;3685:406::-;708:2304:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@AMB_39042":{"entryPoint":null,"id":39042,"parameterSlots":0,"returnSlots":0},"@DOMAIN_39039":{"entryPoint":null,"id":39039,"parameterSlots":0,"returnSlots":0},"@MERKLE_39550":{"entryPoint":null,"id":39550,"parameterSlots":0,"returnSlots":0},"@MIRROR_DOMAIN_39048":{"entryPoint":null,"id":39048,"parameterSlots":0,"returnSlots":0},"@PROCESS_GAS_39553":{"entryPoint":null,"id":39553,"parameterSlots":0,"returnSlots":0},"@RESERVE_GAS_39556":{"entryPoint":null,"id":39556,"parameterSlots":0,"returnSlots":0},"@ROOT_MANAGER_39045":{"entryPoint":null,"id":39045,"parameterSlots":0,"returnSlots":0},"@_39157":{"entryPoint":null,"id":39157,"parameterSlots":0,"returnSlots":0},"@_msgSender_11496":{"entryPoint":null,"id":11496,"parameterSlots":0,"returnSlots":1},"@_nonReentrantAfter_10733":{"entryPoint":null,"id":10733,"parameterSlots":0,"returnSlots":0},"@_nonReentrantBefore_10725":{"entryPoint":6724,"id":10725,"parameterSlots":0,"returnSlots":0},"@_pause_10663":{"entryPoint":8267,"id":10663,"parameterSlots":0,"returnSlots":0},"@_processMessageFromRoot_44946":{"entryPoint":8334,"id":44946,"parameterSlots":3,"returnSlots":0},"@_processMessage_39220":{"entryPoint":6699,"id":39220,"parameterSlots":1,"returnSlots":0},"@_requireNotPaused_10636":{"entryPoint":6382,"id":10636,"parameterSlots":0,"returnSlots":0},"@_requirePaused_10647":{"entryPoint":6534,"id":10647,"parameterSlots":0,"returnSlots":0},"@_sendMessageToRoot_47010":{"entryPoint":8949,"id":47010,"parameterSlots":1,"returnSlots":0},"@_sendMessage_44911":{"entryPoint":6459,"id":44911,"parameterSlots":2,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":6277,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_44963":{"entryPoint":7963,"id":44963,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":8666,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":8588,"id":49927,"parameterSlots":1,"returnSlots":0},"@_setRateLimitBlocks_49687":{"entryPoint":8767,"id":49687,"parameterSlots":1,"returnSlots":0},"@_unpause_10679":{"entryPoint":6614,"id":10679,"parameterSlots":0,"returnSlots":0},"@_verifySender_44890":{"entryPoint":null,"id":44890,"parameterSlots":1,"returnSlots":1},"@acceptProposedOwner_49887":{"entryPoint":5425,"id":49887,"parameterSlots":0,"returnSlots":0},"@addSender_39706":{"entryPoint":5298,"id":39706,"parameterSlots":1,"returnSlots":0},"@addressToBytes32_50168":{"entryPoint":null,"id":50168,"parameterSlots":1,"returnSlots":1},"@allowlistedSenders_39581":{"entryPoint":null,"id":39581,"parameterSlots":0,"returnSlots":0},"@body_49194":{"entryPoint":10403,"id":49194,"parameterSlots":1,"returnSlots":1},"@branchRoot_48998":{"entryPoint":8996,"id":48998,"parameterSlots":3,"returnSlots":1},"@build_50565":{"entryPoint":11100,"id":50565,"parameterSlots":3,"returnSlots":1},"@bytes32ToAddress_50187":{"entryPoint":null,"id":50187,"parameterSlots":1,"returnSlots":1},"@calculateMessageRoot_40253":{"entryPoint":6813,"id":40253,"parameterSlots":3,"returnSlots":1},"@clone_51141":{"entryPoint":10449,"id":51141,"parameterSlots":1,"returnSlots":1},"@delayBlocks_39546":{"entryPoint":null,"id":39546,"parameterSlots":0,"returnSlots":0},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@destination_49143":{"entryPoint":10230,"id":49143,"parameterSlots":1,"returnSlots":1},"@dispatch_39974":{"entryPoint":5814,"id":39974,"parameterSlots":3,"returnSlots":2},"@end_50683":{"entryPoint":11979,"id":50683,"parameterSlots":1,"returnSlots":1},"@excessivelySafeCall_50045":{"entryPoint":10522,"id":50045,"parameterSlots":5,"returnSlots":2},"@formatMessage_49044":{"entryPoint":8893,"id":49044,"parameterSlots":6,"returnSlots":1},"@fxChild_46929":{"entryPoint":null,"id":46929,"parameterSlots":0,"returnSlots":0},"@fxRootTunnel_46931":{"entryPoint":null,"id":46931,"parameterSlots":0,"returnSlots":0},"@home_39271":{"entryPoint":null,"id":39271,"parameterSlots":0,"returnSlots":1},"@indexUint_50882":{"entryPoint":11161,"id":50882,"parameterSlots":3,"returnSlots":1},"@index_50852":{"entryPoint":11226,"id":50852,"parameterSlots":3,"returnSlots":1},"@isNotValid_50403":{"entryPoint":12036,"id":50403,"parameterSlots":1,"returnSlots":1},"@isNull_50364":{"entryPoint":null,"id":50364,"parameterSlots":1,"returnSlots":1},"@isReplica_39286":{"entryPoint":null,"id":39286,"parameterSlots":1,"returnSlots":1},"@keccak_50951":{"entryPoint":10251,"id":50951,"parameterSlots":1,"returnSlots":1},"@lastSentBlock_49642":{"entryPoint":null,"id":49642,"parameterSlots":0,"returnSlots":0},"@leftMask_50342":{"entryPoint":null,"id":50342,"parameterSlots":1,"returnSlots":1},"@len_50665":{"entryPoint":null,"id":50665,"parameterSlots":1,"returnSlots":1},"@loc_50615":{"entryPoint":null,"id":50615,"parameterSlots":1,"returnSlots":1},"@localDomain_39855":{"entryPoint":null,"id":39855,"parameterSlots":0,"returnSlots":1},"@messages_39592":{"entryPoint":null,"id":39592,"parameterSlots":0,"returnSlots":0},"@mirrorConnector_39051":{"entryPoint":null,"id":39051,"parameterSlots":0,"returnSlots":0},"@nonce_49125":{"entryPoint":10361,"id":49125,"parameterSlots":1,"returnSlots":1},"@nonces_39586":{"entryPoint":null,"id":39586,"parameterSlots":0,"returnSlots":0},"@origin_49092":{"entryPoint":10341,"id":49092,"parameterSlots":1,"returnSlots":1},"@outboundRoot_39845":{"entryPoint":4157,"id":39845,"parameterSlots":0,"returnSlots":1},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@pause_38913":{"entryPoint":4665,"id":38913,"parameterSlots":0,"returnSlots":0},"@paused_10624":{"entryPoint":null,"id":10624,"parameterSlots":0,"returnSlots":1},"@pendingAggregateRoots_39561":{"entryPoint":null,"id":39561,"parameterSlots":0,"returnSlots":0},"@processMessageFromRoot_46999":{"entryPoint":4845,"id":46999,"parameterSlots":4,"returnSlots":0},"@processMessage_39189":{"entryPoint":3230,"id":39189,"parameterSlots":1,"returnSlots":0},"@process_40427":{"entryPoint":7230,"id":40427,"parameterSlots":1,"returnSlots":1},"@proposeNewOwner_49841":{"entryPoint":5016,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@proveAndProcess_40115":{"entryPoint":3396,"id":40115,"parameterSlots":5,"returnSlots":0},"@proveMessageRoot_40306":{"entryPoint":6980,"id":40306,"parameterSlots":4,"returnSlots":0},"@provenAggregateRoots_39566":{"entryPoint":null,"id":39566,"parameterSlots":0,"returnSlots":0},"@provenMessageRoots_39571":{"entryPoint":null,"id":39571,"parameterSlots":0,"returnSlots":0},"@rateLimitBlocks_49639":{"entryPoint":null,"id":49639,"parameterSlots":0,"returnSlots":0},"@receiveAggregateRoot_40160":{"entryPoint":10803,"id":40160,"parameterSlots":1,"returnSlots":0},"@recipientAddress_49174":{"entryPoint":10324,"id":49174,"parameterSlots":1,"returnSlots":1},"@recipient_49158":{"entryPoint":11209,"id":49158,"parameterSlots":1,"returnSlots":1},"@ref_50591":{"entryPoint":10194,"id":50591,"parameterSlots":2,"returnSlots":1},"@removePendingAggregateRoot_39792":{"entryPoint":4419,"id":39792,"parameterSlots":1,"returnSlots":0},"@removeSender_39724":{"entryPoint":5174,"id":39724,"parameterSlots":1,"returnSlots":0},"@renounceOwnership_39834":{"entryPoint":4622,"id":39834,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@sendValue_11206":{"entryPoint":7981,"id":11206,"parameterSlots":2,"returnSlots":0},"@send_39906":{"entryPoint":2750,"id":39906,"parameterSlots":1,"returnSlots":0},"@sender_49107":{"entryPoint":10382,"id":49107,"parameterSlots":1,"returnSlots":1},"@sentMessageRoots_39576":{"entryPoint":null,"id":39576,"parameterSlots":0,"returnSlots":0},"@setDelayBlocks_39750":{"entryPoint":2580,"id":39750,"parameterSlots":1,"returnSlots":0},"@setFxRootTunnel_46974":{"entryPoint":10661,"id":46974,"parameterSlots":1,"returnSlots":0},"@setMirrorConnector_39170":{"entryPoint":4102,"id":39170,"parameterSlots":1,"returnSlots":0},"@setRateLimitBlocks_39763":{"entryPoint":5762,"id":39763,"parameterSlots":1,"returnSlots":0},"@setWatcherManager_38881":{"entryPoint":5537,"id":38881,"parameterSlots":1,"returnSlots":0},"@slice_50729":{"entryPoint":11493,"id":50729,"parameterSlots":4,"returnSlots":1},"@typeOf_50601":{"entryPoint":null,"id":50601,"parameterSlots":1,"returnSlots":1},"@unpause_38893":{"entryPoint":3169,"id":38893,"parameterSlots":0,"returnSlots":0},"@unsafeBuildUnchecked_50530":{"entryPoint":11860,"id":50530,"parameterSlots":3,"returnSlots":1},"@unsafeCopyTo_51113":{"entryPoint":11617,"id":51113,"parameterSlots":2,"returnSlots":1},"@verifyAggregateRoot_40221":{"entryPoint":9842,"id":40221,"parameterSlots":1,"returnSlots":0},"@verifySender_39202":{"entryPoint":5752,"id":39202,"parameterSlots":1,"returnSlots":1},"@watcherManager_38824":{"entryPoint":null,"id":38824,"parameterSlots":0,"returnSlots":0},"@withdrawFunds_39824":{"entryPoint":4294,"id":39824,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":12555,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes":{"entryPoint":12143,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":12583,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256":{"entryPoint":12399,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":13303,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32_fromMemory":{"entryPoint":13025,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_uint256_fromMemory":{"entryPoint":13391,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes_memory_ptr":{"entryPoint":12284,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":12096,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_addresst_bytes_calldata_ptr":{"entryPoint":12610,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_uint32":{"entryPoint":12765,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr":{"entryPoint":12792,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_uint32":{"entryPoint":12745,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_bytes":{"entryPoint":12915,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":13287,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":13593,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13521,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":12959,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13427,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13683,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":13112,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":13050,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed":{"entryPoint":12359,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0127552a73259d4875e4bb85e64334729d5119ce836ba2001f26ffe4d150b533__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1b951f8525e63633d83b1eade825f5af300eb77e95eaebd60efd7481ae921a45__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f7974c7c2deac4fad00669eceb145d6535e698a8bcd8493990c8db551188166b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13474,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"access_calldata_tail_t_bytes_calldata_ptr":{"entryPoint":13209,"id":null,"parameterSlots":2,"returnSlots":2},"access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr":{"entryPoint":13176,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":13006,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint8":{"entryPoint":13727,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":13337,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint8":{"entryPoint":13702,"id":null,"parameterSlots":2,"returnSlots":1},"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32":{"entryPoint":13554,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":12879,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint32":{"entryPoint":13356,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":12984,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":12337,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":13154,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":12121,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:26418:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"113:93:181","statements":[{"nodeType":"YulAssignment","src":"123:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"135:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"146:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"131:3:181"},"nodeType":"YulFunctionCall","src":"131:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"123:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"165:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"180:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"188:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"176:3:181"},"nodeType":"YulFunctionCall","src":"176:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"158:6:181"},"nodeType":"YulFunctionCall","src":"158:42:181"},"nodeType":"YulExpressionStatement","src":"158:42:181"}]},"name":"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"82:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"93:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"104:4:181","type":""}],"src":"14:192:181"},{"body":{"nodeType":"YulBlock","src":"281:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"327:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"336:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"339:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"329:6:181"},"nodeType":"YulFunctionCall","src":"329:12:181"},"nodeType":"YulExpressionStatement","src":"329:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"302:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"311:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"298:3:181"},"nodeType":"YulFunctionCall","src":"298:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"323:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"294:3:181"},"nodeType":"YulFunctionCall","src":"294:32:181"},"nodeType":"YulIf","src":"291:52:181"},{"nodeType":"YulAssignment","src":"352:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"375:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"362:12:181"},"nodeType":"YulFunctionCall","src":"362:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"352:6:181"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"247:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"258:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"270:6:181","type":""}],"src":"211:180:181"},{"body":{"nodeType":"YulBlock","src":"497:76:181","statements":[{"nodeType":"YulAssignment","src":"507:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"519:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"530:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"515:3:181"},"nodeType":"YulFunctionCall","src":"515:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"507:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"549:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"560:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"542:6:181"},"nodeType":"YulFunctionCall","src":"542:25:181"},"nodeType":"YulExpressionStatement","src":"542:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"466:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"477:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"488:4:181","type":""}],"src":"396:177:181"},{"body":{"nodeType":"YulBlock","src":"610:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"627:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"634:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"639:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"630:3:181"},"nodeType":"YulFunctionCall","src":"630:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"620:6:181"},"nodeType":"YulFunctionCall","src":"620:31:181"},"nodeType":"YulExpressionStatement","src":"620:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"667:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"670:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"660:6:181"},"nodeType":"YulFunctionCall","src":"660:15:181"},"nodeType":"YulExpressionStatement","src":"660:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"691:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"694:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"684:6:181"},"nodeType":"YulFunctionCall","src":"684:15:181"},"nodeType":"YulExpressionStatement","src":"684:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"578:127:181"},{"body":{"nodeType":"YulBlock","src":"762:666:181","statements":[{"body":{"nodeType":"YulBlock","src":"811:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"820:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"823:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"813:6:181"},"nodeType":"YulFunctionCall","src":"813:12:181"},"nodeType":"YulExpressionStatement","src":"813:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"790:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"798:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"786:3:181"},"nodeType":"YulFunctionCall","src":"786:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"805:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"782:3:181"},"nodeType":"YulFunctionCall","src":"782:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"775:6:181"},"nodeType":"YulFunctionCall","src":"775:35:181"},"nodeType":"YulIf","src":"772:55:181"},{"nodeType":"YulVariableDeclaration","src":"836:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"859:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"846:12:181"},"nodeType":"YulFunctionCall","src":"846:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"840:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"875:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"885:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"879:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"926:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"928:16:181"},"nodeType":"YulFunctionCall","src":"928:18:181"},"nodeType":"YulExpressionStatement","src":"928:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"918:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"922:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"915:2:181"},"nodeType":"YulFunctionCall","src":"915:10:181"},"nodeType":"YulIf","src":"912:36:181"},{"nodeType":"YulVariableDeclaration","src":"957:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"971:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"967:3:181"},"nodeType":"YulFunctionCall","src":"967:7:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"961:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"983:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1003:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"997:5:181"},"nodeType":"YulFunctionCall","src":"997:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"987:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1015:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1037:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1061:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1065:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1057:3:181"},"nodeType":"YulFunctionCall","src":"1057:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1072:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1053:3:181"},"nodeType":"YulFunctionCall","src":"1053:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"1077:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1049:3:181"},"nodeType":"YulFunctionCall","src":"1049:31:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1082:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1045:3:181"},"nodeType":"YulFunctionCall","src":"1045:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1033:3:181"},"nodeType":"YulFunctionCall","src":"1033:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1019:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1145:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1147:16:181"},"nodeType":"YulFunctionCall","src":"1147:18:181"},"nodeType":"YulExpressionStatement","src":"1147:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1104:10:181"},{"name":"_2","nodeType":"YulIdentifier","src":"1116:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1101:2:181"},"nodeType":"YulFunctionCall","src":"1101:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1124:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1136:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1121:2:181"},"nodeType":"YulFunctionCall","src":"1121:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1098:2:181"},"nodeType":"YulFunctionCall","src":"1098:46:181"},"nodeType":"YulIf","src":"1095:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1183:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1187:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1176:6:181"},"nodeType":"YulFunctionCall","src":"1176:22:181"},"nodeType":"YulExpressionStatement","src":"1176:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1214:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1222:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1207:6:181"},"nodeType":"YulFunctionCall","src":"1207:18:181"},"nodeType":"YulExpressionStatement","src":"1207:18:181"},{"body":{"nodeType":"YulBlock","src":"1273:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1282:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1285:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1275:6:181"},"nodeType":"YulFunctionCall","src":"1275:12:181"},"nodeType":"YulExpressionStatement","src":"1275:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1248:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1256:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1244:3:181"},"nodeType":"YulFunctionCall","src":"1244:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1261:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1240:3:181"},"nodeType":"YulFunctionCall","src":"1240:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"1268:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1237:2:181"},"nodeType":"YulFunctionCall","src":"1237:35:181"},"nodeType":"YulIf","src":"1234:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1315:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1323:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1311:3:181"},"nodeType":"YulFunctionCall","src":"1311:17:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1334:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1342:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1330:3:181"},"nodeType":"YulFunctionCall","src":"1330:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1349:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1298:12:181"},"nodeType":"YulFunctionCall","src":"1298:54:181"},"nodeType":"YulExpressionStatement","src":"1298:54:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1376:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1384:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1372:3:181"},"nodeType":"YulFunctionCall","src":"1372:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1389:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1368:3:181"},"nodeType":"YulFunctionCall","src":"1368:26:181"},{"kind":"number","nodeType":"YulLiteral","src":"1396:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1361:6:181"},"nodeType":"YulFunctionCall","src":"1361:37:181"},"nodeType":"YulExpressionStatement","src":"1361:37:181"},{"nodeType":"YulAssignment","src":"1407:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1416:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1407:5:181"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"736:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"744:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"752:5:181","type":""}],"src":"710:718:181"},{"body":{"nodeType":"YulBlock","src":"1512:241:181","statements":[{"body":{"nodeType":"YulBlock","src":"1558:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1567:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1570:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1560:6:181"},"nodeType":"YulFunctionCall","src":"1560:12:181"},"nodeType":"YulExpressionStatement","src":"1560:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1533:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1542:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1529:3:181"},"nodeType":"YulFunctionCall","src":"1529:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1554:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1525:3:181"},"nodeType":"YulFunctionCall","src":"1525:32:181"},"nodeType":"YulIf","src":"1522:52:181"},{"nodeType":"YulVariableDeclaration","src":"1583:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1610:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1597:12:181"},"nodeType":"YulFunctionCall","src":"1597:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1587:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1663:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1672:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1675:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1665:6:181"},"nodeType":"YulFunctionCall","src":"1665:12:181"},"nodeType":"YulExpressionStatement","src":"1665:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1635:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1643:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1632:2:181"},"nodeType":"YulFunctionCall","src":"1632:30:181"},"nodeType":"YulIf","src":"1629:50:181"},{"nodeType":"YulAssignment","src":"1688:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1719:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1730:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1715:3:181"},"nodeType":"YulFunctionCall","src":"1715:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1739:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"1698:16:181"},"nodeType":"YulFunctionCall","src":"1698:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1688:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1478:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1489:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1501:6:181","type":""}],"src":"1433:320:181"},{"body":{"nodeType":"YulBlock","src":"1828:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"1874:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1883:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1886:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1876:6:181"},"nodeType":"YulFunctionCall","src":"1876:12:181"},"nodeType":"YulExpressionStatement","src":"1876:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1849:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1858:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1845:3:181"},"nodeType":"YulFunctionCall","src":"1845:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1870:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1841:3:181"},"nodeType":"YulFunctionCall","src":"1841:32:181"},"nodeType":"YulIf","src":"1838:52:181"},{"nodeType":"YulAssignment","src":"1899:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1922:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1909:12:181"},"nodeType":"YulFunctionCall","src":"1909:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1899:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1794:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1805:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1817:6:181","type":""}],"src":"1758:180:181"},{"body":{"nodeType":"YulBlock","src":"1975:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1992:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1999:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2004:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1995:3:181"},"nodeType":"YulFunctionCall","src":"1995:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1985:6:181"},"nodeType":"YulFunctionCall","src":"1985:31:181"},"nodeType":"YulExpressionStatement","src":"1985:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2032:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2035:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2025:6:181"},"nodeType":"YulFunctionCall","src":"2025:15:181"},"nodeType":"YulExpressionStatement","src":"2025:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2056:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2059:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2049:6:181"},"nodeType":"YulFunctionCall","src":"2049:15:181"},"nodeType":"YulExpressionStatement","src":"2049:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"1943:127:181"},{"body":{"nodeType":"YulBlock","src":"2193:229:181","statements":[{"nodeType":"YulAssignment","src":"2203:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2215:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2226:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2211:3:181"},"nodeType":"YulFunctionCall","src":"2211:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2203:4:181"}]},{"body":{"nodeType":"YulBlock","src":"2271:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2292:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2299:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2304:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2295:3:181"},"nodeType":"YulFunctionCall","src":"2295:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2285:6:181"},"nodeType":"YulFunctionCall","src":"2285:31:181"},"nodeType":"YulExpressionStatement","src":"2285:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2336:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2339:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2329:6:181"},"nodeType":"YulFunctionCall","src":"2329:15:181"},"nodeType":"YulExpressionStatement","src":"2329:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2364:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2367:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2357:6:181"},"nodeType":"YulFunctionCall","src":"2357:15:181"},"nodeType":"YulExpressionStatement","src":"2357:15:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2251:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2259:1:181","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2248:2:181"},"nodeType":"YulFunctionCall","src":"2248:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2241:6:181"},"nodeType":"YulFunctionCall","src":"2241:21:181"},"nodeType":"YulIf","src":"2238:144:181"},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2398:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"2409:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2391:6:181"},"nodeType":"YulFunctionCall","src":"2391:25:181"},"nodeType":"YulExpressionStatement","src":"2391:25:181"}]},"name":"abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2162:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2173:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2184:4:181","type":""}],"src":"2075:347:181"},{"body":{"nodeType":"YulBlock","src":"2522:92:181","statements":[{"nodeType":"YulAssignment","src":"2532:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2544:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2555:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2540:3:181"},"nodeType":"YulFunctionCall","src":"2540:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2532:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2574:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2599:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2592:6:181"},"nodeType":"YulFunctionCall","src":"2592:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2585:6:181"},"nodeType":"YulFunctionCall","src":"2585:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2567:6:181"},"nodeType":"YulFunctionCall","src":"2567:41:181"},"nodeType":"YulExpressionStatement","src":"2567:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2491:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2502:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2513:4:181","type":""}],"src":"2427:187:181"},{"body":{"nodeType":"YulBlock","src":"2720:102:181","statements":[{"nodeType":"YulAssignment","src":"2730:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2742:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2753:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2738:3:181"},"nodeType":"YulFunctionCall","src":"2738:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2730:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2772:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2787:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2803:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2808:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2799:3:181"},"nodeType":"YulFunctionCall","src":"2799:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2812:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2795:3:181"},"nodeType":"YulFunctionCall","src":"2795:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2783:3:181"},"nodeType":"YulFunctionCall","src":"2783:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2765:6:181"},"nodeType":"YulFunctionCall","src":"2765:51:181"},"nodeType":"YulExpressionStatement","src":"2765:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2689:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2700:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2711:4:181","type":""}],"src":"2619:203:181"},{"body":{"nodeType":"YulBlock","src":"3035:724:181","statements":[{"body":{"nodeType":"YulBlock","src":"3083:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3092:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3095:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3085:6:181"},"nodeType":"YulFunctionCall","src":"3085:12:181"},"nodeType":"YulExpressionStatement","src":"3085:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3056:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3065:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3052:3:181"},"nodeType":"YulFunctionCall","src":"3052:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3077:4:181","type":"","value":"1120"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3048:3:181"},"nodeType":"YulFunctionCall","src":"3048:34:181"},"nodeType":"YulIf","src":"3045:54:181"},{"nodeType":"YulVariableDeclaration","src":"3108:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3135:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3122:12:181"},"nodeType":"YulFunctionCall","src":"3122:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3112:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3154:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3164:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3158:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3209:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3218:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3221:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3211:6:181"},"nodeType":"YulFunctionCall","src":"3211:12:181"},"nodeType":"YulExpressionStatement","src":"3211:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3197:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3205:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3194:2:181"},"nodeType":"YulFunctionCall","src":"3194:14:181"},"nodeType":"YulIf","src":"3191:34:181"},{"nodeType":"YulVariableDeclaration","src":"3234:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3248:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"3259:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3244:3:181"},"nodeType":"YulFunctionCall","src":"3244:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"3238:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3314:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3323:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3326:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3316:6:181"},"nodeType":"YulFunctionCall","src":"3316:12:181"},"nodeType":"YulExpressionStatement","src":"3316:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3293:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3297:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3289:3:181"},"nodeType":"YulFunctionCall","src":"3289:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3304:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3285:3:181"},"nodeType":"YulFunctionCall","src":"3285:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3278:6:181"},"nodeType":"YulFunctionCall","src":"3278:35:181"},"nodeType":"YulIf","src":"3275:55:181"},{"nodeType":"YulVariableDeclaration","src":"3339:30:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3366:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3353:12:181"},"nodeType":"YulFunctionCall","src":"3353:16:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3343:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3396:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3405:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3408:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3398:6:181"},"nodeType":"YulFunctionCall","src":"3398:12:181"},"nodeType":"YulExpressionStatement","src":"3398:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3384:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3392:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3381:2:181"},"nodeType":"YulFunctionCall","src":"3381:14:181"},"nodeType":"YulIf","src":"3378:34:181"},{"body":{"nodeType":"YulBlock","src":"3472:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3481:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3484:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3474:6:181"},"nodeType":"YulFunctionCall","src":"3474:12:181"},"nodeType":"YulExpressionStatement","src":"3474:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3435:2:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3443:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"3446:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3439:3:181"},"nodeType":"YulFunctionCall","src":"3439:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3431:3:181"},"nodeType":"YulFunctionCall","src":"3431:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3456:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3427:3:181"},"nodeType":"YulFunctionCall","src":"3427:34:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3463:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3424:2:181"},"nodeType":"YulFunctionCall","src":"3424:47:181"},"nodeType":"YulIf","src":"3421:67:181"},{"nodeType":"YulAssignment","src":"3497:23:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3511:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3515:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3507:3:181"},"nodeType":"YulFunctionCall","src":"3507:13:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3497:6:181"}]},{"nodeType":"YulAssignment","src":"3529:16:181","value":{"name":"length","nodeType":"YulIdentifier","src":"3539:6:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3529:6:181"}]},{"nodeType":"YulAssignment","src":"3554:44:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3581:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3592:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3577:3:181"},"nodeType":"YulFunctionCall","src":"3577:20:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3564:12:181"},"nodeType":"YulFunctionCall","src":"3564:34:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3554:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3607:30:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3621:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3632:4:181","type":"","value":"1088"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3617:3:181"},"nodeType":"YulFunctionCall","src":"3617:20:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"3611:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3665:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3674:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3677:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3667:6:181"},"nodeType":"YulFunctionCall","src":"3667:12:181"},"nodeType":"YulExpressionStatement","src":"3667:12:181"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3652:2:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3656:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3649:2:181"},"nodeType":"YulFunctionCall","src":"3649:15:181"},"nodeType":"YulIf","src":"3646:35:181"},{"nodeType":"YulAssignment","src":"3690:28:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3704:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3715:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3700:3:181"},"nodeType":"YulFunctionCall","src":"3700:18:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3690:6:181"}]},{"nodeType":"YulAssignment","src":"3727:26:181","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3750:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3737:12:181"},"nodeType":"YulFunctionCall","src":"3737:16:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3727:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2969:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2980:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2992:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3000:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3008:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3016:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3024:6:181","type":""}],"src":"2827:932:181"},{"body":{"nodeType":"YulBlock","src":"3813:124:181","statements":[{"nodeType":"YulAssignment","src":"3823:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3845:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3832:12:181"},"nodeType":"YulFunctionCall","src":"3832:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3823:5:181"}]},{"body":{"nodeType":"YulBlock","src":"3915:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3924:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3927:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3917:6:181"},"nodeType":"YulFunctionCall","src":"3917:12:181"},"nodeType":"YulExpressionStatement","src":"3917:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3874:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3885:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3900:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3905:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3896:3:181"},"nodeType":"YulFunctionCall","src":"3896:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3909:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3892:3:181"},"nodeType":"YulFunctionCall","src":"3892:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3881:3:181"},"nodeType":"YulFunctionCall","src":"3881:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3871:2:181"},"nodeType":"YulFunctionCall","src":"3871:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3864:6:181"},"nodeType":"YulFunctionCall","src":"3864:50:181"},"nodeType":"YulIf","src":"3861:70:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3792:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3803:5:181","type":""}],"src":"3764:173:181"},{"body":{"nodeType":"YulBlock","src":"4012:116:181","statements":[{"body":{"nodeType":"YulBlock","src":"4058:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4067:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4070:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4060:6:181"},"nodeType":"YulFunctionCall","src":"4060:12:181"},"nodeType":"YulExpressionStatement","src":"4060:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4033:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"4042:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4029:3:181"},"nodeType":"YulFunctionCall","src":"4029:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"4054:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4025:3:181"},"nodeType":"YulFunctionCall","src":"4025:32:181"},"nodeType":"YulIf","src":"4022:52:181"},{"nodeType":"YulAssignment","src":"4083:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4112:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"4093:18:181"},"nodeType":"YulFunctionCall","src":"4093:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4083:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3978:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3989:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4001:6:181","type":""}],"src":"3942:186:181"},{"body":{"nodeType":"YulBlock","src":"4234:76:181","statements":[{"nodeType":"YulAssignment","src":"4244:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4256:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4267:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4252:3:181"},"nodeType":"YulFunctionCall","src":"4252:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4244:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4286:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"4297:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4279:6:181"},"nodeType":"YulFunctionCall","src":"4279:25:181"},"nodeType":"YulExpressionStatement","src":"4279:25:181"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4203:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4214:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4225:4:181","type":""}],"src":"4133:177:181"},{"body":{"nodeType":"YulBlock","src":"4438:610:181","statements":[{"body":{"nodeType":"YulBlock","src":"4484:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4493:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4496:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4486:6:181"},"nodeType":"YulFunctionCall","src":"4486:12:181"},"nodeType":"YulExpressionStatement","src":"4486:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4459:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"4468:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4455:3:181"},"nodeType":"YulFunctionCall","src":"4455:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"4480:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4451:3:181"},"nodeType":"YulFunctionCall","src":"4451:32:181"},"nodeType":"YulIf","src":"4448:52:181"},{"nodeType":"YulAssignment","src":"4509:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4532:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4519:12:181"},"nodeType":"YulFunctionCall","src":"4519:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4509:6:181"}]},{"nodeType":"YulAssignment","src":"4551:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4584:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4595:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4580:3:181"},"nodeType":"YulFunctionCall","src":"4580:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"4561:18:181"},"nodeType":"YulFunctionCall","src":"4561:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4551:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"4608:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4639:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4650:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4635:3:181"},"nodeType":"YulFunctionCall","src":"4635:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4622:12:181"},"nodeType":"YulFunctionCall","src":"4622:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"4612:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4663:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4673:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4667:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4718:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4727:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4730:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4720:6:181"},"nodeType":"YulFunctionCall","src":"4720:12:181"},"nodeType":"YulExpressionStatement","src":"4720:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4706:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4714:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4703:2:181"},"nodeType":"YulFunctionCall","src":"4703:14:181"},"nodeType":"YulIf","src":"4700:34:181"},{"nodeType":"YulVariableDeclaration","src":"4743:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4757:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"4768:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4753:3:181"},"nodeType":"YulFunctionCall","src":"4753:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"4747:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4823:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4832:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4835:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4825:6:181"},"nodeType":"YulFunctionCall","src":"4825:12:181"},"nodeType":"YulExpressionStatement","src":"4825:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4802:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"4806:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4798:3:181"},"nodeType":"YulFunctionCall","src":"4798:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4813:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4794:3:181"},"nodeType":"YulFunctionCall","src":"4794:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4787:6:181"},"nodeType":"YulFunctionCall","src":"4787:35:181"},"nodeType":"YulIf","src":"4784:55:181"},{"nodeType":"YulVariableDeclaration","src":"4848:30:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4875:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4862:12:181"},"nodeType":"YulFunctionCall","src":"4862:16:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"4852:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4905:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4914:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4917:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4907:6:181"},"nodeType":"YulFunctionCall","src":"4907:12:181"},"nodeType":"YulExpressionStatement","src":"4907:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4893:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4901:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4890:2:181"},"nodeType":"YulFunctionCall","src":"4890:14:181"},"nodeType":"YulIf","src":"4887:34:181"},{"body":{"nodeType":"YulBlock","src":"4971:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4980:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4983:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4973:6:181"},"nodeType":"YulFunctionCall","src":"4973:12:181"},"nodeType":"YulExpressionStatement","src":"4973:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4944:2:181"},{"name":"length","nodeType":"YulIdentifier","src":"4948:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4940:3:181"},"nodeType":"YulFunctionCall","src":"4940:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"4957:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4936:3:181"},"nodeType":"YulFunctionCall","src":"4936:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4962:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4933:2:181"},"nodeType":"YulFunctionCall","src":"4933:37:181"},"nodeType":"YulIf","src":"4930:57:181"},{"nodeType":"YulAssignment","src":"4996:21:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5010:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"5014:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5006:3:181"},"nodeType":"YulFunctionCall","src":"5006:11:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4996:6:181"}]},{"nodeType":"YulAssignment","src":"5026:16:181","value":{"name":"length","nodeType":"YulIdentifier","src":"5036:6:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5026:6:181"}]}]},"name":"abi_decode_tuple_t_uint256t_addresst_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4380:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4391:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4403:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4411:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4419:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4427:6:181","type":""}],"src":"4315:733:181"},{"body":{"nodeType":"YulBlock","src":"5171:102:181","statements":[{"nodeType":"YulAssignment","src":"5181:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5193:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5204:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5189:3:181"},"nodeType":"YulFunctionCall","src":"5189:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5181:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5223:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5238:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5254:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5259:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5250:3:181"},"nodeType":"YulFunctionCall","src":"5250:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5263:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5246:3:181"},"nodeType":"YulFunctionCall","src":"5246:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5234:3:181"},"nodeType":"YulFunctionCall","src":"5234:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5216:6:181"},"nodeType":"YulFunctionCall","src":"5216:51:181"},"nodeType":"YulExpressionStatement","src":"5216:51:181"}]},"name":"abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5140:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5151:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5162:4:181","type":""}],"src":"5053:220:181"},{"body":{"nodeType":"YulBlock","src":"5406:102:181","statements":[{"nodeType":"YulAssignment","src":"5416:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5428:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5439:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5424:3:181"},"nodeType":"YulFunctionCall","src":"5424:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5416:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5458:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5473:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5489:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5494:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5485:3:181"},"nodeType":"YulFunctionCall","src":"5485:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5498:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5481:3:181"},"nodeType":"YulFunctionCall","src":"5481:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5469:3:181"},"nodeType":"YulFunctionCall","src":"5469:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5451:6:181"},"nodeType":"YulFunctionCall","src":"5451:51:181"},"nodeType":"YulExpressionStatement","src":"5451:51:181"}]},"name":"abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5375:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5386:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5397:4:181","type":""}],"src":"5278:230:181"},{"body":{"nodeType":"YulBlock","src":"5638:102:181","statements":[{"nodeType":"YulAssignment","src":"5648:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5660:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5671:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5656:3:181"},"nodeType":"YulFunctionCall","src":"5656:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5648:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5690:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5705:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5721:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"5726:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5717:3:181"},"nodeType":"YulFunctionCall","src":"5717:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"5730:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5713:3:181"},"nodeType":"YulFunctionCall","src":"5713:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5701:3:181"},"nodeType":"YulFunctionCall","src":"5701:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5683:6:181"},"nodeType":"YulFunctionCall","src":"5683:51:181"},"nodeType":"YulExpressionStatement","src":"5683:51:181"}]},"name":"abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5607:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5618:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5629:4:181","type":""}],"src":"5513:227:181"},{"body":{"nodeType":"YulBlock","src":"5793:115:181","statements":[{"nodeType":"YulAssignment","src":"5803:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5825:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5812:12:181"},"nodeType":"YulFunctionCall","src":"5812:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"5803:5:181"}]},{"body":{"nodeType":"YulBlock","src":"5886:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5895:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5898:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5888:6:181"},"nodeType":"YulFunctionCall","src":"5888:12:181"},"nodeType":"YulExpressionStatement","src":"5888:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5854:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5865:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5872:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5861:3:181"},"nodeType":"YulFunctionCall","src":"5861:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5851:2:181"},"nodeType":"YulFunctionCall","src":"5851:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5844:6:181"},"nodeType":"YulFunctionCall","src":"5844:41:181"},"nodeType":"YulIf","src":"5841:61:181"}]},"name":"abi_decode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"5772:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"5783:5:181","type":""}],"src":"5745:163:181"},{"body":{"nodeType":"YulBlock","src":"5982:115:181","statements":[{"body":{"nodeType":"YulBlock","src":"6028:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6037:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6040:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6030:6:181"},"nodeType":"YulFunctionCall","src":"6030:12:181"},"nodeType":"YulExpressionStatement","src":"6030:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6003:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6012:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5999:3:181"},"nodeType":"YulFunctionCall","src":"5999:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"6024:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5995:3:181"},"nodeType":"YulFunctionCall","src":"5995:32:181"},"nodeType":"YulIf","src":"5992:52:181"},{"nodeType":"YulAssignment","src":"6053:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6081:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"6063:17:181"},"nodeType":"YulFunctionCall","src":"6063:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6053:6:181"}]}]},"name":"abi_decode_tuple_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5948:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5959:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5971:6:181","type":""}],"src":"5913:184:181"},{"body":{"nodeType":"YulBlock","src":"6214:348:181","statements":[{"body":{"nodeType":"YulBlock","src":"6260:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6269:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6272:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6262:6:181"},"nodeType":"YulFunctionCall","src":"6262:12:181"},"nodeType":"YulExpressionStatement","src":"6262:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6235:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6244:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6231:3:181"},"nodeType":"YulFunctionCall","src":"6231:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"6256:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6227:3:181"},"nodeType":"YulFunctionCall","src":"6227:32:181"},"nodeType":"YulIf","src":"6224:52:181"},{"nodeType":"YulAssignment","src":"6285:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6313:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"6295:17:181"},"nodeType":"YulFunctionCall","src":"6295:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6285:6:181"}]},{"nodeType":"YulAssignment","src":"6332:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6359:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6370:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6355:3:181"},"nodeType":"YulFunctionCall","src":"6355:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6342:12:181"},"nodeType":"YulFunctionCall","src":"6342:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6332:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"6383:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6414:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6425:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6410:3:181"},"nodeType":"YulFunctionCall","src":"6410:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6397:12:181"},"nodeType":"YulFunctionCall","src":"6397:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"6387:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6472:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6481:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6484:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6474:6:181"},"nodeType":"YulFunctionCall","src":"6474:12:181"},"nodeType":"YulExpressionStatement","src":"6474:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6444:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6452:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6441:2:181"},"nodeType":"YulFunctionCall","src":"6441:30:181"},"nodeType":"YulIf","src":"6438:50:181"},{"nodeType":"YulAssignment","src":"6497:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6528:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"6539:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6524:3:181"},"nodeType":"YulFunctionCall","src":"6524:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6548:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"6507:16:181"},"nodeType":"YulFunctionCall","src":"6507:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6497:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6164:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6175:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6187:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6195:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6203:6:181","type":""}],"src":"6102:460:181"},{"body":{"nodeType":"YulBlock","src":"6633:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"6643:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6652:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"6647:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6712:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6737:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"6742:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6733:3:181"},"nodeType":"YulFunctionCall","src":"6733:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"6756:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"6761:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6752:3:181"},"nodeType":"YulFunctionCall","src":"6752:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6746:5:181"},"nodeType":"YulFunctionCall","src":"6746:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6726:6:181"},"nodeType":"YulFunctionCall","src":"6726:39:181"},"nodeType":"YulExpressionStatement","src":"6726:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6673:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"6676:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6670:2:181"},"nodeType":"YulFunctionCall","src":"6670:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6684:19:181","statements":[{"nodeType":"YulAssignment","src":"6686:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6695:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"6698:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6691:3:181"},"nodeType":"YulFunctionCall","src":"6691:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"6686:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"6666:3:181","statements":[]},"src":"6662:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"6795:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"6800:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6791:3:181"},"nodeType":"YulFunctionCall","src":"6791:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"6809:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6784:6:181"},"nodeType":"YulFunctionCall","src":"6784:27:181"},"nodeType":"YulExpressionStatement","src":"6784:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"6611:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"6616:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"6621:6:181","type":""}],"src":"6567:250:181"},{"body":{"nodeType":"YulBlock","src":"6871:221:181","statements":[{"nodeType":"YulVariableDeclaration","src":"6881:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6901:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6895:5:181"},"nodeType":"YulFunctionCall","src":"6895:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"6885:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6923:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"6928:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6916:6:181"},"nodeType":"YulFunctionCall","src":"6916:19:181"},"nodeType":"YulExpressionStatement","src":"6916:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6983:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"6990:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6979:3:181"},"nodeType":"YulFunctionCall","src":"6979:16:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7001:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"7006:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6997:3:181"},"nodeType":"YulFunctionCall","src":"6997:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"7013:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"6944:34:181"},"nodeType":"YulFunctionCall","src":"6944:76:181"},"nodeType":"YulExpressionStatement","src":"6944:76:181"},{"nodeType":"YulAssignment","src":"7029:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7044:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"7057:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"7065:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7053:3:181"},"nodeType":"YulFunctionCall","src":"7053:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7074:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7070:3:181"},"nodeType":"YulFunctionCall","src":"7070:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7049:3:181"},"nodeType":"YulFunctionCall","src":"7049:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7040:3:181"},"nodeType":"YulFunctionCall","src":"7040:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"7081:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7036:3:181"},"nodeType":"YulFunctionCall","src":"7036:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"7029:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"6848:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"6855:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"6863:3:181","type":""}],"src":"6822:270:181"},{"body":{"nodeType":"YulBlock","src":"7244:141:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7261:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"7272:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7254:6:181"},"nodeType":"YulFunctionCall","src":"7254:25:181"},"nodeType":"YulExpressionStatement","src":"7254:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7299:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7310:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7295:3:181"},"nodeType":"YulFunctionCall","src":"7295:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7315:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7288:6:181"},"nodeType":"YulFunctionCall","src":"7288:30:181"},"nodeType":"YulExpressionStatement","src":"7288:30:181"},{"nodeType":"YulAssignment","src":"7327:52:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"7352:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7364:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7375:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7360:3:181"},"nodeType":"YulFunctionCall","src":"7360:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"7335:16:181"},"nodeType":"YulFunctionCall","src":"7335:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7327:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7205:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7216:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7224:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7235:4:181","type":""}],"src":"7097:288:181"},{"body":{"nodeType":"YulBlock","src":"7564:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7581:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7592:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7574:6:181"},"nodeType":"YulFunctionCall","src":"7574:21:181"},"nodeType":"YulExpressionStatement","src":"7574:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7615:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7626:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7611:3:181"},"nodeType":"YulFunctionCall","src":"7611:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7631:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7604:6:181"},"nodeType":"YulFunctionCall","src":"7604:30:181"},"nodeType":"YulExpressionStatement","src":"7604:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7654:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7665:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7650:3:181"},"nodeType":"YulFunctionCall","src":"7650:18:181"},{"hexValue":"2164656c6179426c6f636b73","kind":"string","nodeType":"YulLiteral","src":"7670:14:181","type":"","value":"!delayBlocks"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7643:6:181"},"nodeType":"YulFunctionCall","src":"7643:42:181"},"nodeType":"YulExpressionStatement","src":"7643:42:181"},{"nodeType":"YulAssignment","src":"7694:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7706:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7717:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7702:3:181"},"nodeType":"YulFunctionCall","src":"7702:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7694:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7541:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7555:4:181","type":""}],"src":"7390:336:181"},{"body":{"nodeType":"YulBlock","src":"7763:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7780:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7787:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"7792:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7783:3:181"},"nodeType":"YulFunctionCall","src":"7783:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7773:6:181"},"nodeType":"YulFunctionCall","src":"7773:31:181"},"nodeType":"YulExpressionStatement","src":"7773:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7820:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7823:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7813:6:181"},"nodeType":"YulFunctionCall","src":"7813:15:181"},"nodeType":"YulExpressionStatement","src":"7813:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7844:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7847:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7837:6:181"},"nodeType":"YulFunctionCall","src":"7837:15:181"},"nodeType":"YulExpressionStatement","src":"7837:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"7731:127:181"},{"body":{"nodeType":"YulBlock","src":"7911:77:181","statements":[{"nodeType":"YulAssignment","src":"7921:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7932:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"7935:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7928:3:181"},"nodeType":"YulFunctionCall","src":"7928:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"7921:3:181"}]},{"body":{"nodeType":"YulBlock","src":"7960:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7962:16:181"},"nodeType":"YulFunctionCall","src":"7962:18:181"},"nodeType":"YulExpressionStatement","src":"7962:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7952:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"7955:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7949:2:181"},"nodeType":"YulFunctionCall","src":"7949:10:181"},"nodeType":"YulIf","src":"7946:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"7894:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"7897:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"7903:3:181","type":""}],"src":"7863:125:181"},{"body":{"nodeType":"YulBlock","src":"8074:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"8120:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8129:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8132:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8122:6:181"},"nodeType":"YulFunctionCall","src":"8122:12:181"},"nodeType":"YulExpressionStatement","src":"8122:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8095:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8104:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8091:3:181"},"nodeType":"YulFunctionCall","src":"8091:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"8116:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8087:3:181"},"nodeType":"YulFunctionCall","src":"8087:32:181"},"nodeType":"YulIf","src":"8084:52:181"},{"nodeType":"YulAssignment","src":"8145:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8161:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8155:5:181"},"nodeType":"YulFunctionCall","src":"8155:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8145:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8040:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8051:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8063:6:181","type":""}],"src":"7993:184:181"},{"body":{"nodeType":"YulBlock","src":"8356:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8373:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8384:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8366:6:181"},"nodeType":"YulFunctionCall","src":"8366:21:181"},"nodeType":"YulExpressionStatement","src":"8366:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8407:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8418:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8403:3:181"},"nodeType":"YulFunctionCall","src":"8403:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8423:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8396:6:181"},"nodeType":"YulFunctionCall","src":"8396:30:181"},"nodeType":"YulExpressionStatement","src":"8396:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8446:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8457:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8442:3:181"},"nodeType":"YulFunctionCall","src":"8442:18:181"},{"hexValue":"726f6f7420616c72656164792073656e74","kind":"string","nodeType":"YulLiteral","src":"8462:19:181","type":"","value":"root already sent"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8435:6:181"},"nodeType":"YulFunctionCall","src":"8435:47:181"},"nodeType":"YulExpressionStatement","src":"8435:47:181"},{"nodeType":"YulAssignment","src":"8491:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8503:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8514:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8499:3:181"},"nodeType":"YulFunctionCall","src":"8499:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8491:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8333:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8347:4:181","type":""}],"src":"8182:341:181"},{"body":{"nodeType":"YulBlock","src":"8647:63:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8664:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"8669:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8657:6:181"},"nodeType":"YulFunctionCall","src":"8657:19:181"},"nodeType":"YulExpressionStatement","src":"8657:19:181"},{"nodeType":"YulAssignment","src":"8685:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8696:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"8701:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8692:3:181"},"nodeType":"YulFunctionCall","src":"8692:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"8685:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"8623:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8628:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"8639:3:181","type":""}],"src":"8528:182:181"},{"body":{"nodeType":"YulBlock","src":"8908:281:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8925:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8936:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8918:6:181"},"nodeType":"YulFunctionCall","src":"8918:21:181"},"nodeType":"YulExpressionStatement","src":"8918:21:181"},{"nodeType":"YulVariableDeclaration","src":"8948:58:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8979:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8991:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9002:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8987:3:181"},"nodeType":"YulFunctionCall","src":"8987:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"8962:16:181"},"nodeType":"YulFunctionCall","src":"8962:44:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"8952:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9026:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9037:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9022:3:181"},"nodeType":"YulFunctionCall","src":"9022:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"9046:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"9054:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9042:3:181"},"nodeType":"YulFunctionCall","src":"9042:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9015:6:181"},"nodeType":"YulFunctionCall","src":"9015:50:181"},"nodeType":"YulExpressionStatement","src":"9015:50:181"},{"nodeType":"YulAssignment","src":"9074:40:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9099:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"9107:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"9082:16:181"},"nodeType":"YulFunctionCall","src":"9082:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9074:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9134:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9145:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9130:3:181"},"nodeType":"YulFunctionCall","src":"9130:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"9154:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9170:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"9175:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9166:3:181"},"nodeType":"YulFunctionCall","src":"9166:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"9179:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9162:3:181"},"nodeType":"YulFunctionCall","src":"9162:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9150:3:181"},"nodeType":"YulFunctionCall","src":"9150:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9123:6:181"},"nodeType":"YulFunctionCall","src":"9123:60:181"},"nodeType":"YulExpressionStatement","src":"9123:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8861:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8872:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8880:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8888:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8899:4:181","type":""}],"src":"8715:474:181"},{"body":{"nodeType":"YulBlock","src":"9368:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9385:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9396:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9378:6:181"},"nodeType":"YulFunctionCall","src":"9378:21:181"},"nodeType":"YulExpressionStatement","src":"9378:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9419:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9430:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9415:3:181"},"nodeType":"YulFunctionCall","src":"9415:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9435:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9408:6:181"},"nodeType":"YulFunctionCall","src":"9408:29:181"},"nodeType":"YulExpressionStatement","src":"9408:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9457:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9468:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9453:3:181"},"nodeType":"YulFunctionCall","src":"9453:18:181"},{"hexValue":"21414d42","kind":"string","nodeType":"YulLiteral","src":"9473:6:181","type":"","value":"!AMB"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9446:6:181"},"nodeType":"YulFunctionCall","src":"9446:34:181"},"nodeType":"YulExpressionStatement","src":"9446:34:181"},{"nodeType":"YulAssignment","src":"9489:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9501:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9512:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9497:3:181"},"nodeType":"YulFunctionCall","src":"9497:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9489:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9345:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9359:4:181","type":""}],"src":"9194:327:181"},{"body":{"nodeType":"YulBlock","src":"9673:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9690:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9701:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9683:6:181"},"nodeType":"YulFunctionCall","src":"9683:21:181"},"nodeType":"YulExpressionStatement","src":"9683:21:181"},{"nodeType":"YulAssignment","src":"9713:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9738:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9750:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9761:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9746:3:181"},"nodeType":"YulFunctionCall","src":"9746:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"9721:16:181"},"nodeType":"YulFunctionCall","src":"9721:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9713:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9785:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9796:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9781:3:181"},"nodeType":"YulFunctionCall","src":"9781:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9805:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9821:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"9826:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9817:3:181"},"nodeType":"YulFunctionCall","src":"9817:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"9830:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9813:3:181"},"nodeType":"YulFunctionCall","src":"9813:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9801:3:181"},"nodeType":"YulFunctionCall","src":"9801:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9774:6:181"},"nodeType":"YulFunctionCall","src":"9774:60:181"},"nodeType":"YulExpressionStatement","src":"9774:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9634:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9645:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9653:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9664:4:181","type":""}],"src":"9526:314:181"},{"body":{"nodeType":"YulBlock","src":"10019:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10036:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10047:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10029:6:181"},"nodeType":"YulFunctionCall","src":"10029:21:181"},"nodeType":"YulExpressionStatement","src":"10029:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10070:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10081:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10066:3:181"},"nodeType":"YulFunctionCall","src":"10066:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10086:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10059:6:181"},"nodeType":"YulFunctionCall","src":"10059:29:181"},"nodeType":"YulExpressionStatement","src":"10059:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10108:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10119:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10104:3:181"},"nodeType":"YulFunctionCall","src":"10104:18:181"},{"hexValue":"2170726f6f6673","kind":"string","nodeType":"YulLiteral","src":"10124:9:181","type":"","value":"!proofs"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10097:6:181"},"nodeType":"YulFunctionCall","src":"10097:37:181"},"nodeType":"YulExpressionStatement","src":"10097:37:181"},{"nodeType":"YulAssignment","src":"10143:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10155:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10166:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10151:3:181"},"nodeType":"YulFunctionCall","src":"10151:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10143:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9996:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10010:4:181","type":""}],"src":"9845:330:181"},{"body":{"nodeType":"YulBlock","src":"10212:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10229:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10236:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"10241:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10232:3:181"},"nodeType":"YulFunctionCall","src":"10232:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10222:6:181"},"nodeType":"YulFunctionCall","src":"10222:31:181"},"nodeType":"YulExpressionStatement","src":"10222:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10269:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10272:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10262:6:181"},"nodeType":"YulFunctionCall","src":"10262:15:181"},"nodeType":"YulExpressionStatement","src":"10262:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10293:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10296:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10286:6:181"},"nodeType":"YulFunctionCall","src":"10286:15:181"},"nodeType":"YulExpressionStatement","src":"10286:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"10180:127:181"},{"body":{"nodeType":"YulBlock","src":"10413:224:181","statements":[{"nodeType":"YulVariableDeclaration","src":"10423:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"10462:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10449:12:181"},"nodeType":"YulFunctionCall","src":"10449:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"10427:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10565:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10574:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10577:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10567:6:181"},"nodeType":"YulFunctionCall","src":"10567:12:181"},"nodeType":"YulExpressionStatement","src":"10567:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10497:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"10525:12:181"},"nodeType":"YulFunctionCall","src":"10525:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"10541:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10521:3:181"},"nodeType":"YulFunctionCall","src":"10521:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10556:4:181","type":"","value":"1086"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10552:3:181"},"nodeType":"YulFunctionCall","src":"10552:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10517:3:181"},"nodeType":"YulFunctionCall","src":"10517:45:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10493:3:181"},"nodeType":"YulFunctionCall","src":"10493:70:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10486:6:181"},"nodeType":"YulFunctionCall","src":"10486:78:181"},"nodeType":"YulIf","src":"10483:98:181"},{"nodeType":"YulAssignment","src":"10590:41:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"10602:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10612:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10598:3:181"},"nodeType":"YulFunctionCall","src":"10598:33:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"10590:4:181"}]}]},"name":"access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"10378:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"10388:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"10404:4:181","type":""}],"src":"10312:325:181"},{"body":{"nodeType":"YulBlock","src":"10736:427:181","statements":[{"nodeType":"YulVariableDeclaration","src":"10746:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"10785:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10772:12:181"},"nodeType":"YulFunctionCall","src":"10772:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"10750:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10886:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10895:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10898:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10888:6:181"},"nodeType":"YulFunctionCall","src":"10888:12:181"},"nodeType":"YulExpressionStatement","src":"10888:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10820:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"10848:12:181"},"nodeType":"YulFunctionCall","src":"10848:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"10864:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10844:3:181"},"nodeType":"YulFunctionCall","src":"10844:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10879:2:181","type":"","value":"30"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10875:3:181"},"nodeType":"YulFunctionCall","src":"10875:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10840:3:181"},"nodeType":"YulFunctionCall","src":"10840:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10816:3:181"},"nodeType":"YulFunctionCall","src":"10816:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10809:6:181"},"nodeType":"YulFunctionCall","src":"10809:76:181"},"nodeType":"YulIf","src":"10806:96:181"},{"nodeType":"YulVariableDeclaration","src":"10911:47:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"10929:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10939:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10925:3:181"},"nodeType":"YulFunctionCall","src":"10925:33:181"},"variables":[{"name":"addr_1","nodeType":"YulTypedName","src":"10915:6:181","type":""}]},{"nodeType":"YulAssignment","src":"10967:30:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"10990:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10977:12:181"},"nodeType":"YulFunctionCall","src":"10977:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"10967:6:181"}]},{"body":{"nodeType":"YulBlock","src":"11040:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11049:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11052:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11042:6:181"},"nodeType":"YulFunctionCall","src":"11042:12:181"},"nodeType":"YulExpressionStatement","src":"11042:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"11012:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11020:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11009:2:181"},"nodeType":"YulFunctionCall","src":"11009:30:181"},"nodeType":"YulIf","src":"11006:50:181"},{"nodeType":"YulAssignment","src":"11065:25:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"11077:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11085:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11073:3:181"},"nodeType":"YulFunctionCall","src":"11073:17:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"11065:4:181"}]},{"body":{"nodeType":"YulBlock","src":"11141:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11150:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11153:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11143:6:181"},"nodeType":"YulFunctionCall","src":"11143:12:181"},"nodeType":"YulExpressionStatement","src":"11143:12:181"}]},"condition":{"arguments":[{"name":"addr","nodeType":"YulIdentifier","src":"11106:4:181"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"11116:12:181"},"nodeType":"YulFunctionCall","src":"11116:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"11132:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11112:3:181"},"nodeType":"YulFunctionCall","src":"11112:27:181"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"11102:3:181"},"nodeType":"YulFunctionCall","src":"11102:38:181"},"nodeType":"YulIf","src":"11099:58:181"}]},"name":"access_calldata_tail_t_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"10693:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"10703:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"10719:4:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"10725:6:181","type":""}],"src":"10642:521:181"},{"body":{"nodeType":"YulBlock","src":"11315:124:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11338:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"11343:6:181"},{"name":"value1","nodeType":"YulIdentifier","src":"11351:6:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"11325:12:181"},"nodeType":"YulFunctionCall","src":"11325:33:181"},"nodeType":"YulExpressionStatement","src":"11325:33:181"},{"nodeType":"YulVariableDeclaration","src":"11367:26:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11381:3:181"},{"name":"value1","nodeType":"YulIdentifier","src":"11386:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11377:3:181"},"nodeType":"YulFunctionCall","src":"11377:16:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11371:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"11409:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"11413:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11402:6:181"},"nodeType":"YulFunctionCall","src":"11402:13:181"},"nodeType":"YulExpressionStatement","src":"11402:13:181"},{"nodeType":"YulAssignment","src":"11424:9:181","value":{"name":"_1","nodeType":"YulIdentifier","src":"11431:2:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"11424:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"11283:3:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11288:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11296:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"11307:3:181","type":""}],"src":"11168:271:181"},{"body":{"nodeType":"YulBlock","src":"11618:161:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11635:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11646:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11628:6:181"},"nodeType":"YulFunctionCall","src":"11628:21:181"},"nodeType":"YulExpressionStatement","src":"11628:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11669:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11680:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11665:3:181"},"nodeType":"YulFunctionCall","src":"11665:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11685:2:181","type":"","value":"11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11658:6:181"},"nodeType":"YulFunctionCall","src":"11658:30:181"},"nodeType":"YulExpressionStatement","src":"11658:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11708:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11719:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11704:3:181"},"nodeType":"YulFunctionCall","src":"11704:18:181"},{"hexValue":"21736861726564526f6f74","kind":"string","nodeType":"YulLiteral","src":"11724:13:181","type":"","value":"!sharedRoot"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11697:6:181"},"nodeType":"YulFunctionCall","src":"11697:41:181"},"nodeType":"YulExpressionStatement","src":"11697:41:181"},{"nodeType":"YulAssignment","src":"11747:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11759:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11770:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11755:3:181"},"nodeType":"YulFunctionCall","src":"11755:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11747:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11595:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11609:4:181","type":""}],"src":"11444:335:181"},{"body":{"nodeType":"YulBlock","src":"11958:171:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11975:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11986:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11968:6:181"},"nodeType":"YulFunctionCall","src":"11968:21:181"},"nodeType":"YulExpressionStatement","src":"11968:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12009:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12020:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12005:3:181"},"nodeType":"YulFunctionCall","src":"12005:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12025:2:181","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11998:6:181"},"nodeType":"YulFunctionCall","src":"11998:30:181"},"nodeType":"YulExpressionStatement","src":"11998:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12048:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12059:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12044:3:181"},"nodeType":"YulFunctionCall","src":"12044:18:181"},{"hexValue":"616767726567617465526f6f742021657869737473","kind":"string","nodeType":"YulLiteral","src":"12064:23:181","type":"","value":"aggregateRoot !exists"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12037:6:181"},"nodeType":"YulFunctionCall","src":"12037:51:181"},"nodeType":"YulExpressionStatement","src":"12037:51:181"},{"nodeType":"YulAssignment","src":"12097:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12109:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12120:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12105:3:181"},"nodeType":"YulFunctionCall","src":"12105:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12097:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11935:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11949:4:181","type":""}],"src":"11784:345:181"},{"body":{"nodeType":"YulBlock","src":"12212:199:181","statements":[{"body":{"nodeType":"YulBlock","src":"12258:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12267:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12270:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12260:6:181"},"nodeType":"YulFunctionCall","src":"12260:12:181"},"nodeType":"YulExpressionStatement","src":"12260:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12233:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"12242:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12229:3:181"},"nodeType":"YulFunctionCall","src":"12229:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"12254:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12225:3:181"},"nodeType":"YulFunctionCall","src":"12225:32:181"},"nodeType":"YulIf","src":"12222:52:181"},{"nodeType":"YulVariableDeclaration","src":"12283:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12302:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12296:5:181"},"nodeType":"YulFunctionCall","src":"12296:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12287:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"12365:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12374:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12377:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12367:6:181"},"nodeType":"YulFunctionCall","src":"12367:12:181"},"nodeType":"YulExpressionStatement","src":"12367:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12334:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12355:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12348:6:181"},"nodeType":"YulFunctionCall","src":"12348:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12341:6:181"},"nodeType":"YulFunctionCall","src":"12341:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"12331:2:181"},"nodeType":"YulFunctionCall","src":"12331:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12324:6:181"},"nodeType":"YulFunctionCall","src":"12324:40:181"},"nodeType":"YulIf","src":"12321:60:181"},{"nodeType":"YulAssignment","src":"12390:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"12400:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"12390:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12178:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12189:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12201:6:181","type":""}],"src":"12134:277:181"},{"body":{"nodeType":"YulBlock","src":"12590:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12607:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12618:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12600:6:181"},"nodeType":"YulFunctionCall","src":"12600:21:181"},"nodeType":"YulExpressionStatement","src":"12600:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12641:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12652:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12637:3:181"},"nodeType":"YulFunctionCall","src":"12637:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12657:1:181","type":"","value":"8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12630:6:181"},"nodeType":"YulFunctionCall","src":"12630:29:181"},"nodeType":"YulExpressionStatement","src":"12630:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12679:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12690:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12675:3:181"},"nodeType":"YulFunctionCall","src":"12675:18:181"},{"hexValue":"2177617463686572","kind":"string","nodeType":"YulLiteral","src":"12695:10:181","type":"","value":"!watcher"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12668:6:181"},"nodeType":"YulFunctionCall","src":"12668:38:181"},"nodeType":"YulExpressionStatement","src":"12668:38:181"},{"nodeType":"YulAssignment","src":"12715:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12727:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12738:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12723:3:181"},"nodeType":"YulFunctionCall","src":"12723:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12715:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12567:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12581:4:181","type":""}],"src":"12416:331:181"},{"body":{"nodeType":"YulBlock","src":"12926:223:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12943:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12954:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12936:6:181"},"nodeType":"YulFunctionCall","src":"12936:21:181"},"nodeType":"YulExpressionStatement","src":"12936:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12977:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12988:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12973:3:181"},"nodeType":"YulFunctionCall","src":"12973:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12993:2:181","type":"","value":"33"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12966:6:181"},"nodeType":"YulFunctionCall","src":"12966:30:181"},"nodeType":"YulExpressionStatement","src":"12966:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13016:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13027:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13012:3:181"},"nodeType":"YulFunctionCall","src":"13012:18:181"},{"hexValue":"4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e4445","kind":"string","nodeType":"YulLiteral","src":"13032:34:181","type":"","value":"FxBaseChildTunnel: INVALID_SENDE"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13005:6:181"},"nodeType":"YulFunctionCall","src":"13005:62:181"},"nodeType":"YulExpressionStatement","src":"13005:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13087:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13098:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13083:3:181"},"nodeType":"YulFunctionCall","src":"13083:18:181"},{"hexValue":"52","kind":"string","nodeType":"YulLiteral","src":"13103:3:181","type":"","value":"R"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13076:6:181"},"nodeType":"YulFunctionCall","src":"13076:31:181"},"nodeType":"YulExpressionStatement","src":"13076:31:181"},{"nodeType":"YulAssignment","src":"13116:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13128:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13139:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13124:3:181"},"nodeType":"YulFunctionCall","src":"13124:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13116:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0127552a73259d4875e4bb85e64334729d5119ce836ba2001f26ffe4d150b533__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12903:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12917:4:181","type":""}],"src":"12752:397:181"},{"body":{"nodeType":"YulBlock","src":"13203:79:181","statements":[{"nodeType":"YulAssignment","src":"13213:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13225:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"13228:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13221:3:181"},"nodeType":"YulFunctionCall","src":"13221:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"13213:4:181"}]},{"body":{"nodeType":"YulBlock","src":"13254:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13256:16:181"},"nodeType":"YulFunctionCall","src":"13256:18:181"},"nodeType":"YulExpressionStatement","src":"13256:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"13245:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"13251:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13242:2:181"},"nodeType":"YulFunctionCall","src":"13242:11:181"},"nodeType":"YulIf","src":"13239:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"13185:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"13188:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"13194:4:181","type":""}],"src":"13154:128:181"},{"body":{"nodeType":"YulBlock","src":"13461:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13478:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13489:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13471:6:181"},"nodeType":"YulFunctionCall","src":"13471:21:181"},"nodeType":"YulExpressionStatement","src":"13471:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13512:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13523:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13508:3:181"},"nodeType":"YulFunctionCall","src":"13508:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13528:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13501:6:181"},"nodeType":"YulFunctionCall","src":"13501:30:181"},"nodeType":"YulExpressionStatement","src":"13501:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13551:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13562:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13547:3:181"},"nodeType":"YulFunctionCall","src":"13547:18:181"},{"hexValue":"616c72656164792077617463686572206d616e61676572","kind":"string","nodeType":"YulLiteral","src":"13567:25:181","type":"","value":"already watcher manager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13540:6:181"},"nodeType":"YulFunctionCall","src":"13540:53:181"},"nodeType":"YulExpressionStatement","src":"13540:53:181"},{"nodeType":"YulAssignment","src":"13602:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13614:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13625:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13610:3:181"},"nodeType":"YulFunctionCall","src":"13610:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13602:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13438:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13452:4:181","type":""}],"src":"13287:347:181"},{"body":{"nodeType":"YulBlock","src":"13813:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13830:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13841:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13823:6:181"},"nodeType":"YulFunctionCall","src":"13823:21:181"},"nodeType":"YulExpressionStatement","src":"13823:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13864:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13875:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13860:3:181"},"nodeType":"YulFunctionCall","src":"13860:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13880:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13853:6:181"},"nodeType":"YulFunctionCall","src":"13853:30:181"},"nodeType":"YulExpressionStatement","src":"13853:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13903:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13914:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13899:3:181"},"nodeType":"YulFunctionCall","src":"13899:18:181"},{"hexValue":"21616c6c6f776c6973746564","kind":"string","nodeType":"YulLiteral","src":"13919:14:181","type":"","value":"!allowlisted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13892:6:181"},"nodeType":"YulFunctionCall","src":"13892:42:181"},"nodeType":"YulExpressionStatement","src":"13892:42:181"},{"nodeType":"YulAssignment","src":"13943:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13955:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13966:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13951:3:181"},"nodeType":"YulFunctionCall","src":"13951:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13943:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13790:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13804:4:181","type":""}],"src":"13639:336:181"},{"body":{"nodeType":"YulBlock","src":"14026:155:181","statements":[{"nodeType":"YulVariableDeclaration","src":"14036:20:181","value":{"kind":"number","nodeType":"YulLiteral","src":"14046:10:181","type":"","value":"0xffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14040:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"14065:29:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14084:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14091:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14080:3:181"},"nodeType":"YulFunctionCall","src":"14080:14:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"14069:7:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"14122:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14124:16:181"},"nodeType":"YulFunctionCall","src":"14124:18:181"},"nodeType":"YulExpressionStatement","src":"14124:18:181"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"14109:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14118:2:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"14106:2:181"},"nodeType":"YulFunctionCall","src":"14106:15:181"},"nodeType":"YulIf","src":"14103:41:181"},{"nodeType":"YulAssignment","src":"14153:22:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"14164:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"14173:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14160:3:181"},"nodeType":"YulFunctionCall","src":"14160:15:181"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"14153:3:181"}]}]},"name":"increment_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"14008:5:181","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"14018:3:181","type":""}],"src":"13980:201:181"},{"body":{"nodeType":"YulBlock","src":"14284:147:181","statements":[{"body":{"nodeType":"YulBlock","src":"14330:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14339:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14342:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14332:6:181"},"nodeType":"YulFunctionCall","src":"14332:12:181"},"nodeType":"YulExpressionStatement","src":"14332:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14305:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"14314:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14301:3:181"},"nodeType":"YulFunctionCall","src":"14301:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"14326:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14297:3:181"},"nodeType":"YulFunctionCall","src":"14297:32:181"},"nodeType":"YulIf","src":"14294:52:181"},{"nodeType":"YulAssignment","src":"14355:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14371:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14365:5:181"},"nodeType":"YulFunctionCall","src":"14365:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14355:6:181"}]},{"nodeType":"YulAssignment","src":"14390:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14410:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14421:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14406:3:181"},"nodeType":"YulFunctionCall","src":"14406:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14400:5:181"},"nodeType":"YulFunctionCall","src":"14400:25:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"14390:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14242:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14253:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14265:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14273:6:181","type":""}],"src":"14186:245:181"},{"body":{"nodeType":"YulBlock","src":"14639:229:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14656:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"14667:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14649:6:181"},"nodeType":"YulFunctionCall","src":"14649:25:181"},"nodeType":"YulExpressionStatement","src":"14649:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14694:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14705:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14690:3:181"},"nodeType":"YulFunctionCall","src":"14690:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"14710:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14683:6:181"},"nodeType":"YulFunctionCall","src":"14683:34:181"},"nodeType":"YulExpressionStatement","src":"14683:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14737:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14748:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14733:3:181"},"nodeType":"YulFunctionCall","src":"14733:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"14753:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14726:6:181"},"nodeType":"YulFunctionCall","src":"14726:34:181"},"nodeType":"YulExpressionStatement","src":"14726:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14780:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14791:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14776:3:181"},"nodeType":"YulFunctionCall","src":"14776:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14796:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14769:6:181"},"nodeType":"YulFunctionCall","src":"14769:31:181"},"nodeType":"YulExpressionStatement","src":"14769:31:181"},{"nodeType":"YulAssignment","src":"14809:53:181","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"14834:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14846:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14857:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14842:3:181"},"nodeType":"YulFunctionCall","src":"14842:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"14817:16:181"},"nodeType":"YulFunctionCall","src":"14817:45:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14809:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14584:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14595:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14603:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14611:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14619:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14630:4:181","type":""}],"src":"14436:432:181"},{"body":{"nodeType":"YulBlock","src":"15002:175:181","statements":[{"nodeType":"YulAssignment","src":"15012:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15024:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15035:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15020:3:181"},"nodeType":"YulFunctionCall","src":"15020:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15012:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"15047:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15065:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"15070:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"15061:3:181"},"nodeType":"YulFunctionCall","src":"15061:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"15074:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15057:3:181"},"nodeType":"YulFunctionCall","src":"15057:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15051:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15092:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15107:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"15115:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15103:3:181"},"nodeType":"YulFunctionCall","src":"15103:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15085:6:181"},"nodeType":"YulFunctionCall","src":"15085:34:181"},"nodeType":"YulExpressionStatement","src":"15085:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15139:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15150:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15135:3:181"},"nodeType":"YulFunctionCall","src":"15135:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"15159:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"15167:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15155:3:181"},"nodeType":"YulFunctionCall","src":"15155:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15128:6:181"},"nodeType":"YulFunctionCall","src":"15128:43:181"},"nodeType":"YulExpressionStatement","src":"15128:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14963:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14974:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14982:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14993:4:181","type":""}],"src":"14873:304:181"},{"body":{"nodeType":"YulBlock","src":"15356:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15373:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15384:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15366:6:181"},"nodeType":"YulFunctionCall","src":"15366:21:181"},"nodeType":"YulExpressionStatement","src":"15366:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15407:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15418:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15403:3:181"},"nodeType":"YulFunctionCall","src":"15403:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15423:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15396:6:181"},"nodeType":"YulFunctionCall","src":"15396:30:181"},"nodeType":"YulExpressionStatement","src":"15396:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15446:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15457:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15442:3:181"},"nodeType":"YulFunctionCall","src":"15442:18:181"},{"hexValue":"5061757361626c653a20706175736564","kind":"string","nodeType":"YulLiteral","src":"15462:18:181","type":"","value":"Pausable: paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15435:6:181"},"nodeType":"YulFunctionCall","src":"15435:46:181"},"nodeType":"YulExpressionStatement","src":"15435:46:181"},{"nodeType":"YulAssignment","src":"15490:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15502:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15513:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15498:3:181"},"nodeType":"YulFunctionCall","src":"15498:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15490:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15333:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15347:4:181","type":""}],"src":"15182:340:181"},{"body":{"nodeType":"YulBlock","src":"15701:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15718:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15729:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15711:6:181"},"nodeType":"YulFunctionCall","src":"15711:21:181"},"nodeType":"YulExpressionStatement","src":"15711:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15752:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15763:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15748:3:181"},"nodeType":"YulFunctionCall","src":"15748:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15768:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15741:6:181"},"nodeType":"YulFunctionCall","src":"15741:30:181"},"nodeType":"YulExpressionStatement","src":"15741:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15791:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15802:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15787:3:181"},"nodeType":"YulFunctionCall","src":"15787:18:181"},{"hexValue":"2164617461206c656e677468","kind":"string","nodeType":"YulLiteral","src":"15807:14:181","type":"","value":"!data length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15780:6:181"},"nodeType":"YulFunctionCall","src":"15780:42:181"},"nodeType":"YulExpressionStatement","src":"15780:42:181"},{"nodeType":"YulAssignment","src":"15831:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15843:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15854:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15839:3:181"},"nodeType":"YulFunctionCall","src":"15839:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15831:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15678:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15692:4:181","type":""}],"src":"15527:336:181"},{"body":{"nodeType":"YulBlock","src":"16042:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16059:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16070:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16052:6:181"},"nodeType":"YulFunctionCall","src":"16052:21:181"},"nodeType":"YulExpressionStatement","src":"16052:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16093:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16104:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16089:3:181"},"nodeType":"YulFunctionCall","src":"16089:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16109:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16082:6:181"},"nodeType":"YulFunctionCall","src":"16082:30:181"},"nodeType":"YulExpressionStatement","src":"16082:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16132:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16143:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16128:3:181"},"nodeType":"YulFunctionCall","src":"16128:18:181"},{"hexValue":"5061757361626c653a206e6f7420706175736564","kind":"string","nodeType":"YulLiteral","src":"16148:22:181","type":"","value":"Pausable: not paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16121:6:181"},"nodeType":"YulFunctionCall","src":"16121:50:181"},"nodeType":"YulExpressionStatement","src":"16121:50:181"},{"nodeType":"YulAssignment","src":"16180:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16192:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16203:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16188:3:181"},"nodeType":"YulFunctionCall","src":"16188:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16180:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16019:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16033:4:181","type":""}],"src":"15868:344:181"},{"body":{"nodeType":"YulBlock","src":"16391:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16408:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16419:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16401:6:181"},"nodeType":"YulFunctionCall","src":"16401:21:181"},"nodeType":"YulExpressionStatement","src":"16401:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16442:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16453:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16438:3:181"},"nodeType":"YulFunctionCall","src":"16438:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16458:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16431:6:181"},"nodeType":"YulFunctionCall","src":"16431:30:181"},"nodeType":"YulExpressionStatement","src":"16431:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16481:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16492:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16477:3:181"},"nodeType":"YulFunctionCall","src":"16477:18:181"},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","kind":"string","nodeType":"YulLiteral","src":"16497:33:181","type":"","value":"ReentrancyGuard: reentrant call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16470:6:181"},"nodeType":"YulFunctionCall","src":"16470:61:181"},"nodeType":"YulExpressionStatement","src":"16470:61:181"},{"nodeType":"YulAssignment","src":"16540:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16552:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16563:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16548:3:181"},"nodeType":"YulFunctionCall","src":"16548:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16540:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16368:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16382:4:181","type":""}],"src":"16217:355:181"},{"body":{"nodeType":"YulBlock","src":"16751:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16768:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16779:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16761:6:181"},"nodeType":"YulFunctionCall","src":"16761:21:181"},"nodeType":"YulExpressionStatement","src":"16761:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16802:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16813:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16798:3:181"},"nodeType":"YulFunctionCall","src":"16798:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16818:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16791:6:181"},"nodeType":"YulFunctionCall","src":"16791:30:181"},"nodeType":"YulExpressionStatement","src":"16791:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16841:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16852:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16837:3:181"},"nodeType":"YulFunctionCall","src":"16837:18:181"},{"hexValue":"214d6573736167655374617475732e4e6f6e65","kind":"string","nodeType":"YulLiteral","src":"16857:21:181","type":"","value":"!MessageStatus.None"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16830:6:181"},"nodeType":"YulFunctionCall","src":"16830:49:181"},"nodeType":"YulExpressionStatement","src":"16830:49:181"},{"nodeType":"YulAssignment","src":"16888:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16900:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16911:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16896:3:181"},"nodeType":"YulFunctionCall","src":"16896:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16888:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16728:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16742:4:181","type":""}],"src":"16577:343:181"},{"body":{"nodeType":"YulBlock","src":"17099:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17116:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17127:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17109:6:181"},"nodeType":"YulFunctionCall","src":"17109:21:181"},"nodeType":"YulExpressionStatement","src":"17109:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17150:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17161:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17146:3:181"},"nodeType":"YulFunctionCall","src":"17146:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17166:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17139:6:181"},"nodeType":"YulFunctionCall","src":"17139:30:181"},"nodeType":"YulExpressionStatement","src":"17139:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17189:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17200:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17185:3:181"},"nodeType":"YulFunctionCall","src":"17185:18:181"},{"hexValue":"696e76616c696420696e626f756e64526f6f74","kind":"string","nodeType":"YulLiteral","src":"17205:21:181","type":"","value":"invalid inboundRoot"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17178:6:181"},"nodeType":"YulFunctionCall","src":"17178:49:181"},"nodeType":"YulExpressionStatement","src":"17178:49:181"},{"nodeType":"YulAssignment","src":"17236:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17248:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17259:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17244:3:181"},"nodeType":"YulFunctionCall","src":"17244:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17236:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17076:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17090:4:181","type":""}],"src":"16925:343:181"},{"body":{"nodeType":"YulBlock","src":"17447:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17464:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17475:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17457:6:181"},"nodeType":"YulFunctionCall","src":"17457:21:181"},"nodeType":"YulExpressionStatement","src":"17457:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17498:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17509:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17494:3:181"},"nodeType":"YulFunctionCall","src":"17494:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17514:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17487:6:181"},"nodeType":"YulFunctionCall","src":"17487:30:181"},"nodeType":"YulExpressionStatement","src":"17487:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17537:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17548:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17533:3:181"},"nodeType":"YulFunctionCall","src":"17533:18:181"},{"hexValue":"2164657374696e6174696f6e","kind":"string","nodeType":"YulLiteral","src":"17553:14:181","type":"","value":"!destination"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17526:6:181"},"nodeType":"YulFunctionCall","src":"17526:42:181"},"nodeType":"YulExpressionStatement","src":"17526:42:181"},{"nodeType":"YulAssignment","src":"17577:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17589:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17600:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17585:3:181"},"nodeType":"YulFunctionCall","src":"17585:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17577:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17424:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17438:4:181","type":""}],"src":"17273:336:181"},{"body":{"nodeType":"YulBlock","src":"17788:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17805:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17816:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17798:6:181"},"nodeType":"YulFunctionCall","src":"17798:21:181"},"nodeType":"YulExpressionStatement","src":"17798:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17839:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17850:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17835:3:181"},"nodeType":"YulFunctionCall","src":"17835:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17855:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17828:6:181"},"nodeType":"YulFunctionCall","src":"17828:29:181"},"nodeType":"YulExpressionStatement","src":"17828:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17877:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17888:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17873:3:181"},"nodeType":"YulFunctionCall","src":"17873:18:181"},{"hexValue":"2170726f76656e","kind":"string","nodeType":"YulLiteral","src":"17893:9:181","type":"","value":"!proven"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17866:6:181"},"nodeType":"YulFunctionCall","src":"17866:37:181"},"nodeType":"YulExpressionStatement","src":"17866:37:181"},{"nodeType":"YulAssignment","src":"17912:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17924:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17935:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17920:3:181"},"nodeType":"YulFunctionCall","src":"17920:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17912:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17765:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17779:4:181","type":""}],"src":"17614:330:181"},{"body":{"nodeType":"YulBlock","src":"18123:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18140:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18151:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18133:6:181"},"nodeType":"YulFunctionCall","src":"18133:21:181"},"nodeType":"YulExpressionStatement","src":"18133:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18174:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18185:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18170:3:181"},"nodeType":"YulFunctionCall","src":"18170:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18190:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18163:6:181"},"nodeType":"YulFunctionCall","src":"18163:29:181"},"nodeType":"YulExpressionStatement","src":"18163:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18212:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18223:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18208:3:181"},"nodeType":"YulFunctionCall","src":"18208:18:181"},{"hexValue":"21676173","kind":"string","nodeType":"YulLiteral","src":"18228:6:181","type":"","value":"!gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18201:6:181"},"nodeType":"YulFunctionCall","src":"18201:34:181"},"nodeType":"YulExpressionStatement","src":"18201:34:181"},{"nodeType":"YulAssignment","src":"18244:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18256:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18267:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18252:3:181"},"nodeType":"YulFunctionCall","src":"18252:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18244:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18100:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18114:4:181","type":""}],"src":"17949:327:181"},{"body":{"nodeType":"YulBlock","src":"18480:276:181","statements":[{"nodeType":"YulVariableDeclaration","src":"18490:20:181","value":{"kind":"number","nodeType":"YulLiteral","src":"18500:10:181","type":"","value":"0xffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18494:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18526:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18541:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"18549:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18537:3:181"},"nodeType":"YulFunctionCall","src":"18537:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18519:6:181"},"nodeType":"YulFunctionCall","src":"18519:34:181"},"nodeType":"YulExpressionStatement","src":"18519:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18573:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18584:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18569:3:181"},"nodeType":"YulFunctionCall","src":"18569:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"18593:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"18601:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18589:3:181"},"nodeType":"YulFunctionCall","src":"18589:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18562:6:181"},"nodeType":"YulFunctionCall","src":"18562:43:181"},"nodeType":"YulExpressionStatement","src":"18562:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18625:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18636:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18621:3:181"},"nodeType":"YulFunctionCall","src":"18621:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"18641:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18614:6:181"},"nodeType":"YulFunctionCall","src":"18614:34:181"},"nodeType":"YulExpressionStatement","src":"18614:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18668:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18679:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18664:3:181"},"nodeType":"YulFunctionCall","src":"18664:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18684:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18657:6:181"},"nodeType":"YulFunctionCall","src":"18657:31:181"},"nodeType":"YulExpressionStatement","src":"18657:31:181"},{"nodeType":"YulAssignment","src":"18697:53:181","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"18722:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18734:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18745:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18730:3:181"},"nodeType":"YulFunctionCall","src":"18730:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"18705:16:181"},"nodeType":"YulFunctionCall","src":"18705:45:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18697:4:181"}]}]},"name":"abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18425:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"18436:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"18444:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18452:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18460:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18471:4:181","type":""}],"src":"18281:475:181"},{"body":{"nodeType":"YulBlock","src":"18930:200:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18947:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"18958:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18940:6:181"},"nodeType":"YulFunctionCall","src":"18940:25:181"},"nodeType":"YulExpressionStatement","src":"18940:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18985:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18996:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18981:3:181"},"nodeType":"YulFunctionCall","src":"18981:18:181"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"19015:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19008:6:181"},"nodeType":"YulFunctionCall","src":"19008:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19001:6:181"},"nodeType":"YulFunctionCall","src":"19001:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18974:6:181"},"nodeType":"YulFunctionCall","src":"18974:50:181"},"nodeType":"YulExpressionStatement","src":"18974:50:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19044:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19055:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19040:3:181"},"nodeType":"YulFunctionCall","src":"19040:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19060:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19033:6:181"},"nodeType":"YulFunctionCall","src":"19033:30:181"},"nodeType":"YulExpressionStatement","src":"19033:30:181"},{"nodeType":"YulAssignment","src":"19072:52:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"19097:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19109:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19120:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19105:3:181"},"nodeType":"YulFunctionCall","src":"19105:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"19080:16:181"},"nodeType":"YulFunctionCall","src":"19080:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19072:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18883:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"18894:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18902:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18910:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18921:4:181","type":""}],"src":"18761:369:181"},{"body":{"nodeType":"YulBlock","src":"19309:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19326:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19337:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19319:6:181"},"nodeType":"YulFunctionCall","src":"19319:21:181"},"nodeType":"YulExpressionStatement","src":"19319:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19360:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19371:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19356:3:181"},"nodeType":"YulFunctionCall","src":"19356:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19376:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19349:6:181"},"nodeType":"YulFunctionCall","src":"19349:30:181"},"nodeType":"YulExpressionStatement","src":"19349:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19399:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19410:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19395:3:181"},"nodeType":"YulFunctionCall","src":"19395:18:181"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","kind":"string","nodeType":"YulLiteral","src":"19415:31:181","type":"","value":"Address: insufficient balance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19388:6:181"},"nodeType":"YulFunctionCall","src":"19388:59:181"},"nodeType":"YulExpressionStatement","src":"19388:59:181"},{"nodeType":"YulAssignment","src":"19456:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19468:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19479:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19464:3:181"},"nodeType":"YulFunctionCall","src":"19464:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19456:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19286:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19300:4:181","type":""}],"src":"19135:353:181"},{"body":{"nodeType":"YulBlock","src":"19684:14:181","statements":[{"nodeType":"YulAssignment","src":"19686:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"19693:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"19686:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"19668:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"19676:3:181","type":""}],"src":"19493:205:181"},{"body":{"nodeType":"YulBlock","src":"19877:248:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19894:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19905:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19887:6:181"},"nodeType":"YulFunctionCall","src":"19887:21:181"},"nodeType":"YulExpressionStatement","src":"19887:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19928:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19939:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19924:3:181"},"nodeType":"YulFunctionCall","src":"19924:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19944:2:181","type":"","value":"58"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19917:6:181"},"nodeType":"YulFunctionCall","src":"19917:30:181"},"nodeType":"YulExpressionStatement","src":"19917:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19967:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19978:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19963:3:181"},"nodeType":"YulFunctionCall","src":"19963:18:181"},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c2072","kind":"string","nodeType":"YulLiteral","src":"19983:34:181","type":"","value":"Address: unable to send value, r"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19956:6:181"},"nodeType":"YulFunctionCall","src":"19956:62:181"},"nodeType":"YulExpressionStatement","src":"19956:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20038:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20049:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20034:3:181"},"nodeType":"YulFunctionCall","src":"20034:18:181"},{"hexValue":"6563697069656e74206d61792068617665207265766572746564","kind":"string","nodeType":"YulLiteral","src":"20054:28:181","type":"","value":"ecipient may have reverted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20027:6:181"},"nodeType":"YulFunctionCall","src":"20027:56:181"},"nodeType":"YulExpressionStatement","src":"20027:56:181"},{"nodeType":"YulAssignment","src":"20092:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20104:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20115:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20100:3:181"},"nodeType":"YulFunctionCall","src":"20100:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20092:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19854:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19868:4:181","type":""}],"src":"19703:422:181"},{"body":{"nodeType":"YulBlock","src":"20304:233:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20321:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20332:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20314:6:181"},"nodeType":"YulFunctionCall","src":"20314:21:181"},"nodeType":"YulExpressionStatement","src":"20314:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20355:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20366:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20351:3:181"},"nodeType":"YulFunctionCall","src":"20351:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20371:2:181","type":"","value":"43"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20344:6:181"},"nodeType":"YulFunctionCall","src":"20344:30:181"},"nodeType":"YulExpressionStatement","src":"20344:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20394:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20405:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20390:3:181"},"nodeType":"YulFunctionCall","src":"20390:18:181"},{"hexValue":"4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e4445","kind":"string","nodeType":"YulLiteral","src":"20410:34:181","type":"","value":"FxBaseChildTunnel: INVALID_SENDE"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20383:6:181"},"nodeType":"YulFunctionCall","src":"20383:62:181"},"nodeType":"YulExpressionStatement","src":"20383:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20465:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20476:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20461:3:181"},"nodeType":"YulFunctionCall","src":"20461:18:181"},{"hexValue":"525f46524f4d5f524f4f54","kind":"string","nodeType":"YulLiteral","src":"20481:13:181","type":"","value":"R_FROM_ROOT"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20454:6:181"},"nodeType":"YulFunctionCall","src":"20454:41:181"},"nodeType":"YulExpressionStatement","src":"20454:41:181"},{"nodeType":"YulAssignment","src":"20504:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20516:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20527:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20512:3:181"},"nodeType":"YulFunctionCall","src":"20512:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20504:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1b951f8525e63633d83b1eade825f5af300eb77e95eaebd60efd7481ae921a45__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20281:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20295:4:181","type":""}],"src":"20130:407:181"},{"body":{"nodeType":"YulBlock","src":"20716:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20733:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20744:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20726:6:181"},"nodeType":"YulFunctionCall","src":"20726:21:181"},"nodeType":"YulExpressionStatement","src":"20726:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20767:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20778:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20763:3:181"},"nodeType":"YulFunctionCall","src":"20763:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20783:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20756:6:181"},"nodeType":"YulFunctionCall","src":"20756:29:181"},"nodeType":"YulExpressionStatement","src":"20756:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20805:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20816:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20801:3:181"},"nodeType":"YulFunctionCall","src":"20801:18:181"},{"hexValue":"216c656e677468","kind":"string","nodeType":"YulLiteral","src":"20821:9:181","type":"","value":"!length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20794:6:181"},"nodeType":"YulFunctionCall","src":"20794:37:181"},"nodeType":"YulExpressionStatement","src":"20794:37:181"},{"nodeType":"YulAssignment","src":"20840:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20852:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20863:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20848:3:181"},"nodeType":"YulFunctionCall","src":"20848:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20840:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20693:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20707:4:181","type":""}],"src":"20542:330:181"},{"body":{"nodeType":"YulBlock","src":"20971:203:181","statements":[{"nodeType":"YulVariableDeclaration","src":"20981:26:181","value":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"21001:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"20995:5:181"},"nodeType":"YulFunctionCall","src":"20995:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"20985:6:181","type":""}]},{"nodeType":"YulAssignment","src":"21016:32:181","value":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"21035:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"21042:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21031:3:181"},"nodeType":"YulFunctionCall","src":"21031:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"21025:5:181"},"nodeType":"YulFunctionCall","src":"21025:23:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"21016:5:181"}]},{"body":{"nodeType":"YulBlock","src":"21085:83:181","statements":[{"nodeType":"YulAssignment","src":"21099:59:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21112:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21127:1:181","type":"","value":"3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21134:4:181","type":"","value":"0x20"},{"name":"length","nodeType":"YulIdentifier","src":"21140:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21130:3:181"},"nodeType":"YulFunctionCall","src":"21130:17:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21123:3:181"},"nodeType":"YulFunctionCall","src":"21123:25:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21154:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"21150:3:181"},"nodeType":"YulFunctionCall","src":"21150:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21119:3:181"},"nodeType":"YulFunctionCall","src":"21119:38:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21108:3:181"},"nodeType":"YulFunctionCall","src":"21108:50:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"21099:5:181"}]}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"21063:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"21071:4:181","type":"","value":"0x20"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"21060:2:181"},"nodeType":"YulFunctionCall","src":"21060:16:181"},"nodeType":"YulIf","src":"21057:111:181"}]},"name":"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nodeType":"YulTypedName","src":"20951:5:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"20961:5:181","type":""}],"src":"20877:297:181"},{"body":{"nodeType":"YulBlock","src":"21353:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21370:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21381:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21363:6:181"},"nodeType":"YulFunctionCall","src":"21363:21:181"},"nodeType":"YulExpressionStatement","src":"21363:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21404:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21415:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21400:3:181"},"nodeType":"YulFunctionCall","src":"21400:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"21420:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21393:6:181"},"nodeType":"YulFunctionCall","src":"21393:30:181"},"nodeType":"YulExpressionStatement","src":"21393:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21443:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21454:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21439:3:181"},"nodeType":"YulFunctionCall","src":"21439:18:181"},{"hexValue":"216e65772072617465206c696d6974","kind":"string","nodeType":"YulLiteral","src":"21459:17:181","type":"","value":"!new rate limit"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21432:6:181"},"nodeType":"YulFunctionCall","src":"21432:45:181"},"nodeType":"YulExpressionStatement","src":"21432:45:181"},{"nodeType":"YulAssignment","src":"21486:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21498:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21509:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21494:3:181"},"nodeType":"YulFunctionCall","src":"21494:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21486:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21330:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21344:4:181","type":""}],"src":"21179:339:181"},{"body":{"nodeType":"YulBlock","src":"21652:145:181","statements":[{"nodeType":"YulAssignment","src":"21662:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21674:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21685:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21670:3:181"},"nodeType":"YulFunctionCall","src":"21670:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21662:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21704:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"21719:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21735:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"21740:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21731:3:181"},"nodeType":"YulFunctionCall","src":"21731:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"21744:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21727:3:181"},"nodeType":"YulFunctionCall","src":"21727:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21715:3:181"},"nodeType":"YulFunctionCall","src":"21715:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21697:6:181"},"nodeType":"YulFunctionCall","src":"21697:51:181"},"nodeType":"YulExpressionStatement","src":"21697:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21768:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21779:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21764:3:181"},"nodeType":"YulFunctionCall","src":"21764:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"21784:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21757:6:181"},"nodeType":"YulFunctionCall","src":"21757:34:181"},"nodeType":"YulExpressionStatement","src":"21757:34:181"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21613:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21624:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"21632:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21643:4:181","type":""}],"src":"21523:274:181"},{"body":{"nodeType":"YulBlock","src":"22073:439:181","statements":[{"nodeType":"YulVariableDeclaration","src":"22083:30:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22097:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"22102:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"22093:3:181"},"nodeType":"YulFunctionCall","src":"22093:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"22087:2:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"22129:3:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22142:3:181","type":"","value":"224"},{"name":"value0","nodeType":"YulIdentifier","src":"22147:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"22138:3:181"},"nodeType":"YulFunctionCall","src":"22138:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"22156:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22134:3:181"},"nodeType":"YulFunctionCall","src":"22134:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22122:6:181"},"nodeType":"YulFunctionCall","src":"22122:38:181"},"nodeType":"YulExpressionStatement","src":"22122:38:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"22180:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"22185:1:181","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22176:3:181"},"nodeType":"YulFunctionCall","src":"22176:11:181"},{"name":"value1","nodeType":"YulIdentifier","src":"22189:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22169:6:181"},"nodeType":"YulFunctionCall","src":"22169:27:181"},"nodeType":"YulExpressionStatement","src":"22169:27:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"22216:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"22221:2:181","type":"","value":"36"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22212:3:181"},"nodeType":"YulFunctionCall","src":"22212:12:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22234:3:181","type":"","value":"224"},{"name":"value2","nodeType":"YulIdentifier","src":"22239:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"22230:3:181"},"nodeType":"YulFunctionCall","src":"22230:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"22248:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22226:3:181"},"nodeType":"YulFunctionCall","src":"22226:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22205:6:181"},"nodeType":"YulFunctionCall","src":"22205:47:181"},"nodeType":"YulExpressionStatement","src":"22205:47:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"22272:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"22277:2:181","type":"","value":"40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22268:3:181"},"nodeType":"YulFunctionCall","src":"22268:12:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22290:3:181","type":"","value":"224"},{"name":"value3","nodeType":"YulIdentifier","src":"22295:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"22286:3:181"},"nodeType":"YulFunctionCall","src":"22286:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"22304:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22282:3:181"},"nodeType":"YulFunctionCall","src":"22282:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22261:6:181"},"nodeType":"YulFunctionCall","src":"22261:47:181"},"nodeType":"YulExpressionStatement","src":"22261:47:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"22328:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"22333:2:181","type":"","value":"44"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22324:3:181"},"nodeType":"YulFunctionCall","src":"22324:12:181"},{"name":"value4","nodeType":"YulIdentifier","src":"22338:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22317:6:181"},"nodeType":"YulFunctionCall","src":"22317:28:181"},"nodeType":"YulExpressionStatement","src":"22317:28:181"},{"nodeType":"YulVariableDeclaration","src":"22354:27:181","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"22374:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"22368:5:181"},"nodeType":"YulFunctionCall","src":"22368:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"22358:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"22429:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"22437:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22425:3:181"},"nodeType":"YulFunctionCall","src":"22425:17:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"22448:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"22453:2:181","type":"","value":"76"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22444:3:181"},"nodeType":"YulFunctionCall","src":"22444:12:181"},{"name":"length","nodeType":"YulIdentifier","src":"22458:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"22390:34:181"},"nodeType":"YulFunctionCall","src":"22390:75:181"},"nodeType":"YulExpressionStatement","src":"22390:75:181"},{"nodeType":"YulAssignment","src":"22474:32:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"22489:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"22494:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22485:3:181"},"nodeType":"YulFunctionCall","src":"22485:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"22503:2:181","type":"","value":"76"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22481:3:181"},"nodeType":"YulFunctionCall","src":"22481:25:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"22474:3:181"}]}]},"name":"abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"22009:3:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"22014:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"22022:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"22030:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"22038:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22046:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"22054:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"22065:3:181","type":""}],"src":"21802:710:181"},{"body":{"nodeType":"YulBlock","src":"22636:98:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22653:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22664:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22646:6:181"},"nodeType":"YulFunctionCall","src":"22646:21:181"},"nodeType":"YulExpressionStatement","src":"22646:21:181"},{"nodeType":"YulAssignment","src":"22676:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"22701:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22713:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22724:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22709:3:181"},"nodeType":"YulFunctionCall","src":"22709:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"22684:16:181"},"nodeType":"YulFunctionCall","src":"22684:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22676:4:181"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22605:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"22616:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22627:4:181","type":""}],"src":"22517:217:181"},{"body":{"nodeType":"YulBlock","src":"22913:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22930:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22941:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22923:6:181"},"nodeType":"YulFunctionCall","src":"22923:21:181"},"nodeType":"YulExpressionStatement","src":"22923:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22964:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22975:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22960:3:181"},"nodeType":"YulFunctionCall","src":"22960:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22980:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22953:6:181"},"nodeType":"YulFunctionCall","src":"22953:30:181"},"nodeType":"YulExpressionStatement","src":"22953:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23003:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23014:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22999:3:181"},"nodeType":"YulFunctionCall","src":"22999:18:181"},{"hexValue":"616767726567617465526f6f7420656d707479","kind":"string","nodeType":"YulLiteral","src":"23019:21:181","type":"","value":"aggregateRoot empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22992:6:181"},"nodeType":"YulFunctionCall","src":"22992:49:181"},"nodeType":"YulExpressionStatement","src":"22992:49:181"},{"nodeType":"YulAssignment","src":"23050:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23062:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23073:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23058:3:181"},"nodeType":"YulFunctionCall","src":"23058:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23050:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22890:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22904:4:181","type":""}],"src":"22739:343:181"},{"body":{"nodeType":"YulBlock","src":"23261:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23278:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23289:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23271:6:181"},"nodeType":"YulFunctionCall","src":"23271:21:181"},"nodeType":"YulExpressionStatement","src":"23271:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23312:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23323:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23308:3:181"},"nodeType":"YulFunctionCall","src":"23308:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23328:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23301:6:181"},"nodeType":"YulFunctionCall","src":"23301:30:181"},"nodeType":"YulExpressionStatement","src":"23301:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23351:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23362:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23347:3:181"},"nodeType":"YulFunctionCall","src":"23347:18:181"},{"hexValue":"616767726567617465526f6f7420216578697374","kind":"string","nodeType":"YulLiteral","src":"23367:22:181","type":"","value":"aggregateRoot !exist"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23340:6:181"},"nodeType":"YulFunctionCall","src":"23340:50:181"},"nodeType":"YulExpressionStatement","src":"23340:50:181"},{"nodeType":"YulAssignment","src":"23399:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23411:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23422:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23407:3:181"},"nodeType":"YulFunctionCall","src":"23407:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23399:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23238:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23252:4:181","type":""}],"src":"23087:344:181"},{"body":{"nodeType":"YulBlock","src":"23610:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23627:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23638:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23620:6:181"},"nodeType":"YulFunctionCall","src":"23620:21:181"},"nodeType":"YulExpressionStatement","src":"23620:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23661:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23672:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23657:3:181"},"nodeType":"YulFunctionCall","src":"23657:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23677:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23650:6:181"},"nodeType":"YulFunctionCall","src":"23650:30:181"},"nodeType":"YulExpressionStatement","src":"23650:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23700:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23711:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23696:3:181"},"nodeType":"YulFunctionCall","src":"23696:18:181"},{"hexValue":"616767726567617465526f6f7420217665726966696564","kind":"string","nodeType":"YulLiteral","src":"23716:25:181","type":"","value":"aggregateRoot !verified"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23689:6:181"},"nodeType":"YulFunctionCall","src":"23689:53:181"},"nodeType":"YulExpressionStatement","src":"23689:53:181"},{"nodeType":"YulAssignment","src":"23751:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23763:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23774:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23759:3:181"},"nodeType":"YulFunctionCall","src":"23759:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23751:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23587:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23601:4:181","type":""}],"src":"23436:347:181"},{"body":{"nodeType":"YulBlock","src":"23962:232:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23979:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23990:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23972:6:181"},"nodeType":"YulFunctionCall","src":"23972:21:181"},"nodeType":"YulExpressionStatement","src":"23972:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24013:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24024:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24009:3:181"},"nodeType":"YulFunctionCall","src":"24009:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24029:2:181","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24002:6:181"},"nodeType":"YulFunctionCall","src":"24002:30:181"},"nodeType":"YulExpressionStatement","src":"24002:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24052:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24063:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24048:3:181"},"nodeType":"YulFunctionCall","src":"24048:18:181"},{"hexValue":"4678426173654368696c6454756e6e656c3a20524f4f545f54554e4e454c5f41","kind":"string","nodeType":"YulLiteral","src":"24068:34:181","type":"","value":"FxBaseChildTunnel: ROOT_TUNNEL_A"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24041:6:181"},"nodeType":"YulFunctionCall","src":"24041:62:181"},"nodeType":"YulExpressionStatement","src":"24041:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24123:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24134:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24119:3:181"},"nodeType":"YulFunctionCall","src":"24119:18:181"},{"hexValue":"4c52454144595f534554","kind":"string","nodeType":"YulLiteral","src":"24139:12:181","type":"","value":"LREADY_SET"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24112:6:181"},"nodeType":"YulFunctionCall","src":"24112:40:181"},"nodeType":"YulExpressionStatement","src":"24112:40:181"},{"nodeType":"YulAssignment","src":"24161:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24173:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24184:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24169:3:181"},"nodeType":"YulFunctionCall","src":"24169:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24161:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f7974c7c2deac4fad00669eceb145d6535e698a8bcd8493990c8db551188166b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23939:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23953:4:181","type":""}],"src":"23788:406:181"},{"body":{"nodeType":"YulBlock","src":"24373:164:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24390:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24401:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24383:6:181"},"nodeType":"YulFunctionCall","src":"24383:21:181"},"nodeType":"YulExpressionStatement","src":"24383:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24424:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24435:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24420:3:181"},"nodeType":"YulFunctionCall","src":"24420:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24440:2:181","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24413:6:181"},"nodeType":"YulFunctionCall","src":"24413:30:181"},"nodeType":"YulExpressionStatement","src":"24413:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24463:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24474:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24459:3:181"},"nodeType":"YulFunctionCall","src":"24459:18:181"},{"hexValue":"6e657720726f6f7420656d707479","kind":"string","nodeType":"YulLiteral","src":"24479:16:181","type":"","value":"new root empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24452:6:181"},"nodeType":"YulFunctionCall","src":"24452:44:181"},"nodeType":"YulExpressionStatement","src":"24452:44:181"},{"nodeType":"YulAssignment","src":"24505:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24517:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24528:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24513:3:181"},"nodeType":"YulFunctionCall","src":"24513:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24505:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24350:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24364:4:181","type":""}],"src":"24199:338:181"},{"body":{"nodeType":"YulBlock","src":"24716:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24733:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24744:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24726:6:181"},"nodeType":"YulFunctionCall","src":"24726:21:181"},"nodeType":"YulExpressionStatement","src":"24726:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24767:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24778:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24763:3:181"},"nodeType":"YulFunctionCall","src":"24763:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24783:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24756:6:181"},"nodeType":"YulFunctionCall","src":"24756:30:181"},"nodeType":"YulExpressionStatement","src":"24756:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24806:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24817:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24802:3:181"},"nodeType":"YulFunctionCall","src":"24802:18:181"},{"hexValue":"726f6f7420616c72656164792070656e64696e67","kind":"string","nodeType":"YulLiteral","src":"24822:22:181","type":"","value":"root already pending"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24795:6:181"},"nodeType":"YulFunctionCall","src":"24795:50:181"},"nodeType":"YulExpressionStatement","src":"24795:50:181"},{"nodeType":"YulAssignment","src":"24854:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24866:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24877:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24862:3:181"},"nodeType":"YulFunctionCall","src":"24862:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24854:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24693:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24707:4:181","type":""}],"src":"24542:344:181"},{"body":{"nodeType":"YulBlock","src":"25065:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25082:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25093:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25075:6:181"},"nodeType":"YulFunctionCall","src":"25075:21:181"},"nodeType":"YulExpressionStatement","src":"25075:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25116:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25127:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25112:3:181"},"nodeType":"YulFunctionCall","src":"25112:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"25132:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25105:6:181"},"nodeType":"YulFunctionCall","src":"25105:30:181"},"nodeType":"YulExpressionStatement","src":"25105:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25155:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25166:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25151:3:181"},"nodeType":"YulFunctionCall","src":"25151:18:181"},{"hexValue":"726f6f7420616c72656164792070726f76656e","kind":"string","nodeType":"YulLiteral","src":"25171:21:181","type":"","value":"root already proven"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25144:6:181"},"nodeType":"YulFunctionCall","src":"25144:49:181"},"nodeType":"YulExpressionStatement","src":"25144:49:181"},{"nodeType":"YulAssignment","src":"25202:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25214:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25225:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25210:3:181"},"nodeType":"YulFunctionCall","src":"25210:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25202:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25042:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25056:4:181","type":""}],"src":"24891:343:181"},{"body":{"nodeType":"YulBlock","src":"25286:104:181","statements":[{"nodeType":"YulAssignment","src":"25296:39:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"25312:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"25315:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25308:3:181"},"nodeType":"YulFunctionCall","src":"25308:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"25326:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"25329:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25322:3:181"},"nodeType":"YulFunctionCall","src":"25322:12:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25304:3:181"},"nodeType":"YulFunctionCall","src":"25304:31:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"25296:4:181"}]},{"body":{"nodeType":"YulBlock","src":"25362:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"25364:16:181"},"nodeType":"YulFunctionCall","src":"25364:18:181"},"nodeType":"YulExpressionStatement","src":"25364:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"25350:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"25356:4:181","type":"","value":"0xff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"25347:2:181"},"nodeType":"YulFunctionCall","src":"25347:14:181"},"nodeType":"YulIf","src":"25344:40:181"}]},"name":"checked_sub_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"25268:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"25271:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"25277:4:181","type":""}],"src":"25239:151:181"},{"body":{"nodeType":"YulBlock","src":"25445:175:181","statements":[{"nodeType":"YulVariableDeclaration","src":"25455:50:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"25482:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"25485:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25478:3:181"},"nodeType":"YulFunctionCall","src":"25478:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"25496:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"25499:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25492:3:181"},"nodeType":"YulFunctionCall","src":"25492:12:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"25474:3:181"},"nodeType":"YulFunctionCall","src":"25474:31:181"},"variables":[{"name":"product_raw","nodeType":"YulTypedName","src":"25459:11:181","type":""}]},{"nodeType":"YulAssignment","src":"25514:33:181","value":{"arguments":[{"name":"product_raw","nodeType":"YulIdentifier","src":"25529:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"25542:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25525:3:181"},"nodeType":"YulFunctionCall","src":"25525:22:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"25514:7:181"}]},{"body":{"nodeType":"YulBlock","src":"25592:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"25594:16:181"},"nodeType":"YulFunctionCall","src":"25594:18:181"},"nodeType":"YulExpressionStatement","src":"25594:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"25569:7:181"},{"name":"product_raw","nodeType":"YulIdentifier","src":"25578:11:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"25566:2:181"},"nodeType":"YulFunctionCall","src":"25566:24:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"25559:6:181"},"nodeType":"YulFunctionCall","src":"25559:32:181"},"nodeType":"YulIf","src":"25556:58:181"}]},"name":"checked_mul_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"25424:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"25427:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"25433:7:181","type":""}],"src":"25395:225:181"},{"body":{"nodeType":"YulBlock","src":"25808:269:181","statements":[{"nodeType":"YulAssignment","src":"25818:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25830:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25841:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25826:3:181"},"nodeType":"YulFunctionCall","src":"25826:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25818:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"25854:36:181","value":{"kind":"number","nodeType":"YulLiteral","src":"25864:26:181","type":"","value":"0xffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"25858:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25906:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"25921:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"25929:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25917:3:181"},"nodeType":"YulFunctionCall","src":"25917:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25899:6:181"},"nodeType":"YulFunctionCall","src":"25899:34:181"},"nodeType":"YulExpressionStatement","src":"25899:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25953:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"25964:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25949:3:181"},"nodeType":"YulFunctionCall","src":"25949:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25973:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"25981:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25969:3:181"},"nodeType":"YulFunctionCall","src":"25969:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25942:6:181"},"nodeType":"YulFunctionCall","src":"25942:43:181"},"nodeType":"YulExpressionStatement","src":"25942:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26005:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26016:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26001:3:181"},"nodeType":"YulFunctionCall","src":"26001:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"26021:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25994:6:181"},"nodeType":"YulFunctionCall","src":"25994:34:181"},"nodeType":"YulExpressionStatement","src":"25994:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26048:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26059:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26044:3:181"},"nodeType":"YulFunctionCall","src":"26044:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"26064:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26037:6:181"},"nodeType":"YulFunctionCall","src":"26037:34:181"},"nodeType":"YulExpressionStatement","src":"26037:34:181"}]},"name":"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25753:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"25764:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"25772:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"25780:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"25788:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25799:4:181","type":""}],"src":"25625:452:181"},{"body":{"nodeType":"YulBlock","src":"26256:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26273:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26284:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26266:6:181"},"nodeType":"YulFunctionCall","src":"26266:21:181"},"nodeType":"YulExpressionStatement","src":"26266:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26307:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26318:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26303:3:181"},"nodeType":"YulFunctionCall","src":"26303:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"26323:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26296:6:181"},"nodeType":"YulFunctionCall","src":"26296:30:181"},"nodeType":"YulExpressionStatement","src":"26296:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26346:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26357:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26342:3:181"},"nodeType":"YulFunctionCall","src":"26342:18:181"},{"hexValue":"217472756e6361746564","kind":"string","nodeType":"YulLiteral","src":"26362:12:181","type":"","value":"!truncated"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26335:6:181"},"nodeType":"YulFunctionCall","src":"26335:40:181"},"nodeType":"YulExpressionStatement","src":"26335:40:181"},{"nodeType":"YulAssignment","src":"26384:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26396:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"26407:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26392:3:181"},"nodeType":"YulFunctionCall","src":"26392:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26384:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26233:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26247:4:181","type":""}],"src":"26082:334:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        if iszero(lt(value0, 3))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 1120) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, shl(5, length)), 0x20), dataEnd) { revert(0, 0) }\n        value0 := add(_2, 0x20)\n        value1 := length\n        value2 := calldataload(add(headStart, 0x20))\n        let _3 := add(headStart, 1088)\n        if gt(_3, dataEnd) { revert(0, 0) }\n        value3 := add(headStart, 64)\n        value4 := calldataload(_3)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_uint256t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n        value2 := add(_2, 32)\n        value3 := length\n    }\n    function abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n    }\n    function abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value2 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_bytes(value1, add(headStart, 64))\n    }\n    function abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!delayBlocks\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"root already sent\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, value0)\n        end := add(pos, 32)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        let tail_1 := abi_encode_bytes(value0, add(headStart, 96))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value1, tail_1)\n        mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!AMB\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        tail := abi_encode_bytes(value0, add(headStart, 64))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!proofs\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr(base_ref, ptr_to_tail) -> addr\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(1086)))) { revert(0, 0) }\n        addr := add(base_ref, rel_offset_of_tail)\n    }\n    function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 11)\n        mstore(add(headStart, 64), \"!sharedRoot\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"aggregateRoot !exists\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 8)\n        mstore(add(headStart, 64), \"!watcher\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_0127552a73259d4875e4bb85e64334729d5119ce836ba2001f26ffe4d150b533__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"FxBaseChildTunnel: INVALID_SENDE\")\n        mstore(add(headStart, 96), \"R\")\n        tail := add(headStart, 128)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"already watcher manager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!allowlisted\")\n        tail := add(headStart, 96)\n    }\n    function increment_t_uint32(value) -> ret\n    {\n        let _1 := 0xffffffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_decode_tuple_t_bytes32t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Pausable: paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!data length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"Pausable: not paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"!MessageStatus.None\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"invalid inboundRoot\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!destination\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!proven\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n        mstore(add(headStart, 64), 96)\n        tail := abi_encode_bytes(value2, add(headStart, 96))\n    }\n    function abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: insufficient balance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    { end := pos }\n    function abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 58)\n        mstore(add(headStart, 64), \"Address: unable to send value, r\")\n        mstore(add(headStart, 96), \"ecipient may have reverted\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_1b951f8525e63633d83b1eade825f5af300eb77e95eaebd60efd7481ae921a45__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 43)\n        mstore(add(headStart, 64), \"FxBaseChildTunnel: INVALID_SENDE\")\n        mstore(add(headStart, 96), \"R_FROM_ROOT\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!length\")\n        tail := add(headStart, 96)\n    }\n    function convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32(array) -> value\n    {\n        let length := mload(array)\n        value := mload(add(array, 0x20))\n        if lt(length, 0x20)\n        {\n            value := and(value, shl(shl(3, sub(0x20, length)), not(0)))\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"!new rate limit\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value5, value4, value3, value2, value1, value0) -> end\n    {\n        let _1 := shl(224, 0xffffffff)\n        mstore(pos, and(shl(224, value0), _1))\n        mstore(add(pos, 4), value1)\n        mstore(add(pos, 36), and(shl(224, value2), _1))\n        mstore(add(pos, 40), and(shl(224, value3), _1))\n        mstore(add(pos, 44), value4)\n        let length := mload(value5)\n        copy_memory_to_memory_with_cleanup(add(value5, 0x20), add(pos, 76), length)\n        end := add(add(pos, length), 76)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"aggregateRoot empty\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"aggregateRoot !exist\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"aggregateRoot !verified\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_f7974c7c2deac4fad00669eceb145d6535e698a8bcd8493990c8db551188166b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"FxBaseChildTunnel: ROOT_TUNNEL_A\")\n        mstore(add(headStart, 96), \"LREADY_SET\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"new root empty\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"root already pending\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"root already proven\")\n        tail := add(headStart, 96)\n    }\n    function checked_sub_t_uint8(x, y) -> diff\n    {\n        diff := sub(and(x, 0xff), and(y, 0xff))\n        if gt(diff, 0xff) { panic_error_0x11() }\n    }\n    function checked_mul_t_uint8(x, y) -> product\n    {\n        let product_raw := mul(and(x, 0xff), and(y, 0xff))\n        product := and(product_raw, 0xff)\n        if iszero(eq(product, product_raw)) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"!truncated\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"39039":[{"length":32,"start":1272},{"length":32,"start":1735},{"length":32,"start":5975},{"length":32,"start":7252}],"39042":[{"length":32,"start":2362},{"length":32,"start":3241}],"39045":[{"length":32,"start":1457}],"39048":[{"length":32,"start":747}],"39550":[{"length":32,"start":1963},{"length":32,"start":2817},{"length":32,"start":4161},{"length":32,"start":6069}],"39553":[{"length":32,"start":2436},{"length":32,"start":7541},{"length":32,"start":7682}],"39556":[{"length":32,"start":859},{"length":32,"start":7508}]},"linkReferences":{},"object":"6080604052600436106102cd5760003560e01c80638456cb5911610175578063b697f531116100dc578063d2a3cc7111610095578063d88beda21161006f578063d88beda214610972578063db1b7659146109a6578063e0fed010146109c6578063fa31de01146109e657600080fd5b8063d2a3cc7114610908578063d69f9d6114610928578063d7d317b31461095c57600080fd5b8063b697f53114610843578063b95a200114610863578063c5b350df14610896578063cc394283146108ab578063d1851c92146108cb578063d232c220146108e957600080fd5b80639fa92f9d1161012e5780639fa92f9d14610786578063a01892a514610799578063a792c29b146107cd578063ad9c0c2e146107ed578063b1f8100d14610803578063b2f876431461082357600080fd5b80638456cb59146106a35780638d3638f4146106b85780638da5cb5b146106eb57806398c9f2b9146107095780639a7c4b71146107395780639d3117c71461075957600080fd5b806352a9674b116102345780636159ada1116101ed5780636a42b8f8116101c75780636a42b8f8146106385780636b04a9331461064e578063715018a61461066e5780637f1e9cb01461068357600080fd5b80636159ada1146105d357806365eaf11b1461060357806368742da61461061857600080fd5b806352a9674b146104e6578063572386ca1461051a578063579c16181461054a5780635bd11efc146105605780635c975abb146105805780635f61e3ec1461059f57600080fd5b80633cf52ffb116102865780633cf52ffb1461041b5780633f4ba83a14610430578063450d11f0146104455780634ff746f61461047d578063508a109b1461049d5780635190bc53146104bd57600080fd5b806314168416146102d95780631eeaabea1461032757806325e3beda146103495780632bb1ae7c1461038b5780632bbd59ca1461039e578063301f07c3146103db57600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b5061030d7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b34801561033357600080fd5b50610347610342366004612f40565b610a14565b005b34801561035557600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161031e565b610347610399366004612ffc565b610abe565b3480156103aa57600080fd5b506103ce6103b9366004612f40565b600f6020526000908152604090205460ff1681565b60405161031e9190613047565b3480156103e757600080fd5b5061040b6103f6366004612f40565b600a6020526000908152604090205460ff1681565b604051901515815260200161031e565b34801561042757600080fd5b5060025461037d565b34801561043c57600080fd5b50610347610c61565b34801561045157600080fd5b50601054610465906001600160a01b031681565b6040516001600160a01b03909116815260200161031e565b34801561048957600080fd5b50610347610498366004612ffc565b610c9e565b3480156104a957600080fd5b506103476104b836600461306f565b610d44565b3480156104c957600080fd5b5061040b6104d8366004613127565b6001600160a01b0316301490565b3480156104f257600080fd5b5061030d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052657600080fd5b5061040b610535366004612f40565b600c6020526000908152604090205460ff1681565b34801561055657600080fd5b5061037d60055481565b34801561056c57600080fd5b5061034761057b366004613127565b611006565b34801561058c57600080fd5b50600354600160a01b900460ff1661040b565b3480156105ab57600080fd5b506104657f000000000000000000000000000000000000000000000000000000000000000081565b3480156105df57600080fd5b5061040b6105ee366004613127565b600d6020526000908152604090205460ff1681565b34801561060f57600080fd5b5061037d61103d565b34801561062457600080fd5b50610347610633366004613127565b6110c6565b34801561064457600080fd5b5062093a8061037d565b34801561065a57600080fd5b50610347610669366004612f40565b611143565b34801561067a57600080fd5b5061034761120e565b34801561068f57600080fd5b50601154610465906001600160a01b031681565b3480156106af57600080fd5b50610347611239565b3480156106c457600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061030d565b3480156106f757600080fd5b506000546001600160a01b0316610465565b34801561071557600080fd5b5061040b610724366004612f40565b600b6020526000908152604090205460ff1681565b34801561074557600080fd5b50610347610754366004613142565b6112ed565b34801561076557600080fd5b5061037d610774366004612f40565b60096020526000908152604090205481565b34801561079257600080fd5b5030610465565b3480156107a557600080fd5b506104657f000000000000000000000000000000000000000000000000000000000000000081565b3480156107d957600080fd5b50600454610465906001600160a01b031681565b3480156107f957600080fd5b5061037d60085481565b34801561080f57600080fd5b5061034761081e366004613127565b611398565b34801561082f57600080fd5b5061034761083e366004613127565b611436565b34801561084f57600080fd5b5061034761085e366004613127565b6114b2565b34801561086f57600080fd5b5061030d61087e3660046131dd565b600e6020526000908152604090205463ffffffff1681565b3480156108a257600080fd5b50610347611531565b3480156108b757600080fd5b50600354610465906001600160a01b031681565b3480156108d757600080fd5b506001546001600160a01b0316610465565b3480156108f557600080fd5b506000546001600160a01b03161561040b565b34801561091457600080fd5b50610347610923366004613127565b6115a1565b34801561093457600080fd5b506104657f000000000000000000000000000000000000000000000000000000000000000081565b34801561096857600080fd5b5061037d60065481565b34801561097e57600080fd5b5061037d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156109b257600080fd5b5061040b6109c1366004613127565b611678565b3480156109d257600080fd5b506103476109e1366004612f40565b611682565b3480156109f257600080fd5b50610a06610a013660046131f8565b6116b6565b60405161031e92919061329f565b6000546001600160a01b03163314610a3f576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610a845760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610ac66118ee565b43600554600654610ad791906132ce565b1115610af6576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8191906132e1565b6000818152600c602052604090205490915060ff1615610bd75760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b6044820152606401610a7b565b600081604051602001610bec91815260200190565b6040516020818303038152906040529050610c07818461193b565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610c54908390869033906132fa565b60405180910390a1505050565b6000546001600160a01b03163314610c8c576040516311a8a1bb60e31b815260040160405180910390fd5b610c94611986565b610c9c6119d6565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cff5760405162461bcd60e51b8152600401610a7b9060208082526004908201526310a0a6a160e11b604082015260600190565b610d0881611a2b565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610d39929190613338565b60405180910390a150565b610d4c6118ee565b610d54611a44565b83610d8b5760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b6044820152606401610a7b565b600085856000818110610da057610da0613362565b9050602002810190610db29190613378565b610dbc9080613399565b604051610dca9291906133e7565b604051809103902090506000610e318288886000818110610ded57610ded613362565b9050602002810190610dff9190613378565b60200189896000818110610e1557610e15613362565b9050602002810190610e279190613378565b6104200135611a9d565b9050610e3f81868686611b44565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610f655788888263ffffffff16818110610e8457610e84613362565b9050602002810190610e969190613378565b610ea09080613399565b604051610eae9291906133e7565b604051809103902093506000610f03858b8b8563ffffffff16818110610ed657610ed6613362565b9050602002810190610ee89190613378565b6020018c8c8663ffffffff16818110610e1557610e15613362565b9050838114610f425760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b6044820152606401610a7b565b506000848152600f60205260409020805460ff1916600190811790915501610e5e565b5060005b818163ffffffff161015610ff157610fe889898363ffffffff16818110610f9257610f92613362565b9050602002810190610fa49190613378565b610fae9080613399565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c3e92505050565b50600101610f69565b50505050610fff6001600755565b5050505050565b6000546001600160a01b03163314611031576040516311a8a1bb60e31b815260040160405180910390fd5b61103a81611f1b565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561109d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c191906132e1565b905090565b6000546001600160a01b031633146110f1576040516311a8a1bb60e31b815260040160405180910390fd5b476110fc8282611f2d565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d8260405161113791815260200190565b60405180910390a25050565b6000546001600160a01b0316331461116e576040516311a8a1bb60e31b815260040160405180910390fd5b611176611986565b60008181526009602052604081205490036111cb5760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b6044820152606401610a7b565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610d399083815260200190565b6000546001600160a01b03163314610c9c576040516311a8a1bb60e31b815260040160405180910390fd5b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa158015611282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a691906133f7565b6112dd5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610a7b565b6112e56118ee565b610c9c61204b565b6010546001600160a01b031633146113515760405162461bcd60e51b815260206004820152602160248201527f4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e44456044820152602960f91b6064820152608401610a7b565b611392848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208e92505050565b50505050565b6000546001600160a01b031633146113c3576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b0382811691161480156113e1575060025415155b156113ff576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361142d57604051634a2fb73f60e11b815260040160405180910390fd5b61103a8161218c565b6000546001600160a01b03163314611461576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610d39565b6000546001600160a01b031633146114dd576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610d39565b6001546001600160a01b0316331461155c576040516311a7f27160e11b815260040160405180910390fd5b62093a806002544261156e9190613419565b1161158c576040516324e0285f60e21b815260040160405180910390fd5b600154610c9c906001600160a01b03166121da565b6000546001600160a01b031633146115cc576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b039081169082160361162a5760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e616765720000000000000000006044820152606401610a7b565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610d39565b6000805b92915050565b6000546001600160a01b031633146116ad576040516311a8a1bb60e31b815260040160405180910390fd5b61103a8161223f565b336000908152600d602052604081205460609060ff166117075760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b6044820152606401610a7b565b63ffffffff8086166000908152600e60205260408120805491929190911690826117308361342c565b91906101000a81548163ffffffff021916908363ffffffff1602179055509050600061178f7f0000000000000000000000000000000000000000000000000000000000000000611786336001600160a01b031690565b848a8a8a6122bd565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af1158015611805573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611829919061344f565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f8361185b600184613419565b848760405161186d9493929190613473565b60405180910390a15090989197509095505050505050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b600354600160a01b900460ff1615610c9c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a7b565b8051156119795760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610a7b565b611982826122f5565b5050565b600354600160a01b900460ff16610c9c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a7b565b6119de611986565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6040516316c2fdb560e21b815260040160405180910390fd5b600260075403611a965760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a7b565b6002600755565b6000806000858152600f602052604090205460ff166002811115611ac357611ac3613031565b14611b065760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b6044820152606401610a7b565b611b3a8484602080602002604051908101604052809291908260208002808284376000920191909152508691506123249050565b90505b9392505050565b6000848152600b602052604090205460ff1661139257611b6383612672565b6000611b998584602080602002604051908101604052809291908260208002808284376000920191909152508691506123249050565b9050838114611be05760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b6044820152606401610a7b565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611c2f9086815260200190565b60405180910390a35050505050565b600080611c4b83826127d2565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611c8362ffffff1983166127f6565b63ffffffff1614611cc55760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b6044820152606401610a7b565b6000611cd662ffffff19831661280b565b905060016000828152600f602052604090205460ff166002811115611cfd57611cfd613031565b14611d345760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b6044820152606401610a7b565b6000818152600f60205260409020805460ff191660021790556001611d997f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006132ce565b611da39190613419565b5a11611dda5760405162461bcd60e51b8152600401610a7b906020808252600490820152632167617360e01b604082015260600190565b6000611deb62ffffff198416612854565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611e4662ffffff198816612865565b611e5562ffffff198916612879565b611e6462ffffff198a1661288e565b611e81611e7662ffffff198c166128a3565b62ffffff19166128d1565b604051602401611e9494939291906134a2565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050611ece85856000868561291a565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890611f079088908b9086906134d1565b60405180910390a150505050505050919050565b611f2481611885565b61103a816129a5565b80471015611f7d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a7b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611fca576040519150601f19603f3d011682016040523d82523d6000602084013e611fcf565b606091505b50509050806120465760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a7b565b505050565b6120536118ee565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a0e3390565b60115482906001600160a01b038083169116146121015760405162461bcd60e51b815260206004820152602b60248201527f4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e444560448201526a1497d19493d357d493d3d560aa1b6064820152608401610a7b565b815160201461213c5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610a7b565b61214d612148836134f2565b612a33565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced823360405161217e929190613338565b60405180910390a150505050565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60055481036122825760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b6044820152606401610a7b565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610d39565b60608686868686866040516020016122da96959493929190613519565b60405160208183030381529060405290509695505050505050565b7f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b03681604051610d399190613573565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b806126b55760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b6044820152606401610a7b565b6000818152600a602052604090205460ff16156126cf5750565b600081815260096020526040812054908190036127255760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b6044820152606401610a7b565b6008546127328243613419565b10156127805760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f74202176657269666965640000000000000000006044820152606401610a7b565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b8151600090602084016127ed64ffffffffff85168284612b5c565b95945050505050565b600061167c62ffffff19831660286004612b99565b6000806128218360781c6001600160601b031690565b6001600160601b0316905060006128418460181c6001600160601b031690565b6001600160601b03169091209392505050565b600061167c61286283612bc9565b90565b600061167c62ffffff198316826004612b99565b600061167c62ffffff19831660246004612b99565b600061167c62ffffff19831660046020612bda565b600061167c604c6128c181601886901c6001600160601b0316613419565b62ffffff19851691906000612ce5565b60606000806128e98460181c6001600160601b031690565b6001600160601b0316905060405191508192506129098483602001612d61565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff81111561294057612940612f59565b6040519080825280601f01601f19166020018201604052801561296a576020820181803683370190505b5090506000808751602089018b8e8ef191503d92508683111561298b578692505b828152826000602083013e90999098509650505050505050565b6011546001600160a01b031615612a115760405162461bcd60e51b815260206004820152602a60248201527f4678426173654368696c6454756e6e656c3a20524f4f545f54554e4e454c5f4160448201526913149150511657d4d15560b21b6064820152608401610a7b565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b80612a715760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b6044820152606401610a7b565b60008181526009602052604090205415612ac45760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b6044820152606401610a7b565b6000818152600a602052604090205460ff1615612b195760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b6044820152606401610a7b565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610d399083815260200190565b600080612b6983856132ce565b9050604051811115612b79575060005b80600003612b8e5762ffffff19915050611b3d565b6127ed858585612e54565b6000612ba6826020613586565b612bb190600861359f565b60ff16612bbf858585612bda565b901c949350505050565b600061167c62ffffff198316602c60205b60008160ff16600003612bef57506000611b3d565b612c028460181c6001600160601b031690565b6001600160601b0316612c1860ff8416856132ce565b1115612c8057612c318460781c6001600160601b031690565b612c448560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610a7b565b60208260ff161115612ca55760405163045df3f960e01b815260040160405180910390fd5b600882026000612cbe8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612cfb8660781c6001600160601b031690565b6001600160601b03169050612d0f86612ecb565b84612d1a87846132ce565b612d2491906132ce565b1115612d375762ffffff19915050612d59565b612d4185826132ce565b9050612d558364ffffffffff168286612b5c565b9150505b949350505050565b600062ffffff1980841603612d895760405163148d513360e21b815260040160405180910390fd5b612d9283612f04565b15612db057604051632ee0949160e11b815260040160405180910390fd5b6000612dc58460181c6001600160601b031690565b6001600160601b031690506000612de58560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115612e065760206060fd5b8386858560045afa905080612e2e57604051632af1bd9b60e21b815260040160405180910390fd5b612e49612e3b8860d81c90565b64ffffffffff168786612e54565b979650505050505050565b60006060601883856001600160601b03821682148015612e7c575086816001600160601b0316145b612eb55760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610a7b565b96831b90961790911b90941790931b9392505050565b6000612ee08260181c6001600160601b031690565b612ef38360781c6001600160601b031690565b016001600160601b03169050919050565b6000612f108260d81c90565b64ffffffffff1664ffffffffff03612f2a57506001919050565b6000612f3583612ecb565b604051109392505050565b600060208284031215612f5257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612f8057600080fd5b813567ffffffffffffffff80821115612f9b57612f9b612f59565b604051601f8301601f19908116603f01168101908282118183101715612fc357612fc3612f59565b81604052838152866020858801011115612fdc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561300e57600080fd5b813567ffffffffffffffff81111561302557600080fd5b612d5984828501612f6f565b634e487b7160e01b600052602160045260246000fd5b602081016003831061306957634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806000610460868803121561308857600080fd5b853567ffffffffffffffff808211156130a057600080fd5b818801915088601f8301126130b457600080fd5b8135818111156130c357600080fd5b8960208260051b85010111156130d857600080fd5b6020928301975095505086013592506104408601878111156130f957600080fd5b94979396509194604001933592915050565b80356001600160a01b038116811461312257600080fd5b919050565b60006020828403121561313957600080fd5b611b3d8261310b565b6000806000806060858703121561315857600080fd5b843593506131686020860161310b565b9250604085013567ffffffffffffffff8082111561318557600080fd5b818701915087601f83011261319957600080fd5b8135818111156131a857600080fd5b8860208285010111156131ba57600080fd5b95989497505060200194505050565b803563ffffffff8116811461312257600080fd5b6000602082840312156131ef57600080fd5b611b3d826131c9565b60008060006060848603121561320d57600080fd5b613216846131c9565b925060208401359150604084013567ffffffffffffffff81111561323957600080fd5b61324586828701612f6f565b9150509250925092565b60005b8381101561326a578181015183820152602001613252565b50506000910152565b6000815180845261328b81602086016020860161324f565b601f01601f19169290920160200192915050565b828152604060208201526000611b3a6040830184613273565b634e487b7160e01b600052601160045260246000fd5b8082018082111561167c5761167c6132b8565b6000602082840312156132f357600080fd5b5051919050565b60608152600061330d6060830186613273565b828103602084015261331f8186613273565b91505060018060a01b0383166040830152949350505050565b60408152600061334b6040830185613273565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e1983360301811261338f57600080fd5b9190910192915050565b6000808335601e198436030181126133b057600080fd5b83018035915067ffffffffffffffff8211156133cb57600080fd5b6020019150368190038213156133e057600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561340957600080fd5b81518015158114611b3d57600080fd5b8181038181111561167c5761167c6132b8565b600063ffffffff808316818103613445576134456132b8565b6001019392505050565b6000806040838503121561346257600080fd5b505080516020909101519092909150565b8481528360208201528260408201526080606082015260006134986080830184613273565b9695505050505050565b600063ffffffff8087168352808616602084015250836040830152608060608301526134986080830184613273565b83815282151560208201526060604082015260006127ed6060830184613273565b80516020808301519190811015613513576000198160200360031b1b821691505b50919050565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c830152825161356181604c85016020870161324f565b91909101604c01979650505050505050565b602081526000611b3d6020830184613273565b60ff828116828216039081111561167c5761167c6132b8565b60ff81811683821602908116908181146135bb576135bb6132b8565b509291505056fea2646970667358221220b6edae06494dd48d99fd1393de6c6a9203028115008d2d15d85a6e887403494d64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2CD JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x175 JUMPI DUP1 PUSH4 0xB697F531 GT PUSH2 0xDC JUMPI DUP1 PUSH4 0xD2A3CC71 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xD88BEDA2 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xD88BEDA2 EQ PUSH2 0x972 JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x9A6 JUMPI DUP1 PUSH4 0xE0FED010 EQ PUSH2 0x9C6 JUMPI DUP1 PUSH4 0xFA31DE01 EQ PUSH2 0x9E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD2A3CC71 EQ PUSH2 0x908 JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x928 JUMPI DUP1 PUSH4 0xD7D317B3 EQ PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB697F531 EQ PUSH2 0x843 JUMPI DUP1 PUSH4 0xB95A2001 EQ PUSH2 0x863 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x896 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x8AB JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x8CB JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x8E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9FA92F9D GT PUSH2 0x12E JUMPI DUP1 PUSH4 0x9FA92F9D EQ PUSH2 0x786 JUMPI DUP1 PUSH4 0xA01892A5 EQ PUSH2 0x799 JUMPI DUP1 PUSH4 0xA792C29B EQ PUSH2 0x7CD JUMPI DUP1 PUSH4 0xAD9C0C2E EQ PUSH2 0x7ED JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x803 JUMPI DUP1 PUSH4 0xB2F87643 EQ PUSH2 0x823 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x6A3 JUMPI DUP1 PUSH4 0x8D3638F4 EQ PUSH2 0x6B8 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x6EB JUMPI DUP1 PUSH4 0x98C9F2B9 EQ PUSH2 0x709 JUMPI DUP1 PUSH4 0x9A7C4B71 EQ PUSH2 0x739 JUMPI DUP1 PUSH4 0x9D3117C7 EQ PUSH2 0x759 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B GT PUSH2 0x234 JUMPI DUP1 PUSH4 0x6159ADA1 GT PUSH2 0x1ED JUMPI DUP1 PUSH4 0x6A42B8F8 GT PUSH2 0x1C7 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x638 JUMPI DUP1 PUSH4 0x6B04A933 EQ PUSH2 0x64E JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x66E JUMPI DUP1 PUSH4 0x7F1E9CB0 EQ PUSH2 0x683 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6159ADA1 EQ PUSH2 0x5D3 JUMPI DUP1 PUSH4 0x65EAF11B EQ PUSH2 0x603 JUMPI DUP1 PUSH4 0x68742DA6 EQ PUSH2 0x618 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B EQ PUSH2 0x4E6 JUMPI DUP1 PUSH4 0x572386CA EQ PUSH2 0x51A JUMPI DUP1 PUSH4 0x579C1618 EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x560 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x580 JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x59F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3CF52FFB GT PUSH2 0x286 JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x41B JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x430 JUMPI DUP1 PUSH4 0x450D11F0 EQ PUSH2 0x445 JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x47D JUMPI DUP1 PUSH4 0x508A109B EQ PUSH2 0x49D JUMPI DUP1 PUSH4 0x5190BC53 EQ PUSH2 0x4BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x2D9 JUMPI DUP1 PUSH4 0x1EEAABEA EQ PUSH2 0x327 JUMPI DUP1 PUSH4 0x25E3BEDA EQ PUSH2 0x349 JUMPI DUP1 PUSH4 0x2BB1AE7C EQ PUSH2 0x38B JUMPI DUP1 PUSH4 0x2BBD59CA EQ PUSH2 0x39E JUMPI DUP1 PUSH4 0x301F07C3 EQ PUSH2 0x3DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x2D4 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30D PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x333 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x342 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F40 JUMP JUMPDEST PUSH2 0xA14 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x355 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37D PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x31E JUMP JUMPDEST PUSH2 0x347 PUSH2 0x399 CALLDATASIZE PUSH1 0x4 PUSH2 0x2FFC JUMP JUMPDEST PUSH2 0xABE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CE PUSH2 0x3B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F40 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x31E SWAP2 SWAP1 PUSH2 0x3047 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40B PUSH2 0x3F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F40 JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x31E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x427 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x37D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x43C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0xC61 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x451 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x10 SLOAD PUSH2 0x465 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x31E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x489 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x498 CALLDATASIZE PUSH1 0x4 PUSH2 0x2FFC JUMP JUMPDEST PUSH2 0xC9E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x4B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x306F JUMP JUMPDEST PUSH2 0xD44 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40B PUSH2 0x4D8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3127 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30D PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x526 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40B PUSH2 0x535 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F40 JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x556 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37D PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x56C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x57B CALLDATASIZE PUSH1 0x4 PUSH2 0x3127 JUMP JUMPDEST PUSH2 0x1006 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x40B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x465 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40B PUSH2 0x5EE CALLDATASIZE PUSH1 0x4 PUSH2 0x3127 JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x60F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37D PUSH2 0x103D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x624 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x633 CALLDATASIZE PUSH1 0x4 PUSH2 0x3127 JUMP JUMPDEST PUSH2 0x10C6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x644 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x37D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x65A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x669 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F40 JUMP JUMPDEST PUSH2 0x1143 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x67A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x120E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x68F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x11 SLOAD PUSH2 0x465 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x1239 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x0 PUSH2 0x30D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x465 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x715 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40B PUSH2 0x724 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F40 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x745 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x754 CALLDATASIZE PUSH1 0x4 PUSH2 0x3142 JUMP JUMPDEST PUSH2 0x12ED JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x765 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37D PUSH2 0x774 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F40 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x792 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH2 0x465 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x465 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x465 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37D PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x80F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x81E CALLDATASIZE PUSH1 0x4 PUSH2 0x3127 JUMP JUMPDEST PUSH2 0x1398 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x82F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x83E CALLDATASIZE PUSH1 0x4 PUSH2 0x3127 JUMP JUMPDEST PUSH2 0x1436 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x84F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x85E CALLDATASIZE PUSH1 0x4 PUSH2 0x3127 JUMP JUMPDEST PUSH2 0x14B2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x86F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30D PUSH2 0x87E CALLDATASIZE PUSH1 0x4 PUSH2 0x31DD JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x1531 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x465 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x465 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x40B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x914 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x923 CALLDATASIZE PUSH1 0x4 PUSH2 0x3127 JUMP JUMPDEST PUSH2 0x15A1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x934 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x465 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x968 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37D PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x97E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37D PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40B PUSH2 0x9C1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3127 JUMP JUMPDEST PUSH2 0x1678 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x347 PUSH2 0x9E1 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F40 JUMP JUMPDEST PUSH2 0x1682 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA06 PUSH2 0xA01 CALLDATASIZE PUSH1 0x4 PUSH2 0x31F8 JUMP JUMPDEST PUSH2 0x16B6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x31E SWAP3 SWAP2 SWAP1 PUSH2 0x329F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA3F JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD DUP2 SUB PUSH2 0xA84 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2164656C6179426C6F636B73 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLER DUP2 MSTORE DUP2 SWAP1 PUSH32 0x8BD16320F3B60336ED5FD2A770EB7453E7E71CFEF4462ADDFFD7AE9DFE201C8E SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x8 SSTORE JUMP JUMPDEST PUSH2 0xAC6 PUSH2 0x18EE JUMP JUMPDEST NUMBER PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD PUSH2 0xAD7 SWAP2 SWAP1 PUSH2 0x32CE JUMP JUMPDEST GT ISZERO PUSH2 0xAF6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x46CF2AF1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST NUMBER PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB5D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB81 SWAP2 SWAP1 PUSH2 0x32E1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xBD7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1C9BDBDD08185B1C9958591E481CD95B9D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xBEC SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH2 0xC07 DUP2 DUP5 PUSH2 0x193B JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 SWAP1 PUSH2 0xC54 SWAP1 DUP4 SWAP1 DUP7 SWAP1 CALLER SWAP1 PUSH2 0x32FA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC8C JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xC94 PUSH2 0x1986 JUMP JUMPDEST PUSH2 0xC9C PUSH2 0x19D6 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xCFF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA7B SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0xD08 DUP2 PUSH2 0x1A2B JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0xD39 SWAP3 SWAP2 SWAP1 PUSH2 0x3338 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xD4C PUSH2 0x18EE JUMP JUMPDEST PUSH2 0xD54 PUSH2 0x1A44 JUMP JUMPDEST DUP4 PUSH2 0xD8B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x2170726F6F6673 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xDA0 JUMPI PUSH2 0xDA0 PUSH2 0x3362 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xDB2 SWAP2 SWAP1 PUSH2 0x3378 JUMP JUMPDEST PUSH2 0xDBC SWAP1 DUP1 PUSH2 0x3399 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDCA SWAP3 SWAP2 SWAP1 PUSH2 0x33E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xE31 DUP3 DUP9 DUP9 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xDED JUMPI PUSH2 0xDED PUSH2 0x3362 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xDFF SWAP2 SWAP1 PUSH2 0x3378 JUMP JUMPDEST PUSH1 0x20 ADD DUP10 DUP10 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xE15 JUMPI PUSH2 0xE15 PUSH2 0x3362 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE27 SWAP2 SWAP1 PUSH2 0x3378 JUMP JUMPDEST PUSH2 0x420 ADD CALLDATALOAD PUSH2 0x1A9D JUMP JUMPDEST SWAP1 POP PUSH2 0xE3F DUP2 DUP7 DUP7 DUP7 PUSH2 0x1B44 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP7 SWAP1 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xF65 JUMPI DUP9 DUP9 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xE84 JUMPI PUSH2 0xE84 PUSH2 0x3362 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE96 SWAP2 SWAP1 PUSH2 0x3378 JUMP JUMPDEST PUSH2 0xEA0 SWAP1 DUP1 PUSH2 0x3399 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEAE SWAP3 SWAP2 SWAP1 PUSH2 0x33E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP4 POP PUSH1 0x0 PUSH2 0xF03 DUP6 DUP12 DUP12 DUP6 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xED6 JUMPI PUSH2 0xED6 PUSH2 0x3362 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xEE8 SWAP2 SWAP1 PUSH2 0x3378 JUMP JUMPDEST PUSH1 0x20 ADD DUP13 DUP13 DUP7 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xE15 JUMPI PUSH2 0xE15 PUSH2 0x3362 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0xF42 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x85CDA185C9959149BDBDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE ADD PUSH2 0xE5E JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xFF1 JUMPI PUSH2 0xFE8 DUP10 DUP10 DUP4 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xF92 JUMPI PUSH2 0xF92 PUSH2 0x3362 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xFA4 SWAP2 SWAP1 PUSH2 0x3378 JUMP JUMPDEST PUSH2 0xFAE SWAP1 DUP1 PUSH2 0x3399 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1C3E SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xF69 JUMP JUMPDEST POP POP POP POP PUSH2 0xFFF PUSH1 0x1 PUSH1 0x7 SSTORE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1031 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x103A DUP2 PUSH2 0x1F1B JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x109D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10C1 SWAP2 SWAP1 PUSH2 0x32E1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10F1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SELFBALANCE PUSH2 0x10FC DUP3 DUP3 PUSH2 0x1F2D JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEAFF4B37086828766AD3268786972C0CD24259D4C87A80F9D3963A3C3D999B0D DUP3 PUSH1 0x40 MLOAD PUSH2 0x1137 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x116E JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1176 PUSH2 0x1986 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SUB PUSH2 0x11CB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x616767726567617465526F6F742021657869737473 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xF51534ECF10A58DB36CE4F5180F59DEDDF3B3EB7C5E7454E602C2F80A40CC739 SWAP1 PUSH2 0xD39 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC9C JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1282 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12A6 SWAP2 SWAP1 PUSH2 0x33F7 JUMP JUMPDEST PUSH2 0x12DD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH2 0x12E5 PUSH2 0x18EE JUMP JUMPDEST PUSH2 0xC9C PUSH2 0x204B JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1351 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4678426173654368696C6454756E6E656C3A20494E56414C49445F53454E4445 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0xF9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH2 0x1392 DUP5 DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x208E SWAP3 POP POP POP JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x13C3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x13E1 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x13FF JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x142D JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x103A DUP2 PUSH2 0x218C JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1461 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x384859C5EF5FAFAC31E8BC92CE7FB48B1F2C74C4DD5E212EB84EC202FA5D9FAD SWAP2 ADD PUSH2 0xD39 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x14DD JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xD65ECA5D561D3A4568C87B9B13CED4AB52A69EDADFDFDB22D76BC595F36D7D87 SWAP2 ADD PUSH2 0xD39 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x155C JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x156E SWAP2 SWAP1 PUSH2 0x3419 JUMP JUMPDEST GT PUSH2 0x158C JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0xC9C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x21DA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x15CC JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0x162A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616C72656164792077617463686572206D616E61676572000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC16D059E43D7F8E29CCB4E001A2F249D3C59E274925D6A6BC3912943441D9F6C SWAP1 PUSH1 0x20 ADD PUSH2 0xD39 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x16AD JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x103A DUP2 PUSH2 0x223F JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x60 SWAP1 PUSH1 0xFF AND PUSH2 0x1707 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x8585B1B1BDDDB1A5CDD1959 PUSH1 0xA2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP3 PUSH2 0x1730 DUP4 PUSH2 0x342C JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH4 0xFFFFFFFF AND MUL OR SWAP1 SSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0x178F PUSH32 0x0 PUSH2 0x1786 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP5 DUP11 DUP11 DUP11 PUSH2 0x22BD JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH4 0x2D287E43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2D287E43 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1805 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1829 SWAP2 SWAP1 PUSH2 0x344F JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH32 0x40F08EE347FC927AE45902EDC87DEBB024AAB1A311943731968607F603F2152F DUP4 PUSH2 0x185B PUSH1 0x1 DUP5 PUSH2 0x3419 JUMP JUMPDEST DUP5 DUP8 PUSH1 0x40 MLOAD PUSH2 0x186D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3473 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP SWAP1 SWAP9 SWAP2 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xC9C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1979 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH2 0x1982 DUP3 PUSH2 0x22F5 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xC9C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH2 0x19DE PUSH2 0x1986 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x16C2FDB5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x7 SLOAD SUB PUSH2 0x1A96 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1AC3 JUMPI PUSH2 0x1AC3 PUSH2 0x3031 JUMP JUMPDEST EQ PUSH2 0x1B06 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x214D6573736167655374617475732E4E6F6E65 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH2 0x1B3A DUP5 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x2324 SWAP1 POP JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1392 JUMPI PUSH2 0x1B63 DUP4 PUSH2 0x2672 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B99 DUP6 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x2324 SWAP1 POP JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0x1BE0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1A5B9D985B1A59081A5B989BDD5B99149BDBDD PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP5 SWAP1 DUP7 SWAP1 PUSH32 0x7EC1EA51FE3DB53E55ED9D922854BC2156F467FF2F87D74E2086DAE2C84A88A8 SWAP1 PUSH2 0x1C2F SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1C4B DUP4 DUP3 PUSH2 0x27D2 JUMP JUMPDEST SWAP1 POP PUSH4 0xFFFFFFFF PUSH32 0x0 AND PUSH2 0x1C83 PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x27F6 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x1CC5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B232B9BA34B730BA34B7B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CD6 PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x280B JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1CFD JUMPI PUSH2 0x1CFD PUSH2 0x3031 JUMP JUMPDEST EQ PUSH2 0x1D34 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x10B83937BB32B7 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x2 OR SWAP1 SSTORE PUSH1 0x1 PUSH2 0x1D99 PUSH32 0x0 PUSH32 0x0 PUSH2 0x32CE JUMP JUMPDEST PUSH2 0x1DA3 SWAP2 SWAP1 PUSH2 0x3419 JUMP JUMPDEST GAS GT PUSH2 0x1DDA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA7B SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x21676173 PUSH1 0xE0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DEB PUSH3 0xFFFFFF NOT DUP5 AND PUSH2 0x2854 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH32 0x0 SWAP2 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x1E46 PUSH3 0xFFFFFF NOT DUP9 AND PUSH2 0x2865 JUMP JUMPDEST PUSH2 0x1E55 PUSH3 0xFFFFFF NOT DUP10 AND PUSH2 0x2879 JUMP JUMPDEST PUSH2 0x1E64 PUSH3 0xFFFFFF NOT DUP11 AND PUSH2 0x288E JUMP JUMPDEST PUSH2 0x1E81 PUSH2 0x1E76 PUSH3 0xFFFFFF NOT DUP13 AND PUSH2 0x28A3 JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND PUSH2 0x28D1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1E94 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x34A2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xAB2DC3F5 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 POP PUSH2 0x1ECE DUP6 DUP6 PUSH1 0x0 DUP7 DUP6 PUSH2 0x291A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP10 POP SWAP3 POP PUSH32 0xD42DE95A9B26F1BE134C8ECCE389DC4FCFA18753D01661B7B361233569E8FE48 SWAP1 PUSH2 0x1F07 SWAP1 DUP9 SWAP1 DUP12 SWAP1 DUP7 SWAP1 PUSH2 0x34D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1F24 DUP2 PUSH2 0x1885 JUMP JUMPDEST PUSH2 0x103A DUP2 PUSH2 0x29A5 JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x1F7D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1FCA JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1FCF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2046 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA7B JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x2053 PUSH2 0x18EE JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x1A0E CALLER SWAP1 JUMP JUMPDEST PUSH1 0x11 SLOAD DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND EQ PUSH2 0x2101 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4678426173654368696C6454756E6E656C3A20494E56414C49445F53454E4445 PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x1497D19493D357D493D3D5 PUSH1 0xAA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA7B JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0x213C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH2 0x214D PUSH2 0x2148 DUP4 PUSH2 0x34F2 JUMP JUMPDEST PUSH2 0x2A33 JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP3 CALLER PUSH1 0x40 MLOAD PUSH2 0x217E SWAP3 SWAP2 SWAP1 PUSH2 0x3338 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 SUB PUSH2 0x2282 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x85B995DC81C985D19481B1A5B5A5D PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0x8E7FA5E406CB856AAB05575E45EA011C6748376CC1B5229E3D67B92986406A15 SWAP2 ADD PUSH2 0xD39 JUMP JUMPDEST PUSH1 0x60 DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x22DA SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3519 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x8C5261668696CE22758910D05BAB8F186D6EB247CEAC2AF2E82C7DC17669B036 DUP2 PUSH1 0x40 MLOAD PUSH2 0xD39 SWAP2 SWAP1 PUSH2 0x3573 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x5 DUP3 DUP2 SHL DUP3 AND SWAP5 DUP6 MSTORE DUP4 MLOAD SWAP5 DUP3 SUB SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x40 PUSH1 0x0 DUP2 DUP2 KECCAK256 PUSH1 0x2 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x4 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP3 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x8 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x10 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 DUP5 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 DUP4 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 SWAP1 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xE0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x100 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x200 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x120 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x400 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x140 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x800 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x160 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x1000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x2000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x4000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1C0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x8000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1E0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH3 0x10000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x20000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x220 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x40000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x240 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x80000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x260 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x100000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x280 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x200000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x400000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x800000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2E0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x1000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x300 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x2000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x320 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x4000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x340 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x8000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x360 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x10000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x380 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x20000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x40000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x80000000 SWAP1 SWAP5 AND ISZERO SWAP1 SWAP6 SHL SWAP2 DUP3 SWAP1 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x3E0 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x26B5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x616767726567617465526F6F7420656D707479 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x26CF JUMPI POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x2725 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x1859D9DC9959D85D19549BDBDD0808595E1A5CDD PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x2732 DUP3 NUMBER PUSH2 0x3419 JUMP JUMPDEST LT ISZERO PUSH2 0x2780 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616767726567617465526F6F7420217665726966696564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP4 SWAP2 PUSH32 0x36B314ABA9F663B4D3EF3288AE489341CC5E6A2725A05FA2B72DF7A27E03F42A SWAP2 LOG2 POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0x27ED PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x2B5C JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x167C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x28 PUSH1 0x4 PUSH2 0x2B99 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2821 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2841 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 SWAP2 KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x167C PUSH2 0x2862 DUP4 PUSH2 0x2BC9 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x167C PUSH3 0xFFFFFF NOT DUP4 AND DUP3 PUSH1 0x4 PUSH2 0x2B99 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x167C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x24 PUSH1 0x4 PUSH2 0x2B99 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x167C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x4 PUSH1 0x20 PUSH2 0x2BDA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x167C PUSH1 0x4C PUSH2 0x28C1 DUP2 PUSH1 0x18 DUP7 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x3419 JUMP JUMPDEST PUSH3 0xFFFFFF NOT DUP6 AND SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2CE5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x28E9 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x40 MLOAD SWAP2 POP DUP2 SWAP3 POP PUSH2 0x2909 DUP5 DUP4 PUSH1 0x20 ADD PUSH2 0x2D61 JUMP JUMPDEST POP DUP2 DUP2 ADD PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH2 0xFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2940 JUMPI PUSH2 0x2940 PUSH2 0x2F59 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x296A JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP8 MLOAD PUSH1 0x20 DUP10 ADD DUP12 DUP15 DUP15 CALL SWAP2 POP RETURNDATASIZE SWAP3 POP DUP7 DUP4 GT ISZERO PUSH2 0x298B JUMPI DUP7 SWAP3 POP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x2A11 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4678426173654368696C6454756E6E656C3A20524F4F545F54554E4E454C5F41 PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x13149150511657D4D155 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x11 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 PUSH2 0x2A71 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x6E657720726F6F7420656D707479 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x2AC4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x726F6F7420616C72656164792070656E64696E67 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2B19 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x3937B7BA1030B63932B0B23C90383937BB32B7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 NUMBER SWAP1 SSTORE MLOAD PUSH32 0x84EF18531155AFDB0E64FF905D67044AE3AAC63A6FBA4661CFD9C4C14F289BC8 SWAP1 PUSH2 0xD39 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2B69 DUP4 DUP6 PUSH2 0x32CE JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x2B79 JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x2B8E JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x1B3D JUMP JUMPDEST PUSH2 0x27ED DUP6 DUP6 DUP6 PUSH2 0x2E54 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BA6 DUP3 PUSH1 0x20 PUSH2 0x3586 JUMP JUMPDEST PUSH2 0x2BB1 SWAP1 PUSH1 0x8 PUSH2 0x359F JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x2BBF DUP6 DUP6 DUP6 PUSH2 0x2BDA JUMP JUMPDEST SWAP1 SHR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x167C PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x2C PUSH1 0x20 JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0x2BEF JUMPI POP PUSH1 0x0 PUSH2 0x1B3D JUMP JUMPDEST PUSH2 0x2C02 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x2C18 PUSH1 0xFF DUP5 AND DUP6 PUSH2 0x32CE JUMP JUMPDEST GT ISZERO PUSH2 0x2C80 JUMPI PUSH2 0x2C31 DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2C44 DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x2CA5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0x2CBE DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT DUP5 ADD SAR SWAP2 SWAP1 SWAP6 ADD MLOAD AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2CFB DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH2 0x2D0F DUP7 PUSH2 0x2ECB JUMP JUMPDEST DUP5 PUSH2 0x2D1A DUP8 DUP5 PUSH2 0x32CE JUMP JUMPDEST PUSH2 0x2D24 SWAP2 SWAP1 PUSH2 0x32CE JUMP JUMPDEST GT ISZERO PUSH2 0x2D37 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x2D59 JUMP JUMPDEST PUSH2 0x2D41 DUP6 DUP3 PUSH2 0x32CE JUMP JUMPDEST SWAP1 POP PUSH2 0x2D55 DUP4 PUSH5 0xFFFFFFFFFF AND DUP3 DUP7 PUSH2 0x2B5C JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFFFFFF NOT DUP1 DUP5 AND SUB PUSH2 0x2D89 JUMPI PUSH1 0x40 MLOAD PUSH4 0x148D5133 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2D92 DUP4 PUSH2 0x2F04 JUMP JUMPDEST ISZERO PUSH2 0x2DB0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EE09491 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2DC5 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2DE5 DUP6 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD SWAP2 POP DUP6 DUP3 GT ISZERO PUSH2 0x2E06 JUMPI PUSH1 0x20 PUSH1 0x60 REVERT JUMPDEST DUP4 DUP7 DUP6 DUP6 PUSH1 0x4 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x2E2E JUMPI PUSH1 0x40 MLOAD PUSH4 0x2AF1BD9B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2E49 PUSH2 0x2E3B DUP9 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND DUP8 DUP7 PUSH2 0x2E54 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0x2E7C JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0x2EB5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA7B JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EE0 DUP3 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2EF3 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F10 DUP3 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH5 0xFFFFFFFFFF SUB PUSH2 0x2F2A JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F35 DUP4 PUSH2 0x2ECB JUMP JUMPDEST PUSH1 0x40 MLOAD LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2F52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2F80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2F9B JUMPI PUSH2 0x2F9B PUSH2 0x2F59 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x2FC3 JUMPI PUSH2 0x2FC3 PUSH2 0x2F59 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x2FDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x300E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3025 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2D59 DUP5 DUP3 DUP6 ADD PUSH2 0x2F6F JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH2 0x3069 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x460 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3088 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x30A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x30B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x30C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x30D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 DUP4 ADD SWAP8 POP SWAP6 POP POP DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x440 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x30F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x40 ADD SWAP4 CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B3D DUP3 PUSH2 0x310B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3158 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH2 0x3168 PUSH1 0x20 DUP7 ADD PUSH2 0x310B JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x3185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3199 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x31A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x31BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP POP PUSH1 0x20 ADD SWAP5 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x31EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B3D DUP3 PUSH2 0x31C9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x320D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3216 DUP5 PUSH2 0x31C9 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3245 DUP7 DUP3 DUP8 ADD PUSH2 0x2F6F JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x326A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3252 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x328B DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x324F JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1B3A PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x3273 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x167C JUMPI PUSH2 0x167C PUSH2 0x32B8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x32F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x330D PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x3273 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x331F DUP2 DUP7 PUSH2 0x3273 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x334B PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x3273 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x43E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x338F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x33B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x33CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x33E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3409 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1B3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x167C JUMPI PUSH2 0x167C PUSH2 0x32B8 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x3445 JUMPI PUSH2 0x3445 PUSH2 0x32B8 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3462 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x3498 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x3273 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3498 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x3273 JUMP JUMPDEST DUP4 DUP2 MSTORE DUP3 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x27ED PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x3273 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x3513 JUMPI PUSH1 0x0 NOT DUP2 PUSH1 0x20 SUB PUSH1 0x3 SHL SHL DUP3 AND SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP1 DUP10 PUSH1 0xE0 SHL AND DUP4 MSTORE DUP8 PUSH1 0x4 DUP5 ADD MSTORE DUP1 DUP8 PUSH1 0xE0 SHL AND PUSH1 0x24 DUP5 ADD MSTORE DUP1 DUP7 PUSH1 0xE0 SHL AND PUSH1 0x28 DUP5 ADD MSTORE POP DUP4 PUSH1 0x2C DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x3561 DUP2 PUSH1 0x4C DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x324F JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x4C ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1B3D PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3273 JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x167C JUMPI PUSH2 0x167C PUSH2 0x32B8 JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND MUL SWAP1 DUP2 AND SWAP1 DUP2 DUP2 EQ PUSH2 0x35BB JUMPI PUSH2 0x35BB PUSH2 0x32B8 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB6 0xED 0xAE MOD 0x49 0x4D 0xD4 DUP14 SWAP10 REVERT SGT SWAP4 0xDE PUSH13 0x6A9203028115008D2D15D85A6E DUP9 PUSH21 0x3494D64736F6C6343000811003300000000000000 ","sourceMap":"708:2304:140:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1587:37:116;;;;;;;;;;;;;;;;;;188:10:181;176:23;;;158:42;;146:2;131:18;1587:37:116;;;;;;;;8274:213:120;;;;;;;;;;-1:-1:-1;8274:213:120;;;;;:::i;:::-;;:::i;:::-;;3780:36;;;;;;;;;;;;;;;;;;542:25:181;;;530:2;515:18;3780:36:120;396:177:181;11079:368:120;;;;;;:::i;:::-;;:::i;5679:49::-;;;;;;;;;;-1:-1:-1;5679:49:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;4723:52::-;;;;;;;;;;-1:-1:-1;4723:52:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2592:14:181;;2585:22;2567:41;;2555:2;2540:18;4723:52:120;2427:187:181;1949:112:168;;;;;;;;;;-1:-1:-1;2029:27:168;;1949:112;;1810:70:114;;;;;;;;;;;;;:::i;622:22:145:-;;;;;;;;;;-1:-1:-1;622:22:145;;;;-1:-1:-1;;;;;622:22:145;;;;;;-1:-1:-1;;;;;2783:32:181;;;2765:51;;2753:2;2738:18;622:22:145;2619:203:181;4262:148:116;;;;;;;;;;-1:-1:-1;4262:148:116;;;;;:::i;:::-;;:::i;14590:2124:120:-;;;;;;;;;;-1:-1:-1;14590:2124:120;;;;;:::i;:::-;;:::i;805:125:117:-;;;;;;;;;;-1:-1:-1;805:125:117;;;;;:::i;:::-;-1:-1:-1;;;;;891:34:117;920:4;891:34;;805:125;1268:30:116;;;;;;;;;;;;;;;5237:48:120;;;;;;;;;;-1:-1:-1;5237:48:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;853:30:167;;;;;;;;;;;;;;;;3939:119:116;;;;;;;;;;-1:-1:-1;3939:119:116;;;;;:::i;:::-;;:::i;1615:84:51:-;;;;;;;;;;-1:-1:-1;1685:7:51;;-1:-1:-1;;;1685:7:51;;;;1615:84;;1451:37:116;;;;;;;;;;;;;;;5424:50:120;;;;;;;;;;-1:-1:-1;5424:50:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;10615:87;;;;;;;;;;;;;:::i;9896:185::-;;;;;;;;;;-1:-1:-1;9896:185:120;;;;;:::i;:::-;;:::i;2151:79:168:-;;;;;;;;;;-1:-1:-1;1530:6:168;2151:79;;9312:328:120;;;;;;;;;;-1:-1:-1;9312:328:120;;;;;:::i;:::-;;:::i;10330:97::-;;;;;;;;;;;;;:::i;669:27:145:-;;;;;;;;;;-1:-1:-1;669:27:145;;;;-1:-1:-1;;;;;669:27:145;;;2321:71:114;;;;;;;;;;;;;:::i;10853:87:120:-;;;;;;;;;;-1:-1:-1;10929:6:120;10853:87;;1641:79:168;;;;;;;;;;-1:-1:-1;1687:7:168;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;5017:50:120;;;;;;;;;;-1:-1:-1;5017:50:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;1199:272:145;;;;;;;;;;-1:-1:-1;1199:272:145;;;;;:::i;:::-;;:::i;4312:56:120:-;;;;;;;;;;-1:-1:-1;4312:56:120;;;;;:::i;:::-;;;;;;;;;;;;;;715:86:117;;;;;;;;;;-1:-1:-1;790:4:117;715:86;;3501:41:120;;;;;;;;;;;;;;;911:36:114;;;;;;;;;;-1:-1:-1;911:36:114;;;;-1:-1:-1;;;;;911:36:114;;;3276:26:120;;;;;;;;;;;;;;;;3321:420:168;;;;;;;;;;-1:-1:-1;3321:420:168;;;;;:::i;:::-;;:::i;8018:134:120:-;;;;;;;;;;-1:-1:-1;8018:134:120;;;;;:::i;:::-;;:::i;7757:129::-;;;;;;;;;;-1:-1:-1;7757:129:120;;;;;:::i;:::-;;:::i;5551:39::-;;;;;;;;;;-1:-1:-1;5551:39:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;4404:539:168;;;;;;;;;;;;;:::i;1705:30:116:-;;;;;;;;;;-1:-1:-1;1705:30:116;;;;-1:-1:-1;;;;;1705:30:116;;;1792:85:168;;;;;;;;;;-1:-1:-1;1863:9:168;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;;;;;;;;;;-1:-1:-1;3097:4:168;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;1457:263:114;;;;;;;;;;-1:-1:-1;1457:263:114;;;;;:::i;:::-;;:::i;1363:28:116:-;;;;;;;;;;;;;;;959::167;;;;;;;;;;;;;;;;3640:36:120;;;;;;;;;;;;;;;4490:107:116;;;;;;;;;;-1:-1:-1;4490:107:116;;;;;:::i;:::-;;:::i;8892::120:-;;;;;;;;;;-1:-1:-1;8892:107:120;;;;;:::i;:::-;;:::i;11954:1067::-;;;;;;;;;;-1:-1:-1;11954:1067:120;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;8274:213::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;8367:11:120::1;;8351:12;:27:::0;8343:52:::1;;;::::0;-1:-1:-1;;;8343:52:120;;7592:2:181;8343:52:120::1;::::0;::::1;7574:21:181::0;7631:2;7611:18;;;7604:30;-1:-1:-1;;;7650:18:181;;;7643:42;7702:18;;8343:52:120::1;;;;;;;;;8406:44;::::0;8439:10:::1;2765:51:181::0;;8425:12:120;;8406:44:::1;::::0;2753:2:181;2738:18;8406:44:120::1;;;;;;;8456:11;:26:::0;8274:213::o;11079:368::-;1239:19:51;:17;:19::i;:::-;1418:12:167::1;1400:15;;1384:13;;:31;;;;:::i;:::-;:46;1380:124;;;1447:50;;-1:-1:-1::0;;;1447:50:167::1;;;;;;;;;;;1380:124;1595:12;1579:13;:28;;;;11169:12:120::2;11184:6;-1:-1:-1::0;;;;;11184:11:120::2;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11211:22;::::0;;;:16:::2;:22;::::0;;;;;11169:28;;-1:-1:-1;11211:22:120::2;;:31;11203:61;;;::::0;-1:-1:-1;;;11203:61:120;;8384:2:181;11203:61:120::2;::::0;::::2;8366:21:181::0;8423:2;8403:18;;;8396:30;-1:-1:-1;;;8442:18:181;;;8435:47;8499:18;;11203:61:120::2;8182:341:181::0;11203:61:120::2;11270:18;11308:4;11291:22;;;;;;8657:19:181::0;;8701:2;8692:12;;8528:182;11291:22:120::2;;;;;;;;;;;;;11270:43;;11319:33;11332:5;11339:12;11319;:33::i;:::-;11358:22;::::0;;;:16:::2;:22;::::0;;;;;;:29;;-1:-1:-1;;11358:29:120::2;11383:4;11358:29;::::0;;11398:44;::::2;::::0;::::2;::::0;11410:5;;11417:12;;11431:10:::2;::::0;11398:44:::2;:::i;:::-;;;;;;;;11163:284;;11079:368:::0;:::o;1810:70:114:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1486:16:51::1;:14;:16::i;:::-;1865:10:114::2;:8;:10::i;:::-;1810:70::o:0;4262:148:116:-;1891:10;-1:-1:-1;;;;;1905:3:116;1891:17;;1883:34;;;;-1:-1:-1;;;1883:34:116;;;;;;9396:2:181;9378:21;;;9435:1;9415:18;;;9408:29;-1:-1:-1;;;9468:2:181;9453:18;;9446:34;9512:2;9497:18;;9194:327;1883:34:116;4337:22:::1;4353:5;4337:15;:22::i;:::-;4370:35;4387:5;4394:10;4370:35;;;;;;;:::i;:::-;;;;;;;;4262:148:::0;:::o;14590:2124:120:-;1239:19:51;:17;:19::i;:::-;2261:21:52::1;:19;:21::i;:::-;14839:18:120::0;14831:38:::2;;;::::0;-1:-1:-1;;;14831:38:120;;10047:2:181;14831:38:120::2;::::0;::::2;10029:21:181::0;10086:1;10066:18;;;10059:29;-1:-1:-1;;;10104:18:181;;;10097:37;10151:18;;14831:38:120::2;9845:330:181::0;14831:38:120::2;15122:20;15155:7;;15163:1;15155:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;15145:29;;;;;;;:::i;:::-;;;;;;;;15122:52;;15304:20;15327:69;15348:12;15362:7;;15370:1;15362:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:15;;15379:7;;15387:1;15379:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:16;;;15327:20;:69::i;:::-;15304:92;;15485:79;15502:12;15516:14;15532;15548:15;15485:16;:79::i;:::-;15667:22;::::0;;;:8:::2;:22;::::0;;;;:45;;-1:-1:-1;;15667:45:120::2;15692:20;15667:45:::0;;::::2;::::0;;;15852:7;;15872:441:::2;15895:3;15891:1;:7;;;15872:441;;;15935:7;;15943:1;15935:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;15925:29;;;;;;;:::i;:::-;;;;;;;;15910:44;;15962:23;15988:69;16009:12;16023:7;;16031:1;16023:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:15;;16040:7;;16048:1;16040:10;;;;;;;;;:::i;15988:69::-;15962:95;;16157:12;16138:15;:31;16130:55;;;::::0;-1:-1:-1;;;16130:55:120;;11646:2:181;16130:55:120::2;::::0;::::2;11628:21:181::0;11685:2;11665:18;;;11658:30;-1:-1:-1;;;11704:18:181;;;11697:41;11755:18;;16130:55:120::2;11444:335:181::0;16130:55:120::2;-1:-1:-1::0;16221:22:120::2;::::0;;;:8:::2;:22;::::0;;;;:45;;-1:-1:-1;;16221:45:120::2;16246:20;16221:45:::0;;::::2;::::0;;;16295:3:::2;15872:441;;;;16604:8;16599:111;16622:3;16618:1;:7;;;16599:111;;;16637:27;16645:7;;16653:1;16645:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;16637:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;16637:7:120::2;::::0;-1:-1:-1;;;16637:27:120:i:2;:::-;-1:-1:-1::0;16692:3:120::2;;16599:111;;;;14783:1931;;;2303:20:52::1;1716:1:::0;2809:7;:22;2629:209;2303:20:::1;14590:2124:120::0;;;;;:::o;3939:119:116:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4016:37:116::1;4036:16;4016:19;:37::i;:::-;3939:119:::0;:::o;10615:87:120:-;10662:7;10684:6;-1:-1:-1;;;;;10684:11:120;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10677:20;;10615:87;:::o;9896:185::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;9972:21:120::1;9999:39;10025:3:::0;9972:21;9999:17:::1;:39::i;:::-;10064:3;-1:-1:-1::0;;;;;10049:27:120::1;;10069:6;10049:27;;;;542:25:181::0;;530:2;515:18;;396:177;10049:27:120::1;;;;;;;;9949:132;9896:185:::0;:::o;9312:328::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1486:16:51::1;:14;:16::i;:::-;9467:38:120::2;::::0;;;:21:::2;:38;::::0;;;;;:43;;9459:77:::2;;;::::0;-1:-1:-1;;;9459:77:120;;11986:2:181;9459:77:120::2;::::0;::::2;11968:21:181::0;12025:2;12005:18;;;11998:30;-1:-1:-1;;;12044:18:181;;;12037:51;12105:18;;9459:77:120::2;11784:345:181::0;9459:77:120::2;9549:38;::::0;;;:21:::2;:38;::::0;;;;;9542:45;;;;9598:37;::::2;::::0;::::2;::::0;9571:15;542:25:181;;530:2;515:18;;396:177;10330:97:120;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2321:71:114;1251:14;;;:36;;-1:-1:-1;;;1251:36:114;;1276:10;1251:36;;;2765:51:181;;;;-1:-1:-1;;;;;1251:14:114;;:24;;2738:18:181;;1251:36:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1243:57;;;;-1:-1:-1;;;1243:57:114;;12618:2:181;1243:57:114;;;12600:21:181;12657:1;12637:18;;;12630:29;-1:-1:-1;;;12675:18:181;;;12668:38;12723:18;;1243:57:114;12416:331:181;1243:57:114;1239:19:51::1;:17;:19::i;:::-;2379:8:114::2;:6;:8::i;1199:272:145:-:0;1358:7;;-1:-1:-1;;;;;1358:7:145;1344:10;:21;1336:67;;;;-1:-1:-1;;;1336:67:145;;12954:2:181;1336:67:145;;;12936:21:181;12993:2;12973:18;;;12966:30;13032:34;13012:18;;;13005:62;-1:-1:-1;;;13083:18:181;;;13076:31;13124:19;;1336:67:145;12752:397:181;1336:67:145;1409:57;1433:7;1442:17;1461:4;;1409:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1409:23:145;;-1:-1:-1;;;1409:57:145:i;:::-;1199:272;;;;:::o;3321:420:168:-;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;8018:134:120:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;-1:-1:-1;;;;;8087:27:120;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;8080:34;;-1:-1:-1;;8080:34:120::1;::::0;;8125:22;;2765:51:181;;;8125:22:120::1;::::0;2738:18:181;8125:22:120::1;2619:203:181::0;7757:129:120;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;-1:-1:-1;;;;;7816:27:120;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;7816:34:120::1;7846:4;7816:34;::::0;;7861:20;;2765:51:181;;;7861:20:120::1;::::0;2738:18:181;7861:20:120::1;2619:203:181::0;4404:539:168;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;1457:263:114:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1569:14:114::1;::::0;-1:-1:-1;;;;;1569:14:114;;::::1;1542:42:::0;;::::1;::::0;1534:78:::1;;;::::0;-1:-1:-1;;;1534:78:114;;13489:2:181;1534:78:114::1;::::0;::::1;13471:21:181::0;13528:2;13508:18;;;13501:30;13567:25;13547:18;;;13540:53;13610:18;;1534:78:114::1;13287:347:181::0;1534:78:114::1;1618:14;:48:::0;;-1:-1:-1;;;;;;1618:48:114::1;-1:-1:-1::0;;;;;1618:48:114;::::1;::::0;;::::1;::::0;;;1677:38:::1;::::0;2765:51:181;;;1677:38:114::1;::::0;2753:2:181;2738:18;1677:38:114::1;2619:203:181::0;4490:107:116;4549:4;;4568:24;4561:31;4490:107;-1:-1:-1;;4490:107:116:o;8892::120:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;8963:31:120::1;8983:10;8963:19;:31::i;11954:1067::-:0;5841:10;12109:7;5822:30;;;:18;:30;;;;;;12118:12;;5822:30;;5814:55;;;;-1:-1:-1;;;5814:55:120;;13841:2:181;5814:55:120;;;13823:21:181;13880:2;13860:18;;;13853:30;-1:-1:-1;;;13899:18:181;;;13892:42;13951:18;;5814:55:120;13639:336:181;5814:55:120;12227:26:::1;::::0;;::::1;12211:13;12227:26:::0;;;:6:::1;:26;::::0;;;;:28;;12211:13;;12227:28;;;::::1;::::0;12211:13;12227:28:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12211:44;;12307:21;12331:172;12360:6;12374:38;12401:10;-1:-1:-1::0;;;;;335:23:173;;241:123;12374:38:120::1;12420:6;12434:18;12460:17;12485:12;12331:21;:172::i;:::-;12588:19:::0;;::::1;::::0;::::1;::::0;12749:27:::1;::::0;-1:-1:-1;;;12749:27:120;;::::1;::::0;::::1;542:25:181::0;;;12588:19:120;;-1:-1:-1;12588:19:120;12565:20:::1;::::0;;;12749:6:::1;-1:-1:-1::0;;;;;12749:13:120::1;::::0;::::1;::::0;515:18:181;;12749:27:120::1;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12715:61:::0;;-1:-1:-1;12715:61:120;-1:-1:-1;12928:51:120::1;12937:12:::0;12951:10:::1;12960:1;12715:61:::0;12951:10:::1;:::i;:::-;12963:5;12970:8;12928:51;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;12993:12:120;;13007:8;;-1:-1:-1;11954:1067:120;;-1:-1:-1;;;;;;11954:1067:120:o;5838:185:116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;15085:34:181;;15155:15;;;15150:2;15135:18;;15128:43;5921:57:116;;15020:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;1767:106:51:-;1685:7;;-1:-1:-1;;;1685:7:51;;;;1836:9;1828:38;;;;-1:-1:-1;;;1828:38:51;;15384:2:181;1828:38:51;;;15366:21:181;15423:2;15403:18;;;15396:30;-1:-1:-1;;;15442:18:181;;;15435:46;15498:18;;1828:38:51;15182:340:181;1630:225:140;1778:19;;:24;1770:49;;;;-1:-1:-1;;;1770:49:140;;15729:2:181;1770:49:140;;;15711:21:181;15768:2;15748:18;;;15741:30;-1:-1:-1;;;15787:18:181;;;15780:42;15839:18;;1770:49:140;15527:336:181;1770:49:140;1825:25;1844:5;1825:18;:25::i;:::-;1630:225;;:::o;1945:106:51:-;1685:7;;-1:-1:-1;;;1685:7:51;;;;2003:41;;;;-1:-1:-1;;;2003:41:51;;16070:2:181;2003:41:51;;;16052:21:181;16109:2;16089:18;;;16082:30;-1:-1:-1;;;16128:18:181;;;16121:50;16188:18;;2003:41:51;15868:344:181;2433:117:51;1486:16;:14;:16::i;:::-;2491:7:::1;:15:::0;;-1:-1:-1;;;;2491:15:51::1;::::0;;2521:22:::1;719:10:58::0;2530:12:51::1;2521:22;::::0;-1:-1:-1;;;;;2783:32:181;;;2765:51;;2753:2;2738:18;2521:22:51::1;;;;;;;2433:117::o:0;5220:267:116:-;5447:35;;-1:-1:-1;;;5447:35:116;;;;;;;;;;;2336:287:52;1759:1;2468:7;;:19;2460:63;;;;-1:-1:-1;;;2460:63:52;;16419:2:181;2460:63:52;;;16401:21:181;16458:2;16438:18;;;16431:30;16497:33;16477:18;;;16470:61;16548:18;;2460:63:52;16217:355:181;2460:63:52;1759:1;2598:7;:18;2336:287::o;19673:730:120:-;19822:7;;19925:22;;;;:8;:22;;;;;;;;:44;;;;;;;;:::i;:::-;;19917:76;;;;-1:-1:-1;;;19917:76:120;;16779:2:181;19917:76:120;;;16761:21:181;16818:2;16798:18;;;16791:30;-1:-1:-1;;;16837:18:181;;;16830:49;16896:18;;19917:76:120;16577:343:181;19917:76:120;20335:63;20356:12;20370;20335:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20384:13:120;;-1:-1:-1;20335:20:120;;-1:-1:-1;20335:63:120:i;:::-;20328:70;;19673:730;;;;;;:::o;20958:1261::-;21206:32;;;;:18;:32;;;;;;;;21531:7;21202:342;21599:35;21619:14;21599:19;:35::i;:::-;21740:32;21775:67;21796:12;21810:14;21775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21826:15:120;;-1:-1:-1;21775:20:120;;-1:-1:-1;21775:67:120:i;:::-;21740:102;;21968:14;21940:24;:42;21932:74;;;;-1:-1:-1;;;21932:74:120;;17127:2:181;21932:74:120;;;17109:21:181;17166:2;17146:18;;;17139:30;-1:-1:-1;;;17185:18:181;;;17178:49;17244:18;;21932:74:120;16925:343:181;21932:74:120;22104:32;;;;:18;:32;;;;;;;:39;;-1:-1:-1;;22104:39:120;22139:4;22104:39;;;22154:60;22182:14;;22123:12;;22154:60;;;;22198:15;542:25:181;;530:2;515:18;;396:177;22154:60:120;;;;;;;;21121:1098;20958:1261;;;;:::o;22704:1731::-;22762:13;;22796:15;:8;22762:13;22796:12;:15::i;:::-;22783:28;-1:-1:-1;22873:26:120;22893:6;22873:26;:16;-1:-1:-1;;22873:14:120;;;:16::i;:::-;:26;;;22865:51;;;;-1:-1:-1;;;22865:51:120;;17475:2:181;22865:51:120;;;17457:21:181;17514:2;17494:18;;;17487:30;-1:-1:-1;;;17533:18:181;;;17526:42;17585:18;;22865:51:120;17273:336:181;22865:51:120;22960:20;22983:11;-1:-1:-1;;22983:9:120;;;:11::i;:::-;22960:34;-1:-1:-1;23034:20:120;23008:22;;;;:8;:22;;;;;;;;:46;;;;;;;;:::i;:::-;;23000:66;;;;-1:-1:-1;;;23000:66:120;;17816:2:181;23000:66:120;;;17798:21:181;17855:1;17835:18;;;17828:29;-1:-1:-1;;;17873:18:181;;;17866:37;17920:18;;23000:66:120;17614:330:181;23000:66:120;23209:22;;;;:8;:22;;;;;:48;;-1:-1:-1;;23209:48:120;23234:23;23209:48;;;;23746:25;23760:11;23746;:25;:::i;:::-;:29;;;;:::i;:::-;23734:9;:41;23726:58;;;;-1:-1:-1;;;23726:58:120;;;;;;18151:2:181;18133:21;;;18190:1;18170:18;;;18163:29;-1:-1:-1;;;18223:2:181;18208:18;;18201:34;18267:2;18252:18;;17949:327;23726:58:120;23823:18;23844:21;-1:-1:-1;;23844:19:120;;;:21::i;:::-;24027:19;;;23953:3;24027:19;;;;;;;;;23823:42;;-1:-1:-1;23918:11:120;;23903:12;;23953:3;24027:19;;;;;;;;;;-1:-1:-1;;24000:46:120;-1:-1:-1;24052:22:120;24153:11;-1:-1:-1;;24153:9:120;;;:11::i;:::-;24172:10;-1:-1:-1;;24172:8:120;;;:10::i;:::-;24190:11;-1:-1:-1;;24190:9:120;;;:11::i;:::-;24209:17;:9;-1:-1:-1;;24209:7:120;;;:9::i;:::-;-1:-1:-1;;24209:15:120;;:17::i;:::-;24077:155;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;24077:155:120;;;;;;;;;;;;;;-1:-1:-1;;;;;24077:155:120;-1:-1:-1;;;24077:155:120;;;;-1:-1:-1;24265:81:120;24305:10;24317:4;-1:-1:-1;24326:8:120;24077:155;24265:39;:81::i;:::-;24386:44;;24239:107;;-1:-1:-1;24239:107:120;-1:-1:-1;24386:44:120;;;;24394:12;;24239:107;;;;24386:44;:::i;:::-;;;;;;;;22777:1658;;;;;;;22704:1731;;;:::o;2486:524:140:-;2922:43;2948:16;2922:25;:43::i;:::-;2972:33;2988:16;2972:15;:33::i;2412:312:57:-;2526:6;2501:21;:31;;2493:73;;;;-1:-1:-1;;;2493:73:57;;19337:2:181;2493:73:57;;;19319:21:181;19376:2;19356:18;;;19349:30;19415:31;19395:18;;;19388:59;19464:18;;2493:73:57;19135:353:181;2493:73:57;2578:12;2596:9;-1:-1:-1;;;;;2596:14:57;2618:6;2596:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:52;;;2647:7;2639:78;;;;-1:-1:-1;;;2639:78:57;;19905:2:181;2639:78:57;;;19887:21:181;19944:2;19924:18;;;19917:30;19983:34;19963:18;;;19956:62;20054:28;20034:18;;;20027:56;20100:19;;2639:78:57;19703:422:181;2639:78:57;2483:241;2412:312;;:::o;2186:115:51:-;1239:19;:17;:19::i;:::-;2245:7:::1;:14:::0;;-1:-1:-1;;;;2245:14:51::1;-1:-1:-1::0;;;2245:14:51::1;::::0;;2274:20:::1;2281:12;719:10:58::0;;640:96;1859:484:140;885:12:145;;1999:6:140;;-1:-1:-1;;;;;875:22:145;;;885:12;;875:22;867:78;;;;-1:-1:-1;;;867:78:145;;20332:2:181;867:78:145;;;20314:21:181;20371:2;20351:18;;;20344:30;20410:34;20390:18;;;20383:62;-1:-1:-1;;;20461:18:181;;;20454:41;20512:19;;867:78:145;20130:407:181;867:78:145;2175:4:140::1;:11;2190:2;2175:17;2167:37;;;::::0;-1:-1:-1;;;2167:37:140;;20744:2:181;2167:37:140::1;::::0;::::1;20726:21:181::0;20783:1;20763:18;;;20756:29;-1:-1:-1;;;20801:18:181;;;20794:37;20848:18;;2167:37:140::1;20542:330:181::0;2167:37:140::1;2257:35;2278:13;2286:4:::0;2278:13:::1;:::i;:::-;2257:20;:35::i;:::-;2304:34;2321:4;2327:10;2304:34;;;;;;;:::i;:::-;;;;;;;;1859:484:::0;;;;:::o;5170:183:168:-;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;4981:185::-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;1742:335:167:-;1834:15;;1817:13;:32;1809:60;;;;-1:-1:-1;;;1809:60:167;;21381:2:181;1809:60:167;;;21363:21:181;21420:2;21400:18;;;21393:30;-1:-1:-1;;;21439:18:181;;;21432:45;21494:18;;1809:60:167;21179:339:181;1809:60:167;1983:15;:31;;;2025:47;;;2046:10;21697:51:181;;21779:2;21764:18;;21757:34;;;2025:47:167;;21670:18:181;2025:47:167;21523:274:181;981:328:165;1183:12;1227:13;1242:7;1251:6;1259:18;1279:10;1291:12;1210:94;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1203:101;;981:328;;;;;;;;:::o;1824:95:145:-;1894:20;1906:7;1894:20;;;;;;:::i;24755:6146:164:-;25004:22;25008:1;25004:22;;;;;25033:19;;;25080:25;;25066:12;;;25059:47;;;;25138:4;24881:16;25125:18;;;25182:9;25170:22;;25163:30;25156:38;;25208:12;;;25201:30;;;;25254:34;;;25248:41;25238:52;;25309:18;;;25366:9;25354:22;;25347:30;25340:38;;25392:12;;;25385:30;;;;25438:34;;;25432:41;25422:52;;25493:18;;;25550:9;25538:22;;25531:30;25524:38;;25576:12;;;25569:30;;;;25646:9;25622:34;;25616:41;25606:52;;25677:18;;;25734:9;25722:22;;25715:30;25708:38;;25760:12;;;25753:30;;;;25830:9;25806:34;;;25800:41;25790:52;;;25861:18;;;25906:22;;;25899:30;25892:38;;25944:12;;;25937:30;;;;26014:9;25990:34;;25984:41;25974:52;;26045:18;;;26090:22;;;26083:30;26076:38;;26128:12;;;26121:30;;;;26198:9;26174:34;;26168:41;26158:52;;26229:18;;;26274:22;;;26267:30;26260:38;;26312:12;;;26305:30;;;;26382:9;26358:34;;26352:41;26342:52;;26413:18;;;26470:9;26458:22;;;26451:30;26444:38;;26496:12;;;26489:30;;;;26542:34;;26536:41;26526:52;;26597:18;;;26654:9;26642:22;;;26635:30;26628:38;;26680:12;;;26673:30;;;;26750:9;26726:34;;26720:41;26710:52;;;26781:18;;;26838:10;26826:23;;26819:31;26812:39;;26865:12;;;26858:30;;;;26935:10;26911:35;;26905:42;26895:53;;26967:18;;;27024:10;27012:23;;27005:31;26998:39;;27051:12;;;27044:30;;;;27121:10;27097:35;;27091:42;27081:53;;27153:18;;;27210:10;27198:23;;27191:31;27184:39;;27237:12;;;27230:30;;;;27307:10;27283:35;;27277:42;27267:53;;27339:18;;;27396:10;27384:23;;27377:31;27370:39;;27423:12;;;27416:30;;;;27493:10;27469:35;;27463:42;27453:53;;27525:18;;;27582:10;27570:23;;27563:31;27556:39;;27609:12;;;27602:30;;;;27679:10;27655:35;;27649:42;27639:53;;27711:18;;;27768:10;27756:23;;27749:31;27742:39;;27795:12;;;27788:30;;;;27865:10;27841:35;;27835:42;27825:53;;27897:18;;;27954:10;27942:23;;27935:31;27928:39;;27981:12;;;27974:30;;;;28027:35;;;28021:42;28011:53;;28083:18;;;28140:10;28128:23;;28121:31;28114:39;;28167:12;;;28160:30;;;;28237:10;28213:35;;28207:42;28197:53;;28269:18;;;28326:10;28314:23;;28307:31;28300:39;;28353:12;;;28346:30;;;;28423:10;28399:35;;28393:42;28383:53;;28455:18;;;28512:10;28500:23;;28493:31;28486:39;;28539:12;;;28532:30;;;;28609:10;28585:35;;28579:42;28569:53;;28641:18;;;28698:10;28686:23;;28679:31;28672:39;;28725:12;;;28718:30;;;;28795:10;28771:35;;28765:42;28755:53;;28827:18;;;28884:10;28872:23;;28865:31;28858:39;;28911:12;;;28904:30;;;;28981:10;28957:35;;28951:42;28941:53;;29013:18;;;29070:10;29058:23;;29051:31;29044:39;;29097:12;;;29090:30;;;;29167:10;29143:35;;29137:42;29127:53;;29199:18;;;29256:10;29244:23;;29237:31;29230:39;;29283:12;;;29276:30;;;;29353:10;29329:35;;29323:42;29313:53;;29385:18;;;29442:10;29430:23;;29423:31;29416:39;;29469:12;;;29462:30;;;;29539:10;29515:35;;29509:42;29499:53;;29571:18;;;29628:10;29616:23;;29609:31;29602:39;;29655:12;;;29648:30;;;;29725:10;29701:35;;29695:42;29685:53;;29757:18;;;29814:10;29802:23;;29795:31;29788:39;;29841:12;;;29834:30;;;;29911:10;29887:35;;29881:42;29871:53;;29943:18;;;30000:10;29988:23;;29981:31;29974:39;;30027:12;;;30020:30;;;;30097:10;30073:35;;30067:42;30057:53;;30129:18;;;30186:10;30174:23;;30167:31;30160:39;;30213:12;;;30206:30;;;;30283:10;30259:35;;30253:42;30243:53;;30315:18;;;30372:10;30360:23;;30353:31;30346:39;;30399:12;;;30392:30;;;;30469:10;30445:35;;30439:42;30429:53;;30501:18;;;30558:10;30546:23;;30539:31;30532:39;;30585:12;;;30578:30;;;;30655:10;30631:35;;30625:42;30615:53;;30687:18;;;30744:10;30732:23;;;30725:31;30718:39;;;30771:12;;;;30764:30;;;;30841:10;30817:35;;;30811:42;30801:53;;;30873:18;;;24755:6146::o;17891:1180:120:-;18006:14;17998:61;;;;-1:-1:-1;;;17998:61:120;;22941:2:181;17998:61:120;;;22923:21:181;22980:2;22960:18;;;22953:30;-1:-1:-1;;;22999:18:181;;;22992:49;23058:18;;17998:61:120;22739:343:181;17998:61:120;18149:36;;;;:20;:36;;;;;;;;18145:104;;;17891:1180;:::o;18145:104::-;18354:33;18390:37;;;:21;:37;;;;;;;18441:30;;;18433:63;;;;-1:-1:-1;;;18433:63:120;;23289:2:181;18433:63:120;;;23271:21:181;23328:2;23308:18;;;23301:30;-1:-1:-1;;;23347:18:181;;;23340:50;23407:18;;18433:63:120;23087:344:181;18433:63:120;18641:11;;18597:40;18612:25;18597:12;:40;:::i;:::-;:55;;18589:91;;;;-1:-1:-1;;;18589:91:120;;23638:2:181;18589:91:120;;;23620:21:181;23677:2;23657:18;;;23650:30;23716:25;23696:18;;;23689:53;23759:18;;18589:91:120;23436:347:181;18589:91:120;18808:36;;;;:20;:36;;;;;;:43;;-1:-1:-1;;18808:43:120;18847:4;18808:43;;;18862:37;18829:14;;18862:37;;;-1:-1:-1;19029:37:120;;;;:21;:37;;;;;19022:44;17891:1180::o;10748:325:174:-;10848:10;;10818:7;;10975:4;10966:14;;11042:26;;;;10966:14;10848:10;11042:5;:26::i;:::-;11035:33;10748:325;-1:-1:-1;;;;;10748:325:174:o;2583:121:165:-;2645:6;2673:25;-1:-1:-1;;2673:18:165;;2692:2;2696:1;2673:18;:25::i;17661:260:174:-;17717:14;17739:12;17754;17758:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;17754:12;-1:-1:-1;;;;;17739:27:174;;;17772:12;17787;17791:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;17787:12;-1:-1:-1;;;;;17772:27:174;17890:21;;;;17661:260;-1:-1:-1;;;17661:260:174:o;2942:141:165:-;3009:7;3031:47;3058:19;3068:8;3058:9;:19::i;:::-;508:4:173;399:121;2097:115:165;2154:6;2182:24;-1:-1:-1;;2182:18:165;;2154:6;2204:1;2182:18;:24::i;2414:115::-;2470:6;2498:25;-1:-1:-1;;2498:18:165;;2517:2;2521:1;2498:18;:25::i;2261:105::-;2318:7;2340:21;-1:-1:-1;;2340:14:165;;2355:1;2358:2;2340:14;:21::i;3201:146::-;3256:7;3278:64;533:2;3308:30;533:2;13008::174;13004:16;;;-1:-1:-1;;;;;13000:28:174;3308:30:165;:::i;:::-;-1:-1:-1;;3278:14:165;;;:64;3340:1;3278:14;:64::i;21380:556:174:-;21435:16;21459:11;21476:12;21491;21495:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;21491:12;-1:-1:-1;;;;;21476:27:174;;;21597:4;21591:11;21584:18;;21646:3;21639:10;;21678:33;21691:7;21700:3;21706:4;21700:10;21678:12;:33::i;:::-;-1:-1:-1;21815:14:174;;;21831:4;21811:25;21805:4;21798:39;21872:17;;21380:556;;-1:-1:-1;21380:556:174:o;1360:1117:171:-;1519:4;1525:12;1577:15;1598:13;1617:24;1654:8;1644:19;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1644:19:171;;1617:46;;2083:1;2062;2033:9;2027:16;2003:4;1992:9;1988:20;1957:6;1927:7;1906:4;1892:210;1880:222;;2157:16;2146:27;;2195:8;2186:7;2183:21;2180:62;;;2226:8;2215:19;;2180:62;2315:7;2302:11;2295:28;2423:7;2420:1;2413:4;2400:11;2396:22;2381:50;2450:8;;;;-1:-1:-1;1360:1117:171;-1:-1:-1;;;;;;;1360:1117:171:o;1002:193:145:-;1081:12;;-1:-1:-1;;;;;1081:12:145;:28;1073:83;;;;-1:-1:-1;;;1073:83:145;;23990:2:181;1073:83:145;;;23972:21:181;24029:2;24009:18;;;24002:30;24068:34;24048:18;;;24041:62;-1:-1:-1;;;24119:18:181;;;24112:40;24169:19;;1073:83:145;23788:406:181;1073:83:145;1162:12;:28;;-1:-1:-1;;;;;;1162:28:145;-1:-1:-1;;;;;1162:28:145;;;;;;;;;;1002:193::o;17098:357:120:-;17169:8;17161:50;;;;-1:-1:-1;;;17161:50:120;;24401:2:181;17161:50:120;;;24383:21:181;24440:2;24420:18;;;24413:30;-1:-1:-1;;;24459:18:181;;;24452:44;24513:18;;17161:50:120;24199:338:181;17161:50:120;17225:31;;;;:21;:31;;;;;;:36;17217:69;;;;-1:-1:-1;;;17217:69:120;;24744:2:181;17217:69:120;;;24726:21:181;24783:2;24763:18;;;24756:30;-1:-1:-1;;;24802:18:181;;;24795:50;24862:18;;17217:69:120;24542:344:181;17217:69:120;17301:30;;;;:20;:30;;;;;;;;17300:31;17292:63;;;;-1:-1:-1;;;17292:63:120;;25093:2:181;17292:63:120;;;25075:21:181;25132:2;25112:18;;;25105:30;-1:-1:-1;;;25151:18:181;;;25144:49;25210:18;;17292:63:120;24891:343:181;17292:63:120;17362:31;;;;:21;:31;;;;;;;17396:12;17362:46;;17419:31;;;;;17384:8;542:25:181;;530:2;515:18;;396:177;9979:390:174;10076:15;;10114:11;10121:4;10114;:11;:::i;:::-;10099:26;;10224:4;10218:11;10212:4;10209:21;10206:52;;;-1:-1:-1;10249:1:174;10206:52;10273:4;10281:1;10273:9;10269:41;;-1:-1:-1;;10292:11:174;;;;;10269:41;10325:39;10346:5;10353:4;10359;10325:20;:39::i;16417:201::-;16522:14;16596:11;16601:6;16596:2;:11;:::i;:::-;16595:17;;16611:1;16595:17;:::i;:::-;16551:62;;16559:30;16565:7;16574:6;16582;16559:5;:30::i;:::-;16551:62;;;16417:201;-1:-1:-1;;;;16417:201:174:o;2767:109:165:-;2827:7;2849:22;-1:-1:-1;;2849:14:165;;2864:2;2868;15274:815:174;15375:14;15401:6;:11;;15411:1;15401:11;15397:49;;-1:-1:-1;15437:1:174;15422:17;;15397:49;15473:12;15477:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15473:12;-1:-1:-1;;;;;15455:30:174;:15;;;;:6;:15;:::i;:::-;:30;15451:282;;;15674:12;15678:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15674:12;15688;15692:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15688:12;15646:80;;-1:-1:-1;;;15646:80:174;;-1:-1:-1;;;;;25917:15:181;;;15646:80:174;;;25899:34:181;25969:15;;25949:18;;;25942:43;26001:18;;;25994:34;;;15710:15:174;;;26044:18:181;;;26037:34;25826:19;;15646:80:174;25625:452:181;15451:282:174;15751:2;15742:6;:11;;;15738:66;;;15762:42;;-1:-1:-1;;;15762:42:174;;;;;;;;;;;15738:66;15871:1;15862:10;;15811:15;15899:12;15903:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15899:12;-1:-1:-1;;;;;15884:27:174;;-1:-1:-1;15917:13:174;-1:-1:-1;;;;;5031:12:174;;5027:85;16053:17;;;;16047:24;16043:36;;;-1:-1:-1;;;;;15274:815:174:o;13593:349::-;13714:7;13729:12;13744;13748:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;13744:12;-1:-1:-1;;;;;13729:27:174;;;13832:12;13836:7;13832:3;:12::i;:::-;13825:4;13809:13;13816:6;13809:4;:13;:::i;:::-;:20;;;;:::i;:::-;:35;13805:67;;;-1:-1:-1;;13854:11:174;;;;;13805:67;13885:13;13892:6;13885:4;:13;:::i;:::-;13878:20;;13911:26;13917:7;13911:26;;13926:4;13932;13911:5;:26::i;:::-;13904:33;;;13593:349;;;;;;;:::o;20133:893::-;20211:15;-1:-1:-1;;5480:15:174;;;;20234:68;;20262:40;;-1:-1:-1;;;20262:40:174;;;;;;;;;;;20234:68;20312:19;20323:7;20312:10;:19::i;:::-;20308:75;;;20340:43;;-1:-1:-1;;;20340:43:174;;;;;;;;;;;20308:75;20390:12;20405;20409:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;20405:12;-1:-1:-1;;;;;20390:27:174;;;20423:15;20441:12;20445:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;20441:12;-1:-1:-1;;;;;20423:30:174;;;20460:11;20477:8;20579:4;20573:11;20566:18;;20654:7;20649:3;20646:16;20643:80;;;20686:4;20680;20673:18;20643:80;20880:4;20871:7;20865:4;20856:7;20853:1;20846:5;20835:50;20828:57;;20901:3;20896:57;;20913:40;;-1:-1:-1;;;20913:40:174;;;;;;;;;;;20896:57;20969:52;20990:15;20997:7;11442:17;11438:31;;11253:254;20990:15;20969:52;;21007:7;21016:4;20969:20;:52::i;:::-;20959:62;20133:893;-1:-1:-1;;;;;;;20133:893:174:o;8805:657::-;8916:15;8961:2;8990;9076:4;9108;-1:-1:-1;;;;;9127:12:174;;;;:28;;;;;9151:4;9143;-1:-1:-1;;;;;9143:12:174;;9127:28;9119:51;;;;-1:-1:-1;;;9119:51:174;;26284:2:181;9119:51:174;;;26266:21:181;26323:2;26303:18;;;26296:30;-1:-1:-1;;;26342:18:181;;;26335:40;26392:18;;9119:51:174;26082:334:181;9119:51:174;9271:23;;;9344:17;;;9327:35;;;9410:17;;;9394:34;;;;;-1:-1:-1;;;8805:657:174:o;13200:131::-;13253:7;13308:12;13312:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;13308:12;13293;13297:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;13293:12;:27;-1:-1:-1;;;;;13286:34:174;;;13200:131;;;:::o;6121:290::-;6181:8;6201:15;6208:7;11442:17;11438:31;;11253:254;6201:15;:31;;6220:12;6201:31;6197:63;;-1:-1:-1;6249:4:174;;6121:290;-1:-1:-1;6121:290:174:o;6197:63::-;6265:12;6280;6284:7;6280:3;:12::i;:::-;6395:4;6389:11;-1:-1:-1;6380:21:174;6121:290;-1:-1:-1;;;6121:290:174:o;211:180:181:-;270:6;323:2;311:9;302:7;298:23;294:32;291:52;;;339:1;336;329:12;291:52;-1:-1:-1;362:23:181;;211:180;-1:-1:-1;211:180:181:o;578:127::-;639:10;634:3;630:20;627:1;620:31;670:4;667:1;660:15;694:4;691:1;684:15;710:718;752:5;805:3;798:4;790:6;786:17;782:27;772:55;;823:1;820;813:12;772:55;859:6;846:20;885:18;922:2;918;915:10;912:36;;;928:18;;:::i;:::-;1003:2;997:9;971:2;1057:13;;-1:-1:-1;;1053:22:181;;;1077:2;1049:31;1045:40;1033:53;;;1101:18;;;1121:22;;;1098:46;1095:72;;;1147:18;;:::i;:::-;1187:10;1183:2;1176:22;1222:2;1214:6;1207:18;1268:3;1261:4;1256:2;1248:6;1244:15;1240:26;1237:35;1234:55;;;1285:1;1282;1275:12;1234:55;1349:2;1342:4;1334:6;1330:17;1323:4;1315:6;1311:17;1298:54;1396:1;1389:4;1384:2;1376:6;1372:15;1368:26;1361:37;1416:6;1407:15;;;;;;710:718;;;;:::o;1433:320::-;1501:6;1554:2;1542:9;1533:7;1529:23;1525:32;1522:52;;;1570:1;1567;1560:12;1522:52;1610:9;1597:23;1643:18;1635:6;1632:30;1629:50;;;1675:1;1672;1665:12;1629:50;1698:49;1739:7;1730:6;1719:9;1715:22;1698:49;:::i;1943:127::-;2004:10;1999:3;1995:20;1992:1;1985:31;2035:4;2032:1;2025:15;2059:4;2056:1;2049:15;2075:347;2226:2;2211:18;;2259:1;2248:13;;2238:144;;2304:10;2299:3;2295:20;2292:1;2285:31;2339:4;2336:1;2329:15;2367:4;2364:1;2357:15;2238:144;2391:25;;;2075:347;:::o;2827:932::-;2992:6;3000;3008;3016;3024;3077:4;3065:9;3056:7;3052:23;3048:34;3045:54;;;3095:1;3092;3085:12;3045:54;3135:9;3122:23;3164:18;3205:2;3197:6;3194:14;3191:34;;;3221:1;3218;3211:12;3191:34;3259:6;3248:9;3244:22;3234:32;;3304:7;3297:4;3293:2;3289:13;3285:27;3275:55;;3326:1;3323;3316:12;3275:55;3366:2;3353:16;3392:2;3384:6;3381:14;3378:34;;;3408:1;3405;3398:12;3378:34;3463:7;3456:4;3446:6;3443:1;3439:14;3435:2;3431:23;3427:34;3424:47;3421:67;;;3484:1;3481;3474:12;3421:67;3515:4;3507:13;;;;-1:-1:-1;3539:6:181;-1:-1:-1;;3577:20:181;;3564:34;;-1:-1:-1;3632:4:181;3617:20;;3649:15;;;3646:35;;;3677:1;3674;3667:12;3646:35;2827:932;;;;-1:-1:-1;2827:932:181;;3715:2;3700:18;;3737:16;;2827:932;-1:-1:-1;;2827:932:181:o;3764:173::-;3832:20;;-1:-1:-1;;;;;3881:31:181;;3871:42;;3861:70;;3927:1;3924;3917:12;3861:70;3764:173;;;:::o;3942:186::-;4001:6;4054:2;4042:9;4033:7;4029:23;4025:32;4022:52;;;4070:1;4067;4060:12;4022:52;4093:29;4112:9;4093:29;:::i;4315:733::-;4403:6;4411;4419;4427;4480:2;4468:9;4459:7;4455:23;4451:32;4448:52;;;4496:1;4493;4486:12;4448:52;4532:9;4519:23;4509:33;;4561:38;4595:2;4584:9;4580:18;4561:38;:::i;:::-;4551:48;;4650:2;4639:9;4635:18;4622:32;4673:18;4714:2;4706:6;4703:14;4700:34;;;4730:1;4727;4720:12;4700:34;4768:6;4757:9;4753:22;4743:32;;4813:7;4806:4;4802:2;4798:13;4794:27;4784:55;;4835:1;4832;4825:12;4784:55;4875:2;4862:16;4901:2;4893:6;4890:14;4887:34;;;4917:1;4914;4907:12;4887:34;4962:7;4957:2;4948:6;4944:2;4940:15;4936:24;4933:37;4930:57;;;4983:1;4980;4973:12;4930:57;4315:733;;;;-1:-1:-1;;5014:2:181;5006:11;;-1:-1:-1;;;4315:733:181:o;5745:163::-;5812:20;;5872:10;5861:22;;5851:33;;5841:61;;5898:1;5895;5888:12;5913:184;5971:6;6024:2;6012:9;6003:7;5999:23;5995:32;5992:52;;;6040:1;6037;6030:12;5992:52;6063:28;6081:9;6063:28;:::i;6102:460::-;6187:6;6195;6203;6256:2;6244:9;6235:7;6231:23;6227:32;6224:52;;;6272:1;6269;6262:12;6224:52;6295:28;6313:9;6295:28;:::i;:::-;6285:38;;6370:2;6359:9;6355:18;6342:32;6332:42;;6425:2;6414:9;6410:18;6397:32;6452:18;6444:6;6441:30;6438:50;;;6484:1;6481;6474:12;6438:50;6507:49;6548:7;6539:6;6528:9;6524:22;6507:49;:::i;:::-;6497:59;;;6102:460;;;;;:::o;6567:250::-;6652:1;6662:113;6676:6;6673:1;6670:13;6662:113;;;6752:11;;;6746:18;6733:11;;;6726:39;6698:2;6691:10;6662:113;;;-1:-1:-1;;6809:1:181;6791:16;;6784:27;6567:250::o;6822:270::-;6863:3;6901:5;6895:12;6928:6;6923:3;6916:19;6944:76;7013:6;7006:4;7001:3;6997:14;6990:4;6983:5;6979:16;6944:76;:::i;:::-;7074:2;7053:15;-1:-1:-1;;7049:29:181;7040:39;;;;7081:4;7036:50;;6822:270;-1:-1:-1;;6822:270:181:o;7097:288::-;7272:6;7261:9;7254:25;7315:2;7310;7299:9;7295:18;7288:30;7235:4;7335:44;7375:2;7364:9;7360:18;7352:6;7335:44;:::i;7731:127::-;7792:10;7787:3;7783:20;7780:1;7773:31;7823:4;7820:1;7813:15;7847:4;7844:1;7837:15;7863:125;7928:9;;;7949:10;;;7946:36;;;7962:18;;:::i;7993:184::-;8063:6;8116:2;8104:9;8095:7;8091:23;8087:32;8084:52;;;8132:1;8129;8122:12;8084:52;-1:-1:-1;8155:16:181;;7993:184;-1:-1:-1;7993:184:181:o;8715:474::-;8936:2;8925:9;8918:21;8899:4;8962:44;9002:2;8991:9;8987:18;8979:6;8962:44;:::i;:::-;9054:9;9046:6;9042:22;9037:2;9026:9;9022:18;9015:50;9082:32;9107:6;9099;9082:32;:::i;:::-;9074:40;;;9179:1;9175;9170:3;9166:11;9162:19;9154:6;9150:32;9145:2;9134:9;9130:18;9123:60;8715:474;;;;;;:::o;9526:314::-;9701:2;9690:9;9683:21;9664:4;9721:44;9761:2;9750:9;9746:18;9738:6;9721:44;:::i;:::-;9713:52;;9830:1;9826;9821:3;9817:11;9813:19;9805:6;9801:32;9796:2;9785:9;9781:18;9774:60;9526:314;;;;;:::o;10180:127::-;10241:10;10236:3;10232:20;10229:1;10222:31;10272:4;10269:1;10262:15;10296:4;10293:1;10286:15;10312:325;10404:4;10462:11;10449:25;10556:4;10552:9;10541:8;10525:14;10521:29;10517:45;10497:18;10493:70;10483:98;;10577:1;10574;10567:12;10483:98;10598:33;;;;;10312:325;-1:-1:-1;;10312:325:181:o;10642:521::-;10719:4;10725:6;10785:11;10772:25;10879:2;10875:7;10864:8;10848:14;10844:29;10840:43;10820:18;10816:68;10806:96;;10898:1;10895;10888:12;10806:96;10925:33;;10977:20;;;-1:-1:-1;11020:18:181;11009:30;;11006:50;;;11052:1;11049;11042:12;11006:50;11085:4;11073:17;;-1:-1:-1;11116:14:181;11112:27;;;11102:38;;11099:58;;;11153:1;11150;11143:12;11099:58;10642:521;;;;;:::o;11168:271::-;11351:6;11343;11338:3;11325:33;11307:3;11377:16;;11402:13;;;11377:16;11168:271;-1:-1:-1;11168:271:181:o;12134:277::-;12201:6;12254:2;12242:9;12233:7;12229:23;12225:32;12222:52;;;12270:1;12267;12260:12;12222:52;12302:9;12296:16;12355:5;12348:13;12341:21;12334:5;12331:32;12321:60;;12377:1;12374;12367:12;13154:128;13221:9;;;13242:11;;;13239:37;;;13256:18;;:::i;13980:201::-;14018:3;14046:10;14091:2;14084:5;14080:14;14118:2;14109:7;14106:15;14103:41;;14124:18;;:::i;:::-;14173:1;14160:15;;13980:201;-1:-1:-1;;;13980:201:181:o;14186:245::-;14265:6;14273;14326:2;14314:9;14305:7;14301:23;14297:32;14294:52;;;14342:1;14339;14332:12;14294:52;-1:-1:-1;;14365:16:181;;14421:2;14406:18;;;14400:25;14365:16;;14400:25;;-1:-1:-1;14186:245:181:o;14436:432::-;14667:6;14656:9;14649:25;14710:6;14705:2;14694:9;14690:18;14683:34;14753:6;14748:2;14737:9;14733:18;14726:34;14796:3;14791:2;14780:9;14776:18;14769:31;14630:4;14817:45;14857:3;14846:9;14842:19;14834:6;14817:45;:::i;:::-;14809:53;14436:432;-1:-1:-1;;;;;;14436:432:181:o;18281:475::-;18471:4;18500:10;18549:2;18541:6;18537:15;18526:9;18519:34;18601:2;18593:6;18589:15;18584:2;18573:9;18569:18;18562:43;;18641:6;18636:2;18625:9;18621:18;18614:34;18684:3;18679:2;18668:9;18664:18;18657:31;18705:45;18745:3;18734:9;18730:19;18722:6;18705:45;:::i;18761:369::-;18958:6;18947:9;18940:25;19015:6;19008:14;19001:22;18996:2;18985:9;18981:18;18974:50;19060:2;19055;19044:9;19040:18;19033:30;18921:4;19080:44;19120:2;19109:9;19105:18;19097:6;19080:44;:::i;20877:297::-;20995:12;;21042:4;21031:16;;;21025:23;;20995:12;21060:16;;21057:111;;;21154:1;21150:6;21140;21134:4;21130:17;21127:1;21123:25;21119:38;21112:5;21108:50;21099:59;;21057:111;;20877:297;;;:::o;21802:710::-;22065:3;22102:10;22097:3;22093:20;22156:2;22147:6;22142:3;22138:16;22134:25;22129:3;22122:38;22189:6;22185:1;22180:3;22176:11;22169:27;22248:2;22239:6;22234:3;22230:16;22226:25;22221:2;22216:3;22212:12;22205:47;22304:2;22295:6;22290:3;22286:16;22282:25;22277:2;22272:3;22268:12;22261:47;;22338:6;22333:2;22328:3;22324:12;22317:28;22374:6;22368:13;22390:75;22458:6;22453:2;22448:3;22444:12;22437:4;22429:6;22425:17;22390:75;:::i;:::-;22485:16;;;;22503:2;22481:25;;21802:710;-1:-1:-1;;;;;;;21802:710:181:o;22517:217::-;22664:2;22653:9;22646:21;22627:4;22684:44;22724:2;22713:9;22709:18;22701:6;22684:44;:::i;25239:151::-;25329:4;25322:12;;;25308;;;25304:31;;25347:14;;25344:40;;;25364:18;;:::i;25395:225::-;25499:4;25478:12;;;25492;;;25474:31;25525:22;;;;25566:24;;;25556:58;;25594:18;;:::i;:::-;25556:58;25395:225;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"2763200","executionCost":"infinite","totalCost":"infinite"},"external":{"AMB()":"infinite","DOMAIN()":"infinite","MERKLE()":"infinite","MIRROR_DOMAIN()":"infinite","PROCESS_GAS()":"infinite","RESERVE_GAS()":"infinite","ROOT_MANAGER()":"infinite","acceptProposedOwner()":"63859","addSender(address)":"27878","allowlistedSenders(address)":"2599","delay()":"259","delayBlocks()":"2406","dispatch(uint32,bytes32,bytes)":"infinite","fxChild()":"2427","fxRootTunnel()":"2470","home()":"257","isReplica(address)":"535","lastSentBlock()":"2406","localDomain()":"infinite","messages(bytes32)":"2626","mirrorConnector()":"2448","nonces(uint32)":"2578","outboundRoot()":"infinite","owner()":"2421","pause()":"infinite","paused()":"2455","pendingAggregateRoots(bytes32)":"2594","processMessage(bytes)":"infinite","processMessageFromRoot(uint256,address,bytes)":"infinite","proposeNewOwner(address)":"56551","proposed()":"2464","proposedTimestamp()":"2338","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":"infinite","provenAggregateRoots(bytes32)":"2607","provenMessageRoots(bytes32)":"2562","rateLimitBlocks()":"2385","removePendingAggregateRoot(bytes32)":"12958","removeSender(address)":"27982","renounceOwnership()":"2436","renounced()":"2474","send(bytes)":"infinite","sentMessageRoots(bytes32)":"2518","setDelayBlocks(uint256)":"28093","setMirrorConnector(address)":"infinite","setRateLimitBlocks(uint256)":"28079","setWatcherManager(address)":"29996","unpause()":"infinite","verifySender(address)":"470","watcherManager()":"2426","withdrawFunds(address)":"infinite"},"internal":{"_processMessageFromRoot(uint256,address,bytes memory)":"infinite","_sendMessage(bytes memory,bytes memory)":"infinite","_setMirrorConnector(address)":"infinite","_verifySender(address)":"infinite"}},"methodIdentifiers":{"AMB()":"d69f9d61","DOMAIN()":"52a9674b","MERKLE()":"a01892a5","MIRROR_DOMAIN()":"14168416","PROCESS_GAS()":"d88beda2","RESERVE_GAS()":"25e3beda","ROOT_MANAGER()":"5f61e3ec","acceptProposedOwner()":"c5b350df","addSender(address)":"b697f531","allowlistedSenders(address)":"6159ada1","delay()":"6a42b8f8","delayBlocks()":"ad9c0c2e","dispatch(uint32,bytes32,bytes)":"fa31de01","fxChild()":"450d11f0","fxRootTunnel()":"7f1e9cb0","home()":"9fa92f9d","isReplica(address)":"5190bc53","lastSentBlock()":"d7d317b3","localDomain()":"8d3638f4","messages(bytes32)":"2bbd59ca","mirrorConnector()":"cc394283","nonces(uint32)":"b95a2001","outboundRoot()":"65eaf11b","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","pendingAggregateRoots(bytes32)":"9d3117c7","processMessage(bytes)":"4ff746f6","processMessageFromRoot(uint256,address,bytes)":"9a7c4b71","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":"508a109b","provenAggregateRoots(bytes32)":"301f07c3","provenMessageRoots(bytes32)":"98c9f2b9","rateLimitBlocks()":"579c1618","removePendingAggregateRoot(bytes32)":"6b04a933","removeSender(address)":"b2f87643","renounceOwnership()":"715018a6","renounced()":"d232c220","send(bytes)":"2bb1ae7c","sentMessageRoots(bytes32)":"572386ca","setDelayBlocks(uint256)":"1eeaabea","setMirrorConnector(address)":"5bd11efc","setRateLimitBlocks(uint256)":"e0fed010","setWatcherManager(address)":"d2a3cc71","unpause()":"3f4ba83a","verifySender(address)":"db1b7659","watcherManager()":"a792c29b","withdrawFunds(address)":"68742da6"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_mirrorDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_amb\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rootManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_processGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserveGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_merkle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Connector__processMessage_notUsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimited__rateLimited_messageSendRateExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__index_indexMoreThan32Bytes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"len\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slice\",\"type\":\"uint256\"}],\"name\":\"TypedMemView__index_overrun\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_identityOOG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_invalidPointer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_nullPointer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"updated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"DelayBlocksUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Dispatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"aggregateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"MessageProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"MirrorConnectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"mirrorDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"amb\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mirrorConnector\",\"type\":\"address\"}],\"name\":\"NewConnector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"Process\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updater\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRateLimit\",\"type\":\"uint256\"}],\"name\":\"SendRateLimitUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"watcherManager\",\"type\":\"address\"}],\"name\":\"WatcherManagerChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MERKLE\",\"outputs\":[{\"internalType\":\"contract MerkleTreeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROCESS_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROOT_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"addSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowlistedSenders\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_recipientAddress\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_messageBody\",\"type\":\"bytes\"}],\"name\":\"dispatch\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fxChild\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fxRootTunnel\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"home\",\"outputs\":[{\"internalType\":\"contract IOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_potentialReplica\",\"type\":\"address\"}],\"name\":\"isReplica\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastSentBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localDomain\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"messages\",\"outputs\":[{\"internalType\":\"enum SpokeConnector.MessageStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outboundRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"pendingAggregateRoots\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stateId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"rootMessageSender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"processMessageFromRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"path\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct SpokeConnector.Proof[]\",\"name\":\"_proofs\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"_aggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[32]\",\"name\":\"_aggregatePath\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"_aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"proveAndProcess\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenAggregateRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenMessageRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rateLimitBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_fraudulentRoot\",\"type\":\"bytes32\"}],\"name\":\"removePendingAggregateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"removeSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"sentMessageRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_delayBlocks\",\"type\":\"uint256\"}],\"name\":\"setDelayBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"}],\"name\":\"setMirrorConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rateLimit\",\"type\":\"uint256\"}],\"name\":\"setRateLimitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"}],\"name\":\"setWatcherManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"watcherManager\",\"outputs\":[{\"internalType\":\"contract WatcherManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addSender(address)\":{\"details\":\"Only allowlisted routers (senders) can call `dispatch`.\"},\"dispatch(uint32,bytes32,bytes)\":{\"details\":\"The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \\\"hub\\\"), it will be combined into a single aggregate root by RootManager (along with outbound roots from other chains). This aggregate root will be redistributed to all destination chains. NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\"},\"home()\":{\"details\":\"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad\",\"returns\":{\"_0\":\"The local inbox contract\"}},\"isReplica(address)\":{\"returns\":{\"_0\":\"True if _potentialReplica is an enrolled Replica\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"processMessage(bytes)\":{\"details\":\"This is called by AMBs to process messages originating from mirror connector\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)\":{\"details\":\"Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.Intended to be called by the relayer at specific intervals during runtime.Will record a calculated root as having been proven if we've already proven that it was included in the aggregateRoot.\",\"params\":{\"_aggregateIndex\":\"Index of the inbound root in the aggregator's merkle tree in the hub.\",\"_aggregatePath\":\"Merkle path of inclusion for the inbound root.\",\"_aggregateRoot\":\"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.\",\"_proofs\":\"Batch of Proofs containing messages for proving/processing.\"}},\"removePendingAggregateRoot(bytes32)\":{\"details\":\"This method is required for handling fraud cases in the current construction.\",\"params\":{\"_fraudulentRoot\":\"Target fraudulent root that should be erased from the `pendingAggregateRoots` mapping.\"}},\"removeSender(address)\":{\"details\":\"Only allowlisted routers (senders) can call `dispatch`.\"},\"renounceOwnership()\":{\"details\":\"Renounce ownership should be impossible as long as it is impossible in the WatcherClient, and as long as only the owner can remove pending roots in case of fraud.\"},\"setRateLimitBlocks(uint256)\":{\"details\":\"Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\",\"params\":{\"_rateLimit\":\"The number of blocks require between sending messages. If set to 0, rate limiting for this spoke connector will be disabled.\"}},\"withdrawFunds(address)\":{\"details\":\"Withdraws the entire balance of the contract.\",\"params\":{\"_to\":\"The recipient of the funds withdrawn\"}}},\"version\":1},\"userdoc\":{\"events\":{\"FundsWithdrawn(address,uint256)\":{\"notice\":\"Emitted when funds are withdrawn by the admin\"},\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"},\"WatcherManagerChanged(address)\":{\"notice\":\"Emitted when the manager address changes\"}},\"kind\":\"user\",\"methods\":{\"AMB()\":{\"notice\":\"Address of the AMB on this domain.\"},\"DOMAIN()\":{\"notice\":\"The domain of this Messaging (i.e. Connector) contract.\"},\"MERKLE()\":{\"notice\":\"MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root will be sent crosschain to the hub for aggregation and redistribution.\"},\"MIRROR_DOMAIN()\":{\"notice\":\"The domain of the corresponding messaging (i.e. Connector) contract.\"},\"PROCESS_GAS()\":{\"notice\":\"Minimum gas for processing a received message (reserved for handle)\"},\"RESERVE_GAS()\":{\"notice\":\"Reserved gas (to ensure tx completes in case message processing runs out)\"},\"ROOT_MANAGER()\":{\"notice\":\"RootManager contract address.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"addSender(address)\":{\"notice\":\"Adds a sender to the allowlist.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"delayBlocks()\":{\"notice\":\"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary.\"},\"dispatch(uint32,bytes32,bytes)\":{\"notice\":\"This function adds transfers to the outbound transfer merkle tree.\"},\"home()\":{\"notice\":\"Get the local inbox contract from the xAppConnectionManager\"},\"isReplica(address)\":{\"notice\":\"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\"},\"lastSentBlock()\":{\"notice\":\"Tracks the last block that we sent a message.\"},\"localDomain()\":{\"notice\":\"This provides the implementation for what is defined in the ConnectorManager to avoid storing the domain redundantly\"},\"messages(bytes32)\":{\"notice\":\"Mapping of message leaves to MessageStatus, keyed on leaf.\"},\"mirrorConnector()\":{\"notice\":\"Connector on L2 for L1 connectors, and vice versa.\"},\"nonces(uint32)\":{\"notice\":\"domain => next available nonce for the domain.\"},\"outboundRoot()\":{\"notice\":\"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"pause()\":{\"notice\":\"Watchers can pause contracts if fraud is detected\"},\"pendingAggregateRoots(bytes32)\":{\"notice\":\"This will hold the commit block for incoming aggregateRoots from the hub chain. Once they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can be used for proving inclusion of crosschain messages.\"},\"processMessage(bytes)\":{\"notice\":\"Processes a message received by an AMB\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)\":{\"notice\":\"Must be able to call the `handle` function on the BridgeRouter contract. This is called on the destination domain to handle incoming messages. Proving: Calculates the expected inbound root from an origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this calculated inbound root is included in the current aggregateRoot, given its index in the aggregator tree and the proof of inclusion. Processing: After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for execution.\"},\"provenAggregateRoots(bytes32)\":{\"notice\":\"This tracks the roots of the aggregate tree containing outbound roots from all other supported domains. The current version is the one that is known to be past the delayBlocks time period.\"},\"provenMessageRoots(bytes32)\":{\"notice\":\"This tracks whether the root has been proven to exist within the given aggregate root.\"},\"rateLimitBlocks()\":{\"notice\":\"The number of blocks required between message sending events.\"},\"removePendingAggregateRoot(bytes32)\":{\"notice\":\"Manually remove a pending aggregateRoot by owner if the contract is paused.\"},\"removeSender(address)\":{\"notice\":\"Removes a sender from the allowlist.\"},\"renounceOwnership()\":{\"notice\":\"Remove ability to renounce ownership\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"send(bytes)\":{\"notice\":\"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)\"},\"sentMessageRoots(bytes32)\":{\"notice\":\"This mapping records all message roots that have already been sent in order to prevent redundant message roots from being sent to hub.\"},\"setDelayBlocks(uint256)\":{\"notice\":\"Set the `delayBlocks`, the period in blocks over which an incoming message is verified.\"},\"setMirrorConnector(address)\":{\"notice\":\"Sets the address of the l2Connector for this domain\"},\"setRateLimitBlocks(uint256)\":{\"notice\":\"Set the rate limit (number of blocks) at which we can send messages from this contract to the hub chain using the `send` method.\"},\"setWatcherManager(address)\":{\"notice\":\"Owner can enroll a watcher (abilities are defined by inheriting contracts)\"},\"unpause()\":{\"notice\":\"Owner can unpause contracts if fraud is detected by watchers\"},\"verifySender(address)\":{\"notice\":\"Checks the cross domain sender for a given address\"},\"watcherManager()\":{\"notice\":\"The `WatcherManager` contract governs the watcher allowlist.\"},\"withdrawFunds(address)\":{\"notice\":\"This function should be callable by owner, and send funds trapped on a connector to the provided recipient.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol\":\"PolygonSpokeConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n    /**\\n     * @dev Emitted when the pause is triggered by `account`.\\n     */\\n    event Paused(address account);\\n\\n    /**\\n     * @dev Emitted when the pause is lifted by `account`.\\n     */\\n    event Unpaused(address account);\\n\\n    bool private _paused;\\n\\n    /**\\n     * @dev Initializes the contract in unpaused state.\\n     */\\n    constructor() {\\n        _paused = false;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    modifier whenNotPaused() {\\n        _requireNotPaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    modifier whenPaused() {\\n        _requirePaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the contract is paused, and false otherwise.\\n     */\\n    function paused() public view virtual returns (bool) {\\n        return _paused;\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is paused.\\n     */\\n    function _requireNotPaused() internal view virtual {\\n        require(!paused(), \\\"Pausable: paused\\\");\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is not paused.\\n     */\\n    function _requirePaused() internal view virtual {\\n        require(paused(), \\\"Pausable: not paused\\\");\\n    }\\n\\n    /**\\n     * @dev Triggers stopped state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    function _pause() internal virtual whenNotPaused {\\n        _paused = true;\\n        emit Paused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Returns to normal state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    function _unpause() internal virtual whenPaused {\\n        _paused = false;\\n        emit Unpaused(_msgSender());\\n    }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"contracts/messaging/MerkleTreeManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnableUpgradeable} from \\\"../shared/ProposedOwnableUpgradeable.sol\\\";\\nimport {MerkleLib} from \\\"./libraries/MerkleLib.sol\\\";\\n\\n/**\\n * @title MerkleTreeManager\\n * @notice Contains a Merkle tree instance and exposes read/write functions for the tree.\\n * @dev On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector.\\n */\\ncontract MerkleTreeManager is ProposedOwnableUpgradeable {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleTreeManager__setArborist_zeroAddress();\\n  error MerkleTreeManager__setArborist_alreadyArborist();\\n\\n  // ============ Events ============\\n\\n  event ArboristUpdated(address previous, address updated);\\n\\n  event LeafInserted(bytes32 root, uint256 count, bytes32 leaf);\\n\\n  event LeavesInserted(bytes32 root, uint256 count, bytes32[] leaves);\\n\\n  // ============ Libraries ============\\n\\n  using MerkleLib for MerkleLib.Tree;\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Core data structure with which this contract is tasked with keeping custody.\\n   * Writable only by the designated arborist.\\n   */\\n  MerkleLib.Tree public tree;\\n\\n  /**\\n   * @notice The arborist contract that has permission to write to this tree.\\n   * @dev This could be the root manager contract or a spoke connector contract, for example.\\n   */\\n  address public arborist;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyArborist() {\\n    require(arborist == msg.sender, \\\"!arborist\\\");\\n    _;\\n  }\\n\\n  // ============ Getters ============\\n\\n  /**\\n   * @notice Returns the current branch.\\n   */\\n  function branch() public view returns (bytes32[32] memory) {\\n    return tree.branch;\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the current root.\\n   */\\n  function root() public view returns (bytes32) {\\n    return tree.root();\\n  }\\n\\n  /**\\n   * @notice Returns the number of inserted leaves in the tree (current index).\\n   */\\n  function count() public view returns (uint256) {\\n    return tree.count;\\n  }\\n\\n  /**\\n   * @notice Convenience getter: returns the root and count.\\n   */\\n  function rootAndCount() public view returns (bytes32, uint256) {\\n    return (tree.root(), tree.count);\\n  }\\n\\n  // ======== Initializer =========\\n\\n  function initialize(address _arborist) public initializer {\\n    __MerkleTreeManager_init(_arborist);\\n    __ProposedOwnable_init();\\n  }\\n\\n  /**\\n   * @dev Initializes MerkleTreeManager instance. Sets the msg.sender as the initial permissioned\\n   */\\n  function __MerkleTreeManager_init(address _arborist) internal onlyInitializing {\\n    __MerkleTreeManager_init_unchained(_arborist);\\n  }\\n\\n  function __MerkleTreeManager_init_unchained(address _arborist) internal onlyInitializing {\\n    arborist = _arborist;\\n  }\\n\\n  // ============ Admin Functions ==============\\n\\n  /**\\n   * @notice Method for the current arborist to assign write permissions to a new arborist.\\n   * @param newArborist The new address to set as the current arborist.\\n   */\\n  function setArborist(address newArborist) external onlyOwner {\\n    if (newArborist == address(0)) revert MerkleTreeManager__setArborist_zeroAddress();\\n    address current = arborist;\\n    if (current == newArborist) revert MerkleTreeManager__setArborist_alreadyArborist();\\n\\n    // Emit updated event\\n    emit ArboristUpdated(current, newArborist);\\n\\n    arborist = newArborist;\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as there is a possibility the\\n   * arborist may change.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ========= Public Functions =========\\n\\n  /**\\n   * @notice Inserts the given leaves into the tree.\\n   * @param leaves The leaves to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32[] memory leaves) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // For > 1 leaf, considerably more efficient to put this tree into memory, conduct operations,\\n    // then re-assign it to storage - *especially* if we have multiple leaves to insert.\\n    MerkleLib.Tree memory _tree = tree;\\n\\n    uint256 leafCount = leaves.length;\\n    for (uint256 i; i < leafCount; ) {\\n      // Insert the new node (using in-memory method).\\n      _tree = _tree.insert(leaves[i]);\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // Write the newly updated tree to storage.\\n    tree = _tree;\\n\\n    // Get return details for convenience.\\n    _count = _tree.count;\\n    // NOTE: Root calculation method currently reads from storage only.\\n    _root = tree.root();\\n\\n    emit LeavesInserted(_root, _count, leaves);\\n  }\\n\\n  /**\\n   * @notice Inserts the given leaf into the tree.\\n   * @param leaf The leaf to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32 leaf) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // Insert the new node.\\n    tree = tree.insert(leaf);\\n    _count = tree.count;\\n    _root = tree.root();\\n\\n    emit LeafInserted(_root, _count, leaf);\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[48] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x6eb338843435d4e859de1c71b9ad458c41aeba79002eaa58a463ef86effda89a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherClient.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Pausable} from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\nimport {WatcherManager} from \\\"./WatcherManager.sol\\\";\\n\\n/**\\n * @notice This contract abstracts the functionality of the watcher manager.\\n * Contracts can inherit this contract to be able to use the watcher manager's shared watcher set.\\n */\\n\\ncontract WatcherClient is ProposedOwnable, Pausable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted when the manager address changes\\n   * @param watcherManager The updated manager\\n   */\\n  event WatcherManagerChanged(address watcherManager);\\n\\n  // ============ Properties ============\\n  /**\\n   * @notice The `WatcherManager` contract governs the watcher allowlist.\\n   * @dev Multiple clients can share a watcher set using the same manager\\n   */\\n  WatcherManager public watcherManager;\\n\\n  // ============ Constructor ============\\n  constructor(address _watcherManager) ProposedOwnable() {\\n    watcherManager = WatcherManager(_watcherManager);\\n  }\\n\\n  // ============ Modifiers ============\\n  /**\\n   * @notice Enforces the sender is the watcher\\n   */\\n  modifier onlyWatcher() {\\n    require(watcherManager.isWatcher(msg.sender), \\\"!watcher\\\");\\n    _;\\n  }\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @notice Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function setWatcherManager(address _watcherManager) external onlyOwner {\\n    require(_watcherManager != address(watcherManager), \\\"already watcher manager\\\");\\n    watcherManager = WatcherManager(_watcherManager);\\n    emit WatcherManagerChanged(_watcherManager);\\n  }\\n\\n  /**\\n   * @notice Owner can unpause contracts if fraud is detected by watchers\\n   */\\n  function unpause() external onlyOwner whenPaused {\\n    _unpause();\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as only the owner\\n   * is able to unpause the contracts. You can still propose `address(0)`,\\n   * but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ============ Watcher fns ============\\n\\n  /**\\n   * @notice Watchers can pause contracts if fraud is detected\\n   */\\n  function pause() external onlyWatcher whenNotPaused {\\n    _pause();\\n  }\\n}\\n\",\"keccak256\":\"0x97b0da2c0317359ef2980d1f3c5fcdd7df2bdacbedf216dcbda521b96124444a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can\\n * inherit to make use of the same watcher set.\\n */\\n\\ncontract WatcherManager is ProposedOwnable {\\n  // ============ Events ============\\n  event WatcherAdded(address watcher);\\n\\n  event WatcherRemoved(address watcher);\\n\\n  // ============ Properties ============\\n  mapping(address => bool) public isWatcher;\\n\\n  // ============ Constructor ============\\n  constructor() ProposedOwnable() {\\n    _setOwner(msg.sender);\\n  }\\n\\n  // ============ Modifiers ============\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @dev Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function addWatcher(address _watcher) external onlyOwner {\\n    require(!isWatcher[_watcher], \\\"already watcher\\\");\\n    isWatcher[_watcher] = true;\\n    emit WatcherAdded(_watcher);\\n  }\\n\\n  /**\\n   * @dev Owner can unenroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function removeWatcher(address _watcher) external onlyOwner {\\n    require(isWatcher[_watcher], \\\"!exist\\\");\\n    delete isWatcher[_watcher];\\n    emit WatcherRemoved(_watcher);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as the watcher griefing\\n   * vector exists. You can still propose `address(0)`, but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n}\\n\",\"keccak256\":\"0x94d9db4cd19453c9047164f697011163a42a6e12f9b2e1d7fbcfb35a7d021318\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/Connector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IConnector} from \\\"../interfaces/IConnector.sol\\\";\\n\\n/**\\n * @title Connector\\n * @author Connext Labs, Inc.\\n * @notice This contract has the messaging interface functions used by all connectors.\\n *\\n * @dev This contract stores information about mirror connectors, but can be used as a\\n * base for contracts that do not have a mirror (i.e. the connector handling messaging on\\n * mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\\n * will be empty\\n *\\n * @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\\n * or `mirrorGas`\\n */\\nabstract contract Connector is ProposedOwnable, IConnector {\\n  // ========== Custom Errors ===========\\n\\n  error Connector__processMessage_notUsed();\\n\\n  // ============ Events ============\\n\\n  event NewConnector(\\n    uint32 indexed domain,\\n    uint32 indexed mirrorDomain,\\n    address amb,\\n    address rootManager,\\n    address mirrorConnector\\n  );\\n\\n  event MirrorConnectorUpdated(address previous, address current);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The domain of this Messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable DOMAIN;\\n\\n  /**\\n   * @notice Address of the AMB on this domain.\\n   */\\n  address public immutable AMB;\\n\\n  /**\\n   * @notice RootManager contract address.\\n   */\\n  address public immutable ROOT_MANAGER;\\n\\n  /**\\n   * @notice The domain of the corresponding messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable MIRROR_DOMAIN;\\n\\n  /**\\n   * @notice Connector on L2 for L1 connectors, and vice versa.\\n   */\\n  address public mirrorConnector;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered AMB\\n   */\\n  modifier onlyAMB() {\\n    require(msg.sender == AMB, \\\"!AMB\\\");\\n    _;\\n  }\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered ROOT_MANAGER\\n   */\\n  modifier onlyRootManager() {\\n    // NOTE: RootManager will be zero address for spoke connectors.\\n    // Only root manager can dispatch a message to spokes/L2s via the hub connector.\\n    require(msg.sender == ROOT_MANAGER, \\\"!rootManager\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) ProposedOwnable() {\\n    // set the owner\\n    _setOwner(msg.sender);\\n\\n    // sanity checks on values\\n    require(_domain != 0, \\\"empty domain\\\");\\n    require(_rootManager != address(0), \\\"empty rootManager\\\");\\n    // see note at top of contract on why the mirror values are not sanity checked\\n\\n    // set immutables\\n    DOMAIN = _domain;\\n    AMB = _amb;\\n    ROOT_MANAGER = _rootManager;\\n    MIRROR_DOMAIN = _mirrorDomain;\\n    // set mutables if defined\\n    if (_mirrorConnector != address(0)) {\\n      _setMirrorConnector(_mirrorConnector);\\n    }\\n\\n    emit NewConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector);\\n  }\\n\\n  // ============ Receivable ============\\n  /**\\n   * @notice Connectors may need to receive native asset to handle fees when sending a\\n   * message\\n   */\\n  receive() external payable {}\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Sets the address of the l2Connector for this domain\\n   */\\n  function setMirrorConnector(address _mirrorConnector) public onlyOwner {\\n    _setMirrorConnector(_mirrorConnector);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice Processes a message received by an AMB\\n   * @dev This is called by AMBs to process messages originating from mirror connector\\n   */\\n  function processMessage(bytes memory _data) external virtual onlyAMB {\\n    _processMessage(_data);\\n    emit MessageProcessed(_data, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Checks the cross domain sender for a given address\\n   */\\n  function verifySender(address _expected) external returns (bool) {\\n    return _verifySender(_expected);\\n  }\\n\\n  // ============ Virtual Functions ============\\n\\n  /**\\n   * @notice This function is used by the Connext contract on the l2 domain to send a message to the\\n   * l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\\n   * @param _data The contents of the message\\n   * @param _encodedData Data used to send the message; specific to connector\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal virtual;\\n\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(\\n    bytes memory /* _data */\\n  ) internal virtual {\\n    // By default, reverts. This is to ensure the call path is not used unless this function is\\n    // overridden by the inheriting class\\n    revert Connector__processMessage_notUsed();\\n  }\\n\\n  /**\\n   * @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\\n   * is the expected address.\\n   * @dev Should be overridden by the implementing Connector contract.\\n   */\\n  function _verifySender(address _expected) internal virtual returns (bool);\\n\\n  // ============ Private Functions ============\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal virtual {\\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\\n    mirrorConnector = _mirrorConnector;\\n  }\\n}\\n\",\"keccak256\":\"0x08d4077a1b5caf9f46491206064bb24bee467dd741b42fed3d30a608eea83368\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/ConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IConnectorManager} from \\\"../interfaces/IConnectorManager.sol\\\";\\nimport {IOutbox} from \\\"../interfaces/IOutbox.sol\\\";\\n\\n/**\\n * @notice This is an interface to allow the `Messaging` contract to be used\\n * as a `XappConnectionManager` on all router contracts.\\n *\\n * @dev Each nomad router contract has a `XappConnectionClient`, which references a\\n * XappConnectionManager to get the `Home` (outbox) and approved `Replica` (inbox)\\n * instances. At any point the client can replace the manager it's pointing to,\\n * changing the underlying messaging connection.\\n */\\nabstract contract ConnectorManager is IConnectorManager {\\n  constructor() {}\\n\\n  function home() public view returns (IOutbox) {\\n    return IOutbox(address(this));\\n  }\\n\\n  function isReplica(address _potentialReplica) public view returns (bool) {\\n    return _potentialReplica == address(this);\\n  }\\n\\n  function localDomain() external view virtual returns (uint32);\\n}\\n\",\"keccak256\":\"0x0112a527de062459aadfc2c8aa59a81c379d53c0f646f7869c6250e343ba91be\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/SpokeConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ReentrancyGuard} from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {ExcessivelySafeCall} from \\\"../../shared/libraries/ExcessivelySafeCall.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {MerkleLib} from \\\"../libraries/MerkleLib.sol\\\";\\nimport {Message} from \\\"../libraries/Message.sol\\\";\\nimport {RateLimited} from \\\"../libraries/RateLimited.sol\\\";\\n\\nimport {MerkleTreeManager} from \\\"../MerkleTreeManager.sol\\\";\\nimport {WatcherClient} from \\\"../WatcherClient.sol\\\";\\n\\nimport {Connector, ProposedOwnable} from \\\"./Connector.sol\\\";\\nimport {ConnectorManager} from \\\"./ConnectorManager.sol\\\";\\n\\n/**\\n * @title SpokeConnector\\n * @author Connext Labs, Inc.\\n * @notice This contract implements the messaging functions needed on the spoke-side of a given AMB.\\n * The SpokeConnector extends the HubConnector functionality by being able to send, store, and prove\\n * messages.\\n *\\n * @dev If you are deploying this contract to mainnet, then the mirror values stored in the HubConnector\\n * will be unused\\n */\\nabstract contract SpokeConnector is Connector, ConnectorManager, WatcherClient, RateLimited, ReentrancyGuard {\\n  // ============ Libraries ============\\n\\n  using MerkleLib for MerkleLib.Tree;\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n  using Message for bytes29;\\n\\n  // ============ Events ============\\n\\n  event SenderAdded(address sender);\\n\\n  event SenderRemoved(address sender);\\n\\n  event AggregateRootReceived(bytes32 root);\\n\\n  event AggregateRootRemoved(bytes32 root);\\n\\n  event AggregateRootVerified(bytes32 indexed root);\\n\\n  event Dispatch(bytes32 leaf, uint256 index, bytes32 root, bytes message);\\n\\n  event Process(bytes32 leaf, bool success, bytes returnData);\\n\\n  event DelayBlocksUpdated(uint256 indexed updated, address caller);\\n\\n  /**\\n   * @notice Emitted when funds are withdrawn by the admin\\n   * @dev See comments in `withdrawFunds`\\n   * @param to The recipient of the funds\\n   * @param amount The amount withdrawn\\n   */\\n  event FundsWithdrawn(address indexed to, uint256 amount);\\n\\n  event MessageProven(bytes32 indexed leaf, bytes32 indexed aggregateRoot, uint256 aggregateIndex);\\n\\n  // ============ Structs ============\\n\\n  // Status of Message:\\n  //   0 - None - message has not been proven or processed\\n  //   1 - Proven - message inclusion proof has been validated\\n  //   2 - Processed - message has been dispatched to recipient\\n  enum MessageStatus {\\n    None,\\n    Proven,\\n    Processed\\n  }\\n\\n  /**\\n   * Struct for submitting a proof for a given message. Used in `proveAndProcess` below.\\n   * @param message Bytes of message to be processed. The hash of this message is considered the leaf.\\n   * @param proof Merkle proof of inclusion for given leaf.\\n   * @param index Index of leaf in home's merkle tree.\\n   */\\n  struct Proof {\\n    bytes message;\\n    bytes32[32] path;\\n    uint256 index;\\n  }\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Number of blocks to delay the processing of a message to allow for watchers to verify\\n   * the validity and pause if necessary.\\n   */\\n  uint256 public delayBlocks;\\n\\n  /**\\n   * @notice MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root\\n   * will be sent crosschain to the hub for aggregation and redistribution.\\n   */\\n  MerkleTreeManager public immutable MERKLE;\\n\\n  /**\\n   * @notice Minimum gas for processing a received message (reserved for handle)\\n   */\\n  uint256 public immutable PROCESS_GAS;\\n\\n  /**\\n   * @notice Reserved gas (to ensure tx completes in case message processing runs out)\\n   */\\n  uint256 public immutable RESERVE_GAS;\\n\\n  /**\\n   * @notice This will hold the commit block for incoming aggregateRoots from the hub chain. Once\\n   * they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can\\n   * be used for proving inclusion of crosschain messages.\\n   *\\n   * @dev NOTE: A commit block of 0 should be considered invalid (it is an empty entry in the\\n   * mapping). We must ALWAYS ensure the value is not 0 before checking whether it has surpassed the\\n   * verification period.\\n   */\\n  mapping(bytes32 => uint256) public pendingAggregateRoots;\\n\\n  /**\\n   * @notice This tracks the roots of the aggregate tree containing outbound roots from all other\\n   * supported domains. The current version is the one that is known to be past the delayBlocks\\n   * time period.\\n   * @dev This root is the root of the tree that is aggregated on mainnet (composed of all the roots\\n   * of previous trees).\\n   */\\n  mapping(bytes32 => bool) public provenAggregateRoots;\\n\\n  /**\\n   * @notice This tracks whether the root has been proven to exist within the given aggregate root.\\n   * @dev Tracking this is an optimization so you dont have to prove inclusion of the same constituent\\n   * root many times.\\n   */\\n  mapping(bytes32 => bool) public provenMessageRoots;\\n\\n  /**\\n   * @notice This mapping records all message roots that have already been sent in order to prevent\\n   * redundant message roots from being sent to hub.\\n   */\\n  mapping(bytes32 => bool) public sentMessageRoots;\\n\\n  /**\\n   * @dev This is used for the `onlyAllowlistedSender` modifier, which gates who\\n   * can send messages using `dispatch`.\\n   */\\n  mapping(address => bool) public allowlistedSenders;\\n\\n  /**\\n   * @notice domain => next available nonce for the domain.\\n   */\\n  mapping(uint32 => uint32) public nonces;\\n\\n  /**\\n   * @notice Mapping of message leaves to MessageStatus, keyed on leaf.\\n   */\\n  mapping(bytes32 => MessageStatus) public messages;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyAllowlistedSender() {\\n    require(allowlistedSenders[msg.sender], \\\"!allowlisted\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new SpokeConnector instance.\\n   * @param _domain The domain this connector lives on.\\n   * @param _mirrorDomain The hub domain.\\n   * @param _amb The address of the AMB on the spoke domain this connector lives on.\\n   * @param _rootManager The address of the RootManager on the hub.\\n   * @param _mirrorConnector The address of the spoke connector.\\n   * @param _processGas The gas costs used in `handle` to ensure meaningful state changes can occur (minimum gas needed\\n   * to handle transaction).\\n   * @param _reserveGas The gas costs reserved when `handle` is called to ensure failures are handled.\\n   * @param _delayBlocks The delay for the validation period for incoming messages in blocks.\\n   * @param _merkle The address of the MerkleTreeManager on this spoke domain.\\n   * @param _watcherManager The address of the WatcherManager to whom this connector is a client.\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    uint256 _processGas,\\n    uint256 _reserveGas,\\n    uint256 _delayBlocks,\\n    address _merkle,\\n    address _watcherManager\\n  )\\n    ConnectorManager()\\n    Connector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector)\\n    WatcherClient(_watcherManager)\\n  {\\n    // Sanity check: constants are reasonable.\\n    require(_processGas > 850_000 - 1, \\\"!process gas\\\");\\n    require(_reserveGas > 15_000 - 1, \\\"!reserve gas\\\");\\n    PROCESS_GAS = _processGas;\\n    RESERVE_GAS = _reserveGas;\\n\\n    require(_merkle != address(0), \\\"!zero merkle\\\");\\n    MERKLE = MerkleTreeManager(_merkle);\\n\\n    delayBlocks = _delayBlocks;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Adds a sender to the allowlist.\\n   * @dev Only allowlisted routers (senders) can call `dispatch`.\\n   */\\n  function addSender(address _sender) public onlyOwner {\\n    allowlistedSenders[_sender] = true;\\n    emit SenderAdded(_sender);\\n  }\\n\\n  /**\\n   * @notice Removes a sender from the allowlist.\\n   * @dev Only allowlisted routers (senders) can call `dispatch`.\\n   */\\n  function removeSender(address _sender) public onlyOwner {\\n    delete allowlistedSenders[_sender];\\n    emit SenderRemoved(_sender);\\n  }\\n\\n  /**\\n   * @notice Set the `delayBlocks`, the period in blocks over which an incoming message\\n   * is verified.\\n   */\\n  function setDelayBlocks(uint256 _delayBlocks) public onlyOwner {\\n    require(_delayBlocks != delayBlocks, \\\"!delayBlocks\\\");\\n    emit DelayBlocksUpdated(_delayBlocks, msg.sender);\\n    delayBlocks = _delayBlocks;\\n  }\\n\\n  /**\\n   * @notice Set the rate limit (number of blocks) at which we can send messages from\\n   * this contract to the hub chain using the `send` method.\\n   * @dev Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\\n   * @param _rateLimit The number of blocks require between sending messages. If set to\\n   * 0, rate limiting for this spoke connector will be disabled.\\n   */\\n  function setRateLimitBlocks(uint256 _rateLimit) public onlyOwner {\\n    _setRateLimitBlocks(_rateLimit);\\n  }\\n\\n  /**\\n   * @notice Manually remove a pending aggregateRoot by owner if the contract is paused.\\n   * @dev This method is required for handling fraud cases in the current construction.\\n   * @param _fraudulentRoot Target fraudulent root that should be erased from the\\n   * `pendingAggregateRoots` mapping.\\n   */\\n  function removePendingAggregateRoot(bytes32 _fraudulentRoot) public onlyOwner whenPaused {\\n    // Sanity check: pending aggregate root exists.\\n    require(pendingAggregateRoots[_fraudulentRoot] != 0, \\\"aggregateRoot !exists\\\");\\n    delete pendingAggregateRoots[_fraudulentRoot];\\n    emit AggregateRootRemoved(_fraudulentRoot);\\n  }\\n\\n  /**\\n   * @notice This function should be callable by owner, and send funds trapped on\\n   * a connector to the provided recipient.\\n   * @dev Withdraws the entire balance of the contract.\\n   *\\n   * @param _to The recipient of the funds withdrawn\\n   */\\n  function withdrawFunds(address _to) public onlyOwner {\\n    uint256 amount = address(this).balance;\\n    Address.sendValue(payable(_to), amount);\\n    emit FundsWithdrawn(_to, amount);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as it is impossible in the\\n   * WatcherClient, and as long as only the owner can remove pending roots in case of\\n   * fraud.\\n   */\\n  function renounceOwnership() public virtual override(ProposedOwnable, WatcherClient) onlyOwner {}\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice This returns the root of all messages with the origin domain as this domain (i.e.\\n   * all outbound messages)\\n   */\\n  function outboundRoot() external view returns (bytes32) {\\n    return MERKLE.root();\\n  }\\n\\n  /**\\n   * @notice This provides the implementation for what is defined in the ConnectorManager\\n   * to avoid storing the domain redundantly\\n   */\\n  function localDomain() external view override returns (uint32) {\\n    return DOMAIN;\\n  }\\n\\n  /**\\n   * @notice This returns the root of all messages with the origin domain as this domain (i.e.\\n   * all outbound messages)\\n   */\\n  function send(bytes memory _encodedData) external payable whenNotPaused rateLimited {\\n    bytes32 root = MERKLE.root();\\n    require(sentMessageRoots[root] == false, \\\"root already sent\\\");\\n    bytes memory _data = abi.encodePacked(root);\\n    _sendMessage(_data, _encodedData);\\n    sentMessageRoots[root] = true;\\n    emit MessageSent(_data, _encodedData, msg.sender);\\n  }\\n\\n  /**\\n   * @notice This function adds transfers to the outbound transfer merkle tree.\\n   * @dev The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \\\"hub\\\"),\\n   * it will be combined into a single aggregate root by RootManager (along with outbound roots from other\\n   * chains). This aggregate root will be redistributed to all destination chains.\\n   *\\n   * NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external onlyAllowlistedSender returns (bytes32, bytes memory) {\\n    // Get the next nonce for the destination domain, then increment it.\\n    uint32 _nonce = nonces[_destinationDomain]++;\\n\\n    // Format the message into packed bytes.\\n    bytes memory _message = Message.formatMessage(\\n      DOMAIN,\\n      TypeCasts.addressToBytes32(msg.sender),\\n      _nonce,\\n      _destinationDomain,\\n      _recipientAddress,\\n      _messageBody\\n    );\\n\\n    // Insert the hashed message into the Merkle tree.\\n    bytes32 _messageHash = keccak256(_message);\\n\\n    // Returns the root calculated after insertion of message, needed for events for\\n    // watchers\\n    (bytes32 _root, uint256 _count) = MERKLE.insert(_messageHash);\\n\\n    // Emit Dispatch event with message information.\\n    // NOTE: Current leaf index is count - 1 since new leaf has already been inserted.\\n    emit Dispatch(_messageHash, _count - 1, _root, _message);\\n    return (_messageHash, _message);\\n  }\\n\\n  /**\\n   * @notice Must be able to call the `handle` function on the BridgeRouter contract. This is called\\n   * on the destination domain to handle incoming messages.\\n   *\\n   * Proving:\\n   * Calculates the expected inbound root from an origin chain given a leaf (message hash),\\n   * the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this\\n   * calculated inbound root is included in the current aggregateRoot, given its index in the aggregator\\n   * tree and the proof of inclusion.\\n   *\\n   * Processing:\\n   * After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for\\n   * execution.\\n   *\\n   * @dev Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they\\n   * must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.\\n   * @dev Intended to be called by the relayer at specific intervals during runtime.\\n   * @dev Will record a calculated root as having been proven if we've already proven that it was included\\n   * in the aggregateRoot.\\n   *\\n   * @param _proofs Batch of Proofs containing messages for proving/processing.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   */\\n  function proveAndProcess(\\n    Proof[] calldata _proofs,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) external whenNotPaused nonReentrant {\\n    // Sanity check: proofs are included.\\n    require(_proofs.length > 0, \\\"!proofs\\\");\\n\\n    // Optimization: calculate the inbound root for the first message in the batch and validate that\\n    // it's included in the aggregator tree. We can use this as a reference for every calculation\\n    // below to minimize storage access calls.\\n    bytes32 _messageHash = keccak256(_proofs[0].message);\\n    // TODO: Could use an array of sharedRoots so you can submit a message batch of messages with\\n    // different origins.\\n    bytes32 _messageRoot = calculateMessageRoot(_messageHash, _proofs[0].path, _proofs[0].index);\\n\\n    // Handle proving this message root is included in the target aggregate root.\\n    proveMessageRoot(_messageRoot, _aggregateRoot, _aggregatePath, _aggregateIndex);\\n    // Assuming the inbound message root was proven, the first message is now considered proven.\\n    messages[_messageHash] = MessageStatus.Proven;\\n\\n    // Now we handle proving all remaining messages in the batch - they should all share the same\\n    // inbound root!\\n    uint256 len = _proofs.length;\\n    for (uint32 i = 1; i < len; ) {\\n      _messageHash = keccak256(_proofs[i].message);\\n      bytes32 _calculatedRoot = calculateMessageRoot(_messageHash, _proofs[i].path, _proofs[i].index);\\n      // Make sure this root matches the validated inbound root.\\n      require(_calculatedRoot == _messageRoot, \\\"!sharedRoot\\\");\\n      // Message is proven!\\n      messages[_messageHash] = MessageStatus.Proven;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // All messages have been proven. We iterate separately here to process each message in the batch.\\n    // NOTE: Going through the proving phase for all messages in the batch BEFORE processing ensures\\n    // we hit reverts before we consume unbounded gas from `process` calls.\\n    for (uint32 i = 0; i < len; ) {\\n      process(_proofs[i].message);\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  // ============ Private Functions ============\\n\\n  /**\\n   * @notice This is either called by the Connector (AKA `this`) on the spoke (L2) chain after retrieving\\n   * latest `aggregateRoot` from the AMB (sourced from mainnet) OR called by the AMB directly.\\n   * @dev Must check the msg.sender on the origin chain to ensure only the root manager is passing\\n   * these roots.\\n   */\\n  function receiveAggregateRoot(bytes32 _newRoot) internal {\\n    require(_newRoot != bytes32(\\\"\\\"), \\\"new root empty\\\");\\n    require(pendingAggregateRoots[_newRoot] == 0, \\\"root already pending\\\");\\n    require(!provenAggregateRoots[_newRoot], \\\"root already proven\\\");\\n\\n    pendingAggregateRoots[_newRoot] = block.number;\\n    emit AggregateRootReceived(_newRoot);\\n  }\\n\\n  /**\\n   * @notice Checks whether the given aggregate root has surpassed the verification period.\\n   * @dev Reverts if the given aggregate root is invalid (does not exist) OR has not surpassed\\n   * verification period.\\n   * @dev If the target aggregate root is pending and HAS surpassed the verification period, then we will\\n   * move it over to the proven mapping.\\n   * @param _aggregateRoot Target aggregate root to verify.\\n   */\\n  function verifyAggregateRoot(bytes32 _aggregateRoot) internal {\\n    // 0. Sanity check: root is not 0.\\n    require(_aggregateRoot != bytes32(\\\"\\\"), \\\"aggregateRoot empty\\\");\\n\\n    // 1. Check to see if the target *aggregate* root has already been proven.\\n    if (provenAggregateRoots[_aggregateRoot]) {\\n      return; // Short circuit if this root is proven.\\n    }\\n\\n    // 2. The target aggregate root must be pending. Aggregate root commit block entry MUST exist.\\n    uint256 _aggregateRootCommitBlock = pendingAggregateRoots[_aggregateRoot];\\n    require(_aggregateRootCommitBlock != 0, \\\"aggregateRoot !exist\\\");\\n\\n    // 3. Pending aggregate root has surpassed the `delayBlocks` verification period.\\n    require(block.number - _aggregateRootCommitBlock >= delayBlocks, \\\"aggregateRoot !verified\\\");\\n\\n    // 4. The target aggregate root has surpassed verification period, we can move it over to the\\n    // proven mapping.\\n    provenAggregateRoots[_aggregateRoot] = true;\\n    emit AggregateRootVerified(_aggregateRoot);\\n    // May as well delete the pending aggregate root entry for the gas refund: it should no longer\\n    // be needed.\\n    delete pendingAggregateRoots[_aggregateRoot];\\n  }\\n\\n  /**\\n   * @notice Checks whether a given message is valid. If so, calculates the expected inbound root from an\\n   * origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion.\\n   * @dev Reverts if message's MessageStatus != None (i.e. if message was already proven or processed).\\n   *\\n   * @param _messageHash Leaf (message hash) that requires proving.\\n   * @param _messagePath Merkle path of inclusion for the leaf.\\n   * @param _messageIndex Index of leaf in the merkle tree on the origin chain of the message.\\n   * @return bytes32 Calculated root.\\n   **/\\n  function calculateMessageRoot(\\n    bytes32 _messageHash,\\n    bytes32[32] calldata _messagePath,\\n    uint256 _messageIndex\\n  ) internal view returns (bytes32) {\\n    // Ensure that the given message has not already been proven and processed.\\n    require(messages[_messageHash] == MessageStatus.None, \\\"!MessageStatus.None\\\");\\n    // Calculate the expected inbound root from the message origin based on the proof.\\n    // NOTE: Assuming a valid message was submitted with correct path/index, this should be an inbound root\\n    // that the hub has received. If the message were invalid, the root calculated here would not exist in the\\n    // aggregate root.\\n    return MerkleLib.branchRoot(_messageHash, _messagePath, _messageIndex);\\n  }\\n\\n  /**\\n   * @notice Prove an inbound message root from another chain is included in the target aggregateRoot.\\n   * @param _messageRoot The message root we want to verify.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   */\\n  function proveMessageRoot(\\n    bytes32 _messageRoot,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) internal {\\n    // 0. Check to see if the root for this batch has already been proven.\\n    if (provenMessageRoots[_messageRoot]) {\\n      // NOTE: It seems counter-intuitive, but we do NOT need to prove the given `_aggregateRoot` param\\n      // is valid IFF the `_messageRoot` has already been proven; we know that the `_messageRoot` has to\\n      // have been included in *some* proven aggregate root historically.\\n      return;\\n    }\\n\\n    // 1. Ensure aggregate root has been proven.\\n    verifyAggregateRoot(_aggregateRoot);\\n\\n    // 2. Calculate an aggregate root, given this inbound root (as leaf), path (proof), and index.\\n    bytes32 _calculatedAggregateRoot = MerkleLib.branchRoot(_messageRoot, _aggregatePath, _aggregateIndex);\\n\\n    // 3. Check to make sure it matches the current aggregate root we have stored.\\n    require(_calculatedAggregateRoot == _aggregateRoot, \\\"invalid inboundRoot\\\");\\n\\n    // This inbound root has been proven. We should specify that to optimize future calls.\\n    provenMessageRoots[_messageRoot] = true;\\n    emit MessageProven(_messageRoot, _aggregateRoot, _aggregateIndex);\\n  }\\n\\n  /**\\n   * @notice Given formatted message, attempts to dispatch message payload to end recipient.\\n   * @dev Recipient must implement a `handle` method (refer to IMessageRecipient.sol)\\n   * Reverts if formatted message's destination domain is not the Replica's domain,\\n   * if message has not been proven,\\n   * or if not enough gas is provided for the dispatch transaction.\\n   * @param _message Formatted message\\n   * @return _success TRUE iff dispatch transaction succeeded\\n   */\\n  function process(bytes memory _message) internal returns (bool _success) {\\n    bytes29 _m = _message.ref(0);\\n    // ensure message was meant for this domain\\n    require(_m.destination() == DOMAIN, \\\"!destination\\\");\\n    // ensure message has been proven\\n    bytes32 _messageHash = _m.keccak();\\n    require(messages[_messageHash] == MessageStatus.Proven, \\\"!proven\\\");\\n    // check re-entrancy guard\\n    // require(entered == 1, \\\"!reentrant\\\");\\n    // entered = 0;\\n    // update message status as processed\\n    messages[_messageHash] = MessageStatus.Processed;\\n    // A call running out of gas TYPICALLY errors the whole tx. We want to\\n    // a) ensure the call has a sufficient amount of gas to make a\\n    //    meaningful state change.\\n    // b) ensure that if the subcall runs out of gas, that the tx as a whole\\n    //    does not revert (i.e. we still mark the message processed)\\n    // To do this, we require that we have enough gas to process\\n    // and still return. We then delegate only the minimum processing gas.\\n    require(gasleft() > PROCESS_GAS + RESERVE_GAS - 1, \\\"!gas\\\");\\n    // get the message recipient\\n    address _recipient = _m.recipientAddress();\\n    // set up for assembly call\\n    uint256 _gas = PROCESS_GAS;\\n    uint16 _maxCopy = 256;\\n    // allocate memory for returndata\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    bytes memory _calldata = abi.encodeWithSignature(\\n      \\\"handle(uint32,uint32,bytes32,bytes)\\\",\\n      _m.origin(),\\n      _m.nonce(),\\n      _m.sender(),\\n      _m.body().clone()\\n    );\\n\\n    (_success, _returnData) = ExcessivelySafeCall.excessivelySafeCall(_recipient, _gas, 0, _maxCopy, _calldata);\\n\\n    // emit process results\\n    emit Process(_messageHash, _success, _returnData);\\n  }\\n}\\n\",\"keccak256\":\"0xde9ea6f462f33e62618d069fddaeed24268d13cfe03abc9dd388824a5e4e3896\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {FxBaseChildTunnel} from \\\"./tunnel/FxBaseChildTunnel.sol\\\";\\n\\nimport {SpokeConnector} from \\\"../SpokeConnector.sol\\\";\\n\\n// address constant MUMBAI_FX_CHILD = 0xCf73231F28B7331BBe3124B907840A94851f9f11;\\n// address constant GOERLI_CHECKPOINT_MANAGER = 0x2890bA17EfE978480615e330ecB65333b880928e;\\n// address constant GOERLI_FX_ROOT = 0x3d1d3E34f7fB6D26245E6640E1c50710eFFf15bA;\\n\\n// address constant MAINNET_FX_CHILD = 0x8397259c983751DAf40400790063935a11afa28a;\\n// address constant MAINNET_CHECKPOINT_MANAGER = 0x86E4Dc95c7FBdBf52e33D563BbDB00823894C287;\\n// address constant MAINNET_FX_ROOT = 0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2;\\n\\ncontract PolygonSpokeConnector is SpokeConnector, FxBaseChildTunnel {\\n  // ============ Constructor ============\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    uint256 _processGas,\\n    uint256 _reserveGas,\\n    uint256 _delayBlocks,\\n    address _merkle,\\n    address _watcherManager\\n  )\\n    SpokeConnector(\\n      _domain,\\n      _mirrorDomain,\\n      _amb,\\n      _rootManager,\\n      _mirrorConnector,\\n      _processGas,\\n      _reserveGas,\\n      _delayBlocks,\\n      _merkle,\\n      _watcherManager\\n    )\\n    FxBaseChildTunnel(_amb)\\n  {}\\n\\n  // ============ Private fns ============\\n\\n  function _verifySender(address _expected) internal pure override returns (bool) {\\n    // NOTE: Always return false here because we cannot verify sender except in\\n    // _processMessageFromRoot, where it is exposed in plaintext\\n    return false;\\n  }\\n\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\\n    // Should not include specialized calldata\\n    require(_encodedData.length == 0, \\\"!data length\\\");\\n    _sendMessageToRoot(_data);\\n  }\\n\\n  function _processMessageFromRoot(\\n    uint256, /* stateId */\\n    address sender,\\n    bytes memory data\\n  ) internal override validateSender(sender) {\\n    // NOTE: Don't need to check that sender is mirrorConnector as this is checked in validateSender()\\n    // get the data (should be the aggregate root)\\n    require(data.length == 32, \\\"!length\\\");\\n    // update the aggregate root on the domain\\n    receiveAggregateRoot(bytes32(data));\\n\\n    emit MessageProcessed(data, msg.sender);\\n  }\\n\\n  // DO NOT override _processMessage, should revert from `Connector` class. All messages must use the\\n  // `processMessageFromRoot` flow.\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal override {\\n    // NOTE: FxBaseChildTunnel has the following code in their `setFxRootTunnel`:\\n    // ```\\n    // require(setFxRootTunnel == address(0x0), \\\"FxBaseChildTunnel: ROOT_TUNNEL_ALREADY_SET\\\");\\n    // ```\\n    // Which means this function will revert if updating the `mirrorConnector`. In that case, in\\n    // changes the spoke connector should also be redeployed\\n    super._setMirrorConnector(_mirrorConnector);\\n\\n    setFxRootTunnel(_mirrorConnector);\\n  }\\n}\\n\",\"keccak256\":\"0xc909a22cbcc8d4cbc4fceca80703b0c6c0e94b16b2601db23e8506a3d6ebe484\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/polygon/tunnel/FxBaseChildTunnel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/tunnel/FxBaseChildTunnel.sol\\npragma solidity 0.8.17;\\n\\n// IFxMessageProcessor represents interface to process message\\ninterface IFxMessageProcessor {\\n  function processMessageFromRoot(\\n    uint256 stateId,\\n    address rootMessageSender,\\n    bytes calldata data\\n  ) external;\\n}\\n\\n/**\\n * @notice Mock child tunnel contract to receive and send message from L2\\n */\\nabstract contract FxBaseChildTunnel is IFxMessageProcessor {\\n  // MessageTunnel on L1 will get data from this event\\n  event MessageSent(bytes message);\\n\\n  // fx child\\n  address public fxChild;\\n\\n  // fx root tunnel\\n  address public fxRootTunnel;\\n\\n  constructor(address _fxChild) {\\n    fxChild = _fxChild;\\n  }\\n\\n  // Sender must be fxRootTunnel in case of ERC20 tunnel\\n  modifier validateSender(address sender) {\\n    require(sender == fxRootTunnel, \\\"FxBaseChildTunnel: INVALID_SENDER_FROM_ROOT\\\");\\n    _;\\n  }\\n\\n  // set fxRootTunnel if not set already\\n  function setFxRootTunnel(address _fxRootTunnel) internal virtual {\\n    require(fxRootTunnel == address(0x0), \\\"FxBaseChildTunnel: ROOT_TUNNEL_ALREADY_SET\\\");\\n    fxRootTunnel = _fxRootTunnel;\\n  }\\n\\n  function processMessageFromRoot(\\n    uint256 stateId,\\n    address rootMessageSender,\\n    bytes calldata data\\n  ) external override {\\n    require(msg.sender == fxChild, \\\"FxBaseChildTunnel: INVALID_SENDER\\\");\\n    _processMessageFromRoot(stateId, rootMessageSender, data);\\n  }\\n\\n  /**\\n   * @notice Emit message that can be received on Root Tunnel\\n   * @dev Call the internal function when need to emit message\\n   * @param message bytes message that will be sent to Root Tunnel\\n   * some message examples -\\n   *   abi.encode(tokenId);\\n   *   abi.encode(tokenId, tokenMetadata);\\n   *   abi.encode(messageType, messageData);\\n   */\\n  function _sendMessageToRoot(bytes memory message) internal {\\n    emit MessageSent(message);\\n  }\\n\\n  /**\\n   * @notice Process message received from Root Tunnel\\n   * @dev function needs to be implemented to handle message as per requirement\\n   * This is called by onStateReceive function.\\n   * Since it is called via a system call, any event will not be emitted during its execution.\\n   * @param stateId unique state id\\n   * @param sender root message sender\\n   * @param message bytes message that was sent from Root Tunnel\\n   */\\n  function _processMessageFromRoot(\\n    uint256 stateId,\\n    address sender,\\n    bytes memory message\\n  ) internal virtual;\\n}\\n\",\"keccak256\":\"0x67dfd67d5da348a6e6cb36af590b5316dbb937a8eba2b28531351cc7f0be29d0\",\"license\":\"MIT\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/MerkleLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MerkleLib\\n * @author Illusory Systems Inc.\\n * @notice An incremental merkle tree modeled on the eth2 deposit contract.\\n **/\\nlibrary MerkleLib {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleLib__insert_treeIsFull();\\n\\n  // ============ Constants =============\\n\\n  uint256 internal constant TREE_DEPTH = 32;\\n  uint256 internal constant MAX_LEAVES = 2**TREE_DEPTH - 1;\\n\\n  /**\\n   * @dev Z_i represent the hash values at different heights for a binary tree with leaf values equal to `0`.\\n   * (e.g. Z_1 is the keccak256 hash of (0x0, 0x0), Z_2 is the keccak256 hash of (Z_1, Z_1), etc...)\\n   * Z_0 is the bottom of the 33-layer tree, Z_32 is the top (i.e. root).\\n   * Used to shortcut calculation in root calculation methods below.\\n   */\\n  bytes32 internal constant Z_0 = hex\\\"0000000000000000000000000000000000000000000000000000000000000000\\\";\\n  bytes32 internal constant Z_1 = hex\\\"ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5\\\";\\n  bytes32 internal constant Z_2 = hex\\\"b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30\\\";\\n  bytes32 internal constant Z_3 = hex\\\"21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85\\\";\\n  bytes32 internal constant Z_4 = hex\\\"e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344\\\";\\n  bytes32 internal constant Z_5 = hex\\\"0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d\\\";\\n  bytes32 internal constant Z_6 = hex\\\"887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968\\\";\\n  bytes32 internal constant Z_7 = hex\\\"ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83\\\";\\n  bytes32 internal constant Z_8 = hex\\\"9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af\\\";\\n  bytes32 internal constant Z_9 = hex\\\"cefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0\\\";\\n  bytes32 internal constant Z_10 = hex\\\"f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5\\\";\\n  bytes32 internal constant Z_11 = hex\\\"f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892\\\";\\n  bytes32 internal constant Z_12 = hex\\\"3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c\\\";\\n  bytes32 internal constant Z_13 = hex\\\"c1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb\\\";\\n  bytes32 internal constant Z_14 = hex\\\"5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc\\\";\\n  bytes32 internal constant Z_15 = hex\\\"da7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2\\\";\\n  bytes32 internal constant Z_16 = hex\\\"2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f\\\";\\n  bytes32 internal constant Z_17 = hex\\\"e1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a\\\";\\n  bytes32 internal constant Z_18 = hex\\\"5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0\\\";\\n  bytes32 internal constant Z_19 = hex\\\"b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0\\\";\\n  bytes32 internal constant Z_20 = hex\\\"c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2\\\";\\n  bytes32 internal constant Z_21 = hex\\\"f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9\\\";\\n  bytes32 internal constant Z_22 = hex\\\"5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377\\\";\\n  bytes32 internal constant Z_23 = hex\\\"4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652\\\";\\n  bytes32 internal constant Z_24 = hex\\\"cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef\\\";\\n  bytes32 internal constant Z_25 = hex\\\"0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d\\\";\\n  bytes32 internal constant Z_26 = hex\\\"b8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0\\\";\\n  bytes32 internal constant Z_27 = hex\\\"838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e\\\";\\n  bytes32 internal constant Z_28 = hex\\\"662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e\\\";\\n  bytes32 internal constant Z_29 = hex\\\"388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322\\\";\\n  bytes32 internal constant Z_30 = hex\\\"93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735\\\";\\n  bytes32 internal constant Z_31 = hex\\\"8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9\\\";\\n  bytes32 internal constant Z_32 = hex\\\"27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757\\\";\\n\\n  // ============= Structs ==============\\n\\n  /**\\n   * @notice Struct representing incremental merkle tree. Contains current\\n   * branch and the number of inserted leaves in the tree.\\n   **/\\n  struct Tree {\\n    bytes32[TREE_DEPTH] branch;\\n    uint256 count;\\n  }\\n\\n  // ========= Write Methods =========\\n\\n  /**\\n   * @notice Inserts a given node (leaf) into merkle tree. Operates on an in-memory tree and\\n   * returns an updated version of that tree.\\n   * @dev Reverts if the tree is already full.\\n   * @param node Element to insert into tree.\\n   * @return Tree Updated tree.\\n   **/\\n  function insert(Tree memory tree, bytes32 node) internal pure returns (Tree memory) {\\n    // Update tree.count to increase the current count by 1 since we'll be including a new node.\\n    uint256 size = ++tree.count;\\n    if (size > MAX_LEAVES) revert MerkleLib__insert_treeIsFull();\\n\\n    // Loop starting at 0, ending when we've finished inserting the node (i.e. hashing it) into\\n    // the active branch. Each loop we cut size in half, hashing the inserted node up the active\\n    // branch along the way.\\n    for (uint256 i; i < TREE_DEPTH; ) {\\n      // Check if the current size is odd; if so, we set this index in the branch to be the node.\\n      if ((size & 1) == 1) {\\n        // If i > 0, then this node will be a hash of the original node with every layer up\\n        // until layer `i`.\\n        tree.branch[i] = node;\\n        return tree;\\n      }\\n      // If the size is not yet odd, we hash the current index in the tree branch with the node.\\n      node = keccak256(abi.encodePacked(tree.branch[i], node));\\n      size >>= 1; // Cut size in half (statement equivalent to: `size /= 2`).\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // As the loop should always end prematurely with the `return` statement, this code should\\n    // be unreachable. We revert here just to be safe.\\n    revert MerkleLib__insert_treeIsFull();\\n  }\\n\\n  // ========= Read Methods =========\\n\\n  /**\\n   * @notice Calculates and returns tree's current root.\\n   * @return _current bytes32 root.\\n   **/\\n  function root(Tree storage tree) internal view returns (bytes32 _current) {\\n    uint256 _index = tree.count;\\n\\n    if (_index == 0) {\\n      return Z_32;\\n    }\\n\\n    uint256 i;\\n    assembly {\\n      let TREE_SLOT := tree.slot\\n\\n      for {\\n\\n      } true {\\n\\n      } {\\n        for {\\n\\n        } true {\\n\\n        } {\\n          if and(_index, 1) {\\n            mstore(0, sload(TREE_SLOT))\\n            mstore(0x20, Z_0)\\n            _current := keccak256(0, 0x40)\\n            break\\n          }\\n\\n          if and(_index, shl(1, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 1)))\\n            mstore(0x20, Z_1)\\n            _current := keccak256(0, 0x40)\\n            i := 1\\n            break\\n          }\\n\\n          if and(_index, shl(2, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 2)))\\n            mstore(0x20, Z_2)\\n            _current := keccak256(0, 0x40)\\n            i := 2\\n            break\\n          }\\n\\n          if and(_index, shl(3, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 3)))\\n            mstore(0x20, Z_3)\\n            _current := keccak256(0, 0x40)\\n            i := 3\\n            break\\n          }\\n\\n          if and(_index, shl(4, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 4)))\\n            mstore(0x20, Z_4)\\n            _current := keccak256(0, 0x40)\\n            i := 4\\n            break\\n          }\\n\\n          if and(_index, shl(5, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 5)))\\n            mstore(0x20, Z_5)\\n            _current := keccak256(0, 0x40)\\n            i := 5\\n            break\\n          }\\n\\n          if and(_index, shl(6, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 6)))\\n            mstore(0x20, Z_6)\\n            _current := keccak256(0, 0x40)\\n            i := 6\\n            break\\n          }\\n\\n          if and(_index, shl(7, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 7)))\\n            mstore(0x20, Z_7)\\n            _current := keccak256(0, 0x40)\\n            i := 7\\n            break\\n          }\\n\\n          if and(_index, shl(8, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 8)))\\n            mstore(0x20, Z_8)\\n            _current := keccak256(0, 0x40)\\n            i := 8\\n            break\\n          }\\n\\n          if and(_index, shl(9, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 9)))\\n            mstore(0x20, Z_9)\\n            _current := keccak256(0, 0x40)\\n            i := 9\\n            break\\n          }\\n\\n          if and(_index, shl(10, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 10)))\\n            mstore(0x20, Z_10)\\n            _current := keccak256(0, 0x40)\\n            i := 10\\n            break\\n          }\\n\\n          if and(_index, shl(11, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 11)))\\n            mstore(0x20, Z_11)\\n            _current := keccak256(0, 0x40)\\n            i := 11\\n            break\\n          }\\n\\n          if and(_index, shl(12, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 12)))\\n            mstore(0x20, Z_12)\\n            _current := keccak256(0, 0x40)\\n            i := 12\\n            break\\n          }\\n\\n          if and(_index, shl(13, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 13)))\\n            mstore(0x20, Z_13)\\n            _current := keccak256(0, 0x40)\\n            i := 13\\n            break\\n          }\\n\\n          if and(_index, shl(14, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 14)))\\n            mstore(0x20, Z_14)\\n            _current := keccak256(0, 0x40)\\n            i := 14\\n            break\\n          }\\n\\n          if and(_index, shl(15, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 15)))\\n            mstore(0x20, Z_15)\\n            _current := keccak256(0, 0x40)\\n            i := 15\\n            break\\n          }\\n\\n          if and(_index, shl(16, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 16)))\\n            mstore(0x20, Z_16)\\n            _current := keccak256(0, 0x40)\\n            i := 16\\n            break\\n          }\\n\\n          if and(_index, shl(17, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 17)))\\n            mstore(0x20, Z_17)\\n            _current := keccak256(0, 0x40)\\n            i := 17\\n            break\\n          }\\n\\n          if and(_index, shl(18, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 18)))\\n            mstore(0x20, Z_18)\\n            _current := keccak256(0, 0x40)\\n            i := 18\\n            break\\n          }\\n\\n          if and(_index, shl(19, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 19)))\\n            mstore(0x20, Z_19)\\n            _current := keccak256(0, 0x40)\\n            i := 19\\n            break\\n          }\\n\\n          if and(_index, shl(20, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 20)))\\n            mstore(0x20, Z_20)\\n            _current := keccak256(0, 0x40)\\n            i := 20\\n            break\\n          }\\n\\n          if and(_index, shl(21, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 21)))\\n            mstore(0x20, Z_21)\\n            _current := keccak256(0, 0x40)\\n            i := 21\\n            break\\n          }\\n\\n          if and(_index, shl(22, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 22)))\\n            mstore(0x20, Z_22)\\n            _current := keccak256(0, 0x40)\\n            i := 22\\n            break\\n          }\\n\\n          if and(_index, shl(23, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 23)))\\n            mstore(0x20, Z_23)\\n            _current := keccak256(0, 0x40)\\n            i := 23\\n            break\\n          }\\n\\n          if and(_index, shl(24, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 24)))\\n            mstore(0x20, Z_24)\\n            _current := keccak256(0, 0x40)\\n            i := 24\\n            break\\n          }\\n\\n          if and(_index, shl(25, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 25)))\\n            mstore(0x20, Z_25)\\n            _current := keccak256(0, 0x40)\\n            i := 25\\n            break\\n          }\\n\\n          if and(_index, shl(26, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 26)))\\n            mstore(0x20, Z_26)\\n            _current := keccak256(0, 0x40)\\n            i := 26\\n            break\\n          }\\n\\n          if and(_index, shl(27, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 27)))\\n            mstore(0x20, Z_27)\\n            _current := keccak256(0, 0x40)\\n            i := 27\\n            break\\n          }\\n\\n          if and(_index, shl(28, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 28)))\\n            mstore(0x20, Z_28)\\n            _current := keccak256(0, 0x40)\\n            i := 28\\n            break\\n          }\\n\\n          if and(_index, shl(29, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 29)))\\n            mstore(0x20, Z_29)\\n            _current := keccak256(0, 0x40)\\n            i := 29\\n            break\\n          }\\n\\n          if and(_index, shl(30, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 30)))\\n            mstore(0x20, Z_30)\\n            _current := keccak256(0, 0x40)\\n            i := 30\\n            break\\n          }\\n\\n          if and(_index, shl(31, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 31)))\\n            mstore(0x20, Z_31)\\n            _current := keccak256(0, 0x40)\\n            i := 31\\n            break\\n          }\\n\\n          _current := Z_32\\n          i := 32\\n          break\\n        }\\n\\n        if gt(i, 30) {\\n          break\\n        }\\n\\n        {\\n          if lt(i, 1) {\\n            switch and(_index, shl(1, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_1)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 1)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 2) {\\n            switch and(_index, shl(2, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_2)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 2)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 3) {\\n            switch and(_index, shl(3, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_3)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 3)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 4) {\\n            switch and(_index, shl(4, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_4)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 4)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 5) {\\n            switch and(_index, shl(5, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_5)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 5)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 6) {\\n            switch and(_index, shl(6, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_6)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 6)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 7) {\\n            switch and(_index, shl(7, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_7)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 7)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 8) {\\n            switch and(_index, shl(8, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_8)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 8)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 9) {\\n            switch and(_index, shl(9, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_9)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 9)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 10) {\\n            switch and(_index, shl(10, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_10)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 10)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 11) {\\n            switch and(_index, shl(11, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_11)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 11)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 12) {\\n            switch and(_index, shl(12, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_12)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 12)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 13) {\\n            switch and(_index, shl(13, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_13)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 13)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 14) {\\n            switch and(_index, shl(14, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_14)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 14)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 15) {\\n            switch and(_index, shl(15, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_15)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 15)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 16) {\\n            switch and(_index, shl(16, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_16)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 16)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 17) {\\n            switch and(_index, shl(17, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_17)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 17)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 18) {\\n            switch and(_index, shl(18, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_18)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 18)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 19) {\\n            switch and(_index, shl(19, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_19)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 19)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 20) {\\n            switch and(_index, shl(20, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_20)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 20)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 21) {\\n            switch and(_index, shl(21, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_21)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 21)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 22) {\\n            switch and(_index, shl(22, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_22)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 22)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 23) {\\n            switch and(_index, shl(23, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_23)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 23)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 24) {\\n            switch and(_index, shl(24, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_24)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 24)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 25) {\\n            switch and(_index, shl(25, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_25)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 25)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 26) {\\n            switch and(_index, shl(26, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_26)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 26)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 27) {\\n            switch and(_index, shl(27, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_27)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 27)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 28) {\\n            switch and(_index, shl(28, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_28)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 28)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 29) {\\n            switch and(_index, shl(29, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_29)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 29)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 30) {\\n            switch and(_index, shl(30, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_30)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 30)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 31) {\\n            switch and(_index, shl(31, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_31)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 31)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n        }\\n\\n        break\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the merkle root for the given leaf `_item`,\\n   * a merkle branch, and the index of `_item` in the tree.\\n   * @param _item Merkle leaf\\n   * @param _branch Merkle proof\\n   * @param _index Index of `_item` in tree\\n   * @return _current Calculated merkle root\\n   **/\\n  function branchRoot(\\n    bytes32 _item,\\n    bytes32[TREE_DEPTH] memory _branch,\\n    uint256 _index\\n  ) internal pure returns (bytes32 _current) {\\n    assembly {\\n      _current := _item\\n      let BRANCH_DATA_OFFSET := _branch\\n      let f\\n\\n      f := shl(5, and(_index, 1))\\n      mstore(f, _current)\\n      mstore(sub(0x20, f), mload(BRANCH_DATA_OFFSET))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(1, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 1))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(2, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 2))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(3, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 3))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(4, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 4))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(5, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 5))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(6, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 6))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(7, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 7))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(8, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 8))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(9, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 9))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(10, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 10))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(11, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 11))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(12, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 12))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(13, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 13))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(14, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 14))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(15, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 15))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(16, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 16))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(17, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 17))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(18, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 18))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(19, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 19))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(20, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 20))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(21, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 21))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(22, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 22))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(23, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 23))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(24, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 24))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(25, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 25))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(26, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 26))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(27, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 27))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(28, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 28))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(29, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 29))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(30, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 30))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(31, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 31))))\\n      _current := keccak256(0, 0x40)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08c791dbeef6253813d74e2145183501fe7631c13d5ac9d768036f47b66b693e\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/Message.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\n/**\\n * @title Message Library\\n * @author Illusory Systems Inc.\\n * @notice Library for formatted messages used by Home and Replica.\\n **/\\nlibrary Message {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // Number of bytes in formatted message before `body` field\\n  uint256 internal constant PREFIX_LENGTH = 76;\\n\\n  /**\\n   * @notice Returns formatted (packed) message with provided fields\\n   * @param _originDomain Domain of home chain\\n   * @param _sender Address of sender as bytes32\\n   * @param _nonce Destination-specific nonce\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipient Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes of message body\\n   * @return Formatted message\\n   **/\\n  function formatMessage(\\n    uint32 _originDomain,\\n    bytes32 _sender,\\n    uint32 _nonce,\\n    uint32 _destinationDomain,\\n    bytes32 _recipient,\\n    bytes memory _messageBody\\n  ) internal pure returns (bytes memory) {\\n    return abi.encodePacked(_originDomain, _sender, _nonce, _destinationDomain, _recipient, _messageBody);\\n  }\\n\\n  /**\\n   * @notice Returns leaf of formatted message with provided fields.\\n   * @param _origin Domain of home chain\\n   * @param _sender Address of sender as bytes32\\n   * @param _nonce Destination-specific nonce number\\n   * @param _destination Domain of destination chain\\n   * @param _recipient Address of recipient on destination chain as bytes32\\n   * @param _body Raw bytes of message body\\n   * @return Leaf (hash) of formatted message\\n   **/\\n  function messageHash(\\n    uint32 _origin,\\n    bytes32 _sender,\\n    uint32 _nonce,\\n    uint32 _destination,\\n    bytes32 _recipient,\\n    bytes memory _body\\n  ) internal pure returns (bytes32) {\\n    return keccak256(formatMessage(_origin, _sender, _nonce, _destination, _recipient, _body));\\n  }\\n\\n  /// @notice Returns message's origin field\\n  function origin(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(0, 4));\\n  }\\n\\n  /// @notice Returns message's sender field\\n  function sender(bytes29 _message) internal pure returns (bytes32) {\\n    return _message.index(4, 32);\\n  }\\n\\n  /// @notice Returns message's nonce field\\n  function nonce(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(36, 4));\\n  }\\n\\n  /// @notice Returns message's destination field\\n  function destination(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(40, 4));\\n  }\\n\\n  /// @notice Returns message's recipient field as bytes32\\n  function recipient(bytes29 _message) internal pure returns (bytes32) {\\n    return _message.index(44, 32);\\n  }\\n\\n  /// @notice Returns message's recipient field as an address\\n  function recipientAddress(bytes29 _message) internal pure returns (address) {\\n    return TypeCasts.bytes32ToAddress(recipient(_message));\\n  }\\n\\n  /// @notice Returns message's body field as bytes29 (refer to TypedMemView library for details on bytes29 type)\\n  function body(bytes29 _message) internal pure returns (bytes29) {\\n    return _message.slice(PREFIX_LENGTH, _message.len() - PREFIX_LENGTH, 0);\\n  }\\n\\n  function leaf(bytes29 _message) internal pure returns (bytes32) {\\n    uint256 loc = _message.loc();\\n    uint256 len = _message.len();\\n    /*\\n    prev:\\n    return\\n      messageHash(\\n        origin(_message),\\n        sender(_message),\\n        nonce(_message),\\n        destination(_message),\\n        recipient(_message),\\n        TypedMemView.clone(body(_message))\\n      );\\n\\n      below added for gas optimization\\n     */\\n    bytes32 hash;\\n    assembly {\\n      hash := keccak256(loc, len)\\n    }\\n    return hash;\\n  }\\n}\\n\",\"keccak256\":\"0xa4212f7b88146588e8e0e24cddbc5dae6269618a722b34f00ea322b33fa1f36a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/RateLimited.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice An abstract contract intended to manage the rate limiting aspect of spoke\\n * connector messaging. Rate limiting the number of messages we can send over a span of\\n * blocks is used to mitigate key DoSing vectors for transporting messages between chains.\\n */\\nabstract contract RateLimited {\\n  // ========== Custom Errors ===========\\n\\n  error RateLimited__rateLimited_messageSendRateExceeded();\\n\\n  // ============ Events ============\\n\\n  event SendRateLimitUpdated(address updater, uint256 newRateLimit);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The number of blocks required between message sending events.\\n   * @dev NOTE: This value is 0 by default, meaning that rate limiting functionality\\n   * will naturally be disabled by default.\\n   */\\n  uint256 public rateLimitBlocks;\\n\\n  /**\\n   * @notice Tracks the last block that we sent a message.\\n   */\\n  uint256 public lastSentBlock;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Checks to see if we can send this block, given the current rate limit\\n   * setting and the last block we sent a message. If rate limit has been surpassed,\\n   * we update the `lastSentBlock` to be the current block.\\n   */\\n  modifier rateLimited() {\\n    // Check to make sure we have surpassed the number of rate limit blocks.\\n    if (lastSentBlock + rateLimitBlocks > block.number) {\\n      revert RateLimited__rateLimited_messageSendRateExceeded();\\n    }\\n    // Update the last block we sent a message to be the current one.\\n    lastSentBlock = block.number;\\n    _;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Update the current rate limit to a new value.\\n   */\\n  function _setRateLimitBlocks(uint256 _newRateLimit) internal {\\n    require(_newRateLimit != rateLimitBlocks, \\\"!new rate limit\\\");\\n    // NOTE: Setting the block rate limit interval to 0 will result in rate limiting\\n    // being disabled.\\n    rateLimitBlocks = _newRateLimit;\\n    emit SendRateLimitUpdated(msg.sender, _newRateLimit);\\n  }\\n}\\n\",\"keccak256\":\"0xcc185ae966c87441490aaa8c0779a7b3085961a7b8512d5973f1c34f641eeae3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/ProposedOwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {Initializable} from \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"./ProposedOwnable.sol\\\";\\n\\nabstract contract ProposedOwnableUpgradeable is Initializable, ProposedOwnable {\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial\\n   */\\n  function __ProposedOwnable_init() internal onlyInitializing {\\n    __ProposedOwnable_init_unchained();\\n  }\\n\\n  function __ProposedOwnable_init_unchained() internal onlyInitializing {\\n    _setOwner(msg.sender);\\n  }\\n\\n  /**\\n   * @dev This empty reserved space is put in place to allow future versions to add new\\n   * variables without shifting down storage in the inheritance chain.\\n   * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n   */\\n  uint256[47] private __GAP;\\n}\\n\",\"keccak256\":\"0x2b064b03a25915e93749905ef3aae516ffaac86b8ba9f126b614425b623bf477\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/ExcessivelySafeCall.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// Taken from: https://github.com/nomad-xyz/ExcessivelySafeCall\\n// NOTE: There is a difference between npm latest and github main versions\\n// where the latest github version allows you to specify an ether value.\\n\\nlibrary ExcessivelySafeCall {\\n  uint256 constant LOW_28_MASK = 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _value The value in wei to send to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeCall(\\n    address _target,\\n    uint256 _gas,\\n    uint256 _value,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := call(\\n        _gas, // gas\\n        _target, // recipient\\n        _value, // ether value\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeStaticCall(\\n    address _target,\\n    uint256 _gas,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal view returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := staticcall(\\n        _gas, // gas\\n        _target, // recipient\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /**\\n   * @notice Swaps function selectors in encoded contract calls\\n   * @dev Allows reuse of encoded calldata for functions with identical\\n   * argument types but different names. It simply swaps out the first 4 bytes\\n   * for the new selector. This function modifies memory in place, and should\\n   * only be used with caution.\\n   * @param _newSelector The new 4-byte selector\\n   * @param _buf The encoded contract args\\n   */\\n  function swapSelector(bytes4 _newSelector, bytes memory _buf) internal pure {\\n    require(_buf.length > 4 - 1);\\n    uint256 _mask = LOW_28_MASK;\\n    assembly {\\n      // load the first word of\\n      let _word := mload(add(_buf, 0x20))\\n      // mask out the top 4 bytes\\n      // /x\\n      _word := and(_word, _mask)\\n      _word := or(_newSelector, _word)\\n      mstore(add(_buf, 0x20), _word)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x5472b56fa56886620b1a8e4e2f12f8925500bb237a4dad38651c79db69f0724c\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39051,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"mirrorConnector","offset":0,"slot":"3","type":"t_address"},{"astId":10590,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"_paused","offset":20,"slot":"3","type":"t_bool"},{"astId":38824,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"watcherManager","offset":0,"slot":"4","type":"t_contract(WatcherManager)39005"},{"astId":49639,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"rateLimitBlocks","offset":0,"slot":"5","type":"t_uint256"},{"astId":49642,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"lastSentBlock","offset":0,"slot":"6","type":"t_uint256"},{"astId":10691,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"_status","offset":0,"slot":"7","type":"t_uint256"},{"astId":39546,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"delayBlocks","offset":0,"slot":"8","type":"t_uint256"},{"astId":39561,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"pendingAggregateRoots","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":39566,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"provenAggregateRoots","offset":0,"slot":"10","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39571,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"provenMessageRoots","offset":0,"slot":"11","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39576,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"sentMessageRoots","offset":0,"slot":"12","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39581,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"allowlistedSenders","offset":0,"slot":"13","type":"t_mapping(t_address,t_bool)"},{"astId":39586,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"nonces","offset":0,"slot":"14","type":"t_mapping(t_uint32,t_uint32)"},{"astId":39592,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"messages","offset":0,"slot":"15","type":"t_mapping(t_bytes32,t_enum(MessageStatus)39534)"},{"astId":46929,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"fxChild","offset":0,"slot":"16","type":"t_address"},{"astId":46931,"contract":"contracts/messaging/connectors/polygon/PolygonSpokeConnector.sol:PolygonSpokeConnector","label":"fxRootTunnel","offset":0,"slot":"17","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(WatcherManager)39005":{"encoding":"inplace","label":"contract WatcherManager","numberOfBytes":"20"},"t_enum(MessageStatus)39534":{"encoding":"inplace","label":"enum SpokeConnector.MessageStatus","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(MessageStatus)39534)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum SpokeConnector.MessageStatus)","numberOfBytes":"32","value":"t_enum(MessageStatus)39534"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_uint32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => uint32)","numberOfBytes":"32","value":"t_uint32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"}}},"userdoc":{"events":{"FundsWithdrawn(address,uint256)":{"notice":"Emitted when funds are withdrawn by the admin"},"MessageProcessed(bytes,address)":{"notice":"Emitted whenever a message is successfully received over an AMB"},"MessageSent(bytes,bytes,address)":{"notice":"Emitted whenever a message is successfully sent over an AMB"},"WatcherManagerChanged(address)":{"notice":"Emitted when the manager address changes"}},"kind":"user","methods":{"AMB()":{"notice":"Address of the AMB on this domain."},"DOMAIN()":{"notice":"The domain of this Messaging (i.e. Connector) contract."},"MERKLE()":{"notice":"MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root will be sent crosschain to the hub for aggregation and redistribution."},"MIRROR_DOMAIN()":{"notice":"The domain of the corresponding messaging (i.e. Connector) contract."},"PROCESS_GAS()":{"notice":"Minimum gas for processing a received message (reserved for handle)"},"RESERVE_GAS()":{"notice":"Reserved gas (to ensure tx completes in case message processing runs out)"},"ROOT_MANAGER()":{"notice":"RootManager contract address."},"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"addSender(address)":{"notice":"Adds a sender to the allowlist."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"delayBlocks()":{"notice":"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary."},"dispatch(uint32,bytes32,bytes)":{"notice":"This function adds transfers to the outbound transfer merkle tree."},"home()":{"notice":"Get the local inbox contract from the xAppConnectionManager"},"isReplica(address)":{"notice":"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager"},"lastSentBlock()":{"notice":"Tracks the last block that we sent a message."},"localDomain()":{"notice":"This provides the implementation for what is defined in the ConnectorManager to avoid storing the domain redundantly"},"messages(bytes32)":{"notice":"Mapping of message leaves to MessageStatus, keyed on leaf."},"mirrorConnector()":{"notice":"Connector on L2 for L1 connectors, and vice versa."},"nonces(uint32)":{"notice":"domain => next available nonce for the domain."},"outboundRoot()":{"notice":"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)"},"owner()":{"notice":"Returns the address of the current owner."},"pause()":{"notice":"Watchers can pause contracts if fraud is detected"},"pendingAggregateRoots(bytes32)":{"notice":"This will hold the commit block for incoming aggregateRoots from the hub chain. Once they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can be used for proving inclusion of crosschain messages."},"processMessage(bytes)":{"notice":"Processes a message received by an AMB"},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":{"notice":"Must be able to call the `handle` function on the BridgeRouter contract. This is called on the destination domain to handle incoming messages. Proving: Calculates the expected inbound root from an origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this calculated inbound root is included in the current aggregateRoot, given its index in the aggregator tree and the proof of inclusion. Processing: After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for execution."},"provenAggregateRoots(bytes32)":{"notice":"This tracks the roots of the aggregate tree containing outbound roots from all other supported domains. The current version is the one that is known to be past the delayBlocks time period."},"provenMessageRoots(bytes32)":{"notice":"This tracks whether the root has been proven to exist within the given aggregate root."},"rateLimitBlocks()":{"notice":"The number of blocks required between message sending events."},"removePendingAggregateRoot(bytes32)":{"notice":"Manually remove a pending aggregateRoot by owner if the contract is paused."},"removeSender(address)":{"notice":"Removes a sender from the allowlist."},"renounceOwnership()":{"notice":"Remove ability to renounce ownership"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"send(bytes)":{"notice":"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)"},"sentMessageRoots(bytes32)":{"notice":"This mapping records all message roots that have already been sent in order to prevent redundant message roots from being sent to hub."},"setDelayBlocks(uint256)":{"notice":"Set the `delayBlocks`, the period in blocks over which an incoming message is verified."},"setMirrorConnector(address)":{"notice":"Sets the address of the l2Connector for this domain"},"setRateLimitBlocks(uint256)":{"notice":"Set the rate limit (number of blocks) at which we can send messages from this contract to the hub chain using the `send` method."},"setWatcherManager(address)":{"notice":"Owner can enroll a watcher (abilities are defined by inheriting contracts)"},"unpause()":{"notice":"Owner can unpause contracts if fraud is detected by watchers"},"verifySender(address)":{"notice":"Checks the cross domain sender for a given address"},"watcherManager()":{"notice":"The `WatcherManager` contract governs the watcher allowlist."},"withdrawFunds(address)":{"notice":"This function should be callable by owner, and send funds trapped on a connector to the provided recipient."}},"version":1}}},"contracts/messaging/connectors/polygon/lib/ExitPayloadReader.sol":{"ExitPayloadReader":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e6a289739b0f76aa771c1ab592fb00a00e81197cf157b6dfc1b163b922f5998164736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE6 LOG2 DUP10 PUSH20 0x9B0F76AA771C1AB592FB00A00E81197CF157B6DF 0xC1 0xB1 PUSH4 0xB922F599 DUP2 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"189:4535:141:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;189:4535:141;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e6a289739b0f76aa771c1ab592fb00a00e81197cf157b6dfc1b163b922f5998164736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE6 LOG2 DUP10 PUSH20 0x9B0F76AA771C1AB592FB00A00E81197CF157B6DF 0xC1 0xB1 PUSH4 0xB922F599 DUP2 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"189:4535:141:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"copy(uint256,uint256,uint256)":"infinite","getBlockNumber(struct ExitPayloadReader.ExitPayload memory)":"infinite","getBlockProof(struct ExitPayloadReader.ExitPayload memory)":"infinite","getBlockTime(struct ExitPayloadReader.ExitPayload memory)":"infinite","getBranchMaskAsBytes(struct ExitPayloadReader.ExitPayload memory)":"infinite","getBranchMaskAsUint(struct ExitPayloadReader.ExitPayload memory)":"infinite","getData(struct ExitPayloadReader.Log memory)":"infinite","getEmitter(struct ExitPayloadReader.Log memory)":"infinite","getField(struct ExitPayloadReader.LogTopics memory,uint256)":"infinite","getHeaderNumber(struct ExitPayloadReader.ExitPayload memory)":"infinite","getLog(struct ExitPayloadReader.Receipt memory)":"infinite","getReceipt(struct ExitPayloadReader.ExitPayload memory)":"infinite","getReceiptLogIndex(struct ExitPayloadReader.ExitPayload memory)":"infinite","getReceiptProof(struct ExitPayloadReader.ExitPayload memory)":"infinite","getReceiptRoot(struct ExitPayloadReader.ExitPayload memory)":"infinite","getTopics(struct ExitPayloadReader.Log memory)":"infinite","getTxRoot(struct ExitPayloadReader.ExitPayload memory)":"infinite","toBytes(struct ExitPayloadReader.Receipt memory)":"infinite","toExitPayload(bytes memory)":"infinite","toRlpBytes(struct ExitPayloadReader.Log memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/polygon/lib/ExitPayloadReader.sol\":\"ExitPayloadReader\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/polygon/lib/ExitPayloadReader.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/ExitPayloadReader.sol\\npragma solidity 0.8.17;\\n\\nimport {RLPReader} from \\\"./RLPReader.sol\\\";\\n\\nlibrary ExitPayloadReader {\\n  using RLPReader for bytes;\\n  using RLPReader for RLPReader.RLPItem;\\n\\n  uint8 constant WORD_SIZE = 32;\\n\\n  struct ExitPayload {\\n    RLPReader.RLPItem[] data;\\n  }\\n\\n  struct Receipt {\\n    RLPReader.RLPItem[] data;\\n    bytes raw;\\n    uint256 logIndex;\\n  }\\n\\n  struct Log {\\n    RLPReader.RLPItem data;\\n    RLPReader.RLPItem[] list;\\n  }\\n\\n  struct LogTopics {\\n    RLPReader.RLPItem[] data;\\n  }\\n\\n  // copy paste of private copy() from RLPReader to avoid changing of existing contracts\\n  function copy(\\n    uint256 src,\\n    uint256 dest,\\n    uint256 len\\n  ) private pure {\\n    if (len == 0) return;\\n\\n    // copy as many word sizes as possible\\n    for (; len > WORD_SIZE - 1; len -= WORD_SIZE) {\\n      assembly {\\n        mstore(dest, mload(src))\\n      }\\n\\n      src += WORD_SIZE;\\n      dest += WORD_SIZE;\\n    }\\n\\n    if (len == 0) return;\\n\\n    // left over bytes. Mask is used to remove unwanted bytes from the word\\n    uint256 mask = 256**(WORD_SIZE - len) - 1;\\n    assembly {\\n      let srcpart := and(mload(src), not(mask)) // zero out src\\n      let destpart := and(mload(dest), mask) // retrieve the bytes\\n      mstore(dest, or(destpart, srcpart))\\n    }\\n  }\\n\\n  function toExitPayload(bytes memory data) internal pure returns (ExitPayload memory) {\\n    RLPReader.RLPItem[] memory payloadData = data.toRlpItem().toList();\\n\\n    return ExitPayload(payloadData);\\n  }\\n\\n  function getHeaderNumber(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[0].toUint();\\n  }\\n\\n  function getBlockProof(ExitPayload memory payload) internal pure returns (bytes memory) {\\n    return payload.data[1].toBytes();\\n  }\\n\\n  function getBlockNumber(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[2].toUint();\\n  }\\n\\n  function getBlockTime(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[3].toUint();\\n  }\\n\\n  function getTxRoot(ExitPayload memory payload) internal pure returns (bytes32) {\\n    return bytes32(payload.data[4].toUint());\\n  }\\n\\n  function getReceiptRoot(ExitPayload memory payload) internal pure returns (bytes32) {\\n    return bytes32(payload.data[5].toUint());\\n  }\\n\\n  function getReceipt(ExitPayload memory payload) internal pure returns (Receipt memory receipt) {\\n    receipt.raw = payload.data[6].toBytes();\\n    RLPReader.RLPItem memory receiptItem = receipt.raw.toRlpItem();\\n\\n    if (receiptItem.isList()) {\\n      // legacy tx\\n      receipt.data = receiptItem.toList();\\n    } else {\\n      // pop first byte before parsting receipt\\n      bytes memory typedBytes = receipt.raw;\\n      bytes memory result = new bytes(typedBytes.length - 1);\\n      uint256 srcPtr;\\n      uint256 destPtr;\\n      assembly {\\n        srcPtr := add(33, typedBytes)\\n        destPtr := add(0x20, result)\\n      }\\n\\n      copy(srcPtr, destPtr, result.length);\\n      receipt.data = result.toRlpItem().toList();\\n    }\\n\\n    receipt.logIndex = getReceiptLogIndex(payload);\\n    return receipt;\\n  }\\n\\n  function getReceiptProof(ExitPayload memory payload) internal pure returns (bytes memory) {\\n    return payload.data[7].toBytes();\\n  }\\n\\n  function getBranchMaskAsBytes(ExitPayload memory payload) internal pure returns (bytes memory) {\\n    return payload.data[8].toBytes();\\n  }\\n\\n  function getBranchMaskAsUint(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[8].toUint();\\n  }\\n\\n  function getReceiptLogIndex(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[9].toUint();\\n  }\\n\\n  // Receipt methods\\n  function toBytes(Receipt memory receipt) internal pure returns (bytes memory) {\\n    return receipt.raw;\\n  }\\n\\n  function getLog(Receipt memory receipt) internal pure returns (Log memory) {\\n    RLPReader.RLPItem memory logData = receipt.data[3].toList()[receipt.logIndex];\\n    return Log(logData, logData.toList());\\n  }\\n\\n  // Log methods\\n  function getEmitter(Log memory log) internal pure returns (address) {\\n    return RLPReader.toAddress(log.list[0]);\\n  }\\n\\n  function getTopics(Log memory log) internal pure returns (LogTopics memory) {\\n    return LogTopics(log.list[1].toList());\\n  }\\n\\n  function getData(Log memory log) internal pure returns (bytes memory) {\\n    return log.list[2].toBytes();\\n  }\\n\\n  function toRlpBytes(Log memory log) internal pure returns (bytes memory) {\\n    return log.data.toRlpBytes();\\n  }\\n\\n  // LogTopics methods\\n  function getField(LogTopics memory topics, uint256 index) internal pure returns (RLPReader.RLPItem memory) {\\n    return topics.data[index];\\n  }\\n}\\n\",\"keccak256\":\"0x0d07d60a794df4d3c0a41032f0ee46912daeb73369a3a112f376fcd0487fc107\",\"license\":\"MIT\"},\"contracts/messaging/connectors/polygon/lib/RLPReader.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/RLPReader.sol\\npragma solidity 0.8.17;\\n\\nlibrary RLPReader {\\n  uint8 constant STRING_SHORT_START = 0x80;\\n  uint8 constant STRING_LONG_START = 0xb8;\\n  uint8 constant LIST_SHORT_START = 0xc0;\\n  uint8 constant LIST_LONG_START = 0xf8;\\n  uint8 constant WORD_SIZE = 32;\\n\\n  struct RLPItem {\\n    uint256 len;\\n    uint256 memPtr;\\n  }\\n\\n  struct Iterator {\\n    RLPItem item; // Item that's being iterated over.\\n    uint256 nextPtr; // Position of the next item in the list.\\n  }\\n\\n  /*\\n   * @dev Returns the next element in the iteration. Reverts if it has not next element.\\n   * @param self The iterator.\\n   * @return The next element in the iteration.\\n   */\\n  function next(Iterator memory self) internal pure returns (RLPItem memory) {\\n    require(hasNext(self));\\n\\n    uint256 ptr = self.nextPtr;\\n    uint256 itemLength = _itemLength(ptr);\\n    self.nextPtr = ptr + itemLength;\\n\\n    return RLPItem(itemLength, ptr);\\n  }\\n\\n  /*\\n   * @dev Returns true if the iteration has more elements.\\n   * @param self The iterator.\\n   * @return true if the iteration has more elements.\\n   */\\n  function hasNext(Iterator memory self) internal pure returns (bool) {\\n    RLPItem memory item = self.item;\\n    return self.nextPtr < item.memPtr + item.len;\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function toRlpItem(bytes memory item) internal pure returns (RLPItem memory) {\\n    uint256 memPtr;\\n    assembly {\\n      memPtr := add(item, 0x20)\\n    }\\n\\n    return RLPItem(item.length, memPtr);\\n  }\\n\\n  /*\\n   * @dev Create an iterator. Reverts if item is not a list.\\n   * @param self The RLP item.\\n   * @return An 'Iterator' over the item.\\n   */\\n  function iterator(RLPItem memory self) internal pure returns (Iterator memory) {\\n    require(isList(self));\\n\\n    uint256 ptr = self.memPtr + _payloadOffset(self.memPtr);\\n    return Iterator(self, ptr);\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function rlpLen(RLPItem memory item) internal pure returns (uint256) {\\n    return item.len;\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function payloadLen(RLPItem memory item) internal pure returns (uint256) {\\n    return item.len - _payloadOffset(item.memPtr);\\n  }\\n\\n  /*\\n   * @param item RLP encoded list in bytes\\n   */\\n  function toList(RLPItem memory item) internal pure returns (RLPItem[] memory) {\\n    require(isList(item));\\n\\n    uint256 items = numItems(item);\\n    RLPItem[] memory result = new RLPItem[](items);\\n\\n    uint256 memPtr = item.memPtr + _payloadOffset(item.memPtr);\\n    uint256 dataLen;\\n    for (uint256 i = 0; i < items; ) {\\n      dataLen = _itemLength(memPtr);\\n      result[i] = RLPItem(dataLen, memPtr);\\n      memPtr = memPtr + dataLen;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    return result;\\n  }\\n\\n  // @return indicator whether encoded payload is a list. negate this function call for isData.\\n  function isList(RLPItem memory item) internal pure returns (bool) {\\n    if (item.len == 0) return false;\\n\\n    uint8 byte0;\\n    uint256 memPtr = item.memPtr;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < LIST_SHORT_START) return false;\\n    return true;\\n  }\\n\\n  /*\\n   * @dev A cheaper version of keccak256(toRlpBytes(item)) that avoids copying memory.\\n   * @return keccak256 hash of RLP encoded bytes.\\n   */\\n  function rlpBytesKeccak256(RLPItem memory item) internal pure returns (bytes32) {\\n    uint256 ptr = item.memPtr;\\n    uint256 len = item.len;\\n    bytes32 result;\\n    assembly {\\n      result := keccak256(ptr, len)\\n    }\\n    return result;\\n  }\\n\\n  function payloadLocation(RLPItem memory item) internal pure returns (uint256, uint256) {\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 memPtr = item.memPtr + offset;\\n    uint256 len = item.len - offset; // data length\\n    return (memPtr, len);\\n  }\\n\\n  /*\\n   * @dev A cheaper version of keccak256(toBytes(item)) that avoids copying memory.\\n   * @return keccak256 hash of the item payload.\\n   */\\n  function payloadKeccak256(RLPItem memory item) internal pure returns (bytes32) {\\n    (uint256 memPtr, uint256 len) = payloadLocation(item);\\n    bytes32 result;\\n    assembly {\\n      result := keccak256(memPtr, len)\\n    }\\n    return result;\\n  }\\n\\n  /** RLPItem conversions into data types **/\\n\\n  // @returns raw rlp encoding in bytes\\n  function toRlpBytes(RLPItem memory item) internal pure returns (bytes memory) {\\n    bytes memory result = new bytes(item.len);\\n    if (result.length == 0) return result;\\n\\n    uint256 ptr;\\n    assembly {\\n      ptr := add(0x20, result)\\n    }\\n\\n    copy(item.memPtr, ptr, item.len);\\n    return result;\\n  }\\n\\n  // any non-zero byte is considered true\\n  function toBoolean(RLPItem memory item) internal pure returns (bool) {\\n    require(item.len == 1);\\n    uint256 result;\\n    uint256 memPtr = item.memPtr;\\n    assembly {\\n      result := byte(0, mload(memPtr))\\n    }\\n\\n    return result == 0 ? false : true;\\n  }\\n\\n  function toAddress(RLPItem memory item) internal pure returns (address) {\\n    // 1 byte for the length prefix\\n    require(item.len == 21);\\n\\n    return address(uint160(toUint(item)));\\n  }\\n\\n  function toUint(RLPItem memory item) internal pure returns (uint256) {\\n    require(item.len > 0 && item.len < 33 + 1);\\n\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 len = item.len - offset;\\n\\n    uint256 result;\\n    uint256 memPtr = item.memPtr + offset;\\n    assembly {\\n      result := mload(memPtr)\\n\\n      // shfit to the correct location if neccesary\\n      if lt(len, 32) {\\n        result := div(result, exp(256, sub(32, len)))\\n      }\\n    }\\n\\n    return result;\\n  }\\n\\n  // enforces 32 byte length\\n  function toUintStrict(RLPItem memory item) internal pure returns (uint256) {\\n    // one byte prefix\\n    require(item.len == 33);\\n\\n    uint256 result;\\n    uint256 memPtr = item.memPtr + 1;\\n    assembly {\\n      result := mload(memPtr)\\n    }\\n\\n    return result;\\n  }\\n\\n  function toBytes(RLPItem memory item) internal pure returns (bytes memory) {\\n    require(item.len > 0);\\n\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 len = item.len - offset; // data length\\n    bytes memory result = new bytes(len);\\n\\n    uint256 destPtr;\\n    assembly {\\n      destPtr := add(0x20, result)\\n    }\\n\\n    copy(item.memPtr + offset, destPtr, len);\\n    return result;\\n  }\\n\\n  /*\\n   * Private Helpers\\n   */\\n\\n  // @return number of payload items inside an encoded list.\\n  function numItems(RLPItem memory item) private pure returns (uint256) {\\n    if (item.len == 0) return 0;\\n\\n    uint256 count = 0;\\n    uint256 currPtr = item.memPtr + _payloadOffset(item.memPtr);\\n    uint256 endPtr = item.memPtr + item.len;\\n    while (currPtr < endPtr) {\\n      currPtr = currPtr + _itemLength(currPtr); // skip over an item\\n      count++;\\n    }\\n\\n    return count;\\n  }\\n\\n  // @return entire rlp item byte length\\n  function _itemLength(uint256 memPtr) private pure returns (uint256) {\\n    uint256 itemLen;\\n    uint256 byte0;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < STRING_SHORT_START) itemLen = 1;\\n    else if (byte0 < STRING_LONG_START) itemLen = byte0 - STRING_SHORT_START + 1;\\n    else if (byte0 < LIST_SHORT_START) {\\n      assembly {\\n        let byteLen := sub(byte0, 0xb7) // # of bytes the actual length is\\n        memPtr := add(memPtr, 1) // skip over the first byte\\n        /* 32 byte word size */\\n        let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to get the len\\n        itemLen := add(dataLen, add(byteLen, 1))\\n      }\\n    } else if (byte0 < LIST_LONG_START) {\\n      itemLen = byte0 - LIST_SHORT_START + 1;\\n    } else {\\n      assembly {\\n        let byteLen := sub(byte0, 0xf7)\\n        memPtr := add(memPtr, 1)\\n\\n        let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to the correct length\\n        itemLen := add(dataLen, add(byteLen, 1))\\n      }\\n    }\\n\\n    return itemLen;\\n  }\\n\\n  // @return number of bytes until the data\\n  function _payloadOffset(uint256 memPtr) private pure returns (uint256) {\\n    uint256 byte0;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < STRING_SHORT_START) return 0;\\n    else if (byte0 < STRING_LONG_START || (byte0 > LIST_SHORT_START - 1 && byte0 < LIST_LONG_START)) return 1;\\n    else if (byte0 < LIST_SHORT_START)\\n      // being explicit\\n      return byte0 - (STRING_LONG_START - 1) + 1;\\n    else return byte0 - (LIST_LONG_START - 1) + 1;\\n  }\\n\\n  /*\\n   * @param src Pointer to source\\n   * @param dest Pointer to destination\\n   * @param len Amount of memory to copy from the source\\n   */\\n  function copy(\\n    uint256 src,\\n    uint256 dest,\\n    uint256 len\\n  ) private pure {\\n    if (len == 0) return;\\n\\n    // copy as many word sizes as possible\\n    for (; len > WORD_SIZE - 1; len -= WORD_SIZE) {\\n      assembly {\\n        mstore(dest, mload(src))\\n      }\\n\\n      src += WORD_SIZE;\\n      dest += WORD_SIZE;\\n    }\\n\\n    if (len == 0) return;\\n\\n    // left over bytes. Mask is used to remove unwanted bytes from the word\\n    uint256 mask = 256**(WORD_SIZE - len) - 1;\\n\\n    assembly {\\n      let srcpart := and(mload(src), not(mask)) // zero out src\\n      let destpart := and(mload(dest), mask) // retrieve the bytes\\n      mstore(dest, or(destpart, srcpart))\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x213834ee76145029ef22fab9575fbffec4309f7b52b63e23d840aeab7f5a6f44\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/messaging/connectors/polygon/lib/Merkle.sol":{"Merkle":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b5624082d629dffd473c7b8e4cff4291aff153ae217497a3c890b00af9a4505964736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB5 PUSH3 0x4082D6 0x29 0xDF REVERT SELFBALANCE EXTCODECOPY PUSH28 0x8E4CFF4291AFF153AE217497A3C890B00AF9A4505964736F6C634300 ADDMOD GT STOP CALLER ","sourceMap":"134:982:142:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;134:982:142;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b5624082d629dffd473c7b8e4cff4291aff153ae217497a3c890b00af9a4505964736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB5 PUSH3 0x4082D6 0x29 0xDF REVERT SELFBALANCE EXTCODECOPY PUSH28 0x8E4CFF4291AFF153AE217497A3C890B00AF9A4505964736F6C634300 ADDMOD GT STOP CALLER ","sourceMap":"134:982:142:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"checkMembership(bytes32,uint256,bytes32,bytes memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/polygon/lib/Merkle.sol\":\"Merkle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/polygon/lib/Merkle.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/Merkle.sol\\npragma solidity 0.8.17;\\n\\nlibrary Merkle {\\n  function checkMembership(\\n    bytes32 leaf,\\n    uint256 index,\\n    bytes32 rootHash,\\n    bytes memory proof\\n  ) internal pure returns (bool) {\\n    require(proof.length % 32 == 0, \\\"Invalid proof length\\\");\\n    uint256 proofHeight = proof.length / 32;\\n    // Proof of size n means, height of the tree is n+1.\\n    // In a tree of height n+1, max #leafs possible is 2 ^ n\\n    require(index < 2**proofHeight, \\\"Leaf index is too big\\\");\\n\\n    bytes32 proofElement;\\n    bytes32 computedHash = leaf;\\n    uint256 len = proof.length + 1;\\n    for (uint256 i = 32; i < len; ) {\\n      assembly {\\n        proofElement := mload(add(proof, i))\\n      }\\n\\n      if (index % 2 == 0) {\\n        computedHash = keccak256(abi.encodePacked(computedHash, proofElement));\\n      } else {\\n        computedHash = keccak256(abi.encodePacked(proofElement, computedHash));\\n      }\\n\\n      index = index / 2;\\n\\n      unchecked {\\n        i += 32;\\n      }\\n    }\\n    return computedHash == rootHash;\\n  }\\n}\\n\",\"keccak256\":\"0xc7282da570239b7d6c774fa6e829a605d73bdfcc7812b727f4a5b42b17b6d64f\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/messaging/connectors/polygon/lib/MerklePatriciaProof.sol":{"MerklePatriciaProof":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203f6b95e296dd8b5722145496c559135b824dc104c31ea752a7c4c97c6c6d906e64736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODEHASH PUSH12 0x95E296DD8B5722145496C559 SGT JUMPDEST DUP3 0x4D 0xC1 DIV 0xC3 0x1E 0xA7 MSTORE 0xA7 0xC4 0xC9 PUSH29 0x6C6D906E64736F6C634300081100330000000000000000000000000000 ","sourceMap":"191:4280:143:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;191:4280:143;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203f6b95e296dd8b5722145496c559135b824dc104c31ea752a7c4c97c6c6d906e64736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODEHASH PUSH12 0x95E296DD8B5722145496C559 SGT JUMPDEST DUP3 0x4D 0xC1 DIV 0xC3 0x1E 0xA7 MSTORE 0xA7 0xC4 0xC9 PUSH29 0x6C6D906E64736F6C634300081100330000000000000000000000000000 ","sourceMap":"191:4280:143:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_getNibbleArray(bytes memory)":"infinite","_getNthNibbleOfBytes(uint256,bytes memory)":"infinite","_nibblesToTraverse(bytes memory,bytes memory,uint256)":"infinite","verify(bytes memory,bytes memory,bytes memory,bytes32)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/polygon/lib/MerklePatriciaProof.sol\":\"MerklePatriciaProof\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/polygon/lib/MerklePatriciaProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/MerklePatriciaProof.sol\\npragma solidity 0.8.17;\\n\\nimport {RLPReader} from \\\"./RLPReader.sol\\\";\\n\\nlibrary MerklePatriciaProof {\\n  /*\\n   * @dev Verifies a merkle patricia proof.\\n   * @param value The terminating value in the trie.\\n   * @param encodedPath The path in the trie leading to value.\\n   * @param rlpParentNodes The rlp encoded stack of nodes.\\n   * @param root The root hash of the trie.\\n   * @return The boolean validity of the proof.\\n   */\\n  function verify(\\n    bytes memory value,\\n    bytes memory encodedPath,\\n    bytes memory rlpParentNodes,\\n    bytes32 root\\n  ) internal pure returns (bool) {\\n    RLPReader.RLPItem memory item = RLPReader.toRlpItem(rlpParentNodes);\\n    RLPReader.RLPItem[] memory parentNodes = RLPReader.toList(item);\\n\\n    bytes memory currentNode;\\n    RLPReader.RLPItem[] memory currentNodeList;\\n\\n    bytes32 nodeKey = root;\\n    uint256 pathPtr = 0;\\n\\n    bytes memory path = _getNibbleArray(encodedPath);\\n    if (path.length == 0) {\\n      return false;\\n    }\\n\\n    uint256 len = parentNodes.length;\\n    for (uint256 i = 0; i < len; ) {\\n      if (pathPtr > path.length) {\\n        return false;\\n      }\\n\\n      currentNode = RLPReader.toRlpBytes(parentNodes[i]);\\n      if (nodeKey != keccak256(currentNode)) {\\n        return false;\\n      }\\n      currentNodeList = RLPReader.toList(parentNodes[i]);\\n\\n      if (currentNodeList.length == 17) {\\n        if (pathPtr == path.length) {\\n          if (keccak256(RLPReader.toBytes(currentNodeList[16])) == keccak256(value)) {\\n            return true;\\n          } else {\\n            return false;\\n          }\\n        }\\n\\n        uint8 nextPathNibble = uint8(path[pathPtr]);\\n        if (nextPathNibble > 16) {\\n          return false;\\n        }\\n        nodeKey = bytes32(RLPReader.toUintStrict(currentNodeList[nextPathNibble]));\\n        pathPtr += 1;\\n      } else if (currentNodeList.length == 2) {\\n        uint256 traversed = _nibblesToTraverse(RLPReader.toBytes(currentNodeList[0]), path, pathPtr);\\n        if (pathPtr + traversed == path.length) {\\n          //leaf node\\n          if (keccak256(RLPReader.toBytes(currentNodeList[1])) == keccak256(value)) {\\n            return true;\\n          } else {\\n            return false;\\n          }\\n        }\\n\\n        //extension node\\n        if (traversed == 0) {\\n          return false;\\n        }\\n\\n        pathPtr += traversed;\\n        nodeKey = bytes32(RLPReader.toUintStrict(currentNodeList[1]));\\n      } else {\\n        return false;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  function _nibblesToTraverse(\\n    bytes memory encodedPartialPath,\\n    bytes memory path,\\n    uint256 pathPtr\\n  ) private pure returns (uint256) {\\n    uint256 len = 0;\\n    // encodedPartialPath has elements that are each two hex characters (1 byte), but partialPath\\n    // and slicedPath have elements that are each one hex character (1 nibble)\\n    bytes memory partialPath = _getNibbleArray(encodedPartialPath);\\n    bytes memory slicedPath = new bytes(partialPath.length);\\n\\n    // pathPtr counts nibbles in path\\n    // partialPath.length is a number of nibbles\\n    uint256 _len = pathPtr + partialPath.length;\\n    for (uint256 i = pathPtr; i < _len; ) {\\n      bytes1 pathNibble = path[i];\\n      slicedPath[i - pathPtr] = pathNibble;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    if (keccak256(partialPath) == keccak256(slicedPath)) {\\n      len = partialPath.length;\\n    } else {\\n      len = 0;\\n    }\\n    return len;\\n  }\\n\\n  // bytes b must be hp encoded\\n  function _getNibbleArray(bytes memory b) internal pure returns (bytes memory) {\\n    bytes memory nibbles = \\\"\\\";\\n    if (b.length > 0) {\\n      uint8 offset;\\n      uint8 hpNibble = uint8(_getNthNibbleOfBytes(0, b));\\n      if (hpNibble == 1 || hpNibble == 3) {\\n        nibbles = new bytes(b.length * 2 - 1);\\n        bytes1 oddNibble = _getNthNibbleOfBytes(1, b);\\n        nibbles[0] = oddNibble;\\n        offset = 1;\\n      } else {\\n        nibbles = new bytes(b.length * 2 - 2);\\n        offset = 0;\\n      }\\n\\n      uint256 len = nibbles.length;\\n      for (uint256 i = offset; i < len; ) {\\n        nibbles[i] = _getNthNibbleOfBytes(i - offset + 2, b);\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n    }\\n    return nibbles;\\n  }\\n\\n  function _getNthNibbleOfBytes(uint256 n, bytes memory str) private pure returns (bytes1) {\\n    return bytes1(n % 2 == 0 ? uint8(str[n / 2]) / 0x10 : uint8(str[n / 2]) % 0x10);\\n  }\\n}\\n\",\"keccak256\":\"0x5132cb2535739352bac5f6cd66689cbd1bc086e048a05f7524079ef74ad693b3\",\"license\":\"MIT\"},\"contracts/messaging/connectors/polygon/lib/RLPReader.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/RLPReader.sol\\npragma solidity 0.8.17;\\n\\nlibrary RLPReader {\\n  uint8 constant STRING_SHORT_START = 0x80;\\n  uint8 constant STRING_LONG_START = 0xb8;\\n  uint8 constant LIST_SHORT_START = 0xc0;\\n  uint8 constant LIST_LONG_START = 0xf8;\\n  uint8 constant WORD_SIZE = 32;\\n\\n  struct RLPItem {\\n    uint256 len;\\n    uint256 memPtr;\\n  }\\n\\n  struct Iterator {\\n    RLPItem item; // Item that's being iterated over.\\n    uint256 nextPtr; // Position of the next item in the list.\\n  }\\n\\n  /*\\n   * @dev Returns the next element in the iteration. Reverts if it has not next element.\\n   * @param self The iterator.\\n   * @return The next element in the iteration.\\n   */\\n  function next(Iterator memory self) internal pure returns (RLPItem memory) {\\n    require(hasNext(self));\\n\\n    uint256 ptr = self.nextPtr;\\n    uint256 itemLength = _itemLength(ptr);\\n    self.nextPtr = ptr + itemLength;\\n\\n    return RLPItem(itemLength, ptr);\\n  }\\n\\n  /*\\n   * @dev Returns true if the iteration has more elements.\\n   * @param self The iterator.\\n   * @return true if the iteration has more elements.\\n   */\\n  function hasNext(Iterator memory self) internal pure returns (bool) {\\n    RLPItem memory item = self.item;\\n    return self.nextPtr < item.memPtr + item.len;\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function toRlpItem(bytes memory item) internal pure returns (RLPItem memory) {\\n    uint256 memPtr;\\n    assembly {\\n      memPtr := add(item, 0x20)\\n    }\\n\\n    return RLPItem(item.length, memPtr);\\n  }\\n\\n  /*\\n   * @dev Create an iterator. Reverts if item is not a list.\\n   * @param self The RLP item.\\n   * @return An 'Iterator' over the item.\\n   */\\n  function iterator(RLPItem memory self) internal pure returns (Iterator memory) {\\n    require(isList(self));\\n\\n    uint256 ptr = self.memPtr + _payloadOffset(self.memPtr);\\n    return Iterator(self, ptr);\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function rlpLen(RLPItem memory item) internal pure returns (uint256) {\\n    return item.len;\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function payloadLen(RLPItem memory item) internal pure returns (uint256) {\\n    return item.len - _payloadOffset(item.memPtr);\\n  }\\n\\n  /*\\n   * @param item RLP encoded list in bytes\\n   */\\n  function toList(RLPItem memory item) internal pure returns (RLPItem[] memory) {\\n    require(isList(item));\\n\\n    uint256 items = numItems(item);\\n    RLPItem[] memory result = new RLPItem[](items);\\n\\n    uint256 memPtr = item.memPtr + _payloadOffset(item.memPtr);\\n    uint256 dataLen;\\n    for (uint256 i = 0; i < items; ) {\\n      dataLen = _itemLength(memPtr);\\n      result[i] = RLPItem(dataLen, memPtr);\\n      memPtr = memPtr + dataLen;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    return result;\\n  }\\n\\n  // @return indicator whether encoded payload is a list. negate this function call for isData.\\n  function isList(RLPItem memory item) internal pure returns (bool) {\\n    if (item.len == 0) return false;\\n\\n    uint8 byte0;\\n    uint256 memPtr = item.memPtr;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < LIST_SHORT_START) return false;\\n    return true;\\n  }\\n\\n  /*\\n   * @dev A cheaper version of keccak256(toRlpBytes(item)) that avoids copying memory.\\n   * @return keccak256 hash of RLP encoded bytes.\\n   */\\n  function rlpBytesKeccak256(RLPItem memory item) internal pure returns (bytes32) {\\n    uint256 ptr = item.memPtr;\\n    uint256 len = item.len;\\n    bytes32 result;\\n    assembly {\\n      result := keccak256(ptr, len)\\n    }\\n    return result;\\n  }\\n\\n  function payloadLocation(RLPItem memory item) internal pure returns (uint256, uint256) {\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 memPtr = item.memPtr + offset;\\n    uint256 len = item.len - offset; // data length\\n    return (memPtr, len);\\n  }\\n\\n  /*\\n   * @dev A cheaper version of keccak256(toBytes(item)) that avoids copying memory.\\n   * @return keccak256 hash of the item payload.\\n   */\\n  function payloadKeccak256(RLPItem memory item) internal pure returns (bytes32) {\\n    (uint256 memPtr, uint256 len) = payloadLocation(item);\\n    bytes32 result;\\n    assembly {\\n      result := keccak256(memPtr, len)\\n    }\\n    return result;\\n  }\\n\\n  /** RLPItem conversions into data types **/\\n\\n  // @returns raw rlp encoding in bytes\\n  function toRlpBytes(RLPItem memory item) internal pure returns (bytes memory) {\\n    bytes memory result = new bytes(item.len);\\n    if (result.length == 0) return result;\\n\\n    uint256 ptr;\\n    assembly {\\n      ptr := add(0x20, result)\\n    }\\n\\n    copy(item.memPtr, ptr, item.len);\\n    return result;\\n  }\\n\\n  // any non-zero byte is considered true\\n  function toBoolean(RLPItem memory item) internal pure returns (bool) {\\n    require(item.len == 1);\\n    uint256 result;\\n    uint256 memPtr = item.memPtr;\\n    assembly {\\n      result := byte(0, mload(memPtr))\\n    }\\n\\n    return result == 0 ? false : true;\\n  }\\n\\n  function toAddress(RLPItem memory item) internal pure returns (address) {\\n    // 1 byte for the length prefix\\n    require(item.len == 21);\\n\\n    return address(uint160(toUint(item)));\\n  }\\n\\n  function toUint(RLPItem memory item) internal pure returns (uint256) {\\n    require(item.len > 0 && item.len < 33 + 1);\\n\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 len = item.len - offset;\\n\\n    uint256 result;\\n    uint256 memPtr = item.memPtr + offset;\\n    assembly {\\n      result := mload(memPtr)\\n\\n      // shfit to the correct location if neccesary\\n      if lt(len, 32) {\\n        result := div(result, exp(256, sub(32, len)))\\n      }\\n    }\\n\\n    return result;\\n  }\\n\\n  // enforces 32 byte length\\n  function toUintStrict(RLPItem memory item) internal pure returns (uint256) {\\n    // one byte prefix\\n    require(item.len == 33);\\n\\n    uint256 result;\\n    uint256 memPtr = item.memPtr + 1;\\n    assembly {\\n      result := mload(memPtr)\\n    }\\n\\n    return result;\\n  }\\n\\n  function toBytes(RLPItem memory item) internal pure returns (bytes memory) {\\n    require(item.len > 0);\\n\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 len = item.len - offset; // data length\\n    bytes memory result = new bytes(len);\\n\\n    uint256 destPtr;\\n    assembly {\\n      destPtr := add(0x20, result)\\n    }\\n\\n    copy(item.memPtr + offset, destPtr, len);\\n    return result;\\n  }\\n\\n  /*\\n   * Private Helpers\\n   */\\n\\n  // @return number of payload items inside an encoded list.\\n  function numItems(RLPItem memory item) private pure returns (uint256) {\\n    if (item.len == 0) return 0;\\n\\n    uint256 count = 0;\\n    uint256 currPtr = item.memPtr + _payloadOffset(item.memPtr);\\n    uint256 endPtr = item.memPtr + item.len;\\n    while (currPtr < endPtr) {\\n      currPtr = currPtr + _itemLength(currPtr); // skip over an item\\n      count++;\\n    }\\n\\n    return count;\\n  }\\n\\n  // @return entire rlp item byte length\\n  function _itemLength(uint256 memPtr) private pure returns (uint256) {\\n    uint256 itemLen;\\n    uint256 byte0;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < STRING_SHORT_START) itemLen = 1;\\n    else if (byte0 < STRING_LONG_START) itemLen = byte0 - STRING_SHORT_START + 1;\\n    else if (byte0 < LIST_SHORT_START) {\\n      assembly {\\n        let byteLen := sub(byte0, 0xb7) // # of bytes the actual length is\\n        memPtr := add(memPtr, 1) // skip over the first byte\\n        /* 32 byte word size */\\n        let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to get the len\\n        itemLen := add(dataLen, add(byteLen, 1))\\n      }\\n    } else if (byte0 < LIST_LONG_START) {\\n      itemLen = byte0 - LIST_SHORT_START + 1;\\n    } else {\\n      assembly {\\n        let byteLen := sub(byte0, 0xf7)\\n        memPtr := add(memPtr, 1)\\n\\n        let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to the correct length\\n        itemLen := add(dataLen, add(byteLen, 1))\\n      }\\n    }\\n\\n    return itemLen;\\n  }\\n\\n  // @return number of bytes until the data\\n  function _payloadOffset(uint256 memPtr) private pure returns (uint256) {\\n    uint256 byte0;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < STRING_SHORT_START) return 0;\\n    else if (byte0 < STRING_LONG_START || (byte0 > LIST_SHORT_START - 1 && byte0 < LIST_LONG_START)) return 1;\\n    else if (byte0 < LIST_SHORT_START)\\n      // being explicit\\n      return byte0 - (STRING_LONG_START - 1) + 1;\\n    else return byte0 - (LIST_LONG_START - 1) + 1;\\n  }\\n\\n  /*\\n   * @param src Pointer to source\\n   * @param dest Pointer to destination\\n   * @param len Amount of memory to copy from the source\\n   */\\n  function copy(\\n    uint256 src,\\n    uint256 dest,\\n    uint256 len\\n  ) private pure {\\n    if (len == 0) return;\\n\\n    // copy as many word sizes as possible\\n    for (; len > WORD_SIZE - 1; len -= WORD_SIZE) {\\n      assembly {\\n        mstore(dest, mload(src))\\n      }\\n\\n      src += WORD_SIZE;\\n      dest += WORD_SIZE;\\n    }\\n\\n    if (len == 0) return;\\n\\n    // left over bytes. Mask is used to remove unwanted bytes from the word\\n    uint256 mask = 256**(WORD_SIZE - len) - 1;\\n\\n    assembly {\\n      let srcpart := and(mload(src), not(mask)) // zero out src\\n      let destpart := and(mload(dest), mask) // retrieve the bytes\\n      mstore(dest, or(destpart, srcpart))\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x213834ee76145029ef22fab9575fbffec4309f7b52b63e23d840aeab7f5a6f44\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/messaging/connectors/polygon/lib/RLPReader.sol":{"RLPReader":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207eea1c97b9195f9226e7697fb2eaff4be49cdc0837185cd475344aaa1dcf303d64736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH31 0xEA1C97B9195F9226E7697FB2EAFF4BE49CDC0837185CD475344AAA1DCF303D PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"137:9116:144:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;137:9116:144;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207eea1c97b9195f9226e7697fb2eaff4be49cdc0837185cd475344aaa1dcf303d64736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH31 0xEA1C97B9195F9226E7697FB2EAFF4BE49CDC0837185CD475344AAA1DCF303D PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"137:9116:144:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_itemLength(uint256)":"infinite","_payloadOffset(uint256)":"infinite","copy(uint256,uint256,uint256)":"infinite","hasNext(struct RLPReader.Iterator memory)":"infinite","isList(struct RLPReader.RLPItem memory)":"infinite","iterator(struct RLPReader.RLPItem memory)":"infinite","next(struct RLPReader.Iterator memory)":"infinite","numItems(struct RLPReader.RLPItem memory)":"infinite","payloadKeccak256(struct RLPReader.RLPItem memory)":"infinite","payloadLen(struct RLPReader.RLPItem memory)":"infinite","payloadLocation(struct RLPReader.RLPItem memory)":"infinite","rlpBytesKeccak256(struct RLPReader.RLPItem memory)":"infinite","rlpLen(struct RLPReader.RLPItem memory)":"infinite","toAddress(struct RLPReader.RLPItem memory)":"infinite","toBoolean(struct RLPReader.RLPItem memory)":"infinite","toBytes(struct RLPReader.RLPItem memory)":"infinite","toList(struct RLPReader.RLPItem memory)":"infinite","toRlpBytes(struct RLPReader.RLPItem memory)":"infinite","toRlpItem(bytes memory)":"infinite","toUint(struct RLPReader.RLPItem memory)":"infinite","toUintStrict(struct RLPReader.RLPItem memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/polygon/lib/RLPReader.sol\":\"RLPReader\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/polygon/lib/RLPReader.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/RLPReader.sol\\npragma solidity 0.8.17;\\n\\nlibrary RLPReader {\\n  uint8 constant STRING_SHORT_START = 0x80;\\n  uint8 constant STRING_LONG_START = 0xb8;\\n  uint8 constant LIST_SHORT_START = 0xc0;\\n  uint8 constant LIST_LONG_START = 0xf8;\\n  uint8 constant WORD_SIZE = 32;\\n\\n  struct RLPItem {\\n    uint256 len;\\n    uint256 memPtr;\\n  }\\n\\n  struct Iterator {\\n    RLPItem item; // Item that's being iterated over.\\n    uint256 nextPtr; // Position of the next item in the list.\\n  }\\n\\n  /*\\n   * @dev Returns the next element in the iteration. Reverts if it has not next element.\\n   * @param self The iterator.\\n   * @return The next element in the iteration.\\n   */\\n  function next(Iterator memory self) internal pure returns (RLPItem memory) {\\n    require(hasNext(self));\\n\\n    uint256 ptr = self.nextPtr;\\n    uint256 itemLength = _itemLength(ptr);\\n    self.nextPtr = ptr + itemLength;\\n\\n    return RLPItem(itemLength, ptr);\\n  }\\n\\n  /*\\n   * @dev Returns true if the iteration has more elements.\\n   * @param self The iterator.\\n   * @return true if the iteration has more elements.\\n   */\\n  function hasNext(Iterator memory self) internal pure returns (bool) {\\n    RLPItem memory item = self.item;\\n    return self.nextPtr < item.memPtr + item.len;\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function toRlpItem(bytes memory item) internal pure returns (RLPItem memory) {\\n    uint256 memPtr;\\n    assembly {\\n      memPtr := add(item, 0x20)\\n    }\\n\\n    return RLPItem(item.length, memPtr);\\n  }\\n\\n  /*\\n   * @dev Create an iterator. Reverts if item is not a list.\\n   * @param self The RLP item.\\n   * @return An 'Iterator' over the item.\\n   */\\n  function iterator(RLPItem memory self) internal pure returns (Iterator memory) {\\n    require(isList(self));\\n\\n    uint256 ptr = self.memPtr + _payloadOffset(self.memPtr);\\n    return Iterator(self, ptr);\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function rlpLen(RLPItem memory item) internal pure returns (uint256) {\\n    return item.len;\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function payloadLen(RLPItem memory item) internal pure returns (uint256) {\\n    return item.len - _payloadOffset(item.memPtr);\\n  }\\n\\n  /*\\n   * @param item RLP encoded list in bytes\\n   */\\n  function toList(RLPItem memory item) internal pure returns (RLPItem[] memory) {\\n    require(isList(item));\\n\\n    uint256 items = numItems(item);\\n    RLPItem[] memory result = new RLPItem[](items);\\n\\n    uint256 memPtr = item.memPtr + _payloadOffset(item.memPtr);\\n    uint256 dataLen;\\n    for (uint256 i = 0; i < items; ) {\\n      dataLen = _itemLength(memPtr);\\n      result[i] = RLPItem(dataLen, memPtr);\\n      memPtr = memPtr + dataLen;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    return result;\\n  }\\n\\n  // @return indicator whether encoded payload is a list. negate this function call for isData.\\n  function isList(RLPItem memory item) internal pure returns (bool) {\\n    if (item.len == 0) return false;\\n\\n    uint8 byte0;\\n    uint256 memPtr = item.memPtr;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < LIST_SHORT_START) return false;\\n    return true;\\n  }\\n\\n  /*\\n   * @dev A cheaper version of keccak256(toRlpBytes(item)) that avoids copying memory.\\n   * @return keccak256 hash of RLP encoded bytes.\\n   */\\n  function rlpBytesKeccak256(RLPItem memory item) internal pure returns (bytes32) {\\n    uint256 ptr = item.memPtr;\\n    uint256 len = item.len;\\n    bytes32 result;\\n    assembly {\\n      result := keccak256(ptr, len)\\n    }\\n    return result;\\n  }\\n\\n  function payloadLocation(RLPItem memory item) internal pure returns (uint256, uint256) {\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 memPtr = item.memPtr + offset;\\n    uint256 len = item.len - offset; // data length\\n    return (memPtr, len);\\n  }\\n\\n  /*\\n   * @dev A cheaper version of keccak256(toBytes(item)) that avoids copying memory.\\n   * @return keccak256 hash of the item payload.\\n   */\\n  function payloadKeccak256(RLPItem memory item) internal pure returns (bytes32) {\\n    (uint256 memPtr, uint256 len) = payloadLocation(item);\\n    bytes32 result;\\n    assembly {\\n      result := keccak256(memPtr, len)\\n    }\\n    return result;\\n  }\\n\\n  /** RLPItem conversions into data types **/\\n\\n  // @returns raw rlp encoding in bytes\\n  function toRlpBytes(RLPItem memory item) internal pure returns (bytes memory) {\\n    bytes memory result = new bytes(item.len);\\n    if (result.length == 0) return result;\\n\\n    uint256 ptr;\\n    assembly {\\n      ptr := add(0x20, result)\\n    }\\n\\n    copy(item.memPtr, ptr, item.len);\\n    return result;\\n  }\\n\\n  // any non-zero byte is considered true\\n  function toBoolean(RLPItem memory item) internal pure returns (bool) {\\n    require(item.len == 1);\\n    uint256 result;\\n    uint256 memPtr = item.memPtr;\\n    assembly {\\n      result := byte(0, mload(memPtr))\\n    }\\n\\n    return result == 0 ? false : true;\\n  }\\n\\n  function toAddress(RLPItem memory item) internal pure returns (address) {\\n    // 1 byte for the length prefix\\n    require(item.len == 21);\\n\\n    return address(uint160(toUint(item)));\\n  }\\n\\n  function toUint(RLPItem memory item) internal pure returns (uint256) {\\n    require(item.len > 0 && item.len < 33 + 1);\\n\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 len = item.len - offset;\\n\\n    uint256 result;\\n    uint256 memPtr = item.memPtr + offset;\\n    assembly {\\n      result := mload(memPtr)\\n\\n      // shfit to the correct location if neccesary\\n      if lt(len, 32) {\\n        result := div(result, exp(256, sub(32, len)))\\n      }\\n    }\\n\\n    return result;\\n  }\\n\\n  // enforces 32 byte length\\n  function toUintStrict(RLPItem memory item) internal pure returns (uint256) {\\n    // one byte prefix\\n    require(item.len == 33);\\n\\n    uint256 result;\\n    uint256 memPtr = item.memPtr + 1;\\n    assembly {\\n      result := mload(memPtr)\\n    }\\n\\n    return result;\\n  }\\n\\n  function toBytes(RLPItem memory item) internal pure returns (bytes memory) {\\n    require(item.len > 0);\\n\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 len = item.len - offset; // data length\\n    bytes memory result = new bytes(len);\\n\\n    uint256 destPtr;\\n    assembly {\\n      destPtr := add(0x20, result)\\n    }\\n\\n    copy(item.memPtr + offset, destPtr, len);\\n    return result;\\n  }\\n\\n  /*\\n   * Private Helpers\\n   */\\n\\n  // @return number of payload items inside an encoded list.\\n  function numItems(RLPItem memory item) private pure returns (uint256) {\\n    if (item.len == 0) return 0;\\n\\n    uint256 count = 0;\\n    uint256 currPtr = item.memPtr + _payloadOffset(item.memPtr);\\n    uint256 endPtr = item.memPtr + item.len;\\n    while (currPtr < endPtr) {\\n      currPtr = currPtr + _itemLength(currPtr); // skip over an item\\n      count++;\\n    }\\n\\n    return count;\\n  }\\n\\n  // @return entire rlp item byte length\\n  function _itemLength(uint256 memPtr) private pure returns (uint256) {\\n    uint256 itemLen;\\n    uint256 byte0;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < STRING_SHORT_START) itemLen = 1;\\n    else if (byte0 < STRING_LONG_START) itemLen = byte0 - STRING_SHORT_START + 1;\\n    else if (byte0 < LIST_SHORT_START) {\\n      assembly {\\n        let byteLen := sub(byte0, 0xb7) // # of bytes the actual length is\\n        memPtr := add(memPtr, 1) // skip over the first byte\\n        /* 32 byte word size */\\n        let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to get the len\\n        itemLen := add(dataLen, add(byteLen, 1))\\n      }\\n    } else if (byte0 < LIST_LONG_START) {\\n      itemLen = byte0 - LIST_SHORT_START + 1;\\n    } else {\\n      assembly {\\n        let byteLen := sub(byte0, 0xf7)\\n        memPtr := add(memPtr, 1)\\n\\n        let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to the correct length\\n        itemLen := add(dataLen, add(byteLen, 1))\\n      }\\n    }\\n\\n    return itemLen;\\n  }\\n\\n  // @return number of bytes until the data\\n  function _payloadOffset(uint256 memPtr) private pure returns (uint256) {\\n    uint256 byte0;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < STRING_SHORT_START) return 0;\\n    else if (byte0 < STRING_LONG_START || (byte0 > LIST_SHORT_START - 1 && byte0 < LIST_LONG_START)) return 1;\\n    else if (byte0 < LIST_SHORT_START)\\n      // being explicit\\n      return byte0 - (STRING_LONG_START - 1) + 1;\\n    else return byte0 - (LIST_LONG_START - 1) + 1;\\n  }\\n\\n  /*\\n   * @param src Pointer to source\\n   * @param dest Pointer to destination\\n   * @param len Amount of memory to copy from the source\\n   */\\n  function copy(\\n    uint256 src,\\n    uint256 dest,\\n    uint256 len\\n  ) private pure {\\n    if (len == 0) return;\\n\\n    // copy as many word sizes as possible\\n    for (; len > WORD_SIZE - 1; len -= WORD_SIZE) {\\n      assembly {\\n        mstore(dest, mload(src))\\n      }\\n\\n      src += WORD_SIZE;\\n      dest += WORD_SIZE;\\n    }\\n\\n    if (len == 0) return;\\n\\n    // left over bytes. Mask is used to remove unwanted bytes from the word\\n    uint256 mask = 256**(WORD_SIZE - len) - 1;\\n\\n    assembly {\\n      let srcpart := and(mload(src), not(mask)) // zero out src\\n      let destpart := and(mload(dest), mask) // retrieve the bytes\\n      mstore(dest, or(destpart, srcpart))\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x213834ee76145029ef22fab9575fbffec4309f7b52b63e23d840aeab7f5a6f44\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/messaging/connectors/polygon/tunnel/FxBaseChildTunnel.sol":{"FxBaseChildTunnel":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"message","type":"bytes"}],"name":"MessageSent","type":"event"},{"inputs":[],"name":"fxChild","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fxRootTunnel","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"stateId","type":"uint256"},{"internalType":"address","name":"rootMessageSender","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"processMessageFromRoot","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"fxChild()":"450d11f0","fxRootTunnel()":"7f1e9cb0","processMessageFromRoot(uint256,address,bytes)":"9a7c4b71"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"fxChild\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fxRootTunnel\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stateId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"rootMessageSender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"processMessageFromRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Mock child tunnel contract to receive and send message from L2\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/polygon/tunnel/FxBaseChildTunnel.sol\":\"FxBaseChildTunnel\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/polygon/tunnel/FxBaseChildTunnel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/tunnel/FxBaseChildTunnel.sol\\npragma solidity 0.8.17;\\n\\n// IFxMessageProcessor represents interface to process message\\ninterface IFxMessageProcessor {\\n  function processMessageFromRoot(\\n    uint256 stateId,\\n    address rootMessageSender,\\n    bytes calldata data\\n  ) external;\\n}\\n\\n/**\\n * @notice Mock child tunnel contract to receive and send message from L2\\n */\\nabstract contract FxBaseChildTunnel is IFxMessageProcessor {\\n  // MessageTunnel on L1 will get data from this event\\n  event MessageSent(bytes message);\\n\\n  // fx child\\n  address public fxChild;\\n\\n  // fx root tunnel\\n  address public fxRootTunnel;\\n\\n  constructor(address _fxChild) {\\n    fxChild = _fxChild;\\n  }\\n\\n  // Sender must be fxRootTunnel in case of ERC20 tunnel\\n  modifier validateSender(address sender) {\\n    require(sender == fxRootTunnel, \\\"FxBaseChildTunnel: INVALID_SENDER_FROM_ROOT\\\");\\n    _;\\n  }\\n\\n  // set fxRootTunnel if not set already\\n  function setFxRootTunnel(address _fxRootTunnel) internal virtual {\\n    require(fxRootTunnel == address(0x0), \\\"FxBaseChildTunnel: ROOT_TUNNEL_ALREADY_SET\\\");\\n    fxRootTunnel = _fxRootTunnel;\\n  }\\n\\n  function processMessageFromRoot(\\n    uint256 stateId,\\n    address rootMessageSender,\\n    bytes calldata data\\n  ) external override {\\n    require(msg.sender == fxChild, \\\"FxBaseChildTunnel: INVALID_SENDER\\\");\\n    _processMessageFromRoot(stateId, rootMessageSender, data);\\n  }\\n\\n  /**\\n   * @notice Emit message that can be received on Root Tunnel\\n   * @dev Call the internal function when need to emit message\\n   * @param message bytes message that will be sent to Root Tunnel\\n   * some message examples -\\n   *   abi.encode(tokenId);\\n   *   abi.encode(tokenId, tokenMetadata);\\n   *   abi.encode(messageType, messageData);\\n   */\\n  function _sendMessageToRoot(bytes memory message) internal {\\n    emit MessageSent(message);\\n  }\\n\\n  /**\\n   * @notice Process message received from Root Tunnel\\n   * @dev function needs to be implemented to handle message as per requirement\\n   * This is called by onStateReceive function.\\n   * Since it is called via a system call, any event will not be emitted during its execution.\\n   * @param stateId unique state id\\n   * @param sender root message sender\\n   * @param message bytes message that was sent from Root Tunnel\\n   */\\n  function _processMessageFromRoot(\\n    uint256 stateId,\\n    address sender,\\n    bytes memory message\\n  ) internal virtual;\\n}\\n\",\"keccak256\":\"0x67dfd67d5da348a6e6cb36af590b5316dbb937a8eba2b28531351cc7f0be29d0\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":46929,"contract":"contracts/messaging/connectors/polygon/tunnel/FxBaseChildTunnel.sol:FxBaseChildTunnel","label":"fxChild","offset":0,"slot":"0","type":"t_address"},{"astId":46931,"contract":"contracts/messaging/connectors/polygon/tunnel/FxBaseChildTunnel.sol:FxBaseChildTunnel","label":"fxRootTunnel","offset":0,"slot":"1","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"notice":"Mock child tunnel contract to receive and send message from L2","version":1}},"IFxMessageProcessor":{"abi":[{"inputs":[{"internalType":"uint256","name":"stateId","type":"uint256"},{"internalType":"address","name":"rootMessageSender","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"processMessageFromRoot","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"processMessageFromRoot(uint256,address,bytes)":"9a7c4b71"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stateId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"rootMessageSender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"processMessageFromRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/polygon/tunnel/FxBaseChildTunnel.sol\":\"IFxMessageProcessor\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/polygon/tunnel/FxBaseChildTunnel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/tunnel/FxBaseChildTunnel.sol\\npragma solidity 0.8.17;\\n\\n// IFxMessageProcessor represents interface to process message\\ninterface IFxMessageProcessor {\\n  function processMessageFromRoot(\\n    uint256 stateId,\\n    address rootMessageSender,\\n    bytes calldata data\\n  ) external;\\n}\\n\\n/**\\n * @notice Mock child tunnel contract to receive and send message from L2\\n */\\nabstract contract FxBaseChildTunnel is IFxMessageProcessor {\\n  // MessageTunnel on L1 will get data from this event\\n  event MessageSent(bytes message);\\n\\n  // fx child\\n  address public fxChild;\\n\\n  // fx root tunnel\\n  address public fxRootTunnel;\\n\\n  constructor(address _fxChild) {\\n    fxChild = _fxChild;\\n  }\\n\\n  // Sender must be fxRootTunnel in case of ERC20 tunnel\\n  modifier validateSender(address sender) {\\n    require(sender == fxRootTunnel, \\\"FxBaseChildTunnel: INVALID_SENDER_FROM_ROOT\\\");\\n    _;\\n  }\\n\\n  // set fxRootTunnel if not set already\\n  function setFxRootTunnel(address _fxRootTunnel) internal virtual {\\n    require(fxRootTunnel == address(0x0), \\\"FxBaseChildTunnel: ROOT_TUNNEL_ALREADY_SET\\\");\\n    fxRootTunnel = _fxRootTunnel;\\n  }\\n\\n  function processMessageFromRoot(\\n    uint256 stateId,\\n    address rootMessageSender,\\n    bytes calldata data\\n  ) external override {\\n    require(msg.sender == fxChild, \\\"FxBaseChildTunnel: INVALID_SENDER\\\");\\n    _processMessageFromRoot(stateId, rootMessageSender, data);\\n  }\\n\\n  /**\\n   * @notice Emit message that can be received on Root Tunnel\\n   * @dev Call the internal function when need to emit message\\n   * @param message bytes message that will be sent to Root Tunnel\\n   * some message examples -\\n   *   abi.encode(tokenId);\\n   *   abi.encode(tokenId, tokenMetadata);\\n   *   abi.encode(messageType, messageData);\\n   */\\n  function _sendMessageToRoot(bytes memory message) internal {\\n    emit MessageSent(message);\\n  }\\n\\n  /**\\n   * @notice Process message received from Root Tunnel\\n   * @dev function needs to be implemented to handle message as per requirement\\n   * This is called by onStateReceive function.\\n   * Since it is called via a system call, any event will not be emitted during its execution.\\n   * @param stateId unique state id\\n   * @param sender root message sender\\n   * @param message bytes message that was sent from Root Tunnel\\n   */\\n  function _processMessageFromRoot(\\n    uint256 stateId,\\n    address sender,\\n    bytes memory message\\n  ) internal virtual;\\n}\\n\",\"keccak256\":\"0x67dfd67d5da348a6e6cb36af590b5316dbb937a8eba2b28531351cc7f0be29d0\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol":{"FxBaseRootTunnel":{"abi":[{"inputs":[],"name":"SEND_MESSAGE_EVENT_SIG","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkpointManager","outputs":[{"internalType":"contract ICheckpointManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fxChildTunnel","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fxRoot","outputs":[{"internalType":"contract IFxStateSender","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"processedExits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"inputData","type":"bytes"}],"name":"receiveMessage","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"receiveMessage(bytes)":{"details":"This function verifies if the transaction actually happened on child chain","params":{"inputData":"RLP encoded data of the reference tx containing following list of fields  0 - headerNumber - Checkpoint header block number containing the reference tx  1 - blockProof - Proof that the block header (in the child chain) is a leaf in the submitted merkle root  2 - blockNumber - Block number containing the reference tx on child chain  3 - blockTime - Reference tx block time  4 - txRoot - Transactions root of block  5 - receiptRoot - Receipts root of block  6 - receipt - Receipt of the reference transaction  7 - receiptProof - Merkle proof of the reference receipt  8 - branchMask - 32 bits denoting the path of receipt in merkle tree  9 - receiptLogIndex - Log Index to read from the receipt"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"SEND_MESSAGE_EVENT_SIG()":"0e387de6","checkpointManager()":"c0857ba0","fxChildTunnel()":"972c4928","fxRoot()":"de9b771f","processedExits(bytes32)":"607f2d42","receiveMessage(bytes)":"f953cec7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SEND_MESSAGE_EVENT_SIG\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"checkpointManager\",\"outputs\":[{\"internalType\":\"contract ICheckpointManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fxChildTunnel\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fxRoot\",\"outputs\":[{\"internalType\":\"contract IFxStateSender\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"processedExits\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"inputData\",\"type\":\"bytes\"}],\"name\":\"receiveMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"receiveMessage(bytes)\":{\"details\":\"This function verifies if the transaction actually happened on child chain\",\"params\":{\"inputData\":\"RLP encoded data of the reference tx containing following list of fields  0 - headerNumber - Checkpoint header block number containing the reference tx  1 - blockProof - Proof that the block header (in the child chain) is a leaf in the submitted merkle root  2 - blockNumber - Block number containing the reference tx on child chain  3 - blockTime - Reference tx block time  4 - txRoot - Transactions root of block  5 - receiptRoot - Receipts root of block  6 - receipt - Receipt of the reference transaction  7 - receiptProof - Merkle proof of the reference receipt  8 - branchMask - 32 bits denoting the path of receipt in merkle tree  9 - receiptLogIndex - Log Index to read from the receipt\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"receiveMessage(bytes)\":{\"notice\":\"receive message from  L2 to L1, validated by proof\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol\":\"FxBaseRootTunnel\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/polygon/lib/ExitPayloadReader.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/ExitPayloadReader.sol\\npragma solidity 0.8.17;\\n\\nimport {RLPReader} from \\\"./RLPReader.sol\\\";\\n\\nlibrary ExitPayloadReader {\\n  using RLPReader for bytes;\\n  using RLPReader for RLPReader.RLPItem;\\n\\n  uint8 constant WORD_SIZE = 32;\\n\\n  struct ExitPayload {\\n    RLPReader.RLPItem[] data;\\n  }\\n\\n  struct Receipt {\\n    RLPReader.RLPItem[] data;\\n    bytes raw;\\n    uint256 logIndex;\\n  }\\n\\n  struct Log {\\n    RLPReader.RLPItem data;\\n    RLPReader.RLPItem[] list;\\n  }\\n\\n  struct LogTopics {\\n    RLPReader.RLPItem[] data;\\n  }\\n\\n  // copy paste of private copy() from RLPReader to avoid changing of existing contracts\\n  function copy(\\n    uint256 src,\\n    uint256 dest,\\n    uint256 len\\n  ) private pure {\\n    if (len == 0) return;\\n\\n    // copy as many word sizes as possible\\n    for (; len > WORD_SIZE - 1; len -= WORD_SIZE) {\\n      assembly {\\n        mstore(dest, mload(src))\\n      }\\n\\n      src += WORD_SIZE;\\n      dest += WORD_SIZE;\\n    }\\n\\n    if (len == 0) return;\\n\\n    // left over bytes. Mask is used to remove unwanted bytes from the word\\n    uint256 mask = 256**(WORD_SIZE - len) - 1;\\n    assembly {\\n      let srcpart := and(mload(src), not(mask)) // zero out src\\n      let destpart := and(mload(dest), mask) // retrieve the bytes\\n      mstore(dest, or(destpart, srcpart))\\n    }\\n  }\\n\\n  function toExitPayload(bytes memory data) internal pure returns (ExitPayload memory) {\\n    RLPReader.RLPItem[] memory payloadData = data.toRlpItem().toList();\\n\\n    return ExitPayload(payloadData);\\n  }\\n\\n  function getHeaderNumber(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[0].toUint();\\n  }\\n\\n  function getBlockProof(ExitPayload memory payload) internal pure returns (bytes memory) {\\n    return payload.data[1].toBytes();\\n  }\\n\\n  function getBlockNumber(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[2].toUint();\\n  }\\n\\n  function getBlockTime(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[3].toUint();\\n  }\\n\\n  function getTxRoot(ExitPayload memory payload) internal pure returns (bytes32) {\\n    return bytes32(payload.data[4].toUint());\\n  }\\n\\n  function getReceiptRoot(ExitPayload memory payload) internal pure returns (bytes32) {\\n    return bytes32(payload.data[5].toUint());\\n  }\\n\\n  function getReceipt(ExitPayload memory payload) internal pure returns (Receipt memory receipt) {\\n    receipt.raw = payload.data[6].toBytes();\\n    RLPReader.RLPItem memory receiptItem = receipt.raw.toRlpItem();\\n\\n    if (receiptItem.isList()) {\\n      // legacy tx\\n      receipt.data = receiptItem.toList();\\n    } else {\\n      // pop first byte before parsting receipt\\n      bytes memory typedBytes = receipt.raw;\\n      bytes memory result = new bytes(typedBytes.length - 1);\\n      uint256 srcPtr;\\n      uint256 destPtr;\\n      assembly {\\n        srcPtr := add(33, typedBytes)\\n        destPtr := add(0x20, result)\\n      }\\n\\n      copy(srcPtr, destPtr, result.length);\\n      receipt.data = result.toRlpItem().toList();\\n    }\\n\\n    receipt.logIndex = getReceiptLogIndex(payload);\\n    return receipt;\\n  }\\n\\n  function getReceiptProof(ExitPayload memory payload) internal pure returns (bytes memory) {\\n    return payload.data[7].toBytes();\\n  }\\n\\n  function getBranchMaskAsBytes(ExitPayload memory payload) internal pure returns (bytes memory) {\\n    return payload.data[8].toBytes();\\n  }\\n\\n  function getBranchMaskAsUint(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[8].toUint();\\n  }\\n\\n  function getReceiptLogIndex(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[9].toUint();\\n  }\\n\\n  // Receipt methods\\n  function toBytes(Receipt memory receipt) internal pure returns (bytes memory) {\\n    return receipt.raw;\\n  }\\n\\n  function getLog(Receipt memory receipt) internal pure returns (Log memory) {\\n    RLPReader.RLPItem memory logData = receipt.data[3].toList()[receipt.logIndex];\\n    return Log(logData, logData.toList());\\n  }\\n\\n  // Log methods\\n  function getEmitter(Log memory log) internal pure returns (address) {\\n    return RLPReader.toAddress(log.list[0]);\\n  }\\n\\n  function getTopics(Log memory log) internal pure returns (LogTopics memory) {\\n    return LogTopics(log.list[1].toList());\\n  }\\n\\n  function getData(Log memory log) internal pure returns (bytes memory) {\\n    return log.list[2].toBytes();\\n  }\\n\\n  function toRlpBytes(Log memory log) internal pure returns (bytes memory) {\\n    return log.data.toRlpBytes();\\n  }\\n\\n  // LogTopics methods\\n  function getField(LogTopics memory topics, uint256 index) internal pure returns (RLPReader.RLPItem memory) {\\n    return topics.data[index];\\n  }\\n}\\n\",\"keccak256\":\"0x0d07d60a794df4d3c0a41032f0ee46912daeb73369a3a112f376fcd0487fc107\",\"license\":\"MIT\"},\"contracts/messaging/connectors/polygon/lib/Merkle.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/Merkle.sol\\npragma solidity 0.8.17;\\n\\nlibrary Merkle {\\n  function checkMembership(\\n    bytes32 leaf,\\n    uint256 index,\\n    bytes32 rootHash,\\n    bytes memory proof\\n  ) internal pure returns (bool) {\\n    require(proof.length % 32 == 0, \\\"Invalid proof length\\\");\\n    uint256 proofHeight = proof.length / 32;\\n    // Proof of size n means, height of the tree is n+1.\\n    // In a tree of height n+1, max #leafs possible is 2 ^ n\\n    require(index < 2**proofHeight, \\\"Leaf index is too big\\\");\\n\\n    bytes32 proofElement;\\n    bytes32 computedHash = leaf;\\n    uint256 len = proof.length + 1;\\n    for (uint256 i = 32; i < len; ) {\\n      assembly {\\n        proofElement := mload(add(proof, i))\\n      }\\n\\n      if (index % 2 == 0) {\\n        computedHash = keccak256(abi.encodePacked(computedHash, proofElement));\\n      } else {\\n        computedHash = keccak256(abi.encodePacked(proofElement, computedHash));\\n      }\\n\\n      index = index / 2;\\n\\n      unchecked {\\n        i += 32;\\n      }\\n    }\\n    return computedHash == rootHash;\\n  }\\n}\\n\",\"keccak256\":\"0xc7282da570239b7d6c774fa6e829a605d73bdfcc7812b727f4a5b42b17b6d64f\",\"license\":\"MIT\"},\"contracts/messaging/connectors/polygon/lib/MerklePatriciaProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/MerklePatriciaProof.sol\\npragma solidity 0.8.17;\\n\\nimport {RLPReader} from \\\"./RLPReader.sol\\\";\\n\\nlibrary MerklePatriciaProof {\\n  /*\\n   * @dev Verifies a merkle patricia proof.\\n   * @param value The terminating value in the trie.\\n   * @param encodedPath The path in the trie leading to value.\\n   * @param rlpParentNodes The rlp encoded stack of nodes.\\n   * @param root The root hash of the trie.\\n   * @return The boolean validity of the proof.\\n   */\\n  function verify(\\n    bytes memory value,\\n    bytes memory encodedPath,\\n    bytes memory rlpParentNodes,\\n    bytes32 root\\n  ) internal pure returns (bool) {\\n    RLPReader.RLPItem memory item = RLPReader.toRlpItem(rlpParentNodes);\\n    RLPReader.RLPItem[] memory parentNodes = RLPReader.toList(item);\\n\\n    bytes memory currentNode;\\n    RLPReader.RLPItem[] memory currentNodeList;\\n\\n    bytes32 nodeKey = root;\\n    uint256 pathPtr = 0;\\n\\n    bytes memory path = _getNibbleArray(encodedPath);\\n    if (path.length == 0) {\\n      return false;\\n    }\\n\\n    uint256 len = parentNodes.length;\\n    for (uint256 i = 0; i < len; ) {\\n      if (pathPtr > path.length) {\\n        return false;\\n      }\\n\\n      currentNode = RLPReader.toRlpBytes(parentNodes[i]);\\n      if (nodeKey != keccak256(currentNode)) {\\n        return false;\\n      }\\n      currentNodeList = RLPReader.toList(parentNodes[i]);\\n\\n      if (currentNodeList.length == 17) {\\n        if (pathPtr == path.length) {\\n          if (keccak256(RLPReader.toBytes(currentNodeList[16])) == keccak256(value)) {\\n            return true;\\n          } else {\\n            return false;\\n          }\\n        }\\n\\n        uint8 nextPathNibble = uint8(path[pathPtr]);\\n        if (nextPathNibble > 16) {\\n          return false;\\n        }\\n        nodeKey = bytes32(RLPReader.toUintStrict(currentNodeList[nextPathNibble]));\\n        pathPtr += 1;\\n      } else if (currentNodeList.length == 2) {\\n        uint256 traversed = _nibblesToTraverse(RLPReader.toBytes(currentNodeList[0]), path, pathPtr);\\n        if (pathPtr + traversed == path.length) {\\n          //leaf node\\n          if (keccak256(RLPReader.toBytes(currentNodeList[1])) == keccak256(value)) {\\n            return true;\\n          } else {\\n            return false;\\n          }\\n        }\\n\\n        //extension node\\n        if (traversed == 0) {\\n          return false;\\n        }\\n\\n        pathPtr += traversed;\\n        nodeKey = bytes32(RLPReader.toUintStrict(currentNodeList[1]));\\n      } else {\\n        return false;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  function _nibblesToTraverse(\\n    bytes memory encodedPartialPath,\\n    bytes memory path,\\n    uint256 pathPtr\\n  ) private pure returns (uint256) {\\n    uint256 len = 0;\\n    // encodedPartialPath has elements that are each two hex characters (1 byte), but partialPath\\n    // and slicedPath have elements that are each one hex character (1 nibble)\\n    bytes memory partialPath = _getNibbleArray(encodedPartialPath);\\n    bytes memory slicedPath = new bytes(partialPath.length);\\n\\n    // pathPtr counts nibbles in path\\n    // partialPath.length is a number of nibbles\\n    uint256 _len = pathPtr + partialPath.length;\\n    for (uint256 i = pathPtr; i < _len; ) {\\n      bytes1 pathNibble = path[i];\\n      slicedPath[i - pathPtr] = pathNibble;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    if (keccak256(partialPath) == keccak256(slicedPath)) {\\n      len = partialPath.length;\\n    } else {\\n      len = 0;\\n    }\\n    return len;\\n  }\\n\\n  // bytes b must be hp encoded\\n  function _getNibbleArray(bytes memory b) internal pure returns (bytes memory) {\\n    bytes memory nibbles = \\\"\\\";\\n    if (b.length > 0) {\\n      uint8 offset;\\n      uint8 hpNibble = uint8(_getNthNibbleOfBytes(0, b));\\n      if (hpNibble == 1 || hpNibble == 3) {\\n        nibbles = new bytes(b.length * 2 - 1);\\n        bytes1 oddNibble = _getNthNibbleOfBytes(1, b);\\n        nibbles[0] = oddNibble;\\n        offset = 1;\\n      } else {\\n        nibbles = new bytes(b.length * 2 - 2);\\n        offset = 0;\\n      }\\n\\n      uint256 len = nibbles.length;\\n      for (uint256 i = offset; i < len; ) {\\n        nibbles[i] = _getNthNibbleOfBytes(i - offset + 2, b);\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n    }\\n    return nibbles;\\n  }\\n\\n  function _getNthNibbleOfBytes(uint256 n, bytes memory str) private pure returns (bytes1) {\\n    return bytes1(n % 2 == 0 ? uint8(str[n / 2]) / 0x10 : uint8(str[n / 2]) % 0x10);\\n  }\\n}\\n\",\"keccak256\":\"0x5132cb2535739352bac5f6cd66689cbd1bc086e048a05f7524079ef74ad693b3\",\"license\":\"MIT\"},\"contracts/messaging/connectors/polygon/lib/RLPReader.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/RLPReader.sol\\npragma solidity 0.8.17;\\n\\nlibrary RLPReader {\\n  uint8 constant STRING_SHORT_START = 0x80;\\n  uint8 constant STRING_LONG_START = 0xb8;\\n  uint8 constant LIST_SHORT_START = 0xc0;\\n  uint8 constant LIST_LONG_START = 0xf8;\\n  uint8 constant WORD_SIZE = 32;\\n\\n  struct RLPItem {\\n    uint256 len;\\n    uint256 memPtr;\\n  }\\n\\n  struct Iterator {\\n    RLPItem item; // Item that's being iterated over.\\n    uint256 nextPtr; // Position of the next item in the list.\\n  }\\n\\n  /*\\n   * @dev Returns the next element in the iteration. Reverts if it has not next element.\\n   * @param self The iterator.\\n   * @return The next element in the iteration.\\n   */\\n  function next(Iterator memory self) internal pure returns (RLPItem memory) {\\n    require(hasNext(self));\\n\\n    uint256 ptr = self.nextPtr;\\n    uint256 itemLength = _itemLength(ptr);\\n    self.nextPtr = ptr + itemLength;\\n\\n    return RLPItem(itemLength, ptr);\\n  }\\n\\n  /*\\n   * @dev Returns true if the iteration has more elements.\\n   * @param self The iterator.\\n   * @return true if the iteration has more elements.\\n   */\\n  function hasNext(Iterator memory self) internal pure returns (bool) {\\n    RLPItem memory item = self.item;\\n    return self.nextPtr < item.memPtr + item.len;\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function toRlpItem(bytes memory item) internal pure returns (RLPItem memory) {\\n    uint256 memPtr;\\n    assembly {\\n      memPtr := add(item, 0x20)\\n    }\\n\\n    return RLPItem(item.length, memPtr);\\n  }\\n\\n  /*\\n   * @dev Create an iterator. Reverts if item is not a list.\\n   * @param self The RLP item.\\n   * @return An 'Iterator' over the item.\\n   */\\n  function iterator(RLPItem memory self) internal pure returns (Iterator memory) {\\n    require(isList(self));\\n\\n    uint256 ptr = self.memPtr + _payloadOffset(self.memPtr);\\n    return Iterator(self, ptr);\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function rlpLen(RLPItem memory item) internal pure returns (uint256) {\\n    return item.len;\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function payloadLen(RLPItem memory item) internal pure returns (uint256) {\\n    return item.len - _payloadOffset(item.memPtr);\\n  }\\n\\n  /*\\n   * @param item RLP encoded list in bytes\\n   */\\n  function toList(RLPItem memory item) internal pure returns (RLPItem[] memory) {\\n    require(isList(item));\\n\\n    uint256 items = numItems(item);\\n    RLPItem[] memory result = new RLPItem[](items);\\n\\n    uint256 memPtr = item.memPtr + _payloadOffset(item.memPtr);\\n    uint256 dataLen;\\n    for (uint256 i = 0; i < items; ) {\\n      dataLen = _itemLength(memPtr);\\n      result[i] = RLPItem(dataLen, memPtr);\\n      memPtr = memPtr + dataLen;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    return result;\\n  }\\n\\n  // @return indicator whether encoded payload is a list. negate this function call for isData.\\n  function isList(RLPItem memory item) internal pure returns (bool) {\\n    if (item.len == 0) return false;\\n\\n    uint8 byte0;\\n    uint256 memPtr = item.memPtr;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < LIST_SHORT_START) return false;\\n    return true;\\n  }\\n\\n  /*\\n   * @dev A cheaper version of keccak256(toRlpBytes(item)) that avoids copying memory.\\n   * @return keccak256 hash of RLP encoded bytes.\\n   */\\n  function rlpBytesKeccak256(RLPItem memory item) internal pure returns (bytes32) {\\n    uint256 ptr = item.memPtr;\\n    uint256 len = item.len;\\n    bytes32 result;\\n    assembly {\\n      result := keccak256(ptr, len)\\n    }\\n    return result;\\n  }\\n\\n  function payloadLocation(RLPItem memory item) internal pure returns (uint256, uint256) {\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 memPtr = item.memPtr + offset;\\n    uint256 len = item.len - offset; // data length\\n    return (memPtr, len);\\n  }\\n\\n  /*\\n   * @dev A cheaper version of keccak256(toBytes(item)) that avoids copying memory.\\n   * @return keccak256 hash of the item payload.\\n   */\\n  function payloadKeccak256(RLPItem memory item) internal pure returns (bytes32) {\\n    (uint256 memPtr, uint256 len) = payloadLocation(item);\\n    bytes32 result;\\n    assembly {\\n      result := keccak256(memPtr, len)\\n    }\\n    return result;\\n  }\\n\\n  /** RLPItem conversions into data types **/\\n\\n  // @returns raw rlp encoding in bytes\\n  function toRlpBytes(RLPItem memory item) internal pure returns (bytes memory) {\\n    bytes memory result = new bytes(item.len);\\n    if (result.length == 0) return result;\\n\\n    uint256 ptr;\\n    assembly {\\n      ptr := add(0x20, result)\\n    }\\n\\n    copy(item.memPtr, ptr, item.len);\\n    return result;\\n  }\\n\\n  // any non-zero byte is considered true\\n  function toBoolean(RLPItem memory item) internal pure returns (bool) {\\n    require(item.len == 1);\\n    uint256 result;\\n    uint256 memPtr = item.memPtr;\\n    assembly {\\n      result := byte(0, mload(memPtr))\\n    }\\n\\n    return result == 0 ? false : true;\\n  }\\n\\n  function toAddress(RLPItem memory item) internal pure returns (address) {\\n    // 1 byte for the length prefix\\n    require(item.len == 21);\\n\\n    return address(uint160(toUint(item)));\\n  }\\n\\n  function toUint(RLPItem memory item) internal pure returns (uint256) {\\n    require(item.len > 0 && item.len < 33 + 1);\\n\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 len = item.len - offset;\\n\\n    uint256 result;\\n    uint256 memPtr = item.memPtr + offset;\\n    assembly {\\n      result := mload(memPtr)\\n\\n      // shfit to the correct location if neccesary\\n      if lt(len, 32) {\\n        result := div(result, exp(256, sub(32, len)))\\n      }\\n    }\\n\\n    return result;\\n  }\\n\\n  // enforces 32 byte length\\n  function toUintStrict(RLPItem memory item) internal pure returns (uint256) {\\n    // one byte prefix\\n    require(item.len == 33);\\n\\n    uint256 result;\\n    uint256 memPtr = item.memPtr + 1;\\n    assembly {\\n      result := mload(memPtr)\\n    }\\n\\n    return result;\\n  }\\n\\n  function toBytes(RLPItem memory item) internal pure returns (bytes memory) {\\n    require(item.len > 0);\\n\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 len = item.len - offset; // data length\\n    bytes memory result = new bytes(len);\\n\\n    uint256 destPtr;\\n    assembly {\\n      destPtr := add(0x20, result)\\n    }\\n\\n    copy(item.memPtr + offset, destPtr, len);\\n    return result;\\n  }\\n\\n  /*\\n   * Private Helpers\\n   */\\n\\n  // @return number of payload items inside an encoded list.\\n  function numItems(RLPItem memory item) private pure returns (uint256) {\\n    if (item.len == 0) return 0;\\n\\n    uint256 count = 0;\\n    uint256 currPtr = item.memPtr + _payloadOffset(item.memPtr);\\n    uint256 endPtr = item.memPtr + item.len;\\n    while (currPtr < endPtr) {\\n      currPtr = currPtr + _itemLength(currPtr); // skip over an item\\n      count++;\\n    }\\n\\n    return count;\\n  }\\n\\n  // @return entire rlp item byte length\\n  function _itemLength(uint256 memPtr) private pure returns (uint256) {\\n    uint256 itemLen;\\n    uint256 byte0;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < STRING_SHORT_START) itemLen = 1;\\n    else if (byte0 < STRING_LONG_START) itemLen = byte0 - STRING_SHORT_START + 1;\\n    else if (byte0 < LIST_SHORT_START) {\\n      assembly {\\n        let byteLen := sub(byte0, 0xb7) // # of bytes the actual length is\\n        memPtr := add(memPtr, 1) // skip over the first byte\\n        /* 32 byte word size */\\n        let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to get the len\\n        itemLen := add(dataLen, add(byteLen, 1))\\n      }\\n    } else if (byte0 < LIST_LONG_START) {\\n      itemLen = byte0 - LIST_SHORT_START + 1;\\n    } else {\\n      assembly {\\n        let byteLen := sub(byte0, 0xf7)\\n        memPtr := add(memPtr, 1)\\n\\n        let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to the correct length\\n        itemLen := add(dataLen, add(byteLen, 1))\\n      }\\n    }\\n\\n    return itemLen;\\n  }\\n\\n  // @return number of bytes until the data\\n  function _payloadOffset(uint256 memPtr) private pure returns (uint256) {\\n    uint256 byte0;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < STRING_SHORT_START) return 0;\\n    else if (byte0 < STRING_LONG_START || (byte0 > LIST_SHORT_START - 1 && byte0 < LIST_LONG_START)) return 1;\\n    else if (byte0 < LIST_SHORT_START)\\n      // being explicit\\n      return byte0 - (STRING_LONG_START - 1) + 1;\\n    else return byte0 - (LIST_LONG_START - 1) + 1;\\n  }\\n\\n  /*\\n   * @param src Pointer to source\\n   * @param dest Pointer to destination\\n   * @param len Amount of memory to copy from the source\\n   */\\n  function copy(\\n    uint256 src,\\n    uint256 dest,\\n    uint256 len\\n  ) private pure {\\n    if (len == 0) return;\\n\\n    // copy as many word sizes as possible\\n    for (; len > WORD_SIZE - 1; len -= WORD_SIZE) {\\n      assembly {\\n        mstore(dest, mload(src))\\n      }\\n\\n      src += WORD_SIZE;\\n      dest += WORD_SIZE;\\n    }\\n\\n    if (len == 0) return;\\n\\n    // left over bytes. Mask is used to remove unwanted bytes from the word\\n    uint256 mask = 256**(WORD_SIZE - len) - 1;\\n\\n    assembly {\\n      let srcpart := and(mload(src), not(mask)) // zero out src\\n      let destpart := and(mload(dest), mask) // retrieve the bytes\\n      mstore(dest, or(destpart, srcpart))\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x213834ee76145029ef22fab9575fbffec4309f7b52b63e23d840aeab7f5a6f44\",\"license\":\"MIT\"},\"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/tunnel/FxBaseRootTunnel.sol\\npragma solidity 0.8.17;\\n\\nimport {RLPReader} from \\\"../lib/RLPReader.sol\\\";\\nimport {MerklePatriciaProof} from \\\"../lib/MerklePatriciaProof.sol\\\";\\nimport {Merkle} from \\\"../lib/Merkle.sol\\\";\\nimport \\\"../lib/ExitPayloadReader.sol\\\";\\n\\ninterface IFxStateSender {\\n  function sendMessageToChild(address _receiver, bytes calldata _data) external;\\n}\\n\\ncontract ICheckpointManager {\\n  struct HeaderBlock {\\n    bytes32 root;\\n    uint256 start;\\n    uint256 end;\\n    uint256 createdAt;\\n    address proposer;\\n  }\\n\\n  /**\\n   * @notice mapping of checkpoint header numbers to block details\\n   * @dev These checkpoints are submited by plasma contracts\\n   */\\n  mapping(uint256 => HeaderBlock) public headerBlocks;\\n}\\n\\nabstract contract FxBaseRootTunnel {\\n  using RLPReader for RLPReader.RLPItem;\\n  using Merkle for bytes32;\\n  using ExitPayloadReader for bytes;\\n  using ExitPayloadReader for ExitPayloadReader.ExitPayload;\\n  using ExitPayloadReader for ExitPayloadReader.Log;\\n  using ExitPayloadReader for ExitPayloadReader.LogTopics;\\n  using ExitPayloadReader for ExitPayloadReader.Receipt;\\n\\n  // keccak256(MessageSent(bytes))\\n  bytes32 public constant SEND_MESSAGE_EVENT_SIG = 0x8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036;\\n\\n  // state sender contract\\n  IFxStateSender public fxRoot;\\n  // root chain manager\\n  ICheckpointManager public checkpointManager;\\n  // child tunnel contract which receives and sends messages\\n  address public fxChildTunnel;\\n\\n  // storage to avoid duplicate exits\\n  mapping(bytes32 => bool) public processedExits;\\n\\n  constructor(address _checkpointManager, address _fxRoot) {\\n    checkpointManager = ICheckpointManager(_checkpointManager);\\n    fxRoot = IFxStateSender(_fxRoot);\\n  }\\n\\n  // set fxChildTunnel if not set already\\n  function setFxChildTunnel(address _fxChildTunnel) internal virtual {\\n    require(fxChildTunnel == address(0x0), \\\"FxBaseRootTunnel: CHILD_TUNNEL_ALREADY_SET\\\");\\n    fxChildTunnel = _fxChildTunnel;\\n  }\\n\\n  /**\\n   * @notice Send bytes message to Child Tunnel\\n   * @param message bytes message that will be sent to Child Tunnel\\n   * some message examples -\\n   *   abi.encode(tokenId);\\n   *   abi.encode(tokenId, tokenMetadata);\\n   *   abi.encode(messageType, messageData);\\n   */\\n  function _sendMessageToChild(bytes memory message) internal {\\n    fxRoot.sendMessageToChild(fxChildTunnel, message);\\n  }\\n\\n  function _validateAndExtractMessage(bytes memory inputData) internal returns (bytes memory) {\\n    ExitPayloadReader.ExitPayload memory payload = inputData.toExitPayload();\\n\\n    bytes memory branchMaskBytes = payload.getBranchMaskAsBytes();\\n    uint256 blockNumber = payload.getBlockNumber();\\n    // checking if exit has already been processed\\n    // unique exit is identified using hash of (blockNumber, branchMask, receiptLogIndex)\\n    bytes32 exitHash = keccak256(\\n      abi.encodePacked(\\n        blockNumber,\\n        // first 2 nibbles are dropped while generating nibble array\\n        // this allows branch masks that are valid but bypass exitHash check (changing first 2 nibbles only)\\n        // so converting to nibble array and then hashing it\\n        MerklePatriciaProof._getNibbleArray(branchMaskBytes),\\n        payload.getReceiptLogIndex()\\n      )\\n    );\\n    require(processedExits[exitHash] == false, \\\"FxRootTunnel: EXIT_ALREADY_PROCESSED\\\");\\n    processedExits[exitHash] = true;\\n\\n    ExitPayloadReader.Receipt memory receipt = payload.getReceipt();\\n    ExitPayloadReader.Log memory log = receipt.getLog();\\n\\n    // check child tunnel\\n    require(fxChildTunnel == log.getEmitter(), \\\"FxRootTunnel: INVALID_FX_CHILD_TUNNEL\\\");\\n\\n    bytes32 receiptRoot = payload.getReceiptRoot();\\n    // verify receipt inclusion\\n    require(\\n      MerklePatriciaProof.verify(receipt.toBytes(), branchMaskBytes, payload.getReceiptProof(), receiptRoot),\\n      \\\"FxRootTunnel: INVALID_RECEIPT_PROOF\\\"\\n    );\\n\\n    // verify checkpoint inclusion\\n    _checkBlockMembershipInCheckpoint(\\n      blockNumber,\\n      payload.getBlockTime(),\\n      payload.getTxRoot(),\\n      receiptRoot,\\n      payload.getHeaderNumber(),\\n      payload.getBlockProof()\\n    );\\n\\n    ExitPayloadReader.LogTopics memory topics = log.getTopics();\\n\\n    require(\\n      bytes32(topics.getField(0).toUint()) == SEND_MESSAGE_EVENT_SIG, // topic0 is event sig\\n      \\\"FxRootTunnel: INVALID_SIGNATURE\\\"\\n    );\\n\\n    // received message data\\n    bytes memory message = abi.decode(log.getData(), (bytes)); // event decodes params again, so decoding bytes to get message\\n    return message;\\n  }\\n\\n  function _checkBlockMembershipInCheckpoint(\\n    uint256 blockNumber,\\n    uint256 blockTime,\\n    bytes32 txRoot,\\n    bytes32 receiptRoot,\\n    uint256 headerNumber,\\n    bytes memory blockProof\\n  ) private view returns (uint256) {\\n    (bytes32 headerRoot, uint256 startBlock, , uint256 createdAt, ) = checkpointManager.headerBlocks(headerNumber);\\n\\n    require(\\n      keccak256(abi.encodePacked(blockNumber, blockTime, txRoot, receiptRoot)).checkMembership(\\n        blockNumber - startBlock,\\n        headerRoot,\\n        blockProof\\n      ),\\n      \\\"FxRootTunnel: INVALID_HEADER\\\"\\n    );\\n    return createdAt;\\n  }\\n\\n  /**\\n   * @notice receive message from  L2 to L1, validated by proof\\n   * @dev This function verifies if the transaction actually happened on child chain\\n   *\\n   * @param inputData RLP encoded data of the reference tx containing following list of fields\\n   *  0 - headerNumber - Checkpoint header block number containing the reference tx\\n   *  1 - blockProof - Proof that the block header (in the child chain) is a leaf in the submitted merkle root\\n   *  2 - blockNumber - Block number containing the reference tx on child chain\\n   *  3 - blockTime - Reference tx block time\\n   *  4 - txRoot - Transactions root of block\\n   *  5 - receiptRoot - Receipts root of block\\n   *  6 - receipt - Receipt of the reference transaction\\n   *  7 - receiptProof - Merkle proof of the reference receipt\\n   *  8 - branchMask - 32 bits denoting the path of receipt in merkle tree\\n   *  9 - receiptLogIndex - Log Index to read from the receipt\\n   */\\n  function receiveMessage(bytes memory inputData) public virtual {\\n    bytes memory message = _validateAndExtractMessage(inputData);\\n    _processMessageFromChild(message);\\n  }\\n\\n  /**\\n   * @notice Process message received from Child Tunnel\\n   * @dev function needs to be implemented to handle message as per requirement\\n   * This is called by onStateReceive function.\\n   * Since it is called via a system call, any event will not be emitted during its execution.\\n   * @param message bytes message that was sent from Child Tunnel\\n   */\\n  function _processMessageFromChild(bytes memory message) internal virtual;\\n}\\n\",\"keccak256\":\"0x7b5d6a3850d1aba92864c1f7361e2a0f1ecd2073e9ef5783b2ff543f45a7e42d\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":47088,"contract":"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol:FxBaseRootTunnel","label":"fxRoot","offset":0,"slot":"0","type":"t_contract(IFxStateSender)47038"},{"astId":47091,"contract":"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol:FxBaseRootTunnel","label":"checkpointManager","offset":0,"slot":"1","type":"t_contract(ICheckpointManager)47056"},{"astId":47093,"contract":"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol:FxBaseRootTunnel","label":"fxChildTunnel","offset":0,"slot":"2","type":"t_address"},{"astId":47097,"contract":"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol:FxBaseRootTunnel","label":"processedExits","offset":0,"slot":"3","type":"t_mapping(t_bytes32,t_bool)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(ICheckpointManager)47056":{"encoding":"inplace","label":"contract ICheckpointManager","numberOfBytes":"20"},"t_contract(IFxStateSender)47038":{"encoding":"inplace","label":"contract IFxStateSender","numberOfBytes":"20"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"}}},"userdoc":{"kind":"user","methods":{"receiveMessage(bytes)":{"notice":"receive message from  L2 to L1, validated by proof"}},"version":1}},"ICheckpointManager":{"abi":[{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"headerBlocks","outputs":[{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"},{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"address","name":"proposer","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"stateVariables":{"headerBlocks":{"details":"These checkpoints are submited by plasma contracts"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060f38061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806341539d4a14602d575b600080fd5b6070603836600460a5565b60006020819052908152604090208054600182015460028301546003840154600490940154929391929091906001600160a01b031685565b6040805195865260208601949094529284019190915260608301526001600160a01b0316608082015260a00160405180910390f35b60006020828403121560b657600080fd5b503591905056fea26469706673582212202dda484da0d46325c9e27dd1b65d0c32a1ade337ba1575e59e6abf359f859ea464736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xF3 DUP1 PUSH2 0x1F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x41539D4A EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x70 PUSH1 0x38 CALLDATASIZE PUSH1 0x4 PUSH1 0xA5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 SWAP1 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 SWAP1 SWAP5 ADD SLOAD SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP3 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH1 0xB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2D 0xDA BASEFEE 0x4D LOG0 0xD4 PUSH4 0x25C9E27D 0xD1 0xB6 0x5D 0xC ORIGIN LOG1 0xAD 0xE3 CALLDATACOPY 0xBA ISZERO PUSH22 0xE59E6ABF359F859EA464736F6C634300081100330000 ","sourceMap":"456:353:146:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@headerBlocks_47055":{"entryPoint":null,"id":47055,"parameterSlots":0,"returnSlots":0},"abi_decode_tuple_t_uint256":{"entryPoint":165,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint256_t_uint256_t_uint256_t_address__to_t_bytes32_t_uint256_t_uint256_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:690:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"84:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:181"},"nodeType":"YulFunctionCall","src":"132:12:181"},"nodeType":"YulExpressionStatement","src":"132:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"105:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"114:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"101:3:181"},"nodeType":"YulFunctionCall","src":"101:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"126:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"97:3:181"},"nodeType":"YulFunctionCall","src":"97:32:181"},"nodeType":"YulIf","src":"94:52:181"},{"nodeType":"YulAssignment","src":"155:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"178:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"165:12:181"},"nodeType":"YulFunctionCall","src":"165:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"155:6:181"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"50:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"61:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"73:6:181","type":""}],"src":"14:180:181"},{"body":{"nodeType":"YulBlock","src":"412:276:181","statements":[{"nodeType":"YulAssignment","src":"422:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"434:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"445:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:181"},"nodeType":"YulFunctionCall","src":"430:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"422:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"465:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"476:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"458:6:181"},"nodeType":"YulFunctionCall","src":"458:25:181"},"nodeType":"YulExpressionStatement","src":"458:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"503:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"514:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"499:3:181"},"nodeType":"YulFunctionCall","src":"499:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"519:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"492:6:181"},"nodeType":"YulFunctionCall","src":"492:34:181"},"nodeType":"YulExpressionStatement","src":"492:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"546:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"557:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"542:3:181"},"nodeType":"YulFunctionCall","src":"542:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"562:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"535:6:181"},"nodeType":"YulFunctionCall","src":"535:34:181"},"nodeType":"YulExpressionStatement","src":"535:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"589:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"600:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"585:3:181"},"nodeType":"YulFunctionCall","src":"585:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"605:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"578:6:181"},"nodeType":"YulFunctionCall","src":"578:34:181"},"nodeType":"YulExpressionStatement","src":"578:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"632:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"643:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"628:3:181"},"nodeType":"YulFunctionCall","src":"628:19:181"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"653:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"669:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"674:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"665:3:181"},"nodeType":"YulFunctionCall","src":"665:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"678:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"661:3:181"},"nodeType":"YulFunctionCall","src":"661:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"649:3:181"},"nodeType":"YulFunctionCall","src":"649:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"621:6:181"},"nodeType":"YulFunctionCall","src":"621:61:181"},"nodeType":"YulExpressionStatement","src":"621:61:181"}]},"name":"abi_encode_tuple_t_bytes32_t_uint256_t_uint256_t_uint256_t_address__to_t_bytes32_t_uint256_t_uint256_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"349:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"360:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"368:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"376:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"384:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"392:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"403:4:181","type":""}],"src":"199:489:181"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint256_t_uint256_t_uint256_t_address__to_t_bytes32_t_uint256_t_uint256_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052348015600f57600080fd5b506004361060285760003560e01c806341539d4a14602d575b600080fd5b6070603836600460a5565b60006020819052908152604090208054600182015460028301546003840154600490940154929391929091906001600160a01b031685565b6040805195865260208601949094529284019190915260608301526001600160a01b0316608082015260a00160405180910390f35b60006020828403121560b657600080fd5b503591905056fea26469706673582212202dda484da0d46325c9e27dd1b65d0c32a1ade337ba1575e59e6abf359f859ea464736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x41539D4A EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x70 PUSH1 0x38 CALLDATASIZE PUSH1 0x4 PUSH1 0xA5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 SWAP1 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 SWAP1 SWAP5 ADD SLOAD SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP3 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH1 0xB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2D 0xDA BASEFEE 0x4D LOG0 0xD4 PUSH4 0x25C9E27D 0xD1 0xB6 0x5D 0xC ORIGIN LOG1 0xAD 0xE3 CALLDATACOPY 0xBA ISZERO PUSH22 0xE59E6ABF359F859EA464736F6C634300081100330000 ","sourceMap":"456:353:146:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;755:51;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;755:51:146;;;;;;;458:25:181;;;514:2;499:18;;492:34;;;;542:18;;;535:34;;;;600:2;585:18;;578:34;-1:-1:-1;;;;;649:32:181;643:3;628:19;;621:61;445:3;430:19;755:51:146;;;;;;;14:180:181;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:181;;14:180;-1:-1:-1;14:180:181:o"},"gasEstimates":{"creation":{"codeDepositCost":"48600","executionCost":"99","totalCost":"48699"},"external":{"headerBlocks(uint256)":"10987"}},"methodIdentifiers":{"headerBlocks(uint256)":"41539d4a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"headerBlocks\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"createdAt\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"headerBlocks\":{\"details\":\"These checkpoints are submited by plasma contracts\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"headerBlocks(uint256)\":{\"notice\":\"mapping of checkpoint header numbers to block details\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol\":\"ICheckpointManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/polygon/lib/ExitPayloadReader.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/ExitPayloadReader.sol\\npragma solidity 0.8.17;\\n\\nimport {RLPReader} from \\\"./RLPReader.sol\\\";\\n\\nlibrary ExitPayloadReader {\\n  using RLPReader for bytes;\\n  using RLPReader for RLPReader.RLPItem;\\n\\n  uint8 constant WORD_SIZE = 32;\\n\\n  struct ExitPayload {\\n    RLPReader.RLPItem[] data;\\n  }\\n\\n  struct Receipt {\\n    RLPReader.RLPItem[] data;\\n    bytes raw;\\n    uint256 logIndex;\\n  }\\n\\n  struct Log {\\n    RLPReader.RLPItem data;\\n    RLPReader.RLPItem[] list;\\n  }\\n\\n  struct LogTopics {\\n    RLPReader.RLPItem[] data;\\n  }\\n\\n  // copy paste of private copy() from RLPReader to avoid changing of existing contracts\\n  function copy(\\n    uint256 src,\\n    uint256 dest,\\n    uint256 len\\n  ) private pure {\\n    if (len == 0) return;\\n\\n    // copy as many word sizes as possible\\n    for (; len > WORD_SIZE - 1; len -= WORD_SIZE) {\\n      assembly {\\n        mstore(dest, mload(src))\\n      }\\n\\n      src += WORD_SIZE;\\n      dest += WORD_SIZE;\\n    }\\n\\n    if (len == 0) return;\\n\\n    // left over bytes. Mask is used to remove unwanted bytes from the word\\n    uint256 mask = 256**(WORD_SIZE - len) - 1;\\n    assembly {\\n      let srcpart := and(mload(src), not(mask)) // zero out src\\n      let destpart := and(mload(dest), mask) // retrieve the bytes\\n      mstore(dest, or(destpart, srcpart))\\n    }\\n  }\\n\\n  function toExitPayload(bytes memory data) internal pure returns (ExitPayload memory) {\\n    RLPReader.RLPItem[] memory payloadData = data.toRlpItem().toList();\\n\\n    return ExitPayload(payloadData);\\n  }\\n\\n  function getHeaderNumber(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[0].toUint();\\n  }\\n\\n  function getBlockProof(ExitPayload memory payload) internal pure returns (bytes memory) {\\n    return payload.data[1].toBytes();\\n  }\\n\\n  function getBlockNumber(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[2].toUint();\\n  }\\n\\n  function getBlockTime(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[3].toUint();\\n  }\\n\\n  function getTxRoot(ExitPayload memory payload) internal pure returns (bytes32) {\\n    return bytes32(payload.data[4].toUint());\\n  }\\n\\n  function getReceiptRoot(ExitPayload memory payload) internal pure returns (bytes32) {\\n    return bytes32(payload.data[5].toUint());\\n  }\\n\\n  function getReceipt(ExitPayload memory payload) internal pure returns (Receipt memory receipt) {\\n    receipt.raw = payload.data[6].toBytes();\\n    RLPReader.RLPItem memory receiptItem = receipt.raw.toRlpItem();\\n\\n    if (receiptItem.isList()) {\\n      // legacy tx\\n      receipt.data = receiptItem.toList();\\n    } else {\\n      // pop first byte before parsting receipt\\n      bytes memory typedBytes = receipt.raw;\\n      bytes memory result = new bytes(typedBytes.length - 1);\\n      uint256 srcPtr;\\n      uint256 destPtr;\\n      assembly {\\n        srcPtr := add(33, typedBytes)\\n        destPtr := add(0x20, result)\\n      }\\n\\n      copy(srcPtr, destPtr, result.length);\\n      receipt.data = result.toRlpItem().toList();\\n    }\\n\\n    receipt.logIndex = getReceiptLogIndex(payload);\\n    return receipt;\\n  }\\n\\n  function getReceiptProof(ExitPayload memory payload) internal pure returns (bytes memory) {\\n    return payload.data[7].toBytes();\\n  }\\n\\n  function getBranchMaskAsBytes(ExitPayload memory payload) internal pure returns (bytes memory) {\\n    return payload.data[8].toBytes();\\n  }\\n\\n  function getBranchMaskAsUint(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[8].toUint();\\n  }\\n\\n  function getReceiptLogIndex(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[9].toUint();\\n  }\\n\\n  // Receipt methods\\n  function toBytes(Receipt memory receipt) internal pure returns (bytes memory) {\\n    return receipt.raw;\\n  }\\n\\n  function getLog(Receipt memory receipt) internal pure returns (Log memory) {\\n    RLPReader.RLPItem memory logData = receipt.data[3].toList()[receipt.logIndex];\\n    return Log(logData, logData.toList());\\n  }\\n\\n  // Log methods\\n  function getEmitter(Log memory log) internal pure returns (address) {\\n    return RLPReader.toAddress(log.list[0]);\\n  }\\n\\n  function getTopics(Log memory log) internal pure returns (LogTopics memory) {\\n    return LogTopics(log.list[1].toList());\\n  }\\n\\n  function getData(Log memory log) internal pure returns (bytes memory) {\\n    return log.list[2].toBytes();\\n  }\\n\\n  function toRlpBytes(Log memory log) internal pure returns (bytes memory) {\\n    return log.data.toRlpBytes();\\n  }\\n\\n  // LogTopics methods\\n  function getField(LogTopics memory topics, uint256 index) internal pure returns (RLPReader.RLPItem memory) {\\n    return topics.data[index];\\n  }\\n}\\n\",\"keccak256\":\"0x0d07d60a794df4d3c0a41032f0ee46912daeb73369a3a112f376fcd0487fc107\",\"license\":\"MIT\"},\"contracts/messaging/connectors/polygon/lib/Merkle.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/Merkle.sol\\npragma solidity 0.8.17;\\n\\nlibrary Merkle {\\n  function checkMembership(\\n    bytes32 leaf,\\n    uint256 index,\\n    bytes32 rootHash,\\n    bytes memory proof\\n  ) internal pure returns (bool) {\\n    require(proof.length % 32 == 0, \\\"Invalid proof length\\\");\\n    uint256 proofHeight = proof.length / 32;\\n    // Proof of size n means, height of the tree is n+1.\\n    // In a tree of height n+1, max #leafs possible is 2 ^ n\\n    require(index < 2**proofHeight, \\\"Leaf index is too big\\\");\\n\\n    bytes32 proofElement;\\n    bytes32 computedHash = leaf;\\n    uint256 len = proof.length + 1;\\n    for (uint256 i = 32; i < len; ) {\\n      assembly {\\n        proofElement := mload(add(proof, i))\\n      }\\n\\n      if (index % 2 == 0) {\\n        computedHash = keccak256(abi.encodePacked(computedHash, proofElement));\\n      } else {\\n        computedHash = keccak256(abi.encodePacked(proofElement, computedHash));\\n      }\\n\\n      index = index / 2;\\n\\n      unchecked {\\n        i += 32;\\n      }\\n    }\\n    return computedHash == rootHash;\\n  }\\n}\\n\",\"keccak256\":\"0xc7282da570239b7d6c774fa6e829a605d73bdfcc7812b727f4a5b42b17b6d64f\",\"license\":\"MIT\"},\"contracts/messaging/connectors/polygon/lib/MerklePatriciaProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/MerklePatriciaProof.sol\\npragma solidity 0.8.17;\\n\\nimport {RLPReader} from \\\"./RLPReader.sol\\\";\\n\\nlibrary MerklePatriciaProof {\\n  /*\\n   * @dev Verifies a merkle patricia proof.\\n   * @param value The terminating value in the trie.\\n   * @param encodedPath The path in the trie leading to value.\\n   * @param rlpParentNodes The rlp encoded stack of nodes.\\n   * @param root The root hash of the trie.\\n   * @return The boolean validity of the proof.\\n   */\\n  function verify(\\n    bytes memory value,\\n    bytes memory encodedPath,\\n    bytes memory rlpParentNodes,\\n    bytes32 root\\n  ) internal pure returns (bool) {\\n    RLPReader.RLPItem memory item = RLPReader.toRlpItem(rlpParentNodes);\\n    RLPReader.RLPItem[] memory parentNodes = RLPReader.toList(item);\\n\\n    bytes memory currentNode;\\n    RLPReader.RLPItem[] memory currentNodeList;\\n\\n    bytes32 nodeKey = root;\\n    uint256 pathPtr = 0;\\n\\n    bytes memory path = _getNibbleArray(encodedPath);\\n    if (path.length == 0) {\\n      return false;\\n    }\\n\\n    uint256 len = parentNodes.length;\\n    for (uint256 i = 0; i < len; ) {\\n      if (pathPtr > path.length) {\\n        return false;\\n      }\\n\\n      currentNode = RLPReader.toRlpBytes(parentNodes[i]);\\n      if (nodeKey != keccak256(currentNode)) {\\n        return false;\\n      }\\n      currentNodeList = RLPReader.toList(parentNodes[i]);\\n\\n      if (currentNodeList.length == 17) {\\n        if (pathPtr == path.length) {\\n          if (keccak256(RLPReader.toBytes(currentNodeList[16])) == keccak256(value)) {\\n            return true;\\n          } else {\\n            return false;\\n          }\\n        }\\n\\n        uint8 nextPathNibble = uint8(path[pathPtr]);\\n        if (nextPathNibble > 16) {\\n          return false;\\n        }\\n        nodeKey = bytes32(RLPReader.toUintStrict(currentNodeList[nextPathNibble]));\\n        pathPtr += 1;\\n      } else if (currentNodeList.length == 2) {\\n        uint256 traversed = _nibblesToTraverse(RLPReader.toBytes(currentNodeList[0]), path, pathPtr);\\n        if (pathPtr + traversed == path.length) {\\n          //leaf node\\n          if (keccak256(RLPReader.toBytes(currentNodeList[1])) == keccak256(value)) {\\n            return true;\\n          } else {\\n            return false;\\n          }\\n        }\\n\\n        //extension node\\n        if (traversed == 0) {\\n          return false;\\n        }\\n\\n        pathPtr += traversed;\\n        nodeKey = bytes32(RLPReader.toUintStrict(currentNodeList[1]));\\n      } else {\\n        return false;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  function _nibblesToTraverse(\\n    bytes memory encodedPartialPath,\\n    bytes memory path,\\n    uint256 pathPtr\\n  ) private pure returns (uint256) {\\n    uint256 len = 0;\\n    // encodedPartialPath has elements that are each two hex characters (1 byte), but partialPath\\n    // and slicedPath have elements that are each one hex character (1 nibble)\\n    bytes memory partialPath = _getNibbleArray(encodedPartialPath);\\n    bytes memory slicedPath = new bytes(partialPath.length);\\n\\n    // pathPtr counts nibbles in path\\n    // partialPath.length is a number of nibbles\\n    uint256 _len = pathPtr + partialPath.length;\\n    for (uint256 i = pathPtr; i < _len; ) {\\n      bytes1 pathNibble = path[i];\\n      slicedPath[i - pathPtr] = pathNibble;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    if (keccak256(partialPath) == keccak256(slicedPath)) {\\n      len = partialPath.length;\\n    } else {\\n      len = 0;\\n    }\\n    return len;\\n  }\\n\\n  // bytes b must be hp encoded\\n  function _getNibbleArray(bytes memory b) internal pure returns (bytes memory) {\\n    bytes memory nibbles = \\\"\\\";\\n    if (b.length > 0) {\\n      uint8 offset;\\n      uint8 hpNibble = uint8(_getNthNibbleOfBytes(0, b));\\n      if (hpNibble == 1 || hpNibble == 3) {\\n        nibbles = new bytes(b.length * 2 - 1);\\n        bytes1 oddNibble = _getNthNibbleOfBytes(1, b);\\n        nibbles[0] = oddNibble;\\n        offset = 1;\\n      } else {\\n        nibbles = new bytes(b.length * 2 - 2);\\n        offset = 0;\\n      }\\n\\n      uint256 len = nibbles.length;\\n      for (uint256 i = offset; i < len; ) {\\n        nibbles[i] = _getNthNibbleOfBytes(i - offset + 2, b);\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n    }\\n    return nibbles;\\n  }\\n\\n  function _getNthNibbleOfBytes(uint256 n, bytes memory str) private pure returns (bytes1) {\\n    return bytes1(n % 2 == 0 ? uint8(str[n / 2]) / 0x10 : uint8(str[n / 2]) % 0x10);\\n  }\\n}\\n\",\"keccak256\":\"0x5132cb2535739352bac5f6cd66689cbd1bc086e048a05f7524079ef74ad693b3\",\"license\":\"MIT\"},\"contracts/messaging/connectors/polygon/lib/RLPReader.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/RLPReader.sol\\npragma solidity 0.8.17;\\n\\nlibrary RLPReader {\\n  uint8 constant STRING_SHORT_START = 0x80;\\n  uint8 constant STRING_LONG_START = 0xb8;\\n  uint8 constant LIST_SHORT_START = 0xc0;\\n  uint8 constant LIST_LONG_START = 0xf8;\\n  uint8 constant WORD_SIZE = 32;\\n\\n  struct RLPItem {\\n    uint256 len;\\n    uint256 memPtr;\\n  }\\n\\n  struct Iterator {\\n    RLPItem item; // Item that's being iterated over.\\n    uint256 nextPtr; // Position of the next item in the list.\\n  }\\n\\n  /*\\n   * @dev Returns the next element in the iteration. Reverts if it has not next element.\\n   * @param self The iterator.\\n   * @return The next element in the iteration.\\n   */\\n  function next(Iterator memory self) internal pure returns (RLPItem memory) {\\n    require(hasNext(self));\\n\\n    uint256 ptr = self.nextPtr;\\n    uint256 itemLength = _itemLength(ptr);\\n    self.nextPtr = ptr + itemLength;\\n\\n    return RLPItem(itemLength, ptr);\\n  }\\n\\n  /*\\n   * @dev Returns true if the iteration has more elements.\\n   * @param self The iterator.\\n   * @return true if the iteration has more elements.\\n   */\\n  function hasNext(Iterator memory self) internal pure returns (bool) {\\n    RLPItem memory item = self.item;\\n    return self.nextPtr < item.memPtr + item.len;\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function toRlpItem(bytes memory item) internal pure returns (RLPItem memory) {\\n    uint256 memPtr;\\n    assembly {\\n      memPtr := add(item, 0x20)\\n    }\\n\\n    return RLPItem(item.length, memPtr);\\n  }\\n\\n  /*\\n   * @dev Create an iterator. Reverts if item is not a list.\\n   * @param self The RLP item.\\n   * @return An 'Iterator' over the item.\\n   */\\n  function iterator(RLPItem memory self) internal pure returns (Iterator memory) {\\n    require(isList(self));\\n\\n    uint256 ptr = self.memPtr + _payloadOffset(self.memPtr);\\n    return Iterator(self, ptr);\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function rlpLen(RLPItem memory item) internal pure returns (uint256) {\\n    return item.len;\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function payloadLen(RLPItem memory item) internal pure returns (uint256) {\\n    return item.len - _payloadOffset(item.memPtr);\\n  }\\n\\n  /*\\n   * @param item RLP encoded list in bytes\\n   */\\n  function toList(RLPItem memory item) internal pure returns (RLPItem[] memory) {\\n    require(isList(item));\\n\\n    uint256 items = numItems(item);\\n    RLPItem[] memory result = new RLPItem[](items);\\n\\n    uint256 memPtr = item.memPtr + _payloadOffset(item.memPtr);\\n    uint256 dataLen;\\n    for (uint256 i = 0; i < items; ) {\\n      dataLen = _itemLength(memPtr);\\n      result[i] = RLPItem(dataLen, memPtr);\\n      memPtr = memPtr + dataLen;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    return result;\\n  }\\n\\n  // @return indicator whether encoded payload is a list. negate this function call for isData.\\n  function isList(RLPItem memory item) internal pure returns (bool) {\\n    if (item.len == 0) return false;\\n\\n    uint8 byte0;\\n    uint256 memPtr = item.memPtr;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < LIST_SHORT_START) return false;\\n    return true;\\n  }\\n\\n  /*\\n   * @dev A cheaper version of keccak256(toRlpBytes(item)) that avoids copying memory.\\n   * @return keccak256 hash of RLP encoded bytes.\\n   */\\n  function rlpBytesKeccak256(RLPItem memory item) internal pure returns (bytes32) {\\n    uint256 ptr = item.memPtr;\\n    uint256 len = item.len;\\n    bytes32 result;\\n    assembly {\\n      result := keccak256(ptr, len)\\n    }\\n    return result;\\n  }\\n\\n  function payloadLocation(RLPItem memory item) internal pure returns (uint256, uint256) {\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 memPtr = item.memPtr + offset;\\n    uint256 len = item.len - offset; // data length\\n    return (memPtr, len);\\n  }\\n\\n  /*\\n   * @dev A cheaper version of keccak256(toBytes(item)) that avoids copying memory.\\n   * @return keccak256 hash of the item payload.\\n   */\\n  function payloadKeccak256(RLPItem memory item) internal pure returns (bytes32) {\\n    (uint256 memPtr, uint256 len) = payloadLocation(item);\\n    bytes32 result;\\n    assembly {\\n      result := keccak256(memPtr, len)\\n    }\\n    return result;\\n  }\\n\\n  /** RLPItem conversions into data types **/\\n\\n  // @returns raw rlp encoding in bytes\\n  function toRlpBytes(RLPItem memory item) internal pure returns (bytes memory) {\\n    bytes memory result = new bytes(item.len);\\n    if (result.length == 0) return result;\\n\\n    uint256 ptr;\\n    assembly {\\n      ptr := add(0x20, result)\\n    }\\n\\n    copy(item.memPtr, ptr, item.len);\\n    return result;\\n  }\\n\\n  // any non-zero byte is considered true\\n  function toBoolean(RLPItem memory item) internal pure returns (bool) {\\n    require(item.len == 1);\\n    uint256 result;\\n    uint256 memPtr = item.memPtr;\\n    assembly {\\n      result := byte(0, mload(memPtr))\\n    }\\n\\n    return result == 0 ? false : true;\\n  }\\n\\n  function toAddress(RLPItem memory item) internal pure returns (address) {\\n    // 1 byte for the length prefix\\n    require(item.len == 21);\\n\\n    return address(uint160(toUint(item)));\\n  }\\n\\n  function toUint(RLPItem memory item) internal pure returns (uint256) {\\n    require(item.len > 0 && item.len < 33 + 1);\\n\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 len = item.len - offset;\\n\\n    uint256 result;\\n    uint256 memPtr = item.memPtr + offset;\\n    assembly {\\n      result := mload(memPtr)\\n\\n      // shfit to the correct location if neccesary\\n      if lt(len, 32) {\\n        result := div(result, exp(256, sub(32, len)))\\n      }\\n    }\\n\\n    return result;\\n  }\\n\\n  // enforces 32 byte length\\n  function toUintStrict(RLPItem memory item) internal pure returns (uint256) {\\n    // one byte prefix\\n    require(item.len == 33);\\n\\n    uint256 result;\\n    uint256 memPtr = item.memPtr + 1;\\n    assembly {\\n      result := mload(memPtr)\\n    }\\n\\n    return result;\\n  }\\n\\n  function toBytes(RLPItem memory item) internal pure returns (bytes memory) {\\n    require(item.len > 0);\\n\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 len = item.len - offset; // data length\\n    bytes memory result = new bytes(len);\\n\\n    uint256 destPtr;\\n    assembly {\\n      destPtr := add(0x20, result)\\n    }\\n\\n    copy(item.memPtr + offset, destPtr, len);\\n    return result;\\n  }\\n\\n  /*\\n   * Private Helpers\\n   */\\n\\n  // @return number of payload items inside an encoded list.\\n  function numItems(RLPItem memory item) private pure returns (uint256) {\\n    if (item.len == 0) return 0;\\n\\n    uint256 count = 0;\\n    uint256 currPtr = item.memPtr + _payloadOffset(item.memPtr);\\n    uint256 endPtr = item.memPtr + item.len;\\n    while (currPtr < endPtr) {\\n      currPtr = currPtr + _itemLength(currPtr); // skip over an item\\n      count++;\\n    }\\n\\n    return count;\\n  }\\n\\n  // @return entire rlp item byte length\\n  function _itemLength(uint256 memPtr) private pure returns (uint256) {\\n    uint256 itemLen;\\n    uint256 byte0;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < STRING_SHORT_START) itemLen = 1;\\n    else if (byte0 < STRING_LONG_START) itemLen = byte0 - STRING_SHORT_START + 1;\\n    else if (byte0 < LIST_SHORT_START) {\\n      assembly {\\n        let byteLen := sub(byte0, 0xb7) // # of bytes the actual length is\\n        memPtr := add(memPtr, 1) // skip over the first byte\\n        /* 32 byte word size */\\n        let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to get the len\\n        itemLen := add(dataLen, add(byteLen, 1))\\n      }\\n    } else if (byte0 < LIST_LONG_START) {\\n      itemLen = byte0 - LIST_SHORT_START + 1;\\n    } else {\\n      assembly {\\n        let byteLen := sub(byte0, 0xf7)\\n        memPtr := add(memPtr, 1)\\n\\n        let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to the correct length\\n        itemLen := add(dataLen, add(byteLen, 1))\\n      }\\n    }\\n\\n    return itemLen;\\n  }\\n\\n  // @return number of bytes until the data\\n  function _payloadOffset(uint256 memPtr) private pure returns (uint256) {\\n    uint256 byte0;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < STRING_SHORT_START) return 0;\\n    else if (byte0 < STRING_LONG_START || (byte0 > LIST_SHORT_START - 1 && byte0 < LIST_LONG_START)) return 1;\\n    else if (byte0 < LIST_SHORT_START)\\n      // being explicit\\n      return byte0 - (STRING_LONG_START - 1) + 1;\\n    else return byte0 - (LIST_LONG_START - 1) + 1;\\n  }\\n\\n  /*\\n   * @param src Pointer to source\\n   * @param dest Pointer to destination\\n   * @param len Amount of memory to copy from the source\\n   */\\n  function copy(\\n    uint256 src,\\n    uint256 dest,\\n    uint256 len\\n  ) private pure {\\n    if (len == 0) return;\\n\\n    // copy as many word sizes as possible\\n    for (; len > WORD_SIZE - 1; len -= WORD_SIZE) {\\n      assembly {\\n        mstore(dest, mload(src))\\n      }\\n\\n      src += WORD_SIZE;\\n      dest += WORD_SIZE;\\n    }\\n\\n    if (len == 0) return;\\n\\n    // left over bytes. Mask is used to remove unwanted bytes from the word\\n    uint256 mask = 256**(WORD_SIZE - len) - 1;\\n\\n    assembly {\\n      let srcpart := and(mload(src), not(mask)) // zero out src\\n      let destpart := and(mload(dest), mask) // retrieve the bytes\\n      mstore(dest, or(destpart, srcpart))\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x213834ee76145029ef22fab9575fbffec4309f7b52b63e23d840aeab7f5a6f44\",\"license\":\"MIT\"},\"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/tunnel/FxBaseRootTunnel.sol\\npragma solidity 0.8.17;\\n\\nimport {RLPReader} from \\\"../lib/RLPReader.sol\\\";\\nimport {MerklePatriciaProof} from \\\"../lib/MerklePatriciaProof.sol\\\";\\nimport {Merkle} from \\\"../lib/Merkle.sol\\\";\\nimport \\\"../lib/ExitPayloadReader.sol\\\";\\n\\ninterface IFxStateSender {\\n  function sendMessageToChild(address _receiver, bytes calldata _data) external;\\n}\\n\\ncontract ICheckpointManager {\\n  struct HeaderBlock {\\n    bytes32 root;\\n    uint256 start;\\n    uint256 end;\\n    uint256 createdAt;\\n    address proposer;\\n  }\\n\\n  /**\\n   * @notice mapping of checkpoint header numbers to block details\\n   * @dev These checkpoints are submited by plasma contracts\\n   */\\n  mapping(uint256 => HeaderBlock) public headerBlocks;\\n}\\n\\nabstract contract FxBaseRootTunnel {\\n  using RLPReader for RLPReader.RLPItem;\\n  using Merkle for bytes32;\\n  using ExitPayloadReader for bytes;\\n  using ExitPayloadReader for ExitPayloadReader.ExitPayload;\\n  using ExitPayloadReader for ExitPayloadReader.Log;\\n  using ExitPayloadReader for ExitPayloadReader.LogTopics;\\n  using ExitPayloadReader for ExitPayloadReader.Receipt;\\n\\n  // keccak256(MessageSent(bytes))\\n  bytes32 public constant SEND_MESSAGE_EVENT_SIG = 0x8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036;\\n\\n  // state sender contract\\n  IFxStateSender public fxRoot;\\n  // root chain manager\\n  ICheckpointManager public checkpointManager;\\n  // child tunnel contract which receives and sends messages\\n  address public fxChildTunnel;\\n\\n  // storage to avoid duplicate exits\\n  mapping(bytes32 => bool) public processedExits;\\n\\n  constructor(address _checkpointManager, address _fxRoot) {\\n    checkpointManager = ICheckpointManager(_checkpointManager);\\n    fxRoot = IFxStateSender(_fxRoot);\\n  }\\n\\n  // set fxChildTunnel if not set already\\n  function setFxChildTunnel(address _fxChildTunnel) internal virtual {\\n    require(fxChildTunnel == address(0x0), \\\"FxBaseRootTunnel: CHILD_TUNNEL_ALREADY_SET\\\");\\n    fxChildTunnel = _fxChildTunnel;\\n  }\\n\\n  /**\\n   * @notice Send bytes message to Child Tunnel\\n   * @param message bytes message that will be sent to Child Tunnel\\n   * some message examples -\\n   *   abi.encode(tokenId);\\n   *   abi.encode(tokenId, tokenMetadata);\\n   *   abi.encode(messageType, messageData);\\n   */\\n  function _sendMessageToChild(bytes memory message) internal {\\n    fxRoot.sendMessageToChild(fxChildTunnel, message);\\n  }\\n\\n  function _validateAndExtractMessage(bytes memory inputData) internal returns (bytes memory) {\\n    ExitPayloadReader.ExitPayload memory payload = inputData.toExitPayload();\\n\\n    bytes memory branchMaskBytes = payload.getBranchMaskAsBytes();\\n    uint256 blockNumber = payload.getBlockNumber();\\n    // checking if exit has already been processed\\n    // unique exit is identified using hash of (blockNumber, branchMask, receiptLogIndex)\\n    bytes32 exitHash = keccak256(\\n      abi.encodePacked(\\n        blockNumber,\\n        // first 2 nibbles are dropped while generating nibble array\\n        // this allows branch masks that are valid but bypass exitHash check (changing first 2 nibbles only)\\n        // so converting to nibble array and then hashing it\\n        MerklePatriciaProof._getNibbleArray(branchMaskBytes),\\n        payload.getReceiptLogIndex()\\n      )\\n    );\\n    require(processedExits[exitHash] == false, \\\"FxRootTunnel: EXIT_ALREADY_PROCESSED\\\");\\n    processedExits[exitHash] = true;\\n\\n    ExitPayloadReader.Receipt memory receipt = payload.getReceipt();\\n    ExitPayloadReader.Log memory log = receipt.getLog();\\n\\n    // check child tunnel\\n    require(fxChildTunnel == log.getEmitter(), \\\"FxRootTunnel: INVALID_FX_CHILD_TUNNEL\\\");\\n\\n    bytes32 receiptRoot = payload.getReceiptRoot();\\n    // verify receipt inclusion\\n    require(\\n      MerklePatriciaProof.verify(receipt.toBytes(), branchMaskBytes, payload.getReceiptProof(), receiptRoot),\\n      \\\"FxRootTunnel: INVALID_RECEIPT_PROOF\\\"\\n    );\\n\\n    // verify checkpoint inclusion\\n    _checkBlockMembershipInCheckpoint(\\n      blockNumber,\\n      payload.getBlockTime(),\\n      payload.getTxRoot(),\\n      receiptRoot,\\n      payload.getHeaderNumber(),\\n      payload.getBlockProof()\\n    );\\n\\n    ExitPayloadReader.LogTopics memory topics = log.getTopics();\\n\\n    require(\\n      bytes32(topics.getField(0).toUint()) == SEND_MESSAGE_EVENT_SIG, // topic0 is event sig\\n      \\\"FxRootTunnel: INVALID_SIGNATURE\\\"\\n    );\\n\\n    // received message data\\n    bytes memory message = abi.decode(log.getData(), (bytes)); // event decodes params again, so decoding bytes to get message\\n    return message;\\n  }\\n\\n  function _checkBlockMembershipInCheckpoint(\\n    uint256 blockNumber,\\n    uint256 blockTime,\\n    bytes32 txRoot,\\n    bytes32 receiptRoot,\\n    uint256 headerNumber,\\n    bytes memory blockProof\\n  ) private view returns (uint256) {\\n    (bytes32 headerRoot, uint256 startBlock, , uint256 createdAt, ) = checkpointManager.headerBlocks(headerNumber);\\n\\n    require(\\n      keccak256(abi.encodePacked(blockNumber, blockTime, txRoot, receiptRoot)).checkMembership(\\n        blockNumber - startBlock,\\n        headerRoot,\\n        blockProof\\n      ),\\n      \\\"FxRootTunnel: INVALID_HEADER\\\"\\n    );\\n    return createdAt;\\n  }\\n\\n  /**\\n   * @notice receive message from  L2 to L1, validated by proof\\n   * @dev This function verifies if the transaction actually happened on child chain\\n   *\\n   * @param inputData RLP encoded data of the reference tx containing following list of fields\\n   *  0 - headerNumber - Checkpoint header block number containing the reference tx\\n   *  1 - blockProof - Proof that the block header (in the child chain) is a leaf in the submitted merkle root\\n   *  2 - blockNumber - Block number containing the reference tx on child chain\\n   *  3 - blockTime - Reference tx block time\\n   *  4 - txRoot - Transactions root of block\\n   *  5 - receiptRoot - Receipts root of block\\n   *  6 - receipt - Receipt of the reference transaction\\n   *  7 - receiptProof - Merkle proof of the reference receipt\\n   *  8 - branchMask - 32 bits denoting the path of receipt in merkle tree\\n   *  9 - receiptLogIndex - Log Index to read from the receipt\\n   */\\n  function receiveMessage(bytes memory inputData) public virtual {\\n    bytes memory message = _validateAndExtractMessage(inputData);\\n    _processMessageFromChild(message);\\n  }\\n\\n  /**\\n   * @notice Process message received from Child Tunnel\\n   * @dev function needs to be implemented to handle message as per requirement\\n   * This is called by onStateReceive function.\\n   * Since it is called via a system call, any event will not be emitted during its execution.\\n   * @param message bytes message that was sent from Child Tunnel\\n   */\\n  function _processMessageFromChild(bytes memory message) internal virtual;\\n}\\n\",\"keccak256\":\"0x7b5d6a3850d1aba92864c1f7361e2a0f1ecd2073e9ef5783b2ff543f45a7e42d\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":47055,"contract":"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol:ICheckpointManager","label":"headerBlocks","offset":0,"slot":"0","type":"t_mapping(t_uint256,t_struct(HeaderBlock)47049_storage)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_uint256,t_struct(HeaderBlock)47049_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct ICheckpointManager.HeaderBlock)","numberOfBytes":"32","value":"t_struct(HeaderBlock)47049_storage"},"t_struct(HeaderBlock)47049_storage":{"encoding":"inplace","label":"struct ICheckpointManager.HeaderBlock","members":[{"astId":47040,"contract":"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol:ICheckpointManager","label":"root","offset":0,"slot":"0","type":"t_bytes32"},{"astId":47042,"contract":"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol:ICheckpointManager","label":"start","offset":0,"slot":"1","type":"t_uint256"},{"astId":47044,"contract":"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol:ICheckpointManager","label":"end","offset":0,"slot":"2","type":"t_uint256"},{"astId":47046,"contract":"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol:ICheckpointManager","label":"createdAt","offset":0,"slot":"3","type":"t_uint256"},{"astId":47048,"contract":"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol:ICheckpointManager","label":"proposer","offset":0,"slot":"4","type":"t_address"}],"numberOfBytes":"160"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"headerBlocks(uint256)":{"notice":"mapping of checkpoint header numbers to block details"}},"version":1}},"IFxStateSender":{"abi":[{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"sendMessageToChild","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"sendMessageToChild(address,bytes)":"b4720477"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"sendMessageToChild\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol\":\"IFxStateSender\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/connectors/polygon/lib/ExitPayloadReader.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/ExitPayloadReader.sol\\npragma solidity 0.8.17;\\n\\nimport {RLPReader} from \\\"./RLPReader.sol\\\";\\n\\nlibrary ExitPayloadReader {\\n  using RLPReader for bytes;\\n  using RLPReader for RLPReader.RLPItem;\\n\\n  uint8 constant WORD_SIZE = 32;\\n\\n  struct ExitPayload {\\n    RLPReader.RLPItem[] data;\\n  }\\n\\n  struct Receipt {\\n    RLPReader.RLPItem[] data;\\n    bytes raw;\\n    uint256 logIndex;\\n  }\\n\\n  struct Log {\\n    RLPReader.RLPItem data;\\n    RLPReader.RLPItem[] list;\\n  }\\n\\n  struct LogTopics {\\n    RLPReader.RLPItem[] data;\\n  }\\n\\n  // copy paste of private copy() from RLPReader to avoid changing of existing contracts\\n  function copy(\\n    uint256 src,\\n    uint256 dest,\\n    uint256 len\\n  ) private pure {\\n    if (len == 0) return;\\n\\n    // copy as many word sizes as possible\\n    for (; len > WORD_SIZE - 1; len -= WORD_SIZE) {\\n      assembly {\\n        mstore(dest, mload(src))\\n      }\\n\\n      src += WORD_SIZE;\\n      dest += WORD_SIZE;\\n    }\\n\\n    if (len == 0) return;\\n\\n    // left over bytes. Mask is used to remove unwanted bytes from the word\\n    uint256 mask = 256**(WORD_SIZE - len) - 1;\\n    assembly {\\n      let srcpart := and(mload(src), not(mask)) // zero out src\\n      let destpart := and(mload(dest), mask) // retrieve the bytes\\n      mstore(dest, or(destpart, srcpart))\\n    }\\n  }\\n\\n  function toExitPayload(bytes memory data) internal pure returns (ExitPayload memory) {\\n    RLPReader.RLPItem[] memory payloadData = data.toRlpItem().toList();\\n\\n    return ExitPayload(payloadData);\\n  }\\n\\n  function getHeaderNumber(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[0].toUint();\\n  }\\n\\n  function getBlockProof(ExitPayload memory payload) internal pure returns (bytes memory) {\\n    return payload.data[1].toBytes();\\n  }\\n\\n  function getBlockNumber(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[2].toUint();\\n  }\\n\\n  function getBlockTime(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[3].toUint();\\n  }\\n\\n  function getTxRoot(ExitPayload memory payload) internal pure returns (bytes32) {\\n    return bytes32(payload.data[4].toUint());\\n  }\\n\\n  function getReceiptRoot(ExitPayload memory payload) internal pure returns (bytes32) {\\n    return bytes32(payload.data[5].toUint());\\n  }\\n\\n  function getReceipt(ExitPayload memory payload) internal pure returns (Receipt memory receipt) {\\n    receipt.raw = payload.data[6].toBytes();\\n    RLPReader.RLPItem memory receiptItem = receipt.raw.toRlpItem();\\n\\n    if (receiptItem.isList()) {\\n      // legacy tx\\n      receipt.data = receiptItem.toList();\\n    } else {\\n      // pop first byte before parsting receipt\\n      bytes memory typedBytes = receipt.raw;\\n      bytes memory result = new bytes(typedBytes.length - 1);\\n      uint256 srcPtr;\\n      uint256 destPtr;\\n      assembly {\\n        srcPtr := add(33, typedBytes)\\n        destPtr := add(0x20, result)\\n      }\\n\\n      copy(srcPtr, destPtr, result.length);\\n      receipt.data = result.toRlpItem().toList();\\n    }\\n\\n    receipt.logIndex = getReceiptLogIndex(payload);\\n    return receipt;\\n  }\\n\\n  function getReceiptProof(ExitPayload memory payload) internal pure returns (bytes memory) {\\n    return payload.data[7].toBytes();\\n  }\\n\\n  function getBranchMaskAsBytes(ExitPayload memory payload) internal pure returns (bytes memory) {\\n    return payload.data[8].toBytes();\\n  }\\n\\n  function getBranchMaskAsUint(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[8].toUint();\\n  }\\n\\n  function getReceiptLogIndex(ExitPayload memory payload) internal pure returns (uint256) {\\n    return payload.data[9].toUint();\\n  }\\n\\n  // Receipt methods\\n  function toBytes(Receipt memory receipt) internal pure returns (bytes memory) {\\n    return receipt.raw;\\n  }\\n\\n  function getLog(Receipt memory receipt) internal pure returns (Log memory) {\\n    RLPReader.RLPItem memory logData = receipt.data[3].toList()[receipt.logIndex];\\n    return Log(logData, logData.toList());\\n  }\\n\\n  // Log methods\\n  function getEmitter(Log memory log) internal pure returns (address) {\\n    return RLPReader.toAddress(log.list[0]);\\n  }\\n\\n  function getTopics(Log memory log) internal pure returns (LogTopics memory) {\\n    return LogTopics(log.list[1].toList());\\n  }\\n\\n  function getData(Log memory log) internal pure returns (bytes memory) {\\n    return log.list[2].toBytes();\\n  }\\n\\n  function toRlpBytes(Log memory log) internal pure returns (bytes memory) {\\n    return log.data.toRlpBytes();\\n  }\\n\\n  // LogTopics methods\\n  function getField(LogTopics memory topics, uint256 index) internal pure returns (RLPReader.RLPItem memory) {\\n    return topics.data[index];\\n  }\\n}\\n\",\"keccak256\":\"0x0d07d60a794df4d3c0a41032f0ee46912daeb73369a3a112f376fcd0487fc107\",\"license\":\"MIT\"},\"contracts/messaging/connectors/polygon/lib/Merkle.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/Merkle.sol\\npragma solidity 0.8.17;\\n\\nlibrary Merkle {\\n  function checkMembership(\\n    bytes32 leaf,\\n    uint256 index,\\n    bytes32 rootHash,\\n    bytes memory proof\\n  ) internal pure returns (bool) {\\n    require(proof.length % 32 == 0, \\\"Invalid proof length\\\");\\n    uint256 proofHeight = proof.length / 32;\\n    // Proof of size n means, height of the tree is n+1.\\n    // In a tree of height n+1, max #leafs possible is 2 ^ n\\n    require(index < 2**proofHeight, \\\"Leaf index is too big\\\");\\n\\n    bytes32 proofElement;\\n    bytes32 computedHash = leaf;\\n    uint256 len = proof.length + 1;\\n    for (uint256 i = 32; i < len; ) {\\n      assembly {\\n        proofElement := mload(add(proof, i))\\n      }\\n\\n      if (index % 2 == 0) {\\n        computedHash = keccak256(abi.encodePacked(computedHash, proofElement));\\n      } else {\\n        computedHash = keccak256(abi.encodePacked(proofElement, computedHash));\\n      }\\n\\n      index = index / 2;\\n\\n      unchecked {\\n        i += 32;\\n      }\\n    }\\n    return computedHash == rootHash;\\n  }\\n}\\n\",\"keccak256\":\"0xc7282da570239b7d6c774fa6e829a605d73bdfcc7812b727f4a5b42b17b6d64f\",\"license\":\"MIT\"},\"contracts/messaging/connectors/polygon/lib/MerklePatriciaProof.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/MerklePatriciaProof.sol\\npragma solidity 0.8.17;\\n\\nimport {RLPReader} from \\\"./RLPReader.sol\\\";\\n\\nlibrary MerklePatriciaProof {\\n  /*\\n   * @dev Verifies a merkle patricia proof.\\n   * @param value The terminating value in the trie.\\n   * @param encodedPath The path in the trie leading to value.\\n   * @param rlpParentNodes The rlp encoded stack of nodes.\\n   * @param root The root hash of the trie.\\n   * @return The boolean validity of the proof.\\n   */\\n  function verify(\\n    bytes memory value,\\n    bytes memory encodedPath,\\n    bytes memory rlpParentNodes,\\n    bytes32 root\\n  ) internal pure returns (bool) {\\n    RLPReader.RLPItem memory item = RLPReader.toRlpItem(rlpParentNodes);\\n    RLPReader.RLPItem[] memory parentNodes = RLPReader.toList(item);\\n\\n    bytes memory currentNode;\\n    RLPReader.RLPItem[] memory currentNodeList;\\n\\n    bytes32 nodeKey = root;\\n    uint256 pathPtr = 0;\\n\\n    bytes memory path = _getNibbleArray(encodedPath);\\n    if (path.length == 0) {\\n      return false;\\n    }\\n\\n    uint256 len = parentNodes.length;\\n    for (uint256 i = 0; i < len; ) {\\n      if (pathPtr > path.length) {\\n        return false;\\n      }\\n\\n      currentNode = RLPReader.toRlpBytes(parentNodes[i]);\\n      if (nodeKey != keccak256(currentNode)) {\\n        return false;\\n      }\\n      currentNodeList = RLPReader.toList(parentNodes[i]);\\n\\n      if (currentNodeList.length == 17) {\\n        if (pathPtr == path.length) {\\n          if (keccak256(RLPReader.toBytes(currentNodeList[16])) == keccak256(value)) {\\n            return true;\\n          } else {\\n            return false;\\n          }\\n        }\\n\\n        uint8 nextPathNibble = uint8(path[pathPtr]);\\n        if (nextPathNibble > 16) {\\n          return false;\\n        }\\n        nodeKey = bytes32(RLPReader.toUintStrict(currentNodeList[nextPathNibble]));\\n        pathPtr += 1;\\n      } else if (currentNodeList.length == 2) {\\n        uint256 traversed = _nibblesToTraverse(RLPReader.toBytes(currentNodeList[0]), path, pathPtr);\\n        if (pathPtr + traversed == path.length) {\\n          //leaf node\\n          if (keccak256(RLPReader.toBytes(currentNodeList[1])) == keccak256(value)) {\\n            return true;\\n          } else {\\n            return false;\\n          }\\n        }\\n\\n        //extension node\\n        if (traversed == 0) {\\n          return false;\\n        }\\n\\n        pathPtr += traversed;\\n        nodeKey = bytes32(RLPReader.toUintStrict(currentNodeList[1]));\\n      } else {\\n        return false;\\n      }\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  function _nibblesToTraverse(\\n    bytes memory encodedPartialPath,\\n    bytes memory path,\\n    uint256 pathPtr\\n  ) private pure returns (uint256) {\\n    uint256 len = 0;\\n    // encodedPartialPath has elements that are each two hex characters (1 byte), but partialPath\\n    // and slicedPath have elements that are each one hex character (1 nibble)\\n    bytes memory partialPath = _getNibbleArray(encodedPartialPath);\\n    bytes memory slicedPath = new bytes(partialPath.length);\\n\\n    // pathPtr counts nibbles in path\\n    // partialPath.length is a number of nibbles\\n    uint256 _len = pathPtr + partialPath.length;\\n    for (uint256 i = pathPtr; i < _len; ) {\\n      bytes1 pathNibble = path[i];\\n      slicedPath[i - pathPtr] = pathNibble;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    if (keccak256(partialPath) == keccak256(slicedPath)) {\\n      len = partialPath.length;\\n    } else {\\n      len = 0;\\n    }\\n    return len;\\n  }\\n\\n  // bytes b must be hp encoded\\n  function _getNibbleArray(bytes memory b) internal pure returns (bytes memory) {\\n    bytes memory nibbles = \\\"\\\";\\n    if (b.length > 0) {\\n      uint8 offset;\\n      uint8 hpNibble = uint8(_getNthNibbleOfBytes(0, b));\\n      if (hpNibble == 1 || hpNibble == 3) {\\n        nibbles = new bytes(b.length * 2 - 1);\\n        bytes1 oddNibble = _getNthNibbleOfBytes(1, b);\\n        nibbles[0] = oddNibble;\\n        offset = 1;\\n      } else {\\n        nibbles = new bytes(b.length * 2 - 2);\\n        offset = 0;\\n      }\\n\\n      uint256 len = nibbles.length;\\n      for (uint256 i = offset; i < len; ) {\\n        nibbles[i] = _getNthNibbleOfBytes(i - offset + 2, b);\\n\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n    }\\n    return nibbles;\\n  }\\n\\n  function _getNthNibbleOfBytes(uint256 n, bytes memory str) private pure returns (bytes1) {\\n    return bytes1(n % 2 == 0 ? uint8(str[n / 2]) / 0x10 : uint8(str[n / 2]) % 0x10);\\n  }\\n}\\n\",\"keccak256\":\"0x5132cb2535739352bac5f6cd66689cbd1bc086e048a05f7524079ef74ad693b3\",\"license\":\"MIT\"},\"contracts/messaging/connectors/polygon/lib/RLPReader.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/lib/RLPReader.sol\\npragma solidity 0.8.17;\\n\\nlibrary RLPReader {\\n  uint8 constant STRING_SHORT_START = 0x80;\\n  uint8 constant STRING_LONG_START = 0xb8;\\n  uint8 constant LIST_SHORT_START = 0xc0;\\n  uint8 constant LIST_LONG_START = 0xf8;\\n  uint8 constant WORD_SIZE = 32;\\n\\n  struct RLPItem {\\n    uint256 len;\\n    uint256 memPtr;\\n  }\\n\\n  struct Iterator {\\n    RLPItem item; // Item that's being iterated over.\\n    uint256 nextPtr; // Position of the next item in the list.\\n  }\\n\\n  /*\\n   * @dev Returns the next element in the iteration. Reverts if it has not next element.\\n   * @param self The iterator.\\n   * @return The next element in the iteration.\\n   */\\n  function next(Iterator memory self) internal pure returns (RLPItem memory) {\\n    require(hasNext(self));\\n\\n    uint256 ptr = self.nextPtr;\\n    uint256 itemLength = _itemLength(ptr);\\n    self.nextPtr = ptr + itemLength;\\n\\n    return RLPItem(itemLength, ptr);\\n  }\\n\\n  /*\\n   * @dev Returns true if the iteration has more elements.\\n   * @param self The iterator.\\n   * @return true if the iteration has more elements.\\n   */\\n  function hasNext(Iterator memory self) internal pure returns (bool) {\\n    RLPItem memory item = self.item;\\n    return self.nextPtr < item.memPtr + item.len;\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function toRlpItem(bytes memory item) internal pure returns (RLPItem memory) {\\n    uint256 memPtr;\\n    assembly {\\n      memPtr := add(item, 0x20)\\n    }\\n\\n    return RLPItem(item.length, memPtr);\\n  }\\n\\n  /*\\n   * @dev Create an iterator. Reverts if item is not a list.\\n   * @param self The RLP item.\\n   * @return An 'Iterator' over the item.\\n   */\\n  function iterator(RLPItem memory self) internal pure returns (Iterator memory) {\\n    require(isList(self));\\n\\n    uint256 ptr = self.memPtr + _payloadOffset(self.memPtr);\\n    return Iterator(self, ptr);\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function rlpLen(RLPItem memory item) internal pure returns (uint256) {\\n    return item.len;\\n  }\\n\\n  /*\\n   * @param item RLP encoded bytes\\n   */\\n  function payloadLen(RLPItem memory item) internal pure returns (uint256) {\\n    return item.len - _payloadOffset(item.memPtr);\\n  }\\n\\n  /*\\n   * @param item RLP encoded list in bytes\\n   */\\n  function toList(RLPItem memory item) internal pure returns (RLPItem[] memory) {\\n    require(isList(item));\\n\\n    uint256 items = numItems(item);\\n    RLPItem[] memory result = new RLPItem[](items);\\n\\n    uint256 memPtr = item.memPtr + _payloadOffset(item.memPtr);\\n    uint256 dataLen;\\n    for (uint256 i = 0; i < items; ) {\\n      dataLen = _itemLength(memPtr);\\n      result[i] = RLPItem(dataLen, memPtr);\\n      memPtr = memPtr + dataLen;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    return result;\\n  }\\n\\n  // @return indicator whether encoded payload is a list. negate this function call for isData.\\n  function isList(RLPItem memory item) internal pure returns (bool) {\\n    if (item.len == 0) return false;\\n\\n    uint8 byte0;\\n    uint256 memPtr = item.memPtr;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < LIST_SHORT_START) return false;\\n    return true;\\n  }\\n\\n  /*\\n   * @dev A cheaper version of keccak256(toRlpBytes(item)) that avoids copying memory.\\n   * @return keccak256 hash of RLP encoded bytes.\\n   */\\n  function rlpBytesKeccak256(RLPItem memory item) internal pure returns (bytes32) {\\n    uint256 ptr = item.memPtr;\\n    uint256 len = item.len;\\n    bytes32 result;\\n    assembly {\\n      result := keccak256(ptr, len)\\n    }\\n    return result;\\n  }\\n\\n  function payloadLocation(RLPItem memory item) internal pure returns (uint256, uint256) {\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 memPtr = item.memPtr + offset;\\n    uint256 len = item.len - offset; // data length\\n    return (memPtr, len);\\n  }\\n\\n  /*\\n   * @dev A cheaper version of keccak256(toBytes(item)) that avoids copying memory.\\n   * @return keccak256 hash of the item payload.\\n   */\\n  function payloadKeccak256(RLPItem memory item) internal pure returns (bytes32) {\\n    (uint256 memPtr, uint256 len) = payloadLocation(item);\\n    bytes32 result;\\n    assembly {\\n      result := keccak256(memPtr, len)\\n    }\\n    return result;\\n  }\\n\\n  /** RLPItem conversions into data types **/\\n\\n  // @returns raw rlp encoding in bytes\\n  function toRlpBytes(RLPItem memory item) internal pure returns (bytes memory) {\\n    bytes memory result = new bytes(item.len);\\n    if (result.length == 0) return result;\\n\\n    uint256 ptr;\\n    assembly {\\n      ptr := add(0x20, result)\\n    }\\n\\n    copy(item.memPtr, ptr, item.len);\\n    return result;\\n  }\\n\\n  // any non-zero byte is considered true\\n  function toBoolean(RLPItem memory item) internal pure returns (bool) {\\n    require(item.len == 1);\\n    uint256 result;\\n    uint256 memPtr = item.memPtr;\\n    assembly {\\n      result := byte(0, mload(memPtr))\\n    }\\n\\n    return result == 0 ? false : true;\\n  }\\n\\n  function toAddress(RLPItem memory item) internal pure returns (address) {\\n    // 1 byte for the length prefix\\n    require(item.len == 21);\\n\\n    return address(uint160(toUint(item)));\\n  }\\n\\n  function toUint(RLPItem memory item) internal pure returns (uint256) {\\n    require(item.len > 0 && item.len < 33 + 1);\\n\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 len = item.len - offset;\\n\\n    uint256 result;\\n    uint256 memPtr = item.memPtr + offset;\\n    assembly {\\n      result := mload(memPtr)\\n\\n      // shfit to the correct location if neccesary\\n      if lt(len, 32) {\\n        result := div(result, exp(256, sub(32, len)))\\n      }\\n    }\\n\\n    return result;\\n  }\\n\\n  // enforces 32 byte length\\n  function toUintStrict(RLPItem memory item) internal pure returns (uint256) {\\n    // one byte prefix\\n    require(item.len == 33);\\n\\n    uint256 result;\\n    uint256 memPtr = item.memPtr + 1;\\n    assembly {\\n      result := mload(memPtr)\\n    }\\n\\n    return result;\\n  }\\n\\n  function toBytes(RLPItem memory item) internal pure returns (bytes memory) {\\n    require(item.len > 0);\\n\\n    uint256 offset = _payloadOffset(item.memPtr);\\n    uint256 len = item.len - offset; // data length\\n    bytes memory result = new bytes(len);\\n\\n    uint256 destPtr;\\n    assembly {\\n      destPtr := add(0x20, result)\\n    }\\n\\n    copy(item.memPtr + offset, destPtr, len);\\n    return result;\\n  }\\n\\n  /*\\n   * Private Helpers\\n   */\\n\\n  // @return number of payload items inside an encoded list.\\n  function numItems(RLPItem memory item) private pure returns (uint256) {\\n    if (item.len == 0) return 0;\\n\\n    uint256 count = 0;\\n    uint256 currPtr = item.memPtr + _payloadOffset(item.memPtr);\\n    uint256 endPtr = item.memPtr + item.len;\\n    while (currPtr < endPtr) {\\n      currPtr = currPtr + _itemLength(currPtr); // skip over an item\\n      count++;\\n    }\\n\\n    return count;\\n  }\\n\\n  // @return entire rlp item byte length\\n  function _itemLength(uint256 memPtr) private pure returns (uint256) {\\n    uint256 itemLen;\\n    uint256 byte0;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < STRING_SHORT_START) itemLen = 1;\\n    else if (byte0 < STRING_LONG_START) itemLen = byte0 - STRING_SHORT_START + 1;\\n    else if (byte0 < LIST_SHORT_START) {\\n      assembly {\\n        let byteLen := sub(byte0, 0xb7) // # of bytes the actual length is\\n        memPtr := add(memPtr, 1) // skip over the first byte\\n        /* 32 byte word size */\\n        let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to get the len\\n        itemLen := add(dataLen, add(byteLen, 1))\\n      }\\n    } else if (byte0 < LIST_LONG_START) {\\n      itemLen = byte0 - LIST_SHORT_START + 1;\\n    } else {\\n      assembly {\\n        let byteLen := sub(byte0, 0xf7)\\n        memPtr := add(memPtr, 1)\\n\\n        let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to the correct length\\n        itemLen := add(dataLen, add(byteLen, 1))\\n      }\\n    }\\n\\n    return itemLen;\\n  }\\n\\n  // @return number of bytes until the data\\n  function _payloadOffset(uint256 memPtr) private pure returns (uint256) {\\n    uint256 byte0;\\n    assembly {\\n      byte0 := byte(0, mload(memPtr))\\n    }\\n\\n    if (byte0 < STRING_SHORT_START) return 0;\\n    else if (byte0 < STRING_LONG_START || (byte0 > LIST_SHORT_START - 1 && byte0 < LIST_LONG_START)) return 1;\\n    else if (byte0 < LIST_SHORT_START)\\n      // being explicit\\n      return byte0 - (STRING_LONG_START - 1) + 1;\\n    else return byte0 - (LIST_LONG_START - 1) + 1;\\n  }\\n\\n  /*\\n   * @param src Pointer to source\\n   * @param dest Pointer to destination\\n   * @param len Amount of memory to copy from the source\\n   */\\n  function copy(\\n    uint256 src,\\n    uint256 dest,\\n    uint256 len\\n  ) private pure {\\n    if (len == 0) return;\\n\\n    // copy as many word sizes as possible\\n    for (; len > WORD_SIZE - 1; len -= WORD_SIZE) {\\n      assembly {\\n        mstore(dest, mload(src))\\n      }\\n\\n      src += WORD_SIZE;\\n      dest += WORD_SIZE;\\n    }\\n\\n    if (len == 0) return;\\n\\n    // left over bytes. Mask is used to remove unwanted bytes from the word\\n    uint256 mask = 256**(WORD_SIZE - len) - 1;\\n\\n    assembly {\\n      let srcpart := and(mload(src), not(mask)) // zero out src\\n      let destpart := and(mload(dest), mask) // retrieve the bytes\\n      mstore(dest, or(destpart, srcpart))\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x213834ee76145029ef22fab9575fbffec4309f7b52b63e23d840aeab7f5a6f44\",\"license\":\"MIT\"},\"contracts/messaging/connectors/polygon/tunnel/FxBaseRootTunnel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// https://github.com/fx-portal/contracts/blob/main/contracts/tunnel/FxBaseRootTunnel.sol\\npragma solidity 0.8.17;\\n\\nimport {RLPReader} from \\\"../lib/RLPReader.sol\\\";\\nimport {MerklePatriciaProof} from \\\"../lib/MerklePatriciaProof.sol\\\";\\nimport {Merkle} from \\\"../lib/Merkle.sol\\\";\\nimport \\\"../lib/ExitPayloadReader.sol\\\";\\n\\ninterface IFxStateSender {\\n  function sendMessageToChild(address _receiver, bytes calldata _data) external;\\n}\\n\\ncontract ICheckpointManager {\\n  struct HeaderBlock {\\n    bytes32 root;\\n    uint256 start;\\n    uint256 end;\\n    uint256 createdAt;\\n    address proposer;\\n  }\\n\\n  /**\\n   * @notice mapping of checkpoint header numbers to block details\\n   * @dev These checkpoints are submited by plasma contracts\\n   */\\n  mapping(uint256 => HeaderBlock) public headerBlocks;\\n}\\n\\nabstract contract FxBaseRootTunnel {\\n  using RLPReader for RLPReader.RLPItem;\\n  using Merkle for bytes32;\\n  using ExitPayloadReader for bytes;\\n  using ExitPayloadReader for ExitPayloadReader.ExitPayload;\\n  using ExitPayloadReader for ExitPayloadReader.Log;\\n  using ExitPayloadReader for ExitPayloadReader.LogTopics;\\n  using ExitPayloadReader for ExitPayloadReader.Receipt;\\n\\n  // keccak256(MessageSent(bytes))\\n  bytes32 public constant SEND_MESSAGE_EVENT_SIG = 0x8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036;\\n\\n  // state sender contract\\n  IFxStateSender public fxRoot;\\n  // root chain manager\\n  ICheckpointManager public checkpointManager;\\n  // child tunnel contract which receives and sends messages\\n  address public fxChildTunnel;\\n\\n  // storage to avoid duplicate exits\\n  mapping(bytes32 => bool) public processedExits;\\n\\n  constructor(address _checkpointManager, address _fxRoot) {\\n    checkpointManager = ICheckpointManager(_checkpointManager);\\n    fxRoot = IFxStateSender(_fxRoot);\\n  }\\n\\n  // set fxChildTunnel if not set already\\n  function setFxChildTunnel(address _fxChildTunnel) internal virtual {\\n    require(fxChildTunnel == address(0x0), \\\"FxBaseRootTunnel: CHILD_TUNNEL_ALREADY_SET\\\");\\n    fxChildTunnel = _fxChildTunnel;\\n  }\\n\\n  /**\\n   * @notice Send bytes message to Child Tunnel\\n   * @param message bytes message that will be sent to Child Tunnel\\n   * some message examples -\\n   *   abi.encode(tokenId);\\n   *   abi.encode(tokenId, tokenMetadata);\\n   *   abi.encode(messageType, messageData);\\n   */\\n  function _sendMessageToChild(bytes memory message) internal {\\n    fxRoot.sendMessageToChild(fxChildTunnel, message);\\n  }\\n\\n  function _validateAndExtractMessage(bytes memory inputData) internal returns (bytes memory) {\\n    ExitPayloadReader.ExitPayload memory payload = inputData.toExitPayload();\\n\\n    bytes memory branchMaskBytes = payload.getBranchMaskAsBytes();\\n    uint256 blockNumber = payload.getBlockNumber();\\n    // checking if exit has already been processed\\n    // unique exit is identified using hash of (blockNumber, branchMask, receiptLogIndex)\\n    bytes32 exitHash = keccak256(\\n      abi.encodePacked(\\n        blockNumber,\\n        // first 2 nibbles are dropped while generating nibble array\\n        // this allows branch masks that are valid but bypass exitHash check (changing first 2 nibbles only)\\n        // so converting to nibble array and then hashing it\\n        MerklePatriciaProof._getNibbleArray(branchMaskBytes),\\n        payload.getReceiptLogIndex()\\n      )\\n    );\\n    require(processedExits[exitHash] == false, \\\"FxRootTunnel: EXIT_ALREADY_PROCESSED\\\");\\n    processedExits[exitHash] = true;\\n\\n    ExitPayloadReader.Receipt memory receipt = payload.getReceipt();\\n    ExitPayloadReader.Log memory log = receipt.getLog();\\n\\n    // check child tunnel\\n    require(fxChildTunnel == log.getEmitter(), \\\"FxRootTunnel: INVALID_FX_CHILD_TUNNEL\\\");\\n\\n    bytes32 receiptRoot = payload.getReceiptRoot();\\n    // verify receipt inclusion\\n    require(\\n      MerklePatriciaProof.verify(receipt.toBytes(), branchMaskBytes, payload.getReceiptProof(), receiptRoot),\\n      \\\"FxRootTunnel: INVALID_RECEIPT_PROOF\\\"\\n    );\\n\\n    // verify checkpoint inclusion\\n    _checkBlockMembershipInCheckpoint(\\n      blockNumber,\\n      payload.getBlockTime(),\\n      payload.getTxRoot(),\\n      receiptRoot,\\n      payload.getHeaderNumber(),\\n      payload.getBlockProof()\\n    );\\n\\n    ExitPayloadReader.LogTopics memory topics = log.getTopics();\\n\\n    require(\\n      bytes32(topics.getField(0).toUint()) == SEND_MESSAGE_EVENT_SIG, // topic0 is event sig\\n      \\\"FxRootTunnel: INVALID_SIGNATURE\\\"\\n    );\\n\\n    // received message data\\n    bytes memory message = abi.decode(log.getData(), (bytes)); // event decodes params again, so decoding bytes to get message\\n    return message;\\n  }\\n\\n  function _checkBlockMembershipInCheckpoint(\\n    uint256 blockNumber,\\n    uint256 blockTime,\\n    bytes32 txRoot,\\n    bytes32 receiptRoot,\\n    uint256 headerNumber,\\n    bytes memory blockProof\\n  ) private view returns (uint256) {\\n    (bytes32 headerRoot, uint256 startBlock, , uint256 createdAt, ) = checkpointManager.headerBlocks(headerNumber);\\n\\n    require(\\n      keccak256(abi.encodePacked(blockNumber, blockTime, txRoot, receiptRoot)).checkMembership(\\n        blockNumber - startBlock,\\n        headerRoot,\\n        blockProof\\n      ),\\n      \\\"FxRootTunnel: INVALID_HEADER\\\"\\n    );\\n    return createdAt;\\n  }\\n\\n  /**\\n   * @notice receive message from  L2 to L1, validated by proof\\n   * @dev This function verifies if the transaction actually happened on child chain\\n   *\\n   * @param inputData RLP encoded data of the reference tx containing following list of fields\\n   *  0 - headerNumber - Checkpoint header block number containing the reference tx\\n   *  1 - blockProof - Proof that the block header (in the child chain) is a leaf in the submitted merkle root\\n   *  2 - blockNumber - Block number containing the reference tx on child chain\\n   *  3 - blockTime - Reference tx block time\\n   *  4 - txRoot - Transactions root of block\\n   *  5 - receiptRoot - Receipts root of block\\n   *  6 - receipt - Receipt of the reference transaction\\n   *  7 - receiptProof - Merkle proof of the reference receipt\\n   *  8 - branchMask - 32 bits denoting the path of receipt in merkle tree\\n   *  9 - receiptLogIndex - Log Index to read from the receipt\\n   */\\n  function receiveMessage(bytes memory inputData) public virtual {\\n    bytes memory message = _validateAndExtractMessage(inputData);\\n    _processMessageFromChild(message);\\n  }\\n\\n  /**\\n   * @notice Process message received from Child Tunnel\\n   * @dev function needs to be implemented to handle message as per requirement\\n   * This is called by onStateReceive function.\\n   * Since it is called via a system call, any event will not be emitted during its execution.\\n   * @param message bytes message that was sent from Child Tunnel\\n   */\\n  function _processMessageFromChild(bytes memory message) internal virtual;\\n}\\n\",\"keccak256\":\"0x7b5d6a3850d1aba92864c1f7361e2a0f1ecd2073e9ef5783b2ff543f45a7e42d\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/messaging/connectors/zksync/ZkSyncHubConnector.sol":{"ZkSyncHubConnector":{"abi":[{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"uint32","name":"_mirrorDomain","type":"uint32"},{"internalType":"address","name":"_amb","type":"address"},{"internalType":"address","name":"_rootManager","type":"address"},{"internalType":"address","name":"_mirrorConnector","type":"address"},{"internalType":"address","name":"_stateCommitmentChain","type":"address"},{"internalType":"uint256","name":"_gasCap","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Connector__processMessage_notUsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_updated","type":"uint256"}],"name":"GasCapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"encodedData","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"current","type":"address"}],"name":"MirrorConnectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"mirrorDomain","type":"uint32"},{"indexed":false,"internalType":"address","name":"amb","type":"address"},{"indexed":false,"internalType":"address","name":"rootManager","type":"address"},{"indexed":false,"internalType":"address","name":"mirrorConnector","type":"address"}],"name":"NewConnector","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"AMB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIRROR_DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mirrorConnector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"processMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_l2BlockNumber","type":"uint32"},{"internalType":"uint256","name":"_l2MessageIndex","type":"uint256"},{"internalType":"uint16","name":"_l2TxNumberInBlock","type":"uint16"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"processMessageFromRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"processed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_encodedData","type":"bytes"}],"name":"sendMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gasCap","type":"uint256"}],"name":"setGasCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mirrorConnector","type":"address"}],"name":"setMirrorConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_expected","type":"address"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"processMessage(bytes)":{"details":"This is called by AMBs to process messages originating from mirror connector"},"processMessageFromRoot(uint32,uint256,uint16,bytes,bytes32[])":{"details":"modified from: https://v2-docs.zksync.io/dev/developer-guides/Bridging/l2-l1.html#prove-inclusion-of-the-message-into-the-l2-block"},"sendMessage(bytes,bytes)":{"details":"This is called by the root manager *only* on mainnet to propagate the aggregate root"}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_39152":{"entryPoint":null,"id":39152,"parameterSlots":5,"returnSlots":0},"@_39318":{"entryPoint":null,"id":39318,"parameterSlots":1,"returnSlots":0},"@_39396":{"entryPoint":null,"id":39396,"parameterSlots":5,"returnSlots":0},"@_47436":{"entryPoint":null,"id":47436,"parameterSlots":7,"returnSlots":0},"@_setGasCap_39346":{"entryPoint":617,"id":39346,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":512,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":411,"id":49908,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":708,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_addresst_uint256_fromMemory":{"entryPoint":732,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_uint32_fromMemory":{"entryPoint":682,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2702:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"73:108:181","statements":[{"nodeType":"YulAssignment","src":"83:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"98:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"92:5:181"},"nodeType":"YulFunctionCall","src":"92:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"83:5:181"}]},{"body":{"nodeType":"YulBlock","src":"159:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"168:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"171:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"161:6:181"},"nodeType":"YulFunctionCall","src":"161:12:181"},"nodeType":"YulExpressionStatement","src":"161:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"127:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"138:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"145:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"134:3:181"},"nodeType":"YulFunctionCall","src":"134:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"124:2:181"},"nodeType":"YulFunctionCall","src":"124:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"117:6:181"},"nodeType":"YulFunctionCall","src":"117:41:181"},"nodeType":"YulIf","src":"114:61:181"}]},"name":"abi_decode_uint32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"52:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"63:5:181","type":""}],"src":"14:167:181"},{"body":{"nodeType":"YulBlock","src":"246:117:181","statements":[{"nodeType":"YulAssignment","src":"256:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"271:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"265:5:181"},"nodeType":"YulFunctionCall","src":"265:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"256:5:181"}]},{"body":{"nodeType":"YulBlock","src":"341:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"350:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"353:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"343:6:181"},"nodeType":"YulFunctionCall","src":"343:12:181"},"nodeType":"YulExpressionStatement","src":"343:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"300:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"311:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"326:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"331:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"322:3:181"},"nodeType":"YulFunctionCall","src":"322:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"335:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"318:3:181"},"nodeType":"YulFunctionCall","src":"318:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"307:3:181"},"nodeType":"YulFunctionCall","src":"307:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"297:2:181"},"nodeType":"YulFunctionCall","src":"297:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"290:6:181"},"nodeType":"YulFunctionCall","src":"290:50:181"},"nodeType":"YulIf","src":"287:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"225:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"236:5:181","type":""}],"src":"186:177:181"},{"body":{"nodeType":"YulBlock","src":"549:513:181","statements":[{"body":{"nodeType":"YulBlock","src":"596:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"605:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"608:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"598:6:181"},"nodeType":"YulFunctionCall","src":"598:12:181"},"nodeType":"YulExpressionStatement","src":"598:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"570:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"579:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"566:3:181"},"nodeType":"YulFunctionCall","src":"566:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"591:3:181","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"562:3:181"},"nodeType":"YulFunctionCall","src":"562:33:181"},"nodeType":"YulIf","src":"559:53:181"},{"nodeType":"YulAssignment","src":"621:49:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"660:9:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"631:28:181"},"nodeType":"YulFunctionCall","src":"631:39:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"621:6:181"}]},{"nodeType":"YulAssignment","src":"679:58:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"722:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"733:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"718:3:181"},"nodeType":"YulFunctionCall","src":"718:18:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"689:28:181"},"nodeType":"YulFunctionCall","src":"689:48:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"679:6:181"}]},{"nodeType":"YulAssignment","src":"746:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"790:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"801:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"786:3:181"},"nodeType":"YulFunctionCall","src":"786:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"756:29:181"},"nodeType":"YulFunctionCall","src":"756:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"746:6:181"}]},{"nodeType":"YulAssignment","src":"814:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"858:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"869:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"854:3:181"},"nodeType":"YulFunctionCall","src":"854:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"824:29:181"},"nodeType":"YulFunctionCall","src":"824:49:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"814:6:181"}]},{"nodeType":"YulAssignment","src":"882:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"926:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"937:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"922:3:181"},"nodeType":"YulFunctionCall","src":"922:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"892:29:181"},"nodeType":"YulFunctionCall","src":"892:50:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"882:6:181"}]},{"nodeType":"YulAssignment","src":"951:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"995:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1006:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"991:3:181"},"nodeType":"YulFunctionCall","src":"991:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"961:29:181"},"nodeType":"YulFunctionCall","src":"961:50:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"951:6:181"}]},{"nodeType":"YulAssignment","src":"1020:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1040:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1051:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1036:3:181"},"nodeType":"YulFunctionCall","src":"1036:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1030:5:181"},"nodeType":"YulFunctionCall","src":"1030:26:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"1020:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_addresst_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"467:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"478:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"490:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"498:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"506:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"514:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"522:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"530:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"538:6:181","type":""}],"src":"368:694:181"},{"body":{"nodeType":"YulBlock","src":"1241:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1258:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1269:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1251:6:181"},"nodeType":"YulFunctionCall","src":"1251:21:181"},"nodeType":"YulExpressionStatement","src":"1251:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1292:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1303:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1288:3:181"},"nodeType":"YulFunctionCall","src":"1288:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1308:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1281:6:181"},"nodeType":"YulFunctionCall","src":"1281:30:181"},"nodeType":"YulExpressionStatement","src":"1281:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1331:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1342:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1327:3:181"},"nodeType":"YulFunctionCall","src":"1327:18:181"},{"hexValue":"656d70747920646f6d61696e","kind":"string","nodeType":"YulLiteral","src":"1347:14:181","type":"","value":"empty domain"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1320:6:181"},"nodeType":"YulFunctionCall","src":"1320:42:181"},"nodeType":"YulExpressionStatement","src":"1320:42:181"},{"nodeType":"YulAssignment","src":"1371:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1383:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1394:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1379:3:181"},"nodeType":"YulFunctionCall","src":"1379:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1371:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1218:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1232:4:181","type":""}],"src":"1067:336:181"},{"body":{"nodeType":"YulBlock","src":"1582:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1599:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1610:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1592:6:181"},"nodeType":"YulFunctionCall","src":"1592:21:181"},"nodeType":"YulExpressionStatement","src":"1592:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1633:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1644:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1629:3:181"},"nodeType":"YulFunctionCall","src":"1629:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1649:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1622:6:181"},"nodeType":"YulFunctionCall","src":"1622:30:181"},"nodeType":"YulExpressionStatement","src":"1622:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1672:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1683:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1668:3:181"},"nodeType":"YulFunctionCall","src":"1668:18:181"},{"hexValue":"656d70747920726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"1688:19:181","type":"","value":"empty rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1661:6:181"},"nodeType":"YulFunctionCall","src":"1661:47:181"},"nodeType":"YulExpressionStatement","src":"1661:47:181"},{"nodeType":"YulAssignment","src":"1717:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1729:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1740:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1725:3:181"},"nodeType":"YulFunctionCall","src":"1725:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1717:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1559:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1573:4:181","type":""}],"src":"1408:341:181"},{"body":{"nodeType":"YulBlock","src":"1911:227:181","statements":[{"nodeType":"YulAssignment","src":"1921:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1933:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1944:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1929:3:181"},"nodeType":"YulFunctionCall","src":"1929:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1921:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"1956:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1974:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1979:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1970:3:181"},"nodeType":"YulFunctionCall","src":"1970:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1983:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1966:3:181"},"nodeType":"YulFunctionCall","src":"1966:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1960:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2001:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2016:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2024:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2012:3:181"},"nodeType":"YulFunctionCall","src":"2012:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1994:6:181"},"nodeType":"YulFunctionCall","src":"1994:34:181"},"nodeType":"YulExpressionStatement","src":"1994:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2048:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2059:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2044:3:181"},"nodeType":"YulFunctionCall","src":"2044:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2068:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2076:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2064:3:181"},"nodeType":"YulFunctionCall","src":"2064:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2037:6:181"},"nodeType":"YulFunctionCall","src":"2037:43:181"},"nodeType":"YulExpressionStatement","src":"2037:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2100:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2111:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2096:3:181"},"nodeType":"YulFunctionCall","src":"2096:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"2120:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2128:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2116:3:181"},"nodeType":"YulFunctionCall","src":"2116:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2089:6:181"},"nodeType":"YulFunctionCall","src":"2089:43:181"},"nodeType":"YulExpressionStatement","src":"2089:43:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1864:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1875:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1883:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1891:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1902:4:181","type":""}],"src":"1754:384:181"},{"body":{"nodeType":"YulBlock","src":"2272:175:181","statements":[{"nodeType":"YulAssignment","src":"2282:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2294:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2305:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2290:3:181"},"nodeType":"YulFunctionCall","src":"2290:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2282:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"2317:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2335:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2340:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2331:3:181"},"nodeType":"YulFunctionCall","src":"2331:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2344:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2327:3:181"},"nodeType":"YulFunctionCall","src":"2327:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2321:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2362:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2377:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2385:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2373:3:181"},"nodeType":"YulFunctionCall","src":"2373:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2355:6:181"},"nodeType":"YulFunctionCall","src":"2355:34:181"},"nodeType":"YulExpressionStatement","src":"2355:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2409:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2420:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2405:3:181"},"nodeType":"YulFunctionCall","src":"2405:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2429:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2437:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2425:3:181"},"nodeType":"YulFunctionCall","src":"2425:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2398:6:181"},"nodeType":"YulFunctionCall","src":"2398:43:181"},"nodeType":"YulExpressionStatement","src":"2398:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2233:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2244:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2252:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2263:4:181","type":""}],"src":"2143:304:181"},{"body":{"nodeType":"YulBlock","src":"2581:119:181","statements":[{"nodeType":"YulAssignment","src":"2591:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2603:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2614:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2599:3:181"},"nodeType":"YulFunctionCall","src":"2599:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2591:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2633:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"2644:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2626:6:181"},"nodeType":"YulFunctionCall","src":"2626:25:181"},"nodeType":"YulExpressionStatement","src":"2626:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2671:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2682:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2667:3:181"},"nodeType":"YulFunctionCall","src":"2667:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"2687:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2660:6:181"},"nodeType":"YulFunctionCall","src":"2660:34:181"},"nodeType":"YulExpressionStatement","src":"2660:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2542:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2553:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2561:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2572:4:181","type":""}],"src":"2452:248:181"}]},"contents":"{\n    { }\n    function abi_decode_uint32_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_addresst_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := abi_decode_uint32_fromMemory(headStart)\n        value1 := abi_decode_uint32_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n        value4 := abi_decode_address_fromMemory(add(headStart, 128))\n        value5 := abi_decode_address_fromMemory(add(headStart, 160))\n        value6 := mload(add(headStart, 192))\n    }\n    function abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"empty domain\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"empty rootManager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"6101006040523480156200001257600080fd5b50604051620017e6380380620017e68339810160408190526200003591620002dc565b80878787878784848484846200004b336200019b565b8463ffffffff16600003620000965760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620000e25760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b60448201526064016200008d565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e0528116156200011a576200011a8162000200565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a3505050505050505050506200018d816200026960201b60201c565b505050505050505062000368565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b60045460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1600455565b805163ffffffff81168114620002bf57600080fd5b919050565b80516001600160a01b0381168114620002bf57600080fd5b600080600080600080600060e0888a031215620002f857600080fd5b6200030388620002aa565b96506200031360208901620002aa565b95506200032360408901620002c4565b94506200033360608901620002c4565b93506200034360808901620002c4565b92506200035360a08901620002c4565b915060c0880151905092959891949750929550565b60805160a05160c05160e051611413620003d360003960008181610141015261096d0152600081816102370152818161042b01526109a80152600081816103be015281816104e00152818161082801528181610b6d0152610c23015260006101e301526114136000f3fe6080604052600436106101235760003560e01c80638da5cb5b116100a0578063d1851c9211610064578063d1851c921461036f578063d232c2201461038d578063d69f9d61146103ac578063db1b7659146103e0578063e92a492f1461040057600080fd5b80638da5cb5b146102bc578063b1f8100d146102da578063c1f0808a146102fa578063c5b350df1461033a578063cc3942831461034f57600080fd5b80635bd11efc116100e75780635bd11efc146102055780635f61e3ec146102255780636a42b8f814610271578063715018a6146102875780637850b0201461029c57600080fd5b8063141684161461012f5780633cf52ffb1461017d57806348e6fa231461019c5780634ff746f6146101b157806352a9674b146101d157600080fd5b3661012a57005b600080fd5b34801561013b57600080fd5b506101637f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b34801561018957600080fd5b506002545b604051908152602001610174565b6101af6101aa366004610f22565b610420565b005b3480156101bd57600080fd5b506101af6101cc366004610f86565b6104d5565b3480156101dd57600080fd5b506101637f000000000000000000000000000000000000000000000000000000000000000081565b34801561021157600080fd5b506101af610220366004610fc3565b61057b565b34801561023157600080fd5b506102597f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610174565b34801561027d57600080fd5b5062093a8061018e565b34801561029357600080fd5b506101af6105b2565b3480156102a857600080fd5b506101af6102b7366004610ff3565b610666565b3480156102c857600080fd5b506000546001600160a01b0316610259565b3480156102e657600080fd5b506101af6102f5366004610fc3565b61069a565b34801561030657600080fd5b5061032a610315366004610ff3565b60056020526000908152604090205460ff1681565b6040519015158152602001610174565b34801561034657600080fd5b506101af610738565b34801561035b57600080fd5b50600354610259906001600160a01b031681565b34801561037b57600080fd5b506001546001600160a01b0316610259565b34801561039957600080fd5b506000546001600160a01b03161561032a565b3480156103b857600080fd5b506102597f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ec57600080fd5b5061032a6103fb366004610fc3565b6107a8565b34801561040c57600080fd5b506101af61041b36600461109a565b6107b2565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461048c5760405162461bcd60e51b815260206004820152600c60248201526b10b937b7ba26b0b730b3b2b960a11b60448201526064015b60405180910390fd5b6104968282610a4d565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e93550778282336040516104c99392919061118f565b60405180910390a15050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105365760405162461bcd60e51b81526004016104839060208082526004908201526310a0a6a160e11b604082015260600190565b61053f81610cf3565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced81336040516105709291906111cd565b60405180910390a150565b6000546001600160a01b031633146105a6576040516311a8a1bb60e31b815260040160405180910390fd5b6105af81610d0c565b50565b6000546001600160a01b031633146105dd576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426105ef91906111f7565b1161060d576040516324e0285f60e21b815260040160405180910390fd5b60025460000361063057604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b03161561065a576040516323295ef960e01b815260040160405180910390fd5b6106646000610d75565b565b6000546001600160a01b03163314610691576040516311a8a1bb60e31b815260040160405180910390fd5b6105af81610dda565b6000546001600160a01b031633146106c5576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b0382811691161480156106e3575060025415155b15610701576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361072f57604051634a2fb73f60e11b815260040160405180910390fd5b6105af81610e1b565b6001546001600160a01b03163314610763576040516311a7f27160e11b815260040160405180910390fd5b62093a806002544261077591906111f7565b11610793576040516324e0285f60e21b815260040160405180910390fd5b600154610664906001600160a01b0316610d75565b6000805b92915050565b602083146107ec5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610483565b6040805160608101825261ffff871681526003546001600160a01b03166020808301919091528251601f870182900482028101820184528681527f0000000000000000000000000000000000000000000000000000000000000000936000939290830191908990899081908401838280828437600092018290525093909452505060405163e4948f4360e01b8152929350916001600160a01b038516915063e4948f43906108a6908d908d9087908b908b90600401611218565b602060405180830381865afa1580156108c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e791906112a1565b9050806109205760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b6044820152606401610483565b600061092c87896112c3565b60008181526005602052604090205490915060ff16610a405760008181526005602052604090819020805460ff191660011790555163473ec9fd60e11b81527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166004820152602481018290526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638e7d93fa90604401600060405180830381600087803b1580156109ec57600080fd5b505af1158015610a00573d6000803e3d6000fd5b505050507fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced888833604051610a37939291906112e1565b60405180910390a15b5050505050505050505050565b8051602014610a8d5760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610483565b8151602014610ac85760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610483565b6000634ff746f660e01b83604051602401610ae39190611322565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600082806020019051810190610b2e9190611335565b90506127106000610b3e34610e69565b8451604051632e6b3b8f60e11b8152600481018690526024810185905263ffffffff90911660448201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635cd6771e90606401602060405180830381865afa158015610bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be09190611335565b8111610c165760405162461bcd60e51b8152602060048201526005602482015264216665657360d81b6044820152606401610483565b6003546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163725ad850918491166000888782604051908082528060200260200182016040528015610c8657816020015b6060815260200190600190039081610c715790505b506040518763ffffffff1660e01b8152600401610ca795949392919061134e565b60206040518083038185885af1158015610cc5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610cea9190611335565b50505050505050565b6040516316c2fdb560e21b815260040160405180910390fd5b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60045460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1600455565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b6000600454821115610e7b5760045491505b5090565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610ea657600080fd5b813567ffffffffffffffff80821115610ec157610ec1610e7f565b604051601f8301601f19908116603f01168101908282118183101715610ee957610ee9610e7f565b81604052838152866020858801011115610f0257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610f3557600080fd5b823567ffffffffffffffff80821115610f4d57600080fd5b610f5986838701610e95565b93506020850135915080821115610f6f57600080fd5b50610f7c85828601610e95565b9150509250929050565b600060208284031215610f9857600080fd5b813567ffffffffffffffff811115610faf57600080fd5b610fbb84828501610e95565b949350505050565b600060208284031215610fd557600080fd5b81356001600160a01b0381168114610fec57600080fd5b9392505050565b60006020828403121561100557600080fd5b5035919050565b60008083601f84011261101e57600080fd5b50813567ffffffffffffffff81111561103657600080fd5b60208301915083602082850101111561104e57600080fd5b9250929050565b60008083601f84011261106757600080fd5b50813567ffffffffffffffff81111561107f57600080fd5b6020830191508360208260051b850101111561104e57600080fd5b600080600080600080600060a0888a0312156110b557600080fd5b873563ffffffff811681146110c957600080fd5b965060208801359550604088013561ffff811681146110e757600080fd5b9450606088013567ffffffffffffffff8082111561110457600080fd5b6111108b838c0161100c565b909650945060808a013591508082111561112957600080fd5b506111368a828b01611055565b989b979a50959850939692959293505050565b6000815180845260005b8181101561116f57602081850181015186830182015201611153565b506000602082860101526020601f19601f83011685010191505092915050565b6060815260006111a26060830186611149565b82810360208401526111b48186611149565b91505060018060a01b0383166040830152949350505050565b6040815260006111e06040830185611149565b905060018060a01b03831660208301529392505050565b818103818111156107ac57634e487b7160e01b600052601160045260246000fd5b63ffffffff861681528460208201526080604082015261ffff845116608082015260018060a01b0360208501511660a082015260006040850151606060c084015261126660e0840182611149565b838103606085015284815290506001600160fb1b0384111561128757600080fd5b8360051b8086602084013701602001979650505050505050565b6000602082840312156112b357600080fd5b81518015158114610fec57600080fd5b803560208310156107ac57600019602084900360031b1b1692915050565b6040815282604082015282846060830137600060608483018101919091526001600160a01b03929092166020820152601f909201601f191690910101919050565b602081526000610fec6020830184611149565b60006020828403121561134757600080fd5b5051919050565b60018060a01b038616815260006020868184015260a0604084015261137660a0840187611149565b85606085015283810360808501528085518083528383019150838160051b84010184880160005b838110156113cb57601f198684030185526113b9838351611149565b9487019492509086019060010161139d565b50909c9b50505050505050505050505056fea26469706673582212208b1a643a1efb4efa03e4319159663e389bb52a5193b1ef174f0e67ed9055783d64736f6c63430008110033","opcodes":"PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x17E6 CODESIZE SUB DUP1 PUSH3 0x17E6 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x2DC JUMP JUMPDEST DUP1 DUP8 DUP8 DUP8 DUP8 DUP8 DUP5 DUP5 DUP5 DUP5 DUP5 PUSH3 0x4B CALLER PUSH3 0x19B JUMP JUMPDEST DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0x0 SUB PUSH3 0x96 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x32B6B83A3C903237B6B0B4B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xE2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x32B6B83A3C903937B7BA26B0B730B3B2B9 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x8D JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0xA0 MSTORE DUP4 DUP2 AND PUSH1 0xC0 MSTORE SWAP1 DUP6 AND PUSH1 0xE0 MSTORE DUP2 AND ISZERO PUSH3 0x11A JUMPI PUSH3 0x11A DUP2 PUSH3 0x200 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH4 0xFFFFFFFF DUP7 DUP2 AND SWAP3 SWAP1 DUP9 AND SWAP2 PUSH32 0x4F9C27C2FE3F84576EA469D367D044DA53C45E951617E8389F2B5ED8DB9D25F0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP PUSH3 0x18D DUP2 PUSH3 0x269 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP POP POP POP POP POP POP POP PUSH3 0x368 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 SSTORE JUMP JUMPDEST DUP1 MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH3 0x2BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x2BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH3 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x303 DUP9 PUSH3 0x2AA JUMP JUMPDEST SWAP7 POP PUSH3 0x313 PUSH1 0x20 DUP10 ADD PUSH3 0x2AA JUMP JUMPDEST SWAP6 POP PUSH3 0x323 PUSH1 0x40 DUP10 ADD PUSH3 0x2C4 JUMP JUMPDEST SWAP5 POP PUSH3 0x333 PUSH1 0x60 DUP10 ADD PUSH3 0x2C4 JUMP JUMPDEST SWAP4 POP PUSH3 0x343 PUSH1 0x80 DUP10 ADD PUSH3 0x2C4 JUMP JUMPDEST SWAP3 POP PUSH3 0x353 PUSH1 0xA0 DUP10 ADD PUSH3 0x2C4 JUMP JUMPDEST SWAP2 POP PUSH1 0xC0 DUP9 ADD MLOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x1413 PUSH3 0x3D3 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x141 ADD MSTORE PUSH2 0x96D ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x237 ADD MSTORE DUP2 DUP2 PUSH2 0x42B ADD MSTORE PUSH2 0x9A8 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x3BE ADD MSTORE DUP2 DUP2 PUSH2 0x4E0 ADD MSTORE DUP2 DUP2 PUSH2 0x828 ADD MSTORE DUP2 DUP2 PUSH2 0xB6D ADD MSTORE PUSH2 0xC23 ADD MSTORE PUSH1 0x0 PUSH2 0x1E3 ADD MSTORE PUSH2 0x1413 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x123 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xD1851C92 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x36F JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x38D JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x3AC JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x3E0 JUMPI DUP1 PUSH4 0xE92A492F EQ PUSH2 0x400 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2BC JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x2DA JUMPI DUP1 PUSH4 0xC1F0808A EQ PUSH2 0x2FA JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x33A JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x34F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5BD11EFC GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x225 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x271 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0x7850B020 EQ PUSH2 0x29C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x12F JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x17D JUMPI DUP1 PUSH4 0x48E6FA23 EQ PUSH2 0x19C JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x1B1 JUMPI DUP1 PUSH4 0x52A9674B EQ PUSH2 0x1D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x12A JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x163 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x189 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x174 JUMP JUMPDEST PUSH2 0x1AF PUSH2 0x1AA CALLDATASIZE PUSH1 0x4 PUSH2 0xF22 JUMP JUMPDEST PUSH2 0x420 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AF PUSH2 0x1CC CALLDATASIZE PUSH1 0x4 PUSH2 0xF86 JUMP JUMPDEST PUSH2 0x4D5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x163 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x211 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AF PUSH2 0x220 CALLDATASIZE PUSH1 0x4 PUSH2 0xFC3 JUMP JUMPDEST PUSH2 0x57B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x259 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x174 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x27D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x18E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x293 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AF PUSH2 0x5B2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AF PUSH2 0x2B7 CALLDATASIZE PUSH1 0x4 PUSH2 0xFF3 JUMP JUMPDEST PUSH2 0x666 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x259 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AF PUSH2 0x2F5 CALLDATASIZE PUSH1 0x4 PUSH2 0xFC3 JUMP JUMPDEST PUSH2 0x69A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x306 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32A PUSH2 0x315 CALLDATASIZE PUSH1 0x4 PUSH2 0xFF3 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x174 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x346 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AF PUSH2 0x738 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x259 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x259 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x32A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x259 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32A PUSH2 0x3FB CALLDATASIZE PUSH1 0x4 PUSH2 0xFC3 JUMP JUMPDEST PUSH2 0x7A8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x40C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AF PUSH2 0x41B CALLDATASIZE PUSH1 0x4 PUSH2 0x109A JUMP JUMPDEST PUSH2 0x7B2 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x48C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B937B7BA26B0B730B3B2B9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x496 DUP3 DUP3 PUSH2 0xA4D JUMP JUMPDEST PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 DUP3 DUP3 CALLER PUSH1 0x40 MLOAD PUSH2 0x4C9 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x118F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x536 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x483 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0x53F DUP2 PUSH2 0xCF3 JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0x570 SWAP3 SWAP2 SWAP1 PUSH2 0x11CD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5AF DUP2 PUSH2 0xD0C JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5DD JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x5EF SWAP2 SWAP1 PUSH2 0x11F7 JUMP JUMPDEST GT PUSH2 0x60D JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x630 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x65A JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x664 PUSH1 0x0 PUSH2 0xD75 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x691 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5AF DUP2 PUSH2 0xDDA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x6C5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x6E3 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x701 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x72F JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5AF DUP2 PUSH2 0xE1B JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x763 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x775 SWAP2 SWAP1 PUSH2 0x11F7 JUMP JUMPDEST GT PUSH2 0x793 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x664 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD75 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP4 EQ PUSH2 0x7EC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x483 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH2 0xFFFF DUP8 AND DUP2 MSTORE PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD PUSH1 0x1F DUP8 ADD DUP3 SWAP1 DIV DUP3 MUL DUP2 ADD DUP3 ADD DUP5 MSTORE DUP7 DUP2 MSTORE PUSH32 0x0 SWAP4 PUSH1 0x0 SWAP4 SWAP3 SWAP1 DUP4 ADD SWAP2 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 SWAP1 SWAP5 MSTORE POP POP PUSH1 0x40 MLOAD PUSH4 0xE4948F43 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 POP PUSH4 0xE4948F43 SWAP1 PUSH2 0x8A6 SWAP1 DUP14 SWAP1 DUP14 SWAP1 DUP8 SWAP1 DUP12 SWAP1 DUP12 SWAP1 PUSH1 0x4 ADD PUSH2 0x1218 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8E7 SWAP2 SWAP1 PUSH2 0x12A1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x920 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x10B83937BB32B7 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x483 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x92C DUP8 DUP10 PUSH2 0x12C3 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND PUSH2 0xA40 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH4 0x473EC9FD PUSH1 0xE1 SHL DUP2 MSTORE PUSH32 0x0 PUSH4 0xFFFFFFFF AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x8E7D93FA SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA00 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP9 DUP9 CALLER PUSH1 0x40 MLOAD PUSH2 0xA37 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x12E1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0xA8D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x483 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0xAC8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x483 JUMP JUMPDEST PUSH1 0x0 PUSH4 0x4FF746F6 PUSH1 0xE0 SHL DUP4 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xAE3 SWAP2 SWAP1 PUSH2 0x1322 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP SWAP1 POP PUSH1 0x0 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xB2E SWAP2 SWAP1 PUSH2 0x1335 JUMP JUMPDEST SWAP1 POP PUSH2 0x2710 PUSH1 0x0 PUSH2 0xB3E CALLVALUE PUSH2 0xE69 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x40 MLOAD PUSH4 0x2E6B3B8F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5CD6771E SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBBC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBE0 SWAP2 SWAP1 PUSH2 0x1335 JUMP JUMPDEST DUP2 GT PUSH2 0xC16 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x5 PUSH1 0x24 DUP3 ADD MSTORE PUSH5 0x2166656573 PUSH1 0xD8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x483 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND SWAP2 PUSH4 0x725AD850 SWAP2 DUP5 SWAP2 AND PUSH1 0x0 DUP9 DUP8 DUP3 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xC86 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0xC71 JUMPI SWAP1 POP JUMPDEST POP PUSH1 0x40 MLOAD DUP8 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xCA7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x134E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xCC5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCEA SWAP2 SWAP1 PUSH2 0x1335 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x16C2FDB5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 SLOAD DUP3 GT ISZERO PUSH2 0xE7B JUMPI PUSH1 0x4 SLOAD SWAP2 POP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xEA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xEC1 JUMPI PUSH2 0xEC1 PUSH2 0xE7F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xEE9 JUMPI PUSH2 0xEE9 PUSH2 0xE7F JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0xF02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xF35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xF4D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF59 DUP7 DUP4 DUP8 ADD PUSH2 0xE95 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xF6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF7C DUP6 DUP3 DUP7 ADD PUSH2 0xE95 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xFAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFBB DUP5 DUP3 DUP6 ADD PUSH2 0xE95 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xFD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xFEC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1005 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x101E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1036 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x104E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x1067 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x107F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x104E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x10B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x10C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x10E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1104 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1110 DUP12 DUP4 DUP13 ADD PUSH2 0x100C JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1136 DUP11 DUP3 DUP12 ADD PUSH2 0x1055 JUMP JUMPDEST SWAP9 SWAP12 SWAP8 SWAP11 POP SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x116F JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x1153 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x11A2 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x1149 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x11B4 DUP2 DUP7 PUSH2 0x1149 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x11E0 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x1149 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x7AC JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP7 AND DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0xFFFF DUP5 MLOAD AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x60 PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x1266 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0x1149 JUMP JUMPDEST DUP4 DUP2 SUB PUSH1 0x60 DUP6 ADD MSTORE DUP5 DUP2 MSTORE SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xFB SHL SUB DUP5 GT ISZERO PUSH2 0x1287 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x5 SHL DUP1 DUP7 PUSH1 0x20 DUP5 ADD CALLDATACOPY ADD PUSH1 0x20 ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x12B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xFEC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0x20 DUP4 LT ISZERO PUSH2 0x7AC JUMPI PUSH1 0x0 NOT PUSH1 0x20 DUP5 SWAP1 SUB PUSH1 0x3 SHL SHL AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 DUP5 PUSH1 0x60 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x60 DUP5 DUP4 ADD DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1F SWAP1 SWAP3 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xFEC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1149 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1347 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP7 DUP2 DUP5 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x1376 PUSH1 0xA0 DUP5 ADD DUP8 PUSH2 0x1149 JUMP JUMPDEST DUP6 PUSH1 0x60 DUP6 ADD MSTORE DUP4 DUP2 SUB PUSH1 0x80 DUP6 ADD MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE DUP4 DUP4 ADD SWAP2 POP DUP4 DUP2 PUSH1 0x5 SHL DUP5 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x13CB JUMPI PUSH1 0x1F NOT DUP7 DUP5 SUB ADD DUP6 MSTORE PUSH2 0x13B9 DUP4 DUP4 MLOAD PUSH2 0x1149 JUMP JUMPDEST SWAP5 DUP8 ADD SWAP5 SWAP3 POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x139D JUMP JUMPDEST POP SWAP1 SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP12 BYTE PUSH5 0x3A1EFB4EFA SUB 0xE4 BALANCE SWAP2 MSIZE PUSH7 0x3E389BB52A5193 0xB1 0xEF OR 0x4F 0xE PUSH8 0xED9055783D64736F PUSH13 0x63430008110033000000000000 ","sourceMap":"390:4839:147:-:0;;;961:285;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1235:7;1166;1175:13;1190:4;1196:12;1210:16;1166:7;1175:13;1190:4;1196:12;1210:16;3038:21:116::1;3048:10;3038:9;:21::i;:::-;3105:7;:12;;3116:1;3105:12:::0;3097:37:::1;;;::::0;-1:-1:-1;;;3097:37:116;;1269:2:181;3097:37:116::1;::::0;::::1;1251:21:181::0;1308:2;1288:18;;;1281:30;-1:-1:-1;;;1327:18:181;;;1320:42;1379:18;;3097:37:116::1;;;;;;;;;-1:-1:-1::0;;;;;3148:26:116;::::1;3140:56;;;::::0;-1:-1:-1;;;3140:56:116;;1610:2:181;3140:56:116::1;::::0;::::1;1592:21:181::0;1649:2;1629:18;;;1622:30;-1:-1:-1;;;1668:18:181;;;1661:47;1725:18;;3140:56:116::1;1408:341:181::0;3140:56:116::1;3308:16;::::0;;::::1;;::::0;-1:-1:-1;;;;;3330:10:116;;::::1;;::::0;3346:27;;::::1;;::::0;3379:29;;::::1;;::::0;3449:30;::::1;::::0;3445:88:::1;;3489:37;3509:16:::0;3489:19:::1;:37::i;:::-;3544:74;::::0;;-1:-1:-1;;;;;2012:15:181;;;1994:34;;2064:15;;;2059:2;2044:18;;2037:43;2116:15;;2096:18;;;2089:43;3544:74:116;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;1944:2:181;3544:74:116;;::::1;2857:766:::0;;;;;1209:210:119;;;;;791:19:118;802:7;791:10;;;:19;;:::i;:::-;756:59;961:285:147;;;;;;;390:4839;;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;5838::116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;2355:34:181;;2425:15;;;2420:2;2405:18;;2398:43;5921:57:116;;2290:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;1089:114:118:-;1160:6;;1146:30;;;2626:25:181;;;2682:2;2667:18;;2660:34;;;1146:30:118;;2599:18:181;1146:30:118;;;;;;;1182:6;:16;1089:114::o;14:167:181:-;92:13;;145:10;134:22;;124:33;;114:61;;171:1;168;161:12;114:61;14:167;;;:::o;186:177::-;265:13;;-1:-1:-1;;;;;307:31:181;;297:42;;287:70;;353:1;350;343:12;368:694;490:6;498;506;514;522;530;538;591:3;579:9;570:7;566:23;562:33;559:53;;;608:1;605;598:12;559:53;631:39;660:9;631:39;:::i;:::-;621:49;;689:48;733:2;722:9;718:18;689:48;:::i;:::-;679:58;;756:49;801:2;790:9;786:18;756:49;:::i;:::-;746:59;;824:49;869:2;858:9;854:18;824:49;:::i;:::-;814:59;;892:50;937:3;926:9;922:19;892:50;:::i;:::-;882:60;;961:50;1006:3;995:9;991:19;961:50;:::i;:::-;951:60;;1051:3;1040:9;1036:19;1030:26;1020:36;;368:694;;;;;;;;;;:::o;2452:248::-;390:4839:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@AMB_39042":{"entryPoint":null,"id":39042,"parameterSlots":0,"returnSlots":0},"@DOMAIN_39039":{"entryPoint":null,"id":39039,"parameterSlots":0,"returnSlots":0},"@MIRROR_DOMAIN_39048":{"entryPoint":null,"id":39048,"parameterSlots":0,"returnSlots":0},"@ROOT_MANAGER_39045":{"entryPoint":null,"id":39045,"parameterSlots":0,"returnSlots":0},"@_39157":{"entryPoint":null,"id":39157,"parameterSlots":0,"returnSlots":0},"@_getGas_39366":{"entryPoint":3689,"id":39366,"parameterSlots":1,"returnSlots":1},"@_processMessage_39220":{"entryPoint":3315,"id":39220,"parameterSlots":1,"returnSlots":0},"@_sendMessage_47539":{"entryPoint":2637,"id":47539,"parameterSlots":2,"returnSlots":0},"@_setGasCap_39346":{"entryPoint":3546,"id":39346,"parameterSlots":1,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":3340,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":3445,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":3611,"id":49927,"parameterSlots":1,"returnSlots":0},"@_verifySender_47447":{"entryPoint":null,"id":47447,"parameterSlots":1,"returnSlots":1},"@acceptProposedOwner_49887":{"entryPoint":1848,"id":49887,"parameterSlots":0,"returnSlots":0},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@mirrorConnector_39051":{"entryPoint":null,"id":39051,"parameterSlots":0,"returnSlots":0},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@processMessageFromRoot_47627":{"entryPoint":1970,"id":47627,"parameterSlots":7,"returnSlots":0},"@processMessage_39189":{"entryPoint":1237,"id":39189,"parameterSlots":1,"returnSlots":0},"@processed_47408":{"entryPoint":null,"id":47408,"parameterSlots":0,"returnSlots":0},"@proposeNewOwner_49841":{"entryPoint":1690,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_49874":{"entryPoint":1458,"id":49874,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@sendMessage_39419":{"entryPoint":1056,"id":39419,"parameterSlots":2,"returnSlots":0},"@setGasCap_39330":{"entryPoint":1638,"id":39330,"parameterSlots":1,"returnSlots":0},"@setMirrorConnector_39170":{"entryPoint":1403,"id":39170,"parameterSlots":1,"returnSlots":0},"@verifySender_39202":{"entryPoint":1960,"id":39202,"parameterSlots":1,"returnSlots":1},"abi_decode_array_bytes32_dyn_calldata":{"entryPoint":4181,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes":{"entryPoint":3733,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":4108,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":4035,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":4769,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes_memory_ptr":{"entryPoint":3974,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr":{"entryPoint":3874,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":4083,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":4917,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32t_uint256t_uint16t_bytes_calldata_ptrt_array$_t_bytes32_$dyn_calldata_ptr":{"entryPoint":4250,"id":null,"parameterSlots":2,"returnSlots":7},"abi_encode_bytes":{"entryPoint":4425,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_rational_0_by_1_t_bytes_memory_ptr_t_uint256_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_address_t_uint256_t_bytes_memory_ptr_t_uint256_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":4942,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes_calldata_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":4833,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":4898,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":4557,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":4495,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_867777f634bb94108a594889ab4f827c256cf5677bbf34c222dbb2e03cd5a0d3__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint32__to_t_uint256_t_uint256_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint32_t_uint256_t_struct$_L2Message_$3776_memory_ptr_t_array$_t_bytes32_$dyn_calldata_ptr__to_t_uint256_t_uint256_t_struct$_L2Message_$3776_memory_ptr_t_array$_t_bytes32_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":4632,"id":null,"parameterSlots":6,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":4599,"id":null,"parameterSlots":2,"returnSlots":1},"convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes32":{"entryPoint":4803,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x41":{"entryPoint":3711,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:13537:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"113:93:181","statements":[{"nodeType":"YulAssignment","src":"123:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"135:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"146:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"131:3:181"},"nodeType":"YulFunctionCall","src":"131:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"123:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"165:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"180:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"188:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"176:3:181"},"nodeType":"YulFunctionCall","src":"176:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"158:6:181"},"nodeType":"YulFunctionCall","src":"158:42:181"},"nodeType":"YulExpressionStatement","src":"158:42:181"}]},"name":"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"82:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"93:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"104:4:181","type":""}],"src":"14:192:181"},{"body":{"nodeType":"YulBlock","src":"312:76:181","statements":[{"nodeType":"YulAssignment","src":"322:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"334:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"345:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"330:3:181"},"nodeType":"YulFunctionCall","src":"330:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"322:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"364:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"375:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"357:6:181"},"nodeType":"YulFunctionCall","src":"357:25:181"},"nodeType":"YulExpressionStatement","src":"357:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"281:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"292:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"303:4:181","type":""}],"src":"211:177:181"},{"body":{"nodeType":"YulBlock","src":"425:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"442:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"449:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"454:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"445:3:181"},"nodeType":"YulFunctionCall","src":"445:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"435:6:181"},"nodeType":"YulFunctionCall","src":"435:31:181"},"nodeType":"YulExpressionStatement","src":"435:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"482:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"485:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"475:6:181"},"nodeType":"YulFunctionCall","src":"475:15:181"},"nodeType":"YulExpressionStatement","src":"475:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"506:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"509:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"499:6:181"},"nodeType":"YulFunctionCall","src":"499:15:181"},"nodeType":"YulExpressionStatement","src":"499:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"393:127:181"},{"body":{"nodeType":"YulBlock","src":"577:666:181","statements":[{"body":{"nodeType":"YulBlock","src":"626:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"635:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"638:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"628:6:181"},"nodeType":"YulFunctionCall","src":"628:12:181"},"nodeType":"YulExpressionStatement","src":"628:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"605:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"613:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"601:3:181"},"nodeType":"YulFunctionCall","src":"601:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"620:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"597:3:181"},"nodeType":"YulFunctionCall","src":"597:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"590:6:181"},"nodeType":"YulFunctionCall","src":"590:35:181"},"nodeType":"YulIf","src":"587:55:181"},{"nodeType":"YulVariableDeclaration","src":"651:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"674:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"661:12:181"},"nodeType":"YulFunctionCall","src":"661:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"655:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"690:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"700:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"694:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"741:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"743:16:181"},"nodeType":"YulFunctionCall","src":"743:18:181"},"nodeType":"YulExpressionStatement","src":"743:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"733:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"737:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"730:2:181"},"nodeType":"YulFunctionCall","src":"730:10:181"},"nodeType":"YulIf","src":"727:36:181"},{"nodeType":"YulVariableDeclaration","src":"772:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"786:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"782:3:181"},"nodeType":"YulFunctionCall","src":"782:7:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"776:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"798:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"818:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"812:5:181"},"nodeType":"YulFunctionCall","src":"812:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"802:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"830:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"852:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"876:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"880:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"872:3:181"},"nodeType":"YulFunctionCall","src":"872:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"887:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"868:3:181"},"nodeType":"YulFunctionCall","src":"868:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"892:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"864:3:181"},"nodeType":"YulFunctionCall","src":"864:31:181"},{"name":"_3","nodeType":"YulIdentifier","src":"897:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"860:3:181"},"nodeType":"YulFunctionCall","src":"860:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"848:3:181"},"nodeType":"YulFunctionCall","src":"848:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"834:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"960:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"962:16:181"},"nodeType":"YulFunctionCall","src":"962:18:181"},"nodeType":"YulExpressionStatement","src":"962:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"919:10:181"},{"name":"_2","nodeType":"YulIdentifier","src":"931:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"916:2:181"},"nodeType":"YulFunctionCall","src":"916:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"939:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"951:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"936:2:181"},"nodeType":"YulFunctionCall","src":"936:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"913:2:181"},"nodeType":"YulFunctionCall","src":"913:46:181"},"nodeType":"YulIf","src":"910:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"998:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1002:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"991:6:181"},"nodeType":"YulFunctionCall","src":"991:22:181"},"nodeType":"YulExpressionStatement","src":"991:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1029:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1037:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1022:6:181"},"nodeType":"YulFunctionCall","src":"1022:18:181"},"nodeType":"YulExpressionStatement","src":"1022:18:181"},{"body":{"nodeType":"YulBlock","src":"1088:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1097:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1100:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1090:6:181"},"nodeType":"YulFunctionCall","src":"1090:12:181"},"nodeType":"YulExpressionStatement","src":"1090:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1063:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1071:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1059:3:181"},"nodeType":"YulFunctionCall","src":"1059:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1076:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1055:3:181"},"nodeType":"YulFunctionCall","src":"1055:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"1083:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1052:2:181"},"nodeType":"YulFunctionCall","src":"1052:35:181"},"nodeType":"YulIf","src":"1049:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1130:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1138:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1126:3:181"},"nodeType":"YulFunctionCall","src":"1126:17:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1149:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1157:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1145:3:181"},"nodeType":"YulFunctionCall","src":"1145:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1164:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1113:12:181"},"nodeType":"YulFunctionCall","src":"1113:54:181"},"nodeType":"YulExpressionStatement","src":"1113:54:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1191:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1199:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1187:3:181"},"nodeType":"YulFunctionCall","src":"1187:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1204:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1183:3:181"},"nodeType":"YulFunctionCall","src":"1183:26:181"},{"kind":"number","nodeType":"YulLiteral","src":"1211:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1176:6:181"},"nodeType":"YulFunctionCall","src":"1176:37:181"},"nodeType":"YulExpressionStatement","src":"1176:37:181"},{"nodeType":"YulAssignment","src":"1222:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1231:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1222:5:181"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"551:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"559:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"567:5:181","type":""}],"src":"525:718:181"},{"body":{"nodeType":"YulBlock","src":"1353:434:181","statements":[{"body":{"nodeType":"YulBlock","src":"1399:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1408:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1411:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1401:6:181"},"nodeType":"YulFunctionCall","src":"1401:12:181"},"nodeType":"YulExpressionStatement","src":"1401:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1374:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1383:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1370:3:181"},"nodeType":"YulFunctionCall","src":"1370:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1395:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1366:3:181"},"nodeType":"YulFunctionCall","src":"1366:32:181"},"nodeType":"YulIf","src":"1363:52:181"},{"nodeType":"YulVariableDeclaration","src":"1424:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1451:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1438:12:181"},"nodeType":"YulFunctionCall","src":"1438:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1428:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1470:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1480:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1474:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1525:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1534:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1537:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1527:6:181"},"nodeType":"YulFunctionCall","src":"1527:12:181"},"nodeType":"YulExpressionStatement","src":"1527:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1513:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1521:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1510:2:181"},"nodeType":"YulFunctionCall","src":"1510:14:181"},"nodeType":"YulIf","src":"1507:34:181"},{"nodeType":"YulAssignment","src":"1550:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1581:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1592:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1577:3:181"},"nodeType":"YulFunctionCall","src":"1577:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1601:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"1560:16:181"},"nodeType":"YulFunctionCall","src":"1560:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1550:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1618:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1651:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1662:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1647:3:181"},"nodeType":"YulFunctionCall","src":"1647:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1634:12:181"},"nodeType":"YulFunctionCall","src":"1634:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"1622:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1695:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1704:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1707:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1697:6:181"},"nodeType":"YulFunctionCall","src":"1697:12:181"},"nodeType":"YulExpressionStatement","src":"1697:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"1681:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1691:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1678:2:181"},"nodeType":"YulFunctionCall","src":"1678:16:181"},"nodeType":"YulIf","src":"1675:36:181"},{"nodeType":"YulAssignment","src":"1720:61:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1751:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"1762:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1747:3:181"},"nodeType":"YulFunctionCall","src":"1747:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1773:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"1730:16:181"},"nodeType":"YulFunctionCall","src":"1730:51:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1720:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1311:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1322:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1334:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1342:6:181","type":""}],"src":"1248:539:181"},{"body":{"nodeType":"YulBlock","src":"1871:241:181","statements":[{"body":{"nodeType":"YulBlock","src":"1917:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1926:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1929:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1919:6:181"},"nodeType":"YulFunctionCall","src":"1919:12:181"},"nodeType":"YulExpressionStatement","src":"1919:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1892:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1901:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1888:3:181"},"nodeType":"YulFunctionCall","src":"1888:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1913:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1884:3:181"},"nodeType":"YulFunctionCall","src":"1884:32:181"},"nodeType":"YulIf","src":"1881:52:181"},{"nodeType":"YulVariableDeclaration","src":"1942:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1969:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1956:12:181"},"nodeType":"YulFunctionCall","src":"1956:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1946:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2022:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2031:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2034:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2024:6:181"},"nodeType":"YulFunctionCall","src":"2024:12:181"},"nodeType":"YulExpressionStatement","src":"2024:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1994:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2002:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1991:2:181"},"nodeType":"YulFunctionCall","src":"1991:30:181"},"nodeType":"YulIf","src":"1988:50:181"},{"nodeType":"YulAssignment","src":"2047:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2078:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"2089:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2074:3:181"},"nodeType":"YulFunctionCall","src":"2074:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2098:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"2057:16:181"},"nodeType":"YulFunctionCall","src":"2057:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2047:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1837:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1848:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1860:6:181","type":""}],"src":"1792:320:181"},{"body":{"nodeType":"YulBlock","src":"2187:216:181","statements":[{"body":{"nodeType":"YulBlock","src":"2233:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2242:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2245:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2235:6:181"},"nodeType":"YulFunctionCall","src":"2235:12:181"},"nodeType":"YulExpressionStatement","src":"2235:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2208:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2217:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2204:3:181"},"nodeType":"YulFunctionCall","src":"2204:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2229:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2200:3:181"},"nodeType":"YulFunctionCall","src":"2200:32:181"},"nodeType":"YulIf","src":"2197:52:181"},{"nodeType":"YulVariableDeclaration","src":"2258:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2284:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2271:12:181"},"nodeType":"YulFunctionCall","src":"2271:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2262:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2357:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2366:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2369:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2359:6:181"},"nodeType":"YulFunctionCall","src":"2359:12:181"},"nodeType":"YulExpressionStatement","src":"2359:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2316:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2327:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2342:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2347:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2338:3:181"},"nodeType":"YulFunctionCall","src":"2338:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2351:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2334:3:181"},"nodeType":"YulFunctionCall","src":"2334:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2323:3:181"},"nodeType":"YulFunctionCall","src":"2323:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2313:2:181"},"nodeType":"YulFunctionCall","src":"2313:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2306:6:181"},"nodeType":"YulFunctionCall","src":"2306:50:181"},"nodeType":"YulIf","src":"2303:70:181"},{"nodeType":"YulAssignment","src":"2382:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"2392:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2382:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2153:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2164:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2176:6:181","type":""}],"src":"2117:286:181"},{"body":{"nodeType":"YulBlock","src":"2509:102:181","statements":[{"nodeType":"YulAssignment","src":"2519:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2531:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2542:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2527:3:181"},"nodeType":"YulFunctionCall","src":"2527:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2519:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2561:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2576:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2592:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2597:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2588:3:181"},"nodeType":"YulFunctionCall","src":"2588:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2601:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2584:3:181"},"nodeType":"YulFunctionCall","src":"2584:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2572:3:181"},"nodeType":"YulFunctionCall","src":"2572:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2554:6:181"},"nodeType":"YulFunctionCall","src":"2554:51:181"},"nodeType":"YulExpressionStatement","src":"2554:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2478:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2489:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2500:4:181","type":""}],"src":"2408:203:181"},{"body":{"nodeType":"YulBlock","src":"2686:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"2732:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2741:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2744:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2734:6:181"},"nodeType":"YulFunctionCall","src":"2734:12:181"},"nodeType":"YulExpressionStatement","src":"2734:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2707:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2716:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2703:3:181"},"nodeType":"YulFunctionCall","src":"2703:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2728:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2699:3:181"},"nodeType":"YulFunctionCall","src":"2699:32:181"},"nodeType":"YulIf","src":"2696:52:181"},{"nodeType":"YulAssignment","src":"2757:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2780:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2767:12:181"},"nodeType":"YulFunctionCall","src":"2767:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2757:6:181"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2652:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2663:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2675:6:181","type":""}],"src":"2616:180:181"},{"body":{"nodeType":"YulBlock","src":"2871:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"2917:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2926:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2929:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2919:6:181"},"nodeType":"YulFunctionCall","src":"2919:12:181"},"nodeType":"YulExpressionStatement","src":"2919:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2892:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2901:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2888:3:181"},"nodeType":"YulFunctionCall","src":"2888:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2913:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2884:3:181"},"nodeType":"YulFunctionCall","src":"2884:32:181"},"nodeType":"YulIf","src":"2881:52:181"},{"nodeType":"YulAssignment","src":"2942:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2965:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2952:12:181"},"nodeType":"YulFunctionCall","src":"2952:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2942:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2837:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2848:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2860:6:181","type":""}],"src":"2801:180:181"},{"body":{"nodeType":"YulBlock","src":"3081:92:181","statements":[{"nodeType":"YulAssignment","src":"3091:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3103:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3114:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3099:3:181"},"nodeType":"YulFunctionCall","src":"3099:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3091:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3133:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3158:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3151:6:181"},"nodeType":"YulFunctionCall","src":"3151:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3144:6:181"},"nodeType":"YulFunctionCall","src":"3144:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3126:6:181"},"nodeType":"YulFunctionCall","src":"3126:41:181"},"nodeType":"YulExpressionStatement","src":"3126:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3050:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3061:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3072:4:181","type":""}],"src":"2986:187:181"},{"body":{"nodeType":"YulBlock","src":"3250:275:181","statements":[{"body":{"nodeType":"YulBlock","src":"3299:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3308:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3311:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3301:6:181"},"nodeType":"YulFunctionCall","src":"3301:12:181"},"nodeType":"YulExpressionStatement","src":"3301:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3278:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3286:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3274:3:181"},"nodeType":"YulFunctionCall","src":"3274:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"3293:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3270:3:181"},"nodeType":"YulFunctionCall","src":"3270:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3263:6:181"},"nodeType":"YulFunctionCall","src":"3263:35:181"},"nodeType":"YulIf","src":"3260:55:181"},{"nodeType":"YulAssignment","src":"3324:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3347:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3334:12:181"},"nodeType":"YulFunctionCall","src":"3334:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3324:6:181"}]},{"body":{"nodeType":"YulBlock","src":"3397:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3406:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3409:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3399:6:181"},"nodeType":"YulFunctionCall","src":"3399:12:181"},"nodeType":"YulExpressionStatement","src":"3399:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3369:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3377:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3366:2:181"},"nodeType":"YulFunctionCall","src":"3366:30:181"},"nodeType":"YulIf","src":"3363:50:181"},{"nodeType":"YulAssignment","src":"3422:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3438:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3446:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3434:3:181"},"nodeType":"YulFunctionCall","src":"3434:17:181"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"3422:8:181"}]},{"body":{"nodeType":"YulBlock","src":"3503:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3512:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3515:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3505:6:181"},"nodeType":"YulFunctionCall","src":"3505:12:181"},"nodeType":"YulExpressionStatement","src":"3505:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3474:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"3482:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3470:3:181"},"nodeType":"YulFunctionCall","src":"3470:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"3491:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3466:3:181"},"nodeType":"YulFunctionCall","src":"3466:30:181"},{"name":"end","nodeType":"YulIdentifier","src":"3498:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3463:2:181"},"nodeType":"YulFunctionCall","src":"3463:39:181"},"nodeType":"YulIf","src":"3460:59:181"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3213:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"3221:3:181","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"3229:8:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"3239:6:181","type":""}],"src":"3178:347:181"},{"body":{"nodeType":"YulBlock","src":"3614:283:181","statements":[{"body":{"nodeType":"YulBlock","src":"3663:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3672:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3675:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3665:6:181"},"nodeType":"YulFunctionCall","src":"3665:12:181"},"nodeType":"YulExpressionStatement","src":"3665:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3642:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3650:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3638:3:181"},"nodeType":"YulFunctionCall","src":"3638:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"3657:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3634:3:181"},"nodeType":"YulFunctionCall","src":"3634:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3627:6:181"},"nodeType":"YulFunctionCall","src":"3627:35:181"},"nodeType":"YulIf","src":"3624:55:181"},{"nodeType":"YulAssignment","src":"3688:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3711:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3698:12:181"},"nodeType":"YulFunctionCall","src":"3698:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3688:6:181"}]},{"body":{"nodeType":"YulBlock","src":"3761:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3770:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3773:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3763:6:181"},"nodeType":"YulFunctionCall","src":"3763:12:181"},"nodeType":"YulExpressionStatement","src":"3763:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3733:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3741:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3730:2:181"},"nodeType":"YulFunctionCall","src":"3730:30:181"},"nodeType":"YulIf","src":"3727:50:181"},{"nodeType":"YulAssignment","src":"3786:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3802:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3810:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3798:3:181"},"nodeType":"YulFunctionCall","src":"3798:17:181"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"3786:8:181"}]},{"body":{"nodeType":"YulBlock","src":"3875:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3884:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3887:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3877:6:181"},"nodeType":"YulFunctionCall","src":"3877:12:181"},"nodeType":"YulExpressionStatement","src":"3877:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3838:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3850:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"3853:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3846:3:181"},"nodeType":"YulFunctionCall","src":"3846:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3834:3:181"},"nodeType":"YulFunctionCall","src":"3834:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"3863:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3830:3:181"},"nodeType":"YulFunctionCall","src":"3830:38:181"},{"name":"end","nodeType":"YulIdentifier","src":"3870:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3827:2:181"},"nodeType":"YulFunctionCall","src":"3827:47:181"},"nodeType":"YulIf","src":"3824:67:181"}]},"name":"abi_decode_array_bytes32_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3577:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"3585:3:181","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"3593:8:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"3603:6:181","type":""}],"src":"3530:367:181"},{"body":{"nodeType":"YulBlock","src":"4092:957:181","statements":[{"body":{"nodeType":"YulBlock","src":"4139:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4148:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4151:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4141:6:181"},"nodeType":"YulFunctionCall","src":"4141:12:181"},"nodeType":"YulExpressionStatement","src":"4141:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4113:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"4122:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4109:3:181"},"nodeType":"YulFunctionCall","src":"4109:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"4134:3:181","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4105:3:181"},"nodeType":"YulFunctionCall","src":"4105:33:181"},"nodeType":"YulIf","src":"4102:53:181"},{"nodeType":"YulVariableDeclaration","src":"4164:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4190:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4177:12:181"},"nodeType":"YulFunctionCall","src":"4177:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4168:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4254:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4263:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4266:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4256:6:181"},"nodeType":"YulFunctionCall","src":"4256:12:181"},"nodeType":"YulExpressionStatement","src":"4256:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4222:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4233:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"4240:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4229:3:181"},"nodeType":"YulFunctionCall","src":"4229:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4219:2:181"},"nodeType":"YulFunctionCall","src":"4219:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4212:6:181"},"nodeType":"YulFunctionCall","src":"4212:41:181"},"nodeType":"YulIf","src":"4209:61:181"},{"nodeType":"YulAssignment","src":"4279:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"4289:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4279:6:181"}]},{"nodeType":"YulAssignment","src":"4303:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4330:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4341:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4326:3:181"},"nodeType":"YulFunctionCall","src":"4326:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4313:12:181"},"nodeType":"YulFunctionCall","src":"4313:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4303:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"4354:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4386:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4397:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4382:3:181"},"nodeType":"YulFunctionCall","src":"4382:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4369:12:181"},"nodeType":"YulFunctionCall","src":"4369:32:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4358:7:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4455:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4464:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4467:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4457:6:181"},"nodeType":"YulFunctionCall","src":"4457:12:181"},"nodeType":"YulExpressionStatement","src":"4457:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4423:7:181"},{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4436:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"4445:6:181","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4432:3:181"},"nodeType":"YulFunctionCall","src":"4432:20:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4420:2:181"},"nodeType":"YulFunctionCall","src":"4420:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4413:6:181"},"nodeType":"YulFunctionCall","src":"4413:41:181"},"nodeType":"YulIf","src":"4410:61:181"},{"nodeType":"YulAssignment","src":"4480:17:181","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4490:7:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4480:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"4506:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4537:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4548:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4533:3:181"},"nodeType":"YulFunctionCall","src":"4533:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4520:12:181"},"nodeType":"YulFunctionCall","src":"4520:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"4510:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4561:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"4571:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4565:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4616:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4625:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4628:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4618:6:181"},"nodeType":"YulFunctionCall","src":"4618:12:181"},"nodeType":"YulExpressionStatement","src":"4618:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4604:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4612:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4601:2:181"},"nodeType":"YulFunctionCall","src":"4601:14:181"},"nodeType":"YulIf","src":"4598:34:181"},{"nodeType":"YulVariableDeclaration","src":"4641:84:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4697:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"4708:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4693:3:181"},"nodeType":"YulFunctionCall","src":"4693:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4717:7:181"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"4667:25:181"},"nodeType":"YulFunctionCall","src":"4667:58:181"},"variables":[{"name":"value3_1","nodeType":"YulTypedName","src":"4645:8:181","type":""},{"name":"value4_1","nodeType":"YulTypedName","src":"4655:8:181","type":""}]},{"nodeType":"YulAssignment","src":"4734:18:181","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"4744:8:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4734:6:181"}]},{"nodeType":"YulAssignment","src":"4761:18:181","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"4771:8:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"4761:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"4788:49:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4821:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4832:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4817:3:181"},"nodeType":"YulFunctionCall","src":"4817:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4804:12:181"},"nodeType":"YulFunctionCall","src":"4804:33:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"4792:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4866:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4875:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4878:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4868:6:181"},"nodeType":"YulFunctionCall","src":"4868:12:181"},"nodeType":"YulExpressionStatement","src":"4868:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"4852:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"4862:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4849:2:181"},"nodeType":"YulFunctionCall","src":"4849:16:181"},"nodeType":"YulIf","src":"4846:36:181"},{"nodeType":"YulVariableDeclaration","src":"4891:98:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4959:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"4970:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4955:3:181"},"nodeType":"YulFunctionCall","src":"4955:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4981:7:181"}],"functionName":{"name":"abi_decode_array_bytes32_dyn_calldata","nodeType":"YulIdentifier","src":"4917:37:181"},"nodeType":"YulFunctionCall","src":"4917:72:181"},"variables":[{"name":"value5_1","nodeType":"YulTypedName","src":"4895:8:181","type":""},{"name":"value6_1","nodeType":"YulTypedName","src":"4905:8:181","type":""}]},{"nodeType":"YulAssignment","src":"4998:18:181","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"5008:8:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"4998:6:181"}]},{"nodeType":"YulAssignment","src":"5025:18:181","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"5035:8:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"5025:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_uint256t_uint16t_bytes_calldata_ptrt_array$_t_bytes32_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4010:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4021:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4033:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4041:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4049:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4057:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"4065:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"4073:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"4081:6:181","type":""}],"src":"3902:1147:181"},{"body":{"nodeType":"YulBlock","src":"5228:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5245:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5256:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5238:6:181"},"nodeType":"YulFunctionCall","src":"5238:21:181"},"nodeType":"YulExpressionStatement","src":"5238:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5279:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5290:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5275:3:181"},"nodeType":"YulFunctionCall","src":"5275:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"5295:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5268:6:181"},"nodeType":"YulFunctionCall","src":"5268:30:181"},"nodeType":"YulExpressionStatement","src":"5268:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5318:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5329:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5314:3:181"},"nodeType":"YulFunctionCall","src":"5314:18:181"},{"hexValue":"21726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"5334:14:181","type":"","value":"!rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5307:6:181"},"nodeType":"YulFunctionCall","src":"5307:42:181"},"nodeType":"YulExpressionStatement","src":"5307:42:181"},{"nodeType":"YulAssignment","src":"5358:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5370:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5381:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5366:3:181"},"nodeType":"YulFunctionCall","src":"5366:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5358:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5205:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5219:4:181","type":""}],"src":"5054:336:181"},{"body":{"nodeType":"YulBlock","src":"5444:373:181","statements":[{"nodeType":"YulVariableDeclaration","src":"5454:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5474:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5468:5:181"},"nodeType":"YulFunctionCall","src":"5468:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"5458:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5496:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"5501:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5489:6:181"},"nodeType":"YulFunctionCall","src":"5489:19:181"},"nodeType":"YulExpressionStatement","src":"5489:19:181"},{"nodeType":"YulVariableDeclaration","src":"5517:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"5526:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"5521:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5588:110:181","statements":[{"nodeType":"YulVariableDeclaration","src":"5602:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"5612:4:181","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5606:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5644:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"5649:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5640:3:181"},"nodeType":"YulFunctionCall","src":"5640:11:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5653:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5636:3:181"},"nodeType":"YulFunctionCall","src":"5636:20:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5672:5:181"},{"name":"i","nodeType":"YulIdentifier","src":"5679:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5668:3:181"},"nodeType":"YulFunctionCall","src":"5668:13:181"},{"name":"_1","nodeType":"YulIdentifier","src":"5683:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5664:3:181"},"nodeType":"YulFunctionCall","src":"5664:22:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5658:5:181"},"nodeType":"YulFunctionCall","src":"5658:29:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5629:6:181"},"nodeType":"YulFunctionCall","src":"5629:59:181"},"nodeType":"YulExpressionStatement","src":"5629:59:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5547:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"5550:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5544:2:181"},"nodeType":"YulFunctionCall","src":"5544:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5558:21:181","statements":[{"nodeType":"YulAssignment","src":"5560:17:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5569:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"5572:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5565:3:181"},"nodeType":"YulFunctionCall","src":"5565:12:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"5560:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"5540:3:181","statements":[]},"src":"5536:162:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5722:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"5727:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5718:3:181"},"nodeType":"YulFunctionCall","src":"5718:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"5736:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5714:3:181"},"nodeType":"YulFunctionCall","src":"5714:27:181"},{"kind":"number","nodeType":"YulLiteral","src":"5743:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5707:6:181"},"nodeType":"YulFunctionCall","src":"5707:38:181"},"nodeType":"YulExpressionStatement","src":"5707:38:181"},{"nodeType":"YulAssignment","src":"5754:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5769:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"5782:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5790:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5778:3:181"},"nodeType":"YulFunctionCall","src":"5778:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5799:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"5795:3:181"},"nodeType":"YulFunctionCall","src":"5795:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5774:3:181"},"nodeType":"YulFunctionCall","src":"5774:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5765:3:181"},"nodeType":"YulFunctionCall","src":"5765:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"5806:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5761:3:181"},"nodeType":"YulFunctionCall","src":"5761:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"5754:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5421:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5428:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"5436:3:181","type":""}],"src":"5395:422:181"},{"body":{"nodeType":"YulBlock","src":"6015:281:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6032:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6043:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6025:6:181"},"nodeType":"YulFunctionCall","src":"6025:21:181"},"nodeType":"YulExpressionStatement","src":"6025:21:181"},{"nodeType":"YulVariableDeclaration","src":"6055:58:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6086:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6098:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6109:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6094:3:181"},"nodeType":"YulFunctionCall","src":"6094:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"6069:16:181"},"nodeType":"YulFunctionCall","src":"6069:44:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"6059:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6133:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6144:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6129:3:181"},"nodeType":"YulFunctionCall","src":"6129:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"6153:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"6161:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6149:3:181"},"nodeType":"YulFunctionCall","src":"6149:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6122:6:181"},"nodeType":"YulFunctionCall","src":"6122:50:181"},"nodeType":"YulExpressionStatement","src":"6122:50:181"},{"nodeType":"YulAssignment","src":"6181:40:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6206:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"6214:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"6189:16:181"},"nodeType":"YulFunctionCall","src":"6189:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6181:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6241:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6252:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6237:3:181"},"nodeType":"YulFunctionCall","src":"6237:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"6261:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6277:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6282:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6273:3:181"},"nodeType":"YulFunctionCall","src":"6273:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"6286:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6269:3:181"},"nodeType":"YulFunctionCall","src":"6269:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6257:3:181"},"nodeType":"YulFunctionCall","src":"6257:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6230:6:181"},"nodeType":"YulFunctionCall","src":"6230:60:181"},"nodeType":"YulExpressionStatement","src":"6230:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5968:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5979:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5987:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5995:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6006:4:181","type":""}],"src":"5822:474:181"},{"body":{"nodeType":"YulBlock","src":"6475:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6492:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6503:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6485:6:181"},"nodeType":"YulFunctionCall","src":"6485:21:181"},"nodeType":"YulExpressionStatement","src":"6485:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6526:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6537:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6522:3:181"},"nodeType":"YulFunctionCall","src":"6522:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6542:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6515:6:181"},"nodeType":"YulFunctionCall","src":"6515:29:181"},"nodeType":"YulExpressionStatement","src":"6515:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6564:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6575:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6560:3:181"},"nodeType":"YulFunctionCall","src":"6560:18:181"},{"hexValue":"21414d42","kind":"string","nodeType":"YulLiteral","src":"6580:6:181","type":"","value":"!AMB"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6553:6:181"},"nodeType":"YulFunctionCall","src":"6553:34:181"},"nodeType":"YulExpressionStatement","src":"6553:34:181"},{"nodeType":"YulAssignment","src":"6596:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6608:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6619:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6604:3:181"},"nodeType":"YulFunctionCall","src":"6604:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6596:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6452:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6466:4:181","type":""}],"src":"6301:327:181"},{"body":{"nodeType":"YulBlock","src":"6780:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6797:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6808:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6790:6:181"},"nodeType":"YulFunctionCall","src":"6790:21:181"},"nodeType":"YulExpressionStatement","src":"6790:21:181"},{"nodeType":"YulAssignment","src":"6820:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6845:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6857:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6868:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6853:3:181"},"nodeType":"YulFunctionCall","src":"6853:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"6828:16:181"},"nodeType":"YulFunctionCall","src":"6828:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6820:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6892:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6903:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6888:3:181"},"nodeType":"YulFunctionCall","src":"6888:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6912:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6928:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"6933:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6924:3:181"},"nodeType":"YulFunctionCall","src":"6924:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"6937:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6920:3:181"},"nodeType":"YulFunctionCall","src":"6920:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6908:3:181"},"nodeType":"YulFunctionCall","src":"6908:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6881:6:181"},"nodeType":"YulFunctionCall","src":"6881:60:181"},"nodeType":"YulExpressionStatement","src":"6881:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6741:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6752:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6760:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6771:4:181","type":""}],"src":"6633:314:181"},{"body":{"nodeType":"YulBlock","src":"7001:176:181","statements":[{"nodeType":"YulAssignment","src":"7011:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7023:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"7026:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7019:3:181"},"nodeType":"YulFunctionCall","src":"7019:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"7011:4:181"}]},{"body":{"nodeType":"YulBlock","src":"7060:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7081:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7088:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"7093:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7084:3:181"},"nodeType":"YulFunctionCall","src":"7084:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7074:6:181"},"nodeType":"YulFunctionCall","src":"7074:31:181"},"nodeType":"YulExpressionStatement","src":"7074:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7125:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7128:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7118:6:181"},"nodeType":"YulFunctionCall","src":"7118:15:181"},"nodeType":"YulExpressionStatement","src":"7118:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7153:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7156:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7146:6:181"},"nodeType":"YulFunctionCall","src":"7146:15:181"},"nodeType":"YulExpressionStatement","src":"7146:15:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"7043:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"7049:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7040:2:181"},"nodeType":"YulFunctionCall","src":"7040:11:181"},"nodeType":"YulIf","src":"7037:134:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"6983:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"6986:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"6992:4:181","type":""}],"src":"6952:225:181"},{"body":{"nodeType":"YulBlock","src":"7356:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7373:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7384:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7366:6:181"},"nodeType":"YulFunctionCall","src":"7366:21:181"},"nodeType":"YulExpressionStatement","src":"7366:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7407:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7418:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7403:3:181"},"nodeType":"YulFunctionCall","src":"7403:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7423:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7396:6:181"},"nodeType":"YulFunctionCall","src":"7396:29:181"},"nodeType":"YulExpressionStatement","src":"7396:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7445:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7456:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7441:3:181"},"nodeType":"YulFunctionCall","src":"7441:18:181"},{"hexValue":"216c656e677468","kind":"string","nodeType":"YulLiteral","src":"7461:9:181","type":"","value":"!length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7434:6:181"},"nodeType":"YulFunctionCall","src":"7434:37:181"},"nodeType":"YulExpressionStatement","src":"7434:37:181"},{"nodeType":"YulAssignment","src":"7480:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7492:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7503:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7488:3:181"},"nodeType":"YulFunctionCall","src":"7488:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7480:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7333:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7347:4:181","type":""}],"src":"7182:330:181"},{"body":{"nodeType":"YulBlock","src":"7815:731:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7832:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7847:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"7855:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7843:3:181"},"nodeType":"YulFunctionCall","src":"7843:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7825:6:181"},"nodeType":"YulFunctionCall","src":"7825:42:181"},"nodeType":"YulExpressionStatement","src":"7825:42:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7887:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7898:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7883:3:181"},"nodeType":"YulFunctionCall","src":"7883:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"7903:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7876:6:181"},"nodeType":"YulFunctionCall","src":"7876:34:181"},"nodeType":"YulExpressionStatement","src":"7876:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7930:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7941:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7926:3:181"},"nodeType":"YulFunctionCall","src":"7926:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7946:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7919:6:181"},"nodeType":"YulFunctionCall","src":"7919:31:181"},"nodeType":"YulExpressionStatement","src":"7919:31:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7970:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7981:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7966:3:181"},"nodeType":"YulFunctionCall","src":"7966:19:181"},{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"7997:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7991:5:181"},"nodeType":"YulFunctionCall","src":"7991:13:181"},{"kind":"number","nodeType":"YulLiteral","src":"8006:6:181","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7987:3:181"},"nodeType":"YulFunctionCall","src":"7987:26:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7959:6:181"},"nodeType":"YulFunctionCall","src":"7959:55:181"},"nodeType":"YulExpressionStatement","src":"7959:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8034:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8045:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8030:3:181"},"nodeType":"YulFunctionCall","src":"8030:19:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"8065:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8073:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8061:3:181"},"nodeType":"YulFunctionCall","src":"8061:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8055:5:181"},"nodeType":"YulFunctionCall","src":"8055:22:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8087:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"8092:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8083:3:181"},"nodeType":"YulFunctionCall","src":"8083:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"8096:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8079:3:181"},"nodeType":"YulFunctionCall","src":"8079:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8051:3:181"},"nodeType":"YulFunctionCall","src":"8051:48:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8023:6:181"},"nodeType":"YulFunctionCall","src":"8023:77:181"},"nodeType":"YulExpressionStatement","src":"8023:77:181"},{"nodeType":"YulVariableDeclaration","src":"8109:42:181","value":{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"8139:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"8147:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8135:3:181"},"nodeType":"YulFunctionCall","src":"8135:15:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8129:5:181"},"nodeType":"YulFunctionCall","src":"8129:22:181"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"8113:12:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8171:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8182:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8167:3:181"},"nodeType":"YulFunctionCall","src":"8167:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"8188:4:181","type":"","value":"0x60"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8160:6:181"},"nodeType":"YulFunctionCall","src":"8160:33:181"},"nodeType":"YulExpressionStatement","src":"8160:33:181"},{"nodeType":"YulVariableDeclaration","src":"8202:62:181","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"8230:12:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8248:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8259:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8244:3:181"},"nodeType":"YulFunctionCall","src":"8244:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"8213:16:181"},"nodeType":"YulFunctionCall","src":"8213:51:181"},"variables":[{"name":"end","nodeType":"YulTypedName","src":"8206:3:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8284:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8295:4:181","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8280:3:181"},"nodeType":"YulFunctionCall","src":"8280:20:181"},{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"8306:3:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8311:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8302:3:181"},"nodeType":"YulFunctionCall","src":"8302:19:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8273:6:181"},"nodeType":"YulFunctionCall","src":"8273:49:181"},"nodeType":"YulExpressionStatement","src":"8273:49:181"},{"expression":{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"8338:3:181"},{"name":"value4","nodeType":"YulIdentifier","src":"8343:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8331:6:181"},"nodeType":"YulFunctionCall","src":"8331:19:181"},"nodeType":"YulExpressionStatement","src":"8331:19:181"},{"body":{"nodeType":"YulBlock","src":"8394:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8403:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8406:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8396:6:181"},"nodeType":"YulFunctionCall","src":"8396:12:181"},"nodeType":"YulExpressionStatement","src":"8396:12:181"}]},"condition":{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"8365:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8381:3:181","type":"","value":"251"},{"kind":"number","nodeType":"YulLiteral","src":"8386:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8377:3:181"},"nodeType":"YulFunctionCall","src":"8377:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"8390:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8373:3:181"},"nodeType":"YulFunctionCall","src":"8373:19:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8362:2:181"},"nodeType":"YulFunctionCall","src":"8362:31:181"},"nodeType":"YulIf","src":"8359:51:181"},{"nodeType":"YulVariableDeclaration","src":"8419:28:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8437:1:181","type":"","value":"5"},{"name":"value4","nodeType":"YulIdentifier","src":"8440:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8433:3:181"},"nodeType":"YulFunctionCall","src":"8433:14:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"8423:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"8473:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"8478:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8469:3:181"},"nodeType":"YulFunctionCall","src":"8469:12:181"},{"name":"value3","nodeType":"YulIdentifier","src":"8483:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"8491:6:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"8456:12:181"},"nodeType":"YulFunctionCall","src":"8456:42:181"},"nodeType":"YulExpressionStatement","src":"8456:42:181"},{"nodeType":"YulAssignment","src":"8507:33:181","value":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"8523:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"8528:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8519:3:181"},"nodeType":"YulFunctionCall","src":"8519:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"8537:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8515:3:181"},"nodeType":"YulFunctionCall","src":"8515:25:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8507:4:181"}]}]},"name":"abi_encode_tuple_t_uint32_t_uint256_t_struct$_L2Message_$3776_memory_ptr_t_array$_t_bytes32_$dyn_calldata_ptr__to_t_uint256_t_uint256_t_struct$_L2Message_$3776_memory_ptr_t_array$_t_bytes32_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7752:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"7763:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7771:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7779:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7787:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7795:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7806:4:181","type":""}],"src":"7517:1029:181"},{"body":{"nodeType":"YulBlock","src":"8629:199:181","statements":[{"body":{"nodeType":"YulBlock","src":"8675:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8684:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8687:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8677:6:181"},"nodeType":"YulFunctionCall","src":"8677:12:181"},"nodeType":"YulExpressionStatement","src":"8677:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8650:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8659:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8646:3:181"},"nodeType":"YulFunctionCall","src":"8646:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"8671:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8642:3:181"},"nodeType":"YulFunctionCall","src":"8642:32:181"},"nodeType":"YulIf","src":"8639:52:181"},{"nodeType":"YulVariableDeclaration","src":"8700:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8719:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8713:5:181"},"nodeType":"YulFunctionCall","src":"8713:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8704:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"8782:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8791:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8794:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8784:6:181"},"nodeType":"YulFunctionCall","src":"8784:12:181"},"nodeType":"YulExpressionStatement","src":"8784:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8751:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8772:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8765:6:181"},"nodeType":"YulFunctionCall","src":"8765:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8758:6:181"},"nodeType":"YulFunctionCall","src":"8758:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8748:2:181"},"nodeType":"YulFunctionCall","src":"8748:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8741:6:181"},"nodeType":"YulFunctionCall","src":"8741:40:181"},"nodeType":"YulIf","src":"8738:60:181"},{"nodeType":"YulAssignment","src":"8807:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"8817:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8807:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8595:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8606:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8618:6:181","type":""}],"src":"8551:277:181"},{"body":{"nodeType":"YulBlock","src":"9007:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9024:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9035:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9017:6:181"},"nodeType":"YulFunctionCall","src":"9017:21:181"},"nodeType":"YulExpressionStatement","src":"9017:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9058:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9069:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9054:3:181"},"nodeType":"YulFunctionCall","src":"9054:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9074:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9047:6:181"},"nodeType":"YulFunctionCall","src":"9047:29:181"},"nodeType":"YulExpressionStatement","src":"9047:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9096:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9107:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9092:3:181"},"nodeType":"YulFunctionCall","src":"9092:18:181"},{"hexValue":"2170726f76656e","kind":"string","nodeType":"YulLiteral","src":"9112:9:181","type":"","value":"!proven"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9085:6:181"},"nodeType":"YulFunctionCall","src":"9085:37:181"},"nodeType":"YulExpressionStatement","src":"9085:37:181"},{"nodeType":"YulAssignment","src":"9131:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9143:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9154:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9139:3:181"},"nodeType":"YulFunctionCall","src":"9139:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9131:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8984:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8998:4:181","type":""}],"src":"8833:330:181"},{"body":{"nodeType":"YulBlock","src":"9269:154:181","statements":[{"nodeType":"YulAssignment","src":"9279:28:181","value":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"9301:5:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9288:12:181"},"nodeType":"YulFunctionCall","src":"9288:19:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"9279:5:181"}]},{"body":{"nodeType":"YulBlock","src":"9339:78:181","statements":[{"nodeType":"YulAssignment","src":"9353:54:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9366:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9381:1:181","type":"","value":"3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9388:2:181","type":"","value":"32"},{"name":"len","nodeType":"YulIdentifier","src":"9392:3:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9384:3:181"},"nodeType":"YulFunctionCall","src":"9384:12:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9377:3:181"},"nodeType":"YulFunctionCall","src":"9377:20:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9403:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"9399:3:181"},"nodeType":"YulFunctionCall","src":"9399:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9373:3:181"},"nodeType":"YulFunctionCall","src":"9373:33:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9362:3:181"},"nodeType":"YulFunctionCall","src":"9362:45:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"9353:5:181"}]}]},"condition":{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"9322:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"9327:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9319:2:181"},"nodeType":"YulFunctionCall","src":"9319:11:181"},"nodeType":"YulIf","src":"9316:101:181"}]},"name":"convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nodeType":"YulTypedName","src":"9244:5:181","type":""},{"name":"len","nodeType":"YulTypedName","src":"9251:3:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"9259:5:181","type":""}],"src":"9168:255:181"},{"body":{"nodeType":"YulBlock","src":"9555:136:181","statements":[{"nodeType":"YulAssignment","src":"9565:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9577:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9588:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9573:3:181"},"nodeType":"YulFunctionCall","src":"9573:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9565:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9607:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9622:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"9630:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9618:3:181"},"nodeType":"YulFunctionCall","src":"9618:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9600:6:181"},"nodeType":"YulFunctionCall","src":"9600:42:181"},"nodeType":"YulExpressionStatement","src":"9600:42:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9662:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9673:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9658:3:181"},"nodeType":"YulFunctionCall","src":"9658:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"9678:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9651:6:181"},"nodeType":"YulFunctionCall","src":"9651:34:181"},"nodeType":"YulExpressionStatement","src":"9651:34:181"}]},"name":"abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9516:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9527:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9535:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9546:4:181","type":""}],"src":"9428:263:181"},{"body":{"nodeType":"YulBlock","src":"9853:330:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9870:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9881:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9863:6:181"},"nodeType":"YulFunctionCall","src":"9863:21:181"},"nodeType":"YulExpressionStatement","src":"9863:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9904:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9915:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9900:3:181"},"nodeType":"YulFunctionCall","src":"9900:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"9920:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9893:6:181"},"nodeType":"YulFunctionCall","src":"9893:34:181"},"nodeType":"YulExpressionStatement","src":"9893:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9953:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9964:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9949:3:181"},"nodeType":"YulFunctionCall","src":"9949:18:181"},{"name":"value0","nodeType":"YulIdentifier","src":"9969:6:181"},{"name":"value1","nodeType":"YulIdentifier","src":"9977:6:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"9936:12:181"},"nodeType":"YulFunctionCall","src":"9936:48:181"},"nodeType":"YulExpressionStatement","src":"9936:48:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10008:9:181"},{"name":"value1","nodeType":"YulIdentifier","src":"10019:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10004:3:181"},"nodeType":"YulFunctionCall","src":"10004:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"10028:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10000:3:181"},"nodeType":"YulFunctionCall","src":"10000:31:181"},{"kind":"number","nodeType":"YulLiteral","src":"10033:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9993:6:181"},"nodeType":"YulFunctionCall","src":"9993:42:181"},"nodeType":"YulExpressionStatement","src":"9993:42:181"},{"nodeType":"YulAssignment","src":"10044:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10060:9:181"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10079:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10087:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10075:3:181"},"nodeType":"YulFunctionCall","src":"10075:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10096:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10092:3:181"},"nodeType":"YulFunctionCall","src":"10092:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10071:3:181"},"nodeType":"YulFunctionCall","src":"10071:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10056:3:181"},"nodeType":"YulFunctionCall","src":"10056:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"10103:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10052:3:181"},"nodeType":"YulFunctionCall","src":"10052:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10044:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10126:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10137:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10122:3:181"},"nodeType":"YulFunctionCall","src":"10122:20:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"10148:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10164:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"10169:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10160:3:181"},"nodeType":"YulFunctionCall","src":"10160:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"10173:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10156:3:181"},"nodeType":"YulFunctionCall","src":"10156:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10144:3:181"},"nodeType":"YulFunctionCall","src":"10144:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10115:6:181"},"nodeType":"YulFunctionCall","src":"10115:62:181"},"nodeType":"YulExpressionStatement","src":"10115:62:181"}]},"name":"abi_encode_tuple_t_bytes_calldata_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9806:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9817:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9825:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9833:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9844:4:181","type":""}],"src":"9696:487:181"},{"body":{"nodeType":"YulBlock","src":"10362:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10379:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10390:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10372:6:181"},"nodeType":"YulFunctionCall","src":"10372:21:181"},"nodeType":"YulExpressionStatement","src":"10372:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10413:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10424:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10409:3:181"},"nodeType":"YulFunctionCall","src":"10409:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10429:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10402:6:181"},"nodeType":"YulFunctionCall","src":"10402:30:181"},"nodeType":"YulExpressionStatement","src":"10402:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10452:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10463:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10448:3:181"},"nodeType":"YulFunctionCall","src":"10448:18:181"},{"hexValue":"2164617461206c656e677468","kind":"string","nodeType":"YulLiteral","src":"10468:14:181","type":"","value":"!data length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10441:6:181"},"nodeType":"YulFunctionCall","src":"10441:42:181"},"nodeType":"YulExpressionStatement","src":"10441:42:181"},{"nodeType":"YulAssignment","src":"10492:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10504:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10515:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10500:3:181"},"nodeType":"YulFunctionCall","src":"10500:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10492:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10339:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10353:4:181","type":""}],"src":"10188:336:181"},{"body":{"nodeType":"YulBlock","src":"10648:98:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10665:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10676:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10658:6:181"},"nodeType":"YulFunctionCall","src":"10658:21:181"},"nodeType":"YulExpressionStatement","src":"10658:21:181"},{"nodeType":"YulAssignment","src":"10688:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10713:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10725:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10736:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10721:3:181"},"nodeType":"YulFunctionCall","src":"10721:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"10696:16:181"},"nodeType":"YulFunctionCall","src":"10696:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10688:4:181"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10617:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10628:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10639:4:181","type":""}],"src":"10529:217:181"},{"body":{"nodeType":"YulBlock","src":"10832:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"10878:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10887:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10890:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10880:6:181"},"nodeType":"YulFunctionCall","src":"10880:12:181"},"nodeType":"YulExpressionStatement","src":"10880:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10853:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"10862:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10849:3:181"},"nodeType":"YulFunctionCall","src":"10849:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"10874:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10845:3:181"},"nodeType":"YulFunctionCall","src":"10845:32:181"},"nodeType":"YulIf","src":"10842:52:181"},{"nodeType":"YulAssignment","src":"10903:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10919:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10913:5:181"},"nodeType":"YulFunctionCall","src":"10913:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10903:6:181"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10798:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10809:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10821:6:181","type":""}],"src":"10751:184:181"},{"body":{"nodeType":"YulBlock","src":"11095:179:181","statements":[{"nodeType":"YulAssignment","src":"11105:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11117:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11128:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11113:3:181"},"nodeType":"YulFunctionCall","src":"11113:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11105:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11147:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"11158:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11140:6:181"},"nodeType":"YulFunctionCall","src":"11140:25:181"},"nodeType":"YulExpressionStatement","src":"11140:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11185:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11196:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11181:3:181"},"nodeType":"YulFunctionCall","src":"11181:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"11201:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11174:6:181"},"nodeType":"YulFunctionCall","src":"11174:34:181"},"nodeType":"YulExpressionStatement","src":"11174:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11228:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11239:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11224:3:181"},"nodeType":"YulFunctionCall","src":"11224:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"11248:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"11256:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11244:3:181"},"nodeType":"YulFunctionCall","src":"11244:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11217:6:181"},"nodeType":"YulFunctionCall","src":"11217:51:181"},"nodeType":"YulExpressionStatement","src":"11217:51:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint32__to_t_uint256_t_uint256_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11048:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11059:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11067:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11075:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11086:4:181","type":""}],"src":"10940:334:181"},{"body":{"nodeType":"YulBlock","src":"11453:154:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11470:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11481:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11463:6:181"},"nodeType":"YulFunctionCall","src":"11463:21:181"},"nodeType":"YulExpressionStatement","src":"11463:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11504:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11515:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11500:3:181"},"nodeType":"YulFunctionCall","src":"11500:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11520:1:181","type":"","value":"5"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11493:6:181"},"nodeType":"YulFunctionCall","src":"11493:29:181"},"nodeType":"YulExpressionStatement","src":"11493:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11542:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11553:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11538:3:181"},"nodeType":"YulFunctionCall","src":"11538:18:181"},{"hexValue":"2166656573","kind":"string","nodeType":"YulLiteral","src":"11558:7:181","type":"","value":"!fees"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11531:6:181"},"nodeType":"YulFunctionCall","src":"11531:35:181"},"nodeType":"YulExpressionStatement","src":"11531:35:181"},{"nodeType":"YulAssignment","src":"11575:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11587:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11598:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11583:3:181"},"nodeType":"YulFunctionCall","src":"11583:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11575:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_867777f634bb94108a594889ab4f827c256cf5677bbf34c222dbb2e03cd5a0d3__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11430:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11444:4:181","type":""}],"src":"11279:328:181"},{"body":{"nodeType":"YulBlock","src":"11919:865:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11936:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11951:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11967:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"11972:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11963:3:181"},"nodeType":"YulFunctionCall","src":"11963:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"11976:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11959:3:181"},"nodeType":"YulFunctionCall","src":"11959:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11947:3:181"},"nodeType":"YulFunctionCall","src":"11947:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11929:6:181"},"nodeType":"YulFunctionCall","src":"11929:51:181"},"nodeType":"YulExpressionStatement","src":"11929:51:181"},{"nodeType":"YulVariableDeclaration","src":"11989:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"11999:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11993:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12021:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12032:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12017:3:181"},"nodeType":"YulFunctionCall","src":"12017:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"12037:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12010:6:181"},"nodeType":"YulFunctionCall","src":"12010:34:181"},"nodeType":"YulExpressionStatement","src":"12010:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12064:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12075:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12060:3:181"},"nodeType":"YulFunctionCall","src":"12060:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12080:3:181","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12053:6:181"},"nodeType":"YulFunctionCall","src":"12053:31:181"},"nodeType":"YulExpressionStatement","src":"12053:31:181"},{"nodeType":"YulVariableDeclaration","src":"12093:59:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"12124:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12136:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12147:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12132:3:181"},"nodeType":"YulFunctionCall","src":"12132:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"12107:16:181"},"nodeType":"YulFunctionCall","src":"12107:45:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"12097:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12172:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12183:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12168:3:181"},"nodeType":"YulFunctionCall","src":"12168:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"12188:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12161:6:181"},"nodeType":"YulFunctionCall","src":"12161:34:181"},"nodeType":"YulExpressionStatement","src":"12161:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12215:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12226:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12211:3:181"},"nodeType":"YulFunctionCall","src":"12211:19:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"12236:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"12244:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12232:3:181"},"nodeType":"YulFunctionCall","src":"12232:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12204:6:181"},"nodeType":"YulFunctionCall","src":"12204:51:181"},"nodeType":"YulExpressionStatement","src":"12204:51:181"},{"nodeType":"YulVariableDeclaration","src":"12264:17:181","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"12275:6:181"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"12268:3:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12290:27:181","value":{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"12310:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12304:5:181"},"nodeType":"YulFunctionCall","src":"12304:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"12294:6:181","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"12333:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"12341:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12326:6:181"},"nodeType":"YulFunctionCall","src":"12326:22:181"},"nodeType":"YulExpressionStatement","src":"12326:22:181"},{"nodeType":"YulAssignment","src":"12357:22:181","value":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"12368:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12376:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12364:3:181"},"nodeType":"YulFunctionCall","src":"12364:15:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"12357:3:181"}]},{"nodeType":"YulVariableDeclaration","src":"12388:50:181","value":{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"12410:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12422:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"12425:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12418:3:181"},"nodeType":"YulFunctionCall","src":"12418:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12406:3:181"},"nodeType":"YulFunctionCall","src":"12406:27:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12435:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12402:3:181"},"nodeType":"YulFunctionCall","src":"12402:36:181"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"12392:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12447:29:181","value":{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"12465:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12473:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12461:3:181"},"nodeType":"YulFunctionCall","src":"12461:15:181"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"12451:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12485:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12494:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"12489:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"12553:202:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12574:3:181"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12587:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"12595:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12583:3:181"},"nodeType":"YulFunctionCall","src":"12583:19:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12608:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"12604:3:181"},"nodeType":"YulFunctionCall","src":"12604:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12579:3:181"},"nodeType":"YulFunctionCall","src":"12579:33:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12567:6:181"},"nodeType":"YulFunctionCall","src":"12567:46:181"},"nodeType":"YulExpressionStatement","src":"12567:46:181"},{"nodeType":"YulAssignment","src":"12626:49:181","value":{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"12659:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12653:5:181"},"nodeType":"YulFunctionCall","src":"12653:13:181"},{"name":"tail_2","nodeType":"YulIdentifier","src":"12668:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"12636:16:181"},"nodeType":"YulFunctionCall","src":"12636:39:181"},"variableNames":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12626:6:181"}]},{"nodeType":"YulAssignment","src":"12688:25:181","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"12702:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12710:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12698:3:181"},"nodeType":"YulFunctionCall","src":"12698:15:181"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"12688:6:181"}]},{"nodeType":"YulAssignment","src":"12726:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12737:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12742:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12733:3:181"},"nodeType":"YulFunctionCall","src":"12733:12:181"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"12726:3:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"12515:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"12518:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12512:2:181"},"nodeType":"YulFunctionCall","src":"12512:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"12526:18:181","statements":[{"nodeType":"YulAssignment","src":"12528:14:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"12537:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"12540:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12533:3:181"},"nodeType":"YulFunctionCall","src":"12533:9:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"12528:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"12508:3:181","statements":[]},"src":"12504:251:181"},{"nodeType":"YulAssignment","src":"12764:14:181","value":{"name":"tail_2","nodeType":"YulIdentifier","src":"12772:6:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12764:4:181"}]}]},"name":"abi_encode_tuple_t_address_t_rational_0_by_1_t_bytes_memory_ptr_t_uint256_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_address_t_uint256_t_bytes_memory_ptr_t_uint256_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11856:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"11867:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11875:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11883:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11891:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11899:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11910:4:181","type":""}],"src":"11612:1172:181"},{"body":{"nodeType":"YulBlock","src":"12870:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"12916:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12925:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12928:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12918:6:181"},"nodeType":"YulFunctionCall","src":"12918:12:181"},"nodeType":"YulExpressionStatement","src":"12918:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12891:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"12900:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12887:3:181"},"nodeType":"YulFunctionCall","src":"12887:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"12912:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12883:3:181"},"nodeType":"YulFunctionCall","src":"12883:32:181"},"nodeType":"YulIf","src":"12880:52:181"},{"nodeType":"YulAssignment","src":"12941:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12957:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12951:5:181"},"nodeType":"YulFunctionCall","src":"12951:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"12941:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12836:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12847:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12859:6:181","type":""}],"src":"12789:184:181"},{"body":{"nodeType":"YulBlock","src":"13107:175:181","statements":[{"nodeType":"YulAssignment","src":"13117:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13129:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13140:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13125:3:181"},"nodeType":"YulFunctionCall","src":"13125:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13117:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"13152:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13170:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"13175:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13166:3:181"},"nodeType":"YulFunctionCall","src":"13166:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"13179:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13162:3:181"},"nodeType":"YulFunctionCall","src":"13162:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13156:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13197:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13212:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13220:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13208:3:181"},"nodeType":"YulFunctionCall","src":"13208:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13190:6:181"},"nodeType":"YulFunctionCall","src":"13190:34:181"},"nodeType":"YulExpressionStatement","src":"13190:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13244:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13255:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13240:3:181"},"nodeType":"YulFunctionCall","src":"13240:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13264:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"13272:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13260:3:181"},"nodeType":"YulFunctionCall","src":"13260:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13233:6:181"},"nodeType":"YulFunctionCall","src":"13233:43:181"},"nodeType":"YulExpressionStatement","src":"13233:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13068:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13079:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13087:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13098:4:181","type":""}],"src":"12978:304:181"},{"body":{"nodeType":"YulBlock","src":"13416:119:181","statements":[{"nodeType":"YulAssignment","src":"13426:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13438:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13449:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13434:3:181"},"nodeType":"YulFunctionCall","src":"13434:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13426:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13468:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"13479:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13461:6:181"},"nodeType":"YulFunctionCall","src":"13461:25:181"},"nodeType":"YulExpressionStatement","src":"13461:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13506:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13517:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13502:3:181"},"nodeType":"YulFunctionCall","src":"13502:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"13522:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13495:6:181"},"nodeType":"YulFunctionCall","src":"13495:34:181"},"nodeType":"YulExpressionStatement","src":"13495:34:181"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13377:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13388:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13396:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13407:4:181","type":""}],"src":"13287:248:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_bytes(add(headStart, offset_1), dataEnd)\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_array_bytes32_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32t_uint256t_uint16t_bytes_calldata_ptrt_array$_t_bytes32_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        if iszero(eq(value_1, and(value_1, 0xffff))) { revert(0, 0) }\n        value2 := value_1\n        let offset := calldataload(add(headStart, 96))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n        let offset_1 := calldataload(add(headStart, 128))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value5_1, value6_1 := abi_decode_array_bytes32_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value5 := value5_1\n        value6 := value6_1\n    }\n    function abi_encode_tuple_t_stringliteral_f53dc022905a0a2225e8c3ff0673639ed9f375ab56ff523da9fcb36afd04ffe2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!rootManager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        let tail_1 := abi_encode_bytes(value0, add(headStart, 96))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value1, tail_1)\n        mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!AMB\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        tail := abi_encode_bytes(value0, add(headStart, 64))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint32_t_uint256_t_struct$_L2Message_$3776_memory_ptr_t_array$_t_bytes32_$dyn_calldata_ptr__to_t_uint256_t_uint256_t_struct$_L2Message_$3776_memory_ptr_t_array$_t_bytes32_$dyn_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), 128)\n        mstore(add(headStart, 128), and(mload(value2), 0xffff))\n        mstore(add(headStart, 160), and(mload(add(value2, 32)), sub(shl(160, 1), 1)))\n        let memberValue0 := mload(add(value2, 64))\n        mstore(add(headStart, 192), 0x60)\n        let end := abi_encode_bytes(memberValue0, add(headStart, 224))\n        mstore(add(headStart, 0x60), sub(end, headStart))\n        mstore(end, value4)\n        if gt(value4, sub(shl(251, 1), 1)) { revert(0, 0) }\n        let length := shl(5, value4)\n        calldatacopy(add(end, 32), value3, length)\n        tail := add(add(end, length), 32)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!proven\")\n        tail := add(headStart, 96)\n    }\n    function convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes32(array, len) -> value\n    {\n        value := calldataload(array)\n        if lt(len, 32)\n        {\n            value := and(value, shl(shl(3, sub(32, len)), not(0)))\n        }\n    }\n    function abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_bytes_calldata_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        mstore(add(headStart, 64), value1)\n        calldatacopy(add(headStart, 96), value0, value1)\n        mstore(add(add(headStart, value1), 96), 0)\n        tail := add(add(headStart, and(add(value1, 31), not(31))), 96)\n        mstore(add(headStart, 0x20), and(value2, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!data length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint32__to_t_uint256_t_uint256_t_uint32__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_867777f634bb94108a594889ab4f827c256cf5677bbf34c222dbb2e03cd5a0d3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 5)\n        mstore(add(headStart, 64), \"!fees\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_rational_0_by_1_t_bytes_memory_ptr_t_uint256_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__to_t_address_t_uint256_t_bytes_memory_ptr_t_uint256_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        let _1 := 32\n        mstore(add(headStart, _1), value1)\n        mstore(add(headStart, 64), 160)\n        let tail_1 := abi_encode_bytes(value2, add(headStart, 160))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), sub(tail_1, headStart))\n        let pos := tail_1\n        let length := mload(value4)\n        mstore(tail_1, length)\n        pos := add(tail_1, _1)\n        let tail_2 := add(add(tail_1, shl(5, length)), _1)\n        let srcPtr := add(value4, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, add(sub(tail_2, tail_1), not(31)))\n            tail_2 := abi_encode_bytes(mload(srcPtr), tail_2)\n            srcPtr := add(srcPtr, _1)\n            pos := add(pos, _1)\n        }\n        tail := tail_2\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"39039":[{"length":32,"start":483}],"39042":[{"length":32,"start":958},{"length":32,"start":1248},{"length":32,"start":2088},{"length":32,"start":2925},{"length":32,"start":3107}],"39045":[{"length":32,"start":567},{"length":32,"start":1067},{"length":32,"start":2472}],"39048":[{"length":32,"start":321},{"length":32,"start":2413}]},"linkReferences":{},"object":"6080604052600436106101235760003560e01c80638da5cb5b116100a0578063d1851c9211610064578063d1851c921461036f578063d232c2201461038d578063d69f9d61146103ac578063db1b7659146103e0578063e92a492f1461040057600080fd5b80638da5cb5b146102bc578063b1f8100d146102da578063c1f0808a146102fa578063c5b350df1461033a578063cc3942831461034f57600080fd5b80635bd11efc116100e75780635bd11efc146102055780635f61e3ec146102255780636a42b8f814610271578063715018a6146102875780637850b0201461029c57600080fd5b8063141684161461012f5780633cf52ffb1461017d57806348e6fa231461019c5780634ff746f6146101b157806352a9674b146101d157600080fd5b3661012a57005b600080fd5b34801561013b57600080fd5b506101637f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b34801561018957600080fd5b506002545b604051908152602001610174565b6101af6101aa366004610f22565b610420565b005b3480156101bd57600080fd5b506101af6101cc366004610f86565b6104d5565b3480156101dd57600080fd5b506101637f000000000000000000000000000000000000000000000000000000000000000081565b34801561021157600080fd5b506101af610220366004610fc3565b61057b565b34801561023157600080fd5b506102597f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610174565b34801561027d57600080fd5b5062093a8061018e565b34801561029357600080fd5b506101af6105b2565b3480156102a857600080fd5b506101af6102b7366004610ff3565b610666565b3480156102c857600080fd5b506000546001600160a01b0316610259565b3480156102e657600080fd5b506101af6102f5366004610fc3565b61069a565b34801561030657600080fd5b5061032a610315366004610ff3565b60056020526000908152604090205460ff1681565b6040519015158152602001610174565b34801561034657600080fd5b506101af610738565b34801561035b57600080fd5b50600354610259906001600160a01b031681565b34801561037b57600080fd5b506001546001600160a01b0316610259565b34801561039957600080fd5b506000546001600160a01b03161561032a565b3480156103b857600080fd5b506102597f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ec57600080fd5b5061032a6103fb366004610fc3565b6107a8565b34801561040c57600080fd5b506101af61041b36600461109a565b6107b2565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461048c5760405162461bcd60e51b815260206004820152600c60248201526b10b937b7ba26b0b730b3b2b960a11b60448201526064015b60405180910390fd5b6104968282610a4d565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e93550778282336040516104c99392919061118f565b60405180910390a15050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105365760405162461bcd60e51b81526004016104839060208082526004908201526310a0a6a160e11b604082015260600190565b61053f81610cf3565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced81336040516105709291906111cd565b60405180910390a150565b6000546001600160a01b031633146105a6576040516311a8a1bb60e31b815260040160405180910390fd5b6105af81610d0c565b50565b6000546001600160a01b031633146105dd576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426105ef91906111f7565b1161060d576040516324e0285f60e21b815260040160405180910390fd5b60025460000361063057604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b03161561065a576040516323295ef960e01b815260040160405180910390fd5b6106646000610d75565b565b6000546001600160a01b03163314610691576040516311a8a1bb60e31b815260040160405180910390fd5b6105af81610dda565b6000546001600160a01b031633146106c5576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b0382811691161480156106e3575060025415155b15610701576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361072f57604051634a2fb73f60e11b815260040160405180910390fd5b6105af81610e1b565b6001546001600160a01b03163314610763576040516311a7f27160e11b815260040160405180910390fd5b62093a806002544261077591906111f7565b11610793576040516324e0285f60e21b815260040160405180910390fd5b600154610664906001600160a01b0316610d75565b6000805b92915050565b602083146107ec5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610483565b6040805160608101825261ffff871681526003546001600160a01b03166020808301919091528251601f870182900482028101820184528681527f0000000000000000000000000000000000000000000000000000000000000000936000939290830191908990899081908401838280828437600092018290525093909452505060405163e4948f4360e01b8152929350916001600160a01b038516915063e4948f43906108a6908d908d9087908b908b90600401611218565b602060405180830381865afa1580156108c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e791906112a1565b9050806109205760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b6044820152606401610483565b600061092c87896112c3565b60008181526005602052604090205490915060ff16610a405760008181526005602052604090819020805460ff191660011790555163473ec9fd60e11b81527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166004820152602481018290526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638e7d93fa90604401600060405180830381600087803b1580156109ec57600080fd5b505af1158015610a00573d6000803e3d6000fd5b505050507fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced888833604051610a37939291906112e1565b60405180910390a15b5050505050505050505050565b8051602014610a8d5760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610483565b8151602014610ac85760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610483565b6000634ff746f660e01b83604051602401610ae39190611322565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600082806020019051810190610b2e9190611335565b90506127106000610b3e34610e69565b8451604051632e6b3b8f60e11b8152600481018690526024810185905263ffffffff90911660448201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635cd6771e90606401602060405180830381865afa158015610bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be09190611335565b8111610c165760405162461bcd60e51b8152602060048201526005602482015264216665657360d81b6044820152606401610483565b6003546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163725ad850918491166000888782604051908082528060200260200182016040528015610c8657816020015b6060815260200190600190039081610c715790505b506040518763ffffffff1660e01b8152600401610ca795949392919061134e565b60206040518083038185885af1158015610cc5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610cea9190611335565b50505050505050565b6040516316c2fdb560e21b815260040160405180910390fd5b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60045460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1600455565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b6000600454821115610e7b5760045491505b5090565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610ea657600080fd5b813567ffffffffffffffff80821115610ec157610ec1610e7f565b604051601f8301601f19908116603f01168101908282118183101715610ee957610ee9610e7f565b81604052838152866020858801011115610f0257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610f3557600080fd5b823567ffffffffffffffff80821115610f4d57600080fd5b610f5986838701610e95565b93506020850135915080821115610f6f57600080fd5b50610f7c85828601610e95565b9150509250929050565b600060208284031215610f9857600080fd5b813567ffffffffffffffff811115610faf57600080fd5b610fbb84828501610e95565b949350505050565b600060208284031215610fd557600080fd5b81356001600160a01b0381168114610fec57600080fd5b9392505050565b60006020828403121561100557600080fd5b5035919050565b60008083601f84011261101e57600080fd5b50813567ffffffffffffffff81111561103657600080fd5b60208301915083602082850101111561104e57600080fd5b9250929050565b60008083601f84011261106757600080fd5b50813567ffffffffffffffff81111561107f57600080fd5b6020830191508360208260051b850101111561104e57600080fd5b600080600080600080600060a0888a0312156110b557600080fd5b873563ffffffff811681146110c957600080fd5b965060208801359550604088013561ffff811681146110e757600080fd5b9450606088013567ffffffffffffffff8082111561110457600080fd5b6111108b838c0161100c565b909650945060808a013591508082111561112957600080fd5b506111368a828b01611055565b989b979a50959850939692959293505050565b6000815180845260005b8181101561116f57602081850181015186830182015201611153565b506000602082860101526020601f19601f83011685010191505092915050565b6060815260006111a26060830186611149565b82810360208401526111b48186611149565b91505060018060a01b0383166040830152949350505050565b6040815260006111e06040830185611149565b905060018060a01b03831660208301529392505050565b818103818111156107ac57634e487b7160e01b600052601160045260246000fd5b63ffffffff861681528460208201526080604082015261ffff845116608082015260018060a01b0360208501511660a082015260006040850151606060c084015261126660e0840182611149565b838103606085015284815290506001600160fb1b0384111561128757600080fd5b8360051b8086602084013701602001979650505050505050565b6000602082840312156112b357600080fd5b81518015158114610fec57600080fd5b803560208310156107ac57600019602084900360031b1b1692915050565b6040815282604082015282846060830137600060608483018101919091526001600160a01b03929092166020820152601f909201601f191690910101919050565b602081526000610fec6020830184611149565b60006020828403121561134757600080fd5b5051919050565b60018060a01b038616815260006020868184015260a0604084015261137660a0840187611149565b85606085015283810360808501528085518083528383019150838160051b84010184880160005b838110156113cb57601f198684030185526113b9838351611149565b9487019492509086019060010161139d565b50909c9b50505050505050505050505056fea26469706673582212208b1a643a1efb4efa03e4319159663e389bb52a5193b1ef174f0e67ed9055783d64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x123 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xD1851C92 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x36F JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x38D JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x3AC JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x3E0 JUMPI DUP1 PUSH4 0xE92A492F EQ PUSH2 0x400 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2BC JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x2DA JUMPI DUP1 PUSH4 0xC1F0808A EQ PUSH2 0x2FA JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x33A JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x34F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5BD11EFC GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x225 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x271 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0x7850B020 EQ PUSH2 0x29C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x12F JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x17D JUMPI DUP1 PUSH4 0x48E6FA23 EQ PUSH2 0x19C JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x1B1 JUMPI DUP1 PUSH4 0x52A9674B EQ PUSH2 0x1D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x12A JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x163 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x189 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x174 JUMP JUMPDEST PUSH2 0x1AF PUSH2 0x1AA CALLDATASIZE PUSH1 0x4 PUSH2 0xF22 JUMP JUMPDEST PUSH2 0x420 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AF PUSH2 0x1CC CALLDATASIZE PUSH1 0x4 PUSH2 0xF86 JUMP JUMPDEST PUSH2 0x4D5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x163 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x211 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AF PUSH2 0x220 CALLDATASIZE PUSH1 0x4 PUSH2 0xFC3 JUMP JUMPDEST PUSH2 0x57B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x259 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x174 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x27D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x18E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x293 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AF PUSH2 0x5B2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AF PUSH2 0x2B7 CALLDATASIZE PUSH1 0x4 PUSH2 0xFF3 JUMP JUMPDEST PUSH2 0x666 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x259 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AF PUSH2 0x2F5 CALLDATASIZE PUSH1 0x4 PUSH2 0xFC3 JUMP JUMPDEST PUSH2 0x69A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x306 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32A PUSH2 0x315 CALLDATASIZE PUSH1 0x4 PUSH2 0xFF3 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x174 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x346 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AF PUSH2 0x738 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x259 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x259 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x32A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x259 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32A PUSH2 0x3FB CALLDATASIZE PUSH1 0x4 PUSH2 0xFC3 JUMP JUMPDEST PUSH2 0x7A8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x40C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1AF PUSH2 0x41B CALLDATASIZE PUSH1 0x4 PUSH2 0x109A JUMP JUMPDEST PUSH2 0x7B2 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x48C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B937B7BA26B0B730B3B2B9 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x496 DUP3 DUP3 PUSH2 0xA4D JUMP JUMPDEST PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 DUP3 DUP3 CALLER PUSH1 0x40 MLOAD PUSH2 0x4C9 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x118F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x536 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x483 SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0x53F DUP2 PUSH2 0xCF3 JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0x570 SWAP3 SWAP2 SWAP1 PUSH2 0x11CD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5AF DUP2 PUSH2 0xD0C JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5DD JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x5EF SWAP2 SWAP1 PUSH2 0x11F7 JUMP JUMPDEST GT PUSH2 0x60D JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x630 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x65A JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x664 PUSH1 0x0 PUSH2 0xD75 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x691 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5AF DUP2 PUSH2 0xDDA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x6C5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x6E3 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x701 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x72F JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5AF DUP2 PUSH2 0xE1B JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x763 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x775 SWAP2 SWAP1 PUSH2 0x11F7 JUMP JUMPDEST GT PUSH2 0x793 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x664 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xD75 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP4 EQ PUSH2 0x7EC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x483 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH2 0xFFFF DUP8 AND DUP2 MSTORE PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD PUSH1 0x1F DUP8 ADD DUP3 SWAP1 DIV DUP3 MUL DUP2 ADD DUP3 ADD DUP5 MSTORE DUP7 DUP2 MSTORE PUSH32 0x0 SWAP4 PUSH1 0x0 SWAP4 SWAP3 SWAP1 DUP4 ADD SWAP2 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 SWAP1 SWAP5 MSTORE POP POP PUSH1 0x40 MLOAD PUSH4 0xE4948F43 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 SWAP4 POP SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 POP PUSH4 0xE4948F43 SWAP1 PUSH2 0x8A6 SWAP1 DUP14 SWAP1 DUP14 SWAP1 DUP8 SWAP1 DUP12 SWAP1 DUP12 SWAP1 PUSH1 0x4 ADD PUSH2 0x1218 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8E7 SWAP2 SWAP1 PUSH2 0x12A1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x920 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x10B83937BB32B7 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x483 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x92C DUP8 DUP10 PUSH2 0x12C3 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND PUSH2 0xA40 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH4 0x473EC9FD PUSH1 0xE1 SHL DUP2 MSTORE PUSH32 0x0 PUSH4 0xFFFFFFFF AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x8E7D93FA SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA00 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP9 DUP9 CALLER PUSH1 0x40 MLOAD PUSH2 0xA37 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x12E1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0xA8D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x483 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x20 EQ PUSH2 0xAC8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x483 JUMP JUMPDEST PUSH1 0x0 PUSH4 0x4FF746F6 PUSH1 0xE0 SHL DUP4 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xAE3 SWAP2 SWAP1 PUSH2 0x1322 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP SWAP1 POP PUSH1 0x0 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xB2E SWAP2 SWAP1 PUSH2 0x1335 JUMP JUMPDEST SWAP1 POP PUSH2 0x2710 PUSH1 0x0 PUSH2 0xB3E CALLVALUE PUSH2 0xE69 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x40 MLOAD PUSH4 0x2E6B3B8F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5CD6771E SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBBC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBE0 SWAP2 SWAP1 PUSH2 0x1335 JUMP JUMPDEST DUP2 GT PUSH2 0xC16 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x5 PUSH1 0x24 DUP3 ADD MSTORE PUSH5 0x2166656573 PUSH1 0xD8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x483 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND SWAP2 PUSH4 0x725AD850 SWAP2 DUP5 SWAP2 AND PUSH1 0x0 DUP9 DUP8 DUP3 PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xC86 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0xC71 JUMPI SWAP1 POP JUMPDEST POP PUSH1 0x40 MLOAD DUP8 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xCA7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x134E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xCC5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCEA SWAP2 SWAP1 PUSH2 0x1335 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x16C2FDB5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x877A02CB809DA0364D23ADCA3CD50C451B53F279D3DF632E1FC11EB66335BCE5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x4 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 SLOAD DUP3 GT ISZERO PUSH2 0xE7B JUMPI PUSH1 0x4 SLOAD SWAP2 POP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xEA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xEC1 JUMPI PUSH2 0xEC1 PUSH2 0xE7F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xEE9 JUMPI PUSH2 0xEE9 PUSH2 0xE7F JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0xF02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xF35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xF4D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF59 DUP7 DUP4 DUP8 ADD PUSH2 0xE95 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xF6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF7C DUP6 DUP3 DUP7 ADD PUSH2 0xE95 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xFAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFBB DUP5 DUP3 DUP6 ADD PUSH2 0xE95 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xFD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xFEC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1005 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x101E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1036 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x104E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x1067 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x107F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x104E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x10B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x10C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x10E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1104 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1110 DUP12 DUP4 DUP13 ADD PUSH2 0x100C JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1136 DUP11 DUP3 DUP12 ADD PUSH2 0x1055 JUMP JUMPDEST SWAP9 SWAP12 SWAP8 SWAP11 POP SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x116F JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x1153 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x11A2 PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x1149 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x11B4 DUP2 DUP7 PUSH2 0x1149 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x11E0 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x1149 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x7AC JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP7 AND DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0xFFFF DUP5 MLOAD AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x60 PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x1266 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0x1149 JUMP JUMPDEST DUP4 DUP2 SUB PUSH1 0x60 DUP6 ADD MSTORE DUP5 DUP2 MSTORE SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xFB SHL SUB DUP5 GT ISZERO PUSH2 0x1287 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x5 SHL DUP1 DUP7 PUSH1 0x20 DUP5 ADD CALLDATACOPY ADD PUSH1 0x20 ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x12B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xFEC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0x20 DUP4 LT ISZERO PUSH2 0x7AC JUMPI PUSH1 0x0 NOT PUSH1 0x20 DUP5 SWAP1 SUB PUSH1 0x3 SHL SHL AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 DUP5 PUSH1 0x60 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x60 DUP5 DUP4 ADD DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1F SWAP1 SWAP3 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD ADD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xFEC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1149 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1347 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP7 AND DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP7 DUP2 DUP5 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x1376 PUSH1 0xA0 DUP5 ADD DUP8 PUSH2 0x1149 JUMP JUMPDEST DUP6 PUSH1 0x60 DUP6 ADD MSTORE DUP4 DUP2 SUB PUSH1 0x80 DUP6 ADD MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE DUP4 DUP4 ADD SWAP2 POP DUP4 DUP2 PUSH1 0x5 SHL DUP5 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x13CB JUMPI PUSH1 0x1F NOT DUP7 DUP5 SUB ADD DUP6 MSTORE PUSH2 0x13B9 DUP4 DUP4 MLOAD PUSH2 0x1149 JUMP JUMPDEST SWAP5 DUP8 ADD SWAP5 SWAP3 POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x139D JUMP JUMPDEST POP SWAP1 SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP12 BYTE PUSH5 0x3A1EFB4EFA SUB 0xE4 BALANCE SWAP2 MSIZE PUSH7 0x3E389BB52A5193 0xB1 0xEF OR 0x4F 0xE PUSH8 0xED9055783D64736F PUSH13 0x63430008110033000000000000 ","sourceMap":"390:4839:147:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1587:37:116;;;;;;;;;;;;;;;;;;188:10:181;176:23;;;158:42;;146:2;131:18;1587:37:116;;;;;;;;1949:112:168;;;;;;;;;;-1:-1:-1;2029:27:168;;1949:112;;;357:25:181;;;345:2;330:18;1949:112:168;211:177:181;1614:200:119;;;;;;:::i;:::-;;:::i;:::-;;4262:148:116;;;;;;;;;;-1:-1:-1;4262:148:116;;;;;:::i;:::-;;:::i;1268:30::-;;;;;;;;;;;;;;;3939:119;;;;;;;;;;-1:-1:-1;3939:119:116;;;;;:::i;:::-;;:::i;1451:37::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2572:32:181;;;2554:51;;2542:2;2527:18;1451:37:116;2408:203:181;2151:79:168;;;;;;;;;;-1:-1:-1;1530:6:168;2151:79;;3820:442;;;;;;;;;;;;;:::i;860:83:118:-;;;;;;;;;;-1:-1:-1;860:83:118;;;;;:::i;:::-;;:::i;1641:79:168:-;;;;;;;;;;-1:-1:-1;1687:7:168;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;3321:420;;;;;;;;;;-1:-1:-1;3321:420:168;;;;;:::i;:::-;;:::i;872:41:147:-;;;;;;;;;;-1:-1:-1;872:41:147;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3151:14:181;;3144:22;3126:41;;3114:2;3099:18;872:41:147;2986:187:181;4404:539:168;;;;;;;;;;;;;:::i;1705:30:116:-;;;;;;;;;;-1:-1:-1;1705:30:116;;;;-1:-1:-1;;;;;1705:30:116;;;1792:85:168;;;;;;;;;;-1:-1:-1;1863:9:168;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;;;;;;;;;;-1:-1:-1;3097:4:168;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;1363:28:116;;;;;;;;;;;;;;;4490:107;;;;;;;;;;-1:-1:-1;4490:107:116;;;;;:::i;:::-;;:::i;3749:1478:147:-;;;;;;;;;;-1:-1:-1;3749:1478:147;;;;;:::i;:::-;;:::i;1614:200:119:-;2212:10:116;-1:-1:-1;;;;;2226:12:116;2212:26;;2204:51;;;;-1:-1:-1;;;2204:51:116;;5256:2:181;2204:51:116;;;5238:21:181;5295:2;5275:18;;;5268:30;-1:-1:-1;;;5314:18:181;;;5307:42;5366:18;;2204:51:116;;;;;;;;;1721:33:119::1;1734:5;1741:12;1721;:33::i;:::-;1765:44;1777:5;1784:12;1798:10;1765:44;;;;;;;;:::i;:::-;;;;;;;;1614:200:::0;;:::o;4262:148:116:-;1891:10;-1:-1:-1;;;;;1905:3:116;1891:17;;1883:34;;;;-1:-1:-1;;;1883:34:116;;;;;;6503:2:181;6485:21;;;6542:1;6522:18;;;6515:29;-1:-1:-1;;;6575:2:181;6560:18;;6553:34;6619:2;6604:18;;6301:327;1883:34:116;4337:22:::1;4353:5;4337:15;:22::i;:::-;4370:35;4387:5;4394:10;4370:35;;;;;;;:::i;:::-;;;;;;;;4262:148:::0;:::o;3939:119::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4016:37:116::1;4036:16;4016:19;:37::i;:::-;3939:119:::0;:::o;3820:442:168:-;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;3960:27:::2;;3991:1;3960:32:::0;3956:92:::2;;4001:47;;-1:-1:-1::0;;;4001:47:168::2;;;;;;;;;;;3956:92;4095:9;::::0;-1:-1:-1;;;;;4095:9:168::2;:23:::0;4091:88:::2;;4127:52;;-1:-1:-1::0;;;4127:52:168::2;;;;;;;;;;;4091:88;4236:21;4254:1;4236:9;:21::i;:::-;3820:442::o:0;860:83:118:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;919:19:118::1;930:7;919:10;:19::i;3321:420:168:-:0;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;4404:539::-:0;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;4490:107:116:-:0;4549:4;;4568:24;4561:31;4490:107;-1:-1:-1;;4490:107:116:o;3749:1478:147:-;4278:2;4259:21;;4251:41;;;;-1:-1:-1;;;4251:41:147;;7384:2:181;4251:41:147;;;7366:21:181;7423:1;7403:18;;;7396:29;-1:-1:-1;;;7441:18:181;;;7434:37;7488:18;;4251:41:147;7182:330:181;4251:41:147;4361:113;;;;;;;;;;;;;4430:15;;-1:-1:-1;;;;;4430:15:147;4361:113;;;;;;;;;;;;;;;;;;;;;;;;;;;4324:3;;4299:14;;4361:113;;;;;;4459:8;;;;;;4361:113;;4459:8;;;;4361:113;;;;;;;;-1:-1:-1;4361:113:147;;;;-1:-1:-1;;4496:80:147;;-1:-1:-1;;;4496:80:147;;4334:140;;-1:-1:-1;4361:113:147;-1:-1:-1;;;;;4496:30:147;;;-1:-1:-1;4496:30:147;;:80;;4527:14;;4543:15;;4334:140;;4569:6;;;;4496:80;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4481:95;;4590:7;4582:27;;;;-1:-1:-1;;;4582:27:147;;9035:2:181;4582:27:147;;;9017:21:181;9074:1;9054:18;;;9047:29;-1:-1:-1;;;9092:18:181;;;9085:37;9139:18;;4582:27:147;8833:330:181;4582:27:147;4616:13;4632:17;4640:8;;4632:17;:::i;:::-;4923:16;;;;:9;:16;;;;;;4616:33;;-1:-1:-1;4923:16:147;;4918:254;;4980:16;;;;:9;:16;;;;;;;:23;;-1:-1:-1;;4980:23:147;4999:4;4980:23;;;5056:58;-1:-1:-1;;;5056:58:147;;5093:13;9630:10:181;9618:23;5056:58:147;;;9600:42:181;9658:18;;;9651:34;;;-1:-1:-1;;;;;5069:12:147;5056:36;;;;9573:18:181;;5056:58:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5127:38;5144:8;;5154:10;5127:38;;;;;;;;:::i;:::-;;;;;;;;4918:254;4197:1030;;;;3749:1478;;;;;;;:::o;1830:1537::-;2017:12;:19;2040:2;2017:25;2009:50;;;;-1:-1:-1;;;2009:50:147;;10390:2:181;2009:50:147;;;10372:21:181;10429:2;10409:18;;;10402:30;-1:-1:-1;;;10448:18:181;;;10441:42;10500:18;;2009:50:147;10188:336:181;2009:50:147;2128:5;:12;2144:2;2128:18;2120:38;;;;-1:-1:-1;;;2120:38:147;;7384:2:181;2120:38:147;;;7366:21:181;7423:1;7403:18;;;7396:29;-1:-1:-1;;;7441:18:181;;;7434:37;7488:18;;2120:38:147;7182:330:181;2120:38:147;2188:22;2236:33;;;2271:5;2213:64;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;2213:64:147;;;;;;;-1:-1:-1;;;;;2213:64:147;;;;;;;;;;;2188:89;;2307:16;2337:12;2326:35;;;;;;;;;;;;:::i;:::-;2307:54;-1:-1:-1;2419:5:147;2398:18;2473;2481:9;2473:7;:18::i;:::-;2610:16;;2546:82;;-1:-1:-1;;;2546:82:147;;;;;11140:25:181;;;11181:18;;;11174:34;;;11256:10;11244:23;;;11224:18;;;11217:51;2459:32:147;;-1:-1:-1;2554:3:147;-1:-1:-1;;;;;2546:34:147;;;;11113:18:181;;2546:82:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2540:3;:88;2532:106;;;;-1:-1:-1;;;2532:106:147;;11481:2:181;2532:106:147;;;11463:21:181;11520:1;11500:18;;;11493:29;-1:-1:-1;;;11538:18:181;;;11531:35;11583:18;;2532:106:147;11279:328:181;2532:106:147;3140:15;;-1:-1:-1;;;;;3047:3:147;3039:33;;;;;3080:3;;3140:15;;3257:9;3294:10;3140:15;3342:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3039:323;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1917:1450;;;;1830:1537;;:::o;5220:267:116:-;5447:35;;-1:-1:-1;;;5447:35:116;;;;;;;;;;;5838:185;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;13190:34:181;;13260:15;;;13255:2;13240:18;;13233:43;5921:57:116;;13125:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;4981::168:-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;1089:114:118:-;1160:6;;1146:30;;;13461:25:181;;;13517:2;13502:18;;13495:34;;;1146:30:118;;13434:18:181;1146:30:118;;;;;;;1182:6;:16;1089:114::o;5170:183:168:-;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;1360:137:118:-;1414:7;1440:6;;1433:4;:13;1429:47;;;1463:6;;1456:13;;1429:47;-1:-1:-1;1488:4:118;1360:137::o;393:127:181:-;454:10;449:3;445:20;442:1;435:31;485:4;482:1;475:15;509:4;506:1;499:15;525:718;567:5;620:3;613:4;605:6;601:17;597:27;587:55;;638:1;635;628:12;587:55;674:6;661:20;700:18;737:2;733;730:10;727:36;;;743:18;;:::i;:::-;818:2;812:9;786:2;872:13;;-1:-1:-1;;868:22:181;;;892:2;864:31;860:40;848:53;;;916:18;;;936:22;;;913:46;910:72;;;962:18;;:::i;:::-;1002:10;998:2;991:22;1037:2;1029:6;1022:18;1083:3;1076:4;1071:2;1063:6;1059:15;1055:26;1052:35;1049:55;;;1100:1;1097;1090:12;1049:55;1164:2;1157:4;1149:6;1145:17;1138:4;1130:6;1126:17;1113:54;1211:1;1204:4;1199:2;1191:6;1187:15;1183:26;1176:37;1231:6;1222:15;;;;;;525:718;;;;:::o;1248:539::-;1334:6;1342;1395:2;1383:9;1374:7;1370:23;1366:32;1363:52;;;1411:1;1408;1401:12;1363:52;1451:9;1438:23;1480:18;1521:2;1513:6;1510:14;1507:34;;;1537:1;1534;1527:12;1507:34;1560:49;1601:7;1592:6;1581:9;1577:22;1560:49;:::i;:::-;1550:59;;1662:2;1651:9;1647:18;1634:32;1618:48;;1691:2;1681:8;1678:16;1675:36;;;1707:1;1704;1697:12;1675:36;;1730:51;1773:7;1762:8;1751:9;1747:24;1730:51;:::i;:::-;1720:61;;;1248:539;;;;;:::o;1792:320::-;1860:6;1913:2;1901:9;1892:7;1888:23;1884:32;1881:52;;;1929:1;1926;1919:12;1881:52;1969:9;1956:23;2002:18;1994:6;1991:30;1988:50;;;2034:1;2031;2024:12;1988:50;2057:49;2098:7;2089:6;2078:9;2074:22;2057:49;:::i;:::-;2047:59;1792:320;-1:-1:-1;;;;1792:320:181:o;2117:286::-;2176:6;2229:2;2217:9;2208:7;2204:23;2200:32;2197:52;;;2245:1;2242;2235:12;2197:52;2271:23;;-1:-1:-1;;;;;2323:31:181;;2313:42;;2303:70;;2369:1;2366;2359:12;2303:70;2392:5;2117:286;-1:-1:-1;;;2117:286:181:o;2616:180::-;2675:6;2728:2;2716:9;2707:7;2703:23;2699:32;2696:52;;;2744:1;2741;2734:12;2696:52;-1:-1:-1;2767:23:181;;2616:180;-1:-1:-1;2616:180:181:o;3178:347::-;3229:8;3239:6;3293:3;3286:4;3278:6;3274:17;3270:27;3260:55;;3311:1;3308;3301:12;3260:55;-1:-1:-1;3334:20:181;;3377:18;3366:30;;3363:50;;;3409:1;3406;3399:12;3363:50;3446:4;3438:6;3434:17;3422:29;;3498:3;3491:4;3482:6;3474;3470:19;3466:30;3463:39;3460:59;;;3515:1;3512;3505:12;3460:59;3178:347;;;;;:::o;3530:367::-;3593:8;3603:6;3657:3;3650:4;3642:6;3638:17;3634:27;3624:55;;3675:1;3672;3665:12;3624:55;-1:-1:-1;3698:20:181;;3741:18;3730:30;;3727:50;;;3773:1;3770;3763:12;3727:50;3810:4;3802:6;3798:17;3786:29;;3870:3;3863:4;3853:6;3850:1;3846:14;3838:6;3834:27;3830:38;3827:47;3824:67;;;3887:1;3884;3877:12;3902:1147;4033:6;4041;4049;4057;4065;4073;4081;4134:3;4122:9;4113:7;4109:23;4105:33;4102:53;;;4151:1;4148;4141:12;4102:53;4190:9;4177:23;4240:10;4233:5;4229:22;4222:5;4219:33;4209:61;;4266:1;4263;4256:12;4209:61;4289:5;-1:-1:-1;4341:2:181;4326:18;;4313:32;;-1:-1:-1;4397:2:181;4382:18;;4369:32;4445:6;4432:20;;4420:33;;4410:61;;4467:1;4464;4457:12;4410:61;4490:7;-1:-1:-1;4548:2:181;4533:18;;4520:32;4571:18;4601:14;;;4598:34;;;4628:1;4625;4618:12;4598:34;4667:58;4717:7;4708:6;4697:9;4693:22;4667:58;:::i;:::-;4744:8;;-1:-1:-1;4641:84:181;-1:-1:-1;4832:3:181;4817:19;;4804:33;;-1:-1:-1;4849:16:181;;;4846:36;;;4878:1;4875;4868:12;4846:36;;4917:72;4981:7;4970:8;4959:9;4955:24;4917:72;:::i;:::-;3902:1147;;;;-1:-1:-1;3902:1147:181;;-1:-1:-1;3902:1147:181;;;;4891:98;;-1:-1:-1;;;3902:1147:181:o;5395:422::-;5436:3;5474:5;5468:12;5501:6;5496:3;5489:19;5526:1;5536:162;5550:6;5547:1;5544:13;5536:162;;;5612:4;5668:13;;;5664:22;;5658:29;5640:11;;;5636:20;;5629:59;5565:12;5536:162;;;5540:3;5743:1;5736:4;5727:6;5722:3;5718:16;5714:27;5707:38;5806:4;5799:2;5795:7;5790:2;5782:6;5778:15;5774:29;5769:3;5765:39;5761:50;5754:57;;;5395:422;;;;:::o;5822:474::-;6043:2;6032:9;6025:21;6006:4;6069:44;6109:2;6098:9;6094:18;6086:6;6069:44;:::i;:::-;6161:9;6153:6;6149:22;6144:2;6133:9;6129:18;6122:50;6189:32;6214:6;6206;6189:32;:::i;:::-;6181:40;;;6286:1;6282;6277:3;6273:11;6269:19;6261:6;6257:32;6252:2;6241:9;6237:18;6230:60;5822:474;;;;;;:::o;6633:314::-;6808:2;6797:9;6790:21;6771:4;6828:44;6868:2;6857:9;6853:18;6845:6;6828:44;:::i;:::-;6820:52;;6937:1;6933;6928:3;6924:11;6920:19;6912:6;6908:32;6903:2;6892:9;6888:18;6881:60;6633:314;;;;;:::o;6952:225::-;7019:9;;;7040:11;;;7037:134;;;7093:10;7088:3;7084:20;7081:1;7074:31;7128:4;7125:1;7118:15;7156:4;7153:1;7146:15;7517:1029;7855:10;7847:6;7843:23;7832:9;7825:42;7903:6;7898:2;7887:9;7883:18;7876:34;7946:3;7941:2;7930:9;7926:18;7919:31;8006:6;7997;7991:13;7987:26;7981:3;7970:9;7966:19;7959:55;8096:1;8092;8087:3;8083:11;8079:19;8073:2;8065:6;8061:15;8055:22;8051:48;8045:3;8034:9;8030:19;8023:77;7806:4;8147:2;8139:6;8135:15;8129:22;8188:4;8182:3;8171:9;8167:19;8160:33;8213:51;8259:3;8248:9;8244:19;8230:12;8213:51;:::i;:::-;8302:19;;;8295:4;8280:20;;8273:49;8331:19;;;8202:62;-1:-1:-1;;;;;;8362:31:181;;8359:51;;;8406:1;8403;8396:12;8359:51;8440:6;8437:1;8433:14;8491:6;8483;8478:2;8473:3;8469:12;8456:42;8519:16;8537:2;8515:25;;7517:1029;-1:-1:-1;;;;;;;7517:1029:181:o;8551:277::-;8618:6;8671:2;8659:9;8650:7;8646:23;8642:32;8639:52;;;8687:1;8684;8677:12;8639:52;8719:9;8713:16;8772:5;8765:13;8758:21;8751:5;8748:32;8738:60;;8794:1;8791;8784:12;9168:255;9288:19;;9327:2;9319:11;;9316:101;;;-1:-1:-1;;9388:2:181;9384:12;;;9381:1;9377:20;9373:33;9362:45;9168:255;;;;:::o;9696:487::-;9881:2;9870:9;9863:21;9920:6;9915:2;9904:9;9900:18;9893:34;9977:6;9969;9964:2;9953:9;9949:18;9936:48;10033:1;10028:2;10004:22;;;10000:31;;9993:42;;;;-1:-1:-1;;;;;10144:32:181;;;;10137:4;10122:20;;10115:62;10096:2;10075:15;;;-1:-1:-1;;10071:29:181;10056:45;;;10052:54;;;-1:-1:-1;9696:487:181:o;10529:217::-;10676:2;10665:9;10658:21;10639:4;10696:44;10736:2;10725:9;10721:18;10713:6;10696:44;:::i;10751:184::-;10821:6;10874:2;10862:9;10853:7;10849:23;10845:32;10842:52;;;10890:1;10887;10880:12;10842:52;-1:-1:-1;10913:16:181;;10751:184;-1:-1:-1;10751:184:181:o;11612:1172::-;11976:1;11972;11967:3;11963:11;11959:19;11951:6;11947:32;11936:9;11929:51;11910:4;11999:2;12037:6;12032:2;12021:9;12017:18;12010:34;12080:3;12075:2;12064:9;12060:18;12053:31;12107:45;12147:3;12136:9;12132:19;12124:6;12107:45;:::i;:::-;12188:6;12183:2;12172:9;12168:18;12161:34;12244:9;12236:6;12232:22;12226:3;12215:9;12211:19;12204:51;12275:6;12310;12304:13;12341:6;12333;12326:22;12376:2;12368:6;12364:15;12357:22;;12435:2;12425:6;12422:1;12418:14;12410:6;12406:27;12402:36;12473:2;12465:6;12461:15;12494:1;12504:251;12518:6;12515:1;12512:13;12504:251;;;12608:2;12604:7;12595:6;12587;12583:19;12579:33;12574:3;12567:46;12636:39;12668:6;12659;12653:13;12636:39;:::i;:::-;12733:12;;;;12626:49;-1:-1:-1;12698:15:181;;;;12540:1;12533:9;12504:251;;;-1:-1:-1;12772:6:181;;11612:1172;-1:-1:-1;;;;;;;;;;;;11612:1172:181:o"},"gasEstimates":{"creation":{"codeDepositCost":"1027800","executionCost":"infinite","totalCost":"infinite"},"external":{"AMB()":"infinite","DOMAIN()":"infinite","MIRROR_DOMAIN()":"infinite","ROOT_MANAGER()":"infinite","acceptProposedOwner()":"63859","delay()":"259","mirrorConnector()":"2448","owner()":"2354","processMessage(bytes)":"infinite","processMessageFromRoot(uint32,uint256,uint16,bytes,bytes32[])":"infinite","processed(bytes32)":"2517","proposeNewOwner(address)":"56428","proposed()":"2353","proposedTimestamp()":"2327","renounceOwnership()":"65999","renounced()":"2363","sendMessage(bytes,bytes)":"infinite","setGasCap(uint256)":"28041","setMirrorConnector(address)":"30189","verifySender(address)":"435"},"internal":{"_sendMessage(bytes memory,bytes memory)":"infinite","_verifySender(address)":"infinite"}},"methodIdentifiers":{"AMB()":"d69f9d61","DOMAIN()":"52a9674b","MIRROR_DOMAIN()":"14168416","ROOT_MANAGER()":"5f61e3ec","acceptProposedOwner()":"c5b350df","delay()":"6a42b8f8","mirrorConnector()":"cc394283","owner()":"8da5cb5b","processMessage(bytes)":"4ff746f6","processMessageFromRoot(uint32,uint256,uint16,bytes,bytes32[])":"e92a492f","processed(bytes32)":"c1f0808a","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","renounceOwnership()":"715018a6","renounced()":"d232c220","sendMessage(bytes,bytes)":"48e6fa23","setGasCap(uint256)":"7850b020","setMirrorConnector(address)":"5bd11efc","verifySender(address)":"db1b7659"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_mirrorDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_amb\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rootManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_stateCommitmentChain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Connector__processMessage_notUsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_previous\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"GasCapUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"MirrorConnectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"mirrorDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"amb\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mirrorConnector\",\"type\":\"address\"}],\"name\":\"NewConnector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROOT_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_l2BlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_l2MessageIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"_l2TxNumberInBlock\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"_proof\",\"type\":\"bytes32[]\"}],\"name\":\"processMessageFromRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"processed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"}],\"name\":\"setGasCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"}],\"name\":\"setMirrorConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"processMessage(bytes)\":{\"details\":\"This is called by AMBs to process messages originating from mirror connector\"},\"processMessageFromRoot(uint32,uint256,uint16,bytes,bytes32[])\":{\"details\":\"modified from: https://v2-docs.zksync.io/dev/developer-guides/Bridging/l2-l1.html#prove-inclusion-of-the-message-into-the-l2-block\"},\"sendMessage(bytes,bytes)\":{\"details\":\"This is called by the root manager *only* on mainnet to propagate the aggregate root\"}},\"version\":1},\"userdoc\":{\"events\":{\"GasCapUpdated(uint256,uint256)\":{\"notice\":\"Emitted when admin updates the gas cap\"},\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"}},\"kind\":\"user\",\"methods\":{\"AMB()\":{\"notice\":\"Address of the AMB on this domain.\"},\"DOMAIN()\":{\"notice\":\"The domain of this Messaging (i.e. Connector) contract.\"},\"MIRROR_DOMAIN()\":{\"notice\":\"The domain of the corresponding messaging (i.e. Connector) contract.\"},\"ROOT_MANAGER()\":{\"notice\":\"RootManager contract address.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"mirrorConnector()\":{\"notice\":\"Connector on L2 for L1 connectors, and vice versa.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"processMessage(bytes)\":{\"notice\":\"Processes a message received by an AMB\"},\"processMessageFromRoot(uint32,uint256,uint16,bytes,bytes32[])\":{\"notice\":\"Processes message and proves inclusion of that message in the root.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"sendMessage(bytes,bytes)\":{\"notice\":\"Sends a message over the amb\"},\"setMirrorConnector(address)\":{\"notice\":\"Sets the address of the l2Connector for this domain\"},\"verifySender(address)\":{\"notice\":\"Checks the cross domain sender for a given address\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/zksync/ZkSyncHubConnector.sol\":\"ZkSyncHubConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IAllowList.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\ninterface IAllowList {\\n    /*//////////////////////////////////////////////////////////////\\n                            EVENTS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    /// @notice public access is changed\\n    event UpdatePublicAccess(address indexed target, bool newStatus);\\n\\n    /// @notice permission to call is changed\\n    event UpdateCallPermission(address indexed caller, address indexed target, bytes4 indexed functionSig, bool status);\\n\\n    /// @notice pendingOwner is changed\\n    /// @dev Also emitted when the new owner is accepted and in this case, `newPendingOwner` would be zero address\\n    event NewPendingOwner(address indexed oldPendingOwner, address indexed newPendingOwner);\\n\\n    /// @notice Owner changed\\n    event NewOwner(address indexed newOwner);\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            GETTERS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function pendingOwner() external view returns (address);\\n\\n    function owner() external view returns (address);\\n\\n    function isAccessPublic(address _target) external view returns (bool);\\n\\n    function hasSpecialAccessToCall(\\n        address _caller,\\n        address _target,\\n        bytes4 _functionSig\\n    ) external view returns (bool);\\n\\n    function canCall(\\n        address _caller,\\n        address _target,\\n        bytes4 _functionSig\\n    ) external view returns (bool);\\n\\n    /*//////////////////////////////////////////////////////////////\\n                           ALLOW LIST LOGIC\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function setBatchPublicAccess(address[] calldata _targets, bool[] calldata _enables) external;\\n\\n    function setPublicAccess(address _target, bool _enable) external;\\n\\n    function setBatchPermissionToCall(\\n        address[] calldata _callers,\\n        address[] calldata _targets,\\n        bytes4[] calldata _functionSigs,\\n        bool[] calldata _enables\\n    ) external;\\n\\n    function setPermissionToCall(\\n        address _caller,\\n        address _target,\\n        bytes4 _functionSig,\\n        bool _enable\\n    ) external;\\n\\n    function setPendingOwner(address _newPendingOwner) external;\\n\\n    function acceptOwner() external;\\n}\\n\",\"keccak256\":\"0x648fee7e23d2ca13481efc07902a38b817be7606bf288902d72f81a2cabcf2f5\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/common/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n * @dev Unlike EIP-20 standard \\\"transfer\\\" and \\\"transferFrom\\\" functions do not return any value.\\n * This is made to be compatible with popular tokens that are implemented standard incorrectly.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external;\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint256 amount\\n    ) external;\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x5bfbd33ae826ac8185db71bb348c91010938dbb2dd0859ce908f4812ff39d2fe\",\"license\":\"UNLICENSED\"},\"@matterlabs/zksync-contracts/l1/contracts/common/libraries/UncheckedMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nlibrary UncheckedMath {\\n    function uncheckedInc(uint256 _number) internal pure returns (uint256) {\\n        unchecked {\\n            return _number + 1;\\n        }\\n    }\\n\\n    function uncheckedAdd(uint256 _lhs, uint256 _rhs) internal pure returns (uint256) {\\n        unchecked {\\n            return _lhs + _rhs;\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x7d0dff9b45338f35b32bc711192aec50973e13dc74b8e941d64586b510179c12\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/Plonk4VerifierWithAccessToDNext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/PairingsBn254.sol\\\";\\nimport \\\"./libraries/TranscriptLib.sol\\\";\\nimport \\\"../common/libraries/UncheckedMath.sol\\\";\\n\\nuint256 constant STATE_WIDTH = 4;\\nuint256 constant NUM_G2_ELS = 2;\\n\\nstruct VerificationKey {\\n    uint256 domain_size;\\n    uint256 num_inputs;\\n    PairingsBn254.Fr omega;\\n    PairingsBn254.G1Point[2] gate_selectors_commitments;\\n    PairingsBn254.G1Point[7] gate_setup_commitments;\\n    PairingsBn254.G1Point[STATE_WIDTH] permutation_commitments;\\n    PairingsBn254.G1Point lookup_selector_commitment;\\n    PairingsBn254.G1Point[4] lookup_tables_commitments;\\n    PairingsBn254.G1Point lookup_table_type_commitment;\\n    PairingsBn254.Fr[STATE_WIDTH - 1] non_residues;\\n    PairingsBn254.G2Point[NUM_G2_ELS] g2_elements;\\n}\\n\\ncontract Plonk4VerifierWithAccessToDNext {\\n    using PairingsBn254 for PairingsBn254.G1Point;\\n    using PairingsBn254 for PairingsBn254.G2Point;\\n    using PairingsBn254 for PairingsBn254.Fr;\\n\\n    using TranscriptLib for TranscriptLib.Transcript;\\n\\n    using UncheckedMath for uint256;\\n\\n    struct Proof {\\n        uint256[] input_values;\\n        // commitments\\n        PairingsBn254.G1Point[STATE_WIDTH] state_polys_commitments;\\n        PairingsBn254.G1Point copy_permutation_grand_product_commitment;\\n        PairingsBn254.G1Point[STATE_WIDTH] quotient_poly_parts_commitments;\\n        // openings\\n        PairingsBn254.Fr[STATE_WIDTH] state_polys_openings_at_z;\\n        PairingsBn254.Fr[1] state_polys_openings_at_z_omega; // TODO: not use array while there is only D_next\\n        PairingsBn254.Fr[1] gate_selectors_openings_at_z;\\n        PairingsBn254.Fr[STATE_WIDTH - 1] copy_permutation_polys_openings_at_z;\\n        PairingsBn254.Fr copy_permutation_grand_product_opening_at_z_omega;\\n        PairingsBn254.Fr quotient_poly_opening_at_z;\\n        PairingsBn254.Fr linearization_poly_opening_at_z;\\n        // lookup commitments\\n        PairingsBn254.G1Point lookup_s_poly_commitment;\\n        PairingsBn254.G1Point lookup_grand_product_commitment;\\n        // lookup openings\\n        PairingsBn254.Fr lookup_s_poly_opening_at_z_omega;\\n        PairingsBn254.Fr lookup_grand_product_opening_at_z_omega;\\n        PairingsBn254.Fr lookup_t_poly_opening_at_z;\\n        PairingsBn254.Fr lookup_t_poly_opening_at_z_omega;\\n        PairingsBn254.Fr lookup_selector_poly_opening_at_z;\\n        PairingsBn254.Fr lookup_table_type_poly_opening_at_z;\\n        PairingsBn254.G1Point opening_proof_at_z;\\n        PairingsBn254.G1Point opening_proof_at_z_omega;\\n    }\\n\\n    struct PartialVerifierState {\\n        PairingsBn254.Fr zero;\\n        PairingsBn254.Fr alpha;\\n        PairingsBn254.Fr beta;\\n        PairingsBn254.Fr gamma;\\n        PairingsBn254.Fr[9] alpha_values;\\n        PairingsBn254.Fr eta;\\n        PairingsBn254.Fr beta_lookup;\\n        PairingsBn254.Fr gamma_lookup;\\n        PairingsBn254.Fr beta_plus_one;\\n        PairingsBn254.Fr beta_gamma;\\n        PairingsBn254.Fr v;\\n        PairingsBn254.Fr u;\\n        PairingsBn254.Fr z;\\n        PairingsBn254.Fr z_omega;\\n        PairingsBn254.Fr z_minus_last_omega;\\n        PairingsBn254.Fr l_0_at_z;\\n        PairingsBn254.Fr l_n_minus_one_at_z;\\n        PairingsBn254.Fr t;\\n        PairingsBn254.G1Point tp;\\n    }\\n\\n    function evaluate_l0_at_point(uint256 domain_size, PairingsBn254.Fr memory at)\\n        internal\\n        view\\n        returns (PairingsBn254.Fr memory num)\\n    {\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n\\n        PairingsBn254.Fr memory size_fe = PairingsBn254.new_fr(domain_size);\\n        PairingsBn254.Fr memory den = at.copy();\\n        den.sub_assign(one);\\n        den.mul_assign(size_fe);\\n\\n        den = den.inverse();\\n\\n        num = at.pow(domain_size);\\n        num.sub_assign(one);\\n        num.mul_assign(den);\\n    }\\n\\n    function evaluate_lagrange_poly_out_of_domain(\\n        uint256 poly_num,\\n        uint256 domain_size,\\n        PairingsBn254.Fr memory omega,\\n        PairingsBn254.Fr memory at\\n    ) internal view returns (PairingsBn254.Fr memory res) {\\n        // (omega^i / N) / (X - omega^i) * (X^N - 1)\\n        require(poly_num < domain_size);\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n        PairingsBn254.Fr memory omega_power = omega.pow(poly_num);\\n        res = at.pow(domain_size);\\n        res.sub_assign(one);\\n        require(res.value != 0); // Vanishing polynomial can not be zero at point `at`\\n        res.mul_assign(omega_power);\\n\\n        PairingsBn254.Fr memory den = PairingsBn254.copy(at);\\n        den.sub_assign(omega_power);\\n        den.mul_assign(PairingsBn254.new_fr(domain_size));\\n\\n        den = den.inverse();\\n\\n        res.mul_assign(den);\\n    }\\n\\n    function evaluate_vanishing(uint256 domain_size, PairingsBn254.Fr memory at)\\n        internal\\n        view\\n        returns (PairingsBn254.Fr memory res)\\n    {\\n        res = at.pow(domain_size);\\n        res.sub_assign(PairingsBn254.new_fr(1));\\n    }\\n\\n    function initialize_transcript(Proof memory proof, VerificationKey memory vk)\\n        internal\\n        pure\\n        returns (PartialVerifierState memory state)\\n    {\\n        TranscriptLib.Transcript memory transcript = TranscriptLib.new_transcript();\\n\\n        for (uint256 i = 0; i < vk.num_inputs; i = i.uncheckedInc()) {\\n            transcript.update_with_u256(proof.input_values[i]);\\n        }\\n\\n        for (uint256 i = 0; i < STATE_WIDTH; i = i.uncheckedInc()) {\\n            transcript.update_with_g1(proof.state_polys_commitments[i]);\\n        }\\n\\n        state.eta = transcript.get_challenge();\\n        transcript.update_with_g1(proof.lookup_s_poly_commitment);\\n\\n        state.beta = transcript.get_challenge();\\n        state.gamma = transcript.get_challenge();\\n\\n        transcript.update_with_g1(proof.copy_permutation_grand_product_commitment);\\n        state.beta_lookup = transcript.get_challenge();\\n        state.gamma_lookup = transcript.get_challenge();\\n        transcript.update_with_g1(proof.lookup_grand_product_commitment);\\n        state.alpha = transcript.get_challenge();\\n\\n        for (uint256 i = 0; i < proof.quotient_poly_parts_commitments.length; i = i.uncheckedInc()) {\\n            transcript.update_with_g1(proof.quotient_poly_parts_commitments[i]);\\n        }\\n        state.z = transcript.get_challenge();\\n\\n        transcript.update_with_fr(proof.quotient_poly_opening_at_z);\\n\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.state_polys_openings_at_z[i]);\\n        }\\n\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z_omega.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.state_polys_openings_at_z_omega[i]);\\n        }\\n        for (uint256 i = 0; i < proof.gate_selectors_openings_at_z.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.gate_selectors_openings_at_z[i]);\\n        }\\n        for (uint256 i = 0; i < proof.copy_permutation_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            transcript.update_with_fr(proof.copy_permutation_polys_openings_at_z[i]);\\n        }\\n\\n        state.z_omega = state.z.copy();\\n        state.z_omega.mul_assign(vk.omega);\\n\\n        transcript.update_with_fr(proof.copy_permutation_grand_product_opening_at_z_omega);\\n\\n        transcript.update_with_fr(proof.lookup_t_poly_opening_at_z);\\n        transcript.update_with_fr(proof.lookup_selector_poly_opening_at_z);\\n        transcript.update_with_fr(proof.lookup_table_type_poly_opening_at_z);\\n        transcript.update_with_fr(proof.lookup_s_poly_opening_at_z_omega);\\n        transcript.update_with_fr(proof.lookup_grand_product_opening_at_z_omega);\\n        transcript.update_with_fr(proof.lookup_t_poly_opening_at_z_omega);\\n        transcript.update_with_fr(proof.linearization_poly_opening_at_z);\\n\\n        state.v = transcript.get_challenge();\\n\\n        transcript.update_with_g1(proof.opening_proof_at_z);\\n        transcript.update_with_g1(proof.opening_proof_at_z_omega);\\n\\n        state.u = transcript.get_challenge();\\n    }\\n\\n    // compute some powers of challenge alpha([alpha^1, .. alpha^8])\\n    function compute_powers_of_alpha(PartialVerifierState memory state) public pure {\\n        require(state.alpha.value != 0);\\n        state.alpha_values[0] = PairingsBn254.new_fr(1);\\n        state.alpha_values[1] = state.alpha.copy();\\n        PairingsBn254.Fr memory current_alpha = state.alpha.copy();\\n        for (uint256 i = 2; i < state.alpha_values.length; i = i.uncheckedInc()) {\\n            current_alpha.mul_assign(state.alpha);\\n            state.alpha_values[i] = current_alpha.copy();\\n        }\\n    }\\n\\n    function verify(Proof memory proof, VerificationKey memory vk) internal view returns (bool) {\\n        // we initialize all challenges beforehand, we can draw each challenge in its own place\\n        PartialVerifierState memory state = initialize_transcript(proof, vk);\\n        if (verify_quotient_evaluation(vk, proof, state) == false) {\\n            return false;\\n        }\\n        require(proof.state_polys_openings_at_z_omega.length == 1); // TODO\\n\\n        PairingsBn254.G1Point memory quotient_result = proof.quotient_poly_parts_commitments[0].copy_g1();\\n        {\\n            // block scope\\n            PairingsBn254.Fr memory z_in_domain_size = state.z.pow(vk.domain_size);\\n            PairingsBn254.Fr memory current_z = z_in_domain_size.copy();\\n            PairingsBn254.G1Point memory tp;\\n            // start from i =1\\n            for (uint256 i = 1; i < proof.quotient_poly_parts_commitments.length; i = i.uncheckedInc()) {\\n                tp = proof.quotient_poly_parts_commitments[i].copy_g1();\\n                tp.point_mul_assign(current_z);\\n                quotient_result.point_add_assign(tp);\\n\\n                current_z.mul_assign(z_in_domain_size);\\n            }\\n        }\\n\\n        Queries memory queries = prepare_queries(vk, proof, state);\\n        queries.commitments_at_z[0] = quotient_result;\\n        queries.values_at_z[0] = proof.quotient_poly_opening_at_z;\\n        queries.commitments_at_z[1] = aggregated_linearization_commitment(vk, proof, state);\\n        queries.values_at_z[1] = proof.linearization_poly_opening_at_z;\\n\\n        require(queries.commitments_at_z.length == queries.values_at_z.length);\\n\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z = queries.commitments_at_z[0];\\n\\n        PairingsBn254.Fr memory aggregated_opening_at_z = queries.values_at_z[0];\\n        PairingsBn254.Fr memory aggregation_challenge = PairingsBn254.new_fr(1);\\n        PairingsBn254.G1Point memory scaled;\\n        for (uint256 i = 1; i < queries.commitments_at_z.length; i = i.uncheckedInc()) {\\n            aggregation_challenge.mul_assign(state.v);\\n            scaled = queries.commitments_at_z[i].point_mul(aggregation_challenge);\\n            aggregated_commitment_at_z.point_add_assign(scaled);\\n\\n            state.t = queries.values_at_z[i];\\n            state.t.mul_assign(aggregation_challenge);\\n            aggregated_opening_at_z.add_assign(state.t);\\n        }\\n\\n        aggregation_challenge.mul_assign(state.v);\\n\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z_omega = queries.commitments_at_z_omega[0].point_mul(\\n            aggregation_challenge\\n        );\\n        PairingsBn254.Fr memory aggregated_opening_at_z_omega = queries.values_at_z_omega[0];\\n        aggregated_opening_at_z_omega.mul_assign(aggregation_challenge);\\n        for (uint256 i = 1; i < queries.commitments_at_z_omega.length; i = i.uncheckedInc()) {\\n            aggregation_challenge.mul_assign(state.v);\\n\\n            scaled = queries.commitments_at_z_omega[i].point_mul(aggregation_challenge);\\n            aggregated_commitment_at_z_omega.point_add_assign(scaled);\\n\\n            state.t = queries.values_at_z_omega[i];\\n            state.t.mul_assign(aggregation_challenge);\\n            aggregated_opening_at_z_omega.add_assign(state.t);\\n        }\\n\\n        return\\n            final_pairing(\\n                vk.g2_elements,\\n                proof,\\n                state,\\n                aggregated_commitment_at_z,\\n                aggregated_commitment_at_z_omega,\\n                aggregated_opening_at_z,\\n                aggregated_opening_at_z_omega\\n            );\\n    }\\n\\n    function verify_quotient_evaluation(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) internal view returns (bool) {\\n        uint256[] memory lagrange_poly_numbers = new uint256[](vk.num_inputs);\\n        for (uint256 i = 0; i < lagrange_poly_numbers.length; i = i.uncheckedInc()) {\\n            lagrange_poly_numbers[i] = i;\\n        }\\n        // require(vk.num_inputs > 0); // TODO\\n\\n        PairingsBn254.Fr memory inputs_term = PairingsBn254.new_fr(0);\\n        for (uint256 i = 0; i < vk.num_inputs; i = i.uncheckedInc()) {\\n            // TODO we may use batched lagrange compputation\\n            state.t = evaluate_lagrange_poly_out_of_domain(i, vk.domain_size, vk.omega, state.z);\\n            state.t.mul_assign(PairingsBn254.new_fr(proof.input_values[i]));\\n            inputs_term.add_assign(state.t);\\n        }\\n        inputs_term.mul_assign(proof.gate_selectors_openings_at_z[0]);\\n        PairingsBn254.Fr memory result = proof.linearization_poly_opening_at_z.copy();\\n        result.add_assign(inputs_term);\\n\\n        // compute powers of alpha\\n        compute_powers_of_alpha(state);\\n        PairingsBn254.Fr memory factor = state.alpha_values[4].copy();\\n        factor.mul_assign(proof.copy_permutation_grand_product_opening_at_z_omega);\\n\\n        // - alpha_0 * (a + perm(z) * beta + gamma)*()*(d + gamma) * z(z*omega)\\n        require(proof.copy_permutation_polys_openings_at_z.length == STATE_WIDTH - 1);\\n        PairingsBn254.Fr memory t; // TMP;\\n        for (uint256 i = 0; i < proof.copy_permutation_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            t = proof.copy_permutation_polys_openings_at_z[i].copy();\\n            t.mul_assign(state.beta);\\n            t.add_assign(proof.state_polys_openings_at_z[i]);\\n            t.add_assign(state.gamma);\\n\\n            factor.mul_assign(t);\\n        }\\n\\n        t = proof.state_polys_openings_at_z[3].copy();\\n        t.add_assign(state.gamma);\\n        factor.mul_assign(t);\\n        result.sub_assign(factor);\\n\\n        // - L_0(z) * alpha_1\\n        PairingsBn254.Fr memory l_0_at_z = evaluate_l0_at_point(vk.domain_size, state.z);\\n        l_0_at_z.mul_assign(state.alpha_values[4 + 1]);\\n        result.sub_assign(l_0_at_z);\\n\\n        PairingsBn254.Fr memory lookup_quotient_contrib = lookup_quotient_contribution(vk, proof, state);\\n        result.add_assign(lookup_quotient_contrib);\\n\\n        PairingsBn254.Fr memory lhs = proof.quotient_poly_opening_at_z.copy();\\n        lhs.mul_assign(evaluate_vanishing(vk.domain_size, state.z));\\n        return lhs.value == result.value;\\n    }\\n\\n    function lookup_quotient_contribution(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) internal view returns (PairingsBn254.Fr memory result) {\\n        PairingsBn254.Fr memory t;\\n\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n        state.beta_plus_one = state.beta_lookup.copy();\\n        state.beta_plus_one.add_assign(one);\\n        state.beta_gamma = state.beta_plus_one.copy();\\n        state.beta_gamma.mul_assign(state.gamma_lookup);\\n\\n        // (s'*beta + gamma)*(zw')*alpha\\n        t = proof.lookup_s_poly_opening_at_z_omega.copy();\\n        t.mul_assign(state.beta_lookup);\\n        t.add_assign(state.beta_gamma);\\n        t.mul_assign(proof.lookup_grand_product_opening_at_z_omega);\\n        t.mul_assign(state.alpha_values[6]);\\n\\n        // (z - omega^{n-1}) for this part\\n        PairingsBn254.Fr memory last_omega = vk.omega.pow(vk.domain_size - 1);\\n        state.z_minus_last_omega = state.z.copy();\\n        state.z_minus_last_omega.sub_assign(last_omega);\\n        t.mul_assign(state.z_minus_last_omega);\\n        result.add_assign(t);\\n\\n        // - alpha_1 * L_{0}(z)\\n        state.l_0_at_z = evaluate_lagrange_poly_out_of_domain(0, vk.domain_size, vk.omega, state.z);\\n        t = state.l_0_at_z.copy();\\n        t.mul_assign(state.alpha_values[6 + 1]);\\n        result.sub_assign(t);\\n\\n        // - alpha_2 * beta_gamma_powered L_{n-1}(z)\\n        PairingsBn254.Fr memory beta_gamma_powered = state.beta_gamma.pow(vk.domain_size - 1);\\n        state.l_n_minus_one_at_z = evaluate_lagrange_poly_out_of_domain(\\n            vk.domain_size - 1,\\n            vk.domain_size,\\n            vk.omega,\\n            state.z\\n        );\\n        t = state.l_n_minus_one_at_z.copy();\\n        t.mul_assign(beta_gamma_powered);\\n        t.mul_assign(state.alpha_values[6 + 2]);\\n\\n        result.sub_assign(t);\\n    }\\n\\n    function aggregated_linearization_commitment(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) internal view returns (PairingsBn254.G1Point memory result) {\\n        // qMain*(Q_a * A + Q_b * B + Q_c * C + Q_d * D + Q_m * A*B + Q_const + Q_dNext * D_next)\\n        result = PairingsBn254.new_g1(0, 0);\\n        // Q_a * A\\n        PairingsBn254.G1Point memory scaled = vk.gate_setup_commitments[0].point_mul(\\n            proof.state_polys_openings_at_z[0]\\n        );\\n        result.point_add_assign(scaled);\\n        // Q_b * B\\n        scaled = vk.gate_setup_commitments[1].point_mul(proof.state_polys_openings_at_z[1]);\\n        result.point_add_assign(scaled);\\n        // Q_c * C\\n        scaled = vk.gate_setup_commitments[2].point_mul(proof.state_polys_openings_at_z[2]);\\n        result.point_add_assign(scaled);\\n        // Q_d * D\\n        scaled = vk.gate_setup_commitments[3].point_mul(proof.state_polys_openings_at_z[3]);\\n        result.point_add_assign(scaled);\\n        // Q_m* A*B or Q_ab*A*B\\n        PairingsBn254.Fr memory t = proof.state_polys_openings_at_z[0].copy();\\n        t.mul_assign(proof.state_polys_openings_at_z[1]);\\n        scaled = vk.gate_setup_commitments[4].point_mul(t);\\n        result.point_add_assign(scaled);\\n        // Q_const\\n        result.point_add_assign(vk.gate_setup_commitments[5]);\\n        // Q_dNext * D_next\\n        scaled = vk.gate_setup_commitments[6].point_mul(proof.state_polys_openings_at_z_omega[0]);\\n        result.point_add_assign(scaled);\\n        result.point_mul_assign(proof.gate_selectors_openings_at_z[0]);\\n\\n        PairingsBn254.G1Point\\n            memory rescue_custom_gate_linearization_contrib = rescue_custom_gate_linearization_contribution(\\n                vk,\\n                proof,\\n                state\\n            );\\n        result.point_add_assign(rescue_custom_gate_linearization_contrib);\\n        require(vk.non_residues.length == STATE_WIDTH - 1);\\n\\n        PairingsBn254.Fr memory one = PairingsBn254.new_fr(1);\\n        PairingsBn254.Fr memory factor = state.alpha_values[4].copy();\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z.length; ) {\\n            t = state.z.copy();\\n            if (i == 0) {\\n                t.mul_assign(one);\\n            } else {\\n                t.mul_assign(vk.non_residues[i - 1]); // TODO add one into non-residues during codegen?\\n            }\\n            t.mul_assign(state.beta);\\n            t.add_assign(state.gamma);\\n            t.add_assign(proof.state_polys_openings_at_z[i]);\\n\\n            factor.mul_assign(t);\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n\\n        scaled = proof.copy_permutation_grand_product_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n\\n        // - (a(z) + beta*perm_a + gamma)*()*()*z(z*omega) * beta * perm_d(X)\\n        factor = state.alpha_values[4].copy();\\n        factor.mul_assign(state.beta);\\n        factor.mul_assign(proof.copy_permutation_grand_product_opening_at_z_omega);\\n        for (uint256 i = 0; i < STATE_WIDTH - 1; i = i.uncheckedInc()) {\\n            t = proof.copy_permutation_polys_openings_at_z[i].copy();\\n            t.mul_assign(state.beta);\\n            t.add_assign(state.gamma);\\n            t.add_assign(proof.state_polys_openings_at_z[i]);\\n\\n            factor.mul_assign(t);\\n        }\\n        scaled = vk.permutation_commitments[3].point_mul(factor);\\n        result.point_sub_assign(scaled);\\n\\n        // + L_0(z) * Z(x)\\n        // TODO\\n        state.l_0_at_z = evaluate_lagrange_poly_out_of_domain(0, vk.domain_size, vk.omega, state.z);\\n        require(state.l_0_at_z.value != 0);\\n        factor = state.l_0_at_z.copy();\\n        factor.mul_assign(state.alpha_values[4 + 1]);\\n        scaled = proof.copy_permutation_grand_product_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n\\n        PairingsBn254.G1Point memory lookup_linearization_contrib = lookup_linearization_contribution(proof, state);\\n        result.point_add_assign(lookup_linearization_contrib);\\n    }\\n\\n    function rescue_custom_gate_linearization_contribution(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) public view returns (PairingsBn254.G1Point memory result) {\\n        PairingsBn254.Fr memory t;\\n        PairingsBn254.Fr memory intermediate_result;\\n\\n        // a^2 - b = 0\\n        t = proof.state_polys_openings_at_z[0].copy();\\n        t.mul_assign(t);\\n        t.sub_assign(proof.state_polys_openings_at_z[1]);\\n        // t.mul_assign(challenge1);\\n        t.mul_assign(state.alpha_values[1]);\\n        intermediate_result.add_assign(t);\\n\\n        // b^2 - c = 0\\n        t = proof.state_polys_openings_at_z[1].copy();\\n        t.mul_assign(t);\\n        t.sub_assign(proof.state_polys_openings_at_z[2]);\\n        t.mul_assign(state.alpha_values[1 + 1]);\\n        intermediate_result.add_assign(t);\\n\\n        // c*a - d = 0;\\n        t = proof.state_polys_openings_at_z[2].copy();\\n        t.mul_assign(proof.state_polys_openings_at_z[0]);\\n        t.sub_assign(proof.state_polys_openings_at_z[3]);\\n        t.mul_assign(state.alpha_values[1 + 2]);\\n        intermediate_result.add_assign(t);\\n\\n        result = vk.gate_selectors_commitments[1].point_mul(intermediate_result);\\n    }\\n\\n    function lookup_linearization_contribution(Proof memory proof, PartialVerifierState memory state)\\n        internal\\n        view\\n        returns (PairingsBn254.G1Point memory result)\\n    {\\n        PairingsBn254.Fr memory zero = PairingsBn254.new_fr(0);\\n\\n        PairingsBn254.Fr memory t;\\n        PairingsBn254.Fr memory factor;\\n        // s(x) from the Z(x*omega)*(\\\\gamma*(1 + \\\\beta) + s(x) + \\\\beta * s(x*omega)))\\n        factor = proof.lookup_grand_product_opening_at_z_omega.copy();\\n        factor.mul_assign(state.alpha_values[6]);\\n        factor.mul_assign(state.z_minus_last_omega);\\n\\n        PairingsBn254.G1Point memory scaled = proof.lookup_s_poly_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n\\n        // Z(x) from - alpha_0 * Z(x) * (\\\\beta + 1) * (\\\\gamma + f(x)) * (\\\\gamma(1 + \\\\beta) + t(x) + \\\\beta * t(x*omega))\\n        // + alpha_1 * Z(x) * L_{0}(z) + alpha_2 * Z(x) * L_{n-1}(z)\\n\\n        // accumulate coefficient\\n        factor = proof.lookup_t_poly_opening_at_z_omega.copy();\\n        factor.mul_assign(state.beta_lookup);\\n        factor.add_assign(proof.lookup_t_poly_opening_at_z);\\n        factor.add_assign(state.beta_gamma);\\n\\n        // (\\\\gamma + f(x))\\n        PairingsBn254.Fr memory f_reconstructed;\\n        PairingsBn254.Fr memory current = PairingsBn254.new_fr(1);\\n        PairingsBn254.Fr memory tmp0;\\n        for (uint256 i = 0; i < STATE_WIDTH - 1; i = i.uncheckedInc()) {\\n            tmp0 = proof.state_polys_openings_at_z[i].copy();\\n            tmp0.mul_assign(current);\\n            f_reconstructed.add_assign(tmp0);\\n\\n            current.mul_assign(state.eta);\\n        }\\n\\n        // add type of table\\n        t = proof.lookup_table_type_poly_opening_at_z.copy();\\n        t.mul_assign(current);\\n        f_reconstructed.add_assign(t);\\n\\n        f_reconstructed.mul_assign(proof.lookup_selector_poly_opening_at_z);\\n        f_reconstructed.add_assign(state.gamma_lookup);\\n\\n        // end of (\\\\gamma + f(x)) part\\n        factor.mul_assign(f_reconstructed);\\n        factor.mul_assign(state.beta_plus_one);\\n        t = zero.copy();\\n        t.sub_assign(factor);\\n        factor = t;\\n        factor.mul_assign(state.alpha_values[6]);\\n\\n        // Multiply by (z - omega^{n-1})\\n        factor.mul_assign(state.z_minus_last_omega);\\n\\n        // L_{0}(z) in front of Z(x)\\n        t = state.l_0_at_z.copy();\\n        t.mul_assign(state.alpha_values[6 + 1]);\\n        factor.add_assign(t);\\n\\n        // L_{n-1}(z) in front of Z(x)\\n        t = state.l_n_minus_one_at_z.copy();\\n        t.mul_assign(state.alpha_values[6 + 2]);\\n        factor.add_assign(t);\\n\\n        scaled = proof.lookup_grand_product_commitment.point_mul(factor);\\n        result.point_add_assign(scaled);\\n    }\\n\\n    struct Queries {\\n        PairingsBn254.G1Point[13] commitments_at_z;\\n        PairingsBn254.Fr[13] values_at_z;\\n        PairingsBn254.G1Point[6] commitments_at_z_omega;\\n        PairingsBn254.Fr[6] values_at_z_omega;\\n    }\\n\\n    function prepare_queries(\\n        VerificationKey memory vk,\\n        Proof memory proof,\\n        PartialVerifierState memory state\\n    ) public view returns (Queries memory queries) {\\n        // we set first two items in calee side so start idx from 2\\n        uint256 idx = 2;\\n        for (uint256 i = 0; i < STATE_WIDTH; i = i.uncheckedInc()) {\\n            queries.commitments_at_z[idx] = proof.state_polys_commitments[i];\\n            queries.values_at_z[idx] = proof.state_polys_openings_at_z[i];\\n            idx = idx.uncheckedInc();\\n        }\\n        require(proof.gate_selectors_openings_at_z.length == 1);\\n        queries.commitments_at_z[idx] = vk.gate_selectors_commitments[0];\\n        queries.values_at_z[idx] = proof.gate_selectors_openings_at_z[0];\\n        idx = idx.uncheckedInc();\\n        for (uint256 i = 0; i < STATE_WIDTH - 1; i = i.uncheckedInc()) {\\n            queries.commitments_at_z[idx] = vk.permutation_commitments[i];\\n            queries.values_at_z[idx] = proof.copy_permutation_polys_openings_at_z[i];\\n            idx = idx.uncheckedInc();\\n        }\\n\\n        queries.commitments_at_z_omega[0] = proof.copy_permutation_grand_product_commitment;\\n        queries.commitments_at_z_omega[1] = proof.state_polys_commitments[STATE_WIDTH - 1];\\n\\n        queries.values_at_z_omega[0] = proof.copy_permutation_grand_product_opening_at_z_omega;\\n        queries.values_at_z_omega[1] = proof.state_polys_openings_at_z_omega[0];\\n\\n        PairingsBn254.G1Point memory lookup_t_poly_commitment_aggregated = vk.lookup_tables_commitments[0];\\n        PairingsBn254.Fr memory current_eta = state.eta.copy();\\n        for (uint256 i = 1; i < vk.lookup_tables_commitments.length; i = i.uncheckedInc()) {\\n            state.tp = vk.lookup_tables_commitments[i].point_mul(current_eta);\\n            lookup_t_poly_commitment_aggregated.point_add_assign(state.tp);\\n\\n            current_eta.mul_assign(state.eta);\\n        }\\n        queries.commitments_at_z[idx] = lookup_t_poly_commitment_aggregated;\\n        queries.values_at_z[idx] = proof.lookup_t_poly_opening_at_z;\\n        idx = idx.uncheckedInc();\\n        queries.commitments_at_z[idx] = vk.lookup_selector_commitment;\\n        queries.values_at_z[idx] = proof.lookup_selector_poly_opening_at_z;\\n        idx = idx.uncheckedInc();\\n        queries.commitments_at_z[idx] = vk.lookup_table_type_commitment;\\n        queries.values_at_z[idx] = proof.lookup_table_type_poly_opening_at_z;\\n        queries.commitments_at_z_omega[2] = proof.lookup_s_poly_commitment;\\n        queries.values_at_z_omega[2] = proof.lookup_s_poly_opening_at_z_omega;\\n        queries.commitments_at_z_omega[3] = proof.lookup_grand_product_commitment;\\n        queries.values_at_z_omega[3] = proof.lookup_grand_product_opening_at_z_omega;\\n        queries.commitments_at_z_omega[4] = lookup_t_poly_commitment_aggregated;\\n        queries.values_at_z_omega[4] = proof.lookup_t_poly_opening_at_z_omega;\\n    }\\n\\n    function final_pairing(\\n        // VerificationKey memory vk,\\n        PairingsBn254.G2Point[NUM_G2_ELS] memory g2_elements,\\n        Proof memory proof,\\n        PartialVerifierState memory state,\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z,\\n        PairingsBn254.G1Point memory aggregated_commitment_at_z_omega,\\n        PairingsBn254.Fr memory aggregated_opening_at_z,\\n        PairingsBn254.Fr memory aggregated_opening_at_z_omega\\n    ) internal view returns (bool) {\\n        // q(x) = f(x) - f(z) / (x - z)\\n        // q(x) * (x-z)  = f(x) - f(z)\\n\\n        // f(x)\\n        PairingsBn254.G1Point memory pair_with_generator = aggregated_commitment_at_z.copy_g1();\\n        aggregated_commitment_at_z_omega.point_mul_assign(state.u);\\n        pair_with_generator.point_add_assign(aggregated_commitment_at_z_omega);\\n\\n        // - f(z)*g\\n        PairingsBn254.Fr memory aggregated_value = aggregated_opening_at_z_omega.copy();\\n        aggregated_value.mul_assign(state.u);\\n        aggregated_value.add_assign(aggregated_opening_at_z);\\n        PairingsBn254.G1Point memory tp = PairingsBn254.P1().point_mul(aggregated_value);\\n        pair_with_generator.point_sub_assign(tp);\\n\\n        // +z * q(x)\\n        tp = proof.opening_proof_at_z.point_mul(state.z);\\n        PairingsBn254.Fr memory t = state.z_omega.copy();\\n        t.mul_assign(state.u);\\n        PairingsBn254.G1Point memory t1 = proof.opening_proof_at_z_omega.point_mul(t);\\n        tp.point_add_assign(t1);\\n        pair_with_generator.point_add_assign(tp);\\n\\n        // rhs\\n        PairingsBn254.G1Point memory pair_with_x = proof.opening_proof_at_z_omega.point_mul(state.u);\\n        pair_with_x.point_add_assign(proof.opening_proof_at_z);\\n        pair_with_x.negate();\\n        // Pairing precompile expects points to be in a `i*x[1] + x[0]` form instead of `x[0] + i*x[1]`\\n        // so we handle it in code generation step\\n        PairingsBn254.G2Point memory first_g2 = g2_elements[0];\\n        PairingsBn254.G2Point memory second_g2 = g2_elements[1];\\n        PairingsBn254.G2Point memory gen2 = PairingsBn254.P2();\\n\\n        return PairingsBn254.pairingProd2(pair_with_generator, first_g2, pair_with_x, second_g2);\\n    }\\n}\\n\",\"keccak256\":\"0x3ef4937c0ab65a60baabb5b00ece282148267f94bc6c087254faf925c2bdc7d2\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/Storage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Verifier.sol\\\";\\nimport \\\"../common/interfaces/IAllowList.sol\\\";\\nimport \\\"./libraries/PriorityQueue.sol\\\";\\n\\n/// @dev Logically separated part of the storage structure, which is responsible for everything related to proxy upgrades and diamond cuts\\n/// @param proposedDiamondCutHash The hash of diamond cut that was proposed in the current upgrade\\n/// @param proposedDiamondCutTimestamp The timestamp when the diamond cut was proposed, zero if there are no active proposals\\n/// @param lastDiamondFreezeTimestamp The timestamp when the diamond was frozen last time, zero if the diamond was never frozen\\n/// @param currentProposalId The serial number of proposed diamond cuts, increments when proposing a new diamond cut\\n/// @param securityCouncilMembers The set of the trusted\\u00a0addresses that can instantly finish upgrade (diamond cut)\\n/// @param securityCouncilMemberLastApprovedProposalId The mapping of the security council addresses and the last diamond cut that they approved\\n/// @param securityCouncilEmergencyApprovals The number of received upgrade approvals from the security council\\nstruct DiamondCutStorage {\\n    bytes32 proposedDiamondCutHash;\\n    uint256 proposedDiamondCutTimestamp;\\n    uint256 lastDiamondFreezeTimestamp;\\n    uint256 currentProposalId;\\n    mapping(address => bool) securityCouncilMembers;\\n    mapping(address => uint256) securityCouncilMemberLastApprovedProposalId;\\n    uint256 securityCouncilEmergencyApprovals;\\n}\\n\\n/// @dev The log passed from L2\\n/// @param l2ShardId The shard identifier, 0 - rollup, 1 - porter. All other values are not used but are reserved for the future\\n/// @param isService A boolean flag that is part of the log along with `key`, `value`, and `sender` address.\\n/// This field is required formally but does not have any special meaning.\\n/// @param txNumberInBlock The L2 transaction number in a block, in which the log was sent\\n/// @param sender The L2 address which sent the log\\n/// @param key The 32 bytes of information that was sent in the log\\n/// @param value The 32 bytes of information that was sent in the log\\n// Both `key` and `value` are arbitrary 32-bytes selected by the log sender\\nstruct L2Log {\\n    uint8 l2ShardId;\\n    bool isService;\\n    uint16 txNumberInBlock;\\n    address sender;\\n    bytes32 key;\\n    bytes32 value;\\n}\\n\\n/// @dev An arbitrary length message passed from L2\\n/// @notice Under the hood it is `L2Log` sent from the special system L2 contract\\n/// @param txNumberInBlock The L2 transaction number in a block, in which the message was sent\\n/// @param sender The address of the L2 account from which the message was passed\\n/// @param data An arbitrary length message\\nstruct L2Message {\\n    uint16 txNumberInBlock;\\n    address sender;\\n    bytes data;\\n}\\n\\n/// @notice Part of the configuration parameters of ZKP circuits\\nstruct VerifierParams {\\n    bytes32 recursionNodeLevelVkHash;\\n    bytes32 recursionLeafLevelVkHash;\\n    bytes32 recursionCircuitsSetVksHash;\\n}\\n\\n/// @dev storing all storage variables for zkSync facets\\n/// NOTE: It is used in a proxy, so it is possible to add new variables to the end\\n/// NOTE: but NOT to modify already existing variables or change their order\\nstruct AppStorage {\\n    /// @dev Storage of variables needed for diamond cut facet\\n    DiamondCutStorage diamondCutStorage;\\n    /// @notice Address which will exercise governance over the network i.e. change validator set, conduct upgrades\\n    address governor;\\n    /// @notice Address that governor proposed as one that will replace it\\n    address pendingGovernor;\\n    /// @notice List of permitted validators\\n    mapping(address => bool) validators;\\n    // TODO: should be used an external library approach\\n    /// @dev Verifier contract. Used to verify aggregated proof for blocks\\n    Verifier verifier;\\n    /// @notice Total number of executed blocks i.e. blocks[totalBlocksExecuted] points at the latest executed block (block 0 is genesis)\\n    uint256 totalBlocksExecuted;\\n    /// @notice Total number of proved blocks i.e. blocks[totalBlocksProved] points at the latest proved block\\n    uint256 totalBlocksVerified;\\n    /// @notice Total number of committed blocks i.e. blocks[totalBlocksCommitted] points at the latest committed block\\n    uint256 totalBlocksCommitted;\\n    /// @dev Stored hashed StoredBlock for block number\\n    mapping(uint256 => bytes32) storedBlockHashes;\\n    /// @dev Stored root hashes of L2 -> L1 logs\\n    mapping(uint256 => bytes32) l2LogsRootHashes;\\n    /// @dev Container that stores transactions requested from L1\\n    PriorityQueue.Queue priorityQueue;\\n    /// @dev The smart contract that manages the list with permission to call contract functions\\n    IAllowList allowList;\\n    /// @notice Part of the configuration parameters of ZKP circuits. Used as an input for the verifier smart contract\\n    VerifierParams verifierParams;\\n    /// @notice Bytecode hash of bootloader program.\\n    /// @dev Used as an input to zkp-circuit.\\n    bytes32 l2BootloaderBytecodeHash;\\n    /// @notice Bytecode hash of default account (bytecode for EOA).\\n    /// @dev Used as an input to zkp-circuit.\\n    bytes32 l2DefaultAccountBytecodeHash;\\n    /// @dev Indicates that the porter may be touched on L2 transactions.\\n    /// @dev Used as an input to zkp-circuit.\\n    bool zkPorterIsAvailable;\\n}\\n\",\"keccak256\":\"0x1f516b4ec879df93a4044881f1eb938e3ae250641e83f4f40a06463b0496c09e\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/Verifier.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../common/libraries/UncheckedMath.sol\\\";\\nimport \\\"./Plonk4VerifierWithAccessToDNext.sol\\\";\\n\\ncontract Verifier is Plonk4VerifierWithAccessToDNext {\\n    using UncheckedMath for uint256;\\n\\n    function get_verification_key() internal pure returns (VerificationKey memory vk) {\\n        vk.num_inputs = 1;\\n        vk.domain_size = 256;\\n        vk.omega = PairingsBn254.new_fr(0x1058a83d529be585820b96ff0a13f2dbd8675a9e5dd2336a6692cc1e5a526c81);\\n        // coefficients\\n        vk.gate_setup_commitments[0] = PairingsBn254.new_g1(\\n            0x05f5cabc4eab14cfabee1334ef7f33a66259cc9fd07af862308d5c41765adb4b,\\n            0x128a103fbe66c8ff697182c0963d963208b55a5a53ddeab9b4bc09dc2a68a9cc\\n        );\\n        vk.gate_setup_commitments[1] = PairingsBn254.new_g1(\\n            0x0d9980170c334c107e6ce4d66bbc4d23bbcdc97c020b1e1c3f6e04c6c663d2c2,\\n            0x0968205845091ceaf3f863b1613fbdf7ce9a87ccfd97f22011679e6350384419\\n        );\\n        vk.gate_setup_commitments[2] = PairingsBn254.new_g1(\\n            0x0c84a19b149a1612cb042ad86382b9e94367c0add60d07e12399999e7db09efe,\\n            0x1e02f70c44c9bfb7bf2164cee2ab4813bcb9be56eb432e2e9dfffffe196d846d\\n        );\\n        vk.gate_setup_commitments[3] = PairingsBn254.new_g1(\\n            0x1eb3599506a41a7d62e1f7438d6732fbb9d1eda7b9c7a0213eca63c9334ac5a9,\\n            0x23563d9f429908d8ea80bffa642840fb081936d45b388bafc504d9b1e5b1c410\\n        );\\n        vk.gate_setup_commitments[4] = PairingsBn254.new_g1(\\n            0x0000000000000000000000000000000000000000000000000000000000000000,\\n            0x0000000000000000000000000000000000000000000000000000000000000001\\n        );\\n        vk.gate_setup_commitments[5] = PairingsBn254.new_g1(\\n            0x063e8dac7ee3ee6a4569fd53b416fe17f8f10de8c435c336e5a1cf2e02643200,\\n            0x1d4c1781b78f926d55f89ef72abb96bee350ce60ddc684f5a02d87c5f4cdf943\\n        );\\n        vk.gate_setup_commitments[6] = PairingsBn254.new_g1(\\n            0x0000000000000000000000000000000000000000000000000000000000000000,\\n            0x0000000000000000000000000000000000000000000000000000000000000001\\n        );\\n        // gate selectors\\n        vk.gate_selectors_commitments[0] = PairingsBn254.new_g1(\\n            0x0b487eb34c8480ea506f5c6c25857155d61d7f9824b60bc80e1a415a5bcf247f,\\n            0x07ea0d0d0df9dbcc944e9341a5bb49ae796d9dc9d7ca1c032b53784715b946db\\n        );\\n        vk.gate_selectors_commitments[1] = PairingsBn254.new_g1(\\n            0x0fa66faa0b9ea782eb400175ac9f0c05f0de64332eec54a87cd20db4540baec2,\\n            0x07dea33d314c690c4bd4b21deda1a44b9f8dd87e539024622768c2f8b8bdabe1\\n        );\\n        // permutation\\n        vk.permutation_commitments[0] = PairingsBn254.new_g1(\\n            0x120482c52e31d2373f9b2dc80a47e68f035e278d220fa8a89d0c81f133343953,\\n            0x02928a78ea2e1a943e9220b7e288fd48a561263f8e5f94518f21aaa43781ceac\\n        );\\n        vk.permutation_commitments[1] = PairingsBn254.new_g1(\\n            0x1dfad2c4d60704bcf6af0abd9cce09151f063c4b52200c268e470c6a6c93cbca,\\n            0x08b28dd6ca14d7c33e078fe0f332a9a4d95ac8df171355de9e69930aec02b5dc\\n        );\\n        vk.permutation_commitments[2] = PairingsBn254.new_g1(\\n            0x0935a4fd6ab67925929661cf2d2e814f87f589ee6234cb9675ecc2d897f1b338,\\n            0x1032ccc41c047413fce4a847ba7e51e4a2ea406d89a88d480c5f0efaf6c8c89a\\n        );\\n        vk.permutation_commitments[3] = PairingsBn254.new_g1(\\n            0x0eafaea3af7d1fadb2138db1b991af5d2218f6892714fd019898c7e1a43ecfe8,\\n            0x28fb17eda285ed74cc9771d62fad22ab459bbb0a4968c489972aca8b7e618fcb\\n        );\\n        // lookup table commitments\\n        vk.lookup_selector_commitment = PairingsBn254.new_g1(\\n            0x155201a564e721b1f5c06315ad4e24eaad3cbdd6197b19cd903fe85613080f86,\\n            0x12fb201bc896572ac14357e2601f5118636f1eeb7b89c177ac940aac3b5253ec\\n        );\\n        vk.lookup_tables_commitments[0] = PairingsBn254.new_g1(\\n            0x1cb0e2ae4d52743898d94d7f1729bd0d3357ba035cdb6b3af7ebff9159f8f297,\\n            0x15ee595227c9e0f7a487ddb8072d5ea3cfd058bc569211c3546bc0e80051553f\\n        );\\n        vk.lookup_tables_commitments[1] = PairingsBn254.new_g1(\\n            0x13e4ab94c03a5a29719930c1361d854e244cf918f1e29cb031303f4a13b71977,\\n            0x0f792ef4c6c8746c97be61ed9b20f31ba2dec3bd5c91a2d9a4a586f19af3a07c\\n        );\\n        vk.lookup_tables_commitments[2] = PairingsBn254.new_g1(\\n            0x1c9e69bd2b04240ebe44fb23d67c596fce4a1336109fdce38c2f184a63cd8acc,\\n            0x1cbd3e72bdbce827227e503690b10be9365ae760e9d2babde5ba81edf12f8206\\n        );\\n        vk.lookup_tables_commitments[3] = PairingsBn254.new_g1(\\n            0x2a0d46339fbf72104df6a241b53a957602b1a16f6e3b9f89bf3e4c4645df823c,\\n            0x11a601d7b2eee4b7885f34c9873426ba1263f38eae2e0351d653b8b1ba9c67f6\\n        );\\n        vk.lookup_table_type_commitment = PairingsBn254.new_g1(\\n            0x1a70e43f18b18d686807c2b1c6471cd949dd251b48090bca443d86b97afae951,\\n            0x0e6e23ad15a1bd851b228788ae4a03bf25bda39ede6d5a92d501a8402a0dfe43\\n        );\\n        // non residues\\n        vk.non_residues[0] = PairingsBn254.new_fr(0x0000000000000000000000000000000000000000000000000000000000000005);\\n        vk.non_residues[1] = PairingsBn254.new_fr(0x0000000000000000000000000000000000000000000000000000000000000007);\\n        vk.non_residues[2] = PairingsBn254.new_fr(0x000000000000000000000000000000000000000000000000000000000000000a);\\n\\n        // g2 elements\\n        vk.g2_elements[0] = PairingsBn254.new_g2(\\n            [\\n                0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,\\n                0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\\n            ],\\n            [\\n                0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,\\n                0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\\n            ]\\n        );\\n        vk.g2_elements[1] = PairingsBn254.new_g2(\\n            [\\n                0x260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c1,\\n                0x0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b0\\n            ],\\n            [\\n                0x04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4,\\n                0x22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55\\n            ]\\n        );\\n    }\\n\\n    function deserialize_proof(uint256[] calldata public_inputs, uint256[] calldata serialized_proof)\\n        internal\\n        pure\\n        returns (Proof memory proof)\\n    {\\n        // require(serialized_proof.length == 44); TODO\\n        proof.input_values = new uint256[](public_inputs.length);\\n        for (uint256 i = 0; i < public_inputs.length; i = i.uncheckedInc()) {\\n            proof.input_values[i] = public_inputs[i];\\n        }\\n\\n        uint256 j;\\n        for (uint256 i = 0; i < STATE_WIDTH; i = i.uncheckedInc()) {\\n            proof.state_polys_commitments[i] = PairingsBn254.new_g1_checked(\\n                serialized_proof[j],\\n                serialized_proof[j.uncheckedInc()]\\n            );\\n\\n            j = j.uncheckedAdd(2);\\n        }\\n        proof.copy_permutation_grand_product_commitment = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n        j = j.uncheckedAdd(2);\\n\\n        proof.lookup_s_poly_commitment = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n        j = j.uncheckedAdd(2);\\n\\n        proof.lookup_grand_product_commitment = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n        j = j.uncheckedAdd(2);\\n        for (uint256 i = 0; i < proof.quotient_poly_parts_commitments.length; i = i.uncheckedInc()) {\\n            proof.quotient_poly_parts_commitments[i] = PairingsBn254.new_g1_checked(\\n                serialized_proof[j],\\n                serialized_proof[j.uncheckedInc()]\\n            );\\n            j = j.uncheckedAdd(2);\\n        }\\n\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            proof.state_polys_openings_at_z[i] = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n            j = j.uncheckedInc();\\n        }\\n\\n        for (uint256 i = 0; i < proof.state_polys_openings_at_z_omega.length; i = i.uncheckedInc()) {\\n            proof.state_polys_openings_at_z_omega[i] = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n            j = j.uncheckedInc();\\n        }\\n        for (uint256 i = 0; i < proof.gate_selectors_openings_at_z.length; i = i.uncheckedInc()) {\\n            proof.gate_selectors_openings_at_z[i] = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n            j = j.uncheckedInc();\\n        }\\n        for (uint256 i = 0; i < proof.copy_permutation_polys_openings_at_z.length; i = i.uncheckedInc()) {\\n            proof.copy_permutation_polys_openings_at_z[i] = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n            j = j.uncheckedInc();\\n        }\\n        proof.copy_permutation_grand_product_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n        j = j.uncheckedInc();\\n        proof.lookup_s_poly_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.lookup_grand_product_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n        j = j.uncheckedInc();\\n        proof.lookup_t_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n\\n        j = j.uncheckedInc();\\n        proof.lookup_t_poly_opening_at_z_omega = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.lookup_selector_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.lookup_table_type_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.quotient_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.linearization_poly_opening_at_z = PairingsBn254.new_fr(serialized_proof[j]);\\n        j = j.uncheckedInc();\\n        proof.opening_proof_at_z = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n        j = j.uncheckedAdd(2);\\n        proof.opening_proof_at_z_omega = PairingsBn254.new_g1_checked(\\n            serialized_proof[j],\\n            serialized_proof[j.uncheckedInc()]\\n        );\\n    }\\n\\n    function verify_serialized_proof(uint256[] calldata public_inputs, uint256[] calldata serialized_proof)\\n        public\\n        view\\n        returns (bool)\\n    {\\n        VerificationKey memory vk = get_verification_key();\\n        require(vk.num_inputs == public_inputs.length);\\n\\n        Proof memory proof = deserialize_proof(public_inputs, serialized_proof);\\n\\n        return verify(proof, vk);\\n    }\\n}\\n\",\"keccak256\":\"0x5d093f2c0d383f12fb6b8c2b2bc32c8ea07f579c2daee7d68aed8cf8041715a0\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8;\\n\\nimport \\\"../libraries/Diamond.sol\\\";\\n\\ninterface IDiamondCut {\\n    function proposeDiamondCut(Diamond.FacetCut[] calldata _facetCuts, address _initAddress) external;\\n\\n    function cancelDiamondCutProposal() external;\\n\\n    function executeDiamondCutProposal(Diamond.DiamondCutData calldata _diamondCut) external;\\n\\n    function emergencyFreezeDiamond() external;\\n\\n    function unfreezeDiamond() external;\\n\\n    function approveEmergencyDiamondCutAsSecurityCouncilMember(bytes32 _diamondCutHash) external;\\n\\n    // FIXME: token holders should have the ability to cancel the upgrade\\n\\n    event DiamondCutProposal(Diamond.FacetCut[] _facetCuts, address _initAddress);\\n\\n    event DiamondCutProposalCancelation();\\n\\n    event DiamondCutProposalExecution(Diamond.DiamondCutData _diamondCut);\\n\\n    event EmergencyFreeze();\\n\\n    event Unfreeze();\\n\\n    event EmergencyDiamondCutApproved(address _address);\\n}\\n\",\"keccak256\":\"0x75be50498de7a7d1a95493aa066e45ed57f8f10f5176be3744ee03e7d5cc1141\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8;\\n\\ninterface IExecutor {\\n    /// @notice Rollup block stored data\\n    /// @param blockNumber Rollup block number\\n    /// @param blockHash Hash of L2 block\\n    /// @param indexRepeatedStorageChanges The serial number of the shortcut index that's used as a unique identifier for storage keys that were used twice or more\\n    /// @param numberOfLayer1Txs Number of priority operations to be processed\\n    /// @param priorityOperationsHash Hash of all priority operations from this block\\n    /// @param l2LogsTreeRoot Root hash of tree that contains L2 -> L1 messages from this block\\n    /// @param timestamp Rollup block timestamp, have the same format as Ethereum block constant\\n    /// @param stateRoot Merkle root of the rollup state tree\\n    /// @param commitment Verified input for the zkSync circuit\\n    struct StoredBlockInfo {\\n        uint64 blockNumber;\\n        bytes32 blockHash;\\n        uint64 indexRepeatedStorageChanges;\\n        uint256 numberOfLayer1Txs;\\n        bytes32 priorityOperationsHash;\\n        bytes32 l2LogsTreeRoot;\\n        uint256 timestamp;\\n        bytes32 commitment;\\n    }\\n\\n    /// @notice Data needed to commit new block\\n    /// @param blockNumber Number of the committed block\\n    /// @param timestamp Unix timestamp denoting the start of the block execution\\n    /// @param indexRepeatedStorageChanges The serial number of the shortcut index that's used as a unique identifier for storage keys that were used twice or more\\n    /// @param newStateRoot The state root of the full state tree\\n    /// @param ergsPerPubdataByteInBlock Price in ergs per one byte of published pubdata in block\\n    /// @param ergsPerCodeDecommittmentWord Price in ergs per decommittment of one machine word from l2 bytecode\\n    /// @param numberOfLayer1Txs Number of priority operations to be processed\\n    /// @param l2LogsTreeRoot The root hash of the tree that contains all L2 -> L1 logs in the block\\n    /// @param priorityOperationsHash Hash of all priority operations from this block\\n    /// @param initialStorageChanges Storage write access as a concatenation key-value\\n    /// @param repeatedStorageChanges Storage write access as a concatenation index-value\\n    /// @param l2Logs concatenation of all L2 -> L1 logs in the block\\n    /// @param l2ArbitraryLengthMessages array of hash preimages that were sent as value of L2 logs by special system L2 contract\\n    /// @param factoryDeps array of l2 bytecodes that were marked as known on L2\\n    struct CommitBlockInfo {\\n        uint64 blockNumber;\\n        uint64 timestamp;\\n        uint64 indexRepeatedStorageChanges;\\n        bytes32 newStateRoot;\\n        uint16 ergsPerCodeDecommittmentWord;\\n        uint256 numberOfLayer1Txs;\\n        bytes32 l2LogsTreeRoot;\\n        bytes32 priorityOperationsHash;\\n        bytes initialStorageChanges;\\n        bytes repeatedStorageChanges;\\n        bytes l2Logs;\\n        bytes[] l2ArbitraryLengthMessages;\\n        bytes[] factoryDeps;\\n    }\\n\\n    /// @notice Recursive proof input data (individual commitments are constructed onchain)\\n    /// TODO: The verifier integration is not finished yet, change the structure for compatibility later\\n    struct ProofInput {\\n        uint256[] recurisiveAggregationInput;\\n        uint256[] serializedProof;\\n    }\\n\\n    function commitBlocks(StoredBlockInfo calldata _lastCommittedBlockData, CommitBlockInfo[] calldata _newBlocksData)\\n        external;\\n\\n    function proveBlocks(\\n        StoredBlockInfo calldata _prevBlock,\\n        StoredBlockInfo[] calldata _committedBlocks,\\n        ProofInput calldata _proof\\n    ) external;\\n\\n    function executeBlocks(StoredBlockInfo[] calldata _blocksData) external;\\n\\n    function revertBlocks(uint256 _blocksToRevert) external;\\n\\n    /// @notice Event emitted when a block is committed\\n    event BlockCommit(uint256 indexed blockNumber);\\n\\n    /// @notice Event emitted when a block is executed\\n    event BlockExecution(uint256 indexed blockNumber);\\n\\n    /// @notice Event emitted when blocks are reverted\\n    event BlocksRevert(uint256 totalBlocksCommitted, uint256 totalBlocksVerified, uint256 totalBlocksExecuted);\\n}\\n\",\"keccak256\":\"0xc8a0de30a54c7abc686b4d5f0bf9eaf4733c6ddd5a79880e85be77258ce03a48\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IGetters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8;\\n\\ninterface IGetters {\\n    /*//////////////////////////////////////////////////////////////\\n                            CUSTOM GETTERS\\n    //////////////////////////////////////////////////////////////*/\\n\\n    function getVerifier() external view returns (address);\\n\\n    function getGovernor() external view returns (address);\\n\\n    function getTotalBlocksCommitted() external view returns (uint256);\\n\\n    function getTotalBlocksVerified() external view returns (uint256);\\n\\n    function getTotalBlocksExecuted() external view returns (uint256);\\n\\n    function getTotalPriorityTxs() external view returns (uint256);\\n\\n    function getFirstUnprocessedPriorityTx() external view returns (uint256);\\n\\n    function isValidator(address _address) external view returns (bool);\\n\\n    function l2LogsRootHash(uint32 blockNumber) external view returns (bytes32 hash);\\n\\n    function isFunctionFreezable(bytes4 _selector) external view returns (bool);\\n\\n    function isFacetFreezable(address _facet) external view returns (bool);\\n\\n    /*//////////////////////////////////////////////////////////////\\n                            DIAMOND LOUPE\\n    //////////////////////////////////////////////////////////////*/\\n\\n    /// @notice Fa\\u0441et structure compatible with the EIP-2535 diamond loupe\\n    /// @param addr The address of the facet contract\\n    /// @param selectors The NON-sorted array with selectors associated with facet\\n    struct Facet {\\n        address addr;\\n        bytes4[] selectors;\\n    }\\n\\n    function facets() external view returns (Facet[] memory);\\n\\n    function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory);\\n\\n    function facetAddresses() external view returns (address[] memory facets);\\n\\n    function facetAddress(bytes4 _selector) external view returns (address facet);\\n}\\n\",\"keccak256\":\"0x666d1cafd424c9174d55c6e97a529ae73eecba2c7c4b3387bf260bd0aa53b3bb\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IGovernance.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8;\\n\\ninterface IGovernance {\\n    function setPendingGovernor(address _newPendingGovernor) external;\\n\\n    function acceptGovernor() external;\\n\\n    function setValidator(address _validator, bool _active) external;\\n\\n    function setL2BootloaderBytecodeHash(bytes32 _l2BootloaderBytecodeHash) external;\\n\\n    function setL2DefaultAccountBytecodeHash(bytes32 _l2DefaultAccountBytecodeHash) external;\\n\\n    function setPorterAvailability(bool _isPorterAvailable) external;\\n\\n    /// @notice \\u0421hanges to the bytecode that is used in L2 as a bootloader (start program)\\n    event NewL2BootloaderBytecodeHash(bytes32 indexed previousBytecodeHash, bytes32 indexed newBytecodeHash);\\n\\n    /// @notice \\u0421hanges to the bytecode that is used in L2 as a default account\\n    event NewL2DefaultAccountBytecodeHash(bytes32 indexed previousBytecodeHash, bytes32 indexed newBytecodeHash);\\n\\n    /// @notice Porter availability status changes\\n    event IsPorterAvailableStatusUpdate(bool isPorterAvailable);\\n\\n    /// @notice Validator's status changed\\n    event ValidatorStatusUpdate(address indexed validatorAddress, bool isActive);\\n\\n    /// @notice pendingGovernor is changed\\n    /// @dev Also emitted when new governor is accepted and in this case, `newPendingGovernor` would be zero address\\n    event NewPendingGovernor(address indexed oldPendingGovernor, address indexed newPendingGovernor);\\n\\n    /// @notice Governor changed\\n    event NewGovernor(address indexed newGovernor);\\n}\\n\",\"keccak256\":\"0xf198e4b73230e5768c32fa3355af1d376c7bfd9ee1b6ab1b3485efbed0eb1d50\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IMailbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8;\\n\\nimport {L2Log, L2Message} from \\\"../Storage.sol\\\";\\nimport \\\"../../common/interfaces/IERC20.sol\\\";\\n\\ninterface IMailbox {\\n    /// @dev Structure that includes all fields of the L2 transaction\\n    /// @dev The hash of this structure is the \\\"canonical L2 transaction hash\\\" and can be used as a unique identifier of a tx\\n    /// @param txType The tx type number, depending on which the L2 transaction can be interpreted differently\\n    /// @param from The sender's address. `uint256` type for possible address format changes and maintaining backward compatibility\\n    /// @param to The recipient's address. `uint256` type for possible address format changes and maintaining backward compatibility\\n    /// @param ergsLimit Ergs limit on L2 transaction. Analog to the `gasLimit` on an L1 transactions\\n    /// @param ergsPerPubdataByteLimit Maximum number of ergs that will cost one byte of pubdata (every piece of data that will be stored on L1 as calldata)\\n    /// @param maxFeePerErg The absolute maximum sender willing to pay per unit of ergs to get the transaction included in a block. Analog to the EIP-1559 `maxFeePerGas` on an L1 transactions\\n    /// @param maxPriorityFeePerErg The additional fee that is paid directly to the validator to incentivize them to include the transaction in a block. Analog to the EIP-1559 `maxPriorityFeePerGas` on an L1 transactions\\n    /// @param paymaster The address of the EIP-4337 paymaster, that will pay fees for the transaction. `uint256` type for possible address format changes and maintaining backward compatibility\\n    /// @param reserved The fixed-length fields for usage in a future extension of transaction formats\\n    /// @param data The calldata that is transmitted for the transaction call\\n    /// @param signature An abstract set of bytes that are used for transaction authorization\\n    /// @param factoryDeps The set of L2 bytecode hashes whose preimages were shown on L1\\n    /// @param paymasterInput The arbitrary-length data that is used as a calldata to the paymaster pre-call\\n    /// @param reservedDynamic The arbitrary-length field for usage in a future extension of transaction formats\\n    struct L2CanonicalTransaction {\\n        uint256 txType;\\n        uint256 from;\\n        uint256 to;\\n        uint256 ergsLimit;\\n        uint256 ergsPerPubdataByteLimit;\\n        uint256 maxFeePerErg;\\n        uint256 maxPriorityFeePerErg;\\n        uint256 paymaster;\\n        // In the future, we might want to add some\\n        // new fields to the struct. The `txData` struct\\n        // is to be passed to account and any changes to its structure\\n        // would mean a breaking change to these accounts. To prevent this,\\n        // we should keep some fields as \\\"reserved\\\".\\n        // It is also recommended that their length is fixed, since\\n        // it would allow easier proof integration (in case we will need\\n        // some special circuit for preprocessing transactions).\\n        uint256[6] reserved;\\n        bytes data;\\n        bytes signature;\\n        uint256[] factoryDeps;\\n        bytes paymasterInput;\\n        // Reserved dynamic type for the future use-case. Using it should be avoided,\\n        // But it is still here, just in case we want to enable some additional functionality.\\n        bytes reservedDynamic;\\n    }\\n\\n    function proveL2MessageInclusion(\\n        uint256 _blockNumber,\\n        uint256 _index,\\n        L2Message calldata _message,\\n        bytes32[] calldata _proof\\n    ) external view returns (bool);\\n\\n    function proveL2LogInclusion(\\n        uint256 _blockNumber,\\n        uint256 _index,\\n        L2Log memory _log,\\n        bytes32[] calldata _proof\\n    ) external view returns (bool);\\n\\n    function serializeL2Transaction(\\n        uint256 _txId,\\n        uint256 _l2Value,\\n        address _sender,\\n        address _contractAddressL2,\\n        bytes calldata _calldata,\\n        uint256 _ergsLimit,\\n        bytes[] calldata _factoryDeps\\n    ) external pure returns (L2CanonicalTransaction memory);\\n\\n    function requestL2Transaction(\\n        address _contractAddressL2,\\n        uint256 _l2Value,\\n        bytes calldata _calldata,\\n        uint256 _ergsLimit,\\n        bytes[] calldata _factoryDeps\\n    ) external payable returns (bytes32 txHash);\\n\\n    function l2TransactionBaseCost(\\n        uint256 _gasPrice,\\n        uint256 _ergsLimit,\\n        uint32 _calldataLength\\n    ) external view returns (uint256);\\n\\n    /// @notice New priority request event. Emitted when a request is placed into the priority queue\\n    /// @param txId Serial number of the priority operation\\n    /// @param txHash keccak256 hash of encoded transaction representation\\n    /// @param expirationBlock Ethereum block number up to which priority request should be processed\\n    /// @param transaction The whole transaction structure that is requested to be executed on L2\\n    /// @param factoryDeps An array of bytecodes that were shown in the L1 public data. Will be marked as known bytecodes in L2\\n    event NewPriorityRequest(\\n        uint256 txId,\\n        bytes32 txHash,\\n        uint64 expirationBlock,\\n        L2CanonicalTransaction transaction,\\n        bytes[] factoryDeps\\n    );\\n}\\n\",\"keccak256\":\"0xc4ea8c255c5759ea84322b5d43f0a84e9347e287cdd469803f72d534dd5aad0a\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IZkSync.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8;\\n\\nimport \\\"./IMailbox.sol\\\";\\nimport \\\"./IGovernance.sol\\\";\\nimport \\\"./IExecutor.sol\\\";\\nimport \\\"./IDiamondCut.sol\\\";\\nimport \\\"./IGetters.sol\\\";\\n\\ninterface IZkSync is IMailbox, IGovernance, IExecutor, IDiamondCut, IGetters {}\\n\",\"keccak256\":\"0x4a988a586ac54ce45cf065bbe1ed8d19b2b4b75ffae0ff9c9276d8a2a3d16c7d\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/Diamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/// @author Matter Labs\\n/// @notice The helper library for managing the EIP-2535 diamond proxy.\\nlibrary Diamond {\\n    /// @dev Magic value that should be returned by diamond cut initialize contracts.\\n    /// @dev Used to distinguish calls to contracts that were supposed to be used as diamond initializer from other contracts.\\n    bytes32 constant DIAMOND_INIT_SUCCESS_RETURN_VALUE = keccak256(\\\"diamond.zksync.init\\\");\\n\\n    /// @dev Storage position of `DiamondStorage` structure.\\n    bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n    /// @dev Utility struct that contains associated facet & meta information of selector\\n    /// @param facetAddress address of the facet which is connected with selector\\n    /// @param selectorPosition index in `FacetToSelectors.selectors` array, where is selector stored\\n    /// @param isFreezable denotes whether the selector can be frozen.\\n    struct SelectorToFacet {\\n        address facetAddress;\\n        uint16 selectorPosition;\\n        bool isFreezable;\\n    }\\n\\n    /// @dev Utility struct that contains associated selectors & meta information of facet\\n    /// @param selectors list of all selectors that belong to the facet\\n    /// @param facetPosition index in `DiamondStorage.facets` array, where is facet stored\\n    struct FacetToSelectors {\\n        bytes4[] selectors;\\n        uint16 facetPosition;\\n    }\\n\\n    /// @notice The structure that holds all diamond proxy associated parameters\\n    /// @dev According to the EIP-2535 should be stored on a special storage key - `DIAMOND_STORAGE_POSITION`\\n    /// @param selectorToFacet An mapping from selector to the facet address and its' meta information\\n    /// @param facetToSelectors An mapping from facet address to its' selector with meta information\\n    /// @param facets The array of all unique facet addresses that belong to the diamond proxy\\n    /// @param isFrozen Denotes whether the diamond proxy is frozen and all freezable facets are not accessible\\n    struct DiamondStorage {\\n        mapping(bytes4 => SelectorToFacet) selectorToFacet;\\n        mapping(address => FacetToSelectors) facetToSelectors;\\n        address[] facets;\\n        bool isFrozen;\\n    }\\n\\n    /// @return diamondStorage The pointer to the storage where all specific diamond proxy parameters stored\\n    function getDiamondStorage() internal pure returns (DiamondStorage storage diamondStorage) {\\n        bytes32 position = DIAMOND_STORAGE_POSITION;\\n        assembly {\\n            diamondStorage.slot := position\\n        }\\n    }\\n\\n    /// @notice Action on selectors for one facet on a Diamond Cut\\n    enum Action {\\n        Add,\\n        Replace,\\n        Remove\\n    }\\n\\n    /// @dev Parameters for diamond changes that touch one of the facets\\n    /// @param facet The address of facet that's affected by the cut\\n    /// @param action The action that is made on the facet\\n    /// @param isFreezable Denotes whether the facet & all their selectors can be frozen\\n    /// @param selectors An array of unique selectors that belongs to the facet address\\n    struct FacetCut {\\n        address facet;\\n        Action action;\\n        bool isFreezable;\\n        bytes4[] selectors;\\n    }\\n\\n    /// @dev Structure of the diamond proxy changes\\n    /// @param facetCuts The set of changes (adding/removing/replacement) of implementation contracts\\n    /// @param initAddress The address that's dellegate called after setting up new facet changes\\n    /// @param initCalldata Calldata for the delegete call to `initAddress`\\n    struct DiamondCutData {\\n        FacetCut[] facetCuts;\\n        address initAddress;\\n        bytes initCalldata;\\n    }\\n\\n    /// @dev Add/replace/remove any number of selectors and optionally execute a function with delegatecall\\n    /// @param _diamondCut Diamond's facet changes and the parameters to optional initialization delegatecall\\n    function diamondCut(DiamondCutData memory _diamondCut) internal {\\n        FacetCut[] memory facetCuts = _diamondCut.facetCuts;\\n        address initAddress = _diamondCut.initAddress;\\n        bytes memory initCalldata = _diamondCut.initCalldata;\\n        for (uint256 i = 0; i < facetCuts.length; ++i) {\\n            Action action = facetCuts[i].action;\\n            address facet = facetCuts[i].facet;\\n            bool isFacetFreezable = facetCuts[i].isFreezable;\\n            bytes4[] memory selectors = facetCuts[i].selectors;\\n\\n            require(selectors.length > 0, \\\"B\\\"); // no functions for diamond cut\\n\\n            if (action == Action.Add) {\\n                _addFunctions(facet, selectors, isFacetFreezable);\\n            } else if (action == Action.Replace) {\\n                _replaceFunctions(facet, selectors, isFacetFreezable);\\n            } else if (action == Action.Remove) {\\n                _removeFunctions(facet, selectors);\\n            } else {\\n                revert(\\\"C\\\"); // undefined diamond cut action\\n            }\\n        }\\n\\n        _initializeDiamondCut(initAddress, initCalldata);\\n        emit DiamondCut(facetCuts, initAddress, initCalldata);\\n    }\\n\\n    event DiamondCut(FacetCut[] facetCuts, address initAddress, bytes initCalldata);\\n\\n    /// @dev Add new functions to the diamond proxy\\n    /// NOTE: expect but NOT enforce that `_selectors` is NON-EMPTY array\\n    function _addFunctions(\\n        address _facet,\\n        bytes4[] memory _selectors,\\n        bool _isFacetFreezable\\n    ) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        require(_facet != address(0), \\\"G\\\"); // facet with zero address cannot be added\\n\\n        // Add facet to the list of facets if the facet address is new one\\n        _saveFacetIfNew(_facet);\\n\\n        for (uint256 i = 0; i < _selectors.length; ++i) {\\n            bytes4 selector = _selectors[i];\\n            SelectorToFacet memory oldFacet = ds.selectorToFacet[selector];\\n            require(oldFacet.facetAddress == address(0), \\\"J\\\"); // facet for this selector already exists\\n\\n            _addOneFunction(_facet, selector, _isFacetFreezable);\\n        }\\n    }\\n\\n    /// @dev Change associated facets to already known function selectors\\n    /// NOTE: expect but NOT enforce that `_selectors` is NON-EMPTY array\\n    function _replaceFunctions(\\n        address _facet,\\n        bytes4[] memory _selectors,\\n        bool _isFacetFreezable\\n    ) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        require(_facet != address(0), \\\"K\\\"); // cannot replace facet with zero address\\n\\n        // Add facet to the list of facets if the facet address is a new one\\n        _saveFacetIfNew(_facet);\\n\\n        for (uint256 i = 0; i < _selectors.length; ++i) {\\n            bytes4 selector = _selectors[i];\\n            SelectorToFacet memory oldFacet = ds.selectorToFacet[selector];\\n            require(oldFacet.facetAddress != address(0), \\\"L\\\"); // it is impossible to replace the facet with zero address\\n\\n            _removeOneFunction(oldFacet.facetAddress, selector);\\n            _addOneFunction(_facet, selector, _isFacetFreezable);\\n        }\\n    }\\n\\n    /// @dev Remove association with function and facet\\n    /// NOTE: expect but NOT enforce that `_selectors` is NON-EMPTY array\\n    function _removeFunctions(address _facet, bytes4[] memory _selectors) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        require(_facet == address(0), \\\"a1\\\"); // facet address must be zero\\n\\n        for (uint256 i = 0; i < _selectors.length; ++i) {\\n            bytes4 selector = _selectors[i];\\n            SelectorToFacet memory oldFacet = ds.selectorToFacet[selector];\\n            require(oldFacet.facetAddress != address(0), \\\"a2\\\"); // Can't delete a non-existent facet\\n\\n            _removeOneFunction(oldFacet.facetAddress, selector);\\n        }\\n    }\\n\\n    /// @dev Add address to the list of known facets if it is not on the list yet\\n    /// NOTE: should be called ONLY before adding a new selector associated with the address\\n    function _saveFacetIfNew(address _facet) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        uint16 selectorsLength = uint16(ds.facetToSelectors[_facet].selectors.length);\\n        // If there are no selectors associated with facet then save facet as new one\\n        if (selectorsLength == 0) {\\n            ds.facetToSelectors[_facet].facetPosition = uint16(ds.facets.length);\\n            ds.facets.push(_facet);\\n        }\\n    }\\n\\n    /// @dev Add one function to the already known facet\\n    /// NOTE: It is expected but NOT enforced that:\\n    /// - `_facet` is NON-ZERO address\\n    /// - `_facet` is already stored address in `DiamondStorage.facets`\\n    /// - `_selector` is NOT associated by another facet\\n    function _addOneFunction(\\n        address _facet,\\n        bytes4 _selector,\\n        bool _isSelectorFreezable\\n    ) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        uint16 selectorPosition = uint16(ds.facetToSelectors[_facet].selectors.length);\\n        ds.selectorToFacet[_selector] = SelectorToFacet({\\n            facetAddress: _facet,\\n            selectorPosition: selectorPosition,\\n            isFreezable: _isSelectorFreezable\\n        });\\n        ds.facetToSelectors[_facet].selectors.push(_selector);\\n    }\\n\\n    /// @dev Remove one associated function with facet\\n    /// NOTE: It is expected but NOT enforced that `_facet` is NON-ZERO address\\n    function _removeOneFunction(address _facet, bytes4 _selector) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        // Get index of `FacetToSelectors.selectors` of the selector and last element of array\\n        uint256 selectorPosition = ds.selectorToFacet[_selector].selectorPosition;\\n        uint256 lastSelectorPosition = ds.facetToSelectors[_facet].selectors.length - 1;\\n\\n        // If the selector is not at the end of the array then move the last element to the selector position\\n        if (selectorPosition != lastSelectorPosition) {\\n            bytes4 lastSelector = ds.facetToSelectors[_facet].selectors[lastSelectorPosition];\\n\\n            ds.facetToSelectors[_facet].selectors[selectorPosition] = lastSelector;\\n            ds.selectorToFacet[lastSelector].selectorPosition = uint16(selectorPosition);\\n        }\\n\\n        // Remove last element from the selectors array\\n        ds.facetToSelectors[_facet].selectors.pop();\\n\\n        // Finally, clean up the association with facet\\n        delete ds.selectorToFacet[_selector];\\n\\n        // If there are no selectors for facet then remove the facet from the list of known facets\\n        if (lastSelectorPosition == 0) {\\n            _removeFacet(_facet);\\n        }\\n    }\\n\\n    /// @dev remove facet from the list of known facets\\n    /// NOTE: It is expected but NOT enforced that there are no selectors associated wih `_facet`\\n    function _removeFacet(address _facet) private {\\n        DiamondStorage storage ds = getDiamondStorage();\\n\\n        // Get index of `DiamondStorage.facets` of the facet and last element of array\\n        uint256 facetPosition = ds.facetToSelectors[_facet].facetPosition;\\n        uint256 lastFacetPosition = ds.facets.length - 1;\\n\\n        // If the facet is not at the end of the array then move the last element to the facet position\\n        if (facetPosition != lastFacetPosition) {\\n            address lastFacet = ds.facets[lastFacetPosition];\\n\\n            ds.facets[facetPosition] = lastFacet;\\n            ds.facetToSelectors[lastFacet].facetPosition = uint16(facetPosition);\\n        }\\n\\n        // Remove last element from the facets array\\n        ds.facets.pop();\\n    }\\n\\n    /// @dev Delegates call to the initialization address with provided calldata\\n    /// @dev Used as a final step of diamond cut to execute the logic of the initialization for changed facets\\n    function _initializeDiamondCut(address _init, bytes memory _calldata) private {\\n        if (_init == address(0)) {\\n            require(_calldata.length == 0, \\\"H\\\"); // Non-empty calldata for zero address\\n        } else {\\n            // Do not check whether `_init` is a contract since later we check that it returns data.\\n            (bool success, bytes memory data) = _init.delegatecall(_calldata);\\n            require(success, \\\"I\\\"); // delegatecall failed\\n\\n            // Check that called contract returns magic value to make sure that contract logic\\n            // supposed to be used as diamond cut initializer.\\n            require(data.length == 32 && abi.decode(data, (bytes32)) == DIAMOND_INIT_SUCCESS_RETURN_VALUE, \\\"lp\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xfedbcad9963963e9570a972b269e7241b902f029d488b52fbd4e9a2d67bf8e3d\",\"license\":\"MIT\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PairingsBn254.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nlibrary PairingsBn254 {\\n    uint256 constant q_mod = 21888242871839275222246405745257275088696311157297823662689037894645226208583;\\n    uint256 constant r_mod = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\\n    uint256 constant bn254_b_coeff = 3;\\n\\n    struct G1Point {\\n        uint256 X;\\n        uint256 Y;\\n    }\\n\\n    struct Fr {\\n        uint256 value;\\n    }\\n\\n    function new_fr(uint256 fr) internal pure returns (Fr memory) {\\n        require(fr < r_mod);\\n        return Fr({value: fr});\\n    }\\n\\n    function copy(Fr memory self) internal pure returns (Fr memory n) {\\n        n.value = self.value;\\n    }\\n\\n    function assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = other.value;\\n    }\\n\\n    function inverse(Fr memory fr) internal view returns (Fr memory) {\\n        require(fr.value != 0);\\n        return pow(fr, r_mod - 2);\\n    }\\n\\n    function add_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = addmod(self.value, other.value, r_mod);\\n    }\\n\\n    function sub_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = addmod(self.value, r_mod - other.value, r_mod);\\n    }\\n\\n    function mul_assign(Fr memory self, Fr memory other) internal pure {\\n        self.value = mulmod(self.value, other.value, r_mod);\\n    }\\n\\n    function pow(Fr memory self, uint256 power) internal view returns (Fr memory) {\\n        uint256[6] memory input = [32, 32, 32, self.value, power, r_mod];\\n        uint256[1] memory result;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 0x05, input, 0xc0, result, 0x20)\\n        }\\n        require(success);\\n        return Fr({value: result[0]});\\n    }\\n\\n    // Encoding of field elements is: X[0] * z + X[1]\\n    struct G2Point {\\n        uint256[2] X;\\n        uint256[2] Y;\\n    }\\n\\n    function P1() internal pure returns (G1Point memory) {\\n        return G1Point(1, 2);\\n    }\\n\\n    function new_g1(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n        return G1Point(x, y);\\n    }\\n\\n    // function new_g1_checked(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n    function new_g1_checked(uint256 x, uint256 y) internal pure returns (G1Point memory) {\\n        if (x == 0 && y == 0) {\\n            // point of infinity is (0,0)\\n            return G1Point(x, y);\\n        }\\n\\n        // check encoding\\n        require(x < q_mod, \\\"x axis isn't valid\\\");\\n        require(y < q_mod, \\\"y axis isn't valid\\\");\\n        // check on curve\\n        uint256 lhs = mulmod(y, y, q_mod); // y^2\\n\\n        uint256 rhs = mulmod(x, x, q_mod); // x^2\\n        rhs = mulmod(rhs, x, q_mod); // x^3\\n        rhs = addmod(rhs, bn254_b_coeff, q_mod); // x^3 + b\\n        require(lhs == rhs, \\\"is not on curve\\\");\\n\\n        return G1Point(x, y);\\n    }\\n\\n    function new_g2(uint256[2] memory x, uint256[2] memory y) internal pure returns (G2Point memory) {\\n        return G2Point(x, y);\\n    }\\n\\n    function copy_g1(G1Point memory self) internal pure returns (G1Point memory result) {\\n        result.X = self.X;\\n        result.Y = self.Y;\\n    }\\n\\n    function P2() internal pure returns (G2Point memory) {\\n        // for some reason ethereum expects to have c1*v + c0 form\\n\\n        return\\n            G2Point(\\n                [\\n                    0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,\\n                    0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\\n                ],\\n                [\\n                    0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,\\n                    0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\\n                ]\\n            );\\n    }\\n\\n    function negate(G1Point memory self) internal pure {\\n        // The prime q in the base field F_q for G1\\n        if (self.Y == 0) {\\n            require(self.X == 0);\\n            return;\\n        }\\n\\n        self.Y = q_mod - self.Y;\\n    }\\n\\n    function point_add(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) {\\n        point_add_into_dest(p1, p2, r);\\n        return r;\\n    }\\n\\n    function point_add_assign(G1Point memory p1, G1Point memory p2) internal view {\\n        point_add_into_dest(p1, p2, p1);\\n    }\\n\\n    function point_add_into_dest(\\n        G1Point memory p1,\\n        G1Point memory p2,\\n        G1Point memory dest\\n    ) internal view {\\n        if (p2.X == 0 && p2.Y == 0) {\\n            // we add zero, nothing happens\\n            dest.X = p1.X;\\n            dest.Y = p1.Y;\\n            return;\\n        } else if (p1.X == 0 && p1.Y == 0) {\\n            // we add into zero, and we add non-zero point\\n            dest.X = p2.X;\\n            dest.Y = p2.Y;\\n            return;\\n        } else {\\n            uint256[4] memory input;\\n\\n            input[0] = p1.X;\\n            input[1] = p1.Y;\\n            input[2] = p2.X;\\n            input[3] = p2.Y;\\n\\n            bool success;\\n            assembly {\\n                success := staticcall(gas(), 6, input, 0x80, dest, 0x40)\\n            }\\n            require(success);\\n        }\\n    }\\n\\n    function point_sub_assign(G1Point memory p1, G1Point memory p2) internal view {\\n        point_sub_into_dest(p1, p2, p1);\\n    }\\n\\n    function point_sub_into_dest(\\n        G1Point memory p1,\\n        G1Point memory p2,\\n        G1Point memory dest\\n    ) internal view {\\n        if (p2.X == 0 && p2.Y == 0) {\\n            // we subtracted zero, nothing happens\\n            dest.X = p1.X;\\n            dest.Y = p1.Y;\\n            return;\\n        } else if (p1.X == 0 && p1.Y == 0) {\\n            // we subtract from zero, and we subtract non-zero point\\n            dest.X = p2.X;\\n            dest.Y = q_mod - p2.Y;\\n            return;\\n        } else {\\n            uint256[4] memory input;\\n\\n            input[0] = p1.X;\\n            input[1] = p1.Y;\\n            input[2] = p2.X;\\n            input[3] = q_mod - p2.Y;\\n\\n            bool success = false;\\n            assembly {\\n                success := staticcall(gas(), 6, input, 0x80, dest, 0x40)\\n            }\\n            require(success);\\n        }\\n    }\\n\\n    function point_mul(G1Point memory p, Fr memory s) internal view returns (G1Point memory r) {\\n        // https://eips.ethereum.org/EIPS/eip-197\\n        // Elliptic curve points are encoded as a Jacobian pair (X, Y) where the point at infinity is encoded as (0, 0)\\n        // TODO\\n        if (p.X == 0 && p.Y == 1) {\\n            p.Y = 0;\\n        }\\n        point_mul_into_dest(p, s, r);\\n        return r;\\n    }\\n\\n    function point_mul_assign(G1Point memory p, Fr memory s) internal view {\\n        point_mul_into_dest(p, s, p);\\n    }\\n\\n    function point_mul_into_dest(\\n        G1Point memory p,\\n        Fr memory s,\\n        G1Point memory dest\\n    ) internal view {\\n        uint256[3] memory input;\\n        input[0] = p.X;\\n        input[1] = p.Y;\\n        input[2] = s.value;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 7, input, 0x60, dest, 0x40)\\n        }\\n        require(success);\\n    }\\n\\n    function pairing(G1Point[] memory p1, G2Point[] memory p2) internal view returns (bool) {\\n        require(p1.length == p2.length);\\n        uint256 elements = p1.length;\\n        uint256 inputSize = elements * 6;\\n        uint256[] memory input = new uint256[](inputSize);\\n        for (uint256 i = 0; i < elements; ) {\\n            input[i * 6 + 0] = p1[i].X;\\n            input[i * 6 + 1] = p1[i].Y;\\n            input[i * 6 + 2] = p2[i].X[0];\\n            input[i * 6 + 3] = p2[i].X[1];\\n            input[i * 6 + 4] = p2[i].Y[0];\\n            input[i * 6 + 5] = p2[i].Y[1];\\n            unchecked {\\n                ++i;\\n            }\\n        }\\n        uint256[1] memory out;\\n        bool success;\\n        assembly {\\n            success := staticcall(gas(), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20)\\n        }\\n        require(success);\\n        return out[0] != 0;\\n    }\\n\\n    /// Convenience method for a pairing check for two pairs.\\n    function pairingProd2(\\n        G1Point memory a1,\\n        G2Point memory a2,\\n        G1Point memory b1,\\n        G2Point memory b2\\n    ) internal view returns (bool) {\\n        G1Point[] memory p1 = new G1Point[](2);\\n        G2Point[] memory p2 = new G2Point[](2);\\n        p1[0] = a1;\\n        p1[1] = b1;\\n        p2[0] = a2;\\n        p2[1] = b2;\\n        return pairing(p1, p2);\\n    }\\n}\\n\",\"keccak256\":\"0x0532cd43e648a5236d854c85b47d83e4d4faa86ccb87322de0dcc52f0956ee1d\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/PriorityQueue.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\n/// @notice The structure that contains meta information of the L2 transaction that was requested from L1\\n/// @dev The weird size of fields was selected specifically to minimize the structure storage size\\n/// @param canonicalTxHash Hashed L2 transaction data that is needed to process it\\n/// @param expirationBlock Expiration block number (ETH block) for this request (must be satisfied before)\\n/// @param layer2Tip Additional payment to the validator as an incentive to perform the operation\\nstruct PriorityOperation {\\n    bytes32 canonicalTxHash;\\n    uint64 expirationBlock;\\n    uint192 layer2Tip;\\n}\\n\\n/// @author Matter Labs\\n/// @dev The library provides the API to interact with the priority queue container\\n/// @dev Order of processing operations from queue - FIFO (Fist in - first out)\\nlibrary PriorityQueue {\\n    using PriorityQueue for Queue;\\n\\n    /// @notice Container that stores priority operations\\n    /// @param data The inner mapping that saves priority operation by its index\\n    /// @param head The pointer to the last added priority operation\\n    /// @param tail The pointer to the first unprocessed priority operation\\n    struct Queue {\\n        mapping(uint256 => PriorityOperation) data;\\n        uint256 head;\\n        uint256 tail;\\n    }\\n\\n    /// @return Index of the oldest priority operation that wasn't processed yet\\n    /// @notice Returns zero if and only if no operations were processed from the queue\\n    function getFirstUnprocessedPriorityTx(Queue storage _queue) internal view returns (uint256) {\\n        return _queue.tail;\\n    }\\n\\n    /// @return The total number of priority operations that were added to the priority queue, including all processed ones\\n    function getTotalPriorityTxs(Queue storage _queue) internal view returns (uint256) {\\n        return _queue.head;\\n    }\\n\\n    /// @return The total number of unprocessed priority operations in a priority queue\\n    function getSize(Queue storage _queue) internal view returns (uint256) {\\n        return uint256(_queue.head - _queue.tail);\\n    }\\n\\n    /// @return Whether the priority queue contains no operations\\n    function isEmpty(Queue storage _queue) internal view returns (bool) {\\n        return _queue.head == _queue.tail;\\n    }\\n\\n    /// @notice Add the priority operation to the end of the priority queue\\n    function pushBack(Queue storage _queue, PriorityOperation memory _operation) internal {\\n        // Save value into the stack to avoid double reading from the storage\\n        uint256 head = _queue.head;\\n\\n        _queue.data[head] = _operation;\\n        _queue.head = head + 1;\\n    }\\n\\n    /// @return The first unprocessed priority operation from the queue\\n    function front(Queue storage _queue) internal view returns (PriorityOperation memory) {\\n        require(!_queue.isEmpty(), \\\"D\\\"); // priority queue is empty\\n\\n        return _queue.data[_queue.tail];\\n    }\\n\\n    /// @notice Remove the first unprocessed priority operation from the queue\\n    /// @return priorityOperation that was popped from the priority queue\\n    function popFront(Queue storage _queue) internal returns (PriorityOperation memory priorityOperation) {\\n        require(!_queue.isEmpty(), \\\"s\\\"); // priority queue is empty\\n\\n        // Save value into the stack to avoid double reading from the storage\\n        uint256 tail = _queue.tail;\\n\\n        priorityOperation = _queue.data[tail];\\n        delete _queue.data[tail];\\n        _queue.tail = tail + 1;\\n    }\\n}\\n\",\"keccak256\":\"0x83a6511847a78dee8814414191c013cb67fb863e038bc42e21bbbd2641e9e184\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l1/contracts/zksync/libraries/TranscriptLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./PairingsBn254.sol\\\";\\n\\nlibrary TranscriptLib {\\n    // flip                    0xe000000000000000000000000000000000000000000000000000000000000000;\\n    uint256 constant FR_MASK = 0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n    uint32 constant DST_0 = 0;\\n    uint32 constant DST_1 = 1;\\n    uint32 constant DST_CHALLENGE = 2;\\n\\n    struct Transcript {\\n        bytes32 state_0;\\n        bytes32 state_1;\\n        uint32 challenge_counter;\\n    }\\n\\n    function new_transcript() internal pure returns (Transcript memory t) {\\n        t.state_0 = bytes32(0);\\n        t.state_1 = bytes32(0);\\n        t.challenge_counter = 0;\\n    }\\n\\n    function update_with_u256(Transcript memory self, uint256 value) internal pure {\\n        bytes32 old_state_0 = self.state_0;\\n        self.state_0 = keccak256(abi.encodePacked(DST_0, old_state_0, self.state_1, value));\\n        self.state_1 = keccak256(abi.encodePacked(DST_1, old_state_0, self.state_1, value));\\n    }\\n\\n    function update_with_fr(Transcript memory self, PairingsBn254.Fr memory value) internal pure {\\n        update_with_u256(self, value.value);\\n    }\\n\\n    function update_with_g1(Transcript memory self, PairingsBn254.G1Point memory p) internal pure {\\n        update_with_u256(self, p.X);\\n        update_with_u256(self, p.Y);\\n    }\\n\\n    function get_challenge(Transcript memory self) internal pure returns (PairingsBn254.Fr memory challenge) {\\n        bytes32 query = keccak256(abi.encodePacked(DST_CHALLENGE, self.state_0, self.state_1, self.challenge_counter));\\n        self.challenge_counter += 1;\\n        challenge = PairingsBn254.Fr({value: uint256(query) & FR_MASK});\\n    }\\n}\\n\",\"keccak256\":\"0x56cd646af0899ea51be78a046b647578bae59714f5f3e3c85010b278c96bfdcc\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/Connector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IConnector} from \\\"../interfaces/IConnector.sol\\\";\\n\\n/**\\n * @title Connector\\n * @author Connext Labs, Inc.\\n * @notice This contract has the messaging interface functions used by all connectors.\\n *\\n * @dev This contract stores information about mirror connectors, but can be used as a\\n * base for contracts that do not have a mirror (i.e. the connector handling messaging on\\n * mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\\n * will be empty\\n *\\n * @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\\n * or `mirrorGas`\\n */\\nabstract contract Connector is ProposedOwnable, IConnector {\\n  // ========== Custom Errors ===========\\n\\n  error Connector__processMessage_notUsed();\\n\\n  // ============ Events ============\\n\\n  event NewConnector(\\n    uint32 indexed domain,\\n    uint32 indexed mirrorDomain,\\n    address amb,\\n    address rootManager,\\n    address mirrorConnector\\n  );\\n\\n  event MirrorConnectorUpdated(address previous, address current);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The domain of this Messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable DOMAIN;\\n\\n  /**\\n   * @notice Address of the AMB on this domain.\\n   */\\n  address public immutable AMB;\\n\\n  /**\\n   * @notice RootManager contract address.\\n   */\\n  address public immutable ROOT_MANAGER;\\n\\n  /**\\n   * @notice The domain of the corresponding messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable MIRROR_DOMAIN;\\n\\n  /**\\n   * @notice Connector on L2 for L1 connectors, and vice versa.\\n   */\\n  address public mirrorConnector;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered AMB\\n   */\\n  modifier onlyAMB() {\\n    require(msg.sender == AMB, \\\"!AMB\\\");\\n    _;\\n  }\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered ROOT_MANAGER\\n   */\\n  modifier onlyRootManager() {\\n    // NOTE: RootManager will be zero address for spoke connectors.\\n    // Only root manager can dispatch a message to spokes/L2s via the hub connector.\\n    require(msg.sender == ROOT_MANAGER, \\\"!rootManager\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) ProposedOwnable() {\\n    // set the owner\\n    _setOwner(msg.sender);\\n\\n    // sanity checks on values\\n    require(_domain != 0, \\\"empty domain\\\");\\n    require(_rootManager != address(0), \\\"empty rootManager\\\");\\n    // see note at top of contract on why the mirror values are not sanity checked\\n\\n    // set immutables\\n    DOMAIN = _domain;\\n    AMB = _amb;\\n    ROOT_MANAGER = _rootManager;\\n    MIRROR_DOMAIN = _mirrorDomain;\\n    // set mutables if defined\\n    if (_mirrorConnector != address(0)) {\\n      _setMirrorConnector(_mirrorConnector);\\n    }\\n\\n    emit NewConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector);\\n  }\\n\\n  // ============ Receivable ============\\n  /**\\n   * @notice Connectors may need to receive native asset to handle fees when sending a\\n   * message\\n   */\\n  receive() external payable {}\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Sets the address of the l2Connector for this domain\\n   */\\n  function setMirrorConnector(address _mirrorConnector) public onlyOwner {\\n    _setMirrorConnector(_mirrorConnector);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice Processes a message received by an AMB\\n   * @dev This is called by AMBs to process messages originating from mirror connector\\n   */\\n  function processMessage(bytes memory _data) external virtual onlyAMB {\\n    _processMessage(_data);\\n    emit MessageProcessed(_data, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Checks the cross domain sender for a given address\\n   */\\n  function verifySender(address _expected) external returns (bool) {\\n    return _verifySender(_expected);\\n  }\\n\\n  // ============ Virtual Functions ============\\n\\n  /**\\n   * @notice This function is used by the Connext contract on the l2 domain to send a message to the\\n   * l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\\n   * @param _data The contents of the message\\n   * @param _encodedData Data used to send the message; specific to connector\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal virtual;\\n\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(\\n    bytes memory /* _data */\\n  ) internal virtual {\\n    // By default, reverts. This is to ensure the call path is not used unless this function is\\n    // overridden by the inheriting class\\n    revert Connector__processMessage_notUsed();\\n  }\\n\\n  /**\\n   * @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\\n   * is the expected address.\\n   * @dev Should be overridden by the implementing Connector contract.\\n   */\\n  function _verifySender(address _expected) internal virtual returns (bool);\\n\\n  // ============ Private Functions ============\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal virtual {\\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\\n    mirrorConnector = _mirrorConnector;\\n  }\\n}\\n\",\"keccak256\":\"0x08d4077a1b5caf9f46491206064bb24bee467dd741b42fed3d30a608eea83368\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/GasCap.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\n\\nabstract contract GasCap is ProposedOwnable {\\n  // ============ Storage ============\\n  /**\\n   * @notice The gnosis amb requires destination gas to be specified on the origin.\\n   * The gas used will be passed in by the relayer to allow for real-time estimates,\\n   * but will be capped at the admin-set cap.\\n   */\\n  uint256 gasCap;\\n\\n  // ============ Events ============\\n\\n  /**\\n   * @notice Emitted when admin updates the gas cap\\n   * @param _previous The starting value\\n   * @param _updated The final value\\n   */\\n  event GasCapUpdated(uint256 _previous, uint256 _updated);\\n\\n  // ============ Constructor ============\\n  constructor(uint256 _gasCap) {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Admin Fns ============\\n  function setGasCap(uint256 _gasCap) public onlyOwner {\\n    _setGasCap(_gasCap);\\n  }\\n\\n  // ============ Internal Fns ============\\n\\n  /**\\n   * @notice Used (by admin) to update the gas cap\\n   * @param _gasCap The new value\\n   */\\n  function _setGasCap(uint256 _gasCap) internal {\\n    emit GasCapUpdated(gasCap, _gasCap);\\n    gasCap = _gasCap;\\n  }\\n\\n  /**\\n   * @notice Used to get the gas to use. Will be the original value IFF it\\n   * is less than the cap\\n   * @param _gas The proposed gas value\\n   */\\n  function _getGas(uint256 _gas) internal view returns (uint256) {\\n    if (_gas > gasCap) {\\n      _gas = gasCap;\\n    }\\n    return _gas;\\n  }\\n}\\n\",\"keccak256\":\"0xb8b52a3372f08490c918d1f490ad80764d54bd62d1638e4d17a5b552efe6587d\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/HubConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Connector} from \\\"./Connector.sol\\\";\\n\\n/**\\n * @title HubConnector\\n * @author Connext Labs, Inc.\\n * @notice This contract implements the messaging functions needed on the hub-side of a given AMB.\\n * The HubConnector has a limited set of functionality compared to the SpokeConnector, namely that\\n * it contains no logic to store or prove messages.\\n *\\n * @dev This contract should be deployed on the hub-side of an AMB (i.e. on L1), and contracts\\n * which extend this should implement the virtual functions defined in the BaseConnector class\\n */\\nabstract contract HubConnector is Connector {\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) Connector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector) {}\\n\\n  // ============ Public fns ============\\n  /**\\n   * @notice Sends a message over the amb\\n   * @dev This is called by the root manager *only* on mainnet to propagate the aggregate root\\n   */\\n  function sendMessage(bytes memory _data, bytes memory _encodedData) external payable onlyRootManager {\\n    _sendMessage(_data, _encodedData);\\n    emit MessageSent(_data, _encodedData, msg.sender);\\n  }\\n}\\n\",\"keccak256\":\"0xc35621419ca872ed0550b0943a577b39942f3d2c9b54de008fee382d5ad290e4\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/zksync/ZkSyncHubConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// Importing zkSync contract interface\\nimport \\\"@matterlabs/zksync-contracts/l1/contracts/zksync/interfaces/IZkSync.sol\\\";\\n\\nimport {IRootManager} from \\\"../../interfaces/IRootManager.sol\\\";\\nimport {HubConnector} from \\\"../HubConnector.sol\\\";\\nimport {Connector} from \\\"../Connector.sol\\\";\\nimport {GasCap} from \\\"../GasCap.sol\\\";\\n\\ncontract ZkSyncHubConnector is HubConnector, GasCap {\\n  // ============ Storage ============\\n\\n  // NOTE: This is needed because we need to track the roots we've\\n  // already sent across chains. When sending an zkSync message, we send calldata\\n  // for Connector.processMessage. At any point these messages could be processed\\n  // before the timeout using `processFromRoot` or after the timeout using `process`\\n  // we track the roots sent here to ensure we process each root once\\n  mapping(bytes32 => bool) public processed;\\n\\n  // ============ Constructor ============\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    address _stateCommitmentChain,\\n    uint256 _gasCap\\n  ) HubConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector) GasCap(_gasCap) {}\\n\\n  // ============ Override Fns ============\\n  function _verifySender(address) internal pure override returns (bool) {\\n    // NOTE: sender from L2 is asserted in the `processMessageFromRoot` function. Cross domain\\n    // sender is packed in with the L2Message struct, so you should not be verifying the\\n    // sender using this method. Always return false.\\n    // See docs here: https://v2-docs.zksync.io/dev/developer-guides/Bridging/l2-l1.html#prove-inclusion-of-the-message-into-the-l2-block\\n    return false;\\n  }\\n\\n  /**\\n   * @dev Sends `aggregateRoot` to messaging on l2\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\\n    // Should include gasPrice value for `l2TransactionBaseCOst` specialized calldata\\n    require(_encodedData.length == 32, \\\"!data length\\\");\\n    // Should always be dispatching the aggregate root\\n    require(_data.length == 32, \\\"!length\\\");\\n    // Get the calldata\\n    bytes memory _calldata = abi.encodeWithSelector(Connector.processMessage.selector, _data);\\n    // Get the gas data\\n    uint256 gasPrice = abi.decode(_encodedData, (uint256));\\n\\n    // Declare the ergs limit\\n    uint256 ERGS_LIMIT = 10000;\\n\\n    // Get the max supplied\\n    uint256 fee = _getGas(msg.value);\\n\\n    // Ensure it is above minimum\\n    require(fee > IZkSync(AMB).l2TransactionBaseCost(gasPrice, ERGS_LIMIT, uint32(_calldata.length)), \\\"!fees\\\");\\n\\n    // Dispatch message\\n    // https://v2-docs.zksync.io/dev/developer-guides/Bridging/l1-l2.html#structure\\n    // calling L2 smart contract from L1 Example contract\\n    // note: msg.value must be passed in and can be retrieved from the AMB view function `l2TransactionBaseCost`\\n    // https://v2-docs.zksync.io/dev/developer-guides/Bridging/l1-l2.html#using-contract-interface-in-your-project\\n    IZkSync(AMB).requestL2Transaction{value: fee}(\\n      // The address of the L2 contract to call\\n      mirrorConnector,\\n      // We pass no ETH with the call\\n      0,\\n      // Encoding the calldata for the execute\\n      _calldata,\\n      // Ergs limit\\n      ERGS_LIMIT,\\n      // factory dependencies\\n      new bytes[](0)\\n    );\\n  }\\n\\n  // DO NOT override _processMessage, should revert from `Connector` class. All messages must use the\\n  // `processMessageFromRoot` flow.\\n\\n  /**\\n   * @notice Processes message and proves inclusion of that message in the root.\\n   *\\n   * @dev modified from: https://v2-docs.zksync.io/dev/developer-guides/Bridging/l2-l1.html#prove-inclusion-of-the-message-into-the-l2-block\\n   */\\n  function processMessageFromRoot(\\n    // zkSync block number in which the message was sent\\n    uint32 _l2BlockNumber,\\n    // Message index, that can be received via API\\n    uint256 _l2MessageIndex,\\n    // The L2 transaction number in a block, in which the log was sent\\n    uint16 _l2TxNumberInBlock,\\n    // The message that was sent from l2\\n    bytes calldata _message,\\n    // Merkle proof for the message\\n    bytes32[] calldata _proof\\n  ) external {\\n    // sanity check root length (32 bytes root)\\n    require(_message.length == 32, \\\"!length\\\");\\n\\n    IZkSync zksync = IZkSync(AMB);\\n    L2Message memory message = L2Message({\\n      txNumberInBlock: _l2TxNumberInBlock,\\n      sender: mirrorConnector,\\n      data: _message\\n    });\\n\\n    bool success = zksync.proveL2MessageInclusion(_l2BlockNumber, _l2MessageIndex, message, _proof);\\n    require(success, \\\"!proven\\\");\\n\\n    bytes32 _root = bytes32(_message);\\n\\n    // NOTE: there are no guarantees the messages are processed once, so processed roots\\n    // must be tracked within the connector. See:\\n    // https://v2-docs.zksync.io/dev/developer-guides/Bridging/l2-l1.html#prove-inclusion-of-the-message-into-the-l2-block\\n    if (!processed[_root]) {\\n      // set root to processed\\n      processed[_root] = true;\\n      // update the root on the root manager\\n      IRootManager(ROOT_MANAGER).aggregate(MIRROR_DOMAIN, _root);\\n      emit MessageProcessed(_message, msg.sender);\\n    } // otherwise root was already sent to root manager\\n  }\\n}\\n\",\"keccak256\":\"0x5aa6689d9a5de7a8b5c59b971a4bf601694a2cca0d32ee5df961c4a090d1f326\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IRootManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\ninterface IRootManager {\\n  /**\\n   * @notice This is called by relayers to generate + send the mixed root from mainnet via AMB to\\n   * spoke domains.\\n   * @dev This must read information for the root from the registered AMBs.\\n   */\\n  function propagate(\\n    address[] calldata _connectors,\\n    uint256[] calldata _fees,\\n    bytes[] memory _encodedData\\n  ) external payable;\\n\\n  /**\\n   * @notice Called by the connectors for various domains on the hub to aggregate their latest\\n   * inbound root.\\n   * @dev This must read information for the root from the registered AMBs\\n   */\\n  function aggregate(uint32 _domain, bytes32 _outbound) external;\\n}\\n\",\"keccak256\":\"0xa895dfaa4baad37a636e7e7e7da72a0a4badfd2d3d8256f975e5101cd5a98236\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/zksync/ZkSyncHubConnector.sol:ZkSyncHubConnector","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/zksync/ZkSyncHubConnector.sol:ZkSyncHubConnector","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/zksync/ZkSyncHubConnector.sol:ZkSyncHubConnector","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39051,"contract":"contracts/messaging/connectors/zksync/ZkSyncHubConnector.sol:ZkSyncHubConnector","label":"mirrorConnector","offset":0,"slot":"3","type":"t_address"},{"astId":39301,"contract":"contracts/messaging/connectors/zksync/ZkSyncHubConnector.sol:ZkSyncHubConnector","label":"gasCap","offset":0,"slot":"4","type":"t_uint256"},{"astId":47408,"contract":"contracts/messaging/connectors/zksync/ZkSyncHubConnector.sol:ZkSyncHubConnector","label":"processed","offset":0,"slot":"5","type":"t_mapping(t_bytes32,t_bool)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"GasCapUpdated(uint256,uint256)":{"notice":"Emitted when admin updates the gas cap"},"MessageProcessed(bytes,address)":{"notice":"Emitted whenever a message is successfully received over an AMB"},"MessageSent(bytes,bytes,address)":{"notice":"Emitted whenever a message is successfully sent over an AMB"}},"kind":"user","methods":{"AMB()":{"notice":"Address of the AMB on this domain."},"DOMAIN()":{"notice":"The domain of this Messaging (i.e. Connector) contract."},"MIRROR_DOMAIN()":{"notice":"The domain of the corresponding messaging (i.e. Connector) contract."},"ROOT_MANAGER()":{"notice":"RootManager contract address."},"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"mirrorConnector()":{"notice":"Connector on L2 for L1 connectors, and vice versa."},"owner()":{"notice":"Returns the address of the current owner."},"processMessage(bytes)":{"notice":"Processes a message received by an AMB"},"processMessageFromRoot(uint32,uint256,uint16,bytes,bytes32[])":{"notice":"Processes message and proves inclusion of that message in the root."},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"sendMessage(bytes,bytes)":{"notice":"Sends a message over the amb"},"setMirrorConnector(address)":{"notice":"Sets the address of the l2Connector for this domain"},"verifySender(address)":{"notice":"Checks the cross domain sender for a given address"}},"version":1}}},"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol":{"ZkSyncSpokeConnector":{"abi":[{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"uint32","name":"_mirrorDomain","type":"uint32"},{"internalType":"address","name":"_amb","type":"address"},{"internalType":"address","name":"_rootManager","type":"address"},{"internalType":"address","name":"_mirrorConnector","type":"address"},{"internalType":"uint256","name":"_processGas","type":"uint256"},{"internalType":"uint256","name":"_reserveGas","type":"uint256"},{"internalType":"uint256","name":"_delayBlocks","type":"uint256"},{"internalType":"address","name":"_merkle","type":"address"},{"internalType":"address","name":"_watcherManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Connector__processMessage_notUsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"inputs":[],"name":"RateLimited__rateLimited_messageSendRateExceeded","type":"error"},{"inputs":[],"name":"TypedMemView__index_indexMoreThan32Bytes","type":"error"},{"inputs":[{"internalType":"uint256","name":"loc","type":"uint256"},{"internalType":"uint256","name":"len","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"slice","type":"uint256"}],"name":"TypedMemView__index_overrun","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_identityOOG","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_invalidPointer","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_nullPointer","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"AggregateRootVerified","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"updated","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"DelayBlocksUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"message","type":"bytes"}],"name":"Dispatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"aggregateRoot","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"aggregateIndex","type":"uint256"}],"name":"MessageProven","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"encodedData","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"current","type":"address"}],"name":"MirrorConnectorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"mirrorDomain","type":"uint32"},{"indexed":false,"internalType":"address","name":"amb","type":"address"},{"indexed":false,"internalType":"address","name":"rootManager","type":"address"},{"indexed":false,"internalType":"address","name":"mirrorConnector","type":"address"}],"name":"NewConnector","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"leaf","type":"bytes32"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"returnData","type":"bytes"}],"name":"Process","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updater","type":"address"},{"indexed":false,"internalType":"uint256","name":"newRateLimit","type":"uint256"}],"name":"SendRateLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"SenderAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"SenderRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"watcherManager","type":"address"}],"name":"WatcherManagerChanged","type":"event"},{"inputs":[],"name":"AMB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MERKLE","outputs":[{"internalType":"contract MerkleTreeManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIRROR_DOMAIN","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROCESS_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"addSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlistedSenders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_destinationDomain","type":"uint32"},{"internalType":"bytes32","name":"_recipientAddress","type":"bytes32"},{"internalType":"bytes","name":"_messageBody","type":"bytes"}],"name":"dispatch","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"home","outputs":[{"internalType":"contract IOutbox","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_potentialReplica","type":"address"}],"name":"isReplica","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"localDomain","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"messages","outputs":[{"internalType":"enum SpokeConnector.MessageStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mirrorConnector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"nonces","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"outboundRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"pendingAggregateRoots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"processMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32[32]","name":"path","type":"bytes32[32]"},{"internalType":"uint256","name":"index","type":"uint256"}],"internalType":"struct SpokeConnector.Proof[]","name":"_proofs","type":"tuple[]"},{"internalType":"bytes32","name":"_aggregateRoot","type":"bytes32"},{"internalType":"bytes32[32]","name":"_aggregatePath","type":"bytes32[32]"},{"internalType":"uint256","name":"_aggregateIndex","type":"uint256"}],"name":"proveAndProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"provenAggregateRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"provenMessageRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rateLimitBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_fraudulentRoot","type":"bytes32"}],"name":"removePendingAggregateRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"removeSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_encodedData","type":"bytes"}],"name":"send","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"sentMessageRoots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_delayBlocks","type":"uint256"}],"name":"setDelayBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mirrorConnector","type":"address"}],"name":"setMirrorConnector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rateLimit","type":"uint256"}],"name":"setRateLimitBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_watcherManager","type":"address"}],"name":"setWatcherManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_expected","type":"address"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"watcherManager","outputs":[{"internalType":"contract WatcherManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"addSender(address)":{"details":"Only allowlisted routers (senders) can call `dispatch`."},"dispatch(uint32,bytes32,bytes)":{"details":"The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \"hub\"), it will be combined into a single aggregate root by RootManager (along with outbound roots from other chains). This aggregate root will be redistributed to all destination chains. NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions"},"home()":{"details":"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad","returns":{"_0":"The local inbox contract"}},"isReplica(address)":{"returns":{"_0":"True if _potentialReplica is an enrolled Replica"}},"paused()":{"details":"Returns true if the contract is paused, and false otherwise."},"processMessage(bytes)":{"details":"This is called by AMBs to process messages originating from mirror connector"},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":{"details":"Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.Intended to be called by the relayer at specific intervals during runtime.Will record a calculated root as having been proven if we've already proven that it was included in the aggregateRoot.","params":{"_aggregateIndex":"Index of the inbound root in the aggregator's merkle tree in the hub.","_aggregatePath":"Merkle path of inclusion for the inbound root.","_aggregateRoot":"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.","_proofs":"Batch of Proofs containing messages for proving/processing."}},"removePendingAggregateRoot(bytes32)":{"details":"This method is required for handling fraud cases in the current construction.","params":{"_fraudulentRoot":"Target fraudulent root that should be erased from the `pendingAggregateRoots` mapping."}},"removeSender(address)":{"details":"Only allowlisted routers (senders) can call `dispatch`."},"renounceOwnership()":{"details":"Renounce ownership should be impossible as long as it is impossible in the WatcherClient, and as long as only the owner can remove pending roots in case of fraud."},"setRateLimitBlocks(uint256)":{"details":"Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)","params":{"_rateLimit":"The number of blocks require between sending messages. If set to 0, rate limiting for this spoke connector will be disabled."}},"withdrawFunds(address)":{"details":"Withdraws the entire balance of the contract.","params":{"_to":"The recipient of the funds withdrawn"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_10599":{"entryPoint":null,"id":10599,"parameterSlots":0,"returnSlots":0},"@_10699":{"entryPoint":null,"id":10699,"parameterSlots":0,"returnSlots":0},"@_38838":{"entryPoint":null,"id":38838,"parameterSlots":1,"returnSlots":0},"@_39152":{"entryPoint":null,"id":39152,"parameterSlots":5,"returnSlots":0},"@_39257":{"entryPoint":null,"id":39257,"parameterSlots":0,"returnSlots":0},"@_39687":{"entryPoint":null,"id":39687,"parameterSlots":10,"returnSlots":0},"@_47673":{"entryPoint":null,"id":47673,"parameterSlots":10,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":789,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":688,"id":49908,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":920,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_address_fromMemory":{"entryPoint":944,"id":null,"parameterSlots":2,"returnSlots":10},"abi_decode_uint32_fromMemory":{"entryPoint":894,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3682:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"73:108:181","statements":[{"nodeType":"YulAssignment","src":"83:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"98:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"92:5:181"},"nodeType":"YulFunctionCall","src":"92:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"83:5:181"}]},{"body":{"nodeType":"YulBlock","src":"159:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"168:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"171:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"161:6:181"},"nodeType":"YulFunctionCall","src":"161:12:181"},"nodeType":"YulExpressionStatement","src":"161:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"127:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"138:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"145:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"134:3:181"},"nodeType":"YulFunctionCall","src":"134:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"124:2:181"},"nodeType":"YulFunctionCall","src":"124:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"117:6:181"},"nodeType":"YulFunctionCall","src":"117:41:181"},"nodeType":"YulIf","src":"114:61:181"}]},"name":"abi_decode_uint32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"52:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"63:5:181","type":""}],"src":"14:167:181"},{"body":{"nodeType":"YulBlock","src":"246:117:181","statements":[{"nodeType":"YulAssignment","src":"256:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"271:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"265:5:181"},"nodeType":"YulFunctionCall","src":"265:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"256:5:181"}]},{"body":{"nodeType":"YulBlock","src":"341:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"350:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"353:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"343:6:181"},"nodeType":"YulFunctionCall","src":"343:12:181"},"nodeType":"YulExpressionStatement","src":"343:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"300:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"311:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"326:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"331:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"322:3:181"},"nodeType":"YulFunctionCall","src":"322:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"335:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"318:3:181"},"nodeType":"YulFunctionCall","src":"318:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"307:3:181"},"nodeType":"YulFunctionCall","src":"307:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"297:2:181"},"nodeType":"YulFunctionCall","src":"297:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"290:6:181"},"nodeType":"YulFunctionCall","src":"290:50:181"},"nodeType":"YulIf","src":"287:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"225:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"236:5:181","type":""}],"src":"186:177:181"},{"body":{"nodeType":"YulBlock","src":"600:672:181","statements":[{"body":{"nodeType":"YulBlock","src":"647:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"656:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"659:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"649:6:181"},"nodeType":"YulFunctionCall","src":"649:12:181"},"nodeType":"YulExpressionStatement","src":"649:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"621:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"630:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"617:3:181"},"nodeType":"YulFunctionCall","src":"617:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"642:3:181","type":"","value":"320"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"613:3:181"},"nodeType":"YulFunctionCall","src":"613:33:181"},"nodeType":"YulIf","src":"610:53:181"},{"nodeType":"YulAssignment","src":"672:49:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"711:9:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"682:28:181"},"nodeType":"YulFunctionCall","src":"682:39:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"672:6:181"}]},{"nodeType":"YulAssignment","src":"730:58:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"773:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"784:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"769:3:181"},"nodeType":"YulFunctionCall","src":"769:18:181"}],"functionName":{"name":"abi_decode_uint32_fromMemory","nodeType":"YulIdentifier","src":"740:28:181"},"nodeType":"YulFunctionCall","src":"740:48:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"730:6:181"}]},{"nodeType":"YulAssignment","src":"797:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"841:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"852:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"837:3:181"},"nodeType":"YulFunctionCall","src":"837:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"807:29:181"},"nodeType":"YulFunctionCall","src":"807:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"797:6:181"}]},{"nodeType":"YulAssignment","src":"865:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"909:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"920:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"905:3:181"},"nodeType":"YulFunctionCall","src":"905:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"875:29:181"},"nodeType":"YulFunctionCall","src":"875:49:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"865:6:181"}]},{"nodeType":"YulAssignment","src":"933:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"977:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"988:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"973:3:181"},"nodeType":"YulFunctionCall","src":"973:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"943:29:181"},"nodeType":"YulFunctionCall","src":"943:50:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"933:6:181"}]},{"nodeType":"YulAssignment","src":"1002:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1022:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1033:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1018:3:181"},"nodeType":"YulFunctionCall","src":"1018:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1012:5:181"},"nodeType":"YulFunctionCall","src":"1012:26:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"1002:6:181"}]},{"nodeType":"YulAssignment","src":"1047:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1067:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1078:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1063:3:181"},"nodeType":"YulFunctionCall","src":"1063:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1057:5:181"},"nodeType":"YulFunctionCall","src":"1057:26:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"1047:6:181"}]},{"nodeType":"YulAssignment","src":"1092:36:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1112:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1123:3:181","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1108:3:181"},"nodeType":"YulFunctionCall","src":"1108:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1102:5:181"},"nodeType":"YulFunctionCall","src":"1102:26:181"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"1092:6:181"}]},{"nodeType":"YulAssignment","src":"1137:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1181:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1192:3:181","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1177:3:181"},"nodeType":"YulFunctionCall","src":"1177:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"1147:29:181"},"nodeType":"YulFunctionCall","src":"1147:50:181"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"1137:6:181"}]},{"nodeType":"YulAssignment","src":"1206:60:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1250:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1261:3:181","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1246:3:181"},"nodeType":"YulFunctionCall","src":"1246:19:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"1216:29:181"},"nodeType":"YulFunctionCall","src":"1216:50:181"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"1206:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"494:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"505:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"517:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"525:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"533:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"541:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"549:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"557:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"565:6:181","type":""},{"name":"value7","nodeType":"YulTypedName","src":"573:6:181","type":""},{"name":"value8","nodeType":"YulTypedName","src":"581:6:181","type":""},{"name":"value9","nodeType":"YulTypedName","src":"589:6:181","type":""}],"src":"368:904:181"},{"body":{"nodeType":"YulBlock","src":"1451:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1468:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1479:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1461:6:181"},"nodeType":"YulFunctionCall","src":"1461:21:181"},"nodeType":"YulExpressionStatement","src":"1461:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1502:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1513:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1498:3:181"},"nodeType":"YulFunctionCall","src":"1498:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1518:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1491:6:181"},"nodeType":"YulFunctionCall","src":"1491:30:181"},"nodeType":"YulExpressionStatement","src":"1491:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1541:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1552:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1537:3:181"},"nodeType":"YulFunctionCall","src":"1537:18:181"},{"hexValue":"656d70747920646f6d61696e","kind":"string","nodeType":"YulLiteral","src":"1557:14:181","type":"","value":"empty domain"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1530:6:181"},"nodeType":"YulFunctionCall","src":"1530:42:181"},"nodeType":"YulExpressionStatement","src":"1530:42:181"},{"nodeType":"YulAssignment","src":"1581:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1593:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1604:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1589:3:181"},"nodeType":"YulFunctionCall","src":"1589:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1581:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1428:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1442:4:181","type":""}],"src":"1277:336:181"},{"body":{"nodeType":"YulBlock","src":"1792:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1809:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1820:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1802:6:181"},"nodeType":"YulFunctionCall","src":"1802:21:181"},"nodeType":"YulExpressionStatement","src":"1802:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1843:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1854:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1839:3:181"},"nodeType":"YulFunctionCall","src":"1839:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1859:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1832:6:181"},"nodeType":"YulFunctionCall","src":"1832:30:181"},"nodeType":"YulExpressionStatement","src":"1832:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1882:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1893:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1878:3:181"},"nodeType":"YulFunctionCall","src":"1878:18:181"},{"hexValue":"656d70747920726f6f744d616e61676572","kind":"string","nodeType":"YulLiteral","src":"1898:19:181","type":"","value":"empty rootManager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1871:6:181"},"nodeType":"YulFunctionCall","src":"1871:47:181"},"nodeType":"YulExpressionStatement","src":"1871:47:181"},{"nodeType":"YulAssignment","src":"1927:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1939:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1950:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1935:3:181"},"nodeType":"YulFunctionCall","src":"1935:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1927:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1769:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1783:4:181","type":""}],"src":"1618:341:181"},{"body":{"nodeType":"YulBlock","src":"2121:227:181","statements":[{"nodeType":"YulAssignment","src":"2131:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2143:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2154:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2139:3:181"},"nodeType":"YulFunctionCall","src":"2139:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2131:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"2166:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2184:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2189:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2180:3:181"},"nodeType":"YulFunctionCall","src":"2180:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"2193:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2176:3:181"},"nodeType":"YulFunctionCall","src":"2176:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2170:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2211:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2226:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2234:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2222:3:181"},"nodeType":"YulFunctionCall","src":"2222:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2204:6:181"},"nodeType":"YulFunctionCall","src":"2204:34:181"},"nodeType":"YulExpressionStatement","src":"2204:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2258:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2269:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2254:3:181"},"nodeType":"YulFunctionCall","src":"2254:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2278:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2286:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2274:3:181"},"nodeType":"YulFunctionCall","src":"2274:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2247:6:181"},"nodeType":"YulFunctionCall","src":"2247:43:181"},"nodeType":"YulExpressionStatement","src":"2247:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2310:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2321:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2306:3:181"},"nodeType":"YulFunctionCall","src":"2306:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"2330:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2338:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2326:3:181"},"nodeType":"YulFunctionCall","src":"2326:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2299:6:181"},"nodeType":"YulFunctionCall","src":"2299:43:181"},"nodeType":"YulExpressionStatement","src":"2299:43:181"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2074:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2085:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2093:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2101:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2112:4:181","type":""}],"src":"1964:384:181"},{"body":{"nodeType":"YulBlock","src":"2527:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2544:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2555:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2537:6:181"},"nodeType":"YulFunctionCall","src":"2537:21:181"},"nodeType":"YulExpressionStatement","src":"2537:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2578:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2589:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2574:3:181"},"nodeType":"YulFunctionCall","src":"2574:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2594:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2567:6:181"},"nodeType":"YulFunctionCall","src":"2567:30:181"},"nodeType":"YulExpressionStatement","src":"2567:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2617:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2628:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2613:3:181"},"nodeType":"YulFunctionCall","src":"2613:18:181"},{"hexValue":"2170726f6365737320676173","kind":"string","nodeType":"YulLiteral","src":"2633:14:181","type":"","value":"!process gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2606:6:181"},"nodeType":"YulFunctionCall","src":"2606:42:181"},"nodeType":"YulExpressionStatement","src":"2606:42:181"},{"nodeType":"YulAssignment","src":"2657:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2669:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2680:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2665:3:181"},"nodeType":"YulFunctionCall","src":"2665:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2657:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2504:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2518:4:181","type":""}],"src":"2353:336:181"},{"body":{"nodeType":"YulBlock","src":"2868:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2885:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2896:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2878:6:181"},"nodeType":"YulFunctionCall","src":"2878:21:181"},"nodeType":"YulExpressionStatement","src":"2878:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2919:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2930:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2915:3:181"},"nodeType":"YulFunctionCall","src":"2915:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2935:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2908:6:181"},"nodeType":"YulFunctionCall","src":"2908:30:181"},"nodeType":"YulExpressionStatement","src":"2908:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2958:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2969:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2954:3:181"},"nodeType":"YulFunctionCall","src":"2954:18:181"},{"hexValue":"217265736572766520676173","kind":"string","nodeType":"YulLiteral","src":"2974:14:181","type":"","value":"!reserve gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2947:6:181"},"nodeType":"YulFunctionCall","src":"2947:42:181"},"nodeType":"YulExpressionStatement","src":"2947:42:181"},{"nodeType":"YulAssignment","src":"2998:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3010:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3021:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3006:3:181"},"nodeType":"YulFunctionCall","src":"3006:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2998:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2845:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2859:4:181","type":""}],"src":"2694:336:181"},{"body":{"nodeType":"YulBlock","src":"3209:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3226:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3237:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3219:6:181"},"nodeType":"YulFunctionCall","src":"3219:21:181"},"nodeType":"YulExpressionStatement","src":"3219:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3260:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3271:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3256:3:181"},"nodeType":"YulFunctionCall","src":"3256:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"3276:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3249:6:181"},"nodeType":"YulFunctionCall","src":"3249:30:181"},"nodeType":"YulExpressionStatement","src":"3249:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3299:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3310:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3295:3:181"},"nodeType":"YulFunctionCall","src":"3295:18:181"},{"hexValue":"217a65726f206d65726b6c65","kind":"string","nodeType":"YulLiteral","src":"3315:14:181","type":"","value":"!zero merkle"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3288:6:181"},"nodeType":"YulFunctionCall","src":"3288:42:181"},"nodeType":"YulExpressionStatement","src":"3288:42:181"},{"nodeType":"YulAssignment","src":"3339:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3351:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3362:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3347:3:181"},"nodeType":"YulFunctionCall","src":"3347:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3339:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3186:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3200:4:181","type":""}],"src":"3035:336:181"},{"body":{"nodeType":"YulBlock","src":"3505:175:181","statements":[{"nodeType":"YulAssignment","src":"3515:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3527:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3538:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3523:3:181"},"nodeType":"YulFunctionCall","src":"3523:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3515:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"3550:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3568:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3573:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3564:3:181"},"nodeType":"YulFunctionCall","src":"3564:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3577:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3560:3:181"},"nodeType":"YulFunctionCall","src":"3560:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3554:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3595:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3610:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3618:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3606:3:181"},"nodeType":"YulFunctionCall","src":"3606:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3588:6:181"},"nodeType":"YulFunctionCall","src":"3588:34:181"},"nodeType":"YulExpressionStatement","src":"3588:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3642:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3653:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3638:3:181"},"nodeType":"YulFunctionCall","src":"3638:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3662:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3670:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3658:3:181"},"nodeType":"YulFunctionCall","src":"3658:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3631:6:181"},"nodeType":"YulFunctionCall","src":"3631:43:181"},"nodeType":"YulExpressionStatement","src":"3631:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3466:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3477:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3485:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3496:4:181","type":""}],"src":"3376:304:181"}]},"contents":"{\n    { }\n    function abi_decode_uint32_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32t_uint32t_addresst_addresst_addresst_uint256t_uint256t_uint256t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9\n    {\n        if slt(sub(dataEnd, headStart), 320) { revert(0, 0) }\n        value0 := abi_decode_uint32_fromMemory(headStart)\n        value1 := abi_decode_uint32_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n        value4 := abi_decode_address_fromMemory(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n        value6 := mload(add(headStart, 192))\n        value7 := mload(add(headStart, 224))\n        value8 := abi_decode_address_fromMemory(add(headStart, 256))\n        value9 := abi_decode_address_fromMemory(add(headStart, 288))\n    }\n    function abi_encode_tuple_t_stringliteral_9b980d245a48554c42a057c8ef003e5a19b5b34e47ac4e478764a99637073c04__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"empty domain\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_2200a5301d5a9fab771f4ada9a1572d9aedc137a1a712ff31972d5e5bd1639e1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"empty rootManager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_325c223dad6467cb765a4949047db5890da68c3e9bfd57ae9685bf9067fdeee8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!process gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_404f5df42da45979819b73b29dd75134af7464fb82cc2e5b58d7a7db7048827d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!reserve gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c4eae7c1a2878753f332cae4f2f3b3c0a8609a7178cad0c6118cb1d157f29ca8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!zero merkle\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"6101606040523480156200001257600080fd5b506040516200386e3803806200386e8339810160408190526200003591620003b0565b89898989898989898989808a8a8a8a8a6200005033620002b0565b8463ffffffff166000036200009b5760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620000e75760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b604482015260640162000092565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e0528116156200011f576200011f8162000315565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a350506003805460ff60a01b191690555050600480546001600160a01b0319166001600160a01b039390931692909217909155506001600755620cf84f8511620001f25760405162461bcd60e51b815260206004820152600c60248201526b2170726f636573732067617360a01b604482015260640162000092565b613a978411620002345760405162461bcd60e51b815260206004820152600c60248201526b21726573657276652067617360a01b604482015260640162000092565b6101208590526101408490526001600160a01b038216620002875760405162461bcd60e51b815260206004820152600c60248201526b217a65726f206d65726b6c6560a01b604482015260640162000092565b506001600160a01b03166101005260085550620004649f50505050505050505050505050505050565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b805163ffffffff811681146200039357600080fd5b919050565b80516001600160a01b03811681146200039357600080fd5b6000806000806000806000806000806101408b8d031215620003d157600080fd5b620003dc8b6200037e565b9950620003ec60208c016200037e565b9850620003fc60408c0162000398565b97506200040c60608c0162000398565b96506200041c60808c0162000398565b955060a08b0151945060c08b0151935060e08b01519250620004426101008c0162000398565b9150620004536101208c0162000398565b90509295989b9194979a5092959850565b60805160a05160c05160e051610100516101205161014051613369620005056000396000818161031a0152611c9e0152600081816108e301528181611cbf0152611d4c01526000818161070a01528181610a6001528181610fa00152611674015260006102aa015260006105380152600081816108990152610c0801526000818161047f01528181610646015281816116160152611b9e01526133696000f3fe60806040526004361061028c5760003560e01c80638456cb591161015a578063b95a2001116100c1578063d69f9d611161007a578063d69f9d6114610887578063d7d317b3146108bb578063d88beda2146108d1578063db1b765914610905578063e0fed01014610925578063fa31de011461094557600080fd5b8063b95a2001146107c2578063c5b350df146107f5578063cc3942831461080a578063d1851c921461082a578063d232c22014610848578063d2a3cc711461086757600080fd5b8063a01892a511610113578063a01892a5146106f8578063a792c29b1461072c578063ad9c0c2e1461074c578063b1f8100d14610762578063b2f8764314610782578063b697f531146107a257600080fd5b80638456cb59146106225780638d3638f4146106375780638da5cb5b1461066a57806398c9f2b9146106885780639d3117c7146106b85780639fa92f9d146106e557600080fd5b806352a9674b116101fe5780636159ada1116101b75780636159ada11461057257806365eaf11b146105a257806368742da6146105b75780636a42b8f8146105d75780636b04a933146105ed578063715018a61461060d57600080fd5b806352a9674b1461046d578063572386ca146104a1578063579c1618146104d15780635bd11efc146104e75780635c975abb146105075780635f61e3ec1461052657600080fd5b8063301f07c311610250578063301f07c31461039a5780633cf52ffb146103da5780633f4ba83a146103ef5780634ff746f614610404578063508a109b146104245780635190bc531461044457600080fd5b806314168416146102985780631eeaabea146102e657806325e3beda146103085780632bb1ae7c1461034a5780632bbd59ca1461035d57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102cc7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b3480156102f257600080fd5b50610306610301366004612d21565b610973565b005b34801561031457600080fd5b5061033c7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016102dd565b610306610358366004612ddd565b610a1d565b34801561036957600080fd5b5061038d610378366004612d21565b600f6020526000908152604090205460ff1681565b6040516102dd9190612e28565b3480156103a657600080fd5b506103ca6103b5366004612d21565b600a6020526000908152604090205460ff1681565b60405190151581526020016102dd565b3480156103e657600080fd5b5060025461033c565b3480156103fb57600080fd5b50610306610bc0565b34801561041057600080fd5b5061030661041f366004612ddd565b610bfd565b34801561043057600080fd5b5061030661043f366004612e50565b610ca3565b34801561045057600080fd5b506103ca61045f366004612eec565b6001600160a01b0316301490565b34801561047957600080fd5b506102cc7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ad57600080fd5b506103ca6104bc366004612d21565b600c6020526000908152604090205460ff1681565b3480156104dd57600080fd5b5061033c60055481565b3480156104f357600080fd5b50610306610502366004612eec565b610f65565b34801561051357600080fd5b50600354600160a01b900460ff166103ca565b34801561053257600080fd5b5061055a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102dd565b34801561057e57600080fd5b506103ca61058d366004612eec565b600d6020526000908152604090205460ff1681565b3480156105ae57600080fd5b5061033c610f9c565b3480156105c357600080fd5b506103066105d2366004612eec565b611025565b3480156105e357600080fd5b5062093a8061033c565b3480156105f957600080fd5b50610306610608366004612d21565b6110a2565b34801561061957600080fd5b5061030661116d565b34801561062e57600080fd5b50610306611198565b34801561064357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102cc565b34801561067657600080fd5b506000546001600160a01b031661055a565b34801561069457600080fd5b506103ca6106a3366004612d21565b600b6020526000908152604090205460ff1681565b3480156106c457600080fd5b5061033c6106d3366004612d21565b60096020526000908152604090205481565b3480156106f157600080fd5b503061055a565b34801561070457600080fd5b5061055a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561073857600080fd5b5060045461055a906001600160a01b031681565b34801561075857600080fd5b5061033c60085481565b34801561076e57600080fd5b5061030661077d366004612eec565b61124c565b34801561078e57600080fd5b5061030661079d366004612eec565b6112ea565b3480156107ae57600080fd5b506103066107bd366004612eec565b611366565b3480156107ce57600080fd5b506102cc6107dd366004612f2e565b600e6020526000908152604090205463ffffffff1681565b34801561080157600080fd5b506103066113e5565b34801561081657600080fd5b5060035461055a906001600160a01b031681565b34801561083657600080fd5b506001546001600160a01b031661055a565b34801561085457600080fd5b506000546001600160a01b0316156103ca565b34801561087357600080fd5b50610306610882366004612eec565b611455565b34801561089357600080fd5b5061055a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156108c757600080fd5b5061033c60065481565b3480156108dd57600080fd5b5061033c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561091157600080fd5b506103ca610920366004612eec565b61152c565b34801561093157600080fd5b50610306610940366004612d21565b611541565b34801561095157600080fd5b50610965610960366004612f49565b611575565b6040516102dd929190612ff0565b6000546001600160a01b0316331461099e576040516311a8a1bb60e31b815260040160405180910390fd5b60085481036109e35760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610a25611744565b43600554600654610a36919061301f565b1115610a55576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae09190613032565b6000818152600c602052604090205490915060ff1615610b365760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b60448201526064016109da565b600081604051602001610b4b91815260200190565b6040516020818303038152906040529050610b668184611791565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610bb39083908690339061304b565b60405180910390a1505050565b6000546001600160a01b03163314610beb576040516311a8a1bb60e31b815260040160405180910390fd5b610bf361184f565b610bfb61189f565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c5e5760405162461bcd60e51b81526004016109da9060208082526004908201526310a0a6a160e11b604082015260600190565b610c67816118f4565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610c98929190613089565b60405180910390a150565b610cab611744565b610cb361198d565b83610cea5760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b60448201526064016109da565b600085856000818110610cff57610cff6130b3565b9050602002810190610d1191906130c9565b610d1b90806130ea565b604051610d29929190613138565b604051809103902090506000610d908288886000818110610d4c57610d4c6130b3565b9050602002810190610d5e91906130c9565b60200189896000818110610d7457610d746130b3565b9050602002810190610d8691906130c9565b61042001356119e6565b9050610d9e81868686611a8d565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610ec45788888263ffffffff16818110610de357610de36130b3565b9050602002810190610df591906130c9565b610dff90806130ea565b604051610e0d929190613138565b604051809103902093506000610e62858b8b8563ffffffff16818110610e3557610e356130b3565b9050602002810190610e4791906130c9565b6020018c8c8663ffffffff16818110610d7457610d746130b3565b9050838114610ea15760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b60448201526064016109da565b506000848152600f60205260409020805460ff1916600190811790915501610dbd565b5060005b818163ffffffff161015610f5057610f4789898363ffffffff16818110610ef157610ef16130b3565b9050602002810190610f0391906130c9565b610f0d90806130ea565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8892505050565b50600101610ec8565b50505050610f5e6001600755565b5050505050565b6000546001600160a01b03163314610f90576040516311a8a1bb60e31b815260040160405180910390fd5b610f9981611e65565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110209190613032565b905090565b6000546001600160a01b03163314611050576040516311a8a1bb60e31b815260040160405180910390fd5b4761105b8282611ece565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d8260405161109691815260200190565b60405180910390a25050565b6000546001600160a01b031633146110cd576040516311a8a1bb60e31b815260040160405180910390fd5b6110d561184f565b600081815260096020526040812054900361112a5760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b60448201526064016109da565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610c989083815260200190565b6000546001600160a01b03163314610bfb576040516311a8a1bb60e31b815260040160405180910390fd5b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa1580156111e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112059190613148565b61123c5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b60448201526064016109da565b611244611744565b610bfb611fe7565b6000546001600160a01b03163314611277576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015611295575060025415155b156112b3576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036112e157604051634a2fb73f60e11b815260040160405180910390fd5b610f998161202a565b6000546001600160a01b03163314611315576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610c98565b6000546001600160a01b03163314611391576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610c98565b6001546001600160a01b03163314611410576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442611422919061316a565b11611440576040516324e0285f60e21b815260040160405180910390fd5b600154610bfb906001600160a01b0316612078565b6000546001600160a01b03163314611480576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b03908116908216036114de5760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e6167657200000000000000000060448201526064016109da565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610c98565b60006001600160a01b03821633145b92915050565b6000546001600160a01b0316331461156c576040516311a8a1bb60e31b815260040160405180910390fd5b610f99816120dd565b336000908152600d602052604081205460609060ff166115c65760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b60448201526064016109da565b63ffffffff8086166000908152600e60205260408120805491929190911690826115ef8361317d565b91906101000a81548163ffffffff021916908363ffffffff1602179055509050600061164e7f0000000000000000000000000000000000000000000000000000000000000000611645336001600160a01b031690565b848a8a8a61215b565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af11580156116c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e891906131a0565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f8361171a60018461316a565b848760405161172c94939291906131c4565b60405180910390a15090989197509095505050505050565b600354600160a01b900460ff1615610bfb5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016109da565b8051156117cf5760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b60448201526064016109da565b6117dc61800060086131f3565b6001600160a01b03166362f84b24836040518263ffffffff1660e01b8152600401611807919061321a565b6020604051808303816000875af1158015611826573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184a9190613032565b505050565b600354600160a01b900460ff16610bfb5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016109da565b6118a761184f565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6003546001600160a01b031633146119415760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b60448201526064016109da565b805160201461197c5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b60448201526064016109da565b610f996119888261322d565b612193565b6002600754036119df5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109da565b6002600755565b6000806000858152600f602052604090205460ff166002811115611a0c57611a0c612e12565b14611a4f5760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b60448201526064016109da565b611a838484602080602002604051908101604052809291908260208002808284376000920191909152508691506122bc9050565b90505b9392505050565b6000848152600b602052604090205460ff16611b8257611aac8361260a565b6000611ae28584602080602002604051908101604052809291908260208002808284376000920191909152508691506122bc9050565b9050838114611b295760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b60448201526064016109da565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611b789086815260200190565b60405180910390a3505b50505050565b600080611b95838261276a565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611bcd62ffffff19831661278e565b63ffffffff1614611c0f5760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b60448201526064016109da565b6000611c2062ffffff1983166127a3565b905060016000828152600f602052604090205460ff166002811115611c4757611c47612e12565b14611c7e5760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b60448201526064016109da565b6000818152600f60205260409020805460ff191660021790556001611ce37f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061301f565b611ced919061316a565b5a11611d245760405162461bcd60e51b81526004016109da906020808252600490820152632167617360e01b604082015260600190565b6000611d3562ffffff1984166127ec565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611d9062ffffff1988166127fd565b611d9f62ffffff198916612811565b611dae62ffffff198a16612826565b611dcb611dc062ffffff198c1661283b565b62ffffff1916612869565b604051602401611dde9493929190613254565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050611e188585600086856128b2565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890611e519088908b908690613283565b60405180910390a150505050505050919050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b80471015611f1e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109da565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f6b576040519150601f19603f3d011682016040523d82523d6000602084013e611f70565b606091505b505090508061184a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016109da565b611fef611744565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118d73390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60055481036121205760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b60448201526064016109da565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610c98565b6060868686868686604051602001612178969594939291906132a4565b60405160208183030381529060405290509695505050505050565b806121d15760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b60448201526064016109da565b600081815260096020526040902054156122245760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b60448201526064016109da565b6000818152600a602052604090205460ff16156122795760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b60448201526064016109da565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610c989083815260200190565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b8061264d5760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b60448201526064016109da565b6000818152600a602052604090205460ff16156126675750565b600081815260096020526040812054908190036126bd5760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b60448201526064016109da565b6008546126ca824361316a565b10156127185760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f742021766572696669656400000000000000000060448201526064016109da565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b81516000906020840161278564ffffffffff8516828461293d565b95945050505050565b600061153b62ffffff1983166028600461297a565b6000806127b98360781c6001600160601b031690565b6001600160601b0316905060006127d98460181c6001600160601b031690565b6001600160601b03169091209392505050565b600061153b6127fa836129aa565b90565b600061153b62ffffff19831682600461297a565b600061153b62ffffff1983166024600461297a565b600061153b62ffffff198316600460206129bb565b600061153b604c61285981601886901c6001600160601b031661316a565b62ffffff19851691906000612ac6565b60606000806128818460181c6001600160601b031690565b6001600160601b0316905060405191508192506128a18483602001612b42565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff8111156128d8576128d8612d3a565b6040519080825280601f01601f191660200182016040528015612902576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612923578692505b828152826000602083013e90999098509650505050505050565b60008061294a838561301f565b905060405181111561295a575060005b8060000361296f5762ffffff19915050611a86565b612785858585612c35565b60006129878260206132fe565b612992906008613317565b60ff166129a08585856129bb565b901c949350505050565b600061153b62ffffff198316602c60205b60008160ff166000036129d057506000611a86565b6129e38460181c6001600160601b031690565b6001600160601b03166129f960ff84168561301f565b1115612a6157612a128460781c6001600160601b031690565b612a258560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff831660648201526084016109da565b60208260ff161115612a865760405163045df3f960e01b815260040160405180910390fd5b600882026000612a9f8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612adc8660781c6001600160601b031690565b6001600160601b03169050612af086612cac565b84612afb878461301f565b612b05919061301f565b1115612b185762ffffff19915050612b3a565b612b22858261301f565b9050612b368364ffffffffff16828661293d565b9150505b949350505050565b600062ffffff1980841603612b6a5760405163148d513360e21b815260040160405180910390fd5b612b7383612ce5565b15612b9157604051632ee0949160e11b815260040160405180910390fd5b6000612ba68460181c6001600160601b031690565b6001600160601b031690506000612bc68560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115612be75760206060fd5b8386858560045afa905080612c0f57604051632af1bd9b60e21b815260040160405180910390fd5b612c2a612c1c8860d81c90565b64ffffffffff168786612c35565b979650505050505050565b60006060601883856001600160601b03821682148015612c5d575086816001600160601b0316145b612c965760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b60448201526064016109da565b96831b90961790911b90941790931b9392505050565b6000612cc18260181c6001600160601b031690565b612cd48360781c6001600160601b031690565b016001600160601b03169050919050565b6000612cf18260d81c90565b64ffffffffff1664ffffffffff03612d0b57506001919050565b6000612d1683612cac565b604051109392505050565b600060208284031215612d3357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612d6157600080fd5b813567ffffffffffffffff80821115612d7c57612d7c612d3a565b604051601f8301601f19908116603f01168101908282118183101715612da457612da4612d3a565b81604052838152866020858801011115612dbd57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215612def57600080fd5b813567ffffffffffffffff811115612e0657600080fd5b612b3a84828501612d50565b634e487b7160e01b600052602160045260246000fd5b6020810160038310612e4a57634e487b7160e01b600052602160045260246000fd5b91905290565b60008060008060006104608688031215612e6957600080fd5b853567ffffffffffffffff80821115612e8157600080fd5b818801915088601f830112612e9557600080fd5b813581811115612ea457600080fd5b8960208260051b8501011115612eb957600080fd5b602092830197509550508601359250610440860187811115612eda57600080fd5b94979396509194604001933592915050565b600060208284031215612efe57600080fd5b81356001600160a01b0381168114611a8657600080fd5b803563ffffffff81168114612f2957600080fd5b919050565b600060208284031215612f4057600080fd5b611a8682612f15565b600080600060608486031215612f5e57600080fd5b612f6784612f15565b925060208401359150604084013567ffffffffffffffff811115612f8a57600080fd5b612f9686828701612d50565b9150509250925092565b60005b83811015612fbb578181015183820152602001612fa3565b50506000910152565b60008151808452612fdc816020860160208601612fa0565b601f01601f19169290920160200192915050565b828152604060208201526000611a836040830184612fc4565b634e487b7160e01b600052601160045260246000fd5b8082018082111561153b5761153b613009565b60006020828403121561304457600080fd5b5051919050565b60608152600061305e6060830186612fc4565b82810360208401526130708186612fc4565b91505060018060a01b0383166040830152949350505050565b60408152600061309c6040830185612fc4565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e198336030181126130e057600080fd5b9190910192915050565b6000808335601e1984360301811261310157600080fd5b83018035915067ffffffffffffffff82111561311c57600080fd5b60200191503681900382131561313157600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561315a57600080fd5b81518015158114611a8657600080fd5b8181038181111561153b5761153b613009565b600063ffffffff80831681810361319657613196613009565b6001019392505050565b600080604083850312156131b357600080fd5b505080516020909101519092909150565b8481528360208201528260408201526080606082015260006131e96080830184612fc4565b9695505050505050565b6001600160a01b0381811683821601908082111561321357613213613009565b5092915050565b602081526000611a866020830184612fc4565b8051602080830151919081101561324e576000198160200360031b1b821691505b50919050565b600063ffffffff8087168352808616602084015250836040830152608060608301526131e96080830184612fc4565b83815282151560208201526060604082015260006127856060830184612fc4565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c83015282516132ec81604c850160208701612fa0565b91909101604c01979650505050505050565b60ff828116828216039081111561153b5761153b613009565b60ff81811683821602908116908181146132135761321361300956fea26469706673582212203324c0a31570b770dcaed9a52ea128dcf86ee78b7615426a61248186df3f62c064736f6c63430008110033","opcodes":"PUSH2 0x160 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x386E CODESIZE SUB DUP1 PUSH3 0x386E DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x3B0 JUMP JUMPDEST DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP1 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH3 0x50 CALLER PUSH3 0x2B0 JUMP JUMPDEST DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0x0 SUB PUSH3 0x9B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x32B6B83A3C903237B6B0B4B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xE7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x32B6B83A3C903937B7BA26B0B730B3B2B9 PUSH1 0x79 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x92 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0xA0 MSTORE DUP4 DUP2 AND PUSH1 0xC0 MSTORE SWAP1 DUP6 AND PUSH1 0xE0 MSTORE DUP2 AND ISZERO PUSH3 0x11F JUMPI PUSH3 0x11F DUP2 PUSH3 0x315 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE DUP5 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP4 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH4 0xFFFFFFFF DUP7 DUP2 AND SWAP3 SWAP1 DUP9 AND SWAP2 PUSH32 0x4F9C27C2FE3F84576EA469D367D044DA53C45E951617E8389F2B5ED8DB9D25F0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE POP PUSH1 0x1 PUSH1 0x7 SSTORE PUSH3 0xCF84F DUP6 GT PUSH3 0x1F2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2170726F6365737320676173 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x92 JUMP JUMPDEST PUSH2 0x3A97 DUP5 GT PUSH3 0x234 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x217265736572766520676173 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x92 JUMP JUMPDEST PUSH2 0x120 DUP6 SWAP1 MSTORE PUSH2 0x140 DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0x287 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x217A65726F206D65726B6C65 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x92 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x100 MSTORE PUSH1 0x8 SSTORE POP PUSH3 0x464 SWAP16 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH3 0x393 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x393 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x140 DUP12 DUP14 SUB SLT ISZERO PUSH3 0x3D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x3DC DUP12 PUSH3 0x37E JUMP JUMPDEST SWAP10 POP PUSH3 0x3EC PUSH1 0x20 DUP13 ADD PUSH3 0x37E JUMP JUMPDEST SWAP9 POP PUSH3 0x3FC PUSH1 0x40 DUP13 ADD PUSH3 0x398 JUMP JUMPDEST SWAP8 POP PUSH3 0x40C PUSH1 0x60 DUP13 ADD PUSH3 0x398 JUMP JUMPDEST SWAP7 POP PUSH3 0x41C PUSH1 0x80 DUP13 ADD PUSH3 0x398 JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD MLOAD SWAP5 POP PUSH1 0xC0 DUP12 ADD MLOAD SWAP4 POP PUSH1 0xE0 DUP12 ADD MLOAD SWAP3 POP PUSH3 0x442 PUSH2 0x100 DUP13 ADD PUSH3 0x398 JUMP JUMPDEST SWAP2 POP PUSH3 0x453 PUSH2 0x120 DUP13 ADD PUSH3 0x398 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP2 SWAP5 SWAP8 SWAP11 POP SWAP3 SWAP6 SWAP9 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x3369 PUSH3 0x505 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x31A ADD MSTORE PUSH2 0x1C9E ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x8E3 ADD MSTORE DUP2 DUP2 PUSH2 0x1CBF ADD MSTORE PUSH2 0x1D4C ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x70A ADD MSTORE DUP2 DUP2 PUSH2 0xA60 ADD MSTORE DUP2 DUP2 PUSH2 0xFA0 ADD MSTORE PUSH2 0x1674 ADD MSTORE PUSH1 0x0 PUSH2 0x2AA ADD MSTORE PUSH1 0x0 PUSH2 0x538 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x899 ADD MSTORE PUSH2 0xC08 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x47F ADD MSTORE DUP2 DUP2 PUSH2 0x646 ADD MSTORE DUP2 DUP2 PUSH2 0x1616 ADD MSTORE PUSH2 0x1B9E ADD MSTORE PUSH2 0x3369 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x28C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x15A JUMPI DUP1 PUSH4 0xB95A2001 GT PUSH2 0xC1 JUMPI DUP1 PUSH4 0xD69F9D61 GT PUSH2 0x7A JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x887 JUMPI DUP1 PUSH4 0xD7D317B3 EQ PUSH2 0x8BB JUMPI DUP1 PUSH4 0xD88BEDA2 EQ PUSH2 0x8D1 JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x905 JUMPI DUP1 PUSH4 0xE0FED010 EQ PUSH2 0x925 JUMPI DUP1 PUSH4 0xFA31DE01 EQ PUSH2 0x945 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB95A2001 EQ PUSH2 0x7C2 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x7F5 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x80A JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x82A JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x848 JUMPI DUP1 PUSH4 0xD2A3CC71 EQ PUSH2 0x867 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA01892A5 GT PUSH2 0x113 JUMPI DUP1 PUSH4 0xA01892A5 EQ PUSH2 0x6F8 JUMPI DUP1 PUSH4 0xA792C29B EQ PUSH2 0x72C JUMPI DUP1 PUSH4 0xAD9C0C2E EQ PUSH2 0x74C JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x762 JUMPI DUP1 PUSH4 0xB2F87643 EQ PUSH2 0x782 JUMPI DUP1 PUSH4 0xB697F531 EQ PUSH2 0x7A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x622 JUMPI DUP1 PUSH4 0x8D3638F4 EQ PUSH2 0x637 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x66A JUMPI DUP1 PUSH4 0x98C9F2B9 EQ PUSH2 0x688 JUMPI DUP1 PUSH4 0x9D3117C7 EQ PUSH2 0x6B8 JUMPI DUP1 PUSH4 0x9FA92F9D EQ PUSH2 0x6E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B GT PUSH2 0x1FE JUMPI DUP1 PUSH4 0x6159ADA1 GT PUSH2 0x1B7 JUMPI DUP1 PUSH4 0x6159ADA1 EQ PUSH2 0x572 JUMPI DUP1 PUSH4 0x65EAF11B EQ PUSH2 0x5A2 JUMPI DUP1 PUSH4 0x68742DA6 EQ PUSH2 0x5B7 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x5D7 JUMPI DUP1 PUSH4 0x6B04A933 EQ PUSH2 0x5ED JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B EQ PUSH2 0x46D JUMPI DUP1 PUSH4 0x572386CA EQ PUSH2 0x4A1 JUMPI DUP1 PUSH4 0x579C1618 EQ PUSH2 0x4D1 JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x4E7 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x507 JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x526 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x301F07C3 GT PUSH2 0x250 JUMPI DUP1 PUSH4 0x301F07C3 EQ PUSH2 0x39A JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x3EF JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x404 JUMPI DUP1 PUSH4 0x508A109B EQ PUSH2 0x424 JUMPI DUP1 PUSH4 0x5190BC53 EQ PUSH2 0x444 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0x1EEAABEA EQ PUSH2 0x2E6 JUMPI DUP1 PUSH4 0x25E3BEDA EQ PUSH2 0x308 JUMPI DUP1 PUSH4 0x2BB1AE7C EQ PUSH2 0x34A JUMPI DUP1 PUSH4 0x2BBD59CA EQ PUSH2 0x35D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x293 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2CC PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x301 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D21 JUMP JUMPDEST PUSH2 0x973 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33C PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2DD JUMP JUMPDEST PUSH2 0x306 PUSH2 0x358 CALLDATASIZE PUSH1 0x4 PUSH2 0x2DDD JUMP JUMPDEST PUSH2 0xA1D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x369 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x38D PUSH2 0x378 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D21 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2DD SWAP2 SWAP1 PUSH2 0x2E28 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CA PUSH2 0x3B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D21 JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2DD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x33C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0xBC0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x410 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x41F CALLDATASIZE PUSH1 0x4 PUSH2 0x2DDD JUMP JUMPDEST PUSH2 0xBFD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x430 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x43F CALLDATASIZE PUSH1 0x4 PUSH2 0x2E50 JUMP JUMPDEST PUSH2 0xCA3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x450 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CA PUSH2 0x45F CALLDATASIZE PUSH1 0x4 PUSH2 0x2EEC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x479 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2CC PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CA PUSH2 0x4BC CALLDATASIZE PUSH1 0x4 PUSH2 0x2D21 JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33C PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x502 CALLDATASIZE PUSH1 0x4 PUSH2 0x2EEC JUMP JUMPDEST PUSH2 0xF65 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x513 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3CA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x532 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x55A PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2DD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x57E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CA PUSH2 0x58D CALLDATASIZE PUSH1 0x4 PUSH2 0x2EEC JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33C PUSH2 0xF9C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x5D2 CALLDATASIZE PUSH1 0x4 PUSH2 0x2EEC JUMP JUMPDEST PUSH2 0x1025 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x33C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x608 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D21 JUMP JUMPDEST PUSH2 0x10A2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x619 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x116D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x62E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x1198 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x643 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x0 PUSH2 0x2CC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x55A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x694 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CA PUSH2 0x6A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D21 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33C PUSH2 0x6D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D21 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH2 0x55A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x704 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x55A PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x738 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x55A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x758 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33C PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x76E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x77D CALLDATASIZE PUSH1 0x4 PUSH2 0x2EEC JUMP JUMPDEST PUSH2 0x124C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x78E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x79D CALLDATASIZE PUSH1 0x4 PUSH2 0x2EEC JUMP JUMPDEST PUSH2 0x12EA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x7BD CALLDATASIZE PUSH1 0x4 PUSH2 0x2EEC JUMP JUMPDEST PUSH2 0x1366 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2CC PUSH2 0x7DD CALLDATASIZE PUSH1 0x4 PUSH2 0x2F2E JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x801 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x13E5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x816 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x55A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x836 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x55A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x854 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x3CA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x873 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x882 CALLDATASIZE PUSH1 0x4 PUSH2 0x2EEC JUMP JUMPDEST PUSH2 0x1455 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x893 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x55A PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33C PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33C PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x911 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CA PUSH2 0x920 CALLDATASIZE PUSH1 0x4 PUSH2 0x2EEC JUMP JUMPDEST PUSH2 0x152C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x931 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x940 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D21 JUMP JUMPDEST PUSH2 0x1541 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x951 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x965 PUSH2 0x960 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F49 JUMP JUMPDEST PUSH2 0x1575 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2DD SWAP3 SWAP2 SWAP1 PUSH2 0x2FF0 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x99E JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD DUP2 SUB PUSH2 0x9E3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2164656C6179426C6F636B73 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLER DUP2 MSTORE DUP2 SWAP1 PUSH32 0x8BD16320F3B60336ED5FD2A770EB7453E7E71CFEF4462ADDFFD7AE9DFE201C8E SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x8 SSTORE JUMP JUMPDEST PUSH2 0xA25 PUSH2 0x1744 JUMP JUMPDEST NUMBER PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD PUSH2 0xA36 SWAP2 SWAP1 PUSH2 0x301F JUMP JUMPDEST GT ISZERO PUSH2 0xA55 JUMPI PUSH1 0x40 MLOAD PUSH4 0x46CF2AF1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST NUMBER PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xABC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAE0 SWAP2 SWAP1 PUSH2 0x3032 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xB36 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1C9BDBDD08185B1C9958591E481CD95B9D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xB4B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH2 0xB66 DUP2 DUP5 PUSH2 0x1791 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 SWAP1 PUSH2 0xBB3 SWAP1 DUP4 SWAP1 DUP7 SWAP1 CALLER SWAP1 PUSH2 0x304B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xBEB JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xBF3 PUSH2 0x184F JUMP JUMPDEST PUSH2 0xBFB PUSH2 0x189F JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xC5E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9DA SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x18F4 JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0xC98 SWAP3 SWAP2 SWAP1 PUSH2 0x3089 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xCAB PUSH2 0x1744 JUMP JUMPDEST PUSH2 0xCB3 PUSH2 0x198D JUMP JUMPDEST DUP4 PUSH2 0xCEA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x2170726F6F6673 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xCFF JUMPI PUSH2 0xCFF PUSH2 0x30B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD11 SWAP2 SWAP1 PUSH2 0x30C9 JUMP JUMPDEST PUSH2 0xD1B SWAP1 DUP1 PUSH2 0x30EA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD29 SWAP3 SWAP2 SWAP1 PUSH2 0x3138 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xD90 DUP3 DUP9 DUP9 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD4C JUMPI PUSH2 0xD4C PUSH2 0x30B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD5E SWAP2 SWAP1 PUSH2 0x30C9 JUMP JUMPDEST PUSH1 0x20 ADD DUP10 DUP10 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD74 JUMPI PUSH2 0xD74 PUSH2 0x30B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD86 SWAP2 SWAP1 PUSH2 0x30C9 JUMP JUMPDEST PUSH2 0x420 ADD CALLDATALOAD PUSH2 0x19E6 JUMP JUMPDEST SWAP1 POP PUSH2 0xD9E DUP2 DUP7 DUP7 DUP7 PUSH2 0x1A8D JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP7 SWAP1 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xEC4 JUMPI DUP9 DUP9 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xDE3 JUMPI PUSH2 0xDE3 PUSH2 0x30B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xDF5 SWAP2 SWAP1 PUSH2 0x30C9 JUMP JUMPDEST PUSH2 0xDFF SWAP1 DUP1 PUSH2 0x30EA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE0D SWAP3 SWAP2 SWAP1 PUSH2 0x3138 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP4 POP PUSH1 0x0 PUSH2 0xE62 DUP6 DUP12 DUP12 DUP6 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xE35 JUMPI PUSH2 0xE35 PUSH2 0x30B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE47 SWAP2 SWAP1 PUSH2 0x30C9 JUMP JUMPDEST PUSH1 0x20 ADD DUP13 DUP13 DUP7 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xD74 JUMPI PUSH2 0xD74 PUSH2 0x30B3 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0xEA1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x85CDA185C9959149BDBDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE ADD PUSH2 0xDBD JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xF50 JUMPI PUSH2 0xF47 DUP10 DUP10 DUP4 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xEF1 JUMPI PUSH2 0xEF1 PUSH2 0x30B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xF03 SWAP2 SWAP1 PUSH2 0x30C9 JUMP JUMPDEST PUSH2 0xF0D SWAP1 DUP1 PUSH2 0x30EA JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B88 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xEC8 JUMP JUMPDEST POP POP POP POP PUSH2 0xF5E PUSH1 0x1 PUSH1 0x7 SSTORE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xF90 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF99 DUP2 PUSH2 0x1E65 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFFC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1020 SWAP2 SWAP1 PUSH2 0x3032 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1050 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SELFBALANCE PUSH2 0x105B DUP3 DUP3 PUSH2 0x1ECE JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEAFF4B37086828766AD3268786972C0CD24259D4C87A80F9D3963A3C3D999B0D DUP3 PUSH1 0x40 MLOAD PUSH2 0x1096 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10CD JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x10D5 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SUB PUSH2 0x112A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x616767726567617465526F6F742021657869737473 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xF51534ECF10A58DB36CE4F5180F59DEDDF3B3EB7C5E7454E602C2F80A40CC739 SWAP1 PUSH2 0xC98 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xBFB JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11E1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1205 SWAP2 SWAP1 PUSH2 0x3148 JUMP JUMPDEST PUSH2 0x123C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH2 0x1244 PUSH2 0x1744 JUMP JUMPDEST PUSH2 0xBFB PUSH2 0x1FE7 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1277 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x1295 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x12B3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x12E1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF99 DUP2 PUSH2 0x202A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1315 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x384859C5EF5FAFAC31E8BC92CE7FB48B1F2C74C4DD5E212EB84EC202FA5D9FAD SWAP2 ADD PUSH2 0xC98 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1391 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xD65ECA5D561D3A4568C87B9B13CED4AB52A69EDADFDFDB22D76BC595F36D7D87 SWAP2 ADD PUSH2 0xC98 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1410 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x1422 SWAP2 SWAP1 PUSH2 0x316A JUMP JUMPDEST GT PUSH2 0x1440 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0xBFB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2078 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1480 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0x14DE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616C72656164792077617463686572206D616E61676572000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC16D059E43D7F8E29CCB4E001A2F249D3C59E274925D6A6BC3912943441D9F6C SWAP1 PUSH1 0x20 ADD PUSH2 0xC98 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND CALLER EQ JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x156C JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF99 DUP2 PUSH2 0x20DD JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x60 SWAP1 PUSH1 0xFF AND PUSH2 0x15C6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x8585B1B1BDDDB1A5CDD1959 PUSH1 0xA2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP3 PUSH2 0x15EF DUP4 PUSH2 0x317D JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH4 0xFFFFFFFF AND MUL OR SWAP1 SSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0x164E PUSH32 0x0 PUSH2 0x1645 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP5 DUP11 DUP11 DUP11 PUSH2 0x215B JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH4 0x2D287E43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2D287E43 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16C4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16E8 SWAP2 SWAP1 PUSH2 0x31A0 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH32 0x40F08EE347FC927AE45902EDC87DEBB024AAB1A311943731968607F603F2152F DUP4 PUSH2 0x171A PUSH1 0x1 DUP5 PUSH2 0x316A JUMP JUMPDEST DUP5 DUP8 PUSH1 0x40 MLOAD PUSH2 0x172C SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x31C4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP SWAP1 SWAP9 SWAP2 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xBFB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x17CF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH2 0x17DC PUSH2 0x8000 PUSH1 0x8 PUSH2 0x31F3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x62F84B24 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1807 SWAP2 SWAP1 PUSH2 0x321A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1826 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x184A SWAP2 SWAP1 PUSH2 0x3032 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xBFB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH2 0x18A7 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1941 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x10B6B4B93937B921B7B73732B1BA37B9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0x197C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH2 0xF99 PUSH2 0x1988 DUP3 PUSH2 0x322D JUMP JUMPDEST PUSH2 0x2193 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SLOAD SUB PUSH2 0x19DF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1A0C JUMPI PUSH2 0x1A0C PUSH2 0x2E12 JUMP JUMPDEST EQ PUSH2 0x1A4F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x214D6573736167655374617475732E4E6F6E65 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH2 0x1A83 DUP5 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x22BC SWAP1 POP JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1B82 JUMPI PUSH2 0x1AAC DUP4 PUSH2 0x260A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AE2 DUP6 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x22BC SWAP1 POP JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0x1B29 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1A5B9D985B1A59081A5B989BDD5B99149BDBDD PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP5 SWAP1 DUP7 SWAP1 PUSH32 0x7EC1EA51FE3DB53E55ED9D922854BC2156F467FF2F87D74E2086DAE2C84A88A8 SWAP1 PUSH2 0x1B78 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B95 DUP4 DUP3 PUSH2 0x276A JUMP JUMPDEST SWAP1 POP PUSH4 0xFFFFFFFF PUSH32 0x0 AND PUSH2 0x1BCD PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x278E JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x1C0F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B232B9BA34B730BA34B7B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C20 PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x27A3 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1C47 JUMPI PUSH2 0x1C47 PUSH2 0x2E12 JUMP JUMPDEST EQ PUSH2 0x1C7E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x10B83937BB32B7 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x2 OR SWAP1 SSTORE PUSH1 0x1 PUSH2 0x1CE3 PUSH32 0x0 PUSH32 0x0 PUSH2 0x301F JUMP JUMPDEST PUSH2 0x1CED SWAP2 SWAP1 PUSH2 0x316A JUMP JUMPDEST GAS GT PUSH2 0x1D24 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9DA SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x21676173 PUSH1 0xE0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D35 PUSH3 0xFFFFFF NOT DUP5 AND PUSH2 0x27EC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH32 0x0 SWAP2 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x1D90 PUSH3 0xFFFFFF NOT DUP9 AND PUSH2 0x27FD JUMP JUMPDEST PUSH2 0x1D9F PUSH3 0xFFFFFF NOT DUP10 AND PUSH2 0x2811 JUMP JUMPDEST PUSH2 0x1DAE PUSH3 0xFFFFFF NOT DUP11 AND PUSH2 0x2826 JUMP JUMPDEST PUSH2 0x1DCB PUSH2 0x1DC0 PUSH3 0xFFFFFF NOT DUP13 AND PUSH2 0x283B JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND PUSH2 0x2869 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1DDE SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3254 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xAB2DC3F5 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 POP PUSH2 0x1E18 DUP6 DUP6 PUSH1 0x0 DUP7 DUP6 PUSH2 0x28B2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP10 POP SWAP3 POP PUSH32 0xD42DE95A9B26F1BE134C8ECCE389DC4FCFA18753D01661B7B361233569E8FE48 SWAP1 PUSH2 0x1E51 SWAP1 DUP9 SWAP1 DUP12 SWAP1 DUP7 SWAP1 PUSH2 0x3283 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x1F1E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1F6B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1F70 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x184A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH2 0x1FEF PUSH2 0x1744 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x18D7 CALLER SWAP1 JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 SUB PUSH2 0x2120 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x85B995DC81C985D19481B1A5B5A5D PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0x8E7FA5E406CB856AAB05575E45EA011C6748376CC1B5229E3D67B92986406A15 SWAP2 ADD PUSH2 0xC98 JUMP JUMPDEST PUSH1 0x60 DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2178 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x32A4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x21D1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x6E657720726F6F7420656D707479 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x2224 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x726F6F7420616C72656164792070656E64696E67 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2279 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x3937B7BA1030B63932B0B23C90383937BB32B7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 NUMBER SWAP1 SSTORE MLOAD PUSH32 0x84EF18531155AFDB0E64FF905D67044AE3AAC63A6FBA4661CFD9C4C14F289BC8 SWAP1 PUSH2 0xC98 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x5 DUP3 DUP2 SHL DUP3 AND SWAP5 DUP6 MSTORE DUP4 MLOAD SWAP5 DUP3 SUB SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x40 PUSH1 0x0 DUP2 DUP2 KECCAK256 PUSH1 0x2 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x4 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP3 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x8 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x10 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 DUP5 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 DUP4 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 SWAP1 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xE0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x100 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x200 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x120 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x400 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x140 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x800 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x160 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x1000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x2000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x4000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1C0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x8000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1E0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH3 0x10000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x20000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x220 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x40000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x240 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x80000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x260 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x100000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x280 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x200000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x400000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x800000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2E0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x1000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x300 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x2000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x320 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x4000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x340 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x8000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x360 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x10000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x380 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x20000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x40000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x80000000 SWAP1 SWAP5 AND ISZERO SWAP1 SWAP6 SHL SWAP2 DUP3 SWAP1 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x3E0 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x264D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x616767726567617465526F6F7420656D707479 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2667 JUMPI POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x26BD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x1859D9DC9959D85D19549BDBDD0808595E1A5CDD PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x26CA DUP3 NUMBER PUSH2 0x316A JUMP JUMPDEST LT ISZERO PUSH2 0x2718 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616767726567617465526F6F7420217665726966696564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP4 SWAP2 PUSH32 0x36B314ABA9F663B4D3EF3288AE489341CC5E6A2725A05FA2B72DF7A27E03F42A SWAP2 LOG2 POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0x2785 PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x293D JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x153B PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x28 PUSH1 0x4 PUSH2 0x297A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x27B9 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x27D9 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 SWAP2 KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x153B PUSH2 0x27FA DUP4 PUSH2 0x29AA JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x153B PUSH3 0xFFFFFF NOT DUP4 AND DUP3 PUSH1 0x4 PUSH2 0x297A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x153B PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x24 PUSH1 0x4 PUSH2 0x297A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x153B PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x4 PUSH1 0x20 PUSH2 0x29BB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x153B PUSH1 0x4C PUSH2 0x2859 DUP2 PUSH1 0x18 DUP7 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x316A JUMP JUMPDEST PUSH3 0xFFFFFF NOT DUP6 AND SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2AC6 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x2881 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x40 MLOAD SWAP2 POP DUP2 SWAP3 POP PUSH2 0x28A1 DUP5 DUP4 PUSH1 0x20 ADD PUSH2 0x2B42 JUMP JUMPDEST POP DUP2 DUP2 ADD PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH2 0xFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x28D8 JUMPI PUSH2 0x28D8 PUSH2 0x2D3A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2902 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP8 MLOAD PUSH1 0x20 DUP10 ADD DUP12 DUP15 DUP15 CALL SWAP2 POP RETURNDATASIZE SWAP3 POP DUP7 DUP4 GT ISZERO PUSH2 0x2923 JUMPI DUP7 SWAP3 POP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x294A DUP4 DUP6 PUSH2 0x301F JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x295A JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x296F JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x1A86 JUMP JUMPDEST PUSH2 0x2785 DUP6 DUP6 DUP6 PUSH2 0x2C35 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2987 DUP3 PUSH1 0x20 PUSH2 0x32FE JUMP JUMPDEST PUSH2 0x2992 SWAP1 PUSH1 0x8 PUSH2 0x3317 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x29A0 DUP6 DUP6 DUP6 PUSH2 0x29BB JUMP JUMPDEST SWAP1 SHR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x153B PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x2C PUSH1 0x20 JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0x29D0 JUMPI POP PUSH1 0x0 PUSH2 0x1A86 JUMP JUMPDEST PUSH2 0x29E3 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x29F9 PUSH1 0xFF DUP5 AND DUP6 PUSH2 0x301F JUMP JUMPDEST GT ISZERO PUSH2 0x2A61 JUMPI PUSH2 0x2A12 DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2A25 DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x2A86 JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0x2A9F DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT DUP5 ADD SAR SWAP2 SWAP1 SWAP6 ADD MLOAD AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2ADC DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH2 0x2AF0 DUP7 PUSH2 0x2CAC JUMP JUMPDEST DUP5 PUSH2 0x2AFB DUP8 DUP5 PUSH2 0x301F JUMP JUMPDEST PUSH2 0x2B05 SWAP2 SWAP1 PUSH2 0x301F JUMP JUMPDEST GT ISZERO PUSH2 0x2B18 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x2B3A JUMP JUMPDEST PUSH2 0x2B22 DUP6 DUP3 PUSH2 0x301F JUMP JUMPDEST SWAP1 POP PUSH2 0x2B36 DUP4 PUSH5 0xFFFFFFFFFF AND DUP3 DUP7 PUSH2 0x293D JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFFFFFF NOT DUP1 DUP5 AND SUB PUSH2 0x2B6A JUMPI PUSH1 0x40 MLOAD PUSH4 0x148D5133 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2B73 DUP4 PUSH2 0x2CE5 JUMP JUMPDEST ISZERO PUSH2 0x2B91 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EE09491 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2BA6 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2BC6 DUP6 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD SWAP2 POP DUP6 DUP3 GT ISZERO PUSH2 0x2BE7 JUMPI PUSH1 0x20 PUSH1 0x60 REVERT JUMPDEST DUP4 DUP7 DUP6 DUP6 PUSH1 0x4 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x2C0F JUMPI PUSH1 0x40 MLOAD PUSH4 0x2AF1BD9B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2C2A PUSH2 0x2C1C DUP9 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND DUP8 DUP7 PUSH2 0x2C35 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0x2C5D JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0x2C96 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CC1 DUP3 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2CD4 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CF1 DUP3 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH5 0xFFFFFFFFFF SUB PUSH2 0x2D0B JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D16 DUP4 PUSH2 0x2CAC JUMP JUMPDEST PUSH1 0x40 MLOAD LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2D61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2D7C JUMPI PUSH2 0x2D7C PUSH2 0x2D3A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x2DA4 JUMPI PUSH2 0x2DA4 PUSH2 0x2D3A JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x2DBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2DEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2E06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2B3A DUP5 DUP3 DUP6 ADD PUSH2 0x2D50 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH2 0x2E4A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x460 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2E69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2E81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2E95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x2EA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x2EB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 DUP4 ADD SWAP8 POP SWAP6 POP POP DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x440 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x2EDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x40 ADD SWAP4 CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2EFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1A86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2F29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2F40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1A86 DUP3 PUSH2 0x2F15 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2F5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F67 DUP5 PUSH2 0x2F15 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2F8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F96 DUP7 DUP3 DUP8 ADD PUSH2 0x2D50 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2FBB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2FA3 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2FDC DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x2FA0 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1A83 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2FC4 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x153B JUMPI PUSH2 0x153B PUSH2 0x3009 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3044 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x305E PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x2FC4 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x3070 DUP2 DUP7 PUSH2 0x2FC4 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x309C PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x2FC4 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x43E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x30E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x311C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x3131 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x315A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1A86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x153B JUMPI PUSH2 0x153B PUSH2 0x3009 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x3196 JUMPI PUSH2 0x3196 PUSH2 0x3009 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x31B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x31E9 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x2FC4 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x3213 JUMPI PUSH2 0x3213 PUSH2 0x3009 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1A86 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2FC4 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x324E JUMPI PUSH1 0x0 NOT DUP2 PUSH1 0x20 SUB PUSH1 0x3 SHL SHL DUP3 AND SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x31E9 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x2FC4 JUMP JUMPDEST DUP4 DUP2 MSTORE DUP3 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2785 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x2FC4 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP1 DUP10 PUSH1 0xE0 SHL AND DUP4 MSTORE DUP8 PUSH1 0x4 DUP5 ADD MSTORE DUP1 DUP8 PUSH1 0xE0 SHL AND PUSH1 0x24 DUP5 ADD MSTORE DUP1 DUP7 PUSH1 0xE0 SHL AND PUSH1 0x28 DUP5 ADD MSTORE POP DUP4 PUSH1 0x2C DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x32EC DUP2 PUSH1 0x4C DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x2FA0 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x4C ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x153B JUMPI PUSH2 0x153B PUSH2 0x3009 JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND MUL SWAP1 DUP2 AND SWAP1 DUP2 DUP2 EQ PUSH2 0x3213 JUMPI PUSH2 0x3213 PUSH2 0x3009 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLER 0x24 0xC0 LOG3 ISZERO PUSH17 0xB770DCAED9A52EA128DCF86EE78B761542 PUSH11 0x61248186DF3F62C064736F PUSH13 0x63430008110033000000000000 ","sourceMap":"306:2084:148:-:0;;;401:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;689:7;704:13;725:4;737:12;757:16;781:11;800;819:12;839:7;854:15;;689:7;704:13;725:4;737:12;757:16;3038:21:116::1;3048:10;3038:9;:21::i;:::-;3105:7;:12;;3116:1;3105:12:::0;3097:37:::1;;;::::0;-1:-1:-1;;;3097:37:116;;1479:2:181;3097:37:116::1;::::0;::::1;1461:21:181::0;1518:2;1498:18;;;1491:30;-1:-1:-1;;;1537:18:181;;;1530:42;1589:18;;3097:37:116::1;;;;;;;;;-1:-1:-1::0;;;;;3148:26:116;::::1;3140:56;;;::::0;-1:-1:-1;;;3140:56:116;;1820:2:181;3140:56:116::1;::::0;::::1;1802:21:181::0;1859:2;1839:18;;;1832:30;-1:-1:-1;;;1878:18:181;;;1871:47;1935:18;;3140:56:116::1;1618:341:181::0;3140:56:116::1;3308:16;::::0;;::::1;;::::0;-1:-1:-1;;;;;3330:10:116;;::::1;;::::0;3346:27;;::::1;;::::0;3379:29;;::::1;;::::0;3449:30;::::1;::::0;3445:88:::1;;3489:37;3509:16:::0;3489:19:::1;:37::i;:::-;3544:74;::::0;;-1:-1:-1;;;;;2222:15:181;;;2204:34;;2274:15;;;2269:2;2254:18;;2247:43;2326:15;;2306:18;;;2299:43;3544:74:116;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;2154:2:181;3544:74:116;;::::1;-1:-1:-1::0;;996:7:51;:15;;-1:-1:-1;;;;996:15:51;;;-1:-1:-1;;1056:14:114::1;:48:::0;;-1:-1:-1;;;;;;1056:48:114::1;-1:-1:-1::0;;;;;1056:48:114;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;1821:7:52;:22;7305:11:120::3;7291:25:::0;::::3;7283:50;;;::::0;-1:-1:-1;;;7283:50:120;;2555:2:181;7283:50:120::3;::::0;::::3;2537:21:181::0;2594:2;2574:18;;;2567:30;-1:-1:-1;;;2613:18:181;;;2606:42;2665:18;;7283:50:120::3;2353:336:181::0;7283:50:120::3;7361:10;7347:11;:24;7339:49;;;::::0;-1:-1:-1;;;7339:49:120;;2896:2:181;7339:49:120::3;::::0;::::3;2878:21:181::0;2935:2;2915:18;;;2908:30;-1:-1:-1;;;2954:18:181;;;2947:42;3006:18;;7339:49:120::3;2694:336:181::0;7339:49:120::3;7394:25;::::0;;;7425::::3;::::0;;;-1:-1:-1;;;;;7465:21:120;::::3;7457:46;;;::::0;-1:-1:-1;;;7457:46:120;;3237:2:181;7457:46:120::3;::::0;::::3;3219:21:181::0;3276:2;3256:18;;;3249:30;-1:-1:-1;;;3295:18:181;;;3288:42;3347:18;;7457:46:120::3;3035:336:181::0;7457:46:120::3;-1:-1:-1::0;;;;;;7509:35:120::3;;::::0;7551:11:::3;:26:::0;-1:-1:-1;306:2084:148;;-1:-1:-1;;;;;;;;;;;;;;;;306:2084:148;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;5838::116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;3588:34:181;;3658:15;;;3653:2;3638:18;;3631:43;5921:57:116;;3523:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;14:167:181:-;92:13;;145:10;134:22;;124:33;;114:61;;171:1;168;161:12;114:61;14:167;;;:::o;186:177::-;265:13;;-1:-1:-1;;;;;307:31:181;;297:42;;287:70;;353:1;350;343:12;368:904;517:6;525;533;541;549;557;565;573;581;589;642:3;630:9;621:7;617:23;613:33;610:53;;;659:1;656;649:12;610:53;682:39;711:9;682:39;:::i;:::-;672:49;;740:48;784:2;773:9;769:18;740:48;:::i;:::-;730:58;;807:49;852:2;841:9;837:18;807:49;:::i;:::-;797:59;;875:49;920:2;909:9;905:18;875:49;:::i;:::-;865:59;;943:50;988:3;977:9;973:19;943:50;:::i;:::-;933:60;;1033:3;1022:9;1018:19;1012:26;1002:36;;1078:3;1067:9;1063:19;1057:26;1047:36;;1123:3;1112:9;1108:19;1102:26;1092:36;;1147:50;1192:3;1181:9;1177:19;1147:50;:::i;:::-;1137:60;;1216:50;1261:3;1250:9;1246:19;1216:50;:::i;:::-;1206:60;;368:904;;;;;;;;;;;;;:::o;3376:304::-;306:2084:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@AMB_39042":{"entryPoint":null,"id":39042,"parameterSlots":0,"returnSlots":0},"@DOMAIN_39039":{"entryPoint":null,"id":39039,"parameterSlots":0,"returnSlots":0},"@MERKLE_39550":{"entryPoint":null,"id":39550,"parameterSlots":0,"returnSlots":0},"@MIRROR_DOMAIN_39048":{"entryPoint":null,"id":39048,"parameterSlots":0,"returnSlots":0},"@PROCESS_GAS_39553":{"entryPoint":null,"id":39553,"parameterSlots":0,"returnSlots":0},"@RESERVE_GAS_39556":{"entryPoint":null,"id":39556,"parameterSlots":0,"returnSlots":0},"@ROOT_MANAGER_39045":{"entryPoint":null,"id":39045,"parameterSlots":0,"returnSlots":0},"@_39157":{"entryPoint":null,"id":39157,"parameterSlots":0,"returnSlots":0},"@_msgSender_11496":{"entryPoint":null,"id":11496,"parameterSlots":0,"returnSlots":1},"@_nonReentrantAfter_10733":{"entryPoint":null,"id":10733,"parameterSlots":0,"returnSlots":0},"@_nonReentrantBefore_10725":{"entryPoint":6541,"id":10725,"parameterSlots":0,"returnSlots":0},"@_pause_10663":{"entryPoint":8167,"id":10663,"parameterSlots":0,"returnSlots":0},"@_processMessage_47741":{"entryPoint":6388,"id":47741,"parameterSlots":1,"returnSlots":0},"@_requireNotPaused_10636":{"entryPoint":5956,"id":10636,"parameterSlots":0,"returnSlots":0},"@_requirePaused_10647":{"entryPoint":6223,"id":10647,"parameterSlots":0,"returnSlots":0},"@_sendMessage_47711":{"entryPoint":6033,"id":47711,"parameterSlots":2,"returnSlots":0},"@_setMirrorConnector_39243":{"entryPoint":7781,"id":39243,"parameterSlots":1,"returnSlots":0},"@_setOwner_49908":{"entryPoint":8312,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":8234,"id":49927,"parameterSlots":1,"returnSlots":0},"@_setRateLimitBlocks_49687":{"entryPoint":8413,"id":49687,"parameterSlots":1,"returnSlots":0},"@_unpause_10679":{"entryPoint":6303,"id":10679,"parameterSlots":0,"returnSlots":0},"@_verifySender_47687":{"entryPoint":null,"id":47687,"parameterSlots":1,"returnSlots":1},"@acceptProposedOwner_49887":{"entryPoint":5093,"id":49887,"parameterSlots":0,"returnSlots":0},"@addSender_39706":{"entryPoint":4966,"id":39706,"parameterSlots":1,"returnSlots":0},"@addressToBytes32_50168":{"entryPoint":null,"id":50168,"parameterSlots":1,"returnSlots":1},"@allowlistedSenders_39581":{"entryPoint":null,"id":39581,"parameterSlots":0,"returnSlots":0},"@body_49194":{"entryPoint":10299,"id":49194,"parameterSlots":1,"returnSlots":1},"@branchRoot_48998":{"entryPoint":8892,"id":48998,"parameterSlots":3,"returnSlots":1},"@build_50565":{"entryPoint":10557,"id":50565,"parameterSlots":3,"returnSlots":1},"@bytes32ToAddress_50187":{"entryPoint":null,"id":50187,"parameterSlots":1,"returnSlots":1},"@calculateMessageRoot_40253":{"entryPoint":6630,"id":40253,"parameterSlots":3,"returnSlots":1},"@clone_51141":{"entryPoint":10345,"id":51141,"parameterSlots":1,"returnSlots":1},"@delayBlocks_39546":{"entryPoint":null,"id":39546,"parameterSlots":0,"returnSlots":0},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@destination_49143":{"entryPoint":10126,"id":49143,"parameterSlots":1,"returnSlots":1},"@dispatch_39974":{"entryPoint":5493,"id":39974,"parameterSlots":3,"returnSlots":2},"@end_50683":{"entryPoint":11436,"id":50683,"parameterSlots":1,"returnSlots":1},"@excessivelySafeCall_50045":{"entryPoint":10418,"id":50045,"parameterSlots":5,"returnSlots":2},"@formatMessage_49044":{"entryPoint":8539,"id":49044,"parameterSlots":6,"returnSlots":1},"@home_39271":{"entryPoint":null,"id":39271,"parameterSlots":0,"returnSlots":1},"@indexUint_50882":{"entryPoint":10618,"id":50882,"parameterSlots":3,"returnSlots":1},"@index_50852":{"entryPoint":10683,"id":50852,"parameterSlots":3,"returnSlots":1},"@isNotValid_50403":{"entryPoint":11493,"id":50403,"parameterSlots":1,"returnSlots":1},"@isNull_50364":{"entryPoint":null,"id":50364,"parameterSlots":1,"returnSlots":1},"@isReplica_39286":{"entryPoint":null,"id":39286,"parameterSlots":1,"returnSlots":1},"@keccak_50951":{"entryPoint":10147,"id":50951,"parameterSlots":1,"returnSlots":1},"@lastSentBlock_49642":{"entryPoint":null,"id":49642,"parameterSlots":0,"returnSlots":0},"@leftMask_50342":{"entryPoint":null,"id":50342,"parameterSlots":1,"returnSlots":1},"@len_50665":{"entryPoint":null,"id":50665,"parameterSlots":1,"returnSlots":1},"@loc_50615":{"entryPoint":null,"id":50615,"parameterSlots":1,"returnSlots":1},"@localDomain_39855":{"entryPoint":null,"id":39855,"parameterSlots":0,"returnSlots":1},"@messages_39592":{"entryPoint":null,"id":39592,"parameterSlots":0,"returnSlots":0},"@mirrorConnector_39051":{"entryPoint":null,"id":39051,"parameterSlots":0,"returnSlots":0},"@nonce_49125":{"entryPoint":10257,"id":49125,"parameterSlots":1,"returnSlots":1},"@nonces_39586":{"entryPoint":null,"id":39586,"parameterSlots":0,"returnSlots":0},"@origin_49092":{"entryPoint":10237,"id":49092,"parameterSlots":1,"returnSlots":1},"@outboundRoot_39845":{"entryPoint":3996,"id":39845,"parameterSlots":0,"returnSlots":1},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@pause_38913":{"entryPoint":4504,"id":38913,"parameterSlots":0,"returnSlots":0},"@paused_10624":{"entryPoint":null,"id":10624,"parameterSlots":0,"returnSlots":1},"@pendingAggregateRoots_39561":{"entryPoint":null,"id":39561,"parameterSlots":0,"returnSlots":0},"@processMessage_39189":{"entryPoint":3069,"id":39189,"parameterSlots":1,"returnSlots":0},"@process_40427":{"entryPoint":7048,"id":40427,"parameterSlots":1,"returnSlots":1},"@proposeNewOwner_49841":{"entryPoint":4684,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@proveAndProcess_40115":{"entryPoint":3235,"id":40115,"parameterSlots":5,"returnSlots":0},"@proveMessageRoot_40306":{"entryPoint":6797,"id":40306,"parameterSlots":4,"returnSlots":0},"@provenAggregateRoots_39566":{"entryPoint":null,"id":39566,"parameterSlots":0,"returnSlots":0},"@provenMessageRoots_39571":{"entryPoint":null,"id":39571,"parameterSlots":0,"returnSlots":0},"@rateLimitBlocks_49639":{"entryPoint":null,"id":49639,"parameterSlots":0,"returnSlots":0},"@receiveAggregateRoot_40160":{"entryPoint":8595,"id":40160,"parameterSlots":1,"returnSlots":0},"@recipientAddress_49174":{"entryPoint":10220,"id":49174,"parameterSlots":1,"returnSlots":1},"@recipient_49158":{"entryPoint":10666,"id":49158,"parameterSlots":1,"returnSlots":1},"@ref_50591":{"entryPoint":10090,"id":50591,"parameterSlots":2,"returnSlots":1},"@removePendingAggregateRoot_39792":{"entryPoint":4258,"id":39792,"parameterSlots":1,"returnSlots":0},"@removeSender_39724":{"entryPoint":4842,"id":39724,"parameterSlots":1,"returnSlots":0},"@renounceOwnership_39834":{"entryPoint":4461,"id":39834,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@sendValue_11206":{"entryPoint":7886,"id":11206,"parameterSlots":2,"returnSlots":0},"@send_39906":{"entryPoint":2589,"id":39906,"parameterSlots":1,"returnSlots":0},"@sender_49107":{"entryPoint":10278,"id":49107,"parameterSlots":1,"returnSlots":1},"@sentMessageRoots_39576":{"entryPoint":null,"id":39576,"parameterSlots":0,"returnSlots":0},"@setDelayBlocks_39750":{"entryPoint":2419,"id":39750,"parameterSlots":1,"returnSlots":0},"@setMirrorConnector_39170":{"entryPoint":3941,"id":39170,"parameterSlots":1,"returnSlots":0},"@setRateLimitBlocks_39763":{"entryPoint":5441,"id":39763,"parameterSlots":1,"returnSlots":0},"@setWatcherManager_38881":{"entryPoint":5205,"id":38881,"parameterSlots":1,"returnSlots":0},"@slice_50729":{"entryPoint":10950,"id":50729,"parameterSlots":4,"returnSlots":1},"@typeOf_50601":{"entryPoint":null,"id":50601,"parameterSlots":1,"returnSlots":1},"@unpause_38893":{"entryPoint":3008,"id":38893,"parameterSlots":0,"returnSlots":0},"@unsafeBuildUnchecked_50530":{"entryPoint":11317,"id":50530,"parameterSlots":3,"returnSlots":1},"@unsafeCopyTo_51113":{"entryPoint":11074,"id":51113,"parameterSlots":2,"returnSlots":1},"@verifyAggregateRoot_40221":{"entryPoint":9738,"id":40221,"parameterSlots":1,"returnSlots":0},"@verifySender_39202":{"entryPoint":5420,"id":39202,"parameterSlots":1,"returnSlots":1},"@watcherManager_38824":{"entryPoint":null,"id":38824,"parameterSlots":0,"returnSlots":0},"@withdrawFunds_39824":{"entryPoint":4133,"id":39824,"parameterSlots":1,"returnSlots":0},"abi_decode_bytes":{"entryPoint":11600,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":12012,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256":{"entryPoint":11856,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":12616,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32_fromMemory":{"entryPoint":12338,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_uint256_fromMemory":{"entryPoint":12704,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes_memory_ptr":{"entryPoint":11741,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":11553,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32":{"entryPoint":12078,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr":{"entryPoint":12105,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_uint32":{"entryPoint":12053,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_bytes":{"entryPoint":12228,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":12600,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":12964,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":12931,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":12272,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":12740,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":12826,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":12425,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed":{"entryPoint":12363,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed":{"entryPoint":11816,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":12884,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"access_calldata_tail_t_bytes_calldata_ptr":{"entryPoint":12522,"id":null,"parameterSlots":2,"returnSlots":2},"access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr":{"entryPoint":12489,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint160":{"entryPoint":12787,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":12319,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint8":{"entryPoint":13079,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":12650,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint8":{"entryPoint":13054,"id":null,"parameterSlots":2,"returnSlots":1},"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32":{"entryPoint":12845,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":12192,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint32":{"entryPoint":12669,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":12297,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":11794,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":12467,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":11578,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:24909:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"113:93:181","statements":[{"nodeType":"YulAssignment","src":"123:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"135:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"146:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"131:3:181"},"nodeType":"YulFunctionCall","src":"131:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"123:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"165:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"180:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"188:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"176:3:181"},"nodeType":"YulFunctionCall","src":"176:23:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"158:6:181"},"nodeType":"YulFunctionCall","src":"158:42:181"},"nodeType":"YulExpressionStatement","src":"158:42:181"}]},"name":"abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"82:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"93:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"104:4:181","type":""}],"src":"14:192:181"},{"body":{"nodeType":"YulBlock","src":"281:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"327:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"336:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"339:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"329:6:181"},"nodeType":"YulFunctionCall","src":"329:12:181"},"nodeType":"YulExpressionStatement","src":"329:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"302:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"311:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"298:3:181"},"nodeType":"YulFunctionCall","src":"298:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"323:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"294:3:181"},"nodeType":"YulFunctionCall","src":"294:32:181"},"nodeType":"YulIf","src":"291:52:181"},{"nodeType":"YulAssignment","src":"352:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"375:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"362:12:181"},"nodeType":"YulFunctionCall","src":"362:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"352:6:181"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"247:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"258:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"270:6:181","type":""}],"src":"211:180:181"},{"body":{"nodeType":"YulBlock","src":"497:76:181","statements":[{"nodeType":"YulAssignment","src":"507:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"519:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"530:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"515:3:181"},"nodeType":"YulFunctionCall","src":"515:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"507:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"549:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"560:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"542:6:181"},"nodeType":"YulFunctionCall","src":"542:25:181"},"nodeType":"YulExpressionStatement","src":"542:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"466:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"477:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"488:4:181","type":""}],"src":"396:177:181"},{"body":{"nodeType":"YulBlock","src":"610:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"627:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"634:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"639:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"630:3:181"},"nodeType":"YulFunctionCall","src":"630:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"620:6:181"},"nodeType":"YulFunctionCall","src":"620:31:181"},"nodeType":"YulExpressionStatement","src":"620:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"667:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"670:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"660:6:181"},"nodeType":"YulFunctionCall","src":"660:15:181"},"nodeType":"YulExpressionStatement","src":"660:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"691:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"694:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"684:6:181"},"nodeType":"YulFunctionCall","src":"684:15:181"},"nodeType":"YulExpressionStatement","src":"684:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"578:127:181"},{"body":{"nodeType":"YulBlock","src":"762:666:181","statements":[{"body":{"nodeType":"YulBlock","src":"811:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"820:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"823:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"813:6:181"},"nodeType":"YulFunctionCall","src":"813:12:181"},"nodeType":"YulExpressionStatement","src":"813:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"790:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"798:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"786:3:181"},"nodeType":"YulFunctionCall","src":"786:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"805:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"782:3:181"},"nodeType":"YulFunctionCall","src":"782:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"775:6:181"},"nodeType":"YulFunctionCall","src":"775:35:181"},"nodeType":"YulIf","src":"772:55:181"},{"nodeType":"YulVariableDeclaration","src":"836:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"859:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"846:12:181"},"nodeType":"YulFunctionCall","src":"846:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"840:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"875:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"885:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"879:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"926:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"928:16:181"},"nodeType":"YulFunctionCall","src":"928:18:181"},"nodeType":"YulExpressionStatement","src":"928:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"918:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"922:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"915:2:181"},"nodeType":"YulFunctionCall","src":"915:10:181"},"nodeType":"YulIf","src":"912:36:181"},{"nodeType":"YulVariableDeclaration","src":"957:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"971:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"967:3:181"},"nodeType":"YulFunctionCall","src":"967:7:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"961:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"983:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1003:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"997:5:181"},"nodeType":"YulFunctionCall","src":"997:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"987:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1015:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1037:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1061:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1065:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1057:3:181"},"nodeType":"YulFunctionCall","src":"1057:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1072:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1053:3:181"},"nodeType":"YulFunctionCall","src":"1053:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"1077:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1049:3:181"},"nodeType":"YulFunctionCall","src":"1049:31:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1082:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1045:3:181"},"nodeType":"YulFunctionCall","src":"1045:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1033:3:181"},"nodeType":"YulFunctionCall","src":"1033:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1019:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1145:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1147:16:181"},"nodeType":"YulFunctionCall","src":"1147:18:181"},"nodeType":"YulExpressionStatement","src":"1147:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1104:10:181"},{"name":"_2","nodeType":"YulIdentifier","src":"1116:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1101:2:181"},"nodeType":"YulFunctionCall","src":"1101:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1124:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1136:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1121:2:181"},"nodeType":"YulFunctionCall","src":"1121:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1098:2:181"},"nodeType":"YulFunctionCall","src":"1098:46:181"},"nodeType":"YulIf","src":"1095:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1183:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1187:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1176:6:181"},"nodeType":"YulFunctionCall","src":"1176:22:181"},"nodeType":"YulExpressionStatement","src":"1176:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1214:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1222:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1207:6:181"},"nodeType":"YulFunctionCall","src":"1207:18:181"},"nodeType":"YulExpressionStatement","src":"1207:18:181"},{"body":{"nodeType":"YulBlock","src":"1273:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1282:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1285:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1275:6:181"},"nodeType":"YulFunctionCall","src":"1275:12:181"},"nodeType":"YulExpressionStatement","src":"1275:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1248:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1256:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1244:3:181"},"nodeType":"YulFunctionCall","src":"1244:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1261:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1240:3:181"},"nodeType":"YulFunctionCall","src":"1240:26:181"},{"name":"end","nodeType":"YulIdentifier","src":"1268:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1237:2:181"},"nodeType":"YulFunctionCall","src":"1237:35:181"},"nodeType":"YulIf","src":"1234:55:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1315:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1323:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1311:3:181"},"nodeType":"YulFunctionCall","src":"1311:17:181"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1334:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1342:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1330:3:181"},"nodeType":"YulFunctionCall","src":"1330:17:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1349:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1298:12:181"},"nodeType":"YulFunctionCall","src":"1298:54:181"},"nodeType":"YulExpressionStatement","src":"1298:54:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1376:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1384:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1372:3:181"},"nodeType":"YulFunctionCall","src":"1372:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1389:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1368:3:181"},"nodeType":"YulFunctionCall","src":"1368:26:181"},{"kind":"number","nodeType":"YulLiteral","src":"1396:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1361:6:181"},"nodeType":"YulFunctionCall","src":"1361:37:181"},"nodeType":"YulExpressionStatement","src":"1361:37:181"},{"nodeType":"YulAssignment","src":"1407:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1416:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1407:5:181"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"736:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"744:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"752:5:181","type":""}],"src":"710:718:181"},{"body":{"nodeType":"YulBlock","src":"1512:241:181","statements":[{"body":{"nodeType":"YulBlock","src":"1558:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1567:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1570:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1560:6:181"},"nodeType":"YulFunctionCall","src":"1560:12:181"},"nodeType":"YulExpressionStatement","src":"1560:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1533:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1542:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1529:3:181"},"nodeType":"YulFunctionCall","src":"1529:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1554:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1525:3:181"},"nodeType":"YulFunctionCall","src":"1525:32:181"},"nodeType":"YulIf","src":"1522:52:181"},{"nodeType":"YulVariableDeclaration","src":"1583:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1610:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1597:12:181"},"nodeType":"YulFunctionCall","src":"1597:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1587:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1663:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1672:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1675:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1665:6:181"},"nodeType":"YulFunctionCall","src":"1665:12:181"},"nodeType":"YulExpressionStatement","src":"1665:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1635:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1643:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1632:2:181"},"nodeType":"YulFunctionCall","src":"1632:30:181"},"nodeType":"YulIf","src":"1629:50:181"},{"nodeType":"YulAssignment","src":"1688:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1719:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1730:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1715:3:181"},"nodeType":"YulFunctionCall","src":"1715:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1739:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"1698:16:181"},"nodeType":"YulFunctionCall","src":"1698:49:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1688:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1478:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1489:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1501:6:181","type":""}],"src":"1433:320:181"},{"body":{"nodeType":"YulBlock","src":"1828:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"1874:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1883:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1886:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1876:6:181"},"nodeType":"YulFunctionCall","src":"1876:12:181"},"nodeType":"YulExpressionStatement","src":"1876:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1849:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1858:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1845:3:181"},"nodeType":"YulFunctionCall","src":"1845:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1870:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1841:3:181"},"nodeType":"YulFunctionCall","src":"1841:32:181"},"nodeType":"YulIf","src":"1838:52:181"},{"nodeType":"YulAssignment","src":"1899:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1922:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1909:12:181"},"nodeType":"YulFunctionCall","src":"1909:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1899:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1794:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1805:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1817:6:181","type":""}],"src":"1758:180:181"},{"body":{"nodeType":"YulBlock","src":"1975:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1992:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1999:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2004:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1995:3:181"},"nodeType":"YulFunctionCall","src":"1995:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1985:6:181"},"nodeType":"YulFunctionCall","src":"1985:31:181"},"nodeType":"YulExpressionStatement","src":"1985:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2032:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2035:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2025:6:181"},"nodeType":"YulFunctionCall","src":"2025:15:181"},"nodeType":"YulExpressionStatement","src":"2025:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2056:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2059:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2049:6:181"},"nodeType":"YulFunctionCall","src":"2049:15:181"},"nodeType":"YulExpressionStatement","src":"2049:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"1943:127:181"},{"body":{"nodeType":"YulBlock","src":"2193:229:181","statements":[{"nodeType":"YulAssignment","src":"2203:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2215:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2226:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2211:3:181"},"nodeType":"YulFunctionCall","src":"2211:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2203:4:181"}]},{"body":{"nodeType":"YulBlock","src":"2271:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2292:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2299:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2304:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2295:3:181"},"nodeType":"YulFunctionCall","src":"2295:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2285:6:181"},"nodeType":"YulFunctionCall","src":"2285:31:181"},"nodeType":"YulExpressionStatement","src":"2285:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2336:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2339:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2329:6:181"},"nodeType":"YulFunctionCall","src":"2329:15:181"},"nodeType":"YulExpressionStatement","src":"2329:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2364:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2367:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2357:6:181"},"nodeType":"YulFunctionCall","src":"2357:15:181"},"nodeType":"YulExpressionStatement","src":"2357:15:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2251:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2259:1:181","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2248:2:181"},"nodeType":"YulFunctionCall","src":"2248:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2241:6:181"},"nodeType":"YulFunctionCall","src":"2241:21:181"},"nodeType":"YulIf","src":"2238:144:181"},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2398:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"2409:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2391:6:181"},"nodeType":"YulFunctionCall","src":"2391:25:181"},"nodeType":"YulExpressionStatement","src":"2391:25:181"}]},"name":"abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2162:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2173:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2184:4:181","type":""}],"src":"2075:347:181"},{"body":{"nodeType":"YulBlock","src":"2522:92:181","statements":[{"nodeType":"YulAssignment","src":"2532:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2544:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2555:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2540:3:181"},"nodeType":"YulFunctionCall","src":"2540:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2532:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2574:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2599:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2592:6:181"},"nodeType":"YulFunctionCall","src":"2592:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2585:6:181"},"nodeType":"YulFunctionCall","src":"2585:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2567:6:181"},"nodeType":"YulFunctionCall","src":"2567:41:181"},"nodeType":"YulExpressionStatement","src":"2567:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2491:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2502:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2513:4:181","type":""}],"src":"2427:187:181"},{"body":{"nodeType":"YulBlock","src":"2827:724:181","statements":[{"body":{"nodeType":"YulBlock","src":"2875:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2884:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2887:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2877:6:181"},"nodeType":"YulFunctionCall","src":"2877:12:181"},"nodeType":"YulExpressionStatement","src":"2877:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2848:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2857:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2844:3:181"},"nodeType":"YulFunctionCall","src":"2844:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2869:4:181","type":"","value":"1120"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2840:3:181"},"nodeType":"YulFunctionCall","src":"2840:34:181"},"nodeType":"YulIf","src":"2837:54:181"},{"nodeType":"YulVariableDeclaration","src":"2900:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2927:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2914:12:181"},"nodeType":"YulFunctionCall","src":"2914:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2904:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2946:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2956:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2950:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3001:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3010:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3013:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3003:6:181"},"nodeType":"YulFunctionCall","src":"3003:12:181"},"nodeType":"YulExpressionStatement","src":"3003:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2989:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2997:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2986:2:181"},"nodeType":"YulFunctionCall","src":"2986:14:181"},"nodeType":"YulIf","src":"2983:34:181"},{"nodeType":"YulVariableDeclaration","src":"3026:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3040:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"3051:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3036:3:181"},"nodeType":"YulFunctionCall","src":"3036:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"3030:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3106:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3115:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3118:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3108:6:181"},"nodeType":"YulFunctionCall","src":"3108:12:181"},"nodeType":"YulExpressionStatement","src":"3108:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3085:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3089:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3081:3:181"},"nodeType":"YulFunctionCall","src":"3081:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3096:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3077:3:181"},"nodeType":"YulFunctionCall","src":"3077:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3070:6:181"},"nodeType":"YulFunctionCall","src":"3070:35:181"},"nodeType":"YulIf","src":"3067:55:181"},{"nodeType":"YulVariableDeclaration","src":"3131:30:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3158:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3145:12:181"},"nodeType":"YulFunctionCall","src":"3145:16:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3135:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3188:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3197:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3200:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3190:6:181"},"nodeType":"YulFunctionCall","src":"3190:12:181"},"nodeType":"YulExpressionStatement","src":"3190:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3176:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3184:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3173:2:181"},"nodeType":"YulFunctionCall","src":"3173:14:181"},"nodeType":"YulIf","src":"3170:34:181"},{"body":{"nodeType":"YulBlock","src":"3264:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3273:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3276:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3266:6:181"},"nodeType":"YulFunctionCall","src":"3266:12:181"},"nodeType":"YulExpressionStatement","src":"3266:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3227:2:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3235:1:181","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"3238:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3231:3:181"},"nodeType":"YulFunctionCall","src":"3231:14:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3223:3:181"},"nodeType":"YulFunctionCall","src":"3223:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3248:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3219:3:181"},"nodeType":"YulFunctionCall","src":"3219:34:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3255:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3216:2:181"},"nodeType":"YulFunctionCall","src":"3216:47:181"},"nodeType":"YulIf","src":"3213:67:181"},{"nodeType":"YulAssignment","src":"3289:23:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3303:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"3307:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3299:3:181"},"nodeType":"YulFunctionCall","src":"3299:13:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3289:6:181"}]},{"nodeType":"YulAssignment","src":"3321:16:181","value":{"name":"length","nodeType":"YulIdentifier","src":"3331:6:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3321:6:181"}]},{"nodeType":"YulAssignment","src":"3346:44:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3373:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3384:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3369:3:181"},"nodeType":"YulFunctionCall","src":"3369:20:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3356:12:181"},"nodeType":"YulFunctionCall","src":"3356:34:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3346:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3399:30:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3413:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3424:4:181","type":"","value":"1088"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3409:3:181"},"nodeType":"YulFunctionCall","src":"3409:20:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"3403:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3457:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3466:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3469:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3459:6:181"},"nodeType":"YulFunctionCall","src":"3459:12:181"},"nodeType":"YulExpressionStatement","src":"3459:12:181"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3444:2:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3448:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3441:2:181"},"nodeType":"YulFunctionCall","src":"3441:15:181"},"nodeType":"YulIf","src":"3438:35:181"},{"nodeType":"YulAssignment","src":"3482:28:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3496:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3507:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3492:3:181"},"nodeType":"YulFunctionCall","src":"3492:18:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3482:6:181"}]},{"nodeType":"YulAssignment","src":"3519:26:181","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3542:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3529:12:181"},"nodeType":"YulFunctionCall","src":"3529:16:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3519:6:181"}]}]},"name":"abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2761:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2772:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2784:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2792:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2800:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2808:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2816:6:181","type":""}],"src":"2619:932:181"},{"body":{"nodeType":"YulBlock","src":"3626:216:181","statements":[{"body":{"nodeType":"YulBlock","src":"3672:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3681:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3684:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3674:6:181"},"nodeType":"YulFunctionCall","src":"3674:12:181"},"nodeType":"YulExpressionStatement","src":"3674:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3647:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3656:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3643:3:181"},"nodeType":"YulFunctionCall","src":"3643:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3668:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3639:3:181"},"nodeType":"YulFunctionCall","src":"3639:32:181"},"nodeType":"YulIf","src":"3636:52:181"},{"nodeType":"YulVariableDeclaration","src":"3697:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3723:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3710:12:181"},"nodeType":"YulFunctionCall","src":"3710:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3701:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3796:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3805:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3808:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3798:6:181"},"nodeType":"YulFunctionCall","src":"3798:12:181"},"nodeType":"YulExpressionStatement","src":"3798:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3755:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3766:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3781:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"3786:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3777:3:181"},"nodeType":"YulFunctionCall","src":"3777:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"3790:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3773:3:181"},"nodeType":"YulFunctionCall","src":"3773:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3762:3:181"},"nodeType":"YulFunctionCall","src":"3762:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3752:2:181"},"nodeType":"YulFunctionCall","src":"3752:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3745:6:181"},"nodeType":"YulFunctionCall","src":"3745:50:181"},"nodeType":"YulIf","src":"3742:70:181"},{"nodeType":"YulAssignment","src":"3821:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"3831:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3821:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3592:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3603:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3615:6:181","type":""}],"src":"3556:286:181"},{"body":{"nodeType":"YulBlock","src":"3948:102:181","statements":[{"nodeType":"YulAssignment","src":"3958:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3970:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3981:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3966:3:181"},"nodeType":"YulFunctionCall","src":"3966:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3958:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4000:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4015:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4031:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4036:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4027:3:181"},"nodeType":"YulFunctionCall","src":"4027:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4040:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4023:3:181"},"nodeType":"YulFunctionCall","src":"4023:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4011:3:181"},"nodeType":"YulFunctionCall","src":"4011:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3993:6:181"},"nodeType":"YulFunctionCall","src":"3993:51:181"},"nodeType":"YulExpressionStatement","src":"3993:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3917:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3928:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3939:4:181","type":""}],"src":"3847:203:181"},{"body":{"nodeType":"YulBlock","src":"4156:76:181","statements":[{"nodeType":"YulAssignment","src":"4166:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4178:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4189:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4174:3:181"},"nodeType":"YulFunctionCall","src":"4174:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4166:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4208:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"4219:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4201:6:181"},"nodeType":"YulFunctionCall","src":"4201:25:181"},"nodeType":"YulExpressionStatement","src":"4201:25:181"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4125:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4136:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4147:4:181","type":""}],"src":"4055:177:181"},{"body":{"nodeType":"YulBlock","src":"4355:102:181","statements":[{"nodeType":"YulAssignment","src":"4365:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4377:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4388:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4373:3:181"},"nodeType":"YulFunctionCall","src":"4373:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4365:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4407:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4422:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4438:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4443:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4434:3:181"},"nodeType":"YulFunctionCall","src":"4434:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4447:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4430:3:181"},"nodeType":"YulFunctionCall","src":"4430:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4418:3:181"},"nodeType":"YulFunctionCall","src":"4418:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4400:6:181"},"nodeType":"YulFunctionCall","src":"4400:51:181"},"nodeType":"YulExpressionStatement","src":"4400:51:181"}]},"name":"abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4324:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4335:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4346:4:181","type":""}],"src":"4237:220:181"},{"body":{"nodeType":"YulBlock","src":"4590:102:181","statements":[{"nodeType":"YulAssignment","src":"4600:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4612:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4623:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4608:3:181"},"nodeType":"YulFunctionCall","src":"4608:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4600:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4642:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4657:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4673:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4678:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4669:3:181"},"nodeType":"YulFunctionCall","src":"4669:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4682:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4665:3:181"},"nodeType":"YulFunctionCall","src":"4665:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4653:3:181"},"nodeType":"YulFunctionCall","src":"4653:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4635:6:181"},"nodeType":"YulFunctionCall","src":"4635:51:181"},"nodeType":"YulExpressionStatement","src":"4635:51:181"}]},"name":"abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4559:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4570:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4581:4:181","type":""}],"src":"4462:230:181"},{"body":{"nodeType":"YulBlock","src":"4822:102:181","statements":[{"nodeType":"YulAssignment","src":"4832:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4844:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4855:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4840:3:181"},"nodeType":"YulFunctionCall","src":"4840:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4832:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4874:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4889:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4905:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4910:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4901:3:181"},"nodeType":"YulFunctionCall","src":"4901:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4914:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4897:3:181"},"nodeType":"YulFunctionCall","src":"4897:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4885:3:181"},"nodeType":"YulFunctionCall","src":"4885:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4867:6:181"},"nodeType":"YulFunctionCall","src":"4867:51:181"},"nodeType":"YulExpressionStatement","src":"4867:51:181"}]},"name":"abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4791:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4802:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4813:4:181","type":""}],"src":"4697:227:181"},{"body":{"nodeType":"YulBlock","src":"4977:115:181","statements":[{"nodeType":"YulAssignment","src":"4987:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5009:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4996:12:181"},"nodeType":"YulFunctionCall","src":"4996:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"4987:5:181"}]},{"body":{"nodeType":"YulBlock","src":"5070:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5079:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5082:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5072:6:181"},"nodeType":"YulFunctionCall","src":"5072:12:181"},"nodeType":"YulExpressionStatement","src":"5072:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5038:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5049:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"5056:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5045:3:181"},"nodeType":"YulFunctionCall","src":"5045:22:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5035:2:181"},"nodeType":"YulFunctionCall","src":"5035:33:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5028:6:181"},"nodeType":"YulFunctionCall","src":"5028:41:181"},"nodeType":"YulIf","src":"5025:61:181"}]},"name":"abi_decode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"4956:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"4967:5:181","type":""}],"src":"4929:163:181"},{"body":{"nodeType":"YulBlock","src":"5166:115:181","statements":[{"body":{"nodeType":"YulBlock","src":"5212:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5221:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5224:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5214:6:181"},"nodeType":"YulFunctionCall","src":"5214:12:181"},"nodeType":"YulExpressionStatement","src":"5214:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5187:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5196:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5183:3:181"},"nodeType":"YulFunctionCall","src":"5183:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5208:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5179:3:181"},"nodeType":"YulFunctionCall","src":"5179:32:181"},"nodeType":"YulIf","src":"5176:52:181"},{"nodeType":"YulAssignment","src":"5237:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5265:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"5247:17:181"},"nodeType":"YulFunctionCall","src":"5247:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5237:6:181"}]}]},"name":"abi_decode_tuple_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5132:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5143:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5155:6:181","type":""}],"src":"5097:184:181"},{"body":{"nodeType":"YulBlock","src":"5398:348:181","statements":[{"body":{"nodeType":"YulBlock","src":"5444:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5453:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5456:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5446:6:181"},"nodeType":"YulFunctionCall","src":"5446:12:181"},"nodeType":"YulExpressionStatement","src":"5446:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5419:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"5428:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5415:3:181"},"nodeType":"YulFunctionCall","src":"5415:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"5440:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5411:3:181"},"nodeType":"YulFunctionCall","src":"5411:32:181"},"nodeType":"YulIf","src":"5408:52:181"},{"nodeType":"YulAssignment","src":"5469:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5497:9:181"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"5479:17:181"},"nodeType":"YulFunctionCall","src":"5479:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5469:6:181"}]},{"nodeType":"YulAssignment","src":"5516:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5543:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5554:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5539:3:181"},"nodeType":"YulFunctionCall","src":"5539:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5526:12:181"},"nodeType":"YulFunctionCall","src":"5526:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5516:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"5567:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5598:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5609:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5594:3:181"},"nodeType":"YulFunctionCall","src":"5594:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5581:12:181"},"nodeType":"YulFunctionCall","src":"5581:32:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"5571:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5656:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5665:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5668:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5658:6:181"},"nodeType":"YulFunctionCall","src":"5658:12:181"},"nodeType":"YulExpressionStatement","src":"5658:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5628:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5636:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5625:2:181"},"nodeType":"YulFunctionCall","src":"5625:30:181"},"nodeType":"YulIf","src":"5622:50:181"},{"nodeType":"YulAssignment","src":"5681:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5712:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"5723:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5708:3:181"},"nodeType":"YulFunctionCall","src":"5708:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5732:7:181"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"5691:16:181"},"nodeType":"YulFunctionCall","src":"5691:49:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5681:6:181"}]}]},"name":"abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5348:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5359:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5371:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5379:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5387:6:181","type":""}],"src":"5286:460:181"},{"body":{"nodeType":"YulBlock","src":"5817:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"5827:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"5836:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"5831:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5896:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5921:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"5926:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5917:3:181"},"nodeType":"YulFunctionCall","src":"5917:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5940:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"5945:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5936:3:181"},"nodeType":"YulFunctionCall","src":"5936:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5930:5:181"},"nodeType":"YulFunctionCall","src":"5930:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5910:6:181"},"nodeType":"YulFunctionCall","src":"5910:39:181"},"nodeType":"YulExpressionStatement","src":"5910:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5857:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"5860:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5854:2:181"},"nodeType":"YulFunctionCall","src":"5854:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5868:19:181","statements":[{"nodeType":"YulAssignment","src":"5870:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5879:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"5882:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5875:3:181"},"nodeType":"YulFunctionCall","src":"5875:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"5870:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"5850:3:181","statements":[]},"src":"5846:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5979:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"5984:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5975:3:181"},"nodeType":"YulFunctionCall","src":"5975:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"5993:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5968:6:181"},"nodeType":"YulFunctionCall","src":"5968:27:181"},"nodeType":"YulExpressionStatement","src":"5968:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"5795:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"5800:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"5805:6:181","type":""}],"src":"5751:250:181"},{"body":{"nodeType":"YulBlock","src":"6055:221:181","statements":[{"nodeType":"YulVariableDeclaration","src":"6065:26:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6085:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6079:5:181"},"nodeType":"YulFunctionCall","src":"6079:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"6069:6:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6107:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"6112:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6100:6:181"},"nodeType":"YulFunctionCall","src":"6100:19:181"},"nodeType":"YulExpressionStatement","src":"6100:19:181"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6167:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"6174:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6163:3:181"},"nodeType":"YulFunctionCall","src":"6163:16:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6185:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"6190:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6181:3:181"},"nodeType":"YulFunctionCall","src":"6181:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"6197:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"6128:34:181"},"nodeType":"YulFunctionCall","src":"6128:76:181"},"nodeType":"YulExpressionStatement","src":"6128:76:181"},{"nodeType":"YulAssignment","src":"6213:57:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6228:3:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6241:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6249:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6237:3:181"},"nodeType":"YulFunctionCall","src":"6237:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6258:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6254:3:181"},"nodeType":"YulFunctionCall","src":"6254:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6233:3:181"},"nodeType":"YulFunctionCall","src":"6233:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6224:3:181"},"nodeType":"YulFunctionCall","src":"6224:39:181"},{"kind":"number","nodeType":"YulLiteral","src":"6265:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6220:3:181"},"nodeType":"YulFunctionCall","src":"6220:50:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"6213:3:181"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"6032:5:181","type":""},{"name":"pos","nodeType":"YulTypedName","src":"6039:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"6047:3:181","type":""}],"src":"6006:270:181"},{"body":{"nodeType":"YulBlock","src":"6428:141:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6445:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"6456:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6438:6:181"},"nodeType":"YulFunctionCall","src":"6438:25:181"},"nodeType":"YulExpressionStatement","src":"6438:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6483:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6494:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6479:3:181"},"nodeType":"YulFunctionCall","src":"6479:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6499:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6472:6:181"},"nodeType":"YulFunctionCall","src":"6472:30:181"},"nodeType":"YulExpressionStatement","src":"6472:30:181"},{"nodeType":"YulAssignment","src":"6511:52:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6536:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6548:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6559:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6544:3:181"},"nodeType":"YulFunctionCall","src":"6544:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"6519:16:181"},"nodeType":"YulFunctionCall","src":"6519:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6511:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6389:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6400:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6408:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6419:4:181","type":""}],"src":"6281:288:181"},{"body":{"nodeType":"YulBlock","src":"6748:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6765:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6776:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6758:6:181"},"nodeType":"YulFunctionCall","src":"6758:21:181"},"nodeType":"YulExpressionStatement","src":"6758:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6799:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6810:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6795:3:181"},"nodeType":"YulFunctionCall","src":"6795:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"6815:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6788:6:181"},"nodeType":"YulFunctionCall","src":"6788:30:181"},"nodeType":"YulExpressionStatement","src":"6788:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6838:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6849:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6834:3:181"},"nodeType":"YulFunctionCall","src":"6834:18:181"},{"hexValue":"2164656c6179426c6f636b73","kind":"string","nodeType":"YulLiteral","src":"6854:14:181","type":"","value":"!delayBlocks"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6827:6:181"},"nodeType":"YulFunctionCall","src":"6827:42:181"},"nodeType":"YulExpressionStatement","src":"6827:42:181"},{"nodeType":"YulAssignment","src":"6878:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6890:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"6901:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6886:3:181"},"nodeType":"YulFunctionCall","src":"6886:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6878:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6725:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6739:4:181","type":""}],"src":"6574:336:181"},{"body":{"nodeType":"YulBlock","src":"6947:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6964:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6971:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"6976:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6967:3:181"},"nodeType":"YulFunctionCall","src":"6967:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6957:6:181"},"nodeType":"YulFunctionCall","src":"6957:31:181"},"nodeType":"YulExpressionStatement","src":"6957:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7004:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7007:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6997:6:181"},"nodeType":"YulFunctionCall","src":"6997:15:181"},"nodeType":"YulExpressionStatement","src":"6997:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7028:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7031:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7021:6:181"},"nodeType":"YulFunctionCall","src":"7021:15:181"},"nodeType":"YulExpressionStatement","src":"7021:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"6915:127:181"},{"body":{"nodeType":"YulBlock","src":"7095:77:181","statements":[{"nodeType":"YulAssignment","src":"7105:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7116:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"7119:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7112:3:181"},"nodeType":"YulFunctionCall","src":"7112:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"7105:3:181"}]},{"body":{"nodeType":"YulBlock","src":"7144:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7146:16:181"},"nodeType":"YulFunctionCall","src":"7146:18:181"},"nodeType":"YulExpressionStatement","src":"7146:18:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7136:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"7139:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7133:2:181"},"nodeType":"YulFunctionCall","src":"7133:10:181"},"nodeType":"YulIf","src":"7130:36:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"7078:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"7081:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"7087:3:181","type":""}],"src":"7047:125:181"},{"body":{"nodeType":"YulBlock","src":"7258:103:181","statements":[{"body":{"nodeType":"YulBlock","src":"7304:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7313:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7316:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7306:6:181"},"nodeType":"YulFunctionCall","src":"7306:12:181"},"nodeType":"YulExpressionStatement","src":"7306:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7279:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"7288:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7275:3:181"},"nodeType":"YulFunctionCall","src":"7275:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"7300:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7271:3:181"},"nodeType":"YulFunctionCall","src":"7271:32:181"},"nodeType":"YulIf","src":"7268:52:181"},{"nodeType":"YulAssignment","src":"7329:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7345:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7339:5:181"},"nodeType":"YulFunctionCall","src":"7339:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7329:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7224:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7235:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7247:6:181","type":""}],"src":"7177:184:181"},{"body":{"nodeType":"YulBlock","src":"7540:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7557:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7568:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7550:6:181"},"nodeType":"YulFunctionCall","src":"7550:21:181"},"nodeType":"YulExpressionStatement","src":"7550:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7591:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7602:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7587:3:181"},"nodeType":"YulFunctionCall","src":"7587:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7607:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7580:6:181"},"nodeType":"YulFunctionCall","src":"7580:30:181"},"nodeType":"YulExpressionStatement","src":"7580:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7630:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7641:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7626:3:181"},"nodeType":"YulFunctionCall","src":"7626:18:181"},{"hexValue":"726f6f7420616c72656164792073656e74","kind":"string","nodeType":"YulLiteral","src":"7646:19:181","type":"","value":"root already sent"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7619:6:181"},"nodeType":"YulFunctionCall","src":"7619:47:181"},"nodeType":"YulExpressionStatement","src":"7619:47:181"},{"nodeType":"YulAssignment","src":"7675:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7687:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7698:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7683:3:181"},"nodeType":"YulFunctionCall","src":"7683:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7675:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7517:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7531:4:181","type":""}],"src":"7366:341:181"},{"body":{"nodeType":"YulBlock","src":"7831:63:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7848:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"7853:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7841:6:181"},"nodeType":"YulFunctionCall","src":"7841:19:181"},"nodeType":"YulExpressionStatement","src":"7841:19:181"},{"nodeType":"YulAssignment","src":"7869:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7880:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"7885:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7876:3:181"},"nodeType":"YulFunctionCall","src":"7876:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"7869:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"7807:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7812:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"7823:3:181","type":""}],"src":"7712:182:181"},{"body":{"nodeType":"YulBlock","src":"8092:281:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8109:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8120:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8102:6:181"},"nodeType":"YulFunctionCall","src":"8102:21:181"},"nodeType":"YulExpressionStatement","src":"8102:21:181"},{"nodeType":"YulVariableDeclaration","src":"8132:58:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8163:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8175:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8186:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8171:3:181"},"nodeType":"YulFunctionCall","src":"8171:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"8146:16:181"},"nodeType":"YulFunctionCall","src":"8146:44:181"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"8136:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8210:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8221:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8206:3:181"},"nodeType":"YulFunctionCall","src":"8206:18:181"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"8230:6:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"8238:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8226:3:181"},"nodeType":"YulFunctionCall","src":"8226:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8199:6:181"},"nodeType":"YulFunctionCall","src":"8199:50:181"},"nodeType":"YulExpressionStatement","src":"8199:50:181"},{"nodeType":"YulAssignment","src":"8258:40:181","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"8283:6:181"},{"name":"tail_1","nodeType":"YulIdentifier","src":"8291:6:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"8266:16:181"},"nodeType":"YulFunctionCall","src":"8266:32:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8258:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8318:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8329:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8314:3:181"},"nodeType":"YulFunctionCall","src":"8314:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"8338:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8354:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"8359:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8350:3:181"},"nodeType":"YulFunctionCall","src":"8350:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"8363:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8346:3:181"},"nodeType":"YulFunctionCall","src":"8346:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8334:3:181"},"nodeType":"YulFunctionCall","src":"8334:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8307:6:181"},"nodeType":"YulFunctionCall","src":"8307:60:181"},"nodeType":"YulExpressionStatement","src":"8307:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8045:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8056:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8064:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8072:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8083:4:181","type":""}],"src":"7899:474:181"},{"body":{"nodeType":"YulBlock","src":"8552:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8569:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8580:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8562:6:181"},"nodeType":"YulFunctionCall","src":"8562:21:181"},"nodeType":"YulExpressionStatement","src":"8562:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8603:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8614:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8599:3:181"},"nodeType":"YulFunctionCall","src":"8599:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8619:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8592:6:181"},"nodeType":"YulFunctionCall","src":"8592:29:181"},"nodeType":"YulExpressionStatement","src":"8592:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8641:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8652:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8637:3:181"},"nodeType":"YulFunctionCall","src":"8637:18:181"},{"hexValue":"21414d42","kind":"string","nodeType":"YulLiteral","src":"8657:6:181","type":"","value":"!AMB"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8630:6:181"},"nodeType":"YulFunctionCall","src":"8630:34:181"},"nodeType":"YulExpressionStatement","src":"8630:34:181"},{"nodeType":"YulAssignment","src":"8673:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8685:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8696:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8681:3:181"},"nodeType":"YulFunctionCall","src":"8681:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8673:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8529:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8543:4:181","type":""}],"src":"8378:327:181"},{"body":{"nodeType":"YulBlock","src":"8857:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8874:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8885:2:181","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8867:6:181"},"nodeType":"YulFunctionCall","src":"8867:21:181"},"nodeType":"YulExpressionStatement","src":"8867:21:181"},{"nodeType":"YulAssignment","src":"8897:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8922:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8934:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8945:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8930:3:181"},"nodeType":"YulFunctionCall","src":"8930:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"8905:16:181"},"nodeType":"YulFunctionCall","src":"8905:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8897:4:181"}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8969:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8980:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8965:3:181"},"nodeType":"YulFunctionCall","src":"8965:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"8989:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9005:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"9010:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9001:3:181"},"nodeType":"YulFunctionCall","src":"9001:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"9014:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8997:3:181"},"nodeType":"YulFunctionCall","src":"8997:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8985:3:181"},"nodeType":"YulFunctionCall","src":"8985:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8958:6:181"},"nodeType":"YulFunctionCall","src":"8958:60:181"},"nodeType":"YulExpressionStatement","src":"8958:60:181"}]},"name":"abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8818:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8829:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8837:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8848:4:181","type":""}],"src":"8710:314:181"},{"body":{"nodeType":"YulBlock","src":"9203:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9220:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9231:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9213:6:181"},"nodeType":"YulFunctionCall","src":"9213:21:181"},"nodeType":"YulExpressionStatement","src":"9213:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9254:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9265:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9250:3:181"},"nodeType":"YulFunctionCall","src":"9250:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9270:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9243:6:181"},"nodeType":"YulFunctionCall","src":"9243:29:181"},"nodeType":"YulExpressionStatement","src":"9243:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9292:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9303:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9288:3:181"},"nodeType":"YulFunctionCall","src":"9288:18:181"},{"hexValue":"2170726f6f6673","kind":"string","nodeType":"YulLiteral","src":"9308:9:181","type":"","value":"!proofs"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9281:6:181"},"nodeType":"YulFunctionCall","src":"9281:37:181"},"nodeType":"YulExpressionStatement","src":"9281:37:181"},{"nodeType":"YulAssignment","src":"9327:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9339:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9350:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9335:3:181"},"nodeType":"YulFunctionCall","src":"9335:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9327:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9180:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9194:4:181","type":""}],"src":"9029:330:181"},{"body":{"nodeType":"YulBlock","src":"9396:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9413:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9420:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"9425:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9416:3:181"},"nodeType":"YulFunctionCall","src":"9416:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9406:6:181"},"nodeType":"YulFunctionCall","src":"9406:31:181"},"nodeType":"YulExpressionStatement","src":"9406:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9453:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"9456:4:181","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9446:6:181"},"nodeType":"YulFunctionCall","src":"9446:15:181"},"nodeType":"YulExpressionStatement","src":"9446:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9477:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9480:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9470:6:181"},"nodeType":"YulFunctionCall","src":"9470:15:181"},"nodeType":"YulExpressionStatement","src":"9470:15:181"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"9364:127:181"},{"body":{"nodeType":"YulBlock","src":"9597:224:181","statements":[{"nodeType":"YulVariableDeclaration","src":"9607:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"9646:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9633:12:181"},"nodeType":"YulFunctionCall","src":"9633:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"9611:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"9749:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9758:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9761:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9751:6:181"},"nodeType":"YulFunctionCall","src":"9751:12:181"},"nodeType":"YulExpressionStatement","src":"9751:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"9681:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"9709:12:181"},"nodeType":"YulFunctionCall","src":"9709:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"9725:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9705:3:181"},"nodeType":"YulFunctionCall","src":"9705:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9740:4:181","type":"","value":"1086"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"9736:3:181"},"nodeType":"YulFunctionCall","src":"9736:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9701:3:181"},"nodeType":"YulFunctionCall","src":"9701:45:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9677:3:181"},"nodeType":"YulFunctionCall","src":"9677:70:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9670:6:181"},"nodeType":"YulFunctionCall","src":"9670:78:181"},"nodeType":"YulIf","src":"9667:98:181"},{"nodeType":"YulAssignment","src":"9774:41:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"9786:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"9796:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9782:3:181"},"nodeType":"YulFunctionCall","src":"9782:33:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"9774:4:181"}]}]},"name":"access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"9562:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"9572:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"9588:4:181","type":""}],"src":"9496:325:181"},{"body":{"nodeType":"YulBlock","src":"9920:427:181","statements":[{"nodeType":"YulVariableDeclaration","src":"9930:51:181","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"9969:11:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9956:12:181"},"nodeType":"YulFunctionCall","src":"9956:25:181"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"9934:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"10070:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10079:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10082:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10072:6:181"},"nodeType":"YulFunctionCall","src":"10072:12:181"},"nodeType":"YulExpressionStatement","src":"10072:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10004:18:181"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"10032:12:181"},"nodeType":"YulFunctionCall","src":"10032:14:181"},{"name":"base_ref","nodeType":"YulIdentifier","src":"10048:8:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10028:3:181"},"nodeType":"YulFunctionCall","src":"10028:29:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10063:2:181","type":"","value":"30"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10059:3:181"},"nodeType":"YulFunctionCall","src":"10059:7:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10024:3:181"},"nodeType":"YulFunctionCall","src":"10024:43:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10000:3:181"},"nodeType":"YulFunctionCall","src":"10000:68:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9993:6:181"},"nodeType":"YulFunctionCall","src":"9993:76:181"},"nodeType":"YulIf","src":"9990:96:181"},{"nodeType":"YulVariableDeclaration","src":"10095:47:181","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"10113:8:181"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"10123:18:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10109:3:181"},"nodeType":"YulFunctionCall","src":"10109:33:181"},"variables":[{"name":"addr_1","nodeType":"YulTypedName","src":"10099:6:181","type":""}]},{"nodeType":"YulAssignment","src":"10151:30:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"10174:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10161:12:181"},"nodeType":"YulFunctionCall","src":"10161:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"10151:6:181"}]},{"body":{"nodeType":"YulBlock","src":"10224:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10233:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10236:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10226:6:181"},"nodeType":"YulFunctionCall","src":"10226:12:181"},"nodeType":"YulExpressionStatement","src":"10226:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"10196:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10204:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10193:2:181"},"nodeType":"YulFunctionCall","src":"10193:30:181"},"nodeType":"YulIf","src":"10190:50:181"},{"nodeType":"YulAssignment","src":"10249:25:181","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"10261:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"10269:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10257:3:181"},"nodeType":"YulFunctionCall","src":"10257:17:181"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"10249:4:181"}]},{"body":{"nodeType":"YulBlock","src":"10325:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10334:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10337:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10327:6:181"},"nodeType":"YulFunctionCall","src":"10327:12:181"},"nodeType":"YulExpressionStatement","src":"10327:12:181"}]},"condition":{"arguments":[{"name":"addr","nodeType":"YulIdentifier","src":"10290:4:181"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"10300:12:181"},"nodeType":"YulFunctionCall","src":"10300:14:181"},{"name":"length","nodeType":"YulIdentifier","src":"10316:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10296:3:181"},"nodeType":"YulFunctionCall","src":"10296:27:181"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"10286:3:181"},"nodeType":"YulFunctionCall","src":"10286:38:181"},"nodeType":"YulIf","src":"10283:58:181"}]},"name":"access_calldata_tail_t_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"9877:8:181","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"9887:11:181","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"9903:4:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"9909:6:181","type":""}],"src":"9826:521:181"},{"body":{"nodeType":"YulBlock","src":"10499:124:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10522:3:181"},{"name":"value0","nodeType":"YulIdentifier","src":"10527:6:181"},{"name":"value1","nodeType":"YulIdentifier","src":"10535:6:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"10509:12:181"},"nodeType":"YulFunctionCall","src":"10509:33:181"},"nodeType":"YulExpressionStatement","src":"10509:33:181"},{"nodeType":"YulVariableDeclaration","src":"10551:26:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10565:3:181"},{"name":"value1","nodeType":"YulIdentifier","src":"10570:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10561:3:181"},"nodeType":"YulFunctionCall","src":"10561:16:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10555:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"10593:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"10597:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10586:6:181"},"nodeType":"YulFunctionCall","src":"10586:13:181"},"nodeType":"YulExpressionStatement","src":"10586:13:181"},{"nodeType":"YulAssignment","src":"10608:9:181","value":{"name":"_1","nodeType":"YulIdentifier","src":"10615:2:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"10608:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"10467:3:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10472:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10480:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10491:3:181","type":""}],"src":"10352:271:181"},{"body":{"nodeType":"YulBlock","src":"10802:161:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10819:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10830:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10812:6:181"},"nodeType":"YulFunctionCall","src":"10812:21:181"},"nodeType":"YulExpressionStatement","src":"10812:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10853:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10864:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10849:3:181"},"nodeType":"YulFunctionCall","src":"10849:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10869:2:181","type":"","value":"11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10842:6:181"},"nodeType":"YulFunctionCall","src":"10842:30:181"},"nodeType":"YulExpressionStatement","src":"10842:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10892:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10903:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10888:3:181"},"nodeType":"YulFunctionCall","src":"10888:18:181"},{"hexValue":"21736861726564526f6f74","kind":"string","nodeType":"YulLiteral","src":"10908:13:181","type":"","value":"!sharedRoot"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10881:6:181"},"nodeType":"YulFunctionCall","src":"10881:41:181"},"nodeType":"YulExpressionStatement","src":"10881:41:181"},{"nodeType":"YulAssignment","src":"10931:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10943:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10954:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10939:3:181"},"nodeType":"YulFunctionCall","src":"10939:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10931:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10779:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10793:4:181","type":""}],"src":"10628:335:181"},{"body":{"nodeType":"YulBlock","src":"11142:171:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11159:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11170:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11152:6:181"},"nodeType":"YulFunctionCall","src":"11152:21:181"},"nodeType":"YulExpressionStatement","src":"11152:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11193:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11204:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11189:3:181"},"nodeType":"YulFunctionCall","src":"11189:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11209:2:181","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11182:6:181"},"nodeType":"YulFunctionCall","src":"11182:30:181"},"nodeType":"YulExpressionStatement","src":"11182:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11232:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11243:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11228:3:181"},"nodeType":"YulFunctionCall","src":"11228:18:181"},{"hexValue":"616767726567617465526f6f742021657869737473","kind":"string","nodeType":"YulLiteral","src":"11248:23:181","type":"","value":"aggregateRoot !exists"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11221:6:181"},"nodeType":"YulFunctionCall","src":"11221:51:181"},"nodeType":"YulExpressionStatement","src":"11221:51:181"},{"nodeType":"YulAssignment","src":"11281:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11293:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11304:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11289:3:181"},"nodeType":"YulFunctionCall","src":"11289:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11281:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11119:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11133:4:181","type":""}],"src":"10968:345:181"},{"body":{"nodeType":"YulBlock","src":"11396:199:181","statements":[{"body":{"nodeType":"YulBlock","src":"11442:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11451:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11454:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11444:6:181"},"nodeType":"YulFunctionCall","src":"11444:12:181"},"nodeType":"YulExpressionStatement","src":"11444:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11417:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"11426:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11413:3:181"},"nodeType":"YulFunctionCall","src":"11413:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"11438:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11409:3:181"},"nodeType":"YulFunctionCall","src":"11409:32:181"},"nodeType":"YulIf","src":"11406:52:181"},{"nodeType":"YulVariableDeclaration","src":"11467:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11486:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11480:5:181"},"nodeType":"YulFunctionCall","src":"11480:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11471:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"11549:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11558:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11561:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11551:6:181"},"nodeType":"YulFunctionCall","src":"11551:12:181"},"nodeType":"YulExpressionStatement","src":"11551:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11518:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11539:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11532:6:181"},"nodeType":"YulFunctionCall","src":"11532:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11525:6:181"},"nodeType":"YulFunctionCall","src":"11525:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"11515:2:181"},"nodeType":"YulFunctionCall","src":"11515:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11508:6:181"},"nodeType":"YulFunctionCall","src":"11508:40:181"},"nodeType":"YulIf","src":"11505:60:181"},{"nodeType":"YulAssignment","src":"11574:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"11584:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11574:6:181"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11362:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11373:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11385:6:181","type":""}],"src":"11318:277:181"},{"body":{"nodeType":"YulBlock","src":"11774:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11791:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11802:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11784:6:181"},"nodeType":"YulFunctionCall","src":"11784:21:181"},"nodeType":"YulExpressionStatement","src":"11784:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11825:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11836:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11821:3:181"},"nodeType":"YulFunctionCall","src":"11821:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11841:1:181","type":"","value":"8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11814:6:181"},"nodeType":"YulFunctionCall","src":"11814:29:181"},"nodeType":"YulExpressionStatement","src":"11814:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11863:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11874:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11859:3:181"},"nodeType":"YulFunctionCall","src":"11859:18:181"},{"hexValue":"2177617463686572","kind":"string","nodeType":"YulLiteral","src":"11879:10:181","type":"","value":"!watcher"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11852:6:181"},"nodeType":"YulFunctionCall","src":"11852:38:181"},"nodeType":"YulExpressionStatement","src":"11852:38:181"},{"nodeType":"YulAssignment","src":"11899:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11911:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11922:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11907:3:181"},"nodeType":"YulFunctionCall","src":"11907:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11899:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11751:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11765:4:181","type":""}],"src":"11600:331:181"},{"body":{"nodeType":"YulBlock","src":"11985:79:181","statements":[{"nodeType":"YulAssignment","src":"11995:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"12007:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"12010:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12003:3:181"},"nodeType":"YulFunctionCall","src":"12003:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"11995:4:181"}]},{"body":{"nodeType":"YulBlock","src":"12036:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"12038:16:181"},"nodeType":"YulFunctionCall","src":"12038:18:181"},"nodeType":"YulExpressionStatement","src":"12038:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"12027:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"12033:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12024:2:181"},"nodeType":"YulFunctionCall","src":"12024:11:181"},"nodeType":"YulIf","src":"12021:37:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11967:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"11970:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"11976:4:181","type":""}],"src":"11936:128:181"},{"body":{"nodeType":"YulBlock","src":"12243:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12260:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12271:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12253:6:181"},"nodeType":"YulFunctionCall","src":"12253:21:181"},"nodeType":"YulExpressionStatement","src":"12253:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12294:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12305:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12290:3:181"},"nodeType":"YulFunctionCall","src":"12290:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12310:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12283:6:181"},"nodeType":"YulFunctionCall","src":"12283:30:181"},"nodeType":"YulExpressionStatement","src":"12283:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12333:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12344:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12329:3:181"},"nodeType":"YulFunctionCall","src":"12329:18:181"},{"hexValue":"616c72656164792077617463686572206d616e61676572","kind":"string","nodeType":"YulLiteral","src":"12349:25:181","type":"","value":"already watcher manager"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12322:6:181"},"nodeType":"YulFunctionCall","src":"12322:53:181"},"nodeType":"YulExpressionStatement","src":"12322:53:181"},{"nodeType":"YulAssignment","src":"12384:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12396:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12407:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12392:3:181"},"nodeType":"YulFunctionCall","src":"12392:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12384:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12220:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12234:4:181","type":""}],"src":"12069:347:181"},{"body":{"nodeType":"YulBlock","src":"12595:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12612:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12623:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12605:6:181"},"nodeType":"YulFunctionCall","src":"12605:21:181"},"nodeType":"YulExpressionStatement","src":"12605:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12646:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12657:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12642:3:181"},"nodeType":"YulFunctionCall","src":"12642:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12662:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12635:6:181"},"nodeType":"YulFunctionCall","src":"12635:30:181"},"nodeType":"YulExpressionStatement","src":"12635:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12685:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12696:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12681:3:181"},"nodeType":"YulFunctionCall","src":"12681:18:181"},{"hexValue":"21616c6c6f776c6973746564","kind":"string","nodeType":"YulLiteral","src":"12701:14:181","type":"","value":"!allowlisted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12674:6:181"},"nodeType":"YulFunctionCall","src":"12674:42:181"},"nodeType":"YulExpressionStatement","src":"12674:42:181"},{"nodeType":"YulAssignment","src":"12725:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12737:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12748:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12733:3:181"},"nodeType":"YulFunctionCall","src":"12733:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12725:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12572:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12586:4:181","type":""}],"src":"12421:336:181"},{"body":{"nodeType":"YulBlock","src":"12808:155:181","statements":[{"nodeType":"YulVariableDeclaration","src":"12818:20:181","value":{"kind":"number","nodeType":"YulLiteral","src":"12828:10:181","type":"","value":"0xffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12822:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12847:29:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12866:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12873:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12862:3:181"},"nodeType":"YulFunctionCall","src":"12862:14:181"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"12851:7:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"12904:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"12906:16:181"},"nodeType":"YulFunctionCall","src":"12906:18:181"},"nodeType":"YulExpressionStatement","src":"12906:18:181"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"12891:7:181"},{"name":"_1","nodeType":"YulIdentifier","src":"12900:2:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"12888:2:181"},"nodeType":"YulFunctionCall","src":"12888:15:181"},"nodeType":"YulIf","src":"12885:41:181"},{"nodeType":"YulAssignment","src":"12935:22:181","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"12946:7:181"},{"kind":"number","nodeType":"YulLiteral","src":"12955:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12942:3:181"},"nodeType":"YulFunctionCall","src":"12942:15:181"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"12935:3:181"}]}]},"name":"increment_t_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"12790:5:181","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"12800:3:181","type":""}],"src":"12762:201:181"},{"body":{"nodeType":"YulBlock","src":"13066:147:181","statements":[{"body":{"nodeType":"YulBlock","src":"13112:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13121:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13124:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13114:6:181"},"nodeType":"YulFunctionCall","src":"13114:12:181"},"nodeType":"YulExpressionStatement","src":"13114:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13087:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"13096:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13083:3:181"},"nodeType":"YulFunctionCall","src":"13083:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"13108:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13079:3:181"},"nodeType":"YulFunctionCall","src":"13079:32:181"},"nodeType":"YulIf","src":"13076:52:181"},{"nodeType":"YulAssignment","src":"13137:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13153:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13147:5:181"},"nodeType":"YulFunctionCall","src":"13147:16:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13137:6:181"}]},{"nodeType":"YulAssignment","src":"13172:35:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13192:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13203:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13188:3:181"},"nodeType":"YulFunctionCall","src":"13188:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13182:5:181"},"nodeType":"YulFunctionCall","src":"13182:25:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13172:6:181"}]}]},"name":"abi_decode_tuple_t_bytes32t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13024:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13035:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13047:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13055:6:181","type":""}],"src":"12968:245:181"},{"body":{"nodeType":"YulBlock","src":"13421:229:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13438:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"13449:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13431:6:181"},"nodeType":"YulFunctionCall","src":"13431:25:181"},"nodeType":"YulExpressionStatement","src":"13431:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13476:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13487:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13472:3:181"},"nodeType":"YulFunctionCall","src":"13472:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"13492:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13465:6:181"},"nodeType":"YulFunctionCall","src":"13465:34:181"},"nodeType":"YulExpressionStatement","src":"13465:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13519:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13530:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13515:3:181"},"nodeType":"YulFunctionCall","src":"13515:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"13535:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13508:6:181"},"nodeType":"YulFunctionCall","src":"13508:34:181"},"nodeType":"YulExpressionStatement","src":"13508:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13562:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13573:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13558:3:181"},"nodeType":"YulFunctionCall","src":"13558:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13578:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13551:6:181"},"nodeType":"YulFunctionCall","src":"13551:31:181"},"nodeType":"YulExpressionStatement","src":"13551:31:181"},{"nodeType":"YulAssignment","src":"13591:53:181","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"13616:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13628:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13639:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13624:3:181"},"nodeType":"YulFunctionCall","src":"13624:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"13599:16:181"},"nodeType":"YulFunctionCall","src":"13599:45:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13591:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13366:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13377:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13385:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13393:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13401:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13412:4:181","type":""}],"src":"13218:432:181"},{"body":{"nodeType":"YulBlock","src":"13829:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13846:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13857:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13839:6:181"},"nodeType":"YulFunctionCall","src":"13839:21:181"},"nodeType":"YulExpressionStatement","src":"13839:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13880:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13891:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13876:3:181"},"nodeType":"YulFunctionCall","src":"13876:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"13896:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13869:6:181"},"nodeType":"YulFunctionCall","src":"13869:30:181"},"nodeType":"YulExpressionStatement","src":"13869:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13919:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13930:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13915:3:181"},"nodeType":"YulFunctionCall","src":"13915:18:181"},{"hexValue":"5061757361626c653a20706175736564","kind":"string","nodeType":"YulLiteral","src":"13935:18:181","type":"","value":"Pausable: paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13908:6:181"},"nodeType":"YulFunctionCall","src":"13908:46:181"},"nodeType":"YulExpressionStatement","src":"13908:46:181"},{"nodeType":"YulAssignment","src":"13963:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13975:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13986:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13971:3:181"},"nodeType":"YulFunctionCall","src":"13971:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13963:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13806:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13820:4:181","type":""}],"src":"13655:340:181"},{"body":{"nodeType":"YulBlock","src":"14174:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14191:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14202:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14184:6:181"},"nodeType":"YulFunctionCall","src":"14184:21:181"},"nodeType":"YulExpressionStatement","src":"14184:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14225:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14236:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14221:3:181"},"nodeType":"YulFunctionCall","src":"14221:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14241:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14214:6:181"},"nodeType":"YulFunctionCall","src":"14214:30:181"},"nodeType":"YulExpressionStatement","src":"14214:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14264:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14275:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14260:3:181"},"nodeType":"YulFunctionCall","src":"14260:18:181"},{"hexValue":"2164617461206c656e677468","kind":"string","nodeType":"YulLiteral","src":"14280:14:181","type":"","value":"!data length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14253:6:181"},"nodeType":"YulFunctionCall","src":"14253:42:181"},"nodeType":"YulExpressionStatement","src":"14253:42:181"},{"nodeType":"YulAssignment","src":"14304:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14316:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14327:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14312:3:181"},"nodeType":"YulFunctionCall","src":"14312:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14304:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14151:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14165:4:181","type":""}],"src":"14000:336:181"},{"body":{"nodeType":"YulBlock","src":"14389:134:181","statements":[{"nodeType":"YulVariableDeclaration","src":"14399:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14417:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"14422:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14413:3:181"},"nodeType":"YulFunctionCall","src":"14413:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"14426:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14409:3:181"},"nodeType":"YulFunctionCall","src":"14409:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14403:2:181","type":""}]},{"nodeType":"YulAssignment","src":"14437:34:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14452:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14455:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14448:3:181"},"nodeType":"YulFunctionCall","src":"14448:10:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"14464:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14467:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14460:3:181"},"nodeType":"YulFunctionCall","src":"14460:10:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14444:3:181"},"nodeType":"YulFunctionCall","src":"14444:27:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"14437:3:181"}]},{"body":{"nodeType":"YulBlock","src":"14495:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14497:16:181"},"nodeType":"YulFunctionCall","src":"14497:18:181"},"nodeType":"YulExpressionStatement","src":"14497:18:181"}]},"condition":{"arguments":[{"name":"sum","nodeType":"YulIdentifier","src":"14486:3:181"},{"name":"_1","nodeType":"YulIdentifier","src":"14491:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14483:2:181"},"nodeType":"YulFunctionCall","src":"14483:11:181"},"nodeType":"YulIf","src":"14480:37:181"}]},"name":"checked_add_t_uint160","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"14372:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"14375:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"14381:3:181","type":""}],"src":"14341:182:181"},{"body":{"nodeType":"YulBlock","src":"14647:98:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14664:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14675:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14657:6:181"},"nodeType":"YulFunctionCall","src":"14657:21:181"},"nodeType":"YulExpressionStatement","src":"14657:21:181"},{"nodeType":"YulAssignment","src":"14687:52:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14712:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14724:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14735:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14720:3:181"},"nodeType":"YulFunctionCall","src":"14720:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"14695:16:181"},"nodeType":"YulFunctionCall","src":"14695:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14687:4:181"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14616:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14627:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14638:4:181","type":""}],"src":"14528:217:181"},{"body":{"nodeType":"YulBlock","src":"14924:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14941:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14952:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14934:6:181"},"nodeType":"YulFunctionCall","src":"14934:21:181"},"nodeType":"YulExpressionStatement","src":"14934:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14975:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14986:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14971:3:181"},"nodeType":"YulFunctionCall","src":"14971:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14991:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14964:6:181"},"nodeType":"YulFunctionCall","src":"14964:30:181"},"nodeType":"YulExpressionStatement","src":"14964:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15014:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15025:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15010:3:181"},"nodeType":"YulFunctionCall","src":"15010:18:181"},{"hexValue":"5061757361626c653a206e6f7420706175736564","kind":"string","nodeType":"YulLiteral","src":"15030:22:181","type":"","value":"Pausable: not paused"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15003:6:181"},"nodeType":"YulFunctionCall","src":"15003:50:181"},"nodeType":"YulExpressionStatement","src":"15003:50:181"},{"nodeType":"YulAssignment","src":"15062:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15074:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15085:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15070:3:181"},"nodeType":"YulFunctionCall","src":"15070:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15062:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14901:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14915:4:181","type":""}],"src":"14750:344:181"},{"body":{"nodeType":"YulBlock","src":"15273:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15290:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15301:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15283:6:181"},"nodeType":"YulFunctionCall","src":"15283:21:181"},"nodeType":"YulExpressionStatement","src":"15283:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15324:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15335:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15320:3:181"},"nodeType":"YulFunctionCall","src":"15320:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15340:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15313:6:181"},"nodeType":"YulFunctionCall","src":"15313:30:181"},"nodeType":"YulExpressionStatement","src":"15313:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15363:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15374:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15359:3:181"},"nodeType":"YulFunctionCall","src":"15359:18:181"},{"hexValue":"216d6972726f72436f6e6e6563746f72","kind":"string","nodeType":"YulLiteral","src":"15379:18:181","type":"","value":"!mirrorConnector"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15352:6:181"},"nodeType":"YulFunctionCall","src":"15352:46:181"},"nodeType":"YulExpressionStatement","src":"15352:46:181"},{"nodeType":"YulAssignment","src":"15407:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15419:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15430:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15415:3:181"},"nodeType":"YulFunctionCall","src":"15415:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15407:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15250:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15264:4:181","type":""}],"src":"15099:340:181"},{"body":{"nodeType":"YulBlock","src":"15618:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15635:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15646:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15628:6:181"},"nodeType":"YulFunctionCall","src":"15628:21:181"},"nodeType":"YulExpressionStatement","src":"15628:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15669:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15680:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15665:3:181"},"nodeType":"YulFunctionCall","src":"15665:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"15685:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15658:6:181"},"nodeType":"YulFunctionCall","src":"15658:29:181"},"nodeType":"YulExpressionStatement","src":"15658:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15707:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15718:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15703:3:181"},"nodeType":"YulFunctionCall","src":"15703:18:181"},{"hexValue":"216c656e677468","kind":"string","nodeType":"YulLiteral","src":"15723:9:181","type":"","value":"!length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15696:6:181"},"nodeType":"YulFunctionCall","src":"15696:37:181"},"nodeType":"YulExpressionStatement","src":"15696:37:181"},{"nodeType":"YulAssignment","src":"15742:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15754:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"15765:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15750:3:181"},"nodeType":"YulFunctionCall","src":"15750:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15742:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15595:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15609:4:181","type":""}],"src":"15444:330:181"},{"body":{"nodeType":"YulBlock","src":"15873:203:181","statements":[{"nodeType":"YulVariableDeclaration","src":"15883:26:181","value":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"15903:5:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15897:5:181"},"nodeType":"YulFunctionCall","src":"15897:12:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"15887:6:181","type":""}]},{"nodeType":"YulAssignment","src":"15918:32:181","value":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"15937:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"15944:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15933:3:181"},"nodeType":"YulFunctionCall","src":"15933:16:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15927:5:181"},"nodeType":"YulFunctionCall","src":"15927:23:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"15918:5:181"}]},{"body":{"nodeType":"YulBlock","src":"15987:83:181","statements":[{"nodeType":"YulAssignment","src":"16001:59:181","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16014:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16029:1:181","type":"","value":"3"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16036:4:181","type":"","value":"0x20"},{"name":"length","nodeType":"YulIdentifier","src":"16042:6:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16032:3:181"},"nodeType":"YulFunctionCall","src":"16032:17:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16025:3:181"},"nodeType":"YulFunctionCall","src":"16025:25:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16056:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"16052:3:181"},"nodeType":"YulFunctionCall","src":"16052:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"16021:3:181"},"nodeType":"YulFunctionCall","src":"16021:38:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16010:3:181"},"nodeType":"YulFunctionCall","src":"16010:50:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"16001:5:181"}]}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"15965:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"15973:4:181","type":"","value":"0x20"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15962:2:181"},"nodeType":"YulFunctionCall","src":"15962:16:181"},"nodeType":"YulIf","src":"15959:111:181"}]},"name":"convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nodeType":"YulTypedName","src":"15853:5:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"15863:5:181","type":""}],"src":"15779:297:181"},{"body":{"nodeType":"YulBlock","src":"16255:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16272:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16283:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16265:6:181"},"nodeType":"YulFunctionCall","src":"16265:21:181"},"nodeType":"YulExpressionStatement","src":"16265:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16306:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16317:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16302:3:181"},"nodeType":"YulFunctionCall","src":"16302:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16322:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16295:6:181"},"nodeType":"YulFunctionCall","src":"16295:30:181"},"nodeType":"YulExpressionStatement","src":"16295:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16345:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16356:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16341:3:181"},"nodeType":"YulFunctionCall","src":"16341:18:181"},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","kind":"string","nodeType":"YulLiteral","src":"16361:33:181","type":"","value":"ReentrancyGuard: reentrant call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16334:6:181"},"nodeType":"YulFunctionCall","src":"16334:61:181"},"nodeType":"YulExpressionStatement","src":"16334:61:181"},{"nodeType":"YulAssignment","src":"16404:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16416:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16427:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16412:3:181"},"nodeType":"YulFunctionCall","src":"16412:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16404:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16232:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16246:4:181","type":""}],"src":"16081:355:181"},{"body":{"nodeType":"YulBlock","src":"16615:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16632:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16643:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16625:6:181"},"nodeType":"YulFunctionCall","src":"16625:21:181"},"nodeType":"YulExpressionStatement","src":"16625:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16666:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16677:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16662:3:181"},"nodeType":"YulFunctionCall","src":"16662:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"16682:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16655:6:181"},"nodeType":"YulFunctionCall","src":"16655:30:181"},"nodeType":"YulExpressionStatement","src":"16655:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16705:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16716:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16701:3:181"},"nodeType":"YulFunctionCall","src":"16701:18:181"},{"hexValue":"214d6573736167655374617475732e4e6f6e65","kind":"string","nodeType":"YulLiteral","src":"16721:21:181","type":"","value":"!MessageStatus.None"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16694:6:181"},"nodeType":"YulFunctionCall","src":"16694:49:181"},"nodeType":"YulExpressionStatement","src":"16694:49:181"},{"nodeType":"YulAssignment","src":"16752:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16764:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16775:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16760:3:181"},"nodeType":"YulFunctionCall","src":"16760:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16752:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16592:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16606:4:181","type":""}],"src":"16441:343:181"},{"body":{"nodeType":"YulBlock","src":"16963:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16980:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"16991:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16973:6:181"},"nodeType":"YulFunctionCall","src":"16973:21:181"},"nodeType":"YulExpressionStatement","src":"16973:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17014:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17025:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17010:3:181"},"nodeType":"YulFunctionCall","src":"17010:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17030:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17003:6:181"},"nodeType":"YulFunctionCall","src":"17003:30:181"},"nodeType":"YulExpressionStatement","src":"17003:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17053:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17064:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17049:3:181"},"nodeType":"YulFunctionCall","src":"17049:18:181"},{"hexValue":"696e76616c696420696e626f756e64526f6f74","kind":"string","nodeType":"YulLiteral","src":"17069:21:181","type":"","value":"invalid inboundRoot"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17042:6:181"},"nodeType":"YulFunctionCall","src":"17042:49:181"},"nodeType":"YulExpressionStatement","src":"17042:49:181"},{"nodeType":"YulAssignment","src":"17100:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17112:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17123:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17108:3:181"},"nodeType":"YulFunctionCall","src":"17108:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17100:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16940:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16954:4:181","type":""}],"src":"16789:343:181"},{"body":{"nodeType":"YulBlock","src":"17311:162:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17328:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17339:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17321:6:181"},"nodeType":"YulFunctionCall","src":"17321:21:181"},"nodeType":"YulExpressionStatement","src":"17321:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17362:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17373:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17358:3:181"},"nodeType":"YulFunctionCall","src":"17358:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17378:2:181","type":"","value":"12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17351:6:181"},"nodeType":"YulFunctionCall","src":"17351:30:181"},"nodeType":"YulExpressionStatement","src":"17351:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17401:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17412:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17397:3:181"},"nodeType":"YulFunctionCall","src":"17397:18:181"},{"hexValue":"2164657374696e6174696f6e","kind":"string","nodeType":"YulLiteral","src":"17417:14:181","type":"","value":"!destination"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17390:6:181"},"nodeType":"YulFunctionCall","src":"17390:42:181"},"nodeType":"YulExpressionStatement","src":"17390:42:181"},{"nodeType":"YulAssignment","src":"17441:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17453:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17464:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17449:3:181"},"nodeType":"YulFunctionCall","src":"17449:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17441:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17288:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17302:4:181","type":""}],"src":"17137:336:181"},{"body":{"nodeType":"YulBlock","src":"17652:156:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17669:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17680:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17662:6:181"},"nodeType":"YulFunctionCall","src":"17662:21:181"},"nodeType":"YulExpressionStatement","src":"17662:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17703:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17714:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17699:3:181"},"nodeType":"YulFunctionCall","src":"17699:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"17719:1:181","type":"","value":"7"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17692:6:181"},"nodeType":"YulFunctionCall","src":"17692:29:181"},"nodeType":"YulExpressionStatement","src":"17692:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17741:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17752:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17737:3:181"},"nodeType":"YulFunctionCall","src":"17737:18:181"},{"hexValue":"2170726f76656e","kind":"string","nodeType":"YulLiteral","src":"17757:9:181","type":"","value":"!proven"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17730:6:181"},"nodeType":"YulFunctionCall","src":"17730:37:181"},"nodeType":"YulExpressionStatement","src":"17730:37:181"},{"nodeType":"YulAssignment","src":"17776:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17788:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"17799:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17784:3:181"},"nodeType":"YulFunctionCall","src":"17784:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17776:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17629:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17643:4:181","type":""}],"src":"17478:330:181"},{"body":{"nodeType":"YulBlock","src":"17987:153:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18004:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18015:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17997:6:181"},"nodeType":"YulFunctionCall","src":"17997:21:181"},"nodeType":"YulExpressionStatement","src":"17997:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18038:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18049:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18034:3:181"},"nodeType":"YulFunctionCall","src":"18034:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18054:1:181","type":"","value":"4"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18027:6:181"},"nodeType":"YulFunctionCall","src":"18027:29:181"},"nodeType":"YulExpressionStatement","src":"18027:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18076:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18087:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18072:3:181"},"nodeType":"YulFunctionCall","src":"18072:18:181"},{"hexValue":"21676173","kind":"string","nodeType":"YulLiteral","src":"18092:6:181","type":"","value":"!gas"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18065:6:181"},"nodeType":"YulFunctionCall","src":"18065:34:181"},"nodeType":"YulExpressionStatement","src":"18065:34:181"},{"nodeType":"YulAssignment","src":"18108:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18120:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18131:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18116:3:181"},"nodeType":"YulFunctionCall","src":"18116:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18108:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17964:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17978:4:181","type":""}],"src":"17813:327:181"},{"body":{"nodeType":"YulBlock","src":"18344:276:181","statements":[{"nodeType":"YulVariableDeclaration","src":"18354:20:181","value":{"kind":"number","nodeType":"YulLiteral","src":"18364:10:181","type":"","value":"0xffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18358:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18390:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18405:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"18413:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18401:3:181"},"nodeType":"YulFunctionCall","src":"18401:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18383:6:181"},"nodeType":"YulFunctionCall","src":"18383:34:181"},"nodeType":"YulExpressionStatement","src":"18383:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18437:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18448:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18433:3:181"},"nodeType":"YulFunctionCall","src":"18433:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"18457:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"18465:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18453:3:181"},"nodeType":"YulFunctionCall","src":"18453:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18426:6:181"},"nodeType":"YulFunctionCall","src":"18426:43:181"},"nodeType":"YulExpressionStatement","src":"18426:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18489:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18500:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18485:3:181"},"nodeType":"YulFunctionCall","src":"18485:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"18505:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18478:6:181"},"nodeType":"YulFunctionCall","src":"18478:34:181"},"nodeType":"YulExpressionStatement","src":"18478:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18532:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18543:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18528:3:181"},"nodeType":"YulFunctionCall","src":"18528:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18548:3:181","type":"","value":"128"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18521:6:181"},"nodeType":"YulFunctionCall","src":"18521:31:181"},"nodeType":"YulExpressionStatement","src":"18521:31:181"},{"nodeType":"YulAssignment","src":"18561:53:181","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"18586:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18598:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18609:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18594:3:181"},"nodeType":"YulFunctionCall","src":"18594:19:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"18569:16:181"},"nodeType":"YulFunctionCall","src":"18569:45:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18561:4:181"}]}]},"name":"abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18289:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"18300:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"18308:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18316:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18324:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18335:4:181","type":""}],"src":"18145:475:181"},{"body":{"nodeType":"YulBlock","src":"18794:200:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18811:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"18822:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18804:6:181"},"nodeType":"YulFunctionCall","src":"18804:25:181"},"nodeType":"YulExpressionStatement","src":"18804:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18849:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18860:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18845:3:181"},"nodeType":"YulFunctionCall","src":"18845:18:181"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"18879:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"18872:6:181"},"nodeType":"YulFunctionCall","src":"18872:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"18865:6:181"},"nodeType":"YulFunctionCall","src":"18865:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18838:6:181"},"nodeType":"YulFunctionCall","src":"18838:50:181"},"nodeType":"YulExpressionStatement","src":"18838:50:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18908:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18919:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18904:3:181"},"nodeType":"YulFunctionCall","src":"18904:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"18924:2:181","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18897:6:181"},"nodeType":"YulFunctionCall","src":"18897:30:181"},"nodeType":"YulExpressionStatement","src":"18897:30:181"},{"nodeType":"YulAssignment","src":"18936:52:181","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"18961:6:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18973:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"18984:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18969:3:181"},"nodeType":"YulFunctionCall","src":"18969:18:181"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"18944:16:181"},"nodeType":"YulFunctionCall","src":"18944:44:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18936:4:181"}]}]},"name":"abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18747:9:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"18758:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18766:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18774:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18785:4:181","type":""}],"src":"18625:369:181"},{"body":{"nodeType":"YulBlock","src":"19128:175:181","statements":[{"nodeType":"YulAssignment","src":"19138:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19150:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19161:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19146:3:181"},"nodeType":"YulFunctionCall","src":"19146:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19138:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"19173:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19191:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"19196:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"19187:3:181"},"nodeType":"YulFunctionCall","src":"19187:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"19200:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19183:3:181"},"nodeType":"YulFunctionCall","src":"19183:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"19177:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19218:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19233:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"19241:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19229:3:181"},"nodeType":"YulFunctionCall","src":"19229:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19211:6:181"},"nodeType":"YulFunctionCall","src":"19211:34:181"},"nodeType":"YulExpressionStatement","src":"19211:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19265:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19276:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19261:3:181"},"nodeType":"YulFunctionCall","src":"19261:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"19285:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"19293:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19281:3:181"},"nodeType":"YulFunctionCall","src":"19281:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19254:6:181"},"nodeType":"YulFunctionCall","src":"19254:43:181"},"nodeType":"YulExpressionStatement","src":"19254:43:181"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19089:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19100:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19108:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19119:4:181","type":""}],"src":"18999:304:181"},{"body":{"nodeType":"YulBlock","src":"19482:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19499:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19510:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19492:6:181"},"nodeType":"YulFunctionCall","src":"19492:21:181"},"nodeType":"YulExpressionStatement","src":"19492:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19533:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19544:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19529:3:181"},"nodeType":"YulFunctionCall","src":"19529:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"19549:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19522:6:181"},"nodeType":"YulFunctionCall","src":"19522:30:181"},"nodeType":"YulExpressionStatement","src":"19522:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19572:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19583:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19568:3:181"},"nodeType":"YulFunctionCall","src":"19568:18:181"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","kind":"string","nodeType":"YulLiteral","src":"19588:31:181","type":"","value":"Address: insufficient balance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19561:6:181"},"nodeType":"YulFunctionCall","src":"19561:59:181"},"nodeType":"YulExpressionStatement","src":"19561:59:181"},{"nodeType":"YulAssignment","src":"19629:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19641:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"19652:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19637:3:181"},"nodeType":"YulFunctionCall","src":"19637:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19629:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19459:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19473:4:181","type":""}],"src":"19308:353:181"},{"body":{"nodeType":"YulBlock","src":"19857:14:181","statements":[{"nodeType":"YulAssignment","src":"19859:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"19866:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"19859:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"19841:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"19849:3:181","type":""}],"src":"19666:205:181"},{"body":{"nodeType":"YulBlock","src":"20050:248:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20067:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20078:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20060:6:181"},"nodeType":"YulFunctionCall","src":"20060:21:181"},"nodeType":"YulExpressionStatement","src":"20060:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20101:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20112:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20097:3:181"},"nodeType":"YulFunctionCall","src":"20097:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20117:2:181","type":"","value":"58"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20090:6:181"},"nodeType":"YulFunctionCall","src":"20090:30:181"},"nodeType":"YulExpressionStatement","src":"20090:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20140:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20151:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20136:3:181"},"nodeType":"YulFunctionCall","src":"20136:18:181"},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c2072","kind":"string","nodeType":"YulLiteral","src":"20156:34:181","type":"","value":"Address: unable to send value, r"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20129:6:181"},"nodeType":"YulFunctionCall","src":"20129:62:181"},"nodeType":"YulExpressionStatement","src":"20129:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20211:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20222:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20207:3:181"},"nodeType":"YulFunctionCall","src":"20207:18:181"},{"hexValue":"6563697069656e74206d61792068617665207265766572746564","kind":"string","nodeType":"YulLiteral","src":"20227:28:181","type":"","value":"ecipient may have reverted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20200:6:181"},"nodeType":"YulFunctionCall","src":"20200:56:181"},"nodeType":"YulExpressionStatement","src":"20200:56:181"},{"nodeType":"YulAssignment","src":"20265:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20277:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20288:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20273:3:181"},"nodeType":"YulFunctionCall","src":"20273:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20265:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20027:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20041:4:181","type":""}],"src":"19876:422:181"},{"body":{"nodeType":"YulBlock","src":"20477:165:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20494:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20505:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20487:6:181"},"nodeType":"YulFunctionCall","src":"20487:21:181"},"nodeType":"YulExpressionStatement","src":"20487:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20528:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20539:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20524:3:181"},"nodeType":"YulFunctionCall","src":"20524:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"20544:2:181","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20517:6:181"},"nodeType":"YulFunctionCall","src":"20517:30:181"},"nodeType":"YulExpressionStatement","src":"20517:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20567:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20578:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20563:3:181"},"nodeType":"YulFunctionCall","src":"20563:18:181"},{"hexValue":"216e65772072617465206c696d6974","kind":"string","nodeType":"YulLiteral","src":"20583:17:181","type":"","value":"!new rate limit"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20556:6:181"},"nodeType":"YulFunctionCall","src":"20556:45:181"},"nodeType":"YulExpressionStatement","src":"20556:45:181"},{"nodeType":"YulAssignment","src":"20610:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20622:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20633:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20618:3:181"},"nodeType":"YulFunctionCall","src":"20618:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20610:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20454:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20468:4:181","type":""}],"src":"20303:339:181"},{"body":{"nodeType":"YulBlock","src":"20776:145:181","statements":[{"nodeType":"YulAssignment","src":"20786:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20798:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20809:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20794:3:181"},"nodeType":"YulFunctionCall","src":"20794:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20786:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20828:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"20843:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20859:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"20864:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"20855:3:181"},"nodeType":"YulFunctionCall","src":"20855:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"20868:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20851:3:181"},"nodeType":"YulFunctionCall","src":"20851:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20839:3:181"},"nodeType":"YulFunctionCall","src":"20839:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20821:6:181"},"nodeType":"YulFunctionCall","src":"20821:51:181"},"nodeType":"YulExpressionStatement","src":"20821:51:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20892:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"20903:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20888:3:181"},"nodeType":"YulFunctionCall","src":"20888:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"20908:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20881:6:181"},"nodeType":"YulFunctionCall","src":"20881:34:181"},"nodeType":"YulExpressionStatement","src":"20881:34:181"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20737:9:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"20748:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"20756:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20767:4:181","type":""}],"src":"20647:274:181"},{"body":{"nodeType":"YulBlock","src":"21197:439:181","statements":[{"nodeType":"YulVariableDeclaration","src":"21207:30:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21221:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"21226:10:181","type":"","value":"0xffffffff"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21217:3:181"},"nodeType":"YulFunctionCall","src":"21217:20:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"21211:2:181","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21253:3:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21266:3:181","type":"","value":"224"},{"name":"value0","nodeType":"YulIdentifier","src":"21271:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21262:3:181"},"nodeType":"YulFunctionCall","src":"21262:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21280:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21258:3:181"},"nodeType":"YulFunctionCall","src":"21258:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21246:6:181"},"nodeType":"YulFunctionCall","src":"21246:38:181"},"nodeType":"YulExpressionStatement","src":"21246:38:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21304:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21309:1:181","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21300:3:181"},"nodeType":"YulFunctionCall","src":"21300:11:181"},{"name":"value1","nodeType":"YulIdentifier","src":"21313:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21293:6:181"},"nodeType":"YulFunctionCall","src":"21293:27:181"},"nodeType":"YulExpressionStatement","src":"21293:27:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21340:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21345:2:181","type":"","value":"36"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21336:3:181"},"nodeType":"YulFunctionCall","src":"21336:12:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21358:3:181","type":"","value":"224"},{"name":"value2","nodeType":"YulIdentifier","src":"21363:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21354:3:181"},"nodeType":"YulFunctionCall","src":"21354:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21372:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21350:3:181"},"nodeType":"YulFunctionCall","src":"21350:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21329:6:181"},"nodeType":"YulFunctionCall","src":"21329:47:181"},"nodeType":"YulExpressionStatement","src":"21329:47:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21396:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21401:2:181","type":"","value":"40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21392:3:181"},"nodeType":"YulFunctionCall","src":"21392:12:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21414:3:181","type":"","value":"224"},{"name":"value3","nodeType":"YulIdentifier","src":"21419:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21410:3:181"},"nodeType":"YulFunctionCall","src":"21410:16:181"},{"name":"_1","nodeType":"YulIdentifier","src":"21428:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21406:3:181"},"nodeType":"YulFunctionCall","src":"21406:25:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21385:6:181"},"nodeType":"YulFunctionCall","src":"21385:47:181"},"nodeType":"YulExpressionStatement","src":"21385:47:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21452:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21457:2:181","type":"","value":"44"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21448:3:181"},"nodeType":"YulFunctionCall","src":"21448:12:181"},{"name":"value4","nodeType":"YulIdentifier","src":"21462:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21441:6:181"},"nodeType":"YulFunctionCall","src":"21441:28:181"},"nodeType":"YulExpressionStatement","src":"21441:28:181"},{"nodeType":"YulVariableDeclaration","src":"21478:27:181","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"21498:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"21492:5:181"},"nodeType":"YulFunctionCall","src":"21492:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"21482:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"21553:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"21561:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21549:3:181"},"nodeType":"YulFunctionCall","src":"21549:17:181"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21572:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"21577:2:181","type":"","value":"76"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21568:3:181"},"nodeType":"YulFunctionCall","src":"21568:12:181"},{"name":"length","nodeType":"YulIdentifier","src":"21582:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"21514:34:181"},"nodeType":"YulFunctionCall","src":"21514:75:181"},"nodeType":"YulExpressionStatement","src":"21514:75:181"},{"nodeType":"YulAssignment","src":"21598:32:181","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"21613:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"21618:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21609:3:181"},"nodeType":"YulFunctionCall","src":"21609:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"21627:2:181","type":"","value":"76"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21605:3:181"},"nodeType":"YulFunctionCall","src":"21605:25:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"21598:3:181"}]}]},"name":"abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"21133:3:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"21138:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"21146:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"21154:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"21162:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21170:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"21178:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"21189:3:181","type":""}],"src":"20926:710:181"},{"body":{"nodeType":"YulBlock","src":"21815:164:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21832:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21843:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21825:6:181"},"nodeType":"YulFunctionCall","src":"21825:21:181"},"nodeType":"YulExpressionStatement","src":"21825:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21866:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21877:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21862:3:181"},"nodeType":"YulFunctionCall","src":"21862:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"21882:2:181","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21855:6:181"},"nodeType":"YulFunctionCall","src":"21855:30:181"},"nodeType":"YulExpressionStatement","src":"21855:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21905:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21916:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21901:3:181"},"nodeType":"YulFunctionCall","src":"21901:18:181"},{"hexValue":"6e657720726f6f7420656d707479","kind":"string","nodeType":"YulLiteral","src":"21921:16:181","type":"","value":"new root empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21894:6:181"},"nodeType":"YulFunctionCall","src":"21894:44:181"},"nodeType":"YulExpressionStatement","src":"21894:44:181"},{"nodeType":"YulAssignment","src":"21947:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21959:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"21970:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21955:3:181"},"nodeType":"YulFunctionCall","src":"21955:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21947:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21792:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21806:4:181","type":""}],"src":"21641:338:181"},{"body":{"nodeType":"YulBlock","src":"22158:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22175:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22186:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22168:6:181"},"nodeType":"YulFunctionCall","src":"22168:21:181"},"nodeType":"YulExpressionStatement","src":"22168:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22209:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22220:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22205:3:181"},"nodeType":"YulFunctionCall","src":"22205:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22225:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22198:6:181"},"nodeType":"YulFunctionCall","src":"22198:30:181"},"nodeType":"YulExpressionStatement","src":"22198:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22248:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22259:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22244:3:181"},"nodeType":"YulFunctionCall","src":"22244:18:181"},{"hexValue":"726f6f7420616c72656164792070656e64696e67","kind":"string","nodeType":"YulLiteral","src":"22264:22:181","type":"","value":"root already pending"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22237:6:181"},"nodeType":"YulFunctionCall","src":"22237:50:181"},"nodeType":"YulExpressionStatement","src":"22237:50:181"},{"nodeType":"YulAssignment","src":"22296:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22308:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22319:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22304:3:181"},"nodeType":"YulFunctionCall","src":"22304:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22296:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22135:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22149:4:181","type":""}],"src":"21984:344:181"},{"body":{"nodeType":"YulBlock","src":"22507:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22524:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22535:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22517:6:181"},"nodeType":"YulFunctionCall","src":"22517:21:181"},"nodeType":"YulExpressionStatement","src":"22517:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22558:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22569:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22554:3:181"},"nodeType":"YulFunctionCall","src":"22554:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22574:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22547:6:181"},"nodeType":"YulFunctionCall","src":"22547:30:181"},"nodeType":"YulExpressionStatement","src":"22547:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22597:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22608:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22593:3:181"},"nodeType":"YulFunctionCall","src":"22593:18:181"},{"hexValue":"726f6f7420616c72656164792070726f76656e","kind":"string","nodeType":"YulLiteral","src":"22613:21:181","type":"","value":"root already proven"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22586:6:181"},"nodeType":"YulFunctionCall","src":"22586:49:181"},"nodeType":"YulExpressionStatement","src":"22586:49:181"},{"nodeType":"YulAssignment","src":"22644:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22656:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22667:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22652:3:181"},"nodeType":"YulFunctionCall","src":"22652:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22644:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22484:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22498:4:181","type":""}],"src":"22333:343:181"},{"body":{"nodeType":"YulBlock","src":"22855:169:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22872:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22883:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22865:6:181"},"nodeType":"YulFunctionCall","src":"22865:21:181"},"nodeType":"YulExpressionStatement","src":"22865:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22906:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22917:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22902:3:181"},"nodeType":"YulFunctionCall","src":"22902:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"22922:2:181","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22895:6:181"},"nodeType":"YulFunctionCall","src":"22895:30:181"},"nodeType":"YulExpressionStatement","src":"22895:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22945:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"22956:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22941:3:181"},"nodeType":"YulFunctionCall","src":"22941:18:181"},{"hexValue":"616767726567617465526f6f7420656d707479","kind":"string","nodeType":"YulLiteral","src":"22961:21:181","type":"","value":"aggregateRoot empty"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22934:6:181"},"nodeType":"YulFunctionCall","src":"22934:49:181"},"nodeType":"YulExpressionStatement","src":"22934:49:181"},{"nodeType":"YulAssignment","src":"22992:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23004:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23015:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23000:3:181"},"nodeType":"YulFunctionCall","src":"23000:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22992:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22832:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22846:4:181","type":""}],"src":"22681:343:181"},{"body":{"nodeType":"YulBlock","src":"23203:170:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23220:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23231:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23213:6:181"},"nodeType":"YulFunctionCall","src":"23213:21:181"},"nodeType":"YulExpressionStatement","src":"23213:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23254:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23265:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23250:3:181"},"nodeType":"YulFunctionCall","src":"23250:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23270:2:181","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23243:6:181"},"nodeType":"YulFunctionCall","src":"23243:30:181"},"nodeType":"YulExpressionStatement","src":"23243:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23293:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23304:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23289:3:181"},"nodeType":"YulFunctionCall","src":"23289:18:181"},{"hexValue":"616767726567617465526f6f7420216578697374","kind":"string","nodeType":"YulLiteral","src":"23309:22:181","type":"","value":"aggregateRoot !exist"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23282:6:181"},"nodeType":"YulFunctionCall","src":"23282:50:181"},"nodeType":"YulExpressionStatement","src":"23282:50:181"},{"nodeType":"YulAssignment","src":"23341:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23353:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23364:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23349:3:181"},"nodeType":"YulFunctionCall","src":"23349:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23341:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23180:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23194:4:181","type":""}],"src":"23029:344:181"},{"body":{"nodeType":"YulBlock","src":"23552:173:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23569:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23580:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23562:6:181"},"nodeType":"YulFunctionCall","src":"23562:21:181"},"nodeType":"YulExpressionStatement","src":"23562:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23603:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23614:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23599:3:181"},"nodeType":"YulFunctionCall","src":"23599:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"23619:2:181","type":"","value":"23"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23592:6:181"},"nodeType":"YulFunctionCall","src":"23592:30:181"},"nodeType":"YulExpressionStatement","src":"23592:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23642:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23653:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23638:3:181"},"nodeType":"YulFunctionCall","src":"23638:18:181"},{"hexValue":"616767726567617465526f6f7420217665726966696564","kind":"string","nodeType":"YulLiteral","src":"23658:25:181","type":"","value":"aggregateRoot !verified"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23631:6:181"},"nodeType":"YulFunctionCall","src":"23631:53:181"},"nodeType":"YulExpressionStatement","src":"23631:53:181"},{"nodeType":"YulAssignment","src":"23693:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23705:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"23716:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23701:3:181"},"nodeType":"YulFunctionCall","src":"23701:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23693:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23529:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23543:4:181","type":""}],"src":"23378:347:181"},{"body":{"nodeType":"YulBlock","src":"23777:104:181","statements":[{"nodeType":"YulAssignment","src":"23787:39:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"23803:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"23806:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23799:3:181"},"nodeType":"YulFunctionCall","src":"23799:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"23817:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"23820:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23813:3:181"},"nodeType":"YulFunctionCall","src":"23813:12:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"23795:3:181"},"nodeType":"YulFunctionCall","src":"23795:31:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"23787:4:181"}]},{"body":{"nodeType":"YulBlock","src":"23853:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"23855:16:181"},"nodeType":"YulFunctionCall","src":"23855:18:181"},"nodeType":"YulExpressionStatement","src":"23855:18:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"23841:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"23847:4:181","type":"","value":"0xff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"23838:2:181"},"nodeType":"YulFunctionCall","src":"23838:14:181"},"nodeType":"YulIf","src":"23835:40:181"}]},"name":"checked_sub_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"23759:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"23762:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"23768:4:181","type":""}],"src":"23730:151:181"},{"body":{"nodeType":"YulBlock","src":"23936:175:181","statements":[{"nodeType":"YulVariableDeclaration","src":"23946:50:181","value":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"23973:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"23976:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23969:3:181"},"nodeType":"YulFunctionCall","src":"23969:12:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"23987:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"23990:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23983:3:181"},"nodeType":"YulFunctionCall","src":"23983:12:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"23965:3:181"},"nodeType":"YulFunctionCall","src":"23965:31:181"},"variables":[{"name":"product_raw","nodeType":"YulTypedName","src":"23950:11:181","type":""}]},{"nodeType":"YulAssignment","src":"24005:33:181","value":{"arguments":[{"name":"product_raw","nodeType":"YulIdentifier","src":"24020:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"24033:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24016:3:181"},"nodeType":"YulFunctionCall","src":"24016:22:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"24005:7:181"}]},{"body":{"nodeType":"YulBlock","src":"24083:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"24085:16:181"},"nodeType":"YulFunctionCall","src":"24085:18:181"},"nodeType":"YulExpressionStatement","src":"24085:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"24060:7:181"},{"name":"product_raw","nodeType":"YulIdentifier","src":"24069:11:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"24057:2:181"},"nodeType":"YulFunctionCall","src":"24057:24:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"24050:6:181"},"nodeType":"YulFunctionCall","src":"24050:32:181"},"nodeType":"YulIf","src":"24047:58:181"}]},"name":"checked_mul_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"23915:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"23918:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"23924:7:181","type":""}],"src":"23886:225:181"},{"body":{"nodeType":"YulBlock","src":"24299:269:181","statements":[{"nodeType":"YulAssignment","src":"24309:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24321:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24332:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24317:3:181"},"nodeType":"YulFunctionCall","src":"24317:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24309:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"24345:36:181","value":{"kind":"number","nodeType":"YulLiteral","src":"24355:26:181","type":"","value":"0xffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"24349:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24397:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"24412:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"24420:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24408:3:181"},"nodeType":"YulFunctionCall","src":"24408:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24390:6:181"},"nodeType":"YulFunctionCall","src":"24390:34:181"},"nodeType":"YulExpressionStatement","src":"24390:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24444:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24455:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24440:3:181"},"nodeType":"YulFunctionCall","src":"24440:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"24464:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"24472:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24460:3:181"},"nodeType":"YulFunctionCall","src":"24460:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24433:6:181"},"nodeType":"YulFunctionCall","src":"24433:43:181"},"nodeType":"YulExpressionStatement","src":"24433:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24496:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24507:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24492:3:181"},"nodeType":"YulFunctionCall","src":"24492:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"24512:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24485:6:181"},"nodeType":"YulFunctionCall","src":"24485:34:181"},"nodeType":"YulExpressionStatement","src":"24485:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24539:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24550:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24535:3:181"},"nodeType":"YulFunctionCall","src":"24535:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"24555:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24528:6:181"},"nodeType":"YulFunctionCall","src":"24528:34:181"},"nodeType":"YulExpressionStatement","src":"24528:34:181"}]},"name":"abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24244:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"24255:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"24263:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"24271:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"24279:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24290:4:181","type":""}],"src":"24116:452:181"},{"body":{"nodeType":"YulBlock","src":"24747:160:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24764:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24775:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24757:6:181"},"nodeType":"YulFunctionCall","src":"24757:21:181"},"nodeType":"YulExpressionStatement","src":"24757:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24798:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24809:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24794:3:181"},"nodeType":"YulFunctionCall","src":"24794:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"24814:2:181","type":"","value":"10"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24787:6:181"},"nodeType":"YulFunctionCall","src":"24787:30:181"},"nodeType":"YulExpressionStatement","src":"24787:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24837:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24848:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24833:3:181"},"nodeType":"YulFunctionCall","src":"24833:18:181"},{"hexValue":"217472756e6361746564","kind":"string","nodeType":"YulLiteral","src":"24853:12:181","type":"","value":"!truncated"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24826:6:181"},"nodeType":"YulFunctionCall","src":"24826:40:181"},"nodeType":"YulExpressionStatement","src":"24826:40:181"},{"nodeType":"YulAssignment","src":"24875:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24887:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"24898:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24883:3:181"},"nodeType":"YulFunctionCall","src":"24883:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24875:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24724:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24738:4:181","type":""}],"src":"24573:334:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_enum$_MessageStatus_$39534__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        if iszero(lt(value0, 3))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_array$_t_struct$_Proof_$39543_calldata_ptr_$dyn_calldata_ptrt_bytes32t_array$_t_bytes32_$32_calldata_ptrt_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 1120) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, shl(5, length)), 0x20), dataEnd) { revert(0, 0) }\n        value0 := add(_2, 0x20)\n        value1 := length\n        value2 := calldataload(add(headStart, 0x20))\n        let _3 := add(headStart, 1088)\n        if gt(_3, dataEnd) { revert(0, 0) }\n        value3 := add(headStart, 64)\n        value4 := calldataload(_3)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_contract$_IOutbox_$47864__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_MerkleTreeManager_$38317__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_contract$_WatcherManager_$39005__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n    }\n    function abi_decode_tuple_t_uint32t_bytes32t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_uint32(headStart)\n        value1 := calldataload(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value2 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_bytes(value1, add(headStart, 64))\n    }\n    function abi_encode_tuple_t_stringliteral_b8cc629caa23257f61850e63115419d371ca92e391a94f76d1e0e6696c99d0d2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!delayBlocks\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_a019f746f2f85806e8a34901d2befbbf1a2b7fd70df0cd0f498ec25e8412493c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"root already sent\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_bytes32__to_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, value0)\n        end := add(pos, 32)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 96)\n        let tail_1 := abi_encode_bytes(value0, add(headStart, 96))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_bytes(value1, tail_1)\n        mstore(add(headStart, 64), and(value2, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_94823938e2be2ac349c9e79d782231d0e3bda712662b369a6835220a437fb15e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!AMB\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr_t_address__to_t_bytes_memory_ptr_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        tail := abi_encode_bytes(value0, add(headStart, 64))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_f186a967e1684bdaf727498eef8189c7aae883c3038e988dd96fb0024a0eaacd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!proofs\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function access_calldata_tail_t_struct$_Proof_$39543_calldata_ptr(base_ref, ptr_to_tail) -> addr\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(1086)))) { revert(0, 0) }\n        addr := add(base_ref, rel_offset_of_tail)\n    }\n    function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function abi_encode_tuple_t_stringliteral_0eeddd6170758d1e0322c8f528b78ee7967967e86f3e763218bc93b38d3360c6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 11)\n        mstore(add(headStart, 64), \"!sharedRoot\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_86ffbfa8e5628fe5b0773e5f88c1b820486e744a3d0ac843f59af254e673731f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"aggregateRoot !exists\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_c325ff72a529ba0dacbf02bfaf4cc6cff2bb7d1e96503a4ff2c8f4de87d0ecff__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 8)\n        mstore(add(headStart, 64), \"!watcher\")\n        tail := add(headStart, 96)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_a3a9425683530322636fca7e04a67bcff5dcdeb4a97d5324210f7821db3c7088__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"already watcher manager\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c6db50b56b02b318e438e0894db9b7168c26eb9c3c7e6b8bb64ef49fe05ce0f4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!allowlisted\")\n        tail := add(headStart, 96)\n    }\n    function increment_t_uint32(value) -> ret\n    {\n        let _1 := 0xffffffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_decode_tuple_t_bytes32t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint256_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Pausable: paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_abfa6fb3ccf047761ac8ce83931004d0ae8b60afbf71730225c4a288d09a2b7b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!data length\")\n        tail := add(headStart, 96)\n    }\n    function checked_add_t_uint160(x, y) -> sum\n    {\n        let _1 := sub(shl(160, 1), 1)\n        sum := add(and(x, _1), and(y, _1))\n        if gt(sum, _1) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"Pausable: not paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7df9cf92a8429192439b1200ea707d05073f5966828ab65a83ca3a0ab628ad9d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"!mirrorConnector\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e6d4317401afed461b6930c87ddfcfb2c5bbd2f5b40cf51f83bf139b8be14ad1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!length\")\n        tail := add(headStart, 96)\n    }\n    function convert_bytes_to_fixedbytes_from_t_bytes_memory_ptr_to_t_bytes32(array) -> value\n    {\n        let length := mload(array)\n        value := mload(add(array, 0x20))\n        if lt(length, 0x20)\n        {\n            value := and(value, shl(shl(3, sub(0x20, length)), not(0)))\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4b850d511f060b63cf26dd703439d69893b6c27a759c62105abf0dd2dd7a96dd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"!MessageStatus.None\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_316dccea8d9a0d2ba26323e1ee555cc94b4336e850ac1178bd22e26f5d421a28__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"invalid inboundRoot\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_258fd6745c227a4677905abebc04caa285e5228178373083201db4a5fc925e77__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 12)\n        mstore(add(headStart, 64), \"!destination\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_56f03b618efc36c415b309e0c0673fddd2909ff208f890f4906859f69a249bab__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 7)\n        mstore(add(headStart, 64), \"!proven\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_98bdbe30f1832113b858d7fc815c7d4bbad0a717dbdaa15ac86f46b904bad479__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 4)\n        mstore(add(headStart, 64), \"!gas\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_bytes32_t_bool_t_bytes_memory_ptr__to_t_bytes32_t_bool_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n        mstore(add(headStart, 64), 96)\n        tail := abi_encode_bytes(value2, add(headStart, 96))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: insufficient balance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    { end := pos }\n    function abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 58)\n        mstore(add(headStart, 64), \"Address: unable to send value, r\")\n        mstore(add(headStart, 96), \"ecipient may have reverted\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_a1830d5e080e81f21a8db38985a76509c7a7a8e115de2a0847b4bf6b0b972d54__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"!new rate limit\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_packed_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__to_t_uint32_t_bytes32_t_uint32_t_uint32_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value5, value4, value3, value2, value1, value0) -> end\n    {\n        let _1 := shl(224, 0xffffffff)\n        mstore(pos, and(shl(224, value0), _1))\n        mstore(add(pos, 4), value1)\n        mstore(add(pos, 36), and(shl(224, value2), _1))\n        mstore(add(pos, 40), and(shl(224, value3), _1))\n        mstore(add(pos, 44), value4)\n        let length := mload(value5)\n        copy_memory_to_memory_with_cleanup(add(value5, 0x20), add(pos, 76), length)\n        end := add(add(pos, length), 76)\n    }\n    function abi_encode_tuple_t_stringliteral_8cdbc320612539ddf29a7a5476bdbbd8c4da5043d25e0fa407d723af6abfd7f8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"new root empty\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_29296445db4e15cced365842713152f0c4f06c78a6dae395e07287896730846d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"root already pending\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7327ac8e4d0b50e6e8a070cca6c39d817941f61f5ff877ebd8c5263fb66fdd1c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"root already proven\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_ae71b80a811939acf6e0ddca8ff53024cf3e7cc7907e3e117c1fb8440d502617__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"aggregateRoot empty\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_aa9923818f620e17a0e9034490f2d27d7962b96665fa7a4cb00ae8e40871ace9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"aggregateRoot !exist\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_8988406decd0e501dd16e4892d265ac1686d7da0e462b7264bc5d2721316fd89__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"aggregateRoot !verified\")\n        tail := add(headStart, 96)\n    }\n    function checked_sub_t_uint8(x, y) -> diff\n    {\n        diff := sub(and(x, 0xff), and(y, 0xff))\n        if gt(diff, 0xff) { panic_error_0x11() }\n    }\n    function checked_mul_t_uint8(x, y) -> product\n    {\n        let product_raw := mul(and(x, 0xff), and(y, 0xff))\n        product := and(product_raw, 0xff)\n        if iszero(eq(product, product_raw)) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_uint96_t_uint96_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_5d0cff77d956ef960915dcfad018b5689f8690171673b6a194d3f0bc84802728__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 10)\n        mstore(add(headStart, 64), \"!truncated\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"39039":[{"length":32,"start":1151},{"length":32,"start":1606},{"length":32,"start":5654},{"length":32,"start":7070}],"39042":[{"length":32,"start":2201},{"length":32,"start":3080}],"39045":[{"length":32,"start":1336}],"39048":[{"length":32,"start":682}],"39550":[{"length":32,"start":1802},{"length":32,"start":2656},{"length":32,"start":4000},{"length":32,"start":5748}],"39553":[{"length":32,"start":2275},{"length":32,"start":7359},{"length":32,"start":7500}],"39556":[{"length":32,"start":794},{"length":32,"start":7326}]},"linkReferences":{},"object":"60806040526004361061028c5760003560e01c80638456cb591161015a578063b95a2001116100c1578063d69f9d611161007a578063d69f9d6114610887578063d7d317b3146108bb578063d88beda2146108d1578063db1b765914610905578063e0fed01014610925578063fa31de011461094557600080fd5b8063b95a2001146107c2578063c5b350df146107f5578063cc3942831461080a578063d1851c921461082a578063d232c22014610848578063d2a3cc711461086757600080fd5b8063a01892a511610113578063a01892a5146106f8578063a792c29b1461072c578063ad9c0c2e1461074c578063b1f8100d14610762578063b2f8764314610782578063b697f531146107a257600080fd5b80638456cb59146106225780638d3638f4146106375780638da5cb5b1461066a57806398c9f2b9146106885780639d3117c7146106b85780639fa92f9d146106e557600080fd5b806352a9674b116101fe5780636159ada1116101b75780636159ada11461057257806365eaf11b146105a257806368742da6146105b75780636a42b8f8146105d75780636b04a933146105ed578063715018a61461060d57600080fd5b806352a9674b1461046d578063572386ca146104a1578063579c1618146104d15780635bd11efc146104e75780635c975abb146105075780635f61e3ec1461052657600080fd5b8063301f07c311610250578063301f07c31461039a5780633cf52ffb146103da5780633f4ba83a146103ef5780634ff746f614610404578063508a109b146104245780635190bc531461044457600080fd5b806314168416146102985780631eeaabea146102e657806325e3beda146103085780632bb1ae7c1461034a5780632bbd59ca1461035d57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102cc7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020015b60405180910390f35b3480156102f257600080fd5b50610306610301366004612d21565b610973565b005b34801561031457600080fd5b5061033c7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016102dd565b610306610358366004612ddd565b610a1d565b34801561036957600080fd5b5061038d610378366004612d21565b600f6020526000908152604090205460ff1681565b6040516102dd9190612e28565b3480156103a657600080fd5b506103ca6103b5366004612d21565b600a6020526000908152604090205460ff1681565b60405190151581526020016102dd565b3480156103e657600080fd5b5060025461033c565b3480156103fb57600080fd5b50610306610bc0565b34801561041057600080fd5b5061030661041f366004612ddd565b610bfd565b34801561043057600080fd5b5061030661043f366004612e50565b610ca3565b34801561045057600080fd5b506103ca61045f366004612eec565b6001600160a01b0316301490565b34801561047957600080fd5b506102cc7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ad57600080fd5b506103ca6104bc366004612d21565b600c6020526000908152604090205460ff1681565b3480156104dd57600080fd5b5061033c60055481565b3480156104f357600080fd5b50610306610502366004612eec565b610f65565b34801561051357600080fd5b50600354600160a01b900460ff166103ca565b34801561053257600080fd5b5061055a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102dd565b34801561057e57600080fd5b506103ca61058d366004612eec565b600d6020526000908152604090205460ff1681565b3480156105ae57600080fd5b5061033c610f9c565b3480156105c357600080fd5b506103066105d2366004612eec565b611025565b3480156105e357600080fd5b5062093a8061033c565b3480156105f957600080fd5b50610306610608366004612d21565b6110a2565b34801561061957600080fd5b5061030661116d565b34801561062e57600080fd5b50610306611198565b34801561064357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102cc565b34801561067657600080fd5b506000546001600160a01b031661055a565b34801561069457600080fd5b506103ca6106a3366004612d21565b600b6020526000908152604090205460ff1681565b3480156106c457600080fd5b5061033c6106d3366004612d21565b60096020526000908152604090205481565b3480156106f157600080fd5b503061055a565b34801561070457600080fd5b5061055a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561073857600080fd5b5060045461055a906001600160a01b031681565b34801561075857600080fd5b5061033c60085481565b34801561076e57600080fd5b5061030661077d366004612eec565b61124c565b34801561078e57600080fd5b5061030661079d366004612eec565b6112ea565b3480156107ae57600080fd5b506103066107bd366004612eec565b611366565b3480156107ce57600080fd5b506102cc6107dd366004612f2e565b600e6020526000908152604090205463ffffffff1681565b34801561080157600080fd5b506103066113e5565b34801561081657600080fd5b5060035461055a906001600160a01b031681565b34801561083657600080fd5b506001546001600160a01b031661055a565b34801561085457600080fd5b506000546001600160a01b0316156103ca565b34801561087357600080fd5b50610306610882366004612eec565b611455565b34801561089357600080fd5b5061055a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156108c757600080fd5b5061033c60065481565b3480156108dd57600080fd5b5061033c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561091157600080fd5b506103ca610920366004612eec565b61152c565b34801561093157600080fd5b50610306610940366004612d21565b611541565b34801561095157600080fd5b50610965610960366004612f49565b611575565b6040516102dd929190612ff0565b6000546001600160a01b0316331461099e576040516311a8a1bb60e31b815260040160405180910390fd5b60085481036109e35760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b610a25611744565b43600554600654610a36919061301f565b1115610a55576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae09190613032565b6000818152600c602052604090205490915060ff1615610b365760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b60448201526064016109da565b600081604051602001610b4b91815260200190565b6040516020818303038152906040529050610b668184611791565b6000828152600c602052604090819020805460ff19166001179055517fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507790610bb39083908690339061304b565b60405180910390a1505050565b6000546001600160a01b03163314610beb576040516311a8a1bb60e31b815260040160405180910390fd5b610bf361184f565b610bfb61189f565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c5e5760405162461bcd60e51b81526004016109da9060208082526004908201526310a0a6a160e11b604082015260600190565b610c67816118f4565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051610c98929190613089565b60405180910390a150565b610cab611744565b610cb361198d565b83610cea5760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b60448201526064016109da565b600085856000818110610cff57610cff6130b3565b9050602002810190610d1191906130c9565b610d1b90806130ea565b604051610d29929190613138565b604051809103902090506000610d908288886000818110610d4c57610d4c6130b3565b9050602002810190610d5e91906130c9565b60200189896000818110610d7457610d746130b3565b9050602002810190610d8691906130c9565b61042001356119e6565b9050610d9e81868686611a8d565b6000828152600f60205260409020805460ff1916600190811790915586905b818163ffffffff161015610ec45788888263ffffffff16818110610de357610de36130b3565b9050602002810190610df591906130c9565b610dff90806130ea565b604051610e0d929190613138565b604051809103902093506000610e62858b8b8563ffffffff16818110610e3557610e356130b3565b9050602002810190610e4791906130c9565b6020018c8c8663ffffffff16818110610d7457610d746130b3565b9050838114610ea15760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b60448201526064016109da565b506000848152600f60205260409020805460ff1916600190811790915501610dbd565b5060005b818163ffffffff161015610f5057610f4789898363ffffffff16818110610ef157610ef16130b3565b9050602002810190610f0391906130c9565b610f0d90806130ea565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8892505050565b50600101610ec8565b50505050610f5e6001600755565b5050505050565b6000546001600160a01b03163314610f90576040516311a8a1bb60e31b815260040160405180910390fd5b610f9981611e65565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110209190613032565b905090565b6000546001600160a01b03163314611050576040516311a8a1bb60e31b815260040160405180910390fd5b4761105b8282611ece565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d8260405161109691815260200190565b60405180910390a25050565b6000546001600160a01b031633146110cd576040516311a8a1bb60e31b815260040160405180910390fd5b6110d561184f565b600081815260096020526040812054900361112a5760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b60448201526064016109da565b60008181526009602052604080822091909155517ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73990610c989083815260200190565b6000546001600160a01b03163314610bfb576040516311a8a1bb60e31b815260040160405180910390fd5b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa1580156111e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112059190613148565b61123c5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b60448201526064016109da565b611244611744565b610bfb611fe7565b6000546001600160a01b03163314611277576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015611295575060025415155b156112b3576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036112e157604051634a2fb73f60e11b815260040160405180910390fd5b610f998161202a565b6000546001600160a01b03163314611315576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9101610c98565b6000546001600160a01b03163314611391576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879101610c98565b6001546001600160a01b03163314611410576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442611422919061316a565b11611440576040516324e0285f60e21b815260040160405180910390fd5b600154610bfb906001600160a01b0316612078565b6000546001600160a01b03163314611480576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b03908116908216036114de5760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e6167657200000000000000000060448201526064016109da565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001610c98565b60006001600160a01b03821633145b92915050565b6000546001600160a01b0316331461156c576040516311a8a1bb60e31b815260040160405180910390fd5b610f99816120dd565b336000908152600d602052604081205460609060ff166115c65760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b60448201526064016109da565b63ffffffff8086166000908152600e60205260408120805491929190911690826115ef8361317d565b91906101000a81548163ffffffff021916908363ffffffff1602179055509050600061164e7f0000000000000000000000000000000000000000000000000000000000000000611645336001600160a01b031690565b848a8a8a61215b565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af11580156116c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e891906131a0565b90925090507f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f8361171a60018461316a565b848760405161172c94939291906131c4565b60405180910390a15090989197509095505050505050565b600354600160a01b900460ff1615610bfb5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016109da565b8051156117cf5760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b60448201526064016109da565b6117dc61800060086131f3565b6001600160a01b03166362f84b24836040518263ffffffff1660e01b8152600401611807919061321a565b6020604051808303816000875af1158015611826573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184a9190613032565b505050565b600354600160a01b900460ff16610bfb5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016109da565b6118a761184f565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6003546001600160a01b031633146119415760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b60448201526064016109da565b805160201461197c5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b60448201526064016109da565b610f996119888261322d565b612193565b6002600754036119df5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109da565b6002600755565b6000806000858152600f602052604090205460ff166002811115611a0c57611a0c612e12565b14611a4f5760405162461bcd60e51b8152602060048201526013602482015272214d6573736167655374617475732e4e6f6e6560681b60448201526064016109da565b611a838484602080602002604051908101604052809291908260208002808284376000920191909152508691506122bc9050565b90505b9392505050565b6000848152600b602052604090205460ff16611b8257611aac8361260a565b6000611ae28584602080602002604051908101604052809291908260208002808284376000920191909152508691506122bc9050565b9050838114611b295760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b60448201526064016109da565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a890611b789086815260200190565b60405180910390a3505b50505050565b600080611b95838261276a565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611bcd62ffffff19831661278e565b63ffffffff1614611c0f5760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b60448201526064016109da565b6000611c2062ffffff1983166127a3565b905060016000828152600f602052604090205460ff166002811115611c4757611c47612e12565b14611c7e5760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b60448201526064016109da565b6000818152600f60205260409020805460ff191660021790556001611ce37f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061301f565b611ced919061316a565b5a11611d245760405162461bcd60e51b81526004016109da906020808252600490820152632167617360e01b604082015260600190565b6000611d3562ffffff1984166127ec565b6040805161010080825261012082019092529192507f000000000000000000000000000000000000000000000000000000000000000091600090826020820181803683370190505090506000611d9062ffffff1988166127fd565b611d9f62ffffff198916612811565b611dae62ffffff198a16612826565b611dcb611dc062ffffff198c1661283b565b62ffffff1916612869565b604051602401611dde9493929190613254565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050611e188585600086856128b2565b60405191995092507fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890611e519088908b908690613283565b60405180910390a150505050505050919050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b80471015611f1e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109da565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f6b576040519150601f19603f3d011682016040523d82523d6000602084013e611f70565b606091505b505090508061184a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016109da565b611fef611744565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118d73390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60055481036121205760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b60448201526064016109da565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101610c98565b6060868686868686604051602001612178969594939291906132a4565b60405160208183030381529060405290509695505050505050565b806121d15760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b60448201526064016109da565b600081815260096020526040902054156122245760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b60448201526064016109da565b6000818152600a602052604090205460ff16156122795760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b60448201526064016109da565b60008181526009602052604090819020439055517f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc890610c989083815260200190565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b8061264d5760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b60448201526064016109da565b6000818152600a602052604090205460ff16156126675750565b600081815260096020526040812054908190036126bd5760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b60448201526064016109da565b6008546126ca824361316a565b10156127185760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f742021766572696669656400000000000000000060448201526064016109da565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b81516000906020840161278564ffffffffff8516828461293d565b95945050505050565b600061153b62ffffff1983166028600461297a565b6000806127b98360781c6001600160601b031690565b6001600160601b0316905060006127d98460181c6001600160601b031690565b6001600160601b03169091209392505050565b600061153b6127fa836129aa565b90565b600061153b62ffffff19831682600461297a565b600061153b62ffffff1983166024600461297a565b600061153b62ffffff198316600460206129bb565b600061153b604c61285981601886901c6001600160601b031661316a565b62ffffff19851691906000612ac6565b60606000806128818460181c6001600160601b031690565b6001600160601b0316905060405191508192506128a18483602001612b42565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff8111156128d8576128d8612d3a565b6040519080825280601f01601f191660200182016040528015612902576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612923578692505b828152826000602083013e90999098509650505050505050565b60008061294a838561301f565b905060405181111561295a575060005b8060000361296f5762ffffff19915050611a86565b612785858585612c35565b60006129878260206132fe565b612992906008613317565b60ff166129a08585856129bb565b901c949350505050565b600061153b62ffffff198316602c60205b60008160ff166000036129d057506000611a86565b6129e38460181c6001600160601b031690565b6001600160601b03166129f960ff84168561301f565b1115612a6157612a128460781c6001600160601b031690565b612a258560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff831660648201526084016109da565b60208260ff161115612a865760405163045df3f960e01b815260040160405180910390fd5b600882026000612a9f8660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b600080612adc8660781c6001600160601b031690565b6001600160601b03169050612af086612cac565b84612afb878461301f565b612b05919061301f565b1115612b185762ffffff19915050612b3a565b612b22858261301f565b9050612b368364ffffffffff16828661293d565b9150505b949350505050565b600062ffffff1980841603612b6a5760405163148d513360e21b815260040160405180910390fd5b612b7383612ce5565b15612b9157604051632ee0949160e11b815260040160405180910390fd5b6000612ba68460181c6001600160601b031690565b6001600160601b031690506000612bc68560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115612be75760206060fd5b8386858560045afa905080612c0f57604051632af1bd9b60e21b815260040160405180910390fd5b612c2a612c1c8860d81c90565b64ffffffffff168786612c35565b979650505050505050565b60006060601883856001600160601b03821682148015612c5d575086816001600160601b0316145b612c965760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b60448201526064016109da565b96831b90961790911b90941790931b9392505050565b6000612cc18260181c6001600160601b031690565b612cd48360781c6001600160601b031690565b016001600160601b03169050919050565b6000612cf18260d81c90565b64ffffffffff1664ffffffffff03612d0b57506001919050565b6000612d1683612cac565b604051109392505050565b600060208284031215612d3357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612d6157600080fd5b813567ffffffffffffffff80821115612d7c57612d7c612d3a565b604051601f8301601f19908116603f01168101908282118183101715612da457612da4612d3a565b81604052838152866020858801011115612dbd57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215612def57600080fd5b813567ffffffffffffffff811115612e0657600080fd5b612b3a84828501612d50565b634e487b7160e01b600052602160045260246000fd5b6020810160038310612e4a57634e487b7160e01b600052602160045260246000fd5b91905290565b60008060008060006104608688031215612e6957600080fd5b853567ffffffffffffffff80821115612e8157600080fd5b818801915088601f830112612e9557600080fd5b813581811115612ea457600080fd5b8960208260051b8501011115612eb957600080fd5b602092830197509550508601359250610440860187811115612eda57600080fd5b94979396509194604001933592915050565b600060208284031215612efe57600080fd5b81356001600160a01b0381168114611a8657600080fd5b803563ffffffff81168114612f2957600080fd5b919050565b600060208284031215612f4057600080fd5b611a8682612f15565b600080600060608486031215612f5e57600080fd5b612f6784612f15565b925060208401359150604084013567ffffffffffffffff811115612f8a57600080fd5b612f9686828701612d50565b9150509250925092565b60005b83811015612fbb578181015183820152602001612fa3565b50506000910152565b60008151808452612fdc816020860160208601612fa0565b601f01601f19169290920160200192915050565b828152604060208201526000611a836040830184612fc4565b634e487b7160e01b600052601160045260246000fd5b8082018082111561153b5761153b613009565b60006020828403121561304457600080fd5b5051919050565b60608152600061305e6060830186612fc4565b82810360208401526130708186612fc4565b91505060018060a01b0383166040830152949350505050565b60408152600061309c6040830185612fc4565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e198336030181126130e057600080fd5b9190910192915050565b6000808335601e1984360301811261310157600080fd5b83018035915067ffffffffffffffff82111561311c57600080fd5b60200191503681900382131561313157600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561315a57600080fd5b81518015158114611a8657600080fd5b8181038181111561153b5761153b613009565b600063ffffffff80831681810361319657613196613009565b6001019392505050565b600080604083850312156131b357600080fd5b505080516020909101519092909150565b8481528360208201528260408201526080606082015260006131e96080830184612fc4565b9695505050505050565b6001600160a01b0381811683821601908082111561321357613213613009565b5092915050565b602081526000611a866020830184612fc4565b8051602080830151919081101561324e576000198160200360031b1b821691505b50919050565b600063ffffffff8087168352808616602084015250836040830152608060608301526131e96080830184612fc4565b83815282151560208201526060604082015260006127856060830184612fc4565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c83015282516132ec81604c850160208701612fa0565b91909101604c01979650505050505050565b60ff828116828216039081111561153b5761153b613009565b60ff81811683821602908116908181146132135761321361300956fea26469706673582212203324c0a31570b770dcaed9a52ea128dcf86ee78b7615426a61248186df3f62c064736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x28C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x15A JUMPI DUP1 PUSH4 0xB95A2001 GT PUSH2 0xC1 JUMPI DUP1 PUSH4 0xD69F9D61 GT PUSH2 0x7A JUMPI DUP1 PUSH4 0xD69F9D61 EQ PUSH2 0x887 JUMPI DUP1 PUSH4 0xD7D317B3 EQ PUSH2 0x8BB JUMPI DUP1 PUSH4 0xD88BEDA2 EQ PUSH2 0x8D1 JUMPI DUP1 PUSH4 0xDB1B7659 EQ PUSH2 0x905 JUMPI DUP1 PUSH4 0xE0FED010 EQ PUSH2 0x925 JUMPI DUP1 PUSH4 0xFA31DE01 EQ PUSH2 0x945 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB95A2001 EQ PUSH2 0x7C2 JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x7F5 JUMPI DUP1 PUSH4 0xCC394283 EQ PUSH2 0x80A JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x82A JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x848 JUMPI DUP1 PUSH4 0xD2A3CC71 EQ PUSH2 0x867 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA01892A5 GT PUSH2 0x113 JUMPI DUP1 PUSH4 0xA01892A5 EQ PUSH2 0x6F8 JUMPI DUP1 PUSH4 0xA792C29B EQ PUSH2 0x72C JUMPI DUP1 PUSH4 0xAD9C0C2E EQ PUSH2 0x74C JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0x762 JUMPI DUP1 PUSH4 0xB2F87643 EQ PUSH2 0x782 JUMPI DUP1 PUSH4 0xB697F531 EQ PUSH2 0x7A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x622 JUMPI DUP1 PUSH4 0x8D3638F4 EQ PUSH2 0x637 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x66A JUMPI DUP1 PUSH4 0x98C9F2B9 EQ PUSH2 0x688 JUMPI DUP1 PUSH4 0x9D3117C7 EQ PUSH2 0x6B8 JUMPI DUP1 PUSH4 0x9FA92F9D EQ PUSH2 0x6E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B GT PUSH2 0x1FE JUMPI DUP1 PUSH4 0x6159ADA1 GT PUSH2 0x1B7 JUMPI DUP1 PUSH4 0x6159ADA1 EQ PUSH2 0x572 JUMPI DUP1 PUSH4 0x65EAF11B EQ PUSH2 0x5A2 JUMPI DUP1 PUSH4 0x68742DA6 EQ PUSH2 0x5B7 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0x5D7 JUMPI DUP1 PUSH4 0x6B04A933 EQ PUSH2 0x5ED JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52A9674B EQ PUSH2 0x46D JUMPI DUP1 PUSH4 0x572386CA EQ PUSH2 0x4A1 JUMPI DUP1 PUSH4 0x579C1618 EQ PUSH2 0x4D1 JUMPI DUP1 PUSH4 0x5BD11EFC EQ PUSH2 0x4E7 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x507 JUMPI DUP1 PUSH4 0x5F61E3EC EQ PUSH2 0x526 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x301F07C3 GT PUSH2 0x250 JUMPI DUP1 PUSH4 0x301F07C3 EQ PUSH2 0x39A JUMPI DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x3EF JUMPI DUP1 PUSH4 0x4FF746F6 EQ PUSH2 0x404 JUMPI DUP1 PUSH4 0x508A109B EQ PUSH2 0x424 JUMPI DUP1 PUSH4 0x5190BC53 EQ PUSH2 0x444 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x14168416 EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0x1EEAABEA EQ PUSH2 0x2E6 JUMPI DUP1 PUSH4 0x25E3BEDA EQ PUSH2 0x308 JUMPI DUP1 PUSH4 0x2BB1AE7C EQ PUSH2 0x34A JUMPI DUP1 PUSH4 0x2BBD59CA EQ PUSH2 0x35D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x293 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2CC PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x301 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D21 JUMP JUMPDEST PUSH2 0x973 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33C PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2DD JUMP JUMPDEST PUSH2 0x306 PUSH2 0x358 CALLDATASIZE PUSH1 0x4 PUSH2 0x2DDD JUMP JUMPDEST PUSH2 0xA1D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x369 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x38D PUSH2 0x378 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D21 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2DD SWAP2 SWAP1 PUSH2 0x2E28 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CA PUSH2 0x3B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D21 JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2DD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x33C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0xBC0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x410 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x41F CALLDATASIZE PUSH1 0x4 PUSH2 0x2DDD JUMP JUMPDEST PUSH2 0xBFD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x430 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x43F CALLDATASIZE PUSH1 0x4 PUSH2 0x2E50 JUMP JUMPDEST PUSH2 0xCA3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x450 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CA PUSH2 0x45F CALLDATASIZE PUSH1 0x4 PUSH2 0x2EEC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x479 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2CC PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CA PUSH2 0x4BC CALLDATASIZE PUSH1 0x4 PUSH2 0x2D21 JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33C PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x502 CALLDATASIZE PUSH1 0x4 PUSH2 0x2EEC JUMP JUMPDEST PUSH2 0xF65 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x513 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3CA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x532 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x55A PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2DD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x57E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CA PUSH2 0x58D CALLDATASIZE PUSH1 0x4 PUSH2 0x2EEC JUMP JUMPDEST PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33C PUSH2 0xF9C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x5D2 CALLDATASIZE PUSH1 0x4 PUSH2 0x2EEC JUMP JUMPDEST PUSH2 0x1025 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x93A80 PUSH2 0x33C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x608 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D21 JUMP JUMPDEST PUSH2 0x10A2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x619 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x116D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x62E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x1198 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x643 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x0 PUSH2 0x2CC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x55A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x694 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CA PUSH2 0x6A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D21 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33C PUSH2 0x6D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D21 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH2 0x55A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x704 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x55A PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x738 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x55A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x758 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33C PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x76E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x77D CALLDATASIZE PUSH1 0x4 PUSH2 0x2EEC JUMP JUMPDEST PUSH2 0x124C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x78E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x79D CALLDATASIZE PUSH1 0x4 PUSH2 0x2EEC JUMP JUMPDEST PUSH2 0x12EA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x7BD CALLDATASIZE PUSH1 0x4 PUSH2 0x2EEC JUMP JUMPDEST PUSH2 0x1366 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2CC PUSH2 0x7DD CALLDATASIZE PUSH1 0x4 PUSH2 0x2F2E JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x801 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x13E5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x816 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x55A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x836 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x55A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x854 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x3CA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x873 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x882 CALLDATASIZE PUSH1 0x4 PUSH2 0x2EEC JUMP JUMPDEST PUSH2 0x1455 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x893 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x55A PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33C PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33C PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x911 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CA PUSH2 0x920 CALLDATASIZE PUSH1 0x4 PUSH2 0x2EEC JUMP JUMPDEST PUSH2 0x152C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x931 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x306 PUSH2 0x940 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D21 JUMP JUMPDEST PUSH2 0x1541 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x951 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x965 PUSH2 0x960 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F49 JUMP JUMPDEST PUSH2 0x1575 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2DD SWAP3 SWAP2 SWAP1 PUSH2 0x2FF0 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x99E JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 SLOAD DUP2 SUB PUSH2 0x9E3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x2164656C6179426C6F636B73 PUSH1 0xA0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD CALLER DUP2 MSTORE DUP2 SWAP1 PUSH32 0x8BD16320F3B60336ED5FD2A770EB7453E7E71CFEF4462ADDFFD7AE9DFE201C8E SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x8 SSTORE JUMP JUMPDEST PUSH2 0xA25 PUSH2 0x1744 JUMP JUMPDEST NUMBER PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD PUSH2 0xA36 SWAP2 SWAP1 PUSH2 0x301F JUMP JUMPDEST GT ISZERO PUSH2 0xA55 JUMPI PUSH1 0x40 MLOAD PUSH4 0x46CF2AF1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST NUMBER PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xABC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAE0 SWAP2 SWAP1 PUSH2 0x3032 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0xB36 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1C9BDBDD08185B1C9958591E481CD95B9D PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xB4B SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH2 0xB66 DUP2 DUP5 PUSH2 0x1791 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xDCAA37A042A0087DE79018C629BBD29CEE82CA80BD9BE394E1696BF9E9355077 SWAP1 PUSH2 0xBB3 SWAP1 DUP4 SWAP1 DUP7 SWAP1 CALLER SWAP1 PUSH2 0x304B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xBEB JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xBF3 PUSH2 0x184F JUMP JUMPDEST PUSH2 0xBFB PUSH2 0x189F JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xC5E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9DA SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x10A0A6A1 PUSH1 0xE1 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0xC67 DUP2 PUSH2 0x18F4 JUMP JUMPDEST PUSH32 0xB3ABC57BFEEBD2CAC918901DB582F71972A8E628BCCF19F5AE3E3482B98A5CED DUP2 CALLER PUSH1 0x40 MLOAD PUSH2 0xC98 SWAP3 SWAP2 SWAP1 PUSH2 0x3089 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xCAB PUSH2 0x1744 JUMP JUMPDEST PUSH2 0xCB3 PUSH2 0x198D JUMP JUMPDEST DUP4 PUSH2 0xCEA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x2170726F6F6673 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xCFF JUMPI PUSH2 0xCFF PUSH2 0x30B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD11 SWAP2 SWAP1 PUSH2 0x30C9 JUMP JUMPDEST PUSH2 0xD1B SWAP1 DUP1 PUSH2 0x30EA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD29 SWAP3 SWAP2 SWAP1 PUSH2 0x3138 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0xD90 DUP3 DUP9 DUP9 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD4C JUMPI PUSH2 0xD4C PUSH2 0x30B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD5E SWAP2 SWAP1 PUSH2 0x30C9 JUMP JUMPDEST PUSH1 0x20 ADD DUP10 DUP10 PUSH1 0x0 DUP2 DUP2 LT PUSH2 0xD74 JUMPI PUSH2 0xD74 PUSH2 0x30B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xD86 SWAP2 SWAP1 PUSH2 0x30C9 JUMP JUMPDEST PUSH2 0x420 ADD CALLDATALOAD PUSH2 0x19E6 JUMP JUMPDEST SWAP1 POP PUSH2 0xD9E DUP2 DUP7 DUP7 DUP7 PUSH2 0x1A8D JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP7 SWAP1 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xEC4 JUMPI DUP9 DUP9 DUP3 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xDE3 JUMPI PUSH2 0xDE3 PUSH2 0x30B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xDF5 SWAP2 SWAP1 PUSH2 0x30C9 JUMP JUMPDEST PUSH2 0xDFF SWAP1 DUP1 PUSH2 0x30EA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE0D SWAP3 SWAP2 SWAP1 PUSH2 0x3138 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP4 POP PUSH1 0x0 PUSH2 0xE62 DUP6 DUP12 DUP12 DUP6 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xE35 JUMPI PUSH2 0xE35 PUSH2 0x30B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE47 SWAP2 SWAP1 PUSH2 0x30C9 JUMP JUMPDEST PUSH1 0x20 ADD DUP13 DUP13 DUP7 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xD74 JUMPI PUSH2 0xD74 PUSH2 0x30B3 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0xEA1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x85CDA185C9959149BDBDD PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST POP PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE ADD PUSH2 0xDBD JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP2 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xF50 JUMPI PUSH2 0xF47 DUP10 DUP10 DUP4 PUSH4 0xFFFFFFFF AND DUP2 DUP2 LT PUSH2 0xEF1 JUMPI PUSH2 0xEF1 PUSH2 0x30B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xF03 SWAP2 SWAP1 PUSH2 0x30C9 JUMP JUMPDEST PUSH2 0xF0D SWAP1 DUP1 PUSH2 0x30EA JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B88 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xEC8 JUMP JUMPDEST POP POP POP POP PUSH2 0xF5E PUSH1 0x1 PUSH1 0x7 SSTORE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xF90 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF99 DUP2 PUSH2 0x1E65 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEBF0C717 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFFC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1020 SWAP2 SWAP1 PUSH2 0x3032 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1050 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SELFBALANCE PUSH2 0x105B DUP3 DUP3 PUSH2 0x1ECE JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xEAFF4B37086828766AD3268786972C0CD24259D4C87A80F9D3963A3C3D999B0D DUP3 PUSH1 0x40 MLOAD PUSH2 0x1096 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x10CD JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x10D5 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SUB PUSH2 0x112A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x616767726567617465526F6F742021657869737473 PUSH1 0x58 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD PUSH32 0xF51534ECF10A58DB36CE4F5180F59DEDDF3B3EB7C5E7454E602C2F80A40CC739 SWAP1 PUSH2 0xC98 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xBFB JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x84785ECD PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x84785ECD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11E1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1205 SWAP2 SWAP1 PUSH2 0x3148 JUMP JUMPDEST PUSH2 0x123C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x10BBB0BA31B432B9 PUSH1 0xC1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH2 0x1244 PUSH2 0x1744 JUMP JUMPDEST PUSH2 0xBFB PUSH2 0x1FE7 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1277 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x1295 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x12B3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x12E1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF99 DUP2 PUSH2 0x202A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1315 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0x384859C5EF5FAFAC31E8BC92CE7FB48B1F2C74C4DD5E212EB84EC202FA5D9FAD SWAP2 ADD PUSH2 0xC98 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1391 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE SWAP1 MLOAD SWAP2 DUP3 MSTORE PUSH32 0xD65ECA5D561D3A4568C87B9B13CED4AB52A69EDADFDFDB22D76BC595F36D7D87 SWAP2 ADD PUSH2 0xC98 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1410 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x1422 SWAP2 SWAP1 PUSH2 0x316A JUMP JUMPDEST GT PUSH2 0x1440 JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0xBFB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2078 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1480 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP3 AND SUB PUSH2 0x14DE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616C72656164792077617463686572206D616E61676572000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xC16D059E43D7F8E29CCB4E001A2F249D3C59E274925D6A6BC3912943441D9F6C SWAP1 PUSH1 0x20 ADD PUSH2 0xC98 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND CALLER EQ JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x156C JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF99 DUP2 PUSH2 0x20DD JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x60 SWAP1 PUSH1 0xFF AND PUSH2 0x15C6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x8585B1B1BDDDB1A5CDD1959 PUSH1 0xA2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 DUP3 PUSH2 0x15EF DUP4 PUSH2 0x317D JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH4 0xFFFFFFFF AND MUL OR SWAP1 SSTORE POP SWAP1 POP PUSH1 0x0 PUSH2 0x164E PUSH32 0x0 PUSH2 0x1645 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP5 DUP11 DUP11 DUP11 PUSH2 0x215B JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH4 0x2D287E43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2D287E43 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16C4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16E8 SWAP2 SWAP1 PUSH2 0x31A0 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH32 0x40F08EE347FC927AE45902EDC87DEBB024AAB1A311943731968607F603F2152F DUP4 PUSH2 0x171A PUSH1 0x1 DUP5 PUSH2 0x316A JUMP JUMPDEST DUP5 DUP8 PUSH1 0x40 MLOAD PUSH2 0x172C SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x31C4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP SWAP1 SWAP9 SWAP2 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xBFB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x17CF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x42C8C2E8C240D8CADCCEE8D PUSH1 0xA3 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH2 0x17DC PUSH2 0x8000 PUSH1 0x8 PUSH2 0x31F3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x62F84B24 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1807 SWAP2 SWAP1 PUSH2 0x321A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1826 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x184A SWAP2 SWAP1 PUSH2 0x3032 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND PUSH2 0xBFB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH2 0x18A7 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1941 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x10B6B4B93937B921B7B73732B1BA37B9 PUSH1 0x81 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 EQ PUSH2 0x197C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x42D8CADCCEE8D PUSH1 0xCB SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH2 0xF99 PUSH2 0x1988 DUP3 PUSH2 0x322D JUMP JUMPDEST PUSH2 0x2193 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SLOAD SUB PUSH2 0x19DF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x2 PUSH1 0x7 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1A0C JUMPI PUSH2 0x1A0C PUSH2 0x2E12 JUMP JUMPDEST EQ PUSH2 0x1A4F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x214D6573736167655374617475732E4E6F6E65 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH2 0x1A83 DUP5 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x22BC SWAP1 POP JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1B82 JUMPI PUSH2 0x1AAC DUP4 PUSH2 0x260A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AE2 DUP6 DUP5 PUSH1 0x20 DUP1 PUSH1 0x20 MUL PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP3 PUSH1 0x20 DUP1 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP7 SWAP2 POP PUSH2 0x22BC SWAP1 POP JUMP JUMPDEST SWAP1 POP DUP4 DUP2 EQ PUSH2 0x1B29 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x1A5B9D985B1A59081A5B989BDD5B99149BDBDD PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP5 SWAP1 DUP7 SWAP1 PUSH32 0x7EC1EA51FE3DB53E55ED9D922854BC2156F467FF2F87D74E2086DAE2C84A88A8 SWAP1 PUSH2 0x1B78 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B95 DUP4 DUP3 PUSH2 0x276A JUMP JUMPDEST SWAP1 POP PUSH4 0xFFFFFFFF PUSH32 0x0 AND PUSH2 0x1BCD PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x278E JUMP JUMPDEST PUSH4 0xFFFFFFFF AND EQ PUSH2 0x1C0F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x10B232B9BA34B730BA34B7B7 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C20 PUSH3 0xFFFFFF NOT DUP4 AND PUSH2 0x27A3 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1C47 JUMPI PUSH2 0x1C47 PUSH2 0x2E12 JUMP JUMPDEST EQ PUSH2 0x1C7E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x10B83937BB32B7 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x2 OR SWAP1 SSTORE PUSH1 0x1 PUSH2 0x1CE3 PUSH32 0x0 PUSH32 0x0 PUSH2 0x301F JUMP JUMPDEST PUSH2 0x1CED SWAP2 SWAP1 PUSH2 0x316A JUMP JUMPDEST GAS GT PUSH2 0x1D24 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9DA SWAP1 PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP3 ADD MSTORE PUSH4 0x21676173 PUSH1 0xE0 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D35 PUSH3 0xFFFFFF NOT DUP5 AND PUSH2 0x27EC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP1 DUP3 MSTORE PUSH2 0x120 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP2 SWAP3 POP PUSH32 0x0 SWAP2 PUSH1 0x0 SWAP1 DUP3 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x1D90 PUSH3 0xFFFFFF NOT DUP9 AND PUSH2 0x27FD JUMP JUMPDEST PUSH2 0x1D9F PUSH3 0xFFFFFF NOT DUP10 AND PUSH2 0x2811 JUMP JUMPDEST PUSH2 0x1DAE PUSH3 0xFFFFFF NOT DUP11 AND PUSH2 0x2826 JUMP JUMPDEST PUSH2 0x1DCB PUSH2 0x1DC0 PUSH3 0xFFFFFF NOT DUP13 AND PUSH2 0x283B JUMP JUMPDEST PUSH3 0xFFFFFF NOT AND PUSH2 0x2869 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1DDE SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3254 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xAB2DC3F5 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP1 POP PUSH2 0x1E18 DUP6 DUP6 PUSH1 0x0 DUP7 DUP6 PUSH2 0x28B2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP10 POP SWAP3 POP PUSH32 0xD42DE95A9B26F1BE134C8ECCE389DC4FCFA18753D01661B7B361233569E8FE48 SWAP1 PUSH2 0x1E51 SWAP1 DUP9 SWAP1 DUP12 SWAP1 DUP7 SWAP1 PUSH2 0x3283 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0xC77BEC288FC88F168427F2F7DA682EADB26CAC89D8D591AF6E443DA98DFF2BBC SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x1F1E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1F6B JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1F70 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x184A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH2 0x1FEF PUSH2 0x1744 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x18D7 CALLER SWAP1 JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 SUB PUSH2 0x2120 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x85B995DC81C985D19481B1A5B5A5D PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE PUSH32 0x8E7FA5E406CB856AAB05575E45EA011C6748376CC1B5229E3D67B92986406A15 SWAP2 ADD PUSH2 0xC98 JUMP JUMPDEST PUSH1 0x60 DUP7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2178 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x32A4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x21D1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x6E657720726F6F7420656D707479 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x2224 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x726F6F7420616C72656164792070656E64696E67 PUSH1 0x60 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2279 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x3937B7BA1030B63932B0B23C90383937BB32B7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 NUMBER SWAP1 SSTORE MLOAD PUSH32 0x84EF18531155AFDB0E64FF905D67044AE3AAC63A6FBA4661CFD9C4C14F289BC8 SWAP1 PUSH2 0xC98 SWAP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x5 DUP3 DUP2 SHL DUP3 AND SWAP5 DUP6 MSTORE DUP4 MLOAD SWAP5 DUP3 SUB SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x40 PUSH1 0x0 DUP2 DUP2 KECCAK256 PUSH1 0x2 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x4 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE DUP3 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x8 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH1 0x10 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 DUP5 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 DUP4 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 SWAP1 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xE0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x100 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH2 0x200 DUP1 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x120 DUP8 ADD MLOAD SWAP1 SWAP2 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x400 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x140 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x800 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x160 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x1000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x2000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x4000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1C0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH2 0x8000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1E0 DUP8 ADD MLOAD SWAP1 MSTORE DUP3 DUP3 KECCAK256 PUSH3 0x10000 DUP7 AND ISZERO DUP9 SHL DUP1 DUP7 SUB SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x20000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x220 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x40000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x240 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x80000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x260 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x100000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x280 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x200000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x400000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH3 0x800000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2E0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x1000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x300 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x2000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x320 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x4000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x340 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x8000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x360 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x10000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x380 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x20000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3A0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x40000000 DUP6 AND ISZERO DUP8 SHL DUP1 DUP6 SUB SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x3C0 DUP7 ADD MLOAD SWAP1 MSTORE DUP2 DUP2 KECCAK256 PUSH4 0x80000000 SWAP1 SWAP5 AND ISZERO SWAP1 SWAP6 SHL SWAP2 DUP3 SWAP1 SUB SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x3E0 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x264D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x616767726567617465526F6F7420656D707479 PUSH1 0x68 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2667 JUMPI POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP2 SWAP1 SUB PUSH2 0x26BD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x1859D9DC9959D85D19549BDBDD0808595E1A5CDD PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x26CA DUP3 NUMBER PUSH2 0x316A JUMP JUMPDEST LT ISZERO PUSH2 0x2718 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616767726567617465526F6F7420217665726966696564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP4 SWAP2 PUSH32 0x36B314ABA9F663B4D3EF3288AE489341CC5E6A2725A05FA2B72DF7A27E03F42A SWAP2 LOG2 POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0x2785 PUSH5 0xFFFFFFFFFF DUP6 AND DUP3 DUP5 PUSH2 0x293D JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x153B PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x28 PUSH1 0x4 PUSH2 0x297A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x27B9 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x27D9 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 SWAP2 KECCAK256 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x153B PUSH2 0x27FA DUP4 PUSH2 0x29AA JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x153B PUSH3 0xFFFFFF NOT DUP4 AND DUP3 PUSH1 0x4 PUSH2 0x297A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x153B PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x24 PUSH1 0x4 PUSH2 0x297A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x153B PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x4 PUSH1 0x20 PUSH2 0x29BB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x153B PUSH1 0x4C PUSH2 0x2859 DUP2 PUSH1 0x18 DUP7 SWAP1 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x316A JUMP JUMPDEST PUSH3 0xFFFFFF NOT DUP6 AND SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x2AC6 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x2881 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x40 MLOAD SWAP2 POP DUP2 SWAP3 POP PUSH2 0x28A1 DUP5 DUP4 PUSH1 0x20 ADD PUSH2 0x2B42 JUMP JUMPDEST POP DUP2 DUP2 ADD PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP7 PUSH2 0xFFFF AND PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x28D8 JUMPI PUSH2 0x28D8 PUSH2 0x2D3A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2902 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP8 MLOAD PUSH1 0x20 DUP10 ADD DUP12 DUP15 DUP15 CALL SWAP2 POP RETURNDATASIZE SWAP3 POP DUP7 DUP4 GT ISZERO PUSH2 0x2923 JUMPI DUP7 SWAP3 POP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x0 PUSH1 0x20 DUP4 ADD RETURNDATACOPY SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x294A DUP4 DUP6 PUSH2 0x301F JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP2 GT ISZERO PUSH2 0x295A JUMPI POP PUSH1 0x0 JUMPDEST DUP1 PUSH1 0x0 SUB PUSH2 0x296F JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x1A86 JUMP JUMPDEST PUSH2 0x2785 DUP6 DUP6 DUP6 PUSH2 0x2C35 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2987 DUP3 PUSH1 0x20 PUSH2 0x32FE JUMP JUMPDEST PUSH2 0x2992 SWAP1 PUSH1 0x8 PUSH2 0x3317 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x29A0 DUP6 DUP6 DUP6 PUSH2 0x29BB JUMP JUMPDEST SWAP1 SHR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x153B PUSH3 0xFFFFFF NOT DUP4 AND PUSH1 0x2C PUSH1 0x20 JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH1 0x0 SUB PUSH2 0x29D0 JUMPI POP PUSH1 0x0 PUSH2 0x1A86 JUMP JUMPDEST PUSH2 0x29E3 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x29F9 PUSH1 0xFF DUP5 AND DUP6 PUSH2 0x301F JUMP JUMPDEST GT ISZERO PUSH2 0x2A61 JUMPI PUSH2 0x2A12 DUP5 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2A25 DUP6 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x78218D29 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xFF DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x9DA JUMP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x2A86 JUMPI PUSH1 0x40 MLOAD PUSH4 0x45DF3F9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP3 MUL PUSH1 0x0 PUSH2 0x2A9F DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF SHL PUSH1 0x0 NOT DUP5 ADD SAR SWAP2 SWAP1 SWAP6 ADD MLOAD AND SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2ADC DUP7 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH2 0x2AF0 DUP7 PUSH2 0x2CAC JUMP JUMPDEST DUP5 PUSH2 0x2AFB DUP8 DUP5 PUSH2 0x301F JUMP JUMPDEST PUSH2 0x2B05 SWAP2 SWAP1 PUSH2 0x301F JUMP JUMPDEST GT ISZERO PUSH2 0x2B18 JUMPI PUSH3 0xFFFFFF NOT SWAP2 POP POP PUSH2 0x2B3A JUMP JUMPDEST PUSH2 0x2B22 DUP6 DUP3 PUSH2 0x301F JUMP JUMPDEST SWAP1 POP PUSH2 0x2B36 DUP4 PUSH5 0xFFFFFFFFFF AND DUP3 DUP7 PUSH2 0x293D JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFFFFFF NOT DUP1 DUP5 AND SUB PUSH2 0x2B6A JUMPI PUSH1 0x40 MLOAD PUSH4 0x148D5133 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2B73 DUP4 PUSH2 0x2CE5 JUMP JUMPDEST ISZERO PUSH2 0x2B91 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2EE09491 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2BA6 DUP5 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 PUSH2 0x2BC6 DUP6 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD SWAP2 POP DUP6 DUP3 GT ISZERO PUSH2 0x2BE7 JUMPI PUSH1 0x20 PUSH1 0x60 REVERT JUMPDEST DUP4 DUP7 DUP6 DUP6 PUSH1 0x4 GAS STATICCALL SWAP1 POP DUP1 PUSH2 0x2C0F JUMPI PUSH1 0x40 MLOAD PUSH4 0x2AF1BD9B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2C2A PUSH2 0x2C1C DUP9 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND DUP8 DUP7 PUSH2 0x2C35 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x18 DUP4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 AND DUP3 EQ DUP1 ISZERO PUSH2 0x2C5D JUMPI POP DUP7 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND EQ JUMPDEST PUSH2 0x2C96 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x85D1C9D5B98D85D1959 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9DA JUMP JUMPDEST SWAP7 DUP4 SHL SWAP1 SWAP7 OR SWAP1 SWAP2 SHL SWAP1 SWAP5 OR SWAP1 SWAP4 SHL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CC1 DUP3 PUSH1 0x18 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x2CD4 DUP4 PUSH1 0x78 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CF1 DUP3 PUSH1 0xD8 SHR SWAP1 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH5 0xFFFFFFFFFF SUB PUSH2 0x2D0B JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D16 DUP4 PUSH2 0x2CAC JUMP JUMPDEST PUSH1 0x40 MLOAD LT SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2D61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2D7C JUMPI PUSH2 0x2D7C PUSH2 0x2D3A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x2DA4 JUMPI PUSH2 0x2DA4 PUSH2 0x2D3A JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x2DBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2DEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2E06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2B3A DUP5 DUP3 DUP6 ADD PUSH2 0x2D50 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH2 0x2E4A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x460 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2E69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2E81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2E95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x2EA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x2EB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 DUP4 ADD SWAP8 POP SWAP6 POP POP DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x440 DUP7 ADD DUP8 DUP2 GT ISZERO PUSH2 0x2EDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 PUSH1 0x40 ADD SWAP4 CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2EFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1A86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2F29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2F40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1A86 DUP3 PUSH2 0x2F15 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2F5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F67 DUP5 PUSH2 0x2F15 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2F8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F96 DUP7 DUP3 DUP8 ADD PUSH2 0x2D50 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2FBB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2FA3 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2FDC DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x2FA0 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1A83 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2FC4 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x153B JUMPI PUSH2 0x153B PUSH2 0x3009 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3044 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH2 0x305E PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x2FC4 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x3070 DUP2 DUP7 PUSH2 0x2FC4 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP4 ADD MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x309C PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x2FC4 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x43E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x30E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x3101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x311C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x3131 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x315A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1A86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x153B JUMPI PUSH2 0x153B PUSH2 0x3009 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 SUB PUSH2 0x3196 JUMPI PUSH2 0x3196 PUSH2 0x3009 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x31B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST DUP5 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x31E9 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x2FC4 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x3213 JUMPI PUSH2 0x3213 PUSH2 0x3009 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1A86 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2FC4 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x324E JUMPI PUSH1 0x0 NOT DUP2 PUSH1 0x20 SUB PUSH1 0x3 SHL SHL DUP3 AND SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x31E9 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x2FC4 JUMP JUMPDEST DUP4 DUP2 MSTORE DUP3 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2785 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x2FC4 JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP1 DUP10 PUSH1 0xE0 SHL AND DUP4 MSTORE DUP8 PUSH1 0x4 DUP5 ADD MSTORE DUP1 DUP8 PUSH1 0xE0 SHL AND PUSH1 0x24 DUP5 ADD MSTORE DUP1 DUP7 PUSH1 0xE0 SHL AND PUSH1 0x28 DUP5 ADD MSTORE POP DUP4 PUSH1 0x2C DUP4 ADD MSTORE DUP3 MLOAD PUSH2 0x32EC DUP2 PUSH1 0x4C DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x2FA0 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x4C ADD SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x153B JUMPI PUSH2 0x153B PUSH2 0x3009 JUMP JUMPDEST PUSH1 0xFF DUP2 DUP2 AND DUP4 DUP3 AND MUL SWAP1 DUP2 AND SWAP1 DUP2 DUP2 EQ PUSH2 0x3213 JUMPI PUSH2 0x3213 PUSH2 0x3009 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLER 0x24 0xC0 LOG3 ISZERO PUSH17 0xB770DCAED9A52EA128DCF86EE78B761542 PUSH11 0x61248186DF3F62C064736F PUSH13 0x63430008110033000000000000 ","sourceMap":"306:2084:148:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1587:37:116;;;;;;;;;;;;;;;;;;188:10:181;176:23;;;158:42;;146:2;131:18;1587:37:116;;;;;;;;8274:213:120;;;;;;;;;;-1:-1:-1;8274:213:120;;;;;:::i;:::-;;:::i;:::-;;3780:36;;;;;;;;;;;;;;;;;;542:25:181;;;530:2;515:18;3780:36:120;396:177:181;11079:368:120;;;;;;:::i;:::-;;:::i;5679:49::-;;;;;;;;;;-1:-1:-1;5679:49:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;4723:52::-;;;;;;;;;;-1:-1:-1;4723:52:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2592:14:181;;2585:22;2567:41;;2555:2;2540:18;4723:52:120;2427:187:181;1949:112:168;;;;;;;;;;-1:-1:-1;2029:27:168;;1949:112;;1810:70:114;;;;;;;;;;;;;:::i;4262:148:116:-;;;;;;;;;;-1:-1:-1;4262:148:116;;;;;:::i;:::-;;:::i;14590:2124:120:-;;;;;;;;;;-1:-1:-1;14590:2124:120;;;;;:::i;:::-;;:::i;805:125:117:-;;;;;;;;;;-1:-1:-1;805:125:117;;;;;:::i;:::-;-1:-1:-1;;;;;891:34:117;920:4;891:34;;805:125;1268:30:116;;;;;;;;;;;;;;;5237:48:120;;;;;;;;;;-1:-1:-1;5237:48:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;853:30:167;;;;;;;;;;;;;;;;3939:119:116;;;;;;;;;;-1:-1:-1;3939:119:116;;;;;:::i;:::-;;:::i;1615:84:51:-;;;;;;;;;;-1:-1:-1;1685:7:51;;-1:-1:-1;;;1685:7:51;;;;1615:84;;1451:37:116;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4011:32:181;;;3993:51;;3981:2;3966:18;1451:37:116;3847:203:181;5424:50:120;;;;;;;;;;-1:-1:-1;5424:50:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;10615:87;;;;;;;;;;;;;:::i;9896:185::-;;;;;;;;;;-1:-1:-1;9896:185:120;;;;;:::i;:::-;;:::i;2151:79:168:-;;;;;;;;;;-1:-1:-1;1530:6:168;2151:79;;9312:328:120;;;;;;;;;;-1:-1:-1;9312:328:120;;;;;:::i;:::-;;:::i;10330:97::-;;;;;;;;;;;;;:::i;2321:71:114:-;;;;;;;;;;;;;:::i;10853:87:120:-;;;;;;;;;;-1:-1:-1;10929:6:120;10853:87;;1641:79:168;;;;;;;;;;-1:-1:-1;1687:7:168;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;5017:50:120;;;;;;;;;;-1:-1:-1;5017:50:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;4312:56;;;;;;;;;;-1:-1:-1;4312:56:120;;;;;:::i;:::-;;;;;;;;;;;;;;715:86:117;;;;;;;;;;-1:-1:-1;790:4:117;715:86;;3501:41:120;;;;;;;;;;;;;;;911:36:114;;;;;;;;;;-1:-1:-1;911:36:114;;;;-1:-1:-1;;;;;911:36:114;;;3276:26:120;;;;;;;;;;;;;;;;3321:420:168;;;;;;;;;;-1:-1:-1;3321:420:168;;;;;:::i;:::-;;:::i;8018:134:120:-;;;;;;;;;;-1:-1:-1;8018:134:120;;;;;:::i;:::-;;:::i;7757:129::-;;;;;;;;;;-1:-1:-1;7757:129:120;;;;;:::i;:::-;;:::i;5551:39::-;;;;;;;;;;-1:-1:-1;5551:39:120;;;;;:::i;:::-;;;;;;;;;;;;;;;;4404:539:168;;;;;;;;;;;;;:::i;1705:30:116:-;;;;;;;;;;-1:-1:-1;1705:30:116;;;;-1:-1:-1;;;;;1705:30:116;;;1792:85:168;;;;;;;;;;-1:-1:-1;1863:9:168;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;;;;;;;;;;-1:-1:-1;3097:4:168;3116:6;-1:-1:-1;;;;;3116:6:168;:20;3055:86;;1457:263:114;;;;;;;;;;-1:-1:-1;1457:263:114;;;;;:::i;:::-;;:::i;1363:28:116:-;;;;;;;;;;;;;;;959::167;;;;;;;;;;;;;;;;3640:36:120;;;;;;;;;;;;;;;4490:107:116;;;;;;;;;;-1:-1:-1;4490:107:116;;;;;:::i;:::-;;:::i;8892::120:-;;;;;;;;;;-1:-1:-1;8892:107:120;;;;;:::i;:::-;;:::i;11954:1067::-;;;;;;;;;;-1:-1:-1;11954:1067:120;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;8274:213::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;8367:11:120::1;;8351:12;:27:::0;8343:52:::1;;;::::0;-1:-1:-1;;;8343:52:120;;6776:2:181;8343:52:120::1;::::0;::::1;6758:21:181::0;6815:2;6795:18;;;6788:30;-1:-1:-1;;;6834:18:181;;;6827:42;6886:18;;8343:52:120::1;;;;;;;;;8406:44;::::0;8439:10:::1;3993:51:181::0;;8425:12:120;;8406:44:::1;::::0;3981:2:181;3966:18;8406:44:120::1;;;;;;;8456:11;:26:::0;8274:213::o;11079:368::-;1239:19:51;:17;:19::i;:::-;1418:12:167::1;1400:15;;1384:13;;:31;;;;:::i;:::-;:46;1380:124;;;1447:50;;-1:-1:-1::0;;;1447:50:167::1;;;;;;;;;;;1380:124;1595:12;1579:13;:28;;;;11169:12:120::2;11184:6;-1:-1:-1::0;;;;;11184:11:120::2;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11211:22;::::0;;;:16:::2;:22;::::0;;;;;11169:28;;-1:-1:-1;11211:22:120::2;;:31;11203:61;;;::::0;-1:-1:-1;;;11203:61:120;;7568:2:181;11203:61:120::2;::::0;::::2;7550:21:181::0;7607:2;7587:18;;;7580:30;-1:-1:-1;;;7626:18:181;;;7619:47;7683:18;;11203:61:120::2;7366:341:181::0;11203:61:120::2;11270:18;11308:4;11291:22;;;;;;7841:19:181::0;;7885:2;7876:12;;7712:182;11291:22:120::2;;;;;;;;;;;;;11270:43;;11319:33;11332:5;11339:12;11319;:33::i;:::-;11358:22;::::0;;;:16:::2;:22;::::0;;;;;;:29;;-1:-1:-1;;11358:29:120::2;11383:4;11358:29;::::0;;11398:44;::::2;::::0;::::2;::::0;11410:5;;11417:12;;11431:10:::2;::::0;11398:44:::2;:::i;:::-;;;;;;;;11163:284;;11079:368:::0;:::o;1810:70:114:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1486:16:51::1;:14;:16::i;:::-;1865:10:114::2;:8;:10::i;:::-;1810:70::o:0;4262:148:116:-;1891:10;-1:-1:-1;;;;;1905:3:116;1891:17;;1883:34;;;;-1:-1:-1;;;1883:34:116;;;;;;8580:2:181;8562:21;;;8619:1;8599:18;;;8592:29;-1:-1:-1;;;8652:2:181;8637:18;;8630:34;8696:2;8681:18;;8378:327;1883:34:116;4337:22:::1;4353:5;4337:15;:22::i;:::-;4370:35;4387:5;4394:10;4370:35;;;;;;;:::i;:::-;;;;;;;;4262:148:::0;:::o;14590:2124:120:-;1239:19:51;:17;:19::i;:::-;2261:21:52::1;:19;:21::i;:::-;14839:18:120::0;14831:38:::2;;;::::0;-1:-1:-1;;;14831:38:120;;9231:2:181;14831:38:120::2;::::0;::::2;9213:21:181::0;9270:1;9250:18;;;9243:29;-1:-1:-1;;;9288:18:181;;;9281:37;9335:18;;14831:38:120::2;9029:330:181::0;14831:38:120::2;15122:20;15155:7;;15163:1;15155:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;15145:29;;;;;;;:::i;:::-;;;;;;;;15122:52;;15304:20;15327:69;15348:12;15362:7;;15370:1;15362:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:15;;15379:7;;15387:1;15379:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:16;;;15327:20;:69::i;:::-;15304:92;;15485:79;15502:12;15516:14;15532;15548:15;15485:16;:79::i;:::-;15667:22;::::0;;;:8:::2;:22;::::0;;;;:45;;-1:-1:-1;;15667:45:120::2;15692:20;15667:45:::0;;::::2;::::0;;;15852:7;;15872:441:::2;15895:3;15891:1;:7;;;15872:441;;;15935:7;;15943:1;15935:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;15925:29;;;;;;;:::i;:::-;;;;;;;;15910:44;;15962:23;15988:69;16009:12;16023:7;;16031:1;16023:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:15;;16040:7;;16048:1;16040:10;;;;;;;;;:::i;15988:69::-;15962:95;;16157:12;16138:15;:31;16130:55;;;::::0;-1:-1:-1;;;16130:55:120;;10830:2:181;16130:55:120::2;::::0;::::2;10812:21:181::0;10869:2;10849:18;;;10842:30;-1:-1:-1;;;10888:18:181;;;10881:41;10939:18;;16130:55:120::2;10628:335:181::0;16130:55:120::2;-1:-1:-1::0;16221:22:120::2;::::0;;;:8:::2;:22;::::0;;;;:45;;-1:-1:-1;;16221:45:120::2;16246:20;16221:45:::0;;::::2;::::0;;;16295:3:::2;15872:441;;;;16604:8;16599:111;16622:3;16618:1;:7;;;16599:111;;;16637:27;16645:7;;16653:1;16645:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;:18;::::0;;::::2;:::i;:::-;16637:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;16637:7:120::2;::::0;-1:-1:-1;;;16637:27:120:i:2;:::-;-1:-1:-1::0;16692:3:120::2;;16599:111;;;;14783:1931;;;2303:20:52::1;1716:1:::0;2809:7;:22;2629:209;2303:20:::1;14590:2124:120::0;;;;;:::o;3939:119:116:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;4016:37:116::1;4036:16;4016:19;:37::i;:::-;3939:119:::0;:::o;10615:87:120:-;10662:7;10684:6;-1:-1:-1;;;;;10684:11:120;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10677:20;;10615:87;:::o;9896:185::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;9972:21:120::1;9999:39;10025:3:::0;9972:21;9999:17:::1;:39::i;:::-;10064:3;-1:-1:-1::0;;;;;10049:27:120::1;;10069:6;10049:27;;;;542:25:181::0;;530:2;515:18;;396:177;10049:27:120::1;;;;;;;;9949:132;9896:185:::0;:::o;9312:328::-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1486:16:51::1;:14;:16::i;:::-;9467:38:120::2;::::0;;;:21:::2;:38;::::0;;;;;:43;;9459:77:::2;;;::::0;-1:-1:-1;;;9459:77:120;;11170:2:181;9459:77:120::2;::::0;::::2;11152:21:181::0;11209:2;11189:18;;;11182:30;-1:-1:-1;;;11228:18:181;;;11221:51;11289:18;;9459:77:120::2;10968:345:181::0;9459:77:120::2;9549:38;::::0;;;:21:::2;:38;::::0;;;;;9542:45;;;;9598:37;::::2;::::0;::::2;::::0;9571:15;542:25:181;;530:2;515:18;;396:177;10330:97:120;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2321:71:114;1251:14;;;:36;;-1:-1:-1;;;1251:36:114;;1276:10;1251:36;;;3993:51:181;;;;-1:-1:-1;;;;;1251:14:114;;:24;;3966:18:181;;1251:36:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1243:57;;;;-1:-1:-1;;;1243:57:114;;11802:2:181;1243:57:114;;;11784:21:181;11841:1;11821:18;;;11814:29;-1:-1:-1;;;11859:18:181;;;11852:38;11907:18;;1243:57:114;11600:331:181;1243:57:114;1239:19:51::1;:17;:19::i;:::-;2379:8:114::2;:6;:8::i;3321:420:168:-:0;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;8018:134:120:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;-1:-1:-1;;;;;8087:27:120;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;8080:34;;-1:-1:-1;;8080:34:120::1;::::0;;8125:22;;3993:51:181;;;8125:22:120::1;::::0;3966:18:181;8125:22:120::1;3847:203:181::0;7757:129:120;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;-1:-1:-1;;;;;7816:27:120;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;7816:34:120::1;7846:4;7816:34;::::0;;7861:20;;3993:51:181;;;7861:20:120::1;::::0;3966:18:181;7861:20:120::1;3847:203:181::0;4404:539:168;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4918;:20::i;1457:263:114:-:0;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1569:14:114::1;::::0;-1:-1:-1;;;;;1569:14:114;;::::1;1542:42:::0;;::::1;::::0;1534:78:::1;;;::::0;-1:-1:-1;;;1534:78:114;;12271:2:181;1534:78:114::1;::::0;::::1;12253:21:181::0;12310:2;12290:18;;;12283:30;12349:25;12329:18;;;12322:53;12392:18;;1534:78:114::1;12069:347:181::0;1534:78:114::1;1618:14;:48:::0;;-1:-1:-1;;;;;;1618:48:114::1;-1:-1:-1::0;;;;;1618:48:114;::::1;::::0;;::::1;::::0;;;1677:38:::1;::::0;3993:51:181;;;1677:38:114::1;::::0;3981:2:181;3966:18;1677:38:114::1;3847:203:181::0;4490:107:116;4549:4;-1:-1:-1;;;;;1538:23:148;;:10;:23;4568:24:116;4561:31;4490:107;-1:-1:-1;;4490:107:116:o;8892::120:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;8963:31:120::1;8983:10;8963:19;:31::i;11954:1067::-:0;5841:10;12109:7;5822:30;;;:18;:30;;;;;;12118:12;;5822:30;;5814:55;;;;-1:-1:-1;;;5814:55:120;;12623:2:181;5814:55:120;;;12605:21:181;12662:2;12642:18;;;12635:30;-1:-1:-1;;;12681:18:181;;;12674:42;12733:18;;5814:55:120;12421:336:181;5814:55:120;12227:26:::1;::::0;;::::1;12211:13;12227:26:::0;;;:6:::1;:26;::::0;;;;:28;;12211:13;;12227:28;;;::::1;::::0;12211:13;12227:28:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12211:44;;12307:21;12331:172;12360:6;12374:38;12401:10;-1:-1:-1::0;;;;;335:23:173;;241:123;12374:38:120::1;12420:6;12434:18;12460:17;12485:12;12331:21;:172::i;:::-;12588:19:::0;;::::1;::::0;::::1;::::0;12749:27:::1;::::0;-1:-1:-1;;;12749:27:120;;::::1;::::0;::::1;542:25:181::0;;;12588:19:120;;-1:-1:-1;12588:19:120;12565:20:::1;::::0;;;12749:6:::1;-1:-1:-1::0;;;;;12749:13:120::1;::::0;::::1;::::0;515:18:181;;12749:27:120::1;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12715:61:::0;;-1:-1:-1;12715:61:120;-1:-1:-1;12928:51:120::1;12937:12:::0;12951:10:::1;12960:1;12715:61:::0;12951:10:::1;:::i;:::-;12963:5;12970:8;12928:51;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;12993:12:120;;13007:8;;-1:-1:-1;11954:1067:120;;-1:-1:-1;;;;;;11954:1067:120:o;1767:106:51:-;1685:7;;-1:-1:-1;;;1685:7:51;;;;1836:9;1828:38;;;;-1:-1:-1;;;1828:38:51;;13857:2:181;1828:38:51;;;13839:21:181;13896:2;13876:18;;;13869:30;-1:-1:-1;;;13915:18:181;;;13908:46;13971:18;;1828:38:51;13655:340:181;1635:280:148;1783:19;;:24;1775:49;;;;-1:-1:-1;;;1775:49:148;;14202:2:181;1775:49:148;;;14184:21:181;14241:2;14221:18;;;14214:30;-1:-1:-1;;;14260:18:181;;;14253:42;14312:18;;1775:49:148;14000:336:181;1775:49:148;1615:30:19;460:6;1641:4;1615:30;:::i;:::-;-1:-1:-1;;;;;1873:30:148;;1904:5;1873:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1635:280;;:::o;1945:106:51:-;1685:7;;-1:-1:-1;;;1685:7:51;;;;2003:41;;;;-1:-1:-1;;;2003:41:51;;14952:2:181;2003:41:51;;;14934:21:181;14991:2;14971:18;;;14964:30;-1:-1:-1;;;15010:18:181;;;15003:50;15070:18;;2003:41:51;14750:344:181;2433:117:51;1486:16;:14;:16::i;:::-;2491:7:::1;:15:::0;;-1:-1:-1;;;;2491:15:51::1;::::0;;2521:22:::1;719:10:58::0;2530:12:51::1;2521:22;::::0;-1:-1:-1;;;;;4011:32:181;;;3993:51;;3981:2;3966:18;2521:22:51::1;;;;;;;2433:117::o:0;2042:346:148:-;2179:15;;-1:-1:-1;;;;;2179:15:148;1538:10;:23;2157:59;;;;-1:-1:-1;;;2157:59:148;;15301:2:181;2157:59:148;;;15283:21:181;15340:2;15320:18;;;15313:30;-1:-1:-1;;;15359:18:181;;;15352:46;15415:18;;2157:59:148;15099:340:181;2157:59:148;2281:5;:12;2297:2;2281:18;2273:38;;;;-1:-1:-1;;;2273:38:148;;15646:2:181;2273:38:148;;;15628:21:181;15685:1;15665:18;;;15658:29;-1:-1:-1;;;15703:18:181;;;15696:37;15750:18;;2273:38:148;15444:330:181;2273:38:148;2347:36;2368:14;2376:5;2368:14;:::i;:::-;2347:20;:36::i;2336:287:52:-;1759:1;2468:7;;:19;2460:63;;;;-1:-1:-1;;;2460:63:52;;16283:2:181;2460:63:52;;;16265:21:181;16322:2;16302:18;;;16295:30;16361:33;16341:18;;;16334:61;16412:18;;2460:63:52;16081:355:181;2460:63:52;1759:1;2598:7;:18;2336:287::o;19673:730:120:-;19822:7;;19925:22;;;;:8;:22;;;;;;;;:44;;;;;;;;:::i;:::-;;19917:76;;;;-1:-1:-1;;;19917:76:120;;16643:2:181;19917:76:120;;;16625:21:181;16682:2;16662:18;;;16655:30;-1:-1:-1;;;16701:18:181;;;16694:49;16760:18;;19917:76:120;16441:343:181;19917:76:120;20335:63;20356:12;20370;20335:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20384:13:120;;-1:-1:-1;20335:20:120;;-1:-1:-1;20335:63:120:i;:::-;20328:70;;19673:730;;;;;;:::o;20958:1261::-;21206:32;;;;:18;:32;;;;;;;;21531:7;21202:342;21599:35;21619:14;21599:19;:35::i;:::-;21740:32;21775:67;21796:12;21810:14;21775:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21826:15:120;;-1:-1:-1;21775:20:120;;-1:-1:-1;21775:67:120:i;:::-;21740:102;;21968:14;21940:24;:42;21932:74;;;;-1:-1:-1;;;21932:74:120;;16991:2:181;21932:74:120;;;16973:21:181;17030:2;17010:18;;;17003:30;-1:-1:-1;;;17049:18:181;;;17042:49;17108:18;;21932:74:120;16789:343:181;21932:74:120;22104:32;;;;:18;:32;;;;;;;:39;;-1:-1:-1;;22104:39:120;22139:4;22104:39;;;22154:60;22182:14;;22123:12;;22154:60;;;;22198:15;542:25:181;;530:2;515:18;;396:177;22154:60:120;;;;;;;;21121:1098;20958:1261;;;;;:::o;22704:1731::-;22762:13;;22796:15;:8;22762:13;22796:12;:15::i;:::-;22783:28;-1:-1:-1;22873:26:120;22893:6;22873:26;:16;-1:-1:-1;;22873:14:120;;;:16::i;:::-;:26;;;22865:51;;;;-1:-1:-1;;;22865:51:120;;17339:2:181;22865:51:120;;;17321:21:181;17378:2;17358:18;;;17351:30;-1:-1:-1;;;17397:18:181;;;17390:42;17449:18;;22865:51:120;17137:336:181;22865:51:120;22960:20;22983:11;-1:-1:-1;;22983:9:120;;;:11::i;:::-;22960:34;-1:-1:-1;23034:20:120;23008:22;;;;:8;:22;;;;;;;;:46;;;;;;;;:::i;:::-;;23000:66;;;;-1:-1:-1;;;23000:66:120;;17680:2:181;23000:66:120;;;17662:21:181;17719:1;17699:18;;;17692:29;-1:-1:-1;;;17737:18:181;;;17730:37;17784:18;;23000:66:120;17478:330:181;23000:66:120;23209:22;;;;:8;:22;;;;;:48;;-1:-1:-1;;23209:48:120;23234:23;23209:48;;;;23746:25;23760:11;23746;:25;:::i;:::-;:29;;;;:::i;:::-;23734:9;:41;23726:58;;;;-1:-1:-1;;;23726:58:120;;;;;;18015:2:181;17997:21;;;18054:1;18034:18;;;18027:29;-1:-1:-1;;;18087:2:181;18072:18;;18065:34;18131:2;18116:18;;17813:327;23726:58:120;23823:18;23844:21;-1:-1:-1;;23844:19:120;;;:21::i;:::-;24027:19;;;23953:3;24027:19;;;;;;;;;23823:42;;-1:-1:-1;23918:11:120;;23903:12;;23953:3;24027:19;;;;;;;;;;-1:-1:-1;;24000:46:120;-1:-1:-1;24052:22:120;24153:11;-1:-1:-1;;24153:9:120;;;:11::i;:::-;24172:10;-1:-1:-1;;24172:8:120;;;:10::i;:::-;24190:11;-1:-1:-1;;24190:9:120;;;:11::i;:::-;24209:17;:9;-1:-1:-1;;24209:7:120;;;:9::i;:::-;-1:-1:-1;;24209:15:120;;:17::i;:::-;24077:155;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;24077:155:120;;;;;;;;;;;;;;-1:-1:-1;;;;;24077:155:120;-1:-1:-1;;;24077:155:120;;;;-1:-1:-1;24265:81:120;24305:10;24317:4;-1:-1:-1;24326:8:120;24077:155;24265:39;:81::i;:::-;24386:44;;24239:107;;-1:-1:-1;24239:107:120;-1:-1:-1;24386:44:120;;;;24394:12;;24239:107;;;;24386:44;:::i;:::-;;;;;;;;22777:1658;;;;;;;22704:1731;;;:::o;5838:185:116:-;5944:15;;5921:57;;;-1:-1:-1;;;;;5944:15:116;;;19211:34:181;;19281:15;;;19276:2;19261:18;;19254:43;5921:57:116;;19146:18:181;5921:57:116;;;;;;;5984:15;:34;;-1:-1:-1;;;;;;5984:34:116;-1:-1:-1;;;;;5984:34:116;;;;;;;;;;5838:185::o;2412:312:57:-;2526:6;2501:21;:31;;2493:73;;;;-1:-1:-1;;;2493:73:57;;19510:2:181;2493:73:57;;;19492:21:181;19549:2;19529:18;;;19522:30;19588:31;19568:18;;;19561:59;19637:18;;2493:73:57;19308:353:181;2493:73:57;2578:12;2596:9;-1:-1:-1;;;;;2596:14:57;2618:6;2596:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:52;;;2647:7;2639:78;;;;-1:-1:-1;;;2639:78:57;;20078:2:181;2639:78:57;;;20060:21:181;20117:2;20097:18;;;20090:30;20156:34;20136:18;;;20129:62;20227:28;20207:18;;;20200:56;20273:19;;2639:78:57;19876:422:181;2186:115:51;1239:19;:17;:19::i;:::-;2245:7:::1;:14:::0;;-1:-1:-1;;;;2245:14:51::1;-1:-1:-1::0;;;2245:14:51::1;::::0;;2274:20:::1;2281:12;719:10:58::0;;640:96;5170:183:168;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;4981:185::-;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;1742:335:167:-;1834:15;;1817:13;:32;1809:60;;;;-1:-1:-1;;;1809:60:167;;20505:2:181;1809:60:167;;;20487:21:181;20544:2;20524:18;;;20517:30;-1:-1:-1;;;20563:18:181;;;20556:45;20618:18;;1809:60:167;20303:339:181;1809:60:167;1983:15;:31;;;2025:47;;;2046:10;20821:51:181;;20903:2;20888:18;;20881:34;;;2025:47:167;;20794:18:181;2025:47:167;20647:274:181;981:328:165;1183:12;1227:13;1242:7;1251:6;1259:18;1279:10;1291:12;1210:94;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1203:101;;981:328;;;;;;;;:::o;17098:357:120:-;17169:8;17161:50;;;;-1:-1:-1;;;17161:50:120;;21843:2:181;17161:50:120;;;21825:21:181;21882:2;21862:18;;;21855:30;-1:-1:-1;;;21901:18:181;;;21894:44;21955:18;;17161:50:120;21641:338:181;17161:50:120;17225:31;;;;:21;:31;;;;;;:36;17217:69;;;;-1:-1:-1;;;17217:69:120;;22186:2:181;17217:69:120;;;22168:21:181;22225:2;22205:18;;;22198:30;-1:-1:-1;;;22244:18:181;;;22237:50;22304:18;;17217:69:120;21984:344:181;17217:69:120;17301:30;;;;:20;:30;;;;;;;;17300:31;17292:63;;;;-1:-1:-1;;;17292:63:120;;22535:2:181;17292:63:120;;;22517:21:181;22574:2;22554:18;;;22547:30;-1:-1:-1;;;22593:18:181;;;22586:49;22652:18;;17292:63:120;22333:343:181;17292:63:120;17362:31;;;;:21;:31;;;;;;;17396:12;17362:46;;17419:31;;;;;17384:8;542:25:181;;530:2;515:18;;396:177;24755:6146:164;25004:22;25008:1;25004:22;;;;;25033:19;;;25080:25;;25066:12;;;25059:47;;;;25138:4;24881:16;25125:18;;;25182:9;25170:22;;25163:30;25156:38;;25208:12;;;25201:30;;;;25254:34;;;25248:41;25238:52;;25309:18;;;25366:9;25354:22;;25347:30;25340:38;;25392:12;;;25385:30;;;;25438:34;;;25432:41;25422:52;;25493:18;;;25550:9;25538:22;;25531:30;25524:38;;25576:12;;;25569:30;;;;25646:9;25622:34;;25616:41;25606:52;;25677:18;;;25734:9;25722:22;;25715:30;25708:38;;25760:12;;;25753:30;;;;25830:9;25806:34;;;25800:41;25790:52;;;25861:18;;;25906:22;;;25899:30;25892:38;;25944:12;;;25937:30;;;;26014:9;25990:34;;25984:41;25974:52;;26045:18;;;26090:22;;;26083:30;26076:38;;26128:12;;;26121:30;;;;26198:9;26174:34;;26168:41;26158:52;;26229:18;;;26274:22;;;26267:30;26260:38;;26312:12;;;26305:30;;;;26382:9;26358:34;;26352:41;26342:52;;26413:18;;;26470:9;26458:22;;;26451:30;26444:38;;26496:12;;;26489:30;;;;26542:34;;26536:41;26526:52;;26597:18;;;26654:9;26642:22;;;26635:30;26628:38;;26680:12;;;26673:30;;;;26750:9;26726:34;;26720:41;26710:52;;;26781:18;;;26838:10;26826:23;;26819:31;26812:39;;26865:12;;;26858:30;;;;26935:10;26911:35;;26905:42;26895:53;;26967:18;;;27024:10;27012:23;;27005:31;26998:39;;27051:12;;;27044:30;;;;27121:10;27097:35;;27091:42;27081:53;;27153:18;;;27210:10;27198:23;;27191:31;27184:39;;27237:12;;;27230:30;;;;27307:10;27283:35;;27277:42;27267:53;;27339:18;;;27396:10;27384:23;;27377:31;27370:39;;27423:12;;;27416:30;;;;27493:10;27469:35;;27463:42;27453:53;;27525:18;;;27582:10;27570:23;;27563:31;27556:39;;27609:12;;;27602:30;;;;27679:10;27655:35;;27649:42;27639:53;;27711:18;;;27768:10;27756:23;;27749:31;27742:39;;27795:12;;;27788:30;;;;27865:10;27841:35;;27835:42;27825:53;;27897:18;;;27954:10;27942:23;;27935:31;27928:39;;27981:12;;;27974:30;;;;28027:35;;;28021:42;28011:53;;28083:18;;;28140:10;28128:23;;28121:31;28114:39;;28167:12;;;28160:30;;;;28237:10;28213:35;;28207:42;28197:53;;28269:18;;;28326:10;28314:23;;28307:31;28300:39;;28353:12;;;28346:30;;;;28423:10;28399:35;;28393:42;28383:53;;28455:18;;;28512:10;28500:23;;28493:31;28486:39;;28539:12;;;28532:30;;;;28609:10;28585:35;;28579:42;28569:53;;28641:18;;;28698:10;28686:23;;28679:31;28672:39;;28725:12;;;28718:30;;;;28795:10;28771:35;;28765:42;28755:53;;28827:18;;;28884:10;28872:23;;28865:31;28858:39;;28911:12;;;28904:30;;;;28981:10;28957:35;;28951:42;28941:53;;29013:18;;;29070:10;29058:23;;29051:31;29044:39;;29097:12;;;29090:30;;;;29167:10;29143:35;;29137:42;29127:53;;29199:18;;;29256:10;29244:23;;29237:31;29230:39;;29283:12;;;29276:30;;;;29353:10;29329:35;;29323:42;29313:53;;29385:18;;;29442:10;29430:23;;29423:31;29416:39;;29469:12;;;29462:30;;;;29539:10;29515:35;;29509:42;29499:53;;29571:18;;;29628:10;29616:23;;29609:31;29602:39;;29655:12;;;29648:30;;;;29725:10;29701:35;;29695:42;29685:53;;29757:18;;;29814:10;29802:23;;29795:31;29788:39;;29841:12;;;29834:30;;;;29911:10;29887:35;;29881:42;29871:53;;29943:18;;;30000:10;29988:23;;29981:31;29974:39;;30027:12;;;30020:30;;;;30097:10;30073:35;;30067:42;30057:53;;30129:18;;;30186:10;30174:23;;30167:31;30160:39;;30213:12;;;30206:30;;;;30283:10;30259:35;;30253:42;30243:53;;30315:18;;;30372:10;30360:23;;30353:31;30346:39;;30399:12;;;30392:30;;;;30469:10;30445:35;;30439:42;30429:53;;30501:18;;;30558:10;30546:23;;30539:31;30532:39;;30585:12;;;30578:30;;;;30655:10;30631:35;;30625:42;30615:53;;30687:18;;;30744:10;30732:23;;;30725:31;30718:39;;;30771:12;;;;30764:30;;;;30841:10;30817:35;;;30811:42;30801:53;;;30873:18;;;24755:6146::o;17891:1180:120:-;18006:14;17998:61;;;;-1:-1:-1;;;17998:61:120;;22883:2:181;17998:61:120;;;22865:21:181;22922:2;22902:18;;;22895:30;-1:-1:-1;;;22941:18:181;;;22934:49;23000:18;;17998:61:120;22681:343:181;17998:61:120;18149:36;;;;:20;:36;;;;;;;;18145:104;;;17891:1180;:::o;18145:104::-;18354:33;18390:37;;;:21;:37;;;;;;;18441:30;;;18433:63;;;;-1:-1:-1;;;18433:63:120;;23231:2:181;18433:63:120;;;23213:21:181;23270:2;23250:18;;;23243:30;-1:-1:-1;;;23289:18:181;;;23282:50;23349:18;;18433:63:120;23029:344:181;18433:63:120;18641:11;;18597:40;18612:25;18597:12;:40;:::i;:::-;:55;;18589:91;;;;-1:-1:-1;;;18589:91:120;;23580:2:181;18589:91:120;;;23562:21:181;23619:2;23599:18;;;23592:30;23658:25;23638:18;;;23631:53;23701:18;;18589:91:120;23378:347:181;18589:91:120;18808:36;;;;:20;:36;;;;;;:43;;-1:-1:-1;;18808:43:120;18847:4;18808:43;;;18862:37;18829:14;;18862:37;;;-1:-1:-1;19029:37:120;;;;:21;:37;;;;;19022:44;17891:1180::o;10748:325:174:-;10848:10;;10818:7;;10975:4;10966:14;;11042:26;;;;10966:14;10848:10;11042:5;:26::i;:::-;11035:33;10748:325;-1:-1:-1;;;;;10748:325:174:o;2583:121:165:-;2645:6;2673:25;-1:-1:-1;;2673:18:165;;2692:2;2696:1;2673:18;:25::i;17661:260:174:-;17717:14;17739:12;17754;17758:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;17754:12;-1:-1:-1;;;;;17739:27:174;;;17772:12;17787;17791:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;17787:12;-1:-1:-1;;;;;17772:27:174;17890:21;;;;17661:260;-1:-1:-1;;;17661:260:174:o;2942:141:165:-;3009:7;3031:47;3058:19;3068:8;3058:9;:19::i;:::-;508:4:173;399:121;2097:115:165;2154:6;2182:24;-1:-1:-1;;2182:18:165;;2154:6;2204:1;2182:18;:24::i;2414:115::-;2470:6;2498:25;-1:-1:-1;;2498:18:165;;2517:2;2521:1;2498:18;:25::i;2261:105::-;2318:7;2340:21;-1:-1:-1;;2340:14:165;;2355:1;2358:2;2340:14;:21::i;3201:146::-;3256:7;3278:64;533:2;3308:30;533:2;13008::174;13004:16;;;-1:-1:-1;;;;;13000:28:174;3308:30:165;:::i;:::-;-1:-1:-1;;3278:14:165;;;:64;3340:1;3278:14;:64::i;21380:556:174:-;21435:16;21459:11;21476:12;21491;21495:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;21491:12;-1:-1:-1;;;;;21476:27:174;;;21597:4;21591:11;21584:18;;21646:3;21639:10;;21678:33;21691:7;21700:3;21706:4;21700:10;21678:12;:33::i;:::-;-1:-1:-1;21815:14:174;;;21831:4;21811:25;21805:4;21798:39;21872:17;;21380:556;;-1:-1:-1;21380:556:174:o;1360:1117:171:-;1519:4;1525:12;1577:15;1598:13;1617:24;1654:8;1644:19;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1644:19:171;;1617:46;;2083:1;2062;2033:9;2027:16;2003:4;1992:9;1988:20;1957:6;1927:7;1906:4;1892:210;1880:222;;2157:16;2146:27;;2195:8;2186:7;2183:21;2180:62;;;2226:8;2215:19;;2180:62;2315:7;2302:11;2295:28;2423:7;2420:1;2413:4;2400:11;2396:22;2381:50;2450:8;;;;-1:-1:-1;1360:1117:171;-1:-1:-1;;;;;;;1360:1117:171:o;9979:390:174:-;10076:15;;10114:11;10121:4;10114;:11;:::i;:::-;10099:26;;10224:4;10218:11;10212:4;10209:21;10206:52;;;-1:-1:-1;10249:1:174;10206:52;10273:4;10281:1;10273:9;10269:41;;-1:-1:-1;;10292:11:174;;;;;10269:41;10325:39;10346:5;10353:4;10359;10325:20;:39::i;16417:201::-;16522:14;16596:11;16601:6;16596:2;:11;:::i;:::-;16595:17;;16611:1;16595:17;:::i;:::-;16551:62;;16559:30;16565:7;16574:6;16582;16559:5;:30::i;:::-;16551:62;;;16417:201;-1:-1:-1;;;;16417:201:174:o;2767:109:165:-;2827:7;2849:22;-1:-1:-1;;2849:14:165;;2864:2;2868;15274:815:174;15375:14;15401:6;:11;;15411:1;15401:11;15397:49;;-1:-1:-1;15437:1:174;15422:17;;15397:49;15473:12;15477:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15473:12;-1:-1:-1;;;;;15455:30:174;:15;;;;:6;:15;:::i;:::-;:30;15451:282;;;15674:12;15678:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15674:12;15688;15692:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;15688:12;15646:80;;-1:-1:-1;;;15646:80:174;;-1:-1:-1;;;;;24408:15:181;;;15646:80:174;;;24390:34:181;24460:15;;24440:18;;;24433:43;24492:18;;;24485:34;;;15710:15:174;;;24535:18:181;;;24528:34;24317:19;;15646:80:174;24116:452:181;15451:282:174;15751:2;15742:6;:11;;;15738:66;;;15762:42;;-1:-1:-1;;;15762:42:174;;;;;;;;;;;15738:66;15871:1;15862:10;;15811:15;15899:12;15903:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;15899:12;-1:-1:-1;;;;;15884:27:174;;-1:-1:-1;15917:13:174;-1:-1:-1;;;;;5031:12:174;;5027:85;16053:17;;;;16047:24;16043:36;;;-1:-1:-1;;;;;15274:815:174:o;13593:349::-;13714:7;13729:12;13744;13748:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;13744:12;-1:-1:-1;;;;;13729:27:174;;;13832:12;13836:7;13832:3;:12::i;:::-;13825:4;13809:13;13816:6;13809:4;:13;:::i;:::-;:20;;;;:::i;:::-;:35;13805:67;;;-1:-1:-1;;13854:11:174;;;;;13805:67;13885:13;13892:6;13885:4;:13;:::i;:::-;13878:20;;13911:26;13917:7;13911:26;;13926:4;13932;13911:5;:26::i;:::-;13904:33;;;13593:349;;;;;;;:::o;20133:893::-;20211:15;-1:-1:-1;;5480:15:174;;;;20234:68;;20262:40;;-1:-1:-1;;;20262:40:174;;;;;;;;;;;20234:68;20312:19;20323:7;20312:10;:19::i;:::-;20308:75;;;20340:43;;-1:-1:-1;;;20340:43:174;;;;;;;;;;;20308:75;20390:12;20405;20409:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;20405:12;-1:-1:-1;;;;;20390:27:174;;;20423:15;20441:12;20445:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;20441:12;-1:-1:-1;;;;;20423:30:174;;;20460:11;20477:8;20579:4;20573:11;20566:18;;20654:7;20649:3;20646:16;20643:80;;;20686:4;20680;20673:18;20643:80;20880:4;20871:7;20865:4;20856:7;20853:1;20846:5;20835:50;20828:57;;20901:3;20896:57;;20913:40;;-1:-1:-1;;;20913:40:174;;;;;;;;;;;20896:57;20969:52;20990:15;20997:7;11442:17;11438:31;;11253:254;20990:15;20969:52;;21007:7;21016:4;20969:20;:52::i;:::-;20959:62;20133:893;-1:-1:-1;;;;;;;20133:893:174:o;8805:657::-;8916:15;8961:2;8990;9076:4;9108;-1:-1:-1;;;;;9127:12:174;;;;:28;;;;;9151:4;9143;-1:-1:-1;;;;;9143:12:174;;9127:28;9119:51;;;;-1:-1:-1;;;9119:51:174;;24775:2:181;9119:51:174;;;24757:21:181;24814:2;24794:18;;;24787:30;-1:-1:-1;;;24833:18:181;;;24826:40;24883:18;;9119:51:174;24573:334:181;9119:51:174;9271:23;;;9344:17;;;9327:35;;;9410:17;;;9394:34;;;;;-1:-1:-1;;;8805:657:174:o;13200:131::-;13253:7;13308:12;13312:7;13008:2;13004:16;-1:-1:-1;;;;;13000:28:174;;12782:256;13308:12;13293;13297:7;11976:3;11972:17;-1:-1:-1;;;;;11968:29:174;;11675:332;13293:12;:27;-1:-1:-1;;;;;13286:34:174;;;13200:131;;;:::o;6121:290::-;6181:8;6201:15;6208:7;11442:17;11438:31;;11253:254;6201:15;:31;;6220:12;6201:31;6197:63;;-1:-1:-1;6249:4:174;;6121:290;-1:-1:-1;6121:290:174:o;6197:63::-;6265:12;6280;6284:7;6280:3;:12::i;:::-;6395:4;6389:11;-1:-1:-1;6380:21:174;6121:290;-1:-1:-1;;;6121:290:174:o;211:180:181:-;270:6;323:2;311:9;302:7;298:23;294:32;291:52;;;339:1;336;329:12;291:52;-1:-1:-1;362:23:181;;211:180;-1:-1:-1;211:180:181:o;578:127::-;639:10;634:3;630:20;627:1;620:31;670:4;667:1;660:15;694:4;691:1;684:15;710:718;752:5;805:3;798:4;790:6;786:17;782:27;772:55;;823:1;820;813:12;772:55;859:6;846:20;885:18;922:2;918;915:10;912:36;;;928:18;;:::i;:::-;1003:2;997:9;971:2;1057:13;;-1:-1:-1;;1053:22:181;;;1077:2;1049:31;1045:40;1033:53;;;1101:18;;;1121:22;;;1098:46;1095:72;;;1147:18;;:::i;:::-;1187:10;1183:2;1176:22;1222:2;1214:6;1207:18;1268:3;1261:4;1256:2;1248:6;1244:15;1240:26;1237:35;1234:55;;;1285:1;1282;1275:12;1234:55;1349:2;1342:4;1334:6;1330:17;1323:4;1315:6;1311:17;1298:54;1396:1;1389:4;1384:2;1376:6;1372:15;1368:26;1361:37;1416:6;1407:15;;;;;;710:718;;;;:::o;1433:320::-;1501:6;1554:2;1542:9;1533:7;1529:23;1525:32;1522:52;;;1570:1;1567;1560:12;1522:52;1610:9;1597:23;1643:18;1635:6;1632:30;1629:50;;;1675:1;1672;1665:12;1629:50;1698:49;1739:7;1730:6;1719:9;1715:22;1698:49;:::i;1943:127::-;2004:10;1999:3;1995:20;1992:1;1985:31;2035:4;2032:1;2025:15;2059:4;2056:1;2049:15;2075:347;2226:2;2211:18;;2259:1;2248:13;;2238:144;;2304:10;2299:3;2295:20;2292:1;2285:31;2339:4;2336:1;2329:15;2367:4;2364:1;2357:15;2238:144;2391:25;;;2075:347;:::o;2619:932::-;2784:6;2792;2800;2808;2816;2869:4;2857:9;2848:7;2844:23;2840:34;2837:54;;;2887:1;2884;2877:12;2837:54;2927:9;2914:23;2956:18;2997:2;2989:6;2986:14;2983:34;;;3013:1;3010;3003:12;2983:34;3051:6;3040:9;3036:22;3026:32;;3096:7;3089:4;3085:2;3081:13;3077:27;3067:55;;3118:1;3115;3108:12;3067:55;3158:2;3145:16;3184:2;3176:6;3173:14;3170:34;;;3200:1;3197;3190:12;3170:34;3255:7;3248:4;3238:6;3235:1;3231:14;3227:2;3223:23;3219:34;3216:47;3213:67;;;3276:1;3273;3266:12;3213:67;3307:4;3299:13;;;;-1:-1:-1;3331:6:181;-1:-1:-1;;3369:20:181;;3356:34;;-1:-1:-1;3424:4:181;3409:20;;3441:15;;;3438:35;;;3469:1;3466;3459:12;3438:35;2619:932;;;;-1:-1:-1;2619:932:181;;3507:2;3492:18;;3529:16;;2619:932;-1:-1:-1;;2619:932:181:o;3556:286::-;3615:6;3668:2;3656:9;3647:7;3643:23;3639:32;3636:52;;;3684:1;3681;3674:12;3636:52;3710:23;;-1:-1:-1;;;;;3762:31:181;;3752:42;;3742:70;;3808:1;3805;3798:12;4929:163;4996:20;;5056:10;5045:22;;5035:33;;5025:61;;5082:1;5079;5072:12;5025:61;4929:163;;;:::o;5097:184::-;5155:6;5208:2;5196:9;5187:7;5183:23;5179:32;5176:52;;;5224:1;5221;5214:12;5176:52;5247:28;5265:9;5247:28;:::i;5286:460::-;5371:6;5379;5387;5440:2;5428:9;5419:7;5415:23;5411:32;5408:52;;;5456:1;5453;5446:12;5408:52;5479:28;5497:9;5479:28;:::i;:::-;5469:38;;5554:2;5543:9;5539:18;5526:32;5516:42;;5609:2;5598:9;5594:18;5581:32;5636:18;5628:6;5625:30;5622:50;;;5668:1;5665;5658:12;5622:50;5691:49;5732:7;5723:6;5712:9;5708:22;5691:49;:::i;:::-;5681:59;;;5286:460;;;;;:::o;5751:250::-;5836:1;5846:113;5860:6;5857:1;5854:13;5846:113;;;5936:11;;;5930:18;5917:11;;;5910:39;5882:2;5875:10;5846:113;;;-1:-1:-1;;5993:1:181;5975:16;;5968:27;5751:250::o;6006:270::-;6047:3;6085:5;6079:12;6112:6;6107:3;6100:19;6128:76;6197:6;6190:4;6185:3;6181:14;6174:4;6167:5;6163:16;6128:76;:::i;:::-;6258:2;6237:15;-1:-1:-1;;6233:29:181;6224:39;;;;6265:4;6220:50;;6006:270;-1:-1:-1;;6006:270:181:o;6281:288::-;6456:6;6445:9;6438:25;6499:2;6494;6483:9;6479:18;6472:30;6419:4;6519:44;6559:2;6548:9;6544:18;6536:6;6519:44;:::i;6915:127::-;6976:10;6971:3;6967:20;6964:1;6957:31;7007:4;7004:1;6997:15;7031:4;7028:1;7021:15;7047:125;7112:9;;;7133:10;;;7130:36;;;7146:18;;:::i;7177:184::-;7247:6;7300:2;7288:9;7279:7;7275:23;7271:32;7268:52;;;7316:1;7313;7306:12;7268:52;-1:-1:-1;7339:16:181;;7177:184;-1:-1:-1;7177:184:181:o;7899:474::-;8120:2;8109:9;8102:21;8083:4;8146:44;8186:2;8175:9;8171:18;8163:6;8146:44;:::i;:::-;8238:9;8230:6;8226:22;8221:2;8210:9;8206:18;8199:50;8266:32;8291:6;8283;8266:32;:::i;:::-;8258:40;;;8363:1;8359;8354:3;8350:11;8346:19;8338:6;8334:32;8329:2;8318:9;8314:18;8307:60;7899:474;;;;;;:::o;8710:314::-;8885:2;8874:9;8867:21;8848:4;8905:44;8945:2;8934:9;8930:18;8922:6;8905:44;:::i;:::-;8897:52;;9014:1;9010;9005:3;9001:11;8997:19;8989:6;8985:32;8980:2;8969:9;8965:18;8958:60;8710:314;;;;;:::o;9364:127::-;9425:10;9420:3;9416:20;9413:1;9406:31;9456:4;9453:1;9446:15;9480:4;9477:1;9470:15;9496:325;9588:4;9646:11;9633:25;9740:4;9736:9;9725:8;9709:14;9705:29;9701:45;9681:18;9677:70;9667:98;;9761:1;9758;9751:12;9667:98;9782:33;;;;;9496:325;-1:-1:-1;;9496:325:181:o;9826:521::-;9903:4;9909:6;9969:11;9956:25;10063:2;10059:7;10048:8;10032:14;10028:29;10024:43;10004:18;10000:68;9990:96;;10082:1;10079;10072:12;9990:96;10109:33;;10161:20;;;-1:-1:-1;10204:18:181;10193:30;;10190:50;;;10236:1;10233;10226:12;10190:50;10269:4;10257:17;;-1:-1:-1;10300:14:181;10296:27;;;10286:38;;10283:58;;;10337:1;10334;10327:12;10283:58;9826:521;;;;;:::o;10352:271::-;10535:6;10527;10522:3;10509:33;10491:3;10561:16;;10586:13;;;10561:16;10352:271;-1:-1:-1;10352:271:181:o;11318:277::-;11385:6;11438:2;11426:9;11417:7;11413:23;11409:32;11406:52;;;11454:1;11451;11444:12;11406:52;11486:9;11480:16;11539:5;11532:13;11525:21;11518:5;11515:32;11505:60;;11561:1;11558;11551:12;11936:128;12003:9;;;12024:11;;;12021:37;;;12038:18;;:::i;12762:201::-;12800:3;12828:10;12873:2;12866:5;12862:14;12900:2;12891:7;12888:15;12885:41;;12906:18;;:::i;:::-;12955:1;12942:15;;12762:201;-1:-1:-1;;;12762:201:181:o;12968:245::-;13047:6;13055;13108:2;13096:9;13087:7;13083:23;13079:32;13076:52;;;13124:1;13121;13114:12;13076:52;-1:-1:-1;;13147:16:181;;13203:2;13188:18;;;13182:25;13147:16;;13182:25;;-1:-1:-1;12968:245:181:o;13218:432::-;13449:6;13438:9;13431:25;13492:6;13487:2;13476:9;13472:18;13465:34;13535:6;13530:2;13519:9;13515:18;13508:34;13578:3;13573:2;13562:9;13558:18;13551:31;13412:4;13599:45;13639:3;13628:9;13624:19;13616:6;13599:45;:::i;:::-;13591:53;13218:432;-1:-1:-1;;;;;;13218:432:181:o;14341:182::-;-1:-1:-1;;;;;14448:10:181;;;14460;;;14444:27;;14483:11;;;14480:37;;;14497:18;;:::i;:::-;14480:37;14341:182;;;;:::o;14528:217::-;14675:2;14664:9;14657:21;14638:4;14695:44;14735:2;14724:9;14720:18;14712:6;14695:44;:::i;15779:297::-;15897:12;;15944:4;15933:16;;;15927:23;;15897:12;15962:16;;15959:111;;;16056:1;16052:6;16042;16036:4;16032:17;16029:1;16025:25;16021:38;16014:5;16010:50;16001:59;;15959:111;;15779:297;;;:::o;18145:475::-;18335:4;18364:10;18413:2;18405:6;18401:15;18390:9;18383:34;18465:2;18457:6;18453:15;18448:2;18437:9;18433:18;18426:43;;18505:6;18500:2;18489:9;18485:18;18478:34;18548:3;18543:2;18532:9;18528:18;18521:31;18569:45;18609:3;18598:9;18594:19;18586:6;18569:45;:::i;18625:369::-;18822:6;18811:9;18804:25;18879:6;18872:14;18865:22;18860:2;18849:9;18845:18;18838:50;18924:2;18919;18908:9;18904:18;18897:30;18785:4;18944:44;18984:2;18973:9;18969:18;18961:6;18944:44;:::i;20926:710::-;21189:3;21226:10;21221:3;21217:20;21280:2;21271:6;21266:3;21262:16;21258:25;21253:3;21246:38;21313:6;21309:1;21304:3;21300:11;21293:27;21372:2;21363:6;21358:3;21354:16;21350:25;21345:2;21340:3;21336:12;21329:47;21428:2;21419:6;21414:3;21410:16;21406:25;21401:2;21396:3;21392:12;21385:47;;21462:6;21457:2;21452:3;21448:12;21441:28;21498:6;21492:13;21514:75;21582:6;21577:2;21572:3;21568:12;21561:4;21553:6;21549:17;21514:75;:::i;:::-;21609:16;;;;21627:2;21605:25;;20926:710;-1:-1:-1;;;;;;;20926:710:181:o;23730:151::-;23820:4;23813:12;;;23799;;;23795:31;;23838:14;;23835:40;;;23855:18;;:::i;23886:225::-;23990:4;23969:12;;;23983;;;23965:31;24016:22;;;;24057:24;;;24047:58;;24085:18;;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"2632200","executionCost":"infinite","totalCost":"infinite"},"external":{"AMB()":"infinite","DOMAIN()":"infinite","MERKLE()":"infinite","MIRROR_DOMAIN()":"infinite","PROCESS_GAS()":"infinite","RESERVE_GAS()":"infinite","ROOT_MANAGER()":"infinite","acceptProposedOwner()":"63837","addSender(address)":"27953","allowlistedSenders(address)":"2541","delay()":"303","delayBlocks()":"2384","dispatch(uint32,bytes32,bytes)":"infinite","home()":"368","isReplica(address)":"500","lastSentBlock()":"2361","localDomain()":"infinite","messages(bytes32)":"2626","mirrorConnector()":"2426","nonces(uint32)":"2556","outboundRoot()":"infinite","owner()":"2421","pause()":"infinite","paused()":"2455","pendingAggregateRoots(bytes32)":"2572","processMessage(bytes)":"infinite","proposeNewOwner(address)":"56494","proposed()":"2442","proposedTimestamp()":"2360","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":"infinite","provenAggregateRoots(bytes32)":"2496","provenMessageRoots(bytes32)":"2562","rateLimitBlocks()":"2385","removePendingAggregateRoot(bytes32)":"13002","removeSender(address)":"27925","renounceOwnership()":"2480","renounced()":"2452","send(bytes)":"infinite","sentMessageRoots(bytes32)":"2518","setDelayBlocks(uint256)":"28093","setMirrorConnector(address)":"30278","setRateLimitBlocks(uint256)":"28101","setWatcherManager(address)":"30049","unpause()":"infinite","verifySender(address)":"480","watcherManager()":"2404","withdrawFunds(address)":"infinite"},"internal":{"_processMessage(bytes memory)":"infinite","_sendMessage(bytes memory,bytes memory)":"infinite","_verifySender(address)":"infinite"}},"methodIdentifiers":{"AMB()":"d69f9d61","DOMAIN()":"52a9674b","MERKLE()":"a01892a5","MIRROR_DOMAIN()":"14168416","PROCESS_GAS()":"d88beda2","RESERVE_GAS()":"25e3beda","ROOT_MANAGER()":"5f61e3ec","acceptProposedOwner()":"c5b350df","addSender(address)":"b697f531","allowlistedSenders(address)":"6159ada1","delay()":"6a42b8f8","delayBlocks()":"ad9c0c2e","dispatch(uint32,bytes32,bytes)":"fa31de01","home()":"9fa92f9d","isReplica(address)":"5190bc53","lastSentBlock()":"d7d317b3","localDomain()":"8d3638f4","messages(bytes32)":"2bbd59ca","mirrorConnector()":"cc394283","nonces(uint32)":"b95a2001","outboundRoot()":"65eaf11b","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","pendingAggregateRoots(bytes32)":"9d3117c7","processMessage(bytes)":"4ff746f6","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":"508a109b","provenAggregateRoots(bytes32)":"301f07c3","provenMessageRoots(bytes32)":"98c9f2b9","rateLimitBlocks()":"579c1618","removePendingAggregateRoot(bytes32)":"6b04a933","removeSender(address)":"b2f87643","renounceOwnership()":"715018a6","renounced()":"d232c220","send(bytes)":"2bb1ae7c","sentMessageRoots(bytes32)":"572386ca","setDelayBlocks(uint256)":"1eeaabea","setMirrorConnector(address)":"5bd11efc","setRateLimitBlocks(uint256)":"e0fed010","setWatcherManager(address)":"d2a3cc71","unpause()":"3f4ba83a","verifySender(address)":"db1b7659","watcherManager()":"a792c29b","withdrawFunds(address)":"68742da6"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_mirrorDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_amb\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rootManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_processGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserveGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_merkle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Connector__processMessage_notUsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimited__rateLimited_messageSendRateExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__index_indexMoreThan32Bytes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"len\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slice\",\"type\":\"uint256\"}],\"name\":\"TypedMemView__index_overrun\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_identityOOG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_invalidPointer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_nullPointer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"updated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"DelayBlocksUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Dispatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"aggregateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"MessageProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"MirrorConnectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"mirrorDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"amb\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mirrorConnector\",\"type\":\"address\"}],\"name\":\"NewConnector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"Process\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updater\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRateLimit\",\"type\":\"uint256\"}],\"name\":\"SendRateLimitUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"watcherManager\",\"type\":\"address\"}],\"name\":\"WatcherManagerChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MERKLE\",\"outputs\":[{\"internalType\":\"contract MerkleTreeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROCESS_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROOT_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"addSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowlistedSenders\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_recipientAddress\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_messageBody\",\"type\":\"bytes\"}],\"name\":\"dispatch\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"home\",\"outputs\":[{\"internalType\":\"contract IOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_potentialReplica\",\"type\":\"address\"}],\"name\":\"isReplica\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastSentBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localDomain\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"messages\",\"outputs\":[{\"internalType\":\"enum SpokeConnector.MessageStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outboundRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"pendingAggregateRoots\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"path\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct SpokeConnector.Proof[]\",\"name\":\"_proofs\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"_aggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[32]\",\"name\":\"_aggregatePath\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"_aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"proveAndProcess\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenAggregateRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenMessageRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rateLimitBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_fraudulentRoot\",\"type\":\"bytes32\"}],\"name\":\"removePendingAggregateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"removeSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"sentMessageRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_delayBlocks\",\"type\":\"uint256\"}],\"name\":\"setDelayBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"}],\"name\":\"setMirrorConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rateLimit\",\"type\":\"uint256\"}],\"name\":\"setRateLimitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"}],\"name\":\"setWatcherManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"watcherManager\",\"outputs\":[{\"internalType\":\"contract WatcherManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addSender(address)\":{\"details\":\"Only allowlisted routers (senders) can call `dispatch`.\"},\"dispatch(uint32,bytes32,bytes)\":{\"details\":\"The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \\\"hub\\\"), it will be combined into a single aggregate root by RootManager (along with outbound roots from other chains). This aggregate root will be redistributed to all destination chains. NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\"},\"home()\":{\"details\":\"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad\",\"returns\":{\"_0\":\"The local inbox contract\"}},\"isReplica(address)\":{\"returns\":{\"_0\":\"True if _potentialReplica is an enrolled Replica\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"processMessage(bytes)\":{\"details\":\"This is called by AMBs to process messages originating from mirror connector\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)\":{\"details\":\"Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.Intended to be called by the relayer at specific intervals during runtime.Will record a calculated root as having been proven if we've already proven that it was included in the aggregateRoot.\",\"params\":{\"_aggregateIndex\":\"Index of the inbound root in the aggregator's merkle tree in the hub.\",\"_aggregatePath\":\"Merkle path of inclusion for the inbound root.\",\"_aggregateRoot\":\"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.\",\"_proofs\":\"Batch of Proofs containing messages for proving/processing.\"}},\"removePendingAggregateRoot(bytes32)\":{\"details\":\"This method is required for handling fraud cases in the current construction.\",\"params\":{\"_fraudulentRoot\":\"Target fraudulent root that should be erased from the `pendingAggregateRoots` mapping.\"}},\"removeSender(address)\":{\"details\":\"Only allowlisted routers (senders) can call `dispatch`.\"},\"renounceOwnership()\":{\"details\":\"Renounce ownership should be impossible as long as it is impossible in the WatcherClient, and as long as only the owner can remove pending roots in case of fraud.\"},\"setRateLimitBlocks(uint256)\":{\"details\":\"Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\",\"params\":{\"_rateLimit\":\"The number of blocks require between sending messages. If set to 0, rate limiting for this spoke connector will be disabled.\"}},\"withdrawFunds(address)\":{\"details\":\"Withdraws the entire balance of the contract.\",\"params\":{\"_to\":\"The recipient of the funds withdrawn\"}}},\"version\":1},\"userdoc\":{\"events\":{\"FundsWithdrawn(address,uint256)\":{\"notice\":\"Emitted when funds are withdrawn by the admin\"},\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"},\"WatcherManagerChanged(address)\":{\"notice\":\"Emitted when the manager address changes\"}},\"kind\":\"user\",\"methods\":{\"AMB()\":{\"notice\":\"Address of the AMB on this domain.\"},\"DOMAIN()\":{\"notice\":\"The domain of this Messaging (i.e. Connector) contract.\"},\"MERKLE()\":{\"notice\":\"MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root will be sent crosschain to the hub for aggregation and redistribution.\"},\"MIRROR_DOMAIN()\":{\"notice\":\"The domain of the corresponding messaging (i.e. Connector) contract.\"},\"PROCESS_GAS()\":{\"notice\":\"Minimum gas for processing a received message (reserved for handle)\"},\"RESERVE_GAS()\":{\"notice\":\"Reserved gas (to ensure tx completes in case message processing runs out)\"},\"ROOT_MANAGER()\":{\"notice\":\"RootManager contract address.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"addSender(address)\":{\"notice\":\"Adds a sender to the allowlist.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"delayBlocks()\":{\"notice\":\"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary.\"},\"dispatch(uint32,bytes32,bytes)\":{\"notice\":\"This function adds transfers to the outbound transfer merkle tree.\"},\"home()\":{\"notice\":\"Get the local inbox contract from the xAppConnectionManager\"},\"isReplica(address)\":{\"notice\":\"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\"},\"lastSentBlock()\":{\"notice\":\"Tracks the last block that we sent a message.\"},\"localDomain()\":{\"notice\":\"This provides the implementation for what is defined in the ConnectorManager to avoid storing the domain redundantly\"},\"messages(bytes32)\":{\"notice\":\"Mapping of message leaves to MessageStatus, keyed on leaf.\"},\"mirrorConnector()\":{\"notice\":\"Connector on L2 for L1 connectors, and vice versa.\"},\"nonces(uint32)\":{\"notice\":\"domain => next available nonce for the domain.\"},\"outboundRoot()\":{\"notice\":\"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"pause()\":{\"notice\":\"Watchers can pause contracts if fraud is detected\"},\"pendingAggregateRoots(bytes32)\":{\"notice\":\"This will hold the commit block for incoming aggregateRoots from the hub chain. Once they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can be used for proving inclusion of crosschain messages.\"},\"processMessage(bytes)\":{\"notice\":\"Processes a message received by an AMB\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)\":{\"notice\":\"Must be able to call the `handle` function on the BridgeRouter contract. This is called on the destination domain to handle incoming messages. Proving: Calculates the expected inbound root from an origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this calculated inbound root is included in the current aggregateRoot, given its index in the aggregator tree and the proof of inclusion. Processing: After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for execution.\"},\"provenAggregateRoots(bytes32)\":{\"notice\":\"This tracks the roots of the aggregate tree containing outbound roots from all other supported domains. The current version is the one that is known to be past the delayBlocks time period.\"},\"provenMessageRoots(bytes32)\":{\"notice\":\"This tracks whether the root has been proven to exist within the given aggregate root.\"},\"rateLimitBlocks()\":{\"notice\":\"The number of blocks required between message sending events.\"},\"removePendingAggregateRoot(bytes32)\":{\"notice\":\"Manually remove a pending aggregateRoot by owner if the contract is paused.\"},\"removeSender(address)\":{\"notice\":\"Removes a sender from the allowlist.\"},\"renounceOwnership()\":{\"notice\":\"Remove ability to renounce ownership\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"send(bytes)\":{\"notice\":\"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)\"},\"sentMessageRoots(bytes32)\":{\"notice\":\"This mapping records all message roots that have already been sent in order to prevent redundant message roots from being sent to hub.\"},\"setDelayBlocks(uint256)\":{\"notice\":\"Set the `delayBlocks`, the period in blocks over which an incoming message is verified.\"},\"setMirrorConnector(address)\":{\"notice\":\"Sets the address of the l2Connector for this domain\"},\"setRateLimitBlocks(uint256)\":{\"notice\":\"Set the rate limit (number of blocks) at which we can send messages from this contract to the hub chain using the `send` method.\"},\"setWatcherManager(address)\":{\"notice\":\"Owner can enroll a watcher (abilities are defined by inheriting contracts)\"},\"unpause()\":{\"notice\":\"Owner can unpause contracts if fraud is detected by watchers\"},\"verifySender(address)\":{\"notice\":\"Checks the cross domain sender for a given address\"},\"watcherManager()\":{\"notice\":\"The `WatcherManager` contract governs the watcher allowlist.\"},\"withdrawFunds(address)\":{\"notice\":\"This function should be callable by owner, and send funds trapped on a connector to the provided recipient.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol\":\"ZkSyncSpokeConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@matterlabs/zksync-contracts/l2/system-contracts/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./interfaces/IAccountCodeStorage.sol\\\";\\nimport \\\"./interfaces/INonceHolder.sol\\\";\\nimport \\\"./interfaces/IContractDeployer.sol\\\";\\nimport \\\"./interfaces/IKnownCodesStorage.sol\\\";\\nimport \\\"./interfaces/IImmutableSimulator.sol\\\";\\nimport \\\"./interfaces/IEthToken.sol\\\";\\nimport \\\"./interfaces/IL1Messenger.sol\\\";\\nimport \\\"./interfaces/ISystemContext.sol\\\";\\n\\nuint160 constant SYSTEM_CONTRACTS_OFFSET = 0x8000; // 2^15\\nuint160 constant MAX_SYSTEM_CONTRACT_ADDRESS = 0xffff; // 2^16 - 1\\n\\naddress constant ECRECOVER_SYSTEM_CONTRACT = address(0x01);\\naddress constant SHA256_SYSTEM_CONTRACT = address(0x02);\\n\\naddress payable constant BOOTLOADER_FORMAL_ADDRESS = payable(address(SYSTEM_CONTRACTS_OFFSET + 0x01));\\nIAccountCodeStorage constant ACCOUNT_CODE_STORAGE_SYSTEM_CONTRACT = IAccountCodeStorage(address(SYSTEM_CONTRACTS_OFFSET + 0x02));\\nINonceHolder constant NONCE_HOLDER_SYSTEM_CONTRACT = INonceHolder(address(SYSTEM_CONTRACTS_OFFSET + 0x03));\\nIKnownCodesStorage constant KNOWN_CODE_STORAGE_CONTRACT = IKnownCodesStorage(address(SYSTEM_CONTRACTS_OFFSET + 0x04));\\nIImmutableSimulator constant IMMUTABLE_SIMULATOR_SYSTEM_CONTRACT = IImmutableSimulator(address(SYSTEM_CONTRACTS_OFFSET + 0x05));\\nIContractDeployer constant DEPLOYER_SYSTEM_CONTRACT = IContractDeployer(address(SYSTEM_CONTRACTS_OFFSET + 0x06));\\n\\n// A contract that is allowed to deploy any codehash\\n// on any address. To be used only during an upgrade.\\naddress constant FORCE_DEPLOYER = address(SYSTEM_CONTRACTS_OFFSET + 0x07);\\nIL1Messenger constant L1_MESSENGER_CONTRACT = IL1Messenger(address(SYSTEM_CONTRACTS_OFFSET + 0x08));\\naddress constant MSG_VALUE_SYSTEM_CONTRACT = address(SYSTEM_CONTRACTS_OFFSET + 0x09);\\n\\nIEthToken constant ETH_TOKEN_SYSTEM_CONTRACT = IEthToken(address(SYSTEM_CONTRACTS_OFFSET + 0x0a));\\n\\naddress constant KECCAK256_SYSTEM_CONTRACT = address(SYSTEM_CONTRACTS_OFFSET + 0x10);\\n\\nISystemContext constant SYSTEM_CONTEXT_CONTRACT = ISystemContext(payable(address(SYSTEM_CONTRACTS_OFFSET + 0x0b)));\\n\\nbytes32 constant DEFAULT_ACCOUNT_CODE_HASH = 0x00;\\n\\n// The number of bytes that are published during the contract deployment\\n// in addition to the bytecode itself.\\nuint256 constant BYTECODE_PUBLISHING_OVERHEAD = 100;\\n\\nuint256 constant MSG_VALUE_SIMULATOR_IS_SYSTEM_BIT = 2**128;\\n\",\"keccak256\":\"0x011b1894097933ac2559e2bdb1ef8c3c109a4e3999975e576233b9a702b04505\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IAccountCodeStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\ninterface IAccountCodeStorage {\\n    function storeCodeHash(address _address, bytes32 _hash) external;\\n\\n    function getRawCodeHash(address _address) external view returns (bytes32 codeHash);\\n\\n    function getCodeHash(uint256 _input) external returns (bytes32 codeHash);\\n    \\n    function getCodeSize(uint256 _input) external returns (uint256 codeSize);\\n}\\n\",\"keccak256\":\"0x572ca2f8ca5fab4e919a7e21a4df017a1aa07ef5aa501b76093704ca07a483b8\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IContractDeployer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\ninterface IContractDeployer {\\n    event ContractDeployed(address indexed deployerAddress, bytes32 indexed bytecodeHash, address indexed contractAddress);\\n\\n    function getNewAddressCreate2(\\n        address _sender,\\n        bytes32 _bytecodeHash,\\n        bytes32 _salt,\\n        bytes calldata _input\\n    ) external pure returns (address newAddress);\\n \\n    function getNewAddressCreate(\\n        address _sender,\\n        uint256 _senderNonce\\n    ) external pure returns (address newAddress);\\n\\n    function create2 (\\n        bytes32 _salt,\\n        bytes32 _bytecodeHash,\\n        bytes calldata _input\\n    ) external payable returns (address newAddress, bytes memory constructorRevertData);\\n\\n    function create2Account (\\n        bytes32 _salt,\\n        bytes32 _bytecodeHash,\\n        bytes calldata _input\\n    ) external payable returns (address newAddress, bytes memory constructorRevertData);\\n\\n    /// @dev While the `_salt` parameter is not used anywhere here, \\n    /// it is still needed for consistency between `create` and\\n    /// `create2` functions (required by the compiler).\\n    function create (\\n        bytes32 _salt,\\n        bytes32 _bytecodeHash,\\n        bytes calldata _input\\n    ) external payable returns (address newAddress, bytes memory constructorRevertData);\\n\\n    /// @dev While `_salt` is never used here, we leave it here as a parameter\\n    /// for the consistency with the `create` function.\\n    function createAccount (\\n        bytes32 _salt,\\n        bytes32 _bytecodeHash,\\n        bytes calldata _input\\n    ) external payable returns (address newAddress, bytes memory constructorRevertData);\\n}\\n\",\"keccak256\":\"0x893ece6f1e596b211d49bf165c025e30f911bc488ed17f3aa47942e68623589a\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IEthToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\ninterface IEthToken {\\n    function balanceOf(address) external returns (uint256);\\n    \\n    function transferFromTo(address _from, address _to, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xcc052bbb3f9d099a10d2d21c6c698281dfee1b0456422a23c803b6cc30199aea\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IImmutableSimulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\nstruct ImmutableData {\\n    uint256 index;\\n    bytes32 value;\\n}\\n\\ninterface IImmutableSimulator {\\n    function getImmutable(address _dest, uint256 _index) external view returns (bytes32);\\n\\n    function setImmutables(address _dest, ImmutableData[] calldata immutables) external;\\n}\\n\",\"keccak256\":\"0x8352bccfc38618f0b17fe94768ba24cd358ca8dc85b8bbb31d22de7289099fd3\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IKnownCodesStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\ninterface IKnownCodesStorage {\\n    event MarkedAsKnown(bytes32 indexed bytecodeHash, bool indexed sendBytecodeToL1);\\n\\n    function markFactoryDeps(bool _shouldSendToL1, bytes32[] calldata _hashes) external;\\n\\n    function getMarker(bytes32 _hash) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x998a94e76cda5ff9c00a90f5fc352407d575325651754f4586d174a155f5d8cd\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IL1Messenger.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\ninterface IL1Messenger {\\n    // Possibly in the future we will be able to track the messages sent to L1 with \\n    // some hooks in the VM. For now, it is much easier to track them with L2 events.\\n    event L1MessageSent(address indexed _sender, bytes32 indexed _hash, bytes _message);\\n\\n    function sendToL1(bytes memory _message) external returns (bytes32);\\n}\\n\",\"keccak256\":\"0xb7559e0eba5f9e554b2a191975095d8a7cef01da638543c9b49c17e0aefe6950\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/INonceHolder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @author Matter Labs\\n * @dev Interface of the nonce holder contract -- a contract used by the system to ensure\\n * that there is always a unique identifier for a transaction with a particular account (we call it nonce).\\n * In other words, the pair of (address, nonce) should always be unique.\\n * @dev Custom accounts should use methods of this contract to store nonces or other possible unique identifiers \\n * for the transaction.\\n */\\ninterface INonceHolder {\\n    /// @dev Returns the current minimal nonce for account.\\n    function getMinNonce(address _address) external view returns(uint256);\\n\\n    /// @dev Returns the raw version of the current minimal nonce \\n    /// (equal to minNonce + 2^128 * deployment nonce).\\n    function getRawNonce(address _address) external view returns (uint256);\\n\\n    /// @dev Increases the minimal nonce for the msg.sender.\\n    function increaseMinNonce(uint256 _value) external returns (uint256);\\n\\n    /// @dev Sets the nonce value `key` as used.\\n    function setValueUnderNonce(uint256 _key, uint256 _value) external;\\n\\n    /// @dev Gets the value stored inside a custom nonce.\\n    function getValueUnderNonce(uint256 _key) external view returns (uint256);\\n\\n    /// @dev A convenience method to increment the minimal nonce if it is equal\\n    /// to the `_expectedNonce`.\\n    function incrementMinNonceIfEquals(uint256 _expectedNonce) external;\\n\\n    /// @dev Returns the deployment nonce for the accounts used for CREATE opcode.\\n    function getDeploymentNonce(address _address) external view returns (uint256);\\n\\n    /// @dev Increments the deployment nonce for the account and returns the previous one.\\n    function incrementDeploymentNonce(address _address) external returns (uint256);\\n\\n    /// @dev Determines whether a certain nonce has been already used for an account.\\n    function validateNonceUsage(address _address, uint256 _key, bool _shouldBeUsed) external view;\\n}\\n\",\"keccak256\":\"0xaff18a90586919bde65f8191a196ff18f71375a5008dffee9ea2ecbfa1b1d592\",\"license\":\"MIT OR Apache-2.0\"},\"@matterlabs/zksync-contracts/l2/system-contracts/interfaces/ISystemContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @author Matter Labs\\n * @notice Contract that stores some of the context variables, that may be either \\n * block-scoped, tx-scoped or system-wide.\\n */\\ninterface ISystemContext {\\n    function chainId() external view returns (uint256);\\n\\n    function origin() external view returns (address);\\n\\n    function ergsPrice() external view returns (uint256);\\n\\n    function blockErgsLimit() external view returns (uint256);\\n\\n    function coinbase() external view returns (address);\\n\\n    function difficulty() external view returns (uint256);\\n\\n    function msize() external view returns (uint256);\\n\\n    function baseFee() external view returns (uint256);\\n\\n    function blockHash(uint256 _block) external view returns (bytes32);\\n\\n    function getBlockHashEVM(uint256 _block) external view returns (bytes32);\\n\\n    function getBlockNumberAndTimestamp() external view returns (uint256 blockNumber, uint256 blockTimestamp);\\n\\n    // Note, that for now, the implementation of the bootloader allows this variables to \\n    // be incremented multiple times inside a block, so it should not relied upon right now.\\n    function getBlockNumber() external view returns (uint256);\\n\\n    function getBlockTimestamp() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x8e525d99dc4104224f01dfa677b7c0f2bd0d3829b530de346c0b26e008f916b6\",\"license\":\"MIT OR Apache-2.0\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n    /**\\n     * @dev Emitted when the pause is triggered by `account`.\\n     */\\n    event Paused(address account);\\n\\n    /**\\n     * @dev Emitted when the pause is lifted by `account`.\\n     */\\n    event Unpaused(address account);\\n\\n    bool private _paused;\\n\\n    /**\\n     * @dev Initializes the contract in unpaused state.\\n     */\\n    constructor() {\\n        _paused = false;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is not paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    modifier whenNotPaused() {\\n        _requireNotPaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Modifier to make a function callable only when the contract is paused.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    modifier whenPaused() {\\n        _requirePaused();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns true if the contract is paused, and false otherwise.\\n     */\\n    function paused() public view virtual returns (bool) {\\n        return _paused;\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is paused.\\n     */\\n    function _requireNotPaused() internal view virtual {\\n        require(!paused(), \\\"Pausable: paused\\\");\\n    }\\n\\n    /**\\n     * @dev Throws if the contract is not paused.\\n     */\\n    function _requirePaused() internal view virtual {\\n        require(paused(), \\\"Pausable: not paused\\\");\\n    }\\n\\n    /**\\n     * @dev Triggers stopped state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must not be paused.\\n     */\\n    function _pause() internal virtual whenNotPaused {\\n        _paused = true;\\n        emit Paused(_msgSender());\\n    }\\n\\n    /**\\n     * @dev Returns to normal state.\\n     *\\n     * Requirements:\\n     *\\n     * - The contract must be paused.\\n     */\\n    function _unpause() internal virtual whenPaused {\\n        _paused = false;\\n        emit Unpaused(_msgSender());\\n    }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n    // Booleans are more expensive than uint256 or any type that takes up a full\\n    // word because each write operation emits an extra SLOAD to first read the\\n    // slot's contents, replace the bits taken up by the boolean, and then write\\n    // back. This is the compiler's defense against contract upgrades and\\n    // pointer aliasing, and it cannot be disabled.\\n\\n    // The values being non-zero value makes deployment a bit more expensive,\\n    // but in exchange the refund on every call to nonReentrant will be lower in\\n    // amount. Since refunds are capped to a percentage of the total\\n    // transaction's gas, it is best to keep them low in cases like this one, to\\n    // increase the likelihood of the full refund coming into effect.\\n    uint256 private constant _NOT_ENTERED = 1;\\n    uint256 private constant _ENTERED = 2;\\n\\n    uint256 private _status;\\n\\n    constructor() {\\n        _status = _NOT_ENTERED;\\n    }\\n\\n    /**\\n     * @dev Prevents a contract from calling itself, directly or indirectly.\\n     * Calling a `nonReentrant` function from another `nonReentrant`\\n     * function is not supported. It is possible to prevent this from happening\\n     * by making the `nonReentrant` function external, and making it call a\\n     * `private` function that does the actual work.\\n     */\\n    modifier nonReentrant() {\\n        _nonReentrantBefore();\\n        _;\\n        _nonReentrantAfter();\\n    }\\n\\n    function _nonReentrantBefore() private {\\n        // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n        require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n        // Any calls to nonReentrant after this point will fail\\n        _status = _ENTERED;\\n    }\\n\\n    function _nonReentrantAfter() private {\\n        // By storing the original value once again, a refund is triggered (see\\n        // https://eips.ethereum.org/EIPS/eip-2200)\\n        _status = _NOT_ENTERED;\\n    }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"contracts/messaging/MerkleTreeManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnableUpgradeable} from \\\"../shared/ProposedOwnableUpgradeable.sol\\\";\\nimport {MerkleLib} from \\\"./libraries/MerkleLib.sol\\\";\\n\\n/**\\n * @title MerkleTreeManager\\n * @notice Contains a Merkle tree instance and exposes read/write functions for the tree.\\n * @dev On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector.\\n */\\ncontract MerkleTreeManager is ProposedOwnableUpgradeable {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleTreeManager__setArborist_zeroAddress();\\n  error MerkleTreeManager__setArborist_alreadyArborist();\\n\\n  // ============ Events ============\\n\\n  event ArboristUpdated(address previous, address updated);\\n\\n  event LeafInserted(bytes32 root, uint256 count, bytes32 leaf);\\n\\n  event LeavesInserted(bytes32 root, uint256 count, bytes32[] leaves);\\n\\n  // ============ Libraries ============\\n\\n  using MerkleLib for MerkleLib.Tree;\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Core data structure with which this contract is tasked with keeping custody.\\n   * Writable only by the designated arborist.\\n   */\\n  MerkleLib.Tree public tree;\\n\\n  /**\\n   * @notice The arborist contract that has permission to write to this tree.\\n   * @dev This could be the root manager contract or a spoke connector contract, for example.\\n   */\\n  address public arborist;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyArborist() {\\n    require(arborist == msg.sender, \\\"!arborist\\\");\\n    _;\\n  }\\n\\n  // ============ Getters ============\\n\\n  /**\\n   * @notice Returns the current branch.\\n   */\\n  function branch() public view returns (bytes32[32] memory) {\\n    return tree.branch;\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the current root.\\n   */\\n  function root() public view returns (bytes32) {\\n    return tree.root();\\n  }\\n\\n  /**\\n   * @notice Returns the number of inserted leaves in the tree (current index).\\n   */\\n  function count() public view returns (uint256) {\\n    return tree.count;\\n  }\\n\\n  /**\\n   * @notice Convenience getter: returns the root and count.\\n   */\\n  function rootAndCount() public view returns (bytes32, uint256) {\\n    return (tree.root(), tree.count);\\n  }\\n\\n  // ======== Initializer =========\\n\\n  function initialize(address _arborist) public initializer {\\n    __MerkleTreeManager_init(_arborist);\\n    __ProposedOwnable_init();\\n  }\\n\\n  /**\\n   * @dev Initializes MerkleTreeManager instance. Sets the msg.sender as the initial permissioned\\n   */\\n  function __MerkleTreeManager_init(address _arborist) internal onlyInitializing {\\n    __MerkleTreeManager_init_unchained(_arborist);\\n  }\\n\\n  function __MerkleTreeManager_init_unchained(address _arborist) internal onlyInitializing {\\n    arborist = _arborist;\\n  }\\n\\n  // ============ Admin Functions ==============\\n\\n  /**\\n   * @notice Method for the current arborist to assign write permissions to a new arborist.\\n   * @param newArborist The new address to set as the current arborist.\\n   */\\n  function setArborist(address newArborist) external onlyOwner {\\n    if (newArborist == address(0)) revert MerkleTreeManager__setArborist_zeroAddress();\\n    address current = arborist;\\n    if (current == newArborist) revert MerkleTreeManager__setArborist_alreadyArborist();\\n\\n    // Emit updated event\\n    emit ArboristUpdated(current, newArborist);\\n\\n    arborist = newArborist;\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as there is a possibility the\\n   * arborist may change.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ========= Public Functions =========\\n\\n  /**\\n   * @notice Inserts the given leaves into the tree.\\n   * @param leaves The leaves to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32[] memory leaves) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // For > 1 leaf, considerably more efficient to put this tree into memory, conduct operations,\\n    // then re-assign it to storage - *especially* if we have multiple leaves to insert.\\n    MerkleLib.Tree memory _tree = tree;\\n\\n    uint256 leafCount = leaves.length;\\n    for (uint256 i; i < leafCount; ) {\\n      // Insert the new node (using in-memory method).\\n      _tree = _tree.insert(leaves[i]);\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // Write the newly updated tree to storage.\\n    tree = _tree;\\n\\n    // Get return details for convenience.\\n    _count = _tree.count;\\n    // NOTE: Root calculation method currently reads from storage only.\\n    _root = tree.root();\\n\\n    emit LeavesInserted(_root, _count, leaves);\\n  }\\n\\n  /**\\n   * @notice Inserts the given leaf into the tree.\\n   * @param leaf The leaf to be inserted into the tree.\\n   * @return _root Current root for convenience.\\n   * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n   * provided for convenience.\\n   */\\n  function insert(bytes32 leaf) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n    // Insert the new node.\\n    tree = tree.insert(leaf);\\n    _count = tree.count;\\n    _root = tree.root();\\n\\n    emit LeafInserted(_root, _count, leaf);\\n  }\\n\\n  // ============ Upgrade Gap ============\\n  uint256[48] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x6eb338843435d4e859de1c71b9ad458c41aeba79002eaa58a463ef86effda89a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherClient.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Pausable} from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\nimport {WatcherManager} from \\\"./WatcherManager.sol\\\";\\n\\n/**\\n * @notice This contract abstracts the functionality of the watcher manager.\\n * Contracts can inherit this contract to be able to use the watcher manager's shared watcher set.\\n */\\n\\ncontract WatcherClient is ProposedOwnable, Pausable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted when the manager address changes\\n   * @param watcherManager The updated manager\\n   */\\n  event WatcherManagerChanged(address watcherManager);\\n\\n  // ============ Properties ============\\n  /**\\n   * @notice The `WatcherManager` contract governs the watcher allowlist.\\n   * @dev Multiple clients can share a watcher set using the same manager\\n   */\\n  WatcherManager public watcherManager;\\n\\n  // ============ Constructor ============\\n  constructor(address _watcherManager) ProposedOwnable() {\\n    watcherManager = WatcherManager(_watcherManager);\\n  }\\n\\n  // ============ Modifiers ============\\n  /**\\n   * @notice Enforces the sender is the watcher\\n   */\\n  modifier onlyWatcher() {\\n    require(watcherManager.isWatcher(msg.sender), \\\"!watcher\\\");\\n    _;\\n  }\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @notice Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function setWatcherManager(address _watcherManager) external onlyOwner {\\n    require(_watcherManager != address(watcherManager), \\\"already watcher manager\\\");\\n    watcherManager = WatcherManager(_watcherManager);\\n    emit WatcherManagerChanged(_watcherManager);\\n  }\\n\\n  /**\\n   * @notice Owner can unpause contracts if fraud is detected by watchers\\n   */\\n  function unpause() external onlyOwner whenPaused {\\n    _unpause();\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as only the owner\\n   * is able to unpause the contracts. You can still propose `address(0)`,\\n   * but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n\\n  // ============ Watcher fns ============\\n\\n  /**\\n   * @notice Watchers can pause contracts if fraud is detected\\n   */\\n  function pause() external onlyWatcher whenNotPaused {\\n    _pause();\\n  }\\n}\\n\",\"keccak256\":\"0x97b0da2c0317359ef2980d1f3c5fcdd7df2bdacbedf216dcbda521b96124444a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can\\n * inherit to make use of the same watcher set.\\n */\\n\\ncontract WatcherManager is ProposedOwnable {\\n  // ============ Events ============\\n  event WatcherAdded(address watcher);\\n\\n  event WatcherRemoved(address watcher);\\n\\n  // ============ Properties ============\\n  mapping(address => bool) public isWatcher;\\n\\n  // ============ Constructor ============\\n  constructor() ProposedOwnable() {\\n    _setOwner(msg.sender);\\n  }\\n\\n  // ============ Modifiers ============\\n\\n  // ============ Admin fns ============\\n  /**\\n   * @dev Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function addWatcher(address _watcher) external onlyOwner {\\n    require(!isWatcher[_watcher], \\\"already watcher\\\");\\n    isWatcher[_watcher] = true;\\n    emit WatcherAdded(_watcher);\\n  }\\n\\n  /**\\n   * @dev Owner can unenroll a watcher (abilities are defined by inheriting contracts)\\n   */\\n  function removeWatcher(address _watcher) external onlyOwner {\\n    require(isWatcher[_watcher], \\\"!exist\\\");\\n    delete isWatcher[_watcher];\\n    emit WatcherRemoved(_watcher);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as the watcher griefing\\n   * vector exists. You can still propose `address(0)`, but it will never be accepted.\\n   */\\n  function renounceOwnership() public virtual override onlyOwner {}\\n}\\n\",\"keccak256\":\"0x94d9db4cd19453c9047164f697011163a42a6e12f9b2e1d7fbcfb35a7d021318\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/Connector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IConnector} from \\\"../interfaces/IConnector.sol\\\";\\n\\n/**\\n * @title Connector\\n * @author Connext Labs, Inc.\\n * @notice This contract has the messaging interface functions used by all connectors.\\n *\\n * @dev This contract stores information about mirror connectors, but can be used as a\\n * base for contracts that do not have a mirror (i.e. the connector handling messaging on\\n * mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\\n * will be empty\\n *\\n * @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\\n * or `mirrorGas`\\n */\\nabstract contract Connector is ProposedOwnable, IConnector {\\n  // ========== Custom Errors ===========\\n\\n  error Connector__processMessage_notUsed();\\n\\n  // ============ Events ============\\n\\n  event NewConnector(\\n    uint32 indexed domain,\\n    uint32 indexed mirrorDomain,\\n    address amb,\\n    address rootManager,\\n    address mirrorConnector\\n  );\\n\\n  event MirrorConnectorUpdated(address previous, address current);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The domain of this Messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable DOMAIN;\\n\\n  /**\\n   * @notice Address of the AMB on this domain.\\n   */\\n  address public immutable AMB;\\n\\n  /**\\n   * @notice RootManager contract address.\\n   */\\n  address public immutable ROOT_MANAGER;\\n\\n  /**\\n   * @notice The domain of the corresponding messaging (i.e. Connector) contract.\\n   */\\n  uint32 public immutable MIRROR_DOMAIN;\\n\\n  /**\\n   * @notice Connector on L2 for L1 connectors, and vice versa.\\n   */\\n  address public mirrorConnector;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered AMB\\n   */\\n  modifier onlyAMB() {\\n    require(msg.sender == AMB, \\\"!AMB\\\");\\n    _;\\n  }\\n\\n  /**\\n   * @notice Errors if the msg.sender is not the registered ROOT_MANAGER\\n   */\\n  modifier onlyRootManager() {\\n    // NOTE: RootManager will be zero address for spoke connectors.\\n    // Only root manager can dispatch a message to spokes/L2s via the hub connector.\\n    require(msg.sender == ROOT_MANAGER, \\\"!rootManager\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new HubConnector instance\\n   * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n   * for optimism, there is one connector on optimism and one connector on mainnet)\\n   * @param _domain The domain this connector lives on\\n   * @param _mirrorDomain The spoke domain\\n   * @param _amb The address of the amb on the domain this connector lives on\\n   * @param _rootManager The address of the RootManager on mainnet\\n   * @param _mirrorConnector The address of the spoke connector\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector\\n  ) ProposedOwnable() {\\n    // set the owner\\n    _setOwner(msg.sender);\\n\\n    // sanity checks on values\\n    require(_domain != 0, \\\"empty domain\\\");\\n    require(_rootManager != address(0), \\\"empty rootManager\\\");\\n    // see note at top of contract on why the mirror values are not sanity checked\\n\\n    // set immutables\\n    DOMAIN = _domain;\\n    AMB = _amb;\\n    ROOT_MANAGER = _rootManager;\\n    MIRROR_DOMAIN = _mirrorDomain;\\n    // set mutables if defined\\n    if (_mirrorConnector != address(0)) {\\n      _setMirrorConnector(_mirrorConnector);\\n    }\\n\\n    emit NewConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector);\\n  }\\n\\n  // ============ Receivable ============\\n  /**\\n   * @notice Connectors may need to receive native asset to handle fees when sending a\\n   * message\\n   */\\n  receive() external payable {}\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Sets the address of the l2Connector for this domain\\n   */\\n  function setMirrorConnector(address _mirrorConnector) public onlyOwner {\\n    _setMirrorConnector(_mirrorConnector);\\n  }\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice Processes a message received by an AMB\\n   * @dev This is called by AMBs to process messages originating from mirror connector\\n   */\\n  function processMessage(bytes memory _data) external virtual onlyAMB {\\n    _processMessage(_data);\\n    emit MessageProcessed(_data, msg.sender);\\n  }\\n\\n  /**\\n   * @notice Checks the cross domain sender for a given address\\n   */\\n  function verifySender(address _expected) external returns (bool) {\\n    return _verifySender(_expected);\\n  }\\n\\n  // ============ Virtual Functions ============\\n\\n  /**\\n   * @notice This function is used by the Connext contract on the l2 domain to send a message to the\\n   * l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\\n   * @param _data The contents of the message\\n   * @param _encodedData Data used to send the message; specific to connector\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal virtual;\\n\\n  /**\\n   * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n   * root generated on the l2 domain.\\n   */\\n  function _processMessage(\\n    bytes memory /* _data */\\n  ) internal virtual {\\n    // By default, reverts. This is to ensure the call path is not used unless this function is\\n    // overridden by the inheriting class\\n    revert Connector__processMessage_notUsed();\\n  }\\n\\n  /**\\n   * @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\\n   * is the expected address.\\n   * @dev Should be overridden by the implementing Connector contract.\\n   */\\n  function _verifySender(address _expected) internal virtual returns (bool);\\n\\n  // ============ Private Functions ============\\n\\n  function _setMirrorConnector(address _mirrorConnector) internal virtual {\\n    emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\\n    mirrorConnector = _mirrorConnector;\\n  }\\n}\\n\",\"keccak256\":\"0x08d4077a1b5caf9f46491206064bb24bee467dd741b42fed3d30a608eea83368\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/ConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IConnectorManager} from \\\"../interfaces/IConnectorManager.sol\\\";\\nimport {IOutbox} from \\\"../interfaces/IOutbox.sol\\\";\\n\\n/**\\n * @notice This is an interface to allow the `Messaging` contract to be used\\n * as a `XappConnectionManager` on all router contracts.\\n *\\n * @dev Each nomad router contract has a `XappConnectionClient`, which references a\\n * XappConnectionManager to get the `Home` (outbox) and approved `Replica` (inbox)\\n * instances. At any point the client can replace the manager it's pointing to,\\n * changing the underlying messaging connection.\\n */\\nabstract contract ConnectorManager is IConnectorManager {\\n  constructor() {}\\n\\n  function home() public view returns (IOutbox) {\\n    return IOutbox(address(this));\\n  }\\n\\n  function isReplica(address _potentialReplica) public view returns (bool) {\\n    return _potentialReplica == address(this);\\n  }\\n\\n  function localDomain() external view virtual returns (uint32);\\n}\\n\",\"keccak256\":\"0x0112a527de062459aadfc2c8aa59a81c379d53c0f646f7869c6250e343ba91be\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/SpokeConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ReentrancyGuard} from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {ExcessivelySafeCall} from \\\"../../shared/libraries/ExcessivelySafeCall.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {MerkleLib} from \\\"../libraries/MerkleLib.sol\\\";\\nimport {Message} from \\\"../libraries/Message.sol\\\";\\nimport {RateLimited} from \\\"../libraries/RateLimited.sol\\\";\\n\\nimport {MerkleTreeManager} from \\\"../MerkleTreeManager.sol\\\";\\nimport {WatcherClient} from \\\"../WatcherClient.sol\\\";\\n\\nimport {Connector, ProposedOwnable} from \\\"./Connector.sol\\\";\\nimport {ConnectorManager} from \\\"./ConnectorManager.sol\\\";\\n\\n/**\\n * @title SpokeConnector\\n * @author Connext Labs, Inc.\\n * @notice This contract implements the messaging functions needed on the spoke-side of a given AMB.\\n * The SpokeConnector extends the HubConnector functionality by being able to send, store, and prove\\n * messages.\\n *\\n * @dev If you are deploying this contract to mainnet, then the mirror values stored in the HubConnector\\n * will be unused\\n */\\nabstract contract SpokeConnector is Connector, ConnectorManager, WatcherClient, RateLimited, ReentrancyGuard {\\n  // ============ Libraries ============\\n\\n  using MerkleLib for MerkleLib.Tree;\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n  using Message for bytes29;\\n\\n  // ============ Events ============\\n\\n  event SenderAdded(address sender);\\n\\n  event SenderRemoved(address sender);\\n\\n  event AggregateRootReceived(bytes32 root);\\n\\n  event AggregateRootRemoved(bytes32 root);\\n\\n  event AggregateRootVerified(bytes32 indexed root);\\n\\n  event Dispatch(bytes32 leaf, uint256 index, bytes32 root, bytes message);\\n\\n  event Process(bytes32 leaf, bool success, bytes returnData);\\n\\n  event DelayBlocksUpdated(uint256 indexed updated, address caller);\\n\\n  /**\\n   * @notice Emitted when funds are withdrawn by the admin\\n   * @dev See comments in `withdrawFunds`\\n   * @param to The recipient of the funds\\n   * @param amount The amount withdrawn\\n   */\\n  event FundsWithdrawn(address indexed to, uint256 amount);\\n\\n  event MessageProven(bytes32 indexed leaf, bytes32 indexed aggregateRoot, uint256 aggregateIndex);\\n\\n  // ============ Structs ============\\n\\n  // Status of Message:\\n  //   0 - None - message has not been proven or processed\\n  //   1 - Proven - message inclusion proof has been validated\\n  //   2 - Processed - message has been dispatched to recipient\\n  enum MessageStatus {\\n    None,\\n    Proven,\\n    Processed\\n  }\\n\\n  /**\\n   * Struct for submitting a proof for a given message. Used in `proveAndProcess` below.\\n   * @param message Bytes of message to be processed. The hash of this message is considered the leaf.\\n   * @param proof Merkle proof of inclusion for given leaf.\\n   * @param index Index of leaf in home's merkle tree.\\n   */\\n  struct Proof {\\n    bytes message;\\n    bytes32[32] path;\\n    uint256 index;\\n  }\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice Number of blocks to delay the processing of a message to allow for watchers to verify\\n   * the validity and pause if necessary.\\n   */\\n  uint256 public delayBlocks;\\n\\n  /**\\n   * @notice MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root\\n   * will be sent crosschain to the hub for aggregation and redistribution.\\n   */\\n  MerkleTreeManager public immutable MERKLE;\\n\\n  /**\\n   * @notice Minimum gas for processing a received message (reserved for handle)\\n   */\\n  uint256 public immutable PROCESS_GAS;\\n\\n  /**\\n   * @notice Reserved gas (to ensure tx completes in case message processing runs out)\\n   */\\n  uint256 public immutable RESERVE_GAS;\\n\\n  /**\\n   * @notice This will hold the commit block for incoming aggregateRoots from the hub chain. Once\\n   * they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can\\n   * be used for proving inclusion of crosschain messages.\\n   *\\n   * @dev NOTE: A commit block of 0 should be considered invalid (it is an empty entry in the\\n   * mapping). We must ALWAYS ensure the value is not 0 before checking whether it has surpassed the\\n   * verification period.\\n   */\\n  mapping(bytes32 => uint256) public pendingAggregateRoots;\\n\\n  /**\\n   * @notice This tracks the roots of the aggregate tree containing outbound roots from all other\\n   * supported domains. The current version is the one that is known to be past the delayBlocks\\n   * time period.\\n   * @dev This root is the root of the tree that is aggregated on mainnet (composed of all the roots\\n   * of previous trees).\\n   */\\n  mapping(bytes32 => bool) public provenAggregateRoots;\\n\\n  /**\\n   * @notice This tracks whether the root has been proven to exist within the given aggregate root.\\n   * @dev Tracking this is an optimization so you dont have to prove inclusion of the same constituent\\n   * root many times.\\n   */\\n  mapping(bytes32 => bool) public provenMessageRoots;\\n\\n  /**\\n   * @notice This mapping records all message roots that have already been sent in order to prevent\\n   * redundant message roots from being sent to hub.\\n   */\\n  mapping(bytes32 => bool) public sentMessageRoots;\\n\\n  /**\\n   * @dev This is used for the `onlyAllowlistedSender` modifier, which gates who\\n   * can send messages using `dispatch`.\\n   */\\n  mapping(address => bool) public allowlistedSenders;\\n\\n  /**\\n   * @notice domain => next available nonce for the domain.\\n   */\\n  mapping(uint32 => uint32) public nonces;\\n\\n  /**\\n   * @notice Mapping of message leaves to MessageStatus, keyed on leaf.\\n   */\\n  mapping(bytes32 => MessageStatus) public messages;\\n\\n  // ============ Modifiers ============\\n\\n  modifier onlyAllowlistedSender() {\\n    require(allowlistedSenders[msg.sender], \\\"!allowlisted\\\");\\n    _;\\n  }\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Creates a new SpokeConnector instance.\\n   * @param _domain The domain this connector lives on.\\n   * @param _mirrorDomain The hub domain.\\n   * @param _amb The address of the AMB on the spoke domain this connector lives on.\\n   * @param _rootManager The address of the RootManager on the hub.\\n   * @param _mirrorConnector The address of the spoke connector.\\n   * @param _processGas The gas costs used in `handle` to ensure meaningful state changes can occur (minimum gas needed\\n   * to handle transaction).\\n   * @param _reserveGas The gas costs reserved when `handle` is called to ensure failures are handled.\\n   * @param _delayBlocks The delay for the validation period for incoming messages in blocks.\\n   * @param _merkle The address of the MerkleTreeManager on this spoke domain.\\n   * @param _watcherManager The address of the WatcherManager to whom this connector is a client.\\n   */\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    uint256 _processGas,\\n    uint256 _reserveGas,\\n    uint256 _delayBlocks,\\n    address _merkle,\\n    address _watcherManager\\n  )\\n    ConnectorManager()\\n    Connector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector)\\n    WatcherClient(_watcherManager)\\n  {\\n    // Sanity check: constants are reasonable.\\n    require(_processGas > 850_000 - 1, \\\"!process gas\\\");\\n    require(_reserveGas > 15_000 - 1, \\\"!reserve gas\\\");\\n    PROCESS_GAS = _processGas;\\n    RESERVE_GAS = _reserveGas;\\n\\n    require(_merkle != address(0), \\\"!zero merkle\\\");\\n    MERKLE = MerkleTreeManager(_merkle);\\n\\n    delayBlocks = _delayBlocks;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Adds a sender to the allowlist.\\n   * @dev Only allowlisted routers (senders) can call `dispatch`.\\n   */\\n  function addSender(address _sender) public onlyOwner {\\n    allowlistedSenders[_sender] = true;\\n    emit SenderAdded(_sender);\\n  }\\n\\n  /**\\n   * @notice Removes a sender from the allowlist.\\n   * @dev Only allowlisted routers (senders) can call `dispatch`.\\n   */\\n  function removeSender(address _sender) public onlyOwner {\\n    delete allowlistedSenders[_sender];\\n    emit SenderRemoved(_sender);\\n  }\\n\\n  /**\\n   * @notice Set the `delayBlocks`, the period in blocks over which an incoming message\\n   * is verified.\\n   */\\n  function setDelayBlocks(uint256 _delayBlocks) public onlyOwner {\\n    require(_delayBlocks != delayBlocks, \\\"!delayBlocks\\\");\\n    emit DelayBlocksUpdated(_delayBlocks, msg.sender);\\n    delayBlocks = _delayBlocks;\\n  }\\n\\n  /**\\n   * @notice Set the rate limit (number of blocks) at which we can send messages from\\n   * this contract to the hub chain using the `send` method.\\n   * @dev Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\\n   * @param _rateLimit The number of blocks require between sending messages. If set to\\n   * 0, rate limiting for this spoke connector will be disabled.\\n   */\\n  function setRateLimitBlocks(uint256 _rateLimit) public onlyOwner {\\n    _setRateLimitBlocks(_rateLimit);\\n  }\\n\\n  /**\\n   * @notice Manually remove a pending aggregateRoot by owner if the contract is paused.\\n   * @dev This method is required for handling fraud cases in the current construction.\\n   * @param _fraudulentRoot Target fraudulent root that should be erased from the\\n   * `pendingAggregateRoots` mapping.\\n   */\\n  function removePendingAggregateRoot(bytes32 _fraudulentRoot) public onlyOwner whenPaused {\\n    // Sanity check: pending aggregate root exists.\\n    require(pendingAggregateRoots[_fraudulentRoot] != 0, \\\"aggregateRoot !exists\\\");\\n    delete pendingAggregateRoots[_fraudulentRoot];\\n    emit AggregateRootRemoved(_fraudulentRoot);\\n  }\\n\\n  /**\\n   * @notice This function should be callable by owner, and send funds trapped on\\n   * a connector to the provided recipient.\\n   * @dev Withdraws the entire balance of the contract.\\n   *\\n   * @param _to The recipient of the funds withdrawn\\n   */\\n  function withdrawFunds(address _to) public onlyOwner {\\n    uint256 amount = address(this).balance;\\n    Address.sendValue(payable(_to), amount);\\n    emit FundsWithdrawn(_to, amount);\\n  }\\n\\n  /**\\n   * @notice Remove ability to renounce ownership\\n   * @dev Renounce ownership should be impossible as long as it is impossible in the\\n   * WatcherClient, and as long as only the owner can remove pending roots in case of\\n   * fraud.\\n   */\\n  function renounceOwnership() public virtual override(ProposedOwnable, WatcherClient) onlyOwner {}\\n\\n  // ============ Public Functions ============\\n\\n  /**\\n   * @notice This returns the root of all messages with the origin domain as this domain (i.e.\\n   * all outbound messages)\\n   */\\n  function outboundRoot() external view returns (bytes32) {\\n    return MERKLE.root();\\n  }\\n\\n  /**\\n   * @notice This provides the implementation for what is defined in the ConnectorManager\\n   * to avoid storing the domain redundantly\\n   */\\n  function localDomain() external view override returns (uint32) {\\n    return DOMAIN;\\n  }\\n\\n  /**\\n   * @notice This returns the root of all messages with the origin domain as this domain (i.e.\\n   * all outbound messages)\\n   */\\n  function send(bytes memory _encodedData) external payable whenNotPaused rateLimited {\\n    bytes32 root = MERKLE.root();\\n    require(sentMessageRoots[root] == false, \\\"root already sent\\\");\\n    bytes memory _data = abi.encodePacked(root);\\n    _sendMessage(_data, _encodedData);\\n    sentMessageRoots[root] = true;\\n    emit MessageSent(_data, _encodedData, msg.sender);\\n  }\\n\\n  /**\\n   * @notice This function adds transfers to the outbound transfer merkle tree.\\n   * @dev The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \\\"hub\\\"),\\n   * it will be combined into a single aggregate root by RootManager (along with outbound roots from other\\n   * chains). This aggregate root will be redistributed to all destination chains.\\n   *\\n   * NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external onlyAllowlistedSender returns (bytes32, bytes memory) {\\n    // Get the next nonce for the destination domain, then increment it.\\n    uint32 _nonce = nonces[_destinationDomain]++;\\n\\n    // Format the message into packed bytes.\\n    bytes memory _message = Message.formatMessage(\\n      DOMAIN,\\n      TypeCasts.addressToBytes32(msg.sender),\\n      _nonce,\\n      _destinationDomain,\\n      _recipientAddress,\\n      _messageBody\\n    );\\n\\n    // Insert the hashed message into the Merkle tree.\\n    bytes32 _messageHash = keccak256(_message);\\n\\n    // Returns the root calculated after insertion of message, needed for events for\\n    // watchers\\n    (bytes32 _root, uint256 _count) = MERKLE.insert(_messageHash);\\n\\n    // Emit Dispatch event with message information.\\n    // NOTE: Current leaf index is count - 1 since new leaf has already been inserted.\\n    emit Dispatch(_messageHash, _count - 1, _root, _message);\\n    return (_messageHash, _message);\\n  }\\n\\n  /**\\n   * @notice Must be able to call the `handle` function on the BridgeRouter contract. This is called\\n   * on the destination domain to handle incoming messages.\\n   *\\n   * Proving:\\n   * Calculates the expected inbound root from an origin chain given a leaf (message hash),\\n   * the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this\\n   * calculated inbound root is included in the current aggregateRoot, given its index in the aggregator\\n   * tree and the proof of inclusion.\\n   *\\n   * Processing:\\n   * After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for\\n   * execution.\\n   *\\n   * @dev Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they\\n   * must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.\\n   * @dev Intended to be called by the relayer at specific intervals during runtime.\\n   * @dev Will record a calculated root as having been proven if we've already proven that it was included\\n   * in the aggregateRoot.\\n   *\\n   * @param _proofs Batch of Proofs containing messages for proving/processing.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   */\\n  function proveAndProcess(\\n    Proof[] calldata _proofs,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) external whenNotPaused nonReentrant {\\n    // Sanity check: proofs are included.\\n    require(_proofs.length > 0, \\\"!proofs\\\");\\n\\n    // Optimization: calculate the inbound root for the first message in the batch and validate that\\n    // it's included in the aggregator tree. We can use this as a reference for every calculation\\n    // below to minimize storage access calls.\\n    bytes32 _messageHash = keccak256(_proofs[0].message);\\n    // TODO: Could use an array of sharedRoots so you can submit a message batch of messages with\\n    // different origins.\\n    bytes32 _messageRoot = calculateMessageRoot(_messageHash, _proofs[0].path, _proofs[0].index);\\n\\n    // Handle proving this message root is included in the target aggregate root.\\n    proveMessageRoot(_messageRoot, _aggregateRoot, _aggregatePath, _aggregateIndex);\\n    // Assuming the inbound message root was proven, the first message is now considered proven.\\n    messages[_messageHash] = MessageStatus.Proven;\\n\\n    // Now we handle proving all remaining messages in the batch - they should all share the same\\n    // inbound root!\\n    uint256 len = _proofs.length;\\n    for (uint32 i = 1; i < len; ) {\\n      _messageHash = keccak256(_proofs[i].message);\\n      bytes32 _calculatedRoot = calculateMessageRoot(_messageHash, _proofs[i].path, _proofs[i].index);\\n      // Make sure this root matches the validated inbound root.\\n      require(_calculatedRoot == _messageRoot, \\\"!sharedRoot\\\");\\n      // Message is proven!\\n      messages[_messageHash] = MessageStatus.Proven;\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n\\n    // All messages have been proven. We iterate separately here to process each message in the batch.\\n    // NOTE: Going through the proving phase for all messages in the batch BEFORE processing ensures\\n    // we hit reverts before we consume unbounded gas from `process` calls.\\n    for (uint32 i = 0; i < len; ) {\\n      process(_proofs[i].message);\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n  }\\n\\n  // ============ Private Functions ============\\n\\n  /**\\n   * @notice This is either called by the Connector (AKA `this`) on the spoke (L2) chain after retrieving\\n   * latest `aggregateRoot` from the AMB (sourced from mainnet) OR called by the AMB directly.\\n   * @dev Must check the msg.sender on the origin chain to ensure only the root manager is passing\\n   * these roots.\\n   */\\n  function receiveAggregateRoot(bytes32 _newRoot) internal {\\n    require(_newRoot != bytes32(\\\"\\\"), \\\"new root empty\\\");\\n    require(pendingAggregateRoots[_newRoot] == 0, \\\"root already pending\\\");\\n    require(!provenAggregateRoots[_newRoot], \\\"root already proven\\\");\\n\\n    pendingAggregateRoots[_newRoot] = block.number;\\n    emit AggregateRootReceived(_newRoot);\\n  }\\n\\n  /**\\n   * @notice Checks whether the given aggregate root has surpassed the verification period.\\n   * @dev Reverts if the given aggregate root is invalid (does not exist) OR has not surpassed\\n   * verification period.\\n   * @dev If the target aggregate root is pending and HAS surpassed the verification period, then we will\\n   * move it over to the proven mapping.\\n   * @param _aggregateRoot Target aggregate root to verify.\\n   */\\n  function verifyAggregateRoot(bytes32 _aggregateRoot) internal {\\n    // 0. Sanity check: root is not 0.\\n    require(_aggregateRoot != bytes32(\\\"\\\"), \\\"aggregateRoot empty\\\");\\n\\n    // 1. Check to see if the target *aggregate* root has already been proven.\\n    if (provenAggregateRoots[_aggregateRoot]) {\\n      return; // Short circuit if this root is proven.\\n    }\\n\\n    // 2. The target aggregate root must be pending. Aggregate root commit block entry MUST exist.\\n    uint256 _aggregateRootCommitBlock = pendingAggregateRoots[_aggregateRoot];\\n    require(_aggregateRootCommitBlock != 0, \\\"aggregateRoot !exist\\\");\\n\\n    // 3. Pending aggregate root has surpassed the `delayBlocks` verification period.\\n    require(block.number - _aggregateRootCommitBlock >= delayBlocks, \\\"aggregateRoot !verified\\\");\\n\\n    // 4. The target aggregate root has surpassed verification period, we can move it over to the\\n    // proven mapping.\\n    provenAggregateRoots[_aggregateRoot] = true;\\n    emit AggregateRootVerified(_aggregateRoot);\\n    // May as well delete the pending aggregate root entry for the gas refund: it should no longer\\n    // be needed.\\n    delete pendingAggregateRoots[_aggregateRoot];\\n  }\\n\\n  /**\\n   * @notice Checks whether a given message is valid. If so, calculates the expected inbound root from an\\n   * origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion.\\n   * @dev Reverts if message's MessageStatus != None (i.e. if message was already proven or processed).\\n   *\\n   * @param _messageHash Leaf (message hash) that requires proving.\\n   * @param _messagePath Merkle path of inclusion for the leaf.\\n   * @param _messageIndex Index of leaf in the merkle tree on the origin chain of the message.\\n   * @return bytes32 Calculated root.\\n   **/\\n  function calculateMessageRoot(\\n    bytes32 _messageHash,\\n    bytes32[32] calldata _messagePath,\\n    uint256 _messageIndex\\n  ) internal view returns (bytes32) {\\n    // Ensure that the given message has not already been proven and processed.\\n    require(messages[_messageHash] == MessageStatus.None, \\\"!MessageStatus.None\\\");\\n    // Calculate the expected inbound root from the message origin based on the proof.\\n    // NOTE: Assuming a valid message was submitted with correct path/index, this should be an inbound root\\n    // that the hub has received. If the message were invalid, the root calculated here would not exist in the\\n    // aggregate root.\\n    return MerkleLib.branchRoot(_messageHash, _messagePath, _messageIndex);\\n  }\\n\\n  /**\\n   * @notice Prove an inbound message root from another chain is included in the target aggregateRoot.\\n   * @param _messageRoot The message root we want to verify.\\n   * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n   * already been delivered to this spoke connector contract and surpassed the validation period.\\n   * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n   * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n   */\\n  function proveMessageRoot(\\n    bytes32 _messageRoot,\\n    bytes32 _aggregateRoot,\\n    bytes32[32] calldata _aggregatePath,\\n    uint256 _aggregateIndex\\n  ) internal {\\n    // 0. Check to see if the root for this batch has already been proven.\\n    if (provenMessageRoots[_messageRoot]) {\\n      // NOTE: It seems counter-intuitive, but we do NOT need to prove the given `_aggregateRoot` param\\n      // is valid IFF the `_messageRoot` has already been proven; we know that the `_messageRoot` has to\\n      // have been included in *some* proven aggregate root historically.\\n      return;\\n    }\\n\\n    // 1. Ensure aggregate root has been proven.\\n    verifyAggregateRoot(_aggregateRoot);\\n\\n    // 2. Calculate an aggregate root, given this inbound root (as leaf), path (proof), and index.\\n    bytes32 _calculatedAggregateRoot = MerkleLib.branchRoot(_messageRoot, _aggregatePath, _aggregateIndex);\\n\\n    // 3. Check to make sure it matches the current aggregate root we have stored.\\n    require(_calculatedAggregateRoot == _aggregateRoot, \\\"invalid inboundRoot\\\");\\n\\n    // This inbound root has been proven. We should specify that to optimize future calls.\\n    provenMessageRoots[_messageRoot] = true;\\n    emit MessageProven(_messageRoot, _aggregateRoot, _aggregateIndex);\\n  }\\n\\n  /**\\n   * @notice Given formatted message, attempts to dispatch message payload to end recipient.\\n   * @dev Recipient must implement a `handle` method (refer to IMessageRecipient.sol)\\n   * Reverts if formatted message's destination domain is not the Replica's domain,\\n   * if message has not been proven,\\n   * or if not enough gas is provided for the dispatch transaction.\\n   * @param _message Formatted message\\n   * @return _success TRUE iff dispatch transaction succeeded\\n   */\\n  function process(bytes memory _message) internal returns (bool _success) {\\n    bytes29 _m = _message.ref(0);\\n    // ensure message was meant for this domain\\n    require(_m.destination() == DOMAIN, \\\"!destination\\\");\\n    // ensure message has been proven\\n    bytes32 _messageHash = _m.keccak();\\n    require(messages[_messageHash] == MessageStatus.Proven, \\\"!proven\\\");\\n    // check re-entrancy guard\\n    // require(entered == 1, \\\"!reentrant\\\");\\n    // entered = 0;\\n    // update message status as processed\\n    messages[_messageHash] = MessageStatus.Processed;\\n    // A call running out of gas TYPICALLY errors the whole tx. We want to\\n    // a) ensure the call has a sufficient amount of gas to make a\\n    //    meaningful state change.\\n    // b) ensure that if the subcall runs out of gas, that the tx as a whole\\n    //    does not revert (i.e. we still mark the message processed)\\n    // To do this, we require that we have enough gas to process\\n    // and still return. We then delegate only the minimum processing gas.\\n    require(gasleft() > PROCESS_GAS + RESERVE_GAS - 1, \\\"!gas\\\");\\n    // get the message recipient\\n    address _recipient = _m.recipientAddress();\\n    // set up for assembly call\\n    uint256 _gas = PROCESS_GAS;\\n    uint16 _maxCopy = 256;\\n    // allocate memory for returndata\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    bytes memory _calldata = abi.encodeWithSignature(\\n      \\\"handle(uint32,uint32,bytes32,bytes)\\\",\\n      _m.origin(),\\n      _m.nonce(),\\n      _m.sender(),\\n      _m.body().clone()\\n    );\\n\\n    (_success, _returnData) = ExcessivelySafeCall.excessivelySafeCall(_recipient, _gas, 0, _maxCopy, _calldata);\\n\\n    // emit process results\\n    emit Process(_messageHash, _success, _returnData);\\n  }\\n}\\n\",\"keccak256\":\"0xde9ea6f462f33e62618d069fddaeed24268d13cfe03abc9dd388824a5e4e3896\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// Importing interfaces and addresses of the system contracts\\nimport \\\"@matterlabs/zksync-contracts/l2/system-contracts/Constants.sol\\\";\\n\\nimport {SpokeConnector} from \\\"../SpokeConnector.sol\\\";\\nimport {Connector} from \\\"../Connector.sol\\\";\\n\\ncontract ZkSyncSpokeConnector is SpokeConnector {\\n  // ============ Constructor ============\\n  constructor(\\n    uint32 _domain,\\n    uint32 _mirrorDomain,\\n    address _amb,\\n    address _rootManager,\\n    address _mirrorConnector,\\n    uint256 _processGas,\\n    uint256 _reserveGas,\\n    uint256 _delayBlocks,\\n    address _merkle,\\n    address _watcherManager\\n  )\\n    SpokeConnector(\\n      _domain,\\n      _mirrorDomain,\\n      _amb,\\n      _rootManager,\\n      _mirrorConnector,\\n      _processGas,\\n      _reserveGas,\\n      _delayBlocks,\\n      _merkle,\\n      _watcherManager\\n    )\\n  {}\\n\\n  // ============ Override Fns ============\\n  function _verifySender(address _expected) internal view override returns (bool) {\\n    // NOTE: msg.sender is preserved for L1 -> L2 calls. See the L2 contract in the tutorial\\n    // here: https://v2-docs.zksync.io/dev/tutorials/cross-chain-tutorial.html#l2-counter\\n\\n    // NOTE: if an attacker controls the msg.sender, they could insert malicious roots.\\n    // From the zksync team:\\n    // 'We have a different address generation schema that would not allow address\\n    // to be claimed on L2 by an adversary. Even if you deploy same address and same\\n    // private key it would still be different'\\n    return msg.sender == _expected;\\n  }\\n\\n  /**\\n   * @dev Sends `outboundRoot` to root manager on l1\\n   */\\n  function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\\n    // Should not include specialized calldata\\n    require(_encodedData.length == 0, \\\"!data length\\\");\\n    // Dispatch message through zkSync AMB\\n    L1_MESSENGER_CONTRACT.sendToL1(_data);\\n  }\\n\\n  /**\\n   * @dev Handles an incoming `aggregateRoot`\\n   * NOTE: Could store latest root sent and prove aggregate root\\n   */\\n  function _processMessage(bytes memory _data) internal override {\\n    // enforce this came from connector on l2\\n    require(_verifySender(mirrorConnector), \\\"!mirrorConnector\\\");\\n    // get the data (should be the aggregate root)\\n    require(_data.length == 32, \\\"!length\\\");\\n    // set the aggregate root\\n    receiveAggregateRoot(bytes32(_data));\\n  }\\n}\\n\",\"keccak256\":\"0x2cd9d270ddd2a14f0863ec695a8a97236bb6097f93c4c2661049cc6714e99de9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/MerkleLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MerkleLib\\n * @author Illusory Systems Inc.\\n * @notice An incremental merkle tree modeled on the eth2 deposit contract.\\n **/\\nlibrary MerkleLib {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleLib__insert_treeIsFull();\\n\\n  // ============ Constants =============\\n\\n  uint256 internal constant TREE_DEPTH = 32;\\n  uint256 internal constant MAX_LEAVES = 2**TREE_DEPTH - 1;\\n\\n  /**\\n   * @dev Z_i represent the hash values at different heights for a binary tree with leaf values equal to `0`.\\n   * (e.g. Z_1 is the keccak256 hash of (0x0, 0x0), Z_2 is the keccak256 hash of (Z_1, Z_1), etc...)\\n   * Z_0 is the bottom of the 33-layer tree, Z_32 is the top (i.e. root).\\n   * Used to shortcut calculation in root calculation methods below.\\n   */\\n  bytes32 internal constant Z_0 = hex\\\"0000000000000000000000000000000000000000000000000000000000000000\\\";\\n  bytes32 internal constant Z_1 = hex\\\"ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5\\\";\\n  bytes32 internal constant Z_2 = hex\\\"b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30\\\";\\n  bytes32 internal constant Z_3 = hex\\\"21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85\\\";\\n  bytes32 internal constant Z_4 = hex\\\"e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344\\\";\\n  bytes32 internal constant Z_5 = hex\\\"0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d\\\";\\n  bytes32 internal constant Z_6 = hex\\\"887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968\\\";\\n  bytes32 internal constant Z_7 = hex\\\"ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83\\\";\\n  bytes32 internal constant Z_8 = hex\\\"9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af\\\";\\n  bytes32 internal constant Z_9 = hex\\\"cefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0\\\";\\n  bytes32 internal constant Z_10 = hex\\\"f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5\\\";\\n  bytes32 internal constant Z_11 = hex\\\"f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892\\\";\\n  bytes32 internal constant Z_12 = hex\\\"3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c\\\";\\n  bytes32 internal constant Z_13 = hex\\\"c1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb\\\";\\n  bytes32 internal constant Z_14 = hex\\\"5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc\\\";\\n  bytes32 internal constant Z_15 = hex\\\"da7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2\\\";\\n  bytes32 internal constant Z_16 = hex\\\"2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f\\\";\\n  bytes32 internal constant Z_17 = hex\\\"e1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a\\\";\\n  bytes32 internal constant Z_18 = hex\\\"5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0\\\";\\n  bytes32 internal constant Z_19 = hex\\\"b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0\\\";\\n  bytes32 internal constant Z_20 = hex\\\"c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2\\\";\\n  bytes32 internal constant Z_21 = hex\\\"f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9\\\";\\n  bytes32 internal constant Z_22 = hex\\\"5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377\\\";\\n  bytes32 internal constant Z_23 = hex\\\"4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652\\\";\\n  bytes32 internal constant Z_24 = hex\\\"cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef\\\";\\n  bytes32 internal constant Z_25 = hex\\\"0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d\\\";\\n  bytes32 internal constant Z_26 = hex\\\"b8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0\\\";\\n  bytes32 internal constant Z_27 = hex\\\"838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e\\\";\\n  bytes32 internal constant Z_28 = hex\\\"662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e\\\";\\n  bytes32 internal constant Z_29 = hex\\\"388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322\\\";\\n  bytes32 internal constant Z_30 = hex\\\"93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735\\\";\\n  bytes32 internal constant Z_31 = hex\\\"8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9\\\";\\n  bytes32 internal constant Z_32 = hex\\\"27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757\\\";\\n\\n  // ============= Structs ==============\\n\\n  /**\\n   * @notice Struct representing incremental merkle tree. Contains current\\n   * branch and the number of inserted leaves in the tree.\\n   **/\\n  struct Tree {\\n    bytes32[TREE_DEPTH] branch;\\n    uint256 count;\\n  }\\n\\n  // ========= Write Methods =========\\n\\n  /**\\n   * @notice Inserts a given node (leaf) into merkle tree. Operates on an in-memory tree and\\n   * returns an updated version of that tree.\\n   * @dev Reverts if the tree is already full.\\n   * @param node Element to insert into tree.\\n   * @return Tree Updated tree.\\n   **/\\n  function insert(Tree memory tree, bytes32 node) internal pure returns (Tree memory) {\\n    // Update tree.count to increase the current count by 1 since we'll be including a new node.\\n    uint256 size = ++tree.count;\\n    if (size > MAX_LEAVES) revert MerkleLib__insert_treeIsFull();\\n\\n    // Loop starting at 0, ending when we've finished inserting the node (i.e. hashing it) into\\n    // the active branch. Each loop we cut size in half, hashing the inserted node up the active\\n    // branch along the way.\\n    for (uint256 i; i < TREE_DEPTH; ) {\\n      // Check if the current size is odd; if so, we set this index in the branch to be the node.\\n      if ((size & 1) == 1) {\\n        // If i > 0, then this node will be a hash of the original node with every layer up\\n        // until layer `i`.\\n        tree.branch[i] = node;\\n        return tree;\\n      }\\n      // If the size is not yet odd, we hash the current index in the tree branch with the node.\\n      node = keccak256(abi.encodePacked(tree.branch[i], node));\\n      size >>= 1; // Cut size in half (statement equivalent to: `size /= 2`).\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // As the loop should always end prematurely with the `return` statement, this code should\\n    // be unreachable. We revert here just to be safe.\\n    revert MerkleLib__insert_treeIsFull();\\n  }\\n\\n  // ========= Read Methods =========\\n\\n  /**\\n   * @notice Calculates and returns tree's current root.\\n   * @return _current bytes32 root.\\n   **/\\n  function root(Tree storage tree) internal view returns (bytes32 _current) {\\n    uint256 _index = tree.count;\\n\\n    if (_index == 0) {\\n      return Z_32;\\n    }\\n\\n    uint256 i;\\n    assembly {\\n      let TREE_SLOT := tree.slot\\n\\n      for {\\n\\n      } true {\\n\\n      } {\\n        for {\\n\\n        } true {\\n\\n        } {\\n          if and(_index, 1) {\\n            mstore(0, sload(TREE_SLOT))\\n            mstore(0x20, Z_0)\\n            _current := keccak256(0, 0x40)\\n            break\\n          }\\n\\n          if and(_index, shl(1, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 1)))\\n            mstore(0x20, Z_1)\\n            _current := keccak256(0, 0x40)\\n            i := 1\\n            break\\n          }\\n\\n          if and(_index, shl(2, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 2)))\\n            mstore(0x20, Z_2)\\n            _current := keccak256(0, 0x40)\\n            i := 2\\n            break\\n          }\\n\\n          if and(_index, shl(3, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 3)))\\n            mstore(0x20, Z_3)\\n            _current := keccak256(0, 0x40)\\n            i := 3\\n            break\\n          }\\n\\n          if and(_index, shl(4, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 4)))\\n            mstore(0x20, Z_4)\\n            _current := keccak256(0, 0x40)\\n            i := 4\\n            break\\n          }\\n\\n          if and(_index, shl(5, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 5)))\\n            mstore(0x20, Z_5)\\n            _current := keccak256(0, 0x40)\\n            i := 5\\n            break\\n          }\\n\\n          if and(_index, shl(6, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 6)))\\n            mstore(0x20, Z_6)\\n            _current := keccak256(0, 0x40)\\n            i := 6\\n            break\\n          }\\n\\n          if and(_index, shl(7, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 7)))\\n            mstore(0x20, Z_7)\\n            _current := keccak256(0, 0x40)\\n            i := 7\\n            break\\n          }\\n\\n          if and(_index, shl(8, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 8)))\\n            mstore(0x20, Z_8)\\n            _current := keccak256(0, 0x40)\\n            i := 8\\n            break\\n          }\\n\\n          if and(_index, shl(9, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 9)))\\n            mstore(0x20, Z_9)\\n            _current := keccak256(0, 0x40)\\n            i := 9\\n            break\\n          }\\n\\n          if and(_index, shl(10, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 10)))\\n            mstore(0x20, Z_10)\\n            _current := keccak256(0, 0x40)\\n            i := 10\\n            break\\n          }\\n\\n          if and(_index, shl(11, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 11)))\\n            mstore(0x20, Z_11)\\n            _current := keccak256(0, 0x40)\\n            i := 11\\n            break\\n          }\\n\\n          if and(_index, shl(12, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 12)))\\n            mstore(0x20, Z_12)\\n            _current := keccak256(0, 0x40)\\n            i := 12\\n            break\\n          }\\n\\n          if and(_index, shl(13, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 13)))\\n            mstore(0x20, Z_13)\\n            _current := keccak256(0, 0x40)\\n            i := 13\\n            break\\n          }\\n\\n          if and(_index, shl(14, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 14)))\\n            mstore(0x20, Z_14)\\n            _current := keccak256(0, 0x40)\\n            i := 14\\n            break\\n          }\\n\\n          if and(_index, shl(15, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 15)))\\n            mstore(0x20, Z_15)\\n            _current := keccak256(0, 0x40)\\n            i := 15\\n            break\\n          }\\n\\n          if and(_index, shl(16, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 16)))\\n            mstore(0x20, Z_16)\\n            _current := keccak256(0, 0x40)\\n            i := 16\\n            break\\n          }\\n\\n          if and(_index, shl(17, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 17)))\\n            mstore(0x20, Z_17)\\n            _current := keccak256(0, 0x40)\\n            i := 17\\n            break\\n          }\\n\\n          if and(_index, shl(18, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 18)))\\n            mstore(0x20, Z_18)\\n            _current := keccak256(0, 0x40)\\n            i := 18\\n            break\\n          }\\n\\n          if and(_index, shl(19, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 19)))\\n            mstore(0x20, Z_19)\\n            _current := keccak256(0, 0x40)\\n            i := 19\\n            break\\n          }\\n\\n          if and(_index, shl(20, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 20)))\\n            mstore(0x20, Z_20)\\n            _current := keccak256(0, 0x40)\\n            i := 20\\n            break\\n          }\\n\\n          if and(_index, shl(21, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 21)))\\n            mstore(0x20, Z_21)\\n            _current := keccak256(0, 0x40)\\n            i := 21\\n            break\\n          }\\n\\n          if and(_index, shl(22, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 22)))\\n            mstore(0x20, Z_22)\\n            _current := keccak256(0, 0x40)\\n            i := 22\\n            break\\n          }\\n\\n          if and(_index, shl(23, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 23)))\\n            mstore(0x20, Z_23)\\n            _current := keccak256(0, 0x40)\\n            i := 23\\n            break\\n          }\\n\\n          if and(_index, shl(24, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 24)))\\n            mstore(0x20, Z_24)\\n            _current := keccak256(0, 0x40)\\n            i := 24\\n            break\\n          }\\n\\n          if and(_index, shl(25, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 25)))\\n            mstore(0x20, Z_25)\\n            _current := keccak256(0, 0x40)\\n            i := 25\\n            break\\n          }\\n\\n          if and(_index, shl(26, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 26)))\\n            mstore(0x20, Z_26)\\n            _current := keccak256(0, 0x40)\\n            i := 26\\n            break\\n          }\\n\\n          if and(_index, shl(27, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 27)))\\n            mstore(0x20, Z_27)\\n            _current := keccak256(0, 0x40)\\n            i := 27\\n            break\\n          }\\n\\n          if and(_index, shl(28, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 28)))\\n            mstore(0x20, Z_28)\\n            _current := keccak256(0, 0x40)\\n            i := 28\\n            break\\n          }\\n\\n          if and(_index, shl(29, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 29)))\\n            mstore(0x20, Z_29)\\n            _current := keccak256(0, 0x40)\\n            i := 29\\n            break\\n          }\\n\\n          if and(_index, shl(30, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 30)))\\n            mstore(0x20, Z_30)\\n            _current := keccak256(0, 0x40)\\n            i := 30\\n            break\\n          }\\n\\n          if and(_index, shl(31, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 31)))\\n            mstore(0x20, Z_31)\\n            _current := keccak256(0, 0x40)\\n            i := 31\\n            break\\n          }\\n\\n          _current := Z_32\\n          i := 32\\n          break\\n        }\\n\\n        if gt(i, 30) {\\n          break\\n        }\\n\\n        {\\n          if lt(i, 1) {\\n            switch and(_index, shl(1, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_1)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 1)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 2) {\\n            switch and(_index, shl(2, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_2)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 2)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 3) {\\n            switch and(_index, shl(3, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_3)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 3)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 4) {\\n            switch and(_index, shl(4, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_4)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 4)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 5) {\\n            switch and(_index, shl(5, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_5)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 5)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 6) {\\n            switch and(_index, shl(6, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_6)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 6)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 7) {\\n            switch and(_index, shl(7, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_7)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 7)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 8) {\\n            switch and(_index, shl(8, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_8)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 8)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 9) {\\n            switch and(_index, shl(9, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_9)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 9)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 10) {\\n            switch and(_index, shl(10, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_10)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 10)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 11) {\\n            switch and(_index, shl(11, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_11)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 11)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 12) {\\n            switch and(_index, shl(12, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_12)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 12)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 13) {\\n            switch and(_index, shl(13, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_13)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 13)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 14) {\\n            switch and(_index, shl(14, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_14)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 14)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 15) {\\n            switch and(_index, shl(15, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_15)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 15)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 16) {\\n            switch and(_index, shl(16, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_16)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 16)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 17) {\\n            switch and(_index, shl(17, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_17)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 17)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 18) {\\n            switch and(_index, shl(18, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_18)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 18)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 19) {\\n            switch and(_index, shl(19, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_19)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 19)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 20) {\\n            switch and(_index, shl(20, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_20)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 20)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 21) {\\n            switch and(_index, shl(21, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_21)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 21)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 22) {\\n            switch and(_index, shl(22, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_22)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 22)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 23) {\\n            switch and(_index, shl(23, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_23)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 23)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 24) {\\n            switch and(_index, shl(24, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_24)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 24)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 25) {\\n            switch and(_index, shl(25, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_25)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 25)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 26) {\\n            switch and(_index, shl(26, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_26)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 26)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 27) {\\n            switch and(_index, shl(27, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_27)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 27)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 28) {\\n            switch and(_index, shl(28, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_28)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 28)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 29) {\\n            switch and(_index, shl(29, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_29)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 29)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 30) {\\n            switch and(_index, shl(30, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_30)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 30)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 31) {\\n            switch and(_index, shl(31, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_31)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 31)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n        }\\n\\n        break\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the merkle root for the given leaf `_item`,\\n   * a merkle branch, and the index of `_item` in the tree.\\n   * @param _item Merkle leaf\\n   * @param _branch Merkle proof\\n   * @param _index Index of `_item` in tree\\n   * @return _current Calculated merkle root\\n   **/\\n  function branchRoot(\\n    bytes32 _item,\\n    bytes32[TREE_DEPTH] memory _branch,\\n    uint256 _index\\n  ) internal pure returns (bytes32 _current) {\\n    assembly {\\n      _current := _item\\n      let BRANCH_DATA_OFFSET := _branch\\n      let f\\n\\n      f := shl(5, and(_index, 1))\\n      mstore(f, _current)\\n      mstore(sub(0x20, f), mload(BRANCH_DATA_OFFSET))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(1, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 1))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(2, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 2))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(3, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 3))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(4, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 4))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(5, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 5))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(6, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 6))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(7, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 7))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(8, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 8))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(9, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 9))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(10, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 10))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(11, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 11))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(12, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 12))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(13, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 13))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(14, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 14))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(15, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 15))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(16, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 16))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(17, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 17))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(18, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 18))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(19, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 19))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(20, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 20))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(21, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 21))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(22, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 22))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(23, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 23))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(24, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 24))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(25, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 25))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(26, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 26))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(27, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 27))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(28, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 28))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(29, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 29))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(30, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 30))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(31, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 31))))\\n      _current := keccak256(0, 0x40)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08c791dbeef6253813d74e2145183501fe7631c13d5ac9d768036f47b66b693e\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/Message.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\n/**\\n * @title Message Library\\n * @author Illusory Systems Inc.\\n * @notice Library for formatted messages used by Home and Replica.\\n **/\\nlibrary Message {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // Number of bytes in formatted message before `body` field\\n  uint256 internal constant PREFIX_LENGTH = 76;\\n\\n  /**\\n   * @notice Returns formatted (packed) message with provided fields\\n   * @param _originDomain Domain of home chain\\n   * @param _sender Address of sender as bytes32\\n   * @param _nonce Destination-specific nonce\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipient Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes of message body\\n   * @return Formatted message\\n   **/\\n  function formatMessage(\\n    uint32 _originDomain,\\n    bytes32 _sender,\\n    uint32 _nonce,\\n    uint32 _destinationDomain,\\n    bytes32 _recipient,\\n    bytes memory _messageBody\\n  ) internal pure returns (bytes memory) {\\n    return abi.encodePacked(_originDomain, _sender, _nonce, _destinationDomain, _recipient, _messageBody);\\n  }\\n\\n  /**\\n   * @notice Returns leaf of formatted message with provided fields.\\n   * @param _origin Domain of home chain\\n   * @param _sender Address of sender as bytes32\\n   * @param _nonce Destination-specific nonce number\\n   * @param _destination Domain of destination chain\\n   * @param _recipient Address of recipient on destination chain as bytes32\\n   * @param _body Raw bytes of message body\\n   * @return Leaf (hash) of formatted message\\n   **/\\n  function messageHash(\\n    uint32 _origin,\\n    bytes32 _sender,\\n    uint32 _nonce,\\n    uint32 _destination,\\n    bytes32 _recipient,\\n    bytes memory _body\\n  ) internal pure returns (bytes32) {\\n    return keccak256(formatMessage(_origin, _sender, _nonce, _destination, _recipient, _body));\\n  }\\n\\n  /// @notice Returns message's origin field\\n  function origin(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(0, 4));\\n  }\\n\\n  /// @notice Returns message's sender field\\n  function sender(bytes29 _message) internal pure returns (bytes32) {\\n    return _message.index(4, 32);\\n  }\\n\\n  /// @notice Returns message's nonce field\\n  function nonce(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(36, 4));\\n  }\\n\\n  /// @notice Returns message's destination field\\n  function destination(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(40, 4));\\n  }\\n\\n  /// @notice Returns message's recipient field as bytes32\\n  function recipient(bytes29 _message) internal pure returns (bytes32) {\\n    return _message.index(44, 32);\\n  }\\n\\n  /// @notice Returns message's recipient field as an address\\n  function recipientAddress(bytes29 _message) internal pure returns (address) {\\n    return TypeCasts.bytes32ToAddress(recipient(_message));\\n  }\\n\\n  /// @notice Returns message's body field as bytes29 (refer to TypedMemView library for details on bytes29 type)\\n  function body(bytes29 _message) internal pure returns (bytes29) {\\n    return _message.slice(PREFIX_LENGTH, _message.len() - PREFIX_LENGTH, 0);\\n  }\\n\\n  function leaf(bytes29 _message) internal pure returns (bytes32) {\\n    uint256 loc = _message.loc();\\n    uint256 len = _message.len();\\n    /*\\n    prev:\\n    return\\n      messageHash(\\n        origin(_message),\\n        sender(_message),\\n        nonce(_message),\\n        destination(_message),\\n        recipient(_message),\\n        TypedMemView.clone(body(_message))\\n      );\\n\\n      below added for gas optimization\\n     */\\n    bytes32 hash;\\n    assembly {\\n      hash := keccak256(loc, len)\\n    }\\n    return hash;\\n  }\\n}\\n\",\"keccak256\":\"0xa4212f7b88146588e8e0e24cddbc5dae6269618a722b34f00ea322b33fa1f36a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/RateLimited.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice An abstract contract intended to manage the rate limiting aspect of spoke\\n * connector messaging. Rate limiting the number of messages we can send over a span of\\n * blocks is used to mitigate key DoSing vectors for transporting messages between chains.\\n */\\nabstract contract RateLimited {\\n  // ========== Custom Errors ===========\\n\\n  error RateLimited__rateLimited_messageSendRateExceeded();\\n\\n  // ============ Events ============\\n\\n  event SendRateLimitUpdated(address updater, uint256 newRateLimit);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The number of blocks required between message sending events.\\n   * @dev NOTE: This value is 0 by default, meaning that rate limiting functionality\\n   * will naturally be disabled by default.\\n   */\\n  uint256 public rateLimitBlocks;\\n\\n  /**\\n   * @notice Tracks the last block that we sent a message.\\n   */\\n  uint256 public lastSentBlock;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Checks to see if we can send this block, given the current rate limit\\n   * setting and the last block we sent a message. If rate limit has been surpassed,\\n   * we update the `lastSentBlock` to be the current block.\\n   */\\n  modifier rateLimited() {\\n    // Check to make sure we have surpassed the number of rate limit blocks.\\n    if (lastSentBlock + rateLimitBlocks > block.number) {\\n      revert RateLimited__rateLimited_messageSendRateExceeded();\\n    }\\n    // Update the last block we sent a message to be the current one.\\n    lastSentBlock = block.number;\\n    _;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Update the current rate limit to a new value.\\n   */\\n  function _setRateLimitBlocks(uint256 _newRateLimit) internal {\\n    require(_newRateLimit != rateLimitBlocks, \\\"!new rate limit\\\");\\n    // NOTE: Setting the block rate limit interval to 0 will result in rate limiting\\n    // being disabled.\\n    rateLimitBlocks = _newRateLimit;\\n    emit SendRateLimitUpdated(msg.sender, _newRateLimit);\\n  }\\n}\\n\",\"keccak256\":\"0xcc185ae966c87441490aaa8c0779a7b3085961a7b8512d5973f1c34f641eeae3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/ProposedOwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {Initializable} from \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"./ProposedOwnable.sol\\\";\\n\\nabstract contract ProposedOwnableUpgradeable is Initializable, ProposedOwnable {\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial\\n   */\\n  function __ProposedOwnable_init() internal onlyInitializing {\\n    __ProposedOwnable_init_unchained();\\n  }\\n\\n  function __ProposedOwnable_init_unchained() internal onlyInitializing {\\n    _setOwner(msg.sender);\\n  }\\n\\n  /**\\n   * @dev This empty reserved space is put in place to allow future versions to add new\\n   * variables without shifting down storage in the inheritance chain.\\n   * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n   */\\n  uint256[47] private __GAP;\\n}\\n\",\"keccak256\":\"0x2b064b03a25915e93749905ef3aae516ffaac86b8ba9f126b614425b623bf477\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/ExcessivelySafeCall.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// Taken from: https://github.com/nomad-xyz/ExcessivelySafeCall\\n// NOTE: There is a difference between npm latest and github main versions\\n// where the latest github version allows you to specify an ether value.\\n\\nlibrary ExcessivelySafeCall {\\n  uint256 constant LOW_28_MASK = 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _value The value in wei to send to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeCall(\\n    address _target,\\n    uint256 _gas,\\n    uint256 _value,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := call(\\n        _gas, // gas\\n        _target, // recipient\\n        _value, // ether value\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeStaticCall(\\n    address _target,\\n    uint256 _gas,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal view returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := staticcall(\\n        _gas, // gas\\n        _target, // recipient\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /**\\n   * @notice Swaps function selectors in encoded contract calls\\n   * @dev Allows reuse of encoded calldata for functions with identical\\n   * argument types but different names. It simply swaps out the first 4 bytes\\n   * for the new selector. This function modifies memory in place, and should\\n   * only be used with caution.\\n   * @param _newSelector The new 4-byte selector\\n   * @param _buf The encoded contract args\\n   */\\n  function swapSelector(bytes4 _newSelector, bytes memory _buf) internal pure {\\n    require(_buf.length > 4 - 1);\\n    uint256 _mask = LOW_28_MASK;\\n    assembly {\\n      // load the first word of\\n      let _word := mload(add(_buf, 0x20))\\n      // mask out the top 4 bytes\\n      // /x\\n      _word := and(_word, _mask)\\n      _word := or(_newSelector, _word)\\n      mstore(add(_buf, 0x20), _word)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x5472b56fa56886620b1a8e4e2f12f8925500bb237a4dad38651c79db69f0724c\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol:ZkSyncSpokeConnector","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol:ZkSyncSpokeConnector","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol:ZkSyncSpokeConnector","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":39051,"contract":"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol:ZkSyncSpokeConnector","label":"mirrorConnector","offset":0,"slot":"3","type":"t_address"},{"astId":10590,"contract":"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol:ZkSyncSpokeConnector","label":"_paused","offset":20,"slot":"3","type":"t_bool"},{"astId":38824,"contract":"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol:ZkSyncSpokeConnector","label":"watcherManager","offset":0,"slot":"4","type":"t_contract(WatcherManager)39005"},{"astId":49639,"contract":"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol:ZkSyncSpokeConnector","label":"rateLimitBlocks","offset":0,"slot":"5","type":"t_uint256"},{"astId":49642,"contract":"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol:ZkSyncSpokeConnector","label":"lastSentBlock","offset":0,"slot":"6","type":"t_uint256"},{"astId":10691,"contract":"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol:ZkSyncSpokeConnector","label":"_status","offset":0,"slot":"7","type":"t_uint256"},{"astId":39546,"contract":"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol:ZkSyncSpokeConnector","label":"delayBlocks","offset":0,"slot":"8","type":"t_uint256"},{"astId":39561,"contract":"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol:ZkSyncSpokeConnector","label":"pendingAggregateRoots","offset":0,"slot":"9","type":"t_mapping(t_bytes32,t_uint256)"},{"astId":39566,"contract":"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol:ZkSyncSpokeConnector","label":"provenAggregateRoots","offset":0,"slot":"10","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39571,"contract":"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol:ZkSyncSpokeConnector","label":"provenMessageRoots","offset":0,"slot":"11","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39576,"contract":"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol:ZkSyncSpokeConnector","label":"sentMessageRoots","offset":0,"slot":"12","type":"t_mapping(t_bytes32,t_bool)"},{"astId":39581,"contract":"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol:ZkSyncSpokeConnector","label":"allowlistedSenders","offset":0,"slot":"13","type":"t_mapping(t_address,t_bool)"},{"astId":39586,"contract":"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol:ZkSyncSpokeConnector","label":"nonces","offset":0,"slot":"14","type":"t_mapping(t_uint32,t_uint32)"},{"astId":39592,"contract":"contracts/messaging/connectors/zksync/ZkSyncSpokeConnector.sol:ZkSyncSpokeConnector","label":"messages","offset":0,"slot":"15","type":"t_mapping(t_bytes32,t_enum(MessageStatus)39534)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(WatcherManager)39005":{"encoding":"inplace","label":"contract WatcherManager","numberOfBytes":"20"},"t_enum(MessageStatus)39534":{"encoding":"inplace","label":"enum SpokeConnector.MessageStatus","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_bool)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_enum(MessageStatus)39534)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum SpokeConnector.MessageStatus)","numberOfBytes":"32","value":"t_enum(MessageStatus)39534"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint32,t_uint32)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => uint32)","numberOfBytes":"32","value":"t_uint32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"}}},"userdoc":{"events":{"FundsWithdrawn(address,uint256)":{"notice":"Emitted when funds are withdrawn by the admin"},"MessageProcessed(bytes,address)":{"notice":"Emitted whenever a message is successfully received over an AMB"},"MessageSent(bytes,bytes,address)":{"notice":"Emitted whenever a message is successfully sent over an AMB"},"WatcherManagerChanged(address)":{"notice":"Emitted when the manager address changes"}},"kind":"user","methods":{"AMB()":{"notice":"Address of the AMB on this domain."},"DOMAIN()":{"notice":"The domain of this Messaging (i.e. Connector) contract."},"MERKLE()":{"notice":"MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root will be sent crosschain to the hub for aggregation and redistribution."},"MIRROR_DOMAIN()":{"notice":"The domain of the corresponding messaging (i.e. Connector) contract."},"PROCESS_GAS()":{"notice":"Minimum gas for processing a received message (reserved for handle)"},"RESERVE_GAS()":{"notice":"Reserved gas (to ensure tx completes in case message processing runs out)"},"ROOT_MANAGER()":{"notice":"RootManager contract address."},"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"addSender(address)":{"notice":"Adds a sender to the allowlist."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"delayBlocks()":{"notice":"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary."},"dispatch(uint32,bytes32,bytes)":{"notice":"This function adds transfers to the outbound transfer merkle tree."},"home()":{"notice":"Get the local inbox contract from the xAppConnectionManager"},"isReplica(address)":{"notice":"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager"},"lastSentBlock()":{"notice":"Tracks the last block that we sent a message."},"localDomain()":{"notice":"This provides the implementation for what is defined in the ConnectorManager to avoid storing the domain redundantly"},"messages(bytes32)":{"notice":"Mapping of message leaves to MessageStatus, keyed on leaf."},"mirrorConnector()":{"notice":"Connector on L2 for L1 connectors, and vice versa."},"nonces(uint32)":{"notice":"domain => next available nonce for the domain."},"outboundRoot()":{"notice":"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)"},"owner()":{"notice":"Returns the address of the current owner."},"pause()":{"notice":"Watchers can pause contracts if fraud is detected"},"pendingAggregateRoots(bytes32)":{"notice":"This will hold the commit block for incoming aggregateRoots from the hub chain. Once they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can be used for proving inclusion of crosschain messages."},"processMessage(bytes)":{"notice":"Processes a message received by an AMB"},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)":{"notice":"Must be able to call the `handle` function on the BridgeRouter contract. This is called on the destination domain to handle incoming messages. Proving: Calculates the expected inbound root from an origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this calculated inbound root is included in the current aggregateRoot, given its index in the aggregator tree and the proof of inclusion. Processing: After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for execution."},"provenAggregateRoots(bytes32)":{"notice":"This tracks the roots of the aggregate tree containing outbound roots from all other supported domains. The current version is the one that is known to be past the delayBlocks time period."},"provenMessageRoots(bytes32)":{"notice":"This tracks whether the root has been proven to exist within the given aggregate root."},"rateLimitBlocks()":{"notice":"The number of blocks required between message sending events."},"removePendingAggregateRoot(bytes32)":{"notice":"Manually remove a pending aggregateRoot by owner if the contract is paused."},"removeSender(address)":{"notice":"Removes a sender from the allowlist."},"renounceOwnership()":{"notice":"Remove ability to renounce ownership"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"send(bytes)":{"notice":"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)"},"sentMessageRoots(bytes32)":{"notice":"This mapping records all message roots that have already been sent in order to prevent redundant message roots from being sent to hub."},"setDelayBlocks(uint256)":{"notice":"Set the `delayBlocks`, the period in blocks over which an incoming message is verified."},"setMirrorConnector(address)":{"notice":"Sets the address of the l2Connector for this domain"},"setRateLimitBlocks(uint256)":{"notice":"Set the rate limit (number of blocks) at which we can send messages from this contract to the hub chain using the `send` method."},"setWatcherManager(address)":{"notice":"Owner can enroll a watcher (abilities are defined by inheriting contracts)"},"unpause()":{"notice":"Owner can unpause contracts if fraud is detected by watchers"},"verifySender(address)":{"notice":"Checks the cross domain sender for a given address"},"watcherManager()":{"notice":"The `WatcherManager` contract governs the watcher allowlist."},"withdrawFunds(address)":{"notice":"This function should be callable by owner, and send funds trapped on a connector to the provided recipient."}},"version":1}}},"contracts/messaging/interfaces/IConnector.sol":{"IConnector":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"encodedData","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"processMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"proposed_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_expected","type":"address"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"This uses the nomad format to ensure nomad can be added in as it comes back online. Flow from transfer from polygon to optimism: 1. User calls `xcall` with destination specified 2. This will swap in to the bridge assets 3. The swapped assets will get burned 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer    to the root 5. [At some time interval] Relayers call `send` to send the current root from polygon to    mainnet. This is done on all \"spoke\" domains. 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle    root from all of the AMBs    - This function must be able to read root data from all AMBs and aggregate them into a single merkle      tree root    - Will send the mixed root from all chains back through the respective AMBs to all other chains 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call    process on the `Connext` contract 9. Takes minted bridge tokens and credits the LP AMB requirements: - Access `msg.sender` both from mainnet -> spoke and vice versa - Ability to read *our root* from the AMB AMBs: - PoS bridge from polygon - arbitrum bridge - optimism bridge - gnosis chain - bsc (use multichain for messaging)","events":{"MessageProcessed(bytes,address)":{"params":{"caller":"Who called the function","data":"The contents of the message"}},"MessageSent(bytes,bytes,address)":{"params":{"caller":"Who called the function (sent the message)","data":"The contents of the message","encodedData":"Data used to send the message; specific to connector"}}},"kind":"dev","methods":{"owner()":{"returns":{"owner_":"The address of the owner."}},"proposeNewOwner(address)":{"params":{"newlyProposed":"The proposed new owner of the contract"}},"proposed()":{"returns":{"proposed_":"The address of the proposed."}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"acceptProposedOwner()":"c5b350df","owner()":"8da5cb5b","processMessage(bytes)":"4ff746f6","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","verifySender(address)":"db1b7659"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"proposed_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This uses the nomad format to ensure nomad can be added in as it comes back online. Flow from transfer from polygon to optimism: 1. User calls `xcall` with destination specified 2. This will swap in to the bridge assets 3. The swapped assets will get burned 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer    to the root 5. [At some time interval] Relayers call `send` to send the current root from polygon to    mainnet. This is done on all \\\"spoke\\\" domains. 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle    root from all of the AMBs    - This function must be able to read root data from all AMBs and aggregate them into a single merkle      tree root    - Will send the mixed root from all chains back through the respective AMBs to all other chains 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call    process on the `Connext` contract 9. Takes minted bridge tokens and credits the LP AMB requirements: - Access `msg.sender` both from mainnet -> spoke and vice versa - Ability to read *our root* from the AMB AMBs: - PoS bridge from polygon - arbitrum bridge - optimism bridge - gnosis chain - bsc (use multichain for messaging)\",\"events\":{\"MessageProcessed(bytes,address)\":{\"params\":{\"caller\":\"Who called the function\",\"data\":\"The contents of the message\"}},\"MessageSent(bytes,bytes,address)\":{\"params\":{\"caller\":\"Who called the function (sent the message)\",\"data\":\"The contents of the message\",\"encodedData\":\"Data used to send the message; specific to connector\"}}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"returns\":{\"owner_\":\"The address of the owner.\"}},\"proposeNewOwner(address)\":{\"params\":{\"newlyProposed\":\"The proposed new owner of the contract\"}},\"proposed()\":{\"returns\":{\"proposed_\":\"The address of the proposed.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"}},\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Set the address of the proposed owner of the contract\"},\"owner()\":{\"notice\":\"Get the address of the owner\"},\"proposeNewOwner(address)\":{\"notice\":\"Set the address of the proposed owner of the contract\"},\"proposed()\":{\"notice\":\"Get the address of the proposed owner\"}},\"notice\":\"This interface is what the Connext contract will send and receive messages through. The messaging layer should conform to this interface, and should be interchangeable (i.e. could be Nomad or a generic AMB under the hood).\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/interfaces/IConnector.sol\":\"IConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"events":{"MessageProcessed(bytes,address)":{"notice":"Emitted whenever a message is successfully received over an AMB"},"MessageSent(bytes,bytes,address)":{"notice":"Emitted whenever a message is successfully sent over an AMB"}},"kind":"user","methods":{"acceptProposedOwner()":{"notice":"Set the address of the proposed owner of the contract"},"owner()":{"notice":"Get the address of the owner"},"proposeNewOwner(address)":{"notice":"Set the address of the proposed owner of the contract"},"proposed()":{"notice":"Get the address of the proposed owner"}},"notice":"This interface is what the Connext contract will send and receive messages through. The messaging layer should conform to this interface, and should be interchangeable (i.e. could be Nomad or a generic AMB under the hood).","version":1}}},"contracts/messaging/interfaces/IConnectorManager.sol":{"IConnectorManager":{"abi":[{"inputs":[],"name":"home","outputs":[{"internalType":"contract IOutbox","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_potentialReplica","type":"address"}],"name":"isReplica","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"localDomain","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"This interface only contains the functions needed for the `XAppConnectionClient` will interface with.","kind":"dev","methods":{"home()":{"details":"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad","returns":{"_0":"The local inbox contract"}},"isReplica(address)":{"returns":{"_0":"True if _potentialReplica is an enrolled Replica"}},"localDomain()":{"returns":{"_0":"The local domain"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"home()":"9fa92f9d","isReplica(address)":"5190bc53","localDomain()":"8d3638f4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"home\",\"outputs\":[{\"internalType\":\"contract IOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_potentialReplica\",\"type\":\"address\"}],\"name\":\"isReplica\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localDomain\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This interface only contains the functions needed for the `XAppConnectionClient` will interface with.\",\"kind\":\"dev\",\"methods\":{\"home()\":{\"details\":\"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad\",\"returns\":{\"_0\":\"The local inbox contract\"}},\"isReplica(address)\":{\"returns\":{\"_0\":\"True if _potentialReplica is an enrolled Replica\"}},\"localDomain()\":{\"returns\":{\"_0\":\"The local domain\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"home()\":{\"notice\":\"Get the local inbox contract from the xAppConnectionManager\"},\"isReplica(address)\":{\"notice\":\"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\"},\"localDomain()\":{\"notice\":\"Get the local domain from the xAppConnectionManager\"}},\"notice\":\"Each router extends the `XAppConnectionClient` contract. This contract allows an admin to call `setXAppConnectionManager` to update the underlying pointers to the messaging inboxes (Replicas) and outboxes (Homes).\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/interfaces/IConnectorManager.sol\":\"IConnectorManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n  /**\\n   * @notice Get the local inbox contract from the xAppConnectionManager\\n   * @return The local inbox contract\\n   * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n   * Home contract with nomad\\n   */\\n  function home() external view returns (IOutbox);\\n\\n  /**\\n   * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n   * @return True if _potentialReplica is an enrolled Replica\\n   */\\n  function isReplica(address _potentialReplica) external view returns (bool);\\n\\n  /**\\n   * @notice Get the local domain from the xAppConnectionManager\\n   * @return The local domain\\n   */\\n  function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"home()":{"notice":"Get the local inbox contract from the xAppConnectionManager"},"isReplica(address)":{"notice":"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager"},"localDomain()":{"notice":"Get the local domain from the xAppConnectionManager"}},"notice":"Each router extends the `XAppConnectionClient` contract. This contract allows an admin to call `setXAppConnectionManager` to update the underlying pointers to the messaging inboxes (Replicas) and outboxes (Homes).","version":1}}},"contracts/messaging/interfaces/IHubConnector.sol":{"IHubConnector":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"encodedData","type":"bytes"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"processMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"proposed_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_encodedData","type":"bytes"}],"name":"sendMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_expected","type":"address"}],"name":"verifySender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"owner()":{"returns":{"owner_":"The address of the owner."}},"proposeNewOwner(address)":{"params":{"newlyProposed":"The proposed new owner of the contract"}},"proposed()":{"returns":{"proposed_":"The address of the proposed."}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"acceptProposedOwner()":"c5b350df","owner()":"8da5cb5b","processMessage(bytes)":"4ff746f6","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","sendMessage(bytes,bytes)":"48e6fa23","verifySender(address)":"db1b7659"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"proposed_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"returns\":{\"owner_\":\"The address of the owner.\"}},\"proposeNewOwner(address)\":{\"params\":{\"newlyProposed\":\"The proposed new owner of the contract\"}},\"proposed()\":{\"returns\":{\"proposed_\":\"The address of the proposed.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"}},\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Set the address of the proposed owner of the contract\"},\"owner()\":{\"notice\":\"Get the address of the owner\"},\"proposeNewOwner(address)\":{\"notice\":\"Set the address of the proposed owner of the contract\"},\"proposed()\":{\"notice\":\"Get the address of the proposed owner\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/interfaces/IHubConnector.sol\":\"IHubConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n *    to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n *    mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n *    root from all of the AMBs\\n *    - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n *      tree root\\n *    - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n *    process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n  // ============ Events ============\\n  /**\\n   * @notice Emitted whenever a message is successfully sent over an AMB\\n   * @param data The contents of the message\\n   * @param encodedData Data used to send the message; specific to connector\\n   * @param caller Who called the function (sent the message)\\n   */\\n  event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n  /**\\n   * @notice Emitted whenever a message is successfully received over an AMB\\n   * @param data The contents of the message\\n   * @param caller Who called the function\\n   */\\n  event MessageProcessed(bytes data, address caller);\\n\\n  // ============ Public fns ============\\n\\n  function processMessage(bytes memory _data) external;\\n\\n  function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IHubConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IConnector} from \\\"./IConnector.sol\\\";\\n\\ninterface IHubConnector is IConnector {\\n  function sendMessage(bytes memory _data, bytes memory _encodedData) external payable;\\n}\\n\",\"keccak256\":\"0x9c3b0b9f1ab326d6283e404818b8c2c55c4fc1ee9919830a1d04ebc3f4a022cd\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"events":{"MessageProcessed(bytes,address)":{"notice":"Emitted whenever a message is successfully received over an AMB"},"MessageSent(bytes,bytes,address)":{"notice":"Emitted whenever a message is successfully sent over an AMB"}},"kind":"user","methods":{"acceptProposedOwner()":{"notice":"Set the address of the proposed owner of the contract"},"owner()":{"notice":"Get the address of the owner"},"proposeNewOwner(address)":{"notice":"Set the address of the proposed owner of the contract"},"proposed()":{"notice":"Get the address of the proposed owner"}},"version":1}}},"contracts/messaging/interfaces/IMessageRecipient.sol":{"IMessageRecipient":{"abi":[{"inputs":[{"internalType":"uint32","name":"_origin","type":"uint32"},{"internalType":"uint32","name":"_nonce","type":"uint32"},{"internalType":"bytes32","name":"_sender","type":"bytes32"},{"internalType":"bytes","name":"_message","type":"bytes"}],"name":"handle","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"handle(uint32,uint32,bytes32,bytes)":"ab2dc3f5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_origin\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_nonce\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"handle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/interfaces/IMessageRecipient.sol\":\"IMessageRecipient\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/interfaces/IMessageRecipient.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\ninterface IMessageRecipient {\\n  function handle(\\n    uint32 _origin,\\n    uint32 _nonce,\\n    bytes32 _sender,\\n    bytes memory _message\\n  ) external;\\n}\\n\",\"keccak256\":\"0x20445bed10e4944dc218be225160514a7c7619b7c691c9b913abaad49986bbd9\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/messaging/interfaces/IOutbox.sol":{"IOutbox":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"messageHash","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"leafIndex","type":"uint256"},{"indexed":true,"internalType":"uint64","name":"destinationAndNonce","type":"uint64"},{"indexed":false,"internalType":"bytes32","name":"committedRoot","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"message","type":"bytes"}],"name":"Dispatch","type":"event"},{"inputs":[{"internalType":"uint32","name":"_destinationDomain","type":"uint32"},{"internalType":"bytes32","name":"_recipientAddress","type":"bytes32"},{"internalType":"bytes","name":"_messageBody","type":"bytes"}],"name":"dispatch","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"These are the Home.sol interface methods used by the `Router` and exposed via `home()` on the `XAppConnectionClient`","events":{"Dispatch(bytes32,uint256,uint64,bytes32,bytes)":{"params":{"committedRoot":"the latest notarized root submitted in the last signed Update","destinationAndNonce":"Destination and destination-specific nonce combined in single field ((destination << 32) & nonce)","leafIndex":"Index of message's leaf in merkle tree","message":"Raw bytes of message","messageHash":"Hash of message; the leaf inserted to the Merkle tree for the message"}}},"kind":"dev","methods":{"dispatch(uint32,bytes32,bytes)":{"details":"Format the message, insert its hash into Merkle tree, enqueue the new Merkle root, and emit `Dispatch` event with message information.","params":{"_destinationDomain":"Domain of destination chain","_messageBody":"Raw bytes content of message","_recipientAddress":"Address of recipient on destination chain as bytes32"},"returns":{"_0":"bytes32 The leaf added to the tree"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"dispatch(uint32,bytes32,bytes)":"fa31de01"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"leafIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destinationAndNonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"committedRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Dispatch\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_recipientAddress\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_messageBody\",\"type\":\"bytes\"}],\"name\":\"dispatch\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These are the Home.sol interface methods used by the `Router` and exposed via `home()` on the `XAppConnectionClient`\",\"events\":{\"Dispatch(bytes32,uint256,uint64,bytes32,bytes)\":{\"params\":{\"committedRoot\":\"the latest notarized root submitted in the last signed Update\",\"destinationAndNonce\":\"Destination and destination-specific nonce combined in single field ((destination << 32) & nonce)\",\"leafIndex\":\"Index of message's leaf in merkle tree\",\"message\":\"Raw bytes of message\",\"messageHash\":\"Hash of message; the leaf inserted to the Merkle tree for the message\"}}},\"kind\":\"dev\",\"methods\":{\"dispatch(uint32,bytes32,bytes)\":{\"details\":\"Format the message, insert its hash into Merkle tree, enqueue the new Merkle root, and emit `Dispatch` event with message information.\",\"params\":{\"_destinationDomain\":\"Domain of destination chain\",\"_messageBody\":\"Raw bytes content of message\",\"_recipientAddress\":\"Address of recipient on destination chain as bytes32\"},\"returns\":{\"_0\":\"bytes32 The leaf added to the tree\"}}},\"version\":1},\"userdoc\":{\"events\":{\"Dispatch(bytes32,uint256,uint64,bytes32,bytes)\":{\"notice\":\"Emitted when a new message is added to an outbound message merkle root\"}},\"kind\":\"user\",\"methods\":{\"dispatch(uint32,bytes32,bytes)\":{\"notice\":\"Dispatch the message it to the destination domain & recipient\"}},\"notice\":\"Interface for all contracts sending messages originating on their current domain.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/interfaces/IOutbox.sol\":\"IOutbox\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n  /**\\n   * @notice Emitted when a new message is added to an outbound message merkle root\\n   * @param leafIndex Index of message's leaf in merkle tree\\n   * @param destinationAndNonce Destination and destination-specific\\n   * nonce combined in single field ((destination << 32) & nonce)\\n   * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n   * @param committedRoot the latest notarized root submitted in the last signed Update\\n   * @param message Raw bytes of message\\n   */\\n  event Dispatch(\\n    bytes32 indexed messageHash,\\n    uint256 indexed leafIndex,\\n    uint64 indexed destinationAndNonce,\\n    bytes32 committedRoot,\\n    bytes message\\n  );\\n\\n  /**\\n   * @notice Dispatch the message it to the destination domain & recipient\\n   * @dev Format the message, insert its hash into Merkle tree,\\n   * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipientAddress Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes content of message\\n   * @return bytes32 The leaf added to the tree\\n   */\\n  function dispatch(\\n    uint32 _destinationDomain,\\n    bytes32 _recipientAddress,\\n    bytes memory _messageBody\\n  ) external returns (bytes32, bytes memory);\\n}\\n\",\"keccak256\":\"0xfa43162438f8f6a28842dec61bc8e1f583c9d87bfacbe204b35b1221084ab0f1\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"events":{"Dispatch(bytes32,uint256,uint64,bytes32,bytes)":{"notice":"Emitted when a new message is added to an outbound message merkle root"}},"kind":"user","methods":{"dispatch(uint32,bytes32,bytes)":{"notice":"Dispatch the message it to the destination domain & recipient"}},"notice":"Interface for all contracts sending messages originating on their current domain.","version":1}}},"contracts/messaging/interfaces/IRootManager.sol":{"IRootManager":{"abi":[{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"},{"internalType":"bytes32","name":"_outbound","type":"bytes32"}],"name":"aggregate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_connectors","type":"address[]"},{"internalType":"uint256[]","name":"_fees","type":"uint256[]"},{"internalType":"bytes[]","name":"_encodedData","type":"bytes[]"}],"name":"propagate","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"kind":"dev","methods":{"aggregate(uint32,bytes32)":{"details":"This must read information for the root from the registered AMBs"},"propagate(address[],uint256[],bytes[])":{"details":"This must read information for the root from the registered AMBs."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"aggregate(uint32,bytes32)":"8e7d93fa","propagate(address[],uint256[],bytes[])":"412e12db"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_outbound\",\"type\":\"bytes32\"}],\"name\":\"aggregate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_connectors\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_fees\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_encodedData\",\"type\":\"bytes[]\"}],\"name\":\"propagate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"aggregate(uint32,bytes32)\":{\"details\":\"This must read information for the root from the registered AMBs\"},\"propagate(address[],uint256[],bytes[])\":{\"details\":\"This must read information for the root from the registered AMBs.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"aggregate(uint32,bytes32)\":{\"notice\":\"Called by the connectors for various domains on the hub to aggregate their latest inbound root.\"},\"propagate(address[],uint256[],bytes[])\":{\"notice\":\"This is called by relayers to generate + send the mixed root from mainnet via AMB to spoke domains.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/interfaces/IRootManager.sol\":\"IRootManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/interfaces/IRootManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\ninterface IRootManager {\\n  /**\\n   * @notice This is called by relayers to generate + send the mixed root from mainnet via AMB to\\n   * spoke domains.\\n   * @dev This must read information for the root from the registered AMBs.\\n   */\\n  function propagate(\\n    address[] calldata _connectors,\\n    uint256[] calldata _fees,\\n    bytes[] memory _encodedData\\n  ) external payable;\\n\\n  /**\\n   * @notice Called by the connectors for various domains on the hub to aggregate their latest\\n   * inbound root.\\n   * @dev This must read information for the root from the registered AMBs\\n   */\\n  function aggregate(uint32 _domain, bytes32 _outbound) external;\\n}\\n\",\"keccak256\":\"0xa895dfaa4baad37a636e7e7e7da72a0a4badfd2d3d8256f975e5101cd5a98236\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"aggregate(uint32,bytes32)":{"notice":"Called by the connectors for various domains on the hub to aggregate their latest inbound root."},"propagate(address[],uint256[],bytes[])":{"notice":"This is called by relayers to generate + send the mixed root from mainnet via AMB to spoke domains."}},"version":1}}},"contracts/messaging/interfaces/ambs/GnosisAmb.sol":{"GnosisAmb":{"abi":[{"inputs":[],"name":"destinationChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_signatures","type":"bytes"}],"name":"executeSignatures","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_messageId","type":"bytes32"}],"name":"failedMessageDataHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_messageId","type":"bytes32"}],"name":"failedMessageReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_messageId","type":"bytes32"}],"name":"failedMessageSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxGasPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_messageId","type":"bytes32"}],"name":"messageCallStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"messageId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"messageSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"messageSourceChainId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"uint256","name":"_gas","type":"uint256"}],"name":"requireToConfirmMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_requestSelector","type":"bytes32"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"requireToGetInformation","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"uint256","name":"_gas","type":"uint256"}],"name":"requireToPassMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_signatures","type":"bytes"}],"name":"safeExecuteSignaturesWithAutoGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sourceChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transactionHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"destinationChainId()":"b0750611","executeSignatures(bytes,bytes)":"3f7658fd","failedMessageDataHash(bytes32)":"e37c3289","failedMessageReceiver(bytes32)":"3f9a8e7e","failedMessageSender(bytes32)":"4a610b04","maxGasPerTx()":"e5789d03","messageCallStatus(bytes32)":"cb08a10c","messageId()":"669f618b","messageSender()":"d67bdd25","messageSourceChainId()":"9e307dff","requireToConfirmMessage(address,bytes,uint256)":"94643f71","requireToGetInformation(bytes32,bytes)":"525ea937","requireToPassMessage(address,bytes,uint256)":"dc8601b3","safeExecuteSignaturesWithAutoGasLimit(bytes,bytes)":"23caab49","sourceChainId()":"1544298e","transactionHash()":"0ac1c313"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"destinationChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"executeSignatures\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_messageId\",\"type\":\"bytes32\"}],\"name\":\"failedMessageDataHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_messageId\",\"type\":\"bytes32\"}],\"name\":\"failedMessageReceiver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_messageId\",\"type\":\"bytes32\"}],\"name\":\"failedMessageSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxGasPerTx\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_messageId\",\"type\":\"bytes32\"}],\"name\":\"messageCallStatus\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageSourceChainId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_gas\",\"type\":\"uint256\"}],\"name\":\"requireToConfirmMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_requestSelector\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"requireToGetInformation\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_gas\",\"type\":\"uint256\"}],\"name\":\"requireToPassMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"safeExecuteSignaturesWithAutoGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sourceChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transactionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/interfaces/ambs/GnosisAmb.sol\":\"GnosisAmb\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/interfaces/ambs/GnosisAmb.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// Taken from: https://github.com/omni/tokenbridge-contracts/blob/master/contracts/interfaces/IAMB.sol\\ninterface GnosisAmb {\\n  function messageSender() external view returns (address);\\n\\n  function maxGasPerTx() external view returns (uint256);\\n\\n  function transactionHash() external view returns (bytes32);\\n\\n  function messageId() external view returns (bytes32);\\n\\n  function messageSourceChainId() external view returns (bytes32);\\n\\n  function messageCallStatus(bytes32 _messageId) external view returns (bool);\\n\\n  function failedMessageDataHash(bytes32 _messageId) external view returns (bytes32);\\n\\n  function failedMessageReceiver(bytes32 _messageId) external view returns (address);\\n\\n  function failedMessageSender(bytes32 _messageId) external view returns (address);\\n\\n  function requireToPassMessage(\\n    address _contract,\\n    bytes memory _data,\\n    uint256 _gas\\n  ) external returns (bytes32);\\n\\n  function requireToConfirmMessage(\\n    address _contract,\\n    bytes memory _data,\\n    uint256 _gas\\n  ) external returns (bytes32);\\n\\n  function requireToGetInformation(bytes32 _requestSelector, bytes memory _data) external returns (bytes32);\\n\\n  function sourceChainId() external view returns (uint256);\\n\\n  function destinationChainId() external view returns (uint256);\\n\\n  function executeSignatures(bytes memory _data, bytes memory _signatures) external;\\n\\n  function safeExecuteSignaturesWithAutoGasLimit(bytes memory _data, bytes memory _signatures) external;\\n}\\n\",\"keccak256\":\"0x343a551705ba02bb1aa83553c118135beb42a892ebe78d6f5f575891f6d17d9e\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/messaging/interfaces/ambs/Multichain.sol":{"Multichain":{"abi":[{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"address","name":"_fallback","type":"address"},{"internalType":"uint256","name":"_toChainID","type":"uint256"},{"internalType":"uint256","name":"_flags","type":"uint256"}],"name":"anyCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"},{"internalType":"uint256","name":"_toChainID","type":"uint256"},{"internalType":"uint256","name":"_dataLength","type":"uint256"}],"name":"calcSrcFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"context","outputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"fromChainID","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executor","outputs":[{"internalType":"address","name":"executor","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"interface to interact with multicall (prev anyswap) anycall proxy     see https://github.com/anyswap/multichain-smart-contracts/blob/main/contracts/anycall/AnyswapV6CallProxy.sol","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"anyCall(address,bytes,address,uint256,uint256)":"bd45c4e7","calcSrcFees(string,uint256,uint256)":"66c96b37","context()":"d0496d6a","executor()":"c34c08e5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_fallback\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_toChainID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_flags\",\"type\":\"uint256\"}],\"name\":\"anyCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_appID\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_toChainID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_dataLength\",\"type\":\"uint256\"}],\"name\":\"calcSrcFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"context\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fromChainID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"interface to interact with multicall (prev anyswap) anycall proxy     see https://github.com/anyswap/multichain-smart-contracts/blob/main/contracts/anycall/AnyswapV6CallProxy.sol\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/interfaces/ambs/Multichain.sol\":\"Multichain\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/interfaces/ambs/Multichain.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @dev interface to interact with multicall (prev anyswap) anycall proxy\\n *     see https://github.com/anyswap/multichain-smart-contracts/blob/main/contracts/anycall/AnyswapV6CallProxy.sol\\n */\\ninterface Multichain {\\n  function anyCall(\\n    address _to,\\n    bytes calldata _data,\\n    address _fallback,\\n    uint256 _toChainID,\\n    uint256 _flags\\n  ) external payable;\\n\\n  function context()\\n    external\\n    view\\n    returns (\\n      address from,\\n      uint256 fromChainID,\\n      uint256 nonce\\n    );\\n\\n  function executor() external view returns (address executor);\\n\\n  function calcSrcFees(\\n    string calldata _appID,\\n    uint256 _toChainID,\\n    uint256 _dataLength\\n  ) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xdb3f6c60f9b28aec1a7d5a05378f7eb7783b35cf8bab2a72bd96040249131ef7\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/messaging/interfaces/ambs/arbitrum/ArbitrumL2Amb.sol":{"ArbitrumL2Amb":{"abi":[{"inputs":[{"internalType":"address","name":"destAddr","type":"address"},{"internalType":"bytes","name":"calldataForL1","type":"bytes"}],"name":"sendTxToL1","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"sendTxToL1(address,bytes)":"928c169a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destAddr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"calldataForL1\",\"type\":\"bytes\"}],\"name\":\"sendTxToL1\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/interfaces/ambs/arbitrum/ArbitrumL2Amb.sol\":\"ArbitrumL2Amb\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/interfaces/ambs/arbitrum/ArbitrumL2Amb.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\ninterface ArbitrumL2Amb {\\n  // Send a transaction to L1\\n  function sendTxToL1(address destAddr, bytes calldata calldataForL1) external payable;\\n}\\n\",\"keccak256\":\"0x554d08783abbae962d9917e8a5d17731e82f61ea59bba5f4e8fa7d2d02c92ed3\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumInbox.sol":{"IArbitrumInbox":{"abi":[{"inputs":[{"internalType":"address","name":"destAddr","type":"address"},{"internalType":"uint256","name":"arbTxCallValue","type":"uint256"},{"internalType":"uint256","name":"maxSubmissionCost","type":"uint256"},{"internalType":"address","name":"submissionRefundAddress","type":"address"},{"internalType":"address","name":"valueRefundAddress","type":"address"},{"internalType":"uint256","name":"maxGas","type":"uint256"},{"internalType":"uint256","name":"gasPriceBid","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"createRetryableTicket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"}],"devdoc":{"details":"Arbitrum uses an inbox to aggregate messages going from L1 -> L2, source: https://github.com/OffchainLabs/nitro/blob/master/contracts/src/bridge/Inbox.sol","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"createRetryableTicket(address,uint256,uint256,address,address,uint256,uint256,bytes)":"679b6ded"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destAddr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"arbTxCallValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSubmissionCost\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"submissionRefundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"valueRefundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceBid\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"createRetryableTicket\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Arbitrum uses an inbox to aggregate messages going from L1 -> L2, source: https://github.com/OffchainLabs/nitro/blob/master/contracts/src/bridge/Inbox.sol\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Interface for sending L1 -> L2 messagesto Arbitrum.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumInbox.sol\":\"IArbitrumInbox\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumInbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for sending L1 -> L2 messagesto Arbitrum.\\n * @dev Arbitrum uses an inbox to aggregate messages going from L1 -> L2, source:\\n * https://github.com/OffchainLabs/nitro/blob/master/contracts/src/bridge/Inbox.sol\\n *\\n */\\ninterface IArbitrumInbox {\\n  function createRetryableTicket(\\n    address destAddr,\\n    uint256 arbTxCallValue,\\n    uint256 maxSubmissionCost,\\n    address submissionRefundAddress,\\n    address valueRefundAddress,\\n    uint256 maxGas,\\n    uint256 gasPriceBid,\\n    bytes calldata data\\n  ) external payable returns (uint256);\\n}\\n\",\"keccak256\":\"0x6d4839148bce5c2e4309817f10bae3e1f7a30f71ee1e37078263b30444da2223\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Interface for sending L1 -> L2 messagesto Arbitrum.","version":1}}},"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumOutbox.sol":{"IArbitrumOutbox":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"l2Sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"zero","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transactionIndex","type":"uint256"}],"name":"OutBoxTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"outputRoot","type":"bytes32"}],"name":"SendRootUpdated","type":"event"},{"inputs":[],"name":"OUTBOX_VERSION","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"l2Sender","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"l2Block","type":"uint256"},{"internalType":"uint256","name":"l1Block","type":"uint256"},{"internalType":"uint256","name":"l2Timestamp","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"calculateItemHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"path","type":"uint256"},{"internalType":"bytes32","name":"item","type":"bytes32"}],"name":"calculateMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"l2Sender","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"l2Block","type":"uint256"},{"internalType":"uint256","name":"l1Block","type":"uint256"},{"internalType":"uint256","name":"l2Timestamp","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"executeTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"l2Sender","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"l2Block","type":"uint256"},{"internalType":"uint256","name":"l1Block","type":"uint256"},{"internalType":"uint256","name":"l2Timestamp","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"executeTransactionSimulation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"isSpent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2ToL1Block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2ToL1EthBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2ToL1OutputId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2ToL1Sender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2ToL1Timestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rollup","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"roots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"spent","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sendRoot","type":"bytes32"},{"internalType":"bytes32","name":"l2BlockHash","type":"bytes32"}],"name":"updateSendRoot","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Arbitrum uses an inbox to aggregate messages going from L1 -> L2, source: https://github.com/OffchainLabs/nitro/blob/master/contracts/src/bridge/Inbox.sol","kind":"dev","methods":{"executeTransaction(bytes32[],uint256,address,address,uint256,uint256,uint256,uint256,bytes)":{"details":"Reverts if dispute period hasn't expired, since the outbox entry      is only created once the rollup confirms the respective assertion.it is not possible to execute any L2-to-L1 transaction which contains data      to a contract address without any code (as enforced by the Bridge contract).","params":{"data":"abi-encoded L1 message data","index":"Merkle path to message","l1Block":"l1 block number at which sendTxToL1 call was made","l2Block":"l2 block number at which sendTxToL1 call was made","l2Sender":"sender if original message (i.e., caller of ArbSys.sendTxToL1)","l2Timestamp":"l2 Timestamp at which sendTxToL1 call was made","proof":"Merkle proof of message inclusion in send root","to":"destination address for L1 contract call","value":"wei in L1 message"}},"executeTransactionSimulation(uint256,address,address,uint256,uint256,uint256,uint256,bytes)":{"details":"function used to simulate the result of a particular function call from the outbox       it is useful for things such as gas estimates. This function includes all costs except for       proof validation (which can be considered offchain as a somewhat of a fixed cost - it's       not really a fixed cost, but can be treated as so with a fixed overhead for gas estimation).       We can't include the cost of proof validation since this is intended to be used to simulate txs       that are included in yet-to-be confirmed merkle roots. The simulation entrypoint could instead pretend       to confirm a pending merkle root, but that would be less pratical for integrating with tooling.       It is only possible to trigger it when the msg sender is address zero, which should be impossible       unless under simulation in an eth_call or eth_estimateGas"},"isSpent(uint256)":{"params":{"index":"Merkle path to message"},"returns":{"_0":"true if the message has been spent"}},"l2ToL1Block()":{"returns":{"_0":"l2Block return L2 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active"}},"l2ToL1EthBlock()":{"returns":{"_0":"l1Block return L1 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active"}},"l2ToL1OutputId()":{"returns":{"_0":"outputId returns the unique output identifier of the L2 to L1 tx or 0 if no L2 to L1 transaction is active"}},"l2ToL1Sender()":{"details":"the l2ToL1Sender behaves as the tx.origin, the msg.sender should be validated to protect against reentrancies"},"l2ToL1Timestamp()":{"returns":{"_0":"timestamp return L2 timestamp when the L2 tx was initiated or 0 if no L2 to L1 transaction is active"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"OUTBOX_VERSION()":"c75184df","calculateItemHash(address,address,uint256,uint256,uint256,uint256,bytes)":"9f0c04bf","calculateMerkleRoot(bytes32[],uint256,bytes32)":"007436d3","executeTransaction(bytes32[],uint256,address,address,uint256,uint256,uint256,uint256,bytes)":"08635a95","executeTransactionSimulation(uint256,address,address,uint256,uint256,uint256,uint256,bytes)":"288e5b10","isSpent(uint256)":"5a129efe","l2ToL1Block()":"46547790","l2ToL1EthBlock()":"8515bc6a","l2ToL1OutputId()":"72f2a8c7","l2ToL1Sender()":"80648b02","l2ToL1Timestamp()":"b0f30537","rollup()":"cb23bcb5","roots(bytes32)":"ae6dead7","spent(uint256)":"d5b5cc23","updateSendRoot(bytes32,bytes32)":"a04cee60"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"zero\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionIndex\",\"type\":\"uint256\"}],\"name\":\"OutBoxTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"name\":\"SendRootUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"OUTBOX_VERSION\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"calculateItemHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"path\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"item\",\"type\":\"bytes32\"}],\"name\":\"calculateMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"l2Sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"l2Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l1Block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"l2Timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeTransactionSimulation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"isSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Block\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1EthBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1OutputId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2ToL1Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"roots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"spent\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sendRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"l2BlockHash\",\"type\":\"bytes32\"}],\"name\":\"updateSendRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Arbitrum uses an inbox to aggregate messages going from L1 -> L2, source: https://github.com/OffchainLabs/nitro/blob/master/contracts/src/bridge/Inbox.sol\",\"kind\":\"dev\",\"methods\":{\"executeTransaction(bytes32[],uint256,address,address,uint256,uint256,uint256,uint256,bytes)\":{\"details\":\"Reverts if dispute period hasn't expired, since the outbox entry      is only created once the rollup confirms the respective assertion.it is not possible to execute any L2-to-L1 transaction which contains data      to a contract address without any code (as enforced by the Bridge contract).\",\"params\":{\"data\":\"abi-encoded L1 message data\",\"index\":\"Merkle path to message\",\"l1Block\":\"l1 block number at which sendTxToL1 call was made\",\"l2Block\":\"l2 block number at which sendTxToL1 call was made\",\"l2Sender\":\"sender if original message (i.e., caller of ArbSys.sendTxToL1)\",\"l2Timestamp\":\"l2 Timestamp at which sendTxToL1 call was made\",\"proof\":\"Merkle proof of message inclusion in send root\",\"to\":\"destination address for L1 contract call\",\"value\":\"wei in L1 message\"}},\"executeTransactionSimulation(uint256,address,address,uint256,uint256,uint256,uint256,bytes)\":{\"details\":\"function used to simulate the result of a particular function call from the outbox       it is useful for things such as gas estimates. This function includes all costs except for       proof validation (which can be considered offchain as a somewhat of a fixed cost - it's       not really a fixed cost, but can be treated as so with a fixed overhead for gas estimation).       We can't include the cost of proof validation since this is intended to be used to simulate txs       that are included in yet-to-be confirmed merkle roots. The simulation entrypoint could instead pretend       to confirm a pending merkle root, but that would be less pratical for integrating with tooling.       It is only possible to trigger it when the msg sender is address zero, which should be impossible       unless under simulation in an eth_call or eth_estimateGas\"},\"isSpent(uint256)\":{\"params\":{\"index\":\"Merkle path to message\"},\"returns\":{\"_0\":\"true if the message has been spent\"}},\"l2ToL1Block()\":{\"returns\":{\"_0\":\"l2Block return L2 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\"}},\"l2ToL1EthBlock()\":{\"returns\":{\"_0\":\"l1Block return L1 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\"}},\"l2ToL1OutputId()\":{\"returns\":{\"_0\":\"outputId returns the unique output identifier of the L2 to L1 tx or 0 if no L2 to L1 transaction is active\"}},\"l2ToL1Sender()\":{\"details\":\"the l2ToL1Sender behaves as the tx.origin, the msg.sender should be validated to protect against reentrancies\"},\"l2ToL1Timestamp()\":{\"returns\":{\"_0\":\"timestamp return L2 timestamp when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeTransaction(bytes32[],uint256,address,address,uint256,uint256,uint256,uint256,bytes)\":{\"notice\":\"Executes a messages in an Outbox entry.\"},\"l2ToL1Sender()\":{\"notice\":\"When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account         When the return value is zero, that means this is a system message\"}},\"notice\":\"Interface for sending L1 -> L2 messagesto Arbitrum.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumOutbox.sol\":\"IArbitrumOutbox\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for sending L1 -> L2 messagesto Arbitrum.\\n * @dev Arbitrum uses an inbox to aggregate messages going from L1 -> L2, source:\\n * https://github.com/OffchainLabs/nitro/blob/master/contracts/src/bridge/Inbox.sol\\n *\\n */\\ninterface IArbitrumOutbox {\\n  event SendRootUpdated(bytes32 indexed blockHash, bytes32 indexed outputRoot);\\n  event OutBoxTransactionExecuted(\\n    address indexed to,\\n    address indexed l2Sender,\\n    uint256 indexed zero,\\n    uint256 transactionIndex\\n  );\\n\\n  function rollup() external view returns (address); // the rollup contract\\n\\n  // function bridge() external view returns (IBridge); // the bridge contract\\n\\n  function spent(uint256) external view returns (bytes32); // packed spent bitmap\\n\\n  function roots(bytes32) external view returns (bytes32); // maps root hashes => L2 block hash\\n\\n  // solhint-disable-next-line func-name-mixedcase\\n  function OUTBOX_VERSION() external view returns (uint128); // the outbox version\\n\\n  function updateSendRoot(bytes32 sendRoot, bytes32 l2BlockHash) external;\\n\\n  /// @notice When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account\\n  ///         When the return value is zero, that means this is a system message\\n  /// @dev the l2ToL1Sender behaves as the tx.origin, the msg.sender should be validated to protect against reentrancies\\n  function l2ToL1Sender() external view returns (address);\\n\\n  /// @return l2Block return L2 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\\n  function l2ToL1Block() external view returns (uint256);\\n\\n  /// @return l1Block return L1 block when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\\n  function l2ToL1EthBlock() external view returns (uint256);\\n\\n  /// @return timestamp return L2 timestamp when the L2 tx was initiated or 0 if no L2 to L1 transaction is active\\n  function l2ToL1Timestamp() external view returns (uint256);\\n\\n  /// @return outputId returns the unique output identifier of the L2 to L1 tx or 0 if no L2 to L1 transaction is active\\n  function l2ToL1OutputId() external view returns (bytes32);\\n\\n  /**\\n   * @notice Executes a messages in an Outbox entry.\\n   * @dev Reverts if dispute period hasn't expired, since the outbox entry\\n   *      is only created once the rollup confirms the respective assertion.\\n   * @dev it is not possible to execute any L2-to-L1 transaction which contains data\\n   *      to a contract address without any code (as enforced by the Bridge contract).\\n   * @param proof Merkle proof of message inclusion in send root\\n   * @param index Merkle path to message\\n   * @param l2Sender sender if original message (i.e., caller of ArbSys.sendTxToL1)\\n   * @param to destination address for L1 contract call\\n   * @param l2Block l2 block number at which sendTxToL1 call was made\\n   * @param l1Block l1 block number at which sendTxToL1 call was made\\n   * @param l2Timestamp l2 Timestamp at which sendTxToL1 call was made\\n   * @param value wei in L1 message\\n   * @param data abi-encoded L1 message data\\n   */\\n  function executeTransaction(\\n    bytes32[] calldata proof,\\n    uint256 index,\\n    address l2Sender,\\n    address to,\\n    uint256 l2Block,\\n    uint256 l1Block,\\n    uint256 l2Timestamp,\\n    uint256 value,\\n    bytes calldata data\\n  ) external;\\n\\n  /**\\n   *  @dev function used to simulate the result of a particular function call from the outbox\\n   *       it is useful for things such as gas estimates. This function includes all costs except for\\n   *       proof validation (which can be considered offchain as a somewhat of a fixed cost - it's\\n   *       not really a fixed cost, but can be treated as so with a fixed overhead for gas estimation).\\n   *       We can't include the cost of proof validation since this is intended to be used to simulate txs\\n   *       that are included in yet-to-be confirmed merkle roots. The simulation entrypoint could instead pretend\\n   *       to confirm a pending merkle root, but that would be less pratical for integrating with tooling.\\n   *       It is only possible to trigger it when the msg sender is address zero, which should be impossible\\n   *       unless under simulation in an eth_call or eth_estimateGas\\n   */\\n  function executeTransactionSimulation(\\n    uint256 index,\\n    address l2Sender,\\n    address to,\\n    uint256 l2Block,\\n    uint256 l1Block,\\n    uint256 l2Timestamp,\\n    uint256 value,\\n    bytes calldata data\\n  ) external;\\n\\n  /**\\n   * @param index Merkle path to message\\n   * @return true if the message has been spent\\n   */\\n  function isSpent(uint256 index) external view returns (bool);\\n\\n  function calculateItemHash(\\n    address l2Sender,\\n    address to,\\n    uint256 l2Block,\\n    uint256 l1Block,\\n    uint256 l2Timestamp,\\n    uint256 value,\\n    bytes calldata data\\n  ) external pure returns (bytes32);\\n\\n  function calculateMerkleRoot(\\n    bytes32[] memory proof,\\n    uint256 path,\\n    bytes32 item\\n  ) external pure returns (bytes32);\\n}\\n\",\"keccak256\":\"0xd047fddc2c35a59593ba5cc717f5ed8ca1437241ba23762a498f55e51629135c\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeTransaction(bytes32[],uint256,address,address,uint256,uint256,uint256,uint256,bytes)":{"notice":"Executes a messages in an Outbox entry."},"l2ToL1Sender()":{"notice":"When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account         When the return value is zero, that means this is a system message"}},"notice":"Interface for sending L1 -> L2 messagesto Arbitrum.","version":1}}},"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumRollup.sol":{"IArbitrumRollup":{"abi":[{"inputs":[{"internalType":"uint64","name":"nodeNum","type":"uint64"}],"name":"getNode","outputs":[{"components":[{"internalType":"bytes32","name":"stateHash","type":"bytes32"},{"internalType":"bytes32","name":"challengeHash","type":"bytes32"},{"internalType":"bytes32","name":"confirmData","type":"bytes32"},{"internalType":"uint64","name":"prevNum","type":"uint64"},{"internalType":"uint64","name":"deadlineBlock","type":"uint64"},{"internalType":"uint64","name":"noChildConfirmedBeforeBlock","type":"uint64"},{"internalType":"uint64","name":"stakerCount","type":"uint64"},{"internalType":"uint64","name":"childStakerCount","type":"uint64"},{"internalType":"uint64","name":"firstChildBlock","type":"uint64"},{"internalType":"uint64","name":"latestChildNumber","type":"uint64"},{"internalType":"uint64","name":"createdAtBlock","type":"uint64"},{"internalType":"bytes32","name":"nodeHash","type":"bytes32"}],"internalType":"struct Node","name":"","type":"tuple"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getNode(uint64)":"92c8134c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nodeNum\",\"type\":\"uint64\"}],\"name\":\"getNode\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"challengeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"confirmData\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"prevNum\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"deadlineBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"noChildConfirmedBeforeBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"stakerCount\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"childStakerCount\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"firstChildBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"latestChildNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"createdAtBlock\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"nodeHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct Node\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getNode(uint64)\":{\"notice\":\"Get the Node for the given index.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumRollup.sol\":\"IArbitrumRollup\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/interfaces/ambs/arbitrum/IArbitrumRollup.sol\":{\"content\":\"pragma solidity 0.8.17;\\n\\n// modified from: https://github.com/OffchainLabs/nitro/blob/master/contracts/src/rollup/Node.sol\\nstruct Node {\\n  // Hash of the state of the chain as of this node\\n  bytes32 stateHash;\\n  // Hash of the data that can be challenged\\n  bytes32 challengeHash;\\n  // Hash of the data that will be committed if this node is confirmed\\n  bytes32 confirmData;\\n  // Index of the node previous to this one\\n  uint64 prevNum;\\n  // Deadline at which this node can be confirmed\\n  uint64 deadlineBlock;\\n  // Deadline at which a child of this node can be confirmed\\n  uint64 noChildConfirmedBeforeBlock;\\n  // Number of stakers staked on this node. This includes real stakers and zombies\\n  uint64 stakerCount;\\n  // Number of stakers staked on a child node. This includes real stakers and zombies\\n  uint64 childStakerCount;\\n  // This value starts at zero and is set to a value when the first child is created. After that it is constant until the node is destroyed or the owner destroys pending nodes\\n  uint64 firstChildBlock;\\n  // The number of the latest child of this node to be created\\n  uint64 latestChildNumber;\\n  // The block number when this node was created\\n  uint64 createdAtBlock;\\n  // A hash of all the data needed to determine this node's validity, to protect against reorgs\\n  bytes32 nodeHash;\\n}\\n\\n// modified from: https://github.com/OffchainLabs/nitro/blob/master/contracts/src/rollup/IRollupCore.sol\\ninterface IArbitrumRollup {\\n  /**\\n   * @notice Get the Node for the given index.\\n   */\\n  function getNode(uint64 nodeNum) external view returns (Node memory);\\n}\\n\",\"keccak256\":\"0xb393c714fd6a4592f72fd5ad32732f77f12f6b6399f1033d6d14a7a7b6c98001\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"getNode(uint64)":{"notice":"Get the Node for the given index."}},"version":1}}},"contracts/messaging/interfaces/ambs/optimism/IStateCommitmentChain.sol":{"IStateCommitmentChain":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_batchIndex","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_batchRoot","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"_batchSize","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_prevTotalElements","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"StateBatchAppended","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_batchIndex","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_batchRoot","type":"bytes32"}],"name":"StateBatchDeleted","type":"event"},{"inputs":[{"internalType":"bytes32[]","name":"_batch","type":"bytes32[]"},{"internalType":"uint256","name":"_shouldStartAtElement","type":"uint256"}],"name":"appendStateBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"batchIndex","type":"uint256"},{"internalType":"bytes32","name":"batchRoot","type":"bytes32"},{"internalType":"uint256","name":"batchSize","type":"uint256"},{"internalType":"uint256","name":"prevTotalElements","type":"uint256"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct ChainBatchHeader","name":"_batchHeader","type":"tuple"}],"name":"deleteStateBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLastSequencerTimestamp","outputs":[{"internalType":"uint256","name":"_lastSequencerTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalBatches","outputs":[{"internalType":"uint256","name":"_totalBatches","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalElements","outputs":[{"internalType":"uint256","name":"_totalElements","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"batchIndex","type":"uint256"},{"internalType":"bytes32","name":"batchRoot","type":"bytes32"},{"internalType":"uint256","name":"batchSize","type":"uint256"},{"internalType":"uint256","name":"prevTotalElements","type":"uint256"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct ChainBatchHeader","name":"_batchHeader","type":"tuple"}],"name":"insideFraudProofWindow","outputs":[{"internalType":"bool","name":"_inside","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_element","type":"bytes32"},{"components":[{"internalType":"uint256","name":"batchIndex","type":"uint256"},{"internalType":"bytes32","name":"batchRoot","type":"bytes32"},{"internalType":"uint256","name":"batchSize","type":"uint256"},{"internalType":"uint256","name":"prevTotalElements","type":"uint256"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct ChainBatchHeader","name":"_batchHeader","type":"tuple"},{"components":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bytes32[]","name":"siblings","type":"bytes32[]"}],"internalType":"struct ChainInclusionProof","name":"_proof","type":"tuple"}],"name":"verifyStateCommitment","outputs":[{"internalType":"bool","name":"_verified","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/rollup/IStateCommitmentChain.sol","kind":"dev","methods":{"appendStateBatch(bytes32[],uint256)":{"params":{"_batch":"Batch of state roots.","_shouldStartAtElement":"Index of the element at which this batch should start."}},"deleteStateBatch((uint256,bytes32,uint256,uint256,bytes))":{"params":{"_batchHeader":"Header of the batch to start deleting from."}},"getLastSequencerTimestamp()":{"returns":{"_lastSequencerTimestamp":"Last sequencer batch timestamp."}},"getTotalBatches()":{"returns":{"_totalBatches":"Total submitted batches."}},"getTotalElements()":{"returns":{"_totalElements":"Total submitted elements."}},"insideFraudProofWindow((uint256,bytes32,uint256,uint256,bytes))":{"params":{"_batchHeader":"Header of the batch to check."},"returns":{"_inside":"Whether or not the batch is inside the fraud proof window."}},"verifyStateCommitment(bytes32,(uint256,bytes32,uint256,uint256,bytes),(uint256,bytes32[]))":{"params":{"_batchHeader":"Header of the batch in which the element was included.","_element":"Hash of the element to verify a proof for.","_proof":"Merkle inclusion proof for the element."}}},"title":"IStateCommitmentChain","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"appendStateBatch(bytes32[],uint256)":"8ca5cbb9","deleteStateBatch((uint256,bytes32,uint256,uint256,bytes))":"b8e189ac","getLastSequencerTimestamp()":"7ad168a0","getTotalBatches()":"e561dddc","getTotalElements()":"7aa63a86","insideFraudProofWindow((uint256,bytes32,uint256,uint256,bytes))":"9418bddd","verifyStateCommitment(bytes32,(uint256,bytes32,uint256,uint256,bytes),(uint256,bytes32[]))":"4d69ee57"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_batchRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_batchSize\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_prevTotalElements\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"StateBatchAppended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_batchRoot\",\"type\":\"bytes32\"}],\"name\":\"StateBatchDeleted\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_batch\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"_shouldStartAtElement\",\"type\":\"uint256\"}],\"name\":\"appendStateBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"batchRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"batchSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevTotalElements\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct ChainBatchHeader\",\"name\":\"_batchHeader\",\"type\":\"tuple\"}],\"name\":\"deleteStateBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastSequencerTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_lastSequencerTimestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalBatches\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalBatches\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalElements\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalElements\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"batchRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"batchSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevTotalElements\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct ChainBatchHeader\",\"name\":\"_batchHeader\",\"type\":\"tuple\"}],\"name\":\"insideFraudProofWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_inside\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_element\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"batchRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"batchSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"prevTotalElements\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct ChainBatchHeader\",\"name\":\"_batchHeader\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"siblings\",\"type\":\"bytes32[]\"}],\"internalType\":\"struct ChainInclusionProof\",\"name\":\"_proof\",\"type\":\"tuple\"}],\"name\":\"verifyStateCommitment\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_verified\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/rollup/IStateCommitmentChain.sol\",\"kind\":\"dev\",\"methods\":{\"appendStateBatch(bytes32[],uint256)\":{\"params\":{\"_batch\":\"Batch of state roots.\",\"_shouldStartAtElement\":\"Index of the element at which this batch should start.\"}},\"deleteStateBatch((uint256,bytes32,uint256,uint256,bytes))\":{\"params\":{\"_batchHeader\":\"Header of the batch to start deleting from.\"}},\"getLastSequencerTimestamp()\":{\"returns\":{\"_lastSequencerTimestamp\":\"Last sequencer batch timestamp.\"}},\"getTotalBatches()\":{\"returns\":{\"_totalBatches\":\"Total submitted batches.\"}},\"getTotalElements()\":{\"returns\":{\"_totalElements\":\"Total submitted elements.\"}},\"insideFraudProofWindow((uint256,bytes32,uint256,uint256,bytes))\":{\"params\":{\"_batchHeader\":\"Header of the batch to check.\"},\"returns\":{\"_inside\":\"Whether or not the batch is inside the fraud proof window.\"}},\"verifyStateCommitment(bytes32,(uint256,bytes32,uint256,uint256,bytes),(uint256,bytes32[]))\":{\"params\":{\"_batchHeader\":\"Header of the batch in which the element was included.\",\"_element\":\"Hash of the element to verify a proof for.\",\"_proof\":\"Merkle inclusion proof for the element.\"}}},\"title\":\"IStateCommitmentChain\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"appendStateBatch(bytes32[],uint256)\":{\"notice\":\"Appends a batch of state roots to the chain.\"},\"deleteStateBatch((uint256,bytes32,uint256,uint256,bytes))\":{\"notice\":\"Deletes all state roots after (and including) a given batch.\"},\"getLastSequencerTimestamp()\":{\"notice\":\"Retrieves the timestamp of the last batch submitted by the sequencer.\"},\"getTotalBatches()\":{\"notice\":\"Retrieves the total number of batches submitted.\"},\"getTotalElements()\":{\"notice\":\"Retrieves the total number of elements submitted.\"},\"insideFraudProofWindow((uint256,bytes32,uint256,uint256,bytes))\":{\"notice\":\"Checks whether a given batch is still inside its fraud proof window.\"},\"verifyStateCommitment(bytes32,(uint256,bytes32,uint256,uint256,bytes),(uint256,bytes32[]))\":{\"notice\":\"Verifies a batch inclusion proof.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/interfaces/ambs/optimism/IStateCommitmentChain.sol\":\"IStateCommitmentChain\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/interfaces/ambs/optimism/IStateCommitmentChain.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// modified from: https://github.com/ethereum-optimism/optimism/blob/fcfcf6e7e69801e63904ec53815db01a8d45dcac/packages/contracts/contracts/libraries/codec/Lib_OVMCodec.sol#L34-L40\\nstruct ChainBatchHeader {\\n  uint256 batchIndex;\\n  bytes32 batchRoot;\\n  uint256 batchSize;\\n  uint256 prevTotalElements;\\n  bytes extraData;\\n}\\n\\n// modified from: https://github.com/ethereum-optimism/optimism/blob/fcfcf6e7e69801e63904ec53815db01a8d45dcac/packages/contracts/contracts/libraries/codec/Lib_OVMCodec.sol#L42-L45\\nstruct ChainInclusionProof {\\n  uint256 index;\\n  bytes32[] siblings;\\n}\\n\\n// modified from: https://github.com/ethereum-optimism/optimism/blob/fcfcf6e7e69801e63904ec53815db01a8d45dcac/packages/contracts/contracts/L1/messaging/IL1CrossDomainMessenger.sol#L18-L24\\nstruct L2MessageInclusionProof {\\n  bytes32 stateRoot;\\n  ChainBatchHeader stateRootBatchHeader;\\n  ChainInclusionProof stateRootProof;\\n  bytes stateTrieWitness;\\n  bytes storageTrieWitness;\\n}\\n\\n/**\\n * @title IStateCommitmentChain\\n *\\n * @dev modified from: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/rollup/IStateCommitmentChain.sol\\n */\\ninterface IStateCommitmentChain {\\n  /**********\\n   * Events *\\n   **********/\\n\\n  event StateBatchAppended(\\n    uint256 indexed _batchIndex,\\n    bytes32 _batchRoot,\\n    uint256 _batchSize,\\n    uint256 _prevTotalElements,\\n    bytes _extraData\\n  );\\n\\n  event StateBatchDeleted(uint256 indexed _batchIndex, bytes32 _batchRoot);\\n\\n  /********************\\n   * Public Functions *\\n   ********************/\\n\\n  /**\\n   * Retrieves the total number of elements submitted.\\n   * @return _totalElements Total submitted elements.\\n   */\\n  function getTotalElements() external view returns (uint256 _totalElements);\\n\\n  /**\\n   * Retrieves the total number of batches submitted.\\n   * @return _totalBatches Total submitted batches.\\n   */\\n  function getTotalBatches() external view returns (uint256 _totalBatches);\\n\\n  /**\\n   * Retrieves the timestamp of the last batch submitted by the sequencer.\\n   * @return _lastSequencerTimestamp Last sequencer batch timestamp.\\n   */\\n  function getLastSequencerTimestamp() external view returns (uint256 _lastSequencerTimestamp);\\n\\n  /**\\n   * Appends a batch of state roots to the chain.\\n   * @param _batch Batch of state roots.\\n   * @param _shouldStartAtElement Index of the element at which this batch should start.\\n   */\\n  function appendStateBatch(bytes32[] calldata _batch, uint256 _shouldStartAtElement) external;\\n\\n  /**\\n   * Deletes all state roots after (and including) a given batch.\\n   * @param _batchHeader Header of the batch to start deleting from.\\n   */\\n  function deleteStateBatch(ChainBatchHeader memory _batchHeader) external;\\n\\n  /**\\n   * Verifies a batch inclusion proof.\\n   * @param _element Hash of the element to verify a proof for.\\n   * @param _batchHeader Header of the batch in which the element was included.\\n   * @param _proof Merkle inclusion proof for the element.\\n   */\\n  function verifyStateCommitment(\\n    bytes32 _element,\\n    ChainBatchHeader memory _batchHeader,\\n    ChainInclusionProof memory _proof\\n  ) external view returns (bool _verified);\\n\\n  /**\\n   * Checks whether a given batch is still inside its fraud proof window.\\n   * @param _batchHeader Header of the batch to check.\\n   * @return _inside Whether or not the batch is inside the fraud proof window.\\n   */\\n  function insideFraudProofWindow(ChainBatchHeader memory _batchHeader) external view returns (bool _inside);\\n}\\n\",\"keccak256\":\"0x76577b06af1692d10b9a41bd0beb4edf11f3a00cfb2895df416aaf872781788c\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"appendStateBatch(bytes32[],uint256)":{"notice":"Appends a batch of state roots to the chain."},"deleteStateBatch((uint256,bytes32,uint256,uint256,bytes))":{"notice":"Deletes all state roots after (and including) a given batch."},"getLastSequencerTimestamp()":{"notice":"Retrieves the timestamp of the last batch submitted by the sequencer."},"getTotalBatches()":{"notice":"Retrieves the total number of batches submitted."},"getTotalElements()":{"notice":"Retrieves the total number of elements submitted."},"insideFraudProofWindow((uint256,bytes32,uint256,uint256,bytes))":{"notice":"Checks whether a given batch is still inside its fraud proof window."},"verifyStateCommitment(bytes32,(uint256,bytes32,uint256,uint256,bytes),(uint256,bytes32[]))":{"notice":"Verifies a batch inclusion proof."}},"version":1}}},"contracts/messaging/interfaces/ambs/optimism/OptimismAmb.sol":{"OptimismAmb":{"abi":[{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"uint32","name":"_gasLimit","type":"uint32"}],"name":"sendMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"xDomainMessageSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"The optimism bridge shares both of these functions, but it is important to note that when going from L2 -> L1, the message cannot be processed by the AMB until the challenge period elapses. HOWEVER, before the challenge elapses, you can read the state of the L2 as it is placed on mainnet. By processing data from the L2 state, we are able to \"circumvent\" this delay to a reasonable degree. This means that for messages going L1 -> L2, you can call \"processMessage\" and expect the call to be executed to pass up the aggregate root. When going from L2 -> L1, you must read the root from the L2 state L2 messenger: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2CrossDomainMessenger.sol L1 messenger: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"sendMessage(address,bytes,uint32)":"3dbb202b","xDomainMessageSender()":"6e296e45"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_gasLimit\",\"type\":\"uint32\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xDomainMessageSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The optimism bridge shares both of these functions, but it is important to note that when going from L2 -> L1, the message cannot be processed by the AMB until the challenge period elapses. HOWEVER, before the challenge elapses, you can read the state of the L2 as it is placed on mainnet. By processing data from the L2 state, we are able to \\\"circumvent\\\" this delay to a reasonable degree. This means that for messages going L1 -> L2, you can call \\\"processMessage\\\" and expect the call to be executed to pass up the aggregate root. When going from L2 -> L1, you must read the root from the L2 state L2 messenger: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2CrossDomainMessenger.sol L1 messenger: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/interfaces/ambs/optimism/OptimismAmb.sol\":\"OptimismAmb\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/interfaces/ambs/optimism/OptimismAmb.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @dev The optimism bridge shares both of these functions, but it is important\\n * to note that when going from L2 -> L1, the message cannot be processed by the\\n * AMB until the challenge period elapses.\\n *\\n * HOWEVER, before the challenge elapses, you can read the state of the L2 as it is\\n * placed on mainnet. By processing data from the L2 state, we are able to \\\"circumvent\\\"\\n * this delay to a reasonable degree.\\n *\\n * This means that for messages going L1 -> L2, you can call \\\"processMessage\\\" and expect\\n * the call to be executed to pass up the aggregate root. When going from L2 -> L1, you\\n * must read the root from the L2 state\\n *\\n * L2 messenger: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2CrossDomainMessenger.sol\\n * L1 messenger: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol\\n */\\ninterface OptimismAmb {\\n  function sendMessage(\\n    address _target,\\n    bytes memory _message,\\n    uint32 _gasLimit\\n  ) external;\\n\\n  function xDomainMessageSender() external view returns (address);\\n}\\n\",\"keccak256\":\"0xbce6aaa568441bd8ad60f2b5f1ad8d9e3c61cbc91ce4405d7a390980920f66f3\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/messaging/libraries/DomainIndexer.sol":{"DomainIndexer":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"domain","type":"uint32"},{"indexed":false,"internalType":"address","name":"connector","type":"address"}],"name":"DomainAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"domain","type":"uint32"}],"name":"DomainRemoved","type":"event"},{"inputs":[],"name":"MAX_DOMAINS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"connectors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"connectorsHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"domains","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"domainsHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"}],"name":"getConnectorForDomain","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"}],"name":"getDomainIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_domain","type":"uint32"}],"name":"isDomainSupported","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_connectors","type":"address[]"}],"name":"validateConnectors","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_domains","type":"uint32[]"},{"internalType":"address[]","name":"_connectors","type":"address[]"}],"name":"validateDomains","outputs":[],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"getConnectorForDomain(uint32)":{"details":"Inefficient, should only be used by caller if they have no index reference.","params":{"_domain":"The domain for which to get the hub connector address."}},"getDomainIndex(uint32)":{"details":"Reverts if domain is not supported.","params":{"_domain":"The domain for which to get the index value."}},"isDomainSupported(uint32)":{"params":{"_domain":"Domain to check."}},"validateConnectors(address[])":{"details":"Reverts if domains or connectors do not match, including ordering.","params":{"_connectors":"The given connectors array to check."}},"validateDomains(uint32[],address[])":{"details":"Reverts if domains or connectors do not match, including ordering.","params":{"_connectors":"The given connectors array to check.","_domains":"The given domains array to check."}}},"stateVariables":{"connectors":{"details":"This should be updated whenever the domains array is updated."},"connectorsHash":{"details":"This hash should be re-calculated whenever the connectors array is updated."},"domainToIndexPlusOne":{"details":"This should be updated whenever the domains array is updated."},"domains":{"details":"Whenever this domains array is updated, the connectors array should also be updated."},"domainsHash":{"details":"This hash should be re-calculated whenever the domains array is updated."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"MAX_DOMAINS()":"c8ef89de","connectors(uint256)":"13ede1a1","connectorsHash()":"498c2c2e","domains(uint256)":"66cf8fab","domainsHash()":"7bc24d99","getConnectorForDomain(uint32)":"7d434e91","getDomainIndex(uint32)":"3c4baaf8","isDomainSupported(uint32)":"24ec5d05","validateConnectors(address[])":"27186c6a","validateDomains(uint32[],address[])":"db0f0169"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"connector\",\"type\":\"address\"}],\"name\":\"DomainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"}],\"name\":\"DomainRemoved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_DOMAINS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"connectors\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"connectorsHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"domains\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainsHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"}],\"name\":\"getConnectorForDomain\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"}],\"name\":\"getDomainIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"}],\"name\":\"isDomainSupported\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_connectors\",\"type\":\"address[]\"}],\"name\":\"validateConnectors\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"_domains\",\"type\":\"uint32[]\"},{\"internalType\":\"address[]\",\"name\":\"_connectors\",\"type\":\"address[]\"}],\"name\":\"validateDomains\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getConnectorForDomain(uint32)\":{\"details\":\"Inefficient, should only be used by caller if they have no index reference.\",\"params\":{\"_domain\":\"The domain for which to get the hub connector address.\"}},\"getDomainIndex(uint32)\":{\"details\":\"Reverts if domain is not supported.\",\"params\":{\"_domain\":\"The domain for which to get the index value.\"}},\"isDomainSupported(uint32)\":{\"params\":{\"_domain\":\"Domain to check.\"}},\"validateConnectors(address[])\":{\"details\":\"Reverts if domains or connectors do not match, including ordering.\",\"params\":{\"_connectors\":\"The given connectors array to check.\"}},\"validateDomains(uint32[],address[])\":{\"details\":\"Reverts if domains or connectors do not match, including ordering.\",\"params\":{\"_connectors\":\"The given connectors array to check.\",\"_domains\":\"The given domains array to check.\"}}},\"stateVariables\":{\"connectors\":{\"details\":\"This should be updated whenever the domains array is updated.\"},\"connectorsHash\":{\"details\":\"This hash should be re-calculated whenever the connectors array is updated.\"},\"domainToIndexPlusOne\":{\"details\":\"This should be updated whenever the domains array is updated.\"},\"domains\":{\"details\":\"Whenever this domains array is updated, the connectors array should also be updated.\"},\"domainsHash\":{\"details\":\"This hash should be re-calculated whenever the domains array is updated.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"MAX_DOMAINS()\":{\"notice\":\"The absolute maximum number of domains that we should support. Domain and connector arrays are naturally unbounded, but the gas cost of reading these arrays in `updateHashes()` is bounded by the block's gas limit. If we want to set a hard ceiling for gas costs for the `updateHashes()` method at approx. 500K gas, with an average SLOAD cost of 900 gas per domain (1 uint32, 1 address):       500K / 900 = ~555 domains Realistically, the cap on the number of domains will likely exist in other places, but we cap it here as a last resort.\"},\"connectors(uint256)\":{\"notice\":\"Tracks the addresses of the hub connector contracts corresponding to subscribed spoke domains. The index of any given connector in this array should match the index of that connector's target spoke domain in the `domains` array above.\"},\"connectorsHash()\":{\"notice\":\"A \\\"quick reference\\\" hash used in the `propagate` method below to validate that the provided array of connectors matches the one we have in storage.\"},\"domains(uint256)\":{\"notice\":\"Domains array tracks currently subscribed domains to this hub aggregator. We should distribute the aggregate root to all of these domains in the `propagate` method.\"},\"domainsHash()\":{\"notice\":\"A \\\"quick reference\\\" hash used in the `propagate` method below to validate that the provided array of domains matches the one we have in storage.\"},\"getConnectorForDomain(uint32)\":{\"notice\":\"Gets the corresponding hub connector address for a given spoke domain.\"},\"getDomainIndex(uint32)\":{\"notice\":\"Gets the index of a given domain in the domains and connectors arrays.\"},\"isDomainSupported(uint32)\":{\"notice\":\"Convenience shortcut for supported domains. Used to sanity check adding new domains.\"},\"validateConnectors(address[])\":{\"notice\":\"Validate given connectors array is correct (i.e. it mirrors what is currently saved in storage).\"},\"validateDomains(uint32[],address[])\":{\"notice\":\"Validate given domains and connectors arrays are correct (i.e. they mirror what is currently saved in storage).\"}},\"notice\":\"This abstract contract was written to ensure domain and connector mutex is scalable for the purposes of messaging layer operations. In particular, it aims to reduce gas costs to be relatively static regardless of the number of domains kept in storage by enabling callers of `RootManager.propagate` to supply the `domains` and `connectors` arrays as params, and check the hashes of those params against those we keep in storage.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/libraries/DomainIndexer.sol\":\"DomainIndexer\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/libraries/DomainIndexer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice This abstract contract was written to ensure domain and connector mutex is scalable for the\\n * purposes of messaging layer operations. In particular, it aims to reduce gas costs to be relatively\\n * static regardless of the number of domains kept in storage by enabling callers of `RootManager.propagate`\\n * to supply the `domains` and `connectors` arrays as params, and check the hashes of those params against\\n * those we keep in storage.\\n */\\nabstract contract DomainIndexer {\\n  // ============ Events ============\\n\\n  event DomainAdded(uint32 domain, address connector);\\n  event DomainRemoved(uint32 domain);\\n\\n  // ============ Properties ============\\n\\n  /**\\n   * @notice The absolute maximum number of domains that we should support. Domain and connector arrays\\n   * are naturally unbounded, but the gas cost of reading these arrays in `updateHashes()` is bounded by\\n   * the block's gas limit.\\n   *\\n   * If we want to set a hard ceiling for gas costs for the `updateHashes()` method at approx. 500K gas,\\n   * with an average SLOAD cost of 900 gas per domain (1 uint32, 1 address):\\n   *       500K / 900 = ~555 domains\\n   *\\n   * Realistically, the cap on the number of domains will likely exist in other places, but we cap it\\n   * here as a last resort.\\n   */\\n  uint256 public constant MAX_DOMAINS = 500;\\n\\n  /**\\n   * @notice Domains array tracks currently subscribed domains to this hub aggregator.\\n   * We should distribute the aggregate root to all of these domains in the `propagate` method.\\n   * @dev Whenever this domains array is updated, the connectors array should also be updated.\\n   */\\n  uint32[] public domains;\\n\\n  /**\\n   * @notice A \\\"quick reference\\\" hash used in the `propagate` method below to validate that the provided\\n   * array of domains matches the one we have in storage.\\n   * @dev This hash should be re-calculated whenever the domains array is updated.\\n   */\\n  bytes32 public domainsHash;\\n\\n  /**\\n   * @notice Tracks the addresses of the hub connector contracts corresponding to subscribed spoke domains.\\n   * The index of any given connector in this array should match the index of that connector's target spoke\\n   * domain in the `domains` array above.\\n   * @dev This should be updated whenever the domains array is updated.\\n   */\\n  address[] public connectors;\\n\\n  /**\\n   * @notice A \\\"quick reference\\\" hash used in the `propagate` method below to validate that the provided\\n   * array of connectors matches the one we have in storage.\\n   * @dev This hash should be re-calculated whenever the connectors array is updated.\\n   */\\n  bytes32 public connectorsHash;\\n\\n  /**\\n   * @notice Shortcut to reverse lookup the index by domain. We index starting at one so the zero value can\\n   * be considered invalid (see fn: `isDomainSupported`).\\n   * @dev This should be updated whenever the domains array is updated.\\n   */\\n  mapping(uint32 => uint256) private domainToIndexPlusOne;\\n\\n  // ============ Getters ============\\n\\n  /**\\n   * @notice Convenience shortcut for supported domains. Used to sanity check adding new domains.\\n   * @param _domain Domain to check.\\n   */\\n  function isDomainSupported(uint32 _domain) public view returns (bool) {\\n    return domainToIndexPlusOne[_domain] != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the index of a given domain in the domains and connectors arrays.\\n   * @dev Reverts if domain is not supported.\\n   * @param _domain The domain for which to get the index value.\\n   */\\n  function getDomainIndex(uint32 _domain) public view returns (uint256) {\\n    uint256 index = domainToIndexPlusOne[_domain];\\n    require(index != 0, \\\"!supported\\\");\\n    return index - 1;\\n  }\\n\\n  /**\\n   * @notice Gets the corresponding hub connector address for a given spoke domain.\\n   * @dev Inefficient, should only be used by caller if they have no index reference.\\n   * @param _domain The domain for which to get the hub connector address.\\n   */\\n  function getConnectorForDomain(uint32 _domain) public view returns (address) {\\n    return connectors[getDomainIndex(_domain)];\\n  }\\n\\n  /**\\n   * @notice Validate given domains and connectors arrays are correct (i.e. they mirror what is\\n   * currently saved in storage).\\n   * @dev Reverts if domains or connectors do not match, including ordering.\\n   * @param _domains The given domains array to check.\\n   * @param _connectors The given connectors array to check.\\n   */\\n  function validateDomains(uint32[] calldata _domains, address[] calldata _connectors) public view {\\n    // Sanity check: arguments are same length.\\n    require(_domains.length == _connectors.length, \\\"!matching length\\\");\\n    // Validate that given domains match the current array in storage.\\n    require(keccak256(abi.encode(_domains)) == domainsHash, \\\"!domains\\\");\\n    // Validate that given connectors match the current array in storage.\\n    require(keccak256(abi.encode(_connectors)) == connectorsHash, \\\"!connectors\\\");\\n  }\\n\\n  /**\\n   * @notice Validate given connectors array is correct (i.e. it mirrors what is\\n   * currently saved in storage).\\n   * @dev Reverts if domains or connectors do not match, including ordering.\\n   * @param _connectors The given connectors array to check.\\n   */\\n  function validateConnectors(address[] calldata _connectors) public view {\\n    // Validate that given connectors match the current array in storage.\\n    require(keccak256(abi.encode(_connectors)) == connectorsHash, \\\"!connectors\\\");\\n  }\\n\\n  // ============ Helper Functions ============\\n\\n  /**\\n   * @notice Handles all mutex for adding support for a given domain.\\n   * @param _domain Domain for which we are adding support.\\n   * @param _connector Corresponding hub connector address belonging to given domain.\\n   */\\n  function addDomain(uint32 _domain, address _connector) internal {\\n    // Sanity check: domain does not already exist.\\n    require(!isDomainSupported(_domain), \\\"domain exists\\\");\\n    // Sanity check: connector is reasonable.\\n    require(_connector != address(0), \\\"!connector\\\");\\n    // Sanity check: Under maximum.\\n    require(domains.length < MAX_DOMAINS, \\\"DomainIndexer at capacity\\\");\\n\\n    // Push domain and connector to respective arrays.\\n    domains.push(_domain);\\n    connectors.push(_connector);\\n    // Set reverse lookup.\\n    uint256 _indexPlusOne = domains.length;\\n    domainToIndexPlusOne[_domain] = _indexPlusOne;\\n\\n    // Update the hashes for the given arrays.\\n    updateHashes();\\n\\n    emit DomainAdded(_domain, _connector);\\n  }\\n\\n  /**\\n   * @notice Handles all mutex for removing support for a given domain.\\n   * @param _domain Domain we are removing.\\n   * @return address of the hub connector for the domain we removed.\\n   */\\n  function removeDomain(uint32 _domain) internal returns (address) {\\n    uint256 _index = getDomainIndex(_domain);\\n    // Get the connector at the given index.\\n    address _connector = connectors[_index];\\n    // Sanity check: connector exists.\\n    require(_connector != address(0), \\\"connector !exists\\\");\\n\\n    // Shortcut: is the index the last index in the domains/connectors arrays?\\n    // IFF not, we'll need to swap the target with the current last so we can pop().\\n    uint256 _lastIndex = domains.length - 1;\\n    if (_index < _lastIndex) {\\n      // If the target index for removal is not the last index, we copy over the domain at the last\\n      // index to overwrite the target's index so we can conveniently pop the last item.\\n      uint32 copiedDomain = domains[_lastIndex];\\n      domains[_index] = copiedDomain;\\n      connectors[_index] = connectors[_lastIndex];\\n      // Update the domain to index mapping for the copied domain.\\n      domainToIndexPlusOne[copiedDomain] = _index + 1; // NOTE: Naturally adding 1 here; see mapping name.\\n    }\\n\\n    // Pop the last item in the arrays.\\n    domains.pop();\\n    connectors.pop();\\n    // Erase reverse lookup.\\n    delete domainToIndexPlusOne[_domain];\\n\\n    // Update the hashes for the given arrays.\\n    updateHashes();\\n\\n    emit DomainRemoved(_domain);\\n\\n    return _connector;\\n  }\\n\\n  /**\\n   * @notice Calculate the new hashes for the domains and connectors arrays and update storage refs.\\n   * @dev Used for the Connector update functions `addConnector`, `removeConnector`.\\n   */\\n  function updateHashes() internal {\\n    uint32[] memory _domains = domains;\\n    address[] memory _connectors = connectors;\\n    domainsHash = keccak256(abi.encode(_domains));\\n    connectorsHash = keccak256(abi.encode(_connectors));\\n  }\\n}\\n\",\"keccak256\":\"0x2f0f477581793a2d846d3525d6def40067a946dd1a68d700eec55a97febbc2f6\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":48424,"contract":"contracts/messaging/libraries/DomainIndexer.sol:DomainIndexer","label":"domains","offset":0,"slot":"0","type":"t_array(t_uint32)dyn_storage"},{"astId":48427,"contract":"contracts/messaging/libraries/DomainIndexer.sol:DomainIndexer","label":"domainsHash","offset":0,"slot":"1","type":"t_bytes32"},{"astId":48431,"contract":"contracts/messaging/libraries/DomainIndexer.sol:DomainIndexer","label":"connectors","offset":0,"slot":"2","type":"t_array(t_address)dyn_storage"},{"astId":48434,"contract":"contracts/messaging/libraries/DomainIndexer.sol:DomainIndexer","label":"connectorsHash","offset":0,"slot":"3","type":"t_bytes32"},{"astId":48439,"contract":"contracts/messaging/libraries/DomainIndexer.sol:DomainIndexer","label":"domainToIndexPlusOne","offset":0,"slot":"4","type":"t_mapping(t_uint32,t_uint256)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_uint32)dyn_storage":{"base":"t_uint32","encoding":"dynamic_array","label":"uint32[]","numberOfBytes":"32"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_uint32,t_uint256)":{"encoding":"mapping","key":"t_uint32","label":"mapping(uint32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"}}},"userdoc":{"kind":"user","methods":{"MAX_DOMAINS()":{"notice":"The absolute maximum number of domains that we should support. Domain and connector arrays are naturally unbounded, but the gas cost of reading these arrays in `updateHashes()` is bounded by the block's gas limit. If we want to set a hard ceiling for gas costs for the `updateHashes()` method at approx. 500K gas, with an average SLOAD cost of 900 gas per domain (1 uint32, 1 address):       500K / 900 = ~555 domains Realistically, the cap on the number of domains will likely exist in other places, but we cap it here as a last resort."},"connectors(uint256)":{"notice":"Tracks the addresses of the hub connector contracts corresponding to subscribed spoke domains. The index of any given connector in this array should match the index of that connector's target spoke domain in the `domains` array above."},"connectorsHash()":{"notice":"A \"quick reference\" hash used in the `propagate` method below to validate that the provided array of connectors matches the one we have in storage."},"domains(uint256)":{"notice":"Domains array tracks currently subscribed domains to this hub aggregator. We should distribute the aggregate root to all of these domains in the `propagate` method."},"domainsHash()":{"notice":"A \"quick reference\" hash used in the `propagate` method below to validate that the provided array of domains matches the one we have in storage."},"getConnectorForDomain(uint32)":{"notice":"Gets the corresponding hub connector address for a given spoke domain."},"getDomainIndex(uint32)":{"notice":"Gets the index of a given domain in the domains and connectors arrays."},"isDomainSupported(uint32)":{"notice":"Convenience shortcut for supported domains. Used to sanity check adding new domains."},"validateConnectors(address[])":{"notice":"Validate given connectors array is correct (i.e. it mirrors what is currently saved in storage)."},"validateDomains(uint32[],address[])":{"notice":"Validate given domains and connectors arrays are correct (i.e. they mirror what is currently saved in storage)."}},"notice":"This abstract contract was written to ensure domain and connector mutex is scalable for the purposes of messaging layer operations. In particular, it aims to reduce gas costs to be relatively static regardless of the number of domains kept in storage by enabling callers of `RootManager.propagate` to supply the `domains` and `connectors` arrays as params, and check the hashes of those params against those we keep in storage.","version":1}}},"contracts/messaging/libraries/MerkleLib.sol":{"MerkleLib":{"abi":[{"inputs":[],"name":"MerkleLib__insert_treeIsFull","type":"error"}],"devdoc":{"author":"Illusory Systems Inc.","kind":"dev","methods":{},"stateVariables":{"Z_0":{"details":"Z_i represent the hash values at different heights for a binary tree with leaf values equal to `0`. (e.g. Z_1 is the keccak256 hash of (0x0, 0x0), Z_2 is the keccak256 hash of (Z_1, Z_1), etc...) Z_0 is the bottom of the 33-layer tree, Z_32 is the top (i.e. root). Used to shortcut calculation in root calculation methods below."}},"title":"MerkleLib","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208f03b44d10acfd54ee50c9550572558998a89d47e47c8182c01f7c8b62bdb42364736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 SUB 0xB4 0x4D LT 0xAC REVERT SLOAD 0xEE POP 0xC9 SSTORE SDIV PUSH19 0x558998A89D47E47C8182C01F7C8B62BDB42364 PUSH20 0x6F6C634300081100330000000000000000000000 ","sourceMap":"209:30694:164:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;209:30694:164;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208f03b44d10acfd54ee50c9550572558998a89d47e47c8182c01f7c8b62bdb42364736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 SUB 0xB4 0x4D LT 0xAC REVERT SLOAD 0xEE POP 0xC9 SSTORE SDIV PUSH19 0x558998A89D47E47C8182C01F7C8B62BDB42364 PUSH20 0x6F6C634300081100330000000000000000000000 ","sourceMap":"209:30694:164:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"branchRoot(bytes32,bytes32[32] memory,uint256)":"infinite","insert(struct MerkleLib.Tree memory,bytes32)":"infinite","root(struct MerkleLib.Tree storage pointer)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"MerkleLib__insert_treeIsFull\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Illusory Systems Inc.\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"Z_0\":{\"details\":\"Z_i represent the hash values at different heights for a binary tree with leaf values equal to `0`. (e.g. Z_1 is the keccak256 hash of (0x0, 0x0), Z_2 is the keccak256 hash of (Z_1, Z_1), etc...) Z_0 is the bottom of the 33-layer tree, Z_32 is the top (i.e. root). Used to shortcut calculation in root calculation methods below.\"}},\"title\":\"MerkleLib\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"An incremental merkle tree modeled on the eth2 deposit contract.*\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/libraries/MerkleLib.sol\":\"MerkleLib\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/libraries/MerkleLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MerkleLib\\n * @author Illusory Systems Inc.\\n * @notice An incremental merkle tree modeled on the eth2 deposit contract.\\n **/\\nlibrary MerkleLib {\\n  // ========== Custom Errors ===========\\n\\n  error MerkleLib__insert_treeIsFull();\\n\\n  // ============ Constants =============\\n\\n  uint256 internal constant TREE_DEPTH = 32;\\n  uint256 internal constant MAX_LEAVES = 2**TREE_DEPTH - 1;\\n\\n  /**\\n   * @dev Z_i represent the hash values at different heights for a binary tree with leaf values equal to `0`.\\n   * (e.g. Z_1 is the keccak256 hash of (0x0, 0x0), Z_2 is the keccak256 hash of (Z_1, Z_1), etc...)\\n   * Z_0 is the bottom of the 33-layer tree, Z_32 is the top (i.e. root).\\n   * Used to shortcut calculation in root calculation methods below.\\n   */\\n  bytes32 internal constant Z_0 = hex\\\"0000000000000000000000000000000000000000000000000000000000000000\\\";\\n  bytes32 internal constant Z_1 = hex\\\"ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5\\\";\\n  bytes32 internal constant Z_2 = hex\\\"b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30\\\";\\n  bytes32 internal constant Z_3 = hex\\\"21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85\\\";\\n  bytes32 internal constant Z_4 = hex\\\"e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344\\\";\\n  bytes32 internal constant Z_5 = hex\\\"0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d\\\";\\n  bytes32 internal constant Z_6 = hex\\\"887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968\\\";\\n  bytes32 internal constant Z_7 = hex\\\"ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83\\\";\\n  bytes32 internal constant Z_8 = hex\\\"9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af\\\";\\n  bytes32 internal constant Z_9 = hex\\\"cefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0\\\";\\n  bytes32 internal constant Z_10 = hex\\\"f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5\\\";\\n  bytes32 internal constant Z_11 = hex\\\"f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892\\\";\\n  bytes32 internal constant Z_12 = hex\\\"3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c\\\";\\n  bytes32 internal constant Z_13 = hex\\\"c1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb\\\";\\n  bytes32 internal constant Z_14 = hex\\\"5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc\\\";\\n  bytes32 internal constant Z_15 = hex\\\"da7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2\\\";\\n  bytes32 internal constant Z_16 = hex\\\"2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f\\\";\\n  bytes32 internal constant Z_17 = hex\\\"e1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a\\\";\\n  bytes32 internal constant Z_18 = hex\\\"5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0\\\";\\n  bytes32 internal constant Z_19 = hex\\\"b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0\\\";\\n  bytes32 internal constant Z_20 = hex\\\"c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2\\\";\\n  bytes32 internal constant Z_21 = hex\\\"f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9\\\";\\n  bytes32 internal constant Z_22 = hex\\\"5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377\\\";\\n  bytes32 internal constant Z_23 = hex\\\"4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652\\\";\\n  bytes32 internal constant Z_24 = hex\\\"cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef\\\";\\n  bytes32 internal constant Z_25 = hex\\\"0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d\\\";\\n  bytes32 internal constant Z_26 = hex\\\"b8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0\\\";\\n  bytes32 internal constant Z_27 = hex\\\"838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e\\\";\\n  bytes32 internal constant Z_28 = hex\\\"662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e\\\";\\n  bytes32 internal constant Z_29 = hex\\\"388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322\\\";\\n  bytes32 internal constant Z_30 = hex\\\"93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735\\\";\\n  bytes32 internal constant Z_31 = hex\\\"8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9\\\";\\n  bytes32 internal constant Z_32 = hex\\\"27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757\\\";\\n\\n  // ============= Structs ==============\\n\\n  /**\\n   * @notice Struct representing incremental merkle tree. Contains current\\n   * branch and the number of inserted leaves in the tree.\\n   **/\\n  struct Tree {\\n    bytes32[TREE_DEPTH] branch;\\n    uint256 count;\\n  }\\n\\n  // ========= Write Methods =========\\n\\n  /**\\n   * @notice Inserts a given node (leaf) into merkle tree. Operates on an in-memory tree and\\n   * returns an updated version of that tree.\\n   * @dev Reverts if the tree is already full.\\n   * @param node Element to insert into tree.\\n   * @return Tree Updated tree.\\n   **/\\n  function insert(Tree memory tree, bytes32 node) internal pure returns (Tree memory) {\\n    // Update tree.count to increase the current count by 1 since we'll be including a new node.\\n    uint256 size = ++tree.count;\\n    if (size > MAX_LEAVES) revert MerkleLib__insert_treeIsFull();\\n\\n    // Loop starting at 0, ending when we've finished inserting the node (i.e. hashing it) into\\n    // the active branch. Each loop we cut size in half, hashing the inserted node up the active\\n    // branch along the way.\\n    for (uint256 i; i < TREE_DEPTH; ) {\\n      // Check if the current size is odd; if so, we set this index in the branch to be the node.\\n      if ((size & 1) == 1) {\\n        // If i > 0, then this node will be a hash of the original node with every layer up\\n        // until layer `i`.\\n        tree.branch[i] = node;\\n        return tree;\\n      }\\n      // If the size is not yet odd, we hash the current index in the tree branch with the node.\\n      node = keccak256(abi.encodePacked(tree.branch[i], node));\\n      size >>= 1; // Cut size in half (statement equivalent to: `size /= 2`).\\n\\n      unchecked {\\n        ++i;\\n      }\\n    }\\n    // As the loop should always end prematurely with the `return` statement, this code should\\n    // be unreachable. We revert here just to be safe.\\n    revert MerkleLib__insert_treeIsFull();\\n  }\\n\\n  // ========= Read Methods =========\\n\\n  /**\\n   * @notice Calculates and returns tree's current root.\\n   * @return _current bytes32 root.\\n   **/\\n  function root(Tree storage tree) internal view returns (bytes32 _current) {\\n    uint256 _index = tree.count;\\n\\n    if (_index == 0) {\\n      return Z_32;\\n    }\\n\\n    uint256 i;\\n    assembly {\\n      let TREE_SLOT := tree.slot\\n\\n      for {\\n\\n      } true {\\n\\n      } {\\n        for {\\n\\n        } true {\\n\\n        } {\\n          if and(_index, 1) {\\n            mstore(0, sload(TREE_SLOT))\\n            mstore(0x20, Z_0)\\n            _current := keccak256(0, 0x40)\\n            break\\n          }\\n\\n          if and(_index, shl(1, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 1)))\\n            mstore(0x20, Z_1)\\n            _current := keccak256(0, 0x40)\\n            i := 1\\n            break\\n          }\\n\\n          if and(_index, shl(2, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 2)))\\n            mstore(0x20, Z_2)\\n            _current := keccak256(0, 0x40)\\n            i := 2\\n            break\\n          }\\n\\n          if and(_index, shl(3, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 3)))\\n            mstore(0x20, Z_3)\\n            _current := keccak256(0, 0x40)\\n            i := 3\\n            break\\n          }\\n\\n          if and(_index, shl(4, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 4)))\\n            mstore(0x20, Z_4)\\n            _current := keccak256(0, 0x40)\\n            i := 4\\n            break\\n          }\\n\\n          if and(_index, shl(5, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 5)))\\n            mstore(0x20, Z_5)\\n            _current := keccak256(0, 0x40)\\n            i := 5\\n            break\\n          }\\n\\n          if and(_index, shl(6, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 6)))\\n            mstore(0x20, Z_6)\\n            _current := keccak256(0, 0x40)\\n            i := 6\\n            break\\n          }\\n\\n          if and(_index, shl(7, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 7)))\\n            mstore(0x20, Z_7)\\n            _current := keccak256(0, 0x40)\\n            i := 7\\n            break\\n          }\\n\\n          if and(_index, shl(8, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 8)))\\n            mstore(0x20, Z_8)\\n            _current := keccak256(0, 0x40)\\n            i := 8\\n            break\\n          }\\n\\n          if and(_index, shl(9, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 9)))\\n            mstore(0x20, Z_9)\\n            _current := keccak256(0, 0x40)\\n            i := 9\\n            break\\n          }\\n\\n          if and(_index, shl(10, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 10)))\\n            mstore(0x20, Z_10)\\n            _current := keccak256(0, 0x40)\\n            i := 10\\n            break\\n          }\\n\\n          if and(_index, shl(11, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 11)))\\n            mstore(0x20, Z_11)\\n            _current := keccak256(0, 0x40)\\n            i := 11\\n            break\\n          }\\n\\n          if and(_index, shl(12, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 12)))\\n            mstore(0x20, Z_12)\\n            _current := keccak256(0, 0x40)\\n            i := 12\\n            break\\n          }\\n\\n          if and(_index, shl(13, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 13)))\\n            mstore(0x20, Z_13)\\n            _current := keccak256(0, 0x40)\\n            i := 13\\n            break\\n          }\\n\\n          if and(_index, shl(14, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 14)))\\n            mstore(0x20, Z_14)\\n            _current := keccak256(0, 0x40)\\n            i := 14\\n            break\\n          }\\n\\n          if and(_index, shl(15, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 15)))\\n            mstore(0x20, Z_15)\\n            _current := keccak256(0, 0x40)\\n            i := 15\\n            break\\n          }\\n\\n          if and(_index, shl(16, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 16)))\\n            mstore(0x20, Z_16)\\n            _current := keccak256(0, 0x40)\\n            i := 16\\n            break\\n          }\\n\\n          if and(_index, shl(17, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 17)))\\n            mstore(0x20, Z_17)\\n            _current := keccak256(0, 0x40)\\n            i := 17\\n            break\\n          }\\n\\n          if and(_index, shl(18, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 18)))\\n            mstore(0x20, Z_18)\\n            _current := keccak256(0, 0x40)\\n            i := 18\\n            break\\n          }\\n\\n          if and(_index, shl(19, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 19)))\\n            mstore(0x20, Z_19)\\n            _current := keccak256(0, 0x40)\\n            i := 19\\n            break\\n          }\\n\\n          if and(_index, shl(20, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 20)))\\n            mstore(0x20, Z_20)\\n            _current := keccak256(0, 0x40)\\n            i := 20\\n            break\\n          }\\n\\n          if and(_index, shl(21, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 21)))\\n            mstore(0x20, Z_21)\\n            _current := keccak256(0, 0x40)\\n            i := 21\\n            break\\n          }\\n\\n          if and(_index, shl(22, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 22)))\\n            mstore(0x20, Z_22)\\n            _current := keccak256(0, 0x40)\\n            i := 22\\n            break\\n          }\\n\\n          if and(_index, shl(23, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 23)))\\n            mstore(0x20, Z_23)\\n            _current := keccak256(0, 0x40)\\n            i := 23\\n            break\\n          }\\n\\n          if and(_index, shl(24, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 24)))\\n            mstore(0x20, Z_24)\\n            _current := keccak256(0, 0x40)\\n            i := 24\\n            break\\n          }\\n\\n          if and(_index, shl(25, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 25)))\\n            mstore(0x20, Z_25)\\n            _current := keccak256(0, 0x40)\\n            i := 25\\n            break\\n          }\\n\\n          if and(_index, shl(26, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 26)))\\n            mstore(0x20, Z_26)\\n            _current := keccak256(0, 0x40)\\n            i := 26\\n            break\\n          }\\n\\n          if and(_index, shl(27, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 27)))\\n            mstore(0x20, Z_27)\\n            _current := keccak256(0, 0x40)\\n            i := 27\\n            break\\n          }\\n\\n          if and(_index, shl(28, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 28)))\\n            mstore(0x20, Z_28)\\n            _current := keccak256(0, 0x40)\\n            i := 28\\n            break\\n          }\\n\\n          if and(_index, shl(29, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 29)))\\n            mstore(0x20, Z_29)\\n            _current := keccak256(0, 0x40)\\n            i := 29\\n            break\\n          }\\n\\n          if and(_index, shl(30, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 30)))\\n            mstore(0x20, Z_30)\\n            _current := keccak256(0, 0x40)\\n            i := 30\\n            break\\n          }\\n\\n          if and(_index, shl(31, 1)) {\\n            mstore(0, sload(add(TREE_SLOT, 31)))\\n            mstore(0x20, Z_31)\\n            _current := keccak256(0, 0x40)\\n            i := 31\\n            break\\n          }\\n\\n          _current := Z_32\\n          i := 32\\n          break\\n        }\\n\\n        if gt(i, 30) {\\n          break\\n        }\\n\\n        {\\n          if lt(i, 1) {\\n            switch and(_index, shl(1, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_1)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 1)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 2) {\\n            switch and(_index, shl(2, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_2)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 2)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 3) {\\n            switch and(_index, shl(3, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_3)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 3)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 4) {\\n            switch and(_index, shl(4, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_4)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 4)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 5) {\\n            switch and(_index, shl(5, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_5)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 5)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 6) {\\n            switch and(_index, shl(6, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_6)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 6)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 7) {\\n            switch and(_index, shl(7, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_7)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 7)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 8) {\\n            switch and(_index, shl(8, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_8)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 8)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 9) {\\n            switch and(_index, shl(9, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_9)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 9)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 10) {\\n            switch and(_index, shl(10, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_10)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 10)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 11) {\\n            switch and(_index, shl(11, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_11)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 11)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 12) {\\n            switch and(_index, shl(12, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_12)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 12)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 13) {\\n            switch and(_index, shl(13, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_13)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 13)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 14) {\\n            switch and(_index, shl(14, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_14)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 14)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 15) {\\n            switch and(_index, shl(15, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_15)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 15)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 16) {\\n            switch and(_index, shl(16, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_16)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 16)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 17) {\\n            switch and(_index, shl(17, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_17)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 17)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 18) {\\n            switch and(_index, shl(18, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_18)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 18)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 19) {\\n            switch and(_index, shl(19, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_19)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 19)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 20) {\\n            switch and(_index, shl(20, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_20)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 20)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 21) {\\n            switch and(_index, shl(21, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_21)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 21)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 22) {\\n            switch and(_index, shl(22, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_22)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 22)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 23) {\\n            switch and(_index, shl(23, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_23)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 23)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 24) {\\n            switch and(_index, shl(24, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_24)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 24)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 25) {\\n            switch and(_index, shl(25, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_25)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 25)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 26) {\\n            switch and(_index, shl(26, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_26)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 26)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 27) {\\n            switch and(_index, shl(27, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_27)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 27)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 28) {\\n            switch and(_index, shl(28, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_28)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 28)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 29) {\\n            switch and(_index, shl(29, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_29)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 29)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 30) {\\n            switch and(_index, shl(30, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_30)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 30)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n\\n          if lt(i, 31) {\\n            switch and(_index, shl(31, 1))\\n            case 0 {\\n              mstore(0, _current)\\n              mstore(0x20, Z_31)\\n            }\\n            default {\\n              mstore(0, sload(add(TREE_SLOT, 31)))\\n              mstore(0x20, _current)\\n            }\\n\\n            _current := keccak256(0, 0x40)\\n          }\\n        }\\n\\n        break\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates and returns the merkle root for the given leaf `_item`,\\n   * a merkle branch, and the index of `_item` in the tree.\\n   * @param _item Merkle leaf\\n   * @param _branch Merkle proof\\n   * @param _index Index of `_item` in tree\\n   * @return _current Calculated merkle root\\n   **/\\n  function branchRoot(\\n    bytes32 _item,\\n    bytes32[TREE_DEPTH] memory _branch,\\n    uint256 _index\\n  ) internal pure returns (bytes32 _current) {\\n    assembly {\\n      _current := _item\\n      let BRANCH_DATA_OFFSET := _branch\\n      let f\\n\\n      f := shl(5, and(_index, 1))\\n      mstore(f, _current)\\n      mstore(sub(0x20, f), mload(BRANCH_DATA_OFFSET))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(1, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 1))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(2, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 2))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(3, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 3))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(4, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 4))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(5, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 5))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(6, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 6))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(7, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 7))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(8, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 8))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(9, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 9))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(10, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 10))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(11, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 11))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(12, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 12))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(13, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 13))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(14, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 14))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(15, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 15))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(16, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 16))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(17, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 17))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(18, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 18))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(19, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 19))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(20, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 20))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(21, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 21))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(22, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 22))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(23, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 23))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(24, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 24))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(25, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 25))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(26, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 26))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(27, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 27))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(28, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 28))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(29, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 29))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(30, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 30))))\\n      _current := keccak256(0, 0x40)\\n\\n      f := shl(5, iszero(and(_index, shl(31, 1))))\\n      mstore(sub(0x20, f), _current)\\n      mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 31))))\\n      _current := keccak256(0, 0x40)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08c791dbeef6253813d74e2145183501fe7631c13d5ac9d768036f47b66b693e\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"An incremental merkle tree modeled on the eth2 deposit contract.*","version":1}}},"contracts/messaging/libraries/Message.sol":{"Message":{"abi":[],"devdoc":{"author":"Illusory Systems Inc.","kind":"dev","methods":{},"title":"Message Library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122034f472385c84eb1ae5614fed99f365b0170f857dd2d435a8581ee3f5d193983a64736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLVALUE DELEGATECALL PUSH19 0x385C84EB1AE5614FED99F365B0170F857DD2D4 CALLDATALOAD 0xA8 PC 0x1E 0xE3 CREATE2 0xD1 SWAP4 SWAP9 GASPRICE PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"342:3522:165:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;342:3522:165;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122034f472385c84eb1ae5614fed99f365b0170f857dd2d435a8581ee3f5d193983a64736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLVALUE DELEGATECALL PUSH19 0x385C84EB1AE5614FED99F365B0170F857DD2D4 CALLDATALOAD 0xA8 PC 0x1E 0xE3 CREATE2 0xD1 SWAP4 SWAP9 GASPRICE PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"342:3522:165:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"body(bytes29)":"infinite","destination(bytes29)":"infinite","formatMessage(uint32,bytes32,uint32,uint32,bytes32,bytes memory)":"infinite","leaf(bytes29)":"infinite","messageHash(uint32,bytes32,uint32,uint32,bytes32,bytes memory)":"infinite","nonce(bytes29)":"infinite","origin(bytes29)":"infinite","recipient(bytes29)":"infinite","recipientAddress(bytes29)":"infinite","sender(bytes29)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Illusory Systems Inc.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Message Library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for formatted messages used by Home and Replica.*\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/libraries/Message.sol\":\"Message\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/libraries/Message.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\n/**\\n * @title Message Library\\n * @author Illusory Systems Inc.\\n * @notice Library for formatted messages used by Home and Replica.\\n **/\\nlibrary Message {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // Number of bytes in formatted message before `body` field\\n  uint256 internal constant PREFIX_LENGTH = 76;\\n\\n  /**\\n   * @notice Returns formatted (packed) message with provided fields\\n   * @param _originDomain Domain of home chain\\n   * @param _sender Address of sender as bytes32\\n   * @param _nonce Destination-specific nonce\\n   * @param _destinationDomain Domain of destination chain\\n   * @param _recipient Address of recipient on destination chain as bytes32\\n   * @param _messageBody Raw bytes of message body\\n   * @return Formatted message\\n   **/\\n  function formatMessage(\\n    uint32 _originDomain,\\n    bytes32 _sender,\\n    uint32 _nonce,\\n    uint32 _destinationDomain,\\n    bytes32 _recipient,\\n    bytes memory _messageBody\\n  ) internal pure returns (bytes memory) {\\n    return abi.encodePacked(_originDomain, _sender, _nonce, _destinationDomain, _recipient, _messageBody);\\n  }\\n\\n  /**\\n   * @notice Returns leaf of formatted message with provided fields.\\n   * @param _origin Domain of home chain\\n   * @param _sender Address of sender as bytes32\\n   * @param _nonce Destination-specific nonce number\\n   * @param _destination Domain of destination chain\\n   * @param _recipient Address of recipient on destination chain as bytes32\\n   * @param _body Raw bytes of message body\\n   * @return Leaf (hash) of formatted message\\n   **/\\n  function messageHash(\\n    uint32 _origin,\\n    bytes32 _sender,\\n    uint32 _nonce,\\n    uint32 _destination,\\n    bytes32 _recipient,\\n    bytes memory _body\\n  ) internal pure returns (bytes32) {\\n    return keccak256(formatMessage(_origin, _sender, _nonce, _destination, _recipient, _body));\\n  }\\n\\n  /// @notice Returns message's origin field\\n  function origin(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(0, 4));\\n  }\\n\\n  /// @notice Returns message's sender field\\n  function sender(bytes29 _message) internal pure returns (bytes32) {\\n    return _message.index(4, 32);\\n  }\\n\\n  /// @notice Returns message's nonce field\\n  function nonce(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(36, 4));\\n  }\\n\\n  /// @notice Returns message's destination field\\n  function destination(bytes29 _message) internal pure returns (uint32) {\\n    return uint32(_message.indexUint(40, 4));\\n  }\\n\\n  /// @notice Returns message's recipient field as bytes32\\n  function recipient(bytes29 _message) internal pure returns (bytes32) {\\n    return _message.index(44, 32);\\n  }\\n\\n  /// @notice Returns message's recipient field as an address\\n  function recipientAddress(bytes29 _message) internal pure returns (address) {\\n    return TypeCasts.bytes32ToAddress(recipient(_message));\\n  }\\n\\n  /// @notice Returns message's body field as bytes29 (refer to TypedMemView library for details on bytes29 type)\\n  function body(bytes29 _message) internal pure returns (bytes29) {\\n    return _message.slice(PREFIX_LENGTH, _message.len() - PREFIX_LENGTH, 0);\\n  }\\n\\n  function leaf(bytes29 _message) internal pure returns (bytes32) {\\n    uint256 loc = _message.loc();\\n    uint256 len = _message.len();\\n    /*\\n    prev:\\n    return\\n      messageHash(\\n        origin(_message),\\n        sender(_message),\\n        nonce(_message),\\n        destination(_message),\\n        recipient(_message),\\n        TypedMemView.clone(body(_message))\\n      );\\n\\n      below added for gas optimization\\n     */\\n    bytes32 hash;\\n    assembly {\\n      hash := keccak256(loc, len)\\n    }\\n    return hash;\\n  }\\n}\\n\",\"keccak256\":\"0xa4212f7b88146588e8e0e24cddbc5dae6269618a722b34f00ea322b33fa1f36a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Library for formatted messages used by Home and Replica.*","version":1}}},"contracts/messaging/libraries/Queue.sol":{"QueueLib":{"abi":[],"devdoc":{"kind":"dev","methods":{},"title":"QueueLib","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122019c676ba47a1a33e7c92bb4b1f3d30d3ba87ddc8123ddd6864e25cd9310739ac64736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NOT 0xC6 PUSH23 0xBA47A1A33E7C92BB4B1F3D30D3BA87DDC8123DDD6864E2 0x5C 0xD9 BALANCE SMOD CODECOPY 0xAC PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"341:6899:166:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;341:6899:166;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122019c676ba47a1a33e7c92bb4b1f3d30d3ba87ddc8123ddd6864e25cd9310739ac64736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NOT 0xC6 PUSH23 0xBA47A1A33E7C92BB4B1F3D30D3BA87DDC8123DDD6864E2 0x5C 0xD9 BALANCE SMOD CODECOPY 0xAC PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"341:6899:166:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_length(uint128,uint128)":"infinite","dequeueVerified(struct QueueLib.Queue storage pointer,uint256,uint128)":"infinite","enqueue(struct QueueLib.Queue storage pointer,bytes32)":"infinite","initialize(struct QueueLib.Queue storage pointer)":"infinite","isEmpty(struct QueueLib.Queue storage pointer)":"infinite","length(struct QueueLib.Queue storage pointer)":"infinite","remove(struct QueueLib.Queue storage pointer,bytes32)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"QueueLib\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library containing queue struct and operations for queue used by RootManager and SpokeConnector for handling the verification period. Tracks both message data itself and the block that the message was committed to the queue.*\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/libraries/Queue.sol\":\"QueueLib\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/libraries/Queue.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title QueueLib\\n * @notice Library containing queue struct and operations for queue used by RootManager and SpokeConnector\\n * for handling the verification period. Tracks both message data itself and the block that the message was\\n * committed to the queue.\\n **/\\nlibrary QueueLib {\\n  /**\\n   * @notice Queue struct\\n   * @dev Internally keeps track of the `first` and `last` elements through\\n   * indices and a mapping of indices to enqueued elements.\\n   **/\\n  struct Queue {\\n    uint128 first;\\n    uint128 last;\\n    // Message data (roots) that have been received.\\n    mapping(uint256 => bytes32) data;\\n    // The block that the message data was committed.\\n    mapping(uint256 => uint256) commitBlock;\\n    // A reverse mapping of all entries that have been \\\"removed\\\" by value; behaves like a blocklist.\\n    // NOTE: Removed values can still be pushed to the queue, but will be ignored/skipped when dequeuing.\\n    mapping(bytes32 => bool) removed;\\n  }\\n\\n  /**\\n   * @notice Initializes the queue\\n   * @dev Empty state denoted by queue.first > queue.last. Queue initialized with\\n   * queue.first = 1 and queue.last = 0.\\n   **/\\n  function initialize(Queue storage queue) internal {\\n    queue.first = 1;\\n    delete queue.last;\\n  }\\n\\n  /**\\n   * @notice Enqueues a single new element and records block number that the item was enqueued\\n   * (i.e. current block).\\n   * @param item New element to be enqueued.\\n   * @return last Index of newly enqueued element.\\n   **/\\n  function enqueue(Queue storage queue, bytes32 item) internal returns (uint128 last) {\\n    // Commit block is the block we are committing this item to the queue.\\n    uint256 commitBlock = block.number;\\n    // Increment `last` position.\\n    last = ++queue.last;\\n    // Add the item and record block number.\\n    queue.data[last] = item;\\n    queue.commitBlock[last] = commitBlock;\\n  }\\n\\n  /**\\n   * @notice Dequeues element at front of queue if it exists AND it's surpassed the given\\n   * verification period (i.e. has been sitting in the queue for enough blocks).\\n   * @param queue QueueStorage struct from contract.\\n   * @param delay The required delay that must have been surpassed in order to merit dequeuing\\n   * the element.\\n   * @param max The maximum number of elements we are allowed to dequeue in this call.\\n   * @return item Dequeued element IFF delay period has been surpassed; otherwise, empty bytes32.\\n   **/\\n  function dequeueVerified(\\n    Queue storage queue,\\n    uint256 delay,\\n    uint128 max\\n  ) internal returns (bytes32[] memory) {\\n    uint128 first = queue.first;\\n    uint128 last = queue.last;\\n\\n    // If queue is empty, short-circuit here.\\n    if (last < first) {\\n      return new bytes32[](0);\\n    }\\n\\n    // Input sanity checks.\\n    require(first != 0, \\\"queue !init'd\\\");\\n    require(max > 0, \\\"!acceptable max\\\");\\n\\n    {\\n      // If we would otherwise be searching beyond the maximum amount we are allowed to dequeue in this\\n      // call, reduce `last` to artificially shrink the available queue within the scope of this method.\\n      uint128 highestAllowed = first + max - 1;\\n      if (last > highestAllowed) {\\n        last = highestAllowed;\\n      }\\n    }\\n\\n    // Commit block must be below this block to be considered verified.\\n    // NOTE: It's assumed that block number is a higher value than delay (i.e. delay is reasonable).\\n    uint256 highestAcceptableCommitBlock = block.number - delay;\\n\\n    // To determine the last item index in the queue we want to return, iterate backwards until we\\n    // find a `commitBlock` that has surpassed the delay period.\\n    // TODO: The most efficient way to determine the split index here should be using a binary search.\\n    bool containsVerified;\\n    // NOTE: `first <= last` rephrased here to `!(first > last)` as it's a cheaper condition.\\n    while (!(first > last)) {\\n      uint256 commitBlock = queue.commitBlock[last];\\n      // NOTE: Same as `commitBlock <= highestAcceptableCommitBlock`.\\n      if (!(commitBlock > highestAcceptableCommitBlock)) {\\n        containsVerified = true;\\n        break;\\n      }\\n      unchecked {\\n        --last;\\n      }\\n    }\\n    // IFF no verified items were found, then we can return an empty array.\\n    if (!containsVerified) {\\n      return new bytes32[](0);\\n    }\\n\\n    bytes32[] memory items = new bytes32[](last + 1 - first);\\n    uint256 index; // Cursor for index in the batch of `items`.\\n    uint256 removedCount; // If any items have been removed, we filter them here.\\n    // NOTE: `first <= last` rephrased here to `!(first > last)` as it's a cheaper condition.\\n    while (!(first > last)) {\\n      bytes32 item = queue.data[first];\\n      // Check to see if the item has been removed before appending it to the array.\\n      if (!queue.removed[item]) {\\n        items[index] = item;\\n        unchecked {\\n          ++index;\\n        }\\n      } else {\\n        // The item was removed. We do NOT increment the index (we will re-use this position).\\n        unchecked {\\n          ++removedCount;\\n        }\\n      }\\n\\n      // Delete the item and the commitBlock.\\n      // NOTE: We do NOT delete the entry from `queue.removed`, as it's a reverse lookup and we want to\\n      // block that value permanently (e.g. if there's multiple of the same bad value in the queue).\\n      delete queue.data[first];\\n      delete queue.commitBlock[first];\\n\\n      unchecked {\\n        ++first;\\n      }\\n    }\\n\\n    // Update the value for `first` in our queue object since we've dequeued a number of elements.\\n    queue.first = first;\\n\\n    if (removedCount == 0) {\\n      return items;\\n    } else {\\n      // If some items were removed, there will be a number of trailing 0 values we need to truncate\\n      // from the array. Create a new array with all of the items up until these empty values.\\n      bytes32[] memory amendedItems = new bytes32[](index); // The last `index` is the new length.\\n      for (uint256 i; i < index; ) {\\n        amendedItems[i] = items[i];\\n        unchecked {\\n          ++i;\\n        }\\n      }\\n      return amendedItems;\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets a certain value to be ignored (skipped) when dequeuing.\\n   */\\n  function remove(Queue storage queue, bytes32 item) internal {\\n    require(!queue.removed[item], \\\"already removed\\\");\\n    queue.removed[item] = true;\\n  }\\n\\n  /**\\n   * @notice Check whether the queue is empty.\\n   * @param queue QueueStorage struct from contract.\\n   * @return bool True if queue is empty and false if otherwise.\\n   */\\n  function isEmpty(Queue storage queue) internal view returns (bool) {\\n    return queue.last < queue.first;\\n  }\\n\\n  /**\\n   * @notice Returns number of elements in queue.\\n   * @param queue QueueStorage struct from contract.\\n   */\\n  function length(Queue storage queue) internal view returns (uint256) {\\n    uint128 last = queue.last;\\n    uint128 first = queue.first;\\n    // Cannot underflow unless state is corrupted.\\n    return _length(last, first);\\n  }\\n\\n  /**\\n   * @notice Returns number of elements between `last` and `first` (used internally).\\n   * @param last The last element index.\\n   * @param first The first element index.\\n   */\\n  function _length(uint128 last, uint128 first) internal pure returns (uint256) {\\n    return uint256(last + 1 - first);\\n  }\\n}\\n\",\"keccak256\":\"0x47ae879e3ebe82490961c318aed0918a3a13d97584418cd0b43ceff0baa29bc7\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Library containing queue struct and operations for queue used by RootManager and SpokeConnector for handling the verification period. Tracks both message data itself and the block that the message was committed to the queue.*","version":1}}},"contracts/messaging/libraries/RateLimited.sol":{"RateLimited":{"abi":[{"inputs":[],"name":"RateLimited__rateLimited_messageSendRateExceeded","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updater","type":"address"},{"indexed":false,"internalType":"uint256","name":"newRateLimit","type":"uint256"}],"name":"SendRateLimitUpdated","type":"event"},{"inputs":[],"name":"lastSentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rateLimitBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"stateVariables":{"rateLimitBlocks":{"details":"NOTE: This value is 0 by default, meaning that rate limiting functionality will naturally be disabled by default."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"lastSentBlock()":"d7d317b3","rateLimitBlocks()":"579c1618"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"RateLimited__rateLimited_messageSendRateExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updater\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRateLimit\",\"type\":\"uint256\"}],\"name\":\"SendRateLimitUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"lastSentBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rateLimitBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"rateLimitBlocks\":{\"details\":\"NOTE: This value is 0 by default, meaning that rate limiting functionality will naturally be disabled by default.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"lastSentBlock()\":{\"notice\":\"Tracks the last block that we sent a message.\"},\"rateLimitBlocks()\":{\"notice\":\"The number of blocks required between message sending events.\"}},\"notice\":\"An abstract contract intended to manage the rate limiting aspect of spoke connector messaging. Rate limiting the number of messages we can send over a span of blocks is used to mitigate key DoSing vectors for transporting messages between chains.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/libraries/RateLimited.sol\":\"RateLimited\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/libraries/RateLimited.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice An abstract contract intended to manage the rate limiting aspect of spoke\\n * connector messaging. Rate limiting the number of messages we can send over a span of\\n * blocks is used to mitigate key DoSing vectors for transporting messages between chains.\\n */\\nabstract contract RateLimited {\\n  // ========== Custom Errors ===========\\n\\n  error RateLimited__rateLimited_messageSendRateExceeded();\\n\\n  // ============ Events ============\\n\\n  event SendRateLimitUpdated(address updater, uint256 newRateLimit);\\n\\n  // ============ Public Storage ============\\n\\n  /**\\n   * @notice The number of blocks required between message sending events.\\n   * @dev NOTE: This value is 0 by default, meaning that rate limiting functionality\\n   * will naturally be disabled by default.\\n   */\\n  uint256 public rateLimitBlocks;\\n\\n  /**\\n   * @notice Tracks the last block that we sent a message.\\n   */\\n  uint256 public lastSentBlock;\\n\\n  // ============ Modifiers ============\\n\\n  /**\\n   * @notice Checks to see if we can send this block, given the current rate limit\\n   * setting and the last block we sent a message. If rate limit has been surpassed,\\n   * we update the `lastSentBlock` to be the current block.\\n   */\\n  modifier rateLimited() {\\n    // Check to make sure we have surpassed the number of rate limit blocks.\\n    if (lastSentBlock + rateLimitBlocks > block.number) {\\n      revert RateLimited__rateLimited_messageSendRateExceeded();\\n    }\\n    // Update the last block we sent a message to be the current one.\\n    lastSentBlock = block.number;\\n    _;\\n  }\\n\\n  // ============ Admin Functions ============\\n\\n  /**\\n   * @notice Update the current rate limit to a new value.\\n   */\\n  function _setRateLimitBlocks(uint256 _newRateLimit) internal {\\n    require(_newRateLimit != rateLimitBlocks, \\\"!new rate limit\\\");\\n    // NOTE: Setting the block rate limit interval to 0 will result in rate limiting\\n    // being disabled.\\n    rateLimitBlocks = _newRateLimit;\\n    emit SendRateLimitUpdated(msg.sender, _newRateLimit);\\n  }\\n}\\n\",\"keccak256\":\"0xcc185ae966c87441490aaa8c0779a7b3085961a7b8512d5973f1c34f641eeae3\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49639,"contract":"contracts/messaging/libraries/RateLimited.sol:RateLimited","label":"rateLimitBlocks","offset":0,"slot":"0","type":"t_uint256"},{"astId":49642,"contract":"contracts/messaging/libraries/RateLimited.sol:RateLimited","label":"lastSentBlock","offset":0,"slot":"1","type":"t_uint256"}],"types":{"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"lastSentBlock()":{"notice":"Tracks the last block that we sent a message."},"rateLimitBlocks()":{"notice":"The number of blocks required between message sending events."}},"notice":"An abstract contract intended to manage the rate limiting aspect of spoke connector messaging. Rate limiting the number of messages we can send over a span of blocks is used to mitigate key DoSing vectors for transporting messages between chains.","version":1}}},"contracts/shared/ProposedOwnable.sol":{"ProposedOwnable":{"abi":[{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.The majority of this code was taken from the openzeppelin Ownable contract","kind":"dev","methods":{},"title":"ProposedOwnable","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"acceptProposedOwner()":"c5b350df","delay()":"6a42b8f8","owner()":"8da5cb5b","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","renounceOwnership()":"715018a6","renounced()":"d232c220"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.The majority of this code was taken from the openzeppelin Ownable contract\",\"kind\":\"dev\",\"methods\":{},\"title\":\"ProposedOwnable\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"}},\"notice\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed via a two step process: 1. Call `proposeOwner` 2. Wait out the delay period 3. Call `acceptOwner`\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/shared/ProposedOwnable.sol\":\"ProposedOwnable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/shared/ProposedOwnable.sol:ProposedOwnable","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/shared/ProposedOwnable.sol:ProposedOwnable","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/shared/ProposedOwnable.sol:ProposedOwnable","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"owner()":{"notice":"Returns the address of the current owner."},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"}},"notice":"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed via a two step process: 1. Call `proposeOwner` 2. Wait out the delay period 3. Call `acceptOwner`","version":1}}},"contracts/shared/ProposedOwnableUpgradeable.sol":{"ProposedOwnableUpgradeable":{"abi":[{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"stateVariables":{"__GAP":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"acceptProposedOwner()":"c5b350df","delay()":"6a42b8f8","owner()":"8da5cb5b","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","renounceOwnership()":"715018a6","renounced()":"d232c220"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"__GAP\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/shared/ProposedOwnableUpgradeable.sol\":\"ProposedOwnableUpgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n *     function initialize() initializer public {\\n *         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n *     }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n *     function initializeV2() reinitializer(2) public {\\n *         __ERC20Permit_init(\\\"MyToken\\\");\\n *     }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n *     _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n    /**\\n     * @dev Indicates that the contract has been initialized.\\n     * @custom:oz-retyped-from bool\\n     */\\n    uint8 private _initialized;\\n\\n    /**\\n     * @dev Indicates that the contract is in the process of being initialized.\\n     */\\n    bool private _initializing;\\n\\n    /**\\n     * @dev Triggered when the contract has been initialized or reinitialized.\\n     */\\n    event Initialized(uint8 version);\\n\\n    /**\\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n     * `onlyInitializing` functions can be used to initialize parent contracts.\\n     *\\n     * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n     * constructor.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier initializer() {\\n        bool isTopLevelCall = !_initializing;\\n        require(\\n            (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n            \\\"Initializable: contract is already initialized\\\"\\n        );\\n        _initialized = 1;\\n        if (isTopLevelCall) {\\n            _initializing = true;\\n        }\\n        _;\\n        if (isTopLevelCall) {\\n            _initializing = false;\\n            emit Initialized(1);\\n        }\\n    }\\n\\n    /**\\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n     * used to initialize parent contracts.\\n     *\\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n     * are added through upgrades and that require initialization.\\n     *\\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\\n     *\\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n     * a contract, executing them in the right order is up to the developer or operator.\\n     *\\n     * WARNING: setting the version to 255 will prevent any future reinitialization.\\n     *\\n     * Emits an {Initialized} event.\\n     */\\n    modifier reinitializer(uint8 version) {\\n        require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n        _initialized = version;\\n        _initializing = true;\\n        _;\\n        _initializing = false;\\n        emit Initialized(version);\\n    }\\n\\n    /**\\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n     */\\n    modifier onlyInitializing() {\\n        require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n     * through proxies.\\n     *\\n     * Emits an {Initialized} event the first time it is successfully executed.\\n     */\\n    function _disableInitializers() internal virtual {\\n        require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n        if (_initialized < type(uint8).max) {\\n            _initialized = type(uint8).max;\\n            emit Initialized(type(uint8).max);\\n        }\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initialized`\\n     */\\n    function _getInitializedVersion() internal view returns (uint8) {\\n        return _initialized;\\n    }\\n\\n    /**\\n     * @dev Internal function that returns the initialized version. Returns `_initializing`\\n     */\\n    function _isInitializing() internal view returns (bool) {\\n        return _initializing;\\n    }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/ProposedOwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {Initializable} from \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"./ProposedOwnable.sol\\\";\\n\\nabstract contract ProposedOwnableUpgradeable is Initializable, ProposedOwnable {\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial\\n   */\\n  function __ProposedOwnable_init() internal onlyInitializing {\\n    __ProposedOwnable_init_unchained();\\n  }\\n\\n  function __ProposedOwnable_init_unchained() internal onlyInitializing {\\n    _setOwner(msg.sender);\\n  }\\n\\n  /**\\n   * @dev This empty reserved space is put in place to allow future versions to add new\\n   * variables without shifting down storage in the inheritance chain.\\n   * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n   */\\n  uint256[47] private __GAP;\\n}\\n\",\"keccak256\":\"0x2b064b03a25915e93749905ef3aae516ffaac86b8ba9f126b614425b623bf477\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8076,"contract":"contracts/shared/ProposedOwnableUpgradeable.sol:ProposedOwnableUpgradeable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":8079,"contract":"contracts/shared/ProposedOwnableUpgradeable.sol:ProposedOwnableUpgradeable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":49711,"contract":"contracts/shared/ProposedOwnableUpgradeable.sol:ProposedOwnableUpgradeable","label":"_owner","offset":2,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/shared/ProposedOwnableUpgradeable.sol:ProposedOwnableUpgradeable","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/shared/ProposedOwnableUpgradeable.sol:ProposedOwnableUpgradeable","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"},{"astId":49964,"contract":"contracts/shared/ProposedOwnableUpgradeable.sol:ProposedOwnableUpgradeable","label":"__GAP","offset":0,"slot":"3","type":"t_array(t_uint256)47_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)47_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[47]","numberOfBytes":"1504"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"owner()":{"notice":"Returns the address of the current owner."},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"}},"version":1}}},"contracts/shared/interfaces/IProposedOwnable.sol":{"IProposedOwnable":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"proposed_","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"events":{"OwnershipProposed(address)":{"details":"This emits when change in ownership of a contract is proposed."},"OwnershipTransferred(address,address)":{"details":"This emits when ownership of a contract changes."}},"kind":"dev","methods":{"owner()":{"returns":{"owner_":"The address of the owner."}},"proposeNewOwner(address)":{"params":{"newlyProposed":"The proposed new owner of the contract"}},"proposed()":{"returns":{"proposed_":"The address of the proposed."}}},"title":"IProposedOwnable","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"acceptProposedOwner()":"c5b350df","owner()":"8da5cb5b","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"proposed_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"OwnershipProposed(address)\":{\"details\":\"This emits when change in ownership of a contract is proposed.\"},\"OwnershipTransferred(address,address)\":{\"details\":\"This emits when ownership of a contract changes.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"returns\":{\"owner_\":\"The address of the owner.\"}},\"proposeNewOwner(address)\":{\"params\":{\"newlyProposed\":\"The proposed new owner of the contract\"}},\"proposed()\":{\"returns\":{\"proposed_\":\"The address of the proposed.\"}}},\"title\":\"IProposedOwnable\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Set the address of the proposed owner of the contract\"},\"owner()\":{\"notice\":\"Get the address of the owner\"},\"proposeNewOwner(address)\":{\"notice\":\"Set the address of the proposed owner of the contract\"},\"proposed()\":{\"notice\":\"Get the address of the proposed owner\"}},\"notice\":\"Defines a minimal interface for ownership with a two step proposal and acceptance process\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/shared/interfaces/IProposedOwnable.sol\":\"IProposedOwnable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"acceptProposedOwner()":{"notice":"Set the address of the proposed owner of the contract"},"owner()":{"notice":"Get the address of the owner"},"proposeNewOwner(address)":{"notice":"Set the address of the proposed owner of the contract"},"proposed()":{"notice":"Get the address of the proposed owner"}},"notice":"Defines a minimal interface for ownership with a two step proposal and acceptance process","version":1}}},"contracts/shared/libraries/ExcessivelySafeCall.sol":{"ExcessivelySafeCall":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209ad11d53631eedddb0c57baaa4dba69bbb3a21ac7c4ee39ee2a505d5f1d43d4364736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP11 0xD1 SAR MSTORE8 PUSH4 0x1EEDDDB0 0xC5 PUSH28 0xAAA4DBA69BBB3A21AC7C4EE39EE2A505D5F1D43D4364736F6C634300 ADDMOD GT STOP CALLER ","sourceMap":"284:4987:171:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;284:4987:171;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209ad11d53631eedddb0c57baaa4dba69bbb3a21ac7c4ee39ee2a505d5f1d43d4364736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP11 0xD1 SAR MSTORE8 PUSH4 0x1EEDDDB0 0xC5 PUSH28 0xAAA4DBA69BBB3A21AC7C4EE39EE2A505D5F1D43D4364736F6C634300 ADDMOD GT STOP CALLER ","sourceMap":"284:4987:171:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"excessivelySafeCall(address,uint256,uint256,uint16,bytes memory)":"infinite","excessivelySafeStaticCall(address,uint256,uint16,bytes memory)":"infinite","swapSelector(bytes4,bytes memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/shared/libraries/ExcessivelySafeCall.sol\":\"ExcessivelySafeCall\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/shared/libraries/ExcessivelySafeCall.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// Taken from: https://github.com/nomad-xyz/ExcessivelySafeCall\\n// NOTE: There is a difference between npm latest and github main versions\\n// where the latest github version allows you to specify an ether value.\\n\\nlibrary ExcessivelySafeCall {\\n  uint256 constant LOW_28_MASK = 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _value The value in wei to send to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeCall(\\n    address _target,\\n    uint256 _gas,\\n    uint256 _value,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := call(\\n        _gas, // gas\\n        _target, // recipient\\n        _value, // ether value\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /// @notice Use when you _really_ really _really_ don't trust the called\\n  /// contract. This prevents the called contract from causing reversion of\\n  /// the caller in as many ways as we can.\\n  /// @dev The main difference between this and a solidity low-level call is\\n  /// that we limit the number of bytes that the callee can cause to be\\n  /// copied to caller memory. This prevents stupid things like malicious\\n  /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n  /// to memory.\\n  /// @param _target The address to call\\n  /// @param _gas The amount of gas to forward to the remote contract\\n  /// @param _maxCopy The maximum number of bytes of returndata to copy\\n  /// to memory.\\n  /// @param _calldata The data to send to the remote contract\\n  /// @return success and returndata, as `.call()`. Returndata is capped to\\n  /// `_maxCopy` bytes.\\n  function excessivelySafeStaticCall(\\n    address _target,\\n    uint256 _gas,\\n    uint16 _maxCopy,\\n    bytes memory _calldata\\n  ) internal view returns (bool, bytes memory) {\\n    // set up for assembly call\\n    uint256 _toCopy;\\n    bool _success;\\n    bytes memory _returnData = new bytes(_maxCopy);\\n    // dispatch message to recipient\\n    // by assembly calling \\\"handle\\\" function\\n    // we call via assembly to avoid memcopying a very large returndata\\n    // returned by a malicious contract\\n    assembly {\\n      _success := staticcall(\\n        _gas, // gas\\n        _target, // recipient\\n        add(_calldata, 0x20), // inloc\\n        mload(_calldata), // inlen\\n        0, // outloc\\n        0 // outlen\\n      )\\n      // limit our copy to 256 bytes\\n      _toCopy := returndatasize()\\n      if gt(_toCopy, _maxCopy) {\\n        _toCopy := _maxCopy\\n      }\\n      // Store the length of the copied bytes\\n      mstore(_returnData, _toCopy)\\n      // copy the bytes from returndata[0:_toCopy]\\n      returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n    }\\n    return (_success, _returnData);\\n  }\\n\\n  /**\\n   * @notice Swaps function selectors in encoded contract calls\\n   * @dev Allows reuse of encoded calldata for functions with identical\\n   * argument types but different names. It simply swaps out the first 4 bytes\\n   * for the new selector. This function modifies memory in place, and should\\n   * only be used with caution.\\n   * @param _newSelector The new 4-byte selector\\n   * @param _buf The encoded contract args\\n   */\\n  function swapSelector(bytes4 _newSelector, bytes memory _buf) internal pure {\\n    require(_buf.length > 4 - 1);\\n    uint256 _mask = LOW_28_MASK;\\n    assembly {\\n      // load the first word of\\n      let _word := mload(add(_buf, 0x20))\\n      // mask out the top 4 bytes\\n      // /x\\n      _word := and(_word, _mask)\\n      _word := or(_newSelector, _word)\\n      mstore(add(_buf, 0x20), _word)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x5472b56fa56886620b1a8e4e2f12f8925500bb237a4dad38651c79db69f0724c\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/shared/libraries/Multisend.sol":{"MultiSend":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes","name":"transactions","type":"bytes"}],"name":"multiSend","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"details":"Modification was to ensure this is called from an EOA, rather than enforcing the `delegatecall` usage as in the original contract.","kind":"dev","methods":{"multiSend(bytes)":{"details":"Sends multiple transactions and reverts all if one fails.","params":{"transactions":"Encoded transactions. Each transaction is encoded as a packed bytes of                     operation as a uint8 with 0 for a call or 1 for a delegatecall (=> 1 byte),                     to as a address (=> 20 bytes),                     value as a uint256 (=> 32 bytes),                     data length as a uint256 (=> 32 bytes),                     data as bytes.                     see abi.encodePacked for more information on packed encoding"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_50120":{"entryPoint":null,"id":50120,"parameterSlots":0,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"60a060405234801561001057600080fd5b503060805260805161022061002d600039600050506102206000f3fe60806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b610036610031366004610139565b610038565b005b333b1561009b5760405162461bcd60e51b815260206004820152602760248201527f4d756c746953656e642073686f756c64206f6e6c792062652063616c6c65642060448201526676696120454f4160c81b606482015260840160405180910390fd5b805160205b8181101561011e578083015160f81c6001820184015160601c6015830185015160358401860151605585018701600085600081146100e557600181146100f557610100565b6000808585888a5af19150610100565b6000808585895af491505b508061010b57600080fd5b50508060550185019450505050506100a0565b505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561014b57600080fd5b813567ffffffffffffffff8082111561016357600080fd5b818401915084601f83011261017757600080fd5b81358181111561018957610189610123565b604051601f8201601f19908116603f011681019083821181831017156101b1576101b1610123565b816040528281528760208487010111156101ca57600080fd5b82602086016020830137600092810160200192909252509594505050505056fea26469706673582212203a98476913f6497f1e14c2a098f4f736f686478bc4777a4604ca864cd23dae8d64736f6c63430008110033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH1 0x80 MSTORE PUSH1 0x80 MLOAD PUSH2 0x220 PUSH2 0x2D PUSH1 0x0 CODECOPY PUSH1 0x0 POP POP PUSH2 0x220 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8D80FF0A EQ PUSH2 0x23 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x36 PUSH2 0x31 CALLDATASIZE PUSH1 0x4 PUSH2 0x139 JUMP JUMPDEST PUSH2 0x38 JUMP JUMPDEST STOP JUMPDEST CALLER EXTCODESIZE ISZERO PUSH2 0x9B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D756C746953656E642073686F756C64206F6E6C792062652063616C6C656420 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x76696120454F41 PUSH1 0xC8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x20 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x11E JUMPI DUP1 DUP4 ADD MLOAD PUSH1 0xF8 SHR PUSH1 0x1 DUP3 ADD DUP5 ADD MLOAD PUSH1 0x60 SHR PUSH1 0x15 DUP4 ADD DUP6 ADD MLOAD PUSH1 0x35 DUP5 ADD DUP7 ADD MLOAD PUSH1 0x55 DUP6 ADD DUP8 ADD PUSH1 0x0 DUP6 PUSH1 0x0 DUP2 EQ PUSH2 0xE5 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0xF5 JUMPI PUSH2 0x100 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 DUP9 DUP11 GAS CALL SWAP2 POP PUSH2 0x100 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 DUP10 GAS DELEGATECALL SWAP2 POP JUMPDEST POP DUP1 PUSH2 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 PUSH1 0x55 ADD DUP6 ADD SWAP5 POP POP POP POP POP PUSH2 0xA0 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x14B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x163 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x177 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x189 JUMPI PUSH2 0x189 PUSH2 0x123 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x1B1 JUMPI PUSH2 0x1B1 PUSH2 0x123 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP8 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x1CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP3 DUP2 ADD PUSH1 0x20 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GASPRICE SWAP9 SELFBALANCE PUSH10 0x13F6497F1E14C2A098F4 0xF7 CALLDATASIZE 0xF6 DUP7 SELFBALANCE DUP12 0xC4 PUSH24 0x7A4604CA864CD23DAE8D64736F6C63430008110033000000 ","sourceMap":"335:2579:172:-:0;;;407:59;;;;;;;;;-1:-1:-1;456:4:172;427:34;;335:2579;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@multiSend_50138":{"entryPoint":56,"id":50138,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_bytes_memory_ptr":{"entryPoint":313,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_88894d6f5f7152e7c3be85deebf4900c215635145dce6cb9bd221eda9a4c021a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":291,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1477:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:181"},"nodeType":"YulFunctionCall","src":"66:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:181"},"nodeType":"YulFunctionCall","src":"56:31:181"},"nodeType":"YulExpressionStatement","src":"56:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:181"},"nodeType":"YulFunctionCall","src":"96:15:181"},"nodeType":"YulExpressionStatement","src":"96:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:181"},"nodeType":"YulFunctionCall","src":"120:15:181"},"nodeType":"YulExpressionStatement","src":"120:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:181"},{"body":{"nodeType":"YulBlock","src":"225:842:181","statements":[{"body":{"nodeType":"YulBlock","src":"271:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"280:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"283:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"273:6:181"},"nodeType":"YulFunctionCall","src":"273:12:181"},"nodeType":"YulExpressionStatement","src":"273:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"246:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"255:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"242:3:181"},"nodeType":"YulFunctionCall","src":"242:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"267:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"238:3:181"},"nodeType":"YulFunctionCall","src":"238:32:181"},"nodeType":"YulIf","src":"235:52:181"},{"nodeType":"YulVariableDeclaration","src":"296:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"323:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"310:12:181"},"nodeType":"YulFunctionCall","src":"310:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"300:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"342:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"352:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"346:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"397:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"406:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"409:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"399:6:181"},"nodeType":"YulFunctionCall","src":"399:12:181"},"nodeType":"YulExpressionStatement","src":"399:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"385:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"393:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"382:2:181"},"nodeType":"YulFunctionCall","src":"382:14:181"},"nodeType":"YulIf","src":"379:34:181"},{"nodeType":"YulVariableDeclaration","src":"422:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"436:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"447:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"432:3:181"},"nodeType":"YulFunctionCall","src":"432:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"426:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"502:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"511:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"514:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"504:6:181"},"nodeType":"YulFunctionCall","src":"504:12:181"},"nodeType":"YulExpressionStatement","src":"504:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"481:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"485:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"477:3:181"},"nodeType":"YulFunctionCall","src":"477:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"492:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"473:3:181"},"nodeType":"YulFunctionCall","src":"473:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"466:6:181"},"nodeType":"YulFunctionCall","src":"466:35:181"},"nodeType":"YulIf","src":"463:55:181"},{"nodeType":"YulVariableDeclaration","src":"527:26:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"550:2:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"537:12:181"},"nodeType":"YulFunctionCall","src":"537:16:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"531:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"576:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"578:16:181"},"nodeType":"YulFunctionCall","src":"578:18:181"},"nodeType":"YulExpressionStatement","src":"578:18:181"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"568:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"572:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"565:2:181"},"nodeType":"YulFunctionCall","src":"565:10:181"},"nodeType":"YulIf","src":"562:36:181"},{"nodeType":"YulVariableDeclaration","src":"607:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"621:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"617:3:181"},"nodeType":"YulFunctionCall","src":"617:7:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"611:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"633:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"653:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"647:5:181"},"nodeType":"YulFunctionCall","src":"647:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"637:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"665:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"687:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"711:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"715:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"707:3:181"},"nodeType":"YulFunctionCall","src":"707:13:181"},{"name":"_4","nodeType":"YulIdentifier","src":"722:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"703:3:181"},"nodeType":"YulFunctionCall","src":"703:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"727:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"699:3:181"},"nodeType":"YulFunctionCall","src":"699:31:181"},{"name":"_4","nodeType":"YulIdentifier","src":"732:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"695:3:181"},"nodeType":"YulFunctionCall","src":"695:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"683:3:181"},"nodeType":"YulFunctionCall","src":"683:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"669:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"795:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"797:16:181"},"nodeType":"YulFunctionCall","src":"797:18:181"},"nodeType":"YulExpressionStatement","src":"797:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"754:10:181"},{"name":"_1","nodeType":"YulIdentifier","src":"766:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"751:2:181"},"nodeType":"YulFunctionCall","src":"751:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"774:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"786:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"771:2:181"},"nodeType":"YulFunctionCall","src":"771:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"748:2:181"},"nodeType":"YulFunctionCall","src":"748:46:181"},"nodeType":"YulIf","src":"745:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"833:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"837:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"826:6:181"},"nodeType":"YulFunctionCall","src":"826:22:181"},"nodeType":"YulExpressionStatement","src":"826:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"864:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"872:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"857:6:181"},"nodeType":"YulFunctionCall","src":"857:18:181"},"nodeType":"YulExpressionStatement","src":"857:18:181"},{"body":{"nodeType":"YulBlock","src":"921:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"930:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"933:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"923:6:181"},"nodeType":"YulFunctionCall","src":"923:12:181"},"nodeType":"YulExpressionStatement","src":"923:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"898:2:181"},{"name":"_3","nodeType":"YulIdentifier","src":"902:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"894:3:181"},"nodeType":"YulFunctionCall","src":"894:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"907:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"890:3:181"},"nodeType":"YulFunctionCall","src":"890:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"912:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"887:2:181"},"nodeType":"YulFunctionCall","src":"887:33:181"},"nodeType":"YulIf","src":"884:53:181"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"963:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"971:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"959:3:181"},"nodeType":"YulFunctionCall","src":"959:15:181"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"980:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"984:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"976:3:181"},"nodeType":"YulFunctionCall","src":"976:11:181"},{"name":"_3","nodeType":"YulIdentifier","src":"989:2:181"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"946:12:181"},"nodeType":"YulFunctionCall","src":"946:46:181"},"nodeType":"YulExpressionStatement","src":"946:46:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1016:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1024:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1012:3:181"},"nodeType":"YulFunctionCall","src":"1012:15:181"},{"kind":"number","nodeType":"YulLiteral","src":"1029:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1008:3:181"},"nodeType":"YulFunctionCall","src":"1008:24:181"},{"kind":"number","nodeType":"YulLiteral","src":"1034:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1001:6:181"},"nodeType":"YulFunctionCall","src":"1001:35:181"},"nodeType":"YulExpressionStatement","src":"1001:35:181"},{"nodeType":"YulAssignment","src":"1045:16:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1055:6:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1045:6:181"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"191:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"202:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"214:6:181","type":""}],"src":"146:921:181"},{"body":{"nodeType":"YulBlock","src":"1246:229:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1263:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1274:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1256:6:181"},"nodeType":"YulFunctionCall","src":"1256:21:181"},"nodeType":"YulExpressionStatement","src":"1256:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1297:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1308:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1293:3:181"},"nodeType":"YulFunctionCall","src":"1293:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1313:2:181","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1286:6:181"},"nodeType":"YulFunctionCall","src":"1286:30:181"},"nodeType":"YulExpressionStatement","src":"1286:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1336:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1347:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1332:3:181"},"nodeType":"YulFunctionCall","src":"1332:18:181"},{"hexValue":"4d756c746953656e642073686f756c64206f6e6c792062652063616c6c656420","kind":"string","nodeType":"YulLiteral","src":"1352:34:181","type":"","value":"MultiSend should only be called "}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1325:6:181"},"nodeType":"YulFunctionCall","src":"1325:62:181"},"nodeType":"YulExpressionStatement","src":"1325:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1407:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1418:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1403:3:181"},"nodeType":"YulFunctionCall","src":"1403:18:181"},{"hexValue":"76696120454f41","kind":"string","nodeType":"YulLiteral","src":"1423:9:181","type":"","value":"via EOA"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1396:6:181"},"nodeType":"YulFunctionCall","src":"1396:37:181"},"nodeType":"YulExpressionStatement","src":"1396:37:181"},{"nodeType":"YulAssignment","src":"1442:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1454:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1465:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1450:3:181"},"nodeType":"YulFunctionCall","src":"1450:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1442:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_88894d6f5f7152e7c3be85deebf4900c215635145dce6cb9bd221eda9a4c021a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1223:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1237:4:181","type":""}],"src":"1072:403:181"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), 0)\n        value0 := memPtr\n    }\n    function abi_encode_tuple_t_stringliteral_88894d6f5f7152e7c3be85deebf4900c215635145dce6cb9bd221eda9a4c021a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"MultiSend should only be called \")\n        mstore(add(headStart, 96), \"via EOA\")\n        tail := add(headStart, 128)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"60806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b610036610031366004610139565b610038565b005b333b1561009b5760405162461bcd60e51b815260206004820152602760248201527f4d756c746953656e642073686f756c64206f6e6c792062652063616c6c65642060448201526676696120454f4160c81b606482015260840160405180910390fd5b805160205b8181101561011e578083015160f81c6001820184015160601c6015830185015160358401860151605585018701600085600081146100e557600181146100f557610100565b6000808585888a5af19150610100565b6000808585895af491505b508061010b57600080fd5b50508060550185019450505050506100a0565b505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561014b57600080fd5b813567ffffffffffffffff8082111561016357600080fd5b818401915084601f83011261017757600080fd5b81358181111561018957610189610123565b604051601f8201601f19908116603f011681019083821181831017156101b1576101b1610123565b816040528281528760208487010111156101ca57600080fd5b82602086016020830137600092810160200192909252509594505050505056fea26469706673582212203a98476913f6497f1e14c2a098f4f736f686478bc4777a4604ca864cd23dae8d64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8D80FF0A EQ PUSH2 0x23 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x36 PUSH2 0x31 CALLDATASIZE PUSH1 0x4 PUSH2 0x139 JUMP JUMPDEST PUSH2 0x38 JUMP JUMPDEST STOP JUMPDEST CALLER EXTCODESIZE ISZERO PUSH2 0x9B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D756C746953656E642073686F756C64206F6E6C792062652063616C6C656420 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x76696120454F41 PUSH1 0xC8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x20 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x11E JUMPI DUP1 DUP4 ADD MLOAD PUSH1 0xF8 SHR PUSH1 0x1 DUP3 ADD DUP5 ADD MLOAD PUSH1 0x60 SHR PUSH1 0x15 DUP4 ADD DUP6 ADD MLOAD PUSH1 0x35 DUP5 ADD DUP7 ADD MLOAD PUSH1 0x55 DUP6 ADD DUP8 ADD PUSH1 0x0 DUP6 PUSH1 0x0 DUP2 EQ PUSH2 0xE5 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0xF5 JUMPI PUSH2 0x100 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 DUP9 DUP11 GAS CALL SWAP2 POP PUSH2 0x100 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 DUP10 GAS DELEGATECALL SWAP2 POP JUMPDEST POP DUP1 PUSH2 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 PUSH1 0x55 ADD DUP6 ADD SWAP5 POP POP POP POP POP PUSH2 0xA0 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x14B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x163 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x177 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x189 JUMPI PUSH2 0x189 PUSH2 0x123 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x1B1 JUMPI PUSH2 0x1B1 PUSH2 0x123 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP8 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x1CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP3 DUP2 ADD PUSH1 0x20 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GASPRICE SWAP9 SELFBALANCE PUSH10 0x13F6497F1E14C2A098F4 0xF7 CALLDATASIZE 0xF6 DUP7 SELFBALANCE DUP12 0xC4 PUSH24 0x7A4604CA864CD23DAE8D64736F6C63430008110033000000 ","sourceMap":"335:2579:172:-:0;;;;;;;;;;;;;;;;;;;;;1053:1859;;;;;;:::i;:::-;;:::i;:::-;;;1128:10;:22;:27;1120:79;;;;-1:-1:-1;;;1120:79:172;;1274:2:181;1120:79:172;;;1256:21:181;1313:2;1293:18;;;1286:30;1352:34;1332:18;;;1325:62;-1:-1:-1;;;1403:18:181;;;1396:37;1450:19;;1120:79:172;;;;;;;;1294:12;1288:19;1323:4;1334:1568;1403:6;1400:1;1397:13;1334:1568;;;1748:1;1734:12;1730:20;1724:27;1718:4;1714:38;1998:4;1995:1;1991:12;1977;1973:31;1967:38;1961:4;1957:49;2144:4;2141:1;2137:12;2123;2119:31;2113:38;2311:4;2308:1;2304:12;2290;2286:31;2280:38;2489:4;2486:1;2482:12;2468;2464:31;2519:1;2536:9;2559:1;2554:86;;;;2654:1;2649:87;;;;2529:207;;2554:86;2628:1;2625;2613:10;2607:4;2600:5;2596:2;2589:5;2584:46;2573:57;;2554:86;;2649:87;2724:1;2721;2709:10;2703:4;2699:2;2692:5;2679:47;2668:58;;2529:207;-1:-1:-1;2751:7:172;2745:52;;2785:1;2782;2775:12;2745:52;;;2882:10;2876:4;2872:21;2869:1;2865:29;2860:34;;;;;;1334:1568;;;1338:58;;1053:1859;:::o;14:127:181:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:921;214:6;267:2;255:9;246:7;242:23;238:32;235:52;;;283:1;280;273:12;235:52;323:9;310:23;352:18;393:2;385:6;382:14;379:34;;;409:1;406;399:12;379:34;447:6;436:9;432:22;422:32;;492:7;485:4;481:2;477:13;473:27;463:55;;514:1;511;504:12;463:55;550:2;537:16;572:2;568;565:10;562:36;;;578:18;;:::i;:::-;653:2;647:9;621:2;707:13;;-1:-1:-1;;703:22:181;;;727:2;699:31;695:40;683:53;;;751:18;;;771:22;;;748:46;745:72;;;797:18;;:::i;:::-;837:10;833:2;826:22;872:2;864:6;857:18;912:7;907:2;902;898;894:11;890:20;887:33;884:53;;;933:1;930;923:12;884:53;989:2;984;980;976:11;971:2;963:6;959:15;946:46;1034:1;1012:15;;;1029:2;1008:24;1001:35;;;;-1:-1:-1;1016:6:181;146:921;-1:-1:-1;;;;;146:921:181:o"},"gasEstimates":{"creation":{"codeDepositCost":"108800","executionCost":"infinite","totalCost":"infinite"},"external":{"multiSend(bytes)":"infinite"}},"methodIdentifiers":{"multiSend(bytes)":"8d80ff0a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"transactions\",\"type\":\"bytes\"}],\"name\":\"multiSend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Modification was to ensure this is called from an EOA, rather than enforcing the `delegatecall` usage as in the original contract.\",\"kind\":\"dev\",\"methods\":{\"multiSend(bytes)\":{\"details\":\"Sends multiple transactions and reverts all if one fails.\",\"params\":{\"transactions\":\"Encoded transactions. Each transaction is encoded as a packed bytes of                     operation as a uint8 with 0 for a call or 1 for a delegatecall (=> 1 byte),                     to as a address (=> 20 bytes),                     value as a uint256 (=> 32 bytes),                     data length as a uint256 (=> 32 bytes),                     data as bytes.                     see abi.encodePacked for more information on packed encoding\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Modified from https://github.com/safe-global/safe-contracts/blob/main/contracts/libraries/MultiSend.sol\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/shared/libraries/Multisend.sol\":\"MultiSend\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/shared/libraries/Multisend.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity ^0.8.0;\\n\\n/**\\n * @notice Modified from https://github.com/safe-global/safe-contracts/blob/main/contracts/libraries/MultiSend.sol\\n *\\n * @dev Modification was to ensure this is called from an EOA, rather than enforcing the\\n * `delegatecall` usage as in the original contract.\\n */\\ncontract MultiSend {\\n  address private immutable multisendSingleton;\\n\\n  constructor() {\\n    multisendSingleton = address(this);\\n  }\\n\\n  /**\\n   * @dev Sends multiple transactions and reverts all if one fails.\\n   * @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of\\n   *                     operation as a uint8 with 0 for a call or 1 for a delegatecall (=> 1 byte),\\n   *                     to as a address (=> 20 bytes),\\n   *                     value as a uint256 (=> 32 bytes),\\n   *                     data length as a uint256 (=> 32 bytes),\\n   *                     data as bytes.\\n   *                     see abi.encodePacked for more information on packed encoding\\n   */\\n  function multiSend(bytes memory transactions) public payable {\\n    require(msg.sender.code.length == 0, \\\"MultiSend should only be called via EOA\\\");\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let length := mload(transactions)\\n      let i := 0x20\\n      for {\\n        // Pre block is not used in \\\"while mode\\\"\\n      } lt(i, length) {\\n        // Post block is not used in \\\"while mode\\\"\\n      } {\\n        // First byte of the data is the operation.\\n        // We shift by 248 bits (256 - 8 [operation byte]) it right since mload will always load 32 bytes (a word).\\n        // This will also zero out unused data.\\n        let operation := shr(0xf8, mload(add(transactions, i)))\\n        // We offset the load address by 1 byte (operation byte)\\n        // We shift it right by 96 bits (256 - 160 [20 address bytes]) to right-align the data and zero out unused data.\\n        let to := shr(0x60, mload(add(transactions, add(i, 0x01))))\\n        // We offset the load address by 21 byte (operation byte + 20 address bytes)\\n        let value := mload(add(transactions, add(i, 0x15)))\\n        // We offset the load address by 53 byte (operation byte + 20 address bytes + 32 value bytes)\\n        let dataLength := mload(add(transactions, add(i, 0x35)))\\n        // We offset the load address by 85 byte (operation byte + 20 address bytes + 32 value bytes + 32 data length bytes)\\n        let data := add(transactions, add(i, 0x55))\\n        let success := 0\\n        switch operation\\n        case 0 {\\n          success := call(gas(), to, value, data, dataLength, 0, 0)\\n        }\\n        case 1 {\\n          success := delegatecall(gas(), to, data, dataLength, 0, 0)\\n        }\\n        if eq(success, 0) {\\n          revert(0, 0)\\n        }\\n        // Next entry starts at 85 byte + data length\\n        i := add(i, add(0x55, dataLength))\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x435057ec07548343ef163f526262589221507a2e152386dc74ef7d917b0bd143\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Modified from https://github.com/safe-global/safe-contracts/blob/main/contracts/libraries/MultiSend.sol","version":1}}},"contracts/shared/libraries/TypeCasts.sol":{"TypeCasts":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122081bad6d3c92924c85c83daaa94908ef9f4ee4226eb3a3be8de6228dfcefc327c64736f6c63430008110033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xBA 0xD6 0xD3 0xC9 0x29 0x24 0xC8 0x5C DUP4 0xDA 0xAA SWAP5 SWAP1 DUP15 0xF9 DELEGATECALL 0xEE TIMESTAMP 0x26 0xEB GASPRICE EXTCODESIZE 0xE8 0xDE PUSH3 0x28DFCE 0xFC ORIGIN PUSH29 0x64736F6C63430008110033000000000000000000000000000000000000 ","sourceMap":"121:401:173:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;121:401:173;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122081bad6d3c92924c85c83daaa94908ef9f4ee4226eb3a3be8de6228dfcefc327c64736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xBA 0xD6 0xD3 0xC9 0x29 0x24 0xC8 0x5C DUP4 0xDA 0xAA SWAP5 SWAP1 DUP15 0xF9 DELEGATECALL 0xEE TIMESTAMP 0x26 0xEB GASPRICE EXTCODESIZE 0xE8 0xDE PUSH3 0x28DFCE 0xFC ORIGIN PUSH29 0x64736F6C63430008110033000000000000000000000000000000000000 ","sourceMap":"121:401:173:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"addressToBytes32(address)":"infinite","bytes32ToAddress(bytes32)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/shared/libraries/TypeCasts.sol\":\"TypeCasts\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n  using TypedMemView for bytes;\\n  using TypedMemView for bytes29;\\n\\n  // alignment preserving cast\\n  function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n    return bytes32(uint256(uint160(_addr)));\\n  }\\n\\n  // alignment preserving cast\\n  function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n    return address(uint160(uint256(_buf)));\\n  }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/shared/libraries/TypedMemView.sol":{"TypedMemView":{"abi":[{"inputs":[{"internalType":"uint256","name":"actual","type":"uint256"},{"internalType":"uint256","name":"expected","type":"uint256"}],"name":"TypedMemView__assertType_typeAssertionFailed","type":"error"},{"inputs":[],"name":"TypedMemView__assertValid_validityAssertionFailed","type":"error"},{"inputs":[],"name":"TypedMemView__index_indexMoreThan32Bytes","type":"error"},{"inputs":[{"internalType":"uint256","name":"loc","type":"uint256"},{"internalType":"uint256","name":"len","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"slice","type":"uint256"}],"name":"TypedMemView__index_overrun","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_identityOOG","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_invalidPointer","type":"error"},{"inputs":[],"name":"TypedMemView__unsafeCopyTo_nullPointer","type":"error"},{"inputs":[],"name":"NULL","outputs":[{"internalType":"bytes29","name":"","type":"bytes29"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6091610038600b82828239805160001a607314602b57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063f26be3fc146038575b600080fd5b604262ffffff1981565b60405162ffffff19909116815260200160405180910390f3fea26469706673582212204d0c4bbe6ccaec2f306c482b9615aaffad37815b992241cfc24264eedc1ef1e264736f6c63430008110033","opcodes":"PUSH1 0x91 PUSH2 0x38 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x33 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xF26BE3FC EQ PUSH1 0x38 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x42 PUSH3 0xFFFFFF NOT DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0xFFFFFF NOT SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4D 0xC 0x4B 0xBE PUSH13 0xCAEC2F306C482B9615AAFFAD37 DUP2 JUMPDEST SWAP10 0x22 COINBASE 0xCF 0xC2 TIMESTAMP PUSH5 0xEEDC1EF1E2 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"71:24417:174:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;71:24417:174;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@NULL_50193":{"entryPoint":null,"id":50193,"parameterSlots":0,"returnSlots":0},"abi_encode_tuple_t_bytes29__to_t_bytes29__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:221:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"123:96:181","statements":[{"nodeType":"YulAssignment","src":"133:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"145:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"156:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"141:3:181"},"nodeType":"YulFunctionCall","src":"141:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"133:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"175:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"190:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"202:8:181","type":"","value":"16777215"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"198:3:181"},"nodeType":"YulFunctionCall","src":"198:13:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"186:3:181"},"nodeType":"YulFunctionCall","src":"186:26:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"168:6:181"},"nodeType":"YulFunctionCall","src":"168:45:181"},"nodeType":"YulExpressionStatement","src":"168:45:181"}]},"name":"abi_encode_tuple_t_bytes29__to_t_bytes29__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"92:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"103:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"114:4:181","type":""}],"src":"14:205:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_bytes29__to_t_bytes29__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, not(16777215)))\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063f26be3fc146038575b600080fd5b604262ffffff1981565b60405162ffffff19909116815260200160405180910390f3fea26469706673582212204d0c4bbe6ccaec2f306c482b9615aaffad37815b992241cfc24264eedc1ef1e264736f6c63430008110033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x33 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xF26BE3FC EQ PUSH1 0x38 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x42 PUSH3 0xFFFFFF NOT DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0xFFFFFF NOT SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4D 0xC 0x4B 0xBE PUSH13 0xCAEC2F306C482B9615AAFFAD37 DUP2 JUMPDEST SWAP10 0x22 COINBASE 0xCF 0xC2 TIMESTAMP PUSH5 0xEEDC1EF1E2 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"71:24417:174:-:0;;;;;;;;;;;;;;;;;;;;;;;;2478:94;;-1:-1:-1;;2478:94:174;;;;;-1:-1:-1;;186:26:181;;;168:45;;156:2;141:18;2478:94:174;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"29000","executionCost":"112","totalCost":"29112"},"external":{"NULL()":"160"},"internal":{"assertType(bytes29,uint40)":"infinite","assertValid(bytes29)":"infinite","build(uint256,uint256,uint256)":"infinite","castTo(bytes29,uint40)":"infinite","clone(bytes29)":"infinite","end(bytes29)":"infinite","equal(bytes29,bytes29)":"infinite","footprint(bytes29)":"infinite","index(bytes29,uint256,uint8)":"infinite","indexAddress(bytes29,uint256)":"infinite","indexLEUint(bytes29,uint256,uint8)":"infinite","indexUint(bytes29,uint256,uint8)":"infinite","isNotValid(bytes29)":"infinite","isNull(bytes29)":"infinite","isType(bytes29,uint40)":"infinite","join(bytes29[] memory)":"infinite","joinKeccak(bytes29[] memory)":"infinite","keccak(bytes29)":"infinite","leftMask(uint8)":"infinite","len(bytes29)":"infinite","loc(bytes29)":"infinite","notEqual(bytes29,bytes29)":"infinite","notNull(bytes29)":"infinite","nullView()":"infinite","postfix(bytes29,uint256,uint40)":"infinite","prefix(bytes29,uint256,uint40)":"infinite","ref(bytes memory,uint40)":"infinite","reverseUint256(uint256)":"infinite","slice(bytes29,uint256,uint256,uint40)":"infinite","typeOf(bytes29)":"infinite","unsafeBuildUnchecked(uint256,uint256,uint256)":"infinite","unsafeCopyTo(bytes29,uint256)":"infinite","unsafeJoin(bytes29[] memory,uint256)":"infinite","untypedEqual(bytes29,bytes29)":"infinite","untypedNotEqual(bytes29,bytes29)":"infinite","words(bytes29)":"infinite"}},"methodIdentifiers":{"NULL()":"f26be3fc"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"}],\"name\":\"TypedMemView__assertType_typeAssertionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__assertValid_validityAssertionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__index_indexMoreThan32Bytes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"len\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slice\",\"type\":\"uint256\"}],\"name\":\"TypedMemView__index_overrun\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_identityOOG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_invalidPointer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_nullPointer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NULL\",\"outputs\":[{\"internalType\":\"bytes29\",\"name\":\"\",\"type\":\"bytes29\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/shared/libraries/TypedMemView.sol\":\"TypedMemView\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n  // Why does this exist?\\n  // the solidity `bytes memory` type has a few weaknesses.\\n  // 1. You can't index ranges effectively\\n  // 2. You can't slice without copying\\n  // 3. The underlying data may represent any type\\n  // 4. Solidity never deallocates memory, and memory costs grow\\n  //    superlinearly\\n\\n  // By using a memory view instead of a `bytes memory` we get the following\\n  // advantages:\\n  // 1. Slices are done on the stack, by manipulating the pointer\\n  // 2. We can index arbitrary ranges and quickly convert them to stack types\\n  // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n  // This makes `TypedMemView` a useful tool for efficient zero-copy\\n  // algorithms.\\n\\n  // Why bytes29?\\n  // We want to avoid confusion between views, digests, and other common\\n  // types so we chose a large and uncommonly used odd number of bytes\\n  //\\n  // Note that while bytes are left-aligned in a word, integers and addresses\\n  // are right-aligned. This means when working in assembly we have to\\n  // account for the 3 unused bytes on the righthand side\\n  //\\n  // First 5 bytes are a type flag.\\n  // - ff_ffff_fffe is reserved for unknown type.\\n  // - ff_ffff_ffff is reserved for invalid types/errors.\\n  // next 12 are memory address\\n  // next 12 are len\\n  // bottom 3 bytes are empty\\n\\n  // Assumptions:\\n  // - non-modification of memory.\\n  // - No Solidity updates\\n  // - - wrt free mem point\\n  // - - wrt bytes representation in memory\\n  // - - wrt memory addressing in general\\n\\n  // Usage:\\n  // - create type constants\\n  // - use `assertType` for runtime type assertions\\n  // - - unfortunately we can't do this at compile time yet :(\\n  // - recommended: implement modifiers that perform type checking\\n  // - - e.g.\\n  // - - `uint40 constant MY_TYPE = 3;`\\n  // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n  // - instantiate a typed view from a bytearray using `ref`\\n  // - use `index` to inspect the contents of the view\\n  // - use `slice` to create smaller views into the same memory\\n  // - - `slice` can increase the offset\\n  // - - `slice can decrease the length`\\n  // - - must specify the output type of `slice`\\n  // - - `slice` will return a null view if you try to overrun\\n  // - - make sure to explicitly check for this with `notNull` or `assertType`\\n  // - use `equal` for typed comparisons.\\n\\n  // The null view\\n  bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n  uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n  uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n  uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n  uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n  // ========== Custom Errors ===========\\n\\n  error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n  error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n  error TypedMemView__index_indexMoreThan32Bytes();\\n  error TypedMemView__unsafeCopyTo_nullPointer();\\n  error TypedMemView__unsafeCopyTo_invalidPointer();\\n  error TypedMemView__unsafeCopyTo_identityOOG();\\n  error TypedMemView__assertValid_validityAssertionFailed();\\n\\n  /**\\n   * @notice          Changes the endianness of a uint256.\\n   * @dev             https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n   * @param _b        The unsigned integer to reverse\\n   * @return          v - The reversed value\\n   */\\n  function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n    v = _b;\\n\\n    // swap bytes\\n    v =\\n      ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n      ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n    // swap 2-byte long pairs\\n    v =\\n      ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n      ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n    // swap 4-byte long pairs\\n    v =\\n      ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n      ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n    // swap 8-byte long pairs\\n    v =\\n      ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n      ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n    // swap 16-byte long pairs\\n    v = (v >> 128) | (v << 128);\\n  }\\n\\n  /**\\n   * @notice      Create a mask with the highest `_len` bits set.\\n   * @param _len  The length\\n   * @return      mask - The mask\\n   */\\n  function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n    // ugly. redo without assembly?\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n    }\\n  }\\n\\n  /**\\n   * @notice      Return the null view.\\n   * @return      bytes29 - The null view\\n   */\\n  function nullView() internal pure returns (bytes29) {\\n    return NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is null.\\n   * @return      bool - True if the view is null\\n   */\\n  function isNull(bytes29 memView) internal pure returns (bool) {\\n    return memView == NULL;\\n  }\\n\\n  /**\\n   * @notice      Check if the view is not null.\\n   * @return      bool - True if the view is not null\\n   */\\n  function notNull(bytes29 memView) internal pure returns (bool) {\\n    return !isNull(memView);\\n  }\\n\\n  /**\\n   * @notice          Check if the view is of a invalid type and points to a valid location\\n   *                  in memory.\\n   * @dev             We perform this check by examining solidity's unallocated memory\\n   *                  pointer and ensuring that the view's upper bound is less than that.\\n   * @param memView   The view\\n   * @return          ret - True if the view is invalid\\n   */\\n  function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n    if (typeOf(memView) == 0xffffffffff) {\\n      return true;\\n    }\\n    uint256 _end = end(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ret := gt(_end, mload(0x40))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view be valid.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @return          bytes29 - The validated view\\n   */\\n  function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n    if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return true if the memview is of the expected type. Otherwise false.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bool - True if the memview is of the expected type\\n   */\\n  function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n    return typeOf(memView) == _expected;\\n  }\\n\\n  /**\\n   * @notice          Require that a typed memory view has a specific type.\\n   * @dev             Returns the view for easy chaining.\\n   * @param memView   The view\\n   * @param _expected The expected type\\n   * @return          bytes29 - The view with validated type\\n   */\\n  function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n    if (!isType(memView, _expected)) {\\n      revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n    }\\n    return memView;\\n  }\\n\\n  /**\\n   * @notice          Return an identical view with a different type.\\n   * @param memView   The view\\n   * @param _newType  The new type\\n   * @return          newView - The new view with the specified type\\n   */\\n  function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n    // then | in the new type\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // shift off the top 5 bytes\\n      newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n    }\\n  }\\n\\n  /**\\n   * @notice          Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Unsafe raw pointer construction. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function unsafeBuildUnchecked(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) private pure returns (bytes29 newView) {\\n    uint256 _uint96Bits = 96;\\n    uint256 _emptyBits = 24;\\n\\n    // Cast params to ensure input is of correct length\\n    uint96 len_ = uint96(_len);\\n    uint96 loc_ = uint96(_loc);\\n    require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n    assembly {\\n      // solium-disable-previous-line security/no-inline-assembly\\n      newView := shl(_uint96Bits, _type) // insert type\\n      newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n      newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @dev             Instantiate a new memory view. This should generally not be called\\n   *                  directly. Prefer `ref` wherever possible.\\n   * @param _type     The type\\n   * @param _loc      The memory address\\n   * @param _len      The length\\n   * @return          newView - The new view with the specified type, location and length\\n   */\\n  function build(\\n    uint256 _type,\\n    uint256 _loc,\\n    uint256 _len\\n  ) internal pure returns (bytes29 newView) {\\n    uint256 _end = _loc + _len;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      if gt(_end, mload(0x40)) {\\n        _end := 0\\n      }\\n    }\\n    if (_end == 0) {\\n      return NULL;\\n    }\\n    newView = unsafeBuildUnchecked(_type, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Instantiate a memory view from a byte array.\\n   * @dev             Note that due to Solidity memory representation, it is not possible to\\n   *                  implement a deref, as the `bytes` type stores its len in memory.\\n   * @param arr       The byte array\\n   * @param newType   The type\\n   * @return          bytes29 - The memory view\\n   */\\n  function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n    uint256 _len = arr.length;\\n\\n    uint256 _loc;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _loc := add(arr, 0x20) // our view is of the data, not the struct\\n    }\\n\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Return the associated type information.\\n   * @param memView   The memory view\\n   * @return          _type - The type associated with the view\\n   */\\n  function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 216 == 256 - 40\\n      _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return the memory address of the underlying bytes.\\n   * @param memView   The view\\n   * @return          _loc - The memory address\\n   */\\n  function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n      _loc := and(shr(120, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          The number of memory words this memory view occupies, rounded up.\\n   * @param memView   The view\\n   * @return          uint256 - The number of memory words\\n   */\\n  function words(bytes29 memView) internal pure returns (uint256) {\\n    return (uint256(len(memView)) + 31) / 32;\\n  }\\n\\n  /**\\n   * @notice          The in-memory footprint of a fresh copy of the view.\\n   * @param memView   The view\\n   * @return          uint256 - The in-memory footprint of a fresh copy of the view.\\n   */\\n  function footprint(bytes29 memView) internal pure returns (uint256) {\\n    return words(memView) * 32;\\n  }\\n\\n  /**\\n   * @notice          The number of bytes of the view.\\n   * @param memView   The view\\n   * @return          _len - The length of the view\\n   */\\n  function len(bytes29 memView) internal pure returns (uint96 _len) {\\n    uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      _len := and(shr(24, memView), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Returns the endpoint of `memView`.\\n   * @param memView   The view\\n   * @return          uint256 - The endpoint of `memView`\\n   */\\n  function end(bytes29 memView) internal pure returns (uint256) {\\n    unchecked {\\n      return loc(memView) + len(memView);\\n    }\\n  }\\n\\n  /**\\n   * @notice          Safe slicing without memory modification.\\n   * @param memView   The view\\n   * @param _index    The start index\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function slice(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    uint256 _loc = loc(memView);\\n\\n    // Ensure it doesn't overrun the view\\n    if (_loc + _index + _len > end(memView)) {\\n      return NULL;\\n    }\\n\\n    _loc = _loc + _index;\\n    return build(newType, _loc, _len);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function prefix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, 0, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n   * @param memView   The view\\n   * @param _len      The length\\n   * @param newType   The new type\\n   * @return          bytes29 - The new view\\n   */\\n  function postfix(\\n    bytes29 memView,\\n    uint256 _len,\\n    uint40 newType\\n  ) internal pure returns (bytes29) {\\n    return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n  }\\n\\n  /**\\n   * @notice          Load up to 32 bytes from the view onto the stack.\\n   * @dev             Returns a bytes32 with only the `_bytes` highest bytes set.\\n   *                  This can be immediately cast to a smaller fixed-length byte array.\\n   *                  To automatically cast to an integer, use `indexUint`.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The 32 byte result\\n   */\\n  function index(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (bytes32 result) {\\n    if (_bytes == 0) {\\n      return bytes32(0);\\n    }\\n    if (_index + _bytes > len(memView)) {\\n      // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n      revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n    }\\n    if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n    uint8 bitLength;\\n    unchecked {\\n      bitLength = _bytes * 8;\\n    }\\n    uint256 _loc = loc(memView);\\n    uint256 _mask = leftMask(bitLength);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      result := and(mload(add(_loc, _index)), _mask)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from the view at `_index`.\\n   * @dev             Requires that the view have >= `_bytes` bytes following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n  }\\n\\n  /**\\n   * @notice          Parse an unsigned integer from LE bytes.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @param _bytes    The bytes\\n   * @return          result - The unsigned integer\\n   */\\n  function indexLEUint(\\n    bytes29 memView,\\n    uint256 _index,\\n    uint8 _bytes\\n  ) internal pure returns (uint256 result) {\\n    return reverseUint256(uint256(index(memView, _index, _bytes)));\\n  }\\n\\n  /**\\n   * @notice          Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n   *                  following that index.\\n   * @param memView   The view\\n   * @param _index    The index\\n   * @return          address - The address\\n   */\\n  function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n    return address(uint160(indexUint(memView, _index, 20)));\\n  }\\n\\n  /**\\n   * @notice          Return the keccak256 hash of the underlying memory\\n   * @param memView   The view\\n   * @return          digest - The keccak256 hash of the underlying memory\\n   */\\n  function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n    uint256 _loc = loc(memView);\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      digest := keccak256(_loc, _len)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Return true if the underlying memory is equal. Else false.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the underlying memory is equal\\n   */\\n  function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n  }\\n\\n  /**\\n   * @notice          Return false if the underlying memory is equal. Else true.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - False if the underlying memory is equal\\n   */\\n  function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !untypedEqual(left, right);\\n  }\\n\\n  /**\\n   * @notice          Compares type equality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are the same\\n   */\\n  function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n  }\\n\\n  /**\\n   * @notice          Compares type inequality.\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param left      The first view\\n   * @param right     The second view\\n   * @return          bool - True if the types are not the same\\n   */\\n  function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n    return !equal(left, right);\\n  }\\n\\n  /**\\n   * @notice          Copy the view to a location, return an unsafe memory reference\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memView   The view\\n   * @param _newLoc   The new location\\n   * @return          written - the unsafe memory reference\\n   */\\n  function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n    if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n    if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n    uint256 _len = len(memView);\\n    uint256 _oldLoc = loc(memView);\\n\\n    uint256 ptr;\\n    bool res;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _newLoc) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n\\n      // use the identity precompile to copy\\n      // guaranteed not to fail, so pop the success\\n      res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n    }\\n    if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n    written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n  }\\n\\n  /**\\n   * @notice          Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n   *                  the new memory\\n   * @dev             Shortcuts if the pointers are identical, otherwise compares type and digest.\\n   * @param memView   The view\\n   * @return          ret - The view pointing to the new memory\\n   */\\n  function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    uint256 _len = len(memView);\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n      ret := ptr\\n    }\\n    unchecked {\\n      unsafeCopyTo(memView, ptr + 0x20);\\n    }\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n      mstore(ptr, _len) // write len of new array (in bytes)\\n    }\\n  }\\n\\n  /**\\n   * @notice          Join the views in memory, return an unsafe reference to the memory.\\n   * @dev             Super Dangerous direct memory access.\\n   *\\n   *                  This reference can be overwritten if anything else modifies memory (!!!).\\n   *                  As such it MUST be consumed IMMEDIATELY.\\n   *                  This function is private to prevent unsafe usage by callers.\\n   * @param memViews  The views\\n   * @return          unsafeView - The conjoined view pointing to the new memory\\n   */\\n  function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      let ptr := mload(0x40)\\n      // revert if we're writing in occupied memory\\n      if gt(ptr, _location) {\\n        revert(0x60, 0x20) // empty revert message\\n      }\\n    }\\n\\n    uint256 _offset = 0;\\n    uint256 _len = memViews.length;\\n    for (uint256 i = 0; i < _len; ) {\\n      bytes29 memView = memViews[i];\\n      unchecked {\\n        unsafeCopyTo(memView, _location + _offset);\\n        _offset += len(memView);\\n        ++i;\\n      }\\n    }\\n    unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n  }\\n\\n  /**\\n   * @notice          Produce the keccak256 digest of the concatenated contents of multiple views.\\n   * @param memViews  The views\\n   * @return          bytes32 - The keccak256 digest\\n   */\\n  function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n    return keccak(unsafeJoin(memViews, ptr));\\n  }\\n\\n  /**\\n   * @notice          copies all views, joins them into a new bytearray.\\n   * @param memViews  The views\\n   * @return          ret - The new byte array\\n   */\\n  function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n    uint256 ptr;\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      ptr := mload(0x40) // load unused memory pointer\\n    }\\n\\n    bytes29 _newView;\\n    unchecked {\\n      _newView = unsafeJoin(memViews, ptr + 0x20);\\n    }\\n    uint256 _written = len(_newView);\\n    uint256 _footprint = footprint(_newView);\\n\\n    assembly {\\n      // solhint-disable-previous-line no-inline-assembly\\n      // store the legnth\\n      mstore(ptr, _written)\\n      // new pointer is old + 0x20 + the footprint of the body\\n      mstore(0x40, add(add(ptr, _footprint), 0x20))\\n      ret := ptr\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/shared/upgrade/UpgradeBeacon.sol":{"UpgradeBeacon":{"abi":[{"inputs":[{"internalType":"address","name":"_initialImplementation","type":"address"},{"internalType":"address","name":"_controller","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgrade","type":"event"},{"stateMutability":"payable","type":"fallback"}],"devdoc":{"details":"This implementation combines the gas savings of having no function selectors found in 0age's implementation: https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol With the added niceties of a safety check that each implementation is a contract and an Upgrade event emitted each time the implementation is changed found in OpenZeppelin's implementation: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol","kind":"dev","methods":{"constructor":{"params":{"_controller":"Address of the controller who can upgrade the implementation","_initialImplementation":"Address of the initial implementation contract"}}},"title":"UpgradeBeacon","version":1},"evm":{"bytecode":{"functionDebugData":{"@_51295":{"entryPoint":null,"id":51295,"parameterSlots":2,"returnSlots":0},"@_setImplementation_51346":{"entryPoint":61,"id":51346,"parameterSlots":1,"returnSlots":0},"@isContract_11172":{"entryPoint":305,"id":11172,"parameterSlots":1,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":320,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_address_fromMemory":{"entryPoint":348,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_t_stringliteral_46c85c57ceaa4579e3e908abc1b992f5ebc8c86a6809c17d59c98ec622400853__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b54c71a6fbb2ca345b95c1e2a89104a71ffbc5a4655ce78640a26a7da0e72d58__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1180:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"74:117:181","statements":[{"nodeType":"YulAssignment","src":"84:22:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"99:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"93:5:181"},"nodeType":"YulFunctionCall","src":"93:13:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"84:5:181"}]},{"body":{"nodeType":"YulBlock","src":"169:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"178:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"181:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"171:6:181"},"nodeType":"YulFunctionCall","src":"171:12:181"},"nodeType":"YulExpressionStatement","src":"171:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"128:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"139:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"154:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"150:3:181"},"nodeType":"YulFunctionCall","src":"150:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"163:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"146:3:181"},"nodeType":"YulFunctionCall","src":"146:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"135:3:181"},"nodeType":"YulFunctionCall","src":"135:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"125:2:181"},"nodeType":"YulFunctionCall","src":"125:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"118:6:181"},"nodeType":"YulFunctionCall","src":"118:50:181"},"nodeType":"YulIf","src":"115:70:181"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"53:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"64:5:181","type":""}],"src":"14:177:181"},{"body":{"nodeType":"YulBlock","src":"294:195:181","statements":[{"body":{"nodeType":"YulBlock","src":"340:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"349:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"352:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"342:6:181"},"nodeType":"YulFunctionCall","src":"342:12:181"},"nodeType":"YulExpressionStatement","src":"342:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"315:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"324:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"311:3:181"},"nodeType":"YulFunctionCall","src":"311:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"336:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"307:3:181"},"nodeType":"YulFunctionCall","src":"307:32:181"},"nodeType":"YulIf","src":"304:52:181"},{"nodeType":"YulAssignment","src":"365:50:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"405:9:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"375:29:181"},"nodeType":"YulFunctionCall","src":"375:40:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"365:6:181"}]},{"nodeType":"YulAssignment","src":"424:59:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"468:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"479:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"464:3:181"},"nodeType":"YulFunctionCall","src":"464:18:181"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"434:29:181"},"nodeType":"YulFunctionCall","src":"434:49:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"424:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"252:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"263:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"275:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"283:6:181","type":""}],"src":"196:293:181"},{"body":{"nodeType":"YulBlock","src":"668:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"685:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"696:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"678:6:181"},"nodeType":"YulFunctionCall","src":"678:21:181"},"nodeType":"YulExpressionStatement","src":"678:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"719:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"730:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"715:3:181"},"nodeType":"YulFunctionCall","src":"715:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"735:1:181","type":"","value":"8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"708:6:181"},"nodeType":"YulFunctionCall","src":"708:29:181"},"nodeType":"YulExpressionStatement","src":"708:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"757:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"768:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"753:3:181"},"nodeType":"YulFunctionCall","src":"753:18:181"},{"hexValue":"2175706772616465","kind":"string","nodeType":"YulLiteral","src":"773:10:181","type":"","value":"!upgrade"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"746:6:181"},"nodeType":"YulFunctionCall","src":"746:38:181"},"nodeType":"YulExpressionStatement","src":"746:38:181"},{"nodeType":"YulAssignment","src":"793:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"805:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"816:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"801:3:181"},"nodeType":"YulFunctionCall","src":"801:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"793:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_46c85c57ceaa4579e3e908abc1b992f5ebc8c86a6809c17d59c98ec622400853__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"645:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"659:4:181","type":""}],"src":"494:331:181"},{"body":{"nodeType":"YulBlock","src":"1004:174:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1021:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1032:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1014:6:181"},"nodeType":"YulFunctionCall","src":"1014:21:181"},"nodeType":"YulExpressionStatement","src":"1014:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1055:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1066:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1051:3:181"},"nodeType":"YulFunctionCall","src":"1051:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1071:2:181","type":"","value":"24"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1044:6:181"},"nodeType":"YulFunctionCall","src":"1044:30:181"},"nodeType":"YulExpressionStatement","src":"1044:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1094:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1105:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1090:3:181"},"nodeType":"YulFunctionCall","src":"1090:18:181"},{"hexValue":"696d706c656d656e746174696f6e2021636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"1110:26:181","type":"","value":"implementation !contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1083:6:181"},"nodeType":"YulFunctionCall","src":"1083:54:181"},"nodeType":"YulExpressionStatement","src":"1083:54:181"},{"nodeType":"YulAssignment","src":"1146:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1158:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1169:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1154:3:181"},"nodeType":"YulFunctionCall","src":"1154:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1146:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b54c71a6fbb2ca345b95c1e2a89104a71ffbc5a4655ce78640a26a7da0e72d58__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"981:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"995:4:181","type":""}],"src":"830:348:181"}]},"contents":"{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_46c85c57ceaa4579e3e908abc1b992f5ebc8c86a6809c17d59c98ec622400853__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 8)\n        mstore(add(headStart, 64), \"!upgrade\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_b54c71a6fbb2ca345b95c1e2a89104a71ffbc5a4655ce78640a26a7da0e72d58__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"implementation !contract\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a06040526040516103283803806103288339810160408190526100229161015c565b61002b8261003d565b6001600160a01b03166080525061018f565b6000546001600160a01b0380831691160361008a5760405162461bcd60e51b8152602060048201526008602482015267217570677261646560c01b60448201526064015b60405180910390fd5b61009d8161013160201b61013a1760201c565b6100e95760405162461bcd60e51b815260206004820152601860248201527f696d706c656d656e746174696f6e2021636f6e747261637400000000000000006044820152606401610081565b600080546001600160a01b0319166001600160a01b038316908117825560405190917ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d91a250565b6001600160a01b03163b151590565b80516001600160a01b038116811461015757600080fd5b919050565b6000806040838503121561016f57600080fd5b61017883610140565b915061018660208401610140565b90509250929050565b60805161017f6101a96000396000600f015261017f6000f3fe6080604052336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100405760005460005260206000f35b60003561004c8161004e565b005b6000546001600160a01b0380831691160361009b5760405162461bcd60e51b8152602060048201526008602482015267217570677261646560c01b60448201526064015b60405180910390fd5b6001600160a01b0381163b6100f25760405162461bcd60e51b815260206004820152601860248201527f696d706c656d656e746174696f6e2021636f6e747261637400000000000000006044820152606401610092565b600080546001600160a01b0319166001600160a01b038316908117825560405190917ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d91a250565b6001600160a01b03163b15159056fea2646970667358221220999210c314e678c37dda4571b82d6639d4e4ba3e320610d428105195d3e1603464736f6c63430008110033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x328 CODESIZE SUB DUP1 PUSH2 0x328 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x22 SWAP2 PUSH2 0x15C JUMP JUMPDEST PUSH2 0x2B DUP3 PUSH2 0x3D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE POP PUSH2 0x18F JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x8A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x2175706772616465 PUSH1 0xC0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x9D DUP2 PUSH2 0x131 PUSH1 0x20 SHL PUSH2 0x13A OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0xE9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x696D706C656D656E746174696F6E2021636F6E74726163740000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x81 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 PUSH32 0xF78721226EFE9A1BB678189A16D1554928B9F2192E2CB93EEDA83B79FA40007D SWAP2 LOG2 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x157 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x16F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x178 DUP4 PUSH2 0x140 JUMP JUMPDEST SWAP2 POP PUSH2 0x186 PUSH1 0x20 DUP5 ADD PUSH2 0x140 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x17F PUSH2 0x1A9 PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH1 0xF ADD MSTORE PUSH2 0x17F PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x40 JUMPI PUSH1 0x0 SLOAD PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 RETURN JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH2 0x4C DUP2 PUSH2 0x4E JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x9B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x2175706772616465 PUSH1 0xC0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0xF2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x696D706C656D656E746174696F6E2021636F6E74726163740000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x92 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 PUSH32 0xF78721226EFE9A1BB678189A16D1554928B9F2192E2CB93EEDA83B79FA40007D SWAP2 LOG2 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP10 SWAP3 LT 0xC3 EQ 0xE6 PUSH25 0xC37DDA4571B82D6639D4E4BA3E320610D428105195D3E16034 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"891:2743:175:-:0;;;1742:156;;;;;;;;;;;;;;;;;;:::i;:::-;1821:42;1840:22;1821:18;:42::i;:::-;-1:-1:-1;;;;;1869:24:175;;;-1:-1:-1;891:2743:175;;3172:460;3327:14;;-1:-1:-1;;;;;3327:36:175;;;:14;;:36;3319:57;;;;-1:-1:-1;;;3319:57:175;;696:2:181;3319:57:175;;;678:21:181;735:1;715:18;;;708:29;-1:-1:-1;;;753:18:181;;;746:38;801:18;;3319:57:175;;;;;;;;;3447:38;3466:18;3447;;;;;:38;;:::i;:::-;3439:75;;;;-1:-1:-1;;;3439:75:175;;1032:2:181;3439:75:175;;;1014:21:181;1071:2;1051:18;;;1044:30;1110:26;1090:18;;;1083:54;1154:18;;3439:75:175;830:348:181;3439:75:175;3554:14;:35;;-1:-1:-1;;;;;;3554:35:175;-1:-1:-1;;;;;3554:35:175;;;;;;;3600:27;;3554:35;;3600:27;;;3172:460;:::o;1175:320:57:-;-1:-1:-1;;;;;1465:19:57;;:23;;;1175:320::o;14:177:181:-;93:13;;-1:-1:-1;;;;;135:31:181;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;830:348::-;891:2743:175;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_51316":{"entryPoint":null,"id":51316,"parameterSlots":0,"returnSlots":0},"@_setImplementation_51346":{"entryPoint":78,"id":51346,"parameterSlots":1,"returnSlots":0},"@isContract_11172":{"entryPoint":314,"id":11172,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_46c85c57ceaa4579e3e908abc1b992f5ebc8c86a6809c17d59c98ec622400853__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b54c71a6fbb2ca345b95c1e2a89104a71ffbc5a4655ce78640a26a7da0e72d58__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:700:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"188:157:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"205:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"216:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"198:6:181"},"nodeType":"YulFunctionCall","src":"198:21:181"},"nodeType":"YulExpressionStatement","src":"198:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"239:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"250:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"235:3:181"},"nodeType":"YulFunctionCall","src":"235:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"255:1:181","type":"","value":"8"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"228:6:181"},"nodeType":"YulFunctionCall","src":"228:29:181"},"nodeType":"YulExpressionStatement","src":"228:29:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"277:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"288:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"273:3:181"},"nodeType":"YulFunctionCall","src":"273:18:181"},{"hexValue":"2175706772616465","kind":"string","nodeType":"YulLiteral","src":"293:10:181","type":"","value":"!upgrade"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"266:6:181"},"nodeType":"YulFunctionCall","src":"266:38:181"},"nodeType":"YulExpressionStatement","src":"266:38:181"},{"nodeType":"YulAssignment","src":"313:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"325:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"336:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"321:3:181"},"nodeType":"YulFunctionCall","src":"321:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"313:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_46c85c57ceaa4579e3e908abc1b992f5ebc8c86a6809c17d59c98ec622400853__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"165:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"179:4:181","type":""}],"src":"14:331:181"},{"body":{"nodeType":"YulBlock","src":"524:174:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"541:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"552:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"534:6:181"},"nodeType":"YulFunctionCall","src":"534:21:181"},"nodeType":"YulExpressionStatement","src":"534:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"575:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"586:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"571:3:181"},"nodeType":"YulFunctionCall","src":"571:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"591:2:181","type":"","value":"24"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"564:6:181"},"nodeType":"YulFunctionCall","src":"564:30:181"},"nodeType":"YulExpressionStatement","src":"564:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"614:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"625:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"610:3:181"},"nodeType":"YulFunctionCall","src":"610:18:181"},{"hexValue":"696d706c656d656e746174696f6e2021636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"630:26:181","type":"","value":"implementation !contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"603:6:181"},"nodeType":"YulFunctionCall","src":"603:54:181"},"nodeType":"YulExpressionStatement","src":"603:54:181"},{"nodeType":"YulAssignment","src":"666:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"678:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"689:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"674:3:181"},"nodeType":"YulFunctionCall","src":"674:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"666:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b54c71a6fbb2ca345b95c1e2a89104a71ffbc5a4655ce78640a26a7da0e72d58__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"501:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"515:4:181","type":""}],"src":"350:348:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_stringliteral_46c85c57ceaa4579e3e908abc1b992f5ebc8c86a6809c17d59c98ec622400853__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 8)\n        mstore(add(headStart, 64), \"!upgrade\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_b54c71a6fbb2ca345b95c1e2a89104a71ffbc5a4655ce78640a26a7da0e72d58__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"implementation !contract\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"51272":[{"length":32,"start":15}]},"linkReferences":{},"object":"6080604052336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100405760005460005260206000f35b60003561004c8161004e565b005b6000546001600160a01b0380831691160361009b5760405162461bcd60e51b8152602060048201526008602482015267217570677261646560c01b60448201526064015b60405180910390fd5b6001600160a01b0381163b6100f25760405162461bcd60e51b815260206004820152601860248201527f696d706c656d656e746174696f6e2021636f6e747261637400000000000000006044820152606401610092565b600080546001600160a01b0319166001600160a01b038316908117825560405190917ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d91a250565b6001600160a01b03163b15159056fea2646970667358221220999210c314e678c37dda4571b82d6639d4e4ba3e320610d428105195d3e1603464736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x40 JUMPI PUSH1 0x0 SLOAD PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 RETURN JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH2 0x4C DUP2 PUSH2 0x4E JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x9B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x8 PUSH1 0x24 DUP3 ADD MSTORE PUSH8 0x2175706772616465 PUSH1 0xC0 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0xF2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x696D706C656D656E746174696F6E2021636F6E74726163740000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x92 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 PUSH32 0xF78721226EFE9A1BB678189A16D1554928B9F2192E2CB93EEDA83B79FA40007D SWAP2 LOG2 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP10 SWAP3 LT 0xC3 EQ 0xE6 PUSH25 0xC37DDA4571B82D6639D4E4BA3E320610D428105195D3E16034 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"891:2743:175:-:0;;;2341:10;-1:-1:-1;;;;;2355:10:175;2341:24;;2337:553;;2536:1;2530:8;2536:1;2520:19;2558:2;2536:1;2548:13;2337:553;2704:26;2779:15;2845:38;2779:15;2845:18;:38::i;:::-;2581:309;3172:460;3327:14;;-1:-1:-1;;;;;3327:36:175;;;:14;;:36;3319:57;;;;-1:-1:-1;;;3319:57:175;;216:2:181;3319:57:175;;;198:21:181;255:1;235:18;;;228:29;-1:-1:-1;;;273:18:181;;;266:38;321:18;;3319:57:175;;;;;;;;;-1:-1:-1;;;;;1465:19:57;;;3439:75:175;;;;-1:-1:-1;;;3439:75:175;;552:2:181;3439:75:175;;;534:21:181;591:2;571:18;;;564:30;630:26;610:18;;;603:54;674:18;;3439:75:175;350:348:181;3439:75:175;3554:14;:35;;-1:-1:-1;;;;;;3554:35:175;-1:-1:-1;;;;;3554:35:175;;;;;;;3600:27;;3554:35;;3600:27;;;3172:460;:::o;1175:320:57:-;-1:-1:-1;;;;;1465:19:57;;:23;;;1175:320::o"},"gasEstimates":{"creation":{"codeDepositCost":"76600","executionCost":"infinite","totalCost":"infinite"},"external":{"":"infinite"},"internal":{"_setImplementation(address)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialImplementation\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_controller\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgrade\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This implementation combines the gas savings of having no function selectors found in 0age's implementation: https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol With the added niceties of a safety check that each implementation is a contract and an Upgrade event emitted each time the implementation is changed found in OpenZeppelin's implementation: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_controller\":\"Address of the controller who can upgrade the implementation\",\"_initialImplementation\":\"Address of the initial implementation contract\"}}},\"title\":\"UpgradeBeacon\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Validate the initial implementation and store it. Store the controller immutably.\"}},\"notice\":\"Stores the address of an implementation contract and allows a controller to upgrade the implementation address\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/shared/upgrade/UpgradeBeacon.sol\":\"UpgradeBeacon\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/shared/upgrade/UpgradeBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============ External Imports ============\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/**\\n * @title UpgradeBeacon\\n * @notice Stores the address of an implementation contract\\n * and allows a controller to upgrade the implementation address\\n * @dev This implementation combines the gas savings of having no function selectors\\n * found in 0age's implementation:\\n * https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol\\n * With the added niceties of a safety check that each implementation is a contract\\n * and an Upgrade event emitted each time the implementation is changed\\n * found in OpenZeppelin's implementation:\\n * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol\\n */\\ncontract UpgradeBeacon {\\n  // ============ Immutables ============\\n\\n  // The controller is capable of modifying the implementation address\\n  address private immutable controller;\\n\\n  // ============ Private Storage Variables ============\\n\\n  // The implementation address is held in storage slot zero.\\n  address private implementation;\\n\\n  // ============ Events ============\\n\\n  // Upgrade event is emitted each time the implementation address is set\\n  // (including deployment)\\n  event Upgrade(address indexed implementation);\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Validate the initial implementation and store it.\\n   * Store the controller immutably.\\n   * @param _initialImplementation Address of the initial implementation contract\\n   * @param _controller Address of the controller who can upgrade the implementation\\n   */\\n  constructor(address _initialImplementation, address _controller) payable {\\n    _setImplementation(_initialImplementation);\\n    controller = _controller;\\n  }\\n\\n  // ============ External Functions ============\\n\\n  /**\\n   * @notice For all callers except the controller, return the current implementation address.\\n   * If called by the Controller, update the implementation address\\n   * to the address passed in the calldata.\\n   * Note: this requires inline assembly because Solidity fallback functions\\n   * do not natively take arguments or return values.\\n   */\\n  fallback() external payable {\\n    if (msg.sender != controller) {\\n      // if not called by the controller,\\n      // load implementation address from storage slot zero\\n      // and return it.\\n      assembly {\\n        mstore(0, sload(0))\\n        return(0, 32)\\n      }\\n    } else {\\n      // if called by the controller,\\n      // load new implementation address from the first word of the calldata\\n      address _newImplementation;\\n      assembly {\\n        _newImplementation := calldataload(0)\\n      }\\n      // set the new implementation\\n      _setImplementation(_newImplementation);\\n    }\\n  }\\n\\n  // ============ Private Functions ============\\n\\n  /**\\n   * @notice Perform checks on the new implementation address\\n   * then upgrade the stored implementation.\\n   * @param _newImplementation Address of the new implementation contract which will replace the old one\\n   */\\n  function _setImplementation(address _newImplementation) private {\\n    // Require that the new implementation is different from the current one\\n    require(implementation != _newImplementation, \\\"!upgrade\\\");\\n    // Require that the new implementation is a contract\\n    require(Address.isContract(_newImplementation), \\\"implementation !contract\\\");\\n    // set the new implementation\\n    implementation = _newImplementation;\\n    emit Upgrade(_newImplementation);\\n  }\\n}\\n\",\"keccak256\":\"0x5e1831c308ec61d9ea9294343a280e1683c4ef8c12fb30dd02c2fff8050529c2\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":51274,"contract":"contracts/shared/upgrade/UpgradeBeacon.sol:UpgradeBeacon","label":"implementation","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{"constructor":{"notice":"Validate the initial implementation and store it. Store the controller immutably."}},"notice":"Stores the address of an implementation contract and allows a controller to upgrade the implementation address","version":1}}},"contracts/shared/upgrade/UpgradeBeaconController.sol":{"UpgradeBeaconController":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ProposedOwnable__onlyOwner_notOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__onlyProposed_notProposedOwner","type":"error"},{"inputs":[],"name":"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__proposeNewOwner_noOwnershipChange","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_invalidProposal","type":"error"},{"inputs":[],"name":"ProposedOwnable__renounceOwnership_noProposal","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"},{"indexed":false,"internalType":"address","name":"implementation","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnershipProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptProposedOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newlyProposed","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beacon","type":"address"},{"internalType":"address","name":"_implementation","type":"address"}],"name":"upgrade","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"This implementation is a minimal version inspired by 0age's implementation: https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/upgradeability/DharmaUpgradeBeaconController.solDo *NOT* remove ownership unless all UpgradeBeacons registered with this controller are willing to lose upgradeability.","kind":"dev","methods":{"upgrade(address,address)":{"params":{"_beacon":"Address of the UpgradeBeacon which will be updated","_implementation":"Address of the Implementation contract to upgrade the Beacon to"}}},"title":"UpgradeBeaconController","version":1},"evm":{"bytecode":{"functionDebugData":{"@_51373":{"entryPoint":null,"id":51373,"parameterSlots":0,"returnSlots":0},"@_setOwner_49908":{"entryPoint":31,"id":49908,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5061001a3361001f565b610084565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b6105fc806100936000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c806399a88ec41161006657806399a88ec4146100e7578063b1f8100d146100fa578063c5b350df1461010d578063d1851c9214610115578063d232c2201461012657600080fd5b80633cf52ffb146100985780636a42b8f8146100af578063715018a6146100b85780638da5cb5b146100c2575b600080fd5b6002545b6040519081526020015b60405180910390f35b62093a8061009c565b6100c0610142565b005b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100a6565b6100c06100f536600461051b565b6101f6565b6100c061010836600461054e565b61033f565b6100c06103e0565b6001546001600160a01b03166100cf565b6000546040516001600160a01b039091161581526020016100a6565b6000546001600160a01b0316331461016d576040516311a8a1bb60e31b815260040160405180910390fd5b62093a806002544261017f9190610570565b1161019d576040516324e0285f60e21b815260040160405180910390fd5b6002546000036101c057604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b0316156101ea576040516323295ef960e01b815260040160405180910390fd5b6101f4600061044c565b565b6000546001600160a01b03163314610221576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0382163b61026f5760405162461bcd60e51b815260206004820152601060248201526f18995858dbdb880858dbdb9d1c9858dd60821b604482015260640160405180910390fd5b604080516001600160a01b038381166020830152600092908516910160408051601f19818403018152908290526102a591610597565b6000604051808303816000865af19150503d80600081146102e2576040519150601f19603f3d011682016040523d82523d6000602084013e6102e7565b606091505b50509050806102fa573d6000803e3d6000fd5b6040516001600160a01b0383811682528416907fc945ae30494f6ee00b9e4bf1fec5653ced7244b559666f44f9a88ea732e957b09060200160405180910390a2505050565b6000546001600160a01b0316331461036a576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610388575060025415155b156103a6576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036103d457604051634a2fb73f60e11b815260040160405180910390fd5b6103dd816104b1565b50565b6001546001600160a01b0316331461040b576040516311a7f27160e11b815260040160405180910390fd5b62093a806002544261041d9190610570565b1161043b576040516324e0285f60e21b815260040160405180910390fd5b6001546101f4906001600160a01b03165b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b80356001600160a01b038116811461051657600080fd5b919050565b6000806040838503121561052e57600080fd5b610537836104ff565b9150610545602084016104ff565b90509250929050565b60006020828403121561056057600080fd5b610569826104ff565b9392505050565b8181038181111561059157634e487b7160e01b600052601160045260246000fd5b92915050565b6000825160005b818110156105b8576020818601810151858301520161059e565b50600092019182525091905056fea264697066735822122039269d083e3db75bcbcc7fb26455b52eb4dea57d3d00075d9f7660186c344aaf64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A CALLER PUSH2 0x1F JUMP JUMPDEST PUSH2 0x84 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x5FC DUP1 PUSH2 0x93 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x99A88EC4 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x99A88EC4 EQ PUSH2 0xE7 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0xAF JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xB8 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xC2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH3 0x93A80 PUSH2 0x9C JUMP JUMPDEST PUSH2 0xC0 PUSH2 0x142 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xA6 JUMP JUMPDEST PUSH2 0xC0 PUSH2 0xF5 CALLDATASIZE PUSH1 0x4 PUSH2 0x51B JUMP JUMPDEST PUSH2 0x1F6 JUMP JUMPDEST PUSH2 0xC0 PUSH2 0x108 CALLDATASIZE PUSH1 0x4 PUSH2 0x54E JUMP JUMPDEST PUSH2 0x33F JUMP JUMPDEST PUSH2 0xC0 PUSH2 0x3E0 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xCF JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xA6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x16D JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x17F SWAP2 SWAP1 PUSH2 0x570 JUMP JUMPDEST GT PUSH2 0x19D JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x1C0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x1EA JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1F4 PUSH1 0x0 PUSH2 0x44C JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x221 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EXTCODESIZE PUSH2 0x26F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x18995858DBDB880858DBDB9D1C9858DD PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 SWAP1 DUP6 AND SWAP2 ADD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH2 0x2A5 SWAP2 PUSH2 0x597 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2E2 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2E7 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2FA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND DUP3 MSTORE DUP5 AND SWAP1 PUSH32 0xC945AE30494F6EE00B9E4BF1FEC5653CED7244B559666F44F9A88EA732E957B0 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x36A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x388 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x3A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x3D4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3DD DUP2 PUSH2 0x4B1 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x40B JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x41D SWAP2 SWAP1 PUSH2 0x570 JUMP JUMPDEST GT PUSH2 0x43B JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x1F4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x516 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x52E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x537 DUP4 PUSH2 0x4FF JUMP JUMPDEST SWAP2 POP PUSH2 0x545 PUSH1 0x20 DUP5 ADD PUSH2 0x4FF JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x560 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x569 DUP3 PUSH2 0x4FF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x591 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5B8 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x59E JUMP JUMPDEST POP PUSH1 0x0 SWAP3 ADD SWAP2 DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CODECOPY 0x26 SWAP14 ADDMOD RETURNDATACOPY RETURNDATASIZE 0xB7 JUMPDEST 0xCB 0xCC PUSH32 0xB26455B52EB4DEA57D3D00075D9F7660186C344AAF64736F6C63430008110033 ","sourceMap":"847:1261:176:-:0;;;1058:46;;;;;;;;;-1:-1:-1;1078:21:176;1088:10;1078:9;:21::i;:::-;847:1261;;4981:185:168;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;847:1261:176:-;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_setOwner_49908":{"entryPoint":1100,"id":49908,"parameterSlots":1,"returnSlots":0},"@_setProposed_49927":{"entryPoint":1201,"id":49927,"parameterSlots":1,"returnSlots":0},"@acceptProposedOwner_49887":{"entryPoint":992,"id":49887,"parameterSlots":0,"returnSlots":0},"@delay_49754":{"entryPoint":null,"id":49754,"parameterSlots":0,"returnSlots":1},"@isContract_11172":{"entryPoint":null,"id":11172,"parameterSlots":1,"returnSlots":1},"@owner_49727":{"entryPoint":null,"id":49727,"parameterSlots":0,"returnSlots":1},"@proposeNewOwner_49841":{"entryPoint":831,"id":49841,"parameterSlots":1,"returnSlots":0},"@proposedTimestamp_49745":{"entryPoint":null,"id":49745,"parameterSlots":0,"returnSlots":1},"@proposed_49736":{"entryPoint":null,"id":49736,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_49874":{"entryPoint":322,"id":49874,"parameterSlots":0,"returnSlots":0},"@renounced_49810":{"entryPoint":null,"id":49810,"parameterSlots":0,"returnSlots":1},"@upgrade_51412":{"entryPoint":502,"id":51412,"parameterSlots":2,"returnSlots":0},"abi_decode_address":{"entryPoint":1279,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":1358,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":1307,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":1431,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d6fa84775b2f5d8dc72e8983563c49fd6df479405c5f9def94921322ed3ad41c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":1392,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2219:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:76:181","statements":[{"nodeType":"YulAssignment","src":"125:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:181"},"nodeType":"YulFunctionCall","src":"133:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"178:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:181"},"nodeType":"YulFunctionCall","src":"160:25:181"},"nodeType":"YulExpressionStatement","src":"160:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:181","type":""}],"src":"14:177:181"},{"body":{"nodeType":"YulBlock","src":"297:102:181","statements":[{"nodeType":"YulAssignment","src":"307:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"319:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"330:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"315:3:181"},"nodeType":"YulFunctionCall","src":"315:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"307:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"349:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"364:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"380:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"385:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"376:3:181"},"nodeType":"YulFunctionCall","src":"376:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"389:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"372:3:181"},"nodeType":"YulFunctionCall","src":"372:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"360:3:181"},"nodeType":"YulFunctionCall","src":"360:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"342:6:181"},"nodeType":"YulFunctionCall","src":"342:51:181"},"nodeType":"YulExpressionStatement","src":"342:51:181"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"266:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"277:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"288:4:181","type":""}],"src":"196:203:181"},{"body":{"nodeType":"YulBlock","src":"453:124:181","statements":[{"nodeType":"YulAssignment","src":"463:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"485:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"472:12:181"},"nodeType":"YulFunctionCall","src":"472:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"463:5:181"}]},{"body":{"nodeType":"YulBlock","src":"555:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"564:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"567:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"557:6:181"},"nodeType":"YulFunctionCall","src":"557:12:181"},"nodeType":"YulExpressionStatement","src":"557:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"514:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"525:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"540:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"545:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"536:3:181"},"nodeType":"YulFunctionCall","src":"536:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"549:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"532:3:181"},"nodeType":"YulFunctionCall","src":"532:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"521:3:181"},"nodeType":"YulFunctionCall","src":"521:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"511:2:181"},"nodeType":"YulFunctionCall","src":"511:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"504:6:181"},"nodeType":"YulFunctionCall","src":"504:50:181"},"nodeType":"YulIf","src":"501:70:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"432:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"443:5:181","type":""}],"src":"404:173:181"},{"body":{"nodeType":"YulBlock","src":"669:173:181","statements":[{"body":{"nodeType":"YulBlock","src":"715:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"724:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"727:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"717:6:181"},"nodeType":"YulFunctionCall","src":"717:12:181"},"nodeType":"YulExpressionStatement","src":"717:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"690:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"699:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"686:3:181"},"nodeType":"YulFunctionCall","src":"686:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"711:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"682:3:181"},"nodeType":"YulFunctionCall","src":"682:32:181"},"nodeType":"YulIf","src":"679:52:181"},{"nodeType":"YulAssignment","src":"740:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"769:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"750:18:181"},"nodeType":"YulFunctionCall","src":"750:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"740:6:181"}]},{"nodeType":"YulAssignment","src":"788:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"821:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"832:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"817:3:181"},"nodeType":"YulFunctionCall","src":"817:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"798:18:181"},"nodeType":"YulFunctionCall","src":"798:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"788:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"627:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"638:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"650:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"658:6:181","type":""}],"src":"582:260:181"},{"body":{"nodeType":"YulBlock","src":"917:116:181","statements":[{"body":{"nodeType":"YulBlock","src":"963:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"972:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"975:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"965:6:181"},"nodeType":"YulFunctionCall","src":"965:12:181"},"nodeType":"YulExpressionStatement","src":"965:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"938:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"947:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"934:3:181"},"nodeType":"YulFunctionCall","src":"934:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"959:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"930:3:181"},"nodeType":"YulFunctionCall","src":"930:32:181"},"nodeType":"YulIf","src":"927:52:181"},{"nodeType":"YulAssignment","src":"988:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1017:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"998:18:181"},"nodeType":"YulFunctionCall","src":"998:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"988:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"883:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"894:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"906:6:181","type":""}],"src":"847:186:181"},{"body":{"nodeType":"YulBlock","src":"1133:92:181","statements":[{"nodeType":"YulAssignment","src":"1143:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1155:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1166:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1151:3:181"},"nodeType":"YulFunctionCall","src":"1151:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1143:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1185:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1210:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1203:6:181"},"nodeType":"YulFunctionCall","src":"1203:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1196:6:181"},"nodeType":"YulFunctionCall","src":"1196:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1178:6:181"},"nodeType":"YulFunctionCall","src":"1178:41:181"},"nodeType":"YulExpressionStatement","src":"1178:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1102:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1113:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1124:4:181","type":""}],"src":"1038:187:181"},{"body":{"nodeType":"YulBlock","src":"1279:176:181","statements":[{"nodeType":"YulAssignment","src":"1289:17:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1301:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"1304:1:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1297:3:181"},"nodeType":"YulFunctionCall","src":"1297:9:181"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"1289:4:181"}]},{"body":{"nodeType":"YulBlock","src":"1338:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1359:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1366:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1371:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1362:3:181"},"nodeType":"YulFunctionCall","src":"1362:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1352:6:181"},"nodeType":"YulFunctionCall","src":"1352:31:181"},"nodeType":"YulExpressionStatement","src":"1352:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1403:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1406:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1396:6:181"},"nodeType":"YulFunctionCall","src":"1396:15:181"},"nodeType":"YulExpressionStatement","src":"1396:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1431:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1434:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1424:6:181"},"nodeType":"YulFunctionCall","src":"1424:15:181"},"nodeType":"YulExpressionStatement","src":"1424:15:181"}]},"condition":{"arguments":[{"name":"diff","nodeType":"YulIdentifier","src":"1321:4:181"},{"name":"x","nodeType":"YulIdentifier","src":"1327:1:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1318:2:181"},"nodeType":"YulFunctionCall","src":"1318:11:181"},"nodeType":"YulIf","src":"1315:134:181"}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"1261:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"1264:1:181","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"1270:4:181","type":""}],"src":"1230:225:181"},{"body":{"nodeType":"YulBlock","src":"1634:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1651:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1662:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1644:6:181"},"nodeType":"YulFunctionCall","src":"1644:21:181"},"nodeType":"YulExpressionStatement","src":"1644:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1685:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1696:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1681:3:181"},"nodeType":"YulFunctionCall","src":"1681:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1701:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1674:6:181"},"nodeType":"YulFunctionCall","src":"1674:30:181"},"nodeType":"YulExpressionStatement","src":"1674:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1724:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1735:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1720:3:181"},"nodeType":"YulFunctionCall","src":"1720:18:181"},{"hexValue":"626561636f6e2021636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"1740:18:181","type":"","value":"beacon !contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1713:6:181"},"nodeType":"YulFunctionCall","src":"1713:46:181"},"nodeType":"YulExpressionStatement","src":"1713:46:181"},{"nodeType":"YulAssignment","src":"1768:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1780:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1791:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1776:3:181"},"nodeType":"YulFunctionCall","src":"1776:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1768:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d6fa84775b2f5d8dc72e8983563c49fd6df479405c5f9def94921322ed3ad41c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1611:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1625:4:181","type":""}],"src":"1460:340:181"},{"body":{"nodeType":"YulBlock","src":"1942:275:181","statements":[{"nodeType":"YulVariableDeclaration","src":"1952:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1972:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1966:5:181"},"nodeType":"YulFunctionCall","src":"1966:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1956:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1988:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1997:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"1992:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2059:77:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2084:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"2089:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2080:3:181"},"nodeType":"YulFunctionCall","src":"2080:11:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2107:6:181"},{"name":"i","nodeType":"YulIdentifier","src":"2115:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2103:3:181"},"nodeType":"YulFunctionCall","src":"2103:14:181"},{"kind":"number","nodeType":"YulLiteral","src":"2119:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2099:3:181"},"nodeType":"YulFunctionCall","src":"2099:25:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2093:5:181"},"nodeType":"YulFunctionCall","src":"2093:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2073:6:181"},"nodeType":"YulFunctionCall","src":"2073:53:181"},"nodeType":"YulExpressionStatement","src":"2073:53:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2018:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"2021:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2015:2:181"},"nodeType":"YulFunctionCall","src":"2015:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2029:21:181","statements":[{"nodeType":"YulAssignment","src":"2031:17:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2040:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"2043:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2036:3:181"},"nodeType":"YulFunctionCall","src":"2036:12:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2031:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"2011:3:181","statements":[]},"src":"2007:129:181"},{"nodeType":"YulVariableDeclaration","src":"2145:26:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2159:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"2164:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2155:3:181"},"nodeType":"YulFunctionCall","src":"2155:16:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2149:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2187:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"2191:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2180:6:181"},"nodeType":"YulFunctionCall","src":"2180:13:181"},"nodeType":"YulExpressionStatement","src":"2180:13:181"},{"nodeType":"YulAssignment","src":"2202:9:181","value":{"name":"_1","nodeType":"YulIdentifier","src":"2209:2:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"2202:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"1918:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1923:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"1934:3:181","type":""}],"src":"1805:412:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_d6fa84775b2f5d8dc72e8983563c49fd6df479405c5f9def94921322ed3ad41c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"beacon !contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            mstore(add(pos, i), mload(add(add(value0, i), 0x20)))\n        }\n        let _1 := add(pos, length)\n        mstore(_1, 0)\n        end := _1\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100935760003560e01c806399a88ec41161006657806399a88ec4146100e7578063b1f8100d146100fa578063c5b350df1461010d578063d1851c9214610115578063d232c2201461012657600080fd5b80633cf52ffb146100985780636a42b8f8146100af578063715018a6146100b85780638da5cb5b146100c2575b600080fd5b6002545b6040519081526020015b60405180910390f35b62093a8061009c565b6100c0610142565b005b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100a6565b6100c06100f536600461051b565b6101f6565b6100c061010836600461054e565b61033f565b6100c06103e0565b6001546001600160a01b03166100cf565b6000546040516001600160a01b039091161581526020016100a6565b6000546001600160a01b0316331461016d576040516311a8a1bb60e31b815260040160405180910390fd5b62093a806002544261017f9190610570565b1161019d576040516324e0285f60e21b815260040160405180910390fd5b6002546000036101c057604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b0316156101ea576040516323295ef960e01b815260040160405180910390fd5b6101f4600061044c565b565b6000546001600160a01b03163314610221576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0382163b61026f5760405162461bcd60e51b815260206004820152601060248201526f18995858dbdb880858dbdb9d1c9858dd60821b604482015260640160405180910390fd5b604080516001600160a01b038381166020830152600092908516910160408051601f19818403018152908290526102a591610597565b6000604051808303816000865af19150503d80600081146102e2576040519150601f19603f3d011682016040523d82523d6000602084013e6102e7565b606091505b50509050806102fa573d6000803e3d6000fd5b6040516001600160a01b0383811682528416907fc945ae30494f6ee00b9e4bf1fec5653ced7244b559666f44f9a88ea732e957b09060200160405180910390a2505050565b6000546001600160a01b0316331461036a576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610388575060025415155b156103a6576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036103d457604051634a2fb73f60e11b815260040160405180910390fd5b6103dd816104b1565b50565b6001546001600160a01b0316331461040b576040516311a7f27160e11b815260040160405180910390fd5b62093a806002544261041d9190610570565b1161043b576040516324e0285f60e21b815260040160405180910390fd5b6001546101f4906001600160a01b03165b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b80356001600160a01b038116811461051657600080fd5b919050565b6000806040838503121561052e57600080fd5b610537836104ff565b9150610545602084016104ff565b90509250929050565b60006020828403121561056057600080fd5b610569826104ff565b9392505050565b8181038181111561059157634e487b7160e01b600052601160045260246000fd5b92915050565b6000825160005b818110156105b8576020818601810151858301520161059e565b50600092019182525091905056fea264697066735822122039269d083e3db75bcbcc7fb26455b52eb4dea57d3d00075d9f7660186c344aaf64736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x99A88EC4 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x99A88EC4 EQ PUSH2 0xE7 JUMPI DUP1 PUSH4 0xB1F8100D EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0xC5B350DF EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0xD1851C92 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0xD232C220 EQ PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3CF52FFB EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x6A42B8F8 EQ PUSH2 0xAF JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xB8 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xC2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH3 0x93A80 PUSH2 0x9C JUMP JUMPDEST PUSH2 0xC0 PUSH2 0x142 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xA6 JUMP JUMPDEST PUSH2 0xC0 PUSH2 0xF5 CALLDATASIZE PUSH1 0x4 PUSH2 0x51B JUMP JUMPDEST PUSH2 0x1F6 JUMP JUMPDEST PUSH2 0xC0 PUSH2 0x108 CALLDATASIZE PUSH1 0x4 PUSH2 0x54E JUMP JUMPDEST PUSH2 0x33F JUMP JUMPDEST PUSH2 0xC0 PUSH2 0x3E0 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xCF JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xA6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x16D JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x17F SWAP2 SWAP1 PUSH2 0x570 JUMP JUMPDEST GT PUSH2 0x19D JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x0 SUB PUSH2 0x1C0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE4B303F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x1EA JUMPI PUSH1 0x40 MLOAD PUSH4 0x23295EF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1F4 PUSH1 0x0 PUSH2 0x44C JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x221 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EXTCODESIZE PUSH2 0x26F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x18995858DBDB880858DBDB9D1C9858DD PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 SWAP1 DUP6 AND SWAP2 ADD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH2 0x2A5 SWAP2 PUSH2 0x597 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2E2 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2E7 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2FA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND DUP3 MSTORE DUP5 AND SWAP1 PUSH32 0xC945AE30494F6EE00B9E4BF1FEC5653CED7244B559666F44F9A88EA732E957B0 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x36A JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A8A1BB PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND SWAP2 AND EQ DUP1 ISZERO PUSH2 0x388 JUMPI POP PUSH1 0x2 SLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x3A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x11BC0665 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 AND SUB PUSH2 0x3D4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A2FB73F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3DD DUP2 PUSH2 0x4B1 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x40B JUMPI PUSH1 0x40 MLOAD PUSH4 0x11A7F271 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x93A80 PUSH1 0x2 SLOAD TIMESTAMP PUSH2 0x41D SWAP2 SWAP1 PUSH2 0x570 JUMP JUMPDEST GT PUSH2 0x43B JUMPI PUSH1 0x40 MLOAD PUSH4 0x24E0285F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x1F4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR DUP2 SSTORE PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST TIMESTAMP PUSH1 0x2 SSTORE PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6AB4D119F23076E8AD491BC65CE85F017FB0591DCE08755BA8591059CC51737A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x516 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x52E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x537 DUP4 PUSH2 0x4FF JUMP JUMPDEST SWAP2 POP PUSH2 0x545 PUSH1 0x20 DUP5 ADD PUSH2 0x4FF JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x560 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x569 DUP3 PUSH2 0x4FF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x591 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5B8 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x59E JUMP JUMPDEST POP PUSH1 0x0 SWAP3 ADD SWAP2 DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CODECOPY 0x26 SWAP14 ADDMOD RETURNDATACOPY RETURNDATASIZE 0xB7 JUMPDEST 0xCB 0xCC PUSH32 0xB26455B52EB4DEA57D3D00075D9F7660186C344AAF64736F6C63430008110033 ","sourceMap":"847:1261:176:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1949:112:168;2029:27;;1949:112;;;160:25:181;;;148:2;133:18;1949:112:168;;;;;;;;2151:79;1530:6;2151:79;;3820:442;;;:::i;:::-;;1641:79;1687:7;1709:6;-1:-1:-1;;;;;1709:6:168;1641:79;;;-1:-1:-1;;;;;360:32:181;;;342:51;;330:2;315:18;1641:79:168;196:203:181;1503:603:176;;;;;;:::i;:::-;;:::i;3321:420:168:-;;;;;;:::i;:::-;;:::i;4404:539::-;;;:::i;1792:85::-;1863:9;;-1:-1:-1;;;;;1863:9:168;1792:85;;3055:86;3097:4;3116:6;3055:86;;-1:-1:-1;;;;;3116:6:168;;;:20;1178:41:181;;1166:2;1151:18;3055:86:168;1038:187:181;3820:442:168;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;3960:27:::2;;3991:1;3960:32:::0;3956:92:::2;;4001:47;;-1:-1:-1::0;;;4001:47:168::2;;;;;;;;;;;3956:92;4095:9;::::0;-1:-1:-1;;;;;4095:9:168::2;:23:::0;4091:88:::2;;4127:52;;-1:-1:-1::0;;;4127:52:168::2;;;;;;;;;;;4091:88;4236:21;4254:1;4236:9;:21::i;:::-;3820:442::o:0;1503:603:176:-;2344:6:168;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;-1:-1:-1;;;;;1465:19:57;;;1632:56:176::1;;;::::0;-1:-1:-1;;;1632:56:176;;1662:2:181;1632:56:176::1;::::0;::::1;1644:21:181::0;1701:2;1681:18;;;1674:30;-1:-1:-1;;;1720:18:181;;;1713:46;1776:18;;1632:56:176::1;;;;;;;;1806:27;::::0;;-1:-1:-1;;;;;360:32:181;;;1806:27:176::1;::::0;::::1;342:51:181::0;1774:13:176::1;::::0;1793:12;;::::1;::::0;315:18:181;1806:27:176::1;::::0;;-1:-1:-1;;1806:27:176;;::::1;::::0;;;;;;;1793:41:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1773:61;;;1926:8;1921:130;;1984:16;1981:1;::::0;1963:38:::1;2020:16;1981:1;2010:27;1921:130;2061:40;::::0;-1:-1:-1;;;;;360:32:181;;;342:51;;2061:40:176;::::1;::::0;::::1;::::0;330:2:181;315:18;2061:40:176::1;;;;;;;1581:525;1503:603:::0;;:::o;3321:420:168:-;2344:6;;-1:-1:-1;;;;;2344:6:168;2354:10;2344:20;2340:70;;2373:37;;-1:-1:-1;;;2373:37:168;;;;;;;;;;;2340:70;3439:9:::1;::::0;-1:-1:-1;;;;;3439:26:168;;::::1;:9:::0;::::1;:26;:62:::0;::::1;;;-1:-1:-1::0;3469:27:168::1;::::0;:32;::::1;3439:62;3435:131;;;3516:50;;-1:-1:-1::0;;;3516:50:168::1;;;;;;;;;;;3435:131;3618:6;::::0;-1:-1:-1;;;;;3618:23:168;;::::1;:6:::0;::::1;:23:::0;3614:88:::1;;3650:52;;-1:-1:-1::0;;;3650:52:168::1;;;;;;;;;;;3614:88;3709:27;3722:13;3709:12;:27::i;:::-;3321:420:::0;:::o;4404:539::-;2548:9;;-1:-1:-1;;;;;2548:9:168;2561:10;2548:23;2544:84;;2580:48;;-1:-1:-1;;;2580:48:168;;;;;;;;;;;2544:84;1530:6:::1;2809:27;;2791:15;:45;;;;:::i;:::-;2790:57;2786:132;;2862:56;;-1:-1:-1::0;;;2862:56:168::1;;;;;;;;;;;2786:132;4928:9:::2;::::0;4918:20:::2;::::0;-1:-1:-1;;;;;4928:9:168::2;4981:185:::0;5059:6;;;5038:38;;-1:-1:-1;;;;;5038:38:168;;;;5059:6;;;5038:38;;;5082:6;:17;;-1:-1:-1;;;;;5082:17:168;;;-1:-1:-1;;;;;;5082:17:168;;;;;;5112:27;5105:34;5082:17;5145:16;;;;;;;4981:185::o;5170:183::-;5259:15;5229:27;:45;5280:9;:25;;-1:-1:-1;;;;;;5280:25:168;-1:-1:-1;;;;;5280:25:168;;;;;;;;5316:32;;;;-1:-1:-1;;5316:32:168;5170:183;:::o;404:173:181:-;472:20;;-1:-1:-1;;;;;521:31:181;;511:42;;501:70;;567:1;564;557:12;501:70;404:173;;;:::o;582:260::-;650:6;658;711:2;699:9;690:7;686:23;682:32;679:52;;;727:1;724;717:12;679:52;750:29;769:9;750:29;:::i;:::-;740:39;;798:38;832:2;821:9;817:18;798:38;:::i;:::-;788:48;;582:260;;;;;:::o;847:186::-;906:6;959:2;947:9;938:7;934:23;930:32;927:52;;;975:1;972;965:12;927:52;998:29;1017:9;998:29;:::i;:::-;988:39;847:186;-1:-1:-1;;;847:186:181:o;1230:225::-;1297:9;;;1318:11;;;1315:134;;;1371:10;1366:3;1362:20;1359:1;1352:31;1406:4;1403:1;1396:15;1434:4;1431:1;1424:15;1315:134;1230:225;;;;:::o;1805:412::-;1934:3;1972:6;1966:13;1997:1;2007:129;2021:6;2018:1;2015:13;2007:129;;;2119:4;2103:14;;;2099:25;;2093:32;2080:11;;;2073:53;2036:12;2007:129;;;-1:-1:-1;2191:1:181;2155:16;;2180:13;;;-1:-1:-1;2155:16:181;1805:412;-1:-1:-1;1805:412:181:o"},"gasEstimates":{"creation":{"codeDepositCost":"306400","executionCost":"57519","totalCost":"363919"},"external":{"acceptProposedOwner()":"63803","delay()":"204","owner()":"2387","proposeNewOwner(address)":"56440","proposed()":"2397","proposedTimestamp()":"2271","renounceOwnership()":"65955","renounced()":"2392","upgrade(address,address)":"infinite"}},"methodIdentifiers":{"acceptProposedOwner()":"c5b350df","delay()":"6a42b8f8","owner()":"8da5cb5b","proposeNewOwner(address)":"b1f8100d","proposed()":"d1851c92","proposedTimestamp()":"3cf52ffb","renounceOwnership()":"715018a6","renounced()":"d232c220","upgrade(address,address)":"99a88ec4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_beacon\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This implementation is a minimal version inspired by 0age's implementation: https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/upgradeability/DharmaUpgradeBeaconController.solDo *NOT* remove ownership unless all UpgradeBeacons registered with this controller are willing to lose upgradeability.\",\"kind\":\"dev\",\"methods\":{\"upgrade(address,address)\":{\"params\":{\"_beacon\":\"Address of the UpgradeBeacon which will be updated\",\"_implementation\":\"Address of the Implementation contract to upgrade the Beacon to\"}}},\"title\":\"UpgradeBeaconController\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"upgrade(address,address)\":{\"notice\":\"Modify the implementation stored in the UpgradeBeacon, which will upgrade the implementation used by all Proxy contracts using that UpgradeBeacon\"}},\"notice\":\"Set as the controller of UpgradeBeacon contract(s), capable of changing their stored implementation address.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/shared/upgrade/UpgradeBeaconController.sol\":\"UpgradeBeaconController\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n  // ========== Custom Errors ===========\\n\\n  error ProposedOwnable__onlyOwner_notOwner();\\n  error ProposedOwnable__onlyProposed_notProposedOwner();\\n  error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n  error ProposedOwnable__proposeNewOwner_invalidProposal();\\n  error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n  error ProposedOwnable__renounceOwnership_noProposal();\\n  error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n  // ============ Properties ============\\n\\n  address private _owner;\\n\\n  address private _proposed;\\n  uint256 private _proposedOwnershipTimestamp;\\n\\n  uint256 private constant _delay = 7 days;\\n\\n  // ======== Getters =========\\n\\n  /**\\n   * @notice Returns the address of the current owner.\\n   */\\n  function owner() public view virtual returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposed() public view virtual returns (address) {\\n    return _proposed;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the proposed owner.\\n   */\\n  function proposedTimestamp() public view virtual returns (uint256) {\\n    return _proposedOwnershipTimestamp;\\n  }\\n\\n  /**\\n   * @notice Returns the delay period before a new owner can be accepted.\\n   */\\n  function delay() public view virtual returns (uint256) {\\n    return _delay;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if called by any account other than the proposed owner.\\n   */\\n  modifier onlyProposed() {\\n    if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Throws if the ownership delay has not elapsed\\n   */\\n  modifier ownershipDelayElapsed() {\\n    // Ensure delay has elapsed\\n    if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n      revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Indicates if the ownership has been renounced() by\\n   * checking if current owner is address(0)\\n   */\\n  function renounced() public view returns (bool) {\\n    return _owner == address(0);\\n  }\\n\\n  // ======== External =========\\n\\n  /**\\n   * @notice Sets the timestamp for an owner to be proposed, and sets the\\n   * newly proposed owner as step 1 in a 2-step process\\n   */\\n  function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n    // Contract as source of truth\\n    if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n      revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n    // Sanity check: reasonable proposal\\n    if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n    _setProposed(newlyProposed);\\n  }\\n\\n  /**\\n   * @notice Renounces ownership of the contract after a delay\\n   */\\n  function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n    // Ensure there has been a proposal cycle started\\n    if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n    // Require proposed is set to 0\\n    if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(address(0));\\n  }\\n\\n  /**\\n   * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n    // NOTE: no need to check if _owner == _proposed, because the _proposed\\n    // is 0-d out and this check is implicitly enforced by modifier\\n\\n    // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n    // the only time this would happen is if the _proposed was never\\n    // set (will fail from modifier) or if the owner == _proposed (checked\\n    // above)\\n\\n    // Emit event, set new owner, reset timestamp\\n    _setOwner(_proposed);\\n  }\\n\\n  // ======== Internal =========\\n\\n  function _setOwner(address newOwner) internal {\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n    delete _proposedOwnershipTimestamp;\\n    delete _proposed;\\n  }\\n\\n  function _setProposed(address newlyProposed) private {\\n    _proposedOwnershipTimestamp = block.timestamp;\\n    _proposed = newlyProposed;\\n    emit OwnershipProposed(newlyProposed);\\n  }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n  /**\\n   * @dev This emits when change in ownership of a contract is proposed.\\n   */\\n  event OwnershipProposed(address indexed proposedOwner);\\n\\n  /**\\n   * @dev This emits when ownership of a contract changes.\\n   */\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @notice Get the address of the owner\\n   * @return owner_ The address of the owner.\\n   */\\n  function owner() external view returns (address owner_);\\n\\n  /**\\n   * @notice Get the address of the proposed owner\\n   * @return proposed_ The address of the proposed.\\n   */\\n  function proposed() external view returns (address proposed_);\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   * @param newlyProposed The proposed new owner of the contract\\n   */\\n  function proposeNewOwner(address newlyProposed) external;\\n\\n  /**\\n   * @notice Set the address of the proposed owner of the contract\\n   */\\n  function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/upgrade/UpgradeBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============ External Imports ============\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/**\\n * @title UpgradeBeacon\\n * @notice Stores the address of an implementation contract\\n * and allows a controller to upgrade the implementation address\\n * @dev This implementation combines the gas savings of having no function selectors\\n * found in 0age's implementation:\\n * https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol\\n * With the added niceties of a safety check that each implementation is a contract\\n * and an Upgrade event emitted each time the implementation is changed\\n * found in OpenZeppelin's implementation:\\n * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol\\n */\\ncontract UpgradeBeacon {\\n  // ============ Immutables ============\\n\\n  // The controller is capable of modifying the implementation address\\n  address private immutable controller;\\n\\n  // ============ Private Storage Variables ============\\n\\n  // The implementation address is held in storage slot zero.\\n  address private implementation;\\n\\n  // ============ Events ============\\n\\n  // Upgrade event is emitted each time the implementation address is set\\n  // (including deployment)\\n  event Upgrade(address indexed implementation);\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Validate the initial implementation and store it.\\n   * Store the controller immutably.\\n   * @param _initialImplementation Address of the initial implementation contract\\n   * @param _controller Address of the controller who can upgrade the implementation\\n   */\\n  constructor(address _initialImplementation, address _controller) payable {\\n    _setImplementation(_initialImplementation);\\n    controller = _controller;\\n  }\\n\\n  // ============ External Functions ============\\n\\n  /**\\n   * @notice For all callers except the controller, return the current implementation address.\\n   * If called by the Controller, update the implementation address\\n   * to the address passed in the calldata.\\n   * Note: this requires inline assembly because Solidity fallback functions\\n   * do not natively take arguments or return values.\\n   */\\n  fallback() external payable {\\n    if (msg.sender != controller) {\\n      // if not called by the controller,\\n      // load implementation address from storage slot zero\\n      // and return it.\\n      assembly {\\n        mstore(0, sload(0))\\n        return(0, 32)\\n      }\\n    } else {\\n      // if called by the controller,\\n      // load new implementation address from the first word of the calldata\\n      address _newImplementation;\\n      assembly {\\n        _newImplementation := calldataload(0)\\n      }\\n      // set the new implementation\\n      _setImplementation(_newImplementation);\\n    }\\n  }\\n\\n  // ============ Private Functions ============\\n\\n  /**\\n   * @notice Perform checks on the new implementation address\\n   * then upgrade the stored implementation.\\n   * @param _newImplementation Address of the new implementation contract which will replace the old one\\n   */\\n  function _setImplementation(address _newImplementation) private {\\n    // Require that the new implementation is different from the current one\\n    require(implementation != _newImplementation, \\\"!upgrade\\\");\\n    // Require that the new implementation is a contract\\n    require(Address.isContract(_newImplementation), \\\"implementation !contract\\\");\\n    // set the new implementation\\n    implementation = _newImplementation;\\n    emit Upgrade(_newImplementation);\\n  }\\n}\\n\",\"keccak256\":\"0x5e1831c308ec61d9ea9294343a280e1683c4ef8c12fb30dd02c2fff8050529c2\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/upgrade/UpgradeBeaconController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============ Internal Imports ============\\nimport {ProposedOwnable} from \\\"../ProposedOwnable.sol\\\";\\n\\nimport {UpgradeBeacon} from \\\"./UpgradeBeacon.sol\\\";\\n\\n// ============ External Imports ============\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/**\\n * @title UpgradeBeaconController\\n * @notice Set as the controller of UpgradeBeacon contract(s),\\n * capable of changing their stored implementation address.\\n * @dev This implementation is a minimal version inspired by 0age's implementation:\\n * https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/upgradeability/DharmaUpgradeBeaconController.sol\\n *\\n * @dev Do *NOT* remove ownership unless all UpgradeBeacons registered with this controller\\n * are willing to lose upgradeability.\\n */\\ncontract UpgradeBeaconController is ProposedOwnable {\\n  // ============ Events ============\\n\\n  event BeaconUpgraded(address indexed beacon, address implementation);\\n\\n  // ============ Constructor ============\\n  constructor() {\\n    _setOwner(msg.sender);\\n  }\\n\\n  // ============ External Functions ============\\n\\n  /**\\n   * @notice Modify the implementation stored in the UpgradeBeacon,\\n   * which will upgrade the implementation used by all\\n   * Proxy contracts using that UpgradeBeacon\\n   * @param _beacon Address of the UpgradeBeacon which will be updated\\n   * @param _implementation Address of the Implementation contract to upgrade the Beacon to\\n   */\\n  function upgrade(address _beacon, address _implementation) external onlyOwner {\\n    // Require that the beacon is a contract\\n    require(Address.isContract(_beacon), \\\"beacon !contract\\\");\\n    // Call into beacon and supply address of new implementation to update it.\\n    (bool _success, ) = _beacon.call(abi.encode(_implementation));\\n    // Revert with message on failure (i.e. if the beacon is somehow incorrect).\\n    if (!_success) {\\n      assembly {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n    emit BeaconUpgraded(_beacon, _implementation);\\n  }\\n}\\n\",\"keccak256\":\"0xfb97bb98871886876513fa63ddf1ac6334d39935490d63ff62627a053b965c94\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":49711,"contract":"contracts/shared/upgrade/UpgradeBeaconController.sol:UpgradeBeaconController","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":49713,"contract":"contracts/shared/upgrade/UpgradeBeaconController.sol:UpgradeBeaconController","label":"_proposed","offset":0,"slot":"1","type":"t_address"},{"astId":49715,"contract":"contracts/shared/upgrade/UpgradeBeaconController.sol:UpgradeBeaconController","label":"_proposedOwnershipTimestamp","offset":0,"slot":"2","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"acceptProposedOwner()":{"notice":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"delay()":{"notice":"Returns the delay period before a new owner can be accepted."},"owner()":{"notice":"Returns the address of the current owner."},"proposeNewOwner(address)":{"notice":"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process"},"proposed()":{"notice":"Returns the address of the proposed owner."},"proposedTimestamp()":{"notice":"Returns the address of the proposed owner."},"renounceOwnership()":{"notice":"Renounces ownership of the contract after a delay"},"renounced()":{"notice":"Indicates if the ownership has been renounced() by checking if current owner is address(0)"},"upgrade(address,address)":{"notice":"Modify the implementation stored in the UpgradeBeacon, which will upgrade the implementation used by all Proxy contracts using that UpgradeBeacon"}},"notice":"Set as the controller of UpgradeBeacon contract(s), capable of changing their stored implementation address.","version":1}}},"contracts/shared/upgrade/UpgradeBeaconProxy.sol":{"UpgradeBeaconProxy":{"abi":[{"inputs":[{"internalType":"address","name":"_upgradeBeacon","type":"address"},{"internalType":"bytes","name":"_initializationCalldata","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"details":"This implementation combines the gas savings of keeping the UpgradeBeacon address outside of contract storage found in 0age's implementation: https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol With the added safety checks that the UpgradeBeacon and implementation are contracts at time of deployment found in OpenZeppelin's implementation: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol","kind":"dev","methods":{"constructor":{"params":{"_initializationCalldata":"Calldata supplied when calling the initialization function","_upgradeBeacon":"Address of the Upgrade Beacon to be stored immutably in the contract"}}},"title":"UpgradeBeaconProxy","version":1},"evm":{"bytecode":{"functionDebugData":{"@_51466":{"entryPoint":null,"id":51466,"parameterSlots":2,"returnSlots":0},"@_getImplementation_51570":{"entryPoint":282,"id":51570,"parameterSlots":1,"returnSlots":1},"@_initialize_51503":{"entryPoint":430,"id":51503,"parameterSlots":2,"returnSlots":0},"@isContract_11172":{"entryPoint":267,"id":11172,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address_payable_fromMemory":{"entryPoint":871,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory":{"entryPoint":626,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":907,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":820,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1885e83655ef1ce5d48047c111cf8c2459adf32b677f5b8e678f940b377eea04__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d6fa84775b2f5d8dc72e8983563c49fd6df479405c5f9def94921322ed3ad41c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory_with_cleanup":{"entryPoint":590,"id":null,"parameterSlots":3,"returnSlots":0},"panic_error_0x41":{"entryPoint":568,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":544,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3435:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"59:86:181","statements":[{"body":{"nodeType":"YulBlock","src":"123:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"132:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"135:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"125:6:181"},"nodeType":"YulFunctionCall","src":"125:12:181"},"nodeType":"YulExpressionStatement","src":"125:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"82:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"93:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"108:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"113:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"104:3:181"},"nodeType":"YulFunctionCall","src":"104:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"117:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"100:3:181"},"nodeType":"YulFunctionCall","src":"100:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"89:3:181"},"nodeType":"YulFunctionCall","src":"89:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"79:2:181"},"nodeType":"YulFunctionCall","src":"79:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"72:6:181"},"nodeType":"YulFunctionCall","src":"72:50:181"},"nodeType":"YulIf","src":"69:70:181"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"48:5:181","type":""}],"src":"14:131:181"},{"body":{"nodeType":"YulBlock","src":"182:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"199:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"206:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"211:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"202:3:181"},"nodeType":"YulFunctionCall","src":"202:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"192:6:181"},"nodeType":"YulFunctionCall","src":"192:31:181"},"nodeType":"YulExpressionStatement","src":"192:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"239:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"242:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:181"},"nodeType":"YulFunctionCall","src":"232:15:181"},"nodeType":"YulExpressionStatement","src":"232:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"263:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"266:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"256:6:181"},"nodeType":"YulFunctionCall","src":"256:15:181"},"nodeType":"YulExpressionStatement","src":"256:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"150:127:181"},{"body":{"nodeType":"YulBlock","src":"348:184:181","statements":[{"nodeType":"YulVariableDeclaration","src":"358:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"367:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"362:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"427:63:181","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"452:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"457:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"448:3:181"},"nodeType":"YulFunctionCall","src":"448:11:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"471:3:181"},{"name":"i","nodeType":"YulIdentifier","src":"476:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"467:3:181"},"nodeType":"YulFunctionCall","src":"467:11:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"461:5:181"},"nodeType":"YulFunctionCall","src":"461:18:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"441:6:181"},"nodeType":"YulFunctionCall","src":"441:39:181"},"nodeType":"YulExpressionStatement","src":"441:39:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"388:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"391:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"385:2:181"},"nodeType":"YulFunctionCall","src":"385:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"399:19:181","statements":[{"nodeType":"YulAssignment","src":"401:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"410:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"413:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"406:3:181"},"nodeType":"YulFunctionCall","src":"406:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"401:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"381:3:181","statements":[]},"src":"377:113:181"},{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"510:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"515:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"506:3:181"},"nodeType":"YulFunctionCall","src":"506:16:181"},{"kind":"number","nodeType":"YulLiteral","src":"524:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"499:6:181"},"nodeType":"YulFunctionCall","src":"499:27:181"},"nodeType":"YulExpressionStatement","src":"499:27:181"}]},"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"326:3:181","type":""},{"name":"dst","nodeType":"YulTypedName","src":"331:3:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"336:6:181","type":""}],"src":"282:250:181"},{"body":{"nodeType":"YulBlock","src":"644:917:181","statements":[{"body":{"nodeType":"YulBlock","src":"690:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"699:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"702:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"692:6:181"},"nodeType":"YulFunctionCall","src":"692:12:181"},"nodeType":"YulExpressionStatement","src":"692:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"665:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"674:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"661:3:181"},"nodeType":"YulFunctionCall","src":"661:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"686:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"657:3:181"},"nodeType":"YulFunctionCall","src":"657:32:181"},"nodeType":"YulIf","src":"654:52:181"},{"nodeType":"YulVariableDeclaration","src":"715:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"734:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"728:5:181"},"nodeType":"YulFunctionCall","src":"728:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"719:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"778:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"753:24:181"},"nodeType":"YulFunctionCall","src":"753:31:181"},"nodeType":"YulExpressionStatement","src":"753:31:181"},{"nodeType":"YulAssignment","src":"793:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"803:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"793:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"817:39:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"841:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"852:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"837:3:181"},"nodeType":"YulFunctionCall","src":"837:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"831:5:181"},"nodeType":"YulFunctionCall","src":"831:25:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"821:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"865:28:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"883:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"887:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"879:3:181"},"nodeType":"YulFunctionCall","src":"879:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"891:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"875:3:181"},"nodeType":"YulFunctionCall","src":"875:18:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"869:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"920:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"929:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"932:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"922:6:181"},"nodeType":"YulFunctionCall","src":"922:12:181"},"nodeType":"YulExpressionStatement","src":"922:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"908:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"916:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"905:2:181"},"nodeType":"YulFunctionCall","src":"905:14:181"},"nodeType":"YulIf","src":"902:34:181"},{"nodeType":"YulVariableDeclaration","src":"945:32:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"959:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"970:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"955:3:181"},"nodeType":"YulFunctionCall","src":"955:22:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"949:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1025:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1034:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1037:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1027:6:181"},"nodeType":"YulFunctionCall","src":"1027:12:181"},"nodeType":"YulExpressionStatement","src":"1027:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1004:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1008:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1000:3:181"},"nodeType":"YulFunctionCall","src":"1000:13:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1015:7:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"996:3:181"},"nodeType":"YulFunctionCall","src":"996:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"989:6:181"},"nodeType":"YulFunctionCall","src":"989:35:181"},"nodeType":"YulIf","src":"986:55:181"},{"nodeType":"YulVariableDeclaration","src":"1050:19:181","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1066:2:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1060:5:181"},"nodeType":"YulFunctionCall","src":"1060:9:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"1054:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1092:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1094:16:181"},"nodeType":"YulFunctionCall","src":"1094:18:181"},"nodeType":"YulExpressionStatement","src":"1094:18:181"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1084:2:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1088:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1081:2:181"},"nodeType":"YulFunctionCall","src":"1081:10:181"},"nodeType":"YulIf","src":"1078:36:181"},{"nodeType":"YulVariableDeclaration","src":"1123:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1137:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1133:3:181"},"nodeType":"YulFunctionCall","src":"1133:7:181"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"1127:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1149:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1169:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1163:5:181"},"nodeType":"YulFunctionCall","src":"1163:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1153:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1181:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1203:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1227:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1231:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1223:3:181"},"nodeType":"YulFunctionCall","src":"1223:13:181"},{"name":"_4","nodeType":"YulIdentifier","src":"1238:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1219:3:181"},"nodeType":"YulFunctionCall","src":"1219:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"1243:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1215:3:181"},"nodeType":"YulFunctionCall","src":"1215:31:181"},{"name":"_4","nodeType":"YulIdentifier","src":"1248:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1211:3:181"},"nodeType":"YulFunctionCall","src":"1211:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1199:3:181"},"nodeType":"YulFunctionCall","src":"1199:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1185:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1311:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1313:16:181"},"nodeType":"YulFunctionCall","src":"1313:18:181"},"nodeType":"YulExpressionStatement","src":"1313:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1270:10:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1282:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1267:2:181"},"nodeType":"YulFunctionCall","src":"1267:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1290:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1302:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1287:2:181"},"nodeType":"YulFunctionCall","src":"1287:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1264:2:181"},"nodeType":"YulFunctionCall","src":"1264:46:181"},"nodeType":"YulIf","src":"1261:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1349:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1353:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1342:6:181"},"nodeType":"YulFunctionCall","src":"1342:22:181"},"nodeType":"YulExpressionStatement","src":"1342:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1380:6:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1388:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1373:6:181"},"nodeType":"YulFunctionCall","src":"1373:18:181"},"nodeType":"YulExpressionStatement","src":"1373:18:181"},{"body":{"nodeType":"YulBlock","src":"1437:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1446:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1449:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1439:6:181"},"nodeType":"YulFunctionCall","src":"1439:12:181"},"nodeType":"YulExpressionStatement","src":"1439:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1414:2:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1418:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1410:3:181"},"nodeType":"YulFunctionCall","src":"1410:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1423:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1406:3:181"},"nodeType":"YulFunctionCall","src":"1406:20:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1428:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1403:2:181"},"nodeType":"YulFunctionCall","src":"1403:33:181"},"nodeType":"YulIf","src":"1400:53:181"},{"expression":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1501:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"1505:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1497:3:181"},"nodeType":"YulFunctionCall","src":"1497:11:181"},{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1514:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1522:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1510:3:181"},"nodeType":"YulFunctionCall","src":"1510:15:181"},{"name":"_3","nodeType":"YulIdentifier","src":"1527:2:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"1462:34:181"},"nodeType":"YulFunctionCall","src":"1462:68:181"},"nodeType":"YulExpressionStatement","src":"1462:68:181"},{"nodeType":"YulAssignment","src":"1539:16:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1549:6:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1539:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"602:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"613:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"625:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"633:6:181","type":""}],"src":"537:1024:181"},{"body":{"nodeType":"YulBlock","src":"1740:166:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1757:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1768:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1750:6:181"},"nodeType":"YulFunctionCall","src":"1750:21:181"},"nodeType":"YulExpressionStatement","src":"1750:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1791:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1802:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1787:3:181"},"nodeType":"YulFunctionCall","src":"1787:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"1807:2:181","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1780:6:181"},"nodeType":"YulFunctionCall","src":"1780:30:181"},"nodeType":"YulExpressionStatement","src":"1780:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1830:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1841:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1826:3:181"},"nodeType":"YulFunctionCall","src":"1826:18:181"},{"hexValue":"626561636f6e2021636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"1846:18:181","type":"","value":"beacon !contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1819:6:181"},"nodeType":"YulFunctionCall","src":"1819:46:181"},"nodeType":"YulExpressionStatement","src":"1819:46:181"},{"nodeType":"YulAssignment","src":"1874:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1886:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1897:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1882:3:181"},"nodeType":"YulFunctionCall","src":"1882:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1874:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_d6fa84775b2f5d8dc72e8983563c49fd6df479405c5f9def94921322ed3ad41c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1717:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1731:4:181","type":""}],"src":"1566:340:181"},{"body":{"nodeType":"YulBlock","src":"2085:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2102:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2113:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2095:6:181"},"nodeType":"YulFunctionCall","src":"2095:21:181"},"nodeType":"YulExpressionStatement","src":"2095:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2136:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2147:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2132:3:181"},"nodeType":"YulFunctionCall","src":"2132:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2152:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2125:6:181"},"nodeType":"YulFunctionCall","src":"2125:30:181"},"nodeType":"YulExpressionStatement","src":"2125:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2175:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2186:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2171:3:181"},"nodeType":"YulFunctionCall","src":"2171:18:181"},{"hexValue":"626561636f6e20696d706c656d656e746174696f6e2021636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"2191:33:181","type":"","value":"beacon implementation !contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2164:6:181"},"nodeType":"YulFunctionCall","src":"2164:61:181"},"nodeType":"YulExpressionStatement","src":"2164:61:181"},{"nodeType":"YulAssignment","src":"2234:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2246:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2257:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2242:3:181"},"nodeType":"YulFunctionCall","src":"2242:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2234:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1885e83655ef1ce5d48047c111cf8c2459adf32b677f5b8e678f940b377eea04__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2062:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2076:4:181","type":""}],"src":"1911:355:181"},{"body":{"nodeType":"YulBlock","src":"2462:14:181","statements":[{"nodeType":"YulAssignment","src":"2464:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"2471:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"2464:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"2446:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"2454:3:181","type":""}],"src":"2271:205:181"},{"body":{"nodeType":"YulBlock","src":"2602:275:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2619:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2630:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2612:6:181"},"nodeType":"YulFunctionCall","src":"2612:21:181"},"nodeType":"YulExpressionStatement","src":"2612:21:181"},{"nodeType":"YulVariableDeclaration","src":"2642:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2662:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2656:5:181"},"nodeType":"YulFunctionCall","src":"2656:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2646:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2689:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2700:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2685:3:181"},"nodeType":"YulFunctionCall","src":"2685:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"2705:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2678:6:181"},"nodeType":"YulFunctionCall","src":"2678:34:181"},"nodeType":"YulExpressionStatement","src":"2678:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2760:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2768:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2756:3:181"},"nodeType":"YulFunctionCall","src":"2756:15:181"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2777:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2788:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2773:3:181"},"nodeType":"YulFunctionCall","src":"2773:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"2793:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"2721:34:181"},"nodeType":"YulFunctionCall","src":"2721:79:181"},"nodeType":"YulExpressionStatement","src":"2721:79:181"},{"nodeType":"YulAssignment","src":"2809:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2825:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2844:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2852:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2840:3:181"},"nodeType":"YulFunctionCall","src":"2840:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2861:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2857:3:181"},"nodeType":"YulFunctionCall","src":"2857:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2836:3:181"},"nodeType":"YulFunctionCall","src":"2836:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2821:3:181"},"nodeType":"YulFunctionCall","src":"2821:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"2868:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2817:3:181"},"nodeType":"YulFunctionCall","src":"2817:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2809:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2571:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2582:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2593:4:181","type":""}],"src":"2481:396:181"},{"body":{"nodeType":"YulBlock","src":"2971:170:181","statements":[{"body":{"nodeType":"YulBlock","src":"3017:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3026:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3029:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3019:6:181"},"nodeType":"YulFunctionCall","src":"3019:12:181"},"nodeType":"YulExpressionStatement","src":"3019:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2992:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3001:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2988:3:181"},"nodeType":"YulFunctionCall","src":"2988:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3013:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2984:3:181"},"nodeType":"YulFunctionCall","src":"2984:32:181"},"nodeType":"YulIf","src":"2981:52:181"},{"nodeType":"YulVariableDeclaration","src":"3042:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3061:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3055:5:181"},"nodeType":"YulFunctionCall","src":"3055:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3046:5:181","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3105:5:181"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3080:24:181"},"nodeType":"YulFunctionCall","src":"3080:31:181"},"nodeType":"YulExpressionStatement","src":"3080:31:181"},{"nodeType":"YulAssignment","src":"3120:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"3130:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3120:6:181"}]}]},"name":"abi_decode_tuple_t_address_payable_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2937:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2948:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2960:6:181","type":""}],"src":"2882:259:181"},{"body":{"nodeType":"YulBlock","src":"3283:150:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3293:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3313:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3307:5:181"},"nodeType":"YulFunctionCall","src":"3307:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3297:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3368:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3376:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3364:3:181"},"nodeType":"YulFunctionCall","src":"3364:17:181"},{"name":"pos","nodeType":"YulIdentifier","src":"3383:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"3388:6:181"}],"functionName":{"name":"copy_memory_to_memory_with_cleanup","nodeType":"YulIdentifier","src":"3329:34:181"},"nodeType":"YulFunctionCall","src":"3329:66:181"},"nodeType":"YulExpressionStatement","src":"3329:66:181"},{"nodeType":"YulAssignment","src":"3404:23:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3415:3:181"},{"name":"length","nodeType":"YulIdentifier","src":"3420:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3411:3:181"},"nodeType":"YulFunctionCall","src":"3411:16:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"3404:3:181"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"3259:3:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3264:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"3275:3:181","type":""}],"src":"3146:287:181"}]},"contents":"{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function copy_memory_to_memory_with_cleanup(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        mstore(add(dst, length), 0)\n    }\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let offset := mload(add(headStart, 32))\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory_with_cleanup(add(_2, 32), add(memPtr, 32), _3)\n        value1 := memPtr\n    }\n    function abi_encode_tuple_t_stringliteral_d6fa84775b2f5d8dc72e8983563c49fd6df479405c5f9def94921322ed3ad41c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"beacon !contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1885e83655ef1ce5d48047c111cf8c2459adf32b677f5b8e678f940b377eea04__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"beacon implementation !contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    { end := pos }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory_with_cleanup(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_decode_tuple_t_address_payable_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a060405260405161059e38038061059e83398101604081905261002291610272565b6100358261010b60201b6100291760201c565b6100795760405162461bcd60e51b815260206004820152601060248201526f18995858dbdb880858dbdb9d1c9858dd60821b60448201526064015b60405180910390fd5b6001600160a01b03821660805260006100918361011a565b90506100a68161010b60201b6100291760201c565b6100f25760405162461bcd60e51b815260206004820152601f60248201527f626561636f6e20696d706c656d656e746174696f6e2021636f6e7472616374006044820152606401610070565b8151156101035761010381836101ae565b5050506103a7565b6001600160a01b03163b151590565b6000806000836001600160a01b0316604051600060405180830381855afa9150503d8060008114610167576040519150601f19603f3d011682016040523d82523d6000602084013e61016c565b606091505b50915091508181906101915760405162461bcd60e51b81526004016100709190610334565b50808060200190518101906101a69190610367565b949350505050565b6000826001600160a01b0316826040516101c8919061038b565b600060405180830381855af49150503d8060008114610203576040519150601f19603f3d011682016040523d82523d6000602084013e610208565b606091505b505090508061021b573d6000803e3d6000fd5b505050565b6001600160a01b038116811461023557600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610269578181015183820152602001610251565b50506000910152565b6000806040838503121561028557600080fd5b825161029081610220565b60208401519092506001600160401b03808211156102ad57600080fd5b818501915085601f8301126102c157600080fd5b8151818111156102d3576102d3610238565b604051601f8201601f19908116603f011681019083821181831017156102fb576102fb610238565b8160405282815288602084870101111561031457600080fd5b61032583602083016020880161024e565b80955050505050509250929050565b602081526000825180602084015261035381604085016020870161024e565b601f01601f19169190910160400192915050565b60006020828403121561037957600080fd5b815161038481610220565b9392505050565b6000825161039d81846020870161024e565b9190910192915050565b6080516101dd6103c16000396000603f01526101dd6000f3fe60806040523661001357610011610017565b005b6100115b610027610022610038565b610068565b565b6001600160a01b03163b151590565b60006100637f000000000000000000000000000000000000000000000000000000000000000061008c565b905090565b3660008037600080366000845af43d6000803e808015610087573d6000f35b3d6000fd5b6000806000836001600160a01b0316604051600060405180830381855afa9150503d80600081146100d9576040519150601f19603f3d011682016040523d82523d6000602084013e6100de565b606091505b509150915081819061010c5760405162461bcd60e51b81526004016101039190610129565b60405180910390fd5b50808060200190518101906101219190610177565b949350505050565b600060208083528351808285015260005b818110156101565785810183015185820160400152820161013a565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561018957600080fd5b81516001600160a01b03811681146101a057600080fd5b939250505056fea2646970667358221220a40ba76469fb4734050f07534290fc78c939fcb8d364a11afa7988e3ab34ae1464736f6c63430008110033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x59E CODESIZE SUB DUP1 PUSH2 0x59E DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x22 SWAP2 PUSH2 0x272 JUMP JUMPDEST PUSH2 0x35 DUP3 PUSH2 0x10B PUSH1 0x20 SHL PUSH2 0x29 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x79 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x18995858DBDB880858DBDB9D1C9858DD PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x80 MSTORE PUSH1 0x0 PUSH2 0x91 DUP4 PUSH2 0x11A JUMP JUMPDEST SWAP1 POP PUSH2 0xA6 DUP2 PUSH2 0x10B PUSH1 0x20 SHL PUSH2 0x29 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0xF2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x626561636F6E20696D706C656D656E746174696F6E2021636F6E747261637400 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x70 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x103 JUMPI PUSH2 0x103 DUP2 DUP4 PUSH2 0x1AE JUMP JUMPDEST POP POP POP PUSH2 0x3A7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x167 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x16C JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0x191 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x70 SWAP2 SWAP1 PUSH2 0x334 JUMP JUMPDEST POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1A6 SWAP2 SWAP1 PUSH2 0x367 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x1C8 SWAP2 SWAP1 PUSH2 0x38B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x203 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x208 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x21B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x235 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x269 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x251 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x290 DUP2 PUSH2 0x220 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x2D3 JUMPI PUSH2 0x2D3 PUSH2 0x238 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x2FB JUMPI PUSH2 0x2FB PUSH2 0x238 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x325 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x24E JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x353 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x24E JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x379 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x384 DUP2 PUSH2 0x220 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x39D DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x24E JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x1DD PUSH2 0x3C1 PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH1 0x3F ADD MSTORE PUSH2 0x1DD PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x17 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11 JUMPDEST PUSH2 0x27 PUSH2 0x22 PUSH2 0x38 JUMP JUMPDEST PUSH2 0x68 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x63 PUSH32 0x0 PUSH2 0x8C JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x87 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xD9 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xDE JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0x10C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x103 SWAP2 SWAP1 PUSH2 0x129 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x121 SWAP2 SWAP1 PUSH2 0x177 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x156 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x13A JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x189 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG4 SIGNEXTEND 0xA7 PUSH5 0x69FB473405 0xF SMOD MSTORE8 TIMESTAMP SWAP1 0xFC PUSH25 0xC939FCB8D364A11AFA7988E3AB34AE1464736F6C6343000811 STOP CALLER ","sourceMap":"1137:5416:177:-:0;;;1946:646;;;;;;;;;;;;;;;;;;:::i;:::-;2091:34;2110:14;2091:18;;;;;:34;;:::i;:::-;2083:63;;;;-1:-1:-1;;;2083:63:177;;1768:2:181;2083:63:177;;;1750:21:181;1807:2;1787:18;;;1780:30;-1:-1:-1;;;1826:18:181;;;1819:46;1882:18;;2083:63:177;;;;;;;;;-1:-1:-1;;;;;2182:30:177;;;;2267:23;2293:34;2198:14;2293:18;:34::i;:::-;2267:60;;2341:35;2360:15;2341:18;;;;;:35;;:::i;:::-;2333:79;;;;-1:-1:-1;;;2333:79:177;;2113:2:181;2333:79:177;;;2095:21:181;2152:2;2132:18;;;2125:30;2191:33;2171:18;;;2164:61;2242:18;;2333:79:177;1911:355:181;2333:79:177;2484:30;;:34;2480:108;;2528:53;2540:15;2557:23;2528:11;:53::i;:::-;2028:564;1946:646;;1137:5416;;1175:320:57;-1:-1:-1;;;;;1465:19:57;;:23;;;1175:320::o;6047:504:177:-;6121:23;6224:8;6234:24;6262:14;-1:-1:-1;;;;;6262:25:177;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6223:68;;;;6384:3;6396:11;6376:33;;;;;-1:-1:-1;;;6376:33:177;;;;;;;;:::i;:::-;;6523:11;6512:34;;;;;;;;;;;;:::i;:::-;6494:52;6047:504;-1:-1:-1;;;;6047:504:177:o;3403:462::-;3582:8;3596:15;-1:-1:-1;;;;;3596:28:177;3625:23;3596:53;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3581:68;;;3741:3;3736:125;;3794:16;3791:1;;3773:38;3830:16;3791:1;3820:27;3736:125;3495:370;3403:462;;:::o;14:131:181:-;-1:-1:-1;;;;;89:31:181;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:127::-;211:10;206:3;202:20;199:1;192:31;242:4;239:1;232:15;266:4;263:1;256:15;282:250;367:1;377:113;391:6;388:1;385:13;377:113;;;467:11;;;461:18;448:11;;;441:39;413:2;406:10;377:113;;;-1:-1:-1;;524:1:181;506:16;;499:27;282:250::o;537:1024::-;625:6;633;686:2;674:9;665:7;661:23;657:32;654:52;;;702:1;699;692:12;654:52;734:9;728:16;753:31;778:5;753:31;:::i;:::-;852:2;837:18;;831:25;803:5;;-1:-1:-1;;;;;;905:14:181;;;902:34;;;932:1;929;922:12;902:34;970:6;959:9;955:22;945:32;;1015:7;1008:4;1004:2;1000:13;996:27;986:55;;1037:1;1034;1027:12;986:55;1066:2;1060:9;1088:2;1084;1081:10;1078:36;;;1094:18;;:::i;:::-;1169:2;1163:9;1137:2;1223:13;;-1:-1:-1;;1219:22:181;;;1243:2;1215:31;1211:40;1199:53;;;1267:18;;;1287:22;;;1264:46;1261:72;;;1313:18;;:::i;:::-;1353:10;1349:2;1342:22;1388:2;1380:6;1373:18;1428:7;1423:2;1418;1414;1410:11;1406:20;1403:33;1400:53;;;1449:1;1446;1439:12;1400:53;1462:68;1527:2;1522;1514:6;1510:15;1505:2;1501;1497:11;1462:68;:::i;:::-;1549:6;1539:16;;;;;;;537:1024;;;;;:::o;2481:396::-;2630:2;2619:9;2612:21;2593:4;2662:6;2656:13;2705:6;2700:2;2689:9;2685:18;2678:34;2721:79;2793:6;2788:2;2777:9;2773:18;2768:2;2760:6;2756:15;2721:79;:::i;:::-;2861:2;2840:15;-1:-1:-1;;2836:29:181;2821:45;;;;2868:2;2817:54;;2481:396;-1:-1:-1;;2481:396:181:o;2882:259::-;2960:6;3013:2;3001:9;2992:7;2988:23;2984:32;2981:52;;;3029:1;3026;3019:12;2981:52;3061:9;3055:16;3080:31;3105:5;3080:31;:::i;:::-;3130:5;2882:259;-1:-1:-1;;;2882:259:181:o;3146:287::-;3275:3;3313:6;3307:13;3329:66;3388:6;3383:3;3376:4;3368:6;3364:17;3329:66;:::i;:::-;3411:16;;;;;3146:287;-1:-1:-1;;3146:287:181:o;:::-;1137:5416:177;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_51474":{"entryPoint":null,"id":51474,"parameterSlots":0,"returnSlots":0},"@_51482":{"entryPoint":null,"id":51482,"parameterSlots":0,"returnSlots":0},"@_delegate_51521":{"entryPoint":104,"id":51521,"parameterSlots":1,"returnSlots":0},"@_fallback_51513":{"entryPoint":23,"id":51513,"parameterSlots":0,"returnSlots":0},"@_getImplementation_51534":{"entryPoint":56,"id":51534,"parameterSlots":0,"returnSlots":1},"@_getImplementation_51570":{"entryPoint":140,"id":51570,"parameterSlots":1,"returnSlots":1},"@isContract_11172":{"entryPoint":41,"id":11172,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address_payable_fromMemory":{"entryPoint":375,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":297,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1077:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"205:14:181","statements":[{"nodeType":"YulAssignment","src":"207:10:181","value":{"name":"pos","nodeType":"YulIdentifier","src":"214:3:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"207:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"189:3:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"197:3:181","type":""}],"src":"14:205:181"},{"body":{"nodeType":"YulBlock","src":"345:427:181","statements":[{"nodeType":"YulVariableDeclaration","src":"355:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"365:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"359:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"383:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"394:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"376:6:181"},"nodeType":"YulFunctionCall","src":"376:21:181"},"nodeType":"YulExpressionStatement","src":"376:21:181"},{"nodeType":"YulVariableDeclaration","src":"406:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"426:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"420:5:181"},"nodeType":"YulFunctionCall","src":"420:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"410:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"453:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"464:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"449:3:181"},"nodeType":"YulFunctionCall","src":"449:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"469:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"442:6:181"},"nodeType":"YulFunctionCall","src":"442:34:181"},"nodeType":"YulExpressionStatement","src":"442:34:181"},{"nodeType":"YulVariableDeclaration","src":"485:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"494:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"489:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"554:90:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"583:9:181"},{"name":"i","nodeType":"YulIdentifier","src":"594:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"579:3:181"},"nodeType":"YulFunctionCall","src":"579:17:181"},{"kind":"number","nodeType":"YulLiteral","src":"598:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"575:3:181"},"nodeType":"YulFunctionCall","src":"575:26:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"617:6:181"},{"name":"i","nodeType":"YulIdentifier","src":"625:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"613:3:181"},"nodeType":"YulFunctionCall","src":"613:14:181"},{"name":"_1","nodeType":"YulIdentifier","src":"629:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"609:3:181"},"nodeType":"YulFunctionCall","src":"609:23:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"603:5:181"},"nodeType":"YulFunctionCall","src":"603:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"568:6:181"},"nodeType":"YulFunctionCall","src":"568:66:181"},"nodeType":"YulExpressionStatement","src":"568:66:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"515:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"518:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"512:2:181"},"nodeType":"YulFunctionCall","src":"512:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"526:19:181","statements":[{"nodeType":"YulAssignment","src":"528:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"537:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"540:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"533:3:181"},"nodeType":"YulFunctionCall","src":"533:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"528:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"508:3:181","statements":[]},"src":"504:140:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"668:9:181"},{"name":"length","nodeType":"YulIdentifier","src":"679:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"664:3:181"},"nodeType":"YulFunctionCall","src":"664:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"688:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"660:3:181"},"nodeType":"YulFunctionCall","src":"660:31:181"},{"kind":"number","nodeType":"YulLiteral","src":"693:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"653:6:181"},"nodeType":"YulFunctionCall","src":"653:42:181"},"nodeType":"YulExpressionStatement","src":"653:42:181"},{"nodeType":"YulAssignment","src":"704:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"720:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"739:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"747:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"735:3:181"},"nodeType":"YulFunctionCall","src":"735:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"756:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"752:3:181"},"nodeType":"YulFunctionCall","src":"752:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"731:3:181"},"nodeType":"YulFunctionCall","src":"731:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"716:3:181"},"nodeType":"YulFunctionCall","src":"716:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"763:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"712:3:181"},"nodeType":"YulFunctionCall","src":"712:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"704:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"314:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"325:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"336:4:181","type":""}],"src":"224:548:181"},{"body":{"nodeType":"YulBlock","src":"866:209:181","statements":[{"body":{"nodeType":"YulBlock","src":"912:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"921:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"924:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"914:6:181"},"nodeType":"YulFunctionCall","src":"914:12:181"},"nodeType":"YulExpressionStatement","src":"914:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"887:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"896:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"883:3:181"},"nodeType":"YulFunctionCall","src":"883:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"908:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"879:3:181"},"nodeType":"YulFunctionCall","src":"879:32:181"},"nodeType":"YulIf","src":"876:52:181"},{"nodeType":"YulVariableDeclaration","src":"937:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"956:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"950:5:181"},"nodeType":"YulFunctionCall","src":"950:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"941:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1029:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1038:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1041:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1031:6:181"},"nodeType":"YulFunctionCall","src":"1031:12:181"},"nodeType":"YulExpressionStatement","src":"1031:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"988:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"999:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1014:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1019:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1010:3:181"},"nodeType":"YulFunctionCall","src":"1010:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"1023:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1006:3:181"},"nodeType":"YulFunctionCall","src":"1006:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"995:3:181"},"nodeType":"YulFunctionCall","src":"995:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"985:2:181"},"nodeType":"YulFunctionCall","src":"985:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"978:6:181"},"nodeType":"YulFunctionCall","src":"978:50:181"},"nodeType":"YulIf","src":"975:70:181"},{"nodeType":"YulAssignment","src":"1054:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1064:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1054:6:181"}]}]},"name":"abi_decode_tuple_t_address_payable_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"832:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"843:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"855:6:181","type":""}],"src":"777:298:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    { end := pos }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        mstore(add(add(headStart, length), 64), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_decode_tuple_t_address_payable_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"51420":[{"length":32,"start":63}]},"linkReferences":{},"object":"60806040523661001357610011610017565b005b6100115b610027610022610038565b610068565b565b6001600160a01b03163b151590565b60006100637f000000000000000000000000000000000000000000000000000000000000000061008c565b905090565b3660008037600080366000845af43d6000803e808015610087573d6000f35b3d6000fd5b6000806000836001600160a01b0316604051600060405180830381855afa9150503d80600081146100d9576040519150601f19603f3d011682016040523d82523d6000602084013e6100de565b606091505b509150915081819061010c5760405162461bcd60e51b81526004016101039190610129565b60405180910390fd5b50808060200190518101906101219190610177565b949350505050565b600060208083528351808285015260005b818110156101565785810183015185820160400152820161013a565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561018957600080fd5b81516001600160a01b03811681146101a057600080fd5b939250505056fea2646970667358221220a40ba76469fb4734050f07534290fc78c939fcb8d364a11afa7988e3ab34ae1464736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x17 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11 JUMPDEST PUSH2 0x27 PUSH2 0x22 PUSH2 0x38 JUMP JUMPDEST PUSH2 0x68 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x63 PUSH32 0x0 PUSH2 0x8C JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x87 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xD9 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xDE JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP2 SWAP1 PUSH2 0x10C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x103 SWAP2 SWAP1 PUSH2 0x129 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x121 SWAP2 SWAP1 PUSH2 0x177 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x156 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x13A JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x189 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG4 SIGNEXTEND 0xA7 PUSH5 0x69FB473405 0xF SMOD MSTORE8 TIMESTAMP SWAP1 0xFC PUSH25 0xC939FCB8D364A11AFA7988E3AB34AE1464736F6C6343000811 STOP CALLER ","sourceMap":"1137:5416:177:-:0;;;;;;2956:11;:9;:11::i;:::-;1137:5416;;2831:11;3981:71;4016:31;4026:20;:18;:20::i;:::-;4016:9;:31::i;:::-;3981:71::o;1175:320:57:-;-1:-1:-1;;;;;1465:19:57;;:23;;;1175:320::o;5484:139:177:-;5536:23;5585:33;5604:13;5585:18;:33::i;:::-;5567:51;;5484:139;:::o;4473:839::-;4775:14;4772:1;4769;4756:34;5018:1;5015;4999:14;4996:1;4979:15;4972:5;4959:61;5104:16;5101:1;5098;5083:38;5135:6;5190:52;;;;5277:16;5274:1;5267:27;5190:52;5217:16;5214:1;5207:27;6047:504;6121:23;6224:8;6234:24;6262:14;-1:-1:-1;;;;;6262:25:177;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6223:68;;;;6384:3;6396:11;6376:33;;;;;-1:-1:-1;;;6376:33:177;;;;;;;;:::i;:::-;;;;;;;;;;6523:11;6512:34;;;;;;;;;;;;:::i;:::-;6494:52;6047:504;-1:-1:-1;;;;6047:504:177:o;224:548:181:-;336:4;365:2;394;383:9;376:21;426:6;420:13;469:6;464:2;453:9;449:18;442:34;494:1;504:140;518:6;515:1;512:13;504:140;;;613:14;;;609:23;;603:30;579:17;;;598:2;575:26;568:66;533:10;;504:140;;;508:3;693:1;688:2;679:6;668:9;664:22;660:31;653:42;763:2;756;752:7;747:2;739:6;735:15;731:29;720:9;716:45;712:54;704:62;;;;224:548;;;;:::o;777:298::-;855:6;908:2;896:9;887:7;883:23;879:32;876:52;;;924:1;921;914:12;876:52;950:16;;-1:-1:-1;;;;;995:31:181;;985:42;;975:70;;1041:1;1038;1031:12;975:70;1064:5;777:298;-1:-1:-1;;;777:298:181:o"},"gasEstimates":{"creation":{"codeDepositCost":"95400","executionCost":"infinite","totalCost":"infinite"},"external":{"":"infinite"},"internal":{"_delegate(address)":"infinite","_fallback()":"infinite","_getImplementation()":"infinite","_getImplementation(address)":"infinite","_initialize(address,bytes memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_upgradeBeacon\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initializationCalldata\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This implementation combines the gas savings of keeping the UpgradeBeacon address outside of contract storage found in 0age's implementation: https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol With the added safety checks that the UpgradeBeacon and implementation are contracts at time of deployment found in OpenZeppelin's implementation: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_initializationCalldata\":\"Calldata supplied when calling the initialization function\",\"_upgradeBeacon\":\"Address of the Upgrade Beacon to be stored immutably in the contract\"}}},\"title\":\"UpgradeBeaconProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Validate that the Upgrade Beacon is a contract, then set its address immutably within this contract. Validate that the implementation is also a contract, Then call the initialization function defined at the implementation. The deployment will revert and pass along the revert reason if the initialization function reverts.\"}},\"notice\":\"Proxy contract which delegates all logic, including initialization, to an implementation contract. The implementation contract is stored within an Upgrade Beacon contract; the implementation contract can be changed by performing an upgrade on the Upgrade Beacon contract. The Upgrade Beacon contract for this Proxy is immutably specified at deployment.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/shared/upgrade/UpgradeBeaconProxy.sol\":\"UpgradeBeaconProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n     *\\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n     * constructor.\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // This method relies on extcodesize/address.code.length, which returns 0\\n        // for contracts in construction, since the code is only stored at the end\\n        // of the constructor execution.\\n\\n        return account.code.length > 0;\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n\\n    /**\\n     * @dev Performs a Solidity function call using a low level `call`. A\\n     * plain `call` is an unsafe replacement for a function call: use this\\n     * function instead.\\n     *\\n     * If `target` reverts with a revert reason, it is bubbled up by this\\n     * function (like regular Solidity function calls).\\n     *\\n     * Returns the raw returned data. To convert to the expected return value,\\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n     *\\n     * Requirements:\\n     *\\n     * - `target` must be a contract.\\n     * - calling `target` with `data` must not revert.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n     * `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, 0, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but also transferring `value` wei to `target`.\\n     *\\n     * Requirements:\\n     *\\n     * - the calling contract must have an ETH balance of at least `value`.\\n     * - the called Solidity function must be `payable`.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value\\n    ) internal returns (bytes memory) {\\n        return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\\n     *\\n     * _Available since v3.1._\\n     */\\n    function functionCallWithValue(\\n        address target,\\n        bytes memory data,\\n        uint256 value,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n        return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a static call.\\n     *\\n     * _Available since v3.3._\\n     */\\n    function functionStaticCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.staticcall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n        return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n    }\\n\\n    /**\\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n     * but performing a delegate call.\\n     *\\n     * _Available since v3.4._\\n     */\\n    function functionDelegateCall(\\n        address target,\\n        bytes memory data,\\n        string memory errorMessage\\n    ) internal returns (bytes memory) {\\n        (bool success, bytes memory returndata) = target.delegatecall(data);\\n        return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n     *\\n     * _Available since v4.8._\\n     */\\n    function verifyCallResultFromTarget(\\n        address target,\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal view returns (bytes memory) {\\n        if (success) {\\n            if (returndata.length == 0) {\\n                // only check isContract if the call was successful and the return data is empty\\n                // otherwise we already know that it was a contract\\n                require(isContract(target), \\\"Address: call to non-contract\\\");\\n            }\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    /**\\n     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n     * revert reason or using the provided one.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function verifyCallResult(\\n        bool success,\\n        bytes memory returndata,\\n        string memory errorMessage\\n    ) internal pure returns (bytes memory) {\\n        if (success) {\\n            return returndata;\\n        } else {\\n            _revert(returndata, errorMessage);\\n        }\\n    }\\n\\n    function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n        // Look for revert reason and bubble it up if present\\n        if (returndata.length > 0) {\\n            // The easiest way to bubble the revert reason is using memory via assembly\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                let returndata_size := mload(returndata)\\n                revert(add(32, returndata), returndata_size)\\n            }\\n        } else {\\n            revert(errorMessage);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/shared/upgrade/UpgradeBeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============ External Imports ============\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/**\\n * @title UpgradeBeaconProxy\\n * @notice\\n * Proxy contract which delegates all logic, including initialization,\\n * to an implementation contract.\\n * The implementation contract is stored within an Upgrade Beacon contract;\\n * the implementation contract can be changed by performing an upgrade on the Upgrade Beacon contract.\\n * The Upgrade Beacon contract for this Proxy is immutably specified at deployment.\\n * @dev This implementation combines the gas savings of keeping the UpgradeBeacon address outside of contract storage\\n * found in 0age's implementation:\\n * https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol\\n * With the added safety checks that the UpgradeBeacon and implementation are contracts at time of deployment\\n * found in OpenZeppelin's implementation:\\n * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol\\n */\\ncontract UpgradeBeaconProxy {\\n  // ============ Immutables ============\\n\\n  // Upgrade Beacon address is immutable (therefore not kept in contract storage)\\n  address private immutable upgradeBeacon;\\n\\n  // ============ Constructor ============\\n\\n  /**\\n   * @notice Validate that the Upgrade Beacon is a contract, then set its\\n   * address immutably within this contract.\\n   * Validate that the implementation is also a contract,\\n   * Then call the initialization function defined at the implementation.\\n   * The deployment will revert and pass along the\\n   * revert reason if the initialization function reverts.\\n   * @param _upgradeBeacon Address of the Upgrade Beacon to be stored immutably in the contract\\n   * @param _initializationCalldata Calldata supplied when calling the initialization function\\n   */\\n  constructor(address _upgradeBeacon, bytes memory _initializationCalldata) payable {\\n    // Validate the Upgrade Beacon is a contract\\n    require(Address.isContract(_upgradeBeacon), \\\"beacon !contract\\\");\\n    // set the Upgrade Beacon\\n    upgradeBeacon = _upgradeBeacon;\\n    // Validate the implementation is a contract\\n    address _implementation = _getImplementation(_upgradeBeacon);\\n    require(Address.isContract(_implementation), \\\"beacon implementation !contract\\\");\\n    // Call the initialization function on the implementation\\n    if (_initializationCalldata.length > 0) {\\n      _initialize(_implementation, _initializationCalldata);\\n    }\\n  }\\n\\n  // ============ External Functions ============\\n\\n  /**\\n   * @notice Forwards all calls with data to _fallback()\\n   * No public functions are declared on the contract, so all calls hit fallback\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @notice Forwards all calls with no data to _fallback()\\n   */\\n  receive() external payable {\\n    _fallback();\\n  }\\n\\n  // ============ Private Functions ============\\n\\n  /**\\n   * @notice Call the initialization function on the implementation\\n   * Used at deployment to initialize the proxy\\n   * based on the logic for initialization defined at the implementation\\n   * @param _implementation - Contract to which the initalization is delegated\\n   * @param _initializationCalldata - Calldata supplied when calling the initialization function\\n   */\\n  function _initialize(address _implementation, bytes memory _initializationCalldata) private {\\n    // Delegatecall into the implementation, supplying initialization calldata.\\n    (bool _ok, ) = _implementation.delegatecall(_initializationCalldata);\\n    // Revert and include revert data if delegatecall to implementation reverts.\\n    if (!_ok) {\\n      assembly {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Delegates function calls to the implementation contract returned by the Upgrade Beacon\\n   */\\n  function _fallback() private {\\n    _delegate(_getImplementation());\\n  }\\n\\n  /**\\n   * @notice Delegate function execution to the implementation contract\\n   * @dev This is a low level function that doesn't return to its internal\\n   * call site. It will return whatever is returned by the implementation to the\\n   * external caller, reverting and returning the revert data if implementation\\n   * reverts.\\n   * @param _implementation - Address to which the function execution is delegated\\n   */\\n  function _delegate(address _implementation) private {\\n    assembly {\\n      // Copy msg.data. We take full control of memory in this inline assembly\\n      // block because it will not return to Solidity code. We overwrite the\\n      // Solidity scratch pad at memory position 0.\\n      calldatacopy(0, 0, calldatasize())\\n      // Delegatecall to the implementation, supplying calldata and gas.\\n      // Out and outsize are set to zero - instead, use the return buffer.\\n      let result := delegatecall(gas(), _implementation, 0, calldatasize(), 0, 0)\\n      // Copy the returned data from the return buffer.\\n      returndatacopy(0, 0, returndatasize())\\n      switch result\\n      // Delegatecall returns 0 on error.\\n      case 0 {\\n        revert(0, returndatasize())\\n      }\\n      default {\\n        return(0, returndatasize())\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Call the Upgrade Beacon to get the current implementation contract address\\n   * @return _implementation Address of the current implementation.\\n   */\\n  function _getImplementation() private view returns (address _implementation) {\\n    _implementation = _getImplementation(upgradeBeacon);\\n  }\\n\\n  /**\\n   * @notice Call the Upgrade Beacon to get the current implementation contract address\\n   * @dev _upgradeBeacon is passed as a parameter so that\\n   * we can also use this function in the constructor,\\n   * where we can't access immutable variables.\\n   * @param _upgradeBeacon Address of the UpgradeBeacon storing the current implementation\\n   * @return _implementation Address of the current implementation.\\n   */\\n  function _getImplementation(address _upgradeBeacon) private view returns (address _implementation) {\\n    // Get the current implementation address from the upgrade beacon.\\n    (bool _ok, bytes memory _returnData) = _upgradeBeacon.staticcall(\\\"\\\");\\n    // Revert and pass along revert message if call to upgrade beacon reverts.\\n    require(_ok, string(_returnData));\\n    // Set the implementation to the address returned from the upgrade beacon.\\n    _implementation = abi.decode(_returnData, (address));\\n  }\\n}\\n\",\"keccak256\":\"0xc6367ff3b5fa60b1f63d9df81c58671c7bb0978e52682ff1cc977028b67ebd17\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"constructor":{"notice":"Validate that the Upgrade Beacon is a contract, then set its address immutably within this contract. Validate that the implementation is also a contract, Then call the initialization function defined at the implementation. The deployment will revert and pass along the revert reason if the initialization function reverts."}},"notice":"Proxy contract which delegates all logic, including initialization, to an implementation contract. The implementation contract is stored within an Upgrade Beacon contract; the implementation contract can be changed by performing an upgrade on the Upgrade Beacon contract. The Upgrade Beacon contract for this Proxy is immutably specified at deployment.","version":1}}},"contracts/test/TestAavePool.sol":{"TestAavePool":{"abi":[{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"backUnbacked","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint16","name":"","type":"uint16"}],"name":"mintUnbacked","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_revert","type":"bool"}],"name":"setRevertCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506102f5806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806369328dec1461005157806369a933a514610076578063d33d5c861461008b578063d65dc7a1146100ac575b600080fd5b61006461005f3660046101d1565b6100bf565b60405190815260200160405180910390f35b61008961008436600461020d565b610114565b005b610089610099366004610263565b6000805460ff1916911515919091179055565b6100896100ba36600461028c565b610165565b6000805460ff161561010c5760405162461bcd60e51b81526020600482015260116024820152701dda5d1a191c985dc81c995d995c9d1959607a1b60448201526064015b60405180910390fd5b509092915050565b60005460ff161561015f5760405162461bcd60e51b81526020600482015260156024820152741b5a5b9d155b989858dad959081c995d995c9d1959605a1b6044820152606401610103565b50505050565b60005460ff16156101b05760405162461bcd60e51b8152602060048201526015602482015274189858dad55b989858dad959081c995d995c9d1959605a1b6044820152606401610103565b505050565b80356001600160a01b03811681146101cc57600080fd5b919050565b6000806000606084860312156101e657600080fd5b6101ef846101b5565b925060208401359150610204604085016101b5565b90509250925092565b6000806000806080858703121561022357600080fd5b61022c856101b5565b935060208501359250610241604086016101b5565b9150606085013561ffff8116811461025857600080fd5b939692955090935050565b60006020828403121561027557600080fd5b8135801515811461028557600080fd5b9392505050565b6000806000606084860312156102a157600080fd5b6102aa846101b5565b9560208501359550604090940135939250505056fea2646970667358221220b0f4d7e554a7d1d4a6a681991776526addf6592a05c7c21b39cc23b941b2e89364736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F5 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x69328DEC EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x69A933A5 EQ PUSH2 0x76 JUMPI DUP1 PUSH4 0xD33D5C86 EQ PUSH2 0x8B JUMPI DUP1 PUSH4 0xD65DC7A1 EQ PUSH2 0xAC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x1D1 JUMP JUMPDEST PUSH2 0xBF JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x89 PUSH2 0x84 CALLDATASIZE PUSH1 0x4 PUSH2 0x20D JUMP JUMPDEST PUSH2 0x114 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x89 PUSH2 0x99 CALLDATASIZE PUSH1 0x4 PUSH2 0x263 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x89 PUSH2 0xBA CALLDATASIZE PUSH1 0x4 PUSH2 0x28C JUMP JUMPDEST PUSH2 0x165 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x10C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1DDA5D1A191C985DC81C995D995C9D1959 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x15F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x1B5A5B9D155B989858DAD959081C995D995C9D1959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x103 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x189858DAD55B989858DAD959081C995D995C9D1959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x103 JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1EF DUP5 PUSH2 0x1B5 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x204 PUSH1 0x40 DUP6 ADD PUSH2 0x1B5 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x223 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22C DUP6 PUSH2 0x1B5 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH2 0x241 PUSH1 0x40 DUP7 ADD PUSH2 0x1B5 JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x258 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2AA DUP5 PUSH2 0x1B5 JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB0 DELEGATECALL 0xD7 0xE5 SLOAD 0xA7 0xD1 0xD4 0xA6 0xA6 DUP2 SWAP10 OR PUSH23 0x526ADDF6592A05C7C21B39CC23B941B2E89364736F6C63 NUMBER STOP ADDMOD GT STOP CALLER ","sourceMap":"133:693:178:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@backUnbacked_51623":{"entryPoint":357,"id":51623,"parameterSlots":3,"returnSlots":0},"@mintUnbacked_51607":{"entryPoint":276,"id":51607,"parameterSlots":4,"returnSlots":0},"@setRevertCall_51589":{"entryPoint":null,"id":51589,"parameterSlots":1,"returnSlots":0},"@withdraw_51643":{"entryPoint":191,"id":51643,"parameterSlots":3,"returnSlots":1},"abi_decode_address":{"entryPoint":437,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_uint256t_address":{"entryPoint":465,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256t_addresst_uint16":{"entryPoint":525,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint256t_uint256":{"entryPoint":652,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_bool":{"entryPoint":611,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8959e0939ce9e74deaf43a35d4296b903ab372b79f43f57e422127c0622e04d5__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b8c940c5bc4068edee8aa2c147b5f47671be9440b61ef89f0ffefa2c238bd716__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e021d3ad20c537e7db3c05104b8ab0828de45d089ad17db88ee2ef82e19c715c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2849:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:124:181","statements":[{"nodeType":"YulAssignment","src":"73:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:181"},"nodeType":"YulFunctionCall","src":"82:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:181"}]},{"body":{"nodeType":"YulBlock","src":"165:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"174:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"177:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"167:6:181"},"nodeType":"YulFunctionCall","src":"167:12:181"},"nodeType":"YulExpressionStatement","src":"167:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"155:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"146:3:181"},"nodeType":"YulFunctionCall","src":"146:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"142:3:181"},"nodeType":"YulFunctionCall","src":"142:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:181"},"nodeType":"YulFunctionCall","src":"131:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:181"},"nodeType":"YulFunctionCall","src":"121:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:181"},"nodeType":"YulFunctionCall","src":"114:50:181"},"nodeType":"YulIf","src":"111:70:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:181","type":""}],"src":"14:173:181"},{"body":{"nodeType":"YulBlock","src":"296:224:181","statements":[{"body":{"nodeType":"YulBlock","src":"342:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"351:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"354:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"344:6:181"},"nodeType":"YulFunctionCall","src":"344:12:181"},"nodeType":"YulExpressionStatement","src":"344:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"317:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"326:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"313:3:181"},"nodeType":"YulFunctionCall","src":"313:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"338:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"309:3:181"},"nodeType":"YulFunctionCall","src":"309:32:181"},"nodeType":"YulIf","src":"306:52:181"},{"nodeType":"YulAssignment","src":"367:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"396:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"377:18:181"},"nodeType":"YulFunctionCall","src":"377:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"367:6:181"}]},{"nodeType":"YulAssignment","src":"415:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"442:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"453:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"438:3:181"},"nodeType":"YulFunctionCall","src":"438:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"425:12:181"},"nodeType":"YulFunctionCall","src":"425:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"415:6:181"}]},{"nodeType":"YulAssignment","src":"466:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"499:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"510:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"495:3:181"},"nodeType":"YulFunctionCall","src":"495:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"476:18:181"},"nodeType":"YulFunctionCall","src":"476:38:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"466:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"246:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"257:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"269:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"277:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"285:6:181","type":""}],"src":"192:328:181"},{"body":{"nodeType":"YulBlock","src":"626:76:181","statements":[{"nodeType":"YulAssignment","src":"636:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"648:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"659:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"644:3:181"},"nodeType":"YulFunctionCall","src":"644:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"636:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"678:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"689:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"671:6:181"},"nodeType":"YulFunctionCall","src":"671:25:181"},"nodeType":"YulExpressionStatement","src":"671:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"595:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"606:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"617:4:181","type":""}],"src":"525:177:181"},{"body":{"nodeType":"YulBlock","src":"827:369:181","statements":[{"body":{"nodeType":"YulBlock","src":"874:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"883:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"886:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"876:6:181"},"nodeType":"YulFunctionCall","src":"876:12:181"},"nodeType":"YulExpressionStatement","src":"876:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"848:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"857:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"844:3:181"},"nodeType":"YulFunctionCall","src":"844:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"869:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"840:3:181"},"nodeType":"YulFunctionCall","src":"840:33:181"},"nodeType":"YulIf","src":"837:53:181"},{"nodeType":"YulAssignment","src":"899:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"928:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"909:18:181"},"nodeType":"YulFunctionCall","src":"909:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"899:6:181"}]},{"nodeType":"YulAssignment","src":"947:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"974:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"985:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"970:3:181"},"nodeType":"YulFunctionCall","src":"970:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"957:12:181"},"nodeType":"YulFunctionCall","src":"957:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"947:6:181"}]},{"nodeType":"YulAssignment","src":"998:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1031:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1042:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1027:3:181"},"nodeType":"YulFunctionCall","src":"1027:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1008:18:181"},"nodeType":"YulFunctionCall","src":"1008:38:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"998:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1055:45:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1085:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1096:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1081:3:181"},"nodeType":"YulFunctionCall","src":"1081:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1068:12:181"},"nodeType":"YulFunctionCall","src":"1068:32:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1059:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1150:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1159:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1162:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1152:6:181"},"nodeType":"YulFunctionCall","src":"1152:12:181"},"nodeType":"YulExpressionStatement","src":"1152:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1122:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1133:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"1140:6:181","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1129:3:181"},"nodeType":"YulFunctionCall","src":"1129:18:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1119:2:181"},"nodeType":"YulFunctionCall","src":"1119:29:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1112:6:181"},"nodeType":"YulFunctionCall","src":"1112:37:181"},"nodeType":"YulIf","src":"1109:57:181"},{"nodeType":"YulAssignment","src":"1175:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1185:5:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1175:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_addresst_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"769:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"780:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"792:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"800:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"808:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"816:6:181","type":""}],"src":"707:489:181"},{"body":{"nodeType":"YulBlock","src":"1268:206:181","statements":[{"body":{"nodeType":"YulBlock","src":"1314:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1323:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1326:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1316:6:181"},"nodeType":"YulFunctionCall","src":"1316:12:181"},"nodeType":"YulExpressionStatement","src":"1316:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1289:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1298:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1285:3:181"},"nodeType":"YulFunctionCall","src":"1285:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1310:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1281:3:181"},"nodeType":"YulFunctionCall","src":"1281:32:181"},"nodeType":"YulIf","src":"1278:52:181"},{"nodeType":"YulVariableDeclaration","src":"1339:36:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1365:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1352:12:181"},"nodeType":"YulFunctionCall","src":"1352:23:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1343:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1428:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1437:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1440:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1430:6:181"},"nodeType":"YulFunctionCall","src":"1430:12:181"},"nodeType":"YulExpressionStatement","src":"1430:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1397:5:181"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1418:5:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1411:6:181"},"nodeType":"YulFunctionCall","src":"1411:13:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1404:6:181"},"nodeType":"YulFunctionCall","src":"1404:21:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1394:2:181"},"nodeType":"YulFunctionCall","src":"1394:32:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1387:6:181"},"nodeType":"YulFunctionCall","src":"1387:40:181"},"nodeType":"YulIf","src":"1384:60:181"},{"nodeType":"YulAssignment","src":"1453:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"1463:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1453:6:181"}]}]},"name":"abi_decode_tuple_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1234:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1245:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1257:6:181","type":""}],"src":"1201:273:181"},{"body":{"nodeType":"YulBlock","src":"1583:218:181","statements":[{"body":{"nodeType":"YulBlock","src":"1629:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1638:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1641:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1631:6:181"},"nodeType":"YulFunctionCall","src":"1631:12:181"},"nodeType":"YulExpressionStatement","src":"1631:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1604:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1613:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1600:3:181"},"nodeType":"YulFunctionCall","src":"1600:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1625:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1596:3:181"},"nodeType":"YulFunctionCall","src":"1596:32:181"},"nodeType":"YulIf","src":"1593:52:181"},{"nodeType":"YulAssignment","src":"1654:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1683:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1664:18:181"},"nodeType":"YulFunctionCall","src":"1664:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1654:6:181"}]},{"nodeType":"YulAssignment","src":"1702:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1729:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1740:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1725:3:181"},"nodeType":"YulFunctionCall","src":"1725:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1712:12:181"},"nodeType":"YulFunctionCall","src":"1712:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1702:6:181"}]},{"nodeType":"YulAssignment","src":"1753:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1780:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1791:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1776:3:181"},"nodeType":"YulFunctionCall","src":"1776:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1763:12:181"},"nodeType":"YulFunctionCall","src":"1763:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1753:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1533:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1544:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1556:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1564:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1572:6:181","type":""}],"src":"1479:322:181"},{"body":{"nodeType":"YulBlock","src":"1980:167:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1997:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2008:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1990:6:181"},"nodeType":"YulFunctionCall","src":"1990:21:181"},"nodeType":"YulExpressionStatement","src":"1990:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2031:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2042:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2027:3:181"},"nodeType":"YulFunctionCall","src":"2027:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2047:2:181","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2020:6:181"},"nodeType":"YulFunctionCall","src":"2020:30:181"},"nodeType":"YulExpressionStatement","src":"2020:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2070:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2081:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2066:3:181"},"nodeType":"YulFunctionCall","src":"2066:18:181"},{"hexValue":"7769746864726177207265766572746564","kind":"string","nodeType":"YulLiteral","src":"2086:19:181","type":"","value":"withdraw reverted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2059:6:181"},"nodeType":"YulFunctionCall","src":"2059:47:181"},"nodeType":"YulExpressionStatement","src":"2059:47:181"},{"nodeType":"YulAssignment","src":"2115:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2127:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2138:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2123:3:181"},"nodeType":"YulFunctionCall","src":"2123:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2115:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_8959e0939ce9e74deaf43a35d4296b903ab372b79f43f57e422127c0622e04d5__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1957:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1971:4:181","type":""}],"src":"1806:341:181"},{"body":{"nodeType":"YulBlock","src":"2326:171:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2343:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2354:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2336:6:181"},"nodeType":"YulFunctionCall","src":"2336:21:181"},"nodeType":"YulExpressionStatement","src":"2336:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2377:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2388:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2373:3:181"},"nodeType":"YulFunctionCall","src":"2373:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2393:2:181","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2366:6:181"},"nodeType":"YulFunctionCall","src":"2366:30:181"},"nodeType":"YulExpressionStatement","src":"2366:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2416:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2427:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2412:3:181"},"nodeType":"YulFunctionCall","src":"2412:18:181"},{"hexValue":"6d696e74556e6261636b6564207265766572746564","kind":"string","nodeType":"YulLiteral","src":"2432:23:181","type":"","value":"mintUnbacked reverted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2405:6:181"},"nodeType":"YulFunctionCall","src":"2405:51:181"},"nodeType":"YulExpressionStatement","src":"2405:51:181"},{"nodeType":"YulAssignment","src":"2465:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2477:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2488:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2473:3:181"},"nodeType":"YulFunctionCall","src":"2473:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2465:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b8c940c5bc4068edee8aa2c147b5f47671be9440b61ef89f0ffefa2c238bd716__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2303:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2317:4:181","type":""}],"src":"2152:345:181"},{"body":{"nodeType":"YulBlock","src":"2676:171:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2693:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2704:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2686:6:181"},"nodeType":"YulFunctionCall","src":"2686:21:181"},"nodeType":"YulExpressionStatement","src":"2686:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2727:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2738:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2723:3:181"},"nodeType":"YulFunctionCall","src":"2723:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"2743:2:181","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2716:6:181"},"nodeType":"YulFunctionCall","src":"2716:30:181"},"nodeType":"YulExpressionStatement","src":"2716:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2766:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2777:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2762:3:181"},"nodeType":"YulFunctionCall","src":"2762:18:181"},{"hexValue":"6261636b556e6261636b6564207265766572746564","kind":"string","nodeType":"YulLiteral","src":"2782:23:181","type":"","value":"backUnbacked reverted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2755:6:181"},"nodeType":"YulFunctionCall","src":"2755:51:181"},"nodeType":"YulExpressionStatement","src":"2755:51:181"},{"nodeType":"YulAssignment","src":"2815:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2827:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2838:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2823:3:181"},"nodeType":"YulFunctionCall","src":"2823:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2815:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_e021d3ad20c537e7db3c05104b8ab0828de45d089ad17db88ee2ef82e19c715c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2653:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2667:4:181","type":""}],"src":"2502:345:181"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_uint256t_addresst_uint16(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n        let value := calldataload(add(headStart, 96))\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n        value3 := value\n    }\n    function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_stringliteral_8959e0939ce9e74deaf43a35d4296b903ab372b79f43f57e422127c0622e04d5__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"withdraw reverted\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_b8c940c5bc4068edee8aa2c147b5f47671be9440b61ef89f0ffefa2c238bd716__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"mintUnbacked reverted\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e021d3ad20c537e7db3c05104b8ab0828de45d089ad17db88ee2ef82e19c715c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"backUnbacked reverted\")\n        tail := add(headStart, 96)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061004c5760003560e01c806369328dec1461005157806369a933a514610076578063d33d5c861461008b578063d65dc7a1146100ac575b600080fd5b61006461005f3660046101d1565b6100bf565b60405190815260200160405180910390f35b61008961008436600461020d565b610114565b005b610089610099366004610263565b6000805460ff1916911515919091179055565b6100896100ba36600461028c565b610165565b6000805460ff161561010c5760405162461bcd60e51b81526020600482015260116024820152701dda5d1a191c985dc81c995d995c9d1959607a1b60448201526064015b60405180910390fd5b509092915050565b60005460ff161561015f5760405162461bcd60e51b81526020600482015260156024820152741b5a5b9d155b989858dad959081c995d995c9d1959605a1b6044820152606401610103565b50505050565b60005460ff16156101b05760405162461bcd60e51b8152602060048201526015602482015274189858dad55b989858dad959081c995d995c9d1959605a1b6044820152606401610103565b505050565b80356001600160a01b03811681146101cc57600080fd5b919050565b6000806000606084860312156101e657600080fd5b6101ef846101b5565b925060208401359150610204604085016101b5565b90509250925092565b6000806000806080858703121561022357600080fd5b61022c856101b5565b935060208501359250610241604086016101b5565b9150606085013561ffff8116811461025857600080fd5b939692955090935050565b60006020828403121561027557600080fd5b8135801515811461028557600080fd5b9392505050565b6000806000606084860312156102a157600080fd5b6102aa846101b5565b9560208501359550604090940135939250505056fea2646970667358221220b0f4d7e554a7d1d4a6a681991776526addf6592a05c7c21b39cc23b941b2e89364736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x69328DEC EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x69A933A5 EQ PUSH2 0x76 JUMPI DUP1 PUSH4 0xD33D5C86 EQ PUSH2 0x8B JUMPI DUP1 PUSH4 0xD65DC7A1 EQ PUSH2 0xAC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x1D1 JUMP JUMPDEST PUSH2 0xBF JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x89 PUSH2 0x84 CALLDATASIZE PUSH1 0x4 PUSH2 0x20D JUMP JUMPDEST PUSH2 0x114 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x89 PUSH2 0x99 CALLDATASIZE PUSH1 0x4 PUSH2 0x263 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x89 PUSH2 0xBA CALLDATASIZE PUSH1 0x4 PUSH2 0x28C JUMP JUMPDEST PUSH2 0x165 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x10C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x1DDA5D1A191C985DC81C995D995C9D1959 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x15F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x1B5A5B9D155B989858DAD959081C995D995C9D1959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x103 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH21 0x189858DAD55B989858DAD959081C995D995C9D1959 PUSH1 0x5A SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x103 JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1EF DUP5 PUSH2 0x1B5 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x204 PUSH1 0x40 DUP6 ADD PUSH2 0x1B5 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x223 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22C DUP6 PUSH2 0x1B5 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH2 0x241 PUSH1 0x40 DUP7 ADD PUSH2 0x1B5 JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x258 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2AA DUP5 PUSH2 0x1B5 JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB0 DELEGATECALL 0xD7 0xE5 SLOAD 0xA7 0xD1 0xD4 0xA6 0xA6 DUP2 SWAP10 OR PUSH23 0x526ADDF6592A05C7C21B39CC23B941B2E89364736F6C63 NUMBER STOP ADDMOD GT STOP CALLER ","sourceMap":"133:693:178:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;638:186;;;;;;:::i;:::-;;:::i;:::-;;;671:25:181;;;659:2;644:18;638:186:178;;;;;;;273:195;;;;;;:::i;:::-;;:::i;:::-;;192:77;;;;;;:::i;:::-;244:10;:20;;-1:-1:-1;;244:20:178;;;;;;;;;;192:77;472:162;;;;;;:::i;:::-;;:::i;638:186::-;744:7;768:10;;;;767:11;759:41;;;;-1:-1:-1;;;759:41:178;;2008:2:181;759:41:178;;;1990:21:181;2047:2;2027:18;;;2020:30;-1:-1:-1;;;2066:18:181;;;2059:47;2123:18;;759:41:178;;;;;;;;;-1:-1:-1;813:6:178;;638:186;-1:-1:-1;;638:186:178:o;273:195::-;427:10;;;;426:11;418:45;;;;-1:-1:-1;;;418:45:178;;2354:2:181;418:45:178;;;2336:21:181;2393:2;2373:18;;;2366:30;-1:-1:-1;;;2412:18:181;;;2405:51;2473:18;;418:45:178;2152:345:181;418:45:178;273:195;;;;:::o;472:162::-;593:10;;;;592:11;584:45;;;;-1:-1:-1;;;584:45:178;;2704:2:181;584:45:178;;;2686:21:181;2743:2;2723:18;;;2716:30;-1:-1:-1;;;2762:18:181;;;2755:51;2823:18;;584:45:178;2502:345:181;584:45:178;472:162;;;:::o;14:173:181:-;82:20;;-1:-1:-1;;;;;131:31:181;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:328::-;269:6;277;285;338:2;326:9;317:7;313:23;309:32;306:52;;;354:1;351;344:12;306:52;377:29;396:9;377:29;:::i;:::-;367:39;;453:2;442:9;438:18;425:32;415:42;;476:38;510:2;499:9;495:18;476:38;:::i;:::-;466:48;;192:328;;;;;:::o;707:489::-;792:6;800;808;816;869:3;857:9;848:7;844:23;840:33;837:53;;;886:1;883;876:12;837:53;909:29;928:9;909:29;:::i;:::-;899:39;;985:2;974:9;970:18;957:32;947:42;;1008:38;1042:2;1031:9;1027:18;1008:38;:::i;:::-;998:48;;1096:2;1085:9;1081:18;1068:32;1140:6;1133:5;1129:18;1122:5;1119:29;1109:57;;1162:1;1159;1152:12;1109:57;707:489;;;;-1:-1:-1;707:489:181;;-1:-1:-1;;707:489:181:o;1201:273::-;1257:6;1310:2;1298:9;1289:7;1285:23;1281:32;1278:52;;;1326:1;1323;1316:12;1278:52;1365:9;1352:23;1418:5;1411:13;1404:21;1397:5;1394:32;1384:60;;1440:1;1437;1430:12;1384:60;1463:5;1201:273;-1:-1:-1;;;1201:273:181:o;1479:322::-;1556:6;1564;1572;1625:2;1613:9;1604:7;1600:23;1596:32;1593:52;;;1641:1;1638;1631:12;1593:52;1664:29;1683:9;1664:29;:::i;:::-;1654:39;1740:2;1725:18;;1712:32;;-1:-1:-1;1791:2:181;1776:18;;;1763:32;;1479:322;-1:-1:-1;;;1479:322:181:o"},"gasEstimates":{"creation":{"codeDepositCost":"151400","executionCost":"196","totalCost":"151596"},"external":{"backUnbacked(address,uint256,uint256)":"2626","mintUnbacked(address,uint256,address,uint16)":"infinite","setRevertCall(bool)":"24504","withdraw(address,uint256,address)":"infinite"}},"methodIdentifiers":{"backUnbacked(address,uint256,uint256)":"d65dc7a1","mintUnbacked(address,uint256,address,uint16)":"69a933a5","setRevertCall(bool)":"d33d5c86","withdraw(address,uint256,address)":"69328dec"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"backUnbacked\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"name\":\"mintUnbacked\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_revert\",\"type\":\"bool\"}],\"name\":\"setRevertCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/TestAavePool.sol\":\"TestAavePool\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/connext/interfaces/IAavePool.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\ninterface IAavePool {\\n  /**\\n   * @dev Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   **/\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @dev Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   **/\\n  function backUnbacked(\\n    address asset,\\n    uint256 amount,\\n    uint256 fee\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   **/\\n  function withdraw(\\n    address asset,\\n    uint256 amount,\\n    address to\\n  ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xd196cc8605b8ecfa5991614f6c234f2bc5d1a605cdb53778e91a93822dfb752f\",\"license\":\"UNLICENSED\"},\"contracts/test/TestAavePool.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IAavePool} from \\\"../core/connext/interfaces/IAavePool.sol\\\";\\n\\ncontract TestAavePool is IAavePool {\\n  bool revertCall;\\n\\n  function setRevertCall(bool _revert) external {\\n    revertCall = _revert;\\n  }\\n\\n  function mintUnbacked(\\n    address, //asset,\\n    uint256, //amount,\\n    address, //onBehalfOf,\\n    uint16 //referralCode\\n  ) external view {\\n    require(!revertCall, \\\"mintUnbacked reverted\\\");\\n  }\\n\\n  function backUnbacked(\\n    address, //asset,\\n    uint256, // amount,\\n    uint256 // fee\\n  ) external view {\\n    require(!revertCall, \\\"backUnbacked reverted\\\");\\n  }\\n\\n  function withdraw(\\n    address, // asset,\\n    uint256 amount,\\n    address //to\\n  ) external view returns (uint256) {\\n    require(!revertCall, \\\"withdraw reverted\\\");\\n    return amount;\\n  }\\n}\\n\",\"keccak256\":\"0xd3f48037ed4c1c754cf0308eae94e955d90ef67f92e26fec2b29bcd541f25f0e\",\"license\":\"UNLICENSED\"}},\"version\":1}","storageLayout":{"storage":[{"astId":51579,"contract":"contracts/test/TestAavePool.sol:TestAavePool","label":"revertCall","offset":0,"slot":"0","type":"t_bool"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/test/TestAggregator.sol":{"TestAggregator":{"abi":[{"inputs":[{"internalType":"uint8","name":"_decimals","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"TestAggregator_Stopped","type":"error"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint80","name":"_roundId","type":"uint80"}],"name":"getRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"_answer","type":"int256"}],"name":"updateMockAnswer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint80","name":"_roundId","type":"uint80"},{"internalType":"int256","name":"_answer","type":"int256"},{"internalType":"uint256","name":"_updateAt","type":"uint256"},{"internalType":"uint80","name":"_answeredInRound","type":"uint80"}],"name":"updateMockData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_51685":{"entryPoint":null,"id":51685,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_uint8_fromMemory":{"entryPoint":541,"id":null,"parameterSlots":2,"returnSlots":1},"array_dataslot_string_storage":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"clean_up_bytearray_end_slots_string_storage":{"entryPoint":271,"id":null,"parameterSlots":3,"returnSlots":0},"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage":{"entryPoint":350,"id":null,"parameterSlots":2,"returnSlots":0},"extract_byte_array_length":{"entryPoint":213,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x41":{"entryPoint":191,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3010:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:181"},"nodeType":"YulFunctionCall","src":"66:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:181"},"nodeType":"YulFunctionCall","src":"56:31:181"},"nodeType":"YulExpressionStatement","src":"56:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:181"},"nodeType":"YulFunctionCall","src":"96:15:181"},"nodeType":"YulExpressionStatement","src":"96:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:181"},"nodeType":"YulFunctionCall","src":"120:15:181"},"nodeType":"YulExpressionStatement","src":"120:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:181"},{"body":{"nodeType":"YulBlock","src":"201:325:181","statements":[{"nodeType":"YulAssignment","src":"211:22:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"225:1:181","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"228:4:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"221:3:181"},"nodeType":"YulFunctionCall","src":"221:12:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"211:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"242:38:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"272:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"278:1:181","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"268:3:181"},"nodeType":"YulFunctionCall","src":"268:12:181"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"246:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"319:31:181","statements":[{"nodeType":"YulAssignment","src":"321:27:181","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"335:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"343:4:181","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"331:3:181"},"nodeType":"YulFunctionCall","src":"331:17:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"321:6:181"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"299:18:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"292:6:181"},"nodeType":"YulFunctionCall","src":"292:26:181"},"nodeType":"YulIf","src":"289:61:181"},{"body":{"nodeType":"YulBlock","src":"409:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"430:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"437:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"442:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"433:3:181"},"nodeType":"YulFunctionCall","src":"433:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"423:6:181"},"nodeType":"YulFunctionCall","src":"423:31:181"},"nodeType":"YulExpressionStatement","src":"423:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"474:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"477:4:181","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"467:6:181"},"nodeType":"YulFunctionCall","src":"467:15:181"},"nodeType":"YulExpressionStatement","src":"467:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"502:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"505:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"495:6:181"},"nodeType":"YulFunctionCall","src":"495:15:181"},"nodeType":"YulExpressionStatement","src":"495:15:181"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"365:18:181"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"388:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"396:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"385:2:181"},"nodeType":"YulFunctionCall","src":"385:14:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"362:2:181"},"nodeType":"YulFunctionCall","src":"362:38:181"},"nodeType":"YulIf","src":"359:161:181"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"181:4:181","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"190:6:181","type":""}],"src":"146:380:181"},{"body":{"nodeType":"YulBlock","src":"587:65:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"604:1:181","type":"","value":"0"},{"name":"ptr","nodeType":"YulIdentifier","src":"607:3:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"597:6:181"},"nodeType":"YulFunctionCall","src":"597:14:181"},"nodeType":"YulExpressionStatement","src":"597:14:181"},{"nodeType":"YulAssignment","src":"620:26:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"638:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"641:4:181","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"628:9:181"},"nodeType":"YulFunctionCall","src":"628:18:181"},"variableNames":[{"name":"data","nodeType":"YulIdentifier","src":"620:4:181"}]}]},"name":"array_dataslot_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nodeType":"YulTypedName","src":"570:3:181","type":""}],"returnVariables":[{"name":"data","nodeType":"YulTypedName","src":"578:4:181","type":""}],"src":"531:121:181"},{"body":{"nodeType":"YulBlock","src":"738:464:181","statements":[{"body":{"nodeType":"YulBlock","src":"771:425:181","statements":[{"nodeType":"YulVariableDeclaration","src":"785:11:181","value":{"kind":"number","nodeType":"YulLiteral","src":"795:1:181","type":"","value":"0"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"789:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"816:2:181"},{"name":"array","nodeType":"YulIdentifier","src":"820:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"809:6:181"},"nodeType":"YulFunctionCall","src":"809:17:181"},"nodeType":"YulExpressionStatement","src":"809:17:181"},{"nodeType":"YulVariableDeclaration","src":"839:31:181","value":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"861:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"865:4:181","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"851:9:181"},"nodeType":"YulFunctionCall","src":"851:19:181"},"variables":[{"name":"data","nodeType":"YulTypedName","src":"843:4:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"883:57:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"906:4:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"916:1:181","type":"","value":"5"},{"arguments":[{"name":"startIndex","nodeType":"YulIdentifier","src":"923:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"935:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"919:3:181"},"nodeType":"YulFunctionCall","src":"919:19:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"912:3:181"},"nodeType":"YulFunctionCall","src":"912:27:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"902:3:181"},"nodeType":"YulFunctionCall","src":"902:38:181"},"variables":[{"name":"deleteStart","nodeType":"YulTypedName","src":"887:11:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"977:23:181","statements":[{"nodeType":"YulAssignment","src":"979:19:181","value":{"name":"data","nodeType":"YulIdentifier","src":"994:4:181"},"variableNames":[{"name":"deleteStart","nodeType":"YulIdentifier","src":"979:11:181"}]}]},"condition":{"arguments":[{"name":"startIndex","nodeType":"YulIdentifier","src":"959:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"971:4:181","type":"","value":"0x20"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"956:2:181"},"nodeType":"YulFunctionCall","src":"956:20:181"},"nodeType":"YulIf","src":"953:47:181"},{"nodeType":"YulVariableDeclaration","src":"1013:41:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1027:4:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1037:1:181","type":"","value":"5"},{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"1044:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"1049:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1040:3:181"},"nodeType":"YulFunctionCall","src":"1040:12:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1033:3:181"},"nodeType":"YulFunctionCall","src":"1033:20:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1023:3:181"},"nodeType":"YulFunctionCall","src":"1023:31:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1017:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1067:24:181","value":{"name":"deleteStart","nodeType":"YulIdentifier","src":"1080:11:181"},"variables":[{"name":"start","nodeType":"YulTypedName","src":"1071:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1165:21:181","statements":[{"expression":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"1174:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1181:2:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"1167:6:181"},"nodeType":"YulFunctionCall","src":"1167:17:181"},"nodeType":"YulExpressionStatement","src":"1167:17:181"}]},"condition":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"1115:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"1122:2:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1112:2:181"},"nodeType":"YulFunctionCall","src":"1112:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1126:26:181","statements":[{"nodeType":"YulAssignment","src":"1128:22:181","value":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"1141:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"1148:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1137:3:181"},"nodeType":"YulFunctionCall","src":"1137:13:181"},"variableNames":[{"name":"start","nodeType":"YulIdentifier","src":"1128:5:181"}]}]},"pre":{"nodeType":"YulBlock","src":"1108:3:181","statements":[]},"src":"1104:82:181"}]},"condition":{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"754:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"759:2:181","type":"","value":"31"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"751:2:181"},"nodeType":"YulFunctionCall","src":"751:11:181"},"nodeType":"YulIf","src":"748:448:181"}]},"name":"clean_up_bytearray_end_slots_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nodeType":"YulTypedName","src":"710:5:181","type":""},{"name":"len","nodeType":"YulTypedName","src":"717:3:181","type":""},{"name":"startIndex","nodeType":"YulTypedName","src":"722:10:181","type":""}],"src":"657:545:181"},{"body":{"nodeType":"YulBlock","src":"1292:81:181","statements":[{"nodeType":"YulAssignment","src":"1302:65:181","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1317:4:181"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1335:1:181","type":"","value":"3"},{"name":"len","nodeType":"YulIdentifier","src":"1338:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1331:3:181"},"nodeType":"YulFunctionCall","src":"1331:11:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1348:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1344:3:181"},"nodeType":"YulFunctionCall","src":"1344:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1327:3:181"},"nodeType":"YulFunctionCall","src":"1327:24:181"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1323:3:181"},"nodeType":"YulFunctionCall","src":"1323:29:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1313:3:181"},"nodeType":"YulFunctionCall","src":"1313:40:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1359:1:181","type":"","value":"1"},{"name":"len","nodeType":"YulIdentifier","src":"1362:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1355:3:181"},"nodeType":"YulFunctionCall","src":"1355:11:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1310:2:181"},"nodeType":"YulFunctionCall","src":"1310:57:181"},"variableNames":[{"name":"used","nodeType":"YulIdentifier","src":"1302:4:181"}]}]},"name":"extract_used_part_and_set_length_of_short_byte_array","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"1269:4:181","type":""},{"name":"len","nodeType":"YulTypedName","src":"1275:3:181","type":""}],"returnVariables":[{"name":"used","nodeType":"YulTypedName","src":"1283:4:181","type":""}],"src":"1207:166:181"},{"body":{"nodeType":"YulBlock","src":"1474:1256:181","statements":[{"nodeType":"YulVariableDeclaration","src":"1484:24:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"1504:3:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1498:5:181"},"nodeType":"YulFunctionCall","src":"1498:10:181"},"variables":[{"name":"newLen","nodeType":"YulTypedName","src":"1488:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1551:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1553:16:181"},"nodeType":"YulFunctionCall","src":"1553:18:181"},"nodeType":"YulExpressionStatement","src":"1553:18:181"}]},"condition":{"arguments":[{"name":"newLen","nodeType":"YulIdentifier","src":"1523:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1539:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"1543:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1535:3:181"},"nodeType":"YulFunctionCall","src":"1535:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"1547:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1531:3:181"},"nodeType":"YulFunctionCall","src":"1531:18:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1520:2:181"},"nodeType":"YulFunctionCall","src":"1520:30:181"},"nodeType":"YulIf","src":"1517:56:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"1626:4:181"},{"arguments":[{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"1664:4:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"1658:5:181"},"nodeType":"YulFunctionCall","src":"1658:11:181"}],"functionName":{"name":"extract_byte_array_length","nodeType":"YulIdentifier","src":"1632:25:181"},"nodeType":"YulFunctionCall","src":"1632:38:181"},{"name":"newLen","nodeType":"YulIdentifier","src":"1672:6:181"}],"functionName":{"name":"clean_up_bytearray_end_slots_string_storage","nodeType":"YulIdentifier","src":"1582:43:181"},"nodeType":"YulFunctionCall","src":"1582:97:181"},"nodeType":"YulExpressionStatement","src":"1582:97:181"},{"nodeType":"YulVariableDeclaration","src":"1688:18:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1705:1:181","type":"","value":"0"},"variables":[{"name":"srcOffset","nodeType":"YulTypedName","src":"1692:9:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1715:23:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1734:4:181","type":"","value":"0x20"},"variables":[{"name":"srcOffset_1","nodeType":"YulTypedName","src":"1719:11:181","type":""}]},{"nodeType":"YulAssignment","src":"1747:24:181","value":{"name":"srcOffset_1","nodeType":"YulIdentifier","src":"1760:11:181"},"variableNames":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"1747:9:181"}]},{"cases":[{"body":{"nodeType":"YulBlock","src":"1817:656:181","statements":[{"nodeType":"YulVariableDeclaration","src":"1831:35:181","value":{"arguments":[{"name":"newLen","nodeType":"YulIdentifier","src":"1850:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1862:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1858:3:181"},"nodeType":"YulFunctionCall","src":"1858:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1846:3:181"},"nodeType":"YulFunctionCall","src":"1846:20:181"},"variables":[{"name":"loopEnd","nodeType":"YulTypedName","src":"1835:7:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1879:49:181","value":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"1923:4:181"}],"functionName":{"name":"array_dataslot_string_storage","nodeType":"YulIdentifier","src":"1893:29:181"},"nodeType":"YulFunctionCall","src":"1893:35:181"},"variables":[{"name":"dstPtr","nodeType":"YulTypedName","src":"1883:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1941:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1950:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"1945:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2028:172:181","statements":[{"expression":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"2053:6:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2071:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"2076:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2067:3:181"},"nodeType":"YulFunctionCall","src":"2067:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2061:5:181"},"nodeType":"YulFunctionCall","src":"2061:26:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"2046:6:181"},"nodeType":"YulFunctionCall","src":"2046:42:181"},"nodeType":"YulExpressionStatement","src":"2046:42:181"},{"nodeType":"YulAssignment","src":"2105:24:181","value":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"2119:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2127:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2115:3:181"},"nodeType":"YulFunctionCall","src":"2115:14:181"},"variableNames":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"2105:6:181"}]},{"nodeType":"YulAssignment","src":"2146:40:181","value":{"arguments":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"2163:9:181"},{"name":"srcOffset_1","nodeType":"YulIdentifier","src":"2174:11:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2159:3:181"},"nodeType":"YulFunctionCall","src":"2159:27:181"},"variableNames":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"2146:9:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1975:1:181"},{"name":"loopEnd","nodeType":"YulIdentifier","src":"1978:7:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1972:2:181"},"nodeType":"YulFunctionCall","src":"1972:14:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1987:28:181","statements":[{"nodeType":"YulAssignment","src":"1989:24:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1998:1:181"},{"name":"srcOffset_1","nodeType":"YulIdentifier","src":"2001:11:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1994:3:181"},"nodeType":"YulFunctionCall","src":"1994:19:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"1989:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"1968:3:181","statements":[]},"src":"1964:236:181"},{"body":{"nodeType":"YulBlock","src":"2248:166:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2266:43:181","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2293:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"2298:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2289:3:181"},"nodeType":"YulFunctionCall","src":"2289:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2283:5:181"},"nodeType":"YulFunctionCall","src":"2283:26:181"},"variables":[{"name":"lastValue","nodeType":"YulTypedName","src":"2270:9:181","type":""}]},{"expression":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"2333:6:181"},{"arguments":[{"name":"lastValue","nodeType":"YulIdentifier","src":"2345:9:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2372:1:181","type":"","value":"3"},{"name":"newLen","nodeType":"YulIdentifier","src":"2375:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2368:3:181"},"nodeType":"YulFunctionCall","src":"2368:14:181"},{"kind":"number","nodeType":"YulLiteral","src":"2384:3:181","type":"","value":"248"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2364:3:181"},"nodeType":"YulFunctionCall","src":"2364:24:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2394:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2390:3:181"},"nodeType":"YulFunctionCall","src":"2390:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2360:3:181"},"nodeType":"YulFunctionCall","src":"2360:37:181"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2356:3:181"},"nodeType":"YulFunctionCall","src":"2356:42:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2341:3:181"},"nodeType":"YulFunctionCall","src":"2341:58:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"2326:6:181"},"nodeType":"YulFunctionCall","src":"2326:74:181"},"nodeType":"YulExpressionStatement","src":"2326:74:181"}]},"condition":{"arguments":[{"name":"loopEnd","nodeType":"YulIdentifier","src":"2219:7:181"},{"name":"newLen","nodeType":"YulIdentifier","src":"2228:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2216:2:181"},"nodeType":"YulFunctionCall","src":"2216:19:181"},"nodeType":"YulIf","src":"2213:201:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"2434:4:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2448:1:181","type":"","value":"1"},{"name":"newLen","nodeType":"YulIdentifier","src":"2451:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2444:3:181"},"nodeType":"YulFunctionCall","src":"2444:14:181"},{"kind":"number","nodeType":"YulLiteral","src":"2460:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2440:3:181"},"nodeType":"YulFunctionCall","src":"2440:22:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"2427:6:181"},"nodeType":"YulFunctionCall","src":"2427:36:181"},"nodeType":"YulExpressionStatement","src":"2427:36:181"}]},"nodeType":"YulCase","src":"1810:663:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1815:1:181","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"2490:234:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2504:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2517:1:181","type":"","value":"0"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2508:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2553:67:181","statements":[{"nodeType":"YulAssignment","src":"2571:35:181","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2590:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"2595:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2586:3:181"},"nodeType":"YulFunctionCall","src":"2586:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2580:5:181"},"nodeType":"YulFunctionCall","src":"2580:26:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2571:5:181"}]}]},"condition":{"name":"newLen","nodeType":"YulIdentifier","src":"2534:6:181"},"nodeType":"YulIf","src":"2531:89:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"2640:4:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2699:5:181"},{"name":"newLen","nodeType":"YulIdentifier","src":"2706:6:181"}],"functionName":{"name":"extract_used_part_and_set_length_of_short_byte_array","nodeType":"YulIdentifier","src":"2646:52:181"},"nodeType":"YulFunctionCall","src":"2646:67:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"2633:6:181"},"nodeType":"YulFunctionCall","src":"2633:81:181"},"nodeType":"YulExpressionStatement","src":"2633:81:181"}]},"nodeType":"YulCase","src":"2482:242:181","value":"default"}],"expression":{"arguments":[{"name":"newLen","nodeType":"YulIdentifier","src":"1790:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1798:2:181","type":"","value":"31"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1787:2:181"},"nodeType":"YulFunctionCall","src":"1787:14:181"},"nodeType":"YulSwitch","src":"1780:944:181"}]},"name":"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nodeType":"YulTypedName","src":"1459:4:181","type":""},{"name":"src","nodeType":"YulTypedName","src":"1465:3:181","type":""}],"src":"1378:1352:181"},{"body":{"nodeType":"YulBlock","src":"2814:194:181","statements":[{"body":{"nodeType":"YulBlock","src":"2860:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2869:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2872:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2862:6:181"},"nodeType":"YulFunctionCall","src":"2862:12:181"},"nodeType":"YulExpressionStatement","src":"2862:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2835:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2844:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2831:3:181"},"nodeType":"YulFunctionCall","src":"2831:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2856:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2827:3:181"},"nodeType":"YulFunctionCall","src":"2827:32:181"},"nodeType":"YulIf","src":"2824:52:181"},{"nodeType":"YulVariableDeclaration","src":"2885:29:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2904:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2898:5:181"},"nodeType":"YulFunctionCall","src":"2898:16:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2889:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2962:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2971:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2974:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2964:6:181"},"nodeType":"YulFunctionCall","src":"2964:12:181"},"nodeType":"YulExpressionStatement","src":"2964:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2936:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2947:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"2954:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2943:3:181"},"nodeType":"YulFunctionCall","src":"2943:16:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2933:2:181"},"nodeType":"YulFunctionCall","src":"2933:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2926:6:181"},"nodeType":"YulFunctionCall","src":"2926:35:181"},"nodeType":"YulIf","src":"2923:55:181"},{"nodeType":"YulAssignment","src":"2987:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"2997:5:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2987:6:181"}]}]},"name":"abi_decode_tuple_t_uint8_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2780:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2791:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2803:6:181","type":""}],"src":"2735:273:181"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function array_dataslot_string_storage(ptr) -> data\n    {\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n    }\n    function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n    {\n        if gt(len, 31)\n        {\n            let _1 := 0\n            mstore(_1, array)\n            let data := keccak256(_1, 0x20)\n            let deleteStart := add(data, shr(5, add(startIndex, 31)))\n            if lt(startIndex, 0x20) { deleteStart := data }\n            let _2 := add(data, shr(5, add(len, 31)))\n            let start := deleteStart\n            for { } lt(start, _2) { start := add(start, 1) }\n            { sstore(start, _1) }\n        }\n    }\n    function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n    {\n        used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n    }\n    function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n    {\n        let newLen := mload(src)\n        if gt(newLen, sub(shl(64, 1), 1)) { panic_error_0x41() }\n        clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n        let srcOffset := 0\n        let srcOffset_1 := 0x20\n        srcOffset := srcOffset_1\n        switch gt(newLen, 31)\n        case 1 {\n            let loopEnd := and(newLen, not(31))\n            let dstPtr := array_dataslot_string_storage(slot)\n            let i := 0\n            for { } lt(i, loopEnd) { i := add(i, srcOffset_1) }\n            {\n                sstore(dstPtr, mload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, srcOffset_1)\n            }\n            if lt(loopEnd, newLen)\n            {\n                let lastValue := mload(add(src, srcOffset))\n                sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n            }\n            sstore(slot, add(shl(1, newLen), 1))\n        }\n        default {\n            let value := 0\n            if newLen\n            {\n                value := mload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n        }\n    }\n    function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"6000805460ff1916601217905560c0604052601960809081527f436861696e6c696e6b20546573742041676772656761746f720000000000000060a052600190610049908261015e565b5060016002819055600380546001600160501b03199081168317909155600482905560068054909116909117905534801561008357600080fd5b5060405161081c38038061081c8339810160408190526100a29161021d565b6000805460ff191660ff9290921691909117905542600555610247565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806100e957607f821691505b60208210810361010957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561015957600081815260208120601f850160051c810160208610156101365750805b601f850160051c820191505b8181101561015557828155600101610142565b5050505b505050565b81516001600160401b03811115610177576101776100bf565b61018b8161018584546100d5565b8461010f565b602080601f8311600181146101c057600084156101a85750858301515b600019600386901b1c1916600185901b178555610155565b600085815260208120601f198616915b828110156101ef578886015182559484019460019091019084016101d0565b508582101561020d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561022f57600080fd5b815160ff8116811461024057600080fd5b9392505050565b6105c6806102566000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063640529801161005b57806364052980146100f55780637284e416146101405780639a6fc8f514610155578063feaf968c1461019c57600080fd5b806307da68f51461008d578063313ce567146100a757806354fd4d50146100cb578063575ac1e6146100e2575b600080fd5b6100a56006805460ff60501b1916600160501b179055565b005b6000546100b49060ff1681565b60405160ff90911681526020015b60405180910390f35b6100d460025481565b6040519081526020016100c2565b6100a56100f0366004610330565b600455565b6100a5610103366004610365565b600380546001600160501b0395861669ffffffffffffffffffff199182161790915560049390935560059190915560068054919093169116179055565b6101486101a4565b6040516100c291906103ab565b6101686101633660046103f9565b610232565b604080516001600160501b03968716815260208101959095528401929092526060830152909116608082015260a0016100c2565b6101686102ab565b600180546101b19061041b565b80601f01602080910402602001604051908101604052809291908181526020018280546101dd9061041b565b801561022a5780601f106101ff5761010080835404028352916020019161022a565b820191906000526020600020905b81548152906001019060200180831161020d57829003601f168201915b505050505081565b60008060008060006006600a9054906101000a900460ff1615610268576040516330a0505160e01b815260040160405180910390fd5b600054869061027b9060ff16600a610551565b6004546102889190610560565b60055460065492999198506000975095506001600160501b039091169350915050565b60008060008060006006600a9054906101000a900460ff16156102e1576040516330a0505160e01b815260040160405180910390fd5b6003546000546001600160501b03909116906103019060ff16600a610551565b60045461030e9190610560565b60055460065492989197506000965094506001600160501b0390911692509050565b60006020828403121561034257600080fd5b5035919050565b80356001600160501b038116811461036057600080fd5b919050565b6000806000806080858703121561037b57600080fd5b61038485610349565b935060208501359250604085013591506103a060608601610349565b905092959194509250565b600060208083528351808285015260005b818110156103d8578581018301518582016040015282016103bc565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561040b57600080fd5b61041482610349565b9392505050565b600181811c9082168061042f57607f821691505b60208210810361044f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156104a657816000190482111561048c5761048c610455565b8085161561049957918102915b93841c9390800290610470565b509250929050565b6000826104bd5750600161054b565b816104ca5750600061054b565b81600181146104e057600281146104ea57610506565b600191505061054b565b60ff8411156104fb576104fb610455565b50506001821b61054b565b5060208310610133831016604e8410600b8410161715610529575081810a61054b565b610533838361046b565b806000190482111561054757610547610455565b0290505b92915050565b600061041460ff8416836104ae565b80820260008212600160ff1b8414161561057c5761057c610455565b818105831482151761054b5761054b61045556fea26469706673582212201b5d9cc0079a8961c143054d716d795ad3cd23e342bd37d735fa9e290736bcb564736f6c63430008110033","opcodes":"PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE PUSH1 0xC0 PUSH1 0x40 MSTORE PUSH1 0x19 PUSH1 0x80 SWAP1 DUP2 MSTORE PUSH32 0x436861696E6C696E6B20546573742041676772656761746F7200000000000000 PUSH1 0xA0 MSTORE PUSH1 0x1 SWAP1 PUSH2 0x49 SWAP1 DUP3 PUSH2 0x15E JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x2 DUP2 SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB NOT SWAP1 DUP2 AND DUP4 OR SWAP1 SWAP2 SSTORE PUSH1 0x4 DUP3 SWAP1 SSTORE PUSH1 0x6 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SWAP2 OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x81C CODESIZE SUB DUP1 PUSH2 0x81C DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0xA2 SWAP2 PUSH2 0x21D JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE TIMESTAMP PUSH1 0x5 SSTORE PUSH2 0x247 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xE9 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x109 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x159 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH2 0x136 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x155 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x142 JUMP JUMPDEST POP POP POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x177 JUMPI PUSH2 0x177 PUSH2 0xBF JUMP JUMPDEST PUSH2 0x18B DUP2 PUSH2 0x185 DUP5 SLOAD PUSH2 0xD5 JUMP JUMPDEST DUP5 PUSH2 0x10F JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x1C0 JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x1A8 JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH2 0x155 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x1EF JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH2 0x1D0 JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH2 0x20D JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x22F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x5C6 DUP1 PUSH2 0x256 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x64052980 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x64052980 EQ PUSH2 0xF5 JUMPI DUP1 PUSH4 0x7284E416 EQ PUSH2 0x140 JUMPI DUP1 PUSH4 0x9A6FC8F5 EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0xFEAF968C EQ PUSH2 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7DA68F5 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0xA7 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0xCB JUMPI DUP1 PUSH4 0x575AC1E6 EQ PUSH2 0xE2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA5 PUSH1 0x6 DUP1 SLOAD PUSH1 0xFF PUSH1 0x50 SHL NOT AND PUSH1 0x1 PUSH1 0x50 SHL OR SWAP1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0xB4 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xD4 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC2 JUMP JUMPDEST PUSH2 0xA5 PUSH2 0xF0 CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x4 SSTORE JUMP JUMPDEST PUSH2 0xA5 PUSH2 0x103 CALLDATASIZE PUSH1 0x4 PUSH2 0x365 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB SWAP6 DUP7 AND PUSH10 0xFFFFFFFFFFFFFFFFFFFF NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x4 SWAP4 SWAP1 SWAP4 SSTORE PUSH1 0x5 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x6 DUP1 SLOAD SWAP2 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x148 PUSH2 0x1A4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xC2 SWAP2 SWAP1 PUSH2 0x3AB JUMP JUMPDEST PUSH2 0x168 PUSH2 0x163 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F9 JUMP JUMPDEST PUSH2 0x232 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0xC2 JUMP JUMPDEST PUSH2 0x168 PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x1B1 SWAP1 PUSH2 0x41B JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1DD SWAP1 PUSH2 0x41B JUMP JUMPDEST DUP1 ISZERO PUSH2 0x22A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1FF JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x22A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x20D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x6 PUSH1 0xA SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x268 JUMPI PUSH1 0x40 MLOAD PUSH4 0x30A05051 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD DUP7 SWAP1 PUSH2 0x27B SWAP1 PUSH1 0xFF AND PUSH1 0xA PUSH2 0x551 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x288 SWAP2 SWAP1 PUSH2 0x560 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD SWAP3 SWAP10 SWAP2 SWAP9 POP PUSH1 0x0 SWAP8 POP SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB SWAP1 SWAP2 AND SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x6 PUSH1 0xA SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x2E1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x30A05051 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH2 0x301 SWAP1 PUSH1 0xFF AND PUSH1 0xA PUSH2 0x551 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x30E SWAP2 SWAP1 PUSH2 0x560 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD SWAP3 SWAP9 SWAP2 SWAP8 POP PUSH1 0x0 SWAP7 POP SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB SWAP1 SWAP2 AND SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x342 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x37B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x384 DUP6 PUSH2 0x349 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH2 0x3A0 PUSH1 0x60 DUP7 ADD PUSH2 0x349 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3D8 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x3BC JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x40B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x414 DUP3 PUSH2 0x349 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x42F JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x44F JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x4A6 JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x48C JUMPI PUSH2 0x48C PUSH2 0x455 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x499 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x470 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4BD JUMPI POP PUSH1 0x1 PUSH2 0x54B JUMP JUMPDEST DUP2 PUSH2 0x4CA JUMPI POP PUSH1 0x0 PUSH2 0x54B JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x4E0 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x4EA JUMPI PUSH2 0x506 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x54B JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x4FB JUMPI PUSH2 0x4FB PUSH2 0x455 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x54B JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x529 JUMPI POP DUP2 DUP2 EXP PUSH2 0x54B JUMP JUMPDEST PUSH2 0x533 DUP4 DUP4 PUSH2 0x46B JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x547 JUMPI PUSH2 0x547 PUSH2 0x455 JUMP JUMPDEST MUL SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x414 PUSH1 0xFF DUP5 AND DUP4 PUSH2 0x4AE JUMP JUMPDEST DUP1 DUP3 MUL PUSH1 0x0 DUP3 SLT PUSH1 0x1 PUSH1 0xFF SHL DUP5 EQ AND ISZERO PUSH2 0x57C JUMPI PUSH2 0x57C PUSH2 0x455 JUMP JUMPDEST DUP2 DUP2 SDIV DUP4 EQ DUP3 ISZERO OR PUSH2 0x54B JUMPI PUSH2 0x54B PUSH2 0x455 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHL 0x5D SWAP13 0xC0 SMOD SWAP11 DUP10 PUSH2 0xC143 SDIV 0x4D PUSH18 0x6D795AD3CD23E342BD37D735FA9E290736BC 0xB5 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"145:26:179:-:0;;;-1:-1:-1;;145:26:179;169:2;145:26;;;176:55;117:1827;176:55;;117:1827;176:55;;;;;;145:26;;176:55;;145:26;176:55;:::i;:::-;-1:-1:-1;261:1:179;236:26;;;;267:23;;;-1:-1:-1;;;;;;267:23:179;;;;;;;;295:22;;;;348:31;;;;;;;;;;;476:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;511:8;:20;;-1:-1:-1;;511:20:179;;;;;;;;;;;;553:15;537:13;:31;117:1827;;14:127:181;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:380;225:1;221:12;;;;268;;;289:61;;343:4;335:6;331:17;321:27;;289:61;396:2;388:6;385:14;365:18;362:38;359:161;;442:10;437:3;433:20;430:1;423:31;477:4;474:1;467:15;505:4;502:1;495:15;359:161;;146:380;;;:::o;657:545::-;759:2;754:3;751:11;748:448;;;795:1;820:5;816:2;809:17;865:4;861:2;851:19;935:2;923:10;919:19;916:1;912:27;906:4;902:38;971:4;959:10;956:20;953:47;;;-1:-1:-1;994:4:181;953:47;1049:2;1044:3;1040:12;1037:1;1033:20;1027:4;1023:31;1013:41;;1104:82;1122:2;1115:5;1112:13;1104:82;;;1167:17;;;1148:1;1137:13;1104:82;;;1108:3;;;748:448;657:545;;;:::o;1378:1352::-;1498:10;;-1:-1:-1;;;;;1520:30:181;;1517:56;;;1553:18;;:::i;:::-;1582:97;1672:6;1632:38;1664:4;1658:11;1632:38;:::i;:::-;1626:4;1582:97;:::i;:::-;1734:4;;1798:2;1787:14;;1815:1;1810:663;;;;2517:1;2534:6;2531:89;;;-1:-1:-1;2586:19:181;;;2580:26;2531:89;-1:-1:-1;;1335:1:181;1331:11;;;1327:24;1323:29;1313:40;1359:1;1355:11;;;1310:57;2633:81;;1780:944;;1810:663;604:1;597:14;;;641:4;628:18;;-1:-1:-1;;1846:20:181;;;1964:236;1978:7;1975:1;1972:14;1964:236;;;2067:19;;;2061:26;2046:42;;2159:27;;;;2127:1;2115:14;;;;1994:19;;1964:236;;;1968:3;2228:6;2219:7;2216:19;2213:201;;;2289:19;;;2283:26;-1:-1:-1;;2372:1:181;2368:14;;;2384:3;2364:24;2360:37;2356:42;2341:58;2326:74;;2213:201;-1:-1:-1;;;;;2460:1:181;2444:14;;;2440:22;2427:36;;-1:-1:-1;1378:1352:181:o;2735:273::-;2803:6;2856:2;2844:9;2835:7;2831:23;2827:32;2824:52;;;2872:1;2869;2862:12;2824:52;2904:9;2898:16;2954:4;2947:5;2943:16;2936:5;2933:27;2923:55;;2974:1;2971;2964:12;2923:55;2997:5;2735:273;-1:-1:-1;;;2735:273:181:o;:::-;117:1827:179;;;;;;"},"deployedBytecode":{"functionDebugData":{"@decimals_51649":{"entryPoint":null,"id":51649,"parameterSlots":0,"returnSlots":0},"@description_51652":{"entryPoint":420,"id":51652,"parameterSlots":0,"returnSlots":0},"@getRoundData_51721":{"entryPoint":562,"id":51721,"parameterSlots":1,"returnSlots":5},"@latestRoundData_51755":{"entryPoint":683,"id":51755,"parameterSlots":0,"returnSlots":5},"@stop_51801":{"entryPoint":null,"id":51801,"parameterSlots":0,"returnSlots":0},"@updateMockAnswer_51765":{"entryPoint":null,"id":51765,"parameterSlots":1,"returnSlots":0},"@updateMockData_51793":{"entryPoint":null,"id":51793,"parameterSlots":4,"returnSlots":0},"@version_51655":{"entryPoint":null,"id":51655,"parameterSlots":0,"returnSlots":0},"abi_decode_tuple_t_int256":{"entryPoint":816,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint80":{"entryPoint":1017,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint80t_int256t_uint256t_uint80":{"entryPoint":869,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_uint80":{"entryPoint":841,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":939,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint80_t_int256_t_uint256_t_uint256_t_uint80__to_t_uint80_t_int256_t_uint256_t_uint256_t_uint80__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":1131,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint8":{"entryPoint":1361,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":1198,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_int256":{"entryPoint":1376,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":1051,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":1109,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4548:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"111:87:181","statements":[{"nodeType":"YulAssignment","src":"121:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"133:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"144:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"129:3:181"},"nodeType":"YulFunctionCall","src":"129:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"121:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"163:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"178:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"186:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"174:3:181"},"nodeType":"YulFunctionCall","src":"174:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"156:6:181"},"nodeType":"YulFunctionCall","src":"156:36:181"},"nodeType":"YulExpressionStatement","src":"156:36:181"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"80:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"91:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"102:4:181","type":""}],"src":"14:184:181"},{"body":{"nodeType":"YulBlock","src":"304:76:181","statements":[{"nodeType":"YulAssignment","src":"314:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"326:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"337:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"322:3:181"},"nodeType":"YulFunctionCall","src":"322:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"314:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"356:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"367:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"349:6:181"},"nodeType":"YulFunctionCall","src":"349:25:181"},"nodeType":"YulExpressionStatement","src":"349:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"273:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"284:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"295:4:181","type":""}],"src":"203:177:181"},{"body":{"nodeType":"YulBlock","src":"454:110:181","statements":[{"body":{"nodeType":"YulBlock","src":"500:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"509:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"512:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"502:6:181"},"nodeType":"YulFunctionCall","src":"502:12:181"},"nodeType":"YulExpressionStatement","src":"502:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"475:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"484:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"471:3:181"},"nodeType":"YulFunctionCall","src":"471:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"496:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"467:3:181"},"nodeType":"YulFunctionCall","src":"467:32:181"},"nodeType":"YulIf","src":"464:52:181"},{"nodeType":"YulAssignment","src":"525:33:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"548:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"535:12:181"},"nodeType":"YulFunctionCall","src":"535:23:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"525:6:181"}]}]},"name":"abi_decode_tuple_t_int256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"420:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"431:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"443:6:181","type":""}],"src":"385:179:181"},{"body":{"nodeType":"YulBlock","src":"617:127:181","statements":[{"nodeType":"YulAssignment","src":"627:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"649:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"636:12:181"},"nodeType":"YulFunctionCall","src":"636:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"627:5:181"}]},{"body":{"nodeType":"YulBlock","src":"722:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"731:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"734:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"724:6:181"},"nodeType":"YulFunctionCall","src":"724:12:181"},"nodeType":"YulExpressionStatement","src":"724:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"678:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"689:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"696:22:181","type":"","value":"0xffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"685:3:181"},"nodeType":"YulFunctionCall","src":"685:34:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"675:2:181"},"nodeType":"YulFunctionCall","src":"675:45:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"668:6:181"},"nodeType":"YulFunctionCall","src":"668:53:181"},"nodeType":"YulIf","src":"665:73:181"}]},"name":"abi_decode_uint80","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"596:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"607:5:181","type":""}],"src":"569:175:181"},{"body":{"nodeType":"YulBlock","src":"867:274:181","statements":[{"body":{"nodeType":"YulBlock","src":"914:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"923:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"926:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"916:6:181"},"nodeType":"YulFunctionCall","src":"916:12:181"},"nodeType":"YulExpressionStatement","src":"916:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"888:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"897:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"884:3:181"},"nodeType":"YulFunctionCall","src":"884:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"909:3:181","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"880:3:181"},"nodeType":"YulFunctionCall","src":"880:33:181"},"nodeType":"YulIf","src":"877:53:181"},{"nodeType":"YulAssignment","src":"939:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"967:9:181"}],"functionName":{"name":"abi_decode_uint80","nodeType":"YulIdentifier","src":"949:17:181"},"nodeType":"YulFunctionCall","src":"949:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"939:6:181"}]},{"nodeType":"YulAssignment","src":"986:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1013:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1024:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1009:3:181"},"nodeType":"YulFunctionCall","src":"1009:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"996:12:181"},"nodeType":"YulFunctionCall","src":"996:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"986:6:181"}]},{"nodeType":"YulAssignment","src":"1037:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1064:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1075:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1060:3:181"},"nodeType":"YulFunctionCall","src":"1060:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1047:12:181"},"nodeType":"YulFunctionCall","src":"1047:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1037:6:181"}]},{"nodeType":"YulAssignment","src":"1088:47:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1120:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1131:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1116:3:181"},"nodeType":"YulFunctionCall","src":"1116:18:181"}],"functionName":{"name":"abi_decode_uint80","nodeType":"YulIdentifier","src":"1098:17:181"},"nodeType":"YulFunctionCall","src":"1098:37:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1088:6:181"}]}]},"name":"abi_decode_tuple_t_uint80t_int256t_uint256t_uint80","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"809:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"820:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"832:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"840:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"848:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"856:6:181","type":""}],"src":"749:392:181"},{"body":{"nodeType":"YulBlock","src":"1267:427:181","statements":[{"nodeType":"YulVariableDeclaration","src":"1277:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1287:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1281:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1305:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1316:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1298:6:181"},"nodeType":"YulFunctionCall","src":"1298:21:181"},"nodeType":"YulExpressionStatement","src":"1298:21:181"},{"nodeType":"YulVariableDeclaration","src":"1328:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1348:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1342:5:181"},"nodeType":"YulFunctionCall","src":"1342:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1332:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1375:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1386:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1371:3:181"},"nodeType":"YulFunctionCall","src":"1371:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"1391:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1364:6:181"},"nodeType":"YulFunctionCall","src":"1364:34:181"},"nodeType":"YulExpressionStatement","src":"1364:34:181"},{"nodeType":"YulVariableDeclaration","src":"1407:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"1416:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"1411:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1476:90:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1505:9:181"},{"name":"i","nodeType":"YulIdentifier","src":"1516:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1501:3:181"},"nodeType":"YulFunctionCall","src":"1501:17:181"},{"kind":"number","nodeType":"YulLiteral","src":"1520:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1497:3:181"},"nodeType":"YulFunctionCall","src":"1497:26:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1539:6:181"},{"name":"i","nodeType":"YulIdentifier","src":"1547:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1535:3:181"},"nodeType":"YulFunctionCall","src":"1535:14:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1551:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1531:3:181"},"nodeType":"YulFunctionCall","src":"1531:23:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1525:5:181"},"nodeType":"YulFunctionCall","src":"1525:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1490:6:181"},"nodeType":"YulFunctionCall","src":"1490:66:181"},"nodeType":"YulExpressionStatement","src":"1490:66:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1437:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"1440:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1434:2:181"},"nodeType":"YulFunctionCall","src":"1434:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1448:19:181","statements":[{"nodeType":"YulAssignment","src":"1450:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1459:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1462:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1455:3:181"},"nodeType":"YulFunctionCall","src":"1455:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"1450:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"1430:3:181","statements":[]},"src":"1426:140:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1590:9:181"},{"name":"length","nodeType":"YulIdentifier","src":"1601:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1586:3:181"},"nodeType":"YulFunctionCall","src":"1586:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"1610:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1582:3:181"},"nodeType":"YulFunctionCall","src":"1582:31:181"},{"kind":"number","nodeType":"YulLiteral","src":"1615:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1575:6:181"},"nodeType":"YulFunctionCall","src":"1575:42:181"},"nodeType":"YulExpressionStatement","src":"1575:42:181"},{"nodeType":"YulAssignment","src":"1626:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1642:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1661:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1669:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1657:3:181"},"nodeType":"YulFunctionCall","src":"1657:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1678:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1674:3:181"},"nodeType":"YulFunctionCall","src":"1674:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1653:3:181"},"nodeType":"YulFunctionCall","src":"1653:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1638:3:181"},"nodeType":"YulFunctionCall","src":"1638:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"1685:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1634:3:181"},"nodeType":"YulFunctionCall","src":"1634:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1626:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1236:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1247:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1258:4:181","type":""}],"src":"1146:548:181"},{"body":{"nodeType":"YulBlock","src":"1768:115:181","statements":[{"body":{"nodeType":"YulBlock","src":"1814:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1823:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1826:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1816:6:181"},"nodeType":"YulFunctionCall","src":"1816:12:181"},"nodeType":"YulExpressionStatement","src":"1816:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1789:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1798:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1785:3:181"},"nodeType":"YulFunctionCall","src":"1785:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1810:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1781:3:181"},"nodeType":"YulFunctionCall","src":"1781:32:181"},"nodeType":"YulIf","src":"1778:52:181"},{"nodeType":"YulAssignment","src":"1839:38:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1867:9:181"}],"functionName":{"name":"abi_decode_uint80","nodeType":"YulIdentifier","src":"1849:17:181"},"nodeType":"YulFunctionCall","src":"1849:28:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1839:6:181"}]}]},"name":"abi_decode_tuple_t_uint80","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1734:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1745:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1757:6:181","type":""}],"src":"1699:184:181"},{"body":{"nodeType":"YulBlock","src":"2095:309:181","statements":[{"nodeType":"YulAssignment","src":"2105:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2117:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2128:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2113:3:181"},"nodeType":"YulFunctionCall","src":"2113:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2105:4:181"}]},{"nodeType":"YulVariableDeclaration","src":"2141:32:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2151:22:181","type":"","value":"0xffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2145:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2189:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2204:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2212:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2200:3:181"},"nodeType":"YulFunctionCall","src":"2200:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2182:6:181"},"nodeType":"YulFunctionCall","src":"2182:34:181"},"nodeType":"YulExpressionStatement","src":"2182:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2236:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2247:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2232:3:181"},"nodeType":"YulFunctionCall","src":"2232:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"2252:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2225:6:181"},"nodeType":"YulFunctionCall","src":"2225:34:181"},"nodeType":"YulExpressionStatement","src":"2225:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2279:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2290:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2275:3:181"},"nodeType":"YulFunctionCall","src":"2275:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"2295:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2268:6:181"},"nodeType":"YulFunctionCall","src":"2268:34:181"},"nodeType":"YulExpressionStatement","src":"2268:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2322:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2333:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2318:3:181"},"nodeType":"YulFunctionCall","src":"2318:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"2338:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2311:6:181"},"nodeType":"YulFunctionCall","src":"2311:34:181"},"nodeType":"YulExpressionStatement","src":"2311:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2365:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2376:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2361:3:181"},"nodeType":"YulFunctionCall","src":"2361:19:181"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"2386:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2394:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2382:3:181"},"nodeType":"YulFunctionCall","src":"2382:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2354:6:181"},"nodeType":"YulFunctionCall","src":"2354:44:181"},"nodeType":"YulExpressionStatement","src":"2354:44:181"}]},"name":"abi_encode_tuple_t_uint80_t_int256_t_uint256_t_uint256_t_uint80__to_t_uint80_t_int256_t_uint256_t_uint256_t_uint80__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2032:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2043:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2051:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2059:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2067:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2075:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2086:4:181","type":""}],"src":"1888:516:181"},{"body":{"nodeType":"YulBlock","src":"2464:325:181","statements":[{"nodeType":"YulAssignment","src":"2474:22:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2488:1:181","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"2491:4:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2484:3:181"},"nodeType":"YulFunctionCall","src":"2484:12:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2474:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"2505:38:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"2535:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"2541:1:181","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2531:3:181"},"nodeType":"YulFunctionCall","src":"2531:12:181"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"2509:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2582:31:181","statements":[{"nodeType":"YulAssignment","src":"2584:27:181","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2598:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2606:4:181","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2594:3:181"},"nodeType":"YulFunctionCall","src":"2594:17:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2584:6:181"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"2562:18:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2555:6:181"},"nodeType":"YulFunctionCall","src":"2555:26:181"},"nodeType":"YulIf","src":"2552:61:181"},{"body":{"nodeType":"YulBlock","src":"2672:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2693:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2700:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2705:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2696:3:181"},"nodeType":"YulFunctionCall","src":"2696:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2686:6:181"},"nodeType":"YulFunctionCall","src":"2686:31:181"},"nodeType":"YulExpressionStatement","src":"2686:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2737:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2740:4:181","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2730:6:181"},"nodeType":"YulFunctionCall","src":"2730:15:181"},"nodeType":"YulExpressionStatement","src":"2730:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2765:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2768:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2758:6:181"},"nodeType":"YulFunctionCall","src":"2758:15:181"},"nodeType":"YulExpressionStatement","src":"2758:15:181"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"2628:18:181"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2651:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2659:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2648:2:181"},"nodeType":"YulFunctionCall","src":"2648:14:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2625:2:181"},"nodeType":"YulFunctionCall","src":"2625:38:181"},"nodeType":"YulIf","src":"2622:161:181"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"2444:4:181","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"2453:6:181","type":""}],"src":"2409:380:181"},{"body":{"nodeType":"YulBlock","src":"2826:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2843:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2850:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2855:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2846:3:181"},"nodeType":"YulFunctionCall","src":"2846:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2836:6:181"},"nodeType":"YulFunctionCall","src":"2836:31:181"},"nodeType":"YulExpressionStatement","src":"2836:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2883:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2886:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2876:6:181"},"nodeType":"YulFunctionCall","src":"2876:15:181"},"nodeType":"YulExpressionStatement","src":"2876:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2907:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2910:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2900:6:181"},"nodeType":"YulFunctionCall","src":"2900:15:181"},"nodeType":"YulExpressionStatement","src":"2900:15:181"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"2794:127:181"},{"body":{"nodeType":"YulBlock","src":"2990:358:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3000:16:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3015:1:181","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"3004:7:181","type":""}]},{"nodeType":"YulAssignment","src":"3025:16:181","value":{"name":"power_1","nodeType":"YulIdentifier","src":"3034:7:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3025:5:181"}]},{"nodeType":"YulAssignment","src":"3050:13:181","value":{"name":"_base","nodeType":"YulIdentifier","src":"3058:5:181"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"3050:4:181"}]},{"body":{"nodeType":"YulBlock","src":"3114:228:181","statements":[{"body":{"nodeType":"YulBlock","src":"3159:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3161:16:181"},"nodeType":"YulFunctionCall","src":"3161:18:181"},"nodeType":"YulExpressionStatement","src":"3161:18:181"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"3134:4:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3148:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3144:3:181"},"nodeType":"YulFunctionCall","src":"3144:6:181"},{"name":"base","nodeType":"YulIdentifier","src":"3152:4:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3140:3:181"},"nodeType":"YulFunctionCall","src":"3140:17:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3131:2:181"},"nodeType":"YulFunctionCall","src":"3131:27:181"},"nodeType":"YulIf","src":"3128:53:181"},{"body":{"nodeType":"YulBlock","src":"3220:29:181","statements":[{"nodeType":"YulAssignment","src":"3222:25:181","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"3235:5:181"},{"name":"base","nodeType":"YulIdentifier","src":"3242:4:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"3231:3:181"},"nodeType":"YulFunctionCall","src":"3231:16:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3222:5:181"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"3201:8:181"},{"name":"power_1","nodeType":"YulIdentifier","src":"3211:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3197:3:181"},"nodeType":"YulFunctionCall","src":"3197:22:181"},"nodeType":"YulIf","src":"3194:55:181"},{"nodeType":"YulAssignment","src":"3262:23:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"3274:4:181"},{"name":"base","nodeType":"YulIdentifier","src":"3280:4:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"3270:3:181"},"nodeType":"YulFunctionCall","src":"3270:15:181"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"3262:4:181"}]},{"nodeType":"YulAssignment","src":"3298:34:181","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"3314:7:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"3323:8:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3310:3:181"},"nodeType":"YulFunctionCall","src":"3310:22:181"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"3298:8:181"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"3083:8:181"},{"name":"power_1","nodeType":"YulIdentifier","src":"3093:7:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3080:2:181"},"nodeType":"YulFunctionCall","src":"3080:21:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3102:3:181","statements":[]},"pre":{"nodeType":"YulBlock","src":"3076:3:181","statements":[]},"src":"3072:270:181"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"2954:5:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"2961:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"2974:5:181","type":""},{"name":"base","nodeType":"YulTypedName","src":"2981:4:181","type":""}],"src":"2926:422:181"},{"body":{"nodeType":"YulBlock","src":"3412:747:181","statements":[{"body":{"nodeType":"YulBlock","src":"3450:52:181","statements":[{"nodeType":"YulAssignment","src":"3464:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3473:1:181","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3464:5:181"}]},{"nodeType":"YulLeave","src":"3487:5:181"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"3432:8:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3425:6:181"},"nodeType":"YulFunctionCall","src":"3425:16:181"},"nodeType":"YulIf","src":"3422:80:181"},{"body":{"nodeType":"YulBlock","src":"3535:52:181","statements":[{"nodeType":"YulAssignment","src":"3549:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3558:1:181","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3549:5:181"}]},{"nodeType":"YulLeave","src":"3572:5:181"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"3521:4:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3514:6:181"},"nodeType":"YulFunctionCall","src":"3514:12:181"},"nodeType":"YulIf","src":"3511:76:181"},{"cases":[{"body":{"nodeType":"YulBlock","src":"3623:52:181","statements":[{"nodeType":"YulAssignment","src":"3637:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3646:1:181","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3637:5:181"}]},{"nodeType":"YulLeave","src":"3660:5:181"}]},"nodeType":"YulCase","src":"3616:59:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3621:1:181","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"3691:123:181","statements":[{"body":{"nodeType":"YulBlock","src":"3726:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3728:16:181"},"nodeType":"YulFunctionCall","src":"3728:18:181"},"nodeType":"YulExpressionStatement","src":"3728:18:181"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"3711:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"3721:3:181","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3708:2:181"},"nodeType":"YulFunctionCall","src":"3708:17:181"},"nodeType":"YulIf","src":"3705:43:181"},{"nodeType":"YulAssignment","src":"3761:25:181","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"3774:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"3784:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3770:3:181"},"nodeType":"YulFunctionCall","src":"3770:16:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3761:5:181"}]},{"nodeType":"YulLeave","src":"3799:5:181"}]},"nodeType":"YulCase","src":"3684:130:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3689:1:181","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"3603:4:181"},"nodeType":"YulSwitch","src":"3596:218:181"},{"body":{"nodeType":"YulBlock","src":"3912:70:181","statements":[{"nodeType":"YulAssignment","src":"3926:28:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"3939:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"3945:8:181"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"3935:3:181"},"nodeType":"YulFunctionCall","src":"3935:19:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3926:5:181"}]},{"nodeType":"YulLeave","src":"3967:5:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"3836:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"3842:2:181","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3833:2:181"},"nodeType":"YulFunctionCall","src":"3833:12:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"3850:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"3860:2:181","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3847:2:181"},"nodeType":"YulFunctionCall","src":"3847:16:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3829:3:181"},"nodeType":"YulFunctionCall","src":"3829:35:181"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"3873:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"3879:3:181","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3870:2:181"},"nodeType":"YulFunctionCall","src":"3870:13:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"3888:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"3898:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3885:2:181"},"nodeType":"YulFunctionCall","src":"3885:16:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3866:3:181"},"nodeType":"YulFunctionCall","src":"3866:36:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"3826:2:181"},"nodeType":"YulFunctionCall","src":"3826:77:181"},"nodeType":"YulIf","src":"3823:159:181"},{"nodeType":"YulVariableDeclaration","src":"3991:57:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"4033:4:181"},{"name":"exponent","nodeType":"YulIdentifier","src":"4039:8:181"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"4014:18:181"},"nodeType":"YulFunctionCall","src":"4014:34:181"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"3995:7:181","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"4004:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"4093:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"4095:16:181"},"nodeType":"YulFunctionCall","src":"4095:18:181"},"nodeType":"YulExpressionStatement","src":"4095:18:181"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"4063:7:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4080:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4076:3:181"},"nodeType":"YulFunctionCall","src":"4076:6:181"},{"name":"base_1","nodeType":"YulIdentifier","src":"4084:6:181"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"4072:3:181"},"nodeType":"YulFunctionCall","src":"4072:19:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4060:2:181"},"nodeType":"YulFunctionCall","src":"4060:32:181"},"nodeType":"YulIf","src":"4057:58:181"},{"nodeType":"YulAssignment","src":"4124:29:181","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"4137:7:181"},{"name":"base_1","nodeType":"YulIdentifier","src":"4146:6:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"4133:3:181"},"nodeType":"YulFunctionCall","src":"4133:20:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"4124:5:181"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"3383:4:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"3389:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"3402:5:181","type":""}],"src":"3353:806:181"},{"body":{"nodeType":"YulBlock","src":"4232:72:181","statements":[{"nodeType":"YulAssignment","src":"4242:56:181","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"4272:4:181"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"4282:8:181"},{"kind":"number","nodeType":"YulLiteral","src":"4292:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4278:3:181"},"nodeType":"YulFunctionCall","src":"4278:19:181"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"4251:20:181"},"nodeType":"YulFunctionCall","src":"4251:47:181"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"4242:5:181"}]}]},"name":"checked_exp_t_uint256_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"4203:4:181","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"4209:8:181","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"4222:5:181","type":""}],"src":"4164:140:181"},{"body":{"nodeType":"YulBlock","src":"4360:186:181","statements":[{"nodeType":"YulAssignment","src":"4370:20:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4385:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"4388:1:181"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"4381:3:181"},"nodeType":"YulFunctionCall","src":"4381:9:181"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"4370:7:181"}]},{"body":{"nodeType":"YulBlock","src":"4437:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"4439:16:181"},"nodeType":"YulFunctionCall","src":"4439:18:181"},"nodeType":"YulExpressionStatement","src":"4439:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4410:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"4413:1:181","type":"","value":"0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4406:3:181"},"nodeType":"YulFunctionCall","src":"4406:9:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"4420:1:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4427:3:181","type":"","value":"255"},{"kind":"number","nodeType":"YulLiteral","src":"4432:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4423:3:181"},"nodeType":"YulFunctionCall","src":"4423:11:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4417:2:181"},"nodeType":"YulFunctionCall","src":"4417:18:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4402:3:181"},"nodeType":"YulFunctionCall","src":"4402:34:181"},"nodeType":"YulIf","src":"4399:60:181"},{"body":{"nodeType":"YulBlock","src":"4518:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"4520:16:181"},"nodeType":"YulFunctionCall","src":"4520:18:181"},"nodeType":"YulExpressionStatement","src":"4520:18:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4488:1:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4481:6:181"},"nodeType":"YulFunctionCall","src":"4481:9:181"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"4495:1:181"},{"arguments":[{"name":"product","nodeType":"YulIdentifier","src":"4503:7:181"},{"name":"x","nodeType":"YulIdentifier","src":"4512:1:181"}],"functionName":{"name":"sdiv","nodeType":"YulIdentifier","src":"4498:4:181"},"nodeType":"YulFunctionCall","src":"4498:16:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4492:2:181"},"nodeType":"YulFunctionCall","src":"4492:23:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"4478:2:181"},"nodeType":"YulFunctionCall","src":"4478:38:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4471:6:181"},"nodeType":"YulFunctionCall","src":"4471:46:181"},"nodeType":"YulIf","src":"4468:72:181"}]},"name":"checked_mul_t_int256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4339:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"4342:1:181","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"4348:7:181","type":""}],"src":"4309:237:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_int256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_uint80(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint80t_int256t_uint256t_uint80(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_uint80(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := abi_decode_uint80(add(headStart, 96))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        mstore(add(add(headStart, length), 64), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_decode_tuple_t_uint80(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint80(headStart)\n    }\n    function abi_encode_tuple_t_uint80_t_int256_t_uint256_t_uint256_t_uint80__to_t_uint80_t_int256_t_uint256_t_uint256_t_uint80__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        let _1 := 0xffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, _1))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(not(0), base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(not(0), base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint8(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, and(exponent, 0xff))\n    }\n    function checked_mul_t_int256(x, y) -> product\n    {\n        product := mul(x, y)\n        if and(slt(x, 0), eq(y, shl(255, 1))) { panic_error_0x11() }\n        if iszero(or(iszero(x), eq(y, sdiv(product, x)))) { panic_error_0x11() }\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100885760003560e01c8063640529801161005b57806364052980146100f55780637284e416146101405780639a6fc8f514610155578063feaf968c1461019c57600080fd5b806307da68f51461008d578063313ce567146100a757806354fd4d50146100cb578063575ac1e6146100e2575b600080fd5b6100a56006805460ff60501b1916600160501b179055565b005b6000546100b49060ff1681565b60405160ff90911681526020015b60405180910390f35b6100d460025481565b6040519081526020016100c2565b6100a56100f0366004610330565b600455565b6100a5610103366004610365565b600380546001600160501b0395861669ffffffffffffffffffff199182161790915560049390935560059190915560068054919093169116179055565b6101486101a4565b6040516100c291906103ab565b6101686101633660046103f9565b610232565b604080516001600160501b03968716815260208101959095528401929092526060830152909116608082015260a0016100c2565b6101686102ab565b600180546101b19061041b565b80601f01602080910402602001604051908101604052809291908181526020018280546101dd9061041b565b801561022a5780601f106101ff5761010080835404028352916020019161022a565b820191906000526020600020905b81548152906001019060200180831161020d57829003601f168201915b505050505081565b60008060008060006006600a9054906101000a900460ff1615610268576040516330a0505160e01b815260040160405180910390fd5b600054869061027b9060ff16600a610551565b6004546102889190610560565b60055460065492999198506000975095506001600160501b039091169350915050565b60008060008060006006600a9054906101000a900460ff16156102e1576040516330a0505160e01b815260040160405180910390fd5b6003546000546001600160501b03909116906103019060ff16600a610551565b60045461030e9190610560565b60055460065492989197506000965094506001600160501b0390911692509050565b60006020828403121561034257600080fd5b5035919050565b80356001600160501b038116811461036057600080fd5b919050565b6000806000806080858703121561037b57600080fd5b61038485610349565b935060208501359250604085013591506103a060608601610349565b905092959194509250565b600060208083528351808285015260005b818110156103d8578581018301518582016040015282016103bc565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561040b57600080fd5b61041482610349565b9392505050565b600181811c9082168061042f57607f821691505b60208210810361044f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156104a657816000190482111561048c5761048c610455565b8085161561049957918102915b93841c9390800290610470565b509250929050565b6000826104bd5750600161054b565b816104ca5750600061054b565b81600181146104e057600281146104ea57610506565b600191505061054b565b60ff8411156104fb576104fb610455565b50506001821b61054b565b5060208310610133831016604e8410600b8410161715610529575081810a61054b565b610533838361046b565b806000190482111561054757610547610455565b0290505b92915050565b600061041460ff8416836104ae565b80820260008212600160ff1b8414161561057c5761057c610455565b818105831482151761054b5761054b61045556fea26469706673582212201b5d9cc0079a8961c143054d716d795ad3cd23e342bd37d735fa9e290736bcb564736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x64052980 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x64052980 EQ PUSH2 0xF5 JUMPI DUP1 PUSH4 0x7284E416 EQ PUSH2 0x140 JUMPI DUP1 PUSH4 0x9A6FC8F5 EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0xFEAF968C EQ PUSH2 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7DA68F5 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0xA7 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0xCB JUMPI DUP1 PUSH4 0x575AC1E6 EQ PUSH2 0xE2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA5 PUSH1 0x6 DUP1 SLOAD PUSH1 0xFF PUSH1 0x50 SHL NOT AND PUSH1 0x1 PUSH1 0x50 SHL OR SWAP1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0xB4 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xD4 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC2 JUMP JUMPDEST PUSH2 0xA5 PUSH2 0xF0 CALLDATASIZE PUSH1 0x4 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x4 SSTORE JUMP JUMPDEST PUSH2 0xA5 PUSH2 0x103 CALLDATASIZE PUSH1 0x4 PUSH2 0x365 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB SWAP6 DUP7 AND PUSH10 0xFFFFFFFFFFFFFFFFFFFF NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x4 SWAP4 SWAP1 SWAP4 SSTORE PUSH1 0x5 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x6 DUP1 SLOAD SWAP2 SWAP1 SWAP4 AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x148 PUSH2 0x1A4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xC2 SWAP2 SWAP1 PUSH2 0x3AB JUMP JUMPDEST PUSH2 0x168 PUSH2 0x163 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F9 JUMP JUMPDEST PUSH2 0x232 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB SWAP7 DUP8 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0xC2 JUMP JUMPDEST PUSH2 0x168 PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x1B1 SWAP1 PUSH2 0x41B JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1DD SWAP1 PUSH2 0x41B JUMP JUMPDEST DUP1 ISZERO PUSH2 0x22A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1FF JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x22A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x20D JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x6 PUSH1 0xA SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x268 JUMPI PUSH1 0x40 MLOAD PUSH4 0x30A05051 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD DUP7 SWAP1 PUSH2 0x27B SWAP1 PUSH1 0xFF AND PUSH1 0xA PUSH2 0x551 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x288 SWAP2 SWAP1 PUSH2 0x560 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD SWAP3 SWAP10 SWAP2 SWAP9 POP PUSH1 0x0 SWAP8 POP SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB SWAP1 SWAP2 AND SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x6 PUSH1 0xA SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x2E1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x30A05051 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH2 0x301 SWAP1 PUSH1 0xFF AND PUSH1 0xA PUSH2 0x551 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x30E SWAP2 SWAP1 PUSH2 0x560 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD SWAP3 SWAP9 SWAP2 SWAP8 POP PUSH1 0x0 SWAP7 POP SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB SWAP1 SWAP2 AND SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x342 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x37B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x384 DUP6 PUSH2 0x349 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH2 0x3A0 PUSH1 0x60 DUP7 ADD PUSH2 0x349 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3D8 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x3BC JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x40B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x414 DUP3 PUSH2 0x349 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x42F JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x44F JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x4A6 JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x48C JUMPI PUSH2 0x48C PUSH2 0x455 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x499 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x470 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4BD JUMPI POP PUSH1 0x1 PUSH2 0x54B JUMP JUMPDEST DUP2 PUSH2 0x4CA JUMPI POP PUSH1 0x0 PUSH2 0x54B JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x4E0 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x4EA JUMPI PUSH2 0x506 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x54B JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x4FB JUMPI PUSH2 0x4FB PUSH2 0x455 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x54B JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x529 JUMPI POP DUP2 DUP2 EXP PUSH2 0x54B JUMP JUMPDEST PUSH2 0x533 DUP4 DUP4 PUSH2 0x46B JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x547 JUMPI PUSH2 0x547 PUSH2 0x455 JUMP JUMPDEST MUL SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x414 PUSH1 0xFF DUP5 AND DUP4 PUSH2 0x4AE JUMP JUMPDEST DUP1 DUP3 MUL PUSH1 0x0 DUP3 SLT PUSH1 0x1 PUSH1 0xFF SHL DUP5 EQ AND ISZERO PUSH2 0x57C JUMPI PUSH2 0x57C PUSH2 0x455 JUMP JUMPDEST DUP2 DUP2 SDIV DUP4 EQ DUP3 ISZERO OR PUSH2 0x54B JUMPI PUSH2 0x54B PUSH2 0x455 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHL 0x5D SWAP13 0xC0 SMOD SWAP11 DUP10 PUSH2 0xC143 SDIV 0x4D PUSH18 0x6D795AD3CD23E342BD37D735FA9E290736BC 0xB5 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ","sourceMap":"117:1827:179:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1892:50;;1923:7;:14;;-1:-1:-1;;;;1923:14:179;-1:-1:-1;;;1923:14:179;;;1892:50;;;145:26;;;;;;;;;;;;186:4:181;174:17;;;156:36;;144:2;129:18;145:26:179;;;;;;;;236;;;;;;;;;349:25:181;;;337:2;322:18;236:26:179;203:177:181;1534:83:179;;;;;;:::i;:::-;1591:11;:21;1534:83;1621:267;;;;;;:::i;:::-;1757:12;:23;;-1:-1:-1;;;;;1757:23:179;;;-1:-1:-1;;1757:23:179;;;;;;;1786:11;:21;;;;1813:13;:25;;;;1844:20;:39;;;;;;;;;;;1621:267;176:55;;;:::i;:::-;;;;;;;:::i;788:373::-;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;2200:15:181;;;2182:34;;2247:2;2232:18;;2225:34;;;;2275:18;;2268:34;;;;2333:2;2318:18;;2311:34;2382:15;;;2376:3;2361:19;;2354:44;2128:3;2113:19;788:373:179;1888:516:181;1165:365:179;;;:::i;176:55::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;788:373::-;869:14;891:13;912:17;937;962:22;1003:7;;;;;;;;;;;999:59;;;1027:24;;-1:-1:-1;;;1027:24:179;;;;;;;;;;;999:59;1106:8;;1071;;1102:12;;1106:8;;1102:2;:12;:::i;:::-;1081:11;;:34;;;;:::i;:::-;1120:13;;1135:20;;1063:93;;;;-1:-1:-1;1117:1:179;;-1:-1:-1;1120:13:179;-1:-1:-1;;;;;;1135:20:179;;;;-1:-1:-1;788:373:179;-1:-1:-1;;788:373:179:o;1165:365::-;1234:14;1256:13;1277:17;1302;1327:22;1368:7;;;;;;;;;;;1364:59;;;1392:24;;-1:-1:-1;;;1392:24:179;;;;;;;;;;;1364:59;1436:12;;;1475:8;-1:-1:-1;;;;;1436:12:179;;;;1471;;1475:8;;1471:2;:12;:::i;:::-;1450:11;;:34;;;;:::i;:::-;1489:13;;1504:20;;1428:97;;;;-1:-1:-1;1486:1:179;;-1:-1:-1;1489:13:179;-1:-1:-1;;;;;;1504:20:179;;;;-1:-1:-1;1165:365:179;-1:-1:-1;1165:365:179:o;385:179:181:-;443:6;496:2;484:9;475:7;471:23;467:32;464:52;;;512:1;509;502:12;464:52;-1:-1:-1;535:23:181;;385:179;-1:-1:-1;385:179:181:o;569:175::-;636:20;;-1:-1:-1;;;;;685:34:181;;675:45;;665:73;;734:1;731;724:12;665:73;569:175;;;:::o;749:392::-;832:6;840;848;856;909:3;897:9;888:7;884:23;880:33;877:53;;;926:1;923;916:12;877:53;949:28;967:9;949:28;:::i;:::-;939:38;;1024:2;1013:9;1009:18;996:32;986:42;;1075:2;1064:9;1060:18;1047:32;1037:42;;1098:37;1131:2;1120:9;1116:18;1098:37;:::i;:::-;1088:47;;749:392;;;;;;;:::o;1146:548::-;1258:4;1287:2;1316;1305:9;1298:21;1348:6;1342:13;1391:6;1386:2;1375:9;1371:18;1364:34;1416:1;1426:140;1440:6;1437:1;1434:13;1426:140;;;1535:14;;;1531:23;;1525:30;1501:17;;;1520:2;1497:26;1490:66;1455:10;;1426:140;;;1430:3;1615:1;1610:2;1601:6;1590:9;1586:22;1582:31;1575:42;1685:2;1678;1674:7;1669:2;1661:6;1657:15;1653:29;1642:9;1638:45;1634:54;1626:62;;;;1146:548;;;;:::o;1699:184::-;1757:6;1810:2;1798:9;1789:7;1785:23;1781:32;1778:52;;;1826:1;1823;1816:12;1778:52;1849:28;1867:9;1849:28;:::i;:::-;1839:38;1699:184;-1:-1:-1;;;1699:184:181:o;2409:380::-;2488:1;2484:12;;;;2531;;;2552:61;;2606:4;2598:6;2594:17;2584:27;;2552:61;2659:2;2651:6;2648:14;2628:18;2625:38;2622:161;;2705:10;2700:3;2696:20;2693:1;2686:31;2740:4;2737:1;2730:15;2768:4;2765:1;2758:15;2622:161;;2409:380;;;:::o;2794:127::-;2855:10;2850:3;2846:20;2843:1;2836:31;2886:4;2883:1;2876:15;2910:4;2907:1;2900:15;2926:422;3015:1;3058:5;3015:1;3072:270;3093:7;3083:8;3080:21;3072:270;;;3152:4;3148:1;3144:6;3140:17;3134:4;3131:27;3128:53;;;3161:18;;:::i;:::-;3211:7;3201:8;3197:22;3194:55;;;3231:16;;;;3194:55;3310:22;;;;3270:15;;;;3072:270;;;3076:3;2926:422;;;;;:::o;3353:806::-;3402:5;3432:8;3422:80;;-1:-1:-1;3473:1:181;3487:5;;3422:80;3521:4;3511:76;;-1:-1:-1;3558:1:181;3572:5;;3511:76;3603:4;3621:1;3616:59;;;;3689:1;3684:130;;;;3596:218;;3616:59;3646:1;3637:10;;3660:5;;;3684:130;3721:3;3711:8;3708:17;3705:43;;;3728:18;;:::i;:::-;-1:-1:-1;;3784:1:181;3770:16;;3799:5;;3596:218;;3898:2;3888:8;3885:16;3879:3;3873:4;3870:13;3866:36;3860:2;3850:8;3847:16;3842:2;3836:4;3833:12;3829:35;3826:77;3823:159;;;-1:-1:-1;3935:19:181;;;3967:5;;3823:159;4014:34;4039:8;4033:4;4014:34;:::i;:::-;4084:6;4080:1;4076:6;4072:19;4063:7;4060:32;4057:58;;;4095:18;;:::i;:::-;4133:20;;-1:-1:-1;3353:806:181;;;;;:::o;4164:140::-;4222:5;4251:47;4292:4;4282:8;4278:19;4272:4;4251:47;:::i;4309:237::-;4381:9;;;4348:7;4406:9;;-1:-1:-1;;;4417:18:181;;4402:34;4399:60;;;4439:18;;:::i;:::-;4512:1;4503:7;4498:16;4495:1;4492:23;4488:1;4481:9;4478:38;4468:72;;4520:18;;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"295600","executionCost":"infinite","totalCost":"infinite"},"external":{"decimals()":"2325","description()":"infinite","getRoundData(uint80)":"infinite","latestRoundData()":"infinite","stop()":"24369","updateMockAnswer(int256)":"22379","updateMockData(uint80,int256,uint256,uint80)":"infinite","version()":"2340"}},"methodIdentifiers":{"decimals()":"313ce567","description()":"7284e416","getRoundData(uint80)":"9a6fc8f5","latestRoundData()":"feaf968c","stop()":"07da68f5","updateMockAnswer(int256)":"575ac1e6","updateMockData(uint80,int256,uint256,uint80)":"64052980","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_decimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"TestAggregator_Stopped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"description\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"}],\"name\":\"getRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stop\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"_answer\",\"type\":\"int256\"}],\"name\":\"updateMockAnswer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"_answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"_updateAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"_answeredInRound\",\"type\":\"uint80\"}],\"name\":\"updateMockData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/TestAggregator.sol\":\"TestAggregator\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/test/TestAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/*\\n * This aggregator is ONLY useful for testing\\n */\\ncontract TestAggregator {\\n  uint8 public decimals = 18;\\n\\n  string public description = \\\"Chainlink Test Aggregator\\\";\\n\\n  uint256 public version = 1;\\n\\n  uint80 _mockRoundId = 1;\\n\\n  int256 _mockAnswer = 1;\\n\\n  uint256 _mockUpdateAt;\\n\\n  uint80 _mockAnsweredInRound = 1;\\n\\n  bool stopped;\\n  // This error is used for only testing\\n  error TestAggregator_Stopped();\\n\\n  constructor(uint8 _decimals) {\\n    decimals = _decimals;\\n    _mockUpdateAt = block.timestamp;\\n  }\\n\\n  // getRoundData and latestRoundData should both raise \\\"No data present\\\"\\n  // if they do not have data to report, instead of returning unset values\\n  // which could be misinterpreted as actual reported values.\\n  function getRoundData(uint80 _roundId)\\n    external\\n    view\\n    returns (\\n      uint80 roundId,\\n      int256 answer,\\n      uint256 startedAt,\\n      uint256 updatedAt,\\n      uint80 answeredInRound\\n    )\\n  {\\n    if (stopped) {\\n      revert TestAggregator_Stopped();\\n    }\\n    return (_roundId, _mockAnswer * int256(10**decimals), 0, _mockUpdateAt, _mockAnsweredInRound);\\n  }\\n\\n  function latestRoundData()\\n    external\\n    view\\n    returns (\\n      uint80 roundId,\\n      int256 answer,\\n      uint256 startedAt,\\n      uint256 updatedAt,\\n      uint80 answeredInRound\\n    )\\n  {\\n    if (stopped) {\\n      revert TestAggregator_Stopped();\\n    }\\n    return (_mockRoundId, _mockAnswer * int256(10**decimals), 0, _mockUpdateAt, _mockAnsweredInRound);\\n  }\\n\\n  function updateMockAnswer(int256 _answer) external {\\n    _mockAnswer = _answer;\\n  }\\n\\n  function updateMockData(\\n    uint80 _roundId,\\n    int256 _answer,\\n    uint256 _updateAt,\\n    uint80 _answeredInRound\\n  ) external {\\n    _mockRoundId = _roundId;\\n    _mockAnswer = _answer;\\n    _mockUpdateAt = _updateAt;\\n    _mockAnsweredInRound = _answeredInRound;\\n  }\\n\\n  function stop() external {\\n    stopped = true;\\n  }\\n}\\n\",\"keccak256\":\"0x4400166692583679295f692c64a4cc6b7d6a6d4d07cc1717ed4f0cf5619b242b\",\"license\":\"UNLICENSED\"}},\"version\":1}","storageLayout":{"storage":[{"astId":51649,"contract":"contracts/test/TestAggregator.sol:TestAggregator","label":"decimals","offset":0,"slot":"0","type":"t_uint8"},{"astId":51652,"contract":"contracts/test/TestAggregator.sol:TestAggregator","label":"description","offset":0,"slot":"1","type":"t_string_storage"},{"astId":51655,"contract":"contracts/test/TestAggregator.sol:TestAggregator","label":"version","offset":0,"slot":"2","type":"t_uint256"},{"astId":51658,"contract":"contracts/test/TestAggregator.sol:TestAggregator","label":"_mockRoundId","offset":0,"slot":"3","type":"t_uint80"},{"astId":51661,"contract":"contracts/test/TestAggregator.sol:TestAggregator","label":"_mockAnswer","offset":0,"slot":"4","type":"t_int256"},{"astId":51663,"contract":"contracts/test/TestAggregator.sol:TestAggregator","label":"_mockUpdateAt","offset":0,"slot":"5","type":"t_uint256"},{"astId":51666,"contract":"contracts/test/TestAggregator.sol:TestAggregator","label":"_mockAnsweredInRound","offset":0,"slot":"6","type":"t_uint80"},{"astId":51668,"contract":"contracts/test/TestAggregator.sol:TestAggregator","label":"stopped","offset":10,"slot":"6","type":"t_bool"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_int256":{"encoding":"inplace","label":"int256","numberOfBytes":"32"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"},"t_uint80":{"encoding":"inplace","label":"uint80","numberOfBytes":"10"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/test/TestERC20.sol":{"TestERC20":{"abi":[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newName","type":"string"},{"internalType":"string","name":"_newSymbol","type":"string"}],"name":"setDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Anybody can mint as many tokens as they likeAnybody can burn anyone else's tokens","kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"See {IERC20Permit-DOMAIN_SEPARATOR}. This is ALWAYS calculated at runtime because the token name is mutable, not constant."},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"decreaseAllowance(address,uint256)":{"details":"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address. - `_spender` must have allowance for the caller of at least `_subtractedValue`."},"increaseAllowance(address,uint256)":{"details":"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address."},"nonces(address)":{"details":"See {IERC20Permit-nonces}."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"See {IERC20Permit-permit}.","params":{"_deadline":"The timestamp before which the signature must be submitted","_owner":"The account setting approval & signing the message","_r":"ECDSA signature r","_s":"ECDSA signature s","_spender":"The account receiving approval to spend owner's tokens","_v":"ECDSA signature v","_value":"The amount to set approval for"}},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `_sender` and `recipient` cannot be the zero address. - `_sender` must have a balance of at least `amount`. - the caller must have allowance for ``_sender``'s tokens of at least `amount`."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_23312":{"entryPoint":null,"id":23312,"parameterSlots":4,"returnSlots":0},"@_51836":{"entryPoint":null,"id":51836,"parameterSlots":2,"returnSlots":0},"@_afterTokenTransfer_23836":{"entryPoint":null,"id":23836,"parameterSlots":3,"returnSlots":0},"@_beforeTokenTransfer_23825":{"entryPoint":496,"id":23825,"parameterSlots":3,"returnSlots":0},"@_buildDomainSeparator_24022":{"entryPoint":null,"id":24022,"parameterSlots":3,"returnSlots":1},"@_mint_23654":{"entryPoint":298,"id":23654,"parameterSlots":2,"returnSlots":0},"abi_decode_string_fromMemory":{"entryPoint":523,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory":{"entryPoint":698,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_dataslot_string_storage":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":1150,"id":null,"parameterSlots":2,"returnSlots":1},"clean_up_bytearray_end_slots_string_storage":{"entryPoint":864,"id":null,"parameterSlots":3,"returnSlots":0},"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage":{"entryPoint":946,"id":null,"parameterSlots":2,"returnSlots":0},"extract_byte_array_length":{"entryPoint":804,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x41":{"entryPoint":501,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:5407:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:181"},"nodeType":"YulFunctionCall","src":"66:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:181"},"nodeType":"YulFunctionCall","src":"56:31:181"},"nodeType":"YulExpressionStatement","src":"56:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:181"},"nodeType":"YulFunctionCall","src":"96:15:181"},"nodeType":"YulExpressionStatement","src":"96:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:181"},"nodeType":"YulFunctionCall","src":"120:15:181"},"nodeType":"YulExpressionStatement","src":"120:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:181"},{"body":{"nodeType":"YulBlock","src":"210:776:181","statements":[{"body":{"nodeType":"YulBlock","src":"259:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"268:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"271:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"261:6:181"},"nodeType":"YulFunctionCall","src":"261:12:181"},"nodeType":"YulExpressionStatement","src":"261:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"238:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"246:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"234:3:181"},"nodeType":"YulFunctionCall","src":"234:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"253:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"230:3:181"},"nodeType":"YulFunctionCall","src":"230:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"223:6:181"},"nodeType":"YulFunctionCall","src":"223:35:181"},"nodeType":"YulIf","src":"220:55:181"},{"nodeType":"YulVariableDeclaration","src":"284:23:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"300:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"294:5:181"},"nodeType":"YulFunctionCall","src":"294:13:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"288:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"316:28:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"334:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"338:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"330:3:181"},"nodeType":"YulFunctionCall","src":"330:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"342:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"326:3:181"},"nodeType":"YulFunctionCall","src":"326:18:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"320:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"367:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"369:16:181"},"nodeType":"YulFunctionCall","src":"369:18:181"},"nodeType":"YulExpressionStatement","src":"369:18:181"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"359:2:181"},{"name":"_2","nodeType":"YulIdentifier","src":"363:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"356:2:181"},"nodeType":"YulFunctionCall","src":"356:10:181"},"nodeType":"YulIf","src":"353:36:181"},{"nodeType":"YulVariableDeclaration","src":"398:17:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"412:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"408:3:181"},"nodeType":"YulFunctionCall","src":"408:7:181"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"402:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"424:23:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"444:2:181","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"438:5:181"},"nodeType":"YulFunctionCall","src":"438:9:181"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"428:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"456:71:181","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"478:6:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"502:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"506:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"498:3:181"},"nodeType":"YulFunctionCall","src":"498:13:181"},{"name":"_3","nodeType":"YulIdentifier","src":"513:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"494:3:181"},"nodeType":"YulFunctionCall","src":"494:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"518:2:181","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"490:3:181"},"nodeType":"YulFunctionCall","src":"490:31:181"},{"name":"_3","nodeType":"YulIdentifier","src":"523:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"486:3:181"},"nodeType":"YulFunctionCall","src":"486:40:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"474:3:181"},"nodeType":"YulFunctionCall","src":"474:53:181"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"460:10:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"586:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"588:16:181"},"nodeType":"YulFunctionCall","src":"588:18:181"},"nodeType":"YulExpressionStatement","src":"588:18:181"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"545:10:181"},{"name":"_2","nodeType":"YulIdentifier","src":"557:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"542:2:181"},"nodeType":"YulFunctionCall","src":"542:18:181"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"565:10:181"},{"name":"memPtr","nodeType":"YulIdentifier","src":"577:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"562:2:181"},"nodeType":"YulFunctionCall","src":"562:22:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"539:2:181"},"nodeType":"YulFunctionCall","src":"539:46:181"},"nodeType":"YulIf","src":"536:72:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"624:2:181","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"628:10:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"617:6:181"},"nodeType":"YulFunctionCall","src":"617:22:181"},"nodeType":"YulExpressionStatement","src":"617:22:181"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"655:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"663:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"648:6:181"},"nodeType":"YulFunctionCall","src":"648:18:181"},"nodeType":"YulExpressionStatement","src":"648:18:181"},{"nodeType":"YulVariableDeclaration","src":"675:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"685:4:181","type":"","value":"0x20"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"679:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"735:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"744:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"747:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"737:6:181"},"nodeType":"YulFunctionCall","src":"737:12:181"},"nodeType":"YulExpressionStatement","src":"737:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"712:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"720:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"708:3:181"},"nodeType":"YulFunctionCall","src":"708:15:181"},{"name":"_4","nodeType":"YulIdentifier","src":"725:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"704:3:181"},"nodeType":"YulFunctionCall","src":"704:24:181"},{"name":"end","nodeType":"YulIdentifier","src":"730:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"701:2:181"},"nodeType":"YulFunctionCall","src":"701:33:181"},"nodeType":"YulIf","src":"698:53:181"},{"nodeType":"YulVariableDeclaration","src":"760:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"769:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"764:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"825:87:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"854:6:181"},{"name":"i","nodeType":"YulIdentifier","src":"862:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"850:3:181"},"nodeType":"YulFunctionCall","src":"850:14:181"},{"name":"_4","nodeType":"YulIdentifier","src":"866:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"846:3:181"},"nodeType":"YulFunctionCall","src":"846:23:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"885:6:181"},{"name":"i","nodeType":"YulIdentifier","src":"893:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"881:3:181"},"nodeType":"YulFunctionCall","src":"881:14:181"},{"name":"_4","nodeType":"YulIdentifier","src":"897:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"877:3:181"},"nodeType":"YulFunctionCall","src":"877:23:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"871:5:181"},"nodeType":"YulFunctionCall","src":"871:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"839:6:181"},"nodeType":"YulFunctionCall","src":"839:63:181"},"nodeType":"YulExpressionStatement","src":"839:63:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"790:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"793:2:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"787:2:181"},"nodeType":"YulFunctionCall","src":"787:9:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"797:19:181","statements":[{"nodeType":"YulAssignment","src":"799:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"808:1:181"},{"name":"_4","nodeType":"YulIdentifier","src":"811:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"804:3:181"},"nodeType":"YulFunctionCall","src":"804:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"799:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"783:3:181","statements":[]},"src":"779:133:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"936:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"944:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"932:3:181"},"nodeType":"YulFunctionCall","src":"932:15:181"},{"name":"_4","nodeType":"YulIdentifier","src":"949:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"928:3:181"},"nodeType":"YulFunctionCall","src":"928:24:181"},{"kind":"number","nodeType":"YulLiteral","src":"954:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"921:6:181"},"nodeType":"YulFunctionCall","src":"921:35:181"},"nodeType":"YulExpressionStatement","src":"921:35:181"},{"nodeType":"YulAssignment","src":"965:15:181","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"974:6:181"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"965:5:181"}]}]},"name":"abi_decode_string_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"184:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"192:3:181","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"200:5:181","type":""}],"src":"146:840:181"},{"body":{"nodeType":"YulBlock","src":"1109:444:181","statements":[{"body":{"nodeType":"YulBlock","src":"1155:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1164:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1167:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1157:6:181"},"nodeType":"YulFunctionCall","src":"1157:12:181"},"nodeType":"YulExpressionStatement","src":"1157:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1130:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1139:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1126:3:181"},"nodeType":"YulFunctionCall","src":"1126:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1151:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1122:3:181"},"nodeType":"YulFunctionCall","src":"1122:32:181"},"nodeType":"YulIf","src":"1119:52:181"},{"nodeType":"YulVariableDeclaration","src":"1180:30:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1200:9:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1194:5:181"},"nodeType":"YulFunctionCall","src":"1194:16:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1184:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1219:28:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1237:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"1241:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1233:3:181"},"nodeType":"YulFunctionCall","src":"1233:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"1245:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1229:3:181"},"nodeType":"YulFunctionCall","src":"1229:18:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1223:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1274:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1283:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1286:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1276:6:181"},"nodeType":"YulFunctionCall","src":"1276:12:181"},"nodeType":"YulExpressionStatement","src":"1276:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1262:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1270:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1259:2:181"},"nodeType":"YulFunctionCall","src":"1259:14:181"},"nodeType":"YulIf","src":"1256:34:181"},{"nodeType":"YulAssignment","src":"1299:71:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1342:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"1353:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1338:3:181"},"nodeType":"YulFunctionCall","src":"1338:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1362:7:181"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1309:28:181"},"nodeType":"YulFunctionCall","src":"1309:61:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1299:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1379:41:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1405:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1416:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1401:3:181"},"nodeType":"YulFunctionCall","src":"1401:18:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1395:5:181"},"nodeType":"YulFunctionCall","src":"1395:25:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"1383:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1449:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1458:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1461:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1451:6:181"},"nodeType":"YulFunctionCall","src":"1451:12:181"},"nodeType":"YulExpressionStatement","src":"1451:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"1435:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"1445:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1432:2:181"},"nodeType":"YulFunctionCall","src":"1432:16:181"},"nodeType":"YulIf","src":"1429:36:181"},{"nodeType":"YulAssignment","src":"1474:73:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1517:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"1528:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1513:3:181"},"nodeType":"YulFunctionCall","src":"1513:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1539:7:181"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1484:28:181"},"nodeType":"YulFunctionCall","src":"1484:63:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1474:6:181"}]}]},"name":"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1067:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1078:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1090:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1098:6:181","type":""}],"src":"991:562:181"},{"body":{"nodeType":"YulBlock","src":"1613:325:181","statements":[{"nodeType":"YulAssignment","src":"1623:22:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1637:1:181","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"1640:4:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1633:3:181"},"nodeType":"YulFunctionCall","src":"1633:12:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1623:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"1654:38:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1684:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"1690:1:181","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1680:3:181"},"nodeType":"YulFunctionCall","src":"1680:12:181"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"1658:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"1731:31:181","statements":[{"nodeType":"YulAssignment","src":"1733:27:181","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1747:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1755:4:181","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1743:3:181"},"nodeType":"YulFunctionCall","src":"1743:17:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1733:6:181"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"1711:18:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1704:6:181"},"nodeType":"YulFunctionCall","src":"1704:26:181"},"nodeType":"YulIf","src":"1701:61:181"},{"body":{"nodeType":"YulBlock","src":"1821:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1842:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1849:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1854:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1845:3:181"},"nodeType":"YulFunctionCall","src":"1845:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1835:6:181"},"nodeType":"YulFunctionCall","src":"1835:31:181"},"nodeType":"YulExpressionStatement","src":"1835:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1886:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1889:4:181","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1879:6:181"},"nodeType":"YulFunctionCall","src":"1879:15:181"},"nodeType":"YulExpressionStatement","src":"1879:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1914:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1917:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1907:6:181"},"nodeType":"YulFunctionCall","src":"1907:15:181"},"nodeType":"YulExpressionStatement","src":"1907:15:181"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"1777:18:181"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1800:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1808:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1797:2:181"},"nodeType":"YulFunctionCall","src":"1797:14:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1774:2:181"},"nodeType":"YulFunctionCall","src":"1774:38:181"},"nodeType":"YulIf","src":"1771:161:181"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"1593:4:181","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"1602:6:181","type":""}],"src":"1558:380:181"},{"body":{"nodeType":"YulBlock","src":"1999:65:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2016:1:181","type":"","value":"0"},{"name":"ptr","nodeType":"YulIdentifier","src":"2019:3:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2009:6:181"},"nodeType":"YulFunctionCall","src":"2009:14:181"},"nodeType":"YulExpressionStatement","src":"2009:14:181"},{"nodeType":"YulAssignment","src":"2032:26:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2050:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2053:4:181","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"2040:9:181"},"nodeType":"YulFunctionCall","src":"2040:18:181"},"variableNames":[{"name":"data","nodeType":"YulIdentifier","src":"2032:4:181"}]}]},"name":"array_dataslot_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nodeType":"YulTypedName","src":"1982:3:181","type":""}],"returnVariables":[{"name":"data","nodeType":"YulTypedName","src":"1990:4:181","type":""}],"src":"1943:121:181"},{"body":{"nodeType":"YulBlock","src":"2150:464:181","statements":[{"body":{"nodeType":"YulBlock","src":"2183:425:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2197:11:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2207:1:181","type":"","value":"0"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2201:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2228:2:181"},{"name":"array","nodeType":"YulIdentifier","src":"2232:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2221:6:181"},"nodeType":"YulFunctionCall","src":"2221:17:181"},"nodeType":"YulExpressionStatement","src":"2221:17:181"},{"nodeType":"YulVariableDeclaration","src":"2251:31:181","value":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2273:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"2277:4:181","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"2263:9:181"},"nodeType":"YulFunctionCall","src":"2263:19:181"},"variables":[{"name":"data","nodeType":"YulTypedName","src":"2255:4:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2295:57:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"2318:4:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2328:1:181","type":"","value":"5"},{"arguments":[{"name":"startIndex","nodeType":"YulIdentifier","src":"2335:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"2347:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2331:3:181"},"nodeType":"YulFunctionCall","src":"2331:19:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2324:3:181"},"nodeType":"YulFunctionCall","src":"2324:27:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2314:3:181"},"nodeType":"YulFunctionCall","src":"2314:38:181"},"variables":[{"name":"deleteStart","nodeType":"YulTypedName","src":"2299:11:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2389:23:181","statements":[{"nodeType":"YulAssignment","src":"2391:19:181","value":{"name":"data","nodeType":"YulIdentifier","src":"2406:4:181"},"variableNames":[{"name":"deleteStart","nodeType":"YulIdentifier","src":"2391:11:181"}]}]},"condition":{"arguments":[{"name":"startIndex","nodeType":"YulIdentifier","src":"2371:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"2383:4:181","type":"","value":"0x20"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2368:2:181"},"nodeType":"YulFunctionCall","src":"2368:20:181"},"nodeType":"YulIf","src":"2365:47:181"},{"nodeType":"YulVariableDeclaration","src":"2425:41:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"2439:4:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2449:1:181","type":"","value":"5"},{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"2456:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"2461:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2452:3:181"},"nodeType":"YulFunctionCall","src":"2452:12:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2445:3:181"},"nodeType":"YulFunctionCall","src":"2445:20:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2435:3:181"},"nodeType":"YulFunctionCall","src":"2435:31:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2429:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2479:24:181","value":{"name":"deleteStart","nodeType":"YulIdentifier","src":"2492:11:181"},"variables":[{"name":"start","nodeType":"YulTypedName","src":"2483:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2577:21:181","statements":[{"expression":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"2586:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2593:2:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"2579:6:181"},"nodeType":"YulFunctionCall","src":"2579:17:181"},"nodeType":"YulExpressionStatement","src":"2579:17:181"}]},"condition":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"2527:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"2534:2:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2524:2:181"},"nodeType":"YulFunctionCall","src":"2524:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2538:26:181","statements":[{"nodeType":"YulAssignment","src":"2540:22:181","value":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"2553:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"2560:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2549:3:181"},"nodeType":"YulFunctionCall","src":"2549:13:181"},"variableNames":[{"name":"start","nodeType":"YulIdentifier","src":"2540:5:181"}]}]},"pre":{"nodeType":"YulBlock","src":"2520:3:181","statements":[]},"src":"2516:82:181"}]},"condition":{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"2166:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"2171:2:181","type":"","value":"31"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2163:2:181"},"nodeType":"YulFunctionCall","src":"2163:11:181"},"nodeType":"YulIf","src":"2160:448:181"}]},"name":"clean_up_bytearray_end_slots_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nodeType":"YulTypedName","src":"2122:5:181","type":""},{"name":"len","nodeType":"YulTypedName","src":"2129:3:181","type":""},{"name":"startIndex","nodeType":"YulTypedName","src":"2134:10:181","type":""}],"src":"2069:545:181"},{"body":{"nodeType":"YulBlock","src":"2704:81:181","statements":[{"nodeType":"YulAssignment","src":"2714:65:181","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"2729:4:181"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2747:1:181","type":"","value":"3"},{"name":"len","nodeType":"YulIdentifier","src":"2750:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2743:3:181"},"nodeType":"YulFunctionCall","src":"2743:11:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2760:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2756:3:181"},"nodeType":"YulFunctionCall","src":"2756:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2739:3:181"},"nodeType":"YulFunctionCall","src":"2739:24:181"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2735:3:181"},"nodeType":"YulFunctionCall","src":"2735:29:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2725:3:181"},"nodeType":"YulFunctionCall","src":"2725:40:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2771:1:181","type":"","value":"1"},{"name":"len","nodeType":"YulIdentifier","src":"2774:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2767:3:181"},"nodeType":"YulFunctionCall","src":"2767:11:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2722:2:181"},"nodeType":"YulFunctionCall","src":"2722:57:181"},"variableNames":[{"name":"used","nodeType":"YulIdentifier","src":"2714:4:181"}]}]},"name":"extract_used_part_and_set_length_of_short_byte_array","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"2681:4:181","type":""},{"name":"len","nodeType":"YulTypedName","src":"2687:3:181","type":""}],"returnVariables":[{"name":"used","nodeType":"YulTypedName","src":"2695:4:181","type":""}],"src":"2619:166:181"},{"body":{"nodeType":"YulBlock","src":"2886:1256:181","statements":[{"nodeType":"YulVariableDeclaration","src":"2896:24:181","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2916:3:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2910:5:181"},"nodeType":"YulFunctionCall","src":"2910:10:181"},"variables":[{"name":"newLen","nodeType":"YulTypedName","src":"2900:6:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2963:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2965:16:181"},"nodeType":"YulFunctionCall","src":"2965:18:181"},"nodeType":"YulExpressionStatement","src":"2965:18:181"}]},"condition":{"arguments":[{"name":"newLen","nodeType":"YulIdentifier","src":"2935:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2951:2:181","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"2955:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2947:3:181"},"nodeType":"YulFunctionCall","src":"2947:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"2959:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2943:3:181"},"nodeType":"YulFunctionCall","src":"2943:18:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2932:2:181"},"nodeType":"YulFunctionCall","src":"2932:30:181"},"nodeType":"YulIf","src":"2929:56:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"3038:4:181"},{"arguments":[{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"3076:4:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"3070:5:181"},"nodeType":"YulFunctionCall","src":"3070:11:181"}],"functionName":{"name":"extract_byte_array_length","nodeType":"YulIdentifier","src":"3044:25:181"},"nodeType":"YulFunctionCall","src":"3044:38:181"},{"name":"newLen","nodeType":"YulIdentifier","src":"3084:6:181"}],"functionName":{"name":"clean_up_bytearray_end_slots_string_storage","nodeType":"YulIdentifier","src":"2994:43:181"},"nodeType":"YulFunctionCall","src":"2994:97:181"},"nodeType":"YulExpressionStatement","src":"2994:97:181"},{"nodeType":"YulVariableDeclaration","src":"3100:18:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3117:1:181","type":"","value":"0"},"variables":[{"name":"srcOffset","nodeType":"YulTypedName","src":"3104:9:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3127:23:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3146:4:181","type":"","value":"0x20"},"variables":[{"name":"srcOffset_1","nodeType":"YulTypedName","src":"3131:11:181","type":""}]},{"nodeType":"YulAssignment","src":"3159:24:181","value":{"name":"srcOffset_1","nodeType":"YulIdentifier","src":"3172:11:181"},"variableNames":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"3159:9:181"}]},{"cases":[{"body":{"nodeType":"YulBlock","src":"3229:656:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3243:35:181","value":{"arguments":[{"name":"newLen","nodeType":"YulIdentifier","src":"3262:6:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3274:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3270:3:181"},"nodeType":"YulFunctionCall","src":"3270:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3258:3:181"},"nodeType":"YulFunctionCall","src":"3258:20:181"},"variables":[{"name":"loopEnd","nodeType":"YulTypedName","src":"3247:7:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3291:49:181","value":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"3335:4:181"}],"functionName":{"name":"array_dataslot_string_storage","nodeType":"YulIdentifier","src":"3305:29:181"},"nodeType":"YulFunctionCall","src":"3305:35:181"},"variables":[{"name":"dstPtr","nodeType":"YulTypedName","src":"3295:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3353:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3362:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"3357:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3440:172:181","statements":[{"expression":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"3465:6:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3483:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"3488:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3479:3:181"},"nodeType":"YulFunctionCall","src":"3479:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3473:5:181"},"nodeType":"YulFunctionCall","src":"3473:26:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"3458:6:181"},"nodeType":"YulFunctionCall","src":"3458:42:181"},"nodeType":"YulExpressionStatement","src":"3458:42:181"},{"nodeType":"YulAssignment","src":"3517:24:181","value":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"3531:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3539:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3527:3:181"},"nodeType":"YulFunctionCall","src":"3527:14:181"},"variableNames":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"3517:6:181"}]},{"nodeType":"YulAssignment","src":"3558:40:181","value":{"arguments":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"3575:9:181"},{"name":"srcOffset_1","nodeType":"YulIdentifier","src":"3586:11:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3571:3:181"},"nodeType":"YulFunctionCall","src":"3571:27:181"},"variableNames":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"3558:9:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3387:1:181"},{"name":"loopEnd","nodeType":"YulIdentifier","src":"3390:7:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3384:2:181"},"nodeType":"YulFunctionCall","src":"3384:14:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3399:28:181","statements":[{"nodeType":"YulAssignment","src":"3401:24:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3410:1:181"},{"name":"srcOffset_1","nodeType":"YulIdentifier","src":"3413:11:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3406:3:181"},"nodeType":"YulFunctionCall","src":"3406:19:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"3401:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"3380:3:181","statements":[]},"src":"3376:236:181"},{"body":{"nodeType":"YulBlock","src":"3660:166:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3678:43:181","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3705:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"3710:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3701:3:181"},"nodeType":"YulFunctionCall","src":"3701:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3695:5:181"},"nodeType":"YulFunctionCall","src":"3695:26:181"},"variables":[{"name":"lastValue","nodeType":"YulTypedName","src":"3682:9:181","type":""}]},{"expression":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"3745:6:181"},{"arguments":[{"name":"lastValue","nodeType":"YulIdentifier","src":"3757:9:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3784:1:181","type":"","value":"3"},{"name":"newLen","nodeType":"YulIdentifier","src":"3787:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3780:3:181"},"nodeType":"YulFunctionCall","src":"3780:14:181"},{"kind":"number","nodeType":"YulLiteral","src":"3796:3:181","type":"","value":"248"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3776:3:181"},"nodeType":"YulFunctionCall","src":"3776:24:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3806:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3802:3:181"},"nodeType":"YulFunctionCall","src":"3802:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3772:3:181"},"nodeType":"YulFunctionCall","src":"3772:37:181"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3768:3:181"},"nodeType":"YulFunctionCall","src":"3768:42:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3753:3:181"},"nodeType":"YulFunctionCall","src":"3753:58:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"3738:6:181"},"nodeType":"YulFunctionCall","src":"3738:74:181"},"nodeType":"YulExpressionStatement","src":"3738:74:181"}]},"condition":{"arguments":[{"name":"loopEnd","nodeType":"YulIdentifier","src":"3631:7:181"},{"name":"newLen","nodeType":"YulIdentifier","src":"3640:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3628:2:181"},"nodeType":"YulFunctionCall","src":"3628:19:181"},"nodeType":"YulIf","src":"3625:201:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"3846:4:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3860:1:181","type":"","value":"1"},{"name":"newLen","nodeType":"YulIdentifier","src":"3863:6:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3856:3:181"},"nodeType":"YulFunctionCall","src":"3856:14:181"},{"kind":"number","nodeType":"YulLiteral","src":"3872:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3852:3:181"},"nodeType":"YulFunctionCall","src":"3852:22:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"3839:6:181"},"nodeType":"YulFunctionCall","src":"3839:36:181"},"nodeType":"YulExpressionStatement","src":"3839:36:181"}]},"nodeType":"YulCase","src":"3222:663:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3227:1:181","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"3902:234:181","statements":[{"nodeType":"YulVariableDeclaration","src":"3916:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"3929:1:181","type":"","value":"0"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3920:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3965:67:181","statements":[{"nodeType":"YulAssignment","src":"3983:35:181","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4002:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"4007:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3998:3:181"},"nodeType":"YulFunctionCall","src":"3998:19:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3992:5:181"},"nodeType":"YulFunctionCall","src":"3992:26:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3983:5:181"}]}]},"condition":{"name":"newLen","nodeType":"YulIdentifier","src":"3946:6:181"},"nodeType":"YulIf","src":"3943:89:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"4052:4:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4111:5:181"},{"name":"newLen","nodeType":"YulIdentifier","src":"4118:6:181"}],"functionName":{"name":"extract_used_part_and_set_length_of_short_byte_array","nodeType":"YulIdentifier","src":"4058:52:181"},"nodeType":"YulFunctionCall","src":"4058:67:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"4045:6:181"},"nodeType":"YulFunctionCall","src":"4045:81:181"},"nodeType":"YulExpressionStatement","src":"4045:81:181"}]},"nodeType":"YulCase","src":"3894:242:181","value":"default"}],"expression":{"arguments":[{"name":"newLen","nodeType":"YulIdentifier","src":"3202:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"3210:2:181","type":"","value":"31"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3199:2:181"},"nodeType":"YulFunctionCall","src":"3199:14:181"},"nodeType":"YulSwitch","src":"3192:944:181"}]},"name":"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nodeType":"YulTypedName","src":"2871:4:181","type":""},{"name":"src","nodeType":"YulTypedName","src":"2877:3:181","type":""}],"src":"2790:1352:181"},{"body":{"nodeType":"YulBlock","src":"4360:276:181","statements":[{"nodeType":"YulAssignment","src":"4370:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4382:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4393:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4378:3:181"},"nodeType":"YulFunctionCall","src":"4378:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4370:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4413:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"4424:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4406:6:181"},"nodeType":"YulFunctionCall","src":"4406:25:181"},"nodeType":"YulExpressionStatement","src":"4406:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4451:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4462:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4447:3:181"},"nodeType":"YulFunctionCall","src":"4447:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"4467:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4440:6:181"},"nodeType":"YulFunctionCall","src":"4440:34:181"},"nodeType":"YulExpressionStatement","src":"4440:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4494:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4505:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4490:3:181"},"nodeType":"YulFunctionCall","src":"4490:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"4510:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4483:6:181"},"nodeType":"YulFunctionCall","src":"4483:34:181"},"nodeType":"YulExpressionStatement","src":"4483:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4537:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4548:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4533:3:181"},"nodeType":"YulFunctionCall","src":"4533:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"4553:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4526:6:181"},"nodeType":"YulFunctionCall","src":"4526:34:181"},"nodeType":"YulExpressionStatement","src":"4526:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4580:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4591:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4576:3:181"},"nodeType":"YulFunctionCall","src":"4576:19:181"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"4601:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4617:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"4622:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4613:3:181"},"nodeType":"YulFunctionCall","src":"4613:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"4626:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4609:3:181"},"nodeType":"YulFunctionCall","src":"4609:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4597:3:181"},"nodeType":"YulFunctionCall","src":"4597:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4569:6:181"},"nodeType":"YulFunctionCall","src":"4569:61:181"},"nodeType":"YulExpressionStatement","src":"4569:61:181"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4297:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"4308:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4316:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4324:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4332:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4340:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4351:4:181","type":""}],"src":"4147:489:181"},{"body":{"nodeType":"YulBlock","src":"4815:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4832:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4843:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4825:6:181"},"nodeType":"YulFunctionCall","src":"4825:21:181"},"nodeType":"YulExpressionStatement","src":"4825:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4866:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4877:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4862:3:181"},"nodeType":"YulFunctionCall","src":"4862:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4882:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4855:6:181"},"nodeType":"YulFunctionCall","src":"4855:30:181"},"nodeType":"YulExpressionStatement","src":"4855:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4905:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4916:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4901:3:181"},"nodeType":"YulFunctionCall","src":"4901:18:181"},{"hexValue":"45524332303a206d696e7420746f20746865207a65726f2061646472657373","kind":"string","nodeType":"YulLiteral","src":"4921:33:181","type":"","value":"ERC20: mint to the zero address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4894:6:181"},"nodeType":"YulFunctionCall","src":"4894:61:181"},"nodeType":"YulExpressionStatement","src":"4894:61:181"},{"nodeType":"YulAssignment","src":"4964:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4976:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4987:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4972:3:181"},"nodeType":"YulFunctionCall","src":"4972:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4964:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4792:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4806:4:181","type":""}],"src":"4641:355:181"},{"body":{"nodeType":"YulBlock","src":"5049:174:181","statements":[{"nodeType":"YulAssignment","src":"5059:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5070:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"5073:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5066:3:181"},"nodeType":"YulFunctionCall","src":"5066:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"5059:3:181"}]},{"body":{"nodeType":"YulBlock","src":"5106:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5127:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5134:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"5139:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5130:3:181"},"nodeType":"YulFunctionCall","src":"5130:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5120:6:181"},"nodeType":"YulFunctionCall","src":"5120:31:181"},"nodeType":"YulExpressionStatement","src":"5120:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5171:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5174:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5164:6:181"},"nodeType":"YulFunctionCall","src":"5164:15:181"},"nodeType":"YulExpressionStatement","src":"5164:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5199:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5202:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5192:6:181"},"nodeType":"YulFunctionCall","src":"5192:15:181"},"nodeType":"YulExpressionStatement","src":"5192:15:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5090:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"5093:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5087:2:181"},"nodeType":"YulFunctionCall","src":"5087:10:181"},"nodeType":"YulIf","src":"5084:133:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"5032:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"5035:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"5041:3:181","type":""}],"src":"5001:222:181"},{"body":{"nodeType":"YulBlock","src":"5329:76:181","statements":[{"nodeType":"YulAssignment","src":"5339:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5351:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"5362:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5347:3:181"},"nodeType":"YulFunctionCall","src":"5347:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5339:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5381:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"5392:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5374:6:181"},"nodeType":"YulFunctionCall","src":"5374:25:181"},"nodeType":"YulExpressionStatement","src":"5374:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5298:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5309:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5320:4:181","type":""}],"src":"5228:177:181"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := sub(shl(64, 1), 1)\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        let _4 := 0x20\n        if gt(add(add(offset, _1), _4), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _1) { i := add(i, _4) }\n        {\n            mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n        }\n        mstore(add(add(memPtr, _1), _4), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function array_dataslot_string_storage(ptr) -> data\n    {\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n    }\n    function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n    {\n        if gt(len, 31)\n        {\n            let _1 := 0\n            mstore(_1, array)\n            let data := keccak256(_1, 0x20)\n            let deleteStart := add(data, shr(5, add(startIndex, 31)))\n            if lt(startIndex, 0x20) { deleteStart := data }\n            let _2 := add(data, shr(5, add(len, 31)))\n            let start := deleteStart\n            for { } lt(start, _2) { start := add(start, 1) }\n            { sstore(start, _1) }\n        }\n    }\n    function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n    {\n        used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n    }\n    function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n    {\n        let newLen := mload(src)\n        if gt(newLen, sub(shl(64, 1), 1)) { panic_error_0x41() }\n        clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n        let srcOffset := 0\n        let srcOffset_1 := 0x20\n        srcOffset := srcOffset_1\n        switch gt(newLen, 31)\n        case 1 {\n            let loopEnd := and(newLen, not(31))\n            let dstPtr := array_dataslot_string_storage(slot)\n            let i := 0\n            for { } lt(i, loopEnd) { i := add(i, srcOffset_1) }\n            {\n                sstore(dstPtr, mload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, srcOffset_1)\n            }\n            if lt(loopEnd, newLen)\n            {\n                let lastValue := mload(add(src, srcOffset))\n                sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n            }\n            sstore(slot, add(shl(1, newLen), 1))\n        }\n        default {\n            let value := 0\n            if newLen\n            {\n                value := mload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n        }\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ERC20: mint to the zero address\")\n        tail := add(headStart, 96)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e06040523480156200001157600080fd5b50604051620017ee380380620017ee8339810160408190526200003491620002ba565b60128282604051806040016040528060018152602001603160f81b8152508260039081620000639190620003b2565b506004620000728382620003b2565b506005805460ff191660ff9590951694909417909355508051602091820120825192820192909220600883905560c0818152466080818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801528082019790975260608701949094528501523060a0808601829052835180870382018152959092019092528351939092019290922060075552620001223369d3c21bcecceda10000006200012a565b5050620004a6565b6001600160a01b038216620001855760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200019991906200047e565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200021d57600080fd5b81516001600160401b03808211156200023a576200023a620001f5565b604051601f8301601f19908116603f01168101908282118183101715620002655762000265620001f5565b816040528381526020925086838588010111156200028257600080fd5b600091505b83821015620002a6578582018301518183018401529082019062000287565b600093810190920192909252949350505050565b60008060408385031215620002ce57600080fd5b82516001600160401b0380821115620002e657600080fd5b620002f4868387016200020b565b935060208501519150808211156200030b57600080fd5b506200031a858286016200020b565b9150509250929050565b600181811c908216806200033957607f821691505b6020821081036200035a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001f057600081815260208120601f850160051c81016020861015620003895750805b601f850160051c820191505b81811015620003aa5782815560010162000395565b505050505050565b81516001600160401b03811115620003ce57620003ce620001f5565b620003e681620003df845462000324565b8462000360565b602080601f8311600181146200041e5760008415620004055750858301515b600019600386901b1c1916600185901b178555620003aa565b600085815260208120601f198616915b828110156200044f578886015182559484019460019091019084016200042e565b50858210156200046e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620004a057634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c051611318620004d66000396000610a0c01526000610979015260006109a301526113186000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d714610201578063a9059cbb14610214578063b7b090ee14610227578063d505accf1461023a578063dd62ed3e1461024d57600080fd5b806370a08231146101c05780637ecebe00146101d357806395d89b41146101e65780639dc29fac146101ee57600080fd5b8063313ce567116100de578063313ce567146101765780633644e51514610190578063395093511461019857806340c10f19146101ab57600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610163575b600080fd5b610118610260565b6040516101259190610f06565b60405180910390f35b61014161013c366004610f70565b61026f565b6040519015158152602001610125565b6002545b604051908152602001610125565b610141610171366004610f9a565b610286565b61017e6102a8565b60405160ff9091168152602001610125565b6101556102b6565b6101416101a6366004610f70565b6102c0565b6101be6101b9366004610f70565b6102fc565b005b6101556101ce366004610fd6565b61030a565b6101556101e1366004610fd6565b610328565b610118610346565b6101be6101fc366004610f70565b610350565b61014161020f366004610f70565b61035a565b610141610222366004610f70565b6103d9565b6101be610235366004611041565b6103e6565b6101be6102483660046110ad565b610408565b61015561025b366004611120565b61056c565b606061026a610597565b905090565b600061027c338484610629565b5060015b92915050565b600061029384338461074e565b61029e8484846107c8565b5060019392505050565b600061026a60055460ff1690565b600061026a61096c565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161027c9185906102f7908690611153565b610629565b6103068282610a5a565b5050565b6001600160a01b038116600090815260208190526040812054610280565b6001600160a01b038116600090815260066020526040812054610280565b606061026a610b19565b6103068282610b28565b600080610367338561056c565b9050828110156103cc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61029e3385858403610629565b600061027c3384846107c8565b60036103f384868361120c565b50600461040182848361120c565b5050505050565b834211156104585760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016103c3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104878c610c57565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006104e282610c7f565b905060006104f282878787610ccd565b9050896001600160a01b0316816001600160a01b0316146105555760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016103c3565b6105608a8a8a610629565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546105a69061118a565b80601f01602080910402602001604051908101604052809291908181526020018280546105d29061118a565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b6001600160a01b03831661068b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103c3565b6001600160a01b0382166106ec5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103c3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061075a848461056c565b905060001981146107c257818110156107b55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103c3565b6107c28484848403610629565b50505050565b6001600160a01b03831661082c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103c3565b6001600160a01b03821661088e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103c3565b6001600160a01b038316600090815260208190526040902054818110156109065760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103c3565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36107c2565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156109c557507f000000000000000000000000000000000000000000000000000000000000000046145b156109d1575060075490565b50600854604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a0808301919091528251808303909101815260c0909101909152805191012090565b6001600160a01b038216610ab05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103c3565b8060026000828254610ac29190611153565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6060600480546105a69061118a565b6001600160a01b038216610b885760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103c3565b6001600160a01b03821660009081526020819052604090205481811015610bfc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103c3565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610741565b505050565b6001600160a01b03811660009081526006602052604090208054600181018255905b50919050565b6000610280610c8c61096c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610cde87878787610cf5565b91509150610ceb81610db9565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610d2c5750600090506003610db0565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610d80573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610da957600060019250925050610db0565b9150600090505b94509492505050565b6000816004811115610dcd57610dcd6112cc565b03610dd55750565b6001816004811115610de957610de96112cc565b03610e365760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103c3565b6002816004811115610e4a57610e4a6112cc565b03610e975760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103c3565b6003816004811115610eab57610eab6112cc565b03610f035760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103c3565b50565b600060208083528351808285015260005b81811015610f3357858101830151858201604001528201610f17565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f6b57600080fd5b919050565b60008060408385031215610f8357600080fd5b610f8c83610f54565b946020939093013593505050565b600080600060608486031215610faf57600080fd5b610fb884610f54565b9250610fc660208501610f54565b9150604084013590509250925092565b600060208284031215610fe857600080fd5b610ff182610f54565b9392505050565b60008083601f84011261100a57600080fd5b50813567ffffffffffffffff81111561102257600080fd5b60208301915083602082850101111561103a57600080fd5b9250929050565b6000806000806040858703121561105757600080fd5b843567ffffffffffffffff8082111561106f57600080fd5b61107b88838901610ff8565b9096509450602087013591508082111561109457600080fd5b506110a187828801610ff8565b95989497509550505050565b600080600080600080600060e0888a0312156110c857600080fd5b6110d188610f54565b96506110df60208901610f54565b95506040880135945060608801359350608088013560ff8116811461110357600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561113357600080fd5b61113c83610f54565b915061114a60208401610f54565b90509250929050565b8082018082111561028057634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061119e57607f821691505b602082108103610c7957634e487b7160e01b600052602260045260246000fd5b601f821115610c5257600081815260208120601f850160051c810160208610156111e55750805b601f850160051c820191505b81811015611204578281556001016111f1565b505050505050565b67ffffffffffffffff83111561122457611224611174565b61123883611232835461118a565b836111be565b6000601f84116001811461126c57600085156112545750838201355b600019600387901b1c1916600186901b178355610401565b600083815260209020601f19861690835b8281101561129d578685013582556020948501946001909201910161127d565b50868210156112ba5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220fc9fa7104ced2bd0804bef90105fb24ffacb00742d1be2d37a77174cd20fba2564736f6c63430008110033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x17EE CODESIZE SUB DUP1 PUSH3 0x17EE DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x2BA JUMP JUMPDEST PUSH1 0x12 DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE POP DUP3 PUSH1 0x3 SWAP1 DUP2 PUSH3 0x63 SWAP2 SWAP1 PUSH3 0x3B2 JUMP JUMPDEST POP PUSH1 0x4 PUSH3 0x72 DUP4 DUP3 PUSH3 0x3B2 JUMP JUMPDEST POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP6 SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE POP DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 DUP3 MLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 KECCAK256 PUSH1 0x8 DUP4 SWAP1 SSTORE PUSH1 0xC0 DUP2 DUP2 MSTORE CHAINID PUSH1 0x80 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP2 DUP9 ADD MSTORE DUP1 DUP3 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x60 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP6 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP8 SUB DUP3 ADD DUP2 MSTORE SWAP6 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP4 MLOAD SWAP4 SWAP1 SWAP3 ADD SWAP3 SWAP1 SWAP3 KECCAK256 PUSH1 0x7 SSTORE MSTORE PUSH3 0x122 CALLER PUSH10 0xD3C21BCECCEDA1000000 PUSH3 0x12A JUMP JUMPDEST POP POP PUSH3 0x4A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0x185 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x2 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH3 0x199 SWAP2 SWAP1 PUSH3 0x47E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE MLOAD DUP5 DUP2 MSTORE PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x21D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x23A JUMPI PUSH3 0x23A PUSH3 0x1F5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x265 JUMPI PUSH3 0x265 PUSH3 0x1F5 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x2A6 JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x287 JUMP JUMPDEST PUSH1 0x0 SWAP4 DUP2 ADD SWAP1 SWAP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x2CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x2E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x2F4 DUP7 DUP4 DUP8 ADD PUSH3 0x20B JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x30B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x31A DUP6 DUP3 DUP7 ADD PUSH3 0x20B JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x339 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH3 0x35A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH3 0x1F0 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH3 0x389 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x3AA JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x395 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH3 0x3CE JUMPI PUSH3 0x3CE PUSH3 0x1F5 JUMP JUMPDEST PUSH3 0x3E6 DUP2 PUSH3 0x3DF DUP5 SLOAD PUSH3 0x324 JUMP JUMPDEST DUP5 PUSH3 0x360 JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH3 0x41E JUMPI PUSH1 0x0 DUP5 ISZERO PUSH3 0x405 JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH3 0x3AA JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH3 0x44F JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH3 0x42E JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH3 0x46E JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH3 0x4A0 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x1318 PUSH3 0x4D6 PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0xA0C ADD MSTORE PUSH1 0x0 PUSH2 0x979 ADD MSTORE PUSH1 0x0 PUSH2 0x9A3 ADD MSTORE PUSH2 0x1318 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x10B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x201 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x214 JUMPI DUP1 PUSH4 0xB7B090EE EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x23A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x24D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x1D3 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1E6 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x1EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x12E JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x163 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x118 PUSH2 0x260 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x125 SWAP2 SWAP1 PUSH2 0xF06 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x141 PUSH2 0x13C CALLDATASIZE PUSH1 0x4 PUSH2 0xF70 JUMP JUMPDEST PUSH2 0x26F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x125 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x125 JUMP JUMPDEST PUSH2 0x141 PUSH2 0x171 CALLDATASIZE PUSH1 0x4 PUSH2 0xF9A JUMP JUMPDEST PUSH2 0x286 JUMP JUMPDEST PUSH2 0x17E PUSH2 0x2A8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x125 JUMP JUMPDEST PUSH2 0x155 PUSH2 0x2B6 JUMP JUMPDEST PUSH2 0x141 PUSH2 0x1A6 CALLDATASIZE PUSH1 0x4 PUSH2 0xF70 JUMP JUMPDEST PUSH2 0x2C0 JUMP JUMPDEST PUSH2 0x1BE PUSH2 0x1B9 CALLDATASIZE PUSH1 0x4 PUSH2 0xF70 JUMP JUMPDEST PUSH2 0x2FC JUMP JUMPDEST STOP JUMPDEST PUSH2 0x155 PUSH2 0x1CE CALLDATASIZE PUSH1 0x4 PUSH2 0xFD6 JUMP JUMPDEST PUSH2 0x30A JUMP JUMPDEST PUSH2 0x155 PUSH2 0x1E1 CALLDATASIZE PUSH1 0x4 PUSH2 0xFD6 JUMP JUMPDEST PUSH2 0x328 JUMP JUMPDEST PUSH2 0x118 PUSH2 0x346 JUMP JUMPDEST PUSH2 0x1BE PUSH2 0x1FC CALLDATASIZE PUSH1 0x4 PUSH2 0xF70 JUMP JUMPDEST PUSH2 0x350 JUMP JUMPDEST PUSH2 0x141 PUSH2 0x20F CALLDATASIZE PUSH1 0x4 PUSH2 0xF70 JUMP JUMPDEST PUSH2 0x35A JUMP JUMPDEST PUSH2 0x141 PUSH2 0x222 CALLDATASIZE PUSH1 0x4 PUSH2 0xF70 JUMP JUMPDEST PUSH2 0x3D9 JUMP JUMPDEST PUSH2 0x1BE PUSH2 0x235 CALLDATASIZE PUSH1 0x4 PUSH2 0x1041 JUMP JUMPDEST PUSH2 0x3E6 JUMP JUMPDEST PUSH2 0x1BE PUSH2 0x248 CALLDATASIZE PUSH1 0x4 PUSH2 0x10AD JUMP JUMPDEST PUSH2 0x408 JUMP JUMPDEST PUSH2 0x155 PUSH2 0x25B CALLDATASIZE PUSH1 0x4 PUSH2 0x1120 JUMP JUMPDEST PUSH2 0x56C JUMP JUMPDEST PUSH1 0x60 PUSH2 0x26A PUSH2 0x597 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27C CALLER DUP5 DUP5 PUSH2 0x629 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x293 DUP5 CALLER DUP5 PUSH2 0x74E JUMP JUMPDEST PUSH2 0x29E DUP5 DUP5 DUP5 PUSH2 0x7C8 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x26A PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x26A PUSH2 0x96C JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x27C SWAP2 DUP6 SWAP1 PUSH2 0x2F7 SWAP1 DUP7 SWAP1 PUSH2 0x1153 JUMP JUMPDEST PUSH2 0x629 JUMP JUMPDEST PUSH2 0x306 DUP3 DUP3 PUSH2 0xA5A JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x280 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x280 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x26A PUSH2 0xB19 JUMP JUMPDEST PUSH2 0x306 DUP3 DUP3 PUSH2 0xB28 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x367 CALLER DUP6 PUSH2 0x56C JUMP JUMPDEST SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0x3CC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x29E CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x629 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27C CALLER DUP5 DUP5 PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x3 PUSH2 0x3F3 DUP5 DUP7 DUP4 PUSH2 0x120C JUMP JUMPDEST POP PUSH1 0x4 PUSH2 0x401 DUP3 DUP5 DUP4 PUSH2 0x120C JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x458 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x487 DUP13 PUSH2 0xC57 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP1 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x4E2 DUP3 PUSH2 0xC7F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4F2 DUP3 DUP8 DUP8 DUP8 PUSH2 0xCCD JUMP JUMPDEST SWAP1 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x555 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH2 0x560 DUP11 DUP11 DUP11 PUSH2 0x629 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x118A JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x5D2 SWAP1 PUSH2 0x118A JUMP JUMPDEST DUP1 ISZERO PUSH2 0x61F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5F4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x61F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x602 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x68B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6EC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x75A DUP5 DUP5 PUSH2 0x56C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x7C2 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x7B5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH2 0x7C2 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x629 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x82C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x88E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x906 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP8 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE SWAP3 MLOAD DUP6 DUP2 MSTORE SWAP1 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x7C2 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ DUP1 ISZERO PUSH2 0x9C5 JUMPI POP PUSH32 0x0 CHAINID EQ JUMPDEST ISZERO PUSH2 0x9D1 JUMPI POP PUSH1 0x7 SLOAD SWAP1 JUMP JUMPDEST POP PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xAB0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST DUP1 PUSH1 0x2 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0xAC2 SWAP2 SWAP1 PUSH2 0x1153 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE MLOAD DUP5 DUP2 MSTORE PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x118A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xB88 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E2066726F6D20746865207A65726F20616464726573 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x73 PUSH1 0xF8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0xBFC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E20616D6F756E7420657863656564732062616C616E PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD DUP8 SWAP1 SUB SWAP1 SSTORE MLOAD DUP6 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0x741 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP1 JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x280 PUSH2 0xC8C PUSH2 0x96C JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH2 0x1901 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x22 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x42 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x62 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xCDE DUP8 DUP8 DUP8 DUP8 PUSH2 0xCF5 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xCEB DUP2 PUSH2 0xDB9 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP4 GT ISZERO PUSH2 0xD2C JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x3 PUSH2 0xDB0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD80 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xDA9 JUMPI PUSH1 0x0 PUSH1 0x1 SWAP3 POP SWAP3 POP POP PUSH2 0xDB0 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xDCD JUMPI PUSH2 0xDCD PUSH2 0x12CC JUMP JUMPDEST SUB PUSH2 0xDD5 JUMPI POP JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xDE9 JUMPI PUSH2 0xDE9 PUSH2 0x12CC JUMP JUMPDEST SUB PUSH2 0xE36 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xE4A JUMPI PUSH2 0xE4A PUSH2 0x12CC JUMP JUMPDEST SUB PUSH2 0xE97 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xEAB JUMPI PUSH2 0xEAB PUSH2 0x12CC JUMP JUMPDEST SUB PUSH2 0xF03 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xF33 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xF17 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xF6B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xF83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF8C DUP4 PUSH2 0xF54 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xFAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFB8 DUP5 PUSH2 0xF54 JUMP JUMPDEST SWAP3 POP PUSH2 0xFC6 PUSH1 0x20 DUP6 ADD PUSH2 0xF54 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xFE8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFF1 DUP3 PUSH2 0xF54 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x100A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1022 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x103A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1057 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x106F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x107B DUP9 DUP4 DUP10 ADD PUSH2 0xFF8 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1094 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10A1 DUP8 DUP3 DUP9 ADD PUSH2 0xFF8 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x10C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10D1 DUP9 PUSH2 0xF54 JUMP JUMPDEST SWAP7 POP PUSH2 0x10DF PUSH1 0x20 DUP10 ADD PUSH2 0xF54 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1103 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1133 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x113C DUP4 PUSH2 0xF54 JUMP JUMPDEST SWAP2 POP PUSH2 0x114A PUSH1 0x20 DUP5 ADD PUSH2 0xF54 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x280 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x119E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0xC79 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0xC52 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH2 0x11E5 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1204 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x11F1 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x1224 JUMPI PUSH2 0x1224 PUSH2 0x1174 JUMP JUMPDEST PUSH2 0x1238 DUP4 PUSH2 0x1232 DUP4 SLOAD PUSH2 0x118A JUMP JUMPDEST DUP4 PUSH2 0x11BE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP5 GT PUSH1 0x1 DUP2 EQ PUSH2 0x126C JUMPI PUSH1 0x0 DUP6 ISZERO PUSH2 0x1254 JUMPI POP DUP4 DUP3 ADD CALLDATALOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP8 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP7 SWAP1 SHL OR DUP4 SSTORE PUSH2 0x401 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP1 DUP4 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x129D JUMPI DUP7 DUP6 ADD CALLDATALOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x127D JUMP JUMPDEST POP DUP7 DUP3 LT ISZERO PUSH2 0x12BA JUMPI PUSH1 0x0 NOT PUSH1 0xF8 DUP9 PUSH1 0x3 SHL AND SHR NOT DUP5 DUP8 ADD CALLDATALOAD AND DUP2 SSTORE JUMPDEST POP POP PUSH1 0x1 DUP6 PUSH1 0x1 SHL ADD DUP4 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xFC SWAP16 0xA7 LT 0x4C 0xED 0x2B 0xD0 DUP1 0x4B 0xEF SWAP1 LT 0x5F 0xB2 0x4F STATICCALL 0xCB STOP PUSH21 0x2D1BE2D37A77174CD20FBA2564736F6C6343000811 STOP CALLER ","sourceMap":"461:1230:180:-:0;;;507:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;569:2;573:5;580:7;4234:558:86;;;;;;;;;;;;;-1:-1:-1;;;4234:558:86;;;4378:5;4370;:13;;;;;;:::i;:::-;-1:-1:-1;4389:7:86;:17;4399:7;4389;:17;:::i;:::-;-1:-1:-1;4412:9:86;:21;;-1:-1:-1;;4412:21:86;;;;;;;;;;;;;-1:-1:-1;4475:23:86;;;;;;;4528:26;;;;;;;;;4560:12;:25;;;4591:31;;;;4647:13;4628:32;;;;-1:-1:-1;17623:73:86;;3392:95;17623:73;;;4406:25:181;4447:18;;;4440:34;;;;4490:18;;;4483:34;;;;4533:18;;4526:34;17690:4:86;4576:19:181;;;;4569:61;;;17623:73:86;;;;;;;;;4378:19:181;;;;17623:73:86;;;17613:84;;;;;;;;;;4666:24;:87;4759:28;600:32:180::1;606:10;618:13;600:5;:32::i;:::-;507:130:::0;;461:1230;;10731:505:86;-1:-1:-1;;;;;10812:22:86;;10804:66;;;;-1:-1:-1;;;10804:66:86;;4843:2:181;10804:66:86;;;4825:21:181;4882:2;4862:18;;;4855:30;4921:33;4901:18;;;4894:61;4972:18;;10804:66:86;;;;;;;;10951:7;10935:12;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;11088:19:86;;:9;:19;;;;;;;;;;;:30;;;;;;11135:39;5374:25:181;;;11135:39:86;;5347:18:181;11135:39:86;;;;;;;10731:505;;:::o;14138:110::-;;;;:::o;14:127:181:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:840;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:181;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:181;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;730:3;725:2;720;712:6;708:15;704:24;701:33;698:53;;;747:1;744;737:12;698:53;769:1;760:10;;779:133;793:2;790:1;787:9;779:133;;;881:14;;;877:23;;871:30;850:14;;;846:23;;839:63;804:10;;;;779:133;;;954:1;932:15;;;928:24;;;921:35;;;;936:6;146:840;-1:-1:-1;;;;146:840:181:o;991:562::-;1090:6;1098;1151:2;1139:9;1130:7;1126:23;1122:32;1119:52;;;1167:1;1164;1157:12;1119:52;1194:16;;-1:-1:-1;;;;;1259:14:181;;;1256:34;;;1286:1;1283;1276:12;1256:34;1309:61;1362:7;1353:6;1342:9;1338:22;1309:61;:::i;:::-;1299:71;;1416:2;1405:9;1401:18;1395:25;1379:41;;1445:2;1435:8;1432:16;1429:36;;;1461:1;1458;1451:12;1429:36;;1484:63;1539:7;1528:8;1517:9;1513:24;1484:63;:::i;:::-;1474:73;;;991:562;;;;;:::o;1558:380::-;1637:1;1633:12;;;;1680;;;1701:61;;1755:4;1747:6;1743:17;1733:27;;1701:61;1808:2;1800:6;1797:14;1777:18;1774:38;1771:161;;1854:10;1849:3;1845:20;1842:1;1835:31;1889:4;1886:1;1879:15;1917:4;1914:1;1907:15;1771:161;;1558:380;;;:::o;2069:545::-;2171:2;2166:3;2163:11;2160:448;;;2207:1;2232:5;2228:2;2221:17;2277:4;2273:2;2263:19;2347:2;2335:10;2331:19;2328:1;2324:27;2318:4;2314:38;2383:4;2371:10;2368:20;2365:47;;;-1:-1:-1;2406:4:181;2365:47;2461:2;2456:3;2452:12;2449:1;2445:20;2439:4;2435:31;2425:41;;2516:82;2534:2;2527:5;2524:13;2516:82;;;2579:17;;;2560:1;2549:13;2516:82;;;2520:3;;;2069:545;;;:::o;2790:1352::-;2910:10;;-1:-1:-1;;;;;2932:30:181;;2929:56;;;2965:18;;:::i;:::-;2994:97;3084:6;3044:38;3076:4;3070:11;3044:38;:::i;:::-;3038:4;2994:97;:::i;:::-;3146:4;;3210:2;3199:14;;3227:1;3222:663;;;;3929:1;3946:6;3943:89;;;-1:-1:-1;3998:19:181;;;3992:26;3943:89;-1:-1:-1;;2747:1:181;2743:11;;;2739:24;2735:29;2725:40;2771:1;2767:11;;;2722:57;4045:81;;3192:944;;3222:663;2016:1;2009:14;;;2053:4;2040:18;;-1:-1:-1;;3258:20:181;;;3376:236;3390:7;3387:1;3384:14;3376:236;;;3479:19;;;3473:26;3458:42;;3571:27;;;;3539:1;3527:14;;;;3406:19;;3376:236;;;3380:3;3640:6;3631:7;3628:19;3625:201;;;3701:19;;;3695:26;-1:-1:-1;;3784:1:181;3780:14;;;3796:3;3776:24;3772:37;3768:42;3753:58;3738:74;;3625:201;-1:-1:-1;;;;;3872:1:181;3856:14;;;3852:22;3839:36;;-1:-1:-1;2790:1352:181:o;5001:222::-;5066:9;;;5087:10;;;5084:133;;;5139:10;5134:3;5130:20;5127:1;5120:31;5174:4;5171:1;5164:15;5202:4;5199:1;5192:15;5084:133;5001:222;;;;:::o;5228:177::-;461:1230:180;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DOMAIN_SEPARATOR_23936":{"entryPoint":694,"id":23936,"parameterSlots":0,"returnSlots":1},"@_afterTokenTransfer_23836":{"entryPoint":null,"id":23836,"parameterSlots":3,"returnSlots":0},"@_approve_23771":{"entryPoint":1577,"id":23771,"parameterSlots":3,"returnSlots":0},"@_beforeTokenTransfer_23825":{"entryPoint":null,"id":23825,"parameterSlots":3,"returnSlots":0},"@_buildDomainSeparator_24022":{"entryPoint":null,"id":24022,"parameterSlots":3,"returnSlots":1},"@_burn_23726":{"entryPoint":2856,"id":23726,"parameterSlots":2,"returnSlots":0},"@_domainSeparatorV4_23994":{"entryPoint":2412,"id":23994,"parameterSlots":0,"returnSlots":1},"@_hashTypedDataV4_24038":{"entryPoint":3199,"id":24038,"parameterSlots":1,"returnSlots":1},"@_mint_23654":{"entryPoint":2650,"id":23654,"parameterSlots":2,"returnSlots":0},"@_spendAllowance_23814":{"entryPoint":1870,"id":23814,"parameterSlots":3,"returnSlots":0},"@_throwError_11869":{"entryPoint":3513,"id":11869,"parameterSlots":1,"returnSlots":0},"@_transfer_23597":{"entryPoint":1992,"id":23597,"parameterSlots":3,"returnSlots":0},"@_useNonce_23965":{"entryPoint":3159,"id":23965,"parameterSlots":1,"returnSlots":1},"@allowance_23405":{"entryPoint":1388,"id":23405,"parameterSlots":2,"returnSlots":1},"@approve_23426":{"entryPoint":623,"id":23426,"parameterSlots":2,"returnSlots":1},"@balanceOf_23366":{"entryPoint":null,"id":23366,"parameterSlots":1,"returnSlots":1},"@balanceOf_51869":{"entryPoint":778,"id":51869,"parameterSlots":1,"returnSlots":1},"@burn_51895":{"entryPoint":848,"id":51895,"parameterSlots":2,"returnSlots":0},"@current_11524":{"entryPoint":null,"id":11524,"parameterSlots":1,"returnSlots":1},"@decimals_23342":{"entryPoint":null,"id":23342,"parameterSlots":0,"returnSlots":1},"@decimals_51934":{"entryPoint":680,"id":51934,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_23520":{"entryPoint":858,"id":23520,"parameterSlots":2,"returnSlots":1},"@increaseAllowance_23482":{"entryPoint":704,"id":23482,"parameterSlots":2,"returnSlots":1},"@increment_11538":{"entryPoint":null,"id":11538,"parameterSlots":1,"returnSlots":0},"@mint_51882":{"entryPoint":764,"id":51882,"parameterSlots":2,"returnSlots":0},"@name_23322":{"entryPoint":1431,"id":23322,"parameterSlots":0,"returnSlots":1},"@name_51921":{"entryPoint":608,"id":51921,"parameterSlots":0,"returnSlots":1},"@nonces_23925":{"entryPoint":808,"id":23925,"parameterSlots":1,"returnSlots":1},"@permit_23909":{"entryPoint":1032,"id":23909,"parameterSlots":7,"returnSlots":0},"@recover_12116":{"entryPoint":3277,"id":12116,"parameterSlots":4,"returnSlots":1},"@setDetails_51853":{"entryPoint":998,"id":51853,"parameterSlots":4,"returnSlots":0},"@symbol_23332":{"entryPoint":2841,"id":23332,"parameterSlots":0,"returnSlots":1},"@symbol_51908":{"entryPoint":838,"id":51908,"parameterSlots":0,"returnSlots":1},"@toTypedDataHash_12175":{"entryPoint":null,"id":12175,"parameterSlots":2,"returnSlots":1},"@totalSupply_23352":{"entryPoint":null,"id":23352,"parameterSlots":0,"returnSlots":1},"@transferFrom_23455":{"entryPoint":646,"id":23455,"parameterSlots":3,"returnSlots":1},"@transfer_23387":{"entryPoint":985,"id":23387,"parameterSlots":2,"returnSlots":1},"@tryRecover_12083":{"entryPoint":3317,"id":12083,"parameterSlots":4,"returnSlots":2},"abi_decode_address":{"entryPoint":3924,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_string_calldata":{"entryPoint":4088,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":4054,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":4384,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":3994,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":4269,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":3952,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_string_calldata_ptrt_string_calldata_ptr":{"entryPoint":4161,"id":null,"parameterSlots":2,"returnSlots":4},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":3846,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3e89525a63fb9c966b61cf8f5305156de8420bc773a2b60828a2f32c3c5797bd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_94ca1ab58dfda790a1782ffbb0c0a140ec51d4148dbeecc6c39e37b25ff4b124__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_dataslot_string_storage":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":4435,"id":null,"parameterSlots":2,"returnSlots":1},"clean_up_bytearray_end_slots_string_storage":{"entryPoint":4542,"id":null,"parameterSlots":3,"returnSlots":0},"copy_byte_array_to_storage_from_t_string_calldata_ptr_to_t_string_storage":{"entryPoint":4620,"id":null,"parameterSlots":3,"returnSlots":0},"extract_byte_array_length":{"entryPoint":4490,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x21":{"entryPoint":4812,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":4468,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:14923:181","statements":[{"nodeType":"YulBlock","src":"6:3:181","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:427:181","statements":[{"nodeType":"YulVariableDeclaration","src":"145:12:181","value":{"kind":"number","nodeType":"YulLiteral","src":"155:2:181","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"149:2:181","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"173:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"184:2:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"166:6:181"},"nodeType":"YulFunctionCall","src":"166:21:181"},"nodeType":"YulExpressionStatement","src":"166:21:181"},{"nodeType":"YulVariableDeclaration","src":"196:27:181","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"216:6:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:181"},"nodeType":"YulFunctionCall","src":"210:13:181"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"200:6:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"243:9:181"},{"name":"_1","nodeType":"YulIdentifier","src":"254:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"239:3:181"},"nodeType":"YulFunctionCall","src":"239:18:181"},{"name":"length","nodeType":"YulIdentifier","src":"259:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:181"},"nodeType":"YulFunctionCall","src":"232:34:181"},"nodeType":"YulExpressionStatement","src":"232:34:181"},{"nodeType":"YulVariableDeclaration","src":"275:10:181","value":{"kind":"number","nodeType":"YulLiteral","src":"284:1:181","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"279:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"344:90:181","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"373:9:181"},{"name":"i","nodeType":"YulIdentifier","src":"384:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"369:3:181"},"nodeType":"YulFunctionCall","src":"369:17:181"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:181"},"nodeType":"YulFunctionCall","src":"365:26:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"407:6:181"},{"name":"i","nodeType":"YulIdentifier","src":"415:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"403:3:181"},"nodeType":"YulFunctionCall","src":"403:14:181"},{"name":"_1","nodeType":"YulIdentifier","src":"419:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:181"},"nodeType":"YulFunctionCall","src":"399:23:181"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"393:5:181"},"nodeType":"YulFunctionCall","src":"393:30:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:181"},"nodeType":"YulFunctionCall","src":"358:66:181"},"nodeType":"YulExpressionStatement","src":"358:66:181"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"305:1:181"},{"name":"length","nodeType":"YulIdentifier","src":"308:6:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"302:2:181"},"nodeType":"YulFunctionCall","src":"302:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"316:19:181","statements":[{"nodeType":"YulAssignment","src":"318:15:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"327:1:181"},{"name":"_1","nodeType":"YulIdentifier","src":"330:2:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:181"},"nodeType":"YulFunctionCall","src":"323:10:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"318:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"298:3:181","statements":[]},"src":"294:140:181"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"458:9:181"},{"name":"length","nodeType":"YulIdentifier","src":"469:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"454:3:181"},"nodeType":"YulFunctionCall","src":"454:22:181"},{"kind":"number","nodeType":"YulLiteral","src":"478:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"450:3:181"},"nodeType":"YulFunctionCall","src":"450:31:181"},{"kind":"number","nodeType":"YulLiteral","src":"483:1:181","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"443:6:181"},"nodeType":"YulFunctionCall","src":"443:42:181"},"nodeType":"YulExpressionStatement","src":"443:42:181"},{"nodeType":"YulAssignment","src":"494:62:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"510:9:181"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"529:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"537:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"525:3:181"},"nodeType":"YulFunctionCall","src":"525:15:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"546:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"542:3:181"},"nodeType":"YulFunctionCall","src":"542:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"521:3:181"},"nodeType":"YulFunctionCall","src":"521:29:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"506:3:181"},"nodeType":"YulFunctionCall","src":"506:45:181"},{"kind":"number","nodeType":"YulLiteral","src":"553:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"502:3:181"},"nodeType":"YulFunctionCall","src":"502:54:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"494:4:181"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"115:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"126:4:181","type":""}],"src":"14:548:181"},{"body":{"nodeType":"YulBlock","src":"616:124:181","statements":[{"nodeType":"YulAssignment","src":"626:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"648:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"635:12:181"},"nodeType":"YulFunctionCall","src":"635:20:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"626:5:181"}]},{"body":{"nodeType":"YulBlock","src":"718:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"727:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"730:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"720:6:181"},"nodeType":"YulFunctionCall","src":"720:12:181"},"nodeType":"YulExpressionStatement","src":"720:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"677:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"688:5:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"703:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"708:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"699:3:181"},"nodeType":"YulFunctionCall","src":"699:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"712:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"695:3:181"},"nodeType":"YulFunctionCall","src":"695:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"684:3:181"},"nodeType":"YulFunctionCall","src":"684:31:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"674:2:181"},"nodeType":"YulFunctionCall","src":"674:42:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"667:6:181"},"nodeType":"YulFunctionCall","src":"667:50:181"},"nodeType":"YulIf","src":"664:70:181"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"595:6:181","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"606:5:181","type":""}],"src":"567:173:181"},{"body":{"nodeType":"YulBlock","src":"832:167:181","statements":[{"body":{"nodeType":"YulBlock","src":"878:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"887:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"890:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"880:6:181"},"nodeType":"YulFunctionCall","src":"880:12:181"},"nodeType":"YulExpressionStatement","src":"880:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"853:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"862:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"849:3:181"},"nodeType":"YulFunctionCall","src":"849:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"874:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"845:3:181"},"nodeType":"YulFunctionCall","src":"845:32:181"},"nodeType":"YulIf","src":"842:52:181"},{"nodeType":"YulAssignment","src":"903:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"932:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"913:18:181"},"nodeType":"YulFunctionCall","src":"913:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"903:6:181"}]},{"nodeType":"YulAssignment","src":"951:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"978:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"989:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"974:3:181"},"nodeType":"YulFunctionCall","src":"974:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"961:12:181"},"nodeType":"YulFunctionCall","src":"961:32:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"951:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"790:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"801:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"813:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"821:6:181","type":""}],"src":"745:254:181"},{"body":{"nodeType":"YulBlock","src":"1099:92:181","statements":[{"nodeType":"YulAssignment","src":"1109:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1121:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1132:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1117:3:181"},"nodeType":"YulFunctionCall","src":"1117:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1109:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1151:9:181"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1176:6:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1169:6:181"},"nodeType":"YulFunctionCall","src":"1169:14:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1162:6:181"},"nodeType":"YulFunctionCall","src":"1162:22:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1144:6:181"},"nodeType":"YulFunctionCall","src":"1144:41:181"},"nodeType":"YulExpressionStatement","src":"1144:41:181"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1068:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1079:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1090:4:181","type":""}],"src":"1004:187:181"},{"body":{"nodeType":"YulBlock","src":"1297:76:181","statements":[{"nodeType":"YulAssignment","src":"1307:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1319:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1330:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1315:3:181"},"nodeType":"YulFunctionCall","src":"1315:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1307:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1349:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"1360:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1342:6:181"},"nodeType":"YulFunctionCall","src":"1342:25:181"},"nodeType":"YulExpressionStatement","src":"1342:25:181"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1266:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1277:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1288:4:181","type":""}],"src":"1196:177:181"},{"body":{"nodeType":"YulBlock","src":"1482:224:181","statements":[{"body":{"nodeType":"YulBlock","src":"1528:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1537:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1540:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1530:6:181"},"nodeType":"YulFunctionCall","src":"1530:12:181"},"nodeType":"YulExpressionStatement","src":"1530:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1503:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"1512:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1499:3:181"},"nodeType":"YulFunctionCall","src":"1499:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"1524:2:181","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1495:3:181"},"nodeType":"YulFunctionCall","src":"1495:32:181"},"nodeType":"YulIf","src":"1492:52:181"},{"nodeType":"YulAssignment","src":"1553:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1582:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1563:18:181"},"nodeType":"YulFunctionCall","src":"1563:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1553:6:181"}]},{"nodeType":"YulAssignment","src":"1601:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1634:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1645:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1630:3:181"},"nodeType":"YulFunctionCall","src":"1630:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1611:18:181"},"nodeType":"YulFunctionCall","src":"1611:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1601:6:181"}]},{"nodeType":"YulAssignment","src":"1658:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1685:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1696:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1681:3:181"},"nodeType":"YulFunctionCall","src":"1681:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1668:12:181"},"nodeType":"YulFunctionCall","src":"1668:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1658:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1432:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1443:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1455:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1463:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1471:6:181","type":""}],"src":"1378:328:181"},{"body":{"nodeType":"YulBlock","src":"1808:87:181","statements":[{"nodeType":"YulAssignment","src":"1818:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1830:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"1841:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1826:3:181"},"nodeType":"YulFunctionCall","src":"1826:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1818:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1860:9:181"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1875:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"1883:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1871:3:181"},"nodeType":"YulFunctionCall","src":"1871:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1853:6:181"},"nodeType":"YulFunctionCall","src":"1853:36:181"},"nodeType":"YulExpressionStatement","src":"1853:36:181"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1777:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1788:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1799:4:181","type":""}],"src":"1711:184:181"},{"body":{"nodeType":"YulBlock","src":"2001:76:181","statements":[{"nodeType":"YulAssignment","src":"2011:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2023:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"2034:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2019:3:181"},"nodeType":"YulFunctionCall","src":"2019:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2011:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2053:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"2064:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2046:6:181"},"nodeType":"YulFunctionCall","src":"2046:25:181"},"nodeType":"YulExpressionStatement","src":"2046:25:181"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1970:9:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1981:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1992:4:181","type":""}],"src":"1900:177:181"},{"body":{"nodeType":"YulBlock","src":"2152:116:181","statements":[{"body":{"nodeType":"YulBlock","src":"2198:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2207:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2210:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2200:6:181"},"nodeType":"YulFunctionCall","src":"2200:12:181"},"nodeType":"YulExpressionStatement","src":"2200:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2173:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2182:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2169:3:181"},"nodeType":"YulFunctionCall","src":"2169:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2194:2:181","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2165:3:181"},"nodeType":"YulFunctionCall","src":"2165:32:181"},"nodeType":"YulIf","src":"2162:52:181"},{"nodeType":"YulAssignment","src":"2223:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2252:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2233:18:181"},"nodeType":"YulFunctionCall","src":"2233:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2223:6:181"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2118:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2129:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2141:6:181","type":""}],"src":"2082:186:181"},{"body":{"nodeType":"YulBlock","src":"2346:275:181","statements":[{"body":{"nodeType":"YulBlock","src":"2395:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2404:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2407:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2397:6:181"},"nodeType":"YulFunctionCall","src":"2397:12:181"},"nodeType":"YulExpressionStatement","src":"2397:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2374:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2382:4:181","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2370:3:181"},"nodeType":"YulFunctionCall","src":"2370:17:181"},{"name":"end","nodeType":"YulIdentifier","src":"2389:3:181"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2366:3:181"},"nodeType":"YulFunctionCall","src":"2366:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2359:6:181"},"nodeType":"YulFunctionCall","src":"2359:35:181"},"nodeType":"YulIf","src":"2356:55:181"},{"nodeType":"YulAssignment","src":"2420:30:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2443:6:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2430:12:181"},"nodeType":"YulFunctionCall","src":"2430:20:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2420:6:181"}]},{"body":{"nodeType":"YulBlock","src":"2493:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2502:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2505:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2495:6:181"},"nodeType":"YulFunctionCall","src":"2495:12:181"},"nodeType":"YulExpressionStatement","src":"2495:12:181"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2465:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2473:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2462:2:181"},"nodeType":"YulFunctionCall","src":"2462:30:181"},"nodeType":"YulIf","src":"2459:50:181"},{"nodeType":"YulAssignment","src":"2518:29:181","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2534:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"2542:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2530:3:181"},"nodeType":"YulFunctionCall","src":"2530:17:181"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"2518:8:181"}]},{"body":{"nodeType":"YulBlock","src":"2599:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2608:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2611:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2601:6:181"},"nodeType":"YulFunctionCall","src":"2601:12:181"},"nodeType":"YulExpressionStatement","src":"2601:12:181"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2570:6:181"},{"name":"length","nodeType":"YulIdentifier","src":"2578:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2566:3:181"},"nodeType":"YulFunctionCall","src":"2566:19:181"},{"kind":"number","nodeType":"YulLiteral","src":"2587:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2562:3:181"},"nodeType":"YulFunctionCall","src":"2562:30:181"},{"name":"end","nodeType":"YulIdentifier","src":"2594:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2559:2:181"},"nodeType":"YulFunctionCall","src":"2559:39:181"},"nodeType":"YulIf","src":"2556:59:181"}]},"name":"abi_decode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2309:6:181","type":""},{"name":"end","nodeType":"YulTypedName","src":"2317:3:181","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"2325:8:181","type":""},{"name":"length","nodeType":"YulTypedName","src":"2335:6:181","type":""}],"src":"2273:348:181"},{"body":{"nodeType":"YulBlock","src":"2753:594:181","statements":[{"body":{"nodeType":"YulBlock","src":"2799:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2808:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2811:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2801:6:181"},"nodeType":"YulFunctionCall","src":"2801:12:181"},"nodeType":"YulExpressionStatement","src":"2801:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2774:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"2783:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2770:3:181"},"nodeType":"YulFunctionCall","src":"2770:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"2795:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2766:3:181"},"nodeType":"YulFunctionCall","src":"2766:32:181"},"nodeType":"YulIf","src":"2763:52:181"},{"nodeType":"YulVariableDeclaration","src":"2824:37:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2851:9:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2838:12:181"},"nodeType":"YulFunctionCall","src":"2838:23:181"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2828:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2870:28:181","value":{"kind":"number","nodeType":"YulLiteral","src":"2880:18:181","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2874:2:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"2925:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2934:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2937:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2927:6:181"},"nodeType":"YulFunctionCall","src":"2927:12:181"},"nodeType":"YulExpressionStatement","src":"2927:12:181"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2913:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"2921:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2910:2:181"},"nodeType":"YulFunctionCall","src":"2910:14:181"},"nodeType":"YulIf","src":"2907:34:181"},{"nodeType":"YulVariableDeclaration","src":"2950:85:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3007:9:181"},{"name":"offset","nodeType":"YulIdentifier","src":"3018:6:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3003:3:181"},"nodeType":"YulFunctionCall","src":"3003:22:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3027:7:181"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"2976:26:181"},"nodeType":"YulFunctionCall","src":"2976:59:181"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"2954:8:181","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"2964:8:181","type":""}]},{"nodeType":"YulAssignment","src":"3044:18:181","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"3054:8:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3044:6:181"}]},{"nodeType":"YulAssignment","src":"3071:18:181","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"3081:8:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3071:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3098:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3131:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3142:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3127:3:181"},"nodeType":"YulFunctionCall","src":"3127:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3114:12:181"},"nodeType":"YulFunctionCall","src":"3114:32:181"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"3102:8:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3175:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3184:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3187:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3177:6:181"},"nodeType":"YulFunctionCall","src":"3177:12:181"},"nodeType":"YulExpressionStatement","src":"3177:12:181"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"3161:8:181"},{"name":"_1","nodeType":"YulIdentifier","src":"3171:2:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3158:2:181"},"nodeType":"YulFunctionCall","src":"3158:16:181"},"nodeType":"YulIf","src":"3155:36:181"},{"nodeType":"YulVariableDeclaration","src":"3200:87:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3257:9:181"},{"name":"offset_1","nodeType":"YulIdentifier","src":"3268:8:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3253:3:181"},"nodeType":"YulFunctionCall","src":"3253:24:181"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3279:7:181"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"3226:26:181"},"nodeType":"YulFunctionCall","src":"3226:61:181"},"variables":[{"name":"value2_1","nodeType":"YulTypedName","src":"3204:8:181","type":""},{"name":"value3_1","nodeType":"YulTypedName","src":"3214:8:181","type":""}]},{"nodeType":"YulAssignment","src":"3296:18:181","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"3306:8:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3296:6:181"}]},{"nodeType":"YulAssignment","src":"3323:18:181","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"3333:8:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3323:6:181"}]}]},"name":"abi_decode_tuple_t_string_calldata_ptrt_string_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2695:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2706:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2718:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2726:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2734:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2742:6:181","type":""}],"src":"2626:721:181"},{"body":{"nodeType":"YulBlock","src":"3522:523:181","statements":[{"body":{"nodeType":"YulBlock","src":"3569:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3578:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3581:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3571:6:181"},"nodeType":"YulFunctionCall","src":"3571:12:181"},"nodeType":"YulExpressionStatement","src":"3571:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3543:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"3552:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3539:3:181"},"nodeType":"YulFunctionCall","src":"3539:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"3564:3:181","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3535:3:181"},"nodeType":"YulFunctionCall","src":"3535:33:181"},"nodeType":"YulIf","src":"3532:53:181"},{"nodeType":"YulAssignment","src":"3594:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3623:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3604:18:181"},"nodeType":"YulFunctionCall","src":"3604:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3594:6:181"}]},{"nodeType":"YulAssignment","src":"3642:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3675:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3686:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3671:3:181"},"nodeType":"YulFunctionCall","src":"3671:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3652:18:181"},"nodeType":"YulFunctionCall","src":"3652:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3642:6:181"}]},{"nodeType":"YulAssignment","src":"3699:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3726:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3737:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3722:3:181"},"nodeType":"YulFunctionCall","src":"3722:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3709:12:181"},"nodeType":"YulFunctionCall","src":"3709:32:181"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3699:6:181"}]},{"nodeType":"YulAssignment","src":"3750:42:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3777:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3788:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3773:3:181"},"nodeType":"YulFunctionCall","src":"3773:18:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3760:12:181"},"nodeType":"YulFunctionCall","src":"3760:32:181"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3750:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"3801:46:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3831:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3842:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3827:3:181"},"nodeType":"YulFunctionCall","src":"3827:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3814:12:181"},"nodeType":"YulFunctionCall","src":"3814:33:181"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3805:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"3895:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3904:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3907:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3897:6:181"},"nodeType":"YulFunctionCall","src":"3897:12:181"},"nodeType":"YulExpressionStatement","src":"3897:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3869:5:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3880:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"3887:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3876:3:181"},"nodeType":"YulFunctionCall","src":"3876:16:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3866:2:181"},"nodeType":"YulFunctionCall","src":"3866:27:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3859:6:181"},"nodeType":"YulFunctionCall","src":"3859:35:181"},"nodeType":"YulIf","src":"3856:55:181"},{"nodeType":"YulAssignment","src":"3920:15:181","value":{"name":"value","nodeType":"YulIdentifier","src":"3930:5:181"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3920:6:181"}]},{"nodeType":"YulAssignment","src":"3944:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3971:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"3982:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3967:3:181"},"nodeType":"YulFunctionCall","src":"3967:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3954:12:181"},"nodeType":"YulFunctionCall","src":"3954:33:181"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"3944:6:181"}]},{"nodeType":"YulAssignment","src":"3996:43:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4023:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4034:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4019:3:181"},"nodeType":"YulFunctionCall","src":"4019:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4006:12:181"},"nodeType":"YulFunctionCall","src":"4006:33:181"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"3996:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3440:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3451:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3463:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3471:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3479:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3487:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3495:6:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3503:6:181","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3511:6:181","type":""}],"src":"3352:693:181"},{"body":{"nodeType":"YulBlock","src":"4137:173:181","statements":[{"body":{"nodeType":"YulBlock","src":"4183:16:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4192:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4195:1:181","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4185:6:181"},"nodeType":"YulFunctionCall","src":"4185:12:181"},"nodeType":"YulExpressionStatement","src":"4185:12:181"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4158:7:181"},{"name":"headStart","nodeType":"YulIdentifier","src":"4167:9:181"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4154:3:181"},"nodeType":"YulFunctionCall","src":"4154:23:181"},{"kind":"number","nodeType":"YulLiteral","src":"4179:2:181","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4150:3:181"},"nodeType":"YulFunctionCall","src":"4150:32:181"},"nodeType":"YulIf","src":"4147:52:181"},{"nodeType":"YulAssignment","src":"4208:39:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4237:9:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"4218:18:181"},"nodeType":"YulFunctionCall","src":"4218:29:181"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4208:6:181"}]},{"nodeType":"YulAssignment","src":"4256:48:181","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4289:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4300:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4285:3:181"},"nodeType":"YulFunctionCall","src":"4285:18:181"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"4266:18:181"},"nodeType":"YulFunctionCall","src":"4266:38:181"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4256:6:181"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4095:9:181","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4106:7:181","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4118:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4126:6:181","type":""}],"src":"4050:260:181"},{"body":{"nodeType":"YulBlock","src":"4363:174:181","statements":[{"nodeType":"YulAssignment","src":"4373:16:181","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4384:1:181"},{"name":"y","nodeType":"YulIdentifier","src":"4387:1:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4380:3:181"},"nodeType":"YulFunctionCall","src":"4380:9:181"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"4373:3:181"}]},{"body":{"nodeType":"YulBlock","src":"4420:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4441:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4448:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"4453:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4444:3:181"},"nodeType":"YulFunctionCall","src":"4444:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4434:6:181"},"nodeType":"YulFunctionCall","src":"4434:31:181"},"nodeType":"YulExpressionStatement","src":"4434:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4485:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4488:4:181","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4478:6:181"},"nodeType":"YulFunctionCall","src":"4478:15:181"},"nodeType":"YulExpressionStatement","src":"4478:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4513:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4516:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4506:6:181"},"nodeType":"YulFunctionCall","src":"4506:15:181"},"nodeType":"YulExpressionStatement","src":"4506:15:181"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4404:1:181"},{"name":"sum","nodeType":"YulIdentifier","src":"4407:3:181"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4401:2:181"},"nodeType":"YulFunctionCall","src":"4401:10:181"},"nodeType":"YulIf","src":"4398:133:181"}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4346:1:181","type":""},{"name":"y","nodeType":"YulTypedName","src":"4349:1:181","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"4355:3:181","type":""}],"src":"4315:222:181"},{"body":{"nodeType":"YulBlock","src":"4716:227:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4733:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4744:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4726:6:181"},"nodeType":"YulFunctionCall","src":"4726:21:181"},"nodeType":"YulExpressionStatement","src":"4726:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4767:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4778:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4763:3:181"},"nodeType":"YulFunctionCall","src":"4763:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"4783:2:181","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4756:6:181"},"nodeType":"YulFunctionCall","src":"4756:30:181"},"nodeType":"YulExpressionStatement","src":"4756:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4806:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4817:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4802:3:181"},"nodeType":"YulFunctionCall","src":"4802:18:181"},{"hexValue":"45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77","kind":"string","nodeType":"YulLiteral","src":"4822:34:181","type":"","value":"ERC20: decreased allowance below"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4795:6:181"},"nodeType":"YulFunctionCall","src":"4795:62:181"},"nodeType":"YulExpressionStatement","src":"4795:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4877:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4888:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4873:3:181"},"nodeType":"YulFunctionCall","src":"4873:18:181"},{"hexValue":"207a65726f","kind":"string","nodeType":"YulLiteral","src":"4893:7:181","type":"","value":" zero"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4866:6:181"},"nodeType":"YulFunctionCall","src":"4866:35:181"},"nodeType":"YulExpressionStatement","src":"4866:35:181"},{"nodeType":"YulAssignment","src":"4910:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4922:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"4933:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4918:3:181"},"nodeType":"YulFunctionCall","src":"4918:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4910:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4693:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4707:4:181","type":""}],"src":"4542:401:181"},{"body":{"nodeType":"YulBlock","src":"4980:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4997:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5004:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"5009:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5000:3:181"},"nodeType":"YulFunctionCall","src":"5000:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4990:6:181"},"nodeType":"YulFunctionCall","src":"4990:31:181"},"nodeType":"YulExpressionStatement","src":"4990:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5037:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5040:4:181","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5030:6:181"},"nodeType":"YulFunctionCall","src":"5030:15:181"},"nodeType":"YulExpressionStatement","src":"5030:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5061:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5064:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5054:6:181"},"nodeType":"YulFunctionCall","src":"5054:15:181"},"nodeType":"YulExpressionStatement","src":"5054:15:181"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"4948:127:181"},{"body":{"nodeType":"YulBlock","src":"5135:325:181","statements":[{"nodeType":"YulAssignment","src":"5145:22:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5159:1:181","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"5162:4:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"5155:3:181"},"nodeType":"YulFunctionCall","src":"5155:12:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"5145:6:181"}]},{"nodeType":"YulVariableDeclaration","src":"5176:38:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"5206:4:181"},{"kind":"number","nodeType":"YulLiteral","src":"5212:1:181","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5202:3:181"},"nodeType":"YulFunctionCall","src":"5202:12:181"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"5180:18:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5253:31:181","statements":[{"nodeType":"YulAssignment","src":"5255:27:181","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"5269:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5277:4:181","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5265:3:181"},"nodeType":"YulFunctionCall","src":"5265:17:181"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"5255:6:181"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"5233:18:181"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5226:6:181"},"nodeType":"YulFunctionCall","src":"5226:26:181"},"nodeType":"YulIf","src":"5223:61:181"},{"body":{"nodeType":"YulBlock","src":"5343:111:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5364:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5371:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"5376:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5367:3:181"},"nodeType":"YulFunctionCall","src":"5367:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5357:6:181"},"nodeType":"YulFunctionCall","src":"5357:31:181"},"nodeType":"YulExpressionStatement","src":"5357:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5408:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5411:4:181","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5401:6:181"},"nodeType":"YulFunctionCall","src":"5401:15:181"},"nodeType":"YulExpressionStatement","src":"5401:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5436:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5439:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5429:6:181"},"nodeType":"YulFunctionCall","src":"5429:15:181"},"nodeType":"YulExpressionStatement","src":"5429:15:181"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"5299:18:181"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"5322:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"5330:2:181","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5319:2:181"},"nodeType":"YulFunctionCall","src":"5319:14:181"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5296:2:181"},"nodeType":"YulFunctionCall","src":"5296:38:181"},"nodeType":"YulIf","src":"5293:161:181"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"5115:4:181","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"5124:6:181","type":""}],"src":"5080:380:181"},{"body":{"nodeType":"YulBlock","src":"5521:65:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5538:1:181","type":"","value":"0"},{"name":"ptr","nodeType":"YulIdentifier","src":"5541:3:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5531:6:181"},"nodeType":"YulFunctionCall","src":"5531:14:181"},"nodeType":"YulExpressionStatement","src":"5531:14:181"},{"nodeType":"YulAssignment","src":"5554:26:181","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5572:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5575:4:181","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"5562:9:181"},"nodeType":"YulFunctionCall","src":"5562:18:181"},"variableNames":[{"name":"data","nodeType":"YulIdentifier","src":"5554:4:181"}]}]},"name":"array_dataslot_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"ptr","nodeType":"YulTypedName","src":"5504:3:181","type":""}],"returnVariables":[{"name":"data","nodeType":"YulTypedName","src":"5512:4:181","type":""}],"src":"5465:121:181"},{"body":{"nodeType":"YulBlock","src":"5672:464:181","statements":[{"body":{"nodeType":"YulBlock","src":"5705:425:181","statements":[{"nodeType":"YulVariableDeclaration","src":"5719:11:181","value":{"kind":"number","nodeType":"YulLiteral","src":"5729:1:181","type":"","value":"0"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5723:2:181","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"5750:2:181"},{"name":"array","nodeType":"YulIdentifier","src":"5754:5:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5743:6:181"},"nodeType":"YulFunctionCall","src":"5743:17:181"},"nodeType":"YulExpressionStatement","src":"5743:17:181"},{"nodeType":"YulVariableDeclaration","src":"5773:31:181","value":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"5795:2:181"},{"kind":"number","nodeType":"YulLiteral","src":"5799:4:181","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nodeType":"YulIdentifier","src":"5785:9:181"},"nodeType":"YulFunctionCall","src":"5785:19:181"},"variables":[{"name":"data","nodeType":"YulTypedName","src":"5777:4:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5817:57:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"5840:4:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5850:1:181","type":"","value":"5"},{"arguments":[{"name":"startIndex","nodeType":"YulIdentifier","src":"5857:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"5869:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5853:3:181"},"nodeType":"YulFunctionCall","src":"5853:19:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"5846:3:181"},"nodeType":"YulFunctionCall","src":"5846:27:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5836:3:181"},"nodeType":"YulFunctionCall","src":"5836:38:181"},"variables":[{"name":"deleteStart","nodeType":"YulTypedName","src":"5821:11:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"5911:23:181","statements":[{"nodeType":"YulAssignment","src":"5913:19:181","value":{"name":"data","nodeType":"YulIdentifier","src":"5928:4:181"},"variableNames":[{"name":"deleteStart","nodeType":"YulIdentifier","src":"5913:11:181"}]}]},"condition":{"arguments":[{"name":"startIndex","nodeType":"YulIdentifier","src":"5893:10:181"},{"kind":"number","nodeType":"YulLiteral","src":"5905:4:181","type":"","value":"0x20"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5890:2:181"},"nodeType":"YulFunctionCall","src":"5890:20:181"},"nodeType":"YulIf","src":"5887:47:181"},{"nodeType":"YulVariableDeclaration","src":"5947:41:181","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"5961:4:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5971:1:181","type":"","value":"5"},{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"5978:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"5983:2:181","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5974:3:181"},"nodeType":"YulFunctionCall","src":"5974:12:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"5967:3:181"},"nodeType":"YulFunctionCall","src":"5967:20:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5957:3:181"},"nodeType":"YulFunctionCall","src":"5957:31:181"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"5951:2:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6001:24:181","value":{"name":"deleteStart","nodeType":"YulIdentifier","src":"6014:11:181"},"variables":[{"name":"start","nodeType":"YulTypedName","src":"6005:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6099:21:181","statements":[{"expression":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"6108:5:181"},{"name":"_1","nodeType":"YulIdentifier","src":"6115:2:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"6101:6:181"},"nodeType":"YulFunctionCall","src":"6101:17:181"},"nodeType":"YulExpressionStatement","src":"6101:17:181"}]},"condition":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"6049:5:181"},{"name":"_2","nodeType":"YulIdentifier","src":"6056:2:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6046:2:181"},"nodeType":"YulFunctionCall","src":"6046:13:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6060:26:181","statements":[{"nodeType":"YulAssignment","src":"6062:22:181","value":{"arguments":[{"name":"start","nodeType":"YulIdentifier","src":"6075:5:181"},{"kind":"number","nodeType":"YulLiteral","src":"6082:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6071:3:181"},"nodeType":"YulFunctionCall","src":"6071:13:181"},"variableNames":[{"name":"start","nodeType":"YulIdentifier","src":"6062:5:181"}]}]},"pre":{"nodeType":"YulBlock","src":"6042:3:181","statements":[]},"src":"6038:82:181"}]},"condition":{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"5688:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"5693:2:181","type":"","value":"31"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5685:2:181"},"nodeType":"YulFunctionCall","src":"5685:11:181"},"nodeType":"YulIf","src":"5682:448:181"}]},"name":"clean_up_bytearray_end_slots_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"array","nodeType":"YulTypedName","src":"5644:5:181","type":""},{"name":"len","nodeType":"YulTypedName","src":"5651:3:181","type":""},{"name":"startIndex","nodeType":"YulTypedName","src":"5656:10:181","type":""}],"src":"5591:545:181"},{"body":{"nodeType":"YulBlock","src":"6226:81:181","statements":[{"nodeType":"YulAssignment","src":"6236:65:181","value":{"arguments":[{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"6251:4:181"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6269:1:181","type":"","value":"3"},{"name":"len","nodeType":"YulIdentifier","src":"6272:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6265:3:181"},"nodeType":"YulFunctionCall","src":"6265:11:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6282:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6278:3:181"},"nodeType":"YulFunctionCall","src":"6278:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"6261:3:181"},"nodeType":"YulFunctionCall","src":"6261:24:181"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6257:3:181"},"nodeType":"YulFunctionCall","src":"6257:29:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6247:3:181"},"nodeType":"YulFunctionCall","src":"6247:40:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6293:1:181","type":"","value":"1"},{"name":"len","nodeType":"YulIdentifier","src":"6296:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6289:3:181"},"nodeType":"YulFunctionCall","src":"6289:11:181"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"6244:2:181"},"nodeType":"YulFunctionCall","src":"6244:57:181"},"variableNames":[{"name":"used","nodeType":"YulIdentifier","src":"6236:4:181"}]}]},"name":"extract_used_part_and_set_length_of_short_byte_array","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"6203:4:181","type":""},{"name":"len","nodeType":"YulTypedName","src":"6209:3:181","type":""}],"returnVariables":[{"name":"used","nodeType":"YulTypedName","src":"6217:4:181","type":""}],"src":"6141:166:181"},{"body":{"nodeType":"YulBlock","src":"6415:1103:181","statements":[{"body":{"nodeType":"YulBlock","src":"6456:22:181","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"6458:16:181"},"nodeType":"YulFunctionCall","src":"6458:18:181"},"nodeType":"YulExpressionStatement","src":"6458:18:181"}]},"condition":{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"6431:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"6436:18:181","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6428:2:181"},"nodeType":"YulFunctionCall","src":"6428:27:181"},"nodeType":"YulIf","src":"6425:53:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"6531:4:181"},{"arguments":[{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"6569:4:181"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"6563:5:181"},"nodeType":"YulFunctionCall","src":"6563:11:181"}],"functionName":{"name":"extract_byte_array_length","nodeType":"YulIdentifier","src":"6537:25:181"},"nodeType":"YulFunctionCall","src":"6537:38:181"},{"name":"len","nodeType":"YulIdentifier","src":"6577:3:181"}],"functionName":{"name":"clean_up_bytearray_end_slots_string_storage","nodeType":"YulIdentifier","src":"6487:43:181"},"nodeType":"YulFunctionCall","src":"6487:94:181"},"nodeType":"YulExpressionStatement","src":"6487:94:181"},{"nodeType":"YulVariableDeclaration","src":"6590:18:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6607:1:181","type":"","value":"0"},"variables":[{"name":"srcOffset","nodeType":"YulTypedName","src":"6594:9:181","type":""}]},{"cases":[{"body":{"nodeType":"YulBlock","src":"6651:609:181","statements":[{"nodeType":"YulVariableDeclaration","src":"6665:32:181","value":{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"6684:3:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6693:2:181","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6689:3:181"},"nodeType":"YulFunctionCall","src":"6689:7:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6680:3:181"},"nodeType":"YulFunctionCall","src":"6680:17:181"},"variables":[{"name":"loopEnd","nodeType":"YulTypedName","src":"6669:7:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6710:49:181","value":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"6754:4:181"}],"functionName":{"name":"array_dataslot_string_storage","nodeType":"YulIdentifier","src":"6724:29:181"},"nodeType":"YulFunctionCall","src":"6724:35:181"},"variables":[{"name":"dstPtr","nodeType":"YulTypedName","src":"6714:6:181","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6772:18:181","value":{"name":"srcOffset","nodeType":"YulIdentifier","src":"6781:9:181"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"6776:1:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"6860:172:181","statements":[{"expression":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"6885:6:181"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"6910:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"6915:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6906:3:181"},"nodeType":"YulFunctionCall","src":"6906:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6893:12:181"},"nodeType":"YulFunctionCall","src":"6893:33:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"6878:6:181"},"nodeType":"YulFunctionCall","src":"6878:49:181"},"nodeType":"YulExpressionStatement","src":"6878:49:181"},{"nodeType":"YulAssignment","src":"6944:24:181","value":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"6958:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"6966:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6954:3:181"},"nodeType":"YulFunctionCall","src":"6954:14:181"},"variableNames":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"6944:6:181"}]},{"nodeType":"YulAssignment","src":"6985:33:181","value":{"arguments":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"7002:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7013:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6998:3:181"},"nodeType":"YulFunctionCall","src":"6998:20:181"},"variableNames":[{"name":"srcOffset","nodeType":"YulIdentifier","src":"6985:9:181"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6814:1:181"},{"name":"loopEnd","nodeType":"YulIdentifier","src":"6817:7:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6811:2:181"},"nodeType":"YulFunctionCall","src":"6811:14:181"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6826:21:181","statements":[{"nodeType":"YulAssignment","src":"6828:17:181","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6837:1:181"},{"kind":"number","nodeType":"YulLiteral","src":"6840:4:181","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6833:3:181"},"nodeType":"YulFunctionCall","src":"6833:12:181"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"6828:1:181"}]}]},"pre":{"nodeType":"YulBlock","src":"6807:3:181","statements":[]},"src":"6803:229:181"},{"body":{"nodeType":"YulBlock","src":"7077:127:181","statements":[{"expression":{"arguments":[{"name":"dstPtr","nodeType":"YulIdentifier","src":"7102:6:181"},{"arguments":[{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"7131:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"7136:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7127:3:181"},"nodeType":"YulFunctionCall","src":"7127:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7114:12:181"},"nodeType":"YulFunctionCall","src":"7114:33:181"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7165:1:181","type":"","value":"3"},{"name":"len","nodeType":"YulIdentifier","src":"7168:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7161:3:181"},"nodeType":"YulFunctionCall","src":"7161:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"7174:3:181","type":"","value":"248"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7157:3:181"},"nodeType":"YulFunctionCall","src":"7157:21:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7184:1:181","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7180:3:181"},"nodeType":"YulFunctionCall","src":"7180:6:181"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"7153:3:181"},"nodeType":"YulFunctionCall","src":"7153:34:181"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7149:3:181"},"nodeType":"YulFunctionCall","src":"7149:39:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7110:3:181"},"nodeType":"YulFunctionCall","src":"7110:79:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"7095:6:181"},"nodeType":"YulFunctionCall","src":"7095:95:181"},"nodeType":"YulExpressionStatement","src":"7095:95:181"}]},"condition":{"arguments":[{"name":"loopEnd","nodeType":"YulIdentifier","src":"7051:7:181"},{"name":"len","nodeType":"YulIdentifier","src":"7060:3:181"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7048:2:181"},"nodeType":"YulFunctionCall","src":"7048:16:181"},"nodeType":"YulIf","src":"7045:159:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"7224:4:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7238:1:181","type":"","value":"1"},{"name":"len","nodeType":"YulIdentifier","src":"7241:3:181"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7234:3:181"},"nodeType":"YulFunctionCall","src":"7234:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"7247:1:181","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7230:3:181"},"nodeType":"YulFunctionCall","src":"7230:19:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"7217:6:181"},"nodeType":"YulFunctionCall","src":"7217:33:181"},"nodeType":"YulExpressionStatement","src":"7217:33:181"}]},"nodeType":"YulCase","src":"6644:616:181","value":{"kind":"number","nodeType":"YulLiteral","src":"6649:1:181","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"7277:235:181","statements":[{"nodeType":"YulVariableDeclaration","src":"7291:14:181","value":{"kind":"number","nodeType":"YulLiteral","src":"7304:1:181","type":"","value":"0"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7295:5:181","type":""}]},{"body":{"nodeType":"YulBlock","src":"7337:74:181","statements":[{"nodeType":"YulAssignment","src":"7355:42:181","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"7381:3:181"},{"name":"srcOffset","nodeType":"YulIdentifier","src":"7386:9:181"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7377:3:181"},"nodeType":"YulFunctionCall","src":"7377:19:181"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7364:12:181"},"nodeType":"YulFunctionCall","src":"7364:33:181"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"7355:5:181"}]}]},"condition":{"name":"len","nodeType":"YulIdentifier","src":"7321:3:181"},"nodeType":"YulIf","src":"7318:93:181"},{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"7431:4:181"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7490:5:181"},{"name":"len","nodeType":"YulIdentifier","src":"7497:3:181"}],"functionName":{"name":"extract_used_part_and_set_length_of_short_byte_array","nodeType":"YulIdentifier","src":"7437:52:181"},"nodeType":"YulFunctionCall","src":"7437:64:181"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"7424:6:181"},"nodeType":"YulFunctionCall","src":"7424:78:181"},"nodeType":"YulExpressionStatement","src":"7424:78:181"}]},"nodeType":"YulCase","src":"7269:243:181","value":"default"}],"expression":{"arguments":[{"name":"len","nodeType":"YulIdentifier","src":"6627:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"6632:2:181","type":"","value":"31"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6624:2:181"},"nodeType":"YulFunctionCall","src":"6624:11:181"},"nodeType":"YulSwitch","src":"6617:895:181"}]},"name":"copy_byte_array_to_storage_from_t_string_calldata_ptr_to_t_string_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nodeType":"YulTypedName","src":"6395:4:181","type":""},{"name":"src","nodeType":"YulTypedName","src":"6401:3:181","type":""},{"name":"len","nodeType":"YulTypedName","src":"6406:3:181","type":""}],"src":"6312:1206:181"},{"body":{"nodeType":"YulBlock","src":"7697:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7714:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7725:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7707:6:181"},"nodeType":"YulFunctionCall","src":"7707:21:181"},"nodeType":"YulExpressionStatement","src":"7707:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7748:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7759:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7744:3:181"},"nodeType":"YulFunctionCall","src":"7744:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"7764:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7737:6:181"},"nodeType":"YulFunctionCall","src":"7737:30:181"},"nodeType":"YulExpressionStatement","src":"7737:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7787:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7798:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7783:3:181"},"nodeType":"YulFunctionCall","src":"7783:18:181"},{"hexValue":"45524332305065726d69743a206578706972656420646561646c696e65","kind":"string","nodeType":"YulLiteral","src":"7803:31:181","type":"","value":"ERC20Permit: expired deadline"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7776:6:181"},"nodeType":"YulFunctionCall","src":"7776:59:181"},"nodeType":"YulExpressionStatement","src":"7776:59:181"},{"nodeType":"YulAssignment","src":"7844:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7856:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"7867:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7852:3:181"},"nodeType":"YulFunctionCall","src":"7852:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7844:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_3e89525a63fb9c966b61cf8f5305156de8420bc773a2b60828a2f32c3c5797bd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7674:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7688:4:181","type":""}],"src":"7523:353:181"},{"body":{"nodeType":"YulBlock","src":"8122:350:181","statements":[{"nodeType":"YulAssignment","src":"8132:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8144:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8155:3:181","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8140:3:181"},"nodeType":"YulFunctionCall","src":"8140:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8132:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8175:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"8186:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8168:6:181"},"nodeType":"YulFunctionCall","src":"8168:25:181"},"nodeType":"YulExpressionStatement","src":"8168:25:181"},{"nodeType":"YulVariableDeclaration","src":"8202:29:181","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8220:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"8225:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8216:3:181"},"nodeType":"YulFunctionCall","src":"8216:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"8229:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8212:3:181"},"nodeType":"YulFunctionCall","src":"8212:19:181"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8206:2:181","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8251:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8262:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8247:3:181"},"nodeType":"YulFunctionCall","src":"8247:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"8271:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8279:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8267:3:181"},"nodeType":"YulFunctionCall","src":"8267:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8240:6:181"},"nodeType":"YulFunctionCall","src":"8240:43:181"},"nodeType":"YulExpressionStatement","src":"8240:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8303:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8314:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8299:3:181"},"nodeType":"YulFunctionCall","src":"8299:18:181"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"8323:6:181"},{"name":"_1","nodeType":"YulIdentifier","src":"8331:2:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8319:3:181"},"nodeType":"YulFunctionCall","src":"8319:15:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8292:6:181"},"nodeType":"YulFunctionCall","src":"8292:43:181"},"nodeType":"YulExpressionStatement","src":"8292:43:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8355:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8366:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8351:3:181"},"nodeType":"YulFunctionCall","src":"8351:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"8371:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8344:6:181"},"nodeType":"YulFunctionCall","src":"8344:34:181"},"nodeType":"YulExpressionStatement","src":"8344:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8398:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8409:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8394:3:181"},"nodeType":"YulFunctionCall","src":"8394:19:181"},{"name":"value4","nodeType":"YulIdentifier","src":"8415:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8387:6:181"},"nodeType":"YulFunctionCall","src":"8387:35:181"},"nodeType":"YulExpressionStatement","src":"8387:35:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8442:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8453:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8438:3:181"},"nodeType":"YulFunctionCall","src":"8438:19:181"},{"name":"value5","nodeType":"YulIdentifier","src":"8459:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8431:6:181"},"nodeType":"YulFunctionCall","src":"8431:35:181"},"nodeType":"YulExpressionStatement","src":"8431:35:181"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8051:9:181","type":""},{"name":"value5","nodeType":"YulTypedName","src":"8062:6:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"8070:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"8078:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8086:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8094:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8102:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8113:4:181","type":""}],"src":"7881:591:181"},{"body":{"nodeType":"YulBlock","src":"8651:180:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8668:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8679:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8661:6:181"},"nodeType":"YulFunctionCall","src":"8661:21:181"},"nodeType":"YulExpressionStatement","src":"8661:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8702:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8713:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8698:3:181"},"nodeType":"YulFunctionCall","src":"8698:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"8718:2:181","type":"","value":"30"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8691:6:181"},"nodeType":"YulFunctionCall","src":"8691:30:181"},"nodeType":"YulExpressionStatement","src":"8691:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8741:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8752:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8737:3:181"},"nodeType":"YulFunctionCall","src":"8737:18:181"},{"hexValue":"45524332305065726d69743a20696e76616c6964207369676e6174757265","kind":"string","nodeType":"YulLiteral","src":"8757:32:181","type":"","value":"ERC20Permit: invalid signature"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8730:6:181"},"nodeType":"YulFunctionCall","src":"8730:60:181"},"nodeType":"YulExpressionStatement","src":"8730:60:181"},{"nodeType":"YulAssignment","src":"8799:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8811:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"8822:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8807:3:181"},"nodeType":"YulFunctionCall","src":"8807:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8799:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_94ca1ab58dfda790a1782ffbb0c0a140ec51d4148dbeecc6c39e37b25ff4b124__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8628:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8642:4:181","type":""}],"src":"8477:354:181"},{"body":{"nodeType":"YulBlock","src":"9010:226:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9027:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9038:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9020:6:181"},"nodeType":"YulFunctionCall","src":"9020:21:181"},"nodeType":"YulExpressionStatement","src":"9020:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9061:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9072:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9057:3:181"},"nodeType":"YulFunctionCall","src":"9057:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9077:2:181","type":"","value":"36"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9050:6:181"},"nodeType":"YulFunctionCall","src":"9050:30:181"},"nodeType":"YulExpressionStatement","src":"9050:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9100:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9111:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9096:3:181"},"nodeType":"YulFunctionCall","src":"9096:18:181"},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f20616464","kind":"string","nodeType":"YulLiteral","src":"9116:34:181","type":"","value":"ERC20: approve from the zero add"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9089:6:181"},"nodeType":"YulFunctionCall","src":"9089:62:181"},"nodeType":"YulExpressionStatement","src":"9089:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9171:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9182:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9167:3:181"},"nodeType":"YulFunctionCall","src":"9167:18:181"},{"hexValue":"72657373","kind":"string","nodeType":"YulLiteral","src":"9187:6:181","type":"","value":"ress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9160:6:181"},"nodeType":"YulFunctionCall","src":"9160:34:181"},"nodeType":"YulExpressionStatement","src":"9160:34:181"},{"nodeType":"YulAssignment","src":"9203:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9215:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9226:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9211:3:181"},"nodeType":"YulFunctionCall","src":"9211:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9203:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8987:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9001:4:181","type":""}],"src":"8836:400:181"},{"body":{"nodeType":"YulBlock","src":"9415:224:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9432:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9443:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9425:6:181"},"nodeType":"YulFunctionCall","src":"9425:21:181"},"nodeType":"YulExpressionStatement","src":"9425:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9466:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9477:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9462:3:181"},"nodeType":"YulFunctionCall","src":"9462:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9482:2:181","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9455:6:181"},"nodeType":"YulFunctionCall","src":"9455:30:181"},"nodeType":"YulExpressionStatement","src":"9455:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9505:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9516:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9501:3:181"},"nodeType":"YulFunctionCall","src":"9501:18:181"},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f206164647265","kind":"string","nodeType":"YulLiteral","src":"9521:34:181","type":"","value":"ERC20: approve to the zero addre"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9494:6:181"},"nodeType":"YulFunctionCall","src":"9494:62:181"},"nodeType":"YulExpressionStatement","src":"9494:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9576:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9587:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9572:3:181"},"nodeType":"YulFunctionCall","src":"9572:18:181"},{"hexValue":"7373","kind":"string","nodeType":"YulLiteral","src":"9592:4:181","type":"","value":"ss"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9565:6:181"},"nodeType":"YulFunctionCall","src":"9565:32:181"},"nodeType":"YulExpressionStatement","src":"9565:32:181"},{"nodeType":"YulAssignment","src":"9606:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9618:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9629:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9614:3:181"},"nodeType":"YulFunctionCall","src":"9614:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9606:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9392:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9406:4:181","type":""}],"src":"9241:398:181"},{"body":{"nodeType":"YulBlock","src":"9818:179:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9835:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9846:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9828:6:181"},"nodeType":"YulFunctionCall","src":"9828:21:181"},"nodeType":"YulExpressionStatement","src":"9828:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9869:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9880:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9865:3:181"},"nodeType":"YulFunctionCall","src":"9865:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"9885:2:181","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9858:6:181"},"nodeType":"YulFunctionCall","src":"9858:30:181"},"nodeType":"YulExpressionStatement","src":"9858:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9908:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9919:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9904:3:181"},"nodeType":"YulFunctionCall","src":"9904:18:181"},{"hexValue":"45524332303a20696e73756666696369656e7420616c6c6f77616e6365","kind":"string","nodeType":"YulLiteral","src":"9924:31:181","type":"","value":"ERC20: insufficient allowance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9897:6:181"},"nodeType":"YulFunctionCall","src":"9897:59:181"},"nodeType":"YulExpressionStatement","src":"9897:59:181"},{"nodeType":"YulAssignment","src":"9965:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9977:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"9988:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9973:3:181"},"nodeType":"YulFunctionCall","src":"9973:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9965:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9795:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9809:4:181","type":""}],"src":"9644:353:181"},{"body":{"nodeType":"YulBlock","src":"10176:227:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10193:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10204:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10186:6:181"},"nodeType":"YulFunctionCall","src":"10186:21:181"},"nodeType":"YulExpressionStatement","src":"10186:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10227:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10238:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10223:3:181"},"nodeType":"YulFunctionCall","src":"10223:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10243:2:181","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10216:6:181"},"nodeType":"YulFunctionCall","src":"10216:30:181"},"nodeType":"YulExpressionStatement","src":"10216:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10266:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10277:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10262:3:181"},"nodeType":"YulFunctionCall","src":"10262:18:181"},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f206164","kind":"string","nodeType":"YulLiteral","src":"10282:34:181","type":"","value":"ERC20: transfer from the zero ad"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10255:6:181"},"nodeType":"YulFunctionCall","src":"10255:62:181"},"nodeType":"YulExpressionStatement","src":"10255:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10337:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10348:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10333:3:181"},"nodeType":"YulFunctionCall","src":"10333:18:181"},{"hexValue":"6472657373","kind":"string","nodeType":"YulLiteral","src":"10353:7:181","type":"","value":"dress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10326:6:181"},"nodeType":"YulFunctionCall","src":"10326:35:181"},"nodeType":"YulExpressionStatement","src":"10326:35:181"},{"nodeType":"YulAssignment","src":"10370:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10382:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10393:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10378:3:181"},"nodeType":"YulFunctionCall","src":"10378:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10370:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10153:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10167:4:181","type":""}],"src":"10002:401:181"},{"body":{"nodeType":"YulBlock","src":"10582:225:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10599:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10610:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10592:6:181"},"nodeType":"YulFunctionCall","src":"10592:21:181"},"nodeType":"YulExpressionStatement","src":"10592:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10633:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10644:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10629:3:181"},"nodeType":"YulFunctionCall","src":"10629:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"10649:2:181","type":"","value":"35"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10622:6:181"},"nodeType":"YulFunctionCall","src":"10622:30:181"},"nodeType":"YulExpressionStatement","src":"10622:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10672:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10683:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10668:3:181"},"nodeType":"YulFunctionCall","src":"10668:18:181"},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472","kind":"string","nodeType":"YulLiteral","src":"10688:34:181","type":"","value":"ERC20: transfer to the zero addr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10661:6:181"},"nodeType":"YulFunctionCall","src":"10661:62:181"},"nodeType":"YulExpressionStatement","src":"10661:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10743:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10754:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10739:3:181"},"nodeType":"YulFunctionCall","src":"10739:18:181"},{"hexValue":"657373","kind":"string","nodeType":"YulLiteral","src":"10759:5:181","type":"","value":"ess"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10732:6:181"},"nodeType":"YulFunctionCall","src":"10732:33:181"},"nodeType":"YulExpressionStatement","src":"10732:33:181"},{"nodeType":"YulAssignment","src":"10774:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10786:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"10797:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10782:3:181"},"nodeType":"YulFunctionCall","src":"10782:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10774:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10559:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10573:4:181","type":""}],"src":"10408:399:181"},{"body":{"nodeType":"YulBlock","src":"10986:228:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11003:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11014:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10996:6:181"},"nodeType":"YulFunctionCall","src":"10996:21:181"},"nodeType":"YulExpressionStatement","src":"10996:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11037:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11048:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11033:3:181"},"nodeType":"YulFunctionCall","src":"11033:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11053:2:181","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11026:6:181"},"nodeType":"YulFunctionCall","src":"11026:30:181"},"nodeType":"YulExpressionStatement","src":"11026:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11076:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11087:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11072:3:181"},"nodeType":"YulFunctionCall","src":"11072:18:181"},{"hexValue":"45524332303a207472616e7366657220616d6f756e7420657863656564732062","kind":"string","nodeType":"YulLiteral","src":"11092:34:181","type":"","value":"ERC20: transfer amount exceeds b"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11065:6:181"},"nodeType":"YulFunctionCall","src":"11065:62:181"},"nodeType":"YulExpressionStatement","src":"11065:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11147:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11158:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11143:3:181"},"nodeType":"YulFunctionCall","src":"11143:18:181"},{"hexValue":"616c616e6365","kind":"string","nodeType":"YulLiteral","src":"11163:8:181","type":"","value":"alance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11136:6:181"},"nodeType":"YulFunctionCall","src":"11136:36:181"},"nodeType":"YulExpressionStatement","src":"11136:36:181"},{"nodeType":"YulAssignment","src":"11181:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11193:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11204:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11189:3:181"},"nodeType":"YulFunctionCall","src":"11189:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11181:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10963:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10977:4:181","type":""}],"src":"10812:402:181"},{"body":{"nodeType":"YulBlock","src":"11393:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11410:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11421:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11403:6:181"},"nodeType":"YulFunctionCall","src":"11403:21:181"},"nodeType":"YulExpressionStatement","src":"11403:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11444:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11455:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11440:3:181"},"nodeType":"YulFunctionCall","src":"11440:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11460:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11433:6:181"},"nodeType":"YulFunctionCall","src":"11433:30:181"},"nodeType":"YulExpressionStatement","src":"11433:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11483:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11494:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11479:3:181"},"nodeType":"YulFunctionCall","src":"11479:18:181"},{"hexValue":"45524332303a206d696e7420746f20746865207a65726f2061646472657373","kind":"string","nodeType":"YulLiteral","src":"11499:33:181","type":"","value":"ERC20: mint to the zero address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11472:6:181"},"nodeType":"YulFunctionCall","src":"11472:61:181"},"nodeType":"YulExpressionStatement","src":"11472:61:181"},{"nodeType":"YulAssignment","src":"11542:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11554:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11565:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11550:3:181"},"nodeType":"YulFunctionCall","src":"11550:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11542:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11370:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11384:4:181","type":""}],"src":"11219:355:181"},{"body":{"nodeType":"YulBlock","src":"11753:223:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11770:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11781:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11763:6:181"},"nodeType":"YulFunctionCall","src":"11763:21:181"},"nodeType":"YulExpressionStatement","src":"11763:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11804:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11815:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11800:3:181"},"nodeType":"YulFunctionCall","src":"11800:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"11820:2:181","type":"","value":"33"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11793:6:181"},"nodeType":"YulFunctionCall","src":"11793:30:181"},"nodeType":"YulExpressionStatement","src":"11793:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11843:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11854:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11839:3:181"},"nodeType":"YulFunctionCall","src":"11839:18:181"},{"hexValue":"45524332303a206275726e2066726f6d20746865207a65726f20616464726573","kind":"string","nodeType":"YulLiteral","src":"11859:34:181","type":"","value":"ERC20: burn from the zero addres"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11832:6:181"},"nodeType":"YulFunctionCall","src":"11832:62:181"},"nodeType":"YulExpressionStatement","src":"11832:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11914:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11925:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11910:3:181"},"nodeType":"YulFunctionCall","src":"11910:18:181"},{"hexValue":"73","kind":"string","nodeType":"YulLiteral","src":"11930:3:181","type":"","value":"s"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11903:6:181"},"nodeType":"YulFunctionCall","src":"11903:31:181"},"nodeType":"YulExpressionStatement","src":"11903:31:181"},{"nodeType":"YulAssignment","src":"11943:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11955:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"11966:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11951:3:181"},"nodeType":"YulFunctionCall","src":"11951:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11943:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11730:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11744:4:181","type":""}],"src":"11579:397:181"},{"body":{"nodeType":"YulBlock","src":"12155:224:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12172:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12183:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12165:6:181"},"nodeType":"YulFunctionCall","src":"12165:21:181"},"nodeType":"YulExpressionStatement","src":"12165:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12206:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12217:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12202:3:181"},"nodeType":"YulFunctionCall","src":"12202:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"12222:2:181","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12195:6:181"},"nodeType":"YulFunctionCall","src":"12195:30:181"},"nodeType":"YulExpressionStatement","src":"12195:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12245:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12256:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12241:3:181"},"nodeType":"YulFunctionCall","src":"12241:18:181"},{"hexValue":"45524332303a206275726e20616d6f756e7420657863656564732062616c616e","kind":"string","nodeType":"YulLiteral","src":"12261:34:181","type":"","value":"ERC20: burn amount exceeds balan"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12234:6:181"},"nodeType":"YulFunctionCall","src":"12234:62:181"},"nodeType":"YulExpressionStatement","src":"12234:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12316:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12327:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12312:3:181"},"nodeType":"YulFunctionCall","src":"12312:18:181"},{"hexValue":"6365","kind":"string","nodeType":"YulLiteral","src":"12332:4:181","type":"","value":"ce"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12305:6:181"},"nodeType":"YulFunctionCall","src":"12305:32:181"},"nodeType":"YulExpressionStatement","src":"12305:32:181"},{"nodeType":"YulAssignment","src":"12346:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12358:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12369:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12354:3:181"},"nodeType":"YulFunctionCall","src":"12354:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12346:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12132:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12146:4:181","type":""}],"src":"11981:398:181"},{"body":{"nodeType":"YulBlock","src":"12597:276:181","statements":[{"nodeType":"YulAssignment","src":"12607:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12619:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12630:3:181","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12615:3:181"},"nodeType":"YulFunctionCall","src":"12615:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12607:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12650:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"12661:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12643:6:181"},"nodeType":"YulFunctionCall","src":"12643:25:181"},"nodeType":"YulExpressionStatement","src":"12643:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12688:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12699:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12684:3:181"},"nodeType":"YulFunctionCall","src":"12684:18:181"},{"name":"value1","nodeType":"YulIdentifier","src":"12704:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12677:6:181"},"nodeType":"YulFunctionCall","src":"12677:34:181"},"nodeType":"YulExpressionStatement","src":"12677:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12731:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12742:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12727:3:181"},"nodeType":"YulFunctionCall","src":"12727:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"12747:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12720:6:181"},"nodeType":"YulFunctionCall","src":"12720:34:181"},"nodeType":"YulExpressionStatement","src":"12720:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12774:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12785:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12770:3:181"},"nodeType":"YulFunctionCall","src":"12770:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"12790:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12763:6:181"},"nodeType":"YulFunctionCall","src":"12763:34:181"},"nodeType":"YulExpressionStatement","src":"12763:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12817:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"12828:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12813:3:181"},"nodeType":"YulFunctionCall","src":"12813:19:181"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"12838:6:181"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12854:3:181","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"12859:1:181","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12850:3:181"},"nodeType":"YulFunctionCall","src":"12850:11:181"},{"kind":"number","nodeType":"YulLiteral","src":"12863:1:181","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12846:3:181"},"nodeType":"YulFunctionCall","src":"12846:19:181"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12834:3:181"},"nodeType":"YulFunctionCall","src":"12834:32:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12806:6:181"},"nodeType":"YulFunctionCall","src":"12806:61:181"},"nodeType":"YulExpressionStatement","src":"12806:61:181"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12534:9:181","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12545:6:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12553:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12561:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12569:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12577:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12588:4:181","type":""}],"src":"12384:489:181"},{"body":{"nodeType":"YulBlock","src":"13126:144:181","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13143:3:181"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13152:3:181","type":"","value":"240"},{"kind":"number","nodeType":"YulLiteral","src":"13157:4:181","type":"","value":"6401"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13148:3:181"},"nodeType":"YulFunctionCall","src":"13148:14:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13136:6:181"},"nodeType":"YulFunctionCall","src":"13136:27:181"},"nodeType":"YulExpressionStatement","src":"13136:27:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13183:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"13188:1:181","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13179:3:181"},"nodeType":"YulFunctionCall","src":"13179:11:181"},{"name":"value0","nodeType":"YulIdentifier","src":"13192:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13172:6:181"},"nodeType":"YulFunctionCall","src":"13172:27:181"},"nodeType":"YulExpressionStatement","src":"13172:27:181"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13219:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"13224:2:181","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13215:3:181"},"nodeType":"YulFunctionCall","src":"13215:12:181"},{"name":"value1","nodeType":"YulIdentifier","src":"13229:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13208:6:181"},"nodeType":"YulFunctionCall","src":"13208:28:181"},"nodeType":"YulExpressionStatement","src":"13208:28:181"},{"nodeType":"YulAssignment","src":"13245:19:181","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13256:3:181"},{"kind":"number","nodeType":"YulLiteral","src":"13261:2:181","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13252:3:181"},"nodeType":"YulFunctionCall","src":"13252:12:181"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"13245:3:181"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"13094:3:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13099:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13107:6:181","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"13118:3:181","type":""}],"src":"12878:392:181"},{"body":{"nodeType":"YulBlock","src":"13456:217:181","statements":[{"nodeType":"YulAssignment","src":"13466:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13478:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13489:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13474:3:181"},"nodeType":"YulFunctionCall","src":"13474:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13466:4:181"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13509:9:181"},{"name":"value0","nodeType":"YulIdentifier","src":"13520:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13502:6:181"},"nodeType":"YulFunctionCall","src":"13502:25:181"},"nodeType":"YulExpressionStatement","src":"13502:25:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13547:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13558:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13543:3:181"},"nodeType":"YulFunctionCall","src":"13543:18:181"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13567:6:181"},{"kind":"number","nodeType":"YulLiteral","src":"13575:4:181","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13563:3:181"},"nodeType":"YulFunctionCall","src":"13563:17:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13536:6:181"},"nodeType":"YulFunctionCall","src":"13536:45:181"},"nodeType":"YulExpressionStatement","src":"13536:45:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13601:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13612:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13597:3:181"},"nodeType":"YulFunctionCall","src":"13597:18:181"},{"name":"value2","nodeType":"YulIdentifier","src":"13617:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13590:6:181"},"nodeType":"YulFunctionCall","src":"13590:34:181"},"nodeType":"YulExpressionStatement","src":"13590:34:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13644:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"13655:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13640:3:181"},"nodeType":"YulFunctionCall","src":"13640:18:181"},{"name":"value3","nodeType":"YulIdentifier","src":"13660:6:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13633:6:181"},"nodeType":"YulFunctionCall","src":"13633:34:181"},"nodeType":"YulExpressionStatement","src":"13633:34:181"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13401:9:181","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13412:6:181","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13420:6:181","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13428:6:181","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13436:6:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13447:4:181","type":""}],"src":"13275:398:181"},{"body":{"nodeType":"YulBlock","src":"13710:95:181","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13727:1:181","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13734:3:181","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"13739:10:181","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13730:3:181"},"nodeType":"YulFunctionCall","src":"13730:20:181"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13720:6:181"},"nodeType":"YulFunctionCall","src":"13720:31:181"},"nodeType":"YulExpressionStatement","src":"13720:31:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13767:1:181","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"13770:4:181","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13760:6:181"},"nodeType":"YulFunctionCall","src":"13760:15:181"},"nodeType":"YulExpressionStatement","src":"13760:15:181"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13791:1:181","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13794:4:181","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13784:6:181"},"nodeType":"YulFunctionCall","src":"13784:15:181"},"nodeType":"YulExpressionStatement","src":"13784:15:181"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"13678:127:181"},{"body":{"nodeType":"YulBlock","src":"13984:174:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14001:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14012:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13994:6:181"},"nodeType":"YulFunctionCall","src":"13994:21:181"},"nodeType":"YulExpressionStatement","src":"13994:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14035:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14046:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14031:3:181"},"nodeType":"YulFunctionCall","src":"14031:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14051:2:181","type":"","value":"24"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14024:6:181"},"nodeType":"YulFunctionCall","src":"14024:30:181"},"nodeType":"YulExpressionStatement","src":"14024:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14074:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14085:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14070:3:181"},"nodeType":"YulFunctionCall","src":"14070:18:181"},{"hexValue":"45434453413a20696e76616c6964207369676e6174757265","kind":"string","nodeType":"YulLiteral","src":"14090:26:181","type":"","value":"ECDSA: invalid signature"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14063:6:181"},"nodeType":"YulFunctionCall","src":"14063:54:181"},"nodeType":"YulExpressionStatement","src":"14063:54:181"},{"nodeType":"YulAssignment","src":"14126:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14138:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14149:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14134:3:181"},"nodeType":"YulFunctionCall","src":"14134:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14126:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13961:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13975:4:181","type":""}],"src":"13810:348:181"},{"body":{"nodeType":"YulBlock","src":"14337:181:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14354:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14365:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14347:6:181"},"nodeType":"YulFunctionCall","src":"14347:21:181"},"nodeType":"YulExpressionStatement","src":"14347:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14388:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14399:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14384:3:181"},"nodeType":"YulFunctionCall","src":"14384:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14404:2:181","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14377:6:181"},"nodeType":"YulFunctionCall","src":"14377:30:181"},"nodeType":"YulExpressionStatement","src":"14377:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14427:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14438:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14423:3:181"},"nodeType":"YulFunctionCall","src":"14423:18:181"},{"hexValue":"45434453413a20696e76616c6964207369676e6174757265206c656e677468","kind":"string","nodeType":"YulLiteral","src":"14443:33:181","type":"","value":"ECDSA: invalid signature length"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14416:6:181"},"nodeType":"YulFunctionCall","src":"14416:61:181"},"nodeType":"YulExpressionStatement","src":"14416:61:181"},{"nodeType":"YulAssignment","src":"14486:26:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14498:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14509:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14494:3:181"},"nodeType":"YulFunctionCall","src":"14494:18:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14486:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14314:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14328:4:181","type":""}],"src":"14163:355:181"},{"body":{"nodeType":"YulBlock","src":"14697:224:181","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14714:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14725:2:181","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14707:6:181"},"nodeType":"YulFunctionCall","src":"14707:21:181"},"nodeType":"YulExpressionStatement","src":"14707:21:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14748:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14759:2:181","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14744:3:181"},"nodeType":"YulFunctionCall","src":"14744:18:181"},{"kind":"number","nodeType":"YulLiteral","src":"14764:2:181","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14737:6:181"},"nodeType":"YulFunctionCall","src":"14737:30:181"},"nodeType":"YulExpressionStatement","src":"14737:30:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14787:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14798:2:181","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14783:3:181"},"nodeType":"YulFunctionCall","src":"14783:18:181"},{"hexValue":"45434453413a20696e76616c6964207369676e6174757265202773272076616c","kind":"string","nodeType":"YulLiteral","src":"14803:34:181","type":"","value":"ECDSA: invalid signature 's' val"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14776:6:181"},"nodeType":"YulFunctionCall","src":"14776:62:181"},"nodeType":"YulExpressionStatement","src":"14776:62:181"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14858:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14869:2:181","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14854:3:181"},"nodeType":"YulFunctionCall","src":"14854:18:181"},{"hexValue":"7565","kind":"string","nodeType":"YulLiteral","src":"14874:4:181","type":"","value":"ue"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14847:6:181"},"nodeType":"YulFunctionCall","src":"14847:32:181"},"nodeType":"YulExpressionStatement","src":"14847:32:181"},{"nodeType":"YulAssignment","src":"14888:27:181","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14900:9:181"},{"kind":"number","nodeType":"YulLiteral","src":"14911:3:181","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14896:3:181"},"nodeType":"YulFunctionCall","src":"14896:19:181"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14888:4:181"}]}]},"name":"abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14674:9:181","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14688:4:181","type":""}],"src":"14523:398:181"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        mstore(add(add(headStart, length), 64), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_string_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_string_calldata_ptrt_string_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_string_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_string_calldata(add(headStart, offset_1), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let value := calldataload(add(headStart, 128))\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value4 := value\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: decreased allowance below\")\n        mstore(add(headStart, 96), \" zero\")\n        tail := add(headStart, 128)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function array_dataslot_string_storage(ptr) -> data\n    {\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n    }\n    function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n    {\n        if gt(len, 31)\n        {\n            let _1 := 0\n            mstore(_1, array)\n            let data := keccak256(_1, 0x20)\n            let deleteStart := add(data, shr(5, add(startIndex, 31)))\n            if lt(startIndex, 0x20) { deleteStart := data }\n            let _2 := add(data, shr(5, add(len, 31)))\n            let start := deleteStart\n            for { } lt(start, _2) { start := add(start, 1) }\n            { sstore(start, _1) }\n        }\n    }\n    function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n    {\n        used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n    }\n    function copy_byte_array_to_storage_from_t_string_calldata_ptr_to_t_string_storage(slot, src, len)\n    {\n        if gt(len, 0xffffffffffffffff) { panic_error_0x41() }\n        clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), len)\n        let srcOffset := 0\n        switch gt(len, 31)\n        case 1 {\n            let loopEnd := and(len, not(31))\n            let dstPtr := array_dataslot_string_storage(slot)\n            let i := srcOffset\n            for { } lt(i, loopEnd) { i := add(i, 0x20) }\n            {\n                sstore(dstPtr, calldataload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, 0x20)\n            }\n            if lt(loopEnd, len)\n            {\n                sstore(dstPtr, and(calldataload(add(src, srcOffset)), not(shr(and(shl(3, len), 248), not(0)))))\n            }\n            sstore(slot, add(shl(1, len), 1))\n        }\n        default {\n            let value := 0\n            if len\n            {\n                value := calldataload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, len))\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_3e89525a63fb9c966b61cf8f5305156de8420bc773a2b60828a2f32c3c5797bd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"ERC20Permit: expired deadline\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_t_stringliteral_94ca1ab58dfda790a1782ffbb0c0a140ec51d4148dbeecc6c39e37b25ff4b124__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 30)\n        mstore(add(headStart, 64), \"ERC20Permit: invalid signature\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"ERC20: approve from the zero add\")\n        mstore(add(headStart, 96), \"ress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: approve to the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"ERC20: insufficient allowance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: transfer from the zero ad\")\n        mstore(add(headStart, 96), \"dress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"ERC20: transfer to the zero addr\")\n        mstore(add(headStart, 96), \"ess\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"ERC20: transfer amount exceeds b\")\n        mstore(add(headStart, 96), \"alance\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ERC20: mint to the zero address\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"ERC20: burn from the zero addres\")\n        mstore(add(headStart, 96), \"s\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: burn amount exceeds balan\")\n        mstore(add(headStart, 96), \"ce\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, shl(240, 6401))\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature 's' val\")\n        mstore(add(headStart, 96), \"ue\")\n        tail := add(headStart, 128)\n    }\n}","id":181,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"23235":[{"length":32,"start":2467}],"23237":[{"length":32,"start":2425}],"23241":[{"length":32,"start":2572}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d714610201578063a9059cbb14610214578063b7b090ee14610227578063d505accf1461023a578063dd62ed3e1461024d57600080fd5b806370a08231146101c05780637ecebe00146101d357806395d89b41146101e65780639dc29fac146101ee57600080fd5b8063313ce567116100de578063313ce567146101765780633644e51514610190578063395093511461019857806340c10f19146101ab57600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610163575b600080fd5b610118610260565b6040516101259190610f06565b60405180910390f35b61014161013c366004610f70565b61026f565b6040519015158152602001610125565b6002545b604051908152602001610125565b610141610171366004610f9a565b610286565b61017e6102a8565b60405160ff9091168152602001610125565b6101556102b6565b6101416101a6366004610f70565b6102c0565b6101be6101b9366004610f70565b6102fc565b005b6101556101ce366004610fd6565b61030a565b6101556101e1366004610fd6565b610328565b610118610346565b6101be6101fc366004610f70565b610350565b61014161020f366004610f70565b61035a565b610141610222366004610f70565b6103d9565b6101be610235366004611041565b6103e6565b6101be6102483660046110ad565b610408565b61015561025b366004611120565b61056c565b606061026a610597565b905090565b600061027c338484610629565b5060015b92915050565b600061029384338461074e565b61029e8484846107c8565b5060019392505050565b600061026a60055460ff1690565b600061026a61096c565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161027c9185906102f7908690611153565b610629565b6103068282610a5a565b5050565b6001600160a01b038116600090815260208190526040812054610280565b6001600160a01b038116600090815260066020526040812054610280565b606061026a610b19565b6103068282610b28565b600080610367338561056c565b9050828110156103cc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61029e3385858403610629565b600061027c3384846107c8565b60036103f384868361120c565b50600461040182848361120c565b5050505050565b834211156104585760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016103c3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104878c610c57565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006104e282610c7f565b905060006104f282878787610ccd565b9050896001600160a01b0316816001600160a01b0316146105555760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016103c3565b6105608a8a8a610629565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546105a69061118a565b80601f01602080910402602001604051908101604052809291908181526020018280546105d29061118a565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b6001600160a01b03831661068b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103c3565b6001600160a01b0382166106ec5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103c3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061075a848461056c565b905060001981146107c257818110156107b55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103c3565b6107c28484848403610629565b50505050565b6001600160a01b03831661082c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103c3565b6001600160a01b03821661088e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103c3565b6001600160a01b038316600090815260208190526040902054818110156109065760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103c3565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36107c2565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156109c557507f000000000000000000000000000000000000000000000000000000000000000046145b156109d1575060075490565b50600854604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a0808301919091528251808303909101815260c0909101909152805191012090565b6001600160a01b038216610ab05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103c3565b8060026000828254610ac29190611153565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6060600480546105a69061118a565b6001600160a01b038216610b885760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103c3565b6001600160a01b03821660009081526020819052604090205481811015610bfc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103c3565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610741565b505050565b6001600160a01b03811660009081526006602052604090208054600181018255905b50919050565b6000610280610c8c61096c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610cde87878787610cf5565b91509150610ceb81610db9565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610d2c5750600090506003610db0565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610d80573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610da957600060019250925050610db0565b9150600090505b94509492505050565b6000816004811115610dcd57610dcd6112cc565b03610dd55750565b6001816004811115610de957610de96112cc565b03610e365760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103c3565b6002816004811115610e4a57610e4a6112cc565b03610e975760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103c3565b6003816004811115610eab57610eab6112cc565b03610f035760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103c3565b50565b600060208083528351808285015260005b81811015610f3357858101830151858201604001528201610f17565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f6b57600080fd5b919050565b60008060408385031215610f8357600080fd5b610f8c83610f54565b946020939093013593505050565b600080600060608486031215610faf57600080fd5b610fb884610f54565b9250610fc660208501610f54565b9150604084013590509250925092565b600060208284031215610fe857600080fd5b610ff182610f54565b9392505050565b60008083601f84011261100a57600080fd5b50813567ffffffffffffffff81111561102257600080fd5b60208301915083602082850101111561103a57600080fd5b9250929050565b6000806000806040858703121561105757600080fd5b843567ffffffffffffffff8082111561106f57600080fd5b61107b88838901610ff8565b9096509450602087013591508082111561109457600080fd5b506110a187828801610ff8565b95989497509550505050565b600080600080600080600060e0888a0312156110c857600080fd5b6110d188610f54565b96506110df60208901610f54565b95506040880135945060608801359350608088013560ff8116811461110357600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561113357600080fd5b61113c83610f54565b915061114a60208401610f54565b90509250929050565b8082018082111561028057634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061119e57607f821691505b602082108103610c7957634e487b7160e01b600052602260045260246000fd5b601f821115610c5257600081815260208120601f850160051c810160208610156111e55750805b601f850160051c820191505b81811015611204578281556001016111f1565b505050505050565b67ffffffffffffffff83111561122457611224611174565b61123883611232835461118a565b836111be565b6000601f84116001811461126c57600085156112545750838201355b600019600387901b1c1916600186901b178355610401565b600083815260209020601f19861690835b8281101561129d578685013582556020948501946001909201910161127d565b50868210156112ba5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220fc9fa7104ced2bd0804bef90105fb24ffacb00742d1be2d37a77174cd20fba2564736f6c63430008110033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x10B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x201 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x214 JUMPI DUP1 PUSH4 0xB7B090EE EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x23A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x24D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x1D3 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1E6 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x1EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x1AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x12E JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x163 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x118 PUSH2 0x260 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x125 SWAP2 SWAP1 PUSH2 0xF06 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x141 PUSH2 0x13C CALLDATASIZE PUSH1 0x4 PUSH2 0xF70 JUMP JUMPDEST PUSH2 0x26F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x125 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x125 JUMP JUMPDEST PUSH2 0x141 PUSH2 0x171 CALLDATASIZE PUSH1 0x4 PUSH2 0xF9A JUMP JUMPDEST PUSH2 0x286 JUMP JUMPDEST PUSH2 0x17E PUSH2 0x2A8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x125 JUMP JUMPDEST PUSH2 0x155 PUSH2 0x2B6 JUMP JUMPDEST PUSH2 0x141 PUSH2 0x1A6 CALLDATASIZE PUSH1 0x4 PUSH2 0xF70 JUMP JUMPDEST PUSH2 0x2C0 JUMP JUMPDEST PUSH2 0x1BE PUSH2 0x1B9 CALLDATASIZE PUSH1 0x4 PUSH2 0xF70 JUMP JUMPDEST PUSH2 0x2FC JUMP JUMPDEST STOP JUMPDEST PUSH2 0x155 PUSH2 0x1CE CALLDATASIZE PUSH1 0x4 PUSH2 0xFD6 JUMP JUMPDEST PUSH2 0x30A JUMP JUMPDEST PUSH2 0x155 PUSH2 0x1E1 CALLDATASIZE PUSH1 0x4 PUSH2 0xFD6 JUMP JUMPDEST PUSH2 0x328 JUMP JUMPDEST PUSH2 0x118 PUSH2 0x346 JUMP JUMPDEST PUSH2 0x1BE PUSH2 0x1FC CALLDATASIZE PUSH1 0x4 PUSH2 0xF70 JUMP JUMPDEST PUSH2 0x350 JUMP JUMPDEST PUSH2 0x141 PUSH2 0x20F CALLDATASIZE PUSH1 0x4 PUSH2 0xF70 JUMP JUMPDEST PUSH2 0x35A JUMP JUMPDEST PUSH2 0x141 PUSH2 0x222 CALLDATASIZE PUSH1 0x4 PUSH2 0xF70 JUMP JUMPDEST PUSH2 0x3D9 JUMP JUMPDEST PUSH2 0x1BE PUSH2 0x235 CALLDATASIZE PUSH1 0x4 PUSH2 0x1041 JUMP JUMPDEST PUSH2 0x3E6 JUMP JUMPDEST PUSH2 0x1BE PUSH2 0x248 CALLDATASIZE PUSH1 0x4 PUSH2 0x10AD JUMP JUMPDEST PUSH2 0x408 JUMP JUMPDEST PUSH2 0x155 PUSH2 0x25B CALLDATASIZE PUSH1 0x4 PUSH2 0x1120 JUMP JUMPDEST PUSH2 0x56C JUMP JUMPDEST PUSH1 0x60 PUSH2 0x26A PUSH2 0x597 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27C CALLER DUP5 DUP5 PUSH2 0x629 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x293 DUP5 CALLER DUP5 PUSH2 0x74E JUMP JUMPDEST PUSH2 0x29E DUP5 DUP5 DUP5 PUSH2 0x7C8 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x26A PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x26A PUSH2 0x96C JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x27C SWAP2 DUP6 SWAP1 PUSH2 0x2F7 SWAP1 DUP7 SWAP1 PUSH2 0x1153 JUMP JUMPDEST PUSH2 0x629 JUMP JUMPDEST PUSH2 0x306 DUP3 DUP3 PUSH2 0xA5A JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x280 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x280 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x26A PUSH2 0xB19 JUMP JUMPDEST PUSH2 0x306 DUP3 DUP3 PUSH2 0xB28 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x367 CALLER DUP6 PUSH2 0x56C JUMP JUMPDEST SWAP1 POP DUP3 DUP2 LT ISZERO PUSH2 0x3CC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x29E CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x629 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27C CALLER DUP5 DUP5 PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x3 PUSH2 0x3F3 DUP5 DUP7 DUP4 PUSH2 0x120C JUMP JUMPDEST POP PUSH1 0x4 PUSH2 0x401 DUP3 DUP5 DUP4 PUSH2 0x120C JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x458 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A206578706972656420646561646C696E65000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x487 DUP13 PUSH2 0xC57 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP1 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH2 0x4E2 DUP3 PUSH2 0xC7F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4F2 DUP3 DUP8 DUP8 DUP8 PUSH2 0xCCD JUMP JUMPDEST SWAP1 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x555 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332305065726D69743A20696E76616C6964207369676E61747572650000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH2 0x560 DUP11 DUP11 DUP11 PUSH2 0x629 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x118A JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x5D2 SWAP1 PUSH2 0x118A JUMP JUMPDEST DUP1 ISZERO PUSH2 0x61F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5F4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x61F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x602 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x68B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6EC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x75A DUP5 DUP5 PUSH2 0x56C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x7C2 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x7B5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH2 0x7C2 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x629 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x82C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x88E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x906 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP8 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE SWAP3 MLOAD DUP6 DUP2 MSTORE SWAP1 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x7C2 JUMP JUMPDEST PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ DUP1 ISZERO PUSH2 0x9C5 JUMPI POP PUSH32 0x0 CHAINID EQ JUMPDEST ISZERO PUSH2 0x9D1 JUMPI POP PUSH1 0x7 SLOAD SWAP1 JUMP JUMPDEST POP PUSH1 0x8 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xAB0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST DUP1 PUSH1 0x2 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0xAC2 SWAP2 SWAP1 PUSH2 0x1153 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD DUP7 ADD SWAP1 SSTORE MLOAD DUP5 DUP2 MSTORE PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x118A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0xB88 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E2066726F6D20746865207A65726F20616464726573 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x73 PUSH1 0xF8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0xBFC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206275726E20616D6F756E7420657863656564732062616C616E PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP7 SUB SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD DUP8 SWAP1 SUB SWAP1 SSTORE MLOAD DUP6 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0x741 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP1 JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x280 PUSH2 0xC8C PUSH2 0x96C JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH2 0x1901 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x22 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x42 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x62 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xCDE DUP8 DUP8 DUP8 DUP8 PUSH2 0xCF5 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xCEB DUP2 PUSH2 0xDB9 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP4 GT ISZERO PUSH2 0xD2C JUMPI POP PUSH1 0x0 SWAP1 POP PUSH1 0x3 PUSH2 0xDB0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP1 DUP5 MSTORE DUP10 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD80 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xDA9 JUMPI PUSH1 0x0 PUSH1 0x1 SWAP3 POP SWAP3 POP POP PUSH2 0xDB0 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 SWAP1 POP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xDCD JUMPI PUSH2 0xDCD PUSH2 0x12CC JUMP JUMPDEST SUB PUSH2 0xDD5 JUMPI POP JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xDE9 JUMPI PUSH2 0xDE9 PUSH2 0x12CC JUMP JUMPDEST SUB PUSH2 0xE36 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E61747572650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xE4A JUMPI PUSH2 0xE4A PUSH2 0x12CC JUMP JUMPDEST SUB PUSH2 0xE97 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265206C656E67746800 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xEAB JUMPI PUSH2 0xEAB PUSH2 0x12CC JUMP JUMPDEST SUB PUSH2 0xF03 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45434453413A20696E76616C6964207369676E6174757265202773272076616C PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7565 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C3 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xF33 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xF17 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xF6B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xF83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF8C DUP4 PUSH2 0xF54 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xFAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFB8 DUP5 PUSH2 0xF54 JUMP JUMPDEST SWAP3 POP PUSH2 0xFC6 PUSH1 0x20 DUP6 ADD PUSH2 0xF54 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xFE8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFF1 DUP3 PUSH2 0xF54 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x100A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1022 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x103A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1057 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x106F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x107B DUP9 DUP4 DUP10 ADD PUSH2 0xFF8 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1094 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10A1 DUP8 DUP3 DUP9 ADD PUSH2 0xFF8 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x10C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10D1 DUP9 PUSH2 0xF54 JUMP JUMPDEST SWAP7 POP PUSH2 0x10DF PUSH1 0x20 DUP10 ADD PUSH2 0xF54 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1103 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1133 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x113C DUP4 PUSH2 0xF54 JUMP JUMPDEST SWAP2 POP PUSH2 0x114A PUSH1 0x20 DUP5 ADD PUSH2 0xF54 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x280 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x119E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0xC79 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0xC52 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH2 0x11E5 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1204 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x11F1 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x1224 JUMPI PUSH2 0x1224 PUSH2 0x1174 JUMP JUMPDEST PUSH2 0x1238 DUP4 PUSH2 0x1232 DUP4 SLOAD PUSH2 0x118A JUMP JUMPDEST DUP4 PUSH2 0x11BE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP5 GT PUSH1 0x1 DUP2 EQ PUSH2 0x126C JUMPI PUSH1 0x0 DUP6 ISZERO PUSH2 0x1254 JUMPI POP DUP4 DUP3 ADD CALLDATALOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP8 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP7 SWAP1 SHL OR DUP4 SSTORE PUSH2 0x401 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP1 DUP4 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x129D JUMPI DUP7 DUP6 ADD CALLDATALOAD DUP3 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 ADD PUSH2 0x127D JUMP JUMPDEST POP DUP7 DUP3 LT ISZERO PUSH2 0x12BA JUMPI PUSH1 0x0 NOT PUSH1 0xF8 DUP9 PUSH1 0x3 SHL AND SHR NOT DUP5 DUP8 ADD CALLDATALOAD AND DUP2 SSTORE JUMPDEST POP POP PUSH1 0x1 DUP6 PUSH1 0x1 SHL ADD DUP4 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xFC SWAP16 0xA7 LT 0x4C 0xED 0x2B 0xD0 DUP1 0x4B 0xEF SWAP1 LT 0x5F 0xB2 0x4F STATICCALL 0xCB STOP PUSH21 0x2D1BE2D37A77174CD20FBA2564736F6C6343000811 STOP CALLER ","sourceMap":"461:1230:180:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1457:114;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6956:154:86;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:181;;1162:22;1144:41;;1132:2;1117:18;6956:154:86;1004:187:181;5880:100:86;5963:12;;5880:100;;;1342:25:181;;;1330:2;1315:18;5880:100:86;1196:177:181;7552:249:86;;;;;;:::i;:::-;;:::i;1575:114:180:-;;;:::i;:::-;;;1883:4:181;1871:17;;;1853:36;;1841:2;1826:18;1575:114:180;1711:184:181;16523:107:86;;;:::i;8171:203::-;;;;;;:::i;:::-;;:::i;1149:89:180:-;;;;;;:::i;:::-;;:::i;:::-;;1013:132;;;;;;:::i;:::-;;:::i;16247:122:86:-;;;;;;:::i;:::-;;:::i;1335:118:180:-;;;:::i;1242:89::-;;;;;;:::i;:::-;;:::i;8834:377:86:-;;;;;;:::i;:::-;;:::i;6327:146::-;;;;;;:::i;:::-;;:::i;692:267:180:-;;;;;;:::i;:::-;;:::i;15586:608:86:-;;;;;;:::i;:::-;;:::i;6523:147::-;;;;;;:::i;:::-;;:::i;1457:114:180:-;1526:13;1554:12;:10;:12::i;:::-;1547:19;;1457:114;:::o;6956:154:86:-;7039:4;7051:37;7060:10;7072:7;7081:6;7051:8;:37::i;:::-;-1:-1:-1;7101:4:86;6956:154;;;;;:::o;7552:249::-;7677:4;7689:45;7705:7;7714:10;7726:7;7689:15;:45::i;:::-;7740:39;7750:7;7759:10;7771:7;7740:9;:39::i;:::-;-1:-1:-1;7792:4:86;7552:249;;;;;:::o;1575:114:180:-;1648:5;1668:16;5814:9:86;;;;;5736:92;16523:107;16583:7;16605:20;:18;:20::i;8171:203::-;8282:10;8261:4;8304:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;8304:33:86;;;;;;;;;;8261:4;;8273:79;;8294:8;;8304:47;;8340:11;;8304:47;:::i;:::-;8273:8;:79::i;1149:89:180:-;1211:22;1217:7;1226:6;1211:5;:22::i;:::-;1149:89;;:::o;1013:132::-;-1:-1:-1;;;;;6126:18:86;;1094:7:180;6126:18:86;;;;;;;;;;;1116:24:180;6030:119:86;16247:122;-1:-1:-1;;;;;16339:15:86;;16317:7;16339:15;;;:7;:15;;;;;918:14:59;16339:25:86;827:112:59;1335:118:180;1406:13;1434:14;:12;:14::i;1242:89::-;1304:22;1310:7;1319:6;1304:5;:22::i;8834:377:86:-;8929:4;8941:24;8968:31;8978:10;8990:8;8968:9;:31::i;:::-;8941:58;;9033:16;9013;:36;;9005:86;;;;-1:-1:-1;;;9005:86:86;;4744:2:181;9005:86:86;;;4726:21:181;4783:2;4763:18;;;4756:30;4822:34;4802:18;;;4795:62;-1:-1:-1;;;4873:18:181;;;4866:35;4918:19;;9005:86:86;;;;;;;;;9115:67;9124:10;9136:8;9165:16;9146;:35;9115:8;:67::i;6327:146::-;6406:4;6418:33;6428:10;6440:2;6444:6;6418:9;:33::i;692:267:180:-;912:5;:16;920:8;;912:5;:16;:::i;:::-;-1:-1:-1;934:7:180;:20;944:10;;934:7;:20;:::i;:::-;;692:267;;;;:::o;15586:608:86:-;15794:9;15775:15;:28;;15767:70;;;;-1:-1:-1;;;15767:70:86;;7725:2:181;15767:70:86;;;7707:21:181;7764:2;7744:18;;;7737:30;7803:31;7783:18;;;7776:59;7852:18;;15767:70:86;7523:353:181;15767:70:86;15844:19;3250:95;15912:6;15920:8;15930:6;15938:17;15948:6;15938:9;:17::i;:::-;15883:84;;;;;;8168:25:181;;;;-1:-1:-1;;;;;8267:15:181;;;8247:18;;;8240:43;8319:15;;;;8299:18;;;8292:43;8351:18;;;8344:34;8394:19;;;8387:35;8438:19;;;8431:35;;;8140:19;;15883:84:86;;;;;;;;;;;;15866:107;;;;;;15844:129;;15980:13;15996:29;16013:11;15996:16;:29::i;:::-;15980:45;;16032:15;16050:32;16064:5;16071:2;16075;16079;16050:13;:32::i;:::-;16032:50;;16107:6;-1:-1:-1;;;;;16096:17:86;:7;-1:-1:-1;;;;;16096:17:86;;16088:60;;;;-1:-1:-1;;;16088:60:86;;8679:2:181;16088:60:86;;;8661:21:181;8718:2;8698:18;;;8691:30;8757:32;8737:18;;;8730:60;8807:18;;16088:60:86;8477:354:181;16088:60:86;16155:34;16164:6;16172:8;16182:6;16155:8;:34::i;:::-;15761:433;;;15586:608;;;;;;;:::o;6523:147::-;-1:-1:-1;;;;;6636:19:86;;;6614:7;6636:19;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;6523:147::o;4849:92::-;4903:13;4931:5;4924:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4849:92;:::o;12557:349::-;-1:-1:-1;;;;;12673:20:86;;12665:69;;;;-1:-1:-1;;;12665:69:86;;9038:2:181;12665:69:86;;;9020:21:181;9077:2;9057:18;;;9050:30;9116:34;9096:18;;;9089:62;-1:-1:-1;;;9167:18:181;;;9160:34;9211:19;;12665:69:86;8836:400:181;12665:69:86;-1:-1:-1;;;;;12748:22:86;;12740:69;;;;-1:-1:-1;;;12740:69:86;;9443:2:181;12740:69:86;;;9425:21:181;9482:2;9462:18;;;9455:30;9521:34;9501:18;;;9494:62;-1:-1:-1;;;9572:18:181;;;9565:32;9614:19;;12740:69:86;9241:398:181;12740:69:86;-1:-1:-1;;;;;12816:19:86;;;;;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;:39;;;12866:35;;1342:25:181;;;12866:35:86;;1315:18:181;12866:35:86;;;;;;;;12557:349;;;:::o;13172:396::-;13287:24;13314:27;13324:6;13332:8;13314:9;:27::i;:::-;13287:54;;-1:-1:-1;;13351:16:86;:37;13347:217;;13426:7;13406:16;:27;;13398:69;;;;-1:-1:-1;;;13398:69:86;;9846:2:181;13398:69:86;;;9828:21:181;9885:2;9865:18;;;9858:30;9924:31;9904:18;;;9897:59;9973:18;;13398:69:86;9644:353:181;13398:69:86;13495:54;13504:6;13512:8;13541:7;13522:16;:26;13495:8;:54::i;:::-;13281:287;13172:396;;;:::o;9660:818::-;-1:-1:-1;;;;;9780:21:86;;9772:71;;;;-1:-1:-1;;;9772:71:86;;10204:2:181;9772:71:86;;;10186:21:181;10243:2;10223:18;;;10216:30;10282:34;10262:18;;;10255:62;-1:-1:-1;;;10333:18:181;;;10326:35;10378:19;;9772:71:86;10002:401:181;9772:71:86;-1:-1:-1;;;;;9857:24:86;;9849:72;;;;-1:-1:-1;;;9849:72:86;;10610:2:181;9849:72:86;;;10592:21:181;10649:2;10629:18;;;10622:30;10688:34;10668:18;;;10661:62;-1:-1:-1;;;10739:18:181;;;10732:33;10782:19;;9849:72:86;10408:399:181;9849:72:86;-1:-1:-1;;;;;10007:18:86;;9985:19;10007:18;;;;;;;;;;;10039:22;;;;10031:73;;;;-1:-1:-1;;;10031:73:86;;11014:2:181;10031:73:86;;;10996:21:181;11053:2;11033:18;;;11026:30;11092:34;11072:18;;;11065:62;-1:-1:-1;;;11143:18:181;;;11136:36;11189:19;;10031:73:86;10812:402:181;10031:73:86;-1:-1:-1;;;;;10128:18:86;;;:9;:18;;;;;;;;;;;10149:21;;;10128:42;;10329:21;;;;;;;;;;:32;;;;;;10379:38;;1342:25:181;;;10329:21:86;;10379:38;;1315:18:181;10379:38:86;;;;;;;10424:49;11537:620;17074:282;17127:7;17154:4;-1:-1:-1;;;;;17163:12:86;17146:29;;:66;;;;;17196:16;17179:13;:33;17146:66;17142:210;;;-1:-1:-1;17229:24:86;;;17074:282::o;17142:210::-;-1:-1:-1;17315:12:86;;17623:73;;;3392:95;17623:73;;;;12643:25:181;;;;12684:18;;;12677:34;;;;17329:15:86;12727:18:181;;;12720:34;17667:13:86;12770:18:181;;;12763:34;17690:4:86;12813:19:181;;;;12806:61;;;;17623:73:86;;;;;;;;;;12615:19:181;;;;17623:73:86;;;17613:84;;;;;;1457:114:180:o;10731:505:86:-;-1:-1:-1;;;;;10812:22:86;;10804:66;;;;-1:-1:-1;;;10804:66:86;;11421:2:181;10804:66:86;;;11403:21:181;11460:2;11440:18;;;11433:30;11499:33;11479:18;;;11472:61;11550:18;;10804:66:86;11219:355:181;10804:66:86;10951:7;10935:12;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;11088:19:86;;:9;:19;;;;;;;;;;;:30;;;;;;11135:39;1342:25:181;;;11135:39:86;;1315:18:181;11135:39:86;;;;;;;1149:89:180;;:::o;5044:96:86:-;5100:13;5128:7;5121:14;;;;;:::i;11537:620::-;-1:-1:-1;;;;;11618:22:86;;11610:68;;;;-1:-1:-1;;;11610:68:86;;11781:2:181;11610:68:86;;;11763:21:181;11820:2;11800:18;;;11793:30;11859:34;11839:18;;;11832:62;-1:-1:-1;;;11910:18:181;;;11903:31;11951:19;;11610:68:86;11579:397:181;11610:68:86;-1:-1:-1;;;;;11768:19:86;;11743:22;11768:19;;;;;;;;;;;11801:25;;;;11793:72;;;;-1:-1:-1;;;11793:72:86;;12183:2:181;11793:72:86;;;12165:21:181;12222:2;12202:18;;;12195:30;12261:34;12241:18;;;12234:62;-1:-1:-1;;;12312:18:181;;;12305:32;12354:19;;11793:72:86;11981:398:181;11793:72:86;-1:-1:-1;;;;;11889:19:86;;:9;:19;;;;;;;;;;;11911:24;;;11889:46;;12015:12;:23;;;;;;;12056:39;1342:25:181;;;11889:9:86;;:19;12056:39;;1315:18:181;12056:39:86;1196:177:181;12102:50:86;11604:553;11537:620;;:::o;16760:191::-;-1:-1:-1;;;;;16877:15:86;;16821;16877;;;:7;:15;;;;;918:14:59;;1050:1;1032:19;;;;918:14;16929:17:86;16838:113;16760:191;;;:::o;18295:159::-;18372:7;18394:55;18416:20;:18;:20::i;:::-;18438:10;8470:57:62;;-1:-1:-1;;;8470:57:62;;;13136:27:181;13179:11;;;13172:27;;;13215:12;;;13208:28;;;8434:7:62;;13252:12:181;;8470:57:62;;;;;;;;;;;;8460:68;;;;;;8453:75;;8341:194;;;;;6696:270;6819:7;6839:17;6858:18;6880:25;6891:4;6897:1;6900;6903;6880:10;:25::i;:::-;6838:67;;;;6915:18;6927:5;6915:11;:18::i;:::-;-1:-1:-1;6950:9:62;6696:270;-1:-1:-1;;;;;6696:270:62:o;5069:1494::-;5195:7;;6119:66;6106:79;;6102:161;;;-1:-1:-1;6217:1:62;;-1:-1:-1;6221:30:62;6201:51;;6102:161;6374:24;;;6357:14;6374:24;;;;;;;;;13502:25:181;;;13575:4;13563:17;;13543:18;;;13536:45;;;;13597:18;;;13590:34;;;13640:18;;;13633:34;;;6374:24:62;;13474:19:181;;6374:24:62;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6374:24:62;;-1:-1:-1;;6374:24:62;;;-1:-1:-1;;;;;;;6412:20:62;;6408:101;;6464:1;6468:29;6448:50;;;;;;;6408:101;6527:6;-1:-1:-1;6535:20:62;;-1:-1:-1;5069:1494:62;;;;;;;;:::o;570:511::-;647:20;638:5;:29;;;;;;;;:::i;:::-;;634:441;;570:511;:::o;634:441::-;743:29;734:5;:38;;;;;;;;:::i;:::-;;730:345;;788:34;;-1:-1:-1;;;788:34:62;;14012:2:181;788:34:62;;;13994:21:181;14051:2;14031:18;;;14024:30;14090:26;14070:18;;;14063:54;14134:18;;788:34:62;13810:348:181;730:345:62;852:35;843:5;:44;;;;;;;;:::i;:::-;;839:236;;903:41;;-1:-1:-1;;;903:41:62;;14365:2:181;903:41:62;;;14347:21:181;14404:2;14384:18;;;14377:30;14443:33;14423:18;;;14416:61;14494:18;;903:41:62;14163:355:181;839:236:62;974:30;965:5;:39;;;;;;;;:::i;:::-;;961:114;;1020:44;;-1:-1:-1;;;1020:44:62;;14725:2:181;1020:44:62;;;14707:21:181;14764:2;14744:18;;;14737:30;14803:34;14783:18;;;14776:62;-1:-1:-1;;;14854:18:181;;;14847:32;14896:19;;1020:44:62;14523:398:181;961:114:62;570:511;:::o;14:548:181:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:181;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:181:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;2082:186::-;2141:6;2194:2;2182:9;2173:7;2169:23;2165:32;2162:52;;;2210:1;2207;2200:12;2162:52;2233:29;2252:9;2233:29;:::i;:::-;2223:39;2082:186;-1:-1:-1;;;2082:186:181:o;2273:348::-;2325:8;2335:6;2389:3;2382:4;2374:6;2370:17;2366:27;2356:55;;2407:1;2404;2397:12;2356:55;-1:-1:-1;2430:20:181;;2473:18;2462:30;;2459:50;;;2505:1;2502;2495:12;2459:50;2542:4;2534:6;2530:17;2518:29;;2594:3;2587:4;2578:6;2570;2566:19;2562:30;2559:39;2556:59;;;2611:1;2608;2601:12;2556:59;2273:348;;;;;:::o;2626:721::-;2718:6;2726;2734;2742;2795:2;2783:9;2774:7;2770:23;2766:32;2763:52;;;2811:1;2808;2801:12;2763:52;2851:9;2838:23;2880:18;2921:2;2913:6;2910:14;2907:34;;;2937:1;2934;2927:12;2907:34;2976:59;3027:7;3018:6;3007:9;3003:22;2976:59;:::i;:::-;3054:8;;-1:-1:-1;2950:85:181;-1:-1:-1;3142:2:181;3127:18;;3114:32;;-1:-1:-1;3158:16:181;;;3155:36;;;3187:1;3184;3177:12;3155:36;;3226:61;3279:7;3268:8;3257:9;3253:24;3226:61;:::i;:::-;2626:721;;;;-1:-1:-1;3306:8:181;-1:-1:-1;;;;2626:721:181:o;3352:693::-;3463:6;3471;3479;3487;3495;3503;3511;3564:3;3552:9;3543:7;3539:23;3535:33;3532:53;;;3581:1;3578;3571:12;3532:53;3604:29;3623:9;3604:29;:::i;:::-;3594:39;;3652:38;3686:2;3675:9;3671:18;3652:38;:::i;:::-;3642:48;;3737:2;3726:9;3722:18;3709:32;3699:42;;3788:2;3777:9;3773:18;3760:32;3750:42;;3842:3;3831:9;3827:19;3814:33;3887:4;3880:5;3876:16;3869:5;3866:27;3856:55;;3907:1;3904;3897:12;3856:55;3352:693;;;;-1:-1:-1;3352:693:181;;;;3930:5;3982:3;3967:19;;3954:33;;-1:-1:-1;4034:3:181;4019:19;;;4006:33;;3352:693;-1:-1:-1;;3352:693:181:o;4050:260::-;4118:6;4126;4179:2;4167:9;4158:7;4154:23;4150:32;4147:52;;;4195:1;4192;4185:12;4147:52;4218:29;4237:9;4218:29;:::i;:::-;4208:39;;4266:38;4300:2;4289:9;4285:18;4266:38;:::i;:::-;4256:48;;4050:260;;;;;:::o;4315:222::-;4380:9;;;4401:10;;;4398:133;;;4453:10;4448:3;4444:20;4441:1;4434:31;4488:4;4485:1;4478:15;4516:4;4513:1;4506:15;4948:127;5009:10;5004:3;5000:20;4997:1;4990:31;5040:4;5037:1;5030:15;5064:4;5061:1;5054:15;5080:380;5159:1;5155:12;;;;5202;;;5223:61;;5277:4;5269:6;5265:17;5255:27;;5223:61;5330:2;5322:6;5319:14;5299:18;5296:38;5293:161;;5376:10;5371:3;5367:20;5364:1;5357:31;5411:4;5408:1;5401:15;5439:4;5436:1;5429:15;5591:545;5693:2;5688:3;5685:11;5682:448;;;5729:1;5754:5;5750:2;5743:17;5799:4;5795:2;5785:19;5869:2;5857:10;5853:19;5850:1;5846:27;5840:4;5836:38;5905:4;5893:10;5890:20;5887:47;;;-1:-1:-1;5928:4:181;5887:47;5983:2;5978:3;5974:12;5971:1;5967:20;5961:4;5957:31;5947:41;;6038:82;6056:2;6049:5;6046:13;6038:82;;;6101:17;;;6082:1;6071:13;6038:82;;;6042:3;;;5591:545;;;:::o;6312:1206::-;6436:18;6431:3;6428:27;6425:53;;;6458:18;;:::i;:::-;6487:94;6577:3;6537:38;6569:4;6563:11;6537:38;:::i;:::-;6531:4;6487:94;:::i;:::-;6607:1;6632:2;6627:3;6624:11;6649:1;6644:616;;;;7304:1;7321:3;7318:93;;;-1:-1:-1;7377:19:181;;;7364:33;7318:93;-1:-1:-1;;6269:1:181;6265:11;;;6261:24;6257:29;6247:40;6293:1;6289:11;;;6244:57;7424:78;;6617:895;;6644:616;5538:1;5531:14;;;5575:4;5562:18;;-1:-1:-1;;6680:17:181;;;6781:9;6803:229;6817:7;6814:1;6811:14;6803:229;;;6906:19;;;6893:33;6878:49;;7013:4;6998:20;;;;6966:1;6954:14;;;;6833:12;6803:229;;;6807:3;7060;7051:7;7048:16;7045:159;;;7184:1;7180:6;7174:3;7168;7165:1;7161:11;7157:21;7153:34;7149:39;7136:9;7131:3;7127:19;7114:33;7110:79;7102:6;7095:95;7045:159;;;7247:1;7241:3;7238:1;7234:11;7230:19;7224:4;7217:33;6617:895;;6312:1206;;;:::o;13678:127::-;13739:10;13734:3;13730:20;13727:1;13720:31;13770:4;13767:1;13760:15;13794:4;13791:1;13784:15"},"gasEstimates":{"creation":{"codeDepositCost":"977600","executionCost":"infinite","totalCost":"infinite"},"external":{"DOMAIN_SEPARATOR()":"infinite","allowance(address,address)":"infinite","approve(address,uint256)":"24644","balanceOf(address)":"2597","burn(address,uint256)":"50954","decimals()":"2368","decreaseAllowance(address,uint256)":"26967","increaseAllowance(address,uint256)":"infinite","mint(address,uint256)":"50894","name()":"infinite","nonces(address)":"2616","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","setDetails(string,string)":"infinite","symbol()":"infinite","totalSupply()":"2349","transfer(address,uint256)":"51086","transferFrom(address,address,uint256)":"infinite"}},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(address,uint256)":"9dc29fac","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","increaseAllowance(address,uint256)":"39509351","mint(address,uint256)":"40c10f19","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","setDetails(string,string)":"b7b090ee","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_newName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_newSymbol\",\"type\":\"string\"}],\"name\":\"setDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Anybody can mint as many tokens as they likeAnybody can burn anyone else's tokens\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}. This is ALWAYS calculated at runtime because the token name is mutable, not constant.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address. - `_spender` must have allowance for the caller of at least `_subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\",\"params\":{\"_deadline\":\"The timestamp before which the signature must be submitted\",\"_owner\":\"The account setting approval & signing the message\",\"_r\":\"ECDSA signature r\",\"_s\":\"ECDSA signature s\",\"_spender\":\"The account receiving approval to spend owner's tokens\",\"_v\":\"ECDSA signature v\",\"_value\":\"The amount to set approval for\"}},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `_sender` and `recipient` cannot be the zero address. - `_sender` must have a balance of at least `amount`. - the caller must have allowance for ``_sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Sets approval from owner to spender to value as long as deadline has not passed by submitting a valid signature from owner Uses EIP 712 structured data hashing & signing https://eips.ethereum.org/EIPS/eip-712\"}},\"notice\":\"This token is ONLY useful for testing\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/TestERC20.sol\":\"TestERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `from` to `to` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 amount\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n    /**\\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n     * given ``owner``'s signed approval.\\n     *\\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n     * ordering also apply here.\\n     *\\n     * Emits an {Approval} event.\\n     *\\n     * Requirements:\\n     *\\n     * - `spender` cannot be the zero address.\\n     * - `deadline` must be a timestamp in the future.\\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n     * over the EIP712-formatted function arguments.\\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\\n     *\\n     * For more information on the signature format, see the\\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n     * section].\\n     */\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    /**\\n     * @dev Returns the current nonce for `owner`. This value must be\\n     * included whenever a signature is generated for {permit}.\\n     *\\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n     * prevents a signature from being used multiple times.\\n     */\\n    function nonces(address owner) external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n     */\\n    // solhint-disable-next-line func-name-mixedcase\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Counters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Counters\\n * @author Matt Condon (@shrugs)\\n * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\\n * of elements in a mapping, issuing ERC721 ids, or counting request ids.\\n *\\n * Include with `using Counters for Counters.Counter;`\\n */\\nlibrary Counters {\\n    struct Counter {\\n        // This variable should never be directly accessed by users of the library: interactions must be restricted to\\n        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add\\n        // this feature: see https://github.com/ethereum/solidity/issues/4637\\n        uint256 _value; // default: 0\\n    }\\n\\n    function current(Counter storage counter) internal view returns (uint256) {\\n        return counter._value;\\n    }\\n\\n    function increment(Counter storage counter) internal {\\n        unchecked {\\n            counter._value += 1;\\n        }\\n    }\\n\\n    function decrement(Counter storage counter) internal {\\n        uint256 value = counter._value;\\n        require(value > 0, \\\"Counter: decrement overflow\\\");\\n        unchecked {\\n            counter._value = value - 1;\\n        }\\n    }\\n\\n    function reset(Counter storage counter) internal {\\n        counter._value = 0;\\n    }\\n}\\n\",\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n    bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n    uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n     */\\n    function toString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            uint256 length = Math.log10(value) + 1;\\n            string memory buffer = new string(length);\\n            uint256 ptr;\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                ptr := add(buffer, add(32, length))\\n            }\\n            while (true) {\\n                ptr--;\\n                /// @solidity memory-safe-assembly\\n                assembly {\\n                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n                }\\n                value /= 10;\\n                if (value == 0) break;\\n            }\\n            return buffer;\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(uint256 value) internal pure returns (string memory) {\\n        unchecked {\\n            return toHexString(value, Math.log256(value) + 1);\\n        }\\n    }\\n\\n    /**\\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n     */\\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n        bytes memory buffer = new bytes(2 * length + 2);\\n        buffer[0] = \\\"0\\\";\\n        buffer[1] = \\\"x\\\";\\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\\n            buffer[i] = _SYMBOLS[value & 0xf];\\n            value >>= 4;\\n        }\\n        require(value == 0, \\\"Strings: hex length insufficient\\\");\\n        return string(buffer);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n     */\\n    function toHexString(address addr) internal pure returns (string memory) {\\n        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n    }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n    enum RecoverError {\\n        NoError,\\n        InvalidSignature,\\n        InvalidSignatureLength,\\n        InvalidSignatureS,\\n        InvalidSignatureV // Deprecated in v4.8\\n    }\\n\\n    function _throwError(RecoverError error) private pure {\\n        if (error == RecoverError.NoError) {\\n            return; // no error: do nothing\\n        } else if (error == RecoverError.InvalidSignature) {\\n            revert(\\\"ECDSA: invalid signature\\\");\\n        } else if (error == RecoverError.InvalidSignatureLength) {\\n            revert(\\\"ECDSA: invalid signature length\\\");\\n        } else if (error == RecoverError.InvalidSignatureS) {\\n            revert(\\\"ECDSA: invalid signature 's' value\\\");\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature` or error string. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     *\\n     * Documentation for signature generation:\\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n        if (signature.length == 65) {\\n            bytes32 r;\\n            bytes32 s;\\n            uint8 v;\\n            // ecrecover takes the signature parameters, and the only way to get them\\n            // currently is to use assembly.\\n            /// @solidity memory-safe-assembly\\n            assembly {\\n                r := mload(add(signature, 0x20))\\n                s := mload(add(signature, 0x40))\\n                v := byte(0, mload(add(signature, 0x60)))\\n            }\\n            return tryRecover(hash, v, r, s);\\n        } else {\\n            return (address(0), RecoverError.InvalidSignatureLength);\\n        }\\n    }\\n\\n    /**\\n     * @dev Returns the address that signed a hashed message (`hash`) with\\n     * `signature`. This address can then be used for verification purposes.\\n     *\\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n     * this function rejects them by requiring the `s` value to be in the lower\\n     * half order, and the `v` value to be either 27 or 28.\\n     *\\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n     * verification to be secure: it is possible to craft signatures that\\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n     * this is by receiving a hash of the original message (which may otherwise\\n     * be too long), and then calling {toEthSignedMessageHash} on it.\\n     */\\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n     *\\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        bytes32 r,\\n        bytes32 vs\\n    ) internal pure returns (address, RecoverError) {\\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\\n        return tryRecover(hash, v, r, s);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n     *\\n     * _Available since v4.2._\\n     */\\n    function recover(\\n        bytes32 hash,\\n        bytes32 r,\\n        bytes32 vs\\n    ) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     *\\n     * _Available since v4.3._\\n     */\\n    function tryRecover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address, RecoverError) {\\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n        // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n        //\\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n        // these malleable signatures as well.\\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n            return (address(0), RecoverError.InvalidSignatureS);\\n        }\\n\\n        // If the signature is valid (and not malleable), return the signer address\\n        address signer = ecrecover(hash, v, r, s);\\n        if (signer == address(0)) {\\n            return (address(0), RecoverError.InvalidSignature);\\n        }\\n\\n        return (signer, RecoverError.NoError);\\n    }\\n\\n    /**\\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\\n     * `r` and `s` signature fields separately.\\n     */\\n    function recover(\\n        bytes32 hash,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) internal pure returns (address) {\\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n        _throwError(error);\\n        return recovered;\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n        // 32 is the length in bytes of hash,\\n        // enforced by the type signature above\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\\n     * produces hash corresponding to the one signed with the\\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n     * JSON-RPC method as part of EIP-191.\\n     *\\n     * See {recover}.\\n     */\\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n    }\\n\\n    /**\\n     * @dev Returns an Ethereum Signed Typed Data, created from a\\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\\n     * to the one signed with the\\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n     * JSON-RPC method as part of EIP-712.\\n     *\\n     * See {recover}.\\n     */\\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n    }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n    /* solhint-disable var-name-mixedcase */\\n    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n    // invalidate the cached domain separator if the chain id changes.\\n    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n    uint256 private immutable _CACHED_CHAIN_ID;\\n    address private immutable _CACHED_THIS;\\n\\n    bytes32 private immutable _HASHED_NAME;\\n    bytes32 private immutable _HASHED_VERSION;\\n    bytes32 private immutable _TYPE_HASH;\\n\\n    /* solhint-enable var-name-mixedcase */\\n\\n    /**\\n     * @dev Initializes the domain separator and parameter caches.\\n     *\\n     * The meaning of `name` and `version` is specified in\\n     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n     *\\n     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n     * - `version`: the current major version of the signing domain.\\n     *\\n     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n     * contract upgrade].\\n     */\\n    constructor(string memory name, string memory version) {\\n        bytes32 hashedName = keccak256(bytes(name));\\n        bytes32 hashedVersion = keccak256(bytes(version));\\n        bytes32 typeHash = keccak256(\\n            \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n        );\\n        _HASHED_NAME = hashedName;\\n        _HASHED_VERSION = hashedVersion;\\n        _CACHED_CHAIN_ID = block.chainid;\\n        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n        _CACHED_THIS = address(this);\\n        _TYPE_HASH = typeHash;\\n    }\\n\\n    /**\\n     * @dev Returns the domain separator for the current chain.\\n     */\\n    function _domainSeparatorV4() internal view returns (bytes32) {\\n        if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n            return _CACHED_DOMAIN_SEPARATOR;\\n        } else {\\n            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n        }\\n    }\\n\\n    function _buildDomainSeparator(\\n        bytes32 typeHash,\\n        bytes32 nameHash,\\n        bytes32 versionHash\\n    ) private view returns (bytes32) {\\n        return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n    }\\n\\n    /**\\n     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n     * function returns the hash of the fully encoded EIP712 message for this domain.\\n     *\\n     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n     *\\n     * ```solidity\\n     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n     *     keccak256(\\\"Mail(address to,string contents)\\\"),\\n     *     mailTo,\\n     *     keccak256(bytes(mailContents))\\n     * )));\\n     * address signer = ECDSA.recover(digest, signature);\\n     * ```\\n     */\\n    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n    }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n    enum Rounding {\\n        Down, // Toward negative infinity\\n        Up, // Toward infinity\\n        Zero // Toward zero\\n    }\\n\\n    /**\\n     * @dev Returns the largest of two numbers.\\n     */\\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a > b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the smallest of two numbers.\\n     */\\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return a < b ? a : b;\\n    }\\n\\n    /**\\n     * @dev Returns the average of two numbers. The result is rounded towards\\n     * zero.\\n     */\\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b) / 2 can overflow.\\n        return (a & b) + (a ^ b) / 2;\\n    }\\n\\n    /**\\n     * @dev Returns the ceiling of the division of two numbers.\\n     *\\n     * This differs from standard division with `/` in that it rounds up instead\\n     * of rounding down.\\n     */\\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // (a + b - 1) / b can overflow on addition, so we distribute.\\n        return a == 0 ? 0 : (a - 1) / b + 1;\\n    }\\n\\n    /**\\n     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n     * with further edits by Uniswap Labs also under MIT license.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator\\n    ) internal pure returns (uint256 result) {\\n        unchecked {\\n            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n            // variables such that product = prod1 * 2^256 + prod0.\\n            uint256 prod0; // Least significant 256 bits of the product\\n            uint256 prod1; // Most significant 256 bits of the product\\n            assembly {\\n                let mm := mulmod(x, y, not(0))\\n                prod0 := mul(x, y)\\n                prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n            }\\n\\n            // Handle non-overflow cases, 256 by 256 division.\\n            if (prod1 == 0) {\\n                return prod0 / denominator;\\n            }\\n\\n            // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n            require(denominator > prod1);\\n\\n            ///////////////////////////////////////////////\\n            // 512 by 256 division.\\n            ///////////////////////////////////////////////\\n\\n            // Make division exact by subtracting the remainder from [prod1 prod0].\\n            uint256 remainder;\\n            assembly {\\n                // Compute remainder using mulmod.\\n                remainder := mulmod(x, y, denominator)\\n\\n                // Subtract 256 bit number from 512 bit number.\\n                prod1 := sub(prod1, gt(remainder, prod0))\\n                prod0 := sub(prod0, remainder)\\n            }\\n\\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n            // See https://cs.stackexchange.com/q/138556/92363.\\n\\n            // Does not overflow because the denominator cannot be zero at this stage in the function.\\n            uint256 twos = denominator & (~denominator + 1);\\n            assembly {\\n                // Divide denominator by twos.\\n                denominator := div(denominator, twos)\\n\\n                // Divide [prod1 prod0] by twos.\\n                prod0 := div(prod0, twos)\\n\\n                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n                twos := add(div(sub(0, twos), twos), 1)\\n            }\\n\\n            // Shift in bits from prod1 into prod0.\\n            prod0 |= prod1 * twos;\\n\\n            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n            // four bits. That is, denominator * inv = 1 mod 2^4.\\n            uint256 inverse = (3 * denominator) ^ 2;\\n\\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n            // in modular arithmetic, doubling the correct bits in each step.\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n            inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n            // is no longer required.\\n            result = prod0 * inverse;\\n            return result;\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n     */\\n    function mulDiv(\\n        uint256 x,\\n        uint256 y,\\n        uint256 denominator,\\n        Rounding rounding\\n    ) internal pure returns (uint256) {\\n        uint256 result = mulDiv(x, y, denominator);\\n        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n            result += 1;\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n     *\\n     * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n     */\\n    function sqrt(uint256 a) internal pure returns (uint256) {\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n        //\\n        // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n        //\\n        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n        // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n        // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n        //\\n        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n        uint256 result = 1 << (log2(a) >> 1);\\n\\n        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n        // into the expected uint128 result.\\n        unchecked {\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            result = (result + a / result) >> 1;\\n            return min(result, a / result);\\n        }\\n    }\\n\\n    /**\\n     * @notice Calculates sqrt(a), following the selected rounding direction.\\n     */\\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = sqrt(a);\\n            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 128;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 64;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 32;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 16;\\n            }\\n            if (value >> 8 > 0) {\\n                value >>= 8;\\n                result += 8;\\n            }\\n            if (value >> 4 > 0) {\\n                value >>= 4;\\n                result += 4;\\n            }\\n            if (value >> 2 > 0) {\\n                value >>= 2;\\n                result += 2;\\n            }\\n            if (value >> 1 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log2(value);\\n            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >= 10**64) {\\n                value /= 10**64;\\n                result += 64;\\n            }\\n            if (value >= 10**32) {\\n                value /= 10**32;\\n                result += 32;\\n            }\\n            if (value >= 10**16) {\\n                value /= 10**16;\\n                result += 16;\\n            }\\n            if (value >= 10**8) {\\n                value /= 10**8;\\n                result += 8;\\n            }\\n            if (value >= 10**4) {\\n                value /= 10**4;\\n                result += 4;\\n            }\\n            if (value >= 10**2) {\\n                value /= 10**2;\\n                result += 2;\\n            }\\n            if (value >= 10**1) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log10(value);\\n            return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n        }\\n    }\\n\\n    /**\\n     * @dev Return the log in base 256, rounded down, of a positive value.\\n     * Returns 0 if given 0.\\n     *\\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n     */\\n    function log256(uint256 value) internal pure returns (uint256) {\\n        uint256 result = 0;\\n        unchecked {\\n            if (value >> 128 > 0) {\\n                value >>= 128;\\n                result += 16;\\n            }\\n            if (value >> 64 > 0) {\\n                value >>= 64;\\n                result += 8;\\n            }\\n            if (value >> 32 > 0) {\\n                value >>= 32;\\n                result += 4;\\n            }\\n            if (value >> 16 > 0) {\\n                value >>= 16;\\n                result += 2;\\n            }\\n            if (value >> 8 > 0) {\\n                result += 1;\\n            }\\n        }\\n        return result;\\n    }\\n\\n    /**\\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n     * Returns 0 if given 0.\\n     */\\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n        unchecked {\\n            uint256 result = log256(value);\\n            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/OZERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n// This is modified from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\"\\n// Modifications were made to allow the name, hashed name, and cached\\n// domain separator to be internal\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\\\";\\nimport {EIP712} from \\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\";\\nimport {ECDSA} from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Counters.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * Implements ERC20 Permit extension allowing approvals to be made via\\n * signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20\\n * allowance (see {IERC20-allowance}) by presenting a message signed by the\\n * account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin guidelines: functions revert instead\\n * of returning `false` on failure. This behavior is nonetheless conventional\\n * and does not conflict with the expectations of ERC20 applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n *\\n * @dev Cannot use default ERC20/ERC20Permit implementation as there is no way to update\\n * the name (set to private).\\n *\\n * Cannot use default EIP712 implementation as the _HASHED_NAME may change.\\n * These functions use the same implementation, with easier storage access.\\n */\\ncontract ERC20 is IERC20Metadata, IERC20Permit {\\n  // See ERC20\\n  mapping(address => uint256) private _balances;\\n\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 private _totalSupply;\\n\\n  string internal _name; // made internal, need access\\n  string internal _symbol; // made internal, need access\\n  uint8 internal _decimals; // made internal, need access\\n\\n  // See ERC20Permit\\n  using Counters for Counters.Counter;\\n\\n  mapping(address => Counters.Counter) private _nonces;\\n\\n  // See EIP712\\n  // Immutables used in EIP 712 structured data hashing & signing\\n  // https://eips.ethereum.org/EIPS/eip-712\\n  bytes32 private constant _PERMIT_TYPEHASH =\\n    keccak256(\\\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\\\");\\n  bytes32 internal constant _TYPE_HASH =\\n    keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n  // made internal, need access\\n\\n  // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n  // invalidate the cached domain separator if the chain id changes.\\n  bytes32 internal _CACHED_DOMAIN_SEPARATOR; // made internal, may change\\n  uint256 private immutable _CACHED_CHAIN_ID;\\n  address private immutable _CACHED_THIS;\\n\\n  bytes32 internal _HASHED_NAME; // made internal, may change\\n  bytes32 internal immutable _HASHED_VERSION; // made internal, need access\\n\\n  /**\\n   * @dev Initializes the {EIP712} domain separator using the `name` parameter,\\n   * and setting `version` to `\\\"1\\\"`.\\n   *\\n   * It's a good idea to use the same `name` that is defined as the ERC20 token name.\\n   */\\n  constructor(\\n    uint8 decimals_,\\n    string memory name_,\\n    string memory symbol_,\\n    string memory version_\\n  ) {\\n    // ERC20\\n    _name = name_;\\n    _symbol = symbol_;\\n    _decimals = decimals_;\\n\\n    // EIP712\\n    bytes32 hashedName = keccak256(bytes(name_));\\n    bytes32 hashedVersion = keccak256(bytes(version_));\\n    _HASHED_NAME = hashedName;\\n    _HASHED_VERSION = hashedVersion;\\n    _CACHED_CHAIN_ID = block.chainid;\\n    _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, hashedName, hashedVersion);\\n    _CACHED_THIS = address(this);\\n  }\\n\\n  /**\\n   * @dev Returns the name of the token.\\n   */\\n  function name() public view virtual override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /**\\n   * @dev Returns the symbol of the token, usually a shorter version of the\\n   * name.\\n   */\\n  function symbol() public view virtual override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /**\\n   * @dev Returns the number of decimals used to get its user representation.\\n   * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n   * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n   *\\n   * Tokens usually opt for a value of 18, imitating the relationship between\\n   * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n   * overridden;\\n   *\\n   * NOTE: This information is only used for _display_ purposes: it in\\n   * no way affects any of the arithmetic of the contract, including\\n   * {IERC20-balanceOf} and {IERC20-transfer}.\\n   */\\n  function decimals() public view virtual override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-totalSupply}.\\n   */\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-balanceOf}.\\n   */\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _balances[account];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transfer}.\\n   *\\n   * Requirements:\\n   *\\n   * - `to` cannot be the zero address.\\n   * - the caller must have a balance of at least `amount`.\\n   */\\n  function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n    _transfer(msg.sender, to, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-allowance}.\\n   */\\n  function allowance(address _owner, address _spender) public view virtual override returns (uint256) {\\n    return _allowances[_owner][_spender];\\n  }\\n\\n  /**\\n   * @dev See {IERC20-approve}.\\n   *\\n   * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n   * `transferFrom`. This is semantically equivalent to an infinite approval.\\n   *\\n   * Requirements:\\n   *\\n   * - `spender` cannot be the zero address.\\n   */\\n  function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n    _approve(msg.sender, spender, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-transferFrom}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance. This is not\\n   * required by the EIP. See the note at the beginning of {ERC20}.\\n   *\\n   * Requirements:\\n   *\\n   * - `_sender` and `recipient` cannot be the zero address.\\n   * - `_sender` must have a balance of at least `amount`.\\n   * - the caller must have allowance for ``_sender``'s tokens of at least\\n   * `amount`.\\n   */\\n  function transferFrom(\\n    address _sender,\\n    address _recipient,\\n    uint256 _amount\\n  ) public virtual override returns (bool) {\\n    _spendAllowance(_sender, msg.sender, _amount);\\n    _transfer(_sender, _recipient, _amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically increases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `_spender` cannot be the zero address.\\n   */\\n  function increaseAllowance(address _spender, uint256 _addedValue) public virtual returns (bool) {\\n    _approve(msg.sender, _spender, _allowances[msg.sender][_spender] + _addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n   *\\n   * This is an alternative to {approve} that can be used as a mitigation for\\n   * problems described in {IERC20-approve}.\\n   *\\n   * Emits an {Approval} event indicating the updated allowance.\\n   *\\n   * Requirements:\\n   *\\n   * - `_spender` cannot be the zero address.\\n   * - `_spender` must have allowance for the caller of at least\\n   * `_subtractedValue`.\\n   */\\n  function decreaseAllowance(address _spender, uint256 _subtractedValue) public virtual returns (bool) {\\n    uint256 currentAllowance = allowance(msg.sender, _spender);\\n    require(currentAllowance >= _subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n    unchecked {\\n      _approve(msg.sender, _spender, currentAllowance - _subtractedValue);\\n    }\\n\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Moves tokens `amount` from `_sender` to `_recipient`.\\n   *\\n   * This is internal function is equivalent to {transfer}, and can be used to\\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\\n   *\\n   * Emits a {Transfer} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `_sender` cannot be the zero address.\\n   * - `_recipient` cannot be the zero address.\\n   * - `_sender` must have a balance of at least `amount`.\\n   */\\n  function _transfer(\\n    address _sender,\\n    address _recipient,\\n    uint256 _amount\\n  ) internal virtual {\\n    require(_sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n    require(_recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n    _beforeTokenTransfer(_sender, _recipient, _amount);\\n\\n    uint256 fromBalance = _balances[_sender];\\n    require(fromBalance >= _amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n    unchecked {\\n      _balances[_sender] = fromBalance - _amount;\\n      // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n      // decrementing then incrementing.\\n      _balances[_recipient] += _amount;\\n    }\\n\\n    emit Transfer(_sender, _recipient, _amount);\\n\\n    _afterTokenTransfer(_sender, _recipient, _amount);\\n  }\\n\\n  /** @dev Creates `_amount` tokens and assigns them to `_account`, increasing\\n   * the total supply.\\n   *\\n   * Emits a {Transfer} event with `from` set to the zero address.\\n   *\\n   * Requirements:\\n   *\\n   * - `to` cannot be the zero address.\\n   */\\n  function _mint(address _account, uint256 _amount) internal virtual {\\n    require(_account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n    _beforeTokenTransfer(address(0), _account, _amount);\\n\\n    _totalSupply += _amount;\\n    unchecked {\\n      // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n      _balances[_account] += _amount;\\n    }\\n    emit Transfer(address(0), _account, _amount);\\n\\n    _afterTokenTransfer(address(0), _account, _amount);\\n  }\\n\\n  /**\\n   * @dev Destroys `_amount` tokens from `_account`, reducing the\\n   * total supply.\\n   *\\n   * Emits a {Transfer} event with `to` set to the zero address.\\n   *\\n   * Requirements:\\n   *\\n   * - `_account` cannot be the zero address.\\n   * - `_account` must have at least `_amount` tokens.\\n   */\\n  function _burn(address _account, uint256 _amount) internal virtual {\\n    require(_account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n    _beforeTokenTransfer(_account, address(0), _amount);\\n\\n    uint256 accountBalance = _balances[_account];\\n    require(accountBalance >= _amount, \\\"ERC20: burn amount exceeds balance\\\");\\n    unchecked {\\n      _balances[_account] = accountBalance - _amount;\\n      // Overflow not possible: amount <= accountBalance <= totalSupply\\n      _totalSupply -= _amount;\\n    }\\n\\n    emit Transfer(_account, address(0), _amount);\\n\\n    _afterTokenTransfer(_account, address(0), _amount);\\n  }\\n\\n  /**\\n   * @dev Sets `_amount` as the allowance of `_spender` over the `_owner` s tokens.\\n   *\\n   * This internal function is equivalent to `approve`, and can be used to\\n   * e.g. set automatic allowances for certain subsystems, etc.\\n   *\\n   * Emits an {Approval} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `_owner` cannot be the zero address.\\n   * - `_spender` cannot be the zero address.\\n   */\\n  function _approve(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount\\n  ) internal virtual {\\n    require(_owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n    require(_spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n    _allowances[_owner][_spender] = _amount;\\n    emit Approval(_owner, _spender, _amount);\\n  }\\n\\n  /**\\n   * @dev Updates `_owner` s allowance for `_spender` based on spent `_amount`.\\n   *\\n   * Does not update the allowance amount in case of infinite allowance.\\n   * Revert if not enough allowance is available.\\n   *\\n   * Might emit an {Approval} event.\\n   */\\n  function _spendAllowance(\\n    address _owner,\\n    address _spender,\\n    uint256 _amount\\n  ) internal virtual {\\n    uint256 currentAllowance = allowance(_owner, _spender);\\n    if (currentAllowance != type(uint256).max) {\\n      require(currentAllowance >= _amount, \\\"ERC20: insufficient allowance\\\");\\n      unchecked {\\n        _approve(_owner, _spender, currentAllowance - _amount);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Hook that is called before any transfer of tokens. This includes\\n   * minting and burning.\\n   *\\n   * Calling conditions:\\n   *\\n   * - when `_from` and `_to` are both non-zero, `_amount` of ``_from``'s tokens\\n   * will be to transferred to `_to`.\\n   * - when `_from` is zero, `_amount` tokens will be minted for `_to`.\\n   * - when `_to` is zero, `_amount` of ``_from``'s tokens will be burned.\\n   * - `_from` and `_to` are never both zero.\\n   *\\n   * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n   */\\n  function _beforeTokenTransfer(\\n    address _from,\\n    address _to,\\n    uint256 _amount\\n  ) internal virtual {}\\n\\n  /**\\n   * @dev Hook that is called after any transfer of tokens. This includes\\n   * minting and burning.\\n   *\\n   * Calling conditions:\\n   *\\n   * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n   * has been transferred to `to`.\\n   * - when `from` is zero, `amount` tokens have been minted for `to`.\\n   * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n   * - `from` and `to` are never both zero.\\n   *\\n   * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n   */\\n  function _afterTokenTransfer(\\n    address _from,\\n    address _to,\\n    uint256 _amount\\n  ) internal virtual {}\\n\\n  /**\\n   * @dev See {IERC20Permit-permit}.\\n   * @notice Sets approval from owner to spender to value\\n   * as long as deadline has not passed\\n   * by submitting a valid signature from owner\\n   * Uses EIP 712 structured data hashing & signing\\n   * https://eips.ethereum.org/EIPS/eip-712\\n   * @param _owner The account setting approval & signing the message\\n   * @param _spender The account receiving approval to spend owner's tokens\\n   * @param _value The amount to set approval for\\n   * @param _deadline The timestamp before which the signature must be submitted\\n   * @param _v ECDSA signature v\\n   * @param _r ECDSA signature r\\n   * @param _s ECDSA signature s\\n   */\\n  function permit(\\n    address _owner,\\n    address _spender,\\n    uint256 _value,\\n    uint256 _deadline,\\n    uint8 _v,\\n    bytes32 _r,\\n    bytes32 _s\\n  ) public virtual override {\\n    require(block.timestamp <= _deadline, \\\"ERC20Permit: expired deadline\\\");\\n\\n    bytes32 _structHash = keccak256(\\n      abi.encode(_PERMIT_TYPEHASH, _owner, _spender, _value, _useNonce(_owner), _deadline)\\n    );\\n\\n    bytes32 _hash = _hashTypedDataV4(_structHash);\\n\\n    address _signer = ECDSA.recover(_hash, _v, _r, _s);\\n    require(_signer == _owner, \\\"ERC20Permit: invalid signature\\\");\\n\\n    _approve(_owner, _spender, _value);\\n  }\\n\\n  /**\\n   * @dev See {IERC20Permit-nonces}.\\n   */\\n  function nonces(address _owner) public view virtual override returns (uint256) {\\n    return _nonces[_owner].current();\\n  }\\n\\n  /**\\n   * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.\\n   * This is ALWAYS calculated at runtime because the token name is mutable, not constant.\\n   */\\n  function DOMAIN_SEPARATOR() external view override returns (bytes32) {\\n    return _domainSeparatorV4();\\n  }\\n\\n  /**\\n   * @dev \\\"Consume a nonce\\\": return the current value and increment.\\n   * @dev See {EIP712._buildDomainSeparator}\\n   */\\n  function _useNonce(address _owner) internal virtual returns (uint256 current) {\\n    Counters.Counter storage nonce = _nonces[_owner];\\n    current = nonce.current();\\n    nonce.increment();\\n  }\\n\\n  /**\\n   * @dev Returns the domain separator for the current chain.\\n   * @dev See {EIP712._buildDomainSeparator}\\n   */\\n  function _domainSeparatorV4() internal view returns (bytes32) {\\n    if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n      return _CACHED_DOMAIN_SEPARATOR;\\n    } else {\\n      return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n    }\\n  }\\n\\n  /**\\n   * @dev See {EIP712._buildDomainSeparator}. Made internal to allow usage in parent class.\\n   */\\n  function _buildDomainSeparator(\\n    bytes32 typeHash,\\n    bytes32 nameHash,\\n    bytes32 versionHash\\n  ) internal view returns (bytes32) {\\n    return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n  }\\n\\n  /**\\n   * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n   * function returns the hash of the fully encoded EIP712 message for this domain.\\n   *\\n   * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n   *\\n   * ```solidity\\n   * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n   *     keccak256(\\\"Mail(address to,string contents)\\\"),\\n   *     mailTo,\\n   *     keccak256(bytes(mailContents))\\n   * )));\\n   * address signer = ECDSA.recover(digest, signature);\\n   * ```\\n   */\\n  function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n    return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n  }\\n}\\n\",\"keccak256\":\"0x7219667c651b2cbcbd1866667c5aa5fa1b1120a2fc111f24290c5ece3b3bba52\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IBridgeToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\ninterface IBridgeToken is IERC20Metadata {\\n  function burn(address _from, uint256 _amnt) external;\\n\\n  function mint(address _to, uint256 _amnt) external;\\n\\n  function setDetails(string calldata _name, string calldata _symbol) external;\\n}\\n\",\"keccak256\":\"0x93b2adcc4b953ecd2d3e738d797f5fbde2ccb3726df10bc7acde9c1b4775b019\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/test/TestERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20} from \\\"../core/connext/helpers/OZERC20.sol\\\";\\nimport {IERC20Metadata, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {IBridgeToken} from \\\"../core/connext/interfaces/IBridgeToken.sol\\\";\\n\\n/**\\n * @notice This token is ONLY useful for testing\\n * @dev Anybody can mint as many tokens as they like\\n * @dev Anybody can burn anyone else's tokens\\n */\\ncontract TestERC20 is ERC20, IBridgeToken {\\n  constructor(string memory _name, string memory _symbol) ERC20(18, _name, _symbol, \\\"1\\\") {\\n    _mint(msg.sender, 1000000 ether);\\n  }\\n\\n  // ============ Bridge functions ===============\\n  function setDetails(string calldata _newName, string calldata _newSymbol) external override {\\n    // Does nothing, in practice will update the details to match the hash in message\\n    // not the autodeployed results\\n    _name = _newName;\\n    _symbol = _newSymbol;\\n  }\\n\\n  // ============ Token functions ===============\\n  function balanceOf(address account) public view override(ERC20, IERC20) returns (uint256) {\\n    return ERC20.balanceOf(account);\\n  }\\n\\n  function mint(address account, uint256 amount) external {\\n    _mint(account, amount);\\n  }\\n\\n  function burn(address account, uint256 amount) external {\\n    _burn(account, amount);\\n  }\\n\\n  function symbol() public view override(ERC20, IERC20Metadata) returns (string memory) {\\n    return ERC20.symbol();\\n  }\\n\\n  function name() public view override(ERC20, IERC20Metadata) returns (string memory) {\\n    return ERC20.name();\\n  }\\n\\n  function decimals() public view override(ERC20, IERC20Metadata) returns (uint8) {\\n    return ERC20.decimals();\\n  }\\n}\\n\",\"keccak256\":\"0xa902d583edf740f12ee31f72429456cc025ff9a8a2378fd6edd43d23eeb5158c\",\"license\":\"UNLICENSED\"}},\"version\":1}","storageLayout":{"storage":[{"astId":23198,"contract":"contracts/test/TestERC20.sol:TestERC20","label":"_balances","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":23204,"contract":"contracts/test/TestERC20.sol:TestERC20","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":23206,"contract":"contracts/test/TestERC20.sol:TestERC20","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":23208,"contract":"contracts/test/TestERC20.sol:TestERC20","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":23210,"contract":"contracts/test/TestERC20.sol:TestERC20","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"},{"astId":23212,"contract":"contracts/test/TestERC20.sol:TestERC20","label":"_decimals","offset":0,"slot":"5","type":"t_uint8"},{"astId":23221,"contract":"contracts/test/TestERC20.sol:TestERC20","label":"_nonces","offset":0,"slot":"6","type":"t_mapping(t_address,t_struct(Counter)11512_storage)"},{"astId":23233,"contract":"contracts/test/TestERC20.sol:TestERC20","label":"_CACHED_DOMAIN_SEPARATOR","offset":0,"slot":"7","type":"t_bytes32"},{"astId":23239,"contract":"contracts/test/TestERC20.sol:TestERC20","label":"_HASHED_NAME","offset":0,"slot":"8","type":"t_bytes32"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(Counter)11512_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct Counters.Counter)","numberOfBytes":"32","value":"t_struct(Counter)11512_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(Counter)11512_storage":{"encoding":"inplace","label":"struct Counters.Counter","members":[{"astId":11511,"contract":"contracts/test/TestERC20.sol:TestERC20","label":"_value","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Sets approval from owner to spender to value as long as deadline has not passed by submitting a valid signature from owner Uses EIP 712 structured data hashing & signing https://eips.ethereum.org/EIPS/eip-712"}},"notice":"This token is ONLY useful for testing","version":1}}}}}}